diff --git a/.cirrus.yml b/.cirrus.yml new file mode 100644 index 00000000000..7000bf6816b --- /dev/null +++ b/.cirrus.yml @@ -0,0 +1,31 @@ +#------------------------------------------------------------------------------------------------------- +# Copyright (c) ChakraCore Project Contributors. All rights reserved. +# Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. +#------------------------------------------------------------------------------------------------------- + +task: + name: CMake ARM64.macOS.Debug (noJit) + macos_instance: + image: ghcr.io/cirruslabs/macos-ventura-xcode + Dependencies_script: brew install ninja icu4c && mkdir -p build + CMake_script: cd build && cmake -GNinja -DCMAKE_BUILD_TYPE=Debug -DSTATIC_LIBRARY=ON -DICU_INCLUDE_PATH=/opt/homebrew/opt/icu4c/include -DDISABLE_JIT=ON -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_C_COMPILER=clang .. + Build_script: cd build && ninja + Test_script: cd build && ninja check + +task: + name: CMake ARM64.macOS.ReleaseWithDebug (noJit) + macos_instance: + image: ghcr.io/cirruslabs/macos-ventura-xcode + Dependencies_script: brew install ninja icu4c && mkdir -p build + CMake_script: cd build && cmake -GNinja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DICU_INCLUDE_PATH=/opt/homebrew/opt/icu4c/include -DDISABLE_JIT=ON -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_C_COMPILER=clang .. + Build_script: cd build && ninja + Test_script: cd build && ninja check + +task: + name: CMake ARM64.macOS.Release (noJit) + macos_instance: + image: ghcr.io/cirruslabs/macos-ventura-xcode + Dependencies_script: brew install ninja icu4c && mkdir -p build + CMake_script: cd build && cmake -GNinja -DCMAKE_BUILD_TYPE=Release -DSTATIC_LIBRARY=ON -DICU_INCLUDE_PATH=/opt/homebrew/opt/icu4c/include -DDISABLE_JIT=ON -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_C_COMPILER=clang .. + Build_script: cd build && ninja + Test_script: cd build && ninja check diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000000..90120a467d7 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,18 @@ +root = true + +# See https://github.com/chakra-core/ChakraCore/wiki/Coding-Convention + +[*] +indent_style = space +indent_size = 4 + +# See https://learn.microsoft.com/en-us/visualstudio/ide/cpp-editorconfig-properties?view=vs-2019 +[*.{cpp,h,inl}] +cpp_space_pointer_reference_alignment = right +cpp_new_line_before_open_brace_block = new_line +cpp_new_line_before_catch = true +cpp_new_line_before_else = true + +# Xml files +[*.xml] +indent_size = 2 diff --git a/.gitattributes b/.gitattributes index d179809ca9c..3c1cc129f9e 100644 --- a/.gitattributes +++ b/.gitattributes @@ -3,6 +3,7 @@ test/**/*.js -crlf test/es6/HTMLComments.js binary diff=cpp *.wasm binary +lib/**/*.js eol=lf diff=cpp *.cpp text eol=lf diff=cpp *.h text eol=lf diff=cpp *.inl text eol=lf diff=cpp diff --git a/.github/ISSUE_TEMPLATE/01-bug.yml b/.github/ISSUE_TEMPLATE/01-bug.yml new file mode 100644 index 00000000000..c1a87ff2a0c --- /dev/null +++ b/.github/ISSUE_TEMPLATE/01-bug.yml @@ -0,0 +1,37 @@ +name: Bug report +description: Report a general bug in ChakraCore +title: '[Bug]: ' +labels: + - Bug +body: + - type: input + attributes: + label: ChakraCore Version + description: Specify the version of ChakraCore you are using + placeholder: Version / Commit id + validations: + required: true + - type: textarea + attributes: + label: Steps to reproduce + description: Provide steps to reproduce the problem + placeholder: Instructions used to build and execute / Project setup + validations: + required: true + - type: textarea + attributes: + label: Proof of concept + description: Your POC code + render: js + validations: + required: true + - type: textarea + attributes: + label: Exception or Error + description: Provide error logs / console output + render: text + validations: + required: true + - type: textarea + attributes: + label: Additional Context diff --git a/.github/ISSUE_TEMPLATE/02-build-issue.yml b/.github/ISSUE_TEMPLATE/02-build-issue.yml new file mode 100644 index 00000000000..11f11a4eadc --- /dev/null +++ b/.github/ISSUE_TEMPLATE/02-build-issue.yml @@ -0,0 +1,36 @@ +name: Build Issue +description: Report a build issue +title: '[Build]: ' +labels: + - Build Break +body: + - type: input + attributes: + label: Operating System + description: Specify the OS (with version) you are using + placeholder: Name + Version + validations: + required: true + - type: input + attributes: + label: Compiler + description: Specify the compiler (with version) you are using + placeholder: Name + Version + validations: + required: true + - type: input + attributes: + label: ChakraCore Version + description: Specify the version of ChakraCore you are using + placeholder: Version / Commit id + validations: + required: true + - type: textarea + attributes: + label: Compiler output + render: shell + validations: + required: true + - type: textarea + attributes: + label: Additional Context diff --git a/.github/ISSUE_TEMPLATE/03-jsrt-bug.yaml b/.github/ISSUE_TEMPLATE/03-jsrt-bug.yaml new file mode 100644 index 00000000000..98924206a81 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/03-jsrt-bug.yaml @@ -0,0 +1,37 @@ +name: Api Bug +description: Report a bug with the embedding api +title: '[Api]: ' +labels: + - APIs + - Bug +body: + - type: input + attributes: + label: Operating System + description: Specify the OS (with version) you are using + placeholder: Name + Version + validations: + required: true + - type: input + attributes: + label: ChakraCore Version + description: Specify the version of ChakraCore you are using + placeholder: Version / Commit id + validations: + required: true + - type: textarea + attributes: + label: Steps to reproduce + description: Please describe how your project is set-up + validations: + required: true + - type: textarea + attributes: + label: Proof of concept + description: Add some minimal poc that triggers the bug + render: cpp + validations: + required: true + - type: textarea + attributes: + label: Additional context diff --git a/.github/ISSUE_TEMPLATE/04-jsrt-feature-request.yml b/.github/ISSUE_TEMPLATE/04-jsrt-feature-request.yml new file mode 100644 index 00000000000..7452ce935b1 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/04-jsrt-feature-request.yml @@ -0,0 +1,24 @@ +name: Api Feature Request +description: Propose a new feature to the embedding api +title: '[Api]: ' +labels: + - APIs + - Feature Request +body: + - type: textarea + attributes: + label: Description + description: A clear and concise description of the problem or missing capability + validations: + required: true + - type: textarea + attributes: + label: Describe the solution you'd like + description: If you have a solution in mind, please describe it. + - type: textarea + attributes: + label: Describe alternatives you've considered + description: Have you considered any alternative solutions or workarounds? + - type: textarea + attributes: + label: Additional context diff --git a/.github/ISSUE_TEMPLATE/05-tc39-proposal.yml b/.github/ISSUE_TEMPLATE/05-tc39-proposal.yml new file mode 100644 index 00000000000..f55852a96a1 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/05-tc39-proposal.yml @@ -0,0 +1,26 @@ +name: Implement tc39 proposal +description: Request the implementation of a tc39 proposal +title: '[Proposal]: ' +labels: + - ECMAScript Spec + - Feature Request +body: + - type: input + attributes: + label: Link to proposal + placeholder: https://github.com/tc39/... + validations: + required: true + - type: dropdown + attributes: + label: Proposal stage + options: + - Stage 4 + - Stage 3 + - Stage 2.7 + - Stage 2 + validations: + required: true + - type: textarea + attributes: + label: Additional Context diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 00000000000..c3469ee2494 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,5 @@ +blank_issues_enabled: true +contact_links: + - name: Discord + url: https://discord.gg/dgRawPdNuC + about: If you have any questions, feel free to join our Discord server. diff --git a/.github/workflows/agreement.yml b/.github/workflows/agreement.yml new file mode 100644 index 00000000000..05d98a8dd65 --- /dev/null +++ b/.github/workflows/agreement.yml @@ -0,0 +1,18 @@ +name: "Contribution Agreement" +on: + pull_request + +jobs: + AgreementCheck: + runs-on: ubuntu-latest + if: ${{ github.actor != 'dependabot[bot]' }} + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + fetch-depth: 0 + - run: | + echo Looking up contributor + tail -n +36 ContributionAgreement.md | awk -F\| '{print $3}' | grep -w $USER + env: + USER: ${{ github.actor }} diff --git a/.gitignore b/.gitignore index 7c2254493f6..da133ae06dc 100644 --- a/.gitignore +++ b/.gitignore @@ -77,6 +77,8 @@ install_manifest.txt # ICU deps/Chakra.ICU/Chakra.ICU.props deps/Chakra.ICU/icu +# CMake External Project +deps/thirdparty # VIM .*.swo @@ -94,7 +96,6 @@ tags *.dylib Makefile pal/src/config.h -DbgController.js.h lib/wabt/built/config.h # Generated by other tools diff --git a/Build/Chakra.Build.Clang.Default.props b/Build/Chakra.Build.Clang.Default.props index dfb766246c5..4ad30b8877a 100644 --- a/Build/Chakra.Build.Clang.Default.props +++ b/Build/Chakra.Build.Clang.Default.props @@ -1,7 +1,7 @@ - + LLVM-vs2014 diff --git a/Build/Chakra.Build.Clang.props b/Build/Chakra.Build.Clang.props index 61637d60cae..2f697fdf1ad 100644 --- a/Build/Chakra.Build.Clang.props +++ b/Build/Chakra.Build.Clang.props @@ -61,7 +61,9 @@ -Wno-microsoft-extra-qualification -Wno-microsoft-default-arg-redefinition -Wno-microsoft-exception-spec - -v + -Wno-clang-cl-pch + -Wno-unused-lambda-capture + -Wno-pragma-pack OldStyle diff --git a/Build/Chakra.Build.Clang.targets b/Build/Chakra.Build.Clang.targets index cefd385aad2..e2d2b5d70d2 100644 --- a/Build/Chakra.Build.Clang.targets +++ b/Build/Chakra.Build.Clang.targets @@ -126,4 +126,4 @@ > - \ No newline at end of file + diff --git a/Build/Chakra.Core.sln b/Build/Chakra.Core.sln index 0a852832b0e..4251e5fe208 100644 --- a/Build/Chakra.Core.sln +++ b/Build/Chakra.Core.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 15 -VisualStudioVersion = 15.0.26228.4 +VisualStudioVersion = 15.0.26726.0 MinimumVisualStudioVersion = 14.0.00000.0 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ChakraCore", "..\bin\ChakraCore\ChakraCore.vcxproj", "{EA882C8D-81FC-42FE-ABD5-2666DB933FDB}" ProjectSection(ProjectDependencies) = postProject @@ -166,18 +166,28 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Chakra.ICU.i18n", "..\deps\ EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Chakra.ICU.Stubdata", "..\deps\Chakra.ICU\Chakra.ICU.Stubdata.vcxproj", "{E14F373D-05A0-4259-A5E9-AFE8405FB847}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Chakra.SCACore", "..\lib\SCACore\Chakra.SCACore.vcxproj", "{4DA3A367-6ED2-4EE8-9698-5BCD0B8AF7F5}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "EditorConfig", "EditorConfig", "{9EAC0ED9-9EC0-492E-975B-92CA3FE527C8}" + ProjectSection(SolutionItems) = preProject + ..\.editorconfig = ..\.editorconfig + EndProjectSection +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|ARM = Debug|ARM Debug|ARM64 = Debug|ARM64 + Debug|CHPE = Debug|CHPE Debug|x64 = Debug|x64 Debug|x86 = Debug|x86 Release|ARM = Release|ARM Release|ARM64 = Release|ARM64 + Release|CHPE = Release|CHPE Release|x64 = Release|x64 Release|x86 = Release|x86 Test|ARM = Test|ARM Test|ARM64 = Test|ARM64 + Test|CHPE = Test|CHPE Test|x64 = Test|x64 Test|x86 = Test|x86 EndGlobalSection @@ -186,6 +196,8 @@ Global {EA882C8D-81FC-42FE-ABD5-2666DB933FDB}.Debug|ARM.Build.0 = Debug|ARM {EA882C8D-81FC-42FE-ABD5-2666DB933FDB}.Debug|ARM64.ActiveCfg = Debug|ARM64 {EA882C8D-81FC-42FE-ABD5-2666DB933FDB}.Debug|ARM64.Build.0 = Debug|ARM64 + {EA882C8D-81FC-42FE-ABD5-2666DB933FDB}.Debug|CHPE.ActiveCfg = Debug|CHPE + {EA882C8D-81FC-42FE-ABD5-2666DB933FDB}.Debug|CHPE.Build.0 = Debug|CHPE {EA882C8D-81FC-42FE-ABD5-2666DB933FDB}.Debug|x64.ActiveCfg = Debug|x64 {EA882C8D-81FC-42FE-ABD5-2666DB933FDB}.Debug|x64.Build.0 = Debug|x64 {EA882C8D-81FC-42FE-ABD5-2666DB933FDB}.Debug|x86.ActiveCfg = Debug|Win32 @@ -194,6 +206,8 @@ Global {EA882C8D-81FC-42FE-ABD5-2666DB933FDB}.Release|ARM.Build.0 = Release|ARM {EA882C8D-81FC-42FE-ABD5-2666DB933FDB}.Release|ARM64.ActiveCfg = Release|ARM64 {EA882C8D-81FC-42FE-ABD5-2666DB933FDB}.Release|ARM64.Build.0 = Release|ARM64 + {EA882C8D-81FC-42FE-ABD5-2666DB933FDB}.Release|CHPE.ActiveCfg = Release|CHPE + {EA882C8D-81FC-42FE-ABD5-2666DB933FDB}.Release|CHPE.Build.0 = Release|CHPE {EA882C8D-81FC-42FE-ABD5-2666DB933FDB}.Release|x64.ActiveCfg = Release|x64 {EA882C8D-81FC-42FE-ABD5-2666DB933FDB}.Release|x64.Build.0 = Release|x64 {EA882C8D-81FC-42FE-ABD5-2666DB933FDB}.Release|x86.ActiveCfg = Release|Win32 @@ -202,6 +216,8 @@ Global {EA882C8D-81FC-42FE-ABD5-2666DB933FDB}.Test|ARM.Build.0 = Test|ARM {EA882C8D-81FC-42FE-ABD5-2666DB933FDB}.Test|ARM64.ActiveCfg = Test|ARM64 {EA882C8D-81FC-42FE-ABD5-2666DB933FDB}.Test|ARM64.Build.0 = Test|ARM64 + {EA882C8D-81FC-42FE-ABD5-2666DB933FDB}.Test|CHPE.ActiveCfg = Test|CHPE + {EA882C8D-81FC-42FE-ABD5-2666DB933FDB}.Test|CHPE.Build.0 = Test|CHPE {EA882C8D-81FC-42FE-ABD5-2666DB933FDB}.Test|x64.ActiveCfg = Test|x64 {EA882C8D-81FC-42FE-ABD5-2666DB933FDB}.Test|x64.Build.0 = Test|x64 {EA882C8D-81FC-42FE-ABD5-2666DB933FDB}.Test|x86.ActiveCfg = Test|Win32 @@ -210,6 +226,10 @@ Global {1876E800-AD77-48C4-A2F7-E5265F24AC38}.Debug|ARM.Build.0 = Debug|ARM {1876E800-AD77-48C4-A2F7-E5265F24AC38}.Debug|ARM64.ActiveCfg = Debug|ARM64 {1876E800-AD77-48C4-A2F7-E5265F24AC38}.Debug|ARM64.Build.0 = Debug|ARM64 + {1876E800-AD77-48C4-A2F7-E5265F24AC38}.Debug|ARM64.Deploy.0 = Debug|ARM64 + {1876E800-AD77-48C4-A2F7-E5265F24AC38}.Debug|CHPE.ActiveCfg = Debug|CHPE + {1876E800-AD77-48C4-A2F7-E5265F24AC38}.Debug|CHPE.Build.0 = Debug|CHPE + {1876E800-AD77-48C4-A2F7-E5265F24AC38}.Debug|CHPE.Deploy.0 = Debug|CHPE {1876E800-AD77-48C4-A2F7-E5265F24AC38}.Debug|x64.ActiveCfg = Debug|x64 {1876E800-AD77-48C4-A2F7-E5265F24AC38}.Debug|x64.Build.0 = Debug|x64 {1876E800-AD77-48C4-A2F7-E5265F24AC38}.Debug|x86.ActiveCfg = Debug|Win32 @@ -218,6 +238,10 @@ Global {1876E800-AD77-48C4-A2F7-E5265F24AC38}.Release|ARM.Build.0 = Release|ARM {1876E800-AD77-48C4-A2F7-E5265F24AC38}.Release|ARM64.ActiveCfg = Release|ARM64 {1876E800-AD77-48C4-A2F7-E5265F24AC38}.Release|ARM64.Build.0 = Release|ARM64 + {1876E800-AD77-48C4-A2F7-E5265F24AC38}.Release|ARM64.Deploy.0 = Release|ARM64 + {1876E800-AD77-48C4-A2F7-E5265F24AC38}.Release|CHPE.ActiveCfg = Release|CHPE + {1876E800-AD77-48C4-A2F7-E5265F24AC38}.Release|CHPE.Build.0 = Release|CHPE + {1876E800-AD77-48C4-A2F7-E5265F24AC38}.Release|CHPE.Deploy.0 = Release|CHPE {1876E800-AD77-48C4-A2F7-E5265F24AC38}.Release|x64.ActiveCfg = Release|x64 {1876E800-AD77-48C4-A2F7-E5265F24AC38}.Release|x64.Build.0 = Release|x64 {1876E800-AD77-48C4-A2F7-E5265F24AC38}.Release|x86.ActiveCfg = Release|Win32 @@ -226,6 +250,10 @@ Global {1876E800-AD77-48C4-A2F7-E5265F24AC38}.Test|ARM.Build.0 = Test|ARM {1876E800-AD77-48C4-A2F7-E5265F24AC38}.Test|ARM64.ActiveCfg = Test|ARM64 {1876E800-AD77-48C4-A2F7-E5265F24AC38}.Test|ARM64.Build.0 = Test|ARM64 + {1876E800-AD77-48C4-A2F7-E5265F24AC38}.Test|ARM64.Deploy.0 = Test|ARM64 + {1876E800-AD77-48C4-A2F7-E5265F24AC38}.Test|CHPE.ActiveCfg = Test|CHPE + {1876E800-AD77-48C4-A2F7-E5265F24AC38}.Test|CHPE.Build.0 = Test|CHPE + {1876E800-AD77-48C4-A2F7-E5265F24AC38}.Test|CHPE.Deploy.0 = Test|CHPE {1876E800-AD77-48C4-A2F7-E5265F24AC38}.Test|x64.ActiveCfg = Test|x64 {1876E800-AD77-48C4-A2F7-E5265F24AC38}.Test|x64.Build.0 = Test|x64 {1876E800-AD77-48C4-A2F7-E5265F24AC38}.Test|x86.ActiveCfg = Test|Win32 @@ -234,6 +262,10 @@ Global {706083F7-6AA4-4558-A153-6352EF9110F5}.Debug|ARM.Build.0 = Debug|ARM {706083F7-6AA4-4558-A153-6352EF9110F5}.Debug|ARM64.ActiveCfg = Debug|ARM64 {706083F7-6AA4-4558-A153-6352EF9110F5}.Debug|ARM64.Build.0 = Debug|ARM64 + {706083F7-6AA4-4558-A153-6352EF9110F5}.Debug|ARM64.Deploy.0 = Debug|ARM64 + {706083F7-6AA4-4558-A153-6352EF9110F5}.Debug|CHPE.ActiveCfg = Debug|CHPE + {706083F7-6AA4-4558-A153-6352EF9110F5}.Debug|CHPE.Build.0 = Debug|CHPE + {706083F7-6AA4-4558-A153-6352EF9110F5}.Debug|CHPE.Deploy.0 = Debug|CHPE {706083F7-6AA4-4558-A153-6352EF9110F5}.Debug|x64.ActiveCfg = Debug|x64 {706083F7-6AA4-4558-A153-6352EF9110F5}.Debug|x64.Build.0 = Debug|x64 {706083F7-6AA4-4558-A153-6352EF9110F5}.Debug|x86.ActiveCfg = Debug|Win32 @@ -242,6 +274,10 @@ Global {706083F7-6AA4-4558-A153-6352EF9110F5}.Release|ARM.Build.0 = Release|ARM {706083F7-6AA4-4558-A153-6352EF9110F5}.Release|ARM64.ActiveCfg = Release|ARM64 {706083F7-6AA4-4558-A153-6352EF9110F5}.Release|ARM64.Build.0 = Release|ARM64 + {706083F7-6AA4-4558-A153-6352EF9110F5}.Release|ARM64.Deploy.0 = Release|ARM64 + {706083F7-6AA4-4558-A153-6352EF9110F5}.Release|CHPE.ActiveCfg = Release|CHPE + {706083F7-6AA4-4558-A153-6352EF9110F5}.Release|CHPE.Build.0 = Release|CHPE + {706083F7-6AA4-4558-A153-6352EF9110F5}.Release|CHPE.Deploy.0 = Release|CHPE {706083F7-6AA4-4558-A153-6352EF9110F5}.Release|x64.ActiveCfg = Release|x64 {706083F7-6AA4-4558-A153-6352EF9110F5}.Release|x64.Build.0 = Release|x64 {706083F7-6AA4-4558-A153-6352EF9110F5}.Release|x86.ActiveCfg = Release|Win32 @@ -250,6 +286,10 @@ Global {706083F7-6AA4-4558-A153-6352EF9110F5}.Test|ARM.Build.0 = Test|ARM {706083F7-6AA4-4558-A153-6352EF9110F5}.Test|ARM64.ActiveCfg = Test|ARM64 {706083F7-6AA4-4558-A153-6352EF9110F5}.Test|ARM64.Build.0 = Test|ARM64 + {706083F7-6AA4-4558-A153-6352EF9110F5}.Test|ARM64.Deploy.0 = Test|ARM64 + {706083F7-6AA4-4558-A153-6352EF9110F5}.Test|CHPE.ActiveCfg = Test|CHPE + {706083F7-6AA4-4558-A153-6352EF9110F5}.Test|CHPE.Build.0 = Test|CHPE + {706083F7-6AA4-4558-A153-6352EF9110F5}.Test|CHPE.Deploy.0 = Test|CHPE {706083F7-6AA4-4558-A153-6352EF9110F5}.Test|x64.ActiveCfg = Test|x64 {706083F7-6AA4-4558-A153-6352EF9110F5}.Test|x64.Build.0 = Test|x64 {706083F7-6AA4-4558-A153-6352EF9110F5}.Test|x86.ActiveCfg = Test|Win32 @@ -258,6 +298,10 @@ Global {8C61E4E7-F0D6-420D-A352-3E6E50D406DD}.Debug|ARM.Build.0 = Debug|ARM {8C61E4E7-F0D6-420D-A352-3E6E50D406DD}.Debug|ARM64.ActiveCfg = Debug|ARM64 {8C61E4E7-F0D6-420D-A352-3E6E50D406DD}.Debug|ARM64.Build.0 = Debug|ARM64 + {8C61E4E7-F0D6-420D-A352-3E6E50D406DD}.Debug|ARM64.Deploy.0 = Debug|ARM64 + {8C61E4E7-F0D6-420D-A352-3E6E50D406DD}.Debug|CHPE.ActiveCfg = Debug|CHPE + {8C61E4E7-F0D6-420D-A352-3E6E50D406DD}.Debug|CHPE.Build.0 = Debug|CHPE + {8C61E4E7-F0D6-420D-A352-3E6E50D406DD}.Debug|CHPE.Deploy.0 = Debug|CHPE {8C61E4E7-F0D6-420D-A352-3E6E50D406DD}.Debug|x64.ActiveCfg = Debug|x64 {8C61E4E7-F0D6-420D-A352-3E6E50D406DD}.Debug|x64.Build.0 = Debug|x64 {8C61E4E7-F0D6-420D-A352-3E6E50D406DD}.Debug|x86.ActiveCfg = Debug|Win32 @@ -266,6 +310,10 @@ Global {8C61E4E7-F0D6-420D-A352-3E6E50D406DD}.Release|ARM.Build.0 = Release|ARM {8C61E4E7-F0D6-420D-A352-3E6E50D406DD}.Release|ARM64.ActiveCfg = Release|ARM64 {8C61E4E7-F0D6-420D-A352-3E6E50D406DD}.Release|ARM64.Build.0 = Release|ARM64 + {8C61E4E7-F0D6-420D-A352-3E6E50D406DD}.Release|ARM64.Deploy.0 = Release|ARM64 + {8C61E4E7-F0D6-420D-A352-3E6E50D406DD}.Release|CHPE.ActiveCfg = Release|CHPE + {8C61E4E7-F0D6-420D-A352-3E6E50D406DD}.Release|CHPE.Build.0 = Release|CHPE + {8C61E4E7-F0D6-420D-A352-3E6E50D406DD}.Release|CHPE.Deploy.0 = Release|CHPE {8C61E4E7-F0D6-420D-A352-3E6E50D406DD}.Release|x64.ActiveCfg = Release|x64 {8C61E4E7-F0D6-420D-A352-3E6E50D406DD}.Release|x64.Build.0 = Release|x64 {8C61E4E7-F0D6-420D-A352-3E6E50D406DD}.Release|x86.ActiveCfg = Release|Win32 @@ -274,6 +322,10 @@ Global {8C61E4E7-F0D6-420D-A352-3E6E50D406DD}.Test|ARM.Build.0 = Test|ARM {8C61E4E7-F0D6-420D-A352-3E6E50D406DD}.Test|ARM64.ActiveCfg = Test|ARM64 {8C61E4E7-F0D6-420D-A352-3E6E50D406DD}.Test|ARM64.Build.0 = Test|ARM64 + {8C61E4E7-F0D6-420D-A352-3E6E50D406DD}.Test|ARM64.Deploy.0 = Test|ARM64 + {8C61E4E7-F0D6-420D-A352-3E6E50D406DD}.Test|CHPE.ActiveCfg = Test|CHPE + {8C61E4E7-F0D6-420D-A352-3E6E50D406DD}.Test|CHPE.Build.0 = Test|CHPE + {8C61E4E7-F0D6-420D-A352-3E6E50D406DD}.Test|CHPE.Deploy.0 = Test|CHPE {8C61E4E7-F0D6-420D-A352-3E6E50D406DD}.Test|x64.ActiveCfg = Test|x64 {8C61E4E7-F0D6-420D-A352-3E6E50D406DD}.Test|x64.Build.0 = Test|x64 {8C61E4E7-F0D6-420D-A352-3E6E50D406DD}.Test|x86.ActiveCfg = Test|Win32 @@ -282,6 +334,10 @@ Global {706083F7-6AA4-4558-A153-6352EF9110F8}.Debug|ARM.Build.0 = Debug|ARM {706083F7-6AA4-4558-A153-6352EF9110F8}.Debug|ARM64.ActiveCfg = Debug|ARM64 {706083F7-6AA4-4558-A153-6352EF9110F8}.Debug|ARM64.Build.0 = Debug|ARM64 + {706083F7-6AA4-4558-A153-6352EF9110F8}.Debug|ARM64.Deploy.0 = Debug|ARM64 + {706083F7-6AA4-4558-A153-6352EF9110F8}.Debug|CHPE.ActiveCfg = Debug|CHPE + {706083F7-6AA4-4558-A153-6352EF9110F8}.Debug|CHPE.Build.0 = Debug|CHPE + {706083F7-6AA4-4558-A153-6352EF9110F8}.Debug|CHPE.Deploy.0 = Debug|CHPE {706083F7-6AA4-4558-A153-6352EF9110F8}.Debug|x64.ActiveCfg = Debug|x64 {706083F7-6AA4-4558-A153-6352EF9110F8}.Debug|x64.Build.0 = Debug|x64 {706083F7-6AA4-4558-A153-6352EF9110F8}.Debug|x86.ActiveCfg = Debug|Win32 @@ -290,6 +346,10 @@ Global {706083F7-6AA4-4558-A153-6352EF9110F8}.Release|ARM.Build.0 = Release|ARM {706083F7-6AA4-4558-A153-6352EF9110F8}.Release|ARM64.ActiveCfg = Release|ARM64 {706083F7-6AA4-4558-A153-6352EF9110F8}.Release|ARM64.Build.0 = Release|ARM64 + {706083F7-6AA4-4558-A153-6352EF9110F8}.Release|ARM64.Deploy.0 = Release|ARM64 + {706083F7-6AA4-4558-A153-6352EF9110F8}.Release|CHPE.ActiveCfg = Release|CHPE + {706083F7-6AA4-4558-A153-6352EF9110F8}.Release|CHPE.Build.0 = Release|CHPE + {706083F7-6AA4-4558-A153-6352EF9110F8}.Release|CHPE.Deploy.0 = Release|CHPE {706083F7-6AA4-4558-A153-6352EF9110F8}.Release|x64.ActiveCfg = Release|x64 {706083F7-6AA4-4558-A153-6352EF9110F8}.Release|x64.Build.0 = Release|x64 {706083F7-6AA4-4558-A153-6352EF9110F8}.Release|x86.ActiveCfg = Release|Win32 @@ -298,6 +358,10 @@ Global {706083F7-6AA4-4558-A153-6352EF9110F8}.Test|ARM.Build.0 = Test|ARM {706083F7-6AA4-4558-A153-6352EF9110F8}.Test|ARM64.ActiveCfg = Test|ARM64 {706083F7-6AA4-4558-A153-6352EF9110F8}.Test|ARM64.Build.0 = Test|ARM64 + {706083F7-6AA4-4558-A153-6352EF9110F8}.Test|ARM64.Deploy.0 = Test|ARM64 + {706083F7-6AA4-4558-A153-6352EF9110F8}.Test|CHPE.ActiveCfg = Test|CHPE + {706083F7-6AA4-4558-A153-6352EF9110F8}.Test|CHPE.Build.0 = Test|CHPE + {706083F7-6AA4-4558-A153-6352EF9110F8}.Test|CHPE.Deploy.0 = Test|CHPE {706083F7-6AA4-4558-A153-6352EF9110F8}.Test|x64.ActiveCfg = Test|x64 {706083F7-6AA4-4558-A153-6352EF9110F8}.Test|x64.Build.0 = Test|x64 {706083F7-6AA4-4558-A153-6352EF9110F8}.Test|x86.ActiveCfg = Test|Win32 @@ -306,6 +370,10 @@ Global {706083F7-6AA4-4558-A153-6352EF9110F7}.Debug|ARM.Build.0 = Debug|ARM {706083F7-6AA4-4558-A153-6352EF9110F7}.Debug|ARM64.ActiveCfg = Debug|ARM64 {706083F7-6AA4-4558-A153-6352EF9110F7}.Debug|ARM64.Build.0 = Debug|ARM64 + {706083F7-6AA4-4558-A153-6352EF9110F7}.Debug|ARM64.Deploy.0 = Debug|ARM64 + {706083F7-6AA4-4558-A153-6352EF9110F7}.Debug|CHPE.ActiveCfg = Debug|CHPE + {706083F7-6AA4-4558-A153-6352EF9110F7}.Debug|CHPE.Build.0 = Debug|CHPE + {706083F7-6AA4-4558-A153-6352EF9110F7}.Debug|CHPE.Deploy.0 = Debug|CHPE {706083F7-6AA4-4558-A153-6352EF9110F7}.Debug|x64.ActiveCfg = Debug|x64 {706083F7-6AA4-4558-A153-6352EF9110F7}.Debug|x64.Build.0 = Debug|x64 {706083F7-6AA4-4558-A153-6352EF9110F7}.Debug|x86.ActiveCfg = Debug|Win32 @@ -314,6 +382,10 @@ Global {706083F7-6AA4-4558-A153-6352EF9110F7}.Release|ARM.Build.0 = Release|ARM {706083F7-6AA4-4558-A153-6352EF9110F7}.Release|ARM64.ActiveCfg = Release|ARM64 {706083F7-6AA4-4558-A153-6352EF9110F7}.Release|ARM64.Build.0 = Release|ARM64 + {706083F7-6AA4-4558-A153-6352EF9110F7}.Release|ARM64.Deploy.0 = Release|ARM64 + {706083F7-6AA4-4558-A153-6352EF9110F7}.Release|CHPE.ActiveCfg = Release|CHPE + {706083F7-6AA4-4558-A153-6352EF9110F7}.Release|CHPE.Build.0 = Release|CHPE + {706083F7-6AA4-4558-A153-6352EF9110F7}.Release|CHPE.Deploy.0 = Release|CHPE {706083F7-6AA4-4558-A153-6352EF9110F7}.Release|x64.ActiveCfg = Release|x64 {706083F7-6AA4-4558-A153-6352EF9110F7}.Release|x64.Build.0 = Release|x64 {706083F7-6AA4-4558-A153-6352EF9110F7}.Release|x86.ActiveCfg = Release|Win32 @@ -322,6 +394,10 @@ Global {706083F7-6AA4-4558-A153-6352EF9110F7}.Test|ARM.Build.0 = Test|ARM {706083F7-6AA4-4558-A153-6352EF9110F7}.Test|ARM64.ActiveCfg = Test|ARM64 {706083F7-6AA4-4558-A153-6352EF9110F7}.Test|ARM64.Build.0 = Test|ARM64 + {706083F7-6AA4-4558-A153-6352EF9110F7}.Test|ARM64.Deploy.0 = Test|ARM64 + {706083F7-6AA4-4558-A153-6352EF9110F7}.Test|CHPE.ActiveCfg = Test|CHPE + {706083F7-6AA4-4558-A153-6352EF9110F7}.Test|CHPE.Build.0 = Test|CHPE + {706083F7-6AA4-4558-A153-6352EF9110F7}.Test|CHPE.Deploy.0 = Test|CHPE {706083F7-6AA4-4558-A153-6352EF9110F7}.Test|x64.ActiveCfg = Test|x64 {706083F7-6AA4-4558-A153-6352EF9110F7}.Test|x64.Build.0 = Test|x64 {706083F7-6AA4-4558-A153-6352EF9110F7}.Test|x86.ActiveCfg = Test|Win32 @@ -330,6 +406,10 @@ Global {706083F7-6AA4-4558-A153-6352EF9110F6}.Debug|ARM.Build.0 = Debug|ARM {706083F7-6AA4-4558-A153-6352EF9110F6}.Debug|ARM64.ActiveCfg = Debug|ARM64 {706083F7-6AA4-4558-A153-6352EF9110F6}.Debug|ARM64.Build.0 = Debug|ARM64 + {706083F7-6AA4-4558-A153-6352EF9110F6}.Debug|ARM64.Deploy.0 = Debug|ARM64 + {706083F7-6AA4-4558-A153-6352EF9110F6}.Debug|CHPE.ActiveCfg = Debug|CHPE + {706083F7-6AA4-4558-A153-6352EF9110F6}.Debug|CHPE.Build.0 = Debug|CHPE + {706083F7-6AA4-4558-A153-6352EF9110F6}.Debug|CHPE.Deploy.0 = Debug|CHPE {706083F7-6AA4-4558-A153-6352EF9110F6}.Debug|x64.ActiveCfg = Debug|x64 {706083F7-6AA4-4558-A153-6352EF9110F6}.Debug|x64.Build.0 = Debug|x64 {706083F7-6AA4-4558-A153-6352EF9110F6}.Debug|x86.ActiveCfg = Debug|Win32 @@ -338,6 +418,10 @@ Global {706083F7-6AA4-4558-A153-6352EF9110F6}.Release|ARM.Build.0 = Release|ARM {706083F7-6AA4-4558-A153-6352EF9110F6}.Release|ARM64.ActiveCfg = Release|ARM64 {706083F7-6AA4-4558-A153-6352EF9110F6}.Release|ARM64.Build.0 = Release|ARM64 + {706083F7-6AA4-4558-A153-6352EF9110F6}.Release|ARM64.Deploy.0 = Release|ARM64 + {706083F7-6AA4-4558-A153-6352EF9110F6}.Release|CHPE.ActiveCfg = Release|CHPE + {706083F7-6AA4-4558-A153-6352EF9110F6}.Release|CHPE.Build.0 = Release|CHPE + {706083F7-6AA4-4558-A153-6352EF9110F6}.Release|CHPE.Deploy.0 = Release|CHPE {706083F7-6AA4-4558-A153-6352EF9110F6}.Release|x64.ActiveCfg = Release|x64 {706083F7-6AA4-4558-A153-6352EF9110F6}.Release|x64.Build.0 = Release|x64 {706083F7-6AA4-4558-A153-6352EF9110F6}.Release|x86.ActiveCfg = Release|Win32 @@ -346,6 +430,10 @@ Global {706083F7-6AA4-4558-A153-6352EF9110F6}.Test|ARM.Build.0 = Test|ARM {706083F7-6AA4-4558-A153-6352EF9110F6}.Test|ARM64.ActiveCfg = Test|ARM64 {706083F7-6AA4-4558-A153-6352EF9110F6}.Test|ARM64.Build.0 = Test|ARM64 + {706083F7-6AA4-4558-A153-6352EF9110F6}.Test|ARM64.Deploy.0 = Test|ARM64 + {706083F7-6AA4-4558-A153-6352EF9110F6}.Test|CHPE.ActiveCfg = Test|CHPE + {706083F7-6AA4-4558-A153-6352EF9110F6}.Test|CHPE.Build.0 = Test|CHPE + {706083F7-6AA4-4558-A153-6352EF9110F6}.Test|CHPE.Deploy.0 = Test|CHPE {706083F7-6AA4-4558-A153-6352EF9110F6}.Test|x64.ActiveCfg = Test|x64 {706083F7-6AA4-4558-A153-6352EF9110F6}.Test|x64.Build.0 = Test|x64 {706083F7-6AA4-4558-A153-6352EF9110F6}.Test|x86.ActiveCfg = Test|Win32 @@ -354,6 +442,10 @@ Global {BB4153FF-AC3E-4734-B562-CC23812DF31B}.Debug|ARM.Build.0 = Debug|ARM {BB4153FF-AC3E-4734-B562-CC23812DF31B}.Debug|ARM64.ActiveCfg = Debug|ARM64 {BB4153FF-AC3E-4734-B562-CC23812DF31B}.Debug|ARM64.Build.0 = Debug|ARM64 + {BB4153FF-AC3E-4734-B562-CC23812DF31B}.Debug|ARM64.Deploy.0 = Debug|ARM64 + {BB4153FF-AC3E-4734-B562-CC23812DF31B}.Debug|CHPE.ActiveCfg = Debug|CHPE + {BB4153FF-AC3E-4734-B562-CC23812DF31B}.Debug|CHPE.Build.0 = Debug|CHPE + {BB4153FF-AC3E-4734-B562-CC23812DF31B}.Debug|CHPE.Deploy.0 = Debug|CHPE {BB4153FF-AC3E-4734-B562-CC23812DF31B}.Debug|x64.ActiveCfg = Debug|x64 {BB4153FF-AC3E-4734-B562-CC23812DF31B}.Debug|x64.Build.0 = Debug|x64 {BB4153FF-AC3E-4734-B562-CC23812DF31B}.Debug|x86.ActiveCfg = Debug|Win32 @@ -362,6 +454,10 @@ Global {BB4153FF-AC3E-4734-B562-CC23812DF31B}.Release|ARM.Build.0 = Release|ARM {BB4153FF-AC3E-4734-B562-CC23812DF31B}.Release|ARM64.ActiveCfg = Release|ARM64 {BB4153FF-AC3E-4734-B562-CC23812DF31B}.Release|ARM64.Build.0 = Release|ARM64 + {BB4153FF-AC3E-4734-B562-CC23812DF31B}.Release|ARM64.Deploy.0 = Release|ARM64 + {BB4153FF-AC3E-4734-B562-CC23812DF31B}.Release|CHPE.ActiveCfg = Release|CHPE + {BB4153FF-AC3E-4734-B562-CC23812DF31B}.Release|CHPE.Build.0 = Release|CHPE + {BB4153FF-AC3E-4734-B562-CC23812DF31B}.Release|CHPE.Deploy.0 = Release|CHPE {BB4153FF-AC3E-4734-B562-CC23812DF31B}.Release|x64.ActiveCfg = Release|x64 {BB4153FF-AC3E-4734-B562-CC23812DF31B}.Release|x64.Build.0 = Release|x64 {BB4153FF-AC3E-4734-B562-CC23812DF31B}.Release|x86.ActiveCfg = Release|Win32 @@ -370,6 +466,10 @@ Global {BB4153FF-AC3E-4734-B562-CC23812DF31B}.Test|ARM.Build.0 = Test|ARM {BB4153FF-AC3E-4734-B562-CC23812DF31B}.Test|ARM64.ActiveCfg = Test|ARM64 {BB4153FF-AC3E-4734-B562-CC23812DF31B}.Test|ARM64.Build.0 = Test|ARM64 + {BB4153FF-AC3E-4734-B562-CC23812DF31B}.Test|ARM64.Deploy.0 = Test|ARM64 + {BB4153FF-AC3E-4734-B562-CC23812DF31B}.Test|CHPE.ActiveCfg = Test|CHPE + {BB4153FF-AC3E-4734-B562-CC23812DF31B}.Test|CHPE.Build.0 = Test|CHPE + {BB4153FF-AC3E-4734-B562-CC23812DF31B}.Test|CHPE.Deploy.0 = Test|CHPE {BB4153FF-AC3E-4734-B562-CC23812DF31B}.Test|x64.ActiveCfg = Test|x64 {BB4153FF-AC3E-4734-B562-CC23812DF31B}.Test|x64.Build.0 = Test|x64 {BB4153FF-AC3E-4734-B562-CC23812DF31B}.Test|x86.ActiveCfg = Test|Win32 @@ -378,6 +478,10 @@ Global {CC4153FF-AC3E-4734-B562-CC23812DF31B}.Debug|ARM.Build.0 = Debug|ARM {CC4153FF-AC3E-4734-B562-CC23812DF31B}.Debug|ARM64.ActiveCfg = Debug|ARM64 {CC4153FF-AC3E-4734-B562-CC23812DF31B}.Debug|ARM64.Build.0 = Debug|ARM64 + {CC4153FF-AC3E-4734-B562-CC23812DF31B}.Debug|ARM64.Deploy.0 = Debug|ARM64 + {CC4153FF-AC3E-4734-B562-CC23812DF31B}.Debug|CHPE.ActiveCfg = Debug|CHPE + {CC4153FF-AC3E-4734-B562-CC23812DF31B}.Debug|CHPE.Build.0 = Debug|CHPE + {CC4153FF-AC3E-4734-B562-CC23812DF31B}.Debug|CHPE.Deploy.0 = Debug|CHPE {CC4153FF-AC3E-4734-B562-CC23812DF31B}.Debug|x64.ActiveCfg = Debug|x64 {CC4153FF-AC3E-4734-B562-CC23812DF31B}.Debug|x64.Build.0 = Debug|x64 {CC4153FF-AC3E-4734-B562-CC23812DF31B}.Debug|x86.ActiveCfg = Debug|Win32 @@ -386,6 +490,10 @@ Global {CC4153FF-AC3E-4734-B562-CC23812DF31B}.Release|ARM.Build.0 = Release|ARM {CC4153FF-AC3E-4734-B562-CC23812DF31B}.Release|ARM64.ActiveCfg = Release|ARM64 {CC4153FF-AC3E-4734-B562-CC23812DF31B}.Release|ARM64.Build.0 = Release|ARM64 + {CC4153FF-AC3E-4734-B562-CC23812DF31B}.Release|ARM64.Deploy.0 = Release|ARM64 + {CC4153FF-AC3E-4734-B562-CC23812DF31B}.Release|CHPE.ActiveCfg = Release|CHPE + {CC4153FF-AC3E-4734-B562-CC23812DF31B}.Release|CHPE.Build.0 = Release|CHPE + {CC4153FF-AC3E-4734-B562-CC23812DF31B}.Release|CHPE.Deploy.0 = Release|CHPE {CC4153FF-AC3E-4734-B562-CC23812DF31B}.Release|x64.ActiveCfg = Release|x64 {CC4153FF-AC3E-4734-B562-CC23812DF31B}.Release|x64.Build.0 = Release|x64 {CC4153FF-AC3E-4734-B562-CC23812DF31B}.Release|x86.ActiveCfg = Release|Win32 @@ -394,6 +502,10 @@ Global {CC4153FF-AC3E-4734-B562-CC23812DF31B}.Test|ARM.Build.0 = Test|ARM {CC4153FF-AC3E-4734-B562-CC23812DF31B}.Test|ARM64.ActiveCfg = Test|ARM64 {CC4153FF-AC3E-4734-B562-CC23812DF31B}.Test|ARM64.Build.0 = Test|ARM64 + {CC4153FF-AC3E-4734-B562-CC23812DF31B}.Test|ARM64.Deploy.0 = Test|ARM64 + {CC4153FF-AC3E-4734-B562-CC23812DF31B}.Test|CHPE.ActiveCfg = Test|CHPE + {CC4153FF-AC3E-4734-B562-CC23812DF31B}.Test|CHPE.Build.0 = Test|CHPE + {CC4153FF-AC3E-4734-B562-CC23812DF31B}.Test|CHPE.Deploy.0 = Test|CHPE {CC4153FF-AC3E-4734-B562-CC23812DF31B}.Test|x64.ActiveCfg = Test|x64 {CC4153FF-AC3E-4734-B562-CC23812DF31B}.Test|x64.Build.0 = Test|x64 {CC4153FF-AC3E-4734-B562-CC23812DF31B}.Test|x86.ActiveCfg = Test|Win32 @@ -402,6 +514,10 @@ Global {5643D42A-C38D-4D82-9662-58470B3AC9F7}.Debug|ARM.Build.0 = Debug|ARM {5643D42A-C38D-4D82-9662-58470B3AC9F7}.Debug|ARM64.ActiveCfg = Debug|ARM64 {5643D42A-C38D-4D82-9662-58470B3AC9F7}.Debug|ARM64.Build.0 = Debug|ARM64 + {5643D42A-C38D-4D82-9662-58470B3AC9F7}.Debug|ARM64.Deploy.0 = Debug|ARM64 + {5643D42A-C38D-4D82-9662-58470B3AC9F7}.Debug|CHPE.ActiveCfg = Debug|CHPE + {5643D42A-C38D-4D82-9662-58470B3AC9F7}.Debug|CHPE.Build.0 = Debug|CHPE + {5643D42A-C38D-4D82-9662-58470B3AC9F7}.Debug|CHPE.Deploy.0 = Debug|CHPE {5643D42A-C38D-4D82-9662-58470B3AC9F7}.Debug|x64.ActiveCfg = Debug|x64 {5643D42A-C38D-4D82-9662-58470B3AC9F7}.Debug|x64.Build.0 = Debug|x64 {5643D42A-C38D-4D82-9662-58470B3AC9F7}.Debug|x86.ActiveCfg = Debug|Win32 @@ -410,6 +526,10 @@ Global {5643D42A-C38D-4D82-9662-58470B3AC9F7}.Release|ARM.Build.0 = Release|ARM {5643D42A-C38D-4D82-9662-58470B3AC9F7}.Release|ARM64.ActiveCfg = Release|ARM64 {5643D42A-C38D-4D82-9662-58470B3AC9F7}.Release|ARM64.Build.0 = Release|ARM64 + {5643D42A-C38D-4D82-9662-58470B3AC9F7}.Release|ARM64.Deploy.0 = Release|ARM64 + {5643D42A-C38D-4D82-9662-58470B3AC9F7}.Release|CHPE.ActiveCfg = Release|CHPE + {5643D42A-C38D-4D82-9662-58470B3AC9F7}.Release|CHPE.Build.0 = Release|CHPE + {5643D42A-C38D-4D82-9662-58470B3AC9F7}.Release|CHPE.Deploy.0 = Release|CHPE {5643D42A-C38D-4D82-9662-58470B3AC9F7}.Release|x64.ActiveCfg = Release|x64 {5643D42A-C38D-4D82-9662-58470B3AC9F7}.Release|x64.Build.0 = Release|x64 {5643D42A-C38D-4D82-9662-58470B3AC9F7}.Release|x86.ActiveCfg = Release|Win32 @@ -418,6 +538,10 @@ Global {5643D42A-C38D-4D82-9662-58470B3AC9F7}.Test|ARM.Build.0 = Test|ARM {5643D42A-C38D-4D82-9662-58470B3AC9F7}.Test|ARM64.ActiveCfg = Test|ARM64 {5643D42A-C38D-4D82-9662-58470B3AC9F7}.Test|ARM64.Build.0 = Test|ARM64 + {5643D42A-C38D-4D82-9662-58470B3AC9F7}.Test|ARM64.Deploy.0 = Test|ARM64 + {5643D42A-C38D-4D82-9662-58470B3AC9F7}.Test|CHPE.ActiveCfg = Test|CHPE + {5643D42A-C38D-4D82-9662-58470B3AC9F7}.Test|CHPE.Build.0 = Test|CHPE + {5643D42A-C38D-4D82-9662-58470B3AC9F7}.Test|CHPE.Deploy.0 = Test|CHPE {5643D42A-C38D-4D82-9662-58470B3AC9F7}.Test|x64.ActiveCfg = Test|x64 {5643D42A-C38D-4D82-9662-58470B3AC9F7}.Test|x64.Build.0 = Test|x64 {5643D42A-C38D-4D82-9662-58470B3AC9F7}.Test|x86.ActiveCfg = Test|Win32 @@ -426,6 +550,10 @@ Global {FD8EEC40-4141-448A-BF4B-1589FBE4F60D}.Debug|ARM.Build.0 = Debug|ARM {FD8EEC40-4141-448A-BF4B-1589FBE4F60D}.Debug|ARM64.ActiveCfg = Debug|ARM64 {FD8EEC40-4141-448A-BF4B-1589FBE4F60D}.Debug|ARM64.Build.0 = Debug|ARM64 + {FD8EEC40-4141-448A-BF4B-1589FBE4F60D}.Debug|ARM64.Deploy.0 = Debug|ARM64 + {FD8EEC40-4141-448A-BF4B-1589FBE4F60D}.Debug|CHPE.ActiveCfg = Debug|CHPE + {FD8EEC40-4141-448A-BF4B-1589FBE4F60D}.Debug|CHPE.Build.0 = Debug|CHPE + {FD8EEC40-4141-448A-BF4B-1589FBE4F60D}.Debug|CHPE.Deploy.0 = Debug|CHPE {FD8EEC40-4141-448A-BF4B-1589FBE4F60D}.Debug|x64.ActiveCfg = Debug|x64 {FD8EEC40-4141-448A-BF4B-1589FBE4F60D}.Debug|x64.Build.0 = Debug|x64 {FD8EEC40-4141-448A-BF4B-1589FBE4F60D}.Debug|x86.ActiveCfg = Debug|Win32 @@ -434,6 +562,10 @@ Global {FD8EEC40-4141-448A-BF4B-1589FBE4F60D}.Release|ARM.Build.0 = Release|ARM {FD8EEC40-4141-448A-BF4B-1589FBE4F60D}.Release|ARM64.ActiveCfg = Release|ARM64 {FD8EEC40-4141-448A-BF4B-1589FBE4F60D}.Release|ARM64.Build.0 = Release|ARM64 + {FD8EEC40-4141-448A-BF4B-1589FBE4F60D}.Release|ARM64.Deploy.0 = Release|ARM64 + {FD8EEC40-4141-448A-BF4B-1589FBE4F60D}.Release|CHPE.ActiveCfg = Release|CHPE + {FD8EEC40-4141-448A-BF4B-1589FBE4F60D}.Release|CHPE.Build.0 = Release|CHPE + {FD8EEC40-4141-448A-BF4B-1589FBE4F60D}.Release|CHPE.Deploy.0 = Release|CHPE {FD8EEC40-4141-448A-BF4B-1589FBE4F60D}.Release|x64.ActiveCfg = Release|x64 {FD8EEC40-4141-448A-BF4B-1589FBE4F60D}.Release|x64.Build.0 = Release|x64 {FD8EEC40-4141-448A-BF4B-1589FBE4F60D}.Release|x86.ActiveCfg = Release|Win32 @@ -442,6 +574,10 @@ Global {FD8EEC40-4141-448A-BF4B-1589FBE4F60D}.Test|ARM.Build.0 = Test|ARM {FD8EEC40-4141-448A-BF4B-1589FBE4F60D}.Test|ARM64.ActiveCfg = Test|ARM64 {FD8EEC40-4141-448A-BF4B-1589FBE4F60D}.Test|ARM64.Build.0 = Test|ARM64 + {FD8EEC40-4141-448A-BF4B-1589FBE4F60D}.Test|ARM64.Deploy.0 = Test|ARM64 + {FD8EEC40-4141-448A-BF4B-1589FBE4F60D}.Test|CHPE.ActiveCfg = Test|CHPE + {FD8EEC40-4141-448A-BF4B-1589FBE4F60D}.Test|CHPE.Build.0 = Test|CHPE + {FD8EEC40-4141-448A-BF4B-1589FBE4F60D}.Test|CHPE.Deploy.0 = Test|CHPE {FD8EEC40-4141-448A-BF4B-1589FBE4F60D}.Test|x64.ActiveCfg = Test|x64 {FD8EEC40-4141-448A-BF4B-1589FBE4F60D}.Test|x64.Build.0 = Test|x64 {FD8EEC40-4141-448A-BF4B-1589FBE4F60D}.Test|x86.ActiveCfg = Test|Win32 @@ -450,6 +586,10 @@ Global {BB4153FF-AC3E-4734-B562-FF23812DF31B}.Debug|ARM.Build.0 = Debug|ARM {BB4153FF-AC3E-4734-B562-FF23812DF31B}.Debug|ARM64.ActiveCfg = Debug|ARM64 {BB4153FF-AC3E-4734-B562-FF23812DF31B}.Debug|ARM64.Build.0 = Debug|ARM64 + {BB4153FF-AC3E-4734-B562-FF23812DF31B}.Debug|ARM64.Deploy.0 = Debug|ARM64 + {BB4153FF-AC3E-4734-B562-FF23812DF31B}.Debug|CHPE.ActiveCfg = Debug|CHPE + {BB4153FF-AC3E-4734-B562-FF23812DF31B}.Debug|CHPE.Build.0 = Debug|CHPE + {BB4153FF-AC3E-4734-B562-FF23812DF31B}.Debug|CHPE.Deploy.0 = Debug|CHPE {BB4153FF-AC3E-4734-B562-FF23812DF31B}.Debug|x64.ActiveCfg = Debug|x64 {BB4153FF-AC3E-4734-B562-FF23812DF31B}.Debug|x64.Build.0 = Debug|x64 {BB4153FF-AC3E-4734-B562-FF23812DF31B}.Debug|x86.ActiveCfg = Debug|Win32 @@ -458,6 +598,10 @@ Global {BB4153FF-AC3E-4734-B562-FF23812DF31B}.Release|ARM.Build.0 = Release|ARM {BB4153FF-AC3E-4734-B562-FF23812DF31B}.Release|ARM64.ActiveCfg = Release|ARM64 {BB4153FF-AC3E-4734-B562-FF23812DF31B}.Release|ARM64.Build.0 = Release|ARM64 + {BB4153FF-AC3E-4734-B562-FF23812DF31B}.Release|ARM64.Deploy.0 = Release|ARM64 + {BB4153FF-AC3E-4734-B562-FF23812DF31B}.Release|CHPE.ActiveCfg = Release|CHPE + {BB4153FF-AC3E-4734-B562-FF23812DF31B}.Release|CHPE.Build.0 = Release|CHPE + {BB4153FF-AC3E-4734-B562-FF23812DF31B}.Release|CHPE.Deploy.0 = Release|CHPE {BB4153FF-AC3E-4734-B562-FF23812DF31B}.Release|x64.ActiveCfg = Release|x64 {BB4153FF-AC3E-4734-B562-FF23812DF31B}.Release|x64.Build.0 = Release|x64 {BB4153FF-AC3E-4734-B562-FF23812DF31B}.Release|x86.ActiveCfg = Release|Win32 @@ -466,6 +610,10 @@ Global {BB4153FF-AC3E-4734-B562-FF23812DF31B}.Test|ARM.Build.0 = Test|ARM {BB4153FF-AC3E-4734-B562-FF23812DF31B}.Test|ARM64.ActiveCfg = Test|ARM64 {BB4153FF-AC3E-4734-B562-FF23812DF31B}.Test|ARM64.Build.0 = Test|ARM64 + {BB4153FF-AC3E-4734-B562-FF23812DF31B}.Test|ARM64.Deploy.0 = Test|ARM64 + {BB4153FF-AC3E-4734-B562-FF23812DF31B}.Test|CHPE.ActiveCfg = Test|CHPE + {BB4153FF-AC3E-4734-B562-FF23812DF31B}.Test|CHPE.Build.0 = Test|CHPE + {BB4153FF-AC3E-4734-B562-FF23812DF31B}.Test|CHPE.Deploy.0 = Test|CHPE {BB4153FF-AC3E-4734-B562-FF23812DF31B}.Test|x64.ActiveCfg = Test|x64 {BB4153FF-AC3E-4734-B562-FF23812DF31B}.Test|x64.Build.0 = Test|x64 {BB4153FF-AC3E-4734-B562-FF23812DF31B}.Test|x86.ActiveCfg = Test|Win32 @@ -474,6 +622,10 @@ Global {18CF279F-188D-4655-B03D-74F65388E7D1}.Debug|ARM.Build.0 = Debug|ARM {18CF279F-188D-4655-B03D-74F65388E7D1}.Debug|ARM64.ActiveCfg = Debug|ARM64 {18CF279F-188D-4655-B03D-74F65388E7D1}.Debug|ARM64.Build.0 = Debug|ARM64 + {18CF279F-188D-4655-B03D-74F65388E7D1}.Debug|ARM64.Deploy.0 = Debug|ARM64 + {18CF279F-188D-4655-B03D-74F65388E7D1}.Debug|CHPE.ActiveCfg = Debug|CHPE + {18CF279F-188D-4655-B03D-74F65388E7D1}.Debug|CHPE.Build.0 = Debug|CHPE + {18CF279F-188D-4655-B03D-74F65388E7D1}.Debug|CHPE.Deploy.0 = Debug|CHPE {18CF279F-188D-4655-B03D-74F65388E7D1}.Debug|x64.ActiveCfg = Debug|x64 {18CF279F-188D-4655-B03D-74F65388E7D1}.Debug|x64.Build.0 = Debug|x64 {18CF279F-188D-4655-B03D-74F65388E7D1}.Debug|x86.ActiveCfg = Debug|Win32 @@ -482,6 +634,10 @@ Global {18CF279F-188D-4655-B03D-74F65388E7D1}.Release|ARM.Build.0 = Release|ARM {18CF279F-188D-4655-B03D-74F65388E7D1}.Release|ARM64.ActiveCfg = Release|ARM64 {18CF279F-188D-4655-B03D-74F65388E7D1}.Release|ARM64.Build.0 = Release|ARM64 + {18CF279F-188D-4655-B03D-74F65388E7D1}.Release|ARM64.Deploy.0 = Release|ARM64 + {18CF279F-188D-4655-B03D-74F65388E7D1}.Release|CHPE.ActiveCfg = Release|CHPE + {18CF279F-188D-4655-B03D-74F65388E7D1}.Release|CHPE.Build.0 = Release|CHPE + {18CF279F-188D-4655-B03D-74F65388E7D1}.Release|CHPE.Deploy.0 = Release|CHPE {18CF279F-188D-4655-B03D-74F65388E7D1}.Release|x64.ActiveCfg = Release|x64 {18CF279F-188D-4655-B03D-74F65388E7D1}.Release|x64.Build.0 = Release|x64 {18CF279F-188D-4655-B03D-74F65388E7D1}.Release|x86.ActiveCfg = Release|Win32 @@ -490,6 +646,10 @@ Global {18CF279F-188D-4655-B03D-74F65388E7D1}.Test|ARM.Build.0 = Test|ARM {18CF279F-188D-4655-B03D-74F65388E7D1}.Test|ARM64.ActiveCfg = Test|ARM64 {18CF279F-188D-4655-B03D-74F65388E7D1}.Test|ARM64.Build.0 = Test|ARM64 + {18CF279F-188D-4655-B03D-74F65388E7D1}.Test|ARM64.Deploy.0 = Test|ARM64 + {18CF279F-188D-4655-B03D-74F65388E7D1}.Test|CHPE.ActiveCfg = Test|CHPE + {18CF279F-188D-4655-B03D-74F65388E7D1}.Test|CHPE.Build.0 = Test|CHPE + {18CF279F-188D-4655-B03D-74F65388E7D1}.Test|CHPE.Deploy.0 = Test|CHPE {18CF279F-188D-4655-B03D-74F65388E7D1}.Test|x64.ActiveCfg = Test|x64 {18CF279F-188D-4655-B03D-74F65388E7D1}.Test|x64.Build.0 = Test|x64 {18CF279F-188D-4655-B03D-74F65388E7D1}.Test|x86.ActiveCfg = Test|Win32 @@ -498,6 +658,10 @@ Global {F6FAD160-5A4B-476A-93AC-33E0B3A18C0C}.Debug|ARM.Build.0 = Debug|ARM {F6FAD160-5A4B-476A-93AC-33E0B3A18C0C}.Debug|ARM64.ActiveCfg = Debug|ARM64 {F6FAD160-5A4B-476A-93AC-33E0B3A18C0C}.Debug|ARM64.Build.0 = Debug|ARM64 + {F6FAD160-5A4B-476A-93AC-33E0B3A18C0C}.Debug|ARM64.Deploy.0 = Debug|ARM64 + {F6FAD160-5A4B-476A-93AC-33E0B3A18C0C}.Debug|CHPE.ActiveCfg = Debug|CHPE + {F6FAD160-5A4B-476A-93AC-33E0B3A18C0C}.Debug|CHPE.Build.0 = Debug|CHPE + {F6FAD160-5A4B-476A-93AC-33E0B3A18C0C}.Debug|CHPE.Deploy.0 = Debug|CHPE {F6FAD160-5A4B-476A-93AC-33E0B3A18C0C}.Debug|x64.ActiveCfg = Debug|x64 {F6FAD160-5A4B-476A-93AC-33E0B3A18C0C}.Debug|x64.Build.0 = Debug|x64 {F6FAD160-5A4B-476A-93AC-33E0B3A18C0C}.Debug|x86.ActiveCfg = Debug|Win32 @@ -506,6 +670,10 @@ Global {F6FAD160-5A4B-476A-93AC-33E0B3A18C0C}.Release|ARM.Build.0 = Release|ARM {F6FAD160-5A4B-476A-93AC-33E0B3A18C0C}.Release|ARM64.ActiveCfg = Release|ARM64 {F6FAD160-5A4B-476A-93AC-33E0B3A18C0C}.Release|ARM64.Build.0 = Release|ARM64 + {F6FAD160-5A4B-476A-93AC-33E0B3A18C0C}.Release|ARM64.Deploy.0 = Release|ARM64 + {F6FAD160-5A4B-476A-93AC-33E0B3A18C0C}.Release|CHPE.ActiveCfg = Release|CHPE + {F6FAD160-5A4B-476A-93AC-33E0B3A18C0C}.Release|CHPE.Build.0 = Release|CHPE + {F6FAD160-5A4B-476A-93AC-33E0B3A18C0C}.Release|CHPE.Deploy.0 = Release|CHPE {F6FAD160-5A4B-476A-93AC-33E0B3A18C0C}.Release|x64.ActiveCfg = Release|x64 {F6FAD160-5A4B-476A-93AC-33E0B3A18C0C}.Release|x64.Build.0 = Release|x64 {F6FAD160-5A4B-476A-93AC-33E0B3A18C0C}.Release|x86.ActiveCfg = Release|Win32 @@ -514,6 +682,10 @@ Global {F6FAD160-5A4B-476A-93AC-33E0B3A18C0C}.Test|ARM.Build.0 = Test|ARM {F6FAD160-5A4B-476A-93AC-33E0B3A18C0C}.Test|ARM64.ActiveCfg = Test|ARM64 {F6FAD160-5A4B-476A-93AC-33E0B3A18C0C}.Test|ARM64.Build.0 = Test|ARM64 + {F6FAD160-5A4B-476A-93AC-33E0B3A18C0C}.Test|ARM64.Deploy.0 = Test|ARM64 + {F6FAD160-5A4B-476A-93AC-33E0B3A18C0C}.Test|CHPE.ActiveCfg = Test|CHPE + {F6FAD160-5A4B-476A-93AC-33E0B3A18C0C}.Test|CHPE.Build.0 = Test|CHPE + {F6FAD160-5A4B-476A-93AC-33E0B3A18C0C}.Test|CHPE.Deploy.0 = Test|CHPE {F6FAD160-5A4B-476A-93AC-33E0B3A18C0C}.Test|x64.ActiveCfg = Test|x64 {F6FAD160-5A4B-476A-93AC-33E0B3A18C0C}.Test|x64.Build.0 = Test|x64 {F6FAD160-5A4B-476A-93AC-33E0B3A18C0C}.Test|x86.ActiveCfg = Test|Win32 @@ -522,6 +694,10 @@ Global {706083F7-6AA4-4558-A153-6352EF9220F5}.Debug|ARM.Build.0 = Debug|ARM {706083F7-6AA4-4558-A153-6352EF9220F5}.Debug|ARM64.ActiveCfg = Debug|ARM64 {706083F7-6AA4-4558-A153-6352EF9220F5}.Debug|ARM64.Build.0 = Debug|ARM64 + {706083F7-6AA4-4558-A153-6352EF9220F5}.Debug|ARM64.Deploy.0 = Debug|ARM64 + {706083F7-6AA4-4558-A153-6352EF9220F5}.Debug|CHPE.ActiveCfg = Debug|CHPE + {706083F7-6AA4-4558-A153-6352EF9220F5}.Debug|CHPE.Build.0 = Debug|CHPE + {706083F7-6AA4-4558-A153-6352EF9220F5}.Debug|CHPE.Deploy.0 = Debug|CHPE {706083F7-6AA4-4558-A153-6352EF9220F5}.Debug|x64.ActiveCfg = Debug|x64 {706083F7-6AA4-4558-A153-6352EF9220F5}.Debug|x64.Build.0 = Debug|x64 {706083F7-6AA4-4558-A153-6352EF9220F5}.Debug|x86.ActiveCfg = Debug|Win32 @@ -530,6 +706,10 @@ Global {706083F7-6AA4-4558-A153-6352EF9220F5}.Release|ARM.Build.0 = Release|ARM {706083F7-6AA4-4558-A153-6352EF9220F5}.Release|ARM64.ActiveCfg = Release|ARM64 {706083F7-6AA4-4558-A153-6352EF9220F5}.Release|ARM64.Build.0 = Release|ARM64 + {706083F7-6AA4-4558-A153-6352EF9220F5}.Release|ARM64.Deploy.0 = Release|ARM64 + {706083F7-6AA4-4558-A153-6352EF9220F5}.Release|CHPE.ActiveCfg = Release|CHPE + {706083F7-6AA4-4558-A153-6352EF9220F5}.Release|CHPE.Build.0 = Release|CHPE + {706083F7-6AA4-4558-A153-6352EF9220F5}.Release|CHPE.Deploy.0 = Release|CHPE {706083F7-6AA4-4558-A153-6352EF9220F5}.Release|x64.ActiveCfg = Release|x64 {706083F7-6AA4-4558-A153-6352EF9220F5}.Release|x64.Build.0 = Release|x64 {706083F7-6AA4-4558-A153-6352EF9220F5}.Release|x86.ActiveCfg = Release|Win32 @@ -538,6 +718,10 @@ Global {706083F7-6AA4-4558-A153-6352EF9220F5}.Test|ARM.Build.0 = Test|ARM {706083F7-6AA4-4558-A153-6352EF9220F5}.Test|ARM64.ActiveCfg = Test|ARM64 {706083F7-6AA4-4558-A153-6352EF9220F5}.Test|ARM64.Build.0 = Test|ARM64 + {706083F7-6AA4-4558-A153-6352EF9220F5}.Test|ARM64.Deploy.0 = Test|ARM64 + {706083F7-6AA4-4558-A153-6352EF9220F5}.Test|CHPE.ActiveCfg = Test|CHPE + {706083F7-6AA4-4558-A153-6352EF9220F5}.Test|CHPE.Build.0 = Test|CHPE + {706083F7-6AA4-4558-A153-6352EF9220F5}.Test|CHPE.Deploy.0 = Test|CHPE {706083F7-6AA4-4558-A153-6352EF9220F5}.Test|x64.ActiveCfg = Test|x64 {706083F7-6AA4-4558-A153-6352EF9220F5}.Test|x64.Build.0 = Test|x64 {706083F7-6AA4-4558-A153-6352EF9220F5}.Test|x86.ActiveCfg = Test|Win32 @@ -546,6 +730,10 @@ Global {706083F7-6AA4-4558-A153-6352EF9220EE}.Debug|ARM.Build.0 = Debug|ARM {706083F7-6AA4-4558-A153-6352EF9220EE}.Debug|ARM64.ActiveCfg = Debug|ARM64 {706083F7-6AA4-4558-A153-6352EF9220EE}.Debug|ARM64.Build.0 = Debug|ARM64 + {706083F7-6AA4-4558-A153-6352EF9220EE}.Debug|ARM64.Deploy.0 = Debug|ARM64 + {706083F7-6AA4-4558-A153-6352EF9220EE}.Debug|CHPE.ActiveCfg = Debug|CHPE + {706083F7-6AA4-4558-A153-6352EF9220EE}.Debug|CHPE.Build.0 = Debug|CHPE + {706083F7-6AA4-4558-A153-6352EF9220EE}.Debug|CHPE.Deploy.0 = Debug|CHPE {706083F7-6AA4-4558-A153-6352EF9220EE}.Debug|x64.ActiveCfg = Debug|x64 {706083F7-6AA4-4558-A153-6352EF9220EE}.Debug|x64.Build.0 = Debug|x64 {706083F7-6AA4-4558-A153-6352EF9220EE}.Debug|x86.ActiveCfg = Debug|Win32 @@ -554,6 +742,10 @@ Global {706083F7-6AA4-4558-A153-6352EF9220EE}.Release|ARM.Build.0 = Release|ARM {706083F7-6AA4-4558-A153-6352EF9220EE}.Release|ARM64.ActiveCfg = Release|ARM64 {706083F7-6AA4-4558-A153-6352EF9220EE}.Release|ARM64.Build.0 = Release|ARM64 + {706083F7-6AA4-4558-A153-6352EF9220EE}.Release|ARM64.Deploy.0 = Release|ARM64 + {706083F7-6AA4-4558-A153-6352EF9220EE}.Release|CHPE.ActiveCfg = Release|CHPE + {706083F7-6AA4-4558-A153-6352EF9220EE}.Release|CHPE.Build.0 = Release|CHPE + {706083F7-6AA4-4558-A153-6352EF9220EE}.Release|CHPE.Deploy.0 = Release|CHPE {706083F7-6AA4-4558-A153-6352EF9220EE}.Release|x64.ActiveCfg = Release|x64 {706083F7-6AA4-4558-A153-6352EF9220EE}.Release|x64.Build.0 = Release|x64 {706083F7-6AA4-4558-A153-6352EF9220EE}.Release|x86.ActiveCfg = Release|Win32 @@ -562,6 +754,10 @@ Global {706083F7-6AA4-4558-A153-6352EF9220EE}.Test|ARM.Build.0 = Test|ARM {706083F7-6AA4-4558-A153-6352EF9220EE}.Test|ARM64.ActiveCfg = Test|ARM64 {706083F7-6AA4-4558-A153-6352EF9220EE}.Test|ARM64.Build.0 = Test|ARM64 + {706083F7-6AA4-4558-A153-6352EF9220EE}.Test|ARM64.Deploy.0 = Test|ARM64 + {706083F7-6AA4-4558-A153-6352EF9220EE}.Test|CHPE.ActiveCfg = Test|CHPE + {706083F7-6AA4-4558-A153-6352EF9220EE}.Test|CHPE.Build.0 = Test|CHPE + {706083F7-6AA4-4558-A153-6352EF9220EE}.Test|CHPE.Deploy.0 = Test|CHPE {706083F7-6AA4-4558-A153-6352EF9220EE}.Test|x64.ActiveCfg = Test|x64 {706083F7-6AA4-4558-A153-6352EF9220EE}.Test|x64.Build.0 = Test|x64 {706083F7-6AA4-4558-A153-6352EF9220EE}.Test|x86.ActiveCfg = Test|Win32 @@ -570,6 +766,10 @@ Global {ABC904AD-9415-46F8-AA23-E33193F81F7C}.Debug|ARM.Build.0 = Debug|ARM {ABC904AD-9415-46F8-AA23-E33193F81F7C}.Debug|ARM64.ActiveCfg = Debug|ARM64 {ABC904AD-9415-46F8-AA23-E33193F81F7C}.Debug|ARM64.Build.0 = Debug|ARM64 + {ABC904AD-9415-46F8-AA23-E33193F81F7C}.Debug|ARM64.Deploy.0 = Debug|ARM64 + {ABC904AD-9415-46F8-AA23-E33193F81F7C}.Debug|CHPE.ActiveCfg = Debug|CHPE + {ABC904AD-9415-46F8-AA23-E33193F81F7C}.Debug|CHPE.Build.0 = Debug|CHPE + {ABC904AD-9415-46F8-AA23-E33193F81F7C}.Debug|CHPE.Deploy.0 = Debug|CHPE {ABC904AD-9415-46F8-AA23-E33193F81F7C}.Debug|x64.ActiveCfg = Debug|x64 {ABC904AD-9415-46F8-AA23-E33193F81F7C}.Debug|x64.Build.0 = Debug|x64 {ABC904AD-9415-46F8-AA23-E33193F81F7C}.Debug|x86.ActiveCfg = Debug|Win32 @@ -578,6 +778,10 @@ Global {ABC904AD-9415-46F8-AA23-E33193F81F7C}.Release|ARM.Build.0 = Release|ARM {ABC904AD-9415-46F8-AA23-E33193F81F7C}.Release|ARM64.ActiveCfg = Release|ARM64 {ABC904AD-9415-46F8-AA23-E33193F81F7C}.Release|ARM64.Build.0 = Release|ARM64 + {ABC904AD-9415-46F8-AA23-E33193F81F7C}.Release|ARM64.Deploy.0 = Release|ARM64 + {ABC904AD-9415-46F8-AA23-E33193F81F7C}.Release|CHPE.ActiveCfg = Release|CHPE + {ABC904AD-9415-46F8-AA23-E33193F81F7C}.Release|CHPE.Build.0 = Release|CHPE + {ABC904AD-9415-46F8-AA23-E33193F81F7C}.Release|CHPE.Deploy.0 = Release|CHPE {ABC904AD-9415-46F8-AA23-E33193F81F7C}.Release|x64.ActiveCfg = Release|x64 {ABC904AD-9415-46F8-AA23-E33193F81F7C}.Release|x64.Build.0 = Release|x64 {ABC904AD-9415-46F8-AA23-E33193F81F7C}.Release|x86.ActiveCfg = Release|Win32 @@ -586,6 +790,10 @@ Global {ABC904AD-9415-46F8-AA23-E33193F81F7C}.Test|ARM.Build.0 = Test|ARM {ABC904AD-9415-46F8-AA23-E33193F81F7C}.Test|ARM64.ActiveCfg = Test|ARM64 {ABC904AD-9415-46F8-AA23-E33193F81F7C}.Test|ARM64.Build.0 = Test|ARM64 + {ABC904AD-9415-46F8-AA23-E33193F81F7C}.Test|ARM64.Deploy.0 = Test|ARM64 + {ABC904AD-9415-46F8-AA23-E33193F81F7C}.Test|CHPE.ActiveCfg = Test|CHPE + {ABC904AD-9415-46F8-AA23-E33193F81F7C}.Test|CHPE.Build.0 = Test|CHPE + {ABC904AD-9415-46F8-AA23-E33193F81F7C}.Test|CHPE.Deploy.0 = Test|CHPE {ABC904AD-9415-46F8-AA23-E33193F81F7C}.Test|x64.ActiveCfg = Test|x64 {ABC904AD-9415-46F8-AA23-E33193F81F7C}.Test|x64.Build.0 = Test|x64 {ABC904AD-9415-46F8-AA23-E33193F81F7C}.Test|x86.ActiveCfg = Test|Win32 @@ -594,6 +802,10 @@ Global {6979EC58-7A28-465C-A694-F3323A1F5401}.Debug|ARM.Build.0 = Debug|ARM {6979EC58-7A28-465C-A694-F3323A1F5401}.Debug|ARM64.ActiveCfg = Debug|ARM64 {6979EC58-7A28-465C-A694-F3323A1F5401}.Debug|ARM64.Build.0 = Debug|ARM64 + {6979EC58-7A28-465C-A694-F3323A1F5401}.Debug|ARM64.Deploy.0 = Debug|ARM64 + {6979EC58-7A28-465C-A694-F3323A1F5401}.Debug|CHPE.ActiveCfg = Debug|CHPE + {6979EC58-7A28-465C-A694-F3323A1F5401}.Debug|CHPE.Build.0 = Debug|CHPE + {6979EC58-7A28-465C-A694-F3323A1F5401}.Debug|CHPE.Deploy.0 = Debug|CHPE {6979EC58-7A28-465C-A694-F3323A1F5401}.Debug|x64.ActiveCfg = Debug|x64 {6979EC58-7A28-465C-A694-F3323A1F5401}.Debug|x64.Build.0 = Debug|x64 {6979EC58-7A28-465C-A694-F3323A1F5401}.Debug|x86.ActiveCfg = Debug|Win32 @@ -602,6 +814,10 @@ Global {6979EC58-7A28-465C-A694-F3323A1F5401}.Release|ARM.Build.0 = Release|ARM {6979EC58-7A28-465C-A694-F3323A1F5401}.Release|ARM64.ActiveCfg = Release|ARM64 {6979EC58-7A28-465C-A694-F3323A1F5401}.Release|ARM64.Build.0 = Release|ARM64 + {6979EC58-7A28-465C-A694-F3323A1F5401}.Release|ARM64.Deploy.0 = Release|ARM64 + {6979EC58-7A28-465C-A694-F3323A1F5401}.Release|CHPE.ActiveCfg = Release|CHPE + {6979EC58-7A28-465C-A694-F3323A1F5401}.Release|CHPE.Build.0 = Release|CHPE + {6979EC58-7A28-465C-A694-F3323A1F5401}.Release|CHPE.Deploy.0 = Release|CHPE {6979EC58-7A28-465C-A694-F3323A1F5401}.Release|x64.ActiveCfg = Release|x64 {6979EC58-7A28-465C-A694-F3323A1F5401}.Release|x64.Build.0 = Release|x64 {6979EC58-7A28-465C-A694-F3323A1F5401}.Release|x86.ActiveCfg = Release|Win32 @@ -610,6 +826,10 @@ Global {6979EC58-7A28-465C-A694-F3323A1F5401}.Test|ARM.Build.0 = Test|ARM {6979EC58-7A28-465C-A694-F3323A1F5401}.Test|ARM64.ActiveCfg = Test|ARM64 {6979EC58-7A28-465C-A694-F3323A1F5401}.Test|ARM64.Build.0 = Test|ARM64 + {6979EC58-7A28-465C-A694-F3323A1F5401}.Test|ARM64.Deploy.0 = Test|ARM64 + {6979EC58-7A28-465C-A694-F3323A1F5401}.Test|CHPE.ActiveCfg = Test|CHPE + {6979EC58-7A28-465C-A694-F3323A1F5401}.Test|CHPE.Build.0 = Test|CHPE + {6979EC58-7A28-465C-A694-F3323A1F5401}.Test|CHPE.Deploy.0 = Test|CHPE {6979EC58-7A28-465C-A694-F3323A1F5401}.Test|x64.ActiveCfg = Test|x64 {6979EC58-7A28-465C-A694-F3323A1F5401}.Test|x64.Build.0 = Test|x64 {6979EC58-7A28-465C-A694-F3323A1F5401}.Test|x86.ActiveCfg = Test|Win32 @@ -618,6 +838,8 @@ Global {0216C4BE-86CE-478D-A134-23EAEE545B9D}.Debug|ARM.Build.0 = Debug|ARM {0216C4BE-86CE-478D-A134-23EAEE545B9D}.Debug|ARM64.ActiveCfg = Debug|ARM64 {0216C4BE-86CE-478D-A134-23EAEE545B9D}.Debug|ARM64.Build.0 = Debug|ARM64 + {0216C4BE-86CE-478D-A134-23EAEE545B9D}.Debug|CHPE.ActiveCfg = Debug|CHPE + {0216C4BE-86CE-478D-A134-23EAEE545B9D}.Debug|CHPE.Build.0 = Debug|CHPE {0216C4BE-86CE-478D-A134-23EAEE545B9D}.Debug|x64.ActiveCfg = Debug|x64 {0216C4BE-86CE-478D-A134-23EAEE545B9D}.Debug|x64.Build.0 = Debug|x64 {0216C4BE-86CE-478D-A134-23EAEE545B9D}.Debug|x86.ActiveCfg = Debug|Win32 @@ -626,6 +848,8 @@ Global {0216C4BE-86CE-478D-A134-23EAEE545B9D}.Release|ARM.Build.0 = Release|ARM {0216C4BE-86CE-478D-A134-23EAEE545B9D}.Release|ARM64.ActiveCfg = Release|ARM64 {0216C4BE-86CE-478D-A134-23EAEE545B9D}.Release|ARM64.Build.0 = Release|ARM64 + {0216C4BE-86CE-478D-A134-23EAEE545B9D}.Release|CHPE.ActiveCfg = Release|CHPE + {0216C4BE-86CE-478D-A134-23EAEE545B9D}.Release|CHPE.Build.0 = Release|CHPE {0216C4BE-86CE-478D-A134-23EAEE545B9D}.Release|x64.ActiveCfg = Release|x64 {0216C4BE-86CE-478D-A134-23EAEE545B9D}.Release|x64.Build.0 = Release|x64 {0216C4BE-86CE-478D-A134-23EAEE545B9D}.Release|x86.ActiveCfg = Release|Win32 @@ -634,6 +858,8 @@ Global {0216C4BE-86CE-478D-A134-23EAEE545B9D}.Test|ARM.Build.0 = Test|ARM {0216C4BE-86CE-478D-A134-23EAEE545B9D}.Test|ARM64.ActiveCfg = Test|ARM64 {0216C4BE-86CE-478D-A134-23EAEE545B9D}.Test|ARM64.Build.0 = Test|ARM64 + {0216C4BE-86CE-478D-A134-23EAEE545B9D}.Test|CHPE.ActiveCfg = Test|CHPE + {0216C4BE-86CE-478D-A134-23EAEE545B9D}.Test|CHPE.Build.0 = Test|CHPE {0216C4BE-86CE-478D-A134-23EAEE545B9D}.Test|x64.ActiveCfg = Test|x64 {0216C4BE-86CE-478D-A134-23EAEE545B9D}.Test|x64.Build.0 = Test|x64 {0216C4BE-86CE-478D-A134-23EAEE545B9D}.Test|x86.ActiveCfg = Test|Win32 @@ -642,6 +868,10 @@ Global {80A70F57-0F89-458F-AFD3-CE2159EB9BB1}.Debug|ARM.Build.0 = Debug|ARM {80A70F57-0F89-458F-AFD3-CE2159EB9BB1}.Debug|ARM64.ActiveCfg = Debug|ARM64 {80A70F57-0F89-458F-AFD3-CE2159EB9BB1}.Debug|ARM64.Build.0 = Debug|ARM64 + {80A70F57-0F89-458F-AFD3-CE2159EB9BB1}.Debug|ARM64.Deploy.0 = Debug|ARM64 + {80A70F57-0F89-458F-AFD3-CE2159EB9BB1}.Debug|CHPE.ActiveCfg = Debug|CHPE + {80A70F57-0F89-458F-AFD3-CE2159EB9BB1}.Debug|CHPE.Build.0 = Debug|CHPE + {80A70F57-0F89-458F-AFD3-CE2159EB9BB1}.Debug|CHPE.Deploy.0 = Debug|CHPE {80A70F57-0F89-458F-AFD3-CE2159EB9BB1}.Debug|x64.ActiveCfg = Debug|x64 {80A70F57-0F89-458F-AFD3-CE2159EB9BB1}.Debug|x64.Build.0 = Debug|x64 {80A70F57-0F89-458F-AFD3-CE2159EB9BB1}.Debug|x86.ActiveCfg = Debug|Win32 @@ -650,6 +880,10 @@ Global {80A70F57-0F89-458F-AFD3-CE2159EB9BB1}.Release|ARM.Build.0 = Release|ARM {80A70F57-0F89-458F-AFD3-CE2159EB9BB1}.Release|ARM64.ActiveCfg = Release|ARM64 {80A70F57-0F89-458F-AFD3-CE2159EB9BB1}.Release|ARM64.Build.0 = Release|ARM64 + {80A70F57-0F89-458F-AFD3-CE2159EB9BB1}.Release|ARM64.Deploy.0 = Release|ARM64 + {80A70F57-0F89-458F-AFD3-CE2159EB9BB1}.Release|CHPE.ActiveCfg = Release|CHPE + {80A70F57-0F89-458F-AFD3-CE2159EB9BB1}.Release|CHPE.Build.0 = Release|CHPE + {80A70F57-0F89-458F-AFD3-CE2159EB9BB1}.Release|CHPE.Deploy.0 = Release|CHPE {80A70F57-0F89-458F-AFD3-CE2159EB9BB1}.Release|x64.ActiveCfg = Release|x64 {80A70F57-0F89-458F-AFD3-CE2159EB9BB1}.Release|x64.Build.0 = Release|x64 {80A70F57-0F89-458F-AFD3-CE2159EB9BB1}.Release|x86.ActiveCfg = Release|Win32 @@ -658,6 +892,10 @@ Global {80A70F57-0F89-458F-AFD3-CE2159EB9BB1}.Test|ARM.Build.0 = Test|ARM {80A70F57-0F89-458F-AFD3-CE2159EB9BB1}.Test|ARM64.ActiveCfg = Test|ARM64 {80A70F57-0F89-458F-AFD3-CE2159EB9BB1}.Test|ARM64.Build.0 = Test|ARM64 + {80A70F57-0F89-458F-AFD3-CE2159EB9BB1}.Test|ARM64.Deploy.0 = Test|ARM64 + {80A70F57-0F89-458F-AFD3-CE2159EB9BB1}.Test|CHPE.ActiveCfg = Test|CHPE + {80A70F57-0F89-458F-AFD3-CE2159EB9BB1}.Test|CHPE.Build.0 = Test|CHPE + {80A70F57-0F89-458F-AFD3-CE2159EB9BB1}.Test|CHPE.Deploy.0 = Test|CHPE {80A70F57-0F89-458F-AFD3-CE2159EB9BB1}.Test|x64.ActiveCfg = Test|x64 {80A70F57-0F89-458F-AFD3-CE2159EB9BB1}.Test|x64.Build.0 = Test|x64 {80A70F57-0F89-458F-AFD3-CE2159EB9BB1}.Test|x86.ActiveCfg = Test|Win32 @@ -666,6 +904,10 @@ Global {706083F7-6AA4-4558-A153-6352EF9110EE}.Debug|ARM.Build.0 = Debug|ARM {706083F7-6AA4-4558-A153-6352EF9110EE}.Debug|ARM64.ActiveCfg = Debug|ARM64 {706083F7-6AA4-4558-A153-6352EF9110EE}.Debug|ARM64.Build.0 = Debug|ARM64 + {706083F7-6AA4-4558-A153-6352EF9110EE}.Debug|ARM64.Deploy.0 = Debug|ARM64 + {706083F7-6AA4-4558-A153-6352EF9110EE}.Debug|CHPE.ActiveCfg = Debug|CHPE + {706083F7-6AA4-4558-A153-6352EF9110EE}.Debug|CHPE.Build.0 = Debug|CHPE + {706083F7-6AA4-4558-A153-6352EF9110EE}.Debug|CHPE.Deploy.0 = Debug|CHPE {706083F7-6AA4-4558-A153-6352EF9110EE}.Debug|x64.ActiveCfg = Debug|x64 {706083F7-6AA4-4558-A153-6352EF9110EE}.Debug|x64.Build.0 = Debug|x64 {706083F7-6AA4-4558-A153-6352EF9110EE}.Debug|x86.ActiveCfg = Debug|Win32 @@ -674,6 +916,10 @@ Global {706083F7-6AA4-4558-A153-6352EF9110EE}.Release|ARM.Build.0 = Release|ARM {706083F7-6AA4-4558-A153-6352EF9110EE}.Release|ARM64.ActiveCfg = Release|ARM64 {706083F7-6AA4-4558-A153-6352EF9110EE}.Release|ARM64.Build.0 = Release|ARM64 + {706083F7-6AA4-4558-A153-6352EF9110EE}.Release|ARM64.Deploy.0 = Release|ARM64 + {706083F7-6AA4-4558-A153-6352EF9110EE}.Release|CHPE.ActiveCfg = Release|CHPE + {706083F7-6AA4-4558-A153-6352EF9110EE}.Release|CHPE.Build.0 = Release|CHPE + {706083F7-6AA4-4558-A153-6352EF9110EE}.Release|CHPE.Deploy.0 = Release|CHPE {706083F7-6AA4-4558-A153-6352EF9110EE}.Release|x64.ActiveCfg = Release|x64 {706083F7-6AA4-4558-A153-6352EF9110EE}.Release|x64.Build.0 = Release|x64 {706083F7-6AA4-4558-A153-6352EF9110EE}.Release|x86.ActiveCfg = Release|Win32 @@ -682,6 +928,10 @@ Global {706083F7-6AA4-4558-A153-6352EF9110EE}.Test|ARM.Build.0 = Test|ARM {706083F7-6AA4-4558-A153-6352EF9110EE}.Test|ARM64.ActiveCfg = Test|ARM64 {706083F7-6AA4-4558-A153-6352EF9110EE}.Test|ARM64.Build.0 = Test|ARM64 + {706083F7-6AA4-4558-A153-6352EF9110EE}.Test|ARM64.Deploy.0 = Test|ARM64 + {706083F7-6AA4-4558-A153-6352EF9110EE}.Test|CHPE.ActiveCfg = Test|CHPE + {706083F7-6AA4-4558-A153-6352EF9110EE}.Test|CHPE.Build.0 = Test|CHPE + {706083F7-6AA4-4558-A153-6352EF9110EE}.Test|CHPE.Deploy.0 = Test|CHPE {706083F7-6AA4-4558-A153-6352EF9110EE}.Test|x64.ActiveCfg = Test|x64 {706083F7-6AA4-4558-A153-6352EF9110EE}.Test|x64.Build.0 = Test|x64 {706083F7-6AA4-4558-A153-6352EF9110EE}.Test|x86.ActiveCfg = Test|Win32 @@ -690,6 +940,10 @@ Global {53D52B0B-86D9-4D31-AD09-0D6B3C063ADD}.Debug|ARM.Build.0 = Debug|ARM {53D52B0B-86D9-4D31-AD09-0D6B3C063ADD}.Debug|ARM64.ActiveCfg = Debug|ARM64 {53D52B0B-86D9-4D31-AD09-0D6B3C063ADD}.Debug|ARM64.Build.0 = Debug|ARM64 + {53D52B0B-86D9-4D31-AD09-0D6B3C063ADD}.Debug|ARM64.Deploy.0 = Debug|ARM64 + {53D52B0B-86D9-4D31-AD09-0D6B3C063ADD}.Debug|CHPE.ActiveCfg = Debug|CHPE + {53D52B0B-86D9-4D31-AD09-0D6B3C063ADD}.Debug|CHPE.Build.0 = Debug|CHPE + {53D52B0B-86D9-4D31-AD09-0D6B3C063ADD}.Debug|CHPE.Deploy.0 = Debug|CHPE {53D52B0B-86D9-4D31-AD09-0D6B3C063ADD}.Debug|x64.ActiveCfg = Debug|x64 {53D52B0B-86D9-4D31-AD09-0D6B3C063ADD}.Debug|x64.Build.0 = Debug|x64 {53D52B0B-86D9-4D31-AD09-0D6B3C063ADD}.Debug|x86.ActiveCfg = Debug|Win32 @@ -698,6 +952,10 @@ Global {53D52B0B-86D9-4D31-AD09-0D6B3C063ADD}.Release|ARM.Build.0 = Release|ARM {53D52B0B-86D9-4D31-AD09-0D6B3C063ADD}.Release|ARM64.ActiveCfg = Release|ARM64 {53D52B0B-86D9-4D31-AD09-0D6B3C063ADD}.Release|ARM64.Build.0 = Release|ARM64 + {53D52B0B-86D9-4D31-AD09-0D6B3C063ADD}.Release|ARM64.Deploy.0 = Release|ARM64 + {53D52B0B-86D9-4D31-AD09-0D6B3C063ADD}.Release|CHPE.ActiveCfg = Release|CHPE + {53D52B0B-86D9-4D31-AD09-0D6B3C063ADD}.Release|CHPE.Build.0 = Release|CHPE + {53D52B0B-86D9-4D31-AD09-0D6B3C063ADD}.Release|CHPE.Deploy.0 = Release|CHPE {53D52B0B-86D9-4D31-AD09-0D6B3C063ADD}.Release|x64.ActiveCfg = Release|x64 {53D52B0B-86D9-4D31-AD09-0D6B3C063ADD}.Release|x64.Build.0 = Release|x64 {53D52B0B-86D9-4D31-AD09-0D6B3C063ADD}.Release|x86.ActiveCfg = Release|Win32 @@ -706,6 +964,10 @@ Global {53D52B0B-86D9-4D31-AD09-0D6B3C063ADD}.Test|ARM.Build.0 = Test|ARM {53D52B0B-86D9-4D31-AD09-0D6B3C063ADD}.Test|ARM64.ActiveCfg = Test|ARM64 {53D52B0B-86D9-4D31-AD09-0D6B3C063ADD}.Test|ARM64.Build.0 = Test|ARM64 + {53D52B0B-86D9-4D31-AD09-0D6B3C063ADD}.Test|ARM64.Deploy.0 = Test|ARM64 + {53D52B0B-86D9-4D31-AD09-0D6B3C063ADD}.Test|CHPE.ActiveCfg = Test|CHPE + {53D52B0B-86D9-4D31-AD09-0D6B3C063ADD}.Test|CHPE.Build.0 = Test|CHPE + {53D52B0B-86D9-4D31-AD09-0D6B3C063ADD}.Test|CHPE.Deploy.0 = Test|CHPE {53D52B0B-86D9-4D31-AD09-0D6B3C063ADD}.Test|x64.ActiveCfg = Test|x64 {53D52B0B-86D9-4D31-AD09-0D6B3C063ADD}.Test|x64.Build.0 = Test|x64 {53D52B0B-86D9-4D31-AD09-0D6B3C063ADD}.Test|x86.ActiveCfg = Test|Win32 @@ -714,6 +976,10 @@ Global {73CE5C59-E0BA-413D-A73C-3EECE067891B}.Debug|ARM.Build.0 = Debug|ARM {73CE5C59-E0BA-413D-A73C-3EECE067891B}.Debug|ARM64.ActiveCfg = Debug|ARM64 {73CE5C59-E0BA-413D-A73C-3EECE067891B}.Debug|ARM64.Build.0 = Debug|ARM64 + {73CE5C59-E0BA-413D-A73C-3EECE067891B}.Debug|ARM64.Deploy.0 = Debug|ARM64 + {73CE5C59-E0BA-413D-A73C-3EECE067891B}.Debug|CHPE.ActiveCfg = Debug|CHPE + {73CE5C59-E0BA-413D-A73C-3EECE067891B}.Debug|CHPE.Build.0 = Debug|CHPE + {73CE5C59-E0BA-413D-A73C-3EECE067891B}.Debug|CHPE.Deploy.0 = Debug|CHPE {73CE5C59-E0BA-413D-A73C-3EECE067891B}.Debug|x64.ActiveCfg = Debug|x64 {73CE5C59-E0BA-413D-A73C-3EECE067891B}.Debug|x64.Build.0 = Debug|x64 {73CE5C59-E0BA-413D-A73C-3EECE067891B}.Debug|x86.ActiveCfg = Debug|Win32 @@ -722,6 +988,10 @@ Global {73CE5C59-E0BA-413D-A73C-3EECE067891B}.Release|ARM.Build.0 = Release|ARM {73CE5C59-E0BA-413D-A73C-3EECE067891B}.Release|ARM64.ActiveCfg = Release|ARM64 {73CE5C59-E0BA-413D-A73C-3EECE067891B}.Release|ARM64.Build.0 = Release|ARM64 + {73CE5C59-E0BA-413D-A73C-3EECE067891B}.Release|ARM64.Deploy.0 = Release|ARM64 + {73CE5C59-E0BA-413D-A73C-3EECE067891B}.Release|CHPE.ActiveCfg = Release|CHPE + {73CE5C59-E0BA-413D-A73C-3EECE067891B}.Release|CHPE.Build.0 = Release|CHPE + {73CE5C59-E0BA-413D-A73C-3EECE067891B}.Release|CHPE.Deploy.0 = Release|CHPE {73CE5C59-E0BA-413D-A73C-3EECE067891B}.Release|x64.ActiveCfg = Release|x64 {73CE5C59-E0BA-413D-A73C-3EECE067891B}.Release|x64.Build.0 = Release|x64 {73CE5C59-E0BA-413D-A73C-3EECE067891B}.Release|x86.ActiveCfg = Release|Win32 @@ -730,6 +1000,10 @@ Global {73CE5C59-E0BA-413D-A73C-3EECE067891B}.Test|ARM.Build.0 = Test|ARM {73CE5C59-E0BA-413D-A73C-3EECE067891B}.Test|ARM64.ActiveCfg = Test|ARM64 {73CE5C59-E0BA-413D-A73C-3EECE067891B}.Test|ARM64.Build.0 = Test|ARM64 + {73CE5C59-E0BA-413D-A73C-3EECE067891B}.Test|ARM64.Deploy.0 = Test|ARM64 + {73CE5C59-E0BA-413D-A73C-3EECE067891B}.Test|CHPE.ActiveCfg = Test|CHPE + {73CE5C59-E0BA-413D-A73C-3EECE067891B}.Test|CHPE.Build.0 = Test|CHPE + {73CE5C59-E0BA-413D-A73C-3EECE067891B}.Test|CHPE.Deploy.0 = Test|CHPE {73CE5C59-E0BA-413D-A73C-3EECE067891B}.Test|x64.ActiveCfg = Test|x64 {73CE5C59-E0BA-413D-A73C-3EECE067891B}.Test|x64.Build.0 = Test|x64 {73CE5C59-E0BA-413D-A73C-3EECE067891B}.Test|x86.ActiveCfg = Test|Win32 @@ -738,6 +1012,10 @@ Global {129AC184-877C-441F-AC49-A692CE700E62}.Debug|ARM.Build.0 = Debug|ARM {129AC184-877C-441F-AC49-A692CE700E62}.Debug|ARM64.ActiveCfg = Debug|ARM64 {129AC184-877C-441F-AC49-A692CE700E62}.Debug|ARM64.Build.0 = Debug|ARM64 + {129AC184-877C-441F-AC49-A692CE700E62}.Debug|ARM64.Deploy.0 = Debug|ARM64 + {129AC184-877C-441F-AC49-A692CE700E62}.Debug|CHPE.ActiveCfg = Debug|CHPE + {129AC184-877C-441F-AC49-A692CE700E62}.Debug|CHPE.Build.0 = Debug|CHPE + {129AC184-877C-441F-AC49-A692CE700E62}.Debug|CHPE.Deploy.0 = Debug|CHPE {129AC184-877C-441F-AC49-A692CE700E62}.Debug|x64.ActiveCfg = Debug|x64 {129AC184-877C-441F-AC49-A692CE700E62}.Debug|x64.Build.0 = Debug|x64 {129AC184-877C-441F-AC49-A692CE700E62}.Debug|x86.ActiveCfg = Debug|Win32 @@ -746,6 +1024,10 @@ Global {129AC184-877C-441F-AC49-A692CE700E62}.Release|ARM.Build.0 = Release|ARM {129AC184-877C-441F-AC49-A692CE700E62}.Release|ARM64.ActiveCfg = Release|ARM64 {129AC184-877C-441F-AC49-A692CE700E62}.Release|ARM64.Build.0 = Release|ARM64 + {129AC184-877C-441F-AC49-A692CE700E62}.Release|ARM64.Deploy.0 = Release|ARM64 + {129AC184-877C-441F-AC49-A692CE700E62}.Release|CHPE.ActiveCfg = Release|CHPE + {129AC184-877C-441F-AC49-A692CE700E62}.Release|CHPE.Build.0 = Release|CHPE + {129AC184-877C-441F-AC49-A692CE700E62}.Release|CHPE.Deploy.0 = Release|CHPE {129AC184-877C-441F-AC49-A692CE700E62}.Release|x64.ActiveCfg = Release|x64 {129AC184-877C-441F-AC49-A692CE700E62}.Release|x64.Build.0 = Release|x64 {129AC184-877C-441F-AC49-A692CE700E62}.Release|x86.ActiveCfg = Release|Win32 @@ -754,6 +1036,10 @@ Global {129AC184-877C-441F-AC49-A692CE700E62}.Test|ARM.Build.0 = Test|ARM {129AC184-877C-441F-AC49-A692CE700E62}.Test|ARM64.ActiveCfg = Test|ARM64 {129AC184-877C-441F-AC49-A692CE700E62}.Test|ARM64.Build.0 = Test|ARM64 + {129AC184-877C-441F-AC49-A692CE700E62}.Test|ARM64.Deploy.0 = Test|ARM64 + {129AC184-877C-441F-AC49-A692CE700E62}.Test|CHPE.ActiveCfg = Test|CHPE + {129AC184-877C-441F-AC49-A692CE700E62}.Test|CHPE.Build.0 = Test|CHPE + {129AC184-877C-441F-AC49-A692CE700E62}.Test|CHPE.Deploy.0 = Test|CHPE {129AC184-877C-441F-AC49-A692CE700E62}.Test|x64.ActiveCfg = Test|x64 {129AC184-877C-441F-AC49-A692CE700E62}.Test|x64.Build.0 = Test|x64 {129AC184-877C-441F-AC49-A692CE700E62}.Test|x86.ActiveCfg = Test|Win32 @@ -762,6 +1048,10 @@ Global {FFD0FA88-7A39-407E-A92D-D3A06273E1AC}.Debug|ARM.Build.0 = Debug|ARM {FFD0FA88-7A39-407E-A92D-D3A06273E1AC}.Debug|ARM64.ActiveCfg = Debug|ARM64 {FFD0FA88-7A39-407E-A92D-D3A06273E1AC}.Debug|ARM64.Build.0 = Debug|ARM64 + {FFD0FA88-7A39-407E-A92D-D3A06273E1AC}.Debug|ARM64.Deploy.0 = Debug|ARM64 + {FFD0FA88-7A39-407E-A92D-D3A06273E1AC}.Debug|CHPE.ActiveCfg = Debug|CHPE + {FFD0FA88-7A39-407E-A92D-D3A06273E1AC}.Debug|CHPE.Build.0 = Debug|CHPE + {FFD0FA88-7A39-407E-A92D-D3A06273E1AC}.Debug|CHPE.Deploy.0 = Debug|CHPE {FFD0FA88-7A39-407E-A92D-D3A06273E1AC}.Debug|x64.ActiveCfg = Debug|x64 {FFD0FA88-7A39-407E-A92D-D3A06273E1AC}.Debug|x64.Build.0 = Debug|x64 {FFD0FA88-7A39-407E-A92D-D3A06273E1AC}.Debug|x86.ActiveCfg = Debug|Win32 @@ -770,6 +1060,10 @@ Global {FFD0FA88-7A39-407E-A92D-D3A06273E1AC}.Release|ARM.Build.0 = Release|ARM {FFD0FA88-7A39-407E-A92D-D3A06273E1AC}.Release|ARM64.ActiveCfg = Release|ARM64 {FFD0FA88-7A39-407E-A92D-D3A06273E1AC}.Release|ARM64.Build.0 = Release|ARM64 + {FFD0FA88-7A39-407E-A92D-D3A06273E1AC}.Release|ARM64.Deploy.0 = Release|ARM64 + {FFD0FA88-7A39-407E-A92D-D3A06273E1AC}.Release|CHPE.ActiveCfg = Release|CHPE + {FFD0FA88-7A39-407E-A92D-D3A06273E1AC}.Release|CHPE.Build.0 = Release|CHPE + {FFD0FA88-7A39-407E-A92D-D3A06273E1AC}.Release|CHPE.Deploy.0 = Release|CHPE {FFD0FA88-7A39-407E-A92D-D3A06273E1AC}.Release|x64.ActiveCfg = Release|x64 {FFD0FA88-7A39-407E-A92D-D3A06273E1AC}.Release|x64.Build.0 = Release|x64 {FFD0FA88-7A39-407E-A92D-D3A06273E1AC}.Release|x86.ActiveCfg = Release|Win32 @@ -778,6 +1072,10 @@ Global {FFD0FA88-7A39-407E-A92D-D3A06273E1AC}.Test|ARM.Build.0 = Test|ARM {FFD0FA88-7A39-407E-A92D-D3A06273E1AC}.Test|ARM64.ActiveCfg = Test|ARM64 {FFD0FA88-7A39-407E-A92D-D3A06273E1AC}.Test|ARM64.Build.0 = Test|ARM64 + {FFD0FA88-7A39-407E-A92D-D3A06273E1AC}.Test|ARM64.Deploy.0 = Test|ARM64 + {FFD0FA88-7A39-407E-A92D-D3A06273E1AC}.Test|CHPE.ActiveCfg = Test|CHPE + {FFD0FA88-7A39-407E-A92D-D3A06273E1AC}.Test|CHPE.Build.0 = Test|CHPE + {FFD0FA88-7A39-407E-A92D-D3A06273E1AC}.Test|CHPE.Deploy.0 = Test|CHPE {FFD0FA88-7A39-407E-A92D-D3A06273E1AC}.Test|x64.ActiveCfg = Test|x64 {FFD0FA88-7A39-407E-A92D-D3A06273E1AC}.Test|x64.Build.0 = Test|x64 {FFD0FA88-7A39-407E-A92D-D3A06273E1AC}.Test|x86.ActiveCfg = Test|Win32 @@ -786,6 +1084,10 @@ Global {0DB5ECBC-9385-4A65-BE2C-4EF7C65CB719}.Debug|ARM.Build.0 = Debug|ARM {0DB5ECBC-9385-4A65-BE2C-4EF7C65CB719}.Debug|ARM64.ActiveCfg = Debug|ARM64 {0DB5ECBC-9385-4A65-BE2C-4EF7C65CB719}.Debug|ARM64.Build.0 = Debug|ARM64 + {0DB5ECBC-9385-4A65-BE2C-4EF7C65CB719}.Debug|ARM64.Deploy.0 = Debug|ARM64 + {0DB5ECBC-9385-4A65-BE2C-4EF7C65CB719}.Debug|CHPE.ActiveCfg = Debug|CHPE + {0DB5ECBC-9385-4A65-BE2C-4EF7C65CB719}.Debug|CHPE.Build.0 = Debug|CHPE + {0DB5ECBC-9385-4A65-BE2C-4EF7C65CB719}.Debug|CHPE.Deploy.0 = Debug|CHPE {0DB5ECBC-9385-4A65-BE2C-4EF7C65CB719}.Debug|x64.ActiveCfg = Debug|x64 {0DB5ECBC-9385-4A65-BE2C-4EF7C65CB719}.Debug|x64.Build.0 = Debug|x64 {0DB5ECBC-9385-4A65-BE2C-4EF7C65CB719}.Debug|x86.ActiveCfg = Debug|Win32 @@ -794,6 +1096,10 @@ Global {0DB5ECBC-9385-4A65-BE2C-4EF7C65CB719}.Release|ARM.Build.0 = Release|ARM {0DB5ECBC-9385-4A65-BE2C-4EF7C65CB719}.Release|ARM64.ActiveCfg = Release|ARM64 {0DB5ECBC-9385-4A65-BE2C-4EF7C65CB719}.Release|ARM64.Build.0 = Release|ARM64 + {0DB5ECBC-9385-4A65-BE2C-4EF7C65CB719}.Release|ARM64.Deploy.0 = Release|ARM64 + {0DB5ECBC-9385-4A65-BE2C-4EF7C65CB719}.Release|CHPE.ActiveCfg = Release|CHPE + {0DB5ECBC-9385-4A65-BE2C-4EF7C65CB719}.Release|CHPE.Build.0 = Release|CHPE + {0DB5ECBC-9385-4A65-BE2C-4EF7C65CB719}.Release|CHPE.Deploy.0 = Release|CHPE {0DB5ECBC-9385-4A65-BE2C-4EF7C65CB719}.Release|x64.ActiveCfg = Release|x64 {0DB5ECBC-9385-4A65-BE2C-4EF7C65CB719}.Release|x64.Build.0 = Release|x64 {0DB5ECBC-9385-4A65-BE2C-4EF7C65CB719}.Release|x86.ActiveCfg = Release|Win32 @@ -802,6 +1108,10 @@ Global {0DB5ECBC-9385-4A65-BE2C-4EF7C65CB719}.Test|ARM.Build.0 = Test|ARM {0DB5ECBC-9385-4A65-BE2C-4EF7C65CB719}.Test|ARM64.ActiveCfg = Test|ARM64 {0DB5ECBC-9385-4A65-BE2C-4EF7C65CB719}.Test|ARM64.Build.0 = Test|ARM64 + {0DB5ECBC-9385-4A65-BE2C-4EF7C65CB719}.Test|ARM64.Deploy.0 = Test|ARM64 + {0DB5ECBC-9385-4A65-BE2C-4EF7C65CB719}.Test|CHPE.ActiveCfg = Test|CHPE + {0DB5ECBC-9385-4A65-BE2C-4EF7C65CB719}.Test|CHPE.Build.0 = Test|CHPE + {0DB5ECBC-9385-4A65-BE2C-4EF7C65CB719}.Test|CHPE.Deploy.0 = Test|CHPE {0DB5ECBC-9385-4A65-BE2C-4EF7C65CB719}.Test|x64.ActiveCfg = Test|x64 {0DB5ECBC-9385-4A65-BE2C-4EF7C65CB719}.Test|x64.Build.0 = Test|x64 {0DB5ECBC-9385-4A65-BE2C-4EF7C65CB719}.Test|x86.ActiveCfg = Test|Win32 @@ -810,6 +1120,10 @@ Global {31024620-7B97-4EC7-96E8-E7B296A17DF4}.Debug|ARM.Build.0 = Debug|ARM {31024620-7B97-4EC7-96E8-E7B296A17DF4}.Debug|ARM64.ActiveCfg = Debug|ARM64 {31024620-7B97-4EC7-96E8-E7B296A17DF4}.Debug|ARM64.Build.0 = Debug|ARM64 + {31024620-7B97-4EC7-96E8-E7B296A17DF4}.Debug|ARM64.Deploy.0 = Debug|ARM64 + {31024620-7B97-4EC7-96E8-E7B296A17DF4}.Debug|CHPE.ActiveCfg = Debug|CHPE + {31024620-7B97-4EC7-96E8-E7B296A17DF4}.Debug|CHPE.Build.0 = Debug|CHPE + {31024620-7B97-4EC7-96E8-E7B296A17DF4}.Debug|CHPE.Deploy.0 = Debug|CHPE {31024620-7B97-4EC7-96E8-E7B296A17DF4}.Debug|x64.ActiveCfg = Debug|x64 {31024620-7B97-4EC7-96E8-E7B296A17DF4}.Debug|x64.Build.0 = Debug|x64 {31024620-7B97-4EC7-96E8-E7B296A17DF4}.Debug|x86.ActiveCfg = Debug|Win32 @@ -818,6 +1132,10 @@ Global {31024620-7B97-4EC7-96E8-E7B296A17DF4}.Release|ARM.Build.0 = Release|ARM {31024620-7B97-4EC7-96E8-E7B296A17DF4}.Release|ARM64.ActiveCfg = Release|ARM64 {31024620-7B97-4EC7-96E8-E7B296A17DF4}.Release|ARM64.Build.0 = Release|ARM64 + {31024620-7B97-4EC7-96E8-E7B296A17DF4}.Release|ARM64.Deploy.0 = Release|ARM64 + {31024620-7B97-4EC7-96E8-E7B296A17DF4}.Release|CHPE.ActiveCfg = Release|CHPE + {31024620-7B97-4EC7-96E8-E7B296A17DF4}.Release|CHPE.Build.0 = Release|CHPE + {31024620-7B97-4EC7-96E8-E7B296A17DF4}.Release|CHPE.Deploy.0 = Release|CHPE {31024620-7B97-4EC7-96E8-E7B296A17DF4}.Release|x64.ActiveCfg = Release|x64 {31024620-7B97-4EC7-96E8-E7B296A17DF4}.Release|x64.Build.0 = Release|x64 {31024620-7B97-4EC7-96E8-E7B296A17DF4}.Release|x86.ActiveCfg = Release|Win32 @@ -826,6 +1144,10 @@ Global {31024620-7B97-4EC7-96E8-E7B296A17DF4}.Test|ARM.Build.0 = Test|ARM {31024620-7B97-4EC7-96E8-E7B296A17DF4}.Test|ARM64.ActiveCfg = Test|ARM64 {31024620-7B97-4EC7-96E8-E7B296A17DF4}.Test|ARM64.Build.0 = Test|ARM64 + {31024620-7B97-4EC7-96E8-E7B296A17DF4}.Test|ARM64.Deploy.0 = Test|ARM64 + {31024620-7B97-4EC7-96E8-E7B296A17DF4}.Test|CHPE.ActiveCfg = Test|CHPE + {31024620-7B97-4EC7-96E8-E7B296A17DF4}.Test|CHPE.Build.0 = Test|CHPE + {31024620-7B97-4EC7-96E8-E7B296A17DF4}.Test|CHPE.Deploy.0 = Test|CHPE {31024620-7B97-4EC7-96E8-E7B296A17DF4}.Test|x64.ActiveCfg = Test|x64 {31024620-7B97-4EC7-96E8-E7B296A17DF4}.Test|x64.Build.0 = Test|x64 {31024620-7B97-4EC7-96E8-E7B296A17DF4}.Test|x86.ActiveCfg = Test|Win32 @@ -834,6 +1156,10 @@ Global {EDEB02E2-F389-4CBF-AE7D-3041A934F86B}.Debug|ARM.Build.0 = Debug|ARM {EDEB02E2-F389-4CBF-AE7D-3041A934F86B}.Debug|ARM64.ActiveCfg = Debug|ARM64 {EDEB02E2-F389-4CBF-AE7D-3041A934F86B}.Debug|ARM64.Build.0 = Debug|ARM64 + {EDEB02E2-F389-4CBF-AE7D-3041A934F86B}.Debug|ARM64.Deploy.0 = Debug|ARM64 + {EDEB02E2-F389-4CBF-AE7D-3041A934F86B}.Debug|CHPE.ActiveCfg = Debug|CHPE + {EDEB02E2-F389-4CBF-AE7D-3041A934F86B}.Debug|CHPE.Build.0 = Debug|CHPE + {EDEB02E2-F389-4CBF-AE7D-3041A934F86B}.Debug|CHPE.Deploy.0 = Debug|CHPE {EDEB02E2-F389-4CBF-AE7D-3041A934F86B}.Debug|x64.ActiveCfg = Debug|x64 {EDEB02E2-F389-4CBF-AE7D-3041A934F86B}.Debug|x64.Build.0 = Debug|x64 {EDEB02E2-F389-4CBF-AE7D-3041A934F86B}.Debug|x86.ActiveCfg = Debug|Win32 @@ -842,6 +1168,10 @@ Global {EDEB02E2-F389-4CBF-AE7D-3041A934F86B}.Release|ARM.Build.0 = Release|ARM {EDEB02E2-F389-4CBF-AE7D-3041A934F86B}.Release|ARM64.ActiveCfg = Release|ARM64 {EDEB02E2-F389-4CBF-AE7D-3041A934F86B}.Release|ARM64.Build.0 = Release|ARM64 + {EDEB02E2-F389-4CBF-AE7D-3041A934F86B}.Release|ARM64.Deploy.0 = Release|ARM64 + {EDEB02E2-F389-4CBF-AE7D-3041A934F86B}.Release|CHPE.ActiveCfg = Release|CHPE + {EDEB02E2-F389-4CBF-AE7D-3041A934F86B}.Release|CHPE.Build.0 = Release|CHPE + {EDEB02E2-F389-4CBF-AE7D-3041A934F86B}.Release|CHPE.Deploy.0 = Release|CHPE {EDEB02E2-F389-4CBF-AE7D-3041A934F86B}.Release|x64.ActiveCfg = Release|x64 {EDEB02E2-F389-4CBF-AE7D-3041A934F86B}.Release|x64.Build.0 = Release|x64 {EDEB02E2-F389-4CBF-AE7D-3041A934F86B}.Release|x86.ActiveCfg = Release|Win32 @@ -850,6 +1180,10 @@ Global {EDEB02E2-F389-4CBF-AE7D-3041A934F86B}.Test|ARM.Build.0 = Test|ARM {EDEB02E2-F389-4CBF-AE7D-3041A934F86B}.Test|ARM64.ActiveCfg = Test|ARM64 {EDEB02E2-F389-4CBF-AE7D-3041A934F86B}.Test|ARM64.Build.0 = Test|ARM64 + {EDEB02E2-F389-4CBF-AE7D-3041A934F86B}.Test|ARM64.Deploy.0 = Test|ARM64 + {EDEB02E2-F389-4CBF-AE7D-3041A934F86B}.Test|CHPE.ActiveCfg = Test|CHPE + {EDEB02E2-F389-4CBF-AE7D-3041A934F86B}.Test|CHPE.Build.0 = Test|CHPE + {EDEB02E2-F389-4CBF-AE7D-3041A934F86B}.Test|CHPE.Deploy.0 = Test|CHPE {EDEB02E2-F389-4CBF-AE7D-3041A934F86B}.Test|x64.ActiveCfg = Test|x64 {EDEB02E2-F389-4CBF-AE7D-3041A934F86B}.Test|x64.Build.0 = Test|x64 {EDEB02E2-F389-4CBF-AE7D-3041A934F86B}.Test|x86.ActiveCfg = Test|Win32 @@ -858,6 +1192,10 @@ Global {2F6A1847-BFAF-4B8A-9463-AC39FB46B96A}.Debug|ARM.Build.0 = Debug|ARM {2F6A1847-BFAF-4B8A-9463-AC39FB46B96A}.Debug|ARM64.ActiveCfg = Debug|ARM64 {2F6A1847-BFAF-4B8A-9463-AC39FB46B96A}.Debug|ARM64.Build.0 = Debug|ARM64 + {2F6A1847-BFAF-4B8A-9463-AC39FB46B96A}.Debug|ARM64.Deploy.0 = Debug|ARM64 + {2F6A1847-BFAF-4B8A-9463-AC39FB46B96A}.Debug|CHPE.ActiveCfg = Debug|CHPE + {2F6A1847-BFAF-4B8A-9463-AC39FB46B96A}.Debug|CHPE.Build.0 = Debug|CHPE + {2F6A1847-BFAF-4B8A-9463-AC39FB46B96A}.Debug|CHPE.Deploy.0 = Debug|CHPE {2F6A1847-BFAF-4B8A-9463-AC39FB46B96A}.Debug|x64.ActiveCfg = Debug|x64 {2F6A1847-BFAF-4B8A-9463-AC39FB46B96A}.Debug|x64.Build.0 = Debug|x64 {2F6A1847-BFAF-4B8A-9463-AC39FB46B96A}.Debug|x86.ActiveCfg = Debug|Win32 @@ -866,6 +1204,10 @@ Global {2F6A1847-BFAF-4B8A-9463-AC39FB46B96A}.Release|ARM.Build.0 = Release|ARM {2F6A1847-BFAF-4B8A-9463-AC39FB46B96A}.Release|ARM64.ActiveCfg = Release|ARM64 {2F6A1847-BFAF-4B8A-9463-AC39FB46B96A}.Release|ARM64.Build.0 = Release|ARM64 + {2F6A1847-BFAF-4B8A-9463-AC39FB46B96A}.Release|ARM64.Deploy.0 = Release|ARM64 + {2F6A1847-BFAF-4B8A-9463-AC39FB46B96A}.Release|CHPE.ActiveCfg = Release|CHPE + {2F6A1847-BFAF-4B8A-9463-AC39FB46B96A}.Release|CHPE.Build.0 = Release|CHPE + {2F6A1847-BFAF-4B8A-9463-AC39FB46B96A}.Release|CHPE.Deploy.0 = Release|CHPE {2F6A1847-BFAF-4B8A-9463-AC39FB46B96A}.Release|x64.ActiveCfg = Release|x64 {2F6A1847-BFAF-4B8A-9463-AC39FB46B96A}.Release|x64.Build.0 = Release|x64 {2F6A1847-BFAF-4B8A-9463-AC39FB46B96A}.Release|x86.ActiveCfg = Release|Win32 @@ -874,34 +1216,68 @@ Global {2F6A1847-BFAF-4B8A-9463-AC39FB46B96A}.Test|ARM.Build.0 = Test|ARM {2F6A1847-BFAF-4B8A-9463-AC39FB46B96A}.Test|ARM64.ActiveCfg = Test|ARM64 {2F6A1847-BFAF-4B8A-9463-AC39FB46B96A}.Test|ARM64.Build.0 = Test|ARM64 + {2F6A1847-BFAF-4B8A-9463-AC39FB46B96A}.Test|ARM64.Deploy.0 = Test|ARM64 + {2F6A1847-BFAF-4B8A-9463-AC39FB46B96A}.Test|CHPE.ActiveCfg = Test|CHPE + {2F6A1847-BFAF-4B8A-9463-AC39FB46B96A}.Test|CHPE.Build.0 = Test|CHPE + {2F6A1847-BFAF-4B8A-9463-AC39FB46B96A}.Test|CHPE.Deploy.0 = Test|CHPE {2F6A1847-BFAF-4B8A-9463-AC39FB46B96A}.Test|x64.ActiveCfg = Test|x64 {2F6A1847-BFAF-4B8A-9463-AC39FB46B96A}.Test|x64.Build.0 = Test|x64 {2F6A1847-BFAF-4B8A-9463-AC39FB46B96A}.Test|x86.ActiveCfg = Test|Win32 {2F6A1847-BFAF-4B8A-9463-AC39FB46B96A}.Test|x86.Build.0 = Test|Win32 {02D4FD92-AD34-40CA-85DF-4D6C7E3A1F22}.Debug|ARM.ActiveCfg = Debug|Win32 {02D4FD92-AD34-40CA-85DF-4D6C7E3A1F22}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {02D4FD92-AD34-40CA-85DF-4D6C7E3A1F22}.Debug|ARM64.Build.0 = Debug|ARM64 + {02D4FD92-AD34-40CA-85DF-4D6C7E3A1F22}.Debug|ARM64.Deploy.0 = Debug|ARM64 + {02D4FD92-AD34-40CA-85DF-4D6C7E3A1F22}.Debug|CHPE.ActiveCfg = Debug|CHPE + {02D4FD92-AD34-40CA-85DF-4D6C7E3A1F22}.Debug|CHPE.Build.0 = Debug|CHPE + {02D4FD92-AD34-40CA-85DF-4D6C7E3A1F22}.Debug|CHPE.Deploy.0 = Debug|CHPE {02D4FD92-AD34-40CA-85DF-4D6C7E3A1F22}.Debug|x64.ActiveCfg = Debug|x64 {02D4FD92-AD34-40CA-85DF-4D6C7E3A1F22}.Debug|x86.ActiveCfg = Debug|Win32 {02D4FD92-AD34-40CA-85DF-4D6C7E3A1F22}.Release|ARM.ActiveCfg = Release|Win32 {02D4FD92-AD34-40CA-85DF-4D6C7E3A1F22}.Release|ARM64.ActiveCfg = Release|ARM64 + {02D4FD92-AD34-40CA-85DF-4D6C7E3A1F22}.Release|ARM64.Build.0 = Release|ARM64 + {02D4FD92-AD34-40CA-85DF-4D6C7E3A1F22}.Release|ARM64.Deploy.0 = Release|ARM64 + {02D4FD92-AD34-40CA-85DF-4D6C7E3A1F22}.Release|CHPE.ActiveCfg = Release|CHPE + {02D4FD92-AD34-40CA-85DF-4D6C7E3A1F22}.Release|CHPE.Build.0 = Release|CHPE + {02D4FD92-AD34-40CA-85DF-4D6C7E3A1F22}.Release|CHPE.Deploy.0 = Release|CHPE {02D4FD92-AD34-40CA-85DF-4D6C7E3A1F22}.Release|x64.ActiveCfg = Release|x64 {02D4FD92-AD34-40CA-85DF-4D6C7E3A1F22}.Release|x86.ActiveCfg = Release|Win32 {02D4FD92-AD34-40CA-85DF-4D6C7E3A1F22}.Test|ARM.ActiveCfg = Release|x64 {02D4FD92-AD34-40CA-85DF-4D6C7E3A1F22}.Test|ARM64.ActiveCfg = Test|ARM64 + {02D4FD92-AD34-40CA-85DF-4D6C7E3A1F22}.Test|ARM64.Build.0 = Test|ARM64 + {02D4FD92-AD34-40CA-85DF-4D6C7E3A1F22}.Test|ARM64.Deploy.0 = Test|ARM64 + {02D4FD92-AD34-40CA-85DF-4D6C7E3A1F22}.Test|CHPE.ActiveCfg = Test|CHPE + {02D4FD92-AD34-40CA-85DF-4D6C7E3A1F22}.Test|CHPE.Build.0 = Test|CHPE + {02D4FD92-AD34-40CA-85DF-4D6C7E3A1F22}.Test|CHPE.Deploy.0 = Test|CHPE {02D4FD92-AD34-40CA-85DF-4D6C7E3A1F22}.Test|x64.ActiveCfg = Release|x64 {02D4FD92-AD34-40CA-85DF-4D6C7E3A1F22}.Test|x86.ActiveCfg = Release|Win32 {F48B3491-81DF-4F49-B35F-3308CBE6A379}.Debug|ARM.ActiveCfg = Debug|ARM {F48B3491-81DF-4F49-B35F-3308CBE6A379}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {F48B3491-81DF-4F49-B35F-3308CBE6A379}.Debug|ARM64.Build.0 = Debug|ARM64 + {F48B3491-81DF-4F49-B35F-3308CBE6A379}.Debug|ARM64.Deploy.0 = Debug|ARM64 + {F48B3491-81DF-4F49-B35F-3308CBE6A379}.Debug|CHPE.ActiveCfg = Debug|CHPE + {F48B3491-81DF-4F49-B35F-3308CBE6A379}.Debug|CHPE.Build.0 = Debug|CHPE + {F48B3491-81DF-4F49-B35F-3308CBE6A379}.Debug|CHPE.Deploy.0 = Debug|CHPE {F48B3491-81DF-4F49-B35F-3308CBE6A379}.Debug|x64.ActiveCfg = Debug|x64 {F48B3491-81DF-4F49-B35F-3308CBE6A379}.Debug|x64.Build.0 = Debug|x64 {F48B3491-81DF-4F49-B35F-3308CBE6A379}.Debug|x86.ActiveCfg = Debug|Win32 {F48B3491-81DF-4F49-B35F-3308CBE6A379}.Debug|x86.Build.0 = Debug|Win32 {F48B3491-81DF-4F49-B35F-3308CBE6A379}.Release|ARM.ActiveCfg = Release|ARM {F48B3491-81DF-4F49-B35F-3308CBE6A379}.Release|ARM64.ActiveCfg = Release|ARM64 + {F48B3491-81DF-4F49-B35F-3308CBE6A379}.Release|ARM64.Build.0 = Release|ARM64 + {F48B3491-81DF-4F49-B35F-3308CBE6A379}.Release|ARM64.Deploy.0 = Release|ARM64 + {F48B3491-81DF-4F49-B35F-3308CBE6A379}.Release|CHPE.ActiveCfg = Release|CHPE + {F48B3491-81DF-4F49-B35F-3308CBE6A379}.Release|CHPE.Build.0 = Release|CHPE + {F48B3491-81DF-4F49-B35F-3308CBE6A379}.Release|CHPE.Deploy.0 = Release|CHPE {F48B3491-81DF-4F49-B35F-3308CBE6A379}.Release|x64.ActiveCfg = Release|x64 {F48B3491-81DF-4F49-B35F-3308CBE6A379}.Release|x86.ActiveCfg = Release|Win32 {F48B3491-81DF-4F49-B35F-3308CBE6A379}.Test|ARM.ActiveCfg = Test|ARM {F48B3491-81DF-4F49-B35F-3308CBE6A379}.Test|ARM64.ActiveCfg = Test|ARM64 + {F48B3491-81DF-4F49-B35F-3308CBE6A379}.Test|ARM64.Build.0 = Test|ARM64 + {F48B3491-81DF-4F49-B35F-3308CBE6A379}.Test|ARM64.Deploy.0 = Test|ARM64 + {F48B3491-81DF-4F49-B35F-3308CBE6A379}.Test|CHPE.ActiveCfg = Test|CHPE + {F48B3491-81DF-4F49-B35F-3308CBE6A379}.Test|CHPE.Build.0 = Test|CHPE + {F48B3491-81DF-4F49-B35F-3308CBE6A379}.Test|CHPE.Deploy.0 = Test|CHPE {F48B3491-81DF-4F49-B35F-3308CBE6A379}.Test|x64.ActiveCfg = Test|x64 {F48B3491-81DF-4F49-B35F-3308CBE6A379}.Test|x64.Build.0 = Test|x64 {F48B3491-81DF-4F49-B35F-3308CBE6A379}.Test|x86.ActiveCfg = Test|Win32 @@ -910,6 +1286,10 @@ Global {EE2A3111-4D85-427C-B0AB-E6B0EA7FFB44}.Debug|ARM.Build.0 = Debug|ARM {EE2A3111-4D85-427C-B0AB-E6B0EA7FFB44}.Debug|ARM64.ActiveCfg = Debug|ARM64 {EE2A3111-4D85-427C-B0AB-E6B0EA7FFB44}.Debug|ARM64.Build.0 = Debug|ARM64 + {EE2A3111-4D85-427C-B0AB-E6B0EA7FFB44}.Debug|ARM64.Deploy.0 = Debug|ARM64 + {EE2A3111-4D85-427C-B0AB-E6B0EA7FFB44}.Debug|CHPE.ActiveCfg = Debug|CHPE + {EE2A3111-4D85-427C-B0AB-E6B0EA7FFB44}.Debug|CHPE.Build.0 = Debug|CHPE + {EE2A3111-4D85-427C-B0AB-E6B0EA7FFB44}.Debug|CHPE.Deploy.0 = Debug|CHPE {EE2A3111-4D85-427C-B0AB-E6B0EA7FFB44}.Debug|x64.ActiveCfg = Debug|x64 {EE2A3111-4D85-427C-B0AB-E6B0EA7FFB44}.Debug|x64.Build.0 = Debug|x64 {EE2A3111-4D85-427C-B0AB-E6B0EA7FFB44}.Debug|x86.ActiveCfg = Debug|Win32 @@ -918,6 +1298,10 @@ Global {EE2A3111-4D85-427C-B0AB-E6B0EA7FFB44}.Release|ARM.Build.0 = Release|ARM {EE2A3111-4D85-427C-B0AB-E6B0EA7FFB44}.Release|ARM64.ActiveCfg = Release|ARM64 {EE2A3111-4D85-427C-B0AB-E6B0EA7FFB44}.Release|ARM64.Build.0 = Release|ARM64 + {EE2A3111-4D85-427C-B0AB-E6B0EA7FFB44}.Release|ARM64.Deploy.0 = Release|ARM64 + {EE2A3111-4D85-427C-B0AB-E6B0EA7FFB44}.Release|CHPE.ActiveCfg = Release|CHPE + {EE2A3111-4D85-427C-B0AB-E6B0EA7FFB44}.Release|CHPE.Build.0 = Release|CHPE + {EE2A3111-4D85-427C-B0AB-E6B0EA7FFB44}.Release|CHPE.Deploy.0 = Release|CHPE {EE2A3111-4D85-427C-B0AB-E6B0EA7FFB44}.Release|x64.ActiveCfg = Release|x64 {EE2A3111-4D85-427C-B0AB-E6B0EA7FFB44}.Release|x64.Build.0 = Release|x64 {EE2A3111-4D85-427C-B0AB-E6B0EA7FFB44}.Release|x86.ActiveCfg = Release|Win32 @@ -926,6 +1310,10 @@ Global {EE2A3111-4D85-427C-B0AB-E6B0EA7FFB44}.Test|ARM.Build.0 = Test|ARM {EE2A3111-4D85-427C-B0AB-E6B0EA7FFB44}.Test|ARM64.ActiveCfg = Test|ARM64 {EE2A3111-4D85-427C-B0AB-E6B0EA7FFB44}.Test|ARM64.Build.0 = Test|ARM64 + {EE2A3111-4D85-427C-B0AB-E6B0EA7FFB44}.Test|ARM64.Deploy.0 = Test|ARM64 + {EE2A3111-4D85-427C-B0AB-E6B0EA7FFB44}.Test|CHPE.ActiveCfg = Test|CHPE + {EE2A3111-4D85-427C-B0AB-E6B0EA7FFB44}.Test|CHPE.Build.0 = Test|CHPE + {EE2A3111-4D85-427C-B0AB-E6B0EA7FFB44}.Test|CHPE.Deploy.0 = Test|CHPE {EE2A3111-4D85-427C-B0AB-E6B0EA7FFB44}.Test|x64.ActiveCfg = Test|x64 {EE2A3111-4D85-427C-B0AB-E6B0EA7FFB44}.Test|x64.Build.0 = Test|x64 {EE2A3111-4D85-427C-B0AB-E6B0EA7FFB44}.Test|x86.ActiveCfg = Test|Win32 @@ -934,6 +1322,10 @@ Global {347824B1-7100-4EE6-8A6B-4FF64E66B0C0}.Debug|ARM.Build.0 = Debug|ARM {347824B1-7100-4EE6-8A6B-4FF64E66B0C0}.Debug|ARM64.ActiveCfg = Debug|ARM64 {347824B1-7100-4EE6-8A6B-4FF64E66B0C0}.Debug|ARM64.Build.0 = Debug|ARM64 + {347824B1-7100-4EE6-8A6B-4FF64E66B0C0}.Debug|ARM64.Deploy.0 = Debug|ARM64 + {347824B1-7100-4EE6-8A6B-4FF64E66B0C0}.Debug|CHPE.ActiveCfg = Debug|CHPE + {347824B1-7100-4EE6-8A6B-4FF64E66B0C0}.Debug|CHPE.Build.0 = Debug|CHPE + {347824B1-7100-4EE6-8A6B-4FF64E66B0C0}.Debug|CHPE.Deploy.0 = Debug|CHPE {347824B1-7100-4EE6-8A6B-4FF64E66B0C0}.Debug|x64.ActiveCfg = Debug|x64 {347824B1-7100-4EE6-8A6B-4FF64E66B0C0}.Debug|x64.Build.0 = Debug|x64 {347824B1-7100-4EE6-8A6B-4FF64E66B0C0}.Debug|x86.ActiveCfg = Debug|Win32 @@ -942,6 +1334,10 @@ Global {347824B1-7100-4EE6-8A6B-4FF64E66B0C0}.Release|ARM.Build.0 = Release|ARM {347824B1-7100-4EE6-8A6B-4FF64E66B0C0}.Release|ARM64.ActiveCfg = Release|ARM64 {347824B1-7100-4EE6-8A6B-4FF64E66B0C0}.Release|ARM64.Build.0 = Release|ARM64 + {347824B1-7100-4EE6-8A6B-4FF64E66B0C0}.Release|ARM64.Deploy.0 = Release|ARM64 + {347824B1-7100-4EE6-8A6B-4FF64E66B0C0}.Release|CHPE.ActiveCfg = Release|CHPE + {347824B1-7100-4EE6-8A6B-4FF64E66B0C0}.Release|CHPE.Build.0 = Release|CHPE + {347824B1-7100-4EE6-8A6B-4FF64E66B0C0}.Release|CHPE.Deploy.0 = Release|CHPE {347824B1-7100-4EE6-8A6B-4FF64E66B0C0}.Release|x64.ActiveCfg = Release|x64 {347824B1-7100-4EE6-8A6B-4FF64E66B0C0}.Release|x64.Build.0 = Release|x64 {347824B1-7100-4EE6-8A6B-4FF64E66B0C0}.Release|x86.ActiveCfg = Release|Win32 @@ -950,6 +1346,10 @@ Global {347824B1-7100-4EE6-8A6B-4FF64E66B0C0}.Test|ARM.Build.0 = Test|ARM {347824B1-7100-4EE6-8A6B-4FF64E66B0C0}.Test|ARM64.ActiveCfg = Test|ARM64 {347824B1-7100-4EE6-8A6B-4FF64E66B0C0}.Test|ARM64.Build.0 = Test|ARM64 + {347824B1-7100-4EE6-8A6B-4FF64E66B0C0}.Test|ARM64.Deploy.0 = Test|ARM64 + {347824B1-7100-4EE6-8A6B-4FF64E66B0C0}.Test|CHPE.ActiveCfg = Test|CHPE + {347824B1-7100-4EE6-8A6B-4FF64E66B0C0}.Test|CHPE.Build.0 = Test|CHPE + {347824B1-7100-4EE6-8A6B-4FF64E66B0C0}.Test|CHPE.Deploy.0 = Test|CHPE {347824B1-7100-4EE6-8A6B-4FF64E66B0C0}.Test|x64.ActiveCfg = Test|x64 {347824B1-7100-4EE6-8A6B-4FF64E66B0C0}.Test|x64.Build.0 = Test|x64 {347824B1-7100-4EE6-8A6B-4FF64E66B0C0}.Test|x86.ActiveCfg = Test|Win32 @@ -958,6 +1358,10 @@ Global {0494C753-5BB9-45AA-874E-E61B9922E88F}.Debug|ARM.Build.0 = Debug|ARM {0494C753-5BB9-45AA-874E-E61B9922E88F}.Debug|ARM64.ActiveCfg = Debug|ARM64 {0494C753-5BB9-45AA-874E-E61B9922E88F}.Debug|ARM64.Build.0 = Debug|ARM64 + {0494C753-5BB9-45AA-874E-E61B9922E88F}.Debug|ARM64.Deploy.0 = Debug|ARM64 + {0494C753-5BB9-45AA-874E-E61B9922E88F}.Debug|CHPE.ActiveCfg = Debug|CHPE + {0494C753-5BB9-45AA-874E-E61B9922E88F}.Debug|CHPE.Build.0 = Debug|CHPE + {0494C753-5BB9-45AA-874E-E61B9922E88F}.Debug|CHPE.Deploy.0 = Debug|CHPE {0494C753-5BB9-45AA-874E-E61B9922E88F}.Debug|x64.ActiveCfg = Debug|x64 {0494C753-5BB9-45AA-874E-E61B9922E88F}.Debug|x64.Build.0 = Debug|x64 {0494C753-5BB9-45AA-874E-E61B9922E88F}.Debug|x86.ActiveCfg = Debug|Win32 @@ -966,6 +1370,10 @@ Global {0494C753-5BB9-45AA-874E-E61B9922E88F}.Release|ARM.Build.0 = Release|ARM {0494C753-5BB9-45AA-874E-E61B9922E88F}.Release|ARM64.ActiveCfg = Release|ARM64 {0494C753-5BB9-45AA-874E-E61B9922E88F}.Release|ARM64.Build.0 = Release|ARM64 + {0494C753-5BB9-45AA-874E-E61B9922E88F}.Release|ARM64.Deploy.0 = Release|ARM64 + {0494C753-5BB9-45AA-874E-E61B9922E88F}.Release|CHPE.ActiveCfg = Release|CHPE + {0494C753-5BB9-45AA-874E-E61B9922E88F}.Release|CHPE.Build.0 = Release|CHPE + {0494C753-5BB9-45AA-874E-E61B9922E88F}.Release|CHPE.Deploy.0 = Release|CHPE {0494C753-5BB9-45AA-874E-E61B9922E88F}.Release|x64.ActiveCfg = Release|x64 {0494C753-5BB9-45AA-874E-E61B9922E88F}.Release|x64.Build.0 = Release|x64 {0494C753-5BB9-45AA-874E-E61B9922E88F}.Release|x86.ActiveCfg = Release|Win32 @@ -974,6 +1382,10 @@ Global {0494C753-5BB9-45AA-874E-E61B9922E88F}.Test|ARM.Build.0 = Test|ARM {0494C753-5BB9-45AA-874E-E61B9922E88F}.Test|ARM64.ActiveCfg = Test|ARM64 {0494C753-5BB9-45AA-874E-E61B9922E88F}.Test|ARM64.Build.0 = Test|ARM64 + {0494C753-5BB9-45AA-874E-E61B9922E88F}.Test|ARM64.Deploy.0 = Test|ARM64 + {0494C753-5BB9-45AA-874E-E61B9922E88F}.Test|CHPE.ActiveCfg = Test|CHPE + {0494C753-5BB9-45AA-874E-E61B9922E88F}.Test|CHPE.Build.0 = Test|CHPE + {0494C753-5BB9-45AA-874E-E61B9922E88F}.Test|CHPE.Deploy.0 = Test|CHPE {0494C753-5BB9-45AA-874E-E61B9922E88F}.Test|x64.ActiveCfg = Test|x64 {0494C753-5BB9-45AA-874E-E61B9922E88F}.Test|x64.Build.0 = Test|x64 {0494C753-5BB9-45AA-874E-E61B9922E88F}.Test|x86.ActiveCfg = Test|Win32 @@ -982,6 +1394,10 @@ Global {E14F373D-05A0-4259-A5E9-AFE8405FB847}.Debug|ARM.Build.0 = Debug|ARM {E14F373D-05A0-4259-A5E9-AFE8405FB847}.Debug|ARM64.ActiveCfg = Debug|ARM64 {E14F373D-05A0-4259-A5E9-AFE8405FB847}.Debug|ARM64.Build.0 = Debug|ARM64 + {E14F373D-05A0-4259-A5E9-AFE8405FB847}.Debug|ARM64.Deploy.0 = Debug|ARM64 + {E14F373D-05A0-4259-A5E9-AFE8405FB847}.Debug|CHPE.ActiveCfg = Debug|CHPE + {E14F373D-05A0-4259-A5E9-AFE8405FB847}.Debug|CHPE.Build.0 = Debug|CHPE + {E14F373D-05A0-4259-A5E9-AFE8405FB847}.Debug|CHPE.Deploy.0 = Debug|CHPE {E14F373D-05A0-4259-A5E9-AFE8405FB847}.Debug|x64.ActiveCfg = Debug|x64 {E14F373D-05A0-4259-A5E9-AFE8405FB847}.Debug|x64.Build.0 = Debug|x64 {E14F373D-05A0-4259-A5E9-AFE8405FB847}.Debug|x86.ActiveCfg = Debug|Win32 @@ -990,6 +1406,10 @@ Global {E14F373D-05A0-4259-A5E9-AFE8405FB847}.Release|ARM.Build.0 = Release|ARM {E14F373D-05A0-4259-A5E9-AFE8405FB847}.Release|ARM64.ActiveCfg = Release|ARM64 {E14F373D-05A0-4259-A5E9-AFE8405FB847}.Release|ARM64.Build.0 = Release|ARM64 + {E14F373D-05A0-4259-A5E9-AFE8405FB847}.Release|ARM64.Deploy.0 = Release|ARM64 + {E14F373D-05A0-4259-A5E9-AFE8405FB847}.Release|CHPE.ActiveCfg = Release|CHPE + {E14F373D-05A0-4259-A5E9-AFE8405FB847}.Release|CHPE.Build.0 = Release|CHPE + {E14F373D-05A0-4259-A5E9-AFE8405FB847}.Release|CHPE.Deploy.0 = Release|CHPE {E14F373D-05A0-4259-A5E9-AFE8405FB847}.Release|x64.ActiveCfg = Release|x64 {E14F373D-05A0-4259-A5E9-AFE8405FB847}.Release|x64.Build.0 = Release|x64 {E14F373D-05A0-4259-A5E9-AFE8405FB847}.Release|x86.ActiveCfg = Release|Win32 @@ -998,10 +1418,44 @@ Global {E14F373D-05A0-4259-A5E9-AFE8405FB847}.Test|ARM.Build.0 = Test|ARM {E14F373D-05A0-4259-A5E9-AFE8405FB847}.Test|ARM64.ActiveCfg = Test|ARM64 {E14F373D-05A0-4259-A5E9-AFE8405FB847}.Test|ARM64.Build.0 = Test|ARM64 + {E14F373D-05A0-4259-A5E9-AFE8405FB847}.Test|ARM64.Deploy.0 = Test|ARM64 + {E14F373D-05A0-4259-A5E9-AFE8405FB847}.Test|CHPE.ActiveCfg = Test|CHPE + {E14F373D-05A0-4259-A5E9-AFE8405FB847}.Test|CHPE.Build.0 = Test|CHPE + {E14F373D-05A0-4259-A5E9-AFE8405FB847}.Test|CHPE.Deploy.0 = Test|CHPE {E14F373D-05A0-4259-A5E9-AFE8405FB847}.Test|x64.ActiveCfg = Test|x64 {E14F373D-05A0-4259-A5E9-AFE8405FB847}.Test|x64.Build.0 = Test|x64 {E14F373D-05A0-4259-A5E9-AFE8405FB847}.Test|x86.ActiveCfg = Test|Win32 {E14F373D-05A0-4259-A5E9-AFE8405FB847}.Test|x86.Build.0 = Test|Win32 + {4DA3A367-6ED2-4EE8-9698-5BCD0B8AF7F5}.Debug|ARM.ActiveCfg = Debug|ARM + {4DA3A367-6ED2-4EE8-9698-5BCD0B8AF7F5}.Debug|ARM.Build.0 = Debug|ARM + {4DA3A367-6ED2-4EE8-9698-5BCD0B8AF7F5}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {4DA3A367-6ED2-4EE8-9698-5BCD0B8AF7F5}.Debug|ARM64.Build.0 = Debug|ARM64 + {4DA3A367-6ED2-4EE8-9698-5BCD0B8AF7F5}.Debug|CHPE.ActiveCfg = Debug|CHPE + {4DA3A367-6ED2-4EE8-9698-5BCD0B8AF7F5}.Debug|CHPE.Build.0 = Debug|CHPE + {4DA3A367-6ED2-4EE8-9698-5BCD0B8AF7F5}.Debug|x64.ActiveCfg = Debug|x64 + {4DA3A367-6ED2-4EE8-9698-5BCD0B8AF7F5}.Debug|x64.Build.0 = Debug|x64 + {4DA3A367-6ED2-4EE8-9698-5BCD0B8AF7F5}.Debug|x86.ActiveCfg = Debug|Win32 + {4DA3A367-6ED2-4EE8-9698-5BCD0B8AF7F5}.Debug|x86.Build.0 = Debug|Win32 + {4DA3A367-6ED2-4EE8-9698-5BCD0B8AF7F5}.Release|ARM.ActiveCfg = Release|ARM + {4DA3A367-6ED2-4EE8-9698-5BCD0B8AF7F5}.Release|ARM.Build.0 = Release|ARM + {4DA3A367-6ED2-4EE8-9698-5BCD0B8AF7F5}.Release|ARM64.ActiveCfg = Release|ARM64 + {4DA3A367-6ED2-4EE8-9698-5BCD0B8AF7F5}.Release|ARM64.Build.0 = Release|ARM64 + {4DA3A367-6ED2-4EE8-9698-5BCD0B8AF7F5}.Release|CHPE.ActiveCfg = Release|CHPE + {4DA3A367-6ED2-4EE8-9698-5BCD0B8AF7F5}.Release|CHPE.Build.0 = Release|CHPE + {4DA3A367-6ED2-4EE8-9698-5BCD0B8AF7F5}.Release|x64.ActiveCfg = Release|x64 + {4DA3A367-6ED2-4EE8-9698-5BCD0B8AF7F5}.Release|x64.Build.0 = Release|x64 + {4DA3A367-6ED2-4EE8-9698-5BCD0B8AF7F5}.Release|x86.ActiveCfg = Release|Win32 + {4DA3A367-6ED2-4EE8-9698-5BCD0B8AF7F5}.Release|x86.Build.0 = Release|Win32 + {4DA3A367-6ED2-4EE8-9698-5BCD0B8AF7F5}.Test|ARM.ActiveCfg = Test|ARM + {4DA3A367-6ED2-4EE8-9698-5BCD0B8AF7F5}.Test|ARM.Build.0 = Test|ARM + {4DA3A367-6ED2-4EE8-9698-5BCD0B8AF7F5}.Test|ARM64.ActiveCfg = Test|ARM64 + {4DA3A367-6ED2-4EE8-9698-5BCD0B8AF7F5}.Test|ARM64.Build.0 = Test|ARM64 + {4DA3A367-6ED2-4EE8-9698-5BCD0B8AF7F5}.Test|CHPE.ActiveCfg = Test|CHPE + {4DA3A367-6ED2-4EE8-9698-5BCD0B8AF7F5}.Test|CHPE.Build.0 = Test|CHPE + {4DA3A367-6ED2-4EE8-9698-5BCD0B8AF7F5}.Test|x64.ActiveCfg = Test|x64 + {4DA3A367-6ED2-4EE8-9698-5BCD0B8AF7F5}.Test|x64.Build.0 = Test|x64 + {4DA3A367-6ED2-4EE8-9698-5BCD0B8AF7F5}.Test|x86.ActiveCfg = Test|Win32 + {4DA3A367-6ED2-4EE8-9698-5BCD0B8AF7F5}.Test|x86.Build.0 = Test|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -1049,6 +1503,7 @@ Global {347824B1-7100-4EE6-8A6B-4FF64E66B0C0} = {6C6BC844-3D86-42B4-B3C4-7478487D2C38} {0494C753-5BB9-45AA-874E-E61B9922E88F} = {6C6BC844-3D86-42B4-B3C4-7478487D2C38} {E14F373D-05A0-4259-A5E9-AFE8405FB847} = {6C6BC844-3D86-42B4-B3C4-7478487D2C38} + {4DA3A367-6ED2-4EE8-9698-5BCD0B8AF7F5} = {D8216B93-BD6E-4293-8D98-79CEF7CF66BC} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {1F6CA1BC-6C01-4C82-8505-6A7690EBD556} diff --git a/Build/Common.Build.Default.props b/Build/Common.Build.Default.props index 07d1dd35f69..799e098759b 100644 --- a/Build/Common.Build.Default.props +++ b/Build/Common.Build.Default.props @@ -18,6 +18,7 @@ v140 v141 v142 + v143 diff --git a/Build/NuGet/.pack-version b/Build/NuGet/.pack-version index de1a208d561..feaae22bac7 100644 --- a/Build/NuGet/.pack-version +++ b/Build/NuGet/.pack-version @@ -1 +1 @@ -1.11.19 +1.13.0 diff --git a/Build/NuGet/Microsoft.ChakraCore.ARM.nuspec b/Build/NuGet/Microsoft.ChakraCore.ARM.nuspec deleted file mode 100644 index dd3793be051..00000000000 --- a/Build/NuGet/Microsoft.ChakraCore.ARM.nuspec +++ /dev/null @@ -1,29 +0,0 @@ - - - - Microsoft.ChakraCore.ARM - - $version$ - Chakra Team - Chakra Team - https://github.com/Microsoft/ChakraCore/blob/master/LICENSE.txt - https://github.com/Microsoft/ChakraCore - false - true - ChakraCore is the core part of the Chakra Javascript engine that powers Microsoft Edge. - https://github.com/Microsoft/ChakraCore/wiki/Roadmap#release-notes - Copyright (C) 2016 Microsoft - en-US - Chakra,ChakraCore,javascript,js,ecmascript,compiler,platform,oss,opensource,native - - - - - - - - - - - - diff --git a/Build/NuGet/Microsoft.ChakraCore.ARM.props b/Build/NuGet/Microsoft.ChakraCore.ARM.props deleted file mode 100644 index 710a7fa5a42..00000000000 --- a/Build/NuGet/Microsoft.ChakraCore.ARM.props +++ /dev/null @@ -1,10 +0,0 @@ - - - - - %(Filename)%(Extension) - PreserveNewest - False - - - diff --git a/Build/NuGet/Microsoft.ChakraCore.Symbols.nuspec b/Build/NuGet/Microsoft.ChakraCore.Symbols.nuspec deleted file mode 100644 index 2e7c7c9420c..00000000000 --- a/Build/NuGet/Microsoft.ChakraCore.Symbols.nuspec +++ /dev/null @@ -1,31 +0,0 @@ - - - - Microsoft.ChakraCore.Symbols - - $version$ - Chakra Team - Chakra Team - https://github.com/Microsoft/ChakraCore/blob/master/LICENSE.txt - https://github.com/Microsoft/ChakraCore - false - true - ChakraCore is the core part of the Chakra Javascript engine that powers Microsoft Edge. - https://github.com/Microsoft/ChakraCore/wiki/Roadmap#release-notes - Copyright (C) 2016 Microsoft - en-US - Chakra,ChakraCore,javascript,js,ecmascript,compiler,platform,oss,opensource,native - - - - - - - - - - - - - - diff --git a/Build/NuGet/Microsoft.ChakraCore.Symbols.props b/Build/NuGet/Microsoft.ChakraCore.Symbols.props deleted file mode 100644 index 4c87ee4dc7f..00000000000 --- a/Build/NuGet/Microsoft.ChakraCore.Symbols.props +++ /dev/null @@ -1,36 +0,0 @@ - - - - - x86\%(Filename)%(Extension) - PreserveNewest - False - - - x64\%(Filename)%(Extension) - PreserveNewest - False - - - - - %(Filename)%(Extension) - PreserveNewest - False - - - - - %(Filename)%(Extension) - PreserveNewest - False - - - - - %(Filename)%(Extension) - PreserveNewest - False - - - diff --git a/Build/NuGet/Microsoft.ChakraCore.X64.nuspec b/Build/NuGet/Microsoft.ChakraCore.X64.nuspec deleted file mode 100644 index cebcb03e7c4..00000000000 --- a/Build/NuGet/Microsoft.ChakraCore.X64.nuspec +++ /dev/null @@ -1,29 +0,0 @@ - - - - Microsoft.ChakraCore.X64 - - $version$ - Chakra Team - Chakra Team - https://github.com/Microsoft/ChakraCore/blob/master/LICENSE.txt - https://github.com/Microsoft/ChakraCore - false - true - ChakraCore is the core part of the Chakra Javascript engine that powers Microsoft Edge. - https://github.com/Microsoft/ChakraCore/wiki/Roadmap#release-notes - Copyright (C) 2016 Microsoft - en-US - Chakra,ChakraCore,javascript,js,ecmascript,compiler,platform,oss,opensource,native - - - - - - - - - - - - diff --git a/Build/NuGet/Microsoft.ChakraCore.X64.props b/Build/NuGet/Microsoft.ChakraCore.X64.props deleted file mode 100644 index b764d023db1..00000000000 --- a/Build/NuGet/Microsoft.ChakraCore.X64.props +++ /dev/null @@ -1,10 +0,0 @@ - - - - - %(Filename)%(Extension) - PreserveNewest - False - - - diff --git a/Build/NuGet/Microsoft.ChakraCore.X86.nuspec b/Build/NuGet/Microsoft.ChakraCore.X86.nuspec deleted file mode 100644 index f451423ebed..00000000000 --- a/Build/NuGet/Microsoft.ChakraCore.X86.nuspec +++ /dev/null @@ -1,29 +0,0 @@ - - - - Microsoft.ChakraCore.X86 - - $version$ - Chakra Team - Chakra Team - https://github.com/Microsoft/ChakraCore/blob/master/LICENSE.txt - https://github.com/Microsoft/ChakraCore - false - true - ChakraCore is the core part of the Chakra Javascript engine that powers Microsoft Edge. - https://github.com/Microsoft/ChakraCore/wiki/Roadmap#release-notes - Copyright (C) 2016 Microsoft - en-US - Chakra,ChakraCore,javascript,js,ecmascript,compiler,platform,oss,opensource,native - - - - - - - - - - - - diff --git a/Build/NuGet/Microsoft.ChakraCore.X86.props b/Build/NuGet/Microsoft.ChakraCore.X86.props deleted file mode 100644 index dad146def81..00000000000 --- a/Build/NuGet/Microsoft.ChakraCore.X86.props +++ /dev/null @@ -1,10 +0,0 @@ - - - - - %(Filename)%(Extension) - PreserveNewest - False - - - diff --git a/Build/NuGet/Microsoft.ChakraCore.nuspec b/Build/NuGet/Microsoft.ChakraCore.nuspec deleted file mode 100644 index 27c5c2121ae..00000000000 --- a/Build/NuGet/Microsoft.ChakraCore.nuspec +++ /dev/null @@ -1,31 +0,0 @@ - - - - Microsoft.ChakraCore - - $version$ - Microsoft - Chakra Team - https://github.com/Microsoft/ChakraCore/blob/master/LICENSE.txt - https://github.com/Microsoft/ChakraCore - false - true - ChakraCore is the core part of the Chakra Javascript engine that powers Microsoft Edge. - https://github.com/Microsoft/ChakraCore/wiki/Roadmap#release-notes - © Microsoft Corporation. All rights reserved. - en-US - Chakra,ChakraCore,javascript,js,ecmascript,compiler,platform,oss,opensource,native - - - - - - - - - - - - - - diff --git a/Build/NuGet/Microsoft.ChakraCore.props b/Build/NuGet/Microsoft.ChakraCore.props deleted file mode 100644 index 575ed9d5c6e..00000000000 --- a/Build/NuGet/Microsoft.ChakraCore.props +++ /dev/null @@ -1,36 +0,0 @@ - - - - - x86\%(Filename)%(Extension) - PreserveNewest - False - - - x64\%(Filename)%(Extension) - PreserveNewest - False - - - - - %(Filename)%(Extension) - PreserveNewest - False - - - - - %(Filename)%(Extension) - PreserveNewest - False - - - - - %(Filename)%(Extension) - PreserveNewest - False - - - diff --git a/Build/NuGet/Microsoft.ChakraCore.vc140.nuspec b/Build/NuGet/Microsoft.ChakraCore.vc140.nuspec deleted file mode 100644 index 1a9961bd5cf..00000000000 --- a/Build/NuGet/Microsoft.ChakraCore.vc140.nuspec +++ /dev/null @@ -1,69 +0,0 @@ - - - - Microsoft.ChakraCore.vc140 - - $version$ - Microsoft - Chakra Team - https://github.com/Microsoft/ChakraCore/blob/master/LICENSE.txt - https://github.com/Microsoft/ChakraCore - false - true - ChakraCore is the core part of the Chakra Javascript engine that powers Microsoft Edge. - https://github.com/Microsoft/ChakraCore/wiki/Roadmap#release-notes - © Microsoft Corporation. All rights reserved. - en-US - Chakra,ChakraCore,javascript,js,ecmascript,compiler,platform,oss,opensource,native,nativepackage,C++,vc140 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Build/NuGet/Microsoft.ChakraCore.vc140.targets b/Build/NuGet/Windows.Cpp.All/Items.targets similarity index 76% rename from Build/NuGet/Microsoft.ChakraCore.vc140.targets rename to Build/NuGet/Windows.Cpp.All/Items.targets index 35f83799d39..971cb3741bb 100644 --- a/Build/NuGet/Microsoft.ChakraCore.vc140.targets +++ b/Build/NuGet/Windows.Cpp.All/Items.targets @@ -2,6 +2,8 @@ + $(MSBuildThisFileDirectory)..\..\lib\native\v140\arm64\Debug\ChakraCore.lib;%(AdditionalDependencies) + $(MSBuildThisFileDirectory)..\..\lib\native\v140\arm64\Release\ChakraCore.lib;%(AdditionalDependencies) $(MSBuildThisFileDirectory)..\..\lib\native\v140\arm\Debug\ChakraCore.lib;%(AdditionalDependencies) $(MSBuildThisFileDirectory)..\..\lib\native\v140\arm\Release\ChakraCore.lib;%(AdditionalDependencies) $(MSBuildThisFileDirectory)..\..\lib\native\v140\x64\Debug\ChakraCore.lib;%(AdditionalDependencies) @@ -11,8 +13,16 @@ $(MSBuildThisFileDirectory)include;%(AdditionalIncludeDirectories) - + + + + + + + + + @@ -37,4 +47,4 @@ - \ No newline at end of file + diff --git a/Build/NuGet/Windows.Cpp.All/Primary.nuspec b/Build/NuGet/Windows.Cpp.All/Primary.nuspec new file mode 100644 index 00000000000..5762de4b96d --- /dev/null +++ b/Build/NuGet/Windows.Cpp.All/Primary.nuspec @@ -0,0 +1,77 @@ + + + + $id$ + $version$ + $description$ + $releaseNotes$ + $tags$ + $CommonMetadataElements$ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $CommonFileElements$ + + diff --git a/Build/NuGet/Windows.DotNet.All/Primary.nuspec b/Build/NuGet/Windows.DotNet.All/Primary.nuspec new file mode 100644 index 00000000000..dae095107aa --- /dev/null +++ b/Build/NuGet/Windows.DotNet.All/Primary.nuspec @@ -0,0 +1,20 @@ + + + + $id$ + $version$ + $description$ + $releaseNotes$ + $tags$ + $CommonMetadataElements$ + + + + + + + + + $CommonFileElements$ + + diff --git a/Build/NuGet/Windows.DotNet.All/Symbols.nuspec b/Build/NuGet/Windows.DotNet.All/Symbols.nuspec new file mode 100644 index 00000000000..0effd364479 --- /dev/null +++ b/Build/NuGet/Windows.DotNet.All/Symbols.nuspec @@ -0,0 +1,20 @@ + + + + $id$ + $version$ + $description$ + $releaseNotes$ + $tags$ + $CommonMetadataElements$ + + + + + + + + + $CommonFileElements$ + + diff --git a/Build/NuGet/Windows.DotNet.Arch/Install.ps1.mustache b/Build/NuGet/Windows.DotNet.Arch/Install.ps1.mustache new file mode 100644 index 00000000000..aa280a9ea7c --- /dev/null +++ b/Build/NuGet/Windows.DotNet.Arch/Install.ps1.mustache @@ -0,0 +1,19 @@ +#------------------------------------------------------------------------------------------------------- +# Copyright (C) Microsoft. All rights reserved. +# Copyright (c) ChakraCore Project Contributors. All rights reserved. +# Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. +#------------------------------------------------------------------------------------------------------- + +param($installPath, $toolsPath, $package, $project) + +if ($project.Type -eq 'Web Site') { + $projectDir = $project.Properties.Item('FullPath').Value + + $assemblyDestDir = Join-Path $projectDir 'bin/{{{platformArchitecture}}}' + if (!(Test-Path $assemblyDestDir)) { + New-Item -ItemType Directory -Force -Path $assemblyDestDir + } + + $assemblySourceFiles = Join-Path $installPath 'runtimes/{{{runtimeIdentifier}}}/native/*.*' + Copy-Item $assemblySourceFiles $assemblyDestDir -Force +} diff --git a/Build/NuGet/Windows.DotNet.Arch/Items.props.mustache b/Build/NuGet/Windows.DotNet.Arch/Items.props.mustache new file mode 100644 index 00000000000..b079edad254 --- /dev/null +++ b/Build/NuGet/Windows.DotNet.Arch/Items.props.mustache @@ -0,0 +1,16 @@ + + + + + {{platformArchitecture}}\%(Filename)%(Extension) + PreserveNewest + False + + + + %(Filename)%(Extension) + PreserveNewest + False + + + diff --git a/Build/NuGet/Windows.DotNet.Arch/Primary.nuspec b/Build/NuGet/Windows.DotNet.Arch/Primary.nuspec new file mode 100644 index 00000000000..ae13b44e9f9 --- /dev/null +++ b/Build/NuGet/Windows.DotNet.Arch/Primary.nuspec @@ -0,0 +1,20 @@ + + + + $id$ + $version$ + $description$ + $releaseNotes$ + $tags$ + $CommonMetadataElements$ + + + + + + + + + $CommonFileElements$ + + diff --git a/Build/NuGet/Windows.DotNet.Arch/Symbols.nuspec b/Build/NuGet/Windows.DotNet.Arch/Symbols.nuspec new file mode 100644 index 00000000000..ba2bc74df57 --- /dev/null +++ b/Build/NuGet/Windows.DotNet.Arch/Symbols.nuspec @@ -0,0 +1,20 @@ + + + + $id$ + $version$ + $description$ + $releaseNotes$ + $tags$ + $CommonMetadataElements$ + + + + + + + + + $CommonFileElements$ + + diff --git a/Build/NuGet/Windows.DotNet.Arch/Uninstall.ps1.mustache b/Build/NuGet/Windows.DotNet.Arch/Uninstall.ps1.mustache new file mode 100644 index 00000000000..4b4df62a908 --- /dev/null +++ b/Build/NuGet/Windows.DotNet.Arch/Uninstall.ps1.mustache @@ -0,0 +1,19 @@ +#------------------------------------------------------------------------------------------------------- +# Copyright (C) Microsoft. All rights reserved. +# Copyright (c) ChakraCore Project Contributors. All rights reserved. +# Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. +#------------------------------------------------------------------------------------------------------- + +param($installPath, $toolsPath, $package, $project) + +if ($project.Type -eq 'Web Site') { + $projectDir = $project.Properties.Item('FullPath').Value + $assemblySourceFiles = Join-Path $installPath 'runtimes/{{{runtimeIdentifier}}}/native/*.*' + + foreach ($assemblySourceFileInfo in Get-Item($assemblySourceFiles)) { + $assemblyFile = Join-Path $projectDir "bin/{{{platformArchitecture}}}/$($assemblySourceFileInfo.Name)" + if (Test-Path $assemblyFile) { + Remove-Item $assemblyFile -Force + } + } +} diff --git a/Build/NuGet/icon.png b/Build/NuGet/icon.png new file mode 100644 index 00000000000..4c5bb21243c Binary files /dev/null and b/Build/NuGet/icon.png differ diff --git a/Build/NuGet/package-classes.psm1 b/Build/NuGet/package-classes.psm1 new file mode 100644 index 00000000000..cb7fdd32f4a --- /dev/null +++ b/Build/NuGet/package-classes.psm1 @@ -0,0 +1,226 @@ +#------------------------------------------------------------------------------------------------------- +# Copyright (C) Microsoft. All rights reserved. +# Copyright (c) ChakraCore Project Contributors. All rights reserved. +# Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. +#------------------------------------------------------------------------------------------------------- + +using namespace System.Collections +using namespace System.IO +using namespace System.Security +using namespace System.Text.RegularExpressions +using namespace System.Xml + +Set-StrictMode -Version 5.1 + +class PrimitiveMustacheRenderer { + hidden static [string]$mustacheTagPatternFormat = ( + '(?\{{{{{0}}})\s*' + + '(?[\w-]+)' + + '\s*(?\}}{{{0}}})' + ) + hidden static [regex]$mustacheTagsRegex = [regex]::new(( + # Tag that is replaced with an unescaped value (e.g. `{{{name}}}`). + ([PrimitiveMustacheRenderer]::mustacheTagPatternFormat -f 3) + + '|' + + # Tag that is replaced with an escaped value (e.g. `{{name}}`). + ([PrimitiveMustacheRenderer]::mustacheTagPatternFormat -f 2) + + )) + + static [string]RenderTemplate([string]$template, [Hashtable]$data) { + return [PrimitiveMustacheRenderer]::mustacheTagsRegex.Replace( + $template, + { + param([Match]$match) + + $startDelimiter = $match.Groups['startDelimiter'].Value + $endDelimiter = $match.Groups['endDelimiter'].Value + $tokenName = $match.Groups['tokenName'].Value + $tokenValue = [string]::Empty + + if ($data.Contains($tokenName)) { + $tokenValue = $data[$tokenName] + if ($startDelimiter -eq '{{{' -and $endDelimiter -eq '}}}') { + # Skip escaping of the token value. + return $tokenValue + } + + # Converts a token value into an XML-encoded string. + $tokenValue = [SecurityElement]::Escape($tokenValue) + } + + return $tokenValue + } + ) + } + + static [bool]ContainsTag([string]$content) { + return $content.Contains('{{') -and $content.Contains('}}') + } +} + +class Package { + [ValidateNotNullOrEmpty()][string]$Id + [ValidateNotNullOrEmpty()][string]$NuspecFile + [Hashtable]$Properties + [PreprocessableFile[]]$PreprocessableFiles + + Package([string]$id, [string]$nuspecFile, [Hashtable]$properties, + [PreprocessableFile[]]$preprocessableFiles + ) { + $this.Id = $id + $this.NuspecFile = $nuspecFile + $this.Properties = $properties + $this.PreprocessableFiles = $preprocessableFiles + } + + static [Package[]]GetPackages([string]$packageDataFile) { + $packageDataXml = [xml](Get-Content $packageDataFile -Encoding utf8) + $packageDataElem = $packageDataXml.DocumentElement + $commonPropertiesElem = $packageDataElem.commonProperties + $packageElems = $packageDataElem.packages.SelectNodes('child::*') + + $packageDataDir = Split-Path -Parent $packageDataFile + $commonProperties = [Package]::GetPackageCommonProperties($commonPropertiesElem) + $packageCount = $packageElems.Count + $packages = [Package[]]::new($packageCount) + + for ($packageIndex = 0; $packageIndex -lt $packageCount; $packageIndex++) { + $packageElem = $packageElems[$packageIndex] + $propertyElems = $null + if ($packageElem['properties']) { + $propertyElems = $packageElem.properties.SelectNodes('child::*') + } + $preprocessableFileElems = $null + if ($packageElem['preprocessableFiles']) { + $preprocessableFileElems = $packageElem.preprocessableFiles.SelectNodes('child::*') + } + + $packageId = $packageElem.id + $packageNuspecFile = (Join-Path $packageDataDir $packageElem.nuspecFile) + $packageProperties = [Package]::ConvertXmlElementsToHashtable($propertyElems) + $packageProperties = [Package]::MergePackageProperties($commonProperties, + $packageProperties) + $packagePreprocessableFiles = [Package]::GetPreprocessableFiles($preprocessableFileElems, + $packageDataDir) + + $packages[$packageIndex] = [Package]::new($packageId, $packageNuspecFile, + $packageProperties, $packagePreprocessableFiles) + } + + return $packages + } + + hidden static [Hashtable]GetPackageCommonProperties([XmlElement]$commonPropertiesElem) { + if (!$commonPropertiesElem) { + return @{} + } + + $defaultPropertyElems = $null + if ($commonPropertiesElem['defaultProperties']) { + $defaultPropertyElems = $commonPropertiesElem.defaultProperties.SelectNodes('child::*') + } + + $commonProperties = @{ + CommonMetadataElements = $commonPropertiesElem.commonMetadataElements.InnerXml + CommonFileElements = $commonPropertiesElem.commonFileElements.InnerXml + } + $commonProperties += [Package]::ConvertXmlElementsToHashtable($defaultPropertyElems) + + return $commonProperties + } + + hidden static [PreprocessableFile[]]GetPreprocessableFiles( + [XmlNodeList]$fileElems, + [string]$baseDir + ) { + if (!$fileElems) { + return [PreprocessableFile[]]::new(0) + } + + $fileCount = $fileElems.Count + $files = [PreprocessableFile[]]::new($fileCount) + + for ($fileIndex = 0; $fileIndex -lt $fileCount; $fileIndex++) { + $fileElem = $fileElems[$fileIndex] + $srcFile = Join-Path $baseDir $fileElem.src + $targetFile = Join-Path $baseDir $fileElem.target + + $files[$fileIndex] = [PreprocessableFile]::new($srcFile, $targetFile) + } + + return $files + } + + hidden static [Hashtable]MergePackageProperties( + [Hashtable]$commonProperties, + [Hashtable]$properties + ) { + $mergedProperties = $commonProperties.Clone() + + foreach ($propertyName in $properties.Keys) { + $propertyValue = $properties[$propertyName] + if ($mergedProperties.ContainsKey($propertyName) ` + -and [PrimitiveMustacheRenderer]::ContainsTag($propertyValue) + ) { + $basePropertyValue = $mergedProperties[$propertyName] + $propertyValue = [PrimitiveMustacheRenderer]::RenderTemplate($propertyValue, + @{ base = $basePropertyValue }) + } + $mergedProperties[$propertyName] = $propertyValue + } + + return $mergedProperties + } + + hidden static [Hashtable]ConvertXmlElementsToHashtable([XmlNodeList]$elems) { + if (!$elems) { + return @{} + } + + $hashtable = @{} + + foreach ($elem in $elems) { + $hashtable.Add($elem.Name, $elem.'#text') + } + + return $hashtable + } + + [void]PreprocessFiles() { + foreach ($file in $this.PreprocessableFiles) { + $file.Preprocess($this.Properties) + } + } + + [void]RemovePreprocessedFiles() { + foreach ($file in $this.PreprocessableFiles) { + if ($file.IsPreprocessed) { + Remove-Item $file.Target + } + } + } +} + +class PreprocessableFile { + [ValidateNotNullOrEmpty()][string]$Src + [ValidateNotNullOrEmpty()][string]$Target + [bool]$IsPreprocessed + + PreprocessableFile([string]$src, [string]$target) { + $this.Src = $src + $this.Target = $target + $this.IsPreprocessed = $false + } + + [void]Preprocess([Hashtable]$properties) { + $content = Get-Content $this.Src -Raw -Encoding utf8 + $preprocessedContent = [PrimitiveMustacheRenderer]::RenderTemplate($content, $properties) + $targetFile = [PrimitiveMustacheRenderer]::RenderTemplate($this.Target, $properties) + + Set-Content $targetFile $preprocessedContent -Encoding utf8 -NoNewline + + $this.Target = $targetFile + $this.IsPreprocessed = $true + } +} diff --git a/Build/NuGet/package-data.xml b/Build/NuGet/package-data.xml new file mode 100644 index 00000000000..472fb191fd1 --- /dev/null +++ b/Build/NuGet/package-data.xml @@ -0,0 +1,150 @@ + + + + + ChakraCore is the core part of the Chakra Javascript engine that powers Microsoft Edge. + https://github.com/Microsoft/ChakraCore/wiki/Roadmap#release-notes + Chakra,ChakraCore,javascript,js,ecmascript,compiler,platform,oss,opensource,native + + + Microsoft + Chakra Team + LICENSE.txt + https://github.com/Microsoft/ChakraCore + icon.png + https://raw.githubusercontent.com/chakra-core/ChakraCore/master/Build/NuGet/icon.png + false + true + © Microsoft Corporation. All rights reserved. + en-US + + + + + + + + + + + + x86 + win-x86 + + + + + + + + + + x86 + win-x86 + + + + + + + + + + x64 + win-x64 + + + + + + + + + + x64 + win-x64 + + + + + + + + + + arm + win-arm + + + + + + + + + + arm + win-arm + + + + + + + + + + arm64 + win-arm64 + + + + + + + + + + arm64 + win-arm64 + + + + + + + + + + {{{base}}},nativepackage,C++,vc140 + + + + diff --git a/Build/NuGet/package-data.xsd b/Build/NuGet/package-data.xsd new file mode 100644 index 00000000000..901953b396e --- /dev/null +++ b/Build/NuGet/package-data.xsd @@ -0,0 +1,198 @@ + + + + + The root element of the package data + + + + + + + Contains a custom common properties whose values are used to replace $-delimited tokens + (for example, `$description$`) in the `.nuspec` files + + + + + + + + Contains a default values for common properties of the packages. + The values of these properties can be overridden by properties of specific packages. + For naming these properties, it is recommended to use the camelCase style. + + + + + + + + + + + + Defines a common metadata of the packages. XML content of this element is + substituted into a `$CommonMetadataElements$` token in the `.nuspec` files. + This XML content is completely static and cannot contain $-delimited tokens. + + + + + + + + + + + + Defines a list of common files to include in the packages. XML content of this + element is substituted into a `$CommonFileElements$` token in the `.nuspec` files. + This XML content is completely static and cannot contain $-delimited tokens. + + + + + + + File or files to include in the package + + + + + + The location of the file or files to include relative to the `.nuspec` + file + + + + + + + Relative path to the directory within the package where the files will + be placed + + + + + + + The file or files to exclude within the `src` location + + + + + + + + + + + + + + + Defines a list of data about the packages + + + + + + Data about the package on basis of which the `.nupkg` file are created + + + + + + + + Contains a custom properties of the package that are used to replace + $-delimited tokens (for example, `$tags$`) in the `.nuspec` files. + These properties can override common properties. The property value can + contain a Mustache tag with special token name (`{{{base}}}`) that is replaced + with the value of overridable common property. + + + + + + + + + + + + Defines a list of files that must be processed before creating a `.nupkg` + files + + + + + + + + Information about the file that must be processed before creating a + `.nupkg` file. + + + + + + + The location of the pre-processable file relative to the XML file + with package data. Pre-processable file is a primitive Mustache + template. + + + + + + + The location of the target file relative to the XML file with + package data. Target file is created based on primitive Mustache + template and properties of the package. The path to target file can + contain a Mustache tags that are replaced during processing with the + values of corresponding package properties. + + + + + + + + + + + + Unique identifier for the package + + + + + + The location of the `.nuspec` file relative to the XML file with package data + + + + + + + + + + + + + + + + + + diff --git a/Build/NuGet/package.ps1 b/Build/NuGet/package.ps1 index ac46a4120a7..e17495aa5bf 100644 --- a/Build/NuGet/package.ps1 +++ b/Build/NuGet/package.ps1 @@ -1,50 +1,88 @@ #------------------------------------------------------------------------------------------------------- # Copyright (C) Microsoft. All rights reserved. +# Copyright (c) ChakraCore Project Contributors. All rights reserved. # Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. #------------------------------------------------------------------------------------------------------- -$root = (split-path -parent $MyInvocation.MyCommand.Definition) + '\..' +using namespace System.Text -$packageRoot = "$root\NuGet" -$packageVersionFile = "$packageRoot\.pack-version" -$packageArtifacts = "$packageRoot\Artifacts" -$targetNugetExe = "$packageRoot\nuget.exe" +using module '.\package-classes.psm1' -If (Test-Path $packageArtifacts) -{ - # Delete any existing output. - Remove-Item $packageArtifacts\*.nupkg -} +Set-StrictMode -Version 5.1 + +$packageRoot = Split-Path -Parent $MyInvocation.MyCommand.Definition +$packageVersionFile = Join-Path $packageRoot '.pack-version' +$packageDataFile = Join-Path $packageRoot 'package-data.xml' +$packageArtifactsDir = Join-Path $packageRoot 'Artifacts' +$localNugetExe = Join-Path $packageRoot 'nuget.exe' -If (!(Test-Path $targetNugetExe)) -{ - $sourceNugetExe = "https://dist.nuget.org/win-x86-commandline/latest/nuget.exe" +# helper to download file with retry +function DownloadFileWithRetry([string]$sourceUrl, [string]$destFile, [int]$retries) { + $delayTimeInSeconds = 5 - Write-Host "NuGet.exe not found - downloading latest from $sourceNugetExe" + while ($true) { + try { + Invoke-WebRequest $sourceUrl -OutFile $destFile + break + } + catch { + Write-Host "Failed to download $sourceUrl" - $sourceNugetExe = "https://dist.nuget.org/win-x86-commandline/latest/nuget.exe" + if ($retries -gt 0) { + $retries-- - Invoke-WebRequest $sourceNugetExe -OutFile $targetNugetExe + Write-Host "Waiting $delayTimeInSeconds seconds before retrying. Retries left: $retries" + Start-Sleep -Seconds $delayTimeInSeconds + } + else { + $exception = $_.Exception + throw $exception + } + } + } } -$versionStr = (Get-Content $packageVersionFile) +# helper to create NuGet package +function CreateNugetPackage ([Package]$package, [string]$version, [string]$outputDir) { + $properties = $package.Properties.Clone() + $properties['id'] = $package.Id + $properties['version'] = $version + + $sb = New-Object StringBuilder + + foreach ($propertyName in $properties.Keys) { + $propertyValue = $properties[$propertyName] + + if ($sb.Length -gt 0) { + [void]$sb.Append(';') + } + [void]$sb.AppendFormat('{0}={1}', $propertyName, $propertyValue.Replace('"', '""')) + } -Write-Host "Setting .nuspec version tag to $versionStr" + $propertiesStr = $sb.toString() + [void]$sb.Clear() -$compiledNuspec = "$root\nuget\compiled.nuspec" + $package.PreprocessFiles() + & $localNugetExe pack $package.NuspecFile -OutputDirectory $outputDir -Properties $propertiesStr + $package.RemovePreprocessedFiles() +} + +if (Test-Path $packageArtifactsDir) { + # Delete any existing output. + Remove-Item "$packageArtifactsDir\*.nupkg" +} -# Create new packages for any nuspec files that exist in this directory. -Foreach ($nuspec in $(Get-Item $packageRoot\*.nuspec)) -{ - $content = (Get-Content $nuspec) - $content = $content -replace '\$version\$',$versionStr - $content | Out-File $compiledNuspec +if (!(Test-Path $localNugetExe)) { + $nugetDistUrl = 'https://dist.nuget.org/win-x86-commandline/latest/nuget.exe' - & $targetNugetExe pack $compiledNuspec -outputdirectory $packageArtifacts + Write-Host "NuGet.exe not found - downloading latest from $nugetDistUrl" + DownloadFileWithRetry $nugetDistUrl $localNugetExe -retries 3 } -# Delete compiled temporary nuspec. -If (Test-Path $compiledNuspec) -{ - Remove-Item $compiledNuspec -} \ No newline at end of file +# Create new NuGet packages based on data from an XML file. +$version = (Get-Content $packageVersionFile) +$packages = [Package]::GetPackages($packageDataFile) + +foreach ($package in $packages) { + CreateNugetPackage $package $version $packageArtifactsDir +} diff --git a/Build/scripts/add_msbuild_path.cmd b/Build/scripts/add_msbuild_path.cmd index 538aa72cb6f..4c29e25c645 100644 --- a/Build/scripts/add_msbuild_path.cmd +++ b/Build/scripts/add_msbuild_path.cmd @@ -1,26 +1,80 @@ ::------------------------------------------------------------------------------------------------------- :: Copyright (C) Microsoft. All rights reserved. +:: Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. :: Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. ::------------------------------------------------------------------------------------------------------- :: add_msbuild_path.cmd :: :: Locate msbuild.exe and add it to the PATH +@echo off set FORCE_MSBUILD_VERSION=%1 if "%FORCE_MSBUILD_VERSION%" == "msbuild14" ( - echo Skipping Dev15 and trying Dev14... + echo Skipping Dev17 and trying Dev14... goto :LABEL_USE_MSBUILD_14 ) +if "%FORCE_MSBUILD_VERSION%" == "msbuild15" ( + echo Skipping Dev17 and trying Dev15... + goto :LABEL_USE_MSBUILD_15 +) +if "%FORCE_MSBUILD_VERSION%" == "msbuild16" ( + echo Skipping Dev17 and trying Dev16... + goto :LABEL_USE_MSBUILD_16 +) where /q msbuild.exe if "%ERRORLEVEL%" == "0" ( goto :SkipMsBuildSetup ) -REM Try Dev15 first +REM Try Dev17 first, then older versions + +echo Trying to locate Dev17... + +:LABEL_USE_MSBUILD_17 +set MSBUILD_VERSION=17.0 +set "MSBUILD_PATH=%ProgramFiles(x86)%\Microsoft Visual Studio\Preview\Enterprise\MSBuild\%MSBUILD_VERSION%\Bin" + +if not exist "%MSBUILD_PATH%\msbuild.exe" ( + set "MSBUILD_PATH=%ProgramFiles%\Microsoft Visual Studio\2022\Enterprise\MSBuild\Current\Bin\amd64" +) + +if not exist "%MSBUILD_PATH%\msbuild.exe" ( + set "MSBUILD_PATH=%ProgramFiles(x86)%\Microsoft Visual Studio\2022\Enterprise\MSBuild\Current\Bin" +) + +if not exist "%MSBUILD_PATH%\msbuild.exe" ( + set "MSBUILD_PATH=%ProgramFiles(x86)%\Microsoft Visual Studio\2022\Enterprise\MSBuild\Current\Bin\amd64" +) + +if exist "%MSBUILD_PATH%\msbuild.exe" ( + goto :MSBuildFound +) + +echo Dev17 not found, trying to locate Dev16... + +:LABEL_USE_MSBUILD_16 +set MSBUILD_VERSION=16.0 +set "MSBUILD_PATH=%ProgramFiles(x86)%\Microsoft Visual Studio\Preview\Enterprise\MSBuild\%MSBUILD_VERSION%\Bin" + +if not exist "%MSBUILD_PATH%\msbuild.exe" ( + set "MSBUILD_PATH=%ProgramFiles%\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin\x86" +) + +if not exist "%MSBUILD_PATH%\msbuild.exe" ( + set "MSBUILD_PATH=%ProgramFiles(x86)%\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin" +) + +if not exist "%MSBUILD_PATH%\msbuild.exe" ( + set "MSBUILD_PATH=%ProgramFiles(x86)%\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin\amd64" +) + +if exist "%MSBUILD_PATH%\msbuild.exe" ( + goto :MSBuildFound +) -echo Trying to locate Dev15... +echo Dev16 not found, trying to locate Dev15... :LABEL_USE_MSBUILD_15 set MSBUILD_VERSION=15.0 diff --git a/CMakeLists.txt b/CMakeLists.txt index 750292f30cc..cd077075d4a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,35 +1,59 @@ cmake_minimum_required(VERSION 3.2) project (CHAKRACORE) -# Keep CMake from caching static/shared library -# option. Otherwise, CMake fails to update cached -# references - -# todo: create a sub cmake file to take care of _SH uncaching... -if(SHARED_LIBRARY_SH) +set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O3 -g") + +# Disable expected CMake workflow +option(CHAKRACORE_BUILD_SH "Use build.sh") + +if(NOT CHAKRACORE_BUILD_SH) + option(DISABLE_JIT "Disable JIT compilation" OFF) + option(INTL_ICU "Enable Intl" ON) + option(EMBED_ICU "Build ICU within ChakraCore build" OFF) + set(ICU_INCLUDE_PATH "" CACHE STRING "libicu iclude path") + if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "Build type" FORCE) + endif (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) +else(NOT CHAKRACORE_BUILD_SH) + + # Keep CMake from caching static/shared library + # option. Otherwise, CMake fails to update cached + # references + + # todo: create a sub cmake file to take care of _SH uncaching... + if(SHARED_LIBRARY_SH) unset(SHARED_LIBRARY_SH CACHE) unset(STATIC_LIBRARY_SH CACHE) - unset(STATIC_LIBRARY CACHE) - set(SHARED_LIBRARY 1) -endif() + unset(STATIC_LIBRARY CACHE) + set(SHARED_LIBRARY 1) + endif() -if(STATIC_LIBRARY_SH) - unset(SHARED_LIBRARY_SH CACHE) - unset(STATIC_LIBRARY_SH CACHE) - unset(SHARED_LIBRARY CACHE) - set(STATIC_LIBRARY 1) -endif() + if(STATIC_LIBRARY_SH) + unset(SHARED_LIBRARY_SH CACHE) + unset(STATIC_LIBRARY_SH CACHE) + unset(SHARED_LIBRARY CACHE) + set(STATIC_LIBRARY 1) + endif() -if(LIBS_ONLY_BUILD_SH) - unset(LIBS_ONLY_BUILD_SH CACHE) - set(CC_LIBS_ONLY_BUILD 1) -endif() + if(LIBS_ONLY_BUILD_SH) + unset(LIBS_ONLY_BUILD_SH CACHE) + set(CC_LIBS_ONLY_BUILD 1) + endif() + + if (CLANG_SANITIZE_SH) + set(CLANG_SANITIZE ${CLANG_SANITIZE_SH}) + unset(CLANG_SANITIZE_SH CACHE) + endif() -if(CC_USES_SYSTEM_ARCH_SH) +endif(NOT CHAKRACORE_BUILD_SH) + +if(CC_USES_SYSTEM_ARCH_SH OR NOT CHAKRACORE_BUILD_SH) if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") set(CC_TARGETS_AMD64_SH 1) elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "armv7l") set(CC_TARGETS_ARM_SH 1) + elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64") + set(CC_TARGETS_ARM64_SH 1) endif() unset(CC_USES_SYSTEM_ARCH_SH CACHE) endif() @@ -40,11 +64,16 @@ elseif(CC_TARGETS_ARM_SH) set(CC_TARGETS_ARM 1) add_definitions(-D_ARM_=1) set(CMAKE_SYSTEM_PROCESSOR "armv7l") +elseif(CC_TARGETS_ARM64_SH) + add_definitions(-D_ARM64_=1) + add_definitions(-D__arm64__=1) + set(CC_TARGETS_ARM64 1) + set(CMAKE_SYSTEM_PROCESSOr "arm64") elseif(CC_TARGETS_X86_SH) set(CC_TARGETS_X86 1) set(CMAKE_SYSTEM_PROCESSOR "i386") else() - message(FATAL_ERROR "Couldn't detect target processor, try `--arch` argument with build.sh") + message(FATAL_ERROR "Unsupported target processor: ${CMAKE_SYSTEM_PROCESSOR}") endif() unset(CC_TARGETS_ARM_SH CACHE) @@ -75,6 +104,7 @@ if(ICU_SETTINGS_RESET) unset(NO_ICU_SH CACHE) unset(LOCAL_ICU_SH CACHE) unset(SYSTEM_ICU_SH CACHE) + unset(EMBED_ICU_SH CACHE) endif() if(CC_TARGET_OS_ANDROID_SH) @@ -125,15 +155,57 @@ if(SYSTEM_ICU_SH) unset(SYSTEM_ICU_SH CACHE) endif() -if(INTL_ICU_SH) - unset(INTL_ICU_SH CACHE) - set(INTL_ICU 1) -else() - unset(INTL_ICU_SH CACHE) - set(INTL_ICU 0) +if(CHAKRACORE_BUILD_SH) + if(INTL_ICU_SH) + unset(INTL_ICU_SH CACHE) + set(INTL_ICU 1) + else() + unset(INTL_ICU_SH CACHE) + set(INTL_ICU 0) + endif() +endif(CHAKRACORE_BUILD_SH) + +if(EMBED_ICU_SH) + set(EMBED_ICU 1) + unset(EMBED_ICU_SH CACHE) endif() -if(ICU_INCLUDE_PATH) +if(EMBED_ICU AND ICU_INCLUDE_PATH) + message(FATAL_ERROR "Embedded ICU and ICU include path cannot be set at the same time") +endif() + +if(EMBED_ICU) + # Keep consistent with what ICU download script used to print + message("Note: ICU installation and use is subject to it's publisher's licensing terms") + + set(ICU_PREFIX ${CMAKE_CURRENT_SOURCE_DIR}/deps/thirdparty/icu) + set(ICU_DOWNLOAD_DIR ${ICU_PREFIX}/download) + set(ICU_SOURCE_DIR ${ICU_PREFIX}/stage) + set(EMBEDDED_ICU_TARGET icu4c) + set(ICU_INCLUDE_PATH ${ICU_PREFIX}/include) + set(ICU_LIBRARY_PATH ${ICU_PREFIX}/lib) + add_definitions(-DHAS_REAL_ICU=1) + add_definitions(-DHAS_ICU) + add_definitions(-DINTL_ICU=1) + set(ICU_LIBRARIES + ${ICU_LIBRARY_PATH}/libicuuc.a + ${ICU_LIBRARY_PATH}/libicui18n.a + ${ICU_LIBRARY_PATH}/libicudata.a + ) + + include(ExternalProject) + ExternalProject_Add(${EMBEDDED_ICU_TARGET} + PREFIX ${ICU_PREFIX} + DOWNLOAD_DIR ${ICU_DOWNLOAD_DIR} + SOURCE_DIR ${ICU_SOURCE_DIR} + URL https://github.com/unicode-org/icu/releases/download/release-63-2/icu4c-63_2-src.tgz + URL_HASH SHA512=5fa9092efd8d6da6dfc8d498e4026167fda43423eaafc754d1789cf8fd4f6e76377878ebcaa32e14f314836136b764873511a93bfbcc5419b758841cc6df8f32 + CONFIGURE_COMMAND ${ICU_SOURCE_DIR}/source/configure --prefix=${ICU_PREFIX} --with-data-packaging=static --enable-static --disable-shared --with-library-bits=64 --disable-icuio --disable-layout --disable-tests --disable-samples + BUILD_COMMAND make STATICCFLAGS="-fPIC" STATICCXXFLAGS="-fPIC" STATICCPPFLAGS="-DPIC" + INSTALL_COMMAND make install + BYPRODUCTS ${ICU_LIBRARIES} + ) +elseif(ICU_INCLUDE_PATH) add_definitions(-DHAS_REAL_ICU=1) add_definitions(-DHAS_ICU) set(ICU_LIBRARY_PATH "${ICU_INCLUDE_PATH}/../lib/") @@ -214,8 +286,15 @@ elseif(CC_TARGETS_ARM) # reduce link time memory usage set(LINKER_REDUCED_MEMORY "-Xlinker --no-keep-memory") endif() +elseif(CC_TARGETS_ARM64) + add_definitions(-D__aarch64__) + add_definitions(-DTARGET_64) + add_definitions(-D_M_ARM32_OR_ARM64) + if(CC_TARGET_OS_OSX) + add_compile_options(-arch arm64) + endif() else() - message(FATAL_ERROR "Only AMD64, ARM and I386 are supported") + message(FATAL_ERROR "Only AMD64, ARM, ARM64 and I386 are supported") endif() if(CAN_BUILD_WABT) @@ -253,7 +332,7 @@ elseif(CC_TARGET_OS_OSX) endif() endif() else() - message(FATAL_ERROR "This OS is not supported") + message(FATAL_ERROR "Unsupported OS: ${CMAKE_SYSTEM_NAME}") endif() if (CMAKE_CXX_COMPILER_ID STREQUAL AppleClang @@ -282,7 +361,10 @@ if(CLR_CMAKE_PLATFORM_XPLAT) if(CC_TARGETS_AMD64) set(IS_64BIT_BUILD 1) add_definitions(-D_M_X64 -D_M_AMD64 -D_AMD64_) - endif(CC_TARGETS_AMD64) + elseif(CC_TARGETS_ARM64) + set(IS_64BIT_BUILD 1) + add_definitions(-D_M_ARM64 -D_ARM64_) + endif() add_definitions( -DUNICODE @@ -292,11 +374,6 @@ if(CLR_CMAKE_PLATFORM_XPLAT) set(CMAKE_CXX_STANDARD 11) - # CC WARNING FLAGS - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} \ - -Wno-implicit-function-declaration" - ) - # todo: fix general visibility of the interface # do not set to `fvisibility=hidden` as it is going to # prevent the required interface is being exported @@ -305,9 +382,7 @@ if(CLR_CMAKE_PLATFORM_XPLAT) # CXX WARNING FLAGS set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} \ -Wno-ignored-attributes\ - -Wno-deprecated-declarations\ -Wno-parentheses-equality\ - -Wno-missing-braces\ -Wno-reorder\ -Wno-microsoft\ -Wno-unused-value\ @@ -328,7 +403,6 @@ if(CLR_CMAKE_PLATFORM_XPLAT) -Wno-null-conversion\ -Wno-return-type\ -Wno-switch\ - -Wno-implicit-function-declaration\ -Wno-int-to-pointer-cast\ -Wno-tautological-constant-compare\ -Wno-enum-compare-switch\ @@ -402,19 +476,12 @@ if(CMAKE_BUILD_TYPE STREQUAL Debug) -D_DEBUG=1 # for PAL -DDBG_DUMP=1 ) -elseif(CMAKE_BUILD_TYPE STREQUAL Test) +elseif(CMAKE_BUILD_TYPE STREQUAL RelWithDebInfo) add_definitions( -DENABLE_DEBUG_CONFIG_OPTIONS=1 ) - add_compile_options(-g) endif(CMAKE_BUILD_TYPE STREQUAL Debug) -if(NOT CMAKE_BUILD_TYPE STREQUAL Debug) - add_compile_options(-O3) -else() - add_compile_options(-O0) -endif(NOT CMAKE_BUILD_TYPE STREQUAL Debug) - if(IS_64BIT_BUILD) add_definitions( -DBIT64=1 @@ -426,6 +493,9 @@ if(NO_JIT_SH) unset(NO_JIT_SH CACHE) # don't cache unset(BuildJIT CACHE) # also clear it just in case add_definitions(-DDISABLE_JIT=1) +elseif(DISABLE_JIT) + set(BuildJIT 0) + add_definitions(-DDISABLE_JIT=1) else() set(BuildJIT 1) endif() @@ -448,6 +518,16 @@ else() set(DYN_LIB_EXT "so") endif() +if(CC_TARGETS_ARM64) + if(CC_TARGET_OS_LINUX) + message(WARNING "ARM64 linux build has not yet been tested, this build is unsupported.") + endif() + if(BuildJIT) + message(WARNING "ARM64 Jit not yet functional on platforms other than windows.") + message(WARNING "For use rather than development please build with Jit disabled --no-jit with ./build.sh or -DDISABLE_JIT=1 if using CMake directly") + endif() +endif() + ################# Write-barrier check/analyze ################## if (WB_CHECK_SH OR WB_ANALYZE_SH) add_definitions( @@ -499,12 +579,11 @@ endif() include_directories(SYSTEM /usr/local/include) include(pal/src/configure.cmake) -# this should be after `detect feature` to not to affect feature detection -# Clang -fsanitize. -if (CLANG_SANITIZE_SH) +# Clang sanitizer support, this should be after `detect feature` to not to +# affect feature detection +if (CLANG_SANITIZE) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=${CLANG_SANITIZE_SH}") set(CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS} -fsanitize=${CLANG_SANITIZE_SH}") - unset(CLANG_SANITIZE_SH CACHE) # don't cache endif() add_subdirectory (pal) @@ -532,3 +611,5 @@ endif() add_subdirectory (lib) add_subdirectory (bin) + +add_subdirectory(test) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index a12f80b8f7f..2e89cfcbf50 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -8,17 +8,20 @@ These two blogs posts on contributing code to open source projects are a good re ## Security -If you believe you have found a security issue in ChakraCore, please share it with us privately following the guidance at the Microsoft [Security TechCenter](https://technet.microsoft.com/en-us/security/ff852094). Reporting it via this channel helps minimize risk to projects built with ChakraCore. +If you believe you have found a security issue in ChakraCore 1.11, please share it with Microsoft privately following the guidance at the Microsoft [Security TechCenter](https://technet.microsoft.com/en-us/security/ff852094). Reporting it via this channel helps minimize risk to projects built with ChakraCore. + +If you find a security issue in the Master branch of ChakraCore but not in 1.11 please join our discord server and private message one of the Core team members. ## Legal -You will need to complete a Contributor License Agreement (CLA) before your pull request can be accepted. This agreement testifies that you are granting us permission to use the source code you are submitting, and that this work is being submitted under appropriate license that we can use it. +You will need to complete a Contribution Agreement before your pull request can be accepted. This agreement testifies that you are granting us permission to use the source code you are submitting, and that this work is being submitted under appropriate license that we can use it. -You can complete the CLA by going through the steps at https://cla.microsoft.com. Once we have received the signed CLA, we'll review the request. You will only need to do this once. +You can read the agreement here: [Contribution Agreement](ContributionAgreement.md) ## Housekeeping Your pull request should: + * Include a description of what your change intends to do * Be a child commit of a reasonably recent commit in the master branch * Pass all unit tests @@ -28,15 +31,17 @@ Your pull request should: * Tests should include reasonable permutations of the target fix/change * Include baseline changes with your change -Submissions that have met these requirements will be assigned to a ChakraCore team member for additional testing. Submissions must meet functional and performance expectations, including meeting requirements in scenarios for which the team doesn’t yet have open source tests. This means you may be asked to fix and resubmit your pull request against a new open test case if it fails one of these tests. The ChakraCore team may verify your change by crawling the web with your change built into Chakra. Failures discovered when testing with this technique will not be analyzed by the team, but we will do our best to communicate the issue discovered to you. This approach needs further refinement, we acknowledge. +Submissions that have met these requirements will be will reviewed by a core contributor. Submissions must meet functional and performance expectations, including meeting requirements in scenarios for which the team doesn’t yet have open source tests. This means you may be asked to fix and resubmit your pull request against a new open test case if it fails one of these tests. -ChakraCore is an organically grown codebase. The consistency of style reflects this. For the most part, the team follows these [coding conventions](https://github.com/Microsoft/ChakraCore/wiki/Coding-Convention). Contributors should also follow them when making submissions. Otherwise, follow the general coding conventions adhered to in the code surrounding your changes. Pull requests that reformat the code will not be accepted. +ChakraCore is an organically grown codebase. The consistency of style reflects this. For the most part, the team follows these [coding conventions](https://github.com/chakra-core/ChakraCore/wiki/Coding-Convention). Contributors should also follow them when making submissions. Otherwise, follow the general coding conventions adhered to in the code surrounding your changes. Pull requests that reformat the code will not be accepted. ## Running the tests -The unit tests can be run by following these steps: -* Choose a build configuration to build and test, e.g. debug and x64. -* Build `Chakra.Core.sln` for that config. +The unit tests can be run offline with following these steps: + +### a) Windows + +* Build `Chakra.Core.sln` for the version of ChakraCore you wish to test e.g. x64 Debug. * Specifically, running tests requires that `rl.exe`, `ch.exe`, and `ChakraCore.dll` be built. * Call `test\runtests.cmd` and specify the build config @@ -49,20 +54,25 @@ For full coverage, please run unit tests against debug and test for both x86 and * `test\runtests.cmd -x86test` `runtests.cmd` can take more switches that are useful for running a subset of tests. Read the script file for more information. - `runtests.cmd` looks for the build output in the default build output folder `Build\VcBuild\bin`. If the build output path is changed from this default then use the `-bindir` switch to specify that path. -## Code Flow into Microsoft Edge +### b) Linux or macOS + +Build the version of ChakraCore you wish to test - either a Debug or Test (RelWithDebugInfo) build. You will need the ChakraCore library and the `ch` application built. + +If building with `cmake` you can then use the `make check` or `ninja check` command to run the test suite. +Alternatively you can directly run `test/runtests.py` you'll need to specify `-t` (Test build) or `-d` (Debug build). -Changes that make it into our ChakraCore GitHub master branch have a short journey to Chakra.dll. Code flows daily from GitHub to the internal repository from which builds of Chakra.dll are produced and then it flows into Windows and Microsoft Edge. While code flows quickly on this first leg of the journey, code flow from our internal branch to a Windows flighting branch is subject to any number of delays. So it is difficult to predict when your change in our GitHub repo will make it into a particular Windows flight. +`runtests.py` can take more switches that are useful for running a subset of tests. Read the script file for more information. +`runtests.py` looks for the build output in the default build output folder `out/test/ch` or `out/debug/ch`. If you've used a different path then use `--binary=path` to specify it ## Issue Labels - - [`help wanted`](https://github.com/Microsoft/ChakraCore/labels/help%20wanted): these issues are specifically well suited for outside contributors. - - [`good first issue`](https://github.com/Microsoft/ChakraCore/labels/good%20first%20issue): these issues are small and appropriate for people who wish to familiarize themselves with GitHub pull requests and/or ChakraCore's contributor guidelines, build process, and running tests. We're here to help you get started in open source. + - [`help wanted`](https://github.com/chakra-core/ChakraCore/labels/help%20wanted): these issues are specifically well suited for outside contributors. + - [`good first issue`](https://github.com/chakra-core/ChakraCore/labels/good%20first%20issue): these issues are small and appropriate for people who wish to familiarize themselves with GitHub pull requests and/or ChakraCore's contributor guidelines, build process, and running tests. We're here to help you get started in open source. -You are welcome to work on issues that are not tagged with these labels. However, issues without these labels are often deeply involved with the requirements of the various components of ChakraCore. Therefore, please be sure to touch base with a maintainer via comments on the issue before attempting to solve it. +You are welcome to work on issues that are not tagged with these labels. However, issues without these labels may be fairly complex, therefore please discuss with a core team member via comments on the issue before attempting to solve it. -Remember, for all issues you choose to work on please communicate on the issue that you are claiming it to avoid duplicated work. +For all issues you choose to work on please communicate on the issue that you are claiming it to avoid duplicated work. To learn more about our GitHub labels see the [Label Glossary](https://github.com/Microsoft/ChakraCore/wiki/Label-Glossary) on our wiki page. diff --git a/ContributionAgreement.md b/ContributionAgreement.md new file mode 100644 index 00000000000..7d619b02ce2 --- /dev/null +++ b/ContributionAgreement.md @@ -0,0 +1,47 @@ +# Contributor Agreement + +All contributors to ChakraCore must digitally sign the below agreement unless their contribution is done on behalf of or licensed to Microsoft and covered by the MIT license in LICENSE.txt + +To sign the agreement please submit a commit that adds your name and github username to the bottom of this file. + +Anything I contribute to the ChakraCore repository is comprised of one or more of: + +1. My own work +2. Existing code from the ChakraCore repository +3. The work of a group of individuals all of whom agree to (and have signed) these terms +4. Third party work licensed under terms that enable it to be incorporated into the ChakraCore project + +In the case of option 4 I will discuss this Third Party submission with the ChakraCore core contributors before submitting it. + +I agree that all contributions I submit will be included in ChakraCore and licensed under the license in LICENSE.txt. + +I surrender any rights that would prevent my contribution from being redistributed and used under the license in LICENSE.txt. + +I accept that future users of the ChakraCore including my contributions will not be required to give me any acknowledgement except as a "ChakraCore Project Contributor" as mentioned in LICENSE.txt. + +I agree that I will never pursue royalties or patent claims related to any contribution to ChakraCore. + +I confirm that I have the right to submit this contribution and it can be redistributed under the license in LICENSE.txt. + +I agree that a record of my contribution including comments and my name may be retained and displayed publicly in the ChakraCore repository. + +If I make any contributions in the course of my employment, then either: +a) my employer has given my sufficient rights over the work I have done to submit it under the above terms or +b) my employer has agreed to these terms and signed the agreement + +This agreement has been signed by: + +| Name | Github username | +|---|---| +|Richard Lawrence| rhuanjl| +|Andrey Taritsyn| Taritsyn| +|Sasha Syrotenko| Fly-Style| +|Petr Penzin| ppenzin| +|Yevhen Lukomskyi|ylukomskyi| +|Evgeniy Istomin|MadProbe| +|Wenlu Wang| Kingwl| +|Kevin Cadieux|kevcadieux| +|Aidan Bickford| BickfordA| +|Ryoichi Kaida| camcam-lemon| +|Lukas Kurz| ShortDevelopment| +|Paul Pluzhnikov|EmployedRussian| diff --git a/LICENSE.txt b/LICENSE.txt index d5ced9877c2..a69ad5ae9d4 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -2,6 +2,7 @@ The MIT License (MIT) Copyright (c) Microsoft Corporation All rights reserved. +Copyright (c) ChakraCore Project Contributors. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 4bd2a370869..16a3fa19427 100644 --- a/README.md +++ b/README.md @@ -1,98 +1,38 @@ # ChakraCore -[![Join the chat at https://gitter.im/Microsoft/ChakraCore](https://badges.gitter.im/Microsoft/ChakraCore.svg)](https://gitter.im/Microsoft/ChakraCore?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) +[![Discord Chat](https://img.shields.io/discord/695166668967510077?label=Discord&logo=Discord)](https://discord.gg/dgRawPdNuC) [![Licensed under the MIT License](https://img.shields.io/badge/License-MIT-blue.svg)](https://github.com/Microsoft/ChakraCore/blob/master/LICENSE.txt) +[![PR's Welcome](https://img.shields.io/badge/PRs%20-welcome-brightgreen.svg)](#contribute) -ChakraCore is the core part of Chakra, the high-performance JavaScript engine that powers Microsoft Edge and Windows applications written in HTML/CSS/JS. ChakraCore supports Just-in-time (JIT) compilation of JavaScript for x86/x64/ARM, garbage collection, and a wide range of the latest JavaScript features. ChakraCore also supports the [JavaScript Runtime (JSRT) APIs](https://github.com/Microsoft/ChakraCore/wiki/JavaScript-Runtime-%28JSRT%29-Overview), which allows you to easily embed ChakraCore in your applications. - -You can stay up-to-date on progress by following the [MSEdge developer blog](https://blogs.windows.com/msedgedev/). - -## [Build Status](https://github.com/Microsoft/ChakraCore/wiki/Build-Status) - -| | __Debug__ | __Test__ | __Release__ | -|:-----------------------------:|:---------:|:--------:|:-----------:| -| __Windows (x64)__ | [![x64debug][x64dbgicon]][x64dbglink] | [![x64test][x64testicon]][x64testlink] | [![x64release][x64relicon]][x64rellink] | -| __Windows (x86)__ | [![x86debug][x86dbgicon]][x86dbglink] | [![x86test][x86testicon]][x86testlink] | [![x86release][x86relicon]][x86rellink] | -| __Windows (ARM)__ | [![armdebug][armdbgicon]][armdbglink] | [![armtest][armtesticon]][armtestlink] | [![armrelease][armrelicon]][armrellink] | -| __Ubuntu 16.04 (x64)[a]__ | [![linux_a_debug][linux_a_dbgicon]][linux_a_dbglink] | [![linux_a_test][linux_a_testicon]][linux_a_testlink] | [![linux_a_release][linux_a_relicon]][linux_a_rellink] | -| __Ubuntu 16.04 (x64)[s]__ | [![linux_s_debug][linux_s_dbgicon]][linux_s_dbglink] | [![linux_s_test][linux_s_testicon]][linux_s_testlink] | [![linux_s_release][linux_s_relicon]][linux_s_rellink] | -| __Ubuntu 16.04 (x64)[s][n]__ | * | [![linux_sn_test][linux_sn_testicon]][linux_sn_testlink] | * | -| __OS X 10.9 (x64)[a]__ | [![osx_a_debug][osx_a_dbgicon]][osx_a_dbglink] | [![osx_a_test][osx_a_testicon]][osx_a_testlink] | [![osx_a_release][osx_a_relicon]][osx_a_rellink] | -| __OS X 10.9 (x64)[s][n]__ | * | [![osx_sn_test][osx_sn_testicon]][osx_sn_testlink] | * | - -[a] Static | [s] Shared | [n] NoJIT | * Omitted - -[x64dbgicon]: https://ci.dot.net/job/Microsoft_ChakraCore/job/master/job/x64_debug/badge/icon -[x64dbglink]: https://ci.dot.net/job/Microsoft_ChakraCore/job/master/job/x64_debug/ -[x64testicon]: https://ci.dot.net/job/Microsoft_ChakraCore/job/master/job/x64_test/badge/icon -[x64testlink]: https://ci.dot.net/job/Microsoft_ChakraCore/job/master/job/x64_test/ -[x64relicon]: https://ci.dot.net/job/Microsoft_ChakraCore/job/master/job/x64_release/badge/icon -[x64rellink]: https://ci.dot.net/job/Microsoft_ChakraCore/job/master/job/x64_release/ - -[x86dbgicon]: https://ci.dot.net/job/Microsoft_ChakraCore/job/master/job/x86_debug/badge/icon -[x86dbglink]: https://ci.dot.net/job/Microsoft_ChakraCore/job/master/job/x86_debug/ -[x86testicon]: https://ci.dot.net/job/Microsoft_ChakraCore/job/master/job/x86_test/badge/icon -[x86testlink]: https://ci.dot.net/job/Microsoft_ChakraCore/job/master/job/x86_test/ -[x86relicon]: https://ci.dot.net/job/Microsoft_ChakraCore/job/master/job/x86_release/badge/icon -[x86rellink]: https://ci.dot.net/job/Microsoft_ChakraCore/job/master/job/x86_release/ - -[armdbgicon]: https://ci.dot.net/job/Microsoft_ChakraCore/job/master/job/arm_debug/badge/icon -[armdbglink]: https://ci.dot.net/job/Microsoft_ChakraCore/job/master/job/arm_debug/ -[armtesticon]: https://ci.dot.net/job/Microsoft_ChakraCore/job/master/job/arm_test/badge/icon -[armtestlink]: https://ci.dot.net/job/Microsoft_ChakraCore/job/master/job/arm_test/ -[armrelicon]: https://ci.dot.net/job/Microsoft_ChakraCore/job/master/job/arm_release/badge/icon -[armrellink]: https://ci.dot.net/job/Microsoft_ChakraCore/job/master/job/arm_release/ - -[linux_a_dbgicon]: https://ci.dot.net/job/Microsoft_ChakraCore/job/master/job/static_ubuntu_linux_debug/badge/icon -[linux_a_dbglink]: https://ci.dot.net/job/Microsoft_ChakraCore/job/master/job/static_ubuntu_linux_debug/ -[linux_a_testicon]: https://ci.dot.net/job/Microsoft_ChakraCore/job/master/job/static_ubuntu_linux_test/badge/icon -[linux_a_testlink]: https://ci.dot.net/job/Microsoft_ChakraCore/job/master/job/static_ubuntu_linux_test/ -[linux_a_relicon]: https://ci.dot.net/job/Microsoft_ChakraCore/job/master/job/static_ubuntu_linux_release/badge/icon -[linux_a_rellink]: https://ci.dot.net/job/Microsoft_ChakraCore/job/master/job/static_ubuntu_linux_release/ - -[linux_s_dbgicon]: https://ci.dot.net/job/Microsoft_ChakraCore/job/master/job/shared_ubuntu_linux_debug/badge/icon -[linux_s_dbglink]: https://ci.dot.net/job/Microsoft_ChakraCore/job/master/job/shared_ubuntu_linux_debug/ -[linux_s_testicon]: https://ci.dot.net/job/Microsoft_ChakraCore/job/master/job/shared_ubuntu_linux_test/badge/icon -[linux_s_testlink]: https://ci.dot.net/job/Microsoft_ChakraCore/job/master/job/shared_ubuntu_linux_test/ -[linux_s_relicon]: https://ci.dot.net/job/Microsoft_ChakraCore/job/master/job/shared_ubuntu_linux_release/badge/icon -[linux_s_rellink]: https://ci.dot.net/job/Microsoft_ChakraCore/job/master/job/shared_ubuntu_linux_release/ - -[linux_sn_dbgicon]: https://ci.dot.net/job/Microsoft_ChakraCore/job/master/job/_no_jit_shared_ubuntu_linux_debug/badge/icon -[linux_sn_dbglink]: https://ci.dot.net/job/Microsoft_ChakraCore/job/master/job/_no_jit_shared_ubuntu_linux_debug/ -[linux_sn_testicon]: https://ci.dot.net/job/Microsoft_ChakraCore/job/master/job/_no_jit_shared_ubuntu_linux_test/badge/icon -[linux_sn_testlink]: https://ci.dot.net/job/Microsoft_ChakraCore/job/master/job/_no_jit_shared_ubuntu_linux_test/ -[linux_sn_relicon]: https://ci.dot.net/job/Microsoft_ChakraCore/job/master/job/_no_jit_shared_ubuntu_linux_release/badge/icon -[linux_sn_rellink]: https://ci.dot.net/job/Microsoft_ChakraCore/job/master/job/_no_jit_shared_ubuntu_linux_release/ - -[osx_a_dbgicon]: https://ci.dot.net/job/Microsoft_ChakraCore/job/master/job/static_osx_osx_debug/badge/icon -[osx_a_dbglink]: https://ci.dot.net/job/Microsoft_ChakraCore/job/master/job/static_osx_osx_debug/ -[osx_a_testicon]: https://ci.dot.net/job/Microsoft_ChakraCore/job/master/job/static_osx_osx_test/badge/icon -[osx_a_testlink]: https://ci.dot.net/job/Microsoft_ChakraCore/job/master/job/static_osx_osx_test/ -[osx_a_relicon]: https://ci.dot.net/job/Microsoft_ChakraCore/job/master/job/static_osx_osx_release/badge/icon -[osx_a_rellink]: https://ci.dot.net/job/Microsoft_ChakraCore/job/master/job/static_osx_osx_release/ - -[osx_sn_dbgicon]: https://ci.dot.net/job/Microsoft_ChakraCore/job/master/job/_no_jit_shared_osx_osx_debug/badge/icon -[osx_sn_dbglink]: https://ci.dot.net/job/Microsoft_ChakraCore/job/master/job/_no_jit_shared_osx_osx_debug/ -[osx_sn_testicon]: https://ci.dot.net/job/Microsoft_ChakraCore/job/master/job/_no_jit_shared_osx_osx_test/badge/icon -[osx_sn_testlink]: https://ci.dot.net/job/Microsoft_ChakraCore/job/master/job/_no_jit_shared_osx_osx_test/ -[osx_sn_relicon]: https://ci.dot.net/job/Microsoft_ChakraCore/job/master/job/_no_jit_shared_osx_osx_release/badge/icon -[osx_sn_rellink]: https://ci.dot.net/job/Microsoft_ChakraCore/job/master/job/_no_jit_shared_osx_osx_release/ - -Above is a table of our rolling build status. We run additional builds on a daily basis. See [Build Status](https://github.com/Microsoft/ChakraCore/wiki/Build-Status) for the status of all builds and additional details. +ChakraCore is a JavaScript engine with a C API you can use to add support for JavaScript to any C or C compatible project. It can be compiled for x64 processors on Linux macOS and Windows. And x86 and ARM for Windows only. It is a future goal to support x86 and ARM processors on Linux and ARM on macOS. + +## Future of ChakraCore + +As you may have heard Microsoft Edge no longer uses Chakra. Microsoft will continue to provide security updates for ChakraCore 1.11 until 9th March 2021 but do not intend to support it after that. + +ChakraCore is planned to continue as a community project targeted primarily at embedded use cases. We hope to produce future releases with new features and enhancements to support such use cases. We also would like to invite any interested parties to be involved in this project. For further details please see the following draft planning documents: +[Overall plan](https://github.com/chakra-core/org/blob/master/ChakraCore%20Future%20Plan.md) +[Version 1.12 plan](https://github.com/chakra-core/org/blob/master/Release%201.12%20plan.md) + +Also see discussion in issue [#6384](https://github.com/microsoft/ChakraCore/issues/6384) + +If you'd like to contact the community team please either open an issue or join the Discord chat linked above. ## Security -If you believe you have found a security issue in ChakraCore, please share it with us privately following the guidance at the Microsoft [Security TechCenter](https://technet.microsoft.com/en-us/security/ff852094). Reporting it via this channel helps minimize risk to projects built with ChakraCore. +If you believe you have found a security issue in ChakraCore 1.11, please share it with Microsoft privately following the guidance at the Microsoft [Security TechCenter](https://technet.microsoft.com/en-us/security/ff852094). Reporting it via this channel helps minimize risk to projects built with ChakraCore. + +If you find a security issue in the Master branch of Chakracore but not in 1.11 please join our Discord server and private message one of the Core team members. ## Documentation -* [ChakraCore Architecture](https://github.com/Microsoft/ChakraCore/wiki/Architecture-Overview) -* [Quickstart Embedding ChakraCore](https://github.com/Microsoft/ChakraCore/wiki/Embedding-ChakraCore) -* [JSRT Reference](https://github.com/Microsoft/ChakraCore/wiki/JavaScript-Runtime-%28JSRT%29-Reference) +* [ChakraCore Architecture](https://github.com/chakra-core/ChakraCore/wiki/Architecture-Overview) +* [Quickstart Embedding ChakraCore](https://github.com/chakra-core/ChakraCore/wiki/Embedding-ChakraCore) +* [API Reference](https://github.com/chakra-core/ChakraCore/wiki/JavaScript-Runtime-%28JSRT%29-Reference) * [Contribution guidelines](CONTRIBUTING.md) -* [Blogs, talks and other resources](https://github.com/Microsoft/ChakraCore/wiki/Resources) +* [Blogs, talks and other resources](https://github.com/chakra-core/ChakraCore/wiki/Resources) -## [Building ChakraCore](https://github.com/Microsoft/ChakraCore/wiki/Building-ChakraCore) +## Building ChakraCore You can build ChakraCore on Windows 7 SP1 or above, and Windows Server 2008 R2 or above, with either Visual Studio 2015 or 2017 with C++ support installed. Once you have Visual Studio installed: @@ -100,7 +40,10 @@ You can build ChakraCore on Windows 7 SP1 or above, and Windows Server 2008 R2 o * Open `Build\Chakra.Core.sln` in Visual Studio * Build Solution -More details in [Building ChakraCore](https://github.com/Microsoft/ChakraCore/wiki/Building-ChakraCore). +On macOS you can build ChakraCore with the xcode command line tools and `cmake`. +On Linux you can build ChakraCore with `cmake` and `ninja`. + +More details in [Building ChakraCore](https://github.com/chakra-core/ChakraCore/wiki/Building-ChakraCore). Alternatively, see [Getting ChakraCore binaries](https://github.com/Microsoft/ChakraCore/wiki/Getting-ChakraCore-binaries) for pre-built ChakraCore binaries. @@ -108,38 +51,32 @@ Alternatively, see [Getting ChakraCore binaries](https://github.com/Microsoft/Ch Once built, you have a few options for how you can use ChakraCore: -* The most basic is to test the engine is running correctly with the *ch.exe* binary. This app is a lightweight hosting of JSRT that you can use to run small applications. After building, you can find this binary in: - * `Build\VcBuild\bin\${platform}_${configuration}` - * (e.g. `Build\VcBuild\bin\x64_debug`) -* You can [embed ChakraCore](https://github.com/Microsoft/ChakraCore/wiki/Embedding-ChakraCore) in your applications - see [documentation](https://github.com/Microsoft/ChakraCore/wiki/Embedding-ChakraCore) and [samples](https://aka.ms/chakracoresamples). -* Finally, you can also use ChakraCore as the JavaScript engine in Node. You can learn more by reading how to use [Chakra as Node's JS engine](https://github.com/Microsoft/node) +* The most basic is to test the engine is running correctly with the application *ch.exe* (ch on linux or macOS). This app is a lightweight host of ChakraCore that you can use to run small applications. After building, you can find this binary in: + * Windows: `Build\VcBuild\bin\${platform}_${configuration}` (e.g. `Build\VcBuild\bin\x64_debug`) + * macOS/Linux: `buildFolder/config/ch` (e.g. `out/Release/ch`) +* You can [embed ChakraCore](https://github.com/chakra-core/ChakraCore/wiki/Embedding-ChakraCore) in your applications - see [documentation](https://github.com/chakra-core/ChakraCore/wiki/Embedding-ChakraCore) and [samples](https://aka.ms/chakracoresamples). -_A note about using ChakraCore_: ChakraCore is the foundational JavaScript engine, but it does not include the external APIs that make up the modern JavaScript development experience. For example, DOM APIs like ```document.write()``` are additional APIs that are not available by default and would need to be provided. For debugging, you may instead want to use ```print()```. +_A note about using ChakraCore_: ChakraCore is a JavaScript engine, it does not include the external APIs that are provided by a Web Browser or Node.js. For example, DOM APIs like ```document.write()``` are additional APIs that are not provided by ChakraCore, when embedding ChakraCore in an application you will need to implement your own input and output APIs. For debugging, in `ch` you can use ```print()``` to put text to the terminal. -## [Contribute](CONTRIBUTING.md) +Alternatively, if you are using the [vcpkg](https://github.com/Microsoft/vcpkg/) dependency manager you can download and install ChakraCore with CMake integration in a single command: +* vcpkg install chakracore -Contributions to ChakraCore are welcome. Here is how you can contribute to ChakraCore: +## Contribute -* [Submit bugs](https://github.com/Microsoft/ChakraCore/issues) and help us verify fixes (please refer to [External Issues](https://github.com/Microsoft/ChakraCore/wiki/External-Issues) for anything external, such as Microsoft Edge or Node-ChakraCore issues) -* [Submit pull requests](https://github.com/Microsoft/ChakraCore/pulls) for bug fixes and features and discuss existing proposals -* Chat about [@ChakraCore](https://twitter.com/ChakraCore) on Twitter +Contributions to ChakraCore are welcome. Here is how you can contribute to ChakraCore: -This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. +* [Submit bugs](https://github.com/chakra-core/ChakraCore/issues) and help us verify fixes. +* [Submit pull requests](https://github.com/chakra-core/ChakraCore/pulls) for bug fixes and features and discuss existing proposals Please refer to [Contribution Guidelines](CONTRIBUTING.md) for more details. -## [License](https://github.com/Microsoft/ChakraCore/blob/master/LICENSE.txt) - -Code licensed under the [MIT License](https://github.com/Microsoft/ChakraCore/blob/master/LICENSE.txt). - -## [Roadmap](https://github.com/Microsoft/ChakraCore/wiki/Roadmap) +## License -For details on our planned features and future direction please refer to our [Roadmap](https://github.com/Microsoft/ChakraCore/wiki/Roadmap). +Code licensed under the [MIT License](https://github.com/chakra-core/ChakraCore/blob/master/LICENSE.txt). ## Contact Us If you have questions about ChakraCore, or you would like to reach out to us about an issue you're having or for development advice as you work on a ChakraCore issue, you can reach us as follows: -* Open an [issue](https://github.com/Microsoft/ChakraCore/issues/new) and prefix the issue title with [Question]. See [Question](https://github.com/Microsoft/ChakraCore/issues?q=label%3AQuestion) tag for already-opened questions. -* Discuss ChakraCore with the team and the community on our [Gitter Channel](https://gitter.im/Microsoft/ChakraCore). -* You can also start private messages with individual ChakraCore developers via Gitter. +* Open an [issue](https://github.com/chakra-core/ChakraCore/issues/new) and prefix the issue title with [Question]. See [Question](https://github.com/chakra-core/ChakraCore/issues?q=label%3AQuestion) tag for already-opened questions. +* Discuss ChakraCore with the team and the community via the Discord link above diff --git a/RegenAllByteCode.cmd b/RegenAllByteCode.cmd deleted file mode 100644 index 11257f22361..00000000000 --- a/RegenAllByteCode.cmd +++ /dev/null @@ -1,83 +0,0 @@ -::------------------------------------------------------------------------------------------------------- -:: Copyright (C) Microsoft. All rights reserved. -:: Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. -::------------------------------------------------------------------------------------------------------- - -:: Regenerate all bytecode. -:: ch.exe is used to generate Intl bytecodes. -:: ch.exe (NoJIT variety) is used to generate NoJIT Intl bytecodes. -:: Each set of bytecode requires an x86_debug and x64_debug binary. -:: -:: Thus we need to build the following: -:: [Core] ch.exe x64_debug -:: [Core] ch.exe x86_debug -:: [Core] ch.exe x64_debug (NoJIT) -:: [Core] ch.exe x86_debug (NoJIT) - -setlocal -pushd %~dp0 - -:: ch.exe x64_debug -:: ch.exe x86_debug -call jenkins\buildone.cmd x64 debug -if %errorlevel% neq 0 ( - echo There was a build error for x64 debug. Stopping bytecode generation. - exit /b 1 -) -call jenkins\buildone.cmd x86 debug -if %errorlevel% neq 0 ( - echo There was a build error for x86 debug. Stopping bytecode generation. - exit /b 1 -) - -pushd lib\Runtime\Library\InJavascript -call GenByteCode.cmd -if %errorlevel% neq 0 ( - echo There was an error when regenerating bytecode header. - exit /b 1 -) -popd - -pushd lib\Runtime\Library\JsBuiltIn -call GenByteCode.cmd -if %errorlevel% neq 0 ( - echo There was an error when regenerating bytecode header. - exit /b 1 -) -popd - -:: ch.exe x64_debug (NoJIT) -:: ch.exe x86_debug (NoJIT) -call jenkins\buildone.cmd x64 debug "/p:BuildJIT=false" -if %errorlevel% neq 0 ( - echo There was a build error for x64 debug NoJIT. Stopping bytecode generation. - exit /b 1 -) - -call jenkins\buildone.cmd x86 debug "/p:BuildJIT=false" -if %errorlevel% neq 0 ( - echo There was a build error for x86 debug NoJIT. Stopping bytecode generation. - exit /b 1 -) - -:: Generate Intl NoJIT Bytecodes using ch.exe (NoJIT) -pushd lib\Runtime\Library\InJavascript -call GenByteCode.cmd -nojit -if %errorlevel% neq 0 ( - echo There was an error when regenerating bytecode header for NoJIT. - exit /b 1 -) -popd - -:: Generate BuiltIn NoJIT Bytecodes using ch.exe (NoJIT) -pushd lib\Runtime\Library\JsBuiltIn -call GenByteCode.cmd -nojit -if %errorlevel% neq 0 ( - echo There was an error when regenerating bytecode header for NoJIT. - exit /b 1 -) -popd - -popd - -endlocal diff --git a/RegenAllByteCodeNoBuild.cmd b/RegenAllByteCodeNoBuild.cmd deleted file mode 100644 index 9f0baeb3515..00000000000 --- a/RegenAllByteCodeNoBuild.cmd +++ /dev/null @@ -1,40 +0,0 @@ -::------------------------------------------------------------------------------------------------------- -:: Copyright (C) Microsoft. All rights reserved. -:: Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. -::------------------------------------------------------------------------------------------------------- - -:: WARNING: be careful when using this script as it assumes that -:: you already have bytecode-format-compatible builds for all required flavors. -:: This script helps speed things up when you are only making changes to scripts, -:: e.g. Intl.js, without making any changes to bytecode format, since rebuilding -:: every flavor of ChakraCore.dll when there are no relevant changes is a waste of time. -:: Please ensure that you use buddy builds to validate the results. - -:: Regenerate all bytecode (without rebuilding each flavor of ch.exe) -:: ch.exe is used to generate Intl bytecodes. -:: ch.exe (NoJIT variety) is used to generate NoJIT Intl bytecodes. -:: Each set of bytecode requires an x86_debug and x64_debug binary. -:: -:: Thus we need to already have compatible builds of the following: -:: [Core] ch.exe x64_debug -:: [Core] ch.exe x86_debug -:: [Core] ch.exe x64_debug (NoJIT) -:: [Core] ch.exe x86_debug (NoJIT) - -@echo off -setlocal - set _reporoot=%~dp0 - pushd %_reporoot%\lib\Runtime\Library\InJavascript - call GenByteCode.cmd - call GenByteCode.cmd -nojit - popd - pushd %_reporoot%\lib\Runtime\Library\JsBuiltIn - call GenByteCode.cmd - call GenByteCode.cmd -nojit - popd - - pushd %_reporoot%\lib\Runtime\Library\JsBuiltIn - call GenByteCode.cmd - call GenByteCode.cmd -nojit - popd -endlocal diff --git a/THIRD-PARTY-NOTICES.txt b/THIRD-PARTY-NOTICES.txt index 6638eb7654d..fdad9a73a7e 100644 --- a/THIRD-PARTY-NOTICES.txt +++ b/THIRD-PARTY-NOTICES.txt @@ -1,19 +1,21 @@ ChakraCore uses third party material from the projects listed below. The original copyright notice and the license under which Microsoft -received such third party material are set forth below. Microsoft -reserves all other rights not expressly granted, whether by +or the ChakraCore Project Contributors received such third party material +are set forth below. Microsoft, and where relevant the ChakraCore Project +Contributors reserve all other rights not expressly granted, whether by implication, estoppel or otherwise. In the event that we accidentally failed to list a required notice, please -bring it to our attention. Post an issue or email us: chakracore@microsoft.com +bring it to our attention. Post an issue or message us on discord. THIRD-PARTY SOFTWARE NOTICES AND INFORMATION Do Not Translate or Localize ChakraCore incorporates third party material from the projects listed below. -The original copyright notice and the license under which Microsoft received -such third party material are set forth below. Microsoft reserves all other -rights not expressly granted, whether by implication, estoppel or otherwise. +The original copyright notice and the license under which Microsoft or the +ChakraCore Project Contributors received such third party material are set +forth below. Microsoft, and where relevant the ChakraCore Project Contributors +reserve all other rights not expressly granted, whether by implication, estoppel or otherwise. 1. backbone.suggestions (https://github.com/qloo/backbone.suggestions) 2. BeatDetektor.js @@ -48,6 +50,7 @@ rights not expressly granted, whether by implication, estoppel or otherwise. 31. yargs-parser.js (https://github.com/yargs/yargs-parser) 32. camelcase.js (https://github.com/sindresorhus/camelcase) 33. ARES-6 (https://github.com/WebKit/webkit/tree/master/PerformanceTests/ARES-6) +34. PAL (from dotNet) %% backbone.suggestions NOTICES, INFORMATION, AND LICENSE BEGIN HERE ========================================= @@ -2041,3 +2044,30 @@ END OF ARES-6 NOTICES, INFORMATION, AND LICENSE --------------------------------------------- +%% PAL NOTICES, INFORMATION AND LICENSE BEGIN HERE +========================================= +The MIT License (MIT) + +Copyright (c) .NET Foundation and Contributors + +All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +========================================= +END OF PAL NOTICES, INFORMATION, AND LICENSE diff --git a/azure-pipelines.yml b/azure-pipelines.yml new file mode 100644 index 00000000000..0d21565fd58 --- /dev/null +++ b/azure-pipelines.yml @@ -0,0 +1,210 @@ +#------------------------------------------------------------------------------------------------------- +# Copyright (c) ChakraCore Project Contributors. All rights reserved. +# Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. +#------------------------------------------------------------------------------------------------------- + +trigger: +- master +- release/* + +jobs: + - job: Style + timeoutInMinutes: 10 + + pool: + vmImage: 'ubuntu-latest' + + steps: + - script: tools/StyleChecks/check_copyright.sh + displayName: "Copyright Check" + + - script: tools/StyleChecks/check_ascii.sh + displayName: "Ascii Check" + + - script: tools/StyleChecks/check_eol.sh + displayName: "EOL Check" + + - script: tools/StyleChecks/check_tabs.sh + displayName: "Tab Check" + + - job: CMake + timeoutInMinutes: 120 + strategy: + maxParallel: 6 + matrix: + Linux.Debug: + image_name: 'ubuntu-22.04' + deps: 'sudo apt-get install -y ninja-build clang libicu-dev' + build_type: 'Debug' + libtype_flag: '' + Linux.NoJit: + image_name: 'ubuntu-22.04' + deps: 'sudo apt-get install -y ninja-build clang libicu-dev' + build_type: 'Debug' + libtype_flag: '-DDISABLE_JIT=ON' + Linux.ReleaseWithDebug: + image_name: 'ubuntu-22.04' + deps: 'sudo apt-get install -y ninja-build clang libicu-dev' + build_type: 'RelWithDebInfo' + libtype_flag: '' + Linux.Release: + image_name: 'ubuntu-22.04' + deps: 'sudo apt-get install -y ninja-build clang libicu-dev' + build_type: 'Release' + libtype_flag: '' + Ubuntu20.ReleaseWithDebug: + image_name: 'ubuntu-20.04' + deps: 'sudo apt-get install -y ninja-build clang libicu-dev' + build_type: 'RelWithDebInfo' + libtype_flag: '' + Ubuntu20.Release: + image_name: 'ubuntu-20.04' + deps: 'sudo apt-get install -y ninja-build clang libicu-dev' + build_type: 'Release' + libtype_flag: '' + OSX.DebugNoICU: + image_name: 'macOS-latest' + deps: 'brew install ninja' + build_type: 'Debug' + libtype_flag: '-DSTATIC_LIBRARY=ON' + OSX.ReleaseWithDebug: + image_name: 'macOS-latest' + deps: 'brew install ninja icu4c' + build_type: 'RelWithDebInfo' + libtype_flag: '-DICU_INCLUDE_PATH=/usr/local/opt/icu4c/include' + OSX.Release: + image_name: 'macOS-latest' + deps: 'brew install ninja icu4c' + build_type: 'Release' + libtype_flag: '-DICU_INCLUDE_PATH=/usr/local/opt/icu4c/include' + + pool: + vmImage: $(image_name) + + steps: + - script: $(deps) + displayName: 'Install dependencies' + + - script: | + mkdir -p build + displayName: 'Create build directories' + + - script: | + cd build + cmake -GNinja -DCMAKE_BUILD_TYPE=$BUILD_TYPE $LIBTYPE -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_C_COMPILER=clang .. + displayName: CMake + env: + BUILD_TYPE: $(build_type) + LIBTYPE: $(libtype_flag) + + - script: | + cd build + ninja + displayName: 'Build' + + - publish: $(System.DefaultWorkingDirectory)/build/bin + artifact: $(Agent.JobName) + + - script: | + cd build + ninja check + displayName: 'Test' + + - job: MSVC + timeoutInMinutes: 120 + strategy: + maxParallel: 4 + matrix: + x86.Debug: + image_name: 'windows-2022' + build_type: 'debug' + target: 'x86' + special_build: '' + do_test: true + test_tags: '' + build_outdir_suffix: '' + x86.Test: + image_name: 'windows-2022' + build_type: 'test' + target: 'x86' + special_build: '' + do_test: true + test_tags: '--include-slow' + build_outdir_suffix: '' + x86.NoJit: + image_name: 'windows-2022' + build_type: 'debug' + target: 'x86' + special_build: '"/p:BuildJIT=false"' + do_test: true + test_tags: '-disablejit' + build_outdir_suffix: '.NoJIT' + x86.Release: + image_name: 'windows-2022' + build_type: 'release' + target: 'x86' + special_build: '' + do_test: false + test_tags: '' + build_outdir_suffix: '' + x64.Debug: + image_name: 'windows-2022' + build_type: 'debug' + target: 'x64' + special_build: '' + do_test: true + test_tags: '' + build_outdir_suffix: '' + x64.Test: + image_name: 'windows-2022' + build_type: 'test' + target: 'x64' + special_build: '' + do_test: true + test_tags: '--include-slow' + build_outdir_suffix: '' + x64.Release: + image_name: 'windows-2022' + build_type: 'release' + target: 'x64' + special_build: '' + do_test: false + test_tags: '' + build_outdir_suffix: '' + win19.x86.Release: + image_name: 'windows-2019' + build_type: 'release' + target: 'x86' + special_build: '' + do_test: false + test_tags: '' + build_outdir_suffix: '' + win19.x64.Release: + image_name: 'windows-2019' + build_type: 'release' + target: 'x64' + special_build: '' + do_test: false + test_tags: '' + build_outdir_suffix: '' + pool: + vmImage: $(image_name) + + steps: + - script: test\ci.buildone.cmd %TARGET% %BUILD% %SPECIAL% + displayName: 'Build' + env: + TARGET: $(target) + BUILD: $(build_type) + SPECIAL: $(special_build) + + - publish: $(System.DefaultWorkingDirectory)/Build/VcBuild$(build_outdir_suffix)/bin + artifact: $(Agent.JobName) + + - script: test\ci.testone.cmd %TARGET% %BUILD% %TEST_TAGS% + displayName: 'Test' + condition: eq(variables['do_test'], true) + env: + TARGET: $(target) + BUILD: $(build_type) + TEST_TAGS: ${test_tags} diff --git a/bin/ChakraCore/ChakraCore.def b/bin/ChakraCore/ChakraCore.def index 903eca2a38b..b8801e1ccd6 100644 --- a/bin/ChakraCore/ChakraCore.def +++ b/bin/ChakraCore/ChakraCore.def @@ -68,5 +68,10 @@ JsSetHostPromiseRejectionTracker JsGetProxyProperties JsSerializeParserState JsRunScriptWithParserState +JsDeserializeParserState JsGetPromiseState JsGetPromiseResult + +JsQueueBackgroundParse_Experimental +JsDiscardBackgroundParse_Experimental +JsExecuteBackgroundParse_Experimental diff --git a/bin/ChakraCore/ChakraCore.vcxproj b/bin/ChakraCore/ChakraCore.vcxproj index 915a4fd670b..6a91cff6e72 100644 --- a/bin/ChakraCore/ChakraCore.vcxproj +++ b/bin/ChakraCore/ChakraCore.vcxproj @@ -164,6 +164,9 @@ {abc904ad-9415-46f8-aa23-e33193f81f7c} + + {4da3a367-6ed2-4ee8-9698-5bcd0b8af7f5} + {53D52B0B-86D9-4D31-AD09-0D6B3C063ADD} @@ -194,4 +197,4 @@ - + \ No newline at end of file diff --git a/bin/ChakraCore/ChakraCoreDllFunc.cpp b/bin/ChakraCore/ChakraCoreDllFunc.cpp index c0b5fc8ba25..624d3421956 100644 --- a/bin/ChakraCore/ChakraCoreDllFunc.cpp +++ b/bin/ChakraCore/ChakraCoreDllFunc.cpp @@ -153,6 +153,8 @@ EXTERN_C BOOL WINAPI DllMain(HINSTANCE hmod, DWORD dwReason, PVOID pvReserved) #if defined(CHECK_MEMORY_LEAK) || defined(LEAK_REPORT) else { + ThreadBoundThreadContextManager::DestroyAllContexts(); + DetachProcess(); ThreadContext::ReportAndCheckLeaksOnProcessDetach(); } #endif diff --git a/bin/ChakraCore/TestHooks.cpp b/bin/ChakraCore/TestHooks.cpp index 2416eec2be3..6e5a9a1e85f 100644 --- a/bin/ChakraCore/TestHooks.cpp +++ b/bin/ChakraCore/TestHooks.cpp @@ -19,6 +19,13 @@ int LogicalStringCompareImpl(const char16* p1, int p1size, const char16* p2, int } } +namespace Js +{ + static digit_t AddDigit(digit_t a, digit_t b, digit_t * carry); + static digit_t SubtractDigit(digit_t a, digit_t b, digit_t * borrow); + static digit_t MulDigit(digit_t a, digit_t b, digit_t * high); +} + #ifdef ENABLE_TEST_HOOKS HRESULT __stdcall SetConfigFlags(__in int argc, __in_ecount(argc) LPWSTR argv[], ICustomConfigFlags* customConfigFlags) @@ -61,16 +68,6 @@ HRESULT __stdcall SetEnableCheckMemoryLeakOutput(bool flag) return S_OK; } -#if ENABLE_NATIVE_CODEGEN -#ifdef _WIN32 -void __stdcall ConnectJITServer(HANDLE processHandle, void* serverSecurityDescriptor, UUID connectionId) -{ - JITManager::GetJITManager()->EnableOOPJIT(); - ThreadContext::SetJITConnectionInfo(processHandle, serverSecurityDescriptor, connectionId); -} -#endif -#endif - void __stdcall NotifyUnhandledException(PEXCEPTION_POINTERS exceptionInfo) { #ifdef GENERATE_DUMP @@ -168,6 +165,11 @@ HRESULT OnChakraCoreLoaded(OnChakraCoreLoadedPtr pfChakraCoreLoaded) SetEnableCheckMemoryLeakOutput, PlatformAgnostic::UnicodeText::Internal::LogicalStringCompareImpl, + //BigInt hooks + Js::JavascriptBigInt::AddDigit, + Js::JavascriptBigInt::SubDigit, + Js::JavascriptBigInt::MulDigit, + #define FLAG(type, name, description, defaultValue, ...) FLAG_##type##(name) #define FLAGINCLUDE(name) \ IsEnabled##name##Flag, \ @@ -191,9 +193,6 @@ HRESULT OnChakraCoreLoaded(OnChakraCoreLoadedPtr pfChakraCoreLoaded) #undef FLAG_NumberPairSet #undef FLAG_NumberTrioSet #undef FLAG_NumberRange -#if ENABLE_NATIVE_CODEGEN && _WIN32 - ConnectJITServer, -#endif NotifyUnhandledException }; return pfChakraCoreLoaded(testHooks); diff --git a/bin/ChakraCore/TestHooks.h b/bin/ChakraCore/TestHooks.h index 02b89958ca9..1b593c887d9 100644 --- a/bin/ChakraCore/TestHooks.h +++ b/bin/ChakraCore/TestHooks.h @@ -5,7 +5,7 @@ #pragma once #ifdef ENABLE_TEST_HOOKS - +#include interface ICustomConfigFlags; #if defined(_WIN32) || defined(_MSC_VER) @@ -31,6 +31,14 @@ struct TestHooks SetEnableCheckMemoryLeakOutputPtr pfSetEnableCheckMemoryLeakOutput; LogicalStringCompareImpl pfLogicalCompareStringImpl; + // Javasscript Bigint hooks + typedef digit_t(TESTHOOK_CALL *AddDigit)(digit_t a, digit_t b, digit_t* carry); + typedef digit_t(TESTHOOK_CALL *SubDigit)(digit_t a, digit_t b, digit_t* borrow); + typedef digit_t(TESTHOOK_CALL *MulDigit)(digit_t a, digit_t b, digit_t* high); + AddDigit pfAddDigit; + SubDigit pfSubDigit; + MulDigit pfMulDigit; + #define FLAG(type, name, description, defaultValue, ...) FLAG_##type##(name) #define FLAG_String(name) \ bool (TESTHOOK_CALL *pfIsEnabled##name##Flag)(); \ @@ -61,13 +69,6 @@ struct TestHooks #undef FLAG_NumberTrioSet #undef FLAG_NumberRange -#if ENABLE_NATIVE_CODEGEN -#ifdef _WIN32 - typedef void(TESTHOOK_CALL * ConnectJITServer)(HANDLE processHandle, void* serverSecurityDescriptor, UUID connectionId); - ConnectJITServer pfnConnectJITServer; -#endif -#endif - NotifyUnhandledExceptionPtr pfnNotifyUnhandledException; }; diff --git a/bin/GCStress/GCStress.vcxproj b/bin/GCStress/GCStress.vcxproj index 6e8bccbd712..14e91792ec5 100644 --- a/bin/GCStress/GCStress.vcxproj +++ b/bin/GCStress/GCStress.vcxproj @@ -32,6 +32,7 @@ $(ChakraRuntimePlatformAgnostic); $(ChakraCommonLinkDependencies); Ole32.lib; + Rpcrt4.lib; Advapi32.lib; %(AdditionalDependencies) diff --git a/bin/NativeTests/BigUIntTest.cpp b/bin/NativeTests/BigUIntTest.cpp new file mode 100644 index 00000000000..6042dab90f8 --- /dev/null +++ b/bin/NativeTests/BigUIntTest.cpp @@ -0,0 +1,275 @@ +//------------------------------------------------------------------------------------------------------- +// Copyright (C) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. +//------------------------------------------------------------------------------------------------------- + +#include "stdafx.h" +#pragma warning(disable:26434) // Function definition hides non-virtual function in base class +#pragma warning(disable:26439) // Implicit noexcept +#pragma warning(disable:26451) // Arithmetic overflow +#pragma warning(disable:26495) // Uninitialized member variable +#include "catch.hpp" +#include "BigUIntTest.h" + +#pragma warning(disable:4100) // unreferenced formal parameter +#pragma warning(disable:6387) // suppressing preFAST which raises warning for passing null to the JsRT APIs +#pragma warning(disable:6262) // CATCH is using stack variables to report errors, suppressing the preFAST warning. + +namespace BigUIntTest +{ + TEST_CASE("Init_Compare", "[BigUIntTest]") + { + uint32 digits[1]; + int32 length = 1; + Js::BigUInt bi1, bi2; + BOOL f; + int result; + + digits[0] = 0x00001111; + f = bi1.FInitFromRglu(digits, length); + REQUIRE(f); + + SECTION("Equal number init from the same array and length") + { + f = bi2.FInitFromRglu(digits, length); + REQUIRE(f); + result = bi1.Compare(&bi2); + CHECK(result == 0); + } + + SECTION("Equal number init from other big int number") + { + f = bi2.FInitFromBigint(&bi1); + REQUIRE(f); + result = bi1.Compare(&bi2); + CHECK(result == 0); + } + + SECTION("Greater number") + { + digits[0] = 0x00000001; + f = bi2.FInitFromRglu(digits, length); + REQUIRE(f); + result = bi1.Compare(&bi2); + CHECK(result == 1); + } + + SECTION("Smaller number") + { + digits[0] = 0x00000001; + f = bi2.FInitFromRglu(digits, length); + REQUIRE(f); + result = bi2.Compare(&bi1); + CHECK(result == -1); + } + } + + TEST_CASE("Addition", "[BigUIntTest]") + { + uint32 digits[1], digit1s[2]; + int32 length = 1; + Js::BigUInt bi1, bi2, bi3; + BOOL f; + int result; + + SECTION("Check 0x33331111 + 0x33331111 = 0x66662222") + { + digits[0] = 0x33331111; + f = bi1.FInitFromRglu(digits, length); + REQUIRE(f); + f = bi2.FInitFromBigint(&bi1); + REQUIRE(f); + f = bi1.FAdd(&bi2); + REQUIRE(f); + digits[0] = 0x66662222; + f = bi3.FInitFromRglu(digits, length); + REQUIRE(f); + result = bi1.Compare(&bi3); + CHECK(result == 0); + } + + SECTION("Check 0xffffffff + 0x1 = 0x100000000") + { + digits[0] = 0xffffffff; + f = bi1.FInitFromRglu(digits, length); + REQUIRE(f); + digits[0] = 0x00000001; + f = bi2.FInitFromRglu(digits, length); + REQUIRE(f); + f = bi1.FAdd(&bi2); + digit1s[0] = 0x0; + digit1s[1] = 0x1; + f = bi3.FInitFromRglu(digit1s, 2); + REQUIRE(f); + result = bi1.Compare(&bi3); + CHECK(result == 0); + } + + SECTION("Check 0xffffffffffffffff + 0x1 = 0x10000000000000000") + { + digit1s[0] = 0xffffffff; + digit1s[1] = 0xffffffff; + f = bi1.FInitFromRglu(digit1s, 2); + REQUIRE(f); + digits[0] = 0x00000001; + f = bi2.FInitFromRglu(digits, 1); + REQUIRE(f); + f = bi1.FAdd(&bi2); + uint32 digit2s[3]; + digit2s[0] = 0x0; + digit2s[1] = 0x0; + digit2s[2] = 0x1; + f = bi3.FInitFromRglu(digit2s, 3); + REQUIRE(f); + result = bi1.Compare(&bi3); + CHECK(result == 0); + } + } + + TEST_CASE("Addition_Subtraction_Large_Number", "[BigUIntTest]") + { + const int l1 = 50, l2 = 1; + uint32 digit1s[l1], digit2s[l2]; + Js::BigUInt bi1, bi2; + BOOL f; + + SECTION("Check 0xf...0xf + 0x1 = 0x1_0x0...0x0") + { + for (int i = 0; i < l1; i++) + { + digit1s[i] = 0xffffffff; + } + f = bi1.FInitFromRglu(digit1s, l1); + REQUIRE(f); + digit2s[0] = 0x1; + f = bi2.FInitFromRglu(digit2s, l2); + REQUIRE(f); + f = bi1.FAdd(&bi2); + REQUIRE(f); + int32 length = bi1.Clu(); + CHECK(length == l1 + 1); + uint32 digit = bi1.Lu(length - 1); + CHECK(digit == 1); + for (int i = 0; i < length - 1; i++) + { + digit = bi1.Lu(i); + CHECK(digit == 0); + } + } + } + + TEST_CASE("Subtraction", "[BigUIntTest]") + { + uint32 digits[1], digit1s[2]; + int32 length = 1; + Js::BigUInt bi1, bi2, bi3; + BOOL f; + int result; + + SECTION("Check 0x66662222 - 0x33331111 = 0x33331111") + { + digits[0] = 0x33331111; + f = bi1.FInitFromRglu(digits, length); + REQUIRE(f); + f = bi2.FInitFromBigint(&bi1); + REQUIRE(f); + digits[0] = 0x66662222; + f = bi3.FInitFromRglu(digits, length); + REQUIRE(f); + bi3.Subtract(&bi2); + result = bi1.Compare(&bi3); + CHECK(result == 0); + } + + SECTION("Check 0x3_0x1 - 0x1_0x0 = 0x2_0x1") + { + digit1s[0] = 0x1; + digit1s[1] = 0x3; + f = bi3.FInitFromRglu(digit1s, 2); + REQUIRE(f); + digit1s[0] = 0x0; + digit1s[1] = 0x1; + f = bi2.FInitFromRglu(digit1s, 2); + REQUIRE(f); + bi3.Subtract(&bi2); + int l = bi3.Clu(); + CHECK(l == 2); + int digit = bi3.Lu(1); + CHECK(digit == 2); + digit = bi3.Lu(0); + CHECK(digit == 1); + } + + SECTION("Check 0x2_0x0 - 0x1 = 0x1_0xfffffff") + { + digit1s[0] = 0x0; + digit1s[1] = 0x2; + f = bi3.FInitFromRglu(digit1s, 2); + REQUIRE(f); + digits[0] = 0x1; + f = bi2.FInitFromRglu(digits, 1); + REQUIRE(f); + bi3.Subtract(&bi2); + int l = bi3.Clu(); + CHECK(l == 2); + int digit = bi3.Lu(1); + CHECK(digit == 1); + digit = bi3.Lu(0); + CHECK(digit == 0xffffffff); + } + + SECTION("Currently 0x1_0x0 - 0x1 is overflow") + { + } + } + + TEST_CASE("Init_From_Char_Of_Digits", "[BigUIntTest]") + { + BigUInt biDec; + const char *charDigit; + bool result; + int charDigitLength; + + SECTION("2**32-1 should have length = 1") + { + charDigit = "4294967295"; + charDigitLength = 10; + result = biDec.FInitFromDigits(charDigit, charDigitLength, &charDigitLength); + REQUIRE(result); + int length = biDec.Clu(); + CHECK(length == 1); + uint32 digit = biDec.Lu(0); + CHECK(digit == 4294967295); + } + + SECTION("2**32+2 should have length = 2") + { + charDigit = "4294967298"; + charDigitLength = 10; + result = biDec.FInitFromDigits(charDigit, charDigitLength, &charDigitLength); + REQUIRE(result); + int length = biDec.Clu(); + CHECK(length == 2); + uint32 digit = biDec.Lu(0); + CHECK(digit == 2); + digit = biDec.Lu(1); + CHECK(digit == 1); + } + + SECTION("2**64 should have length = 3") + { + charDigit = "18446744073709551616"; + charDigitLength = 20; + result = biDec.FInitFromDigits(charDigit, charDigitLength, &charDigitLength); + REQUIRE(result); + int length = biDec.Clu(); + CHECK(length == 3); + uint32 digit = biDec.Lu(0); + CHECK(digit == 0); + digit = biDec.Lu(1); + CHECK(digit == 0); + digit = biDec.Lu(2); + CHECK(digit == 1); + } + } +} diff --git a/bin/NativeTests/BigUIntTest.h b/bin/NativeTests/BigUIntTest.h new file mode 100644 index 00000000000..d8401f85e67 --- /dev/null +++ b/bin/NativeTests/BigUIntTest.h @@ -0,0 +1,49 @@ +//------------------------------------------------------------------------------------------------------- +// Copyright (C) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. +//------------------------------------------------------------------------------------------------------- + +// This file contains stubs needed to make BigIntTest successfully compile and link as well +// as a means to emulate behavior of objects that interact with BigInt class + +#include "..\..\lib\Common\Warnings.h" +#include "..\..\lib\Common\Core\Api.cpp" +#include "..\..\lib\Common\Common\NumberUtilities.cpp" + +namespace Js +{ + void Throw::FatalInternalError(long) + { + Assert(false); + } + + bool Throw::ReportAssert(__in char const *, unsigned int, __in char const *, __in char const *) + { + return false; + } + + void Throw::LogAssert(void) {} +} + +template +double Js::NumberUtilities::StrToDbl(const EncodedChar *, const EncodedChar **, LikelyNumberType& , bool, bool) +{ + Assert(false); + return 0.0;// don't care +} + +#if defined(_M_IX86) || defined(_M_X64) +BOOL +AutoSystemInfo::SSE3Available() const +{ + Assert(false); + return TRUE; +} + +AutoSystemInfo AutoSystemInfo::Data; + +void AutoSystemInfo::Initialize(void){} +#endif + +#include "..\..\lib\Common\DataStructures\BigUInt.h" +#include "..\..\lib\Common\DataStructures\BigUInt.cpp" diff --git a/test/Math/constants.js b/bin/NativeTests/ConfigFlagsList.h similarity index 57% rename from test/Math/constants.js rename to bin/NativeTests/ConfigFlagsList.h index e6d41d203a5..185addb2493 100644 --- a/test/Math/constants.js +++ b/bin/NativeTests/ConfigFlagsList.h @@ -1,15 +1,7 @@ -//------------------------------------------------------------------------------------------------------- -// Copyright (C) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. -//------------------------------------------------------------------------------------------------------- - -// check constants, just echo -WScript.Echo("Math constants:") -WScript.Echo(Math.E); -WScript.Echo(Math.PI); -WScript.Echo(Math.LN10); -WScript.Echo(Math.LN2); -WScript.Echo(Math.LOG2E); -WScript.Echo(Math.LOG10E); -WScript.Echo(Math.SQRT1_2); -WScript.Echo(Math.SQRT2); \ No newline at end of file +//------------------------------------------------------------------------------------------------------- +// Copyright (C) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. +//------------------------------------------------------------------------------------------------------- +#pragma once + +// stub file for ConfigFlagsList.h diff --git a/bin/NativeTests/FunctionExecutionTest.h b/bin/NativeTests/FunctionExecutionTest.h index 94c20cab1c2..0d792cd7981 100644 --- a/bin/NativeTests/FunctionExecutionTest.h +++ b/bin/NativeTests/FunctionExecutionTest.h @@ -127,6 +127,8 @@ namespace Js FunctionEntryPointInfo* GetDefaultFunctionEntryPointInfo() { return &defaultInfo; } FunctionEntryPointInfo *GetSimpleJitEntryPointInfo() { return &simpleInfo; } void TraceExecutionMode(const char *const eventDescription = nullptr) const { UNREFERENCED_PARAMETER(eventDescription); } + // Dummy implementation to match the real FunctionBody's method + bool SkipAutoProfileForCoroutine() const { return false; } FunctionBody(bool interpreterProfile, bool interpreterAutoProfile, bool simpleJit): doInterpreterProfile(interpreterProfile), diff --git a/bin/NativeTests/JavascriptBigIntTests.cpp b/bin/NativeTests/JavascriptBigIntTests.cpp new file mode 100644 index 00000000000..9c9f35c3b15 --- /dev/null +++ b/bin/NativeTests/JavascriptBigIntTests.cpp @@ -0,0 +1,84 @@ +//------------------------------------------------------------------------------------------------------- +// Copyright (C) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. +//------------------------------------------------------------------------------------------------------- + +#include "stdafx.h" +#pragma warning(disable:26434) // Function definition hides non-virtual function in base class +#pragma warning(disable:26439) // Implicit noexcept +#pragma warning(disable:26451) // Arithmetic overflow +#pragma warning(disable:26495) // Uninitialized member variable +#include "catch.hpp" + +#pragma warning(disable:4100) // unreferenced formal parameter +#pragma warning(disable:6387) // suppressing preFAST which raises warning for passing null to the JsRT APIs +#pragma warning(disable:6262) // CATCH is using stack variables to report errors, suppressing the preFAST warning. + +namespace JavascriptBigIntTests +{ + void Test_AddDigit(digit_t digit1, digit_t digit2, digit_t * carry, digit_t expectedResult, digit_t expectedCarry) + { + REQUIRE(g_testHooksLoaded); + + digit_t res = g_testHooks.pfAddDigit(digit1, digit2, carry); + + //test to check that the result from call to AddDigit is the expected value + REQUIRE(res == expectedResult); + REQUIRE(expectedCarry == *carry); + } + + void Test_SubDigit(digit_t digit1, digit_t digit2, digit_t * borrow, digit_t expectedResult, digit_t expectedBorrow) + { + REQUIRE(g_testHooksLoaded); + + digit_t res = g_testHooks.pfSubDigit(digit1, digit2, borrow); + + //test to check that the result from call to SubtractDigit is the expected value + REQUIRE(res == expectedResult); + REQUIRE(*borrow == expectedBorrow); + } + + void Test_MulDigit(digit_t digit1, digit_t digit2, digit_t * high, digit_t expectedResult, digit_t expectedHigh) + { + REQUIRE(g_testHooksLoaded); + + digit_t res = g_testHooks.pfMulDigit(digit1, digit2, high); + + //test to check that the result from call to SubtractDigit is the expected value + REQUIRE(res == expectedResult); + REQUIRE(*high == expectedHigh); + } + + TEST_CASE("AddDigit", "[JavascriptBigIntTests]") + { + digit_t carry = 0; + Test_AddDigit(1, 2, &carry, 3, 0); + + digit_t d1 = UINTPTR_MAX; + digit_t d2 = UINTPTR_MAX; + carry = 0; + Test_AddDigit(d1, d2, &carry, UINTPTR_MAX-1, 1); + } + + TEST_CASE("SubDigit", "[JavascriptBigIntTests]") + { + digit_t borrow = 0; + Test_SubDigit(3, 2, &borrow, 1, 0); + + digit_t d1 = 0; + digit_t d2 = 1; + borrow = 0; + Test_SubDigit(d1, d2, &borrow, UINTPTR_MAX, 1); + } + + TEST_CASE("MulDigit", "[JavascriptBigIntTests]") + { + digit_t high = 0; + Test_MulDigit(3, 2, &high, 6, 0); + + digit_t d1 = UINTPTR_MAX; + digit_t d2 = 2; + high = 0; + Test_MulDigit(d1, d2, &high, UINTPTR_MAX-1, 1); + } +} diff --git a/bin/NativeTests/JsRTApiTest.cpp b/bin/NativeTests/JsRTApiTest.cpp index 8274a98f616..4d0e08dd166 100644 --- a/bin/NativeTests/JsRTApiTest.cpp +++ b/bin/NativeTests/JsRTApiTest.cpp @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #include "stdafx.h" @@ -252,11 +253,54 @@ namespace JsRTApiTest JsRTApiTest::RunWithAttributes(JsRTApiTest::DeleteObjectIndexedPropertyBug); } + void HasOwnItemTest(JsRuntimeAttributes attributes, JsRuntimeHandle runtime) + { + JsValueRef object; + REQUIRE(JsRunScript(_u("var obj = {a: [1,2], \"1\": 111}; obj.__proto__[3] = 333; obj;"), JS_SOURCE_CONTEXT_NONE, _u(""), &object) == JsNoError); + + JsPropertyIdRef idRef = JS_INVALID_REFERENCE; + JsValueRef result = JS_INVALID_REFERENCE; + // delete property "a" triggers PathTypeHandler -> SimpleDictionaryTypeHandler + REQUIRE(JsGetPropertyIdFromName(_u("a"), &idRef) == JsNoError); + REQUIRE(JsGetProperty(object, idRef, &result) == JsNoError); + bool hasOwnItem = false; + REQUIRE(JsHasOwnItem(result, 0, &hasOwnItem) == JsNoError); + CHECK(hasOwnItem); + + REQUIRE(JsHasOwnItem(result, 1, &hasOwnItem) == JsNoError); + CHECK(hasOwnItem); + + REQUIRE(JsHasOwnItem(result, 2, &hasOwnItem) == JsNoError); + CHECK(!hasOwnItem); // It does not have item on index 2 - so we should not be able to find that. + + REQUIRE(JsHasOwnItem(object, 1, &hasOwnItem) == JsNoError); + CHECK(hasOwnItem); + + REQUIRE(JsHasOwnItem(object, 3, &hasOwnItem) == JsNoError); + CHECK(!hasOwnItem); // index 3 is on prototype. + + bool has = false; + JsValueRef indexRef = JS_INVALID_REFERENCE; + REQUIRE(JsIntToNumber(3, &indexRef) == JsNoError); + REQUIRE(JsHasIndexedProperty(object, indexRef, &has) == JsNoError); + CHECK(has); // index 3 is prototype - so it should be able to find that. + } + + TEST_CASE("ApiTest_HasOwnItemTest", "[ApiTest]") + { + JsRTApiTest::RunWithAttributes(JsRTApiTest::HasOwnItemTest); + } + void CALLBACK ExternalObjectFinalizeCallback(void *data) { CHECK(data == (void *)0xdeadbeef); } + void CALLBACK ExternalObjectTraceCallback(void *data) + { + CHECK(data == (void *)0xdeadbeef); + } + void CrossContextSetPropertyTest(JsRuntimeAttributes attributes, JsRuntimeHandle runtime) { bool hasExternalData; @@ -292,6 +336,11 @@ namespace JsRTApiTest REQUIRE(JsSetPrototype(jsrtExternalObjectRef, mainObjectRef) == JsNoError); REQUIRE(JsHasExternalData(jsrtExternalObjectRef, &hasExternalData) == JsNoError); REQUIRE(hasExternalData); + + JsValueRef object3 = JS_INVALID_REFERENCE; + JsGetterSetterInterceptor * interceptor3 = nullptr; + JsValueRef prototype2 = JS_INVALID_REFERENCE; + REQUIRE(JsCreateCustomExternalObject((void *)0xdeadbeef, 0, ExternalObjectTraceCallback, ExternalObjectFinalizeCallback, &interceptor3, prototype2, &object3) == JsNoError); } TEST_CASE("ApiTest_CrossContextSetPropertyTest", "[ApiTest]") @@ -995,6 +1044,41 @@ namespace JsRTApiTest JsRTApiTest::RunWithAttributes(JsRTApiTest::EngineFlagTest); } + void CheckExceptionMetadata(JsValueRef exceptionMetadata) + { + JsPropertyIdRef property = JS_INVALID_REFERENCE; + JsValueRef metadataValue = JS_INVALID_REFERENCE; + JsValueType type; + REQUIRE(JsGetPropertyIdFromName(_u("exception"), &property) == JsNoError); + REQUIRE(JsGetProperty(exceptionMetadata, property, &metadataValue) == JsNoError); + REQUIRE(JsGetValueType(metadataValue, &type) == JsNoError); + CHECK(type == JsError); + + REQUIRE(JsGetPropertyIdFromName(_u("line"), &property) == JsNoError); + REQUIRE(JsGetProperty(exceptionMetadata, property, &metadataValue) == JsNoError); + REQUIRE(JsGetValueType(metadataValue, &type) == JsNoError); + CHECK(type == JsNumber); + + REQUIRE(JsGetPropertyIdFromName(_u("column"), &property) == JsNoError); + REQUIRE(JsGetProperty(exceptionMetadata, property, &metadataValue) == JsNoError); + REQUIRE(JsGetValueType(metadataValue, &type) == JsNoError); + CHECK(type == JsNumber); + + REQUIRE(JsGetPropertyIdFromName(_u("length"), &property) == JsNoError); + REQUIRE(JsGetProperty(exceptionMetadata, property, &metadataValue) == JsNoError); + REQUIRE(JsGetValueType(metadataValue, &type) == JsNoError); + CHECK(type == JsNumber); + + REQUIRE(JsGetPropertyIdFromName(_u("url"), &property) == JsNoError); + REQUIRE(JsGetProperty(exceptionMetadata, property, &metadataValue) == JsNoError); + REQUIRE(JsGetValueType(metadataValue, &type) == JsNoError); + CHECK(type == JsString); + + REQUIRE(JsGetPropertyIdFromName(_u("source"), &property) == JsNoError); + REQUIRE(JsGetProperty(exceptionMetadata, property, &metadataValue) == JsNoError); + REQUIRE(JsGetValueType(metadataValue, &type) == JsNoError); + CHECK(type == JsString); + } void ExceptionHandlingTest(JsRuntimeAttributes attributes, JsRuntimeHandle runtime) { bool value; @@ -1029,31 +1113,7 @@ namespace JsRTApiTest REQUIRE(JsGetProperty(exceptionMetadata, property, &metadataValue) == JsNoError); CHECK(metadataValue == exception); - REQUIRE(JsGetPropertyIdFromName(_u("line"), &property) == JsNoError); - REQUIRE(JsGetProperty(exceptionMetadata, property, &metadataValue) == JsNoError); - REQUIRE(JsGetValueType(metadataValue, &type) == JsNoError); - CHECK(type == JsNumber); - - REQUIRE(JsGetPropertyIdFromName(_u("column"), &property) == JsNoError); - REQUIRE(JsGetProperty(exceptionMetadata, property, &metadataValue) == JsNoError); - REQUIRE(JsGetValueType(metadataValue, &type) == JsNoError); - CHECK(type == JsNumber); - - REQUIRE(JsGetPropertyIdFromName(_u("length"), &property) == JsNoError); - REQUIRE(JsGetProperty(exceptionMetadata, property, &metadataValue) == JsNoError); - REQUIRE(JsGetValueType(metadataValue, &type) == JsNoError); - CHECK(type == JsNumber); - - REQUIRE(JsGetPropertyIdFromName(_u("url"), &property) == JsNoError); - REQUIRE(JsGetProperty(exceptionMetadata, property, &metadataValue) == JsNoError); - REQUIRE(JsGetValueType(metadataValue, &type) == JsNoError); - CHECK(type == JsString); - - REQUIRE(JsGetPropertyIdFromName(_u("source"), &property) == JsNoError); - REQUIRE(JsGetProperty(exceptionMetadata, property, &metadataValue) == JsNoError); - REQUIRE(JsGetValueType(metadataValue, &type) == JsNoError); - CHECK(type == JsString); - + CheckExceptionMetadata(exceptionMetadata); REQUIRE(JsHasException(&value) == JsNoError); CHECK(value == false); @@ -1069,35 +1129,18 @@ namespace JsRTApiTest REQUIRE(JsHasException(&value) == JsNoError); CHECK(value == false); - REQUIRE(JsGetPropertyIdFromName(_u("exception"), &property) == JsNoError); - REQUIRE(JsGetProperty(exceptionMetadata, property, &metadataValue) == JsNoError); - REQUIRE(JsGetValueType(metadataValue, &type) == JsNoError); - CHECK(type == JsError); - - REQUIRE(JsGetPropertyIdFromName(_u("line"), &property) == JsNoError); - REQUIRE(JsGetProperty(exceptionMetadata, property, &metadataValue) == JsNoError); - REQUIRE(JsGetValueType(metadataValue, &type) == JsNoError); - CHECK(type == JsNumber); - - REQUIRE(JsGetPropertyIdFromName(_u("column"), &property) == JsNoError); - REQUIRE(JsGetProperty(exceptionMetadata, property, &metadataValue) == JsNoError); - REQUIRE(JsGetValueType(metadataValue, &type) == JsNoError); - CHECK(type == JsNumber); + CheckExceptionMetadata(exceptionMetadata); - REQUIRE(JsGetPropertyIdFromName(_u("length"), &property) == JsNoError); - REQUIRE(JsGetProperty(exceptionMetadata, property, &metadataValue) == JsNoError); - REQUIRE(JsGetValueType(metadataValue, &type) == JsNoError); - CHECK(type == JsNumber); + // Test unicode characters + REQUIRE(JsRunScript(_u("function main() {\n var x = '\u20ac' + test();\n}\nmain();"), JS_SOURCE_CONTEXT_NONE, _u(""), nullptr) == JsErrorScriptException); + REQUIRE(JsHasException(&value) == JsNoError); + CHECK(value == true); - REQUIRE(JsGetPropertyIdFromName(_u("url"), &property) == JsNoError); - REQUIRE(JsGetProperty(exceptionMetadata, property, &metadataValue) == JsNoError); - REQUIRE(JsGetValueType(metadataValue, &type) == JsNoError); - CHECK(type == JsString); + REQUIRE(JsGetAndClearExceptionWithMetadata(&exceptionMetadata) == JsNoError); + REQUIRE(JsHasException(&value) == JsNoError); + CHECK(value == false); - REQUIRE(JsGetPropertyIdFromName(_u("source"), &property) == JsNoError); - REQUIRE(JsGetProperty(exceptionMetadata, property, &metadataValue) == JsNoError); - REQUIRE(JsGetValueType(metadataValue, &type) == JsNoError); - CHECK(type == JsString); + CheckExceptionMetadata(exceptionMetadata); // Following requires eval to be enabled - no point in testing it if we've disabled eval if (!(attributes & JsRuntimeAttributeDisableEval)) @@ -1110,35 +1153,7 @@ namespace JsRTApiTest REQUIRE(JsHasException(&value) == JsNoError); CHECK(value == false); - REQUIRE(JsGetPropertyIdFromName(_u("exception"), &property) == JsNoError); - REQUIRE(JsGetProperty(exceptionMetadata, property, &metadataValue) == JsNoError); - REQUIRE(JsGetValueType(metadataValue, &type) == JsNoError); - CHECK(type == JsError); - - REQUIRE(JsGetPropertyIdFromName(_u("line"), &property) == JsNoError); - REQUIRE(JsGetProperty(exceptionMetadata, property, &metadataValue) == JsNoError); - REQUIRE(JsGetValueType(metadataValue, &type) == JsNoError); - CHECK(type == JsNumber); - - REQUIRE(JsGetPropertyIdFromName(_u("column"), &property) == JsNoError); - REQUIRE(JsGetProperty(exceptionMetadata, property, &metadataValue) == JsNoError); - REQUIRE(JsGetValueType(metadataValue, &type) == JsNoError); - CHECK(type == JsNumber); - - REQUIRE(JsGetPropertyIdFromName(_u("length"), &property) == JsNoError); - REQUIRE(JsGetProperty(exceptionMetadata, property, &metadataValue) == JsNoError); - REQUIRE(JsGetValueType(metadataValue, &type) == JsNoError); - CHECK(type == JsNumber); - - REQUIRE(JsGetPropertyIdFromName(_u("url"), &property) == JsNoError); - REQUIRE(JsGetProperty(exceptionMetadata, property, &metadataValue) == JsNoError); - REQUIRE(JsGetValueType(metadataValue, &type) == JsNoError); - CHECK(type == JsString); - - REQUIRE(JsGetPropertyIdFromName(_u("source"), &property) == JsNoError); - REQUIRE(JsGetProperty(exceptionMetadata, property, &metadataValue) == JsNoError); - REQUIRE(JsGetValueType(metadataValue, &type) == JsNoError); - CHECK(type == JsString); + CheckExceptionMetadata(exceptionMetadata); } } @@ -2177,7 +2192,7 @@ namespace JsRTApiTest return JsNoError; } - static JsErrorCode CALLBACK Succes_NMRC(_In_opt_ JsModuleRecord referencingModule, _In_opt_ JsValueRef exceptionVar) + static JsErrorCode CALLBACK Success_NMRC(_In_opt_ JsModuleRecord referencingModule, _In_opt_ JsValueRef exceptionVar) { if (successTest.mainModule == referencingModule) { @@ -2187,6 +2202,11 @@ namespace JsRTApiTest return JsNoError; } + static JsErrorCode CALLBACK Success_IIMC(_In_opt_ JsModuleRecord referencingModule, _In_opt_ JsValueRef importMetaVar) + { + return JsNoError; + } + void ModuleSuccessTest(JsRuntimeAttributes attributes, JsRuntimeHandle runtime) { JsModuleRecord requestModule = JS_INVALID_REFERENCE; @@ -2197,7 +2217,8 @@ namespace JsRTApiTest successTest.mainModule = requestModule; REQUIRE(JsSetModuleHostInfo(requestModule, JsModuleHostInfo_FetchImportedModuleCallback, Success_FIMC) == JsNoError); REQUIRE(JsSetModuleHostInfo(requestModule, JsModuleHostInfo_FetchImportedModuleFromScriptCallback, Success_FIMC) == JsNoError); - REQUIRE(JsSetModuleHostInfo(requestModule, JsModuleHostInfo_NotifyModuleReadyCallback, Succes_NMRC) == JsNoError); + REQUIRE(JsSetModuleHostInfo(requestModule, JsModuleHostInfo_NotifyModuleReadyCallback, Success_NMRC) == JsNoError); + REQUIRE(JsSetModuleHostInfo(requestModule, JsModuleHostInfo_InitializeImportMetaCallback, Success_IIMC) == JsNoError); JsValueRef errorObject = JS_INVALID_REFERENCE; const char* fileContent = "import {x} from 'foo.js'"; @@ -2239,7 +2260,70 @@ namespace JsRTApiTest TEST_CASE("ApiTest_ModuleSuccessTest", "[ApiTest]") { JsRTApiTest::WithSetup(JsRuntimeAttributeEnableExperimentalFeatures, ModuleSuccessTest); + } + + void JsIsCallableTest(JsRuntimeAttributes attributes, JsRuntimeHandle runtime) + { + JsValueRef callables, callable, index, nonCallables, nonCallable; + bool check; + + REQUIRE(JsRunScript(_u("[function(){},function*(){},async function(){},async function*(){},_=>_,async _=>_]"), + JS_SOURCE_CONTEXT_NONE, _u(""), &callables) == JsNoError); + + for (int i = 0; i < 6; i++) + { + REQUIRE(JsIntToNumber(i, &index) == JsNoError); + REQUIRE(JsGetIndexedProperty(callables, index, &callable) == JsNoError); + REQUIRE(JsIsCallable(callable, &check) == JsNoError); + CHECK(check); + } + + + REQUIRE(JsRunScript(_u("[class{},Math,Reflect,{}]"), JS_SOURCE_CONTEXT_NONE, _u(""), &nonCallables) == JsNoError); + + for (int i = 0; i < 4; i++) + { + REQUIRE(JsIntToNumber(i, &index) == JsNoError); + REQUIRE(JsGetIndexedProperty(nonCallables, index, &nonCallable) == JsNoError); + REQUIRE(JsIsCallable(nonCallable, &check) == JsNoError); + CHECK(!check); + } + } + + TEST_CASE("ApiTest_JsIsCallableTest", "[ApiTest]") { + JsRTApiTest::RunWithAttributes(JsIsCallableTest); + } + + void JsIsConstructorTest(JsRuntimeAttributes attributes, JsRuntimeHandle runtime) + { + JsValueRef constructables, constructable, index, nonConstructables, nonConstructable; + bool check; + + REQUIRE(JsRunScript(_u("[class{},function(){}]"), JS_SOURCE_CONTEXT_NONE, _u(""), &constructables) == JsNoError); + + for (int i = 0; i < 2; i++) + { + REQUIRE(JsIntToNumber(i, &index) == JsNoError); + REQUIRE(JsGetIndexedProperty(constructables, index, &constructable) == JsNoError); + REQUIRE(JsIsConstructor(constructable, &check) == JsNoError); + CHECK(check); + } + + + REQUIRE(JsRunScript(_u("[Math,Reflect,{},function*(){},async function(){},async function*(){},_=>_,async _=>_]"), + JS_SOURCE_CONTEXT_NONE, _u(""), &nonConstructables) == JsNoError); + + for (int i = 0; i < 8; i++) + { + REQUIRE(JsIntToNumber(i, &index) == JsNoError); + REQUIRE(JsGetIndexedProperty(nonConstructables, index, &nonConstructable) == JsNoError); + REQUIRE(JsIsConstructor(nonConstructable, &check) == JsNoError); + CHECK(!check); + } + } + TEST_CASE("ApiTest_JsIsConstructorTest", "[ApiTest]") { + JsRTApiTest::RunWithAttributes(JsIsConstructorTest); } void SetModuleHostInfoTest(JsRuntimeAttributes attributes, JsRuntimeHandle runtime) @@ -2265,7 +2349,7 @@ namespace JsRTApiTest REQUIRE(JsInitializeModuleRecord(nullptr, specifier, &requestModule) == JsNoError); successTest.mainModule = requestModule; - REQUIRE(JsSetModuleHostInfo(requestModule, JsModuleHostInfo_NotifyModuleReadyCallback, Succes_NMRC) == JsNoError); + REQUIRE(JsSetModuleHostInfo(requestModule, JsModuleHostInfo_NotifyModuleReadyCallback, Success_NMRC) == JsNoError); // Parsing JsValueRef errorObject1 = JS_INVALID_REFERENCE; @@ -2313,7 +2397,7 @@ namespace JsRTApiTest successTest.mainModule = requestModule; REQUIRE(JsSetModuleHostInfo(requestModule, JsModuleHostInfo_FetchImportedModuleCallback, Success_FIMC1) == JsNoError); REQUIRE(JsSetModuleHostInfo(requestModule, JsModuleHostInfo_FetchImportedModuleFromScriptCallback, Success_FIMC1) == JsNoError); - REQUIRE(JsSetModuleHostInfo(requestModule, JsModuleHostInfo_NotifyModuleReadyCallback, Succes_NMRC) == JsNoError); + REQUIRE(JsSetModuleHostInfo(requestModule, JsModuleHostInfo_NotifyModuleReadyCallback, Success_NMRC) == JsNoError); JsValueRef errorObject = JS_INVALID_REFERENCE; const char* fileContent = "import {x} from 'foo.js'"; diff --git a/bin/NativeTests/NativeTests.vcxproj b/bin/NativeTests/NativeTests.vcxproj index 12b0412c73b..cc28f224988 100644 --- a/bin/NativeTests/NativeTests.vcxproj +++ b/bin/NativeTests/NativeTests.vcxproj @@ -48,6 +48,8 @@ + + diff --git a/bin/NativeTests/stdafx.h b/bin/NativeTests/stdafx.h index cd22fe95ada..c0d17b59a2b 100644 --- a/bin/NativeTests/stdafx.h +++ b/bin/NativeTests/stdafx.h @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- @@ -25,11 +26,16 @@ #define DebugOnly(x) x +#if !defined(CHAKRACORE_STRINGIZE) +#define CHAKRACORE_STRINGIZE_IMPL(x) #x +#define CHAKRACORE_STRINGIZE(x) CHAKRACORE_STRINGIZE_IMPL(x) +#endif + #define AssertMsg(exp, comment) \ do { \ if (!(exp)) \ { \ - fprintf(stderr, "ASSERTION (%s, line %d) %s %s\n", __FILE__, __LINE__, _STRINGIZE(exp), comment); \ + fprintf(stderr, "ASSERTION (%s, line %d) %s %s\n", __FILE__, __LINE__, CHAKRACORE_STRINGIZE(exp), comment); \ fflush(stderr); \ DebugBreak(); \ } \ @@ -40,7 +46,7 @@ if (!(exp)) \ #define Assert(exp) AssertMsg(exp, #exp) #define _JSRT_ -#include "chakracore.h" +#include "ChakraCore.h" #include "Core/CommonTypedefs.h" #include diff --git a/bin/ch/262.js b/bin/ch/262.js index 6ff3bd31aca..48483f0c5ed 100644 --- a/bin/ch/262.js +++ b/bin/ch/262.js @@ -1,31 +1,31 @@ //------------------------------------------------------------------------------------------------------- -// Copyright (C) Microsoft. All rights reserved. +// Copyright (C) Microsoft Corporation and contributors. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- R"====( var $262 = { - createRealm: function () { - return WScript.LoadScript('', 'samethread').$262; - }, - global: this, - agent: { - start: function (src) { - WScript.LoadScript( - ` - $262 = { - agent:{ - receiveBroadcast: function(callback){ WScript.ReceiveBroadcast(callback); }, - report: function(value){ WScript.Report(value); }, - leaving: function(){ WScript.Leaving(); } - } - }; - ${src} - `, 'crossthread'); - }, - broadcast: function (sab) { WScript.Broadcast(sab); }, - sleep: function (timeout) { WScript.Sleep(timeout); }, - getReport: function () { return WScript.GetReport(); }, - }, + createRealm: () => WScript.LoadScript('', 'samethread').$262, + global: this, + agent: { + start(src) { + WScript.LoadScript(` + $262 = { + agent: { + receiveBroadcast: WScript.ReceiveBroadcast, + report: WScript.Report, + leaving: WScript.Leaving, + monotonicNow: WScript.monotonicNow + } + }; + ${ src } + `, 'crossthread'); + }, + broadcast: WScript.Broadcast, + sleep: WScript.Sleep, + getReport: WScript.GetReport, + monotonicNow: WScript.monotonicNow + } }; -)====" \ No newline at end of file +)====" diff --git a/bin/ch/CMakeLists.txt b/bin/ch/CMakeLists.txt index 7e495f21041..012978877ff 100644 --- a/bin/ch/CMakeLists.txt +++ b/bin/ch/CMakeLists.txt @@ -1,3 +1,10 @@ +find_package (Python COMPONENTS Interpreter) +add_custom_target(dbg_controller_h + COMMAND ${Python_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/jstoc.py ${CMAKE_CURRENT_SOURCE_DIR}/DbgController.js controllerScript + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/jstoc.py ${CMAKE_CURRENT_SOURCE_DIR}/DbgController.js + ) + set(ch_source_files ch.cpp ChakraRtInterface.cpp @@ -17,6 +24,8 @@ endif() add_executable (ch ${ch_source_files}) +add_dependencies(ch dbg_controller_h) + set_target_properties(ch PROPERTIES POSITION_INDEPENDENT_CODE True @@ -30,6 +39,7 @@ endif() target_include_directories (ch PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_BINARY_DIR} ../ChakraCore ../../lib/Common ../../lib/Jsrt @@ -109,7 +119,6 @@ elseif(CC_TARGET_OS_OSX) endif() endif() - target_link_libraries (ch ${lib_target} ${CC_LTO_ENABLED} diff --git a/bin/ch/ChakraRtInterface.cpp b/bin/ch/ChakraRtInterface.cpp index 5ce6f60a714..bab1e7bc18e 100644 --- a/bin/ch/ChakraRtInterface.cpp +++ b/bin/ch/ChakraRtInterface.cpp @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #include "stdafx.h" @@ -78,12 +79,20 @@ bool ChakraRTInterface::LoadChakraDll(ArgInfo* argInfo, HINSTANCE *outLibrary) m_jsApiHooks.pfJsrtCreateRuntime = (JsAPIHooks::JsrtCreateRuntimePtr)GetChakraCoreSymbol(library, "JsCreateRuntime"); m_jsApiHooks.pfJsrtCreateContext = (JsAPIHooks::JsrtCreateContextPtr)GetChakraCoreSymbol(library, "JsCreateContext"); m_jsApiHooks.pfJsrtSetObjectBeforeCollectCallback = (JsAPIHooks::JsrtSetObjectBeforeCollectCallbackPtr)GetChakraCoreSymbol(library, "JsSetObjectBeforeCollectCallback"); + m_jsApiHooks.pfJsrtSetRuntimeDomWrapperTracingCallbacks = (JsAPIHooks::JsrtSetRuntimeDomWrapperTracingCallbacksPtr)GetChakraCoreSymbol(library, "JsSetRuntimeDomWrapperTracingCallbacks"); m_jsApiHooks.pfJsrtSetRuntimeMemoryLimit = (JsAPIHooks::JsrtSetRuntimeMemoryLimitPtr)GetChakraCoreSymbol(library, "JsSetRuntimeMemoryLimit"); m_jsApiHooks.pfJsrtSetCurrentContext = (JsAPIHooks::JsrtSetCurrentContextPtr)GetChakraCoreSymbol(library, "JsSetCurrentContext"); m_jsApiHooks.pfJsrtGetCurrentContext = (JsAPIHooks::JsrtGetCurrentContextPtr)GetChakraCoreSymbol(library, "JsGetCurrentContext"); m_jsApiHooks.pfJsrtDisposeRuntime = (JsAPIHooks::JsrtDisposeRuntimePtr)GetChakraCoreSymbol(library, "JsDisposeRuntime"); m_jsApiHooks.pfJsrtCreateObject = (JsAPIHooks::JsrtCreateObjectPtr)GetChakraCoreSymbol(library, "JsCreateObject"); m_jsApiHooks.pfJsrtCreateExternalObject = (JsAPIHooks::JsrtCreateExternalObjectPtr)GetChakraCoreSymbol(library, "JsCreateExternalObject"); + m_jsApiHooks.pfJsrtGetArrayForEachFunction = (JsAPIHooks::JsrtGetArrayForEachFunctionPtr)GetChakraCoreSymbol(library, "JsGetArrayForEachFunction");; + m_jsApiHooks.pfJsrtGetArrayKeysFunction = (JsAPIHooks::JsrtGetArrayKeysFunctionPtr)GetChakraCoreSymbol(library, "JsGetArrayKeysFunction");; + m_jsApiHooks.pfJsrtGetArrayValuesFunction = (JsAPIHooks::JsrtGetArrayValuesFunctionPtr)GetChakraCoreSymbol(library, "JsGetArrayValuesFunction");; + m_jsApiHooks.pfJsrtGetArrayEntriesFunction = (JsAPIHooks::JsrtGetArrayEntriesFunctionPtr)GetChakraCoreSymbol(library, "JsGetArrayEntriesFunction");; + m_jsApiHooks.pfJsrtGetPropertyIdSymbolIterator = (JsAPIHooks::JsrtGetPropertyIdSymbolIteratorPtr)GetChakraCoreSymbol(library, "JsGetPropertyIdSymbolIterator");; + m_jsApiHooks.pfJsrtGetErrorPrototype = (JsAPIHooks::JsrtGetErrorPrototypePtr)GetChakraCoreSymbol(library, "JsGetErrorPrototype");; + m_jsApiHooks.pfJsrtGetIteratorPrototype = (JsAPIHooks::JsrtGetIteratorPrototypePtr)GetChakraCoreSymbol(library, "JsGetIteratorPrototype");; m_jsApiHooks.pfJsrtCreateFunction = (JsAPIHooks::JsrtCreateFunctionPtr)GetChakraCoreSymbol(library, "JsCreateFunction"); m_jsApiHooks.pfJsrtCreateNamedFunction = (JsAPIHooks::JsCreateNamedFunctionPtr)GetChakraCoreSymbol(library, "JsCreateNamedFunction"); m_jsApiHooks.pfJsrtSetProperty = (JsAPIHooks::JsrtSetPropertyPtr)GetChakraCoreSymbol(library, "JsSetProperty"); @@ -105,6 +114,7 @@ bool ChakraRTInterface::LoadChakraDll(ArgInfo* argInfo, HINSTANCE *outLibrary) m_jsApiHooks.pfJsrtDoubleToNumber = (JsAPIHooks::JsrtDoubleToNumberPtr)GetChakraCoreSymbol(library, "JsDoubleToNumber"); m_jsApiHooks.pfJsrtGetExternalData = (JsAPIHooks::JsrtGetExternalDataPtr)GetChakraCoreSymbol(library, "JsGetExternalData"); m_jsApiHooks.pfJsrtSetExternalData = (JsAPIHooks::JsrtSetExternalDataPtr)GetChakraCoreSymbol(library, "JsSetExternalData"); + m_jsApiHooks.pfJsrtCloneObject = (JsAPIHooks::JsrtCloneObjectPtr)GetChakraCoreSymbol(library, "JsCloneObject"); m_jsApiHooks.pfJsrtCreateArray = (JsAPIHooks::JsrtCreateArrayPtr)GetChakraCoreSymbol(library, "JsCreateArray"); m_jsApiHooks.pfJsrtCreateArrayBuffer = (JsAPIHooks::JsrtCreateArrayBufferPtr)GetChakraCoreSymbol(library, "JsCreateArrayBuffer"); m_jsApiHooks.pfJsrtCreateSharedArrayBufferWithSharedContent = (JsAPIHooks::JsrtCreateSharedArrayBufferWithSharedContentPtr)GetChakraCoreSymbol(library, "JsCreateSharedArrayBufferWithSharedContent"); @@ -113,12 +123,14 @@ bool ChakraRTInterface::LoadChakraDll(ArgInfo* argInfo, HINSTANCE *outLibrary) m_jsApiHooks.pfJsrtGetArrayBufferStorage = (JsAPIHooks::JsrtGetArrayBufferStoragePtr)GetChakraCoreSymbol(library, "JsGetArrayBufferStorage"); m_jsApiHooks.pfJsrtHasException = (JsAPIHooks::JsrtHasExceptionPtr)GetChakraCoreSymbol(library, "JsHasException"); m_jsApiHooks.pfJsrtSetException = (JsAPIHooks::JsrtSetExceptionPtr)GetChakraCoreSymbol(library, "JsSetException"); + m_jsApiHooks.pfJsrtGetAndClearExceptionWithMetadata = (JsAPIHooks::JsrtGetAndClearExceptiopnWithMetadataPtr)GetChakraCoreSymbol(library, "JsGetAndClearExceptionWithMetadata"); m_jsApiHooks.pfJsrtGetAndClearException = (JsAPIHooks::JsrtGetAndClearExceptiopnPtr)GetChakraCoreSymbol(library, "JsGetAndClearException"); m_jsApiHooks.pfJsrtCreateError = (JsAPIHooks::JsrtCreateErrorPtr)GetChakraCoreSymbol(library, "JsCreateError"); m_jsApiHooks.pfJsrtGetRuntime = (JsAPIHooks::JsrtGetRuntimePtr)GetChakraCoreSymbol(library, "JsGetRuntime"); m_jsApiHooks.pfJsrtRelease = (JsAPIHooks::JsrtReleasePtr)GetChakraCoreSymbol(library, "JsRelease"); m_jsApiHooks.pfJsrtAddRef = (JsAPIHooks::JsrtAddRefPtr)GetChakraCoreSymbol(library, "JsAddRef"); m_jsApiHooks.pfJsrtGetValueType = (JsAPIHooks::JsrtGetValueType)GetChakraCoreSymbol(library, "JsGetValueType"); + m_jsApiHooks.pfJsrtGetIndexedProperty = (JsAPIHooks::JsrtGetIndexedPropertyPtr)GetChakraCoreSymbol(library, "JsGetIndexedProperty"); m_jsApiHooks.pfJsrtSetIndexedProperty = (JsAPIHooks::JsrtSetIndexedPropertyPtr)GetChakraCoreSymbol(library, "JsSetIndexedProperty"); m_jsApiHooks.pfJsrtSetPromiseContinuationCallback = (JsAPIHooks::JsrtSetPromiseContinuationCallbackPtr)GetChakraCoreSymbol(library, "JsSetPromiseContinuationCallback"); m_jsApiHooks.pfJsrtSetHostPromiseRejectionTracker = (JsAPIHooks::JsrtSetHostPromiseRejectionTrackerPtr)GetChakraCoreSymbol(library, "JsSetHostPromiseRejectionTracker"); @@ -160,6 +172,10 @@ bool ChakraRTInterface::LoadChakraDll(ArgInfo* argInfo, HINSTANCE *outLibrary) m_jsApiHooks.pfJsrtSerializeParserState = (JsAPIHooks::JsrtSerializeParserState)GetChakraCoreSymbol(library, "JsSerializeParserState"); m_jsApiHooks.pfJsrtRunScriptWithParserState = (JsAPIHooks::JsrtRunScriptWithParserState)GetChakraCoreSymbol(library, "JsRunScriptWithParserState"); + m_jsApiHooks.pfJsrtQueueBackgroundParse_Experimental = (JsAPIHooks::JsrtQueueBackgroundParse_Experimental)GetChakraCoreSymbol(library, "JsQueueBackgroundParse_Experimental"); + m_jsApiHooks.pfJsrtDiscardBackgroundParse_Experimental = (JsAPIHooks::JsrtDiscardBackgroundParse_Experimental)GetChakraCoreSymbol(library, "JsDiscardBackgroundParse_Experimental"); + m_jsApiHooks.pfJsrtExecuteBackgroundParse_Experimental = (JsAPIHooks::JsrtExecuteBackgroundParse_Experimental)GetChakraCoreSymbol(library, "JsExecuteBackgroundParse_Experimental"); + m_jsApiHooks.pfJsrtTTDCreateRecordRuntime = (JsAPIHooks::JsrtTTDCreateRecordRuntimePtr)GetChakraCoreSymbol(library, "JsTTDCreateRecordRuntime"); m_jsApiHooks.pfJsrtTTDCreateReplayRuntime = (JsAPIHooks::JsrtTTDCreateReplayRuntimePtr)GetChakraCoreSymbol(library, "JsTTDCreateReplayRuntime"); m_jsApiHooks.pfJsrtTTDCreateContext = (JsAPIHooks::JsrtTTDCreateContextPtr)GetChakraCoreSymbol(library, "JsTTDCreateContext"); @@ -174,6 +190,23 @@ bool ChakraRTInterface::LoadChakraDll(ArgInfo* argInfo, HINSTANCE *outLibrary) m_jsApiHooks.pfJsrtTTDGetSnapTimeTopLevelEventMove = (JsAPIHooks::JsrtTTDGetSnapTimeTopLevelEventMovePtr)GetChakraCoreSymbol(library, "JsTTDGetSnapTimeTopLevelEventMove"); m_jsApiHooks.pfJsrtTTDMoveToTopLevelEvent = (JsAPIHooks::JsrtTTDMoveToTopLevelEventPtr)GetChakraCoreSymbol(library, "JsTTDMoveToTopLevelEvent"); m_jsApiHooks.pfJsrtTTDReplayExecution = (JsAPIHooks::JsrtTTDReplayExecutionPtr)GetChakraCoreSymbol(library, "JsTTDReplayExecution"); + m_jsApiHooks.pfJsrtVarSerializer = (JsAPIHooks::JsrtVarSerializerPtr)GetChakraCoreSymbol(library, "JsVarSerializer"); + m_jsApiHooks.pfJsrtVarSerializerSetTransferableVars = (JsAPIHooks::JsrtVarSerializerSetTransferableVarsPtr)GetChakraCoreSymbol(library, "JsVarSerializerSetTransferableVars"); + m_jsApiHooks.pfJsrtVarSerializerWriteValue = (JsAPIHooks::JsrtVarSerializerWriteValuePtr)GetChakraCoreSymbol(library, "JsVarSerializerWriteValue"); + m_jsApiHooks.pfJsrtVarSerializerReleaseData = (JsAPIHooks::JsrtVarSerializerReleaseDataPtr)GetChakraCoreSymbol(library, "JsVarSerializerReleaseData"); + m_jsApiHooks.pfJsrtVarSerializerFree = (JsAPIHooks::JsrtVarSerializerFreePtr)GetChakraCoreSymbol(library, "JsVarSerializerFree"); + m_jsApiHooks.pfJsrtVarDeserializer = (JsAPIHooks::JsrtVarDeserializerPtr)GetChakraCoreSymbol(library, "JsVarDeserializer"); + m_jsApiHooks.pfJsrtVarDeserializerSetTransferableVars = (JsAPIHooks::JsrtVarDeserializerSetTransferableVarsPtr)GetChakraCoreSymbol(library, "JsVarDeserializerSetTransferableVars"); + m_jsApiHooks.pfJsrtVarDeserializerReadValue = (JsAPIHooks::JsrtVarDeserializerReadValuePtr)GetChakraCoreSymbol(library, "JsVarDeserializerReadValue"); + m_jsApiHooks.pfJsrtVarDeserializerFree = (JsAPIHooks::JsrtVarDeserializerFreePtr)GetChakraCoreSymbol(library, "JsVarDeserializerFree"); + + m_jsApiHooks.pfJsrtDetachArrayBuffer = (JsAPIHooks::JsrtDetachArrayBufferPtr)GetChakraCoreSymbol(library, "JsDetachArrayBuffer"); + m_jsApiHooks.pfJsrtGetArrayBufferFreeFunction = (JsAPIHooks::JsrtGetArrayBufferFreeFunction)GetChakraCoreSymbol(library, "JsGetArrayBufferFreeFunction"); + m_jsApiHooks.pfJsrtExternalizeArrayBuffer = (JsAPIHooks::JsrtExternalizeArrayBufferPtr)GetChakraCoreSymbol(library, "JsExternalizeArrayBuffer"); + +#ifdef _WIN32 + m_jsApiHooks.pfJsrtConnectJITProcess = (JsAPIHooks::JsrtConnectJITProcess)GetChakraCoreSymbol(library, "JsConnectJITProcess"); +#endif #endif return true; diff --git a/bin/ch/ChakraRtInterface.h b/bin/ch/ChakraRtInterface.h index cbd23641e2e..7eb0cef3da6 100644 --- a/bin/ch/ChakraRtInterface.h +++ b/bin/ch/ChakraRtInterface.h @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #pragma once @@ -9,12 +10,20 @@ struct JsAPIHooks typedef JsErrorCode (WINAPI *JsrtCreateRuntimePtr)(JsRuntimeAttributes attributes, JsThreadServiceCallback threadService, JsRuntimeHandle *runtime); typedef JsErrorCode (WINAPI *JsrtCreateContextPtr)(JsRuntimeHandle runtime, JsContextRef *newContext); typedef JsErrorCode (WINAPI *JsrtSetObjectBeforeCollectCallbackPtr)(JsRef ref, void* callbackState, JsObjectBeforeCollectCallback objectBeforeCollectCallback); + typedef JsErrorCode(WINAPI *JsrtSetRuntimeDomWrapperTracingCallbacksPtr)(JsRuntimeHandle runtime, JsRef wrapperTracingState, JsDOMWrapperTracingCallback wrapperTracingCallback, JsDOMWrapperTracingDoneCallback wrapperTracingDoneCallback, JsDOMWrapperTracingEnterFinalPauseCallback enterFinalPauseCallback); typedef JsErrorCode (WINAPI *JsrtSetRuntimeMemoryLimitPtr)(JsRuntimeHandle runtime, size_t memoryLimit); typedef JsErrorCode (WINAPI *JsrtSetCurrentContextPtr)(JsContextRef context); typedef JsErrorCode (WINAPI *JsrtGetCurrentContextPtr)(JsContextRef* context); typedef JsErrorCode (WINAPI *JsrtDisposeRuntimePtr)(JsRuntimeHandle runtime); typedef JsErrorCode (WINAPI *JsrtCreateObjectPtr)(JsValueRef *object); typedef JsErrorCode (WINAPI *JsrtCreateExternalObjectPtr)(void* data, JsFinalizeCallback callback, JsValueRef *object); + typedef JsErrorCode (WINAPI *JsrtGetArrayForEachFunctionPtr)(JsValueRef *result); + typedef JsErrorCode (WINAPI *JsrtGetArrayKeysFunctionPtr)(JsValueRef *result); + typedef JsErrorCode (WINAPI *JsrtGetArrayValuesFunctionPtr)(JsValueRef *result); + typedef JsErrorCode (WINAPI *JsrtGetArrayEntriesFunctionPtr)(JsValueRef *result); + typedef JsErrorCode (WINAPI *JsrtGetPropertyIdSymbolIteratorPtr)(JsPropertyIdRef *propertyId); + typedef JsErrorCode (WINAPI *JsrtGetErrorPrototypePtr)(JsValueRef *result); + typedef JsErrorCode (WINAPI *JsrtGetIteratorPrototypePtr)(JsValueRef *result); typedef JsErrorCode (WINAPI *JsrtCreateFunctionPtr)(JsNativeFunction nativeFunction, void *callbackState, JsValueRef *function); typedef JsErrorCode (WINAPI *JsrtCreateEnhancedFunctionPtr)(JsEnhancedNativeFunction nativeFunction, JsValueRef metadata, void *callbackState, JsValueRef *function); typedef JsErrorCode (WINAPI *JsCreateNamedFunctionPtr)(JsValueRef name, JsNativeFunction nativeFunction, void *callbackState, JsValueRef *function); @@ -40,6 +49,7 @@ struct JsAPIHooks typedef JsErrorCode (WINAPI *JsrtDoubleToNumberPtr)(double doubleValue, JsValueRef* value); typedef JsErrorCode (WINAPI *JsrtGetExternalDataPtr)(JsValueRef object, void **data); typedef JsErrorCode (WINAPI *JsrtSetExternalDataPtr)(JsValueRef object, void *data); + typedef JsErrorCode(WINAPI *JsrtCloneObjectPtr)(JsValueRef object, JsValueRef *newObject); typedef JsErrorCode (WINAPI *JsrtCreateArrayPtr)(unsigned int length, JsValueRef *result); typedef JsErrorCode (WINAPI *JsrtCreateArrayBufferPtr)(unsigned int byteLength, JsValueRef *result); typedef JsErrorCode (WINAPI *JsrtCreateSharedArrayBufferWithSharedContentPtr)(JsSharedArrayBufferContentHandle sharedContent, JsValueRef *result); @@ -49,11 +59,13 @@ struct JsAPIHooks typedef JsErrorCode (WINAPI *JsrtCreateErrorPtr)(JsValueRef message, JsValueRef *error); typedef JsErrorCode (WINAPI *JsrtHasExceptionPtr)(bool *hasException); typedef JsErrorCode (WINAPI *JsrtSetExceptionPtr)(JsValueRef exception); + typedef JsErrorCode (WINAPI *JsrtGetAndClearExceptiopnWithMetadataPtr)(JsValueRef* metadata); typedef JsErrorCode (WINAPI *JsrtGetAndClearExceptiopnPtr)(JsValueRef* exception); typedef JsErrorCode (WINAPI *JsrtGetRuntimePtr)(JsContextRef context, JsRuntimeHandle *runtime); typedef JsErrorCode (WINAPI *JsrtReleasePtr)(JsRef ref, unsigned int* count); typedef JsErrorCode (WINAPI *JsrtAddRefPtr)(JsRef ref, unsigned int* count); typedef JsErrorCode (WINAPI *JsrtGetValueType)(JsValueRef value, JsValueType *type); + typedef JsErrorCode(WINAPI *JsrtGetIndexedPropertyPtr)(JsValueRef object, JsValueRef index, JsValueRef *value); typedef JsErrorCode (WINAPI *JsrtSetIndexedPropertyPtr)(JsValueRef object, JsValueRef index, JsValueRef value); typedef JsErrorCode (WINAPI *JsrtSetPromiseContinuationCallbackPtr)(JsPromiseContinuationCallback callback, void *callbackState); typedef JsErrorCode (WINAPI *JsrtSetHostPromiseRejectionTrackerPtr)(JsHostPromiseRejectionTrackerCallback callback, void *callbackState); @@ -92,6 +104,10 @@ struct JsAPIHooks typedef JsErrorCode(WINAPI *JsrtSerializeParserState)(JsValueRef script, JsValueRef *buffer, JsParseScriptAttributes parseAttributes); typedef JsErrorCode(WINAPI *JsrtRunScriptWithParserState)(JsValueRef script, JsSourceContext sourceContext, JsValueRef sourceUrl, JsParseScriptAttributes parseAttributes, JsValueRef parserState, JsValueRef *result); + + typedef JsErrorCode(WINAPI *JsrtQueueBackgroundParse_Experimental)(JsScriptContents* contents, DWORD* dwBgParseCookie); + typedef JsErrorCode(WINAPI *JsrtDiscardBackgroundParse_Experimental)(DWORD dwBgParseCookie, void* buffer, bool* callerOwnsBuffer); + typedef JsErrorCode(WINAPI *JsrtExecuteBackgroundParse_Experimental)(DWORD dwBgParseCookie, JsValueRef script, JsSourceContext sourceContext, WCHAR *url, JsParseScriptAttributes parseAttributes, JsValueRef parserState, JsValueRef *result); typedef JsErrorCode(WINAPI *JsrtTTDCreateRecordRuntimePtr)(JsRuntimeAttributes attributes, bool enableDebugging, size_t snapInterval, size_t snapHistoryLength, TTDOpenResourceStreamCallback openResourceStream, JsTTDWriteBytesToStreamCallback writeBytesToStream, JsTTDFlushAndCloseStreamCallback flushAndCloseStream, JsThreadServiceCallback threadService, JsRuntimeHandle *runtime); typedef JsErrorCode(WINAPI *JsrtTTDCreateReplayRuntimePtr)(JsRuntimeAttributes attributes, const char* infoUri, size_t infoUriCount, bool enableDebugging, TTDOpenResourceStreamCallback openResourceStream, JsTTDReadBytesFromStreamCallback readBytesFromStream, JsTTDFlushAndCloseStreamCallback flushAndCloseStream, JsThreadServiceCallback threadService, JsRuntimeHandle *runtime); @@ -108,15 +124,43 @@ struct JsAPIHooks typedef JsErrorCode(WINAPI *JsrtTTDMoveToTopLevelEventPtr)(JsRuntimeHandle runtimeHandle, JsTTDMoveMode moveMode, int64_t snapshotStartTime, int64_t eventTime); typedef JsErrorCode(WINAPI *JsrtTTDReplayExecutionPtr)(JsTTDMoveMode* moveMode, int64_t* rootEventTime); +#ifdef _WIN32 + typedef JsErrorCode(WINAPI *JsrtConnectJITProcess)(HANDLE processHandle, void* serverSecurityDescriptor, UUID connectionId); +#endif + + typedef JsErrorCode(WINAPI *JsrtVarSerializerPtr)(ReallocateBufferMemoryFunc reallocateBufferMemory, WriteHostObjectFunc writeHostObject, void * callbackState, JsVarSerializerHandle *serializerHandle); + typedef JsErrorCode(WINAPI *JsrtVarSerializerSetTransferableVarsPtr)(JsVarSerializerHandle serializerHandle, JsValueRef *transferableVars, size_t transferableVarsCount); + typedef JsErrorCode(WINAPI *JsrtVarSerializerWriteValuePtr)(JsVarSerializerHandle serializerHandle, JsValueRef rootObject); + typedef JsErrorCode(WINAPI *JsrtVarSerializerReleaseDataPtr)(JsVarSerializerHandle serializerHandle, byte** data, size_t *dataLength); + typedef JsErrorCode(WINAPI *JsrtVarSerializerFreePtr)(JsVarSerializerHandle serializerHandle); + + typedef JsErrorCode(WINAPI *JsrtVarDeserializerPtr)(void *data, size_t dataLength, ReadHostObjectFunc readHostObject, GetSharedArrayBufferFromIdFunc getSharedArrayBufferFromId, void* callbackState, JsVarDeserializerHandle *deserializerHandle); + typedef JsErrorCode(WINAPI *JsrtVarDeserializerSetTransferableVarsPtr)(JsVarDeserializerHandle deserializerHandle, JsValueRef *transferableVars, size_t transferableVarsCount); + typedef JsErrorCode(WINAPI *JsrtVarDeserializerReadValuePtr)(JsVarDeserializerHandle deserializerHandle, JsValueRef* value); + typedef JsErrorCode(WINAPI *JsrtVarDeserializerFreePtr)(JsVarDeserializerHandle deserializerHandle); + + typedef JsErrorCode(WINAPI *JsrtDetachArrayBufferPtr)(JsValueRef buffer); + typedef JsErrorCode(WINAPI* JsrtGetArrayBufferFreeFunction)(JsValueRef buffer, ArrayBufferFreeFn* freeFn); + typedef JsErrorCode(WINAPI* JsrtExternalizeArrayBufferPtr)(JsValueRef buffer); + JsrtCreateRuntimePtr pfJsrtCreateRuntime; JsrtCreateContextPtr pfJsrtCreateContext; JsrtSetObjectBeforeCollectCallbackPtr pfJsrtSetObjectBeforeCollectCallback; + JsrtSetRuntimeDomWrapperTracingCallbacksPtr pfJsrtSetRuntimeDomWrapperTracingCallbacks; JsrtSetRuntimeMemoryLimitPtr pfJsrtSetRuntimeMemoryLimit; JsrtSetCurrentContextPtr pfJsrtSetCurrentContext; JsrtGetCurrentContextPtr pfJsrtGetCurrentContext; JsrtDisposeRuntimePtr pfJsrtDisposeRuntime; JsrtCreateObjectPtr pfJsrtCreateObject; JsrtCreateExternalObjectPtr pfJsrtCreateExternalObject; + JsrtGetArrayForEachFunctionPtr pfJsrtGetArrayForEachFunction; + JsrtGetArrayKeysFunctionPtr pfJsrtGetArrayKeysFunction; + JsrtGetArrayValuesFunctionPtr pfJsrtGetArrayValuesFunction; + JsrtGetArrayEntriesFunctionPtr pfJsrtGetArrayEntriesFunction; + JsrtGetPropertyIdSymbolIteratorPtr pfJsrtGetPropertyIdSymbolIterator; + JsrtGetErrorPrototypePtr pfJsrtGetErrorPrototype; + JsrtGetIteratorPrototypePtr pfJsrtGetIteratorPrototype; + JsrtCreateFunctionPtr pfJsrtCreateFunction; JsrtCreateEnhancedFunctionPtr pfJsrtCreateEnhancedFunction; JsCreateNamedFunctionPtr pfJsrtCreateNamedFunction; @@ -145,6 +189,7 @@ struct JsAPIHooks JsrtDoubleToNumberPtr pfJsrtDoubleToNumber; JsrtGetExternalDataPtr pfJsrtGetExternalData; JsrtSetExternalDataPtr pfJsrtSetExternalData; + JsrtCloneObjectPtr pfJsrtCloneObject; JsrtCreateArrayPtr pfJsrtCreateArray; JsrtCreateArrayBufferPtr pfJsrtCreateArrayBuffer; JsrtCreateSharedArrayBufferWithSharedContentPtr pfJsrtCreateSharedArrayBufferWithSharedContent; @@ -154,11 +199,13 @@ struct JsAPIHooks JsrtCreateErrorPtr pfJsrtCreateError; JsrtHasExceptionPtr pfJsrtHasException; JsrtSetExceptionPtr pfJsrtSetException; + JsrtGetAndClearExceptiopnWithMetadataPtr pfJsrtGetAndClearExceptionWithMetadata; JsrtGetAndClearExceptiopnPtr pfJsrtGetAndClearException; JsrtGetRuntimePtr pfJsrtGetRuntime; JsrtReleasePtr pfJsrtRelease; JsrtAddRefPtr pfJsrtAddRef; JsrtGetValueType pfJsrtGetValueType; + JsrtGetIndexedPropertyPtr pfJsrtGetIndexedProperty; JsrtSetIndexedPropertyPtr pfJsrtSetIndexedProperty; JsrtSetPromiseContinuationCallbackPtr pfJsrtSetPromiseContinuationCallback; JsrtSetHostPromiseRejectionTrackerPtr pfJsrtSetHostPromiseRejectionTracker; @@ -195,6 +242,10 @@ struct JsAPIHooks JsrtSerializeParserState pfJsrtSerializeParserState; JsrtRunScriptWithParserState pfJsrtRunScriptWithParserState; + JsrtQueueBackgroundParse_Experimental pfJsrtQueueBackgroundParse_Experimental; + JsrtDiscardBackgroundParse_Experimental pfJsrtDiscardBackgroundParse_Experimental; + JsrtExecuteBackgroundParse_Experimental pfJsrtExecuteBackgroundParse_Experimental; + JsrtTTDCreateRecordRuntimePtr pfJsrtTTDCreateRecordRuntime; JsrtTTDCreateReplayRuntimePtr pfJsrtTTDCreateReplayRuntime; JsrtTTDCreateContextPtr pfJsrtTTDCreateContext; @@ -209,6 +260,24 @@ struct JsAPIHooks JsrtTTDGetSnapTimeTopLevelEventMovePtr pfJsrtTTDGetSnapTimeTopLevelEventMove; JsrtTTDMoveToTopLevelEventPtr pfJsrtTTDMoveToTopLevelEvent; JsrtTTDReplayExecutionPtr pfJsrtTTDReplayExecution; + + JsrtVarSerializerPtr pfJsrtVarSerializer; + JsrtVarSerializerSetTransferableVarsPtr pfJsrtVarSerializerSetTransferableVars; + JsrtVarSerializerWriteValuePtr pfJsrtVarSerializerWriteValue; + JsrtVarSerializerReleaseDataPtr pfJsrtVarSerializerReleaseData; + JsrtVarSerializerFreePtr pfJsrtVarSerializerFree; + + JsrtVarDeserializerPtr pfJsrtVarDeserializer; + JsrtVarDeserializerSetTransferableVarsPtr pfJsrtVarDeserializerSetTransferableVars; + JsrtVarDeserializerReadValuePtr pfJsrtVarDeserializerReadValue; + JsrtVarDeserializerFreePtr pfJsrtVarDeserializerFree; + + JsrtDetachArrayBufferPtr pfJsrtDetachArrayBuffer; + JsrtGetArrayBufferFreeFunction pfJsrtGetArrayBufferFreeFunction; + JsrtExternalizeArrayBufferPtr pfJsrtExternalizeArrayBuffer; +#ifdef _WIN32 + JsrtConnectJITProcess pfJsrtConnectJITProcess; +#endif }; #ifdef _WIN32 @@ -299,18 +368,6 @@ class ChakraRTInterface #endif } -#ifdef _WIN32 -#if ENABLE_NATIVE_CODEGEN - static void ConnectJITServer(HANDLE processHandle, void* serverSecurityDescriptor, UUID connectionId) - { - if (m_testHooksSetup && m_testHooks.pfnConnectJITServer != NULL) - { - m_testHooks.pfnConnectJITServer(processHandle, serverSecurityDescriptor, connectionId); - } - } -#endif -#endif - static void NotifyUnhandledException(PEXCEPTION_POINTERS exceptionInfo) { if (m_testHooksSetup && m_testHooks.pfnNotifyUnhandledException != NULL) @@ -327,12 +384,20 @@ class ChakraRTInterface static JsErrorCode WINAPI JsCreateRuntime(JsRuntimeAttributes attributes, JsThreadServiceCallback threadService, JsRuntimeHandle *runtime) { return HOOK_JS_API(CreateRuntime(attributes, threadService, runtime)); } static JsErrorCode WINAPI JsCreateContext(JsRuntimeHandle runtime, JsContextRef *newContext) { return HOOK_JS_API(CreateContext(runtime, newContext)); } static JsErrorCode WINAPI JsSetObjectBeforeCollectCallback(JsRef ref, void* callbackState, JsObjectBeforeCollectCallback objectBeforeCollectCallback) { return HOOK_JS_API(SetObjectBeforeCollectCallback(ref, callbackState, objectBeforeCollectCallback)); } + static JsErrorCode WINAPI JsSetRuntimeDomWrapperTracingCallbacks(JsRuntimeHandle runtime, JsRef wrapperTracingState, JsDOMWrapperTracingCallback wrapperTracingCallback, JsDOMWrapperTracingDoneCallback wrapperTracingDoneCallback, JsDOMWrapperTracingEnterFinalPauseCallback enterFinalPauseCallback) { return HOOK_JS_API(SetRuntimeDomWrapperTracingCallbacks(runtime, wrapperTracingState, wrapperTracingCallback, wrapperTracingDoneCallback, enterFinalPauseCallback)); } static JsErrorCode WINAPI JsSetRuntimeMemoryLimit(JsRuntimeHandle runtime, size_t memory) { return HOOK_JS_API(SetRuntimeMemoryLimit(runtime, memory)); } static JsErrorCode WINAPI JsSetCurrentContext(JsContextRef context) { return HOOK_JS_API(SetCurrentContext(context)); } static JsErrorCode WINAPI JsGetCurrentContext(JsContextRef* context) { return HOOK_JS_API(GetCurrentContext(context)); } static JsErrorCode WINAPI JsDisposeRuntime(JsRuntimeHandle runtime) { return HOOK_JS_API(DisposeRuntime(runtime)); } static JsErrorCode WINAPI JsCreateObject(JsValueRef *object) { return HOOK_JS_API(CreateObject(object)); } static JsErrorCode WINAPI JsCreateExternalObject(void *data, JsFinalizeCallback callback, JsValueRef *object) { return HOOK_JS_API(CreateExternalObject(data, callback, object)); } + static JsErrorCode WINAPI JsGetArrayForEachFunction(JsValueRef * result) { return HOOK_JS_API(GetArrayForEachFunction(result)); } + static JsErrorCode WINAPI JsGetArrayKeysFunction(JsValueRef * result) { return HOOK_JS_API(GetArrayKeysFunction(result)); } + static JsErrorCode WINAPI JsGetArrayValuesFunction(JsValueRef * result) { return HOOK_JS_API(GetArrayValuesFunction(result)); } + static JsErrorCode WINAPI JsGetArrayEntriesFunction(JsValueRef * result) { return HOOK_JS_API(GetArrayEntriesFunction(result)); } + static JsErrorCode WINAPI JsGetPropertyIdSymbolIterator(JsPropertyIdRef * propertyId) { return HOOK_JS_API(GetPropertyIdSymbolIterator(propertyId)); } + static JsErrorCode WINAPI JsGetErrorPrototype(JsValueRef * result) { return HOOK_JS_API(GetErrorPrototype(result)); } + static JsErrorCode WINAPI JsGetIteratorPrototype(JsValueRef * result) { return HOOK_JS_API(GetIteratorPrototype(result)); } static JsErrorCode WINAPI JsCreateFunction(JsNativeFunction nativeFunction, void *callbackState, JsValueRef *function) { return HOOK_JS_API(CreateFunction(nativeFunction, callbackState, function)); } static JsErrorCode WINAPI JsCreateEnhancedFunction(JsEnhancedNativeFunction nativeFunction, JsValueRef metadata, void *callbackState, JsValueRef *function) { return HOOK_JS_API(CreateEnhancedFunction(nativeFunction, metadata, callbackState, function)); } static JsErrorCode WINAPI JsCreateNamedFunction(JsValueRef name, JsNativeFunction nativeFunction, void *callbackState, JsValueRef *function) { return HOOK_JS_API(CreateNamedFunction(name, nativeFunction, callbackState, function)); } @@ -355,6 +420,7 @@ class ChakraRTInterface static JsErrorCode WINAPI JsDoubleToNumber(double doubleValue, JsValueRef* value) { return HOOK_JS_API(DoubleToNumber(doubleValue, value)); } static JsErrorCode WINAPI JsGetExternalData(JsValueRef object, void **data) { return HOOK_JS_API(GetExternalData(object, data)); } static JsErrorCode WINAPI JsSetExternalData(JsValueRef object, void *data) { return HOOK_JS_API(SetExternalData(object, data)); } + static JsErrorCode WINAPI JsCloneObject(JsValueRef object, JsValueRef *data) { return HOOK_JS_API(CloneObject(object, data)); } static JsErrorCode WINAPI JsCreateArray(unsigned int length, JsValueRef *result) { return HOOK_JS_API(CreateArray(length, result)); } static JsErrorCode WINAPI JsCreateArrayBuffer(unsigned int byteLength, JsValueRef *result) { return HOOK_JS_API(CreateArrayBuffer(byteLength, result)); } static JsErrorCode WINAPI JsCreateSharedArrayBufferWithSharedContent(JsSharedArrayBufferContentHandle sharedContent, JsValueRef *result) { return HOOK_JS_API(CreateSharedArrayBufferWithSharedContent(sharedContent, result)); } @@ -365,10 +431,12 @@ class ChakraRTInterface static JsErrorCode WINAPI JsHasException(bool *hasException) { return HOOK_JS_API(HasException(hasException)); } static JsErrorCode WINAPI JsSetException(JsValueRef exception) { return HOOK_JS_API(SetException(exception)); } static JsErrorCode WINAPI JsGetAndClearException(JsValueRef *exception) { return HOOK_JS_API(GetAndClearException(exception)); } + static JsErrorCode WINAPI JsGetAndClearExceptionWithMetadata(JsValueRef * metadata) { return HOOK_JS_API(GetAndClearExceptionWithMetadata(metadata)); } static JsErrorCode WINAPI JsGetRuntime(JsContextRef context, JsRuntimeHandle *runtime) { return HOOK_JS_API(GetRuntime(context, runtime)); } static JsErrorCode WINAPI JsRelease(JsRef ref, unsigned int* count) { return HOOK_JS_API(Release(ref, count)); } static JsErrorCode WINAPI JsAddRef(JsRef ref, unsigned int* count) { return HOOK_JS_API(AddRef(ref, count)); } static JsErrorCode WINAPI JsGetValueType(JsValueRef value, JsValueType *type) { return HOOK_JS_API(GetValueType(value, type)); } + static JsErrorCode WINAPI JsGetIndexedProperty(JsValueRef object, JsValueRef index, JsValueRef *value) { return HOOK_JS_API(GetIndexedProperty(object, index, value)); } static JsErrorCode WINAPI JsSetIndexedProperty(JsValueRef object, JsValueRef index, JsValueRef value) { return HOOK_JS_API(SetIndexedProperty(object, index, value)); } static JsErrorCode WINAPI JsSetPromiseContinuationCallback(JsPromiseContinuationCallback callback, void *callbackState) { return HOOK_JS_API(SetPromiseContinuationCallback(callback, callbackState)); } static JsErrorCode WINAPI JsSetHostPromiseRejectionTracker(JsHostPromiseRejectionTrackerCallback callback, void *callbackState) { return HOOK_JS_API(SetHostPromiseRejectionTracker(callback, callbackState)); } @@ -430,6 +498,28 @@ class ChakraRTInterface static JsErrorCode WINAPI JsSerializeParserState(JsValueRef script, JsValueRef *buffer, JsParseScriptAttributes parseAttributes) { return HOOK_JS_API(SerializeParserState(script, buffer, parseAttributes)); } static JsErrorCode WINAPI JsRunScriptWithParserState(JsValueRef script, JsSourceContext sourceContext, JsValueRef sourceUrl, JsParseScriptAttributes parseAttributes, JsValueRef parserState, JsValueRef * result) { return HOOK_JS_API(RunScriptWithParserState(script, sourceContext, sourceUrl, parseAttributes, parserState, result)); } + + static JsErrorCode WINAPI JsVarSerializer(ReallocateBufferMemoryFunc reallocateBufferMemory, WriteHostObjectFunc writeHostObject, void * callbackState, JsVarSerializerHandle *serializerHandle) { return HOOK_JS_API(VarSerializer(reallocateBufferMemory, writeHostObject, callbackState, serializerHandle)); } + static JsErrorCode WINAPI JsVarSerializerSetTransferableVars(JsVarSerializerHandle serializerHandle, JsValueRef *transferableVars, size_t transferableVarsCount) { return HOOK_JS_API(VarSerializerSetTransferableVars(serializerHandle, transferableVars, transferableVarsCount)); } + static JsErrorCode WINAPI JsVarSerializerWriteValue(JsVarSerializerHandle serializerHandle, JsValueRef rootObject) { return HOOK_JS_API(VarSerializerWriteValue(serializerHandle, rootObject)); } + static JsErrorCode WINAPI JsVarSerializerReleaseData(JsVarSerializerHandle serializerHandle, byte** data, size_t *dataLength) { return HOOK_JS_API(VarSerializerReleaseData(serializerHandle, data, dataLength)); } + static JsErrorCode WINAPI JsVarSerializerFree(JsVarSerializerHandle serializerHandle) { return HOOK_JS_API(VarSerializerFree(serializerHandle)); } + + static JsErrorCode WINAPI JsVarDeserializer(void *data, size_t dataLength, ReadHostObjectFunc readHostObject, GetSharedArrayBufferFromIdFunc getSharedArrayBufferFromId, void* callbackState, JsVarDeserializerHandle *deserializerHandle) { return HOOK_JS_API(VarDeserializer(data, dataLength, readHostObject, getSharedArrayBufferFromId, callbackState, deserializerHandle)); } + static JsErrorCode WINAPI JsVarDeserializerSetTransferableVars(JsVarDeserializerHandle deserializerHandle, JsValueRef* transferableVars, size_t transferableVarsCount) { return HOOK_JS_API(VarDeserializerSetTransferableVars(deserializerHandle, transferableVars, transferableVarsCount)); } + static JsErrorCode WINAPI JsVarDeserializerReadValue(JsVarDeserializerHandle deserializerHandle, JsValueRef* value) { return HOOK_JS_API(VarDeserializerReadValue(deserializerHandle, value)); } + static JsErrorCode WINAPI JsVarDeserializerFree(JsVarDeserializerHandle deserializerHandle) { return HOOK_JS_API(VarDeserializerFree(deserializerHandle)); } + + static JsErrorCode WINAPI JsDetachArrayBuffer(JsValueRef buffer) { return HOOK_JS_API(DetachArrayBuffer(buffer)); } + static JsErrorCode WINAPI JsQueueBackgroundParse_Experimental(JsScriptContents* contents, DWORD* dwBgParseCookie) { return HOOK_JS_API(QueueBackgroundParse_Experimental)(contents, dwBgParseCookie); } + static JsErrorCode WINAPI JsDiscardBackgroundParse_Experimental(DWORD dwBgParseCookie, void* buffer, bool* callerOwnsBuffer) { return HOOK_JS_API(DiscardBackgroundParse_Experimental(dwBgParseCookie, buffer, callerOwnsBuffer)); } + static JsErrorCode WINAPI JsExecuteBackgroundParse_Experimental(DWORD dwBgParseCookie, JsValueRef script, JsSourceContext sourceContext, WCHAR *url, JsParseScriptAttributes parseAttributes, JsValueRef parserState, JsValueRef *result) { return HOOK_JS_API(ExecuteBackgroundParse_Experimental(dwBgParseCookie, script, sourceContext, url, parseAttributes, parserState, result)); } +#ifdef _WIN32 + static JsErrorCode WINAPI JsConnectJITProcess(HANDLE processHandle, void* serverSecurityDescriptor, UUID connectionId) { return HOOK_JS_API(ConnectJITProcess(processHandle, serverSecurityDescriptor, connectionId)); } +#endif + + static JsErrorCode WINAPI JsGetArrayBufferFreeFunction(JsValueRef buffer, ArrayBufferFreeFn* freeFn) { return HOOK_JS_API(GetArrayBufferFreeFunction(buffer, freeFn)); } + static JsErrorCode WINAPI JsExternalizeArrayBuffer(JsValueRef buffer) { return HOOK_JS_API(ExternalizeArrayBuffer(buffer)); } }; class AutoRestoreContext diff --git a/bin/ch/DbgController.js b/bin/ch/DbgController.js index 9f3744bef8c..09ec812e652 100644 --- a/bin/ch/DbgController.js +++ b/bin/ch/DbgController.js @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- @@ -62,6 +63,8 @@ var controllerObj = (function () { // Discard all known globals to reduce baseline noise. [ "#__proto__", + "globalThis", + "AggregateError", "Array", "ArrayBuffer", "Atomics", @@ -156,9 +159,10 @@ var controllerObj = (function () { function filterFileName(fileName) { try { var index = fileName.lastIndexOf("\\"); - if (index >= 0) { - return fileName.substring(index + 1); + if (index === -1) { + index = fileName.lastIndexOf("/"); } + return fileName.substring(index + 1); } catch (ex) { } return ""; } diff --git a/bin/ch/Debugger.cpp b/bin/ch/Debugger.cpp index 95655b57f09..5e938c7a203 100644 --- a/bin/ch/Debugger.cpp +++ b/bin/ch/Debugger.cpp @@ -1,8 +1,11 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #include "stdafx.h" +#include "Helpers.h" +#include "PlatformAgnostic/ChakraICU.h" #define MAX_BASELINE_SIZE (1024*1024*200) @@ -303,63 +306,34 @@ bool Debugger::InstallDebugCallbacks(JsValueRef hostDebugObject) bool Debugger::SetBaseline() { -#ifdef _WIN32 - LPSTR script = nullptr; - FILE *file = nullptr; - size_t numChars = 0; - HRESULT hr = S_OK; - - if (_wfopen_s(&file, HostConfigFlags::flags.dbgbaseline, _u("rb")) != 0) - { - Helpers::LogError(_u("opening baseline file '%s'"), HostConfigFlags::flags.dbgbaseline); - } + const char* script = nullptr; + char* fileName = nullptr; + JsValueRef scriptRef = JS_INVALID_REFERENCE; + HRESULT hr = E_FAIL; + UINT lengthBytes = 0; - if(file != nullptr) + if (SUCCEEDED(WideStringToNarrowDynamic(HostConfigFlags::flags.dbgbaseline, &fileName))) { - long fileSize = _filelength(_fileno(file)); - if (0 <= fileSize && fileSize <= MAX_BASELINE_SIZE) - { - script = new char[(size_t)fileSize + 1]; - - numChars = fread(script, sizeof(script[0]), fileSize, file); - if (numChars == (size_t)fileSize) - { - script[numChars] = '\0'; - - JsValueRef wideScriptRef; - IfJsErrorFailLogAndHR(ChakraRTInterface::JsCreateString( - script, strlen(script), &wideScriptRef)); - - this->CallFunctionNoResult("SetBaseline", wideScriptRef); - } - else - { - Helpers::LogError(_u("failed to read from baseline file")); - IfFailGo(E_FAIL); - } - } - else + Helpers::LoadScriptFromFile(fileName, script, &lengthBytes); + if (script && lengthBytes < MAX_BASELINE_SIZE && + ChakraRTInterface::JsCreateString(script, strlen(script), &scriptRef) == JsNoError) { - Helpers::LogError(_u("baseline file too large")); - IfFailGo(E_FAIL); + this->CallFunctionNoResult("SetBaseline", scriptRef); + hr = S_OK; } } -Error: + if (script) { delete[] script; } - if (file) + if (hr != S_OK) { - fclose(file); + Helpers::LogError(_u("Failed to load & process debug baseline: %s"), HostConfigFlags::flags.dbgbaseline); } return hr == S_OK; -#else - // xplat-todo: Implement this on Linux - return false; -#endif } bool Debugger::SetInspectMaxStringLength() @@ -427,7 +401,14 @@ bool Debugger::DumpFunctionPosition(JsValueRef functionPosition) bool Debugger::StartDebugging(JsRuntimeHandle runtime) { - IfJsrtErrorFailLogAndRetFalse(ChakraRTInterface::JsDiagStartDebugging(runtime, Debugger::DebugEventHandler, this)); + JsErrorCode errorCode = ChakraRTInterface::JsDiagStartDebugging(runtime, Debugger::DebugEventHandler, this); + + if (errorCode == JsErrorCode::JsErrorDiagAlreadyInDebugMode) + { + return false; + } + + IfJsrtErrorFailLogAndRetFalse(errorCode); this->m_isDetached = false; @@ -437,7 +418,15 @@ bool Debugger::StartDebugging(JsRuntimeHandle runtime) bool Debugger::StopDebugging(JsRuntimeHandle runtime) { void* callbackState = nullptr; - IfJsrtErrorFailLogAndRetFalse(ChakraRTInterface::JsDiagStopDebugging(runtime, &callbackState)); + + JsErrorCode errorCode = ChakraRTInterface::JsDiagStopDebugging(runtime, &callbackState); + + if (errorCode == JsErrorCode::JsErrorDiagNotInDebugMode) + { + return false; + } + + IfJsrtErrorFailLogAndRetFalse(errorCode); Assert(callbackState == this); diff --git a/bin/ch/Helpers.cpp b/bin/ch/Helpers.cpp index ec667f49350..f68d5790698 100644 --- a/bin/ch/Helpers.cpp +++ b/bin/ch/Helpers.cpp @@ -155,7 +155,7 @@ uint ConcatPath(LPCSTR filenameLeft, uint posPathSep, LPCSTR filenameRight, char return totalLength; } -HRESULT Helpers::LoadScriptFromFile(LPCSTR filenameToLoad, LPCSTR& contents, UINT* lengthBytesOut /*= nullptr*/) +HRESULT Helpers::LoadScriptFromFile(LPCSTR filenameToLoad, LPCSTR& contents, UINT* lengthBytesOut /*= nullptr*/, std::string* fullPath /*= nullptr*/, bool shouldMute /*=false */) { static char sHostApplicationPathBuffer[MAX_URI_LENGTH]; static uint sHostApplicationPathBufferLength = (uint) -1; @@ -169,7 +169,7 @@ HRESULT Helpers::LoadScriptFromFile(LPCSTR filenameToLoad, LPCSTR& contents, UIN FILE * file = NULL; size_t bufferLength = 0; - LPCSTR filename = filenameToLoad; + LPCSTR filename = fullPath == nullptr ? filenameToLoad : LPCSTR(fullPath->c_str()); if (sHostApplicationPathBufferLength == (uint)-1) { // consider incoming filename as the host app and base its' path for others @@ -188,7 +188,7 @@ HRESULT Helpers::LoadScriptFromFile(LPCSTR filenameToLoad, LPCSTR& contents, UIN } sHostApplicationPathBuffer[sHostApplicationPathBufferLength] = char(0); } - else if (filename[0] != '/' && filename[0] != '\\') // make sure it's not a full path + else if (filename[0] != '/' && filename[0] != '\\' && fullPath == nullptr) // make sure it's not a full path { // concat host path and filename uint len = ConcatPath(sHostApplicationPathBuffer, sHostApplicationPathBufferLength, @@ -216,7 +216,7 @@ HRESULT Helpers::LoadScriptFromFile(LPCSTR filenameToLoad, LPCSTR& contents, UIN // etc. if (fopen_s(&file, filename, "rb") != 0) { - if (!HostConfigFlags::flags.MuteHostErrorMsgIsEnabled) + if (!HostConfigFlags::flags.MuteHostErrorMsgIsEnabled && !shouldMute) { #ifdef _WIN32 DWORD lastError = GetLastError(); @@ -388,8 +388,6 @@ LPCWSTR Helpers::JsErrorCodeToString(JsErrorCode jsErrorCode) case JsErrorAlreadyDebuggingContext: return _u("JsErrorAlreadyDebuggingContext"); case JsErrorAlreadyProfilingContext: return _u("JsErrorAlreadyProfilingContext"); case JsErrorIdleNotEnabled: return _u("JsErrorIdleNotEnabled"); - case JsCannotSetProjectionEnqueueCallback: return _u("JsCannotSetProjectionEnqueueCallback"); - case JsErrorCannotStartProjection: return _u("JsErrorCannotStartProjection"); case JsErrorInObjectBeforeCollectCallback: return _u("JsErrorInObjectBeforeCollectCallback"); case JsErrorObjectNotInspectable: return _u("JsErrorObjectNotInspectable"); case JsErrorPropertyNotSymbol: return _u("JsErrorPropertyNotSymbol"); diff --git a/bin/ch/Helpers.h b/bin/ch/Helpers.h index 83c8bdff37a..fe01d35ed5f 100644 --- a/bin/ch/Helpers.h +++ b/bin/ch/Helpers.h @@ -7,7 +7,7 @@ class Helpers { public : - static HRESULT LoadScriptFromFile(LPCSTR filename, LPCSTR& contents, UINT* lengthBytesOut = nullptr); + static HRESULT LoadScriptFromFile(LPCSTR filename, LPCSTR& contents, UINT* lengthBytesOut = nullptr, std::string* fullPath = nullptr, bool shouldMute = false); static LPCWSTR JsErrorCodeToString(JsErrorCode jsErrorCode); static void LogError(__in __nullterminated const char16 *msg, ...); static HRESULT LoadBinaryFile(LPCSTR filename, LPCSTR& contents, UINT& lengthBytes, bool printFileOpenError = true); diff --git a/bin/ch/HostConfigFlagsList.h b/bin/ch/HostConfigFlagsList.h index ea4271eb8f6..2e07b6704aa 100644 --- a/bin/ch/HostConfigFlagsList.h +++ b/bin/ch/HostConfigFlagsList.h @@ -17,8 +17,9 @@ FLAG(bool, IgnoreScriptErrorCode, "Don't return error code on script e FLAG(bool, MuteHostErrorMsg, "Mute host error output, e.g. module load failures", false) FLAG(bool, TraceHostCallback, "Output traces for host callbacks", false) FLAG(bool, Test262, "load Test262 harness", false) +FLAG(bool, Module, "load the script as a module", false) FLAG(bool, TrackRejectedPromises, "Enable tracking of unhandled promise rejections", false) FLAG(BSTR, CustomConfigFile, "Custom config file to be used to pass in additional flags to Chakra", NULL) -FLAG(bool, ExecuteWithBgParse, "[No-op] Load script with bgparse (note: requires bgparse to be on as well)", false) +FLAG(bool, ExecuteWithBgParse, "Load script with bgparse (note: requires bgparse and parserstatecache be on as well)", false) #undef FLAG #endif diff --git a/bin/ch/JITProcessManager.cpp b/bin/ch/JITProcessManager.cpp index 3cf50ddd33c..ec49c9aa61d 100644 --- a/bin/ch/JITProcessManager.cpp +++ b/bin/ch/JITProcessManager.cpp @@ -68,7 +68,7 @@ HRESULT JITProcessManager::CreateServerProcess(int argc, __in_ecount(argc) LPWST #pragma warning(suppress: 6386) // buffer overrun #ifdef ENABLE_DEBUG_CONFIG_OPTIONS - hr = StringCchCopyW(cmdLine, cmdLineSize, _u("ch.exe -OOPCFGRegistration- -CheckOpHelpers -jitserver:")); + hr = StringCchCopyW(cmdLine, cmdLineSize, _u("ch.exe -CheckOpHelpers -jitserver:")); #else hr = StringCchCopyW(cmdLine, cmdLineSize, _u("ch.exe -jitserver:")); #endif diff --git a/bin/ch/MessageQueue.h b/bin/ch/MessageQueue.h index bc350806ec8..ea2c91943f7 100644 --- a/bin/ch/MessageQueue.h +++ b/bin/ch/MessageQueue.h @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #pragma once @@ -28,15 +29,15 @@ class MessageBase template class SortedList { - template + template struct DListNode { - T data; - DListNode* prev; - DListNode* next; + U data; + DListNode* prev; + DListNode* next; public: - DListNode(const T& data) : + DListNode(const U& data) : data(data), prev(nullptr), next(nullptr) diff --git a/bin/ch/WScriptJsrt.cpp b/bin/ch/WScriptJsrt.cpp index 4b4fbb979d1..eb4db4cd433 100644 --- a/bin/ch/WScriptJsrt.cpp +++ b/bin/ch/WScriptJsrt.cpp @@ -1,9 +1,20 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft Corporation and contributors. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #include "stdafx.h" +#include "PlatformAgnostic/ChakraICU.h" +#if defined(__APPLE__) +#ifdef ctime +#undef ctime +#define CTIME_UNDEFED +#endif +#endif #include +#include +#include +#include #if defined(_X86_) || defined(_M_IX86) #define CPU_ARCH_TEXT "x86" @@ -44,9 +55,22 @@ #define INTL_LIBRARY_TEXT "" #endif +struct ArrayBufferTransferInfo { + byte* buffer; + uint length; + ArrayBufferFreeFn freeFn; +}; +struct SerializerBlob +{ + void *data; + size_t dataLength; + std::vector transferableArrays; +}; + MessageQueue* WScriptJsrt::messageQueue = nullptr; std::map WScriptJsrt::moduleRecordMap; std::map WScriptJsrt::moduleDirMap; +std::map WScriptJsrt::moduleErrMap; std::map WScriptJsrt::scriptDirMap; DWORD_PTR WScriptJsrt::sourceContext = 0; @@ -223,7 +247,6 @@ JsValueRef WScriptJsrt::LoadScriptFileHelper(JsValueRef callee, JsValueRef *argu hr = Helpers::LoadScriptFromFile(*fileName, fileContent); if (FAILED(hr)) { - // check if have it registered fprintf(stderr, "Couldn't load file '%s'\n", fileName.GetString()); IfJsrtErrorSetGo(ChakraRTInterface::JsGetUndefinedValue(&returnValue)); return returnValue; @@ -234,19 +257,237 @@ JsValueRef WScriptJsrt::LoadScriptFileHelper(JsValueRef callee, JsValueRef *argu } Error: + + SetExceptionIf(errorCode, errorMessage); + return returnValue; +} + +void WScriptJsrt::SetExceptionIf(JsErrorCode errorCode, LPCWSTR errorMessage) +{ if (errorCode != JsNoError) { - JsValueRef errorObject; - JsValueRef errorMessageString; + // If the exception is already is set - no need to create a new exception. + bool hasException = false; + if (!(ChakraRTInterface::JsHasException(&hasException) == JsNoError && hasException)) + { + JsValueRef errorObject; + JsValueRef errorMessageString; + + if (wcscmp(errorMessage, _u("")) == 0) + { + errorMessage = ConvertErrorCodeToMessage(errorCode); + } + + ERROR_MESSAGE_TO_STRING(errCode, errorMessage, errorMessageString); - if (wcscmp(errorMessage, _u("")) == 0) { - errorMessage = ConvertErrorCodeToMessage(errorCode); + ChakraRTInterface::JsCreateError(errorMessageString, &errorObject); + ChakraRTInterface::JsSetException(errorObject); } + } +} + +byte * CHAKRA_CALLBACK ReallocateBufferMemory(void * state, byte *oldBuffer, size_t newSize, size_t *allocatedSize) +{ + void* data = realloc((void*)oldBuffer, newSize); + if (allocatedSize) + { + *allocatedSize = newSize; + } + return (byte*)data; +} - ERROR_MESSAGE_TO_STRING(errCode, errorMessage, errorMessageString); +bool CHAKRA_CALLBACK WriteHostObject(void * state, JsValueRef data) +{ + // Not implemented + return true; +} - ChakraRTInterface::JsCreateError(errorMessageString, &errorObject); - ChakraRTInterface::JsSetException(errorObject); +JsValueRef __stdcall WScriptJsrt::SerializeObject(JsValueRef callee, bool isConstructCall, JsValueRef *arguments, unsigned short argumentCount, void *callbackState) +{ + JsErrorCode errorCode = JsNoError; + LPCWSTR errorMessage = _u(""); + JsValueRef returnValue = JS_INVALID_REFERENCE; + HRESULT hr = S_OK; + JsValueRef *transferVarsArray = nullptr; + int transferVarsCount = 0; + if (argumentCount < 2) + { + errorCode = JsErrorInvalidArgument; + errorMessage = _u("Need an argument for WScript.Serialize"); + } + else + { + JsValueRef rootObject = arguments[1]; + JsValueRef transferArray = nullptr; + if (argumentCount > 2) + { + JsValueType argumentType = JsUndefined; + transferArray = arguments[2]; + IfJsrtErrorSetGo(ChakraRTInterface::JsGetValueType(transferArray, &argumentType)); + + if (argumentType != JsUndefined) + { + if (argumentType != JsArray) + { + errorCode = JsErrorInvalidArgument; + goto Error; + } + + JsPropertyIdRef lengthPropId; + JsValueRef arrayLengthObj = JS_INVALID_REFERENCE; + int arrayLength = 0; + IfJsrtErrorSetGo(CreatePropertyIdFromString("length", &lengthPropId)); + IfJsrtErrorSetGo(ChakraRTInterface::JsGetProperty(transferArray, lengthPropId, &arrayLengthObj)); + IfJsrtErrorSetGo(ChakraRTInterface::JsNumberToInt(arrayLengthObj, &arrayLength)); + if (arrayLength > 0) + { + transferVarsArray = new JsValueRef[arrayLength]; + if (transferVarsArray == nullptr) + { + errorCode = JsErrorOutOfMemory; + goto Error; + } + + for (int i = 0; i < arrayLength; i++) + { + JsValueRef index; + JsValueRef value = JS_INVALID_REFERENCE; + JsValueType jsType = JsUndefined; + + IfJsrtErrorSetGo(ChakraRTInterface::JsIntToNumber(i, &index)); + IfJsrtErrorSetGo(ChakraRTInterface::JsGetIndexedProperty(transferArray, index, &value)); + IfJsrtErrorSetGo(ChakraRTInterface::JsGetValueType(value, &jsType)); + if (jsType == JsArrayBuffer) + { + *(transferVarsArray + transferVarsCount) = value; + transferVarsCount++; + } + } + } + } + } + + JsVarSerializerHandle serializerHandle = nullptr; + + // This memory will be claimed at WScriptJsrt::Deserialize. + SerializerBlob *blob = new SerializerBlob(); + IfJsrtErrorSetGo(ChakraRTInterface::JsVarSerializer(ReallocateBufferMemory, WriteHostObject, nullptr, &serializerHandle)); + IfJsrtErrorSetGo(ChakraRTInterface::JsVarSerializerSetTransferableVars(serializerHandle, transferVarsArray, transferVarsCount)); + IfJsrtErrorSetGo(ChakraRTInterface::JsVarSerializerWriteValue(serializerHandle, rootObject)); + IfJsrtErrorSetGo(ChakraRTInterface::JsVarSerializerReleaseData(serializerHandle, (byte**)&blob->data, &blob->dataLength)); + + for (int i = 0; i < transferVarsCount; i++) + { + JsValueRef arrayBuffer = transferVarsArray[i]; + ArrayBufferTransferInfo bufferInfo; + IfJsrtErrorSetGo(ChakraRTInterface::JsGetArrayBufferStorage(arrayBuffer, &bufferInfo.buffer, &bufferInfo.length)); + IfJsrtErrorSetGo(ChakraRTInterface::JsExternalizeArrayBuffer(arrayBuffer)); + IfJsrtErrorSetGo(ChakraRTInterface::JsGetArrayBufferFreeFunction(arrayBuffer, &bufferInfo.freeFn)); + blob->transferableArrays.push_back(bufferInfo); + IfJsrtErrorSetGo(ChakraRTInterface::JsDetachArrayBuffer(arrayBuffer)); + } + + errorCode = ChakraRTInterface::JsCreateExternalArrayBuffer((void*)blob, sizeof(SerializerBlob), nullptr, nullptr, &returnValue); + IfJsrtErrorSetGo(ChakraRTInterface::JsVarSerializerFree(serializerHandle)); + } +Error: + SetExceptionIf(errorCode, errorMessage); + + if (transferVarsArray) + { + delete[] transferVarsArray; + } + + return returnValue; +} + +JsValueRef CHAKRA_CALLBACK ReadHostObject(void * state) +{ + Assert(false); // TBD + return nullptr; +} + +JsValueRef CHAKRA_CALLBACK GetSharedArrayBufferFromId(void * state, uint32_t id) +{ + Assert(false); // TBD + return nullptr; +} +JsValueRef CHAKRA_CALLBACK GetWasmModuleFromId(void * state, uint32_t transfer_id) +{ + Assert(false); // TBD + return nullptr; +} + +struct BufferFreeFunctionState { + ArrayBufferFreeFn freeFn; + void* buffer; +}; + +void CHAKRA_CALLBACK BufferFreeFunction(void * state) +{ + BufferFreeFunctionState* bufferState = (BufferFreeFunctionState*)state; + if (!bufferState) + { + return; + } + if (bufferState->freeFn) + { + bufferState->freeFn(bufferState->buffer); + } + delete bufferState; +} + +JsValueRef __stdcall WScriptJsrt::Deserialize(JsValueRef callee, bool isConstructCall, JsValueRef *arguments, unsigned short argumentCount, void *callbackState) +{ + JsErrorCode errorCode = JsNoError; + LPCWSTR errorMessage = _u(""); + JsValueRef returnValue = JS_INVALID_REFERENCE; + JsValueRef * transferables = nullptr; + HRESULT hr = S_OK; + if (argumentCount < 2) + { + errorCode = JsErrorInvalidArgument; + errorMessage = _u("Need an argument for WScript.Deserialize"); + } + else + { + JsValueRef dataObject = arguments[1]; + uint32 dataLength = 0; + BYTE *data = nullptr; + IfJsrtErrorSetGo(ChakraRTInterface::JsGetArrayBufferStorage(dataObject, &data, &dataLength)); + SerializerBlob *blob = (SerializerBlob*)data; + JsVarDeserializerHandle deserializerHandle = nullptr; + IfJsrtErrorSetGo(ChakraRTInterface::JsVarDeserializer(blob->data, blob->dataLength, ReadHostObject, GetSharedArrayBufferFromId, nullptr, &deserializerHandle)); + + size_t arraySize = blob->transferableArrays.size(); + if (arraySize > 0) + { + transferables = new JsValueRef[arraySize]; + + for (size_t i = 0; i < arraySize; ++i) + { + JsValueRef result = nullptr; + BufferFreeFunctionState* bufferFreeState = new BufferFreeFunctionState(); + bufferFreeState->buffer = blob->transferableArrays[i].buffer; + bufferFreeState->freeFn = blob->transferableArrays[i].freeFn; + IfJsrtErrorSetGo(ChakraRTInterface::JsCreateExternalArrayBuffer(blob->transferableArrays[i].buffer, blob->transferableArrays[i].length, BufferFreeFunction, bufferFreeState, &result)); + transferables[i] = result; + } + + IfJsrtErrorSetGo(ChakraRTInterface::JsVarDeserializerSetTransferableVars(deserializerHandle, transferables, arraySize)); + } + + IfJsrtErrorSetGo(ChakraRTInterface::JsVarDeserializerReadValue(deserializerHandle, &returnValue)); + IfJsrtErrorSetGo(ChakraRTInterface::JsVarDeserializerFree(deserializerHandle)); + delete blob; + + } + +Error: + SetExceptionIf(errorCode, errorMessage); + if (transferables) + { + delete[] transferables; } return returnValue; @@ -295,21 +536,7 @@ JsValueRef __stdcall WScriptJsrt::GetModuleNamespace(JsValueRef callee, bool isC } } - if (errorCode != JsNoError) - { - JsValueRef errorObject; - JsValueRef errorMessageString; - - if (wcscmp(errorMessage, _u("")) == 0) - { - errorMessage = ConvertErrorCodeToMessage(errorCode); - } - - ERROR_MESSAGE_TO_STRING(errCode, errorMessage, errorMessageString); - - ChakraRTInterface::JsCreateError(errorMessageString, &errorObject); - ChakraRTInterface::JsSetException(errorObject); - } + SetExceptionIf(errorCode, errorMessage); return returnValue; } @@ -379,48 +606,10 @@ JsValueRef WScriptJsrt::LoadScriptHelper(JsValueRef callee, bool isConstructCall } Error: - if (errorCode != JsNoError) - { - JsValueRef errorObject; - JsValueRef errorMessageString; - - if (wcscmp(errorMessage, _u("")) == 0) { - errorMessage = ConvertErrorCodeToMessage(errorCode); - } - - ERROR_MESSAGE_TO_STRING(errCode, errorMessage, errorMessageString); - - ChakraRTInterface::JsCreateError(errorMessageString, &errorObject); - ChakraRTInterface::JsSetException(errorObject); - } - + SetExceptionIf(errorCode, errorMessage); return returnValue; } -JsErrorCode WScriptJsrt::InitializeModuleInfo(JsValueRef specifier, JsModuleRecord moduleRecord) -{ - JsErrorCode errorCode = JsNoError; - errorCode = ChakraRTInterface::JsSetModuleHostInfo(moduleRecord, JsModuleHostInfo_FetchImportedModuleCallback, (void*)WScriptJsrt::FetchImportedModule); - - if (errorCode == JsNoError) - { - errorCode = ChakraRTInterface::JsSetModuleHostInfo(moduleRecord, JsModuleHostInfo_FetchImportedModuleFromScriptCallback, (void*)WScriptJsrt::FetchImportedModuleFromScript); - - if (errorCode == JsNoError) - { - errorCode = ChakraRTInterface::JsSetModuleHostInfo(moduleRecord, JsModuleHostInfo_NotifyModuleReadyCallback, (void*)WScriptJsrt::NotifyModuleReadyCallback); - - if (errorCode == JsNoError) - { - errorCode = ChakraRTInterface::JsSetModuleHostInfo(moduleRecord, JsModuleHostInfo_HostDefined, specifier); - } - } - } - - IfJsrtErrorFailLogAndRetErrorCode(errorCode); - return JsNoError; -} - void WScriptJsrt::GetDir(LPCSTR fullPathNarrow, std::string *fullDirNarrow) { char fileDrive[_MAX_DRIVE]; @@ -436,6 +625,11 @@ void WScriptJsrt::GetDir(LPCSTR fullPathNarrow, std::string *fullDirNarrow) *fullDirNarrow = result; } +JsErrorCode WScriptJsrt::ModuleEntryPoint(LPCSTR fileName, LPCSTR fileContent, LPCSTR fullName) +{ + return LoadModuleFromString(fileName, fileContent, fullName, true); +} + JsErrorCode WScriptJsrt::LoadModuleFromString(LPCSTR fileName, LPCSTR fileContent, LPCSTR fullName, bool isFile) { DWORD_PTR dwSourceCookie = WScriptJsrt::GetNextSourceContext(); @@ -448,17 +642,16 @@ JsErrorCode WScriptJsrt::LoadModuleFromString(LPCSTR fileName, LPCSTR fileConten // otherwise we'll use the old one. if (moduleRecordEntry == moduleRecordMap.end()) { - JsValueRef specifier; - errorCode = ChakraRTInterface::JsCreateString( - fileName, strlen(fileName), &specifier); - if (errorCode == JsNoError) + JsValueRef specifier = nullptr; + if (isFile && fullName) { - errorCode = ChakraRTInterface::JsInitializeModuleRecord( - nullptr, specifier, &requestModule); + errorCode = ChakraRTInterface::JsCreateString( + fullName, strlen(fullName), &specifier); } if (errorCode == JsNoError) { - errorCode = InitializeModuleInfo(specifier, requestModule); + errorCode = ChakraRTInterface::JsInitializeModuleRecord( + nullptr, specifier, &requestModule); } if (errorCode == JsNoError) { @@ -468,6 +661,7 @@ JsErrorCode WScriptJsrt::LoadModuleFromString(LPCSTR fileName, LPCSTR fileConten } moduleRecordMap[std::string(moduleRecordKey)] = requestModule; + moduleErrMap[requestModule] = RootModule; } } else @@ -480,19 +674,12 @@ JsErrorCode WScriptJsrt::LoadModuleFromString(LPCSTR fileName, LPCSTR fileConten // ParseModuleSource is sync, while additional fetch & evaluation are async. unsigned int fileContentLength = (fileContent == nullptr) ? 0 : (unsigned int)strlen(fileContent); - if (isFile && fullName) - { - JsValueRef moduleUrl; - ChakraRTInterface::JsCreateString(fullName, strlen(fullName), &moduleUrl); - errorCode = ChakraRTInterface::JsSetModuleHostInfo(requestModule, JsModuleHostInfo_Url, moduleUrl); - IfJsrtErrorFail(errorCode, errorCode); - } - errorCode = ChakraRTInterface::JsParseModuleSource(requestModule, dwSourceCookie, (LPBYTE)fileContent, fileContentLength, JsParseModuleSourceFlags_DataIsUTF8, &errorObject); - if ((errorCode != JsNoError) && errorObject != JS_INVALID_REFERENCE && fileContent != nullptr && !HostConfigFlags::flags.IgnoreScriptErrorCode) + if ((errorCode != JsNoError) && errorObject != JS_INVALID_REFERENCE && fileContent != nullptr && !HostConfigFlags::flags.IgnoreScriptErrorCode && moduleErrMap[requestModule] == RootModule) { ChakraRTInterface::JsSetException(errorObject); + moduleErrMap[requestModule] = ErroredModule; return errorCode; } return JsNoError; @@ -506,7 +693,6 @@ JsValueRef WScriptJsrt::LoadScript(JsValueRef callee, LPCSTR fileName, JsErrorCode errorCode = JsNoError; LPCWSTR errorMessage = _u("Internal error."); JsValueRef returnValue = JS_INVALID_REFERENCE; - JsErrorCode innerErrorCode = JsNoError; JsContextRef currentContext = JS_INVALID_REFERENCE; JsRuntimeHandle runtime = JS_INVALID_RUNTIME_HANDLE; void *callbackArg = (finalizeCallback != nullptr ? (void*)fileContent : nullptr); @@ -647,35 +833,7 @@ JsValueRef WScriptJsrt::LoadScript(JsValueRef callee, LPCSTR fileName, JsValueRef value = returnValue; if (errorCode != JsNoError) { - if (innerErrorCode != JsNoError) - { - // Failed to retrieve the inner error message, so set a custom error string - errorMessage = ConvertErrorCodeToMessage(errorCode); - } - - JsValueRef error = JS_INVALID_REFERENCE; - JsValueRef messageProperty = JS_INVALID_REFERENCE; - - ERROR_MESSAGE_TO_STRING(errCode, errorMessage, messageProperty); - - if (errCode == JsNoError) - { - errCode = ChakraRTInterface::JsCreateError(messageProperty, &error); - if (errCode == JsNoError) - { - bool hasException = false; - errorCode = ChakraRTInterface::JsHasException(&hasException); - if (errorCode == JsNoError && !hasException) - { - errCode = ChakraRTInterface::JsSetException(error); - } - else if (errCode == JsNoError) - { - errCode = JsErrorInExceptionState; - } - } - } - + SetExceptionIf(errorCode, errorMessage); ChakraRTInterface::JsDoubleToNumber(errorCode, &value); } @@ -684,9 +842,31 @@ JsValueRef WScriptJsrt::LoadScript(JsValueRef callee, LPCSTR fileName, return value; } +JsValueRef WScriptJsrt::MonotonicNowCallback(JsValueRef callee, bool isConstructCall, JsValueRef *arguments, unsigned short argumentCount, void *callbackState) +{ + LPCWSTR errorMessage = _u("invalid call to WScript.monotonicNow"); + JsErrorCode errorCode = JsNoError; + HRESULT hr = S_OK; + JsValueRef result; + + IfJsrtErrorSetGo(ChakraRTInterface::JsDoubleToNumber(static_cast(std::chrono::steady_clock::now().time_since_epoch().count()) / 1e6 /* ns in ms */, &result)); + +#ifdef CTIME_UNDEFED +#define ctime PAL_ctime +#undef CTIME_UNDEFED +#endif + return result; + +Error: + SetExceptionIf(errorCode, errorMessage); + return JS_INVALID_REFERENCE; +} + JsValueRef WScriptJsrt::SetTimeoutCallback(JsValueRef callee, bool isConstructCall, JsValueRef *arguments, unsigned short argumentCount, void *callbackState) { LPCWSTR errorMessage = _u("invalid call to WScript.SetTimeout"); + JsErrorCode errorCode = JsNoError; + HRESULT hr = S_OK; JsValueRef function; JsValueRef timerId; @@ -696,79 +876,53 @@ JsValueRef WScriptJsrt::SetTimeoutCallback(JsValueRef callee, bool isConstructCa if (argumentCount != 3) { + errorCode = JsErrorInvalidArgument; goto Error; } function = arguments[1]; - IfJsrtError(ChakraRTInterface::JsNumberToDouble(arguments[2], &tmp)); + IfJsrtErrorSetGo(ChakraRTInterface::JsNumberToDouble(arguments[2], &tmp)); time = static_cast(tmp); msg = new CallbackMessage(time, function); messageQueue->InsertSorted(msg); - IfJsrtError(ChakraRTInterface::JsDoubleToNumber(static_cast(msg->GetId()), &timerId)); + IfJsrtErrorSetGo(ChakraRTInterface::JsDoubleToNumber(static_cast(msg->GetId()), &timerId)); return timerId; Error: - JsValueRef errorObject; - JsValueRef errorMessageString; - - ERROR_MESSAGE_TO_STRING(errorCode, errorMessage, errorMessageString); - - if (errorCode != JsNoError) - { - errorCode = ChakraRTInterface::JsCreateError(errorMessageString, &errorObject); - - if (errorCode != JsNoError) - { - ChakraRTInterface::JsSetException(errorObject); - } - } - + SetExceptionIf(errorCode, errorMessage); return JS_INVALID_REFERENCE; } JsValueRef WScriptJsrt::ClearTimeoutCallback(JsValueRef callee, bool isConstructCall, JsValueRef *arguments, unsigned short argumentCount, void *callbackState) { LPCWSTR errorMessage = _u("invalid call to WScript.ClearTimeout"); + JsErrorCode errorCode = JsNoError; + HRESULT hr = S_OK; if (argumentCount != 2) { + errorCode = JsErrorInvalidArgument; goto Error; } unsigned int timerId; double tmp; JsValueRef undef; - JsValueRef global; - IfJsrtError(ChakraRTInterface::JsNumberToDouble(arguments[1], &tmp)); - - timerId = static_cast(tmp); - messageQueue->RemoveById(timerId); - - IfJsrtError(ChakraRTInterface::JsGetGlobalObject(&global)); - IfJsrtError(ChakraRTInterface::JsGetUndefinedValue(&undef)); + if (ChakraRTInterface::JsNumberToDouble(arguments[1], &tmp) == JsNoError) + { + timerId = static_cast(tmp); + messageQueue->RemoveById(timerId); + } + IfJsrtErrorSetGo(ChakraRTInterface::JsGetUndefinedValue(&undef)); return undef; Error: - JsValueRef errorObject; - JsValueRef errorMessageString; - - ERROR_MESSAGE_TO_STRING(errorCode, errorMessage, errorMessageString); - - if (errorCode != JsNoError) - { - errorCode = ChakraRTInterface::JsCreateError(errorMessageString, &errorObject); - - if (errorCode != JsNoError) - { - ChakraRTInterface::JsSetException(errorObject); - } - } - + SetExceptionIf(errorCode, errorMessage); return JS_INVALID_REFERENCE; } @@ -781,14 +935,18 @@ void QueueDebugOperation(JsValueRef function, const DebugOperationFunc& operatio JsValueRef WScriptJsrt::AttachCallback(JsValueRef callee, bool isConstructCall, JsValueRef *arguments, unsigned short argumentCount, void *callbackState) { LPCWSTR errorMessage = _u("WScript.Attach requires a function, like WScript.Attach(foo);"); + JsErrorCode errorCode = JsNoError; + HRESULT hr = S_OK; JsValueType argumentType = JsUndefined; if (argumentCount != 2) { + errorCode = JsErrorInvalidArgument; goto Error; } - IfJsrtError(ChakraRTInterface::JsGetValueType(arguments[1], &argumentType)); + IfJsrtErrorSetGo(ChakraRTInterface::JsGetValueType(arguments[1], &argumentType)); if (argumentType != JsFunction) { + errorCode = JsErrorInvalidArgument; goto Error; } QueueDebugOperation(arguments[1], [](WScriptJsrt::CallbackMessage& msg) @@ -805,33 +963,25 @@ JsValueRef WScriptJsrt::AttachCallback(JsValueRef callee, bool isConstructCall, return msg.CallFunction(""); }); Error: - JsValueRef errorObject; - JsValueRef errorMessageString; - - ERROR_MESSAGE_TO_STRING(errorCode, errorMessage, errorMessageString); - - if (errorCode != JsNoError) - { - errorCode = ChakraRTInterface::JsCreateError(errorMessageString, &errorObject); - if (errorCode != JsNoError) - { - ChakraRTInterface::JsSetException(errorObject); - } - } + SetExceptionIf(errorCode, errorMessage); return JS_INVALID_REFERENCE; } JsValueRef WScriptJsrt::DetachCallback(JsValueRef callee, bool isConstructCall, JsValueRef *arguments, unsigned short argumentCount, void *callbackState) { LPCWSTR errorMessage = _u("WScript.Detach requires a function, like WScript.Detach(foo);"); + JsErrorCode errorCode = JsNoError; + HRESULT hr = S_OK; JsValueType argumentType = JsUndefined; if (argumentCount != 2) { + errorCode = JsErrorInvalidArgument; goto Error; } - IfJsrtError(ChakraRTInterface::JsGetValueType(arguments[1], &argumentType)); + IfJsrtErrorSetGo(ChakraRTInterface::JsGetValueType(arguments[1], &argumentType)); if (argumentType != JsFunction) { + errorCode = JsErrorInvalidArgument; goto Error; } QueueDebugOperation(arguments[1], [](WScriptJsrt::CallbackMessage& msg) @@ -848,19 +998,7 @@ JsValueRef WScriptJsrt::DetachCallback(JsValueRef callee, bool isConstructCall, return msg.CallFunction(""); }); Error: - JsValueRef errorObject; - JsValueRef errorMessageString; - - ERROR_MESSAGE_TO_STRING(errorCode, errorMessage, errorMessageString); - - if (errorCode != JsNoError) - { - errorCode = ChakraRTInterface::JsCreateError(errorMessageString, &errorObject); - if (errorCode != JsNoError) - { - ChakraRTInterface::JsSetException(errorObject); - } - } + SetExceptionIf(errorCode, errorMessage); return JS_INVALID_REFERENCE; } @@ -900,12 +1038,6 @@ JsValueRef WScriptJsrt::RequestAsyncBreakCallback(JsValueRef callee, bool isCons return JS_INVALID_REFERENCE; } -JsValueRef WScriptJsrt::EmptyCallback(JsValueRef callee, bool isConstructCall, - JsValueRef * arguments, unsigned short argumentCount, void * callbackState) -{ - return JS_INVALID_REFERENCE; -} - bool WScriptJsrt::CreateNamedFunction(const char* nameString, JsNativeFunction callback, JsValueRef* functionVar) { @@ -950,6 +1082,7 @@ bool WScriptJsrt::Initialize() JsValueRef wscript; IfJsrtErrorFail(ChakraRTInterface::JsCreateObject(&wscript), false); + IfFalseGo(WScriptJsrt::InstallObjectsOnObject(wscript, "monotonicNow", MonotonicNowCallback)); IfFalseGo(WScriptJsrt::InstallObjectsOnObject(wscript, "Echo", EchoCallback)); IfFalseGo(WScriptJsrt::InstallObjectsOnObject(wscript, "Quit", QuitCallback)); IfFalseGo(WScriptJsrt::InstallObjectsOnObject(wscript, "LoadScriptFile", LoadScriptFileCallback)); @@ -967,9 +1100,9 @@ bool WScriptJsrt::Initialize() IfFalseGo(WScriptJsrt::InstallObjectsOnObject(wscript, "RegisterModuleSource", RegisterModuleSourceCallback)); IfFalseGo(WScriptJsrt::InstallObjectsOnObject(wscript, "GetModuleNamespace", GetModuleNamespace)); IfFalseGo(WScriptJsrt::InstallObjectsOnObject(wscript, "GetProxyProperties", GetProxyPropertiesCallback)); - - // ToDo Remove - IfFalseGo(WScriptJsrt::InstallObjectsOnObject(wscript, "Edit", EmptyCallback)); + + IfFalseGo(WScriptJsrt::InstallObjectsOnObject(wscript, "SerializeObject", SerializeObject)); + IfFalseGo(WScriptJsrt::InstallObjectsOnObject(wscript, "Deserialize", Deserialize)); // Platform JsValueRef platformObject; @@ -1081,7 +1214,11 @@ bool WScriptJsrt::Initialize() IfJsrtErrorFail(CreatePropertyIdFromString("console", &consoleName), false); IfJsrtErrorFail(ChakraRTInterface::JsSetProperty(global, consoleName, console, true), false); - IfJsrtErrorFail(InitializeModuleCallbacks(), false); + IfJsrtErrorFail(ChakraRTInterface::JsSetModuleHostInfo(nullptr, JsModuleHostInfo_FetchImportedModuleCallback, (void*)WScriptJsrt::FetchImportedModule), false); + IfJsrtErrorFail(ChakraRTInterface::JsSetModuleHostInfo(nullptr, JsModuleHostInfo_FetchImportedModuleFromScriptCallback, (void*)WScriptJsrt::FetchImportedModuleFromScript), false); + IfJsrtErrorFail(ChakraRTInterface::JsSetModuleHostInfo(nullptr, JsModuleHostInfo_NotifyModuleReadyCallback, (void*)WScriptJsrt::NotifyModuleReadyCallback), false); + IfJsrtErrorFail(ChakraRTInterface::JsSetModuleHostInfo(nullptr, JsModuleHostInfo_InitializeImportMetaCallback, (void*)WScriptJsrt::InitializeImportMetaCallback), false); + IfJsrtErrorFail(ChakraRTInterface::JsSetModuleHostInfo(nullptr, JsModuleHostInfo_ReportModuleCompletionCallback, (void*)WScriptJsrt::ReportModuleCompletionCallback), false); // When the command-line argument `-Test262` is set, // WScript will have the extra support API below and $262 will be @@ -1112,18 +1249,6 @@ bool WScriptJsrt::Initialize() return hr == S_OK; } -JsErrorCode WScriptJsrt::InitializeModuleCallbacks() -{ - JsModuleRecord moduleRecord = JS_INVALID_REFERENCE; - JsErrorCode errorCode = ChakraRTInterface::JsInitializeModuleRecord(nullptr, nullptr, &moduleRecord); - if (errorCode == JsNoError) - { - errorCode = InitializeModuleInfo(nullptr, moduleRecord); - } - - return errorCode; -} - bool WScriptJsrt::Uninitialize() { // moduleRecordMap is a global std::map, its destructor may access overridden @@ -1131,6 +1256,7 @@ bool WScriptJsrt::Uninitialize() // to avoid worrying about global destructor order. moduleRecordMap.clear(); moduleDirMap.clear(); + moduleErrMap.clear(); scriptDirMap.clear(); auto& threadData = GetRuntimeThreadLocalData().threadData; @@ -1218,7 +1344,6 @@ JsValueRef __stdcall WScriptJsrt::LoadTextFileCallback(JsValueRef callee, bool i if (FAILED(hr)) { - // check if have it registered fprintf(stderr, "Couldn't load file '%s'\n", fileName.GetString()); IfJsrtErrorSetGo(ChakraRTInterface::JsGetUndefinedValue(&returnValue)); return returnValue; @@ -1382,7 +1507,6 @@ JsValueRef __stdcall WScriptJsrt::LoadBinaryFileCallback(JsValueRef callee, if (FAILED(hr)) { - // check if have it registered fprintf(stderr, "Couldn't load file '%s'\n", fileName.GetString()); IfJsrtErrorSetGoLabel(ChakraRTInterface::JsGetUndefinedValue(&returnValue), Error); return returnValue; @@ -1661,11 +1785,26 @@ JsValueRef __stdcall WScriptJsrt::GetProxyPropertiesCallback(JsValueRef callee, return returnValue; } -bool WScriptJsrt::PrintException(LPCSTR fileName, JsErrorCode jsErrorCode) +bool WScriptJsrt::PrintException(LPCSTR fileName, JsErrorCode jsErrorCode, JsValueRef exception) { LPCWSTR errorTypeString = ConvertErrorCodeToMessage(jsErrorCode); - JsValueRef exception; - ChakraRTInterface::JsGetAndClearException(&exception); + JsValueRef metaData = JS_INVALID_REFERENCE; + + if (exception == nullptr) + { + if (ChakraRTInterface::JsGetAndClearExceptionWithMetadata(&metaData) == JsNoError) + { + JsPropertyIdRef exceptionId = JS_INVALID_REFERENCE; + IfJsrtErrorFail(CreatePropertyIdFromString("exception", &exceptionId), false); + IfJsrtErrorFail(ChakraRTInterface::JsGetProperty(metaData, exceptionId, &exception), false); + } + else + { + IfJsrtErrorFail(ChakraRTInterface::JsGetAndClearException(&exception), false); + } + + } + if (HostConfigFlags::flags.MuteHostErrorMsgIsEnabled) { return false; @@ -1677,7 +1816,56 @@ bool WScriptJsrt::PrintException(LPCSTR fileName, JsErrorCode jsErrorCode) { AutoString errorMessage; - IfJsrtErrorFail(errorMessage.Initialize(exception), false); + if (errorMessage.Initialize(exception) != JsNoError) + { + fwprintf(stderr, _u("ERROR attempting to coerce error to string, using alternate handler\n")); + bool hasException = false; + ChakraRTInterface::JsHasException(&hasException); + if (hasException) + { + JsValueRef throwAway = JS_INVALID_REFERENCE; + ChakraRTInterface::JsGetAndClearException(&throwAway); + } + JsPropertyIdRef messagePropertyId = JS_INVALID_REFERENCE; + IfJsrtErrorFail(CreatePropertyIdFromString("message", &messagePropertyId), false); + JsValueRef message = JS_INVALID_REFERENCE; + IfJsrtErrorFail(ChakraRTInterface::JsGetProperty(exception, messagePropertyId, &message), false); + IfJsrtErrorFail(errorMessage.Initialize(message), false); + + if (jsErrorCode != JsErrorCode::JsErrorScriptCompile) + { + CHAR shortFileName[_MAX_PATH]; + CHAR ext[_MAX_EXT]; + _splitpath_s(fileName, nullptr, 0, nullptr, 0, shortFileName, _countof(shortFileName), ext, _countof(ext)); + + if (metaData != JS_INVALID_REFERENCE) + { + JsPropertyIdRef linePropertyId = JS_INVALID_REFERENCE; + JsValueRef lineProperty = JS_INVALID_REFERENCE; + + JsPropertyIdRef columnPropertyId = JS_INVALID_REFERENCE; + JsValueRef columnProperty = JS_INVALID_REFERENCE; + + int line; + int column; + + IfJsrtErrorFail(CreatePropertyIdFromString("line", &linePropertyId), false); + IfJsrtErrorFail(ChakraRTInterface::JsGetProperty(metaData, linePropertyId, &lineProperty), false); + IfJsrtErrorFail(ChakraRTInterface::JsNumberToInt(lineProperty, &line), false); + + IfJsrtErrorFail(CreatePropertyIdFromString("column", &columnPropertyId), false); + IfJsrtErrorFail(ChakraRTInterface::JsGetProperty(metaData, columnPropertyId, &columnProperty), false); + IfJsrtErrorFail(ChakraRTInterface::JsNumberToInt(columnProperty, &column), false); + fwprintf(stderr, _u("%ls\n at code (%S%S:%d:%d)\n"), + errorMessage.GetWideString(), shortFileName, ext, line + 1, column + 1); + } + else + { + fwprintf(stderr, _u("%ls\n\tat code (%S%S:\?\?:\?\?)\n"), errorMessage.GetWideString(), shortFileName, ext); + } + return true; + } + } if (jsErrorCode == JsErrorCode::JsErrorScriptCompile) { @@ -1831,12 +2019,14 @@ HRESULT WScriptJsrt::CallbackMessage::CallFunction(LPCSTR fileName) return hr; } -WScriptJsrt::ModuleMessage::ModuleMessage(JsModuleRecord module, JsValueRef specifier) +WScriptJsrt::ModuleMessage::ModuleMessage(JsModuleRecord module, JsValueRef specifier, std::string* fullPathPtr) : MessageBase(0), moduleRecord(module), specifier(specifier) { + fullPath = nullptr; ChakraRTInterface::JsAddRef(module, nullptr); if (specifier != nullptr) { + fullPath = new std::string (*fullPathPtr); // nullptr specifier means a Promise to execute; non-nullptr means a "fetch" operation. ChakraRTInterface::JsAddRef(specifier, nullptr); } @@ -1847,21 +2037,25 @@ WScriptJsrt::ModuleMessage::~ModuleMessage() ChakraRTInterface::JsRelease(moduleRecord, nullptr); if (specifier != nullptr) { + delete fullPath; ChakraRTInterface::JsRelease(specifier, nullptr); } } HRESULT WScriptJsrt::ModuleMessage::Call(LPCSTR fileName) { - JsErrorCode errorCode; + JsErrorCode errorCode = JsNoError; JsValueRef result = JS_INVALID_REFERENCE; HRESULT hr; if (specifier == nullptr) { - errorCode = ChakraRTInterface::JsModuleEvaluation(moduleRecord, &result); - if (errorCode != JsNoError) + if (moduleErrMap[moduleRecord] != ErroredModule) { - PrintException(fileName, errorCode); + errorCode = ChakraRTInterface::JsModuleEvaluation(moduleRecord, &result); + if (errorCode != JsNoError) + { + PrintException(fileName, errorCode); // this should not be called + } } } else @@ -1871,25 +2065,39 @@ HRESULT WScriptJsrt::ModuleMessage::Call(LPCSTR fileName) errorCode = specifierStr.GetError(); if (errorCode == JsNoError) { - hr = Helpers::LoadScriptFromFile(*specifierStr, fileContent); + hr = Helpers::LoadScriptFromFile(*specifierStr, fileContent, nullptr, fullPath, true); if (FAILED(hr)) { - // check if have it registered if (!HostConfigFlags::flags.MuteHostErrorMsgIsEnabled) { - fprintf(stderr, "Couldn't load file '%s'\n", specifierStr.GetString()); + auto actualModuleRecord = moduleRecordMap.find(*fullPath); + if (actualModuleRecord == moduleRecordMap.end() || moduleErrMap[actualModuleRecord->second] == RootModule) + { + fprintf(stderr, "Couldn't load file '%s'\n", specifierStr.GetString()); + } } - LoadScript(nullptr, *specifierStr, nullptr, "module", true, WScriptJsrt::FinalizeFree, false); + LoadScript(nullptr, fullPath == nullptr ? *specifierStr : fullPath->c_str(), nullptr, "module", true, WScriptJsrt::FinalizeFree, false); goto Error; } - LoadScript(nullptr, *specifierStr, fileContent, "module", true, WScriptJsrt::FinalizeFree, true); + LoadScript(nullptr, fullPath == nullptr ? *specifierStr : fullPath->c_str(), fileContent, "module", true, WScriptJsrt::FinalizeFree, true); } } Error: return errorCode; } +JsErrorCode WScriptJsrt::ReportModuleCompletionCallback(JsModuleRecord module, JsValueRef exception) +{ + if (exception != nullptr) + { + JsValueRef specifier = JS_INVALID_REFERENCE; + ChakraRTInterface::JsGetModuleHostInfo(module, JsModuleHostInfo_Url, &specifier); + PrintException(AutoString(specifier).GetString(), JsErrorCode::JsErrorScriptException, exception); + } + return JsNoError; +} + JsErrorCode WScriptJsrt::FetchImportedModuleHelper(JsModuleRecord referencingModule, JsValueRef specifier, __out JsModuleRecord* dependentModuleRecord, LPCSTR refdir) { @@ -1921,10 +2129,10 @@ JsErrorCode WScriptJsrt::FetchImportedModuleHelper(JsModuleRecord referencingMod if (errorCode == JsNoError) { GetDir(fullPath, &moduleDirMap[moduleRecord]); - InitializeModuleInfo(specifier, moduleRecord); - moduleRecordMap[std::string(fullPath)] = moduleRecord; - ModuleMessage* moduleMessage = - WScriptJsrt::ModuleMessage::Create(referencingModule, specifier); + std::string pathKey = std::string(fullPath); + moduleRecordMap[pathKey] = moduleRecord; + moduleErrMap[moduleRecord] = ImportedModule; + ModuleMessage* moduleMessage = WScriptJsrt::ModuleMessage::Create(referencingModule, specifier, &pathKey); if (moduleMessage == nullptr) { return JsErrorOutOfMemory; @@ -1959,42 +2167,25 @@ JsErrorCode WScriptJsrt::FetchImportedModule(_In_ JsModuleRecord referencingModu JsErrorCode WScriptJsrt::FetchImportedModuleFromScript(_In_ JsSourceContext dwReferencingSourceContext, _In_ JsValueRef specifier, _Outptr_result_maybenull_ JsModuleRecord* dependentModuleRecord) { - // ch.exe assumes all imported source files are located at . - auto scriptDirEntry = scriptDirMap.find(dwReferencingSourceContext); - if (scriptDirEntry != scriptDirMap.end()) - { - std::string dir = scriptDirEntry->second; - return FetchImportedModuleHelper(nullptr, specifier, dependentModuleRecord, dir.c_str()); - } - return FetchImportedModuleHelper(nullptr, specifier, dependentModuleRecord); } -// Callback from chakraCore when the module resolution is finished, either successfuly or unsuccessfully. +// Callback from chakraCore when the module resolution is finished, either successfully or unsuccessfully. JsErrorCode WScriptJsrt::NotifyModuleReadyCallback(_In_opt_ JsModuleRecord referencingModule, _In_opt_ JsValueRef exceptionVar) { - if (exceptionVar != nullptr) + if (exceptionVar != nullptr && HostConfigFlags::flags.TraceHostCallbackIsEnabled) { - ChakraRTInterface::JsSetException(exceptionVar); JsValueRef specifier = JS_INVALID_REFERENCE; - ChakraRTInterface::JsGetModuleHostInfo(referencingModule, JsModuleHostInfo_HostDefined, &specifier); + ChakraRTInterface::JsGetModuleHostInfo(referencingModule, JsModuleHostInfo_Url, &specifier); AutoString fileName; if (specifier != JS_INVALID_REFERENCE) { fileName.Initialize(specifier); } - - if (HostConfigFlags::flags.TraceHostCallbackIsEnabled) - { - wprintf(_u("NotifyModuleReadyCallback(exception) %S\n"), fileName.GetString()); - } - - // No need to print - just consume the exception - JsValueRef exception; - ChakraRTInterface::JsGetAndClearException(&exception); - exception; // unused + wprintf(_u("NotifyModuleReadyCallback(exception) %S\n"), fileName.GetString()); } - else + + if (moduleErrMap[referencingModule] != ErroredModule) { WScriptJsrt::ModuleMessage* moduleMessage = WScriptJsrt::ModuleMessage::Create(referencingModule, nullptr); @@ -2007,6 +2198,23 @@ JsErrorCode WScriptJsrt::NotifyModuleReadyCallback(_In_opt_ JsModuleRecord refer return JsNoError; } +JsErrorCode __stdcall WScriptJsrt::InitializeImportMetaCallback(_In_opt_ JsModuleRecord referencingModule, _In_opt_ JsValueRef importMetaVar) +{ + if (importMetaVar != nullptr) + { + JsValueRef specifier = JS_INVALID_REFERENCE; + ChakraRTInterface::JsGetModuleHostInfo(referencingModule, JsModuleHostInfo_Url, &specifier); + + JsPropertyIdRef urlPropId; + if (JsNoError == CreatePropertyIdFromString("url", &urlPropId)) + { + ChakraRTInterface::JsSetProperty(importMetaVar, urlPropId, specifier, false); + } + } + + return JsNoError; +} + void WScriptJsrt::PromiseContinuationCallback(JsValueRef task, void *callbackState) { Assert(task != JS_INVALID_REFERENCE); diff --git a/bin/ch/WScriptJsrt.h b/bin/ch/WScriptJsrt.h index 82007791a82..b4f8170fb5c 100644 --- a/bin/ch/WScriptJsrt.h +++ b/bin/ch/WScriptJsrt.h @@ -1,15 +1,24 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft Corporation and contributors. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #pragma once #include +enum ModuleState +{ + RootModule, + ImportedModule, + ErroredModule +}; + class WScriptJsrt { public: static bool Initialize(); static bool Uninitialize(); + static JsErrorCode ModuleEntryPoint(LPCSTR fileName, LPCSTR fileContent, LPCSTR fullName); class CallbackMessage : public MessageBase { @@ -35,17 +44,18 @@ class WScriptJsrt private: JsModuleRecord moduleRecord; JsValueRef specifier; + std::string* fullPath; - ModuleMessage(JsModuleRecord module, JsValueRef specifier); + ModuleMessage(JsModuleRecord module, JsValueRef specifier, std::string* fullPathPtr); public: ~ModuleMessage(); virtual HRESULT Call(LPCSTR fileName) override; - static ModuleMessage* Create(JsModuleRecord module, JsValueRef specifier) + static ModuleMessage* Create(JsModuleRecord module, JsValueRef specifier, std::string* fullPath = nullptr) { - return new ModuleMessage(module, specifier); + return new ModuleMessage(module, specifier, fullPath); } }; @@ -56,7 +66,8 @@ class WScriptJsrt static JsErrorCode FetchImportedModule(_In_ JsModuleRecord referencingModule, _In_ JsValueRef specifier, _Outptr_result_maybenull_ JsModuleRecord* dependentModuleRecord); static JsErrorCode FetchImportedModuleFromScript(_In_ DWORD_PTR dwReferencingSourceContext, _In_ JsValueRef specifier, _Outptr_result_maybenull_ JsModuleRecord* dependentModuleRecord); static JsErrorCode NotifyModuleReadyCallback(_In_opt_ JsModuleRecord referencingModule, _In_opt_ JsValueRef exceptionVar); - static JsErrorCode InitializeModuleCallbacks(); + static JsErrorCode ReportModuleCompletionCallback(JsModuleRecord module, JsValueRef exception); + static JsErrorCode CALLBACK InitializeImportMetaCallback(_In_opt_ JsModuleRecord referencingModule, _In_opt_ JsValueRef importMetaVar); static void CALLBACK PromiseContinuationCallback(JsValueRef task, void *callbackState); static void CALLBACK PromiseRejectionTrackerCallback(JsValueRef promise, JsValueRef reason, bool handled, void *callbackState); @@ -80,6 +91,8 @@ class WScriptJsrt return _u("FatalError"); case (JsErrorCode::JsErrorInExceptionState) : return _u("ErrorInExceptionState"); + case (JsErrorCode::JsErrorBadSerializedScript): + return _u("ErrorBadSerializedScript "); default: AssertMsg(false, "Unexpected JsErrorCode"); return nullptr; @@ -90,7 +103,7 @@ class WScriptJsrt static void CALLBACK JsContextBeforeCollectCallback(JsRef contextRef, void *data); #endif - static bool PrintException(LPCSTR fileName, JsErrorCode jsErrorCode); + static bool PrintException(LPCSTR fileName, JsErrorCode jsErrorCode, JsValueRef exception = nullptr); static JsValueRef LoadScript(JsValueRef callee, LPCSTR fileName, LPCSTR fileContent, LPCSTR scriptInjectType, bool isSourceModule, JsFinalizeCallback finalizeCallback, bool isFile); static DWORD_PTR GetNextSourceContext(); static JsValueRef LoadScriptFileHelper(JsValueRef callee, JsValueRef *arguments, unsigned short argumentCount, bool isSourceModule); @@ -99,6 +112,7 @@ class WScriptJsrt static void FinalizeFree(void * addr); static void RegisterScriptDir(DWORD_PTR sourceContext, LPCSTR fullDirNarrow); private: + static void SetExceptionIf(JsErrorCode errorCode, LPCWSTR errorMessage); static bool CreateArgumentsObject(JsValueRef *argsObject); static bool CreateNamedFunction(const char*, JsNativeFunction callback, JsValueRef* functionVar); static void GetDir(LPCSTR fullPathNarrow, std::string *fullDirNarrow); @@ -108,6 +122,7 @@ class WScriptJsrt static JsValueRef CALLBACK LoadScriptCallback(JsValueRef callee, bool isConstructCall, JsValueRef *arguments, unsigned short argumentCount, void *callbackState); static JsValueRef CALLBACK LoadModuleCallback(JsValueRef callee, bool isConstructCall, JsValueRef *arguments, unsigned short argumentCount, void *callbackState); static JsValueRef CALLBACK GetModuleNamespace(JsValueRef callee, bool isConstructCall, JsValueRef *arguments, unsigned short argumentCount, void *callbackState); + static JsValueRef CALLBACK MonotonicNowCallback(JsValueRef callee, bool isConstructCall, JsValueRef *arguments, unsigned short argumentCount, void *callbackState); static JsValueRef CALLBACK SetTimeoutCallback(JsValueRef callee, bool isConstructCall, JsValueRef *arguments, unsigned short argumentCount, void *callbackState); static JsValueRef CALLBACK ClearTimeoutCallback(JsValueRef callee, bool isConstructCall, JsValueRef *arguments, unsigned short argumentCount, void *callbackState); static JsValueRef CALLBACK AttachCallback(JsValueRef callee, bool isConstructCall, JsValueRef *arguments, unsigned short argumentCount, void *callbackState); @@ -115,9 +130,7 @@ class WScriptJsrt static JsValueRef CALLBACK DumpFunctionPositionCallback(JsValueRef callee, bool isConstructCall, JsValueRef *arguments, unsigned short argumentCount, void *callbackState); static JsValueRef CALLBACK RequestAsyncBreakCallback(JsValueRef callee, bool isConstructCall, JsValueRef *arguments, unsigned short argumentCount, void *callbackState); - static JsValueRef CALLBACK EmptyCallback(JsValueRef callee, bool isConstructCall, JsValueRef *arguments, unsigned short argumentCount, void *callbackState); static JsErrorCode CALLBACK LoadModuleFromString(LPCSTR fileName, LPCSTR fileContent, LPCSTR fullName = nullptr, bool isFile = false); - static JsErrorCode CALLBACK InitializeModuleInfo(JsValueRef specifier, JsModuleRecord moduleRecord); static JsValueRef CALLBACK LoadBinaryFileCallback(JsValueRef callee, bool isConstructCall, JsValueRef *arguments, unsigned short argumentCount, void *callbackState); static JsValueRef CALLBACK LoadTextFileCallback(JsValueRef callee, bool isConstructCall, JsValueRef *arguments, unsigned short argumentCount, void *callbackState); @@ -133,11 +146,15 @@ class WScriptJsrt static JsValueRef CALLBACK SleepCallback(JsValueRef callee, bool isConstructCall, JsValueRef *arguments, unsigned short argumentCount, void *callbackState); static JsValueRef CALLBACK GetProxyPropertiesCallback(JsValueRef callee, bool isConstructCall, JsValueRef *arguments, unsigned short argumentCount, void *callbackState); + static JsValueRef CALLBACK SerializeObject(JsValueRef callee, bool isConstructCall, JsValueRef *arguments, unsigned short argumentCount, void *callbackState); + static JsValueRef CALLBACK Deserialize(JsValueRef callee, bool isConstructCall, JsValueRef *arguments, unsigned short argumentCount, void *callbackState); + static JsErrorCode FetchImportedModuleHelper(JsModuleRecord referencingModule, JsValueRef specifier, __out JsModuleRecord* dependentModuleRecord, LPCSTR refdir = nullptr); static MessageQueue *messageQueue; static DWORD_PTR sourceContext; static std::map moduleRecordMap; static std::map moduleDirMap; + static std::map moduleErrMap; static std::map scriptDirMap; }; diff --git a/bin/ch/ch.cpp b/bin/ch/ch.cpp index d365340608e..8c5b4a4e20a 100644 --- a/bin/ch/ch.cpp +++ b/bin/ch/ch.cpp @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #include "stdafx.h" @@ -39,6 +40,8 @@ UINT32 snapHistoryLength = MAXUINT32; LPCWSTR connectionUuidString = NULL; UINT32 startEventCount = 1; +HRESULT RunBgParseSync(LPCSTR fileContents, UINT lengthBytes, const char* fileName); + extern "C" HRESULT __stdcall OnChakraCoreLoadedEntry(TestHooks& testHooks) { @@ -193,97 +196,62 @@ HANDLE GetFileHandle(LPCWSTR filename) return GetStdHandle(STD_OUTPUT_HANDLE); } -HRESULT CreateLibraryByteCodeHeader(LPCSTR contentsRaw, JsFinalizeCallback contentsRawFinalizeCallback, DWORD lengthBytes, LPCWSTR bcFullPath, LPCSTR libraryNameNarrow) +HRESULT CreateLibraryByteCode(const char* contentsRaw) { - HANDLE bcFileHandle = nullptr; JsValueRef bufferVal; BYTE *bcBuffer = nullptr; unsigned int bcBufferSize = 0; - DWORD written; - // For validating the header file against the library file - auto outputStr = - "//-------------------------------------------------------------------------------------------------------\n" - "// Copyright (C) Microsoft. All rights reserved.\n" - "// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.\n" - "//-------------------------------------------------------------------------------------------------------\n" - "#if 0\n"; - - std::string normalizedContentStr; - char* nextToken = nullptr; - char* token = strtok_s((char*)contentsRaw, "\r", &nextToken); - while (token) - { - normalizedContentStr.append(token); - token = strtok_s(nullptr, "\r", &nextToken); - } - // We no longer need contentsRaw, so call the finalizer for it if one was provided - if (contentsRawFinalizeCallback != nullptr) - { - contentsRawFinalizeCallback((void*)contentsRaw); - } - - const char* normalizedContent = normalizedContentStr.c_str(); - // We still need contentsRaw after this, so pass a null finalizeCallback into it - HRESULT hr = GetSerializedBuffer(normalizedContent, nullptr, &bufferVal); - - IfFailedGoLabel((hr), ErrorRunFinalize); - - IfJsrtErrorHRLabel(ChakraRTInterface::JsGetArrayBufferStorage(bufferVal, &bcBuffer, &bcBufferSize), ErrorRunFinalize); - - bcFileHandle = GetFileHandle(bcFullPath); - IfFalseGo(bcFileHandle != INVALID_HANDLE_VALUE && bcFileHandle != nullptr); - - IfFalseGoLabel(WriteFile(bcFileHandle, outputStr, (DWORD)strlen(outputStr), &written, nullptr), ErrorRunFinalize); - IfFalseGoLabel(WriteFile(bcFileHandle, normalizedContent, (DWORD)normalizedContentStr.size(), &written, nullptr), ErrorRunFinalize); - outputStr = "\n#endif\n"; + HRESULT hr = E_FAIL; + + // Windows can't do the below with printf - so use windows API on windows but printf on posix + #ifdef _WIN32 + HANDLE out = GetStdHandle(STD_OUTPUT_HANDLE); + DWORD written = 0; + #define print_format(format, element, size) \ + { \ + auto scratchLen = size; \ + char scratch[size]; \ + int len = _snprintf_s(scratch, scratchLen, _countof(scratch), format, element); \ + IfFalseGo(WriteFile(out, scratch, (DWORD)(len), &written, nullptr)); \ + } + #define print(text) \ + WriteFile(out, text, (DWORD)strlen(text), &written, nullptr); + #else + #define print_format(format, element, size) printf(format, element) + #define print printf + #endif - IfFalseGo(WriteFile(bcFileHandle, outputStr, (DWORD)strlen(outputStr), &written, nullptr)); + // Generate the bytecode, free the original buffer then retrieve the generated bytecode + IfFailGo(GetSerializedBuffer(contentsRaw, WScriptJsrt::FinalizeFree, &bufferVal)); + IfFailGo(ChakraRTInterface::JsGetArrayBufferStorage(bufferVal, &bcBuffer, &bcBufferSize)); // Write out the bytecode - outputStr = "namespace Js\n{\n const char Library_Bytecode_"; - IfFalseGo(WriteFile(bcFileHandle, outputStr, (DWORD)strlen(outputStr), &written, nullptr)); - IfFalseGo(WriteFile(bcFileHandle, libraryNameNarrow, (DWORD)strlen(libraryNameNarrow), &written, nullptr)); - outputStr = "[] = {\n/* 00000000 */"; - IfFalseGo(WriteFile(bcFileHandle, outputStr, (DWORD)strlen(outputStr), &written, nullptr)); + print("[] = {\n/* 00000000 */"); for (unsigned int i = 0; i < bcBufferSize; i++) { - char scratch[6]; - auto scratchLen = sizeof(scratch); - int num = _snprintf_s(scratch, scratchLen, _countof(scratch), " 0x%02X", bcBuffer[i]); - Assert(num == 5); - IfFalseGo(WriteFile(bcFileHandle, scratch, (DWORD)(scratchLen - 1), &written, nullptr)); - - // Add a comma and a space if this is not the last item + print_format(" 0x%02X", bcBuffer[i], 6); + // Add a comma if this is not the last item if (i < bcBufferSize - 1) { - char commaSpace[2]; - _snprintf_s(commaSpace, sizeof(commaSpace), _countof(commaSpace), ","); // close quote, new line, offset and open quote - IfFalseGo(WriteFile(bcFileHandle, commaSpace, (DWORD)strlen(commaSpace), &written, nullptr)); + print(","); } // Add a line break every 16 scratches, primarily so the compiler doesn't complain about the string being too long. // Also, won't add for the last scratch if (i % 16 == 15 && i < bcBufferSize - 1) { - char offset[17]; - int actualLen = _snprintf_s(offset, sizeof(offset), _countof(offset), "\n/* %08X */", i + 1); // close quote, new line, offset and open quote - IfFalseGo(WriteFile(bcFileHandle, offset, actualLen, &written, nullptr)); + print_format("\n/* %08X */", i + 1, 17); } } - outputStr = "};\n\n"; - IfFalseGo(WriteFile(bcFileHandle, outputStr, (DWORD)strlen(outputStr), &written, nullptr)); + print("};\n\n"); - outputStr = "}\n"; - IfFalseGo(WriteFile(bcFileHandle, outputStr, (DWORD)strlen(outputStr), &written, nullptr)); + #undef print + #undef print_format -ErrorRunFinalize: -Error: - if (bcFileHandle != nullptr) - { - CloseHandle(bcFileHandle); - } + hr = S_OK; +Error: return hr; } @@ -396,6 +364,10 @@ HRESULT RunScript(const char* fileName, LPCSTR fileContents, size_t fileLength, IfJsErrorFailLogLabel(ChakraRTInterface::JsCreateString(fullPath, strlen(fullPath), &fname), ErrorRunFinalize); + // memory management for serialized script case - need to define these here + SerializedCallbackInfo serializedCallbackInfo; + serializedCallbackInfo.freeingHandled = true; + if (bufferValue != nullptr) { if (fileContents == nullptr) @@ -412,7 +384,6 @@ HRESULT RunScript(const char* fileName, LPCSTR fileContents, size_t fileLength, else // fileContents != nullptr { // Memory management is a little more complex here - SerializedCallbackInfo serializedCallbackInfo; serializedCallbackInfo.scriptBody = (void*)fileContents; serializedCallbackInfo.scriptBodyFinalizeCallback = fileContentsFinalizeCallback; serializedCallbackInfo.freeingHandled = false; @@ -425,15 +396,6 @@ HRESULT RunScript(const char* fileName, LPCSTR fileContents, size_t fileLength, // Use source ptr as sourceContext fname, nullptr /*result*/); - // Now that we're down here, we can free the fileContents if they weren't sent into - // a GC-managed object. - if (!serializedCallbackInfo.freeingHandled) - { - if (fileContentsFinalizeCallback != nullptr) - { - fileContentsFinalizeCallback((void*)fileContents); - } - } } } else if (parserStateCache != nullptr) @@ -452,14 +414,24 @@ HRESULT RunScript(const char* fileName, LPCSTR fileContents, size_t fileLength, parserStateCache, nullptr); } + else if (HostConfigFlags::flags.Module) + { + runScript = WScriptJsrt::ModuleEntryPoint(fileName, fileContents, fullPath); + } + else if (HostConfigFlags::flags.ExecuteWithBgParse && !HostConfigFlags::flags.DebugLaunch) + { + unsigned int lengthBytes = (unsigned int) fileLength; + runScript = (JsErrorCode)RunBgParseSync(fileContents, lengthBytes, fileName); + } else // bufferValue == nullptr && parserStateCache == nullptr { JsValueRef scriptSource; IfJsErrorFailLog(ChakraRTInterface::JsCreateExternalArrayBuffer((void*)fileContents, (unsigned int)fileLength, fileContentsFinalizeCallback, (void*)fileContents, &scriptSource)); + #if ENABLE_TTD - if(doTTRecord) + if (doTTRecord) { JsPropertyIdRef ttProperty = nullptr; JsValueRef ttString = nullptr; @@ -508,6 +480,12 @@ HRESULT RunScript(const char* fileName, LPCSTR fileContents, size_t fileLength, IfFailGo(messageQueue->ProcessAll(fileName)); } while(!messageQueue->IsEmpty()); } + + // free the source for the serialized script case if it's not been handed to a managed object + if (!serializedCallbackInfo.freeingHandled && fileContentsFinalizeCallback != nullptr) + { + fileContentsFinalizeCallback((void*)fileContents); + } } if(false) @@ -751,6 +729,47 @@ HRESULT CreateAndRunSerializedScript(const char* fileName, LPCSTR fileContents, return hr; } +// Use the asynchronous BGParse JSRT APIs in a synchronous call +HRESULT RunBgParseSync(LPCSTR fileContents, UINT lengthBytes, const char* fileName) +{ + JsValueRef scriptSource; + JsErrorCode e = (ChakraRTInterface::JsCreateExternalArrayBuffer((void*)fileContents, + (unsigned int)lengthBytes, + nullptr, (void*)fileContents, &scriptSource)); + + // What's the preferred way of doing this? + WCHAR fileNameWide[MAX_PATH] = { 0 }; + size_t fileNameLength = strlen(fileName); + for (size_t i = 0; i < fileNameLength; i++) + { + fileNameWide[i] = fileName[i]; + } + + JsScriptContents scriptContents = { 0 }; + scriptContents.container = (LPVOID)fileContents; + scriptContents.containerType = JsScriptContainerType::HeapAllocatedBuffer; + scriptContents.encodingType = JsScriptEncodingType::Utf8; + scriptContents.contentLengthInBytes = lengthBytes; + scriptContents.fullPath = fileNameWide; + + DWORD cookie = 0; + e = ChakraRTInterface::JsQueueBackgroundParse_Experimental(&scriptContents, &cookie); + Assert(e == JsErrorCode::JsNoError); + + JsValueRef bgResult = nullptr; + e = ChakraRTInterface::JsExecuteBackgroundParse_Experimental( + cookie, + scriptSource, + WScriptJsrt::GetNextSourceContext(), + (WCHAR*)scriptContents.fullPath, + JsParseScriptAttributes::JsParseScriptAttributeNone, + nullptr,//_In_ JsValueRef parserState, + &bgResult + ); + + return e; +} + HRESULT ExecuteTest(const char* fileName) { HRESULT hr = S_OK; @@ -815,12 +834,12 @@ HRESULT ExecuteTest(const char* fileName) JsContextRef context = JS_INVALID_REFERENCE; IfJsErrorFailLog(ChakraRTInterface::JsTTDCreateContext(runtime, true, &context)); + IfJsErrorFailLog(ChakraRTInterface::JsSetCurrentContext(context)); + #if ENABLE_TTD //We need this here since this context is created in record IfJsErrorFailLog(ChakraRTInterface::JsSetObjectBeforeCollectCallback(context, nullptr, WScriptJsrt::JsContextBeforeCollectCallback)); #endif - - IfJsErrorFailLog(ChakraRTInterface::JsSetCurrentContext(context)); } else { @@ -860,9 +879,6 @@ HRESULT ExecuteTest(const char* fileName) #ifdef DEBUG ChakraRTInterface::SetCheckOpHelpersFlag(true); #endif -#ifdef ENABLE_DEBUG_CONFIG_OPTIONS - ChakraRTInterface::SetOOPCFGRegistrationFlag(false); -#endif if (!WScriptJsrt::Initialize()) { @@ -882,19 +898,7 @@ HRESULT ExecuteTest(const char* fileName) len = strlen(fullPath); if (HostConfigFlags::flags.GenerateLibraryByteCodeHeaderIsEnabled) { - - if (HostConfigFlags::flags.GenerateLibraryByteCodeHeader != nullptr) - { - if (wcslen(HostConfigFlags::flags.GenerateLibraryByteCodeHeader) == 0) - { - HostConfigFlags::flags.GenerateLibraryByteCodeHeader = nullptr; - } - } - CHAR libraryName[_MAX_PATH]; - CHAR ext[_MAX_EXT]; - _splitpath_s(fullPath, NULL, 0, NULL, 0, libraryName, _countof(libraryName), ext, _countof(ext)); - - IfFailGo(CreateLibraryByteCodeHeader(fileContents, WScriptJsrt::FinalizeFree, lengthBytes, HostConfigFlags::flags.GenerateLibraryByteCodeHeader, libraryName)); + IfFailGo(CreateLibraryByteCode(fileContents)); } else if (HostConfigFlags::flags.SerializedIsEnabled) { @@ -1245,7 +1249,7 @@ int _cdecl wmain(int argc, __in_ecount(argc) LPWSTR argv[]) { // TODO: Error checking JITProcessManager::StartRpcServer(argc, argv); - ChakraRTInterface::ConnectJITServer(JITProcessManager::GetRpcProccessHandle(), nullptr, JITProcessManager::GetRpcConnectionId()); + ChakraRTInterface::JsConnectJITProcess(JITProcessManager::GetRpcProccessHandle(), nullptr, JITProcessManager::GetRpcConnectionId()); } #endif HANDLE threadHandle; diff --git a/bin/ch/ch.vcxproj b/bin/ch/ch.vcxproj index 3ea7cb4f6f4..1fc7bf62deb 100644 --- a/bin/ch/ch.vcxproj +++ b/bin/ch/ch.vcxproj @@ -23,15 +23,11 @@ %(AdditionalIncludeDirectories); $(MSBuildThisFileDirectory); $(ChakraCoreRootDirectory)Lib\Common; + $(ChakraCoreRootDirectory)Lib\Runtime; $(ChakraCoreRootDirectory)Bin\ChakraCore; $(IntDir); %(AdditionalIncludeDirectories); - - - $(ChakraCoreRootDirectory)lib\Runtime; - %(AdditionalIncludeDirectories) - ch.def diff --git a/bin/ch/jstoc.py b/bin/ch/jstoc.py index e0be592fb18..a9618054bc9 100755 --- a/bin/ch/jstoc.py +++ b/bin/ch/jstoc.py @@ -23,7 +23,7 @@ def convert(): if os.path.isfile(js_file_name) == False: print_usage() - h_file_name = js_file_name + '.h' + h_file_name = os.path.basename(js_file_name) + '.h' js_file_time = os.path.getmtime(js_file_name) h_file_time = 0 diff --git a/bin/ch/stdafx.h b/bin/ch/stdafx.h index 8618b69d5bb..730a33c9fb9 100644 --- a/bin/ch/stdafx.h +++ b/bin/ch/stdafx.h @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #pragma once @@ -56,16 +57,16 @@ #if defined(DBG) -#define _STRINGIZE_(x) #x -#if !defined(_STRINGIZE) -#define _STRINGIZE(x) _STRINGIZE_(x) +#if !defined(CHAKRACORE_STRINGIZE) +#define CHAKRACORE_STRINGIZE_IMPL(x) #x +#define CHAKRACORE_STRINGIZE(x) CHAKRACORE_STRINGIZE_IMPL(x) #endif #define AssertMsg(exp, comment) \ do { \ if (!(exp)) \ { \ - fprintf(stderr, "ASSERTION (%s, line %d) %s %s\n", __FILE__, __LINE__, _STRINGIZE(exp), comment); \ + fprintf(stderr, "ASSERTION (%s, line %d) %s %s\n", __FILE__, __LINE__, CHAKRACORE_STRINGIZE(exp), comment); \ fflush(stderr); \ DebugBreak(); \ } \ @@ -129,7 +130,6 @@ do { \ if ((jsErrorCode) != JsNoError) { \ fwprintf(stderr, _u("ERROR: ") _u(#expr) _u(" failed. JsErrorCode=0x%x (%s)\n"), jsErrorCode, Helpers::JsErrorCodeToString(jsErrorCode)); \ fflush(stderr); \ - Assert(false); \ return JS_INVALID_REFERENCE; \ } \ } while (0) @@ -140,7 +140,6 @@ do { \ if ((jsErrorCode) != JsNoError) { \ fwprintf(stderr, _u("ERROR: ") _u(#expr) _u(" failed. JsErrorCode=0x%x (%s)\n"), jsErrorCode, Helpers::JsErrorCodeToString(jsErrorCode)); \ fflush(stderr); \ - Assert(false); \ return false; \ } \ } while (0) @@ -199,6 +198,7 @@ class AutoString JsErrorCode Initialize(JsValueRef value) { + errorCode = JsNoError; JsValueRef strValue; JsValueType type; ChakraRTInterface::JsGetValueType(value, &type); diff --git a/bin/rl/rl.cpp b/bin/rl/rl.cpp index e1a8f9b503f..99e1a5bd178 100644 --- a/bin/rl/rl.cpp +++ b/bin/rl/rl.cpp @@ -4620,7 +4620,13 @@ UpdateTitleStatus() // start at 1: skip primary thread 0 (unless we decide to let it do real work) for (i = 1; i <= NumberOfThreads; i++) { ThreadInfo[i].GetCurrentTest(tempBuf); - s += sprintf_s(s, REMAININGARRAYLEN(TitleStatus, s), "; %s", tempBuf); + size_t remainingCount = REMAININGARRAYLEN(TitleStatus, s); + size_t testLen = strnlen_s(tempBuf, BUFFER_SIZE); + // Accounting for formatting string and endofbuffer char. + if ((testLen + 3) >= remainingCount) { + break; + } + s += sprintf_s(s, remainingCount, "; %s", tempBuf); } LeaveCriticalSection(&csTitleBar); diff --git a/build.sh b/build.sh index 746666a66a3..99ac49fa72a 100755 --- a/build.sh +++ b/build.sh @@ -1,6 +1,7 @@ #!/bin/bash #------------------------------------------------------------------------------------------------------- # Copyright (C) Microsoft. All rights reserved. +# Copyright (c) ChakraCore Project Contributors. All rights reserved. # Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. #------------------------------------------------------------------------------------------------------- @@ -121,13 +122,13 @@ WB_CHECK= WB_ANALYZE= WB_ARGS= TARGET_PATH=0 -VALGRIND=0 +VALGRIND="" # -DCMAKE_EXPORT_COMPILE_COMMANDS=ON useful for clang-query tool CMAKE_EXPORT_COMPILE_COMMANDS="-DCMAKE_EXPORT_COMPILE_COMMANDS=ON" LIBS_ONLY_BUILD= ALWAYS_YES= CCACHE_NAME= -PYTHON2_BINARY=$(which python2.7 || which python2 || which python 2> /dev/null) +PYTHON_BINARY=$(which python3 || which python || which python2.7 || which python2 || which python 2> /dev/null) UNAME_S=`uname -s` if [[ $UNAME_S =~ 'Linux' ]]; then @@ -203,7 +204,7 @@ while [[ $# -gt 0 ]]; do ;; -t | --test-build) - BUILD_TYPE="Test" + BUILD_TYPE="RelWithDebInfo" ;; -j | --jobs) @@ -406,42 +407,7 @@ while [[ $# -gt 0 ]]; do done if [[ $USE_LOCAL_ICU == 1 ]]; then - LOCAL_ICU_DIR="$CHAKRACORE_DIR/deps/Chakra.ICU/icu" - if [[ ! -d $LOCAL_ICU_DIR ]]; then - "$PYTHON2_BINARY" "$CHAKRACORE_DIR/tools/icu/configure.py" 57.1 $ALWAYS_YES - fi - - # if there is still no directory, then the user declined the license agreement - if [[ ! -d $LOCAL_ICU_DIR ]]; then - echo "You must accept the ICU license agreement in order to use this configuration" - exit 1 - fi - - LOCAL_ICU_DIST="$LOCAL_ICU_DIR/output" - - if [ ! -d "$LOCAL_ICU_DIST" ]; then - set -e - - pushd "$LOCAL_ICU_DIR/source" - - ./configure --with-data-packaging=static\ - --prefix="$LOCAL_ICU_DIST"\ - --enable-static\ - --disable-shared\ - --with-library-bits=64\ - --disable-icuio\ - --disable-layout\ - --disable-tests\ - --disable-samples\ - CXXFLAGS="-fPIC"\ - CFLAGS="-fPIC" - - ERROR_EXIT "rm -rf $LOCAL_ICU_DIST" - make STATICCFLAGS="-fPIC" STATICCXXFLAGS="-fPIC" STATICCPPFLAGS="-DPIC" install - ERROR_EXIT "rm -rf $LOCAL_ICU_DIST" - popd - fi - CMAKE_ICU="-DICU_INCLUDE_PATH_SH=$LOCAL_ICU_DIST/include" + CMAKE_ICU="-DEMBED_ICU_SH=ON" fi if [[ "$MAKE" == "ninja" ]]; then @@ -573,17 +539,23 @@ export TARGET_PATH if [[ $HAS_LTTNG == 1 ]]; then CHAKRACORE_ROOT=`dirname $0` - "$PYTHON2_BINARY" $CHAKRACORE_ROOT/tools/lttng.py --man $CHAKRACORE_ROOT/manifests/Microsoft-Scripting-Chakra-Instrumentation.man --intermediate $TARGET_PATH/intermediate + "$PYTHON_BINARY" $CHAKRACORE_ROOT/tools/lttng.py --man $CHAKRACORE_ROOT/manifests/Microsoft-Scripting-Chakra-Instrumentation.man --intermediate $TARGET_PATH/intermediate mkdir -p $TARGET_PATH/lttng (diff -q $TARGET_PATH/intermediate/lttng/jscriptEtw.h $TARGET_PATH/lttng/jscriptEtw.h && echo "jscriptEtw.h up to date; skipping") || cp $TARGET_PATH/intermediate/lttng/* $TARGET_PATH/lttng/ fi -BUILD_DIRECTORY="${TARGET_PATH}/${BUILD_TYPE:0}" +if [[ ${BUILD_TYPE} =~ "RelWithDebInfo" ]]; then + BUILD_TYPE_DIR=Test +else + BUILD_TYPE_DIR=${BUILD_TYPE} +fi + +BUILD_DIRECTORY="${TARGET_PATH}/${BUILD_TYPE_DIR:0}" echo "Build path: ${BUILD_DIRECTORY}" -BUILD_RELATIVE_DIRECTORY=$("$PYTHON2_BINARY" -c "import os.path;print \ - os.path.relpath('${CHAKRACORE_DIR}', '$BUILD_DIRECTORY')") +BUILD_RELATIVE_DIRECTORY=$("$PYTHON_BINARY" -c "from __future__ import print_function; import os.path;\ + print(os.path.relpath('${CHAKRACORE_DIR}', '$BUILD_DIRECTORY'))") ################# Write-barrier check/analyze run ################# WB_FLAG= @@ -637,13 +609,6 @@ if [[ $WB_CHECK || $WB_ANALYZE ]]; then fi fi -# prepare DbgController.js.h -CH_DIR="${CHAKRACORE_DIR}/bin/ch" -"${CH_DIR}/jstoc.py" "${CH_DIR}/DbgController.js" controllerScript -if [[ $? != 0 ]]; then - exit 1 -fi - if [ ! -d "$BUILD_DIRECTORY" ]; then SAFE_RUN `mkdir -p $BUILD_DIRECTORY` fi @@ -655,6 +620,9 @@ if [[ $ARCH =~ "x86" ]]; then elif [[ $ARCH =~ "arm" ]]; then ARCH="-DCC_TARGETS_ARM_SH=1" echo "Compile Target : arm" +elif [[ $ARCH =~ "arm64" ]]; then + ARCH="-DCC_TARGETS_ARM64_SH=1" + echo "Compile Target : arm64" elif [[ $ARCH =~ "amd64" ]]; then ARCH="-DCC_TARGETS_AMD64_SH=1" echo "Compile Target : amd64" @@ -663,12 +631,13 @@ else echo "Compile Target : System Default" fi -echo Generating $BUILD_TYPE makefiles +echo Generating $BUILD_TYPE build echo $EXTRA_DEFINES -cmake $CMAKE_GEN $CC_PREFIX $CMAKE_ICU $LTO $LTTNG $STATIC_LIBRARY $ARCH $TARGET_OS \ - $ENABLE_CC_XPLAT_TRACE $EXTRA_DEFINES -DCMAKE_BUILD_TYPE=$BUILD_TYPE $SANITIZE $NO_JIT $CMAKE_INTL \ - $WITHOUT_FEATURES $WB_FLAG $WB_ARGS $CMAKE_EXPORT_COMPILE_COMMANDS $LIBS_ONLY_BUILD\ - $VALGRIND $BUILD_RELATIVE_DIRECTORY $CCACHE_NAME +cmake $CMAKE_GEN -DCHAKRACORE_BUILD_SH=ON $CC_PREFIX $CMAKE_ICU $LTO $LTTNG \ + $STATIC_LIBRARY $ARCH $TARGET_OS \ $ENABLE_CC_XPLAT_TRACE $EXTRA_DEFINES \ + -DCMAKE_BUILD_TYPE=$BUILD_TYPE $SANITIZE $NO_JIT $CMAKE_INTL \ + $WITHOUT_FEATURES $WB_FLAG $WB_ARGS $CMAKE_EXPORT_COMPILE_COMMANDS \ + $LIBS_ONLY_BUILD $VALGRIND $BUILD_RELATIVE_DIRECTORY $CCACHE_NAME _RET=$? if [[ $? == 0 ]]; then diff --git a/deps/Chakra.ICU/Chakra.ICU.Build.props b/deps/Chakra.ICU/Chakra.ICU.Build.props index 0994ed09a0c..14eb2a7adb2 100644 --- a/deps/Chakra.ICU/Chakra.ICU.Build.props +++ b/deps/Chakra.ICU/Chakra.ICU.Build.props @@ -27,7 +27,7 @@ UCONFIG_NO_REGULAR_EXPRESSIONS=1; UCONFIG_NO_SERVICE=1; %(PreprocessorDefinitions) - + @@ -36,6 +36,9 @@ _CRT_SECURE_NO_DEPRECATE; %(PreprocessorDefinitions) + + + /utf-8 %(AdditionalOptions) diff --git a/deps/Chakra.ICU/Chakra.ICU.i18n.vcxproj b/deps/Chakra.ICU/Chakra.ICU.i18n.vcxproj index 8804a55dbca..de51a2f1bd4 100644 --- a/deps/Chakra.ICU/Chakra.ICU.i18n.vcxproj +++ b/deps/Chakra.ICU/Chakra.ICU.i18n.vcxproj @@ -31,9 +31,6 @@ %(AdditionalIncludeDirectories); $(IcuSourceDirectory)\common - - - /utf-8 %(AdditionalOptions) Console diff --git a/jenkins/buildone.cmd b/jenkins/buildone.cmd deleted file mode 100644 index ddd3b03cd85..00000000000 --- a/jenkins/buildone.cmd +++ /dev/null @@ -1,61 +0,0 @@ -::------------------------------------------------------------------------------------------------------- -:: Copyright (C) Microsoft. All rights reserved. -:: Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. -::------------------------------------------------------------------------------------------------------- - -@echo off -setlocal - -REM set TEMP and TMP to a new temp folder under the WORKSPACE and create it -set TEMP=%WORKSPACE%\TEMP -set TMP=%TEMP% -REM create the TMP folder if it doesn't exist -if not exist %TEMP% ( - mkdir %TEMP% -) - -if "%_ENTRY_SCRIPT_NAME%"=="" ( - set _ENTRY_SCRIPT_NAME=%0 -) - -REM check that we have enough parameters -if "%1"=="" ( - goto :usage -) -if "%2"=="" ( - goto :usage -) - -:: ============================================================================ -:: Main script -:: ============================================================================ -:main - - set JENKINS_BUILD=True - call %~dp0..\test\jenkins.buildone.cmd %* - - goto :end - -:: ============================================================================ -:: Not enough params -:: ============================================================================ -:usage - - echo Not enough parameters. Please specify architecture and type. - echo Examples: - echo. - echo %_ENTRY_SCRIPT_NAME% x86 debug - echo %_ENTRY_SCRIPT_NAME% x86 test - echo %_ENTRY_SCRIPT_NAME% x86 release - echo. - echo %_ENTRY_SCRIPT_NAME% x64 debug - echo %_ENTRY_SCRIPT_NAME% x64 test - echo %_ENTRY_SCRIPT_NAME% x64 release - - goto :end - -:: ============================================================================ -:: Epilogue of script (cleanup) -:: ============================================================================ -:end -endlocal diff --git a/jenkins/get_system_info.sh b/jenkins/get_system_info.sh deleted file mode 100755 index 308f593e3f3..00000000000 --- a/jenkins/get_system_info.sh +++ /dev/null @@ -1,74 +0,0 @@ -#------------------------------------------------------------------------------------------------------- -# Copyright (C) Microsoft. All rights reserved. -# Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. -#------------------------------------------------------------------------------------------------------- - -if [[ $# -eq 0 ]]; then - echo "No platform passed in- assuming Linux" - _PLATFORM="linux" -fi - -while [[ $# -gt 0 ]]; do - case "$1" in - --linux) - _PLATFORM="linux" - ;; - --osx) - _PLATFORM="osx" - ;; - esac - - shift -done - -echo -echo "==================================================" -echo - -if [[ $_PLATFORM =~ "linux" ]]; then - echo "Number of processors (nproc):" - echo - nproc -elif [[ $_PLATFORM =~ "osx" ]]; then - echo "Number of processors (sysctl -n hw.logicalcpu):" - echo - sysctl -n hw.logicalcpu -else - echo "Unknown platform" - exit 1 -fi - -echo -echo "--------------------------------------------------" -echo - -if [[ $_PLATFORM =~ "linux" ]]; then - echo "Linux version (lsb_release -a):" - echo - lsb_release -a -elif [[ $_PLATFORM =~ "osx" ]]; then - echo "OS X version (sw_vers -productVersion):" - echo - sw_vers -productVersion -fi - - -echo -echo "--------------------------------------------------" -echo - -echo "Clang version (clang --version):" -echo -clang --version - -echo -echo "--------------------------------------------------" -echo - -echo "cmake version (cmake --version):" -echo -cmake --version - -echo -echo "==================================================" -echo diff --git a/lib/Backend/AsmJsJITInfo.cpp b/lib/Backend/AsmJsJITInfo.cpp index c62cb8ba7df..5a5bae12fa7 100644 --- a/lib/Backend/AsmJsJITInfo.cpp +++ b/lib/Backend/AsmJsJITInfo.cpp @@ -97,4 +97,4 @@ AsmJsJITInfo::AccessNeedsBoundCheck(uint offset) const { return offset >= 0x10000; } -#endif \ No newline at end of file +#endif diff --git a/lib/Backend/BackendApi.cpp b/lib/Backend/BackendApi.cpp index 134555f1a08..cfd7b5c6579 100644 --- a/lib/Backend/BackendApi.cpp +++ b/lib/Backend/BackendApi.cpp @@ -126,7 +126,7 @@ Js::JavascriptMethod GetCheckAsmJsCodeGenThunk() uint GetBailOutRegisterSaveSlotCount() { - // REVIEW: not all registers are used, we are allocating more space then necessary. + // REVIEW: not all registers are used, we are allocating more space than necessary. return LinearScanMD::GetRegisterSaveSlotCount(); } @@ -142,10 +142,10 @@ void CheckIsExecutable(Js::RecyclableObject * function, Js::JavascriptMethod ent { Js::ScriptContext * scriptContext = function->GetScriptContext(); // it's easy to call the default entry point from RecyclableObject. - AssertMsg((Js::JavascriptFunction::Is(function) && Js::JavascriptFunction::FromVar(function)->IsExternalFunction()) + AssertMsg((Js::VarIs(function) && Js::VarTo(function)->IsExternalFunction()) || Js::CrossSite::IsThunk(entrypoint) // External object with entrypoint - || (!Js::JavascriptFunction::Is(function) + || (!Js::VarIs(function) && function->IsExternal() && Js::JavascriptConversion::IsCallable(function)) || !scriptContext->IsActuallyClosed() @@ -160,7 +160,7 @@ void CheckIsExecutable(Js::RecyclableObject * function, Js::JavascriptMethod ent { return; } - + Js::TypeId typeId = Js::JavascriptOperators::GetTypeId(function); if (typeId == Js::TypeIds_HostDispatch) { diff --git a/lib/Backend/BackendOpCodeAttrAsmJs.cpp b/lib/Backend/BackendOpCodeAttrAsmJs.cpp index b647a421376..c52dc963a08 100644 --- a/lib/Backend/BackendOpCodeAttrAsmJs.cpp +++ b/lib/Backend/BackendOpCodeAttrAsmJs.cpp @@ -68,4 +68,4 @@ namespace OpCodeAttrAsmJs } }; // OpCodeAttrAsmJs -#endif \ No newline at end of file +#endif diff --git a/lib/Backend/BackendOpCodeAttrAsmJs.h b/lib/Backend/BackendOpCodeAttrAsmJs.h index d267d7516f6..d43359aea99 100644 --- a/lib/Backend/BackendOpCodeAttrAsmJs.h +++ b/lib/Backend/BackendOpCodeAttrAsmJs.h @@ -12,4 +12,4 @@ namespace OpCodeAttrAsmJs bool HasProfiledOp(Js::OpCodeAsmJs opcode); bool IsProfiledOp(Js::OpCodeAsmJs opcode); }; -#endif \ No newline at end of file +#endif diff --git a/lib/Backend/BackwardPass.cpp b/lib/Backend/BackwardPass.cpp index e73fce97fa9..4a3c567f586 100644 --- a/lib/Backend/BackwardPass.cpp +++ b/lib/Backend/BackwardPass.cpp @@ -87,13 +87,11 @@ BackwardPass::DoMarkTempNumbers() const } bool -BackwardPass::DoMarkTempObjects() const -{ - // only mark temp object on the backward store phase - return (tag == Js::BackwardPhase) && !PHASE_OFF(Js::MarkTempPhase, this->func) && - !PHASE_OFF(Js::MarkTempObjectPhase, this->func) && func->DoGlobOpt() && func->GetHasTempObjectProducingInstr() && - !func->IsJitInDebugMode() && - func->DoGlobOptsForGeneratorFunc(); +BackwardPass::SatisfyMarkTempObjectsConditions() const { + return !PHASE_OFF(Js::MarkTempPhase, this->func) && + !PHASE_OFF(Js::MarkTempObjectPhase, this->func) && + func->DoGlobOpt() && func->GetHasTempObjectProducingInstr() && + !func->IsJitInDebugMode(); // Why MarkTempObject is disabled under debugger: // We add 'identified so far dead non-temp locals' to byteCodeUpwardExposedUsed in ProcessBailOutInfo, @@ -101,6 +99,13 @@ BackwardPass::DoMarkTempObjects() const // from a temp to non-temp. That's in general not a supported conversion (while non-temp -> temp is fine). } +bool +BackwardPass::DoMarkTempObjects() const +{ + // only mark temp object on the backward store phase + return (tag == Js::BackwardPhase) && SatisfyMarkTempObjectsConditions(); +} + bool BackwardPass::DoMarkTempNumbersOnTempObjects() const { @@ -112,8 +117,7 @@ bool BackwardPass::DoMarkTempObjectVerify() const { // only mark temp object on the backward store phase - return (tag == Js::DeadStorePhase) && !PHASE_OFF(Js::MarkTempPhase, this->func) && - !PHASE_OFF(Js::MarkTempObjectPhase, this->func) && func->DoGlobOpt() && func->GetHasTempObjectProducingInstr(); + return (tag == Js::DeadStorePhase) && SatisfyMarkTempObjectsConditions(); } #endif @@ -150,8 +154,7 @@ BackwardPass::DoDeadStore(Func* func, StackSym* sym) // Dead store is disabled under debugger for non-temp local vars. return DoDeadStore(func) && - !(func->IsJitInDebugMode() && sym->HasByteCodeRegSlot() && func->IsNonTempLocalVar(sym->GetByteCodeRegSlot())) && - func->DoGlobOptsForGeneratorFunc(); + !(func->IsJitInDebugMode() && sym->HasByteCodeRegSlot() && func->IsNonTempLocalVar(sym->GetByteCodeRegSlot())); } bool @@ -162,8 +165,7 @@ BackwardPass::DoTrackNegativeZero() const !PHASE_OFF(Js::TrackNegativeZeroPhase, func) && func->DoGlobOpt() && !IsPrePass() && - !func->IsJitInDebugMode() && - func->DoGlobOptsForGeneratorFunc(); + !func->IsJitInDebugMode(); } bool @@ -175,8 +177,7 @@ BackwardPass::DoTrackBitOpsOrNumber() const tag == Js::BackwardPhase && func->DoGlobOpt() && !IsPrePass() && - !func->IsJitInDebugMode() && - func->DoGlobOptsForGeneratorFunc(); + !func->IsJitInDebugMode(); #else return false; #endif @@ -191,8 +192,7 @@ BackwardPass::DoTrackIntOverflow() const tag == Js::BackwardPhase && !IsPrePass() && globOpt->DoLossyIntTypeSpec() && - !func->IsJitInDebugMode() && - func->DoGlobOptsForGeneratorFunc(); + !func->IsJitInDebugMode(); } bool @@ -232,6 +232,7 @@ BackwardPass::CleanupBackwardPassInfoInFlowGraph() block->typesNeedingKnownObjectLayout = nullptr; block->slotDeadStoreCandidates = nullptr; block->byteCodeUpwardExposedUsed = nullptr; + block->liveFixedFields = nullptr; #if DBG block->byteCodeRestoreSyms = nullptr; block->excludeByteCodeUpwardExposedTracking = nullptr; @@ -307,9 +308,11 @@ void BackwardPass::MarkScopeObjSymUseForStackArgOpt() { IR::Instr * instr = this->currentInstr; + BasicBlock *block = this->currentBlock; + if (tag == Js::DeadStorePhase) { - if (instr->DoStackArgsOpt(this->func) && instr->m_func->GetScopeObjSym() != nullptr && this->DoByteCodeUpwardExposedUsed()) + if (instr->DoStackArgsOpt() && !block->IsLandingPad() && instr->m_func->GetScopeObjSym() != nullptr && this->DoByteCodeUpwardExposedUsed()) { this->currentBlock->byteCodeUpwardExposedUsed->Set(instr->m_func->GetScopeObjSym()->m_id); } @@ -321,16 +324,17 @@ BackwardPass::ProcessBailOnStackArgsOutOfActualsRange() { IR::Instr * instr = this->currentInstr; - if (tag == Js::DeadStorePhase && - (instr->m_opcode == Js::OpCode::LdElemI_A || instr->m_opcode == Js::OpCode::TypeofElem) && + if (tag == Js::DeadStorePhase && + (instr->m_opcode == Js::OpCode::LdElemI_A || instr->m_opcode == Js::OpCode::TypeofElem) && instr->HasBailOutInfo() && !IsPrePass()) { - if (instr->DoStackArgsOpt(this->func)) + if (instr->DoStackArgsOpt()) { AssertMsg(instr->GetBailOutKind() & IR::BailOnStackArgsOutOfActualsRange, "Stack args bail out is not set when the optimization is turned on? "); if (instr->GetBailOutKind() & ~IR::BailOnStackArgsOutOfActualsRange) { - Assert(instr->GetBailOutKind() == (IR::BailOnStackArgsOutOfActualsRange | IR::BailOutOnImplicitCallsPreOp)); + //Make sure that in absence of potential LazyBailOut and BailOutOnImplicitCallsPreOp, we only have BailOnStackArgsOutOfActualsRange bit set + Assert((BailOutInfo::WithoutLazyBailOut(instr->GetBailOutKind() & ~IR::BailOutOnImplicitCallsPreOp)) == IR::BailOnStackArgsOutOfActualsRange); //We are sure at this point, that we will not have any implicit calls as we wouldn't have done this optimization in the first place. instr->SetBailOutKind(IR::BailOnStackArgsOutOfActualsRange); } @@ -486,6 +490,7 @@ BackwardPass::MergeSuccBlocksInfo(BasicBlock * block) BVSparse * slotDeadStoreCandidates = nullptr; BVSparse * byteCodeUpwardExposedUsed = nullptr; BVSparse * couldRemoveNegZeroBailoutForDef = nullptr; + BVSparse * liveFixedFields = nullptr; #if DBG uint byteCodeLocalsCount = func->GetJITFunctionBody()->GetLocalsCount(); StackSym ** byteCodeRestoreSyms = nullptr; @@ -513,6 +518,7 @@ BackwardPass::MergeSuccBlocksInfo(BasicBlock * block) if (!block->isDead) { bool keepUpwardExposed = (this->tag == Js::BackwardPhase); + JitArenaAllocator *upwardExposedArena = nullptr; if(!IsCollectionPass()) { @@ -522,6 +528,7 @@ BackwardPass::MergeSuccBlocksInfo(BasicBlock * block) if (this->tag == Js::DeadStorePhase) { + liveFixedFields = JitAnew(this->tempAlloc, BVSparse, this->tempAlloc); typesNeedingKnownObjectLayout = JitAnew(this->tempAlloc, BVSparse, this->tempAlloc); } @@ -659,6 +666,13 @@ BackwardPass::MergeSuccBlocksInfo(BasicBlock * block) || (blockSucc->isLoopHeader && (this->IsPrePass() || blockSucc->loop->IsDescendentOrSelf(block->loop))) || !this->DoMarkTempObjectVerify()); + if (this->tag == Js::DeadStorePhase && blockSucc->liveFixedFields != nullptr) + { + liveFixedFields->Or(blockSucc->liveFixedFields); + JitAdelete(this->tempAlloc, blockSucc->liveFixedFields); + blockSucc->liveFixedFields = nullptr; + } + if (blockSucc->upwardExposedUses != nullptr) { upwardExposedUses->Or(blockSucc->upwardExposedUses); @@ -737,7 +751,7 @@ BackwardPass::MergeSuccBlocksInfo(BasicBlock * block) this->func->GetDebugNumberSet(debugStringBuffer), block->GetBlockNum(), blockSucc->GetBlockNum()); - auto fixupFrom = [block, blockSucc, this](Bucket &bucket) + auto fixupFrom = [block, blockSucc, upwardExposedUses, this](Bucket &bucket) { AddPropertyCacheBucket *fromData = &bucket.element; if (fromData->GetInitialType() == nullptr || @@ -746,10 +760,10 @@ BackwardPass::MergeSuccBlocksInfo(BasicBlock * block) return; } - this->InsertTypeTransitionsAtPriorSuccessors(block, blockSucc, bucket.value, fromData); + this->InsertTypeTransitionsAtPriorSuccessors(block, blockSucc, bucket.value, fromData, upwardExposedUses); }; - auto fixupTo = [blockSucc, this](Bucket &bucket) + auto fixupTo = [blockSucc, upwardExposedUses, this](Bucket &bucket) { AddPropertyCacheBucket *toData = &bucket.element; if (toData->GetInitialType() == nullptr || @@ -758,7 +772,7 @@ BackwardPass::MergeSuccBlocksInfo(BasicBlock * block) return; } - this->InsertTypeTransitionAtBlock(blockSucc, bucket.value, toData); + this->InsertTypeTransitionAtBlock(blockSucc, bucket.value, toData, upwardExposedUses); }; if (blockSucc->stackSymToFinalType != nullptr) @@ -935,6 +949,7 @@ BackwardPass::MergeSuccBlocksInfo(BasicBlock * block) blockSucc->couldRemoveNegZeroBailoutForDef = nullptr; } } + this->CombineTypeIDsWithFinalType(block, blockSucc); } if (blockSucc->noImplicitCallUses != nullptr) @@ -1197,6 +1212,7 @@ BackwardPass::MergeSuccBlocksInfo(BasicBlock * block) block->noImplicitCallJsArrayHeadSegmentSymUses = noImplicitCallJsArrayHeadSegmentSymUses; block->noImplicitCallArrayLengthSymUses = noImplicitCallArrayLengthSymUses; block->couldRemoveNegZeroBailoutForDef = couldRemoveNegZeroBailoutForDef; + block->liveFixedFields = liveFixedFields; } ObjTypeGuardBucket @@ -1333,6 +1349,12 @@ BackwardPass::DeleteBlockData(BasicBlock * block) JitAdelete(this->tempAlloc, block->noImplicitCallArrayLengthSymUses); block->noImplicitCallArrayLengthSymUses = nullptr; } + if (block->liveFixedFields != nullptr) + { + JitArenaAllocator *liveFixedFieldsArena = this->tempAlloc; + JitAdelete(liveFixedFieldsArena, block->liveFixedFields); + block->liveFixedFields = nullptr; + } if (block->upwardExposedUses != nullptr) { JitArenaAllocator *upwardExposedArena = (this->tag == Js::BackwardPhase) ? this->globOpt->alloc : this->tempAlloc; @@ -1719,19 +1741,19 @@ BackwardPass::ProcessBailOutArgObj(BailOutInfo * bailOutInfo, BVSparseTestAndClear(symId)) { - if (bailOutInfo->usedCapturedValues.argObjSyms == nullptr) + if (bailOutInfo->usedCapturedValues->argObjSyms == nullptr) { - bailOutInfo->usedCapturedValues.argObjSyms = JitAnew(this->func->m_alloc, + bailOutInfo->usedCapturedValues->argObjSyms = JitAnew(this->func->m_alloc, BVSparse, this->func->m_alloc); } - bailOutInfo->usedCapturedValues.argObjSyms->Set(symId); + bailOutInfo->usedCapturedValues->argObjSyms->Set(symId); } } NEXT_BITSET_IN_SPARSEBV; } - if (bailOutInfo->usedCapturedValues.argObjSyms) + if (bailOutInfo->usedCapturedValues->argObjSyms) { - byteCodeUpwardExposedUsed->Minus(bailOutInfo->usedCapturedValues.argObjSyms); + byteCodeUpwardExposedUsed->Minus(bailOutInfo->usedCapturedValues->argObjSyms); } } @@ -1741,7 +1763,7 @@ BackwardPass::ProcessBailOutConstants(BailOutInfo * bailOutInfo, BVSparsetag != Js::BackwardPhase); // Remove constants that we are already going to restore - SListBase * usedConstantValues = &bailOutInfo->usedCapturedValues.constantValues; + SListBase * usedConstantValues = &bailOutInfo->usedCapturedValues->constantValues; FOREACH_SLISTBASE_ENTRY(ConstantStackSymValue, value, usedConstantValues) { byteCodeUpwardExposedUsed->Clear(value.Key()->m_id); @@ -1749,9 +1771,17 @@ BackwardPass::ProcessBailOutConstants(BailOutInfo * bailOutInfo, BVSparsebailInInstr; + // Find other constants that we need to restore FOREACH_SLISTBASE_ENTRY_EDITING(ConstantStackSymValue, value, &bailOutInfo->capturedValues->constantValues, iter) { + if (bailInInstr) + { + // Store all captured constant values for the corresponding bailin instr + bailInInstr->capturedValues.constantValues.PrependNode(this->func->m_alloc, value); + } + if (byteCodeUpwardExposedUsed->TestAndClear(value.Key()->m_id) || bailoutReferencedArgSymsBv->TestAndClear(value.Key()->m_id)) { // Constant need to be restore, move it to the restore list @@ -1773,7 +1803,7 @@ BackwardPass::ProcessBailOutCopyProps(BailOutInfo * bailOutInfo, BVSparsefunc->GetJITFunctionBody()->IsAsmJsMode()); // Remove copy prop that we were already going to restore - SListBase * usedCopyPropSyms = &bailOutInfo->usedCapturedValues.copyPropSyms; + SListBase * usedCopyPropSyms = &bailOutInfo->usedCapturedValues->copyPropSyms; FOREACH_SLISTBASE_ENTRY(CopyPropSyms, copyPropSyms, usedCopyPropSyms) { byteCodeUpwardExposedUsed->Clear(copyPropSyms.Key()->m_id); @@ -1784,6 +1814,7 @@ BackwardPass::ProcessBailOutCopyProps(BailOutInfo * bailOutInfo, BVSparsefunc->m_alloc; BasicBlock * block = this->currentBlock; BVSparse * upwardExposedUses = block->upwardExposedUses; + IR::GeneratorBailInInstr* bailInInstr = bailOutInfo->bailInInstr; // Find other copy prop that we need to restore FOREACH_SLISTBASE_ENTRY_EDITING(CopyPropSyms, copyPropSyms, &bailOutInfo->capturedValues->copyPropSyms, iter) @@ -1793,6 +1824,13 @@ BackwardPass::ProcessBailOutCopyProps(BailOutInfo * bailOutInfo, BVSparseIsTypeSpec()); if (byteCodeUpwardExposedUsed->TestAndClear(copyPropSyms.Key()->m_id) || bailoutReferencedArgSymsBv->TestAndClear(copyPropSyms.Key()->m_id)) { + if (bailInInstr) + { + // Copy all copyprop syms into the corresponding bail-in instr so that + // we can map the correct symbols to restore during bail-in + bailInInstr->capturedValues.copyPropSyms.PrependNode(allocator, copyPropSyms); + } + // This copy-prop sym needs to be restored; add it to the restore list. /* @@ -1839,7 +1877,7 @@ BackwardPass::ProcessBailOutCopyProps(BailOutInfo * bailOutInfo, BVSparseGetByteCodeOffset() == Js::Constants::NoByteCodeOffset || bailOutInfo->bailOutOffset > instr->GetByteCodeOffset()) { - // Currently, we only have post-op bailout with BailOutOnImplicitCalls - // or JIT inserted operation (which no byte code offsets). + // Currently, we only have post-op bailout with BailOutOnImplicitCalls, + // LazyBailOut, or JIT inserted operation (which no byte code offsets). // If there are other bailouts that we want to bailout after the operation, // we have to make sure that it still doesn't do the implicit call // if it is done on the stack object. // Otherwise, the stack object will be passed to the implicit call functions. Assert(instr->GetByteCodeOffset() == Js::Constants::NoByteCodeOffset || (instr->GetBailOutKind() & ~IR::BailOutKindBits) == IR::BailOutOnImplicitCalls + || (instr->GetBailOutKind() & ~IR::BailOutKindBits) == IR::LazyBailOut || (instr->GetBailOutKind() & ~IR::BailOutKindBits) == IR::BailOutInvalid); // This instruction bails out to a later byte-code instruction, so process the bailout info now - ProcessBailOutInfo(instr, bailOutInfo); + this->ProcessBailOutInfo(instr, bailOutInfo); + + if (instr->HasLazyBailOut()) + { + this->ClearDstUseForPostOpLazyBailOut(instr); + } } else { @@ -2172,10 +2216,47 @@ BackwardPass::ProcessBailOutInfo(IR::Instr * instr) } bool -BackwardPass::IsImplicitCallBailOutCurrentlyNeeded(IR::Instr * instr, bool mayNeedImplicitCallBailOut, bool hasLiveFields) +BackwardPass::IsLazyBailOutCurrentlyNeeeded(IR::Instr * instr) const { - return this->globOpt->IsImplicitCallBailOutCurrentlyNeeded(instr, nullptr, nullptr, this->currentBlock, hasLiveFields, mayNeedImplicitCallBailOut, false) || - this->NeedBailOutOnImplicitCallsForTypedArrayStore(instr); + if (!this->func->ShouldDoLazyBailOut()) + { + return false; + } + + Assert(this->tag == Js::DeadStorePhase); + + // We insert potential lazy bailout points in the forward pass, so if the instruction doesn't + // have bailout info at this point, we know for sure lazy bailout is not needed. + if (!instr->HasLazyBailOut() || this->currentBlock->isDead) + { + return false; + } + + AssertMsg( + this->currentBlock->liveFixedFields != nullptr, + "liveFixedField is null, MergeSuccBlocksInfo might have not initialized it?" + ); + + if (instr->IsStFldVariant()) + { + Assert(instr->GetDst()); + Js::PropertyId id = instr->GetDst()->GetSym()->AsPropertySym()->m_propertyId; + + // We only need to protect against SetFld if it is setting to one of the live fixed fields + return this->currentBlock->liveFixedFields->Test(id); + } + + return !this->currentBlock->liveFixedFields->IsEmpty(); +} + +bool +BackwardPass::IsImplicitCallBailOutCurrentlyNeeded(IR::Instr * instr, bool mayNeedImplicitCallBailOut, bool needLazyBailOut, bool hasLiveFields) +{ + return this->globOpt->IsImplicitCallBailOutCurrentlyNeeded( + instr, nullptr /* src1Val */, nullptr /* src2Val */, + this->currentBlock, hasLiveFields, mayNeedImplicitCallBailOut, false /* isForwardPass */, needLazyBailOut + ) || + this->NeedBailOutOnImplicitCallsForTypedArrayStore(instr); } void @@ -2202,7 +2283,7 @@ BackwardPass::DeadStoreTypeCheckBailOut(IR::Instr * instr) return; } - IR::BailOutKind oldBailOutKind = instr->GetBailOutKind(); + const IR::BailOutKind oldBailOutKind = instr->GetBailOutKind(); if (!IR::IsTypeCheckBailOutKind(oldBailOutKind)) { return; @@ -2286,11 +2367,35 @@ BackwardPass::DeadStoreTypeCheckBailOut(IR::Instr * instr) instr->GetBailOutInfo()->polymorphicCacheIndex = (uint)-1; // Keep the mark temp object bit if it is there so that we will not remove the implicit call check - instr->SetBailOutKind(IR::BailOutOnImplicitCallsPreOp | (oldBailOutKind & IR::BailOutMarkTempObject)); + IR::BailOutKind newBailOutKind = IR::BailOutOnImplicitCallsPreOp | (oldBailOutKind & IR::BailOutMarkTempObject); + if (BailOutInfo::HasLazyBailOut(oldBailOutKind)) + { + instr->SetBailOutKind(BailOutInfo::WithLazyBailOut(newBailOutKind)); + } + else + { + instr->SetBailOutKind(newBailOutKind); + } +} + +void +BackwardPass::DeadStoreLazyBailOut(IR::Instr * instr, bool needsLazyBailOut) +{ + if (!this->IsPrePass() && !needsLazyBailOut && instr->HasLazyBailOut()) + { + instr->ClearLazyBailOut(); + if (!instr->HasBailOutInfo()) + { + if (this->preOpBailOutInstrToProcess == instr) + { + this->preOpBailOutInstrToProcess = nullptr; + } + } + } } void -BackwardPass::DeadStoreImplicitCallBailOut(IR::Instr * instr, bool hasLiveFields) +BackwardPass::DeadStoreImplicitCallBailOut(IR::Instr * instr, bool hasLiveFields, bool needsLazyBailOut) { Assert(this->tag == Js::DeadStorePhase); @@ -2309,15 +2414,15 @@ BackwardPass::DeadStoreImplicitCallBailOut(IR::Instr * instr, bool hasLiveFields UpdateArrayBailOutKind(instr); // Install the implicit call PreOp for mark temp object if we need one. - IR::BailOutKind kind = instr->GetBailOutKind(); - IR::BailOutKind kindNoBits = kind & ~IR::BailOutKindBits; - if ((kind & IR::BailOutMarkTempObject) != 0 && kindNoBits != IR::BailOutOnImplicitCallsPreOp) + if ((instr->GetBailOutKind() & IR::BailOutMarkTempObject) != 0 && instr->GetBailOutKindNoBits() != IR::BailOutOnImplicitCallsPreOp) { + IR::BailOutKind kind = instr->GetBailOutKind(); + const IR::BailOutKind kindNoBits = instr->GetBailOutKindNoBits(); Assert(kindNoBits != IR::BailOutOnImplicitCalls); if (kindNoBits == IR::BailOutInvalid) { - // We should only have combined with array bits - Assert((kind & ~IR::BailOutForArrayBits) == IR::BailOutMarkTempObject); + // We should only have combined with array bits or lazy bailout + Assert(BailOutInfo::WithoutLazyBailOut(kind & ~IR::BailOutForArrayBits) == IR::BailOutMarkTempObject); // Don't need to install if we are not going to do helper calls, // or we are in the landingPad since implicit calls are already turned off. if ((kind & IR::BailOutOnArrayAccessHelperCall) == 0 && !this->currentBlock->IsLandingPad()) @@ -2330,9 +2435,10 @@ BackwardPass::DeadStoreImplicitCallBailOut(IR::Instr * instr, bool hasLiveFields // Currently only try to eliminate these bailout kinds. The others are required in cases // where we don't necessarily have live/hoisted fields. - const bool mayNeedBailOnImplicitCall = BailOutInfo::IsBailOutOnImplicitCalls(kind); + const bool mayNeedBailOnImplicitCall = BailOutInfo::IsBailOutOnImplicitCalls(instr->GetBailOutKind()); if (!mayNeedBailOnImplicitCall) { + const IR::BailOutKind kind = instr->GetBailOutKind(); if (kind & IR::BailOutMarkTempObject) { if (kind == IR::BailOutMarkTempObject) @@ -2356,9 +2462,8 @@ BackwardPass::DeadStoreImplicitCallBailOut(IR::Instr * instr, bool hasLiveFields // We have an implicit call bailout in the code, and we want to make sure that it's required. // Do this now, because only in the dead store pass do we have complete forward and backward liveness info. - bool needsBailOutOnImplicitCall = this->IsImplicitCallBailOutCurrentlyNeeded(instr, mayNeedBailOnImplicitCall, hasLiveFields); - - if(!UpdateImplicitCallBailOutKind(instr, needsBailOutOnImplicitCall)) + bool needsBailOutOnImplicitCall = this->IsImplicitCallBailOutCurrentlyNeeded(instr, mayNeedBailOnImplicitCall, needsLazyBailOut, hasLiveFields); + if(!UpdateImplicitCallBailOutKind(instr, needsBailOutOnImplicitCall, needsLazyBailOut)) { instr->ClearBailOutInfo(); if (preOpBailOutInstrToProcess == instr) @@ -2374,6 +2479,80 @@ BackwardPass::DeadStoreImplicitCallBailOut(IR::Instr * instr, bool hasLiveFields } } +bool +BackwardPass::UpdateImplicitCallBailOutKind(IR::Instr* const instr, bool needsBailOutOnImplicitCall, bool needsLazyBailOut) +{ + Assert(instr); + Assert(instr->HasBailOutInfo()); + Assert(BailOutInfo::IsBailOutOnImplicitCalls(instr->GetBailOutKind())); + AssertMsg( + needsLazyBailOut || instr->GetBailOutKind() == BailOutInfo::WithoutLazyBailOut(instr->GetBailOutKind()), + "We should have removed all lazy bailout bit at this point if we decided that we wouldn't need it" + ); + AssertMsg( + !needsLazyBailOut || instr->GetBailOutKind() == BailOutInfo::WithLazyBailOut(instr->GetBailOutKind()), + "The lazy bailout bit should be present at this point. We might have removed it incorrectly." + ); + + IR::BailOutKind bailOutKindWithBits = instr->GetBailOutKind(); + + const bool hasMarkTempObject = bailOutKindWithBits & IR::BailOutMarkTempObject; + + // Firstly, we remove the mark temp object bit, as it is not needed after the dead store pass. + // We will later skip removing BailOutOnImplicitCalls when there is a mark temp object bit regardless + // of `needsBailOutOnImplicitCall`. + if (hasMarkTempObject) + { + bailOutKindWithBits &= ~IR::BailOutMarkTempObject; + instr->SetBailOutKind(bailOutKindWithBits); + } + + if (needsBailOutOnImplicitCall) + { + // We decided that BailOutOnImplicitCall is needed. So lazy bailout is unnecessary + // because we are already protected from potential side effects unless the operation + // itself can change fields' values (StFld/StElem). + if (needsLazyBailOut && !instr->CanChangeFieldValueWithoutImplicitCall()) + { + instr->ClearLazyBailOut(); + } + + return true; + } + else + { + // `needsBailOutOnImplicitCall` also captures our intention to keep BailOutOnImplicitCalls + // because we want to do fixed field lazy bailout optimization. So if we don't need them, + // just remove our lazy bailout. + instr->ClearLazyBailOut(); + if (!instr->HasBailOutInfo()) + { + return true; + } + } + + const IR::BailOutKind bailOutKindWithoutBits = instr->GetBailOutKindNoBits(); + if (!instr->GetBailOutInfo()->canDeadStore) + { + // revisit if canDeadStore is used for anything other than BailOutMarkTempObject + Assert(hasMarkTempObject); + // Don't remove the implicit call pre op bailout for mark temp object. + Assert(bailOutKindWithoutBits == IR::BailOutOnImplicitCallsPreOp); + return true; + } + + // At this point, we don't need the bail on implicit calls. + // Simply use the bailout kind bits as our new bailout kind. + IR::BailOutKind newBailOutKind = bailOutKindWithBits - bailOutKindWithoutBits; + + if (newBailOutKind == IR::BailOutInvalid) + { + return false; + } + + instr->SetBailOutKind(newBailOutKind); + return true; +} bool BackwardPass::NeedBailOutOnImplicitCallsForTypedArrayStore(IR::Instr* instr) @@ -2504,11 +2683,16 @@ BackwardPass::ProcessBailOutInfo(IR::Instr * instr, BailOutInfo * bailOutInfo) BVSparse* tmpBv = nullptr; if (instr->IsBranchInstr()) { - IR::LabelInstr* target = instr->AsBranchInstr()->GetTarget(); + IR::BranchInstr* branchInstr = instr->AsBranchInstr(); + IR::LabelInstr* target = branchInstr->GetTarget(); uint32 targetOffset = target->GetByteCodeOffset(); - if (targetOffset == instr->GetByteCodeOffset()) + + // If the instr's label has the same bytecode offset as the instr then move the targetOffset + // to the next bytecode instr. This can happen when we have airlock blocks or compensation + // code, but also for infinite loops. Don't do it for the latter. + if (targetOffset == instr->GetByteCodeOffset() && block != target->GetBasicBlock()) { - // This can happen if the target is an break or airlock block + // This can happen if the target is a break or airlock block. Assert( target->GetBasicBlock()->isAirLockBlock || target->GetBasicBlock()->isAirLockCompensationBlock || @@ -2518,11 +2702,12 @@ BackwardPass::ProcessBailOutInfo(IR::Instr * instr, BailOutInfo * bailOutInfo) ); targetOffset = target->GetNextByteCodeInstr()->GetByteCodeOffset(); } - BVSparse* branchTargetUpdwardExposed = target->m_func->GetByteCodeOffsetUses(targetOffset); - if (branchTargetUpdwardExposed) + BVSparse* branchTargetUpwardExposed = target->m_func->GetByteCodeOffsetUses(targetOffset); + if (branchTargetUpwardExposed) { - // The bailout should restore both the bailout destination and the branch target since we don't know where we'll end up - trackingByteCodeUpwardExposedUsed = tmpBv = trackingByteCodeUpwardExposedUsed->OrNew(branchTargetUpdwardExposed); + // The bailout should restore both the bailout destination and + // the branch target since we don't know where we'll end up. + trackingByteCodeUpwardExposedUsed = tmpBv = trackingByteCodeUpwardExposedUsed->OrNew(branchTargetUpwardExposed); } } Assert(trackingByteCodeUpwardExposedUsed); @@ -2605,7 +2790,7 @@ BackwardPass::ProcessBailOutInfo(IR::Instr * instr, BailOutInfo * bailOutInfo) tempBv->And(this->func->m_nonTempLocalVars, bailOutInfo->liveVarSyms); // Remove syms that are restored in other ways than byteCodeUpwardExposedUsed. - FOREACH_SLIST_ENTRY(ConstantStackSymValue, value, &bailOutInfo->usedCapturedValues.constantValues) + FOREACH_SLIST_ENTRY(ConstantStackSymValue, value, &bailOutInfo->usedCapturedValues->constantValues) { Assert(value.Key()->HasByteCodeRegSlot() || value.Key()->GetInstrDef()->m_opcode == Js::OpCode::BytecodeArgOutCapture); if (value.Key()->HasByteCodeRegSlot()) @@ -2614,7 +2799,7 @@ BackwardPass::ProcessBailOutInfo(IR::Instr * instr, BailOutInfo * bailOutInfo) } } NEXT_SLIST_ENTRY; - FOREACH_SLIST_ENTRY(CopyPropSyms, value, &bailOutInfo->usedCapturedValues.copyPropSyms) + FOREACH_SLIST_ENTRY(CopyPropSyms, value, &bailOutInfo->usedCapturedValues->copyPropSyms) { Assert(value.Key()->HasByteCodeRegSlot() || value.Key()->GetInstrDef()->m_opcode == Js::OpCode::BytecodeArgOutCapture); if (value.Key()->HasByteCodeRegSlot()) @@ -2623,9 +2808,9 @@ BackwardPass::ProcessBailOutInfo(IR::Instr * instr, BailOutInfo * bailOutInfo) } } NEXT_SLIST_ENTRY; - if (bailOutInfo->usedCapturedValues.argObjSyms) + if (bailOutInfo->usedCapturedValues->argObjSyms) { - tempBv->Minus(bailOutInfo->usedCapturedValues.argObjSyms); + tempBv->Minus(bailOutInfo->usedCapturedValues->argObjSyms); } byteCodeUpwardExposedUsed->Or(tempBv); @@ -2701,6 +2886,7 @@ BackwardPass::ProcessBailOutInfo(IR::Instr * instr, BailOutInfo * bailOutInfo) } }); } + JitAdelete(this->tempAlloc, bailoutReferencedArgSymsBv); if (this->IsPrePass()) @@ -2709,6 +2895,21 @@ BackwardPass::ProcessBailOutInfo(IR::Instr * instr, BailOutInfo * bailOutInfo) } } +void +BackwardPass::ClearDstUseForPostOpLazyBailOut(IR::Instr *instr) +{ + // Refer to comments on BailOutInfo::ClearUseOfDst() + Assert(instr->HasLazyBailOut()); + IR::Opnd *dst = instr->GetDst(); + if (!this->IsPrePass() && dst && dst->IsRegOpnd()) + { + StackSym *stackSym = dst->GetStackSym(); + if (stackSym) { + instr->GetBailOutInfo()->ClearUseOfDst(stackSym->m_id); + } + } +} + void BackwardPass::ProcessBlock(BasicBlock * block) { @@ -2804,7 +3005,12 @@ BackwardPass::ProcessBlock(BasicBlock * block) this->currentInstr = instr; this->currentRegion = this->currentBlock->GetFirstInstr()->AsLabelInstr()->GetRegion(); - + + if (instr->m_opcode == Js::OpCode::Yield && !this->IsCollectionPass()) + { + this->DisallowMarkTempAcrossYield(this->currentBlock->byteCodeUpwardExposedUsed); + } + IR::Instr * insertedInstr = TryChangeInstrForStackArgOpt(); if (insertedInstr != nullptr) { @@ -2834,6 +3040,11 @@ BackwardPass::ProcessBlock(BasicBlock * block) bool hasLiveFields = (block->upwardExposedFields && !block->upwardExposedFields->IsEmpty()); + if (this->tag == Js::DeadStorePhase && block->stackSymToFinalType != nullptr) + { + this->InsertTypeTransitionsAtPotentialKills(); + } + IR::Opnd * opnd = instr->GetDst(); if (opnd != nullptr) { @@ -3255,6 +3466,7 @@ BackwardPass::ProcessBlock(BasicBlock * block) case Js::OpCode::StSlotBoxTemp: case Js::OpCode::StSlotChkUndecl: case Js::OpCode::StSuperFld: + case Js::OpCode::StSuperFldStrict: case Js::OpCode::ProfiledStElemI_A: case Js::OpCode::ProfiledStElemI_A_Strict: case Js::OpCode::ProfiledStFld: @@ -3263,6 +3475,7 @@ BackwardPass::ProcessBlock(BasicBlock * block) case Js::OpCode::ProfiledStRootFld: case Js::OpCode::ProfiledStRootFldStrict: case Js::OpCode::ProfiledStSuperFld: + case Js::OpCode::ProfiledStSuperFldStrict: // Unfortunately, being fed into a store means that we could have aliasing, and the // consequence is that it may be re-read and then dereferenced. Note that we can do // this case if we poison any array symbol that we store to on the way out, but the @@ -3444,6 +3657,21 @@ BackwardPass::ProcessBlock(BasicBlock * block) #endif switch(instr->m_opcode) { + case Js::OpCode::CheckFixedFld: + { + if (!this->IsPrePass()) + { + // Use `propertyId` instead of `propertySymId` to track live fixed fields + // During jit transfer (`CreateFrom()`), all properties that can be fixed are transferred + // over and also invalidated using `propertyId` regardless of whether we choose to fix them in the jit. + // So all properties with the same name are invalidated even though not all of them are fixed. + // Therefore we need to attach lazy bailout using propertyId so that all of them can be protected. + Assert(instr->GetSrc1() && block->liveFixedFields); + block->liveFixedFields->Set(instr->GetSrc1()->GetSym()->AsPropertySym()->m_propertyId); + } + + break; + } case Js::OpCode::LdSlot: { DeadStoreOrChangeInstrForScopeObjRemoval(&instrPrev); @@ -3528,13 +3756,20 @@ BackwardPass::ProcessBlock(BasicBlock * block) #endif } + bool needsLazyBailOut = this->IsLazyBailOutCurrentlyNeeeded(instr); + AssertMsg( + !needsLazyBailOut || instr->HasLazyBailOut(), + "Instruction does not have the lazy bailout bit. Forward pass did not insert it correctly?" + ); + DeadStoreTypeCheckBailOut(instr); - DeadStoreImplicitCallBailOut(instr, hasLiveFields); + DeadStoreLazyBailOut(instr, needsLazyBailOut); + DeadStoreImplicitCallBailOut(instr, hasLiveFields, needsLazyBailOut); - if (block->stackSymToFinalType != nullptr) - { - this->InsertTypeTransitionsAtPotentialKills(); - } + AssertMsg( + this->IsPrePass() || (needsLazyBailOut || !instr->HasLazyBailOut()), + "We didn't remove lazy bailout after prepass even though we don't need it?" + ); // NoImplicitCallUses transfers need to be processed after determining whether implicit calls need to be disabled // for the current instruction, because the instruction where the def occurs also needs implicit calls disabled. @@ -3638,6 +3873,16 @@ BackwardPass::ProcessBlock(BasicBlock * block) } } #endif + + // Make a copy of upwardExposedUses for our bail-in code, note that we have + // to do it at the bail-in instruction (right after yield) and not at the yield point + // since the yield instruction might use some symbols as operands that we don't need when + // bail-in + if (instr->IsGeneratorBailInInstr() && this->currentBlock->upwardExposedUses) + { + instr->AsGeneratorBailInInstr()->upwardExposedUses.Copy(this->currentBlock->upwardExposedUses); + } + instrPrev = ProcessPendingPreOpBailOutInfo(instr); #if DBG_DUMP @@ -3659,12 +3904,13 @@ BackwardPass::ProcessBlock(BasicBlock * block) this->tag == Js::DeadStorePhase // We don't do the masking in simplejit due to reduced perf concerns and the issues // with handling try/catch structures with late-added blocks - && !this->func->IsSimpleJit() + && this->func->DoGlobOpt() // We don't need the masking blocks in asmjs/wasm mode && !block->GetFirstInstr()->m_func->GetJITFunctionBody()->IsAsmJsMode() && !block->GetFirstInstr()->m_func->GetJITFunctionBody()->IsWasmFunction() && !block->isDead && !block->isDeleted + && CONFIG_FLAG_RELEASE(AddMaskingBlocks) ) { FOREACH_PREDECESSOR_BLOCK(blockPred, block) @@ -3770,7 +4016,7 @@ BackwardPass::ProcessBlock(BasicBlock * block) #endif } -bool +bool BackwardPass::CanDeadStoreInstrForScopeObjRemoval(Sym *sym) const { if (tag == Js::DeadStorePhase && this->currentInstr->m_func->IsStackArgsEnabled()) @@ -3833,7 +4079,7 @@ BackwardPass::DeadStoreOrChangeInstrForScopeObjRemoval(IR::Instr ** pInstrPrev) IR::Instr * instr = this->currentInstr; Func * currFunc = instr->m_func; - if (this->tag == Js::DeadStorePhase && instr->m_func->IsStackArgsEnabled() && !IsPrePass()) + if (this->tag == Js::DeadStorePhase && instr->m_func->IsStackArgsEnabled() && (IsPrePass() || !currentBlock->loop)) { switch (instr->m_opcode) { @@ -3860,6 +4106,7 @@ BackwardPass::DeadStoreOrChangeInstrForScopeObjRemoval(IR::Instr ** pInstrPrev) Assert(currFunc->HasStackSymForFormal(value)); StackSym * paramStackSym = currFunc->GetStackSymForFormal(value); IR::RegOpnd * srcOpnd = IR::RegOpnd::New(paramStackSym, TyVar, currFunc); + srcOpnd->SetIsJITOptimizedReg(true); instr->ReplaceSrc1(srcOpnd); this->ProcessSymUse(paramStackSym, true, true); @@ -3926,7 +4173,7 @@ BackwardPass::DeadStoreOrChangeInstrForScopeObjRemoval(IR::Instr ** pInstrPrev) case Js::OpCode::GetCachedFunc: { // = GetCachedFunc , - // is converted to + // is converted to // = NewScFunc , if (instr->GetSrc1()->IsScopeObjOpnd(currFunc)) @@ -3952,7 +4199,7 @@ IR::Instr * BackwardPass::TryChangeInstrForStackArgOpt() { IR::Instr * instr = this->currentInstr; - if (tag == Js::DeadStorePhase && instr->DoStackArgsOpt(this->func)) + if (tag == Js::DeadStorePhase && instr->DoStackArgsOpt()) { switch (instr->m_opcode) { @@ -3988,8 +4235,8 @@ BackwardPass::TryChangeInstrForStackArgOpt() * -This is to facilitate Bailout to record the live Scope object Sym, whenever required. * -Reason for doing is this because - Scope object has to be implicitly live whenever Heap Arguments object is live. * -When we restore HeapArguments object in the bail out path, it expects the scope object also to be restored - if one was created. - * -We do not know detailed information about Heap arguments obj syms(aliasing etc.) until we complete Forward Pass. - * -And we want to avoid dead sym clean up (in this case, scope object though not explicitly live, it is live implicitly) during Block merging in the forward pass. + * -We do not know detailed information about Heap arguments obj syms(aliasing etc.) until we complete Forward Pass. + * -And we want to avoid dead sym clean up (in this case, scope object though not explicitly live, it is live implicitly) during Block merging in the forward pass. * -Hence this is the optimal spot to do this. */ @@ -4026,7 +4273,7 @@ BackwardPass::IsFormalParamSym(Func * func, Sym * sym) const if (sym->IsPropertySym()) { - //If the sym is a propertySym, then see if the propertyId is within the range of the formals + //If the sym is a propertySym, then see if the propertyId is within the range of the formals //We can have other properties stored in the scope object other than the formals (following the formals). PropertySym * propSym = sym->AsPropertySym(); IntConstType value = propSym->m_propertyId; @@ -4151,59 +4398,6 @@ BackwardPass::TraceBlockUses(BasicBlock * block, bool isStart) #endif -bool -BackwardPass::UpdateImplicitCallBailOutKind(IR::Instr *const instr, bool needsBailOutOnImplicitCall) -{ - Assert(instr); - Assert(instr->HasBailOutInfo()); - - IR::BailOutKind implicitCallBailOutKind = needsBailOutOnImplicitCall ? IR::BailOutOnImplicitCalls : IR::BailOutInvalid; - - IR::BailOutKind instrBailOutKind = instr->GetBailOutKind(); - if (instrBailOutKind & IR::BailOutMarkTempObject) - { - // Remove the mark temp object bit, as we don't need it after the dead store pass - instrBailOutKind &= ~IR::BailOutMarkTempObject; - instr->SetBailOutKind(instrBailOutKind); - - if (!instr->GetBailOutInfo()->canDeadStore) - { - return true; - } - } - - const IR::BailOutKind instrImplicitCallBailOutKind = instrBailOutKind & ~IR::BailOutKindBits; - if(instrImplicitCallBailOutKind == IR::BailOutOnImplicitCallsPreOp) - { - if(needsBailOutOnImplicitCall) - { - implicitCallBailOutKind = IR::BailOutOnImplicitCallsPreOp; - } - } - else if(instrImplicitCallBailOutKind != IR::BailOutOnImplicitCalls && instrImplicitCallBailOutKind != IR::BailOutInvalid) - { - // This bailout kind (the value of 'instrImplicitCallBailOutKind') must guarantee that implicit calls will not happen. - // If it doesn't make such a guarantee, it must be possible to merge this bailout kind with an implicit call bailout - // kind, and therefore should be part of BailOutKindBits. - Assert(!needsBailOutOnImplicitCall); - return true; - } - - if(instrImplicitCallBailOutKind == implicitCallBailOutKind) - { - return true; - } - - const IR::BailOutKind newBailOutKind = instrBailOutKind - instrImplicitCallBailOutKind + implicitCallBailOutKind; - if(newBailOutKind == IR::BailOutInvalid) - { - return false; - } - - instr->SetBailOutKind(newBailOutKind); - return true; -} - bool BackwardPass::ProcessNoImplicitCallUses(IR::Instr *const instr) { @@ -4692,7 +4886,9 @@ BackwardPass::ProcessNewScObject(IR::Instr* instr) return; } - if (instr->HasBailOutInfo() && (instr->GetBailOutKind() & ~IR::BailOutKindBits) == IR::BailOutFailedCtorGuardCheck) + // The instruction could have a lazy bailout associated with it, which might get cleared + // later, so we make sure that we only process instructions with the right bailout kind. + if (instr->HasBailOutInfo() && instr->GetBailOutKindNoBits() == IR::BailOutFailedCtorGuardCheck) { Assert(instr->IsProfiledInstr()); Assert(instr->GetDst()->IsRegOpnd()); @@ -4720,7 +4916,7 @@ BackwardPass::ProcessNewScObject(IR::Instr* instr) Assert(pBucket->GetInitialType() == ctorCache->GetType()); if (!this->IsPrePass()) { - this->InsertTypeTransition(instr->m_next, objSym, pBucket); + this->InsertTypeTransition(instr->m_next, objSym, pBucket, block->upwardExposedUses); } #if DBG pBucket->deadStoreUnavailableInitialType = pBucket->GetInitialType(); @@ -4733,6 +4929,7 @@ BackwardPass::ProcessNewScObject(IR::Instr* instr) #else block->stackSymToFinalType->Clear(objSym->m_id); #endif + this->ClearTypeIDWithFinalType(objSym->m_id, block); } } @@ -5115,6 +5312,7 @@ BackwardPass::ProcessStackSymUse(StackSym * stackSym, BOOLEAN isNonByteCodeUse) // It has to have a var version for byte code regs byteCodeUseSym = byteCodeUseSym->GetVarEquivSym(nullptr); } + block->byteCodeUpwardExposedUsed->Set(byteCodeUseSym->m_id); #if DBG // We can only track first level function stack syms right now @@ -5208,6 +5406,10 @@ BackwardPass::MayPropertyBeWrittenTo(Js::PropertyId propertyId) void BackwardPass::ProcessPropertySymOpndUse(IR::PropertySymOpnd * opnd) { + if (opnd == this->currentInstr->GetDst() && this->HasTypeIDWithFinalType(this->currentBlock)) + { + opnd->SetCantChangeType(true); + } // If this operand doesn't participate in the type check sequence it's a pass-through. // We will not set any bits on the operand and we will ignore them when lowering. @@ -5289,7 +5491,7 @@ BackwardPass::ProcessPropertySymOpndUse(IR::PropertySymOpnd * opnd) } if (mayNeedTypeTransition && !this->IsPrePass() && - !this->currentInstr->HasBailOutInfo() && + !this->currentInstr->HasTypeCheckBailOut() && (opnd->NeedsPrimaryTypeCheck() || opnd->NeedsLocalTypeCheck() || opnd->NeedsLoadFromProtoTypeCheck())) @@ -5306,7 +5508,7 @@ BackwardPass::ProcessPropertySymOpndUse(IR::PropertySymOpnd * opnd) pBucket->GetFinalType() != nullptr && pBucket->GetFinalType() != pBucket->GetInitialType()) { - this->InsertTypeTransition(this->currentInstr->m_next, baseSym, pBucket); + this->InsertTypeTransition(this->currentInstr->m_next, baseSym, pBucket, block->upwardExposedUses); pBucket->SetFinalType(pBucket->GetInitialType()); } } @@ -5325,9 +5527,6 @@ BackwardPass::ProcessPropertySymOpndUse(IR::PropertySymOpnd * opnd) void BackwardPass::TrackObjTypeSpecProperties(IR::PropertySymOpnd *opnd, BasicBlock *block) { - StackSym *auxSlotPtrSym = nullptr; - bool auxSlotPtrUpwardExposed = false; - Assert(tag == Js::DeadStorePhase); Assert(opnd->IsTypeCheckSeqCandidate()); @@ -5394,7 +5593,6 @@ BackwardPass::TrackObjTypeSpecProperties(IR::PropertySymOpnd *opnd, BasicBlock * #endif bucket->AddToGuardedPropertyOps(opnd->GetObjTypeSpecFldId()); - auxSlotPtrUpwardExposed = PHASE_ON(Js::ReuseAuxSlotPtrPhase, this->func) && opnd->UsesAuxSlot() && !opnd->IsLoadedFromProto() && opnd->IsTypeChecked(); if (opnd->NeedsMonoCheck()) { @@ -5440,6 +5638,7 @@ BackwardPass::TrackObjTypeSpecProperties(IR::PropertySymOpnd *opnd, BasicBlock * this->currentInstr->ChangeEquivalentToMonoTypeCheckBailOut(); } bucket->SetMonoGuardType(nullptr); + this->ClearTypeIDWithFinalType(objSym->m_id, block); } if (!opnd->IsTypeAvailable()) @@ -5448,12 +5647,6 @@ BackwardPass::TrackObjTypeSpecProperties(IR::PropertySymOpnd *opnd, BasicBlock * bucket->SetGuardedPropertyOps(nullptr); JitAdelete(this->tempAlloc, guardedPropertyOps); block->stackSymToGuardedProperties->Clear(objSym->m_id); - auxSlotPtrSym = opnd->GetAuxSlotPtrSym(); - if (auxSlotPtrSym) - { - this->currentBlock->upwardExposedUses->Clear(auxSlotPtrSym->m_id); - } - auxSlotPtrUpwardExposed = false; } } #if DBG @@ -5472,11 +5665,25 @@ BackwardPass::TrackObjTypeSpecProperties(IR::PropertySymOpnd *opnd, BasicBlock * opnd->SetGuardedPropOp(opnd->GetObjTypeSpecFldId()); } - if (auxSlotPtrUpwardExposed) + if (opnd->UsesAuxSlot() && opnd->IsTypeCheckSeqParticipant() && !opnd->HasTypeMismatch() && !opnd->IsLoadedFromProto()) { - // This is an upward-exposed use of the aux slot pointer. - auxSlotPtrSym = opnd->EnsureAuxSlotPtrSym(this->func); - this->currentBlock->upwardExposedUses->Set(auxSlotPtrSym->m_id); + bool auxSlotPtrUpwardExposed = false; + StackSym *auxSlotPtrSym = opnd->GetAuxSlotPtrSym(); + if (opnd->IsAuxSlotPtrSymAvailable()) + { + // This is an upward-exposed use of the aux slot pointer. + Assert(auxSlotPtrSym); + auxSlotPtrUpwardExposed = this->currentBlock->upwardExposedUses->TestAndSet(auxSlotPtrSym->m_id); + } + else if (auxSlotPtrSym != nullptr) + { + // The aux slot pointer is not upward-exposed at this point. + auxSlotPtrUpwardExposed = this->currentBlock->upwardExposedUses->TestAndClear(auxSlotPtrSym->m_id); + } + if (!this->IsPrePass() && auxSlotPtrUpwardExposed) + { + opnd->SetProducesAuxSlotPtr(true); + } } } @@ -5641,6 +5848,7 @@ BackwardPass::TrackAddPropertyTypes(IR::PropertySymOpnd *opnd, BasicBlock *block } pBucket->SetInitialType(typeWithoutProperty); + this->SetTypeIDWithFinalType(propertySym->m_stackSym->m_id, block); if (!PHASE_OFF(Js::ObjTypeSpecStorePhase, this->func)) { @@ -5728,20 +5936,23 @@ BackwardPass::TrackAddPropertyTypes(IR::PropertySymOpnd *opnd, BasicBlock *block #else block->stackSymToFinalType->Clear(propertySym->m_stackSym->m_id); #endif + this->ClearTypeIDWithFinalType(propertySym->m_stackSym->m_id, block); } } void -BackwardPass::InsertTypeTransition(IR::Instr *instrInsertBefore, int symId, AddPropertyCacheBucket *data) +BackwardPass::InsertTypeTransition(IR::Instr *instrInsertBefore, int symId, AddPropertyCacheBucket *data, BVSparse* upwardExposedUses) { StackSym *objSym = this->func->m_symTable->FindStackSym(symId); Assert(objSym); - this->InsertTypeTransition(instrInsertBefore, objSym, data); + this->InsertTypeTransition(instrInsertBefore, objSym, data, upwardExposedUses); } void -BackwardPass::InsertTypeTransition(IR::Instr *instrInsertBefore, StackSym *objSym, AddPropertyCacheBucket *data) +BackwardPass::InsertTypeTransition(IR::Instr *instrInsertBefore, StackSym *objSym, AddPropertyCacheBucket *data, BVSparse* upwardExposedUses) { + Assert(!this->IsPrePass()); + IR::RegOpnd *baseOpnd = IR::RegOpnd::New(objSym, TyMachReg, this->func); baseOpnd->SetIsJITOptimizedReg(true); @@ -5758,7 +5969,7 @@ BackwardPass::InsertTypeTransition(IR::Instr *instrInsertBefore, StackSym *objSy IR::Instr *adjustTypeInstr = IR::Instr::New(Js::OpCode::AdjustObjType, finalTypeOpnd, baseOpnd, initialTypeOpnd, this->func); - if (this->currentBlock->upwardExposedUses) + if (upwardExposedUses) { // If this type change causes a slot adjustment, the aux slot pointer (if any) will be reloaded here, so take it out of upwardExposedUses. int oldCount; @@ -5772,7 +5983,10 @@ BackwardPass::InsertTypeTransition(IR::Instr *instrInsertBefore, StackSym *objSy StackSym *auxSlotPtrSym = baseOpnd->m_sym->GetAuxSlotPtrSym(); if (auxSlotPtrSym) { - this->currentBlock->upwardExposedUses->Clear(auxSlotPtrSym->m_id); + if (upwardExposedUses->Test(auxSlotPtrSym->m_id)) + { + adjustTypeInstr->m_opcode = Js::OpCode::AdjustObjTypeReloadAuxSlotPtr; + } } } } @@ -5781,7 +5995,7 @@ BackwardPass::InsertTypeTransition(IR::Instr *instrInsertBefore, StackSym *objSy } void -BackwardPass::InsertTypeTransitionAfterInstr(IR::Instr *instr, int symId, AddPropertyCacheBucket *data) +BackwardPass::InsertTypeTransitionAfterInstr(IR::Instr *instr, int symId, AddPropertyCacheBucket *data, BVSparse* upwardExposedUses) { if (!this->IsPrePass()) { @@ -5790,11 +6004,11 @@ BackwardPass::InsertTypeTransitionAfterInstr(IR::Instr *instr, int symId, AddPro { // The instr with the bailout is something like a branch that may not fall through. // Insert the transitions instead at the beginning of each successor block. - this->InsertTypeTransitionsAtPriorSuccessors(this->currentBlock, nullptr, symId, data); + this->InsertTypeTransitionsAtPriorSuccessors(this->currentBlock, nullptr, symId, data, upwardExposedUses); } else { - this->InsertTypeTransition(instr->m_next, symId, data); + this->InsertTypeTransition(instr->m_next, symId, data, upwardExposedUses); } } // Note: we could probably clear this entry out of the table, but I don't know @@ -5803,7 +6017,7 @@ BackwardPass::InsertTypeTransitionAfterInstr(IR::Instr *instr, int symId, AddPro } void -BackwardPass::InsertTypeTransitionAtBlock(BasicBlock *block, int symId, AddPropertyCacheBucket *data) +BackwardPass::InsertTypeTransitionAtBlock(BasicBlock *block, int symId, AddPropertyCacheBucket *data, BVSparse* upwardExposedUses) { bool inserted = false; FOREACH_INSTR_IN_BLOCK(instr, block) @@ -5826,7 +6040,7 @@ BackwardPass::InsertTypeTransitionAtBlock(BasicBlock *block, int symId, AddPrope } else { - this->InsertTypeTransition(instr, symId, data); + this->InsertTypeTransition(instr, symId, data, upwardExposedUses); inserted = true; break; } @@ -5836,7 +6050,7 @@ BackwardPass::InsertTypeTransitionAtBlock(BasicBlock *block, int symId, AddPrope if (!inserted) { Assert(block->GetLastInstr()->m_next); - this->InsertTypeTransition(block->GetLastInstr()->m_next, symId, data); + this->InsertTypeTransition(block->GetLastInstr()->m_next, symId, data, upwardExposedUses); } } @@ -5845,7 +6059,8 @@ BackwardPass::InsertTypeTransitionsAtPriorSuccessors( BasicBlock *block, BasicBlock *blockSucc, int symId, - AddPropertyCacheBucket *data) + AddPropertyCacheBucket *data, + BVSparse* upwardExposedUses) { // For each successor of block prior to blockSucc, adjust the type. FOREACH_SUCCESSOR_BLOCK(blockFix, block) @@ -5855,7 +6070,7 @@ BackwardPass::InsertTypeTransitionsAtPriorSuccessors( return; } - this->InsertTypeTransitionAtBlock(blockFix, symId, data); + this->InsertTypeTransitionAtBlock(blockFix, symId, data, upwardExposedUses); } NEXT_SUCCESSOR_BLOCK; } @@ -5873,7 +6088,7 @@ BackwardPass::InsertTypeTransitionsAtPotentialKills() // Also do this for ctor cache updates, to avoid putting a type in the ctor cache that extends past // the end of the ctor that the cache covers. this->ForEachAddPropertyCacheBucket([&](int symId, AddPropertyCacheBucket *data)->bool { - this->InsertTypeTransitionAfterInstr(instr, symId, data); + this->InsertTypeTransitionAfterInstr(instr, symId, data, this->currentBlock->upwardExposedUses); return false; }); } @@ -5899,7 +6114,7 @@ BackwardPass::InsertTypeTransitionsAtPotentialKills() if (this->TransitionUndoesObjectHeaderInlining(data)) { // We're transitioning from inlined to non-inlined, so we can't push it up any farther. - this->InsertTypeTransitionAfterInstr(instr, symId, data); + this->InsertTypeTransitionAfterInstr(instr, symId, data, this->currentBlock->upwardExposedUses); } return false; }); @@ -5933,6 +6148,40 @@ BackwardPass::ForEachAddPropertyCacheBucket(Fn fn) NEXT_HASHTABLE_ENTRY; } +void +BackwardPass::SetTypeIDWithFinalType(int symID, BasicBlock *block) +{ + BVSparse *bv = block->EnsureTypeIDsWithFinalType(this->tempAlloc); + bv->Set(symID); +} + +void +BackwardPass::ClearTypeIDWithFinalType(int symID, BasicBlock *block) +{ + BVSparse *bv = block->typeIDsWithFinalType; + if (bv != nullptr) + { + bv->Clear(symID); + } +} + +bool +BackwardPass::HasTypeIDWithFinalType(BasicBlock *block) const +{ + return block->typeIDsWithFinalType != nullptr && !block->typeIDsWithFinalType->IsEmpty(); +} + +void +BackwardPass::CombineTypeIDsWithFinalType(BasicBlock *block, BasicBlock *blockSucc) +{ + BVSparse *bvSucc = blockSucc->typeIDsWithFinalType; + if (bvSucc != nullptr && !bvSucc->IsEmpty()) + { + BVSparse *bv = block->EnsureTypeIDsWithFinalType(this->tempAlloc); + bv->Or(bvSucc); + } +} + bool BackwardPass::TransitionUndoesObjectHeaderInlining(AddPropertyCacheBucket *data) const { @@ -6139,6 +6388,27 @@ BackwardPass::ProcessPropertySymUse(PropertySym *propertySym) return isLive; } +void +BackwardPass::DisallowMarkTempAcrossYield(BVSparse* bytecodeUpwardExposed) +{ + Assert(!this->IsCollectionPass()); + BasicBlock* block = this->currentBlock; + if (this->DoMarkTempNumbers()) + { + block->tempNumberTracker->DisallowMarkTempAcrossYield(bytecodeUpwardExposed); + } + if (this->DoMarkTempObjects()) + { + block->tempObjectTracker->DisallowMarkTempAcrossYield(bytecodeUpwardExposed); + } +#if DBG + if (this->DoMarkTempObjectVerify()) + { + block->tempObjectVerifyTracker->DisallowMarkTempAcrossYield(bytecodeUpwardExposed); + } +#endif +} + void BackwardPass::MarkTemp(StackSym * sym) { @@ -7542,7 +7812,7 @@ BackwardPass::ProcessDef(IR::Opnd * opnd) PropertySym *propertySym = sym->AsPropertySym(); ProcessStackSymUse(propertySym->m_stackSym, isJITOptimizedReg); - if(IsCollectionPass()) + if (IsCollectionPass()) { return false; } @@ -7629,7 +7899,7 @@ BackwardPass::ProcessDef(IR::Opnd * opnd) } } - if(IsCollectionPass()) + if (IsCollectionPass()) { return false; } @@ -7781,7 +8051,8 @@ BackwardPass::DeadStoreInstr(IR::Instr *instr) if (instr->m_opcode == Js::OpCode::ArgIn_A) { - //Ignore tracking ArgIn for "this", as argInsCount only tracks other params - unless it is a asmjs function(which doesn't have a "this"). + // Ignore tracking ArgIn for "this" as argInsCount only tracks other + // params, unless it is a AsmJS function (which doesn't have a "this"). if (instr->GetSrc1()->AsSymOpnd()->m_sym->AsStackSym()->GetParamSlotNum() != 1 || func->GetJITFunctionBody()->IsAsmJsMode()) { Assert(this->func->argInsCount > 0); @@ -7913,7 +8184,6 @@ BackwardPass::ProcessInlineeStart(IR::Instr* inlineeStart) inlineeStart->m_func->SetFirstArgOffset(inlineeStart); IR::Instr* startCallInstr = nullptr; - bool noImplicitCallsInInlinee = false; // Inlinee has no bailouts or implicit calls. Get rid of the inline overhead. auto removeInstr = [&](IR::Instr* argInstr) { @@ -7935,7 +8205,6 @@ BackwardPass::ProcessInlineeStart(IR::Instr* inlineeStart) // If there are no implicit calls - bailouts/throws - we can remove all inlining overhead. if (!inlineeStart->m_func->GetHasImplicitCalls()) { - noImplicitCallsInInlinee = true; inlineeStart->IterateArgInstrs(removeInstr); inlineeStart->IterateMetaArgs([](IR::Instr* metArg) @@ -7944,17 +8213,19 @@ BackwardPass::ProcessInlineeStart(IR::Instr* inlineeStart) return false; }); inlineeStart->m_func->m_hasInlineArgsOpt = false; + inlineeStart->m_func->m_hasInlineOverheadRemoved = true; removeInstr(inlineeStart); return true; } if (!inlineeStart->m_func->m_hasInlineArgsOpt) { - PHASE_PRINT_TESTTRACE(Js::InlineArgsOptPhase, func, _u("%s[%d]: Skipping inline args optimization: %s[%d] HasCalls: %s 'arguments' access: %s Can do inlinee args opt: %s\n"), + PHASE_PRINT_TESTTRACE(Js::InlineArgsOptPhase, func, _u("%s[%d]: Skipping inline args optimization: %s[%d] HasCalls: %s, 'arguments' access: %s, stackArgs enabled: %s, Can do inlinee args opt: %s\n"), func->GetJITFunctionBody()->GetDisplayName(), func->GetJITFunctionBody()->GetFunctionNumber(), inlineeStart->m_func->GetJITFunctionBody()->GetDisplayName(), inlineeStart->m_func->GetJITFunctionBody()->GetFunctionNumber(), IsTrueOrFalse(inlineeStart->m_func->GetHasCalls()), IsTrueOrFalse(inlineeStart->m_func->GetHasUnoptimizedArgumentsAccess()), + IsTrueOrFalse(inlineeStart->m_func->IsStackArgsEnabled()), IsTrueOrFalse(inlineeStart->m_func->m_canDoInlineArgsOpt)); return false; } @@ -8013,10 +8284,12 @@ BackwardPass::ProcessInlineeEnd(IR::Instr* instr) } if (this->tag == Js::BackwardPhase) { - if (!GlobOpt::DoInlineArgsOpt(instr->m_func)) + // Commenting out to allow for argument length and argument[constant] optimization + // Will revisit in phase two + /*if (!GlobOpt::DoInlineArgsOpt(instr->m_func)) { return; - } + }*/ // This adds a use for function sym as part of InlineeStart & all the syms referenced by the args. // It ensure they do not get cleared from the copy prop sym map. @@ -8030,6 +8303,11 @@ BackwardPass::ProcessInlineeEnd(IR::Instr* instr) } else if (this->tag == Js::DeadStorePhase) { + if (instr->m_func->GetJITFunctionBody()->UsesArgumentsObject() && !instr->m_func->IsStackArgsEnabled()) + { + instr->m_func->DisableCanDoInlineArgOpt(); + } + if (instr->m_func->m_hasInlineArgsOpt) { Assert(instr->m_func->frameInfo); @@ -8071,9 +8349,21 @@ BackwardPass::ProcessBailOnNoProfile(IR::Instr *instr, BasicBlock *block) return false; } + // For generator functions, we don't want to move the BailOutOnNoProfile + // above certain instructions such as GeneratorResumeYield or + // CreateInterpreterStackFrameForGenerator. This indicates the insertion + // point for the BailOutOnNoProfile in such cases. + IR::Instr *insertionPointForGenerator = nullptr; + // Don't hoist if we see calls with profile data (recursive calls) while(!curInstr->StartsBasicBlock()) { + if (curInstr->DontHoistBailOnNoProfileAboveInGeneratorFunction()) + { + Assert(insertionPointForGenerator == nullptr); + insertionPointForGenerator = curInstr; + } + // If a function was inlined, it must have had profile info. if (curInstr->m_opcode == Js::OpCode::InlineeEnd || curInstr->m_opcode == Js::OpCode::InlineBuiltInEnd || curInstr->m_opcode == Js::OpCode::InlineNonTrackingBuiltInEnd || curInstr->m_opcode == Js::OpCode::InlineeStart || curInstr->m_opcode == Js::OpCode::EndCallForPolymorphicInlinee) @@ -8144,7 +8434,8 @@ BackwardPass::ProcessBailOnNoProfile(IR::Instr *instr, BasicBlock *block) // Now try to move this up the flowgraph to the predecessor blocks FOREACH_PREDECESSOR_BLOCK(pred, block) { - bool hoistBailToPred = true; + // Don't hoist BailOnNoProfile up past blocks containing GeneratorResumeYield + bool hoistBailToPred = (insertionPointForGenerator == nullptr); if (block->isLoopHeader && pred->loop == block->loop) { @@ -8185,7 +8476,7 @@ BackwardPass::ProcessBailOnNoProfile(IR::Instr *instr, BasicBlock *block) // We already have one, we don't need a second. instrCopy->Free(); } - else if (!predInstr->AsBranchInstr()->m_isSwitchBr) + else if (predInstr->IsBranchInstr() && !predInstr->AsBranchInstr()->m_isSwitchBr) { // Don't put a bailout in the middle of a switch dispatch sequence. // The bytecode offsets are not in order, and it would lead to incorrect @@ -8220,10 +8511,19 @@ BackwardPass::ProcessBailOnNoProfile(IR::Instr *instr, BasicBlock *block) #if DBG blockHeadInstr->m_noHelperAssert = true; #endif - block->beginsBailOnNoProfile = true; instr->m_func = curInstr->m_func; - curInstr->InsertAfter(instr); + + if (insertionPointForGenerator != nullptr) + { + insertionPointForGenerator->InsertAfter(instr); + block->beginsBailOnNoProfile = false; + } + else + { + curInstr->InsertAfter(instr); + block->beginsBailOnNoProfile = true; + } bool setLastInstr = (curInstr == block->GetLastInstr()); if (setLastInstr) @@ -8395,7 +8695,7 @@ BackwardPass::ReverseCopyProp(IR::Instr *instr) FOREACH_SLISTBASE_ENTRY( CopyPropSyms, usedCopyPropSym, - &instrPrev->GetBailOutInfo()->usedCapturedValues.copyPropSyms) + &instrPrev->GetBailOutInfo()->usedCapturedValues->copyPropSyms) { if(dstSym == usedCopyPropSym.Value()) { @@ -8753,19 +9053,35 @@ BackwardPass::RestoreInductionVariableValuesAfterMemOp(Loop *loop) opCode = Js::OpCode::Sub_I4; } Func *localFunc = loop->GetFunc(); - StackSym *sym = localFunc->m_symTable->FindStackSym(symId)->GetInt32EquivSym(localFunc); - + StackSym *sym = localFunc->m_symTable->FindStackSym(symId); + if (!sym->IsInt32()) + { + sym = sym->GetInt32EquivSym(localFunc); + } + IR::Opnd *inductionVariableOpnd = IR::RegOpnd::New(sym, IRType::TyInt32, localFunc); - IR::Opnd *sizeOpnd = globOpt->GenerateInductionVariableChangeForMemOp(loop, inductionVariableChangeInfo.unroll, loop->memOpInfo->instr); - IR::Instr* restoreInductionVarInstr = IR::Instr::New(opCode, inductionVariableOpnd, inductionVariableOpnd, sizeOpnd, loop->GetFunc()); + IR::Opnd *tempInductionVariableOpnd = IR::RegOpnd::New(IRType::TyInt32, localFunc); + + // The induction variable is restored to a temp register before the MemOp occurs. Once the MemOp is + // complete, the induction variable's register is set to the value of the temp register. This is done + // in order to avoid overwriting the induction variable's value after a bailout on the MemOp. + IR::Instr* restoreInductionVarToTemp = IR::Instr::New(opCode, tempInductionVariableOpnd, inductionVariableOpnd, loop->GetFunc()); // The IR that restores the induction variable's value is placed before the MemOp. Since this IR can // bailout to the loop's landing pad, placing this IR before the MemOp avoids performing the MemOp, // bailing out because of this IR, and then performing the effects of the loop again. - loop->landingPad->InsertInstrBefore(restoreInductionVarInstr, loop->memOpInfo->instr); + loop->landingPad->InsertInstrBefore(restoreInductionVarToTemp, loop->memOpInfo->instr); + + // The amount to be added or subtraced (depends on opCode) to the induction vairable after the MemOp. + IR::Opnd *sizeOpnd = globOpt->GenerateInductionVariableChangeForMemOp(loop, inductionVariableChangeInfo.unroll, restoreInductionVarToTemp); + restoreInductionVarToTemp->SetSrc2(sizeOpnd); + IR::Instr* restoreInductionVar = IR::Instr::New(Js::OpCode::Ld_A, inductionVariableOpnd, tempInductionVariableOpnd, loop->GetFunc()); // If restoring an induction variable results in an overflow, bailout to the loop's landing pad. - restoreInductionVarInstr->ConvertToBailOutInstr(loop->bailOutInfo, IR::BailOutOnOverflow); + restoreInductionVarToTemp->ConvertToBailOutInstr(loop->bailOutInfo, IR::BailOutOnOverflow); + + // Restore the induction variable's actual register once all bailouts have been passed. + loop->landingPad->InsertAfter(restoreInductionVar); }; for (auto it = loop->memOpInfo->inductionVariableChangeInfoMap->GetIterator(); it.IsValid(); it.MoveNext()) @@ -8825,7 +9141,7 @@ BackwardPass::IsEmptyLoopAfterMemOp(Loop *loop) { Assert(instr->GetDst()); if (instr->GetDst()->GetStackSym() - && loop->memOpInfo->inductionVariablesUsedAfterLoop->Test(globOpt->GetVarSymID(instr->GetDst()->GetStackSym()))) + && loop->memOpInfo->inductionVariablesUsedAfterLoop->Test(instr->GetDst()->GetStackSym()->m_id)) { // We have use after the loop for a variable defined inside the loop. So the loop can't be removed. return false; diff --git a/lib/Backend/BackwardPass.h b/lib/Backend/BackwardPass.h index 68a53439c43..a03066eabf3 100644 --- a/lib/Backend/BackwardPass.h +++ b/lib/Backend/BackwardPass.h @@ -46,6 +46,7 @@ class BackwardPass bool ProcessBailOutInfo(IR::Instr * instr); void ProcessBailOutInfo(IR::Instr * instr, BailOutInfo * bailOutInfo); IR::Instr* ProcessPendingPreOpBailOutInfo(IR::Instr *const currentInstr); + void ClearDstUseForPostOpLazyBailOut(IR::Instr *instr); void ProcessBailOutArgObj(BailOutInfo * bailOutInfo, BVSparse * byteCodeUpwardExposedUsed); void ProcessBailOutConstants(BailOutInfo * bailOutInfo, BVSparse * byteCodeUpwardExposedUsed, BVSparse* argSymsBv); void ProcessBailOutCopyProps(BailOutInfo * bailOutInfo, BVSparse * byteCodeUpwardExposedUsed, BVSparse* argSymsBv); @@ -55,6 +56,7 @@ class BackwardPass void ProcessPropertySymOpndUse(IR::PropertySymOpnd *opnd); bool ProcessPropertySymUse(PropertySym *propertySym); void ProcessNewScObject(IR::Instr* instr); + void DisallowMarkTempAcrossYield(BVSparse* bytecodeUpwardExposed); void MarkTemp(StackSym * sym); bool ProcessInlineeStart(IR::Instr* instr); void ProcessInlineeEnd(IR::Instr* instr); @@ -76,7 +78,7 @@ class BackwardPass void DumpMarkTemp(); #endif - static bool UpdateImplicitCallBailOutKind(IR::Instr *const instr, bool needsBailOutOnImplicitCall); + static bool UpdateImplicitCallBailOutKind(IR::Instr *const instr, bool needsBailOutOnImplicitCall, bool needsLazyBailOut); bool ProcessNoImplicitCallUses(IR::Instr *const instr); void ProcessNoImplicitCallDef(IR::Instr *const instr); @@ -105,9 +107,11 @@ class BackwardPass void TrackFloatSymEquivalence(IR::Instr *const instr); - void DeadStoreImplicitCallBailOut(IR::Instr * instr, bool hasLiveFields); + bool IsLazyBailOutCurrentlyNeeeded(IR::Instr * instr) const; + void DeadStoreImplicitCallBailOut(IR::Instr * instr, bool hasLiveFields, bool needsLazyBailOut); void DeadStoreTypeCheckBailOut(IR::Instr * instr); - bool IsImplicitCallBailOutCurrentlyNeeded(IR::Instr * instr, bool mayNeedImplicitCallBailOut, bool hasLiveFields); + void DeadStoreLazyBailOut(IR::Instr * instr, bool needsLazyBailOut); + bool IsImplicitCallBailOutCurrentlyNeeded(IR::Instr * instr, bool mayNeedImplicitCallBailOut, bool needLazyBailOut, bool hasLiveFields); bool NeedBailOutOnImplicitCallsForTypedArrayStore(IR::Instr* instr); bool TrackNoImplicitCallInlinees(IR::Instr *instr); bool ProcessBailOnNoProfile(IR::Instr *instr, BasicBlock *block); @@ -115,6 +119,8 @@ class BackwardPass bool DoByteCodeUpwardExposedUsed() const; bool DoCaptureByteCodeUpwardExposedUsed() const; void DoSetDead(IR::Opnd * opnd, bool isDead) const; + + bool SatisfyMarkTempObjectsConditions() const; bool DoMarkTempObjects() const; bool DoMarkTempNumbers() const; bool DoMarkTempNumbersOnTempObjects() const; @@ -141,14 +147,19 @@ class BackwardPass void TrackObjTypeSpecProperties(IR::PropertySymOpnd *opnd, BasicBlock *block); void TrackObjTypeSpecWriteGuards(IR::PropertySymOpnd *opnd, BasicBlock *block); void TrackAddPropertyTypes(IR::PropertySymOpnd *opnd, BasicBlock *block); - void InsertTypeTransition(IR::Instr *instrInsertBefore, int symId, AddPropertyCacheBucket *data); - void InsertTypeTransition(IR::Instr *instrInsertBefore, StackSym *objSym, AddPropertyCacheBucket *data); - void InsertTypeTransitionAtBlock(BasicBlock *block, int symId, AddPropertyCacheBucket *data); - void InsertTypeTransitionsAtPriorSuccessors(BasicBlock *block, BasicBlock *blockSucc, int symId, AddPropertyCacheBucket *data); - void InsertTypeTransitionAfterInstr(IR::Instr *instr, int symId, AddPropertyCacheBucket *data); + void InsertTypeTransition(IR::Instr *instrInsertBefore, int symId, AddPropertyCacheBucket *data, BVSparse* upwardExposedUses); + void InsertTypeTransition(IR::Instr *instrInsertBefore, StackSym *objSym, AddPropertyCacheBucket *data, BVSparse* upwardExposedUses); + void InsertTypeTransitionAtBlock(BasicBlock *block, int symId, AddPropertyCacheBucket *data, BVSparse* upwardExposedUses); + void InsertTypeTransitionsAtPriorSuccessors(BasicBlock *block, BasicBlock *blockSucc, int symId, AddPropertyCacheBucket *data, BVSparse* upwardExposedUses); + void InsertTypeTransitionAfterInstr(IR::Instr *instr, int symId, AddPropertyCacheBucket *data, BVSparse* upwardExposedUses); void InsertTypeTransitionsAtPotentialKills(); bool TransitionUndoesObjectHeaderInlining(AddPropertyCacheBucket *data) const; + void SetTypeIDWithFinalType(int symId, BasicBlock *block); + void ClearTypeIDWithFinalType(int symId, BasicBlock *block); + bool HasTypeIDWithFinalType(BasicBlock *block) const; + void CombineTypeIDsWithFinalType(BasicBlock *block, BasicBlock *blockSucc); + template void ForEachAddPropertyCacheBucket(Fn fn); static ObjTypeGuardBucket MergeGuardedProperties(ObjTypeGuardBucket bucket1, ObjTypeGuardBucket bucket2); static ObjWriteGuardBucket MergeWriteGuards(ObjWriteGuardBucket bucket1, ObjWriteGuardBucket bucket2); diff --git a/lib/Backend/BailOut.cpp b/lib/Backend/BailOut.cpp index 84097adb46d..46dd3dafc5a 100644 --- a/lib/Backend/BailOut.cpp +++ b/lib/Backend/BailOut.cpp @@ -4,6 +4,7 @@ //------------------------------------------------------------------------------------------------------- #include "Backend.h" +#include "CommonPal.h" #ifdef ENABLE_SCRIPT_DEBUGGING #include "Debug/DebuggingFlags.h" #include "Debug/DiagProbe.h" @@ -13,19 +14,113 @@ extern const IRType RegTypes[RegNumCount]; +// In `FillBailOutRecord`, some of the fields of BailOutInfo are modified directly, +// so simply doing a shallow copy of pointers when duplicating the BailOutInfo to +// the helper calls for lazy bailouts will mess things up.Make a deep copies of such fields. +void BailOutInfo::PartialDeepCopyTo(BailOutInfo * const other) const +{ + // Primitive types + other->wasCloned = this->wasCloned; + other->isInvertedBranch = this->isInvertedBranch; + other->sharedBailOutKind = this->sharedBailOutKind; + other->isLoopTopBailOutInfo = this->isLoopTopBailOutInfo; + other->bailOutOffset = this->bailOutOffset; + other->polymorphicCacheIndex = this->polymorphicCacheIndex; + other->startCallCount = this->startCallCount; + other->totalOutParamCount = this->totalOutParamCount; + other->stackLiteralBailOutInfoCount = this->stackLiteralBailOutInfoCount; +#if DBG + other->wasCopied = this->wasCopied; +#endif + + other->bailOutRecord = this->bailOutRecord; + + this->capturedValues->CopyTo(this->bailOutFunc->m_alloc, other->capturedValues); + this->usedCapturedValues->CopyTo(this->bailOutFunc->m_alloc, other->usedCapturedValues); + + if (this->byteCodeUpwardExposedUsed != nullptr) + { + other->byteCodeUpwardExposedUsed = this->byteCodeUpwardExposedUsed->CopyNew(this->bailOutFunc->m_alloc); + } + + if (this->liveVarSyms != nullptr) + { + other->liveVarSyms = this->liveVarSyms->CopyNew(this->bailOutFunc->m_alloc); + } + + if (this->liveLosslessInt32Syms != nullptr) + { + other->liveLosslessInt32Syms = this->liveLosslessInt32Syms->CopyNew(this->bailOutFunc->m_alloc); + } + + if (this->liveFloat64Syms != nullptr) + { + other->liveFloat64Syms = this->liveFloat64Syms->CopyNew(this->bailOutFunc->m_alloc); + } + + if (this->outParamInlinedArgSlot != nullptr) + { + other->outParamInlinedArgSlot = this->outParamInlinedArgSlot->CopyNew(this->bailOutFunc->m_alloc); + } + + other->startCallFunc = this->startCallFunc; + other->argOutSyms = this->argOutSyms; + other->startCallInfo = this->startCallInfo; + other->stackLiteralBailOutInfo = this->stackLiteralBailOutInfo; + other->outParamOffsets = this->outParamOffsets; + + +#ifdef _M_IX86 + other->outParamFrameAdjustArgSlot = this->outParamFrameAdjustArgSlot; + other->inlinedStartCall = this->inlinedStartCall; +#endif + + other->bailOutInstr = this->bailOutInstr; + other->bailInInstr = this->bailInInstr; + +#if ENABLE_DEBUG_CONFIG_OPTIONS + other->bailOutOpcode = this->bailOutOpcode; +#endif + + other->bailOutFunc = this->bailOutFunc; + other->branchConditionOpnd = this->branchConditionOpnd; +} + void BailOutInfo::Clear(JitArenaAllocator * allocator) { - // Currently, we don't have a case where we delete bailout info after we allocated the bailout record - Assert(!bailOutRecord); + // Previously, we don't have a case where we delete bailout info after we allocated the bailout record. + // However, since lazy bailouts can now be attached on helper call instructions, and those instructions + // might sometimes be removed in Peeps, we will hit those cases. Make sure that in such cases, lazy bailout + // is the only bailout reason we have. + Assert(bailOutRecord == nullptr || BailOutInfo::OnlyHasLazyBailOut(bailOutRecord->bailOutKind)); if (this->capturedValues && this->capturedValues->DecrementRefCount() == 0) { this->capturedValues->constantValues.Clear(allocator); this->capturedValues->copyPropSyms.Clear(allocator); + + if (this->capturedValues->argObjSyms) + { + JitAdelete(allocator, this->capturedValues->argObjSyms); + } + JitAdelete(allocator, this->capturedValues); } - this->usedCapturedValues.constantValues.Clear(allocator); - this->usedCapturedValues.copyPropSyms.Clear(allocator); + + if (this->usedCapturedValues) + { + Assert(this->usedCapturedValues->refCount == 0); + this->usedCapturedValues->constantValues.Clear(allocator); + this->usedCapturedValues->copyPropSyms.Clear(allocator); + + if (this->usedCapturedValues->argObjSyms) + { + JitAdelete(allocator, this->usedCapturedValues->argObjSyms); + } + + JitAdelete(allocator, this->usedCapturedValues); + } + if (byteCodeUpwardExposedUsed) { JitAdelete(allocator, byteCodeUpwardExposedUsed); @@ -50,6 +145,37 @@ BailOutInfo::Clear(JitArenaAllocator * allocator) #endif } +// Refer to comments in the header file +void BailOutInfo::ClearUseOfDst(SymID id) +{ + Assert(id != SymID_Invalid); + if (this->byteCodeUpwardExposedUsed != nullptr && + this->byteCodeUpwardExposedUsed->Test(id)) + { + this->clearedDstByteCodeUpwardExposedUseId = id; + this->byteCodeUpwardExposedUsed->Clear(id); + } +} + +void BailOutInfo::RestoreUseOfDst() +{ + if (this->byteCodeUpwardExposedUsed != nullptr && + this->NeedsToRestoreUseOfDst()) + { + this->byteCodeUpwardExposedUsed->Set(this->clearedDstByteCodeUpwardExposedUseId); + } +} + +bool BailOutInfo::NeedsToRestoreUseOfDst() const +{ + return this->clearedDstByteCodeUpwardExposedUseId != SymID_Invalid; +} + +SymID BailOutInfo::GetClearedUseOfDstId() const +{ + return this->clearedDstByteCodeUpwardExposedUseId; +} + #ifdef _M_IX86 uint @@ -576,10 +702,10 @@ BailOutRecord::RestoreValues(IR::BailOutKind bailOutKind, Js::JavascriptCallStac Assert(RegTypes[LinearScanMD::GetRegisterFromSaveIndex(offset)] != TyFloat64); value = registerSaveSpace[offset - 1]; } - Assert(Js::DynamicObject::Is(value)); + Assert(Js::DynamicObject::IsBaseDynamicObject(value)); Assert(ThreadContext::IsOnStack(value)); - Js::DynamicObject * obj = Js::DynamicObject::FromVar(value); + Js::DynamicObject * obj = Js::VarTo(value); uint propertyCount = obj->GetPropertyCount(); for (uint j = record.initFldCount; j < propertyCount; j++) { @@ -656,7 +782,7 @@ BailOutRecord::RestoreValues(IR::BailOutKind bailOutKind, Js::JavascriptCallStac if (branchValueRegSlot != Js::Constants::NoRegister) { // Used when a t1 = CmCC is optimize to BrCC, and the branch bails out. T1 needs to be restored - Assert(branchValue && Js::JavascriptBoolean::Is(branchValue)); + Assert(branchValue && Js::VarIs(branchValue)); Assert(branchValueRegSlot < newInstance->GetJavascriptFunction()->GetFunctionBody()->GetLocalsCount()); newInstance->m_localSlots[branchValueRegSlot] = branchValue; } @@ -865,6 +991,23 @@ BailOutRecord::RestoreValue(IR::BailOutKind bailOutKind, Js::JavascriptCallStack value = Js::JavascriptNumber::ToVar(int32Value, scriptContext); BAILOUT_VERBOSE_TRACE(newInstance->function->GetFunctionBody(), bailOutKind, _u(", value: %10d (ToVar: 0x%p)"), int32Value, value); } + else if (regSlot == newInstance->function->GetFunctionBody()->GetYieldRegister() && newInstance->function->GetFunctionBody()->IsCoroutine()) + { + // This value can only either be a resume yield object created on the heap or + // an iterator result object created on the heap. No need to box either. + Assert(value); + +#if ENABLE_DEBUG_CONFIG_OPTIONS + if (ThreadContext::IsOnStack(value)) + { + BAILOUT_VERBOSE_TRACE(newInstance->function->GetFunctionBody(), bailOutKind, _u(", value: 0x%p (Resume Yield Object)"), value); + } + else + { + BAILOUT_VERBOSE_TRACE(newInstance->function->GetFunctionBody(), bailOutKind, _u(", value: 0x%p (Yield Return Value)"), value); + } +#endif + } else { BAILOUT_VERBOSE_TRACE(newInstance->function->GetFunctionBody(), bailOutKind, _u(", value: 0x%p"), value); @@ -1004,7 +1147,7 @@ BailOutRecord::BailOutCommonNoCodeGen(Js::JavascriptCallStackLayout * layout, Ba BailOutReturnValue * bailOutReturnValue, void * argoutRestoreAddress) { Assert(bailOutRecord->parent == nullptr); - Assert(Js::ScriptFunction::Is(layout->functionObject)); + Assert(Js::VarIs(layout->functionObject)); Js::ScriptFunction ** functionRef = (Js::ScriptFunction **)&layout->functionObject; Js::ArgumentReader args(&layout->callInfo, layout->args); Js::Var result = BailOutHelper(layout, functionRef, args, false, bailOutRecord, bailOutOffset, returnAddress, bailOutKind, registerSaves, bailOutReturnValue, layout->GetArgumentsObjectLocation(), branchValue, argoutRestoreAddress); @@ -1031,7 +1174,7 @@ uint32 bailOutOffset, void * returnAddress, IR::BailOutKind bailOutKind, Js::Imp sizeof(registerSaves)); Js::Var result = BailOutCommonNoCodeGen(layout, bailOutRecord, bailOutOffset, returnAddress, bailOutKind, branchValue, registerSaves, bailOutReturnValue, argoutRestoreAddress); - ScheduleFunctionCodeGen(Js::ScriptFunction::FromVar(layout->functionObject), nullptr, bailOutRecord, bailOutKind, bailOutOffset, savedImplicitCallFlags, returnAddress); + ScheduleFunctionCodeGen(Js::VarTo(layout->functionObject), nullptr, bailOutRecord, bailOutKind, bailOutOffset, savedImplicitCallFlags, returnAddress); return result; } @@ -1050,17 +1193,10 @@ BailOutRecord::BailOutInlinedCommon(Js::JavascriptCallStackLayout * layout, Bail BailOutReturnValue bailOutReturnValue; Js::ScriptFunction * innerMostInlinee = nullptr; BailOutInlinedHelper(layout, currentBailOutRecord, bailOutOffset, returnAddress, bailOutKind, registerSaves, &bailOutReturnValue, &innerMostInlinee, false, branchValue); - - bool * hasBailedOutBitPtr = layout->functionObject->GetScriptContext()->GetThreadContext()->GetHasBailedOutBitPtr(); - Assert(!bailOutRecord->ehBailoutData || hasBailedOutBitPtr || - bailOutRecord->ehBailoutData->ht == Js::HandlerType::HT_Finally /* When we bailout from inlinee in non exception finally, we maynot see hasBailedOutBitPtr*/); - if (hasBailedOutBitPtr && bailOutRecord->ehBailoutData) - { - *hasBailedOutBitPtr = true; - } + SetHasBailedOutBit(bailOutRecord, layout->functionObject->GetScriptContext()); Js::Var result = BailOutCommonNoCodeGen(layout, currentBailOutRecord, currentBailOutRecord->bailOutOffset, returnAddress, bailOutKind, branchValue, registerSaves, &bailOutReturnValue); - ScheduleFunctionCodeGen(Js::ScriptFunction::FromVar(layout->functionObject), innerMostInlinee, currentBailOutRecord, bailOutKind, bailOutOffset, savedImplicitCallFlags, returnAddress); + ScheduleFunctionCodeGen(Js::VarTo(layout->functionObject), innerMostInlinee, currentBailOutRecord, bailOutKind, bailOutOffset, savedImplicitCallFlags, returnAddress); return result; } @@ -1076,7 +1212,7 @@ BailOutRecord::BailOutFromLoopBodyCommon(Js::JavascriptCallStackLayout * layout, js_memcpy_s(registerSaves, sizeof(registerSaves), (Js::Var *)layout->functionObject->GetScriptContext()->GetThreadContext()->GetBailOutRegisterSaveSpace(), sizeof(registerSaves)); uint32 result = BailOutFromLoopBodyHelper(layout, bailOutRecord, bailOutOffset, bailOutKind, branchValue, registerSaves); - ScheduleLoopBodyCodeGen(Js::ScriptFunction::FromVar(layout->functionObject), nullptr, bailOutRecord, bailOutKind); + ScheduleLoopBodyCodeGen(Js::VarTo(layout->functionObject), nullptr, bailOutRecord, bailOutKind); return result; } @@ -1096,20 +1232,40 @@ BailOutRecord::BailOutFromLoopBodyInlinedCommon(Js::JavascriptCallStackLayout * BailOutReturnValue bailOutReturnValue; Js::ScriptFunction * innerMostInlinee = nullptr; BailOutInlinedHelper(layout, currentBailOutRecord, bailOutOffset, returnAddress, bailOutKind, registerSaves, &bailOutReturnValue, &innerMostInlinee, true, branchValue); - bool * hasBailedOutBitPtr = layout->functionObject->GetScriptContext()->GetThreadContext()->GetHasBailedOutBitPtr(); - Assert(!bailOutRecord->ehBailoutData || hasBailedOutBitPtr || - bailOutRecord->ehBailoutData->ht == Js::HandlerType::HT_Finally /* When we bailout from inlinee in non exception finally, we maynot see hasBailedOutBitPtr*/); - if (hasBailedOutBitPtr && bailOutRecord->ehBailoutData) - { - *hasBailedOutBitPtr = true; - } - + SetHasBailedOutBit(bailOutRecord, layout->functionObject->GetScriptContext()); uint32 result = BailOutFromLoopBodyHelper(layout, currentBailOutRecord, currentBailOutRecord->bailOutOffset, bailOutKind, nullptr, registerSaves, &bailOutReturnValue); - ScheduleLoopBodyCodeGen(Js::ScriptFunction::FromVar(layout->functionObject), innerMostInlinee, currentBailOutRecord, bailOutKind); + ScheduleLoopBodyCodeGen(Js::VarTo(layout->functionObject), innerMostInlinee, currentBailOutRecord, bailOutKind); return result; } +void +BailOutRecord::SetHasBailedOutBit(BailOutRecord const * bailOutRecord, Js::ScriptContext * scriptContext) +{ + Js::EHBailoutData * ehBailoutData = bailOutRecord->ehBailoutData; + if (!ehBailoutData) + { + return; + } + + // When a bailout occurs within a finally region, the hasBailedOutBitPtr associated with the + // try-catch-finally or try-finally has already been removed from the stack. In that case, + // we set the hasBailedOutBitPtr for the nearest enclosing try or catch region within the + // function. + while (ehBailoutData->ht == Js::HandlerType::HT_Finally) + { + if (!ehBailoutData->parent || ehBailoutData->parent->nestingDepth < 0) + { + return; + } + ehBailoutData = ehBailoutData->parent; + } + + bool * hasBailedOutBitPtr = scriptContext->GetThreadContext()->GetHasBailedOutBitPtr(); + Assert(hasBailedOutBitPtr); + *hasBailedOutBitPtr = true; +} + void BailOutRecord::BailOutInlinedHelper(Js::JavascriptCallStackLayout * layout, BailOutRecord const *& currentBailOutRecord, uint32 bailOutOffset, void * returnAddress, IR::BailOutKind bailOutKind, Js::Var * registerSaves, BailOutReturnValue * bailOutReturnValue, Js::ScriptFunction ** innerMostInlinee, bool isInLoopBody, Js::Var branchValue) @@ -1118,7 +1274,7 @@ BailOutRecord::BailOutInlinedHelper(Js::JavascriptCallStackLayout * layout, Bail BailOutReturnValue * lastBailOutReturnValue = nullptr; *innerMostInlinee = nullptr; - Js::FunctionBody* functionBody = Js::ScriptFunction::FromVar(layout->functionObject)->GetFunctionBody(); + Js::FunctionBody* functionBody = Js::VarTo(layout->functionObject)->GetFunctionBody(); Js::EntryPointInfo *entryPointInfo; if(isInLoopBody) @@ -1143,7 +1299,7 @@ BailOutRecord::BailOutInlinedHelper(Js::JavascriptCallStackLayout * layout, Bail // object, the cached version (that was previously boxed) will be reused to maintain pointer identity and correctness // after the transition to the interpreter. InlinedFrameLayout* outerMostFrame = (InlinedFrameLayout *)(((uint8 *)Js::JavascriptCallStackLayout::ToFramePointer(layout)) - entryPointInfo->GetFrameHeight()); - inlineeFrameRecord->RestoreFrames(functionBody, outerMostFrame, layout, true /* boxArgs */); + inlineeFrameRecord->RestoreFrames(functionBody, outerMostFrame, layout, true /*boxArgs*/); } } @@ -1162,7 +1318,7 @@ BailOutRecord::BailOutInlinedHelper(Js::JavascriptCallStackLayout * layout, Bail Js::ScriptFunction ** functionRef = (Js::ScriptFunction **)&(inlinedFrame->function); AnalysisAssert(*functionRef); - Assert(Js::ScriptFunction::Is(inlinedFrame->function)); + Assert(Js::VarIs(inlinedFrame->function)); if (*innerMostInlinee == nullptr) { @@ -1271,8 +1427,6 @@ BailOutRecord::BailOutHelper(Js::JavascriptCallStackLayout * layout, Js::ScriptF #ifdef ENABLE_SCRIPT_DEBUGGING bool isInDebugMode = executeFunction->IsInDebugMode(); - AssertMsg(!isInDebugMode || Js::Configuration::Global.EnableJitInDebugMode(), - "In diag mode we can get here (function has to be JIT'ed) only when EnableJitInDiagMode is true!"); // Adjust bailout offset for debug mode (only scenario when we ignore exception). if (isInDebugMode) @@ -1375,63 +1529,32 @@ BailOutRecord::BailOutHelper(Js::JavascriptCallStackLayout * layout, Js::ScriptF if (executeFunction->IsCoroutine()) { // If the FunctionBody is a generator then this call is being made by one of the three - // generator resuming methods: next(), throw(), or return(). They all pass the generator - // object as the first of two arguments. The real user arguments are obtained from the - // generator object. The second argument is the ResumeYieldData which is only needed - // when resuming a generator and not needed when yielding from a generator, as is occurring - // here. - AssertMsg(args.Info.Count == 2, "Generator ScriptFunctions should only be invoked by generator APIs with the pair of arguments they pass in -- the generator object and a ResumeYieldData pointer"); - Js::JavascriptGenerator* generator = Js::JavascriptGenerator::FromVar(args[0]); + // generator resuming methods: next(), throw(), or return(). They all pass the generator + // object as the first of two arguments. The real user arguments are obtained from the + // generator object. The second argument is the resume yield object which is only needed + // when resuming a generator and not needed when yielding from a generator, as is occurring here. + AssertMsg(args.Info.Count == 2, "Generator ScriptFunctions should only be invoked by generator APIs with the pair of arguments they pass in -- the generator object and a resume yield object"); + Js::JavascriptGenerator* generator = Js::VarTo(args[0]); newInstance = generator->GetFrame(); - if (newInstance != nullptr) - { - // BailOut will recompute OutArg pointers based on BailOutRecord. Reset them back - // to initial position before that happens so that OP_StartCall calls don't accumulate - // incorrectly over multiple yield bailouts. - newInstance->ResetOut(); - - // The debugger relies on comparing stack addresses of frames to decide when a step_out is complete so - // give the InterpreterStackFrame a legit enough stack address to make this comparison work. - newInstance->m_stackAddress = reinterpret_cast(&generator); - } - else - { - // - // Allocate a new InterpreterStackFrame instance on the recycler heap. - // It will live with the JavascriptGenerator object. - // - Js::Arguments generatorArgs = generator->GetArguments(); - Js::InterpreterStackFrame::Setup setup(function, generatorArgs, true, isInlinee); - Assert(setup.GetStackAllocationVarCount() == 0); - size_t varAllocCount = setup.GetAllocationVarCount(); - size_t varSizeInBytes = varAllocCount * sizeof(Js::Var); - DWORD_PTR stackAddr = reinterpret_cast(&generator); // as mentioned above, use any stack address from this frame to ensure correct debugging functionality - Js::LoopHeader* loopHeaderArray = executeFunction->GetHasAllocatedLoopHeaders() ? executeFunction->GetLoopHeaderArrayPtr() : nullptr; - - allocation = RecyclerNewPlus(functionScriptContext->GetRecycler(), varSizeInBytes, Js::Var); - - // Initialize the interpreter stack frame (constants) but not the param, the bailout record will restore the value -#if DBG - // Allocate invalidVar on GC instead of stack since this InterpreterStackFrame will out live the current real frame - Js::Var invalidVar = (Js::RecyclableObject*)RecyclerNewPlusLeaf(functionScriptContext->GetRecycler(), sizeof(Js::RecyclableObject), Js::Var); - memset(invalidVar, 0xFE, sizeof(Js::RecyclableObject)); -#endif - - newInstance = setup.InitializeAllocation(allocation, nullptr, false, false, loopHeaderArray, stackAddr -#if DBG - , invalidVar -#endif - ); + // The jit relies on the interpreter stack frame to store various information such as + // for-in enumerators. Therefore, we always create an interpreter stack frame for generator + // as part of the resume jump table, at the beginning of the jit'd function, if it doesn't + // already exist. + Assert(newInstance != nullptr); - newInstance->m_reader.Create(executeFunction); + // BailOut will recompute OutArg pointers based on BailOutRecord. Reset them back + // to initial position before that happens so that OP_StartCall calls don't accumulate + // incorrectly over multiple yield bailouts. + newInstance->ResetOut(); - generator->SetFrame(newInstance, varSizeInBytes); - } + // The debugger relies on comparing stack addresses of frames to decide when a step_out is complete so + // give the InterpreterStackFrame a legit enough stack address to make this comparison work. + newInstance->m_stackAddress = reinterpret_cast(&generator); } else { - Js::InterpreterStackFrame::Setup setup(function, args, true, isInlinee); + Js::InterpreterStackFrame::Setup setup(function, args, true /* bailedOut */, isInlinee); size_t varAllocCount = setup.GetAllocationVarCount(); size_t stackVarAllocCount = setup.GetStackAllocationVarCount(); size_t varSizeInBytes; @@ -2694,7 +2817,7 @@ void BailOutRecord::CheckPreemptiveRejit(Js::FunctionBody* executeFunction, IR:: Js::Var BailOutRecord::BailOutForElidedYield(void * framePointer) { - JIT_HELPER_REENTRANT_HEADER(NoSaveRegistersBailOutForElidedYield); + JIT_HELPER_NOT_REENTRANT_NOLOCK_HEADER(NoSaveRegistersBailOutForElidedYield); Js::JavascriptCallStackLayout * const layout = Js::JavascriptCallStackLayout::FromFramePointer(framePointer); Js::ScriptFunction ** functionRef = (Js::ScriptFunction **)&layout->functionObject; Js::ScriptFunction * function = *functionRef; @@ -2707,8 +2830,7 @@ Js::Var BailOutRecord::BailOutForElidedYield(void * framePointer) Js::InterpreterStackFrame* frame = generator->GetFrame(); ThreadContext *threadContext = frame->GetScriptContext()->GetThreadContext(); - Js::ResumeYieldData* resumeYieldData = static_cast(layout->args[1]); - frame->SetNonVarReg(executeFunction->GetYieldRegister(), resumeYieldData); + frame->SetNonVarReg(executeFunction->GetYieldRegister(), layout->args[1]); // The debugger relies on comparing stack addresses of frames to decide when a step_out is complete so // give the InterpreterStackFrame a legit enough stack address to make this comparison work. @@ -2850,16 +2972,11 @@ SharedBailOutRecord::SharedBailOutRecord(uint32 bailOutOffset, uint bailOutCache this->type = BailoutRecordType::Shared; } -void LazyBailOutRecord::SetBailOutKind() -{ - this->bailoutRecord->SetBailOutKind(IR::BailOutKind::LazyBailOut); -} - #if DBG -void LazyBailOutRecord::Dump(Js::FunctionBody* functionBody) +void LazyBailOutRecord::Dump(Js::FunctionBody* functionBody) const { OUTPUT_PRINT(functionBody); - Output::Print(_u("Bytecode Offset: #%04x opcode: %s"), this->bailoutRecord->GetBailOutOffset(), Js::OpCodeUtil::GetOpCodeName(this->bailoutRecord->GetBailOutOpCode())); + Output::Print(_u("Bytecode Offset: #%04x opcode: %s"), this->bailOutRecord->GetBailOutOffset(), Js::OpCodeUtil::GetOpCodeName(this->bailOutRecord->GetBailOutOpCode())); } #endif @@ -2926,4 +3043,3 @@ void GlobalBailOutRecordDataTable::AddOrUpdateRow(JitArenaAllocator *allocator, rowToInsert->regSlot = regSlot; *lastUpdatedRowIndex = length++; } - diff --git a/lib/Backend/BailOut.h b/lib/Backend/BailOut.h index 208d940552f..1cacb220adc 100644 --- a/lib/Backend/BailOut.h +++ b/lib/Backend/BailOut.h @@ -26,11 +26,12 @@ class BailOutInfo BailOutInfo(uint32 bailOutOffset, Func* bailOutFunc) : bailOutOffset(bailOutOffset), bailOutFunc(bailOutFunc), - byteCodeUpwardExposedUsed(nullptr), polymorphicCacheIndex((uint)-1), startCallCount(0), startCallInfo(nullptr), bailOutInstr(nullptr), + byteCodeUpwardExposedUsed(nullptr), polymorphicCacheIndex((uint)-1), startCallCount(0), startCallInfo(nullptr), bailOutInstr(nullptr), bailInInstr(nullptr), totalOutParamCount(0), argOutSyms(nullptr), bailOutRecord(nullptr), wasCloned(false), isInvertedBranch(false), sharedBailOutKind(true), isLoopTopBailOutInfo(false), canDeadStore(true), outParamInlinedArgSlot(nullptr), liveVarSyms(nullptr), liveLosslessInt32Syms(nullptr), liveFloat64Syms(nullptr), branchConditionOpnd(nullptr), - stackLiteralBailOutInfoCount(0), stackLiteralBailOutInfo(nullptr) + stackLiteralBailOutInfoCount(0), stackLiteralBailOutInfo(nullptr), + clearedDstByteCodeUpwardExposedUseId(SymID_Invalid) { Assert(bailOutOffset != Js::Constants::NoByteCodeOffset); #ifdef _M_IX86 @@ -41,10 +42,27 @@ class BailOutInfo #endif this->capturedValues = JitAnew(bailOutFunc->m_alloc, CapturedValues); this->capturedValues->refCount = 1; - this->usedCapturedValues.argObjSyms = nullptr; + + this->usedCapturedValues = JitAnew(bailOutFunc->m_alloc, CapturedValues); + this->usedCapturedValues->argObjSyms = nullptr; } + + void PartialDeepCopyTo(BailOutInfo *const bailOutInfo) const; void Clear(JitArenaAllocator * allocator); + // Lazy bailout + // + // Workaround for dealing with use of destination register of `call` instructions with postop lazy bailout. + // As an example, in globopt, we have s1 = Call and s1 is in byteCodeUpwardExposedUse, + // but after lowering, the instructions are: s3 = Call, s1 = s3. + // If we add a postop lazy bailout to s3 = call, we will create a use of s1 right at that instructions. + // However, s1 at that point is not initialized yet. + // As a workaround, we will clear the use of s1 and restore it if we determine that lazy bailout is not needed. + void ClearUseOfDst(SymID id); + void RestoreUseOfDst(); + bool NeedsToRestoreUseOfDst() const; + SymID GetClearedUseOfDstId() const; + void FinalizeBailOutRecord(Func * func); #ifdef MD_GROW_LOCALS_AREA_UP void FinalizeOffsets(__in_ecount(count) int * offsets, uint count, Func *func, BVSparse *bvInlinedArgSlot); @@ -64,6 +82,26 @@ class BailOutInfo kindMinusBits == IR::BailOutOnImplicitCallsPreOp; } + static bool OnlyHasLazyBailOut(IR::BailOutKind kind) + { + return kind == IR::LazyBailOut; + } + + static bool HasLazyBailOut(IR::BailOutKind kind) + { + return (kind & IR::LazyBailOut) != 0; + } + + static IR::BailOutKind WithoutLazyBailOut(IR::BailOutKind kind) + { + return kind & ~IR::LazyBailOut; + } + + static IR::BailOutKind WithLazyBailOut(IR::BailOutKind kind) + { + return kind | IR::LazyBailOut; + } + #if DBG static bool IsBailOutHelper(IR::JnHelperMethod helper); #endif @@ -76,11 +114,12 @@ class BailOutInfo #if DBG bool wasCopied; #endif + SymID clearedDstByteCodeUpwardExposedUseId; uint32 bailOutOffset; BailOutRecord * bailOutRecord; - CapturedValues* capturedValues; // Values we know about after forward pass - CapturedValues usedCapturedValues; // Values that need to be restored in the bail out - BVSparse * byteCodeUpwardExposedUsed; // Non-constant stack syms that needs to be restored in the bail out + CapturedValues * capturedValues; // Values we know about after forward pass + CapturedValues * usedCapturedValues; // Values that need to be restored in the bail out + BVSparse * byteCodeUpwardExposedUsed; // Non-constant stack syms that needs to be restored in the bail out uint polymorphicCacheIndex; uint startCallCount; uint totalOutParamCount; @@ -121,6 +160,8 @@ class BailOutInfo // 2) After we generated bailout, this becomes label instr. In case of shared bailout other instrs JMP to this label. IR::Instr * bailOutInstr; + IR::GeneratorBailInInstr * bailInInstr; + #if ENABLE_DEBUG_CONFIG_OPTIONS Js::OpCode bailOutOpcode; #endif @@ -238,6 +279,8 @@ class BailOutRecord static uint32 BailOutFromLoopBodyHelper(Js::JavascriptCallStackLayout * layout, BailOutRecord const * bailOutRecord, uint32 bailOutOffset, IR::BailOutKind bailOutKind, Js::Var branchValue, Js::Var * registerSaves, BailOutReturnValue * returnValue = nullptr); + static void SetHasBailedOutBit(BailOutRecord const * bailOutRecord, Js::ScriptContext * scriptContext); + static void UpdatePolymorphicFieldAccess(Js::JavascriptFunction * function, BailOutRecord const * bailOutRecord); static void ScheduleFunctionCodeGen(Js::ScriptFunction * function, Js::ScriptFunction * innerMostInlinee, BailOutRecord const * bailOutRecord, IR::BailOutKind bailOutKind, diff --git a/lib/Backend/BailOutKind.h b/lib/Backend/BailOutKind.h index 156e299dfe4..93faae0dc5a 100644 --- a/lib/Backend/BailOutKind.h +++ b/lib/Backend/BailOutKind.h @@ -7,12 +7,12 @@ #error BAIL_OUT_KIND, BAIL_OUT_KIND_VALUE, and BAIL_OUT_KIND_VALUE_LAST must be defined before including this file. #endif /* kind */ /* allowed bits */ -BAIL_OUT_KIND(BailOutInvalid, IR::BailOutOnResultConditions | IR::BailOutForArrayBits | IR::BailOutForDebuggerBits | IR::BailOutMarkTempObject) +BAIL_OUT_KIND(BailOutInvalid, IR::BailOutOnResultConditions | IR::BailOutForArrayBits | IR::BailOutForDebuggerBits | IR::BailOutMarkTempObject | IR::LazyBailOut) BAIL_OUT_KIND(BailOutIntOnly, IR::BailOutMarkTempObject) BAIL_OUT_KIND(BailOutNumberOnly, IR::BailOutMarkTempObject) BAIL_OUT_KIND(BailOutPrimitiveButString, IR::BailOutMarkTempObject) -BAIL_OUT_KIND(BailOutOnImplicitCalls, IR::BailOutForArrayBits) -BAIL_OUT_KIND(BailOutOnImplicitCallsPreOp, (IR::BailOutOnResultConditions | IR::BailOutForArrayBits | IR::BailOutMarkTempObject) & ~IR::BailOutOnArrayAccessHelperCall ) +BAIL_OUT_KIND(BailOutOnImplicitCalls, IR::BailOutForArrayBits | IR::LazyBailOut) +BAIL_OUT_KIND(BailOutOnImplicitCallsPreOp, (IR::BailOutOnResultConditions | IR::BailOutForArrayBits | IR::BailOutMarkTempObject | IR::LazyBailOut) & ~IR::BailOutOnArrayAccessHelperCall ) BAIL_OUT_KIND(BailOutOnNotPrimitive, IR::BailOutMarkTempObject) BAIL_OUT_KIND(BailOutOnMemOpError, IR::BailOutForArrayBits) BAIL_OUT_KIND(BailOutOnInlineFunction, 0) @@ -20,21 +20,21 @@ BAIL_OUT_KIND(BailOutOnNoProfile, 0) BAIL_OUT_KIND(BailOutOnPolymorphicInlineFunction, 0) BAIL_OUT_KIND(BailOutOnFailedPolymorphicInlineTypeCheck, 0) BAIL_OUT_KIND(BailOutShared, 0) -BAIL_OUT_KIND(BailOutOnNotArray, IR::BailOutOnMissingValue) -BAIL_OUT_KIND(BailOutOnNotNativeArray, IR::BailOutOnMissingValue) -BAIL_OUT_KIND(BailOutConventionalTypedArrayAccessOnly, IR::BailOutMarkTempObject) -BAIL_OUT_KIND(BailOutOnIrregularLength, IR::BailOutMarkTempObject) +BAIL_OUT_KIND(BailOutOnNotArray, IR::BailOutOnMissingValue | IR::LazyBailOut) +BAIL_OUT_KIND(BailOutOnNotNativeArray, IR::BailOutOnMissingValue | IR::LazyBailOut) +BAIL_OUT_KIND(BailOutConventionalTypedArrayAccessOnly, IR::BailOutMarkTempObject | IR::LazyBailOut) +BAIL_OUT_KIND(BailOutOnIrregularLength, IR::BailOutMarkTempObject | IR::LazyBailOut) BAIL_OUT_KIND(BailOutCheckThis, 0) BAIL_OUT_KIND(BailOutOnTaggedValue, 0) -BAIL_OUT_KIND(BailOutFailedTypeCheck, IR::BailOutMarkTempObject) -BAIL_OUT_KIND(BailOutFailedEquivalentTypeCheck, IR::BailOutMarkTempObject) +BAIL_OUT_KIND(BailOutFailedTypeCheck, IR::BailOutMarkTempObject | IR::LazyBailOut) +BAIL_OUT_KIND(BailOutFailedEquivalentTypeCheck, IR::BailOutMarkTempObject | IR::LazyBailOut) BAIL_OUT_KIND(BailOutInjected, 0) BAIL_OUT_KIND(BailOutExpectingInteger, 0) BAIL_OUT_KIND(BailOutExpectingString, 0) BAIL_OUT_KIND(BailOutFailedInlineTypeCheck, IR::BailOutMarkTempObject) -BAIL_OUT_KIND(BailOutFailedFixedFieldTypeCheck, IR::BailOutMarkTempObject) -BAIL_OUT_KIND(BailOutFailedFixedFieldCheck, 0) -BAIL_OUT_KIND(BailOutFailedEquivalentFixedFieldTypeCheck, IR::BailOutMarkTempObject) +BAIL_OUT_KIND(BailOutFailedFixedFieldTypeCheck, IR::BailOutMarkTempObject | IR::LazyBailOut) +BAIL_OUT_KIND(BailOutFailedFixedFieldCheck, IR::LazyBailOut) +BAIL_OUT_KIND(BailOutFailedEquivalentFixedFieldTypeCheck, IR::BailOutMarkTempObject | IR::LazyBailOut) BAIL_OUT_KIND(BailOutOnFloor, 0) BAIL_OUT_KIND(BailOnModByPowerOf2, 0) BAIL_OUT_KIND(BailOnIntMin, 0) @@ -42,7 +42,6 @@ BAIL_OUT_KIND(BailOnDivResultNotInt, IR::BailOutOnDivByZero | IR: BAIL_OUT_KIND(BailOnSimpleJitToFullJitLoopBody, 0) BAIL_OUT_KIND(BailOutFailedCtorGuardCheck, 0) BAIL_OUT_KIND(BailOutOnFailedHoistedBoundCheck, 0) -BAIL_OUT_KIND(LazyBailOut, 0) BAIL_OUT_KIND(BailOutOnFailedHoistedLoopCountBasedBoundCheck, 0) BAIL_OUT_KIND(BailOutForGeneratorYield, 0) BAIL_OUT_KIND(BailOutOnException, 0) @@ -110,9 +109,11 @@ BAIL_OUT_KIND_VALUE(BailOutOnDivSrcConditions, BailOutOnDivByZero | BailOutOnDiv #define BAIL_OUT_KIND_MISC_BIT_START BAIL_OUT_KIND_DIV_SRC_CONDITIONS_BIT_START + 2 BAIL_OUT_KIND_VALUE(BailOutMarkTempObject, 1 << (BAIL_OUT_KIND_MISC_BIT_START + 0)) +// this is the most significant bit, must cast it to unsigned int so that the compiler knows we are not using a negative number +BAIL_OUT_KIND_VALUE(LazyBailOut, (uint) 1 << (BAIL_OUT_KIND_MISC_BIT_START + 1)) +BAIL_OUT_KIND_VALUE(BailOutMisc, BailOutMarkTempObject | LazyBailOut) - -BAIL_OUT_KIND_VALUE_LAST(BailOutKindBits, BailOutMarkTempObject | BailOutOnDivSrcConditions | BailOutOnResultConditions | BailOutForArrayBits | BailOutForDebuggerBits) +BAIL_OUT_KIND_VALUE_LAST(BailOutKindBits, BailOutMisc | BailOutOnDivSrcConditions | BailOutOnResultConditions | BailOutForArrayBits | BailOutForDebuggerBits) // Help caller undefine the macros #undef BAIL_OUT_KIND diff --git a/lib/Backend/CMakeLists.txt b/lib/Backend/CMakeLists.txt index 6825144d4eb..f4b923b58d9 100644 --- a/lib/Backend/CMakeLists.txt +++ b/lib/Backend/CMakeLists.txt @@ -1,5 +1,59 @@ +if(CC_TARGETS_AMD64) + set (CC_BACKEND_ARCH_FOLDER amd64) + set (CC_BACKEND_ARCH_FILES + amd64/EncoderMD.cpp + amd64/LinearScanMD.cpp + amd64/LowererMDArch.cpp + amd64/PeepsMD.cpp + amd64/PrologEncoderMD.cpp + amd64/LinearScanMdA.S + amd64/Thunks.S + AgenPeeps.cpp + EhFrame.cpp + LowerMDShared.cpp + LowerMDSharedSimd128.cpp + PrologEncoder.cpp + ) +elseif(CC_TARGETS_X86) + set (CC_BACKEND_ARCH_FOLDER i386) + set (CC_BACKEND_ARCH_FILES + i386/EncoderMD.cpp + i386/LinearScanMD.cpp + i386/LowererMDArch.cpp + i386/PeepsMD.cpp + AgenPeeps.cpp + LowerMDShared.cpp + LowerMDSharedSimd128.cpp + ) +elseif(CC_TARGETS_ARM64) + set (CC_BACKEND_ARCH_FOLDER arm64) + set (CC_BACKEND_ARCH_FILES + arm64/ARM64LogicalImmediates.cpp + arm64/ARM64UnwindEncoder.cpp + arm64/EncoderMD.cpp + arm64/LegalizeMD.cpp + arm64/LinearScanMD.cpp + arm64/LinearScanMdA.S + arm64/LowerMD.cpp + arm64/PeepsMD.cpp + arm64/Thunks.S + arm64/UnwindInfoManager.cpp + ) +elseif(CC_TARGETS_ARM) + set (CC_BACKEND_ARCH_FOLDER arm) + set (CC_BACKEND_ARCH_FILES + arm/EncoderMD.cpp + arm/LegalizeMD.cpp + arm/LinearScanMD.cpp + arm/LinearScanMdA.asm + arm/LowerMD.cpp + arm/PeepsMD.cpp + arm/Thunks.asm + arm/UnwindInfoManager.cpp + ) +endif() + add_library (Chakra.Backend OBJECT - AgenPeeps.cpp AsmJsJITInfo.cpp Backend.cpp BackendApi.cpp @@ -12,7 +66,6 @@ add_library (Chakra.Backend OBJECT CodeGenWorkItem.cpp DbCheckPostLower.cpp Debug.cpp - EhFrame.cpp EmitBuffer.cpp Encoder.cpp EquivalentTypeSet.cpp @@ -57,8 +110,6 @@ add_library (Chakra.Backend OBJECT JnHelperMethod.cpp LinearScan.cpp Lower.cpp - LowerMDShared.cpp - LowerMDSharedSimd128.cpp NativeCodeData.cpp NativeCodeGenerator.cpp NativeEntryPointData.cpp @@ -68,7 +119,6 @@ add_library (Chakra.Backend OBJECT PageAllocatorPool.cpp Peeps.cpp PreLowerPeeps.cpp - PrologEncoder.cpp QueuedFullJitWorkItem.cpp Region.cpp SccLiveness.cpp @@ -83,30 +133,12 @@ add_library (Chakra.Backend OBJECT TempTracker.cpp ValueInfo.cpp ValueRelativeOffset.cpp - amd64/EncoderMD.cpp - amd64/LinearScanMD.cpp - amd64/LowererMDArch.cpp - amd64/PeepsMD.cpp - amd64/PrologEncoderMD.cpp - amd64/LinearScanMdA.S - amd64/Thunks.S -# arm64/EncoderMD.cpp -# arm64/LowerMD.cpp -# arm/EncoderMD.cpp -# arm/LegalizeMD.cpp -# arm/LinearScanMD.cpp -# arm/LowerMD.cpp -# arm/PeepsMD.cpp -# arm/UnwindInfoManager.cpp -# i386/EncoderMD.cpp -# i386/LinearScanMD.cpp -# i386/LowererMDArch.cpp -# i386/PeepsMD.cpp + ${CC_BACKEND_ARCH_FILES} ) target_include_directories ( Chakra.Backend PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} - amd64 + ${CC_BACKEND_ARCH_FOLDER} ../Common ../JITIDL ../Runtime diff --git a/lib/Backend/CodeGenNumberAllocator.cpp b/lib/Backend/CodeGenNumberAllocator.cpp index 19ec6b2b200..ddf424c2dd2 100644 --- a/lib/Backend/CodeGenNumberAllocator.cpp +++ b/lib/Backend/CodeGenNumberAllocator.cpp @@ -571,4 +571,4 @@ XProcNumberPageSegmentManager::~XProcNumberPageSegmentManager() temp = (XProcNumberPageSegmentImpl*)next; } } -#endif \ No newline at end of file +#endif diff --git a/lib/Backend/DbCheckPostLower.cpp b/lib/Backend/DbCheckPostLower.cpp index 59f10a4d9af..1a77f7c70d4 100644 --- a/lib/Backend/DbCheckPostLower.cpp +++ b/lib/Backend/DbCheckPostLower.cpp @@ -20,6 +20,7 @@ DbCheckPostLower::Check() { case IR::InstrKindLabel: case IR::InstrKindProfiledLabel: + { isInHelperBlock = instr->AsLabelInstr()->isOpHelper; if (doOpHelperCheck && !isInHelperBlock && !instr->AsLabelInstr()->m_noHelperAssert) { @@ -82,7 +83,7 @@ DbCheckPostLower::Check() } } break; - + } case IR::InstrKindBranch: if (doOpHelperCheck && !isInHelperBlock) { @@ -283,4 +284,135 @@ void DbCheckPostLower::Check(IR::RegOpnd *regOpnd) } } +#if defined(_M_IX86) || defined(_M_X64) + +bool +DbCheckPostLower::IsEndBoundary(IR::Instr *instr) +{ + const Js::OpCode opcode = instr->m_opcode; + return instr->IsLabelInstr() || + opcode == Js::OpCode::CMP || + opcode == Js::OpCode::TEST || + opcode == Js::OpCode::JMP; +} + +void +DbCheckPostLower::EnsureValidEndBoundary(IR::Instr *instr) +{ + AssertMsg(IsEndBoundary(instr), "Nested helper call. Not a valid end boundary."); + if (instr->IsLabelInstr() && instr->AsLabelInstr()->GetNextNonEmptyLabel()->isOpHelper) + { + instr->Dump(); + AssertMsg(false, "Nested helper call. Falling through a helper label."); + } + + if (instr->m_opcode == Js::OpCode::JMP && instr->AsBranchInstr()->GetTarget()->GetNextNonEmptyLabel()->isOpHelper) + { + instr->Dump(); + AssertMsg(false, "Nested helper call. Jumping to a helper label."); + } +} + +bool +DbCheckPostLower::IsAssign(IR::Instr *instr) +{ + return LowererMD::IsAssign(instr) +#ifdef _M_X64 + || instr->m_opcode == Js::OpCode::MOVQ +#endif + ; +} + +bool +DbCheckPostLower::IsCallToHelper(IR::Instr *instr, IR::JnHelperMethod method) +{ + IR::Instr *prev = instr->m_prev; + IR::Opnd *src1 = prev->GetSrc1(); + return instr->m_opcode == Js::OpCode::CALL && + prev->m_opcode == Js::OpCode::MOV && + src1 && + src1->IsHelperCallOpnd() && + src1->AsHelperCallOpnd()->m_fnHelper == method; +} + +void +DbCheckPostLower::EnsureOnlyMovesToRegisterOpnd(IR::Instr *instr) +{ + IR::Instr *startingCallInstrSequence = instr; + Assert(instr->m_opcode == Js::OpCode::CALL && instr->HasLazyBailOut()); + instr = instr->m_next; + while (!this->IsEndBoundary(instr)) + { + if (!instr->IsPragmaInstr()) + { + if (this->IsAssign(instr)) + { + if (!instr->GetDst()->IsRegOpnd()) + { + // Instructions such as Op_SetElementI with LazyBailOut are + // followed by a MOV to re-enable implicit calls, don't throw + // in such cases. + if (!instr->m_noLazyHelperAssert) + { + instr->Dump(); + AssertMsg(false, "Nested helper call. Non-register operand for destination."); + } + } + } + else if (this->IsCallToHelper(startingCallInstrSequence, IR::HelperOp_Typeof)) + { + if (this->IsCallToHelper(instr, IR::HelperOp_Equal) || + this->IsCallToHelper(instr, IR::HelperOp_StrictEqual) || + this->IsCallToHelper(instr, IR::HelperOP_CmEq_A) || + this->IsCallToHelper(instr, IR::HelperOP_CmNeq_A) + ) + { + // Pattern matched + } + else + { + instr->Dump(); + AssertMsg(false, "Nested helper call. Branch TypeOf/Equal doesn't match."); + } + } + else if (instr->m_opcode == Js::OpCode::LEA) + { + // Skip, this is probably NewScArray + } + else + { + instr->Dump(); + AssertMsg(false, "Nested helper call. Not assignment after CALL."); + } + } + + instr = instr->m_next; + } + + this->EnsureValidEndBoundary(instr); +} + +void +DbCheckPostLower::CheckNestedHelperCalls() +{ + bool isInHelperBlock = false; + FOREACH_INSTR_IN_FUNC(instr, this->func) + { + if (instr->IsLabelInstr()) + { + isInHelperBlock = instr->AsLabelInstr()->isOpHelper; + } + + if (!isInHelperBlock || instr->m_opcode != Js::OpCode::CALL || !instr->HasLazyBailOut()) + { + continue; + } + + this->EnsureOnlyMovesToRegisterOpnd(instr); + + } NEXT_INSTR_IN_FUNC; +} + +#endif // X64 || X86 + #endif // DBG diff --git a/lib/Backend/DbCheckPostLower.h b/lib/Backend/DbCheckPostLower.h index 8257fed75c5..658ee77cb8f 100644 --- a/lib/Backend/DbCheckPostLower.h +++ b/lib/Backend/DbCheckPostLower.h @@ -13,9 +13,21 @@ class DbCheckPostLower void Check(IR::Opnd *opnd); void Check(IR::RegOpnd *regOpnd); +#if defined(_M_IX86) || defined(_M_X64) + bool IsCallToHelper(IR::Instr *instr, IR::JnHelperMethod method); + bool IsEndBoundary(IR::Instr * instr); + void EnsureValidEndBoundary(IR::Instr * instr); + bool IsAssign(IR::Instr * instr); + void EnsureOnlyMovesToRegisterOpnd(IR::Instr * instr); +#endif + public: DbCheckPostLower(Func *func) : func(func) { } void Check(); + +#if defined(_M_IX86) || defined(_M_X64) + void CheckNestedHelperCalls(); +#endif }; #endif // DBG diff --git a/lib/Backend/Encoder.cpp b/lib/Backend/Encoder.cpp index 493f112f746..35f0a618983 100644 --- a/lib/Backend/Encoder.cpp +++ b/lib/Backend/Encoder.cpp @@ -77,7 +77,7 @@ Encoder::Encode() m_pc = m_encodeBuffer; m_inlineeFrameMap = Anew(m_tempAlloc, ArenaInlineeFrameMap, m_tempAlloc); - m_bailoutRecordMap = Anew(m_tempAlloc, ArenaBailoutRecordMap, m_tempAlloc); + m_sortedLazyBailoutRecordList = Anew(m_tempAlloc, ArenaLazyBailoutRecordList, m_tempAlloc); IR::PragmaInstr* pragmaInstr = nullptr; uint32 pragmaOffsetInBuffer = 0; @@ -254,9 +254,15 @@ Encoder::Encode() isCallInstr = false; this->RecordInlineeFrame(instr->m_func, GetCurrentOffset()); } - if (instr->HasBailOutInfo() && Lowerer::DoLazyBailout(this->m_func)) + + if (instr->HasLazyBailOut()) + { + this->SaveToLazyBailOutRecordList(instr, this->GetCurrentOffset()); + } + + if (instr->m_opcode == Js::OpCode::LazyBailOutThunkLabel) { - this->RecordBailout(instr, (uint32)(m_pc - m_encodeBuffer)); + this->SaveLazyBailOutThunkOffset(this->GetCurrentOffset()); } } else @@ -320,6 +326,165 @@ Encoder::Encode() } } + // Assembly Dump Phase + // This phase exists to assist tooling that expects "assemblable" output - that is, + // output that, with minimal manual handling, could theoretically be fed to another + // assembler to make a valid function for the target platform. We don't guarantee a + // dump from this will _actually_ be assemblable, but it is significantly closer to + // that than our normal, annotated output +#if DBG_DUMP + if (PHASE_DUMP(Js::AssemblyPhase, m_func)) + { + FOREACH_INSTR_IN_FUNC(instr, m_func) + { + bool hasPrintedForOpnds = false; + Func* localScopeFuncForLambda = m_func; + auto printOpnd = [&hasPrintedForOpnds, localScopeFuncForLambda](IR::Opnd* opnd) + { + if (hasPrintedForOpnds) + { + Output::Print(_u(", ")); + } + switch (opnd->m_kind) + { + case IR::OpndKindInvalid: + AssertMsg(false, "Should be unreachable"); + break; + case IR::OpndKindIntConst: + Output::Print(_u("%lli"), (long long int)opnd->AsIntConstOpnd()->GetValue()); + break; + case IR::OpndKindInt64Const: + case IR::OpndKindFloatConst: + case IR::OpndKindFloat32Const: + case IR::OpndKindSimd128Const: + AssertMsg(false, "Not Yet Implemented"); + break; + case IR::OpndKindHelperCall: + Output::Print(_u("%s"), IR::GetMethodName(opnd->AsHelperCallOpnd()->m_fnHelper)); + break; + case IR::OpndKindSym: + Output::Print(_u("SYM(")); + opnd->Dump(IRDumpFlags_SimpleForm, localScopeFuncForLambda); + Output::Print(_u(")")); + break; + case IR::OpndKindReg: + Output::Print(_u("%S"), RegNames[opnd->AsRegOpnd()->GetReg()]); + break; + case IR::OpndKindAddr: + Output::Print(_u("0x%p"), opnd->AsAddrOpnd()->m_address); + break; + case IR::OpndKindIndir: + { + IR::IndirOpnd* indirOpnd = opnd->AsIndirOpnd(); + IR::RegOpnd* baseOpnd = indirOpnd->GetBaseOpnd(); + IR::RegOpnd* indexOpnd = indirOpnd->GetIndexOpnd(); + Output::Print(_u("[")); + bool hasPrintedComponent = false; + if (baseOpnd != nullptr) + { + Output::Print(_u("%S"), RegNames[baseOpnd->GetReg()]); + hasPrintedComponent = true; + } + if (indexOpnd != nullptr) + { + if (hasPrintedComponent) + { + Output::Print(_u(" + ")); + } + Output::Print(_u("%S * %u"), RegNames[indexOpnd->GetReg()], indirOpnd->GetScale()); + hasPrintedComponent = true; + } + if (hasPrintedComponent) + { + Output::Print(_u(" + ")); + } + Output::Print(_u("(%i)]"), indirOpnd->GetOffset()); + break; + } + case IR::OpndKindLabel: + opnd->Dump(IRDumpFlags_SimpleForm, localScopeFuncForLambda); + break; + case IR::OpndKindMemRef: + opnd->DumpOpndKindMemRef(true, localScopeFuncForLambda); + break; + case IR::OpndKindRegBV: + AssertMsg(false, "Should be unreachable"); + break; + case IR::OpndKindList: + AssertMsg(false, "Should be unreachable"); + break; + default: + AssertMsg(false, "Missing operand type"); + } + hasPrintedForOpnds = true; + }; + switch(instr->GetKind()) + { + case IR::InstrKindInvalid: + Assert(false); + break; + case IR::InstrKindJitProfiling: + case IR::InstrKindProfiled: + case IR::InstrKindInstr: + { + Output::SkipToColumn(4); + Output::Print(_u("%s "), Js::OpCodeUtil::GetOpCodeName(instr->m_opcode)); + Output::SkipToColumn(18); + IR::Opnd* dst = instr->GetDst(); + IR::Opnd* src1 = instr->GetSrc1(); + IR::Opnd* src2 = instr->GetSrc2(); + if (dst != nullptr && (src1 == nullptr || !dst->IsRegOpnd() || !src1->IsRegOpnd() || dst->AsRegOpnd()->GetReg() != src1->AsRegOpnd()->GetReg())) // Print dst if it's there, and not the same reg as src1 (which is usually an instr that has a srcdest + { + printOpnd(dst); + } + if (src1 != nullptr) + { + printOpnd(src1); + } + if (src2 != nullptr) + { + printOpnd(src2); + } + break; + } + case IR::InstrKindBranch: + Output::SkipToColumn(4); + Output::Print(_u("%s "), Js::OpCodeUtil::GetOpCodeName(instr->m_opcode)); + Output::SkipToColumn(18); + if (instr->AsBranchInstr()->IsMultiBranch()) + { + Assert(instr->GetSrc1() != nullptr); + printOpnd(instr->GetSrc1()); + } + else + { + Output::Print(_u("L%u"), instr->AsBranchInstr()->GetTarget()->m_id); + } + break; + case IR::InstrKindProfiledLabel: + case IR::InstrKindLabel: + Output::Print(_u("L%u:"), instr->AsLabelInstr()->m_id); + break; + case IR::InstrKindEntry: + case IR::InstrKindExit: + case IR::InstrKindPragma: + // No output + break; + case IR::InstrKindByteCodeUses: + AssertMsg(false, "Instruction kind shouldn't be present here"); + break; + default: + Assert(false); + break; + } + Output::SetAlignAndPrefix(60, _u("; ")); + instr->Dump(); + Output::ResetAlignAndPrefix(); + } NEXT_INSTR_IN_FUNC; + } +#endif + // End Assembly Dump Phase + BEGIN_CODEGEN_PHASE(m_func, Js::EmitterPhase); // Copy to permanent buffer. @@ -378,11 +543,6 @@ Encoder::Encode() m_func->GetThreadContextInfo()->ResetIsAllJITCodeInPreReservedRegion(); } - this->m_bailoutRecordMap->MapAddress([=](int index, LazyBailOutRecord* record) - { - this->m_encoderMD.AddLabelReloc((BYTE*)&record->instructionPointer); - }); - // Relocs m_encoderMD.ApplyRelocs((size_t)allocation->address, codeSize, &bufferCRC, isSuccessBrShortAndLoopAlign); @@ -472,10 +632,7 @@ Encoder::Encode() } } - if (this->m_bailoutRecordMap->Count() > 0) - { - m_func->GetInProcJITEntryPointInfo()->GetInProcNativeEntryPointData()->RecordBailOutMap(m_bailoutRecordMap); - } + this->SaveLazyBailOutJitTransferData(); if (this->m_func->pinnedTypeRefs != nullptr) { @@ -570,18 +727,6 @@ Encoder::Encode() } } - if (this->m_func->lazyBailoutProperties.Count() > 0) - { - int count = this->m_func->lazyBailoutProperties.Count(); - Js::PropertyId* lazyBailoutProperties = HeapNewArrayZ(Js::PropertyId, count); - Js::PropertyId* dstProperties = lazyBailoutProperties; - this->m_func->lazyBailoutProperties.Map([&](Js::PropertyId propertyId) - { - *dstProperties++ = propertyId; - }); - m_func->GetInProcJITEntryPointInfo()->GetJitTransferData()->SetLazyBailoutProperties(lazyBailoutProperties, count); - } - // Save all property guards on the JIT transfer data in a map keyed by property ID. We will use this map when installing the entry // point to register each guard for invalidation. if (this->m_func->propertyGuardsByPropertyId != nullptr) @@ -866,7 +1011,7 @@ void Encoder::RecordInlineeFrame(Func* inlinee, uint32 currentOffset) if (!(this->m_func->IsLoopBody() && PHASE_OFF(Js::InlineInJitLoopBodyPhase, this->m_func)) && !this->m_func->IsSimpleJit()) { InlineeFrameRecord* record = nullptr; - if (inlinee->frameInfo && inlinee->m_hasInlineArgsOpt) + if (inlinee->frameInfo) { record = inlinee->frameInfo->record; Assert(record != nullptr); @@ -1059,7 +1204,8 @@ Encoder::ShortenBranchesAndLabelAlign(BYTE **codeStart, ptrdiff_t *codeSize, uin , &m_origOffsetBuffer ); // Here we mark BRs to be shortened and adjust Labels and relocList entries offsets. - uint32 offsetBuffIndex = 0, pragmaInstToRecordOffsetIndex = 0, inlineeFrameRecordsIndex = 0, inlineeFrameMapIndex = 0; + FixUpMapIndex mapIndices; + int32 totalBytesSaved = 0; // loop over all BRs, find the ones we can convert to short form @@ -1083,7 +1229,7 @@ Encoder::ShortenBranchesAndLabelAlign(BYTE **codeStart, ptrdiff_t *codeSize, uin { AssertMsg(reloc.isAlignedLabel(), "Expecting aligned label."); // we aligned a loop, fix maps - m_encoderMD.FixMaps((uint32)(reloc.getLabelOrigPC() - buffStart), totalBytesSaved, &inlineeFrameRecordsIndex, &inlineeFrameMapIndex, &pragmaInstToRecordOffsetIndex, &offsetBuffIndex); + m_encoderMD.FixMaps((uint32)(reloc.getLabelOrigPC() - buffStart), totalBytesSaved, &mapIndices); codeChange = true; } totalBytesSaved = newTotalBytesSaved; @@ -1144,7 +1290,7 @@ Encoder::ShortenBranchesAndLabelAlign(BYTE **codeStart, ptrdiff_t *codeSize, uin // fix all maps entries from last shortened br to this one, before updating total bytes saved. brOffset = (uint32) ((BYTE*)reloc.m_origPtr - buffStart); - m_encoderMD.FixMaps(brOffset, totalBytesSaved, &inlineeFrameRecordsIndex, &inlineeFrameMapIndex, &pragmaInstToRecordOffsetIndex, &offsetBuffIndex); + m_encoderMD.FixMaps(brOffset, totalBytesSaved, &mapIndices); codeChange = true; totalBytesSaved += bytesSaved; @@ -1160,9 +1306,10 @@ Encoder::ShortenBranchesAndLabelAlign(BYTE **codeStart, ptrdiff_t *codeSize, uin // Fix the rest of the maps, if needed. if (totalBytesSaved != 0) { - m_encoderMD.FixMaps((uint32) -1, totalBytesSaved, &inlineeFrameRecordsIndex, &inlineeFrameMapIndex, &pragmaInstToRecordOffsetIndex, &offsetBuffIndex); + m_encoderMD.FixMaps((uint32)-1, totalBytesSaved, &mapIndices); codeChange = true; newCodeSize -= totalBytesSaved; + this->FixLazyBailOutThunkOffset(totalBytesSaved); } // no BR shortening or Label alignment happened, no need to copy code @@ -1485,27 +1632,6 @@ void Encoder::CopyMaps(OffsetList **m_origInlineeFrameRecords #endif -void Encoder::RecordBailout(IR::Instr* instr, uint32 currentOffset) -{ - BailOutInfo* bailoutInfo = instr->GetBailOutInfo(); - if (bailoutInfo->bailOutRecord == nullptr) - { - return; - } -#if DBG_DUMP - if (PHASE_DUMP(Js::LazyBailoutPhase, m_func)) - { - Output::Print(_u("Offset: %u Instr: "), currentOffset); - instr->Dump(); - Output::Print(_u("Bailout label: ")); - bailoutInfo->bailOutInstr->Dump(); - } -#endif - Assert(bailoutInfo->bailOutInstr->IsLabelInstr()); - LazyBailOutRecord record(currentOffset, (BYTE*)bailoutInfo->bailOutInstr, bailoutInfo->bailOutRecord); - m_bailoutRecordMap->Add(record); -} - #if DBG_DUMP void Encoder::DumpInlineeFrameMap(size_t baseAddress) { @@ -1526,3 +1652,70 @@ void Encoder::DumpInlineeFrameMap(size_t baseAddress) }); } #endif + +void +Encoder::SaveToLazyBailOutRecordList(IR::Instr* instr, uint32 currentOffset) +{ + BailOutInfo* bailOutInfo = instr->GetBailOutInfo(); + + Assert(instr->OnlyHasLazyBailOut() && bailOutInfo->bailOutRecord != nullptr); + +#if DBG_DUMP + if (PHASE_DUMP(Js::LazyBailoutPhase, m_func)) + { + Output::Print(_u("Offset: %u Instr: "), currentOffset); + instr->Dump(); + Output::Print(_u("Bailout label: ")); + bailOutInfo->bailOutInstr->Dump(); + } +#endif + + LazyBailOutRecord record(currentOffset, bailOutInfo->bailOutRecord); + this->m_sortedLazyBailoutRecordList->Add(record); +} + +void +Encoder::SaveLazyBailOutThunkOffset(uint32 currentOffset) +{ + AssertMsg( + this->m_lazyBailOutThunkOffset == 0, + "We should only have one thunk generated during final lowerer" + ); + this->m_lazyBailOutThunkOffset = this->GetCurrentOffset(); +} + +void +Encoder::SaveLazyBailOutJitTransferData() +{ + if (this->m_func->HasLazyBailOut()) + { + Assert(this->m_sortedLazyBailoutRecordList->Count() > 0); + Assert(this->m_lazyBailOutThunkOffset != 0); + Assert(this->m_func->GetLazyBailOutRecordSlot() != nullptr); + + auto nativeEntryPointData = this->m_func->GetInProcJITEntryPointInfo()->GetInProcNativeEntryPointData(); + nativeEntryPointData->SetSortedLazyBailOutRecordList(this->m_sortedLazyBailoutRecordList); + nativeEntryPointData->SetLazyBailOutRecordSlotOffset(this->m_func->GetLazyBailOutRecordSlot()->m_offset); + nativeEntryPointData->SetLazyBailOutThunkOffset(this->m_lazyBailOutThunkOffset); + } + + if (this->m_func->lazyBailoutProperties.Count() > 0) + { + const int count = this->m_func->lazyBailoutProperties.Count(); + Js::PropertyId* lazyBailoutProperties = HeapNewArrayZ(Js::PropertyId, count); + Js::PropertyId* dstProperties = lazyBailoutProperties; + this->m_func->lazyBailoutProperties.Map([&](Js::PropertyId propertyId) + { + *dstProperties++ = propertyId; + }); + this->m_func->GetInProcJITEntryPointInfo()->GetJitTransferData()->SetLazyBailoutProperties(lazyBailoutProperties, count); + } +} + +void +Encoder::FixLazyBailOutThunkOffset(uint32 bytesSaved) +{ + // Lazy bailout thunk is inserted at the end of the function, + // so just decrease the offset by the number of bytes saved + this->m_lazyBailOutThunkOffset -= bytesSaved; +} diff --git a/lib/Backend/Encoder.h b/lib/Backend/Encoder.h index be2e122e200..8c76cb60d09 100644 --- a/lib/Backend/Encoder.h +++ b/lib/Backend/Encoder.h @@ -15,16 +15,28 @@ typedef JsUtil::List ArenaInlineeF typedef JsUtil::List PragmaInstrList; typedef JsUtil::List OffsetList; typedef JsUtil::List JmpTableList; +typedef JsUtil::List ArenaLazyBailoutRecordList; + +struct FixUpMapIndex +{ + uint32 offsetBuffIndex = 0; + uint32 pragmaInstToRecordOffsetIndex = 0; + uint32 inlineeFrameRecordsIndex = 0; + uint32 inlineeFrameMapIndex = 0; + uint32 lazyBailOutRecordListIndex = 0; +}; class Encoder { friend class EncoderMD; public: - Encoder(Func * func) : m_func(func), m_encoderMD(func), m_inlineeFrameMap(nullptr) {} + Encoder(Func * func) : + m_func(func), m_encoderMD(func), m_inlineeFrameMap(nullptr), + m_lazyBailOutThunkOffset(0), m_sortedLazyBailoutRecordList(nullptr) + {} void Encode(); void RecordInlineeFrame(Func* inlinee, uint32 currentOffset); - void RecordBailout(IR::Instr* instr, uint32 currentOffset); private: bool DoTrackAllStatementBoundary() const; @@ -38,8 +50,9 @@ class Encoder ArenaInlineeFrameMap* m_inlineeFrameMap; uint32 m_inlineeFrameMapDataOffset; uint32 m_inlineeFrameMapRecordCount; - typedef JsUtil::List ArenaBailoutRecordMap; - ArenaBailoutRecordMap* m_bailoutRecordMap; + + uint32 m_lazyBailOutThunkOffset; + ArenaLazyBailoutRecordList* m_sortedLazyBailoutRecordList; #if DBG_DUMP void DumpInlineeFrameMap(size_t baseAddress); uint32 * m_offsetBuffer; @@ -67,5 +80,8 @@ class Encoder #if defined(_M_IX86) || defined(_M_X64) void ValidateCRCOnFinalBuffer(_In_reads_bytes_(finalCodeSize) BYTE * finalCodeBufferStart, size_t finalCodeSize, size_t jumpTableSize, _In_reads_bytes_(finalCodeSize) BYTE * oldCodeBufferStart, uint initialCrcSeed, uint bufferCrcToValidate, BOOL isSuccessBrShortAndLoopAlign); #endif + void FixLazyBailOutThunkOffset(uint32 bytesSaved); + void SaveLazyBailOutJitTransferData(); + void SaveLazyBailOutThunkOffset(uint32 currentOffset); + void SaveToLazyBailOutRecordList(IR::Instr* instr, uint32 currentOffset); }; - diff --git a/lib/Backend/EquivalentTypeSet.cpp b/lib/Backend/EquivalentTypeSet.cpp index d345708d79c..53e892e1789 100644 --- a/lib/Backend/EquivalentTypeSet.cpp +++ b/lib/Backend/EquivalentTypeSet.cpp @@ -162,4 +162,4 @@ void EquivalentTypeSet::SortAndRemoveDuplicates() this->sortedAndDuplicatesRemoved = true; } } -#endif \ No newline at end of file +#endif diff --git a/lib/Backend/FixedFieldInfo.cpp b/lib/Backend/FixedFieldInfo.cpp index b3f04c2f2de..947fbb226d8 100644 --- a/lib/Backend/FixedFieldInfo.cpp +++ b/lib/Backend/FixedFieldInfo.cpp @@ -14,16 +14,16 @@ FixedFieldInfo::PopulateFixedField(_In_opt_ Js::Type * type, _In_opt_ Js::Var va FixedFieldIDL * rawFF = fixed->GetRaw(); rawFF->fieldValue = var; rawFF->nextHasSameFixedField = false; - if (var != nullptr && Js::JavascriptFunction::Is(var)) + if (var != nullptr && Js::VarIs(var)) { - Js::JavascriptFunction * funcObj = Js::JavascriptFunction::FromVar(var); + Js::JavascriptFunction * funcObj = Js::VarTo(var); rawFF->valueType = ValueType::FromObject(funcObj).GetRawData(); rawFF->funcInfoAddr = (void*)funcObj->GetFunctionInfo(); rawFF->isClassCtor = funcObj->GetFunctionInfo()->IsClassConstructor(); rawFF->localFuncId = funcObj->GetFunctionInfo()->GetLocalFunctionId(); - if (Js::ScriptFunction::Is(var)) + if (Js::VarIs(var)) { - rawFF->environmentAddr = (void*)Js::ScriptFunction::FromVar(funcObj)->GetEnvironment(); + rawFF->environmentAddr = (void*)Js::VarTo(funcObj)->GetEnvironment(); } } if (type != nullptr) diff --git a/lib/Backend/FlowGraph.cpp b/lib/Backend/FlowGraph.cpp index 645b58e7601..4a51776b3b3 100644 --- a/lib/Backend/FlowGraph.cpp +++ b/lib/Backend/FlowGraph.cpp @@ -196,6 +196,7 @@ FlowGraph::Build(void) BasicBlock * currBlock = nullptr; BasicBlock * nextBlock = nullptr; bool hasCall = false; + bool hasYield = false; FOREACH_INSTR_IN_FUNC_BACKWARD_EDITING(instr, instrPrev, func) { @@ -208,7 +209,9 @@ FlowGraph::Build(void) nextBlock = currBlock; currBlock = this->AddBlock(instr->m_next, currLastInstr, nextBlock); currBlock->hasCall = hasCall; + currBlock->hasYield = hasYield; hasCall = false; + hasYield = false; } currLastInstr = instr; @@ -243,7 +246,9 @@ FlowGraph::Build(void) nextBlock = currBlock; currBlock = this->AddBlock(instr, currLastInstr, nextBlock); currBlock->hasCall = hasCall; + currBlock->hasYield = hasYield; hasCall = false; + hasYield = false; currLastInstr = nullptr; } @@ -350,6 +355,11 @@ FlowGraph::Build(void) break; } + if (instr->m_opcode == Js::OpCode::Yield) + { + hasYield = true; + } + if (OpCodeAttr::UseAllFields(instr->m_opcode)) { // UseAllFields opcode are call instruction or opcode that would call. @@ -825,6 +835,8 @@ FlowGraph::RunPeeps() case Js::OpCode::BrSrNeq_A: case Js::OpCode::BrOnHasProperty: case Js::OpCode::BrOnNoProperty: + case Js::OpCode::BrOnHasLocalProperty: + case Js::OpCode::BrOnNoLocalProperty: case Js::OpCode::BrHasSideEffects: case Js::OpCode::BrNotHasSideEffects: case Js::OpCode::BrFncEqApply: @@ -836,6 +848,9 @@ FlowGraph::RunPeeps() case Js::OpCode::BrOnObject_A: case Js::OpCode::BrOnClassConstructor: case Js::OpCode::BrOnBaseConstructorKind: + case Js::OpCode::BrOnObjectOrNull_A: + case Js::OpCode::BrOnNotNullObj_A: + case Js::OpCode::BrOnConstructor_A: if (tryUnsignedCmpPeep) { this->UnsignedCmpPeep(instr); @@ -1137,9 +1152,9 @@ FlowGraph::MoveBlocksBefore(BasicBlock *blockStart, BasicBlock *blockEnd, BasicB // We have to update region info for blocks whose predecessors changed if (assignRegionsBeforeGlobopt) { - UpdateRegionForBlockFromEHPred(dstPredBlock, true); - UpdateRegionForBlockFromEHPred(blockStart, true); - UpdateRegionForBlockFromEHPred(srcNextBlock, true); + UpdateRegionForBlock(dstPredBlock); + UpdateRegionForBlock(blockStart); + UpdateRegionForBlock(srcNextBlock); } } @@ -1399,6 +1414,10 @@ FlowGraph::WalkLoopBlocks(BasicBlock *block, Loop *loop, JitArenaAllocator *temp { loop->SetHasCall(); } + if (pred->loop->hasYield) + { + loop->SetHasYield(); + } loop->SetImplicitCallFlags(pred->loop->GetImplicitCallFlags()); } // Add pred to loop bit vector @@ -1429,6 +1448,10 @@ FlowGraph::AddBlockToLoop(BasicBlock *block, Loop *loop) { loop->SetHasCall(); } + if (block->hasYield) + { + loop->SetHasYield(); + } } ///---------------------------------------------------------------------------- @@ -1871,30 +1894,6 @@ FlowGraph::Destroy(void) this->func->isFlowGraphValid = false; } -bool FlowGraph::IsEHTransitionInstr(IR::Instr *instr) -{ - Js::OpCode op = instr->m_opcode; - return (op == Js::OpCode::TryCatch || op == Js::OpCode::TryFinally || op == Js::OpCode::Leave || op == Js::OpCode::LeaveNull); -} - -BasicBlock * FlowGraph::GetPredecessorForRegionPropagation(BasicBlock *block) -{ - BasicBlock *ehPred = nullptr; - FOREACH_PREDECESSOR_BLOCK(predBlock, block) - { - Region * predRegion = predBlock->GetFirstInstr()->AsLabelInstr()->GetRegion(); - if (IsEHTransitionInstr(predBlock->GetLastInstr()) && predRegion) - { - // MGTODO : change this to return, once you know there can exist only one eh transitioning pred - Assert(ehPred == nullptr); - ehPred = predBlock; - } - AssertMsg(predBlock->GetBlockNum() < this->blockCount, "Misnumbered block at teardown time?"); - } - NEXT_PREDECESSOR_BLOCK; - return ehPred; -} - // Propagate the region forward from the block's predecessor(s), tracking the effect // of the flow transition. Record the region in the block-to-region map provided // and on the label at the entry to the block (if any). @@ -1958,7 +1957,6 @@ FlowGraph::UpdateRegionForBlock(BasicBlock * block) } } - Assert(region || block->GetPredList()->Count() == 0); if (region && !region->ehBailoutData) { region->AllocateEHBailoutData(this->func, tryInstr); @@ -1997,106 +1995,6 @@ FlowGraph::UpdateRegionForBlock(BasicBlock * block) } } -void -FlowGraph::UpdateRegionForBlockFromEHPred(BasicBlock * block, bool reassign) -{ - Region *region = nullptr; - Region * predRegion = nullptr; - IR::Instr * tryInstr = nullptr; - IR::Instr * firstInstr = block->GetFirstInstr(); - if (!reassign && firstInstr->IsLabelInstr() && firstInstr->AsLabelInstr()->GetRegion()) - { - Assert(this->func->HasTry() && (this->func->DoOptimizeTry() || (this->func->IsSimpleJit() && this->func->hasBailout))); - return; - } - if (block->isDead || block->isDeleted) - { - // We can end up calling this function with such blocks, return doing nothing - // See test5() in tryfinallytests.js - return; - } - - if (block == this->blockList) - { - // Head of the graph: create the root region. - region = Region::New(RegionTypeRoot, nullptr, this->func); - } - else if (block->GetPredList()->Count() == 1) - { - BasicBlock *predBlock = block->GetPredList()->Head()->GetPred(); - AssertMsg(predBlock->GetBlockNum() < this->blockCount, "Misnumbered block at teardown time?"); - predRegion = predBlock->GetFirstInstr()->AsLabelInstr()->GetRegion(); - Assert(predRegion); - region = this->PropagateRegionFromPred(block, predBlock, predRegion, tryInstr); - } - else - { - // Propagate the region forward by finding a predecessor we've already processed. - // Since we do break block remval after region propagation, we cannot pick the first predecessor which has an assigned region - // If there is a eh transitioning pred, we pick that - // There cannot be more than one eh transitioning pred (?) - BasicBlock *ehPred = this->GetPredecessorForRegionPropagation(block); - if (ehPred) - { - predRegion = ehPred->GetFirstInstr()->AsLabelInstr()->GetRegion(); - Assert(predRegion != nullptr); - region = this->PropagateRegionFromPred(block, ehPred, predRegion, tryInstr); - } - else - { - FOREACH_PREDECESSOR_BLOCK(predBlock, block) - { - predRegion = predBlock->GetFirstInstr()->AsLabelInstr()->GetRegion(); - if (predRegion != nullptr) - { - if ((predBlock->GetLastInstr()->m_opcode == Js::OpCode::BrOnException || predBlock->GetLastInstr()->m_opcode == Js::OpCode::BrOnNoException) && - predBlock->GetLastInstr()->AsBranchInstr()->m_brFinallyToEarlyExit) - { - Assert(predRegion->IsNonExceptingFinally()); - // BrOnException from finally region to early exit - // Skip this edge - continue; - } - if (predBlock->GetLastInstr()->m_opcode == Js::OpCode::Br && - predBlock->GetLastInstr()->GetPrevRealInstr()->m_opcode == Js::OpCode::BrOnNoException) - { - Assert(predBlock->GetLastInstr()->GetPrevRealInstr()->AsBranchInstr()->m_brFinallyToEarlyExit); - Assert(predRegion->IsNonExceptingFinally()); - // BrOnException from finally region to early exit changed to BrOnNoException and Br during break block removal - continue; - } - region = this->PropagateRegionFromPred(block, predBlock, predRegion, tryInstr); - break; - } - } - NEXT_PREDECESSOR_BLOCK; - } - } - - Assert(region || block->GetPredList()->Count() == 0 || block->firstInstr->AsLabelInstr()->GetRegion()); - - if (region) - { - if (!region->ehBailoutData) - { - region->AllocateEHBailoutData(this->func, tryInstr); - } - - Assert(firstInstr->IsLabelInstr()); - if (firstInstr->IsLabelInstr()) - { - // Record the region on the label and make sure it stays around as a region - // marker if we're entering a region at this point. - IR::LabelInstr * labelInstr = firstInstr->AsLabelInstr(); - labelInstr->SetRegion(region); - if (region != predRegion) - { - labelInstr->m_hasNonBranchRef = true; - } - } - } -} - Region * FlowGraph::PropagateRegionFromPred(BasicBlock * block, BasicBlock * predBlock, Region * predRegion, IR::Instr * &tryInstr) { @@ -2488,7 +2386,7 @@ FlowGraph::InsertCompensationCodeForBlockMove(FlowEdge * edge, bool insertToLoo if (assignRegionsBeforeGlobopt) { - UpdateRegionForBlockFromEHPred(compBlock); + UpdateRegionForBlock(compBlock); } } else @@ -3399,6 +3297,16 @@ BasicBlock::CreateLoopTopBailOutInfo(GlobOpt * globOpt) return bailOutInfo; } +BVSparse * +BasicBlock::EnsureTypeIDsWithFinalType(JitArenaAllocator *alloc) +{ + if (typeIDsWithFinalType == nullptr) + { + typeIDsWithFinalType = JitAnew(alloc, BVSparse, alloc); + } + return typeIDsWithFinalType; +} + IR::Instr * FlowGraph::RemoveInstr(IR::Instr *instr, GlobOpt * globOpt) { @@ -3424,7 +3332,7 @@ FlowGraph::RemoveInstr(IR::Instr *instr, GlobOpt * globOpt) * - When we restore HeapArguments object in the bail out path, it expects the scope object also to be restored - if one was created. */ Js::OpCode opcode = instr->m_opcode; - if (opcode == Js::OpCode::LdElemI_A && instr->DoStackArgsOpt(this->func) && + if (opcode == Js::OpCode::LdElemI_A && instr->DoStackArgsOpt() && globOpt->CurrentBlockData()->IsArgumentsOpnd(instr->GetSrc1()) && instr->m_func->GetScopeObjSym()) { IR::ByteCodeUsesInstr * byteCodeUsesInstr = IR::ByteCodeUsesInstr::New(instr); @@ -3443,7 +3351,7 @@ FlowGraph::RemoveInstr(IR::Instr *instr, GlobOpt * globOpt) if (opcode == Js::OpCode::Yield) { IR::Instr *instrLabel = newByteCodeUseInstr->m_next; - while (instrLabel->m_opcode != Js::OpCode::Label) + while (instrLabel->m_opcode != Js::OpCode::GeneratorBailInLabel) { instrLabel = instrLabel->m_next; } @@ -3624,6 +3532,29 @@ Loop::SetHasCall() while (current != nullptr); } +void +Loop::SetHasYield() +{ + Loop* current = this; + do + { + if (current->hasYield) + { +#if DBG + current = current->parent; + while (current) + { + Assert(current->hasYield); + current = current->parent; + } +#endif + break; + } + current->hasYield = true; + current = current->parent; + } while (current != nullptr); +} + void Loop::SetImplicitCallFlags(Js::ImplicitCallFlags newFlags) { @@ -3694,7 +3625,7 @@ Loop::CanHoistInvariants() const return false; } - return true; + return !this->hasYield; } IR::LabelInstr * @@ -3725,10 +3656,15 @@ Loop::SetLoopTopInstr(IR::LabelInstr * loopTop) bool Loop::IsSymAssignedToInSelfOrParents(StackSym * const sym) const +{ + return IsSymAssignedToInSelfOrParents(sym->m_id); +} + +bool Loop::IsSymAssignedToInSelfOrParents(SymID id) const { for (const Loop* curLoop = this; curLoop != nullptr; curLoop = curLoop->parent) { - if (curLoop->symsAssignedToInLoop->Test(sym->m_id)) + if (curLoop->symsAssignedToInLoop->Test(id)) { return true; } @@ -4571,18 +4507,47 @@ Value * BasicBlock::FindValueInLocalThenGlobalValueTableAndUpdate(GlobOpt *globO return srcVal; } -IR::LabelInstr* BasicBlock::CanProveConditionalBranch(IR::BranchInstr *branch, GlobOpt* globOpt, GlobHashTable * localSymToValueMap) +Value* BasicBlock::GetValueForConditionalBranch( + IR::BranchInstr* branch, + IR::Opnd* opnd, + GlobOpt* globOpt, + GlobHashTable* localSymToValueMap) { - if (!branch->GetSrc1() || !branch->GetSrc1()->GetStackSym()) + if (!opnd || !opnd->GetStackSym()) { return nullptr; } + StackSym* sym = opnd->GetStackSym(); + + Value* val = FindValueInLocalThenGlobalValueTableAndUpdate( + globOpt, + localSymToValueMap, + branch, + nullptr, + sym); + + if (val != nullptr && this->loop) + { + // If this branch is within a loop, the stack sym is type specialized, and the associated + // var sym is written to within the loop, then we cannot prove the condition: additional + // assignments to the type specialized sym might be inserted in a later block. + SymID varSymID = globOpt->GetVarSymID(sym); + if (varSymID != sym->m_id && this->loop->IsSymAssignedToInSelfOrParents(varSymID)) + { + return nullptr; + } + } + + return val; +} + +IR::LabelInstr* BasicBlock::CanProveConditionalBranch(IR::BranchInstr *branch, GlobOpt *globOpt, GlobHashTable *localSymToValueMap) +{ Value *src1Val = nullptr, *src2Val = nullptr; Js::Var src1Var = nullptr, src2Var = nullptr; - src1Val = FindValueInLocalThenGlobalValueTableAndUpdate(globOpt, localSymToValueMap, branch, nullptr, branch->GetSrc1()->GetStackSym()); - + src1Val = GetValueForConditionalBranch(branch, branch->GetSrc1(), globOpt, localSymToValueMap); if (!src1Val) { return nullptr; @@ -4591,10 +4556,7 @@ IR::LabelInstr* BasicBlock::CanProveConditionalBranch(IR::BranchInstr *branch, G if (branch->GetSrc2() != nullptr) { - if (branch->GetSrc2()->GetStackSym()) - { - src2Val = FindValueInLocalThenGlobalValueTableAndUpdate(globOpt, localSymToValueMap, branch, nullptr, branch->GetSrc2()->GetStackSym()); - } + src2Val = GetValueForConditionalBranch(branch, branch->GetSrc2(), globOpt, localSymToValueMap); if (!src2Val) { return nullptr; @@ -4613,115 +4575,96 @@ IR::LabelInstr* BasicBlock::CanProveConditionalBranch(IR::BranchInstr *branch, G return newTarget; } -void -BasicBlock::CheckLegalityAndFoldPathDepBranches(GlobOpt* globOpt) +Value* +BasicBlock::UpdateValueForCopyTypeInstr(GlobOpt* globOpt, GlobHashTable* localSymToValueMap, IR::Instr* instr) { - IR::LabelInstr * lastBranchTarget = nullptr; - IR::Instr *currentInlineeEnd = nullptr, *unskippedInlineeEnd = nullptr; - GlobHashTable * localSymToValueMap = nullptr; - BVSparse * currentPathDefines = nullptr; + Value* dstValue = nullptr; + if (instr->m_opcode == Js::OpCode::LdFld) + { + // Special handling for LdFld + Assert(instr->GetSrc1()->IsSymOpnd()); + IR::SymOpnd* symOpnd = instr->GetSrc1()->AsSymOpnd(); - auto UpdateValueForCopyTypeInstr = [&](IR::Instr *instr) -> Value* { - Value * dstValue = nullptr; - if (instr->m_opcode == Js::OpCode::LdFld) + if (symOpnd->m_sym->IsPropertySym()) { - // Special handling for LdFld - Assert(instr->GetSrc1()->IsSymOpnd()); - IR::SymOpnd *symOpnd = instr->GetSrc1()->AsSymOpnd(); - - if (symOpnd->m_sym->IsPropertySym()) + PropertySym* originalPropertySym = symOpnd->m_sym->AsPropertySym(); + Value* const objectValue = FindValueInLocalThenGlobalValueTableAndUpdate(globOpt, localSymToValueMap, instr, nullptr, originalPropertySym->m_stackSym); + Sym* objSym = objectValue ? objectValue->GetValueInfo()->GetSymStore() : nullptr; + PropertySym* prop = PropertySym::Find(objSym ? objSym->m_id : originalPropertySym->m_stackSym->m_id, originalPropertySym->m_propertyId, globOpt->func); + if (prop) { - PropertySym * originalPropertySym = symOpnd->m_sym->AsPropertySym(); - Value *const objectValue = FindValueInLocalThenGlobalValueTableAndUpdate(globOpt, localSymToValueMap, instr, nullptr, originalPropertySym->m_stackSym); - Sym* objSym = objectValue ? objectValue->GetValueInfo()->GetSymStore() : nullptr; - PropertySym *prop = PropertySym::Find(objSym ? objSym->m_id : originalPropertySym->m_stackSym->m_id, originalPropertySym->m_propertyId, globOpt->func); - if (prop) - { - dstValue = FindValueInLocalThenGlobalValueTableAndUpdate(globOpt, localSymToValueMap, instr, instr->GetDst()->GetStackSym(), prop); - } - else - { - Value ** localDstValue = localSymToValueMap->FindOrInsertNew(instr->GetDst()->GetStackSym()); - dstValue = *localDstValue = nullptr; - } - } - } - else if (instr->GetSrc1()->GetStackSym()) - { - StackSym* src1Sym = instr->GetSrc1()->GetStackSym(); - dstValue = FindValueInLocalThenGlobalValueTableAndUpdate(globOpt, localSymToValueMap, instr, instr->GetDst()->GetSym(), src1Sym); - } - else if (instr->GetSrc1()->IsIntConstOpnd()) - { - Value **localValue = localSymToValueMap->FindOrInsertNew(instr->GetDst()->GetSym()); - dstValue = *localValue = globOpt->GetIntConstantValue(instr->GetSrc1()->AsIntConstOpnd()->AsInt32(), instr); - } - else if (instr->GetSrc1()->IsInt64ConstOpnd()) - { - Value **localValue = localSymToValueMap->FindOrInsertNew(instr->GetDst()->GetSym()); - dstValue = *localValue = globOpt->GetIntConstantValue(instr->GetSrc1()->AsInt64ConstOpnd()->GetValue(), instr); - } - else - { - ValueType src1Value = instr->GetSrc1()->GetValueType(); - Value **localValue = localSymToValueMap->FindOrInsertNew(instr->GetDst()->GetSym()); - if (src1Value.IsUndefined() || src1Value.IsBoolean()) - { - dstValue = *localValue = globOpt->GetVarConstantValue(instr->GetSrc1()->AsAddrOpnd()); + dstValue = FindValueInLocalThenGlobalValueTableAndUpdate(globOpt, localSymToValueMap, instr, instr->GetDst()->GetStackSym(), prop); } else { - dstValue = *localValue = nullptr; + Value** localDstValue = localSymToValueMap->FindOrInsertNew(instr->GetDst()->GetStackSym()); + dstValue = *localDstValue = nullptr; } } - return dstValue; - }; - - FOREACH_INSTR_IN_BLOCK(instr, this) + } + else if (instr->GetSrc1()->GetStackSym()) { - if (OpCodeAttr::HasDeadFallThrough(instr->m_opcode)) + StackSym* src1Sym = instr->GetSrc1()->GetStackSym(); + dstValue = FindValueInLocalThenGlobalValueTableAndUpdate(globOpt, localSymToValueMap, instr, instr->GetDst()->GetSym(), src1Sym); + } + else if (instr->GetSrc1()->IsIntConstOpnd()) + { + Value** localValue = localSymToValueMap->FindOrInsertNew(instr->GetDst()->GetSym()); + dstValue = *localValue = globOpt->GetIntConstantValue(instr->GetSrc1()->AsIntConstOpnd()->AsInt32(), instr); + } + else if (instr->GetSrc1()->IsInt64ConstOpnd()) + { + Value** localValue = localSymToValueMap->FindOrInsertNew(instr->GetDst()->GetSym()); + dstValue = *localValue = globOpt->GetIntConstantValue(instr->GetSrc1()->AsInt64ConstOpnd()->GetValue(), instr); + } + else + { + ValueType src1Value = instr->GetSrc1()->GetValueType(); + Value** localValue = localSymToValueMap->FindOrInsertNew(instr->GetDst()->GetSym()); + if (src1Value.IsUndefined() || src1Value.IsBoolean()) { - return; + dstValue = *localValue = globOpt->GetVarConstantValue(instr->GetSrc1()->AsAddrOpnd()); } - if (instr->m_opcode == Js::OpCode::InlineeEnd) + else { - unskippedInlineeEnd = currentInlineeEnd = instr; + dstValue = *localValue = nullptr; } - } NEXT_INSTR_IN_BLOCK; - - IR::Instr * instr = this->GetLastInstr(); - - // We have to first check the legality and only then allocate expensive data structures on the tempArena, because most block will have instructions we cant skip + } + return dstValue; +} +bool +BasicBlock::IsLegalForPathDepBranches(IR::Instr* instr) +{ while (instr) { if (!instr->IsBranchInstr() && !instr->IsLabelInstr() && !IsLegalOpcodeForPathDepBrFold(instr)) { - return; + return false; } if (instr->IsLabelInstr()) { if (instr->AsLabelInstr()->m_isLoopTop) { // don't cross over to loops - return; + return false; } } if (instr->IsBranchInstr()) { - IR::BranchInstr *branch = instr->AsBranchInstr(); + IR::BranchInstr* branch = instr->AsBranchInstr(); if (branch->IsUnconditional()) { if (!branch->GetTarget()) { - return; + return false; } instr = branch->GetTarget(); } else { // Found only legal instructions until a conditional branch, build expensive data structures and check provability - break; + return true; } } else @@ -4730,7 +4673,38 @@ BasicBlock::CheckLegalityAndFoldPathDepBranches(GlobOpt* globOpt) } } - instr = this->GetLastInstr(); + Assert(UNREACHED); + return false; +} + +void +BasicBlock::CheckLegalityAndFoldPathDepBranches(GlobOpt* globOpt) +{ + IR::LabelInstr * lastBranchTarget = nullptr; + IR::Instr *currentInlineeEnd = nullptr, *unskippedInlineeEnd = nullptr; + GlobHashTable * localSymToValueMap = nullptr; + BVSparse * currentPathDefines = nullptr; + + FOREACH_INSTR_IN_BLOCK(instr, this) + { + if (OpCodeAttr::HasDeadFallThrough(instr->m_opcode)) + { + return; + } + if (instr->m_opcode == Js::OpCode::InlineeEnd) + { + unskippedInlineeEnd = currentInlineeEnd = instr; + } + } NEXT_INSTR_IN_BLOCK; + + IR::Instr * instr = this->GetLastInstr(); + + // We have to first check the legality and only then allocate expensive data structures on the tempArena, because most block will have instructions we cant skip + if (!IsLegalForPathDepBranches(instr)) + { + return; + } + // Allocate hefty structures, we will not free them because OptBlock does a Reset on the tempAlloc localSymToValueMap = GlobHashTable::New(globOpt->tempAlloc, 8); currentPathDefines = JitAnew(globOpt->tempAlloc, BVSparse, globOpt->tempAlloc); @@ -4778,7 +4752,7 @@ BasicBlock::CheckLegalityAndFoldPathDepBranches(GlobOpt* globOpt) if (IsCopyTypeInstr(instr)) { - Value *dstValue = UpdateValueForCopyTypeInstr(instr); + Value *dstValue = UpdateValueForCopyTypeInstr(globOpt, localSymToValueMap, instr); if (instr->m_opcode == Js::OpCode::LdFld && !dstValue) { // We cannot skip a LdFld if we didnt find its valueInfo in the localValueTable diff --git a/lib/Backend/FlowGraph.h b/lib/Backend/FlowGraph.h index 0d516222075..1d9ba14bcb5 100644 --- a/lib/Backend/FlowGraph.h +++ b/lib/Backend/FlowGraph.h @@ -201,10 +201,7 @@ class FlowGraph void BuildLoop(BasicBlock *headBlock, BasicBlock *tailBlock, Loop *parentLoop = nullptr); void WalkLoopBlocks(BasicBlock *block, Loop *loop, JitArenaAllocator *tempAlloc); void AddBlockToLoop(BasicBlock *block, Loop *loop); - bool IsEHTransitionInstr(IR::Instr *instr); - BasicBlock * GetPredecessorForRegionPropagation(BasicBlock *block); void UpdateRegionForBlock(BasicBlock *block); - void UpdateRegionForBlockFromEHPred(BasicBlock *block, bool reassign = false); Region * PropagateRegionFromPred(BasicBlock *block, BasicBlock *predBlock, Region *predRegion, IR::Instr * &tryInstr); IR::Instr * PeepCm(IR::Instr *instr); IR::Instr * PeepTypedCm(IR::Instr *instr); @@ -349,14 +346,19 @@ class BasicBlock bool IsLandingPad(); BailOutInfo * CreateLoopTopBailOutInfo(GlobOpt * globOpt); + BVSparse *EnsureTypeIDsWithFinalType(JitArenaAllocator *alloc); + // GlobOpt Stuff public: bool PathDepBranchFolding(GlobOpt* globOptState); void MergePredBlocksValueMaps(GlobOpt* globOptState); private: void CleanUpValueMaps(); + Value* UpdateValueForCopyTypeInstr(GlobOpt* globOpt, GlobHashTable* localSymToValueMap, IR::Instr* instr); + static bool IsLegalForPathDepBranches(IR::Instr* instr); void CheckLegalityAndFoldPathDepBranches(GlobOpt* globOpt); Value * FindValueInLocalThenGlobalValueTableAndUpdate(GlobOpt *globOpt, GlobHashTable * localSymToValueMap, IR::Instr *instr, Sym *dstSym, Sym *srcSym); + Value* GetValueForConditionalBranch(IR::BranchInstr* branch, IR::Opnd* opnd, GlobOpt* globOpt, GlobHashTable* localSymToValueMap); IR::LabelInstr* CanProveConditionalBranch(IR::BranchInstr *branch, GlobOpt* globOpt, GlobHashTable * localSymToValueMap); #if DBG_DUMP @@ -374,6 +376,7 @@ class BasicBlock uint8 isDead:1; uint8 isLoopHeader:1; uint8 hasCall:1; + uint8 hasYield:1; uint8 isVisited:1; uint8 isAirLockCompensationBlock:1; uint8 beginsBailOnNoProfile:1; @@ -386,6 +389,7 @@ class BasicBlock #endif // Deadstore data + BVSparse * liveFixedFields; BVSparse * upwardExposedUses; BVSparse * upwardExposedFields; BVSparse * typesNeedingKnownObjectLayout; @@ -400,6 +404,7 @@ class BasicBlock HashTable * stackSymToFinalType; HashTable * stackSymToGuardedProperties; // Dead store pass only HashTable * stackSymToWriteGuardsMap; // Backward pass only + BVSparse * typeIDsWithFinalType; BVSparse * noImplicitCallUses; BVSparse * noImplicitCallNoMissingValuesUses; BVSparse * noImplicitCallNativeArrayUses; @@ -431,6 +436,8 @@ class BasicBlock isDead(false), isLoopHeader(false), hasCall(false), + hasYield(false), + liveFixedFields(nullptr), upwardExposedUses(nullptr), upwardExposedFields(nullptr), typesNeedingKnownObjectLayout(nullptr), @@ -443,6 +450,7 @@ class BasicBlock stackSymToFinalType(nullptr), stackSymToGuardedProperties(nullptr), stackSymToWriteGuardsMap(nullptr), + typeIDsWithFinalType(nullptr), noImplicitCallUses(nullptr), noImplicitCallNoMissingValuesUses(nullptr), noImplicitCallNativeArrayUses(nullptr), @@ -615,6 +623,7 @@ class Loop bool hasDeadStoreCollectionPass : 1; bool hasDeadStorePrepass : 1; bool hasCall : 1; + bool hasYield : 1; bool hasHoistedFields : 1; bool needImplicitCallBailoutChecksForJsArrayCheckHoist : 1; bool allFieldsKilled : 1; @@ -764,10 +773,12 @@ class Loop bool CanHoistInvariants() const; bool CanDoFieldCopyProp(); void SetHasCall(); + void SetHasYield(); IR::LabelInstr * GetLoopTopInstr() const; void SetLoopTopInstr(IR::LabelInstr * loopTop); Func * GetFunc() const { return GetLoopTopInstr()->m_func; } bool IsSymAssignedToInSelfOrParents(StackSym * const sym) const; + bool IsSymAssignedToInSelfOrParents(SymID id) const; BasicBlock * GetAnyTailBlock() const; #if DBG_DUMP bool GetHasCall() const { return hasCall; } diff --git a/lib/Backend/Func.cpp b/lib/Backend/Func.cpp index 898d054fa7f..8e25640b935 100644 --- a/lib/Backend/Func.cpp +++ b/lib/Backend/Func.cpp @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #include "Backend.h" @@ -51,20 +52,23 @@ Func::Func(JitArenaAllocator *alloc, JITTimeWorkItem * workItem, m_cloner(nullptr), m_cloneMap(nullptr), m_loopParamSym(nullptr), - m_funcObjSym(nullptr), m_localClosureSym(nullptr), m_paramClosureSym(nullptr), m_localFrameDisplaySym(nullptr), m_bailoutReturnValueSym(nullptr), m_hasBailedOutSym(nullptr), m_inlineeFrameStartSym(nullptr), + inlineeStart(nullptr), m_regsUsed(0), m_fg(nullptr), m_labelCount(0), m_argSlotsForFunctionsCalled(0), m_hasCalls(false), m_hasInlineArgsOpt(false), + m_hasInlineOverheadRemoved(false), m_canDoInlineArgsOpt(true), + unoptimizableArgumentsObjReference(0), + unoptimizableArgumentsObjReferenceInInlinees(0), m_doFastPaths(false), hasBailout(false), firstIRTemp(0), @@ -92,6 +96,7 @@ Func::Func(JitArenaAllocator *alloc, JITTimeWorkItem * workItem, hasInlinee(false), thisOrParentInlinerHasArguments(false), hasStackArgs(false), + hasArgLenAndConstOpt(false), hasImplicitParamLoad(false), hasThrow(false), hasNonSimpleParams(false), @@ -106,6 +111,7 @@ Func::Func(JitArenaAllocator *alloc, JITTimeWorkItem * workItem, loopCount(0), callSiteIdInParentFunc(callSiteIdInParentFunc), isGetterSetter(isGetterSetter), + cachedInlineeFrameInfo(nullptr), frameInfo(nullptr), isTJLoopBody(false), m_nativeCodeDataSym(nullptr), @@ -134,23 +140,25 @@ Func::Func(JitArenaAllocator *alloc, JITTimeWorkItem * workItem, , vtableMap(nullptr) #endif , m_yieldOffsetResumeLabelList(nullptr) - , m_bailOutNoSaveLabel(nullptr) + , m_bailOutForElidedYieldInsertionPoint(nullptr) , constantAddressRegOpnd(alloc) , lastConstantAddressRegLoadInstr(nullptr) , m_totalJumpTableSizeInBytesForSwitchStatements(0) - , slotArrayCheckTable(nullptr) , frameDisplayCheckTable(nullptr) , stackArgWithFormalsTracker(nullptr) , m_forInLoopBaseDepth(0) , m_forInEnumeratorArrayOffset(-1) , argInsCount(0) , m_globalObjTypeSpecFldInfoArray(nullptr) + , m_generatorFrameSym(nullptr) #if LOWER_SPLIT_INT64 , m_int64SymPairMap(nullptr) #endif #ifdef RECYCLER_WRITE_BARRIER_JIT , m_lowerer(nullptr) #endif + , m_lazyBailOutRecordSlot(nullptr) + , hasLazyBailOut(false) { Assert(this->IsInlined() == !!runtimeInfo); @@ -301,8 +309,10 @@ Func::Codegen(JitArenaAllocator *alloc, JITTimeWorkItem * workItem, Js::ScriptContextProfiler *const codeGenProfiler, const bool isBackgroundJIT) { bool rejit; + int rejitCounter = 0; do { + Assert(rejitCounter < 25); Func func(alloc, workItem, threadContextInfo, scriptContextInfo, outputData, epInfo, runtimeInfo, polymorphicInlineCacheInfo, codeGenAllocators, @@ -334,6 +344,8 @@ Func::Codegen(JitArenaAllocator *alloc, JITTimeWorkItem * workItem, case RejitReason::DisableStackArgOpt: outputData->disableStackArgOpt = TRUE; break; + case RejitReason::DisableStackArgLenAndConstOpt: + break; case RejitReason::DisableSwitchOptExpectingInteger: case RejitReason::DisableSwitchOptExpectingString: outputData->disableSwitchOpt = TRUE; @@ -366,6 +378,7 @@ Func::Codegen(JitArenaAllocator *alloc, JITTimeWorkItem * workItem, } rejit = true; + rejitCounter++; } // Either the entry point has a reference to the number now, or we failed to code gen and we // don't need to numbers, we can flush the completed page now. @@ -858,13 +871,6 @@ Func::AjustLocalVarSlotOffset() } #endif -bool -Func::DoGlobOptsForGeneratorFunc() const -{ - // Disable GlobOpt optimizations for generators initially. Will visit and enable each one by one. - return !GetJITFunctionBody()->IsCoroutine(); -} - bool Func::DoSimpleJitDynamicProfile() const { @@ -1025,29 +1031,6 @@ Func::GetLocalsPointer() const #endif -void Func::AddSlotArrayCheck(IR::SymOpnd *fieldOpnd) -{ - if (PHASE_OFF(Js::ClosureRangeCheckPhase, this)) - { - return; - } - - Assert(IsTopFunc()); - if (this->slotArrayCheckTable == nullptr) - { - this->slotArrayCheckTable = SlotArrayCheckTable::New(m_alloc, 4); - } - - PropertySym *propertySym = fieldOpnd->m_sym->AsPropertySym(); - uint32 slot = propertySym->m_propertyId; - uint32 *pSlotId = this->slotArrayCheckTable->FindOrInsert(slot, propertySym->m_stackSym->m_id); - - if (pSlotId && (*pSlotId == (uint32)-1 || *pSlotId < slot)) - { - *pSlotId = propertySym->m_propertyId; - } -} - void Func::AddFrameDisplayCheck(IR::SymOpnd *fieldOpnd, uint32 slotId) { if (PHASE_OFF(Js::ClosureRangeCheckPhase, this)) @@ -1348,6 +1331,10 @@ Func::EndPhase(Js::Phase tag, bool dump) { Assert(!this->isPostLower); this->isPostLower = true; +#if !defined(_M_ARM) && !defined(_M_ARM64) // Need to verify ARM is clean. + DbCheckPostLower dbCheck(this); + dbCheck.CheckNestedHelperCalls(); +#endif } else if (tag == Js::RegAllocPhase) { @@ -1381,6 +1368,30 @@ Func::EndPhase(Js::Phase tag, bool dump) #endif } +StackSym * +Func::EnsureBailoutReturnValueSym() +{ + if (m_bailoutReturnValueSym == nullptr) + { + m_bailoutReturnValueSym = StackSym::New(TyVar, this); + StackAllocate(m_bailoutReturnValueSym, sizeof(Js::Var)); + } + + return m_bailoutReturnValueSym; +} + +StackSym * +Func::EnsureHasBailedOutSym() +{ + if (m_hasBailedOutSym == nullptr) + { + m_hasBailedOutSym = StackSym::New(TyUint32, this); + StackAllocate(m_hasBailedOutSym, MachRegInt); + } + + return m_hasBailedOutSym; +} + StackSym * Func::EnsureLoopParamSym() { @@ -2077,6 +2088,60 @@ Func::GetForInEnumeratorArrayOffset() const + this->m_forInLoopBaseDepth * sizeof(Js::ForInObjectEnumerator); } +void +Func::SetHasLazyBailOut() +{ + this->hasLazyBailOut = true; +} + +bool +Func::HasLazyBailOut() const +{ + AssertMsg( + this->isPostRegAlloc, + "We don't know whether a function has lazy bailout until after RegAlloc" + ); + return this->hasLazyBailOut; +} + +void +Func::EnsureLazyBailOutRecordSlot() +{ + if (this->m_lazyBailOutRecordSlot == nullptr) + { + this->m_lazyBailOutRecordSlot = StackSym::New(TyMachPtr, this); + this->StackAllocate(this->m_lazyBailOutRecordSlot, MachPtr); + } +} + +StackSym * +Func::GetLazyBailOutRecordSlot() const +{ + Assert(this->m_lazyBailOutRecordSlot != nullptr); + return this->m_lazyBailOutRecordSlot; +} + +bool +Func::ShouldDoLazyBailOut() const +{ +#if defined(_M_X64) + if (!PHASE_ON1(Js::LazyBailoutPhase) || + this->GetJITFunctionBody()->IsAsmJsMode() || // don't have bailouts in asm.js + this->HasTry() || // lazy bailout in function with try/catch not supported for now + // `EHBailoutPatchUp` set a `hasBailedOut` bit to rethrow the exception in the interpreter + // if the instruction has ANY bailout. In the future, to implement lazy bailout with try/catch, + // we would need to change how this bit is generated. + this->IsLoopBody()) // don't do lazy bailout on jit'd loop body either + { + return false; + } + + return true; +#else + return false; +#endif +} + #if DBG_DUMP ///---------------------------------------------------------------------------- /// diff --git a/lib/Backend/Func.h b/lib/Backend/Func.h index 03eedb5f448..f1ca1dff944 100644 --- a/lib/Backend/Func.h +++ b/lib/Backend/Func.h @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #pragma once @@ -119,11 +120,11 @@ class Func Js::RegSlot returnValueRegSlot = Js::Constants::NoRegister, const bool isInlinedConstructor = false, Js::ProfileId callSiteIdInParentFunc = UINT16_MAX, bool isGetterSetter = false); public: - void * const GetCodeGenAllocators() + void * GetCodeGenAllocators() { return this->GetTopFunc()->m_codeGenAllocators; } - InProcCodeGenAllocators * const GetInProcCodeGenAllocators() + InProcCodeGenAllocators * GetInProcCodeGenAllocators() { Assert(!JITManager::GetJITManager()->IsJITServer()); return reinterpret_cast(this->GetTopFunc()->m_codeGenAllocators); @@ -205,7 +206,8 @@ class Func return !PHASE_OFF(Js::GlobOptPhase, this) && !IsSimpleJit() && (!GetTopFunc()->HasTry() || GetTopFunc()->CanOptimizeTryCatch()) && - (!GetTopFunc()->HasFinally() || GetTopFunc()->CanOptimizeTryFinally()); + (!GetTopFunc()->HasFinally() || GetTopFunc()->CanOptimizeTryFinally()) && + (!GetTopFunc()->GetJITFunctionBody()->IsCoroutine() || !PHASE_OFF(Js::GeneratorGlobOptPhase, this)); } bool DoInline() const @@ -274,7 +276,7 @@ class Func return &m_output; } - const JITTimeFunctionBody * const GetJITFunctionBody() const + const JITTimeFunctionBody * GetJITFunctionBody() const { return m_workItem->GetJITFunctionBody(); } @@ -328,8 +330,6 @@ class Func void AjustLocalVarSlotOffset(); #endif - bool DoGlobOptsForGeneratorFunc() const; - static int32 AdjustOffsetValue(int32 offset); static inline uint32 GetDiagLocalSlotSize() @@ -416,32 +416,9 @@ static const unsigned __int64 c_debugFillPattern8 = 0xcececececececece; return !GetHasCalls() && !GetHasImplicitCalls(); } - StackSym *EnsureLoopParamSym(); - void UpdateForInLoopMaxDepth(uint forInLoopMaxDepth); int GetForInEnumeratorArrayOffset() const; - StackSym *GetFuncObjSym() const { return m_funcObjSym; } - void SetFuncObjSym(StackSym *sym) { m_funcObjSym = sym; } - - StackSym *GetJavascriptLibrarySym() const { return m_javascriptLibrarySym; } - void SetJavascriptLibrarySym(StackSym *sym) { m_javascriptLibrarySym = sym; } - - StackSym *GetScriptContextSym() const { return m_scriptContextSym; } - void SetScriptContextSym(StackSym *sym) { m_scriptContextSym = sym; } - - StackSym *GetFunctionBodySym() const { return m_functionBodySym; } - void SetFunctionBodySym(StackSym *sym) { m_functionBodySym = sym; } - - StackSym *GetLocalClosureSym() const { return m_localClosureSym; } - void SetLocalClosureSym(StackSym *sym) { m_localClosureSym = sym; } - - StackSym *GetParamClosureSym() const { return m_paramClosureSym; } - void SetParamClosureSym(StackSym *sym) { m_paramClosureSym = sym; } - - StackSym *GetLocalFrameDisplaySym() const { return m_localFrameDisplaySym; } - void SetLocalFrameDisplaySym(StackSym *sym) { m_localFrameDisplaySym = sym; } - intptr_t GetJittedLoopIterationsSinceLastBailoutAddress() const; void EnsurePinnedTypeRefs(); void PinTypeRef(void* typeRef); @@ -511,10 +488,15 @@ static const unsigned __int64 c_debugFillPattern8 = 0xcececececececece; return m_inlineeFrameStartSym != nullptr; } - void SetInlineeFrameStartSym(StackSym *sym) + void SetInlineeStart(IR::Instr *inlineeStartInstr) { - Assert(m_inlineeFrameStartSym == nullptr); - m_inlineeFrameStartSym = sym; + Assert(inlineeStart == nullptr); + inlineeStart = inlineeStartInstr; + } + + IR::Instr* GetInlineeStart() + { + return inlineeStart; } IR::SymOpnd *GetInlineeArgCountSlotOpnd() @@ -655,7 +637,6 @@ static const unsigned __int64 c_debugFillPattern8 = 0xcececececececece; PropertyIdSet lazyBailoutProperties; bool anyPropertyMayBeWrittenTo; - SlotArrayCheckTable *slotArrayCheckTable; FrameDisplayCheckTable *frameDisplayCheckTable; IR::Instr * m_headInstr; @@ -669,16 +650,7 @@ static const unsigned __int64 c_debugFillPattern8 = 0xcececececececece; #endif SymTable * m_symTable; - StackSym * m_loopParamSym; - StackSym * m_funcObjSym; - StackSym * m_javascriptLibrarySym; - StackSym * m_scriptContextSym; - StackSym * m_functionBodySym; - StackSym * m_localClosureSym; - StackSym * m_paramClosureSym; - StackSym * m_localFrameDisplaySym; - StackSym * m_bailoutReturnValueSym; - StackSym * m_hasBailedOutSym; + uint m_forInLoopMaxDepth; uint m_forInLoopBaseDepth; int32 m_forInEnumeratorArrayOffset; @@ -712,16 +684,19 @@ static const unsigned __int64 c_debugFillPattern8 = 0xcececececececece; FlowGraph * m_fg; unsigned int m_labelCount; BitVector m_regsUsed; - StackSym * tempSymDouble; - StackSym * tempSymBool; uint32 loopCount; + uint32 unoptimizableArgumentsObjReference; + uint32 unoptimizableArgumentsObjReferenceInInlinees; Js::ProfileId callSiteIdInParentFunc; + InlineeFrameInfo* cachedInlineeFrameInfo; bool m_hasCalls: 1; // This is more accurate compared to m_isLeaf bool m_hasInlineArgsOpt : 1; + bool m_hasInlineOverheadRemoved : 1; bool m_doFastPaths : 1; bool hasBailout: 1; bool hasBailoutInEHRegion : 1; bool hasStackArgs: 1; + bool hasArgLenAndConstOpt : 1; bool hasImplicitParamLoad : 1; // True if there is a load of CallInfo, FunctionObject bool hasThrow : 1; bool hasUnoptimizedArgumentsAccess : 1; // True if there are any arguments access beyond the simple case of this.apply pattern @@ -741,7 +716,6 @@ static const unsigned __int64 c_debugFillPattern8 = 0xcececececececece; bool isPostPeeps:1; bool isPostLayout:1; bool isPostFinalLower:1; - struct InstrByteCodeRegisterUses { Js::OpCode capturingOpCode; @@ -843,6 +817,7 @@ static const unsigned __int64 c_debugFillPattern8 = 0xcececececececece; { curFunc->m_canDoInlineArgsOpt = false; curFunc->m_hasInlineArgsOpt = false; + curFunc->frameInfo = nullptr; curFunc = curFunc->GetParentFunc(); } } @@ -981,7 +956,6 @@ static const unsigned __int64 c_debugFillPattern8 = 0xcececececececece; void MarkConstantAddressSyms(BVSparse * bv); void DisableConstandAddressLoadHoist() { canHoistConstantAddressLoad = false; } - void AddSlotArrayCheck(IR::SymOpnd *fieldOpnd); void AddFrameDisplayCheck(IR::SymOpnd *fieldOpnd, uint32 slotId = (uint32)-1); void EnsureStackArgWithFormalsTracker(); @@ -993,8 +967,6 @@ static const unsigned __int64 c_debugFillPattern8 = 0xcececececececece; StackSym* GetStackSymForFormal(Js::ArgSlot formalsIndex); bool HasStackSymForFormal(Js::ArgSlot formalsIndex); - void SetScopeObjSym(StackSym * sym); - StackSym * GetScopeObjSym(); bool IsTrackCompoundedIntOverflowDisabled() const; bool IsMemOpDisabled() const; bool IsArrayCheckHoistDisabled() const; @@ -1026,12 +998,9 @@ static const unsigned __int64 c_debugFillPattern8 = 0xcececececececece; uint32 m_inlineeId; - IR::LabelInstr * m_bailOutNoSaveLabel; + IR::Instr * m_bailOutForElidedYieldInsertionPoint; - StackSym * GetNativeCodeDataSym() const; - void SetNativeCodeDataSym(StackSym * sym); private: - Js::EntryPointInfo* m_entryPointInfo; // for in-proc JIT only JITOutput m_output; @@ -1040,7 +1009,7 @@ static const unsigned __int64 c_debugFillPattern8 = 0xcececececececece; #endif Func * const topFunc; Func * const parentFunc; - StackSym * m_inlineeFrameStartSym; + IR::Instr * inlineeStart; uint maxInlineeArgOutSize; const bool m_isBackgroundJIT; bool hasInstrNumber; @@ -1066,11 +1035,9 @@ static const unsigned __int64 c_debugFillPattern8 = 0xcececececececece; YieldOffsetResumeLabelList * m_yieldOffsetResumeLabelList; StackArgWithFormalsTracker * stackArgWithFormalsTracker; ObjTypeSpecFldInfo ** m_globalObjTypeSpecFldInfoArray; - StackSym *CreateInlineeStackSym(); IR::SymOpnd *GetInlineeOpndAtOffset(int32 offset); bool HasLocalVarSlotCreated() const { return m_localVarSlotsOffset != Js::Constants::InvalidOffset; } void EnsureLocalVarSlots(); - StackSym * m_nativeCodeDataSym; SList constantAddressRegOpnd; IR::Instr * lastConstantAddressRegLoadInstr; bool canHoistConstantAddressLoad; @@ -1087,6 +1054,79 @@ static const unsigned __int64 c_debugFillPattern8 = 0xcececececececece; public: Lowerer* m_lowerer; #endif + +private: + StackSym* m_localClosureSym; + StackSym* m_paramClosureSym; + StackSym* m_localFrameDisplaySym; + StackSym* m_nativeCodeDataSym; + StackSym* m_inlineeFrameStartSym; + StackSym* m_loopParamSym; + StackSym* m_bailoutReturnValueSym; + StackSym* m_hasBailedOutSym; + StackSym* m_generatorFrameSym; + +public: + StackSym* tempSymDouble; + StackSym* tempSymBool; + + void SetGeneratorFrameSym(StackSym* sym) + { + Assert(this->m_generatorFrameSym == nullptr); + this->m_generatorFrameSym = sym; + } + + StackSym* GetGeneratorFrameSym() const + { + return this->m_generatorFrameSym; + } + + // StackSyms' corresponding getters/setters + void SetInlineeFrameStartSym(StackSym* sym) + { + Assert(m_inlineeFrameStartSym == nullptr); + m_inlineeFrameStartSym = sym; + } + + StackSym* EnsureHasBailedOutSym(); + StackSym* GetHasBailedOutSym() const { return m_hasBailedOutSym; } + + StackSym* EnsureBailoutReturnValueSym(); + StackSym* GetBailoutReturnValueSym() const { return m_bailoutReturnValueSym; } + + StackSym* EnsureLoopParamSym(); + StackSym* GetLoopParamSym() const { return m_loopParamSym; } + + StackSym* GetLocalClosureSym() const { return m_localClosureSym; } + void SetLocalClosureSym(StackSym* sym) { m_localClosureSym = sym; } + + StackSym* GetParamClosureSym() const { return m_paramClosureSym; } + void SetParamClosureSym(StackSym* sym) { m_paramClosureSym = sym; } + + StackSym* GetLocalFrameDisplaySym() const { return m_localFrameDisplaySym; } + void SetLocalFrameDisplaySym(StackSym* sym) { m_localFrameDisplaySym = sym; } + + void SetScopeObjSym(StackSym* sym); + StackSym* GetScopeObjSym(); + + StackSym* GetNativeCodeDataSym() const; + void SetNativeCodeDataSym(StackSym* sym); + + StackSym* CreateInlineeStackSym(); + + // Lazy bailout + // The stack sym is used to store the pointer to + // the BailOutRecord associated with the lazy bailout point +private: + bool hasLazyBailOut : 1; + StackSym * m_lazyBailOutRecordSlot; + +public: + void EnsureLazyBailOutRecordSlot(); + StackSym *GetLazyBailOutRecordSlot() const; + void SetHasLazyBailOut(); + bool HasLazyBailOut() const; + bool ShouldDoLazyBailOut() const; }; class AutoCodeGenPhase diff --git a/lib/Backend/FunctionCodeGenJitTimeData.cpp b/lib/Backend/FunctionCodeGenJitTimeData.cpp index 65760b69131..d1bc6b31bb8 100644 --- a/lib/Backend/FunctionCodeGenJitTimeData.cpp +++ b/lib/Backend/FunctionCodeGenJitTimeData.cpp @@ -16,6 +16,8 @@ namespace Js #endif next(nullptr), ldFldInlinees(nullptr), + callbackInlinees(nullptr), + callApplyTargetInlinees(nullptr), globalThisObject(globalThis), profiledIterations(profiledIterations), sharedPropertyGuards(nullptr), @@ -110,6 +112,14 @@ namespace Js return callbackInlinees ? callbackInlinees[profiledCallSiteId] : nullptr; } + const FunctionCodeGenJitTimeData * FunctionCodeGenJitTimeData::GetCallApplyTargetInlinee(const ProfileId callApplyCallSiteId) const + { + Assert(GetFunctionBody()); + Assert(callApplyCallSiteId < GetFunctionBody()->GetProfiledCallApplyCallSiteCount()); + + return callApplyTargetInlinees ? callApplyTargetInlinees[callApplyCallSiteId] : nullptr; + } + FunctionCodeGenJitTimeData *FunctionCodeGenJitTimeData::AddInlinee( Recycler *const recycler, const ProfileId profiledCallSiteId, @@ -197,6 +207,32 @@ namespace Js return inlineeData; } + FunctionCodeGenJitTimeData * FunctionCodeGenJitTimeData::AddCallApplyTargetInlinee( + Recycler *const recycler, + const ProfileId profiledCallSiteId, + const ProfileId callApplyCallSiteId, + FunctionInfo *const inlinee) + { + Assert(recycler != nullptr); + FunctionBody * functionBody = GetFunctionBody(); + Assert(functionBody != nullptr); + Assert(profiledCallSiteId < functionBody->GetProfiledCallSiteCount()); + Assert(callApplyCallSiteId < functionBody->GetProfiledCallApplyCallSiteCount()); + Assert(inlinee != nullptr); + + if (!callApplyTargetInlinees) + { + callApplyTargetInlinees = RecyclerNewArrayZ(recycler, Field(FunctionCodeGenJitTimeData *), functionBody->GetProfiledCallApplyCallSiteCount()); + } + + // Polymorphic call/apply targets are not inlined. + Assert(callApplyTargetInlinees[callApplyCallSiteId] == nullptr); + + FunctionCodeGenJitTimeData * inlineeData = FunctionCodeGenJitTimeData::New(recycler, inlinee, nullptr /* entryPoint */, true /*isInlined*/); + callApplyTargetInlinees[callApplyCallSiteId] = inlineeData; + return inlineeData; + } + uint FunctionCodeGenJitTimeData::InlineeCount() const { return inlineeCount; diff --git a/lib/Backend/FunctionCodeGenJitTimeData.h b/lib/Backend/FunctionCodeGenJitTimeData.h index f5d7a4b4f47..bf4ffb78d47 100644 --- a/lib/Backend/FunctionCodeGenJitTimeData.h +++ b/lib/Backend/FunctionCodeGenJitTimeData.h @@ -32,6 +32,8 @@ namespace Js Field(Field(FunctionCodeGenJitTimeData*)*) inlinees; Field(Field(FunctionCodeGenJitTimeData*)*) ldFldInlinees; Field(Field(FunctionCodeGenJitTimeData*)*) callbackInlinees; + Field(Field(FunctionCodeGenJitTimeData*)*) callApplyTargetInlinees; + Field(RecyclerWeakReference*) weakFuncRef; Field(PolymorphicInlineCacheInfoIDL*) inlineeInfo; @@ -92,6 +94,7 @@ namespace Js const FunctionCodeGenJitTimeData *GetInlinee(const ProfileId profiledCallSiteId) const; const FunctionCodeGenJitTimeData *GetLdFldInlinee(const InlineCacheIndex inlineCacheIndex) const; const FunctionCodeGenJitTimeData * GetCallbackInlinee(const ProfileId profiledCallSiteId) const; + const FunctionCodeGenJitTimeData * GetCallApplyTargetInlinee(const ProfileId callApplyCallSiteId) const; FunctionCodeGenJitTimeData *AddInlinee( Recycler *const recycler, const ProfileId profiledCallSiteId, @@ -125,6 +128,12 @@ namespace Js const ProfileId profiledCallSiteId, FunctionInfo *const inlinee); + FunctionCodeGenJitTimeData * AddCallApplyTargetInlinee( + Recycler *const recycler, + const ProfileId profiledCallSiteId, + const ProfileId callApplyCallSiteId, + FunctionInfo *const inlinee); + bool IsPolymorphicCallSite(const ProfileId profiledCallSiteId) const; // This function walks all the chained jittimedata and returns the one which match the functionInfo. // This can return null, if the functionInfo doesn't match. diff --git a/lib/Backend/FunctionJITTimeInfo.cpp b/lib/Backend/FunctionJITTimeInfo.cpp index a6c0fb897f6..700000d7222 100644 --- a/lib/Backend/FunctionJITTimeInfo.cpp +++ b/lib/Backend/FunctionJITTimeInfo.cpp @@ -94,7 +94,6 @@ FunctionJITTimeInfo::BuildJITTimeData( } } - jitData->callbackInlineeCount = jitData->bodyData->profiledCallSiteCount; jitData->callbackInlinees = AnewArrayZ(alloc, FunctionJITTimeDataIDL*, jitData->bodyData->profiledCallSiteCount); for (Js::ProfileId i = 0; i < jitData->bodyData->profiledCallSiteCount; ++i) @@ -111,6 +110,26 @@ FunctionJITTimeInfo::BuildJITTimeData( BuildJITTimeData(alloc, inlineeJITData, inlineeRuntimeData, jitData->callbackInlinees[i], true, isForegroundJIT); } } + + jitData->callApplyTargetInlineeCount = jitData->bodyData->profiledCallApplyCallSiteCount; + if (jitData->bodyData->profiledCallApplyCallSiteCount > 0) + { + jitData->callApplyTargetInlinees = AnewArrayZ(alloc, FunctionJITTimeDataIDL*, jitData->bodyData->profiledCallApplyCallSiteCount); + } + for (Js::ProfileId i = 0; i < jitData->bodyData->profiledCallApplyCallSiteCount; ++i) + { + const Js::FunctionCodeGenJitTimeData * inlineeJITData = codeGenData->GetCallApplyTargetInlinee(i); + if (inlineeJITData != nullptr) + { + const Js::FunctionCodeGenRuntimeData * inlineeRuntimeData = nullptr; + if (inlineeJITData->GetFunctionInfo()->HasBody()) + { + inlineeRuntimeData = isInlinee ? targetRuntimeData->GetCallApplyTargetInlinee(i) : functionBody->GetCallApplyTargetInlineeCodeGenRuntimeData(i); + } + jitData->callApplyTargetInlinees[i] = AnewStructZ(alloc, FunctionJITTimeDataIDL); + BuildJITTimeData(alloc, inlineeJITData, inlineeRuntimeData, jitData->callApplyTargetInlinees[i], true, isForegroundJIT); + } + } } jitData->profiledRuntimeData = AnewStructZ(alloc, FunctionJITRuntimeIDL); if (isInlinee && targetRuntimeData->ClonedInlineCaches()->HasInlineCaches()) @@ -293,6 +312,12 @@ FunctionJITTimeInfo::GetInlineeForCallbackInlineeRuntimeData(const Js::ProfileId return inlineeData->GetRuntimeInfo(); } +const FunctionJITRuntimeInfo * +FunctionJITTimeInfo::GetCallApplyTargetInlineeRuntimeData(const Js::ProfileId callApplyCallSiteId) const +{ + return GetCallApplyTargetInlinee(callApplyCallSiteId) ? GetCallApplyTargetInlinee(callApplyCallSiteId)->GetRuntimeInfo() : nullptr; +} + const FunctionJITRuntimeInfo * FunctionJITTimeInfo::GetRuntimeInfo() const { @@ -353,11 +378,23 @@ FunctionJITTimeInfo::GetCallbackInlinee(Js::ProfileId profileId) const { return nullptr; } - AssertOrFailFast(profileId < m_data.callbackInlineeCount); + AssertOrFailFast(profileId < m_data.inlineeCount); return reinterpret_cast(m_data.callbackInlinees[profileId]); } +const FunctionJITTimeInfo * +FunctionJITTimeInfo::GetCallApplyTargetInlinee(Js::ProfileId callApplyCallSiteId) const +{ + if (!m_data.callApplyTargetInlinees) + { + return nullptr; + } + AssertOrFailFast(callApplyCallSiteId < m_data.bodyData->profiledCallApplyCallSiteCount); + + return reinterpret_cast(m_data.callApplyTargetInlinees[callApplyCallSiteId]); +} + const FunctionJITTimeInfo * FunctionJITTimeInfo::GetLdFldInlinee(Js::InlineCacheIndex inlineCacheIndex) const { diff --git a/lib/Backend/FunctionJITTimeInfo.h b/lib/Backend/FunctionJITTimeInfo.h index e204c1395a9..2f8c2952891 100644 --- a/lib/Backend/FunctionJITTimeInfo.h +++ b/lib/Backend/FunctionJITTimeInfo.h @@ -21,6 +21,8 @@ class FunctionJITTimeInfo bool IsLdFldInlineePresent() const; const FunctionJITTimeInfo * GetCallbackInlinee(Js::ProfileId profileId) const; + const FunctionJITTimeInfo * GetCallApplyTargetInlinee(Js::ProfileId profileId) const; + const Js::ProfileId GetCallApplyCallSiteIdForCallSiteId(Js::ProfileId profiledCallSiteId) const; const FunctionJITTimeInfo * GetLdFldInlinee(Js::InlineCacheIndex inlineCacheIndex) const; const FunctionJITTimeInfo * GetInlinee(Js::ProfileId profileId) const; const FunctionJITTimeInfo * GetNext() const; @@ -46,6 +48,7 @@ class FunctionJITTimeInfo const FunctionJITRuntimeInfo *GetLdFldInlineeRuntimeData(const Js::InlineCacheIndex inlineCacheIndex) const; const FunctionJITRuntimeInfo * GetCallbackInlineeRuntimeData(const Js::ProfileId profiledCallSiteId) const; const FunctionJITRuntimeInfo * GetInlineeForCallbackInlineeRuntimeData(const Js::ProfileId profiledCallSiteId, intptr_t inlineeFuncBodyAddr) const; + const FunctionJITRuntimeInfo * GetCallApplyTargetInlineeRuntimeData(const Js::ProfileId callApplyCallSiteId) const; bool ForceJITLoopBody() const; bool HasSharedPropertyGuards() const; bool HasSharedPropertyGuard(Js::PropertyId id) const; diff --git a/lib/Backend/GlobHashTable.h b/lib/Backend/GlobHashTable.h index 65418bcb931..7c390752970 100644 --- a/lib/Backend/GlobHashTable.h +++ b/lib/Backend/GlobHashTable.h @@ -31,18 +31,30 @@ class Key static uint Get(ExprHash hash) { return static_cast(hash); } }; -#define FOREACH_GLOBHASHTABLE_ENTRY(bucket, hashTable) \ +#define FOREACH_VALUEHASHTABLE_ENTRY(BucketType, bucket, hashTable) \ for (uint _iterHash = 0; _iterHash < (hashTable)->tableSize; _iterHash++) \ { \ - FOREACH_SLISTBASE_ENTRY(GlobHashBucket, bucket, &(hashTable)->table[_iterHash]) \ + FOREACH_SLISTBASE_ENTRY(BucketType, bucket, &(hashTable)->table[_iterHash]) \ { -#define NEXT_GLOBHASHTABLE_ENTRY \ +#define NEXT_VALUEHASHTABLE_ENTRY \ } \ NEXT_SLISTBASE_ENTRY; \ } +#define FOREACH_VALUEHASHTABLE_ENTRY_EDITING(BucketType, bucket, hashTable, iter) \ + for (uint _iterHash = 0; _iterHash < (hashTable)->tableSize; _iterHash++) \ + { \ + FOREACH_SLISTBASE_ENTRY_EDITING(BucketType, bucket, &(hashTable)->table[_iterHash], iter) \ + { + + +#define NEXT_VALUEHASHTABLE_ENTRY_EDITING \ + } \ + NEXT_SLISTBASE_ENTRY_EDITING; \ + } + template class ValueHashTable { @@ -390,7 +402,7 @@ class ValueHashTable #if DBG_DUMP void Dump() { - FOREACH_GLOBHASHTABLE_ENTRY(bucket, this) + FOREACH_VALUEHASHTABLE_ENTRY(HashBucket, bucket, this) { Output::Print(_u("%4d => "), bucket.value); @@ -398,20 +410,20 @@ class ValueHashTable Output::Print(_u("\n")); Output::Print(_u("\n")); } - NEXT_GLOBHASHTABLE_ENTRY; + NEXT_VALUEHASHTABLE_ENTRY; } void Dump(void (*valueDump)(TData)) { Output::Print(_u("\n-------------------------------------------------------------------------------------------------\n")); - FOREACH_GLOBHASHTABLE_ENTRY(bucket, this) + FOREACH_VALUEHASHTABLE_ENTRY(HashBucket, bucket, this) { valueDump(bucket.value); Output::Print(_u(" => "), bucket.value); bucket.element->Dump(); Output::Print(_u("\n")); } - NEXT_GLOBHASHTABLE_ENTRY; + NEXT_VALUEHASHTABLE_ENTRY; } #endif diff --git a/lib/Backend/GlobOpt.cpp b/lib/Backend/GlobOpt.cpp index 7e6bea97f02..578b009f907 100644 --- a/lib/Backend/GlobOpt.cpp +++ b/lib/Backend/GlobOpt.cpp @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft Corporation and contributors. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #include "Backend.h" @@ -87,6 +88,7 @@ GlobOpt::GlobOpt(Func * func) updateInductionVariableValueNumber(false), isPerformingLoopBackEdgeCompensation(false), currentRegion(nullptr), + auxSlotPtrSyms(nullptr), changedSymsAfterIncBailoutCandidate(nullptr), doTypeSpec( !IsTypeSpecPhaseOff(func)), @@ -164,7 +166,13 @@ void GlobOpt::Optimize() { this->objectTypeSyms = nullptr; - this->func->argInsCount = this->func->GetInParamsCount() - 1; //Don't include "this" pointer in the count. + + this->func->argInsCount = this->func->GetInParamsCount(); + if (!func->GetJITFunctionBody()->IsAsmJsMode()) + { + // Don't include "this" pointer in the count when not in AsmJs mode (AsmJS does not have "this"). + this->func->argInsCount--; + } if (!func->DoGlobOpt()) { @@ -174,7 +182,7 @@ GlobOpt::Optimize() // Still need to run the dead store phase to calculate the live reg on back edge this->BackwardPass(Js::DeadStorePhase); - CannotAllocateArgumentsObjectOnStack(); + CannotAllocateArgumentsObjectOnStack(nullptr); return; } @@ -353,6 +361,8 @@ GlobOpt::ForwardPass() // changedSymsAfterIncBailoutCandidate helps track building incremental bailout in ForwardPass this->changedSymsAfterIncBailoutCandidate = JitAnew(alloc, BVSparse, alloc); + this->auxSlotPtrSyms = JitAnew(alloc, BVSparse, alloc); + #if DBG this->byteCodeUsesBeforeOpt = JitAnew(this->alloc, BVSparse, this->alloc); if (Js::Configuration::Global.flags.Trace.IsEnabled(Js::FieldCopyPropPhase) && this->DoFunctionFieldCopyProp()) @@ -434,6 +444,7 @@ GlobOpt::ForwardPass() // this->alloc will be freed right after return, no need to free it here this->changedSymsAfterIncBailoutCandidate = nullptr; + this->auxSlotPtrSyms = nullptr; END_CODEGEN_PHASE(this->func, Js::ForwardPhase); } @@ -457,7 +468,7 @@ GlobOpt::OptBlock(BasicBlock *block) { loop->fieldPRESymStores->Or(loop->parent->fieldPRESymStores); } - + if (!this->IsLoopPrePass() && DoFieldPRE(loop)) { // Note: !IsLoopPrePass means this was a root loop pre-pass. FieldPre() is called once per loop. @@ -486,7 +497,7 @@ GlobOpt::OptBlock(BasicBlock *block) { this->KillAllFields(CurrentBlockData()->liveFields); } - + this->tempAlloc->Reset(); if(loop && block->isLoopHeader) @@ -828,14 +839,19 @@ GlobOpt::TryTailDup(IR::BranchInstr *tailBranch) } void -GlobOpt::ToVar(BVSparse *bv, BasicBlock *block) +GlobOpt::ToVar(BVSparse *bv, BasicBlock *block, IR::Instr* insertBeforeInstr /* = nullptr */) { FOREACH_BITSET_IN_SPARSEBV(id, bv) { StackSym *stackSym = this->func->m_symTable->FindStackSym(id); IR::RegOpnd *newOpnd = IR::RegOpnd::New(stackSym, TyVar, this->func); - IR::Instr *lastInstr = block->GetLastInstr(); - if (lastInstr->IsBranchInstr() || lastInstr->m_opcode == Js::OpCode::BailTarget) + IR::Instr* lastInstr = block->GetLastInstr(); + + if (insertBeforeInstr != nullptr) + { + this->ToVar(insertBeforeInstr, newOpnd, block, nullptr, false); + } + else if (lastInstr->IsBranchInstr() || lastInstr->m_opcode == Js::OpCode::BailTarget) { // If branch is using this symbol, hoist the operand as the ToVar load will get // inserted right before the branch. @@ -891,7 +907,7 @@ GlobOpt::ToTypeSpec(BVSparse *bv, BasicBlock *block, IRType t // instruction itself should disable arguments object optimization. if(block->globOptData.argObjSyms && block->globOptData.IsArgumentsSymID(id)) { - CannotAllocateArgumentsObjectOnStack(); + CannotAllocateArgumentsObjectOnStack(nullptr); } if (block->globOptData.liveVarSyms->Test(id)) @@ -972,7 +988,7 @@ BOOL GlobOpt::PRE::PreloadPRECandidate(Loop *loop, GlobHashBucket* candidate) // We'll have to add a def instruction for the object sym in the landing pad, and then we can continue // pre-loading the current PRE candidate. // Case in point: - // $L1 + // $L1 // value|symStore // t1 = o.x (v1|t3) // t2 = t1.y (v2|t4) <-- t1 is not live in the loop landing pad @@ -1032,15 +1048,15 @@ BOOL GlobOpt::PRE::PreloadPRECandidate(Loop *loop, GlobHashBucket* candidate) ldInstr->SetDst(IR::RegOpnd::New(symStore->AsStackSym(), TyVar, this->globOpt->func)); loop->fieldPRESymStores->Set(symStore->m_id); landingPad->globOptData.liveVarSyms->Set(symStore->m_id); - + Value * objPtrValue = landingPad->globOptData.FindValue(objPtrSym); objPtrCopyPropSym = objPtrCopyPropSym ? objPtrCopyPropSym : objPtrValue ? landingPad->globOptData.GetCopyPropSym(objPtrSym, objPtrValue) : nullptr; if (objPtrCopyPropSym) { - // If we inserted T4 = T1.y, and T3 is the copy prop sym for T1 in the landing pad, we need T3.y - // to be live on back edges to have the merge produce a value for T3.y. Having a value for T1.y - // produced from the merge is not enough as the T1.y in the loop will get obj-ptr-copy-propped to + // If we inserted T4 = T1.y, and T3 is the copy prop sym for T1 in the landing pad, we need T3.y + // to be live on back edges to have the merge produce a value for T3.y. Having a value for T1.y + // produced from the merge is not enough as the T1.y in the loop will get obj-ptr-copy-propped to // T3.y // T3.y @@ -1521,7 +1537,7 @@ GlobOpt::OptArguments(IR::Instr *instr) if (instr->m_func->GetJITFunctionBody()->GetInParamsCount() != 1 && !instr->m_func->IsStackArgsEnabled()) { - CannotAllocateArgumentsObjectOnStack(); + CannotAllocateArgumentsObjectOnStack(instr->m_func); } else { @@ -1536,7 +1552,18 @@ GlobOpt::OptArguments(IR::Instr *instr) // In the debug mode, we don't want to optimize away the aliases. Since we may have to show them on the inspection. if (((!AreFromSameBytecodeFunc(src1->AsRegOpnd(), dst->AsRegOpnd()) || this->currentBlock->loop) && instr->m_opcode != Js::OpCode::BytecodeArgOutCapture) || this->func->IsJitInDebugMode()) { - CannotAllocateArgumentsObjectOnStack(); + CannotAllocateArgumentsObjectOnStack(instr->m_func); + return; + } + + // Disable stack args if we are aliasing arguments inside try block to a writethrough symbol. + // We don't have precise tracking of these symbols, so bailout couldn't know if it needs to restore arguments object or not after exception + Region* tryRegion = this->currentRegion ? this->currentRegion->GetSelfOrFirstTryAncestor() : nullptr; + if (tryRegion && tryRegion->GetType() == RegionTypeTry && + tryRegion->writeThroughSymbolsSet && + tryRegion->writeThroughSymbolsSet->Test(dst->AsRegOpnd()->m_sym->m_id)) + { + CannotAllocateArgumentsObjectOnStack(instr->m_func); return; } if(!dst->AsRegOpnd()->GetStackSym()->m_nonEscapingArgObjAlias) @@ -1570,7 +1597,7 @@ GlobOpt::OptArguments(IR::Instr *instr) if (indexOpnd && CurrentBlockData()->IsArgumentsSymID(indexOpnd->m_sym->m_id)) { // Pathological test cases such as a[arguments] - CannotAllocateArgumentsObjectOnStack(); + CannotAllocateArgumentsObjectOnStack(instr->m_func); return; } @@ -1597,6 +1624,7 @@ GlobOpt::OptArguments(IR::Instr *instr) if (CurrentBlockData()->IsArgumentsOpnd(src1)) { instr->usesStackArgumentsObject = true; + instr->m_func->unoptimizableArgumentsObjReference++; } if (CurrentBlockData()->IsArgumentsOpnd(src1) && @@ -1616,6 +1644,7 @@ GlobOpt::OptArguments(IR::Instr *instr) if (builtinFunction == Js::BuiltinFunction::JavascriptFunction_Apply) { CurrentBlockData()->ClearArgumentsSym(src1->AsRegOpnd()); + instr->m_func->unoptimizableArgumentsObjReference--; } } else if (builtinOpnd->IsRegOpnd()) @@ -1623,6 +1652,7 @@ GlobOpt::OptArguments(IR::Instr *instr) if (builtinOpnd->AsRegOpnd()->m_sym->m_builtInIndex == Js::BuiltinFunction::JavascriptFunction_Apply) { CurrentBlockData()->ClearArgumentsSym(src1->AsRegOpnd()); + instr->m_func->unoptimizableArgumentsObjReference--; } } } @@ -1659,7 +1689,7 @@ GlobOpt::OptArguments(IR::Instr *instr) WritePerfHint(PerfHints::HeapArgumentsCreated, instr->m_func, instr->GetByteCodeOffset()); } #endif - CannotAllocateArgumentsObjectOnStack(); + CannotAllocateArgumentsObjectOnStack(instr->m_func); return; } } @@ -1677,7 +1707,7 @@ GlobOpt::OptArguments(IR::Instr *instr) WritePerfHint(PerfHints::HeapArgumentsCreated, instr->m_func, instr->GetByteCodeOffset()); } #endif - CannotAllocateArgumentsObjectOnStack(); + CannotAllocateArgumentsObjectOnStack(instr->m_func); return; } } @@ -1696,7 +1726,7 @@ GlobOpt::OptArguments(IR::Instr *instr) WritePerfHint(PerfHints::HeapArgumentsModification, instr->m_func, instr->GetByteCodeOffset()); } #endif - CannotAllocateArgumentsObjectOnStack(); + CannotAllocateArgumentsObjectOnStack(instr->m_func); return; } } @@ -1710,7 +1740,7 @@ GlobOpt::OptArguments(IR::Instr *instr) WritePerfHint(PerfHints::HeapArgumentsModification, instr->m_func, instr->GetByteCodeOffset()); } #endif - CannotAllocateArgumentsObjectOnStack(); + CannotAllocateArgumentsObjectOnStack(instr->m_func); return; } CurrentBlockData()->ClearArgumentsSym(dst->AsRegOpnd()); @@ -2241,10 +2271,20 @@ GlobOpt::CollectMemOpInfo(IR::Instr *instrBegin, IR::Instr *instr, Value *src1Va if (!loop->memOpInfo->inductionVariableChangeInfoMap->ContainsKey(inductionSymID)) { loop->memOpInfo->inductionVariableChangeInfoMap->Add(inductionSymID, inductionVariableChangeInfo); + if (sym->m_id != inductionSymID) + { + // Backwards pass uses this bit-vector to lookup upwardExposedUsed/bytecodeUpwardExposedUsed symbols, which are not necessarily vars. Just add both. + loop->memOpInfo->inductionVariableChangeInfoMap->Add(sym->m_id, inductionVariableChangeInfo); + } } else { loop->memOpInfo->inductionVariableChangeInfoMap->Item(inductionSymID, inductionVariableChangeInfo); + if (sym->m_id != inductionSymID) + { + // Backwards pass uses this bit-vector to lookup upwardExposedUsed/bytecodeUpwardExposedUsed symbols, which are not necessarily vars. Just add both. + loop->memOpInfo->inductionVariableChangeInfoMap->Item(sym->m_id, inductionVariableChangeInfo); + } } } else @@ -2253,12 +2293,17 @@ GlobOpt::CollectMemOpInfo(IR::Instr *instrBegin, IR::Instr *instr, Value *src1Va { Loop::InductionVariableChangeInfo inductionVariableChangeInfo = { 1, isIncr }; loop->memOpInfo->inductionVariableChangeInfoMap->Add(inductionSymID, inductionVariableChangeInfo); + if (sym->m_id != inductionSymID) + { + // Backwards pass uses this bit-vector to lookup upwardExposedUsed/bytecodeUpwardExposedUsed symbols, which are not necessarily vars. Just add both. + loop->memOpInfo->inductionVariableChangeInfoMap->Add(sym->m_id, inductionVariableChangeInfo); + } } else { Loop::InductionVariableChangeInfo inductionVariableChangeInfo = { 0, 0 }; inductionVariableChangeInfo = loop->memOpInfo->inductionVariableChangeInfoMap->Lookup(inductionSymID, inductionVariableChangeInfo); - + // If inductionVariableChangeInfo.unroll has been invalidated, do // not modify the Js::Constants::InvalidLoopUnrollFactor value if (inductionVariableChangeInfo.unroll != Js::Constants::InvalidLoopUnrollFactor) @@ -2267,6 +2312,11 @@ GlobOpt::CollectMemOpInfo(IR::Instr *instrBegin, IR::Instr *instr, Value *src1Va } inductionVariableChangeInfo.isIncremental = isIncr; loop->memOpInfo->inductionVariableChangeInfoMap->Item(inductionSymID, inductionVariableChangeInfo); + if (sym->m_id != inductionSymID) + { + // Backwards pass uses this bit-vector to lookup upwardExposedUsed/bytecodeUpwardExposedUsed symbols, which are not necessarily vars. Just add both. + loop->memOpInfo->inductionVariableChangeInfoMap->Item(sym->m_id, inductionVariableChangeInfo); + } } } break; @@ -2315,7 +2365,10 @@ GlobOpt::CollectMemOpInfo(IR::Instr *instrBegin, IR::Instr *instr, Value *src1Va // Line #2: s3(s1) = Ld_A s4(s2) // do not consider line #2 as a violating instr (instr->m_opcode == Js::OpCode::Ld_I4 && - prevInstr && (prevInstr->m_opcode == Js::OpCode::Add_I4 || prevInstr->m_opcode == Js::OpCode::Sub_I4) && + // note Ld_A is for the case where the add was 0 + prevInstr && (prevInstr->m_opcode == Js::OpCode::Add_I4 || + prevInstr->m_opcode == Js::OpCode::Sub_I4 || + prevInstr->m_opcode == Js::OpCode::Ld_A ) && instr->GetSrc1()->IsRegOpnd() && instr->GetDst()->IsRegOpnd() && prevInstr->GetDst()->IsRegOpnd() && @@ -2436,15 +2489,15 @@ GlobOpt::OptInstr(IR::Instr *&instr, bool* isInstrRemoved) return instrNext; } - if (!instr->IsRealInstr() || instr->IsByteCodeUsesInstr() || instr->m_opcode == Js::OpCode::Conv_Bool) + if (instr->m_opcode == Js::OpCode::Yield) { - return instrNext; + // TODO[generators][ianhall]: Can this and the FillBailOutInfo call below be moved to after Src1 and Src2 so that Yield can be optimized right up to the actual yield? + this->ProcessKills(instr); } - if (instr->m_opcode == Js::OpCode::Yield) + if (!instr->IsRealInstr() || instr->IsByteCodeUsesInstr() || instr->m_opcode == Js::OpCode::Conv_Bool) { - // TODO[generators][ianhall]: Can this and the FillBailOutInfo call below be moved to after Src1 and Src2 so that Yield can be optimized right up to the actual yield? - CurrentBlockData()->KillStateForGeneratorYield(); + return instrNext; } if (!IsLoopPrePass()) @@ -2467,7 +2520,7 @@ GlobOpt::OptInstr(IR::Instr *&instr, bool* isInstrRemoved) //StackArguments Optimization - We bail out if the index is out of range of actuals. if ((instr->m_opcode == Js::OpCode::LdElemI_A || instr->m_opcode == Js::OpCode::TypeofElem) && - instr->DoStackArgsOpt(this->func) && !this->IsLoopPrePass()) + instr->DoStackArgsOpt() && !this->IsLoopPrePass()) { GenerateBailAtOperation(&instr, IR::BailOnStackArgsOutOfActualsRange); } @@ -2509,6 +2562,7 @@ GlobOpt::OptInstr(IR::Instr *&instr, bool* isInstrRemoved) OptimizeChecks(instr); OptArraySrc(&instr, &src1Val, &src2Val); OptNewScObject(&instr, src1Val); + OptStackArgLenAndConst(instr, &src1Val); instr = this->OptPeep(instr, src1Val, src2Val); @@ -2736,6 +2790,11 @@ GlobOpt::OptInstr(IR::Instr *&instr, bool* isInstrRemoved) } } + if (this->IsLazyBailOutCurrentlyNeeded(instr, src1Val, src2Val, isHoisted)) + { + this->GenerateLazyBailOut(instr); + } + if (CurrentBlockData()->capturedValuesCandidate && !this->IsLoopPrePass()) { this->CommitCapturedValuesCandidate(); @@ -2754,7 +2813,7 @@ GlobOpt::OptInstr(IR::Instr *&instr, bool* isInstrRemoved) } bool -GlobOpt::IsNonNumericRegOpnd(IR::RegOpnd *opnd, bool inGlobOpt, bool *isSafeToTransferInPrepass /*=nullptr*/) const +GlobOpt::IsNonNumericRegOpnd(IR::RegOpnd* opnd, bool inGlobOpt, bool* isSafeToTransferInPrepass /*=nullptr*/) const { if (opnd == nullptr) { @@ -3047,13 +3106,11 @@ GlobOpt::OptDst( else if (dstVal) { opnd->SetValueType(dstVal->GetValueInfo()->Type()); - - if(currentBlock->loop && + if (currentBlock->loop && !IsLoopPrePass() && (instr->m_opcode == Js::OpCode::Ld_A || instr->m_opcode == Js::OpCode::Ld_I4) && instr->GetSrc1()->IsRegOpnd() && - !func->IsJitInDebugMode() && - func->DoGlobOptsForGeneratorFunc()) + !func->IsJitInDebugMode()) { // Look for the following patterns: // @@ -3176,7 +3233,7 @@ GlobOpt::SetLoopFieldInitialValue(Loop *loop, IR::Instr *instr, PropertySym *pro Value *landingPadObjPtrVal, *currentObjPtrVal; landingPadObjPtrVal = loop->landingPad->globOptData.FindValue(objectSym); currentObjPtrVal = CurrentBlockData()->FindValue(objectSym); - + auto CanSetInitialValue = [&]() -> bool { if (!currentObjPtrVal) { @@ -3385,7 +3442,7 @@ GlobOpt::OptSrc(IR::Opnd *opnd, IR::Instr * *pInstr, Value **indirIndexValRef, I opnd->AsSymOpnd()->SetPropertyOwnerValueType( objectValue ? objectValue->GetValueInfo()->Type() : ValueType::Uninitialized); - + sym = this->CopyPropPropertySymObj(opnd->AsSymOpnd(), instr); if (!DoFieldCopyProp()) @@ -3407,7 +3464,9 @@ GlobOpt::OptSrc(IR::Opnd *opnd, IR::Instr * *pInstr, Value **indirIndexValRef, I case Js::OpCode::ScopedDeleteFldStrict: case Js::OpCode::LdMethodFromFlags: case Js::OpCode::BrOnNoProperty: + case Js::OpCode::BrOnNoLocalProperty: case Js::OpCode::BrOnHasProperty: + case Js::OpCode::BrOnHasLocalProperty: case Js::OpCode::LdMethodFldPolyInlineMiss: case Js::OpCode::StSlotChkUndecl: case Js::OpCode::ScopedLdInst: @@ -3435,7 +3494,7 @@ GlobOpt::OptSrc(IR::Opnd *opnd, IR::Instr * *pInstr, Value **indirIndexValRef, I } } } - break; + break; } case IR::OpndKindReg: // Clear the opnd's value type up-front, so that this code cannot accidentally use the value type set from a previous @@ -3571,7 +3630,7 @@ GlobOpt::OptSrc(IR::Opnd *opnd, IR::Instr * *pInstr, Value **indirIndexValRef, I if (profiledArrayType.IsLikelyObject()) { // Ideally we want to use the most specialized type seen by this path, but when that causes bailouts use the least specialized type instead. - if (useAggressiveSpecialization && + if (useAggressiveSpecialization && profiledArrayType.GetObjectType() == valueType.GetObjectType() && !valueType.IsLikelyNativeIntArray() && ( @@ -3582,7 +3641,7 @@ GlobOpt::OptSrc(IR::Opnd *opnd, IR::Instr * *pInstr, Value **indirIndexValRef, I valueType = profiledArrayType.SetHasNoMissingValues(valueType.HasNoMissingValues()); ChangeValueType(this->currentBlock, CurrentBlockData()->FindValue(opnd->AsRegOpnd()->m_sym), valueType, false); } - else if (!useAggressiveSpecialization && + else if (!useAggressiveSpecialization && (profiledArrayType.GetObjectType() != valueType.GetObjectType() || ( valueType.IsLikelyNativeArray() && @@ -3671,15 +3730,6 @@ GlobOpt::CopyProp(IR::Opnd *opnd, IR::Instr *instr, Value *val, IR::IndirOpnd *p return opnd; } - if (!this->func->DoGlobOptsForGeneratorFunc()) - { - // Don't copy prop in generator functions because non-bytecode temps that span a yield - // cannot be saved and restored by the current bail-out mechanics utilized by generator - // yield/resume. - // TODO[generators][ianhall]: Enable copy-prop at least for in between yields. - return opnd; - } - if (instr->m_opcode == Js::OpCode::CheckFixedFld || instr->m_opcode == Js::OpCode::CheckPropertyGuardAndLoadType) { // Don't copy prop into CheckFixedFld or CheckPropertyGuardAndLoadType @@ -4718,6 +4768,14 @@ GlobOpt::ValueNumberDst(IR::Instr **pInstr, Value *src1Val, Value *src2Val) case Js::OpCode::Coerce_Str: AssertMsg(instr->GetDst()->GetValueType().IsString(), "Creator of this instruction should have set the type"); + + // Due to fall through and the fact that Ld_A only takes one source, + // free the other source here. + if (instr->GetSrc2() && !(this->IsLoopPrePass() || src1ValueInfo == nullptr || !src1ValueInfo->IsString())) + { + instr->FreeSrc2(); + } + // fall-through case Js::OpCode::Coerce_StrOrRegex: // We don't set the ValueType of src1 for Coerce_StrOrRegex, hence skip the ASSERT @@ -5217,6 +5275,18 @@ GlobOpt::ValueNumberDst(IR::Instr **pInstr, Value *src1Val, Value *src2Val) case Js::OpCode::IsInst: case Js::OpCode::LdTrue: case Js::OpCode::LdFalse: + case Js::OpCode::CmEq_A: + case Js::OpCode::CmSrEq_A: + case Js::OpCode::CmNeq_A: + case Js::OpCode::CmSrNeq_A: + case Js::OpCode::CmLe_A: + case Js::OpCode::CmUnLe_A: + case Js::OpCode::CmLt_A: + case Js::OpCode::CmUnLt_A: + case Js::OpCode::CmGe_A: + case Js::OpCode::CmUnGe_A: + case Js::OpCode::CmGt_A: + case Js::OpCode::CmUnGt_A: return this->NewGenericValue(ValueType::Boolean, dst); case Js::OpCode::LdUndef: @@ -5292,7 +5362,7 @@ GlobOpt::ValueNumberLdElemDst(IR::Instr **pInstr, Value *srcVal) IR::IndirOpnd *src = instr->GetSrc1()->AsIndirOpnd(); const ValueType baseValueType(src->GetBaseOpnd()->GetValueType()); - if (instr->DoStackArgsOpt(this->func) || + if (instr->DoStackArgsOpt() || !( baseValueType.IsLikelyOptimizedTypedArray() || (baseValueType.IsLikelyNativeArray() && instr->IsProfiledInstr()) // Specialized native array lowering for LdElem requires that it is profiled. @@ -5316,7 +5386,7 @@ GlobOpt::ValueNumberLdElemDst(IR::Instr **pInstr, Value *srcVal) this->func->GetDebugNumberSet(debugStringBuffer), Js::OpCodeUtil::GetOpCodeName(instr->m_opcode), baseValueTypeStr, - instr->DoStackArgsOpt(this->func) ? _u("instruction uses the arguments object") : + instr->DoStackArgsOpt() ? _u("instruction uses the arguments object") : baseValueType.IsLikelyOptimizedTypedArray() ? _u("index is negative or likely not int") : _u("of array type")); Output::Flush(); } @@ -5671,7 +5741,7 @@ GlobOpt::SafeToCopyPropInPrepass(StackSym * const originalSym, StackSym * const Assert(this->currentBlock->globOptData.GetCopyPropSym(originalSym, value) == copySym); // In the following example, to copy-prop s2 into s1, it is not enough to check if s1 and s2 are safe to transfer. - // In fact, both s1 and s2 are safe to transfer, but it is not legal to copy prop s2 into s1. + // In fact, both s1 and s2 are safe to transfer, but it is not legal to copy prop s2 into s1. // // s1 = s2 // $Loop: @@ -5682,7 +5752,7 @@ GlobOpt::SafeToCopyPropInPrepass(StackSym * const originalSym, StackSym * const // In general, requirements for copy-propping in prepass are more restricted than those for transferring values. // For copy prop in prepass, if the original sym is live on back-edge, then the copy-prop sym should not be written to // in the loop (or its parents) - + ValueInfo* const valueInfo = value->GetValueInfo(); return IsSafeToTransferInPrepass(originalSym, valueInfo) && IsSafeToTransferInPrepass(copySym, valueInfo) && @@ -5869,7 +5939,7 @@ GlobOpt::ValueNumberTransferDstInPrepass(IR::Instr *const instr, Value *const sr // for aggressive int type spec. bool isSafeToTransferInPrepass = false; isValueInfoPrecise = IsPrepassSrcValueInfoPrecise(instr, src1Val, nullptr, &isSafeToTransferInPrepass); - + const ValueType valueType(GetPrepassValueTypeForDst(src1ValueInfo->Type(), instr, src1Val, nullptr, isValueInfoPrecise, isSafeToTransferInPrepass)); if(isValueInfoPrecise || isSafeToTransferInPrepass) { @@ -6587,6 +6657,12 @@ GlobOpt::GetConstantVar(IR::Opnd *opnd, Value *val) return Js::TaggedInt::ToVarUnchecked(opnd->AsIntConstOpnd()->AsInt32()); } } +#if FLOATVAR + else if (opnd->IsFloatConstOpnd()) + { + return Js::JavascriptNumber::ToVar(opnd->AsFloatConstOpnd()->m_value); + } +#endif else if (opnd->IsRegOpnd() && opnd->AsRegOpnd()->m_sym->IsSingleDef()) { if (valueInfo->IsBoolean()) @@ -6608,19 +6684,110 @@ GlobOpt::GetConstantVar(IR::Opnd *opnd, Value *val) { return (Js::Var)this->func->GetScriptContextInfo()->GetNullAddr(); } +#if FLOATVAR + else if (valueInfo->IsFloat()) + { + IR::Instr * defInstr = opnd->AsRegOpnd()->m_sym->GetInstrDef(); + if ((defInstr->m_opcode == Js::OpCode::LdC_F8_R8 || defInstr->m_opcode == Js::OpCode::LdC_A_R8) && defInstr->GetSrc1()->IsFloatConstOpnd()) + { + return Js::JavascriptNumber::ToVar(defInstr->GetSrc1()->AsFloatConstOpnd()->m_value); + } + } +#endif } return nullptr; } -bool BoolAndIntStaticAndTypeMismatch(Value* src1Val, Value* src2Val, Js::Var src1Var, Js::Var src2Var) +namespace { - ValueInfo *src1ValInfo = src1Val->GetValueInfo(); - ValueInfo *src2ValInfo = src2Val->GetValueInfo(); - return (src1ValInfo->IsNumber() && src1Var && src2ValInfo->IsBoolean() && src1Var != Js::TaggedInt::ToVarUnchecked(0) && src1Var != Js::TaggedInt::ToVarUnchecked(1)) || - (src2ValInfo->IsNumber() && src2Var && src1ValInfo->IsBoolean() && src2Var != Js::TaggedInt::ToVarUnchecked(0) && src2Var != Js::TaggedInt::ToVarUnchecked(1)); -} + bool TryCompIntAndFloat(bool * result, Js::Var left, Js::Var right) + { + if (Js::TaggedInt::Is(left)) + { + // If both are tagged ints we should not get here. + Assert(!Js::TaggedInt::Is(right)); + if (Js::JavascriptNumber::Is_NoTaggedIntCheck(right)) + { + double value = Js::JavascriptNumber::GetValue(right); + *result = (Js::TaggedInt::ToInt32(left) == value); + return true; + } + } + return false; + } + + bool Op_JitEq(bool * result, Value * src1Val, Value * src2Val, Js::Var src1Var, Js::Var src2Var, Func * func, bool isStrict) + { + Assert(src1Val != nullptr && src2Val != nullptr); + Assert(src1Var != nullptr && src2Var != nullptr); + + if (src1Var == src2Var) + { + if (Js::TaggedInt::Is(src1Var)) + { + *result = true; + return true; + } + if (!isStrict && src1Val->GetValueInfo()->IsNotFloat()) + { + // If the vars are equal and they are not NaN, non-strict equal returns true. Not float guarantees not NaN. + *result = true; + return true; + } + +#if FLOATVAR + if (Js::JavascriptNumber::Is_NoTaggedIntCheck(src1Var)) + { + *result = !Js::JavascriptNumber::IsNan(Js::JavascriptNumber::GetValue(src1Var)); + return true; + } +#endif + + if (src1Var == reinterpret_cast(func->GetScriptContextInfo()->GetTrueAddr()) || + src1Var == reinterpret_cast(func->GetScriptContextInfo()->GetFalseAddr()) || + src1Var == reinterpret_cast(func->GetScriptContextInfo()->GetNullAddr()) || + src1Var == reinterpret_cast(func->GetScriptContextInfo()->GetUndefinedAddr())) + { + *result = true; + return true; + } + + // Other var comparisons require the runtime to prove. + return false; + } + +#if FLOATVAR + if (TryCompIntAndFloat(result, src1Var, src2Var) || TryCompIntAndFloat(result, src2Var, src1Var)) + { + return true; + } + +#endif + + return false; + } + + bool Op_JitNeq(bool * result, Value * src1Val, Value * src2Val, Js::Var src1Var, Js::Var src2Var, Func * func, bool isStrict) + { + if (Op_JitEq(result, src1Val, src2Val, src1Var, src2Var, func, isStrict)) + { + *result = !*result; + return true; + } + + return false; + } + + bool BoolAndIntStaticAndTypeMismatch(Value* src1Val, Value* src2Val, Js::Var src1Var, Js::Var src2Var) + { + ValueInfo *src1ValInfo = src1Val->GetValueInfo(); + ValueInfo *src2ValInfo = src2Val->GetValueInfo(); + return (src1ValInfo->IsNumber() && src1Var && src2ValInfo->IsBoolean() && src1Var != Js::TaggedInt::ToVarUnchecked(0) && src1Var != Js::TaggedInt::ToVarUnchecked(1)) || + (src2ValInfo->IsNumber() && src2Var && src1ValInfo->IsBoolean() && src2Var != Js::TaggedInt::ToVarUnchecked(0) && src2Var != Js::TaggedInt::ToVarUnchecked(1)); + } +} bool GlobOpt::CanProveConditionalBranch(IR::Instr *instr, Value *src1Val, Value *src2Val, Js::Var src1Var, Js::Var src2Var, bool *result) @@ -6634,7 +6801,8 @@ GlobOpt::CanProveConditionalBranch(IR::Instr *instr, Value *src1Val, Value *src2 { return undefinedCmp; } - return val1->GetValueInfo()->IsPrimitive() && val1->GetValueInfo()->IsNotFloat(); + ValueInfo * valInfo = val1->GetValueInfo(); + return !valInfo->HasBeenUndefined() && valInfo->IsPrimitive() && valInfo->IsNotFloat(); } return false; }; @@ -6748,12 +6916,10 @@ GlobOpt::CanProveConditionalBranch(IR::Instr *instr, Value *src1Val, Value *src2 } else { - if (func->IsOOPJIT() || !CONFIG_FLAG(OOPJITMissingOpts)) + if (!Op_JitEq(result, src1Val, src2Val, src1Var, src2Var, this->func, false /* isStrict */)) { - // TODO: OOP JIT, const folding return false; } - *result = Js::JavascriptOperators::Equal(src1Var, src2Var, this->func->GetScriptContext()); } break; case Js::OpCode::BrNeq_A: @@ -6780,12 +6946,10 @@ GlobOpt::CanProveConditionalBranch(IR::Instr *instr, Value *src1Val, Value *src2 } else { - if (func->IsOOPJIT() || !CONFIG_FLAG(OOPJITMissingOpts)) + if (!Op_JitNeq(result, src1Val, src2Val, src1Var, src2Var, this->func, false /* isStrict */)) { - // TODO: OOP JIT, const folding return false; } - *result = Js::JavascriptOperators::NotEqual(src1Var, src2Var, this->func->GetScriptContext()); } break; case Js::OpCode::BrSrEq_A: @@ -6821,12 +6985,10 @@ GlobOpt::CanProveConditionalBranch(IR::Instr *instr, Value *src1Val, Value *src2 } else { - if (func->IsOOPJIT() || !CONFIG_FLAG(OOPJITMissingOpts)) + if (!Op_JitEq(result, src1Val, src2Val, src1Var, src2Var, this->func, true /* isStrict */)) { - // TODO: OOP JIT, const folding return false; } - *result = Js::JavascriptOperators::StrictEqual(src1Var, src2Var, this->func->GetScriptContext()); } break; @@ -6863,12 +7025,10 @@ GlobOpt::CanProveConditionalBranch(IR::Instr *instr, Value *src1Val, Value *src2 } else { - if (func->IsOOPJIT() || !CONFIG_FLAG(OOPJITMissingOpts)) + if (!Op_JitNeq(result, src1Val, src2Val, src1Var, src2Var, this->func, true /* isStrict */)) { - // TODO: OOP JIT, const folding return false; } - *result = Js::JavascriptOperators::NotStrictEqual(src1Var, src2Var, this->func->GetScriptContext()); } break; @@ -6888,16 +7048,36 @@ GlobOpt::CanProveConditionalBranch(IR::Instr *instr, Value *src1Val, Value *src2 break; } - if (func->IsOOPJIT() || !CONFIG_FLAG(OOPJITMissingOpts)) + if (!src1Var) { - // TODO: OOP JIT, const folding return false; } - if (!src1Var) + + // Set *result = (evaluates true) and negate it later for BrFalse + if (src1Var == reinterpret_cast(this->func->GetScriptContextInfo()->GetTrueAddr())) + { + *result = true; + } + else if (src1Var == reinterpret_cast(this->func->GetScriptContextInfo()->GetFalseAddr())) + { + *result = false; + } + else if (Js::TaggedInt::Is(src1Var)) + { + *result = (src1Var != reinterpret_cast(Js::AtomTag_IntPtr)); + } +#if FLOATVAR + else if (Js::JavascriptNumber::Is_NoTaggedIntCheck(src1Var)) + { + double value = Js::JavascriptNumber::GetValue(src1Var); + *result = (!Js::JavascriptNumber::IsNan(value)) && (!Js::JavascriptNumber::IsZero(value)); + } +#endif + else { return false; } - *result = Js::JavascriptConversion::ToBoolean(src1Var, this->func->GetScriptContext()); + if (instr->m_opcode == Js::OpCode::BrFalse_A) { *result = !(*result); @@ -6922,7 +7102,20 @@ GlobOpt::CanProveConditionalBranch(IR::Instr *instr, Value *src1Val, Value *src2 { return false; } - *result = !src1ValueInfo->IsPrimitive(); + + if (src1ValueInfo->IsPrimitive()) + { + *result = false; + } + else + { + if (src1ValueInfo->HasBeenPrimitive()) + { + return false; + } + *result = true; + } + break; } default: @@ -9346,7 +9539,7 @@ GlobOpt::TypeSpecializeBinary(IR::Instr **pInstr, Value **pSrc1Val, Value **pSrc bool isConservativeMulInt = !DoAggressiveMulIntTypeSpec() || !DoAggressiveIntTypeSpec(); // Be conservative about predicting Mul overflow in prepass. - // Operands that are live on back edge may be denied lossless-conversion to int32 and + // Operands that are live on back edge may be denied lossless-conversion to int32 and // trigger rejit with AggressiveIntTypeSpec off. // Besides multiplying a variable in a loop can overflow in just a few iterations even in simple cases like v *= 2 // So, make sure we definitely know the source max/min values, otherwise assume the full range. @@ -10582,6 +10775,7 @@ GlobOpt::TypeSpecializeFloatBinary(IR::Instr *instr, Value *src1Val, Value *src2 bool skipSrc1 = false; bool skipSrc2 = false; bool skipDst = false; + bool convertDstToBool = false; if (!this->DoFloatTypeSpec()) { @@ -10653,6 +10847,36 @@ GlobOpt::TypeSpecializeFloatBinary(IR::Instr *instr, Value *src1Val, Value *src2 skipDst = true; break; + case Js::OpCode::CmEq_A: + case Js::OpCode::CmSrEq_A: + case Js::OpCode::CmNeq_A: + case Js::OpCode::CmSrNeq_A: + { + if (src1Val->GetValueInfo()->IsNotNumber() || src2Val->GetValueInfo()->IsNotNumber()) + { + return false; + } + + allowUndefinedOrNullSrc1 = false; + allowUndefinedOrNullSrc2 = false; + convertDstToBool = true; + break; + } + + case Js::OpCode::CmLe_A: + case Js::OpCode::CmLt_A: + case Js::OpCode::CmGe_A: + case Js::OpCode::CmGt_A: + { + if (src1Val->GetValueInfo()->IsNotNumber() || src2Val->GetValueInfo()->IsNotNumber()) + { + return false; + } + + convertDstToBool = true; + break; + } + default: return false; } @@ -10698,13 +10922,19 @@ GlobOpt::TypeSpecializeFloatBinary(IR::Instr *instr, Value *src1Val, Value *src2 if (!skipDst) { dst = instr->GetDst(); - if (dst) { - *pDstVal = CreateDstUntransferredValue(ValueType::Float, instr, src1Val, src2Val); - - AssertMsg(dst->IsRegOpnd(), "What else?"); - this->ToFloat64Dst(instr, dst->AsRegOpnd(), this->currentBlock); + if (convertDstToBool) + { + *pDstVal = CreateDstUntransferredValue(ValueType::Boolean, instr, src1Val, src2Val); + ToVarRegOpnd(dst->AsRegOpnd(), currentBlock); + } + else + { + *pDstVal = CreateDstUntransferredValue(ValueType::Float, instr, src1Val, src2Val); + AssertMsg(dst->IsRegOpnd(), "What else?"); + this->ToFloat64Dst(instr, dst->AsRegOpnd(), this->currentBlock); + } } } @@ -10728,7 +10958,7 @@ GlobOpt::TypeSpecializeStElem(IR::Instr ** pInstr, Value *src1Val, Value **pDstV IR::RegOpnd *baseOpnd = instr->GetDst()->AsIndirOpnd()->GetBaseOpnd(); ValueType baseValueType(baseOpnd->GetValueType()); - if (instr->DoStackArgsOpt(this->func) || + if (instr->DoStackArgsOpt() || (!this->DoTypedArrayTypeSpec() && baseValueType.IsLikelyOptimizedTypedArray()) || (!this->DoNativeArrayTypeSpec() && baseValueType.IsLikelyNativeArray()) || !(baseValueType.IsLikelyOptimizedTypedArray() || baseValueType.IsLikelyNativeArray())) @@ -10744,7 +10974,7 @@ GlobOpt::TypeSpecializeStElem(IR::Instr ** pInstr, Value *src1Val, Value **pDstV this->func->GetDebugNumberSet(debugStringBuffer), Js::OpCodeUtil::GetOpCodeName(instr->m_opcode), baseValueTypeStr, - instr->DoStackArgsOpt(this->func) ? + instr->DoStackArgsOpt() ? _u("instruction uses the arguments object") : _u("typed array type specialization is disabled, or base is not an optimized typed array")); Output::Flush(); @@ -11069,7 +11299,7 @@ GlobOpt::ToVarUses(IR::Instr *instr, IR::Opnd *opnd, bool isDst, Value *val) return instr; } -IR::Instr * +IR::Instr * GlobOpt::ToTypeSpecIndex(IR::Instr * instr, IR::RegOpnd * indexOpnd, IR::IndirOpnd * indirOpnd) { Assert(indirOpnd != nullptr || indexOpnd == instr->GetSrc1()); @@ -11941,7 +12171,17 @@ GlobOpt::ToTypeSpecUse(IR::Instr *instr, IR::Opnd *opnd, BasicBlock *block, Valu const FloatConstType floatValue = valueInfo->AsFloatConstant()->FloatValue(); if(toType == TyInt32) { - Assert(lossy); + // In some loop scenarios, a sym can be specialized to int32 on loop entry + // during the prepass and then subsequentely specialized to float within + // the loop, leading to an attempted lossy conversion from float64 to int32 + // on the backedge. For these cases, disable aggressive int type specialization + // and try again. + if (!lossy) + { + AssertOrFailFast(DoAggressiveIntTypeSpec()); + throw Js::RejitException(RejitReason::AggressiveIntTypeSpecDisabled); + } + constOpnd = IR::IntConstOpnd::New( Js::JavascriptMath::ToInt32(floatValue), @@ -13243,6 +13483,98 @@ GlobOpt::ProcessNoImplicitCallArrayUses(IR::RegOpnd * baseOpnd, IR::ArrayRegOpnd } } +void +GlobOpt::OptStackArgLenAndConst(IR::Instr* instr, Value** src1Val) +{ + if (!PHASE_OFF(Js::StackArgLenConstOptPhase, instr->m_func) && instr->m_func->IsStackArgsEnabled() && instr->usesStackArgumentsObject && instr->IsInlined()) + { + IR::Opnd* src1 = instr->GetSrc1(); + auto replaceInstr = [&](IR::Opnd* newopnd, Js::OpCode opcode) + { + if (PHASE_TESTTRACE(Js::StackArgLenConstOptPhase, instr->m_func)) + { + Output::Print(_u("Inlined function %s have replaced opcode %s with opcode %s for stack arg optimization. \n"), instr->m_func->GetJITFunctionBody()->GetDisplayName(), + Js::OpCodeUtil::GetOpCodeName(instr->m_opcode), Js::OpCodeUtil::GetOpCodeName(opcode)); + Output::Flush(); + } + this->CaptureByteCodeSymUses(instr); + instr->m_opcode = opcode; + instr->ReplaceSrc1(newopnd); + if (instr->HasBailOutInfo()) + { + instr->ClearBailOutInfo(); + } + if (instr->IsProfiledInstr()) + { + Assert(opcode == Js::OpCode::Ld_A || opcode == Js::OpCode::Typeof); + instr->AsProfiledInstr()->u.FldInfo().valueType = ValueType::Uninitialized; + } + *src1Val = this->OptSrc(instr->GetSrc1(), &instr); + instr->m_func->hasArgLenAndConstOpt = true; + }; + Assert(CurrentBlockData()->IsArgumentsOpnd(src1)); + switch(instr->m_opcode) + { + case Js::OpCode::LdLen_A: + { + IR::AddrOpnd* newopnd = IR::AddrOpnd::New(Js::TaggedInt::ToVarUnchecked(instr->m_func->actualCount - 1), IR::AddrOpndKindConstantVar, instr->m_func); + replaceInstr(newopnd, Js::OpCode::Ld_A); + break; + } + case Js::OpCode::LdElemI_A: + case Js::OpCode::TypeofElem: + { + IR::IndirOpnd* indirOpndSrc1 = src1->AsIndirOpnd(); + if (!indirOpndSrc1->GetIndexOpnd()) + { + int argIndex = indirOpndSrc1->GetOffset() + 1; + IR::Instr* defInstr = nullptr; + if (argIndex > 0) + { + IR::Instr* inlineeStart = instr->m_func->GetInlineeStart(); + inlineeStart->IterateArgInstrs([&](IR::Instr* argInstr) { + StackSym *argSym = argInstr->GetDst()->AsSymOpnd()->m_sym->AsStackSym(); + if (argSym->GetArgSlotNum() - 1 == argIndex) + { + defInstr = argInstr; + return true; + } + return false; + }); + } + + Js::OpCode replacementOpcode; + if (instr->m_opcode == Js::OpCode::TypeofElem) + { + replacementOpcode = Js::OpCode::Typeof; + } + else + { + replacementOpcode = Js::OpCode::Ld_A; + } + + // If we cannot find the right instruction. I.E. When calling arguments[2] and no arguments were passed to the func + if (defInstr == nullptr) + { + IR::Opnd * undefined = IR::AddrOpnd::New(instr->m_func->GetScriptContextInfo()->GetUndefinedAddr(), IR::AddrOpndKindDynamicVar, instr->m_func, true); + undefined->SetValueType(ValueType::Undefined); + replaceInstr(undefined, replacementOpcode); + } + else + { + replaceInstr(defInstr->GetSrc1(), replacementOpcode); + } + } + else + { + instr->m_func->unoptimizableArgumentsObjReference++; + } + break; + } + } + } +} + void GlobOpt::CaptureNoImplicitCallUses( IR::Opnd *opnd, @@ -13419,6 +13751,7 @@ GlobOpt::CheckJsArrayKills(IR::Instr *const instr) case Js::OpCode::StFld: case Js::OpCode::StFldStrict: case Js::OpCode::StSuperFld: + case Js::OpCode::StSuperFldStrict: { Assert(instr->GetDst()); @@ -13564,7 +13897,6 @@ GlobOpt::CheckJsArrayKills(IR::Instr *const instr) case IR::HelperArray_Splice: case IR::HelperArray_Unshift: case IR::HelperArray_Concat: - case IR::HelperArray_Slice: kills.SetKillsArrayHeadSegments(); kills.SetKillsArrayHeadSegmentLengths(); break; @@ -13618,23 +13950,16 @@ GlobOpt::CheckJsArrayKills(IR::Instr *const instr) kills.SetKillsNativeArrays(); } break; - } + } - case Js::OpCode::InitClass: + case Js::OpCode::NewClassProto: Assert(instr->GetSrc1()); - if (instr->GetSrc2() == nullptr) + if (IR::AddrOpnd::IsEqualAddr(instr->GetSrc1(), (void*)func->GetScriptContextInfo()->GetObjectPrototypeAddr())) { - // No extends operand, so the InitClass will not make something into a prototype + // No extends operand, the proto parent is the Object prototype break; } - - if(doNativeArrayTypeSpec) - { - // Class/object construction can make something a prototype - kills.SetKillsNativeArrays(); - } - break; - + // Fall through case Js::OpCode::NewScObjectNoCtor: case Js::OpCode::NewScObjectNoCtorFull: if(doNativeArrayTypeSpec) @@ -14287,10 +14612,6 @@ GlobOpt::PreLowerCanonicalize(IR::Instr *instr, Value **pSrc1Val, Value **pSrc2V case Js::OpCode::NewConcatStrMulti: case Js::OpCode::NewConcatStrMultiBE: case Js::OpCode::ExtendArg_A: -#ifdef ENABLE_DOM_FAST_PATH - case Js::OpCode::DOMFastPathGetter: - case Js::OpCode::DOMFastPathSetter: -#endif case Js::OpCode::NewScopeSlots: case Js::OpCode::NewScopeSlotsWithoutPropIds: case Js::OpCode::NewStackScopeSlots: @@ -14329,6 +14650,10 @@ GlobOpt::PreLowerCanonicalize(IR::Instr *instr, Value **pSrc1Val, Value **pSrc2V void GlobOpt::ProcessKills(IR::Instr *instr) { + if (instr->m_opcode == Js::OpCode::Yield) + { + this->CurrentBlockData()->KillStateForGeneratorYield(instr); + } this->ProcessFieldKills(instr); this->ProcessValueKills(instr); this->ProcessArrayValueKills(instr); @@ -15469,7 +15794,7 @@ GlobOpt::DoConstFold() const bool GlobOpt::IsTypeSpecPhaseOff(Func const *func) { - return PHASE_OFF(Js::TypeSpecPhase, func) || func->IsJitInDebugMode() || !func->DoGlobOptsForGeneratorFunc(); + return PHASE_OFF(Js::TypeSpecPhase, func) || func->IsJitInDebugMode(); } bool @@ -15576,8 +15901,7 @@ GlobOpt::DoArrayCheckHoist(Func const * const func) return !PHASE_OFF(Js::ArrayCheckHoistPhase, func) && !func->IsArrayCheckHoistDisabled() && - !func->IsJitInDebugMode() && // StElemI fast path is not allowed when in debug mode, so it cannot have bailout - func->DoGlobOptsForGeneratorFunc(); + !func->IsJitInDebugMode(); // StElemI fast path is not allowed when in debug mode, so it cannot have bailout } bool @@ -15589,7 +15913,7 @@ GlobOpt::DoArrayCheckHoist() const bool GlobOpt::DoArrayCheckHoist(const ValueType baseValueType, Loop* loop, IR::Instr const * const instr) const { - if(!DoArrayCheckHoist() || (instr && !IsLoopPrePass() && instr->DoStackArgsOpt(func))) + if(!DoArrayCheckHoist() || (instr && !IsLoopPrePass() && instr->DoStackArgsOpt())) { return false; } @@ -15723,7 +16047,7 @@ GlobOpt::DoLdLenIntSpec(IR::Instr * const instr, const ValueType baseValueType) if(PHASE_OFF(Js::LdLenIntSpecPhase, func) || IsTypeSpecPhaseOff(func) || (func->HasProfileInfo() && func->GetReadOnlyProfileInfo()->IsLdLenIntSpecDisabled()) || - (instr && !IsLoopPrePass() && instr->DoStackArgsOpt(func))) + (instr && !IsLoopPrePass() && instr->DoStackArgsOpt())) { return false; } @@ -15791,7 +16115,7 @@ GlobOpt::TrackArgumentsObject() { if (PHASE_OFF(Js::StackArgOptPhase, this->func)) { - this->CannotAllocateArgumentsObjectOnStack(); + this->CannotAllocateArgumentsObjectOnStack(nullptr); return false; } @@ -15799,8 +16123,15 @@ GlobOpt::TrackArgumentsObject() } void -GlobOpt::CannotAllocateArgumentsObjectOnStack() +GlobOpt::CannotAllocateArgumentsObjectOnStack(Func * curFunc) { + if (curFunc != nullptr && curFunc->hasArgLenAndConstOpt) + { + Assert(!curFunc->GetJITOutput()->GetOutputData()->disableStackArgOpt); + curFunc->GetJITOutput()->GetOutputData()->disableStackArgOpt = true; + throw Js::RejitException(RejitReason::DisableStackArgLenAndConstOpt); + } + func->SetHasStackArgs(false); #ifdef ENABLE_DEBUG_CONFIG_OPTIONS @@ -16778,13 +17109,12 @@ GlobOpt::GenerateInductionVariableChangeForMemOp(Loop *loop, byte unroll, IR::In IR::Opnd *unrollOpnd = IR::IntConstOpnd::New(unroll, type, localFunc); - IR::Instr* inductionChangeMultiplier = IR::Instr::New( + IR::Instr *inductionChangeMultiplier = IR::Instr::New( Js::OpCode::Mul_I4, sizeOpnd, loopCountOpnd, unrollOpnd, localFunc); InsertInstr(inductionChangeMultiplier); inductionChangeMultiplier->ConvertToBailOutInstr(loop->bailOutInfo, IR::BailOutOnOverflow); - } } else @@ -17155,7 +17485,7 @@ GlobOpt::EmitMemop(Loop * loop, LoopCount *loopCount, const MemOpEmitData* emitD RemoveMemOpSrcInstr(memopInstr, ldElemInstr, emitData->block); } InsertNoImplicitCallUses(memopInstr); - noImplicitCallUsesToInsert->Clear(); + noImplicitCallUsesToInsert->Clear(); } bool @@ -17441,7 +17771,7 @@ GlobOpt::PRE::InsertSymDefinitionInLandingPad(StackSym * sym, Loop * loop, Sym * BasicBlock* loopTail = loop->GetAnyTailBlock(); Value * valueOnBackEdge = loopTail->globOptData.FindValue(propSym); - + // If o.x is not invariant in the loop, we can't use the preloaded value of o.x.y in the landing pad Value * valueInLandingPad = loop->landingPad->globOptData.FindValue(propSym); if (valueOnBackEdge->GetValueNumber() != valueInLandingPad->GetValueNumber()) @@ -17464,7 +17794,7 @@ GlobOpt::PRE::InsertSymDefinitionInLandingPad(StackSym * sym, Loop * loop, Sym * Assert(loop->landingPad->globOptData.IsLive(valueOnBackEdge->GetValueInfo()->GetSymStore())); // Inserted T3 = o.x - // Now, we want to + // Now, we want to // 1. Insert T1 = o.x // 2. Insert T4 = T1.y // 3. Indentify T3 as the objptr copy prop sym for T1, and make T3.y live on the back-edges @@ -17634,8 +17964,8 @@ void GlobOpt::PRE::RemoveOverlyOptimisticInitialValues(Loop * loop) { BasicBlock * landingPad = loop->landingPad; - // For a property sym whose obj ptr sym wasn't live in the landing pad, we can optmistically (if the obj ptr sym was - // single def) insert an initial value in the landing pad, with the hope that PRE could make the obj ptr sym live. + // For a property sym whose obj ptr sym wasn't live in the landing pad, we can optimistically (if the obj ptr sym was + // single def) insert an initial value in the landing pad, with the hope that PRE could make the obj ptr sym live. // But, if PRE couldn't make the obj ptr sym live, we need to clear the value for the property sym from the landing pad for (auto it = loop->initialValueFieldMap.GetIteratorWithRemovalSupport(); it.IsValid(); it.MoveNext()) diff --git a/lib/Backend/GlobOpt.h b/lib/Backend/GlobOpt.h index 725ac0ea975..8bae2a93bb8 100644 --- a/lib/Backend/GlobOpt.h +++ b/lib/Backend/GlobOpt.h @@ -288,18 +288,14 @@ typedef JsUtil::BaseDictionary Valu namespace JsUtil { template <> - class ValueEntry : public BaseValueEntry + inline void ClearValue::Clear(StackLiteralInitFldData* value) { - public: - void Clear() - { #if DBG - this->value.propIds = nullptr; - this->value.currentInitFldCount = (uint)-1; + value->propIds = nullptr; + value->currentInitFldCount = (uint)-1; #endif - } - }; -}; + } +} typedef JsUtil::BaseDictionary IntConstantToStackSymMap; typedef JsUtil::BaseDictionary IntConstantToValueMap; @@ -468,6 +464,8 @@ class GlobOpt BVSparse * changedSymsAfterIncBailoutCandidate; + BVSparse * auxSlotPtrSyms; + JitArenaAllocator * alloc; JitArenaAllocator * tempAlloc; @@ -697,6 +695,7 @@ class GlobOpt IR::Instr* CreateBoundsCheckInstr(IR::Opnd* lowerBound, IR::Opnd* upperBound, int offset, IR::BailOutKind bailoutkind, BailOutInfo* bailoutInfo, Func* func); IR::Instr* AttachBoundsCheckData(IR::Instr* instr, IR::Opnd* lowerBound, IR::Opnd* upperBound, int offset); void OptArraySrc(IR::Instr **const instrRef, Value ** src1Val, Value ** src2Val); + void OptStackArgLenAndConst(IR::Instr* instr, Value** src1Val); private: void TrackIntSpecializedAddSubConstant(IR::Instr *const instr, const AddSubConstantInfo *const addSubConstantInfo, Value *const dstValue, const bool updateSourceBounds); @@ -745,7 +744,7 @@ class GlobOpt void InsertCloneStrs(BasicBlock *toBlock, GlobOptBlockData *toData, GlobOptBlockData *fromData); void InsertValueCompensation(BasicBlock *const predecessor, BasicBlock *const successor, const SymToValueInfoMap *symsRequiringCompensationToMergedValueInfoMap); IR::Instr * ToVarUses(IR::Instr *instr, IR::Opnd *opnd, bool isDst, Value *val); - void ToVar(BVSparse *bv, BasicBlock *block); + void ToVar(BVSparse *bv, BasicBlock *block, IR::Instr* insertBeforeInstr = nullptr); IR::Instr * ToVar(IR::Instr *instr, IR::RegOpnd *regOpnd, BasicBlock *block, Value *val, bool needsUpdate); void ToInt32(BVSparse *bv, BasicBlock *block, bool lossy, IR::Instr *insertBeforeInstr = nullptr); void ToFloat64(BVSparse *bv, BasicBlock *block); @@ -873,6 +872,7 @@ class GlobOpt void ProcessInlineeEnd(IR::Instr * instr); void TrackCalls(IR::Instr * instr); void RecordInlineeFrameInfo(IR::Instr* instr); + void ClearInlineeFrameInfo(IR::Instr* instr); void EndTrackCall(IR::Instr * instr); void EndTrackingOfArgObjSymsForInlinee(); void FillBailOutInfo(BasicBlock *block, BailOutInfo *bailOutInfo); @@ -881,8 +881,14 @@ class GlobOpt static void MarkNonByteCodeUsed(IR::Instr * instr); static void MarkNonByteCodeUsed(IR::Opnd * opnd); + void GenerateLazyBailOut(IR::Instr *& instr); + bool IsLazyBailOutCurrentlyNeeded(IR::Instr * instr, Value const * src1Val, Value const * src2Val, bool isHoisted) const; + bool IsImplicitCallBailOutCurrentlyNeeded(IR::Instr * instr, Value const * src1Val, Value const * src2Val) const; - bool IsImplicitCallBailOutCurrentlyNeeded(IR::Instr * instr, Value const * src1Val, Value const * src2Val, BasicBlock const * block, bool hasLiveFields, bool mayNeedImplicitCallBailOut, bool isForwardPass) const; + bool IsImplicitCallBailOutCurrentlyNeeded(IR::Instr * instr, Value const * src1Val, Value const * src2Val, + BasicBlock const * block, bool hasLiveFields, + bool mayNeedImplicitCallBailOut, bool isForwardPass, bool mayNeedLazyBailOut = false) const; + static bool IsTypeCheckProtected(const IR::Instr * instr); static bool MayNeedBailOnImplicitCall(IR::Instr const * instr, Value const * src1Val, Value const * src2Val); static bool MaySrcNeedBailOnImplicitCall(IR::Opnd const * opnd, Value const * val); @@ -923,7 +929,7 @@ class GlobOpt void UpdateObjPtrValueType(IR::Opnd * opnd, IR::Instr * instr); bool TrackArgumentsObject(); - void CannotAllocateArgumentsObjectOnStack(); + void CannotAllocateArgumentsObjectOnStack(Func * curFunc); #if DBG bool IsPropertySymId(SymID symId) const; @@ -945,6 +951,8 @@ class GlobOpt bool CheckIfInstrInTypeCheckSeqEmitsTypeCheck(IR::Instr* instr, IR::PropertySymOpnd *opnd); template bool ProcessPropOpInTypeCheckSeq(IR::Instr* instr, IR::PropertySymOpnd *opnd, BasicBlock* block, bool updateExistingValue, bool* emitsTypeCheckOut = nullptr, bool* changesTypeValueOut = nullptr, bool *isObjTypeChecked = nullptr); + StackSym * EnsureAuxSlotPtrSym(IR::PropertySymOpnd *opnd); + void KillAuxSlotPtrSyms(IR::PropertySymOpnd *opnd, BasicBlock *block, bool isObjTypeSpecialized); template bool MapObjectHeaderInlinedTypeSymsUntil(BasicBlock *block, bool isObjTypeSpecialized, SymID opndId, Fn fn); void KillObjectHeaderInlinedTypeSyms(BasicBlock *block, bool isObjTypeSpecialized, SymID symId = SymID_Invalid); diff --git a/lib/Backend/GlobOptArrays.cpp b/lib/Backend/GlobOptArrays.cpp index 132df67069e..54ba70ac919 100644 --- a/lib/Backend/GlobOptArrays.cpp +++ b/lib/Backend/GlobOptArrays.cpp @@ -151,6 +151,16 @@ bool GlobOpt::ArraySrcOpt::CheckOpCode() return false; } + if (instr->GetSrc1()->IsAddrOpnd()) + { + const Js::Var val = instr->GetSrc1()->AsAddrOpnd()->m_address; + if (Js::TaggedInt::Is(val)) + { + originalIndexOpnd = instr->UnlinkSrc1(); + instr->SetSrc1(IR::IntConstOpnd::New(Js::TaggedInt::ToInt32(val), TyInt32, instr->m_func)); + } + } + if (!instr->GetSrc1()->IsRegOpnd() && !instr->GetSrc1()->IsIntConstOpnd()) { return false; @@ -199,7 +209,7 @@ void GlobOpt::ArraySrcOpt::TypeSpecIndex() { // If the optimization is unable to eliminate the bounds checks, we need to restore the original var sym. Assert(originalIndexOpnd == nullptr); - originalIndexOpnd = instr->GetSrc1()->Copy(func)->AsRegOpnd(); + originalIndexOpnd = instr->GetSrc1()->Copy(func); globOpt->ToTypeSpecIndex(instr, instr->GetSrc1()->AsRegOpnd(), nullptr); } } @@ -2016,7 +2026,8 @@ void GlobOpt::ArraySrcOpt::Optimize() const IR::BailOutKind bailOutKind = instr->GetBailOutKind(); Assert( !(bailOutKind & ~IR::BailOutKindBits) || - (bailOutKind & ~IR::BailOutKindBits) == IR::BailOutOnImplicitCallsPreOp); + (bailOutKind & ~IR::BailOutKindBits) == IR::BailOutOnImplicitCallsPreOp || + (bailOutKind & ~IR::BailOutKindBits) == IR::LazyBailOut); instr->SetBailOutKind(bailOutKind & IR::BailOutKindBits | IR::BailOutOnArrayAccessHelperCall); } else diff --git a/lib/Backend/GlobOptArrays.h b/lib/Backend/GlobOptArrays.h index d6e0b2c7d09..ed99dd78b0d 100644 --- a/lib/Backend/GlobOptArrays.h +++ b/lib/Backend/GlobOptArrays.h @@ -52,7 +52,7 @@ class GlobOpt::ArraySrcOpt IR::IndirOpnd * baseOwnerIndir = nullptr; IR::RegOpnd * baseOpnd = nullptr; IR::Opnd * indexOpnd = nullptr; - IR::RegOpnd * originalIndexOpnd = nullptr; + IR::Opnd * originalIndexOpnd = nullptr; bool isProfilableLdElem = false; bool isProfilableStElem = false; bool isLoad = false; diff --git a/lib/Backend/GlobOptBailOut.cpp b/lib/Backend/GlobOptBailOut.cpp index 21b0c7753b6..bec5339fa59 100644 --- a/lib/Backend/GlobOptBailOut.cpp +++ b/lib/Backend/GlobOptBailOut.cpp @@ -31,7 +31,7 @@ GlobOpt::CaptureValuesFromScratch(BasicBlock * block, block->globOptData.changedSyms->ClearAll(); - FOREACH_GLOBHASHTABLE_ENTRY(bucket, block->globOptData.symToValueMap) + FOREACH_VALUEHASHTABLE_ENTRY(GlobHashBucket, bucket, block->globOptData.symToValueMap) { value = bucket.element; valueInfo = value->GetValueInfo(); @@ -48,7 +48,7 @@ GlobOpt::CaptureValuesFromScratch(BasicBlock * block, } block->globOptData.changedSyms->Set(sym->m_id); } - NEXT_GLOBHASHTABLE_ENTRY; + NEXT_VALUEHASHTABLE_ENTRY; if (argsToCapture) { @@ -239,14 +239,6 @@ GlobOpt::CaptureValuesIncremental(BasicBlock * block, void GlobOpt::CaptureValues(BasicBlock *block, BailOutInfo * bailOutInfo, BVSparse* argsToCapture) { - if (!this->func->DoGlobOptsForGeneratorFunc()) - { - // TODO[generators][ianhall]: Enable constprop and copyprop for generator functions; see GlobOpt::CopyProp() - // Even though CopyProp is disabled for generator functions we must also not put the copy-prop sym into the - // bailOutInfo so that the bailOutInfo keeps track of the key sym in its byteCodeUpwardExposed list. - return; - } - CapturedValues capturedValues; SListBase::EditingIterator bailOutConstValuesIter(&capturedValues.constantValues); SListBase::EditingIterator bailOutCopySymsIter(&capturedValues.copyPropSyms); @@ -482,6 +474,32 @@ GlobOpt::CaptureByteCodeSymUses(IR::Instr * instr) void GlobOpt::ProcessInlineeEnd(IR::Instr* instr) { + if (!PHASE_OFF(Js::StackArgLenConstOptPhase, instr->m_func) && + !IsLoopPrePass() && + (!instr->m_func->GetJITFunctionBody()->UsesArgumentsObject() || instr->m_func->IsStackArgsEnabled())) + { + if (instr->m_func->unoptimizableArgumentsObjReference == 0 && instr->m_func->unoptimizableArgumentsObjReferenceInInlinees == 0) + { + instr->m_func->hasUnoptimizedArgumentsAccess = false; + if (!instr->m_func->m_hasInlineArgsOpt && DoInlineArgsOpt(instr->m_func)) + { + instr->m_func->m_hasInlineArgsOpt = true; + Assert(instr->m_func->cachedInlineeFrameInfo); + instr->m_func->frameInfo = instr->m_func->cachedInlineeFrameInfo; + } + } + else + { + instr->m_func->hasUnoptimizedArgumentsAccess = true; + + if (instr->m_func->m_hasInlineArgsOpt && instr->m_func->cachedInlineeFrameInfo) + { + instr->m_func->m_hasInlineArgsOpt = false; + ClearInlineeFrameInfo(instr); + } + } + } + if (instr->m_func->m_hasInlineArgsOpt) { RecordInlineeFrameInfo(instr); @@ -490,6 +508,8 @@ GlobOpt::ProcessInlineeEnd(IR::Instr* instr) Assert(this->currentBlock->globOptData.inlinedArgOutSize >= instr->GetArgOutSize(/*getInterpreterArgOutCount*/ false)); this->currentBlock->globOptData.inlinedArgOutSize -= instr->GetArgOutSize(/*getInterpreterArgOutCount*/ false); + + instr->m_func->GetParentFunc()->unoptimizableArgumentsObjReferenceInInlinees += instr->m_func->unoptimizableArgumentsObjReference; } void @@ -506,7 +526,6 @@ GlobOpt::TrackCalls(IR::Instr * instr) if (this->currentBlock->globOptData.callSequence == nullptr) { this->currentBlock->globOptData.callSequence = JitAnew(this->alloc, SListBase); - this->currentBlock->globOptData.callSequence = this->currentBlock->globOptData.callSequence; } this->currentBlock->globOptData.callSequence->Prepend(this->alloc, instr->GetDst()); @@ -571,6 +590,7 @@ GlobOpt::TrackCalls(IR::Instr * instr) } case Js::OpCode::InlineeStart: + { Assert(instr->m_func->GetParentFunc() == this->currentBlock->globOptData.curFunc); Assert(instr->m_func->GetParentFunc()); this->currentBlock->globOptData.curFunc = instr->m_func; @@ -578,18 +598,24 @@ GlobOpt::TrackCalls(IR::Instr * instr) this->func->UpdateMaxInlineeArgOutSize(this->currentBlock->globOptData.inlinedArgOutSize); this->EndTrackCall(instr); + InlineeFrameInfo* inlineeFrameInfo = InlineeFrameInfo::New(instr->m_func->m_alloc); + inlineeFrameInfo->functionSymStartValue = instr->GetSrc1()->GetSym() ? + CurrentBlockData()->FindValue(instr->GetSrc1()->GetSym()) : nullptr; + inlineeFrameInfo->floatSyms = CurrentBlockData()->liveFloat64Syms->CopyNew(this->alloc); + inlineeFrameInfo->intSyms = CurrentBlockData()->liveInt32Syms->MinusNew(CurrentBlockData()->liveLossyInt32Syms, this->alloc); + inlineeFrameInfo->varSyms = CurrentBlockData()->liveVarSyms->CopyNew(this->alloc); + if (DoInlineArgsOpt(instr->m_func)) { instr->m_func->m_hasInlineArgsOpt = true; - InlineeFrameInfo* frameInfo = InlineeFrameInfo::New(func->m_alloc); - instr->m_func->frameInfo = frameInfo; - frameInfo->functionSymStartValue = instr->GetSrc1()->GetSym() ? - CurrentBlockData()->FindValue(instr->GetSrc1()->GetSym()) : nullptr; - frameInfo->floatSyms = CurrentBlockData()->liveFloat64Syms->CopyNew(this->alloc); - frameInfo->intSyms = CurrentBlockData()->liveInt32Syms->MinusNew(CurrentBlockData()->liveLossyInt32Syms, this->alloc); - frameInfo->varSyms = CurrentBlockData()->liveVarSyms->CopyNew(this->alloc); + instr->m_func->frameInfo = inlineeFrameInfo; + } + else + { + instr->m_func->cachedInlineeFrameInfo = inlineeFrameInfo; } break; + } case Js::OpCode::EndCallForPolymorphicInlinee: // Have this opcode mimic the functions of both InlineeStart and InlineeEnd in the bailout block of a polymorphic call inlined using fixed methods. @@ -713,7 +739,14 @@ GlobOpt::TrackCalls(IR::Instr * instr) if (OpCodeAttr::CallInstr(instr->m_opcode)) { this->EndTrackCall(instr); - if (this->inInlinedBuiltIn && instr->m_opcode == Js::OpCode::CallDirect) + // With `InlineeBuiltInStart` and `InlineeBuiltInEnd` surrounding CallI/CallIDirect/CallIDynamic/CallIFixed, + // we are not popping the call sequence correctly. That makes the bailout code thinks that we need to restore + // argouts of the remaining call even though we shouldn't. + // Also see Inline::InlineApplyWithArgumentsObject, Inline::InlineApplyWithoutArrayArgument, Inline::InlineCall + // in which we set the end tag instruction's opcode to InlineNonTrackingBuiltInEnd + if (this->inInlinedBuiltIn && + (instr->m_opcode == Js::OpCode::CallDirect || instr->m_opcode == Js::OpCode::CallI || + instr->m_opcode == Js::OpCode::CallIDynamic || instr->m_opcode == Js::OpCode::CallIFixed)) { // We can end up in this situation when a built-in apply target is inlined to a CallDirect. We have the following IR: // @@ -739,6 +772,24 @@ GlobOpt::TrackCalls(IR::Instr * instr) } } +void GlobOpt::ClearInlineeFrameInfo(IR::Instr* inlineeEnd) +{ + if (this->IsLoopPrePass()) + { + return; + } + + InlineeFrameInfo* frameInfo = inlineeEnd->m_func->frameInfo; + inlineeEnd->m_func->frameInfo = nullptr; + + if (!frameInfo || !frameInfo->isRecorded) + { + return; + } + frameInfo->function = InlineFrameInfoValue(); + frameInfo->arguments->Clear(); +} + void GlobOpt::RecordInlineeFrameInfo(IR::Instr* inlineeEnd) { if (this->IsLoopPrePass()) @@ -860,7 +911,7 @@ void GlobOpt::EndTrackingOfArgObjSymsForInlinee() // This means there are arguments object symbols in the current function which are not in the current block. // This could happen when one of the blocks has a throw and arguments object aliased in it and other blocks don't see it. // Rare case, abort stack arguments optimization in this case. - CannotAllocateArgumentsObjectOnStack(); + CannotAllocateArgumentsObjectOnStack(this->currentBlock->globOptData.curFunc); } else { @@ -1186,26 +1237,159 @@ GlobOpt::MaySrcNeedBailOnImplicitCall(IR::Opnd const * opnd, Value const * val) }; } +bool +GlobOpt::IsLazyBailOutCurrentlyNeeded(IR::Instr * instr, Value const * src1Val, Value const * src2Val, bool isHoisted) const +{ +#ifdef _M_X64 + + if (!this->func->ShouldDoLazyBailOut() || + this->IsLoopPrePass() || + isHoisted + ) + { + return false; + } + + if (this->currentBlock->IsLandingPad()) + { + Assert(!instr->HasAnyImplicitCalls() || this->currentBlock->GetNext()->loop->endDisableImplicitCall != nullptr); + return false; + } + + // These opcodes can change the value of a field regardless whether the + // instruction has any implicit call + if (OpCodeAttr::CallInstr(instr->m_opcode) || instr->IsStElemVariant() || instr->IsStFldVariant()) + { + return true; + } + + // Now onto those that might change values of fixed fields through implicit calls. + // There are certain bailouts that are already attached to this instruction that + // prevent implicit calls from happening, so we won't need lazy bailout for those. + + // If a type check fails, we will bail out and therefore no need for lazy bailout + if (instr->HasTypeCheckBailOut()) + { + return false; + } + + // We decided to do StackArgs optimization, which means that this instruction + // could only either be LdElemI_A or TypeofElem, and that it does not have + // an implicit call. So no need for lazy bailout. + if (instr->HasBailOutInfo() && instr->GetBailOutKind() == IR::BailOnStackArgsOutOfActualsRange) + { + Assert(instr->m_opcode == Js::OpCode::LdElemI_A || instr->m_opcode == Js::OpCode::TypeofElem); + return false; + } + + // If all operands are type specialized, we won't generate helper path; + // therefore no need for lazy bailout + if (instr->AreAllOpndsTypeSpecialized()) + { + return false; + } + + // The instruction might have other bailouts that prevent + // implicit calls from happening. That is captured in + // GlobOpt::MayNeedBailOnImplicitCall. So we only + // need lazy bailout of we think there might be implicit calls + // or if there aren't any bailouts that prevent them from happening. + return this->MayNeedBailOnImplicitCall(instr, src1Val, src2Val); + +#else // _M_X64 + + return false; + +#endif +} + +void +GlobOpt::GenerateLazyBailOut(IR::Instr *&instr) +{ + // LazyBailOut: + // + For all StFld variants (o.x), in the forward pass, we set LazyBailOutBit in the instruction. + // In DeadStore, we will remove the bit if the field that the instruction is setting to is not fixed + // downstream. + // + For StElem variants (o[x]), we do not need LazyBailOut if the `x` operand is a number because + // we currently only "fix" a field if the property name is non-numeric. + // + For all other cases (instructions that may have implicit calls), we will just add on the bit anyway and figure + // out later whether we need LazyBailOut during DeadStore. + // + // Note that for StFld and StElem instructions which can change fixed fields whether or not implicit calls will happen, + // if such instructions already have a preop bailout, they should both have BailOnImplicitCallPreOp and LazyBailOut attached. + // This is to cover two cases: + // + if the operation turns out to be an implicit call, we do a preop bailout + // + if the operation isn't an implicit call, but if it invalidates our fixed field's PropertyGuard, then LazyBailOut preop + // is triggered. LazyBailOut preop means that we will perform the StFld/StElem again in the interpreter, but that is fine + // since we are simply overwriting the value again. + if (instr->forcePreOpBailOutIfNeeded) + { + // `forcePreOpBailOutIfNeeded` indicates that when we need to bail on implicit calls, + // the bailout should be preop because these instructions are lowerered to multiple helper calls. + // In such cases, simply adding a postop lazy bailout to the instruction wouldn't be correct, + // so we must generate a bailout on implicit calls preop in place of lazy bailout. + if (instr->HasBailOutInfo()) + { + Assert(instr->GetBailOutKind() == IR::BailOutOnImplicitCallsPreOp); + instr->SetBailOutKind(BailOutInfo::WithLazyBailOut(instr->GetBailOutKind())); + } + else + { + this->GenerateBailAtOperation(&instr, BailOutInfo::WithLazyBailOut(IR::BailOutOnImplicitCallsPreOp)); + } + } + else if (!instr->IsStElemVariant() || this->IsNonNumericRegOpnd(instr->GetDst()->AsIndirOpnd()->GetIndexOpnd(), true /* inGlobOpt */)) + { + if (instr->HasBailOutInfo()) + { + instr->SetBailOutKind(BailOutInfo::WithLazyBailOut(instr->GetBailOutKind())); + } + else + { + this->GenerateBailAfterOperation(&instr, IR::LazyBailOut); + } + } +} + bool GlobOpt::IsImplicitCallBailOutCurrentlyNeeded(IR::Instr * instr, Value const * src1Val, Value const * src2Val) const { Assert(!this->IsLoopPrePass()); - return this->IsImplicitCallBailOutCurrentlyNeeded(instr, src1Val, src2Val, this->currentBlock, - (!this->currentBlock->globOptData.liveFields->IsEmpty()), !this->currentBlock->IsLandingPad(), true); + return this->IsImplicitCallBailOutCurrentlyNeeded( + instr, src1Val, src2Val, this->currentBlock, + (!this->currentBlock->globOptData.liveFields->IsEmpty()) /* hasLiveFields */, + !this->currentBlock->IsLandingPad() /* mayNeedImplicitCallBailOut */, + true /* isForwardPass */ + ); } bool -GlobOpt::IsImplicitCallBailOutCurrentlyNeeded(IR::Instr * instr, Value const * src1Val, Value const * src2Val, BasicBlock const * block, bool hasLiveFields, bool mayNeedImplicitCallBailOut, bool isForwardPass) const +GlobOpt::IsImplicitCallBailOutCurrentlyNeeded(IR::Instr * instr, Value const * src1Val, Value const * src2Val, BasicBlock const * block, + bool hasLiveFields, bool mayNeedImplicitCallBailOut, bool isForwardPass, bool mayNeedLazyBailOut) const { + // We use BailOnImplicitCallPreOp for fixed field optimization in place of LazyBailOut when + // an instruction already has a preop bailout. This function is called both from the forward + // and backward passes to check if implicit bailout is needed and use the result to insert/remove + // bailout. In the backward pass, we would want to override the decision to not + // use implicit call to true when we need lazy bailout so that the bailout isn't removed. + // In the forward pass, however, we don't want to influence the result. So make sure that + // mayNeedLazyBailOut is false when we are in the forward pass. + Assert(!isForwardPass || !mayNeedLazyBailOut); + if (mayNeedImplicitCallBailOut && - !instr->CallsAccessor() && + + // If we know that we are calling an accessor, don't insert bailout on implicit calls + // because we will bail out anyway. However, with fixed field optimization we still + // want the bailout to prevent any side effects from happening. + (!instr->CallsAccessor() || mayNeedLazyBailOut) && ( NeedBailOnImplicitCallForLiveValues(block, isForwardPass) || NeedBailOnImplicitCallForCSE(block, isForwardPass) || NeedBailOnImplicitCallWithFieldOpts(block->loop, hasLiveFields) || - NeedBailOnImplicitCallForArrayCheckHoist(block, isForwardPass) || - (instr->HasBailOutInfo() && (instr->GetBailOutKind() & IR::BailOutMarkTempObject) != 0) + NeedBailOnImplicitCallForArrayCheckHoist(block, isForwardPass) || + (instr->HasBailOutInfo() && (instr->GetBailOutKind() & IR::BailOutMarkTempObject) != 0) || + mayNeedLazyBailOut ) && (!instr->HasTypeCheckBailOut() && MayNeedBailOnImplicitCall(instr, src1Val, src2Val))) { diff --git a/lib/Backend/GlobOptBlockData.cpp b/lib/Backend/GlobOptBlockData.cpp index 46e10460844..bf5c3a4b557 100644 --- a/lib/Backend/GlobOptBlockData.cpp +++ b/lib/Backend/GlobOptBlockData.cpp @@ -660,7 +660,7 @@ GlobOptBlockData::MergeBlockData( { if (!this->argObjSyms->Equal(fromData->argObjSyms)) { - this->globOpt->CannotAllocateArgumentsObjectOnStack(); + this->globOpt->CannotAllocateArgumentsObjectOnStack(nullptr); } } @@ -767,12 +767,23 @@ GlobOptBlockData::MergeValueMaps( if (iter2.IsValid() && bucket.value->m_id == iter2.Data().value->m_id) { + // Syms that are assigned to within the loop must have unique + // value numbers in the loop header after merging; a single + // prepass is not adequate to determine that sym values are + // equivalent through all possible loop paths. + bool forceUniqueValue = + isLoopBackEdge && + !this->globOpt->IsLoopPrePass() && + loop && + loop->symsAssignedToInLoop->Test(bucket.value->m_id); + newValue = this->MergeValues( bucket.element, iter2.Data().element, iter2.Data().value, isLoopBackEdge, + forceUniqueValue, symsRequiringCompensation, symsCreatedForMerge); } @@ -847,6 +858,7 @@ GlobOptBlockData::MergeValues( Value *fromDataValue, Sym *fromDataSym, bool isLoopBackEdge, + bool forceUniqueValue, BVSparse *const symsRequiringCompensation, BVSparse *const symsCreatedForMerge) { @@ -879,22 +891,30 @@ GlobOptBlockData::MergeValues( return toDataValue; } - // There may be other syms in toData that haven't been merged yet, referring to the current toData value for this sym. If - // the merge produced a new value info, don't corrupt the value info for the other sym by changing the same value. Instead, - // create one value per source value number pair per merge and reuse that for new value infos. - Value *newValue = this->globOpt->valuesCreatedForMerge->Lookup(sourceValueNumberPair, nullptr); - if(newValue) + Value *newValue = nullptr; + if (forceUniqueValue) { - Assert(sameValueNumber == (newValue->GetValueNumber() == toDataValue->GetValueNumber())); - - // This is an exception where Value::SetValueInfo is called directly instead of GlobOpt::ChangeValueInfo, because we're - // actually generating new value info through merges. - newValue->SetValueInfo(newValueInfo); + newValue = this->globOpt->NewValue(newValueInfo); } else { - newValue = this->globOpt->NewValue(sameValueNumber ? sourceValueNumberPair.First() : this->globOpt->NewValueNumber(), newValueInfo); - this->globOpt->valuesCreatedForMerge->Add(sourceValueNumberPair, newValue); + // There may be other syms in toData that haven't been merged yet, referring to the current toData value for this sym. If + // the merge produced a new value info, don't corrupt the value info for the other sym by changing the same value. Instead, + // create one value per source value number pair per merge and reuse that for new value infos. + newValue = this->globOpt->valuesCreatedForMerge->Lookup(sourceValueNumberPair, nullptr); + if (newValue) + { + Assert(sameValueNumber == (newValue->GetValueNumber() == toDataValue->GetValueNumber())); + + // This is an exception where Value::SetValueInfo is called directly instead of GlobOpt::ChangeValueInfo, because we're + // actually generating new value info through merges. + newValue->SetValueInfo(newValueInfo); + } + else + { + newValue = this->globOpt->NewValue(sameValueNumber ? sourceValueNumberPair.First() : this->globOpt->NewValueNumber(), newValueInfo); + this->globOpt->valuesCreatedForMerge->Add(sourceValueNumberPair, newValue); + } } // Set symStore if same on both paths. @@ -1654,60 +1674,82 @@ GlobOptBlockData::IsFloat64TypeSpecialized(Sym const * sym) const } void -GlobOptBlockData::KillStateForGeneratorYield() +GlobOptBlockData::KillStateForGeneratorYield(IR::Instr* yieldInstr) { - /* - TODO[generators][ianhall]: Do a ToVar on any typespec'd syms before the bailout so that we can enable typespec in generators without bailin having to restore typespec'd values - FOREACH_BITSET_IN_SPARSEBV(symId, this->liveInt32Syms) - { - this->ToVar(instr, , this->globOpt->currentBlock, , ); - } - NEXT_BITSET_IN_SPARSEBV; - - FOREACH_BITSET_IN_SPARSEBV(symId, this->liveInt32Syms) - { - this->ToVar(instr, , this->globOpt->currentBlock, , ); - } - NEXT_BITSET_IN_SPARSEBV; - */ + this->liveInt32Syms->Minus(this->liveVarSyms); + this->globOpt->ToVar(liveInt32Syms, this->globOpt->currentBlock, yieldInstr /* insertBeforeInstr */); + this->liveInt32Syms->ClearAll(); - FOREACH_GLOBHASHTABLE_ENTRY(bucket, this->symToValueMap) - { - ValueType type = bucket.element->GetValueInfo()->Type().ToLikely(); - bucket.element = this->globOpt->NewGenericValue(type); - } - NEXT_GLOBHASHTABLE_ENTRY; + this->liveFloat64Syms->Minus(this->liveVarSyms); + this->globOpt->ToVar(liveFloat64Syms, this->globOpt->currentBlock, yieldInstr /* insertBeforeInstr */); + this->liveFloat64Syms->ClearAll(); - this->exprToValueMap->ClearAll(); - this->liveFields->ClearAll(); - this->liveArrayValues->ClearAll(); - if (this->maybeWrittenTypeSyms) - { - this->maybeWrittenTypeSyms->ClearAll(); - } - this->isTempSrc->ClearAll(); - this->liveInt32Syms->ClearAll(); this->liveLossyInt32Syms->ClearAll(); - this->liveFloat64Syms->ClearAll(); // Keep this->liveVarSyms as is // Keep this->argObjSyms as is - // MarkTemp should be disabled for generator functions for now - Assert(this->maybeTempObjectSyms == nullptr || this->maybeTempObjectSyms->IsEmpty()); - Assert(this->canStoreTempObjectSyms == nullptr || this->canStoreTempObjectSyms->IsEmpty()); + this->hasCSECandidates = false; - this->valuesToKillOnCalls->Clear(); - if (this->inductionVariables) - { - this->inductionVariables->Clear(); + // No need to clear `isTempSrc` (used for in-place string concat) + + this->exprToValueMap->ClearAll(); + + this->KillSymToValueMapForGeneratorYield(); +} + +void +GlobOptBlockData::KillSymToValueMapForGeneratorYield() +{ + // Remove illegal symToValueMap entries whose symstores don't have bytecode registers + // Hash table bucket key-value visualization: { bucket.value: bucket.element } + // + // Idea: + // Multiple symbols can map to the same value which has a symstore + // (multiple keys map to same value). + // Since the symstore might not have a bytecode register, our first pass + // through the map attemps to use the symbol (key) as a symstore for that value. + // This allows us to still retain such entries. + // After the first pass, any symToValueMap entries whose symstores don't have + // bytecode registers will be cleared. + FOREACH_VALUEHASHTABLE_ENTRY(GlobHashBucket, bucket, this->symToValueMap) + { + if (bucket.element == nullptr) + { + continue; + } + + Sym* symStore = bucket.element->GetValueInfo()->GetSymStore(); + if (symStore != nullptr && symStore->IsStackSym() && symStore->AsStackSym()->HasByteCodeRegSlot()) + { + continue; + } + + Sym* sym = bucket.value; + if (sym != nullptr && sym->IsStackSym() && sym->AsStackSym()->HasByteCodeRegSlot()) + { + bucket.element->GetValueInfo()->SetSymStore(sym); + } } - if (this->availableIntBoundChecks) + NEXT_VALUEHASHTABLE_ENTRY; + + // Remove illegal entries + FOREACH_VALUEHASHTABLE_ENTRY_EDITING(GlobHashBucket, bucket, this->symToValueMap, iter) { - this->availableIntBoundChecks->Clear(); + Value* value = bucket.element; + if (value == nullptr) + { + iter.RemoveCurrent(this->symToValueMap->alloc); + } + else + { + Sym* symStore = value->GetValueInfo()->GetSymStore(); + if (symStore == nullptr || !symStore->IsStackSym() || !symStore->AsStackSym()->HasByteCodeRegSlot()) + { + iter.RemoveCurrent(this->symToValueMap->alloc); + } + } } - - // Keep bailout data as is - this->hasCSECandidates = false; + NEXT_VALUEHASHTABLE_ENTRY_EDITING; } #if DBG_DUMP diff --git a/lib/Backend/GlobOptBlockData.h b/lib/Backend/GlobOptBlockData.h index 541c7603411..27a23ef0ea0 100644 --- a/lib/Backend/GlobOptBlockData.h +++ b/lib/Backend/GlobOptBlockData.h @@ -20,7 +20,7 @@ class ExprAttributes } private: - static const uint32 BitMask(const uint index) + static uint32 BitMask(const uint index) { return 1u << index; } @@ -261,7 +261,7 @@ class GlobOptBlockData template void MergeCapturedValues(SListBase* toList, SListBase * fromList, CapturedItemsAreEqual itemsAreEqual); void MergeValueMaps(BasicBlock *toBlock, BasicBlock *fromBlock, BVSparse *const symsRequiringCompensation, BVSparse *const symsCreatedForMerge); - Value * MergeValues(Value *toDataValue, Value *fromDataValue, Sym *fromDataSym, bool isLoopBackEdge, BVSparse *const symsRequiringCompensation, BVSparse *const symsCreatedForMerge); + Value * MergeValues(Value *toDataValue, Value *fromDataValue, Sym *fromDataSym, bool isLoopBackEdge, bool forceUniqueValue, BVSparse *const symsRequiringCompensation, BVSparse *const symsCreatedForMerge); ValueInfo * MergeValueInfo(Value *toDataVal, Value *fromDataVal, Sym *fromDataSym, bool isLoopBackEdge, bool sameValueNumber, BVSparse *const symsRequiringCompensation, BVSparse *const symsCreatedForMerge); JsTypeValueInfo * MergeJsTypeValueInfo(JsTypeValueInfo * toValueInfo, JsTypeValueInfo * fromValueInfo, bool isLoopBackEdge, bool sameValueNumber); ValueInfo * MergeArrayValueInfo(const ValueType mergedValueType, const ArrayValueInfo *const toDataValueInfo, const ArrayValueInfo *const fromDataValueInfo, Sym *const arraySym, BVSparse *const symsRequiringCompensation, BVSparse *const symsCreatedForMerge, bool isLoopBackEdge); @@ -320,8 +320,9 @@ class GlobOptBlockData private: // Other + void KillSymToValueMapForGeneratorYield(); public: - void KillStateForGeneratorYield(); + void KillStateForGeneratorYield(IR::Instr *yieldInstr); // Debug public: diff --git a/lib/Backend/GlobOptExpr.cpp b/lib/Backend/GlobOptExpr.cpp index d95b63779ce..14c6ac03e25 100644 --- a/lib/Backend/GlobOptExpr.cpp +++ b/lib/Backend/GlobOptExpr.cpp @@ -828,6 +828,7 @@ GlobOpt::ProcessArrayValueKills(IR::Instr *instr) case Js::OpCode::StFldStrict: case Js::OpCode::StRootFldStrict: case Js::OpCode::StSuperFld: + case Js::OpCode::StSuperFldStrict: case Js::OpCode::StSlot: case Js::OpCode::StSlotChkUndecl: case Js::OpCode::DeleteFld: diff --git a/lib/Backend/GlobOptFields.cpp b/lib/Backend/GlobOptFields.cpp index d095f85801e..dca85bd2119 100644 --- a/lib/Backend/GlobOptFields.cpp +++ b/lib/Backend/GlobOptFields.cpp @@ -211,7 +211,6 @@ void GlobOpt::KillLiveElems(IR::IndirOpnd * indirOpnd, IR::Opnd * valueOpnd, BVSparse * bv, bool inGlobOpt, Func *func) { IR::RegOpnd *indexOpnd = indirOpnd->GetIndexOpnd(); - // obj.x = 10; // obj["x"] = ...; // This needs to kill obj.x... We need to kill all fields... // @@ -392,6 +391,7 @@ GlobOpt::ProcessFieldKills(IR::Instr *instr, BVSparse *bv, bo case Js::OpCode::InitSetFld: case Js::OpCode::InitGetFld: + case Js::OpCode::InitClassMember: case Js::OpCode::InitClassMemberGet: case Js::OpCode::InitClassMemberSet: sym = instr->GetDst()->AsSymOpnd()->m_sym; @@ -440,6 +440,7 @@ GlobOpt::ProcessFieldKills(IR::Instr *instr, BVSparse *bv, bo case Js::OpCode::StSlot: case Js::OpCode::StSlotChkUndecl: case Js::OpCode::StSuperFld: + case Js::OpCode::StSuperFldStrict: Assert(dstOpnd != nullptr); sym = dstOpnd->AsSymOpnd()->m_sym; if (inGlobOpt) @@ -481,7 +482,7 @@ GlobOpt::ProcessFieldKills(IR::Instr *instr, BVSparse *bv, bo case Js::OpCode::InlineeEnd: Assert(!instr->UsesAllFields()); - // Kill all live 'arguments' and 'caller' fields, as 'inlineeFunction.arguments' and 'inlineeFunction.caller' + // Kill all live 'arguments' and 'caller' fields, as 'inlineeFunction.arguments' and 'inlineeFunction.caller' // cannot be copy-propped across different instances of the same inlined function. KillLiveFields(argumentsEquivBv, bv); KillLiveFields(callerEquivBv, bv); @@ -564,7 +565,14 @@ GlobOpt::ProcessFieldKills(IR::Instr *instr, BVSparse *bv, bo } break; - case Js::OpCode::InitClass: + case Js::OpCode::NewClassProto: + Assert(instr->GetSrc1()); + if (IR::AddrOpnd::IsEqualAddr(instr->GetSrc1(), (void*)func->GetScriptContextInfo()->GetObjectPrototypeAddr())) + { + // No extends operand, the proto parent is the Object prototype + break; + } + // Fall through case Js::OpCode::InitProto: case Js::OpCode::NewScObjectNoCtor: case Js::OpCode::NewScObjectNoCtorFull: @@ -635,7 +643,7 @@ GlobOpt::CreateFieldSrcValue(PropertySym * sym, PropertySym * originalSym, IR::O } Assert((*ppOpnd)->AsSymOpnd()->m_sym == sym || this->IsLoopPrePass()); - + // We don't use the sym store to do copy prop on hoisted fields, but create a value // in case it can be copy prop out of the loop. return this->NewGenericValue(ValueType::Uninitialized, *ppOpnd); @@ -929,6 +937,7 @@ GlobOpt::FinishOptPropOp(IR::Instr *instr, IR::PropertySymOpnd *opnd, BasicBlock if (!isObjTypeSpecialized || opnd->ChangesObjectLayout()) { this->KillObjectHeaderInlinedTypeSyms(block, isObjTypeSpecialized, opndId); + this->KillAuxSlotPtrSyms(opnd, block, isObjTypeSpecialized); } else if (!isObjTypeChecked && this->HasLiveObjectHeaderInlinedTypeSym(block, true, opndId)) { @@ -939,6 +948,37 @@ GlobOpt::FinishOptPropOp(IR::Instr *instr, IR::PropertySymOpnd *opnd, BasicBlock return isObjTypeSpecialized; } +StackSym * +GlobOpt::EnsureAuxSlotPtrSym(IR::PropertySymOpnd *opnd) +{ + StackSym *auxSlotPtrSym = opnd->EnsureAuxSlotPtrSym(this->func); + this->auxSlotPtrSyms->Set(auxSlotPtrSym->m_id); + return auxSlotPtrSym; +} + +void +GlobOpt::KillAuxSlotPtrSyms(IR::PropertySymOpnd *opnd, BasicBlock *block, bool isObjTypeSpecialized) +{ + StackSym *auxSlotPtrSym = nullptr; + if (isObjTypeSpecialized) + { + // Kill all aux slot syms other than this one + auxSlotPtrSym = opnd->GetAuxSlotPtrSym(); + if (auxSlotPtrSym) + { + Assert(this->auxSlotPtrSyms && this->auxSlotPtrSyms->Test(auxSlotPtrSym->m_id)); + this->auxSlotPtrSyms->Clear(auxSlotPtrSym->m_id); + } + } + + block->globOptData.liveFields->Minus(this->auxSlotPtrSyms); + + if (auxSlotPtrSym) + { + this->auxSlotPtrSyms->Set(auxSlotPtrSym->m_id); + } +} + void GlobOpt::KillObjectHeaderInlinedTypeSyms(BasicBlock *block, bool isObjTypeSpecialized, SymID opndId) { @@ -1347,12 +1387,6 @@ GlobOpt::ProcessPropOpInTypeCheckSeq(IR::Instr* instr, IR::PropertySymOpnd *opnd { // Indicates we can optimize, as all upstream types are equivalent here. - opnd->SetSlotIndex(slotIndex); - opnd->SetUsesAuxSlot(auxSlot); - - opnd->GetObjTypeSpecInfo()->SetSlotIndex(slotIndex); - opnd->GetObjTypeSpecInfo()->SetUsesAuxSlot(auxSlot); - isSpecialized = true; if (isTypeCheckedOut) { @@ -1361,10 +1395,17 @@ GlobOpt::ProcessPropOpInTypeCheckSeq(IR::Instr* instr, IR::PropertySymOpnd *opnd if (consumeType) { opnd->SetTypeChecked(true); - } - if (checkedTypeSetIndex != (uint16)-1) - { - opnd->SetCheckedTypeSetIndex(checkedTypeSetIndex); + + opnd->SetSlotIndex(slotIndex); + opnd->SetUsesAuxSlot(auxSlot); + + opnd->GetObjTypeSpecInfo()->SetSlotIndex(slotIndex); + opnd->GetObjTypeSpecInfo()->SetUsesAuxSlot(auxSlot); + + if (checkedTypeSetIndex != (uint16)-1) + { + opnd->SetCheckedTypeSetIndex(checkedTypeSetIndex); + } } } } @@ -1407,8 +1448,8 @@ GlobOpt::ProcessPropOpInTypeCheckSeq(IR::Instr* instr, IR::PropertySymOpnd *opnd } } else if (valueInfo->GetJsTypeSet() && - (opnd->IsMono() ? - valueInfo->GetJsTypeSet()->Contains(opnd->GetFirstEquivalentType()) : + (opnd->IsMono() ? + valueInfo->GetJsTypeSet()->Contains(opnd->GetFirstEquivalentType()) : IsSubsetOf(opndTypeSet, valueInfo->GetJsTypeSet()) ) ) @@ -1541,6 +1582,43 @@ GlobOpt::ProcessPropOpInTypeCheckSeq(IR::Instr* instr, IR::PropertySymOpnd *opnd *changesTypeValueOut = isSpecialized && (emitsTypeCheck || addsProperty); } + if (makeChanges) + { + // Track liveness of aux slot ptr syms. + if (!PHASE_OFF(Js::ReuseAuxSlotPtrPhase, this->func) && isSpecialized) + { + if (opnd->UsesAuxSlot() && !opnd->IsLoadedFromProto()) + { + // Optimized ld/st that loads/uses an aux slot ptr. + // Aux slot sym is live forward. + StackSym *auxSlotPtrSym = this->EnsureAuxSlotPtrSym(opnd); + if (!this->IsLoopPrePass() && opnd->IsTypeChecked()) + { + if (block->globOptData.liveFields->TestAndSet(auxSlotPtrSym->m_id)) + { + // Aux slot sym is available here. Tell lowerer to use it. + opnd->SetAuxSlotPtrSymAvailable(true); + } + } + else + { + block->globOptData.liveFields->Set(auxSlotPtrSym->m_id); + } + } + else if (!opnd->IsTypeChecked()) + { + // Type sym is not available here (i.e., object shape is not known) and we're not loading the aux slots. + // May get here with aux slot sym still in live set if type sym is not in the value table. + // Clear the aux slot sym out of the live set. + StackSym *auxSlotPtrSym = opnd->GetAuxSlotPtrSym(); + if (auxSlotPtrSym) + { + block->globOptData.liveFields->Clear(auxSlotPtrSym->m_id); + } + } + } + } + return isSpecialized; } @@ -1559,7 +1637,7 @@ GlobOpt::OptNewScObject(IR::Instr** instrPtr, Value* srcVal) instr->m_func->GetConstructorCache(static_cast(instr->AsProfiledInstr()->u.profileId)) : nullptr; // TODO: OOP JIT, enable assert - //Assert(ctorCache == nullptr || srcVal->GetValueInfo()->IsVarConstant() && Js::JavascriptFunction::Is(srcVal->GetValueInfo()->AsVarConstant()->VarValue())); + //Assert(ctorCache == nullptr || srcVal->GetValueInfo()->IsVarConstant() && Js::VarIs(srcVal->GetValueInfo()->AsVarConstant()->VarValue())); Assert(ctorCache == nullptr || !ctorCache->IsTypeFinal() || ctorCache->CtorHasNoExplicitReturnValue()); if (ctorCache != nullptr && !ctorCache->SkipNewScObject() && (isCtorInlined || ctorCache->IsTypeFinal())) @@ -1854,6 +1932,11 @@ GlobOpt::KillObjectType(StackSym* objectSym, BVSparse* liveFi } liveFields->Clear(objectSym->GetObjectTypeSym()->m_id); + StackSym *auxSlotPtrSym = objectSym->GetAuxSlotPtrSym(); + if (auxSlotPtrSym) + { + liveFields->Clear(auxSlotPtrSym->m_id); + } } void @@ -1862,6 +1945,7 @@ GlobOpt::KillAllObjectTypes(BVSparse* liveFields) if (this->objectTypeSyms && liveFields) { liveFields->Minus(this->objectTypeSyms); + liveFields->Minus(this->auxSlotPtrSyms); } } @@ -1931,6 +2015,8 @@ GlobOpt::CopyPropPropertySymObj(IR::SymOpnd *symOpnd, IR::Instr *instr) bool shouldOptimize = CompareCurrentTypesWithExpectedTypes(newValueInfo, propertySymOpnd); if (!shouldOptimize) { + // We would like just to force a new type check here and keep optimizing, but downstream + // objtypespecfldinfo may have slot indices based on the old type. propertySymOpnd->SetTypeCheckSeqCandidate(false); } } @@ -2047,6 +2133,12 @@ GlobOpt::UpdateObjPtrValueType(IR::Opnd * opnd, IR::Instr * instr) AnalysisAssert(type != nullptr); Js::TypeId typeId = type->GetTypeId(); + if (Js::TypedArrayBase::Is(typeId)) + { + // Type ID does not allow us to distinguish between virtual and non-virtual typed array. + return; + } + // Passing false for useVirtual as we would never have a virtual typed array hitting this code path ValueType newValueType = ValueType::FromTypeId(typeId, false); diff --git a/lib/Backend/IR.cpp b/lib/Backend/IR.cpp index 1e3a4c1074b..71f47941671 100644 --- a/lib/Backend/IR.cpp +++ b/lib/Backend/IR.cpp @@ -68,7 +68,7 @@ Instr::IsPlainInstr() const } bool -Instr::DoStackArgsOpt(Func *topFunc) const +Instr::DoStackArgsOpt() const { return this->usesStackArgumentsObject && m_func->IsStackArgsEnabled(); } @@ -1029,6 +1029,91 @@ bool Instr::CanAggregateByteCodeUsesAcrossInstr(Instr * instr) (instr->GetByteCodeOffset() == this->GetByteCodeOffset())); } +bool IR::Instr::IsStFldVariant() const +{ + return this->m_opcode == Js::OpCode::StFld || + this->m_opcode == Js::OpCode::StFldStrict || + this->m_opcode == Js::OpCode::StLocalFld || + this->m_opcode == Js::OpCode::StRootFld || + this->m_opcode == Js::OpCode::StRootFldStrict || + this->m_opcode == Js::OpCode::StSuperFld || + this->m_opcode == Js::OpCode::StSuperFldStrict; +} + +bool IR::Instr::IsStElemVariant() const +{ + return this->m_opcode == Js::OpCode::StElemI_A || + this->m_opcode == Js::OpCode::StElemI_A_Strict || + this->m_opcode == Js::OpCode::StElemC; +} + +bool IR::Instr::DontHoistBailOnNoProfileAboveInGeneratorFunction() const +{ + return this->m_opcode == Js::OpCode::GeneratorResumeYield || + this->m_opcode == Js::OpCode::GeneratorCreateInterpreterStackFrame; +} + +bool IR::Instr::CanChangeFieldValueWithoutImplicitCall() const +{ + // TODO: Why is InitFld necessary? + return this->IsStFldVariant() || this->IsStElemVariant(); +} + +// If LazyBailOut is the only BailOutKind on the instruction, the BailOutInfo is cleared. +// Otherwise, we remove the LazyBailOut kind from the instruction and still keep the BailOutInfo. +void IR::Instr::ClearLazyBailOut() +{ + if (!this->HasBailOutInfo()) + { + return; + } + + if (this->OnlyHasLazyBailOut()) + { + this->ClearBailOutInfo(); + } + else + { + this->GetBailOutInfo()->RestoreUseOfDst(); + this->SetBailOutKind(BailOutInfo::WithoutLazyBailOut(this->GetBailOutKind())); + } + + Assert(!this->HasLazyBailOut()); +} + +int IR::Instr::GetOpndCount() const +{ + return (this->m_src1 ? 1 : 0) + (this->m_src2 ? 1 : 0) + (this->m_dst ? 1 : 0); +} + +bool IR::Instr::AreAllOpndsTypeSpecialized() const +{ + bool src1TypeSpec = !this->m_src1 || (this->m_src1->GetStackSym() && this->m_src1->GetStackSym()->IsTypeSpec()); + bool src2TypeSpec = !this->m_src2 || (this->m_src2->GetStackSym() && this->m_src2->GetStackSym()->IsTypeSpec()); + bool dstTypeSpec = !this->m_dst || (this->m_dst->GetStackSym() && this->m_dst->GetStackSym()->IsTypeSpec()); + return src1TypeSpec && src2TypeSpec && dstTypeSpec && this->GetOpndCount() > 0; +} + +bool IR::Instr::OnlyHasLazyBailOut() const +{ + return this->HasBailOutInfo() && BailOutInfo::OnlyHasLazyBailOut(this->GetBailOutKind()); +} + +bool IR::Instr::HasLazyBailOut() const +{ + return this->HasBailOutInfo() && BailOutInfo::HasLazyBailOut(this->GetBailOutKind()); +} + +bool IR::Instr::HasPreOpBailOut() const +{ + return this->HasBailOutInfo() && this->GetBailOutInfo()->bailOutOffset == this->GetByteCodeOffset(); +} + +bool IR::Instr::HasPostOpBailOut() const +{ + return this->HasBailOutInfo() && this->GetBailOutInfo()->bailOutOffset > this->GetByteCodeOffset(); +} + BailOutInfo * Instr::GetBailOutInfo() const { @@ -1203,7 +1288,7 @@ Instr::ReplaceBailOutInfo(BailOutInfo *newBailOutInfo) __assume(UNREACHED); } - if (oldBailOutInfo->bailOutInstr == this) + if (oldBailOutInfo->bailOutInstr == this && !oldBailOutInfo->sharedBailOutKind) { Assert(!oldBailOutInfo->wasCloned && !oldBailOutInfo->wasCopied); JitArenaAllocator * alloc = this->m_func->m_alloc; @@ -1568,9 +1653,6 @@ BranchInstr::New(Js::OpCode opcode, LabelInstr * branchTarget, Func *func) branchInstr->m_src1 = nullptr; branchInstr->m_src2 = nullptr; branchInstr->m_byteCodeReg = Js::Constants::NoRegister; -#if DBG - branchInstr->m_isHelperToNonHelperBranch = false; -#endif return branchInstr; } @@ -1823,6 +1905,14 @@ BranchInstr::Invert() this->m_opcode = Js::OpCode::BrOnNoProperty; break; + case Js::OpCode::BrOnHasLocalProperty: + this->m_opcode = Js::OpCode::BrOnNoLocalProperty; + break; + + case Js::OpCode::BrOnNoLocalProperty: + this->m_opcode = Js::OpCode::BrOnHasLocalProperty; + break; + case Js::OpCode::BrOnNoProperty: this->m_opcode = Js::OpCode::BrOnHasProperty; break; @@ -2017,6 +2107,22 @@ Instr::New(Js::OpCode opcode, Func *func) return instr; } +///---------------------------------------------------------------------------- +/// +/// Instr::New +/// +/// Create an Instr with a byte code offset. +/// +///---------------------------------------------------------------------------- + +Instr * +Instr::New(Js::OpCode opcode, Func *func, IR::Instr * bytecodeOffsetInstr) +{ + Instr * instr = Instr::New(opcode, func); + instr->SetByteCodeOffset(bytecodeOffsetInstr); + return instr; +} + ///---------------------------------------------------------------------------- /// /// Instr::New @@ -2664,6 +2770,21 @@ Instr::GetNextRealInstr() const return instr; } +#if DBG +IR::LabelInstr * +Instr::GetNextNonEmptyLabel() const +{ + IR::Instr *instr = const_cast(this); + + while (instr != nullptr && (!instr->IsLabelInstr() || instr->m_next->IsLabelInstr())) + { + instr = instr->m_next; + } + + return instr->AsLabelInstr(); +} +#endif + ///---------------------------------------------------------------------------- /// /// Instr::GetNextRealInstrOrLabel @@ -2842,7 +2963,7 @@ Instr::IsByteCodeUsesInstrFor(IR::Instr * instr) const IR::LabelInstr * Instr::GetOrCreateContinueLabel(const bool isHelper) { - if(m_next && m_next->IsLabelInstr() && m_next->AsLabelInstr()->isOpHelper == isHelper) + if (m_next && m_next->IsLabelInstr() && m_next->AsLabelInstr()->isOpHelper == isHelper) { return m_next->AsLabelInstr(); } @@ -3067,6 +3188,8 @@ Instr::TransferTo(Instr * instr) instr->dstIsAlwaysConvertedToInt32 = this->dstIsAlwaysConvertedToInt32; instr->dstIsAlwaysConvertedToNumber = this->dstIsAlwaysConvertedToNumber; instr->dataWidth = this->dataWidth; + instr->isCtorCall = this->isCtorCall; + instr->forcePreOpBailOutIfNeeded = this->forcePreOpBailOutIfNeeded; IR::Opnd * dst = this->m_dst; if (dst) @@ -3089,6 +3212,16 @@ Instr::TransferTo(Instr * instr) this->m_src2 = nullptr; } +// Convert an instruction to a bailout instruction and perform a shallow copy of the input instruction's BailOutInfo. +// Can optionally change the BailOutKind, otherwise the input instruction's BailOutKind will be used instead. +IR::Instr * +Instr::ConvertToBailOutInstrWithBailOutInfoCopy(BailOutInfo *bailOutInfo, IR::BailOutKind bailOutKind) +{ + BailOutInfo *bailOutInfoCopy = JitAnew(this->m_func->m_alloc, BailOutInfo, bailOutInfo->bailOutOffset, this->m_func); + bailOutInfo->PartialDeepCopyTo(bailOutInfoCopy); + return this->ConvertToBailOutInstr(bailOutInfoCopy, bailOutKind); +} + IR::Instr * Instr::ConvertToBailOutInstr(IR::Instr * bailOutTarget, IR::BailOutKind kind, uint32 bailOutOffset) { @@ -3350,6 +3483,11 @@ IR::Instr* Instr::GetBytecodeArgOutCapture() this->m_opcode == Js::OpCode::ArgOut_A_InlineBuiltIn); Assert(this->m_dst->GetStackSym()->m_isArgCaptured); IR::Instr* instr = this->GetSrc1()->GetStackSym()->m_instrDef; + while (instr->m_opcode != Js::OpCode::BytecodeArgOutCapture) + { + Assert(instr->GetSrc1() && instr->GetSrc1()->GetStackSym() && instr->GetSrc1()->GetStackSym()->IsSingleDef()); + instr = instr->GetSrc1()->GetStackSym()->m_instrDef; + } Assert(instr->m_opcode == Js::OpCode::BytecodeArgOutCapture); return instr; } @@ -4116,6 +4254,14 @@ bool Instr::UnaryCalculator(IntConstType src1Const, IntConstType *pResult, IRTyp return true; } +GeneratorBailInInstr* +GeneratorBailInInstr::New(IR::Instr* yieldInstr, Func* func) +{ + GeneratorBailInInstr* labelInstr = JitAnew(func->m_alloc, IR::GeneratorBailInInstr, func->m_alloc, yieldInstr); + labelInstr->Init(Js::OpCode::GeneratorBailInLabel, InstrKindLabel, func, false /* isOpHelper */); + return labelInstr; +} + #if ENABLE_DEBUG_CONFIG_OPTIONS ///---------------------------------------------------------------------------- /// diff --git a/lib/Backend/IR.h b/lib/Backend/IR.h index 90e4a25f60f..0867f289acb 100644 --- a/lib/Backend/IR.h +++ b/lib/Backend/IR.h @@ -15,6 +15,9 @@ class IRBuilderAsmJs; class FlowGraph; class GlobOpt; class BailOutInfo; +class GeneratorBailInInfo; +class SCCLiveness; + struct LazyBailOutRecord; typedef JsUtil::KeyValuePair ConstantStackSymValue; @@ -50,6 +53,30 @@ struct CapturedValues Assert(refCount > 0); refCount++; } + + void CopyTo(JitArenaAllocator *allocator, CapturedValues *other) const + { + Assert(other != nullptr); + this->constantValues.CopyTo(allocator, other->constantValues); + this->copyPropSyms.CopyTo(allocator, other->copyPropSyms); + + if (other->argObjSyms != nullptr) + { + other->argObjSyms->ClearAll(); + JitAdelete(allocator, other->argObjSyms); + } + + if (this->argObjSyms != nullptr) + { + other->argObjSyms = this->argObjSyms->CopyNew(allocator); + } + else + { + other->argObjSyms = nullptr; + } + + // Ignore refCount because other objects might still reference it + } }; class LoweredBasicBlock; @@ -91,6 +118,7 @@ class ProfiledLabelInstr; class MultiBranchInstr; class PragmaInstr; class ByteCodeUsesInstr; +class GeneratorBailInInstr; class Opnd; class RegOpnd; @@ -128,8 +156,8 @@ const int32 InvalidInstrLayout = -1; /// ExitInstr /// PragmaInstr /// BailoutInstr -/// ByteCoteUsesInstr -/// +/// ByteCodeUsesInstr +/// GeneratorBailInInstr ///--------------------------------------------------------------------------- class Instr @@ -172,11 +200,13 @@ class Instr isSafeToSpeculate(false) #if DBG , highlight(0) + , m_noLazyHelperAssert(false) #endif { } public: static Instr * New(Js::OpCode opcode, Func *func); + static Instr * New(Js::OpCode opcode, Func *func, IR::Instr * bytecodeOffsetInstr); static Instr * New(Js::OpCode opcode, Opnd *dstOpnd, Func *func); static Instr * New(Js::OpCode opcode, Opnd *dstOpnd, Opnd *src1Opnd, Func *func); static Instr * New(Js::OpCode opcode, Opnd *dstOpnd, Opnd *src1Opnd, Opnd *src2Opnd, Func *func); @@ -192,6 +222,9 @@ class Instr BranchInstr * AsBranchInstr(); bool IsLabelInstr() const; LabelInstr * AsLabelInstr(); + bool IsGeneratorBailInInstr() const; + GeneratorBailInInstr * AsGeneratorBailInInstr(); + bool IsJitProfilingInstr() const; JitProfilingInstr * AsJitProfilingInstr(); bool IsProfiledInstr() const; @@ -214,7 +247,7 @@ class Instr bool StartsBasicBlock() const; bool EndsBasicBlock() const; bool HasFallThrough() const; - bool DoStackArgsOpt(Func *topFunc) const; + bool DoStackArgsOpt() const; bool HasAnyLoadHeapArgsOpCode(); bool IsEqual(IR::Instr *instr) const; @@ -283,8 +316,12 @@ class Instr IR::Instr * Copy(bool copyDst = true); IR::Instr * CopyWithoutDst(); IR::Instr * Clone(); - IR::Instr * ConvertToBailOutInstr(IR::Instr * bailOutTarget, BailOutKind kind, uint32 bailOutOffset = Js::Constants::NoByteCodeOffset); - IR::Instr * ConvertToBailOutInstr(BailOutInfo * bailOutInfo, BailOutKind kind, bool useAuxBailout = false); + IR::Instr * ConvertToBailOutInstr(IR::Instr *bailOutTarget, BailOutKind kind, uint32 bailOutOffset = Js::Constants::NoByteCodeOffset); + IR::Instr * ConvertToBailOutInstr(BailOutInfo *bailOutInfo, BailOutKind kind, bool useAuxBailout = false); + IR::Instr * ConvertToBailOutInstrWithBailOutInfoCopy(BailOutInfo *bailOutInfo, IR::BailOutKind bailOutKind); +#if DBG + IR::LabelInstr *GetNextNonEmptyLabel() const; +#endif IR::Instr * GetNextRealInstr() const; IR::Instr * GetNextRealInstrOrLabel() const; IR::Instr * GetNextBranchOrLabel() const; @@ -304,6 +341,22 @@ class Instr static Instr* FindSingleDefInstr(Js::OpCode opCode, Opnd* src); bool CanAggregateByteCodeUsesAcrossInstr(IR::Instr * instr); + bool DontHoistBailOnNoProfileAboveInGeneratorFunction() const; + + // LazyBailOut + bool AreAllOpndsTypeSpecialized() const; + bool IsStFldVariant() const; + bool IsStElemVariant() const; + bool CanChangeFieldValueWithoutImplicitCall() const; + void ClearLazyBailOut(); + bool OnlyHasLazyBailOut() const; + bool HasLazyBailOut() const; + bool HasPreOpBailOut() const; + bool HasPostOpBailOut() const; +#if DBG + bool m_noLazyHelperAssert; +#endif + BranchInstr * ChangeCmCCToBranchInstr(LabelInstr *targetInstr); static void MoveRangeAfter(Instr * instrStart, Instr * instrLast, Instr * instrAfter); static IR::Instr * CloneRange(Instr * instrStart, Instr * instrLast, Instr * instrInsert, Lowerer *lowerer, JitArenaAllocator *alloc, bool (*fMapTest)(IR::Instr*), bool clonedInstrGetOrigArgSlot); @@ -475,11 +528,13 @@ class Instr void MoveArgs(bool generateByteCodeCapture = false); void Move(IR::Instr* insertInstr); private: + int GetOpndCount() const; void ClearNumber() { this->m_number = 0; } void SetNumber(uint32 number); friend class ::Func; friend class ::Lowerer; friend class IR::ByteCodeUsesInstr; + friend class ::SCCLiveness; void SetByteCodeOffset(uint32 number); friend class ::IRBuilder; @@ -750,6 +805,7 @@ class LabelInstr : public Instr inline void SetRegion(Region *); inline Region * GetRegion(void) const; inline BOOL IsUnreferenced(void) const; + inline BOOL IsGeneratorEpilogueLabel(void) const; LabelInstr * CloneLabel(BOOL fCreate); @@ -820,6 +876,7 @@ class BranchInstr : public Instr { #if DBG m_isMultiBranch = false; + m_isHelperToNonHelperBranch = false; m_leaveConvToBr = false; #endif } @@ -1057,6 +1114,25 @@ class PragmaInstr : public Instr PragmaInstr * CopyPragma(); }; +class GeneratorBailInInstr : public LabelInstr +{ +private: + GeneratorBailInInstr(JitArenaAllocator* allocator, IR::Instr* yieldInstr) : + LabelInstr(allocator), + yieldInstr(yieldInstr), + upwardExposedUses(allocator) + { + Assert(yieldInstr != nullptr && yieldInstr->m_opcode == Js::OpCode::Yield); + } + +public: + IR::Instr* yieldInstr; + CapturedValues capturedValues; + BVSparse upwardExposedUses; + + static GeneratorBailInInstr* New(IR::Instr* yieldInstr, Func* func); +}; + template class BailOutInstrTemplate : public InstrType { diff --git a/lib/Backend/IR.inl b/lib/Backend/IR.inl index e3d6466ce11..a5f6d113f8e 100644 --- a/lib/Backend/IR.inl +++ b/lib/Backend/IR.inl @@ -124,6 +124,34 @@ Instr::AsLabelInstr() return reinterpret_cast(this); } +///---------------------------------------------------------------------------- +/// +/// Instr::IsGeneratorBailInInstr +/// +///---------------------------------------------------------------------------- + +__forceinline bool +Instr::IsGeneratorBailInInstr() const +{ + return this->m_opcode == Js::OpCode::GeneratorBailInLabel; +} + +///---------------------------------------------------------------------------- +/// +/// Instr::AsGeneratorBailInInstr +/// +/// Return this as a GeneratorBailInInstr * +/// +///---------------------------------------------------------------------------- + +inline GeneratorBailInInstr* +Instr::AsGeneratorBailInInstr() +{ + AssertMsg(this->IsGeneratorBailInInstr(), "Bad call to AsGeneratorBailInInstr()"); + + return reinterpret_cast(this); +} + ///---------------------------------------------------------------------------- /// /// Instr::AsMultiBrInstr @@ -256,6 +284,7 @@ Instr::EndsBasicBlock() const return this->IsBranchInstr() || this->IsExitInstr() || + this->m_opcode == Js::OpCode::Yield || this->m_opcode == Js::OpCode::Ret || this->m_opcode == Js::OpCode::Throw || this->m_opcode == Js::OpCode::RuntimeTypeError || @@ -728,6 +757,13 @@ LabelInstr::IsUnreferenced(void) const return labelRefs.Empty() && !m_hasNonBranchRef; } +inline BOOL +LabelInstr::IsGeneratorEpilogueLabel(void) const +{ + return this->m_opcode == Js::OpCode::GeneratorEpilogueNoFrameNullOutLabel || + this->m_opcode == Js::OpCode::GeneratorEpilogueFrameNullOutLabel; +} + inline void LabelInstr::SetRegion(Region * region) { diff --git a/lib/Backend/IRBuilder.cpp b/lib/Backend/IRBuilder.cpp index 75ee5c7f245..05c3ff31d33 100644 --- a/lib/Backend/IRBuilder.cpp +++ b/lib/Backend/IRBuilder.cpp @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #include "Backend.h" @@ -49,7 +50,7 @@ IRBuilder::AddStatementBoundary(uint statementIndex, uint offset) } } } - else if (Js::Configuration::Global.flags.IsEnabled(Js::BailOutAtEveryLineFlag)) + else if (Js::Configuration::Global.flags.IsEnabled(Js::BailOutAtEveryLineFlag)) { this->InjectBailOut(offset); } @@ -117,6 +118,11 @@ IRBuilder::DoBailOnNoProfile() return false; } + if (m_func->GetTopFunc()->GetJITFunctionBody()->IsCoroutine() && !m_func->IsLoopBody()) + { + return false; + } + return true; } @@ -314,56 +320,6 @@ IRBuilder::AddEnvOpndForInnerFrameDisplay(IR::Instr *instr, uint offset) } } -bool -IRBuilder::DoSlotArrayCheck(IR::SymOpnd *fieldOpnd, bool doDynamicCheck) -{ - if (PHASE_OFF(Js::ClosureRangeCheckPhase, m_func)) - { - return true; - } - - PropertySym *propertySym = fieldOpnd->m_sym->AsPropertySym(); - IR::Instr *instrDef = propertySym->m_stackSym->m_instrDef; - IR::Opnd *allocOpnd = nullptr; - - if (instrDef == nullptr) - { - if (doDynamicCheck) - { - return false; - } - Js::Throw::FatalInternalError(); - } - switch(instrDef->m_opcode) - { - case Js::OpCode::NewScopeSlots: - case Js::OpCode::NewStackScopeSlots: - case Js::OpCode::NewScopeSlotsWithoutPropIds: - allocOpnd = instrDef->GetSrc1(); - break; - - case Js::OpCode::LdSlot: - case Js::OpCode::LdSlotArr: - if (doDynamicCheck) - { - return false; - } - // fall through - default: - Js::Throw::FatalInternalError(); - } - - uint32 allocCount = allocOpnd->AsIntConstOpnd()->AsUint32(); - uint32 slotId = (uint32)propertySym->m_propertyId; - - if (slotId >= allocCount) - { - Js::Throw::FatalInternalError(); - } - - return true; -} - ///---------------------------------------------------------------------------- /// /// IRBuilder::Build @@ -403,12 +359,10 @@ IRBuilder::Build() if (tempCount > 0) { this->tempMap = AnewArrayZ(m_tempAlloc, SymID, tempCount); - this->fbvTempUsed = BVFixed::New(tempCount, m_tempAlloc); } else { this->tempMap = nullptr; - this->fbvTempUsed = nullptr; } m_func->m_headInstr = IR::EntryInstr::New(Js::OpCode::FunctionEntry, m_func); @@ -472,7 +426,6 @@ IRBuilder::Build() this->LoadNativeCodeData(); this->BuildConstantLoads(); - this->BuildGeneratorPreamble(); if (!this->IsLoopBody() && m_func->GetJITFunctionBody()->HasImplicitArgIns()) { @@ -484,9 +437,12 @@ IRBuilder::Build() this->BuildArgInRest(); } - if (m_func->IsJitInDebugMode()) + // This is first bailout in the function, the locals at stack have not initialized to undefined, so do not restore them. + // Note that for generators, we insert the bailout after the jump table to allow + // the generator's execution to proceed before bailing out. Otherwise, we would always + // bail to the beginning of the function in the interpreter, creating an infinite loop. + if (m_func->IsJitInDebugMode() && (!this->m_func->GetJITFunctionBody()->IsCoroutine() || this->IsLoopBody())) { - // This is first bailout in the function, the locals at stack have not initialized to undefined, so do not restore them. this->InsertBailOutForDebugger(m_functionStartOffset, IR::BailOutForceByFlag | IR::BailOutBreakPointInFunction | IR::BailOutStep, nullptr); } @@ -532,6 +488,34 @@ IRBuilder::Build() this->AddInstr(instr, offset); } + // The point at which we insert the generator resume jump table is important. + // We want to insert it right *after* the environment and constants have + // been loaded and *before* we create any other important objects + // (e.g: FrameDisplay, LocalClosure) which will be passed on to the interpreter + // frame when we bail out. Those values, if used when we resume, will be restored + // by the bail-in code, therefore we don't want to unnecessarily create those new + // objects every time we "resume" a generator + // + // Note: We need to make sure that all the values below are allocated on the heap. + // so that they don't go away once this jit'd frame is popped off. + +#ifdef BAILOUT_INJECTION + lastInstr = this->m_generatorJumpTable.BuildJumpTable(); +#else + this->m_generatorJumpTable.BuildJumpTable(); +#endif + + // When debugging generators, insert bail-out after the jump table so that we can + // get to the right point before going back to the interpreter. + // This bailout is equivalent to the one inserted above for non-generator functions. + // Additionally, we also need to insert bailouts on each resume point and right + // after the bail-in code since this bailout is only for the very first time + // we are in the generator. + if (m_func->IsJitInDebugMode() && this->m_func->GetJITFunctionBody()->IsCoroutine()) + { + this->InsertBailOutForDebugger(m_functionStartOffset, IR::BailOutForceByFlag | IR::BailOutBreakPointInFunction | IR::BailOutStep, nullptr); + } + Js::RegSlot funcExprScopeReg = m_func->GetJITFunctionBody()->GetFuncExprScopeReg(); IR::RegOpnd *frameDisplayOpnd = nullptr; if (funcExprScopeReg != Js::Constants::NoRegister) @@ -906,40 +890,6 @@ IRBuilder::Build() void IRBuilder::EmitClosureRangeChecks() { - // Emit closure range checks - if (m_func->slotArrayCheckTable) - { - // Local slot array checks, should only be necessary in jitted loop bodies. - FOREACH_HASHTABLE_ENTRY(uint32, bucket, m_func->slotArrayCheckTable) - { - uint32 slotId = bucket.element; - Assert(slotId != (uint32)-1 && slotId >= Js::ScopeSlots::FirstSlotIndex); - - if (slotId > Js::ScopeSlots::FirstSlotIndex) - { - // Emit a SlotArrayCheck instruction, chained to the instruction (LdSlot) that defines the pointer. - StackSym *stackSym = m_func->m_symTable->FindStackSym(bucket.value); - Assert(stackSym && stackSym->m_instrDef); - - IR::Instr *instrDef = stackSym->m_instrDef; - IR::Instr *insertInstr = instrDef->m_next; - IR::RegOpnd *dstOpnd = instrDef->UnlinkDst()->AsRegOpnd(); - IR::Instr *instr = IR::Instr::New(Js::OpCode::SlotArrayCheck, dstOpnd, m_func); - - dstOpnd = IR::RegOpnd::New(TyVar, m_func); - instrDef->SetDst(dstOpnd); - instr->SetSrc1(dstOpnd); - - // Attach the slot ID to the check instruction. - IR::IntConstOpnd *slotIdOpnd = IR::IntConstOpnd::New(bucket.element, TyUint32, m_func); - instr->SetSrc2(slotIdOpnd); - - insertInstr->InsertBefore(instr); - } - } - NEXT_HASHTABLE_ENTRY; - } - if (m_func->frameDisplayCheckTable) { // Frame display checks. Again, chain to the instruction (LdEnv/LdSlot). @@ -1278,7 +1228,6 @@ IRBuilder::BuildSrcStackSymID(Js::RegSlot regSlot) this->SetMappedTemp(regSlot, symID); this->EnsureLoopBodyLoadSlot(symID); } - this->SetTempUsed(regSlot, TRUE); } else { @@ -1312,17 +1261,33 @@ IRBuilder::EnsureLoopBodyForInEnumeratorArrayOpnd() } IR::Opnd * -IRBuilder::BuildForInEnumeratorOpnd(uint forInLoopLevel) +IRBuilder::BuildForInEnumeratorOpnd(uint forInLoopLevel, uint32 offset) { Assert(forInLoopLevel < this->m_func->GetJITFunctionBody()->GetForInLoopDepth()); - if (!this->IsLoopBody()) + if (this->IsLoopBody()) + { + return IR::IndirOpnd::New( + this->EnsureLoopBodyForInEnumeratorArrayOpnd(), + forInLoopLevel * sizeof(Js::ForInObjectEnumerator), + TyMachPtr, + this->m_func + ); + } + else if (this->m_func->GetJITFunctionBody()->IsCoroutine()) { - StackSym *stackSym = StackSym::New(TyMisc, this->m_func); + return IR::IndirOpnd::New( + this->m_generatorJumpTable.BuildForInEnumeratorArrayOpnd(offset), + forInLoopLevel * sizeof(Js::ForInObjectEnumerator), + TyMachPtr, + this->m_func + ); + } + else + { + StackSym* stackSym = StackSym::New(TyMisc, this->m_func); stackSym->m_offset = forInLoopLevel; return IR::SymOpnd::New(stackSym, TyMachPtr, this->m_func); } - return IR::IndirOpnd::New( - EnsureLoopBodyForInEnumeratorArrayOpnd(), forInLoopLevel * sizeof(Js::ForInObjectEnumerator), TyMachPtr, this->m_func); } ///---------------------------------------------------------------------------- @@ -1353,7 +1318,7 @@ IRBuilder::BuildSrcOpnd(Js::RegSlot srcRegSlot, IRType type) ///---------------------------------------------------------------------------- IR::RegOpnd * -IRBuilder::BuildDstOpnd(Js::RegSlot dstRegSlot, IRType type, bool isCatchObjectSym) +IRBuilder::BuildDstOpnd(Js::RegSlot dstRegSlot, IRType type, bool isCatchObjectSym, bool reuseTemp) { StackSym * symDst; SymID symID; @@ -1374,24 +1339,20 @@ IRBuilder::BuildDstOpnd(Js::RegSlot dstRegSlot, IRType type, bool isCatchObjectS // This is a def of a temp. Create a new sym ID for it if it's been used since its last def. // !!!NOTE: always process an instruction's temp uses before its temp defs!!! - if (this->GetTempUsed(dstRegSlot)) + + symID = this->GetMappedTemp(dstRegSlot); + if (symID == 0) { - symID = m_func->m_symTable->NewID(); - this->SetTempUsed(dstRegSlot, FALSE); + // First time we've seen the temp. Just use the number that the front end gave it. + symID = static_cast(dstRegSlot); this->SetMappedTemp(dstRegSlot, symID); } - else + else if (!reuseTemp) { - symID = this->GetMappedTemp(dstRegSlot); - // The temp hasn't been used since its last def. There are 2 possibilities: - if (symID == 0) - { - // First time we've seen the temp. Just use the number that the front end gave it. - symID = static_cast(dstRegSlot); - this->SetMappedTemp(dstRegSlot, symID); - } + // Byte code has not told us to reuse the mapped temp at this def, so don't. Make a new one. + symID = m_func->m_symTable->NewID(); + this->SetMappedTemp(dstRegSlot, symID); } - } else { @@ -1433,71 +1394,6 @@ IRBuilder::BuildImplicitArgIns() } } -#if DBG_DUMP || defined(ENABLE_IR_VIEWER) -#define POINTER_OFFSET(opnd, c, field) \ - BuildIndirOpnd((opnd), c::Get##field##Offset(), _u(#c) _u(".") _u(#field)) -#else -#define POINTER_OFFSET(opnd, c, field) \ - BuildIndirOpnd((opnd), c::Get##field##Offset()) -#endif - -void -IRBuilder::BuildGeneratorPreamble() -{ - if (!this->m_func->GetJITFunctionBody()->IsCoroutine()) - { - return; - } - - // Build code to check if the generator already has state and if it does then jump to the corresponding resume point. - // Otherwise jump to the start of the function. The generator object is the first argument by convention established - // in JavascriptGenerator::EntryNext/EntryReturn/EntryThrow. - // - // s1 = Ld_A prm1 - // s2 = Ld_A s1[offset of JavascriptGenerator::frame] - // BrAddr_A s2 nullptr $startOfFunc - // s3 = Ld_A s2[offset of InterpreterStackFrame::m_reader.m_currentLocation] - // s4 = Ld_A s2[offset of InterpreterStackFrame::m_reader.m_startLocation] - // s5 = Sub_I4 s3 s4 - // GeneratorResumeJumpTable s5 - // $startOfFunc: - // - - StackSym *genParamSym = StackSym::NewParamSlotSym(1, this->m_func); - this->m_func->SetArgOffset(genParamSym, LowererMD::GetFormalParamOffset() * MachPtr); - - IR::SymOpnd *genParamOpnd = IR::SymOpnd::New(genParamSym, TyMachPtr, this->m_func); - IR::RegOpnd *genRegOpnd = IR::RegOpnd::New(TyMachPtr, this->m_func); - IR::Instr *instr = IR::Instr::New(Js::OpCode::Ld_A, genRegOpnd, genParamOpnd, this->m_func); - this->AddInstr(instr, Js::Constants::NoByteCodeOffset); - - IR::RegOpnd *genFrameOpnd = IR::RegOpnd::New(TyMachPtr, this->m_func); - instr = IR::Instr::New(Js::OpCode::Ld_A, genFrameOpnd, POINTER_OFFSET(genRegOpnd, Js::JavascriptGenerator, Frame), this->m_func); - this->AddInstr(instr, Js::Constants::NoByteCodeOffset); - - IR::LabelInstr *labelInstr = IR::LabelInstr::New(Js::OpCode::Label, this->m_func); - IR::BranchInstr *branchInstr = IR::BranchInstr::New(Js::OpCode::BrAddr_A, labelInstr, genFrameOpnd, IR::AddrOpnd::NewNull(this->m_func), this->m_func); - this->AddInstr(branchInstr, Js::Constants::NoByteCodeOffset); - - IR::RegOpnd *curLocOpnd = IR::RegOpnd::New(TyMachPtr, this->m_func); - instr = IR::Instr::New(Js::OpCode::Ld_A, curLocOpnd, POINTER_OFFSET(genFrameOpnd, Js::InterpreterStackFrame, CurrentLocation), this->m_func); - this->AddInstr(instr, Js::Constants::NoByteCodeOffset); - - IR::RegOpnd *startLocOpnd = IR::RegOpnd::New(TyMachPtr, this->m_func); - instr = IR::Instr::New(Js::OpCode::Ld_A, startLocOpnd, POINTER_OFFSET(genFrameOpnd, Js::InterpreterStackFrame, StartLocation), this->m_func); - this->AddInstr(instr, Js::Constants::NoByteCodeOffset); - - IR::RegOpnd *curOffsetOpnd = IR::RegOpnd::New(TyUint32, this->m_func); - instr = IR::Instr::New(Js::OpCode::Sub_I4, curOffsetOpnd, curLocOpnd, startLocOpnd, this->m_func); - this->AddInstr(instr, Js::Constants::NoByteCodeOffset); - - instr = IR::Instr::New(Js::OpCode::GeneratorResumeJumpTable, this->m_func); - instr->SetSrc1(curOffsetOpnd); - this->AddInstr(instr, Js::Constants::NoByteCodeOffset); - - this->AddInstr(labelInstr, Js::Constants::NoByteCodeOffset); -} - void IRBuilder::LoadNativeCodeData() { @@ -1562,7 +1458,7 @@ IRBuilder::BuildConstantLoads() instr = IR::Instr::NewConstantLoad(dstOpnd, varConst, valueType, m_func, m_func->IsOOPJIT() ? m_func->GetJITFunctionBody()->GetConstAsT(reg) : nullptr); break; - } + } this->AddInstr(instr, Js::Constants::NoByteCodeOffset); } @@ -1609,6 +1505,7 @@ IRBuilder::BuildReg1(Js::OpCode newOpcode, uint32 offset, Js::RegSlot R0) IR::Opnd * srcOpnd = nullptr; bool isNotInt = false; bool dstIsCatchObject = false; + bool reuseLoc = false; ValueType dstValueType; switch (newOpcode) { @@ -1663,6 +1560,9 @@ IRBuilder::BuildReg1(Js::OpCode newOpcode, uint32 offset, Js::RegSlot R0) isNotInt = true; break; + case Js::OpCode::LdLocalObj_ReuseLoc: + reuseLoc = true; + // fall through case Js::OpCode::LdLocalObj: if (!m_func->GetJITFunctionBody()->HasScopeObject()) { @@ -1739,6 +1639,18 @@ IRBuilder::BuildReg1(Js::OpCode newOpcode, uint32 offset, Js::RegSlot R0) break; } + case Js::OpCode::LdBaseFncProto: + { + // reuseLoc set to true as this is only used when that is wanted - during class extension + reuseLoc = true; + srcOpnd = IR::AddrOpnd::New(m_func->GetScriptContextInfo()->GetFunctionPrototypeAddr(), IR::AddrOpndKindDynamicVar, m_func, true); + newOpcode = Js::OpCode::Ld_A; + break; + } + + case Js::OpCode::LdFalse_ReuseLoc: + reuseLoc = true; + // fall through case Js::OpCode::LdFalse: { const auto addrOpnd = IR::AddrOpnd::New(m_func->GetScriptContextInfo()->GetFalseAddr(), IR::AddrOpndKindDynamicVar, m_func, true); @@ -1748,6 +1660,9 @@ IRBuilder::BuildReg1(Js::OpCode newOpcode, uint32 offset, Js::RegSlot R0) break; } + case Js::OpCode::LdTrue_ReuseLoc: + reuseLoc = true; + // fall through case Js::OpCode::LdTrue: { const auto addrOpnd = IR::AddrOpnd::New(m_func->GetScriptContextInfo()->GetTrueAddr(), IR::AddrOpndKindDynamicVar, m_func, true); @@ -1769,12 +1684,6 @@ IRBuilder::BuildReg1(Js::OpCode newOpcode, uint32 offset, Js::RegSlot R0) isNotInt = TRUE; break; - case Js::OpCode::Unused: - // Don't generate anything. Just indicate that the temp reg is used. - Assert(this->RegIsTemp(dstRegSlot)); - this->SetTempUsed(dstRegSlot, TRUE); - return; - case Js::OpCode::InitUndecl: srcOpnd = IR::AddrOpnd::New(m_func->GetScriptContextInfo()->GetUndeclBlockVarAddr(), IR::AddrOpndKindDynamicVar, m_func, true); srcOpnd->SetValueType(ValueType::PrimitiveOrObject); @@ -1808,7 +1717,7 @@ IRBuilder::BuildReg1(Js::OpCode newOpcode, uint32 offset, Js::RegSlot R0) } } - IR::RegOpnd * dstOpnd = this->BuildDstOpnd(dstRegSlot, TyVar, dstIsCatchObject); + IR::RegOpnd * dstOpnd = this->BuildDstOpnd(dstRegSlot, TyVar, dstIsCatchObject, reuseLoc); dstOpnd->SetValueType(dstValueType); StackSym * dstSym = dstOpnd->m_sym; dstSym->m_isCatchObjectSym = dstIsCatchObject; @@ -1858,7 +1767,7 @@ template void IRBuilder::BuildReg2(Js::OpCode newOpcode, uint32 offset) { - Assert(!OpCodeAttr::IsProfiledOp(newOpcode) || newOpcode == Js::OpCode::ProfiledStrictLdThis); + Assert(!OpCodeAttr::IsProfiledOp(newOpcode)); Assert(OpCodeAttr::HasMultiSizeLayout(newOpcode)); auto layout = m_jnReader.GetLayout>(); @@ -1876,12 +1785,30 @@ IRBuilder::BuildReg2(Js::OpCode newOpcode, uint32 offset, Js::RegSlot R0, Js::Re { IR::RegOpnd * src1Opnd = this->BuildSrcOpnd(R1); StackSym * symSrc1 = src1Opnd->m_sym; + bool reuseLoc = false; switch (newOpcode) { + case Js::OpCode::Ld_A_ReuseLoc: + newOpcode = Js::OpCode::Ld_A; + reuseLoc = true; + break; + + case Js::OpCode::Typeof_ReuseLoc: + newOpcode = Js::OpCode::Typeof; + reuseLoc = true; + break; + + case Js::OpCode::UnwrapWithObj_ReuseLoc: + newOpcode = Js::OpCode::UnwrapWithObj; + reuseLoc = true; + break; + + case Js::OpCode::SpreadObjectLiteral: + // fall through case Js::OpCode::SetComputedNameVar: { - IR::Instr *instr = IR::Instr::New(Js::OpCode::SetComputedNameVar, m_func); + IR::Instr *instr = IR::Instr::New(newOpcode, m_func); instr->SetSrc1(this->BuildSrcOpnd(R0)); instr->SetSrc2(src1Opnd); this->AddInstr(instr, offset); @@ -1908,7 +1835,7 @@ IRBuilder::BuildReg2(Js::OpCode newOpcode, uint32 offset, Js::RegSlot R0, Js::Re } } - IR::RegOpnd * dstOpnd = this->BuildDstOpnd(R0); + IR::RegOpnd * dstOpnd = this->BuildDstOpnd(R0, TyVar, false, reuseLoc); StackSym * dstSym = dstOpnd->m_sym; IR::Instr * instr = nullptr; @@ -1922,19 +1849,6 @@ IRBuilder::BuildReg2(Js::OpCode newOpcode, uint32 offset, Js::RegSlot R0, Js::Re } break; - case Js::OpCode::ProfiledStrictLdThis: - newOpcode = Js::OpCode::StrictLdThis; - if (m_func->HasProfileInfo()) - { - dstOpnd->SetValueType(m_func->GetReadOnlyProfileInfo()->GetThisInfo().valueType); - } - - if (m_func->DoSimpleJitDynamicProfile()) - { - IR::JitProfilingInstr* newInstr = IR::JitProfilingInstr::New(Js::OpCode::StrictLdThis, dstOpnd, src1Opnd, m_func); - instr = newInstr; - } - break; case Js::OpCode::Delete_A: dstOpnd->SetValueType(ValueType::Boolean); break; @@ -1966,15 +1880,43 @@ IRBuilder::BuildReg2(Js::OpCode newOpcode, uint32 offset, Js::RegSlot R0, Js::Re break; case Js::OpCode::Yield: + // Jitting Loop Bodies containing Yield is not possible, blocked at callsites of GenerateLoopBody + AssertMsg(!this->IsLoopBody(), "Attempting to JIT loop body containing Yield"); + instr = IR::Instr::New(newOpcode, dstOpnd, src1Opnd, m_func); this->AddInstr(instr, offset); - this->m_lastInstr = instr->ConvertToBailOutInstr(instr, IR::BailOutForGeneratorYield); + IR::Instr* yieldInstr = instr->ConvertToBailOutInstr(instr, IR::BailOutForGeneratorYield); + this->m_lastInstr = yieldInstr; + + // This label indicates the bail-in section that we will jump to from the generator jump table + auto* bailInLabel = IR::GeneratorBailInInstr::New(yieldInstr, m_func); + bailInLabel->m_hasNonBranchRef = true; // set to true so that we don't move this label around + LABELNAMESET(bailInLabel, "GeneratorBailInLabel"); + this->AddInstr(bailInLabel, offset); + this->m_func->AddYieldOffsetResumeLabel(nextOffset, bailInLabel); + + yieldInstr->GetBailOutInfo()->bailInInstr = bailInLabel; - IR::LabelInstr* label = IR::LabelInstr::New(Js::OpCode::Label, m_func); - label->m_hasNonBranchRef = true; - this->AddInstr(label, Js::Constants::NoByteCodeOffset); +#ifdef ENABLE_DEBUG_CONFIG_OPTIONS + if (PHASE_TRACE(Js::Phase::BailInPhase, this->m_func)) + { + IR::LabelInstr* traceBailInLabel = IR::LabelInstr::New(Js::OpCode::GeneratorOutputBailInTraceLabel, m_func); + traceBailInLabel->m_hasNonBranchRef = true; // set to true so that we don't move this label around + LABELNAMESET(traceBailInLabel, "OutputBailInTrace"); + this->AddInstr(traceBailInLabel, offset); - this->m_func->AddYieldOffsetResumeLabel(nextOffset, label); + IR::Instr* traceBailIn = IR::Instr::New(Js::OpCode::GeneratorOutputBailInTrace, m_func); + this->AddInstr(traceBailIn, offset); + } +#endif + + IR::Instr* resumeYield = IR::Instr::New(Js::OpCode::GeneratorResumeYield, dstOpnd, m_func); + this->AddInstr(resumeYield, offset); + + if (this->m_func->IsJitInDebugMode()) + { + this->InsertBailOutForDebugger(offset, IR::BailOutForceByFlag | IR::BailOutBreakPointInFunction | IR::BailOutStep); + } return; } @@ -2204,7 +2146,7 @@ IRBuilder::BuildReg3(Js::OpCode newOpcode, uint32 offset, Js::RegSlot dstRegSlot { InsertBailOnNoProfile(instr); } - + switch (newOpcode) { case Js::OpCode::LdHandlerScope: @@ -2272,6 +2214,191 @@ IRBuilder::BuildReg3C(Js::OpCode newOpCode, uint32 offset, Js::RegSlot dstRegSlo this->AddInstr(instr, Js::Constants::NoByteCodeOffset); } +void +IRBuilder::BuildReg2U(Js::OpCode newOpcode, uint32 offset, Js::RegSlot R0, Js::RegSlot R1, uint index) +{ + Assert(OpCodeAttr::HasMultiSizeLayout(newOpcode)); + + switch (newOpcode) + { + case Js::OpCode::InitBaseClass: + { + IR::Opnd * opndProtoParent = IR::AddrOpnd::New(m_func->GetScriptContextInfo()->GetObjectPrototypeAddr(), IR::AddrOpndKindDynamicVar, m_func, true); + IR::Opnd * opndCtorParent = IR::AddrOpnd::New(m_func->GetScriptContextInfo()->GetFunctionPrototypeAddr(), IR::AddrOpndKindDynamicVar, m_func, true); + BuildInitClass(offset, R0, R1, opndProtoParent, opndCtorParent, GetEnvironmentOperand(offset), index); + break; + } + + default: + AssertMsg(false, "Unknown Reg2U op"); + break; + } +} + +template +void +IRBuilder::BuildReg2U(Js::OpCode newOpcode, uint32 offset) +{ + Assert(!OpCodeAttr::IsProfiledOp(newOpcode)); + Assert(OpCodeAttr::HasMultiSizeLayout(newOpcode)); + auto layout = m_jnReader.GetLayout>(); + + if (!PHASE_OFF(Js::ClosureRegCheckPhase, m_func)) + { + this->DoClosureRegCheck(layout->R0); + this->DoClosureRegCheck(layout->R1); + } + + BuildReg2U(newOpcode, offset, layout->R0, layout->R1, layout->SlotIndex); +} + +void +IRBuilder::BuildReg3U(Js::OpCode newOpcode, uint32 offset, Js::RegSlot R0, Js::RegSlot R1, Js::RegSlot R2, uint index) +{ + Assert(OpCodeAttr::HasMultiSizeLayout(newOpcode)); + + switch (newOpcode) + { + case Js::OpCode::InitInnerBaseClass: + { + IR::Opnd * opndProtoParent = IR::AddrOpnd::New(m_func->GetScriptContextInfo()->GetObjectPrototypeAddr(), IR::AddrOpndKindDynamicVar, m_func, true); + IR::Opnd * opndCtorParent = IR::AddrOpnd::New(m_func->GetScriptContextInfo()->GetFunctionPrototypeAddr(), IR::AddrOpndKindDynamicVar, m_func, true); + BuildInitClass(offset, R0, R1, opndProtoParent, opndCtorParent, BuildSrcOpnd(R2), index); + break; + } + + default: + AssertMsg(false, "Unknown Reg3U op"); + break; + } +} + +template +void +IRBuilder::BuildReg3U(Js::OpCode newOpcode, uint32 offset) +{ + Assert(!OpCodeAttr::IsProfiledOp(newOpcode)); + Assert(OpCodeAttr::HasMultiSizeLayout(newOpcode)); + auto layout = m_jnReader.GetLayout>(); + + if (!PHASE_OFF(Js::ClosureRegCheckPhase, m_func)) + { + this->DoClosureRegCheck(layout->R0); + this->DoClosureRegCheck(layout->R1); + this->DoClosureRegCheck(layout->R2); + } + + BuildReg3U(newOpcode, offset, layout->R0, layout->R1, layout->R2, layout->SlotIndex); +} + +template +void +IRBuilder::BuildReg4U(Js::OpCode newOpcode, uint32 offset) +{ + Assert(!OpCodeAttr::IsProfiledOp(newOpcode)); + Assert(OpCodeAttr::HasMultiSizeLayout(newOpcode)); + auto layout = m_jnReader.GetLayout>(); + + if (!PHASE_OFF(Js::ClosureRegCheckPhase, m_func)) + { + this->DoClosureRegCheck(layout->R0); + this->DoClosureRegCheck(layout->R1); + this->DoClosureRegCheck(layout->R2); + this->DoClosureRegCheck(layout->R3); + } + + BuildReg4U(newOpcode, offset, layout->R0, layout->R1, layout->R2, layout->R3, layout->SlotIndex); +} + +void +IRBuilder::BuildReg4U(Js::OpCode newOpcode, uint32 offset, Js::RegSlot R0, Js::RegSlot R1, Js::RegSlot R2, Js::RegSlot R3, uint slotIndex) +{ + Assert(OpCodeAttr::HasMultiSizeLayout(newOpcode)); + + switch (newOpcode) + { + case Js::OpCode::InitClass: + { + BuildInitClass(offset, R0, R1, BuildSrcOpnd(R3), BuildSrcOpnd(R2), GetEnvironmentOperand(offset), slotIndex); + break; + } + + default: + AssertMsg(false, "Unknown Reg4U opcode"); + break; + } +} + +template +void +IRBuilder::BuildReg5U(Js::OpCode newOpcode, uint32 offset) +{ + Assert(!OpCodeAttr::IsProfiledOp(newOpcode)); + Assert(OpCodeAttr::HasMultiSizeLayout(newOpcode)); + auto layout = m_jnReader.GetLayout>(); + + if (!PHASE_OFF(Js::ClosureRegCheckPhase, m_func)) + { + this->DoClosureRegCheck(layout->R0); + this->DoClosureRegCheck(layout->R1); + this->DoClosureRegCheck(layout->R2); + this->DoClosureRegCheck(layout->R3); + this->DoClosureRegCheck(layout->R4); + } + + BuildReg5U(newOpcode, offset, layout->R0, layout->R1, layout->R2, layout->R3, layout->R4, layout->SlotIndex); +} + +void +IRBuilder::BuildReg5U(Js::OpCode newOpcode, uint32 offset, Js::RegSlot R0, Js::RegSlot R1, Js::RegSlot R2, Js::RegSlot R3, Js::RegSlot R4, uint slotIndex) +{ + Assert(OpCodeAttr::HasMultiSizeLayout(newOpcode)); + + switch (newOpcode) + { + case Js::OpCode::InitInnerClass: + { + BuildInitClass(offset, R0, R1, BuildSrcOpnd(R3), BuildSrcOpnd(R2), BuildSrcOpnd(R4), slotIndex); + break; + } + + default: + AssertMsg(false, "Unknown Reg5U opcode"); + break; + } +} + +void +IRBuilder::BuildInitClass(uint32 offset, Js::RegSlot regConstructor, Js::RegSlot regProto, IR::Opnd * opndProtoParent, IR::Opnd * opndConstructorParent, IR::Opnd * opndEnvironment, uint index) +{ + IR::RegOpnd * opndProto = BuildDstOpnd(regProto); + opndProto->SetValueType(ValueType::GetObject(ObjectType::Object)); + IR::Instr * instr = IR::Instr::New(Js::OpCode::NewClassProto, opndProto, opndProtoParent, m_func); + this->AddInstr(instr, offset); + + instr = IR::Instr::New(Js::OpCode::ExtendArg_A, IR::RegOpnd::New(TyVar, m_func), opndConstructorParent, m_func); + this->AddInstr(instr, offset); + + instr = IR::Instr::New(Js::OpCode::ExtendArg_A, IR::RegOpnd::New(TyVar, m_func), opndProto, instr->GetDst(), m_func); + this->AddInstr(instr, offset); + + Js::FunctionInfoPtrPtr infoRef = m_func->GetJITFunctionBody()->GetNestedFuncRef(index); + IR::AddrOpnd * functionBodySlotOpnd = IR::AddrOpnd::New((Js::Var)infoRef, IR::AddrOpndKindDynamicMisc, m_func); + instr = IR::Instr::New(Js::OpCode::ExtendArg_A, IR::RegOpnd::New(TyVar, m_func), functionBodySlotOpnd, instr->GetDst(), m_func); + this->AddInstr(instr, offset); + + instr = IR::Instr::New(Js::OpCode::ExtendArg_A, IR::RegOpnd::New(TyVar, m_func), opndEnvironment, instr->GetDst(), m_func); + this->AddInstr(instr, offset); + + IR::RegOpnd * opndConstructor = BuildDstOpnd(regConstructor); + instr = IR::Instr::New(Js::OpCode::NewClassConstructor, opndConstructor, instr->GetDst(), m_func); + this->AddInstr(instr, offset); + + Assert(opndConstructor->m_sym->m_isSingleDef); + opndConstructor->m_sym->m_isSafeThis = true; + opndConstructor->m_sym->m_isNotNumber = true; +} + ///---------------------------------------------------------------------------- /// /// IRBuilder::BuildReg4 @@ -2303,12 +2430,35 @@ void IRBuilder::BuildReg4(Js::OpCode newOpcode, uint32 offset, Js::RegSlot dstRegSlot, Js::RegSlot src1RegSlot, Js::RegSlot src2RegSlot, Js::RegSlot src3RegSlot) { - IR::Instr * instr; - Assert(newOpcode == Js::OpCode::Concat3); + IR::Instr * instr = nullptr; + Assert(newOpcode == Js::OpCode::Concat3 || newOpcode == Js::OpCode::Restify); IR::RegOpnd * src1Opnd = this->BuildSrcOpnd(src1RegSlot); IR::RegOpnd * src2Opnd = this->BuildSrcOpnd(src2RegSlot); - IR::RegOpnd * src3Opnd = this->BuildSrcOpnd(src3RegSlot); + IR::RegOpnd * src3Opnd = this->BuildSrcOpnd(src3RegSlot); + + if (newOpcode == Js::OpCode::Restify) + { + IR::RegOpnd * src0Opnd = this->BuildSrcOpnd(dstRegSlot); + instr = IR::Instr::New(Js::OpCode::ExtendArg_A, IR::RegOpnd::New(TyVar, m_func), src3Opnd, m_func); + this->AddInstr(instr, offset); + + instr = IR::Instr::New(Js::OpCode::ExtendArg_A, IR::RegOpnd::New(TyVar, m_func), src2Opnd, instr->GetDst(), m_func); + this->AddInstr(instr, Js::Constants::NoByteCodeOffset); + + instr = IR::Instr::New(Js::OpCode::ExtendArg_A, IR::RegOpnd::New(TyVar, m_func), src1Opnd, instr->GetDst(), m_func); + this->AddInstr(instr, Js::Constants::NoByteCodeOffset); + + instr = IR::Instr::New(Js::OpCode::ExtendArg_A, IR::RegOpnd::New(TyVar, m_func), src0Opnd, instr->GetDst(), m_func); + this->AddInstr(instr, Js::Constants::NoByteCodeOffset); + + IR::Opnd *firstArg = instr->GetDst(); + instr = IR::Instr::New(newOpcode, m_func); + instr->SetSrc1(firstArg); + this->AddInstr(instr, Js::Constants::NoByteCodeOffset); + return; + } + IR::RegOpnd * dstOpnd = this->BuildDstOpnd(dstRegSlot); IR::RegOpnd * str1Opnd = InsertConvPrimStr(src1Opnd, offset, true); @@ -2403,7 +2553,7 @@ IRBuilder::BuildReg2B1(Js::OpCode newOpcode, uint32 offset, Js::RegSlot dstRegSl IR::Instr * instr; IR::RegOpnd * srcOpnd = this->BuildSrcOpnd(srcRegSlot); - IR::RegOpnd * dstOpnd = this->BuildDstOpnd(dstRegSlot); + IR::RegOpnd * dstOpnd = this->BuildDstOpnd(dstRegSlot, TyVar, false, true); IR::IndirOpnd * indir1Opnd = IR::IndirOpnd::New(dstOpnd, index, TyVar, m_func); @@ -2440,22 +2590,23 @@ IRBuilder::BuildReg3B1(Js::OpCode newOpcode, uint32 offset, Js::RegSlot dstRegSl IR::Instr * instr; IR::RegOpnd * src1Opnd = this->BuildSrcOpnd(src1RegSlot); IR::RegOpnd * src2Opnd = this->BuildSrcOpnd(src2RegSlot); - IR::RegOpnd * dstOpnd = this->BuildDstOpnd(dstRegSlot); - dstOpnd->SetValueType(ValueType::String); + IR::RegOpnd * dstOpnd = nullptr; IR::Instr * newConcatStrMulti = nullptr; switch (newOpcode) { case Js::OpCode::NewConcatStrMulti: - + dstOpnd = this->BuildDstOpnd(dstRegSlot); newConcatStrMulti = IR::Instr::New(Js::OpCode::NewConcatStrMulti, dstOpnd, IR::IntConstOpnd::New(index, TyUint32, m_func), m_func); index = 0; break; case Js::OpCode::SetConcatStrMultiItem2: + dstOpnd = this->BuildDstOpnd(dstRegSlot, TyVar, false, true); break; default: Assert(false); }; + dstOpnd->SetValueType(ValueType::String); IR::IndirOpnd * indir1Opnd = IR::IndirOpnd::New(dstOpnd, index, TyVar, m_func); IR::IndirOpnd * indir2Opnd = IR::IndirOpnd::New(dstOpnd, index + 1, TyVar, m_func); @@ -2530,7 +2681,7 @@ IRBuilder::BuildReg5(Js::OpCode newOpcode, uint32 offset, Js::RegSlot dstRegSlot src3Opnd = this->BuildSrcOpnd(src3RegSlot); src4Opnd = this->BuildSrcOpnd(src4RegSlot); dstOpnd = this->BuildDstOpnd(dstRegSlot); - + instr = IR::Instr::New(Js::OpCode::ArgOut_A, IR::RegOpnd::New(TyVar, m_func), src4Opnd, m_func); this->AddInstr(instr, offset); @@ -2816,7 +2967,7 @@ IRBuilder::BuildProfiledReg1Unsigned1(Js::OpCode newOpcode, uint32 offset, Js::R if (newOpcode == Js::OpCode::InitForInEnumerator) { IR::RegOpnd * src1Opnd = this->BuildSrcOpnd(R0); - IR::Opnd * src2Opnd = this->BuildForInEnumeratorOpnd(C1); + IR::Opnd * src2Opnd = this->BuildForInEnumeratorOpnd(C1, offset); IR::Instr *instr = IR::ProfiledInstr::New(Js::OpCode::InitForInEnumerator, nullptr, src1Opnd, src2Opnd, m_func); instr->AsProfiledInstr()->u.profileId = profileId; this->AddInstr(instr, offset); @@ -2951,7 +3102,7 @@ IRBuilder::BuildReg1Unsigned1(Js::OpCode newOpcode, uint offset, Js::RegSlot R0, { IR::Instr *instr = IR::Instr::New(Js::OpCode::InitForInEnumerator, m_func); instr->SetSrc1(this->BuildSrcOpnd(R0)); - instr->SetSrc2(this->BuildForInEnumeratorOpnd(C1)); + instr->SetSrc2(this->BuildForInEnumeratorOpnd(C1, offset)); this->AddInstr(instr, offset); return; } @@ -2997,6 +3148,7 @@ IRBuilder::BuildReg1Unsigned1(Js::OpCode newOpcode, uint offset, Js::RegSlot R0, dstOpnd->SetValueTypeFixed(); } } + ///---------------------------------------------------------------------------- /// /// IRBuilder::BuildReg2Int1 @@ -3174,15 +3326,20 @@ IRBuilder::BuildElementC(Js::OpCode newOpcode, uint32 offset, Js::RegSlot fieldR PropertyKind propertyKind = PropertyKindData; IR::SymOpnd * fieldSymOpnd = this->BuildFieldOpnd(newOpcode, fieldRegSlot, propertyId, propertyIdIndex, propertyKind); IR::RegOpnd * regOpnd; + bool reuseLoc = false; switch (newOpcode) { + case Js::OpCode::DeleteFld_ReuseLoc: + newOpcode = Js::OpCode::DeleteFld; + reuseLoc = true; + // fall through case Js::OpCode::DeleteFld: case Js::OpCode::DeleteRootFld: case Js::OpCode::DeleteFldStrict: case Js::OpCode::DeleteRootFldStrict: // Load - regOpnd = this->BuildDstOpnd(regSlot); + regOpnd = this->BuildDstOpnd(regSlot, TyVar, false, reuseLoc); instr = IR::Instr::New(newOpcode, regOpnd, fieldSymOpnd, m_func); break; @@ -3423,6 +3580,29 @@ IRBuilder::BuildElementSlot(Js::OpCode newOpcode, uint32 offset, Js::RegSlot fie } break; + case Js::OpCode::StPropIdArrFromVar: + { + IR::RegOpnd * src0Opnd = this->BuildSrcOpnd(fieldRegSlot); + IR::RegOpnd * src1Opnd = this->BuildSrcOpnd(regSlot); + IntConstType value = slotId; + IR::IntConstOpnd * valOpnd = IR::IntConstOpnd::New(value, TyInt32, m_func); + + instr = IR::Instr::New(Js::OpCode::ExtendArg_A, IR::RegOpnd::New(TyVar, m_func), src1Opnd, m_func); + this->AddInstr(instr, offset); + offset = Js::Constants::NoByteCodeOffset; + + instr = IR::Instr::New(Js::OpCode::ExtendArg_A, IR::RegOpnd::New(TyVar, m_func), valOpnd, instr->GetDst(), m_func); + this->AddInstr(instr, offset); + + instr = IR::Instr::New(Js::OpCode::ExtendArg_A, IR::RegOpnd::New(TyVar, m_func), src0Opnd, instr->GetDst(), m_func); + this->AddInstr(instr, offset); + + IR::Opnd * firstArg = instr->GetDst(); + instr = IR::Instr::New(newOpcode, m_func); + instr->SetSrc1(firstArg); + break; + } + default: AssertMsg(UNREACHED, "Unknown ElementSlot opcode"); Fatal(); @@ -3481,6 +3661,7 @@ IRBuilder::BuildElementSlotI1(Js::OpCode newOpcode, uint32 offset, Js::RegSlot r StackSym * stackFuncPtrSym = nullptr; SymID symID = m_func->GetJITFunctionBody()->GetLocalClosureReg(); bool isLdSlotThatWasNotProfiled = false; + bool reuseLoc = false; StackSym* closureSym = m_func->GetLocalClosureSym(); uint scopeSlotSize = this->IsParamScopeDone() ? m_func->GetJITFunctionBody()->GetScopeSlotArraySize() : m_func->GetJITFunctionBody()->GetParamScopeSlotArraySize(); @@ -3524,8 +3705,6 @@ IRBuilder::BuildElementSlotI1(Js::OpCode newOpcode, uint32 offset, Js::RegSlot r if (IsLoopBody()) { fieldOpnd = this->BuildFieldOpnd(Js::OpCode::LdSlotArr, closureSym->m_id, slotId, (Js::PropertyIdIndexType)-1, PropertyKindSlotArray); - // Need a dynamic check on the size of the local slot array. - m_func->GetTopFunc()->AddSlotArrayCheck(fieldOpnd); } } else if (IsLoopBody()) @@ -3547,11 +3726,6 @@ IRBuilder::BuildElementSlotI1(Js::OpCode newOpcode, uint32 offset, Js::RegSlot r } this->AddInstr(instr, offset); - if (!m_func->DoStackFrameDisplay() && IsLoopBody()) - { - // Need a dynamic check on the size of the local slot array. - m_func->GetTopFunc()->AddSlotArrayCheck(fieldOpnd); - } break; case Js::OpCode::LdParamObjSlot: @@ -3629,8 +3803,6 @@ IRBuilder::BuildElementSlotI1(Js::OpCode newOpcode, uint32 offset, Js::RegSlot r if (IsLoopBody()) { fieldOpnd = this->BuildFieldOpnd(Js::OpCode::LdSlotArr, closureSym->m_id, slotId, (Js::PropertyIdIndexType)-1, PropertyKindSlotArray); - // Need a dynamic check on the size of the local slot array. - m_func->GetTopFunc()->AddSlotArrayCheck(fieldOpnd); } } else @@ -3650,11 +3822,6 @@ IRBuilder::BuildElementSlotI1(Js::OpCode newOpcode, uint32 offset, Js::RegSlot r instr->SetSrc2(fieldOpnd); } - if (!m_func->DoStackFrameDisplay() && IsLoopBody()) - { - // Need a dynamic check on the size of the local slot array. - m_func->GetTopFunc()->AddSlotArrayCheck(fieldOpnd); - } break; case Js::OpCode::StParamObjSlot: @@ -3692,9 +3859,12 @@ IRBuilder::BuildElementSlotI1(Js::OpCode newOpcode, uint32 offset, Js::RegSlot r this->AddInstr(instr, offset); break; + case Js::OpCode::LdEnvObj_ReuseLoc: + reuseLoc = true; + // fall through case Js::OpCode::LdEnvObj: fieldOpnd = this->BuildFieldOpnd(Js::OpCode::LdSlotArr, this->GetEnvReg(), slotId, (Js::PropertyIdIndexType)-1, PropertyKindSlotArray); - regOpnd = this->BuildDstOpnd(regSlot); + regOpnd = this->BuildDstOpnd(regSlot, TyVar, false, reuseLoc); instr = IR::Instr::New(Js::OpCode::LdSlotArr, regOpnd, fieldOpnd, m_func); this->AddInstr(instr, offset); @@ -3719,7 +3889,7 @@ IRBuilder::BuildElementSlotI1(Js::OpCode newOpcode, uint32 offset, Js::RegSlot r if (stackFuncPtrSym) { IR::RegOpnd * dataOpnd = IR::RegOpnd::New(TyVar, m_func); - instr = IR::Instr::New(Js::OpCode::NewScFuncData, dataOpnd, environmentOpnd, + instr = IR::Instr::New(Js::OpCode::NewScFuncData, dataOpnd, environmentOpnd, IR::RegOpnd::New(stackFuncPtrSym, TyVar, m_func), m_func); this->AddInstr(instr, offset); instr = IR::Instr::New(newOpcode, regOpnd, functionBodySlotOpnd, dataOpnd, m_func); @@ -3849,7 +4019,7 @@ IRBuilder::BuildElementSlotI2(Js::OpCode newOpcode, uint32 offset, Js::RegSlot r fieldSym = PropertySym::New(regOpnd->m_sym, slotId2, (uint32)-1, (uint)-1, PropertyKindSlots, m_func); fieldOpnd = IR::SymOpnd::New(fieldSym, TyVar, m_func); - + if (newOpcode == Js::OpCode::LdModuleSlot) { newOpcode = Js::OpCode::LdSlot; @@ -3966,13 +4136,8 @@ IRBuilder::BuildElementSlotI2(Js::OpCode newOpcode, uint32 offset, Js::RegSlot r else { fieldOpnd = this->BuildFieldOpnd(Js::OpCode::StSlot, slotId1, slotId2, (Js::PropertyIdIndexType)-1, PropertyKindSlots); - if (!this->DoSlotArrayCheck(fieldOpnd, IsLoopBody())) - { - // Need a dynamic check on the size of the local slot array. - m_func->GetTopFunc()->AddSlotArrayCheck(fieldOpnd); - } } - newOpcode = + newOpcode = newOpcode == Js::OpCode::StInnerObjSlot || newOpcode == Js::OpCode::StInnerSlot ? Js::OpCode::StSlot : Js::OpCode::StSlotChkUndecl; instr = IR::Instr::New(newOpcode, fieldOpnd, regOpnd, m_func); @@ -4009,11 +4174,6 @@ IRBuilder::BuildElementSlotI2(Js::OpCode newOpcode, uint32 offset, Js::RegSlot r else { fieldOpnd = this->BuildFieldOpnd(Js::OpCode::LdSlot, slotId1, slotId2, (Js::PropertyIdIndexType)-1, PropertyKindSlots); - if (!this->DoSlotArrayCheck(fieldOpnd, IsLoopBody())) - { - // Need a dynamic check on the size of the local slot array. - m_func->GetTopFunc()->AddSlotArrayCheck(fieldOpnd); - } } regOpnd = this->BuildDstOpnd(regSlot); instr = IR::Instr::New(Js::OpCode::LdSlot, regOpnd, fieldOpnd, m_func); @@ -4089,7 +4249,7 @@ IRBuilder::BuildElementSlotI3(Js::OpCode newOpcode, uint32 offset, Js::RegSlot f IR::Opnd * environmentOpnd = this->BuildSrcOpnd(fieldRegSlot); IR::Opnd * homeObjOpnd = this->BuildSrcOpnd(homeObj); regOpnd = this->BuildDstOpnd(regSlot); - + instr = IR::Instr::New(Js::OpCode::ExtendArg_A, IR::RegOpnd::New(TyVar, m_func), homeObjOpnd, m_func); this->AddInstr(instr, offset); @@ -4100,7 +4260,7 @@ IRBuilder::BuildElementSlotI3(Js::OpCode newOpcode, uint32 offset, Js::RegSlot f this->AddInstr(instr, offset); instr = IR::Instr::New(newOpcode, regOpnd, instr->GetDst(), m_func); - + if (regOpnd->m_sym->m_isSingleDef) { regOpnd->m_sym->m_isSafeThis = true; @@ -4278,9 +4438,14 @@ IRBuilder::BuildElementP(Js::OpCode newOpcode, uint32 offset, Js::RegSlot regSlo propertyId = this->m_func->GetJITFunctionBody()->GetPropertyIdFromCacheId(inlineCacheIndex); Js::RegSlot instance = this->GetEnvRegForEvalCode(); + bool reuseLoc = false; switch (newOpcode) { + case Js::OpCode::LdLocalFld_ReuseLoc: + reuseLoc = true; + newOpcode = Js::OpCode::LdLocalFld; + // fall through case Js::OpCode::LdLocalFld: if (m_func->GetLocalClosureSym()->HasByteCodeRegSlot()) { @@ -4295,7 +4460,7 @@ IRBuilder::BuildElementP(Js::OpCode newOpcode, uint32 offset, Js::RegSlot regSlo { fieldSymOpnd->AsPropertySymOpnd()->TryDisableRuntimePolymorphicCache(); } - regOpnd = this->BuildDstOpnd(regSlot); + regOpnd = this->BuildDstOpnd(regSlot, TyVar, false, reuseLoc); instr = nullptr; if (isProfiled) @@ -4508,8 +4673,13 @@ IRBuilder::BuildElementCP(Js::OpCode newOpcode, uint32 offset, Js::RegSlot insta IR::Instr * instr = nullptr; bool isLdFldThatWasNotProfiled = false; + bool reuseLoc = false; switch (newOpcode) { + case Js::OpCode::LdFld_ReuseLoc: + reuseLoc = true; + newOpcode = Js::OpCode::LdFld; + // fall through case Js::OpCode::LdFldForTypeOf: case Js::OpCode::LdFld: case Js::OpCode::LdLen_A: @@ -4525,7 +4695,7 @@ IRBuilder::BuildElementCP(Js::OpCode newOpcode, uint32 offset, Js::RegSlot insta case Js::OpCode::ScopedLdMethodFld: // Load // LdMethodFromFlags is backend only. Don't need to be added here. - regOpnd = this->BuildDstOpnd(regSlot); + regOpnd = this->BuildDstOpnd(regSlot, TyVar, false, reuseLoc); if (isProfiled) { @@ -4678,7 +4848,7 @@ IRBuilder::BuildProfiledElementCP(Js::OpCode newOpcode, uint32 offset, Js::RegSl { isProfiled = false; } - + bool wasNotProfiled = false; IR::Instr *instr = nullptr; @@ -4816,15 +4986,18 @@ IRBuilder::BuildElementC2(Js::OpCode newOpcode, uint32 offset, Js::RegSlot insta regOpnd = this->BuildDstOpnd(regSlot); instr = IR::ProfiledInstr::New(newOpcode, regOpnd, fieldSymOpnd, value2Opnd, m_func); + instr->AsProfiledInstr()->u.FldInfo() = *(m_func->GetReadOnlyProfileInfo()->GetFldInfo(propertyIdIndex)); this->AddInstr(instr, offset); } break; case Js::OpCode::ProfiledStSuperFld: + case Js::OpCode::ProfiledStSuperFldStrict: Js::OpCodeUtil::ConvertNonCallOpToNonProfiled(newOpcode); // fall-through case Js::OpCode::StSuperFld: + case Js::OpCode::StSuperFldStrict: { propertyId = m_func->GetJITFunctionBody()->GetPropertyIdFromCacheId(propertyIdIndex); fieldSymOpnd = this->BuildFieldOpnd(newOpcode, instanceSlot, propertyId, (Js::PropertyIdIndexType) - 1, PropertyKindData, propertyIdIndex); @@ -4837,7 +5010,7 @@ IRBuilder::BuildElementC2(Js::OpCode newOpcode, uint32 offset, Js::RegSlot insta value2Opnd = this->BuildSrcOpnd(value2Slot); instr = IR::ProfiledInstr::New(newOpcode, fieldSymOpnd, regOpnd, value2Opnd, m_func); - + instr->AsProfiledInstr()->u.FldInfo() = *(m_func->GetReadOnlyProfileInfo()->GetFldInfo(propertyIdIndex)); this->AddInstr(instr, offset); break; } @@ -4899,6 +5072,7 @@ IRBuilder::BuildElementU(Js::OpCode newOpcode, uint32 offset, Js::RegSlot instan IR::RegOpnd * regOpnd; IR::SymOpnd * fieldSymOpnd; Js::PropertyId propertyId = m_func->GetJITFunctionBody()->GetReferencedPropertyId(propertyIdIndex); + bool reuseLoc = false; switch (newOpcode) { @@ -4946,10 +5120,14 @@ IRBuilder::BuildElementU(Js::OpCode newOpcode, uint32 offset, Js::RegSlot instan instr = IR::Instr::New(newOpcode, fieldSymOpnd, regOpnd, m_func); break; + case Js::OpCode::DeleteLocalFld_ReuseLoc: + newOpcode = Js::OpCode::DeleteLocalFld; + reuseLoc = true; + // fall through case Js::OpCode::DeleteLocalFld: newOpcode = Js::OpCode::DeleteFld; fieldSymOpnd = BuildFieldOpnd(newOpcode, m_func->GetJITFunctionBody()->GetLocalClosureReg(), propertyId, propertyIdIndex, PropertyKindData); - regOpnd = BuildDstOpnd(instance); + regOpnd = BuildDstOpnd(instance, TyVar, false, reuseLoc); instr = IR::Instr::New(newOpcode, regOpnd, fieldSymOpnd, m_func); break; @@ -6663,48 +6841,6 @@ IRBuilder::BuildCallCommon(IR::Instr * instr, StackSym * symDst, Js::ArgSlot arg } } -///---------------------------------------------------------------------------- -/// -/// IRBuilder::BuildClass -/// -/// Build IR instr for an InitClass instruction. -/// -///---------------------------------------------------------------------------- - - -template -void -IRBuilder::BuildClass(Js::OpCode newOpcode, uint32 offset) -{ - Assert(!OpCodeAttr::IsProfiledOp(newOpcode)); - Assert(OpCodeAttr::HasMultiSizeLayout(newOpcode)); - auto layout = m_jnReader.GetLayout>(); - - if (!PHASE_OFF(Js::ClosureRegCheckPhase, m_func)) - { - this->DoClosureRegCheck(layout->Constructor); - this->DoClosureRegCheck(layout->Extends); - } - - BuildClass(newOpcode, offset, layout->Constructor, layout->Extends); -} - -void -IRBuilder::BuildClass(Js::OpCode newOpcode, uint32 offset, Js::RegSlot constructor, Js::RegSlot extends) -{ - Assert(newOpcode == Js::OpCode::InitClass); - - IR::Instr * insn = IR::Instr::New(newOpcode, m_func); - insn->SetSrc1(this->BuildSrcOpnd(constructor)); - - if (extends != Js::Constants::NoRegister) - { - insn->SetSrc2(this->BuildSrcOpnd(extends)); - } - - this->AddInstr(insn, offset); -} - ///---------------------------------------------------------------------------- /// @@ -6799,7 +6935,7 @@ IRBuilder::BuildBrReg1Unsigned1(Js::OpCode newOpcode, uint32 offset) void IRBuilder::BuildBrBReturn(Js::OpCode newOpcode, uint32 offset, Js::RegSlot DestRegSlot, uint32 forInLoopLevel, uint32 targetOffset) { - IR::Opnd *srcOpnd = this->BuildForInEnumeratorOpnd(forInLoopLevel); + IR::Opnd *srcOpnd = this->BuildForInEnumeratorOpnd(forInLoopLevel, offset); IR::RegOpnd * destOpnd = this->BuildDstOpnd(DestRegSlot); IR::BranchInstr * branchInstr = IR::BranchInstr::New(newOpcode, destOpnd, nullptr, srcOpnd, m_func); this->AddBranchInstr(branchInstr, offset, targetOffset); @@ -6960,7 +7096,7 @@ IRBuilder::BuildEmpty(Js::OpCode newOpcode, uint32 offset) case Js::OpCode::BeginBodyScope: { - // This marks the end of a param socpe which is not merged with body scope. + // This marks the end of a param scope which is not merged with body scope. // So we have to first cache the closure so that we can use it to copy the initial values for // body syms from corresponding param syms (LdParamSlot). Body should get its own scope slot. Assert(!this->IsParamScopeDone()); @@ -7298,17 +7434,7 @@ void IRBuilder::BuildBrLocalProperty(Js::OpCode newOpcode, uint32 offset) { Assert(!OpCodeAttr::HasMultiSizeLayout(newOpcode)); - - switch (newOpcode) - { - case Js::OpCode::BrOnNoLocalProperty: - newOpcode = Js::OpCode::BrOnNoProperty; - break; - - default: - Assert(0); - break; - } + Assert(newOpcode == Js::OpCode::BrOnHasLocalProperty); const unaligned Js::OpLayoutBrLocalProperty *branchInsn = m_jnReader.BrLocalProperty(); @@ -7352,7 +7478,8 @@ IRBuilder::BuildBrEnvProperty(Js::OpCode newOpcode, uint32 offset) fieldSym = PropertySym::New(regOpnd->m_sym, propertyId, branchInsn->PropertyIdIndex, (uint)-1, PropertyKindData, m_func); fieldOpnd = IR::SymOpnd::New(fieldSym, TyVar, m_func); - branchInstr = IR::BranchInstr::New(Js::OpCode::BrOnNoProperty, nullptr, fieldOpnd, m_func); + Assert(newOpcode == Js::OpCode::BrOnHasEnvProperty || newOpcode == Js::OpCode::BrOnHasLocalEnvProperty); + branchInstr = IR::BranchInstr::New(newOpcode == Js::OpCode::BrOnHasEnvProperty ? Js::OpCode::BrOnHasProperty : Js::OpCode::BrOnHasLocalProperty, nullptr, fieldOpnd, m_func); this->AddBranchInstr(branchInstr, offset, targetOffset); } @@ -7711,3 +7838,144 @@ IRBuilder::AllowNativeArrayProfileInfo() return !((!(m_func->GetTopFunc()->HasTry() && !m_func->GetTopFunc()->DoOptimizeTry()) && m_func->GetWeakFuncRef() && !m_func->HasArrayInfo()) || m_func->IsJitInDebugMode()); } + +#if DBG_DUMP || defined(ENABLE_IR_VIEWER) +#define POINTER_OFFSET(opnd, c, field) \ + m_irBuilder->BuildIndirOpnd((opnd), c, _u(#c) _u(".") _u(#field)) +#else +#define POINTER_OFFSET(opnd, c, field) \ + m_irBuilder->BuildIndirOpnd((opnd), c) +#endif + +IRBuilder::GeneratorJumpTable::GeneratorJumpTable(Func* func, IRBuilder* irBuilder) : m_func(func), m_irBuilder(irBuilder) {} + +IR::Instr* +IRBuilder::GeneratorJumpTable::BuildJumpTable() +{ + AssertMsg(!this->m_func->IsLoopBody(), "Coroutine Loop Bodies can be jitted but should follow a different path"); + if (!this->m_func->GetJITFunctionBody()->IsCoroutine()) + { + return this->m_irBuilder->m_lastInstr; + } + + // Build code to check if the generator already has state and if it does then jump to the corresponding resume point. + // Otherwise jump to the start of the function. The generator object is the first argument by convention established + // in JavascriptGenerator::EntryNext/EntryReturn/EntryThrow. + // We also create the interpreter stack frame for generator if it doesn't already exist. + // + // s1 = Ld_A prm1 + // s2 = Ld_A s1[offset of JavascriptGenerator::frame] + // BrNotAddr_A s2 !nullptr $jumpTable + // + // $createInterpreterStackFrame: + // call helper + // + // Br $startOfFunc + // + // $jumpTable: + // + // s3 = Ld_A s2[offset of InterpreterStackFrame::m_reader.m_currentLocation] + // s4 = Ld_A s2[offset of InterpreterStackFrame::m_reader.m_startLocation] + // s5 = Sub_I4 s3 s4 + // GeneratorResumeJumpTable s5 + // + // $startOfFunc: + // + + // s1 = Ld_A prm1 + StackSym* genParamSym = StackSym::NewParamSlotSym(1, this->m_func); + this->m_func->SetArgOffset(genParamSym, LowererMD::GetFormalParamOffset() * MachPtr); + + IR::SymOpnd* genParamOpnd = IR::SymOpnd::New(genParamSym, TyMachPtr, this->m_func); + IR::RegOpnd* genRegOpnd = IR::RegOpnd::New(TyMachPtr, this->m_func); + IR::Instr* instr = IR::Instr::New(Js::OpCode::Ld_A, genRegOpnd, genParamOpnd, this->m_func); + this->m_irBuilder->AddInstr(instr, this->m_irBuilder->m_functionStartOffset); + + // s2 = Ld_A s1[offset of JavascriptGenerator::frame] + IR::RegOpnd* genFrameOpnd = IR::RegOpnd::New(TyMachPtr, this->m_func); + instr = IR::Instr::New( + Js::OpCode::Ld_A, + genFrameOpnd, + POINTER_OFFSET(genRegOpnd, Js::JavascriptGenerator::GetFrameOffset(), GeneratorFrame), + this->m_func + ); + this->m_irBuilder->AddInstr(instr, this->m_irBuilder->m_functionStartOffset); + + IR::LabelInstr* functionBegin = IR::LabelInstr::New(Js::OpCode::Label, this->m_func); + LABELNAMESET(functionBegin, "GeneratorFunctionBegin"); + + IR::LabelInstr* jumpTable = IR::LabelInstr::New(Js::OpCode::Label, this->m_func); + LABELNAMESET(jumpTable, "GeneratorJumpTable"); + + // If there is already a stack frame, generator function has previously begun execution - don't recreate, skip down to jump table + // BrNotAddr_A s2 nullptr $jumpTable + IR::BranchInstr* skipCreateInterpreterFrame = IR::BranchInstr::New(Js::OpCode::BrNotAddr_A, jumpTable, genFrameOpnd, IR::AddrOpnd::NewNull(this->m_func), this->m_func); + this->m_irBuilder->AddInstr(skipCreateInterpreterFrame, this->m_irBuilder->m_functionStartOffset); + + // Create interpreter stack frame + IR::Instr* createInterpreterFrame = IR::Instr::New(Js::OpCode::GeneratorCreateInterpreterStackFrame, genFrameOpnd /* dst */, genRegOpnd /* src */, this->m_func); + this->m_irBuilder->AddInstr(createInterpreterFrame, this->m_irBuilder->m_functionStartOffset); + + // Having created the frame, skip over the jump table and start executing from the beginning of the function + IR::BranchInstr* skipJumpTable = IR::BranchInstr::New(Js::OpCode::Br, functionBegin, this->m_func); + this->m_irBuilder->AddInstr(skipJumpTable, this->m_irBuilder->m_functionStartOffset); + + // Label for start of jumpTable - where we look for the correct Yield resume point + // $jumpTable: + this->m_irBuilder->AddInstr(jumpTable, this->m_irBuilder->m_functionStartOffset); + + // s3 = Ld_A s2[offset of InterpreterStackFrame::m_reader.m_currentLocation] + IR::RegOpnd* curLocOpnd = IR::RegOpnd::New(TyMachPtr, this->m_func); + instr = IR::Instr::New( + Js::OpCode::Ld_A, + curLocOpnd, + POINTER_OFFSET(genFrameOpnd, Js::InterpreterStackFrame::GetCurrentLocationOffset(), InterpreterCurrentLocation), + this->m_func + ); + this->m_irBuilder->AddInstr(instr, this->m_irBuilder->m_functionStartOffset); + + // s4 = Ld_A s2[offset of InterpreterStackFrame::m_reader.m_startLocation] + IR::RegOpnd* startLocOpnd = IR::RegOpnd::New(TyMachPtr, this->m_func); + instr = IR::Instr::New( + Js::OpCode::Ld_A, + startLocOpnd, + POINTER_OFFSET(genFrameOpnd, Js::InterpreterStackFrame::GetStartLocationOffset(), InterpreterStartLocation), + this->m_func + ); + this->m_irBuilder->AddInstr(instr, this->m_irBuilder->m_functionStartOffset); + + // s5 = Sub_I4 s3 s4 + IR::RegOpnd* curOffsetOpnd = IR::RegOpnd::New(TyUint32, this->m_func); + instr = IR::Instr::New(Js::OpCode::Sub_I4, curOffsetOpnd, curLocOpnd, startLocOpnd, this->m_func); + this->m_irBuilder->AddInstr(instr, this->m_irBuilder->m_functionStartOffset); + + // GeneratorResumeJumpTable s5 + instr = IR::Instr::New(Js::OpCode::GeneratorResumeJumpTable, this->m_func); + instr->SetSrc1(curOffsetOpnd); + this->m_irBuilder->AddInstr(instr, this->m_irBuilder->m_functionStartOffset); + + this->m_func->m_bailOutForElidedYieldInsertionPoint = instr; + + this->m_irBuilder->AddInstr(functionBegin, this->m_irBuilder->m_functionStartOffset); + + // Save this value for later use + this->m_generatorFrameOpnd = genFrameOpnd; + this->m_func->SetGeneratorFrameSym(genFrameOpnd->GetStackSym()); + + return this->m_irBuilder->m_lastInstr; +} + +IR::RegOpnd* +IRBuilder::GeneratorJumpTable::BuildForInEnumeratorArrayOpnd(uint32 offset) +{ + Assert(this->m_generatorFrameOpnd != nullptr); + + IR::RegOpnd* forInEnumeratorArrayOpnd = IR::RegOpnd::New(TyMachPtr, this->m_func); + IR::Instr* instr = IR::Instr::New(Js::OpCode::Ld_A, forInEnumeratorArrayOpnd, + POINTER_OFFSET(this->m_generatorFrameOpnd, Js::InterpreterStackFrame::GetOffsetOfForInEnumerators(), ForInEnumerators), + this->m_func + ); + this->m_irBuilder->AddInstr(instr, offset); + + return forInEnumeratorArrayOpnd; +} diff --git a/lib/Backend/IRBuilder.h b/lib/Backend/IRBuilder.h index c31e036ed9d..1ad9b383be8 100644 --- a/lib/Backend/IRBuilder.h +++ b/lib/Backend/IRBuilder.h @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #pragma once @@ -84,6 +85,7 @@ class IRBuilder #ifdef BYTECODE_BRANCH_ISLAND , longBranchMap(nullptr) #endif + , m_generatorJumpTable(GeneratorJumpTable(func, this)) { auto loopCount = func->GetJITFunctionBody()->GetLoopCount(); if (loopCount > 0) { @@ -121,7 +123,6 @@ class IRBuilder uint ResolveVirtualLongBranch(IR::BranchInstr * branchInstr, uint offset); #endif BranchReloc * CreateRelocRecord(IR::BranchInstr * branchInstr, uint32 offset, uint32 targetOffset); - void BuildGeneratorPreamble(); void LoadNativeCodeData(); void BuildConstantLoads(); void BuildImplicitArgIns(); @@ -137,11 +138,18 @@ class IRBuilder void BuildProfiledReg2(Js::OpCode newOpcode, uint32 offset, Js::RegSlot dstRegSlot, Js::RegSlot srcRegSlot, Js::ProfileId profileId); void BuildReg3(Js::OpCode newOpcode, uint32 offset, Js::RegSlot dstRegSlot, Js::RegSlot src1RegSlot, Js::RegSlot src2RegSlot, Js::ProfileId profileId); + void BuildReg3U(Js::OpCode newOpCode, uint32 offset, Js::RegSlot dstRegSlot, Js::RegSlot src1RegSlot, + Js::RegSlot src2RegSlot, uint slotIndex); void BuildIsIn(Js::OpCode newOpcode, uint32 offset, Js::RegSlot dstRegSlot, Js::RegSlot src1RegSlot, Js::RegSlot src2RegSlot, Js::ProfileId profileId); void BuildReg3C(Js::OpCode newOpCode, uint32 offset, Js::RegSlot dstRegSlot, Js::RegSlot src1RegSlot, Js::RegSlot src2RegSlot, Js::CacheId inlineCacheIndex); + void BuildReg3UC(Js::OpCode newOpCode, uint32 offset, Js::RegSlot dstRegSlot, Js::RegSlot src1RegSlot, + Js::RegSlot src2RegSlot, uint slotIndex, Js::CacheId inlineCacheIndex); void BuildReg4(Js::OpCode newOpcode, uint32 offset, Js::RegSlot dstRegSlot, Js::RegSlot src1RegSlot, Js::RegSlot src2RegSlot, Js::RegSlot src3RegSlot); + void BuildReg4U(Js::OpCode newOpcode, uint32 offset, Js::RegSlot R0, Js::RegSlot R1, Js::RegSlot R2, Js::RegSlot R3, uint slotIndex); + void BuildReg5U(Js::OpCode newOpcode, uint32 offset, Js::RegSlot R0, Js::RegSlot R1, Js::RegSlot R2, Js::RegSlot R3, Js::RegSlot R4, + uint slotIndex); void BuildReg2B1(Js::OpCode newOpcode, uint32 offset, Js::RegSlot dstRegSlot, Js::RegSlot srcRegSlot, byte index); void BuildReg3B1(Js::OpCode newOpcode, uint32 offset, Js::RegSlot dstRegSlot, Js::RegSlot src1RegSlot, Js::RegSlot src2RegSlot, uint8 index); @@ -151,6 +159,7 @@ class IRBuilder void BuildReg1Unsigned1(Js::OpCode newOpcode, uint32 offset, Js::RegSlot R0, int32 C1); void BuildProfiledReg1Unsigned1(Js::OpCode newOpcode, uint32 offset, Js::RegSlot R0, int32 C1, Js::ProfileId profileId); void BuildReg2Int1(Js::OpCode newOpcode, uint32 offset, Js::RegSlot dstRegSlot, Js::RegSlot srcRegSlot, int32 value); + void BuildReg2U(Js::OpCode newOpcode, uint32 offset, Js::RegSlot R0, Js::RegSlot R1, uint index); void BuildElementC(Js::OpCode newOpcode, uint32 offset, Js::RegSlot fieldRegSlot, Js::RegSlot regSlot, Js::PropertyIdIndexType propertyIdIndex); void BuildElementScopedC(Js::OpCode newOpcode, uint32 offset, Js::RegSlot regSlot, @@ -201,7 +210,7 @@ class IRBuilder Js::ArgSlot argCount, Js::CallIExtendedOptions options, uint32 spreadAuxOffset, Js::CallFlags flags = Js::CallFlags_None); void BuildCallCommon(IR::Instr *instr, StackSym *symDst, Js::ArgSlot argCount, Js::CallFlags flags = Js::CallFlags_None); void BuildRegexFromPattern(Js::RegSlot dstRegSlot, uint32 patternIndex, uint32 offset); - void BuildClass(Js::OpCode newOpcode, uint32 offset, Js::RegSlot constructor, Js::RegSlot extends); + void BuildInitClass(uint32 offset, Js::RegSlot constructor, Js::RegSlot proto, IR::Opnd * opndProtoParent, IR::Opnd * opndCtorParent, IR::Opnd * opndEnvironment, uint index); void BuildBrReg1(Js::OpCode newOpcode, uint32 offset, uint targetOffset, Js::RegSlot srcRegSlot); void BuildBrReg2(Js::OpCode newOpcode, uint32 offset, uint targetOffset, Js::RegSlot src1RegSlot, Js::RegSlot src2RegSlot); void BuildBrBReturn(Js::OpCode newOpcode, uint32 offset, Js::RegSlot DestRegSlot, uint32 forInLoopLevel, uint32 targetOffset); @@ -214,11 +223,11 @@ class IRBuilder IR::SymOpnd * BuildFieldOpnd(Js::OpCode newOpCode, Js::RegSlot reg, Js::PropertyId propertyId, Js::PropertyIdIndexType propertyIdIndex, PropertyKind propertyKind, uint inlineCacheIndex = -1); PropertySym * BuildFieldSym(Js::RegSlot reg, Js::PropertyId propertyId, Js::PropertyIdIndexType propertyIdIndex, uint inlineCacheIndex, PropertyKind propertyKind); SymID BuildSrcStackSymID(Js::RegSlot regSlot); - IR::RegOpnd * BuildDstOpnd(Js::RegSlot dstRegSlot, IRType type = TyVar, bool isCatchObjectSym = false); + IR::RegOpnd * BuildDstOpnd(Js::RegSlot dstRegSlot, IRType type = TyVar, bool isCatchObjectSym = false, bool reuseTemp = false); IR::RegOpnd * BuildSrcOpnd(Js::RegSlot srcRegSlot, IRType type = TyVar); IR::AddrOpnd * BuildAuxArrayOpnd(AuxArrayValue auxArrayType, uint32 auxArrayOffset); IR::Opnd * BuildAuxObjectLiteralTypeRefOpnd(int objectId); - IR::Opnd * BuildForInEnumeratorOpnd(uint forInLoopLevel); + IR::Opnd * BuildForInEnumeratorOpnd(uint forInLoopLevel, uint32 offset); IR::RegOpnd * EnsureLoopBodyForInEnumeratorArrayOpnd(); private: uint AddStatementBoundary(uint statementIndex, uint offset); @@ -247,33 +256,6 @@ class IRBuilder this->tempMap[tempIndex] = tempId; } - BOOL GetTempUsed(Js::RegSlot reg) - { - AssertMsg(this->RegIsTemp(reg), "Processing non-temp reg as a temp?"); - AssertMsg(this->fbvTempUsed, "Processing non-temp reg without a used BV?"); - - Js::RegSlot tempIndex = reg - this->firstTemp; - AssertOrFailFast(tempIndex < m_func->GetJITFunctionBody()->GetTempCount()); - return this->fbvTempUsed->Test(tempIndex); - } - - void SetTempUsed(Js::RegSlot reg, BOOL used) - { - AssertMsg(this->RegIsTemp(reg), "Processing non-temp reg as a temp?"); - AssertMsg(this->fbvTempUsed, "Processing non-temp reg without a used BV?"); - - Js::RegSlot tempIndex = reg - this->firstTemp; - AssertOrFailFast(tempIndex < m_func->GetJITFunctionBody()->GetTempCount()); - if (used) - { - this->fbvTempUsed->Set(tempIndex); - } - else - { - this->fbvTempUsed->Clear(tempIndex); - } - } - BOOL RegIsTemp(Js::RegSlot reg) { return reg >= this->firstTemp; @@ -281,7 +263,7 @@ class IRBuilder BOOL RegIsConstant(Js::RegSlot reg) { - return reg > 0 && reg < m_func->GetJITFunctionBody()->GetConstCount(); + return this->m_func->GetJITFunctionBody()->RegIsConstant(reg); } bool IsParamScopeDone() const { return m_paramScopeDone; } @@ -292,7 +274,6 @@ class IRBuilder Js::RegSlot GetEnvRegForEvalCode() const; Js::RegSlot GetEnvRegForInnerFrameDisplay() const; void AddEnvOpndForInnerFrameDisplay(IR::Instr *instr, uint offset); - bool DoSlotArrayCheck(IR::SymOpnd *fieldOpnd, bool doDynamicCheck); void EmitClosureRangeChecks(); void DoClosureRegCheck(Js::RegSlot reg); void BuildInitCachedScope(int auxOffset, int offset); @@ -322,7 +303,7 @@ class IRBuilder void InsertDoneLoopBodyLoopCounter(uint32 lastOffset); IR::RegOpnd * InsertConvPrimStr(IR::RegOpnd * srcOpnd, uint offset, bool forcePreOpBailOutIfNeeded); - IR::Opnd * IRBuilder::GetEnvironmentOperand(uint32 offset); + IR::Opnd * GetEnvironmentOperand(uint32 offset); bool DoLoadInstructionArrayProfileInfo(); bool AllowNativeArrayProfileInfo(); @@ -348,7 +329,6 @@ class IRBuilder typedef Pair handlerStackElementType; SList *handlerOffsetStack; SymID * tempMap; - BVFixed * fbvTempUsed; Js::RegSlot firstTemp; IRBuilderSwitchAdapter m_switchAdapter; SwitchIRBuilder m_switchBuilder; @@ -381,4 +361,18 @@ class IRBuilder LongBranchMap * longBranchMap; static IR::Instr * const VirtualLongBranchInstr; #endif + + class GeneratorJumpTable { + Func* const m_func; + IRBuilder* const m_irBuilder; + + IR::RegOpnd* m_generatorFrameOpnd = nullptr; + + public: + GeneratorJumpTable(Func* func, IRBuilder* irBuilder); + IR::Instr* BuildJumpTable(); + IR::RegOpnd* BuildForInEnumeratorArrayOpnd(uint32 offset); + }; + + GeneratorJumpTable m_generatorJumpTable; }; diff --git a/lib/Backend/IRBuilderAsmJs.cpp b/lib/Backend/IRBuilderAsmJs.cpp index 7434dd0b667..5a356036710 100644 --- a/lib/Backend/IRBuilderAsmJs.cpp +++ b/lib/Backend/IRBuilderAsmJs.cpp @@ -337,7 +337,7 @@ IRBuilderAsmJs::BuildSrcOpnd(Js::RegSlot srcRegSlot, IRType type) { StackSym * symSrc = m_func->m_symTable->FindStackSym(BuildSrcStackSymID(srcRegSlot, type)); AssertMsg(symSrc, "Tried to use an undefined stack slot?"); - IR::RegOpnd * regOpnd = IR::RegOpnd::New(symSrc, type, m_func); + IR::RegOpnd * regOpnd = IR::RegOpnd::New(symSrc, type, m_func); return regOpnd; } @@ -5903,7 +5903,6 @@ IRBuilderAsmJs::BuildInt1Uint8x16_1Int1(Js::OpCodeAsmJs newOpcode, uint32 offset void IRBuilderAsmJs::BuildUint8x16_2Int16(Js::OpCodeAsmJs newOpcode, uint32 offset, BUILD_SIMD_ARGS_REG18) { - IR::RegOpnd * dstOpnd = BuildDstOpnd(dstRegSlot, TySimd128U16); IR::RegOpnd * src1Opnd = BuildSrcOpnd(src1RegSlot, TySimd128U16); IR::RegOpnd * src2Opnd = BuildIntConstOpnd(src2RegSlot); @@ -5923,6 +5922,8 @@ void IRBuilderAsmJs::BuildUint8x16_2Int16(Js::OpCodeAsmJs newOpcode, uint32 offs IR::RegOpnd * src16Opnd = BuildIntConstOpnd(src16RegSlot); IR::RegOpnd * src17Opnd = BuildIntConstOpnd(src17RegSlot); + IR::RegOpnd * dstOpnd = BuildDstOpnd(dstRegSlot, TySimd128U16); + IR::Instr * instr = nullptr; dstOpnd->SetValueType(ValueType::Simd); src1Opnd->SetValueType(ValueType::Simd); @@ -5961,9 +5962,9 @@ IRBuilderAsmJs::BuildAsmShuffle(Js::OpCodeAsmJs newOpcode, uint32 offset) Assert(OpCodeAttrAsmJs::HasMultiSizeLayout(newOpcode) && newOpcode == Js::OpCodeAsmJs::Simd128_Shuffle_V8X16); auto layout = m_jnReader.GetLayout>(); - IR::RegOpnd * dstOpnd = BuildDstOpnd(GetRegSlotFromSimd128Reg(layout->R0), TySimd128U16); IR::RegOpnd * src1Opnd = BuildSrcOpnd(GetRegSlotFromSimd128Reg(layout->R1), TySimd128U16); IR::RegOpnd * src2Opnd = BuildSrcOpnd(GetRegSlotFromSimd128Reg(layout->R2), TySimd128U16); + IR::RegOpnd * dstOpnd = BuildDstOpnd(GetRegSlotFromSimd128Reg(layout->R0), TySimd128U16); dstOpnd->SetValueType(ValueType::Simd); src1Opnd->SetValueType(ValueType::Simd); src2Opnd->SetValueType(ValueType::Simd); @@ -5982,7 +5983,6 @@ IRBuilderAsmJs::BuildAsmShuffle(Js::OpCodeAsmJs newOpcode, uint32 offset) void IRBuilderAsmJs::BuildUint8x16_3Int16(Js::OpCodeAsmJs newOpcode, uint32 offset, BUILD_SIMD_ARGS_REG19) { - IR::RegOpnd * dstOpnd = BuildDstOpnd(dstRegSlot, TySimd128U16); IR::RegOpnd * src1Opnd = BuildSrcOpnd(src1RegSlot, TySimd128U16); IR::RegOpnd * src2Opnd = BuildSrcOpnd(src2RegSlot, TySimd128U16); @@ -6003,6 +6003,8 @@ void IRBuilderAsmJs::BuildUint8x16_3Int16(Js::OpCodeAsmJs newOpcode, uint32 offs IR::RegOpnd * src17Opnd = BuildIntConstOpnd(src17RegSlot); IR::RegOpnd * src18Opnd = BuildIntConstOpnd(src18RegSlot); + IR::RegOpnd * dstOpnd = BuildDstOpnd(dstRegSlot, TySimd128U16); + IR::Instr * instr = nullptr; dstOpnd->SetValueType(ValueType::Simd); src1Opnd->SetValueType(ValueType::Simd); @@ -6746,13 +6748,11 @@ IRBuilderAsmJs::BuildAsmSimdTypedArr(Js::OpCodeAsmJs newOpcode, uint32 offset, u IRType type = TySimd128F4; Js::RegSlot valueRegSlot = GetRegSlotFromSimd128Reg(value); - IR::RegOpnd * maskedOpnd = nullptr; - IR::Instr * maskInstr = nullptr; + IR::RegOpnd * addrOpnd = nullptr; Js::OpCode op = GetSimdOpcode(newOpcode); ValueType arrayType; bool isLd = false, isConst = false; - uint32 mask = 0; switch (newOpcode) { @@ -6934,7 +6934,6 @@ IRBuilderAsmJs::BuildAsmSimdTypedArr(Js::OpCodeAsmJs newOpcode, uint32 offset, u { #define ARRAYBUFFER_VIEW(name, align, RegType, MemType, irSuffix) \ case Js::ArrayBufferView::TYPE_##name: \ - mask = ARRAYBUFFER_VIEW_MASK(align); \ arrayType = ValueType::GetObject(ObjectType::##irSuffix##Array); \ break; #include "Language/AsmJsArrayBufferViews.h" @@ -6947,18 +6946,7 @@ IRBuilderAsmJs::BuildAsmSimdTypedArr(Js::OpCodeAsmJs newOpcode, uint32 offset, u { Js::RegSlot indexRegSlot = GetRegSlotFromIntReg(slotIndex); - - if (mask) - { - // AND_I4 index, mask - maskedOpnd = IR::RegOpnd::New(TyUint32, m_func); - maskInstr = IR::Instr::New(Js::OpCode::And_I4, maskedOpnd, BuildSrcOpnd(indexRegSlot, TyInt32), IR::IntConstOpnd::New(mask, TyUint32, m_func), m_func); - - } - else - { - maskedOpnd = BuildSrcOpnd(indexRegSlot, TyInt32); - } + addrOpnd = BuildSrcOpnd(indexRegSlot, TyInt32); } IR::Instr * instr = nullptr; @@ -6974,11 +6962,11 @@ IRBuilderAsmJs::BuildAsmSimdTypedArr(Js::OpCodeAsmJs newOpcode, uint32 offset, u regOpnd->SetValueType(ValueType::Simd); if (!isConst) { - Assert(maskedOpnd); + Assert(addrOpnd); // Js::OpCodeAsmJs::Simd128_LdArr_I4: // Js::OpCodeAsmJs::Simd128_LdArr_F4: // Js::OpCodeAsmJs::Simd128_LdArr_D2: - indirOpnd = IR::IndirOpnd::New(baseOpnd, maskedOpnd, type, m_func); + indirOpnd = IR::IndirOpnd::New(baseOpnd, addrOpnd, type, m_func); } else { @@ -6995,11 +6983,11 @@ IRBuilderAsmJs::BuildAsmSimdTypedArr(Js::OpCodeAsmJs newOpcode, uint32 offset, u regOpnd->SetValueType(ValueType::Simd); if (!isConst) { - Assert(maskedOpnd); + Assert(addrOpnd); // Js::OpCodeAsmJs::Simd128_StArr_I4: // Js::OpCodeAsmJs::Simd128_StArr_F4: // Js::OpCodeAsmJs::Simd128_StArr_D2: - indirOpnd = IR::IndirOpnd::New(baseOpnd, maskedOpnd, type, m_func); + indirOpnd = IR::IndirOpnd::New(baseOpnd, addrOpnd, type, m_func); } else { @@ -7014,10 +7002,6 @@ IRBuilderAsmJs::BuildAsmSimdTypedArr(Js::OpCodeAsmJs newOpcode, uint32 offset, u Assert(dataWidth >= 4 && dataWidth <= 16); instr->dataWidth = dataWidth; indirOpnd->SetOffset(simdOffset); - if (maskInstr) - { - AddInstr(maskInstr, offset); - } AddInstr(instr, offset); } diff --git a/lib/Backend/Inline.cpp b/lib/Backend/Inline.cpp index a09ba6bbb4a..7b091bb5808 100644 --- a/lib/Backend/Inline.cpp +++ b/lib/Backend/Inline.cpp @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #include "Backend.h" @@ -139,15 +140,6 @@ Inline::Optimize(Func *func, __in_ecount_opt(callerArgOutCount) IR::Instr *calle JITTimeFunctionBody * body = inlineeData->GetBody(); if (!body) { -#ifdef ENABLE_DOM_FAST_PATH - Assert(inlineeData->GetLocalFunctionId() == Js::JavascriptBuiltInFunction::DOMFastPathGetter || - inlineeData->GetLocalFunctionId() == Js::JavascriptBuiltInFunction::DOMFastPathSetter); - if (PHASE_OFF1(Js::InlineHostCandidatePhase)) - { - break; - } - this->InlineDOMGetterSetterFunction(instr, inlineeData, inlinerData); -#endif break; } @@ -213,7 +205,7 @@ Inline::Optimize(Func *func, __in_ecount_opt(callerArgOutCount) IR::Instr *calle { if (PHASE_ENABLED(InlineCallbacksPhase, func)) { - callbackDefInstr = TryGetCallbackDefInstr(instr); + callbackDefInstr = TryGetCallbackDefInstrForCallInstr(instr); } if (callbackDefInstr == nullptr) @@ -228,7 +220,7 @@ Inline::Optimize(Func *func, __in_ecount_opt(callerArgOutCount) IR::Instr *calle { if (PHASE_ENABLED(InlineCallbacksPhase, func)) { - callbackDefInstr = TryGetCallbackDefInstr(instr); + callbackDefInstr = TryGetCallbackDefInstrForCallInstr(instr); if (callbackDefInstr == nullptr) { isPolymorphic = true; @@ -244,12 +236,12 @@ Inline::Optimize(Func *func, __in_ecount_opt(callerArgOutCount) IR::Instr *calle { Js::ProfileId callSiteId = static_cast(callbackDefInstr->AsProfiledInstr()->u.profileId); inlineeData = callbackDefInstr->m_func->GetWorkItem()->GetJITTimeInfo()->GetCallbackInlinee(callSiteId); - if (PHASE_TESTTRACE(Js::InlineCallbacksPhase, func) || PHASE_TRACE(Js::InlineCallbacksPhase, func)) - { - char16 debugStringBuffer[MAX_FUNCTION_BODY_DEBUG_STRING_SIZE]; - Output::Print(_u("INLINING : Inlining callback at\tCallSite: %d\tCaller: %s (%s)\n"), - callSiteId, inlinerData->GetBody()->GetDisplayName(), inlinerData->GetDebugNumberSet(debugStringBuffer)); - } + +#if ENABLE_DEBUG_CONFIG_OPTIONS + char16 debugStringBuffer[MAX_FUNCTION_BODY_DEBUG_STRING_SIZE]; + INLINE_CALLBACKS_TRACE(_u("INLINING : Inlining callback at\tCallSite: %d\tCaller: %s (%s)\n"), + callSiteId, inlinerData->GetBody()->GetDisplayName(), inlinerData->GetDebugNumberSet(debugStringBuffer)); +#endif } if (isPolymorphic) @@ -403,7 +395,7 @@ Inline::Optimize(Func *func, __in_ecount_opt(callerArgOutCount) IR::Instr *calle instrNext = builtInInlineCandidateOpCode != 0 ? - this->InlineBuiltInFunction(instr, inlineeData, builtInInlineCandidateOpCode, inlinerData, symThis, &isInlined, profileId, recursiveInlineDepth) : + this->InlineBuiltInFunction(instr, inlineeData, builtInInlineCandidateOpCode, inlinerData, symThis, &isInlined, profileId, recursiveInlineDepth, instr) : this->InlineScriptFunction(instr, inlineeData, symThis, profileId, &isInlined, callbackDefInstr, recursiveInlineDepth); if (!isInlined && hasDstUsedBuiltInReturnType) { @@ -1010,20 +1002,58 @@ Inline::InlinePolymorphicFunctionUsingFixedMethods(IR::Instr *callInstr, const F return instrNext; } -IR::Instr * Inline::TryGetCallbackDefInstr(IR::Instr * callInstr) +IR::RegOpnd * Inline::GetCallbackFunctionOpnd(IR::Instr * callInstr) +{ + IR::Instr * callApplyLdInstr = callInstr->GetSrc1()->GetStackSym()->GetInstrDef(); + IR::Instr * targetDefInstr = callApplyLdInstr->GetSrc1()->AsPropertySymOpnd()->GetObjectSym()->GetInstrDef(); + return targetDefInstr->GetDst()->AsRegOpnd(); +} + +IR::Instr * Inline::TryGetCallbackDefInstrForCallInstr(IR::Instr * callInstr) { // Try to find a function argument that could be inlined. - IR::Instr * defInstr = callInstr; - StackSym * linkSym = callInstr->GetSrc1()->GetStackSym(); - Assert(linkSym != nullptr); + StackSym * callbackSym = callInstr->GetSrc1()->GetStackSym(); + Assert(callbackSym != nullptr); + return TryGetCallbackDefInstr(callbackSym); +} - Inline * currFrame = this; +IR::Instr * Inline::TryGetCallbackDefInstrForCallApplyTarget(IR::Instr * callApplyLdInstr) +{ + // Try to find a function argument that could be inlined. + if (!callApplyLdInstr->GetSrc1()->IsSymOpnd() || !callApplyLdInstr->GetSrc1()->AsSymOpnd()->IsPropertySymOpnd()) + { + return nullptr; + } + StackSym * callbackSym = callApplyLdInstr->GetSrc1()->AsPropertySymOpnd()->GetObjectSym(); + Assert(callbackSym != nullptr); + return TryGetCallbackDefInstr(callbackSym); +} + +IR::Instr * Inline::TryGetCallbackDefInstrForCallInstanceFunction(IR::Instr * callInstr) +{ + IR::Instr * argImplicitThisInstr = nullptr; + IR::Instr * argFunction = nullptr; + + callInstr->IterateArgInstrs([&](IR::Instr* argInstr) { + argFunction = argImplicitThisInstr; + argImplicitThisInstr = argInstr; + return false; + }); + + StackSym * callbackSym = argFunction->GetSrc1()->GetStackSym(); + Assert(callbackSym != nullptr); + return TryGetCallbackDefInstr(callbackSym); +} - while (linkSym->m_isSingleDef) +IR::Instr * Inline::TryGetCallbackDefInstr(StackSym * callbackSym) +{ + Inline * currFrame = this; + IR::Instr * defInstr = nullptr; + while (callbackSym->m_isSingleDef) { - if (linkSym->m_instrDef != nullptr) + if (callbackSym->m_instrDef != nullptr) { - defInstr = linkSym->m_instrDef; + defInstr = callbackSym->m_instrDef; } else { @@ -1037,7 +1067,7 @@ IR::Instr * Inline::TryGetCallbackDefInstr(IR::Instr * callInstr) Assert(callingInstr != nullptr && callingInstr->IsProfiledInstr()); Js::ProfileId callSiteId = static_cast(callingInstr->AsProfiledInstr()->u.profileId); - Js::ArgSlot argIndex = linkSym->GetParamSlotNum() - 1; + Js::ArgSlot argIndex = callbackSym->GetParamSlotNum() - 1; Func * callingFunc = callingInstr->m_func; if (!callingFunc->GetReadOnlyProfileInfo()->CanInlineCallback(argIndex, callSiteId)) @@ -1052,7 +1082,7 @@ IR::Instr * Inline::TryGetCallbackDefInstr(IR::Instr * callInstr) defInstr = nullptr; - // find the appropraite argOut from the call site. + // find the appropriate argOut from the call site. callingInstr->IterateArgInstrs([&](IR::Instr* argInstr) { StackSym *argSym = argInstr->GetDst()->AsSymOpnd()->m_sym->AsStackSym(); if (argSym->GetArgSlotNum() - 1 == argIndex) @@ -1074,8 +1104,8 @@ IR::Instr * Inline::TryGetCallbackDefInstr(IR::Instr * callInstr) return nullptr; } - linkSym = linkOpnd->GetStackSym(); - if (linkSym == nullptr) + callbackSym = linkOpnd->GetStackSym(); + if (callbackSym == nullptr) { return nullptr; } @@ -1303,6 +1333,7 @@ void Inline::InsertOneInlinee(IR::Instr* callInstr, IR::RegOpnd* returnValueOpnd else { currentCallInstr = IR::Instr::New(callInstr->m_opcode, callInstr->m_func); + currentCallInstr->SetByteCodeOffset(callInstr); currentCallInstr->SetSrc1(methodOpnd); if (returnValueOpnd) { @@ -1326,12 +1357,13 @@ void Inline::InsertOneInlinee(IR::Instr* callInstr, IR::RegOpnd* returnValueOpnd Js::ArgSlot actualCount = MapActuals(currentCallInstr, argOuts, Js::InlineeCallInfo::MaxInlineeArgoutCount, inlinee, (Js::ProfileId)callInstr->AsProfiledInstr()->u.profileId, &stackArgsArgOutExpanded); Assert(actualCount > 0); MapFormals(inlinee, argOuts, funcBody->GetInParamsCount(), actualCount, returnValueOpnd, currentCallInstr->GetSrc1(), symCallerThis, stackArgsArgOutExpanded, fixedFunctionSafeThis, argOuts); + inlinee->SetInlineeStart(currentCallInstr); currentCallInstr->m_func = inlinee; // Put the meta arguments that the stack walker expects to find on the stack. // As all the argouts are shared among the inlinees, do this only once. SetupInlineeFrame(inlinee, currentCallInstr, actualCount, currentCallInstr->GetSrc1()); - + IR::Instr* inlineeEndInstr = IR::Instr::New(Js::OpCode::InlineeEnd, inlinee); inlineeEndInstr->SetByteCodeOffset(inlinee->m_tailInstr->GetPrevRealInstr()); inlineeEndInstr->SetSrc1(IR::IntConstOpnd::New(actualCount + Js::Constants::InlineeMetaArgCount, TyInt32, inlinee)); @@ -2006,7 +2038,16 @@ Inline::TryOptimizeInstrWithFixedDataProperty(IR::Instr *&instr) // dstC = MOVSD s1(XMM0) IR::Instr * -Inline::InlineBuiltInFunction(IR::Instr *callInstr, const FunctionJITTimeInfo * inlineeData, Js::OpCode inlineCallOpCode, const FunctionJITTimeInfo * inlinerData, const StackSym *symCallerThis, bool* pIsInlined, uint profileId, uint recursiveInlineDepth) +Inline::InlineBuiltInFunction( + IR::Instr *callInstr, + const FunctionJITTimeInfo * inlineeData, + Js::OpCode inlineCallOpCode, + const FunctionJITTimeInfo * inlinerData, + const StackSym *symCallerThis, + bool* pIsInlined, + uint profileId, + uint recursiveInlineDepth, + IR::Instr * funcObjCheckInsertInstr) { Assert(callInstr); Assert(inlinerData); @@ -2017,156 +2058,30 @@ Inline::InlineBuiltInFunction(IR::Instr *callInstr, const FunctionJITTimeInfo * // Inlining is profile-based, so get the built-in function from profile rather than from the callInstr's opnd. Js::BuiltinFunction builtInId = Js::JavascriptLibrary::GetBuiltInForFuncInfo(inlineeData->GetLocalFunctionId()); - -#if defined(DBG_DUMP) || defined(ENABLE_DEBUG_CONFIG_OPTIONS) - char16 debugStringBuffer[MAX_FUNCTION_BODY_DEBUG_STRING_SIZE]; -#endif - if(inlineCallOpCode == Js::OpCode::InlineMathFloor || inlineCallOpCode == Js::OpCode::InlineMathCeil || inlineCallOpCode == Js::OpCode::InlineMathRound) - { -#if defined(_M_IX86) || defined(_M_X64) - if (!AutoSystemInfo::Data.SSE4_1Available()) - { - INLINE_TESTTRACE(_u("INLINING: Skip Inline: SSE4.1 not available\tInlinee: %s (#%d)\tCaller: %s\n"), Js::JavascriptLibrary::GetNameForBuiltIn(builtInId), (int)builtInId, inlinerData->GetBody()->GetDisplayName()); - return callInstr->m_next; - } -#endif - if(callInstr->m_func->GetTopFunc()->HasProfileInfo() && callInstr->m_func->GetTopFunc()->GetReadOnlyProfileInfo()->IsFloorInliningDisabled()) - { - INLINE_TESTTRACE(_u("INLINING: Skip Inline: Floor Inlining Disabled\tInlinee: %s (#%d)\tCaller: %s\n"), Js::JavascriptLibrary::GetNameForBuiltIn(builtInId), (int)builtInId, inlinerData->GetBody()->GetDisplayName()); - return callInstr->m_next; - } - } - - if (callInstr->GetSrc2() && - callInstr->GetSrc2()->IsSymOpnd() && - callInstr->GetSrc2()->AsSymOpnd()->m_sym->AsStackSym()->GetArgSlotNum() > Js::InlineeCallInfo::MaxInlineeArgoutCount) + if (!CanInlineBuiltInFunction(callInstr, inlineeData, inlineCallOpCode, inlinerData, builtInId, false)) { - // This is a hard limit as we only use 4 bits to encode the actual count in the InlineeCallInfo. Although - // InliningDecider already checks for this, the check is against profile data that may not be accurate since profile - // data matching does not take into account some types of changes to source code. Need to check this again with current - // information. - INLINE_TESTTRACE(_u("INLINING: Skip Inline: ArgSlot > MaxInlineeArgoutCount\tInlinee: %s (#%d)\tArgSlotNum: %d\tMaxInlineeArgoutCount: %d\tCaller: %s (#%d)\n"), - Js::JavascriptLibrary::GetNameForBuiltIn(builtInId), (int)builtInId, callInstr->GetSrc2()->AsSymOpnd()->m_sym->AsStackSym()->GetArgSlotNum(), - Js::InlineeCallInfo::MaxInlineeArgoutCount, inlinerData->GetBody()->GetDisplayName(), inlinerData->GetDebugNumberSet(debugStringBuffer)); return callInstr->m_next; } Js::BuiltInFlags builtInFlags = Js::JavascriptLibrary::GetFlagsForBuiltIn(builtInId); - - bool isAnyArgFloat = (builtInFlags & Js::BuiltInFlags::BIF_TypeSpecAllToFloat) != 0; - if (isAnyArgFloat && !GlobOpt::DoFloatTypeSpec(this->topFunc)) - { - INLINE_TESTTRACE(_u("INLINING: Skip Inline: float type spec is off\tInlinee: %s (#%d)\tCaller: %s (%s)\n"), - Js::JavascriptLibrary::GetNameForBuiltIn(builtInId), (int)builtInId, - inlinerData->GetBody()->GetDisplayName(), inlinerData->GetDebugNumberSet(debugStringBuffer)); - return callInstr->m_next; - } - - bool canDstBeFloat = (builtInFlags & Js::BuiltInFlags::BIF_TypeSpecDstToFloat) != 0; - if (canDstBeFloat && !Js::JavascriptLibrary::CanFloatPreferenceFunc(builtInId) && inlineCallOpCode != Js::OpCode::InlineArrayPop) - { - // Note that for Math.abs that means that even though it can potentially be type-spec'd to int, we won't inline it. - // Some built-in functions, such as atan2, are disabled for float-pref. - INLINE_TESTTRACE(_u("INLINING: Skip Inline: Cannot float-type-spec the inlinee\tInlinee: %s (#%d)\tCaller: %s (%s)\n"), - Js::JavascriptLibrary::GetNameForBuiltIn(builtInId), (int)builtInId, // Get the _value (cause operator _E) to avoid using struct directly. - inlinerData->GetBody()->GetDisplayName(), inlinerData->GetDebugNumberSet(debugStringBuffer)); - return callInstr->m_next; - } - - bool isAnyArgInt = (builtInFlags & (Js::BuiltInFlags::BIF_TypeSpecDstToInt | Js::BuiltInFlags::BIF_TypeSpecSrc1ToInt | Js::BuiltInFlags::BIF_TypeSpecSrc2ToInt)) != 0; - if (isAnyArgInt && !GlobOpt::DoAggressiveIntTypeSpec(this->topFunc)) - { - // Note that for Math.abs that means that even though it can potentially be type-spec'd to float, we won't inline it. - INLINE_TESTTRACE(_u("INLINING: Skip Inline: int type spec is off\tInlinee: %s (#%d)\tCaller: %s (%s)\n"), - Js::JavascriptLibrary::GetNameForBuiltIn(builtInId), (int)builtInId, - inlinerData->GetBody()->GetDisplayName(), inlinerData->GetDebugNumberSet(debugStringBuffer)); - return callInstr->m_next; - } - - if(inlineCallOpCode == Js::OpCode::InlineMathImul && !GlobOpt::DoLossyIntTypeSpec(topFunc)) - { - INLINE_TESTTRACE(_u("INLINING: Skip Inline: lossy int type spec is off, it's required for Math.imul to do | 0 on src opnds\tInlinee: %s (#%d)\tCaller: %s (%s)\n"), - Js::JavascriptLibrary::GetNameForBuiltIn(builtInId), (int)builtInId, - inlinerData->GetBody()->GetDisplayName(), inlinerData->GetDebugNumberSet(debugStringBuffer)); - return callInstr->m_next; - } - - if(inlineCallOpCode == Js::OpCode::InlineMathClz && !GlobOpt::DoLossyIntTypeSpec(topFunc)) - { - INLINE_TESTTRACE(_u("INLINING: Skip Inline: lossy int type spec is off, it's required for Math.clz32 to do | 0 on src opnds\tInlinee: %s (#%d)\tCaller: %s (%s)\n"), - Js::JavascriptLibrary::GetNameForBuiltIn(builtInId), (int)builtInId, - inlinerData->GetBody()->GetDisplayName(), inlinerData->GetDebugNumberSet(debugStringBuffer)); - return callInstr->m_next; - } - - if (inlineCallOpCode == Js::OpCode::InlineFunctionApply && (!callInstr->m_func->GetHasStackArgs() || this->topFunc->GetJITFunctionBody()->IsInlineApplyDisabled())) - { - INLINE_TESTTRACE(_u("INLINING: Skip Inline: stack args of inlining is off\tInlinee: %s (#%d)\tCaller: %s (%s)\n"), - Js::JavascriptLibrary::GetNameForBuiltIn(builtInId), (int)builtInId, - inlinerData->GetBody()->GetDisplayName(), inlinerData->GetDebugNumberSet(debugStringBuffer)); - return callInstr->m_next; - } - - // TODO: when adding support for other type spec args (array, string) do appropriate check as well. - - Assert(callInstr->GetSrc1()); - Assert(callInstr->GetSrc1()->IsRegOpnd()); - Assert(callInstr->GetSrc1()->AsRegOpnd()->m_sym); - - if (!(builtInFlags & Js::BuiltInFlags::BIF_IgnoreDst) && callInstr->GetDst() == nullptr && inlineCallOpCode != Js::OpCode::InlineArrayPop) - { - // Is seems that it's not worth optimizing odd cases where the result is unused. - INLINE_TESTTRACE(_u("INLINING: Skip Inline: inlinee's return value is not assigned to anything\tInlinee: %s (#%d)\tCaller: %s (%s)\n"), - Js::JavascriptLibrary::GetNameForBuiltIn(builtInId), (int)builtInId, - inlinerData->GetBody()->GetDisplayName(), inlinerData->GetDebugNumberSet(debugStringBuffer)); - return callInstr->m_next; - } - - // Number of arguments, not including "this". - IntConstType requiredInlineCallArgCount = (IntConstType)Js::JavascriptLibrary::GetArgCForBuiltIn(builtInId); - - IR::Opnd* linkOpnd = callInstr->GetSrc2(); + IR::Opnd * linkOpnd = callInstr->GetSrc2(); Js::ArgSlot actualCount = linkOpnd->AsSymOpnd()->m_sym->AsStackSym()->GetArgSlotNum(); - // Check for missing actuals: - // if number of passed params to built-in function is not what it needs, don't inline. bool usesThisArgument = (builtInFlags & Js::BuiltInFlags::BIF_UseSrc0) != 0; int inlineCallArgCount = (int)(usesThisArgument ? actualCount : actualCount - 1); - Assert(inlineCallArgCount >= 0); - - if (linkOpnd->IsSymOpnd()) - { - if((builtInFlags & Js::BuiltInFlags::BIF_VariableArgsNumber) != 0) - { - if(inlineCallArgCount > requiredInlineCallArgCount) - { - INLINE_TESTTRACE(_u("INLINING: Skip Inline: parameter count exceeds the maximum number of parameters allowed\tInlinee: %s (#%d)\tCaller: %s (%s)\n"), - Js::JavascriptLibrary::GetNameForBuiltIn(builtInId), (int)builtInId, - inlinerData->GetBody()->GetDisplayName(), inlinerData->GetDebugNumberSet(debugStringBuffer)); - return callInstr->m_next; - } - } - else if(inlineCallArgCount != requiredInlineCallArgCount) - { - INLINE_TESTTRACE(_u("INLINING: Skip Inline: parameter count doesn't match dynamic profile\tInlinee: %s (#%d)\tCaller: %s (%s)\n"), - Js::JavascriptLibrary::GetNameForBuiltIn(builtInId), (int)builtInId, - inlinerData->GetBody()->GetDisplayName(), inlinerData->GetDebugNumberSet(debugStringBuffer)); - return callInstr->m_next; - } - } IR::Instr *inlineBuiltInEndInstr = nullptr; - if (inlineCallOpCode == Js::OpCode::InlineFunctionApply) + if (inlineCallOpCode == Js::OpCode::InlineFunctionApply) { return InlineApply(callInstr, inlineeData, inlinerData, symCallerThis, pIsInlined, profileId, recursiveInlineDepth, inlineCallArgCount - (usesThisArgument ? 1 : 0)); } - if (inlineCallOpCode == Js::OpCode::InlineFunctionCall) + if (inlineCallOpCode == Js::OpCode::InlineFunctionCall || inlineCallOpCode == Js::OpCode::InlineCallInstanceFunction) { - return InlineCall(callInstr, inlineeData, inlinerData, symCallerThis, pIsInlined, profileId, recursiveInlineDepth); + const bool isCallInstanceFunction = (inlineCallOpCode == Js::OpCode::InlineCallInstanceFunction); + return InlineCall(callInstr, inlineeData, inlinerData, symCallerThis, pIsInlined, profileId, recursiveInlineDepth, isCallInstanceFunction); } - #if defined(ENABLE_DEBUG_CONFIG_OPTIONS) TraceInlining(inlinerData, Js::JavascriptLibrary::GetNameForBuiltIn(builtInId), nullptr, 0, this->topFunc->GetWorkItem()->GetJITTimeInfo(), 0, nullptr, profileId, callInstr->m_func->GetTopFunc()->IsLoopBody(), builtInId); @@ -2180,10 +2095,10 @@ Inline::InlineBuiltInFunction(IR::Instr *callInstr, const FunctionJITTimeInfo * StackSym* originalCallTargetStackSym = callInstr->GetSrc1()->GetStackSym(); bool originalCallTargetOpndIsJITOpt = callInstr->GetSrc1()->GetIsJITOptimizedReg(); - IR::ByteCodeUsesInstr* useCallTargetInstr = EmitFixedMethodOrFunctionObjectChecksForBuiltIns(callInstr, callInstr, inlineeData, false, true, false, true); + IR::ByteCodeUsesInstr* useCallTargetInstr = EmitFixedMethodOrFunctionObjectChecksForBuiltIns(callInstr, funcObjCheckInsertInstr, inlineeData, false, true, false, true); // To push function object for cases when we have to make calls to helper method to assist in inlining - if(inlineCallOpCode == Js::OpCode::CallDirect) + if (inlineCallOpCode == Js::OpCode::CallDirect) { IR::Instr* argoutInstr; StackSym *dstSym = callInstr->m_func->m_symTable->GetArgSlotSym((uint16)(1)); @@ -2210,7 +2125,7 @@ Inline::InlineBuiltInFunction(IR::Instr *callInstr, const FunctionJITTimeInfo * // InlineArrayPop - TrackCalls Need to be done at InlineArrayPop and not at the InlineBuiltInEnd // Hence we use a new opcode, to detect that it is an InlineArrayPop and we don't track the call during End of inlineBuiltInCall sequence - if(inlineCallOpCode == Js::OpCode::InlineArrayPop) + if (inlineCallOpCode == Js::OpCode::InlineArrayPop) { inlineBuiltInEndInstr->m_opcode = Js::OpCode::InlineNonTrackingBuiltInEnd; } @@ -2222,11 +2137,11 @@ Inline::InlineBuiltInFunction(IR::Instr *callInstr, const FunctionJITTimeInfo * callInstr->InsertBefore(useCallTargetInstr); } - if(Js::JavascriptLibrary::IsTypeSpecRequired(builtInFlags)) + if (Js::JavascriptLibrary::IsTypeSpecRequired(builtInFlags)) { // Emit byteCodeUses for function object IR::Instr * inlineBuiltInStartInstr = inlineBuiltInEndInstr; - while(inlineBuiltInStartInstr->m_opcode != Js::OpCode::InlineBuiltInStart) + while (inlineBuiltInStartInstr->m_opcode != Js::OpCode::InlineBuiltInStart) { inlineBuiltInStartInstr = inlineBuiltInStartInstr->m_prev; } @@ -2234,7 +2149,7 @@ Inline::InlineBuiltInFunction(IR::Instr *callInstr, const FunctionJITTimeInfo * IR::Opnd * tmpDst = nullptr; IR::Opnd * callInstrDst = callInstr->GetDst(); - if(callInstrDst && inlineCallOpCode != Js::OpCode::InlineArrayPop) + if (callInstrDst && inlineCallOpCode != Js::OpCode::InlineArrayPop) { StackSym * tmpSym = StackSym::New(callInstr->GetDst()->GetType(), callInstr->m_func); tmpDst = IR::RegOpnd::New(tmpSym, tmpSym->GetType(), callInstr->m_func); @@ -2253,16 +2168,16 @@ Inline::InlineBuiltInFunction(IR::Instr *callInstr, const FunctionJITTimeInfo * useCallTargetInstr = IR::ByteCodeUsesInstr::New(callInstr->GetPrevRealInstrOrLabel()); useCallTargetInstr->SetRemovedOpndSymbol(originalCallTargetOpndIsJITOpt, originalCallTargetStackSym->m_id); - if(inlineCallOpCode == Js::OpCode::InlineArrayPop) + if (inlineCallOpCode == Js::OpCode::InlineArrayPop) { - callInstr->InsertBefore(useCallTargetInstr); + callInstr->InsertBefore(useCallTargetInstr); } else { inlineBuiltInEndInstr->InsertBefore(useCallTargetInstr); } - if(tmpDst) + if (tmpDst) { IR::Instr * ldInstr = IR::Instr::New(Func::GetLoadOpForType(callInstrDst->GetType()), callInstrDst, tmpDst, callInstr->m_func); inlineBuiltInEndInstr->InsertBefore(ldInstr); @@ -2288,9 +2203,9 @@ Inline::InlineBuiltInFunction(IR::Instr *callInstr, const FunctionJITTimeInfo * if (OpCodeAttr::BailOutRec(inlineCallOpCode)) { StackSym * sym = argInstr->GetSrc1()->GetStackSym(); - if (!sym->m_isSingleDef || !sym->m_instrDef->GetSrc1() || !sym->m_instrDef->GetSrc1()->IsConstOpnd()) + if (sym->HasByteCodeRegSlot() && (!sym->m_isSingleDef || !sym->m_instrDef->GetSrc1() || !sym->m_instrDef->GetSrc1()->IsConstOpnd())) { - if (!sym->IsFromByteCodeConstantTable()) + if (!sym->IsFromByteCodeConstantTable() && sym->GetByteCodeRegSlot() != callInstrDst->GetStackSym()->GetByteCodeRegSlot()) { byteCodeUsesInstr->Set(argInstr->GetSrc1()); } @@ -2323,7 +2238,7 @@ Inline::InlineBuiltInFunction(IR::Instr *callInstr, const FunctionJITTimeInfo * return false; }); - if(inlineCallOpCode == Js::OpCode::InlineMathImul || inlineCallOpCode == Js::OpCode::InlineMathClz) + if (inlineCallOpCode == Js::OpCode::InlineMathImul || inlineCallOpCode == Js::OpCode::InlineMathClz) { // Convert: // s1 = InlineMathImul s2, s3 @@ -2359,7 +2274,7 @@ Inline::InlineBuiltInFunction(IR::Instr *callInstr, const FunctionJITTimeInfo * } } - if(OpCodeAttr::BailOutRec(inlineCallOpCode)) + if (OpCodeAttr::BailOutRec(inlineCallOpCode)) { inlineBuiltInEndInstr->InsertBefore(byteCodeUsesInstr); } @@ -2371,7 +2286,7 @@ Inline::InlineBuiltInFunction(IR::Instr *callInstr, const FunctionJITTimeInfo * // and not adjust the stack height on x86 linkOpnd->AsRegOpnd()->m_sym->m_isInlinedArgSlot = true; - if(OpCodeAttr::BailOutRec(inlineCallOpCode)) + if (OpCodeAttr::BailOutRec(inlineCallOpCode)) { callInstr = callInstr->ConvertToBailOutInstr(callInstr, IR::BailOutOnFloor); } @@ -2379,81 +2294,229 @@ Inline::InlineBuiltInFunction(IR::Instr *callInstr, const FunctionJITTimeInfo * return inlineBuiltInEndInstr->m_next; } -IR::Instr* Inline::InsertInlineeBuiltInStartEndTags(IR::Instr* callInstr, uint actualCount, IR::Instr** builtinStartInstr) +bool +Inline::CanInlineBuiltInFunction(IR::Instr *callInstr, const FunctionJITTimeInfo * inlineeData, Js::OpCode inlineCallOpCode, const FunctionJITTimeInfo * inlinerData, Js::BuiltinFunction builtInId, bool isCallApplyTarget) { - IR::Instr* inlineBuiltInStartInstr = IR::Instr::New(Js::OpCode::InlineBuiltInStart, callInstr->m_func); - inlineBuiltInStartInstr->SetSrc1(callInstr->GetSrc1()); - inlineBuiltInStartInstr->SetSrc2(callInstr->GetSrc2()); - inlineBuiltInStartInstr->SetByteCodeOffset(callInstr); - callInstr->InsertBefore(inlineBuiltInStartInstr); - if (builtinStartInstr) +#if defined(DBG_DUMP) || defined(ENABLE_DEBUG_CONFIG_OPTIONS) + char16 debugStringBuffer[MAX_FUNCTION_BODY_DEBUG_STRING_SIZE]; +#endif + if (inlineCallOpCode == 0) { - *builtinStartInstr = inlineBuiltInStartInstr; + return false; } - IR::Instr* inlineBuiltInEndInstr = IR::Instr::New(Js::OpCode::InlineBuiltInEnd, callInstr->m_func); - inlineBuiltInEndInstr->SetSrc1(IR::IntConstOpnd::New(actualCount, TyInt32, callInstr->m_func)); - inlineBuiltInEndInstr->SetSrc2(callInstr->GetSrc2()); - inlineBuiltInEndInstr->SetByteCodeOffset(callInstr); - callInstr->InsertAfter(inlineBuiltInEndInstr); - return inlineBuiltInEndInstr; -} - -IR::Instr* Inline::GetDefInstr(IR::Opnd* linkOpnd) -{ - StackSym *linkSym = linkOpnd->AsSymOpnd()->m_sym->AsStackSym(); - Assert(linkSym->m_isSingleDef); - Assert(linkSym->IsArgSlotSym()); - - return linkSym->m_instrDef; -} - -IR::Instr* Inline::InlineApply(IR::Instr *callInstr, const FunctionJITTimeInfo *applyData, const FunctionJITTimeInfo * inlinerData, const StackSym *symCallerThis, bool* pIsInlined, uint callSiteId, uint recursiveInlineDepth, uint argsCount) -{ - // We may still decide not to inline. - *pIsInlined = false; - - IR::Instr* instrNext = callInstr->m_next; - if (argsCount == 0) + if (inlineCallOpCode == Js::OpCode::InlineMathFloor || inlineCallOpCode == Js::OpCode::InlineMathCeil || inlineCallOpCode == Js::OpCode::InlineMathRound) { - return instrNext; +#if defined(_M_IX86) || defined(_M_X64) + if (!AutoSystemInfo::Data.SSE4_1Available()) + { + INLINE_TESTTRACE(_u("INLINING: Skip Inline: SSE4.1 not available\tInlinee: %s (#%d)\tCaller: %s\n"), Js::JavascriptLibrary::GetNameForBuiltIn(builtInId), (int)builtInId, inlinerData->GetBody()->GetDisplayName()); + return false; + } +#endif + if (callInstr->m_func->GetTopFunc()->HasProfileInfo() && callInstr->m_func->GetTopFunc()->GetReadOnlyProfileInfo()->IsFloorInliningDisabled()) + { + INLINE_TESTTRACE(_u("INLINING: Skip Inline: Floor Inlining Disabled\tInlinee: %s (#%d)\tCaller: %s\n"), Js::JavascriptLibrary::GetNameForBuiltIn(builtInId), (int)builtInId, inlinerData->GetBody()->GetDisplayName()); + return false; + } } - Js::BuiltinFunction builtInId = Js::JavascriptLibrary::GetBuiltInForFuncInfo(applyData->GetLocalFunctionId()); - const FunctionJITTimeInfo * inlineeData = nullptr; - - IR::Instr* arrayArgInstr = nullptr; - IR::Opnd *arrayArgOpnd = nullptr; - if (argsCount == 2) // apply was called with 2 arguments, most common case + if (callInstr->GetSrc2() && + callInstr->GetSrc2()->IsSymOpnd() && + callInstr->GetSrc2()->AsSymOpnd()->m_sym->AsStackSym()->GetArgSlotNum() > Js::InlineeCallInfo::MaxInlineeArgoutCount) { - IR::SymOpnd* linkOpnd = callInstr->GetSrc2()->AsSymOpnd(); - StackSym *arrayArgsym = linkOpnd->AsSymOpnd()->m_sym->AsStackSym(); - Assert(arrayArgsym->m_isSingleDef); - Assert(arrayArgsym->IsArgSlotSym()); - - arrayArgInstr = arrayArgsym->m_instrDef; - arrayArgOpnd = arrayArgInstr->GetSrc1(); + // This is a hard limit as we only use 4 bits to encode the actual count in the InlineeCallInfo. Although + // InliningDecider already checks for this, the check is against profile data that may not be accurate since profile + // data matching does not take into account some types of changes to source code. Need to check this again with current + // information. + INLINE_TESTTRACE(_u("INLINING: Skip Inline: ArgSlot > MaxInlineeArgoutCount\tInlinee: %s (#%d)\tArgSlotNum: %d\tMaxInlineeArgoutCount: %d\tCaller: %s (#%d)\n"), + Js::JavascriptLibrary::GetNameForBuiltIn(builtInId), (int)builtInId, callInstr->GetSrc2()->AsSymOpnd()->m_sym->AsStackSym()->GetArgSlotNum(), + Js::InlineeCallInfo::MaxInlineeArgoutCount, inlinerData->GetBody()->GetDisplayName(), inlinerData->GetDebugNumberSet(debugStringBuffer)); + return false; } - // if isArrayOpndArgumentsObject == false, the array opnd can still be the arguments object; we just can't say that for sure - bool isArrayOpndArgumentsObject = arrayArgOpnd && arrayArgOpnd->IsArgumentsObject(); + Js::BuiltInFlags builtInFlags = Js::JavascriptLibrary::GetFlagsForBuiltIn(builtInId); - IR::Instr * returnInstr = nullptr; - if (!PHASE_OFF(Js::InlineApplyTargetPhase, this->topFunc)) + bool isAnyArgFloat = (builtInFlags & Js::BuiltInFlags::BIF_TypeSpecAllToFloat) != 0; + if (isAnyArgFloat && !GlobOpt::DoFloatTypeSpec(this->topFunc)) { - if (InlineApplyScriptTarget(callInstr, inlinerData, &inlineeData, applyData, symCallerThis, &returnInstr, recursiveInlineDepth, isArrayOpndArgumentsObject, argsCount)) - { - *pIsInlined = true; - Assert(returnInstr); - return returnInstr; - } + INLINE_TESTTRACE(_u("INLINING: Skip Inline: float type spec is off\tInlinee: %s (#%d)\tCaller: %s (%s)\n"), + Js::JavascriptLibrary::GetNameForBuiltIn(builtInId), (int)builtInId, + inlinerData->GetBody()->GetDisplayName(), inlinerData->GetDebugNumberSet(debugStringBuffer)); + return false; } -#if defined(ENABLE_DEBUG_CONFIG_OPTIONS) - char16 debugStringBuffer[MAX_FUNCTION_BODY_DEBUG_STRING_SIZE]; -#endif + bool canDstBeFloat = (builtInFlags & Js::BuiltInFlags::BIF_TypeSpecDstToFloat) != 0; + if (canDstBeFloat && !Js::JavascriptLibrary::CanFloatPreferenceFunc(builtInId) && inlineCallOpCode != Js::OpCode::InlineArrayPop) + { + // Note that for Math.abs that means that even though it can potentially be type-spec'd to int, we won't inline it. + // Some built-in functions, such as atan2, are disabled for float-pref. + INLINE_TESTTRACE(_u("INLINING: Skip Inline: Cannot float-type-spec the inlinee\tInlinee: %s (#%d)\tCaller: %s (%s)\n"), + Js::JavascriptLibrary::GetNameForBuiltIn(builtInId), (int)builtInId, // Get the _value (cause operator _E) to avoid using struct directly. + inlinerData->GetBody()->GetDisplayName(), inlinerData->GetDebugNumberSet(debugStringBuffer)); + return false; + } - if (argsCount == 1) // apply called with just 1 argument, the 'this' object. + bool isAnyArgInt = (builtInFlags & (Js::BuiltInFlags::BIF_TypeSpecDstToInt | Js::BuiltInFlags::BIF_TypeSpecSrc1ToInt | Js::BuiltInFlags::BIF_TypeSpecSrc2ToInt)) != 0; + if (isAnyArgInt && !GlobOpt::DoAggressiveIntTypeSpec(this->topFunc)) + { + // Note that for Math.abs that means that even though it can potentially be type-spec'd to float, we won't inline it. + INLINE_TESTTRACE(_u("INLINING: Skip Inline: int type spec is off\tInlinee: %s (#%d)\tCaller: %s (%s)\n"), + Js::JavascriptLibrary::GetNameForBuiltIn(builtInId), (int)builtInId, + inlinerData->GetBody()->GetDisplayName(), inlinerData->GetDebugNumberSet(debugStringBuffer)); + return false; + } + + if (inlineCallOpCode == Js::OpCode::InlineMathImul && !GlobOpt::DoLossyIntTypeSpec(topFunc)) + { + INLINE_TESTTRACE(_u("INLINING: Skip Inline: lossy int type spec is off, it's required for Math.imul to do | 0 on src opnds\tInlinee: %s (#%d)\tCaller: %s (%s)\n"), + Js::JavascriptLibrary::GetNameForBuiltIn(builtInId), (int)builtInId, + inlinerData->GetBody()->GetDisplayName(), inlinerData->GetDebugNumberSet(debugStringBuffer)); + return false; + } + + if (inlineCallOpCode == Js::OpCode::InlineMathClz && !GlobOpt::DoLossyIntTypeSpec(topFunc)) + { + INLINE_TESTTRACE(_u("INLINING: Skip Inline: lossy int type spec is off, it's required for Math.clz32 to do | 0 on src opnds\tInlinee: %s (#%d)\tCaller: %s (%s)\n"), + Js::JavascriptLibrary::GetNameForBuiltIn(builtInId), (int)builtInId, + inlinerData->GetBody()->GetDisplayName(), inlinerData->GetDebugNumberSet(debugStringBuffer)); + return false; + } + + if (inlineCallOpCode == Js::OpCode::InlineFunctionApply && (!callInstr->m_func->GetHasStackArgs() || this->topFunc->GetJITFunctionBody()->IsInlineApplyDisabled())) + { + INLINE_TESTTRACE(_u("INLINING: Skip Inline: stack args of inlining is off\tInlinee: %s (#%d)\tCaller: %s (%s)\n"), + Js::JavascriptLibrary::GetNameForBuiltIn(builtInId), (int)builtInId, + inlinerData->GetBody()->GetDisplayName(), inlinerData->GetDebugNumberSet(debugStringBuffer)); + return false; + } + + // TODO: when adding support for other type spec args (array, string) do appropriate check as well. + + Assert(callInstr->GetSrc1()); + Assert(callInstr->GetSrc1()->IsRegOpnd()); + Assert(callInstr->GetSrc1()->AsRegOpnd()->m_sym); + + if (!(builtInFlags & Js::BuiltInFlags::BIF_IgnoreDst) && callInstr->GetDst() == nullptr && inlineCallOpCode != Js::OpCode::InlineArrayPop) + { + // Is seems that it's not worth optimizing odd cases where the result is unused. + INLINE_TESTTRACE(_u("INLINING: Skip Inline: inlinee's return value is not assigned to anything\tInlinee: %s (#%d)\tCaller: %s (%s)\n"), + Js::JavascriptLibrary::GetNameForBuiltIn(builtInId), (int)builtInId, + inlinerData->GetBody()->GetDisplayName(), inlinerData->GetDebugNumberSet(debugStringBuffer)); + return false; + } + + // Number of arguments, not including "this". + IntConstType requiredInlineCallArgCount = (IntConstType)Js::JavascriptLibrary::GetArgCForBuiltIn(builtInId); + + IR::Opnd* linkOpnd = callInstr->GetSrc2(); + Js::ArgSlot actualCount = linkOpnd->AsSymOpnd()->m_sym->AsStackSym()->GetArgSlotNum() - (isCallApplyTarget ? 1 : 0); + + // Check for missing actuals: + // if number of passed params to built-in function is not what it needs, don't inline. + bool usesThisArgument = (builtInFlags & Js::BuiltInFlags::BIF_UseSrc0) != 0; + int inlineCallArgCount = (int)(usesThisArgument ? actualCount : actualCount - 1); + Assert(inlineCallArgCount >= 0); + + if (linkOpnd->IsSymOpnd()) + { + if ((builtInFlags & Js::BuiltInFlags::BIF_VariableArgsNumber) != 0) + { + if (inlineCallArgCount > requiredInlineCallArgCount) + { + INLINE_TESTTRACE(_u("INLINING: Skip Inline: parameter count exceeds the maximum number of parameters allowed\tInlinee: %s (#%d)\tCaller: %s (%s)\n"), + Js::JavascriptLibrary::GetNameForBuiltIn(builtInId), (int)builtInId, + inlinerData->GetBody()->GetDisplayName(), inlinerData->GetDebugNumberSet(debugStringBuffer)); + return false; + } + } + else if (inlineCallArgCount != requiredInlineCallArgCount) + { + INLINE_TESTTRACE(_u("INLINING: Skip Inline: parameter count doesn't match dynamic profile\tInlinee: %s (#%d)\tCaller: %s (%s)\n"), + Js::JavascriptLibrary::GetNameForBuiltIn(builtInId), (int)builtInId, + inlinerData->GetBody()->GetDisplayName(), inlinerData->GetDebugNumberSet(debugStringBuffer)); + return false; + } + } + + return true; +} + +IR::Instr* Inline::InsertInlineeBuiltInStartEndTags(IR::Instr* callInstr, uint actualCount, IR::Instr** builtinStartInstr) +{ + IR::Instr* inlineBuiltInStartInstr = IR::Instr::New(Js::OpCode::InlineBuiltInStart, callInstr->m_func); + inlineBuiltInStartInstr->SetSrc1(callInstr->GetSrc1()); + inlineBuiltInStartInstr->SetSrc2(callInstr->GetSrc2()); + inlineBuiltInStartInstr->SetByteCodeOffset(callInstr); + callInstr->InsertBefore(inlineBuiltInStartInstr); + if (builtinStartInstr) + { + *builtinStartInstr = inlineBuiltInStartInstr; + } + + IR::Instr* inlineBuiltInEndInstr = IR::Instr::New(Js::OpCode::InlineBuiltInEnd, callInstr->m_func); + inlineBuiltInEndInstr->SetSrc1(IR::IntConstOpnd::New(actualCount, TyInt32, callInstr->m_func)); + inlineBuiltInEndInstr->SetSrc2(callInstr->GetSrc2()); + inlineBuiltInEndInstr->SetByteCodeOffset(callInstr); + callInstr->InsertAfter(inlineBuiltInEndInstr); + return inlineBuiltInEndInstr; +} + +IR::Instr* Inline::GetDefInstr(IR::Opnd* linkOpnd) +{ + StackSym *linkSym = linkOpnd->AsSymOpnd()->m_sym->AsStackSym(); + Assert(linkSym->m_isSingleDef); + Assert(linkSym->IsArgSlotSym()); + + return linkSym->m_instrDef; +} + +IR::Instr* Inline::InlineApply(IR::Instr *callInstr, const FunctionJITTimeInfo *applyData, const FunctionJITTimeInfo * inlinerData, const StackSym *symCallerThis, bool* pIsInlined, uint callSiteId, uint recursiveInlineDepth, uint argsCount) +{ + // We may still decide not to inline. + *pIsInlined = false; + + IR::Instr* instrNext = callInstr->m_next; + if (argsCount == 0) + { + return instrNext; + } + + Js::BuiltinFunction builtInId = Js::JavascriptLibrary::GetBuiltInForFuncInfo(applyData->GetLocalFunctionId()); + const FunctionJITTimeInfo * inlineeData = nullptr; + + IR::Instr* arrayArgInstr = nullptr; + IR::Opnd *arrayArgOpnd = nullptr; + if (argsCount == 2) // apply was called with 2 arguments, most common case + { + IR::SymOpnd* linkOpnd = callInstr->GetSrc2()->AsSymOpnd(); + StackSym *arrayArgsym = linkOpnd->AsSymOpnd()->m_sym->AsStackSym(); + Assert(arrayArgsym->m_isSingleDef); + Assert(arrayArgsym->IsArgSlotSym()); + + arrayArgInstr = arrayArgsym->m_instrDef; + arrayArgOpnd = arrayArgInstr->GetSrc1(); + } + + // if isArrayOpndArgumentsObject == false, the array opnd can still be the arguments object; we just can't say that for sure + bool isArrayOpndArgumentsObject = arrayArgOpnd && arrayArgOpnd->IsArgumentsObject(); + + IR::Instr * returnInstr = nullptr; + if (!PHASE_OFF(Js::InlineApplyTargetPhase, this->topFunc)) + { + if (InlineApplyScriptTarget(callInstr, inlinerData, &inlineeData, applyData, symCallerThis, &returnInstr, recursiveInlineDepth, isArrayOpndArgumentsObject, argsCount)) + { + *pIsInlined = true; + Assert(returnInstr); + return returnInstr; + } + } + +#if defined(ENABLE_DEBUG_CONFIG_OPTIONS) + char16 debugStringBuffer[MAX_FUNCTION_BODY_DEBUG_STRING_SIZE]; +#endif + + if (argsCount == 1) // apply called with just 1 argument, the 'this' object. { if (PHASE_OFF1(Js::InlineApplyWithoutArrayArgPhase)) { @@ -2474,8 +2537,6 @@ IR::Instr* Inline::InlineApply(IR::Instr *callInstr, const FunctionJITTimeInfo * { if (inlineeData && inlineeData->GetBody() == nullptr) { - *pIsInlined = true; - #if defined(ENABLE_DEBUG_CONFIG_OPTIONS) TraceInlining(inlinerData, Js::JavascriptLibrary::GetNameForBuiltIn(builtInId), nullptr, 0, this->topFunc->GetWorkItem()->GetJITTimeInfo(), 0, nullptr, callSiteId, callInstr->m_func->GetTopFunc()->IsLoopBody(), builtInId); @@ -2483,7 +2544,7 @@ IR::Instr* Inline::InlineApply(IR::Instr *callInstr, const FunctionJITTimeInfo * // TODO: OOP JIT enable assert (readprocessmemory?) //Assert((inlineeData->GetFunctionInfo()->GetAttributes() & Js::FunctionInfo::Attributes::BuiltInInlinableAsLdFldInlinee) != 0); - return InlineApplyBuiltInTargetWithArray(callInstr, applyData, inlineeData); + return InlineApplyBuiltInTargetWithArray(callInstr, applyData, inlineeData, pIsInlined); } else { @@ -2563,7 +2624,8 @@ IR::Instr * Inline::InlineApplyWithArgumentsObject(IR::Instr * callInstr, IR::In // Optimize .init.apply(this, arguments); IR::Instr* builtInStartInstr; - InsertInlineeBuiltInStartEndTags(callInstr, 3, &builtInStartInstr); //3 args (implicit this + explicit this + arguments = 3) + IR::Instr *instr = InsertInlineeBuiltInStartEndTags(callInstr, 3, &builtInStartInstr); //3 args (implicit this + explicit this + arguments = 3) + instr->m_opcode = Js::OpCode::InlineNonTrackingBuiltInEnd; // Move argouts close to call. Globopt expects this for arguments object tracking. IR::Instr* argInsertInstr = builtInStartInstr; @@ -2601,9 +2663,25 @@ IR::Instr * Inline::InlineApplyWithArgumentsObject(IR::Instr * callInstr, IR::In /* This method will only do CallDirect style inlining of built-in targets. No script function inlining. */ -IR::Instr * Inline::InlineApplyBuiltInTargetWithArray(IR::Instr * callInstr, const FunctionJITTimeInfo * applyInfo, const FunctionJITTimeInfo * builtInInfo) +IR::Instr * Inline::InlineApplyBuiltInTargetWithArray(IR::Instr * callInstr, const FunctionJITTimeInfo * applyInfo, const FunctionJITTimeInfo * builtInInfo, bool * pIsInlined) { - IR::Instr* instrNext = callInstr->m_next; + IR::Instr * instrNext = callInstr->m_next; + Js::BuiltinFunction builtInId = Js::JavascriptLibrary::GetBuiltInForFuncInfo(builtInInfo->GetLocalFunctionId()); + IR::HelperCallOpnd * helperCallOpnd = nullptr; + switch (builtInId) + { + case Js::BuiltinFunction::Math_Max: + helperCallOpnd = IR::HelperCallOpnd::New(IR::HelperOp_MaxInAnArray, callInstr->m_func); + break; + + case Js::BuiltinFunction::Math_Min: + helperCallOpnd = IR::HelperCallOpnd::New(IR::HelperOp_MinInAnArray, callInstr->m_func); + break; + + default: + return instrNext; + } + IR::Instr * implicitThisArgOut = nullptr; IR::Instr * explicitThisArgOut = nullptr; IR::Instr * arrayArgOut = nullptr; @@ -2619,10 +2697,12 @@ IR::Instr * Inline::InlineApplyBuiltInTargetWithArray(IR::Instr * callInstr, con IR::Instr* applyLdInstr = nullptr; IR::Instr* applyTargetLdInstr = nullptr; - if (!TryGetApplyAndTargetLdInstrs(callInstr, &applyLdInstr, &applyTargetLdInstr)) + if (!TryGetCallApplyAndTargetLdInstrs(callInstr, &applyLdInstr, &applyTargetLdInstr)) { return instrNext; } + + *pIsInlined = true; // Fixed function/function object checks for target built-in callInstr->ReplaceSrc1(applyTargetLdInstr->GetDst()); { @@ -2666,22 +2746,6 @@ IR::Instr * Inline::InlineApplyBuiltInTargetWithArray(IR::Instr * callInstr, con argOut = IR::Instr::New(Js::OpCode::ArgOut_A_InlineSpecialized, linkOpnd, implicitThisArgOut->GetSrc1(), argOut->GetDst(), callInstr->m_func); callInstr->InsertBefore(argOut); - Js::BuiltinFunction builtInId = Js::JavascriptLibrary::GetBuiltInForFuncInfo(builtInInfo->GetLocalFunctionId()); - IR::HelperCallOpnd * helperCallOpnd = nullptr; - switch (builtInId) - { - case Js::BuiltinFunction::Math_Max: - helperCallOpnd = IR::HelperCallOpnd::New(IR::HelperOp_MaxInAnArray, callInstr->m_func); - break; - - case Js::BuiltinFunction::Math_Min: - helperCallOpnd = IR::HelperCallOpnd::New(IR::HelperOp_MinInAnArray, callInstr->m_func); - break; - - default: - Assert(false); - __assume(UNREACHED); - } callInstr->m_opcode = Js::OpCode::CallDirect; callInstr->ReplaceSrc1(helperCallOpnd); callInstr->ReplaceSrc2(argOut->GetDst()); @@ -2691,7 +2755,7 @@ IR::Instr * Inline::InlineApplyBuiltInTargetWithArray(IR::Instr * callInstr, con IR::Instr * Inline::InlineApplyWithoutArrayArgument(IR::Instr *callInstr, const FunctionJITTimeInfo * applyInfo, const FunctionJITTimeInfo * applyTargetInfo) { - IR::Instr* instrNext = callInstr->m_next; + IR::Instr * instrNext = callInstr->m_next; IR::Instr * implicitThisArgOut = nullptr; IR::Instr * explicitThisArgOut = nullptr; IR::Instr * dummyInstr = nullptr; @@ -2703,7 +2767,8 @@ IR::Instr * Inline::InlineApplyWithoutArrayArgument(IR::Instr *callInstr, const EmitFixedMethodOrFunctionObjectChecksForBuiltIns(callInstr, callInstr, applyInfo, false /*isPolymorphic*/, true /*isBuiltIn*/, false /*isCtor*/, true /*isInlined*/); - InsertInlineeBuiltInStartEndTags(callInstr, 2); // 2 args (implicit this + explicit this) + IR::Instr *instr = InsertInlineeBuiltInStartEndTags(callInstr, 2); // 2 args (implicit this + explicit this) + instr->m_opcode = Js::OpCode::InlineNonTrackingBuiltInEnd; IR::Instr * startCall = IR::Instr::New(Js::OpCode::StartCall, IR::RegOpnd::New(TyVar, callInstr->m_func), @@ -2775,19 +2840,124 @@ void Inline::GetArgInstrsForCallAndApply(IR::Instr* callInstr, IR::Instr** impli } _Success_(return != false) -bool Inline::TryGetApplyAndTargetLdInstrs(IR::Instr * callInstr, _Outptr_result_nullonfailure_ IR::Instr ** applyLdInstr, _Outptr_result_nullonfailure_ IR::Instr ** applyTargetLdInstr) +bool Inline::TryGetCallApplyAndTargetLdInstrs(IR::Instr * callInstr, _Outptr_result_nullonfailure_ IR::Instr ** applyLdInstr, _Outptr_result_nullonfailure_ IR::Instr ** applyTargetLdInstr) { IR::Opnd* applyOpnd = callInstr->GetSrc1(); Assert(applyOpnd->IsRegOpnd()); - StackSym* applySym = applyOpnd->AsRegOpnd()->m_sym->AsStackSym(); - if (!applySym->IsSingleDef()) + StackSym* applySym = applyOpnd->AsRegOpnd()->m_sym->AsStackSym(); + if (!applySym->IsSingleDef() || + !applySym->GetInstrDef()->GetSrc1()->IsSymOpnd() || + !applySym->GetInstrDef()->GetSrc1()->AsSymOpnd()->IsPropertySymOpnd()) { *applyLdInstr = nullptr; *applyTargetLdInstr = nullptr; return false; } - *applyLdInstr = applySym->GetInstrDef();; - *applyTargetLdInstr = (*applyLdInstr)->m_prev; + + Assert(applySym->GetInstrDef()->GetSrc1()->IsSymOpnd() && applySym->GetInstrDef()->GetSrc1()->AsSymOpnd()->IsPropertySymOpnd()); + StackSym * targetSym = applySym->GetInstrDef()->GetSrc1()->AsSymOpnd()->AsPropertySymOpnd()->GetObjectSym(); + if (!targetSym->IsSingleDef()) + { + *applyLdInstr = nullptr; + *applyTargetLdInstr = nullptr; + return false; + } + + *applyLdInstr = applySym->GetInstrDef(); + *applyTargetLdInstr = targetSym->GetInstrDef(); + return true; +} + +bool +Inline::TryGetCallApplyInlineeData( + const FunctionJITTimeInfo* inlinerData, + IR::Instr * callInstr, + IR::Instr * callApplyLdInstr, + IR::Instr * callApplyTargetLdInstr, + const FunctionJITTimeInfo ** inlineeData, + Js::InlineCacheIndex * inlineCacheIndex, + IR::Instr ** callbackDefInstr, + bool isCallInstanceFunction, + CallApplyTargetSourceType* targetType + ) +{ + *callbackDefInstr = nullptr; + + if (callApplyTargetLdInstr->m_opcode == Js::OpCode::LdFldForCallApplyTarget && + ((callApplyTargetLdInstr->AsProfiledInstr()->u.FldInfo().flags & Js::FldInfo_FromAccessor) == 0)) + { + IR::Opnd *callTargetLdOpnd = callApplyTargetLdInstr->GetSrc1(); + if (!callTargetLdOpnd->IsSymOpnd() || !callTargetLdOpnd->AsSymOpnd()->IsPropertySymOpnd()) + { + return false; + } + + *inlineCacheIndex = callTargetLdOpnd->AsPropertySymOpnd()->m_inlineCacheIndex; + *inlineeData = inlinerData->GetLdFldInlinee(*inlineCacheIndex); + } + + if (*inlineeData) + { + *targetType = CallApplyTargetSourceType::LdFld; + return true; + } + + if (TryGetCallApplyCallbackTargetInlineeData(inlinerData, callInstr, callApplyLdInstr, inlineeData, callbackDefInstr, isCallInstanceFunction)) + { + *targetType = CallApplyTargetSourceType::Callback; + return true; + } + + if (!isCallInstanceFunction && !PHASE_OFF(Js::InlineAnyCallApplyTargetPhase, callInstr->m_func)) + { + Js::ProfileId callSiteId = static_cast(callInstr->AsProfiledInstr()->u.profileId); + Js::ProfileId callApplyCallSiteId = callInstr->m_func->GetJITFunctionBody()->GetCallApplyCallSiteIdForCallSiteId(callSiteId); + + if (callApplyCallSiteId != Js::Constants::NoProfileId) + { + *inlineeData = callInstr->m_func->GetWorkItem()->GetJITTimeInfo()->GetCallApplyTargetInlinee(callApplyCallSiteId); + } + } + if (*inlineeData) + { + *targetType = CallApplyTargetSourceType::Other; + } + return *inlineeData != nullptr; +} + +bool +Inline::TryGetCallApplyCallbackTargetInlineeData( + const FunctionJITTimeInfo* inlinerData, + IR::Instr * callInstr, + IR::Instr * callApplyLdInstr, + const FunctionJITTimeInfo ** inlineeData, + IR::Instr ** callbackDefInstr, + bool isCallInstanceFunction) +{ + // Try to find a callback def instr for the method. + if (isCallInstanceFunction) + { + *callbackDefInstr = TryGetCallbackDefInstrForCallInstanceFunction(callInstr); + } + else + { + *callbackDefInstr = TryGetCallbackDefInstrForCallApplyTarget(callApplyLdInstr); + } + + if (*callbackDefInstr == nullptr) + { + return false; + } + + Js::ProfileId callSiteId = static_cast((*callbackDefInstr)->AsProfiledInstr()->u.profileId); + *inlineeData = (*callbackDefInstr)->m_func->GetWorkItem()->GetJITTimeInfo()->GetCallbackInlinee(callSiteId); + +#if ENABLE_DEBUG_CONFIG_OPTIONS + char16 debugStringBuffer[MAX_FUNCTION_BODY_DEBUG_STRING_SIZE]; + INLINE_CALLBACKS_TRACE(_u("INLINING : Found callback def instr for call/apply target callback at\tCallSite: %d\tCaller: %s (%s)\n"), + callSiteId, inlinerData->GetBody()->GetDisplayName(), inlinerData->GetDebugNumberSet(debugStringBuffer)); +#endif + return true; } @@ -2814,26 +2984,20 @@ bool Inline::InlineApplyScriptTarget(IR::Instr *callInstr, const FunctionJITTime IR::Instr* applyLdInstr = nullptr; IR::Instr* applyTargetLdInstr = nullptr; - if (!TryGetApplyAndTargetLdInstrs(callInstr, &applyLdInstr, &applyTargetLdInstr)) + if (!TryGetCallApplyAndTargetLdInstrs(callInstr, &applyLdInstr, &applyTargetLdInstr)) { return false; } - if(applyTargetLdInstr->m_opcode != Js::OpCode::LdFldForCallApplyTarget || - ((applyTargetLdInstr->AsProfiledInstr()->u.FldInfo().flags & Js::FldInfo_FromAccessor) != 0)) - { - return false; - } - - IR::Opnd *applyTargetLdOpnd = applyTargetLdInstr->GetSrc1(); - if (!applyTargetLdOpnd->IsSymOpnd() || !applyTargetLdOpnd->AsSymOpnd()->IsPropertySymOpnd()) + const FunctionJITTimeInfo * inlineeData = nullptr; + Js::InlineCacheIndex inlineCacheIndex = Js::Constants::NoInlineCacheIndex; + IR::Instr * callbackDefInstr = nullptr; + CallApplyTargetSourceType targetType = CallApplyTargetSourceType::None; + if (!TryGetCallApplyInlineeData(inlinerData, callInstr, applyLdInstr, applyTargetLdInstr, &inlineeData, &inlineCacheIndex, &callbackDefInstr, false, &targetType)) { return false; } - const auto inlineCacheIndex = applyTargetLdOpnd->AsPropertySymOpnd()->m_inlineCacheIndex; - const auto inlineeData = inlinerData->GetLdFldInlinee(inlineCacheIndex); - if ((!isArrayOpndArgumentsObject && (argsCount != 1)) || SkipCallApplyScriptTargetInlining_Shared(callInstr, inlinerData, inlineeData, /*isApplyTarget*/ true, /*isCallTarget*/ false)) { *pInlineeData = inlineeData; @@ -2847,10 +3011,13 @@ bool Inline::InlineApplyScriptTarget(IR::Instr *callInstr, const FunctionJITTime return false; } + const bool targetIsCallback = callbackDefInstr != nullptr; + StackSym* originalCallTargetStackSym = callInstr->GetSrc1()->GetStackSym(); bool originalCallTargetOpndIsJITOpt = callInstr->GetSrc1()->GetIsJITOptimizedReg(); bool safeThis = false; - if (!TryGetFixedMethodsForBuiltInAndTarget(callInstr, inlinerData, inlineeData, applyFuncInfo, applyLdInstr, applyTargetLdInstr, safeThis, /*isApplyTarget*/ true)) + + if (!TryGetFixedMethodsForBuiltInAndTarget(callInstr, inlinerData, inlineeData, applyFuncInfo, applyLdInstr, applyTargetLdInstr, safeThis, /*isApplyTarget*/ true, targetIsCallback)) { return false; } @@ -2913,15 +3080,23 @@ bool Inline::InlineApplyScriptTarget(IR::Instr *callInstr, const FunctionJITTime // set src1 to avoid CSE on BailOnNotStackArgs for different arguments object bailOutOnNotStackArgs->SetSrc1(argumentsObjArgOut->GetSrc1()->Copy(this->topFunc)); argumentsObjArgOut->InsertBefore(bailOutOnNotStackArgs); + + // Insert ByteCodeUses instr to ensure that arguments object is available on bailout + IR::ByteCodeUsesInstr* bytecodeUses = IR::ByteCodeUsesInstr::New(callInstr); + IR::Opnd* argSrc1 = argObjByteCodeArgoutCapture->GetSrc1(); + bytecodeUses->SetRemovedOpndSymbol(argSrc1->GetIsJITOptimizedReg(), argSrc1->GetStackSym()->m_id); + callInstr->InsertBefore(bytecodeUses); } IR::Instr* byteCodeArgOutUse = IR::Instr::New(Js::OpCode::BytecodeArgOutUse, callInstr->m_func); byteCodeArgOutUse->SetSrc1(implicitThisArgOut->GetSrc1()); + callInstr->InsertBefore(byteCodeArgOutUse); if (argumentsObjArgOut) { - byteCodeArgOutUse->SetSrc2(argumentsObjArgOut->GetSrc1()); + byteCodeArgOutUse = IR::Instr::New(Js::OpCode::BytecodeArgOutUse, callInstr->m_func); + byteCodeArgOutUse->SetSrc1(argumentsObjArgOut->GetSrc1()); + callInstr->InsertBefore(byteCodeArgOutUse); } - callInstr->InsertBefore(byteCodeArgOutUse); // don't need the implicit "this" anymore explicitThisArgOut->ReplaceSrc2(startCall->GetDst()); @@ -2931,15 +3106,34 @@ bool Inline::InlineApplyScriptTarget(IR::Instr *callInstr, const FunctionJITTime startCall->GetSrc1()->AsIntConstOpnd()->IncrValue(-1); // update the count of argouts as seen by JIT, in the start call instruction *returnInstr = InlineCallApplyTarget_Shared(callInstr, originalCallTargetOpndIsJITOpt, originalCallTargetStackSym, inlineeData, inlineCacheIndex, - safeThis, /*isApplyTarget*/ true, /*isCallTarget*/ false, recursiveInlineDepth); + safeThis, /*isApplyTarget*/ true, targetType, callbackDefInstr, recursiveInlineDepth, callInstr); return true; } IR::Instr * -Inline::InlineCallApplyTarget_Shared(IR::Instr *callInstr, bool originalCallTargetOpndIsJITOpt, StackSym* originalCallTargetStackSym, const FunctionJITTimeInfo *const inlineeData, - uint inlineCacheIndex, bool safeThis, bool isApplyTarget, bool isCallTarget, uint recursiveInlineDepth) +Inline::InlineCallApplyTarget_Shared( + IR::Instr *callInstr, + bool originalCallTargetOpndIsJITOpt, + StackSym* originalCallTargetStackSym, + const FunctionJITTimeInfo *const inlineeData, + uint inlineCacheIndex, + bool safeThis, + bool isApplyTarget, + CallApplyTargetSourceType targetType, + IR::Instr * inlineeDefInstr, + uint recursiveInlineDepth, + IR::Instr * funcObjCheckInsertInstr) { - Assert(isApplyTarget ^ isCallTarget); + const bool isCallback = inlineeDefInstr != nullptr; + +#if ENABLE_DEBUG_CONFIG_OPTIONS + if (isCallback) + { + char16 debugStringBuffer[MAX_FUNCTION_BODY_DEBUG_STRING_SIZE]; + INLINE_CALLBACKS_TRACE(_u("INLINING CALLBACK : Inlining callback for call/apply target : \t%s (%s)\n"), inlineeData->GetBody()->GetDisplayName(), + inlineeData->GetDebugNumberSet(debugStringBuffer)); + } +#endif // returnValueOpnd IR::RegOpnd * returnValueOpnd; @@ -2970,6 +3164,30 @@ Inline::InlineCallApplyTarget_Shared(IR::Instr *callInstr, bool originalCallTarg workItemData->jitData = (FunctionJITTimeDataIDL*)(inlineeData); JITTimeWorkItem * jitWorkItem = JitAnew(this->topFunc->m_alloc, JITTimeWorkItem, workItemData); + const FunctionJITRuntimeInfo * runtimeInfo; + switch (targetType) + { + case CallApplyTargetSourceType::LdFld: + runtimeInfo = callInstr->m_func->GetWorkItem()->GetJITTimeInfo()->GetLdFldInlineeRuntimeData(inlineCacheIndex); + break; + + case CallApplyTargetSourceType::Callback: + runtimeInfo = inlineeDefInstr->m_func->GetWorkItem()->GetJITTimeInfo()->GetInlineeForCallbackInlineeRuntimeData(static_cast(inlineeDefInstr->AsProfiledInstr()->u.profileId), inlineeData->GetBody()->GetAddr()); + break; + + case CallApplyTargetSourceType::Other: + { + Js::ProfileId callApplyCallSiteId = callInstr->m_func->GetJITFunctionBody()->GetCallApplyCallSiteIdForCallSiteId(callSiteId); + runtimeInfo = callInstr->m_func->GetWorkItem()->GetJITTimeInfo()->GetCallApplyTargetInlineeRuntimeData(callApplyCallSiteId); + break; + } + + default: + Assert(UNREACHED); + __assume(UNREACHED); + break; + } + JITTimePolymorphicInlineCacheInfo * entryPointPolymorphicInlineCacheInfo = inlineeData->HasBody() ? this->topFunc->GetWorkItem()->GetInlineePolymorphicInlineCacheInfo(inlineeData->GetBody()->GetAddr()) : nullptr; #if !FLOATVAR Func * inlinee = JitAnew(this->topFunc->m_alloc, @@ -2980,7 +3198,7 @@ Inline::InlineCallApplyTarget_Shared(IR::Instr *callInstr, bool originalCallTarg this->topFunc->GetScriptContextInfo(), this->topFunc->GetJITOutput()->GetOutputData(), nullptr, - callInstr->m_func->GetWorkItem()->GetJITTimeInfo()->GetLdFldInlineeRuntimeData(inlineCacheIndex), + runtimeInfo, entryPointPolymorphicInlineCacheInfo, this->topFunc->GetCodeGenAllocators(), this->topFunc->GetNumberAllocator(), @@ -3001,7 +3219,7 @@ Inline::InlineCallApplyTarget_Shared(IR::Instr *callInstr, bool originalCallTarg this->topFunc->GetScriptContextInfo(), this->topFunc->GetJITOutput()->GetOutputData(), nullptr, - callInstr->m_func->GetWorkItem()->GetJITTimeInfo()->GetLdFldInlineeRuntimeData(inlineCacheIndex), + runtimeInfo, entryPointPolymorphicInlineCacheInfo, this->topFunc->GetCodeGenAllocators(), this->topFunc->GetCodeGenProfiler(), @@ -3017,7 +3235,7 @@ Inline::InlineCallApplyTarget_Shared(IR::Instr *callInstr, bool originalCallTarg // instrNext IR::Instr* instrNext = callInstr->m_next; - return InlineFunctionCommon(callInstr, originalCallTargetOpndIsJITOpt, originalCallTargetStackSym, inlineeData, inlinee, instrNext, returnValueOpnd, callInstr, nullptr, recursiveInlineDepth, safeThis, isApplyTarget); + return InlineFunctionCommon(callInstr, originalCallTargetOpndIsJITOpt, originalCallTargetStackSym, inlineeData, inlinee, instrNext, returnValueOpnd, funcObjCheckInsertInstr, nullptr, recursiveInlineDepth, safeThis, isApplyTarget); } IR::Opnd * @@ -3029,7 +3247,7 @@ Inline::ConvertToInlineBuiltInArgOut(IR::Instr * argInstr) } IR::Instr* -Inline::InlineCall(IR::Instr *callInstr, const FunctionJITTimeInfo *funcInfo, const FunctionJITTimeInfo * inlinerData, const StackSym *symCallerThis, bool* pIsInlined, uint callSiteId, uint recursiveInlineDepth) +Inline::InlineCall(IR::Instr *callInstr, const FunctionJITTimeInfo *funcInfo, const FunctionJITTimeInfo * inlinerData, const StackSym *symCallerThis, bool* pIsInlined, uint callSiteId, uint recursiveInlineDepth, bool isCallInstanceFunction) { IR::Instr* instrNext = callInstr->m_next; Func *func = callInstr->m_func; @@ -3057,7 +3275,7 @@ Inline::InlineCall(IR::Instr *callInstr, const FunctionJITTimeInfo *funcInfo, co IR::Instr * returnInstr = nullptr; if (!PHASE_OFF(Js::InlineCallTargetPhase, this->topFunc)) { - if (InlineCallTarget(callInstr, inlinerData, &inlineeData, funcInfo, symCallerThis, &returnInstr, recursiveInlineDepth)) + if (InlineCallTarget(callInstr, inlinerData, &inlineeData, funcInfo, symCallerThis, &returnInstr, recursiveInlineDepth, isCallInstanceFunction)) { Assert(returnInstr); return returnInstr; @@ -3074,20 +3292,22 @@ Inline::InlineCall(IR::Instr *callInstr, const FunctionJITTimeInfo *funcInfo, co // We are trying to optimize this.superConstructor.call(this, a, b,c); // argImplicitInstr represents this.superConstructor which we need to call directly. - IR::Instr * argImplicitInstr = nullptr; - IR::Instr * dummyInstr1 = nullptr; - IR::Instr * dummyInstr2 = nullptr; - this->GetArgInstrsForCallAndApply(callInstr, &argImplicitInstr, &dummyInstr1, &dummyInstr2, actualCount); + IR::Instr * argImplicitThisInstr = nullptr; + IR::Instr * argSecond = nullptr; + IR::Instr * dummyInstr = nullptr; + this->GetArgInstrsForCallAndApply(callInstr, &argImplicitThisInstr, &argSecond, &dummyInstr, actualCount); - Assert(argImplicitInstr); + IR::Instr * functionInstr = isCallInstanceFunction ? argSecond : argImplicitThisInstr; + Assert(functionInstr); IR::SymOpnd* orgLinkOpnd = callInstr->GetSrc2()->AsSymOpnd(); EmitFixedMethodOrFunctionObjectChecksForBuiltIns(callInstr, callInstr, funcInfo, false /*isPolymorphic*/, true /*isBuiltIn*/, false /*isCtor*/, true /*isInlined*/); - InsertInlineeBuiltInStartEndTags(callInstr, actualCount); + IR::Instr *instr = InsertInlineeBuiltInStartEndTags(callInstr, actualCount); + instr->m_opcode = Js::OpCode::InlineNonTrackingBuiltInEnd; - uint actualCountToInlinedCall = actualCount - 1; + uint actualCountToInlinedCall = actualCount - (isCallInstanceFunction ? 2 : 1); IR::Instr *startCall = IR::Instr::New(Js::OpCode::StartCall, func); startCall->SetDst(IR::RegOpnd::New(TyVar, func)); @@ -3095,7 +3315,7 @@ Inline::InlineCall(IR::Instr *callInstr, const FunctionJITTimeInfo *funcInfo, co callInstr->InsertBefore(startCall); - callInstr->ReplaceSrc1(argImplicitInstr->GetSrc1()); + callInstr->ReplaceSrc1(functionInstr->GetSrc1()); callInstr->UnlinkSrc2(); callInstr->m_opcode = Js::OpCode::CallI; @@ -3110,9 +3330,9 @@ Inline::InlineCall(IR::Instr *callInstr, const FunctionJITTimeInfo *funcInfo, co IR::Opnd *orgSrc1 = orgArgout->GetSrc1(); // Change ArgOut to use temp as src1. - StackSym * stackSym = StackSym::New(orgSrc1->GetStackSym()->GetType(), argImplicitInstr->m_func); - IR::Opnd* tempDst = IR::RegOpnd::New(stackSym, orgSrc1->GetType(), argImplicitInstr->m_func); - IR::Instr *assignInstr = IR::Instr::New(Func::GetLoadOpForType(orgSrc1->GetType()), tempDst, orgSrc1, argImplicitInstr->m_func); + StackSym * stackSym = StackSym::New(orgSrc1->GetStackSym()->GetType(), functionInstr->m_func); + IR::Opnd* tempDst = IR::RegOpnd::New(stackSym, orgSrc1->GetType(), functionInstr->m_func); + IR::Instr *assignInstr = IR::Instr::New(Func::GetLoadOpForType(orgSrc1->GetType()), tempDst, orgSrc1, functionInstr->m_func); assignInstr->SetByteCodeOffset(orgArgout); tempDst->SetIsJITOptimizedReg(true); orgArgout->InsertBefore(assignInstr); @@ -3127,70 +3347,79 @@ Inline::InlineCall(IR::Instr *callInstr, const FunctionJITTimeInfo *funcInfo, co insertBeforeInstr = clonedArgout; } clonedArgout->SetSrc2(startCall->GetDst()); - Assert(GetDefInstr(orgLinkOpnd) == argImplicitInstr); + Assert(GetDefInstr(orgLinkOpnd) == functionInstr); return instrNext; } bool Inline::InlineCallTarget(IR::Instr *callInstr, const FunctionJITTimeInfo* inlinerData, const FunctionJITTimeInfo** pInlineeData, const FunctionJITTimeInfo *callFuncInfo, - const StackSym *symCallerThis, IR::Instr ** returnInstr, uint recursiveInlineDepth) + const StackSym *symCallerThis, IR::Instr ** returnInstr, uint recursiveInlineDepth, bool isCallInstanceFunction) { - IR::Opnd* src1 = callInstr->GetSrc1(); - Assert(src1->IsRegOpnd()); - StackSym* sym = src1->AsRegOpnd()->GetStackSym(); - if (!sym->IsSingleDef()) + IR::Instr* callLdInstr = nullptr; + IR::Instr* callTargetLdInstr = nullptr; + if (!TryGetCallApplyAndTargetLdInstrs(callInstr, &callLdInstr, &callTargetLdInstr)) { return false; } - IR::Instr* callLdInstr = sym->GetInstrDef(); - Assert(callLdInstr); - IR::Instr* callTargetLdInstr = callLdInstr->m_prev; - if (callTargetLdInstr->m_opcode != Js::OpCode::LdFldForCallApplyTarget || - ((callTargetLdInstr->AsProfiledInstr()->u.FldInfo().flags & Js::FldInfoFlags::FldInfo_FromAccessor) != 0)) + const FunctionJITTimeInfo * inlineeData = nullptr; + Js::InlineCacheIndex inlineCacheIndex = Js::Constants::NoInlineCacheIndex; + IR::Instr * callbackDefInstr = nullptr; + CallApplyTargetSourceType targetType = CallApplyTargetSourceType::None; + if (!TryGetCallApplyInlineeData(inlinerData, callInstr, callLdInstr, callTargetLdInstr, &inlineeData, &inlineCacheIndex, &callbackDefInstr, isCallInstanceFunction, &targetType)) { return false; } - IR::Opnd* callTargetLdOpnd = callTargetLdInstr->GetSrc1(); - if (!callTargetLdOpnd->IsSymOpnd() || !callTargetLdOpnd->AsSymOpnd()->IsPropertySymOpnd()) + if (SkipCallApplyScriptTargetInlining_Shared(callInstr, inlinerData, inlineeData, /*isApplyTarget*/ false, /*isCallTarget*/ true)) { + *pInlineeData = inlineeData; return false; } - const auto inlineCacheIndex = callTargetLdOpnd->AsPropertySymOpnd()->m_inlineCacheIndex; - const auto inlineeData = inlinerData->GetLdFldInlinee(inlineCacheIndex); + const bool targetIsCallback = callbackDefInstr != nullptr; - if (SkipCallApplyScriptTargetInlining_Shared(callInstr, inlinerData, inlineeData, /*isApplyTarget*/ false, /*isCallTarget*/ true)) + if (!inlineeData->HasBody()) { - *pInlineeData = inlineeData; - return false; + if (targetIsCallback) + { + return false; + } + + Js::OpCode builtInInlineOpCode; + ValueType returnType; + InliningDecider::GetBuiltInInfo(inlineeData, &builtInInlineOpCode, &returnType); + Js::BuiltinFunction builtInId = Js::JavascriptLibrary::GetBuiltInForFuncInfo(inlineeData->GetLocalFunctionId()); + switch (builtInId) + { + default: + { + if (CanInlineBuiltInFunction(callInstr, inlineeData, builtInInlineOpCode, inlinerData, builtInId, true)) + { + return InlineCallBuiltInTarget(callInstr, inlinerData, inlineeData, callFuncInfo, callTargetLdInstr, builtInInlineOpCode, symCallerThis, recursiveInlineDepth, isCallInstanceFunction, returnInstr); + } + } + case Js::BuiltinFunction::JavascriptFunction_Apply: + case Js::BuiltinFunction::JavascriptFunction_Call: + case Js::BuiltinFunction::EngineInterfaceObject_CallInstanceFunction: + return false; + } } StackSym* originalCallTargetStackSym = callInstr->GetSrc1()->GetStackSym(); bool originalCallTargetOpndIsJITOpt = callInstr->GetSrc1()->GetIsJITOptimizedReg(); bool safeThis = false; - if (!TryGetFixedMethodsForBuiltInAndTarget(callInstr, inlinerData, inlineeData, callFuncInfo, callLdInstr, callTargetLdInstr, safeThis, /*isApplyTarget*/ false)) - { - return false; - } - - IR::Instr* implicitThisArgOut = nullptr; - IR::Instr* explicitThisArgOut = nullptr; - callInstr->IterateArgInstrs([&] (IR::Instr* argInstr) + IR::Instr * funcObjCheckInsertInstr = TryGetFixedMethodsForBuiltInAndTarget(callInstr, inlinerData, inlineeData, callFuncInfo, callLdInstr, callTargetLdInstr, safeThis, /*isApplyTarget*/ false, targetIsCallback); + if (!funcObjCheckInsertInstr) { - explicitThisArgOut = implicitThisArgOut; - implicitThisArgOut = argInstr; - - argInstr->GenerateBytecodeArgOutCapture(); // Generate BytecodeArgOutCapture here to capture the implicit "this" argout (which will be removed) as well, - // so that any bailout in the call sequence restores the argouts stack as the interpreter would expect it to be. - argInstr->GetDst()->AsSymOpnd()->GetStackSym()->DecrementArgSlotNum(); // We will be removing implicit "this" argout return false; - }); + } + IR::Instr * explicitThisArgOut = nullptr; + AdjustArgoutsForCallTargetInlining(callInstr, &explicitThisArgOut, isCallInstanceFunction); Assert(explicitThisArgOut); - Assert(explicitThisArgOut->HasByteCodeArgOutCapture()); + if (safeThis) { IR::Instr * byteCodeArgOutCapture = explicitThisArgOut->GetBytecodeArgOutCapture(); @@ -3202,6 +3431,54 @@ Inline::InlineCallTarget(IR::Instr *callInstr, const FunctionJITTimeInfo* inline } } + *returnInstr = InlineCallApplyTarget_Shared(callInstr, originalCallTargetOpndIsJITOpt, originalCallTargetStackSym, inlineeData, inlineCacheIndex, + safeThis, /*isApplyTarget*/ false, targetType, callbackDefInstr, recursiveInlineDepth, funcObjCheckInsertInstr); + + return true; +} + +void +Inline::AdjustArgoutsForCallTargetInlining(IR::Instr* callInstr, IR::Instr ** pExplicitThisArgOut, bool isCallInstanceFunction) +{ + Assert(pExplicitThisArgOut); + + IR::Instr * firstArgOut = nullptr; + IR::Instr * secondArgOut = nullptr; + IR::Instr * thirdArgOut = nullptr; + + callInstr->IterateArgInstrs([&](IR::Instr* argInstr) + { + thirdArgOut = secondArgOut; + secondArgOut = firstArgOut; + firstArgOut = argInstr; + + argInstr->GenerateBytecodeArgOutCapture(); // Generate BytecodeArgOutCapture here to capture the implicit "this" argout (which will be removed) as well, + // so that any bailout in the call sequence restores the argouts stack as the interpreter would expect it to be. + + StackSym * argSym = argInstr->GetDst()->AsSymOpnd()->GetStackSym(); + + Assert(argSym->m_offset == (argSym->GetArgSlotNum() - 1) * MachPtr); + argSym->DecrementArgSlotNum(); // We will be removing implicit "this" argout + if (argSym->GetArgSlotNum() != 0) + { + this->topFunc->SetArgOffset(argSym, argSym->m_offset - MachPtr); + } + + if (isCallInstanceFunction && argSym->GetArgSlotNum() != 0) + { + argSym->DecrementArgSlotNum(); // We will also be removing the function argout + } + + return false; + }); + + IR::Instr * implicitThisArgOut = firstArgOut; + IR::Instr * explicitThisArgOut = isCallInstanceFunction ? thirdArgOut : secondArgOut; + + Assert(explicitThisArgOut); + Assert(explicitThisArgOut->HasByteCodeArgOutCapture()); + + IR::Opnd* linkOpnd = implicitThisArgOut->GetSrc2(); Assert(linkOpnd->IsRegOpnd() && linkOpnd->AsRegOpnd()->GetStackSym()->IsSingleDef()); Assert(linkOpnd->AsRegOpnd()->GetStackSym()->GetInstrDef()->m_opcode == Js::OpCode::StartCall); @@ -3209,17 +3486,57 @@ Inline::InlineCallTarget(IR::Instr *callInstr, const FunctionJITTimeInfo* inline IR::Instr* startCall = linkOpnd->AsRegOpnd()->GetStackSym()->GetInstrDef(); explicitThisArgOut->ReplaceSrc2(startCall->GetDst()); + *pExplicitThisArgOut = explicitThisArgOut; + + if (isCallInstanceFunction) + { + IR::Instr * functionArg = secondArgOut; + IR::Instr * bytecodeArgOutUse = IR::Instr::New(Js::OpCode::BytecodeArgOutUse, callInstr->m_func, callInstr); + callInstr->ReplaceSrc1(functionArg->GetSrc1()); + bytecodeArgOutUse->SetSrc1(functionArg->GetSrc1()); + callInstr->InsertBefore(bytecodeArgOutUse); // Need to keep the function argout live till the call instruction for it to be captured by any bailout in the call sequence. + functionArg->Remove(); + } - IR::Instr * bytecodeArgOutUse = IR::Instr::New(Js::OpCode::BytecodeArgOutUse, callInstr->m_func); + IR::Instr * bytecodeArgOutUse = IR::Instr::New(Js::OpCode::BytecodeArgOutUse, callInstr->m_func, callInstr); bytecodeArgOutUse->SetSrc1(implicitThisArgOut->GetSrc1()); callInstr->InsertBefore(bytecodeArgOutUse); // Need to keep the implicit "this" argout live till the call instruction for it to be captured by any bailout in the call sequence. implicitThisArgOut->Remove(); startCall->SetSrc2(IR::IntConstOpnd::New(startCall->GetArgOutCount(/*getInterpreterArgOutCount*/ false), TyUint32, startCall->m_func)); - startCall->GetSrc1()->AsIntConstOpnd()->SetValue(startCall->GetSrc1()->AsIntConstOpnd()->GetValue() - 1); - *returnInstr = InlineCallApplyTarget_Shared(callInstr, originalCallTargetOpndIsJITOpt, originalCallTargetStackSym, inlineeData, inlineCacheIndex, - safeThis, /*isApplyTarget*/ false, /*isCallTarget*/ true, recursiveInlineDepth); + uint argsRemoved = isCallInstanceFunction ? 2 : 1; + startCall->GetSrc1()->AsIntConstOpnd()->SetValue(startCall->GetSrc1()->AsIntConstOpnd()->GetValue() - argsRemoved); +} + +bool +Inline::InlineCallBuiltInTarget(IR::Instr *callInstr, const FunctionJITTimeInfo* inlinerData, const FunctionJITTimeInfo* inlineeData, const FunctionJITTimeInfo *callFuncInfo, IR::Instr * callTargetLdInstr, Js::OpCode inlineOpCode, + const StackSym *symThis, uint recursiveInlineDepth, bool isCallInstanceFunction, IR::Instr ** returnInstr) +{ + Js::OpCode originalCallOpCode = callInstr->m_opcode; + StackSym* originalCallTargetStackSym = callInstr->GetSrc1()->GetStackSym(); + bool originalCallTargetOpndJITOpt = callInstr->GetSrc1()->GetIsJITOptimizedReg(); + + bool safeThis = false; + if (!TryOptimizeCallInstrWithFixedMethod(callInstr, callFuncInfo, false /*isPolymorphic*/, true /*isBuiltIn*/, false /*isCtor*/, true /*isInlined*/, safeThis)) + { + return false; + } + + IR::ByteCodeUsesInstr * useCallTargetInstr = IR::ByteCodeUsesInstr::New(callInstr); + useCallTargetInstr->SetRemovedOpndSymbol(originalCallTargetOpndJITOpt, originalCallTargetStackSym->m_id); + callInstr->InsertBefore(useCallTargetInstr); + + callInstr->m_opcode = originalCallOpCode; + callInstr->ReplaceSrc1(callTargetLdInstr->GetDst()); + + IR::Instr * unused = nullptr; + AdjustArgoutsForCallTargetInlining(callInstr, &unused, isCallInstanceFunction); + + bool isInlined = false; + Js::ProfileId callSiteId = static_cast(callInstr->AsProfiledInstr()->u.profileId); + *returnInstr = InlineBuiltInFunction(callInstr, inlineeData, inlineOpCode, inlinerData, symThis, &isInlined, callSiteId, recursiveInlineDepth, useCallTargetInstr); + Assert(isInlined); return true; } @@ -3251,14 +3568,8 @@ Inline::SkipCallApplyScriptTargetInlining_Shared(IR::Instr *callInstr, const Fun return true; } - if (!inlineeData->GetBody()) + if (!inlineeData->HasBody() && isApplyTarget) { - if (isCallTarget) - { - INLINE_TESTTRACE(_u("INLINING: Skip Inline: Skipping .call inlining, target is a built-in\tCaller: %s\t(#%d) \tTop Func:%s\t(#%d)\n"), - inlinerData->GetBody()->GetDisplayName(), inlinerData->GetDebugNumberSet(debugStringBuffer), - this->topFunc->GetJITFunctionBody()->GetDisplayName(), this->topFunc->GetDebugNumberSet(debugStringBuffer2)); - } return true; } @@ -3274,9 +3585,9 @@ Inline::SkipCallApplyScriptTargetInlining_Shared(IR::Instr *callInstr, const Fun return false; } -bool +IR::Instr * Inline::TryGetFixedMethodsForBuiltInAndTarget(IR::Instr *callInstr, const FunctionJITTimeInfo* inlinerData, const FunctionJITTimeInfo* inlineeData, const FunctionJITTimeInfo *builtInFuncInfo, - IR::Instr* builtInLdInstr, IR::Instr* targetLdInstr, bool& safeThis, bool isApplyTarget) + IR::Instr* builtInLdInstr, IR::Instr* targetLdInstr, bool& safeThis, bool isApplyTarget, bool isCallback) { #if ENABLE_DEBUG_CONFIG_OPTIONS char16 debugStringBuffer[MAX_FUNCTION_BODY_DEBUG_STRING_SIZE]; @@ -3292,64 +3603,49 @@ Inline::TryGetFixedMethodsForBuiltInAndTarget(IR::Instr *callInstr, const Functi IR::ByteCodeUsesInstr * useCallTargetInstr = IR::ByteCodeUsesInstr::New(callInstr); - safeThis = false; - // Check if we can get fixed method for call - if (TryOptimizeCallInstrWithFixedMethod(callInstr, builtInFuncInfo/*funcinfo for call*/, false /*isPolymorphic*/, true /*isBuiltIn*/, false /*isCtor*/, true /*isInlined*/, - safeThis /*unused here*/, true /*dontOptimizeJustCheck*/)) - { - Assert(callInstr->m_opcode == originalCallOpCode); // check that we didn't change the opcode to CallIFixed. - callInstr->ReplaceSrc1(targetLdInstr->GetDst()); - safeThis = false; - // Check if we can get fixed method for call target - if (!TryOptimizeCallInstrWithFixedMethod(callInstr, inlineeData, false /*isPolymorphic*/, false /*isBuiltIn*/, false /*isCtor*/, true /*isInlined*/, - safeThis /*unused here*/, true /*dontOptimizeJustCheck*/)) - { - callInstr->ReplaceSrc1(builtInLdInstr->GetDst()); - INLINE_TESTTRACE(_u("INLINING: Skip Inline: Skipping %s target inlining, did not get fixed method for %s target \tInlinee: %s (#%d)\tCaller: %s\t(#%d) \tTop Func:%s\t(#%d)\n"), isApplyTarget ? _u("apply") : _u("call"), isApplyTarget ? _u("apply") : _u("call"), - inlineeData->GetBody()->GetDisplayName(), inlineeData->GetDebugNumberSet(debugStringBuffer), - inlinerData->GetBody()->GetDisplayName(), inlinerData->GetDebugNumberSet(debugStringBuffer2), - this->topFunc->GetJITFunctionBody()->GetDisplayName(), this->topFunc->GetDebugNumberSet(debugStringBuffer3)); - return false; - } + IR::Opnd * functionOpnd; + if (isCallback) + { + functionOpnd = GetCallbackFunctionOpnd(callInstr); } else { - INLINE_TESTTRACE(_u("INLINING: Skip Inline: Skipping %s target inlining, did not get fixed method for %s \tInlinee: %s (#%d)\tCaller: %s\t(#%d) \tTop Func:%s\t(#%d)\n"), isApplyTarget ? _u("apply") : _u("call"), isApplyTarget ? _u("apply") : _u("call"), - inlineeData->GetBody()->GetDisplayName(), inlineeData->GetDebugNumberSet(debugStringBuffer), - inlinerData->GetBody()->GetDisplayName(), inlinerData->GetDebugNumberSet(debugStringBuffer2), - this->topFunc->GetJITFunctionBody()->GetDisplayName(), this->topFunc->GetDebugNumberSet(debugStringBuffer3)); - return false; + functionOpnd = targetLdInstr->GetDst(); } - Assert(callInstr->m_opcode == originalCallOpCode); - callInstr->ReplaceSrc1(builtInLdInstr->GetDst()); - // Emit Fixed Method check for apply/call safeThis = false; - TryOptimizeCallInstrWithFixedMethod(callInstr, builtInFuncInfo/*funcinfo for apply/call */, false /*isPolymorphic*/, true /*isBuiltIn*/, false /*isCtor*/, true /*isInlined*/, safeThis /*unused here*/); - - // If we optimized the call instruction for a fixed function, we must extend the function object's lifetime until after - // the bailout on non-stack arguments. - Assert(callInstr->m_opcode == Js::OpCode::CallIFixed); + if (!TryOptimizeCallInstrWithFixedMethod(callInstr, builtInFuncInfo/*funcinfo for apply/call */, false /*isPolymorphic*/, true /*isBuiltIn*/, false /*isCtor*/, true /*isInlined*/, safeThis /*unused here*/)) + { + callInstr->ReplaceSrc1(builtInLdInstr->GetDst()); + INLINE_CALLBACKS_TRACE(_u("INLINING: Skip Inline: Skipping callback.%s target inlining, did not get fixed method for %s \tInlinee: %s (%s)\tCaller: %s\t(%s) \tTop Func:%s\t(%s)\n"), isApplyTarget ? _u("apply") : _u("call"), isApplyTarget ? _u("apply") : _u("call"), + inlineeData->GetBody()->GetDisplayName(), inlineeData->GetDebugNumberSet(debugStringBuffer), + inlinerData->GetBody()->GetDisplayName(), inlinerData->GetDebugNumberSet(debugStringBuffer2), + this->topFunc->GetJITFunctionBody()->GetDisplayName(), this->topFunc->GetDebugNumberSet(debugStringBuffer3)); + return nullptr; + } + useCallTargetInstr->SetRemovedOpndSymbol(originalCallTargetOpndJITOpt, originalCallTargetStackSym->m_id); - // Make the target of apply/call as the target of the call instruction - callInstr->ReplaceSrc1(targetLdInstr->GetDst()); callInstr->m_opcode = originalCallOpCode; + callInstr->ReplaceSrc1(functionOpnd); + + if (isCallback) + { + callInstr->InsertBefore(useCallTargetInstr); + return useCallTargetInstr; + } - //Emit Fixed Method check for apply/call target originalCallTargetStackSym = callInstr->GetSrc1()->GetStackSym(); safeThis = false; - TryOptimizeCallInstrWithFixedMethod(callInstr, inlineeData, false /*isPolymorphic*/, false /*isBuiltIn*/, false /*isCtor*/, true /*isInlined*/, safeThis /*unused here*/); - - // If we optimized the call instruction for a fixed function, we must extend the function object's lifetime until after - // the bailout on non-stack arguments. - Assert(callInstr->m_opcode == Js::OpCode::CallIFixed); - useCallTargetInstr->SetRemovedOpndSymbol(originalCallTargetOpndJITOpt, originalCallTargetStackSym->m_id); + // Check if we can get fixed method for call target + if (TryOptimizeCallInstrWithFixedMethod(callInstr, inlineeData, false /*isPolymorphic*/, false /*isBuiltIn*/, false /*isCtor*/, true /*isInlined*/, safeThis /*unused here*/)) + { + useCallTargetInstr->SetRemovedOpndSymbol(originalCallTargetOpndJITOpt, originalCallTargetStackSym->m_id); + } callInstr->InsertBefore(useCallTargetInstr); - - return true; + return useCallTargetInstr; } void @@ -3357,6 +3653,10 @@ Inline::SetupInlineInstrForCallDirect(Js::BuiltinFunction builtInId, IR::Instr* { switch(builtInId) { + case Js::BuiltinFunction::JavascriptArray_At: + callInstr->SetSrc1(IR::HelperCallOpnd::New(IR::JnHelperMethod::HelperArray_At, callInstr->m_func)); + break; + case Js::BuiltinFunction::JavascriptArray_Concat: callInstr->SetSrc1(IR::HelperCallOpnd::New(IR::JnHelperMethod::HelperArray_Concat, callInstr->m_func)); break; @@ -3397,6 +3697,10 @@ Inline::SetupInlineInstrForCallDirect(Js::BuiltinFunction builtInId, IR::Instr* callInstr->SetSrc1(IR::HelperCallOpnd::New(IR::JnHelperMethod::HelperArray_Unshift, callInstr->m_func)); break; + case Js::BuiltinFunction::JavascriptString_At: + callInstr->SetSrc1(IR::HelperCallOpnd::New(IR::JnHelperMethod::HelperString_At, callInstr->m_func)); + break; + case Js::BuiltinFunction::JavascriptString_Concat: callInstr->SetSrc1(IR::HelperCallOpnd::New(IR::JnHelperMethod::HelperString_Concat, callInstr->m_func)); break; @@ -3509,6 +3813,10 @@ Inline::SetupInlineInstrForCallDirect(Js::BuiltinFunction builtInId, IR::Instr* callInstr->SetSrc1(IR::HelperCallOpnd::New(IR::JnHelperMethod::HelperObject_HasOwnProperty, callInstr->m_func)); break; + case Js::BuiltinFunction::JavascriptObject_HasOwn: + callInstr->SetSrc1(IR::HelperCallOpnd::New(IR::JnHelperMethod::HelperObject_HasOwn, callInstr->m_func)); + break; + case Js::BuiltinFunction::JavascriptArray_IsArray: callInstr->SetSrc1(IR::HelperCallOpnd::New(IR::JnHelperMethod::HelperArray_IsArray, callInstr->m_func)); break; @@ -3849,6 +4157,7 @@ Inline::InlineFunctionCommon(IR::Instr *callInstr, bool originalCallTargetOpndIs callInstr->m_opcode = Js::OpCode::InlineeStart; // Set it to belong to the inlinee, so that we can use the actual count when lowering InlineeStart + inlinee->SetInlineeStart(callInstr); callInstr->m_func = inlinee; callInstr->SetDst(IR::RegOpnd::New(returnValueOpnd ? returnValueOpnd->GetType() : TyVar, inlinee)); // Put the meta arguments that the stack walker expects to find on the stack. @@ -3875,78 +4184,6 @@ Inline::InlineFunctionCommon(IR::Instr *callInstr, bool originalCallTargetOpndIs return instrNext; } -#ifdef ENABLE_DOM_FAST_PATH -// we have LdFld, src1 obj, src2: null; dest: return value -// We need to convert it to inlined method call. -// We cannot do CallDirect as it requires ArgOut and that cannot be hoisted/copyprop'd -// Create a new OpCode, DOMFastPathGetter. The OpCode takes three arguments: -// The function object, the "this" instance object, and the helper routine as we have one for each index -// A functionInfo->Index# table is created in scriptContext (and potentially movable to threadContext if WS is not a concern). -// we use the table to identify the helper that needs to be lowered. -// At lower time we create the call to helper, which is function entrypoint at this time. -void Inline::InlineDOMGetterSetterFunction(IR::Instr *ldFldInstr, const FunctionJITTimeInfo *const inlineeData, const FunctionJITTimeInfo *const inlinerData) -{ - intptr_t functionInfo = inlineeData->GetFunctionInfoAddr(); - - Assert(ldFldInstr->GetSrc1()->IsSymOpnd() && ldFldInstr->GetSrc1()->AsSymOpnd()->IsPropertySymOpnd()); - - Assert(ldFldInstr->GetSrc1()->AsPropertySymOpnd()->HasObjTypeSpecFldInfo()); - Assert(ldFldInstr->GetSrc1()->AsPropertySymOpnd()->GetObjTypeSpecInfo()->UsesAccessor()); - - // Find the helper routine for this functionInfo. - IR::JnHelperMethod helperMethod = this->topFunc->GetScriptContextInfo()->GetDOMFastPathHelper(functionInfo); - if (helperMethod == IR::HelperInvalid) - { - // abort inlining if helper isn't found - return; - } - // Find the instance object (External object). - PropertySym * fieldSym = ldFldInstr->GetSrc1()->AsSymOpnd()->m_sym->AsPropertySym(); - IR::RegOpnd * instanceOpnd = IR::RegOpnd::New(fieldSym->m_stackSym, TyMachPtr, ldFldInstr->m_func); - - // Find the function object from getter inline cache. Need bailout to verify. - IR::Instr *ldMethodFld = IR::Instr::New(Js::OpCode::LdMethodFromFlags, IR::RegOpnd::New(TyVar, ldFldInstr->m_func), ldFldInstr->GetSrc1(), ldFldInstr->m_func); - ldFldInstr->InsertBefore(ldMethodFld); - ldMethodFld = ldMethodFld->ConvertToBailOutInstr(ldFldInstr, IR::BailOutFailedInlineTypeCheck); - - ldFldInstr->ReplaceSrc1(ldMethodFld->GetDst()); - ldMethodFld->SetByteCodeOffset(ldFldInstr); - - // generate further object/type bailout - PrepareInsertionPoint(ldFldInstr, inlineeData, ldFldInstr); - - // We have three arguments to pass to the OpCode. Create a new ExtendArg_A opcode to chain up the argument. It is similar to ArgOut chain - // except that it is not argout. - // The Opcode sequence is like: - // (dst)helpArg1: ExtendArg_A (src1)thisObject (src2)null - // (dst)helpArg2: ExtendArg_A (src1)funcObject (src2)helpArg1 - // method: DOMFastPathGetter (src1)HelperCall (src2)helpArg2 - IR::Instr* extendArg0 = IR::Instr::New(Js::OpCode::ExtendArg_A, IR::RegOpnd::New(TyVar, ldFldInstr->m_func), instanceOpnd, ldFldInstr->m_func); - ldFldInstr->InsertBefore(extendArg0); - IR::Instr* extendArg1 = IR::Instr::New(Js::OpCode::ExtendArg_A, IR::RegOpnd::New(TyVar, ldFldInstr->m_func), ldMethodFld->GetDst(), extendArg0->GetDst(), ldFldInstr->m_func); - ldFldInstr->InsertBefore(extendArg1); - ldFldInstr->ReplaceSrc1(IR::HelperCallOpnd::New(helperMethod, ldFldInstr->m_func)); - ldFldInstr->SetSrc2(extendArg1->GetDst()); - ldFldInstr->m_opcode = Js::OpCode::DOMFastPathGetter; - - StackSym * tmpSym = StackSym::New(ldFldInstr->GetDst()->GetType(), ldFldInstr->m_func); - IR::Opnd * tmpDst = IR::RegOpnd::New(tmpSym, tmpSym->GetType(), ldFldInstr->m_func); - // Ensure that the original LdFld's dst profile data is also copied to the new instruction for later - // type-specific optimizations. Otherwise, this optimization to reduce calls into the host will also - // result in relatively more expensive calls in the runtime. - tmpDst->SetValueType(ldFldInstr->GetDst()->GetValueType()); - - IR::Opnd * callInstrDst = ldFldInstr->UnlinkDst(); - ldFldInstr->SetDst(tmpDst); - - IR::Instr * ldInstr = IR::Instr::New(Js::OpCode::Ld_A, callInstrDst, tmpDst, ldFldInstr->m_func); - ldFldInstr->InsertAfter(ldInstr); - - this->topFunc->SetHasInlinee(); - - InsertStatementBoundary(ldInstr->m_next); -} -#endif void Inline::InsertStatementBoundary(IR::Instr * instrNext) { @@ -4305,106 +4542,53 @@ Inline::SplitConstructorCallCommon( } void -Inline::InsertObjectCheck(IR::Instr *callInstr, IR::Instr* insertBeforeInstr, IR::Instr*bailOutIfNotObject) +Inline::InsertFunctionObjectCheck(IR::RegOpnd * funcOpnd, IR::Instr *insertBeforeInstr, IR::Instr *bailOutInstr, const FunctionJITTimeInfo *funcInfo) { - // Bailout if 'functionRegOpnd' is not an object. - bailOutIfNotObject->SetSrc1(callInstr->GetSrc1()->AsRegOpnd()); - bailOutIfNotObject->SetByteCodeOffset(insertBeforeInstr); - insertBeforeInstr->InsertBefore(bailOutIfNotObject); -} + Js::BuiltinFunction index = Js::JavascriptLibrary::GetBuiltInForFuncInfo(funcInfo->GetLocalFunctionId()); + AssertMsg(index < Js::BuiltinFunction::Count, "Invalid built-in index on a call target marked as built-in"); -void -Inline::InsertFunctionTypeIdCheck(IR::Instr *callInstr, IR::Instr* insertBeforeInstr, IR::Instr* bailOutIfNotJsFunction) -{ - // functionTypeRegOpnd = Ld functionRegOpnd->type - IR::IndirOpnd *functionTypeIndirOpnd = IR::IndirOpnd::New(callInstr->GetSrc1()->AsRegOpnd(), Js::RecyclableObject::GetOffsetOfType(), TyMachPtr, callInstr->m_func); - IR::RegOpnd *functionTypeRegOpnd = IR::RegOpnd::New(TyVar, this->topFunc); - IR::Instr *instr = IR::Instr::New(Js::OpCode::Ld_A, functionTypeRegOpnd, functionTypeIndirOpnd, callInstr->m_func); - if(instr->m_func->HasByteCodeOffset()) - { - instr->SetByteCodeOffset(insertBeforeInstr); - } - insertBeforeInstr->InsertBefore(instr); - - CompileAssert(sizeof(Js::TypeId) == sizeof(int32)); - // if (functionTypeRegOpnd->typeId != TypeIds_Function) goto $noInlineLabel - // BrNeq_I4 $noInlineLabel, functionTypeRegOpnd->typeId, TypeIds_Function - IR::IndirOpnd *functionTypeIdIndirOpnd = IR::IndirOpnd::New(functionTypeRegOpnd, Js::Type::GetOffsetOfTypeId(), TyInt32, callInstr->m_func); - IR::IntConstOpnd *typeIdFunctionConstOpnd = IR::IntConstOpnd::New(Js::TypeIds_Function, TyInt32, callInstr->m_func); - bailOutIfNotJsFunction->SetSrc1(functionTypeIdIndirOpnd); - bailOutIfNotJsFunction->SetSrc2(typeIdFunctionConstOpnd); - insertBeforeInstr->InsertBefore(bailOutIfNotJsFunction); + bailOutInstr->SetSrc1(funcOpnd); + bailOutInstr->SetSrc2(IR::IntConstOpnd::New(index, TyInt32, insertBeforeInstr->m_func)); + insertBeforeInstr->InsertBefore(bailOutInstr); } void -Inline::InsertJsFunctionCheck(IR::Instr *callInstr, IR::Instr *insertBeforeInstr, IR::BailOutKind bailOutKind) +Inline::InsertJsFunctionCheck(IR::Instr * callInstr, IR::Instr *insertBeforeInstr, IR::BailOutKind bailOutKind) { // This function only inserts bailout for tagged int & TypeIds_Function. // As of now this is only used for polymorphic inlining. Assert(bailOutKind == IR::BailOutOnPolymorphicInlineFunction); - Assert(insertBeforeInstr); Assert(insertBeforeInstr->m_func == callInstr->m_func); - // bailOutIfNotFunction is primary bailout instruction - IR::Instr* bailOutIfNotFunction = IR::BailOutInstr::New(Js::OpCode::BailOnNotEqual, bailOutKind, insertBeforeInstr, callInstr->m_func); - - IR::Instr *bailOutIfNotObject = IR::BailOutInstr::New(Js::OpCode::BailOnNotObject, bailOutKind, bailOutIfNotFunction->GetBailOutInfo(),callInstr->m_func); - InsertObjectCheck(callInstr, insertBeforeInstr, bailOutIfNotObject); - - InsertFunctionTypeIdCheck(callInstr, insertBeforeInstr, bailOutIfNotFunction); - -} - -void -Inline::InsertFunctionInfoCheck(IR::Instr *callInstr, IR::Instr *insertBeforeInstr, IR::Instr* bailoutInstr, const FunctionJITTimeInfo *funcInfo) -{ - // if (JavascriptFunction::FromVar(r1)->functionInfo != funcInfo) goto noInlineLabel - // BrNeq_I4 noInlineLabel, r1->functionInfo, funcInfo - IR::IndirOpnd* opndFuncInfo = IR::IndirOpnd::New(callInstr->GetSrc1()->AsRegOpnd(), Js::JavascriptFunction::GetOffsetOfFunctionInfo(), TyMachPtr, callInstr->m_func); - IR::AddrOpnd* inlinedFuncInfo = IR::AddrOpnd::New(funcInfo->GetFunctionInfoAddr(), IR::AddrOpndKindDynamicFunctionInfo, callInstr->m_func); - bailoutInstr->SetSrc1(opndFuncInfo); - bailoutInstr->SetSrc2(inlinedFuncInfo); - - insertBeforeInstr->InsertBefore(bailoutInstr); -} - -void -Inline::InsertFunctionObjectCheck(IR::Instr *callInstr, IR::Instr *insertBeforeInstr, IR::Instr *bailOutInstr, const FunctionJITTimeInfo *funcInfo) -{ - Js::BuiltinFunction index = Js::JavascriptLibrary::GetBuiltInForFuncInfo(funcInfo->GetLocalFunctionId()); - AssertMsg(index < Js::BuiltinFunction::Count, "Invalid built-in index on a call target marked as built-in"); - - bailOutInstr->SetSrc1(callInstr->GetSrc1()->AsRegOpnd()); - bailOutInstr->SetSrc2(IR::IntConstOpnd::New(index, TyInt32, callInstr->m_func)); - insertBeforeInstr->InsertBefore(bailOutInstr); + // Two bailout checks, an object check followed by a function type ID check, are required. These bailout instructions are created + // when lowering checkFunctionEntryPoint rather than being created here as checkFunctionEntryPoint can be hoisted outside of a loop. + IR::Instr *checkIsFuncObj = IR::BailOutInstr::New(Js::OpCode::CheckIsFuncObj, bailOutKind, insertBeforeInstr, callInstr->m_func); + checkIsFuncObj->SetSrc1(callInstr->GetSrc1()->AsRegOpnd()); + checkIsFuncObj->SetByteCodeOffset(insertBeforeInstr); + insertBeforeInstr->InsertBefore(checkIsFuncObj); } IR::Instr * -Inline::PrepareInsertionPoint(IR::Instr *callInstr, const FunctionJITTimeInfo *funcInfo, IR::Instr *insertBeforeInstr, IR::BailOutKind bailOutKind) +Inline::PrepareInsertionPoint(IR::Instr *callInstr, const FunctionJITTimeInfo *funcInfo, IR::Instr *insertBeforeInstr) { Assert(insertBeforeInstr); Assert(insertBeforeInstr->m_func == callInstr->m_func); - Assert(bailOutKind == IR::BailOutOnInlineFunction); - // FunctionBody check is the primary bailout instruction, create it first - IR::BailOutInstr* primaryBailOutInstr = IR::BailOutInstr::New(Js::OpCode::BailOnNotEqual, bailOutKind, insertBeforeInstr, callInstr->m_func); + IR::Instr* checkFuncInfo = IR::BailOutInstr::New(Js::OpCode::CheckFuncInfo, IR::BailOutOnInlineFunction, insertBeforeInstr, callInstr->m_func); + checkFuncInfo->SetSrc1(callInstr->GetSrc1()->AsRegOpnd()); - // 1. Bailout if function object is not an object. - IR::Instr *bailOutIfNotObject = IR::BailOutInstr::New(Js::OpCode::BailOnNotObject, - bailOutKind, - primaryBailOutInstr->GetBailOutInfo(), - callInstr->m_func); - InsertObjectCheck(callInstr, insertBeforeInstr, bailOutIfNotObject); + IR::AddrOpnd* inlinedFuncInfo = IR::AddrOpnd::New(funcInfo->GetFunctionInfoAddr(), IR::AddrOpndKindDynamicFunctionInfo, insertBeforeInstr->m_func); + checkFuncInfo->SetSrc2(inlinedFuncInfo); - // 2. Bailout if function object is not a TypeId_Function - IR::Instr* bailOutIfNotJsFunction = IR::BailOutInstr::New(Js::OpCode::BailOnNotEqual, bailOutKind, primaryBailOutInstr->GetBailOutInfo(), callInstr->m_func); - InsertFunctionTypeIdCheck(callInstr, insertBeforeInstr, bailOutIfNotJsFunction); + checkFuncInfo->SetByteCodeOffset(insertBeforeInstr); + insertBeforeInstr->InsertBefore(checkFuncInfo); - // 3. Bailout if function body doesn't match funcInfo - InsertFunctionInfoCheck(callInstr, insertBeforeInstr, primaryBailOutInstr, funcInfo); + // checkFuncInfo can be hoisted later and then have its BailOutInfo garbage collected. Other instructions (ex: BailOnNotStackArgs) share + // checkFuncInfo's BailOutInfo. Explicitly force sharedBailOutKind to be true to stop this BailOutInfo from being garbage collected. + checkFuncInfo->ShareBailOut(); - return primaryBailOutInstr; + return checkFuncInfo; } IR::ByteCodeUsesInstr* @@ -4427,7 +4611,7 @@ Inline::EmitFixedMethodOrFunctionObjectChecksForBuiltIns(IR::Instr *callInstr, I else { IR::BailOutInstr * bailOutInstr = IR::BailOutInstr::New(Js::OpCode::BailOnNotBuiltIn, IR::BailOutOnInlineFunction, callInstr, callInstr->m_func); - InsertFunctionObjectCheck(callInstr, funcObjCheckInsertInstr, bailOutInstr, inlineeInfo); + InsertFunctionObjectCheck(callInstr->GetSrc1()->AsRegOpnd(), funcObjCheckInsertInstr, bailOutInstr, inlineeInfo); } return useCallTargetInstr; } @@ -5209,7 +5393,6 @@ Inline::MapFormals(Func *inlinee, case Js::OpCode::LdThis: - case Js::OpCode::StrictLdThis: // Optimization of LdThis may be possible. // Verify that this is a use of the "this" passed by the caller (not a nested function). if (instr->GetSrc1()->AsRegOpnd()->m_sym == symThis) @@ -5455,7 +5638,7 @@ Inline::DoCheckThisOpt(IR::Instr * instr) // If the instr is an inlined LdThis, try to replace it with a CheckThis // that will bail out if a helper call is required to get the real "this" pointer. - Assert(instr->m_opcode == Js::OpCode::LdThis || instr->m_opcode == Js::OpCode::StrictLdThis); + Assert(instr->m_opcode == Js::OpCode::LdThis); Assert(instr->IsInlined()); // Create the CheckThis. The target is the original offset, i.e., the LdThis still has to be executed. @@ -5464,7 +5647,7 @@ Inline::DoCheckThisOpt(IR::Instr * instr) instr->FreeSrc2(); } IR::Instr *newInstr = - IR::BailOutInstr::New( instr->m_opcode == Js::OpCode::LdThis ? Js::OpCode::CheckThis : Js::OpCode::StrictCheckThis, IR::BailOutCheckThis, instr, instr->m_func); + IR::BailOutInstr::New(Js::OpCode::CheckThis, IR::BailOutCheckThis, instr, instr->m_func); // Just re-use the original src1 since the LdThis will usually be deleted. newInstr->SetSrc1(instr->GetSrc1()); newInstr->SetByteCodeOffset(instr); diff --git a/lib/Backend/Inline.h b/lib/Backend/Inline.h index f180fa66e9a..d502a8cf511 100644 --- a/lib/Backend/Inline.h +++ b/lib/Backend/Inline.h @@ -4,6 +4,14 @@ //------------------------------------------------------------------------------------------------------- #pragma once +enum class CallApplyTargetSourceType : byte +{ + None, + LdFld, + Callback, + Other +}; + class Inline { public: @@ -57,43 +65,52 @@ class Inline bool dontOptimizeJustCheck = false, uint i = 0 /*i-th inlinee at a polymorphic call site*/); intptr_t TryOptimizeInstrWithFixedDataProperty(IR::Instr *&instr); IR::Instr * InlineScriptFunction(IR::Instr *callInstr, const FunctionJITTimeInfo *const inlineeData, const StackSym *symThis, const Js::ProfileId profileId, bool* pIsInlined, IR::Instr * inlineeDefInstr, uint recursiveInlineDepth); -#ifdef ENABLE_DOM_FAST_PATH - void InlineDOMGetterSetterFunction(IR::Instr *ldFldInstr, const FunctionJITTimeInfo *const inlineeData, const FunctionJITTimeInfo *const inlinerData); -#endif IR::Instr * InlineGetterSetterFunction(IR::Instr *accessorInstr, const FunctionJITTimeInfo *const inlineeData, const StackSym *symCallerThis, const uint inlineCacheIndex, bool isGetter, bool *pIsInlined, uint recursiveInlineDepth); IR::Instr * InlineFunctionCommon(IR::Instr *callInstr, bool originalCallTargetOpndIsJITOpt, StackSym* originalCallTargetStackSym, const FunctionJITTimeInfo *funcInfo, Func *inlinee, IR::Instr *instrNext, IR::RegOpnd * returnValueOpnd, IR::Instr *inlineBailoutChecksBeforeInstr, const StackSym *symCallerThis, uint recursiveInlineDepth, bool safeThis = false, bool isApplyTarget = false); IR::Instr * SimulateCallForGetterSetter(IR::Instr *accessorInstr, IR::Instr* insertInstr, IR::PropertySymOpnd* methodOpnd, bool isGetter); IR::Instr * InlineApply(IR::Instr *callInstr, const FunctionJITTimeInfo * applyData, const FunctionJITTimeInfo * inlinerData, const StackSym *symThis, bool* pIsInlined, uint callSiteId, uint recursiveInlineDepth, uint argsCount); - IR::Instr * InlineApplyBuiltInTargetWithArray(IR::Instr *callInstr, const FunctionJITTimeInfo * applyInfo, const FunctionJITTimeInfo * builtInInfo); + IR::Instr * InlineApplyBuiltInTargetWithArray(IR::Instr *callInstr, const FunctionJITTimeInfo * applyInfo, const FunctionJITTimeInfo * builtInInfo, bool * pIsInlined); IR::Instr * InlineApplyWithArgumentsObject(IR::Instr * callInstr, IR::Instr * argsObjectArgInstr, const FunctionJITTimeInfo * inlineeInfo); IR::Instr * InlineApplyWithoutArrayArgument(IR::Instr *callInstr, const FunctionJITTimeInfo * applyInfo, const FunctionJITTimeInfo * applyTargetInfo); bool InlineApplyScriptTarget(IR::Instr *callInstr, const FunctionJITTimeInfo* inlinerData, const FunctionJITTimeInfo** pInlineeData, const FunctionJITTimeInfo * applyFuncInfo, const StackSym *symThis, IR::Instr ** returnInstr, uint recursiveInlineDepth, bool isArrayOpndArgumentsObject, uint argsCount); void GetArgInstrsForCallAndApply(IR::Instr* callInstr, IR::Instr** implicitThisArgOut, IR::Instr** explicitThisArgOut, IR::Instr** argumentsOrArrayArgOut, uint &argOutCount); - _Success_(return != false) bool TryGetApplyAndTargetLdInstrs(IR::Instr * callInstr, _Outptr_result_nullonfailure_ IR::Instr ** applyLdInstr, _Outptr_result_nullonfailure_ IR::Instr ** applyTargetLdInstr); - IR::Instr * InlineCall(IR::Instr *callInstr, const FunctionJITTimeInfo * inlineeData, const FunctionJITTimeInfo * inlinerData, const StackSym *symThis, bool* pIsInlined, uint callSiteId, uint recursiveInlineDepth); + _Success_(return != false) bool TryGetCallApplyAndTargetLdInstrs(IR::Instr * callInstr, _Outptr_result_nullonfailure_ IR::Instr ** callApplyLdInstr, _Outptr_result_nullonfailure_ IR::Instr ** callApplyTargetLdInstr); + IR::Instr * InlineCall(IR::Instr *callInstr, const FunctionJITTimeInfo * inlineeData, const FunctionJITTimeInfo * inlinerData, const StackSym *symThis, bool* pIsInlined, uint callSiteId, uint recursiveInlineDepth, bool isCallInstanceFunction); bool InlineCallTarget(IR::Instr *callInstr, const FunctionJITTimeInfo* inlinerData, const FunctionJITTimeInfo** pInlineeData, const FunctionJITTimeInfo *callFuncInfo, - const StackSym *symThis, IR::Instr ** returnInstr, uint recursiveInlineDepth); + const StackSym *symThis, IR::Instr ** returnInstr, uint recursiveInlineDepth, bool isCallInstanceFunction); + bool InlineCallBuiltInTarget(IR::Instr *callInstr, const FunctionJITTimeInfo* inlinerData, const FunctionJITTimeInfo* inlineeData, const FunctionJITTimeInfo *callFuncInfo, IR::Instr * callTargetLdInstr, Js::OpCode inlineOpcode, + const StackSym *symThis, uint recursiveInlineDepth, bool isCallInstanceFunction, IR::Instr ** returnInstr); + void AdjustArgoutsForCallTargetInlining(IR::Instr* callInstr, IR::Instr** pExplicitThisArgOut, bool isCallInstanceFunction); + bool TryGetCallApplyInlineeData(const FunctionJITTimeInfo* inlinerData, IR::Instr * callInstr, IR::Instr * callApplyLdInstr, IR::Instr * callApplyTargetLdInstr, const FunctionJITTimeInfo ** inlineeData, Js::InlineCacheIndex * inlineCacheIndex, + IR::Instr ** callbackDefInstr, bool isCallInstanceFunction, CallApplyTargetSourceType* targetType); bool InlConstFoldArg(IR::Instr *instr, __in_ecount_opt(callerArgOutCount) IR::Instr *callerArgOuts[], Js::ArgSlot callerArgOutCount); bool InlConstFold(IR::Instr *instr, IntConstType *pValue, __in_ecount_opt(callerArgOutCount) IR::Instr *callerArgOuts[], Js::ArgSlot callerArgOutCount); IR::Instr * InlineCallApplyTarget_Shared(IR::Instr *callInstr, bool originalCallTargetOpndIsJITOpt, StackSym* originalCallTargetStackSym, const FunctionJITTimeInfo*const inlineeData, - uint inlineCacheIndex, bool safeThis, bool isApplyTarget, bool isCallTarget, uint recursiveInlineDepth); + uint inlineCacheIndex, bool safeThis, bool isApplyTarget, CallApplyTargetSourceType targetType, IR::Instr * inlineeDefInstr, uint recursiveInlineDepth, IR::Instr * funcObjCheckInsertInstr); bool SkipCallApplyScriptTargetInlining_Shared(IR::Instr *callInstr, const FunctionJITTimeInfo* inlinerData, const FunctionJITTimeInfo* inlineeData, bool isApplyTarget, bool isCallTarget); - bool TryGetFixedMethodsForBuiltInAndTarget(IR::Instr *callInstr, const FunctionJITTimeInfo* inlinerData, const FunctionJITTimeInfo* inlineeData, const FunctionJITTimeInfo *builtInFuncInfo, - IR::Instr* builtInLdInstr, IR::Instr* targetLdInstr, bool& safeThis, bool isApplyTarget); + IR::Instr * TryGetFixedMethodsForBuiltInAndTarget(IR::Instr *callInstr, const FunctionJITTimeInfo* inlinerData, const FunctionJITTimeInfo* inlineeData, const FunctionJITTimeInfo *builtInFuncInfo, + IR::Instr* builtInLdInstr, IR::Instr* targetLdInstr, bool& safeThis, bool isApplyTarget, bool isCallback); - IR::Instr * InlineBuiltInFunction(IR::Instr *callInstr, const FunctionJITTimeInfo * inlineeData, Js::OpCode inlineCallOpCode, const FunctionJITTimeInfo * inlinerData, const StackSym *symCallerThis, bool* pIsInlined, uint profileId, uint recursiveInlineDepth); + bool CanInlineBuiltInFunction(IR::Instr *callInstr, const FunctionJITTimeInfo * inlineeData, Js::OpCode inlineCallOpCode, const FunctionJITTimeInfo * inlinerData, Js::BuiltinFunction builtInId, bool isCallApplyTarget); + IR::Instr * InlineBuiltInFunction(IR::Instr *callInstr, const FunctionJITTimeInfo * inlineeData, Js::OpCode inlineCallOpCode, const FunctionJITTimeInfo * inlinerData, const StackSym *symCallerThis, bool* pIsInlined, uint profileId, uint recursiveInlineDepth, IR::Instr * funcObjCheckInsertInstr); IR::Instr * InlineFunc(IR::Instr *callInstr, const FunctionJITTimeInfo *const inlineeData, const uint profileId); bool SplitConstructorCall(IR::Instr *const newObjInstr, const bool isInlined, const bool doneFixedMethodFld, IR::Instr** createObjInstrOut = nullptr, IR::Instr** callCtorInstrOut = nullptr) const; bool SplitConstructorCallCommon(IR::Instr *const newObjInstr, IR::Opnd *const lastArgOpnd, const Js::OpCode newObjOpCode, const bool isInlined, const bool doneFixedMethodFld, IR::Instr** createObjInstrOut, IR::Instr** callCtorInstrOut) const; IR::Instr * InlinePolymorphicFunction(IR::Instr *callInstr, const FunctionJITTimeInfo * inlinerData, const StackSym *symCallerThis, const Js::ProfileId profileId, bool* pIsInlined, uint recursiveInlineDepth, bool triedUsingFixedMethods = false); IR::Instr * InlinePolymorphicFunctionUsingFixedMethods(IR::Instr *callInstr, const FunctionJITTimeInfo * inlinerData, const StackSym *symCallerThis, const Js::ProfileId profileId, IR::PropertySymOpnd* methodValueOpnd, bool* pIsInlined, uint recursiveInlineDepth); - IR::Instr * TryGetCallbackDefInstr(IR::Instr * callInstr); + + IR::RegOpnd * GetCallbackFunctionOpnd(IR::Instr * callInstr); + IR::Instr * TryGetCallbackDefInstr(StackSym * callbackSym); + IR::Instr * TryGetCallbackDefInstrForCallInstr(IR::Instr * callInstr); + IR::Instr * TryGetCallbackDefInstrForCallApplyTarget(IR::Instr * callApplyLdInstr); + IR::Instr * TryGetCallbackDefInstrForCallInstanceFunction(IR::Instr * callInstr); + bool TryGetCallApplyCallbackTargetInlineeData(const FunctionJITTimeInfo* inlinerData, IR::Instr * callInstr, IR::Instr * callApplyLdInstr, const FunctionJITTimeInfo ** inlineeData, IR::Instr ** callbackDefInstr, bool isCallInstanceFunction); IR::Instr * InlineSpread(IR::Instr *spreadCall); @@ -102,7 +119,7 @@ class Inline void SetupInlineeFrame(Func *inlinee, IR::Instr *inlineeStart, Js::ArgSlot actualCount, IR::Opnd *functionObject); void FixupExtraActualParams(IR::Instr * instr, IR::Instr *argOuts[], IR::Instr *argOutsExtra[], uint index, uint actualCount, Js::ProfileId callSiteId); void RemoveExtraFixupArgouts(IR::Instr* instr, uint argoutRemoveCount, Js::ProfileId callSiteId); - IR::Instr* PrepareInsertionPoint(IR::Instr *callInstr, const FunctionJITTimeInfo *funcInfo, IR::Instr *insertBeforeInstr, IR::BailOutKind bailOutKind = IR::BailOutOnInlineFunction); + IR::Instr* PrepareInsertionPoint(IR::Instr *callInstr, const FunctionJITTimeInfo *funcInfo, IR::Instr *insertBeforeInstr); IR::ByteCodeUsesInstr* EmitFixedMethodOrFunctionObjectChecksForBuiltIns(IR::Instr *callInstr, IR::Instr * funcObjCheckInsertInstr, const FunctionJITTimeInfo * inlineeInfo, bool isPolymorphic, bool isBuiltIn, bool isCtor, bool isInlined); Js::ArgSlot MapActuals(IR::Instr *callInstr, __out_ecount(maxParamCount) IR::Instr *argOuts[], Js::ArgSlot formalCount, Func *inlinee, Js::ProfileId callSiteId, bool *stackArgsArgOutExpanded, IR::Instr *argOutsExtra[] = nullptr, Js::ArgSlot maxParamCount = Js::InlineeCallInfo::MaxInlineeArgoutCount); uint32 CountActuals(IR::Instr *callIntr); @@ -145,11 +162,8 @@ class Inline void SetInlineeFrameStartSym(Func *inlinee, uint actualCount); void CloneCallSequence(IR::Instr* callInstr, IR::Instr* clonedCallInstr); - void InsertObjectCheck(IR::Instr *callInstr, IR::Instr* insertBeforeInstr, IR::Instr*bailOutInstr); - void InsertFunctionTypeIdCheck(IR::Instr *callInstr, IR::Instr* insertBeforeInstr, IR::Instr*bailOutInstr); - void InsertJsFunctionCheck(IR::Instr *callInstr, IR::Instr *insertBeforeInstr, IR::BailOutKind bailOutKind); - void InsertFunctionInfoCheck(IR::Instr *callInstr, IR::Instr *insertBeforeInstr, IR::Instr* bailoutInstr, const FunctionJITTimeInfo *funcInfo); - void InsertFunctionObjectCheck(IR::Instr *callInstr, IR::Instr *insertBeforeInstr, IR::Instr* bailoutInstr, const FunctionJITTimeInfo *funcInfo); + void InsertJsFunctionCheck(IR::Instr * callInstr, IR::Instr *insertBeforeInstr, IR::BailOutKind bailOutKind); + void InsertFunctionObjectCheck(IR::RegOpnd * funcOpnd, IR::Instr *insertBeforeInstr, IR::Instr* bailoutInstr, const FunctionJITTimeInfo *funcInfo); void TryResetObjTypeSpecFldInfoOn(IR::PropertySymOpnd* propertySymOpnd); void TryDisableRuntimePolymorphicCacheOn(IR::PropertySymOpnd* propertySymOpnd); diff --git a/lib/Backend/InlineeFrameInfo.cpp b/lib/Backend/InlineeFrameInfo.cpp index 4ac71f94bc3..86d1d2cd7cb 100644 --- a/lib/Backend/InlineeFrameInfo.cpp +++ b/lib/Backend/InlineeFrameInfo.cpp @@ -76,8 +76,7 @@ bool BailoutConstantValue::IsEqual(const BailoutConstantValue & bailoutConstValu return false; } - -void InlineeFrameInfo::AllocateRecord(Func* func, intptr_t functionBodyAddr) +void InlineeFrameInfo::AllocateRecord(Func* inlinee, intptr_t functionBodyAddr) { uint constantCount = 0; @@ -100,7 +99,7 @@ void InlineeFrameInfo::AllocateRecord(Func* func, intptr_t functionBodyAddr) // update the record if (!this->record) { - this->record = InlineeFrameRecord::New(func->GetNativeCodeDataAllocator(), (uint)arguments->Count(), constantCount, functionBodyAddr, this); + this->record = InlineeFrameRecord::New(inlinee->GetNativeCodeDataAllocator(), (uint)arguments->Count(), constantCount, functionBodyAddr, this); } uint i = 0; @@ -131,7 +130,7 @@ void InlineeFrameInfo::AllocateRecord(Func* func, intptr_t functionBodyAddr) { // Constants Assert(constantIndex < constantCount); - this->record->constants[constantIndex] = value.constValue.ToVar(func); + this->record->constants[constantIndex] = value.constValue.ToVar(inlinee); this->record->argOffsets[i] = constantIndex; constantIndex++; } @@ -150,10 +149,10 @@ void InlineeFrameInfo::AllocateRecord(Func* func, intptr_t functionBodyAddr) #endif this->record->functionOffset = offset; } - else + else if (inlinee->m_hasInlineArgsOpt) { Assert(constantIndex < constantCount); - this->record->constants[constantIndex] = function.constValue.ToVar(func); + this->record->constants[constantIndex] = function.constValue.ToVar(inlinee); this->record->functionOffset = constantIndex; } } @@ -162,10 +161,14 @@ void InlineeFrameRecord::PopulateParent(Func* func) { Assert(this->parent == nullptr); Assert(!func->IsTopFunc()); - if (func->GetParentFunc()->m_hasInlineArgsOpt) + for (Func* currFunc = func; !currFunc->IsTopFunc(); currFunc = currFunc->GetParentFunc()) { - this->parent = func->GetParentFunc()->frameInfo->record; - Assert(this->parent != nullptr); + if (currFunc->GetParentFunc()->frameInfo) + { + this->parent = currFunc->GetParentFunc()->frameInfo->record; + Assert(this->parent != nullptr); + return; + } } } @@ -211,9 +214,9 @@ void InlineeFrameRecord::Restore(Js::FunctionBody* functionBody, InlinedFrameLay BAILOUT_VERBOSE_TRACE(functionBody, _u("Restore function object: ")); // No deepCopy needed for just the function Js::Var varFunction = this->Restore(this->functionOffset, /*isFloat64*/ false, /*isInt32*/ false, layout, functionBody, boxValues); - Assert(Js::ScriptFunction::Is(varFunction)); + Assert(Js::VarIs(varFunction)); - Js::ScriptFunction* function = Js::ScriptFunction::FromVar(varFunction); + Js::ScriptFunction* function = Js::VarTo(varFunction); BAILOUT_VERBOSE_TRACE(functionBody, _u("Inlinee: %s [%d.%d] \n"), function->GetFunctionBody()->GetDisplayName(), function->GetFunctionBody()->GetSourceContextId(), function->GetFunctionBody()->GetLocalFunctionId()); inlinedFrame->function = function; @@ -230,7 +233,7 @@ void InlineeFrameRecord::Restore(Js::FunctionBody* functionBody, InlinedFrameLay #if DBG if (boxValues && !Js::TaggedNumber::Is(var)) { - Js::RecyclableObject *const recyclableObject = Js::RecyclableObject::FromVar(var); + Js::RecyclableObject *const recyclableObject = Js::VarTo(var); Assert(!ThreadContext::IsOnStack(recyclableObject)); } #endif @@ -272,22 +275,49 @@ void InlineeFrameRecord::RestoreFrames(Js::FunctionBody* functionBody, InlinedFr inlineDepth++; currentFrame = currentFrame->Next(); } - // Align the inline depth of the record with the frame that needs to be restored while (currentRecord && currentRecord->inlineDepth != inlineDepth) { currentRecord = currentRecord->parent; } + int currentDepth = inlineDepth; - while (currentRecord) + // Return if there is nothing to restore + if (!currentRecord) { - currentRecord->Restore(functionBody, currentFrame, callstack, boxValues); - currentRecord = currentRecord->parent; - currentFrame = currentFrame->Next(); + return; } - // Terminate the inlined stack - currentFrame->callInfo.Count = 0; + // We have InlineeFrameRecords for optimized frames and parents (i.e. inlinees) of optimized frames + // InlineeFrameRecords for unoptimized frames don't have values to restore and have argCount 0 + while (currentRecord && (currentRecord->argCount != 0 || currentRecord->parent)) + { + // There is nothing to restore for unoptimized frames + if (currentRecord->argCount != 0) + { + currentRecord->Restore(functionBody, currentFrame, callstack, boxValues); + } + currentRecord = currentRecord->parent; + + // Walk stack frames forward to the depth of the next record + if (currentRecord) + { + while (currentDepth != currentRecord->inlineDepth) + { + currentFrame = currentFrame->Next(); + currentDepth++; + } + } + } + + // If we don't have any more InlineeFrameRecords, the innermost inlinee was an optimized frame + if (!currentRecord) + { + // We determine the innermost inlinee by frame->Next()->callInfo.Count == 0 + // Optimized frames don't have this set when entering inlinee in the JITed code, so we must do + // this for them now + currentFrame->Next()->callInfo.Count = 0; + } } Js::Var InlineeFrameRecord::Restore(int offset, bool isFloat64, bool isInt32, Js::JavascriptCallStackLayout * layout, Js::FunctionBody* functionBody, bool boxValue) const diff --git a/lib/Backend/InliningDecider.cpp b/lib/Backend/InliningDecider.cpp index 2f21acd5cfa..b658759f3f8 100644 --- a/lib/Backend/InliningDecider.cpp +++ b/lib/Backend/InliningDecider.cpp @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #include "Backend.h" @@ -101,6 +102,17 @@ Js::FunctionInfo * InliningDecider::GetCallSiteCallbackInfo(Js::FunctionBody *co return profileData->GetCallbackInfo(inliner, profiledCallSiteId); } +Js::FunctionInfo * InliningDecider::GetCallApplyTargetInfo(Js::FunctionBody *const inliner, const Js::ProfileId profiledCallSiteId) +{ + Assert(inliner != nullptr); + Assert(profiledCallSiteId < inliner->GetProfiledCallSiteCount()); + + Js::DynamicProfileInfo * profileData = inliner->GetAnyDynamicProfileInfo(); + Assert(profileData != nullptr); + + return profileData->GetCallApplyTargetInfo(inliner, profiledCallSiteId); +} + uint16 InliningDecider::GetConstantArgInfo(Js::FunctionBody *const inliner, const Js::ProfileId profiledCallSiteId) { Assert(inliner); @@ -147,6 +159,16 @@ Js::FunctionInfo * InliningDecider::InlineCallback(Js::FunctionBody *const inlin return nullptr; } +Js::FunctionInfo * InliningDecider::InlineCallApplyTarget(Js::FunctionBody *const inliner, const Js::ProfileId profiledCallSiteId, uint recursiveInlineDepth) +{ + Js::FunctionInfo * functionInfo = GetCallApplyTargetInfo(inliner, profiledCallSiteId); + if (functionInfo) + { + return Inline(inliner, functionInfo, false, false, false, GetConstantArgInfo(inliner, profiledCallSiteId), profiledCallSiteId, recursiveInlineDepth, true); + } + return functionInfo; +} + uint InliningDecider::InlinePolymorphicCallSite(Js::FunctionBody *const inliner, const Js::ProfileId profiledCallSiteId, Js::FunctionBody** functionBodyArray, uint functionBodyArrayLength, bool* canInlineArray, uint recursiveInlineDepth) { @@ -484,12 +506,14 @@ bool InliningDecider::GetBuiltInInfoCommon( *inlineCandidateOpCode = Js::OpCode::InlineArrayPop; break; + case Js::JavascriptBuiltInFunction::JavascriptArray_At: case Js::JavascriptBuiltInFunction::JavascriptArray_Concat: case Js::JavascriptBuiltInFunction::JavascriptArray_Reverse: case Js::JavascriptBuiltInFunction::JavascriptArray_Shift: case Js::JavascriptBuiltInFunction::JavascriptArray_Slice: case Js::JavascriptBuiltInFunction::JavascriptArray_Splice: + case Js::JavascriptBuiltInFunction::JavascriptString_At: case Js::JavascriptBuiltInFunction::JavascriptString_Link: goto CallDirectCommon; @@ -516,6 +540,7 @@ bool InliningDecider::GetBuiltInInfoCommon( case Js::JavascriptBuiltInFunction::JavascriptArray_Includes: case Js::JavascriptBuiltInFunction::JavascriptObject_HasOwnProperty: + case Js::JavascriptBuiltInFunction::JavascriptObject_HasOwn: case Js::JavascriptBuiltInFunction::JavascriptArray_IsArray: *returnType = ValueType::Boolean; goto CallDirectCommon; @@ -553,6 +578,9 @@ bool InliningDecider::GetBuiltInInfoCommon( case Js::JavascriptBuiltInFunction::JavascriptFunction_Call: *inlineCandidateOpCode = Js::OpCode::InlineFunctionCall; break; + case Js::JavascriptBuiltInFunction::EngineInterfaceObject_CallInstanceFunction: + *inlineCandidateOpCode = Js::OpCode::InlineCallInstanceFunction; + break; // The following are not currently inlined, but are tracked for their return type // TODO: Add more built-ins that return objects. May consider tracking all built-ins. @@ -649,12 +677,6 @@ bool InliningDecider::GetBuiltInInfoCommon( *returnType = ValueType::GetObject(ObjectType::CharArray); break; -#ifdef ENABLE_DOM_FAST_PATH - case Js::JavascriptBuiltInFunction::DOMFastPathGetter: - *inlineCandidateOpCode = Js::OpCode::DOMFastPathGetter; - break; -#endif - default: return false; } diff --git a/lib/Backend/InliningDecider.h b/lib/Backend/InliningDecider.h index 2a15a64da24..0d14a6e7350 100644 --- a/lib/Backend/InliningDecider.h +++ b/lib/Backend/InliningDecider.h @@ -32,6 +32,8 @@ class InliningDecider Js::FunctionInfo *GetCallSiteFuncInfo(Js::FunctionBody *const inliner, const Js::ProfileId profiledCallSiteId, bool* isConstructorCall, bool* isPolymorphicCall); Js::FunctionInfo * InlineCallback(Js::FunctionBody *const inliner, const Js::ProfileId profiledCallSiteId, uint recursiveInlineDepth); Js::FunctionInfo * GetCallSiteCallbackInfo(Js::FunctionBody *const inliner, const Js::ProfileId profiledCallSiteId); + Js::FunctionInfo * InlineCallApplyTarget(Js::FunctionBody *const inliner, const Js::ProfileId profiledCallSiteId, uint recursiveInlineDepth); + Js::FunctionInfo * GetCallApplyTargetInfo(Js::FunctionBody *const inliner, const Js::ProfileId profiledCallSiteId); uint16 GetConstantArgInfo(Js::FunctionBody *const inliner, const Js::ProfileId profiledCallSiteId); bool HasCallSiteInfo(Js::FunctionBody *const inliner, const Js::ProfileId profiledCallSiteId); uint InlinePolymorphicCallSite(Js::FunctionBody *const inliner, const Js::ProfileId profiledCallSiteId, Js::FunctionBody** functionBodyArray, uint functionBodyArrayLength, bool* canInlineArray, uint recursiveInlineDepth = 0); @@ -135,6 +137,12 @@ class InliningDecider { \ Output::Flush(); \ } +#define INLINE_CALLBACKS_TRACE(...) \ + if (PHASE_TESTTRACE(Js::InlineCallbacksPhase, this->topFunc) || PHASE_TRACE(Js::InlineCallbacksPhase, this->topFunc)) \ + { \ + Output::Print(__VA_ARGS__); \ + Output::Flush(); \ + } #else #define INLINE_VERBOSE_TRACE(...) #define POLYMORPHIC_INLINE_TESTTRACE(...) @@ -143,4 +151,6 @@ class InliningDecider #define INLINE_FLUSH() #define INLINE_TESTTRACE(...) #define INLINE_TESTTRACE_VERBOSE(...) +#define INLINE_TRACE_AND_TESTTRACE(...) +#define INLINE_CALLBACKS_TRACE(...) #endif diff --git a/lib/Backend/InterpreterThunkEmitter.cpp b/lib/Backend/InterpreterThunkEmitter.cpp index e7f9bcbcb03..7d459f47a5d 100644 --- a/lib/Backend/InterpreterThunkEmitter.cpp +++ b/lib/Backend/InterpreterThunkEmitter.cpp @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #include "Backend.h" @@ -157,19 +158,31 @@ constexpr BYTE Epilog[] = { }; #elif defined(_M_ARM64) +#ifdef _WIN32 constexpr BYTE FunctionInfoOffset = 24; constexpr BYTE FunctionProxyOffset = 28; constexpr BYTE DynamicThunkAddressOffset = 32; constexpr BYTE ThunkAddressOffset = 36; +#else +constexpr BYTE FunctionInfoOffset = 8; +constexpr BYTE FunctionProxyOffset = 12; +constexpr BYTE DynamicThunkAddressOffset = 16; +constexpr BYTE ThunkAddressOffset = 20; +#endif //TODO: saravind :Implement Range Check for ARM64 constexpr BYTE InterpreterThunk[InterpreterThunkEmitter::InterpreterThunkSize] = { +#ifdef _WIN32 0xFD, 0x7B, 0xBB, 0xA9, //stp fp, lr, [sp, #-80]! ;Prologue 0xFD, 0x03, 0x00, 0x91, //mov fp, sp ;update frame pointer to the stack pointer 0xE0, 0x07, 0x01, 0xA9, //stp x0, x1, [sp, #16] ;Prologue again; save all registers 0xE2, 0x0F, 0x02, 0xA9, //stp x2, x3, [sp, #32] 0xE4, 0x17, 0x03, 0xA9, //stp x4, x5, [sp, #48] 0xE6, 0x1F, 0x04, 0xA9, //stp x6, x7, [sp, #64] +#else + 0xFD, 0x7B, 0xBF, 0xA9, //stp fp, lr, [sp, #-16]! ;Prologue + 0xFD, 0x03, 0x00, 0x91, //mov fp, sp ;update frame pointer to the stack pointer +#endif 0x02, 0x00, 0x40, 0xF9, //ldr x2, [x0, #0x00] ;offset will be replaced with Offset of FunctionInfo 0x40, 0x00, 0x40, 0xF9, //ldr x0, [x2, #0x00] ;offset will be replaced with Offset of FunctionProxy 0x03, 0x00, 0x40, 0xF9, //ldr x3, [x0, #0x00] ;offset will be replaced with offset of DynamicInterpreterThunk @@ -191,7 +204,11 @@ constexpr BYTE Call[] = { }; constexpr BYTE Epilog[] = { +#ifdef _WIN32 0xfd, 0x7b, 0xc5, 0xa8, // ldp fp, lr, [sp], #80 +#else + 0xfd, 0x7b, 0xc1, 0xa8, // ldp fp, lr, [sp], #16 +#endif 0xc0, 0x03, 0x5f, 0xd6 // ret }; #else // x86 diff --git a/lib/Backend/InterpreterThunkEmitter.h b/lib/Backend/InterpreterThunkEmitter.h index 2420ca7a5b3..10c4fc4d769 100644 --- a/lib/Backend/InterpreterThunkEmitter.h +++ b/lib/Backend/InterpreterThunkEmitter.h @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #pragma once @@ -68,7 +69,11 @@ class InterpreterThunkEmitter #elif defined(_M_ARM) static constexpr size_t InterpreterThunkSize = 72; #elif defined(_M_ARM64) +#ifdef _WIN32 static constexpr size_t InterpreterThunkSize = 64; +#else + static constexpr size_t InterpreterThunkSize = 48; +#endif #else static constexpr size_t InterpreterThunkSize = 56; #endif diff --git a/lib/Backend/JITTimeFunctionBody.cpp b/lib/Backend/JITTimeFunctionBody.cpp index 23b3da8f978..eab25a41890 100644 --- a/lib/Backend/JITTimeFunctionBody.cpp +++ b/lib/Backend/JITTimeFunctionBody.cpp @@ -162,6 +162,7 @@ JITTimeFunctionBody::InitializeJITFunctionData( } } + jitBody->yieldReg = functionBody->GetYieldRegister(); jitBody->localFrameDisplayReg = functionBody->GetLocalFrameDisplayRegister(); jitBody->localClosureReg = functionBody->GetLocalClosureRegister(); jitBody->envReg = functionBody->GetEnvRegister(); @@ -174,6 +175,7 @@ JITTimeFunctionBody::InitializeJITFunctionData( } jitBody->envDepth = functionBody->GetEnvDepth(); jitBody->profiledCallSiteCount = functionBody->GetProfiledCallSiteCount(); + jitBody->profiledCallApplyCallSiteCount = functionBody->GetProfiledCallApplyCallSiteCount(); jitBody->inParamCount = functionBody->GetInParamsCount(); jitBody->thisRegisterForEventHandler = functionBody->GetThisRegisterForEventHandler(); jitBody->funcExprScopeRegister = functionBody->GetFuncExprScopeRegister(); @@ -251,6 +253,12 @@ JITTimeFunctionBody::InitializeJITFunctionData( jitBody->functionSlotsInCachedScopeCount = slotIdInCachedScopeToNestedIndexArray->count; jitBody->slotIdInCachedScopeToNestedIndexArray = slotIdInCachedScopeToNestedIndexArray->elements; } + Js::ProfileId * callSiteToCallApplyCallSiteArray = functionBody->GetCallSiteToCallApplyCallSiteArrayWithLock(); + if (callSiteToCallApplyCallSiteArray) + { + jitBody->callSiteToCallApplyCallSiteArrayCount = jitBody->profiledCallSiteCount; + jitBody->callSiteToCallApplyCallSiteArray = callSiteToCallApplyCallSiteArray; + } #ifdef ASMJS_PLAT if (functionBody->GetIsAsmJsFunction()) { @@ -394,6 +402,12 @@ JITTimeFunctionBody::GetLocalFrameDisplayReg() const return static_cast(m_bodyData.localFrameDisplayReg); } +Js::RegSlot +JITTimeFunctionBody::GetYieldReg() const +{ + return static_cast(m_bodyData.yieldReg); +} + Js::RegSlot JITTimeFunctionBody::GetLocalClosureReg() const { @@ -809,6 +823,12 @@ JITTimeFunctionBody::NeedScopeObjectForArguments(bool hasNonSimpleParams) const && !dontNeedScopeObject; } +bool +JITTimeFunctionBody::RegIsConstant(Js::RegSlot reg) const +{ + return reg > 0 && reg < this->GetConstCount(); +} + bool JITTimeFunctionBody::GetDoScopeObjectCreation() const { @@ -1052,6 +1072,22 @@ JITTimeFunctionBody::HasPropIdToFormalsMap() const return m_bodyData.propertyIdsForRegSlotsCount > 0 && GetFormalsPropIdArray() != nullptr; } +Js::ProfileId +JITTimeFunctionBody::GetCallApplyCallSiteIdForCallSiteId(Js::ProfileId callSiteId) const +{ + AssertOrFailFast(callSiteId < m_bodyData.profiledCallSiteCount); + Js::ProfileId callApplyId = Js::Constants::NoProfileId; + if (m_bodyData.callSiteToCallApplyCallSiteArray) + { + callApplyId = m_bodyData.callSiteToCallApplyCallSiteArray[callSiteId]; + AssertOrFailFast( + callApplyId == Js::Constants::NoProfileId || + callApplyId < m_bodyData.profiledCallApplyCallSiteCount); + } + + return callApplyId; +} + bool JITTimeFunctionBody::IsRegSlotFormal(Js::RegSlot reg) const { diff --git a/lib/Backend/JITTimeFunctionBody.h b/lib/Backend/JITTimeFunctionBody.h index 2cd9b99d72b..0f0ea51786b 100644 --- a/lib/Backend/JITTimeFunctionBody.h +++ b/lib/Backend/JITTimeFunctionBody.h @@ -37,6 +37,7 @@ class JITTimeFunctionBody uint GetInlineCacheCount() const; uint GetRecursiveCallSiteCount() const; uint GetForInLoopDepth() const; + Js::RegSlot GetYieldReg() const; Js::RegSlot GetLocalFrameDisplayReg() const; Js::RegSlot GetLocalClosureReg() const; Js::RegSlot GetEnvReg() const; @@ -102,6 +103,7 @@ class JITTimeFunctionBody void EnsureConsistentConstCount() const; bool HasComputedName() const; bool HasHomeObj() const; + bool RegIsConstant(Js::RegSlot reg) const; const byte * GetByteCodeBuffer() const; StatementMapIDL * GetFullStatementMap() const; @@ -177,6 +179,7 @@ class JITTimeFunctionBody bool HasProfileInfo() const; bool IsRegSlotFormal(Js::RegSlot reg) const; bool HasPropIdToFormalsMap() const; + Js::ProfileId GetCallApplyCallSiteIdForCallSiteId(Js::ProfileId callSiteId) const; static bool LoopContains(const JITLoopHeaderIDL * loop1, const JITLoopHeaderIDL * loop2); diff --git a/lib/Backend/JITTimeWorkItem.cpp b/lib/Backend/JITTimeWorkItem.cpp index 040d92a0366..4cd9c5f1ec0 100644 --- a/lib/Backend/JITTimeWorkItem.cpp +++ b/lib/Backend/JITTimeWorkItem.cpp @@ -41,9 +41,7 @@ JITTimeWorkItem::IsLoopBody() const bool JITTimeWorkItem::IsJitInDebugMode() const { - // TODO (michhol): flags? - return Js::Configuration::Global.EnableJitInDebugMode() - && m_workItemData->isJitInDebugMode; + return m_workItemData->isJitInDebugMode; } intptr_t diff --git a/lib/Backend/JitTransferData.cpp b/lib/Backend/JitTransferData.cpp index 3c99866b441..bb50778ae59 100644 --- a/lib/Backend/JitTransferData.cpp +++ b/lib/Backend/JitTransferData.cpp @@ -115,4 +115,4 @@ void JitTransferData::Cleanup() } midl_user_free(entries); } -} \ No newline at end of file +} diff --git a/lib/Backend/JitTransferData.h b/lib/Backend/JitTransferData.h index 0daf45e4a07..2cc8179b73f 100644 --- a/lib/Backend/JitTransferData.h +++ b/lib/Backend/JitTransferData.h @@ -111,4 +111,4 @@ class JitTransferData void Cleanup(); private: void EnsureJitTimeTypeRefs(Recycler* recycler); -}; \ No newline at end of file +}; diff --git a/lib/Backend/JnHelperMethodList.h b/lib/Backend/JnHelperMethodList.h index 4c37b00cab8..ffc960a97eb 100644 --- a/lib/Backend/JnHelperMethodList.h +++ b/lib/Backend/JnHelperMethodList.h @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- -// Copyright (C) Microsoft Corporation and contributors. All rights reserved. +// Copyright (C) Microsoft. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #ifndef HELPERCALL @@ -29,6 +30,7 @@ HELPERCALLCHK(ScrFunc_OP_NewScFunc, Js::ScriptFunction::OP_NewScFunc, AttrCanNot HELPERCALLCHK(ScrFunc_OP_NewScFuncHomeObj, Js::ScriptFunction::OP_NewScFuncHomeObj, AttrCanNotBeReentrant) HELPERCALLCHK(ScrFunc_OP_NewScGenFunc, Js::JavascriptGeneratorFunction::OP_NewScGenFunc, AttrCanNotBeReentrant) HELPERCALLCHK(ScrFunc_OP_NewScGenFuncHomeObj, Js::JavascriptGeneratorFunction::OP_NewScGenFuncHomeObj, AttrCanNotBeReentrant) +HELPERCALLCHK(ScrFunc_OP_NewClassConstructor, Js::ScriptFunction::OP_NewClassConstructor, AttrCanNotBeReentrant) HELPERCALLCHK(ScrFunc_CheckAlignment, Js::JavascriptFunction::CheckAlignment, AttrCanNotBeReentrant) HELPERCALLCHK(ScrObj_LdHandlerScope, Js::JavascriptOperators::OP_LdHandlerScope, 0) HELPERCALLCHK(ScrObj_LdFrameDisplay, Js::JavascriptOperators::OP_LdFrameDisplay, AttrCanNotBeReentrant) @@ -43,7 +45,9 @@ HELPERCALLCHK(ScrObj_OP_IsInst, Js::JavascriptOperators::OP_IsInst, AttrCanThrow HELPERCALLCHK(Op_IsIn, Js::JavascriptOperators::IsIn, AttrCanThrow) HELPERCALLCHK(Op_IsObject, (BOOL (*) (Js::Var))Js::JavascriptOperators::IsObject, AttrCanNotBeReentrant) +HELPERCALLCHK(Op_IsObjectOrNull, (BOOL (*) (Js::Var))Js::JavascriptOperators::IsObjectOrNull, AttrCanNotBeReentrant) HELPERCALLCHK(Op_IsClassConstructor, Js::JavascriptOperators::IsClassConstructor, AttrCanNotBeReentrant) +HELPERCALLCHK(Op_IsConstructor, (bool (*)(Js::Var))Js::JavascriptOperators::IsConstructor, AttrCanNotBeReentrant) HELPERCALLCHK(Op_IsBaseConstructorKind, Js::JavascriptOperators::IsBaseConstructorKind, AttrCanNotBeReentrant) HELPERCALLCHK(Op_LoadHeapArguments, Js::JavascriptOperators::LoadHeapArguments, AttrCanNotBeReentrant) HELPERCALLCHK(Op_LoadHeapArgsCached, Js::JavascriptOperators::LoadHeapArgsCached, AttrCanNotBeReentrant) @@ -60,12 +64,12 @@ HELPERCALLCHK(OP_CloneInnerScopeSlots, Js::JavascriptOperators::OP_CloneScopeSlo HELPERCALLCHK(OP_CloneBlockScope, Js::JavascriptOperators::OP_CloneBlockScope, AttrCanNotBeReentrant) HELPERCALLCHK(LdThis, Js::JavascriptOperators::OP_GetThis, AttrCanThrow) HELPERCALLCHK(LdThisNoFastPath, Js::JavascriptOperators::OP_GetThisNoFastPath, 0) -HELPERCALLCHK(StrictLdThis, Js::JavascriptOperators::OP_StrictGetThis, AttrCanNotBeReentrant) HELPERCALLCHK(Op_LdElemUndef, Js::JavascriptOperators::OP_LoadUndefinedToElement, AttrCanNotBeReentrant) HELPERCALLCHK(Op_LdElemUndefDynamic, Js::JavascriptOperators::OP_LoadUndefinedToElementDynamic, AttrCanNotBeReentrant) HELPERCALLCHK(Op_LdElemUndefScoped, Js::JavascriptOperators::OP_LoadUndefinedToElementScoped, AttrCanNotBeReentrant) HELPERCALLCHK(Op_EnsureNoRootProperty, Js::JavascriptOperators::OP_EnsureNoRootProperty, AttrCanThrow | AttrCanNotBeReentrant) HELPERCALLCHK(Op_EnsureNoRootRedeclProperty, Js::JavascriptOperators::OP_EnsureNoRootRedeclProperty, AttrCanThrow | AttrCanNotBeReentrant) +HELPERCALLCHK(Op_EnsureCanDeclGloFunc, Js::JavascriptOperators::OP_EnsureCanDeclGloFunc, AttrCanThrow | AttrCanNotBeReentrant) HELPERCALLCHK(Op_EnsureNoRedeclPropertyScoped, Js::JavascriptOperators::OP_ScopedEnsureNoRedeclProperty, AttrCanThrow | AttrCanNotBeReentrant) HELPERCALLCHK(Op_ToSpreadedFunctionArgument, Js::JavascriptOperators::OP_LdCustomSpreadIteratorList, AttrCanThrow) @@ -73,8 +77,8 @@ HELPERCALLCHK(Op_ConvObject, Js::JavascriptOperators::ToObject, AttrCanThrow | A HELPERCALLCHK(Op_NewUnscopablesWrapperObject, Js::JavascriptOperators::ToUnscopablesWrapperObject, AttrCanThrow | AttrCanNotBeReentrant) HELPERCALLCHK(SetComputedNameVar, Js::JavascriptOperators::OP_SetComputedNameVar, AttrCanNotBeReentrant) HELPERCALLCHK(Op_UnwrapWithObj, Js::JavascriptOperators::OP_UnwrapWithObj, AttrCanNotBeReentrant) -HELPERCALLCHK(Op_ConvNumber_Full, Js::JavascriptOperators::ToNumber, AttrCanThrow) -HELPERCALLCHK(Op_ConvNumberInPlace, Js::JavascriptOperators::ToNumberInPlace, AttrCanThrow) +HELPERCALLCHK(Op_ConvNumber_Full, Js::JavascriptOperators::ToNumeric, AttrCanThrow) +HELPERCALLCHK(Op_ConvNumberInPlace, Js::JavascriptOperators::ToNumericInPlace, AttrCanThrow) HELPERCALLCHK(Op_ConvNumber_Helper, Js::JavascriptConversion::ToNumber_Helper, 0) HELPERCALLCHK(Op_ConvFloat_Helper, Js::JavascriptConversion::ToFloat_Helper, 0) HELPERCALLCHK(Op_ConvNumber_FromPrimitive, Js::JavascriptConversion::ToNumber_FromPrimitive, 0) @@ -254,6 +258,17 @@ HELPERCALLCHK(Op_PatchPutValueWithThisPtrNoLocalFastPathPolymorphic, ((void (*)( HELPERCALLCHK(Op_PatchPutRootValueNoLocalFastPath, ((void (*)(Js::FunctionBody *const, Js::InlineCache *const, const Js::InlineCacheIndex, Js::Var, Js::PropertyId, Js::Var, Js::PropertyOperationFlags))Js::JavascriptOperators::PatchPutRootValueNoLocalFastPath), AttrCanThrow) HELPERCALLCHK(Op_PatchPutRootValueNoLocalFastPathPolymorphic, ((void (*)(Js::FunctionBody *const, Js::PolymorphicInlineCache *const, const Js::InlineCacheIndex, Js::Var, Js::PropertyId, Js::Var, Js::PropertyOperationFlags))Js::JavascriptOperators::PatchPutRootValueNoLocalFastPath), AttrCanThrow) +HELPERCALLCHK(Op_PatchInitValueCantChangeType, ((bool (*)(Js::FunctionBody *const, Js::InlineCache *const, const Js::InlineCacheIndex, Js::RecyclableObject*, Js::PropertyId, Js::Var))Js::JavascriptOperators::PatchInitValueCantChangeType), AttrCanThrow) +HELPERCALLCHK(Op_PatchInitValuePolymorphicCantChangeType, ((bool (*)(Js::FunctionBody *const, Js::PolymorphicInlineCache *const, const Js::InlineCacheIndex, Js::RecyclableObject*, Js::PropertyId, Js::Var))Js::JavascriptOperators::PatchInitValueCantChangeType), AttrCanThrow) +HELPERCALLCHK(Op_PatchPutValueCantChangeType, ((bool (*)(Js::FunctionBody *const, Js::InlineCache *const, const Js::InlineCacheIndex, Js::Var, Js::PropertyId, Js::Var, Js::PropertyOperationFlags))Js::JavascriptOperators::PatchPutValueCantChangeType), AttrCanThrow) +HELPERCALLCHK(Op_PatchPutValueWithThisPtrCantChangeType, ((bool (*)(Js::FunctionBody *const, Js::InlineCache *const, const Js::InlineCacheIndex, Js::Var, Js::PropertyId, Js::Var, Js::Var, Js::PropertyOperationFlags))Js::JavascriptOperators::PatchPutValueWithThisPtrCantChangeType), AttrCanThrow) +HELPERCALLCHK(Op_PatchPutValuePolymorphicCantChangeType, ((bool (*)(Js::FunctionBody *const, Js::PolymorphicInlineCache *const, const Js::InlineCacheIndex, Js::Var, Js::PropertyId, Js::Var, Js::PropertyOperationFlags))Js::JavascriptOperators::PatchPutValueCantChangeType), AttrCanThrow) +HELPERCALLCHK(Op_PatchPutValueWithThisPtrPolymorphicCantChangeType, ((bool (*)(Js::FunctionBody *const, Js::PolymorphicInlineCache *const, const Js::InlineCacheIndex, Js::Var, Js::PropertyId, Js::Var, Js::Var, Js::PropertyOperationFlags))Js::JavascriptOperators::PatchPutValueWithThisPtrCantChangeType), AttrCanThrow) +HELPERCALLCHK(Op_PatchPutValueNoLocalFastPathCantChangeType, ((bool (*)(Js::FunctionBody *const, Js::InlineCache *const, const Js::InlineCacheIndex, Js::Var, Js::PropertyId, Js::Var, Js::PropertyOperationFlags))Js::JavascriptOperators::PatchPutValueNoLocalFastPathCantChangeType), AttrCanThrow) +HELPERCALLCHK(Op_PatchPutValueWithThisPtrNoLocalFastPathCantChangeType, ((bool (*)(Js::FunctionBody *const, Js::InlineCache *const, const Js::InlineCacheIndex, Js::Var, Js::PropertyId, Js::Var, Js::Var, Js::PropertyOperationFlags))Js::JavascriptOperators::PatchPutValueWithThisPtrNoLocalFastPathCantChangeType), AttrCanThrow) +HELPERCALLCHK(Op_PatchPutValueNoLocalFastPathPolymorphicCantChangeType, ((bool (*)(Js::FunctionBody *const, Js::PolymorphicInlineCache *const, const Js::InlineCacheIndex, Js::Var, Js::PropertyId, Js::Var, Js::PropertyOperationFlags))Js::JavascriptOperators::PatchPutValueNoLocalFastPathCantChangeType), AttrCanThrow) +HELPERCALLCHK(Op_PatchPutValueWithThisPtrNoLocalFastPathPolymorphicCantChangeType, ((bool (*)(Js::FunctionBody *const, Js::PolymorphicInlineCache *const, const Js::InlineCacheIndex, Js::Var, Js::PropertyId, Js::Var, Js::Var, Js::PropertyOperationFlags))Js::JavascriptOperators::PatchPutValueWithThisPtrNoLocalFastPathCantChangeType), AttrCanThrow) + HELPERCALLCHK(Op_PatchInitValueCheckLayout, ((bool (*)(Js::FunctionBody *const, Js::InlineCache *const, const Js::InlineCacheIndex, Js::RecyclableObject*, Js::PropertyId, Js::Var))Js::JavascriptOperators::PatchInitValueCheckLayout), AttrCanThrow) HELPERCALLCHK(Op_PatchInitValuePolymorphicCheckLayout, ((bool (*)(Js::FunctionBody *const, Js::PolymorphicInlineCache *const, const Js::InlineCacheIndex, Js::RecyclableObject*, Js::PropertyId, Js::Var))Js::JavascriptOperators::PatchInitValueCheckLayout), AttrCanThrow) HELPERCALLCHK(Op_PatchPutValueCheckLayout, ((bool (*)(Js::FunctionBody *const, Js::InlineCache *const, const Js::InlineCacheIndex, Js::Var, Js::PropertyId, Js::Var, Js::PropertyOperationFlags))Js::JavascriptOperators::PatchPutValueCheckLayout), AttrCanThrow) @@ -338,7 +353,7 @@ HELPERCALLCHK(NewScObjectNoArgNoCtor, Js::JavascriptOperators::NewScObjectNoArgN HELPERCALLCHK(UpdateNewScObjectCache, Js::JavascriptOperators::UpdateNewScObjectCache, AttrCanNotBeReentrant) HELPERCALLCHK(EnsureObjectLiteralType, Js::JavascriptOperators::EnsureObjectLiteralType, AttrCanNotBeReentrant) -HELPERCALLCHK(OP_InitClass, Js::JavascriptOperators::OP_InitClass, AttrCanThrow) +HELPERCALLCHK(Op_NewClassProto, Js::JavascriptOperators::OP_NewClassProto, AttrCanNotBeReentrant) HELPERCALLCHK(OP_ClearAttributes, Js::JavascriptOperators::OP_ClearAttributes, AttrCanThrow | AttrCanNotBeReentrant) @@ -424,6 +439,7 @@ HELPERCALLCHK(ProfiledLdRootFld, Js::ProfilingHelpers::ProfiledLdRootFld_Jit, 0) HELPERCALLCHK(ProfiledLdRootMethodFld, Js::ProfilingHelpers::ProfiledLdRootMethodFld_Jit, 0) HELPERCALLCHK(ProfiledStFld, Js::ProfilingHelpers::ProfiledStFld_Jit, 0) HELPERCALLCHK(ProfiledStSuperFld, Js::ProfilingHelpers::ProfiledStSuperFld_Jit, 0) +HELPERCALLCHK(ProfiledStSuperFld_Strict, Js::ProfilingHelpers::ProfiledStSuperFld_Strict_Jit, 0) HELPERCALLCHK(ProfiledStFld_Strict, Js::ProfilingHelpers::ProfiledStFld_Strict_Jit, 0) HELPERCALLCHK(ProfiledStRootFld, Js::ProfilingHelpers::ProfiledStRootFld_Jit, 0) HELPERCALLCHK(ProfiledStRootFld_Strict, Js::ProfilingHelpers::ProfiledStRootFld_Strict_Jit, 0) @@ -434,7 +450,6 @@ HELPERCALLCHK(SimpleProfileCall_DefaultInlineCacheIndex, Js::SimpleJitHelpers::P HELPERCALLCHK(SimpleProfileCall, Js::SimpleJitHelpers::ProfileCall, AttrCanNotBeReentrant) HELPERCALLCHK(SimpleProfileReturnTypeCall, Js::SimpleJitHelpers::ProfileReturnTypeCall, AttrCanNotBeReentrant) //HELPERCALLCHK(SimpleProfiledLdLen, Js::SimpleJitHelpers::ProfiledLdLen_A, AttrCanThrow) //Can throw because it mirrors OP_GetProperty -HELPERCALLCHK(SimpleProfiledStrictLdThis, Js::SimpleJitHelpers::ProfiledStrictLdThis, AttrCanNotBeReentrant) HELPERCALLCHK(SimpleProfiledLdThis, Js::SimpleJitHelpers::ProfiledLdThis, AttrCanNotBeReentrant) HELPERCALLCHK(SimpleProfiledSwitch, Js::SimpleJitHelpers::ProfiledSwitch, AttrCanNotBeReentrant) HELPERCALLCHK(SimpleProfiledDivide, Js::SimpleJitHelpers::ProfiledDivide, AttrCanThrow) @@ -449,7 +464,7 @@ HELPERCALLCHK(SimpleRecordLoopImplicitCallFlags, Js::SimpleJitHelpers::RecordLoo HELPERCALLCHK(ScriptAbort, Js::JavascriptOperators::ScriptAbort, AttrCanThrow | AttrCanNotBeReentrant) -HELPERCALLCHK(NoSaveRegistersBailOutForElidedYield, BailOutRecord::BailOutForElidedYield, 0) +HELPERCALLCHK(NoSaveRegistersBailOutForElidedYield, BailOutRecord::BailOutForElidedYield, AttrCanNotBeReentrant) // We don't want these functions to be valid iCall targets because they can be used to disclose stack addresses // which CFG cannot defend against. Instead, return these addresses in GetNonTableMethodAddress @@ -461,6 +476,7 @@ HELPERCALL(SaveAllRegistersNoSse2AndBranchBailOut, nullptr, AttrCanNotBeReentran #endif //Helpers for inlining built-ins +HELPERCALLCHK(Array_At, Js::JavascriptArray::EntryAt, 0) HELPERCALLCHK(Array_Concat, Js::JavascriptArray::EntryConcat, 0) HELPERCALLCHK(Array_IndexOf, Js::JavascriptArray::EntryIndexOf, 0) HELPERCALLCHK(Array_Includes, Js::JavascriptArray::EntryIncludes, 0) @@ -470,7 +486,7 @@ HELPERCALLCHK(Array_VarPush, Js::JavascriptArray::Push, 0) HELPERCALLCHK(Array_NativeIntPush, Js::JavascriptNativeIntArray::Push, 0) HELPERCALLCHK(Array_NativeFloatPush, Js::JavascriptNativeFloatArray::Push, 0) HELPERCALLCHK(Array_VarPop, Js::JavascriptArray::Pop, 0) -HELPERCALLCHK(Array_NativePopWithNoDst, Js::JavascriptNativeArray::PopWithNoDst, AttrCanNotBeReentrant) +HELPERCALLCHK(Array_NativePopWithNoDst, Js::JavascriptNativeArray::PopWithNoDst, 0) HELPERCALLCHK(Array_NativeIntPop, Js::JavascriptNativeIntArray::Pop, AttrCanNotBeReentrant) HELPERCALLCHK(Array_NativeFloatPop, Js::JavascriptNativeFloatArray::Pop, AttrCanNotBeReentrant) HELPERCALLCHK(Array_Reverse, Js::JavascriptArray::EntryReverse, 0) @@ -480,6 +496,7 @@ HELPERCALLCHK(Array_Splice, Js::JavascriptArray::EntrySplice, 0) HELPERCALLCHK(Array_Unshift, Js::JavascriptArray::EntryUnshift, 0) HELPERCALLCHK(Array_IsArray, Js::JavascriptArray::EntryIsArray, 0) +HELPERCALL(String_At, Js::JavascriptString::EntryAt, 0) HELPERCALL(String_Concat, Js::JavascriptString::EntryConcat, 0) HELPERCALL(String_CharCodeAt, Js::JavascriptString::EntryCharCodeAt, 0) HELPERCALL(String_CharAt, Js::JavascriptString::EntryCharAt, 0) @@ -501,13 +518,14 @@ HELPERCALL(String_ToLocaleUpperCase, Js::JavascriptString::EntryToLocaleUpperCas HELPERCALL(String_ToLowerCase, Js::JavascriptString::EntryToLowerCase, 0) HELPERCALL(String_ToUpperCase, Js::JavascriptString::EntryToUpperCase, 0) HELPERCALL(String_Trim, Js::JavascriptString::EntryTrim, 0) -HELPERCALL(String_TrimLeft, Js::JavascriptString::EntryTrimLeft, 0) -HELPERCALL(String_TrimRight, Js::JavascriptString::EntryTrimRight, 0) +HELPERCALL(String_TrimLeft, Js::JavascriptString::EntryTrimStart, 0) +HELPERCALL(String_TrimRight, Js::JavascriptString::EntryTrimEnd, 0) HELPERCALL(String_GetSz, Js::JavascriptString::GetSzHelper, 0) HELPERCALL(String_PadStart, Js::JavascriptString::EntryPadStart, 0) HELPERCALL(String_PadEnd, Js::JavascriptString::EntryPadEnd, 0) HELPERCALLCHK(GlobalObject_ParseInt, Js::GlobalObject::EntryParseInt, 0) HELPERCALLCHK(Object_HasOwnProperty, Js::JavascriptObject::EntryHasOwnProperty, 0) +HELPERCALLCHK(Object_HasOwn, Js::JavascriptObject::EntryHasOwn, 0) HELPERCALL(RegExp_SplitResultUsed, Js::RegexHelper::RegexSplitResultUsed, 0) HELPERCALL(RegExp_SplitResultUsedAndMayBeTemp, Js::RegexHelper::RegexSplitResultUsedAndMayBeTemp, 0) @@ -529,15 +547,28 @@ HELPERCALL(EnsureFunctionProxyDeferredPrototypeType, &Js::FunctionProxy::EnsureF HELPERCALL(SpreadArrayLiteral, Js::JavascriptArray::SpreadArrayArgs, 0) HELPERCALL(SpreadCall, Js::JavascriptFunction::EntrySpreadCall, 0) -HELPERCALLCHK(LdHomeObj, Js::JavascriptOperators::OP_LdHomeObj, AttrCanNotBeReentrant) -HELPERCALLCHK(LdFuncObj, Js::JavascriptOperators::OP_LdFuncObj, AttrCanNotBeReentrant) -HELPERCALLCHK(SetHomeObj, Js::JavascriptOperators::OP_SetHomeObj, AttrCanNotBeReentrant) -HELPERCALLCHK(LdHomeObjProto, Js::JavascriptOperators::OP_LdHomeObjProto, AttrCanNotBeReentrant) -HELPERCALLCHK(LdFuncObjProto, Js::JavascriptOperators::OP_LdFuncObjProto, AttrCanNotBeReentrant) +HELPERCALL(SpreadObjectLiteral, Js::JavascriptObject::SpreadObjectLiteral, 0) +HELPERCALL(Restify, Js::JavascriptObject::Restify, 0) +HELPERCALL(NewPropIdArrForCompProps, Js::InterpreterStackFrame::OP_NewPropIdArrForCompProps, AttrCanNotBeReentrant) +HELPERCALL(StPropIdArrFromVar, Js::InterpreterStackFrame::OP_StPropIdArrFromVar, 0) + + +HELPERCALLCHK(LdHomeObj, Js::JavascriptOperators::OP_LdHomeObj, AttrCanNotBeReentrant) +HELPERCALLCHK(LdFuncObj, Js::JavascriptOperators::OP_LdFuncObj, AttrCanNotBeReentrant) +HELPERCALLCHK(SetHomeObj, Js::JavascriptOperators::OP_SetHomeObj, AttrCanNotBeReentrant) +HELPERCALLCHK(LdHomeObjProto, Js::JavascriptOperators::OP_LdHomeObjProto, AttrCanNotBeReentrant) +HELPERCALLCHK(LdFuncObjProto, Js::JavascriptOperators::OP_LdFuncObjProto, AttrCanNotBeReentrant) -HELPERCALLCHK(ImportCall, Js::JavascriptOperators::OP_ImportCall, 0) +HELPERCALLCHK(ImportCall, Js::JavascriptOperators::OP_ImportCall, 0) +HELPERCALLCHK(LdImportMeta, Js::JavascriptOperators::OP_LdImportMeta, 0) +HELPERCALLCHK(NewAsyncFromSyncIterator, Js::JavascriptOperators::OP_NewAsyncFromSyncIterator, AttrCanNotBeReentrant) +HELPERCALLCHK(NewAwaitObject, Js::JavascriptOperators::OP_NewAwaitObject, AttrCanNotBeReentrant) -HELPERCALLCHK(ResumeYield, Js::JavascriptOperators::OP_ResumeYield, AttrCanThrow) +HELPERCALL(CreateInterpreterStackFrameForGenerator, Js::InterpreterStackFrame::CreateInterpreterStackFrameForGenerator, AttrCanNotBeReentrant) + +#ifdef ENABLE_DEBUG_CONFIG_OPTIONS +HELPERCALL(OutputGeneratorBailInTrace, Js::JavascriptGenerator::OutputBailInTrace, AttrCanNotBeReentrant) +#endif #if DBG HELPERCALL(IntRangeCheckFailure, Js::JavascriptNativeOperators::IntRangeCheckFailure, AttrCanNotBeReentrant) diff --git a/lib/Backend/LinearScan.cpp b/lib/Backend/LinearScan.cpp index 2cf603a01a7..ed0c8026eb4 100644 --- a/lib/Backend/LinearScan.cpp +++ b/lib/Backend/LinearScan.cpp @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft Corporation and contributors. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- @@ -146,8 +147,6 @@ LinearScan::RegAlloc() } m_bailOutRecordCount = 0; - IR::Instr * insertBailInAfter = nullptr; - BailOutInfo * bailOutInfoForBailIn = nullptr; bool endOfBasicBlock = true; FOREACH_INSTR_EDITING(instr, instrNext, currentInstr) { @@ -212,7 +211,32 @@ LinearScan::RegAlloc() continue; } - if (instr->HasBailOutInfo()) +#if DBG + // Since not all call instructions are forwarded to ChangeToHelperCall, we might have + // missed allocating bailout records for them. Additionally, some instructions might + // end up being lowered differently, so the lazy bailout is not on a CALL instruction + // anymore. Use this opportunity to detect them. + // Note that the dump for the instruction will also be printed with -ForcePostLowerGlobOptInstrString + if (instr->HasBailOutInfo() && instr->GetBailOutInfo()->bailOutRecord == nullptr) + { + if (CONFIG_FLAG(ForcePostLowerGlobOptInstrString)) + { + // The instruction has already been lowered, find the start to get the globopt dump + IR::Instr *curr = instr; + while (curr->globOptInstrString == nullptr) + { + curr = curr->m_prev; + } + + instr->Dump(); + curr->DumpGlobOptInstrString(); + } + + AssertMsg(false, "Lazy bailout: bailOutRecord not allocated"); + } +#endif + + if (instr->HasBailOutInfo() && !instr->HasLazyBailOut()) { if (this->currentRegion) { @@ -224,12 +248,6 @@ LinearScan::RegAlloc() } this->FillBailOutRecord(instr); - if (instr->GetBailOutKind() == IR::BailOutForGeneratorYield) - { - Assert(instr->m_next->IsLabelInstr()); - insertBailInAfter = instr->m_next; - bailOutInfoForBailIn = instr->GetBailOutInfo(); - } } this->SetSrcRegs(instr); @@ -249,6 +267,8 @@ LinearScan::RegAlloc() this->KillImplicitRegs(instr); + this->ProcessLazyBailOut(instr); + this->AllocateNewLifetimes(instr); this->SetDstReg(instr); @@ -268,13 +288,11 @@ LinearScan::RegAlloc() endOfBasicBlock = true; } - if (insertBailInAfter == instr) + if (instr->IsGeneratorBailInInstr()) { - instrNext = linearScanMD.GenerateBailInForGeneratorYield(instr, bailOutInfoForBailIn); - insertBailInAfter = nullptr; - bailOutInfoForBailIn = nullptr; + instrNext = this->bailIn.GenerateBailIn(instr->AsGeneratorBailInInstr()); } - }NEXT_INSTR_EDITING; + } NEXT_INSTR_EDITING; if (func->hasBailout) { @@ -1152,7 +1170,6 @@ struct FillBailOutState FillBailOutState(JitArenaAllocator * allocator) : constantList(allocator) {} }; - void LinearScan::FillBailOutOffset(int * offset, StackSym * stackSym, FillBailOutState * state, IR::Instr * instr) { @@ -1175,7 +1192,7 @@ LinearScan::FillBailOutOffset(int * offset, StackSym * stackSym, FillBailOutStat else { Lifetime * lifetime = stackSym->scratch.linearScan.lifetime; - Assert(lifetime && lifetime->start < instr->GetNumber() && instr->GetNumber() <= lifetime->end); + Assert(instr->HasLazyBailOut() || lifetime && lifetime->start < instr->GetNumber() && instr->GetNumber() <= lifetime->end); if (instr->GetBailOutKind() == IR::BailOutOnException) { // Apart from the exception object sym, lifetimes for all other syms that need to be restored at this bailout, @@ -1185,10 +1202,28 @@ LinearScan::FillBailOutOffset(int * offset, StackSym * stackSym, FillBailOutStat } this->PrepareForUse(lifetime); - if (lifetime->isSpilled || + + if (instr->HasLazyBailOut() && instr->GetBailOutInfo()->GetClearedUseOfDstId() == stackSym->m_id) + { + // Force value of bytecode upward exposed destination symbol of a call instruction + // with lazy bailout to be restored from `rax` + // We clear the bit in bytecode upward exposed for destination symbol of a call + // instructions with lazy bailout in globopt to get past the assert that the + // register hasn't been initialized yet. + // Now, since the value is actually in rax, during FillBailOutRecord, + // we can always force the bailout to restore that symbol from rax. +#ifdef _M_X64 + *offset = this->SaveSymbolToReg(RegRAX, state, stackSym); +#elif _M_IX86 + *offset = this->SaveSymbolToReg(RegEAX, state, stackSym); +#else + AssertMsg(false, "Lazy bailout for ARM is not yet supported"); +#endif + } + else if (lifetime->isSpilled || ((instr->GetBailOutKind() == IR::BailOutOnException) && (stackSym != this->currentRegion->GetExceptionObjectSym()))) // BailOutOnException must restore from memory { - Assert(stackSym->IsAllocated()); + Assert(stackSym->IsAllocated() || lifetime->isDeadStore); #ifdef MD_GROW_LOCALS_AREA_UP *offset = -((int)stackSym->m_offset + BailOutInfo::StackSymBias); #else @@ -1198,22 +1233,28 @@ LinearScan::FillBailOutOffset(int * offset, StackSym * stackSym, FillBailOutStat } else { - Assert(lifetime->reg != RegNOREG); - Assert(state->registerSaveSyms[lifetime->reg - 1] == nullptr || - state->registerSaveSyms[lifetime->reg - 1] == stackSym); - AssertMsg((stackSym->IsFloat64() || stackSym->IsSimd128()) && RegTypes[lifetime->reg] == TyFloat64 || - !(stackSym->IsFloat64() || stackSym->IsSimd128()) && RegTypes[lifetime->reg] != TyFloat64, - "Trying to save float64 sym into non-float64 reg or non-float64 sym into float64 reg"); - - // Save the register value to the register save space using the reg enum value as index - state->registerSaveSyms[lifetime->reg - 1] = stackSym; - *offset = LinearScanMD::GetRegisterSaveIndex(lifetime->reg); - - state->registerSaveCount++; + *offset = this->SaveSymbolToReg(lifetime->reg, state, stackSym); } } } +int +LinearScan::SaveSymbolToReg(RegNum reg, FillBailOutState * state, StackSym * stackSym) +{ + Assert(reg != RegNOREG); + Assert(state->registerSaveSyms[reg - 1] == nullptr || + state->registerSaveSyms[reg - 1] == stackSym); + AssertMsg((stackSym->IsFloat64() || stackSym->IsSimd128()) && RegTypes[reg] == TyFloat64 || + !(stackSym->IsFloat64() || stackSym->IsSimd128()) && RegTypes[reg] != TyFloat64, + "Trying to save float64 sym into non-float64 reg or non-float64 sym into float64 reg"); + + // Save the register value to the register save space using the reg enum value as index + state->registerSaveSyms[reg - 1] = stackSym; + state->registerSaveCount++; + + return LinearScanMD::GetRegisterSaveIndex(reg); +} + struct FuncBailOutData { Func * func; @@ -1282,11 +1323,11 @@ LinearScan::EnsureGlobalBailOutRecordTable(Func *func) Func *topFunc = func->GetTopFunc(); bool isTopFunc = (func == topFunc); uint32 inlineeID = isTopFunc ? 0 : func->m_inlineeId; - NativeCodeData::Allocator * allocator = this->func->GetNativeCodeDataAllocator(); GlobalBailOutRecordDataTable *globalBailOutRecordDataTable = globalBailOutRecordTables[inlineeID]; if (globalBailOutRecordDataTable == nullptr) { + NativeCodeData::Allocator * allocator = this->func->GetNativeCodeDataAllocator(); globalBailOutRecordDataTable = globalBailOutRecordTables[inlineeID] = NativeCodeDataNew(allocator, GlobalBailOutRecordDataTable); globalBailOutRecordDataTable->entryPointInfo = (Js::EntryPointInfo*)func->GetWorkItem()->GetJITTimeInfo()->GetEntryPointInfoAddr(); globalBailOutRecordDataTable->length = globalBailOutRecordDataTable->size = 0; @@ -1300,7 +1341,14 @@ LinearScan::EnsureGlobalBailOutRecordTable(Func *func) globalBailOutRecordDataTable->firstActualStackOffset = -1; globalBailOutRecordDataTable->registerSaveSpace = (Js::Var*)func->GetThreadContextInfo()->GetBailOutRegisterSaveSpaceAddr(); globalBailOutRecordDataTable->globalBailOutRecordDataRows = nullptr; - if (func->GetJITFunctionBody()->GetForInLoopDepth() != 0) + + if (func->GetJITFunctionBody()->IsCoroutine()) + { + // Don't restore for-in enumerators for generators because they are + // already on the generator's interpreter frame + globalBailOutRecordDataTable->forInEnumeratorArrayRestoreOffset = -1; + } + else if (func->GetJITFunctionBody()->GetForInLoopDepth() != 0) { #ifdef MD_GROW_LOCALS_AREA_UP Assert(func->GetForInEnumeratorArrayOffset() >= 0); @@ -1417,9 +1465,8 @@ LinearScan::FillBailOutRecord(IR::Instr * instr) memset(state.registerSaveSyms, 0, sizeof(state.registerSaveSyms)); // Fill in the constants - FOREACH_SLISTBASE_ENTRY_EDITING(ConstantStackSymValue, value, &bailOutInfo->usedCapturedValues.constantValues, constantValuesIterator) + FOREACH_SLISTBASE_ENTRY_EDITING(ConstantStackSymValue, value, &bailOutInfo->usedCapturedValues->constantValues, constantValuesIterator) { - AssertMsg(bailOutInfo->bailOutRecord->bailOutKind != IR::BailOutForGeneratorYield, "constant prop syms unexpected for bail-in for generator yield"); StackSym * stackSym = value.Key(); if(stackSym->HasArgSlotNum()) { @@ -1460,9 +1507,8 @@ LinearScan::FillBailOutRecord(IR::Instr * instr) NEXT_SLISTBASE_ENTRY_EDITING; // Fill in the copy prop syms - FOREACH_SLISTBASE_ENTRY_EDITING(CopyPropSyms, copyPropSyms, &bailOutInfo->usedCapturedValues.copyPropSyms, copyPropSymsIter) + FOREACH_SLISTBASE_ENTRY_EDITING(CopyPropSyms, copyPropSyms, &bailOutInfo->usedCapturedValues->copyPropSyms, copyPropSymsIter) { - AssertMsg(bailOutInfo->bailOutRecord->bailOutKind != IR::BailOutForGeneratorYield, "copy prop syms unexpected for bail-in for generator yield"); StackSym * stackSym = copyPropSyms.Key(); if(stackSym->HasArgSlotNum()) { @@ -1513,9 +1559,9 @@ LinearScan::FillBailOutRecord(IR::Instr * instr) } NEXT_BITSET_IN_SPARSEBV; - if (bailOutInfo->usedCapturedValues.argObjSyms) + if (bailOutInfo->usedCapturedValues->argObjSyms) { - FOREACH_BITSET_IN_SPARSEBV(id, bailOutInfo->usedCapturedValues.argObjSyms) + FOREACH_BITSET_IN_SPARSEBV(id, bailOutInfo->usedCapturedValues->argObjSyms) { StackSym * stackSym = this->func->m_symTable->FindStackSym(id); Assert(stackSym != nullptr); @@ -1705,7 +1751,7 @@ LinearScan::FillBailOutRecord(IR::Instr * instr) uint outParamOffsetIndex = outParamStart + argSlot; if (!sym->m_isBailOutReferenced && !sym->IsArgSlotSym()) { - FOREACH_SLISTBASE_ENTRY_EDITING(ConstantStackSymValue, constantValue, &bailOutInfo->usedCapturedValues.constantValues, iterator) + FOREACH_SLISTBASE_ENTRY_EDITING(ConstantStackSymValue, constantValue, &bailOutInfo->usedCapturedValues->constantValues, iterator) { if (constantValue.Key()->m_id == sym->m_id) { @@ -1731,13 +1777,13 @@ LinearScan::FillBailOutRecord(IR::Instr * instr) continue; } - FOREACH_SLISTBASE_ENTRY_EDITING(CopyPropSyms, copyPropSym, &bailOutInfo->usedCapturedValues.copyPropSyms, iter) + FOREACH_SLISTBASE_ENTRY_EDITING(CopyPropSyms, copyPropSym, &bailOutInfo->usedCapturedValues->copyPropSyms, iter) { if (copyPropSym.Key()->m_id == sym->m_id) { StackSym * copyStackSym = copyPropSym.Value(); - BVSparse* argObjSyms = bailOutInfo->usedCapturedValues.argObjSyms; + BVSparse* argObjSyms = bailOutInfo->usedCapturedValues->argObjSyms; if (argObjSyms && argObjSyms->Test(copyStackSym->m_id)) { outParamOffsets[outParamOffsetIndex] = BailOutRecord::GetArgumentsObjectOffset(); @@ -1845,7 +1891,7 @@ LinearScan::FillBailOutRecord(IR::Instr * instr) Assert(LowererMD::IsAssign(instrDef)); } - if (bailOutInfo->usedCapturedValues.argObjSyms && bailOutInfo->usedCapturedValues.argObjSyms->Test(sym->m_id)) + if (bailOutInfo->usedCapturedValues->argObjSyms && bailOutInfo->usedCapturedValues->argObjSyms->Test(sym->m_id)) { //foo.apply(this,arguments) case and we bailout when the apply is overridden. We need to restore the arguments object. outParamOffsets[outParamOffsetIndex] = BailOutRecord::GetArgumentsObjectOffset(); @@ -1921,7 +1967,10 @@ LinearScan::FillBailOutRecord(IR::Instr * instr) instr->m_func = this->func; } - linearScanMD.GenerateBailOut(instr, state.registerSaveSyms, _countof(state.registerSaveSyms)); + if (!instr->HasLazyBailOut()) + { + linearScanMD.GenerateBailOut(instr, state.registerSaveSyms, _countof(state.registerSaveSyms)); + } // generate the constant table Js::Var * constants = NativeCodeDataNewArrayNoFixup(allocator, Js::Var, state.constantList.Count()); @@ -3164,7 +3213,7 @@ LinearScan::InsertStore(IR::Instr *instr, StackSym *sym, RegNum reg) } // LinearScan::InsertLoad -void +IR::Instr* LinearScan::InsertLoad(IR::Instr *instr, StackSym *sym, RegNum reg) { IR::Opnd *src; @@ -3236,6 +3285,8 @@ LinearScan::InsertLoad(IR::Instr *instr, StackSym *sym, RegNum reg) } } #endif + + return load; } uint8 @@ -3287,14 +3338,26 @@ LinearScan::KillImplicitRegs(IR::Instr *instr) this->RecordLoopUse(nullptr, LowererMDArch::GetRegIMulHighDestLower()); return; } + + if (instr->m_opcode == Js::OpCode::Yield) + { + this->bailIn.SpillRegsForBailIn(); + return; + } #endif this->TrackInlineeArgLifetimes(instr); - // Don't care about kills on bailout calls as we are going to exit anyways - // Also, for bailout scenarios we have already handled the inlinee frame spills + // Don't care about kills on bailout calls (e.g: call SaveAllRegAndBailOut) as we are going to exit anyways. + // Note that those are different from normal helper calls with LazyBailOut because they are not guaranteed to exit. + // Also, for bailout scenarios we have already handled the inlinee frame spills. + // + // Lazy bailout: + // Also make sure that Call instructions that previously do not have bailouts are still processed the same way in RegAlloc + // Previously only `call SaveAllRegistersAndBailOut` can have bailout, but now other calls may have lazy bailouts too. + // This makes them not being processed the same way as before(such as computing Lifetime across calls). Assert(LowererMD::IsCall(instr) || !instr->HasBailOutInfo()); - if (!LowererMD::IsCall(instr) || instr->HasBailOutInfo()) + if (!LowererMD::IsCall(instr) || (instr->HasBailOutInfo() && !instr->HasLazyBailOut())) { return; } @@ -3405,20 +3468,30 @@ void LinearScan::TrackInlineeArgLifetimes(IR::Instr* instr) }); if (this->currentBlock->inlineeStack.Count() > 0) { - Assert(instr->m_func->inlineDepth == this->currentBlock->inlineeStack.Last()->inlineDepth + 1); + Assert(instr->m_func->inlineDepth > this->currentBlock->inlineeStack.Last()->inlineDepth); } this->currentBlock->inlineeStack.Add(instr->m_func); } - else + else if (instr->m_func->GetParentFunc()->m_hasInlineArgsOpt) { - Assert(this->currentBlock->inlineeStack.Count() == 0); + Assert(!instr->m_func->frameInfo); + Assert(instr->m_func->cachedInlineeFrameInfo); + + Assert(this->currentBlock->inlineeStack.Empty() || instr->m_func->inlineDepth == this->currentBlock->inlineeStack.Last()->inlineDepth + 1); + + this->currentBlock->inlineeStack.Add(instr->m_func); } } else if (instr->m_opcode == Js::OpCode::InlineeEnd || instr->HasBailOnNoProfile()) { - if (instr->m_func->m_hasInlineArgsOpt) + if (instr->m_func->m_hasInlineArgsOpt || (instr->m_func->GetParentFunc() && instr->m_func->GetParentFunc()->m_hasInlineArgsOpt)) { - instr->m_func->frameInfo->AllocateRecord(this->func, instr->m_func->GetJITFunctionBody()->GetAddr()); + if (!instr->m_func->m_hasInlineArgsOpt) + { + Assert(instr->m_func->cachedInlineeFrameInfo); + instr->m_func->frameInfo = instr->m_func->cachedInlineeFrameInfo; + } + instr->m_func->frameInfo->AllocateRecord(instr->m_func, instr->m_func->GetJITFunctionBody()->GetAddr()); if(this->currentBlock->inlineeStack.Count() == 0) { @@ -3431,25 +3504,28 @@ void LinearScan::TrackInlineeArgLifetimes(IR::Instr* instr) Func* func = this->currentBlock->inlineeStack.RemoveAtEnd(); Assert(func == instr->m_func); - instr->m_func->frameInfo->IterateSyms([=](StackSym* sym){ - Lifetime* lifetime = this->currentBlock->inlineeFrameLifetimes.RemoveAtEnd(); + if (instr->m_func->m_hasInlineArgsOpt) + { + instr->m_func->frameInfo->IterateSyms([=](StackSym* sym) { + Lifetime* lifetime = this->currentBlock->inlineeFrameLifetimes.RemoveAtEnd(); - uint* value; - if (this->currentBlock->inlineeFrameSyms.TryGetReference(sym->m_id, &value)) - { - *value = *value - 1; - if (*value == 0) + uint* value; + if (this->currentBlock->inlineeFrameSyms.TryGetReference(sym->m_id, &value)) { - bool removed = this->currentBlock->inlineeFrameSyms.Remove(sym->m_id); - Assert(removed); + *value = *value - 1; + if (*value == 0) + { + bool removed = this->currentBlock->inlineeFrameSyms.Remove(sym->m_id); + Assert(removed); + } } - } - else - { - Assert(UNREACHED); - } - Assert(sym->scratch.linearScan.lifetime == lifetime); - }, /*reverse*/ true); + else + { + Assert(UNREACHED); + } + Assert(sym->scratch.linearScan.lifetime == lifetime); + }, /*reverse*/ true); + } } } } @@ -3974,6 +4050,13 @@ LinearScan::InsertSecondChanceCompensation(Lifetime ** branchRegContent, Lifetim continue; } + // Allow us to properly insert compensation code for symbols whose lifetimes start after the generator jump table + // The GeneratorBailInLabel will have 2 edges in: one from the normal flow, one straight from the generator jump table + if (!branchLifetime && lifetime && lifetime->start > branchInstr->GetNumber() && labelInstr->m_opcode == Js::OpCode::GeneratorBailInLabel) + { + continue; + } + if (branchLifetime && branchLifetime->isSpilled && !branchLifetime->sym->IsConst() && branchLifetime->end > labelInstr->GetNumber()) { // The lifetime was in a reg at the branch and is now spilled. We need a store on this path. @@ -4000,6 +4083,20 @@ LinearScan::InsertSecondChanceCompensation(Lifetime ** branchRegContent, Lifetim { if (insertionInstr->m_prev->AsLabelInstr()->isOpHelper && !insertionInstr->AsLabelInstr()->isOpHelper) { + // Ignore assertion error for cases where we insert an "airlock" helper block + // for a Branch instruction's helper path that: + // 1) ends up being empty + // 2) comes after a helper block from another instruction + // 3) is followed by a non-helper block + // + // Currently we would mark this block as a non-helper, but that makes + // this block only reachable through helper blocks, thus failing the assert +#if DBG + if (insertionInstr->m_prev->AsLabelInstr()->isOpHelper) + { + insertionInstr->m_prev->AsLabelInstr()->m_noHelperAssert = true; + } +#endif insertionInstr->m_prev->AsLabelInstr()->isOpHelper = false; } } @@ -4808,3 +4905,535 @@ IR::Instr* LinearScan::InsertLea(IR::RegOpnd *dst, IR::Opnd *src, IR::Instr *con return instrRet; } + +void +LinearScan::ProcessLazyBailOut(IR::Instr *instr) +{ + if (instr->HasLazyBailOut()) + { + // No lazy bailout for function with try/catch for now + Assert(!this->func->HasTry()); + + this->func->EnsureLazyBailOutRecordSlot(); + + if (instr->GetBailOutInfo()->NeedsToRestoreUseOfDst()) + { + Assert(instr->OnlyHasLazyBailOut()); + instr->GetBailOutInfo()->RestoreUseOfDst(); + } + + // FillBailOutRecord on lazy bailout must be called after KillImplicitRegs + // + // s1(rax) = ... + // s2 = call s1(rax) + // ... + // use of s1 + // + // s1 in this case needs to be spilled due to the call. + // If we fill the bailout record similarly to normal bailouts, + // we wouldn't have the correct value of s1 because rax would have already + // been replaced by the result of the call. + // Therefore we have to capture the value of it after the call and after KillImplicitRegs. + this->FillBailOutRecord(instr); + } +} + +LinearScan::GeneratorBailIn::GeneratorBailIn(Func* func, LinearScan* linearScan) : + func { func }, + linearScan { linearScan }, + jitFnBody { func->GetJITFunctionBody() }, + initializedRegs { func->m_alloc }, + regs { +#if defined(_M_X64) + RegRAX, RegRCX +#elif defined(_M_IX86) + RegEAX, RegECX +#elif defined(_M_ARM64) + RegR0, RegR1 +#endif + }, + interpreterFrameRegOpnd { IR::RegOpnd::New(nullptr, regs[0], TyMachPtr, func) }, + tempRegOpnd { IR::RegOpnd::New(nullptr, regs[1], TyVar, func) } +{ + // The yield register holds the evaluated value of the expression passed as + // the parameter to .next(), this can be obtained from the generator object itself, + // so no need to restore. + this->initializedRegs.Set(this->jitFnBody->GetYieldReg()); + + // The environment is loaded before the resume jump table. At bail-in point, it can either + // still be in register or already spilled. If it's in register we're good. If it's been spilled, + // the register allocator should have inserted compensation code before the bail-in block, so we + // are still fine there. + this->initializedRegs.Set(this->jitFnBody->GetEnvReg()); + + this->bailInSymbols = JitAnew(this->func->m_alloc, SListBase); +} + +LinearScan::GeneratorBailIn::~GeneratorBailIn() +{ + this->bailInSymbols->Clear(this->func->m_alloc); + this->bailInSymbols->Reset(); + JitAdelete(this->func->m_alloc, this->bailInSymbols); +} + +void LinearScan::GeneratorBailIn::SpillRegsForBailIn() +{ + for (int i = 0; i < GeneratorBailIn::regNum; i++) + { + this->linearScan->SpillReg(this->regs[i]); + this->linearScan->tempRegs.Clear(this->regs[i]); + this->linearScan->RecordLoopUse(nullptr, this->regs[i]); + } +} + +// Note: Comments refer to rax/rcx for x64. For x86, we use their equivalence: eax/ecx +// Restores the live stack locations followed by the live registers from +// the interpreter's register slots. +// RecordDefs each live register that is restored. +// +// Generates the following code: +// +// MOV rax, param0 +// MOV rax, [rax + JavascriptGenerator::GetFrameOffset()] +// +// for each live stack location, sym +// +// MOV rcx, [rax + regslot offset] +// MOV sym(stack location), rcx +// +// for each live register, sym (rax is restore last if it is live) +// +// MOV sym(register), [rax + regslot offset] +// +IR::Instr* LinearScan::GeneratorBailIn::GenerateBailIn(IR::GeneratorBailInInstr* bailInInstr) +{ + BailOutInfo* bailOutInfo = bailInInstr->yieldInstr->GetBailOutInfo(); + + Assert(!bailOutInfo->capturedValues || bailOutInfo->capturedValues->constantValues.Empty()); + Assert(!bailOutInfo->capturedValues || bailOutInfo->capturedValues->copyPropSyms.Empty()); + Assert(!bailOutInfo->liveLosslessInt32Syms || bailOutInfo->liveLosslessInt32Syms->IsEmpty()); + Assert(!bailOutInfo->liveFloat64Syms || bailOutInfo->liveFloat64Syms->IsEmpty()); + + IR::Instr* instrAfter = bailInInstr->m_next; + + // 1) Load the generator object that was passed as one of the arguments to the jitted frame + LinearScan::InsertMove(this->interpreterFrameRegOpnd, this->CreateGeneratorObjectOpnd(), instrAfter); + + // 2) Gets the InterpreterStackFrame pointer into rax + IR::IndirOpnd* generatorFrameOpnd = IR::IndirOpnd::New(this->interpreterFrameRegOpnd, Js::JavascriptGenerator::GetFrameOffset(), TyMachPtr, this->func); + LinearScan::InsertMove(this->interpreterFrameRegOpnd, generatorFrameOpnd, instrAfter); + + // 3) Put the Javascript's `arguments` object, which is stored in the interpreter frame, to the jit's stack slot if needed + // See BailOutRecord::RestoreValues + if (this->func->HasArgumentSlot()) + { + IR::IndirOpnd* generatorArgumentsOpnd = IR::IndirOpnd::New(this->interpreterFrameRegOpnd, Js::InterpreterStackFrame::GetOffsetOfArguments(), TyMachPtr, this->func); + LinearScan::InsertMove(this->tempRegOpnd, generatorArgumentsOpnd, instrAfter); + LinearScan::InsertMove(LowererMD::CreateStackArgumentsSlotOpnd(this->func), this->tempRegOpnd, instrAfter); + } + + BailInInsertionPoint insertionPoint + { + nullptr, /* raxRestoreInstr */ + instrAfter, /* instrInsertStackSym */ + instrAfter /* instrInsertRegSym */ + }; + + // 4) Restore symbols + // - We don't need to restore argObjSyms because StackArgs is currently not enabled + // Commented out here in case we do want to enable it in the future: + // this->InsertRestoreSymbols(bailOutInfo->capturedValues->argObjSyms, insertionPoint, saveInitializedReg); + // + // - We move all argout symbols right before the call so we don't need to restore argouts either + + this->BuildBailInSymbolList( + *bailOutInfo->byteCodeUpwardExposedUsed, + bailInInstr->upwardExposedUses, + bailInInstr->capturedValues + ); + + this->InsertRestoreSymbols( + *bailOutInfo->byteCodeUpwardExposedUsed, + bailInInstr->upwardExposedUses, + bailInInstr->capturedValues, + insertionPoint + ); + Assert(!this->func->IsStackArgsEnabled()); + +#ifdef ENABLE_DEBUG_CONFIG_OPTIONS + if (PHASE_TRACE(Js::Phase::BailInPhase, this->func)) + { + IR::Instr* insertBailInTraceBefore = instrAfter; + Assert(insertBailInTraceBefore->m_opcode == Js::OpCode::GeneratorOutputBailInTraceLabel); + this->InsertBailInTrace(bailOutInfo->byteCodeUpwardExposedUsed, insertBailInTraceBefore->m_next); + } +#endif + + return instrAfter; +} + +void LinearScan::GeneratorBailIn::BuildBailInSymbolList( + const BVSparse& byteCodeUpwardExposedUses, + const BVSparse& upwardExposedUses, + const CapturedValues& capturedValues +) +{ + this->bailInSymbols->Clear(this->func->m_alloc); + + // Make sure that all symbols in `upwardExposedUses` can be restored. + // The idea is to first assume that we cannot restore any of the symbols. + // Then we use the information in `byteCodeUpwardExposedUses` and `capturedValues` + // which contains information about symbols in the bytecode, copy-prop'd symbols, and + // symbols with constant values. As we go through these lists, we clear the + // bits in `unrestorableSymbols` to indicate that they can be restored. At the + // end, the bitvector has to be empty. + + // Assume all symbols cannot be restored. + BVSparse unrestorableSymbols(this->func->m_alloc); + unrestorableSymbols.Or(&upwardExposedUses); + + unrestorableSymbols.Minus(&this->initializedRegs); + + // Symbols in byteCodeUpwardExposedUses are restorable. + // If a symbol is in byteCodeUpwardExposedUses, which means that it is not + // a constant nor a copy-prop candidate. In such cases, we can simply map + // the bytecode register directly to its backend id. + FOREACH_BITSET_IN_SPARSEBV(symId, &byteCodeUpwardExposedUses) + { + StackSym* stackSym = this->func->m_symTable->FindStackSym(symId); + Assert(stackSym); + unrestorableSymbols.Clear(symId); + if (this->NeedsReloadingSymWhenBailingIn(stackSym)) + { + BailInSymbol bailInSym(symId /* fromByteCodeRegSlot */, symId /* toBackendId */); + bailInSymbols->PrependNode(this->func->m_alloc, bailInSym); + } + } + NEXT_BITSET_IN_SPARSEBV; + + // Symbols that were copy-prop'd. + // Example: + // `copyPropSyms` having an entry { s_key : s_value } means that we can use `s_key` + // in place of `s_value`. + // + // 1) if we find `s_value` at this point (after clearing all symbols in + // `bytecodeUpwardExposedUses`), it means that `s_value` is a backend-only + // symbol, and that the only way to restore this symbol is through `s_key`. + // Since in `FillBailOutRecord`, we make sure to restore all symbols that are + // keys in in `usedCapturedValues`, we can simply use `s_key` to restore the value + // for `s_value`. + // 2) if we find `s_key`, then we can just map directly the value due to the above reason. + FOREACH_SLISTBASE_ENTRY(CopyPropSyms, copyPropSym, &capturedValues.copyPropSyms) + { + Sym* key = copyPropSym.Key(); + Sym* value = copyPropSym.Value(); + +#if DBG + if (unrestorableSymbols.Test(value->m_id) || unrestorableSymbols.Test(key->m_id)) + { + Assert(key->IsStackSym() && (key->AsStackSym()->HasByteCodeRegSlot() || key->AsStackSym()->IsFromByteCodeConstantTable())); + } +#endif + + if (unrestorableSymbols.TestAndClear(value->m_id)) + { + if (this->NeedsReloadingSymWhenBailingIn(copyPropSym.Value())) + { + BailInSymbol bailInSym(key->m_id /* fromByteCodeRegSlot */, value->m_id /* toBackendId */); + bailInSymbols->PrependNode(this->func->m_alloc, bailInSym); + } + } + if (unrestorableSymbols.TestAndClear(key->m_id)) + { + if (this->NeedsReloadingSymWhenBailingIn(copyPropSym.Key())) + { + BailInSymbol bailInSym(key->m_id /* fromByteCodeRegSlot */, key->m_id /* toBackendId */); + bailInSymbols->PrependNode(this->func->m_alloc, bailInSym); + } + } + } + NEXT_SLISTBASE_ENTRY; + + // Used constant values. + // These symbols are can be mapped directly. + FOREACH_SLISTBASE_ENTRY(ConstantStackSymValue, entry, &capturedValues.constantValues) + { + SymID symId = entry.Key()->m_id; + if (unrestorableSymbols.TestAndClear(symId)) + { + StackSym* stackSym = this->func->m_symTable->FindStackSym(symId); + Assert(stackSym); + if (this->NeedsReloadingSymWhenBailingIn(stackSym)) + { + BailoutConstantValue constValue = entry.Value(); + Js::Var varValue = constValue.ToVar(this->func); + Assert(!stackSym->IsFromByteCodeConstantTable()); + BailInSymbol bailInSym( + symId /* fromByteCodeRegSlot */, + symId /* toBackendId */, + true /* restoreConstDirectly */, + varValue + ); + bailInSymbols->PrependNode(this->func->m_alloc, bailInSym); + } + } + } + NEXT_SLISTBASE_ENTRY; + + // Clear all symbols that don't need to be restored. + FOREACH_BITSET_IN_SPARSEBV_EDITING(symId, &unrestorableSymbols) + { + StackSym* stackSym = this->func->m_symTable->FindStackSym(symId); + Assert(stackSym); + Lifetime* lifetime = stackSym->scratch.linearScan.lifetime; + if ( + // Special backend symbols that don't need to be restored + (!stackSym->HasByteCodeRegSlot() && !this->NeedsReloadingBackendSymWhenBailingIn(stackSym)) || + // Symbols already in the constant table don't need to be restored either + stackSym->IsFromByteCodeConstantTable() || + // Symbols having no lifetimes + lifetime == nullptr + ) + { + unrestorableSymbols.Clear(stackSym->m_id); + } + } + NEXT_BITSET_IN_SPARSEBV_EDITING; + + AssertOrFailFastMsg(unrestorableSymbols.IsEmpty(), "There are unrestorable backend-only symbols across yield points"); +} + +void LinearScan::GeneratorBailIn::InsertRestoreSymbols( + const BVSparse& byteCodeUpwardExposedUses, + const BVSparse& upwardExposedUses, + const CapturedValues& capturedValues, + BailInInsertionPoint& insertionPoint +) +{ + FOREACH_SLISTBASE_ENTRY(BailInSymbol, bailInSymbol, this->bailInSymbols) + { + StackSym* dstSym = this->func->m_symTable->FindStackSym(bailInSymbol.toBackendId); + Lifetime* lifetime = dstSym->scratch.linearScan.lifetime; + Assert(lifetime); + + StackSym* copyPropStackSym = this->func->m_symTable->FindStackSym(bailInSymbol.fromByteCodeRegSlot); + Js::RegSlot regSlot = copyPropStackSym->GetByteCodeRegSlot(); + IR::Opnd* srcOpnd; + + if (bailInSymbol.restoreConstDirectly) + { + srcOpnd = IR::AddrOpnd::New(bailInSymbol.constValue, IR::AddrOpndKind::AddrOpndKindDynamicVar, this->func); + } + else + { + srcOpnd = IR::IndirOpnd::New( + this->interpreterFrameRegOpnd, + this->GetOffsetFromInterpreterStackFrame(regSlot), + copyPropStackSym->GetType(), + this->func + ); + } + + if (lifetime->isSpilled) + { +#if DBG + AssertMsg(!dstSym->IsConst(), "We don't need to restore constant symbol that has already been spilled"); + // Supress assert in DbPostCheckLower + dstSym->m_allocated = true; +#endif + // Stack restores require an extra register since we can't move an indir directly to an indir on amd64 + IR::SymOpnd* dstOpnd = IR::SymOpnd::New(dstSym, dstSym->GetType(), this->func); + LinearScan::InsertMove(this->tempRegOpnd, srcOpnd, insertionPoint.instrInsertStackSym); + LinearScan::InsertMove(dstOpnd, this->tempRegOpnd, insertionPoint.instrInsertStackSym); + } + else + { + // Register restores must come after stack restores so that we have RAX and RCX free to + // use for stack restores and further RAX must be restored last since it holds the + // pointer to the InterpreterStackFrame from which we are restoring values. + // We must also track these restores using RecordDef in case the symbols are spilled. + + IR::Instr* instr; + + if (dstSym->IsConst()) + { + instr = this->linearScan->InsertLoad(insertionPoint.instrInsertRegSym, dstSym, lifetime->reg); + } + else + { + IR::RegOpnd* dstRegOpnd = IR::RegOpnd::New(dstSym, dstSym->GetType(), this->func); + dstRegOpnd->SetReg(lifetime->reg); + instr = LinearScan::InsertMove(dstRegOpnd, srcOpnd, insertionPoint.instrInsertRegSym); + } + + if (insertionPoint.instrInsertRegSym == insertionPoint.instrInsertStackSym) + { + // This is the first register sym, make sure we don't insert stack stores + // after this instruction so we can ensure rax and rcx remain free to use + // for restoring spilled stack syms. + insertionPoint.instrInsertStackSym = instr; + } + + if (lifetime->reg == interpreterFrameRegOpnd->GetReg()) + { + // Ensure rax is restored last + Assert(insertionPoint.instrInsertRegSym != insertionPoint.instrInsertStackSym); + + insertionPoint.instrInsertRegSym = instr; + + if (insertionPoint.raxRestoreInstr != nullptr) + { + // rax was mapped to multiple bytecode registers. Obviously only the first + // restore we do will work so change all following stores to `mov rax, rax`. + // We still need to keep them around for RecordDef in case the corresponding + // dst sym is spilled later on. + insertionPoint.raxRestoreInstr->FreeSrc1(); + insertionPoint.raxRestoreInstr->SetSrc1(this->interpreterFrameRegOpnd); + } + + insertionPoint.raxRestoreInstr = instr; + } + + this->linearScan->RecordDef(lifetime, instr, 0); + } + } + NEXT_SLISTBASE_ENTRY; +} + +bool LinearScan::GeneratorBailIn::NeedsReloadingBackendSymWhenBailingIn(StackSym* sym) const +{ + // for-in enumerator in generator is loaded as part of the resume jump table. + // By the same reasoning as `initializedRegs`'s, we don't have to restore this whether or not it's been spilled. + if (this->func->GetGeneratorFrameSym() && this->func->GetGeneratorFrameSym()->m_id == sym->m_id) + { + return false; + } + + return true; +} + +bool LinearScan::GeneratorBailIn::NeedsReloadingSymWhenBailingIn(StackSym* sym) const +{ + if (sym->IsFromByteCodeConstantTable()) + { + // Resume jump table is inserted after we load symbols in the constant table, + // so at bail-in point, we can have two scenarios: + // 1) the symbols are still in registers + // 2) the symbols have already been "spilled" + // Since we don't save/restore constant symbols and simply insert loads of their + // values before use, in either case, there is no need to reload the values + return false; + } + + if (!sym->HasByteCodeRegSlot()) + { + return this->NeedsReloadingBackendSymWhenBailingIn(sym); + } + + if (sym->IsConst()) + { + // For all other constant symbols, if they are bytecodeUpwardExposed and they have + // already been "spilled", which means that the register allocator will automatically + // insert the load of their values later before use, we don't need to restore. + // Only restore symbols that are still in registers + return !sym->scratch.linearScan.lifetime->isSpilled; + } + + // Check for other special registers that are already initialized + return !this->initializedRegs.Test(sym->GetByteCodeRegSlot()); +} + +IR::SymOpnd* LinearScan::GeneratorBailIn::CreateGeneratorObjectOpnd() const +{ + // First parameter passed to the jit'd frame + // See `CallGenerator` method + StackSym* sym = StackSym::NewParamSlotSym(1, this->func); + this->func->SetArgOffset(sym, LowererMD::GetFormalParamOffset() * MachPtr); + return IR::SymOpnd::New(sym, TyMachPtr, this->func); +} + +uint32 LinearScan::GeneratorBailIn::GetOffsetFromInterpreterStackFrame(Js::RegSlot regSlot) const +{ + // Some objects aren't stored in the local space in interpreter frame, but instead + // in their own fields. Use their offsets in such cases. + if (regSlot == this->jitFnBody->GetLocalFrameDisplayReg()) + { + return Js::InterpreterStackFrame::GetOffsetOfLocalFrameDisplay(); + } + else if (regSlot == this->jitFnBody->GetLocalClosureReg()) + { + return Js::InterpreterStackFrame::GetOffsetOfLocalClosure(); + } + else if (regSlot == this->jitFnBody->GetParamClosureReg()) + { + return Js::InterpreterStackFrame::GetOffsetOfParamClosure(); + } + else + { + return regSlot * sizeof(Js::Var) + Js::InterpreterStackFrame::GetOffsetOfLocals(); + } +} + +#ifdef ENABLE_DEBUG_CONFIG_OPTIONS +void LinearScan::GeneratorBailIn::InsertBailInTrace(BVSparse* symbols, IR::Instr* insertBeforeInstr) +{ + IR::RegOpnd* traceBailInSymbolsArrayRegOpnd = this->interpreterFrameRegOpnd; + + // Load JavascriptGenerator->bailInSymbolsTraceArray + { + LinearScan::InsertMove(traceBailInSymbolsArrayRegOpnd, this->CreateGeneratorObjectOpnd(), insertBeforeInstr); + IR::IndirOpnd* traceBailInSymbolsArrayIndirOpnd = IR::IndirOpnd::New(traceBailInSymbolsArrayRegOpnd, Js::JavascriptGenerator::GetBailInSymbolsTraceArrayOffset(), TyMachPtr, this->func); + LinearScan::InsertMove(traceBailInSymbolsArrayRegOpnd, traceBailInSymbolsArrayIndirOpnd, insertBeforeInstr); + } + + int count = 0; + FOREACH_BITSET_IN_SPARSEBV(symId, symbols) + { + StackSym* stackSym = this->func->m_symTable->FindStackSym(symId); + Lifetime* lifetime = stackSym->scratch.linearScan.lifetime; + + if (!this->NeedsReloadingSymWhenBailingIn(stackSym)) + { + continue; + } + + int offset = sizeof(Js::JavascriptGenerator::BailInSymbol) * count; + + // Assign JavascriptGenerator->bailInSymbolsTraceArray[count]->id + { + IR::IndirOpnd* idIndirOpnd = IR::IndirOpnd::New(traceBailInSymbolsArrayRegOpnd, offset + Js::JavascriptGenerator::BailInSymbol::GetBailInSymbolIdOffset(), TyMachPtr, this->func); + IR::IntConstOpnd* idConstOpnd = IR::IntConstOpnd::New(stackSym->m_id, TyUint8, this->func); + LinearScan::InsertMove(idIndirOpnd, idConstOpnd, insertBeforeInstr); + } + + // Assign JavascriptGenerator->bailInSymbolsTraceArray[count]->value + { + IR::IndirOpnd* valueIndirOpnd = IR::IndirOpnd::New(traceBailInSymbolsArrayRegOpnd, offset + Js::JavascriptGenerator::BailInSymbol::GetBailInSymbolValueOffset(), TyMachPtr, this->func); + IR::Opnd* srcOpnd; + if (lifetime->isSpilled) + { + IR::SymOpnd* stackSymOpnd = IR::SymOpnd::New(stackSym, stackSym->GetType(), this->func); + LinearScan::InsertMove(this->tempRegOpnd, stackSymOpnd, insertBeforeInstr); + srcOpnd = this->tempRegOpnd; + } + else + { + srcOpnd = IR::RegOpnd::New(stackSym, stackSym->GetType(), this->func); + srcOpnd->AsRegOpnd()->SetReg(lifetime->reg); + } + LinearScan::InsertMove(valueIndirOpnd, srcOpnd, insertBeforeInstr); + } + + count++; + } + NEXT_BITSET_IN_SPARSEBV; + + // Assign JavascriptGenerator->bailInSymbolsTraceArrayCount + { + LinearScan::InsertMove(this->tempRegOpnd, this->CreateGeneratorObjectOpnd(), insertBeforeInstr); + IR::IndirOpnd* traceBailInSymbolsArrayCountIndirOpnd = IR::IndirOpnd::New(this->tempRegOpnd, Js::JavascriptGenerator::GetBailInSymbolsTraceArrayCountOffset(), TyMachPtr, this->func); + IR::IntConstOpnd* countOpnd = IR::IntConstOpnd::New(count, TyInt32, this->func); + LinearScan::InsertMove(traceBailInSymbolsArrayCountIndirOpnd, countOpnd, insertBeforeInstr); + } +} +#endif diff --git a/lib/Backend/LinearScan.h b/lib/Backend/LinearScan.h index 30d72263679..51358246c45 100644 --- a/lib/Backend/LinearScan.h +++ b/lib/Backend/LinearScan.h @@ -103,7 +103,7 @@ class LinearScan linearScanMD(func), opHelperSpilledLiveranges(NULL), currentOpHelperBlock(NULL), lastLabel(NULL), numInt32Regs(0), numFloatRegs(0), stackPackInUseLiveRanges(NULL), stackSlotsFreeList(NULL), totalOpHelperFullVisitedLength(0), curLoop(NULL), currentBlock(nullptr), currentRegion(nullptr), m_bailOutRecordCount(0), - globalBailOutRecordTables(nullptr), lastUpdatedRowIndices(nullptr) + globalBailOutRecordTables(nullptr), lastUpdatedRowIndices(nullptr), bailIn(GeneratorBailIn(func, this)) { } @@ -134,7 +134,7 @@ class LinearScan void InsertStores(Lifetime *lifetime, RegNum reg, IR::Instr *insertionInstr); void InsertStore(IR::Instr *instr, StackSym *sym, RegNum reg); void InsertLoads(StackSym *sym, RegNum reg); - void InsertLoad(IR::Instr *instr, StackSym *sym, RegNum reg); + IR::Instr* InsertLoad(IR::Instr *instr, StackSym *sym, RegNum reg); void SetDstReg(IR::Instr *instr); void SetSrcRegs(IR::Instr *instr); void SetUses(IR::Instr *instr, IR::Opnd *opnd); @@ -181,6 +181,7 @@ class LinearScan static void SetBitVectorIfTypeSpec(StackSym * sym, Js::RegSlot regSlot, BVFixed * intSyms, BVFixed * floatSyms); void FillBailOutRecord(IR::Instr * instr); void FillBailOutOffset(int * offset, StackSym * stackSym, FillBailOutState * state, IR::Instr * instr); + int SaveSymbolToReg(RegNum reg, FillBailOutState * state, StackSym * stackSym); void FillStackLiteralBailOutRecord(IR::Instr * instr, BailOutInfo * bailOutInfo, struct FuncBailOutData * funcBailOutData, uint funcCount); template void ForEachStackLiteralBailOutInfo(IR::Instr * instr, BailOutInfo * bailOutInfo, FuncBailOutData * funcBailOutData, uint funcCount, Fn fn); @@ -221,7 +222,104 @@ class LinearScan void DynamicStatsInstrument(); #endif + void ProcessLazyBailOut(IR::Instr *instr); + static IR::Instr * InsertMove(IR::Opnd *dst, IR::Opnd *src, IR::Instr *const insertBeforeInstr); static IR::Instr * InsertLea(IR::RegOpnd *dst, IR::Opnd *src, IR::Instr *const insertBeforeInstr); + class GeneratorBailIn { + // We need to rely on 2 registers `rax` and `rcx` on x64, or `eax` and `ecx` on x86 to generate the bail-in code. + // At this point, since `rax` already has the address of the generator's interpreter frame, + // we can easily get the symbols' values through something like: mov dst [rax + appropriate offset] + // + // There are 4 types of symbols that we have to deal with: + // - symbols that are currently on the stack at this point. We need 2 instructions: + // - Load the value to `rcx`: mov rcx [rax + offset] + // - Finally load the value to its stack slot: mov [rbp + stack offset] rcx + // - symbol that is in rax + // - symbol that is in rcx + // - symbols that are in the other registers. We only need 1 instruction: + // - mov reg [rax + offset] + // + // Since restoring symbols on the stack might mess up values that will be in rax/rcx, + // and we want to maintain the invariant that rax has to hold the value of the interpreter + // frame, we need to restore the symbols in the following order: + // - symbols in stack + // - symbols in registers + // - symbol in rax + // + // The following 3 instructions indicate the insertion points for the above cases: + struct BailInInsertionPoint + { + IR::Instr* raxRestoreInstr; + IR::Instr* instrInsertStackSym; + IR::Instr* instrInsertRegSym; + }; + + // Represents a symbol that needs to be restored when bailing in. + // In normal cases, for a given symbol, whatever bytecode registers that the + // symbol has will map directly to the backend symbol with the same id. + // However, due to copy-prop, sometimes we would use a different symbol for a given value. + // This struct keep track of that fact and generate the restore instruction accordingly. + // Additionally, for symbols that are constant but not in the bytecode constant table, we have + // to reload the symbol's value directly. + struct BailInSymbol + { + const SymID fromByteCodeRegSlot; + const SymID toBackendId; + const bool restoreConstDirectly : 1; + const Js::Var constValue; + BailInSymbol(SymID fromByteCodeRegSlot, SymID toBackendId, bool restoreConstDirectly = false, Js::Var constValue = nullptr): + fromByteCodeRegSlot(fromByteCodeRegSlot), + toBackendId(toBackendId), + restoreConstDirectly(restoreConstDirectly), + constValue(constValue) {} + }; + + Func* const func; + LinearScan* const linearScan; + const JITTimeFunctionBody* const jitFnBody; + BVSparse initializedRegs; + SListBase* bailInSymbols; + + // Registers needed in the bail-in code. + // The register allocator will have to spill these + // so that we are free to use them. + static constexpr int regNum = 2; + const RegNum regs[regNum]; + IR::RegOpnd* const interpreterFrameRegOpnd; + IR::RegOpnd* const tempRegOpnd; + + bool NeedsReloadingBackendSymWhenBailingIn(StackSym* sym) const; + bool NeedsReloadingSymWhenBailingIn(StackSym* sym) const; + uint32 GetOffsetFromInterpreterStackFrame(Js::RegSlot regSlot) const; + IR::SymOpnd* CreateGeneratorObjectOpnd() const; + + // Insert instructions to restore symbols in the `bailInSymbols` list + void InsertRestoreSymbols( + const BVSparse& bytecodeUpwardExposedUses, + const BVSparse& upwardExposedUses, + const CapturedValues& capturedValues, + BailInInsertionPoint& insertionPoint + ); + + // Fill `bailInSymbols` list with all of the symbols that need to be restored + void BuildBailInSymbolList( + const BVSparse& byteCodeUpwardExposedUses, + const BVSparse& upwardExposedUses, + const CapturedValues& capturedValues + ); + +#ifdef ENABLE_DEBUG_CONFIG_OPTIONS + void InsertBailInTrace(BVSparse* symbols, IR::Instr* insertBeforeInstr); +#endif + public: + GeneratorBailIn(Func* func, LinearScan* linearScan); + ~GeneratorBailIn(); + IR::Instr* GenerateBailIn(IR::GeneratorBailInInstr* bailInInstr); + // Spill all registers that we need in order to generate the bail-in code + void SpillRegsForBailIn(); + }; + + GeneratorBailIn bailIn; }; diff --git a/lib/Backend/Lower.cpp b/lib/Backend/Lower.cpp index 92303bf1d97..dcda1eb9064 100644 --- a/lib/Backend/Lower.cpp +++ b/lib/Backend/Lower.cpp @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft Corporation and contributors. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #include "Backend.h" @@ -159,7 +160,6 @@ Lowerer::LowerRange(IR::Instr *instrStart, IR::Instr *instrEnd, bool defaultDoFa { bool noMathFastPath; bool noFieldFastPath; - bool isStrictMode = this->m_func->GetJITFunctionBody()->IsStrictMode(); noFieldFastPath = !defaultDoFastPath; noMathFastPath = !defaultDoFastPath; @@ -468,6 +468,7 @@ Lowerer::LowerRange(IR::Instr *instrStart, IR::Instr *instrEnd, bool defaultDoFa break; case Js::OpCode::AdjustObjType: + case Js::OpCode::AdjustObjTypeReloadAuxSlotPtr: this->LowerAdjustObjType(instr); break; @@ -537,7 +538,12 @@ Lowerer::LowerRange(IR::Instr *instrStart, IR::Instr *instrEnd, bool defaultDoFa case Js::OpCode::StSuperFld: instrPrev = GenerateCompleteStFld(instr, !noFieldFastPath, IR::HelperOp_PatchPutValueWithThisPtrNoLocalFastPath, IR::HelperOp_PatchPutValueWithThisPtrNoLocalFastPathPolymorphic, - IR::HelperOp_PatchPutValueWithThisPtr, IR::HelperOp_PatchPutValueWithThisPtrPolymorphic, true, isStrictMode ? Js::PropertyOperation_StrictMode : Js::PropertyOperation_None); + IR::HelperOp_PatchPutValueWithThisPtr, IR::HelperOp_PatchPutValueWithThisPtrPolymorphic, true, Js::PropertyOperation_None); + break; + + case Js::OpCode::StSuperFldStrict: + instrPrev = GenerateCompleteStFld(instr, !noFieldFastPath, IR::HelperOp_PatchPutValueWithThisPtrNoLocalFastPath, IR::HelperOp_PatchPutValueWithThisPtrNoLocalFastPathPolymorphic, + IR::HelperOp_PatchPutValueWithThisPtr, IR::HelperOp_PatchPutValueWithThisPtrPolymorphic, true, Js::PropertyOperation_StrictMode); break; case Js::OpCode::StRootFld: @@ -593,7 +599,7 @@ Lowerer::LowerRange(IR::Instr *instrStart, IR::Instr *instrEnd, bool defaultDoFa case Js::OpCode::CloneStr: { - GenerateGetImmutableOrScriptUnreferencedString(instr->GetSrc1()->AsRegOpnd(), instr, IR::HelperOp_CompoundStringCloneForAppending, false); + GenerateGetImmutableOrScriptUnreferencedString(instr->GetSrc1()->AsRegOpnd(), instr, IR::HelperOp_CompoundStringCloneForAppending, true /*loweringCloneStr*/, false /*reloadDst*/); instr->Remove(); break; } @@ -749,12 +755,6 @@ Lowerer::LowerRange(IR::Instr *instrStart, IR::Instr *instrEnd, bool defaultDoFa this->GenerateFastInlineBuiltInMathRandom(instr); break; -#ifdef ENABLE_DOM_FAST_PATH - case Js::OpCode::DOMFastPathGetter: - this->LowerFastInlineDOMFastPathGetter(instr); - break; -#endif - case Js::OpCode::InlineArrayPush: this->GenerateFastInlineArrayPush(instr); break; @@ -914,14 +914,16 @@ Lowerer::LowerRange(IR::Instr *instrStart, IR::Instr *instrEnd, bool defaultDoFa // If this RET isn't at the end of the function, insert a branch to // the epilog. - IR::Instr *exitPrev = m_func->m_exitInstr->m_prev; - if (!exitPrev->IsLabelInstr()) + IR::LabelInstr* epilogue; + if (this->m_func->GetJITFunctionBody()->IsCoroutine()) + { + epilogue = this->m_lowerGeneratorHelper.GetEpilogueForReturnStatements(); + } + else { - exitPrev = IR::LabelInstr::New(Js::OpCode::Label, m_func); - m_func->m_exitInstr->InsertBefore(exitPrev); + epilogue = this->EnsureEpilogueLabel(); } - IR::BranchInstr *exitBr = IR::BranchInstr::New(LowererMD::MDUncondBranchOpcode, - exitPrev->AsLabelInstr(), m_func); + IR::BranchInstr *exitBr = IR::BranchInstr::New(LowererMD::MDUncondBranchOpcode, epilogue, m_func); instr->InsertAfter(exitBr); } @@ -987,10 +989,12 @@ Lowerer::LowerRange(IR::Instr *instrStart, IR::Instr *instrEnd, bool defaultDoFa this->LowerUnaryHelperMem(instr, IR::HelperOp_ToSpreadedFunctionArgument); break; + case Js::OpCode::Conv_Numeric: case Js::OpCode::Conv_Num: this->LowerConvNum(instr, noMathFastPath); break; + case Js::OpCode::Incr_Num_A: case Js::OpCode::Incr_A: if (PHASE_OFF(Js::MathFastPathPhase, this->m_func) || noMathFastPath) { @@ -1005,6 +1009,7 @@ Lowerer::LowerRange(IR::Instr *instrStart, IR::Instr *instrEnd, bool defaultDoFa } break; + case Js::OpCode::Decr_Num_A: case Js::OpCode::Decr_A: if (PHASE_OFF(Js::MathFastPathPhase, this->m_func) || noMathFastPath) { @@ -1236,42 +1241,12 @@ Lowerer::LowerRange(IR::Instr *instrStart, IR::Instr *instrEnd, bool defaultDoFa Assert(m_func->IsOOPJIT()); instrPrev = LowerLdNativeCodeData(instr); break; - case Js::OpCode::StrictLdThis: - if (noFieldFastPath) - { - IR::JnHelperMethod meth; - if (instr->IsJitProfilingInstr()) - { - Assert(instr->AsJitProfilingInstr()->profileId == Js::Constants::NoProfileId); - m_lowererMD.LoadHelperArgument(instr, CreateFunctionBodyOpnd(instr->m_func)); - meth = IR::HelperSimpleProfiledStrictLdThis; - this->LowerUnaryHelper(instr, meth); - } - else - { - meth = IR::HelperStrictLdThis; - this->LowerUnaryHelperMem(instr, meth); - } - } - else - { - this->GenerateLdThisStrict(instr); - instr->Remove(); - } - break; - case Js::OpCode::CheckThis: GenerateLdThisCheck(instr); instr->FreeSrc1(); this->GenerateBailOut(instr); break; - case Js::OpCode::StrictCheckThis: - this->GenerateLdThisStrict(instr); - instr->FreeSrc1(); - this->GenerateBailOut(instr); - break; - case Js::OpCode::NewScArray: instrPrev = this->LowerNewScArray(instr); break; @@ -2095,6 +2070,21 @@ Lowerer::LowerRange(IR::Instr *instrStart, IR::Instr *instrEnd, bool defaultDoFa } break; + case Js::OpCode::BrOnObjectOrNull_A: + if (PHASE_OFF(Js::BranchFastPathPhase, this->m_func) || noMathFastPath) + { + this->LowerBrOnObject(instr, IR::HelperOp_IsObjectOrNull); + } + else + { + GenerateFastBrOnObject(instr); + } + break; + + case Js::OpCode::BrOnNotNullObj_A: + GenerateFastBrOnObject(instr); + break; + case Js::OpCode::BrOnBaseConstructorKind: this->LowerBrOnClassConstructor(instr, IR::HelperOp_IsBaseConstructorKind); break; @@ -2103,6 +2093,10 @@ Lowerer::LowerRange(IR::Instr *instrStart, IR::Instr *instrEnd, bool defaultDoFa this->LowerBrOnClassConstructor(instr, IR::HelperOp_IsClassConstructor); break; + case Js::OpCode::BrOnConstructor_A: + this->LowerBrOnClassConstructor(instr, IR::HelperOp_IsConstructor); + break; + case Js::OpCode::BrAddr_A: case Js::OpCode::BrNotAddr_A: case Js::OpCode::BrNotNull_A: @@ -2232,7 +2226,9 @@ Lowerer::LowerRange(IR::Instr *instrStart, IR::Instr *instrEnd, bool defaultDoFa break; case Js::OpCode::BrOnHasProperty: + case Js::OpCode::BrOnHasLocalProperty: case Js::OpCode::BrOnNoProperty: + case Js::OpCode::BrOnNoLocalProperty: this->LowerBrProperty(instr, IR::HelperOp_HasProperty); break; @@ -2246,13 +2242,20 @@ Lowerer::LowerRange(IR::Instr *instrStart, IR::Instr *instrEnd, bool defaultDoFa break; case Js::OpCode::StSlot: + { + PropertySym *propertySym = instr->GetDst()->AsSymOpnd()->m_sym->AsPropertySym(); + instrPrev = AddSlotArrayCheck(propertySym, instr); this->LowerStSlot(instr); break; + } case Js::OpCode::StSlotChkUndecl: + { + PropertySym *propertySym = instr->GetDst()->AsSymOpnd()->m_sym->AsPropertySym(); + instrPrev = AddSlotArrayCheck(propertySym, instr); this->LowerStSlotChkUndecl(instr); break; - + } case Js::OpCode::ProfiledLoopStart: { Assert(m_func->DoSimpleJitDynamicProfile()); @@ -2427,6 +2430,10 @@ Lowerer::LowerRange(IR::Instr *instrStart, IR::Instr *instrEnd, bool defaultDoFa #endif case Js::OpCode::LdSlot: + { + PropertySym *propertySym = instr->GetSrc1()->AsSymOpnd()->m_sym->AsPropertySym(); + instrPrev = AddSlotArrayCheck(propertySym, instr); + } case Js::OpCode::LdSlotArr: { Js::ProfileId profileId; @@ -2489,6 +2496,10 @@ Lowerer::LowerRange(IR::Instr *instrStart, IR::Instr *instrEnd, bool defaultDoFa this->LowerElementUndefined(instr, IR::HelperOp_EnsureNoRootRedeclProperty); break; + case Js::OpCode::EnsureCanDeclGloFunc: + this->LowerElementUndefined(instr, IR::HelperOp_EnsureCanDeclGloFunc); + break; + case Js::OpCode::ScopedEnsureNoRedeclFld: this->LowerElementUndefinedScoped(instr, IR::HelperOp_EnsureNoRedeclPropertyScoped); break; @@ -2507,6 +2518,16 @@ Lowerer::LowerRange(IR::Instr *instrStart, IR::Instr *instrEnd, bool defaultDoFa this->GenerateCheckForCallFlagNew(instr); break; + case Js::OpCode::LdImportMeta: + { + IR::Opnd *src1Opnd = instr->UnlinkSrc1(); + + LoadScriptContext(instr); + m_lowererMD.LoadHelperArgument(instr, src1Opnd); + m_lowererMD.ChangeToHelperCall(instr, IR::HelperLdImportMeta); + break; + } + case Js::OpCode::StFuncExpr: // object.propid = src LowerStFld(instr, IR::HelperOp_StFunctionExpression, IR::HelperOp_StFunctionExpression, false); @@ -2706,6 +2727,14 @@ Lowerer::LowerRange(IR::Instr *instrStart, IR::Instr *instrEnd, bool defaultDoFa instrPrev = this->LowerBailOnNotObject(instr); break; + case Js::OpCode::CheckIsFuncObj: + instrPrev = this->LowerCheckIsFuncObj(instr); + break; + + case Js::OpCode::CheckFuncInfo: + instrPrev = this->LowerCheckIsFuncObj(instr, true); + break; + case Js::OpCode::BailOnNotBuiltIn: instrPrev = this->LowerBailOnNotBuiltIn(instr); break; @@ -2782,8 +2811,12 @@ Lowerer::LowerRange(IR::Instr *instrStart, IR::Instr *instrEnd, bool defaultDoFa case Js::OpCode::DeletedNonHelperBranch: break; - case Js::OpCode::InitClass: - instrPrev = this->LowerInitClass(instr); + case Js::OpCode::NewClassProto: + this->LowerUnaryHelperMem(instr, IR::HelperOp_NewClassProto); + break; + + case Js::OpCode::NewClassConstructor: + instrPrev = this->LowerNewClassConstructor(instr); break; case Js::OpCode::NewConcatStrMulti: @@ -2914,96 +2947,51 @@ Lowerer::LowerRange(IR::Instr *instrStart, IR::Instr *instrEnd, bool defaultDoFa break; } - case Js::OpCode::Yield: + case Js::OpCode::NewAsyncFromSyncIterator: { - instr->FreeSrc1(); // Source is not actually used by the backend other than to calculate lifetime - IR::Opnd* dstOpnd = instr->UnlinkDst(); - - // prm2 is the ResumeYieldData pointer per calling convention established in JavascriptGenerator::CallGenerator - // This is the value the bytecode expects to be in the dst register of the Yield opcode after resumption. - // Load it here after the bail-in. + IR::Opnd *src1Opnd = instr->UnlinkSrc1(); + LoadScriptContext(instr); + m_lowererMD.LoadHelperArgument(instr, src1Opnd); + m_lowererMD.ChangeToHelperCall(instr, IR::HelperNewAsyncFromSyncIterator); + break; + } - StackSym *resumeYieldDataSym = StackSym::NewImplicitParamSym(4, m_func); - m_func->SetArgOffset(resumeYieldDataSym, (LowererMD::GetFormalParamOffset() + 1) * MachPtr); - IR::SymOpnd * resumeYieldDataOpnd = IR::SymOpnd::New(resumeYieldDataSym, TyMachPtr, m_func); + case Js::OpCode::NewAwaitObject: + { + LoadScriptContext(instr); + m_lowererMD.ChangeToHelperCall(instr, IR::HelperNewAwaitObject); + break; + } - AssertMsg(instr->m_next->IsLabelInstr(), "Expect the resume label to immediately follow Yield instruction"); - InsertMove(dstOpnd, resumeYieldDataOpnd, instr->m_next->m_next); + case Js::OpCode::Yield: + { + this->m_lowerGeneratorHelper.LowerYield(instr); + break; + } - GenerateBailOut(instr); + case Js::OpCode::GeneratorResumeYield: + { + this->m_lowerGeneratorHelper.LowerGeneratorResumeYield(instr); + break; + } + case Js::OpCode::GeneratorCreateInterpreterStackFrame: + { + this->m_lowerGeneratorHelper.LowerCreateInterpreterStackFrameForGenerator(instr); break; } - case Js::OpCode::ResumeYield: - case Js::OpCode::ResumeYieldStar: +#ifdef ENABLE_DEBUG_CONFIG_OPTIONS + case Js::OpCode::GeneratorOutputBailInTrace: { - IR::Opnd *srcOpnd1 = instr->UnlinkSrc1(); - IR::Opnd *srcOpnd2 = instr->m_opcode == Js::OpCode::ResumeYieldStar ? instr->UnlinkSrc2() : IR::AddrOpnd::NewNull(m_func); - m_lowererMD.LoadHelperArgument(instr, srcOpnd2); - m_lowererMD.LoadHelperArgument(instr, srcOpnd1); - m_lowererMD.ChangeToHelperCall(instr, IR::HelperResumeYield); + this->m_lowerGeneratorHelper.LowerGeneratorTraceBailIn(instr); break; } +#endif case Js::OpCode::GeneratorResumeJumpTable: { - // Lowered in LowerPrologEpilog so that the jumps introduced are not considered to be part of the flow for the RegAlloc phase. - - // Introduce a BailOutNoSave label if there were yield points that were elided due to optimizations. They could still be hit - // if an active generator object had been paused at such a yield point when the function body was JITed. So safe guard such a - // case by having the native code simply jump back to the interpreter for such yield points. - - IR::LabelInstr *bailOutNoSaveLabel = nullptr; - - m_func->MapUntilYieldOffsetResumeLabels([this, &bailOutNoSaveLabel](int, const YieldOffsetResumeLabel& yorl) - { - if (yorl.Second() == nullptr) - { - if (bailOutNoSaveLabel == nullptr) - { - bailOutNoSaveLabel = IR::LabelInstr::New(Js::OpCode::Label, m_func); - } - - return true; - } - - return false; - }); - - // Insert the bailoutnosave label somewhere along with a call to BailOutNoSave helper - if (bailOutNoSaveLabel != nullptr) - { - IR::Instr * exitPrevInstr = this->m_func->m_exitInstr->m_prev; - IR::LabelInstr * exitTargetInstr; - if (exitPrevInstr->IsLabelInstr()) - { - exitTargetInstr = exitPrevInstr->AsLabelInstr(); - exitPrevInstr = exitPrevInstr->m_prev; - } - else - { - exitTargetInstr = IR::LabelInstr::New(Js::OpCode::Label, this->m_func, false); - exitPrevInstr->InsertAfter(exitTargetInstr); - } - - bailOutNoSaveLabel->m_hasNonBranchRef = true; - bailOutNoSaveLabel->isOpHelper = true; - - IR::Instr* bailOutCall = IR::Instr::New(Js::OpCode::Call, m_func); - - exitPrevInstr->InsertAfter(bailOutCall); - exitPrevInstr->InsertAfter(bailOutNoSaveLabel); - exitPrevInstr->InsertAfter(IR::BranchInstr::New(LowererMD::MDUncondBranchOpcode, exitTargetInstr, m_func)); - - IR::RegOpnd * frameRegOpnd = IR::RegOpnd::New(nullptr, LowererMD::GetRegFramePointer(), TyMachPtr, m_func); - - m_lowererMD.LoadHelperArgument(bailOutCall, frameRegOpnd); - m_lowererMD.ChangeToHelperCall(bailOutCall, IR::HelperNoSaveRegistersBailOutForElidedYield); - - m_func->m_bailOutNoSaveLabel = bailOutNoSaveLabel; - } - + this->m_lowerGeneratorHelper.LowerGeneratorResumeJumpTable(instr); break; } @@ -3093,6 +3081,31 @@ Lowerer::LowerRange(IR::Instr *instrStart, IR::Instr *instrEnd, bool defaultDoFa break; } + case Js::OpCode::SpreadObjectLiteral: + this->LowerBinaryHelperMem(instr, IR::HelperSpreadObjectLiteral); + break; + + case Js::OpCode::Restify: + instrPrev = this->LowerRestify(instr); + break; + + case Js::OpCode::NewPropIdArrForCompProps: + this->LowerUnaryHelperMem(instr, IR::HelperNewPropIdArrForCompProps); + break; + + case Js::OpCode::StPropIdArrFromVar: + instrPrev = this->LowerStPropIdArrFromVar(instr); + break; + +#ifdef ENABLE_DEBUG_CONFIG_OPTIONS + case Js::OpCode::GeneratorOutputBailInTraceLabel: +#endif + case Js::OpCode::GeneratorBailInLabel: + case Js::OpCode::GeneratorEpilogueFrameNullOutLabel: + case Js::OpCode::GeneratorEpilogueNoFrameNullOutLabel: + Assert(this->m_func->GetJITFunctionBody()->IsCoroutine()); + break; + default: #ifdef ENABLE_WASM_SIMD if (IsSimd128Opcode(instr->m_opcode)) @@ -3289,88 +3302,48 @@ Lowerer::LoadRuntimeInlineCacheOpnd(IR::Instr * instr, IR::PropertySymOpnd * pro } bool -Lowerer::TryGenerateFastCmSrEq(IR::Instr * instr) +Lowerer::TryGenerateFastCmSrXx(IR::Instr * instr) { IR::RegOpnd *srcReg1 = instr->GetSrc1()->IsRegOpnd() ? instr->GetSrc1()->AsRegOpnd() : nullptr; IR::RegOpnd *srcReg2 = instr->GetSrc2()->IsRegOpnd() ? instr->GetSrc2()->AsRegOpnd() : nullptr; if (srcReg2 && IsConstRegOpnd(srcReg2)) { - return m_lowererMD.GenerateFastCmSrEqConst(instr); + return m_lowererMD.GenerateFastCmSrXxConst(instr); } else if (srcReg1 && IsConstRegOpnd(srcReg1)) { instr->SwapOpnds(); - return m_lowererMD.GenerateFastCmSrEqConst(instr); - } - else if (srcReg2 && (srcReg2->m_sym->m_isStrConst)) - { - this->LowerBinaryHelperMem(instr, IR::HelperOP_CmSrEq_String); - return true; - } - else if (srcReg1 && (srcReg1->m_sym->m_isStrConst)) - { - instr->SwapOpnds(); - this->LowerBinaryHelperMem(instr, IR::HelperOP_CmSrEq_String); - return true; - } - else if (srcReg2 && (srcReg2->m_sym->m_isStrEmpty)) - { - this->LowerBinaryHelperMem(instr, IR::HelperOP_CmSrEq_EmptyString); - return true; - } - else if (srcReg1 && (srcReg1->m_sym->m_isStrEmpty)) - { - instr->SwapOpnds(); - this->LowerBinaryHelperMem(instr, IR::HelperOP_CmSrEq_EmptyString); - return true; + return m_lowererMD.GenerateFastCmSrXxConst(instr); } return false; } +// Generate fast path for StrictEquals when one of the sources are undefined, null, boolean bool -Lowerer::GenerateFastBrSrEq(IR::Instr * instr, IR::RegOpnd * srcReg1, IR::RegOpnd * srcReg2, IR::Instr ** pInstrPrev, bool noMathFastPath) +Lowerer::TryGenerateFastBrSrXx(IR::Instr * instr, IR::RegOpnd * srcReg1, IR::RegOpnd * srcReg2, IR::Instr ** pInstrPrev, bool noMathFastPath) { + bool isEqual = !instr->IsNeq(); + if (srcReg2 && IsConstRegOpnd(srcReg2)) { - this->GenerateFastBrConst(instr->AsBranchInstr(), srcReg2->m_sym->GetConstOpnd(), true); + this->GenerateFastBrConst(instr->AsBranchInstr(), GetConstRegOpnd(srcReg2, instr), isEqual); instr->Remove(); return true; } else if (srcReg1 && IsConstRegOpnd(srcReg1)) { instr->SwapOpnds(); - this->GenerateFastBrConst(instr->AsBranchInstr(), srcReg1->m_sym->GetConstOpnd(), true); + this->GenerateFastBrConst(instr->AsBranchInstr(), GetConstRegOpnd(srcReg1, instr), isEqual); instr->Remove(); return true; } - else if (srcReg2 && (srcReg2->m_sym->m_isStrConst)) - { - this->LowerBrCMem(instr, IR::HelperOp_StrictEqualString, noMathFastPath, false); - return true; - } - else if (srcReg1 && (srcReg1->m_sym->m_isStrConst)) - { - instr->SwapOpnds(); - this->LowerBrCMem(instr, IR::HelperOp_StrictEqualString, noMathFastPath, false); - return true; - } - else if (srcReg2 && (srcReg2->m_sym->m_isStrEmpty)) - { - this->LowerBrCMem(instr, IR::HelperOp_StrictEqualEmptyString, noMathFastPath, false); - return true; - } - else if (srcReg1 && (srcReg1->m_sym->m_isStrEmpty)) - { - instr->SwapOpnds(); - this->LowerBrCMem(instr, IR::HelperOp_StrictEqualEmptyString, noMathFastPath, false); - return true; - } return false; } + ///---------------------------------------------------------------------------- /// /// Lowerer::GenerateFastBrConst @@ -3383,7 +3356,7 @@ Lowerer::GenerateFastBrConst(IR::BranchInstr *branchInstr, IR::Opnd * constOpnd, // // Given: - // BrSrEq_A $L1, s1, s2 + // BrSrXx_A $L1, s1, s2 // where s2 is either 'null', 'undefined', 'true' or 'false' // // Generate: @@ -3392,8 +3365,7 @@ Lowerer::GenerateFastBrConst(IR::BranchInstr *branchInstr, IR::Opnd * constOpnd, // JEQ/JNE $L1 // - // TODO: OOP JIT, enable this assert - //Assert(this->IsConstRegOpnd(branchInstr->GetSrc2()->AsRegOpnd())); + Assert(IsConstRegOpnd(branchInstr->GetSrc2()->AsRegOpnd())); IR::RegOpnd *opnd = GetRegOpnd(branchInstr->GetSrc1(), branchInstr, m_func, TyVar); @@ -3478,29 +3450,6 @@ Lowerer::TryGenerateFastBrNeq(IR::Instr * instr) return false; } -bool -Lowerer::GenerateFastBrSrNeq(IR::Instr * instr, IR::Instr ** pInstrPrev) -{ - IR::RegOpnd *srcReg1 = instr->GetSrc1()->IsRegOpnd() ? instr->GetSrc1()->AsRegOpnd() : nullptr; - IR::RegOpnd *srcReg2 = instr->GetSrc2()->IsRegOpnd() ? instr->GetSrc2()->AsRegOpnd() : nullptr; - - if (srcReg2 && IsConstRegOpnd(srcReg2)) - { - this->GenerateFastBrConst(instr->AsBranchInstr(), srcReg2->m_sym->GetConstOpnd(), false); - instr->Remove(); - return true; - } - else if (srcReg1 && IsConstRegOpnd(srcReg1)) - { - instr->SwapOpnds(); - this->GenerateFastBrConst(instr->AsBranchInstr(), srcReg1->m_sym->GetConstOpnd(), false); - instr->Remove(); - return true; - } - - return false; -} - void Lowerer::GenerateDynamicObjectAlloc(IR::Instr * newObjInstr, uint inlineSlotCount, uint slotCount, IR::RegOpnd * newObjDst, IR::Opnd * typeSrc) { @@ -4889,10 +4838,11 @@ bool Lowerer::TryLowerNewScObjectWithFixedCtorCache(IR::Instr* newObjInstr, IR:: JITTimeConstructorCache * ctorCache; - if (newObjInstr->HasBailOutInfo() && (newObjInstr->GetBailOutKind() & ~IR::BailOutKindBits) == IR::BailOutFailedCtorGuardCheck) + if (newObjInstr->HasBailOutInfo() && newObjInstr->GetBailOutKindNoBits() == IR::BailOutFailedCtorGuardCheck) { Assert(newObjInstr->IsNewScObjectInstr()); Assert(newObjInstr->IsProfiledInstr()); + Assert(newObjInstr->GetBailOutKind() == IR::BailOutFailedCtorGuardCheck); emitBailOut = true; @@ -5250,7 +5200,7 @@ Lowerer::LowerNewScObjArray(IR::Instr *newObjInstr) if (!targetOpnd->IsAddrOpnd()) { - if (!newObjInstr->HasBailOutInfo()) + if (!newObjInstr->HasBailOutInfo() || newObjInstr->OnlyHasLazyBailOut()) { return this->LowerNewScObject(newObjInstr, true, true); } @@ -5262,7 +5212,10 @@ Lowerer::LowerNewScObjArray(IR::Instr *newObjInstr) // For whatever reason, we couldn't do a fixed function check on the call target. // Generate a runtime check on the target. - Assert(newObjInstr->GetBailOutKind() == IR::BailOutOnNotNativeArray); + Assert( + newObjInstr->GetBailOutKind() == IR::BailOutOnNotNativeArray || + newObjInstr->GetBailOutKind() == BailOutInfo::WithLazyBailOut(IR::BailOutOnNotNativeArray) + ); IR::LabelInstr *labelSkipBailOut = IR::LabelInstr::New(Js::OpCode::Label, func); InsertCompareBranch( targetOpnd, @@ -5422,7 +5375,7 @@ Lowerer::LowerNewScObjArrayNoArg(IR::Instr *newObjInstr) if (!targetOpnd->IsAddrOpnd()) { - if (!newObjInstr->HasBailOutInfo()) + if (!newObjInstr->HasBailOutInfo() || newObjInstr->OnlyHasLazyBailOut()) { return this->LowerNewScObject(newObjInstr, true, false); } @@ -5434,7 +5387,10 @@ Lowerer::LowerNewScObjArrayNoArg(IR::Instr *newObjInstr) // For whatever reason, we couldn't do a fixed function check on the call target. // Generate a runtime check on the target. - Assert(newObjInstr->GetBailOutKind() == IR::BailOutOnNotNativeArray); + Assert( + newObjInstr->GetBailOutKind() == IR::BailOutOnNotNativeArray || + newObjInstr->GetBailOutKind() == BailOutInfo::WithLazyBailOut(IR::BailOutOnNotNativeArray) + ); IR::LabelInstr *labelSkipBailOut = IR::LabelInstr::New(Js::OpCode::Label, func); InsertCompareBranch( targetOpnd, @@ -5501,11 +5457,6 @@ Lowerer::LowerNewScObjArrayNoArg(IR::Instr *newObjInstr) void Lowerer::LowerPrologEpilog() { - if (m_func->GetJITFunctionBody()->IsCoroutine()) - { - LowerGeneratorResumeJumpTable(); - } - IR::Instr * instr; instr = m_func->m_headInstr; @@ -5516,6 +5467,12 @@ Lowerer::LowerPrologEpilog() instr = m_func->m_exitInstr; AssertMsg(instr->IsExitInstr(), "Last instr isn't an ExitInstr..."); + if (m_func->GetJITFunctionBody()->IsCoroutine() && !m_func->IsLoopBody()) + { + IR::LabelInstr* epilogueLabel = this->m_lowerGeneratorHelper.GetEpilogueForReturnStatements(); + this->m_lowerGeneratorHelper.InsertNullOutGeneratorFrameInEpilogue(epilogueLabel); + } + m_lowererMD.LowerExitInstr(instr->AsExitInstr()); } @@ -5535,45 +5492,6 @@ Lowerer::LowerPrologEpilogAsmJs() m_lowererMD.LowerExitInstrAsmJs(instr->AsExitInstr()); } -void -Lowerer::LowerGeneratorResumeJumpTable() -{ - Assert(m_func->GetJITFunctionBody()->IsCoroutine()); - - IR::Instr * jumpTableInstr = m_func->m_headInstr; - AssertMsg(jumpTableInstr->IsEntryInstr(), "First instr isn't an EntryInstr..."); - - // Hope to do away with this linked list scan by moving this lowering to a post-prolog-epilog/pre-encoder phase that is common to all architectures (currently such phase is only available on amd64/arm) - while (jumpTableInstr->m_opcode != Js::OpCode::GeneratorResumeJumpTable) - { - jumpTableInstr = jumpTableInstr->m_next; - } - - IR::Opnd * srcOpnd = jumpTableInstr->UnlinkSrc1(); - - m_func->MapYieldOffsetResumeLabels([&](int i, const YieldOffsetResumeLabel& yorl) - { - uint32 offset = yorl.First(); - IR::LabelInstr * label = yorl.Second(); - - if (label != nullptr && label->m_hasNonBranchRef) - { - // Also fix up the bailout at the label with the jump to epilog that was not emitted in GenerateBailOut() - Assert(label->m_prev->HasBailOutInfo()); - GenerateJumpToEpilogForBailOut(label->m_prev->GetBailOutInfo(), label->m_prev); - } - else if (label == nullptr) - { - label = m_func->m_bailOutNoSaveLabel; - } - - // For each offset label pair, insert a compare of the offset and branch if equal to the label - InsertCompareBranch(srcOpnd, IR::IntConstOpnd::New(offset, TyUint32, m_func), Js::OpCode::BrSrEq_A, label, jumpTableInstr); - }); - - jumpTableInstr->Remove(); -} - void Lowerer::DoInterruptProbes() { @@ -6018,7 +5936,7 @@ Lowerer::GenerateFastLdMethodFromFlags(IR::Instr * instrLdFld) IR::PropertySymOpnd * propertySymOpnd = opndSrc->AsPropertySymOpnd(); - Assert(!instrLdFld->DoStackArgsOpt(this->m_func)); + Assert(!instrLdFld->DoStackArgsOpt()); if (propertySymOpnd->IsTypeCheckSeqCandidate()) { @@ -6239,7 +6157,7 @@ Lowerer::GenerateLdFldWithCachedType(IR::Instr * instrLdFld, bool* continueAsHel } else { - opndSlotArray = this->LoadSlotArrayWithCachedLocalType(instrLdFld, propertySymOpnd, propertySymOpnd->IsTypeChecked() || emitTypeCheck); + opndSlotArray = this->LoadSlotArrayWithCachedLocalType(instrLdFld, propertySymOpnd); } // Load the value from the slot, getting the slot ID from the cache. @@ -6262,7 +6180,7 @@ Lowerer::GenerateLdFldWithCachedType(IR::Instr * instrLdFld, bool* continueAsHel if (!emitPrimaryTypeCheck && !emitLocalTypeCheck && !emitLoadFromProtoTypeCheck) { Assert(labelTypeCheckFailed == nullptr); - AssertMsg(!instrLdFld->HasBailOutInfo(), "Why does a direct field load have bailout?"); + AssertMsg(!instrLdFld->HasBailOutInfo() || instrLdFld->HasLazyBailOut(), "Why does a direct field load have bailout that is not lazy?"); instrLdFld->Remove(); return true; } @@ -6310,8 +6228,7 @@ IR::Instr* Lowerer::GenerateCompleteLdFld(IR::Instr* instr, bool emitFastPath, I { if(instr->CallsAccessor() && instr->HasBailOutInfo()) { - IR::BailOutKind kindMinusBits = instr->GetBailOutKind() & ~IR::BailOutKindBits; - Assert(kindMinusBits != IR::BailOutOnImplicitCalls && kindMinusBits != IR::BailOutOnImplicitCallsPreOp); + Assert(!BailOutInfo::IsBailOutOnImplicitCalls(instr->GetBailOutKind())); } IR::Instr* prevInstr = instr->m_prev; @@ -6397,6 +6314,8 @@ Lowerer::GenerateCheckFixedFld(IR::Instr * instrChkFld) PropertySym * propertySym = propertySymOpnd->m_sym->AsPropertySym(); uint inlineCacheIndex = propertySymOpnd->m_inlineCacheIndex; + bool checkFixedDataGenerated = false; + bool checkFixedTypeGenerated = false; OUTPUT_TRACE_FUNC( Js::ObjTypeSpecPhase, @@ -6415,7 +6334,7 @@ Lowerer::GenerateCheckFixedFld(IR::Instr * instrChkFld) { AssertMsg(!propertySymOpnd->GetGuardedPropOps() || propertySymOpnd->GetGuardedPropOps()->IsEmpty(), "This property Guard is used only for one property"); //We need only cheaper Guard check, if the property belongs to the GlobalObject. - GenerateFixedFieldGuardCheck(instrChkFld, propertySymOpnd, labelBailOut); + checkFixedDataGenerated = this->GenerateFixedFieldGuardCheck(instrChkFld, propertySymOpnd, labelBailOut); } else { @@ -6425,6 +6344,7 @@ Lowerer::GenerateCheckFixedFld(IR::Instr * instrChkFld) propertySymOpnd->SetGuardedPropOp(propertySymOpnd->GetObjTypeSpecFldId()); } this->GenerateCachedTypeCheck(instrChkFld, propertySymOpnd, labelBailOut, labelBailOut); + checkFixedTypeGenerated = true; } } @@ -6438,7 +6358,7 @@ Lowerer::GenerateCheckFixedFld(IR::Instr * instrChkFld) { Assert(labelBailOut == nullptr); labelBailOut = IR::LabelInstr::New(Js::OpCode::Label, this->m_func, true); - GenerateFixedFieldGuardCheck(instrChkFld, propertySymOpnd, labelBailOut); + checkFixedDataGenerated = this->GenerateFixedFieldGuardCheck(instrChkFld, propertySymOpnd, labelBailOut); } } @@ -6454,6 +6374,21 @@ Lowerer::GenerateCheckFixedFld(IR::Instr * instrChkFld) { Assert(labelBailOut == nullptr); AssertMsg(!instrChkFld->HasBailOutInfo(), "Why does a direct fixed field check have bailout?"); + if (propertySymOpnd->ProducesAuxSlotPtr()) + { + this->GenerateAuxSlotPtrLoad(propertySymOpnd, instrChkFld); + } + instrChkFld->Remove(); + return true; + } + + // With lazy bailout, no checks might be generated for CheckFixedFld, so the code in Lowerer is only an + // unconditional jmp to get past the bailout helper block. This is a new case and is unexpected, so layout + // phase will also move the statement boundary preceding CheckFixedFld together with the jmp to after + // function exit. As a result, source mapping is incorrect. Make sure that this doesn't happen by not + // generating helper blocks at all if we don't generate checks. + if (!checkFixedDataGenerated && !checkFixedTypeGenerated) + { instrChkFld->Remove(); return true; } @@ -6466,6 +6401,11 @@ Lowerer::GenerateCheckFixedFld(IR::Instr * instrChkFld) instrChkFld->InsertBefore(labelBailOut); instrChkFld->InsertAfter(labelDone); + if (propertySymOpnd->ProducesAuxSlotPtr()) + { + this->GenerateAuxSlotPtrLoad(propertySymOpnd, labelDone->m_next); + } + // Convert the original instruction to a bailout. Assert(instrChkFld->HasBailOutInfo()); @@ -6518,6 +6458,11 @@ Lowerer::GenerateCheckObjType(IR::Instr * instrChkObjType) instrChkObjType->InsertBefore(labelBailOut); instrChkObjType->InsertAfter(labelDone); + if (propertySymOpnd->ProducesAuxSlotPtr()) + { + this->GenerateAuxSlotPtrLoad(propertySymOpnd, labelDone->m_next); + } + // Convert the original instruction to a bailout. Assert(instrChkObjType->HasBailOutInfo()); @@ -6543,17 +6488,18 @@ Lowerer::LowerAdjustObjType(IR::Instr * instrAdjustObjType) bool adjusted = this->GenerateAdjustBaseSlots( instrAdjustObjType, baseOpnd, JITTypeHolder((JITType*)initialTypeOpnd->m_metadata), JITTypeHolder((JITType*)finalTypeOpnd->m_metadata)); - if (adjusted) + if (instrAdjustObjType->m_opcode == Js::OpCode::AdjustObjTypeReloadAuxSlotPtr) { + Assert(adjusted); + // We reallocated the aux slots, so reload them if necessary. StackSym * auxSlotPtrSym = baseOpnd->m_sym->GetAuxSlotPtrSym(); - if (auxSlotPtrSym) - { - IR::Opnd *opndIndir = IR::IndirOpnd::New(baseOpnd, Js::DynamicObject::GetOffsetOfAuxSlots(), TyMachReg, this->m_func); - IR::RegOpnd *regOpnd = IR::RegOpnd::New(auxSlotPtrSym, TyMachReg, this->m_func); - regOpnd->SetIsJITOptimizedReg(true); - Lowerer::InsertMove(regOpnd, opndIndir, instrAdjustObjType); - } + Assert(auxSlotPtrSym); + + IR::Opnd *opndIndir = IR::IndirOpnd::New(baseOpnd, Js::DynamicObject::GetOffsetOfAuxSlots(), TyMachReg, this->m_func); + IR::RegOpnd *regOpnd = IR::RegOpnd::New(auxSlotPtrSym, TyMachReg, this->m_func); + regOpnd->SetIsJITOptimizedReg(true); + Lowerer::InsertMove(regOpnd, opndIndir, instrAdjustObjType); } this->m_func->PinTypeRef((JITType*)finalTypeOpnd->m_metadata); @@ -6579,7 +6525,13 @@ Lowerer::GenerateNonConfigurableLdRootFld(IR::Instr * instrLdFld) } Assert(!PHASE_OFF(Js::RootObjectFldFastPathPhase, this->m_func)); - Assert(!instrLdFld->HasBailOutInfo()); + Assert(!instrLdFld->HasBailOutInfo() || instrLdFld->HasLazyBailOut()); + + if (instrLdFld->HasLazyBailOut()) + { + instrLdFld->ClearBailOutInfo(); + } + IR::Opnd * srcOpnd; intptr_t rootObject = this->m_func->GetJITFunctionBody()->GetRootObject(); if (propertySymOpnd->UsesAuxSlot()) @@ -6806,7 +6758,7 @@ Lowerer::GenerateNewStackScFunc(IR::Instr * newScFuncInstr, IR::RegOpnd ** ppEnv else { Assert(func->IsTopFunc()); - Assert(func->m_loopParamSym); + Assert(func->GetLoopParamSym()); IR::Instr * envDefInstr = envOpnd->AsRegOpnd()->m_sym->m_instrDef; Assert(envDefInstr && envDefInstr->m_opcode == Js::OpCode::NewScFuncData); @@ -6895,6 +6847,30 @@ Lowerer::LowerNewScGenFuncHomeObj(IR::Instr * newScFuncInstr) return newScFuncInstr; } +IR::Instr * +Lowerer::LowerStPropIdArrFromVar(IR::Instr * stPropIdInstr) +{ + IR::HelperCallOpnd *helperOpnd = IR::HelperCallOpnd::New(IR::HelperStPropIdArrFromVar, this->m_func); + + IR::Opnd * src1 = stPropIdInstr->UnlinkSrc1(); + stPropIdInstr->SetSrc1(helperOpnd); + stPropIdInstr->SetSrc2(src1); + + return m_lowererMD.LowerCallHelper(stPropIdInstr); +} + +IR::Instr * +Lowerer::LowerRestify(IR::Instr * newRestInstr) +{ + IR::HelperCallOpnd *helperOpnd = IR::HelperCallOpnd::New(IR::HelperRestify, this->m_func); + + IR::Opnd * src1 = newRestInstr->UnlinkSrc1(); + newRestInstr->SetSrc1(helperOpnd); + newRestInstr->SetSrc2(src1); + + return m_lowererMD.LowerCallHelper(newRestInstr); +} + ///---------------------------------------------------------------------------- /// /// Lowerer::LowerScopedLdFld @@ -7039,7 +7015,7 @@ Lowerer::LowerProfiledStFld(IR::JitProfilingInstr *stFldInstr, Js::PropertyOpera m_lowererMD.LoadHelperArgument(stFldInstr, IR::Opnd::CreateFramePointerOpnd(m_func)); - if (stFldInstr->m_opcode == Js::OpCode::StSuperFld) + if (stFldInstr->m_opcode == Js::OpCode::StSuperFld || stFldInstr->m_opcode == Js::OpCode::StSuperFldStrict) { m_lowererMD.LoadHelperArgument(stFldInstr, stFldInstr->UnlinkSrc2()); } @@ -7066,6 +7042,10 @@ Lowerer::LowerProfiledStFld(IR::JitProfilingInstr *stFldInstr, Js::PropertyOpera helper = IR::HelperProfiledStSuperFld; break; + case Js::OpCode::StSuperFldStrict: + helper = IR::HelperProfiledStSuperFld_Strict; + break; + default: helper = flags & Js::PropertyOperation_Root @@ -7112,48 +7092,14 @@ Lowerer::LowerStFld( if (dst->AsSymOpnd()->IsPropertySymOpnd()) { propertySymOpnd = dst->AsPropertySymOpnd(); - if (stFldInstr->HasBailOutInfo() && !propertySymOpnd->IsTypeCheckSeqCandidate() && propertySymOpnd->TypeCheckRequired()) + if (stFldInstr->HasBailOutInfo() && !propertySymOpnd->IsTypeCheckSeqCandidate() && + (propertySymOpnd->CantChangeType() || propertySymOpnd->TypeCheckRequired())) { IR::Instr * instrBailTarget = stFldInstr->ShareBailOut(); LowerBailTarget(instrBailTarget); doCheckLayout = true; bailOutInfo = stFldInstr->GetBailOutInfo(); - switch (helperMethod) - { - case IR::HelperOp_PatchPutValue: - helperMethod = IR::HelperOp_PatchPutValueCheckLayout; - break; - case IR::HelperOp_PatchPutValuePolymorphic: - helperMethod = IR::HelperOp_PatchPutValuePolymorphicCheckLayout; - break; - case IR::HelperOp_PatchPutValueNoLocalFastPath: - helperMethod = IR::HelperOp_PatchPutValueNoLocalFastPathCheckLayout; - break; - case IR::HelperOp_PatchPutValueNoLocalFastPathPolymorphic: - helperMethod = IR::HelperOp_PatchPutValueNoLocalFastPathPolymorphicCheckLayout; - break; - case IR::HelperOp_PatchPutValueWithThisPtr: - helperMethod = IR::HelperOp_PatchPutValueWithThisPtrCheckLayout; - break; - case IR::HelperOp_PatchPutValueWithThisPtrPolymorphic: - helperMethod = IR::HelperOp_PatchPutValueWithThisPtrPolymorphicCheckLayout; - break; - case IR::HelperOp_PatchPutValueWithThisPtrNoLocalFastPath: - helperMethod = IR::HelperOp_PatchPutValueWithThisPtrNoLocalFastPathCheckLayout; - break; - case IR::HelperOp_PatchPutValueWithThisPtrNoLocalFastPathPolymorphic: - helperMethod = IR::HelperOp_PatchPutValueWithThisPtrNoLocalFastPathPolymorphicCheckLayout; - break; - case IR::HelperOp_PatchInitValue: - helperMethod = IR::HelperOp_PatchInitValueCheckLayout; - break; - case IR::HelperOp_PatchInitValuePolymorphic: - helperMethod = IR::HelperOp_PatchInitValuePolymorphicCheckLayout; - break; - default: - AssertOrFailFast(false); - break; - } + MapStFldHelper(propertySymOpnd, helperMethod, polymorphicHelperMethod); } } @@ -7182,7 +7128,7 @@ Lowerer::LowerStFld( } IR::Opnd *src = stFldInstr->UnlinkSrc1(); - if (stFldInstr->m_opcode == Js::OpCode::StSuperFld) + if (stFldInstr->m_opcode == Js::OpCode::StSuperFld || stFldInstr->m_opcode == Js::OpCode::StSuperFldStrict) { m_lowererMD.LoadHelperArgument(stFldInstr, stFldInstr->UnlinkSrc2()); } @@ -7221,6 +7167,115 @@ Lowerer::LowerStFld( return instrPrev; } +void +Lowerer::MapStFldHelper(IR::PropertySymOpnd * propertySymOpnd, IR::JnHelperMethod &helperMethod, IR::JnHelperMethod &polymorphicHelperMethod) +{ + Assert(propertySymOpnd->CantChangeType() || propertySymOpnd->TypeCheckRequired()); + + if (propertySymOpnd->CantChangeType()) + { + switch (helperMethod) + { + case IR::HelperOp_PatchPutValue: + helperMethod = IR::HelperOp_PatchPutValueCantChangeType; + polymorphicHelperMethod = IR::HelperOp_PatchPutValuePolymorphicCantChangeType; + break; + case IR::HelperOp_PatchPutValuePolymorphic: + helperMethod = polymorphicHelperMethod = IR::HelperOp_PatchPutValuePolymorphicCantChangeType; + break; + case IR::HelperOp_PatchPutValueNoLocalFastPath: + helperMethod = IR::HelperOp_PatchPutValueNoLocalFastPathCantChangeType; + polymorphicHelperMethod = IR::HelperOp_PatchPutValueNoLocalFastPathPolymorphicCantChangeType; + break; + case IR::HelperOp_PatchPutValueNoLocalFastPathPolymorphic: + helperMethod = polymorphicHelperMethod = IR::HelperOp_PatchPutValueNoLocalFastPathPolymorphicCantChangeType; + break; + case IR::HelperOp_PatchPutValueWithThisPtr: + helperMethod = IR::HelperOp_PatchPutValueWithThisPtrCantChangeType; + polymorphicHelperMethod = IR::HelperOp_PatchPutValueWithThisPtrPolymorphicCantChangeType; + break; + case IR::HelperOp_PatchPutValueWithThisPtrPolymorphic: + helperMethod = polymorphicHelperMethod = IR::HelperOp_PatchPutValueWithThisPtrPolymorphicCantChangeType; + break; + case IR::HelperOp_PatchPutValueWithThisPtrNoLocalFastPath: + helperMethod = IR::HelperOp_PatchPutValueWithThisPtrNoLocalFastPathCantChangeType; + polymorphicHelperMethod = IR::HelperOp_PatchPutValueWithThisPtrNoLocalFastPathPolymorphicCantChangeType; + break; + case IR::HelperOp_PatchPutValueWithThisPtrNoLocalFastPathPolymorphic: + helperMethod = polymorphicHelperMethod = IR::HelperOp_PatchPutValueWithThisPtrNoLocalFastPathPolymorphicCantChangeType; + break; + case IR::HelperOp_PatchInitValue: + helperMethod = IR::HelperOp_PatchInitValueCantChangeType; + polymorphicHelperMethod = IR::HelperOp_PatchInitValuePolymorphicCantChangeType; + break; + case IR::HelperOp_PatchInitValuePolymorphic: + helperMethod = polymorphicHelperMethod = IR::HelperOp_PatchInitValuePolymorphicCantChangeType; + break; + case IR::HelperOp_PatchPutRootValue: + case IR::HelperOp_PatchPutRootValuePolymorphic: + case IR::HelperOp_PatchPutRootValueNoLocalFastPath: + case IR::HelperOp_PatchPutRootValueNoLocalFastPathPolymorphic: + // No helper method change is needed here, because the global object doesn't participate in final type opt, so it can't alias + // an object that does. + break; + default: + AssertOrFailFast(false); + break; + } + } + else + { + switch (helperMethod) + { + case IR::HelperOp_PatchPutValue: + helperMethod = IR::HelperOp_PatchPutValueCheckLayout; + polymorphicHelperMethod = IR::HelperOp_PatchPutValuePolymorphicCheckLayout; + break; + case IR::HelperOp_PatchPutValuePolymorphic: + helperMethod = polymorphicHelperMethod = IR::HelperOp_PatchPutValuePolymorphicCheckLayout; + break; + case IR::HelperOp_PatchPutValueNoLocalFastPath: + helperMethod = IR::HelperOp_PatchPutValueNoLocalFastPathCheckLayout; + polymorphicHelperMethod = IR::HelperOp_PatchPutValueNoLocalFastPathPolymorphicCheckLayout; + break; + case IR::HelperOp_PatchPutValueNoLocalFastPathPolymorphic: + helperMethod = polymorphicHelperMethod = IR::HelperOp_PatchPutValueNoLocalFastPathPolymorphicCheckLayout; + break; + case IR::HelperOp_PatchPutValueWithThisPtr: + helperMethod = IR::HelperOp_PatchPutValueWithThisPtrCheckLayout; + polymorphicHelperMethod = IR::HelperOp_PatchPutValueWithThisPtrPolymorphicCheckLayout; + break; + case IR::HelperOp_PatchPutValueWithThisPtrPolymorphic: + helperMethod = polymorphicHelperMethod = IR::HelperOp_PatchPutValueWithThisPtrPolymorphicCheckLayout; + break; + case IR::HelperOp_PatchPutValueWithThisPtrNoLocalFastPath: + helperMethod = IR::HelperOp_PatchPutValueWithThisPtrNoLocalFastPathCheckLayout; + polymorphicHelperMethod = IR::HelperOp_PatchPutValueWithThisPtrNoLocalFastPathPolymorphicCheckLayout; + break; + case IR::HelperOp_PatchPutValueWithThisPtrNoLocalFastPathPolymorphic: + helperMethod = polymorphicHelperMethod = IR::HelperOp_PatchPutValueWithThisPtrNoLocalFastPathPolymorphicCheckLayout; + break; + case IR::HelperOp_PatchInitValue: + helperMethod = IR::HelperOp_PatchInitValueCheckLayout; + polymorphicHelperMethod = IR::HelperOp_PatchInitValuePolymorphicCheckLayout; + break; + case IR::HelperOp_PatchInitValuePolymorphic: + helperMethod = polymorphicHelperMethod = IR::HelperOp_PatchInitValuePolymorphicCheckLayout; + break; + case IR::HelperOp_PatchPutRootValue: + case IR::HelperOp_PatchPutRootValuePolymorphic: + case IR::HelperOp_PatchPutRootValueNoLocalFastPath: + case IR::HelperOp_PatchPutRootValueNoLocalFastPathPolymorphic: + // No helper method change is needed here, because the global object doesn't participate in final type opt, so it can't alias + // an object that does. + break; + default: + AssertOrFailFast(false); + break; + } + } +} + IR::Instr* Lowerer::GenerateCompleteStFld(IR::Instr* instr, bool emitFastPath, IR::JnHelperMethod monoHelperAfterFastPath, IR::JnHelperMethod polyHelperAfterFastPath, IR::JnHelperMethod monoHelperWithoutFastPath, IR::JnHelperMethod polyHelperWithoutFastPath, bool withPutFlags, Js::PropertyOperationFlags flags) { @@ -7285,7 +7340,7 @@ Lowerer::GenerateDirectFieldStore(IR::Instr* instrStFld, IR::PropertySymOpnd* pr { Func* func = instrStFld->m_func; - IR::Opnd *opndSlotArray = this->LoadSlotArrayWithCachedLocalType(instrStFld, propertySymOpnd, propertySymOpnd->IsTypeChecked() || instrStFld->HasTypeCheckBailOut()); + IR::Opnd *opndSlotArray = this->LoadSlotArrayWithCachedLocalType(instrStFld, propertySymOpnd); // Store the value to the slot, getting the slot index from the cache. uint16 index = propertySymOpnd->GetSlotIndex(); @@ -7437,7 +7492,10 @@ Lowerer::GenerateStFldWithCachedType(IR::Instr *instrStFld, bool* continueAsHelp if (isTypeChecked) { Assert(labelTypeCheckFailed == nullptr && labelBothTypeChecksFailed == nullptr); - AssertMsg(!instrStFld->HasBailOutInfo(), "Why does a direct field store have bailout?"); + AssertMsg( + !instrStFld->HasBailOutInfo() || instrStFld->OnlyHasLazyBailOut(), + "Why does a direct field store have bailout that is not lazy?" + ); if (propertySymOpnd->HasInitialType() && propertySymOpnd->HasFinalType()) { @@ -7566,7 +7624,7 @@ Lowerer::GenerateCachedTypeCheck(IR::Instr *instrChk, IR::PropertySymOpnd *prope else { monoType = propertySymOpnd->MustDoMonoCheck() ? propertySymOpnd->GetMonoGuardType() : propertySymOpnd->GetType(); - typeCheckGuard = CreateTypePropertyGuardForGuardedProperties(monoType, propertySymOpnd); + typeCheckGuard = this->CreateTypePropertyGuardForGuardedProperties(monoType, propertySymOpnd); } // Create the opnd we will check against the current type. @@ -7694,11 +7752,6 @@ Lowerer::GenerateCachedTypeCheck(IR::Instr *instrChk, IR::PropertySymOpnd *prope InsertObjectPoison(regOpnd, branchInstr, instrChk, false); } - if (propertySymOpnd->NeedsAuxSlotPtrSymLoad()) - { - propertySymOpnd->GenerateAuxSlotPtrSymLoad(instrChk); - } - // Don't pin the type for polymorphic operations. The code can successfully execute even if this type is no longer referenced by any objects, // as long as there are other objects with types equivalent on the properties referenced by this code. The type is kept alive until entry point // installation by the JIT transfer data, and after that by the equivalent type cache, so it will stay alive unless or until it gets evicted @@ -7845,10 +7898,10 @@ Lowerer::GenerateCachedTypeWithoutPropertyCheck(IR::Instr *instrInsert, IR::Prop PinTypeRef(typeWithoutProperty, typeWithoutProperty.t, instrInsert, propertySymOpnd->m_sym->AsPropertySym()->m_propertyId); } -void +bool Lowerer::GenerateFixedFieldGuardCheck(IR::Instr *insertPointInstr, IR::PropertySymOpnd *propertySymOpnd, IR::LabelInstr *labelBailOut) { - GeneratePropertyGuardCheck(insertPointInstr, propertySymOpnd, labelBailOut); + return this->GeneratePropertyGuardCheck(insertPointInstr, propertySymOpnd, labelBailOut); } Js::JitTypePropertyGuard* @@ -7868,7 +7921,7 @@ Lowerer::CreateTypePropertyGuardForGuardedProperties(JITTypeHolder type, IR::Pro LinkGuardToGuardedProperties(propertySymOpnd->GetGuardedPropOps(), [this, type, &guard](Js::PropertyId propertyId) { - if (DoLazyFixedTypeBailout(this->m_func)) + if (ShouldDoLazyFixedTypeBailout(this->m_func)) { this->m_func->lazyBailoutProperties.Item(propertyId); } @@ -8136,13 +8189,18 @@ Lowerer::LinkGuardToGuardedProperties(const BVSparse* guarded return linked; } -void +bool Lowerer::GeneratePropertyGuardCheck(IR::Instr *insertPointInstr, IR::PropertySymOpnd *propertySymOpnd, IR::LabelInstr *labelBailOut) { intptr_t guard = propertySymOpnd->GetPropertyGuardValueAddr(); Assert(guard != 0); - if (!DoLazyFixedDataBailout(this->m_func)) + if (ShouldDoLazyFixedDataBailout(this->m_func)) + { + this->m_func->lazyBailoutProperties.Item(propertySymOpnd->GetPropertyId()); + return false; + } + else { Assert(Js::PropertyGuard::GetSizeOfValue() == static_cast(TySize[TyMachPtr])); IR::AddrOpnd* zeroOpnd = IR::AddrOpnd::NewNull(this->m_func); @@ -8150,10 +8208,7 @@ Lowerer::GeneratePropertyGuardCheck(IR::Instr *insertPointInstr, IR::PropertySym IR::BranchInstr *branchInstr = InsertCompareBranch(guardOpnd, zeroOpnd, Js::OpCode::BrEq_A, labelBailOut, insertPointInstr); IR::RegOpnd *objPtrReg = IR::RegOpnd::New(propertySymOpnd->GetObjectSym(), TyMachPtr, m_func); InsertObjectPoison(objPtrReg, branchInstr, insertPointInstr, false); - } - else - { - this->m_func->lazyBailoutProperties.Item(propertySymOpnd->GetPropertyId()); + return true; } } @@ -8253,11 +8308,6 @@ Lowerer::GenerateFieldStoreWithTypeChange(IR::Instr * instrStFld, IR::PropertySy // Adjust instance slots, if necessary. this->GenerateAdjustSlots(instrStFld, propertySymOpnd, initialType, finalType); - if (propertySymOpnd->NeedsAuxSlotPtrSymLoad()) - { - propertySymOpnd->GenerateAuxSlotPtrSymLoad(instrStFld); - } - // We should never add properties to objects of static types. Assert(Js::DynamicType::Is(finalType->GetTypeId())); @@ -8723,8 +8773,9 @@ Lowerer::LowerBinaryHelper(IR::Instr *instr, IR::JnHelperMethod helperMethod) // instrPrev. IR::Instr *instrPrev = nullptr; - AssertMsg((Js::OpCodeUtil::GetOpCodeLayout(instr->m_opcode) == Js::OpLayoutType::Reg1Unsigned1 && !instr->GetDst()) || + AssertMsg((Js::OpCodeUtil::GetOpCodeLayout(instr->m_opcode) == Js::OpLayoutType::Reg1Unsigned1) || Js::OpCodeUtil::GetOpCodeLayout(instr->m_opcode) == Js::OpLayoutType::Reg3 || + Js::OpCodeUtil::GetOpCodeLayout(instr->m_opcode) == Js::OpLayoutType::Reg2 || Js::OpCodeUtil::GetOpCodeLayout(instr->m_opcode) == Js::OpLayoutType::Reg2Int1 || Js::OpCodeUtil::GetOpCodeLayout(instr->m_opcode) == Js::OpLayoutType::ElementU || instr->m_opcode == Js::OpCode::InvalCachedScope, "Expected a binary instruction..."); @@ -8748,6 +8799,7 @@ Lowerer::LowerBinaryHelperMem(IR::Instr *instr, IR::JnHelperMethod helperMethod) IR::Instr *instrPrev; AssertMsg(Js::OpCodeUtil::GetOpCodeLayout(instr->m_opcode) == Js::OpLayoutType::Reg3 || + Js::OpCodeUtil::GetOpCodeLayout(instr->m_opcode) == Js::OpLayoutType::Reg2 || Js::OpCodeUtil::GetOpCodeLayout(instr->m_opcode) == Js::OpLayoutType::Reg2Int1 || Js::OpCodeUtil::GetOpCodeLayout(instr->m_opcode) == Js::OpLayoutType::Reg1Unsigned1, "Expected a binary instruction..."); @@ -9230,7 +9282,7 @@ Lowerer::LowerLdElemI(IR::Instr * instr, IR::JnHelperMethod helperMethod, bool i return instrPrev; } - if (!isHelper && instr->DoStackArgsOpt(this->m_func)) + if (!isHelper && instr->DoStackArgsOpt()) { IR::LabelInstr * labelLdElem = IR::LabelInstr::New(Js::OpCode::Label, instr->m_func); // Pass in null for labelFallThru to only generate the LdHeapArgument call @@ -10284,7 +10336,7 @@ IR::Instr * Lowerer::LowerBrOnClassConstructor(IR::Instr * instr, IR::JnHelperMe opndHelper = IR::HelperCallOpnd::New(helperMethod, this->m_func); symDst = StackSym::New(TyVar, this->m_func); - opndDst = IR::RegOpnd::New(symDst, TyVar, this->m_func); + opndDst = IR::RegOpnd::New(symDst, TyUint8, this->m_func); instrCall = IR::Instr::New(Js::OpCode::Call, opndDst, opndHelper, this->m_func); instr->InsertBefore(instrCall); @@ -10304,6 +10356,7 @@ Lowerer::LowerEqualityCompare(IR::Instr* instr, IR::JnHelperMethod helper) IR::Instr * instrPrev = instr->m_prev; bool needHelper = true; bool fNoLower = false; + bool isStrictCompare = instr->m_opcode == Js::OpCode::CmSrEq_A || instr->m_opcode == Js::OpCode::CmSrNeq_A; if (instr->GetSrc1()->IsFloat()) { @@ -10321,28 +10374,52 @@ Lowerer::LowerEqualityCompare(IR::Instr* instr, IR::JnHelperMethod helper) LowerBinaryHelperMem(instr, helper); } } - else if (instr->m_opcode == Js::OpCode::CmSrEq_A && TryGenerateFastCmSrEq(instr)) + else if (isStrictCompare && TryGenerateFastCmSrXx(instr)) { } else { - bool hasStrFastpath = GenerateFastBrOrCmString(instr); - if(GenerateFastCmEqLikely(instr, &needHelper, hasStrFastpath) || GenerateFastEqBoolInt(instr, &needHelper, hasStrFastpath)) + if (GenerateFastBrOrCmString(instr)) + { + LowerBinaryHelperMem(instr, helper); + } + else if (isStrictCompare && GenerateFastBrOrCmEqDefinite(instr, helper, &needHelper, false, false)) { if (needHelper) { LowerBinaryHelperMem(instr, helper); } - else + } + else if(GenerateFastCmEqLikely(instr, &needHelper, false) || GenerateFastEqBoolInt(instr, &needHelper, false)) + { + if (needHelper) { - instr->Remove(); + if (isStrictCompare) + { + LowerStrictBrOrCm(instr, helper, false, false /* isBranch */, true); + } + else + { + LowerBinaryHelperMem(instr, helper); + } } } - else if (!m_lowererMD.GenerateFastCmXxTaggedInt(instr, hasStrFastpath)) + else if (!m_lowererMD.GenerateFastCmXxTaggedInt(instr, false)) { - LowerBinaryHelperMem(instr, helper); + if (isStrictCompare) + { + LowerStrictBrOrCm(instr, helper, false, false /* isBranch */, false); + } + else + { + LowerBinaryHelperMem(instr, helper); + } } } + if (!needHelper) + { + instr->Remove(); + } return instrPrev; } @@ -10362,6 +10439,14 @@ Lowerer::LowerEqualityBranch(IR::Instr* instr, IR::JnHelperMethod helper) return instrPrev; } + if (instr->GetSrc2()->IsFloat()) + { + Assert(instr->GetSrc1()->GetType() == instr->GetSrc2()->GetType()); + instr->SwapOpnds(); + m_lowererMD.LowerToFloat(instr); + return instrPrev; + } + if (noFastPath) { LowerBrCMem(instr, helper, true, false /*isHelper*/); @@ -10378,6 +10463,8 @@ Lowerer::LowerEqualityBranch(IR::Instr* instr, IR::JnHelperMethod helper) } bool done = false; + bool isStrictCompare = false; + switch(instr->m_opcode) { case Js::OpCode::BrNeq_A: @@ -10392,11 +10479,10 @@ Lowerer::LowerEqualityBranch(IR::Instr* instr, IR::JnHelperMethod helper) case Js::OpCode::BrSrEq_A: case Js::OpCode::BrSrNotNeq_A: - done = GenerateFastBrSrEq(instr, srcReg1, srcReg2, &instrPrev, noFastPath); - break; case Js::OpCode::BrSrNeq_A: case Js::OpCode::BrSrNotEq_A: - done = GenerateFastBrSrNeq(instr, &instrPrev); + isStrictCompare = true; + done = TryGenerateFastBrSrXx(instr, srcReg1, srcReg2, &instrPrev, noFastPath); break; default: Assume(UNREACHED); @@ -10407,20 +10493,44 @@ Lowerer::LowerEqualityBranch(IR::Instr* instr, IR::JnHelperMethod helper) } bool needHelper = true; - IR::LabelInstr::New(Js::OpCode::Label, this->m_func, true); - - bool hasStrFastPath = GenerateFastBrOrCmString(instr); + bool hasStrFastPath = false; - if (GenerateFastBrEqLikely(instr->AsBranchInstr(), &needHelper, hasStrFastPath) || GenerateFastEqBoolInt(instr, &needHelper, hasStrFastPath)) + if (GenerateFastBrOrCmString(instr)) + { + hasStrFastPath = true; + LowerBrCMem(instr, helper, false, true); + } + else if (isStrictCompare && GenerateFastBrOrCmEqDefinite(instr, helper, &needHelper, true, hasStrFastPath)) { if (needHelper) { - LowerBrCMem(instr, helper, false); + LowerBrCMem(instr, helper, true /*noMathFastPath*/, hasStrFastPath); + } + } + else if (GenerateFastBrEqLikely(instr->AsBranchInstr(), &needHelper, hasStrFastPath) || GenerateFastEqBoolInt(instr, &needHelper, hasStrFastPath)) + { + if (needHelper) + { + if (isStrictCompare) + { + LowerStrictBrOrCm(instr, helper, false, true /* isBranch */, false); + } + else + { + LowerBrCMem(instr, helper, false, hasStrFastPath); + } } } else if (needHelper) { - LowerBrCMem(instr, helper, false, hasStrFastPath); + if (isStrictCompare) + { + LowerStrictBrOrCm(instr, helper, false, true /* isBranch */, false); + } + else + { + LowerBrCMem(instr, helper, false, hasStrFastPath); + } } if (!needHelper) { @@ -10437,6 +10547,169 @@ Lowerer::LowerEqualityBranch(IR::Instr* instr, IR::JnHelperMethod helper) return instrPrev; } +// Generate fast path for StrictEquals for objects that are not GlobalObject, HostDispatch or External to be pointer comparison +IR::Instr * +Lowerer::LowerStrictBrOrCm(IR::Instr * instr, IR::JnHelperMethod helperMethod, bool noMathFastPath, bool isBranch, bool isHelper) +{ + IR::Instr * instrPrev = instr->m_prev; + + IR::LabelInstr * labelHelper = nullptr; + IR::LabelInstr * labelFallThrough = nullptr; + IR::LabelInstr * labelBranchSuccess = nullptr; + IR::LabelInstr * labelBranchFailure = nullptr; + LibraryValue successValueType = ValueInvalid; + LibraryValue failureValueType = ValueInvalid; + + bool isEqual = !instr->IsNeq(); + IR::Opnd * src1 = instr->GetSrc1(); + IR::Opnd * src2 = instr->GetSrc2(); + + AssertMsg(src1 != nullptr && src2 != nullptr, "Expected 2 src opnds on BrC"); + + labelHelper = IR::LabelInstr::New(Js::OpCode::Label, this->m_func, true); + + if (!noMathFastPath) + { + labelFallThrough = instr->GetOrCreateContinueLabel(isHelper); + + if (!isBranch) + { + labelBranchSuccess = IR::LabelInstr::New(Js::OpCode::Label, this->m_func, isHelper); + labelBranchFailure = IR::LabelInstr::New(Js::OpCode::Label, this->m_func, isHelper); + successValueType = isEqual ? LibraryValue::ValueTrue : LibraryValue::ValueFalse; + failureValueType = isEqual ? LibraryValue::ValueFalse : LibraryValue::ValueTrue; + } + else + { + labelBranchSuccess = isEqual ? instr->AsBranchInstr()->GetTarget() : labelFallThrough; + labelBranchFailure = isEqual ? labelFallThrough : instr->AsBranchInstr()->GetTarget(); + } + + if (src1->IsEqual(src2)) + { + if (instr->GetSrc1()->GetValueType().IsNotFloat()) + { + if (!isBranch) + { + InsertMove(instr->GetDst(), LoadLibraryValueOpnd(instr, successValueType), instr); + InsertBranch(Js::OpCode::Br, labelFallThrough, instr); + } + else + { + IR::BranchInstr * branch = IR::BranchInstr::New(LowererMD::MDUncondBranchOpcode, labelBranchSuccess, this->m_func); + instr->InsertBefore(branch); + } + instr->Remove(); + return instrPrev; + } +#if !FLOATVAR + m_lowererMD.GenerateObjectTest(src1->AsRegOpnd(), instr, labelHelper); + IR::RegOpnd *src1TypeReg = IR::RegOpnd::New(TyMachReg, this->m_func); + Lowerer::InsertMove(src1TypeReg, IR::IndirOpnd::New(src1->AsRegOpnd(), Js::RecyclableObject::GetOffsetOfType(), TyMachReg, this->m_func), instr); + + // MOV src1TypeIdReg, [src1TypeReg + offset(typeId)] + IR::RegOpnd *src1TypeIdReg = IR::RegOpnd::New(TyInt32, this->m_func); + Lowerer::InsertMove(src1TypeIdReg, IR::IndirOpnd::New(src1TypeReg, Js::Type::GetOffsetOfTypeId(), TyInt32, this->m_func), instr); + + // CMP src1TypeIdReg, TypeIds_Number + // JEQ $helper + IR::IntConstOpnd *numberTypeId = IR::IntConstOpnd::New(Js::TypeIds_Number, TyInt32, this->m_func, true); + InsertCompareBranch(src1TypeIdReg, numberTypeId, Js::OpCode::BrEq_A, labelHelper, instr); +#else + m_lowererMD.GenerateObjectTest(src1->AsRegOpnd(), instr, labelHelper); +#endif + IR::BranchInstr * branch = IR::BranchInstr::New(LowererMD::MDUncondBranchOpcode, labelBranchSuccess, this->m_func); + instr->InsertBefore(branch); + } + else + { + m_lowererMD.GenerateObjectTest(src1->AsRegOpnd(), instr, labelHelper); + +#if !FLOATVAR + IR::RegOpnd *src1TypeReg = IR::RegOpnd::New(TyMachReg, this->m_func); + Lowerer::InsertMove(src1TypeReg, IR::IndirOpnd::New(src1->AsRegOpnd(), Js::RecyclableObject::GetOffsetOfType(), TyMachReg, this->m_func), instr); + + // MOV src1TypeIdReg, [src1TypeReg + offset(typeId)] + IR::RegOpnd *src1TypeIdReg = IR::RegOpnd::New(TyInt32, this->m_func); + Lowerer::InsertMove(src1TypeIdReg, IR::IndirOpnd::New(src1TypeReg, Js::Type::GetOffsetOfTypeId(), TyInt32, this->m_func), instr); + + // CMP src1TypeIdReg, TypeIds_Number + // JEQ $helper + IR::IntConstOpnd *numberTypeId = IR::IntConstOpnd::New(Js::TypeIds_Number, TyInt32, this->m_func, true); + InsertCompareBranch(src1TypeIdReg, numberTypeId, Js::OpCode::BrEq_A, labelHelper, instr); +#endif + // CMP src1, src2 - Ptr comparison + // JEQ $branchSuccess + InsertCompareBranch(src1, src2, Js::OpCode::BrEq_A, labelBranchSuccess, instr); + +#if FLOATVAR + IR::RegOpnd *src1TypeReg = IR::RegOpnd::New(TyMachReg, this->m_func); + Lowerer::InsertMove(src1TypeReg, IR::IndirOpnd::New(src1->AsRegOpnd(), Js::RecyclableObject::GetOffsetOfType(), TyMachReg, this->m_func), instr); + + // MOV src1TypeIdReg, [src1TypeReg + offset(typeId)] + IR::RegOpnd *src1TypeIdReg = IR::RegOpnd::New(TyInt32, this->m_func); + Lowerer::InsertMove(src1TypeIdReg, IR::IndirOpnd::New(src1TypeReg, Js::Type::GetOffsetOfTypeId(), TyInt32, this->m_func), instr); +#endif + // CMP src1TypeIdReg, TypeIds_HostDispatch + // JLE $helper (le condition covers string, int64, uint64, hostdispatch, as well as undefined, null, boolean) + IR::IntConstOpnd *hostDispatchTypeId = IR::IntConstOpnd::New(Js::TypeIds_HostDispatch, TyInt32, this->m_func, true); + InsertCompareBranch(src1TypeIdReg, hostDispatchTypeId, Js::OpCode::BrLe_A, labelHelper, instr); + + // CMP src1TypeIdReg, TypeIds_GlobalObject + // JE $helper + IR::IntConstOpnd *globalObjectTypeId = IR::IntConstOpnd::New(Js::TypeIds_GlobalObject, TyInt32, this->m_func, true); + InsertCompareBranch(src1TypeIdReg, globalObjectTypeId, Js::OpCode::BrEq_A, labelHelper, instr); + + // TEST src1TypeReg->flags, TypeFlagMask_EngineExternal + // JE $helper + + IR::Opnd *flags = IR::IndirOpnd::New(src1TypeReg, Js::Type::GetOffsetOfFlags(), TyInt8, this->m_func); + InsertTestBranch(flags, IR::IntConstOpnd::New(TypeFlagMask_EngineExternal, TyInt8, this->m_func), Js::OpCode::BrNeq_A, labelHelper, instr); + + if (src2->IsRegOpnd()) + { + m_lowererMD.GenerateObjectTest(src2->AsRegOpnd(), instr, labelHelper); + // MOV src2TypeReg, [src2 + offset(type)] + // TEST [src2TypeReg + offset(flags)], TypeFlagMask_EngineExternal + // JE $helper + IR::RegOpnd *src2TypeReg = IR::RegOpnd::New(TyMachReg, this->m_func); + IR::IndirOpnd *src2Type = IR::IndirOpnd::New(src2->AsRegOpnd(), Js::RecyclableObject::GetOffsetOfType(), TyMachReg, this->m_func); + Lowerer::InsertMove(src2TypeReg, src2Type, instr); + IR::Opnd *src2Flags = IR::IndirOpnd::New(src2TypeReg, Js::Type::GetOffsetOfFlags(), TyInt8, this->m_func); + InsertTestBranch(src2Flags, IR::IntConstOpnd::New(TypeFlagMask_EngineExternal, TyInt8, this->m_func), Js::OpCode::BrNeq_A, labelHelper, instr); + } + + // JMP $done + IR::BranchInstr * branch = IR::BranchInstr::New(LowererMD::MDUncondBranchOpcode, labelBranchFailure, this->m_func); + instr->InsertBefore(branch); + } + + if (!isBranch) + { + instr->InsertBefore(labelBranchSuccess); + InsertMove(instr->GetDst(), LoadLibraryValueOpnd(instr, successValueType), instr); + InsertBranch(Js::OpCode::Br, labelFallThrough, instr); + + instr->InsertBefore(labelBranchFailure); + InsertMove(instr->GetDst(), LoadLibraryValueOpnd(instr, failureValueType), instr); + InsertBranch(Js::OpCode::Br, labelFallThrough, instr); + } + } + + instr->InsertBefore(labelHelper); + + if (isBranch) + { + LowerBrCMem(instr, helperMethod, true, true); + } + else + { + LowerBinaryHelperMem(instr, helperMethod); + } + + return instrPrev; +} + IR::Instr * Lowerer::LowerBrCMem(IR::Instr * instr, IR::JnHelperMethod helperMethod, bool noMathFastPath, bool isHelper) { @@ -10592,9 +10865,11 @@ Lowerer::LowerBrProperty(IR::Instr * instr, IR::JnHelperMethod helper) switch (instr->m_opcode) { case Js::OpCode::BrOnHasProperty: + case Js::OpCode::BrOnHasLocalProperty: instr->m_opcode = Js::OpCode::BrTrue_A; break; case Js::OpCode::BrOnNoProperty: + case Js::OpCode::BrOnNoLocalProperty: instr->m_opcode = Js::OpCode::BrFalse_A; break; default: @@ -10749,6 +11024,78 @@ Lowerer::CreateOpndForSlotAccess(IR::Opnd * opnd) return indirOpnd; } +IR::Instr* Lowerer::AddSlotArrayCheck(PropertySym *propertySym, IR::Instr* instr) +{ + if (propertySym->m_stackSym != m_func->GetLocalClosureSym() || PHASE_OFF(Js::ClosureRangeCheckPhase, m_func)) + { + return instr->m_prev; + } + + IR::Instr *instrDef = propertySym->m_stackSym->m_instrDef; + + bool doDynamicCheck = this->m_func->IsLoopBody(); + bool insertSlotArrayCheck = false; + uint32 slotId = (uint32)propertySym->m_propertyId; + + if (instrDef) + { + switch (instrDef->m_opcode) + { + case Js::OpCode::NewScopeSlots: + case Js::OpCode::NewStackScopeSlots: + case Js::OpCode::NewScopeSlotsWithoutPropIds: + { + IR::Opnd *allocOpnd = allocOpnd = instrDef->GetSrc1(); + uint32 allocCount = allocOpnd->AsIntConstOpnd()->AsUint32(); + + if (slotId >= allocCount) + { + Js::Throw::FatalInternalError(); + } + break; + } + case Js::OpCode::ArgIn_A: + break; + case Js::OpCode::LdSlot: + case Js::OpCode::LdSlotArr: + { + if (doDynamicCheck && slotId > Js::ScopeSlots::FirstSlotIndex) + { + insertSlotArrayCheck = true; + } + break; + } + case Js::OpCode::SlotArrayCheck: + { + uint32 currentSlotId = instrDef->GetSrc2()->AsIntConstOpnd()->AsInt32(); + if (slotId > currentSlotId) + { + instrDef->ReplaceSrc2(IR::IntConstOpnd::New(slotId, TyUint32, m_func)); + } + break; + } + default: + Js::Throw::FatalInternalError(); + } + } + if (insertSlotArrayCheck) + { + IR::Instr *insertInstr = instrDef->m_next; + IR::RegOpnd *dstOpnd = instrDef->UnlinkDst()->AsRegOpnd(); + IR::Instr *checkInstr = IR::Instr::New(Js::OpCode::SlotArrayCheck, dstOpnd, m_func); + + dstOpnd = IR::RegOpnd::New(TyVar, m_func); + instrDef->SetDst(dstOpnd); + checkInstr->SetSrc1(dstOpnd); + + // Attach the slot ID to the check instruction. + IR::IntConstOpnd *slotIdOpnd = IR::IntConstOpnd::New(slotId, TyUint32, m_func); + checkInstr->SetSrc2(slotIdOpnd); + insertInstr->InsertBefore(checkInstr); + } + return instr->m_prev; +} + IR::Instr * Lowerer::LowerStSlot(IR::Instr *instr) { @@ -11180,6 +11527,7 @@ Lowerer::LowerArgIn(IR::Instr *instrArgIn) if (m_func->GetJITFunctionBody()->IsCoroutine()) { + AssertMsg(!m_func->IsLoopBody(), "LoopBody Jit should not involve Rest params"); generatorArgsPtrOpnd = LoadGeneratorArgsPtr(instrArgIn); } @@ -11197,7 +11545,7 @@ Lowerer::LowerArgIn(IR::Instr *instrArgIn) if (argIndex == 1) { // The "this" argument is not source-dependent and doesn't need to be checked. - if (m_func->GetJITFunctionBody()->IsCoroutine()) + if (m_func->GetJITFunctionBody()->IsCoroutine() && !m_func->IsLoopBody()) { generatorArgsPtrOpnd = LoadGeneratorArgsPtr(instrArgIn); ConvertArgOpndIfGeneratorFunction(instrArgIn, generatorArgsPtrOpnd); @@ -11763,25 +12111,40 @@ bool Lowerer::IsNullOrUndefRegOpnd(IR::RegOpnd *opnd) const { StackSym *sym = opnd->m_sym; - if (!sym->IsConst() || sym->IsIntConst() || sym->IsFloatConst()) + if (sym->IsIntConst() || sym->IsFloatConst()) { return false; } - Js::Var var = sym->GetConstAddress(); - return (intptr_t)var == m_func->GetScriptContextInfo()->GetNullAddr() || (intptr_t)var == m_func->GetScriptContextInfo()->GetUndefinedAddr(); + + return opnd->GetValueType().IsUndefined() || opnd->GetValueType().IsNull(); } bool Lowerer::IsConstRegOpnd(IR::RegOpnd *opnd) const { StackSym *sym = opnd->m_sym; - if (!sym->IsConst() || sym->IsIntConst() || sym->IsFloatConst()) + if (sym->IsIntConst() || sym->IsFloatConst()) { return false; } - const auto& vt = sym->m_instrDef->GetSrc1()->GetValueType(); - return vt.IsUndefined() || vt.IsNull() || vt.IsBoolean(); + const auto& vt = opnd->GetValueType(); + return vt.IsUndefined() || vt.IsNull() || (sym->m_isConst && vt.IsBoolean()); +} + +IR::Opnd * Lowerer::GetConstRegOpnd(IR::RegOpnd *opnd, IR::Instr * instr) +{ + if (opnd->GetValueType().IsUndefined()) + { + return this->LoadLibraryValueOpnd(instr, LibraryValue::ValueUndefined); + } + if (opnd->GetValueType().IsNull()) + { + return this->LoadLibraryValueOpnd(instr, LibraryValue::ValueNull); + } + + Assert(opnd->GetValueType().IsBoolean()); + return opnd->GetStackSym()->GetInstrDef()->GetSrc1()->AsAddrOpnd(); } bool @@ -11929,7 +12292,7 @@ Lowerer::LowerCallDirect(IR::Instr * instr) instr->SetSrc2(argInstr->UnlinkSrc2()); argInstr->Remove(); - if(instr->HasBailOutInfo()) + if (instr->HasBailOutInfo() && !instr->HasLazyBailOut()) { IR::Instr * bailOutInstr = this->SplitBailOnImplicitCall(instr, instr->m_next, instr->m_next); this->LowerBailOnEqualOrNotEqual(bailOutInstr); @@ -11997,6 +12360,7 @@ Lowerer::GenerateHelperToArrayPopFastPath(IR::Instr * instr, IR::LabelInstr * do IR::JnHelperMethod helperMethod; //Decide the helperMethod based on dst availability and nativity of the array. + // ToDo: Maybe ignore fast path if `JavascriptArray::HasAnyES5ArrayInPrototypeChain`. See #6582 and #6824. if(arrayValueType.IsLikelyNativeArray() && !instr->GetDst()) { helperMethod = IR::HelperArray_NativePopWithNoDst; @@ -12016,11 +12380,7 @@ Lowerer::GenerateHelperToArrayPopFastPath(IR::Instr * instr, IR::LabelInstr * do m_lowererMD.LoadHelperArgument(instr, arrayHelperOpnd); - //We do not need scriptContext for HelperArray_NativePopWithNoDst call. - if(helperMethod != IR::HelperArray_NativePopWithNoDst) - { - LoadScriptContext(instr); - } + LoadScriptContext(instr); IR::Instr * retInstr = m_lowererMD.ChangeToHelperCall(instr, helperMethod, bailOutLabelHelper); @@ -12297,6 +12657,9 @@ Lowerer::LowerBailoutCheckAndLabel(IR::Instr *instr, bool onEqual, bool isHelper { IR::LabelInstr * helperLabelInstr = IR::LabelInstr::New(Js::OpCode::Label, m_func, true); instr->InsertBefore(helperLabelInstr); +#if DBG + helperLabelInstr->m_noLazyHelperAssert = true; +#endif } } @@ -12393,15 +12756,60 @@ Lowerer::LowerBailOnNotObject(IR::Instr *instr, return prevInstr; } -IR::Instr * -Lowerer::LowerBailOnTrue(IR::Instr* instr, IR::LabelInstr* labelBailOut /*nullptr*/) +IR::Instr* +Lowerer::LowerCheckIsFuncObj(IR::Instr *instr, bool checkFuncInfo) { - IR::Instr* instrPrev = instr->m_prev; + // The CheckIsFuncObj instr and CheckFuncInfo instr (checkFuncInfo = true) are used to + // generate bailout instrs that type check a function (and can also check the func info). + // Rather than creating these bailout instrs in Inline, they are created in Lower because + // CheckIsFuncObj and CheckFuncInfo instrs can be hoisted outside of loops and thus the + // bailout instrs created can exist outside of loops. - IR::LabelInstr* continueLabel = instr->GetOrCreateContinueLabel(); - IR::RegOpnd * regSrc1 = IR::RegOpnd::New(instr->GetSrc1()->GetType(), this->m_func); - InsertMove(regSrc1, instr->UnlinkSrc1(), instr); - InsertTestBranch(regSrc1, regSrc1, Js::OpCode::BrEq_A, continueLabel, instr); + IR::RegOpnd *funcOpnd = instr->GetSrc1()->AsRegOpnd(); + IR::BailOutKind bailOutKind = instr->GetBailOutKind(); + BailOutInfo *bailOutInfo = instr->GetBailOutInfo(); + + // Check that the property is an object. + InsertObjectCheck(funcOpnd, instr, bailOutKind, bailOutInfo); + + // Check that the object is a function with the correct type ID. + IR::Instr *lastInstr = InsertFunctionTypeIdCheck(funcOpnd, instr, bailOutKind, bailOutInfo); + + if (checkFuncInfo) + { + // Check that the function body matches the func info. + lastInstr = InsertFunctionInfoCheck( + funcOpnd, instr, instr->GetSrc2()->AsAddrOpnd(), bailOutKind, bailOutInfo); + lastInstr->SetByteCodeOffset(instr); + } + + if (bailOutInfo->bailOutInstr == instr) + { + // bailOutInstr is currently instr. By changing bailOutInstr to point to lastInstr, the next + // instruction to be lowered (lastInstr) will create the bailout target. This is necessary in + // cases where instr does not have a shared bailout (ex: instr was not hoisted outside of a loop). + bailOutInfo->bailOutInstr = lastInstr; + } + + // the CheckFunctionEntryPoint instr exists in order to create the instrs above. It does not have + // any other purpose and thus it is removed. The instr's BailOutInfo continues to be used and thus + // must not be deleted. Flags are turned off to stop Remove() from deleting instr's BailOutInfo. + instr->hasBailOutInfo = false; + instr->hasAuxBailOut = false; + instr->Remove(); + + return lastInstr; +} + +IR::Instr* +Lowerer::LowerBailOnTrue(IR::Instr* instr, IR::LabelInstr* labelBailOut /*nullptr*/) +{ + IR::Instr* instrPrev = instr->m_prev; + + IR::LabelInstr* continueLabel = instr->GetOrCreateContinueLabel(); + IR::RegOpnd * regSrc1 = IR::RegOpnd::New(instr->GetSrc1()->GetType(), this->m_func); + InsertMove(regSrc1, instr->UnlinkSrc1(), instr); + InsertTestBranch(regSrc1, regSrc1, Js::OpCode::BrEq_A, continueLabel, instr); GenerateBailOut(instr, nullptr, labelBailOut); @@ -13442,7 +13850,7 @@ Lowerer::SplitBailOnImplicitCall(IR::Instr *& instr) Lowerer::InsertMove(implicitCallFlags, noImplicitCall, instr); IR::Instr *disableImplicitCallsInstr = nullptr, *enableImplicitCallsInstr = nullptr; - if(bailOutKind == IR::BailOutOnImplicitCallsPreOp) + if(BailOutInfo::WithoutLazyBailOut(bailOutKind) == IR::BailOutOnImplicitCallsPreOp) { const auto disableImplicitCallAddress = m_lowererMD.GenerateMemRef( @@ -13466,6 +13874,10 @@ Lowerer::SplitBailOnImplicitCall(IR::Instr *& instr) disableImplicitCallAddress, IR::IntConstOpnd::New(DisableImplicitNoFlag, TyInt8, instr->m_func, true), instr->m_func); + +#if DBG + enableImplicitCallsInstr->m_noLazyHelperAssert = true; +#endif } IR::Instr * bailOutInstr = instr; @@ -13764,7 +14176,7 @@ Lowerer::GenerateBailOut(IR::Instr * instr, IR::BranchInstr * branchInstr, IR::L { Assert(bailOutInstr != instr); - // jump to the cloned bail out label + // Jump to the cloned bail out label IR::LabelInstr * bailOutLabelInstr = bailOutInstr->AsLabelInstr(); IR::BranchInstr * bailOutBranch = IR::BranchInstr::New(LowererMD::MDUncondBranchOpcode, bailOutLabelInstr, this->m_func); instr->InsertBefore(bailOutBranch); @@ -13859,10 +14271,10 @@ Lowerer::GenerateBailOut(IR::Instr * instr, IR::BranchInstr * branchInstr, IR::L return collectRuntimeStatsLabel ? collectRuntimeStatsLabel : bailOutLabel; } - // The bailout hasn't be generated yet. + // The bailout hasn't been generated yet. Assert(!bailOutInstr->IsLabelInstr()); - // capture the condition for this bailout + // Capture the condition for this bailout if (bailOutLabel == nullptr) { // Create a label and place it in the bailout info so that shared bailout point can jump to this one @@ -13882,6 +14294,10 @@ Lowerer::GenerateBailOut(IR::Instr * instr, IR::BranchInstr * branchInstr, IR::L instr->InsertBefore(bailOutLabel); } +#if DBG + bailOutLabel->m_noLazyHelperAssert = true; +#endif + #if DBG const IR::BailOutKind bailOutKind = bailOutInstr->GetBailOutKind(); @@ -13925,7 +14341,7 @@ Lowerer::GenerateBailOut(IR::Instr * instr, IR::BranchInstr * branchInstr, IR::L this->m_lowererMD.EmitInt4Instr(subInstr); // We should really do a DEC/NEG for a full 2's complement flip from 0/1 to 1/0, // but DEC is sufficient to flip from 0/1 to -1/0, which is false/true to true/false... - //instr->InsertBefore(IR::Instr::New(Js::OpCode::Neg_I4, condOpnd, condOpnd, instr->m_func)); + // instr->InsertBefore(IR::Instr::New(Js::OpCode::Neg_I4, condOpnd, condOpnd, instr->m_func)); invertTarget = invertTarget ? false : true; } @@ -13997,10 +14413,17 @@ Lowerer::GenerateBailOut(IR::Instr * instr, IR::BranchInstr * branchInstr, IR::L if (instr->GetSrc2() != nullptr) { // Ideally we should never be in this situation but incase we reached a - // condition where we didn't freed src2. Free it here. + // condition where we didn't free src2, free it here. instr->FreeSrc2(); } + // We do not need lazybailout bit on SaveAllRegistersAndBailOut + if (instr->HasLazyBailOut()) + { + instr->ClearLazyBailOut(); + Assert(instr->HasBailOutInfo()); + } + // Call the bail out wrapper instr->m_opcode = Js::OpCode::Call; if(instr->GetDst()) @@ -14012,36 +14435,49 @@ Lowerer::GenerateBailOut(IR::Instr * instr, IR::BranchInstr * branchInstr, IR::L instr->SetSrc1(IR::HelperCallOpnd::New(helperMethod, this->m_func)); m_lowererMD.LowerCall(instr, 0); - if (bailOutInstr->GetBailOutKind() != IR::BailOutForGeneratorYield) + if (this->m_func->GetJITFunctionBody()->IsCoroutine()) + { + if (bailOutInstr->GetBailOutKind() != IR::BailOutForGeneratorYield) + { + // Defer introducing the JMP to epilog until LowerPrologEpilog phase for Yield bailouts so + // that Yield does not appear to have flow out of its containing block for the RegAlloc phase. + // Yield is an unconditional bailout but we want to simulate the flow as if the Yield were + // just like a call. + GenerateJumpToEpilogForBailOut(bailOutInfo, instr, this->m_lowerGeneratorHelper.GetEpilogueForBailOut()); + } + } + else { - // Defer introducing the JMP to epilog until LowerPrologEpilog phase for Yield bailouts so - // that Yield does not appear to have flow out of its containing block for the RegAlloc phase. - // Yield is an unconditional bailout but we want to simulate the flow as if the Yield were - // just like a call. - GenerateJumpToEpilogForBailOut(bailOutInfo, instr); + GenerateJumpToEpilogForBailOut(bailOutInfo, instr, this->EnsureEpilogueLabel()); } + + return collectRuntimeStatsLabel ? collectRuntimeStatsLabel : bailOutLabel; } -void -Lowerer::GenerateJumpToEpilogForBailOut(BailOutInfo * bailOutInfo, IR::Instr *instr) +IR::LabelInstr * +Lowerer::EnsureEpilogueLabel() const { - IR::Instr * exitPrevInstr = this->m_func->m_exitInstr->m_prev; - // JMP to the epilog - IR::LabelInstr * exitTargetInstr; + Assert(!this->m_func->GetJITFunctionBody()->IsCoroutine()); + IR::Instr* exitPrevInstr = this->m_func->m_exitInstr->m_prev; if (exitPrevInstr->IsLabelInstr()) { - exitTargetInstr = exitPrevInstr->AsLabelInstr(); + return exitPrevInstr->AsLabelInstr(); } else { - exitTargetInstr = IR::LabelInstr::New(Js::OpCode::Label, this->m_func, false); - exitPrevInstr->InsertAfter(exitTargetInstr); + IR::LabelInstr* epilogueLabel = IR::LabelInstr::New(Js::OpCode::Label, this->m_func, false); + LABELNAMESET(epilogueLabel, "Epilogue"); + exitPrevInstr->InsertAfter(epilogueLabel); + return epilogueLabel; } +} +void +Lowerer::GenerateJumpToEpilogForBailOut(BailOutInfo * bailOutInfo, IR::Instr *instr, IR::LabelInstr *exitTargetInstr) +{ exitTargetInstr = m_lowererMD.GetBailOutStackRestoreLabel(bailOutInfo, exitTargetInstr); - IR::Instr * instrAfter = instr->m_next; IR::BranchInstr * exitInstr = IR::BranchInstr::New(LowererMD::MDUncondBranchOpcode, exitTargetInstr, this->m_func); instrAfter->InsertBefore(exitInstr); @@ -14218,7 +14654,7 @@ Lowerer::LowerInlineeStart(IR::Instr * inlineeStartInstr) IR::Instr* prev = inlineeStartInstr->m_prev; - if (inlineeStartInstr->m_func->m_hasInlineArgsOpt) + if (inlineeStartInstr->m_func->m_hasInlineArgsOpt || inlineeStartInstr->m_func->GetParentFunc()->m_hasInlineArgsOpt) { inlineeStartInstr->FreeSrc1(); inlineeStartInstr->FreeSrc2(); @@ -14228,6 +14664,7 @@ Lowerer::LowerInlineeStart(IR::Instr * inlineeStartInstr) { inlineeStartInstr->Remove(); } + return prev; } @@ -14246,7 +14683,7 @@ Lowerer::LowerInlineeEnd(IR::Instr *instr) } // Keep InlineeEnd around as it is used by register allocator, if we have optimized the arguments stack - if (instr->m_func->m_hasInlineArgsOpt) + if (instr->m_func->m_hasInlineArgsOpt || (instr->m_func->GetParentFunc()->m_hasInlineArgsOpt && !instr->m_func->m_hasInlineOverheadRemoved)) { instr->FreeSrc1(); } @@ -14381,13 +14818,9 @@ Lowerer::GetValueFromIndirOpnd(IR::IndirOpnd *indirOpnd, IR::Opnd **pValueOpnd, void Lowerer::GenerateFastBrOnObject(IR::Instr *instr) { - Assert(instr->m_opcode == Js::OpCode::BrOnObject_A); - IR::RegOpnd *object = instr->GetSrc1()->IsRegOpnd() ? instr->GetSrc1()->AsRegOpnd() : nullptr; IR::LabelInstr *done = instr->GetOrCreateContinueLabel(); IR::LabelInstr *target = instr->AsBranchInstr()->GetTarget(); - IR::RegOpnd *typeRegOpnd = IR::RegOpnd::New(TyMachReg, m_func); - IR::IntConstOpnd *typeIdOpnd = IR::IntConstOpnd::New(Js::TypeIds_LastJavascriptPrimitiveType, TyInt32, instr->m_func); if (!object) { @@ -14402,15 +14835,44 @@ Lowerer::GenerateFastBrOnObject(IR::Instr *instr) // JGT $target // $done: - m_lowererMD.GenerateObjectTest(object, instr, done); + m_lowererMD.GenerateObjectTest(object, instr, instr->m_opcode == Js::OpCode::BrOnNotNullObj_A ? target : done); + IR::RegOpnd *typeRegOpnd = IR::RegOpnd::New(TyMachReg, m_func); InsertMove(typeRegOpnd, IR::IndirOpnd::New(object, Js::RecyclableObject::GetOffsetOfType(), TyMachReg, m_func), instr); - InsertCompareBranch( - IR::IndirOpnd::New(typeRegOpnd, Js::Type::GetOffsetOfTypeId(), TyInt32, m_func), - typeIdOpnd, Js::OpCode::BrGt_A, target, instr); + switch (instr->m_opcode) + { + case Js::OpCode::BrOnObjectOrNull_A: + { + IR::RegOpnd * opndTypeId = IR::RegOpnd::New(TyInt32, m_func); + InsertMove(opndTypeId, IR::IndirOpnd::New(typeRegOpnd, Js::Type::GetOffsetOfTypeId(), TyInt32, m_func), instr); + InsertCompareBranch(opndTypeId, + IR::IntConstOpnd::New(Js::TypeIds_LastJavascriptPrimitiveType, TyInt32, instr->m_func), + Js::OpCode::BrGt_A, target, instr); + InsertCompareBranch(opndTypeId, IR::IntConstOpnd::New(Js::TypeIds_Null, TyInt32, m_func), Js::OpCode::BrEq_A, target, instr); + break; + } + + case Js::OpCode::BrOnObject_A: + InsertCompareBranch( + IR::IndirOpnd::New(typeRegOpnd, Js::Type::GetOffsetOfTypeId(), TyInt32, m_func), + IR::IntConstOpnd::New(Js::TypeIds_LastJavascriptPrimitiveType, TyInt32, instr->m_func), + Js::OpCode::BrGt_A, target, instr); + break; + + case Js::OpCode::BrOnNotNullObj_A: + InsertCompareBranch( + IR::IndirOpnd::New(typeRegOpnd, Js::Type::GetOffsetOfTypeId(), TyInt32, m_func), + IR::IntConstOpnd::New(Js::TypeIds_Null, TyInt32, instr->m_func), + Js::OpCode::BrNeq_A, target, instr); + break; + + default: + AssertMsg(false, "Unknown BrOnObject opcode"); + break; + } instr->Remove(); } @@ -16702,12 +17164,14 @@ Lowerer::GenerateFastElemIIntIndexCommon( // The bailout must be pre-op because it will not have completed the operation Assert(instr->GetBailOutInfo()->bailOutOffset == instr->GetByteCodeOffset()); + // TODO: Check this with lazy bailout // Verify other bailouts these can be combined with Assert( !( bailOutKind & IR::BailOutKindBits & ~( + IR::LazyBailOut | IR::BailOutOnArrayAccessHelperCall | IR::BailOutOnInvalidatedArrayHeadSegment | IR::BailOutOnInvalidatedArrayLength | @@ -17748,12 +18212,12 @@ Lowerer::GenerateFastLdElemI(IR::Instr *& ldElem, bool *instrIsInHelperBlockRef) labelFallThru = ldElem->GetOrCreateContinueLabel(); labelHelper = IR::LabelInstr::New(Js::OpCode::Label, this->m_func, true); // If we know for sure (based on flow graph) we're loading from the arguments object, then ignore the (path-based) profile info. - bool isNativeArrayLoad = !ldElem->DoStackArgsOpt(this->m_func) && indirOpnd->GetBaseOpnd()->GetValueType().IsLikelyNativeArray(); + bool isNativeArrayLoad = !ldElem->DoStackArgsOpt() && indirOpnd->GetBaseOpnd()->GetValueType().IsLikelyNativeArray(); bool needMissingValueCheck = true; bool emittedFastPath = false; bool emitBailout = false; - if (ldElem->DoStackArgsOpt(this->m_func)) + if (ldElem->DoStackArgsOpt()) { emittedFastPath = GenerateFastArgumentsLdElemI(ldElem, labelFallThru); emitBailout = true; @@ -18203,6 +18667,9 @@ Lowerer::GenerateFastLdElemI(IR::Instr *& ldElem, bool *instrIsInHelperBlockRef) if (labelMissingNative == nullptr) { labelMissingNative = IR::LabelInstr::New(Js::OpCode::Label, m_func, true); +#if DBG + labelMissingNative->m_noLazyHelperAssert = true; +#endif } InsertMissingItemCompareBranch(ldElem->GetDst(), Js::OpCode::BrEq_A, labelMissingNative, insertBeforeInstr); @@ -19044,7 +19511,7 @@ Lowerer::GenerateFastLdLen(IR::Instr *ldLen, bool *instrIsInHelperBlockRef) IR::LabelInstr *const labelHelper = IR::LabelInstr::New(Js::OpCode::Label, this->m_func, true); - if (ldLen->DoStackArgsOpt(this->m_func)) + if (ldLen->DoStackArgsOpt()) { GenerateFastArgumentsLdLen(ldLen, ldLen->GetOrCreateContinueLabel()); ldLen->Remove(); @@ -19176,7 +19643,7 @@ Lowerer::GenerateFastLdLen(IR::Instr *ldLen, bool *instrIsInHelperBlockRef) if(ldLen->HasBailOutInfo() && (ldLen->GetBailOutKind() & ~IR::BailOutKindBits) == IR::BailOutOnIrregularLength) { - Assert(ldLen->GetBailOutKind() == IR::BailOutOnIrregularLength); + Assert(ldLen->GetBailOutKind() == IR::BailOutOnIrregularLength || ldLen->HasLazyBailOut()); Assert(dst->IsInt32()); // Since the length is an unsigned int32, verify that when interpreted as a signed int32, it is not negative @@ -20766,61 +21233,6 @@ Lowerer::GenerateFastInlineStringReplace(IR::Instr * instr) return true; } -#ifdef ENABLE_DOM_FAST_PATH -/* - Lower the DOMFastPathGetter opcode - We have inliner generated bytecode: - (dst)helpArg1: ExtendArg_A (src1)thisObject (src2)null - (dst)helpArg2: ExtendArg_A (src1)funcObject (src2)helpArg1 - method: DOMFastPathGetter (src1)HelperCall (src2)helpArg2 - - We'll convert it to a JavascriptFunction entry method call: - CALL Helper funcObject CallInfo(CallFlags_Value, 3) thisObj -*/ -void -Lowerer::LowerFastInlineDOMFastPathGetter(IR::Instr* instr) -{ - IR::Opnd* helperOpnd = instr->UnlinkSrc1(); - Assert(helperOpnd->IsHelperCallOpnd()); - - IR::Opnd *linkOpnd = instr->UnlinkSrc2(); - Assert(linkOpnd->IsRegOpnd()); - - IR::Instr* prevInstr = linkOpnd->AsRegOpnd()->m_sym->m_instrDef; - Assert(prevInstr->m_opcode == Js::OpCode::ExtendArg_A); - IR::Opnd* funcObj = prevInstr->GetSrc1(); - - Assert(funcObj->IsRegOpnd()); - // If the Extended_arg was CSE's across a loop or hoisted out of a loop, - // adding a new reference down here might cause funcObj to now be liveOnBackEdge. - // Use the addToLiveOnBackEdgeSyms bit vector to add it to a loop if we encounter one. - // We'll clear it once we reach the Extended arg. - this->addToLiveOnBackEdgeSyms->Set(funcObj->AsRegOpnd()->m_sym->m_id); - - Assert(prevInstr->GetSrc2() != nullptr); - prevInstr = prevInstr->GetSrc2()->AsRegOpnd()->m_sym->m_instrDef; - Assert(prevInstr->m_opcode == Js::OpCode::ExtendArg_A); - IR::Opnd* thisObj = prevInstr->GetSrc1(); - Assert(prevInstr->GetSrc2() == nullptr); - - Assert(thisObj->IsRegOpnd()); - this->addToLiveOnBackEdgeSyms->Set(thisObj->AsRegOpnd()->m_sym->m_id); - - const auto info = Lowerer::MakeCallInfoConst(Js::CallFlags_Value, 1, m_func); - - m_lowererMD.LoadHelperArgument(instr, thisObj); - m_lowererMD.LoadHelperArgument(instr, info); - m_lowererMD.LoadHelperArgument(instr, funcObj); - - instr->m_opcode = Js::OpCode::Call; - - IR::HelperCallOpnd *helperCallOpnd = Lowerer::CreateHelperCallOpnd(helperOpnd->AsHelperCallOpnd()->m_fnHelper, 3, m_func); - instr->SetSrc1(helperCallOpnd); - - m_lowererMD.LowerCall(instr, 3); // we have funcobj, callInfo, and this. -} -#endif - void Lowerer::GenerateFastInlineArrayPush(IR::Instr * instr) { @@ -21741,14 +22153,18 @@ Lowerer::GenerateFastArgumentsLdElemI(IR::Instr* ldElem, IR::LabelInstr *labelFa // ---GenerateLdValueFromCheckedIndexOpnd // ---LoadInputParamCount // CMP actualParamOpnd, valueOpnd //Compare between the actual count & the index count (say i in arguments[i]) - // JLE $labelCreateHeapArgs + // JLE $labelReturnUndefined // MOV dst, ebp [(valueOpnd + 5) *4] // 5 for the stack layout // JMP $fallthrough // + //labelReturnUndefined: + // MOV dst, undefined + // JMP $fallthrough + // //labelCreateHeapArgs: // ---Bail out to create Heap Arguments object - Assert(ldElem->DoStackArgsOpt(this->m_func)); + Assert(ldElem->DoStackArgsOpt()); IR::IndirOpnd *indirOpnd = ldElem->GetSrc1()->AsIndirOpnd(); bool isInlinee = ldElem->m_func->IsInlinee(); @@ -21766,12 +22182,23 @@ Lowerer::GenerateFastArgumentsLdElemI(IR::Instr* ldElem, IR::LabelInstr *labelFa bool hasIntConstIndex = indirOpnd->TryGetIntConstIndexValue(true, &value, &isNotInt); - if (isNotInt || (isInlinee && hasIntConstIndex && value >= (ldElem->m_func->actualCount - 1))) + if (isNotInt) { - //Outside the range of actuals, skip + //Not an int disable optimisation and rejit } - else if (labelFallThru != nullptr && !(hasIntConstIndex && value < 0)) //if index is not a negative int constant + else if (hasIntConstIndex && (value < 0 || (isInlinee && value >= (ldElem->m_func->actualCount - 1)))) { + // if the index is an int const outside the range then the value must be undefined + // this is ensured as GlobOpt::OptArguments disables the Arguments optimisation if the arguments object is modified + IR::Opnd *undef = LoadLibraryValueOpnd(ldElem, LibraryValue::ValueUndefined); + Lowerer::InsertMove(ldElem->GetDst(), undef, ldElem); + // JMP $done + InsertBranch(Js::OpCode::Br, labelFallThru, ldElem); + emittedFastPath = true; + } + else if (labelFallThru != nullptr) + { + IR::LabelInstr *labelReturnUndefined = IR::LabelInstr::New(Js::OpCode::Label, func, true); if (isInlinee) { actualParamOpnd = IR::IntConstOpnd::New(ldElem->m_func->actualCount - 1, TyInt32, func); @@ -21790,7 +22217,7 @@ Lowerer::GenerateFastArgumentsLdElemI(IR::Instr* ldElem, IR::LabelInstr *labelFa } else { - //Load valueOpnd from the index + //Load valueOpnd from the index, note this operation includes a bail-out for non-integer indices valueOpnd = m_lowererMD.LoadNonnegativeIndex( indexOpnd, @@ -21802,8 +22229,8 @@ Lowerer::GenerateFastArgumentsLdElemI(IR::Instr* ldElem, IR::LabelInstr *labelFa true #endif ), - labelCreateHeapArgs, - labelCreateHeapArgs, + labelReturnUndefined, + labelReturnUndefined, ldElem); } @@ -21811,13 +22238,13 @@ Lowerer::GenerateFastArgumentsLdElemI(IR::Instr* ldElem, IR::LabelInstr *labelFa { if (!hasIntConstIndex) { - //Runtime check if to make sure length is within the arguments.length range. - GenerateCheckForArgumentsLength(ldElem, labelCreateHeapArgs, valueOpnd, actualParamOpnd, Js::OpCode::BrGe_A); + //Runtime check to make sure length is within the arguments.length range. + GenerateCheckForArgumentsLength(ldElem, labelReturnUndefined, valueOpnd, actualParamOpnd, Js::OpCode::BrGe_A); } } else { - GenerateCheckForArgumentsLength(ldElem, labelCreateHeapArgs, actualParamOpnd, valueOpnd, Js::OpCode::BrLe_A); + GenerateCheckForArgumentsLength(ldElem, labelReturnUndefined, actualParamOpnd, valueOpnd, Js::OpCode::BrLe_A); } IR::Opnd *argIndirOpnd = nullptr; @@ -21831,9 +22258,16 @@ Lowerer::GenerateFastArgumentsLdElemI(IR::Instr* ldElem, IR::LabelInstr *labelFa } Lowerer::InsertMove(ldElem->GetDst(), argIndirOpnd, ldElem); + // JMP $done + InsertBranch(Js::OpCode::Br, labelFallThru, ldElem); + // if load is outside of range at runtime return false + ldElem->InsertBefore(labelReturnUndefined); + IR::Opnd *undef = LoadLibraryValueOpnd(ldElem, LibraryValue::ValueUndefined); + Lowerer::InsertMove(ldElem->GetDst(), undef, ldElem); // JMP $done InsertBranch(Js::OpCode::Br, labelFallThru, ldElem); + // $labelCreateHeapArgs: ldElem->InsertBefore(labelCreateHeapArgs); emittedFastPath = true; @@ -21879,7 +22313,7 @@ Lowerer::GenerateFastArgumentsLdLen(IR::Instr *ldLen, IR::LabelInstr* labelFallT // JMP $fallthrough //$helper: - Assert(ldLen->DoStackArgsOpt(this->m_func)); + Assert(ldLen->DoStackArgsOpt()); if(ldLen->m_func->IsInlinee()) { @@ -21926,7 +22360,15 @@ Lowerer::FinalLower() { this->m_lowererMD.FinalLower(); - // ensure that the StartLabel and EndLabel are inserted + // We check if there are any lazy bailouts in + // LowererMD::FinalLower, so only insert the thunk + // if needed + if (this->m_func->HasLazyBailOut()) + { + this->InsertLazyBailOutThunk(); + } + + // Ensure that the StartLabel and EndLabel are inserted // before the prolog and after the epilog respectively IR::LabelInstr * startLabel = m_func->GetFuncStartLabel(); if (startLabel != nullptr) @@ -21941,6 +22383,112 @@ Lowerer::FinalLower() } } +void +Lowerer::InsertLazyBailOutThunk() +{ +#if defined(_M_IX86) || defined(_M_X64) + if (!this->m_func->IsTopFunc()) + { + return; + } + + Assert(this->m_func->GetLazyBailOutRecordSlot() != nullptr); + + IR::Instr *tailInstr = this->m_func->m_tailInstr; + + // Label (LazyBailOutThunk): + IR::LabelInstr *lazyBailOutLabel = IR::LabelInstr::New(Js::OpCode::LazyBailOutThunkLabel, this->m_func, true /* isOpHelper */); + lazyBailOutLabel->m_hasNonBranchRef = true; // Make sure that this label isn't removed + LABELNAMESET(lazyBailOutLabel, "LazyBailOutThunk"); + tailInstr->InsertBefore(lazyBailOutLabel); + +#ifdef _M_X64 + // 1. Save registers used for parameters, and rax, if necessary, into the shadow space allocated for register parameters: + // mov [rsp + 16], RegArg1 (if branchConditionOpnd) + // mov [rsp + 8], RegArg0 + // mov [rsp], rax + extern const IRType RegTypes[RegNumCount]; + const RegNum regs[3] = { RegRAX, RegArg0, RegArg1 }; + for (int i = 2; i >= 0; i--) + { + RegNum reg = regs[i]; + const IRType regType = RegTypes[reg]; + Lowerer::InsertMove( + IR::SymOpnd::New(this->m_func->m_symTable->GetArgSlotSym(static_cast(i + 1)), regType, this->m_func), + IR::RegOpnd::New(nullptr, reg, regType, this->m_func), + tailInstr + ); + } +#endif + + // 2. Always enable implicit call flag + // If StFld/StElem instructions have both LazyBailOut and BailOnImplicitCallPreop and the operation turns out to not + // be an implicit call, at that point, we have already disabled the implicit calls flag. We would then do lazy bailout + // and not go back to the remaining code. Therefore, we need to re-enable implicit calls again in the thunk. + IR::Opnd *disableImplicitCallFlagAddress = this->m_lowererMD.GenerateMemRef( + this->m_func->GetThreadContextInfo()->GetDisableImplicitFlagsAddr(), + TyInt8, + tailInstr /* insertBeforeInstr */ + ); + +#ifdef _M_X64 + // On x64, we might decide to load the address of implicit flag to a register, + // but since we are in Lowerer (past RegAlloc), all the operands won't have any + // registers assigned to them. We force them to be rcx (because they are going + // to be replaced anyway). + // TODO: This hack doesn't work with ARM/ARM64 + // Will need to revisit this if we decide to do lazy bailout on those platforms + IR::Instr *moveInstr = Lowerer::InsertMove( + disableImplicitCallFlagAddress, + IR::IntConstOpnd::New(DisableImplicitNoFlag, TyInt8, this->m_func, true), + tailInstr /* insertBeforeInstr */ + ); + + if (moveInstr->GetDst()->IsIndirOpnd()) + { + moveInstr->GetDst()->AsIndirOpnd()->GetBaseOpnd()->AsRegOpnd()->SetReg(RegArg0); + } + + if (moveInstr->m_prev->GetDst()->IsRegOpnd()) + { + moveInstr->m_prev->GetDst()->AsRegOpnd()->SetReg(RegArg0); + } + +#else + Lowerer::InsertMove( + disableImplicitCallFlagAddress, + IR::IntConstOpnd::New(DisableImplicitNoFlag, TyInt8, this->m_func, true), + tailInstr /* insertBeforeInstr */ + ); +#endif + +#ifdef _M_X64 + // 3. mov rcx, [rbp + offset] ; for bailout record + IR::RegOpnd *arg0 = IR::RegOpnd::New(nullptr, RegArg0, TyMachPtr, this->m_func); + IR::SymOpnd *bailOutRecordAddr = IR::SymOpnd::New(this->m_func->GetLazyBailOutRecordSlot(), TyMachPtr, this->m_func); + Lowerer::InsertMove(arg0, bailOutRecordAddr, tailInstr, false /* generateWriteBarrier */); +#else + // 3. Put the BailOutRecord on the stack for x86 + IR::Instr *const newInstr = IR::Instr::New(Js::OpCode::PUSH, this->m_func); + IR::SymOpnd *bailOutRecordAddr = IR::SymOpnd::New(this->m_func->GetLazyBailOutRecordSlot(), TyMachPtr, this->m_func); + newInstr->SetSrc1(bailOutRecordAddr); + tailInstr->InsertBefore(newInstr); +#endif + + // 4. call SaveAllRegistersAndBailOut + IR::Instr *callInstr = IR::Instr::New(Js::OpCode::Call, this->m_func); + callInstr->SetSrc1(IR::HelperCallOpnd::New(IR::HelperSaveAllRegistersAndBailOut, this->m_func)); + tailInstr->InsertBefore(callInstr); + m_lowererMD.LowerCall(callInstr, 0); + + // 5. jmp to function's epilog + IR::LabelInstr *exitLabel = this->m_func->m_exitInstr->GetPrevLabelInstr(); + IR::BranchInstr *branchInstr = IR::BranchInstr::New(Js::OpCode::JMP, exitLabel, this->m_func); + tailInstr->InsertBefore(branchInstr); + +#endif +} + void Lowerer::EHBailoutPatchUp() { @@ -22080,7 +22628,7 @@ Lowerer::GenerateFastLdFld(IR::Instr * const instrLdFld, IR::JnHelperMethod help IR::Opnd * opndSrc = instrLdFld->GetSrc1(); AssertMsg(opndSrc->IsSymOpnd() && opndSrc->AsSymOpnd()->IsPropertySymOpnd() && opndSrc->AsSymOpnd()->m_sym->IsPropertySym(), "Expected PropertySym as src of LdFld"); - Assert(!instrLdFld->DoStackArgsOpt(this->m_func)); + Assert(!instrLdFld->DoStackArgsOpt()); IR::PropertySymOpnd * propertySymOpnd = opndSrc->AsPropertySymOpnd(); PropertySym * propertySym = propertySymOpnd->m_sym->AsPropertySym(); @@ -22787,69 +23335,6 @@ Lowerer::GenerateLdThisCheck(IR::Instr * instr) return true; } -// -// TEST src, Js::AtomTag -// JNE $done -// MOV typeReg, objectSrc + offsetof(RecyclableObject::type) -// CMP [typeReg + offsetof(Type::typeid)], TypeIds_ActivationObject -// JEQ $helper -// $done: -// MOV dst, src -// JMP $fallthru -// helper: -// MOV dst, undefined -// $fallthru: -bool -Lowerer::GenerateLdThisStrict(IR::Instr* instr) -{ - IR::RegOpnd * src1 = instr->GetSrc1()->AsRegOpnd(); - IR::RegOpnd * typeReg = IR::RegOpnd::New(TyMachReg, this->m_func); - IR::LabelInstr * done = IR::LabelInstr::New(Js::OpCode::Label, m_func); - IR::LabelInstr * fallthru = IR::LabelInstr::New(Js::OpCode::Label, m_func); - IR::LabelInstr * helper = IR::LabelInstr::New(Js::OpCode::Label, m_func, /*helper*/true); - - bool assign = instr->GetDst() && !instr->GetDst()->IsEqual(src1); - if (!src1->IsNotTaggedValue()) - { - // TEST src1, Js::AtomTag - // JNE $done - this->m_lowererMD.GenerateObjectTest(src1, instr, assign ? done : fallthru); - } - - IR::IndirOpnd * indirOpnd = IR::IndirOpnd::New(src1, Js::RecyclableObject::GetOffsetOfType(), TyMachReg, this->m_func); - Lowerer::InsertMove(typeReg, indirOpnd, instr); - - IR::IndirOpnd * typeID = IR::IndirOpnd::New(typeReg, Js::Type::GetOffsetOfTypeId(), TyInt32, this->m_func); - IR::Opnd * activationObject = IR::IntConstOpnd::New(Js::TypeIds_ActivationObject, TyMachReg, this->m_func); - Lowerer::InsertCompare(typeID, activationObject, instr); - - // JEQ $helper - Lowerer::InsertBranch(Js::OpCode::BrEq_A, helper, instr); - - if (assign) - { - // $done: - instr->InsertBefore(done); - - // MOV dst, src - Lowerer::InsertMove(instr->GetDst(), src1, instr); - } - - // JMP $fallthru - Lowerer::InsertBranch(Js::OpCode::Br, fallthru, instr); - - instr->InsertBefore(helper); - if (instr->GetDst()) - { - // MOV dst, undefined - Lowerer::InsertMove(instr->GetDst(), LoadLibraryValueOpnd(instr, LibraryValue::ValueUndefined), instr); - } - // $fallthru: - instr->InsertAfter(fallthru); - - return true; -} - // given object instanceof function, functionReg is a register with function, // objectReg is a register with instance and inlineCache is an InstIsInlineCache. // We want to generate: @@ -23419,6 +23904,112 @@ bool Lowerer::GenerateFastEqBoolInt(IR::Instr * instr, bool *pNeedHelper, bool i return true; } +// Generate fast path for StrictEquals when one of the source have a definite valuetype +bool Lowerer::GenerateFastBrOrCmEqDefinite(IR::Instr * instr, IR::JnHelperMethod helperMethod, bool *pNeedHelper, bool isBranch, bool isInHelper) +{ + IR::Opnd *src1 = instr->GetSrc1(); + IR::Opnd *src2 = instr->GetSrc2(); + + if (!src1->GetValueType().IsDefinite() && !src2->GetValueType().IsDefinite()) + { + return false; + } + if (src1->IsEqual(src2)) + { + return false; + } + if (src1->GetValueType().IsDefinite() && src2->GetValueType().IsDefinite()) + { + if (src1->IsTaggedValue() || src2->IsTaggedValue()) + { + return true; + } + } + + IR::LabelInstr * labelBranchSuccess = nullptr; + IR::LabelInstr * labelBranchFailure = nullptr; + IR::LabelInstr * labelFallThrough = instr->GetOrCreateContinueLabel(); + IR::LabelInstr * labelHelper = IR::LabelInstr::New(Js::OpCode::Label, this->m_func, isInHelper); + + LibraryValue successValueType = ValueInvalid; + LibraryValue failureValueType = ValueInvalid; + + IR::Opnd * definiteSrc = src1->GetValueType().IsDefinite() ? src1 : src2; + IR::Opnd * likelySrc = src1->GetValueType().IsDefinite() ? src2 : src1; + + bool isEqual = !instr->IsNeq(); + + if (!isBranch) + { + labelBranchSuccess = IR::LabelInstr::New(Js::OpCode::Label, this->m_func, false); + labelBranchFailure = IR::LabelInstr::New(Js::OpCode::Label, this->m_func, false); + successValueType = isEqual ? LibraryValue::ValueTrue : LibraryValue::ValueFalse; + failureValueType = isEqual ? LibraryValue::ValueFalse : LibraryValue::ValueTrue; + } + else + { + labelBranchSuccess = isEqual ? instr->AsBranchInstr()->GetTarget() : labelFallThrough; + labelBranchFailure = isEqual ? labelFallThrough : instr->AsBranchInstr()->GetTarget(); + } + + Assert(likelySrc->IsRegOpnd()); + + if (definiteSrc->GetValueType().IsAnyArray() || definiteSrc->GetValueType().IsSymbol() || definiteSrc->GetValueType().IsBoolean() || definiteSrc->GetValueType().IsPrimitiveOrObject()) + { + InsertCompareBranch(src1, src2, Js::OpCode::BrEq_A, labelBranchSuccess, instr); + IR::BranchInstr * branch = IR::BranchInstr::New(LowererMD::MDUncondBranchOpcode, labelBranchFailure, this->m_func); + instr->InsertBefore(branch); + *pNeedHelper = false; + } + else if (definiteSrc->GetValueType().IsObject() && !CONFIG_FLAG(ESBigInt)) + { + InsertCompareBranch(src1, src2, Js::OpCode::BrEq_A, labelBranchSuccess, instr); + + if (!likelySrc->GetValueType().IsDefinite()) + { + m_lowererMD.GenerateObjectTest(likelySrc->AsRegOpnd(), instr, labelBranchFailure); + IR::RegOpnd * likelyTypeReg = IR::RegOpnd::New(TyMachReg, this->m_func); + IR::IndirOpnd * likelyType = IR::IndirOpnd::New(likelySrc->AsRegOpnd(), Js::RecyclableObject::GetOffsetOfType(), TyMachReg, this->m_func); + Lowerer::InsertMove(likelyTypeReg, likelyType, instr); + IR::Opnd *likelyFlags = IR::IndirOpnd::New(likelyTypeReg, Js::Type::GetOffsetOfFlags(), TyInt8, this->m_func); + InsertTestBranch(likelyFlags, IR::IntConstOpnd::New(TypeFlagMask_EngineExternal, TyInt8, this->m_func), Js::OpCode::BrNeq_A, labelHelper, instr); + } + else + { + *pNeedHelper = false; + } + + IR::BranchInstr * branch = IR::BranchInstr::New(LowererMD::MDUncondBranchOpcode, labelBranchFailure, this->m_func); + instr->InsertBefore(branch); + } + else if (definiteSrc->IsTaggedInt()) + { + InsertCompareBranch(src1, src2, Js::OpCode::BrEq_A, labelBranchSuccess, instr); + IR::BranchInstr * branch = IR::BranchInstr::New(LowererMD::MDUncondBranchOpcode, labelHelper, this->m_func); + instr->InsertBefore(branch); + } + else + { + return true; + } + + if (!isBranch) + { + instr->InsertBefore(labelBranchSuccess); + InsertMove(instr->GetDst(), LoadLibraryValueOpnd(instr, successValueType), instr); + InsertBranch(Js::OpCode::Br, labelFallThrough, instr); + + instr->InsertBefore(labelBranchFailure); + InsertMove(instr->GetDst(), LoadLibraryValueOpnd(instr, failureValueType), instr); + InsertBranch(Js::OpCode::Br, labelFallThrough, instr); + } + + instr->InsertBefore(labelHelper); + + return true; +} + +// Generate fast path for Strict Equals when both sources are likely boolean/likely object/likely symbol bool Lowerer::GenerateFastBrEqLikely(IR::BranchInstr * instrBranch, bool *pNeedHelper, bool isInHelper) { IR::Opnd *src1 = instrBranch->GetSrc1(); @@ -23651,8 +24242,8 @@ Lowerer::GenerateFastBrOrCmString(IR::Instr* instr) !srcReg2 || srcReg1->IsTaggedInt() || srcReg2->IsTaggedInt() || - !srcReg1->GetValueType().HasHadStringTag() || - !srcReg2->GetValueType().HasHadStringTag()) + (!srcReg1->GetValueType().HasHadStringTag() && !srcReg2->GetValueType().IsString()) || + (!srcReg2->GetValueType().HasHadStringTag() && !srcReg1->GetValueType().IsString())) { return false; } @@ -23783,8 +24374,8 @@ Lowerer::GenerateFastStringCheck(IR::Instr *instr, IR::RegOpnd *srcReg1, IR::Reg // generate object test, if not equal jump to $helper // compare type check to string, if not jump to $helper // - // if strict mode generate string test as above for src1 and jump to $failure if failed any time - // else if not strict generate string test as above for src1 and jump to $helper if failed any time + // if strict mode generate string test as above for src2 and jump to $failure if failed any time + // else if not strict generate string test as above for src2 and jump to $helper if failed any time // // Compare length of src1 and src2 if not equal goto $failure // @@ -23868,6 +24459,13 @@ Lowerer::GenerateFastStringCheck(IR::Instr *instr, IR::RegOpnd *srcReg1, IR::Reg GenerateStringTest(srcReg2, instrInsert, labelHelper); } + if (isStrict && (srcReg1->m_sym->m_isStrEmpty || srcReg2->m_sym->m_isStrEmpty)) + { + IR::RegOpnd* otherOpnd = srcReg1->m_sym->m_isStrEmpty ? srcReg2 : srcReg1; + InsertCompareBranch(IR::IndirOpnd::New(otherOpnd, Js::JavascriptString::GetOffsetOfcharLength(), TyUint32, m_func), IR::IntConstOpnd::New(0, TyUint32, this->m_func, true), Js::OpCode::BrNeq_A, labelBranchFail, instrInsert); + return true; + } + // MOV s3, [srcReg1,offset(m_charLength)] // CMP [srcReg2,offset(m_charLength)], s3 // JNE $branchfail @@ -24390,113 +24988,122 @@ Lowerer::TryGenerateFastBrOrCmTypeOf(IR::Instr *instr, IR::Instr **prev, bool is if (typeOfDst && instrSrc1 && instrSrc2) { - IR::RegOpnd *typeOpnd = nullptr; - IR::RegOpnd *idOpnd = nullptr; - if (instrSrc1->m_sym == typeOfDst->m_sym) - { - typeOpnd = instrSrc1; - idOpnd = instrSrc2; - } - else if (instrSrc2->m_sym == typeOfDst->m_sym) - { - typeOpnd = instrSrc2; - idOpnd = instrSrc1; - } - else + do { - // Neither source turned out to be the typeOpnd - return false; - } + IR::RegOpnd *typeOpnd = nullptr; + IR::RegOpnd *idOpnd = nullptr; + if (instrSrc1->m_sym == typeOfDst->m_sym) + { + typeOpnd = instrSrc1; + idOpnd = instrSrc2; + } + else if (instrSrc2->m_sym == typeOfDst->m_sym) + { + typeOpnd = instrSrc2; + idOpnd = instrSrc1; + } + else + { + // Neither source turned out to be the typeOpnd + break; + } - if (!typeOpnd->m_isTempLastUse) - { - return false; - } + if (!typeOpnd->m_isTempLastUse) + { + break; + } - if (!(idOpnd->m_sym->m_isSingleDef && idOpnd->m_sym->m_isStrConst)) - { - return false; - } + if (!(idOpnd->m_sym->m_isSingleDef && idOpnd->m_sym->m_isStrConst)) + { + return false; + } - // The second argument to [Cm|Br]TypeOf is the typeid. - IR::IntConstOpnd *typeIdOpnd = nullptr; + // The second argument to [Cm|Br]TypeOf is the typeid. + IR::IntConstOpnd *typeIdOpnd = nullptr; - Assert(idOpnd->m_sym->m_isSingleDef); - Assert(idOpnd->m_sym->m_instrDef->GetSrc1()->IsAddrOpnd()); + Assert(idOpnd->m_sym->m_isSingleDef); + Assert(idOpnd->m_sym->m_instrDef->GetSrc1()->IsAddrOpnd()); - // We can't optimize non-javascript type strings. - JITJavascriptString *typeNameJsString = JITJavascriptString::FromVar(idOpnd->m_sym->m_instrDef->GetSrc1()->AsAddrOpnd()->m_localAddress); - const char16 *typeName = typeNameJsString->GetString(); + // We can't optimize non-javascript type strings. + JITJavascriptString *typeNameJsString = JITJavascriptString::FromVar(idOpnd->m_sym->m_instrDef->GetSrc1()->AsAddrOpnd()->m_localAddress); + const char16 *typeName = typeNameJsString->GetString(); - Js::InternalString typeNameString(typeName, typeNameJsString->GetLength()); - if (Js::InternalStringComparer::Equals(typeNameString, Js::Type::UndefinedTypeNameString)) - { - typeIdOpnd = IR::IntConstOpnd::New(Js::TypeIds_Undefined, TyInt32, instr->m_func); - } - else if (Js::InternalStringComparer::Equals(typeNameString, Js::Type::ObjectTypeNameString)) - { - typeIdOpnd = IR::IntConstOpnd::New(Js::TypeIds_Object, TyInt32, instr->m_func); - } - else if (Js::InternalStringComparer::Equals(typeNameString, Js::Type::BooleanTypeNameString)) - { - typeIdOpnd = IR::IntConstOpnd::New(Js::TypeIds_Boolean, TyInt32, instr->m_func); - } - else if (Js::InternalStringComparer::Equals(typeNameString, Js::Type::NumberTypeNameString)) - { - typeIdOpnd = IR::IntConstOpnd::New(Js::TypeIds_Number, TyInt32, instr->m_func); - } - else if (Js::InternalStringComparer::Equals(typeNameString, Js::Type::StringTypeNameString)) - { - typeIdOpnd = IR::IntConstOpnd::New(Js::TypeIds_String, TyInt32, instr->m_func); - } - else if (Js::InternalStringComparer::Equals(typeNameString, Js::Type::FunctionTypeNameString)) - { - typeIdOpnd = IR::IntConstOpnd::New(Js::TypeIds_Function, TyInt32, instr->m_func); - } - else - { - return false; - } + Js::InternalString typeNameString(typeName, typeNameJsString->GetLength()); + if (Js::InternalStringComparer::Equals(typeNameString, Js::Type::UndefinedTypeNameString)) + { + typeIdOpnd = IR::IntConstOpnd::New(Js::TypeIds_Undefined, TyInt32, instr->m_func); + } + else if (Js::InternalStringComparer::Equals(typeNameString, Js::Type::ObjectTypeNameString)) + { + typeIdOpnd = IR::IntConstOpnd::New(Js::TypeIds_Object, TyInt32, instr->m_func); + } + else if (Js::InternalStringComparer::Equals(typeNameString, Js::Type::BooleanTypeNameString)) + { + typeIdOpnd = IR::IntConstOpnd::New(Js::TypeIds_Boolean, TyInt32, instr->m_func); + } + else if (Js::InternalStringComparer::Equals(typeNameString, Js::Type::NumberTypeNameString)) + { + typeIdOpnd = IR::IntConstOpnd::New(Js::TypeIds_Number, TyInt32, instr->m_func); + } + else if (Js::InternalStringComparer::Equals(typeNameString, Js::Type::StringTypeNameString)) + { + typeIdOpnd = IR::IntConstOpnd::New(Js::TypeIds_String, TyInt32, instr->m_func); + } + else if (Js::InternalStringComparer::Equals(typeNameString, Js::Type::FunctionTypeNameString)) + { + typeIdOpnd = IR::IntConstOpnd::New(Js::TypeIds_Function, TyInt32, instr->m_func); + } + else + { + return false; + } - if (skippedLoads) - { - //validate none of dst of Ld_A overlaps with typeof src or dst - IR::Opnd* typeOfSrc = typeOf->GetSrc1(); - instrLd = typeOf->GetNextRealInstr(); - while (instrLd != instr) + if (skippedLoads) { - if (instrLd->GetDst()->IsEqual(typeOfDst) || instrLd->GetDst()->IsEqual(typeOfSrc)) + //validate none of dst of Ld_A overlaps with typeof src or dst + IR::Opnd* typeOfSrc = typeOf->GetSrc1(); + instrLd = typeOf->GetNextRealInstr(); + while (instrLd != instr) { - return false; + if (instrLd->GetDst()->IsEqual(typeOfDst) || instrLd->GetDst()->IsEqual(typeOfSrc)) + { + return false; + } + instrLd = instrLd->GetNextRealInstr(); } - instrLd = instrLd->GetNextRealInstr(); + typeOf->Unlink(); + instr->InsertBefore(typeOf); + } + // The first argument to [Cm|Br]TypeOf is the first arg to the TypeOf instruction. + IR::Opnd *objectOpnd = typeOf->GetSrc1(); + Assert(objectOpnd->IsRegOpnd()); + + // Now emit this instruction and remove the ldstr and typeOf. + *prev = typeOf->m_prev; + *pfNoLower = false; + if (instr->IsBranchInstr()) + { + GenerateFastBrTypeOf(instr, objectOpnd->AsRegOpnd(), typeIdOpnd, typeOf, pfNoLower, isNeqOp); + } + else + { + GenerateFastCmTypeOf(instr, objectOpnd->AsRegOpnd(), typeIdOpnd, typeOf, pfNoLower, isNeqOp); } - typeOf->Unlink(); - instr->InsertBefore(typeOf); - } - // The first argument to [Cm|Br]TypeOf is the first arg to the TypeOf instruction. - IR::Opnd *objectOpnd = typeOf->GetSrc1(); - Assert(objectOpnd->IsRegOpnd()); - - // Now emit this instruction and remove the ldstr and typeOf. - *prev = typeOf->m_prev; - *pfNoLower = false; - if (instr->IsBranchInstr()) - { - GenerateFastBrTypeOf(instr, objectOpnd->AsRegOpnd(), typeIdOpnd, typeOf, pfNoLower, isNeqOp); - } - else - { - GenerateFastCmTypeOf(instr, objectOpnd->AsRegOpnd(), typeIdOpnd, typeOf, pfNoLower, isNeqOp); - } - return true; + return true; + } while (false); } } if (instrSrc1 && instrSrc1->GetStackSym()->IsSingleDef() && instrSrc2 && instrSrc2->GetStackSym()->IsSingleDef() && - instrSrc1->GetStackSym()->GetInstrDef()->m_opcode == Js::OpCode::Typeof && - instrSrc2->GetStackSym()->GetInstrDef()->m_opcode == Js::OpCode::Typeof) + ( + ((instrSrc1->GetStackSym()->GetInstrDef()->m_opcode == Js::OpCode::Typeof) && + ((instrSrc2->GetStackSym()->GetInstrDef()->m_opcode == Js::OpCode::Typeof) || instrSrc2->GetStackSym()->GetIsStrConst())) + || + ((instrSrc2->GetStackSym()->GetInstrDef()->m_opcode == Js::OpCode::Typeof) && + ((instrSrc1->GetStackSym()->GetInstrDef()->m_opcode == Js::OpCode::Typeof) || instrSrc1->GetStackSym()->GetIsStrConst())) + ) + ) { *pfNoLower = true; if (instr->IsBranchInstr()) @@ -24913,7 +25520,7 @@ void Lowerer::GenerateJavascriptOperatorsIsConstructorGotoElse(IR::Instr *instrInsert, IR::RegOpnd *instanceRegOpnd, IR::LabelInstr *labelReturnTrue, IR::LabelInstr *labelReturnFalse) { // $ProxyLoop: - // // if (!RecyclableObject::Is(instance)) { goto $ReturnFalse }; // omitted: RecyclableObject::Is(instance) always true + // // if (!VarIs(instance)) { goto $ReturnFalse }; // omitted: VarIs(instance) always true // MOV s0, instance->type // MOV s1, s0->typeId // CMP s1, TypeIds_Proxy @@ -25049,34 +25656,59 @@ Lowerer::GenerateLdHomeObj(IR::Instr* instr) if (func->GetJITFunctionBody()->HasHomeObj()) { - IR::RegOpnd* funcObjHasInlineCachesOpnd = IR::RegOpnd::New(TyUint8, instr->m_func); - this->InsertMove(funcObjHasInlineCachesOpnd, IR::IndirOpnd::New(instanceRegOpnd, Js::ScriptFunction::GetOffsetOfHasInlineCaches(), TyUint8, instr->m_func), instr); + // Is this a generator function with home obj? + if (func->GetJITFunctionBody()->IsCoroutine()) + { + uint32 homeObjectOffset = Js::FunctionWithHomeObj::GetOffsetOfHomeObj(); - IR::BranchInstr* inlineFuncHomObjCompNameBr = InsertTestBranch(funcObjHasInlineCachesOpnd, funcObjHasInlineCachesOpnd, Js::OpCode::BrEq_A, scriptFuncLabel, instr); - InsertObjectPoison(instanceRegOpnd, inlineFuncHomObjCompNameBr, instr, false); + // Is this a generator function with home obj and computed name? + if (func->GetJITFunctionBody()->HasComputedName()) + { + homeObjectOffset = Js::FunctionWithComputedName>::GetOffsetOfHomeObj(); + } - if (func->GetJITFunctionBody()->HasComputedName()) - { - // Is this a function with inline cache, home obj and computed name? { - IR::IndirOpnd* indirInlineFuncHomeObjCompNameOpnd = IR::IndirOpnd::New(instanceRegOpnd, Js::FunctionWithComputedName>::GetOffsetOfHomeObj(), TyMachPtr, func); - Lowerer::InsertMove(instanceRegOpnd, indirInlineFuncHomeObjCompNameOpnd, instr); - InsertBranch(Js::OpCode::Br, testLabel, instr); + IR::IndirOpnd* indirOpnd = IR::IndirOpnd::New(instanceRegOpnd, homeObjectOffset, TyMachPtr, func); + Lowerer::InsertMove(instanceRegOpnd, indirOpnd, instr); } + + InsertBranch(Js::OpCode::Br, testLabel, instr); } else { - // Is this a function with inline cache and home obj? + IR::RegOpnd* funcObjHasInlineCachesOpnd = IR::RegOpnd::New(TyUint8, instr->m_func); + this->InsertMove(funcObjHasInlineCachesOpnd, IR::IndirOpnd::New(instanceRegOpnd, Js::ScriptFunction::GetOffsetOfHasInlineCaches(), TyUint8, instr->m_func), instr); + + IR::BranchInstr* inlineFuncHomObjCompNameBr = InsertTestBranch(funcObjHasInlineCachesOpnd, funcObjHasInlineCachesOpnd, Js::OpCode::BrEq_A, scriptFuncLabel, instr); + InsertObjectPoison(instanceRegOpnd, inlineFuncHomObjCompNameBr, instr, false); + + if (func->GetJITFunctionBody()->HasComputedName()) + { + // Is this a function with inline cache, home obj and computed name? + { + IR::IndirOpnd* indirInlineFuncHomeObjCompNameOpnd = IR::IndirOpnd::New(instanceRegOpnd, Js::FunctionWithComputedName>::GetOffsetOfHomeObj(), TyMachPtr, func); + Lowerer::InsertMove(instanceRegOpnd, indirInlineFuncHomeObjCompNameOpnd, instr); + InsertBranch(Js::OpCode::Br, testLabel, instr); + } + } + else { - IR::IndirOpnd* indirInlineFuncHomeObjOpnd = IR::IndirOpnd::New(instanceRegOpnd, Js::FunctionWithHomeObj::GetOffsetOfHomeObj(), TyMachPtr, func); - Lowerer::InsertMove(instanceRegOpnd, indirInlineFuncHomeObjOpnd, instr); - InsertBranch(Js::OpCode::Br, testLabel, instr); + // Is this a function with inline cache and home obj? + { + IR::IndirOpnd* indirInlineFuncHomeObjOpnd = IR::IndirOpnd::New(instanceRegOpnd, Js::FunctionWithHomeObj::GetOffsetOfHomeObj(), TyMachPtr, func); + Lowerer::InsertMove(instanceRegOpnd, indirInlineFuncHomeObjOpnd, instr); + InsertBranch(Js::OpCode::Br, testLabel, instr); + } } } instr->InsertBefore(scriptFuncLabel); - IR::IndirOpnd *indirOpnd = IR::IndirOpnd::New(instanceRegOpnd, Js::ScriptFunctionWithHomeObj::GetOffsetOfHomeObj(), TyMachPtr, func); - Lowerer::InsertMove(instanceRegOpnd, indirOpnd, instr); + + // All other cases + { + IR::IndirOpnd* indirOpnd = IR::IndirOpnd::New(instanceRegOpnd, Js::ScriptFunctionWithHomeObj::GetOffsetOfHomeObj(), TyMachPtr, func); + Lowerer::InsertMove(instanceRegOpnd, indirOpnd, instr); + } } else { @@ -25101,7 +25733,7 @@ Lowerer::GenerateLdHomeObjProto(IR::Instr* instr) // TEST instance, instance // JZ $Done // - // if (!RecyclableObject::Is(instance)) goto $Done + // if (!VarIs(instance)) goto $Done // MOV type, [instance+Offset(type)] // MOV typeId, [type+Offset(typeId)] // CMP typeId, TypeIds_Null @@ -25116,7 +25748,7 @@ Lowerer::GenerateLdHomeObjProto(IR::Instr* instr) // instance = ((RecyclableObject*)instance)->GetPrototype(); // if (instance == nullptr) goto $Done; // - // if (!RecyclableObject::Is(instance)) goto $Done + // if (!VarIs(instance)) goto $Done // // MOV dst, instance // $Done: @@ -25358,31 +25990,54 @@ Lowerer::GetInlineCacheFromFuncObjectForRuntimeUse(IR::Instr * instr, IR::Proper } IR::Instr * -Lowerer::LowerInitClass(IR::Instr * instr) +Lowerer::LowerNewClassConstructor(IR::Instr * instr) { - // scriptContext - IR::Instr * prevInstr = LoadScriptContext(instr); + IR::Instr * instrPrev = instr->m_prev; - // extends - if (instr->GetSrc2() != nullptr) - { - IR::Opnd * extendsOpnd = instr->UnlinkSrc2(); - m_lowererMD.LoadHelperArgument(instr, extendsOpnd); - } - else - { - IR::AddrOpnd* extendsOpnd = IR::AddrOpnd::NewNull(this->m_func); - m_lowererMD.LoadHelperArgument(instr, extendsOpnd); - } + IR::RegOpnd * opndLink = instr->UnlinkSrc1()->AsRegOpnd(); + IR::Instr * instrDef = opndLink->m_sym->m_instrDef; + Assert(instrDef && instrDef->m_opcode == Js::OpCode::ExtendArg_A); - // constructor - IR::Opnd * ctorOpnd = instr->UnlinkSrc1(); - m_lowererMD.LoadHelperArgument(instr, ctorOpnd); + IR::RegOpnd * opndEnvironment = instrDef->GetSrc1()->AsRegOpnd(); + opndLink = instrDef->GetSrc2()->AsRegOpnd(); + instrDef = opndLink->m_sym->m_instrDef; + Assert(instrDef && instrDef->m_opcode == Js::OpCode::ExtendArg_A); - // call - m_lowererMD.ChangeToHelperCall(instr, IR::HelperOP_InitClass); + IR::AddrOpnd * opndFunctionBodySlot = instrDef->GetSrc1()->AsAddrOpnd(); + opndLink = instrDef->GetSrc2()->AsRegOpnd(); + instrDef = opndLink->m_sym->m_instrDef; + Assert(instrDef && instrDef->m_opcode == Js::OpCode::ExtendArg_A); - return prevInstr; + IR::RegOpnd * opndProto = instrDef->GetSrc1()->AsRegOpnd(); + opndLink = instrDef->GetSrc2()->AsRegOpnd(); + instrDef = opndLink->m_sym->m_instrDef; + Assert(instrDef && instrDef->m_opcode == Js::OpCode::ExtendArg_A); + + IR::Opnd * opndCtorParent = instrDef->GetSrc1(); + + m_lowererMD.LoadHelperArgument(instr, opndCtorParent); + m_lowererMD.LoadHelperArgument(instr, opndProto); + m_lowererMD.LoadHelperArgument(instr, opndFunctionBodySlot); + m_lowererMD.LoadHelperArgument(instr, opndEnvironment); + + IR::RegOpnd * opndConstructor = instr->GetDst()->AsRegOpnd(); + IR::Instr * instrNext = instr->m_next; + + m_lowererMD.ChangeToHelperCall(instr, IR::HelperScrFunc_OP_NewClassConstructor); + + // Put constructor in proto's slot 0 + + IR::RegOpnd * opndAuxSlots = IR::RegOpnd::New(TyMachPtr, m_func); + InsertMove(opndAuxSlots, IR::IndirOpnd::New(opndProto, Js::DynamicObject::GetOffsetOfAuxSlots(), TyMachPtr, m_func, true), instrNext, false); + InsertMove(IR::IndirOpnd::New(opndAuxSlots, 0, TyMachPtr, m_func, true), opndConstructor, instrNext, false); + + // Put proto in constructor's slot 0 + + opndAuxSlots = IR::RegOpnd::New(TyMachPtr, m_func); + InsertMove(opndAuxSlots, IR::IndirOpnd::New(opndConstructor, Js::DynamicObject::GetOffsetOfAuxSlots(), TyMachPtr, m_func, true), instrNext, false); + InsertMove(IR::IndirOpnd::New(opndAuxSlots, 0, TyMachPtr, m_func, true), opndProto, instrNext, false); + + return instrPrev; } void @@ -25514,7 +26169,7 @@ Lowerer::LowerSetConcatStrMultiItem(IR::Instr * instr) } IR::RegOpnd * -Lowerer::GenerateGetImmutableOrScriptUnreferencedString(IR::RegOpnd * strOpnd, IR::Instr * insertBeforeInstr, IR::JnHelperMethod helperMethod, bool reloadDst) +Lowerer::GenerateGetImmutableOrScriptUnreferencedString(IR::RegOpnd * strOpnd, IR::Instr * insertBeforeInstr, IR::JnHelperMethod helperMethod, bool loweringCloneStr, bool reloadDst) { if (strOpnd->m_sym->m_isStrConst) { @@ -25530,6 +26185,16 @@ Lowerer::GenerateGetImmutableOrScriptUnreferencedString(IR::RegOpnd * strOpnd, I { this->m_lowererMD.GenerateObjectTest(strOpnd, insertBeforeInstr, doneLabel); } + + if (loweringCloneStr && func->IsLoopBody()) + { + // Check if strOpnd is NULL before the CloneStr. There could be cases where SimpleJit might have dead stored instructions corresponding to the definition/use of strOpnd. + // As a result during a bailout when we restore values from interpreter stack frame we may end up having strOpnd as nullptr. During FullJit we may not dead store the + // instructions defining/using strOpnd due to StSlot instructions added at the end of jitted loop body. As a result, when we bailout (BailOnSimpleJitToFullJitLoopBody) + // strOpnd could have a NULL value causing CloneStr to dereference a nullptr. + this->InsertCompareBranch(strOpnd, IR::AddrOpnd::New(nullptr, IR::AddrOpndKindDynamicMisc, this->m_func), Js::OpCode::BrEq_A, false /*isUnsigned*/, doneLabel, insertBeforeInstr); + } + // CMP [strOpnd], Js::CompoundString::`vtable' // JEQ $helper InsertCompareBranch( @@ -25906,8 +26571,6 @@ Lowerer::ValidOpcodeAfterLower(IR::Instr* instr, Func * func) case Js::OpCode::TryCatch: case Js::OpCode::TryFinally: case Js::OpCode::Catch: - case Js::OpCode::GeneratorResumeJumpTable: - case Js::OpCode::Break: #ifdef _M_X64 @@ -25932,7 +26595,7 @@ Lowerer::ValidOpcodeAfterLower(IR::Instr* instr, Func * func) case Js::OpCode::InlineeStart: case Js::OpCode::InlineeEnd: - return instr->m_func->m_hasInlineArgsOpt; + return instr->m_func->m_hasInlineArgsOpt || instr->m_func->GetParentFunc()->m_hasInlineArgsOpt; #ifdef _M_X64 case Js::OpCode::LdArgSize: case Js::OpCode::LdSpillSize: @@ -25943,6 +26606,17 @@ Lowerer::ValidOpcodeAfterLower(IR::Instr* instr, Func * func) Assert(!func->IsLoopBodyInTry()); Assert(func->HasTry() && func->DoOptimizeTry()); return func && !func->isPostFinalLower; //Lowered in FinalLower phase + +#ifdef ENABLE_DEBUG_CONFIG_OPTIONS + case Js::OpCode::GeneratorOutputBailInTraceLabel: +#endif + case Js::OpCode::GeneratorBailInLabel: + case Js::OpCode::GeneratorEpilogueFrameNullOutLabel: + case Js::OpCode::GeneratorEpilogueNoFrameNullOutLabel: + return func->GetJITFunctionBody()->IsCoroutine(); + + case Js::OpCode::LazyBailOutThunkLabel: + return func && func->HasLazyBailOut() && func->isPostFinalLower; //Lowered in FinalLower phase }; return false; @@ -25971,29 +26645,8 @@ void Lowerer::LowerProfiledBinaryOp(IR::JitProfilingInstr* instr, IR::JnHelperMe m_lowererMD.LowerCall(instr, 0); } -void Lowerer::GenerateNullOutGeneratorFrame(IR::Instr* insertInstr) -{ - // null out frame pointer on generator object to signal completion to JavascriptGenerator::CallGenerator - // s = MOV prm1 - // s[offset of JavascriptGenerator::frame] = MOV nullptr - StackSym *symSrc = StackSym::NewImplicitParamSym(3, m_func); - m_func->SetArgOffset(symSrc, LowererMD::GetFormalParamOffset() * MachPtr); - IR::SymOpnd *srcOpnd = IR::SymOpnd::New(symSrc, TyMachPtr, m_func); - IR::RegOpnd *dstOpnd = IR::RegOpnd::New(TyMachReg, m_func); - InsertMove(dstOpnd, srcOpnd, insertInstr); - - IR::IndirOpnd *indirOpnd = IR::IndirOpnd::New(dstOpnd, Js::JavascriptGenerator::GetFrameOffset(), TyMachPtr, m_func); - IR::AddrOpnd *addrOpnd = IR::AddrOpnd::NewNull(m_func); - InsertMove(indirOpnd, addrOpnd, insertInstr); -} - void Lowerer::LowerFunctionExit(IR::Instr* funcExit) { - if (m_func->GetJITFunctionBody()->IsCoroutine()) - { - GenerateNullOutGeneratorFrame(funcExit->m_prev); - } - if (!m_func->DoSimpleJitDynamicProfile()) { return; @@ -27362,10 +28015,10 @@ Lowerer::LowerTry(IR::Instr* instr, bool tryCatch) { if (this->m_func->hasBailout) { - this->EnsureBailoutReturnValueSym(); + m_func->EnsureBailoutReturnValueSym(); } - this->EnsureHasBailedOutSym(); - IR::SymOpnd * hasBailedOutOpnd = IR::SymOpnd::New(this->m_func->m_hasBailedOutSym, TyUint32, this->m_func); + m_func->EnsureHasBailedOutSym(); + IR::SymOpnd * hasBailedOutOpnd = IR::SymOpnd::New(this->m_func->GetHasBailedOutSym(), TyUint32, this->m_func); IR::Instr * setInstr = IR::Instr::New(LowererMD::GetStoreOp(TyUint32), hasBailedOutOpnd, IR::IntConstOpnd::New(0, TyUint32, this->m_func), this->m_func); instr->InsertBefore(setInstr); LowererMD::Legalize(setInstr); @@ -27414,26 +28067,6 @@ Lowerer::LowerLeave(IR::Instr * leaveInstr, IR::LabelInstr * targetInstr, bool f return instrPrev; } -void -Lowerer::EnsureBailoutReturnValueSym() -{ - if (this->m_func->m_bailoutReturnValueSym == nullptr) - { - this->m_func->m_bailoutReturnValueSym = StackSym::New(TyVar, this->m_func); - this->m_func->StackAllocate(this->m_func->m_bailoutReturnValueSym, sizeof(Js::Var)); - } -} - -void -Lowerer::EnsureHasBailedOutSym() -{ - if (this->m_func->m_hasBailedOutSym == nullptr) - { - this->m_func->m_hasBailedOutSym = StackSym::New(TyUint32, this->m_func); - this->m_func->StackAllocate(this->m_func->m_hasBailedOutSym, MachRegInt); - } -} - void Lowerer::InsertReturnThunkForRegion(Region* region, IR::LabelInstr* restoreLabel) { @@ -27511,7 +28144,7 @@ void Lowerer::SetHasBailedOut(IR::Instr * bailoutInstr) { Assert(this->m_func->isPostLayout); - IR::SymOpnd * hasBailedOutOpnd = IR::SymOpnd::New(this->m_func->m_hasBailedOutSym, TyUint32, this->m_func); + IR::SymOpnd * hasBailedOutOpnd = IR::SymOpnd::New(this->m_func->GetHasBailedOutSym(), TyUint32, this->m_func); IR::Instr * setInstr = IR::Instr::New(LowererMD::GetStoreOp(TyUint32), hasBailedOutOpnd, IR::IntConstOpnd::New(1, TyUint32, this->m_func), this->m_func); bailoutInstr->InsertBefore(setInstr); LowererMD::Legalize(setInstr); @@ -27561,7 +28194,7 @@ Lowerer::EmitSaveEHBailoutReturnValueAndJumpToRetThunk(IR::Instr * insertAfterIn // MOV bailoutReturnValueSym, eax // JMP $currentRegion->bailoutReturnThunkLabel - IR::SymOpnd * bailoutReturnValueSymOpnd = IR::SymOpnd::New(this->m_func->m_bailoutReturnValueSym, TyVar, this->m_func); + IR::SymOpnd * bailoutReturnValueSymOpnd = IR::SymOpnd::New(this->m_func->GetBailoutReturnValueSym(), TyVar, this->m_func); IR::RegOpnd *eaxOpnd = IR::RegOpnd::New(NULL, LowererMD::GetRegReturn(TyMachReg), TyMachReg, this->m_func); IR::Instr * movInstr = IR::Instr::New(LowererMD::GetStoreOp(TyVar), bailoutReturnValueSymOpnd, eaxOpnd, this->m_func); insertAfterInstr->InsertAfter(movInstr); @@ -27580,7 +28213,7 @@ Lowerer::EmitRestoreReturnValueFromEHBailout(IR::LabelInstr * restoreLabel, IR:: // MOV eax, bailoutReturnValueSym // $epilog: - IR::SymOpnd * bailoutReturnValueSymOpnd = IR::SymOpnd::New(this->m_func->m_bailoutReturnValueSym, TyVar, this->m_func); + IR::SymOpnd * bailoutReturnValueSymOpnd = IR::SymOpnd::New(this->m_func->GetBailoutReturnValueSym(), TyVar, this->m_func); IR::RegOpnd * eaxOpnd = IR::RegOpnd::New(NULL, LowererMD::GetRegReturn(TyMachReg), TyMachReg, this->m_func); IR::Instr * movInstr = IR::Instr::New(LowererMD::GetLoadOp(TyVar), eaxOpnd, bailoutReturnValueSymOpnd, this->m_func); @@ -27772,23 +28405,31 @@ Lowerer::LowerConvNum(IR::Instr *instrLoad, bool noMathFastPath) } IR::Opnd * -Lowerer::LoadSlotArrayWithCachedLocalType(IR::Instr * instrInsert, IR::PropertySymOpnd *propertySymOpnd, bool canReuseAuxSlotPtr) +Lowerer::LoadSlotArrayWithCachedLocalType(IR::Instr * instrInsert, IR::PropertySymOpnd *propertySymOpnd) { IR::RegOpnd *opndBase = propertySymOpnd->CreatePropertyOwnerOpnd(m_func); if (propertySymOpnd->UsesAuxSlot()) { // If we use the auxiliary slot array, load it and return it - if (canReuseAuxSlotPtr) + IR::RegOpnd * opndSlotArray; + if (propertySymOpnd->IsAuxSlotPtrSymAvailable() || propertySymOpnd->ProducesAuxSlotPtr()) { + // We want to reload and/or reuse the shared aux slot ptr sym StackSym * auxSlotPtrSym = propertySymOpnd->GetAuxSlotPtrSym(); - if (auxSlotPtrSym != nullptr) + Assert(auxSlotPtrSym != nullptr); + + opndSlotArray = IR::RegOpnd::New(auxSlotPtrSym, TyMachReg, this->m_func); + opndSlotArray->SetIsJITOptimizedReg(true); + if (!propertySymOpnd->ProducesAuxSlotPtr()) { - IR::RegOpnd * opndAuxSlotPtr = IR::RegOpnd::New(auxSlotPtrSym, TyMachReg, this->m_func); - opndAuxSlotPtr->SetIsJITOptimizedReg(true); - return opndAuxSlotPtr; + // No need to reload + return opndSlotArray; } } - IR::RegOpnd * opndSlotArray = IR::RegOpnd::New(TyMachReg, this->m_func); + else + { + opndSlotArray = IR::RegOpnd::New(TyMachReg, this->m_func); + } IR::Opnd *opndIndir = IR::IndirOpnd::New(opndBase, Js::DynamicObject::GetOffsetOfAuxSlots(), TyMachReg, this->m_func); Lowerer::InsertMove(opndSlotArray, opndIndir, instrInsert); @@ -28351,6 +28992,19 @@ Lowerer::AddBailoutToHelperCallInstr(IR::Instr * helperCallInstr, BailOutInfo * return helperCallInstr; } +void +Lowerer::GenerateAuxSlotPtrLoad(IR::PropertySymOpnd *propertySymOpnd, IR::Instr * instrInsert) +{ + StackSym * auxSlotPtrSym = propertySymOpnd->GetAuxSlotPtrSym(); + Assert(auxSlotPtrSym); + Func * func = instrInsert->m_func; + + IR::Opnd *opndIndir = IR::IndirOpnd::New(propertySymOpnd->CreatePropertyOwnerOpnd(func), Js::DynamicObject::GetOffsetOfAuxSlots(), TyMachReg, func); + IR::RegOpnd *regOpnd = IR::RegOpnd::New(auxSlotPtrSym, TyMachReg, func); + regOpnd->SetIsJITOptimizedReg(true); + InsertMove(regOpnd, opndIndir, instrInsert); +} + void Lowerer::InsertAndLegalize(IR::Instr * instr, IR::Instr* insertBeforeInstr) { @@ -28358,6 +29012,62 @@ Lowerer::InsertAndLegalize(IR::Instr * instr, IR::Instr* insertBeforeInstr) LowererMD::Legalize(instr); } +IR::Instr* +Lowerer::InsertObjectCheck(IR::RegOpnd *funcOpnd, IR::Instr *insertBeforeInstr, IR::BailOutKind bailOutKind, BailOutInfo *bailOutInfo) +{ + IR::Instr *bailOutIfNotObject = IR::BailOutInstr::New(Js::OpCode::BailOnNotObject, bailOutKind, bailOutInfo, bailOutInfo->bailOutFunc); + + // Bailout when funcOpnd is not an object. + bailOutIfNotObject->SetSrc1(funcOpnd); + bailOutIfNotObject->SetByteCodeOffset(insertBeforeInstr); + insertBeforeInstr->InsertBefore(bailOutIfNotObject); + + return bailOutIfNotObject; +} + +IR::Instr* +Lowerer::InsertFunctionTypeIdCheck(IR::RegOpnd * funcOpnd, IR::Instr* insertBeforeInstr, IR::BailOutKind bailOutKind, BailOutInfo *bailOutInfo) +{ + IR::Instr *bailOutIfNotFunction = IR::BailOutInstr::New(Js::OpCode::BailOnNotEqual, bailOutKind, bailOutInfo, bailOutInfo->bailOutFunc); + + // functionTypeRegOpnd = Ld functionRegOpnd->type + IR::IndirOpnd *functionTypeIndirOpnd = IR::IndirOpnd::New(funcOpnd, Js::RecyclableObject::GetOffsetOfType(), TyMachPtr, insertBeforeInstr->m_func); + IR::RegOpnd *functionTypeRegOpnd = IR::RegOpnd::New(TyVar, insertBeforeInstr->m_func->GetTopFunc()); + IR::Instr *instr = IR::Instr::New(Js::OpCode::Ld_A, functionTypeRegOpnd, functionTypeIndirOpnd, insertBeforeInstr->m_func); + if (instr->m_func->HasByteCodeOffset()) + { + instr->SetByteCodeOffset(insertBeforeInstr); + } + insertBeforeInstr->InsertBefore(instr); + + CompileAssert(sizeof(Js::TypeId) == sizeof(int32)); + // if (functionTypeRegOpnd->typeId != TypeIds_Function) goto $noInlineLabel + // BrNeq_I4 $noInlineLabel, functionTypeRegOpnd->typeId, TypeIds_Function + IR::IndirOpnd *functionTypeIdIndirOpnd = IR::IndirOpnd::New(functionTypeRegOpnd, Js::Type::GetOffsetOfTypeId(), TyInt32, insertBeforeInstr->m_func); + IR::IntConstOpnd *typeIdFunctionConstOpnd = IR::IntConstOpnd::New(Js::TypeIds_Function, TyInt32, insertBeforeInstr->m_func); + bailOutIfNotFunction->SetSrc1(functionTypeIdIndirOpnd); + bailOutIfNotFunction->SetSrc2(typeIdFunctionConstOpnd); + insertBeforeInstr->InsertBefore(bailOutIfNotFunction); + + return bailOutIfNotFunction; +} + +IR::Instr* +Lowerer::InsertFunctionInfoCheck(IR::RegOpnd * funcOpnd, IR::Instr *insertBeforeInstr, IR::AddrOpnd* inlinedFuncInfo, IR::BailOutKind bailOutKind, BailOutInfo *bailOutInfo) +{ + IR::Instr *bailOutIfWrongFuncInfo = IR::BailOutInstr::New(Js::OpCode::BailOnNotEqual, bailOutKind, bailOutInfo, bailOutInfo->bailOutFunc); + + // if (VarTo(r1)->functionInfo != funcInfo) goto noInlineLabel + // BrNeq_A noInlineLabel, r1->functionInfo, funcInfo + IR::IndirOpnd* opndFuncInfo = IR::IndirOpnd::New(funcOpnd, Js::JavascriptFunction::GetOffsetOfFunctionInfo(), TyMachPtr, insertBeforeInstr->m_func); + bailOutIfWrongFuncInfo->SetSrc1(opndFuncInfo); + bailOutIfWrongFuncInfo->SetSrc2(inlinedFuncInfo); + + insertBeforeInstr->InsertBefore(bailOutIfWrongFuncInfo); + + return bailOutIfWrongFuncInfo; +} + #if DBG void Lowerer::LegalizeVerifyRange(IR::Instr * instrStart, IR::Instr * instrLast) @@ -28476,3 +29186,202 @@ Lowerer::LowerCheckUpperIntBound(IR::Instr * instr) return instrPrev; } #endif + +Lowerer::LowerGeneratorHelper::LowerGeneratorHelper(Func* func, Lowerer* lowerer, LowererMD& lowererMD): + func(func), lowerer(lowerer), lowererMD(lowererMD) {} + +void Lowerer::LowerGeneratorHelper::InsertNullOutGeneratorFrameInEpilogue(IR::LabelInstr* epilogueLabel) +{ + IR::Instr* insertionPoint = epilogueLabel->m_next; + + // null out frame pointer on generator object to signal completion to JavascriptGenerator::CallGenerator + // s = MOV prm1 + // s[offset of JavascriptGenerator::frame] = MOV nullptr + StackSym* symSrc = StackSym::NewImplicitParamSym(3, this->func); + this->func->SetArgOffset(symSrc, LowererMD::GetFormalParamOffset() * MachPtr); + IR::SymOpnd* srcOpnd = IR::SymOpnd::New(symSrc, TyMachPtr, this->func); + IR::RegOpnd* dstOpnd = IR::RegOpnd::New(TyMachReg, this->func); + + // Since we are already in the epilogue, use one of the caller-saved + // registers to store the address to our interpreter frame +#if defined(_M_X64) + dstOpnd->SetReg(RegRCX); +#elif defined(_M_IX86) + dstOpnd->SetReg(RegECX); +#endif + + InsertMove(dstOpnd, srcOpnd, insertionPoint); + + IR::IndirOpnd* indirOpnd = IR::IndirOpnd::New(dstOpnd, Js::JavascriptGenerator::GetFrameOffset(), TyMachPtr, this->func); + IR::AddrOpnd* addrOpnd = IR::AddrOpnd::NewNull(this->func); + InsertMove(indirOpnd, addrOpnd, insertionPoint, false /* generateWriteBarrier */); +} + +void +Lowerer::LowerGeneratorHelper::EnsureEpilogueLabels() +{ + if (epilogueForBailOut != nullptr && epilogueForReturnStatements != nullptr) + { + return; + } + + IR::LabelInstr* withSignalGeneratorDone = IR::LabelInstr::New(Js::OpCode::GeneratorEpilogueFrameNullOutLabel, this->func, false); + LABELNAMESET(withSignalGeneratorDone, "Epilogue_WithSignalGeneratorDone"); + withSignalGeneratorDone->m_hasNonBranchRef = true; + this->epilogueForReturnStatements = withSignalGeneratorDone; + + IR::LabelInstr* withoutSignalGeneratorDone = IR::LabelInstr::New(Js::OpCode::GeneratorEpilogueNoFrameNullOutLabel, this->func, false); + LABELNAMESET(withoutSignalGeneratorDone, "Epilogue_NoSignalGeneratorDone"); + withoutSignalGeneratorDone->m_hasNonBranchRef = true; + this->epilogueForBailOut = withoutSignalGeneratorDone; + + this->func->m_exitInstr->InsertBefore(withSignalGeneratorDone); + this->func->m_exitInstr->InsertBefore(withoutSignalGeneratorDone); +} + + +IR::LabelInstr* +Lowerer::LowerGeneratorHelper::GetEpilogueForReturnStatements() +{ + this->EnsureEpilogueLabels(); + return this->epilogueForReturnStatements; +} + +IR::LabelInstr* +Lowerer::LowerGeneratorHelper::GetEpilogueForBailOut() +{ + this->EnsureEpilogueLabels(); + return this->epilogueForBailOut; +} + +void +Lowerer::LowerGeneratorHelper::LowerGeneratorResumeJumpTable(IR::Instr* jumpTableInstr) +{ + Assert(this->func->GetJITFunctionBody()->IsCoroutine()); + Assert(jumpTableInstr->m_opcode == Js::OpCode::GeneratorResumeJumpTable); + + IR::LabelInstr* bailOutForElidedYield = this->InsertBailOutForElidedYield(); + + IR::Opnd* srcOpnd = jumpTableInstr->UnlinkSrc1(); + + this->func->MapYieldOffsetResumeLabels([this, &srcOpnd, &jumpTableInstr, &bailOutForElidedYield](int i, const YieldOffsetResumeLabel& yorl) + { + uint32 offset = yorl.First(); + IR::LabelInstr* resumeLabel = yorl.Second(); + + if (resumeLabel != nullptr) + { + Assert(resumeLabel->IsGeneratorBailInInstr()); + // Also fix up the bailout at the label with the jump to epilog that was not emitted in GenerateBailOut() + this->lowerer->GenerateJumpToEpilogForBailOut(resumeLabel->m_prev->GetBailOutInfo(), resumeLabel->m_prev, this->GetEpilogueForBailOut()); + } + else if (resumeLabel == nullptr) + { + resumeLabel = bailOutForElidedYield; + } + + // For each offset label pair, insert a compare of the offset and branch if equal to the label + this->lowerer->InsertCompareBranch(srcOpnd, IR::IntConstOpnd::New(offset, TyUint32, this->func), Js::OpCode::BrSrEq_A, resumeLabel, jumpTableInstr); + }); + + jumpTableInstr->Remove(); +} + +IR::LabelInstr* +Lowerer::LowerGeneratorHelper::InsertBailOutForElidedYield() +{ + IR::LabelInstr* bailOutNoSaveLabel = nullptr; + + this->func->MapUntilYieldOffsetResumeLabels([this, &bailOutNoSaveLabel](int, const YieldOffsetResumeLabel& yorl) + { + if (yorl.Second() == nullptr) + { + if (bailOutNoSaveLabel == nullptr) + { + bailOutNoSaveLabel = IR::LabelInstr::New(Js::OpCode::Label, this->func); + } + + return true; + } + + return false; + }); + + // Insert the bailoutnosave label somewhere along with a call to BailOutNoSave helper + if (bailOutNoSaveLabel != nullptr) + { + bailOutNoSaveLabel->m_hasNonBranchRef = true; + + IR::Instr* insertionPoint = this->func->m_bailOutForElidedYieldInsertionPoint->m_next; + IR::Instr* bailOutCall = IR::Instr::New(Js::OpCode::Call, this->func); + IR::Instr* branchToEpilogue = IR::BranchInstr::New(LowererMD::MDUncondBranchOpcode, this->GetEpilogueForBailOut(), this->func); + + insertionPoint->InsertBefore(bailOutNoSaveLabel); + insertionPoint->InsertBefore(bailOutCall); + insertionPoint->InsertBefore(branchToEpilogue); + + IR::RegOpnd* frameRegOpnd = IR::RegOpnd::New(nullptr, LowererMD::GetRegFramePointer(), TyMachPtr, this->func); + this->lowererMD.LoadHelperArgument(bailOutCall, frameRegOpnd); + this->lowererMD.ChangeToHelperCall(bailOutCall, IR::HelperNoSaveRegistersBailOutForElidedYield); + + LABELNAMESET(bailOutNoSaveLabel, "GeneratorBailOutForElidedYield"); + } + + return bailOutNoSaveLabel; +} + +void +Lowerer::LowerGeneratorHelper::LowerCreateInterpreterStackFrameForGenerator(IR::Instr* instr) +{ + IR::Opnd* scriptFunctionOpnd = nullptr; + IR::Opnd* functionBodyOpnd = this->lowerer->CreateFunctionBodyOpnd(instr->m_func); + IR::Opnd* generatorOpnd = instr->UnlinkSrc1(); + IR::IntConstOpnd* doProfileOpnd = IR::IntConstOpnd::New(0, TyInt8, instr->m_func); + + this->lowererMD.LoadFunctionObjectOpnd(instr, scriptFunctionOpnd); + + this->lowererMD.LoadHelperArgument(instr, doProfileOpnd); + this->lowererMD.LoadHelperArgument(instr, generatorOpnd); + this->lowererMD.LoadHelperArgument(instr, functionBodyOpnd); + this->lowererMD.LoadHelperArgument(instr, scriptFunctionOpnd); + + this->lowererMD.ChangeToHelperCall(instr, IR::HelperCreateInterpreterStackFrameForGenerator); +} + +#ifdef ENABLE_DEBUG_CONFIG_OPTIONS +void +Lowerer::LowerGeneratorHelper::LowerGeneratorTraceBailIn(IR::Instr* instr) +{ + StackSym* genParamSym = StackSym::NewParamSlotSym(1, instr->m_func); + instr->m_func->SetArgOffset(genParamSym, LowererMD::GetFormalParamOffset() * MachPtr); + IR::SymOpnd* genParamOpnd = IR::SymOpnd::New(genParamSym, TyMachPtr, instr->m_func); + this->lowererMD.LoadHelperArgument(instr, genParamOpnd); + this->lowererMD.ChangeToHelperCall(instr, IR::HelperOutputGeneratorBailInTrace); +} +#endif + +IR::SymOpnd* +Lowerer::LowerGeneratorHelper::CreateResumeYieldOpnd() const +{ + StackSym* resumeYieldDataSym = StackSym::NewImplicitParamSym(4, this->func); + this->func->SetArgOffset(resumeYieldDataSym, (LowererMD::GetFormalParamOffset() + 1) * MachPtr); + return IR::SymOpnd::New(resumeYieldDataSym, TyMachPtr, this->func); +} + +void +Lowerer::LowerGeneratorHelper::LowerGeneratorResumeYield(IR::Instr* instr) +{ + // prm2 is the resume yield object var per calling convention established in JavascriptGenerator::CallGenerator + // This is the value the bytecode expects to be in the dst register of the Yield opcode after resumption. + // Load it here after the bail-in. + this->lowerer->InsertMove(instr->UnlinkDst(), this->CreateResumeYieldOpnd(), instr); + instr->Unlink(); +} + +void +Lowerer::LowerGeneratorHelper::LowerYield(IR::Instr* instr) +{ + instr->FreeSrc1(); // Source is not actually used by the backend other than to calculate lifetime + instr->FreeDst(); + this->lowerer->GenerateBailOut(instr); +} diff --git a/lib/Backend/Lower.h b/lib/Backend/Lower.h index 797676b2118..ef670d66338 100644 --- a/lib/Backend/Lower.h +++ b/lib/Backend/Lower.h @@ -53,7 +53,8 @@ class Lowerer public: Lowerer(Func * func) : m_func(func), m_lowererMD(func), nextStackFunctionOpnd(nullptr), outerMostLoopLabel(nullptr), - initializedTempSym(nullptr), addToLiveOnBackEdgeSyms(nullptr), currentRegion(nullptr) + initializedTempSym(nullptr), addToLiveOnBackEdgeSyms(nullptr), currentRegion(nullptr), + m_lowerGeneratorHelper(LowerGeneratorHelper(func, this, this->m_lowererMD)) { #ifdef RECYCLER_WRITE_BARRIER_JIT m_func->m_lowerer = this; @@ -75,7 +76,6 @@ class Lowerer void LowerRange(IR::Instr *instrStart, IR::Instr *instrEnd, bool defaultDoFastPath, bool defaultDoLoopFastPath); void LowerPrologEpilog(); void LowerPrologEpilogAsmJs(); - void LowerGeneratorResumeJumpTable(); void DoInterruptProbes(); @@ -88,6 +88,7 @@ class Lowerer uint DoLoopProbeAndNumber(IR::BranchInstr *branchInstr); void InsertOneLoopProbe(IR::Instr *insertInstr, IR::LabelInstr *loopLabel); void FinalLower(); + void InsertLazyBailOutThunk(); void EHBailoutPatchUp(); inline Js::ScriptContext* GetScriptContext() { @@ -125,7 +126,6 @@ class Lowerer void LowerProfiledBeginSwitch(IR::JitProfilingInstr *instr); void LowerFunctionExit(IR::Instr* funcExit); void LowerFunctionEntry(IR::Instr* funcEntry); - void GenerateNullOutGeneratorFrame(IR::Instr* instrInsert); void LowerFunctionBodyCallCountChange(IR::Instr *const insertBeforeInstr); IR::Instr* LowerProfiledNewArray(IR::JitProfilingInstr* instr, bool hasArgs); IR::Instr * LowerProfiledLdSlot(IR::JitProfilingInstr *instr); @@ -144,6 +144,8 @@ class Lowerer IR::Instr * LowerNewScGenFunc(IR::Instr *instr); IR::Instr * LowerNewScFuncHomeObj(IR::Instr *instr); IR::Instr * LowerNewScGenFuncHomeObj(IR::Instr *instr); + IR::Instr * LowerStPropIdArrFromVar(IR::Instr *instr); + IR::Instr * LowerRestify(IR::Instr *instr); IR::Instr* GenerateCompleteStFld(IR::Instr* instr, bool emitFastPath, IR::JnHelperMethod monoHelperAfterFastPath, IR::JnHelperMethod polyHelperAfterFastPath, IR::JnHelperMethod monoHelperWithoutFastPath, IR::JnHelperMethod polyHelperWithoutFastPath, bool withPutFlags, Js::PropertyOperationFlags flags); bool GenerateStFldWithCachedType(IR::Instr * instrStFld, bool* continueAsHelperOut, IR::LabelInstr** labelHelperOut, IR::RegOpnd** typeOpndOut); @@ -154,13 +156,13 @@ class Lowerer IR::RegOpnd * GeneratePolymorphicTypeIndex(IR::RegOpnd * typeOpnd, Js::PropertyGuard * typeCheckGuard, IR::Instr * instrInsert); void GenerateLeaOfOOPData(IR::RegOpnd * regOpnd, void * address, int32 offset, IR::Instr * instrInsert); IR::Opnd * GenerateIndirOfOOPData(void * address, int32 offset, IR::Instr * instrInsert); - void GenerateFixedFieldGuardCheck(IR::Instr *insertPointInstr, IR::PropertySymOpnd *propertySymOpnd, IR::LabelInstr *labelBailOut); + bool GenerateFixedFieldGuardCheck(IR::Instr *insertPointInstr, IR::PropertySymOpnd *propertySymOpnd, IR::LabelInstr *labelBailOut); Js::JitTypePropertyGuard* CreateTypePropertyGuardForGuardedProperties(JITTypeHolder type, IR::PropertySymOpnd* propertySymOpnd); Js::JitEquivalentTypeGuard* CreateEquivalentTypeGuardAndLinkToGuardedProperties(IR::PropertySymOpnd* propertySymOpnd); bool LinkCtorCacheToGuardedProperties(JITTimeConstructorCache* cache); template bool LinkGuardToGuardedProperties(const BVSparse* guardedPropOps, LinkFunc link); - void GeneratePropertyGuardCheck(IR::Instr *insertPointInstr, IR::PropertySymOpnd *propertySymOpnd, IR::LabelInstr *labelBailOut); + bool GeneratePropertyGuardCheck(IR::Instr *insertPointInstr, IR::PropertySymOpnd *propertySymOpnd, IR::LabelInstr *labelBailOut); IR::Instr * GeneratePropertyGuardCheckBailoutAndLoadType(IR::Instr *insertInstr); void GenerateFieldStoreWithTypeChange(IR::Instr * instrStFld, IR::PropertySymOpnd *propertySymOpnd, JITTypeHolder initialType, JITTypeHolder finalType); void GenerateDirectFieldStore(IR::Instr* instrStFld, IR::PropertySymOpnd* propertySymOpnd); @@ -171,7 +173,6 @@ class Lowerer void GenerateIsDynamicObject(IR::RegOpnd *regOpnd, IR::Instr *insertInstr, IR::LabelInstr *labelHelper, bool fContinueLabel = false); void GenerateIsRecyclableObject(IR::RegOpnd *regOpnd, IR::Instr *insertInstr, IR::LabelInstr *labelHelper, bool checkObjectAndDynamicObject = true); bool GenerateLdThisCheck(IR::Instr * instr); - bool GenerateLdThisStrict(IR::Instr * instr); bool GenerateFastIsInst(IR::Instr * instr); void GenerateFastArrayIsIn(IR::Instr * instr); void GenerateFastObjectIsIn(IR::Instr * instr); @@ -190,6 +191,8 @@ class Lowerer IR::LabelInstr * labelFallThru, bool isInlineSlot); + IR::LabelInstr* EnsureEpilogueLabel() const; + void GenerateFlagProtoCheck(IR::Instr * insertBeforeInstr, IR::RegOpnd * opndInlineCache, IR::LabelInstr * labelFail); void GenerateFlagInlineCacheCheck(IR::Instr * instrLdSt, IR::RegOpnd * opndType, IR::RegOpnd * opndInlineCache, IR::LabelInstr * labelNext); bool GenerateFastLdMethodFromFlags(IR::Instr * instrLdFld); @@ -204,6 +207,7 @@ class Lowerer void GenerateStackScriptFunctionInit(IR::RegOpnd * regOpnd, Js::FunctionInfoPtrPtr nestedInfo, IR::Opnd * envOpnd, IR::Instr * insertBeforeInstr); IR::Instr * LowerProfiledStFld(IR::JitProfilingInstr * instr, Js::PropertyOperationFlags flags); IR::Instr * LowerStFld(IR::Instr * stFldInstr, IR::JnHelperMethod helperMethod, IR::JnHelperMethod polymorphicHelperMethod, bool withInlineCache, IR::LabelInstr *ppBailOutLabel = nullptr, bool isHelper = false, bool withPutFlags = false, Js::PropertyOperationFlags flags = Js::PropertyOperation_None); + void MapStFldHelper(IR::PropertySymOpnd * propertySymOpnd, IR::JnHelperMethod &helperMethod, IR::JnHelperMethod &polymorphicHelperMethod); IR::Instr * LowerScopedStFld(IR::Instr * stFldInstr, IR::JnHelperMethod helperMethod, bool withInlineCache, bool withPropertyOperationFlags = false, Js::PropertyOperationFlags flags = Js::PropertyOperation_None); void LowerProfiledLdElemI(IR::JitProfilingInstr *const instr); @@ -226,6 +230,7 @@ class Lowerer IR::Instr * LowerDeleteElemI(IR::Instr *instr, bool strictMode); IR::Instr * LowerStElemC(IR::Instr *instr); void LowerLdArrHead(IR::Instr *instr); + IR::Instr* AddSlotArrayCheck(PropertySym *propertySym, IR::Instr* instr); IR::Instr * LowerStSlot(IR::Instr *instr); IR::Instr * LowerStSlotChkUndecl(IR::Instr *instr); void LowerStLoopBodyCount(IR::Instr* instr); @@ -267,6 +272,7 @@ class Lowerer IR::Instr * LowerBrBReturn(IR::Instr * instr, IR::JnHelperMethod helperMethod, bool isHelper); IR::Instr * LowerBrBMem(IR::Instr *instr, IR::JnHelperMethod helperMethod); IR::Instr * LowerBrOnObject(IR::Instr *instr, IR::JnHelperMethod helperMethod); + IR::Instr * LowerStrictBrOrCm(IR::Instr * instr, IR::JnHelperMethod helperMethod, bool noMathFastPath, bool isBranch, bool isHelper = true); IR::Instr * LowerBrCMem(IR::Instr * instr, IR::JnHelperMethod helperMethod, bool noMathFastPath, bool isHelper = true); IR::Instr * LowerBrFncApply(IR::Instr * instr, IR::JnHelperMethod helperMethod); IR::Instr * LowerBrProperty(IR::Instr * instr, IR::JnHelperMethod helperMethod); @@ -290,9 +296,6 @@ class Lowerer IR::Instr * LowerEqualityCompare(IR::Instr* instr, IR::JnHelperMethod helper); template BOOL IsSmallObject(uint32 length); -#ifdef ENABLE_DOM_FAST_PATH - void LowerFastInlineDOMFastPathGetter(IR::Instr* getterInstr); -#endif void GenerateProfiledNewScIntArrayFastPath(IR::Instr *instr, Js::ArrayCallSiteInfo * arrayInfo, intptr_t arrayInfoAddr, intptr_t weakFuncRef); void GenerateArrayInfoIsNativeIntArrayTest(IR::Instr * instr, Js::ArrayCallSiteInfo * arrayInfo, intptr_t arrayInfoAddr, IR::LabelInstr * helperLabel); void GenerateProfiledNewScFloatArrayFastPath(IR::Instr *instr, Js::ArrayCallSiteInfo * arrayInfo, intptr_t arrayInfoAddr, intptr_t weakFuncRef); @@ -301,20 +304,21 @@ class Lowerer bool IsEmitTempSrc(IR::Opnd *opnd); bool IsNullOrUndefRegOpnd(IR::RegOpnd *opnd) const; bool IsConstRegOpnd(IR::RegOpnd *opnd) const; + IR::Opnd * GetConstRegOpnd(IR::RegOpnd *opnd, IR::Instr *instr); IR::Instr * GenerateRuntimeError(IR::Instr * insertBeforeInstr, Js::MessageId errorCode, IR::JnHelperMethod helper = IR::JnHelperMethod::HelperOp_RuntimeTypeError); bool InlineBuiltInLibraryCall(IR::Instr *callInstr); void LowerInlineBuiltIn(IR::Instr* instr); intptr_t GetObjRefForBuiltInTarget(IR::RegOpnd * opnd); - bool TryGenerateFastCmSrEq(IR::Instr * instr); + bool TryGenerateFastCmSrXx(IR::Instr * instr); bool TryGenerateFastBrEq(IR::Instr * instr); bool TryGenerateFastBrNeq(IR::Instr * instr); - bool GenerateFastBrSrEq(IR::Instr * instr, IR::RegOpnd * srcReg1, IR::RegOpnd * srcReg2, IR::Instr ** pInstrPrev, bool noMathFastPath); - bool GenerateFastBrSrNeq(IR::Instr * instr, IR::Instr ** pInstrPrev); + bool TryGenerateFastBrSrXx(IR::Instr * instr, IR::RegOpnd * srcReg1, IR::RegOpnd * srcReg2, IR::Instr ** pInstrPrev, bool noMathFastPath); IR::BranchInstr* GenerateFastBrConst(IR::BranchInstr *branchInstr, IR::Opnd * constOpnd, bool isEqual); bool GenerateFastCondBranch(IR::BranchInstr * instrBranch, bool *pIsHelper); void GenerateBooleanNegate(IR::Instr * instr, IR::Opnd * srcBool, IR::Opnd * dst); bool GenerateJSBooleanTest(IR::RegOpnd * regSrc, IR::Instr * insertInstr, IR::LabelInstr * labelTarget, bool fContinueLabel = false); bool GenerateFastEqBoolInt(IR::Instr * instr, bool *pIsHelper, bool isInHelper); + bool GenerateFastBrOrCmEqDefinite(IR::Instr * instrBranch, IR::JnHelperMethod helperMethod, bool *pNeedHelper, bool isBranch, bool isInHelper); bool GenerateFastBrEqLikely(IR::BranchInstr * instrBranch, bool *pNeedHelper, bool isInHelper); bool GenerateFastBooleanAndObjectEqLikely(IR::Instr * instr, IR::Opnd *src1, IR::Opnd *src2, IR::LabelInstr * labelHelper, IR::LabelInstr * labelEqualLikely, bool *pNeedHelper, bool isInHelper); bool GenerateFastCmEqLikely(IR::Instr * instr, bool *pNeedHelper, bool isInHelper); @@ -374,11 +378,11 @@ class Lowerer void GenerateFastBrBReturn(IR::Instr * instr); public: - static IR::Instr *Lowerer::HoistIndirOffset(IR::Instr* instr, IR::IndirOpnd *indirOpnd, RegNum regNum); - static IR::Instr *Lowerer::HoistIndirOffsetAsAdd(IR::Instr* instr, IR::IndirOpnd *orgOpnd, IR::Opnd *baseOpnd, int offset, RegNum regNum); - static IR::Instr *Lowerer::HoistIndirIndexOpndAsAdd(IR::Instr* instr, IR::IndirOpnd *orgOpnd, IR::Opnd *baseOpnd, IR::Opnd *indexOpnd, RegNum regNum); - static IR::Instr *Lowerer::HoistSymOffset(IR::Instr *instr, IR::SymOpnd *symOpnd, RegNum baseReg, uint32 offset, RegNum regNum); - static IR::Instr *Lowerer::HoistSymOffsetAsAdd(IR::Instr* instr, IR::SymOpnd *orgOpnd, IR::Opnd *baseOpnd, int offset, RegNum regNum); + static IR::Instr *HoistIndirOffset(IR::Instr* instr, IR::IndirOpnd *indirOpnd, RegNum regNum); + static IR::Instr *HoistIndirOffsetAsAdd(IR::Instr* instr, IR::IndirOpnd *orgOpnd, IR::Opnd *baseOpnd, int offset, RegNum regNum); + static IR::Instr *HoistIndirIndexOpndAsAdd(IR::Instr* instr, IR::IndirOpnd *orgOpnd, IR::Opnd *baseOpnd, IR::Opnd *indexOpnd, RegNum regNum); + static IR::Instr *HoistSymOffset(IR::Instr *instr, IR::SymOpnd *symOpnd, RegNum baseReg, uint32 offset, RegNum regNum); + static IR::Instr *HoistSymOffsetAsAdd(IR::Instr* instr, IR::SymOpnd *orgOpnd, IR::Opnd *baseOpnd, int offset, RegNum regNum); static IR::LabelInstr * InsertLabel(const bool isHelper, IR::Instr *const insertBeforeInstr); @@ -561,6 +565,7 @@ class Lowerer IR::Instr * LowerBailOnNotPolymorphicInlinee(IR::Instr * instr); IR::Instr * LowerBailOnNotStackArgs(IR::Instr * instr); IR::Instr * LowerBailOnNotObject(IR::Instr *instr, IR::BranchInstr *branchInstr = nullptr, IR::LabelInstr *labelBailOut = nullptr); + IR::Instr * LowerCheckIsFuncObj(IR::Instr *instr, bool checkFuncInfo = false); IR::Instr * LowerBailOnTrue(IR::Instr *instr, IR::LabelInstr *labelBailOut = nullptr); IR::Instr * LowerBailOnNotBuiltIn(IR::Instr *instr, IR::BranchInstr *branchInstr = nullptr, IR::LabelInstr *labelBailOut = nullptr); IR::Instr * LowerBailOnNotInteger(IR::Instr *instr, IR::BranchInstr *branchInstr = nullptr, IR::LabelInstr *labelBailOut = nullptr); @@ -596,7 +601,7 @@ class Lowerer void GenerateObjectTestAndTypeLoad(IR::Instr *instrLdSt, IR::RegOpnd *opndBase, IR::RegOpnd *opndType, IR::LabelInstr *labelHelper); void InsertMoveForPolymorphicCacheIndex(IR::Instr * instr, BailOutInfo * bailOutInfo, int bailOutRecordOffset, uint polymorphicCacheIndexValue); IR::LabelInstr *GenerateBailOut(IR::Instr * instr, IR::BranchInstr * branchInstr = nullptr, IR::LabelInstr * labelBailOut = nullptr, IR::LabelInstr * collectRuntimeStatsLabel = nullptr); - void GenerateJumpToEpilogForBailOut(BailOutInfo * bailOutInfo, IR::Instr *instrAfter); + void GenerateJumpToEpilogForBailOut(BailOutInfo * bailOutInfo, IR::Instr *instrAfter, IR::LabelInstr *exitTargetInstr); void GenerateThrow(IR::Opnd* errorCode, IR::Instr * instr); void LowerDivI4(IR::Instr * const instr); void LowerRemI4(IR::Instr * const instr); @@ -625,7 +630,7 @@ class Lowerer bool GenerateFastArgumentsLdElemI(IR::Instr* ldElem, IR::LabelInstr *labelFallThru); bool GenerateFastRealStackArgumentsLdLen(IR::Instr *ldLen); bool GenerateFastArgumentsLdLen(IR::Instr *ldLen, IR::LabelInstr* labelFallThru); - static const uint16 GetFormalParamOffset() { /*formal start after frame pointer, return address, function object, callInfo*/ return 4;}; + static uint16 GetFormalParamOffset() { /*formal start after frame pointer, return address, function object, callInfo*/ return 4;}; IR::RegOpnd* GenerateFunctionTypeFromFixedFunctionObject(IR::Instr *callInstr, IR::Opnd* functionObjOpnd); @@ -635,6 +640,7 @@ class Lowerer void GenerateSetObjectTypeFromInlineCache(IR::Instr * instrToInsertBefore, IR::RegOpnd * opndBase, IR::RegOpnd * opndInlineCache, bool isTypeTagged); bool GenerateFastStFld(IR::Instr * const instrStFld, IR::JnHelperMethod helperMethod, IR::JnHelperMethod polymorphicHelperMethod, IR::LabelInstr ** labelBailOut, IR::RegOpnd* typeOpnd, bool* pIsHelper, IR::LabelInstr** pLabelHelper, bool withPutFlags = false, Js::PropertyOperationFlags flags = Js::PropertyOperation_None); + void GenerateAuxSlotPtrLoad(IR::PropertySymOpnd *propertySymOpnd, IR::Instr *insertInstr); bool GenerateFastStFldForCustomProperty(IR::Instr *const instr, IR::LabelInstr * *const labelHelperRef); @@ -658,9 +664,9 @@ class Lowerer void GenerateGetCurrentFunctionObject(IR::Instr * instr); IR::Opnd * GetInlineCacheFromFuncObjectForRuntimeUse(IR::Instr * instr, IR::PropertySymOpnd * propSymOpnd, bool isHelper); - IR::Instr * LowerInitClass(IR::Instr * instr); + IR::Instr * LowerNewClassConstructor(IR::Instr * instr); - IR::RegOpnd * GenerateGetImmutableOrScriptUnreferencedString(IR::RegOpnd * strOpnd, IR::Instr * insertBeforeInstr, IR::JnHelperMethod helperMethod, bool reloadDst = true); + IR::RegOpnd * GenerateGetImmutableOrScriptUnreferencedString(IR::RegOpnd * strOpnd, IR::Instr * insertBeforeInstr, IR::JnHelperMethod helperMethod, bool loweringCloneStr = false, bool reloadDst = true); void LowerNewConcatStrMulti(IR::Instr * instr); void LowerNewConcatStrMultiBE(IR::Instr * instr); void LowerSetConcatStrMultiItem(IR::Instr * instr); @@ -751,7 +757,7 @@ class Lowerer static IR::RegOpnd * LoadGeneratorArgsPtr(IR::Instr *instrInsert); static IR::Instr * LoadGeneratorObject(IR::Instr *instrInsert); - IR::Opnd * LoadSlotArrayWithCachedLocalType(IR::Instr * instrInsert, IR::PropertySymOpnd *propertySymOpnd, bool canReuseAuxSlotPtr); + IR::Opnd * LoadSlotArrayWithCachedLocalType(IR::Instr * instrInsert, IR::PropertySymOpnd *propertySymOpnd); IR::Opnd * LoadSlotArrayWithCachedProtoType(IR::Instr * instrInsert, IR::PropertySymOpnd *propertySymOpnd); IR::Instr * LowerLdAsmJsEnv(IR::Instr *instr); IR::Instr * LowerLdEnv(IR::Instr *instr); @@ -759,8 +765,6 @@ class Lowerer IR::Instr * LowerLdNativeCodeData(IR::Instr *instr); IR::Instr * LowerFrameDisplayCheck(IR::Instr * instr); IR::Instr * LowerSlotArrayCheck(IR::Instr * instr); - void InsertSlotArrayCheck(IR::Instr * instr, StackSym * dstSym, uint32 slotId); - void InsertFrameDisplayCheck(IR::Instr * instr, StackSym * dstSym, FrameDisplayCheckRecord * record); static void InsertObjectPoison(IR::Opnd* poisonedOpnd, IR::BranchInstr* branchInstr, IR::Instr* insertInstr, bool isForStore); IR::RegOpnd * LoadIndexFromLikelyFloat(IR::RegOpnd *indexOpnd, const bool skipNegativeCheck, IR::LabelInstr *const notTaggedIntLabel, IR::LabelInstr *const negativeLabel, IR::Instr *const insertBeforeInstr); @@ -780,8 +784,6 @@ class Lowerer IR::Instr* LowerTry(IR::Instr* instr, bool tryCatch); IR::Instr * LowerCatch(IR::Instr *instr); IR::Instr * LowerLeave(IR::Instr *instr, IR::LabelInstr * targetInstr, bool fromFinalLower, bool isOrphanedLeave = false); - void EnsureBailoutReturnValueSym(); - void EnsureHasBailedOutSym(); void InsertReturnThunkForRegion(Region* region, IR::LabelInstr* restoreLabel); void SetHasBailedOut(IR::Instr * bailoutInstr); IR::Instr* EmitEHBailoutStackRestore(IR::Instr * bailoutInstr); @@ -797,6 +799,11 @@ class Lowerer IR::LabelInstr* InsertLoopTopLabel(IR::Instr * insertBeforeInstr); IR::Instr * AddBailoutToHelperCallInstr(IR::Instr * helperCallInstr, BailOutInfo * bailoutInfo, IR::BailOutKind bailoutKind, IR::Instr * primaryBailoutInstr); + + IR::Instr* InsertObjectCheck(IR::RegOpnd *funcOpnd, IR::Instr *insertBeforeInstr, IR::BailOutKind bailOutKind, BailOutInfo *bailOutInfo); + IR::Instr* InsertFunctionTypeIdCheck(IR::RegOpnd *funcOpnd, IR::Instr *insertBeforeInstr, IR::BailOutKind bailOutKind, BailOutInfo *bailOutInfo); + IR::Instr* InsertFunctionInfoCheck(IR::RegOpnd *funcOpnd, IR::Instr *insertBeforeInstr, IR::AddrOpnd *inlinedFuncInfo, IR::BailOutKind bailOutKind, BailOutInfo *bailOutInfo); + public: static IRType GetImplicitCallFlagsType() { @@ -812,9 +819,8 @@ class Lowerer static bool IsSpreadCall(IR::Instr *instr); static IR::Instr* GetLdSpreadIndicesInstr(IR::Instr *instr); - static bool DoLazyBailout(Func* func) { return PHASE_ON(Js::LazyBailoutPhase, func) && !func->IsLoopBody(); } - static bool DoLazyFixedTypeBailout(Func* func) { return DoLazyBailout(func) && !PHASE_OFF(Js::LazyFixedTypeBailoutPhase, func); } - static bool DoLazyFixedDataBailout(Func* func) { return DoLazyBailout(func) && !PHASE_OFF(Js::LazyFixedDataBailoutPhase, func); } + static bool ShouldDoLazyFixedTypeBailout(Func* func) { return func->ShouldDoLazyBailOut() && PHASE_ON1(Js::LazyFixedTypeBailoutPhase); } + static bool ShouldDoLazyFixedDataBailout(Func* func) { return func->ShouldDoLazyBailOut() && !PHASE_OFF1(Js::LazyFixedDataBailoutPhase); } LowererMD * GetLowererMD() { return &m_lowererMD; } private: Func * m_func; @@ -831,4 +837,67 @@ class Lowerer HelperCallCheckState oldHelperCallCheckState; Js::OpCode m_currentInstrOpCode; #endif + + // + // Generator + // + class LowerGeneratorHelper + { + Func* const func; + LowererMD &lowererMD; + Lowerer* const lowerer; + + IR::LabelInstr* epilogueForReturnStatements = nullptr; + IR::LabelInstr* epilogueForBailOut = nullptr; + + void EnsureEpilogueLabels(); + IR::SymOpnd* CreateResumeYieldOpnd() const; + + public: + LowerGeneratorHelper(Func* func, Lowerer* lowerer, LowererMD &lowererMD); + + // Insert code to set generator->interpreterFrame to nullptr so that we know the + // generator has finished executing and has no more yield points. + // This will be inserted at the epilogue of the jitted function. + void InsertNullOutGeneratorFrameInEpilogue(IR::LabelInstr* epilogueLabel); + + // Normally, after every bail out, we would do a jump to the epilogue and pop off the current frame. + // However, in the case of generator, we also want to null out the interpreter frame to signal that + // the generator is completed in the epilogue (i.e: there are no more yield points). This makes + // jumping to the epilogue after the bailout call returns not possible because we wouldn't know if + // the jump was because we actually want to return or because we have just bailed out. + // + // To deal with this, generators will have two kinds of epilogue label: + // - one that nulls out the generator's interpreter frame + // - one that doesn't + // + // Both of them share the register restore code, only the jump point differs: + // + // $Label_GeneratorEpilogueFrameNullOut: (intended for return statement) + // null out generator's interpreter frame + // $Label_GeneratorEpilogueNoFrameNullOut: (intended for jumping after bailout call returns) + // pop ... + // pop ... + // ret + // + IR::LabelInstr* GetEpilogueForReturnStatements(); + IR::LabelInstr* GetEpilogueForBailOut(); + + // Introduce a BailOutNoSave label if there were yield points that were elided due to optimizations. + // They could still be hit if an active generator object had been paused at such a yield point when + // the function body was JITed. So safe guard such a case by having the native code simply jump back + // to the interpreter for such yield points. + IR::LabelInstr* InsertBailOutForElidedYield(); + + void LowerGeneratorResumeJumpTable(IR::Instr* jumpTableInstr); + void LowerCreateInterpreterStackFrameForGenerator(IR::Instr* instr); + void LowerYield(IR::Instr* instr); + void LowerGeneratorResumeYield(IR::Instr* instr); + +#ifdef ENABLE_DEBUG_CONFIG_OPTIONS + void LowerGeneratorTraceBailIn(IR::Instr* instr); +#endif + }; + + LowerGeneratorHelper m_lowerGeneratorHelper; }; diff --git a/lib/Backend/LowerMDShared.cpp b/lib/Backend/LowerMDShared.cpp index a5d128e8eb4..b04aa92842b 100644 --- a/lib/Backend/LowerMDShared.cpp +++ b/lib/Backend/LowerMDShared.cpp @@ -191,12 +191,18 @@ LowererMD::LowerCallHelper(IR::Instr *instrCall) IR::JnHelperMethod helperMethod = instrCall->GetSrc1()->AsHelperCallOpnd()->m_fnHelper; instrCall->FreeSrc1(); - + #ifndef _M_X64 + bool callHasDst = instrCall->GetDst() != nullptr; prevInstr = ChangeToHelperCall(instrCall, helperMethod); -#endif - + if (callHasDst) + { + prevInstr = prevInstr->m_prev; + } + Assert(prevInstr->GetSrc1()->IsHelperCallOpnd() && prevInstr->GetSrc1()->AsHelperCallOpnd()->m_fnHelper == helperMethod); +#else prevInstr = instrCall; +#endif while (argOpnd) { @@ -206,11 +212,14 @@ LowererMD::LowerCallHelper(IR::Instr *instrCall) Assert(regArg->m_sym->m_isSingleDef); IR::Instr *instrArg = regArg->m_sym->m_instrDef; - Assert(instrArg->m_opcode == Js::OpCode::ArgOut_A || - (helperMethod == IR::JnHelperMethod::HelperOP_InitCachedScope && instrArg->m_opcode == Js::OpCode::ExtendArg_A) || - (helperMethod == IR::JnHelperMethod::HelperScrFunc_OP_NewScFuncHomeObj && instrArg->m_opcode == Js::OpCode::ExtendArg_A) || - (helperMethod == IR::JnHelperMethod::HelperScrFunc_OP_NewScGenFuncHomeObj && instrArg->m_opcode == Js::OpCode::ExtendArg_A) - ); + Assert(instrArg->m_opcode == Js::OpCode::ArgOut_A || instrArg->m_opcode == Js::OpCode::ExtendArg_A && + ( + helperMethod == IR::JnHelperMethod::HelperOP_InitCachedScope || + helperMethod == IR::JnHelperMethod::HelperScrFunc_OP_NewScFuncHomeObj || + helperMethod == IR::JnHelperMethod::HelperScrFunc_OP_NewScGenFuncHomeObj || + helperMethod == IR::JnHelperMethod::HelperRestify || + helperMethod == IR::JnHelperMethod::HelperStPropIdArrFromVar + )); prevInstr = LoadHelperArgument(prevInstr, instrArg->GetSrc1()); argOpnd = instrArg->GetSrc2(); @@ -390,7 +399,7 @@ LowererMD::LowerTry(IR::Instr *tryInstr, IR::JnHelperMethod helperMethod) if (tryInstr->m_opcode == Js::OpCode::TryCatch || (this->m_func->DoOptimizeTry() || (this->m_func->IsSimpleJit() && this->m_func->hasBailout))) { // Arg 4 : hasBailedOutOffset - IR::Opnd * hasBailedOutOffset = IR::IntConstOpnd::New(this->m_func->m_hasBailedOutSym->m_offset, TyInt32, this->m_func); + IR::Opnd * hasBailedOutOffset = IR::IntConstOpnd::New(this->m_func->GetHasBailedOutSym()->m_offset, TyInt32, this->m_func); this->LoadHelperArgument(tryAddr, hasBailedOutOffset); } #ifdef _M_X64 @@ -562,8 +571,8 @@ LowererMD::LoadStackArgPtr(IR::Instr * instr) // t1 = MOV [prm1 + m_inParams] // dst = LEA &[t1 + sizeof(var)] - Assert(this->m_func->m_loopParamSym); - IR::RegOpnd *baseOpnd = IR::RegOpnd::New(this->m_func->m_loopParamSym, TyMachReg, this->m_func); + Assert(this->m_func->GetLoopParamSym()); + IR::RegOpnd *baseOpnd = IR::RegOpnd::New(this->m_func->GetLoopParamSym(), TyMachReg, this->m_func); size_t offset = Js::InterpreterStackFrame::GetOffsetOfInParams(); IR::IndirOpnd *indirOpnd = IR::IndirOpnd::New(baseOpnd, (int32)offset, TyMachReg, this->m_func); IR::RegOpnd *tmpOpnd = IR::RegOpnd::New(TyMachReg, this->m_func); @@ -588,14 +597,14 @@ LowererMD::LoadArgumentsFromFrame(IR::Instr * instr) if (this->m_func->IsLoopBody()) { // Get the arguments ptr from the interpreter frame instance that was passed in. - Assert(this->m_func->m_loopParamSym); - IR::RegOpnd *baseOpnd = IR::RegOpnd::New(this->m_func->m_loopParamSym, TyMachReg, this->m_func); + Assert(this->m_func->GetLoopParamSym()); + IR::RegOpnd *baseOpnd = IR::RegOpnd::New(this->m_func->GetLoopParamSym(), TyMachReg, this->m_func); int32 offset = (int32)Js::InterpreterStackFrame::GetOffsetOfArguments(); instr->SetSrc1(IR::IndirOpnd::New(baseOpnd, offset, TyMachReg, this->m_func)); } else { - instr->SetSrc1(this->CreateStackArgumentsSlotOpnd()); + instr->SetSrc1(LowererMD::CreateStackArgumentsSlotOpnd(this->m_func)); } instr->m_opcode = Js::OpCode::MOV; @@ -611,8 +620,8 @@ LowererMD::LoadArgumentCount(IR::Instr * instr) { // Pull the arg count from the interpreter frame instance that was passed in. // (The callinfo in the loop body's frame just shows the single parameter, the interpreter frame.) - Assert(this->m_func->m_loopParamSym); - IR::RegOpnd *baseOpnd = IR::RegOpnd::New(this->m_func->m_loopParamSym, TyMachReg, this->m_func); + Assert(this->m_func->GetLoopParamSym()); + IR::RegOpnd *baseOpnd = IR::RegOpnd::New(this->m_func->GetLoopParamSym(), TyMachReg, this->m_func); size_t offset = Js::InterpreterStackFrame::GetOffsetOfInSlotsCount(); instr->SetSrc1(IR::IndirOpnd::New(baseOpnd, (int32)offset, TyInt32, this->m_func)); } @@ -649,16 +658,65 @@ LowererMD::LoadHeapArgsCached(IR::Instr * instrArgs) ///---------------------------------------------------------------------------- IR::Instr * -LowererMD::ChangeToHelperCall(IR::Instr * callInstr, IR::JnHelperMethod helperMethod, IR::LabelInstr *labelBailOut, +LowererMD::ChangeToHelperCall(IR::Instr *callInstr, IR::JnHelperMethod helperMethod, IR::LabelInstr *labelBailOut, IR::Opnd *opndBailOutArg, IR::PropertySymOpnd *propSymOpnd, bool isHelperContinuation) { + // Clear lazy bailout when we realize that the function cannot be reentrant in lowerer + // since they won't have side effects + if (callInstr->HasLazyBailOut() && !HelperMethodAttributes::CanBeReentrant(helperMethod)) + { + callInstr->ClearLazyBailOut(); + } + + // If we want a LazyBailOut on an instruction with preop bailout, we + // would need to have a BailOnImplicitCallPreOp on that instruction. + // There are two ways we can go about this: + // 1. During GlobOpt::GenerateLazyBailOut, simply use BailOnImplicitCallPreOp + // as the main bailout kind for that instruction. This wouldn't require + // any special treatment in the lowerer. However, there are a few problems: + // a) The instruction might have some other main bailout kind already + // attached. + // + First scenario is that the bailout kind already prevents + // implicit calls from happening, which leaves us to just correctly + // implement GlobOpt::IsLazyBailOutCurrentlyNeeded so that it doesn't + // return true when we already have such bailouts by incorporating + // GlobOpt::MayNeedBailOnImplicitCall. + // + Second scenario is when that bailout kind doesn't really help with + // preventing implicit calls. Theoretically, this shouldn't be a problem + // because we should be able to support bail on implicit calls if that + // instruction might have implicit calls. But there are some dark patterns + // such as NewScObjArray having a BailOnNotNative attached to it. + // Those will need to be rewritten before we proceed. + // + // b) We will have to change our BailOutKind bit validation because some of the + // kinds don't currently expect to go together with BailOnImplicitCall. This + // is probably less of a problem and more of just finding those cases and + // adding allowed bit combinations. + // + // 2. Just attach the lazy bailout bit onto the BailOutKind and use this opportunity + // to also lower an additional BailOnImplicitCallPreOp. The problem is we aren't + // sure if those instructions will go through `ChangeToHelperCall` at all since + // this right now only handles BailOutOnNotPrimitive, BailOutOnPowIntIntOverflow, + // and BailOutOnImplicitCalls. + if (callInstr->HasLazyBailOut() && callInstr->HasPreOpBailOut() && + !BailOutInfo::IsBailOutOnImplicitCalls(callInstr->GetBailOutKind())) + { + AssertMsg(false, "Not implemented"); + } + + const bool hasLazyBailOut = callInstr->HasLazyBailOut(); + + // Cache BailOutInfo so that we can copy it later for lazy bailout + BailOutInfo * const bailOutInfo = callInstr->HasBailOutInfo() ? callInstr->GetBailOutInfo() : nullptr; + #if DBG this->m_lowerer->ReconcileWithLowererStateOnHelperCall(callInstr, helperMethod); #endif IR::Instr * bailOutInstr = callInstr; if (callInstr->HasBailOutInfo()) { - IR::BailOutKind bailOutKind = callInstr->GetBailOutKind(); + const IR::BailOutKind bailOutKind = callInstr->GetBailOutKind(); + if (bailOutKind == IR::BailOutOnNotPrimitive || bailOutKind == IR::BailOutOnPowIntIntOverflow) { @@ -671,10 +729,14 @@ LowererMD::ChangeToHelperCall(IR::Instr * callInstr, IR::JnHelperMethod helperM : Js::OpCode::BailOnPowIntIntOverflow; bailOutInstr->SetSrc1(opndBailOutArg); } - else + else if (BailOutInfo::IsBailOutOnImplicitCalls(bailOutKind)) { bailOutInstr = this->m_lowerer->SplitBailOnImplicitCall(callInstr); } + else + { + AssertMsg(BailOutInfo::HasLazyBailOut(bailOutKind), "Unexpected BailOutKind, are we adding new BailOutKind on instructions?"); + } } callInstr->m_opcode = Js::OpCode::CALL; @@ -692,24 +754,66 @@ LowererMD::ChangeToHelperCall(IR::Instr * callInstr, IR::JnHelperMethod helperM if (bailOutInstr != callInstr) { + const Js::OpCode opcode = bailOutInstr->m_opcode; // The bailout needs to be lowered after we lower the helper call because the helper argument - // has already been loaded. We need to drain them on AMD64 before starting another helper call - if (bailOutInstr->m_opcode == Js::OpCode::BailOnNotObject) - { - this->m_lowerer->LowerBailOnNotObject(bailOutInstr, nullptr, labelBailOut); - } - else if (bailOutInstr->m_opcode == Js::OpCode::BailOnNotPrimitive || - bailOutInstr->m_opcode == Js::OpCode::BailOnPowIntIntOverflow) + // has already been loaded. We need to drain them on AMD64 before starting another helper call + if (opcode == Js::OpCode::BailOnNotPrimitive || + opcode == Js::OpCode::BailOnPowIntIntOverflow) { this->m_lowerer->LowerBailOnTrue(bailOutInstr, labelBailOut); } - else if (bailOutInstr->m_opcode == Js::OpCode::BailOut) + else if (opcode == Js::OpCode::BailOnNotEqual) { - this->m_lowerer->GenerateBailOut(bailOutInstr, nullptr, labelBailOut); + // `SplitBailOnImplicitCall` above changes the opcode to BailOnNotEqual + Assert(BailOutInfo::IsBailOutOnImplicitCalls(bailOutInstr->GetBailOutKind())); + this->m_lowerer->LowerBailOnEqualOrNotEqual(bailOutInstr, nullptr, labelBailOut, propSymOpnd, isHelperContinuation); } else { - this->m_lowerer->LowerBailOnEqualOrNotEqual(bailOutInstr, nullptr, labelBailOut, propSymOpnd, isHelperContinuation); + AssertMsg(false, "Unexpected OpCode for BailOutInstruction"); + } + + // Create BailOutInfo and BailOutRecord for helper call + // Example: + // We transform: + // ``` + // call someHelper + // ... + // call SaveAllRegisterAndBailOut (BailOutReason) + // ``` + // to + // ``` + // call someHelper (LazyBailOut) + // ... + // call SaveAllRegisterAndBailOut (BailOutReason) + // ``` + // so that the call to helper has the correct BailOutRecord filled during RegAlloc. + if (hasLazyBailOut) + { + Assert(bailOutInfo != nullptr); + Assert(!callInstr->HasBailOutInfo()); + Assert(callInstr->m_opcode == Js::OpCode::CALL); + + callInstr = callInstr->ConvertToBailOutInstrWithBailOutInfoCopy(bailOutInfo, IR::LazyBailOut); + + Assert(callInstr->HasBailOutInfo() && callInstr->GetBailOutInfo() != bailOutInfo); + + BailOutInfo *bailOutInfoCopy = callInstr->GetBailOutInfo(); + + BailOutRecord *bailOutRecord = NativeCodeDataNewZ( + this->m_func->GetNativeCodeDataAllocator(), + BailOutRecord, + bailOutInfoCopy->bailOutOffset, + bailOutInfoCopy->polymorphicCacheIndex, + callInstr->GetBailOutKind(), + bailOutInfoCopy->bailOutFunc + ); + +#if ENABLE_DEBUG_CONFIG_OPTIONS + bailOutRecord->bailOutOpcode = bailOutInfoCopy->bailOutOpcode; +#endif + + bailOutInfoCopy->bailOutRecord = bailOutRecord; } } @@ -753,7 +857,11 @@ LowererMD::ChangeToAssign(IR::Instr * instr) IR::Instr * LowererMD::ChangeToAssign(IR::Instr * instr, IRType type) { - Assert(!instr->HasBailOutInfo() || instr->GetBailOutKind() == IR::BailOutExpectingString); + Assert( + !instr->HasBailOutInfo() || + instr->GetBailOutKind() == IR::BailOutExpectingString || + instr->HasLazyBailOut() + ); #if _M_IX86 if (IRType_IsInt64(type)) @@ -920,6 +1028,8 @@ LowererMD::LowerCondBranch(IR::Instr * instr) case Js::OpCode::BrFalse_A: case Js::OpCode::BrNotNull_A: case Js::OpCode::BrOnObject_A: + case Js::OpCode::BrOnObjectOrNull_A: + case Js::OpCode::BrOnConstructor_A: case Js::OpCode::BrOnClassConstructor: case Js::OpCode::BrOnBaseConstructorKind: Assert(!opndSrc1->IsFloat64()); @@ -1284,7 +1394,7 @@ void LowererMD::ChangeToIMul(IR::Instr *const instr, bool hasOverflowCheck) EmitInt4Instr(instr); // IMUL2 } -const uint16 +uint16 LowererMD::GetFormalParamOffset() { //In x86\x64 formal params were offset from EBP by the EBP chain, return address, and the 2 non-user params @@ -2360,21 +2470,21 @@ LowererMD::GenerateFastDivByPow2(IR::Instr *instr) ///---------------------------------------------------------------------------- bool -LowererMD::GenerateFastCmSrEqConst(IR::Instr *instr) +LowererMD::GenerateFastCmSrXxConst(IR::Instr *instr) { // // Given: - // s1 = CmSrEq_A s2, s3 + // s1 = CmSrXX_A s2, s3 // where either s2 or s3 is 'null', 'true' or 'false' // // Generate: // // CMP s2, s3 - // JEQ $mov_true - // MOV s1, Library.GetFalse() + // JEQ $mov_res + // MOV s1, eq ? Library.GetFalse() : Library.GetTrue(); // JMP $done - // $mov_true: - // MOV s1, Library.GetTrue() + // $mov_res: + // MOV s1, eq ? Library.GetTrue() : Library.GetFalse() // $done: // @@ -2382,8 +2492,9 @@ LowererMD::GenerateFastCmSrEqConst(IR::Instr *instr) IR::Opnd *opnd = instr->GetSrc1(); IR::RegOpnd *opndReg = instr->GetSrc2()->AsRegOpnd(); - IR::LabelInstr *labelMovTrue = IR::LabelInstr::New(Js::OpCode::Label, this->m_func); + IR::LabelInstr *labelMovRes = IR::LabelInstr::New(Js::OpCode::Label, this->m_func); IR::LabelInstr *labelDone = IR::LabelInstr::New(Js::OpCode::Label, this->m_func); + bool isEqual = !instr->IsNeq(); if (!opnd->IsRegOpnd()) { @@ -2397,13 +2508,13 @@ LowererMD::GenerateFastCmSrEqConst(IR::Instr *instr) Assert(opnd->IsRegOpnd()); // CMP s2, s3 - // JEQ $mov_true - this->m_lowerer->InsertCompareBranch(opnd, opndReg->m_sym->GetConstOpnd(), Js::OpCode::BrEq_A, labelMovTrue, instr); + // JEQ $mov_res + this->m_lowerer->InsertCompareBranch(opnd, m_lowerer->GetConstRegOpnd(opndReg, instr), Js::OpCode::BrEq_A, labelMovRes, instr); - // MOV s1, 'false' + // MOV s1, eq ? Library.GetFalse() : Library.GetTrue(); IR::Instr *instrMov = IR::Instr::New(Js::OpCode::MOV, instr->GetDst(), - m_lowerer->LoadLibraryValueOpnd(instr, LibraryValue::ValueFalse), + m_lowerer->LoadLibraryValueOpnd(instr, isEqual ? LibraryValue::ValueFalse : LibraryValue::ValueTrue), m_func); instr->InsertBefore(instrMov); @@ -2411,14 +2522,14 @@ LowererMD::GenerateFastCmSrEqConst(IR::Instr *instr) IR::BranchInstr *jmp = IR::BranchInstr::New(Js::OpCode::JMP, labelDone, this->m_func); instr->InsertBefore(jmp); - // $mov_true: - instr->InsertBefore(labelMovTrue); + // $mov_res: + instr->InsertBefore(labelMovRes); - // MOV s1, 'true' + // MOV s1, eq ? Library.GetTrue() : Library.GetFalse(); instr->m_opcode = Js::OpCode::MOV; instr->UnlinkSrc1(); instr->UnlinkSrc2(); - instr->SetSrc1(m_lowerer->LoadLibraryValueOpnd(instr, LibraryValue::ValueTrue)); + instr->SetSrc1(m_lowerer->LoadLibraryValueOpnd(instr, isEqual ? LibraryValue::ValueTrue : LibraryValue::ValueFalse)); instr->ClearBailOutInfo(); Legalize(instr); @@ -2644,9 +2755,7 @@ void LowererMD::GenerateFastCmXx(IR::Instr *instr) bool isFloatSrc = src1->IsFloat(); bool isInt64Src = src1->IsInt64(); Assert(!isFloatSrc || src2->IsFloat()); - Assert(!isFloatSrc || isIntDst); Assert(!isInt64Src || src2->IsInt64()); - Assert(!isInt64Src || isIntDst); Assert(!isFloatSrc || AutoSystemInfo::Data.SSE2Available()); IR::Opnd *opnd; IR::Instr *newInstr; @@ -2675,8 +2784,11 @@ void LowererMD::GenerateFastCmXx(IR::Instr *instr) done = instr; } + bool isNegOpt = instr->m_opcode == Js::OpCode::CmNeq_A || instr->m_opcode == Js::OpCode::CmSrNeq_A; + bool initDstToFalse = true; if (isIntDst) { + // Fast path for int src with destination type specialized to int // reg = MOV 0 will get peeped to XOR reg, reg which sets the flags. // Put the MOV before the CMP, but use a tmp if dst == src1/src2 if (dst->IsEqual(src1) || dst->IsEqual(src2)) @@ -2684,7 +2796,7 @@ void LowererMD::GenerateFastCmXx(IR::Instr *instr) tmp = IR::RegOpnd::New(dst->GetType(), this->m_func); } // dst = MOV 0 - if (isFloatSrc && instr->m_opcode == Js::OpCode::CmNeq_A) + if (isFloatSrc && isNegOpt) { opnd = IR::IntConstOpnd::New(1, TyInt32, this->m_func); } @@ -2694,6 +2806,22 @@ void LowererMD::GenerateFastCmXx(IR::Instr *instr) } m_lowerer->InsertMove(tmp, opnd, done); } + else if (isFloatSrc) + { + // Fast path for float src when destination is a var + // Assign default value for destination in case either src is NaN + Assert(dst->IsVar()); + if (isNegOpt) + { + opnd = this->m_lowerer->LoadLibraryValueOpnd(instr, LibraryValue::ValueTrue); + } + else + { + opnd = this->m_lowerer->LoadLibraryValueOpnd(instr, LibraryValue::ValueFalse); + initDstToFalse = false; + } + Lowerer::InsertMove(tmp, opnd, done); + } Js::OpCode cmpOp; if (isFloatSrc) @@ -2724,7 +2852,9 @@ void LowererMD::GenerateFastCmXx(IR::Instr *instr) done->InsertBefore(newInstr); } - if (!isIntDst) + // For all cases where the operator is a comparison, we do not want to emit False value + // since it has already been generated in the if block before. + if (!isIntDst && initDstToFalse) { opnd = this->m_lowerer->LoadLibraryValueOpnd(instr, LibraryValue::ValueFalse); Lowerer::InsertMove(tmp, opnd, done); @@ -2735,11 +2865,13 @@ void LowererMD::GenerateFastCmXx(IR::Instr *instr) { case Js::OpCode::CmEq_I4: case Js::OpCode::CmEq_A: + case Js::OpCode::CmSrEq_A: useCC = isIntDst ? Js::OpCode::SETE : Js::OpCode::CMOVE; break; case Js::OpCode::CmNeq_I4: case Js::OpCode::CmNeq_A: + case Js::OpCode::CmSrNeq_A: useCC = isIntDst ? Js::OpCode::SETNE : Js::OpCode::CMOVNE; break; @@ -3823,7 +3955,7 @@ LowererMD::GenerateFastLdMethodFromFlags(IR::Instr * instrLdFld) IR::PropertySymOpnd * propertySymOpnd = opndSrc->AsPropertySymOpnd(); - Assert(!instrLdFld->DoStackArgsOpt(this->m_func)); + Assert(!instrLdFld->DoStackArgsOpt()); if (propertySymOpnd->IsTypeCheckSeqCandidate()) { @@ -4326,13 +4458,13 @@ LowererMD::GenerateFastScopedStFld(IR::Instr * instrStScopedFld) } IR::Opnd * -LowererMD::CreateStackArgumentsSlotOpnd() +LowererMD::CreateStackArgumentsSlotOpnd(Func *func) { - StackSym *sym = StackSym::New(TyMachReg, this->m_func); + StackSym *sym = StackSym::New(TyMachReg, func); sym->m_offset = -MachArgsSlotOffset; sym->m_allocated = true; - return IR::SymOpnd::New(sym, TyMachReg, this->m_func); + return IR::SymOpnd::New(sym, TyMachReg, func); } IR::RegOpnd * @@ -7780,12 +7912,25 @@ void LowererMD::GenerateFastInlineBuiltInCall(IR::Instr* instr, IR::JnHelperMeth switch (instr->m_opcode) { case Js::OpCode::InlineMathSqrt: - // Sqrt maps directly to the SSE2 instruction. - // src and dst should already be XMM registers, all we need is just change the opcode. - Assert(helperMethod == (IR::JnHelperMethod)0); - Assert(instr->GetSrc2() == nullptr); - instr->m_opcode = instr->GetSrc1()->IsFloat64() ? Js::OpCode::SQRTSD : Js::OpCode::SQRTSS; - break; + { + // Sqrt maps directly to the SSE2 instruction. + // src and dst should already be XMM registers, all we need is just change the opcode. + Assert(helperMethod == (IR::JnHelperMethod)0); + Assert(instr->GetSrc2() == nullptr); + instr->m_opcode = instr->GetSrc1()->IsFloat64() ? Js::OpCode::SQRTSD : Js::OpCode::SQRTSS; + + IR::Opnd *src = instr->GetSrc1(); + IR::Opnd *dst = instr->GetDst(); + if (!src->IsEqual(dst)) + { + Assert(src->IsRegOpnd() && dst->IsRegOpnd()); + // Force source to be the same as destination to break false dependency on the register + Lowerer::InsertMove(dst, src, instr, false /* generateWriteBarrier */); + instr->ReplaceSrc1(dst); + } + + break; + } case Js::OpCode::InlineMathAbs: Assert(helperMethod == (IR::JnHelperMethod)0); @@ -8233,7 +8378,7 @@ void LowererMD::GenerateFastInlineBuiltInCall(IR::Instr* instr, IR::JnHelperMeth // CMP src1, src2 if(dst->IsInt32()) - { + { if(min) { // JLT $continueLabel diff --git a/lib/Backend/LowerMDShared.h b/lib/Backend/LowerMDShared.h index 2b57f71de31..23423664a78 100644 --- a/lib/Backend/LowerMDShared.h +++ b/lib/Backend/LowerMDShared.h @@ -63,7 +63,7 @@ class LowererMD static void ChangeToSub(IR::Instr *const instr, const bool needFlags); static void ChangeToShift(IR::Instr *const instr, const bool needFlags); static void ChangeToIMul(IR::Instr *const instr, const bool hasOverflowCheck = false); - static const uint16 GetFormalParamOffset(); + static uint16 GetFormalParamOffset(); static const Js::OpCode MDUncondBranchOpcode; static const Js::OpCode MDMultiBranchOpcode; static const Js::OpCode MDExtend32Opcode; @@ -103,10 +103,10 @@ class LowererMD static IR::Instr * ChangeToAssignNoBarrierCheck(IR::Instr * instr); static IR::Instr * ChangeToAssign(IR::Instr * instr, IRType type); static void ImmedSrcToReg(IR::Instr * instr, IR::Opnd * newOpnd, int srcNum); + static IR::Opnd * CreateStackArgumentsSlotOpnd(Func *func); IR::Instr * LoadInputParamCount(IR::Instr * instr, int adjust = 0, bool needFlags = false); IR::Instr * LoadStackArgPtr(IR::Instr * instr); - IR::Opnd * CreateStackArgumentsSlotOpnd(); IR::Instr * LoadArgumentsFromFrame(IR::Instr * instr); IR::Instr * LoadArgumentCount(IR::Instr * instr); IR::Instr * LoadHeapArguments(IR::Instr * instr); @@ -143,7 +143,7 @@ class LowererMD #if FLOATVAR IR::RegOpnd* CheckFloatAndUntag(IR::RegOpnd * opndSrc, IR::Instr * insertInstr, IR::LabelInstr* labelHelper); #endif - bool GenerateFastCmSrEqConst(IR::Instr *instr); + bool GenerateFastCmSrXxConst(IR::Instr *instr); bool GenerateFastCmXxTaggedInt(IR::Instr *instr, bool isInHelper = false); void GenerateFastCmXxI4(IR::Instr *instr); void GenerateFastCmXxR8(IR::Instr *instr); diff --git a/lib/Backend/LowerMDSharedSimd128.cpp b/lib/Backend/LowerMDSharedSimd128.cpp index f2a8c5a9d4b..73a239bc40f 100644 --- a/lib/Backend/LowerMDSharedSimd128.cpp +++ b/lib/Backend/LowerMDSharedSimd128.cpp @@ -932,7 +932,8 @@ IR::Instr* LowererMD::Simd128LowerNeg(IR::Instr *instr) IR::Opnd* dst = instr->GetDst(); IR::Opnd* src1 = instr->GetSrc1(); Js::OpCode addOpcode = Js::OpCode::PADDD; - void * allOnes = (void*)&X86_ALL_ONES_I4; + ThreadContextInfo* threadContextInfo = m_func->GetThreadContextInfo(); + intptr_t allOnes = threadContextInfo->GetX86AllOnesI4Addr(); Assert(dst->IsRegOpnd() && dst->IsSimd128()); Assert(src1->IsRegOpnd() && src1->IsSimd128()); @@ -946,12 +947,12 @@ IR::Instr* LowererMD::Simd128LowerNeg(IR::Instr *instr) case Js::OpCode::Simd128_Neg_I8: case Js::OpCode::Simd128_Neg_U8: addOpcode = Js::OpCode::PADDW; - allOnes = (void*)&X86_ALL_ONES_I8; + allOnes = threadContextInfo->GetX86AllOnesI8Addr(); break; case Js::OpCode::Simd128_Neg_I16: case Js::OpCode::Simd128_Neg_U16: addOpcode = Js::OpCode::PADDB; - allOnes = (void*)&X86_ALL_ONES_I16; + allOnes = threadContextInfo->GetX86AllOnesI16Addr(); break; default: Assert(UNREACHED); @@ -962,7 +963,7 @@ IR::Instr* LowererMD::Simd128LowerNeg(IR::Instr *instr) instr->InsertBefore(pInstr); // PANDN dst, dst, 0xfff...f - pInstr = IR::Instr::New(Js::OpCode::PANDN, dst, dst, IR::MemRefOpnd::New(m_func->GetThreadContextInfo()->GetX86AllNegOnesAddr(), src1->GetType(), m_func), m_func); + pInstr = IR::Instr::New(Js::OpCode::PANDN, dst, dst, IR::MemRefOpnd::New(threadContextInfo->GetX86AllNegOnesAddr(), src1->GetType(), m_func), m_func); instr->InsertBefore(pInstr); Legalize(pInstr); @@ -1162,7 +1163,7 @@ IR::Instr* LowererMD::Simd128LowerShift(IR::Instr *instr) IR::RegOpnd *tmp1 = IR::RegOpnd::New(src1->GetType(), m_func); IR::RegOpnd *tmp2 = IR::RegOpnd::New(src1->GetType(), m_func); - //Shift amount: The shift amout is masked by [ElementSize] * 8 + //Shift amount: The shift amount is masked by [ElementSize] * 8 //The masked Shift amount is moved to xmm register //AND shamt, shmask, shamt //MOVD tmp0, shamt @@ -3306,4 +3307,4 @@ BYTE LowererMD::Simd128GetTypedArrBytesPerElem(ValueType arrType) return (1 << Lowerer::GetArrayIndirScale(arrType)); } -#endif \ No newline at end of file +#endif diff --git a/lib/Backend/NativeCodeGenerator.cpp b/lib/Backend/NativeCodeGenerator.cpp index 8925d809cbe..2997e5dacae 100644 --- a/lib/Backend/NativeCodeGenerator.cpp +++ b/lib/Backend/NativeCodeGenerator.cpp @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #include "Backend.h" @@ -160,11 +161,7 @@ void NativeCodeGenerator::Close() // Close FreeLoopBodyJobManager first, as it depends on NativeCodeGenerator to be open before it's removed this->freeLoopBodyManager.Close(); - // Remove only if it is not updated in the debug mode (and which goes to interpreter mode). - if (!hasUpdatedQForDebugMode || Js::Configuration::Global.EnableJitInDebugMode()) - { - Processor()->RemoveManager(this); - } + Processor()->RemoveManager(this); this->isClosed = true; @@ -250,8 +247,11 @@ NativeCodeGenerator::GenerateAllFunctions(Js::FunctionBody * fn) for (uint i = 0; i < fn->GetLoopCount(); i++) { Js::LoopHeader * loopHeader = fn->GetLoopHeader(i); - Js::EntryPointInfo * entryPointInfo = loopHeader->GetCurrentEntryPointInfo(); - this->GenerateLoopBody(fn, loopHeader, entryPointInfo); + if (loopHeader->hasYield == false) + { + Js::EntryPointInfo * entryPointInfo = loopHeader->GetCurrentEntryPointInfo(); + this->GenerateLoopBody(fn, loopHeader, entryPointInfo); + } } } else @@ -401,7 +401,7 @@ void NativeCodeGenerator::Jit_TransitionFromSimpleJit(void *const framePointer) { JIT_HELPER_NOT_REENTRANT_NOLOCK_HEADER(TransitionFromSimpleJit); TransitionFromSimpleJit( - Js::ScriptFunction::FromVar(Js::JavascriptCallStackLayout::FromFramePointer(framePointer)->functionObject)); + Js::VarTo(Js::JavascriptCallStackLayout::FromFramePointer(framePointer)->functionObject)); JIT_HELPER_END(TransitionFromSimpleJit); } @@ -635,6 +635,7 @@ void NativeCodeGenerator::GenerateLoopBody(Js::FunctionBody * fn, Js::LoopHeader ASSERT_THREAD(); Assert(fn->GetScriptContext()->GetNativeCodeGenerator() == this); Assert(entryPoint->jsMethod == nullptr); + Assert(!loopHeader->hasYield); #if DBG_DUMP if (PHASE_TRACE1(Js::JITLoopBodyPhase)) @@ -740,7 +741,7 @@ NativeCodeGenerator::IsValidVar(const Js::Var var, Recycler *const recycler) } #endif - RecyclableObject *const recyclableObject = RecyclableObject::UnsafeFromVar(var); + RecyclableObject *const recyclableObject = UnsafeVarTo(var); if(!recycler->IsValidObject(recyclableObject, sizeof(*recyclableObject))) { return false; @@ -788,7 +789,7 @@ NativeCodeGenerator::IsValidVar(const Js::Var var, Recycler *const recycler) return false; } - // Not using DynamicObject::FromVar since there's a virtual call in there + // Not using VarTo since there's a virtual call in there DynamicObject *const object = static_cast(recyclableObject); if(!recycler->IsValidObject(object, sizeof(*object))) { @@ -968,7 +969,7 @@ NativeCodeGenerator::CodeGen(PageAllocator * pageAllocator, CodeGenWorkItem* wor throw Js::OperationAbortedException(); } - + #if ENABLE_OOP_NATIVE_CODEGEN if (JITManager::GetJITManager()->IsOOPJITEnabled()) { @@ -1024,7 +1025,7 @@ NativeCodeGenerator::CodeGen(PageAllocator * pageAllocator, CodeGenWorkItem* wor Output::Flush(); } - epInfo->GetNativeEntryPointData()->SetFrameHeight(jitWriteData.frameHeight); + epInfo->GetNativeEntryPointData()->SetFrameHeight(jitWriteData.frameHeight); if (workItem->Type() == JsFunctionType) { @@ -2014,10 +2015,7 @@ NativeCodeGenerator::UpdateQueueForDebugMode() this->hasUpdatedQForDebugMode = true; - if (Js::Configuration::Global.EnableJitInDebugMode()) - { - Processor()->AddManager(this); - } + Processor()->AddManager(this); } void @@ -2309,7 +2307,7 @@ NativeCodeGenerator::GatherCodeGenData( { // TODO: For now, we create the native entry point data and the jit transfer data when we queue up // the entry point for code gen, but not clear/free then then the work item got knocked off the queue - // without code gen happening. + // without code gen happening. nativeEntryPointData = entryPoint->EnsureNativeEntryPointData(); nativeEntryPointData->EnsureJitTransferData(recycler); @@ -2429,11 +2427,11 @@ NativeCodeGenerator::GatherCodeGenData( { Js::InlineCache *inlineCache = nullptr; - if(function && Js::ScriptFunctionWithInlineCache::Is(function)) + if(function && Js::VarIs(function)) { - if (Js::ScriptFunctionWithInlineCache::FromVar(function)->GetInlineCaches() != nullptr) + if (Js::VarTo(function)->GetInlineCaches() != nullptr) { - inlineCache = Js::ScriptFunctionWithInlineCache::FromVar(function)->GetInlineCache(i); + inlineCache = Js::VarTo(function)->GetInlineCache(i); } } else @@ -2565,11 +2563,11 @@ NativeCodeGenerator::GatherCodeGenData( } } // Even if the FldInfo says that the field access may be polymorphic, be optimistic that if the function object has inline caches, they'll be monomorphic - else if(function && Js::ScriptFunctionWithInlineCache::Is(function) && (cacheType & Js::FldInfo_InlineCandidate || !polymorphicCacheOnFunctionBody)) + else if(function && Js::VarIs(function) && (cacheType & Js::FldInfo_InlineCandidate || !polymorphicCacheOnFunctionBody)) { - if (Js::ScriptFunctionWithInlineCache::FromVar(function)->GetInlineCaches() != nullptr) + if (Js::VarTo(function)->GetInlineCaches() != nullptr) { - Js::InlineCache *inlineCache = Js::ScriptFunctionWithInlineCache::FromVar(function)->GetInlineCache(i); + Js::InlineCache *inlineCache = Js::VarTo(function)->GetInlineCache(i); ObjTypeSpecFldInfo* objTypeSpecFldInfo = nullptr; if(!PHASE_OFF(Js::ObjTypeSpecPhase, functionBody) || !PHASE_OFF(Js::FixedMethodsPhase, functionBody)) @@ -2702,8 +2700,8 @@ NativeCodeGenerator::GatherCodeGenData( // Clone polymorphic inline caches for runtime usage in this inlinee. The JIT should only use the pointers to // the inline caches, as their cached data is not guaranteed to be stable while jitting. Js::InlineCache *const inlineCache = - function && Js::ScriptFunctionWithInlineCache::Is(function) - ? (Js::ScriptFunctionWithInlineCache::FromVar(function)->GetInlineCaches() != nullptr ? Js::ScriptFunctionWithInlineCache::FromVar(function)->GetInlineCache(i) : nullptr) + function && Js::VarIs(function) + ? (Js::VarTo(function)->GetInlineCaches() != nullptr ? Js::VarTo(function)->GetInlineCache(i) : nullptr) : functionBody->GetInlineCache(i); if (inlineCache != nullptr) @@ -2817,6 +2815,38 @@ NativeCodeGenerator::GatherCodeGenData( if (!isJitTimeDataComputed) { jitTimeData->AddInlinee(recycler, profiledCallSiteId, inlinee); + + if (inlinee->IsBuiltInApplyFunction() || inlinee->IsBuiltInCallFunction()) + { + // .call/.apply targets + Js::FunctionInfo *const targetFunctionInfo = inliningDecider.InlineCallApplyTarget(functionBody, profiledCallSiteId, recursiveInlineDepth); + if (targetFunctionInfo != nullptr) + { + Js::FunctionBody *const targetFunctionBody = targetFunctionInfo->GetFunctionBody(); + Js::ProfileId callApplyCallSiteId = functionBody->GetCallSiteToCallApplyCallSiteArray()[profiledCallSiteId]; + if (!targetFunctionBody) + { + jitTimeData->AddCallApplyTargetInlinee(recycler, profiledCallSiteId, callApplyCallSiteId, targetFunctionInfo); + } + else if (targetFunctionBody != functionBody) + { + Js::FunctionCodeGenJitTimeData * targetJittimeData = jitTimeData->AddCallApplyTargetInlinee(recycler, profiledCallSiteId, callApplyCallSiteId, targetFunctionInfo); + Js::FunctionCodeGenRuntimeData * targetRuntimeData = IsInlinee ? runtimeData->EnsureCallApplyTargetInlinee(recycler, callApplyCallSiteId, targetFunctionBody) : functionBody->EnsureCallApplyTargetInlineeCodeGenRuntimeData(recycler, callApplyCallSiteId, targetFunctionBody); + + GatherCodeGenData( + recycler, + topFunctionBody, + targetFunctionBody, + entryPoint, + inliningDecider, + objTypeSpecFldInfoList, + targetJittimeData, + targetRuntimeData); + + AddInlineCacheStats(jitTimeData, targetJittimeData); + } + } + } } continue; } @@ -2832,11 +2862,11 @@ NativeCodeGenerator::GatherCodeGenData( Js::InlineCache * inlineCache = nullptr; if ((ldFldInlineCacheIndex != Js::Constants::NoInlineCacheIndex) && (ldFldInlineCacheIndex < functionBody->GetInlineCacheCount())) { - if(function && Js::ScriptFunctionWithInlineCache::Is(function)) + if(function && Js::VarIs(function)) { - if (Js::ScriptFunctionWithInlineCache::FromVar(function)->GetInlineCaches() != nullptr) + if (Js::VarTo(function)->GetInlineCaches() != nullptr) { - inlineCache = Js::ScriptFunctionWithInlineCache::FromVar(function)->GetInlineCache(ldFldInlineCacheIndex); + inlineCache = Js::VarTo(function)->GetInlineCache(ldFldInlineCacheIndex); } } else @@ -3015,13 +3045,7 @@ NativeCodeGenerator::GatherCodeGenData( const auto inlineeFunctionBody = inlinee->GetFunctionBody(); if(!inlineeFunctionBody) { - if (( -#ifdef ENABLE_DOM_FAST_PATH - inlinee->GetLocalFunctionId() == Js::JavascriptBuiltInFunction::DOMFastPathGetter || - inlinee->GetLocalFunctionId() == Js::JavascriptBuiltInFunction::DOMFastPathSetter || -#endif - (inlineeFunctionInfo->GetAttributes() & Js::FunctionInfo::Attributes::BuiltInInlinableAsLdFldInlinee) != 0) && - !isJitTimeDataComputed) + if (((inlineeFunctionInfo->GetAttributes() & Js::FunctionInfo::Attributes::BuiltInInlinableAsLdFldInlinee) != 0) && !isJitTimeDataComputed) { jitTimeData->AddLdFldInlinee(recycler, inlineCacheIndex, inlinee); } @@ -3133,7 +3157,7 @@ NativeCodeGenerator::GatherCodeGenData(Js::FunctionBody *const topFunctionBody, topFunctionBody->GetDisplayName(), topFunctionBody->GetDebugNumberSet(debugStringBuffer), functionBody->GetDisplayName(), functionBody->GetDebugNumberSet(debugStringBuffer2)); } #endif - GatherCodeGenData(recycler, topFunctionBody, functionBody, entryPoint, inliningDecider, objTypeSpecFldInfoList, jitTimeData, nullptr, function ? Js::JavascriptFunction::FromVar(function) : nullptr, 0); + GatherCodeGenData(recycler, topFunctionBody, functionBody, entryPoint, inliningDecider, objTypeSpecFldInfoList, jitTimeData, nullptr, function ? Js::VarTo(function) : nullptr, 0); jitTimeData->sharedPropertyGuards = entryPoint->GetNativeEntryPointData()->GetSharedPropertyGuards(recycler, jitTimeData->sharedPropertyGuardCount); @@ -3220,12 +3244,6 @@ NativeCodeGenerator::EnterScriptStart() return; } - // Don't need to do anything if we're in debug mode - if (this->scriptContext->IsScriptContextInDebugMode() && !Js::Configuration::Global.EnableJitInDebugMode()) - { - return; - } - // We've already done a few calls to this scriptContext, don't bother waiting. if (scriptContext->callCount >= 3) { @@ -3283,7 +3301,7 @@ void FreeNativeCodeGenAllocation(Js::ScriptContext *scriptContext, Js::JavascriptMethod codeAddress, Js::JavascriptMethod thunkAddress) { if (!scriptContext->GetNativeCodeGenerator()) - { + { return; } diff --git a/lib/Backend/NativeEntryPointData.cpp b/lib/Backend/NativeEntryPointData.cpp index 660df2a2782..fa46e2def4e 100644 --- a/lib/Backend/NativeEntryPointData.cpp +++ b/lib/Backend/NativeEntryPointData.cpp @@ -393,7 +393,8 @@ NativeEntryPointData::Cleanup(ScriptContext * scriptContext, bool isShutdown, bo } InProcNativeEntryPointData::InProcNativeEntryPointData() : - nativeCodeData(nullptr), inlineeFrameMap(nullptr), bailoutRecordMap(nullptr) + nativeCodeData(nullptr), inlineeFrameMap(nullptr), sortedLazyBailoutRecordList(nullptr), + lazyBailOutRecordSlotOffset{0}, lazyBailOutThunkOffset{0} #if !FLOATVAR , numberChunks(nullptr) #endif @@ -428,20 +429,68 @@ InProcNativeEntryPointData::RecordInlineeFrameMap(JsUtil::ListIsOOPJITEnabled()); - return this->bailoutRecordMap; + return this->sortedLazyBailoutRecordList; } void -InProcNativeEntryPointData::RecordBailOutMap(JsUtil::List* bailoutMap) +InProcNativeEntryPointData::SetSortedLazyBailOutRecordList(JsUtil::List *sortedLazyBailOutRecordList) { Assert(!JITManager::GetJITManager()->IsOOPJITEnabled()); - Assert(this->bailoutRecordMap == nullptr); - this->bailoutRecordMap = HeapNew(BailOutRecordMap, &HeapAllocator::Instance); - this->bailoutRecordMap->Copy(bailoutMap); + Assert(this->sortedLazyBailoutRecordList == nullptr); + +#if DBG + + // Making sure the list is sorted + + Assert(sortedLazyBailOutRecordList != nullptr); + if (sortedLazyBailOutRecordList->Count() >= 2) + { + sortedLazyBailOutRecordList->MapFrom(1, [=](int index, const LazyBailOutRecord& currentRecord) + { + const LazyBailOutRecord& previousRecord = sortedLazyBailOutRecordList->Item(index - 1); + AssertMsg( + currentRecord.offset > previousRecord.offset, + "Lazy bailout record list isn't sorted by offset?" + ); + }); + } + +#endif + + this->sortedLazyBailoutRecordList = HeapNew(NativeLazyBailOutRecordList, &HeapAllocator::Instance); + this->sortedLazyBailoutRecordList->Copy(sortedLazyBailOutRecordList); +} + +int32 +InProcNativeEntryPointData::GetLazyBailOutRecordSlotOffset() const +{ + Assert(this->lazyBailOutRecordSlotOffset != 0); + return this->lazyBailOutRecordSlotOffset; +} + +void +InProcNativeEntryPointData::SetLazyBailOutRecordSlotOffset(int32 argSlotOffset) +{ + Assert(this->lazyBailOutRecordSlotOffset == 0 && argSlotOffset != 0); + this->lazyBailOutRecordSlotOffset = argSlotOffset; +} + +uint32 +InProcNativeEntryPointData::GetLazyBailOutThunkOffset() const +{ + Assert(this->lazyBailOutThunkOffset != 0); + return this->lazyBailOutThunkOffset; +} + +void +InProcNativeEntryPointData::SetLazyBailOutThunkOffset(uint32 thunkOffset) +{ + Assert(this->lazyBailOutThunkOffset == 0 && thunkOffset != 0); + this->lazyBailOutThunkOffset = thunkOffset; } void @@ -460,10 +509,10 @@ InProcNativeEntryPointData::OnCleanup() this->inlineeFrameMap = nullptr; } - if (this->bailoutRecordMap) + if (this->sortedLazyBailoutRecordList) { - HeapDelete(this->bailoutRecordMap); - this->bailoutRecordMap = nullptr; + HeapDelete(this->sortedLazyBailoutRecordList); + this->sortedLazyBailoutRecordList = nullptr; } #if !FLOATVAR @@ -567,4 +616,4 @@ OOPNativeEntryPointData::DeleteNativeDataBuffer(char * nativeDataBuffer) midl_user_free(buffer); } -#endif \ No newline at end of file +#endif diff --git a/lib/Backend/NativeEntryPointData.h b/lib/Backend/NativeEntryPointData.h index c9f017a9460..ef48be5e64a 100644 --- a/lib/Backend/NativeEntryPointData.h +++ b/lib/Backend/NativeEntryPointData.h @@ -13,7 +13,7 @@ namespace Js }; typedef JsUtil::List InlineeFrameMap; -typedef JsUtil::List BailOutRecordMap; +typedef JsUtil::List NativeLazyBailOutRecordList; class JitTransferData; @@ -72,7 +72,7 @@ class NativeEntryPointData #if PDATA_ENABLED XDataAllocation* GetXDataInfo() { return this->xdataInfo; } void CleanupXDataInfo(); - void SetXDataInfo(XDataAllocation* xdataInfo) { this->xdataInfo = xdataInfo; } + void SetXDataInfo(XDataAllocation* xdataInfo) { this->xdataInfo = xdataInfo; } #endif private: void RegisterEquivalentTypeCaches(Js::ScriptContext * scriptContext, Js::EntryPointInfo * entryPointInfo); @@ -156,8 +156,14 @@ class InProcNativeEntryPointData : public NativeEntryPointData InlineeFrameMap * GetInlineeFrameMap(); void RecordInlineeFrameMap(JsUtil::List* tempInlineeFrameMap); - BailOutRecordMap * GetBailOutRecordMap(); - void RecordBailOutMap(JsUtil::List* bailoutMap); + NativeLazyBailOutRecordList * GetSortedLazyBailOutRecordList() const; + void SetSortedLazyBailOutRecordList(JsUtil::List* sortedLazyBailOutRecordList); + + void SetLazyBailOutRecordSlotOffset(int32 argSlotOffset); + int32 GetLazyBailOutRecordSlotOffset() const; + + void SetLazyBailOutThunkOffset(uint32 thunkOffset); + uint32 GetLazyBailOutThunkOffset() const; #if !FLOATVAR void SetNumberChunks(CodeGenNumberChunk* chunks) @@ -165,11 +171,14 @@ class InProcNativeEntryPointData : public NativeEntryPointData numberChunks = chunks; } #endif + void OnCleanup(); private: FieldNoBarrier(NativeCodeData *) nativeCodeData; - FieldNoBarrier(InlineeFrameMap*) inlineeFrameMap; - FieldNoBarrier(BailOutRecordMap*) bailoutRecordMap; + FieldNoBarrier(InlineeFrameMap *) inlineeFrameMap; + FieldNoBarrier(NativeLazyBailOutRecordList *) sortedLazyBailoutRecordList; + FieldNoBarrier(int32) lazyBailOutRecordSlotOffset; + FieldNoBarrier(uint32) lazyBailOutThunkOffset; #if !FLOATVAR Field(CodeGenNumberChunk*) numberChunks; #endif @@ -212,4 +221,4 @@ class OOPNativeEntryPointData : public NativeEntryPointData #endif }; -#endif \ No newline at end of file +#endif diff --git a/lib/Backend/ObjTypeSpecFldInfo.cpp b/lib/Backend/ObjTypeSpecFldInfo.cpp index 86386733ba5..e335a1b5529 100644 --- a/lib/Backend/ObjTypeSpecFldInfo.cpp +++ b/lib/Backend/ObjTypeSpecFldInfo.cpp @@ -45,7 +45,7 @@ ObjTypeSpecFldInfo::NeedsDepolymorphication() const return m_data.polymorphicInfoArray != nullptr; } -void +void ObjTypeSpecFldInfo::TryDepolymorphication(JITTypeHolder type, uint16 slotIndex, bool usesAuxSlot, uint16 * pNewSlotIndex, bool * pNewUsesAuxSlot, uint16 * checkedTypeSetIndex) const { Assert(NeedsDepolymorphication()); @@ -317,7 +317,10 @@ FixedFieldInfo * ObjTypeSpecFldInfo::GetFixedFieldIfAvailableAsFixedFunction() { Assert(HasFixedValue()); - Assert(IsMono() || (IsPoly() && !DoesntHaveEquivalence())); + if (!IsMono() && !(IsPoly() && !DoesntHaveEquivalence())) + { + return nullptr; + } AssertOrFailFast(m_data.fixedFieldInfoArraySize > 0); Assert(GetFixedFieldInfoArray()); if (GetFixedFieldInfoArray()[0].GetFuncInfoAddr() != 0) @@ -505,7 +508,7 @@ ObjTypeSpecFldInfo* ObjTypeSpecFldInfo::CreateFrom(uint id, Js::InlineCache* cac propertyGuard = entryPoint->GetNativeEntryPointData()->RegisterSharedPropertyGuard(propertyId, scriptContext); } - if (fixedProperty != nullptr && Js::JavascriptFunction::Is(fixedProperty)) + if (fixedProperty != nullptr && Js::VarIs(fixedProperty)) { functionObject = (Js::JavascriptFunction *)fixedProperty; if (PHASE_VERBOSE_TRACE(Js::FixedMethodsPhase, functionBody)) @@ -742,7 +745,7 @@ ObjTypeSpecFldInfo* ObjTypeSpecFldInfo::CreateFrom(uint id, Js::PolymorphicInlin uint16 firstNonEmptyCacheIndex = UINT16_MAX; uint16 slotIndex = 0; bool areEquivalent = true; - bool canDepolymorphize = topFunctionBody != functionBody && PHASE_ON(Js::DepolymorphizeInlineesPhase, topFunctionBody); + bool canDepolymorphize = topFunctionBody != functionBody && !PHASE_OFF(Js::DepolymorphizeInlineesPhase, topFunctionBody); bool usesAuxSlot = false; bool isProto = false; bool isAccessor = false; @@ -860,7 +863,7 @@ ObjTypeSpecFldInfo* ObjTypeSpecFldInfo::CreateFrom(uint id, Js::PolymorphicInlin { areEquivalent = false; } - if (!isAccessor || isGetterAccessor != inlineCache.IsGetterAccessor() || !isAccessorOnProto || !inlineCache.u.accessor.isOnProto || + if (!isAccessor || isGetterAccessor != inlineCache.IsGetterAccessor() || !isAccessorOnProto || !inlineCache.u.accessor.isOnProto || accessorOwnerObject != inlineCache.u.accessor.object || typeId != TypeWithoutAuxSlotTag(inlineCache.u.accessor.type)->GetTypeId()) { areEquivalent = false; diff --git a/lib/Backend/ObjTypeSpecFldInfo.h b/lib/Backend/ObjTypeSpecFldInfo.h index 6e7d99935b4..df130e6117e 100644 --- a/lib/Backend/ObjTypeSpecFldInfo.h +++ b/lib/Backend/ObjTypeSpecFldInfo.h @@ -191,8 +191,8 @@ class ObjTypeSpecFldInfo if (PHASE_OFF1(Js::ObjTypeSpecPhase)) return nullptr; // TODO: (lei)remove this after obj type spec for OOPJIT implemented - return m_data.fixedFieldInfoArray[0].fieldValue != 0 && Js::JavascriptFunction::Is((Js::Var)m_data.fixedFieldInfoArray[0].fieldValue) ? - Js::JavascriptFunction::FromVar((Js::Var)m_data.fixedFieldInfoArray[0].fieldValue) : nullptr; + return m_data.fixedFieldInfoArray[0].fieldValue != 0 && Js::VarIs((Js::Var)m_data.fixedFieldInfoArray[0].fieldValue) ? + Js::VarTo((Js::Var)m_data.fixedFieldInfoArray[0].fieldValue) : nullptr; } Js::TypeId GetTypeId() const; diff --git a/lib/Backend/Opnd.cpp b/lib/Backend/Opnd.cpp index 35594cade16..d1d78df2854 100644 --- a/lib/Backend/Opnd.cpp +++ b/lib/Backend/Opnd.cpp @@ -1015,7 +1015,7 @@ PropertySymOpnd::UpdateSlotForFinalType() return; } - // TODO: OOP JIT: should assert about runtime type handler addr + // TODO: OOP JIT: should assert about runtime type handler addr Assert(cachedType->GetTypeHandler() != finalType->GetTypeHandler()); if (cachedType->GetTypeHandler()->GetInlineSlotCapacity() == finalType->GetTypeHandler()->GetInlineSlotCapacity() && @@ -1055,24 +1055,6 @@ bool PropertySymOpnd::HasFinalType() const return this->finalType != nullptr; } -bool PropertySymOpnd::NeedsAuxSlotPtrSymLoad() const -{ - // Consider: reload based on guarded prop ops' use of aux slots - return this->GetAuxSlotPtrSym() != nullptr; -} - -void PropertySymOpnd::GenerateAuxSlotPtrSymLoad(IR::Instr * instrInsert) -{ - StackSym * auxSlotPtrSym = GetAuxSlotPtrSym(); - Assert(auxSlotPtrSym); - Func * func = instrInsert->m_func; - - IR::Opnd *opndIndir = IR::IndirOpnd::New(this->CreatePropertyOwnerOpnd(func), Js::DynamicObject::GetOffsetOfAuxSlots(), TyMachReg, func); - IR::RegOpnd *regOpnd = IR::RegOpnd::New(auxSlotPtrSym, TyMachReg, func); - regOpnd->SetIsJITOptimizedReg(true); - Lowerer::InsertMove(regOpnd, opndIndir, instrInsert); -} - PropertySymOpnd * PropertySymOpnd::CloneDefInternalSub(Func *func) { @@ -1085,7 +1067,7 @@ PropertySymOpnd::CloneUseInternalSub(Func *func) return this->CopyInternalSub(func); } -bool +bool PropertySymOpnd::ShouldUsePolyEquivTypeGuard(Func *const func) const { return this->IsPoly() && this->m_polyCacheUtil >= PolymorphicInlineCacheUtilizationThreshold && !PHASE_OFF(Js::PolyEquivTypeGuardPhase, func); @@ -2302,7 +2284,19 @@ AddrOpnd::CopyInternal(Func *func) ///---------------------------------------------------------------------------- bool -AddrOpnd::IsEqualInternal(Opnd *opnd) +AddrOpnd::IsEqualAddr(Opnd *opnd, void *addr) +{ + return opnd->IsAddrOpnd() && opnd->AsAddrOpnd()->IsEqualAddr(addr); +} + +bool +AddrOpnd::IsEqualAddr(void *addr) const +{ + return m_address == addr; +} + +bool +AddrOpnd::IsEqualInternal(Opnd *opnd) const { Assert(m_kind == OpndKindAddr); if (!opnd->IsAddrOpnd()) @@ -2310,7 +2304,7 @@ AddrOpnd::IsEqualInternal(Opnd *opnd) return false; } - return m_address == opnd->AsAddrOpnd()->m_address; + return IsEqualAddr(opnd->AsAddrOpnd()->m_address); } void @@ -3251,7 +3245,7 @@ Opnd::Dump(IRDumpFlags flags, Func *func) Output::Print(_u("%s"), func->GetInProcThreadContext()->GetPropertyRecord(propertyOpInfo->GetPropertyId())->GetBuffer(), propertyOpId); } Output::Print(_u("(%u)"), propertyOpId); - + if (propertyOpInfo->IsLoadedFromProto()) { Output::Print(_u("~")); @@ -3321,22 +3315,7 @@ Opnd::Dump(IRDumpFlags flags, Func *func) { Output::Print(_u("[isTempLastUse]")); } - StackSym *sym = regOpnd->GetStackSym(); - if (sym && func) - { - if (sym == func->GetScriptContextSym()) - { - Output::Print(_u("[ScriptContext]")); - } - else if (sym == func->GetFuncObjSym()) - { - Output::Print(_u("[FuncObj]")); - } - else if (sym == func->GetFunctionBodySym()) - { - Output::Print(_u("[FunctionBody]")); - } - } + if(regOpnd->IsArrayRegOpnd()) { if(dumpValueType) @@ -3646,13 +3625,13 @@ Opnd::GetAddrDescription(__out_ecount(count) char16 *const description, const si } else { - switch (Js::RecyclableObject::FromVar(address)->GetTypeId()) + switch (Js::VarTo(address)->GetTypeId()) { case Js::TypeIds_Boolean: - WriteToBuffer(&buffer, &n, Js::JavascriptBoolean::FromVar(address)->GetValue() ? _u(" (true)") : _u(" (false)")); + WriteToBuffer(&buffer, &n, Js::VarTo(address)->GetValue() ? _u(" (true)") : _u(" (false)")); break; case Js::TypeIds_String: - WriteToBuffer(&buffer, &n, _u(" (\"%s\")"), Js::JavascriptString::FromVar(address)->GetSz()); + WriteToBuffer(&buffer, &n, _u(" (\"%s\")"), Js::VarTo(address)->GetSz()); break; case Js::TypeIds_Number: WriteToBuffer(&buffer, &n, _u(" (value: %f)"), Js::JavascriptNumber::GetValue(address)); @@ -3849,9 +3828,9 @@ Opnd::GetAddrDescription(__out_ecount(count) char16 *const description, const si DumpAddress(address, printToConsole, skipMaskedAddress); { Js::RecyclableObject * dynamicObject = (Js::RecyclableObject *)((intptr_t)address - Js::RecyclableObject::GetOffsetOfType()); - if (!func->IsOOPJIT() && Js::JavascriptFunction::Is(dynamicObject)) + if (!func->IsOOPJIT() && Js::VarIs(dynamicObject)) { - DumpFunctionInfo(&buffer, &n, Js::JavascriptFunction::FromVar((void *)((intptr_t)address - Js::RecyclableObject::GetOffsetOfType()))->GetFunctionInfo(), + DumpFunctionInfo(&buffer, &n, Js::VarTo((void *)((intptr_t)address - Js::RecyclableObject::GetOffsetOfType()))->GetFunctionInfo(), printToConsole, _u("FunctionObjectTypeRef")); } else diff --git a/lib/Backend/Opnd.h b/lib/Backend/Opnd.h index 492eb03bead..30e2e35e7b8 100644 --- a/lib/Backend/Opnd.h +++ b/lib/Backend/Opnd.h @@ -636,6 +636,9 @@ class PropertySymOpnd sealed : public SymOpnd // Note that even usesFixedValue cannot live on ObjTypeSpecFldInfo, because we may share a cache between // e.g. Object.prototype and new Object(), and only the latter actually uses the fixed value, even though both have it. bool usesFixedValue: 1; + bool auxSlotPtrSymAvailable:1; + bool producesAuxSlotPtr:1; + bool cantChangeType: 1; union { @@ -972,6 +975,28 @@ class PropertySymOpnd sealed : public SymOpnd this->typeDead = value; } + bool IsAuxSlotPtrSymAvailable() const + { + return this->auxSlotPtrSymAvailable; + } + + void SetAuxSlotPtrSymAvailable(bool value) + { + Assert(IsTypeCheckSeqCandidate()); + this->auxSlotPtrSymAvailable = value; + } + + bool ProducesAuxSlotPtr() const + { + return this->producesAuxSlotPtr; + } + + void SetProducesAuxSlotPtr(bool value) + { + Assert(IsTypeCheckSeqCandidate()); + this->producesAuxSlotPtr = value; + } + void SetTypeDeadIfTypeCheckSeqCandidate(bool value) { if (IsTypeCheckSeqCandidate()) @@ -1035,6 +1060,16 @@ class PropertySymOpnd sealed : public SymOpnd this->typeCheckRequired = value; } + bool CantChangeType() const + { + return this->cantChangeType; + } + + void SetCantChangeType(bool value) + { + this->cantChangeType = value; + } + uint16 GetObjTypeSpecFlags() const { return this->objTypeSpecFlags; @@ -1177,9 +1212,6 @@ class PropertySymOpnd sealed : public SymOpnd this->finalType = JITTypeHolder(nullptr); } - bool NeedsAuxSlotPtrSymLoad() const; - void GenerateAuxSlotPtrSymLoad(IR::Instr * instrInsert); - BVSparse* GetGuardedPropOps() { return this->guardedPropOps; @@ -1494,7 +1526,9 @@ class AddrOpnd sealed : public Opnd public: //Note type: OpndKindAddr AddrOpnd * CopyInternal(Func *func); - bool IsEqualInternal(Opnd *opnd); + bool IsEqualInternal(Opnd *opnd) const; + bool IsEqualAddr(void *addr) const; + static bool IsEqualAddr(IR::Opnd * opnd, void * addr); void FreeInternal(Func * func); bool IsDynamic() const { return addrOpndKind > AddrOpndKindConstantVar; } diff --git a/lib/Backend/Peeps.cpp b/lib/Backend/Peeps.cpp index 2045837182c..8f4784ebc9e 100644 --- a/lib/Backend/Peeps.cpp +++ b/lib/Backend/Peeps.cpp @@ -104,11 +104,22 @@ Peeps::PeepFunc() } case IR::InstrKindBranch: + { if (!peepsEnabled || instr->m_opcode == Js::OpCode::Leave) { break; } - instrNext = Peeps::PeepBranch(instr->AsBranchInstr()); + + IR::BranchInstr *branchInstr = instr->AsBranchInstr(); + IR::LabelInstr* target = branchInstr->GetTarget(); + + // Don't remove any branches to the generator's epilogue + if (target != nullptr && target->IsGeneratorEpilogueLabel()) + { + break; + } + + instrNext = Peeps::PeepBranch(branchInstr); #if defined(_M_IX86) || defined(_M_X64) Assert(instrNext && instrNext->m_prev); if (instrNext->m_prev->IsBranchInstr()) @@ -118,7 +129,7 @@ Peeps::PeepFunc() #endif break; - + } case IR::InstrKindPragma: if (instr->m_opcode == Js::OpCode::Nop) { @@ -438,6 +449,41 @@ Peeps::PeepBranch(IR::BranchInstr *branchInstr, bool *const peepedRef) // // Remove branch-to-next // + IR::Instr * instrSkip = instrNext; + while (instrSkip != targetInstr && instrSkip->IsLabelInstr()) + { + // Skip adjacent labels + instrSkip = instrSkip->GetNextRealInstrOrLabel(); + } + if (instrSkip->IsLabelInstr()) + { + if (instrNext == instrSkip) + { + instrSkip = nullptr; + } + else + { + IR::Instr *instrTmp = instrSkip; + + // Ignore assertion error for cases where we insert an "airlock" helper block + // for a Branch instruction's helper path that: + // 1) ends up being empty + // 2) comes after a helper block from another instruction + // 3) is followed by a non-helper block + // + // Propagating the "isOpHelper" flag can potentially make this block a non-helper, + // and that makes this block only reachable through helper blocks, thus failing the assert +#if DBG + if (instrNext->AsLabelInstr()->isOpHelper != instrSkip->AsLabelInstr()->isOpHelper) + { + instrNext->AsLabelInstr()->m_noHelperAssert = true; + } +#endif + instrNext->AsLabelInstr()->isOpHelper = instrSkip->AsLabelInstr()->isOpHelper; + instrSkip = instrNext; + instrNext = instrTmp; + } + } if (targetInstr == instrNext) { if (!branchInstr->IsLowered()) @@ -532,7 +578,14 @@ Peeps::PeepBranch(IR::BranchInstr *branchInstr, bool *const peepedRef) // The branch removal could have exposed a branch to next opportunity. return Peeps::PeepBranch(instrPrev->AsBranchInstr()); } - return instrNext; + if (instrSkip) + { + return instrSkip; + } + else + { + return instrNext; + } } } else if (branchInstr->IsConditional()) diff --git a/lib/Backend/SccLiveness.cpp b/lib/Backend/SccLiveness.cpp index 43373bb57e7..ae44fa66c69 100644 --- a/lib/Backend/SccLiveness.cpp +++ b/lib/Backend/SccLiveness.cpp @@ -56,17 +56,21 @@ SCCLiveness::Build() { helperOpnd = instr->GetSrc1(); } - else if (instr->GetSrc1()->AsRegOpnd()->m_sym) + else if (instr->GetSrc1()->AsRegOpnd()->m_sym && !instr->HasLazyBailOut()) { Assert(instr->GetSrc1()->AsRegOpnd()->m_sym->m_instrDef); helperOpnd = instr->GetSrc1()->AsRegOpnd()->m_sym->m_instrDef->GetSrc1(); } - Assert(!helperOpnd || BailOutInfo::IsBailOutHelper(helperOpnd->AsHelperCallOpnd()->m_fnHelper)); + Assert( + !helperOpnd || + BailOutInfo::IsBailOutHelper(helperOpnd->AsHelperCallOpnd()->m_fnHelper) || + instr->HasLazyBailOut() // instructions with lazy bailout can be user calls + ); #endif ProcessBailOutUses(instr); } - if (instr->m_opcode == Js::OpCode::InlineeEnd && instr->m_func->m_hasInlineArgsOpt) + if (instr->m_opcode == Js::OpCode::InlineeEnd && instr->m_func->frameInfo) { instr->m_func->frameInfo->IterateSyms([=](StackSym* argSym) { @@ -125,9 +129,11 @@ SCCLiveness::Build() } } - // Keep track of the last call instruction number to find out whether a lifetime crosses a call - // Do not count call to bailout which exits anyways - if (LowererMD::IsCall(instr) && !instr->HasBailOutInfo()) + // Keep track of the last call instruction number to find out whether a lifetime crosses a call. + // Do not count call to bailout (e.g: call SaveAllRegistersAndBailOut) which exits anyways. + // However, for calls with LazyBailOut, we still need to process them since they are not guaranteed + // to exit. + if (LowererMD::IsCall(instr) && (!instr->HasBailOutInfo() || instr->OnlyHasLazyBailOut())) { if (this->lastOpHelperLabel == nullptr) { @@ -292,7 +298,7 @@ SCCLiveness::Build() this->EndOpHelper(instr); } - }NEXT_INSTR_IN_FUNC_EDITING; + } NEXT_INSTR_IN_FUNC_EDITING; if (this->func->HasTry()) { @@ -454,6 +460,44 @@ SCCLiveness::ProcessDst(IR::Opnd *dst, IR::Instr *instr) void SCCLiveness::ProcessBailOutUses(IR::Instr * instr) { + // With lazy bailout, call instructions will have bailouts attached to it. + // However, since `lastCall` is only updated *after* we process bailout uses, + // stack symbols aren't marked as live across calls inside `ProcessStackSymUse` + // (due to the lifetime->start < this->lastCall condition). This makes symbols + // that have rax assigned not being spilled on the stack and therefore will be + // incorrectly replaced by the return value of the call. + // + // So for instructions with lazy bailout, we update the `lastCall` number early + // and later restore it to what it was before. Additionally, we also need to + // make sure that the lifetimes of those symbols are *after* the call by + // *temporarily* incrementing the instruction number by one. + struct UpdateLastCalInstrNumberForLazyBailOut { + IR::Instr *lazyBailOutInstr; + const uint32 previousInstrNumber; + uint32 &lastCall; + const uint32 previousLastCallNumber; + + UpdateLastCalInstrNumberForLazyBailOut(IR::Instr *instr, uint32 &lastCall) : + lazyBailOutInstr(instr), previousInstrNumber(instr->GetNumber()), + lastCall(lastCall), previousLastCallNumber(lastCall) + { + if (this->lazyBailOutInstr->HasLazyBailOut()) + { + this->lastCall = this->previousInstrNumber; + this->lazyBailOutInstr->SetNumber(this->previousInstrNumber + 1); + } + } + + ~UpdateLastCalInstrNumberForLazyBailOut() + { + if (this->lazyBailOutInstr->HasLazyBailOut()) + { + this->lastCall = this->previousLastCallNumber; + this->lazyBailOutInstr->SetNumber(this->previousInstrNumber); + } + } + } autoUpdateRestoreLastCall(instr, this->lastCall); + BailOutInfo * bailOutInfo = instr->GetBailOutInfo(); FOREACH_BITSET_IN_SPARSEBV(id, bailOutInfo->byteCodeUpwardExposedUsed) { @@ -463,7 +507,7 @@ SCCLiveness::ProcessBailOutUses(IR::Instr * instr) } NEXT_BITSET_IN_SPARSEBV; - FOREACH_SLISTBASE_ENTRY(CopyPropSyms, copyPropSyms, &bailOutInfo->usedCapturedValues.copyPropSyms) + FOREACH_SLISTBASE_ENTRY(CopyPropSyms, copyPropSyms, &bailOutInfo->usedCapturedValues->copyPropSyms) { ProcessStackSymUse(copyPropSyms.Value(), instr); } @@ -491,7 +535,7 @@ SCCLiveness::ProcessBailOutUses(IR::Instr * instr) Func * inlinee = instr->m_func; while (!inlinee->IsTopFunc()) { - if (inlinee->m_hasInlineArgsOpt && inlinee->frameInfo->isRecorded) + if (inlinee->frameInfo && inlinee->frameInfo->isRecorded) { inlinee->frameInfo->IterateSyms([=](StackSym* argSym) { @@ -710,7 +754,11 @@ SCCLiveness::ExtendLifetime(Lifetime *lifetime, IR::Instr *instr) // The case of equality is valid on Arm64 where some branch instructions have sources. AssertMsg(lifetime->end >= instr->GetNumber(), "Lifetime end not set correctly"); #else - AssertMsg(lifetime->end > instr->GetNumber(), "Lifetime end not set correctly"); + AssertMsg( + (!instr->HasLazyBailOut() && lifetime->end > instr->GetNumber()) || + (instr->HasLazyBailOut() && lifetime->end >= instr->GetNumber()), + "Lifetime end not set correctly" + ); #endif } this->extendedLifetimesLoopList->Clear(this->tempAlloc); diff --git a/lib/Backend/ServerScriptContext.cpp b/lib/Backend/ServerScriptContext.cpp index b3ce241b054..08f3e7a6bab 100644 --- a/lib/Backend/ServerScriptContext.cpp +++ b/lib/Backend/ServerScriptContext.cpp @@ -24,7 +24,6 @@ ServerScriptContext::ServerScriptContext(ScriptContextDataIDL * contextData, Ser m_sourceCodeArena(_u("JITSourceCodeArena"), threadContextInfo->GetForegroundPageAllocator(), Js::Throw::OutOfMemory, nullptr), m_interpreterThunkBufferManager(&m_sourceCodeArena, threadContextInfo->GetThunkPageAllocators(), nullptr, threadContextInfo, _u("Interpreter thunk buffer"), GetThreadContext()->GetProcessHandle()), m_asmJsInterpreterThunkBufferManager(&m_sourceCodeArena, threadContextInfo->GetThunkPageAllocators(), nullptr, threadContextInfo, _u("Asm.js interpreter thunk buffer"), GetThreadContext()->GetProcessHandle()), - m_domFastPathHelperMap(nullptr), m_moduleRecords(&HeapAllocator::Instance), m_codeGenAlloc(nullptr, nullptr, threadContextInfo, threadContextInfo->GetCodePageAllocators(), threadContextInfo->GetProcessHandle()), m_globalThisAddr(0), @@ -38,13 +37,10 @@ ServerScriptContext::ServerScriptContext(ScriptContextDataIDL * contextData, Ser #if !TARGET_64 && _CONTROL_FLOW_GUARD m_codeGenAlloc.canCreatePreReservedSegment = threadContextInfo->CanCreatePreReservedSegment(); #endif - - m_domFastPathHelperMap = HeapNew(JITDOMFastPathHelperMap, &HeapAllocator::Instance, 17); } ServerScriptContext::~ServerScriptContext() { - HeapDelete(m_domFastPathHelperMap); m_moduleRecords.Map([](uint, Js::ServerSourceTextModuleRecord* record) { HeapDelete(record); @@ -216,6 +212,18 @@ ServerScriptContext::UpdateGlobalObjectThisAddr(intptr_t globalThis) m_globalThisAddr = globalThis; } +intptr_t +ServerScriptContext::GetObjectPrototypeAddr() const +{ + return m_contextData.objectPrototypeAddr; +} + +intptr_t +ServerScriptContext::GetFunctionPrototypeAddr() const +{ + return m_contextData.functionPrototypeAddr; +} + intptr_t ServerScriptContext::GetNumberAllocatorAddr() const { @@ -309,13 +317,6 @@ ServerScriptContext::IsClosed() const return m_isClosed; } -void -ServerScriptContext::AddToDOMFastPathHelperMap(intptr_t funcInfoAddr, IR::JnHelperMethod helper) -{ - AutoCriticalSection cs(&m_cs); - m_domFastPathHelperMap->Add(funcInfoAddr, helper); -} - ArenaAllocator * ServerScriptContext::GetSourceCodeArena() { @@ -341,18 +342,6 @@ ServerScriptContext::GetEmitBufferManager(bool asmJsManager) } } -IR::JnHelperMethod -ServerScriptContext::GetDOMFastPathHelper(intptr_t funcInfoAddr) -{ - AutoCriticalSection cs(&m_cs); - - IR::JnHelperMethod helper = IR::HelperInvalid; - - m_domFastPathHelperMap->TryGetValue(funcInfoAddr, &helper); - - return helper; -} - void ServerScriptContext::Close() { diff --git a/lib/Backend/ServerScriptContext.h b/lib/Backend/ServerScriptContext.h index 4d324461174..0524b8e3aa1 100644 --- a/lib/Backend/ServerScriptContext.h +++ b/lib/Backend/ServerScriptContext.h @@ -45,6 +45,8 @@ class ServerScriptContext : public ScriptContextInfo virtual intptr_t GetLibraryAddr() const override; virtual intptr_t GetGlobalObjectAddr() const override; virtual intptr_t GetGlobalObjectThisAddr() const override; + virtual intptr_t GetObjectPrototypeAddr() const override; + virtual intptr_t GetFunctionPrototypeAddr() const override; virtual intptr_t GetNumberAllocatorAddr() const override; virtual intptr_t GetRecyclerAddr() const override; virtual bool GetRecyclerAllowNativeCodeBumpAllocation() const override; @@ -68,10 +70,6 @@ class ServerScriptContext : public ScriptContextInfo virtual bool IsRecyclerVerifyEnabled() const override; virtual uint GetRecyclerVerifyPad() const override; - virtual void AddToDOMFastPathHelperMap(intptr_t funcInfoAddr, IR::JnHelperMethod helper) override; - virtual IR::JnHelperMethod GetDOMFastPathHelper(intptr_t funcInfoAddr) override; - - typedef JsUtil::BaseDictionary ServerModuleRecords; ServerModuleRecords m_moduleRecords; @@ -95,7 +93,6 @@ class ServerScriptContext : public ScriptContextInfo void Release(); private: - JITDOMFastPathHelperMap * m_domFastPathHelperMap; #ifdef PROFILE_EXEC Js::ScriptContextProfiler * codeGenProfiler; CriticalSection profilerCS; diff --git a/lib/Backend/SimpleJitProfilingHelpers.cpp b/lib/Backend/SimpleJitProfilingHelpers.cpp index 6a1fa9ca66f..a2e61ceee88 100644 --- a/lib/Backend/SimpleJitProfilingHelpers.cpp +++ b/lib/Backend/SimpleJitProfilingHelpers.cpp @@ -69,7 +69,7 @@ using namespace Js; DynamicProfileInfo * dynamicProfileInfo = callerFunctionBody->GetDynamicProfileInfo(); JavascriptFunction *const calleeFunction = - JavascriptFunction::Is(callee) ? JavascriptFunction::FromVar(callee) : nullptr; + VarIs(callee) ? VarTo(callee) : nullptr; FunctionInfo* calleeFunctionInfo = calleeFunction ? calleeFunction->GetFunctionInfo() : nullptr; auto const ctor = !!(info.Flags & CallFlags_New); @@ -94,26 +94,6 @@ using namespace Js; JIT_HELPER_END(SimpleProfileReturnTypeCall); } - Var SimpleJitHelpers::ProfiledStrictLdThis(Var thisVar, FunctionBody* functionBody) - { - JIT_HELPER_NOT_REENTRANT_NOLOCK_HEADER(SimpleProfiledStrictLdThis); - //Adapted from InterpreterStackFrame::OP_ProfiledStrictLdThis - DynamicProfileInfo * dynamicProfileInfo = functionBody->GetDynamicProfileInfo(); - TypeId typeId = JavascriptOperators::GetTypeId(thisVar); - - if (typeId == TypeIds_ActivationObject) - { - thisVar = functionBody->GetScriptContext()->GetLibrary()->GetUndefined(); - dynamicProfileInfo->RecordThisInfo(thisVar, ThisType_Mapped); - return thisVar; - } - - dynamicProfileInfo->RecordThisInfo(thisVar, ThisType_Simple); - return thisVar; - JIT_HELPER_END(SimpleProfiledStrictLdThis); - } - - Var SimpleJitHelpers::ProfiledLdThis(Var thisVar, int moduleID, FunctionBody* functionBody) { JIT_HELPER_NOT_REENTRANT_NOLOCK_HEADER(SimpleProfiledLdThis); diff --git a/lib/Backend/SimpleJitProfilingHelpers.h b/lib/Backend/SimpleJitProfilingHelpers.h index a49e9f0e56e..b6b68e575ed 100644 --- a/lib/Backend/SimpleJitProfilingHelpers.h +++ b/lib/Backend/SimpleJitProfilingHelpers.h @@ -16,7 +16,6 @@ namespace Js void ProfileCall(void* framePtr, ProfileId profileId, InlineCacheIndex inlineCacheIndex, Var retval, Var callee, CallInfo info); void ProfileReturnTypeCall(void* framePtr, ProfileId profileId, Var retval, JavascriptFunction*callee, CallInfo info); - Var ProfiledStrictLdThis(Var thisVar, FunctionBody* functionBody); Var ProfiledLdThis(Var thisVar, int moduleID, FunctionBody* functionBody); Var ProfiledSwitch(FunctionBody* functionBody,ProfileId profileId, Var exp); Var ProfiledDivide(FunctionBody* functionBody, ProfileId profileId, Var aLeft, Var aRight); diff --git a/lib/Backend/Sym.cpp b/lib/Backend/Sym.cpp index 6e6711537c9..9cd4bad1737 100644 --- a/lib/Backend/Sym.cpp +++ b/lib/Backend/Sym.cpp @@ -48,6 +48,7 @@ StackSym::New(SymID id, IRType type, Js::RegSlot byteCodeRegSlot, Func *func) stackSym->m_isTypeSpec = false; stackSym->m_isArgSlotSym = false; stackSym->m_isArgSlotRegSym = false; + stackSym->m_nonEscapingArgObjAlias = false; stackSym->m_isParamSym = false; stackSym->m_isImplicitParamSym = false; stackSym->m_isBailOutReferenced = false; @@ -381,6 +382,12 @@ StackSym::SetIsStrConst() this->m_isNotNumber = true; } +bool +StackSym::GetIsStrConst() +{ + return this->m_isStrConst; +} + Js::RegSlot StackSym::GetByteCodeRegSlot() const { diff --git a/lib/Backend/Sym.h b/lib/Backend/Sym.h index bc60ab99a47..5cd929ee024 100644 --- a/lib/Backend/Sym.h +++ b/lib/Backend/Sym.h @@ -128,6 +128,7 @@ class StackSym: public Sym void SetIsFloatConst(); void SetIsSimd128Const(); void SetIsStrConst(); + bool GetIsStrConst(); intptr_t GetLiteralConstValue_PostGlobOpt() const; IR::Opnd * GetConstOpnd() const; diff --git a/lib/Backend/TempTracker.cpp b/lib/Backend/TempTracker.cpp index 17b87ab07da..156dc48b07a 100644 --- a/lib/Backend/TempTracker.cpp +++ b/lib/Backend/TempTracker.cpp @@ -289,6 +289,16 @@ TempTracker::ProcessUse(StackSym * sym, BackwardPass * backwardPass) } }; +template +void +TempTracker::DisallowMarkTempAcrossYield(BVSparse* bytecodeUpwardExposed) +{ + if (bytecodeUpwardExposed != nullptr) + { + this->nonTempSyms.Or(bytecodeUpwardExposed); + } +} + template void TempTracker::MarkTemp(StackSym * sym, BackwardPass * backwardPass) @@ -1421,7 +1431,10 @@ ObjectTempVerify::SetDstIsTemp(bool dstIsTemp, bool dstIsTempTransferred, IR::In Output::Flush(); } #endif - Assert(!instr->dstIsTempObject); + // In a generator function, we don't allow marking temp across yields. Since this assert makes + // sure that all instructions whose destinations produce temps are marked, it is not + // applicable for generators + Assert(instr->m_func->GetJITFunctionBody()->IsCoroutine() || !instr->dstIsTempObject); } } } diff --git a/lib/Backend/TempTracker.h b/lib/Backend/TempTracker.h index d16d77d123e..f806f7dc9b8 100644 --- a/lib/Backend/TempTracker.h +++ b/lib/Backend/TempTracker.h @@ -44,6 +44,7 @@ class TempTracker : public T // Actual mark temp algorithm that are shared, but have different condition based // on the type of tracker as the template parameter + void DisallowMarkTempAcrossYield(BVSparse* bytecodeUpwardExposed); void ProcessUse(StackSym * sym, BackwardPass * backwardPass); void MarkTemp(StackSym * sym, BackwardPass * backwardPass); diff --git a/lib/Backend/amd64/EncoderMD.cpp b/lib/Backend/amd64/EncoderMD.cpp index 2a79a16ae1a..ac614a265cc 100644 --- a/lib/Backend/amd64/EncoderMD.cpp +++ b/lib/Backend/amd64/EncoderMD.cpp @@ -103,7 +103,7 @@ EncoderMD::Init(Encoder *encoder) /// ///---------------------------------------------------------------------------- -const BYTE +BYTE EncoderMD::GetOpcodeByte2(IR::Instr *instr) { return OpcodeByte2[instr->m_opcode - (Js::OpCode::MDStart+1)]; @@ -161,13 +161,13 @@ EncoderMD::GetOpbyte(IR::Instr *instr) /// ///---------------------------------------------------------------------------- -const BYTE +BYTE EncoderMD::GetRegEncode(IR::RegOpnd *regOpnd) { return this->GetRegEncode(regOpnd->GetReg()); } -const BYTE +BYTE EncoderMD::GetRegEncode(RegNum reg) { AssertMsg(reg != RegNOREG, "should have valid reg in encoder"); @@ -189,7 +189,7 @@ EncoderMD::GetRegEncode(RegNum reg) /// ///---------------------------------------------------------------------------- -const uint32 +uint32 EncoderMD::GetOpdope(IR::Instr *instr) { return Opdope[instr->m_opcode - (Js::OpCode::MDStart+1)]; @@ -203,7 +203,7 @@ EncoderMD::GetOpdope(IR::Instr *instr) /// ///---------------------------------------------------------------------------- -const uint32 +uint32 EncoderMD::GetLeadIn(IR::Instr * instr) { return OpcodeLeadIn[instr->m_opcode - (Js::OpCode::MDStart+1)]; @@ -1543,33 +1543,62 @@ void EncoderMD::AddLabelReloc(BYTE* relocAddress) /// ///---------------------------------------------------------------------------- void -EncoderMD::FixMaps(uint32 brOffset, uint32 bytesSaved, uint32 *inlineeFrameRecordsIndex, uint32 *inlineeFrameMapIndex, uint32 *pragmaInstToRecordOffsetIndex, uint32 *offsetBuffIndex) +EncoderMD::FixMaps(uint32 brOffset, uint32 bytesSaved, FixUpMapIndex *mapIndices) { - InlineeFrameRecords *recList = m_encoder->m_inlineeFrameRecords; - ArenaInlineeFrameMap *mapList = m_encoder->m_inlineeFrameMap; - PragmaInstrList *pInstrList = m_encoder->m_pragmaInstrToRecordOffset; int32 i; - for (i = *inlineeFrameRecordsIndex; i < recList->Count() && recList->Item(i)->inlineeStartOffset <= brOffset; i++) - recList->Item(i)->inlineeStartOffset -= bytesSaved; - *inlineeFrameRecordsIndex = i; + { + InlineeFrameRecords *recList = m_encoder->m_inlineeFrameRecords; + for (i = mapIndices->inlineeFrameRecordsIndex; i < recList->Count() && recList->Item(i)->inlineeStartOffset <= brOffset; i++) + { + recList->Item(i)->inlineeStartOffset -= bytesSaved; + } + + mapIndices->inlineeFrameRecordsIndex = i; + } - for (i = *inlineeFrameMapIndex; i < mapList->Count() && mapList->Item(i).offset <= brOffset; i++) + { + ArenaInlineeFrameMap *mapList = m_encoder->m_inlineeFrameMap; + for (i = mapIndices->inlineeFrameMapIndex; i < mapList->Count() && mapList->Item(i).offset <= brOffset; i++) + { mapList->Item(i).offset -= bytesSaved; + } + + mapIndices->inlineeFrameMapIndex = i; + } + + { + PragmaInstrList *pInstrList = m_encoder->m_pragmaInstrToRecordOffset; + for (i = mapIndices->pragmaInstToRecordOffsetIndex; i < pInstrList->Count() && pInstrList->Item(i)->m_offsetInBuffer <= brOffset; i++) + { + pInstrList->Item(i)->m_offsetInBuffer -= bytesSaved; + } - *inlineeFrameMapIndex = i; + mapIndices->pragmaInstToRecordOffsetIndex = i; + } - for (i = *pragmaInstToRecordOffsetIndex; i < pInstrList->Count() && pInstrList->Item(i)->m_offsetInBuffer <= brOffset; i++) - pInstrList->Item(i)->m_offsetInBuffer -= bytesSaved; + { + ArenaLazyBailoutRecordList *lazyBailOutRecordList = m_encoder->m_sortedLazyBailoutRecordList; + for (i = mapIndices->lazyBailOutRecordListIndex; i < lazyBailOutRecordList->Count() && lazyBailOutRecordList->Item(i).offset <= brOffset; i++) + { + lazyBailOutRecordList->Item(i).offset -= bytesSaved; + } - *pragmaInstToRecordOffsetIndex = i; + mapIndices->lazyBailOutRecordListIndex = i; + } #if DBG_DUMP - for (i = *offsetBuffIndex; (uint)i < m_encoder->m_instrNumber && m_encoder->m_offsetBuffer[i] <= brOffset; i++) - m_encoder->m_offsetBuffer[i] -= bytesSaved; - *offsetBuffIndex = i; + { + for (i = mapIndices->offsetBuffIndex; (uint)i < m_encoder->m_instrNumber && m_encoder->m_offsetBuffer[i] <= brOffset; i++) + { + m_encoder->m_offsetBuffer[i] -= bytesSaved; + } + + mapIndices->offsetBuffIndex = i; + } + #endif } diff --git a/lib/Backend/amd64/EncoderMD.h b/lib/Backend/amd64/EncoderMD.h index 595afdd2c49..44bfb83a8bf 100644 --- a/lib/Backend/amd64/EncoderMD.h +++ b/lib/Backend/amd64/EncoderMD.h @@ -174,6 +174,8 @@ enum Forms : BYTE; typedef JsUtil::List RelocList; typedef JsUtil::List InlineeFrameRecords; +struct FixUpMapIndex; + class EncoderMD { public: @@ -194,7 +196,7 @@ class EncoderMD RelocList* GetRelocList() const { return m_relocList; } int AppendRelocEntry(RelocType type, void *ptr, IR::LabelInstr *label= nullptr); int FixRelocListEntry(uint32 index, int totalBytesSaved, BYTE *buffStart, BYTE* buffEnd); - void FixMaps(uint32 brOffset, uint32 bytesSaved, uint32 *inlineeFrameRecordsIndex, uint32 *inlineeFrameMapIndex, uint32 *pragmaInstToRecordOffsetIndex, uint32 *offsetBuffIndex); + void FixMaps(uint32 brOffset, uint32 bytesSaved, FixUpMapIndex *mapIndices); void UpdateRelocListWithNewBuffer(RelocList * relocList, BYTE * newBuffer, BYTE * oldBufferStart, BYTE * oldBufferEnd); #ifdef DBG void VerifyRelocList(BYTE *buffStart, BYTE *buffEnd); @@ -202,14 +204,14 @@ class EncoderMD void AddLabelReloc(BYTE* relocAddress); private: - const BYTE GetOpcodeByte2(IR::Instr *instr); + BYTE GetOpcodeByte2(IR::Instr *instr); static Forms GetInstrForm(IR::Instr *instr); const BYTE * GetFormTemplate(IR::Instr *instr); const BYTE * GetOpbyte(IR::Instr *instr); - const BYTE GetRegEncode(IR::RegOpnd *regOpnd); - const BYTE GetRegEncode(RegNum reg); - static const uint32 GetOpdope(IR::Instr *instr); - const uint32 GetLeadIn(IR::Instr * instr); + BYTE GetRegEncode(IR::RegOpnd *regOpnd); + BYTE GetRegEncode(RegNum reg); + static uint32 GetOpdope(IR::Instr *instr); + uint32 GetLeadIn(IR::Instr * instr); BYTE EmitModRM(IR::Instr * instr, IR::Opnd *opnd, BYTE reg1); void EmitConst(size_t val, int size, bool allowImm64 = false); BYTE EmitImmed(IR::Opnd * opnd, int opSize, int sbit, bool allowImm64 = false); diff --git a/lib/Backend/amd64/LinearScanMD.cpp b/lib/Backend/amd64/LinearScanMD.cpp index e61c452e180..893fb208d1e 100644 --- a/lib/Backend/amd64/LinearScanMD.cpp +++ b/lib/Backend/amd64/LinearScanMD.cpp @@ -321,142 +321,16 @@ LinearScanMD::GenerateBailOut(IR::Instr * instr, __in_ecount(registerSaveSymsCou // Load the bailout target into rax // mov rax, BailOut // call rax - Assert(instr->GetSrc1()->IsHelperCallOpnd()); - Lowerer::InsertMove(IR::RegOpnd::New(nullptr, RegRAX, TyMachPtr, func), instr->GetSrc1(), instr); - instr->ReplaceSrc1(IR::RegOpnd::New(nullptr, RegRAX, TyMachPtr, func)); -} - -// Gets the InterpreterStackFrame pointer into RAX. -// Restores the live stack locations followed by the live registers from -// the interpreter's register slots. -// RecordDefs each live register that is restored. -// -// Generates the following code: -// -// MOV rax, param0 -// MOV rax, [rax + JavascriptGenerator::GetFrameOffset()] -// -// for each live stack location, sym -// -// MOV rcx, [rax + regslot offset] -// MOV sym(stack location), rcx -// -// for each live register, sym (rax is restore last if it is live) -// -// MOV sym(register), [rax + regslot offset] -// -IR::Instr * -LinearScanMD::GenerateBailInForGeneratorYield(IR::Instr * resumeLabelInstr, BailOutInfo * bailOutInfo) -{ - IR::Instr * instrAfter = resumeLabelInstr->m_next; - - IR::RegOpnd * raxRegOpnd = IR::RegOpnd::New(nullptr, RegRAX, TyMachPtr, this->func); - IR::RegOpnd * rcxRegOpnd = IR::RegOpnd::New(nullptr, RegRCX, TyVar, this->func); - - StackSym * sym = StackSym::NewParamSlotSym(1, this->func); - this->func->SetArgOffset(sym, LowererMD::GetFormalParamOffset() * MachPtr); - IR::SymOpnd * symOpnd = IR::SymOpnd::New(sym, TyMachPtr, this->func); - LinearScan::InsertMove(raxRegOpnd, symOpnd, instrAfter); - - IR::IndirOpnd * indirOpnd = IR::IndirOpnd::New(raxRegOpnd, Js::JavascriptGenerator::GetFrameOffset(), TyMachPtr, this->func); - LinearScan::InsertMove(raxRegOpnd, indirOpnd, instrAfter); - - // rax points to the frame, restore stack syms and registers except rax, restore rax last - - IR::Instr * raxRestoreInstr = nullptr; - IR::Instr * instrInsertStackSym = instrAfter; - IR::Instr * instrInsertRegSym = instrAfter; - - Assert(bailOutInfo->capturedValues->constantValues.Empty()); - Assert(bailOutInfo->capturedValues->copyPropSyms.Empty()); - Assert(bailOutInfo->liveLosslessInt32Syms->IsEmpty()); - Assert(bailOutInfo->liveFloat64Syms->IsEmpty()); - - auto restoreSymFn = [this, &raxRegOpnd, &rcxRegOpnd, &raxRestoreInstr, &instrInsertStackSym, &instrInsertRegSym](Js::RegSlot regSlot, StackSym* stackSym) + // TODO: Before lazy bailout, this is done unconditionally. + // Need to verify if this is the right check in order + // to keep the same behaviour as before. + if (!instr->HasLazyBailOut()) { - Assert(stackSym->IsVar()); - - int32 offset = regSlot * sizeof(Js::Var) + Js::InterpreterStackFrame::GetOffsetOfLocals(); - - IR::Opnd * srcOpnd = IR::IndirOpnd::New(raxRegOpnd, offset, stackSym->GetType(), this->func); - Lifetime * lifetime = stackSym->scratch.linearScan.lifetime; - - if (lifetime->isSpilled) - { - // stack restores require an extra register since we can't move an indir directly to an indir on amd64 - IR::SymOpnd * dstOpnd = IR::SymOpnd::New(stackSym, stackSym->GetType(), this->func); - LinearScan::InsertMove(rcxRegOpnd, srcOpnd, instrInsertStackSym); - LinearScan::InsertMove(dstOpnd, rcxRegOpnd, instrInsertStackSym); - } - else - { - // register restores must come after stack restores so that we have RAX and RCX free to - // use for stack restores and further RAX must be restored last since it holds the - // pointer to the InterpreterStackFrame from which we are restoring values. - // We must also track these restores using RecordDef in case the symbols are spilled. - - IR::RegOpnd * dstRegOpnd = IR::RegOpnd::New(stackSym, stackSym->GetType(), this->func); - dstRegOpnd->SetReg(lifetime->reg); - - IR::Instr * instr = LinearScan::InsertMove(dstRegOpnd, srcOpnd, instrInsertRegSym); - - if (instrInsertRegSym == instrInsertStackSym) - { - // this is the first register sym, make sure we don't insert stack stores - // after this instruction so we can ensure rax and rcx remain free to use - // for restoring spilled stack syms. - instrInsertStackSym = instr; - } - - if (lifetime->reg == RegRAX) - { - // ensure rax is restored last - Assert(instrInsertRegSym != instrInsertStackSym); - - instrInsertRegSym = instr; - - if (raxRestoreInstr != nullptr) - { - AssertMsg(false, "this is unexpected until copy prop is enabled"); - // rax was mapped to multiple bytecode registers. Obviously only the first - // restore we do will work so change all following stores to `mov rax, rax`. - // We still need to keep them around for RecordDef in case the corresponding - // dst sym is spilled later on. - raxRestoreInstr->FreeSrc1(); - raxRestoreInstr->SetSrc1(raxRegOpnd); - } - - raxRestoreInstr = instr; - } - - this->linearScan->RecordDef(lifetime, instr, 0); - } - }; - - FOREACH_BITSET_IN_SPARSEBV(symId, bailOutInfo->byteCodeUpwardExposedUsed) - { - StackSym* stackSym = this->func->m_symTable->FindStackSym(symId); - restoreSymFn(stackSym->GetByteCodeRegSlot(), stackSym); - } - NEXT_BITSET_IN_SPARSEBV; - - if (bailOutInfo->capturedValues->argObjSyms) - { - FOREACH_BITSET_IN_SPARSEBV(symId, bailOutInfo->capturedValues->argObjSyms) - { - StackSym* stackSym = this->func->m_symTable->FindStackSym(symId); - restoreSymFn(stackSym->GetByteCodeRegSlot(), stackSym); - } - NEXT_BITSET_IN_SPARSEBV; + Assert(instr->GetSrc1()->IsHelperCallOpnd()); + Lowerer::InsertMove(IR::RegOpnd::New(nullptr, RegRAX, TyMachPtr, func), instr->GetSrc1(), instr); + instr->ReplaceSrc1(IR::RegOpnd::New(nullptr, RegRAX, TyMachPtr, func)); } - - Js::RegSlot localsCount = this->func->GetJITFunctionBody()->GetLocalsCount(); - bailOutInfo->IterateArgOutSyms([localsCount, &restoreSymFn](uint, uint argOutSlotOffset, StackSym* sym) { - restoreSymFn(localsCount + argOutSlotOffset, sym); - }); - - return instrAfter; } uint LinearScanMD::GetRegisterSaveIndex(RegNum reg) diff --git a/lib/Backend/amd64/LinearScanMD.h b/lib/Backend/amd64/LinearScanMD.h index aaa6c3c3a42..db80343ab08 100644 --- a/lib/Backend/amd64/LinearScanMD.h +++ b/lib/Backend/amd64/LinearScanMD.h @@ -37,7 +37,6 @@ class LinearScanMD : public LinearScanMDShared void GenerateBailOut(IR::Instr * instr, __in_ecount(registerSaveSymsCount) StackSym ** registerSaveSyms, uint registerSaveSymsCount); - IR::Instr *GenerateBailInForGeneratorYield(IR::Instr * resumeLabelInstr, BailOutInfo * bailOutInfo); private: static void SaveAllRegisters(BailOutRecord *const bailOutRecord); diff --git a/lib/Backend/amd64/LowererMDArch.cpp b/lib/Backend/amd64/LowererMDArch.cpp index e3e860ff496..cc752b4a39c 100644 --- a/lib/Backend/amd64/LowererMDArch.cpp +++ b/lib/Backend/amd64/LowererMDArch.cpp @@ -269,7 +269,7 @@ LowererMDArch::LoadHeapArgsCached(IR::Instr *instrArgs) this->LoadHelperArgument(instrArgs, srcOpnd); // Save the newly-created args object to its dedicated stack slot. - IR::Opnd *opnd = this->lowererMD->CreateStackArgumentsSlotOpnd(); + IR::Opnd *opnd = LowererMD::CreateStackArgumentsSlotOpnd(func); instr = IR::Instr::New(Js::OpCode::MOV, opnd, instrArgs->GetDst(), func); instrArgs->InsertAfter(instr); } @@ -394,7 +394,7 @@ LowererMDArch::LoadHeapArguments(IR::Instr *instrArgs) this->LoadHelperArgument(instrArgs, srcOpnd); // Save the newly-created args object to its dedicated stack slot. - IR::Opnd *opnd = this->lowererMD->CreateStackArgumentsSlotOpnd(); + IR::Opnd *opnd = LowererMD::CreateStackArgumentsSlotOpnd(func); instr = IR::Instr::New(Js::OpCode::MOV, opnd, instrArgs->GetDst(), func); instrArgs->InsertAfter(instr); } @@ -980,15 +980,36 @@ LowererMDArch::LowerCall(IR::Instr * callInstr, uint32 argCount) // Also skip this for relocatable helper calls. These will be turned into indirect // calls in lower. - if (callInstr->GetSrc1()->IsHelperCallOpnd() && !callInstr->HasBailOutInfo()) + if (callInstr->GetSrc1()->IsHelperCallOpnd()) { - IR::RegOpnd *targetOpnd = IR::RegOpnd::New(StackSym::New(TyMachPtr,m_func), RegRAX, TyMachPtr, this->m_func); - IR::Instr *movInstr = IR::Instr::New(Js::OpCode::MOV, targetOpnd, callInstr->GetSrc1(), this->m_func); - targetOpnd->m_isCallArg = true; + // Helper calls previously do not have bailouts except for bailout call. However with LazyBailOut, they can now have + // bailouts as well. Handle them the same way as before. + if (!callInstr->HasBailOutInfo() || callInstr->OnlyHasLazyBailOut()) + { + IR::RegOpnd *targetOpnd = IR::RegOpnd::New(StackSym::New(TyMachPtr, m_func), RegRAX, TyMachPtr, this->m_func); + IR::Instr *movInstr = IR::Instr::New(Js::OpCode::MOV, targetOpnd, callInstr->GetSrc1(), this->m_func); + targetOpnd->m_isCallArg = true; + + callInstr->UnlinkSrc1(); + callInstr->SetSrc1(targetOpnd); + callInstr->InsertBefore(movInstr); + } + } - callInstr->UnlinkSrc1(); - callInstr->SetSrc1(targetOpnd); - callInstr->InsertBefore(movInstr); + if (callInstr->HasLazyBailOut()) + { + BailOutInfo *bailOutInfo = callInstr->GetBailOutInfo(); + if (bailOutInfo->bailOutRecord == nullptr) + { + bailOutInfo->bailOutRecord = NativeCodeDataNewZ( + this->m_func->GetNativeCodeDataAllocator(), + BailOutRecord, + bailOutInfo->bailOutOffset, + bailOutInfo->polymorphicCacheIndex, + callInstr->GetBailOutKind(), + bailOutInfo->bailOutFunc + ); + } } // @@ -1724,7 +1745,7 @@ LowererMDArch::LowerEntryInstr(IR::EntryInstr * entryInstr) movRax0 = IR::Instr::New(Js::OpCode::XOR, raxOpnd, raxOpnd, raxOpnd, this->m_func); secondInstr->m_prev->InsertAfter(movRax0); - IR::Opnd *opnd = this->lowererMD->CreateStackArgumentsSlotOpnd(); + IR::Opnd *opnd = LowererMD::CreateStackArgumentsSlotOpnd(this->m_func); IR::Instr *movNullInstr = IR::Instr::New(Js::OpCode::MOV, opnd, raxOpnd->UseWithNewType(TyMachReg, this->m_func), this->m_func); secondInstr->m_prev->InsertAfter(movNullInstr); } @@ -3377,6 +3398,16 @@ LowererMDArch::FinalLower() // Get rid of the deps and srcs instr->FreeDst(); instr->FreeSrc2(); + break; + default: + if (instr->HasLazyBailOut()) + { + // Since Lowerer and Peeps might have removed instructions with lazy bailout + // if we attach them to helper calls, FinalLower is the first phase that + // we can know if the function has any lazy bailouts at all. + this->m_func->SetHasLazyBailOut(); + } + break; } } NEXT_INSTR_BACKWARD_EDITING_IN_RANGE; diff --git a/lib/Backend/amd64/machvalues.h b/lib/Backend/amd64/machvalues.h index a5676a0060d..99f772de69c 100644 --- a/lib/Backend/amd64/machvalues.h +++ b/lib/Backend/amd64/machvalues.h @@ -18,4 +18,4 @@ static const int MachStackAlignment = MachPtr; static const int MachArgsSlotOffset = MachPtr; static const int MachMaxInstrSize = 12; static const unsigned __int64 MachSignBit = 0x8000000000000000; -static const int MachSimd128 = 16; \ No newline at end of file +static const int MachSimd128 = 16; diff --git a/lib/Backend/arm/EncoderMD.cpp b/lib/Backend/arm/EncoderMD.cpp index fc77dbfe964..f2fc0f44234 100644 --- a/lib/Backend/arm/EncoderMD.cpp +++ b/lib/Backend/arm/EncoderMD.cpp @@ -34,19 +34,19 @@ EncoderMD::Init(Encoder *encoder) /// ///---------------------------------------------------------------------------- -const BYTE +BYTE EncoderMD::GetRegEncode(IR::RegOpnd *regOpnd) { return GetRegEncode(regOpnd->GetReg()); } -const BYTE +BYTE EncoderMD::GetRegEncode(RegNum reg) { return RegEncode[reg]; } -const BYTE +BYTE EncoderMD::GetFloatRegEncode(IR::RegOpnd *regOpnd) { //Each double register holds two single precision registers. diff --git a/lib/Backend/arm/EncoderMD.h b/lib/Backend/arm/EncoderMD.h index eaed327c271..5869e7092e1 100644 --- a/lib/Backend/arm/EncoderMD.h +++ b/lib/Backend/arm/EncoderMD.h @@ -58,9 +58,9 @@ class EncoderMD void ApplyRelocs(uint32 codeBufferAddress, size_t codeSize, uint* bufferCRC, BOOL isBrShorteningSucceeded, bool isFinalBufferValidation = false); static bool TryConstFold(IR::Instr *instr, IR::RegOpnd *regOpnd); static bool TryFold(IR::Instr *instr, IR::RegOpnd *regOpnd); - const BYTE GetRegEncode(IR::RegOpnd *regOpnd); - const BYTE GetFloatRegEncode(IR::RegOpnd *regOpnd); - static const BYTE GetRegEncode(RegNum reg); + BYTE GetRegEncode(IR::RegOpnd *regOpnd); + BYTE GetFloatRegEncode(IR::RegOpnd *regOpnd); + static BYTE GetRegEncode(RegNum reg); static uint32 GetOpdope(IR::Instr *instr); static uint32 GetOpdope(Js::OpCode op); diff --git a/lib/Backend/arm/LinearScanMD.cpp b/lib/Backend/arm/LinearScanMD.cpp index be42e2df265..11cf61a4b77 100644 --- a/lib/Backend/arm/LinearScanMD.cpp +++ b/lib/Backend/arm/LinearScanMD.cpp @@ -345,12 +345,6 @@ LinearScanMD::GenerateBailOut( instr->ReplaceSrc1(IR::RegOpnd::New(nullptr, RegLR, TyMachPtr, func)); } -IR::Instr * -LinearScanMD::GenerateBailInForGeneratorYield(IR::Instr * resumeLabelInstr, BailOutInfo * bailOutInfo) -{ - Js::Throw::NotImplemented(); -} - uint LinearScanMD::GetRegisterSaveIndex(RegNum reg) { if (RegTypes[reg] == TyFloat64) diff --git a/lib/Backend/arm/LinearScanMD.h b/lib/Backend/arm/LinearScanMD.h index 2be05f9aa59..dd0891fa5dc 100644 --- a/lib/Backend/arm/LinearScanMD.h +++ b/lib/Backend/arm/LinearScanMD.h @@ -39,7 +39,6 @@ class LinearScanMD : public LinearScanMDShared void LegalizeConstantUse(IR::Instr * instr, IR::Opnd * opnd) { /* no op for arm */ } void GenerateBailOut(IR::Instr * instr, __in_ecount(registerSaveSymsCount) StackSym ** registerSaveSyms, uint registerSaveSymsCount); - IR::Instr *GenerateBailInForGeneratorYield(IR::Instr * resumeLabelInstr, BailOutInfo * bailOutInfo); private: static void SaveAllRegisters(BailOutRecord *const bailOutRecord); public: diff --git a/lib/Backend/arm/LowerMD.cpp b/lib/Backend/arm/LowerMD.cpp index 76495ea4b2f..60a2e7ba7c2 100644 --- a/lib/Backend/arm/LowerMD.cpp +++ b/lib/Backend/arm/LowerMD.cpp @@ -209,10 +209,14 @@ LowererMD::LowerCallHelper(IR::Instr *instrCall) Assert(regArg->m_sym->m_isSingleDef); IR::Instr *instrArg = regArg->m_sym->m_instrDef; - Assert(instrArg->m_opcode == Js::OpCode::ArgOut_A || - (helperMethod == IR::JnHelperMethod::HelperOP_InitCachedScope && instrArg->m_opcode == Js::OpCode::ExtendArg_A) || - (helperMethod == IR::JnHelperMethod::HelperScrFunc_OP_NewScFuncHomeObj && instrArg->m_opcode == Js::OpCode::ExtendArg_A) || - (helperMethod == IR::JnHelperMethod::HelperScrFunc_OP_NewScGenFuncHomeObj && instrArg->m_opcode == Js::OpCode::ExtendArg_A)); + Assert(instrArg->m_opcode == Js::OpCode::ArgOut_A || instrArg->m_opcode == Js::OpCode::ExtendArg_A && + ( + helperMethod == IR::JnHelperMethod::HelperOP_InitCachedScope || + helperMethod == IR::JnHelperMethod::HelperScrFunc_OP_NewScFuncHomeObj || + helperMethod == IR::JnHelperMethod::HelperScrFunc_OP_NewScGenFuncHomeObj || + helperMethod == IR::JnHelperMethod::HelperRestify || + helperMethod == IR::JnHelperMethod::HelperStPropIdArrFromVar + )); prevInstr = this->LoadHelperArgument(prevInstr, instrArg->GetSrc1()); argOpnd = instrArg->GetSrc2(); @@ -1736,7 +1740,7 @@ LowererMD::LowerTry(IR::Instr * tryInstr, IR::JnHelperMethod helperMethod) if (tryInstr->m_opcode == Js::OpCode::TryCatch || this->m_func->DoOptimizeTry() || (this->m_func->IsSimpleJit() && this->m_func->hasBailout)) { // Arg 6 : hasBailedOutOffset - IR::Opnd * hasBailedOutOffset = IR::IntConstOpnd::New(this->m_func->m_hasBailedOutSym->m_offset + tryInstr->m_func->GetInlineeArgumentStackSize(), TyInt32, this->m_func); + IR::Opnd * hasBailedOutOffset = IR::IntConstOpnd::New(this->m_func->GetHasBailedOutSym()->m_offset + tryInstr->m_func->GetInlineeArgumentStackSize(), TyInt32, this->m_func); this->LoadHelperArgument(tryAddr, hasBailedOutOffset); } @@ -1898,8 +1902,8 @@ LowererMD::LoadStackArgPtr(IR::Instr * instr) // t1 = LDR [prm1 + m_inParams] // dst = ADD t1, sizeof(var) - Assert(this->m_func->m_loopParamSym); - IR::RegOpnd *baseOpnd = IR::RegOpnd::New(this->m_func->m_loopParamSym, TyMachReg, this->m_func); + Assert(this->m_func->GetLoopParamSym()); + IR::RegOpnd *baseOpnd = IR::RegOpnd::New(this->m_func->GetLoopParamSym(), TyMachReg, this->m_func); size_t offset = Js::InterpreterStackFrame::GetOffsetOfInParams(); IR::IndirOpnd *indirOpnd = IR::IndirOpnd::New(baseOpnd, (int32)offset, TyMachReg, this->m_func); IR::RegOpnd *tmpOpnd = IR::RegOpnd::New(TyMachReg, this->m_func); @@ -1939,8 +1943,8 @@ LowererMD::LoadArgumentsFromFrame(IR::Instr * instr) if (this->m_func->IsLoopBody()) { // Get the arguments ptr from the interpreter frame instance that was passed in. - Assert(this->m_func->m_loopParamSym); - baseOpnd = IR::RegOpnd::New(this->m_func->m_loopParamSym, TyMachReg, this->m_func); + Assert(this->m_func->GetLoopParamSym()); + baseOpnd = IR::RegOpnd::New(this->m_func->GetLoopParamSym(), TyMachReg, this->m_func); offset = Js::InterpreterStackFrame::GetOffsetOfArguments(); } else @@ -1967,8 +1971,8 @@ LowererMD::LoadArgumentCount(IR::Instr * instr) { // Pull the arg count from the interpreter frame instance that was passed in. // (The callinfo in the loop body's frame just shows the single parameter, the interpreter frame.) - Assert(this->m_func->m_loopParamSym); - baseOpnd = IR::RegOpnd::New(this->m_func->m_loopParamSym, TyMachReg, this->m_func); + Assert(this->m_func->GetLoopParamSym()); + baseOpnd = IR::RegOpnd::New(this->m_func->GetLoopParamSym(), TyMachReg, this->m_func); offset = Js::InterpreterStackFrame::GetOffsetOfInSlotsCount(); } else @@ -2211,7 +2215,8 @@ LowererMD::ChangeToHelperCall(IR::Instr * callInstr, IR::JnHelperMethod helperMe IR::Instr * bailOutInstr = callInstr; if (callInstr->HasBailOutInfo()) { - if (callInstr->GetBailOutKind() == IR::BailOutOnNotPrimitive) + const IR::BailOutKind bailOutKind = callInstr->GetBailOutKind(); + if (bailOutKind == IR::BailOutOnNotPrimitive) { callInstr = IR::Instr::New(callInstr->m_opcode, callInstr->m_func); bailOutInstr->TransferTo(callInstr); @@ -2220,10 +2225,14 @@ LowererMD::ChangeToHelperCall(IR::Instr * callInstr, IR::JnHelperMethod helperMe bailOutInstr->m_opcode = Js::OpCode::BailOnNotPrimitive; bailOutInstr->SetSrc1(opndInstance); } - else + else if (BailOutInfo::IsBailOutOnImplicitCalls(bailOutKind)) { bailOutInstr = this->m_lowerer->SplitBailOnImplicitCall(callInstr); } + else + { + AssertMsg(false, "Unexpected BailOutKind, are we adding new BailOutKind on instructions?"); + } } IR::HelperCallOpnd *helperCallOpnd = Lowerer::CreateHelperCallOpnd(helperMethod, this->GetHelperArgsCount(), m_func); @@ -2240,18 +2249,20 @@ LowererMD::ChangeToHelperCall(IR::Instr * callInstr, IR::JnHelperMethod helperMe if (bailOutInstr != callInstr) { // The bailout needs to be lowered after we lower the helper call because the helper argument - // has already been loaded. We need to drain them on AMD64 before starting another helper call - if (bailOutInstr->m_opcode == Js::OpCode::BailOnNotObject) + // has already been loaded. We need to drain them on AMD64 before starting another helper call + if (bailOutInstr->m_opcode == Js::OpCode::BailOnNotPrimitive) { - this->m_lowerer->LowerBailOnNotObject(bailOutInstr, nullptr, labelBailOut); + this->m_lowerer->LowerBailOnTrue(bailOutInstr, labelBailOut); } - else if (bailOutInstr->m_opcode == Js::OpCode::BailOnNotPrimitive) + else if (bailOutInstr->m_opcode == Js::OpCode::BailOnNotEqual) { - this->m_lowerer->LowerBailOnTrue(bailOutInstr, labelBailOut); + // `SplitBailOnImplicitCall` above changes the opcode to BailOnNotEqual + Assert(BailOutInfo::IsBailOutOnImplicitCalls(bailOutInstr->GetBailOutKind())); + this->m_lowerer->LowerBailOnEqualOrNotEqual(bailOutInstr, nullptr, labelBailOut, propSymOpnd, isHelperContinuation); } else { - this->m_lowerer->LowerBailOnEqualOrNotEqual(bailOutInstr, nullptr, labelBailOut, propSymOpnd, isHelperContinuation); + AssertMsg(false, "Unexpected OpCode for BailOutInstruction"); } } @@ -2586,6 +2597,8 @@ LowererMD::LowerCondBranch(IR::Instr * instr) case Js::OpCode::BrOnNotEmpty: case Js::OpCode::BrNotNull_A: case Js::OpCode::BrOnObject_A: + case Js::OpCode::BrOnObjectOrNull_A: + case Js::OpCode::BrOnConstructor_A: case Js::OpCode::BrOnClassConstructor: case Js::OpCode::BrOnBaseConstructorKind: Assert(!opndSrc1->IsFloat64()); @@ -2848,21 +2861,21 @@ LowererMD::GenerateFastDivByPow2(IR::Instr *instrDiv) ///---------------------------------------------------------------------------- bool -LowererMD::GenerateFastCmSrEqConst(IR::Instr *instr) +LowererMD::GenerateFastCmSrXxConst(IR::Instr *instr) { // // Given: - // s1 = CmSrEq_A s2, s3 + // s1 = CmSrXX_A s2, s3 // where either s2 or s3 is 'null', 'true' or 'false' // // Generate: // // CMP s2, s3 - // JEQ $mov_true - // MOV s1, Library.GetFalse() + // JEQ $mov_res + // MOV s1, eq ? Library.GetFalse() : Library.GetTrue() // JMP $done - // $mov_true: - // MOV s1, Library.GetTrue() + // $mov_res: + // MOV s1, eq ? Library.GetTrue() : Library.GetFalse() // $done: // @@ -2870,9 +2883,161 @@ LowererMD::GenerateFastCmSrEqConst(IR::Instr *instr) return false; } -bool LowererMD::GenerateFastCmXxI4(IR::Instr *instr) +void LowererMD::GenerateFastCmXxI4(IR::Instr *instr) +{ + this->GenerateFastCmXx(instr); +} + +void LowererMD::GenerateFastCmXxR8(IR::Instr * instr) +{ + this->GenerateFastCmXx(instr); +} + +void LowererMD::GenerateFastCmXx(IR::Instr *instr) { - return this->GenerateFastCmXxTaggedInt(instr); + // For float src: + // LDIMM dst, trueResult + // FCMP src1, src2 + // - BVS $done (NaN check iff B.cond is BNE) + // B.cond $done + // LDIMM dst, falseResult + // $done + + // For Int src: + // LDIMM dst, trueResult + // CMP src1, src2 + // B.cond $done + // LDIMM dst, falseResult + // $done: + + IR::Opnd * src1 = instr->UnlinkSrc1(); + IR::Opnd * src2 = instr->UnlinkSrc2(); + IR::Opnd * dst = instr->UnlinkDst(); + bool isIntDst = dst->AsRegOpnd()->m_sym->IsInt32(); + bool isFloatSrc = src1->IsFloat(); + Assert(!isFloatSrc || src2->IsFloat()); + Assert(!src1->IsInt64() || src2->IsInt64()); + Assert(!isFloatSrc || AutoSystemInfo::Data.SSE2Available()); + Assert(src1->IsRegOpnd()); + IR::Opnd * opndTrue; + IR::Opnd * opndFalse; + IR::Instr * newInstr; + IR::LabelInstr * done = IR::LabelInstr::New(Js::OpCode::Label, m_func); + + if (dst->IsEqual(src1)) + { + IR::RegOpnd *newSrc1 = IR::RegOpnd::New(src1->GetType(), m_func); + Lowerer::InsertMove(newSrc1, src1, instr); + src1 = newSrc1; + } + + if (dst->IsEqual(src2)) + { + IR::RegOpnd *newSrc2 = IR::RegOpnd::New(src1->GetType(), m_func); + Lowerer::InsertMove(newSrc2, src2, instr); + src2 = newSrc2; + } + + if (isIntDst) + { + opndTrue = IR::IntConstOpnd::New(1, TyInt32, this->m_func); + opndFalse = IR::IntConstOpnd::New(0, TyInt32, this->m_func); + } + else + { + opndTrue = this->m_lowerer->LoadLibraryValueOpnd(instr, LibraryValue::ValueTrue); + opndFalse = this->m_lowerer->LoadLibraryValueOpnd(instr, LibraryValue::ValueFalse); + } + + Lowerer::InsertMove(dst, opndTrue, instr); + + // CMP src1, src2 + newInstr = IR::Instr::New(isFloatSrc ? Js::OpCode::VCMPF64 : Js::OpCode::CMP, this->m_func); + newInstr->SetSrc1(src1); + newInstr->SetSrc2(src2); + instr->InsertBefore(newInstr); + LowererMD::Legalize(newInstr); + + if (isFloatSrc) + { + instr->InsertBefore(IR::Instr::New(Js::OpCode::VMRS, this->m_func)); + } + + bool addNaNCheck = false; + Js::OpCode opcode = Js::OpCode::InvalidOpCode; + + switch (instr->m_opcode) + { + case Js::OpCode::CmEq_A: + case Js::OpCode::CmSrEq_A: + case Js::OpCode::CmEq_I4: + opcode = Js::OpCode::BEQ; + break; + + case Js::OpCode::CmNeq_A: + case Js::OpCode::CmSrNeq_A: + case Js::OpCode::CmNeq_I4: + opcode = Js::OpCode::BNE; + addNaNCheck = isFloatSrc; + break; + + case Js::OpCode::CmGt_A: + case Js::OpCode::CmGt_I4: + opcode = Js::OpCode::BGT; + break; + + case Js::OpCode::CmGe_A: + case Js::OpCode::CmGe_I4: + opcode = Js::OpCode::BGE; + break; + + case Js::OpCode::CmLt_A: + case Js::OpCode::CmLt_I4: + //Can't use BLT as is set when the operands are unordered (NaN). + opcode = isFloatSrc ? Js::OpCode::BCC : Js::OpCode::BLT; + break; + + case Js::OpCode::CmLe_A: + case Js::OpCode::CmLe_I4: + //Can't use BLE as it is set when the operands are unordered (NaN). + opcode = isFloatSrc ? Js::OpCode::BLS : Js::OpCode::BLE; + break; + + case Js::OpCode::CmUnGt_A: + case Js::OpCode::CmUnGt_I4: + opcode = Js::OpCode::BHI; + break; + + case Js::OpCode::CmUnGe_A: + case Js::OpCode::CmUnGe_I4: + opcode = Js::OpCode::BCS; + break; + + case Js::OpCode::CmUnLt_A: + case Js::OpCode::CmUnLt_I4: + opcode = Js::OpCode::BCC; + break; + + case Js::OpCode::CmUnLe_A: + case Js::OpCode::CmUnLe_I4: + opcode = Js::OpCode::BLS; + break; + + default: Assert(false); + } + + if (addNaNCheck) + { + newInstr = IR::BranchInstr::New(Js::OpCode::BVS, done, m_func); + instr->InsertBefore(newInstr); + } + + newInstr = IR::BranchInstr::New(opcode, done, m_func); + instr->InsertBefore(newInstr); + + Lowerer::InsertMove(dst, opndFalse, instr); + instr->InsertBefore(done); + instr->Remove(); } ///---------------------------------------------------------------------------- @@ -4471,11 +4636,11 @@ LowererMD::GenerateStFldFromLocalInlineCache( } IR::Opnd * -LowererMD::CreateStackArgumentsSlotOpnd() +LowererMD::CreateStackArgumentsSlotOpnd(Func *func) { // Save the newly-created args object to its dedicated stack slot. - IR::IndirOpnd *indirOpnd = IR::IndirOpnd::New(IR::RegOpnd::New(nullptr, FRAME_REG , TyMachReg, m_func), - -MachArgsSlotOffset, TyMachPtr, m_func); + IR::IndirOpnd *indirOpnd = IR::IndirOpnd::New(IR::RegOpnd::New(nullptr, FRAME_REG , TyMachReg, func), + -MachArgsSlotOffset, TyMachPtr, func); return indirOpnd; } diff --git a/lib/Backend/arm/LowerMD.h b/lib/Backend/arm/LowerMD.h index 28ee28d0a2d..8e74ecec785 100644 --- a/lib/Backend/arm/LowerMD.h +++ b/lib/Backend/arm/LowerMD.h @@ -93,9 +93,10 @@ class LowererMD void GenerateTaggedZeroTest( IR::Opnd * opndSrc, IR::Instr * instrInsert, IR::LabelInstr * labelHelper = nullptr); void GenerateObjectPairTest(IR::Opnd * opndSrc1, IR::Opnd * opndSrc2, IR::Instr * insertInstr, IR::LabelInstr * labelTarget); bool GenerateObjectTest(IR::Opnd * opndSrc, IR::Instr * insertInstr, IR::LabelInstr * labelTarget, bool fContinueLabel = false); - bool GenerateFastCmSrEqConst(IR::Instr *instr); - bool GenerateFastCmXxI4(IR::Instr *instr); - bool GenerateFastCmXxR8(IR::Instr *instr) { Assert(UNREACHED); return nullptr; } + bool GenerateFastCmSrXxConst(IR::Instr *instr); + void GenerateFastCmXxI4(IR::Instr *instr); + void GenerateFastCmXxR8(IR::Instr *instr); + void GenerateFastCmXx(IR::Instr *instr); bool GenerateFastCmXxTaggedInt(IR::Instr *instr, bool isInHelper = false); IR::Instr * GenerateConvBool(IR::Instr *instr); void GenerateClz(IR::Instr * instr); @@ -118,7 +119,6 @@ class LowererMD void GenerateFastBrS(IR::BranchInstr *brInstr); void GenerateFastInlineBuiltInCall(IR::Instr* instr, IR::JnHelperMethod helperMethod); void HelperCallForAsmMathBuiltin(IR::Instr* instr, IR::JnHelperMethod helperMethodFloat, IR::JnHelperMethod helperMethodDouble) { Assert(UNREACHED); } // only for asm.js - IR::Opnd * CreateStackArgumentsSlotOpnd(); void GenerateSmIntTest(IR::Opnd *opndSrc, IR::Instr *insertInstr, IR::LabelInstr *labelHelper, IR::Instr **instrFirst = nullptr, bool fContinueLabel = false); IR::RegOpnd * LoadNonnegativeIndex(IR::RegOpnd *indexOpnd, const bool skipNegativeCheck, IR::LabelInstr *const notTaggedIntLabel, IR::LabelInstr *const negativeLabel, IR::Instr *const insertBeforeInstr); IR::RegOpnd * GenerateUntagVar(IR::RegOpnd * opnd, IR::LabelInstr * labelFail, IR::Instr * insertBeforeInstr, bool generateTagCheck = true); @@ -130,6 +130,7 @@ class LowererMD bool TryGenerateFastMulAdd(IR::Instr * instrAdd, IR::Instr ** pInstrPrev); void GenerateFloatTest(IR::RegOpnd * opndSrc, IR::Instr * insertInstr, IR::LabelInstr* labelHelper, const bool checkForNullInLoopBody = false); + static IR::Opnd * CreateStackArgumentsSlotOpnd(Func *func); static void EmitInt4Instr(IR::Instr *instr); void EmitLoadVar(IR::Instr *instr, bool isFromUint32 = false, bool isHelper = false); bool EmitLoadInt32(IR::Instr *instr, bool conversionFromObjectAllowed, bool bailOutOnHelper = false, IR::LabelInstr * labelBailOut = nullptr); diff --git a/lib/Backend/arm/machvalues.h b/lib/Backend/arm/machvalues.h index eb770e33fc9..3d25f59d149 100644 --- a/lib/Backend/arm/machvalues.h +++ b/lib/Backend/arm/machvalues.h @@ -16,4 +16,4 @@ static const int MachPtr = 4; static const int MachDouble = 8; static const int MachRegDouble = 8; static const int MachArgsSlotOffset = MachPtr; -static const int MachStackAlignment = MachDouble; \ No newline at end of file +static const int MachStackAlignment = MachDouble; diff --git a/lib/Backend/arm64/ARM64Encoder.h b/lib/Backend/arm64/ARM64Encoder.h index cddc110283a..14e04821b23 100644 --- a/lib/Backend/arm64/ARM64Encoder.h +++ b/lib/Backend/arm64/ARM64Encoder.h @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #pragma once @@ -817,6 +818,17 @@ EmitDiv0Exception( // // MRS dest, systemreg // +#ifndef _WIN32 +#define ARM64_SYSREG(op0, op1, crn, crm, op2) \ + ( ((op0 & 1) << 14) | \ + ((op1 & 7) << 11) | \ + ((crn & 15) << 7) | \ + ((crm & 15) << 3) | \ + ((op2 & 7) << 0) ) + +#define ARM64_FPCR ARM64_SYSREG(3, 3, 4, 4, 0) // Floating point control register (EL0) +#define ARM64_FPSR ARM64_SYSREG(3, 3, 4, 4, 1) // Floating point status register (EL0) +#endif #define ARM64_NZCV ARM64_SYSREG(3,3, 4, 2,0) // Flags (EL0); arm64_x.h #define ARM64_CNTVCT ARM64_SYSREG(3,3,14, 0,2) // Generic Timer virtual count diff --git a/lib/Backend/arm64/ARM64NeonEncoder.h b/lib/Backend/arm64/ARM64NeonEncoder.h index cf21f6e1544..3424aad4292 100644 --- a/lib/Backend/arm64/ARM64NeonEncoder.h +++ b/lib/Backend/arm64/ARM64NeonEncoder.h @@ -88,7 +88,7 @@ class NeonRegisterParam ) { UNREFERENCED_PARAMETER(Reg); - NT_ASSERT(Reg >= NEONREG_FIRST && Reg <= NEONREG_LAST); + Assert(Reg >= NEONREG_FIRST && Reg <= NEONREG_LAST); } static @@ -98,7 +98,7 @@ class NeonRegisterParam ) { UNREFERENCED_PARAMETER(Size); - NT_ASSERT(Size == 4 || Size == 8 || Size == 16); + Assert(Size == 4 || Size == 8 || Size == 16); } ULONG m_Encoded; @@ -133,27 +133,27 @@ NeonSize( switch (ElementSizeInBytes) { case 1: - NT_ASSERT(NumElements == 1 || NumElements == 8 || NumElements == 16); + Assert(NumElements == 1 || NumElements == 8 || NumElements == 16); return (NumElements == 1) ? SIZE_1B : (NumElements == 8) ? SIZE_8B : SIZE_16B; case 2: - NT_ASSERT(NumElements == 1 || NumElements == 4 || NumElements == 8); + Assert(NumElements == 1 || NumElements == 4 || NumElements == 8); return (NumElements == 1) ? SIZE_1H : (NumElements == 4) ? SIZE_4H : SIZE_8H; case 4: - NT_ASSERT(NumElements == 1 || NumElements == 2 || NumElements == 4); + Assert(NumElements == 1 || NumElements == 2 || NumElements == 4); return (NumElements == 1) ? SIZE_1S : (NumElements == 2) ? SIZE_2S : SIZE_4S; case 8: - NT_ASSERT(NumElements == 1 || NumElements == 2); + Assert(NumElements == 1 || NumElements == 2); return (NumElements == 1) ? SIZE_1D : SIZE_2D; case 16: - NT_ASSERT(NumElements == 1); + Assert(NumElements == 1); return SIZE_1Q; default: - NT_ASSERT(!"Invalid element size passed to NeonSize."); + Assert(!"Invalid element size passed to NeonSize."); return SIZE_1B; } } @@ -257,10 +257,10 @@ EmitNeonBinaryCommon( { if (NeonSizeIsScalar(SrcSize)) { - NT_ASSERT(ScalarOpcode != 0); + Assert(ScalarOpcode != 0); return Emitter.EmitFourBytes(ScalarOpcode | ((SrcSize & 3) << 22) | (Src.RawRegister() << 5) | Dest.RawRegister()); } else { - NT_ASSERT(VectorOpcode != 0); + Assert(VectorOpcode != 0); return Emitter.EmitFourBytes(VectorOpcode | (((SrcSize >> 2) & 1) << 30) | ((SrcSize & 3) << 22) | (Src.RawRegister() << 5) | Dest.RawRegister()); } } @@ -274,7 +274,7 @@ EmitNeonAbs( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonBinaryCommon(Emitter, Dest, Src, SrcSize, 0x0e20b800, 0x5e20b800); } @@ -287,7 +287,7 @@ EmitNeonAddp( NEON_SIZE SrcSize ) { - NT_ASSERT(SrcSize == SIZE_1D); + Assert(SrcSize == SIZE_1D); return EmitNeonBinaryCommon(Emitter, Dest, Src, SrcSize, 0, 0x5e31b800); } @@ -300,7 +300,7 @@ EmitNeonAddv( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_4S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_4S)); return EmitNeonBinaryCommon(Emitter, Dest, Src, SrcSize, 0x0e31b800); } @@ -313,7 +313,7 @@ EmitNeonCls( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); return EmitNeonBinaryCommon(Emitter, Dest, Src, SrcSize, 0x0e204800); } @@ -326,7 +326,7 @@ EmitNeonClz( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); return EmitNeonBinaryCommon(Emitter, Dest, Src, SrcSize, 0x2e204800); } @@ -339,7 +339,7 @@ EmitNeonCmeq0( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonBinaryCommon(Emitter, Dest, Src, SrcSize, 0x0e209800, 0x5e209800); } @@ -352,7 +352,7 @@ EmitNeonCmge0( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonBinaryCommon(Emitter, Dest, Src, SrcSize, 0x2e208800, 0x7e208800); } @@ -365,7 +365,7 @@ EmitNeonCmgt0( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonBinaryCommon(Emitter, Dest, Src, SrcSize, 0x0e208800, 0x5e208800); } @@ -378,7 +378,7 @@ EmitNeonCmle0( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonBinaryCommon(Emitter, Dest, Src, SrcSize, 0x2e209800, 0x7e209800); } @@ -391,7 +391,7 @@ EmitNeonCmlt0( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonBinaryCommon(Emitter, Dest, Src, SrcSize, 0x0e20a800, 0x5e20a800); } @@ -404,7 +404,7 @@ EmitNeonCnt( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B)); return EmitNeonBinaryCommon(Emitter, Dest, Src, SrcSize, 0x0e205800); } @@ -417,7 +417,7 @@ EmitNeonNeg( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonBinaryCommon(Emitter, Dest, Src, SrcSize, 0x2e20b800, 0x7e20b800); } @@ -430,7 +430,7 @@ EmitNeonNot( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B)); return EmitNeonBinaryCommon(Emitter, Dest, Src, SrcSize, 0x2e205800); } @@ -443,7 +443,7 @@ EmitNeonRbit( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B)); return EmitNeonBinaryCommon(Emitter, Dest, Src, SrcSize, 0x2e605800); } @@ -456,7 +456,7 @@ EmitNeonRev16( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B)); return EmitNeonBinaryCommon(Emitter, Dest, Src, SrcSize, 0x0e201800); } @@ -469,7 +469,7 @@ EmitNeonRev32( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H)); return EmitNeonBinaryCommon(Emitter, Dest, Src, SrcSize, 0x2e200800); } @@ -482,7 +482,7 @@ EmitNeonRev64( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); return EmitNeonBinaryCommon(Emitter, Dest, Src, SrcSize, 0x0e200800); } @@ -495,7 +495,7 @@ EmitNeonSadalp( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); return EmitNeonBinaryCommon(Emitter, Dest, Src, SrcSize, 0x0e206800); } @@ -508,7 +508,7 @@ EmitNeonSaddlp( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); return EmitNeonBinaryCommon(Emitter, Dest, Src, SrcSize, 0x0e202800); } @@ -521,7 +521,7 @@ EmitNeonSaddlv( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_4S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_4S)); return EmitNeonBinaryCommon(Emitter, Dest, Src, SrcSize, 0x0e303800); } @@ -534,7 +534,7 @@ EmitNeonShll( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); return EmitNeonBinaryCommon(Emitter, Dest, Src, NEON_SIZE(SrcSize & ~4), 0x2e213800); } @@ -547,7 +547,7 @@ EmitNeonShll2( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_16B | VALID_8H | VALID_4S)); + Assert(NeonSizeIsValid(SrcSize, VALID_16B | VALID_8H | VALID_4S)); return EmitNeonBinaryCommon(Emitter, Dest, Src, NEON_SIZE(SrcSize | 4), 0x2e213800); } @@ -560,7 +560,7 @@ EmitNeonSmaxv( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_4S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_4S)); return EmitNeonBinaryCommon(Emitter, Dest, Src, SrcSize, 0x0e30a800); } @@ -573,7 +573,7 @@ EmitNeonSminv( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_4S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_4S)); return EmitNeonBinaryCommon(Emitter, Dest, Src, SrcSize, 0x0e31a800); } @@ -586,7 +586,7 @@ EmitNeonSqabs( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1B | VALID_1H | VALID_1S | VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1B | VALID_1H | VALID_1S | VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonBinaryCommon(Emitter, Dest, Src, SrcSize, 0x0e207800, 0x5e207800); } @@ -599,7 +599,7 @@ EmitNeonSqneg( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1B | VALID_1H | VALID_1S | VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1B | VALID_1H | VALID_1S | VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonBinaryCommon(Emitter, Dest, Src, SrcSize, 0x2e207800, 0x7e207800); } @@ -612,7 +612,7 @@ EmitNeonSqxtn( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1H | VALID_1S | VALID_1D | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1H | VALID_1S | VALID_1D | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonBinaryCommon(Emitter, Dest, Src, NEON_SIZE((SrcSize - 1) & ~4), 0x0e214800, 0x5e214800); } @@ -625,7 +625,7 @@ EmitNeonSqxtn2( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_8H | VALID_4S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_8H | VALID_4S | VALID_2D)); return EmitNeonBinaryCommon(Emitter, Dest, Src, NEON_SIZE((SrcSize - 1) | 4), 0x0e214800, 0x5e214800); } @@ -638,7 +638,7 @@ EmitNeonSqxtun( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1H | VALID_1S | VALID_1D | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1H | VALID_1S | VALID_1D | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonBinaryCommon(Emitter, Dest, Src, NEON_SIZE((SrcSize - 1) & ~4), 0x2e212800, 0x7e212800); } @@ -651,7 +651,7 @@ EmitNeonSqxtun2( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_8H | VALID_4S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_8H | VALID_4S | VALID_2D)); return EmitNeonBinaryCommon(Emitter, Dest, Src, NEON_SIZE((SrcSize - 1) | 4), 0x2e212800, 0x7e212800); } @@ -664,7 +664,7 @@ EmitNeonSuqadd( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1B | VALID_1H | VALID_1S | VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1B | VALID_1H | VALID_1S | VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonBinaryCommon(Emitter, Dest, Src, SrcSize, 0x0e203800, 0x5e203800); } @@ -677,7 +677,7 @@ EmitNeonUadalp( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); return EmitNeonBinaryCommon(Emitter, Dest, Src, SrcSize, 0x2e206800); } @@ -690,7 +690,7 @@ EmitNeonUaddlp( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); return EmitNeonBinaryCommon(Emitter, Dest, Src, SrcSize, 0x2e202800); } @@ -703,7 +703,7 @@ EmitNeonUaddlv( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_4S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_4S)); return EmitNeonBinaryCommon(Emitter, Dest, Src, SrcSize, 0x2e303800); } @@ -716,7 +716,7 @@ EmitNeonUmaxv( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_4S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_4S)); return EmitNeonBinaryCommon(Emitter, Dest, Src, SrcSize, 0x2e30a800); } @@ -729,7 +729,7 @@ EmitNeonUminv( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_4S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_4S)); return EmitNeonBinaryCommon(Emitter, Dest, Src, SrcSize, 0x2e31a800); } @@ -742,7 +742,7 @@ EmitNeonUqxtn( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1H | VALID_1S | VALID_1D | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1H | VALID_1S | VALID_1D | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonBinaryCommon(Emitter, Dest, Src, NEON_SIZE((SrcSize - 1) & ~4), 0x2e214800, 0x7e214800); } @@ -755,7 +755,7 @@ EmitNeonUqxtn2( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_8H | VALID_4S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_8H | VALID_4S | VALID_2D)); return EmitNeonBinaryCommon(Emitter, Dest, Src, NEON_SIZE((SrcSize - 1) | 4), 0x2e214800, 0x7e214800); } @@ -768,7 +768,7 @@ EmitNeonUrecpe( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_24S)); return EmitNeonBinaryCommon(Emitter, Dest, Src, SrcSize, 0x0ea1c800); } @@ -781,7 +781,7 @@ EmitNeonUrsqrte( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_24S)); return EmitNeonBinaryCommon(Emitter, Dest, Src, SrcSize, 0x2ea1c800); } @@ -794,7 +794,7 @@ EmitNeonUsqadd( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1B | VALID_1H | VALID_1S | VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1B | VALID_1H | VALID_1S | VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonBinaryCommon(Emitter, Dest, Src, SrcSize, 0x2e203800, 0x7e203800); } @@ -807,7 +807,7 @@ EmitNeonXtn( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_48H | VALID_24S | VALID_2D)); return EmitNeonBinaryCommon(Emitter, Dest, Src, NEON_SIZE((SrcSize - 1) & ~4), 0x0e212800); } @@ -820,7 +820,7 @@ EmitNeonXtn2( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_8H | VALID_4S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_8H | VALID_4S | VALID_2D)); return EmitNeonBinaryCommon(Emitter, Dest, Src, NEON_SIZE((SrcSize - 1) | 4), 0x0e212800); } @@ -841,10 +841,10 @@ EmitNeonFloatBinaryCommon( { if (NeonSizeIsScalar(SrcSize)) { - NT_ASSERT(ScalarOpcode != 0); + Assert(ScalarOpcode != 0); return Emitter.EmitFourBytes(ScalarOpcode | ((SrcSize & 1) << 22) | (Src.RawRegister() << 5) | Dest.RawRegister()); } else { - NT_ASSERT(VectorOpcode != 0); + Assert(VectorOpcode != 0); return Emitter.EmitFourBytes(VectorOpcode | (((SrcSize >> 2) & 1) << 30) | ((SrcSize & 1) << 22) | (Src.RawRegister() << 5) | Dest.RawRegister()); } } @@ -858,7 +858,7 @@ EmitNeonFabs( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); return EmitNeonFloatBinaryCommon(Emitter, Dest, Src, SrcSize, 0x0ea0f800, 0x1e20c000); } @@ -871,7 +871,7 @@ EmitNeonFaddp( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_2S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_2S | VALID_2D)); return EmitNeonFloatBinaryCommon(Emitter, Dest, Src, SrcSize, 0x7e30d800); } @@ -884,7 +884,7 @@ EmitNeonFcmeq0( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); return EmitNeonFloatBinaryCommon(Emitter, Dest, Src, SrcSize, 0x0ea0d800, 0x5ea0d800); } @@ -897,7 +897,7 @@ EmitNeonFcmge0( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); return EmitNeonFloatBinaryCommon(Emitter, Dest, Src, SrcSize, 0x2ea0c800, 0x7ea0c800); } @@ -910,7 +910,7 @@ EmitNeonFcmgt0( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); return EmitNeonFloatBinaryCommon(Emitter, Dest, Src, SrcSize, 0x0ea0c800, 0x5ea0c800); } @@ -923,7 +923,7 @@ EmitNeonFcmle0( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); return EmitNeonFloatBinaryCommon(Emitter, Dest, Src, SrcSize, 0x2ea0d800, 0x7ea0d800); } @@ -936,7 +936,7 @@ EmitNeonFcmlt0( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); return EmitNeonFloatBinaryCommon(Emitter, Dest, Src, SrcSize, 0x0ea0e800, 0x5ea0e800); } @@ -949,7 +949,7 @@ EmitNeonFcvtas( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); return EmitNeonFloatBinaryCommon(Emitter, Dest, Src, SrcSize, 0x0e21c800, 0x5e21c800); } @@ -962,7 +962,7 @@ EmitNeonFcvtau( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); return EmitNeonFloatBinaryCommon(Emitter, Dest, Src, SrcSize, 0x2e21c800, 0x7e21c800); } @@ -976,9 +976,9 @@ EmitNeonFcvt( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1H | VALID_1S | VALID_1D)); - NT_ASSERT(NeonSizeIsValid(DestSize, VALID_1H | VALID_1S | VALID_1D)); - NT_ASSERT(SrcSize != DestSize); + Assert(NeonSizeIsValid(SrcSize, VALID_1H | VALID_1S | VALID_1D)); + Assert(NeonSizeIsValid(DestSize, VALID_1H | VALID_1S | VALID_1D)); + Assert(SrcSize != DestSize); return EmitNeonFloatBinaryCommon(Emitter, Dest, Src, SrcSize, 0, 0x1ea34000 ^ ((SrcSize & 2) << 22) ^ ((DestSize & 3) << 15)); } @@ -991,7 +991,7 @@ EmitNeonFcvtl( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_48H | VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_48H | VALID_24S)); return EmitNeonFloatBinaryCommon(Emitter, Dest, Src, NEON_SIZE((SrcSize + 1) & ~4), 0x0e217800); } @@ -1004,7 +1004,7 @@ EmitNeonFcvtl2( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_8H | VALID_4S)); + Assert(NeonSizeIsValid(SrcSize, VALID_8H | VALID_4S)); return EmitNeonFloatBinaryCommon(Emitter, Dest, Src, NEON_SIZE((SrcSize + 1) | 4), 0x0e217800); } @@ -1017,7 +1017,7 @@ EmitNeonFcvtms( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); return EmitNeonFloatBinaryCommon(Emitter, Dest, Src, SrcSize, 0x0e21b800, 0x5e21b800); } @@ -1030,7 +1030,7 @@ EmitNeonFcvtmu( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); return EmitNeonFloatBinaryCommon(Emitter, Dest, Src, SrcSize, 0x2e21b800, 0x7e21b800); } @@ -1043,7 +1043,7 @@ EmitNeonFcvtn( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_4S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_4S | VALID_2D)); return EmitNeonFloatBinaryCommon(Emitter, Dest, Src, NEON_SIZE(SrcSize & ~4), 0x0e216800); } @@ -1056,7 +1056,7 @@ EmitNeonFcvtn2( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_4S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_4S | VALID_2D)); return EmitNeonFloatBinaryCommon(Emitter, Dest, Src, NEON_SIZE(SrcSize | 4), 0x4e216800); } @@ -1069,7 +1069,7 @@ EmitNeonFcvtns( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); return EmitNeonFloatBinaryCommon(Emitter, Dest, Src, SrcSize, 0x0e21a800, 0x5e21a800); } @@ -1082,7 +1082,7 @@ EmitNeonFcvtnu( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); return EmitNeonFloatBinaryCommon(Emitter, Dest, Src, SrcSize, 0x2e21a800, 0x7e21a800); } @@ -1095,7 +1095,7 @@ EmitNeonFcvtps( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); return EmitNeonFloatBinaryCommon(Emitter, Dest, Src, SrcSize, 0x0ea1a800, 0x5ea1a800); } @@ -1108,7 +1108,7 @@ EmitNeonFcvtpu( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); return EmitNeonFloatBinaryCommon(Emitter, Dest, Src, SrcSize, 0x2ea1a800, 0x7ea1a800); } @@ -1121,7 +1121,7 @@ EmitNeonFcvtxn( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_4S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_4S | VALID_2D)); return EmitNeonFloatBinaryCommon(Emitter, Dest, Src, NEON_SIZE(SrcSize & ~4), 0x2e216800, 0x7e216800); } @@ -1134,7 +1134,7 @@ EmitNeonFcvtxn2( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_4S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_4S | VALID_2D)); return EmitNeonFloatBinaryCommon(Emitter, Dest, Src, NEON_SIZE(SrcSize | 4), 0x2e216800, 0x7e216800); } @@ -1147,7 +1147,7 @@ EmitNeonFcvtzs( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); return EmitNeonFloatBinaryCommon(Emitter, Dest, Src, SrcSize, 0x0ea1b800, 0x5ea1b800); } @@ -1160,7 +1160,7 @@ EmitNeonFcvtzu( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); return EmitNeonFloatBinaryCommon(Emitter, Dest, Src, SrcSize, 0x2ea1b800, 0x7ea1b800); } @@ -1173,7 +1173,7 @@ EmitNeonFmaxnmp( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_2S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_2S | VALID_2D)); return EmitNeonFloatBinaryCommon(Emitter, Dest, Src, SrcSize, 0x7e30c800); } @@ -1186,7 +1186,7 @@ EmitNeonFmaxnmv( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_4S)); + Assert(NeonSizeIsValid(SrcSize, VALID_4S)); return EmitNeonFloatBinaryCommon(Emitter, Dest, Src, SrcSize, 0x2e30c800); } @@ -1199,7 +1199,7 @@ EmitNeonFmaxp( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_2S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_2S | VALID_2D)); return EmitNeonFloatBinaryCommon(Emitter, Dest, Src, SrcSize, 0x7e30f800); } @@ -1212,7 +1212,7 @@ EmitNeonFmaxv( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_4S)); + Assert(NeonSizeIsValid(SrcSize, VALID_4S)); return EmitNeonFloatBinaryCommon(Emitter, Dest, Src, SrcSize, 0x2e30f800); } @@ -1225,7 +1225,7 @@ EmitNeonFminnmp( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_2S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_2S | VALID_2D)); return EmitNeonFloatBinaryCommon(Emitter, Dest, Src, SrcSize, 0x7eb0c800); } @@ -1238,7 +1238,7 @@ EmitNeonFminnmv( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_4S)); + Assert(NeonSizeIsValid(SrcSize, VALID_4S)); return EmitNeonFloatBinaryCommon(Emitter, Dest, Src, SrcSize, 0x2eb0c800); } @@ -1251,7 +1251,7 @@ EmitNeonFminp( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_2S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_2S | VALID_2D)); return EmitNeonFloatBinaryCommon(Emitter, Dest, Src, SrcSize, 0x7eb0f800); } @@ -1264,7 +1264,7 @@ EmitNeonFminv( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_4S)); + Assert(NeonSizeIsValid(SrcSize, VALID_4S)); return EmitNeonFloatBinaryCommon(Emitter, Dest, Src, SrcSize, 0x2eb0f800); } @@ -1277,7 +1277,7 @@ EmitNeonFmov( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D)); return EmitNeonFloatBinaryCommon(Emitter, Dest, Src, SrcSize, 0, 0x1e204000); } @@ -1290,7 +1290,7 @@ EmitNeonFmovImmediate( NEON_SIZE DestSize ) { - NT_ASSERT(NeonSizeIsValid(DestSize, VALID_1S | VALID_1D)); + Assert(NeonSizeIsValid(DestSize, VALID_1S | VALID_1D)); return Emitter.EmitFourBytes(0x1e201000 | ((DestSize & 1) << 22) | (ULONG(Immediate) << 13) | Dest.RawRegister()); } @@ -1303,7 +1303,7 @@ EmitNeonFneg( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); return EmitNeonFloatBinaryCommon(Emitter, Dest, Src, SrcSize, 0x2ea0f800, 0x1e214000); } @@ -1316,7 +1316,7 @@ EmitNeonFrecpe( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); return EmitNeonFloatBinaryCommon(Emitter, Dest, Src, SrcSize, 0x0ea1d800, 0x5ea1d800); } @@ -1329,7 +1329,7 @@ EmitNeonFrecpx( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D)); return EmitNeonFloatBinaryCommon(Emitter, Dest, Src, SrcSize, 0, 0x5ea1f800); } @@ -1342,7 +1342,7 @@ EmitNeonFrinta( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); return EmitNeonFloatBinaryCommon(Emitter, Dest, Src, SrcSize, 0x2e218800, 0x1e264000); } @@ -1355,7 +1355,7 @@ EmitNeonFrinti( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); return EmitNeonFloatBinaryCommon(Emitter, Dest, Src, SrcSize, 0x2ea19800, 0x1e27c000); } @@ -1368,7 +1368,7 @@ EmitNeonFrintm( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); return EmitNeonFloatBinaryCommon(Emitter, Dest, Src, SrcSize, 0x0e219800, 0x1e254000); } @@ -1381,7 +1381,7 @@ EmitNeonFrintn( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); return EmitNeonFloatBinaryCommon(Emitter, Dest, Src, SrcSize, 0x0e218800, 0x1e244000); } @@ -1394,7 +1394,7 @@ EmitNeonFrintp( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); return EmitNeonFloatBinaryCommon(Emitter, Dest, Src, SrcSize, 0x0ea18800, 0x1e24c000); } @@ -1407,7 +1407,7 @@ EmitNeonFrintx( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); return EmitNeonFloatBinaryCommon(Emitter, Dest, Src, SrcSize, 0x2e219800, 0x1e274000); } @@ -1420,7 +1420,7 @@ EmitNeonFrintz( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); return EmitNeonFloatBinaryCommon(Emitter, Dest, Src, SrcSize, 0x0ea19800, 0x1e25c000); } @@ -1433,7 +1433,7 @@ EmitNeonFrsqrte( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); return EmitNeonFloatBinaryCommon(Emitter, Dest, Src, SrcSize, 0x2ea1d800, 0x7ea1d800); } @@ -1446,7 +1446,7 @@ EmitNeonFsqrt( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); return EmitNeonFloatBinaryCommon(Emitter, Dest, Src, SrcSize, 0x2ea1f800, 0x1e21c000); } @@ -1459,7 +1459,7 @@ EmitNeonScvtf( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); return EmitNeonFloatBinaryCommon(Emitter, Dest, Src, SrcSize, 0x0e21d800, 0x5e21d800); } @@ -1472,7 +1472,7 @@ EmitNeonUcvtf( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); return EmitNeonFloatBinaryCommon(Emitter, Dest, Src, SrcSize, 0x2e21d800, 0x7e21d800); } @@ -1494,10 +1494,10 @@ EmitNeonTrinaryCommon( { if (NeonSizeIsScalar(SrcSize)) { - NT_ASSERT(ScalarOpcode != 0); + Assert(ScalarOpcode != 0); return Emitter.EmitFourBytes(ScalarOpcode | ((SrcSize & 3) << 22) | (Src2.RawRegister() << 16) | (Src1.RawRegister() << 5) | Dest.RawRegister()); } else { - NT_ASSERT(VectorOpcode != 0); + Assert(VectorOpcode != 0); return Emitter.EmitFourBytes(VectorOpcode | (((SrcSize >> 2) & 1) << 30) | ((SrcSize & 3) << 22) | (Src2.RawRegister() << 16) | (Src1.RawRegister() << 5) | Dest.RawRegister()); } } @@ -1512,7 +1512,7 @@ EmitNeonAdd( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x0e208400, 0x5e208400); } @@ -1526,7 +1526,7 @@ EmitNeonAddhn( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_48H | VALID_24S | VALID_2D)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, NEON_SIZE(SrcSize & ~4), 0x0e204000); } @@ -1540,7 +1540,7 @@ EmitNeonAddhn2( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_8H | VALID_4S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_8H | VALID_4S | VALID_2D)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, NEON_SIZE(SrcSize | 4), 0x0e204000); } @@ -1554,7 +1554,7 @@ EmitNeonAddp( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x0e20bc00); } @@ -1568,7 +1568,7 @@ EmitNeonAnd( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x0e201c00); } @@ -1582,7 +1582,7 @@ EmitNeonBicRegister( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x0e601c00); } @@ -1596,7 +1596,7 @@ EmitNeonBif( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x2ee01c00); } @@ -1610,7 +1610,7 @@ EmitNeonBit( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x2ea01c00); } @@ -1624,7 +1624,7 @@ EmitNeonBsl( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x2e601c00); } @@ -1638,7 +1638,7 @@ EmitNeonCmeq( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x2e208c00, 0x7e208c00); } @@ -1652,7 +1652,7 @@ EmitNeonCmge( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x0e203c00, 0x5e203c00); } @@ -1666,7 +1666,7 @@ EmitNeonCmgt( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x0e203400, 0x5e203400); } @@ -1680,7 +1680,7 @@ EmitNeonCmhi( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x2e203400, 0x7e203400); } @@ -1694,7 +1694,7 @@ EmitNeonCmhs( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x2e203c00, 0x7e203c00); } @@ -1708,7 +1708,7 @@ EmitNeonCmtst( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x0e208c00, 0x5e208c00); } @@ -1722,7 +1722,7 @@ EmitNeonEor( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x2e201c00); } @@ -1736,7 +1736,7 @@ EmitNeonMla( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x0e209400); } @@ -1750,7 +1750,7 @@ EmitNeonMls( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x2e209400); } @@ -1763,7 +1763,7 @@ EmitNeonMov( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B)); return EmitNeonTrinaryCommon(Emitter, Dest, Src, Src, SrcSize, 0x0ea01c00); } @@ -1777,7 +1777,7 @@ EmitNeonMul( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x0e209c00); } @@ -1791,7 +1791,7 @@ EmitNeonOrn( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x0ee01c00); } @@ -1805,7 +1805,7 @@ EmitNeonOrrRegister( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x0ea01c00); } @@ -1819,7 +1819,7 @@ EmitNeonPmul( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x2e209c00); } @@ -1833,7 +1833,7 @@ EmitNeonPmull( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_1D | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_1D | VALID_2D)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, NEON_SIZE(SrcSize & ~4), 0x0e20e000, 0x0e20e000); } @@ -1847,7 +1847,7 @@ EmitNeonPmull2( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_16B | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_16B | VALID_2D)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, NEON_SIZE(SrcSize | 4), 0x0e20e000, 0x0e20e000); } @@ -1861,7 +1861,7 @@ EmitNeonRaddhn( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_48H | VALID_24S | VALID_2D)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, NEON_SIZE((SrcSize - 1) & ~4), 0x2e204000); } @@ -1875,7 +1875,7 @@ EmitNeonRaddhn2( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_48H | VALID_24S | VALID_2D)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, NEON_SIZE((SrcSize - 1) | 4), 0x2e204000); } @@ -1889,7 +1889,7 @@ EmitNeonRsubhn( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_48H | VALID_24S | VALID_2D)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, NEON_SIZE((SrcSize - 1) & ~4), 0x2e206000); } @@ -1903,7 +1903,7 @@ EmitNeonRsubhn2( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_48H | VALID_24S | VALID_2D)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, NEON_SIZE((SrcSize - 1) | 4), 0x2e206000); } @@ -1917,7 +1917,7 @@ EmitNeonSaba( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x0e207c00); } @@ -1931,7 +1931,7 @@ EmitNeonSabal( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, NEON_SIZE(SrcSize & ~4), 0x0e205000); } @@ -1945,7 +1945,7 @@ EmitNeonSabal2( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, NEON_SIZE(SrcSize | 4), 0x0e205000); } @@ -1959,7 +1959,7 @@ EmitNeonSabd( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x0e207400); } @@ -1973,7 +1973,7 @@ EmitNeonSabdl( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, NEON_SIZE(SrcSize & ~4), 0x0e207000); } @@ -1987,7 +1987,7 @@ EmitNeonSabdl2( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, NEON_SIZE(SrcSize | 4), 0x0e207000); } @@ -2001,7 +2001,7 @@ EmitNeonSaddl( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, NEON_SIZE(SrcSize & ~4), 0x0e200000); } @@ -2015,7 +2015,7 @@ EmitNeonSaddl2( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, NEON_SIZE(SrcSize | 4), 0x0e200000); } @@ -2029,7 +2029,7 @@ EmitNeonSaddw( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, NEON_SIZE(SrcSize & ~4), 0x0e201000); } @@ -2043,7 +2043,7 @@ EmitNeonSaddw2( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, NEON_SIZE(SrcSize | 4), 0x0e201000); } @@ -2057,7 +2057,7 @@ EmitNeonShadd( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x0e200400); } @@ -2071,7 +2071,7 @@ EmitNeonShsub( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x0e202400); } @@ -2085,7 +2085,7 @@ EmitNeonSmax( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x0e206400); } @@ -2099,7 +2099,7 @@ EmitNeonSmaxp( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x0e20a400); } @@ -2113,7 +2113,7 @@ EmitNeonSmin( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x0e206c00); } @@ -2127,7 +2127,7 @@ EmitNeonSminp( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x0e20ac00); } @@ -2141,7 +2141,7 @@ EmitNeonSmlal( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, NEON_SIZE(SrcSize & ~4), 0x0e208000); } @@ -2155,7 +2155,7 @@ EmitNeonSmlal2( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, NEON_SIZE(SrcSize | 4), 0x0e208000); } @@ -2169,7 +2169,7 @@ EmitNeonSmlsl( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, NEON_SIZE(SrcSize & ~4), 0x0e20a000); } @@ -2183,7 +2183,7 @@ EmitNeonSmlsl2( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, NEON_SIZE(SrcSize | 4), 0x0e20a000); } @@ -2197,7 +2197,7 @@ EmitNeonSmull( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, NEON_SIZE(SrcSize & ~4), 0x0e20c000); } @@ -2211,7 +2211,7 @@ EmitNeonSmull2( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, NEON_SIZE(SrcSize | 4), 0x0e20c000); } @@ -2225,7 +2225,7 @@ EmitNeonSqadd( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1B | VALID_1H | VALID_1S | VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1B | VALID_1H | VALID_1S | VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x0e200c00, 0x5e200c00); } @@ -2239,7 +2239,7 @@ EmitNeonSqdmlal( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1H | VALID_1S | VALID_48H | VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_1H | VALID_1S | VALID_48H | VALID_24S)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, NEON_SIZE(SrcSize & ~4), 0x0e209000, 0x5e209000); } @@ -2253,7 +2253,7 @@ EmitNeonSqdmlal2( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_8H | VALID_4S)); + Assert(NeonSizeIsValid(SrcSize, VALID_8H | VALID_4S)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, NEON_SIZE(SrcSize | 4), 0x0e209000); } @@ -2267,7 +2267,7 @@ EmitNeonSqdmlsl( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1H | VALID_1S | VALID_48H | VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_1H | VALID_1S | VALID_48H | VALID_24S)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, NEON_SIZE(SrcSize & ~4), 0x0e20b000, 0x5e20b00); } @@ -2281,7 +2281,7 @@ EmitNeonSqdmlsl2( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_8H | VALID_4S)); + Assert(NeonSizeIsValid(SrcSize, VALID_8H | VALID_4S)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, NEON_SIZE(SrcSize | 4), 0x0e20b000); } @@ -2295,7 +2295,7 @@ EmitNeonSqdmulh( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1H | VALID_1S | VALID_48H | VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_1H | VALID_1S | VALID_48H | VALID_24S)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x0e20b400, 0x5e20b400); } @@ -2309,7 +2309,7 @@ EmitNeonSqdmull( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1H | VALID_1S | VALID_48H | VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_1H | VALID_1S | VALID_48H | VALID_24S)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, NEON_SIZE(SrcSize & ~4), 0x0e20d000, 0x5e20d000); } @@ -2323,7 +2323,7 @@ EmitNeonSqdmull2( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_8H | VALID_4S)); + Assert(NeonSizeIsValid(SrcSize, VALID_8H | VALID_4S)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, NEON_SIZE(SrcSize | 4), 0x0e20d000); } @@ -2337,7 +2337,7 @@ EmitNeonSqrdmulh( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1H | VALID_1S | VALID_48H | VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_1H | VALID_1S | VALID_48H | VALID_24S)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x2e20b400, 0x7e20b400); } @@ -2351,7 +2351,7 @@ EmitNeonSqrshl( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1B | VALID_1H | VALID_1S | VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1B | VALID_1H | VALID_1S | VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x0e205c00, 0x5e205c00); } @@ -2365,7 +2365,7 @@ EmitNeonSqshl( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1B | VALID_1H | VALID_1S | VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1B | VALID_1H | VALID_1S | VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x0e204c00, 0x5e204c00); } @@ -2379,7 +2379,7 @@ EmitNeonSqsub( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1B | VALID_1H | VALID_1S | VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1B | VALID_1H | VALID_1S | VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x0e202c00, 0x5e202c00); } @@ -2393,7 +2393,7 @@ EmitNeonSrhadd( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x0e201400); } @@ -2407,7 +2407,7 @@ EmitNeonSrshl( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x0e205400, 0x5e205400); } @@ -2421,7 +2421,7 @@ EmitNeonSshl( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x0e204400, 0x5e204400); } @@ -2435,7 +2435,7 @@ EmitNeonSsubl( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, NEON_SIZE(SrcSize & ~4), 0x0e202000); } @@ -2449,7 +2449,7 @@ EmitNeonSsubl2( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, NEON_SIZE(SrcSize | 4), 0x0e202000); } @@ -2463,7 +2463,7 @@ EmitNeonSsubw( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, NEON_SIZE(SrcSize & ~4), 0x0e203000); } @@ -2477,7 +2477,7 @@ EmitNeonSsubw2( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, NEON_SIZE(SrcSize | 4), 0x0e203000); } @@ -2491,7 +2491,7 @@ EmitNeonSub( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x2e208400, 0x7e208400); } @@ -2505,7 +2505,7 @@ EmitNeonSubhn( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_48H | VALID_24S | VALID_2D)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, NEON_SIZE(SrcSize & ~4), 0x0e206000); } @@ -2519,7 +2519,7 @@ EmitNeonSubhn2( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_8H | VALID_4S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_8H | VALID_4S | VALID_2D)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, NEON_SIZE(SrcSize | 4), 0x0e206000); } @@ -2533,7 +2533,7 @@ EmitNeonTrn1( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x0e002800); } @@ -2547,7 +2547,7 @@ EmitNeonTrn2( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x0e006800); } @@ -2561,7 +2561,7 @@ EmitNeonUaba( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x2e207c00); } @@ -2575,7 +2575,7 @@ EmitNeonUabal( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, NEON_SIZE(SrcSize & ~4), 0x2e205000); } @@ -2589,7 +2589,7 @@ EmitNeonUabal2( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, NEON_SIZE(SrcSize | 4), 0x2e205000); } @@ -2603,7 +2603,7 @@ EmitNeonUabd( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x2e207400); } @@ -2617,7 +2617,7 @@ EmitNeonUabdl( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, NEON_SIZE(SrcSize & ~4), 0x2e207000); } @@ -2631,7 +2631,7 @@ EmitNeonUabdl2( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, NEON_SIZE(SrcSize | 4), 0x2e207000); } @@ -2645,7 +2645,7 @@ EmitNeonUaddl( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, NEON_SIZE(SrcSize & ~4), 0x2e200000); } @@ -2659,7 +2659,7 @@ EmitNeonUaddl2( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, NEON_SIZE(SrcSize | 4), 0x2e200000); } @@ -2673,7 +2673,7 @@ EmitNeonUaddw( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, NEON_SIZE(SrcSize & ~4), 0x2e201000); } @@ -2687,7 +2687,7 @@ EmitNeonUaddw2( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, NEON_SIZE(SrcSize | 4), 0x2e201000); } @@ -2701,7 +2701,7 @@ EmitNeonUhadd( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x2e200400); } @@ -2715,7 +2715,7 @@ EmitNeonUhsub( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x2e202400); } @@ -2729,7 +2729,7 @@ EmitNeonUmax( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x2e206400); } @@ -2743,7 +2743,7 @@ EmitNeonUmaxp( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x2e20a400); } @@ -2757,7 +2757,7 @@ EmitNeonUmin( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x2e206c00); } @@ -2771,7 +2771,7 @@ EmitNeonUminp( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x2e20ac00); } @@ -2785,7 +2785,7 @@ EmitNeonUmlal( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, NEON_SIZE(SrcSize & ~4), 0x2e208000); } @@ -2799,7 +2799,7 @@ EmitNeonUmlal2( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, NEON_SIZE(SrcSize | 4), 0x2e208000); } @@ -2813,7 +2813,7 @@ EmitNeonUmlsl( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, NEON_SIZE(SrcSize & ~4), 0x2e20a000); } @@ -2827,7 +2827,7 @@ EmitNeonUmlsl2( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, NEON_SIZE(SrcSize | 4), 0x2e20a000); } @@ -2841,7 +2841,7 @@ EmitNeonUmull( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, NEON_SIZE(SrcSize & ~4), 0x2e20c000); } @@ -2855,7 +2855,7 @@ EmitNeonUmull2( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, NEON_SIZE(SrcSize | 4), 0x2e20c000); } @@ -2869,7 +2869,7 @@ EmitNeonUqadd( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1B | VALID_1H | VALID_1S | VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1B | VALID_1H | VALID_1S | VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x2e200c00, 0x7e200c00); } @@ -2883,7 +2883,7 @@ EmitNeonUqrshl( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1B | VALID_1H | VALID_1S | VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1B | VALID_1H | VALID_1S | VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x2e205c00, 0x7e205c00); } @@ -2897,7 +2897,7 @@ EmitNeonUqshl( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1B | VALID_1H | VALID_1S | VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1B | VALID_1H | VALID_1S | VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x2e204c00, 0x7e204c00); } @@ -2911,7 +2911,7 @@ EmitNeonUqsub( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1B | VALID_1H | VALID_1S | VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1B | VALID_1H | VALID_1S | VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x2e202c00, 0x7e202c00); } @@ -2925,7 +2925,7 @@ EmitNeonUrhadd( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x2e201400); } @@ -2939,7 +2939,7 @@ EmitNeonUrshl( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x2e205400, 0x7e205400); } @@ -2953,7 +2953,7 @@ EmitNeonUshl( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x2e204400, 0x7e204400); } @@ -2967,7 +2967,7 @@ EmitNeonUsubl( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, NEON_SIZE(SrcSize & ~4), 0x2e202000); } @@ -2981,7 +2981,7 @@ EmitNeonUsubl2( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, NEON_SIZE(SrcSize | 4), 0x2e202000); } @@ -2995,7 +2995,7 @@ EmitNeonUsubw( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, NEON_SIZE(SrcSize & ~4), 0x2e203000); } @@ -3009,7 +3009,7 @@ EmitNeonUsubw2( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, NEON_SIZE(SrcSize | 4), 0x2e203000); } @@ -3023,7 +3023,7 @@ EmitNeonUzp1( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x0e001800); } @@ -3037,7 +3037,7 @@ EmitNeonUzp2( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x0e005800); } @@ -3051,7 +3051,7 @@ EmitNeonZip1( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x0e003800); } @@ -3065,7 +3065,7 @@ EmitNeonZip2( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x0e007800); } @@ -3087,10 +3087,10 @@ EmitNeonFloatTrinaryCommon( { if (NeonSizeIsScalar(SrcSize)) { - NT_ASSERT(ScalarOpcode != 0); + Assert(ScalarOpcode != 0); return Emitter.EmitFourBytes(ScalarOpcode | ((SrcSize & 1) << 22) | (Src2.RawRegister() << 16) | (Src1.RawRegister() << 5) | Dest.RawRegister()); } else { - NT_ASSERT(VectorOpcode != 0); + Assert(VectorOpcode != 0); return Emitter.EmitFourBytes(VectorOpcode | (((SrcSize >> 2) & 1) << 30) | ((SrcSize & 1) << 22) | (Src2.RawRegister() << 16) | (Src1.RawRegister() << 5) | Dest.RawRegister()); } } @@ -3105,7 +3105,7 @@ EmitNeonFabd( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); return EmitNeonFloatTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x2ea0d400, 0x7ea0d400); } @@ -3119,7 +3119,7 @@ EmitNeonFacge( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); return EmitNeonFloatTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x2e20ec00, 0x7e20ec00); } @@ -3133,7 +3133,7 @@ EmitNeonFacgt( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); return EmitNeonFloatTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x2ea0ec00, 0x7ea0ec00); } @@ -3147,7 +3147,7 @@ EmitNeonFadd( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); return EmitNeonFloatTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x0e20d400, 0x1e202800); } @@ -3161,7 +3161,7 @@ EmitNeonFaddp( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_24S | VALID_2D)); return EmitNeonFloatTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x2e20d400); } @@ -3179,7 +3179,7 @@ EmitNeonFcmeq( // NaNs produce 0s (false) // - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); return EmitNeonFloatTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x0e20e400, 0x5e20e400); } @@ -3193,7 +3193,7 @@ EmitNeonFcmge( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); return EmitNeonFloatTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x2e20e400, 0x7e20e400); } @@ -3207,7 +3207,7 @@ EmitNeonFcmgt( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); return EmitNeonFloatTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x2ea0e400, 0x7ea0e400); } @@ -3220,7 +3220,7 @@ EmitNeonFcmp( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D)); return EmitNeonFloatTrinaryCommon(Emitter, NEONREG_D0, Src1, Src2, SrcSize, 0, 0x1e202000); } @@ -3232,7 +3232,7 @@ EmitNeonFcmp0( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D)); return EmitNeonFloatTrinaryCommon(Emitter, NEONREG_D0, Src1, NEONREG_D0, SrcSize, 0, 0x1e202008); } @@ -3245,7 +3245,7 @@ EmitNeonFcmpe( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D)); return EmitNeonFloatTrinaryCommon(Emitter, NEONREG_D0, Src1, Src2, SrcSize, 0, 0x1e202010); } @@ -3257,7 +3257,7 @@ EmitNeonFcmpe0( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D)); return EmitNeonFloatTrinaryCommon(Emitter, NEONREG_D0, Src1, NEONREG_D0, SrcSize, 0, 0x1e204018); } @@ -3271,7 +3271,7 @@ EmitNeonFdiv( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); return EmitNeonFloatTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x2e20fc00, 0x1e201800); } @@ -3285,7 +3285,7 @@ EmitNeonFmax( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); return EmitNeonFloatTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x0e20f400, 0x1e204800); } @@ -3299,7 +3299,7 @@ EmitNeonFmaxnm( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); return EmitNeonFloatTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x0e20c400, 0x1e206800); } @@ -3313,7 +3313,7 @@ EmitNeonFmaxnmp( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_24S | VALID_2D)); return EmitNeonFloatTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x2e20c400); } @@ -3327,7 +3327,7 @@ EmitNeonFmaxp( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_24S | VALID_2D)); return EmitNeonFloatTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x2e20f400); } @@ -3341,7 +3341,7 @@ EmitNeonFmin( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); return EmitNeonFloatTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x0ea0f400, 0x1e205800); } @@ -3355,7 +3355,7 @@ EmitNeonFminnm( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); return EmitNeonFloatTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x0ea0c400, 0x1e207800); } @@ -3369,7 +3369,7 @@ EmitNeonFminnmp( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_24S | VALID_2D)); return EmitNeonFloatTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x2ea0c400); } @@ -3383,7 +3383,7 @@ EmitNeonFminp( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_24S | VALID_2D)); return EmitNeonFloatTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x2ea0f400); } @@ -3397,7 +3397,7 @@ EmitNeonFmla( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_24S | VALID_2D)); return EmitNeonFloatTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x0e20cc00); } @@ -3411,7 +3411,7 @@ EmitNeonFmls( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_24S | VALID_2D)); return EmitNeonFloatTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x0ea0cc00); } @@ -3425,7 +3425,7 @@ EmitNeonFmul( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); return EmitNeonFloatTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x2e20dc00, 0x1e200800); } @@ -3439,7 +3439,7 @@ EmitNeonFmulx( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); return EmitNeonFloatTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x0e20dc00, 0x5e20dc00); } @@ -3453,7 +3453,7 @@ EmitNeonFnmul( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D)); return EmitNeonFloatTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0, 0x1e208800); } @@ -3467,7 +3467,7 @@ EmitNeonFrecps( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); return EmitNeonFloatTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x0e20fc00, 0x5e20fc00); } @@ -3481,7 +3481,7 @@ EmitNeonFrsqrts( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); return EmitNeonFloatTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x0ea0fc00, 0x5ea0fc00); } @@ -3495,7 +3495,7 @@ EmitNeonFsub( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D | VALID_24S | VALID_2D)); return EmitNeonFloatTrinaryCommon(Emitter, Dest, Src1, Src2, SrcSize, 0x0ea0d400, 0x1e203800); } @@ -3516,15 +3516,15 @@ EmitNeonShiftLeftImmediateCommon( ) { ULONG Size = SrcSize & 3; - NT_ASSERT(Immediate < (8U << Size)); + Assert(Immediate < (8U << Size)); ULONG EffShift = Immediate + (8 << Size); if (NeonSizeIsScalar(SrcSize)) { - NT_ASSERT(ScalarOpcode != 0); + Assert(ScalarOpcode != 0); return Emitter.EmitFourBytes(ScalarOpcode | (EffShift << 16) | (Src.RawRegister() << 5) | Dest.RawRegister()); } else { - NT_ASSERT(VectorOpcode != 0); + Assert(VectorOpcode != 0); return Emitter.EmitFourBytes(VectorOpcode | (((SrcSize >> 2) & 1) << 30) | (EffShift << 16) | (Src.RawRegister() << 5) | Dest.RawRegister()); } } @@ -3542,15 +3542,15 @@ EmitNeonShiftRightImmediateCommon( ) { ULONG Size = SrcSize & 3; - NT_ASSERT(Immediate <= (8U << Size)); + Assert(Immediate <= (8U << Size)); ULONG EffShift = (16 << Size) - Immediate; if (NeonSizeIsScalar(SrcSize)) { - NT_ASSERT(ScalarOpcode != 0); + Assert(ScalarOpcode != 0); return Emitter.EmitFourBytes(ScalarOpcode | (EffShift << 16) | (Src.RawRegister() << 5) | Dest.RawRegister()); } else { - NT_ASSERT(VectorOpcode != 0); + Assert(VectorOpcode != 0); return Emitter.EmitFourBytes(VectorOpcode | (((SrcSize >> 2) & 1) << 30) | (EffShift << 16) | (Src.RawRegister() << 5) | Dest.RawRegister()); } } @@ -3565,7 +3565,7 @@ EmitNeonRshrn( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_48H | VALID_24S | VALID_2D)); return EmitNeonShiftRightImmediateCommon(Emitter, Dest, Src, Immediate, NEON_SIZE((SrcSize - 1) & ~4), 0x0f008c00); } @@ -3579,7 +3579,7 @@ EmitNeonRshrn2( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_8H | VALID_4S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_8H | VALID_4S | VALID_2D)); return EmitNeonShiftRightImmediateCommon(Emitter, Dest, Src, Immediate, NEON_SIZE((SrcSize - 1) | 4), 0x0f008c00); } @@ -3593,7 +3593,7 @@ EmitNeonShl( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonShiftLeftImmediateCommon(Emitter, Dest, Src, Immediate, SrcSize, 0x0f005400, 0x5f005400); } @@ -3607,7 +3607,7 @@ EmitNeonShrn( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_48H | VALID_24S | VALID_2D)); return EmitNeonShiftRightImmediateCommon(Emitter, Dest, Src, Immediate, NEON_SIZE((SrcSize - 1) & ~4), 0x0f008400); } @@ -3621,7 +3621,7 @@ EmitNeonShrn2( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_8H | VALID_4S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_8H | VALID_4S | VALID_2D)); return EmitNeonShiftRightImmediateCommon(Emitter, Dest, Src, Immediate, NEON_SIZE((SrcSize - 1) | 4), 0x0f008400); } @@ -3635,7 +3635,7 @@ EmitNeonSli( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonShiftLeftImmediateCommon(Emitter, Dest, Src, Immediate, SrcSize, 0x2f005400, 0x7f005400); } @@ -3649,7 +3649,7 @@ EmitNeonSqrshrn( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1H | VALID_1S | VALID_1D | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1H | VALID_1S | VALID_1D | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonShiftRightImmediateCommon(Emitter, Dest, Src, Immediate, NEON_SIZE((SrcSize - 1) & ~4), 0x0f009c00, 0x5f009c00); } @@ -3663,7 +3663,7 @@ EmitNeonSqrshrn2( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_8H | VALID_4S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_8H | VALID_4S | VALID_2D)); return EmitNeonShiftRightImmediateCommon(Emitter, Dest, Src, Immediate, NEON_SIZE((SrcSize - 1) | 4), 0x0f009c00); } @@ -3677,7 +3677,7 @@ EmitNeonSqrshrun( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1H | VALID_1S | VALID_1D | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1H | VALID_1S | VALID_1D | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonShiftRightImmediateCommon(Emitter, Dest, Src, Immediate, NEON_SIZE((SrcSize - 1) & ~4), 0x2f008c00, 0x7f008c00); } @@ -3691,7 +3691,7 @@ EmitNeonSqrshrun2( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_8H | VALID_4S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_8H | VALID_4S | VALID_2D)); return EmitNeonShiftRightImmediateCommon(Emitter, Dest, Src, Immediate, NEON_SIZE((SrcSize - 1) | 4), 0x2f008c00); } @@ -3705,7 +3705,7 @@ EmitNeonSqshl( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1B | VALID_1H | VALID_1S | VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1B | VALID_1H | VALID_1S | VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonShiftLeftImmediateCommon(Emitter, Dest, Src, Immediate, SrcSize, 0x0f007400, 0x5f007400); } @@ -3719,7 +3719,7 @@ EmitNeonSqshlu( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1B | VALID_1H | VALID_1S | VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1B | VALID_1H | VALID_1S | VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonShiftLeftImmediateCommon(Emitter, Dest, Src, Immediate, SrcSize, 0x2f006400, 0x7f006400); } @@ -3733,7 +3733,7 @@ EmitNeonSqshrn( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1H | VALID_1S | VALID_1D | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1H | VALID_1S | VALID_1D | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonShiftRightImmediateCommon(Emitter, Dest, Src, Immediate, NEON_SIZE((SrcSize - 1) & ~4), 0x0f009400, 0x5f009400); } @@ -3747,7 +3747,7 @@ EmitNeonSqshrn2( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_8H | VALID_4S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_8H | VALID_4S | VALID_2D)); return EmitNeonShiftRightImmediateCommon(Emitter, Dest, Src, Immediate, NEON_SIZE((SrcSize - 1) | 4), 0x0f009400); } @@ -3761,7 +3761,7 @@ EmitNeonSri( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonShiftRightImmediateCommon(Emitter, Dest, Src, Immediate, SrcSize, 0x2f004400, 0x7f004400); } @@ -3775,7 +3775,7 @@ EmitNeonSrshr( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonShiftRightImmediateCommon(Emitter, Dest, Src, Immediate, SrcSize, 0x0f002400, 0x5f002400); } @@ -3789,7 +3789,7 @@ EmitNeonSrsra( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonShiftRightImmediateCommon(Emitter, Dest, Src, Immediate, SrcSize, 0x0f003400, 0x5f003400); } @@ -3803,7 +3803,7 @@ EmitNeonSshll( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonShiftLeftImmediateCommon(Emitter, Dest, Src, Immediate, NEON_SIZE(SrcSize & ~4), 0x0f00a400); } @@ -3817,7 +3817,7 @@ EmitNeonSshll2( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_16B | VALID_8H | VALID_4S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_16B | VALID_8H | VALID_4S | VALID_2D)); return EmitNeonShiftLeftImmediateCommon(Emitter, Dest, Src, Immediate, NEON_SIZE(SrcSize | 4), 0x0f00a400); } @@ -3831,7 +3831,7 @@ EmitNeonSshr( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonShiftRightImmediateCommon(Emitter, Dest, Src, Immediate, SrcSize, 0x0f000400, 0x5f000400); } @@ -3845,7 +3845,7 @@ EmitNeonSsra( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonShiftRightImmediateCommon(Emitter, Dest, Src, Immediate, SrcSize, 0x0f001400, 0x5f001400); } @@ -3858,7 +3858,7 @@ EmitNeonSxtl( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonShiftLeftImmediateCommon(Emitter, Dest, Src, 0, NEON_SIZE(SrcSize & ~4), 0x0f00a400); } @@ -3871,7 +3871,7 @@ EmitNeonSxtl2( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_16B | VALID_8H | VALID_4S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_16B | VALID_8H | VALID_4S | VALID_2D)); return EmitNeonShiftLeftImmediateCommon(Emitter, Dest, Src, 0, NEON_SIZE(SrcSize | 4), 0x0f00a400); } @@ -3885,7 +3885,7 @@ EmitNeonUqrshrn( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1H | VALID_1S | VALID_1D | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1H | VALID_1S | VALID_1D | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonShiftRightImmediateCommon(Emitter, Dest, Src, Immediate, NEON_SIZE((SrcSize - 1) & ~4), 0x2f009c00, 0x7f009c00); } @@ -3899,7 +3899,7 @@ EmitNeonUqrshrn2( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_8H | VALID_4S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_8H | VALID_4S | VALID_2D)); return EmitNeonShiftRightImmediateCommon(Emitter, Dest, Src, Immediate, NEON_SIZE((SrcSize - 1) | 4), 0x2f009c00); } @@ -3913,7 +3913,7 @@ EmitNeonUqshl( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1B | VALID_1H | VALID_1S | VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1B | VALID_1H | VALID_1S | VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonShiftLeftImmediateCommon(Emitter, Dest, Src, Immediate, SrcSize, 0x2f007400, 0x7f007400); } @@ -3927,7 +3927,7 @@ EmitNeonUqshrn( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1H | VALID_1S | VALID_1D | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1H | VALID_1S | VALID_1D | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonShiftRightImmediateCommon(Emitter, Dest, Src, Immediate, NEON_SIZE((SrcSize - 1) & ~4), 0x2f009400, 0x7f009400); } @@ -3941,7 +3941,7 @@ EmitNeonUqshrn2( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_8H | VALID_4S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_8H | VALID_4S | VALID_2D)); return EmitNeonShiftRightImmediateCommon(Emitter, Dest, Src, Immediate, NEON_SIZE((SrcSize - 1) | 4), 0x2f009400); } @@ -3955,7 +3955,7 @@ EmitNeonUrshr( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonShiftRightImmediateCommon(Emitter, Dest, Src, Immediate, SrcSize, 0x2f002400, 0x7f002400); } @@ -3969,7 +3969,7 @@ EmitNeonUrsra( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonShiftRightImmediateCommon(Emitter, Dest, Src, Immediate, SrcSize, 0x2f003400, 0x7f003400); } @@ -3983,7 +3983,7 @@ EmitNeonUshll( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonShiftLeftImmediateCommon(Emitter, Dest, Src, Immediate, NEON_SIZE(SrcSize & ~4), 0x2f00a400); } @@ -3997,7 +3997,7 @@ EmitNeonUshll2( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_16B | VALID_8H | VALID_4S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_16B | VALID_8H | VALID_4S | VALID_2D)); return EmitNeonShiftLeftImmediateCommon(Emitter, Dest, Src, Immediate, NEON_SIZE(SrcSize | 4), 0x2f00a400); } @@ -4011,7 +4011,7 @@ EmitNeonUshr( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonShiftRightImmediateCommon(Emitter, Dest, Src, Immediate, SrcSize, 0x2f000400, 0x7f000400); } @@ -4025,7 +4025,7 @@ EmitNeonUsra( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1D | VALID_816B | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonShiftRightImmediateCommon(Emitter, Dest, Src, Immediate, SrcSize, 0x2f001400, 0x7f001400); } @@ -4038,7 +4038,7 @@ EmitNeonUxtl( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonShiftLeftImmediateCommon(Emitter, Dest, Src, 0, NEON_SIZE(SrcSize & ~4), 0x2f00a400); } @@ -4051,7 +4051,7 @@ EmitNeonUxtl2( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_16B | VALID_8H | VALID_4S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_16B | VALID_8H | VALID_4S | VALID_2D)); return EmitNeonShiftLeftImmediateCommon(Emitter, Dest, Src, 0, NEON_SIZE(SrcSize | 4), 0x2f00a400); } @@ -4081,7 +4081,7 @@ EmitNeonFcvtmsGen( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D)); return EmitNeonConvertScalarCommon(Emitter, Dest, Src, SrcSize, 0x1e300000); } @@ -4094,7 +4094,7 @@ EmitNeonFcvtmsGen64( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D)); return EmitNeonConvertScalarCommon(Emitter, Dest, Src, SrcSize, 0x9e300000); } @@ -4107,7 +4107,7 @@ EmitNeonFcvtmuGen( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D)); return EmitNeonConvertScalarCommon(Emitter, Dest, Src, SrcSize, 0x1e310000); } @@ -4120,7 +4120,7 @@ EmitNeonFcvtmuGen64( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D)); return EmitNeonConvertScalarCommon(Emitter, Dest, Src, SrcSize, 0x9e310000); } @@ -4133,7 +4133,7 @@ EmitNeonFcvtnsGen( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D)); return EmitNeonConvertScalarCommon(Emitter, Dest, Src, SrcSize, 0x1e200000); } @@ -4146,7 +4146,7 @@ EmitNeonFcvtnsGen64( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D)); return EmitNeonConvertScalarCommon(Emitter, Dest, Src, SrcSize, 0x9e200000); } @@ -4159,7 +4159,7 @@ EmitNeonFcvtnuGen( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D)); return EmitNeonConvertScalarCommon(Emitter, Dest, Src, SrcSize, 0x1e210000); } @@ -4172,7 +4172,7 @@ EmitNeonFcvtnuGen64( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D)); return EmitNeonConvertScalarCommon(Emitter, Dest, Src, SrcSize, 0x9e210000); } @@ -4185,7 +4185,7 @@ EmitNeonFcvtpsGen( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D)); return EmitNeonConvertScalarCommon(Emitter, Dest, Src, SrcSize, 0x1e280000); } @@ -4198,7 +4198,7 @@ EmitNeonFcvtpsGen64( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D)); return EmitNeonConvertScalarCommon(Emitter, Dest, Src, SrcSize, 0x9e280000); } @@ -4211,7 +4211,7 @@ EmitNeonFcvtpuGen( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D)); return EmitNeonConvertScalarCommon(Emitter, Dest, Src, SrcSize, 0x1e290000); } @@ -4224,7 +4224,7 @@ EmitNeonFcvtpuGen64( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D)); return EmitNeonConvertScalarCommon(Emitter, Dest, Src, SrcSize, 0x9e290000); } @@ -4237,7 +4237,7 @@ EmitNeonFcvtzsGen( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D)); return EmitNeonConvertScalarCommon(Emitter, Dest, Src, SrcSize, 0x1e380000); } @@ -4250,7 +4250,7 @@ EmitNeonFcvtzsGen64( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D)); return EmitNeonConvertScalarCommon(Emitter, Dest, Src, SrcSize, 0x9e380000); } @@ -4263,7 +4263,7 @@ EmitNeonFcvtzuGen( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D)); return EmitNeonConvertScalarCommon(Emitter, Dest, Src, SrcSize, 0x1e390000); } @@ -4276,7 +4276,7 @@ EmitNeonFcvtzuGen64( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D)); return EmitNeonConvertScalarCommon(Emitter, Dest, Src, SrcSize, 0x9e390000); } @@ -4290,7 +4290,7 @@ EmitNeonFmovToGeneral( ) { UNREFERENCED_PARAMETER(SrcSize); - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S)); return EmitNeonConvertScalarCommon(Emitter, Dest, Src, SIZE_1S, 0x1e260000); } @@ -4308,7 +4308,7 @@ EmitNeonFmovToGeneral64( ) { UNREFERENCED_PARAMETER(SrcSize); - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1D | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1D | VALID_2D)); return EmitNeonConvertScalarCommon(Emitter, Dest, Src, SIZE_1D, 0x9e260000); } @@ -4326,7 +4326,7 @@ EmitNeonFmovToGeneralHigh64( ) { UNREFERENCED_PARAMETER(SrcSize); - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_2D)); // TODO: Should this be VALID_1D? + Assert(NeonSizeIsValid(SrcSize, VALID_2D)); // TODO: Should this be VALID_1D? return EmitNeonConvertScalarCommon(Emitter, Dest, Src, SIZE_1S /* SIZE_1D */, 0x9eae0000); } @@ -4357,7 +4357,7 @@ EmitNeonFmovFromGeneral( ) { UNREFERENCED_PARAMETER(DestSize); - NT_ASSERT(NeonSizeIsValid(DestSize, VALID_1S)); + Assert(NeonSizeIsValid(DestSize, VALID_1S)); return EmitNeonConvertScalarCommon(Emitter, Dest, Src, SIZE_1S, 0x1e270000); } @@ -4375,7 +4375,7 @@ EmitNeonFmovFromGeneral64( ) { UNREFERENCED_PARAMETER(DestSize); - NT_ASSERT(NeonSizeIsValid(DestSize, VALID_1D | VALID_2D)); + Assert(NeonSizeIsValid(DestSize, VALID_1D | VALID_2D)); return EmitNeonConvertScalarCommon(Emitter, Dest, Src, SIZE_1D, 0x9e270000); } @@ -4393,7 +4393,7 @@ EmitNeonFmovFromGeneralHigh64( ) { UNREFERENCED_PARAMETER(DestSize); - NT_ASSERT(NeonSizeIsValid(DestSize, VALID_2D)); + Assert(NeonSizeIsValid(DestSize, VALID_2D)); return EmitNeonConvertScalarCommon(Emitter, Dest, Src, SIZE_1S /* SIZE_1D */, 0x9eaf0000); } @@ -4406,7 +4406,7 @@ EmitNeonScvtf( NEON_SIZE DstSize ) { - NT_ASSERT(NeonSizeIsValid(DstSize, VALID_1S | VALID_1D)); + Assert(NeonSizeIsValid(DstSize, VALID_1S | VALID_1D)); return EmitNeonConvertScalarCommon(Emitter, Dest, Src, DstSize, 0x1e220000); } @@ -4419,7 +4419,7 @@ EmitNeonScvtf64( NEON_SIZE DstSize ) { - NT_ASSERT(NeonSizeIsValid(DstSize, VALID_1S | VALID_1D)); + Assert(NeonSizeIsValid(DstSize, VALID_1S | VALID_1D)); return EmitNeonConvertScalarCommon(Emitter, Dest, Src, DstSize, 0x9e220000); } @@ -4432,7 +4432,7 @@ EmitNeonUcvtf( NEON_SIZE DstSize ) { - NT_ASSERT(NeonSizeIsValid(DstSize, VALID_1S | VALID_1D)); + Assert(NeonSizeIsValid(DstSize, VALID_1S | VALID_1D)); return EmitNeonConvertScalarCommon(Emitter, Dest, Src, DstSize, 0x1e230000); } @@ -4445,7 +4445,7 @@ EmitNeonUcvtf64( NEON_SIZE DstSize ) { - NT_ASSERT(NeonSizeIsValid(DstSize, VALID_1S | VALID_1D)); + Assert(NeonSizeIsValid(DstSize, VALID_1S | VALID_1D)); return EmitNeonConvertScalarCommon(Emitter, Dest, Src, DstSize, 0x9e230000); } @@ -4465,7 +4465,7 @@ EmitNeonMovElementCommon( ) { ULONG Size = SrcSize & 3; - NT_ASSERT((SrcIndex << Size) < 16); + Assert((SrcIndex << Size) < 16); SrcIndex = ((SrcIndex << 1) | 1) << Size; @@ -4482,7 +4482,7 @@ EmitNeonDupElement( NEON_SIZE DestSize ) { - NT_ASSERT(NeonSizeIsValid(DestSize, VALID_816B | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(DestSize, VALID_816B | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonMovElementCommon(Emitter, Dest, Src, SrcIndex, DestSize, 0x0e000400 | (((DestSize >> 2) & 1) << 30)); } @@ -4495,7 +4495,7 @@ EmitNeonDup( NEON_SIZE DestSize ) { - NT_ASSERT(NeonSizeIsValid(DestSize, VALID_816B | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(DestSize, VALID_816B | VALID_48H | VALID_24S | VALID_2D)); return EmitNeonMovElementCommon(Emitter, Dest, NeonRegisterParam(NEONREG_D0 + Src.RawRegister()), 0, DestSize, 0x0e000c00 | (((DestSize >> 2) & 1) << 30)); } @@ -4509,7 +4509,7 @@ EmitNeonIns( NEON_SIZE DestSize ) { - NT_ASSERT(NeonSizeIsValid(DestSize, VALID_1B | VALID_1H | VALID_1S | VALID_1D)); + Assert(NeonSizeIsValid(DestSize, VALID_1B | VALID_1H | VALID_1S | VALID_1D)); return EmitNeonMovElementCommon(Emitter, Dest, NeonRegisterParam(NEONREG_D0 + Src.RawRegister()), DestIndex, DestSize, 0x4e001c00); } @@ -4523,7 +4523,7 @@ EmitNeonSmov( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1B | VALID_1H)); + Assert(NeonSizeIsValid(SrcSize, VALID_1B | VALID_1H)); return EmitNeonMovElementCommon(Emitter, NeonRegisterParam(NEONREG_D0 + Dest.RawRegister()), Src, SrcIndex, SrcSize, 0x0e002c00); } @@ -4537,7 +4537,7 @@ EmitNeonSmov64( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1B | VALID_1H | VALID_1S)); + Assert(NeonSizeIsValid(SrcSize, VALID_1B | VALID_1H | VALID_1S)); return EmitNeonMovElementCommon(Emitter, NeonRegisterParam(NEONREG_D0 + Dest.RawRegister()), Src, SrcIndex, SrcSize, 0x4e002c00); } @@ -4551,7 +4551,7 @@ EmitNeonUmov( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1B | VALID_1H | VALID_1S)); + Assert(NeonSizeIsValid(SrcSize, VALID_1B | VALID_1H | VALID_1S)); return EmitNeonMovElementCommon(Emitter, NeonRegisterParam(NEONREG_D0 + Dest.RawRegister()), Src, SrcIndex, SrcSize, 0x0e003c00); } @@ -4565,7 +4565,7 @@ EmitNeonUmov64( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1B | VALID_1H | VALID_1S | VALID_1D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1B | VALID_1H | VALID_1S | VALID_1D)); return EmitNeonMovElementCommon(Emitter, NeonRegisterParam(NEONREG_D0 + Dest.RawRegister()), Src, SrcIndex, SrcSize, 0x4e003c00); } @@ -4584,11 +4584,11 @@ EmitNeonInsElement( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S | VALID_2D)); + Assert(NeonSizeIsValid(SrcSize, VALID_816B | VALID_48H | VALID_24S | VALID_2D)); ULONG Size = SrcSize & 3; - NT_ASSERT((DestIndex << Size) < 16); - NT_ASSERT((SrcIndex << Size) < 16); + Assert((DestIndex << Size) < 16); + Assert((SrcIndex << Size) < 16); DestIndex = ((DestIndex << 1) | 1) << Size; SrcIndex <<= Size; @@ -4611,7 +4611,7 @@ EmitNeonFcsel( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D)); + Assert(NeonSizeIsValid(SrcSize, VALID_1S | VALID_1D)); return Emitter.EmitFourBytes(0x1e200c00 | ((SrcSize & 1) << 22) | (Src2.RawRegister() << 16) | ((Condition & 15) << 12) | (Src1.RawRegister() << 5) | Dest.RawRegister()); } @@ -4703,7 +4703,7 @@ ComputeNeonImmediate( Op = 1; } - NT_ASSERT(EncImmediate < 256); + Assert(EncImmediate < 256); return (Op << 29) | (((EncImmediate >> 5) & 7) << 16) | (Cmode << 12) | ((EncImmediate & 0x1f) << 5); } @@ -4716,7 +4716,7 @@ EmitNeonMovi( NEON_SIZE DestSize ) { - NT_ASSERT(NeonSizeIsValid(DestSize, VALID_816B | VALID_48H | VALID_24S | VALID_2D | VALID_1D)); + Assert(NeonSizeIsValid(DestSize, VALID_816B | VALID_48H | VALID_24S | VALID_2D | VALID_1D)); ULONG EncImmediate = ComputeNeonImmediate(Immediate, DestSize); if (EncImmediate != 1) { @@ -4728,7 +4728,7 @@ EmitNeonMovi( return Emitter.EmitFourBytes(0x2f000400 | (((DestSize >> 2) & 1) << 30) | EncImmediate | Dest.RawRegister()); } - NT_ASSERT(false); + Assert(false); return 0; } @@ -4753,7 +4753,7 @@ EmitNeonTbl( } else { - NT_ASSERT(Size == SIZE_16B); + Assert(Size == SIZE_16B); return Emitter.EmitFourBytes(0x4e000000 | (Indices.RawRegister() << 16) | (Src.RawRegister() << 5) | Dest.RawRegister()); } @@ -4774,8 +4774,8 @@ EmitNeonExt( NEON_SIZE SrcSize ) { - NT_ASSERT(NeonSizeIsValid(SrcSize, VALID_816B)); - NT_ASSERT(((SrcSize == SIZE_8B) && (Immediate < 8)) || + Assert(NeonSizeIsValid(SrcSize, VALID_816B)); + Assert(((SrcSize == SIZE_8B) && (Immediate < 8)) || ((SrcSize == SIZE_16B) && (Immediate < 16))); return Emitter.EmitFourBytes(0x2e000000 | (((SrcSize >> 2) & 1) << 30) | (Src2.RawRegister() << 16) | (Immediate << 11) | (Src1.RawRegister() << 5) | Dest.RawRegister()); @@ -4797,7 +4797,7 @@ EmitNeonLdrStrOffsetCommon( ULONG OpcodeUnscaled ) { - NT_ASSERT(NeonSizeIsScalar(SrcDestSize)); + Assert(NeonSizeIsScalar(SrcDestSize)); ULONG SizeBits = ((SrcDestSize & 3) << 30) | ((SrcDestSize >> 2) << 23); @@ -4857,7 +4857,7 @@ EmitNeonLdpStpOffsetCommon( ULONG Opcode ) { - NT_ASSERT(NeonSizeIsValid(SrcDestSize, VALID_1S | VALID_1D | VALID_1Q)); + Assert(NeonSizeIsValid(SrcDestSize, VALID_1S | VALID_1D | VALID_1Q)); ULONG Opc = (SrcDestSize - 2); @@ -4917,7 +4917,7 @@ EmitNeonLd1St1Common( QSSize |= 1; } - NT_ASSERT(QSSize < 16); + Assert(QSSize < 16); ULONG Op = (SrcDestSize == SIZE_1B) ? 0 : (SrcDestSize == SIZE_1H) ? 2 : 4; return Emitter.EmitFourBytes(Opcode | ((QSSize >> 3) << 30) | (Op << 13) | ((QSSize & 7) << 10) | (Addr.RawRegister() << 5) | SrcDest.RawRegister()); @@ -4965,7 +4965,7 @@ EmitNeonAesD( UNREFERENCED_PARAMETER(SrcSize); - NT_ASSERT(SrcSize == SIZE_16B); + Assert(SrcSize == SIZE_16B); return Emitter.EmitFourBytes(0x4e285800 | (Src.RawRegister() << 5) | Dest.RawRegister()); } @@ -4982,7 +4982,7 @@ EmitNeonAesE( UNREFERENCED_PARAMETER(SrcSize); - NT_ASSERT(SrcSize == SIZE_16B); + Assert(SrcSize == SIZE_16B); return Emitter.EmitFourBytes(0x4e284800 | (Src.RawRegister() << 5) | Dest.RawRegister()); } @@ -4999,7 +4999,7 @@ EmitNeonAesImc( UNREFERENCED_PARAMETER(SrcSize); - NT_ASSERT(SrcSize == SIZE_16B); + Assert(SrcSize == SIZE_16B); return Emitter.EmitFourBytes(0x4e287800 | (Src.RawRegister() << 5) | Dest.RawRegister()); } @@ -5016,7 +5016,7 @@ EmitNeonAesMc( UNREFERENCED_PARAMETER(SrcSize); - NT_ASSERT(SrcSize == SIZE_16B); + Assert(SrcSize == SIZE_16B); return Emitter.EmitFourBytes(0x4e286800 | (Src.RawRegister() << 5) | Dest.RawRegister()); } diff --git a/lib/Backend/arm64/EncoderMD.cpp b/lib/Backend/arm64/EncoderMD.cpp index 4f04f86e365..a76abb04731 100644 --- a/lib/Backend/arm64/EncoderMD.cpp +++ b/lib/Backend/arm64/EncoderMD.cpp @@ -44,19 +44,19 @@ EncoderMD::Init(Encoder *encoder) /// ///---------------------------------------------------------------------------- -const BYTE +BYTE EncoderMD::GetRegEncode(IR::RegOpnd *regOpnd) { return GetRegEncode(regOpnd->GetReg()); } -const BYTE +BYTE EncoderMD::GetRegEncode(RegNum reg) { return RegEncode[reg]; } -const BYTE +BYTE EncoderMD::GetFloatRegEncode(IR::RegOpnd *regOpnd) { BYTE regEncode = GetRegEncode(regOpnd->GetReg()); diff --git a/lib/Backend/arm64/EncoderMD.h b/lib/Backend/arm64/EncoderMD.h index aa5097c56ad..90a255aa4b3 100644 --- a/lib/Backend/arm64/EncoderMD.h +++ b/lib/Backend/arm64/EncoderMD.h @@ -161,9 +161,9 @@ class EncoderMD void ApplyRelocs(size_t codeBufferAddress, size_t codeSize, uint* bufferCRC, BOOL isBrShorteningSucceeded, bool isFinalBufferValidation = false); static bool TryConstFold(IR::Instr *instr, IR::RegOpnd *regOpnd); static bool TryFold(IR::Instr *instr, IR::RegOpnd *regOpnd); - const BYTE GetRegEncode(IR::RegOpnd *regOpnd); - const BYTE GetFloatRegEncode(IR::RegOpnd *regOpnd); - static const BYTE GetRegEncode(RegNum reg); + BYTE GetRegEncode(IR::RegOpnd *regOpnd); + BYTE GetFloatRegEncode(IR::RegOpnd *regOpnd); + static BYTE GetRegEncode(RegNum reg); static uint32 GetOpdope(IR::Instr *instr); static uint32 GetOpdope(Js::OpCode op); diff --git a/lib/Backend/arm64/LinearScanMD.cpp b/lib/Backend/arm64/LinearScanMD.cpp index a299da15b39..9c023fdd54a 100644 --- a/lib/Backend/arm64/LinearScanMD.cpp +++ b/lib/Backend/arm64/LinearScanMD.cpp @@ -341,12 +341,6 @@ LinearScanMD::GenerateBailOut( instr->ReplaceSrc1(IR::RegOpnd::New(nullptr, RegLR, TyMachPtr, func)); } -IR::Instr * -LinearScanMD::GenerateBailInForGeneratorYield(IR::Instr * resumeLabelInstr, BailOutInfo * bailOutInfo) -{ - Js::Throw::NotImplemented(); -} - uint LinearScanMD::GetRegisterSaveIndex(RegNum reg) { return reg; diff --git a/lib/Backend/arm64/LinearScanMD.h b/lib/Backend/arm64/LinearScanMD.h index e2b90f4fe1d..479111822c4 100644 --- a/lib/Backend/arm64/LinearScanMD.h +++ b/lib/Backend/arm64/LinearScanMD.h @@ -46,7 +46,6 @@ class LinearScanMD : public LinearScanMDShared void LegalizeConstantUse(IR::Instr * instr, IR::Opnd * opnd) { /* no op for arm */ } void GenerateBailOut(IR::Instr * instr, __in_ecount(registerSaveSymsCount) StackSym ** registerSaveSyms, uint registerSaveSymsCount); - IR::Instr *GenerateBailInForGeneratorYield(IR::Instr * resumeLabelInstr, BailOutInfo * bailOutInfo); private: static void SaveAllRegisters(BailOutRecord *const bailOutRecord); public: diff --git a/lib/Backend/arm64/LinearScanMdA.S b/lib/Backend/arm64/LinearScanMdA.S new file mode 100644 index 00000000000..c137a605b51 --- /dev/null +++ b/lib/Backend/arm64/LinearScanMdA.S @@ -0,0 +1,107 @@ +;------------------------------------------------------------------------------------------------------- +; Copyright (C) Microsoft. All rights reserved. +; Copyright (c) ChakraCore Project Contributors. All rights reserved. +; Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. +;------------------------------------------------------------------------------------------------------- + +#include "unixasmmacros.inc" + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; LinearScanMD::SaveAllRegistersAndBailOut(BailOutRecord *const bailOutRecord) + +NESTED_ENTRY _ZN12LinearScanMD26SaveAllRegistersAndBailOutEP13BailOutRecord, _TEXT, NoHandler + + ; x0 == bailOutRecord + ; lr == return address + + ; Save all registers except the above, which would have already been saved by jitted code if necessary + ldr x17, [x0] ; bailOutRecord->globalBailOutRecordDataTable + ldr x17, [x17] ; bailOutRecord->globalBailOutRecordDataTable->registerSaveSpace + str x1, [x17, #1*8] + stp x2, x3, [x17, #2*8] + stp x4, x5, [x17, #4*8] + stp x6, x7, [x17, #6*8] + stp x8, x9, [x17, #8*8] + stp x10, x11, [x17, #10*8] + stp x12, x13, [x17, #12*8] + stp x14, x15, [x17, #14*8] + str x16, [x17, #16*8] + ; skip x17/x18 + stp x19, x20, [x17, #19*8] + stp x21, x22, [x17, #21*8] + stp x23, x24, [x17, #23*8] + stp x25, x26, [x17, #25*8] + stp x27, x28, [x17, #27*8] + str fp, [x17, #29*8] + ; skip lr, sp, zr + add x17, x17, #33*8 + stp d0, d1, [x17, #0*8] + stp d2, d3, [x17, #2*8] + stp d4, d5, [x17, #4*8] + stp d6, d7, [x17, #6*8] + stp d8, d9, [x17, #8*8] + stp d10, d11, [x17, #10*8] + stp d12, d13, [x17, #12*8] + stp d14, d15, [x17, #14*8] + stp d16, d17, [x17, #16*8] + stp d18, d19, [x17, #18*8] + stp d20, d21, [x17, #20*8] + stp d22, d23, [x17, #22*8] + stp d24, d25, [x17, #24*8] + stp d26, d27, [x17, #26*8] + stp d28, d29, [x17, #28*8] + ;stp d30, d31, [x17, #30*8] + + b C_FUNC(_ZN13BailOutRecord7BailOutEPKS_) + +NESTED_END _ZN12LinearScanMD26SaveAllRegistersAndBailOutEP13BailOutRecord, _TEXT + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; LinearScanMD::SaveAllRegistersAndBranchBailOut(BranchBailOutRecord *const bailOutRecord, const BOOL condition) + +NESTED_ENTRY _ZN12LinearScanMD32SaveAllRegistersAndBranchBailOutEP19BranchBailOutRecordi, _TEXT, NoHandler + + ; x0 == bailOutRecord + ; x1 == condition + ; lr == return address + + ; Save all registers except the above, which would have already been saved by jitted code if necessary + ldr x17, [x0] ; bailOutRecord->globalBailOutRecordDataTable + ldr x17, [x17] ; bailOutRecord->globalBailOutRecordDataTable->registerSaveSpace + stp x2, x3, [x17, #2*8] + stp x4, x5, [x17, #4*8] + stp x6, x7, [x17, #6*8] + stp x8, x9, [x17, #8*8] + stp x10, x11, [x17, #10*8] + stp x12, x13, [x17, #12*8] + stp x14, x15, [x17, #14*8] + str x16, [x17, #16*8] + ; skip x17/x18 + stp x19, x20, [x17, #19*8] + stp x21, x22, [x17, #21*8] + stp x23, x24, [x17, #23*8] + stp x25, x26, [x17, #25*8] + stp x27, x28, [x17, #27*8] + str fp, [x17, #29*8] + ; skip lr, sp, zr + add x17, x17, #33*8 + stp d0, d1, [x17, #0*8] + stp d2, d3, [x17, #2*8] + stp d4, d5, [x17, #4*8] + stp d6, d7, [x17, #6*8] + stp d8, d9, [x17, #8*8] + stp d10, d11, [x17, #10*8] + stp d12, d13, [x17, #12*8] + stp d14, d15, [x17, #14*8] + stp d16, d17, [x17, #16*8] + stp d18, d19, [x17, #18*8] + stp d20, d21, [x17, #20*8] + stp d22, d23, [x17, #22*8] + stp d24, d25, [x17, #24*8] + stp d26, d27, [x17, #26*8] + stp d28, d29, [x17, #28*8] + ;stp d30, d31, [x17, #30*8] + + b C_FUNC(_ZN19BranchBailOutRecord7BailOutEPKS_i) + +NESTED_END _ZN12LinearScanMD32SaveAllRegistersAndBranchBailOutEP19BranchBailOutRecordi, _TEXT diff --git a/lib/Backend/arm64/LowerMD.cpp b/lib/Backend/arm64/LowerMD.cpp index e37b365943c..abf5b275a64 100644 --- a/lib/Backend/arm64/LowerMD.cpp +++ b/lib/Backend/arm64/LowerMD.cpp @@ -223,10 +223,14 @@ LowererMD::LowerCallHelper(IR::Instr *instrCall) Assert(regArg->m_sym->m_isSingleDef); IR::Instr *instrArg = regArg->m_sym->m_instrDef; - Assert(instrArg->m_opcode == Js::OpCode::ArgOut_A || - (helperMethod == IR::JnHelperMethod::HelperOP_InitCachedScope && instrArg->m_opcode == Js::OpCode::ExtendArg_A) || - (helperMethod == IR::JnHelperMethod::HelperScrFunc_OP_NewScFuncHomeObj && instrArg->m_opcode == Js::OpCode::ExtendArg_A) || - (helperMethod == IR::JnHelperMethod::HelperScrFunc_OP_NewScGenFuncHomeObj && instrArg->m_opcode == Js::OpCode::ExtendArg_A)); + Assert(instrArg->m_opcode == Js::OpCode::ArgOut_A || instrArg->m_opcode == Js::OpCode::ExtendArg_A && + ( + helperMethod == IR::JnHelperMethod::HelperOP_InitCachedScope || + helperMethod == IR::JnHelperMethod::HelperScrFunc_OP_NewScFuncHomeObj || + helperMethod == IR::JnHelperMethod::HelperScrFunc_OP_NewScGenFuncHomeObj || + helperMethod == IR::JnHelperMethod::HelperRestify || + helperMethod == IR::JnHelperMethod::HelperStPropIdArrFromVar + )); prevInstr = this->LoadHelperArgument(prevInstr, instrArg->GetSrc1()); argOpnd = instrArg->GetSrc2(); @@ -1028,7 +1032,7 @@ class ARM64StackLayout BitVector SavedRegisters() const { return m_savedRegisters; } BitVector SavedDoubles() const { return m_savedDoubles; } - // Locals area sits right after space allocated for argments + // Locals area sits right after space allocated for arguments ULONG LocalsOffset() const { return this->m_argSlotCount * MachRegInt; } ULONG LocalsSize() const { return this->m_localsArea; } @@ -1527,7 +1531,7 @@ LowererMD::LowerTry(IR::Instr * tryInstr, IR::JnHelperMethod helperMethod) if (tryInstr->m_opcode == Js::OpCode::TryCatch || this->m_func->DoOptimizeTry() || (this->m_func->IsSimpleJit() && this->m_func->hasBailout)) { // Arg 6 : hasBailedOutOffset - IR::Opnd * hasBailedOutOffset = IR::IntConstOpnd::New(this->m_func->m_hasBailedOutSym->m_offset + tryInstr->m_func->GetInlineeArgumentStackSize(), TyInt32, this->m_func); + IR::Opnd * hasBailedOutOffset = IR::IntConstOpnd::New(this->m_func->GetHasBailedOutSym()->m_offset + tryInstr->m_func->GetInlineeArgumentStackSize(), TyInt32, this->m_func); this->LoadHelperArgument(tryAddr, hasBailedOutOffset); } @@ -1677,8 +1681,8 @@ LowererMD::LoadStackArgPtr(IR::Instr * instr) // t1 = LDR [prm1 + m_inParams] // dst = ADD t1, sizeof(var) - Assert(this->m_func->m_loopParamSym); - IR::RegOpnd *baseOpnd = IR::RegOpnd::New(this->m_func->m_loopParamSym, TyMachReg, this->m_func); + Assert(this->m_func->GetLoopParamSym()); + IR::RegOpnd *baseOpnd = IR::RegOpnd::New(this->m_func->GetLoopParamSym(), TyMachReg, this->m_func); size_t offset = Js::InterpreterStackFrame::GetOffsetOfInParams(); IR::IndirOpnd *indirOpnd = IR::IndirOpnd::New(baseOpnd, (int32)offset, TyMachReg, this->m_func); IR::RegOpnd *tmpOpnd = IR::RegOpnd::New(TyMachReg, this->m_func); @@ -1719,8 +1723,8 @@ LowererMD::LoadArgumentsFromFrame(IR::Instr * instr) if (this->m_func->IsLoopBody()) { // Get the arguments ptr from the interpreter frame instance that was passed in. - Assert(this->m_func->m_loopParamSym); - baseOpnd = IR::RegOpnd::New(this->m_func->m_loopParamSym, TyMachReg, this->m_func); + Assert(this->m_func->GetLoopParamSym()); + baseOpnd = IR::RegOpnd::New(this->m_func->GetLoopParamSym(), TyMachReg, this->m_func); offset = Js::InterpreterStackFrame::GetOffsetOfArguments(); } else @@ -1747,8 +1751,8 @@ LowererMD::LoadArgumentCount(IR::Instr * instr) { // Pull the arg count from the interpreter frame instance that was passed in. // (The callinfo in the loop body's frame just shows the single parameter, the interpreter frame.) - Assert(this->m_func->m_loopParamSym); - baseOpnd = IR::RegOpnd::New(this->m_func->m_loopParamSym, TyMachReg, this->m_func); + Assert(this->m_func->GetLoopParamSym()); + baseOpnd = IR::RegOpnd::New(this->m_func->GetLoopParamSym(), TyMachReg, this->m_func); offset = Js::InterpreterStackFrame::GetOffsetOfInSlotsCount(); } else @@ -1859,7 +1863,7 @@ LowererMD::LoadHeapArguments(IR::Instr * instrArgs) this->LoadHelperArgument(instrArgs, srcOpnd); // Save the newly-created args object to its dedicated stack slot. - Lowerer::InsertMove(CreateStackArgumentsSlotOpnd(), instrArgs->GetDst(), instrArgs->m_next); + Lowerer::InsertMove(LowererMD::CreateStackArgumentsSlotOpnd(func), instrArgs->GetDst(), instrArgs->m_next); } this->ChangeToHelperCall(instrArgs, IR::HelperOp_LoadHeapArguments); } @@ -1960,7 +1964,7 @@ LowererMD::LoadHeapArgsCached(IR::Instr * instrArgs) // Save the newly-created args object to its dedicated stack slot. - Lowerer::InsertMove(CreateStackArgumentsSlotOpnd(), instrArgs->GetDst(), instrArgs->m_next); + Lowerer::InsertMove(LowererMD::CreateStackArgumentsSlotOpnd(func), instrArgs->GetDst(), instrArgs->m_next); } @@ -1987,7 +1991,8 @@ LowererMD::ChangeToHelperCall(IR::Instr * callInstr, IR::JnHelperMethod helperMe IR::Instr * bailOutInstr = callInstr; if (callInstr->HasBailOutInfo()) { - if (callInstr->GetBailOutKind() == IR::BailOutOnNotPrimitive) + const IR::BailOutKind bailOutKind = callInstr->GetBailOutKind(); + if (bailOutKind == IR::BailOutOnNotPrimitive) { callInstr = IR::Instr::New(callInstr->m_opcode, callInstr->m_func); bailOutInstr->TransferTo(callInstr); @@ -1996,10 +2001,14 @@ LowererMD::ChangeToHelperCall(IR::Instr * callInstr, IR::JnHelperMethod helperMe bailOutInstr->m_opcode = Js::OpCode::BailOnNotPrimitive; bailOutInstr->SetSrc1(opndInstance); } - else + else if (BailOutInfo::IsBailOutOnImplicitCalls(bailOutKind)) { bailOutInstr = this->m_lowerer->SplitBailOnImplicitCall(callInstr); } + else + { + AssertMsg(false, "Unexpected BailOutKind, are we adding new BailOutKind on instructions?"); + } } IR::HelperCallOpnd *helperCallOpnd = Lowerer::CreateHelperCallOpnd(helperMethod, this->GetHelperArgsCount(), m_func); @@ -2016,18 +2025,20 @@ LowererMD::ChangeToHelperCall(IR::Instr * callInstr, IR::JnHelperMethod helperMe if (bailOutInstr != callInstr) { // The bailout needs to be lowered after we lower the helper call because the helper argument - // has already been loaded. We need to drain them on AMD64 before starting another helper call - if (bailOutInstr->m_opcode == Js::OpCode::BailOnNotObject) + // has already been loaded. We need to drain them on AMD64 before starting another helper call + if (bailOutInstr->m_opcode == Js::OpCode::BailOnNotPrimitive) { - this->m_lowerer->LowerBailOnNotObject(bailOutInstr, nullptr, labelBailOut); + this->m_lowerer->LowerBailOnTrue(bailOutInstr, labelBailOut); } - else if (bailOutInstr->m_opcode == Js::OpCode::BailOnNotPrimitive) + else if (bailOutInstr->m_opcode == Js::OpCode::BailOnNotEqual) { - this->m_lowerer->LowerBailOnTrue(bailOutInstr, labelBailOut); + // `SplitBailOnImplicitCall` above changes the opcode to BailOnNotEqual + Assert(BailOutInfo::IsBailOutOnImplicitCalls(bailOutInstr->GetBailOutKind())); + this->m_lowerer->LowerBailOnEqualOrNotEqual(bailOutInstr, nullptr, labelBailOut, propSymOpnd, isHelperContinuation); } else { - this->m_lowerer->LowerBailOnEqualOrNotEqual(bailOutInstr, nullptr, labelBailOut, propSymOpnd, isHelperContinuation); + AssertMsg(false, "Unexpected OpCode for BailOutInstruction"); } } @@ -2387,6 +2398,8 @@ LowererMD::LowerCondBranch(IR::Instr * instr) case Js::OpCode::BrOnNotEmpty: case Js::OpCode::BrNotNull_A: case Js::OpCode::BrOnObject_A: + case Js::OpCode::BrOnObjectOrNull_A: + case Js::OpCode::BrOnConstructor_A: case Js::OpCode::BrOnClassConstructor: case Js::OpCode::BrOnBaseConstructorKind: Assert(!opndSrc1->IsFloat64()); @@ -2651,21 +2664,21 @@ LowererMD::GenerateFastDivByPow2(IR::Instr *instrDiv) ///---------------------------------------------------------------------------- bool -LowererMD::GenerateFastCmSrEqConst(IR::Instr *instr) +LowererMD::GenerateFastCmSrXxConst(IR::Instr *instr) { // // Given: - // s1 = CmSrEq_A s2, s3 + // s1 = CmSrXX_A s2, s3 // where either s2 or s3 is 'null', 'true' or 'false' // // Generate: // // CMP s2, s3 - // JEQ $mov_true - // MOV s1, Library.GetFalse() + // JEQ $mov_res + // MOV s1, eq ? Library.GetFalse() : Library.GetTrue() // JMP $done - // $mov_true: - // MOV s1, Library.GetTrue() + // $mov_res: + // MOV s1, eq ? Library.GetTrue() : Library.GetFalse() // $done: // @@ -2673,9 +2686,156 @@ LowererMD::GenerateFastCmSrEqConst(IR::Instr *instr) return false; } -bool LowererMD::GenerateFastCmXxI4(IR::Instr *instr) +void LowererMD::GenerateFastCmXxI4(IR::Instr *instr) +{ + this->GenerateFastCmXx(instr); +} + +void LowererMD::GenerateFastCmXxR8(IR::Instr *instr) { - return this->GenerateFastCmXxTaggedInt(instr); + this->GenerateFastCmXx(instr); +} + +void LowererMD::GenerateFastCmXx(IR::Instr *instr) +{ + // For float src: + // LDIMM dst, trueResult + // FCMP src1, src2 + // - BVS $done (NaN check iff B.cond is BNE) + // B.cond $done + // LDIMM dst, falseResult + // $done + + // For Int src: + // LDIMM dst, trueResult + // CMP src1, src2 + // B.cond $done + // LDIMM dst, falseResult + // $done: + + IR::Opnd * src1 = instr->UnlinkSrc1(); + IR::Opnd * src2 = instr->UnlinkSrc2(); + IR::Opnd * dst = instr->UnlinkDst(); + bool isIntDst = dst->AsRegOpnd()->m_sym->IsInt32(); + bool isFloatSrc = src1->IsFloat(); + Assert(!isFloatSrc || src2->IsFloat()); + Assert(!src1->IsInt64() || src2->IsInt64()); + Assert(!isFloatSrc || AutoSystemInfo::Data.SSE2Available()); + Assert(src1->IsRegOpnd()); + IR::Opnd * opndTrue; + IR::Opnd * opndFalse; + IR::Instr * newInstr; + IR::LabelInstr * done = IR::LabelInstr::New(Js::OpCode::Label, m_func); + + if (dst->IsEqual(src1)) + { + IR::RegOpnd *newSrc1 = IR::RegOpnd::New(src1->GetType(), m_func); + Lowerer::InsertMove(newSrc1, src1, instr); + src1 = newSrc1; + } + + if (dst->IsEqual(src2)) + { + IR::RegOpnd *newSrc2 = IR::RegOpnd::New(src1->GetType(), m_func); + Lowerer::InsertMove(newSrc2, src2, instr); + src2 = newSrc2; + } + + if (isIntDst) + { + opndTrue = IR::IntConstOpnd::New(1, TyInt32, this->m_func); + opndFalse = IR::IntConstOpnd::New(0, TyInt32, this->m_func); + } + else + { + opndTrue = this->m_lowerer->LoadLibraryValueOpnd(instr, LibraryValue::ValueTrue); + opndFalse = this->m_lowerer->LoadLibraryValueOpnd(instr, LibraryValue::ValueFalse); + } + + Lowerer::InsertMove(dst, opndTrue, instr); + + // CMP src1, src2 + newInstr = IR::Instr::New(isFloatSrc ? Js::OpCode::FCMP : Js::OpCode::CMP, this->m_func); + newInstr->SetSrc1(src1); + newInstr->SetSrc2(src2); + instr->InsertBefore(newInstr); + LowererMD::Legalize(newInstr); + + bool addNaNCheck = false; + Js::OpCode opcode = Js::OpCode::InvalidOpCode; + + switch (instr->m_opcode) + { + case Js::OpCode::CmEq_A: + case Js::OpCode::CmSrEq_A: + case Js::OpCode::CmEq_I4: + opcode = Js::OpCode::BEQ; + break; + + case Js::OpCode::CmNeq_A: + case Js::OpCode::CmSrNeq_A: + case Js::OpCode::CmNeq_I4: + opcode = Js::OpCode::BNE; + addNaNCheck = isFloatSrc; + break; + + case Js::OpCode::CmGt_A: + case Js::OpCode::CmGt_I4: + opcode = Js::OpCode::BGT; + break; + + case Js::OpCode::CmGe_A: + case Js::OpCode::CmGe_I4: + opcode = Js::OpCode::BGE; + break; + + case Js::OpCode::CmLt_A: + case Js::OpCode::CmLt_I4: + //Can't use BLT as is set when the operands are unordered (NaN). + opcode = isFloatSrc ? Js::OpCode::BCC : Js::OpCode::BLT; + break; + + case Js::OpCode::CmLe_A: + case Js::OpCode::CmLe_I4: + //Can't use BLE as it is set when the operands are unordered (NaN). + opcode = isFloatSrc ? Js::OpCode::BLS : Js::OpCode::BLE; + break; + + case Js::OpCode::CmUnGt_A: + case Js::OpCode::CmUnGt_I4: + opcode = Js::OpCode::BHI; + break; + + case Js::OpCode::CmUnGe_A: + case Js::OpCode::CmUnGe_I4: + opcode = Js::OpCode::BCS; + break; + + case Js::OpCode::CmUnLt_A: + case Js::OpCode::CmUnLt_I4: + opcode = Js::OpCode::BCC; + break; + + case Js::OpCode::CmUnLe_A: + case Js::OpCode::CmUnLe_I4: + opcode = Js::OpCode::BLS; + break; + + default: Assert(false); + } + + if (addNaNCheck) + { + newInstr = IR::BranchInstr::New(Js::OpCode::BVS, done, m_func); + instr->InsertBefore(newInstr); + } + + newInstr = IR::BranchInstr::New(opcode, done, m_func); + instr->InsertBefore(newInstr); + + Lowerer::InsertMove(dst, opndFalse, instr); + instr->InsertBefore(done); + instr->Remove(); } ///---------------------------------------------------------------------------- @@ -2800,6 +2960,7 @@ bool LowererMD::GenerateFastCmXxTaggedInt(IR::Instr *instr, bool isInHelper /* Lowerer::InsertMove(newSrc1, src1, instr); src1 = newSrc1; } + if (dst->IsEqual(src2)) { IR::RegOpnd *newSrc2 = IR::RegOpnd::New(TyMachReg, m_func); @@ -4176,11 +4337,11 @@ LowererMD::GenerateStFldFromLocalInlineCache( } IR::Opnd * -LowererMD::CreateStackArgumentsSlotOpnd() +LowererMD::CreateStackArgumentsSlotOpnd(Func *func) { // Save the newly-created args object to its dedicated stack slot. - IR::IndirOpnd *indirOpnd = IR::IndirOpnd::New(IR::RegOpnd::New(nullptr, FRAME_REG , TyMachReg, m_func), - -MachArgsSlotOffset, TyMachPtr, m_func); + IR::IndirOpnd *indirOpnd = IR::IndirOpnd::New(IR::RegOpnd::New(nullptr, FRAME_REG , TyMachReg, func), + -MachArgsSlotOffset, TyMachPtr, func); return indirOpnd; } diff --git a/lib/Backend/arm64/LowerMD.h b/lib/Backend/arm64/LowerMD.h index 0830c916226..44822338795 100644 --- a/lib/Backend/arm64/LowerMD.h +++ b/lib/Backend/arm64/LowerMD.h @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft Corporation and contributors. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #pragma once @@ -93,9 +94,10 @@ class LowererMD #endif void GenerateTaggedZeroTest( IR::Opnd * opndSrc, IR::Instr * instrInsert, IR::LabelInstr * labelHelper = nullptr); bool GenerateObjectTest(IR::Opnd * opndSrc, IR::Instr * insertInstr, IR::LabelInstr * labelTarget, bool fContinueLabel = false); - bool GenerateFastCmSrEqConst(IR::Instr *instr); - bool GenerateFastCmXxI4(IR::Instr *instr); - bool GenerateFastCmXxR8(IR::Instr *instr) { Assert(UNREACHED); return nullptr; } + bool GenerateFastCmSrXxConst(IR::Instr *instr); + void GenerateFastCmXxI4(IR::Instr *instr); + void GenerateFastCmXxR8(IR::Instr *instr); + void GenerateFastCmXx(IR::Instr *instr); bool GenerateFastCmXxTaggedInt(IR::Instr *instr, bool isInHelper = false); IR::Instr * GenerateConvBool(IR::Instr *instr); void GenerateClz(IR::Instr * instr); @@ -104,7 +106,7 @@ class LowererMD template void GenerateTruncWithCheck(IR::Instr * instr) { Assert(UNREACHED); } void GenerateFastDivByPow2(IR::Instr *instr); - bool GenerateFastDivAndRem(IR::Instr* instrDiv, IR::LabelInstr* bailOutLabel = false); + bool GenerateFastDivAndRem(IR::Instr* instrDiv, IR::LabelInstr* bailOutLabel = nullptr); bool GenerateFastAdd(IR::Instr * instrAdd); bool GenerateFastSub(IR::Instr * instrSub); bool GenerateFastMul(IR::Instr * instrMul); @@ -118,7 +120,6 @@ class LowererMD void GenerateFastBrS(IR::BranchInstr *brInstr); void GenerateFastInlineBuiltInCall(IR::Instr* instr, IR::JnHelperMethod helperMethod); void HelperCallForAsmMathBuiltin(IR::Instr* instr, IR::JnHelperMethod helperMethodFloat, IR::JnHelperMethod helperMethodDouble) { Assert(UNREACHED); } // only for asm.js - IR::Opnd * CreateStackArgumentsSlotOpnd(); void GenerateSmIntTest(IR::Opnd *opndSrc, IR::Instr *insertInstr, IR::LabelInstr *labelHelper, IR::Instr **instrFirst = nullptr, bool fContinueLabel = false); IR::RegOpnd * LoadNonnegativeIndex(IR::RegOpnd *indexOpnd, const bool skipNegativeCheck, IR::LabelInstr *const notTaggedIntLabel, IR::LabelInstr *const negativeLabel, IR::Instr *const insertBeforeInstr); IR::RegOpnd * GenerateUntagVar(IR::RegOpnd * opnd, IR::LabelInstr * labelFail, IR::Instr * insertBeforeInstr, bool generateTagCheck = true); @@ -131,6 +132,7 @@ class LowererMD void GenerateFloatTest(IR::RegOpnd * opndSrc, IR::Instr * insertInstr, IR::LabelInstr* labelHelper, const bool checkForNullInLoopBody = false); IR::RegOpnd* CheckFloatAndUntag(IR::RegOpnd * opndSrc, IR::Instr * insertInstr, IR::LabelInstr* labelHelper); + static IR::Opnd * CreateStackArgumentsSlotOpnd(Func* func); static void EmitInt4Instr(IR::Instr *instr); void EmitLoadVar(IR::Instr *instr, bool isFromUint32 = false, bool isHelper = false); bool EmitLoadInt32(IR::Instr *instr, bool conversionFromObjectAllowed, bool bailOutOnHelper = false, IR::LabelInstr * labelBailOut = nullptr); diff --git a/lib/Backend/arm64/Thunks.S b/lib/Backend/arm64/Thunks.S new file mode 100644 index 00000000000..dedc7c0cac4 --- /dev/null +++ b/lib/Backend/arm64/Thunks.S @@ -0,0 +1,46 @@ +;------------------------------------------------------------------------------------------------------- +; Copyright (C) Microsoft. All rights reserved. +; Copyright (c) ChakraCore Project Contributors. All rights reserved. +; Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. +;------------------------------------------------------------------------------------------------------- + +#include "unixasmmacros.inc" + +;;============================================================================================================ +; Fake __chkstk +;;============================================================================================================ +LEAF_ENTRY __chkstk, _TEXT + ret +LEAF_END __chkstk, _TEXT + +;;============================================================================================================ +; NativeCodeGenerator::CheckCodeGenThunk +;;============================================================================================================ + ;Js::Var NativeCodeGenerator::CheckCodeGenThunk(Js::RecyclableObject* function, Js::CallInfo callInfo, ...) +NESTED_ENTRY _ZN19NativeCodeGenerator17CheckCodeGenThunkEPN2Js16RecyclableObjectENS0_8CallInfoEz, _TEXT, NoHandler + + PROLOG_SAVE_REG_PAIR_INDEXED fp, lr, -(16+16*8) ; establish stack frame + stp d0, d1, [sp, #16+0*8] + stp d2, d3, [sp, #16+2*8] + stp d4, d5, [sp, #16+4*8] + stp d6, d7, [sp, #16+6*8] + stp x0, x1, [sp, #16+8*8] + stp x2, x3, [sp, #16+10*8] + stp x4, x5, [sp, #16+12*8] + stp x6, x7, [sp, #16+14*8] + + bl C_FUNC(_ZN19NativeCodeGenerator12CheckCodeGenEPN2Js14ScriptFunctionE) ; call NativeCodeGenerator::CheckCodeGen + mov x15, x0 ; move entry point to x15 + + ldp d0, d1, [sp, #16+0*8] + ldp d2, d3, [sp, #16+2*8] + ldp d4, d5, [sp, #16+4*8] + ldp d6, d7, [sp, #16+6*8] + ldp x0, x1, [sp, #16+8*8] + ldp x2, x3, [sp, #16+10*8] + ldp x4, x5, [sp, #16+12*8] + ldp x6, x7, [sp, #16+14*8] + EPILOG_RESTORE_REG_PAIR_INDEXED fp, lr, (16+16*8) + br x15 ; jump (tail call) to new entryPoint + +NESTED_END _ZN19NativeCodeGenerator17CheckCodeGenThunkEPN2Js16RecyclableObjectENS0_8CallInfoEz, _TEXT diff --git a/lib/Backend/arm64/machvalues.h b/lib/Backend/arm64/machvalues.h index 9e508568046..c2449c39d5a 100644 --- a/lib/Backend/arm64/machvalues.h +++ b/lib/Backend/arm64/machvalues.h @@ -18,4 +18,4 @@ static const int MachDouble = 8; static const int MachRegDouble = 8; static const int MachArgsSlotOffset = MachPtr; static const int MachStackAlignment = 16; // On ARM64 SP needs to be 16 byte aligned for load/store -static const unsigned __int64 MachSignBit = 0x8000000000000000; \ No newline at end of file +static const unsigned __int64 MachSignBit = 0x8000000000000000; diff --git a/lib/Backend/i386/EncoderMD.cpp b/lib/Backend/i386/EncoderMD.cpp index ff346b071f1..8b5d3a4474d 100644 --- a/lib/Backend/i386/EncoderMD.cpp +++ b/lib/Backend/i386/EncoderMD.cpp @@ -105,7 +105,7 @@ EncoderMD::Init(Encoder *encoder) /// ///---------------------------------------------------------------------------- -const BYTE +BYTE EncoderMD::GetOpcodeByte2(IR::Instr *instr) { return OpcodeByte2[instr->m_opcode - (Js::OpCode::MDStart+1)]; @@ -154,7 +154,7 @@ EncoderMD::GetOpbyte(IR::Instr *instr) /// ///---------------------------------------------------------------------------- -const BYTE +BYTE EncoderMD::GetRegEncode(IR::RegOpnd *regOpnd) { AssertMsg(regOpnd->GetReg() != RegNOREG, "RegOpnd should have valid reg in encoder"); @@ -171,7 +171,7 @@ EncoderMD::GetRegEncode(IR::RegOpnd *regOpnd) /// ///---------------------------------------------------------------------------- -const uint32 +uint32 EncoderMD::GetOpdope(IR::Instr *instr) { return Opdope[instr->m_opcode - (Js::OpCode::MDStart+1)]; @@ -185,7 +185,7 @@ EncoderMD::GetOpdope(IR::Instr *instr) /// ///---------------------------------------------------------------------------- -const uint32 +uint32 EncoderMD::GetLeadIn(IR::Instr * instr) { return OpcodeLeadIn[instr->m_opcode - (Js::OpCode::MDStart+1)]; @@ -1374,33 +1374,61 @@ EncoderMD::FixRelocListEntry(uint32 index, int32 totalBytesSaved, BYTE *buffStar /// ///---------------------------------------------------------------------------- void -EncoderMD::FixMaps(uint32 brOffset, int32 bytesSaved, uint32 *inlineeFrameRecordsIndex, uint32 *inlineeFrameMapIndex, uint32 *pragmaInstToRecordOffsetIndex, uint32 *offsetBuffIndex) +EncoderMD::FixMaps(uint32 brOffset, int32 bytesSaved, FixUpMapIndex *mapIndices) { - InlineeFrameRecords *recList = m_encoder->m_inlineeFrameRecords; - ArenaInlineeFrameMap *mapList = m_encoder->m_inlineeFrameMap; - PragmaInstrList *pInstrList = m_encoder->m_pragmaInstrToRecordOffset; int32 i; - for (i = *inlineeFrameRecordsIndex; i < recList->Count() && recList->Item(i)->inlineeStartOffset <= brOffset; i++) - recList->Item(i)->inlineeStartOffset -= bytesSaved; - *inlineeFrameRecordsIndex = i; + { + InlineeFrameRecords *recList = m_encoder->m_inlineeFrameRecords; + for (i = mapIndices->inlineeFrameRecordsIndex; i < recList->Count() && recList->Item(i)->inlineeStartOffset <= brOffset; i++) + { + recList->Item(i)->inlineeStartOffset -= bytesSaved; + } + + mapIndices->inlineeFrameRecordsIndex = i; + } - for (i = *inlineeFrameMapIndex; i < mapList->Count() && mapList->Item(i).offset <= brOffset; i++) + { + ArenaInlineeFrameMap *mapList = m_encoder->m_inlineeFrameMap; + for (i = mapIndices->inlineeFrameMapIndex; i < mapList->Count() && mapList->Item(i).offset <= brOffset; i++) + { mapList->Item(i).offset -= bytesSaved; + } + + mapIndices->inlineeFrameMapIndex = i; + } + + { + PragmaInstrList *pInstrList = m_encoder->m_pragmaInstrToRecordOffset; + for (i = mapIndices->pragmaInstToRecordOffsetIndex; i < pInstrList->Count() && pInstrList->Item(i)->m_offsetInBuffer <= brOffset; i++) + { + pInstrList->Item(i)->m_offsetInBuffer -= bytesSaved; + } - *inlineeFrameMapIndex = i; + mapIndices->pragmaInstToRecordOffsetIndex = i; + } - for (i = *pragmaInstToRecordOffsetIndex; i < pInstrList->Count() && pInstrList->Item(i)->m_offsetInBuffer <= brOffset; i++) - pInstrList->Item(i)->m_offsetInBuffer -= bytesSaved; - *pragmaInstToRecordOffsetIndex = i; + { + ArenaLazyBailoutRecordList *lazyBailOutRecordList = m_encoder->m_sortedLazyBailoutRecordList; + for (i = mapIndices->lazyBailOutRecordListIndex; i < lazyBailOutRecordList->Count() && lazyBailOutRecordList->Item(i).offset <= brOffset; i++) + { + lazyBailOutRecordList->Item(i).offset -= bytesSaved; + } + + mapIndices->lazyBailOutRecordListIndex = i; + } #if DBG_DUMP - for (i = *offsetBuffIndex; (uint)i < m_encoder->m_instrNumber && m_encoder->m_offsetBuffer[i] <= brOffset; i++) - m_encoder->m_offsetBuffer[i] -= bytesSaved; + { + for (i = mapIndices->offsetBuffIndex; (uint)i < m_encoder->m_instrNumber && m_encoder->m_offsetBuffer[i] <= brOffset; i++) + { + m_encoder->m_offsetBuffer[i] -= bytesSaved; + } - *offsetBuffIndex = i; + mapIndices->offsetBuffIndex = i; + } #endif } diff --git a/lib/Backend/i386/EncoderMD.h b/lib/Backend/i386/EncoderMD.h index 1c3aaa996b0..e4aa0452842 100644 --- a/lib/Backend/i386/EncoderMD.h +++ b/lib/Backend/i386/EncoderMD.h @@ -201,6 +201,8 @@ enum Forms : BYTE; typedef JsUtil::List InlineeFrameRecords; typedef JsUtil::List RelocList; +struct FixUpMapIndex; + class EncoderMD { public: @@ -220,7 +222,7 @@ class EncoderMD RelocList* GetRelocList() const { return m_relocList; } int AppendRelocEntry(RelocType type, void *ptr, IR::LabelInstr * labelInstr = nullptr, const void * fnAddress = nullptr); int FixRelocListEntry(uint32 index, int32 totalBytesSaved, BYTE *buffStart, BYTE* buffEnd); - void FixMaps(uint32 brOffset, int32 bytesSaved, uint32 *inlineeFrameRecordsIndex, uint32 *inlineeFrameMapIndex, uint32 *pragmaInstToRecordOffsetIndex, uint32 *offsetBuffIndex); + void FixMaps(uint32 brOffset, int32 bytesSaved, FixUpMapIndex *mapIndices); void UpdateRelocListWithNewBuffer(RelocList * relocList, BYTE * newBuffer, BYTE * oldBufferStart, BYTE * oldBufferEnd); #ifdef DBG void VerifyRelocList(BYTE *buffStart, BYTE *buffEnd); @@ -229,13 +231,13 @@ class EncoderMD BYTE * GetRelocBufferAddress(EncodeRelocAndLabels * reloc); private: - const BYTE GetOpcodeByte2(IR::Instr *instr); + BYTE GetOpcodeByte2(IR::Instr *instr); const BYTE * GetFormTemplate(IR::Instr *instr); static Forms GetInstrForm(IR::Instr *instr); const BYTE * GetOpbyte(IR::Instr *instr); - const BYTE GetRegEncode(IR::RegOpnd *regOpnd); - const uint32 GetLeadIn(IR::Instr * instr); - static const uint32 GetOpdope(IR::Instr *instr); + BYTE GetRegEncode(IR::RegOpnd *regOpnd); + uint32 GetLeadIn(IR::Instr * instr); + static uint32 GetOpdope(IR::Instr *instr); void EmitModRM(IR::Instr * instr, IR::Opnd *opnd, BYTE reg1); void EmitConst(size_t val, int size); int EmitImmed(IR::Opnd * opnd, int opSize, int sbit); diff --git a/lib/Backend/i386/LinearScanMD.cpp b/lib/Backend/i386/LinearScanMD.cpp index b00126f7ef8..e3036621da3 100644 --- a/lib/Backend/i386/LinearScanMD.cpp +++ b/lib/Backend/i386/LinearScanMD.cpp @@ -180,187 +180,6 @@ LinearScanMD::GenerateBailOut(IR::Instr * instr, __in_ecount(registerSaveSymsCou } } -IR::Instr * -LinearScanMD::GenerateBailInForGeneratorYield(IR::Instr * resumeLabelInstr, BailOutInfo * bailOutInfo) -{ - BailOutRecord * bailOutRecord = bailOutInfo->bailOutRecord; - IR::Instr * instrAfter = resumeLabelInstr->m_next; - IR::Instr * newInstr; - - // if (argOuts) { - // sub esp, numArgOutsTimesMachSizeMachAligned - // } - // mov eax, prm1 - // mov eax, [eax + offset of JavascriptGenerator::frame] - // - - IntConstType stackAdjustSize = 0; - bailOutRecord->MapStartCallParamCounts([&stackAdjustSize](uint startCallParamCount) { - IntConstType sizeValue = startCallParamCount; - int32 stackAlignment = Math::Align(sizeValue*MachPtr, MachStackAlignment) - sizeValue*MachPtr; - if (stackAlignment != 0) - { - sizeValue += 1; - } - sizeValue *= MachPtr; - stackAdjustSize += sizeValue; - }); - - if (stackAdjustSize != 0) - { - if ((uint32)stackAdjustSize > AutoSystemInfo::PageSize) - { - // mov eax, sizeOpnd->m_value - // call _chkstk - IR::RegOpnd *eaxOpnd = IR::RegOpnd::New(nullptr, RegEAX, TyMachReg, this->func); - newInstr = IR::Instr::New(Js::OpCode::MOV, eaxOpnd, IR::IntConstOpnd::New(stackAdjustSize, TyInt32, this->func), this->func); - instrAfter->InsertBefore(newInstr); - - newInstr = IR::Instr::New(Js::OpCode::CALL, this->func); - newInstr->SetSrc1(IR::HelperCallOpnd::New(IR::HelperCRT_chkstk, this->func)); - instrAfter->InsertBefore(newInstr); - this->func->SetHasCallsOnSelfAndParents(); - } - else - { - // lea esp, [esp - sizeValue] - IR::RegOpnd * espOpnd = IR::RegOpnd::New(nullptr, LowererMD::GetRegStackPointer(), TyMachReg, this->func); - newInstr = IR::Instr::New(Js::OpCode::LEA, espOpnd, IR::IndirOpnd::New(espOpnd, -stackAdjustSize, TyMachReg, this->func), this->func); - instrAfter->InsertBefore(newInstr); - } - } - - IR::RegOpnd * eaxRegOpnd = IR::RegOpnd::New(nullptr, RegEAX, TyMachPtr, this->func); - IR::RegOpnd * ecxRegOpnd = IR::RegOpnd::New(nullptr, RegECX, TyVar, this->func); - - StackSym * sym = StackSym::NewParamSlotSym(1, this->func); - this->func->SetArgOffset(sym, LowererMD::GetFormalParamOffset() * MachPtr); - IR::SymOpnd * symOpnd = IR::SymOpnd::New(sym, TyMachPtr, this->func); - newInstr = IR::Instr::New(Js::OpCode::MOV, eaxRegOpnd, symOpnd, this->func); - instrAfter->InsertBefore(newInstr); - - IR::IndirOpnd * indirOpnd = IR::IndirOpnd::New(eaxRegOpnd, Js::JavascriptGenerator::GetFrameOffset(), TyMachPtr, this->func); - newInstr = IR::Instr::New(Js::OpCode::MOV, eaxRegOpnd, indirOpnd, this->func); - instrAfter->InsertBefore(newInstr); - - - // eax points to the frame, restore stack syms and registers except eax, restore eax last - - IR::Instr * eaxRestoreInstr = nullptr; - IR::Instr * instrInsertStackSym = instrAfter; - IR::Instr * instrInsertRegSym = instrAfter; - - Assert(bailOutInfo->capturedValues->constantValues.Empty()); - Assert(bailOutInfo->capturedValues->copyPropSyms.Empty()); - - auto restoreSymFn = [this, &eaxRegOpnd, &ecxRegOpnd, &eaxRestoreInstr, &instrInsertStackSym, &instrInsertRegSym](SymID symId) - { - StackSym * stackSym = this->func->m_symTable->FindStackSym(symId); - Assert(stackSym->IsVar()); - - Assert(stackSym->HasByteCodeRegSlot()); - Js::RegSlot byteCodeReg = stackSym->GetByteCodeRegSlot(); - int32 offset = byteCodeReg * sizeof(Js::Var) + Js::InterpreterStackFrame::GetOffsetOfLocals(); - - IR::Opnd * srcOpnd = IR::IndirOpnd::New(eaxRegOpnd, offset, stackSym->GetType(), this->func); - Lifetime * lifetime = stackSym->scratch.linearScan.lifetime; - - if (lifetime->isSpilled) - { - // stack restores require an extra register since we can't move an indir directly to an indir on x86 - IR::Instr * instr = IR::Instr::New(Js::OpCode::MOV, ecxRegOpnd, srcOpnd, this->func); - instrInsertStackSym->InsertBefore(instr); - - IR::SymOpnd * dstOpnd = IR::SymOpnd::New(stackSym, stackSym->GetType(), this->func); - instr = IR::Instr::New(Js::OpCode::MOV, dstOpnd, ecxRegOpnd, this->func); - instrInsertStackSym->InsertBefore(instr); - } - else - { - // register restores must come after stack restores so that we have EAX and ECX free to - // use for stack restores and further EAX must be restored last since it holds the - // pointer to the InterpreterStackFrame from which we are restoring values. - // We must also track these restores using RecordDef in case the symbols are spilled. - - IR::RegOpnd * dstRegOpnd = IR::RegOpnd::New(stackSym, stackSym->GetType(), this->func); - dstRegOpnd->SetReg(lifetime->reg); - - IR::Instr * instr = IR::Instr::New(Js::OpCode::MOV, dstRegOpnd, srcOpnd, this->func); - instrInsertRegSym->InsertBefore(instr); - - if (instrInsertRegSym == instrInsertStackSym) - { - // this is the first register sym, make sure we don't insert stack stores - // after this instruction so we can ensure eax and ecx remain free to use - // for restoring spilled stack syms. - instrInsertStackSym = instr; - } - - if (lifetime->reg == RegEAX) - { - // ensure eax is restored last - Assert(instrInsertRegSym != instrInsertStackSym); - - instrInsertRegSym = instr; - - if (eaxRestoreInstr != nullptr) - { - AssertMsg(false, "this is unexpected until copy prop is enabled"); - // eax was mapped to multiple bytecode registers. Obviously only the first - // restore we do will work so change all following stores to `mov eax, eax`. - // We still need to keep them around for RecordDef in case the corresponding - // dst sym is spilled later on. - eaxRestoreInstr->FreeSrc1(); - eaxRestoreInstr->SetSrc1(eaxRegOpnd); - } - - eaxRestoreInstr = instr; - } - - this->linearScan->RecordDef(lifetime, instr, 0); - } - }; - - FOREACH_BITSET_IN_SPARSEBV(symId, bailOutInfo->byteCodeUpwardExposedUsed) - { - restoreSymFn(symId); - } - NEXT_BITSET_IN_SPARSEBV; - - if (bailOutInfo->capturedValues->argObjSyms) - { - FOREACH_BITSET_IN_SPARSEBV(symId, bailOutInfo->capturedValues->argObjSyms) - { - restoreSymFn(symId); - } - NEXT_BITSET_IN_SPARSEBV; - } - - // Restore out params. - // Would be nice to use restoreSymFn on a walk of the SymIds where the walk matches - // the logic in LinearScan::FillBailOutRecord, but the walk is very complicated and - // requires state to enumerate the exact syms that are actually mapped in the bail - // out record. So instead, since we have disabled most of GlobOpt for the time - // being, just enumerate the argouts from the BailOutRecord and ignore the syms. - // This may need to be improved to use the syms when the optimizations are brought - // online. - bailOutRecord->MapArgOutOffsets([this, &eaxRegOpnd, &ecxRegOpnd, &instrInsertStackSym](Js::RegSlot regSlot, int32 stackOffset) { - // mov ecx, [eax + bytecode reg offset] - // mov [ebp + native stack offset], ecx - int32 regSlotOffset = Js::InterpreterStackFrame::GetOffsetOfLocals() + (this->func->GetJITFunctionBody()->GetLocalsCount() + regSlot) * sizeof(Js::Var); - IR::IndirOpnd * indirOpnd = IR::IndirOpnd::New(eaxRegOpnd, regSlotOffset, TyVar, this->func); - IR::Instr * instr = IR::Instr::New(Js::OpCode::MOV, ecxRegOpnd, indirOpnd, this->func); - instrInsertStackSym->InsertBefore(instr); - - IR::RegOpnd* ebpRegOpnd = IR::RegOpnd::New(nullptr, RegEBP, TyMachPtr, this->func); - indirOpnd = IR::IndirOpnd::New(ebpRegOpnd, stackOffset, TyVar, this->func); - instr = IR::Instr::New(Js::OpCode::RestoreOutParam, indirOpnd, ecxRegOpnd, this->func); - instrInsertStackSym->InsertBefore(instr); - }); - - return instrAfter; -} - __declspec(naked) void LinearScanMD::SaveAllRegisters(BailOutRecord *const bailOutRecord) { __asm diff --git a/lib/Backend/i386/LinearScanMD.h b/lib/Backend/i386/LinearScanMD.h index 49df0ec2151..9770af76f83 100644 --- a/lib/Backend/i386/LinearScanMD.h +++ b/lib/Backend/i386/LinearScanMD.h @@ -31,7 +31,6 @@ class LinearScanMD : public LinearScanMDShared void LegalizeUse(IR::Instr * instr, IR::Opnd * opnd) { /* A nop for x86 */ } void LegalizeConstantUse(IR::Instr * instr, IR::Opnd * opnd) { /* A nop for x86 */ } void GenerateBailOut(IR::Instr * instr, __in_ecount(registerSaveSymsCount) StackSym ** registerSaveSyms, uint registerSaveSymsCount); - IR::Instr *GenerateBailInForGeneratorYield(IR::Instr * resumeLabelInstr, BailOutInfo * bailOutInfo); void InsertOpHelperSpillAndRestores(SList *opHelperBlockList); void EndOfHelperBlock(uint32 helperSpilledLiveranges) { /* NOP */ } diff --git a/lib/Backend/i386/LowererMDArch.cpp b/lib/Backend/i386/LowererMDArch.cpp index ce7d3ae0db3..32e934d7afb 100644 --- a/lib/Backend/i386/LowererMDArch.cpp +++ b/lib/Backend/i386/LowererMDArch.cpp @@ -347,7 +347,7 @@ LowererMDArch::LoadHeapArguments(IR::Instr *instrArgs) // Save the newly-created args object to its dedicated stack slot. - IR::Opnd *opnd = this->lowererMD->CreateStackArgumentsSlotOpnd(); + IR::Opnd *opnd = LowererMD::CreateStackArgumentsSlotOpnd(func); instr = IR::Instr::New(Js::OpCode::MOV, opnd, instrArgs->GetDst(), func); instrArgs->InsertAfter(instr); } @@ -460,7 +460,7 @@ LowererMDArch::LoadHeapArgsCached(IR::Instr *instrArgs) this->LoadHelperArgument(instrArgs, srcOpnd); // Save the newly-created args object to its dedicated stack slot. - IR::Opnd *opnd = this->lowererMD->CreateStackArgumentsSlotOpnd(); + IR::Opnd *opnd = LowererMD::CreateStackArgumentsSlotOpnd(func); instr = IR::Instr::New(Js::OpCode::MOV, opnd, instrArgs->GetDst(), func); instrArgs->InsertAfter(instr); } @@ -1364,6 +1364,22 @@ LowererMDArch::LowerCall(IR::Instr * callInstr, uint32 argCount, RegNum regNum) callInstr->InsertAfter(addInstr); } + if (callInstr->HasLazyBailOut()) + { + BailOutInfo *bailOutInfo = callInstr->GetBailOutInfo(); + if (bailOutInfo->bailOutRecord == nullptr) + { + bailOutInfo->bailOutRecord = NativeCodeDataNewZ( + this->m_func->GetNativeCodeDataAllocator(), + BailOutRecord, + bailOutInfo->bailOutOffset, + bailOutInfo->polymorphicCacheIndex, + callInstr->GetBailOutKind(), + bailOutInfo->bailOutFunc + ); + } + } + this->helperCallArgsCount = 0; return retInstr; @@ -4076,6 +4092,16 @@ LowererMDArch::FinalLower() // Get rid of the deps and srcs instr->FreeDst(); instr->FreeSrc2(); + break; + default: + if (instr->HasLazyBailOut()) + { + // Since Lowerer and Peeps might have removed instructions with lazy bailout + // if we attach them to helper calls, FinalLower is the first phase that + // we can know if the function has any lazy bailouts at all. + this->m_func->SetHasLazyBailOut(); + } + break; } } diff --git a/lib/Backend/i386/machvalues.h b/lib/Backend/i386/machvalues.h index cd9c099b6bf..bc47181f8d3 100644 --- a/lib/Backend/i386/machvalues.h +++ b/lib/Backend/i386/machvalues.h @@ -18,4 +18,4 @@ static const int MachMaxInstrSize = 11; static const int MachArgsSlotOffset = MachPtr; static const int MachStackAlignment = MachDouble; static const unsigned int MachSignBit = 0x80000000; -static const int MachSimd128 = 16; \ No newline at end of file +static const int MachSimd128 = 16; diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index ec8a3805f9f..ba3b6fcd2bf 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -40,6 +40,7 @@ add_library (ChakraCoreStatic STATIC $ $ $ + $ ${wasm_objects} ${wabt_objects} ${lttng_objects} @@ -77,6 +78,7 @@ target_include_directories ( ${CHAKRACORE_SOURCE_DIR}/lib/Runtime/ByteCode ${CHAKRACORE_SOURCE_DIR}/lib/Parser ${CHAKRACORE_SOURCE_DIR}/lib/Jsrt + ${CHAKRACORE_SOURCE_DIR}/lib/SCACore ${wasm_includes} ${wabt_includes} ) @@ -87,6 +89,7 @@ endif() add_subdirectory (Common) add_subdirectory (Parser) +add_subdirectory (SCACore) add_subdirectory (Runtime) add_subdirectory (Jsrt) if (CC_TARGETS_AMD64) @@ -117,3 +120,27 @@ if(NOT CC_XCODE_PROJECT) "${CMAKE_BINARY_DIR}/include" ) endif(NOT CC_XCODE_PROJECT) + +if (EMBED_ICU) + # Declare ICU dependencies in bulk. + # TODO Not the most idiomatic solution, need to understand if all of those + # libraries needed to depend on it + add_dependencies(Chakra.Jsrt ${EMBEDDED_ICU_TARGET}) + add_dependencies(Chakra.Jsrt.Core ${EMBEDDED_ICU_TARGET}) + add_dependencies(Chakra.Parser ${EMBEDDED_ICU_TARGET}) + add_dependencies(Chakra.Runtime.Base ${EMBEDDED_ICU_TARGET}) + add_dependencies(Chakra.Runtime.ByteCode ${EMBEDDED_ICU_TARGET}) + add_dependencies(Chakra.Runtime.Debug ${EMBEDDED_ICU_TARGET}) + add_dependencies(Chakra.Runtime.Library ${EMBEDDED_ICU_TARGET}) + add_dependencies(Chakra.Runtime.Math ${EMBEDDED_ICU_TARGET}) + add_dependencies(Chakra.Runtime.Language ${EMBEDDED_ICU_TARGET}) + add_dependencies(Chakra.Runtime.PlatformAgnostic ${EMBEDDED_ICU_TARGET}) + add_dependencies(Chakra.Runtime.Types ${EMBEDDED_ICU_TARGET}) + add_dependencies(Chakra.SCACore ${EMBEDDED_ICU_TARGET}) + if (BuildJIT) + add_dependencies(Chakra.Backend ${EMBEDDED_ICU_TARGET}) + if (CC_TARGETS_AMD64) + add_dependencies(Chakra.WasmReader ${EMBEDDED_ICU_TARGET}) + endif() + endif() +endif() diff --git a/lib/Common/BackendApi.h b/lib/Common/BackendApi.h index fdfbdee40c6..32852250420 100644 --- a/lib/Common/BackendApi.h +++ b/lib/Common/BackendApi.h @@ -142,19 +142,16 @@ class BailOutRecord; struct LazyBailOutRecord { uint32 offset; - BYTE* instructionPointer; // Instruction pointer of the bailout code - BailOutRecord* bailoutRecord; + BailOutRecord* bailOutRecord; - LazyBailOutRecord() : offset(0), instructionPointer(nullptr), bailoutRecord(nullptr) {} + LazyBailOutRecord() : offset(0), bailOutRecord(nullptr) {} - LazyBailOutRecord(uint32 offset, BYTE* address, BailOutRecord* record) : - offset(offset), instructionPointer(address), - bailoutRecord(record) + LazyBailOutRecord(uint32 offset, BailOutRecord* record) : + offset(offset), bailOutRecord(record) {} - void SetBailOutKind(); #if DBG - void Dump(Js::FunctionBody* functionBody); + void Dump(Js::FunctionBody* functionBody) const; #endif }; @@ -268,10 +265,23 @@ enum VTableValue { VtableJavascriptNativeIntArray, VtableJavascriptRegExp, VtableScriptFunction, + + VtableScriptFunctionWithHomeObj, + VtableScriptFunctionWithComputedName, + VtableScriptFunctionWithHomeObjAndComputedName, + + // Generator/Async functions VtableJavascriptGeneratorFunction, + VtableVirtualJavascriptGeneratorFunctionWithHomeObj, + VtableVirtualJavascriptGeneratorFunctionWithComputedName, + VtableVirtualJavascriptGeneratorFunctionWithHomeObjAndComputedName, VtableJavascriptAsyncFunction, + VtableJavascriptAsyncGeneratorFunction, + VtableStackScriptFunction, + VtableAsmJsScriptFunctionWithComputedName, VtableScriptFunctionWithInlineCacheAndHomeObj, + VtableScriptFunctionWithInlineCacheAndComputedName, VtableScriptFunctionWithInlineCacheHomeObjAndComputedName, VtableConcatStringMulti, VtableCompoundString, diff --git a/lib/Common/ChakraCoreVersion.h b/lib/Common/ChakraCoreVersion.h index 5f649c36959..9056db8679b 100644 --- a/lib/Common/ChakraCoreVersion.h +++ b/lib/Common/ChakraCoreVersion.h @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #pragma once @@ -16,8 +17,8 @@ // ChakraCore version number definitions (used in ChakraCore binary metadata) #define CHAKRA_CORE_MAJOR_VERSION 1 -#define CHAKRA_CORE_MINOR_VERSION 11 -#define CHAKRA_CORE_PATCH_VERSION 19 +#define CHAKRA_CORE_MINOR_VERSION 13 +#define CHAKRA_CORE_PATCH_VERSION 0 #define CHAKRA_CORE_VERSION_RELEASE_QFE 0 // Redundant with PATCH_VERSION. Keep this value set to 0. // ------------- @@ -54,7 +55,7 @@ // * Does not add anything to the file description // ChakraCore RELEASE and PRERELEASE flags -#define CHAKRA_CORE_VERSION_RELEASE 1 +#define CHAKRA_CORE_VERSION_RELEASE 0 #define CHAKRA_CORE_VERSION_PRERELEASE 0 // Chakra RELEASE flag diff --git a/lib/Common/Codex/CMakeLists.txt b/lib/Common/Codex/CMakeLists.txt index 14b961f64d4..125ae427e57 100644 --- a/lib/Common/Codex/CMakeLists.txt +++ b/lib/Common/Codex/CMakeLists.txt @@ -1,12 +1,12 @@ -if(NOT STATIC_LIBRARY) - # CH has a direct dependency to this project - add_library (Chakra.Common.Codex.Singular STATIC - Utf8Codex.cpp) - target_include_directories ( - Chakra.Common.Codex.Singular PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) -endif() add_library (Chakra.Common.Codex OBJECT Utf8Codex.cpp) target_include_directories ( Chakra.Common.Codex PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) + +if(NOT STATIC_LIBRARY) + # CH has a direct dependency to this project + add_library (Chakra.Common.Codex.Singular STATIC + $) +endif() + diff --git a/lib/Common/Codex/Utf8Codex.cpp b/lib/Common/Codex/Utf8Codex.cpp index 67355600ee7..f2083efa5d9 100644 --- a/lib/Common/Codex/Utf8Codex.cpp +++ b/lib/Common/Codex/Utf8Codex.cpp @@ -69,11 +69,6 @@ namespace utf8 return ((0x5B >> (((prefix ^ 0xF0) >> 3) & 0x1E)) & 0x03) + 1; } - const char16 WCH_UTF16_HIGH_FIRST = char16(0xd800); - const char16 WCH_UTF16_HIGH_LAST = char16(0xdbff); - const char16 WCH_UTF16_LOW_FIRST = char16(0xdc00); - const char16 WCH_UTF16_LOW_LAST = char16(0xdfff); - char16 GetUnknownCharacter(DecodeOptions options = doDefault) { if ((options & doThrowOnInvalidWCHARs) != 0) @@ -83,26 +78,11 @@ namespace utf8 return char16(UNICODE_UNKNOWN_CHAR_MARK); } - inline BOOL InRange(const char16 ch, const char16 chMin, const char16 chMax) - { - return (unsigned)(ch - chMin) <= (unsigned)(chMax - chMin); - } - BOOL IsValidWideChar(char16 ch) { return (ch < 0xfdd0) || ((ch > 0xfdef) && (ch <= 0xffef)) || ((ch >= 0xfff9) && (ch <= 0xfffd)); } - inline BOOL IsHighSurrogateChar(char16 ch) - { - return InRange( ch, WCH_UTF16_HIGH_FIRST, WCH_UTF16_HIGH_LAST ); - } - - inline BOOL IsLowSurrogateChar(char16 ch) - { - return InRange( ch, WCH_UTF16_LOW_FIRST, WCH_UTF16_LOW_LAST ); - } - _At_(ptr, _In_reads_(end - ptr) _Post_satisfies_(ptr >= _Old_(ptr) - 1 && ptr <= end)) inline char16 DecodeTail(char16 c1, LPCUTF8& ptr, LPCUTF8 end, DecodeOptions& options, bool *chunkEndsAtTruncatedSequence) { diff --git a/lib/Common/Codex/Utf8Codex.h b/lib/Common/Codex/Utf8Codex.h index 7ba2571fbca..ade12075cf0 100644 --- a/lib/Common/Codex/Utf8Codex.h +++ b/lib/Common/Codex/Utf8Codex.h @@ -157,6 +157,26 @@ namespace utf8 BOOL IsValidWideChar(char16 ch); + const char16 WCH_UTF16_HIGH_FIRST = char16(0xd800); + const char16 WCH_UTF16_HIGH_LAST = char16(0xdbff); + const char16 WCH_UTF16_LOW_FIRST = char16(0xdc00); + const char16 WCH_UTF16_LOW_LAST = char16(0xdfff); + + inline BOOL InRange(const char16 ch, const char16 chMin, const char16 chMax) + { + return (unsigned)(ch - chMin) <= (unsigned)(chMax - chMin); + } + + inline BOOL IsHighSurrogateChar(char16 ch) + { + return InRange(ch, WCH_UTF16_HIGH_FIRST, WCH_UTF16_HIGH_LAST); + } + + inline BOOL IsLowSurrogateChar(char16 ch) + { + return InRange(ch, WCH_UTF16_LOW_FIRST, WCH_UTF16_LOW_LAST); + } + // Decode the trail bytes after the UTF8 lead byte c1 but returning 0xFFFD if trail bytes are expected after end. _At_(ptr, _In_reads_(end - ptr) _Post_satisfies_(ptr >= _Old_(ptr) - 1 && ptr <= end)) char16 DecodeTail(char16 c1, LPCUTF8& ptr, LPCUTF8 end, DecodeOptions& options, bool *chunkEndsAtTruncatedSequence = nullptr); diff --git a/lib/Common/Common/CMakeLists.txt b/lib/Common/Common/CMakeLists.txt index d034ecd2a68..21aaaff6b40 100644 --- a/lib/Common/Common/CMakeLists.txt +++ b/lib/Common/Common/CMakeLists.txt @@ -1,5 +1,7 @@ if(CC_TARGETS_ARM) set(ARCH_SOURCES arm/arm_GET_CURRENT_FRAME.S) +elseif(CC_TARGETS_ARM64) + set(ARCH_SOURCES arm64/arm64_GET_CURRENT_FRAME.S) endif() add_library (Chakra.Common.Common OBJECT diff --git a/lib/Common/Common/Chakra.Common.Common.vcxproj b/lib/Common/Common/Chakra.Common.Common.vcxproj index 3682f1bde5e..4e65257f912 100644 --- a/lib/Common/Common/Chakra.Common.Common.vcxproj +++ b/lib/Common/Common/Chakra.Common.Common.vcxproj @@ -38,6 +38,7 @@ + @@ -59,6 +60,7 @@ + diff --git a/lib/Common/Common/CompressionUtilities.cpp b/lib/Common/Common/CompressionUtilities.cpp new file mode 100644 index 00000000000..6cf35e49e92 --- /dev/null +++ b/lib/Common/Common/CompressionUtilities.cpp @@ -0,0 +1,137 @@ +//------------------------------------------------------------------------------------------------------- +// Copyright (C) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. +//------------------------------------------------------------------------------------------------------- + +#include "CommonCommonPch.h" +#include "CompressionUtilities.h" + +#ifdef ENABLE_COMPRESSION_UTILITIES +#include +#endif + +#define IFFALSEGO(expr,label) do { if(!(expr)) { goto label; } } while(0); +#define IFFALSEGOANDGETLASTERROR(expr,label) do { if(!(expr)) { hr = HRESULT_FROM_WIN32(GetLastError()); goto label; } } while(0); + +using namespace Js; + +DWORD ConvertCompressionAlgorithm(CompressionUtilities::CompressionAlgorithm algorithm) +{ + // Note: The algorithms listed in CompressionUtilities.h should be kept in-sync with those + // defined in compressapi.h or else we will need to do more than a simple cast here. + return static_cast(algorithm); +} + +HRESULT CompressionUtilities::CompressBuffer( + _In_ ArenaAllocator* alloc, + _In_ const byte* inputBuffer, + _In_ size_t inputBufferByteCount, + _Out_ byte** compressedBuffer, + _Out_ size_t* compressedBufferByteCount, + _In_opt_ CompressionAlgorithm algorithm) +{ + Assert(compressedBuffer != nullptr); + Assert(compressedBufferByteCount != nullptr); + + *compressedBuffer = nullptr; + *compressedBufferByteCount = 0; + + HRESULT hr = E_FAIL; + +#ifdef ENABLE_COMPRESSION_UTILITIES + COMPRESSOR_HANDLE compressor = nullptr; + IFFALSEGOANDGETLASTERROR(CreateCompressor(ConvertCompressionAlgorithm(algorithm), nullptr, &compressor), Error); + + if (algorithm == CompressionAlgorithm_Xpress || algorithm == CompressionAlgorithm_Xpress_Huff) + { + DWORD level = 0; + IFFALSEGOANDGETLASTERROR(SetCompressorInformation(compressor, COMPRESS_INFORMATION_CLASS_LEVEL, &level, sizeof(DWORD)), Error); + } + + SIZE_T compressedByteCount = 0; + bool result = Compress(compressor, inputBuffer, inputBufferByteCount, nullptr, 0, &compressedByteCount); + + if (!result) + { + DWORD errorCode = GetLastError(); + if (errorCode != ERROR_INSUFFICIENT_BUFFER) + { + hr = HRESULT_FROM_WIN32(errorCode); + goto Error; + } + } + + *compressedBuffer = AnewNoThrowArray(alloc, byte, compressedByteCount); + IFFALSEGO(*compressedBuffer != nullptr, Error); + + SIZE_T compressedDataSize; + IFFALSEGOANDGETLASTERROR(Compress(compressor, inputBuffer, inputBufferByteCount, *compressedBuffer, compressedByteCount, &compressedDataSize), Error); + *compressedBufferByteCount = compressedDataSize; + + hr = S_OK; + +Error: + if (compressor != nullptr) + { + CloseCompressor(compressor); + } +#else + hr = E_NOTIMPL; +#endif + + return hr; +} + +HRESULT CompressionUtilities::DecompressBuffer( + _In_ ArenaAllocator* alloc, + _In_ const byte* compressedBuffer, + _In_ size_t compressedBufferByteCount, + _Out_ byte** decompressedBuffer, + _Out_ size_t* decompressedBufferByteCount, + _In_opt_ CompressionAlgorithm algorithm) +{ + Assert(decompressedBuffer != nullptr); + Assert(decompressedBufferByteCount != nullptr); + + *decompressedBuffer = nullptr; + *decompressedBufferByteCount = 0; + + HRESULT hr = E_FAIL; + +#ifdef ENABLE_COMPRESSION_UTILITIES + DECOMPRESSOR_HANDLE decompressor = nullptr; + IFFALSEGOANDGETLASTERROR(CreateDecompressor(ConvertCompressionAlgorithm(algorithm), nullptr, &decompressor), Error); + + SIZE_T decompressedByteCount = 0; + bool result = Decompress(decompressor, compressedBuffer, compressedBufferByteCount, nullptr, 0, &decompressedByteCount); + + if (!result) + { + DWORD errorCode = GetLastError(); + if (errorCode != ERROR_INSUFFICIENT_BUFFER) + { + hr = HRESULT_FROM_WIN32(errorCode); + goto Error; + } + } + + *decompressedBuffer = AnewNoThrowArray(alloc, byte, decompressedByteCount); + IFFALSEGO(*decompressedBuffer != nullptr, Error); + + SIZE_T uncompressedDataSize = 0; + IFFALSEGOANDGETLASTERROR(Decompress(decompressor, compressedBuffer, compressedBufferByteCount, *decompressedBuffer, decompressedByteCount, &uncompressedDataSize), Error); + *decompressedBufferByteCount = uncompressedDataSize; + + hr = S_OK; + +Error: + if (decompressor != nullptr) + { + CloseDecompressor(decompressor); + } +#else + hr = E_NOTIMPL; +#endif + + return hr; +} diff --git a/lib/Common/Common/CompressionUtilities.h b/lib/Common/Common/CompressionUtilities.h new file mode 100644 index 00000000000..db712566ecb --- /dev/null +++ b/lib/Common/Common/CompressionUtilities.h @@ -0,0 +1,37 @@ +//------------------------------------------------------------------------------------------------------- +// Copyright (C) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. +//------------------------------------------------------------------------------------------------------- +#pragma once + +namespace Js +{ + class CompressionUtilities + { + public: + enum CompressionAlgorithm : byte + { + CompressionAlgorithm_MSZip = 0x2, + CompressionAlgorithm_Xpress = 0x3, + CompressionAlgorithm_Xpress_Huff = 0x4, + CompressionAlgorithm_LZMS = 0x5, + CompressionAlgorithm_Invalid = 0xf + }; + + static HRESULT CompressBuffer( + _In_ ArenaAllocator* alloc, + _In_ const byte* inputBuffer, + _In_ size_t inputBufferByteCount, + _Out_ byte** compressedBuffer, + _Out_ size_t* compressedBufferByteCount, + _In_opt_ CompressionAlgorithm algorithm = CompressionAlgorithm_Xpress); + + static HRESULT DecompressBuffer( + _In_ ArenaAllocator* alloc, + _In_ const byte* compressedBuffer, + _In_ size_t compressedBufferByteCount, + _Out_ byte** decompressedBuffer, + _Out_ size_t* decompressedBufferByteCount, + _In_opt_ CompressionAlgorithm algorithm = CompressionAlgorithm_Xpress); + }; +} diff --git a/lib/Common/Common/DateUtilities.cpp b/lib/Common/Common/DateUtilities.cpp index 691a0fefc0d..3cdba0554f5 100644 --- a/lib/Common/Common/DateUtilities.cpp +++ b/lib/Common/Common/DateUtilities.cpp @@ -68,7 +68,7 @@ namespace Js _u("PDT") }; - +#ifdef INTL_WINGLOB // // Convert an ES5 date based on double to a WinRT DateTime // DateTime is the number of ticks that have elapsed since 1/1/1601 00:00:00 in 100ns precision @@ -102,6 +102,7 @@ namespace Js return INTSAFE_E_ARITHMETIC_OVERFLOW; } +#endif ///------------------------------------------------------------------------------ /// Get a time value from SYSTEMTIME structure. @@ -334,20 +335,4 @@ namespace Js yearType += 7; } } - - double DateUtilities::JsLocalTimeFromVarDate(double dbl) - { - // So that the arithmetic works even for negative dates, convert the - // date to the _actual number of days_ since 0000h 12/30/1899. - if (dbl < 0.0) - dbl = 2.0 * ceil(dbl) - dbl; - - // Get the local time value. - dbl = (dbl - g_kdblJanuary1st1970) * 86400000; - if (NumberUtilities::IsNan(dbl)) - { - return dbl; - } - return NumberUtilities::IsFinite(dbl) ? floor( dbl + 0.5) : dbl; - } } diff --git a/lib/Common/Common/DateUtilities.h b/lib/Common/Common/DateUtilities.h index 17c46466aef..8548c829131 100644 --- a/lib/Common/Common/DateUtilities.h +++ b/lib/Common/Common/DateUtilities.h @@ -28,9 +28,9 @@ namespace Js static const INT64 ticksPerMillisecond; static const double ticksPerMillisecondDouble; static const INT64 jsEpochMilliseconds; - +#ifdef INTL_WINGLOB static HRESULT ES5DateToWinRTDate(double es5Date, __out INT64* pResult); - +#endif static double TimeFromSt(SYSTEMTIME *pst); static double DayTimeFromSt(SYSTEMTIME *pst); static double TvFromDate(double year, double mon, double day, double time); @@ -41,9 +41,6 @@ namespace Js static void GetYmdFromTv(double tv, DateTime::YMD *pymd); static void GetYearFromTv(double tv, int &year, int &yearType); - - // Used for VT_DATE conversions - static double JsLocalTimeFromVarDate(double dbl); }; } diff --git a/lib/Common/Common/Jobs.cpp b/lib/Common/Common/Jobs.cpp index 7158acd39c8..c427092f42a 100644 --- a/lib/Common/Common/Jobs.cpp +++ b/lib/Common/Common/Jobs.cpp @@ -1299,7 +1299,7 @@ namespace JsUtil #if !defined(_UCRT) HMODULE dllHandle = NULL; - if (!GetModuleHandleEx(0, AutoSystemInfo::GetJscriptDllFileName(), &dllHandle)) + if (!GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, (LPCTSTR)&BackgroundJobProcessor::StaticThreadProc, &dllHandle)) { dllHandle = NULL; } diff --git a/lib/Common/Common/Jobs.h b/lib/Common/Common/Jobs.h index 50b91817ddf..44ca29040e8 100644 --- a/lib/Common/Common/Jobs.h +++ b/lib/Common/Common/Jobs.h @@ -442,7 +442,7 @@ namespace JsUtil ParallelThreadData(AllocationPolicyManager* policyManager); - PageAllocator* const GetPageAllocator() { return &backgroundPageAllocator; } + PageAllocator* GetPageAllocator() { return &backgroundPageAllocator; } bool CanDecommit() const { return canDecommit; } }; diff --git a/lib/Common/Common/NumberUtilities.cpp b/lib/Common/Common/NumberUtilities.cpp index 2b0937f4a9c..bf401989c41 100644 --- a/lib/Common/Common/NumberUtilities.cpp +++ b/lib/Common/Common/NumberUtilities.cpp @@ -17,6 +17,7 @@ using namespace Js; // Redeclare static constants const UINT64 NumberConstantsBase::k_Nan; const UINT32 NumberConstantsBase::k_Nan32; + const UINT64 NumberConstantsBase::k_NegativeNan; const INT64 NumberUtilitiesBase::Pos_InvalidInt64; const INT64 NumberUtilitiesBase::Neg_InvalidInt64; const uint64 NumberConstants::k_PosInf; @@ -59,6 +60,7 @@ using namespace Js; const double NumberConstants::MAX_VALUE = *(double*)(&NumberConstants::k_PosMax); const double NumberConstants::MIN_VALUE = *(double*)(&NumberConstants::k_PosMin); const double NumberConstants::NaN = *(double*)(&NumberConstants::k_Nan); + const double NumberConstants::NegativeNaN = *(double*)(&NumberConstants::k_NegativeNan); const double NumberConstants::NEGATIVE_INFINITY= *(double*)(&NumberConstants::k_NegInf); const double NumberConstants::POSITIVE_INFINITY= *(double*)(&NumberConstants::k_PosInf ); const double NumberConstants::NEG_ZERO= *(double*)(&NumberConstants::k_NegZero ); @@ -403,17 +405,29 @@ using namespace Js; } template - double NumberUtilities::DblFromHex(const EncodedChar *psz, const EncodedChar **ppchLim) + double NumberUtilities::DblFromHex(const EncodedChar *psz, const EncodedChar **ppchLim, bool isNumericSeparatorEnabled) { double dbl; uint uT; byte bExtra; int cbit; + const EncodedChar* pszSave = psz; // Skip leading zeros. +LSkipZeroes: while (*psz == '0') psz++; + // If we stopped fast-scanning zeroes above because we ran into a numeric separator, skip that separator character if + // the previous character was a '0' (meaning the separator was not the first character in the literal) and the following + // character is a hex digit. + int unused; + if (*psz == '_' && isNumericSeparatorEnabled && pszSave < psz && psz[-1] == '0' && FHexDigit(psz[1], &unused)) + { + psz++; + goto LSkipZeroes; + } + dbl = 0; Assert(Js::NumberUtilities::LuHiDbl(dbl) == 0); Assert(Js::NumberUtilities::LuLoDbl(dbl) == 0); @@ -458,9 +472,17 @@ using namespace Js; if ((uT = (*psz - '0')) > 9) { if ((uT -= 'A' - '0') <= 5 || (uT -= 'a' - 'A') <= 5) + { uT += 10; + } + else if (*psz == '_' && isNumericSeparatorEnabled && pszSave < psz && psz[-1] != '_' && FHexDigit(psz[1], &unused)) + { + continue; + } else + { break; + } } if (cbit <= 17) @@ -509,7 +531,7 @@ using namespace Js; } template - double NumberUtilities::DblFromBinary(const EncodedChar *psz, const EncodedChar **ppchLim) + double NumberUtilities::DblFromBinary(const EncodedChar *psz, const EncodedChar **ppchLim, bool isNumericSeparatorEnabled) { double dbl = 0; Assert(Js::NumberUtilities::LuHiDbl(dbl) == 0); @@ -517,16 +539,32 @@ using namespace Js; uint uT; byte bExtra = 0; int cbit = 0; + const EncodedChar* pszSave = psz; + // Skip leading zeros. +LSkipZeroes: while (*psz == '0') psz++; + // Get the first digit. uT = *psz - '0'; if (uT > 1) { + // We can skip over this numeric separator character if: + // - numeric separators are enabled + // - we've walked past at least one zero character (ie: this isn't the first character in psz) + // - the previous character was a zero + // - the following character is a valid binary digit + if (*psz == '_' && isNumericSeparatorEnabled && pszSave < psz && psz[-1] == '0' && static_cast(psz[1] - '0') <= 1) + { + psz++; + goto LSkipZeroes; + } + *ppchLim = psz; return dbl; } + //Now that leading zeros are skipped first bit should be one so lets //go ahead and count it and increment psz cbit = 1; @@ -542,12 +580,14 @@ using namespace Js; // Why 52? 52 is the last explicit bit and 1 bit away from 53 (max bits of precision // for double precision floating point) const uint leftShiftValue = 52; - for (; (uT = (*psz - '0')) <= 1; psz++) + +LGetBinaryDigit: + uT = *psz - '0'; + if (uT <= 1) { if (cbit <= rightShiftValue) { Js::NumberUtilities::LuHiDbl(dbl) |= (uint32)uT << (rightShiftValue - cbit); - } else if (cbit <= leftShiftValue) { @@ -563,6 +603,16 @@ using namespace Js; bExtra |= 1; } cbit++; + psz++; + goto LGetBinaryDigit; + } + else if (*psz == '_') + { + if (isNumericSeparatorEnabled && cbit > 0 && psz[-1] != '_' && static_cast(psz[1] - '0') <= 1) + { + psz++; + goto LGetBinaryDigit; + } } // Set the lim. *ppchLim = psz; @@ -591,17 +641,25 @@ using namespace Js; } template - double NumberUtilities::DblFromOctal(const EncodedChar *psz, const EncodedChar **ppchLim) + double NumberUtilities::DblFromOctal(const EncodedChar *psz, const EncodedChar **ppchLim, bool isNumericSeparatorEnabled) { double dbl; uint uT; byte bExtra; int cbit; + const EncodedChar* pszSave = psz; // Skip leading zeros. +LSkipZeroes: while (*psz == '0') psz++; + if (*psz == '_' && isNumericSeparatorEnabled && psz > pszSave && psz[-1] == '0' && static_cast(psz[1] - '0') <= 7) + { + psz++; + goto LSkipZeroes; + } + dbl = 0; Assert(Js::NumberUtilities::LuHiDbl(dbl) == 0); Assert(Js::NumberUtilities::LuLoDbl(dbl) == 0); @@ -632,7 +690,9 @@ using namespace Js; } bExtra = 0; - for (; (uT = (*psz - '0')) <= 7; psz++) +LGetOctalDigit: + uT = *psz - '0'; + if (uT <= 7) { if (cbit <= 18) Js::NumberUtilities::LuHiDbl(dbl) |= (uint32)uT << (18 - cbit); @@ -651,6 +711,16 @@ using namespace Js; else if (0 != uT) bExtra |= 1; cbit += 3; + psz++; + goto LGetOctalDigit; + } + else if (*psz == '_') + { + if (isNumericSeparatorEnabled && cbit > 0 && psz[-1] != '_' && static_cast(psz[1] - '0') <= 7) + { + psz++; + goto LGetOctalDigit; + } } // Set the lim. @@ -684,15 +754,15 @@ using namespace Js; double NumberUtilities::StrToDbl(const EncodedChar * psz, const EncodedChar **ppchLim, Js::ScriptContext *const scriptContext) { Assert(scriptContext); - bool likelyInt = true; - return Js::NumberUtilities::StrToDbl(psz, ppchLim, likelyInt); + LikelyNumberType likelyType = LikelyNumberType::Int; + return Js::NumberUtilities::StrToDbl(psz, ppchLim, likelyType); } template double NumberUtilities::StrToDbl(const char16 * psz, const char16 **ppchLim, Js::ScriptContext *const scriptContext); template double NumberUtilities::StrToDbl(const utf8char_t * psz, const utf8char_t **ppchLim, Js::ScriptContext *const scriptContext); - template double NumberUtilities::DblFromHex(const char16 *psz, const char16 **ppchLim); - template double NumberUtilities::DblFromHex(const utf8char_t *psz, const utf8char_t **ppchLim); - template double NumberUtilities::DblFromBinary(const char16 *psz, const char16 **ppchLim); - template double NumberUtilities::DblFromBinary(const utf8char_t *psz, const utf8char_t **ppchLim); - template double NumberUtilities::DblFromOctal(const char16 *psz, const char16 **ppchLim); - template double NumberUtilities::DblFromOctal(const utf8char_t *psz, const utf8char_t **ppchLim); + template double NumberUtilities::DblFromHex(const char16 *psz, const char16 **ppchLim, bool isNumericSeparatorEnabled); + template double NumberUtilities::DblFromHex(const utf8char_t *psz, const utf8char_t **ppchLim, bool isNumericSeparatorEnabled); + template double NumberUtilities::DblFromBinary(const char16 *psz, const char16 **ppchLim, bool isNumericSeparatorEnabled); + template double NumberUtilities::DblFromBinary(const utf8char_t *psz, const utf8char_t **ppchLim, bool isNumericSeparatorEnabled); + template double NumberUtilities::DblFromOctal(const char16 *psz, const char16 **ppchLim, bool isNumericSeparatorEnabled); + template double NumberUtilities::DblFromOctal(const utf8char_t *psz, const utf8char_t **ppchLim, bool isNumericSeparatorEnabled); diff --git a/lib/Common/Common/NumberUtilities.h b/lib/Common/Common/NumberUtilities.h index 2ba8cf48851..5ad7efcf3ef 100644 --- a/lib/Common/Common/NumberUtilities.h +++ b/lib/Common/Common/NumberUtilities.h @@ -4,6 +4,14 @@ //------------------------------------------------------------------------------------------------------- #pragma once +enum class LikelyNumberType +{ + Double, + Int, + BigInt, +}; + + namespace Js { class NumberConstants : public NumberConstantsBase @@ -56,6 +64,7 @@ namespace Js static const double MAX_VALUE; static const double MIN_VALUE; static const double NaN; + static const double NegativeNaN; static const double NEGATIVE_INFINITY; static const double POSITIVE_INFINITY; static const double NEG_ZERO; @@ -91,6 +100,7 @@ namespace Js static bool IsFinite(double value); static bool IsNan(double value); + static bool IsNegative(double value); static bool IsFloat32NegZero(float value); static bool IsSpecial(double value, uint64 nSpecial); static uint64 ToSpecial(double value); @@ -217,7 +227,7 @@ namespace Js // Implemented in lib\parser\common. Should move to lib\common template - static double StrToDbl(const EncodedChar *psz, const EncodedChar **ppchLim, bool& likelyInt); + static double StrToDbl(const EncodedChar *psz, const EncodedChar **ppchLim, LikelyNumberType& likelyType, bool isESBigIntEnabled = false, bool isNumericSeparatorEnabled = false); static BOOL FDblToStr(double dbl, __out_ecount(nDstBufSize) char16 *psz, int nDstBufSize); static int FDblToStr(double dbl, NumberUtilities::FormatType ft, int nDigits, __out_ecount(cchDst) char16 *pchDst, int cchDst); @@ -240,11 +250,11 @@ namespace Js static BOOL FDblIsInt32(double dbl, int32 *plw); template - static double DblFromHex(const EncodedChar *psz, const EncodedChar **ppchLim); + static double DblFromHex(const EncodedChar *psz, const EncodedChar **ppchLim, bool isNumericSeparatorEnabled = false); template - static double DblFromBinary(const EncodedChar *psz, const EncodedChar **ppchLim); + static double DblFromBinary(const EncodedChar *psz, const EncodedChar **ppchLim, bool isNumericSeparatorEnabled = false); template - static double DblFromOctal(const EncodedChar *psz, const EncodedChar **ppchLim); + static double DblFromOctal(const EncodedChar *psz, const EncodedChar **ppchLim, bool isNumericSeparatorEnabled = false); template static double StrToDbl(const EncodedChar *psz, const EncodedChar **ppchLim, Js::ScriptContext *const scriptContext); diff --git a/lib/Common/Common/NumberUtilities.inl b/lib/Common/Common/NumberUtilities.inl index b0e77429411..c0478a2bb61 100644 --- a/lib/Common/Common/NumberUtilities.inl +++ b/lib/Common/Common/NumberUtilities.inl @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft Corporation and contributors. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- @@ -7,6 +8,13 @@ #define NUMBER_UTIL_INLINE #endif +// Attempt to pun int/float without address-taking. +// This helps compilers. + +#if defined(_AMD64_) || _M_IX86_FP >= 2 || defined(__AVX__) +#include +#endif + #if !defined(__BIG_ENDIAN__) && !defined(__LITTLE_ENDIAN__) #if defined(_MSC_VER) // WINDOWS @@ -136,19 +144,27 @@ namespace Js NUMBER_UTIL_INLINE bool NumberUtilities::IsNan(double value) { + const uint64 nCompare = ToSpecial(value); #if defined(TARGET_64) - // NaN is a range of values; all bits on the exponent are 1's and some nonzero significant. - // no distinction on signed NaN's - uint64 nCompare = ToSpecial(value); - bool isNan = (0 == (~nCompare & 0x7FF0000000000000ull) && + // NaN is a range of values; all bits on the exponent are 1's + // and some nonzero significant. No distinction on signed NaN's. + const bool isNan = (0 == (~nCompare & 0x7FF0000000000000ull) && 0 != (nCompare & 0x000FFFFFFFFFFFFFull)); return isNan; #else - return 0 == (~Js::NumberUtilities::LuHiDbl(value) & 0x7FF00000) && - (0 != Js::NumberUtilities::LuLoDbl(value) || 0 != (Js::NumberUtilities::LuHiDbl(value) & 0x000FFFFF)); + const uint32 hi = (uint32)(nCompare >> 32); + const uint32 lo = (uint32)nCompare; + return 0 == (~hi & 0x7FF00000) && + (0 != lo || 0 != (hi & 0x000FFFFF)); #endif } + NUMBER_UTIL_INLINE bool NumberUtilities::IsNegative(double value) + { + uint64 nCompare = ToSpecial(value); + return nCompare & 0x8000000000000000ull; + } + NUMBER_UTIL_INLINE bool NumberUtilities::IsSpecial(double value, uint64 nSpecial) { // Perform a bitwise comparison using uint64 instead of a double comparison, since that @@ -159,22 +175,46 @@ namespace Js NUMBER_UTIL_INLINE uint64 NumberUtilities::ToSpecial(double value) { +#if defined(_AMD64_) + return _mm_cvtsi128_si64(_mm_castpd_si128(_mm_set_sd(value))); +#elif defined(_M_ARM32_OR_ARM64) && defined(_CopyInt64FromDouble) + return _CopyInt64FromDouble(value); +#else return *(reinterpret_cast(&value)); +#endif } NUMBER_UTIL_INLINE uint32 NumberUtilities::ToSpecial(float value) { +#if defined(_AMD64_) || _M_IX86_FP >= 2 || defined(__AVX__) + return _mm_cvtsi128_si32(_mm_castps_si128(_mm_set_ss(value))); +#elif defined(_M_ARM32_OR_ARM64) && defined(_CopyInt32FromFloat) + return _CopyInt32FromFloat(value); +#else return *(reinterpret_cast(&value)); +#endif } NUMBER_UTIL_INLINE float NumberUtilities::ReinterpretBits(int value) { +#if defined(_AMD64_) || _M_IX86_FP >= 2 || defined(__AVX__) + return _mm_cvtss_f32(_mm_castsi128_ps(_mm_cvtsi32_si128(value))); +#elif defined(_M_ARM32_OR_ARM64) && defined(_CopyFloatFromInt32) + return _CopyFloatFromInt32(value); +#else return *(reinterpret_cast(&value)); +#endif } NUMBER_UTIL_INLINE double NumberUtilities::ReinterpretBits(int64 value) { +#if defined(_AMD64_) + return _mm_cvtsd_f64(_mm_castsi128_pd(_mm_cvtsi64_si128(value))); +#elif defined(_M_ARM32_OR_ARM64) && defined(_CopyDoubleFromInt64) + return _CopyDoubleFromInt64(value); +#else return *(reinterpret_cast(&value)); +#endif } NUMBER_UTIL_INLINE bool NumberUtilities::IsFloat32NegZero(float value) diff --git a/lib/Common/Common/NumberUtilitiesBase.h b/lib/Common/Common/NumberUtilitiesBase.h index 224a778637a..f47a16749b7 100644 --- a/lib/Common/Common/NumberUtilitiesBase.h +++ b/lib/Common/Common/NumberUtilitiesBase.h @@ -12,8 +12,9 @@ namespace Js class NumberConstantsBase { public: - static const UINT64 k_Nan = 0xFFF8000000000000ull; + static const UINT64 k_Nan = 0x7FF8000000000000ull; static const UINT32 k_Nan32 = 0x7FC00000ul; + static const UINT64 k_NegativeNan = 0xFFF8000000000000ull; }; class NumberUtilitiesBase diff --git a/lib/Common/Common/NumberUtilities_strtod.cpp b/lib/Common/Common/NumberUtilities_strtod.cpp index 6cb28f41f1c..df0ef933668 100644 --- a/lib/Common/Common/NumberUtilities_strtod.cpp +++ b/lib/Common/Common/NumberUtilities_strtod.cpp @@ -3,7 +3,7 @@ // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #include "CommonCommonPch.h" -#include "DataStructures/BigInt.h" +#include "DataStructures/BigUInt.h" namespace Js { @@ -366,7 +366,7 @@ void BIGNUM::SetFromRgchExp(const EncodedChar *prgch, int32 cch, int32 lwExp) while (++prgch < pchLim) { - if (*prgch == '.') + if (*prgch == '.' || *prgch == '_') continue; Assert(Js::NumberUtilities::IsDigit(*prgch)); MulTenAdd((byte) (*prgch - '0'), &luExtra); @@ -719,7 +719,7 @@ and re-compare. template static double AdjustDbl(double dbl, const EncodedChar *prgch, int32 cch, int32 lwExp) { - Js::BigInt biDec, biDbl; + Js::BigUInt biDec, biDbl; int32 c2Dec, c2Dbl; int32 c5Dec, c5Dbl; int wAddHi, wT; @@ -893,13 +893,13 @@ static double AdjustDbl(double dbl, const EncodedChar *prgch, int32 cch, int32 l String to Double. ***************************************************************************/ template -double Js::NumberUtilities::StrToDbl( const EncodedChar *psz, const EncodedChar **ppchLim, bool& likelyInt ) +double Js::NumberUtilities::StrToDbl(const EncodedChar *psz, const EncodedChar **ppchLim, LikelyNumberType& likelyNumberType, bool isBigIntEnabled, bool isNumericSeparatorEnabled) { uint32 lu; BIGNUM num; BIGNUM numHi; BIGNUM numLo; - double dbl; + double dbl = 0; double dblLo; #if DBG bool canUseLowPrec = false; @@ -909,6 +909,10 @@ double Js::NumberUtilities::StrToDbl( const EncodedChar *psz, const EncodedChar Assert(Js::NumberUtilities::IsNan(dblLowPrec)); #endif //DBG + // Numeric separator characters exist in the numeric constant and should + // be ignored. + bool hasNumericSeparators = false; + // For the mantissa digits. After leaving the state machine, pchMinDig // points to the first digit and pchLimDig points just past the last // digit. cchDig is the number of digits. pchLimDig - pchMinDig may be @@ -979,8 +983,11 @@ double Js::NumberUtilities::StrToDbl( const EncodedChar *psz, const EncodedChar if (Js::NumberUtilities::IsDigit(*pch)) { LGetLeftDig: - pchMinDig = pch; - for (cchDig = 1; Js::NumberUtilities::IsDigit(*++pch); cchDig++) + if (pchMinDig == NULL) + { + pchMinDig = pch; + } + for (cchDig++; Js::NumberUtilities::IsDigit(*++pch); cchDig++) ; } switch (*pch) @@ -990,12 +997,39 @@ double Js::NumberUtilities::StrToDbl( const EncodedChar *psz, const EncodedChar case 'E': case 'e': goto LGetExp; + case 'n': + if (isBigIntEnabled) + { + goto LBigInt; + } + goto LGetLeftDefault; + case '_': + if (isNumericSeparatorEnabled) + { + // A numeric separator is only valid if it appears between two + // digits. If the preceeding or following character is not a digit, + // we should just fallthrough and fail. Otherwise we would have to + // handle cases like 1_.0 manually above. + // cchDig holds the count of digits in the literal. If it's >0, we + // can be sure the previous pch is valid. + if (cchDig > 0 && Js::NumberUtilities::IsDigit(*(pch - 1)) + && Js::NumberUtilities::IsDigit(*(pch + 1))) + { + hasNumericSeparators = true; + pch++; + goto LGetLeftDig; + } + } + // Fallthrough +LGetLeftDefault: + default: + likelyNumberType = LikelyNumberType::Int; } goto LEnd; LGetRight: Assert(*pch == '.'); - likelyInt = false; + likelyNumberType = LikelyNumberType::Double; pch++; if (NULL == pchMinDig) { @@ -1003,6 +1037,7 @@ double Js::NumberUtilities::StrToDbl( const EncodedChar *psz, const EncodedChar lwAdj--; pchMinDig = pch; } +LGetRightDigit: for( ; Js::NumberUtilities::IsDigit(*pch); pch++) { cchDig++; @@ -1013,6 +1048,17 @@ double Js::NumberUtilities::StrToDbl( const EncodedChar *psz, const EncodedChar case 'E': case 'e': goto LGetExp; + case '_': + if (isNumericSeparatorEnabled) + { + if (cchDig > 0 && Js::NumberUtilities::IsDigit(*(pch - 1)) && + Js::NumberUtilities::IsDigit(*(pch + 1))) + { + hasNumericSeparators = true; + pch++; + goto LGetRightDigit; + } + } } goto LEnd; @@ -1043,6 +1089,26 @@ double Js::NumberUtilities::StrToDbl( const EncodedChar *psz, const EncodedChar if (lwExp > 100000000) lwExp = 100000000; } + switch (*pch) + { + case '_': + if (isNumericSeparatorEnabled) + { + if (Js::NumberUtilities::IsDigit(*(pch - 1)) && + Js::NumberUtilities::IsDigit(*(pch + 1))) + { + pch++; + goto LGetExpDigits; + } + } + } + goto LEnd; + +LBigInt: + pch++; + likelyNumberType = LikelyNumberType::BigInt; + *ppchLim = pch; + goto LDone; LEnd: *ppchLim = pch; @@ -1056,7 +1122,8 @@ double Js::NumberUtilities::StrToDbl( const EncodedChar *psz, const EncodedChar pchLimDig = pch; Assert(pchMinDig != NULL); Assert(pchLimDig - pchMinDig == cchDig || - pchLimDig - pchMinDig == cchDig + 1); + pchLimDig - pchMinDig == cchDig + 1 || + (isNumericSeparatorEnabled && hasNumericSeparators)); // Limit to kcchMaxSig digits. if (cchDig > kcchMaxSig) @@ -1102,7 +1169,7 @@ double Js::NumberUtilities::StrToDbl( const EncodedChar *psz, const EncodedChar cchDig--; lwAdj++; } - else if (*pchLimDig != '.') + else if (*pchLimDig != '.' && *pchLimDig != '_') { Assert(FNzDigit(*pchLimDig)); pchLimDig++; @@ -1110,7 +1177,8 @@ double Js::NumberUtilities::StrToDbl( const EncodedChar *psz, const EncodedChar } } Assert(pchLimDig - pchMinDig == cchDig || - pchLimDig - pchMinDig == cchDig + 1); + pchLimDig - pchMinDig == cchDig + 1 || + (isNumericSeparatorEnabled && hasNumericSeparators)); if (signExp < 0) lwExp = -lwExp; @@ -1125,8 +1193,14 @@ double Js::NumberUtilities::StrToDbl( const EncodedChar *psz, const EncodedChar // Can use the ALU. for (lu = 0, pch = pchMinDig; pch < pchLimDig; pch++) { - if (*pch != '.') + switch (*pch) { + case '.': + break; + case '_': + Assert(isNumericSeparatorEnabled && hasNumericSeparators); + break; + default: Assert(Js::NumberUtilities::IsDigit(*pch)); lu = lu * 10 + (*pch - '0'); } @@ -1137,8 +1211,14 @@ double Js::NumberUtilities::StrToDbl( const EncodedChar *psz, const EncodedChar { for (dbl = 0, pch = pchMinDig; pch < pchLimDig; pch++) { - if (*pch != '.') + switch (*pch) { + case '.': + break; + case '_': + Assert(isNumericSeparatorEnabled && hasNumericSeparators); + break; + default: Assert(Js::NumberUtilities::IsDigit(*pch)); dbl = dbl * 10 + (*pch - '0'); } @@ -1256,8 +1336,8 @@ double Js::NumberUtilities::StrToDbl( const EncodedChar *psz, const EncodedChar return dbl; } -template double Js::NumberUtilities::StrToDbl( const char16 * psz, const char16 **ppchLim, bool& likelyInt ); -template double Js::NumberUtilities::StrToDbl(const utf8char_t * psz, const utf8char_t **ppchLim, bool& likelyInt); +template double Js::NumberUtilities::StrToDbl( const char16 * psz, const char16 **ppchLim, LikelyNumberType& likelyInt, bool isBigIntEnabled, bool isNumericSeparatorEnabled ); +template double Js::NumberUtilities::StrToDbl(const utf8char_t * psz, const utf8char_t **ppchLim, LikelyNumberType& likelyInt, bool isBigIntEnabled, bool isNumericSeparatorEnabled ); /*************************************************************************** Uses big integer arithmetic to get the sequence of digits. @@ -1272,9 +1352,9 @@ static BOOL FDblToRgbPrecise(double dbl, __out_ecount(kcbMaxRgb) byte *prgb, int int wExp10, wExp2, w1, w2; int c2Num, c2Den, c5Num, c5Den; double dblT; - Js::BigInt biNum, biDen, biHi, biLo; - Js::BigInt *pbiLo; - Js::BigInt biT; + Js::BigUInt biNum, biDen, biHi, biLo; + Js::BigUInt *pbiLo; + Js::BigUInt biT; uint32 rglu[2]; // Caller should take care of 0, negative and non-finite values. @@ -1519,7 +1599,8 @@ static BOOL FDblToRgbPrecise(double dbl, __out_ecount(kcbMaxRgb) byte *prgb, int // Do not always push to higherBound // See Js::NumberUtilities::FDblToStr for the exception // i.e. we shouldn't push digits beyond interest to higherBound - prgb[ib++] = bT + (byte)(nDigits == -1 || ib < nDigits ? 1 : 0); + prgb[ib] = bT + (byte)(nDigits == -1 || ib < nDigits ? 1 : 0); + ++ib; break; } LRoundUp9: @@ -2439,8 +2520,8 @@ BOOL Js::NumberUtilities::FNonZeroFiniteDblToStr(double dbl, __out_ecount(cchDst { if (FormatDigits(rgb, pbLim, wExp10, pchDst, cchDst)) { - bool likelyInt = true; - dblT = StrToDbl(pchDst, &pch,likelyInt); + LikelyNumberType likelyInt = LikelyNumberType::Int; + dblT = StrToDbl(pchDst, &pch, likelyInt); Assert(0 == *pch); Assert(dblT == dbl); } @@ -2465,7 +2546,7 @@ BOOL Js::NumberUtilities::FNonZeroFiniteDblToStr(double dbl, __out_ecount(cchDst } #if DBG - bool likelyInt = true; + LikelyNumberType likelyInt = LikelyNumberType::Int; dblT = StrToDbl(pchDst, &pch, likelyInt); Assert(0 == *pch); Assert(dblT == dbl); diff --git a/lib/Common/Common/RejitReasons.h b/lib/Common/Common/RejitReasons.h index 0c35143eeb7..285c0c5221d 100644 --- a/lib/Common/Common/RejitReasons.h +++ b/lib/Common/Common/RejitReasons.h @@ -49,4 +49,5 @@ REJIT_REASON(ModByPowerOf2) REJIT_REASON(NoProfile) REJIT_REASON(PowIntIntTypeSpecDisabled) REJIT_REASON(DisableStackArgOpt) +REJIT_REASON(DisableStackArgLenAndConstOpt) REJIT_REASON(OptimizeTryFinallyDisabled) diff --git a/lib/Common/Common/arm64/arm64_Get_Current_Frame.S b/lib/Common/Common/arm64/arm64_Get_Current_Frame.S new file mode 100644 index 00000000000..7e5629990c0 --- /dev/null +++ b/lib/Common/Common/arm64/arm64_Get_Current_Frame.S @@ -0,0 +1,14 @@ +//------------------------------------------------------------------------------------------------------- +// Copyright (C) Microsoft. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. +// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. +//------------------------------------------------------------------------------------------------------- + +#include "unixasmmacros.inc" + +NESTED_ENTRY arm64_GET_CURRENT_FRAME, _TEXT, NoHandler + + mov x0,x29 + br lr + +NESTED_END arm64_GET_CURRENT_FRAME diff --git a/lib/Common/CommonDefines.h b/lib/Common/CommonDefines.h index 4a662f49b58..35eb3c1791c 100644 --- a/lib/Common/CommonDefines.h +++ b/lib/Common/CommonDefines.h @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #pragma once @@ -114,31 +115,13 @@ #define ENABLE_UNICODE_API 1 // Enable use of Unicode-related APIs #endif -// Normalize ICU_VERSION for non-Kit ICU -#if defined(HAS_ICU) && !defined(ICU_VERSION) && !defined(WINDOWS10_ICU) -#include "unicode/uvernum.h" -#define ICU_VERSION U_ICU_VERSION_MAJOR_NUM -#endif - -// Make non-Windows Kit ICU look and act like Windows Kit ICU for better compat -#if defined(HAS_ICU) && !defined(WINDOWS10_ICU) -#define U_SHOW_CPLUSPLUS_API 0 -// ICU 55 (Ubuntu 16.04 system default) has uloc_toUnicodeLocale* marked as draft, which is required for Intl -#if ICU_VERSION > 56 -#define U_DEFAULT_SHOW_DRAFT 0 -#define U_HIDE_DRAFT_API 1 -#endif -#define U_HIDE_DEPRECATED_API 1 -#define U_HIDE_OBSOLETE_API 1 -#define U_HIDE_INTERNAL_API 1 -#endif - // Language features #if !defined(CHAKRACORE_LITE) && (defined(_WIN32) || defined(INTL_ICU)) #define ENABLE_INTL_OBJECT // Intl support -#define ENABLE_JS_BUILTINS // Built In functions support #endif +#define ENABLE_JS_BUILTINS // Built In functions support + #if defined(_WIN32) && !defined(HAS_ICU) #define INTL_WINGLOB 1 #endif @@ -272,6 +255,8 @@ // JIT features +#define ENABLE_SPECTRE_RUNTIME_MITIGATIONS + #if DISABLE_JIT #define ENABLE_NATIVE_CODEGEN 0 #define ENABLE_PROFILE_INFO 0 @@ -345,12 +330,10 @@ #endif #ifdef NTBUILD -#define ENABLE_PROJECTION #define ENABLE_FOUNDATION_OBJECT -#define ENABLE_EXPERIMENTAL_FLAGS #define ENABLE_WININET_PROFILE_DATA_CACHE +#define ENABLE_COMPRESSION_UTILITIES #define ENABLE_BASIC_TELEMETRY -#define ENABLE_DOM_FAST_PATH #define EDIT_AND_CONTINUE #define ENABLE_JIT_CLAMP #define ENABLE_SCRIPT_PROFILING @@ -396,11 +379,7 @@ #define RUNTIME_DATA_COLLECTION #define SECURITY_TESTING -// xplat-todo: Temporarily disable profile output on non-Win32 builds -#ifdef _WIN32 #define PROFILE_EXEC -#endif - #define BGJIT_STATS #define REJIT_STATS #define PERF_HINT @@ -607,7 +586,6 @@ #define CHECK_MEMORY_LEAK #define LEAK_REPORT -#define PROJECTION_METADATA_TRACE #define ERROR_TRACE #define DEBUGGER_TRACE diff --git a/lib/Common/CommonPal.h b/lib/Common/CommonPal.h index dd63828ae77..96462310ae2 100644 --- a/lib/Common/CommonPal.h +++ b/lib/Common/CommonPal.h @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #pragma once @@ -103,13 +104,6 @@ #define get_cpuid __cpuid -#if defined(__clang__) -__forceinline void __int2c() -{ - __asm int 0x2c -} -#endif - #else // !_WIN32 #define USING_PAL_STDLIB 1 @@ -395,6 +389,18 @@ typedef union _SLIST_HEADER { } DUMMYSTRUCTNAME; } SLIST_HEADER, *PSLIST_HEADER; +#elif defined(_ARM64_) + +typedef union _SLIST_HEADER { + ULONGLONG Alignment; + struct { + SLIST_ENTRY Next; + WORD Depth; + WORD Reserved; + } DUMMYSTRUCTNAME; +} SLIST_HEADER, *PSLIST_HEADER; + + #endif PALIMPORT VOID PALAPI InitializeSListHead(IN OUT PSLIST_HEADER ListHead); @@ -499,7 +505,7 @@ DWORD __cdecl CharUpperBuffW(const char16* lpsz, DWORD cchLength); #endif // `typename QualifiedName` declarations outside of template code not supported before MSVC 2015 update 1 -#if defined(_MSC_VER) && _MSC_VER < 1910 +#if defined(_MSC_VER) && _MSC_VER < 1910 && !defined(__clang__) #define _TYPENAME #else #define _TYPENAME typename @@ -523,6 +529,8 @@ __forceinline void * _AddressOfReturnAddress() { return (void*)((char*) __builtin_frame_address(0) + sizeof(void*)); } +#else +extern "C" void * _AddressOfReturnAddress(void); #endif #else #error _AddressOfReturnAddress and _ReturnAddress not defined for this platform @@ -668,7 +676,7 @@ namespace PlatformAgnostic { __forceinline unsigned char _BitTestAndSet(LONG *_BitBase, int _BitPos) { -#if defined(__clang__) && !defined(_ARM_) +#if defined(__clang__) && !defined(_ARM_) && !defined(_ARM64_) // Clang doesn't expand _bittestandset intrinic to bts, and it's implemention also doesn't work for _BitPos >= 32 unsigned char retval = 0; asm( @@ -686,7 +694,7 @@ namespace PlatformAgnostic __forceinline unsigned char _BitTest(LONG *_BitBase, int _BitPos) { -#if defined(__clang__) && !defined(_ARM_) +#if defined(__clang__) && !defined(_ARM_) && !defined(_ARM64_) // Clang doesn't expand _bittest intrinic to bt, and it's implemention also doesn't work for _BitPos >= 32 unsigned char retval; asm( @@ -704,7 +712,7 @@ namespace PlatformAgnostic __forceinline unsigned char _InterlockedBitTestAndSet(volatile LONG *_BitBase, int _BitPos) { -#if defined(__clang__) && !defined(_ARM_) +#if defined(__clang__) && !defined(_ARM_) && !defined(_ARM64_) // Clang doesn't expand _interlockedbittestandset intrinic to lock bts, and it's implemention also doesn't work for _BitPos >= 32 unsigned char retval; asm( @@ -722,7 +730,7 @@ namespace PlatformAgnostic __forceinline unsigned char _InterlockedBitTestAndReset(volatile LONG *_BitBase, int _BitPos) { -#if defined(__clang__) && !defined(_ARM_) +#if defined(__clang__) && !defined(_ARM_) && !defined(_ARM64_) // Clang doesn't expand _interlockedbittestandset intrinic to lock btr, and it's implemention also doesn't work for _BitPos >= 32 unsigned char retval; asm( diff --git a/lib/Common/ConfigFlagsList.h b/lib/Common/ConfigFlagsList.h index c40ef309df8..45339a9da1c 100644 --- a/lib/Common/ConfigFlagsList.h +++ b/lib/Common/ConfigFlagsList.h @@ -1,7 +1,9 @@ //------------------------------------------------------------------------------------------------------- -// Copyright (C) Microsoft. All rights reserved. +// Copyright (C) Microsoft Corporation and contributors. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- + #if defined(PHASE) || defined(PHASE_DEFAULT_ON) || defined(PHASE_DEFAULT_OFF) #ifndef PHASE #define PHASE(name) @@ -87,6 +89,7 @@ PHASE(All) PHASE(InlineApply) PHASE(InlineApplyTarget) PHASE(InlineApplyWithoutArrayArg) + PHASE(InlineAnyCallApplyTarget) PHASE(BailOutOnNotStackArgs) PHASE(InlineCall) PHASE(InlineCallTarget) @@ -159,12 +162,14 @@ PHASE(All) PHASE(DepolymorphizeInlinees) PHASE(ReuseAuxSlotPtr) PHASE(PolyEquivTypeGuard) + PHASE(DeadStoreTypeChecksOnStores) #if DBG PHASE(SimulatePolyCacheWithOneTypeForFunction) #endif PHASE(CheckThis) PHASE(StackArgOpt) PHASE(StackArgFormalsOpt) + PHASE(StackArgLenConstOpt) PHASE(IndirCopyProp) PHASE(ArrayCheckHoist) PHASE(ArrayMissingValueCheckHoist) @@ -186,6 +191,7 @@ PHASE(All) PHASE(UseFixedDataProps) PHASE(UseFixedDataPropsInInliner) PHASE(LazyBailout) + PHASE(LazyBailoutOnImplicitCalls) PHASE(LazyFixedDataBailout) PHASE(LazyFixedTypeBailout) PHASE(FixedMethods) @@ -258,6 +264,7 @@ PHASE(All) PHASE(PrologEpilog) PHASE(InsertNOPs) PHASE(Encoder) + PHASE(Assembly) PHASE(Emitter) PHASE(DebugBreak) #if defined(_M_IX86) || defined(_M_X64) @@ -319,6 +326,8 @@ PHASE(All) PHASE(FinishPartial) PHASE(Host) PHASE(BailOut) + PHASE(BailIn) + PHASE(GeneratorGlobOpt) PHASE(RegexQc) PHASE(RegexOptBT) PHASE(InlineCache) @@ -328,7 +337,6 @@ PHASE(All) PHASE(CloneCacheInCollision) PHASE(ConstructorCache) PHASE(InlineCandidate) - PHASE(InlineHostCandidate) PHASE(ScriptFunctionWithInlineCache) PHASE(IsConcatSpreadableCache) PHASE(Arena) @@ -369,7 +377,6 @@ PHASE(All) PHASE(CFG) PHASE(ExceptionStackTrace) PHASE(ExtendedExceptionInfoStackTrace) - PHASE(ProjectionMetadata) PHASE(TypeHandlerTransition) PHASE(Debugger) PHASE(ENC) @@ -385,6 +392,7 @@ PHASE(All) PHASE(ShareTypesWithAttributes) PHASE(ShareAccessorTypes) PHASE(ShareFuncTypes) + PHASE(ShareCrossSiteFuncTypes) PHASE(ConditionalCompilation) PHASE(InterpreterProfile) PHASE(InterpreterAutoProfile) @@ -445,7 +453,8 @@ PHASE(All) #define DEFAULT_CONFIG_HybridFgJit (false) #define DEFAULT_CONFIG_HybridFgJitBgQueueLengthThreshold (32) #define DEFAULT_CONFIG_Prejit (false) -#define DEFAULT_CONFIG_ParserStateCache (false) +#define DEFAULT_CONFIG_ParserStateCache (true) +#define DEFAULT_CONFIG_CompressParserStateCache (false) #define DEFAULT_CONFIG_DeferTopLevelTillFirstCall (true) #define DEFAULT_CONFIG_DirectCallTelemetryStats (false) #define DEFAULT_CONFIG_errorStackTrace (true) @@ -505,7 +514,6 @@ PHASE(All) #define DEFAULT_CONFIG_ForceOldDateAPI (false) #define DEFAULT_CONFIG_Loop (1) #define DEFAULT_CONFIG_ForceDiagnosticsMode (false) -#define DEFAULT_CONFIG_EnableJitInDiagMode (true) #define DEFAULT_CONFIG_UseFullName (true) #define DEFAULT_CONFIG_EnableContinueAfterExceptionWrappersForHelpers (true) #define DEFAULT_CONFIG_EnableContinueAfterExceptionWrappersForBuiltIns (true) @@ -518,8 +526,11 @@ PHASE(All) #define DEFAULT_CONFIG_MaxJitThreadCount (2) #define DEFAULT_CONFIG_ForceMaxJitThreadCount (false) +#ifdef ENABLE_SPECTRE_RUNTIME_MITIGATIONS #define DEFAULT_CONFIG_MitigateSpectre (true) +#define DEFAULT_CONFIG_AddMaskingBlocks (true) + #define DEFAULT_CONFIG_PoisonVarArrayLoad (true) #define DEFAULT_CONFIG_PoisonIntArrayLoad (true) #define DEFAULT_CONFIG_PoisonFloatArrayLoad (true) @@ -533,6 +544,25 @@ PHASE(All) #define DEFAULT_CONFIG_PoisonTypedArrayStore (true) #define DEFAULT_CONFIG_PoisonStringStore (true) #define DEFAULT_CONFIG_PoisonObjectsForStores (true) +#else +#define DEFAULT_CONFIG_MitigateSpectre (false) + +#define DEFAULT_CONFIG_AddMaskingBlocks (false) + +#define DEFAULT_CONFIG_PoisonVarArrayLoad (false) +#define DEFAULT_CONFIG_PoisonIntArrayLoad (false) +#define DEFAULT_CONFIG_PoisonFloatArrayLoad (false) +#define DEFAULT_CONFIG_PoisonTypedArrayLoad (false) +#define DEFAULT_CONFIG_PoisonStringLoad (false) +#define DEFAULT_CONFIG_PoisonObjectsForLoads (false) + +#define DEFAULT_CONFIG_PoisonVarArrayStore (false) +#define DEFAULT_CONFIG_PoisonIntArrayStore (false) +#define DEFAULT_CONFIG_PoisonFloatArrayStore (false) +#define DEFAULT_CONFIG_PoisonTypedArrayStore (false) +#define DEFAULT_CONFIG_PoisonStringStore (false) +#define DEFAULT_CONFIG_PoisonObjectsForStores (false) +#endif #ifdef RECYCLER_PAGE_HEAP #define DEFAULT_CONFIG_PageHeap ((Js::Number) PageHeapMode::PageHeapModeOff) @@ -559,6 +589,8 @@ PHASE(All) #define DEFAULT_CONFIG_RegexTracing (false) #define DEFAULT_CONFIG_RegexProfile (false) #define DEFAULT_CONFIG_RegexDebug (false) +#define DEFAULT_CONFIG_RegexDebugAST (true) +#define DEFAULT_CONFIG_RegexDebugAnnotatedAST (true) #define DEFAULT_CONFIG_RegexBytecodeDebug (false) #define DEFAULT_CONFIG_RegexOptimize (true) #define DEFAULT_CONFIG_DynamicRegexMruListSize (16) @@ -586,6 +618,7 @@ PHASE(All) #endif #define DEFAULT_CONFIG_JitRepro (false) #define DEFAULT_CONFIG_LdChakraLib (false) +#define DEFAULT_CONFIG_TestChakraLib (false) #define DEFAULT_CONFIG_EntryPointInfoRpcData (false) // ES6 DEFAULT BEHAVIOR @@ -595,20 +628,8 @@ PHASE(All) #define DEFAULT_CONFIG_CollectGarbage (false) // ES6 sub-feature gate - to enable-disable ES6 sub-feature when ES6 flag is enabled -#define DEFAULT_CONFIG_ES6Species (true) -#define DEFAULT_CONFIG_ES6Classes (true) #define DEFAULT_CONFIG_ES6DateParseFix (true) -#define DEFAULT_CONFIG_ES6DefaultArgs (true) -#define DEFAULT_CONFIG_ES6Destructuring (true) -#define DEFAULT_CONFIG_ES6ForLoopSemantics (true) - -#ifdef COMPILE_DISABLE_ES6FunctionNameFull - // If ES6FunctionNameFull needs to be disabled by compile flag, COMPILE_DISABLE_ES6FunctionNameFull should be false - #define DEFAULT_CONFIG_ES6FunctionNameFull (false) -#else - #define DEFAULT_CONFIG_ES6FunctionNameFull (false) -#endif - +#define DEFAULT_CONFIG_ES6FunctionNameFull (true) #define DEFAULT_CONFIG_ES6Generators (true) #define DEFAULT_CONFIG_ES6IsConcatSpreadable (true) #define DEFAULT_CONFIG_ES6Math (true) @@ -621,18 +642,22 @@ PHASE(All) #define DEFAULT_CONFIG_ES6Object (true) #define DEFAULT_CONFIG_ES6Number (true) #define DEFAULT_CONFIG_ES6ObjectLiterals (true) -#define DEFAULT_CONFIG_ES6Promise (true) #define DEFAULT_CONFIG_ES6Proxy (true) #define DEFAULT_CONFIG_ES6Rest (true) #define DEFAULT_CONFIG_ES6Spread (true) #define DEFAULT_CONFIG_ES6String (true) #define DEFAULT_CONFIG_ES6StringPrototypeFixes (true) +#define DEFAULT_CONFIG_ES2018ObjectRestSpread (true) + +#ifndef DEFAULT_CONFIG_ES6PrototypeChain #ifdef COMPILE_DISABLE_ES6PrototypeChain // If ES6PrototypeChain needs to be disabled by compile flag, DEFAULT_CONFIG_ES6PrototypeChain should be false #define DEFAULT_CONFIG_ES6PrototypeChain (false) #else - #define DEFAULT_CONFIG_ES6PrototypeChain (false) + #define DEFAULT_CONFIG_ES6PrototypeChain (true) +#endif #endif + #define DEFAULT_CONFIG_ES6ToPrimitive (true) #define DEFAULT_CONFIG_ES6ToLength (true) #define DEFAULT_CONFIG_ES6ToStringTag (true) @@ -640,6 +665,24 @@ PHASE(All) #define DEFAULT_CONFIG_ES6UnicodeVerbose (true) #define DEFAULT_CONFIG_ES6Unscopables (true) #define DEFAULT_CONFIG_ES6RegExSticky (true) +#define DEFAULT_CONFIG_ES2018RegExDotAll (true) +#define DEFAULT_CONFIG_ESBigInt (false) +#define DEFAULT_CONFIG_ESNumericSeparator (true) +#define DEFAULT_CONFIG_ESHashbang (true) +#define DEFAULT_CONFIG_ESSymbolDescription (true) +#define DEFAULT_CONFIG_ESArrayFindFromLast (true) +#define DEFAULT_CONFIG_ESPromiseAny (true) +#define DEFAULT_CONFIG_ESNullishCoalescingOperator (true) +#define DEFAULT_CONFIG_ESGlobalThis (true) + +// Jitting generator functions is not functional on ARM +// Also still contains significant bugs on x86/x64 hence disabled +#ifdef _M_ARM32_OR_ARM64 + #define DEFAULT_CONFIG_JitES6Generators (false) +#else + #define DEFAULT_CONFIG_JitES6Generators (false) +#endif + #ifdef COMPILE_DISABLE_ES6RegExPrototypeProperties // If ES6RegExPrototypeProperties needs to be disabled by compile flag, DEFAULT_CONFIG_ES6RegExPrototypeProperties should be false #define DEFAULT_CONFIG_ES6RegExPrototypeProperties (false) @@ -652,13 +695,16 @@ PHASE(All) #else #define DEFAULT_CONFIG_ES6RegExSymbols (false) #endif -#define DEFAULT_CONFIG_ES6HasInstance (true) #define DEFAULT_CONFIG_ES7AsyncAwait (true) #define DEFAULT_CONFIG_ES7ExponentionOperator (true) #define DEFAULT_CONFIG_ES7TrailingComma (true) #define DEFAULT_CONFIG_ES7ValuesEntries (true) #define DEFAULT_CONFIG_ESObjectGetOwnPropertyDescriptors (true) -#define DEFAULT_CONFIG_ESDynamicImport (false) +#define DEFAULT_CONFIG_ESDynamicImport (true) +#define DEFAULT_CONFIG_ESImportMeta (true) +#define DEFAULT_CONFIG_ESExportNsAs (true) +#define DEFAULT_CONFIG_ES2018AsyncIteration (true) +#define DEFAULT_CONFIG_ESTopLevelAwait (true) #define DEFAULT_CONFIG_ESSharedArrayBuffer (false) @@ -731,7 +777,6 @@ PHASE(All) #define DEFAULT_CONFIG_BigDictionaryTypeHandlerThreshold (0xffff) #define DEFAULT_CONFIG_ForceStringKeyedSimpleDictionaryTypeHandler (false) #define DEFAULT_CONFIG_TypeSnapshotEnumeration (true) -#define DEFAULT_CONFIG_EnumerationCompat (false) #define DEFAULT_CONFIG_ConcurrentRuntime (false) #define DEFAULT_CONFIG_PrimeRecycler (false) #if defined(_WIN32) @@ -750,8 +795,6 @@ PHASE(All) #define DEFAULT_CONFIG_ForceJITCFGCheck (false) #define DEFAULT_CONFIG_UseJITTrampoline (true) -#define DEFAULT_CONFIG_FailFastIfDisconnectedDelegate (false) - #define DEFAULT_CONFIG_IsolatePrototypes (true) #define DEFAULT_CONFIG_ChangeTypeOnProto (true) #define DEFAULT_CONFIG_FixPropsOnPathTypes (true) @@ -763,7 +806,7 @@ PHASE(All) #define DEFAULT_CONFIG_LibraryStackFrameDebugger (false) #define DEFAULT_CONFIG_FuncObjectInlineCacheThreshold (2) // Maximum number of inline caches a function body may have to allow for inline caches to be allocated on the function object. -#define DEFAULT_CONFIG_ShareInlineCaches (true) +#define DEFAULT_CONFIG_ShareInlineCaches (false) #define DEFAULT_CONFIG_InlineCacheInvalidationListCompactionThreshold (4) #define DEFAULT_CONFIG_ConstructorCacheInvalidationThreshold (500) @@ -775,15 +818,7 @@ PHASE(All) #define DEFAULT_CONFIG_InjectPartiallyInitializedInterpreterFrameError (0) #define DEFAULT_CONFIG_InjectPartiallyInitializedInterpreterFrameErrorType (0) -#define DEFAULT_CONFIG_InvalidateSolutionContextsForGetStructure (true) - #define DEFAULT_CONFIG_DeferLoadingAvailableSource (false) -#ifdef ENABLE_PROJECTION -#define DEFAULT_CONFIG_NoWinRTFastSig (false) -#define DEFAULT_CONFIG_TargetWinRTVersion (1) -#define DEFAULT_CONFIG_WinRTDelegateInterfaces (false) -#define DEFAULT_CONFIG_WinRTAdaptiveApps (true) -#endif #define DEFAULT_CONFIG_RecyclerForceMarkInterior (false) @@ -1017,6 +1052,7 @@ FLAGNR(Phases, DebugBreakOnPhaseBegin, "Break into debugger at the beginning of FLAGNR(Boolean, DebugWindow , "Send console output to debugger window", false) FLAGNR(Boolean, ParserStateCache , "Enable creation of parser state cache", DEFAULT_CONFIG_ParserStateCache) +FLAGNR(Boolean, CompressParserStateCache, "Enable compression of the parser state cache", DEFAULT_CONFIG_CompressParserStateCache) FLAGNR(Boolean, DeferTopLevelTillFirstCall , "Enable tracking of deferred top level functions in a script file, until the first function of the script context is parsed.", DEFAULT_CONFIG_DeferTopLevelTillFirstCall) FLAGNR(Number, DeferParse , "Minimum size of defer-parsed script (non-zero only: use /nodeferparse do disable", 0) FLAGNR(Boolean, DirectCallTelemetryStats, "Enables logging stats for direct call telemetry", DEFAULT_CONFIG_DirectCallTelemetryStats) @@ -1059,6 +1095,9 @@ FLAGR(Boolean, SkipSplitOnNoResult, "If the result of Regex split isn't used, sk #ifdef TEST_ETW_EVENTS FLAGNR(String, TestEtwDll , "Path of the TestEtwEventSink DLL", nullptr) #endif +#ifdef ENABLE_TEST_HOOKS +FLAGNR(Boolean, Force32BitByteCode, "Force CC to generate 32bit bytecode intended only for regenerating bytecode headers.", false) +#endif FLAGNR(Boolean, CollectGarbage , "Enable CollectGarbage API", DEFAULT_CONFIG_CollectGarbage) @@ -1071,6 +1110,8 @@ FLAGNR(Boolean, JitRepro , "Add Function.invokeJit to execute codeg FLAGNR(Boolean, EntryPointInfoRpcData , "Keep encoded rpc buffer for jitted function on EntryPointInfo until cleanup", DEFAULT_CONFIG_EntryPointInfoRpcData) FLAGNR(Boolean, LdChakraLib , "Access to the Chakra internal library with the __chakraLibrary keyword", DEFAULT_CONFIG_LdChakraLib) +FLAGNR(Boolean, TestChakraLib , "Access to the Chakra internal library with the __chakraLibrary keyword without global access restriction", DEFAULT_CONFIG_TestChakraLib) + // ES6 (BLUE+1) features/flags // Master ES6 flag to enable STABLE ES6 features/flags @@ -1084,20 +1125,9 @@ FLAGNRC(Boolean, ES6Experimental , "Enable all experimental features", // Per ES6 feature/flag -FLAGPR (Boolean, ES6, ES6Species , "Enable ES6 '@@species' properties and built-in behaviors" , DEFAULT_CONFIG_ES6Species) - FLAGPR (Boolean, ES6, ES7AsyncAwait , "Enable ES7 'async' and 'await' keywords" , DEFAULT_CONFIG_ES7AsyncAwait) -FLAGPR (Boolean, ES6, ES6Classes , "Enable ES6 'class' and 'extends' keywords" , DEFAULT_CONFIG_ES6Classes) FLAGPR (Boolean, ES6, ES6DateParseFix , "Enable ES6 Date.parse fixes" , DEFAULT_CONFIG_ES6DateParseFix) -FLAGPR (Boolean, ES6, ES6DefaultArgs , "Enable ES6 Default Arguments" , DEFAULT_CONFIG_ES6DefaultArgs) -FLAGPR (Boolean, ES6, ES6Destructuring , "Enable ES6 Destructuring" , DEFAULT_CONFIG_ES6Destructuring) -FLAGPR (Boolean, ES6, ES6ForLoopSemantics , "Enable ES6 for loop per iteration bindings" , DEFAULT_CONFIG_ES6ForLoopSemantics) - -#ifndef COMPILE_DISABLE_ES6FunctionNameFull - #define COMPILE_DISABLE_ES6FunctionNameFull 0 -#endif -FLAGPR_REGOVR_EXP(Boolean, ES6, ES6FunctionNameFull , "Enable ES6 Full function.name" , DEFAULT_CONFIG_ES6FunctionNameFull) - +FLAGPR (Boolean, ES6, ES6FunctionNameFull , "Enable ES6 Full function.name" , DEFAULT_CONFIG_ES6FunctionNameFull) FLAGPR (Boolean, ES6, ES6Generators , "Enable ES6 generators" , DEFAULT_CONFIG_ES6Generators) FLAGPR (Boolean, ES6, ES7ExponentiationOperator, "Enable ES7 exponentiation operator (**)" , DEFAULT_CONFIG_ES7ExponentionOperator) @@ -1115,17 +1145,14 @@ FLAGPR (Boolean, ES6, ES6Module , "Enable ES6 Modules" FLAGPR (Boolean, ES6, ES6Object , "Enable ES6 Object extensions" , DEFAULT_CONFIG_ES6Object) FLAGPR (Boolean, ES6, ES6Number , "Enable ES6 Number extensions" , DEFAULT_CONFIG_ES6Number) FLAGPR (Boolean, ES6, ES6ObjectLiterals , "Enable ES6 Object literal extensions" , DEFAULT_CONFIG_ES6ObjectLiterals) -FLAGPR (Boolean, ES6, ES6Promise , "Enable ES6 Promise feature" , DEFAULT_CONFIG_ES6Promise) FLAGPR (Boolean, ES6, ES6Proxy , "Enable ES6 Proxy feature" , DEFAULT_CONFIG_ES6Proxy) FLAGPR (Boolean, ES6, ES6Rest , "Enable ES6 Rest parameters" , DEFAULT_CONFIG_ES6Rest) FLAGPR (Boolean, ES6, ES6Spread , "Enable ES6 Spread support" , DEFAULT_CONFIG_ES6Spread) FLAGPR (Boolean, ES6, ES6String , "Enable ES6 String extensions" , DEFAULT_CONFIG_ES6String) FLAGPR (Boolean, ES6, ES6StringPrototypeFixes, "Enable ES6 String.prototype fixes" , DEFAULT_CONFIG_ES6StringPrototypeFixes) +FLAGPR (Boolean, ES6, ES2018ObjectRestSpread , "Enable ES2018 Object Rest/Spread" , DEFAULT_CONFIG_ES2018ObjectRestSpread) -#ifndef COMPILE_DISABLE_ES6PrototypeChain - #define COMPILE_DISABLE_ES6PrototypeChain 0 -#endif -FLAGPR_REGOVR_EXP(Boolean, ES6, ES6PrototypeChain , "Enable ES6 prototypes (Example: Date prototype is object)", DEFAULT_CONFIG_ES6PrototypeChain) +FLAGPR (Boolean, ES6, ES6PrototypeChain , "Enable ES6 prototypes (Example: Date prototype is object)", DEFAULT_CONFIG_ES6PrototypeChain) FLAGPR (Boolean, ES6, ES6ToPrimitive , "Enable ES6 ToPrimitive symbol" , DEFAULT_CONFIG_ES6ToPrimitive) FLAGPR (Boolean, ES6, ES6ToLength , "Enable ES6 ToLength fixes" , DEFAULT_CONFIG_ES6ToLength) FLAGPR (Boolean, ES6, ES6ToStringTag , "Enable ES6 ToStringTag symbol" , DEFAULT_CONFIG_ES6ToStringTag) @@ -1133,6 +1160,10 @@ FLAGPR (Boolean, ES6, ES6Unicode , "Enable ES6 Unicode 6.0 FLAGPR (Boolean, ES6, ES6UnicodeVerbose , "Enable ES6 Unicode 6.0 verbose failure output" , DEFAULT_CONFIG_ES6UnicodeVerbose) FLAGPR (Boolean, ES6, ES6Unscopables , "Enable ES6 With Statement Unscopables" , DEFAULT_CONFIG_ES6Unscopables) FLAGPR (Boolean, ES6, ES6RegExSticky , "Enable ES6 RegEx sticky flag" , DEFAULT_CONFIG_ES6RegExSticky) +FLAGPR (Boolean, ES6, ES2018RegExDotAll , "Enable ES2018 RegEx dotAll flag" , DEFAULT_CONFIG_ES2018RegExDotAll) +FLAGPR (Boolean, ES6, ESExportNsAs , "Enable ES experimental export * as name" , DEFAULT_CONFIG_ESExportNsAs) +FLAGPR (Boolean, ES6, ES2018AsyncIteration , "Enable ES2018 Async Iteration" , DEFAULT_CONFIG_ES2018AsyncIteration) +FLAGPR (Boolean, ES6, ESTopLevelAwait , "Enable Top Level Await in modules" , DEFAULT_CONFIG_ESTopLevelAwait) #ifndef COMPILE_DISABLE_ES6RegExPrototypeProperties #define COMPILE_DISABLE_ES6RegExPrototypeProperties 0 @@ -1148,7 +1179,6 @@ FLAGPR_REGOVR_EXP(Boolean, ES6, ES6RegExPrototypeProperties, "Enable ES6 propert // Also, the corresponding helpers in JnHelperMethodList.h should be marked as being reentrant FLAGPR_REGOVR_EXP(Boolean, ES6, ES6RegExSymbols , "Enable ES6 RegExp symbols" , DEFAULT_CONFIG_ES6RegExSymbols) -FLAGPR (Boolean, ES6, ES6HasInstance , "Enable ES6 @@hasInstance symbol" , DEFAULT_CONFIG_ES6HasInstance) FLAGPR (Boolean, ES6, ES6Verbose , "Enable ES6 verbose trace" , DEFAULT_CONFIG_ES6Verbose) FLAGPR (Boolean, ES6, ESObjectGetOwnPropertyDescriptors, "Enable Object.getOwnPropertyDescriptors" , DEFAULT_CONFIG_ESObjectGetOwnPropertyDescriptors) @@ -1158,24 +1188,43 @@ FLAGPR (Boolean, ES6, ESObjectGetOwnPropertyDescriptors, "Enable Objec FLAGPR_REGOVR_EXP(Boolean, ES6, ESSharedArrayBuffer , "Enable SharedArrayBuffer" , DEFAULT_CONFIG_ESSharedArrayBuffer) -// /ES6 (BLUE+1) features/flags +// Newer language feature flags +// ES BigInt flag +FLAGR(Boolean, ESBigInt, "Enable ESBigInt flag", DEFAULT_CONFIG_ESBigInt) +// ES Numeric Separator support for numeric constants +FLAGR(Boolean, ESNumericSeparator, "Enable Numeric Separator flag", DEFAULT_CONFIG_ESNumericSeparator) -#ifdef ENABLE_PROJECTION -FLAGNR(Boolean, WinRTDelegateInterfaces , "Treat WinRT Delegates as Interfaces when determining their resolvability.", DEFAULT_CONFIG_WinRTDelegateInterfaces) -FLAGR(Boolean, WinRTAdaptiveApps , "Enable the adaptive apps feature, allowing for variable projection." , DEFAULT_CONFIG_WinRTAdaptiveApps) -#endif +// ES Nullish coalescing operator support (??) +FLAGR(Boolean, ESNullishCoalescingOperator, "Enable nullish coalescing operator", DEFAULT_CONFIG_ESNullishCoalescingOperator) + +// ES Hashbang support for interpreter directive syntax +FLAGR(Boolean, ESHashbang, "Enable Hashbang syntax", DEFAULT_CONFIG_ESHashbang) + +// ES Symbol.prototype.description flag +FLAGR(Boolean, ESSymbolDescription, "Enable Symbol.prototype.description", DEFAULT_CONFIG_ESSymbolDescription) + +FLAGR(Boolean, ESArrayFindFromLast, "Enable findLast, findLastIndex for Array.prototype and TypedArray.prorotype", DEFAULT_CONFIG_ESArrayFindFromLast) + +// ES Promise.any and AggregateError flag +FLAGR(Boolean, ESPromiseAny, "Enable Promise.any and AggregateError", DEFAULT_CONFIG_ESPromiseAny) + +// ES import.meta keyword meta-property +FLAGR(Boolean, ESImportMeta, "Enable import.meta keyword", DEFAULT_CONFIG_ESImportMeta) + +//ES globalThis flag +FLAGR(Boolean, ESGlobalThis, "Enable globalThis", DEFAULT_CONFIG_ESGlobalThis) // This flag to be removed once JITing generator functions is stable -FLAGNR(Boolean, JitES6Generators , "Enable JITing of ES6 generators", false) +FLAGNR(Boolean, JitES6Generators , "Enable JITing of ES6 generators", DEFAULT_CONFIG_JitES6Generators) FLAGNR(Boolean, FastLineColumnCalculation, "Enable fast calculation of line/column numbers from the source.", DEFAULT_CONFIG_FastLineColumnCalculation) FLAGR (String, Filename , "Jscript source file", nullptr) FLAGNR(Boolean, FreeRejittedCode , "Free rejitted code", true) FLAGNR(Boolean, ForceGuardPages , "Force the addition of guard pages", false) FLAGNR(Boolean, PrintGuardPageBounds , "Prints the bounds of a guard page", false) -FLAGNR(Boolean, ForceLegacyEngine , "Force a jscrip9 dll load", false) +FLAGNR(Boolean, ForceLegacyEngine , "Force a jscript9 dll load", false) FLAGNR(Phases, Force , "Force certain phase to run ignoring heuristics", ) FLAGNR(Phases, Stress , "Stress certain phases by making them kick in even if they normally would not.", ) FLAGNR(Boolean, ForceArrayBTree , "Force enable creation of BTree for Arrays", false) @@ -1190,7 +1239,6 @@ FLAGNR(Boolean, ForceGetWriteWatchOOM , "Force GetWriteWatch to go into OOM code FLAGNR(Boolean, ForcePostLowerGlobOptInstrString, "Force tracking of globopt instr string post lower", DEFAULT_CONFIG_ForcePostLowerGlobOptInstrString) FLAGNR(Boolean, ForceSplitScope , "All functions will have unmerged body and param scopes", DEFAULT_CONFIG_ForceSplitScope) FLAGNR(Boolean, EnumerateSpecialPropertiesInDebugger, "Enable enumeration of special debug properties", DEFAULT_CONFIG_EnumerateSpecialPropertiesInDebugger) -FLAGNR(Boolean, EnableJitInDiagMode , "Enable Fast F12 (only applicable with ForceDiagnosticsMode or while under debugger)", DEFAULT_CONFIG_EnableJitInDiagMode) FLAGNR(Boolean, EnableContinueAfterExceptionWrappersForHelpers, "Enable wrapper over helper methods in debugger, Fast F12 only", DEFAULT_CONFIG_EnableContinueAfterExceptionWrappersForHelpers) FLAGNR(Boolean, EnableContinueAfterExceptionWrappersForBuiltIns, "Enable wrapper over library calls in debugger, Fast F12 only", DEFAULT_CONFIG_EnableContinueAfterExceptionWrappersForBuiltIns) FLAGNR(Boolean, EnableFunctionSourceReportForHeapEnum, "During HeapEnum, whether to report function source info (url/row/col)", DEFAULT_CONFIG_EnableFunctionSourceReportForHeapEnum) @@ -1295,6 +1343,8 @@ FLAGNR(Boolean, ForceMaxJitThreadCount, "Force the number of parallel jit thread FLAGR(Boolean, MitigateSpectre, "Use mitigations for Spectre", DEFAULT_CONFIG_MitigateSpectre) +FLAGPR(Boolean, MitigateSpectre, AddMaskingBlocks, "Optimize Spectre mitigations by masking on loop out edges", DEFAULT_CONFIG_AddMaskingBlocks) + FLAGPR(Boolean, MitigateSpectre, PoisonVarArrayLoad, "Poison loads from Var arrays", DEFAULT_CONFIG_PoisonVarArrayLoad) FLAGPR(Boolean, MitigateSpectre, PoisonIntArrayLoad, "Poison loads from Int arrays", DEFAULT_CONFIG_PoisonIntArrayLoad) FLAGPR(Boolean, MitigateSpectre, PoisonFloatArrayLoad, "Poison loads from Float arrays", DEFAULT_CONFIG_PoisonFloatArrayLoad) @@ -1366,9 +1416,6 @@ FLAGR (Boolean, NoNative , "Disable native codegen", false) FLAGNR(Number, NopFrequency , "Frequency of NOPs inserted by NOP insertion phase. A NOP is guaranteed to be inserted within a range of (1< { IsTrue = true }; -}; \ No newline at end of file +}; diff --git a/lib/Common/Core/CommonTypedefs.h b/lib/Common/Core/CommonTypedefs.h index df1f797a73f..0a0870e09a1 100644 --- a/lib/Common/Core/CommonTypedefs.h +++ b/lib/Common/Core/CommonTypedefs.h @@ -61,3 +61,6 @@ namespace Js { typedef uint32 LocalFunctionId; }; + +// digit_t represents a digit in bigint underline +typedef uintptr_t digit_t; diff --git a/lib/Common/Core/ConfigFlagsTable.cpp b/lib/Common/Core/ConfigFlagsTable.cpp index acccc1d17bb..e588eaa0e8a 100644 --- a/lib/Common/Core/ConfigFlagsTable.cpp +++ b/lib/Common/Core/ConfigFlagsTable.cpp @@ -1264,11 +1264,6 @@ namespace Js { } - bool Configuration::EnableJitInDebugMode() - { - return CONFIG_FLAG(EnableJitInDiagMode); - } - Configuration Configuration::Global; diff --git a/lib/Common/Core/ConfigFlagsTable.h b/lib/Common/Core/ConfigFlagsTable.h index 572b245d1d0..7e9b5cec544 100644 --- a/lib/Common/Core/ConfigFlagsTable.h +++ b/lib/Common/Core/ConfigFlagsTable.h @@ -30,17 +30,6 @@ namespace Js FlagNumberRange }; - // Shadow of enum SCRIPTHOSTTYPE defined in activscp.idl. - enum HostType - { - HostTypeDefault = 0, // Used to detect engines with uninitialized host type. - HostTypeBrowser = 1, // Currently this implies enabled legacy language features, use it for IE. - HostTypeApplication = 2, // Currently this implies legacy-free language features, use it for WWA. - HostTypeWebview = 3, // Webview in a WWA/XAML app with WinRT access. - HostTypeMin = HostTypeBrowser, - HostTypeMax = HostTypeWebview - }; - ///---------------------------------------------------------------------------- ///---------------------------------------------------------------------------- /// @@ -567,7 +556,6 @@ namespace Js public: ConfigFlagsTable flags; static Configuration Global; - bool EnableJitInDebugMode(); // Public in case the client wants to have // a separate config from the global one diff --git a/lib/Common/Core/ConfigParser.cpp b/lib/Common/Core/ConfigParser.cpp index 6f0700941b5..95477ce0550 100644 --- a/lib/Common/Core/ConfigParser.cpp +++ b/lib/Common/Core/ConfigParser.cpp @@ -238,42 +238,6 @@ void ConfigParser::ParseRegistryKey(HKEY hk, CmdLineArgsParser &parser) } } - // EnumerationCompat - // This setting allows disabling a couple of changes to enumeration: - // - A change that causes deleted property indexes to be reused for new properties, thereby changing the order in which - // properties are enumerated - // - A change that creates a true snapshot of the type just before enumeration, and enumerating only those properties. A - // property that was deleted before enumeration and is added back during enumeration will not be enumerated. - // Values: - // 0 - Default - // 1 - Compatibility mode for enumeration order (disable changes described above) - // This FCK does not apply to WWAs. WWAs should use the RC compat mode to disable these changes. - dwValue = 0; - dwSize = sizeof(dwValue); - if (NOERROR == RegGetValueW(hk, nullptr, _u("EnumerationCompat"), RRF_RT_DWORD, nullptr, (LPBYTE)&dwValue, &dwSize)) - { - if (dwValue == 1) - { - Js::Configuration::Global.flags.EnumerationCompat = true; - } - } - -#ifdef ENABLE_PROJECTION - // FailFastIfDisconnectedDelegate - // This setting allows enabling fail fast if the delegate invoked is disconnected - // 0 - Default return the error RPC_E_DISCONNECTED if disconnected delegate is invoked - // 1 - Fail fast if disconnected delegate - dwValue = 0; - dwSize = sizeof(dwValue); - if (NOERROR == RegGetValueW(hk, nullptr, _u("FailFastIfDisconnectedDelegate"), RRF_RT_DWORD, nullptr, (LPBYTE)&dwValue, &dwSize)) - { - if (dwValue == 1) - { - Js::Configuration::Global.flags.FailFastIfDisconnectedDelegate = true; - } - } -#endif - // ES6 feature control // This setting allows enabling\disabling es6 features // 0 - Enable ES6 flag - Also default behavior @@ -579,32 +543,33 @@ void ConfigParser::ProcessConfiguration(HANDLE hmod) FILE *fp; // fail usually means there is an existing console. We don't really care. - AllocConsole(); - - fd = _open_osfhandle((intptr_t)GetStdHandle(STD_OUTPUT_HANDLE), O_TEXT); - fp = _wfdopen(fd, _u("w")); - - if (fp != nullptr) + if (AllocConsole()) { - *stdout = *fp; - setvbuf(stdout, nullptr, _IONBF, 0); - - fd = _open_osfhandle((intptr_t)GetStdHandle(STD_ERROR_HANDLE), O_TEXT); + fd = _open_osfhandle((intptr_t)GetStdHandle(STD_OUTPUT_HANDLE), O_TEXT); fp = _wfdopen(fd, _u("w")); if (fp != nullptr) { - *stderr = *fp; - setvbuf(stderr, nullptr, _IONBF, 0); + *stdout = *fp; + setvbuf(stdout, nullptr, _IONBF, 0); - char16 buffer[_MAX_PATH + 70]; + fd = _open_osfhandle((intptr_t)GetStdHandle(STD_ERROR_HANDLE), O_TEXT); + fp = _wfdopen(fd, _u("w")); - if (ConfigParserAPI::FillConsoleTitle(buffer, _MAX_PATH + 20, modulename)) + if (fp != nullptr) { - SetConsoleTitle(buffer); - } + *stderr = *fp; + setvbuf(stderr, nullptr, _IONBF, 0); - hasOutput = true; + char16 buffer[_MAX_PATH + 70]; + + if (ConfigParserAPI::FillConsoleTitle(buffer, _MAX_PATH + 20, modulename)) + { + SetConsoleTitle(buffer); + } + + hasOutput = true; + } } } } diff --git a/lib/Common/Core/ConfigParser.h b/lib/Common/Core/ConfigParser.h index abbafa9601a..136c0c42792 100644 --- a/lib/Common/Core/ConfigParser.h +++ b/lib/Common/Core/ConfigParser.h @@ -40,8 +40,8 @@ class ConfigParser void ParseRegistryKey(HKEY hk, CmdLineArgsParser &parser); #ifdef _WIN32 - static void ConfigParser::SetConfigStringFromRegistry(_In_ HKEY hk, _In_z_ const char16* subKeyName, _In_z_ const char16* valName, _Inout_ Js::String& str); - static void ConfigParser::ReadRegistryString(_In_ HKEY hk, _In_z_ const char16* subKeyName, _In_z_ const char16* valName, _Outptr_result_maybenull_z_ const char16** sz, _Out_ DWORD* length); + static void SetConfigStringFromRegistry(_In_ HKEY hk, _In_z_ const char16* subKeyName, _In_z_ const char16* valName, _Inout_ Js::String& str); + static void ReadRegistryString(_In_ HKEY hk, _In_z_ const char16* subKeyName, _In_z_ const char16* valName, _Outptr_result_maybenull_z_ const char16** sz, _Out_ DWORD* length); #endif public: diff --git a/lib/Common/Core/DelayLoadLibrary.cpp b/lib/Common/Core/DelayLoadLibrary.cpp index f2557ca69d0..f3741863e18 100644 --- a/lib/Common/Core/DelayLoadLibrary.cpp +++ b/lib/Common/Core/DelayLoadLibrary.cpp @@ -392,4 +392,41 @@ NtdllLibrary::NTSTATUS NtdllLibrary::UnlockVirtualMemory( #endif } +static RPCLibrary RPCLibraryObject; +RPCLibrary* RPCLibrary::Instance = &RPCLibraryObject; + +LPCTSTR RPCLibrary::GetLibraryName() const +{ + return _u("rpcrt4.dll"); +} + +RPC_STATUS RPCLibrary::RpcServerRegisterIf3( + _In_ RPC_IF_HANDLE IfSpec, + _In_opt_ UUID* MgrTypeUuid, + _In_opt_ RPC_MGR_EPV* MgrEpv, + _In_ unsigned int Flags, + _In_ unsigned int MaxCalls, + _In_ unsigned int MaxRpcSize, + _In_opt_ RPC_IF_CALLBACK_FN* IfCallback, + _In_opt_ void* SecurityDescriptor) +{ +#if !(NTDDI_VERSION >= NTDDI_WIN8) + if (m_hModule) + { + if (serverRegister == nullptr) + { + serverRegister = (PFnRpcServerRegisterIf3)GetFunction("RpcServerRegisterIf3"); + if (serverRegister == nullptr) + { + Assert(false); + return -1; + } + } + return serverRegister(IfSpec, MgrTypeUuid, MgrEpv, Flags, MaxCalls, MaxRpcSize, IfCallback, SecurityDescriptor); + } + return -1; +#else + return ::RpcServerRegisterIf3(IfSpec, MgrTypeUuid, MgrEpv, Flags, MaxCalls, MaxRpcSize, IfCallback, SecurityDescriptor); +#endif +} #endif // _WIN32 diff --git a/lib/Common/Core/DelayLoadLibrary.h b/lib/Common/Core/DelayLoadLibrary.h index 152fead8047..c452289f67f 100644 --- a/lib/Common/Core/DelayLoadLibrary.h +++ b/lib/Common/Core/DelayLoadLibrary.h @@ -222,4 +222,45 @@ class NtdllLibrary : protected DelayLoadLibrary _In_ ULONG MapType ); }; + +// This needs to be delay loaded because RpcServerRegisterIf3 is available only +// on Win8+ +class RPCLibrary : protected DelayLoadLibrary +{ +private: + typedef RPC_STATUS(NTAPI* PFnRpcServerRegisterIf3)( + _In_ RPC_IF_HANDLE IfSpec, + _In_opt_ UUID* MgrTypeUuid, + _In_opt_ RPC_MGR_EPV* MgrEpv, + _In_ unsigned int Flags, + _In_ unsigned int MaxCalls, + _In_ unsigned int MaxRpcSize, + _In_opt_ RPC_IF_CALLBACK_FN* IfCallback, + _In_opt_ void* SecurityDescriptor); + + PFnRpcServerRegisterIf3 serverRegister; + +public: + static RPCLibrary* Instance; + + RPCLibrary() : DelayLoadLibrary(), + serverRegister(nullptr) + { + this->EnsureFromSystemDirOnly(); + } + + LPCTSTR GetLibraryName() const; + + RPC_STATUS RpcServerRegisterIf3( + _In_ RPC_IF_HANDLE IfSpec, + _In_opt_ UUID* MgrTypeUuid, + _In_opt_ RPC_MGR_EPV* MgrEpv, + _In_ unsigned int Flags, + _In_ unsigned int MaxCalls, + _In_ unsigned int MaxRpcSize, + _In_opt_ RPC_IF_CALLBACK_FN* IfCallback, + _In_opt_ void* SecurityDescriptor + ); +}; + #endif diff --git a/lib/Common/Core/EtwTraceCore.h b/lib/Common/Core/EtwTraceCore.h index f50f84cd985..eed362b83ba 100644 --- a/lib/Common/Core/EtwTraceCore.h +++ b/lib/Common/Core/EtwTraceCore.h @@ -78,7 +78,7 @@ CompileAssert(false) #pragma prefast(push) #pragma prefast(disable:__WARNING_USING_UNINIT_VAR, "The ETW data generated from the manifest includes a default null function which uses unintialized memory.") -#include +#include #ifdef NTBUILD #include #include diff --git a/lib/Common/Core/FaultInjection.cpp b/lib/Common/Core/FaultInjection.cpp index 216e89974cd..b1fcd124130 100644 --- a/lib/Common/Core/FaultInjection.cpp +++ b/lib/Common/Core/FaultInjection.cpp @@ -117,7 +117,6 @@ namespace Js _In_opt_ const CONTEXT* pCtx = nullptr) { CONTEXT Context; - KNONVOLATILE_CONTEXT_POINTERS NvContext; UNWIND_HISTORY_TABLE UnwindHistoryTable; PRUNTIME_FUNCTION RuntimeFunction; PVOID HandlerData; @@ -141,7 +140,7 @@ namespace Js while (true) { RuntimeFunction = RtlLookupFunctionEntry(Context.Rip, &ImageBase, &UnwindHistoryTable); - RtlZeroMemory(&NvContext, sizeof(KNONVOLATILE_CONTEXT_POINTERS)); + if (!RuntimeFunction) { Context.Rip = (ULONG64)(*(PULONG64)Context.Rsp); @@ -150,7 +149,7 @@ namespace Js else { RtlVirtualUnwind(UNW_FLAG_NHANDLER, ImageBase, Context.Rip, RuntimeFunction, - &Context, &HandlerData, &EstablisherFrame, &NvContext); + &Context, &HandlerData, &EstablisherFrame, NULL /* ContextPointers */); } if (!Context.Rip) diff --git a/lib/Common/Core/Output.cpp b/lib/Common/Core/Output.cpp index c6766fd8922..d3ce70255ff 100644 --- a/lib/Common/Core/Output.cpp +++ b/lib/Common/Core/Output.cpp @@ -46,6 +46,11 @@ THREAD_ST WORD Output::s_color = 0; THREAD_ST bool Output::s_hasColor = false; THREAD_ST bool Output::s_capture = false; +THREAD_ST bool Output::hasDoneAlignPrefixForThisLine = false; +THREAD_ST bool Output::usingCustomAlignAndPrefix = false; +THREAD_ST size_t Output::align = 0; +THREAD_ST const char16* Output::prefix = nullptr; + #define MAX_OUTPUT_BUFFER_SIZE 10 * 1024 * 1024 // 10 MB maximum before we force a flush size_t __cdecl @@ -282,6 +287,86 @@ Output::VPrint(const char16 *form, va_list argptr) size_t __cdecl Output::PrintBuffer(const char16 * buf, size_t size) { + // Handle custom line prefixing + bool internallyAllocatedBuffer = false; + if (usingCustomAlignAndPrefix) + { + if (hasDoneAlignPrefixForThisLine && wcschr(buf, '\n') == nullptr) + { + // no newlines, and we've already prefixed this line, so nothing to do + } + else + { + size_t newbufsize = size + align; + char16* newbuf = (char16*)calloc(newbufsize, sizeof(char16)); + AssertOrFailFastMsg(newbuf != nullptr, "Ran out of memory while printing output"); + internallyAllocatedBuffer = true; + const char16* currentReadIndex = buf; + char16* currentWriteIndex = newbuf; + auto ensureSpace = [¤tWriteIndex, &newbuf, &newbufsize](size_t numCharsWantToWrite) + { + size_t charsWritten = (currentWriteIndex - newbuf); // pointer subtraction is number of elements of pointed type between pointers + size_t remaining = newbufsize - charsWritten; + if (numCharsWantToWrite + 1 > remaining) + { + char16* tempbuf = (char16*)realloc(newbuf, newbufsize * sizeof(char16) * 2); + AssertOrFailFastMsg(tempbuf != nullptr, "Ran out of memory while printing output"); + newbuf = tempbuf; + newbufsize = newbufsize * 2; + currentWriteIndex = newbuf + charsWritten; + } + }; + const size_t prefixlength = wcslen(prefix); + size_t oldS_Column = Output::s_Column; + while (currentReadIndex < buf + size) + { + if (!hasDoneAlignPrefixForThisLine) + { + // attempt to write the alignment + { + unsigned int alignspacesneeded = 1; // always put at least one space + if (oldS_Column < align) + { + alignspacesneeded = (unsigned int)(align - oldS_Column); + } + ensureSpace(alignspacesneeded); + for (unsigned int i = 0; i < alignspacesneeded; i++) + { + *(currentWriteIndex++) = ' '; + } + } + // attempt to write the prefix + ensureSpace(prefixlength); + js_wmemcpy_s(currentWriteIndex, (newbuf + newbufsize) - currentWriteIndex, Output::prefix, prefixlength); + currentWriteIndex += prefixlength; + oldS_Column = align + prefixlength; + hasDoneAlignPrefixForThisLine = true; + } + const char16* endOfLine = wcschr(currentReadIndex, '\n'); + size_t charsToCopy = 0; + if (endOfLine != nullptr) + { + charsToCopy = (endOfLine - currentReadIndex) + 1; // We want to grab the newline character as part of this line + oldS_Column = 0; // We're ending this line, and want the next to be calculated properly + hasDoneAlignPrefixForThisLine = false; // The next line will need this + } + else + { + charsToCopy = (buf + size) - currentReadIndex; // the rest of the input buffer + oldS_Column += charsToCopy; // Will be reset anyway later on + } + ensureSpace(endOfLine - currentReadIndex); + js_wmemcpy_s(currentWriteIndex, (newbuf + newbufsize) - currentWriteIndex, currentReadIndex, charsToCopy); + currentReadIndex += charsToCopy; + currentWriteIndex += charsToCopy; + } + // null terminate becuase there's no real reason not to + ensureSpace(1); + *(currentWriteIndex++) = '\0'; + buf = newbuf; + size = (currentWriteIndex - newbuf) - 1; // not counting the terminator here though, to align with vsnwprintf_s's behavior + } + } Output::s_Column += size; const char16 * endbuf = wcschr(buf, '\n'); while (endbuf != nullptr) @@ -443,7 +528,19 @@ void Output::DirectPrint(char16 const * string) void Output::SkipToColumn(size_t column) { - if (column <= Output::s_Column) + size_t columnbias = 0; + // If we're using a custom alignment and prefix, we want to do this relative to that + if (usingCustomAlignAndPrefix) + { + // If we've already added the alignment and prefix, we need to add the alignment to our column number here + columnbias = align + wcslen(prefix); + } + size_t reference = 0; + if (Output::s_Column > columnbias) + { + reference = Output::s_Column - columnbias; + } + if (column <= reference) { Output::Print(_u(" ")); return; @@ -451,7 +548,7 @@ Output::SkipToColumn(size_t column) // compute distance to our destination - size_t dist = column - Output::s_Column; + size_t dist = column - reference; // Print at least one space while (dist > 0) @@ -564,3 +661,20 @@ Output::CaptureEnd() return returnBuffer; } + +void +Output::SetAlignAndPrefix(unsigned int align, const char16 *prefix) +{ + Output::hasDoneAlignPrefixForThisLine = false; + Output::usingCustomAlignAndPrefix = true; + Output::prefix = prefix; + Output::align = align; +} +void +Output::ResetAlignAndPrefix() +{ + Output::hasDoneAlignPrefixForThisLine = false; + Output::usingCustomAlignAndPrefix = false; + Output::prefix = nullptr; + Output::align = 0; +} diff --git a/lib/Common/Core/Output.h b/lib/Common/Core/Output.h index 1af3fbeed4d..3ee4f0f491c 100644 --- a/lib/Common/Core/Output.h +++ b/lib/Common/Core/Output.h @@ -114,7 +114,10 @@ class Output static WORD SetConsoleForeground(WORD color); static void CaptureStart(); - static char16* CaptureEnd(); + static char16* CaptureEnd(); + + static void SetAlignAndPrefix(unsigned int align, const char16 *prefix); + static void ResetAlignAndPrefix(); private: static void DirectPrint(const char16 * string); @@ -134,6 +137,11 @@ class Output #define THREAD_ST THREAD_LOCAL + THREAD_ST static bool hasDoneAlignPrefixForThisLine; + THREAD_ST static bool usingCustomAlignAndPrefix; + THREAD_ST static const char16* prefix; + THREAD_ST static size_t align; + THREAD_ST static bool s_capture; THREAD_ST static FILE * s_file; #ifdef _WIN32 diff --git a/lib/Common/Core/PerfCounter.h b/lib/Common/Core/PerfCounter.h index c7b8c966c81..da77ea016f9 100644 --- a/lib/Common/Core/PerfCounter.h +++ b/lib/Common/Core/PerfCounter.h @@ -123,7 +123,6 @@ namespace PerfCounter MACRO(FrameDisplay); \ MACRO(CompoundString); \ MACRO(RecyclerWeakReferenceBase); \ - MACRO(ProjectionObjectInstance); \ #define RECYCLER_TRACKER_ARRAY_PERF_COUNTER_TYPE(MACRO) \ MACRO(Var); \ diff --git a/lib/Common/Core/SysInfo.cpp b/lib/Common/Core/SysInfo.cpp index 920002fe75f..af33b449204 100644 --- a/lib/Common/Core/SysInfo.cpp +++ b/lib/Common/Core/SysInfo.cpp @@ -85,6 +85,7 @@ AutoSystemInfo::Initialize() allocationGranularityPageCount = dwAllocationGranularity / dwPageSize; isWindows8OrGreater = IsWindows8OrGreater(); + isWindows8Point1OrGreater = IsWindows8Point1OrGreater(); binaryName[0] = _u('\0'); @@ -363,14 +364,28 @@ AutoSystemInfo::CheckForAtom() const bool AutoSystemInfo::IsWin8OrLater() { +#if defined(WINVER) && WINVER >= _WIN32_WINNT_WIN8 + return true; +#else return isWindows8OrGreater; +#endif +} + +bool +AutoSystemInfo::IsWin8Point1OrLater() +{ +#if defined(WINVER) && WINVER >= _WIN32_WINNT_WINBLUE + return true; +#else + return isWindows8Point1OrGreater; +#endif } #if defined(_CONTROL_FLOW_GUARD) bool AutoSystemInfo::IsWinThresholdOrLater() { -#if defined(_M_ARM64) +#if defined(_M_ARM64) || (defined(WINVER) && WINVER >= _WIN32_WINNT_WIN10) return true; #else return IsWindowsThresholdOrGreater(); diff --git a/lib/Common/Core/SysInfo.h b/lib/Common/Core/SysInfo.h index 5f20519088c..6b925f537c0 100644 --- a/lib/Common/Core/SysInfo.h +++ b/lib/Common/Core/SysInfo.h @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------- @@ -16,6 +17,7 @@ class AutoSystemInfo : public SYSTEM_INFO bool DisableDebugScopeCapture() const { return this->disableDebugScopeCapture; } bool IsWin8OrLater(); + bool IsWin8Point1OrLater(); #if defined(_CONTROL_FLOW_GUARD) bool IsWinThresholdOrLater(); #endif @@ -61,7 +63,11 @@ class AutoSystemInfo : public SYSTEM_INFO #ifdef _WIN32 static HMODULE GetCRTHandle(); #endif +#if defined(__APPLE__) && defined(_M_ARM64) + static DWORD const PageSize = 16384; +#else static DWORD const PageSize = 4096; +#endif static size_t const MaxPageCount = SIZE_MAX / PageSize; @@ -88,6 +94,7 @@ class AutoSystemInfo : public SYSTEM_INFO AutoSystemInfo() : majorVersion(0), minorVersion(0), buildDateHash(0), buildTimeHash(0), crtSize(0) { Initialize(); } void Initialize(); bool isWindows8OrGreater; + bool isWindows8Point1OrGreater; uint allocationGranularityPageCount; HANDLE processHandle; DWORD crtSize; @@ -134,7 +141,12 @@ class AutoSystemInfo : public SYSTEM_INFO // For Prefast where it doesn't like symbolic constants +#if defined(__APPLE__) && defined(_M_ARM64) +CompileAssert(AutoSystemInfo::PageSize == 16384); +#define __in_ecount_pagesize __in_ecount(16384) +#define __in_ecount_twopagesize __in_ecount(32768) +#else CompileAssert(AutoSystemInfo::PageSize == 4096); #define __in_ecount_pagesize __in_ecount(4096) #define __in_ecount_twopagesize __in_ecount(8192) - +#endif diff --git a/lib/Common/DataStructures/BaseDictionary.h b/lib/Common/DataStructures/BaseDictionary.h index 5381bbacf60..484cdaaf6d5 100644 --- a/lib/Common/DataStructures/BaseDictionary.h +++ b/lib/Common/DataStructures/BaseDictionary.h @@ -238,7 +238,7 @@ namespace JsUtil return entries[i].Value(); } - const TValue Item(const TKey& key) const + TValue Item(const TKey& key) const { int i = FindEntry(key); Assert(i >= 0); @@ -250,6 +250,7 @@ namespace JsUtil return Insert(key, value); } + // Returns -1 if the key is already in the dictionary int AddNew(const TKey& key, const TValue& value) { return Insert(key, value); diff --git a/lib/Common/DataStructures/BigInt.cpp b/lib/Common/DataStructures/BigUInt.cpp similarity index 92% rename from lib/Common/DataStructures/BigInt.cpp rename to lib/Common/DataStructures/BigUInt.cpp index 9908eaab594..e82b5527de7 100644 --- a/lib/Common/DataStructures/BigInt.cpp +++ b/lib/Common/DataStructures/BigUInt.cpp @@ -3,20 +3,20 @@ // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #include "CommonDataStructuresPch.h" -#include "DataStructures/BigInt.h" +#include "DataStructures/BigUInt.h" #include "Common/NumberUtilitiesBase.h" #include "Common/NumberUtilities.h" namespace Js { - BigInt & BigInt::operator= (BigInt &bi) + BigUInt & BigUInt::operator= (BigUInt &bi) { AssertMsg(false, "can't assign BigInts"); return *this; } #if DBG - void BigInt::AssertValid(bool fCheckVal) + void BigUInt::AssertValid(bool fCheckVal) { Assert(m_cluMax >= kcluMaxInit); Assert(m_prglu != 0); @@ -26,7 +26,7 @@ namespace Js } #endif - BigInt::BigInt(void) + BigUInt::BigUInt(void) { m_cluMax = kcluMaxInit; m_clu = 0; @@ -34,25 +34,25 @@ namespace Js AssertBi(this); } - BigInt::~BigInt(void) + BigUInt::~BigUInt(void) { if (m_prglu != m_rgluInit) free(m_prglu); } - int32 BigInt::Clu(void) + int32 BigUInt::Clu(void) { return m_clu; } - uint32 BigInt::Lu(int32 ilu) + uint32 BigUInt::Lu(int32 ilu) { AssertBi(this); Assert(ilu < m_clu); return m_prglu[ilu]; } - bool BigInt::FResize(int32 clu) + bool BigUInt::FResize(int32 clu) { AssertBiNoVal(this); @@ -79,7 +79,7 @@ namespace Js return true; } - bool BigInt::FInitFromRglu(uint32 *prglu, int32 clu) + bool BigUInt::FInitFromRglu(uint32 *prglu, int32 clu) { AssertBi(this); Assert(clu >= 0); @@ -95,7 +95,7 @@ namespace Js return true; } - bool BigInt::FInitFromBigint(BigInt *pbiSrc) + bool BigUInt::FInitFromBigint(BigUInt *pbiSrc) { AssertBi(this); AssertBi(pbiSrc); @@ -105,7 +105,7 @@ namespace Js } template - bool BigInt::FInitFromDigits(const EncodedChar *prgch, int32 cch, int32 *pcchDig) + bool BigUInt::FInitFromDigits(const EncodedChar *prgch, int32 cch, int32 *pcchDig) { AssertBi(this); Assert(cch >= 0); @@ -125,7 +125,7 @@ namespace Js luMul = 1; for (*pcchDig = cch; prgch < pchLim; prgch++) { - if (*prgch == '.') + if (*prgch == '.' || *prgch == '_') { (*pcchDig)--; continue; @@ -147,7 +147,7 @@ namespace Js return true; } - bool BigInt::FMulAdd(uint32 luMul, uint32 luAdd) + bool BigUInt::FMulAdd(uint32 luMul, uint32 luAdd) { AssertBi(this); Assert(luMul != 0); @@ -174,7 +174,7 @@ namespace Js return true; } - bool BigInt::FMulPow5(int32 c5) + bool BigUInt::FMulPow5(int32 c5) { AssertBi(this); Assert(c5 >= 0); @@ -203,7 +203,7 @@ namespace Js return true; } - bool BigInt::FShiftLeft(int32 cbit) + bool BigUInt::FShiftLeft(int32 cbit) { AssertBi(this); Assert(cbit >= 0); @@ -258,7 +258,7 @@ namespace Js return true; } - void BigInt::ShiftLusRight(int32 clu) + void BigUInt::ShiftLusRight(int32 clu) { AssertBi(this); Assert(clu >= 0); @@ -278,7 +278,7 @@ namespace Js AssertBi(this); } - void BigInt::ShiftRight(int32 cbit) + void BigUInt::ShiftRight(int32 cbit) { AssertBi(this); Assert(cbit >= 0); @@ -312,7 +312,7 @@ namespace Js AssertBi(this); } - int BigInt::Compare(BigInt *pbi) + int BigUInt::Compare(BigUInt *pbi) { AssertBi(this); AssertBi(pbi); @@ -338,7 +338,7 @@ namespace Js return (m_prglu[ilu] > pbi->m_prglu[ilu]) ? 1 : -1; } - bool BigInt::FAdd(BigInt *pbi) + bool BigUInt::FAdd(BigUInt *pbi) { AssertBi(this); AssertBi(pbi); @@ -391,7 +391,7 @@ namespace Js return true; } - void BigInt::Subtract(BigInt *pbi) + void BigUInt::Subtract(BigUInt *pbi) { AssertBi(this); AssertBi(pbi); @@ -443,7 +443,7 @@ namespace Js AssertBi(this); } - int BigInt::DivRem(BigInt *pbi) + int BigUInt::DivRem(BigUInt *pbi) { AssertBi(this); AssertBi(pbi); @@ -510,7 +510,7 @@ namespace Js return wQuo; } - double BigInt::GetDbl(void) + double BigUInt::GetDbl(void) { double dbl; uint32 luHi, luLo; @@ -591,6 +591,6 @@ namespace Js return dbl; } - template bool BigInt::FInitFromDigits(const char16 *prgch, int32 cch, int32 *pcchDig); - template bool BigInt::FInitFromDigits(const utf8char_t *prgch, int32 cch, int32 *pcchDig); + template bool BigUInt::FInitFromDigits(const char16 *prgch, int32 cch, int32 *pcchDig); + template bool BigUInt::FInitFromDigits(const utf8char_t *prgch, int32 cch, int32 *pcchDig); } diff --git a/lib/Common/DataStructures/BigInt.h b/lib/Common/DataStructures/BigUInt.h similarity index 55% rename from lib/Common/DataStructures/BigInt.h rename to lib/Common/DataStructures/BigUInt.h index c2d3f1cc649..a3d5c13baee 100644 --- a/lib/Common/DataStructures/BigInt.h +++ b/lib/Common/DataStructures/BigUInt.h @@ -9,19 +9,20 @@ namespace Js /*************************************************************************** Big non-negative integer class. ***************************************************************************/ - class BigInt + class BigUInt { + // Non-negative BigInt is stored as an array of 'digit' where each digit is unit32 private: // Make this big enough that we rarely have to call malloc. - enum { kcluMaxInit = 30 }; + enum { kcluMaxInit = 30 };// initilize 30 digits - int32 m_cluMax; - int32 m_clu; - uint32 *m_prglu; - uint32 m_rgluInit[kcluMaxInit]; + int32 m_cluMax; // current maximum length (or number of digits) it can contains + int32 m_clu; // current length (or number of digits) + uint32 *m_prglu; // pointer to array of digits + uint32 m_rgluInit[kcluMaxInit]; // pre-defined space to store array - inline BigInt & operator= (BigInt &bi); - bool FResize(int32 clu); + inline BigUInt & operator= (BigUInt &bi); + bool FResize(int32 clu);// allocate more space if length go over maximum #if DBG #define AssertBi(pbi) Assert(pbi); (pbi)->AssertValid(true); @@ -33,25 +34,25 @@ namespace Js #endif //!DBG public: - BigInt(void); - ~BigInt(void); + BigUInt(void); + ~BigUInt(void); - bool FInitFromRglu(uint32 *prglu, int32 clu); - bool FInitFromBigint(BigInt *pbiSrc); + bool FInitFromRglu(uint32 *prglu, int32 clu); // init from array and length + bool FInitFromBigint(BigUInt *pbiSrc); template - bool FInitFromDigits(const EncodedChar *prgch, int32 cch, int32 *pcchDec); + bool FInitFromDigits(const EncodedChar *prgch, int32 cch, int32 *pcchDec); // init from char of digits bool FMulAdd(uint32 luMul, uint32 luAdd); bool FMulPow5(int32 c5); bool FShiftLeft(int32 cbit); void ShiftLusRight(int32 clu); void ShiftRight(int32 cbit); - int Compare(BigInt *pbi); - bool FAdd(BigInt *pbi); - void Subtract(BigInt *pbi); - int DivRem(BigInt *pbi); + int Compare(BigUInt *pbi); + bool FAdd(BigUInt *pbi); + void Subtract(BigUInt *pbi); + int DivRem(BigUInt *pbi); - int32 Clu(void); - uint32 Lu(int32 ilu); + int32 Clu(void); // return current length + uint32 Lu(int32 ilu); // return digit at position ilu start from 0 double GetDbl(void); }; } diff --git a/lib/Common/DataStructures/CMakeLists.txt b/lib/Common/DataStructures/CMakeLists.txt index 0e524aadc29..ac2854f2c3c 100644 --- a/lib/Common/DataStructures/CMakeLists.txt +++ b/lib/Common/DataStructures/CMakeLists.txt @@ -1,5 +1,5 @@ add_library (Chakra.Common.DataStructures OBJECT - BigInt.cpp + BigUInt.cpp BufferBuilder.cpp CommonDataStructuresPch.cpp DictionaryStats.cpp diff --git a/lib/Common/DataStructures/Chakra.Common.DataStructures.vcxproj b/lib/Common/DataStructures/Chakra.Common.DataStructures.vcxproj index fb447b00ec7..f7889680c58 100644 --- a/lib/Common/DataStructures/Chakra.Common.DataStructures.vcxproj +++ b/lib/Common/DataStructures/Chakra.Common.DataStructures.vcxproj @@ -29,7 +29,7 @@ - + @@ -45,7 +45,7 @@ - + diff --git a/lib/Common/DataStructures/ClusterList.h b/lib/Common/DataStructures/ClusterList.h index b2c94a27643..9100c49151d 100644 --- a/lib/Common/DataStructures/ClusterList.h +++ b/lib/Common/DataStructures/ClusterList.h @@ -417,4 +417,4 @@ class SegmentClusterList Output::Print(_u("]\n")); } #endif -}; \ No newline at end of file +}; diff --git a/lib/Common/DataStructures/Comparer.h b/lib/Common/DataStructures/Comparer.h index c6b3eb19d96..378f9f26122 100644 --- a/lib/Common/DataStructures/Comparer.h +++ b/lib/Common/DataStructures/Comparer.h @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #pragma once @@ -176,7 +177,7 @@ struct DefaultComparer : public StringComparer {}; template struct SpecializedComparer { - template class TComparerType : public TComparer {}; + template class TComparerType : public TComparer {}; }; namespace regex diff --git a/lib/Common/DataStructures/DList.h b/lib/Common/DataStructures/DList.h index 2564dc55b1d..a0691c884a3 100644 --- a/lib/Common/DataStructures/DList.h +++ b/lib/Common/DataStructures/DList.h @@ -108,6 +108,19 @@ class DListBase : protected DListNodeBase, public TCount current = current->Next(); return true; } + + bool Prev() + { + Assert(current != nullptr); + if (list->IsHead(current->Prev())) + { + current = nullptr; + return false; + } + current = current->Prev(); + return true; + } + TData const& Data() const { Assert(this->IsValid()); diff --git a/lib/Common/DataStructures/DictionaryEntry.h b/lib/Common/DataStructures/DictionaryEntry.h index 9941ef0414f..c93977c109a 100644 --- a/lib/Common/DataStructures/DictionaryEntry.h +++ b/lib/Common/DataStructures/DictionaryEntry.h @@ -6,83 +6,123 @@ namespace JsUtil { - template - class BaseValueEntry + namespace { - protected: - TValue value; // data of entry - void Set(TValue const& value) + template + struct ChooseSmallerHelper { - this->value = value; - } - - public: - int next; // Index of next entry, -1 if last + typedef T2 type; + }; - static bool SupportsCleanup() + template + struct ChooseSmallerHelper { - return false; - } + typedef T1 type; + }; - static bool NeedsCleanup(BaseValueEntry&) - { - return false; - } + template + using ChooseSmaller = typename ChooseSmallerHelper::type; - TValue const& Value() const { return value; } - TValue& Value() { return value; } - void SetValue(TValue const& value) { this->value = value; } - }; - - template - class ValueEntry: public BaseValueEntry - { - public: - void Clear() + template + class ValueEntryData { - } - }; - - // Class specialization for pointer values to support clearing - template - class ValueEntry: public BaseValueEntry - { - public: - void Clear() + protected: + TValue value; // data of entry + public: + int next; // Index of next entry, -1 if last + }; + + template + class KeyValueEntryDataLayout1 { - this->value = nullptr; - } - }; - - template <> - class ValueEntry: public BaseValueEntry - { - public: - void Clear() + protected: + TValue value; // data of entry + TKey key; // key of entry + public: + int next; // Index of next entry, -1 if last + }; + + template + class KeyValueEntryDataLayout2 { - this->value = false; - } - }; - - template <> - class ValueEntry: public BaseValueEntry - { - public: - void Clear() + protected: + TValue value; // data of entry + public: + int next; // Index of next entry, -1 if last + protected: + TKey key; // key of entry + }; + + // Packing matters because we make so many dictionary entries. + // The int pointing to the next item in the list may be included + // either after the value or after the key, depending on which + // packs better. + template + using KeyValueEntryData = ChooseSmaller, KeyValueEntryDataLayout2>; + + template > + class ValueEntry : public TData { - this->value = 0; - } - }; + protected: + void Set(TValue const& value) + { + this->value = value; + } + + public: + static bool SupportsCleanup() + { + return false; + } + + static bool NeedsCleanup(ValueEntry&) + { + return false; + } + + void Clear() + { + ClearValue::Clear(&this->value); + } + + TValue const& Value() const { return this->value; } + TValue& Value() { return this->value; } + void SetValue(TValue const& value) { this->value = value; } + }; + + // Used by BaseHashSet, the default is that the key is the same as the value + template + class ImplicitKeyValueEntry : public ValueEntry + { + public: + TKey Key() const { return ValueToKey::ToKey(this->value); } - template <> - class ValueEntry: public BaseValueEntry - { - public: - void Clear() + void Set(TKey const& key, TValue const& value) + { + __super::Set(value); + } + }; + + template + class KeyValueEntry : public ValueEntry> { - this->value = 0; - } - }; + protected: + void Set(TKey const& key, TValue const& value) + { + __super::Set(value); + this->key = key; + } + + public: + TKey const& Key() const { return this->key; } + + void Clear() + { + __super::Clear(); + this->key = TKey(); + } + }; + } template struct ValueToKey @@ -90,73 +130,19 @@ namespace JsUtil static TKey ToKey(const TValue &value) { return static_cast(value); } }; - // Used by BaseHashSet, the default is that the key is the same as the value - template - class ImplicitKeyValueEntry : public ValueEntry + template + struct ClearValue { - public: - inline TKey Key() const { return ValueToKey::ToKey(this->value); } - - void Set(TKey const& key, TValue const& value) - { - __super::Set(value); - } - }; - - template - class BaseKeyValueEntry : public ValueEntry - { - protected: - TKey key; // key of entry - void Set(TKey const& key, TValue const& value) - { - __super::Set(value); - this->key = key; - } - - public: - TKey const& Key() const { return key; } + static inline void Clear(TValue* value) { *value = TValue(); } }; template - class BaseKeyEntry : public ValueEntry + class KeyEntry : public ValueEntry { public: TKey const& Key() const { return this->value; } }; - template - class KeyValueEntry : public BaseKeyValueEntry - { - }; - - template - class KeyEntry : public BaseKeyEntry - { - }; - - template - class KeyValueEntry : public BaseKeyValueEntry - { - public: - void Clear() - { - __super::Clear(); - this->key = nullptr; - } - }; - - template - class KeyValueEntry : public BaseKeyValueEntry - { - public: - void Clear() - { - __super::Clear(); - this->key = 0; - } - }; - template class THashEntry> class DefaultHashedEntry : public THashEntry { diff --git a/lib/Common/DataStructures/FixedBitVector.h b/lib/Common/DataStructures/FixedBitVector.h index cc28b7948af..fb348ba6465 100644 --- a/lib/Common/DataStructures/FixedBitVector.h +++ b/lib/Common/DataStructures/FixedBitVector.h @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- -// Copyright (C) Microsoft. All rights reserved. +// Copyright (C) Microsoft Corporation and contributors. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #pragma once @@ -250,9 +251,10 @@ void BVFixed::SetRange(Container* value, BVIndex start, BVIndex len) BVUnit::BVUnitTContainer* bits; static_assert(sizeof(Container) == 1 || sizeof(Container) == sizeof(BVUnit::BVUnitTContainer), "Container is not suitable to represent the calculated value"); - if (sizeof(BVUnit::BVUnitTContainer) == 1) + if (sizeof(Container) == 1) { - temp = *((BVUnit::BVUnitTContainer*)value); + static_assert(sizeof(byte) == 1, "Size of byte should be 1."); + temp = *(byte*)value; bits = &temp; } else diff --git a/lib/Common/DataStructures/ImmutableList.h b/lib/Common/DataStructures/ImmutableList.h index 6b53d5e8da3..f9d3acb42a6 100644 --- a/lib/Common/DataStructures/ImmutableList.h +++ b/lib/Common/DataStructures/ImmutableList.h @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #pragma once @@ -748,10 +749,16 @@ namespace regex return result; } +#ifndef _MSC_VER + bool __attribute__((noinline)) CheckEq(void* obj1, void *obj2) { return obj1 == obj2; } +#else +#define CheckEq(a, b) (a) == (b) +#endif + // Info: Return true if the list is empty. bool IsEmpty() { - return this==Empty(); + return CheckEq(this, Empty()); } // Info: Return a list containing the given single value diff --git a/lib/Common/DataStructures/KeyValuePair.h b/lib/Common/DataStructures/KeyValuePair.h index d4d0a5bb266..62bffa385a5 100644 --- a/lib/Common/DataStructures/KeyValuePair.h +++ b/lib/Common/DataStructures/KeyValuePair.h @@ -28,10 +28,10 @@ namespace JsUtil {} TKey Key() { return key; } - const TKey Key() const { return key; } + TKey Key() const { return key; } TValue Value() { return value; } - const TValue Value() const { return value; } + TValue Value() const { return value; } }; } diff --git a/lib/Common/DataStructures/List.h b/lib/Common/DataStructures/List.h index 8def4634c3a..dc7f20a3f91 100644 --- a/lib/Common/DataStructures/List.h +++ b/lib/Common/DataStructures/List.h @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #pragma once @@ -63,10 +64,10 @@ namespace JsUtil && memcmp(this->buffer, list->GetBuffer(), sizeof(T)* this->Count()) == 0; } - template - static ReadOnlyList * New(TAllocator* alloc, __in_ecount(count) T* buffer, DECLSPEC_GUARD_OVERFLOW int count) + template + static ReadOnlyList * New(UAllocator* alloc, __in_ecount(count) T* buffer, DECLSPEC_GUARD_OVERFLOW int count) { - return AllocatorNew(TAllocator, alloc, ReadOnlyList, buffer, count, alloc); + return AllocatorNew(UAllocator, alloc, ReadOnlyList, buffer, count, alloc); } ReadOnlyList(__in_ecount(count) T* buffer, int count, TAllocator* alloc) @@ -284,10 +285,10 @@ namespace JsUtil } } - template - void Copy(const T* list) + template + void Copy(const U* list) { - CompileAssert(sizeof(TElementType) == sizeof(typename T::TElementType)); + CompileAssert(sizeof(TElementType) == sizeof(typename U::TElementType)); if (list->Count() > 0) { this->EnsureArray(list->Count()); diff --git a/lib/Common/DataStructures/SparseBitVector.h b/lib/Common/DataStructures/SparseBitVector.h index 2018b32f655..dbd14cab6d4 100644 --- a/lib/Common/DataStructures/SparseBitVector.h +++ b/lib/Common/DataStructures/SparseBitVector.h @@ -36,10 +36,10 @@ typedef BVUnit64 SparseBVUnit; #define FOREACH_BITSET_IN_SPARSEBV_EDITING(index, bv) \ { \ BVIndex index; \ - BVSparseNode * _curNodeEdit = (bv)->head; \ + auto * _curNodeEdit = (bv)->head; \ while (_curNodeEdit != nullptr) \ { \ - BVSparseNode * _next = _curNodeEdit->next; \ + auto * _next = _curNodeEdit->next; \ BVIndex _offset; \ BVIndex _startIndex = _curNodeEdit->startIndex; \ SparseBVUnit _unit = _curNodeEdit->data; \ diff --git a/lib/Common/DataStructures/WeakReferenceDictionary.h b/lib/Common/DataStructures/WeakReferenceDictionary.h index e5090c05f1c..5280ca2d0bf 100644 --- a/lib/Common/DataStructures/WeakReferenceDictionary.h +++ b/lib/Common/DataStructures/WeakReferenceDictionary.h @@ -47,40 +47,62 @@ namespace JsUtil #if ENABLE_WEAK_REFERENCE_REGIONS - template - class WeakRefRegionValueDictionaryEntry : public SimpleDictionaryKeyEntry + template + struct enable_if {}; + + template + struct enable_if { - public: - void Clear() - { - this->value = TKey(); - } + typedef T type; }; - // TODO: It would be good to adapt WeaklyReferencedKeyDictionary to also use WeakRefRegions - // One possibility is to create a BaseSplitDictionary which has the collections of - // buckets, entries, and RecyclerWeakReferenceRegionItems, and then the entries are - // either value/next or key/next pairs, with the weak ref region storing the keys or - // values in a weak manner. template < - class TKey, - class TValue, + class TEntry, + class TWeak, + bool keyIsWeak, class SizePolicy = PowerOf2SizePolicy, template class Comparer = DefaultComparer, typename Lock = NoResizeLock, class AllocType = Recycler // Should always be recycler; this is to sufficiently confuse the RecyclerChecker > - class WeakReferenceRegionDictionary : protected Lock, public IWeakReferenceDictionary + class SplitWeakDictionary : protected Lock, public IWeakReferenceDictionary { - typedef WeakRefRegionValueDictionaryEntry EntryType; - typedef RecyclerWeakReferenceRegionItem ValueType; + private: + template + struct Select; + + template + struct Select + { + typedef T1 type; + }; - typedef typename AllocatorInfo::AllocatorFunc EntryAllocatorFuncType; + template + struct Select + { + typedef T2 type; + }; + + typedef typename Select::type TBKey; + typedef typename Select::type TBValue; + + typedef typename AllocatorInfo::AllocatorFunc EntryAllocatorFuncType; + + enum InsertOperations + { + Insert_Add, // FatalInternalError if the item already exist in debug build + Insert_AddNew, // Ignore add if the item already exist + Insert_Item // Replace the item if it already exist + }; + + protected: + + typedef ValueEntry EntryType; + typedef RecyclerWeakReferenceRegionItem WeakType; - private: Field(int*) buckets; Field(EntryType*) entries; - Field(ValueType*) values; + Field(WeakType*) weakRefs; FieldNoBarrier(Recycler*) alloc; Field(int) size; Field(uint) bucketCount; @@ -89,16 +111,11 @@ namespace JsUtil Field(int) freeCount; Field(int) modFunctionIndex; + private: static const int FreeListSentinel = -2; - PREVENT_COPY(WeakReferenceRegionDictionary); + PREVENT_COPY(SplitWeakDictionary); - enum InsertOperations - { - Insert_Add, // FatalInternalError if the item already exist in debug build - Insert_AddNew, // Ignore add if the item already exist - Insert_Item // Replace the item if it already exist - }; class AutoDoResize { @@ -110,19 +127,13 @@ namespace JsUtil }; public: + // Allow SplitWeakDictionary field to be inlined in classes with DEFINE_VTABLE_CTOR_MEMBER_INIT + SplitWeakDictionary(VirtualTableInfoCtorEnum) { } - virtual void Cleanup() override - { - this->MapAndRemoveIf([](EntryType& entry, ValueType& value) - { - return value == nullptr; - }); - } - - WeakReferenceRegionDictionary(Recycler* allocator, int capacity = 0) + SplitWeakDictionary(Recycler* allocator, int capacity = 0) : buckets(nullptr), entries(nullptr), - values(nullptr), + weakRefs(nullptr), alloc(allocator), size(0), bucketCount(0), @@ -131,8 +142,8 @@ namespace JsUtil freeCount(0), modFunctionIndex(UNKNOWN_MOD_INDEX) { - Assert(reinterpret_cast(this) == reinterpret_cast((IWeakReferenceDictionary*)this)); Assert(allocator); + Assert(reinterpret_cast(this) == reinterpret_cast((IWeakReferenceDictionary*)this)); // If initial capacity is negative or 0, lazy initialization on // the first insert operation is performed. @@ -142,6 +153,14 @@ namespace JsUtil } } + virtual void Cleanup() override + { + this->MapAndRemoveIf([](EntryType& entry, WeakType& weakRef) + { + return weakRef == nullptr; + }); + } + inline int Capacity() const { return size; @@ -152,164 +171,148 @@ namespace JsUtil return count - freeCount; } - TValue Item(const TKey& key) + void Clear() + { + if (count > 0) + { + memset(buckets, -1, bucketCount * sizeof(buckets[0])); + memset(entries, 0, sizeof(EntryType) * size); + memset(weakRefs, 0, sizeof(WeakType) * size); // TODO: issues with background threads? + count = 0; + freeCount = 0; + } + } + + void ResetNoDelete() + { + this->size = 0; + this->bucketCount = 0; + this->buckets = nullptr; + this->entries = nullptr; + this->weakRefs = nullptr; + this->count = 0; + this->freeCount = 0; + this->modFunctionIndex = UNKNOWN_MOD_INDEX; + } + + void Reset() + { + ResetNoDelete(); + } + + // Returns whether the dictionary was resized or not + bool EnsureCapacity() + { + if (freeCount == 0 && count == size) + { + Resize(); + return true; + } + + return false; + } + + int GetNextIndex() + { + if (freeCount != 0) + { + Assert(freeCount > 0); + Assert(freeList >= 0); + Assert(freeList < count); + return freeList; + } + + return count; + } + + TBValue Item(const TBKey& key) { int i = FindEntry(key); Assert(i >= 0); return values[i]; } - const TValue Item(const TKey& key) const + TBValue Item(const TBKey& key) const { int i = FindEntry(key); Assert(i >= 0); return values[i]; } - int Add(const TKey& key, const TValue& value) + int Add(const TBKey& key, const TBValue& value) { return Insert(key, value); } - int AddNew(const TKey& key, const TValue& value) + int AddNew(const TBKey& key, const TBValue& value) { return Insert(key, value); } - int Item(const TKey& key, const TValue& value) + int Item(const TBKey& key, const TBValue& value) { return Insert(key, value); } - bool Contains(KeyValuePair keyValuePair) + bool Contains(KeyValuePair keyValuePair) { int i = FindEntry(keyValuePair.Key()); - if (i >= 0 && Comparer::Equals(values[i], keyValuePair.Value())) + TBValue val = this->GetValue(i); + if (i >= 0 && Comparer::Equals(val, keyValuePair.Value())) { return true; } return false; } - bool Remove(KeyValuePair keyValuePair) - { - int i, last; - uint targetBucket; - if (FindEntryWithKey(keyValuePair.Key(), &i, &last, &targetBucket)) - { - const TValue &value = values[i]; - if (Comparer::Equals(value, keyValuePair.Value())) - { - RemoveAt(i, last, targetBucket); - return true; - } - } - return false; - } - - void Clear() - { - if (count > 0) - { - memset(buckets, -1, bucketCount * sizeof(buckets[0])); - memset(entries, 0, sizeof(EntryType) * size); - memset(values, 0, sizeof(ValueType) * size); // TODO: issues with background threads? - count = 0; - freeCount = 0; - } - } - - void ResetNoDelete() - { - this->size = 0; - this->bucketCount = 0; - this->buckets = nullptr; - this->entries = nullptr; - this->values = nullptr; - this->count = 0; - this->freeCount = 0; - this->modFunctionIndex = UNKNOWN_MOD_INDEX; - } - - void Reset() - { - ResetNoDelete(); - } - - bool ContainsKey(const TKey& key) const + bool ContainsKey(const TBKey& key) const { return FindEntry(key) >= 0; } template - inline const TValue& LookupWithKey(const TLookup& key, const TValue& defaultValue) const + inline const TBValue& LookupWithKey(const TLookup& key, const TBValue& defaultValue) { int i = FindEntryWithKey(key); if (i >= 0) { - return values[i]; + return this->GetValue(i); } return defaultValue; } - inline const TValue& Lookup(const TKey& key, const TValue& defaultValue) const + inline const TBValue& Lookup(const TBKey& key, const TBValue& defaultValue) { - return LookupWithKey(key, defaultValue); + return LookupWithKey(key, defaultValue); } template - bool TryGetValue(const TLookup& key, TValue* value) const + bool TryGetValue(const TLookup& key, TBValue* value) { int i = FindEntryWithKey(key); if (i >= 0) { - *value = values[i]; + *value = this->GetValue(i); return true; } return false; } - bool TryGetValueAndRemove(const TKey& key, TValue* value) + bool TryGetValueAndRemove(const TBKey& key, TBValue* value) { int i, last; uint targetBucket; if (FindEntryWithKey(key, &i, &last, &targetBucket)) { - *value = values[i]; + *value = this->GetValue(i); RemoveAt(i, last, targetBucket); return true; } return false; } - const TValue& GetValueAt(const int index) const - { - Assert(index >= 0); - Assert(index < count); - - return values[index]; - } - - TKey const& GetKeyAt(const int index) const - { - Assert(index >= 0); - Assert(index < count); - - return entries[index].Key(); - } - - bool TryGetValueAt(int index, TValue * value) const - { - if (index >= 0 && index < count) - { - *value = values[index]; - return true; - } - return false; - } - - bool Remove(const TKey& key) + bool Remove(const TBKey& key) { int i, last; uint targetBucket; @@ -321,31 +324,22 @@ namespace JsUtil return false; } - // Returns whether the dictionary was resized or not - bool EnsureCapacity() + bool Remove(KeyValuePair keyValuePair) { - if (freeCount == 0 && count == size) + int i, last; + uint targetBucket; + if (FindEntryWithKey(keyValuePair.Key(), &i, &last, &targetBucket)) { - Resize(); - return true; + const TBValue& value = this->GetValue(i); + if (Comparer::Equals(value, keyValuePair.Value())) + { + RemoveAt(i, last, targetBucket); + return true; + } } - return false; } - int GetNextIndex() - { - if (freeCount != 0) - { - Assert(freeCount > 0); - Assert(freeList >= 0); - Assert(freeList < count); - return freeList; - } - - return count; - } - int GetLastIndex() { return count - 1; @@ -361,7 +355,33 @@ namespace JsUtil __super::UnlockResize(); } - private: + protected: + + template + void MapAndRemoveIf(Fn fn) + { + for (uint i = 0; i < bucketCount; i++) + { + if (buckets[i] != -1) + { + for (int currentIndex = buckets[i], lastIndex = -1; currentIndex != -1;) + { + // If the predicate says we should remove this item + if (fn(entries[currentIndex], weakRefs[currentIndex]) == true) + { + const int nextIndex = entries[currentIndex].next; + RemoveAt(currentIndex, lastIndex, i); + currentIndex = nextIndex; + } + else + { + lastIndex = currentIndex; + currentIndex = entries[currentIndex].next; + } + } + } + } + } template static hash_t GetHashCodeWithKey(const TLookup& key) @@ -371,11 +391,6 @@ namespace JsUtil return TAGHASH(Comparer::GetHashCode(key)); } - static hash_t GetHashCode(const TKey& key) - { - return GetHashCodeWithKey(key); - } - static uint GetBucket(hash_t hashCode, int bucketCount, int modFunctionIndex) { return SizePolicy::GetBucket(UNTAGHASH(hashCode), bucketCount, modFunctionIndex); @@ -411,8 +426,53 @@ namespace JsUtil return FreeListSentinel - freeEntry.next; } + void Initialize(int capacity) + { + // minimum capacity is 4 + int initSize = max(capacity, 4); + int modIndex = UNKNOWN_MOD_INDEX; + uint initBucketCount = SizePolicy::GetBucketSize(initSize, &modIndex); + AssertMsg(initBucketCount > 0, "Size returned by policy should be greater than 0"); + + int* newBuckets = nullptr; + EntryType* newEntries = nullptr; + WeakType* newWeakRefs = nullptr; + Allocate(&newBuckets, &newEntries, &newWeakRefs, initBucketCount, initSize); + + // Allocation can throw - assign only after allocation has succeeded. + this->buckets = newBuckets; + this->entries = newEntries; + this->weakRefs = newWeakRefs; + this->bucketCount = initBucketCount; + this->size = initSize; + this->modFunctionIndex = modIndex; + Assert(this->freeCount == 0); + } + + inline void RemoveAt(const int i, const int last, const uint targetBucket) + { + if (last < 0) + { + buckets[targetBucket] = entries[i].next; + } + else + { + entries[last].next = entries[i].next; + } + entries[i].Clear(); + weakRefs[i].Clear(); + SetNextFreeEntryIndex(entries[i], freeCount == 0 ? -1 : freeList); + freeList = i; + freeCount++; + } + + inline int FindEntry(const TBKey& key) + { + return FindEntryWithKey(key); + } + template - inline int FindEntryWithKey(const LookupType& key) const + inline int FindEntryWithKey(const LookupType& key) { int * localBuckets = buckets; if (localBuckets != nullptr) @@ -420,24 +480,25 @@ namespace JsUtil hash_t hashCode = GetHashCodeWithKey(key); uint targetBucket = this->GetBucket(hashCode); EntryType * localEntries = entries; - for (int i = localBuckets[targetBucket]; i >= 0; i = localEntries[i].next) + for (int i = localBuckets[targetBucket], last = -1; i >= 0;) { - if (localEntries[i].template KeyEquals>(key, hashCode)) + TBKey k = this->GetKey(i); + if (this->RemoveIfCollected(k, &i, last, targetBucket)) + { + continue; + } + if (Comparer::Equals(k, key)) { return i; } + last = i; + i = localEntries[i].next; } } - return -1; } - inline int FindEntry(const TKey& key) const - { - return FindEntryWithKey(key); - } - template inline bool FindEntryWithKey(const LookupType& key, int *const i, int *const last, uint *const targetBucket) { @@ -448,70 +509,108 @@ namespace JsUtil *targetBucket = this->GetBucket(hashCode); *last = -1; EntryType * localEntries = entries; - for (*i = localBuckets[*targetBucket]; *i >= 0; *last = *i, *i = localEntries[*i].next) + for (*i = localBuckets[*targetBucket]; *i >= 0;) { - if (localEntries[*i].template KeyEquals>(key, hashCode)) + TBKey k = this->GetKey(*i); + if (this->RemoveIfCollected(k, i, *last, *targetBucket)) + { + continue; + } + if (Comparer::Equals(k, key)) { return true; } + + *last = *i; + *i = localEntries[*i].next; } } return false; } - template - void MapAndRemoveIf(Fn fn) - { - for (uint i = 0; i < bucketCount; i++) - { - if (buckets[i] != -1) - { - for (int currentIndex = buckets[i], lastIndex = -1; currentIndex != -1;) - { - // If the predicate says we should remove this item - if (fn(entries[currentIndex], values[currentIndex]) == true) - { - const int nextIndex = entries[currentIndex].next; - RemoveAt(currentIndex, lastIndex, i); - currentIndex = nextIndex; - } - else - { - lastIndex = currentIndex; - currentIndex = entries[currentIndex].next; - } - } - } - } - } + private: - void Initialize(int capacity) + void Resize() { - // minimum capacity is 4 - int initSize = max(capacity, 4); + AutoDoResize autoDoResize(*this); + __analysis_assert(count > 1); + + int newSize = SizePolicy::GetNextSize(count); int modIndex = UNKNOWN_MOD_INDEX; - uint initBucketCount = SizePolicy::GetBucketSize(initSize, &modIndex); - AssertMsg(initBucketCount > 0, "Size returned by policy should be greater than 0"); + uint newBucketCount = SizePolicy::GetBucketSize(newSize, &modIndex); + __analysis_assume(newSize > count); int* newBuckets = nullptr; EntryType* newEntries = nullptr; - ValueType* newValues = nullptr; - Allocate(&newBuckets, &newEntries, &newValues, initBucketCount, initSize); + WeakType* newWeakRefs = nullptr; + if (newBucketCount == bucketCount) + { + // no need to rehash + newEntries = AllocateEntries(newSize); + newWeakRefs = AllocateWeakRefs(newSize); + CopyArray(newEntries, newSize, entries, count); + CopyArray(newWeakRefs, newSize, weakRefs, count); // TODO: concurrency issues? - // Allocation can throw - assign only after allocation has succeeded. + this->entries = newEntries; + this->weakRefs = newWeakRefs; + this->size = newSize; + this->modFunctionIndex = modIndex; + return; + } + + Allocate(&newBuckets, &newEntries, &newWeakRefs, newBucketCount, newSize); + + this->modFunctionIndex = modIndex; + + // Need to re-bucket the entries + // Also need to account for whether the weak refs have been collected + // Have to go in order so we can remove entries as appropriate + this->count = 0; + for (uint i = 0; i < this->bucketCount; ++i) + { + if (this->buckets[i] < 0) + { + continue; + } + + for (int currentEntry = this->buckets[i]; currentEntry != -1; ) + { + if (IsFreeEntry(entries[currentEntry])) + { + // Entry is free; this shouldn't happen, but stop following the chain + AssertMsg(false, "Following bucket chains should not result in free entries"); + break; + } + if (this->weakRefs[currentEntry] == nullptr) + { + // The weak ref has been collected; don't bother bringing it to the new collection + currentEntry = this->entries[currentEntry].next; + continue; + } + + hash_t hashCode = GetHashCodeWithKey(this->GetKey(currentEntry)); + int bucket = GetBucket(hashCode, newBucketCount, modFunctionIndex); + newEntries[count].next = newBuckets[bucket]; + newEntries[count].SetValue(this->entries[currentEntry].Value()); + newWeakRefs[count] = this->weakRefs[currentEntry]; + newBuckets[bucket] = count; + ++count; + + currentEntry = this->entries[currentEntry].next; + } + } + this->freeCount = 0; + this->freeList = 0; this->buckets = newBuckets; this->entries = newEntries; - this->values = newValues; - this->bucketCount = initBucketCount; - this->size = initSize; - this->modFunctionIndex = modIndex; - Assert(this->freeCount == 0); + this->weakRefs = newWeakRefs; + this->bucketCount = newBucketCount; + this->size = newSize; } - template - int Insert(const TKey& key, const TValue& value) + int Insert(const TBKey& key, const TBValue& value) { int * localBuckets = buckets; if (localBuckets == nullptr) @@ -526,23 +625,32 @@ namespace JsUtil #else const bool needSearch = (op != Insert_Add); #endif - hash_t hashCode = GetHashCode(key); + hash_t hashCode = GetHashCodeWithKey(key); uint targetBucket = this->GetBucket(hashCode); if (needSearch) { EntryType * localEntries = entries; - for (int i = localBuckets[targetBucket]; i >= 0; i = localEntries[i].next) + for (int i = localBuckets[targetBucket], last = -1; i >= 0;) { - if (localEntries[i].template KeyEquals>(key, hashCode)) + TBKey k = this->GetKey(i); + if (this->RemoveIfCollected(k, &i, last, targetBucket)) + { + continue; + } + + if (Comparer::Equals(k, key)) { Assert(op != Insert_Add); if (op == Insert_Item) { - values[i] = value; + SetValue(value, i); return i; } return -1; } + + last = i; + i = localEntries[i].next; } } @@ -591,69 +699,13 @@ namespace JsUtil Assert(index < size); } - entries[index].Set(key, hashCode); - values[index] = value; + SetKeyValue(key, value, index); entries[index].next = buckets[targetBucket]; buckets[targetBucket] = index; return index; } - void Resize() - { - AutoDoResize autoDoResize(*this); - - int newSize = SizePolicy::GetNextSize(count); - int modIndex = UNKNOWN_MOD_INDEX; - uint newBucketCount = SizePolicy::GetBucketSize(newSize, &modIndex); - - __analysis_assume(newSize > count); - int* newBuckets = nullptr; - EntryType* newEntries = nullptr; - ValueType* newValues = nullptr; - if (newBucketCount == bucketCount) - { - // no need to rehash - newEntries = AllocateEntries(newSize); - newValues = AllocateValues(newSize); - CopyArray(newEntries, newSize, entries, count); - CopyArray(newValues, newSize, values, count); // TODO: concurrency issues? - - this->entries = newEntries; - this->values = newValues; - this->size = newSize; - this->modFunctionIndex = modIndex; - return; - } - - Allocate(&newBuckets, &newEntries, &newValues, newBucketCount, newSize); - CopyArray(newEntries, newSize, entries, count); - CopyArray(newValues, newSize, values, count); // TODO: concurrency issues? - - // When TAllocator is of type Recycler, it is possible that the Allocate above causes a collection, which - // in turn can cause entries in the dictionary to be removed - i.e. the dictionary contains weak references - // that remove themselves when no longer valid. This means the free list might not be empty anymore. - this->modFunctionIndex = modIndex; - for (int i = 0; i < count; i++) - { - __analysis_assume(i < newSize); - - if (!IsFreeEntry(newEntries[i])) - { - hash_t hashCode = newEntries[i].template GetHashCode>(); - int bucket = GetBucket(hashCode, newBucketCount, modFunctionIndex); - newEntries[i].next = newBuckets[bucket]; - newBuckets[bucket] = i; - } - } - - this->buckets = newBuckets; - this->entries = newEntries; - this->values = newValues; - bucketCount = newBucketCount; - size = newSize; - } - __ecount(bucketCount) int *AllocateBuckets(DECLSPEC_GUARD_OVERFLOW const uint bucketCount) { return @@ -675,45 +727,163 @@ namespace JsUtil size); } - __ecount(size) ValueType * AllocateValues(DECLSPEC_GUARD_OVERFLOW int size) + __ecount(size) WeakType * AllocateWeakRefs(DECLSPEC_GUARD_OVERFLOW int size) { - return alloc->CreateWeakReferenceRegion(size); + return alloc->CreateWeakReferenceRegion(size); } - void Allocate(__deref_out_ecount(bucketCount) int** ppBuckets, __deref_out_ecount(size) EntryType** ppEntries, __deref_out_ecount(size) ValueType** ppValues, DECLSPEC_GUARD_OVERFLOW uint bucketCount, DECLSPEC_GUARD_OVERFLOW int size) + void Allocate(__deref_out_ecount(bucketCount) int** ppBuckets, __deref_out_ecount(size) EntryType** ppEntries, __deref_out_ecount(size) WeakType** ppWeakRefs, DECLSPEC_GUARD_OVERFLOW uint bucketCount, DECLSPEC_GUARD_OVERFLOW int size) { - int *const buckets = AllocateBuckets(bucketCount); - Assert(buckets); // no-throw allocators are currently not supported + int *const newBuckets = AllocateBuckets(bucketCount); + Assert(newBuckets); // no-throw allocators are currently not supported - EntryType *entries; - entries = AllocateEntries(size); - Assert(entries); // no-throw allocators are currently not supported + EntryType *newEntries = AllocateEntries(size); + Assert(newEntries); // no-throw allocators are currently not supported - ValueType * values = AllocateValues(size); + WeakType * newWeakRefs = AllocateWeakRefs(size); - memset(buckets, -1, bucketCount * sizeof(buckets[0])); + memset(newBuckets, -1, bucketCount * sizeof(newBuckets[0])); - *ppBuckets = buckets; - *ppEntries = entries; - *ppValues = values; + *ppBuckets = newBuckets; + *ppEntries = newEntries; + *ppWeakRefs = newWeakRefs; } - inline void RemoveAt(const int i, const int last, const uint targetBucket) + template + inline typename enable_if::type GetKey(int index) const { - if (last < 0) + return this->weakRefs[index]; + } + + template + inline typename enable_if::type GetKey(int index) const + { + return this->entries[index].Value(); + } + + template + inline typename enable_if::type GetValue(int index) const + { + return this->entries[index].Value(); + } + + template + inline typename enable_if::type GetValue(int index) const + { + return this->weakRefs[index]; + } + + template + inline typename enable_if::type RemoveIfCollected(TBKey const key, int* i, int last, int targetBucket) + { + if (key == nullptr) { - buckets[targetBucket] = entries[i].next; + // Key has been collected + int next = entries[*i].next; + RemoveAt(*i, last, targetBucket); + *i = next; + return true; } - else + return false; + } + + template + inline typename enable_if::type RemoveIfCollected(TBKey const key, int* i, int last, int targetBucket) + { + return false; + } + + template + inline typename enable_if::type SetKeyValue(const TBKey& key, const TBValue& value, int index) + { + weakRefs[index] = key; + entries[index].SetValue(value); + } + + template + inline typename enable_if::type SetKeyValue(const TBKey& key, const TBValue& value, int index) + { + entries[index].SetValue(key); + weakRefs[index] = value; + } + + template + inline typename enable_if::type SetValue(const TBValue& value, int index) + { + this->entries[index].SetValue(value); + } + + template + inline typename enable_if::type SetValue(const TBValue& value, int index) + { + this->weakRefs[index] = value; + } + }; + + template < + class TKey, + class TValue, + class SizePolicy = PowerOf2SizePolicy, + template class Comparer = DefaultComparer, + typename Lock = NoResizeLock + > + class WeakReferenceRegionDictionary : public SplitWeakDictionary + { + typedef SplitWeakDictionary Base; + typedef typename Base::EntryType EntryType; + typedef typename Base::WeakType ValueType; + + public: + + WeakReferenceRegionDictionary(Recycler* allocator, int capacity = 0) + : Base(allocator, capacity) + { + } + }; + + template < + class TKey, + class TValue, + template class Comparer = DefaultComparer, + class SizePolicy = PrimeSizePolicy, + typename Lock = NoResizeLock + > + class WeakReferenceRegionKeyDictionary : public SplitWeakDictionary + { + typedef SplitWeakDictionary Base; + + typedef typename Base::EntryType EntryType; + typedef typename Base::WeakType KeyType; + + public: + // Allow WeakReferenceRegionKeyDictionary field to be inlined in classes with DEFINE_VTABLE_CTOR_MEMBER_INIT + WeakReferenceRegionKeyDictionary(VirtualTableInfoCtorEnum v): Base(v) { } + + WeakReferenceRegionKeyDictionary(Recycler* allocator, int capacity = 0) + : Base(allocator, capacity) + { + } + + template + void Map(Fn fn) + { + this->MapAndRemoveIf([=](EntryType& entry, KeyType& weakRef) { - entries[last].next = entries[i].next; - } - entries[i].Clear(); - SetNextFreeEntryIndex(entries[i], freeCount == 0 ? -1 : freeList); - freeList = i; - freeCount++; + if (weakRef == nullptr) + { + return true; + } + fn(weakRef, entry.Value(), weakRef); + return false; + }); + } + + bool Clean() + { + this->Cleanup(); + return this->freeCount > 0; } }; -#endif +#endif // ENABLE_WEAK_REFERENCE_REGIONS }; diff --git a/lib/Common/Exceptions/ReportError.cpp b/lib/Common/Exceptions/ReportError.cpp index fabb2e96b1a..e593c19abbc 100644 --- a/lib/Common/Exceptions/ReportError.cpp +++ b/lib/Common/Exceptions/ReportError.cpp @@ -4,7 +4,7 @@ //------------------------------------------------------------------------------------------------------- #include "CommonExceptionsPch.h" -// Disable inline so that _ReturnAdddress() will get the address of the calling function. +// Disable inline so that _ReturnAddress() will get the address of the calling function. _NOINLINE void ReportFatalException( __in ULONG_PTR context, diff --git a/lib/Common/Exceptions/Throw.h b/lib/Common/Exceptions/Throw.h index 72c1bbfa7dd..d92cfcdae8d 100644 --- a/lib/Common/Exceptions/Throw.h +++ b/lib/Common/Exceptions/Throw.h @@ -210,10 +210,10 @@ namespace Js { #define GET_RUNTIME_ERROR_IMPL(hr, GetRuntimeErrorFunc, exceptionObject) \ { \ Js::Var errorObject = exceptionObject->GetThrownObject(nullptr); \ - if (errorObject != nullptr && (Js::JavascriptError::Is(errorObject) || \ + if (errorObject != nullptr && (Js::VarIs(errorObject) || \ Js::JavascriptError::IsRemoteError(errorObject))) \ { \ - hr = GetRuntimeErrorFunc(Js::RecyclableObject::FromVar(errorObject), nullptr); \ + hr = GetRuntimeErrorFunc(Js::VarTo(errorObject), nullptr); \ } \ else if (errorObject != nullptr) \ { \ diff --git a/lib/Common/Memory/Allocator.h b/lib/Common/Memory/Allocator.h index 5a3a099bc4f..803ee2bd0a4 100644 --- a/lib/Common/Memory/Allocator.h +++ b/lib/Common/Memory/Allocator.h @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #pragma once @@ -448,6 +449,8 @@ void AssertValue(void * mem, T value, uint byteCount) #define NO_EXPORT(x) x #endif +#if defined(_MSC_VER) && !defined(__clang__) + // For the debugger extension, we don't need the placement news #ifndef __PLACEMENT_NEW_INLINE #define __PLACEMENT_NEW_INLINE @@ -473,6 +476,14 @@ void * previousAllocation // Previously allocated memory #endif +#else + +// Use std inline placement new instead of custom +// See PR #7009 +#include + +#endif + //---------------------------------------- // throwing operator new overrides //---------------------------------------- diff --git a/lib/Common/Memory/AllocatorTelemetryStats.h b/lib/Common/Memory/AllocatorTelemetryStats.h index b0c8d5e5933..8f6b17aa110 100644 --- a/lib/Common/Memory/AllocatorTelemetryStats.h +++ b/lib/Common/Memory/AllocatorTelemetryStats.h @@ -42,4 +42,4 @@ struct AllocatorSizes size_t reservedBytes; size_t committedBytes; size_t numberOfSegments; -}; \ No newline at end of file +}; diff --git a/lib/Common/Memory/BucketStatsReporter.h b/lib/Common/Memory/BucketStatsReporter.h index be2a0490490..d75069ed4d1 100644 --- a/lib/Common/Memory/BucketStatsReporter.h +++ b/lib/Common/Memory/BucketStatsReporter.h @@ -188,4 +188,4 @@ class BucketStatsReporter #endif }; -}; \ No newline at end of file +}; diff --git a/lib/Common/Memory/CMakeLists.txt b/lib/Common/Memory/CMakeLists.txt index 7d141d2eca8..775c658aa77 100644 --- a/lib/Common/Memory/CMakeLists.txt +++ b/lib/Common/Memory/CMakeLists.txt @@ -45,6 +45,11 @@ if(CC_TARGETS_AMD64) amd64/XDataAllocator.cpp amd64/amd64_SAVE_REGISTERS.S ) +elseif(CC_TARGETS_ARM64) + set (CCM_SOURCE_FILES ${CCM_SOURCE_FILES} + arm64/XDataAllocator.cpp + arm64/arm64_SAVE_REGISTERS.S + ) elseif(CC_TARGETS_ARM) set (CCM_SOURCE_FILES ${CCM_SOURCE_FILES} arm/XDataAllocator.cpp diff --git a/lib/Common/Memory/CollectionState.h b/lib/Common/Memory/CollectionState.h index 4f14c4b9882..d0f403cf71e 100644 --- a/lib/Common/Memory/CollectionState.h +++ b/lib/Common/Memory/CollectionState.h @@ -102,4 +102,4 @@ enum CollectionState CollectionStateConcurrentMarkWeakRef = Collection_ConcurrentMark | Collection_ExecutingConcurrent | Collection_WeakRefMark, }; -} \ No newline at end of file +} diff --git a/lib/Common/Memory/CustomHeap.cpp b/lib/Common/Memory/CustomHeap.cpp index 6cc8bcc774e..12a30e7aa25 100644 --- a/lib/Common/Memory/CustomHeap.cpp +++ b/lib/Common/Memory/CustomHeap.cpp @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #include "CommonMemoryPch.h" @@ -294,7 +295,11 @@ BOOL Heap::ProtectAllocationWithExecuteReadWrite(Allo } else { + #if defined(__APPLE__) && defined(_M_ARM64) + protectFlags = PAGE_READWRITE; // PAGE_EXECUTE_READWRITE banned on Apple Silicon + #else protectFlags = PAGE_EXECUTE_READWRITE; + #endif } return this->ProtectAllocation(allocation, protectFlags, PAGE_EXECUTE_READ, addressInPage); } @@ -311,7 +316,11 @@ BOOL Heap::ProtectAllocationWithExecuteReadOnly(__in { protectFlags = PAGE_EXECUTE_READ; } + #if defined(__APPLE__) && defined(_M_ARM64) + return this->ProtectAllocation(allocation, protectFlags, PAGE_READWRITE, addressInPage); // PAGE_EXECUTE_READWRITE banned on Apple Silicon + #else return this->ProtectAllocation(allocation, protectFlags, PAGE_EXECUTE_READWRITE, addressInPage); + #endif } template @@ -1210,4 +1219,4 @@ CodePageAllocators::FreeLoc } // namespace CustomHeap } // namespace Memory -#endif // ENABLE_NATIVE_CODEGEN || DYNAMIC_INTERPRETER_THUNK \ No newline at end of file +#endif // ENABLE_NATIVE_CODEGEN || DYNAMIC_INTERPRETER_THUNK diff --git a/lib/Common/Memory/HeapBlock.cpp b/lib/Common/Memory/HeapBlock.cpp index c44d484ee9c..8c00c23252b 100644 --- a/lib/Common/Memory/HeapBlock.cpp +++ b/lib/Common/Memory/HeapBlock.cpp @@ -3,7 +3,7 @@ // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #include "CommonMemoryPch.h" -#ifdef __clang__ +#if defined(__clang__) && !defined(_MSC_VER) #include #endif @@ -884,7 +884,7 @@ void HeapBlock::PrintVerifyMarkFailure(Recycler* recycler, char* objectAddress, if (Recycler::DoProfileAllocTracker()) { // need CheckMemoryLeak or KeepRecyclerTrackData flag to have the tracker data and show following detailed info -#ifdef __clang__ +#if defined(__clang__) && !defined(_MSC_VER) auto getDemangledName = [](const type_info* typeinfo) ->const char* { int status; diff --git a/lib/Common/Memory/HeapBlock.h b/lib/Common/Memory/HeapBlock.h index 899fb08e241..9f44342af2e 100644 --- a/lib/Common/Memory/HeapBlock.h +++ b/lib/Common/Memory/HeapBlock.h @@ -387,7 +387,7 @@ class HeapBlock Assert(GetHeapBlockType() <= HeapBlock::HeapBlockType::BlockTypeCount); } - HeapBlockType const GetHeapBlockType() const + HeapBlockType GetHeapBlockType() const { return (heapBlockType); } diff --git a/lib/Common/Memory/HeapBucket.cpp b/lib/Common/Memory/HeapBucket.cpp index f87e7bd2153..31493687095 100644 --- a/lib/Common/Memory/HeapBucket.cpp +++ b/lib/Common/Memory/HeapBucket.cpp @@ -1470,7 +1470,7 @@ The sequence of things we do to allow allocations during concurrent sweep is des 1. At the beginning of concurrrent sweep we decide if we will benefit from allowing allocations during concurrent sweep for any of the buckets. If there is at-least one bucket for which we think we will benefit we will turn on allocations during concurrent sweep. Once turned on we will attempt to enable allocations during concurrent sweep -for all supported buckets (i.e. small/medium, normal/leaf, non-finalizable buckets.write barrrier bickets are supported +for all supported buckets (i.e. small/medium, normal/leaf, non-finalizable buckets.write barrier buckets are supported as well.). 2. If allocations are turned on during concurrent sweep, we will see if there are any allocable blocks in the heapBlockList after the nextAllocableBlockHead. If we find any such blocks, we move them to a SLIST that the @@ -2425,7 +2425,7 @@ template void HeapBucketGroup::StartAllocationDuringConcurrentSweep() { - // If there were no allocable heap blocks we would not have started alllocations. Stop allocations, only if we started allocations for each of these buckets. + // If there were no allocable heap blocks we would not have started allocations. Stop allocations, only if we started allocations for each of these buckets. if (heapBucket.IsAllocationStopped()) { heapBucket.StartAllocationDuringConcurrentSweep(); diff --git a/lib/Common/Memory/HeapBucket.h b/lib/Common/Memory/HeapBucket.h index ea52efefd18..377c902190f 100644 --- a/lib/Common/Memory/HeapBucket.h +++ b/lib/Common/Memory/HeapBucket.h @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #pragma once @@ -22,8 +23,8 @@ class GenericRecyclerVerifyListConsistencyData bool hasSetupVerifyListConsistencyData; SmallHeapBlockT * nextAllocableBlockHead; - template - void SetupVerifyListConsistencyData(SmallHeapBlockT* block, bool expectFull, bool expectDispose) + template + void SetupVerifyListConsistencyData(SmallHeapBlockT* block, bool expectFull, bool expectDispose) { this->nextAllocableBlockHead = block; this->expectFull = expectFull; diff --git a/lib/Common/Memory/HeapBucketStats.cpp b/lib/Common/Memory/HeapBucketStats.cpp index 4cf258a85a5..e0ad9ba05e8 100644 --- a/lib/Common/Memory/HeapBucketStats.cpp +++ b/lib/Common/Memory/HeapBucketStats.cpp @@ -3,9 +3,6 @@ // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #include "CommonMemoryPch.h" -#ifdef __clang__ -#include -#endif #if ENABLE_MEM_STATS MemStats::MemStats() diff --git a/lib/Common/Memory/HeapInfo.h b/lib/Common/Memory/HeapInfo.h index c53b1609001..3d3e133daf1 100644 --- a/lib/Common/Memory/HeapInfo.h +++ b/lib/Common/Memory/HeapInfo.h @@ -73,7 +73,7 @@ class HeapInfo template bool IsPageHeapEnabledForBlock(const size_t objectSize); #else - const bool IsPageHeapEnabled() const{ return false; } + bool IsPageHeapEnabled() const{ return false; } #endif #if ENABLE_MEM_STATS diff --git a/lib/Common/Memory/HeapInfoManager.h b/lib/Common/Memory/HeapInfoManager.h index 948a25db9a7..39e570cd7c1 100644 --- a/lib/Common/Memory/HeapInfoManager.h +++ b/lib/Common/Memory/HeapInfoManager.h @@ -210,4 +210,4 @@ class HeapInfoManager size_t unusedPartialCollectFreeBytes; #endif }; -} \ No newline at end of file +} diff --git a/lib/Common/Memory/LargeHeapBlock.cpp b/lib/Common/Memory/LargeHeapBlock.cpp index 1ecce02b783..46e6a3f3b04 100644 --- a/lib/Common/Memory/LargeHeapBlock.cpp +++ b/lib/Common/Memory/LargeHeapBlock.cpp @@ -1113,7 +1113,7 @@ LargeHeapBlock::ScanInitialImplicitRoots(Recycler * recycler) size_t objectSize = header->objectSize; // trim off the trailing part which is not a pointer objectSize = HeapInfo::RoundObjectSize(objectSize); - if (objectSize > 0) // otherwize the object total size is less than a pointer size + if (objectSize > 0) // otherwise the object total size is less than a pointer size { recycler->ScanObjectInlineInterior((void **)objectAddress, objectSize); } @@ -1170,7 +1170,7 @@ LargeHeapBlock::ScanNewImplicitRoots(Recycler * recycler) size_t objectSize = header->objectSize; // trim off the trailing part which is not a pointer objectSize = HeapInfo::RoundObjectSize(objectSize); - if (objectSize > 0) // otherwize the object total size is less than a pointer size + if (objectSize > 0) // otherwise the object total size is less than a pointer size { recycler->ScanObjectInlineInterior((void **)objectAddress, objectSize); } @@ -1321,7 +1321,7 @@ LargeHeapBlock::RescanOnePage(Recycler * recycler) objectSize = HeapInfo::RoundObjectSize(objectSize); } #endif - if (objectSize > 0) // otherwize the object total size is less than a pointer size + if (objectSize > 0) // otherwise the object total size is less than a pointer size { bool noOOMDuringMark = true; #ifdef RECYCLER_VISITED_HOST diff --git a/lib/Common/Memory/Recycler.cpp b/lib/Common/Memory/Recycler.cpp index 3dd06207a69..d3ca52b4fc5 100644 --- a/lib/Common/Memory/Recycler.cpp +++ b/lib/Common/Memory/Recycler.cpp @@ -52,18 +52,7 @@ DefaultRecyclerCollectionWrapper::IsCollectionDisabled(Recycler * recycler) if (collectionDisabled) { // disabled collection should only happen if we allowed allocation during heap enum - if (recycler->IsHeapEnumInProgress()) - { - Assert(recycler->AllowAllocationDuringHeapEnum()); - } - else - { -#ifdef ENABLE_PROJECTION - Assert(recycler->IsInRefCountTrackingForProjection()); -#else - Assert(false); -#endif - } + Assert(recycler->IsHeapEnumInProgress() && recycler->AllowAllocationDuringHeapEnum()); } #endif return collectionDisabled; @@ -192,6 +181,7 @@ Recycler::Recycler(AllocationPolicyManager * policyManager, IdleDecommitPageAllo inDisposeWrapper(false), hasDisposableObject(false), hasNativeGCHost(false), + needExternalWrapperTracing(false), tickCountNextDispose(0), transientPinnedObject(nullptr), pinnedObjectMap(1024, HeapAllocator::GetNoMemProtectInstance()), @@ -247,8 +237,9 @@ Recycler::Recycler(AllocationPolicyManager * policyManager, IdleDecommitPageAllo , capturePageHeapAllocStack(false) , capturePageHeapFreeStack(false) #endif - , objectBeforeCollectCallbackMap(nullptr) + , objectBeforeCollectCallbackList(nullptr) , objectBeforeCollectCallbackState(ObjectBeforeCollectCallback_None) + , objectBeforeCollectCallbackArena(_u("BeforeCollect-List"), pageAllocator, Js::Throw::OutOfMemory) #if GLOBAL_ENABLE_WRITE_BARRIER , pendingWriteBarrierBlockMap(&HeapAllocator::Instance) #endif @@ -308,7 +299,6 @@ Recycler::Recycler(AllocationPolicyManager * policyManager, IdleDecommitPageAllo #endif #if DBG || defined RECYCLER_TRACE this->collectionCount = 0; - this->inResolveExternalWeakReferences = false; #endif #if DBG || defined(RECYCLER_STATS) isForceSweeping = false; @@ -325,9 +315,6 @@ Recycler::Recycler(AllocationPolicyManager * policyManager, IdleDecommitPageAllo #if DBG allowAllocationDuringRenentrance = false; allowAllocationDuringHeapEnum = false; -#ifdef ENABLE_PROJECTION - isInRefCountTrackingForProjection = false; -#endif #endif ScheduleNextCollection(); #if defined(RECYCLER_DUMP_OBJECT_GRAPH) || defined(LEAK_REPORT) || defined(CHECK_MEMORY_LEAK) @@ -950,6 +937,18 @@ Recycler::SetHasNativeGCHost() this->hasNativeGCHost = true; } +void +Recycler::SetNeedExternalWrapperTracing() +{ + this->needExternalWrapperTracing = true; +} + +void +Recycler::ClearNeedExternalWrapperTracing() +{ + this->needExternalWrapperTracing = false; +} + bool Recycler::NeedOOMRescan() const { @@ -1843,19 +1842,6 @@ Recycler::FindRoots() RECYCLER_PROFILE_EXEC_BEGIN(this, Js::FindRootPhase); -#ifdef ENABLE_PROJECTION - { - AUTO_TIMESTAMP(externalWeakReferenceObjectResolve); - BEGIN_DUMP_OBJECT(this, _u("External Weak Referenced Roots")); - Assert(!this->IsInRefCountTrackingForProjection()); -#if DBG - AutoIsInRefCountTrackingForProjection autoIsInRefCountTrackingForProjection(this); -#endif - collectionWrapper->MarkExternalWeakReferencedObjects(this->inPartialCollectMode); - END_DUMP_OBJECT(this); - } -#endif - // go through ITracker* stuff. Don't need to do it if we are doing a partial collection // as we keep track and mark all trackable objects. // Do this first because the host might unpin stuff in the process @@ -2117,6 +2103,13 @@ Recycler::CheckAllocExternalMark() const } #endif +void +Recycler::TryExternalMarkNonInterior(void* candidate) +{ + Assert(!this->IsConcurrentExecutingState()); + this->TryMarkNonInterior(candidate); +} + void Recycler::TryMarkNonInterior(void* candidate, void* parentReference) { @@ -2528,6 +2521,7 @@ Recycler::DoParallelMark() if (actualSplitCount == 0) { this->ProcessMark(false); + return; } @@ -2773,6 +2767,23 @@ Recycler::EndMarkCheckOOMRescan() return oomRescan; } +void +Recycler::FinishWrapperObjectTracing() +{ + //TODO:akatti:Add ETW event for this. + // Tracing would have generated more work for mark and marking might generate more work for tracing. + // We continue until we find no more pending tracing work. + do + { + this->collectionWrapper->EndMarkDomWrapperTracingCallback(); + this->ProcessMark(false); + } while (!this->collectionWrapper->EndMarkDomWrapperTracingDoneCallback()); + + // This is just to wait until tracing has finished. + this->collectionWrapper->EndMarkDomWrapperTracingCallback(); + this->ClearNeedExternalWrapperTracing(); +} + bool Recycler::EndMark() { @@ -2786,6 +2797,12 @@ Recycler::EndMark() { // We have finished marking AUTO_NO_EXCEPTION_REGION; + if (this->needExternalWrapperTracing) + { + this->collectionWrapper->EndMarkDomWrapperTracingEnterFinalPauseCallback(); + this->FinishWrapperObjectTracing(); + } + collectionWrapper->EndMarkCallback(); } @@ -2888,8 +2905,15 @@ Recycler::EndMarkOnLowMemory() } #endif - // Drain the mark stack - ProcessMark(false); + // Drain the mark stack along with any required DOM wrapper tracing. + if (this->needExternalWrapperTracing) + { + this->FinishWrapperObjectTracing(); + } + else + { + this->ProcessMark(false); + } #ifdef ENABLE_DEBUG_CONFIG_OPTIONS iterations++; @@ -2937,7 +2961,14 @@ Recycler::PostHeapEnumScan(PostHeapEnumScanCallback callback, void *data) this->postHeapEnunScanData = data; FindRoots(); - ProcessMark(false); + if (this->needExternalWrapperTracing) + { + this->FinishWrapperObjectTracing(); + } + else + { + this->ProcessMark(false); + } this->pfPostHeapEnumScanCallback = NULL; this->postHeapEnunScanData = NULL; @@ -3381,21 +3412,6 @@ Recycler::DisposeObjects() } #endif -#ifdef ENABLE_PROJECTION - { - Assert(!this->inResolveExternalWeakReferences); - Assert(!this->allowDispose); -#if DBG || defined RECYCLER_TRACE - AutoRestoreValue inResolveExternalWeakReferencedObjects(&this->inResolveExternalWeakReferences, true); -#endif - AUTO_TIMESTAMP(externalWeakReferenceObjectResolve); - - // This is where it is safe to resolve external weak references as they can lead to new script entry - collectionWrapper->ResolveExternalWeakReferencedObjects(); - } -#endif - - Assert(!this->inResolveExternalWeakReferences); Assert(this->inDispose); this->inDispose = false; @@ -6482,7 +6498,11 @@ Recycler::DoTwoPassConcurrentSweepPreCheck() // SLIST during concurrent sweep. // 2. We are not in a Partial GC. // 3. At-least one heap bucket exceeds the RecyclerHeuristic::AllocDuringConcurrentSweepHeapBlockThreshold. - this->allowAllocationsDuringConcurrentSweepForCollection = this->isInScript && !this->recyclerSweepManager->InPartialCollect(); + bool inPartialCollect = false; +#if ENABLE_PARTIAL_GC + inPartialCollect = this->recyclerSweepManager->InPartialCollect(); +#endif + this->allowAllocationsDuringConcurrentSweepForCollection = this->isInScript && !inPartialCollect; // Do the actual 2-pass check only if the first 2 checks pass. if (this->allowAllocationsDuringConcurrentSweepForCollection) @@ -8951,25 +8971,58 @@ void Recycler::SetObjectBeforeCollectCallback(void* object, return; // NOP at shutdown } - if (objectBeforeCollectCallbackMap == nullptr) + if (this->objectBeforeCollectCallbackList == nullptr) { if (callback == nullptr) return; - objectBeforeCollectCallbackMap = HeapNew(ObjectBeforeCollectCallbackMap, &HeapAllocator::Instance); + this->objectBeforeCollectCallbackList = Anew(&this->objectBeforeCollectCallbackArena, ObjectBeforeCollectCallbackList, &this->objectBeforeCollectCallbackArena); } - // only allow 1 callback per object - objectBeforeCollectCallbackMap->Item(object, ObjectBeforeCollectCallbackData(callbackWrapper, callback, callbackState, threadContext)); + if (callback) + { + this->objectBeforeCollectCallbackList->Push(ObjectBeforeCollectCallbackData(object, callbackWrapper, callback, callbackState, threadContext)); - if (callback != nullptr && this->IsInObjectBeforeCollectCallback()) // revive + if (this->IsInObjectBeforeCollectCallback()) // revive + { + this->ScanMemory(&object, sizeof(object)); + this->ProcessMark(/*background*/false); + } + } + else { - this->ScanMemory(&object, sizeof(object)); - this->ProcessMark(/*background*/false); + // null callback means unregister + FOREACH_SLIST_ENTRY_EDITING(ObjectBeforeCollectCallbackData, callbackData, this->objectBeforeCollectCallbackList, iter) + { + if (callbackData.object == object) + { + iter.RemoveCurrent(); + } + } NEXT_SLIST_ENTRY_EDITING; } + +} + +void Recycler::SetDOMWrapperTracingCallback(void * state, DOMWrapperTracingCallback tracingCallback, DOMWrapperTracingDoneCallback tracingDoneCallback, DOMWrapperTracingEnterFinalPauseCallback enterFinalPauseCallback) +{ + Assert(state); + Assert(tracingCallback); + Assert(enterFinalPauseCallback); + this->collectionWrapper->SetWrapperTracingCallbackState(state); + this->collectionWrapper->SetDOMWrapperTracingCallback(tracingCallback); + this->collectionWrapper->SetDOMWrapperTracingDoneCallback(tracingDoneCallback); + this->collectionWrapper->SetDOMWrapperTracingEnterFinalPauseCallback(enterFinalPauseCallback); +} + +void Recycler::ClearDOMWrapperTracingCallback() +{ + this->collectionWrapper->SetWrapperTracingCallbackState(nullptr); + this->collectionWrapper->SetDOMWrapperTracingCallback(nullptr); + this->collectionWrapper->SetDOMWrapperTracingDoneCallback(nullptr); + this->collectionWrapper->SetDOMWrapperTracingEnterFinalPauseCallback(nullptr); } bool Recycler::ProcessObjectBeforeCollectCallbacks(bool atShutdown/*= false*/) { - if (this->objectBeforeCollectCallbackMap == nullptr) + if (this->objectBeforeCollectCallbackList == nullptr) { return false; // no callbacks } @@ -8977,21 +9030,21 @@ bool Recycler::ProcessObjectBeforeCollectCallbacks(bool atShutdown/*= false*/) Assert(!this->IsInObjectBeforeCollectCallback()); AutoRestoreValue autoInObjectBeforeCollectCallback(&objectBeforeCollectCallbackState, - atShutdown ? ObjectBeforeCollectCallback_Shutdown: ObjectBeforeCollectCallback_Normal); + atShutdown ? ObjectBeforeCollectCallback_Shutdown : ObjectBeforeCollectCallback_Normal); // The callbacks may register/unregister callbacks while we are enumerating the current map. To avoid // conflicting usage of the callback map, we swap it out. New registration will go to a new map. - AutoAllocatorObjectPtr oldCallbackMap( - this->objectBeforeCollectCallbackMap, &HeapAllocator::Instance); - this->objectBeforeCollectCallbackMap = nullptr; + AutoAllocatorObjectPtr oldCallbackList( + this->objectBeforeCollectCallbackList, &this->objectBeforeCollectCallbackArena); + this->objectBeforeCollectCallbackList = nullptr; bool hasRemainingCallbacks = false; - oldCallbackMap->MapAndRemoveIf([&](const ObjectBeforeCollectCallbackMap::EntryType& entry) + FOREACH_SLIST_ENTRY_EDITING(ObjectBeforeCollectCallbackData, data, oldCallbackList, iter) { - const ObjectBeforeCollectCallbackData& data = entry.Value(); + bool remove = true; if (data.callback != nullptr) { - void* object = entry.Key(); + void* object = data.object; if (atShutdown || !this->IsObjectMarked(object)) { if (data.callbackWrapper != nullptr) @@ -9006,34 +9059,42 @@ bool Recycler::ProcessObjectBeforeCollectCallbacks(bool atShutdown/*= false*/) else { hasRemainingCallbacks = true; - return false; // Do not remove this entry, remaining callback for future + remove = false; // Do not remove this entry, remaining callback for future } } - - return true; // Remove this entry - }); + if (remove) + { + iter.RemoveCurrent(); + } + } NEXT_SLIST_ENTRY_EDITING; // Merge back remaining callbacks if any if (hasRemainingCallbacks) { - if (this->objectBeforeCollectCallbackMap == nullptr) + if (this->objectBeforeCollectCallbackList == nullptr) { - this->objectBeforeCollectCallbackMap = oldCallbackMap.Detach(); + this->objectBeforeCollectCallbackList = oldCallbackList.Detach(); } else { - if (oldCallbackMap->Count() > this->objectBeforeCollectCallbackMap->Count()) + // Swap back, since old list is likely larger + ObjectBeforeCollectCallbackList* tmp = oldCallbackList.Detach(); + *&oldCallbackList = this->objectBeforeCollectCallbackList; + this->objectBeforeCollectCallbackList = tmp; + + try { - // Swap so that oldCallbackMap is the smaller one - ObjectBeforeCollectCallbackMap* tmp = oldCallbackMap.Detach(); - *&oldCallbackMap = this->objectBeforeCollectCallbackMap; - this->objectBeforeCollectCallbackMap = tmp; + AUTO_NESTED_HANDLED_EXCEPTION_TYPE(ExceptionType_OutOfMemory); + oldCallbackList->Map([&](const ObjectBeforeCollectCallbackData& data) + { + this->objectBeforeCollectCallbackList->Push(data); + }); } - - oldCallbackMap->Map([&](void* object, const ObjectBeforeCollectCallbackData& data) + catch (Js::OutOfMemoryException) { - this->objectBeforeCollectCallbackMap->Item(object, data); - }); + // can't recover from OOM here + AssertOrFailFast(UNREACHED); + } } } @@ -9044,7 +9105,7 @@ void Recycler::ClearObjectBeforeCollectCallbacks() { // This is called at shutting down. All objects will be gone. Invoke each registered callback if any. ProcessObjectBeforeCollectCallbacks(/*atShutdown*/true); - Assert(objectBeforeCollectCallbackMap == nullptr); + Assert(objectBeforeCollectCallbackList == nullptr); } #ifdef RECYCLER_TEST_SUPPORT diff --git a/lib/Common/Memory/Recycler.h b/lib/Common/Memory/Recycler.h index 377ccdf7fdd..4cc2ca9b7b2 100644 --- a/lib/Common/Memory/Recycler.h +++ b/lib/Common/Memory/Recycler.h @@ -139,6 +139,8 @@ class RecyclerWeakReferenceRegionItem { heapBlock = nullptr; return ptr = newPtr; }; + + void Clear() { heapBlock = nullptr; ptr = nullptr; }; private: RecyclerWeakReferenceRegionItem(RecyclerWeakReferenceRegionItem&) = delete; @@ -175,6 +177,7 @@ class RecyclerWeakReferenceRegion { #define RecyclerNewFinalized(recycler,T,...) static_cast(static_cast(AllocatorNewBase(Recycler, recycler, AllocFinalizedInlined, T, __VA_ARGS__))) #define RecyclerNewFinalizedPlus(recycler, size, T,...) static_cast(static_cast(AllocatorNewPlusBase(Recycler, recycler, AllocFinalized, size, T, __VA_ARGS__))) #define RecyclerNewTracked(recycler,T,...) static_cast(static_cast(AllocatorNewBase(Recycler, recycler, AllocTrackedInlined, T, __VA_ARGS__))) +#define RecyclerNewTrackedPlus(recycler, size, T,...) static_cast(static_cast(AllocatorNewPlusBase(Recycler, recycler, AllocTracked, size, T, __VA_ARGS__))) #define RecyclerNewEnumClass(recycler, enumClass, T, ...) new (TRACK_ALLOC_INFO(static_cast(recycler), T, Recycler, 0, (size_t)-1), InfoBitsWrapper()) T(__VA_ARGS__) #define RecyclerNewWithInfoBits(recycler, infoBits, T, ...) new (TRACK_ALLOC_INFO(static_cast(recycler), T, Recycler, 0, (size_t)-1), InfoBitsWrapper()) T(__VA_ARGS__) #define RecyclerNewFinalizedClientTracked(recycler,T,...) static_cast(static_cast(AllocatorNewBase(Recycler, recycler, AllocFinalizedClientTrackedInlined, T, __VA_ARGS__))) @@ -302,6 +305,10 @@ class RecyclerWeakReferenceRegion { typedef void (__cdecl* ExternalRootMarker)(void *); +typedef void (*DOMWrapperTracingCallback)(_In_opt_ void *data); +typedef bool (*DOMWrapperTracingDoneCallback)(_In_opt_ void *data); +typedef void (*DOMWrapperTracingEnterFinalPauseCallback)(_In_opt_ void *data); + class RecyclerCollectionWrapper { public: @@ -330,10 +337,6 @@ class RecyclerCollectionWrapper #endif virtual void DisposeObjects(Recycler * recycler) = 0; virtual void PreDisposeObjectsCallBack() = 0; -#ifdef ENABLE_PROJECTION - virtual void MarkExternalWeakReferencedObjects(bool inPartialCollect) = 0; - virtual void ResolveExternalWeakReferencedObjects() = 0; -#endif #if DBG || defined(PROFILE_EXEC) virtual bool AsyncHostOperationStart(void *) = 0; virtual void AsyncHostOperationEnd(bool wasInAsync, void *) = 0; @@ -357,8 +360,58 @@ class RecyclerCollectionWrapper _isScriptContextCloseGCPending = TRUE; } + void SetDOMWrapperTracingCallback(DOMWrapperTracingCallback callback) + { + wrapperTracingCallback = callback; + } + + void SetWrapperTracingCallbackState(void * state) + { + wrapperTracingCallbackState = state; + } + + void SetDOMWrapperTracingEnterFinalPauseCallback(DOMWrapperTracingEnterFinalPauseCallback callback) + { + wrapperTracingEnterFinalPauseCallback = callback; + } + + void SetDOMWrapperTracingDoneCallback(DOMWrapperTracingDoneCallback callback) + { + wrapperTracingDoneCallback = callback; + } + + void EndMarkDomWrapperTracingCallback() + { + if (this->wrapperTracingCallback) + { + this->wrapperTracingCallback(this->wrapperTracingCallbackState); + } + } + + bool EndMarkDomWrapperTracingDoneCallback() + { + if (this->wrapperTracingDoneCallback) + { + return this->wrapperTracingDoneCallback(this->wrapperTracingCallbackState); + } + + return true; + } + + void EndMarkDomWrapperTracingEnterFinalPauseCallback() + { + if (this->wrapperTracingEnterFinalPauseCallback) + { + this->wrapperTracingEnterFinalPauseCallback(this->wrapperTracingCallbackState); + } + } + protected: BOOL _isScriptContextCloseGCPending; + void * wrapperTracingCallbackState; + DOMWrapperTracingCallback wrapperTracingCallback; + DOMWrapperTracingDoneCallback wrapperTracingDoneCallback; + DOMWrapperTracingEnterFinalPauseCallback wrapperTracingEnterFinalPauseCallback; }; class DefaultRecyclerCollectionWrapper : public RecyclerCollectionWrapper @@ -383,11 +436,6 @@ class DefaultRecyclerCollectionWrapper : public RecyclerCollectionWrapper #endif virtual void DisposeObjects(Recycler * recycler) override; virtual void PreDisposeObjectsCallBack() override {}; - -#ifdef ENABLE_PROJECTION - virtual void MarkExternalWeakReferencedObjects(bool inPartialCollect) override {}; - virtual void ResolveExternalWeakReferencedObjects() override {}; -#endif #if DBG || defined(PROFILE_EXEC) virtual bool AsyncHostOperationStart(void *) override { return false; }; virtual void AsyncHostOperationEnd(bool wasInAsync, void *) override {}; @@ -809,7 +857,7 @@ class Recycler inline bool ShouldCapturePageHeapAllocStack() const { return capturePageHeapAllocStack; } void VerifyPageHeapFillAfterAlloc(char* memBlock, size_t size, ObjectInfoBits attributes); #else - inline const bool IsPageHeapEnabled() const { return false; } + inline bool IsPageHeapEnabled() const { return false; } inline bool ShouldCapturePageHeapAllocStack() const { return false; } #endif @@ -906,12 +954,12 @@ class Recycler #if DBG || defined RECYCLER_TRACE uint collectionCount; - bool inResolveExternalWeakReferences; #endif bool allowDispose; bool inDisposeWrapper; bool needOOMRescan; + bool needExternalWrapperTracing; bool hasDisposableObject; bool hasNativeGCHost; DWORD tickCountNextDispose; @@ -1152,7 +1200,7 @@ class Recycler #ifdef NTBUILD void SetTelemetryBlock(RecyclerWatsonTelemetryBlock * telemetryBlock) { this->telemetryBlock = telemetryBlock; } #endif - + uint GetPinnedObjectCount() const { return this->pinnedObjectMap.Count(); } void Prime(); @@ -1176,6 +1224,8 @@ class Recycler void SetIsInScript(bool isInScript); bool HasNativeGCHost() const; void SetHasNativeGCHost(); + void SetNeedExternalWrapperTracing(); + void ClearNeedExternalWrapperTracing(); bool ShouldIdleCollectOnExit(); void ScheduleNextCollection(); @@ -1206,6 +1256,7 @@ class Recycler #endif // FindRoots + void TryExternalMarkNonInterior(void * candidate); void TryMarkNonInterior(void* candidate, void* parentReference = nullptr); void TryMarkInterior(void *candidate, void* parentReference = nullptr); @@ -1599,6 +1650,7 @@ class Recycler void DoParallelMark(); void DoBackgroundParallelMark(); #endif + void FinishWrapperObjectTracing(); size_t RootMark(CollectionState markState); @@ -1842,9 +1894,6 @@ class Recycler #if DBG bool allowAllocationDuringHeapEnum; bool allowAllocationDuringRenentrance; -#ifdef ENABLE_PROJECTION - bool isInRefCountTrackingForProjection; -#endif #endif // There are two scenarios we allow limited allocation but disallow GC during those allocations: // in heapenum when we allocate PropertyRecord, and @@ -1972,15 +2021,6 @@ class Recycler public: AutoAllowAllocationDuringHeapEnum(Recycler * recycler) : AutoBooleanToggle(&recycler->allowAllocationDuringHeapEnum) {}; }; - -#ifdef ENABLE_PROJECTION - bool IsInRefCountTrackingForProjection() const { return isInRefCountTrackingForProjection;} - class AutoIsInRefCountTrackingForProjection : public AutoBooleanToggle - { - public: - AutoIsInRefCountTrackingForProjection(Recycler * recycler) : AutoBooleanToggle(&recycler->isInRefCountTrackingForProjection) {}; - }; -#endif #endif class AutoAllowAllocationDuringReentrance : public AutoBooleanToggle @@ -2039,22 +2079,25 @@ class Recycler ObjectBeforeCollectCallbackWrapper callbackWrapper, void* threadContext); void ClearObjectBeforeCollectCallbacks(); + void SetDOMWrapperTracingCallback(void * state, DOMWrapperTracingCallback tracingCallback, DOMWrapperTracingDoneCallback tracingDoneCallback, DOMWrapperTracingEnterFinalPauseCallback enterFinalPauseCallback); + void ClearDOMWrapperTracingCallback(); bool IsInObjectBeforeCollectCallback() const { return objectBeforeCollectCallbackState != ObjectBeforeCollectCallback_None; } private: struct ObjectBeforeCollectCallbackData { + void* object; ObjectBeforeCollectCallback callback; void* callbackState; void* threadContext; ObjectBeforeCollectCallbackWrapper callbackWrapper; ObjectBeforeCollectCallbackData() {} - ObjectBeforeCollectCallbackData(ObjectBeforeCollectCallbackWrapper callbackWrapper, ObjectBeforeCollectCallback callback, void* callbackState, void* threadContext) : - callbackWrapper(callbackWrapper), callback(callback), callbackState(callbackState), threadContext(threadContext) {} + ObjectBeforeCollectCallbackData(void* object, ObjectBeforeCollectCallbackWrapper callbackWrapper, ObjectBeforeCollectCallback callback, void* callbackState, void* threadContext) : + object(object), callbackWrapper(callbackWrapper), callback(callback), callbackState(callbackState), threadContext(threadContext) {} }; - typedef JsUtil::BaseDictionary ObjectBeforeCollectCallbackMap; - ObjectBeforeCollectCallbackMap* objectBeforeCollectCallbackMap; + typedef SList ObjectBeforeCollectCallbackList; + ObjectBeforeCollectCallbackList* objectBeforeCollectCallbackList; + ArenaAllocator objectBeforeCollectCallbackArena; enum ObjectBeforeCollectCallbackState { diff --git a/lib/Common/Memory/Recycler.inl b/lib/Common/Memory/Recycler.inl index ca217acef41..df4dbf2300e 100644 --- a/lib/Common/Memory/Recycler.inl +++ b/lib/Common/Memory/Recycler.inl @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #pragma once @@ -587,8 +588,10 @@ SmallHeapBlockT::GetAddressBitIndex(void * objectAddress) { Assert(HeapInfo::IsAlignedAddress(objectAddress)); - ushort offset = (ushort)(::Math::PointerCastToIntegralTruncate(objectAddress) % (TBlockAttributes::PageCount * AutoSystemInfo::PageSize)); - offset = offset >> HeapConstants::ObjectAllocationShift; + ushort offset = (ushort)( + (::Math::PointerCastToIntegralTruncate(objectAddress) + % (TBlockAttributes::PageCount * AutoSystemInfo::PageSize)) + >> HeapConstants::ObjectAllocationShift); Assert(offset <= USHRT_MAX); Assert(offset <= TBlockAttributes::MaxAddressBit); diff --git a/lib/Common/Memory/RecyclerObjectGraphDumper.cpp b/lib/Common/Memory/RecyclerObjectGraphDumper.cpp index 0885df3fbc1..3a2f30d6619 100644 --- a/lib/Common/Memory/RecyclerObjectGraphDumper.cpp +++ b/lib/Common/Memory/RecyclerObjectGraphDumper.cpp @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #include "CommonMemoryPch.h" @@ -58,7 +59,7 @@ void RecyclerObjectGraphDumper::BeginDumpObject(void * objectAddress) { Assert(false); this->dumpObjectTypeInfo = nullptr; - this->dumpObjectIsArray = nullptr; + this->dumpObjectIsArray = false; } } #endif diff --git a/lib/Common/Memory/RecyclerSweep.cpp b/lib/Common/Memory/RecyclerSweep.cpp index f0fa2552856..cca2f663f20 100644 --- a/lib/Common/Memory/RecyclerSweep.cpp +++ b/lib/Common/Memory/RecyclerSweep.cpp @@ -160,9 +160,7 @@ RecyclerSweep::FlushPendingTransferDisposedObjects() { if (this->heapInfo->hasPendingTransferDisposedObjects) { - // If recycler->inResolveExternalWeakReferences is true, the recycler isn't really disposing anymore - // so it's safe to call transferDisposedObjects - Assert(!recycler->inDispose || recycler->inResolveExternalWeakReferences); + Assert(!recycler->inDispose); Assert(!recycler->hasDisposableObject); heapInfo->TransferDisposedObjects(); } diff --git a/lib/Common/Memory/RecyclerSweepManager.cpp b/lib/Common/Memory/RecyclerSweepManager.cpp index c5cbdac2c71..c4738e08b55 100644 --- a/lib/Common/Memory/RecyclerSweepManager.cpp +++ b/lib/Common/Memory/RecyclerSweepManager.cpp @@ -586,4 +586,4 @@ size_t RecyclerSweepManager::GetPendingMergeNewHeapBlockCount(HeapInfo const * h { return this->defaultHeapRecyclerSweep.GetPendingMergeNewHeapBlockCount(heapInfo); } -#endif \ No newline at end of file +#endif diff --git a/lib/Common/Memory/RecyclerSweepManager.h b/lib/Common/Memory/RecyclerSweepManager.h index 0efa07a0261..ec5e0f36bb8 100644 --- a/lib/Common/Memory/RecyclerSweepManager.h +++ b/lib/Common/Memory/RecyclerSweepManager.h @@ -97,4 +97,4 @@ RecyclerSweepManager::GetHeapBlockCount(HeapBucketT const * heapBuck return this->defaultHeapRecyclerSweep.GetHeapBlockCount(heapBucket); } #endif -}; \ No newline at end of file +}; diff --git a/lib/Common/Memory/RecyclerWatsonTelemetry.h b/lib/Common/Memory/RecyclerWatsonTelemetry.h index 0fadfa0e0b9..df98fb652ae 100644 --- a/lib/Common/Memory/RecyclerWatsonTelemetry.h +++ b/lib/Common/Memory/RecyclerWatsonTelemetry.h @@ -46,8 +46,6 @@ namespace Memory FILETIME concurrentMarkFinishTime; FILETIME disposeStartTime; FILETIME disposeEndTime; - FILETIME externalWeakReferenceObjectResolveStartTime; - FILETIME externalWeakReferenceObjectResolveEndTime; FILETIME currentCollectionEndTime; FILETIME lastCollectionEndTime; DWORD exhaustiveRepeatedCount; diff --git a/lib/Common/Memory/RecyclerWriteBarrierManager.h b/lib/Common/Memory/RecyclerWriteBarrierManager.h index 61d8ecf2dc8..7ffd8707f72 100644 --- a/lib/Common/Memory/RecyclerWriteBarrierManager.h +++ b/lib/Common/Memory/RecyclerWriteBarrierManager.h @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #pragma once @@ -211,10 +212,17 @@ class RecyclerWriteBarrierManager static DWORD GetWriteBarrier(void * address); #endif +#if defined(__APPLE__) && defined(_M_ARM64) + static size_t const s_WriteBarrierPageSize = 16384; + static uint const s_BitArrayCardTableShift = 9; + static uint const s_BytesPerCardBit = 1 << s_BitArrayCardTableShift; // 512 = 1 << 9 + static uint const s_BytesPerCard = s_BytesPerCardBit * 32; // 16k +#else static size_t const s_WriteBarrierPageSize = 4096; static uint const s_BitArrayCardTableShift = 7; static uint const s_BytesPerCardBit = 1 << s_BitArrayCardTableShift; // 128 = 1 << 7 static uint const s_BytesPerCard = s_BytesPerCardBit * 32; // 4K = 1 << 12 = 128 << 5 +#endif private: diff --git a/lib/Common/Memory/SmallFinalizableHeapBlock.cpp b/lib/Common/Memory/SmallFinalizableHeapBlock.cpp index 817901590ac..4b19c5aba08 100644 --- a/lib/Common/Memory/SmallFinalizableHeapBlock.cpp +++ b/lib/Common/Memory/SmallFinalizableHeapBlock.cpp @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #include "CommonMemoryPch.h" @@ -14,7 +15,7 @@ SmallFinalizableWithBarrierHeapBlockT::New(HeapBucketTsizeCat <= USHRT_MAX); ushort objectSize = (ushort)bucket->sizeCat; - ushort objectCount = (ushort)(TBlockAttributes::PageCount * AutoSystemInfo::PageSize) / objectSize; + ushort objectCount = (ushort)((TBlockAttributes::PageCount * AutoSystemInfo::PageSize) / objectSize); return NoMemProtectHeapNewNoThrowPlusPrefixZ(Base::GetAllocPlusSize(objectCount), SmallFinalizableWithBarrierHeapBlockT, bucket, objectSize, objectCount); } @@ -39,7 +40,7 @@ SmallRecyclerVisitedHostHeapBlockT::New(HeapBucketTsizeCat <= USHRT_MAX); ushort objectSize = (ushort)bucket->sizeCat; - ushort objectCount = (ushort)(TBlockAttributes::PageCount * AutoSystemInfo::PageSize) / objectSize; + ushort objectCount = (ushort)((TBlockAttributes::PageCount * AutoSystemInfo::PageSize) / objectSize); return NoMemProtectHeapNewNoThrowPlusPrefixZ(Base::GetAllocPlusSize(objectCount), SmallRecyclerVisitedHostHeapBlockT, bucket, objectSize, objectCount); } @@ -62,7 +63,7 @@ SmallFinalizableHeapBlockT::New(HeapBucketTsizeCat <= USHRT_MAX); ushort objectSize = (ushort)bucket->sizeCat; - ushort objectCount = (ushort)(TBlockAttributes::PageCount * AutoSystemInfo::PageSize) / objectSize; + ushort objectCount = (ushort)((TBlockAttributes::PageCount * AutoSystemInfo::PageSize) / objectSize); return NoMemProtectHeapNewNoThrowPlusPrefixZ(Base::GetAllocPlusSize(objectCount), SmallFinalizableHeapBlockT, bucket, objectSize, objectCount); } @@ -157,7 +158,7 @@ SmallRecyclerVisitedHostHeapBlockT::SetAttributes(void * addre // but recycler visited block allows traced only objects; it also unconditionally bumps the heap info // live/new finalizable object counts which will become unbalance if FinalizeBit is not set). // We do want the grandparent class behavior though, which actually sets the ObjectInfo bits. - SmallFinalizableHeapBlockT::Base::SetAttributes(address, attributes); + SmallNormalHeapBlockT::SetAttributes(address, attributes); if (attributes & FinalizeBit) { diff --git a/lib/Common/Memory/SmallFinalizableHeapBlock.h b/lib/Common/Memory/SmallFinalizableHeapBlock.h index b2baa766d37..c303d4e2510 100644 --- a/lib/Common/Memory/SmallFinalizableHeapBlock.h +++ b/lib/Common/Memory/SmallFinalizableHeapBlock.h @@ -177,7 +177,7 @@ class SmallRecyclerVisitedHostHeapBlockT : public SmallFinalizableHeapBlockTtemplate AsRecyclerVisitedHostBlock() : nullptr; } - virtual bool FindHeapObject(void* objectAddress, Recycler * recycler, FindHeapObjectFlags flags, RecyclerHeapObjectInfo& heapObject) override sealed + virtual bool FindHeapObject(void* objectAddress, Recycler * recycler, FindHeapObjectFlags flags, RecyclerHeapObjectInfo& heapObject) sealed { return this->template FindHeapObjectImpl>(objectAddress, recycler, flags, heapObject); } diff --git a/lib/Common/Memory/SmallLeafHeapBlock.cpp b/lib/Common/Memory/SmallLeafHeapBlock.cpp index d60e8f2a4ae..d6d21a835a9 100644 --- a/lib/Common/Memory/SmallLeafHeapBlock.cpp +++ b/lib/Common/Memory/SmallLeafHeapBlock.cpp @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #include "CommonMemoryPch.h" @@ -13,7 +14,7 @@ SmallLeafHeapBlockT::New(HeapBucketTsizeCat <= USHRT_MAX); ushort objectSize = (ushort)bucket->sizeCat; - ushort objectCount = (ushort)(TBlockAttributes::PageCount * AutoSystemInfo::PageSize) / objectSize; + ushort objectCount = (ushort)((TBlockAttributes::PageCount * AutoSystemInfo::PageSize) / objectSize); return NoMemProtectHeapNewNoThrowPlusPrefixZ(Base::GetAllocPlusSize(objectCount), SmallLeafHeapBlockT, bucket, objectSize, objectCount); } diff --git a/lib/Common/Memory/SmallLeafHeapBucket.h b/lib/Common/Memory/SmallLeafHeapBucket.h index 1cf6d27e38a..eae26539b4e 100644 --- a/lib/Common/Memory/SmallLeafHeapBucket.h +++ b/lib/Common/Memory/SmallLeafHeapBucket.h @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- namespace Memory @@ -10,7 +11,7 @@ class SmallLeafHeapBucketT : public HeapBucketT> BaseT; protected: friend class HeapBucket; - template + template friend class HeapBucketGroup; void Sweep(RecyclerSweep& recyclerSweep); diff --git a/lib/Common/Memory/SmallNormalHeapBlock.cpp b/lib/Common/Memory/SmallNormalHeapBlock.cpp index 318f07997db..53398912bda 100644 --- a/lib/Common/Memory/SmallNormalHeapBlock.cpp +++ b/lib/Common/Memory/SmallNormalHeapBlock.cpp @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #include "CommonMemoryPch.h" @@ -13,7 +14,7 @@ SmallNormalHeapBlockT::New(HeapBucketTsizeCat <= USHRT_MAX); ushort objectSize = (ushort)bucket->sizeCat; - ushort objectCount = (ushort)(TBlockAttributes::PageCount * AutoSystemInfo::PageSize) / objectSize; + ushort objectCount = (ushort)((TBlockAttributes::PageCount * AutoSystemInfo::PageSize) / objectSize); HeapBlockType blockType = (TBlockAttributes::IsSmallBlock ? HeapBlock::SmallNormalBlockType : HeapBlock::MediumNormalBlockType); return NoMemProtectHeapNewNoThrowPlusPrefixZ(Base::GetAllocPlusSize(objectCount), SmallNormalHeapBlockT, bucket, objectSize, objectCount, blockType); @@ -29,7 +30,7 @@ SmallNormalWithBarrierHeapBlockT::New(HeapBucketTsizeCat <= USHRT_MAX); ushort objectSize = (ushort)bucket->sizeCat; - ushort objectCount = (ushort)(TBlockAttributes::PageCount * AutoSystemInfo::PageSize) / objectSize; + ushort objectCount = (ushort)((TBlockAttributes::PageCount * AutoSystemInfo::PageSize) / objectSize); HeapBlockType blockType = (TBlockAttributes::IsSmallBlock ? HeapBlock::SmallNormalBlockWithBarrierType : HeapBlock::MediumNormalBlockWithBarrierType); return NoMemProtectHeapNewNoThrowPlusPrefixZ(Base::GetAllocPlusSize(objectCount), SmallNormalWithBarrierHeapBlockT, bucket, objectSize, objectCount, blockType); diff --git a/lib/Common/Memory/SmallNormalHeapBucket.cpp b/lib/Common/Memory/SmallNormalHeapBucket.cpp index 0354160f610..98365a50f46 100644 --- a/lib/Common/Memory/SmallNormalHeapBucket.cpp +++ b/lib/Common/Memory/SmallNormalHeapBucket.cpp @@ -23,12 +23,14 @@ SmallNormalHeapBucketBase::AggregateBucketStats() { __super::AggregateBucketStats(); +#if ENABLE_PARTIAL_GC HeapBlockList::ForEach(partialHeapBlockList, [this](TBlockType* heapBlock) { heapBlock->AggregateBlockStats(this->memStats); }); HeapBlockList::ForEach(partialSweptHeapBlockList, [this](TBlockType* heapBlock) { heapBlock->AggregateBlockStats(this->memStats); }); +#endif } #endif diff --git a/lib/Common/Memory/arm64/arm64_SAVE_REGISTERS.S b/lib/Common/Memory/arm64/arm64_SAVE_REGISTERS.S new file mode 100644 index 00000000000..28c035a4470 --- /dev/null +++ b/lib/Common/Memory/arm64/arm64_SAVE_REGISTERS.S @@ -0,0 +1,39 @@ +;------------------------------------------------------------------------------------------------------- +; Copyright (C) Microsoft. All rights reserved. +; Copyright (c) ChakraCore Project Contributors. All rights reserved. +; Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. +;------------------------------------------------------------------------------------------------------- + +#include "unixasmmacros.inc" + +//void arm64_SAVE_REGISTERS(registers) +// +// This method pushes the 16 general purpose registers into the passed in array. +// By convention, the stack pointer will always be stored at registers[0] +// +// void* registers[16]; +// arm64_SAVE_REGISTERS(registers); +// +.p2align 2 +.globl C_FUNC(arm64_SAVE_REGISTERS) +C_FUNC(arm64_SAVE_REGISTERS): + ; Can't use sp with stp so mov to a volatile register + ; and then store onto passed in array + mov x17, sp + str x17, [x0, #0x00] + str x1, [x0, #0x08] + stp x2, x3, [x0, #0x10] + stp x4, x5, [x0, #0x20] + stp x6, x7, [x0, #0x30] + stp x8, x9, [x0, #0x40] + stp x10, x11, [x0, #0x50] + stp x12, x13, [x0, #0x60] + stp x14, x15, [x0, #0x70] + stp x16, x19, [x0, #0x80] + stp x20, x21, [x0, #0x90] + stp x22, x23, [x0, #0xA0] + stp x24, x25, [x0, #0xB0] + stp x26, x27, [x0, #0xC0] + str x28, [x0, #0xD0] + + br lr diff --git a/lib/Common/PlatformAgnostic/AssemblyCommon.h b/lib/Common/PlatformAgnostic/AssemblyCommon.h index ba1dd084d69..d4fcd34f6ba 100644 --- a/lib/Common/PlatformAgnostic/AssemblyCommon.h +++ b/lib/Common/PlatformAgnostic/AssemblyCommon.h @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #pragma once @@ -24,6 +25,9 @@ void mac_fde_wrapper(const char *dataStart, mac_fde_reg_op reg_op); #define __REGISTER_FRAME(addr) __register_frame(addr) #define __DEREGISTER_FRAME(addr) __deregister_frame(addr) #endif // __APPLE__ +#elif defined(_M_ARM64) // _AMD64_ && !DISABLE_JIT +#define __REGISTER_FRAME(addr) __register_frame(addr) +#define __DEREGISTER_FRAME(addr) __deregister_frame(addr) #else #define __REGISTER_FRAME(addr) #define __DEREGISTER_FRAME(addr) diff --git a/lib/Common/arm64.h b/lib/Common/arm64.h index 892cdc91dff..c57fd5ae1e4 100644 --- a/lib/Common/arm64.h +++ b/lib/Common/arm64.h @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- // ARM64-specific macro definitions @@ -10,7 +11,12 @@ #error Include arm64.h in builds of ARM64 targets only. #endif +#if defined(__getReg) || defined(_WIN64) #define arm64_GET_CURRENT_FRAME() ((LPVOID)__getReg(29)) +#else +extern "C" LPVOID arm64_GET_CURRENT_FRAME(void); +#endif + extern "C" VOID arm64_SAVE_REGISTERS(void*); /* diff --git a/lib/JITClient/JITClientStub.c b/lib/JITClient/JITClientStub.c index 085258d23c0..9e8961df181 100644 --- a/lib/JITClient/JITClientStub.c +++ b/lib/JITClient/JITClientStub.c @@ -8,6 +8,16 @@ #pragma warning(disable: 28252) #pragma warning(disable: 28253) +// HACK HACK HACK +// MIDL gives compile error if using [system_handle] with stub targetting win8 or below, +// but there is no issue unless the function using [system_handle] is actually called. +// We have runtime check that prevents that function from being used on old OS, +// so change #define here to bypass the error +#if !(0x603 <= _WIN32_WINNT) +#undef _WIN32_WINNT +#define _WIN32_WINNT 0x603 +#endif + #include "ChakraJIT_c.c" #pragma warning(pop) diff --git a/lib/JITClient/JITManager.cpp b/lib/JITClient/JITManager.cpp index 5910b4ecc70..087fb5a9ad9 100644 --- a/lib/JITClient/JITManager.cpp +++ b/lib/JITClient/JITManager.cpp @@ -50,6 +50,21 @@ JITManager::GetJITManager() return &s_jitManager; } +typedef struct _CHAKRA_RPC_SECURITY_QOS_V5 { + unsigned long Version; + unsigned long Capabilities; + unsigned long IdentityTracking; + unsigned long ImpersonationType; + unsigned long AdditionalSecurityInfoType; + union + { + RPC_HTTP_TRANSPORT_CREDENTIALS_W* HttpCredentials; + } u; + void* Sid; + unsigned int EffectiveOnly; + void* ServerSecurityDescriptor; +} CHAKRA_RPC_SECURITY_QOS_V5; + // This routine creates a binding with the server. HRESULT JITManager::CreateBinding( @@ -67,22 +82,13 @@ JITManager::CreateBinding( RPC_BINDING_HANDLE_TEMPLATE_V1 bindingTemplate; RPC_BINDING_HANDLE_SECURITY_V1_W bindingSecurity; -#ifndef NTBUILD - RPC_SECURITY_QOS_V4 securityQOS; - ZeroMemory(&securityQOS, sizeof(RPC_SECURITY_QOS_V4)); + CHAKRA_RPC_SECURITY_QOS_V5 securityQOS; + ZeroMemory(&securityQOS, sizeof(CHAKRA_RPC_SECURITY_QOS_V5)); securityQOS.Capabilities = RPC_C_QOS_CAPABILITIES_DEFAULT; securityQOS.IdentityTracking = RPC_C_QOS_IDENTITY_DYNAMIC; securityQOS.ImpersonationType = RPC_C_IMP_LEVEL_IDENTIFY; - securityQOS.Version = 4; -#else - RPC_SECURITY_QOS_V5 securityQOS; - ZeroMemory(&securityQOS, sizeof(RPC_SECURITY_QOS_V5)); - securityQOS.Capabilities = RPC_C_QOS_CAPABILITIES_DEFAULT; - securityQOS.IdentityTracking = RPC_C_QOS_IDENTITY_DYNAMIC; - securityQOS.ImpersonationType = RPC_C_IMP_LEVEL_IDENTIFY; - securityQOS.Version = 5; + securityQOS.Version = AutoSystemInfo::Data.IsWin8OrLater() ? 5 : 4; securityQOS.ServerSecurityDescriptor = serverSecurityDescriptor; -#endif // NTBUILD ZeroMemory(&bindingTemplate, sizeof(bindingTemplate)); bindingTemplate.Version = 1; @@ -296,35 +302,55 @@ HRESULT JITManager::ConnectProcess(RPC_BINDING_HANDLE rpcBindingHandle) { Assert(IsOOPJITEnabled()); + HRESULT hr = E_FAIL; -#ifdef USE_RPC_HANDLE_MARSHALLING - HANDLE processHandle; - if (!DuplicateHandle(GetCurrentProcess(), GetCurrentProcess(), GetCurrentProcess(), &processHandle, 0, false, DUPLICATE_SAME_ACCESS)) + if (AutoSystemInfo::Data.IsWin8Point1OrLater()) { - return HRESULT_FROM_WIN32(GetLastError()); - } -#endif + HANDLE processHandle = nullptr; + // RPC handle marshalling is only available on 8.1+ + if (!DuplicateHandle(GetCurrentProcess(), GetCurrentProcess(), GetCurrentProcess(), &processHandle, 0, false, DUPLICATE_SAME_ACCESS)) + { + return HRESULT_FROM_WIN32(GetLastError()); + } - HRESULT hr = E_FAIL; - RpcTryExcept - { - hr = ClientConnectProcess( - rpcBindingHandle, -#ifdef USE_RPC_HANDLE_MARSHALLING - processHandle, -#endif - (intptr_t)AutoSystemInfo::Data.GetChakraBaseAddr(), - (intptr_t)AutoSystemInfo::Data.GetCRTHandle()); + RpcTryExcept + { + hr = ClientConnectProcessWithProcessHandle( + rpcBindingHandle, + processHandle, + (intptr_t)AutoSystemInfo::Data.GetChakraBaseAddr(), + (intptr_t)AutoSystemInfo::Data.GetCRTHandle()); + } + RpcExcept(RpcExceptionFilter(RpcExceptionCode())) + { + hr = HRESULT_FROM_WIN32(RpcExceptionCode()); + } + RpcEndExcept; + + if (processHandle) + { + CloseHandle(processHandle); + } } - RpcExcept(RpcExceptionFilter(RpcExceptionCode())) + else { - hr = HRESULT_FROM_WIN32(RpcExceptionCode()); - } - RpcEndExcept; - -#ifdef USE_RPC_HANDLE_MARSHALLING - CloseHandle(processHandle); +#if (WINVER >= _WIN32_WINNT_WINBLUE) + AssertOrFailFast(UNREACHED); +#else + RpcTryExcept + { + hr = ClientConnectProcess( + rpcBindingHandle, + (intptr_t)AutoSystemInfo::Data.GetChakraBaseAddr(), + (intptr_t)AutoSystemInfo::Data.GetCRTHandle()); + } + RpcExcept(RpcExceptionFilter(RpcExceptionCode())) + { + hr = HRESULT_FROM_WIN32(RpcExceptionCode()); + } + RpcEndExcept; #endif + } return hr; } @@ -377,28 +403,6 @@ JITManager::CleanupThreadContext( return hr; } -HRESULT -JITManager::AddDOMFastPathHelper( - __in PSCRIPTCONTEXT_HANDLE scriptContextInfoAddress, - __in intptr_t funcInfoAddr, - __in int helper) -{ - Assert(IsOOPJITEnabled()); - - HRESULT hr = E_FAIL; - RpcTryExcept - { - hr = ClientAddDOMFastPathHelper(m_rpcBindingHandle, scriptContextInfoAddress, funcInfoAddr, helper); - } - RpcExcept(RpcExceptionFilter(RpcExceptionCode())) - { - hr = HRESULT_FROM_WIN32(RpcExceptionCode()); - } - RpcEndExcept; - - return hr; -} - HRESULT JITManager::SetIsPRNGSeeded( __in PSCRIPTCONTEXT_HANDLE scriptContextInfoAddress, diff --git a/lib/JITClient/JITManager.h b/lib/JITClient/JITManager.h index 66c2871d967..1c3fa84e951 100644 --- a/lib/JITClient/JITManager.h +++ b/lib/JITClient/JITManager.h @@ -53,11 +53,6 @@ class JITManager __in InterpreterThunkInputIDL * thunkInput, __out InterpreterThunkOutputIDL * thunkOutput); - HRESULT AddDOMFastPathHelper( - __in PSCRIPTCONTEXT_HANDLE scriptContextInfoAddress, - __in intptr_t funcInfoAddr, - __in int helper); - HRESULT AddModuleRecordInfo( /* [in] */ PSCRIPTCONTEXT_HANDLE scriptContextInfoAddress, /* [in] */ unsigned int moduleId, @@ -181,12 +176,6 @@ class JITManager __in_opt BVSparseNodeIDL * updatedPropsBVHead) { Assert(false); return E_FAIL; } - HRESULT AddDOMFastPathHelper( - __in PSCRIPTCONTEXT_HANDLE scriptContextInfoAddress, - __in intptr_t funcInfoAddr, - __in int helper) - { Assert(false); return E_FAIL; } - HRESULT AddModuleRecordInfo( /* [in] */ PSCRIPTCONTEXT_HANDLE scriptContextInfoAddress, /* [in] */ unsigned int moduleId, diff --git a/lib/JITIDL/Chakra.JITIDL.vcxproj b/lib/JITIDL/Chakra.JITIDL.vcxproj index 1598abb74bc..fa1770cfa6d 100644 --- a/lib/JITIDL/Chakra.JITIDL.vcxproj +++ b/lib/JITIDL/Chakra.JITIDL.vcxproj @@ -1,5 +1,9 @@  + + + true + diff --git a/lib/JITIDL/ChakraJIT.acf b/lib/JITIDL/ChakraJIT.acf index 88c2970d88e..0b813349cd8 100644 --- a/lib/JITIDL/ChakraJIT.acf +++ b/lib/JITIDL/ChakraJIT.acf @@ -9,7 +9,6 @@ interface IChakraJIT { UpdatePropertyRecordMap([context_handle_noserialize] threadContextInfoAddress); - AddDOMFastPathHelper([context_handle_noserialize] scriptContextInfoAddress); AddModuleRecordInfo([context_handle_noserialize] scriptContextInfoAddress); SetWellKnownHostTypeId([context_handle_noserialize] threadContextInfoAddress); CloseScriptContext([context_handle_noserialize] scriptContextInfoAddress); diff --git a/lib/JITIDL/ChakraJIT.idl b/lib/JITIDL/ChakraJIT.idl index 5a816a700be..dd7430a3839 100644 --- a/lib/JITIDL/ChakraJIT.idl +++ b/lib/JITIDL/ChakraJIT.idl @@ -26,15 +26,21 @@ interface IChakraJIT typedef CodeGenWorkItemIDL* pCodeGenWorkItemIDL; HRESULT Shutdown([in] handle_t binding); - HRESULT ConnectProcess( + HRESULT ConnectProcessWithProcessHandle( [in] handle_t binding, -#ifdef USE_RPC_HANDLE_MARSHALLING [in, system_handle(sh_process, PROCESS_VM_OPERATION | PROCESS_VM_READ | PROCESS_VM_WRITE | PROCESS_QUERY_LIMITED_INFORMATION)] HANDLE processHandle, -#endif [in] CHAKRA_PTR chakraBaseAddress, [in] CHAKRA_PTR crtBaseAddress ); +#if !(WINVER >= _WIN32_WINNT_WINBLUE) + HRESULT ConnectProcess( + [in] handle_t binding, + [in] CHAKRA_PTR chakraBaseAddress, + [in] CHAKRA_PTR crtBaseAddress + ); +#endif + HRESULT InitializeThreadContext( [in] handle_t binding, [in] ThreadContextDataIDL * threadData, @@ -52,12 +58,6 @@ interface IChakraJIT [in] PTHREADCONTEXT_HANDLE threadContextInfoAddress, [in, unique] BVSparseNodeIDL * updatedPropsBVHead); - HRESULT AddDOMFastPathHelper( - [in] handle_t binding, - [in] PSCRIPTCONTEXT_HANDLE scriptContextInfoAddress, - [in] CHAKRA_PTR funcInfoAddr, - [in] int helper); - HRESULT AddModuleRecordInfo( [in] handle_t binding, [in] PSCRIPTCONTEXT_HANDLE scriptContextInfoAddress, diff --git a/lib/JITIDL/JITTypes.h b/lib/JITIDL/JITTypes.h index 22ff96db06e..80780ccfba0 100644 --- a/lib/JITIDL/JITTypes.h +++ b/lib/JITIDL/JITTypes.h @@ -12,14 +12,6 @@ import "wtypes.idl"; #include "sdkddkver.h" #endif - -#if defined(WINVER) && WINVER >= _WIN32_WINNT_WINBLUE // on 8.1+, RPC can marshal process handle for us -#ifdef __midl -cpp_quote("#define USE_RPC_HANDLE_MARSHALLING 1") -#endif -#define USE_RPC_HANDLE_MARSHALLING 1 -#endif - #if defined(TARGET_32) #ifdef __midl #define CHAKRA_WB_PTR int @@ -78,7 +70,7 @@ typedef unsigned char boolean; #define __JITTypes_h__ // TODO: OOP JIT, how do we make this better? -const int VTABLE_COUNT = 51; +const int VTABLE_COUNT = 60; const int EQUIVALENT_TYPE_CACHE_SIZE = 8; typedef IDL_DEF([context_handle]) void * PTHREADCONTEXT_HANDLE; @@ -232,6 +224,17 @@ typedef struct CallSiteIDL unsigned int functionId; } CallSiteIDL; +typedef struct CallApplyCallSiteIDL +{ + unsigned short bitFields; + unsigned short returnType; + unsigned int ldFldInlineCacheId; + unsigned int sourceId; + unsigned int functionId; + unsigned short callSiteId; + IDL_PAD2(0) +} CallApplyCallSiteIDL; + typedef struct ThisIDL { unsigned short valueType; @@ -384,6 +387,8 @@ typedef struct ScriptContextDataIDL CHAKRA_PTR charStringCacheAddr; CHAKRA_PTR libraryAddr; CHAKRA_PTR globalObjectAddr; + CHAKRA_PTR objectPrototypeAddr; + CHAKRA_PTR functionPrototypeAddr; CHAKRA_PTR sideEffectsAddr; CHAKRA_PTR arraySetElementFastPathVtableAddr; CHAKRA_PTR intArraySetElementFastPathVtableAddr; @@ -557,7 +562,8 @@ typedef struct FunctionBodyDataIDL unsigned short inParamCount; unsigned short argUsedForBranch; unsigned short profiledCallSiteCount; - IDL_PAD2(0) + unsigned short callSiteToCallApplyCallSiteArrayCount; + unsigned short profiledCallApplyCallSiteCount; unsigned int funcNumber; unsigned int sourceContextId; unsigned int nestedCount; @@ -570,6 +576,7 @@ typedef struct FunctionBodyDataIDL unsigned int localFrameDisplayReg; unsigned int paramClosureReg; unsigned int localClosureReg; + unsigned int yieldReg; unsigned int envReg; unsigned int firstTmpReg; unsigned int firstInnerScopeReg; @@ -623,6 +630,8 @@ typedef struct FunctionBodyDataIDL IDL_DEF([size_is(functionSlotsInCachedScopeCount)]) unsigned int * slotIdInCachedScopeToNestedIndexArray; + IDL_DEF([size_is(callSiteToCallApplyCallSiteArrayCount)]) unsigned short * callSiteToCallApplyCallSiteArray; + ProfileDataIDL * profileData; AsmJsDataIDL * asmJsData; @@ -667,9 +676,11 @@ typedef struct FunctionJITTimeDataIDL IDL_DEF([size_is(ldFldInlineeCount)]) struct FunctionJITTimeDataIDL ** ldFldInlinees; - IDL_DEF([size_is(callbackInlineeCount)]) struct FunctionJITTimeDataIDL ** callbackInlinees; + IDL_DEF([size_is(inlineeCount)]) struct FunctionJITTimeDataIDL ** callbackInlinees; + + unsigned int callApplyTargetInlineeCount; + IDL_DEF([size_is(callApplyTargetInlineeCount)]) struct FunctionJITTimeDataIDL ** callApplyTargetInlinees; - unsigned int callbackInlineeCount; unsigned int objTypeSpecFldInfoCount; IDL_DEF([size_is(objTypeSpecFldInfoCount)]) ObjTypeSpecFldIDL ** objTypeSpecFldInfoArray; diff --git a/lib/JITServer/JITServer.cpp b/lib/JITServer/JITServer.cpp index 9602ba1a187..7ea37ec4700 100644 --- a/lib/JITServer/JITServer.cpp +++ b/lib/JITServer/JITServer.cpp @@ -27,26 +27,29 @@ HRESULT JsInitializeJITServer( return status; } -#ifndef NTBUILD - status = RpcServerRegisterIf2( - ServerIChakraJIT_v0_0_s_ifspec, - NULL, - NULL, - RPC_IF_AUTOLISTEN, - RPC_C_LISTEN_MAX_CALLS_DEFAULT, - (ULONG)-1, - NULL); -#else - status = RpcServerRegisterIf3( - ServerIChakraJIT_v0_0_s_ifspec, - NULL, - NULL, - RPC_IF_AUTOLISTEN, - RPC_C_LISTEN_MAX_CALLS_DEFAULT, - (ULONG)-1, - NULL, - securityDescriptor); -#endif + if (AutoSystemInfo::Data.IsWin8OrLater()) + { + status = RPCLibrary::Instance->RpcServerRegisterIf3( + ServerIChakraJIT_v0_0_s_ifspec, + NULL, + NULL, + RPC_IF_AUTOLISTEN, + RPC_C_LISTEN_MAX_CALLS_DEFAULT, + (ULONG)-1, + NULL, + securityDescriptor); + } + else + { + status = RpcServerRegisterIf2( + ServerIChakraJIT_v0_0_s_ifspec, + NULL, + NULL, + RPC_IF_AUTOLISTEN, + RPC_C_LISTEN_MAX_CALLS_DEFAULT, + (ULONG)-1, + NULL); + } if (status != RPC_S_OK) { return status; @@ -120,11 +123,9 @@ __RPC_USER PSCRIPTCONTEXT_HANDLE_rundown(__RPC__in PSCRIPTCONTEXT_HANDLE phConte } HRESULT -ServerConnectProcess( +ServerConnectProcessWithProcessHandle( handle_t binding, -#ifdef USE_RPC_HANDLE_MARSHALLING HANDLE processHandle, -#endif intptr_t chakraBaseAddress, intptr_t crtBaseAddress ) @@ -135,23 +136,47 @@ ServerConnectProcess( { return hr; } -#ifdef USE_RPC_HANDLE_MARSHALLING - HANDLE targetHandle; + HANDLE targetHandle = nullptr; + // RPC handle marshalling is only available on 8.1+ if (!DuplicateHandle(GetCurrentProcess(), processHandle, GetCurrentProcess(), &targetHandle, 0, false, DUPLICATE_SAME_ACCESS)) { Assert(UNREACHED); return E_ACCESSDENIED; } -#else - HANDLE targetHandle = OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_READ | PROCESS_VM_WRITE | PROCESS_QUERY_LIMITED_INFORMATION, false, clientPid); + return ProcessContextManager::RegisterNewProcess(clientPid, targetHandle, chakraBaseAddress, crtBaseAddress); +} + +#if !(WINVER >= _WIN32_WINNT_WINBLUE) +HRESULT +ServerConnectProcess( + handle_t binding, + intptr_t chakraBaseAddress, + intptr_t crtBaseAddress +) +{ + // Should use ServerConnectProcessWithProcessHandle on 8.1+ + if (AutoSystemInfo::Data.IsWin8Point1OrLater()) + { + Assert(UNREACHED); + return E_ACCESSDENIED; + } + + DWORD clientPid; + HRESULT hr = HRESULT_FROM_WIN32(I_RpcBindingInqLocalClientPID(binding, &clientPid)); + if (FAILED(hr)) + { + return hr; + } + HANDLE targetHandle = nullptr; + targetHandle = OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_READ | PROCESS_VM_WRITE | PROCESS_QUERY_INFORMATION, false, clientPid); if (!targetHandle) { Assert(UNREACHED); return E_ACCESSDENIED; } -#endif return ProcessContextManager::RegisterNewProcess(clientPid, targetHandle, chakraBaseAddress, crtBaseAddress); } +#endif #pragma warning(push) #pragma warning(disable:6387 28196) // PREFast does not understand the out context can be null here @@ -316,33 +341,6 @@ ServerUpdatePropertyRecordMap( }); } -HRESULT -ServerAddDOMFastPathHelper( - /* [in] */ handle_t binding, - /* [in] */ __RPC__in PSCRIPTCONTEXT_HANDLE scriptContextInfoAddress, - /* [in] */ intptr_t funcInfoAddr, - /* [in] */ int helper) -{ - ServerScriptContext * scriptContextInfo = (ServerScriptContext*)DecodePointer(scriptContextInfoAddress); - - if (scriptContextInfo == nullptr) - { - Assert(false); - return RPC_S_INVALID_ARG; - } - if (helper < 0 || helper >= IR::JnHelperMethodCount) - { - Assert(UNREACHED); - return E_ACCESSDENIED; - } - - return ServerCallWrapper(scriptContextInfo, [&]()->HRESULT - { - scriptContextInfo->AddToDOMFastPathHelperMap(funcInfoAddr, (IR::JnHelperMethod)helper); - return S_OK; - }); -} - HRESULT ServerAddModuleRecordInfo( /* [in] */ handle_t binding, diff --git a/lib/JITServer/JITServerStub.c b/lib/JITServer/JITServerStub.c index d1dfd239cc9..9c63f763fce 100644 --- a/lib/JITServer/JITServerStub.c +++ b/lib/JITServer/JITServerStub.c @@ -8,6 +8,16 @@ #pragma warning(disable: 28252) #pragma warning(disable: 28253) +// HACK HACK HACK +// MIDL gives compile error if using [system_handle] with stub targetting win8 or below, +// but there is no issue unless the function using [system_handle] is actually called. +// We have runtime check that prevents that function from being used on old OS, +// so change #define here to bypass the error +#if !(0x603 <= _WIN32_WINNT) +#undef _WIN32_WINNT +#define _WIN32_WINNT 0x603 +#endif + #include "ChakraJIT_s.c" #pragma warning(pop) diff --git a/lib/Jsrt/CMakeLists.txt b/lib/Jsrt/CMakeLists.txt index cc85fef3eab..222fd88cdaf 100644 --- a/lib/Jsrt/CMakeLists.txt +++ b/lib/Jsrt/CMakeLists.txt @@ -26,4 +26,5 @@ target_include_directories ( ../Runtime/ByteCode ../Runtime/Debug ../Parser + ../SCACore ) diff --git a/lib/Jsrt/Chakra.Jsrt.vcxproj b/lib/Jsrt/Chakra.Jsrt.vcxproj index 01e7f299bb2..f183c5ef8aa 100644 --- a/lib/Jsrt/Chakra.Jsrt.vcxproj +++ b/lib/Jsrt/Chakra.Jsrt.vcxproj @@ -1,4 +1,4 @@ - + @@ -30,6 +30,7 @@ $(MSBuildThisFileDirectory)..\Runtime\Base; $(MSBuildThisFileDirectory)..\Runtime\Debug; $(MSBuildThisFileDirectory)..\Parser; + $(MSBuildThisFileDirectory)..\SCACore; $(MSBuildThisFileDirectory)..\WasmReader; $(MSBuildThisFileDirectory)..\Backend; $(IntDir); @@ -61,6 +62,7 @@ + @@ -89,4 +91,4 @@ - + \ No newline at end of file diff --git a/lib/Jsrt/ChakraCommon.h b/lib/Jsrt/ChakraCommon.h index e67af6e50db..2c48acc65e9 100644 --- a/lib/Jsrt/ChakraCommon.h +++ b/lib/Jsrt/ChakraCommon.h @@ -25,12 +25,13 @@ // Platform specific code #if defined(_WIN32) && defined(_MSC_VER) -#include +#include // Header macros #define CHAKRA_CALLBACK CALLBACK #define CHAKRA_API STDAPI_(JsErrorCode) +typedef unsigned char byte; typedef DWORD_PTR ChakraCookie; typedef BYTE* ChakraBytePtr; #else // Non-Windows VC++ @@ -41,6 +42,7 @@ typedef BYTE* ChakraBytePtr; #define _In_z_ #define _In_opt_ #define _Inout_ +#define _Inout_opt_ #define _Out_ #define _Out_opt_ #define _In_reads_(x) @@ -217,7 +219,7 @@ typedef unsigned short uint16_t; /// JsErrorInvalidContext, /// - /// Module evaluation is called in wrong context. + /// The Module HostInfoKind provided was invalid. /// JsInvalidModuleHostInfoKind, /// @@ -237,6 +239,7 @@ typedef unsigned short uint16_t; /// Module was not yet evaluated when JsGetModuleNamespace was called. /// JsErrorModuleNotEvaluated, + /// /// Category of errors that relates to errors occurring within the engine itself. /// @@ -313,6 +316,18 @@ typedef unsigned short uint16_t; /// VM was unable to perform the request action /// JsErrorDiagUnableToPerformAction, + /// + /// Serializer/Deserializer does not support current data + /// + JsSerializerNotSupported, + /// + /// Current object is not transferable during serialization + /// + JsTransferableNotSupported, + /// + /// Current object is already detached when serialized + /// + JsTransferableAlreadyDetached, } JsErrorCode; /// @@ -549,6 +564,10 @@ typedef unsigned short uint16_t; /// This one needs to be set for Utf16 /// JsParseScriptAttributeArrayBufferIsUtf16Encoded = 0x2, + /// + /// Script should be parsed in strict mode + /// + JsParseScriptAttributeStrictMode = 0x4, } JsParseScriptAttributes; /// @@ -624,6 +643,27 @@ typedef unsigned short uint16_t; JsDataView = 12, } JsValueType; + typedef enum _JsScriptEncodingType + { + Utf8, + Utf16 + } JsScriptEncodingType; + + typedef enum _JsScriptContainerType + { + HeapAllocatedBuffer + } JsScriptContainerType; + + typedef struct _JsScriptContents + { + void * container; + JsScriptEncodingType encodingType; + JsScriptContainerType containerType; + JsSourceContext sourceContext; + size_t contentLengthInBytes; + WCHAR * fullPath; + } JsScriptContents; + /// /// User implemented callback routine for memory allocation events /// @@ -922,7 +962,7 @@ typedef unsigned short uint16_t; /// /// Removes a reference to a JsRef handle that was created by JsAddRef. /// - /// The object to add a reference to. + /// The object to remove the reference from. /// The object's new reference count (can pass in null). /// /// The code JsNoError if the operation succeeded, a failure code otherwise. @@ -996,7 +1036,7 @@ typedef unsigned short uint16_t; /// CHAKRA_API JsSetCurrentContext( - _In_ JsContextRef context); + _In_opt_ JsContextRef context); /// /// Gets the script context that the object belongs to. @@ -1051,7 +1091,7 @@ typedef unsigned short uint16_t; _Out_ JsRuntimeHandle *runtime); /// - /// Tells the runtime to do any idle processing it need to do. + /// Tells the runtime to do any idle processing it needs to do. /// /// /// @@ -2412,6 +2452,60 @@ typedef unsigned short uint16_t; _In_opt_ JsPromiseContinuationCallback promiseContinuationCallback, _In_opt_ void *callbackState); + /// + /// Note: Experimental API + /// Starts a request for background script parsing on another thread + /// + /// ScriptContents struct with data needed to start parsing + /// Identifier for subsequent BGParse operations + /// + /// The code JsNoError if the operation succeeded, a failure code otherwise. + /// + CHAKRA_API + JsQueueBackgroundParse_Experimental( + _In_ JsScriptContents* contents, + _Out_ DWORD* dwBgParseCookie); + + /// + /// Note: Experimental API + /// Appropriately frees resources associated with a previously queued background parse + /// + /// Identifier for BGParse operation + /// Pointer to script source buffer, used for validation + /// When true, caller is responsible for freeing buffer + /// + /// The code JsNoError if the operation succeeded, a failure code otherwise. + /// + CHAKRA_API + JsDiscardBackgroundParse_Experimental( + _In_ DWORD dwBgParseCookie, + _In_ void* buffer, + _Out_ bool* callerOwnsBuffer); + + /// + /// Note: Experimental API + /// Executes the background parsed script + /// + /// Identifier for subsequent BGParse operations + /// Pointer to script source + /// JsSourceContext identifier + /// Path to the parsed script + /// + /// [May not be needed] + /// Result of script execution + /// + /// The code JsNoError if the operation succeeded, a failure code otherwise. + /// + CHAKRA_API + JsExecuteBackgroundParse_Experimental( + _In_ DWORD dwBgParseCookie, + _In_ JsValueRef script, + _In_ JsSourceContext sourceContext, + _In_ WCHAR *url, + _In_ JsParseScriptAttributes parseAttributes, + _In_ JsValueRef parserState, + _Out_ JsValueRef *result); + #ifdef _WIN32 #include "ChakraCommonWindows.h" #endif // _WIN32 diff --git a/lib/Jsrt/ChakraCore.h b/lib/Jsrt/ChakraCore.h index fa37e3215cd..39b18c93b9a 100644 --- a/lib/Jsrt/ChakraCore.h +++ b/lib/Jsrt/ChakraCore.h @@ -48,6 +48,23 @@ typedef void* JsModuleRecord; /// typedef void *JsSharedArrayBufferContentHandle; +/// +/// A reference to a SCA Serializer. +/// +/// +/// This represents the internal state of a Serializer +/// +typedef void *JsVarSerializerHandle; + +/// +/// A reference to a SCA Deserializer. +/// +/// +/// This represents the internal state of a Deserializer +/// +typedef void *JsVarDeserializerHandle; + + /// /// Flags for parsing a module. /// @@ -94,7 +111,15 @@ typedef enum JsModuleHostInfoKind /// /// URL for use in error stack traces and debugging. /// - JsModuleHostInfo_Url = 0x6 + JsModuleHostInfo_Url = 0x6, + /// + /// Callback to allow host to initialize import.meta object properties. + /// + JsModuleHostInfo_InitializeImportMetaCallback = 0x7, + /// + /// Callback to report module completion or exception thrown when evaluating a module. + /// + JsModuleHostInfo_ReportModuleCompletionCallback = 0x8 } JsModuleHostInfoKind; /// @@ -136,7 +161,7 @@ typedef JsErrorCode(CHAKRA_CALLBACK * FetchImportedModuleCallBack)(_In_ JsModule /// User implemented callback to fetch imported modules dynamically in scripts. /// /// -/// The callback is invoked on the current runtime execution thread, therefore execution is blocked untill +/// The callback is invoked on the current runtime execution thread, therefore execution is blocked until /// the callback completes. Notify the host to fetch the dependent module. This is used for the dynamic /// import() syntax. /// @@ -170,6 +195,43 @@ typedef JsErrorCode(CHAKRA_CALLBACK * FetchImportedModuleFromScriptCallBack)(_In /// typedef JsErrorCode(CHAKRA_CALLBACK * NotifyModuleReadyCallback)(_In_opt_ JsModuleRecord referencingModule, _In_opt_ JsValueRef exceptionVar); +/// +/// User implemented callback to fill in module properties for the import.meta object. +/// +/// +/// This callback allows the host to fill module details for the referencing module in the import.meta object +/// loaded by script. +/// The callback is invoked on the current runtime execution thread, therefore execution is blocked until the +/// callback completes. +/// +/// The referencing module that is loading an import.meta object. +/// The object which will be returned to script for the referencing module. +/// +/// Returns a JsErrorCode - note, the return value is ignored. +/// +typedef JsErrorCode(CHAKRA_CALLBACK * InitializeImportMetaCallback)(_In_opt_ JsModuleRecord referencingModule, _In_opt_ JsValueRef importMetaVar); + +/// +/// User implemented callback to report completion of module execution. +/// +/// +/// This callback is used to report the completion of module execution and to report any runtime exceptions. +/// Note it is not used for dynamicly imported modules import() as the reuslt from those are handled with a +/// promise. +/// If this callback is not set and a module produces an exception: +/// a) a purely synchronous module tree with an exception will set the exception on the runtime +/// (this is not done if this callback is set) +/// b) an exception in an asynchronous module tree will not be reported directly. +/// +/// However in all cases the exception will be set on the JsModuleRecord. +/// +/// The root module that has completed either with an exception or normally. +/// The exception object which was thrown or nullptr if the module had a normal completion. +/// +/// Returns a JsErrorCode: JsNoError if successful. +/// +typedef JsErrorCode(CHAKRA_CALLBACK * ReportModuleCompletionCallback)(_In_ JsModuleRecord module, _In_opt_ JsValueRef exception); + /// /// A structure containing information about a native function callback. /// @@ -216,6 +278,44 @@ typedef _Ret_maybenull_ JsValueRef(CHAKRA_CALLBACK * JsEnhancedNativeFunction)(_ /// The state passed to JsSetHostPromiseRejectionTracker. typedef void (CHAKRA_CALLBACK *JsHostPromiseRejectionTrackerCallback)(_In_ JsValueRef promise, _In_ JsValueRef reason, _In_ bool handled, _In_opt_ void *callbackState); +/// +/// A structure containing information about interceptors. +/// +typedef struct _JsGetterSetterInterceptor { + JsValueRef getTrap; + JsValueRef setTrap; + JsValueRef deletePropertyTrap; + JsValueRef enumerateTrap; + JsValueRef ownKeysTrap; + JsValueRef hasTrap; + JsValueRef getOwnPropertyDescriptorTrap; + JsValueRef definePropertyTrap; + JsValueRef initializerTrap; +} JsGetterSetterInterceptor; + +/// +/// A callback for tracing references back from Chakra to DOM wrappers. +/// +typedef void (CHAKRA_CALLBACK *JsDOMWrapperTracingCallback)(_In_opt_ void *data); + +/// +/// A callback for checking whether tracing from Chakra to DOM wrappers has completed. +/// +typedef bool (CHAKRA_CALLBACK *JsDOMWrapperTracingDoneCallback)(_In_opt_ void *data); + +/// +/// A callback for entering final pause for tracing DOM wrappers. +/// +typedef void(CHAKRA_CALLBACK *JsDOMWrapperTracingEnterFinalPauseCallback)(_In_opt_ void *data); + +/// +/// A trace callback. +/// +/// +/// The external data that was passed in when creating the object being traced. +/// +typedef void (CHAKRA_CALLBACK *JsTraceCallback)(_In_opt_ void *data); + /// /// Creates a new enhanced JavaScript function. /// @@ -244,17 +344,16 @@ JsCreateEnhancedFunction( /// /// Bootstrap the module loading process by creating a new module record. /// -/// The parent module of the new module - nullptr for a root module. -/// The normalized specifier for the module. -/// The new module record. The host should not try to call this API twice -/// with the same normalizedSpecifier. +/// Unused parameter - exists for backwards compatability, supply nullptr +/// The normalized specifier or url for the module - used in script errors, optional. +/// The new module record. /// /// The code JsNoError if the operation succeeded, a failure code otherwise. /// CHAKRA_API JsInitializeModuleRecord( _In_opt_ JsModuleRecord referencingModule, - _In_ JsValueRef normalizedSpecifier, + _In_opt_ JsValueRef normalizedSpecifier, _Outptr_result_maybenull_ JsModuleRecord* moduleRecord); /// @@ -310,8 +409,10 @@ JsModuleEvaluation( /// /// This is used for four things: /// 1. Setting up the callbacks for module loading - note these are actually -/// set on the current Context not the module so only have to be set for -/// the first root module in any given context. +/// set on the module's Context not the module itself so only have to be set +/// for the first root module in any given context. +/// Alternatively you can set these on the currentContext by supplying a nullptr +/// as the requestModule /// 2. Setting host defined info on a module record - can be anything that /// you wish to associate with your modules. /// 3. Setting a URL for a module to be used for stack traces/debugging - @@ -319,7 +420,7 @@ JsModuleEvaluation( /// or it will be ignored. /// 4. Setting an exception on the module object - only relevant prior to it being Parsed. /// -/// The request module. +/// The request module, optional for setting callbacks, required for other uses. /// The type of host info to be set. /// The host info to be set. /// @@ -327,7 +428,7 @@ JsModuleEvaluation( /// CHAKRA_API JsSetModuleHostInfo( - _In_ JsModuleRecord requestModule, + _In_opt_ JsModuleRecord requestModule, _In_ JsModuleHostInfoKind moduleHostInfo, _In_ void* hostInfo); @@ -579,8 +680,8 @@ CHAKRA_API /// /// /// -/// The name of the property ID to get or create. The name may consist of only digits. -/// The string is expected to be ASCII / utf8 encoded. +/// The name of the property ID to get or create. The string is expected to be ASCII / utf8 encoded. +/// The name can be any JavaScript property identifier, including all digits. /// /// length of the name in bytes /// The property ID in this runtime for the given name. @@ -593,6 +694,32 @@ CHAKRA_API _In_ size_t length, _Out_ JsPropertyIdRef *propertyId); +/// +/// Creates the property ID associated with the name. +/// +/// +/// +/// Property IDs are specific to a context and cannot be used across contexts. +/// +/// +/// Requires an active script context. +/// +/// +/// +/// The name of the property ID to get or create. The name may consist of only digits. +/// The string is expected to be ASCII / utf8 encoded. +/// +/// length of the name in bytes +/// The property string in this runtime for the given name. +/// +/// The code JsNoError if the operation succeeded, a failure code otherwise. +/// +CHAKRA_API +JsCreatePropertyString( + _In_z_ const char *name, + _In_ size_t length, + _Out_ JsValueRef* propertyString); + /// /// Copies the name associated with the property ID into a buffer. /// @@ -878,6 +1005,25 @@ CHAKRA_API _Out_ bool *hasOwnProperty); /// +/// Determines whether an object has a non-inherited property. +/// +/// +/// Requires an active script context. +/// +/// The object that may contain the item. +/// The index to find. +/// Whether the object has the non-inherited +/// property. +/// The code JsNoError if the operation succeeded, a failure code +/// otherwise. +/// +CHAKRA_API + JsHasOwnItem( + _In_ JsValueRef object, + _In_ uint32_t index, + _Out_ bool* hasOwnItem); + + /// /// Write JS string value into char string buffer without a null terminator /// /// @@ -1000,6 +1146,225 @@ CHAKRA_API _In_opt_ JsValueRef prototype, _Out_ JsValueRef *object); +/// +/// Creates a new object (with prototype) that stores some data. +/// +/// +/// Requires an active script context. +/// +/// External data that the object will represent. May be null. +/// +/// A callback for when the object is traced. May be null. +/// +/// A callback for when the object is finalized. May be null. +/// +/// Prototype object or nullptr. +/// The new object. +/// +/// The code JsNoError if the operation succeeded, a failure code otherwise. +/// +CHAKRA_API +JsCreateTracedExternalObject( + _In_opt_ void *data, + _In_opt_ size_t inlineSlotSize, + _In_opt_ JsTraceCallback traceCallback, + _In_opt_ JsFinalizeCallback finalizeCallback, + _In_opt_ JsValueRef prototype, + _Out_ JsValueRef *object); + +/// +/// Creates a new object (with prototype) that stores some external data and also supports interceptors. +/// +/// +/// Requires an active script context. +/// +/// External data that the object will represent. May be null. +/// +/// A callback for when the object is finalized. May be null. +/// +/// Prototype object or nullptr. +/// The new object. +/// +/// The code JsNoError if the operation succeeded, a failure code otherwise. +/// +CHAKRA_API +JsCreateCustomExternalObject( + _In_opt_ void *data, + _In_opt_ size_t inlineSlotSize, + _In_opt_ JsTraceCallback traceCallback, + _In_opt_ JsFinalizeCallback finalizeCallback, + _Inout_opt_ JsGetterSetterInterceptor ** getterSetterInterceptor, + _In_opt_ JsValueRef prototype, + _Out_ JsValueRef * object); + +/// +/// Returns a reference to the Array.Prototype.forEach function. The function is created if it's not already present. +/// +/// A reference to the Array.Prototype.forEach function. +CHAKRA_API +JsGetArrayForEachFunction(_Out_ JsValueRef * result); + +/// +/// Returns a reference to the Array.Prototype.keys function. The function is created if it's not already present. +/// +/// A reference to the Array.Prototype.keys function. +CHAKRA_API +JsGetArrayKeysFunction(_Out_ JsValueRef * result); + +/// +/// Returns a reference to the Array.Prototype.values function. The function is created if it's not already present. +/// +/// A reference to the Array.Prototype.values function. +CHAKRA_API +JsGetArrayValuesFunction(_Out_ JsValueRef * result); + +/// +/// Returns a reference to the Array.Prototype.entries function. The function is created if it's not already present. +/// +/// A reference to the Array.Prototype.entries function. +CHAKRA_API +JsGetArrayEntriesFunction(_Out_ JsValueRef * result); + +/// +/// Returns the property id of the Symbol.iterator property. +/// +/// The property id of the Symbol.iterator property. +CHAKRA_API +JsGetPropertyIdSymbolIterator(_Out_ JsPropertyIdRef * propertyId); + +/// +/// Returns a reference to the Javascript error prototype object. +/// +/// A reference to the Javascript error prototype object. +CHAKRA_API +JsGetErrorPrototype(_Out_ JsValueRef * result); + +/// +/// Returns a reference to the Javascript iterator prototype object. +/// +/// A reference to the Javascript iterator prototype object. +CHAKRA_API +JsGetIteratorPrototype(_Out_ JsValueRef * result); + +/// +/// Returns a value that indicates whether an object is callable. +/// +/// +/// Requires an active script context. +/// +/// The object to test. +/// If the object is callable, true, false otherwise. +/// +/// The code JsNoError if the operation succeeded, a failure code otherwise. +/// +CHAKRA_API +JsIsCallable( + _In_ JsValueRef object, + _Out_ bool *isCallable); + +/// +/// Returns a value that indicates whether an object is a constructor. +/// +/// +/// Requires an active script context. +/// +/// The object to test. +/// If the object is a constructor, true, false otherwise. +/// +/// The code JsNoError if the operation succeeded, a failure code otherwise. +/// +CHAKRA_API +JsIsConstructor( + _In_ JsValueRef object, + _Out_ bool *isConstructor); + +/// +/// Clones an object +/// +/// The original object. +/// +/// Pointer to the cloned object. +/// +/// +/// The code JsNoError if the operation succeeded, a failure code otherwise. +/// +CHAKRA_API +JsCloneObject( + _In_ JsValueRef source, + _Out_ JsValueRef* clonedObject); + +/// +/// Determines whether an object has a private property. +/// +/// +/// Requires an active script context. +/// +/// The object that may contain the property. +/// The key (JavascriptString or JavascriptSymbol) to the property. +/// Whether the object (or a prototype) has the property. +/// +/// The code JsNoError if the operation succeeded, a failure code otherwise. +/// +CHAKRA_API +JsPrivateHasProperty( + _In_ JsValueRef object, + _In_ JsValueRef key, + _Out_ bool *hasProperty); + +/// +/// Gets an object's private property +/// +/// +/// Requires an active script context. +/// +/// The object that contains the property. +/// The key (JavascriptString or JavascriptSymbol) to the property. +/// The value of the property. +/// +/// The code JsNoError if the operation succeeded, a failure code otherwise. +/// +CHAKRA_API +JsPrivateGetProperty( + _In_ JsValueRef object, + _In_ JsValueRef key, + _Out_ JsValueRef *value); + +/// +/// Puts an object's private property. +/// +/// +/// Requires an active script context. +/// +/// The object that contains the property. +/// The key (JavascriptString or JavascriptSymbol) to the property. +/// The new value of the property. +/// +/// The code JsNoError if the operation succeeded, a failure code otherwise. +/// +CHAKRA_API +JsPrivateSetProperty( + _In_ JsValueRef object, + _In_ JsValueRef key, + _In_ JsValueRef value); + +/// +/// Deletes an object's private property. +/// +/// +/// Requires an active script context. +/// +/// The object that contains the property. +/// The key (JavascriptString or JavascriptSymbol) to the property. +/// Whether the property was deleted. +/// +/// The code JsNoError if the operation succeeded, a failure code otherwise. +/// +CHAKRA_API +JsPrivateDeleteProperty( + _In_ JsValueRef object, + _In_ JsValueRef key, + _Out_ JsValueRef *result); + /// /// Gets an object's property. /// @@ -1076,6 +1441,31 @@ CHAKRA_API _In_ JsValueRef propertyDescriptor, _Out_ bool *result); +/// +/// Defines a new object's own property from a property descriptor. +/// +/// +/// Requires an active script context. +/// +/// The object that has the property. +/// The key (JavascriptString or JavascriptSymbol) to the property. +/// The property descriptor. +/// Whether the property was defined. +/// +/// The code JsNoError if the operation succeeded, a failure code otherwise. +/// +CHAKRA_API +JsObjectDefinePropertyFull( + _In_ JsValueRef object, + _In_ JsValueRef key, + _In_opt_ JsValueRef value, + _In_opt_ JsValueRef getter, + _In_opt_ JsValueRef setter, + _In_ bool writable, + _In_ bool enumerable, + _In_ bool configurable, + _Out_ bool *result); + /// /// Deletes an object's property. /// @@ -1271,5 +1661,366 @@ CHAKRA_API _In_ JsValueRef parserState, _Out_ JsValueRef * result); +/// +/// Deserializes the cache of initial parser state and (along with the same +/// script source) returns a function representing that script. +/// +/// +/// +/// Requires an active script context. +/// +/// +/// Script source can be either JavascriptString or JavascriptExternalArrayBuffer. +/// In case it is an ExternalArrayBuffer, and the encoding of the buffer is Utf16, +/// JsParseScriptAttributeArrayBufferIsUtf16Encoded is expected on parseAttributes. +/// +/// +/// Use JavascriptExternalArrayBuffer with Utf8/ASCII script source +/// for better performance and smaller memory footprint. +/// +/// +/// The script to deserialize. +/// +/// A cookie identifying the script that can be used by debuggable script contexts. +/// +/// The location the script came from +/// Attribute mask for parsing the script +/// +/// A buffer containing a cache of the parser state generated by JsSerializeParserState. +/// +/// A function representing the script. This parameter can be null. +/// +/// The code JsNoError if the operation succeeded, a failure code otherwise. +/// +CHAKRA_API + JsDeserializeParserState( + _In_ JsValueRef script, + _In_ JsSourceContext sourceContext, + _In_ JsValueRef sourceUrl, + _In_ JsParseScriptAttributes parseAttributes, + _In_ JsValueRef parserState, + _Out_ JsValueRef* result); + +typedef void (CHAKRA_CALLBACK *JsBeforeSweepCallback)(_In_opt_ void *callbackState); + +CHAKRA_API + JsSetRuntimeBeforeSweepCallback( + _In_ JsRuntimeHandle runtimeHandle, + _In_opt_ void *callbackState, + _In_ JsBeforeSweepCallback beforeSweepCallback); + +CHAKRA_API +JsSetRuntimeDomWrapperTracingCallbacks( + _In_ JsRuntimeHandle runtimeHandle, + _In_ JsRef wrapperTracingState, + _In_ JsDOMWrapperTracingCallback wrapperTracingCallback, + _In_ JsDOMWrapperTracingDoneCallback wrapperTracingDoneCallback, + _In_ JsDOMWrapperTracingEnterFinalPauseCallback enterFinalPauseCallback); + +CHAKRA_API +JsTraceExternalReference( + _In_ JsRuntimeHandle runtimeHandle, + _In_ JsValueRef value + ); + +CHAKRA_API +JsAllocRawData( + _In_ JsRuntimeHandle runtimeHandle, + _In_ size_t sizeInBytes, + _In_ bool zeroed, + _Out_ JsRef * buffer +); + +/// +/// A callback function to ask host to re-allocated buffer to the new size when the current buffer is full +/// +/// Pointer representing state of the serializer +/// An old memory buffer, which may be null, to be reallocated +/// Request host to allocate buffer of this size +/// Actual size of the new buffer +/// +/// New buffer will be returned upon success, null otherwise. +/// +typedef byte * (CHAKRA_CALLBACK *ReallocateBufferMemoryFunc)(void* state, byte *oldBuffer, size_t newSize, size_t *allocatedSize); + +/// +/// A callback to ask host write current Host object to the serialization buffer. +/// +/// +/// A Boolean true is returned upon success, false otherwise. +/// +typedef bool (CHAKRA_CALLBACK *WriteHostObjectFunc)(void* state, void* hostObject); + +/// +/// Initialize Serialization of the object. +/// +/// A callback function to ask host to re-allocated buffer to the new size when the current buffer is full +/// A callback function to interact with host during serialization +/// A state object to pass to callback functions +/// A handle which provides various functionalities to serialize objects +/// +/// The code JsNoError if the operation succeeded, a failure code otherwise. +/// +CHAKRA_API +JsVarSerializer( + _In_ ReallocateBufferMemoryFunc reallocateBufferMemory, + _In_ WriteHostObjectFunc writeHostObject, + _In_opt_ void * callbackState, + _Out_ JsVarSerializerHandle *serializerHandle); + +/// +/// Write raw bytes to the buffer. +/// +/// Source byte buffer +/// Length of bytes to write from source raw byte buffer +/// +/// The code JsNoError if the operation succeeded, a failure code otherwise. +/// +CHAKRA_API +JsVarSerializerWriteRawBytes( + _In_ JsVarSerializerHandle serializerHandle, + _In_ const void* source, + _In_ size_t length); + +/// +/// A method to serialize given Javascript object to the serialization buffer +/// +/// A Javascript object to be serialized +/// +/// The code JsNoError if the operation succeeded, a failure code otherwise. +/// +CHAKRA_API +JsVarSerializerWriteValue( + _In_ JsVarSerializerHandle serializerHandle, + _In_ JsValueRef rootObject); + +/// +/// A method to pass on the current serialized buffer (this buffer was allocated using ReallocateBufferMemory) to host. +/// +/// A buffer which holds current serialized data +/// Length of the buffer +/// +/// The code JsNoError if the operation succeeded, a failure code otherwise. +/// +CHAKRA_API +JsVarSerializerReleaseData( + _In_ JsVarSerializerHandle serializerHandle, + _Out_ byte** data, + _Out_ size_t *dataLength); + +/// +/// Detach all array buffers which were passed using SetTransferableVars. +/// +/// +/// The code JsNoError if the operation succeeded, a failure code otherwise. +/// +CHAKRA_API +JsVarSerializerDetachArrayBuffer(_In_ JsVarSerializerHandle serializerHandle); + +/// +/// Host provides all the objects which has transferable semantics (Such as ArrayBuffers). +/// +/// An array of transferable objects +/// Length of transferableVars array +/// +/// The code JsNoError if the operation succeeded, a failure code otherwise. +/// +CHAKRA_API +JsVarSerializerSetTransferableVars( + _In_ JsVarSerializerHandle serializerHandle, + _In_opt_ JsValueRef *transferableVars, + _In_ size_t transferableVarsCount); + +/// +/// Free current object (which was created upon JsVarSerializer) when the serialization is done. SerializerHandleBase object should not be used further after FreeSelf call. +/// +/// +/// The code JsNoError if the operation succeeded, a failure code otherwise. +/// +CHAKRA_API +JsVarSerializerFree(_In_ JsVarSerializerHandle serializerHandle); + +/// +/// A callback to ask host to read the current data from the serialization buffer as a Host object. +/// +/// +/// A valid host object is returned upon success, an exception is thrown otherwise. +/// +typedef JsValueRef(*ReadHostObjectFunc)(void* state); + +/// +/// A callback to ask host to retrieve SharedArrayBuffer object from given ID. +/// +/// An ID, which was provided by SerializerCallbackBase::GetSharedArrayBufferId method +/// +/// A valid SharedArrayBuffer is returned upon success, an exception is thrown otherwise. +/// +typedef JsValueRef(*GetSharedArrayBufferFromIdFunc)(void* state, uint32_t id); + +/// +/// Initiate Deserialization of the memory buffer to a Javascript object. +/// +/// A memory buffer which holds the serialized data +/// Length of the passed data in bytes +/// A callback to ask host to read the current data from the serialization buffer as a Host object. +/// A callback to ask host to retrieve SharedArrayBuffer object from given ID. +/// A callback object to interact with host during deserialization +/// A handle which provides various functionalities to deserailize a buffer to an object +/// +/// The code JsNoError if the operation succeeded, a failure code otherwise. +/// +CHAKRA_API +JsVarDeserializer( + _In_ void *data, + _In_ size_t size, + _In_ ReadHostObjectFunc readHostObject, + _In_ GetSharedArrayBufferFromIdFunc getSharedArrayBufferFromId, + _In_opt_ void* callbackState, + _Out_ JsVarDeserializerHandle *deserializerHandle); + +/// +/// A method to read bytes from the serialized buffer. Caller should not allocate the data buffer. +/// +/// Advance current buffer's position by length +/// The data will be pointing to the raw serialized buffer +/// +/// A Boolean value true is returned upon success, false otherwise. +/// +CHAKRA_API +JsVarDeserializerReadRawBytes(_In_ JsVarDeserializerHandle deserializerHandle, _In_ size_t length, _Out_ void **data); + +/// +/// A method to read bytes from the serialized buffer. Caller must allocate data buffer by length. +/// +/// Length of data buffer +/// data buffer to be populated from the serialized buffer till the given length +/// +/// A Boolean value true is returned upon success, false otherwise. +/// +CHAKRA_API +JsVarDeserializerReadBytes(_In_ JsVarDeserializerHandle deserializerHandle, _In_ size_t length, _Out_ void **data); + +/// +/// Deserialized current buffer and pass the root object. +/// +/// +/// A valid Javascript object is returned upon success, an exception is thrown otherwise. +/// +CHAKRA_API +JsVarDeserializerReadValue(_In_ JsVarDeserializerHandle deserializerHandle, _Out_ JsValueRef* value); + +/// +/// Host provides all the objects which has transferable semantics (Such as ArrayBuffers). +/// +/// An array of transferable objects +/// Length of transferableVars array +/// +/// The code JsNoError if the operation succeeded, a failure code otherwise. +/// +CHAKRA_API +JsVarDeserializerSetTransferableVars(_In_ JsVarDeserializerHandle deserializerHandle, _In_opt_ JsValueRef *transferableVars, _In_ size_t transferableVarsCount); + +/// +/// Free current object (which was created upon JsVarSerializer) when the serialization is done. JsVarSerializerHandle object should not be used further after FreeSelf call. +/// +/// +/// The code JsNoError if the operation succeeded, a failure code otherwise. +/// +CHAKRA_API +JsVarDeserializerFree(_In_ JsVarDeserializerHandle deserializerHandle); + +/// +/// Extract extra info stored from an ArrayBuffer object +/// +/// An ArrayBuffer from which the extrainfor needed to extracted +/// The host information (some flags such as object externalized, detached) stored in the object +/// +/// The code JsNoError if the operation succeeded, a failure code otherwise. +/// +CHAKRA_API +JsGetArrayBufferExtraInfo( + _In_ JsValueRef arrayBuffer, + _Out_ char *extraInfo); + +/// +/// Set Extra info (host data) to an ArrayBuffer object. +/// +/// An ArrayBuffer on which the host information will be stored +/// The host data +/// +/// The code JsNoError if the operation succeeded, a failure code otherwise. +/// +CHAKRA_API +JsSetArrayBufferExtraInfo( + _In_ JsValueRef arrayBuffer, + _In_ char extraInfo); + +/// +/// Neuter current ArrayBuffer +/// +/// An ArrayBuffer which will be neutered +/// +/// The code JsNoError if the operation succeeded, a failure code otherwise. +/// +CHAKRA_API +JsDetachArrayBuffer( + _In_ JsValueRef arrayBuffer); + +typedef void(__cdecl *ArrayBufferFreeFn)(void*); + +/// +/// Returns the function which free the underlying buffer of ArrayBuffer +/// +/// An ArrayBuffer for which Free function to be returned +/// Free function will be returned +/// +/// The code JsNoError if the operation succeeded, a failure code +/// otherwise. +/// +CHAKRA_API +JsGetArrayBufferFreeFunction( + _In_ JsValueRef arrayBuffer, + _Out_ ArrayBufferFreeFn* freeFn); + +/// +/// Take ownership of current ArrayBuffer +/// +/// An ArrayBuffer to take ownership of +/// +/// The code JsNoError if the operation succeeded, a failure code otherwise. +/// +CHAKRA_API +JsExternalizeArrayBuffer( + _In_ JsValueRef arrayBuffer); + +/// +/// Get host embedded data from the current object +/// +/// Js object from which an embedder data to be fetched +/// An embedder data to be returned, it will be nullptr if not found +/// +/// The code JsNoError if the operation succeeded, a failure code +/// otherwise. +/// +CHAKRA_API +JsGetEmbedderData(_In_ JsValueRef instance, _Out_ JsValueRef* embedderData); + +/// +/// Set host embedded data on the current object +/// +/// Js object from which an embedder data to be fetched +/// An embedder data to be set on the passed object +/// +/// The code JsNoError if the operation succeeded, a failure code +/// otherwise. +/// +CHAKRA_API +JsSetEmbedderData(_In_ JsValueRef instance, _In_ JsValueRef embedderData); + +#ifdef _WIN32 +#include "ChakraCoreWindows.h" +#endif // _WIN32 + + #endif // _CHAKRACOREBUILD #endif // _CHAKRACORE_H_ diff --git a/lib/Jsrt/ChakraCoreWindows.h b/lib/Jsrt/ChakraCoreWindows.h new file mode 100644 index 00000000000..0e44c80486e --- /dev/null +++ b/lib/Jsrt/ChakraCoreWindows.h @@ -0,0 +1,44 @@ +//------------------------------------------------------------------------------------------------------- +// Copyright (C) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. +//------------------------------------------------------------------------------------------------------- + +#ifdef _MSC_VER +#pragma once +#endif // _MSC_VER + +#ifndef _CHAKRACOREWINDOWS_H_ +#define _CHAKRACOREWINDOWS_H_ + +#include + +/// +/// Globally enables out-of-process JIT. +/// +/// +/// Should be called before JS code is executed. +/// Code in all runtimes will run in interpreter until JsConnectJITProcess is called. +/// +/// +/// The code JsNoError if the operation succeeded, a failure code otherwise. +/// +CHAKRA_API +JsEnableOOPJIT(); + +/// +/// Globally enables out-of-process JIT and connects to a Chakra JIT process that was initialized +/// by calling JsInitializeJITServer +/// +/// +/// Out-of-process JIT should be enabled before JS code is executed. +/// +/// Handle to the JIT process +/// Optional pointer to an RPC SECURITY_DESCRIPTOR structure +/// Same UUID that was passed to JsInitializeJITServer +/// +/// The code JsNoError if the operation succeeded, a failure code otherwise. +/// +CHAKRA_API +JsConnectJITProcess(_In_ HANDLE processHandle, _In_opt_ void* serverSecurityDescriptor, _In_ UUID connectionId); + +#endif // _CHAKRACOREWINDOWS_H_ diff --git a/lib/Jsrt/Core/CMakeLists.txt b/lib/Jsrt/Core/CMakeLists.txt index a8b38c3d095..b707163adef 100644 --- a/lib/Jsrt/Core/CMakeLists.txt +++ b/lib/Jsrt/Core/CMakeLists.txt @@ -10,5 +10,6 @@ target_include_directories ( ../../Runtime ../../Runtime/ByteCode ../../Parser + ../../SCACore ../ ) diff --git a/lib/Jsrt/Core/Chakra.Jsrt.Core.vcxproj b/lib/Jsrt/Core/Chakra.Jsrt.Core.vcxproj index b87c054e19a..fff7742db1f 100644 --- a/lib/Jsrt/Core/Chakra.Jsrt.Core.vcxproj +++ b/lib/Jsrt/Core/Chakra.Jsrt.Core.vcxproj @@ -29,6 +29,7 @@ $(MSBuildThisFileDirectory)..\..\Runtime\ByteCode; $(MSBuildThisFileDirectory)..\..\Common; $(MSBuildThisFileDirectory)..\..\Parser; + $(MSBuildThisFileDirectory)..\..\SCACore; $(MSBuildThisFileDirectory)..\..\WasmReader; $(MSBuildThisFileDirectory)..\..\Backend; %(AdditionalIncludeDirectories) diff --git a/lib/Jsrt/Core/JsrtContextCore.cpp b/lib/Jsrt/Core/JsrtContextCore.cpp index 5fb1a17006a..7f82d1f7fb2 100644 --- a/lib/Jsrt/Core/JsrtContextCore.cpp +++ b/lib/Jsrt/Core/JsrtContextCore.cpp @@ -1,9 +1,11 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #include "Runtime.h" #include "JsrtContext.h" +#include "SCACorePch.h" #include "JsrtContextCore.h" JsrtContext *JsrtContext::New(JsrtRuntime * runtime) @@ -104,26 +106,27 @@ void JsrtContextCore::OnScriptLoad(Js::JavascriptFunction * scriptFunction, Js:: HRESULT ChakraCoreHostScriptContext::FetchImportedModule(Js::ModuleRecordBase* referencingModule, LPCOLESTR specifier, Js::ModuleRecordBase** dependentModuleRecord) { - return FetchImportedModuleHelper( - [=](Js::JavascriptString *specifierVar, JsModuleRecord *dependentRecord) -> JsErrorCode + if (fetchImportedModuleCallback == nullptr) + { + return E_INVALIDARG; + } + Js::JavascriptString* specifierVar = Js::JavascriptString::NewCopySz(specifier, GetScriptContext()); + JsModuleRecord dependentRecord = JS_INVALID_REFERENCE; + { + AUTO_NO_EXCEPTION_REGION; + JsErrorCode errorCode = fetchImportedModuleCallback(referencingModule, specifierVar, &dependentRecord); + if (errorCode == JsNoError) { - return fetchImportedModuleCallback(referencingModule, specifierVar, dependentRecord); - }, specifier, dependentModuleRecord); + *dependentModuleRecord = static_cast(dependentRecord); + return NOERROR; + } + } + return E_INVALIDARG; } HRESULT ChakraCoreHostScriptContext::FetchImportedModuleFromScript(JsSourceContext dwReferencingSourceContext, LPCOLESTR specifier, Js::ModuleRecordBase** dependentModuleRecord) { - return FetchImportedModuleHelper( - [=](Js::JavascriptString *specifierVar, JsModuleRecord *dependentRecord) -> JsErrorCode - { - return fetchImportedModuleFromScriptCallback(dwReferencingSourceContext, specifierVar, dependentRecord); - }, specifier, dependentModuleRecord); -} - -template -HRESULT ChakraCoreHostScriptContext::FetchImportedModuleHelper(Fn fetch, LPCOLESTR specifier, Js::ModuleRecordBase** dependentModuleRecord) -{ - if (fetchImportedModuleCallback == nullptr) + if (fetchImportedModuleFromScriptCallback == nullptr) { return E_INVALIDARG; } @@ -131,7 +134,7 @@ HRESULT ChakraCoreHostScriptContext::FetchImportedModuleHelper(Fn fetch, LPCOLES JsModuleRecord dependentRecord = JS_INVALID_REFERENCE; { AUTO_NO_EXCEPTION_REGION; - JsErrorCode errorCode = fetch(specifierVar, &dependentRecord); + JsErrorCode errorCode = fetchImportedModuleFromScriptCallback(dwReferencingSourceContext, specifierVar, &dependentRecord); if (errorCode == JsNoError) { *dependentModuleRecord = static_cast(dependentRecord); @@ -158,3 +161,175 @@ HRESULT ChakraCoreHostScriptContext::NotifyHostAboutModuleReady(Js::ModuleRecord return E_INVALIDARG; } +HRESULT ChakraCoreHostScriptContext::InitializeImportMeta(Js::ModuleRecordBase* referencingModule, Js::Var importMetaObject) +{ + if (initializeImportMetaCallback == nullptr) + { + return E_INVALIDARG; + } + { + AUTO_NO_EXCEPTION_REGION; + JsErrorCode errorCode = initializeImportMetaCallback(referencingModule, importMetaObject); + if (errorCode == JsNoError) + { + return NOERROR; + } + } + return E_INVALIDARG; +} + +bool ChakraCoreHostScriptContext::ReportModuleCompletion(Js::ModuleRecordBase* module, Js::Var exception) +{ + if (reportModuleCompletionCallback == nullptr) + { + return false; + } + { + AUTO_NO_EXCEPTION_REGION; + JsErrorCode errorCode = reportModuleCompletionCallback(module, exception); + if (errorCode == JsNoError) + { + return true; + } + } + return false; +} + +ChakraCoreStreamWriter::~ChakraCoreStreamWriter() +{ + HeapDelete(m_serializerCore); +} + +byte * ChakraCoreStreamWriter::ExtendBuffer(byte *oldBuffer, size_t newSize, size_t *allocatedSize) +{ + m_data = this->reallocateBufferMemory(this->callbackState, oldBuffer, newSize, allocatedSize); + m_length = newSize; + + if (m_data == nullptr) + { + // free(m_data); + OutOfMemory_unrecoverable_error(); + } + return m_data; +} + +bool ChakraCoreStreamWriter::WriteHostObject(void* data) +{ + return this->writeHostObject(this->callbackState, data); +} + +void ChakraCoreStreamWriter::SetSerializer(Js::SCACore::Serializer *s) +{ + m_serializerCore = s; +} + +void ChakraCoreStreamWriter::WriteRawBytes(const void* source, size_t length) +{ + Assert(m_serializerCore); + m_serializerCore->WriteRawBytes(source, length); +} + +bool ChakraCoreStreamWriter::WriteValue(JsValueRef root) +{ + Assert(m_serializerCore); + return m_serializerCore->WriteValue((Js::Var)root); +} + +bool ChakraCoreStreamWriter::ReleaseData(byte** data, size_t *dataLength) +{ + if (m_data) + { + Assert(m_serializerCore); + return m_serializerCore->Release(data, dataLength); + } + return false; +} + +bool ChakraCoreStreamWriter::DetachArrayBuffer() +{ + Assert(m_serializerCore); + return m_serializerCore->DetachArrayBuffer(); +} + +JsErrorCode ChakraCoreStreamWriter::SetTransferableVars(JsValueRef *transferableVars, size_t transferableVarsCount) +{ + Assert(m_serializerCore); + HRESULT hr = m_serializerCore->SetTransferableVars((Js::Var *)transferableVars, transferableVarsCount); + if (hr == S_OK) + { + return JsNoError; + } + else if (hr == E_SCA_TRANSFERABLE_UNSUPPORTED) + { + return JsTransferableNotSupported; + } + else if (hr == E_SCA_TRANSFERABLE_NEUTERED) + { + return JsTransferableAlreadyDetached; + } + return JsSerializerNotSupported; +} + +void ChakraCoreStreamWriter::FreeSelf() +{ + HeapDelete(this); +} + +ChakraHostDeserializerHandle::~ChakraHostDeserializerHandle() +{ + HeapDelete(m_deserializer); +} + +void ChakraHostDeserializerHandle::SetDeserializer(Js::SCACore::Deserializer *deserializer) +{ + m_deserializer = deserializer; +} + +bool ChakraHostDeserializerHandle::ReadRawBytes(size_t length, void **data) +{ + Assert(m_deserializer); + return m_deserializer->ReadRawBytes(length, data); +} + +bool ChakraHostDeserializerHandle::ReadBytes(size_t length, void **data) +{ + Assert(m_deserializer); + return m_deserializer->ReadBytes(length, data); +} + +JsValueRef ChakraHostDeserializerHandle::ReadValue() +{ + Assert(m_deserializer); + return m_deserializer->ReadValue(); +} + +JsErrorCode ChakraHostDeserializerHandle::SetTransferableVars(JsValueRef *transferableVars, size_t transferableVarsCount) +{ + Assert(m_deserializer); + HRESULT hr = m_deserializer->SetTransferableVars((Js::Var *)transferableVars, transferableVarsCount); + if (hr == S_OK) + { + return JsNoError; + } + else if (hr == E_SCA_TRANSFERABLE_UNSUPPORTED) + { + return JsTransferableNotSupported; + } + else if (hr == E_SCA_TRANSFERABLE_NEUTERED) + { + return JsTransferableAlreadyDetached; + } + return JsSerializerNotSupported; +} + + +void ChakraHostDeserializerHandle::FreeSelf() +{ + HeapDelete(this); +} + +Js::Var ChakraHostDeserializerHandle::ReadHostObject() +{ + return (Js::Var)this->readHostObject(this->callbackState); +} + diff --git a/lib/Jsrt/Core/JsrtContextCore.h b/lib/Jsrt/Core/JsrtContextCore.h index bd79bc5ea07..ed7b7396f5e 100644 --- a/lib/Jsrt/Core/JsrtContextCore.h +++ b/lib/Jsrt/Core/JsrtContextCore.h @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #pragma once @@ -7,6 +8,15 @@ #include "JsrtRuntime.h" class ChakraCoreHostScriptContext; +namespace Js +{ + namespace SCACore + { + class Serializer; + class Deserializer; + } +} + class JsrtContextCore sealed : public JsrtContext { public: @@ -24,13 +34,79 @@ class JsrtContextCore sealed : public JsrtContext FieldNoBarrier(ChakraCoreHostScriptContext*) hostContext; }; +class ChakraCoreStreamWriter : public HostStream +{ + Js::SCACore::Serializer *m_serializerCore; + byte* m_data; + size_t m_length; + + ReallocateBufferMemoryFunc reallocateBufferMemory; + WriteHostObjectFunc writeHostObject; + void * callbackState; +public: + ChakraCoreStreamWriter(ReallocateBufferMemoryFunc reallocateBufferMemory, WriteHostObjectFunc writeHostObject, void * callbackState) : + reallocateBufferMemory(reallocateBufferMemory), + writeHostObject(writeHostObject), + callbackState(callbackState), + m_data(nullptr), + m_length(0), + m_serializerCore(nullptr) + { + } + + ~ChakraCoreStreamWriter(); + + void SetSerializer(Js::SCACore::Serializer *s); + + void WriteRawBytes(const void* source, size_t length); + bool WriteValue(JsValueRef root); + bool ReleaseData(byte** data, size_t *dataLength); + bool DetachArrayBuffer(); + JsErrorCode SetTransferableVars(JsValueRef *transferableVars, size_t transferableVarsCount); + void FreeSelf(); + + virtual bool WriteHostObject(void* data) override; + virtual byte * ExtendBuffer(byte *oldBuffer, size_t newSize, size_t *allocatedSize) override; +}; + +class ChakraHostDeserializerHandle : public HostReadStream +{ + Js::SCACore::Deserializer *m_deserializer; + ReadHostObjectFunc readHostObject; + GetSharedArrayBufferFromIdFunc getSharedArrayBufferFromId; + void* callbackState; + +public: + ChakraHostDeserializerHandle(ReadHostObjectFunc readHostObject, GetSharedArrayBufferFromIdFunc getSharedArrayBufferFromId, void* callbackState) : + readHostObject(readHostObject), + getSharedArrayBufferFromId(getSharedArrayBufferFromId), + callbackState(callbackState), + m_deserializer(nullptr) + { } + + ~ChakraHostDeserializerHandle(); + + void SetDeserializer(Js::SCACore::Deserializer *deserializer); + bool ReadRawBytes(size_t length, void **data); + virtual bool ReadBytes(size_t length, void **data); + virtual JsErrorCode SetTransferableVars(JsValueRef *transferableVars, size_t transferableVarsCount); + JsValueRef ReadValue(); + void FreeSelf(); + + virtual Js::Var ReadHostObject() override; + +}; + class ChakraCoreHostScriptContext sealed : public HostScriptContext { public: ChakraCoreHostScriptContext(Js::ScriptContext* scriptContext) : HostScriptContext(scriptContext), + fetchImportedModuleCallback(nullptr), + fetchImportedModuleFromScriptCallback(nullptr), notifyModuleReadyCallback(nullptr), - fetchImportedModuleCallback(nullptr) + initializeImportMetaCallback(nullptr), + reportModuleCompletionCallback(nullptr) { } ~ChakraCoreHostScriptContext() @@ -147,18 +223,11 @@ class ChakraCoreHostScriptContext sealed : public HostScriptContext return E_NOTIMPL; } - HRESULT ArrayBufferFromExternalObject(__in Js::RecyclableObject *obj, - __out Js::ArrayBuffer **ppArrayBuffer) override + HRESULT ThrowIfFailed(HRESULT hr) override { - // there is no IBuffer in chakracore. - *ppArrayBuffer = nullptr; - return S_FALSE; - } - - Js::JavascriptError* CreateWinRTError(IErrorInfo* perrinfo, Js::RestrictedErrorStrings * proerrstr) override - { - AssertMsg(false, "no winrt support in chakracore"); - return nullptr; + hr; + // No support yet + return S_OK; } HRESULT EnqueuePromiseTask(Js::Var taskVar) override @@ -171,6 +240,9 @@ class ChakraCoreHostScriptContext sealed : public HostScriptContext HRESULT NotifyHostAboutModuleReady(Js::ModuleRecordBase* referencingModule, Js::Var exceptionVar) override; + HRESULT InitializeImportMeta(Js::ModuleRecordBase* referencingModule, Js::Var importMetaObject) override; + bool ReportModuleCompletion(Js::ModuleRecordBase* module, Js::Var exception) override; + void SetNotifyModuleReadyCallback(NotifyModuleReadyCallback notifyCallback) { this->notifyModuleReadyCallback = notifyCallback; } NotifyModuleReadyCallback GetNotifyModuleReadyCallback() const { return this->notifyModuleReadyCallback; } @@ -180,6 +252,12 @@ class ChakraCoreHostScriptContext sealed : public HostScriptContext void SetFetchImportedModuleFromScriptCallback(FetchImportedModuleFromScriptCallBack fetchCallback) { this->fetchImportedModuleFromScriptCallback = fetchCallback; } FetchImportedModuleFromScriptCallBack GetFetchImportedModuleFromScriptCallback() const { return this->fetchImportedModuleFromScriptCallback; } + void SetInitializeImportMetaCallback(InitializeImportMetaCallback initializeCallback) { this->initializeImportMetaCallback = initializeCallback; } + InitializeImportMetaCallback GetInitializeImportMetaCallback() const { return this->initializeImportMetaCallback; } + + void SetReportModuleCompletionCallback(ReportModuleCompletionCallback processCallback) { this->reportModuleCompletionCallback = processCallback; } + ReportModuleCompletionCallback GetReportModuleCompletionCallback() const { return this->reportModuleCompletionCallback; } + #if DBG_DUMP || defined(PROFILE_EXEC) || defined(PROFILE_MEM) void EnsureParentInfo(Js::ScriptContext* scriptContext = NULL) override { @@ -189,9 +267,9 @@ class ChakraCoreHostScriptContext sealed : public HostScriptContext #endif private: - template - HRESULT FetchImportedModuleHelper(Fn fetch, LPCOLESTR specifier, Js::ModuleRecordBase** dependentModuleRecord); FetchImportedModuleCallBack fetchImportedModuleCallback; FetchImportedModuleFromScriptCallBack fetchImportedModuleFromScriptCallback; NotifyModuleReadyCallback notifyModuleReadyCallback; + InitializeImportMetaCallback initializeImportMetaCallback; + ReportModuleCompletionCallback reportModuleCompletionCallback; }; diff --git a/lib/Jsrt/Core/JsrtCore.cpp b/lib/Jsrt/Core/JsrtCore.cpp index 77dd538139b..c0400ac6bda 100644 --- a/lib/Jsrt/Core/JsrtCore.cpp +++ b/lib/Jsrt/Core/JsrtCore.cpp @@ -1,38 +1,42 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #include "JsrtPch.h" #include "JsrtInternal.h" +#include "JsrtExternalObject.h" +#include "JsrtExternalArrayBuffer.h" #include "jsrtHelper.h" +#include "SCACorePch.h" #include "JsrtContextCore.h" #include "ChakraCore.h" +#include "Common/ByteSwap.h" +#include "Library/DataView.h" +#include "Library/JavascriptExceptionMetadata.h" +#include "Base/ThreadContextTlsEntry.h" +#include "Library/JavascriptPromise.h" +#include "Codex/Utf8Helper.h" + CHAKRA_API JsInitializeModuleRecord( _In_opt_ JsModuleRecord referencingModule, - _In_ JsValueRef normalizedSpecifier, + _In_opt_ JsValueRef normalizedSpecifier, _Outptr_result_maybenull_ JsModuleRecord* moduleRecord) { PARAM_NOT_NULL(moduleRecord); - Js::SourceTextModuleRecord* childModuleRecord = nullptr; + Js::SourceTextModuleRecord* newModuleRecord = nullptr; JsErrorCode errorCode = ContextAPIWrapper_NoRecord([&](Js::ScriptContext *scriptContext) -> JsErrorCode { - childModuleRecord = Js::SourceTextModuleRecord::Create(scriptContext); - if (referencingModule == nullptr) - { - childModuleRecord->SetIsRootModule(); - } - if (normalizedSpecifier != JS_INVALID_REFERENCE) - { - childModuleRecord->SetSpecifier(normalizedSpecifier); - } + newModuleRecord = Js::SourceTextModuleRecord::Create(scriptContext); + newModuleRecord->SetSpecifier(normalizedSpecifier); return JsNoError; }); if (errorCode == JsNoError) { - *moduleRecord = childModuleRecord; + *moduleRecord = newModuleRecord; } else { @@ -75,9 +79,9 @@ JsParseModuleSource( { const char16 *moduleUrlSz = nullptr; size_t moduleUrlLen = 0; - if (moduleRecord->GetModuleUrl()) + if (moduleRecord->GetSpecifier()) { - Js::JavascriptString *moduleUrl = Js::JavascriptString::FromVar(moduleRecord->GetModuleUrl()); + Js::JavascriptString *moduleUrl = Js::VarTo(moduleRecord->GetSpecifier()); moduleUrlSz = moduleUrl->GetSz(); moduleUrlLen = moduleUrl->GetLength(); } @@ -138,16 +142,27 @@ JsModuleEvaluation( CHAKRA_API JsSetModuleHostInfo( - _In_ JsModuleRecord requestModule, + _In_opt_ JsModuleRecord requestModule, _In_ JsModuleHostInfoKind moduleHostInfo, _In_ void* hostInfo) { + Js::ScriptContext* scriptContext; + Js::SourceTextModuleRecord* moduleRecord; if (!Js::SourceTextModuleRecord::Is(requestModule)) { - return JsErrorInvalidArgument; + if (moduleHostInfo == JsModuleHostInfo_Exception || + moduleHostInfo == JsModuleHostInfo_HostDefined || + moduleHostInfo == JsModuleHostInfo_Url) + { + return JsErrorInvalidArgument; + } + scriptContext = JsrtContext::GetCurrent()->GetScriptContext(); + } + else + { + moduleRecord = Js::SourceTextModuleRecord::FromHost(requestModule); + scriptContext = moduleRecord->GetScriptContext(); } - Js::SourceTextModuleRecord* moduleRecord = Js::SourceTextModuleRecord::FromHost(requestModule); - Js::ScriptContext* scriptContext = moduleRecord->GetScriptContext(); JsrtContext* jsrtContext = (JsrtContext*)scriptContext->GetLibrary()->GetJsrtContext(); JsErrorCode errorCode = SetContextAPIWrapper(jsrtContext, [&](Js::ScriptContext *scriptContext) -> JsErrorCode { JsrtContextCore* currentContext = static_cast(JsrtContextCore::GetCurrent()); @@ -170,8 +185,14 @@ JsSetModuleHostInfo( case JsModuleHostInfo_NotifyModuleReadyCallback: currentContext->GetHostScriptContext()->SetNotifyModuleReadyCallback(reinterpret_cast(hostInfo)); break; + case JsModuleHostInfo_InitializeImportMetaCallback: + currentContext->GetHostScriptContext()->SetInitializeImportMetaCallback(reinterpret_cast(hostInfo)); + break; + case JsModuleHostInfo_ReportModuleCompletionCallback: + currentContext->GetHostScriptContext()->SetReportModuleCompletionCallback(reinterpret_cast(hostInfo)); + break; case JsModuleHostInfo_Url: - moduleRecord->SetModuleUrl(hostInfo); + moduleRecord->SetSpecifier(hostInfo); break; default: return JsInvalidModuleHostInfoKind; @@ -217,8 +238,14 @@ JsGetModuleHostInfo( case JsModuleHostInfo_NotifyModuleReadyCallback: *hostInfo = reinterpret_cast(currentContext->GetHostScriptContext()->GetNotifyModuleReadyCallback()); break; + case JsModuleHostInfo_InitializeImportMetaCallback: + *hostInfo = reinterpret_cast(currentContext->GetHostScriptContext()->GetInitializeImportMetaCallback()); + break; + case JsModuleHostInfo_ReportModuleCompletionCallback: + *hostInfo = reinterpret_cast(currentContext->GetHostScriptContext()->GetReportModuleCompletionCallback()); + break; case JsModuleHostInfo_Url: - *hostInfo = reinterpret_cast(moduleRecord->GetModuleUrl()); + *hostInfo = reinterpret_cast(moduleRecord->GetSpecifier()); break; default: return JsInvalidModuleHostInfoKind; @@ -241,6 +268,1296 @@ CHAKRA_API JsGetModuleNamespace(_In_ JsModuleRecord requestModule, _Outptr_resul { return JsErrorModuleNotEvaluated; } + if (moduleRecord->GetErrorObject() != nullptr) + { + return JsErrorInvalidArgument; + } *moduleNamespace = static_cast(moduleRecord->GetNamespace()); return JsNoError; } + +CHAKRA_API +JsVarSerializer( + _In_ ReallocateBufferMemoryFunc reallocateBufferMemory, + _In_ WriteHostObjectFunc writeHostObject, + _In_opt_ void * callbackState, + _Out_ JsVarSerializerHandle *serializerHandle) +{ + PARAM_NOT_NULL(reallocateBufferMemory); + PARAM_NOT_NULL(writeHostObject); + PARAM_NOT_NULL(serializerHandle); + JsErrorCode errorCode = ContextAPINoScriptWrapper_NoRecord([&](Js::ScriptContext *scriptContext) -> JsErrorCode { + + ChakraCoreStreamWriter *writer = HeapNew(ChakraCoreStreamWriter, reallocateBufferMemory, writeHostObject, callbackState); + writer->SetSerializer(HeapNew(Js::SCACore::Serializer, scriptContext, writer)); + *serializerHandle = writer; + return JsNoError; + }); + + return errorCode; + +} + +CHAKRA_API +JsVarSerializerWriteRawBytes( + _In_ JsVarSerializerHandle serializerHandle, + _In_ const void* source, + _In_ size_t length) +{ + PARAM_NOT_NULL(serializerHandle); + PARAM_NOT_NULL(source); + return ContextAPINoScriptWrapper_NoRecord([&](Js::ScriptContext *scriptContext) -> JsErrorCode { + ChakraCoreStreamWriter* streamWriter = reinterpret_cast(serializerHandle); + streamWriter->WriteRawBytes(source, length); + return JsNoError; + }); +} + +CHAKRA_API +JsVarSerializerWriteValue( + _In_ JsVarSerializerHandle serializerHandle, + _In_ JsValueRef rootObject) +{ + PARAM_NOT_NULL(serializerHandle); + PARAM_NOT_NULL(rootObject); + return ContextAPINoScriptWrapper_NoRecord([&](Js::ScriptContext *scriptContext) -> JsErrorCode { + ChakraCoreStreamWriter* streamWriter = reinterpret_cast(serializerHandle); + streamWriter->WriteValue(rootObject); + return JsNoError; + }); +} + +CHAKRA_API +JsVarSerializerReleaseData( + _In_ JsVarSerializerHandle serializerHandle, + _Out_ byte** data, + _Out_ size_t *dataLength) +{ + PARAM_NOT_NULL(serializerHandle); + PARAM_NOT_NULL(data); + PARAM_NOT_NULL(dataLength); + return ContextAPINoScriptWrapper_NoRecord([&](Js::ScriptContext *scriptContext) -> JsErrorCode { + ChakraCoreStreamWriter* streamWriter = reinterpret_cast(serializerHandle); + if (!streamWriter->ReleaseData(data, dataLength)) + { + return JsErrorInvalidArgument; + } + return JsNoError; + }); +} + +CHAKRA_API +JsVarSerializerDetachArrayBuffer(_In_ JsVarSerializerHandle serializerHandle) +{ + PARAM_NOT_NULL(serializerHandle); + return ContextAPINoScriptWrapper_NoRecord([&](Js::ScriptContext *scriptContext) -> JsErrorCode { + ChakraCoreStreamWriter* streamWriter = reinterpret_cast(serializerHandle); + if (!streamWriter->DetachArrayBuffer()) + { + return JsErrorInvalidArgument; + } + return JsNoError; + }); +} + +CHAKRA_API +JsVarSerializerSetTransferableVars( + _In_ JsVarSerializerHandle serializerHandle, + _In_opt_ JsValueRef *transferableVars, + _In_ size_t transferableVarsCount) +{ + PARAM_NOT_NULL(serializerHandle); + return ContextAPINoScriptWrapper_NoRecord([&](Js::ScriptContext *scriptContext) -> JsErrorCode { + ChakraCoreStreamWriter* streamWriter = reinterpret_cast(serializerHandle); + return streamWriter->SetTransferableVars(transferableVars, transferableVarsCount); + }); + +} + +CHAKRA_API +JsVarSerializerFree(_In_ JsVarSerializerHandle serializerHandle) +{ + PARAM_NOT_NULL(serializerHandle); + return ContextAPINoScriptWrapper_NoRecord([&](Js::ScriptContext *scriptContext) -> JsErrorCode { + ChakraCoreStreamWriter* streamWriter = reinterpret_cast(serializerHandle); + streamWriter->FreeSelf(); + return JsNoError; + }); +} + +CHAKRA_API +JsVarDeserializer( + _In_ void *data, + _In_ size_t size, + _In_ ReadHostObjectFunc readHostObject, + _In_ GetSharedArrayBufferFromIdFunc getSharedArrayBufferFromId, + _In_opt_ void* callbackState, + _Out_ JsVarDeserializerHandle *deserializerHandle) +{ + PARAM_NOT_NULL(data); + PARAM_NOT_NULL(readHostObject); + PARAM_NOT_NULL(getSharedArrayBufferFromId); + PARAM_NOT_NULL(deserializerHandle); + return ContextAPINoScriptWrapper_NoRecord([&](Js::ScriptContext *scriptContext) -> JsErrorCode { + ChakraHostDeserializerHandle *reader = HeapNew(ChakraHostDeserializerHandle, readHostObject, getSharedArrayBufferFromId, callbackState); + reader->SetDeserializer(HeapNew(Js::SCACore::Deserializer, data, size, scriptContext, reader)); + *deserializerHandle = reader; + return JsNoError; + }); +} + +CHAKRA_API +JsVarDeserializerReadRawBytes(_In_ JsVarDeserializerHandle deserializerHandle, _In_ size_t length, _Out_ void **data) +{ + PARAM_NOT_NULL(deserializerHandle); + PARAM_NOT_NULL(data); + return ContextAPINoScriptWrapper_NoRecord([&](Js::ScriptContext *scriptContext) -> JsErrorCode { + ChakraHostDeserializerHandle* deserializer = reinterpret_cast(deserializerHandle); + if (!deserializer->ReadRawBytes(length, data)) + { + return JsErrorInvalidArgument; + } + return JsNoError; + }); +} + +CHAKRA_API +JsVarDeserializerReadBytes(_In_ JsVarDeserializerHandle deserializerHandle, _In_ size_t length, _Out_ void **data) +{ + PARAM_NOT_NULL(deserializerHandle); + PARAM_NOT_NULL(data); + return ContextAPINoScriptWrapper_NoRecord([&](Js::ScriptContext *scriptContext) -> JsErrorCode { + ChakraHostDeserializerHandle* deserializer = reinterpret_cast(deserializerHandle); + if (!deserializer->ReadBytes(length, data)) + { + return JsErrorInvalidArgument; + } + return JsNoError; + }); +} + +CHAKRA_API +JsVarDeserializerReadValue(_In_ JsVarDeserializerHandle deserializerHandle, _Out_ JsValueRef* value) +{ + PARAM_NOT_NULL(deserializerHandle); + PARAM_NOT_NULL(value); + return ContextAPINoScriptWrapper_NoRecord([&](Js::ScriptContext *scriptContext) -> JsErrorCode { + ChakraHostDeserializerHandle* deserializer = reinterpret_cast(deserializerHandle); + *value = deserializer->ReadValue(); + return JsNoError; + }); +} + +CHAKRA_API +JsVarDeserializerSetTransferableVars(_In_ JsVarDeserializerHandle deserializerHandle, _In_opt_ JsValueRef *transferableVars, _In_ size_t transferableVarsCount) +{ + PARAM_NOT_NULL(deserializerHandle); + return ContextAPINoScriptWrapper_NoRecord([&](Js::ScriptContext *scriptContext) -> JsErrorCode { + ChakraHostDeserializerHandle* deserializer = reinterpret_cast(deserializerHandle); + return deserializer->SetTransferableVars(transferableVars, transferableVarsCount); + }); +} + +CHAKRA_API +JsVarDeserializerFree(_In_ JsVarDeserializerHandle deserializerHandle) +{ + PARAM_NOT_NULL(deserializerHandle); + return ContextAPINoScriptWrapper_NoRecord([&](Js::ScriptContext *scriptContext) -> JsErrorCode { + ChakraHostDeserializerHandle* deserializer = reinterpret_cast(deserializerHandle); + deserializer->FreeSelf(); + return JsNoError; + }); +} + +CHAKRA_API +JsGetArrayBufferExtraInfo( + _In_ JsValueRef arrayBuffer, + _Out_ char *extraInfo) +{ + VALIDATE_JSREF(arrayBuffer); + PARAM_NOT_NULL(extraInfo); + BEGIN_JSRT_NO_EXCEPTION + { + if (!Js::VarIs(arrayBuffer)) + { + RETURN_NO_EXCEPTION(JsErrorInvalidArgument); + } + + *extraInfo = Js::VarTo(arrayBuffer)->GetExtraInfoBits(); + } + END_JSRT_NO_EXCEPTION + +} + +CHAKRA_API +JsSetArrayBufferExtraInfo( + _In_ JsValueRef arrayBuffer, + _In_ char extraInfo) +{ + VALIDATE_JSREF(arrayBuffer); + BEGIN_JSRT_NO_EXCEPTION + { + if (!Js::VarIs(arrayBuffer)) + { + RETURN_NO_EXCEPTION(JsErrorInvalidArgument); + } + + Js::VarTo(arrayBuffer)->SetExtraInfoBits(extraInfo); + } + END_JSRT_NO_EXCEPTION +} + + +CHAKRA_API +JsGetEmbedderData( + _In_ JsValueRef instance, + _Out_ JsValueRef* embedderData) +{ + VALIDATE_JSREF(instance); + PARAM_NOT_NULL(embedderData); + return ContextAPINoScriptWrapper_NoRecord([&](Js::ScriptContext* scriptContext) -> JsErrorCode { + Js::RecyclableObject* object = Js::JavascriptOperators::TryFromVar(instance); + if (!object) + { + return JsErrorInvalidArgument; + } + + // Right now we know that we support these many. Lets find out if + // there are more. + Assert(Js::TypedArrayBase::Is(object->GetTypeId()) || + object->GetTypeId() == Js::TypeIds_ArrayBuffer || + object->GetTypeId() == Js::TypeIds_DataView || + object->GetTypeId() == Js::TypeIds_SharedArrayBuffer); + + if (!object->GetInternalProperty(object, Js::InternalPropertyIds::EmbedderData, embedderData, nullptr, scriptContext)) + { + *embedderData = nullptr; + } + return JsNoError; + }); +} + +CHAKRA_API +JsSetEmbedderData(_In_ JsValueRef instance, _In_ JsValueRef embedderData) +{ + VALIDATE_JSREF(instance); + return ContextAPINoScriptWrapper_NoRecord([&](Js::ScriptContext* scriptContext) -> JsErrorCode { + Js::RecyclableObject* object = Js::JavascriptOperators::TryFromVar(instance); + if (!object) + { + return JsErrorInvalidArgument; + } + + // Right now we know that we support these many. Lets find out if + // there are more. + Assert(Js::TypedArrayBase::Is(object->GetTypeId()) || + object->GetTypeId() == Js::TypeIds_ArrayBuffer || + object->GetTypeId() == Js::TypeIds_DataView || + object->GetTypeId() == Js::TypeIds_SharedArrayBuffer); + + if (!object->SetInternalProperty(Js::InternalPropertyIds::EmbedderData, embedderData, Js::PropertyOperationFlags::PropertyOperation_None, nullptr)) + { + return JsErrorInvalidArgument; + } + + return JsNoError; + }); +} + +CHAKRA_API +JsExternalizeArrayBuffer( + _In_ JsValueRef arrayBufferVar) +{ + VALIDATE_JSREF(arrayBufferVar); + return ContextAPINoScriptWrapper_NoRecord([&](Js::ScriptContext *scriptContext) -> JsErrorCode { + + Js::ArrayBuffer* arrayBuffer = Js::JavascriptOperators::TryFromVar(arrayBufferVar); + if (!arrayBuffer) + { + return JsErrorInvalidArgument; + } + + arrayBuffer->Externalize(); + + return JsNoError; + }); +} + +CHAKRA_API +JsHasOwnItem(_In_ JsValueRef object, + _In_ uint32_t index, + _Out_ bool* hasOwnItem) +{ + return ContextAPIWrapper( + [&](Js::ScriptContext* scriptContext, + TTDRecorder& _actionEntryPopper) -> JsErrorCode { + + VALIDATE_INCOMING_OBJECT(object, scriptContext); + PARAM_NOT_NULL(hasOwnItem); + + *hasOwnItem = !!Js::JavascriptOperators::HasOwnItem( + Js::VarTo(object), index); + + return JsNoError; + }); +} + +CHAKRA_API +JsDetachArrayBuffer( + _In_ JsValueRef arrayBuffer) +{ + VALIDATE_JSREF(arrayBuffer); + return ContextAPINoScriptWrapper_NoRecord([&](Js::ScriptContext *scriptContext) -> JsErrorCode { + + if (!Js::VarIs(arrayBuffer)) + { + return JsErrorInvalidArgument; + } + + Js::VarTo(arrayBuffer)->Detach(); + return JsNoError; + }); +} + +CHAKRA_API JsCreateSharedArrayBufferWithSharedContent(_In_ JsSharedArrayBufferContentHandle sharedContents, _Out_ JsValueRef *result) +{ + return ContextAPIWrapper([&](Js::ScriptContext *scriptContext, TTDRecorder& _actionEntryPopper) -> JsErrorCode { + + PARAM_NOT_NULL(result); + + Js::JavascriptLibrary* library = scriptContext->GetLibrary(); + *result = library->CreateSharedArrayBuffer((Js::SharedContents*)sharedContents); + + PERFORM_JSRT_TTD_RECORD_ACTION_RESULT(scriptContext, result); + + JS_ETW(EventWriteJSCRIPT_RECYCLER_ALLOCATE_OBJECT(*result)); + return JsNoError; + }); +} + +CHAKRA_API JsGetSharedArrayBufferContent(_In_ JsValueRef sharedArrayBuffer, _Out_ JsSharedArrayBufferContentHandle *sharedContents) +{ + return ContextAPIWrapper([&](Js::ScriptContext *scriptContext, TTDRecorder& _actionEntryPopper) -> JsErrorCode { + + PARAM_NOT_NULL(sharedContents); + + if (!Js::VarIs(sharedArrayBuffer)) + { + return JsErrorInvalidArgument; + } + + Js::SharedContents**& content = (Js::SharedContents**&)sharedContents; + *content = Js::VarTo(sharedArrayBuffer)->GetSharedContents(); + + if (*content == nullptr) + { + return JsErrorFatal; + } + + (*content)->AddRef(); + + return JsNoError; + }); +} + +CHAKRA_API JsReleaseSharedArrayBufferContentHandle(_In_ JsSharedArrayBufferContentHandle sharedContents) +{ + return ContextAPIWrapper([&](Js::ScriptContext *scriptContext, TTDRecorder& _actionEntryPopper) -> JsErrorCode { + ((Js::SharedContents*)sharedContents)->Release(); + return JsNoError; + }); +} + +CHAKRA_API JsCreateCustomExternalObject( + _In_opt_ void *data, + _In_opt_ size_t inlineSlotSize, + _In_opt_ JsTraceCallback traceCallback, + _In_opt_ JsFinalizeCallback finalizeCallback, + _Inout_opt_ JsGetterSetterInterceptor ** getterSetterInterceptor, + _In_opt_ JsValueRef prototype, + _Out_ JsValueRef * object) +{ + return ContextAPINoScriptWrapper([&](Js::ScriptContext *scriptContext, TTDRecorder& _actionEntryPopper) -> JsErrorCode { + PERFORM_JSRT_TTD_RECORD_ACTION(scriptContext, RecordJsRTAllocateExternalObject, prototype); + + PARAM_NOT_NULL(object); + + Js::RecyclableObject * prototypeObject = nullptr; + if (prototype != JS_INVALID_REFERENCE) + { + VALIDATE_INCOMING_OBJECT_OR_NULL(prototype, scriptContext); + prototypeObject = Js::VarTo(prototype); + } + if (inlineSlotSize > UINT32_MAX) + { + return JsErrorInvalidArgument; + } + + Js::JsGetterSetterInterceptor * interceptor = nullptr; + *object = Js::CustomExternalWrapperObject::Create(data, (uint)inlineSlotSize, traceCallback, finalizeCallback, &interceptor, prototypeObject, scriptContext); + Assert(interceptor); + *getterSetterInterceptor = reinterpret_cast(interceptor); + + PERFORM_JSRT_TTD_RECORD_ACTION_RESULT(scriptContext, object); + + return JsNoError; + }); +} + +CHAKRA_API JsCreateTracedExternalObject( + _In_opt_ void *data, + _In_opt_ size_t inlineSlotSize, + _In_opt_ JsTraceCallback traceCallback, + _In_opt_ JsFinalizeCallback finalizeCallback, + _In_opt_ JsValueRef prototype, + _Out_ JsValueRef *object) +{ + return ContextAPINoScriptWrapper([&](Js::ScriptContext *scriptContext, TTDRecorder& _actionEntryPopper) -> JsErrorCode { + PERFORM_JSRT_TTD_RECORD_ACTION(scriptContext, RecordJsRTAllocateExternalObject, prototype); + + PARAM_NOT_NULL(object); + + Js::RecyclableObject * prototypeObject = nullptr; + if (prototype != JS_INVALID_REFERENCE) + { + VALIDATE_INCOMING_OBJECT_OR_NULL(prototype, scriptContext); + prototypeObject = Js::VarTo(prototype); + } + if (inlineSlotSize > UINT32_MAX) + { + return JsErrorInvalidArgument; + } + *object = JsrtExternalObject::Create(data, (uint)inlineSlotSize, traceCallback, finalizeCallback, prototypeObject, scriptContext, nullptr); + + PERFORM_JSRT_TTD_RECORD_ACTION_RESULT(scriptContext, object); + + return JsNoError; + }); +} + +CHAKRA_API JsPrivateHasProperty( + _In_ JsValueRef object, + _In_ JsValueRef key, + _Out_ bool *hasProperty) +{ + return ContextAPIWrapper([&](Js::ScriptContext *scriptContext, TTDRecorder& _actionEntryPopper) -> JsErrorCode { + PERFORM_JSRT_TTD_RECORD_ACTION_NOT_IMPLEMENTED(scriptContext); + + VALIDATE_INCOMING_OBJECT(object, scriptContext); + VALIDATE_INCOMING_REFERENCE(key, scriptContext); + PARAM_NOT_NULL(hasProperty); + *hasProperty = false; + + Js::DynamicObject* dynObj = Js::VarTo(object); + if (!dynObj->HasObjectArray()) + { + return JsNoError; + } + *hasProperty = Js::JavascriptOperators::OP_HasItem(dynObj->GetObjectArray(), key, scriptContext) != 0; + + return JsNoError; + }); +} + +CHAKRA_API JsPrivateGetProperty( + _In_ JsValueRef object, + _In_ JsValueRef key, + _Out_ JsValueRef *value) +{ + return ContextAPIWrapper([&](Js::ScriptContext *scriptContext, TTDRecorder& _actionEntryPopper) -> JsErrorCode { + PERFORM_JSRT_TTD_RECORD_ACTION(scriptContext, RecordJsRTGetIndex, key, object); + + VALIDATE_INCOMING_OBJECT(object, scriptContext); + VALIDATE_INCOMING_REFERENCE(key, scriptContext); + PARAM_NOT_NULL(value); + *value = nullptr; + Js::DynamicObject* dynObj = Js::VarTo(object); + + if (!dynObj->HasObjectArray()) + { + *value = scriptContext->GetLibrary()->GetUndefined(); + PERFORM_JSRT_TTD_RECORD_ACTION_RESULT(scriptContext, value); + return JsNoError; + } + *value = (JsValueRef)Js::JavascriptOperators::OP_GetElementI(dynObj->GetObjectArray(), key, scriptContext); + + PERFORM_JSRT_TTD_RECORD_ACTION_RESULT(scriptContext, value); + + return JsNoError; + }); +} + +CHAKRA_API JsPrivateSetProperty( + _In_ JsValueRef object, + _In_ JsValueRef key, + _In_ JsValueRef value) +{ + return ContextAPIWrapper([&](Js::ScriptContext *scriptContext, TTDRecorder& _actionEntryPopper) -> JsErrorCode { + PERFORM_JSRT_TTD_RECORD_ACTION(scriptContext, RecordJsRTSetIndex, object, key, value); + + VALIDATE_INCOMING_OBJECT(object, scriptContext); + VALIDATE_INCOMING_REFERENCE(key, scriptContext); + VALIDATE_INCOMING_REFERENCE(value, scriptContext); + + Js::DynamicObject* dynObj = Js::VarTo(object); + + if (!dynObj->HasObjectArray()) + { + Js::ArrayObject* objArray = scriptContext->GetLibrary()->CreateArray(); + dynObj->SetObjectArray(objArray); + } + Js::JavascriptOperators::OP_SetElementI(dynObj->GetObjectArray(), key, value, scriptContext); + + return JsNoError; + }); +} + +CHAKRA_API JsPrivateDeleteProperty( + _In_ JsValueRef object, + _In_ JsValueRef key, + _Out_ JsValueRef *result) +{ + return ContextAPIWrapper([&](Js::ScriptContext *scriptContext, TTDRecorder& _actionEntryPopper) -> JsErrorCode { + PERFORM_JSRT_TTD_RECORD_ACTION_NOT_IMPLEMENTED(scriptContext); + + VALIDATE_INCOMING_OBJECT(object, scriptContext); + VALIDATE_INCOMING_REFERENCE(key, scriptContext); + + Js::DynamicObject* dynObj = Js::VarTo(object); + if (!dynObj->HasObjectArray()) + { + *result = scriptContext->GetLibrary()->GetFalse(); + return JsNoError; + } + *result = Js::JavascriptOperators::OP_DeleteElementI(dynObj->GetObjectArray(), key, scriptContext); + + return JsNoError; + }); +} + +CHAKRA_API JsCloneObject(_In_ JsValueRef source, _Out_ JsValueRef* newObject) +{ + VALIDATE_JSREF(source); + + return ContextAPINoScriptWrapper([&](Js::ScriptContext* scriptContext, TTDRecorder& _actionEntryPopper) -> JsErrorCode { + + while (Js::VarIs(source)) + { + source = Js::UnsafeVarTo(source)->GetTarget(); + } + + // We can currently only clone certain types of dynamic objects + // TODO: support other object types + if (Js::DynamicObject::IsBaseDynamicObject(source) || + Js::VarIs(source) || + Js::VarIs(source)) + { + Js::DynamicObject* objSource = Js::UnsafeVarTo(source); + *newObject = objSource->Copy(true); + return JsNoError; + } + + return JsErrorInvalidArgument; + }); +} + +template +static void CastCopy(const SrcChar* src, DstChar* dst, size_t count) +{ + const SrcChar* end = src + count; + while (src < end) + { + *dst++ = static_cast(*src++); + } +} + +CHAKRA_API JsCreateString( + _In_ const char *content, + _In_ size_t length, + _Out_ JsValueRef *value) +{ + PARAM_NOT_NULL(content); + PARAM_NOT_NULL(value); + *value = JS_INVALID_REFERENCE; + + if (length == static_cast(-1)) + { + length = strlen(content); + } + + if (length > MaxCharCount) + { + return JsErrorOutOfMemory; + } + + return ContextAPINoScriptWrapper([&](Js::ScriptContext *scriptContext, TTDRecorder& _actionEntryPopper) -> JsErrorCode { + + Js::JavascriptString *stringValue = Js::LiteralStringWithPropertyStringPtr:: + NewFromCString(content, (CharCount)length, scriptContext->GetLibrary()); + + PERFORM_JSRT_TTD_RECORD_ACTION(scriptContext, RecordJsRTCreateString, stringValue->GetSz(), stringValue->GetLength()); + + *value = stringValue; + + PERFORM_JSRT_TTD_RECORD_ACTION_RESULT(scriptContext, value); + + return JsNoError; + }); +} + +CHAKRA_API JsCreateStringUtf16( + _In_ const uint16_t *content, + _In_ size_t length, + _Out_ JsValueRef *value) +{ + PARAM_NOT_NULL(content); + PARAM_NOT_NULL(value); + *value = JS_INVALID_REFERENCE; + + if (length == static_cast(-1)) + { + length = wcslen((const char16 *)content); + } + + if (length > static_cast(-1)) + { + return JsErrorOutOfMemory; + } + + return ContextAPINoScriptWrapper([&](Js::ScriptContext *scriptContext, TTDRecorder& _actionEntryPopper) -> JsErrorCode { + + Js::JavascriptString *stringValue = Js::LiteralStringWithPropertyStringPtr:: + NewFromWideString((const char16 *)content, (CharCount)length, scriptContext->GetLibrary()); + + PERFORM_JSRT_TTD_RECORD_ACTION(scriptContext, RecordJsRTCreateString, stringValue->GetSz(), stringValue->GetLength()); + + *value = stringValue; + + PERFORM_JSRT_TTD_RECORD_ACTION_RESULT(scriptContext, value); + + return JsNoError; + }); +} + + +CHAKRA_API JsCreatePropertyString( + _In_z_ const char *name, + _In_ size_t length, + _Out_ JsValueRef *propertyString) +{ + return ContextAPINoScriptWrapper([&](Js::ScriptContext *scriptContext, TTDRecorder& _actionEntryPopper) -> JsErrorCode { + PERFORM_JSRT_TTD_RECORD_ACTION_NOT_IMPLEMENTED(scriptContext); + Js::PropertyRecord* propertyRecord; + JsErrorCode errorCode = JsCreatePropertyId(name, length, (JsPropertyIdRef *)&propertyRecord); + + if (errorCode != JsNoError) + { + return errorCode; + } + + *propertyString = scriptContext->GetPropertyString(propertyRecord); + return JsNoError; + }); +} + +CHAKRA_API JsCreatePromise(_Out_ JsValueRef *promise, _Out_ JsValueRef *resolve, _Out_ JsValueRef *reject) +{ + return ContextAPIWrapper([&](Js::ScriptContext *scriptContext, TTDRecorder& _actionEntryPopper) -> JsErrorCode { + PERFORM_JSRT_TTD_RECORD_ACTION_NOT_IMPLEMENTED(scriptContext); + + PARAM_NOT_NULL(promise); + PARAM_NOT_NULL(resolve); + PARAM_NOT_NULL(reject); + + *promise = nullptr; + *resolve = nullptr; + *reject = nullptr; + + Js::JavascriptPromiseResolveOrRejectFunction *jsResolve = nullptr; + Js::JavascriptPromiseResolveOrRejectFunction *jsReject = nullptr; + Js::JavascriptPromise *jsPromise = scriptContext->GetLibrary()->CreatePromise(); + Js::JavascriptPromise::InitializePromise(jsPromise, &jsResolve, &jsReject, scriptContext); + + *promise = (JsValueRef)jsPromise; + *resolve = (JsValueRef)jsResolve; + *reject = (JsValueRef)jsReject; + + return JsNoError; + }); +} + +CHAKRA_API JsGetPromiseState(_In_ JsValueRef promise, _Out_ JsPromiseState *state) +{ + return ContextAPIWrapper([&](Js::ScriptContext *scriptContext, TTDRecorder& _actionEntryPopper) -> JsErrorCode { + PERFORM_JSRT_TTD_RECORD_ACTION_NOT_IMPLEMENTED(scriptContext); + + VALIDATE_INCOMING_REFERENCE(promise, scriptContext); + PARAM_NOT_NULL(state); + + *state = JsPromiseStatePending; + + if (!Js::VarIs(promise)) + { + return JsErrorInvalidArgument; + } + + Js::JavascriptPromise *jsPromise = Js::VarTo(promise); + Js::JavascriptPromise::PromiseStatus status = jsPromise->GetStatus(); + + switch (status) + { + case Js::JavascriptPromise::PromiseStatus::PromiseStatusCode_HasRejection: + *state = JsPromiseStateRejected; + break; + + case Js::JavascriptPromise::PromiseStatus::PromiseStatusCode_HasResolution: + *state = JsPromiseStateFulfilled; + break; + } + + return JsNoError; + }); +} + +CHAKRA_API JsGetPromiseResult(_In_ JsValueRef promise, _Out_ JsValueRef *result) +{ + return ContextAPIWrapper([&](Js::ScriptContext *scriptContext, TTDRecorder& _actionEntryPopper) -> JsErrorCode { + PERFORM_JSRT_TTD_RECORD_ACTION_NOT_IMPLEMENTED(scriptContext); + + VALIDATE_INCOMING_REFERENCE(promise, scriptContext); + PARAM_NOT_NULL(result); + + *result = JS_INVALID_REFERENCE; + + if (!Js::VarIs(promise)) + { + return JsErrorInvalidArgument; + } + + Js::JavascriptPromise *jsPromise = Js::VarTo(promise); + Js::Var jsResult = jsPromise->GetResult(); + + if (jsResult == nullptr) + { + return JsErrorPromisePending; + } + + *result = (JsValueRef)jsResult; + return JsNoError; + }); +} + +CHAKRA_API JsCreateWeakReference( + _In_ JsValueRef value, + _Out_ JsWeakRef* weakRef) +{ + VALIDATE_JSREF(value); + PARAM_NOT_NULL(weakRef); + *weakRef = nullptr; + + if (Js::TaggedNumber::Is(value)) + { + return JsNoWeakRefRequired; + } + + return GlobalAPIWrapper_NoRecord([&]() -> JsErrorCode { + ThreadContext* threadContext = ThreadContext::GetContextForCurrentThread(); + if (threadContext == nullptr) + { + return JsErrorNoCurrentContext; + } + + Recycler* recycler = threadContext->GetRecycler(); + if (recycler->IsInObjectBeforeCollectCallback()) + { + return JsErrorInObjectBeforeCollectCallback; + } + + RecyclerHeapObjectInfo dummyObjectInfo; + if (!recycler->FindHeapObject(value, Memory::FindHeapObjectFlags::FindHeapObjectFlags_NoFlags, dummyObjectInfo)) + { + // value is not recyler-allocated + return JsErrorInvalidArgument; + } + + recycler->FindOrCreateWeakReferenceHandle( + reinterpret_cast(value), + reinterpret_cast**>(weakRef)); + return JsNoError; + }); +} + +CHAKRA_API JsGetWeakReferenceValue( + _In_ JsWeakRef weakRef, + _Out_ JsValueRef* value) +{ + VALIDATE_JSREF(weakRef); + PARAM_NOT_NULL(value); + *value = JS_INVALID_REFERENCE; + + return GlobalAPIWrapper_NoRecord([&]() -> JsErrorCode { + Memory::RecyclerWeakReference* recyclerWeakReference = + reinterpret_cast*>(weakRef); + *value = reinterpret_cast(recyclerWeakReference->Get()); + return JsNoError; + }); +} + +CHAKRA_API JsGetAndClearExceptionWithMetadata(_Out_ JsValueRef *metadata) +{ + PARAM_NOT_NULL(metadata); + *metadata = nullptr; + + JsrtContext *currentContext = JsrtContext::GetCurrent(); + + if (currentContext == nullptr) + { + return JsErrorNoCurrentContext; + } + + Js::ScriptContext *scriptContext = currentContext->GetScriptContext(); + Assert(scriptContext != nullptr); + + if (scriptContext->GetRecycler() && scriptContext->GetRecycler()->IsHeapEnumInProgress()) + { + return JsErrorHeapEnumInProgress; + } + else if (scriptContext->GetThreadContext()->IsInThreadServiceCallback()) + { + return JsErrorInThreadServiceCallback; + } + + if (scriptContext->GetThreadContext()->IsExecutionDisabled()) + { + return JsErrorInDisabledState; + } + + HRESULT hr = S_OK; + Js::JavascriptExceptionObject *recordedException = nullptr; + + BEGIN_TRANSLATE_OOM_TO_HRESULT + if (scriptContext->HasRecordedException()) + { + recordedException = scriptContext->GetAndClearRecordedException(); + } + END_TRANSLATE_OOM_TO_HRESULT(hr) + + if (hr == E_OUTOFMEMORY) + { + recordedException = scriptContext->GetThreadContext()->GetRecordedException(); + } + if (recordedException == nullptr) + { + return JsErrorInvalidArgument; + } + + Js::Var exception = recordedException->GetThrownObject(nullptr); + + if (exception == nullptr) + { + // TODO: How does this early bailout impact TTD? + return JsErrorInvalidArgument; + } + + return ContextAPIWrapper([&](Js::ScriptContext* scriptContext, TTDRecorder& _actionEntryPopper) -> JsErrorCode { + Js::Var exceptionMetadata = Js::JavascriptExceptionMetadata::CreateMetadataVar(scriptContext); + Js::JavascriptOperators::OP_SetProperty(exceptionMetadata, Js::PropertyIds::exception, exception, scriptContext); + + Js::FunctionBody *functionBody = recordedException->GetFunctionBody(); + if (functionBody == nullptr) + { + // This is probably a parse error. We can get the error location metadata from the thrown object. + Js::JavascriptExceptionMetadata::PopulateMetadataFromCompileException(exceptionMetadata, exception, scriptContext); + } + else + { + if (!Js::JavascriptExceptionMetadata::PopulateMetadataFromException(exceptionMetadata, recordedException, scriptContext)) + { + return JsErrorInvalidArgument; + } + } + + *metadata = exceptionMetadata; + +#if ENABLE_TTD + if (hr != E_OUTOFMEMORY) + { + PERFORM_JSRT_TTD_RECORD_ACTION(scriptContext, RecordJsRTGetAndClearExceptionWithMetadata); + PERFORM_JSRT_TTD_RECORD_ACTION_RESULT(scriptContext, metadata); + } +#endif + + + return JsNoError; + }); +} + +CHAKRA_API JsGetDataViewInfo( + _In_ JsValueRef dataView, + _Out_opt_ JsValueRef *arrayBuffer, + _Out_opt_ unsigned int *byteOffset, + _Out_opt_ unsigned int *byteLength) +{ + VALIDATE_JSREF(dataView); + + BEGIN_JSRT_NO_EXCEPTION + { + if (!Js::VarIs(dataView)) + { + RETURN_NO_EXCEPTION(JsErrorInvalidArgument); + } + + Js::DataView* dv = Js::VarTo(dataView); + if (arrayBuffer != nullptr) { + *arrayBuffer = dv->GetArrayBuffer(); + } + + if (byteOffset != nullptr) { + *byteOffset = dv->GetByteOffset(); + } + + if (byteLength != nullptr) { + *byteLength = dv->GetLength(); + } + } + +#if ENABLE_TTD + Js::ScriptContext* scriptContext = Js::VarTo(dataView)->GetScriptContext(); + if (PERFORM_JSRT_TTD_RECORD_ACTION_CHECK(scriptContext) && arrayBuffer != nullptr) + { + scriptContext->GetThreadContext()->TTDLog->RecordJsRTGetDataViewInfo(dataView, *arrayBuffer); + } +#endif + + END_JSRT_NO_EXCEPTION +} + +CHAKRA_API JsSetHostPromiseRejectionTracker(_In_ JsHostPromiseRejectionTrackerCallback promiseRejectionTrackerCallback, _In_opt_ void *callbackState) +{ + return ContextAPINoScriptWrapper_NoRecord([&](Js::ScriptContext *scriptContext) -> JsErrorCode { + scriptContext->GetLibrary()->SetNativeHostPromiseRejectionTrackerCallback((Js::JavascriptLibrary::HostPromiseRejectionTrackerCallback) promiseRejectionTrackerCallback, callbackState); + return JsNoError; + }, + /*allowInObjectBeforeCollectCallback*/true); +} + +CHAKRA_API JsGetProxyProperties(_In_ JsValueRef object, _Out_ bool* isProxy, _Out_opt_ JsValueRef* target, _Out_opt_ JsValueRef* handler) +{ + return ContextAPINoScriptWrapper_NoRecord([&](Js::ScriptContext * scriptContext) -> JsErrorCode { + VALIDATE_INCOMING_REFERENCE(object, scriptContext); + PARAM_NOT_NULL(isProxy); + + if (target != nullptr) + { + *target = JS_INVALID_REFERENCE; + } + + if (handler != nullptr) + { + *handler = JS_INVALID_REFERENCE; + } + + *isProxy = Js::VarIs(object); + + if (!*isProxy) + { + return JsNoError; + } + + Js::JavascriptProxy* proxy = Js::UnsafeVarTo(object); + bool revoked = proxy->IsRevoked(); + + if (target != nullptr && !revoked) + { + *target = static_cast(proxy->GetTarget()); + } + + if (handler != nullptr && !revoked) + { + *handler = static_cast(proxy->GetHandler()); + } + + return JsNoError; + }, + /*allowInObjectBeforeCollectCallback*/true); +} + +CHAKRA_API JsSetRuntimeBeforeSweepCallback(_In_ JsRuntimeHandle runtimeHandle, _In_opt_ void *callbackState, _In_ JsBeforeSweepCallback beforeSweepCallback) +{ + return GlobalAPIWrapper_NoRecord([&]() -> JsErrorCode { + VALIDATE_INCOMING_RUNTIME_HANDLE(runtimeHandle); + + JsrtRuntime::FromHandle(runtimeHandle)->SetBeforeSweepCallback(beforeSweepCallback, callbackState); + return JsNoError; + }); +} + +CHAKRA_API +JsSetRuntimeDomWrapperTracingCallbacks( + _In_ JsRuntimeHandle runtimeHandle, + _In_ JsRef wrapperTracingState, + _In_ JsDOMWrapperTracingCallback wrapperTracingCallback, + _In_ JsDOMWrapperTracingDoneCallback wrapperTracingDoneCallback, + _In_ JsDOMWrapperTracingEnterFinalPauseCallback enterFinalPauseCallback) +{ + return GlobalAPIWrapper_NoRecord([&]() -> JsErrorCode { + VALIDATE_INCOMING_RUNTIME_HANDLE(runtimeHandle); + + ThreadContext * threadContext = JsrtRuntime::FromHandle(runtimeHandle)->GetThreadContext(); + ThreadContextScope scope(threadContext); + + if (!scope.IsValid()) + { + return JsErrorWrongThread; + } + + Recycler * recycler = threadContext->GetRecycler(); + recycler->SetDOMWrapperTracingCallback(wrapperTracingState, reinterpret_cast(wrapperTracingCallback), reinterpret_cast(wrapperTracingDoneCallback), reinterpret_cast(enterFinalPauseCallback)); + return JsNoError; + }); +} + +CHAKRA_API +JsGetArrayForEachFunction(_Out_ JsValueRef * result) +{ + return ContextAPINoScriptWrapper_NoRecord([&](Js::ScriptContext *scriptContext) -> JsErrorCode { + PARAM_NOT_NULL(result); + + *result = scriptContext->GetLibrary()->EnsureArrayPrototypeForEachFunction(); + + return JsNoError; + }, + /*allowInObjectBeforeCollectCallback*/true); +} + +CHAKRA_API +JsGetArrayKeysFunction(_Out_ JsValueRef * result) +{ + return ContextAPINoScriptWrapper_NoRecord([&](Js::ScriptContext *scriptContext) -> JsErrorCode { + PARAM_NOT_NULL(result); + + *result = scriptContext->GetLibrary()->EnsureArrayPrototypeKeysFunction(); + + return JsNoError; + }, + /*allowInObjectBeforeCollectCallback*/true); +} + +CHAKRA_API +JsGetArrayValuesFunction(_Out_ JsValueRef * result) +{ + return ContextAPINoScriptWrapper_NoRecord([&](Js::ScriptContext *scriptContext) -> JsErrorCode { + PARAM_NOT_NULL(result); + + *result = scriptContext->GetLibrary()->EnsureArrayPrototypeValuesFunction(); + + return JsNoError; + }, + /*allowInObjectBeforeCollectCallback*/true); +} + +CHAKRA_API +JsGetArrayEntriesFunction(_Out_ JsValueRef * result) +{ + return ContextAPINoScriptWrapper_NoRecord([&](Js::ScriptContext *scriptContext) -> JsErrorCode { + PARAM_NOT_NULL(result); + + *result = scriptContext->GetLibrary()->EnsureArrayPrototypeEntriesFunction(); + + return JsNoError; + }, + /*allowInObjectBeforeCollectCallback*/true); +} + +CHAKRA_API +JsGetPropertyIdSymbolIterator(_Out_ JsPropertyIdRef * propertyId) +{ + return ContextAPINoScriptWrapper_NoRecord([&](Js::ScriptContext *scriptContext) -> JsErrorCode { + PARAM_NOT_NULL(propertyId); + + Js::PropertyId symbolIteratorPropertyId = scriptContext->GetLibrary()->GetPropertyIdSymbolIterator(); + *propertyId = Js::JavascriptNumber::ToVar(symbolIteratorPropertyId, scriptContext); + + return JsNoError; + }, + /*allowInObjectBeforeCollectCallback*/true); +} + +CHAKRA_API +JsGetErrorPrototype(_Out_ JsValueRef * result) +{ + return ContextAPINoScriptWrapper_NoRecord([&](Js::ScriptContext *scriptContext) -> JsErrorCode { + PARAM_NOT_NULL(result); + + *result = scriptContext->GetLibrary()->GetErrorPrototype(); + if (*result == JS_INVALID_REFERENCE) + { + return JsErrorFatal; + } + + return JsNoError; + }, + /*allowInObjectBeforeCollectCallback*/true); +} + +CHAKRA_API +JsGetIteratorPrototype(_Out_ JsValueRef * result) +{ + return ContextAPINoScriptWrapper_NoRecord([&](Js::ScriptContext *scriptContext) -> JsErrorCode { + PARAM_NOT_NULL(result); + + *result = scriptContext->GetLibrary()->GetIteratorPrototype(); + if (*result == JS_INVALID_REFERENCE) + { + return JsErrorFatal; + } + + return JsNoError; + }, + /*allowInObjectBeforeCollectCallback*/true); +} + +CHAKRA_API JsTraceExternalReference(_In_ JsRuntimeHandle runtimeHandle, _In_ JsValueRef value) +{ + return GlobalAPIWrapper_NoRecord([&]() -> JsErrorCode { + VALIDATE_INCOMING_RUNTIME_HANDLE(runtimeHandle); + + ThreadContext * threadContext = JsrtRuntime::FromHandle(runtimeHandle)->GetThreadContext(); + ThreadContextScope scope(threadContext); + + if (!scope.IsValid()) + { + return JsErrorWrongThread; + } + + Recycler * recycler = threadContext->GetRecycler(); + recycler->TryExternalMarkNonInterior(value); + return JsNoError; + }); +} + +CHAKRA_API JsAllocRawData(_In_ JsRuntimeHandle runtimeHandle, _In_ size_t sizeInBytes, _In_ bool zeroed, _Out_ JsRef * buffer) +{ + PARAM_NOT_NULL(buffer); + + return GlobalAPIWrapper_NoRecord([&]() -> JsErrorCode { + VALIDATE_INCOMING_RUNTIME_HANDLE(runtimeHandle); + + ThreadContext * threadContext = JsrtRuntime::FromHandle(runtimeHandle)->GetThreadContext(); + ThreadContextScope scope(threadContext); + + if (!scope.IsValid()) + { + return JsErrorWrongThread; + } + + Recycler * recycler = threadContext->GetRecycler(); + *buffer = zeroed + ? RecyclerNewArrayZ(recycler, char, sizeInBytes) + : RecyclerNewArray(recycler, char, sizeInBytes); + return JsNoError; + }); +} + +CHAKRA_API JsIsCallable(_In_ JsValueRef object, _Out_ bool *isCallable) +{ + return ContextAPINoScriptWrapper_NoRecord([&](Js::ScriptContext *scriptContext) -> JsErrorCode { + VALIDATE_INCOMING_OBJECT(object, scriptContext); + PARAM_NOT_NULL(isCallable); + + *isCallable = Js::JavascriptConversion::IsCallable(object) && !Js::JavascriptOperators::IsClassConstructor(object); + + return JsNoError; + }); +} + +CHAKRA_API JsIsConstructor(_In_ JsValueRef object, _Out_ bool *isConstructor) +{ + return ContextAPINoScriptWrapper_NoRecord([&](Js::ScriptContext *scriptContext) -> JsErrorCode { + VALIDATE_INCOMING_OBJECT(object, scriptContext); + PARAM_NOT_NULL(isConstructor); + + *isConstructor = Js::JavascriptOperators::IsConstructor(object); + + return JsNoError; + }); +} + +CHAKRA_API +JsQueueBackgroundParse_Experimental( + _In_ JsScriptContents* contents, + _Out_ DWORD* dwBgParseCookie) +{ + HRESULT hr; + if (Js::Configuration::Global.flags.BgParse && !CONFIG_FLAG(ForceDiagnosticsMode) + // For now, only UTF8 buffers are supported for BGParse + && contents->encodingType == JsScriptEncodingType::Utf8 + && contents->containerType == JsScriptContainerType::HeapAllocatedBuffer + // SourceContext not needed for BGParse + && contents->sourceContext == 0) + { + hr = BGParseManager::GetBGParseManager()->QueueBackgroundParse((LPUTF8)contents->container, contents->contentLengthInBytes, (char16*)contents->fullPath, dwBgParseCookie); + } + else + { + hr = E_NOTIMPL; + } + + JsErrorCode res = (hr == S_OK) ? JsNoError : JsErrorFatal; + + return res; +} + +CHAKRA_API +JsDiscardBackgroundParse_Experimental( + _In_ DWORD dwBgParseCookie, + _In_ void* buffer, + _Out_ bool* callerOwnsBuffer) +{ + (*callerOwnsBuffer) = BGParseManager::GetBGParseManager()->DiscardParseResults(dwBgParseCookie, buffer); + return JsNoError; +} + +#ifdef _WIN32 +CHAKRA_API +JsEnableOOPJIT() +{ +#ifdef ENABLE_OOP_NATIVE_CODEGEN + JITManager::GetJITManager()->EnableOOPJIT(); + return JsNoError; +#else + return JsErrorNotImplemented; +#endif +} + +CHAKRA_API +JsConnectJITProcess(_In_ HANDLE processHandle, _In_opt_ void* serverSecurityDescriptor, _In_ UUID connectionId) +{ +#ifdef ENABLE_OOP_NATIVE_CODEGEN + JITManager::GetJITManager()->EnableOOPJIT(); + ThreadContext::SetJITConnectionInfo(processHandle, serverSecurityDescriptor, connectionId); + return JsNoError; +#else + return JsErrorNotImplemented; +#endif +} +#endif + +CHAKRA_API +JsGetArrayBufferFreeFunction( + _In_ JsValueRef arrayBuffer, + _Out_ ArrayBufferFreeFn* freeFn) +{ + VALIDATE_JSREF(arrayBuffer); + PARAM_NOT_NULL(freeFn); + return ContextAPINoScriptWrapper_NoRecord( + [&](Js::ScriptContext* scriptContext) -> JsErrorCode { + if (!Js::VarIs(arrayBuffer)) + { + return JsErrorInvalidArgument; + } + + *freeFn = Js::VarTo(arrayBuffer)->GetArrayBufferFreeFn(); + return JsNoError; + }); +} diff --git a/lib/Jsrt/Jsrt.cpp b/lib/Jsrt/Jsrt.cpp index c61745e4b2e..227748c5551 100644 --- a/lib/Jsrt/Jsrt.cpp +++ b/lib/Jsrt/Jsrt.cpp @@ -12,8 +12,6 @@ #include "ByteCode/ByteCodeSerializer.h" #include "Common/ByteSwap.h" #include "Library/DataView.h" -#include "Library/JavascriptExceptionMetadata.h" -#include "Library/JavascriptPromise.h" #include "Base/ThreadContextTlsEntry.h" #include "Codex/Utf8Helper.h" @@ -25,6 +23,17 @@ #include "TestHooksRt.h" #endif +CHAKRA_API RunScriptWithParserStateCore( + _In_ DWORD dwBgParseCookie, + _In_ JsValueRef script, + _In_ JsSourceContext sourceContext, + _In_ WCHAR *url, + _In_ JsParseScriptAttributes parseAttributes, + _In_ JsValueRef parserState, + _In_ bool parseOnly, + _Out_ JsValueRef *result +); + struct CodexHeapAllocatorInterface { public: @@ -220,10 +229,10 @@ void CALLBACK CreateExternalObject_TTDCallback(Js::ScriptContext* ctx, Js::Var p Js::RecyclableObject * prototypeObject = nullptr; if (prototype != JS_INVALID_REFERENCE) { - prototypeObject = Js::RecyclableObject::FromVar(prototype); + prototypeObject = Js::VarTo(prototype); } - *object = JsrtExternalObject::Create(nullptr, nullptr, prototypeObject, ctx); + *object = JsrtExternalObject::Create(nullptr, 0, nullptr, prototypeObject, ctx, nullptr); } void CALLBACK TTDDummyPromiseContinuationCallback(JsValueRef task, void *callbackState) @@ -641,7 +650,7 @@ CHAKRA_API JsAddRef(_In_ JsRef ref, _Out_opt_ unsigned int *count) if((lCount == 1) && (threadContext->IsRuntimeInTTDMode()) && (!threadContext->TTDLog->IsPropertyRecordRef(ref))) { - Js::RecyclableObject* obj = Js::RecyclableObject::FromVar(ref); + Js::RecyclableObject* obj = Js::VarTo(ref); if(obj->GetScriptContext()->IsTTDRecordModeEnabled()) { if(obj->GetScriptContext()->ShouldPerformRecordAction()) @@ -790,7 +799,7 @@ CHAKRA_API JsGetCurrentContext(_Out_ JsContextRef *currentContext) END_JSRT_NO_EXCEPTION } -CHAKRA_API JsSetCurrentContext(_In_ JsContextRef newContext) +CHAKRA_API JsSetCurrentContext(_In_opt_ JsContextRef newContext) { VALIDATE_ENTER_CURRENT_THREAD(); @@ -861,11 +870,11 @@ CHAKRA_API JsGetContextOfObject(_In_ JsValueRef object, _Out_ JsContextRef *cont BEGIN_JSRT_NO_EXCEPTION { - if (!Js::RecyclableObject::Is(object)) + if (!Js::VarIs(object)) { RETURN_NO_EXCEPTION(JsErrorArgumentNotObject); } - Js::RecyclableObject* obj = Js::RecyclableObject::FromVar(object); + Js::RecyclableObject* obj = Js::VarTo(object); *context = (JsContextRef)obj->GetScriptContext()->GetLibrary()->GetJsrtContext(); } END_JSRT_NO_EXCEPTION @@ -995,12 +1004,12 @@ CHAKRA_API JsBooleanToBool(_In_ JsValueRef value, _Out_ bool *boolValue) BEGIN_JSRT_NO_EXCEPTION { - if (!Js::JavascriptBoolean::Is(value)) + if (!Js::VarIs(value)) { RETURN_NO_EXCEPTION(JsErrorInvalidArgument); } - *boolValue = Js::JavascriptBoolean::FromVar(value)->GetValue() ? true : false; + *boolValue = Js::VarTo(value)->GetValue() ? true : false; } END_JSRT_NO_EXCEPTION } @@ -1210,12 +1219,12 @@ CHAKRA_API JsGetStringLength(_In_ JsValueRef value, _Out_ int *length) BEGIN_JSRT_NO_EXCEPTION { - if (!Js::JavascriptString::Is(value)) + if (!Js::VarIs(value)) { RETURN_NO_EXCEPTION(JsErrorInvalidArgument); } - *length = Js::JavascriptString::FromVar(value)->GetLengthAsSignedInt(); + *length = Js::VarTo(value)->GetLengthAsSignedInt(); } END_JSRT_NO_EXCEPTION } @@ -1252,13 +1261,13 @@ CHAKRA_API JsStringToPointer(_In_ JsValueRef stringValue, _Outptr_result_buffer_ PARAM_NOT_NULL(stringLength); *stringLength = 0; - if (!Js::JavascriptString::Is(stringValue)) + if (!Js::VarIs(stringValue)) { return JsErrorInvalidArgument; } return GlobalAPIWrapper_NoRecord([&]() -> JsErrorCode { - Js::JavascriptString *jsString = Js::JavascriptString::FromVar(stringValue); + Js::JavascriptString *jsString = Js::VarTo(stringValue); *stringPtr = jsString->GetSz(); *stringLength = jsString->GetLength(); @@ -1271,7 +1280,7 @@ CHAKRA_API JsConvertValueToString(_In_ JsValueRef value, _Out_ JsValueRef *resul PARAM_NOT_NULL(result); *result = nullptr; - if (value != nullptr && Js::JavascriptString::Is(value)) + if (value != nullptr && Js::VarIs(value)) { return ContextAPINoScriptWrapper([&](Js::ScriptContext *scriptContext, TTDRecorder& _actionEntryPopper) -> JsErrorCode { PERFORM_JSRT_TTD_RECORD_ACTION(scriptContext, RecordJsRTVarToStringConversion, (Js::Var)value); @@ -1337,10 +1346,10 @@ CHAKRA_API JsCreateExternalObjectWithPrototype(_In_opt_ void *data, if (prototype != JS_INVALID_REFERENCE) { VALIDATE_INCOMING_OBJECT(prototype, scriptContext); - prototypeObject = Js::RecyclableObject::FromVar(prototype); + prototypeObject = Js::VarTo(prototype); } - *object = JsrtExternalObject::Create(data, finalizeCallback, prototypeObject, scriptContext); + *object = JsrtExternalObject::Create(data, 0, finalizeCallback, prototypeObject, scriptContext, nullptr); PERFORM_JSRT_TTD_RECORD_ACTION_RESULT(scriptContext, object); @@ -1401,7 +1410,7 @@ CHAKRA_API JsSetPrototype(_In_ JsValueRef object, _In_ JsValueRef prototypeObjec return JsErrorInvalidArgument; } - Js::JavascriptObject::ChangePrototype(Js::RecyclableObject::FromVar(object), Js::RecyclableObject::FromVar(prototypeObject), true, scriptContext); + Js::JavascriptObject::ChangePrototype(Js::VarTo(object), Js::VarTo(prototypeObject), true, scriptContext); return JsNoError; }); @@ -1415,7 +1424,8 @@ CHAKRA_API JsInstanceOf(_In_ JsValueRef object, _In_ JsValueRef constructor, _Ou VALIDATE_INCOMING_REFERENCE(constructor, scriptContext); PARAM_NOT_NULL(result); - *result = Js::RecyclableObject::FromVar(constructor)->HasInstance(object, scriptContext) ? true : false; + Js::Var value = Js::JavascriptOperators::OP_IsInst(object, constructor, scriptContext, nullptr); + *result = !!Js::VarTo(value)->GetValue(); return JsNoError; }); @@ -1430,7 +1440,7 @@ CHAKRA_API JsGetExtensionAllowed(_In_ JsValueRef object, _Out_ bool *value) PARAM_NOT_NULL(value); *value = false; - *value = Js::RecyclableObject::FromVar(object)->IsExtensible() != 0; + *value = Js::VarTo(object)->IsExtensible() != 0; return JsNoError; }); @@ -1443,17 +1453,17 @@ CHAKRA_API JsPreventExtension(_In_ JsValueRef object) VALIDATE_INCOMING_OBJECT(object, scriptContext); - Js::RecyclableObject::FromVar(object)->PreventExtensions(); + Js::VarTo(object)->PreventExtensions(); return JsNoError; }); } CHAKRA_API JsHasOwnPropertyCommon(Js::ScriptContext * scriptContext, _In_ JsValueRef object, - _In_ const Js::PropertyRecord * propertyRecord, _Out_ bool *hasOwnProperty) + _In_ const Js::PropertyRecord * propertyRecord, _Out_ bool *hasOwnProperty, _In_opt_ Js::PropertyString * propString) { *hasOwnProperty = Js::JavascriptOperators::OP_HasOwnProperty(object, - propertyRecord->GetPropertyId(), scriptContext) != 0; + propertyRecord->GetPropertyId(), scriptContext, propString) != 0; return JsNoError; } @@ -1461,7 +1471,7 @@ CHAKRA_API JsHasOwnPropertyCommon(Js::ScriptContext * scriptContext, _In_ JsValu CHAKRA_API JsHasOwnProperty(_In_ JsValueRef object, _In_ JsPropertyIdRef propertyId, _Out_ bool *hasOwnProperty) { - return ContextAPIWrapper([&] (Js::ScriptContext *scriptContext, + return ContextAPIWrapper([&](Js::ScriptContext *scriptContext, TTDRecorder& _actionEntryPopper) -> JsErrorCode { PERFORM_JSRT_TTD_RECORD_ACTION(scriptContext, RecordJsRTHasOwnProperty, (const Js::PropertyRecord *)propertyId, object); @@ -1471,7 +1481,7 @@ CHAKRA_API JsHasOwnProperty(_In_ JsValueRef object, _In_ JsPropertyIdRef propert *hasOwnProperty = false; return JsHasOwnPropertyCommon(scriptContext, object, - (const Js::PropertyRecord *)propertyId, hasOwnProperty); + (const Js::PropertyRecord *)propertyId, hasOwnProperty, nullptr); }); } @@ -1485,11 +1495,11 @@ static JsErrorCode InternalGetPropertyRecord(Js::ScriptContext * scriptContext, switch(key->GetTypeId()) { case Js::TypeIds_String: - scriptContext->GetOrAddPropertyRecord(Js::JavascriptString::FromVar(key), + scriptContext->GetOrAddPropertyRecord(Js::VarTo(key), (Js::PropertyRecord const **)propertyRecord); break; case Js::TypeIds_Symbol: - *propertyRecord = Js::JavascriptSymbol::FromVar(key)->GetValue(); + *propertyRecord = Js::VarTo(key)->GetValue(); break; default: return JsErrorInvalidArgument; @@ -1511,14 +1521,14 @@ CHAKRA_API JsObjectHasOwnProperty(_In_ JsValueRef object, _In_ JsValueRef proper const Js::PropertyRecord *propertyRecord = nullptr; JsErrorCode errorValue = InternalGetPropertyRecord(scriptContext, - Js::RecyclableObject::FromVar(propertyId), &propertyRecord); + Js::VarTo(propertyId), &propertyRecord); if (errorValue != JsNoError) { return errorValue; } - return JsHasOwnPropertyCommon(scriptContext, object, propertyRecord, hasOwnProperty); + return JsHasOwnPropertyCommon(scriptContext, object, propertyRecord, hasOwnProperty, Js::VarIs(propertyId) ? (Js::PropertyString*)propertyId : nullptr); }); } #endif @@ -1546,7 +1556,7 @@ CHAKRA_API JsGetProperty(_In_ JsValueRef object, _In_ JsPropertyIdRef propertyId PARAM_NOT_NULL(value); *value = nullptr; - Js::RecyclableObject * instance = Js::RecyclableObject::FromVar(object); + Js::RecyclableObject * instance = Js::VarTo(object); JsErrorCode err = JsGetPropertyCommon(scriptContext, instance, (const Js::PropertyRecord *)propertyId, value); @@ -1570,7 +1580,7 @@ CHAKRA_API JsObjectGetProperty(_In_ JsValueRef object, _In_ JsValueRef propertyI const Js::PropertyRecord *propertyRecord = nullptr; JsErrorCode errorValue = InternalGetPropertyRecord(scriptContext, - Js::RecyclableObject::FromVar(propertyId), &propertyRecord); + Js::VarTo(propertyId), &propertyRecord); if (errorValue != JsNoError) { @@ -1579,7 +1589,7 @@ CHAKRA_API JsObjectGetProperty(_In_ JsValueRef object, _In_ JsValueRef propertyI Assert(propertyRecord != nullptr); - Js::RecyclableObject * instance = Js::RecyclableObject::FromVar(object); + Js::RecyclableObject * instance = Js::VarTo(object); return JsGetPropertyCommon(scriptContext, instance, propertyRecord, value); }); } @@ -1591,7 +1601,7 @@ static JsErrorCode JsGetOwnPropertyDescriptorCommon(Js::ScriptContext * scriptCo AssertMsg(scriptContext->GetThreadContext()->IsScriptActive(), "Caller is expected to be under ContextAPIWrapper!"); Js::PropertyDescriptor propertyDescriptorValue; - if (Js::JavascriptOperators::GetOwnPropertyDescriptor(Js::RecyclableObject::FromVar(object), + if (Js::JavascriptOperators::GetOwnPropertyDescriptor(Js::VarTo(object), propertyRecord->GetPropertyId(), scriptContext, &propertyDescriptorValue)) { *propertyDescriptor = Js::JavascriptOperators::FromPropertyDescriptor(propertyDescriptorValue, scriptContext); @@ -1638,7 +1648,7 @@ CHAKRA_API JsObjectGetOwnPropertyDescriptor(_In_ JsValueRef object, _In_ JsValue const Js::PropertyRecord *propertyRecord = nullptr; JsErrorCode errorValue = InternalGetPropertyRecord(scriptContext, - Js::RecyclableObject::FromVar(propertyId), &propertyRecord); + Js::VarTo(propertyId), &propertyRecord); if (errorValue != JsNoError) { @@ -1691,7 +1701,7 @@ CHAKRA_API JsObjectSetProperty(_In_ JsValueRef object, _In_ JsValueRef propertyI const Js::PropertyRecord *propertyRecord = nullptr; JsErrorCode errorValue = InternalGetPropertyRecord(scriptContext, - Js::RecyclableObject::FromVar(propertyId), &propertyRecord); + Js::VarTo(propertyId), &propertyRecord); if (errorValue != JsNoError) { @@ -1718,13 +1728,13 @@ CHAKRA_API JsHasProperty(_In_ JsValueRef object, _In_ JsPropertyIdRef propertyId PARAM_NOT_NULL(hasProperty); *hasProperty = false; - Js::RecyclableObject * instance = Js::RecyclableObject::FromVar(object); + Js::RecyclableObject * instance = Js::VarTo(object); *hasProperty = Js::JavascriptOperators::HasProperty(instance, ((Js::PropertyRecord *)propertyId)->GetPropertyId()) != 0; return JsNoError; }; - Js::RecyclableObject* robject = Js::RecyclableObject::FromVar(object); + Js::RecyclableObject* robject = Js::VarTo(object); Js::TypeId typeId = Js::JavascriptOperators::GetTypeId(robject); while (typeId != Js::TypeIds_Null && typeId != Js::TypeIds_Proxy) { @@ -1736,10 +1746,19 @@ CHAKRA_API JsHasProperty(_In_ JsValueRef object, _In_ JsPropertyIdRef propertyId { return ContextAPIWrapper(internalHasProperty); } - else +#ifdef _CHAKRACOREBUILD + else if (typeId == Js::TypeIds_Object) { - return ContextAPINoScriptWrapper(internalHasProperty); + // CEOs can also have traps so we would want the Enter/Leave semantics for those. + Js::CustomExternalWrapperObject * externalWrapper = Js::JavascriptOperators::TryFromVar(object); + if (externalWrapper) + { + return ContextAPIWrapper(internalHasProperty); + } } +#endif + + return ContextAPINoScriptWrapper(internalHasProperty); } #ifdef _CHAKRACOREBUILD @@ -1757,20 +1776,20 @@ CHAKRA_API JsObjectHasProperty(_In_ JsValueRef object, _In_ JsValueRef propertyI const Js::PropertyRecord *propertyRecord = nullptr; JsErrorCode errorValue = InternalGetPropertyRecord(scriptContext, - Js::RecyclableObject::FromVar(propertyId), &propertyRecord); + Js::VarTo(propertyId), &propertyRecord); if (errorValue != JsNoError) { return errorValue; } - Js::RecyclableObject * instance = Js::RecyclableObject::FromVar(object); + Js::RecyclableObject * instance = Js::VarTo(object); *hasProperty = Js::JavascriptOperators::HasProperty(instance, propertyRecord->GetPropertyId()) != 0; return JsNoError; }; - Js::RecyclableObject* robject = Js::RecyclableObject::FromVar(object); + Js::RecyclableObject* robject = Js::VarTo(object); Js::TypeId typeId = Js::JavascriptOperators::GetTypeId(robject); while (typeId != Js::TypeIds_Null && typeId != Js::TypeIds_Proxy) { @@ -1782,10 +1801,17 @@ CHAKRA_API JsObjectHasProperty(_In_ JsValueRef object, _In_ JsValueRef propertyI { return ContextAPIWrapper(internalHasProperty); } - else + else if (typeId == Js::TypeIds_Object) { - return ContextAPINoScriptWrapper(internalHasProperty); + // CEOs can also have traps so we would want the Enter/Leave semantics for those. + Js::CustomExternalWrapperObject * externalWrapper = Js::JavascriptOperators::TryFromVar(object); + if (externalWrapper) + { + return ContextAPIWrapper(internalHasProperty); + } } + + return ContextAPINoScriptWrapper(internalHasProperty); } #endif @@ -1839,7 +1865,7 @@ CHAKRA_API JsObjectDeleteProperty(_In_ JsValueRef object, _In_ JsValueRef proper const Js::PropertyRecord *propertyRecord = nullptr; JsErrorCode errorValue = InternalGetPropertyRecord(scriptContext, - Js::RecyclableObject::FromVar(propertyId), &propertyRecord); + Js::VarTo(propertyId), &propertyRecord); if (errorValue != JsNoError) { @@ -1867,7 +1893,7 @@ static JsErrorCode JsDefinePropertyCommon(Js::ScriptContext * scriptContext, _In } *result = Js::JavascriptOperators::DefineOwnPropertyDescriptor( - Js::RecyclableObject::FromVar(object), propertyRecord->GetPropertyId(), + Js::VarTo(object), propertyRecord->GetPropertyId(), propertyDescriptorValue, true, scriptContext) != 0; return JsNoError; @@ -1892,6 +1918,71 @@ CHAKRA_API JsDefineProperty(_In_ JsValueRef object, _In_ JsPropertyIdRef propert } #ifdef _CHAKRACOREBUILD + +CHAKRA_API +JsObjectDefinePropertyFull( + _In_ JsValueRef object, + _In_ JsValueRef key, + _In_opt_ JsValueRef value, + _In_opt_ JsValueRef getter, + _In_opt_ JsValueRef setter, + _In_ bool writable, + _In_ bool enumerable, + _In_ bool configurable, + _Out_ bool *result) +{ + return ContextAPIWrapper([&](Js::ScriptContext *scriptContext, + TTDRecorder& _actionEntryPopper) -> JsErrorCode { + PERFORM_JSRT_TTD_RECORD_ACTION_NOT_IMPLEMENTED(scriptContext); + AssertMsg(scriptContext->GetThreadContext()->IsScriptActive(), "Caller is expected to be under ContextAPIWrapper!"); + + VALIDATE_INCOMING_OBJECT(object, scriptContext); + VALIDATE_INCOMING_RECYCLABLE(key, scriptContext); + PARAM_NOT_NULL(result); + *result = false; + + const Js::PropertyRecord *propertyRecord = nullptr; + JsErrorCode errorValue = InternalGetPropertyRecord(scriptContext, + Js::VarTo(key), &propertyRecord); + + if (errorValue != JsNoError) + { + return errorValue; + } + + Js::PropertyDescriptor propertyDescriptor; + if (value) + { + propertyDescriptor.SetValue(value); + } + if (getter) + { + propertyDescriptor.SetGetter(getter); + } + if (setter) + { + propertyDescriptor.SetSetter(setter); + } + if (writable) + { + propertyDescriptor.SetWritable(writable); + } + if (enumerable) + { + propertyDescriptor.SetEnumerable(enumerable); + } + if (configurable) + { + propertyDescriptor.SetConfigurable(configurable); + } + + *result = Js::JavascriptOperators::DefineOwnPropertyDescriptor( + Js::VarTo(object), propertyRecord->GetPropertyId(), + propertyDescriptor, true, scriptContext) != 0; + return JsNoError; + }); +} + CHAKRA_API JsObjectDefineProperty(_In_ JsValueRef object, _In_ JsValueRef propertyId, _In_ JsValueRef propertyDescriptor, _Out_ bool *result) { @@ -1907,7 +1998,7 @@ CHAKRA_API JsObjectDefineProperty(_In_ JsValueRef object, _In_ JsValueRef proper const Js::PropertyRecord *propertyRecord = nullptr; JsErrorCode errorValue = InternalGetPropertyRecord(scriptContext, - Js::RecyclableObject::FromVar(propertyId), &propertyRecord); + Js::VarTo(propertyId), &propertyRecord); if (errorValue != JsNoError) { @@ -1987,57 +2078,6 @@ CHAKRA_API JsCreateArrayBuffer(_In_ unsigned int byteLength, _Out_ JsValueRef *r }); } -#ifdef _CHAKRACOREBUILD -CHAKRA_API JsCreateSharedArrayBufferWithSharedContent(_In_ JsSharedArrayBufferContentHandle sharedContents, _Out_ JsValueRef *result) -{ - return ContextAPIWrapper([&](Js::ScriptContext *scriptContext, TTDRecorder& _actionEntryPopper) -> JsErrorCode { - - PARAM_NOT_NULL(result); - - Js::JavascriptLibrary* library = scriptContext->GetLibrary(); - *result = library->CreateSharedArrayBuffer((Js::SharedContents*)sharedContents); - - PERFORM_JSRT_TTD_RECORD_ACTION_RESULT(scriptContext, result); - - JS_ETW(EventWriteJSCRIPT_RECYCLER_ALLOCATE_OBJECT(*result)); - return JsNoError; - }); -} - -CHAKRA_API JsGetSharedArrayBufferContent(_In_ JsValueRef sharedArrayBuffer, _Out_ JsSharedArrayBufferContentHandle *sharedContents) -{ - return ContextAPIWrapper([&](Js::ScriptContext *scriptContext, TTDRecorder& _actionEntryPopper) -> JsErrorCode { - - PARAM_NOT_NULL(sharedContents); - - if (!Js::SharedArrayBuffer::Is(sharedArrayBuffer)) - { - return JsErrorInvalidArgument; - } - - Js::SharedContents**& content = (Js::SharedContents**&)sharedContents; - *content = Js::SharedArrayBuffer::FromVar(sharedArrayBuffer)->GetSharedContents(); - - if (*content == nullptr) - { - return JsErrorFatal; - } - - (*content)->AddRef(); - - return JsNoError; - }); -} - -CHAKRA_API JsReleaseSharedArrayBufferContentHandle(_In_ JsSharedArrayBufferContentHandle sharedContents) -{ - return ContextAPIWrapper([&](Js::ScriptContext *scriptContext, TTDRecorder& _actionEntryPopper) -> JsErrorCode { - ((Js::SharedContents*)sharedContents)->Release(); - return JsNoError; - }); -} -#endif // _CHAKRACOREBUILD - CHAKRA_API JsCreateExternalArrayBuffer(_Pre_maybenull_ _Pre_writable_byte_size_(byteLength) void *data, _In_ unsigned int byteLength, _In_opt_ JsFinalizeCallback finalizeCallback, _In_opt_ void *callbackState, _Out_ JsValueRef *result) { @@ -2080,7 +2120,7 @@ CHAKRA_API JsCreateTypedArray(_In_ JsTypedArrayType arrayType, _In_ JsValueRef b Js::JavascriptLibrary* library = scriptContext->GetLibrary(); - const bool fromArrayBuffer = (baseArray != JS_INVALID_REFERENCE && Js::ArrayBuffer::Is(baseArray)); + const bool fromArrayBuffer = (baseArray != JS_INVALID_REFERENCE && Js::VarIs(baseArray)); if (byteOffset != 0 && !fromArrayBuffer) { @@ -2159,13 +2199,13 @@ CHAKRA_API JsCreateDataView(_In_ JsValueRef arrayBuffer, _In_ unsigned int byteO VALIDATE_INCOMING_REFERENCE(arrayBuffer, scriptContext); PARAM_NOT_NULL(result); - if (!Js::ArrayBuffer::Is(arrayBuffer)) + if (!Js::VarIs(arrayBuffer)) { return JsErrorInvalidArgument; } Js::JavascriptLibrary* library = scriptContext->GetLibrary(); - *result = library->CreateDataView(Js::ArrayBuffer::FromVar(arrayBuffer), byteOffset, byteLength); + *result = library->CreateDataView(Js::VarTo(arrayBuffer), byteOffset, byteLength); JS_ETW(EventWriteJSCRIPT_RECYCLER_ALLOCATE_OBJECT(*result)); return JsNoError; @@ -2206,7 +2246,7 @@ CHAKRA_API JsGetTypedArrayInfo(_In_ JsValueRef typedArray, _Out_opt_ JsTypedArra *arrayType = GetTypedArrayType(typeId); } - Js::TypedArrayBase* typedArrayBase = Js::TypedArrayBase::FromVar(typedArray); + Js::TypedArrayBase* typedArrayBase = Js::VarTo(typedArray); if (arrayBuffer != nullptr) { *arrayBuffer = typedArrayBase->GetArrayBuffer(); } @@ -2221,7 +2261,7 @@ CHAKRA_API JsGetTypedArrayInfo(_In_ JsValueRef typedArray, _Out_opt_ JsTypedArra } #if ENABLE_TTD - Js::ScriptContext* scriptContext = Js::RecyclableObject::FromVar(typedArray)->GetScriptContext(); + Js::ScriptContext* scriptContext = Js::VarTo(typedArray)->GetScriptContext(); if(PERFORM_JSRT_TTD_RECORD_ACTION_CHECK(scriptContext) && arrayBuffer != nullptr) { scriptContext->GetThreadContext()->TTDLog->RecordJsRTGetTypedArrayInfo(typedArray, *arrayBuffer); @@ -2240,12 +2280,12 @@ CHAKRA_API JsGetArrayBufferStorage(_In_ JsValueRef instance, _Outptr_result_byte BEGIN_JSRT_NO_EXCEPTION { - if (!Js::ArrayBuffer::Is(instance)) + if (!Js::VarIs(instance)) { RETURN_NO_EXCEPTION(JsErrorInvalidArgument); } - Js::ArrayBuffer* arrayBuffer = Js::ArrayBuffer::FromVar(instance); + Js::ArrayBuffer* arrayBuffer = Js::VarTo(instance); *buffer = arrayBuffer->GetBuffer(); *bufferLength = arrayBuffer->GetByteLength(); } @@ -2267,7 +2307,7 @@ CHAKRA_API JsGetTypedArrayStorage(_In_ JsValueRef instance, _Outptr_result_byteb RETURN_NO_EXCEPTION(JsErrorInvalidArgument); } - Js::TypedArrayBase* typedArrayBase = Js::TypedArrayBase::FromVar(instance); + Js::TypedArrayBase* typedArrayBase = Js::VarTo(instance); *buffer = typedArrayBase->GetByteBuffer(); *bufferLength = typedArrayBase->GetByteLength(); @@ -2325,12 +2365,12 @@ CHAKRA_API JsGetDataViewStorage(_In_ JsValueRef instance, _Outptr_result_bytebuf BEGIN_JSRT_NO_EXCEPTION { - if (!Js::DataView::Is(instance)) + if (!Js::VarIs(instance)) { RETURN_NO_EXCEPTION(JsErrorInvalidArgument); } - Js::DataView* dataView = Js::DataView::FromVar(instance); + Js::DataView* dataView = Js::VarTo(instance); *buffer = dataView->GetArrayBuffer()->GetBuffer() + dataView->GetByteOffset(); *bufferLength = dataView->GetLength(); } @@ -2458,7 +2498,7 @@ Js::ArrayObject* CreateTypedArray(Js::ScriptContext *scriptContext, void* data, template void GetObjectArrayData(Js::ArrayObject* objectArray, void** data, JsTypedArrayType* arrayType, uint* length) { - Js::TypedArray* typedArray = Js::TypedArray::FromVar(objectArray); + Js::TypedArray* typedArray = Js::VarTo>(objectArray); *data = typedArray->GetArrayBuffer()->GetBuffer(); *arrayType = TypedArrayTypeTraits::cTypedArrayType; *length = typedArray->GetLength(); @@ -2482,7 +2522,7 @@ CHAKRA_API JsSetIndexedPropertiesToExternalData( || (typeId >= Js::TypeIds_TypedArrayMin && typeId <= Js::TypeIds_TypedArrayMax) || typeId == Js::TypeIds_ArrayBuffer || typeId == Js::TypeIds_DataView - || Js::RecyclableObject::FromVar(object)->IsExternal() + || Js::VarTo(object)->IsExternal() ) { return JsErrorInvalidArgument; @@ -2527,7 +2567,7 @@ CHAKRA_API JsSetIndexedPropertiesToExternalData( return JsErrorInvalidArgument; } - Js::DynamicObject* dynamicObject = Js::DynamicObject::FromVar(object); + Js::DynamicObject* dynamicObject = Js::VarTo(object); dynamicObject->SetObjectArray(newTypedArray); return JsNoError; @@ -2545,7 +2585,7 @@ CHAKRA_API JsHasIndexedPropertiesExternalData(_In_ JsValueRef object, _Out_ bool if (Js::DynamicType::Is(Js::JavascriptOperators::GetTypeId(object))) { - Js::DynamicObject* dynamicObject = Js::DynamicObject::UnsafeFromVar(object); + Js::DynamicObject* dynamicObject = Js::UnsafeVarTo(object); Js::ArrayObject* objectArray = dynamicObject->GetObjectArray(); *value = (objectArray && !Js::DynamicObject::IsAnyArray(objectArray)); } @@ -2575,7 +2615,7 @@ CHAKRA_API JsGetIndexedPropertiesExternalData( *arrayType = JsTypedArrayType(); *elementLength = 0; - Js::DynamicObject* dynamicObject = Js::DynamicObject::UnsafeFromVar(object); + Js::DynamicObject* dynamicObject = Js::UnsafeVarTo(object); Js::ArrayObject* objectArray = dynamicObject->GetObjectArray(); if (!objectArray) { @@ -2683,7 +2723,15 @@ CHAKRA_API JsHasExternalData(_In_ JsValueRef object, _Out_ bool *value) BEGIN_JSRT_NO_EXCEPTION { - *value = JsrtExternalObject::Is(object); + while (Js::VarIs(object)) + { + object = Js::UnsafeVarTo(object); + } + *value = (Js::VarIs(object) +#ifdef _CHAKRACOREBUILD + || Js::VarIs(object) +#endif + ); } END_JSRT_NO_EXCEPTION } @@ -2695,10 +2743,20 @@ CHAKRA_API JsGetExternalData(_In_ JsValueRef object, _Out_ void **data) BEGIN_JSRT_NO_EXCEPTION { - if (JsrtExternalObject::Is(object)) + while (Js::VarIs(object)) { - *data = JsrtExternalObject::FromVar(object)->GetSlotData(); + object = Js::UnsafeVarTo(object)->GetTarget(); } + if (Js::VarIs(object)) + { + *data = Js::UnsafeVarTo(object)->GetSlotData(); + } +#ifdef _CHAKRACOREBUILD + else if (Js::VarIs(object)) + { + *data = Js::UnsafeVarTo(object)->GetSlotData(); + } +#endif else { *data = nullptr; @@ -2714,10 +2772,20 @@ CHAKRA_API JsSetExternalData(_In_ JsValueRef object, _In_opt_ void *data) BEGIN_JSRT_NO_EXCEPTION { - if (JsrtExternalObject::Is(object)) + while (Js::VarIs(object)) + { + object = Js::UnsafeVarTo(object)->GetTarget(); + } + if (Js::VarIs(object)) { - JsrtExternalObject::FromVar(object)->SetSlotData(data); + Js::UnsafeVarTo(object)->SetSlotData(data); } +#ifdef _CHAKRACOREBUILD + else if (Js::VarIs(object)) + { + Js::UnsafeVarTo(object)->SetSlotData(data); + } +#endif else { RETURN_NO_EXCEPTION(JsErrorInvalidArgument); @@ -2767,7 +2835,7 @@ CHAKRA_API JsCallFunction(_In_ JsValueRef function, _In_reads_(cargs) JsValueRef VALIDATE_INCOMING_REFERENCE(args[index], scriptContext); } - Js::JavascriptFunction *jsFunction = Js::JavascriptFunction::FromVar(function); + Js::JavascriptFunction *jsFunction = Js::VarTo(function); Js::CallInfo callInfo(cargs); Js::Arguments jsArgs(callInfo, reinterpret_cast(args)); @@ -2808,13 +2876,13 @@ CHAKRA_API JsConstructObject(_In_ JsValueRef function, _In_reads_(cargs) JsValue VALIDATE_INCOMING_REFERENCE(args[index], scriptContext); } - Js::JavascriptFunction *jsFunction = Js::JavascriptFunction::FromVar(function); + Js::JavascriptFunction *jsFunction = Js::VarTo(function); Js::CallInfo callInfo(Js::CallFlags::CallFlags_New, cargs); Js::Arguments jsArgs(callInfo, reinterpret_cast(args)); // //TODO: we will want to look at this at some point -- either treat as "top-level" call or maybe constructors are fast so we can just jump back to previous "real" code - //TTDAssert(!Js::ScriptFunction::Is(jsFunction) || execContext->GetThreadContext()->TTDRootNestingCount != 0, "This will cause user code to execute and we need to add support for that as a top-level call source!!!!"); + //TTDAssert(!Js::VarIs(jsFunction) || execContext->GetThreadContext()->TTDRootNestingCount != 0, "This will cause user code to execute and we need to add support for that as a top-level call source!!!!"); // BEGIN_SAFE_REENTRANT_CALL(scriptContext->GetThreadContext()) @@ -2918,9 +2986,9 @@ void SetErrorMessage(Js::ScriptContext *scriptContext, Js::JavascriptError *newE if (!Js::JavascriptOperators::IsUndefined(message)) { Js::JavascriptString *messageStr = nullptr; - if (Js::JavascriptString::Is(message)) + if (Js::VarIs(message)) { - messageStr = Js::JavascriptString::FromVar(message); + messageStr = Js::VarTo(message); } else { @@ -3347,12 +3415,12 @@ CHAKRA_API JsGetPropertyIdFromSymbol(_In_ JsValueRef symbol, _Out_ JsPropertyIdR PARAM_NOT_NULL(propertyId); *propertyId = nullptr; - if (!Js::JavascriptSymbol::Is(symbol)) + if (!Js::VarIs(symbol)) { return JsErrorPropertyNotSymbol; } - *propertyId = (JsPropertyIdRef)Js::JavascriptSymbol::FromVar(symbol)->GetValue(); + *propertyId = (JsPropertyIdRef)Js::VarTo(symbol)->GetValue(); return JsNoError; }, /*allowInObjectBeforeCollectCallback*/true); @@ -3496,7 +3564,7 @@ JsErrorCode RunScriptCore(JsValueRef scriptSource, const byte *script, size_t cb } const int chsize = (loadScriptFlag & LoadScriptFlag_Utf8Source) ? - sizeof(utf8char_t) : sizeof(WCHAR); + sizeof(utf8char_t) : sizeof(WCHAR); SRCINFO si = { /* sourceContextInfo */ sourceContextInfo, @@ -3516,6 +3584,7 @@ JsErrorCode RunScriptCore(JsValueRef scriptSource, const byte *script, size_t cb loadScriptFlag = (LoadScriptFlag)(loadScriptFlag | LoadScriptFlag_Expression); } bool isLibraryCode = (parseAttributes & JsParseScriptAttributeLibraryCode) == JsParseScriptAttributeLibraryCode; + bool isStrictMode = (parseAttributes & JsParseScriptAttributeStrictMode) == JsParseScriptAttributeStrictMode; if (isLibraryCode) { loadScriptFlag = (LoadScriptFlag)(loadScriptFlag | LoadScriptFlag_LibraryCode); @@ -3524,14 +3593,18 @@ JsErrorCode RunScriptCore(JsValueRef scriptSource, const byte *script, size_t cb { loadScriptFlag = (LoadScriptFlag)(loadScriptFlag | LoadScriptFlag_Module); } + if (isStrictMode) + { + loadScriptFlag = (LoadScriptFlag)(loadScriptFlag | LoadScriptFlag_StrictMode); + } #if ENABLE_TTD TTD::NSLogEvents::EventLogEntry* parseEvent = nullptr; - if(PERFORM_JSRT_TTD_RECORD_ACTION_CHECK(scriptContext)) + if (PERFORM_JSRT_TTD_RECORD_ACTION_CHECK(scriptContext)) { parseEvent = scriptContext->GetThreadContext()->TTDLog->RecordJsRTCodeParse(_actionEntryPopper, - loadScriptFlag, ((loadScriptFlag & LoadScriptFlag_Utf8Source) == LoadScriptFlag_Utf8Source), - script, (uint32)cb, sourceContext, sourceUrl); + loadScriptFlag, ((loadScriptFlag & LoadScriptFlag_Utf8Source) == LoadScriptFlag_Utf8Source), + script, (uint32)cb, sourceContext, sourceUrl); } #endif @@ -3721,8 +3794,8 @@ JsErrorCode GetScriptBufferDetails( *cb = 0; *script = nullptr; - const bool isExternalArray = Js::ExternalArrayBuffer::Is(scriptVal); - const bool isString = !isExternalArray && Js::JavascriptString::Is(scriptVal); + const bool isExternalArray = Js::VarIs(scriptVal); + const bool isString = !isExternalArray && Js::VarIs(scriptVal); if (!isExternalArray && !isString) { return JsErrorInvalidArgument; @@ -3877,25 +3950,37 @@ JsErrorCode RunSerializedScriptCore( JsSourceContext scriptLoadSourceContext, // only used by scriptLoadCallback unsigned char *buffer, Js::ArrayBuffer* bufferVal, JsSourceContext sourceContext, const WCHAR *sourceUrl, + DWORD bgParseCookie, bool parseOnly, bool useParserStateCache, JsValueRef *result, uint sourceIndex) { Js::JavascriptFunction *function; JsErrorCode errorCode = ContextAPINoScriptWrapper_NoRecord([&](Js::ScriptContext *scriptContext) -> JsErrorCode { + if (result != nullptr) { *result = nullptr; } - PARAM_NOT_NULL(buffer); + if (bgParseCookie == 0) + { + PARAM_NOT_NULL(buffer); + } + else + { + Assert(buffer == nullptr); + } + PARAM_NOT_NULL(sourceUrl); Js::ISourceHolder *sourceHolder = nullptr; SRCINFO *hsi = nullptr; + PARAM_NOT_NULL(scriptLoadCallback); PARAM_NOT_NULL(scriptUnloadCallback); typedef Js::JsrtSourceHolder TSourceHolder; - if (!useParserStateCache) + + if (!useParserStateCache || bgParseCookie != 0) { sourceIndex = Js::Constants::InvalidSourceIndex; @@ -3933,20 +4018,44 @@ JsErrorCode RunSerializedScriptCore( Field(Js::FunctionBody*) functionBody = nullptr; - uint32 flags = 0; - - if (CONFIG_FLAG(CreateFunctionProxy) && !scriptContext->IsProfiling()) + if (bgParseCookie == 0) { - flags = fscrAllowFunctionProxy; + uint32 flags = 0; + + if (CONFIG_FLAG(CreateFunctionProxy) && !scriptContext->IsProfiling()) + { + flags = fscrAllowFunctionProxy; + } + if (useParserStateCache && !CONFIG_FLAG(ForceSerialized)) + { + flags |= fscrCreateParserState; + } + + hr = Js::ByteCodeSerializer::DeserializeFromBuffer(scriptContext, flags, sourceHolder, + hsi, buffer, nullptr, &functionBody, sourceIndex); } - if (useParserStateCache && !CONFIG_FLAG(ForceSerialized)) + else { - flags |= fscrCreateParserState; + size_t srcLength = 0; + Js::FunctionBody* functionBodyLocal = nullptr; + hr = BGParseManager::GetBGParseManager()->GetParseResults( + scriptContext, + bgParseCookie, + nullptr, // pszSrc + hsi, + &functionBodyLocal, + nullptr, // pse + srcLength, + nullptr, // utf8sourceinfo + sourceIndex + ); + + if (hr == S_OK) + { + functionBody = functionBodyLocal; + } } - hr = Js::ByteCodeSerializer::DeserializeFromBuffer(scriptContext, flags, sourceHolder, - hsi, buffer, nullptr, &functionBody, sourceIndex); - if (FAILED(hr)) { return JsErrorBadSerializedScript; @@ -4004,7 +4113,7 @@ CHAKRA_API JsParseSerializedScript(_In_z_ const WCHAR * script, _In_ unsigned ch return RunSerializedScriptCore( DummyScriptLoadSourceCallback, DummyScriptUnloadCallback, reinterpret_cast(script), // use script source pointer as scriptLoadSourceContext - buffer, nullptr, sourceContext, sourceUrl, true, false, result, Js::Constants::InvalidSourceIndex); + buffer, nullptr, sourceContext, sourceUrl, 0, true, false, result, Js::Constants::InvalidSourceIndex); } CHAKRA_API JsRunSerializedScript(_In_z_ const WCHAR * script, _In_ unsigned char *buffer, @@ -4015,7 +4124,7 @@ CHAKRA_API JsRunSerializedScript(_In_z_ const WCHAR * script, _In_ unsigned char return RunSerializedScriptCore( DummyScriptLoadSourceCallback, DummyScriptUnloadCallback, reinterpret_cast(script), // use script source pointer as scriptLoadSourceContext - buffer, nullptr, sourceContext, sourceUrl, false, false, result, Js::Constants::InvalidSourceIndex); + buffer, nullptr, sourceContext, sourceUrl, 0, false, false, result, Js::Constants::InvalidSourceIndex); } CHAKRA_API JsParseSerializedScriptWithCallback(_In_ JsSerializedScriptLoadSourceCallback scriptLoadCallback, @@ -4026,7 +4135,7 @@ CHAKRA_API JsParseSerializedScriptWithCallback(_In_ JsSerializedScriptLoadSource return RunSerializedScriptCore( scriptLoadCallback, scriptUnloadCallback, sourceContext, // use the same user provided sourceContext as scriptLoadSourceContext - buffer, nullptr, sourceContext, sourceUrl, true, false, result, Js::Constants::InvalidSourceIndex); + buffer, nullptr, sourceContext, sourceUrl, 0, true, false, result, Js::Constants::InvalidSourceIndex); } CHAKRA_API JsRunSerializedScriptWithCallback(_In_ JsSerializedScriptLoadSourceCallback scriptLoadCallback, @@ -4037,7 +4146,7 @@ CHAKRA_API JsRunSerializedScriptWithCallback(_In_ JsSerializedScriptLoadSourceCa return RunSerializedScriptCore( scriptLoadCallback, scriptUnloadCallback, sourceContext, // use the same user provided sourceContext as scriptLoadSourceContext - buffer, nullptr, sourceContext, sourceUrl, false, false, result, Js::Constants::InvalidSourceIndex); + buffer, nullptr, sourceContext, sourceUrl, 0, false, false, result, Js::Constants::InvalidSourceIndex); } #endif // _WIN32 @@ -4129,9 +4238,6 @@ CHAKRA_API JsTTDStart() Js::ScriptContext* scriptContext = currentContext->GetScriptContext(); TTDAssert(scriptContext->IsTTDRecordOrReplayModeEnabled(), "Need to create in TTD Record Mode."); -#if ENABLE_NATIVE_CODEGEN - TTDAssert(JITManager::GetJITManager() == nullptr || !JITManager::GetJITManager()->IsOOPJITEnabled(), "TTD cannot run with OOP JIT yet!!!"); -#endif return GlobalAPIWrapper_NoRecord([&]() -> JsErrorCode { if(scriptContext->IsTTDRecordModeEnabled()) @@ -4253,9 +4359,9 @@ CHAKRA_API JsTTDNotifyLongLivedReferenceAdd(_In_ JsValueRef value) return JsErrorNoCurrentContext; } - if (Js::RecyclableObject::Is(value)) + if (Js::VarIs(value)) { - Js::RecyclableObject* obj = Js::RecyclableObject::FromVar(value); + Js::RecyclableObject* obj = Js::VarTo(value); if (obj->GetScriptContext()->IsTTDRecordModeEnabled()) { if (obj->GetScriptContext()->ShouldPerformRecordAction()) @@ -4330,13 +4436,13 @@ CHAKRA_API JsTTDRawBufferAsyncModificationRegister(_In_ JsValueRef instance, _In JsErrorCode addRefResult = ContextAPIWrapper([&](Js::ScriptContext *scriptContext, TTDRecorder& _actionEntryPopper) -> JsErrorCode { if (scriptContext->IsTTDRecordModeEnabled()) { - TTDAssert(Js::ArrayBuffer::Is(instance), "Not array buffer object!!!"); - Js::ArrayBuffer* dstBuff = Js::ArrayBuffer::FromVar(instance); + TTDAssert(Js::VarIs(instance), "Not array buffer object!!!"); + Js::ArrayBuffer* dstBuff = Js::VarTo(instance); addRefObj = dstBuff; TTDAssert(dstBuff->GetBuffer() <= initialModPos && initialModPos < dstBuff->GetBuffer() + dstBuff->GetByteLength(), "Not array buffer object!!!"); TTDAssert(initialModPos - dstBuff->GetBuffer() < UINT32_MAX, "This is really big!!!"); - ptrdiff_t index = initialModPos - Js::ArrayBuffer::FromVar(instance)->GetBuffer(); + ptrdiff_t index = initialModPos - Js::VarTo(instance)->GetBuffer(); scriptContext->TTDContextInfo->AddToAsyncPendingList(dstBuff, (uint32)index); @@ -4375,7 +4481,7 @@ CHAKRA_API JsTTDRawBufferAsyncModifyComplete(_In_ byte* finalModPos) TTD::TTDPendingAsyncBufferModification pendingAsyncInfo = { 0 }; scriptContext->TTDContextInfo->GetFromAsyncPendingList(&pendingAsyncInfo, finalModPos); - Js::ArrayBuffer* dstBuff = Js::ArrayBuffer::FromVar(pendingAsyncInfo.ArrayBufferVar); + Js::ArrayBuffer* dstBuff = Js::VarTo(pendingAsyncInfo.ArrayBufferVar); releaseObj = dstBuff; PERFORM_JSRT_TTD_RECORD_ACTION(scriptContext, RecordJsRTRawBufferAsyncModifyComplete, pendingAsyncInfo, finalModPos); @@ -4750,84 +4856,6 @@ CHAKRA_API JsTTDDiagSetAutoTraceStatus(_In_ bool status) #ifdef _CHAKRACOREBUILD -template -static void CastCopy(const SrcChar* src, DstChar* dst, size_t count) -{ - const SrcChar* end = src + count; - while (src < end) - { - *dst++ = static_cast(*src++); - } -} - -CHAKRA_API JsCreateString( - _In_ const char *content, - _In_ size_t length, - _Out_ JsValueRef *value) -{ - PARAM_NOT_NULL(content); - PARAM_NOT_NULL(value); - *value = JS_INVALID_REFERENCE; - - if (length == static_cast(-1)) - { - length = strlen(content); - } - - if (length > MaxCharCount) - { - return JsErrorOutOfMemory; - } - - return ContextAPINoScriptWrapper([&](Js::ScriptContext *scriptContext, TTDRecorder& _actionEntryPopper) -> JsErrorCode { - - Js::JavascriptString *stringValue = Js::LiteralStringWithPropertyStringPtr:: - NewFromCString(content, (CharCount)length, scriptContext->GetLibrary()); - - PERFORM_JSRT_TTD_RECORD_ACTION(scriptContext, RecordJsRTCreateString, stringValue->GetSz(), stringValue->GetLength()); - - *value = stringValue; - - PERFORM_JSRT_TTD_RECORD_ACTION_RESULT(scriptContext, value); - - return JsNoError; - }); -} - -CHAKRA_API JsCreateStringUtf16( - _In_ const uint16_t *content, - _In_ size_t length, - _Out_ JsValueRef *value) -{ - PARAM_NOT_NULL(content); - PARAM_NOT_NULL(value); - *value = JS_INVALID_REFERENCE; - - if (length == static_cast(-1)) - { - length = wcslen((const char16 *)content); - } - - if (length > static_cast(-1)) - { - return JsErrorOutOfMemory; - } - - return ContextAPINoScriptWrapper([&](Js::ScriptContext *scriptContext, TTDRecorder& _actionEntryPopper) -> JsErrorCode { - - Js::JavascriptString *stringValue = Js::LiteralStringWithPropertyStringPtr:: - NewFromWideString((const char16 *)content, (CharCount)length, scriptContext->GetLibrary()); - - PERFORM_JSRT_TTD_RECORD_ACTION(scriptContext, RecordJsRTCreateString, stringValue->GetSz(), stringValue->GetLength()); - - *value = stringValue; - - PERFORM_JSRT_TTD_RECORD_ACTION_RESULT(scriptContext, value); - - return JsNoError; - }); -} - template JsErrorCode WriteStringCopy( @@ -4934,9 +4962,9 @@ _ALWAYSINLINE JsErrorCode CompileRun( VALIDATE_JSREF(scriptVal); PARAM_NOT_NULL(sourceUrl); - bool isExternalArray = Js::ExternalArrayBuffer::Is(scriptVal), - isString = false; - bool isUtf8 = !(parseAttributes & JsParseScriptAttributeArrayBufferIsUtf16Encoded); + bool isExternalArray = Js::VarIs(scriptVal), + isString = false; + bool isUtf8 = !(parseAttributes & JsParseScriptAttributeArrayBufferIsUtf16Encoded); LoadScriptFlag scriptFlag = LoadScriptFlag_None; const byte* script; @@ -4955,7 +4983,7 @@ _ALWAYSINLINE JsErrorCode CompileRun( } else { - isString = Js::JavascriptString::Is(scriptVal); + isString = Js::VarIs(scriptVal); if (!isString) { return JsErrorInvalidArgument; @@ -4965,19 +4993,19 @@ _ALWAYSINLINE JsErrorCode CompileRun( JsErrorCode error = GlobalAPIWrapper_NoRecord([&]() -> JsErrorCode { if (isString) { - Js::JavascriptString* jsString = Js::JavascriptString::FromVar(scriptVal); + Js::JavascriptString* jsString = Js::VarTo(scriptVal); script = (const byte*)jsString->GetSz(); // JavascriptString is 2 bytes (WCHAR/char16) cb = jsString->GetLength() * sizeof(WCHAR); } - if (!Js::JavascriptString::Is(sourceUrl)) + if (!Js::VarIs(sourceUrl)) { return JsErrorInvalidArgument; } - url = Js::JavascriptString::FromVar(sourceUrl)->GetSz(); + url = Js::VarTo(sourceUrl)->GetSz(); return JsNoError; @@ -5132,7 +5160,7 @@ CHAKRA_API JsParseSerialized( const WCHAR *url; - if (Js::JavascriptString::Is(sourceUrl)) + if (Js::VarIs(sourceUrl)) { url = ((Js::JavascriptString*)(sourceUrl))->GetSz(); } @@ -5142,18 +5170,18 @@ CHAKRA_API JsParseSerialized( } // JsParseSerialized only accepts ArrayBuffer (incl. ExternalArrayBuffer) - if (!Js::ExternalArrayBuffer::Is(bufferVal)) + if (!Js::VarIs(bufferVal)) { return JsErrorInvalidArgument; } - Js::ArrayBuffer* arrayBuffer = Js::ArrayBuffer::FromVar(bufferVal); + Js::ArrayBuffer* arrayBuffer = Js::VarTo(bufferVal); byte* buffer = arrayBuffer->GetBuffer(); return RunSerializedScriptCore( scriptLoadCallback, DummyScriptUnloadCallback, sourceContext,// use the same user provided sourceContext as scriptLoadSourceContext - buffer, arrayBuffer, sourceContext, url, true, false, result, Js::Constants::InvalidSourceIndex); + buffer, arrayBuffer, sourceContext, url, 0, true, false, result, Js::Constants::InvalidSourceIndex); } CHAKRA_API JsRunSerialized( @@ -5166,7 +5194,7 @@ CHAKRA_API JsRunSerialized( PARAM_NOT_NULL(bufferVal); const WCHAR *url; - if (sourceUrl && Js::JavascriptString::Is(sourceUrl)) + if (sourceUrl && Js::VarIs(sourceUrl)) { url = ((Js::JavascriptString*)(sourceUrl))->GetSz(); } @@ -5176,251 +5204,20 @@ CHAKRA_API JsRunSerialized( } // JsParseSerialized only accepts ArrayBuffer (incl. ExternalArrayBuffer) - if (!Js::ExternalArrayBuffer::Is(bufferVal)) + if (!Js::VarIs(bufferVal)) { return JsErrorInvalidArgument; } - Js::ArrayBuffer* arrayBuffer = Js::ArrayBuffer::FromVar(bufferVal); + Js::ArrayBuffer* arrayBuffer = Js::VarTo(bufferVal); byte* buffer = arrayBuffer->GetBuffer(); return RunSerializedScriptCore( scriptLoadCallback, DummyScriptUnloadCallback, sourceContext, // use the same user provided sourceContext as scriptLoadSourceContext - buffer, arrayBuffer, sourceContext, url, false, false, result, Js::Constants::InvalidSourceIndex); -} - -CHAKRA_API JsCreatePromise(_Out_ JsValueRef *promise, _Out_ JsValueRef *resolve, _Out_ JsValueRef *reject) -{ - return ContextAPIWrapper([&](Js::ScriptContext *scriptContext, TTDRecorder& _actionEntryPopper) -> JsErrorCode { - PERFORM_JSRT_TTD_RECORD_ACTION_NOT_IMPLEMENTED(scriptContext); - - PARAM_NOT_NULL(promise); - PARAM_NOT_NULL(resolve); - PARAM_NOT_NULL(reject); - - *promise = nullptr; - *resolve = nullptr; - *reject = nullptr; - - Js::JavascriptPromiseResolveOrRejectFunction *jsResolve = nullptr; - Js::JavascriptPromiseResolveOrRejectFunction *jsReject = nullptr; - Js::JavascriptPromise *jsPromise = scriptContext->GetLibrary()->CreatePromise(); - Js::JavascriptPromise::InitializePromise(jsPromise, &jsResolve, &jsReject, scriptContext); - - *promise = (JsValueRef)jsPromise; - *resolve = (JsValueRef)jsResolve; - *reject = (JsValueRef)jsReject; - - return JsNoError; - }); -} - -CHAKRA_API JsGetPromiseState(_In_ JsValueRef promise, _Out_ JsPromiseState *state) -{ - return ContextAPIWrapper([&](Js::ScriptContext *scriptContext, TTDRecorder& _actionEntryPopper) -> JsErrorCode { - PERFORM_JSRT_TTD_RECORD_ACTION_NOT_IMPLEMENTED(scriptContext); - - VALIDATE_INCOMING_REFERENCE(promise, scriptContext); - PARAM_NOT_NULL(state); - - *state = JsPromiseStatePending; - - if (!Js::JavascriptPromise::Is(promise)) - { - return JsErrorInvalidArgument; - } - - Js::JavascriptPromise *jsPromise = Js::JavascriptPromise::FromVar(promise); - Js::JavascriptPromise::PromiseStatus status = jsPromise->GetStatus(); - - switch (status) - { - case Js::JavascriptPromise::PromiseStatus::PromiseStatusCode_HasRejection: - *state = JsPromiseStateRejected; - break; - - case Js::JavascriptPromise::PromiseStatus::PromiseStatusCode_HasResolution: - *state = JsPromiseStateFulfilled; - break; - } - - return JsNoError; - }); + buffer, arrayBuffer, sourceContext, url, 0, false, false, result, Js::Constants::InvalidSourceIndex); } -CHAKRA_API JsGetPromiseResult(_In_ JsValueRef promise, _Out_ JsValueRef *result) -{ - return ContextAPIWrapper([&](Js::ScriptContext *scriptContext, TTDRecorder& _actionEntryPopper) -> JsErrorCode { - PERFORM_JSRT_TTD_RECORD_ACTION_NOT_IMPLEMENTED(scriptContext); - - VALIDATE_INCOMING_REFERENCE(promise, scriptContext); - PARAM_NOT_NULL(result); - - *result = JS_INVALID_REFERENCE; - - if (!Js::JavascriptPromise::Is(promise)) - { - return JsErrorInvalidArgument; - } - - Js::JavascriptPromise *jsPromise = Js::JavascriptPromise::FromVar(promise); - Js::Var jsResult = jsPromise->GetResult(); - - if (jsResult == nullptr) - { - return JsErrorPromisePending; - } - - *result = (JsValueRef)jsResult; - return JsNoError; - }); -} - -CHAKRA_API JsCreateWeakReference( - _In_ JsValueRef value, - _Out_ JsWeakRef* weakRef) -{ - VALIDATE_JSREF(value); - PARAM_NOT_NULL(weakRef); - *weakRef = nullptr; - - if (Js::TaggedNumber::Is(value)) - { - return JsNoWeakRefRequired; - } - - return GlobalAPIWrapper_NoRecord([&]() -> JsErrorCode { - ThreadContext* threadContext = ThreadContext::GetContextForCurrentThread(); - if (threadContext == nullptr) - { - return JsErrorNoCurrentContext; - } - - Recycler* recycler = threadContext->GetRecycler(); - if (recycler->IsInObjectBeforeCollectCallback()) - { - return JsErrorInObjectBeforeCollectCallback; - } - - RecyclerHeapObjectInfo dummyObjectInfo; - if (!recycler->FindHeapObject(value, Memory::FindHeapObjectFlags::FindHeapObjectFlags_NoFlags, dummyObjectInfo)) - { - // value is not recyler-allocated - return JsErrorInvalidArgument; - } - - recycler->FindOrCreateWeakReferenceHandle( - reinterpret_cast(value), - reinterpret_cast**>(weakRef)); - return JsNoError; - }); -} - -CHAKRA_API JsGetWeakReferenceValue( - _In_ JsWeakRef weakRef, - _Out_ JsValueRef* value) -{ - VALIDATE_JSREF(weakRef); - PARAM_NOT_NULL(value); - *value = JS_INVALID_REFERENCE; - - return GlobalAPIWrapper_NoRecord([&]() -> JsErrorCode { - Memory::RecyclerWeakReference* recyclerWeakReference = - reinterpret_cast*>(weakRef); - *value = reinterpret_cast(recyclerWeakReference->Get()); - return JsNoError; - }); -} - -CHAKRA_API JsGetAndClearExceptionWithMetadata(_Out_ JsValueRef *metadata) -{ - PARAM_NOT_NULL(metadata); - *metadata = nullptr; - - JsrtContext *currentContext = JsrtContext::GetCurrent(); - - if (currentContext == nullptr) - { - return JsErrorNoCurrentContext; - } - - Js::ScriptContext *scriptContext = currentContext->GetScriptContext(); - Assert(scriptContext != nullptr); - - if (scriptContext->GetRecycler() && scriptContext->GetRecycler()->IsHeapEnumInProgress()) - { - return JsErrorHeapEnumInProgress; - } - else if (scriptContext->GetThreadContext()->IsInThreadServiceCallback()) - { - return JsErrorInThreadServiceCallback; - } - - if (scriptContext->GetThreadContext()->IsExecutionDisabled()) - { - return JsErrorInDisabledState; - } - - HRESULT hr = S_OK; - Js::JavascriptExceptionObject *recordedException = nullptr; - - BEGIN_TRANSLATE_OOM_TO_HRESULT - if (scriptContext->HasRecordedException()) - { - recordedException = scriptContext->GetAndClearRecordedException(); - } - END_TRANSLATE_OOM_TO_HRESULT(hr) - - if (hr == E_OUTOFMEMORY) - { - recordedException = scriptContext->GetThreadContext()->GetRecordedException(); - } - if (recordedException == nullptr) - { - return JsErrorInvalidArgument; - } - - Js::Var exception = recordedException->GetThrownObject(nullptr); - - if (exception == nullptr) - { - // TODO: How does this early bailout impact TTD? - return JsErrorInvalidArgument; - } - - return ContextAPIWrapper([&](Js::ScriptContext* scriptContext, TTDRecorder& _actionEntryPopper) -> JsErrorCode { - Js::Var exceptionMetadata = Js::JavascriptExceptionMetadata::CreateMetadataVar(scriptContext); - Js::JavascriptOperators::OP_SetProperty(exceptionMetadata, Js::PropertyIds::exception, exception, scriptContext); - - Js::FunctionBody *functionBody = recordedException->GetFunctionBody(); - if (functionBody == nullptr) - { - // This is probably a parse error. We can get the error location metadata from the thrown object. - Js::JavascriptExceptionMetadata::PopulateMetadataFromCompileException(exceptionMetadata, exception, scriptContext); - } - else - { - if (!Js::JavascriptExceptionMetadata::PopulateMetadataFromException(exceptionMetadata, recordedException, scriptContext)) - { - return JsErrorInvalidArgument; - } - } - - *metadata = exceptionMetadata; - -#if ENABLE_TTD - if (hr != E_OUTOFMEMORY) - { - PERFORM_JSRT_TTD_RECORD_ACTION(scriptContext, RecordJsRTGetAndClearExceptionWithMetadata); - PERFORM_JSRT_TTD_RECORD_ACTION_RESULT(scriptContext, metadata); - } -#endif - - - return JsNoError; - }); -} CHAKRA_API JsCopyStringOneByte( _In_ JsValueRef value, @@ -5445,96 +5242,6 @@ CHAKRA_API JsCopyStringOneByte( }); } -CHAKRA_API JsGetDataViewInfo( - _In_ JsValueRef dataView, - _Out_opt_ JsValueRef *arrayBuffer, - _Out_opt_ unsigned int *byteOffset, - _Out_opt_ unsigned int *byteLength) -{ - VALIDATE_JSREF(dataView); - - BEGIN_JSRT_NO_EXCEPTION - { - if (!Js::DataView::Is(dataView)) - { - RETURN_NO_EXCEPTION(JsErrorInvalidArgument); - } - - Js::DataView* dv = Js::DataView::FromVar(dataView); - if (arrayBuffer != nullptr) { - *arrayBuffer = dv->GetArrayBuffer(); - } - - if (byteOffset != nullptr) { - *byteOffset = dv->GetByteOffset(); - } - - if (byteLength != nullptr) { - *byteLength = dv->GetLength(); - } - } - -#if ENABLE_TTD - Js::ScriptContext* scriptContext = Js::RecyclableObject::FromVar(dataView)->GetScriptContext(); - if(PERFORM_JSRT_TTD_RECORD_ACTION_CHECK(scriptContext) && arrayBuffer != nullptr) - { - scriptContext->GetThreadContext()->TTDLog->RecordJsRTGetDataViewInfo(dataView, *arrayBuffer); - } -#endif - - END_JSRT_NO_EXCEPTION -} - -CHAKRA_API JsSetHostPromiseRejectionTracker(_In_ JsHostPromiseRejectionTrackerCallback promiseRejectionTrackerCallback, _In_opt_ void *callbackState) -{ - return ContextAPINoScriptWrapper_NoRecord([&](Js::ScriptContext *scriptContext) -> JsErrorCode { - scriptContext->GetLibrary()->SetNativeHostPromiseRejectionTrackerCallback((Js::JavascriptLibrary::HostPromiseRejectionTrackerCallback) promiseRejectionTrackerCallback, callbackState); - return JsNoError; - }, - /*allowInObjectBeforeCollectCallback*/true); -} - -CHAKRA_API JsGetProxyProperties (_In_ JsValueRef object, _Out_ bool* isProxy, _Out_opt_ JsValueRef* target, _Out_opt_ JsValueRef* handler) -{ - return ContextAPINoScriptWrapper_NoRecord([&](Js::ScriptContext * scriptContext) -> JsErrorCode { - VALIDATE_INCOMING_REFERENCE(object, scriptContext); - PARAM_NOT_NULL(isProxy); - - if (target != nullptr) - { - *target = JS_INVALID_REFERENCE; - } - - if (handler != nullptr) - { - *handler = JS_INVALID_REFERENCE; - } - - *isProxy = Js::JavascriptProxy::Is(object); - - if (!*isProxy) - { - return JsNoError; - } - - Js::JavascriptProxy* proxy = Js::JavascriptProxy::UnsafeFromVar(object); - bool revoked = proxy->IsRevoked(); - - if (target != nullptr && !revoked) - { - *target = static_cast(proxy->GetTarget()); - } - - if (handler != nullptr && !revoked) - { - *handler = static_cast(proxy->GetHandler()); - } - - return JsNoError; - }, - /*allowInObjectBeforeCollectCallback*/true); -} - CHAKRA_API JsSerializeParserStateCore( _In_z_ const byte* script, _In_ size_t cb, @@ -5664,7 +5371,6 @@ CHAKRA_API JsSerializeParserState( return errorCode; } - static bool CHAKRA_CALLBACK DummyScriptLoadSourceCallbackForRunScriptWithParserState( JsSourceContext sourceContext, _Out_ JsValueRef *value, @@ -5675,18 +5381,24 @@ static bool CHAKRA_CALLBACK DummyScriptLoadSourceCallbackForRunScriptWithParserS return true; } -CHAKRA_API JsRunScriptWithParserState( +CHAKRA_API RunScriptWithParserStateCore( + _In_ DWORD dwBgParseCookie, _In_ JsValueRef script, _In_ JsSourceContext sourceContext, - _In_ JsValueRef sourceUrl, + _In_ WCHAR *url, _In_ JsParseScriptAttributes parseAttributes, _In_ JsValueRef parserState, - _Out_ JsValueRef *result) + _In_ bool parseOnly, + _Out_ JsValueRef *result +) { PARAM_NOT_NULL(script); - PARAM_NOT_NULL(parserState); - const WCHAR *url = nullptr; + if (dwBgParseCookie == 0) + { + PARAM_NOT_NULL(parserState); + } + uint sourceIndex = 0; JsErrorCode errorCode = ContextAPINoScriptWrapper_NoRecord([&](Js::ScriptContext *scriptContext) -> JsErrorCode { @@ -5695,16 +5407,6 @@ CHAKRA_API JsRunScriptWithParserState( LoadScriptFlag loadScriptFlag; JsErrorCode errorCode = GetScriptBufferDetails(script, parseAttributes, &loadScriptFlag, &cb, &bytes); - - if (sourceUrl && Js::JavascriptString::Is(sourceUrl)) - { - url = ((Js::JavascriptString*)(sourceUrl))->GetSz(); - } - else - { - return JsErrorInvalidArgument; - } - if (errorCode != JsNoError) { return errorCode; @@ -5761,19 +5463,94 @@ CHAKRA_API JsRunScriptWithParserState( return errorCode; } - if (!Js::ExternalArrayBuffer::Is(parserState)) + Js::ArrayBuffer* arrayBuffer = nullptr; + byte* buffer = nullptr; + if (dwBgParseCookie == 0) { - return JsErrorInvalidArgument; + if (!Js::VarIs(parserState)) + { + return JsErrorInvalidArgument; + } + + arrayBuffer = Js::VarTo(parserState); + buffer = arrayBuffer->GetBuffer(); } - Js::ArrayBuffer* arrayBuffer = Js::ArrayBuffer::FromVar(parserState); - byte* buffer = arrayBuffer->GetBuffer(); JsSerializedLoadScriptCallback dummy = DummyScriptLoadSourceCallbackForRunScriptWithParserState; return RunSerializedScriptCore( dummy, DummyScriptUnloadCallback, sourceContext, // use the same user provided sourceContext as scriptLoadSourceContext - buffer, arrayBuffer, sourceContext, url, false, true, result, sourceIndex); + buffer, arrayBuffer, sourceContext, url, dwBgParseCookie, parseOnly, true, result, sourceIndex); +} + +CHAKRA_API JsRunScriptWithParserState( + _In_ JsValueRef script, + _In_ JsSourceContext sourceContext, + _In_ JsValueRef sourceUrl, + _In_ JsParseScriptAttributes parseAttributes, + _In_ JsValueRef parserState, + _Out_ JsValueRef *result) +{ + WCHAR *url = nullptr; + if (sourceUrl && Js::VarIs(sourceUrl)) + { + url = const_cast(((Js::JavascriptString*)(sourceUrl))->GetSz()); + return RunScriptWithParserStateCore(0, script, sourceContext, url, parseAttributes, parserState, false, result); + } + else + { + return JsErrorInvalidArgument; + } } -#endif // _CHAKRACOREBUILD +CHAKRA_API JsDeserializeParserState( + _In_ JsValueRef script, + _In_ JsSourceContext sourceContext, + _In_ JsValueRef sourceUrl, + _In_ JsParseScriptAttributes parseAttributes, + _In_ JsValueRef parserState, + _Out_ JsValueRef * result) +{ + WCHAR *url = nullptr; + if (sourceUrl && Js::VarIs(sourceUrl)) + { + url = const_cast(((Js::JavascriptString*)(sourceUrl))->GetSz()); + return RunScriptWithParserStateCore(0, script, sourceContext, url, parseAttributes, parserState, true, result); + } + else + { + return JsErrorInvalidArgument; + } +} + +CHAKRA_API +JsExecuteBackgroundParse_Experimental( + _In_ DWORD dwBgParseCookie, + _In_ JsValueRef script, + _In_ JsSourceContext sourceContext, + _In_ WCHAR *url, + _In_ JsParseScriptAttributes parseAttributes, + _In_ JsValueRef parserState, + _Out_ JsValueRef *result) +{ + HRESULT hr = BGParseManager::GetBGParseManager()->GetInputFromCookie(dwBgParseCookie, nullptr, nullptr, &url); + if (hr == S_OK) + { + return RunScriptWithParserStateCore( + dwBgParseCookie, + script, + sourceContext, + url, + parseAttributes, + parserState, + false, + result + ); + } + else + { + return JsErrorFatal; + } +} +#endif diff --git a/lib/Jsrt/JsrtCommonExports.inc b/lib/Jsrt/JsrtCommonExports.inc index 610d026aa7c..f939f6eb2ab 100644 --- a/lib/Jsrt/JsrtCommonExports.inc +++ b/lib/Jsrt/JsrtCommonExports.inc @@ -104,30 +104,75 @@ JsIdle JsSetPromiseContinuationCallback #ifndef NTBUILD - JsCreateString - JsCreateStringUtf16 + JsAllocRawData + JsCloneObject + JsConnectJITProcess + JsCopyPropertyId JsCopyString + JsCopyStringOneByte JsCopyStringUtf16 - JsParse - JsRun - JsSerialize - JsParseSerialized - JsRunSerialized - JsCreatePropertyId - JsCopyPropertyId + JsCreateCustomExternalObject + JsCreateExternalObjectWithPrototype JsCreatePromise + JsCreateTracedExternalObject + JsCreatePropertyId + JsCreatePropertyString + JsCreateString + JsCreateStringUtf16 JsCreateWeakReference - JsGetWeakReferenceValue + JsDetachArrayBuffer + JsGetArrayBufferExtraInfo + JsEnableOOPJIT + JsExternalizeArrayBuffer JsGetAndClearExceptionWithMetadata - JsHasOwnProperty - JsCopyStringOneByte + JsGetArrayBufferFreeFunction + JsGetArrayEntriesFunction + JsGetArrayForEachFunction + JsGetArrayKeysFunction + JsGetArrayValuesFunction JsGetDataViewInfo - JsCreateExternalObjectWithPrototype + JsGetErrorPrototype + JsGetIteratorPrototype + JsGetPropertyIdSymbolIterator + JsGetWeakReferenceValue + JsGetEmbedderData + JsSetEmbedderData + JsHasOwnProperty + JsHasOwnItem + JsIsCallable + JsIsConstructor + JsObjectDefineProperty + JsObjectDefinePropertyFull + JsObjectDeleteProperty + JsObjectGetOwnPropertyDescriptor JsObjectGetProperty + JsObjectHasOwnProperty JsObjectHasProperty JsObjectSetProperty - JsObjectDeleteProperty - JsObjectHasOwnProperty - JsObjectGetOwnPropertyDescriptor - JsObjectDefineProperty + JsParse + JsParseSerialized + JsPrivateDeleteProperty + JsPrivateGetProperty + JsPrivateHasProperty + JsPrivateSetProperty + JsRun + JsRunSerialized + JsSerialize + JsSetArrayBufferExtraInfo + JsSetRuntimeBeforeSweepCallback + JsSetRuntimeDomWrapperTracingCallbacks + JsTraceExternalReference + JsVarDeserializer + JsVarDeserializerFree + JsVarDeserializerReadBytes + JsVarDeserializerReadRawBytes + JsVarDeserializerReadValue + JsVarDeserializerSetTransferableVars + JsVarSerializer + JsVarSerializerDetachArrayBuffer + JsVarSerializerFree + JsVarSerializerReleaseData + JsVarSerializerSetTransferableVars + JsVarSerializerWriteRawBytes + JsVarSerializerWriteValue #endif diff --git a/lib/Jsrt/JsrtContext.h b/lib/Jsrt/JsrtContext.h index 986a370325c..3519b6c8ec0 100644 --- a/lib/Jsrt/JsrtContext.h +++ b/lib/Jsrt/JsrtContext.h @@ -42,3 +42,4 @@ class JsrtContext : public FinalizableObject Field(TaggedPointer) previous; Field(TaggedPointer) next; }; + diff --git a/lib/Jsrt/JsrtDebugEventObject.cpp b/lib/Jsrt/JsrtDebugEventObject.cpp index 27235bfdb82..4b3dd555e42 100644 --- a/lib/Jsrt/JsrtDebugEventObject.cpp +++ b/lib/Jsrt/JsrtDebugEventObject.cpp @@ -124,4 +124,4 @@ JsrtDebugDocumentManager::BreakpointDebugDocumentDictionary * JsrtDebugDocumentM } return breakpointDebugDocumentDictionary; } -#endif \ No newline at end of file +#endif diff --git a/lib/Jsrt/JsrtDebugManager.cpp b/lib/Jsrt/JsrtDebugManager.cpp index 70dee959e9f..bef8288bc83 100644 --- a/lib/Jsrt/JsrtDebugManager.cpp +++ b/lib/Jsrt/JsrtDebugManager.cpp @@ -369,10 +369,8 @@ bool JsrtDebugManager::EnableAsyncBreak(Js::ScriptContext* scriptContext) if (!probeContainer->IsAsyncActivate()) { probeContainer->AsyncActivate(this); - if (Js::Configuration::Global.EnableJitInDebugMode()) - { - scriptContext->GetThreadContext()->GetDebugManager()->GetDebuggingFlags()->SetForceInterpreter(true); - } + + scriptContext->GetThreadContext()->GetDebugManager()->GetDebuggingFlags()->SetForceInterpreter(true); return true; } return false; @@ -453,10 +451,7 @@ void JsrtDebugManager::CallDebugEventCallbackForBreak(JsDiagDebugEvent debugEven tempScriptContext->GetDebugContext()->GetProbeContainer()->AsyncDeactivate(); } - if (Js::Configuration::Global.EnableJitInDebugMode()) - { - scriptContext->GetThreadContext()->GetDebugManager()->GetDebuggingFlags()->SetForceInterpreter(false); - } + scriptContext->GetThreadContext()->GetDebugManager()->GetDebuggingFlags()->SetForceInterpreter(false); } Js::DynamicObject* JsrtDebugManager::GetScript(Js::Utf8SourceInfo* utf8SourceInfo) @@ -763,4 +758,4 @@ JsDiagDebugEvent JsrtDebugManager::GetDebugEventFromStopType(Js::StopType stopTy return JsDiagDebugEventBreakpoint; } -#endif \ No newline at end of file +#endif diff --git a/lib/Jsrt/JsrtDebugUtils.cpp b/lib/Jsrt/JsrtDebugUtils.cpp index bf0b4824825..d2a296091b9 100644 --- a/lib/Jsrt/JsrtDebugUtils.cpp +++ b/lib/Jsrt/JsrtDebugUtils.cpp @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- @@ -167,7 +168,7 @@ void JsrtDebugUtils::AddPropertyType(Js::DynamicObject * object, Js::IDiagObject case Js::TypeIds_Boolean: JsrtDebugUtils::AddPropertyToObject(object, JsrtDebugPropertyId::type, scriptContext->GetLibrary()->GetBooleanTypeDisplayString(), scriptContext); - JsrtDebugUtils::AddPropertyToObject(object, JsrtDebugPropertyId::value, Js::JavascriptBoolean::FromVar(varValue)->GetValue() == TRUE ? true : false, scriptContext); + JsrtDebugUtils::AddPropertyToObject(object, JsrtDebugPropertyId::value, Js::VarTo(varValue)->GetValue() == TRUE ? true : false, scriptContext); break; case Js::TypeIds_Integer: @@ -192,17 +193,17 @@ void JsrtDebugUtils::AddPropertyType(Js::DynamicObject * object, Js::IDiagObject } case Js::TypeIds_Int64Number: JsrtDebugUtils::AddPropertyToObject(object, JsrtDebugPropertyId::type, scriptContext->GetLibrary()->GetNumberTypeDisplayString(), scriptContext); - JsrtDebugUtils::AddPropertyToObject(object, JsrtDebugPropertyId::value, (double)Js::JavascriptInt64Number::FromVar(varValue)->GetValue(), scriptContext); + JsrtDebugUtils::AddPropertyToObject(object, JsrtDebugPropertyId::value, (double)Js::VarTo(varValue)->GetValue(), scriptContext); break; case Js::TypeIds_UInt64Number: JsrtDebugUtils::AddPropertyToObject(object, JsrtDebugPropertyId::type, scriptContext->GetLibrary()->GetNumberTypeDisplayString(), scriptContext); - JsrtDebugUtils::AddPropertyToObject(object, JsrtDebugPropertyId::value, (double)Js::JavascriptUInt64Number::FromVar(varValue)->GetValue(), scriptContext); + JsrtDebugUtils::AddPropertyToObject(object, JsrtDebugPropertyId::value, (double)Js::VarTo(varValue)->GetValue(), scriptContext); break; case Js::TypeIds_String: JsrtDebugUtils::AddPropertyToObject(object, JsrtDebugPropertyId::type, scriptContext->GetLibrary()->GetStringTypeDisplayString(), scriptContext); - JsrtDebugUtils::AddPropertyToObject(object, JsrtDebugPropertyId::value, Js::JavascriptString::FromVar(varValue), scriptContext); + JsrtDebugUtils::AddPropertyToObject(object, JsrtDebugPropertyId::value, Js::VarTo(varValue), scriptContext); break; case Js::TypeIds_Symbol: @@ -215,12 +216,16 @@ void JsrtDebugUtils::AddPropertyType(Js::DynamicObject * object, Js::IDiagObject addDisplay = true; break; + case Js::TypeIds_ModuleNamespace: + JsrtDebugUtils::AddPropertyToObject(object, JsrtDebugPropertyId::type, scriptContext->GetLibrary()->GetModuleTypeDisplayString(), scriptContext); + addDisplay = true; + break; + case Js::TypeIds_Enumerator: case Js::TypeIds_HostDispatch: case Js::TypeIds_UnscopablesWrapperObject: case Js::TypeIds_UndeclBlockVar: case Js::TypeIds_EngineInterfaceObject: - case Js::TypeIds_WinRTDate: AssertMsg(false, "Not valid types"); break; @@ -242,7 +247,6 @@ void JsrtDebugUtils::AddPropertyType(Js::DynamicObject * object, Js::IDiagObject case Js::TypeIds_MapIterator: case Js::TypeIds_SetIterator: case Js::TypeIds_StringIterator: - case Js::TypeIds_VariantDate: case Js::TypeIds_Object: case Js::TypeIds_Array: case Js::TypeIds_Date: @@ -271,6 +275,8 @@ void JsrtDebugUtils::AddPropertyType(Js::DynamicObject * object, Js::IDiagObject case Js::TypeIds_WeakSet: case Js::TypeIds_SymbolObject: case Js::TypeIds_Generator: + case Js::TypeIds_AsyncGenerator: + case Js::TypeIds_AsyncFromSyncIterator: case Js::TypeIds_Promise: case Js::TypeIds_GlobalObject: case Js::TypeIds_SpreadArgument: @@ -428,9 +434,9 @@ const char16 * JsrtDebugUtils::GetClassName(Js::TypeId typeId) case Js::TypeIds_MapIterator: case Js::TypeIds_SetIterator: case Js::TypeIds_StringIterator: - return _u("Object"); + return _u("Object"); - case Js::TypeIds_Proxy: return _u("Proxy"); + case Js::TypeIds_Proxy: return _u("Proxy"); case Js::TypeIds_Array: case Js::TypeIds_NativeIntArray: #if ENABLE_COPYONACCESS_ARRAY @@ -440,45 +446,46 @@ const char16 * JsrtDebugUtils::GetClassName(Js::TypeId typeId) case Js::TypeIds_ES5Array: case Js::TypeIds_CharArray: case Js::TypeIds_BoolArray: - return _u("Array"); + return _u("Array"); case Js::TypeIds_Date: - case Js::TypeIds_VariantDate: - return _u("Date"); - - case Js::TypeIds_RegEx: return _u("RegExp"); - case Js::TypeIds_Error: return _u("Error"); - case Js::TypeIds_BooleanObject: return _u("Boolean"); - case Js::TypeIds_NumberObject: return _u("Number"); - case Js::TypeIds_StringObject: return _u("String"); - case Js::TypeIds_Arguments: return _u("Object"); - case Js::TypeIds_ArrayBuffer: return _u("ArrayBuffer"); - case Js::TypeIds_Int8Array: return _u("Int8Array"); - case Js::TypeIds_Uint8Array: return _u("Uint8Array"); - case Js::TypeIds_Uint8ClampedArray: return _u("Uint8ClampedArray"); - case Js::TypeIds_Int16Array: return _u("Int16Array"); - case Js::TypeIds_Uint16Array: return _u("Uint16Array"); - case Js::TypeIds_Int32Array: return _u("Int32Array"); - case Js::TypeIds_Uint32Array: return _u("Uint32Array"); - case Js::TypeIds_Float32Array: return _u("Float32Array"); - case Js::TypeIds_Float64Array: return _u("Float64Array"); - case Js::TypeIds_Int64Array: return _u("Int64Array"); - case Js::TypeIds_Uint64Array: return _u("Uint64Array"); - case Js::TypeIds_DataView: return _u("DataView"); - case Js::TypeIds_Map: return _u("Map"); - case Js::TypeIds_Set: return _u("Set"); - case Js::TypeIds_WeakMap: return _u("WeakMap"); - case Js::TypeIds_WeakSet: return _u("WeakSet"); - case Js::TypeIds_SymbolObject: return _u("Symbol"); - case Js::TypeIds_Generator: return _u("Generator"); - case Js::TypeIds_Promise: return _u("Promise"); - case Js::TypeIds_GlobalObject: return _u("Object"); - case Js::TypeIds_SpreadArgument: return _u("Spread"); + return _u("Date"); + + case Js::TypeIds_RegEx: return _u("RegExp"); + case Js::TypeIds_Error: return _u("Error"); + case Js::TypeIds_BooleanObject: return _u("Boolean"); + case Js::TypeIds_NumberObject: return _u("Number"); + case Js::TypeIds_StringObject: return _u("String"); + case Js::TypeIds_Arguments: return _u("Object"); + case Js::TypeIds_ArrayBuffer: return _u("ArrayBuffer"); + case Js::TypeIds_Int8Array: return _u("Int8Array"); + case Js::TypeIds_Uint8Array: return _u("Uint8Array"); + case Js::TypeIds_Uint8ClampedArray: return _u("Uint8ClampedArray"); + case Js::TypeIds_Int16Array: return _u("Int16Array"); + case Js::TypeIds_Uint16Array: return _u("Uint16Array"); + case Js::TypeIds_Int32Array: return _u("Int32Array"); + case Js::TypeIds_Uint32Array: return _u("Uint32Array"); + case Js::TypeIds_Float32Array: return _u("Float32Array"); + case Js::TypeIds_Float64Array: return _u("Float64Array"); + case Js::TypeIds_Int64Array: return _u("Int64Array"); + case Js::TypeIds_Uint64Array: return _u("Uint64Array"); + case Js::TypeIds_DataView: return _u("DataView"); + case Js::TypeIds_Map: return _u("Map"); + case Js::TypeIds_Set: return _u("Set"); + case Js::TypeIds_WeakMap: return _u("WeakMap"); + case Js::TypeIds_WeakSet: return _u("WeakSet"); + case Js::TypeIds_SymbolObject: return _u("Symbol"); + case Js::TypeIds_Generator: return _u("Generator"); + case Js::TypeIds_AsyncGenerator: return _u("AsyncGenerator"); + case Js::TypeIds_AsyncFromSyncIterator: return _u("AsyncFromSyncIterator"); + case Js::TypeIds_Promise: return _u("Promise"); + case Js::TypeIds_GlobalObject: return _u("Object"); + case Js::TypeIds_SpreadArgument: return _u("Spread"); #ifdef ENABLE_WASM - case Js::TypeIds_WebAssemblyModule: return _u("WebAssembly.Module"); - case Js::TypeIds_WebAssemblyInstance:return _u("WebAssembly.Instance"); - case Js::TypeIds_WebAssemblyMemory: return _u("WebAssembly.Memory"); - case Js::TypeIds_WebAssemblyTable: return _u("WebAssembly.Table"); + case Js::TypeIds_WebAssemblyModule: return _u("WebAssembly.Module"); + case Js::TypeIds_WebAssemblyInstance: return _u("WebAssembly.Instance"); + case Js::TypeIds_WebAssemblyMemory: return _u("WebAssembly.Memory"); + case Js::TypeIds_WebAssemblyTable: return _u("WebAssembly.Table"); #endif default: Assert(false); @@ -497,4 +504,4 @@ const char16 * JsrtDebugUtils::GetDebugPropertyName(JsrtDebugPropertyId property Assert(false); return _u(""); } -#endif \ No newline at end of file +#endif diff --git a/lib/Jsrt/JsrtDiag.cpp b/lib/Jsrt/JsrtDiag.cpp index a1f9ef649c2..2c4daebfb39 100644 --- a/lib/Jsrt/JsrtDiag.cpp +++ b/lib/Jsrt/JsrtDiag.cpp @@ -479,7 +479,7 @@ CHAKRA_API JsDiagSetStepType( ThreadContext* threadContext = runtime->GetThreadContext(); if(!threadContext->IsRuntimeInTTDMode()) { - //Don't want to fail hard when user accidentally clicks this so pring message and step forward + //Don't want to fail hard when user accidentally clicks this so pring message and step forward fprintf(stderr, "Must be in replay mode to use reverse-step - launch with \"--replay-debug\" flag in Node."); jsrtDebugManager->SetResumeType(BREAKRESUMEACTION_STEP_OVER); } @@ -500,7 +500,7 @@ CHAKRA_API JsDiagSetStepType( ThreadContext* threadContext = runtime->GetThreadContext(); if(!threadContext->IsRuntimeInTTDMode()) { - //Don't want to fail hard when user accidentally clicks this so pring message and step forward + //Don't want to fail hard when user accidentally clicks this so pring message and step forward fprintf(stderr, "Must be in replay mode to use reverse-continue - launch with \"--replay-debug\" flag in Node."); jsrtDebugManager->SetResumeType(BREAKRESUMEACTION_CONTINUE); } @@ -566,12 +566,12 @@ CHAKRA_API JsDiagGetFunctionPosition( *functionPosition = JS_INVALID_REFERENCE; - if (!Js::RecyclableObject::Is(function) || !Js::ScriptFunction::Is(function)) + if (!Js::VarIs(function) || !Js::VarIs(function)) { return JsErrorInvalidArgument; } - Js::ScriptFunction* jsFunction = Js::ScriptFunction::FromVar(function); + Js::ScriptFunction* jsFunction = Js::VarTo(function); BOOL fParsed = jsFunction->GetParseableFunctionInfo()->IsFunctionParsed(); if (!fParsed) @@ -788,13 +788,13 @@ CHAKRA_API JsDiagEvaluate( PARAM_NOT_NULL(expressionVal); PARAM_NOT_NULL(evalResult); - bool isArrayBuffer = Js::ArrayBuffer::Is(expressionVal), + bool isArrayBuffer = Js::VarIs(expressionVal), isString = false; bool isUtf8 = !(parseAttributes & JsParseScriptAttributeArrayBufferIsUtf16Encoded); if (!isArrayBuffer) { - isString = Js::JavascriptString::Is(expressionVal); + isString = Js::VarIs(expressionVal); if (!isString) { return JsErrorInvalidArgument; @@ -802,8 +802,8 @@ CHAKRA_API JsDiagEvaluate( } const size_t len = isArrayBuffer ? - Js::ArrayBuffer::FromVar(expressionVal)->GetByteLength() : - Js::JavascriptString::FromVar(expressionVal)->GetLength(); + Js::VarTo(expressionVal)->GetByteLength() : + Js::VarTo(expressionVal)->GetLength(); if (len > INT_MAX) { @@ -815,7 +815,7 @@ CHAKRA_API JsDiagEvaluate( if (isArrayBuffer && isUtf8) { wide_expression.Initialize( - (const char*)Js::ArrayBuffer::FromVar(expressionVal)->GetBuffer(), len); + (const char*)Js::VarTo(expressionVal)->GetBuffer(), len); if (!wide_expression) { return JsErrorOutOfMemory; @@ -825,9 +825,9 @@ CHAKRA_API JsDiagEvaluate( else { expression = !isArrayBuffer ? - Js::JavascriptString::FromVar(expressionVal)->GetSz() // String + Js::VarTo(expressionVal)->GetSz() // String : - (const WCHAR*)Js::ArrayBuffer::FromVar(expressionVal)->GetBuffer(); // ArrayBuffer; + (const WCHAR*)Js::VarTo(expressionVal)->GetBuffer(); // ArrayBuffer; } *evalResult = JS_INVALID_REFERENCE; diff --git a/lib/Jsrt/JsrtExternalObject.cpp b/lib/Jsrt/JsrtExternalObject.cpp index 0e8e60650f6..eb41f10830c 100644 --- a/lib/Jsrt/JsrtExternalObject.cpp +++ b/lib/Jsrt/JsrtExternalObject.cpp @@ -7,80 +7,202 @@ #include "JsrtExternalObject.h" #include "Types/PathTypeHandler.h" -JsrtExternalType::JsrtExternalType(Js::ScriptContext* scriptContext, JsFinalizeCallback finalizeCallback) +#ifdef _CHAKRACOREBUILD +JsrtExternalType::JsrtExternalType(Js::ScriptContext* scriptContext, JsTraceCallback traceCallback, JsFinalizeCallback finalizeCallback, Js::RecyclableObject * prototype) : Js::DynamicType( scriptContext, Js::TypeIds_Object, - scriptContext->GetLibrary()->GetObjectPrototype(), + prototype, nullptr, Js::PathTypeHandlerNoAttr::New(scriptContext, scriptContext->GetLibrary()->GetRootPath(), 0, 0, 0, true, true), true, true) - , jsFinalizeCallback(finalizeCallback) + , jsTraceCallback(traceCallback) + , jsFinalizeCallback(finalizeCallback) +{ + this->flags |= TypeFlagMask_JsrtExternal; +} +#endif +JsrtExternalType::JsrtExternalType(Js::ScriptContext* scriptContext, JsFinalizeCallback finalizeCallback, Js::RecyclableObject * prototype) + : Js::DynamicType( + scriptContext, + Js::TypeIds_Object, + prototype, + nullptr, + Js::PathTypeHandlerNoAttr::New(scriptContext, scriptContext->GetLibrary()->GetRootPath(), 0, 0, 0, true, true), + true, + true) +#ifdef _CHAKRACOREBUILD + , jsTraceCallback(nullptr) +#endif + , jsFinalizeCallback(finalizeCallback) { this->flags |= TypeFlagMask_JsrtExternal; } -JsrtExternalObject::JsrtExternalObject(JsrtExternalType * type, void *data) : - slot(data), - Js::DynamicObject(type, false/* initSlots*/) +JsrtExternalObject::JsrtExternalObject(JsrtExternalType * type, void *data, uint inlineSlotSize) : + Js::DynamicObject(type, true /* initSlots*/) { + if (inlineSlotSize != 0) + { + this->slotType = SlotType::Inline; + this->u.inlineSlotSize = inlineSlotSize; + if (data) + { + memcpy_s(this->GetInlineSlots(), inlineSlotSize, data, inlineSlotSize); + } + } + else + { + this->slotType = SlotType::External; + this->u.slot = data; + } } -/* static */ -JsrtExternalObject* JsrtExternalObject::Create(void *data, JsFinalizeCallback finalizeCallback, Js::RecyclableObject * prototype, Js::ScriptContext *scriptContext) +JsrtExternalObject::JsrtExternalObject(JsrtExternalObject* instance, bool deepCopy) : + Js::DynamicObject(instance, deepCopy) { - Js::DynamicType * dynamicType = scriptContext->GetLibrary()->GetCachedJsrtExternalType(reinterpret_cast(finalizeCallback)); + if (instance->GetInlineSlotSize() != 0) + { + this->slotType = SlotType::Inline; + this->u.inlineSlotSize = instance->GetInlineSlotSize(); + if (instance->GetInlineSlots()) + { + memcpy_s(this->GetInlineSlots(), this->GetInlineSlotSize(), instance->GetInlineSlots(), instance->GetInlineSlotSize()); + } + } + else + { + this->slotType = SlotType::External; + this->u.slot = instance->GetInlineSlots(); + } +} - if (dynamicType == nullptr) +#ifdef _CHAKRACOREBUILD +/* static */ +JsrtExternalObject* JsrtExternalObject::Create(void *data, uint inlineSlotSize, JsTraceCallback traceCallback, JsFinalizeCallback finalizeCallback, Js::RecyclableObject * prototype, Js::ScriptContext *scriptContext, JsrtExternalType * type) +{ + if (prototype == nullptr) { - dynamicType = RecyclerNew(scriptContext->GetRecycler(), JsrtExternalType, scriptContext, finalizeCallback); - scriptContext->GetLibrary()->CacheJsrtExternalType(reinterpret_cast(finalizeCallback), dynamicType); + prototype = scriptContext->GetLibrary()->GetObjectPrototype(); } + if (type == nullptr) + { + type = scriptContext->GetLibrary()->GetCachedJsrtExternalType(reinterpret_cast(traceCallback), reinterpret_cast(finalizeCallback), reinterpret_cast(prototype)); - Assert(dynamicType->IsJsrtExternal()); - Assert(dynamicType->GetIsShared()); + if (type == nullptr) + { + type = RecyclerNew(scriptContext->GetRecycler(), JsrtExternalType, scriptContext, traceCallback, finalizeCallback, prototype); + scriptContext->GetLibrary()->CacheJsrtExternalType(reinterpret_cast(traceCallback), reinterpret_cast(finalizeCallback), reinterpret_cast(prototype), type); + } + } - JsrtExternalObject * externalObject = RecyclerNewFinalized(scriptContext->GetRecycler(), JsrtExternalObject, static_cast(dynamicType), data); + Assert(type->IsJsrtExternal()); - if (prototype != nullptr) + JsrtExternalObject * externalObject; + if (traceCallback != nullptr) + { + externalObject = RecyclerNewTrackedPlus(scriptContext->GetRecycler(), inlineSlotSize, JsrtExternalObject, static_cast(type), data, inlineSlotSize); + } + else if (finalizeCallback != nullptr) { - externalObject->SetPrototype(prototype); + externalObject = RecyclerNewFinalizedPlus(scriptContext->GetRecycler(), inlineSlotSize, JsrtExternalObject, static_cast(type), data, inlineSlotSize); + } + else + { + externalObject = RecyclerNewPlus(scriptContext->GetRecycler(), inlineSlotSize, JsrtExternalObject, static_cast(type), data, inlineSlotSize); } return externalObject; } - -bool JsrtExternalObject::Is(Js::Var value) +#endif +/* static */ +JsrtExternalObject* JsrtExternalObject::Create(void *data, uint inlineSlotSize, JsFinalizeCallback finalizeCallback, Js::RecyclableObject * prototype, Js::ScriptContext *scriptContext, JsrtExternalType * type) { - if (Js::TaggedNumber::Is(value)) + if (prototype == nullptr) + { + prototype = scriptContext->GetLibrary()->GetObjectPrototype(); + } + if (type == nullptr) { - return false; +#ifdef _CHAKRACOREBUILD + type = scriptContext->GetLibrary()->GetCachedJsrtExternalType(0, reinterpret_cast(finalizeCallback), reinterpret_cast(prototype)); +#else + type = scriptContext->GetLibrary()->GetCachedJsrtExternalType(reinterpret_cast(finalizeCallback), reinterpret_cast(prototype)); +#endif + + if (type == nullptr) + { + type = RecyclerNew(scriptContext->GetRecycler(), JsrtExternalType, scriptContext, finalizeCallback, prototype); +#ifdef _CHAKRACOREBUILD + scriptContext->GetLibrary()->CacheJsrtExternalType(0, reinterpret_cast(finalizeCallback), reinterpret_cast(prototype), type); +#else + scriptContext->GetLibrary()->CacheJsrtExternalType(reinterpret_cast(finalizeCallback), reinterpret_cast(prototype), type); +#endif + } } - return (VirtualTableInfo::HasVirtualTable(value)) || - (VirtualTableInfo>::HasVirtualTable(value)); + Assert(type->IsJsrtExternal()); + + JsrtExternalObject * externalObject; + if (finalizeCallback != nullptr) + { + externalObject = RecyclerNewFinalizedPlus(scriptContext->GetRecycler(), inlineSlotSize, JsrtExternalObject, static_cast(type), data, inlineSlotSize); + } + else + { + externalObject = RecyclerNewPlus(scriptContext->GetRecycler(), inlineSlotSize, JsrtExternalObject, static_cast(type), data, inlineSlotSize); + } + + return externalObject; } -JsrtExternalObject * JsrtExternalObject::FromVar(Js::Var value) +JsrtExternalObject* JsrtExternalObject::Copy(bool deepCopy) { - AssertOrFailFast(Is(value)); - return static_cast(value); + Recycler* recycler = this->GetRecycler(); + JsrtExternalType* type = this->GetExternalType(); + int inlineSlotSize = this->GetInlineSlotSize(); + +#ifdef _CHAKRACOREBUILD + if (type->GetJsTraceCallback() != nullptr) + { + return RecyclerNewTrackedPlus(recycler, inlineSlotSize, JsrtExternalObject, this, deepCopy); + } +#endif + + if (type->GetJsFinalizeCallback() != nullptr) + { + return RecyclerNewFinalizedPlus(recycler, inlineSlotSize, JsrtExternalObject, this, deepCopy); + } + + return RecyclerNewPlus(recycler, inlineSlotSize, JsrtExternalObject, this, deepCopy); } -JsrtExternalObject * JsrtExternalObject::UnsafeFromVar(Js::Var value) +void JsrtExternalObject::Mark(Recycler * recycler) { - Assert(Is(value)); - return static_cast(value); +#ifdef _CHAKRACOREBUILD + recycler->SetNeedExternalWrapperTracing(); + JsTraceCallback traceCallback = this->GetExternalType()->GetJsTraceCallback(); + Assert(nullptr != traceCallback); + JsrtCallbackState scope(nullptr); + traceCallback(this->GetSlotData()); +#else + Assert(UNREACHED); +#endif } void JsrtExternalObject::Finalize(bool isShutdown) { JsFinalizeCallback finalizeCallback = this->GetExternalType()->GetJsFinalizeCallback(); +#ifdef _CHAKRACOREBUILD + Assert(this->GetExternalType()->GetJsTraceCallback() != nullptr || finalizeCallback != nullptr); +#else + Assert(finalizeCallback != nullptr); +#endif if (nullptr != finalizeCallback) { JsrtCallbackState scope(nullptr); - finalizeCallback(this->slot); + finalizeCallback(this->GetSlotData()); } } @@ -90,12 +212,29 @@ void JsrtExternalObject::Dispose(bool isShutdown) void * JsrtExternalObject::GetSlotData() const { - return this->slot; + return this->slotType == SlotType::External + ? unsafe_write_barrier_cast(this->u.slot) + : GetInlineSlots(); } void JsrtExternalObject::SetSlotData(void * data) { - this->slot = data; + this->slotType = SlotType::External; + this->u.slot = data; +} + +int JsrtExternalObject::GetInlineSlotSize() const +{ + return this->slotType == SlotType::External + ? 0 + : this->u.inlineSlotSize; +} + +void * JsrtExternalObject::GetInlineSlots() const +{ + return this->slotType == SlotType::External + ? nullptr + : (void *)((uintptr_t)this + sizeof(JsrtExternalObject)); } Js::DynamicType* JsrtExternalObject::DuplicateType() diff --git a/lib/Jsrt/JsrtExternalObject.h b/lib/Jsrt/JsrtExternalObject.h index 0f648bbb6be..b883664ac4a 100644 --- a/lib/Jsrt/JsrtExternalObject.h +++ b/lib/Jsrt/JsrtExternalObject.h @@ -27,14 +27,28 @@ class JsrtExternalType sealed : public Js::DynamicType { public: - JsrtExternalType(JsrtExternalType *type) : Js::DynamicType(type), jsFinalizeCallback(type->jsFinalizeCallback) {} - JsrtExternalType(Js::ScriptContext* scriptContext, JsFinalizeCallback finalizeCallback); + JsrtExternalType(JsrtExternalType *type) : + Js::DynamicType(type), +#ifdef _CHAKRACOREBUILD + jsTraceCallback(type->jsTraceCallback), +#endif + jsFinalizeCallback(type->jsFinalizeCallback) {} +#ifdef _CHAKRACOREBUILD + JsrtExternalType(Js::ScriptContext* scriptContext, JsTraceCallback traceCallback, JsFinalizeCallback finalizeCallback, Js::RecyclableObject * prototype); +#endif + JsrtExternalType(Js::ScriptContext* scriptContext, JsFinalizeCallback finalizeCallback, Js::RecyclableObject * prototype); //Js::PropertyId GetNameId() const { return ((Js::PropertyRecord *)typeDescription.className)->GetPropertyId(); } +#ifdef _CHAKRACOREBUILD + JsTraceCallback GetJsTraceCallback() const { return this->jsTraceCallback; } +#endif JsFinalizeCallback GetJsFinalizeCallback() const { return this->jsFinalizeCallback; } private: - FieldNoBarrier(JsFinalizeCallback) jsFinalizeCallback; + FieldNoBarrier(JsFinalizeCallback const) jsFinalizeCallback; +#ifdef _CHAKRACOREBUILD + FieldNoBarrier(JsTraceCallback const) jsTraceCallback; +#endif }; AUTO_REGISTER_RECYCLER_OBJECT_DUMPER(JsrtExternalType, &Js::Type::DumpObjectFunction); @@ -45,15 +59,19 @@ class JsrtExternalObject : public Js::DynamicObject DEFINE_MARSHAL_OBJECT_TO_SCRIPT_CONTEXT(JsrtExternalObject); public: - JsrtExternalObject(JsrtExternalType * type, void *data); + JsrtExternalObject(JsrtExternalType * type, void *data, uint inlineSlotSize); + JsrtExternalObject(JsrtExternalObject* instance, bool deepCopy); - static bool Is(Js::Var value); - static JsrtExternalObject * FromVar(Js::Var value); - static JsrtExternalObject * UnsafeFromVar(Js::Var value); - static JsrtExternalObject * Create(void *data, JsFinalizeCallback finalizeCallback, Js::RecyclableObject * prototype, Js::ScriptContext *scriptContext); +#ifdef _CHAKRACOREBUILD + static JsrtExternalObject * Create(void *data, uint inlineSlotSize, JsTraceCallback traceCallback, JsFinalizeCallback finalizeCallback, Js::RecyclableObject * prototype, Js::ScriptContext *scriptContext, JsrtExternalType * type); +#endif + static JsrtExternalObject * Create(void *data, uint inlineSlotSize, JsFinalizeCallback finalizeCallback, Js::RecyclableObject * prototype, Js::ScriptContext *scriptContext, JsrtExternalType * type); + + virtual JsrtExternalObject* Copy(bool deepCopy) override; JsrtExternalType * GetExternalType() const { return (JsrtExternalType *)this->GetType(); } + void Mark(Recycler * recycler) override; void Finalize(bool isShutdown) override; void Dispose(bool isShutdown) override; @@ -63,9 +81,27 @@ class JsrtExternalObject : public Js::DynamicObject void * GetSlotData() const; void SetSlotData(void * data); + int GetInlineSlotSize() const; + void* GetInlineSlots() const; + Field(bool) initialized = true; private: - Field(void *) slot; + enum class SlotType { + Inline, + External + }; + + Field(SlotType) slotType; + union SlotInfo + { + Field(void *) slot; + Field(uint) inlineSlotSize; + SlotInfo() + { + memset(this, 0, sizeof(SlotInfo)); + } + }; + Field(SlotInfo) u; #if ENABLE_TTD public: @@ -74,3 +110,9 @@ class JsrtExternalObject : public Js::DynamicObject #endif }; AUTO_REGISTER_RECYCLER_OBJECT_DUMPER(JsrtExternalObject, &Js::RecyclableObject::DumpObjectFunction); + +template <> inline bool Js::VarIsImpl(Js::RecyclableObject* obj) +{ + return (VirtualTableInfo::HasVirtualTable(obj)) || + (VirtualTableInfo>::HasVirtualTable(obj)); +} diff --git a/lib/Jsrt/JsrtHelper.cpp b/lib/Jsrt/JsrtHelper.cpp index 5f750d34046..12a1db975dc 100644 --- a/lib/Jsrt/JsrtHelper.cpp +++ b/lib/Jsrt/JsrtHelper.cpp @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- @@ -109,7 +110,7 @@ void JsrtCallbackState::ObjectBeforeCallectCallbackWrapper(JsObjectBeforeCollect // setup the cleanup // we do not track the main thread. When it exits do the cleanup below -#ifdef CHAKRA_STATIC_LIBRARY +#if defined(CHAKRA_STATIC_LIBRARY) || !defined(_WIN32) atexit([]() { ThreadBoundThreadContextManager::DestroyContextAndEntryForCurrentThread(); diff --git a/lib/Jsrt/JsrtInternal.h b/lib/Jsrt/JsrtInternal.h index 95de950046a..13c96a00561 100644 --- a/lib/Jsrt/JsrtInternal.h +++ b/lib/Jsrt/JsrtInternal.h @@ -38,7 +38,7 @@ typedef struct {} TTDRecorder; } \ #define MARSHAL_OBJECT(p, scriptContext) \ - Js::RecyclableObject* __obj = Js::RecyclableObject::FromVar(p); \ + Js::RecyclableObject* __obj = Js::VarTo(p); \ if (__obj->GetScriptContext() != scriptContext) \ { \ if(__obj->GetScriptContext()->GetThreadContext() != scriptContext->GetThreadContext()) \ @@ -68,7 +68,7 @@ typedef struct {} TTDRecorder; #define VALIDATE_INCOMING_REFERENCE(p, scriptContext) \ { \ VALIDATE_JSREF(p); \ - if (Js::RecyclableObject::Is(p)) \ + if (Js::VarIs(p)) \ { \ MARSHAL_OBJECT(p, scriptContext) \ } \ @@ -87,7 +87,7 @@ typedef struct {} TTDRecorder; #define VALIDATE_INCOMING_RECYCLABLE(p, scriptContext) \ { \ VALIDATE_JSREF(p); \ - if (!Js::RecyclableObject::Is(p)) \ + if (!Js::VarIs(p)) \ { \ return JsErrorInvalidArgument; \ } \ @@ -107,7 +107,7 @@ typedef struct {} TTDRecorder; #define VALIDATE_INCOMING_FUNCTION(p, scriptContext) \ { \ VALIDATE_JSREF(p); \ - if (!Js::JavascriptFunction::Is(p)) \ + if (!Js::VarIs(p)) \ { \ return JsErrorInvalidArgument; \ } \ diff --git a/lib/Jsrt/JsrtRuntime.cpp b/lib/Jsrt/JsrtRuntime.cpp index a77a497fcbe..d89506f2646 100644 --- a/lib/Jsrt/JsrtRuntime.cpp +++ b/lib/Jsrt/JsrtRuntime.cpp @@ -14,7 +14,11 @@ JsrtRuntime::JsrtRuntime(ThreadContext * threadContext, bool useIdle, bool dispa this->contextList = NULL; this->collectCallback = NULL; this->beforeCollectCallback = NULL; - this->callbackContext = NULL; + this->beforeCollectCallbackContext = NULL; +#ifdef _CHAKRACOREBUILD + this->beforeSweepCallback = NULL; + this->beforeSweepCallbackContext = NULL; +#endif this->allocationPolicyManager = threadContext->GetAllocationPolicyManager(); this->useIdle = useIdle; this->dispatchExceptions = dispatchExceptions; @@ -85,44 +89,98 @@ void JsrtRuntime::CloseContexts() void JsrtRuntime::SetBeforeCollectCallback(JsBeforeCollectCallback beforeCollectCallback, void * callbackContext) { - if (beforeCollectCallback != NULL) + if (beforeCollectCallback != nullptr) { - if (this->collectCallback == NULL) + if (this->collectCallback == nullptr) { this->collectCallback = this->threadContext->AddRecyclerCollectCallBack(RecyclerCollectCallbackStatic, this); } this->beforeCollectCallback = beforeCollectCallback; - this->callbackContext = callbackContext; + this->beforeCollectCallbackContext = callbackContext; } else { - if (this->collectCallback != NULL) + if (this->collectCallback != nullptr +#ifdef _CHAKRACOREBUILD + && this->beforeSweepCallback == nullptr +#endif + ) { this->threadContext->RemoveRecyclerCollectCallBack(this->collectCallback); - this->collectCallback = NULL; + this->collectCallback = nullptr; } - this->beforeCollectCallback = NULL; - this->callbackContext = NULL; + this->beforeCollectCallback = nullptr; + this->beforeCollectCallbackContext = nullptr; } } +#ifdef _CHAKRACOREBUILD +void JsrtRuntime::SetBeforeSweepCallback(JsBeforeSweepCallback afterCollectCallback, void * callbackContext) +{ + if (afterCollectCallback != nullptr) + { + if (this->collectCallback == nullptr) + { + this->collectCallback = this->threadContext->AddRecyclerCollectCallBack(RecyclerCollectCallbackStatic, this); + } + + this->beforeSweepCallback = afterCollectCallback; + this->beforeSweepCallbackContext = callbackContext; + } + else + { + if (this->collectCallback != nullptr && this->beforeCollectCallback == nullptr) + { + this->threadContext->RemoveRecyclerCollectCallBack(this->collectCallback); + this->collectCallback = nullptr; + } + + this->beforeSweepCallback = nullptr; + this->beforeSweepCallbackContext = nullptr; + } +} +#endif + void JsrtRuntime::RecyclerCollectCallbackStatic(void * context, RecyclerCollectCallBackFlags flags) { if (flags & Collect_Begin) { JsrtRuntime * _this = reinterpret_cast(context); + if (_this->beforeCollectCallback == nullptr) + { + return; + } try { JsrtCallbackState scope(reinterpret_cast(_this->GetThreadContext())); - _this->beforeCollectCallback(_this->callbackContext); + _this->beforeCollectCallback(_this->beforeCollectCallbackContext); } catch (...) { AssertMsg(false, "Unexpected non-engine exception."); } } +#ifdef _CHAKRACOREBUILD + else if (flags & Collect_Begin_Sweep) + { + JsrtRuntime * _this = reinterpret_cast(context); + if (_this->beforeSweepCallback == nullptr) + { + return; + } + try + { + JsrtCallbackState scope(reinterpret_cast(_this->GetThreadContext())); + _this->beforeSweepCallback(_this->beforeSweepCallbackContext); + } + catch (...) + { + AssertMsg(false, "Unexpected non-engine exception."); + } + } +#endif } unsigned int JsrtRuntime::Idle() diff --git a/lib/Jsrt/JsrtRuntime.h b/lib/Jsrt/JsrtRuntime.h index 32c5304c7ef..72a5d2a7edf 100644 --- a/lib/Jsrt/JsrtRuntime.h +++ b/lib/Jsrt/JsrtRuntime.h @@ -38,6 +38,9 @@ class JsrtRuntime void CloseContexts(); void SetBeforeCollectCallback(JsBeforeCollectCallback beforeCollectCallback, void * callbackContext); +#ifdef _CHAKRACOREBUILD + void SetBeforeSweepCallback(JsBeforeSweepCallback beforeCollectCallback, void * callbackContext); +#endif #ifdef ENABLE_DEBUG_CONFIG_OPTIONS void SetSerializeByteCodeForLibrary(bool set) { serializeByteCodeForLibrary = set; } @@ -65,8 +68,12 @@ class JsrtRuntime JsrtContext * contextList; ThreadContext::CollectCallBack * collectCallback; JsBeforeCollectCallback beforeCollectCallback; +#ifdef _CHAKRACOREBUILD + JsBeforeSweepCallback beforeSweepCallback; + void * beforeSweepCallbackContext; +#endif JsrtThreadService threadService; - void * callbackContext; + void * beforeCollectCallbackContext; bool useIdle; bool dispatchExceptions; #ifdef ENABLE_DEBUG_CONFIG_OPTIONS diff --git a/lib/Jsrt/JsrtSourceHolder.cpp b/lib/Jsrt/JsrtSourceHolder.cpp index 006974baea1..6e971be559f 100644 --- a/lib/Jsrt/JsrtSourceHolder.cpp +++ b/lib/Jsrt/JsrtSourceHolder.cpp @@ -256,13 +256,13 @@ namespace Js } END_LEAVE_SCRIPT(scriptContext); - bool isExternalArray = Js::ExternalArrayBuffer::Is(scriptVal), + bool isExternalArray = Js::VarIs(scriptVal), isString = false; bool isUtf8 = !(attributes & JsParseScriptAttributeArrayBufferIsUtf16Encoded); if (!isExternalArray) { - isString = Js::JavascriptString::Is(scriptVal); + isString = Js::VarIs(scriptVal); if (!isString) { Js::JavascriptError::ThrowOutOfMemoryError(nullptr); diff --git a/lib/Parser/BGParseManager.cpp b/lib/Parser/BGParseManager.cpp index ef9971de2ef..cf939cf2907 100644 --- a/lib/Parser/BGParseManager.cpp +++ b/lib/Parser/BGParseManager.cpp @@ -214,7 +214,7 @@ HRESULT BGParseManager::QueueBackgroundParse(LPCUTF8 pszSrc, size_t cbLength, ch // Returns the data provided when the parse was queued // Note: runs on any thread, but the buffer lifetimes are not guaranteed after parse results are returned -HRESULT BGParseManager::GetInputFromCookie(DWORD cookie, LPCUTF8* ppszSrc, size_t* pcbLength) +HRESULT BGParseManager::GetInputFromCookie(DWORD cookie, LPCUTF8* ppszSrc, size_t* pcbLength, WCHAR** sourceUrl) { HRESULT hr = E_FAIL; @@ -222,8 +222,19 @@ HRESULT BGParseManager::GetInputFromCookie(DWORD cookie, LPCUTF8* ppszSrc, size_ BGParseWorkItem* workitem = FindJob(cookie, false /*waitForResults*/, false /*removeJob*/); if (workitem != nullptr) { - (*ppszSrc) = workitem->GetScriptSrc(); - (*pcbLength) = workitem->GetScriptLength(); + if (ppszSrc != nullptr) + { + (*ppszSrc) = workitem->GetScriptSrc(); + } + if (pcbLength != nullptr) + { + (*pcbLength) = workitem->GetScriptLength(); + } + if (sourceUrl != nullptr) + { + (*sourceUrl) = workitem->GetScriptPath(); + } + hr = S_OK; } @@ -237,7 +248,7 @@ HRESULT BGParseManager::GetParseResults( DWORD cookie, LPCUTF8 pszSrc, SRCINFO const * pSrcInfo, - Js::ParseableFunctionInfo** ppFunc, + Js::FunctionBody** ppFunc, CompileScriptException* pse, size_t& srcLength, Js::Utf8SourceInfo* utf8SourceInfo, @@ -260,7 +271,10 @@ HRESULT BGParseManager::GetParseResults( Js::FunctionBody* functionBody = nullptr; hr = workitem->DeserializeParseResults(scriptContextUI, pszSrc, pSrcInfo, utf8SourceInfo, &functionBody, srcLength, sourceIndex); (*ppFunc) = functionBody; - workitem->TransferCSE(pse); + if (pse != nullptr) + { + workitem->TransferCSE(pse); + } if (hr == S_OK) { @@ -572,6 +586,18 @@ HRESULT BGParseWorkItem::DeserializeParseResults( HRESULT hr = this->parseHR; if (hr == S_OK) { + if (utf8SourceInfo == nullptr) + { + scriptContextUI->MakeUtf8SourceInfo( + this->script, + this->cb, + pSrcInfo, + &utf8SourceInfo, + LoadScriptFlag_Utf8Source, + nullptr // Var scriptSource + ); + } + srcLength = this->parseSourceLength; sourceIndex = scriptContextUI->SaveSourceNoCopy(utf8SourceInfo, (int)srcLength, false /*isCesu8*/); Assert(sourceIndex != Js::Constants::InvalidSourceIndex); @@ -650,4 +676,4 @@ void BGParseWorkItem::WaitForCompletion() this->complete->Wait(); } -} \ No newline at end of file +} diff --git a/lib/Parser/BGParseManager.h b/lib/Parser/BGParseManager.h index 84a90212935..3db16190279 100644 --- a/lib/Parser/BGParseManager.h +++ b/lib/Parser/BGParseManager.h @@ -52,13 +52,13 @@ class BGParseManager sealed : public JsUtil::WaitableJobManager static DWORD IncFailed(); HRESULT QueueBackgroundParse(LPCUTF8 pszSrc, size_t cbLength, char16 *fullPath, DWORD* dwBgParseCookie); - HRESULT GetInputFromCookie(DWORD cookie, LPCUTF8* ppszSrc, size_t* pcbLength); + HRESULT GetInputFromCookie(DWORD cookie, LPCUTF8* ppszSrc, size_t* pcbLength, WCHAR** sourceUrl); HRESULT GetParseResults( Js::ScriptContext* scriptContextUI, DWORD cookie, LPCUTF8 pszSrc, SRCINFO const * pSrcInfo, - Js::ParseableFunctionInfo** ppFunc, + Js::FunctionBody** ppFunc, CompileScriptException* pse, size_t& srcLength, Js::Utf8SourceInfo* utf8SourceInfo, @@ -127,6 +127,7 @@ class BGParseWorkItem sealed : public JsUtil::Job DWORD GetCookie() const { return cookie; } const byte* GetScriptSrc() const { return script; } size_t GetScriptLength() const { return cb; } + WCHAR* GetScriptPath() const { return path; } private: // This cookie is the public identifier for this parser work @@ -150,4 +151,4 @@ class BGParseWorkItem sealed : public JsUtil::Job // Output data byte * bufferReturn; DWORD bufferReturnBytes; -}; \ No newline at end of file +}; diff --git a/lib/Parser/CharClassifier.h b/lib/Parser/CharClassifier.h index 9597a6e587a..bff0cfa43a6 100644 --- a/lib/Parser/CharClassifier.h +++ b/lib/Parser/CharClassifier.h @@ -179,7 +179,7 @@ namespace Js return FBigChar(ch) ? IsIdContinueFast(ch) : IsIdContinueFast(ch); } - const size_t SkipBiDirectionalChars(_In_z_bytecount_(2 * length) LPCOLESTR psz, _In_ size_t startIndex, _In_ size_t length) const + size_t SkipBiDirectionalChars(_In_z_bytecount_(2 * length) LPCOLESTR psz, _In_ size_t startIndex, _In_ size_t length) const { size_t count = 0; while (startIndex < length) @@ -195,7 +195,7 @@ namespace Js return count; } - const char16 SkipBiDirectionalChars(_In_z_ char16* &pszRef) const + char16 SkipBiDirectionalChars(_In_z_ char16* &pszRef) const { while (*pszRef != '\0') { @@ -249,7 +249,7 @@ namespace Js return skipIdentifierFunc(psz, this); } - const LPCUTF8 SkipIdentifier(LPCUTF8 psz, LPCUTF8 end) const + LPCUTF8 SkipIdentifier(LPCUTF8 psz, LPCUTF8 end) const { return skipIdentifierStartEndFunc(psz, end, this); } diff --git a/lib/Parser/CharTrie.cpp b/lib/Parser/CharTrie.cpp index 10dc686ee3e..7bffca32bca 100644 --- a/lib/Parser/CharTrie.cpp +++ b/lib/Parser/CharTrie.cpp @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #include "ParserPch.h" @@ -199,8 +200,9 @@ namespace UnifiedRegex #endif } - void RuntimeCharTrie::CloneFrom(ArenaAllocator* allocator, const CharTrie& other) + void RuntimeCharTrie::CloneFrom(Js::ScriptContext* scriptContext, ArenaAllocator* allocator, const CharTrie& other) { + PROBE_STACK_NO_DISPOSE(scriptContext, Js::Constants::MinStackRegex); count = other.count; if (count > 0) { @@ -208,7 +210,7 @@ namespace UnifiedRegex for (int i = 0; i < count; i++) { children[i].c = other.children[i].c; - children[i].node.CloneFrom(allocator, other.children[i].node); + children[i].node.CloneFrom(scriptContext, allocator, other.children[i].node); } } else diff --git a/lib/Parser/CharTrie.h b/lib/Parser/CharTrie.h index de1d05fe5cb..6f215868d3d 100644 --- a/lib/Parser/CharTrie.h +++ b/lib/Parser/CharTrie.h @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #pragma once @@ -65,7 +66,7 @@ namespace UnifiedRegex public: inline RuntimeCharTrie() : count(0), children(0) {} void FreeBody(ArenaAllocator* allocator); - void CloneFrom(ArenaAllocator* allocator, const CharTrie& other); + void CloneFrom(Js::ScriptContext* scriptContext, ArenaAllocator* allocator, const CharTrie& other); bool Match ( const Char* const input diff --git a/lib/Parser/FormalsUtil.h b/lib/Parser/FormalsUtil.h index db7a6692e27..04c2a76ef5c 100644 --- a/lib/Parser/FormalsUtil.h +++ b/lib/Parser/FormalsUtil.h @@ -38,5 +38,10 @@ void MapFormalsFromPattern(ParseNodeFnc *pnodeFunc, Fn fn) Parser::MapBindIdentifier(pnode->AsParseNodeParamPattern()->pnode1, fn); } } -} + ParseNodePtr rest = pnodeFunc->pnodeRest; + if (rest != nullptr && rest->nop == knopParamPattern) + { + Parser::MapBindIdentifier(rest->AsParseNodeParamPattern()->pnode1, fn); + } +} diff --git a/lib/Parser/Parse.cpp b/lib/Parser/Parse.cpp index 20fd059a453..99370b420e0 100644 --- a/lib/Parser/Parse.cpp +++ b/lib/Parser/Parse.cpp @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #include "ParserPch.h" @@ -8,6 +9,7 @@ #include "ByteCode/ByteCodeSerializer.h" + #if DBG_DUMP void PrintPnodeWIndent(ParseNode *pnode, int indentAmt); #endif @@ -26,11 +28,6 @@ const uint ParseNode::mpnopgrfnop[knopLim] = #include "ptlist.h" }; -bool Parser::IsES6DestructuringEnabled() const -{ - return m_scriptContext->GetConfig()->IsES6DestructuringEnabled(); -} - struct BlockInfoStack { StmtNest pstmt; @@ -158,9 +155,169 @@ void Parser::OutOfMemory() throw ParseExceptionObject(ERRnoMemory); } -void Parser::Error(HRESULT hr) +LPCWSTR Parser::GetTokenString(tokens token) +{ + switch (token) + { + case tkNone : return _u(""); + case tkEOF : return _u("end of script"); + case tkIntCon : return _u("integer literal"); + case tkFltCon : return _u("float literal"); + case tkStrCon : return _u("string literal"); + case tkRegExp : return _u("regular expression literal"); + +// keywords + case tkABSTRACT : return _u("abstract"); + case tkASSERT : return _u("assert"); + case tkAWAIT : return _u("await"); + case tkBOOLEAN : return _u("boolean"); + case tkBREAK : return _u("break"); + case tkBYTE : return _u("byte"); + case tkCASE : return _u("case"); + case tkCATCH : return _u("catch"); + case tkCHAR : return _u("char"); + case tkCONTINUE : return _u("continue"); + case tkDEBUGGER : return _u("debugger"); + case tkDECIMAL : return _u("decimal"); + case tkDEFAULT : return _u("default"); + case tkDELETE : return _u("delete"); + case tkDO : return _u("do"); + case tkDOUBLE : return _u("double"); + case tkELSE : return _u("else"); + case tkENSURE : return _u("ensure"); + case tkEVENT : return _u("event"); + case tkFALSE : return _u("false"); + case tkFINAL : return _u("final"); + case tkFINALLY : return _u("finally"); + case tkFLOAT : return _u("float"); + case tkFOR : return _u("for"); + case tkFUNCTION : return _u("function"); + case tkGET : return _u("get"); + case tkGOTO : return _u("goto"); + case tkIF : return _u("if"); + case tkIN : return _u("in"); + case tkINSTANCEOF : return _u("instanceof"); + case tkINT : return _u("int"); + case tkINTERNAL : return _u("internal"); + case tkINVARIANT : return _u("invariant"); + case tkLONG : return _u("long"); + case tkNAMESPACE : return _u("namespace"); + case tkNATIVE : return _u("native"); + case tkNEW : return _u("new"); + case tkNULL : return _u("null"); + case tkREQUIRE : return _u("require"); + case tkRETURN : return _u("return"); + case tkSBYTE : return _u("sbyte"); + case tkSET : return _u("set"); + case tkSHORT : return _u("short"); + case tkSWITCH : return _u("switch"); + case tkSYNCHRONIZED : return _u("synchronized"); + case tkTHIS : return _u("this"); + case tkTHROW : return _u("throw"); + case tkTHROWS : return _u("throws"); + case tkTRANSIENT : return _u("transient"); + case tkTRUE : return _u("true"); + case tkTRY : return _u("try"); + case tkTYPEOF : return _u("typeof"); + case tkUINT : return _u("uint"); + case tkULONG : return _u("ulong"); + case tkUSE : return _u("use"); + case tkUSHORT : return _u("ushort"); + case tkVAR : return _u("var"); + case tkVOID : return _u("void"); + case tkVOLATILE : return _u("volatile"); + case tkWHILE : return _u("while"); + case tkWITH : return _u("with"); + +// Future reserved words that become keywords in ES6 + case tkCLASS : return _u("class"); + case tkCONST : return _u("const"); + case tkEXPORT : return _u("export"); + case tkEXTENDS : return _u("extends"); + case tkIMPORT : return _u("import"); + case tkLET : return _u("let"); + case tkSUPER : return _u("super"); + case tkYIELD : return _u("yield"); + +// Future reserved words in strict and non-strict modes + case tkENUM : return _u("enum"); + +// Additional future reserved words in strict mode + case tkIMPLEMENTS : return _u("implements"); + case tkINTERFACE : return _u("interface"); + case tkPACKAGE : return _u("package"); + case tkPRIVATE : return _u("private"); + case tkPROTECTED : return _u("protected"); + case tkPUBLIC : return _u("public"); + case tkSTATIC : return _u("static"); + + case tkID: return _u("identifier"); + +// Non-operator non-identifier tokens + case tkSColon: return _u(";"); + case tkRParen: return _u(")"); + case tkRBrack: return _u("]"); + case tkLCurly: return _u("{"); + case tkRCurly: return _u("}"); + +// Operator non-identifier tokens + case tkComma: return _u(","); + case tkDArrow: return _u("=>"); + case tkAsg: return _u("="); + case tkAsgAdd: return _u("+="); + case tkAsgSub: return _u("-="); + case tkAsgMul: return _u("*="); + case tkAsgDiv: return _u("/="); + case tkAsgExpo: return _u("**="); + case tkAsgMod: return _u("%="); + case tkAsgAnd: return _u("&="); + case tkAsgXor: return _u("^="); + case tkAsgOr: return _u("|="); + case tkAsgLsh: return _u("<<="); + case tkAsgRsh: return _u(">>="); + case tkAsgRs2: return _u(">>>="); + case tkQMark: return _u("?"); + case tkColon: return _u(":"); + case tkLogOr: return _u("||"); + case tkLogAnd: return _u("&&"); + case tkCoalesce: return _u("??"); + case tkOr: return _u("|"); + case tkXor: return _u("^"); + case tkAnd: return _u("&"); + case tkEQ: return _u("=="); + case tkNE: return _u("!="); + case tkEqv: return _u("==="); + case tkNEqv: return _u("!=="); + case tkLT: return _u("<"); + case tkLE: return _u("<="); + case tkGT: return _u(">"); + case tkGE: return _u(">="); + case tkLsh: return _u("<<"); + case tkRsh: return _u(">>"); + case tkRs2: return _u(">>>"); + case tkAdd: return _u("+"); + case tkSub: return _u("-"); + case tkExpo: return _u("**"); + case tkStar: return _u("*"); + case tkDiv: return _u("/"); + case tkPct: return _u("%"); + case tkTilde: return _u("~"); + case tkBang: return _u("!"); + case tkInc: return _u("++"); + case tkDec: return _u("--"); + case tkEllipsis: return _u("..."); + case tkLParen: return _u("("); + case tkLBrack: return _u("["); + case tkDot: return _u("."); + + default: + return _u("unknown token"); + } +} + +void Parser::Error(HRESULT hr, LPCWSTR stringOne, LPCWSTR stringTwo) { - throw ParseExceptionObject(hr); + throw ParseExceptionObject(hr, stringOne, stringTwo); } void Parser::Error(HRESULT hr, ParseNodePtr pnode) @@ -175,10 +332,10 @@ void Parser::Error(HRESULT hr, ParseNodePtr pnode) } } -void Parser::Error(HRESULT hr, charcount_t ichMin, charcount_t ichLim) +void Parser::Error(HRESULT hr, charcount_t ichMin, charcount_t ichLim, LPCWSTR stringOne, LPCWSTR stringTwo) { this->GetScanner()->SetErrorPosition(ichMin, ichLim); - Error(hr); + Error(hr, stringOne, stringTwo); } void Parser::IdentifierExpectedError(const Token& token) @@ -225,6 +382,7 @@ HRESULT Parser::ValidateSyntax(LPCUTF8 pszSrc, size_t encodedCharCount, bool isG HRESULT hr; SmartFPUControl smartFpuControl; + bool handled = false; BOOL fDeferSave = m_deferringAST; try @@ -286,9 +444,11 @@ HRESULT Parser::ValidateSyntax(LPCUTF8 pszSrc, size_t encodedCharCount, bool isG { m_deferringAST = fDeferSave; hr = e.GetError(); + hr = pse->ProcessError(this->GetScanner(), hr, /* pnodeBase */ NULL, e.GetStringOne(), e.GetStringTwo()); + handled = true; } - if (nullptr != pse && FAILED(hr)) + if (handled == false && nullptr != pse && FAILED(hr)) { hr = pse->ProcessError(this->GetScanner(), hr, /* pnodeBase */ NULL); } @@ -325,6 +485,7 @@ HRESULT Parser::ParseSourceInternal( ParseNodeProg * pnodeBase = NULL; HRESULT hr; SmartFPUControl smartFpuControl; + bool handled = false; try { @@ -337,6 +498,11 @@ HRESULT Parser::ParseSourceInternal( this->m_fUseStrictMode = TRUE; } + if ((grfscr & fscrUseStrictMode) != 0) + { + this->m_fUseStrictMode = TRUE; + } + // parse the source pnodeBase = Parse(pszSrc, offsetInBytes, encodedCharCount, offsetInChars, isUtf8, grfscr, lineNumber, nextFunctionId, pse); @@ -363,13 +529,15 @@ HRESULT Parser::ParseSourceInternal( catch (ParseExceptionObject& e) { hr = e.GetError(); + hr = pse->ProcessError(this->GetScanner(), hr, pnodeBase, e.GetStringOne(), e.GetStringTwo()); + handled = true; } catch (Js::AsmJsParseException&) { hr = JSERR_AsmJsCompileError; } - if (FAILED(hr)) + if (handled == false && FAILED(hr)) { hr = pse->ProcessError(this->GetScanner(), hr, pnodeBase); } @@ -886,6 +1054,15 @@ ParseNodeStr * Parser::CreateStrNode(IdentPtr pid) return pnode; } +ParseNodeBigInt * Parser::CreateBigIntNode(IdentPtr pid) +{ + Assert(!this->m_deferringAST); + ParseNodeBigInt * pnode = Anew(&m_nodeAllocator, ParseNodeBigInt, this->GetScanner()->IchMinTok(), this->GetScanner()->IchLimTok(), pid); + pnode->isNegative = false; + AddAstSize(sizeof(ParseNodeBigInt)); + return pnode; +} + ParseNodeName * Parser::CreateNameNode(IdentPtr pid) { ParseNodeName * pnode = Anew(&m_nodeAllocator, ParseNodeName, this->GetScanner()->IchMinTok(), this->GetScanner()->IchLimTok(), pid); @@ -953,6 +1130,8 @@ ParseNodeProg * Parser::CreateProgNode(bool isModuleSource, ULONG lineNumber) } pnodeProg->cbMin = this->GetScanner()->IecpMinTok(); + pnodeProg->cbStringMin = pnodeProg->cbMin; + pnodeProg->cbStringLim = pnodeProg->cbLim; pnodeProg->lineNumber = lineNumber; pnodeProg->homeObjLocation = Js::Constants::NoRegister; pnodeProg->superRestrictionState = SuperRestrictionState::Disallowed; @@ -1027,6 +1206,52 @@ ParseNodeParamPattern * Parser::CreateDummyParamPatternNode(charcount_t ichMin) return paramPatternNode; } +ParseNodeObjLit * Parser::CreateObjectPatternNode(ParseNodePtr pnodeMemberList, charcount_t ichMin, charcount_t ichLim, bool convertToPattern) { + // Count the number of non-rest members in the object + uint32 staticCount = 0; + uint32 computedCount = 0; + bool hasRest = false; + ParseNodePtr pnodeMemberNodeList = convertToPattern ? nullptr : pnodeMemberList; + if (pnodeMemberList != nullptr) + { + Assert(pnodeMemberList->nop == knopList || + (!convertToPattern && pnodeMemberList->nop == knopObjectPatternMember) || + convertToPattern || + pnodeMemberList->nop == knopEllipsis); + ForEachItemInList(pnodeMemberList, [&](ParseNodePtr item) { + ParseNodePtr memberNode = convertToPattern ? ConvertMemberToMemberPattern(item) : item; + if (convertToPattern) + { + AppendToList(&pnodeMemberNodeList, memberNode); + } + if (memberNode->nop != knopEllipsis) + { + ParseNodePtr nameNode = memberNode->AsParseNodeBin()->pnode1; + Assert(nameNode->nop == knopComputedName || nameNode->nop == knopStr); + if (nameNode->nop == knopComputedName) + { + computedCount++; + } + else + { + staticCount++; + } + } + else + { + hasRest = true; + } + }); + } + + ParseNodeObjLit * objectPatternNode = CreateNodeForOpT(ichMin, ichLim); + objectPatternNode->pnode1 = pnodeMemberNodeList; + objectPatternNode->computedCount = computedCount; + objectPatternNode->staticCount = staticCount; + objectPatternNode->hasRest = hasRest; + return objectPatternNode; +} + Symbol* Parser::AddDeclForPid(ParseNodeVar * pnodeVar, IdentPtr pid, SymbolType symbolType, bool errorOnRedecl) { Assert(pnodeVar->IsVarLetOrConst()); @@ -1127,7 +1352,7 @@ Symbol* Parser::AddDeclForPid(ParseNodeVar * pnodeVar, IdentPtr pid, SymbolType case knopLetDecl: case knopConstDecl: // Destructuring made possible to have the formals to be the let bind. But that shouldn't throw the error. - if (errorOnRedecl && (!IsES6DestructuringEnabled() || sym->GetSymbolType() != STFormal)) + if (errorOnRedecl && (sym->GetSymbolType() != STFormal)) { Error(ERRRedeclaration); } @@ -1492,7 +1717,8 @@ bool Parser::IsSpecialName(IdentPtr pid) return pid == wellKnownPropertyPids._this || pid == wellKnownPropertyPids._super || pid == wellKnownPropertyPids._superConstructor || - pid == wellKnownPropertyPids._newTarget; + pid == wellKnownPropertyPids._newTarget || + pid == wellKnownPropertyPids._importMeta; } ParseNodeSpecialName * Parser::ReferenceSpecialName(IdentPtr pid, charcount_t ichMin, charcount_t ichLim, bool createNode) @@ -1514,7 +1740,7 @@ ParseNodeVar * Parser::CreateSpecialVarDeclIfNeeded(ParseNodeFnc * pnodeFnc, Ide PidRefStack* ref = pid->GetTopRef(); // If the function has a reference to pid or we set forceCreate, make a special var decl - if (forceCreate || (ref && ref->GetScopeId() >= m_currentBlockInfo->pnodeBlock->blockId)) + if (forceCreate || (ref && (ref->GetScopeId() >= m_currentBlockInfo->pnodeBlock->blockId && ref->GetFuncScopeId() >= pnodeFnc->functionId))) { return this->CreateSpecialVarDeclNode(pnodeFnc, pid); } @@ -1551,6 +1777,13 @@ void Parser::CreateSpecialSymbolDeclarations(ParseNodeFnc * pnodeFnc) varDeclNode->AsParseNodeVar()->sym->SetIsNewTarget(true); } + // Create a 'import.meta' symbol. + varDeclNode = CreateSpecialVarDeclIfNeeded(pnodeFnc, wellKnownPropertyPids._importMeta); + if (varDeclNode) + { + varDeclNode->AsParseNodeVar()->sym->SetIsImportMeta(true); + } + // Create a 'super' (as a reference) symbol. varDeclNode = CreateSpecialVarDeclIfNeeded(pnodeFnc, wellKnownPropertyPids._super); if (varDeclNode) @@ -1559,12 +1792,12 @@ void Parser::CreateSpecialSymbolDeclarations(ParseNodeFnc * pnodeFnc) } // Create a 'super' (as the call target for super()) symbol only for derived class constructors. - varDeclNode = CreateSpecialVarDeclIfNeeded(pnodeFnc, wellKnownPropertyPids._superConstructor); - if (varDeclNode) - { - varDeclNode->AsParseNodeVar()->sym->SetIsSuperConstructor(true); - } + varDeclNode = CreateSpecialVarDeclIfNeeded(pnodeFnc, wellKnownPropertyPids._superConstructor); + if (varDeclNode) + { + varDeclNode->AsParseNodeVar()->sym->SetIsSuperConstructor(true); } +} void Parser::FinishParseBlock(ParseNodeBlock *pnodeBlock, bool needScanRCurly) { @@ -1748,6 +1981,7 @@ void Parser::BindPidRefsInScope(IdentPtr pid, Symbol *sym, int blockId, uint max if (bodyScope && ref->GetScopeId() < bodyScope->blockId && ref->GetScopeId() > blockId) { + Assert(bodyScope->blockType == PnodeBlockType::Function); funcExprScope->SetIsObject(); } } @@ -1979,7 +2213,6 @@ void Parser::AddToNodeList(ParseNode ** ppnodeList, ParseNode *** pppnodeLast, } else { - // Assert(*ppnodeList); Assert(**pppnodeLast); @@ -2103,23 +2336,48 @@ void Parser::ThrowNewTargetSyntaxErrForGlobalScope() template IdentPtr Parser::ParseMetaProperty(tokens metaParentKeyword, charcount_t ichMin, _Out_opt_ BOOL* pfCanAssign) { - AssertMsg(metaParentKeyword == tkNEW, "Only supported for tkNEW parent keywords"); + AssertMsg(metaParentKeyword == tkNEW || metaParentKeyword == tkIMPORT, "Only supported for tkNEW and tkIMPORT parent keywords"); AssertMsg(this->m_token.tk == tkDot, "We must be currently sitting on the dot after the parent keyword"); this->GetScanner()->Scan(); - if (this->m_token.tk == tkID && this->m_token.GetIdentifier(this->GetHashTbl()) == this->GetTargetPid()) + if (this->m_token.tk == tkID) { - ThrowNewTargetSyntaxErrForGlobalScope(); - if (pfCanAssign) + IdentPtr id = this->m_token.GetIdentifier(this->GetHashTbl()); + + switch (metaParentKeyword) { - *pfCanAssign = FALSE; + case tkNEW: + if (id == this->GetTargetPid()) + { + ThrowNewTargetSyntaxErrForGlobalScope(); + if (pfCanAssign) + { + *pfCanAssign = FALSE; + } + return wellKnownPropertyPids._newTarget; + } + break; + case tkIMPORT: + if (id == this->GetMetaPid()) + { + if (pfCanAssign) + { + *pfCanAssign = FALSE; + } + return wellKnownPropertyPids._importMeta; + } + break; } - return wellKnownPropertyPids._newTarget; + } + + if (metaParentKeyword == tkNEW) + { + Error(ERRValidIfFollowedBy, _u("'new.'"), _u("'target'")); } else { - Error(ERRsyntax); + Error(ERRValidIfFollowedBy, _u("'import.'"), _u("'meta'")); } } @@ -2137,20 +2395,21 @@ void Parser::ParseNamedImportOrExportClause(ModuleImportOrExportEntryList* impor if (!(m_token.IsIdentifier() || m_token.IsReservedWord())) { - Error(ERRsyntax); + Error(ERRTokenAfter, GetTokenString(m_token.tk), GetTokenString(GetScanner()->GetPrevious())); } IdentPtr identifierName = m_token.GetIdentifier(this->GetHashTbl()); IdentPtr identifierAs = identifierName; + charcount_t offsetForError = this->GetScanner()->IchMinTok(); this->GetScanner()->Scan(); if (m_token.tk == tkID) { // We have the pattern "IdentifierName as" - if (wellKnownPropertyPids.as != m_token.GetIdentifier(this->GetHashTbl())) + if (!CheckContextualKeyword(wellKnownPropertyPids.as)) { - Error(ERRsyntax); + Error(ERRInvalidIdentifier, m_token.GetIdentifier(this->GetHashTbl())->Psz(), identifierName->Psz()); } this->GetScanner()->Scan(); @@ -2158,12 +2417,12 @@ void Parser::ParseNamedImportOrExportClause(ModuleImportOrExportEntryList* impor // If we are parsing an import statement, the token after 'as' must be a BindingIdentifier. if (!isExportClause) { - ChkCurTokNoScan(tkID, ERRsyntax); + ChkCurTokNoScan(tkID, ERRValidIfFollowedBy, _u("'as'"), _u("an identifier.")); } if (!(m_token.IsIdentifier() || m_token.IsReservedWord())) { - Error(ERRsyntax); + Error(ERRValidIfFollowedBy, _u("'as'"), _u("an identifier.")); } identifierAs = m_token.GetIdentifier(this->GetHashTbl()); @@ -2175,7 +2434,7 @@ void Parser::ParseNamedImportOrExportClause(ModuleImportOrExportEntryList* impor { // If we are parsing an import statement and this ImportSpecifier clause did not have // 'as ImportedBinding' at the end of it, identifierName must be a BindingIdentifier. - Error(ERRsyntax); + Error(ERRnoIdent); } if (m_token.tk == tkComma) @@ -2184,24 +2443,21 @@ void Parser::ParseNamedImportOrExportClause(ModuleImportOrExportEntryList* impor this->GetScanner()->Scan(); } - if (buildAST) + if (isExportClause) + { + identifierName->SetIsModuleExport(); + AddModuleImportOrExportEntry(importOrExportEntryList, nullptr, identifierName, identifierAs, nullptr, offsetForError); + } + else if (buildAST) { // The name we will use 'as' this import/export is a binding identifier in import statements. - if (!isExportClause) - { - CreateModuleImportDeclNode(identifierAs); - AddModuleImportOrExportEntry(importOrExportEntryList, identifierName, identifierAs, nullptr, nullptr); - } - else - { - identifierName->SetIsModuleExport(); - AddModuleImportOrExportEntry(importOrExportEntryList, nullptr, identifierName, identifierAs, nullptr); - } + CreateModuleImportDeclNode(identifierAs); + AddModuleImportOrExportEntry(importOrExportEntryList, identifierName, identifierAs, nullptr, nullptr); } } // Final token in a named import or export clause must be a '}' - ChkCurTokNoScan(tkRCurly, ERRsyntax); + ChkCurTokNoScan(tkRCurly, ERRnoRcurly); } IdentPtrList* Parser::GetRequestedModulesList() @@ -2209,6 +2465,23 @@ IdentPtrList* Parser::GetRequestedModulesList() return m_currentNodeProg->AsParseNodeModule()->requestedModules; } +void Parser::VerifyModuleLocalExportEntries() +{ + ModuleImportOrExportEntryList* localExportRecordList = GetModuleLocalExportEntryList(); + if (localExportRecordList != nullptr) + { + localExportRecordList->Map([=](ModuleImportOrExportEntry exportEntry) { + if (exportEntry.pidRefStack!=nullptr) + { + if (exportEntry.pidRefStack->GetSym() == nullptr) + { + Error(ERRUndeclaredExportName, exportEntry.offset, exportEntry.localName->Cch(), exportEntry.localName->Psz()); + } + } + }); + } +} + ModuleImportOrExportEntryList* Parser::GetModuleImportEntryList() { return m_currentNodeProg->AsParseNodeModule()->importEntries; @@ -2288,7 +2561,7 @@ ModuleImportOrExportEntry* Parser::AddModuleImportOrExportEntry(ModuleImportOrEx { if (importOrExportEntry->exportName != nullptr) { - CheckForDuplicateExportEntry(importOrExportEntryList, importOrExportEntry->exportName); + CheckForDuplicateExportEntry(importOrExportEntry->exportName); } importOrExportEntryList->Prepend(*importOrExportEntry); @@ -2296,7 +2569,7 @@ ModuleImportOrExportEntry* Parser::AddModuleImportOrExportEntry(ModuleImportOrEx return importOrExportEntry; } -ModuleImportOrExportEntry* Parser::AddModuleImportOrExportEntry(ModuleImportOrExportEntryList* importOrExportEntryList, IdentPtr importName, IdentPtr localName, IdentPtr exportName, IdentPtr moduleRequest) +ModuleImportOrExportEntry* Parser::AddModuleImportOrExportEntry(ModuleImportOrExportEntryList* importOrExportEntryList, IdentPtr importName, IdentPtr localName, IdentPtr exportName, IdentPtr moduleRequest, charcount_t offsetForError) { ModuleImportOrExportEntry* importOrExportEntry = Anew(&m_nodeAllocator, ModuleImportOrExportEntry); @@ -2304,6 +2577,8 @@ ModuleImportOrExportEntry* Parser::AddModuleImportOrExportEntry(ModuleImportOrEx importOrExportEntry->localName = localName; importOrExportEntry->exportName = exportName; importOrExportEntry->moduleRequest = moduleRequest; + importOrExportEntry->pidRefStack = offsetForError == 0 ? nullptr : PushPidRef(localName); + importOrExportEntry->offset = offsetForError; return AddModuleImportOrExportEntry(importOrExportEntryList, importOrExportEntry); } @@ -2318,6 +2593,19 @@ void Parser::AddModuleLocalExportEntry(ParseNodePtr varDeclNode) AddModuleImportOrExportEntry(EnsureModuleLocalExportEntryList(), nullptr, localName, localName, nullptr); } +void Parser::CheckForDuplicateExportEntry(IdentPtr exportName) +{ + if (m_currentNodeProg->AsParseNodeModule()->indirectExportEntries != nullptr) + { + CheckForDuplicateExportEntry(m_currentNodeProg->AsParseNodeModule()->indirectExportEntries, exportName); + } + + if (m_currentNodeProg->AsParseNodeModule()->localExportEntries != nullptr) + { + CheckForDuplicateExportEntry(m_currentNodeProg->AsParseNodeModule()->localExportEntries, exportName); + } +} + void Parser::CheckForDuplicateExportEntry(ModuleImportOrExportEntryList* exportEntryList, IdentPtr exportName) { ModuleImportOrExportEntry* findResult = exportEntryList->Find([&](ModuleImportOrExportEntry exportEntry) @@ -2331,7 +2619,7 @@ void Parser::CheckForDuplicateExportEntry(ModuleImportOrExportEntryList* exportE if (findResult != nullptr) { - Error(ERRsyntax); + Error(ERRDuplicateExport, exportName->Psz()); } } @@ -2375,14 +2663,14 @@ void Parser::ParseImportClause(ModuleImportOrExportEntryList* importEntryList, b // Token following * must be the identifier 'as' this->GetScanner()->Scan(); - if (m_token.tk != tkID || wellKnownPropertyPids.as != m_token.GetIdentifier(this->GetHashTbl())) + if (!CheckContextualKeyword(wellKnownPropertyPids.as)) { - Error(ERRsyntax); + Error(ERRValidIfFollowedBy, _u("import *"), _u("as")); } // Token following 'as' must be a binding identifier. this->GetScanner()->Scan(); - ChkCurTokNoScan(tkID, ERRsyntax); + ChkCurTokNoScan(tkID, ERRnoIdent); if (buildAST) { @@ -2397,7 +2685,7 @@ void Parser::ParseImportClause(ModuleImportOrExportEntryList* importEntryList, b break; default: - Error(ERRsyntax); + Error(ERRTokenAfter, GetTokenString(m_token.tk), GetTokenString(this->GetScanner()->GetPrevious())); } this->GetScanner()->Scan(); @@ -2408,7 +2696,7 @@ void Parser::ParseImportClause(ModuleImportOrExportEntryList* importEntryList, b // There cannot be a namespace import or named imports list on the left of the comma in a module import clause. if (parsingAfterComma || parsedNamespaceOrNamedImport) { - Error(ERRsyntax); + Error(ERRTokenAfter, _u(","), GetTokenString(this->GetScanner()->GetPrevious())); } this->GetScanner()->Scan(); @@ -2417,17 +2705,22 @@ void Parser::ParseImportClause(ModuleImportOrExportEntryList* importEntryList, b } } -bool Parser::IsImportOrExportStatementValidHere() +void Parser::CheckIfImportOrExportStatementValidHere() { ParseNodeFnc * curFunc = GetCurrentFunctionNode(); - // Import must be located in the top scope of the module body. - return curFunc->nop == knopFncDecl - && curFunc->IsModule() - && this->m_currentBlockInfo->pnodeBlock == curFunc->pnodeBodyScope - && (this->m_grfscr & fscrEvalCode) != fscrEvalCode - && this->m_tryCatchOrFinallyDepth == 0 - && !this->m_disallowImportExportStmt; + if (curFunc->nop != knopFncDecl || !curFunc->IsModule()) + { + Error(ERRModuleImportOrExportInScript); + } + + if (this->m_currentBlockInfo->pnodeBlock != curFunc->pnodeBodyScope + || (this->m_grfscr & fscrEvalCode) == fscrEvalCode + || this->m_tryCatchOrFinallyDepth != 0 + || this->m_disallowImportExportStmt) + { + Error(ERRInvalidModuleImportOrExport); + } } bool Parser::IsTopLevelModuleFunc() @@ -2436,6 +2729,17 @@ bool Parser::IsTopLevelModuleFunc() return curFunc->nop == knopFncDecl && curFunc->IsModule(); } +void Parser::MakeModuleAsync() +{ + Assert(IsTopLevelModuleFunc()); + if (!m_scriptContext->GetConfig()->IsESTopLevelAwaitEnabled()) + { + Error(ERRExperimental); + } + ParseNodeFnc * curFunc = GetCurrentFunctionNode(); + curFunc->SetIsAsync(); +} + template ParseNodePtr Parser::ParseImportCall() { this->GetScanner()->Scan(); @@ -2455,6 +2759,7 @@ ParseNodePtr Parser::ParseImport() Assert(m_scriptContext->GetConfig()->IsES6ModuleEnabled()); Assert(m_token.tk == tkIMPORT); + charcount_t ichMin = this->GetScanner()->IchMinTok(); RestorePoint parsedImport; this->GetScanner()->Capture(&parsedImport); this->GetScanner()->Scan(); @@ -2464,7 +2769,7 @@ ParseNodePtr Parser::ParseImport() { if (!m_scriptContext->GetConfig()->IsESDynamicImportEnabled()) { - Error(ERRsyntax); + Error(ERRExperimental); } ParseNodePtr pnode = ParseImportCall(); @@ -2472,13 +2777,17 @@ ParseNodePtr Parser::ParseImport() IdentToken token; return ParsePostfixOperators(pnode, TRUE, FALSE, FALSE, TRUE, &fCanAssign, &token); } + else if (m_token.tk == tkDot && m_scriptContext->GetConfig()->IsESImportMetaEnabled()) + { + BOOL fCanAssign; + ParseMetaProperty(tkIMPORT, ichMin, &fCanAssign); + this->GetScanner()->SeekTo(parsedImport); + return ParseExpr(); + } this->GetScanner()->SeekTo(parsedImport); - if (!IsImportOrExportStatementValidHere()) - { - Error(ERRInvalidModuleImportOrExport); - } + CheckIfImportOrExportStatementValidHere(); // We just parsed an import token. Next valid token is *, {, string constant, or binding identifier. this->GetScanner()->Scan(); @@ -2529,12 +2838,12 @@ IdentPtr Parser::ParseImportOrExportFromClause(bool throwIfNotFound) { IdentPtr moduleSpecifier = nullptr; - if (m_token.tk == tkID && wellKnownPropertyPids.from == m_token.GetIdentifier(this->GetHashTbl())) + if (CheckContextualKeyword(wellKnownPropertyPids.from)) { this->GetScanner()->Scan(); // Token following the 'from' token must be a string constant - the module specifier. - ChkCurTokNoScan(tkStrCon, ERRsyntax); + ChkCurTokNoScan(tkStrCon, ERRValidIfFollowedBy, _u("'from'"), _u("a module specifier.")); if (buildAST) { @@ -2545,7 +2854,7 @@ IdentPtr Parser::ParseImportOrExportFromClause(bool throwIfNotFound) } else if (throwIfNotFound) { - Error(ERRsyntax); + Error(ERRMissingFrom); } return moduleSpecifier; @@ -2564,10 +2873,6 @@ ParseNodePtr Parser::ParseDefaultExportClause() { case tkCLASS: { - if (!m_scriptContext->GetConfig()->IsES6ClassAndExtendsEnabled()) - { - goto LDefault; - } // Before we parse the class itself we need to know if the class has an identifier name. // If it does, we'll treat this class as an ordinary class declaration which will bind @@ -2602,7 +2907,7 @@ ParseNodePtr Parser::ParseDefaultExportClause() // function token) or it could be an identifier (let async = 0; export default async;). // To handle both cases, when we parse an async token we need to keep the parser state // and rewind if the next token is not function. - if (wellKnownPropertyPids.async == m_token.GetIdentifier(this->GetHashTbl())) + if (CheckContextualKeyword(wellKnownPropertyPids.async)) { RestorePoint parsedAsync; this->GetScanner()->Capture(&parsedAsync); @@ -2687,8 +2992,7 @@ ParseNodePtr Parser::ParseDefaultExportClause() } IdentPtr exportName = wellKnownPropertyPids._default; - IdentPtr localName = wellKnownPropertyPids._starDefaultStar; - AddModuleImportOrExportEntry(EnsureModuleLocalExportEntryList(), nullptr, localName, exportName, nullptr); + AddModuleImportOrExportEntry(EnsureModuleLocalExportEntryList(), nullptr, exportName, exportName, nullptr); return pnode; } @@ -2699,10 +3003,7 @@ ParseNodePtr Parser::ParseExportDeclaration(bool *needTerminator) Assert(m_scriptContext->GetConfig()->IsES6ModuleEnabled()); Assert(m_token.tk == tkEXPORT); - if (!IsImportOrExportStatementValidHere()) - { - Error(ERRInvalidModuleImportOrExport); - } + CheckIfImportOrExportStatementValidHere(); ParseNodePtr pnode = nullptr; IdentPtr moduleIdentifier = nullptr; @@ -2719,7 +3020,30 @@ ParseNodePtr Parser::ParseExportDeclaration(bool *needTerminator) switch (m_token.tk) { case tkStar: + { this->GetScanner()->Scan(); + IdentPtr exportName = nullptr; + + if (m_scriptContext->GetConfig()->IsESExportNsAsEnabled()) + { + // check for 'as' + if (CheckContextualKeyword(wellKnownPropertyPids.as)) + { + // scan to the next token + this->GetScanner()->Scan(); + + // token after as must be an identifier + if (!(m_token.IsIdentifier() || m_token.IsReservedWord())) + { + Error(ERRValidIfFollowedBy, _u("'as'"), _u("an identifier.")); + } + + exportName = m_token.GetIdentifier(this->GetHashTbl()); + + // scan to next token + this->GetScanner()->Scan(); + } + } // A star token in an export declaration must be followed by a from clause which begins with a token 'from'. moduleIdentifier = ParseImportOrExportFromClause(true); @@ -2729,9 +3053,16 @@ ParseNodePtr Parser::ParseExportDeclaration(bool *needTerminator) Assert(moduleIdentifier != nullptr); AddModuleSpecifier(moduleIdentifier); - IdentPtr importName = wellKnownPropertyPids._star; - AddModuleImportOrExportEntry(EnsureModuleStarExportEntryList(), importName, nullptr, nullptr, moduleIdentifier); + if (!exportName) + { + AddModuleImportOrExportEntry(EnsureModuleStarExportEntryList(), wellKnownPropertyPids._star, nullptr, nullptr, moduleIdentifier); + } + else + { + CheckForDuplicateExportEntry(exportName); + AddModuleImportOrExportEntry(EnsureModuleIndirectExportEntryList(), wellKnownPropertyPids._star, nullptr, exportName, moduleIdentifier); + } } if (needTerminator != nullptr) @@ -2740,6 +3071,7 @@ ParseNodePtr Parser::ParseExportDeclaration(bool *needTerminator) } break; + } case tkLCurly: { @@ -2789,14 +3121,18 @@ ParseNodePtr Parser::ParseExportDeclaration(bool *needTerminator) case tkID: { - IdentPtr pid = m_token.GetIdentifier(this->GetHashTbl()); + IdentPtr pid = nullptr; + if (!this->GetScanner()->LastIdentifierHasEscape()) + { + pid = m_token.GetIdentifier(this->GetHashTbl()); + } - if (wellKnownPropertyPids.let == pid) + if (pid == wellKnownPropertyPids.let) { declarationType = tkLET; goto ParseVarDecl; } - if (wellKnownPropertyPids.async == pid && m_scriptContext->GetConfig()->IsES7AsyncAndAwaitEnabled()) + if (pid == wellKnownPropertyPids.async && m_scriptContext->GetConfig()->IsES7AsyncAndAwaitEnabled()) { // In module export statements, async token is only valid if it's followed by function. // We need to check here because ParseStatement would think 'async = 20' is a var decl. @@ -2903,7 +3239,8 @@ ParseNodePtr Parser::ParseTerm(BOOL fAllowCall, _Out_opt_ BOOL* pfCanAssign /*= nullptr*/, _Inout_opt_ BOOL* pfLikelyPattern /*= nullptr*/, _Out_opt_ bool* pfIsDotOrIndex /*= nullptr*/, - _Inout_opt_ charcount_t *plastRParen /*= nullptr*/) + _Inout_opt_ charcount_t *plastRParen /*= nullptr*/, + _Out_opt_ bool* looseCoalesce /*= nullptr*/) { ParseNodePtr pnode = nullptr; PidRefStack *savedTopAsyncRef = nullptr; @@ -2934,6 +3271,7 @@ ParseNodePtr Parser::ParseTerm(BOOL fAllowCall, iecpLim = this->GetScanner()->IecpLimTok(); if (pid == wellKnownPropertyPids.async && + !this->GetScanner()->LastIdentifierHasEscape() && m_scriptContext->GetConfig()->IsES7AsyncAndAwaitEnabled()) { isAsyncExpr = true; @@ -3010,21 +3348,20 @@ ParseNodePtr Parser::ParseTerm(BOOL fAllowCall, ichLim = this->GetScanner()->IchLimTok(); iecpLim = this->GetScanner()->IecpLimTok(); - if (!m_scriptContext->GetConfig()->IsES6ClassAndExtendsEnabled()) - { - goto LUnknown; - } - this->GetScanner()->Scan(); pid = ParseSuper(!!fAllowCall); isSpecialName = true; + fCanAssign = FALSE; // Super reference and super call need to push a pid ref to 'this' even when not building an AST ReferenceSpecialName(wellKnownPropertyPids._this, ichMin, ichLim); // Super call needs to reference 'new.target' if (pid == wellKnownPropertyPids._superConstructor) { + // super() will write to "this", so track the assignment. + PidRefStack *thisRef = wellKnownPropertyPids._this->GetTopRef(); + thisRef->isAsg = true; ReferenceSpecialName(wellKnownPropertyPids._newTarget, ichMin, ichLim); } @@ -3040,6 +3377,7 @@ ParseNodePtr Parser::ParseTerm(BOOL fAllowCall, this->GetScanner()->Scan(); isSpecialName = true; + fCanAssign = FALSE; goto LIdentifier; @@ -3075,7 +3413,7 @@ ParseNodePtr Parser::ParseTerm(BOOL fAllowCall, // If the token after the right paren is not => or if there was a newline between () and => this is a syntax error if (!IsDoingFastScan() && (m_token.tk != tkDArrow || this->GetScanner()->FHadNewLine())) { - Error(ERRsyntax); + Error(ERRValidIfFollowedBy, _u("Lambda parameter list"), _u("'=>' on the same line")); } if (buildAST) @@ -3095,7 +3433,7 @@ ParseNodePtr Parser::ParseTerm(BOOL fAllowCall, AutoDeferErrorsRestore deferErrorRestore(this); this->m_funcParenExprDepth++; - pnode = ParseExpr(koplNo, &fCanAssign, TRUE, FALSE, nullptr, nullptr /*nameLength*/, nullptr /*pShortNameOffset*/, &term, true, nullptr, plastRParen); + pnode = ParseExpr(koplNo, &fCanAssign, TRUE, FALSE, nullptr, nullptr /*nameLength*/, nullptr /*pShortNameOffset*/, &term, true, nullptr, plastRParen, looseCoalesce); this->m_funcParenExprDepth--; if (buildAST && plastRParen) @@ -3105,6 +3443,11 @@ ParseNodePtr Parser::ParseTerm(BOOL fAllowCall, ChkCurTok(tkRParen, ERRnoRparen); + if (looseCoalesce != nullptr) + { + *looseCoalesce = false; + } + GetCurrentBlock()->blockId = saveCurrBlockId; if (m_token.tk == tkDArrow) { @@ -3145,6 +3488,20 @@ ParseNodePtr Parser::ParseTerm(BOOL fAllowCall, this->GetScanner()->Scan(); break; + case tkBigIntCon: + if (IsStrictMode() && this->GetScanner()->IsOctOrLeadingZeroOnLastTKNumber()) + { + Error(ERRES5NoOctal); + } + + if (buildAST) + { + pnode = CreateBigIntNode(m_token.GetBigInt()); + } + fCanAssign = FALSE; + this->GetScanner()->Scan(); + break; + case tkFltCon: if (IsStrictMode() && this->GetScanner()->IsOctOrLeadingZeroOnLastTKNumber()) { @@ -3222,7 +3579,7 @@ ParseNodePtr Parser::ParseTerm(BOOL fAllowCall, iecpMin = this->GetScanner()->IecpMinTok(); this->GetScanner()->Scan(); - if (m_token.tk == tkDot && m_scriptContext->GetConfig()->IsES6ClassAndExtendsEnabled()) + if (m_token.tk == tkDot) { pid = ParseMetaProperty(tkNEW, ichMin, &fCanAssign); @@ -3231,6 +3588,7 @@ ParseNodePtr Parser::ParseTerm(BOOL fAllowCall, this->GetScanner()->Scan(); isSpecialName = true; + fCanAssign = FALSE; goto LIdentifier; } @@ -3267,14 +3625,11 @@ ParseNodePtr Parser::ParseTerm(BOOL fAllowCall, this->m_funcInArrayDepth = 0; } ChkCurTok(tkRBrack, ERRnoRbrack); - if (!IsES6DestructuringEnabled()) - { - fCanAssign = FALSE; - } - else if (pfLikelyPattern != nullptr && !IsPostFixOperators()) + if (pfLikelyPattern != nullptr && !IsPostFixOperators()) { *pfLikelyPattern = TRUE; } + fCanAssign = FALSE; break; } @@ -3290,14 +3645,11 @@ ParseNodePtr Parser::ParseTerm(BOOL fAllowCall, pnode->ichLim = this->GetScanner()->IchLimTok(); } ChkCurTok(tkRCurly, ERRnoRcurly); - if (!IsES6DestructuringEnabled()) - { - fCanAssign = FALSE; - } - else if (pfLikelyPattern != nullptr && !IsPostFixOperators()) + if (pfLikelyPattern != nullptr && !IsPostFixOperators()) { *pfLikelyPattern = TRUE; } + fCanAssign = FALSE; break; } @@ -3328,22 +3680,16 @@ ParseNodePtr Parser::ParseTerm(BOOL fAllowCall, pnode = ParseFncDeclNoCheckScope(flags, SuperRestrictionState::Disallowed, pNameHint, /* needsPIDOnRCurlyScan */ false, fUnaryOrParen); if (isAsyncExpr) { - pnode->AsParseNodeFnc()->cbMin = iecpMin; - pnode->ichMin = ichMin; + pnode->AsParseNodeFnc()->cbStringMin = iecpMin; + pnode->AsParseNodeFnc()->cbStringLim = pnode->AsParseNodeFnc()->cbLim; } fCanAssign = FALSE; break; } case tkCLASS: - if (m_scriptContext->GetConfig()->IsES6ClassAndExtendsEnabled()) - { - pnode = ParseClassDecl(FALSE, pNameHint, pHintLength, pShortNameOffset); - } - else - { - goto LUnknown; - } + pnode = ParseClassDecl(FALSE, pNameHint, pHintLength, pShortNameOffset); + fCanAssign = FALSE; break; @@ -3354,11 +3700,42 @@ ParseNodePtr Parser::ParseTerm(BOOL fAllowCall, break; case tkIMPORT: - if (m_scriptContext->GetConfig()->IsES6ModuleEnabled() && m_scriptContext->GetConfig()->IsESDynamicImportEnabled()) + if (m_scriptContext->GetConfig()->IsES6ModuleEnabled()) { + ichMin = this->GetScanner()->IchMinTok(); + iecpMin = this->GetScanner()->IecpMinTok(); this->GetScanner()->Scan(); - ChkCurTokNoScan(tkLParen, ERRnoLparen); - pnode = ParseImportCall(); + + switch (m_token.tk) + { + case tkLParen: + if (!m_scriptContext->GetConfig()->IsESDynamicImportEnabled()) + { + goto LUnknown; + } + if (!fAllowCall) + { + Error(ERRTokenAfter, _u("import"), _u("new")); + } + pnode = ParseImportCall(); + break; + case tkDot: + if (!(m_grfscr & fscrIsModuleCode) || !m_scriptContext->GetConfig()->IsESImportMetaEnabled()) + { + goto LUnknown; + } + pid = ParseMetaProperty(tkIMPORT, ichMin, &fCanAssign); + + ichLim = this->GetScanner()->IchLimTok(); + iecpLim = this->GetScanner()->IecpLimTok(); + + this->GetScanner()->Scan(); + isSpecialName = true; + + goto LIdentifier; + default: + Error(ERRsyntax); + } } else { @@ -3390,7 +3767,18 @@ ParseNodePtr Parser::ParseTerm(BOOL fAllowCall, default: LUnknown: - Error(ERRsyntax); + if (m_token.tk == tkNone) + { + Error(ERRInvalidIdentifier, m_token.GetIdentifier(this->GetHashTbl())->Psz(), GetTokenString(GetScanner()->GetPrevious())); + } + else if (m_token.IsKeyword()) + { + Error(ERRKeywordAfter, GetTokenString(m_token.tk), GetTokenString(GetScanner()->GetPrevious())); + } + else + { + Error(ERRTokenAfter, GetTokenString(m_token.tk), GetTokenString(GetScanner()->GetPrevious())); + } break; } @@ -4200,7 +4588,7 @@ template void Parser::ParseComputedName(ParseNodePtr* ppnodeName, { get foo(){ ... }, set bar(arg) { ... } } ***************************************************************************/ template -ParseNodeBin * Parser::ParseMemberGetSet(OpCode nop, LPCOLESTR* ppNameHint) +ParseNodeBin * Parser::ParseMemberGetSet(OpCode nop, LPCOLESTR* ppNameHint, size_t iecpMin, charcount_t ichMin) { ParseNodePtr pnodeName = nullptr; Assert(nop == knopGetMember || nop == knopSetMember); @@ -4296,15 +4684,18 @@ ParseNodeBin * Parser::ParseMemberGetSet(OpCode nop, LPCOLESTR* ppNameHint) ParseNodeFnc * pnodeFnc = ParseFncDeclNoCheckScope(flags, SuperRestrictionState::PropertyAllowed, *ppNameHint, /*needsPIDOnRCurlyScan*/ false); + pnodeFnc->cbStringMin = iecpMin; + pnodeFnc->cbStringLim = pnodeFnc->cbLim; + if (isComputedName) { pnodeFnc->SetHasComputedName(); } pnodeFnc->SetHasHomeObj(); + pnodeFnc->SetIsAccessor(); if (buildAST) { - pnodeFnc->SetIsAccessor(); return CreateBinNode(nop, pnodeName, pnodeFnc); } else @@ -4320,6 +4711,7 @@ template ParseNodePtr Parser::ParseMemberList(LPCOLESTR pNameHint, uint32* pNameHintLength, tokens declarationType) { ParseNodeBin * pnodeArg = nullptr; + ParseNodePtr pnodeEllipsis = nullptr; ParseNodePtr pnodeName = nullptr; ParseNodePtr pnodeList = nullptr; ParseNodePtr *lastNodeRef = nullptr; @@ -4327,9 +4719,10 @@ ParseNodePtr Parser::ParseMemberList(LPCOLESTR pNameHint, uint32* pNameHintLengt uint32 fullNameHintLength = pNameHintLength ? *pNameHintLength : 0; uint32 shortNameOffset = 0; bool isProtoDeclared = false; + bool seenRest = false; // we get declaration tkLCurly - when the possible object pattern found under the expression. - bool isObjectPattern = (declarationType == tkVAR || declarationType == tkLET || declarationType == tkCONST || declarationType == tkLCurly) && IsES6DestructuringEnabled(); + bool isObjectPattern = (declarationType == tkVAR || declarationType == tkLET || declarationType == tkCONST || declarationType == tkLCurly); // Check for an empty list if (tkRCurly == m_token.tk) @@ -4351,9 +4744,9 @@ ParseNodePtr Parser::ParseMemberList(LPCOLESTR pNameHint, uint32* pNameHintLengt } #endif bool isAsyncMethod = false; - charcount_t ichMin = 0; - size_t iecpMin = 0; - if (m_token.tk == tkID && m_token.GetIdentifier(this->GetHashTbl()) == wellKnownPropertyPids.async && m_scriptContext->GetConfig()->IsES7AsyncAndAwaitEnabled()) + charcount_t ichMin = this->GetScanner()->IchMinTok(); + size_t iecpMin = this->GetScanner()->IecpMinTok(); + if (CheckContextualKeyword(wellKnownPropertyPids.async) && m_scriptContext->GetConfig()->IsES7AsyncAndAwaitEnabled()) { RestorePoint parsedAsync; this->GetScanner()->Capture(&parsedAsync); @@ -4376,9 +4769,9 @@ ParseNodePtr Parser::ParseMemberList(LPCOLESTR pNameHint, uint32* pNameHintLengt ushort fncDeclFlags = fFncNoName | fFncMethod; if (isGenerator) { - if (isAsyncMethod) + if (isAsyncMethod && !m_scriptContext->GetConfig()->IsES2018AsyncIterationEnabled()) { - Error(ERRsyntax); + Error(ERRExperimental); } // Include star character in the function extents @@ -4394,6 +4787,8 @@ ParseNodePtr Parser::ParseMemberList(LPCOLESTR pNameHint, uint32* pNameHintLengt charcount_t idHintIchMin = static_cast(this->GetScanner()->IecpMinTok()); charcount_t idHintIchLim = static_cast(this->GetScanner()->IecpLimTok()); bool wrapInBrackets = false; + bool seenEllipsis = false; + bool maybeKeyword = false; switch (m_token.tk) { default: @@ -4406,6 +4801,7 @@ ParseNodePtr Parser::ParseMemberList(LPCOLESTR pNameHint, uint32* pNameHintLengt // fall-through case tkID: pidHint = m_token.GetIdentifier(this->GetHashTbl()); + maybeKeyword = !this->GetScanner()->LastIdentifierHasEscape(); if (buildAST) { pnodeName = CreateStrNode(pidHint); @@ -4464,6 +4860,17 @@ ParseNodePtr Parser::ParseMemberList(LPCOLESTR pNameHint, uint32* pNameHintLengt isComputedName = true; break; + + case tkEllipsis: + if (CONFIG_FLAG(ES2018ObjectRestSpread)) + { + seenEllipsis = true; + } + else + { + Error(ERRnoMemberIdent); + } + break; } if (pFullNameHint == nullptr) @@ -4481,9 +4888,13 @@ ParseNodePtr Parser::ParseMemberList(LPCOLESTR pNameHint, uint32* pNameHintLengt } RestorePoint atPid; - this->GetScanner()->Capture(&atPid); - this->GetScanner()->ScanForcingPid(); + // Only move to next token if spread op was not seen + if (!seenEllipsis) + { + this->GetScanner()->Capture(&atPid); + this->GetScanner()->ScanForcingPid(); + } if (isGenerator && m_token.tk != tkLParen) { @@ -4492,7 +4903,7 @@ ParseNodePtr Parser::ParseMemberList(LPCOLESTR pNameHint, uint32* pNameHintLengt if (tkColon == m_token.tk) { - // It is a syntax error is the production of the form __proto__ : <> occurs more than once. From B.3.1 in spec. + // It is a syntax error if the production of the form __proto__ : <> occurs more than once. From B.3.1 in spec. // Note that previous scan is important because only after that we can determine we have a variable. if (!isComputedName && pidHint == wellKnownPropertyPids.__proto__) { @@ -4540,7 +4951,7 @@ ParseNodePtr Parser::ParseMemberList(LPCOLESTR pNameHint, uint32* pNameHintLengt if (fLikelyPattern) { - pnodeExpr = ParseDestructuredVarDecl(declarationType, declarationType != tkLCurly, nullptr/* *hasSeenRest*/, false /*topLevel*/, false /*allowEmptyExpression*/); + pnodeExpr = ParseDestructuredVarDecl(declarationType, declarationType != tkLCurly, &seenRest/* *hasSeenRest*/, false /*topLevel*/, false /*allowEmptyExpression*/, true /*isObjectPattern*/); if (m_token.tk != tkComma && m_token.tk != tkRCurly) { if (m_token.IsOperator()) @@ -4564,7 +4975,7 @@ ParseNodePtr Parser::ParseMemberList(LPCOLESTR pNameHint, uint32* pNameHintLengt } else { - pnodeExpr = ParseDestructuredVarDecl(declarationType, declarationType != tkLCurly, nullptr/* *hasSeenRest*/, false /*topLevel*/, false /*allowEmptyExpression*/); + pnodeExpr = ParseDestructuredVarDecl(declarationType, declarationType != tkLCurly, &seenRest/* *hasSeenRest*/, false /*topLevel*/, false /*allowEmptyExpression*/, true /*isObjectPattern*/); if (m_token.tk != tkComma && m_token.tk != tkRCurly) { if (m_token.IsOperator()) @@ -4579,14 +4990,22 @@ ParseNodePtr Parser::ParseMemberList(LPCOLESTR pNameHint, uint32* pNameHintLengt { pnodeExpr = ParseExpr(koplCma, nullptr/*pfCantAssign*/, TRUE/*fAllowIn*/, FALSE/*fAllowEllipsis*/, pFullNameHint, &fullNameHintLength, &shortNameOffset); - if (pnodeExpr && pnodeExpr->nop == knopFncDecl) + ParseNodeFnc* funcNode = nullptr; + if (pnodeExpr) { - ParseNodeFnc* funcNode = pnodeExpr->AsParseNodeFnc(); - if (isComputedName) + if (pnodeExpr->nop == knopFncDecl) + { + funcNode = pnodeExpr->AsParseNodeFnc(); + funcNode->SetHasHomeObj(); + } + else if (pnodeExpr->nop == knopClassDecl) + { + funcNode = pnodeExpr->AsParseNodeClass()->pnodeConstructor; + } + if (funcNode && funcNode->pnodeName == nullptr && isComputedName) { funcNode->SetHasComputedName(); } - funcNode->SetHasHomeObj(); } } #if DEBUG @@ -4620,13 +5039,15 @@ ParseNodePtr Parser::ParseMemberList(LPCOLESTR pNameHint, uint32* pNameHintLengt if (isAsyncMethod || isGenerator) { - pnodeFnc->cbMin = iecpMin; - pnodeFnc->ichMin = ichMin; + pnodeFnc->cbStringMin = iecpMin; + pnodeFnc->cbStringLim = pnodeFnc->cbLim; } if (isComputedName) { pnodeFnc->SetHasComputedName(); + pnodeFnc->cbStringMin = iecpMin; + pnodeFnc->cbStringLim = pnodeFnc->cbLim; } pnodeFnc->SetHasHomeObj(); @@ -4635,13 +5056,29 @@ ParseNodePtr Parser::ParseMemberList(LPCOLESTR pNameHint, uint32* pNameHintLengt pnodeArg = CreateBinNode(knopMember, pnodeName, pnodeFnc); } } - else if (nullptr != pidHint) //Its either tkID/tkStrCon/tkFloatCon/tkIntCon + else if (seenEllipsis) + { + if (!isObjectPattern) + { + pnodeEllipsis = ParseExpr(koplCma, nullptr, TRUE, /* fAllowEllipsis */ TRUE); + } + else + { + pnodeEllipsis = ParseDestructuredVarDecl(declarationType, declarationType != tkLCurly, &seenRest/* *hasSeenRest*/, false /*topLevel*/, false /*allowEmptyExpression*/, true /*isObjectPattern*/); + } + if (buildAST) + { + this->CheckArguments(pnodeEllipsis); + } + } + else if (nullptr != pidHint) //It's either tkID/tkStrCon/tkFloatCon/tkIntCon { Assert(pidHint->Psz() != nullptr); + // get/set are only pseudo keywords when they are identifiers (i.e. not strings) if ((pidHint == wellKnownPropertyPids.get || pidHint == wellKnownPropertyPids.set) && - // get/set are only pseudo keywords when they are identifiers (i.e. not strings) - tkHint.tk == tkID && NextTokenIsPropertyNameStart()) + maybeKeyword && + NextTokenIsPropertyNameStart()) { if (isObjectPattern) { @@ -4651,7 +5088,7 @@ ParseNodePtr Parser::ParseMemberList(LPCOLESTR pNameHint, uint32* pNameHintLengt LPCOLESTR pNameGetOrSet = nullptr; OpCode op = pidHint == wellKnownPropertyPids.get ? knopGetMember : knopSetMember; - pnodeArg = ParseMemberGetSet(op, &pNameGetOrSet); + pnodeArg = ParseMemberGetSet(op, &pNameGetOrSet, iecpMin, ichMin); if (CONFIG_FLAG(UseFullName) && buildAST && pnodeArg->pnode2->nop == knopFncDecl) { @@ -4697,7 +5134,7 @@ ParseNodePtr Parser::ParseMemberList(LPCOLESTR pNameHint, uint32* pNameHintLengt if (isObjectPattern) { this->GetScanner()->SeekTo(atPid); - pnodeIdent = ParseDestructuredVarDecl(declarationType, declarationType != tkLCurly, nullptr/* *hasSeenRest*/, false /*topLevel*/, false /*allowEmptyExpression*/); + pnodeIdent = ParseDestructuredVarDecl(declarationType, declarationType != tkLCurly, &seenRest/* *hasSeenRest*/, false /*topLevel*/, false /*allowEmptyExpression*/, true /*isObjectPattern*/); if (m_token.tk != tkComma && m_token.tk != tkRCurly) { @@ -4738,16 +5175,24 @@ ParseNodePtr Parser::ParseMemberList(LPCOLESTR pNameHint, uint32* pNameHintLengt if (buildAST) { - Assert(pnodeArg->pnode2 != nullptr); - if (pnodeArg->pnode2->nop == knopFncDecl) + if (seenEllipsis) { - Assert(fullNameHintLength >= shortNameOffset); - ParseNodeFnc * pnodeFunc = pnodeArg->pnode2->AsParseNodeFnc(); - pnodeFunc->hint = pFullNameHint; - pnodeFunc->hintLength = fullNameHintLength; - pnodeFunc->hintOffset = shortNameOffset; + Assert(pnodeEllipsis != nullptr); + AddToNodeListEscapedUse(&pnodeList, &lastNodeRef, pnodeEllipsis); + } + else + { + Assert(pnodeArg->pnode2 != nullptr); + if (pnodeArg->pnode2->nop == knopFncDecl) + { + Assert(fullNameHintLength >= shortNameOffset); + ParseNodeFnc * pnodeFunc = pnodeArg->pnode2->AsParseNodeFnc(); + pnodeFunc->hint = pFullNameHint; + pnodeFunc->hintLength = fullNameHintLength; + pnodeFunc->hintOffset = shortNameOffset; + } + AddToNodeListEscapedUse(&pnodeList, &lastNodeRef, pnodeArg); } - AddToNodeListEscapedUse(&pnodeList, &lastNodeRef, pnodeArg); } pidHint = nullptr; pFullNameHint = nullptr; @@ -4760,6 +5205,10 @@ ParseNodePtr Parser::ParseMemberList(LPCOLESTR pNameHint, uint32* pNameHintLengt { break; } + if (seenRest) // Rest must be in the last position. + { + Error(ERRDestructRestLast); + } } m_hasDeferredShorthandInitError = m_hasDeferredShorthandInitError || hasDeferredInitError; @@ -4915,6 +5364,8 @@ ParseNodeFnc * Parser::ParseFncDeclInternal(ushort flags, LPCOLESTR pNameHint, c pnodeFnc->nestedFuncEscapes = false; pnodeFnc->cbMin = this->GetScanner()->IecpMinTok(); + pnodeFnc->cbStringMin = pnodeFnc->cbMin; + pnodeFnc->cbStringLim = pnodeFnc->cbLim; pnodeFnc->functionId = (*m_nextFunctionId)++; pnodeFnc->superRestrictionState = superRestrictionState; @@ -4951,6 +5402,13 @@ ParseNodeFnc * Parser::ParseFncDeclInternal(ushort flags, LPCOLESTR pNameHint, c pnodeFnc->SetIsClassConstructor((flags & fFncClassConstructor) != 0); pnodeFnc->SetIsBaseClassConstructor((flags & fFncBaseClassConstructor) != 0); pnodeFnc->SetHomeObjLocation(Js::Constants::NoRegister); + pnodeFnc->SetHasNonThisStmt(pnodeFnc->IsClassConstructor()); + + if (this->m_currentScope && this->m_currentScope->GetScopeType() == ScopeType_Parameter) + { + pnodeFnc->SetIsDeclaredInParamScope(); + this->m_currentScope->SetHasNestedParamFunc(); + } if (this->m_currentScope && this->m_currentScope->GetScopeType() == ScopeType_Parameter) { @@ -5025,7 +5483,7 @@ ParseNodeFnc * Parser::ParseFncDeclInternal(ushort flags, LPCOLESTR pNameHint, c { // Class member methods have optional separators. We need to check whether we are // getting the IchLim of the correct token. - Assert(this->GetScanner()->m_tkPrevious == tkRCurly && needScanRCurly); + Assert(this->GetScanner()->GetPrevious() == tkRCurly && needScanRCurly); this->m_funcInArray += this->GetScanner()->IchMinTok() - /*tkRCurly*/ 1 - ichMin; } @@ -5238,15 +5696,6 @@ void Parser::ParseFncDeclHelper(ParseNodeFnc * pnodeFnc, LPCOLESTR pNameHint, us uint uCanDeferSave = m_grfscr & fscrCanDeferFncParse; uint uDeferSave = m_grfscr & fscrWillDeferFncParse; - if (flags & fFncClassMember) - { - // Disable deferral on class members or other construct with unusual text bounds - // as these are usually trivial, and re-parsing is problematic. - // NOTE: It is probably worth supporting these cases for memory and load-time purposes, - // especially as they become more and more common. - m_grfscr &= ~(fscrCanDeferFncParse | fscrWillDeferFncParse); - } - bool isTopLevelDeferredFunc = false; #if ENABLE_BACKGROUND_PARSING @@ -5384,10 +5833,14 @@ void Parser::ParseFncDeclHelper(ParseNodeFnc * pnodeFnc, LPCOLESTR pNameHint, us m_reparsingLambdaParams = true; } - DeferredFunctionStub* savedDeferredStub = m_currDeferredStub; - m_currDeferredStub = nullptr; + uint savedStubCount = m_currDeferredStubCount; + DeferredFunctionStub* savedStub = m_currDeferredStub; + ShiftCurrDeferredStubToChildFunction(pnodeFnc, pnodeFncParent); + this->ParseFncFormals(pnodeFnc, pnodeFncParent, flags, isTopLevelDeferredFunc); - m_currDeferredStub = savedDeferredStub; + + m_currDeferredStub = savedStub; + m_currDeferredStubCount = savedStubCount; m_reparsingLambdaParams = fLambdaParamsSave; } @@ -5510,7 +5963,7 @@ void Parser::ParseFncDeclHelper(ParseNodeFnc * pnodeFnc, LPCOLESTR pNameHint, us // this after verifying there was a => token. Otherwise we would throw the wrong error. if (hadNewLine) { - Error(ERRsyntax); + Error(ERRValidIfFollowedBy, _u("Lambda parameter list"), _u("'=>' on the same line")); } } @@ -5547,13 +6000,10 @@ void Parser::ParseFncDeclHelper(ParseNodeFnc * pnodeFnc, LPCOLESTR pNameHint, us } uint savedStubCount = m_currDeferredStubCount; DeferredFunctionStub* savedStub = m_currDeferredStub; - if (pnodeFnc->IsNested() && pnodeFncSave != nullptr && m_currDeferredStub != nullptr && pnodeFncSave->ichMin != pnodeFnc->ichMin) - { - DeferredFunctionStub* childStub = m_currDeferredStub + (pnodeFncSave->nestedCount - 1); - m_currDeferredStubCount = childStub->nestedCount; - m_currDeferredStub = childStub->deferredStubs; - } + ShiftCurrDeferredStubToChildFunction(pnodeFnc, pnodeFncSave); + this->FinishFncDecl(pnodeFnc, pNameHint, fLambda, skipFormals, fAllowIn); + m_currDeferredStub = savedStub; m_currDeferredStubCount = savedStubCount; } @@ -5787,7 +6237,7 @@ void Parser::ParseTopLevelDeferredFunc(ParseNodeFnc * pnodeFnc, ParseNodeFnc * p { ParseExpressionLambdaBody(pnodeFnc, fAllowIn); } - else if (pnodeFncParent != nullptr && m_currDeferredStub != nullptr && !pnodeFncParent->HasDefaultArguments()) + else if (pnodeFncParent != nullptr && m_currDeferredStub != nullptr) { // We've already parsed this function body for syntax errors on the initial parse of the script. // We have information that allows us to skip it, so do so. @@ -5797,8 +6247,11 @@ void Parser::ParseTopLevelDeferredFunc(ParseNodeFnc * pnodeFnc, ParseNodeFnc * p Assert(pnodeFnc->ichMin == stub->ichMin || (stub->fncFlags & kFunctionIsAsync) == kFunctionIsAsync - || ((stub->fncFlags & kFunctionIsGenerator) == kFunctionIsGenerator && (stub->fncFlags & kFunctionIsMethod) == kFunctionIsMethod)); - + || ((stub->fncFlags & kFunctionIsMethod) == kFunctionIsMethod && ( + (stub->fncFlags & kFunctionIsAccessor) == kFunctionIsAccessor + || (stub->fncFlags & kFunctionIsGenerator) == kFunctionIsGenerator + || (stub->fncFlags & kFunctionHasComputedName) == kFunctionHasComputedName + ))); if (stub->fncFlags & kFunctionCallsEval) { this->MarkEvalCaller(); @@ -5811,6 +6264,11 @@ void Parser::ParseTopLevelDeferredFunc(ParseNodeFnc * pnodeFnc, ParseNodeFnc * p this->GetScanner()->SeekTo(stub->restorePoint, m_nextFunctionId); + // If we already incremented m_nextFunctionId when we saw some functions in the parameter scope + // (in default argument assignment, for example), we want to remove the count of those so the + // function ids following the one we are skipping right now are correct. + *m_nextFunctionId -= pnodeFnc->nestedCount; + for (uint i = 0; i < stub->capturedNameCount; i++) { int stringId = stub->capturedNameSerializedIds[i]; @@ -6071,7 +6529,7 @@ bool Parser::FastScanFormalsAndBody() { int opl; OpCode nop; - tokens tkPrev = this->GetScanner()->m_tkPrevious; + tokens tkPrev = this->GetScanner()->GetPrevious(); if ((this->GetHashTbl()->TokIsBinop(tkPrev, &opl, &nop) && nop != knopNone) || (this->GetHashTbl()->TokIsUnop(tkPrev, &opl, &nop) && nop != knopNone && @@ -6262,7 +6720,10 @@ void Parser::ParseFncName(ParseNodeFnc * pnodeFnc, ushort flags, IdentPtr* pFncN { if (pnodeFnc->IsGenerator()) { - Error(ERRsyntax); + if (!m_scriptContext->GetConfig()->IsES2018AsyncIterationEnabled()) + { + Error(ERRExperimental); + } } pnodeFnc->SetIsAsync(); } @@ -6420,15 +6881,23 @@ void Parser::ParseFncFormals(ParseNodeFnc * pnodeFnc, ParseNodeFnc * pnodeParent for (Js::ArgSlot argPos = 0; ; ++argPos) { bool isBindingPattern = false; + if (m_scriptContext->GetConfig()->IsES6RestEnabled() && m_token.tk == tkEllipsis) { + if (flags & fFncOneArg) + { + // The parameter of a setter cannot be a rest parameter. + Error(ERRUnexpectedEllipsis); + } + // Possible rest parameter this->GetScanner()->Scan(); seenRestParameter = true; } + if (m_token.tk != tkID) { - if (IsES6DestructuringEnabled() && IsPossiblePatternStart()) + if (IsPossiblePatternStart()) { // Mark that the function has a non simple parameter list before parsing the pattern since the pattern can have function definitions. this->GetCurrentFunctionNode()->SetHasNonSimpleParameterList(); @@ -6478,10 +6947,20 @@ void Parser::ParseFncFormals(ParseNodeFnc * pnodeFnc, ParseNodeFnc * pnodeParent Assert(pnodePattern); paramPattern = CreateParamPatternNode(pnodePattern); } - // Linking the current formal parameter (which is pattern parameter) with other formals. - *m_ppnodeVar = paramPattern; - paramPattern->pnodeNext = nullptr; - m_ppnodeVar = ¶mPattern->pnodeNext; + + if (seenRestParameter) + { + Assert(pnodeFnc->pnodeRest == nullptr); + pnodeFnc->pnodeRest = paramPattern; + } + else + { + // Linking the current formal parameter (which is pattern parameter) + // with other formals. + *m_ppnodeVar = paramPattern; + paramPattern->pnodeNext = nullptr; + m_ppnodeVar = ¶mPattern->pnodeNext; + } } isBindingPattern = true; @@ -6503,22 +6982,21 @@ void Parser::ParseFncFormals(ParseNodeFnc * pnodeFnc, ParseNodeFnc * pnodeParent if (seenRestParameter) { this->GetCurrentFunctionNode()->SetHasNonSimpleParameterList(); - if (flags & fFncOneArg) - { - // The parameter of a setter cannot be a rest parameter. - Error(ERRUnexpectedEllipsis); - } pnodeT = CreateDeclNode(knopVarDecl, pid, STFormal, false); pnodeT->sym->SetIsNonSimpleParameter(true); if (buildAST) { // When only validating formals, we won't have a function node. + Assert(pnodeFnc->pnodeRest == nullptr); pnodeFnc->pnodeRest = pnodeT; if (!isNonSimpleParameterList) { // This is the first non-simple parameter we've seen. We need to go back // and set the Symbols of all previous parameters. - MapFormalsWithoutRest(m_currentNodeFunc, [&](ParseNodePtr pnodeArg) { pnodeArg->AsParseNodeVar()->sym->SetIsNonSimpleParameter(true); }); + MapFormalsWithoutRest(m_currentNodeFunc, [](ParseNodePtr pnodeArg) + { + pnodeArg->AsParseNodeVar()->sym->SetIsNonSimpleParameter(true); + }); } } @@ -6546,12 +7024,7 @@ void Parser::ParseFncFormals(ParseNodeFnc * pnodeFnc, ParseNodeFnc * pnodeParent this->GetScanner()->Scan(); - if (seenRestParameter && m_token.tk != tkRParen && m_token.tk != tkAsg) - { - Error(ERRRestLastArg); - } - - if (m_token.tk == tkAsg && m_scriptContext->GetConfig()->IsES6DefaultArgsEnabled()) + if (m_token.tk == tkAsg) { if (seenRestParameter && m_scriptContext->GetConfig()->IsES6RestEnabled()) { @@ -6641,6 +7114,11 @@ void Parser::ParseFncFormals(ParseNodeFnc * pnodeFnc, ParseNodeFnc * pnodeParent this->GetScanner()->Scan(); + if (seenRestParameter) + { + Error(ERRRestLastArg); + } + if (m_token.tk == tkRParen && m_scriptContext->GetConfig()->IsES7TrailingCommaEnabled()) { break; @@ -6676,6 +7154,8 @@ template ParseNodePtr Parser::GenerateModuleFunctionWrapper() { ParseNodePtr pnodeFnc = ParseFncDeclNoCheckScope(fFncModule, SuperRestrictionState::Disallowed, nullptr, /* needsPIDOnRCurlyScan */ false, /* fUnaryOrParen */ true); + // mark modules as generators after parsing - this is to enable cross-module hoisting of exported functions + pnodeFnc->AsParseNodeFnc()->SetIsGenerator(true); ParseNodePtr callNode = CreateCallNode(knopCall, pnodeFnc, nullptr); return callNode; @@ -6690,14 +7170,12 @@ ParseNodeFnc * Parser::GenerateEmptyConstructor(bool extends) pnodeFnc = CreateAllowDeferNodeForOpT(); pnodeFnc->SetNested(NULL != m_currentNodeFunc); pnodeFnc->SetStrictMode(); - pnodeFnc->SetDeclaration(TRUE); pnodeFnc->SetIsMethod(TRUE); pnodeFnc->SetIsClassMember(TRUE); pnodeFnc->SetIsClassConstructor(TRUE); pnodeFnc->SetIsBaseClassConstructor(!extends); pnodeFnc->SetHasNonThisStmt(); pnodeFnc->SetIsGeneratedDefault(TRUE); - pnodeFnc->SetHasComputedName(); pnodeFnc->SetHasHomeObj(); pnodeFnc->SetHomeObjLocation(Js::Constants::NoRegister); @@ -6705,6 +7183,8 @@ ParseNodeFnc * Parser::GenerateEmptyConstructor(bool extends) pnodeFnc->ichMin = this->GetScanner()->IchMinTok(); pnodeFnc->cbLim = this->GetScanner()->IecpLimTok(); pnodeFnc->cbMin = this->GetScanner()->IecpMinTok(); + pnodeFnc->cbStringMin = pnodeFnc->cbMin; + pnodeFnc->cbStringLim = pnodeFnc->cbLim; pnodeFnc->lineNumber = this->GetScanner()->LineCur(); pnodeFnc->functionId = (*m_nextFunctionId); @@ -6852,7 +7332,6 @@ void Parser::ParseExpressionLambdaBody(ParseNodeFnc * pnodeLambda, bool fAllowIn // Pushing a statement node with PushStmt<>() normally does this initialization // but do it here manually since we know there is no outer statement node. pnodeRet->grfnop = 0; - pnodeRet->pnodeOuter = nullptr; pnodeLambda->ichLim = max(pnodeRet->ichLim, lastRParen); pnodeLambda->cbLim = this->GetScanner()->IecpLimTokPrevious(); @@ -6912,7 +7391,7 @@ void Parser::CheckStrictFormalParameters() this->GetScanner()->Scan(); - if (m_token.tk == tkAsg && m_scriptContext->GetConfig()->IsES6DefaultArgsEnabled()) + if (m_token.tk == tkAsg) { this->GetScanner()->Scan(); // We can avoid building the AST since we are just checking the default expression. @@ -7005,7 +7484,7 @@ void Parser::FinishFncNode(ParseNodeFnc * pnodeFnc, bool fAllowIn) for (;;) { this->GetScanner()->Scan(); - if (m_token.GetIdentifier(this->GetHashTbl()) == wellKnownPropertyPids.async) + if (CheckContextualKeyword(wellKnownPropertyPids.async)) { Assert(pnodeFnc->IsAsync()); continue; @@ -7036,7 +7515,7 @@ void Parser::FinishFncNode(ParseNodeFnc * pnodeFnc, bool fAllowIn) Assert(pnodeFnc->IsGenerator()); this->GetScanner()->ScanNoKeywords(); } - if (fLambda && m_token.tk == tkID && m_token.GetIdentifier(this->GetHashTbl()) == wellKnownPropertyPids.async) + if (fLambda && CheckContextualKeyword(wellKnownPropertyPids.async)) { Assert(pnodeFnc->IsAsync()); this->GetScanner()->ScanNoKeywords(); @@ -7375,8 +7854,6 @@ ParseNodeClass * Parser::ParseClassDecl(BOOL isDeclaration, LPCOLESTR pNameHint, ParseNodePtr pnodeExtends = nullptr; ParseNodePtr pnodeMembers = nullptr; ParseNodePtr *lastMemberNodeRef = nullptr; - ParseNodePtr pnodeStaticMembers = nullptr; - ParseNodePtr *lastStaticMemberNodeRef = nullptr; uint32 nameHintLength = pHintLength ? *pHintLength : 0; uint32 nameHintOffset = pShortNameOffset ? *pShortNameOffset : 0; @@ -7393,6 +7870,9 @@ ParseNodeClass * Parser::ParseClassDecl(BOOL isDeclaration, LPCOLESTR pNameHint, cbMinConstructor = this->GetScanner()->IecpMinTok(); } + BOOL strictSave = m_fUseStrictMode; + m_fUseStrictMode = TRUE; + this->GetScanner()->Scan(); if (m_token.tk == tkID) { @@ -7409,9 +7889,6 @@ ParseNodeClass * Parser::ParseClassDecl(BOOL isDeclaration, LPCOLESTR pNameHint, GetCurrentFunctionNode()->grfpn |= PNodeFlags::fpnArguments_overriddenByDecl; } - BOOL strictSave = m_fUseStrictMode; - m_fUseStrictMode = TRUE; - ParseNodeVar * pnodeDeclName = nullptr; if (isDeclaration) { @@ -7489,18 +7966,19 @@ ParseNodeClass * Parser::ParseClassDecl(BOOL isDeclaration, LPCOLESTR pNameHint, } ushort fncDeclFlags = fFncNoName | fFncMethod | fFncClassMember; - charcount_t ichMin = 0; - size_t iecpMin = 0; + charcount_t ichMin = this->GetScanner()->IchMinTok(); + size_t iecpMin = this->GetScanner()->IecpMinTok(); ParseNodePtr pnodeMemberName = nullptr; IdentPtr pidHint = nullptr; IdentPtr memberPid = nullptr; + bool maybeAccessor = false; LPCOLESTR pMemberNameHint = nullptr; - uint32 memberNameHintLength = 0; - uint32 memberNameOffset = 0; + uint32 memberNameHintLength = 0; + uint32 memberNameOffset = 0; bool isComputedName = false; bool isAsyncMethod = false; - if (m_token.tk == tkID && m_token.GetIdentifier(this->GetHashTbl()) == wellKnownPropertyPids.async && m_scriptContext->GetConfig()->IsES7AsyncAndAwaitEnabled()) + if (CheckContextualKeyword(wellKnownPropertyPids.async) && m_scriptContext->GetConfig()->IsES7AsyncAndAwaitEnabled()) { RestorePoint parsedAsync; this->GetScanner()->Capture(&parsedAsync); @@ -7536,6 +8014,7 @@ ParseNodeClass * Parser::ParseClassDecl(BOOL isDeclaration, LPCOLESTR pNameHint, } else // not computed name { + maybeAccessor = !this->GetScanner()->LastIdentifierHasEscape(); memberPid = this->ParseClassPropertyName(&pidHint); if (pidHint) { @@ -7591,27 +8070,26 @@ ParseNodeClass * Parser::ParseClassDecl(BOOL isDeclaration, LPCOLESTR pNameHint, pnodeConstructor->hintOffset = constructorShortNameHintOffset; pnodeConstructor->pid = pnodeName && pnodeName->pid ? pnodeName->pid : wellKnownPropertyPids.constructor; pnodeConstructor->SetHasNonThisStmt(); - pnodeConstructor->SetHasComputedName(); pnodeConstructor->SetHasHomeObj(); } else { ParseNodePtr pnodeMember = nullptr; - - bool isMemberNamedGetOrSet = false; RestorePoint beginMethodName; this->GetScanner()->Capture(&beginMethodName); - if (memberPid == wellKnownPropertyPids.get || memberPid == wellKnownPropertyPids.set) + + if (maybeAccessor && (memberPid == wellKnownPropertyPids.get || memberPid == wellKnownPropertyPids.set)) { this->GetScanner()->ScanForcingPid(); } + if (m_token.tk == tkLParen) { this->GetScanner()->SeekTo(beginMethodName); - isMemberNamedGetOrSet = true; + maybeAccessor = false; } - if ((memberPid == wellKnownPropertyPids.get || memberPid == wellKnownPropertyPids.set) && !isMemberNamedGetOrSet) + if (maybeAccessor && (memberPid == wellKnownPropertyPids.get || memberPid == wellKnownPropertyPids.set)) { bool isGetter = (memberPid == wellKnownPropertyPids.get); @@ -7672,10 +8150,11 @@ ParseNodeClass * Parser::ParseClassDecl(BOOL isDeclaration, LPCOLESTR pNameHint, fncDeclFlags |= fFncAsync; } pnodeFnc = ParseFncDeclNoCheckScope(fncDeclFlags, SuperRestrictionState::PropertyAllowed, pidHint ? pidHint->Psz() : nullptr, /* needsPIDOnRCurlyScan */ true); - if (isAsyncMethod) + + if (isAsyncMethod || isGenerator || isComputedName) { - pnodeFnc->cbMin = iecpMin; - pnodeFnc->ichMin = ichMin; + pnodeFnc->cbStringMin = iecpMin; + pnodeFnc->cbStringLim = pnodeFnc->cbLim; } } pnodeFnc->SetIsStaticMember(isStatic); @@ -7700,7 +8179,7 @@ ParseNodeClass * Parser::ParseClassDecl(BOOL isDeclaration, LPCOLESTR pNameHint, pnodeMember->AsParseNodeBin()->pnode2->AsParseNodeFnc()->hintOffset = memberNameOffset; pnodeMember->AsParseNodeBin()->pnode2->AsParseNodeFnc()->pid = memberPid; // Short name - AddToNodeList(isStatic ? &pnodeStaticMembers : &pnodeMembers, isStatic ? &lastStaticMemberNodeRef : &lastMemberNodeRef, pnodeMember); + AddToNodeList(&pnodeMembers, &lastMemberNodeRef, pnodeMember); } } } @@ -7745,10 +8224,8 @@ ParseNodeClass * Parser::ParseClassDecl(BOOL isDeclaration, LPCOLESTR pNameHint, if (buildAST) { - pnodeConstructor->cbMin = cbMinConstructor; - pnodeConstructor->cbLim = cbLimConstructor; - pnodeConstructor->ichMin = pnodeClass->ichMin; - pnodeConstructor->ichLim = pnodeClass->ichLim; + pnodeConstructor->cbStringMin = cbMinConstructor; + pnodeConstructor->cbStringLim = cbLimConstructor; PopFuncBlockScope(ppnodeScopeSave, ppnodeExprScopeSave); @@ -7757,7 +8234,6 @@ ParseNodeClass * Parser::ParseClassDecl(BOOL isDeclaration, LPCOLESTR pNameHint, pnodeClass->pnodeConstructor = pnodeConstructor; pnodeClass->pnodeExtends = pnodeExtends; pnodeClass->pnodeMembers = pnodeMembers; - pnodeClass->pnodeStaticMembers = pnodeStaticMembers; pnodeClass->isDefaultModuleExport = false; } FinishParseBlock(pnodeBlock); @@ -8338,7 +8814,8 @@ ParseNodePtr Parser::ParseExpr(int oplMin, _Inout_opt_ IdentToken* pToken, bool fUnaryOrParen, _Inout_opt_ bool* pfLikelyPattern, - _Inout_opt_ charcount_t *plastRParen) + _Inout_opt_ charcount_t *plastRParen, + _Out_opt_ bool* looseCoalesce) { Assert(pToken == nullptr || pToken->tk == tkNone); // Must be empty initially int opl; @@ -8354,6 +8831,7 @@ ParseNodePtr Parser::ParseExpr(int oplMin, uint32 hintLength = 0; uint32 hintOffset = 0; BOOL fLikelyPattern = FALSE; + bool localCoalesce = false; ParserState parserState; @@ -8416,7 +8894,14 @@ ParseNodePtr Parser::ParseExpr(int oplMin, // is not a grammar production outside of async functions. // // Further, await expressions are disallowed within parameter scopes. - Error(ERRBadAwait); + if (IsTopLevelModuleFunc()) + { + MakeModuleAsync(); + } + else + { + Error(ERRBadAwait); + } } } @@ -8463,7 +8948,7 @@ ParseNodePtr Parser::ParseExpr(int oplMin, ? !PHASE_OFF_RAW(Js::EarlyReferenceErrorsPhase, m_sourceContextInfo->sourceContextId, GetCurrentFunctionNode()->functionId) : !PHASE_OFF1(Js::EarlyReferenceErrorsPhase))) { - Error(JSERR_CantAssignTo); + Error(ERRInvalidAsgTarget); } TrackAssignment(pnodeT, &operandToken); if (buildAST) @@ -8504,7 +8989,8 @@ ParseNodePtr Parser::ParseExpr(int oplMin, } else if (nop == knopNeg && ((pnodeT->nop == knopInt && pnodeT->AsParseNodeInt()->lw != 0) || - (pnodeT->nop == knopFlt && (pnodeT->AsParseNodeFloat()->dbl != 0 || this->m_InAsmMode)))) + (pnodeT->nop == knopFlt && (pnodeT->AsParseNodeFloat()->dbl != 0 || this->m_InAsmMode)) || + (pnodeT->nop == knopBigInt))) { // Fold a unary '-' on a number into the value of the number itself. pnode = pnodeT; @@ -8512,7 +8998,11 @@ ParseNodePtr Parser::ParseExpr(int oplMin, { pnode->AsParseNodeInt()->lw = -pnode->AsParseNodeInt()->lw; } - else + else if (pnode->nop == knopBigInt) + { + pnode->AsParseNodeBigInt()->isNegative = true; + } + else { pnode->AsParseNodeFloat()->dbl = -pnode->AsParseNodeFloat()->dbl; } @@ -8557,7 +9047,12 @@ ParseNodePtr Parser::ParseExpr(int oplMin, else { ichMin = this->GetScanner()->IchMinTok(); - pnode = ParseTerm(TRUE, pNameHint, &hintLength, &hintOffset, &term, fUnaryOrParen, TRUE, &fCanAssign, IsES6DestructuringEnabled() ? &fLikelyPattern : nullptr, &fIsDotOrIndex, plastRParen); + pnode = ParseTerm(TRUE, pNameHint, &hintLength, &hintOffset, &term, fUnaryOrParen, TRUE, &fCanAssign, &fLikelyPattern, &fIsDotOrIndex, plastRParen, &localCoalesce); + if (looseCoalesce != nullptr) + { + *looseCoalesce = localCoalesce; + } + if (pfLikelyPattern != nullptr) { *pfLikelyPattern = !!fLikelyPattern; @@ -8580,6 +9075,7 @@ ParseNodePtr Parser::ParseExpr(int oplMin, m_nextBlockId = parserState.m_nextBlockId; ParseDestructuredLiteralWithScopeSave(tkLCurly, false/*isDecl*/, false /*topLevel*/, DIC_ShouldNotParseInitializer); + fCanAssign = TRUE; // Restore the Block ID at the end of the reparsing so it matches the one at the end of the first pass. We need to do this // because we don't parse initializers during reparse and there may be additional blocks (e.g. a class declaration) @@ -8637,7 +9133,7 @@ ParseNodePtr Parser::ParseExpr(int oplMin, ? !PHASE_OFF_RAW(Js::EarlyReferenceErrorsPhase, m_sourceContextInfo->sourceContextId, GetCurrentFunctionNode()->functionId) : !PHASE_OFF1(Js::EarlyReferenceErrorsPhase))) { - Error(JSERR_CantAssignTo); + Error(ERRInvalidAsgTarget); } TrackAssignment(pnode, &term); fCanAssign = FALSE; @@ -8724,7 +9220,7 @@ ParseNodePtr Parser::ParseExpr(int oplMin, ? !PHASE_OFF_RAW(Js::EarlyReferenceErrorsPhase, m_sourceContextInfo->sourceContextId, GetCurrentFunctionNode()->functionId) : !PHASE_OFF1(Js::EarlyReferenceErrorsPhase))) { - Error(JSERR_CantAssignTo); + Error(ERRInvalidAsgTarget); // No recovery necessary since this is a semantic, not structural, error. } } @@ -8752,7 +9248,7 @@ ParseNodePtr Parser::ParseExpr(int oplMin, // Special case the "?:" operator if (nop == knopQmark) { - pnodeT = ParseExpr(koplAsg, NULL, fAllowIn); + pnodeT = ParseExpr(koplAsg, NULL, TRUE); ChkCurTok(tkColon, ERRnoColon); ParseNodePtr pnodeT2 = ParseExpr(koplAsg, NULL, fAllowIn, 0, nullptr, nullptr, nullptr, nullptr, false, nullptr, plastRParen); if (buildAST) @@ -8771,7 +9267,7 @@ ParseNodePtr Parser::ParseExpr(int oplMin, RestoreStateFrom(&parserState); this->GetScanner()->SeekTo(termStart); - if (m_token.tk == tkID && m_token.GetIdentifier(this->GetHashTbl()) == wellKnownPropertyPids.async && m_scriptContext->GetConfig()->IsES7AsyncAndAwaitEnabled()) + if (CheckContextualKeyword(wellKnownPropertyPids.async) && m_scriptContext->GetConfig()->IsES7AsyncAndAwaitEnabled()) { ichMin = this->GetScanner()->IchMinTok(); iecpMin = this->GetScanner()->IecpMinTok(); @@ -8790,8 +9286,8 @@ ParseNodePtr Parser::ParseExpr(int oplMin, pnode = ParseFncDeclNoCheckScope(flags, SuperRestrictionState::Disallowed, nullptr, /* needsPIDOnRCurlyScan = */false, /* fUnaryOrParen = */ false, fAllowIn); if (isAsyncMethod) { - pnode->AsParseNodeFnc()->cbMin = iecpMin; - pnode->ichMin = ichMin; + pnode->AsParseNodeFnc()->cbStringMin = iecpMin; + pnode->AsParseNodeFnc()->cbStringLim = pnode->AsParseNodeFnc()->cbLim; } // ArrowFunction/AsyncArrowFunction is part of AssignmentExpression, which should terminate the expression unless followed by a comma @@ -8818,8 +9314,26 @@ ParseNodePtr Parser::ParseExpr(int oplMin, // Parse the operand, make a new node, and look for more IdentToken token; + bool coalescing = false; + ParseNode* pnode2 = ParseExpr( - opl, nullptr, fAllowIn, FALSE, pNameHint, &hintLength, &hintOffset, &token, false, nullptr, plastRParen); + opl, nullptr, fAllowIn, FALSE, pNameHint, &hintLength, &hintOffset, &token, false, nullptr, plastRParen, &coalescing); + + if (nop == knopLogAnd || nop == knopLogOr) + { + if (localCoalesce || coalescing) + { + Error(ERRCoalesce); + } + } + else if (nop == knopCoalesce) + { + localCoalesce = true; + if (looseCoalesce != nullptr) + { + *looseCoalesce = true; + } + } // Detect nested function escapes of the pattern "o.f = function(){...}" or "o[s] = function(){...}". // Doing so in the parser allows us to disable stack-nested-functions in common cases where an escape @@ -8879,6 +9393,7 @@ ParseNodePtr Parser::ParseExpr(int oplMin, { case knopName: case knopInt: + case knopBigInt: case knopFlt: case knopStr: case knopRegExp: @@ -9099,7 +9614,7 @@ ParseNodePtr Parser::ParseVariableDeclaration( for (;;) { - if (IsES6DestructuringEnabled() && IsPossiblePatternStart()) + if (IsPossiblePatternStart()) { pnodeThis = ParseDestructuredLiteral(declarationType, true, !!isTopVarParse, DIC_None, !!fAllowIn, pfForInOk, nativeForOk); if (pnodeThis != nullptr) @@ -9266,7 +9781,6 @@ ParseNodeStmt * Parser::ParseTryCatchFinally() if (buildAST) { pnodeTC = CreateNodeForOpT(); - pnodeT->pnodeOuter = pnodeTC; pnodeTC->pnodeTry = pnodeT; } PushStmt(&stmt, pnodeTC, knopTryCatch, nullptr); @@ -9301,14 +9815,11 @@ ParseNodeStmt * Parser::ParseTryCatchFinally() if (!hasCatch) { pnodeTF->pnodeTry = pnodeT; - pnodeT->pnodeOuter = pnodeTF; } else { pnodeTF->pnodeTry = CreateNodeForOpT(); - pnodeTF->pnodeTry->pnodeOuter = pnodeTF; pnodeTF->pnodeTry->pnodeBody = pnodeTC; - pnodeTC->pnodeOuter = pnodeTF->pnodeTry; } pnodeTF->pnodeFinally = pnodeFinally; } @@ -9394,15 +9905,21 @@ ParseNodeCatch * Parser::ParseCatch() ichMin = this->GetScanner()->IchMinTok(); } this->GetScanner()->Scan(); //catch - ChkCurTok(tkLParen, ERRnoLparen); //catch( bool isPattern = false; - if (tkID != m_token.tk) + bool hasParam = false; + + if (tkLParen == m_token.tk) { - isPattern = IsES6DestructuringEnabled() && IsPossiblePatternStart(); - if (!isPattern) + hasParam = true; + this->GetScanner()->Scan(); //catch( + if (tkID != m_token.tk) { - IdentifierExpectedError(m_token); + isPattern = IsPossiblePatternStart(); + if (!isPattern) + { + IdentifierExpectedError(m_token); + } } } @@ -9450,7 +9967,7 @@ ParseNodeCatch * Parser::ParseCatch() pnode->scope = scope; } } - else + else if (hasParam) { if (IsStrictMode()) { @@ -9494,13 +10011,24 @@ ParseNodeCatch * Parser::ParseCatch() this->GetScanner()->Scan(); } + else + { + if (buildAST) + { + pnode->scope = pnodeCatchScope->scope; + } + } charcount_t ichLim; if (buildAST) { ichLim = this->GetScanner()->IchLimTok(); } - ChkCurTok(tkRParen, ERRnoRparen); //catch(id[:expr]) + + if (hasParam) + { + ChkCurTok(tkRParen, ERRnoRparen); //catch(id[:expr]) + } if (tkLCurly != m_token.tk) { @@ -9642,13 +10170,9 @@ ParseNodePtr Parser::ParseStatement() { case tkEOF: if (labelledStatement) - { Error(ERRLabelFollowedByEOF); - } - if (buildAST) - { - pnode = nullptr; - } + else + Error(ERRsyntaxEOF); break; case tkFUNCTION: @@ -9668,14 +10192,38 @@ ParseNodePtr Parser::ParseStatement() } Assert(pnode != nullptr); - ParseNodeFnc* pNodeFnc = (ParseNodeFnc*)pnode; + if (labelledStatement) { if (IsStrictMode()) { Error(ERRFunctionAfterLabelInStrict); } - else if (pNodeFnc->IsAsync()) + // #sec-with-statement-static-semantics-early-errors states that the Statement of + // a WithStatement throws a Syntax Error if the Statement is a LabelledFunction. + else if (m_pstmtCur && m_pstmtCur->pnodeStmt && m_pstmtCur->GetNop() == knopWith) + { + Error(ERRStmtOfWithIsLabelledFunc); + } + + ParseNodeFnc* pNodeFnc = nullptr; + + // pnode can be a knopBlock due to ParseFncDeclCheckScope, which + // can return a ParseNodeBlock that contains a ParseNodeFnc. + if (pnode->nop == knopBlock) + { + ParseNodeBlock* pNodeBlock = pnode->AsParseNodeBlock(); + if (pNodeBlock->pnodeStmt && pNodeBlock->pnodeStmt->nop == knopFncDecl) + { + pNodeFnc = pNodeBlock->pnodeStmt->AsParseNodeFnc(); + } + } + if (pNodeFnc == nullptr) + { + pNodeFnc = pnode->AsParseNodeFnc(); + } + + if (pNodeFnc->IsAsync()) { Error(ERRLabelBeforeAsyncFncDeclaration); } @@ -9687,8 +10235,8 @@ ParseNodePtr Parser::ParseStatement() if (isAsyncMethod) { - pnode->AsParseNodeFnc()->cbMin = iecpMin; - pnode->ichMin = ichMin; + pnode->AsParseNodeFnc()->cbStringMin = iecpMin; + pnode->AsParseNodeFnc()->cbStringLim = pnode->AsParseNodeFnc()->cbLim; } break; } @@ -9698,23 +10246,17 @@ ParseNodePtr Parser::ParseStatement() { Error(ERRLabelBeforeClassDeclaration); } - else if (m_scriptContext->GetConfig()->IsES6ClassAndExtendsEnabled()) - { - pnode = ParseClassDecl(TRUE, nullptr, nullptr, nullptr); - } else { - goto LDefaultToken; + pnode = ParseClassDecl(TRUE, nullptr, nullptr, nullptr); } + break; case tkID: - if (m_token.GetIdentifier(this->GetHashTbl()) == wellKnownPropertyPids.let) + case tkLET: + if (tok == tkLET || CheckContextualKeyword(wellKnownPropertyPids.let)) { - if (labelledStatement) - { - Error(ERRLabelBeforeLexicalDeclaration); - } // We see "let" at the start of a statement. This could either be a declaration or an identifier // reference. The next token determines which. RestorePoint parsedLet; @@ -9722,14 +10264,23 @@ ParseNodePtr Parser::ParseStatement() ichMin = this->GetScanner()->IchMinTok(); this->GetScanner()->Scan(); - if (this->NextTokenConfirmsLetDecl()) + if (labelledStatement) + { + if (!this->GetScanner()->FHadNewLine() || m_token.tk == tkLBrack) + { + // In the case where a label is followed by a let, we want to fail when parsing if there is no new line after let, + // otherwise fail at runtime as let will be viewed as undefined. A left bracket after a let signifies a syntax error regardless. + Error(ERRLabelBeforeLexicalDeclaration); + } + } + else if (this->NextTokenConfirmsLetDecl()) { pnode = ParseVariableDeclaration(tkLET, ichMin); goto LNeedTerminator; } this->GetScanner()->SeekTo(parsedLet); } - else if (m_token.GetIdentifier(this->GetHashTbl()) == wellKnownPropertyPids.async && m_scriptContext->GetConfig()->IsES7AsyncAndAwaitEnabled()) + else if (CheckContextualKeyword(wellKnownPropertyPids.async) && m_scriptContext->GetConfig()->IsES7AsyncAndAwaitEnabled()) { RestorePoint parsedAsync; this->GetScanner()->Capture(&parsedAsync); @@ -9747,7 +10298,6 @@ ParseNodePtr Parser::ParseStatement() goto LDefaultToken; case tkCONST: - case tkLET: if (labelledStatement) { Error(ERRLabelBeforeLexicalDeclaration); @@ -9770,9 +10320,33 @@ ParseNodePtr Parser::ParseStatement() ParseNodeBlock * pnodeBlock = nullptr; ParseNodePtr *ppnodeScopeSave = nullptr; ParseNodePtr *ppnodeExprScopeSave = nullptr; + bool isForAwait = false; ichMin = this->GetScanner()->IchMinTok(); - ChkNxtTok(tkLParen, ERRnoLparen); + + this->GetScanner()->Scan(); + if (m_token.tk == tkAWAIT || CheckContextualKeyword(wellKnownPropertyPids.await)) + { + if (!this->GetScanner()->AwaitIsKeywordRegion()) + { + if (IsTopLevelModuleFunc()) + { + MakeModuleAsync(); + } + else + { + Error(ERRBadAwait); // for await () in a non-async function + } + } + if (!m_scriptContext->GetConfig()->IsES2018AsyncIterationEnabled()) + { + Error(ERRExperimental); + } + isForAwait = true; + this->GetScanner()->Scan(); + } + ChkCurTok(tkLParen, ERRnoLparen); + pnodeBlock = StartParseBlock(PnodeBlockType::Regular, ScopeType_Block); if (buildAST) { @@ -9789,7 +10363,7 @@ ParseNodePtr Parser::ParseStatement() switch (tok) { case tkID: - if (m_token.GetIdentifier(this->GetHashTbl()) == wellKnownPropertyPids.let) + if (CheckContextualKeyword(wellKnownPropertyPids.let)) { // We see "let" in the init part of a for loop. This could either be a declaration or an identifier // reference. The next token determines which. @@ -9853,7 +10427,7 @@ ParseNodePtr Parser::ParseStatement() this->GetScanner()->Capture(&startExprOrIdentifier); } bool fLikelyPattern = false; - if (IsES6DestructuringEnabled() && (beforeToken == tkLBrack || beforeToken == tkLCurly)) + if (beforeToken == tkLBrack || beforeToken == tkLCurly) { pnodeT = ParseExpr(koplNo, &fCanAssign, @@ -9868,7 +10442,9 @@ ParseNodePtr Parser::ParseStatement() } else { - pnodeT = ParseExpr(koplNo, &fCanAssign, /*fAllowIn = */FALSE); + IdentToken token; + pnodeT = ParseExpr(koplNo, &fCanAssign, /*fAllowIn = */FALSE, FALSE, NULL, nullptr, nullptr, &token); + TrackAssignment(pnodeT, &token); } // We would veryfiy the grammar as destructuring grammar only when for..in/of case. As in the native for loop case the above ParseExpr call @@ -9877,6 +10453,7 @@ ParseNodePtr Parser::ParseStatement() { this->GetScanner()->SeekTo(exprStart); ParseDestructuredLiteralWithScopeSave(tkNone, false/*isDecl*/, false /*topLevel*/, DIC_None, false /*allowIn*/); + fCanAssign = TRUE; if (buildAST) { @@ -9895,7 +10472,12 @@ ParseNodePtr Parser::ParseStatement() if (TokIsForInOrForOf()) { bool isForOf = (m_token.tk != tkIN); - Assert(!isForOf || (m_token.tk == tkID && m_token.GetIdentifier(this->GetHashTbl()) == wellKnownPropertyPids.of)); + Assert(!isForOf || CheckContextualKeyword(wellKnownPropertyPids.of)); + + if (isForAwait && !isForOf) + { + Error(ERRTokenAfter, _u("in"), _u("for await")); + } if ((buildAST && nullptr == pnodeT) || !fForInOrOfOkay) { @@ -9924,7 +10506,11 @@ ParseNodePtr Parser::ParseStatement() ParseNodeForInOrForOf * pnodeForInOrForOf = nullptr; if (buildAST) { - if (isForOf) + if (isForAwait) + { + pnodeForInOrForOf = CreateNodeForOpT(ichMin); + } + else if (isForOf) { pnodeForInOrForOf = CreateNodeForOpT(ichMin); } @@ -9939,7 +10525,7 @@ ParseNodePtr Parser::ParseStatement() TrackAssignment(pnodeT, nullptr); } - PushStmt(&stmt, pnodeForInOrForOf, isForOf ? knopForOf : knopForIn, pLabelIdList); + PushStmt(&stmt, pnodeForInOrForOf, isForAwait ? knopForAwaitOf : (isForOf ? knopForOf : knopForIn), pLabelIdList); ParseNodePtr pnodeBody = ParseStatement(); if (buildAST) @@ -9956,6 +10542,11 @@ ParseNodePtr Parser::ParseStatement() Error(ERRDestructInit); } + if (isForAwait) + { + Error(ERRValidIfFollowedBy, _u("'for await'"), _u("'of'")); + } + ChkCurTok(tkSColon, ERRnoSemic); ParseNodePtr pnodeCond = nullptr; if (m_token.tk != tkSColon) @@ -10218,6 +10809,13 @@ ParseNodePtr Parser::ParseStatement() pnodeIf->ichLim = this->GetScanner()->IchLimTok(); pnodeIf->pnodeCond = pnodeCond; } + + if (m_deferCommaError) + { + this->GetScanner()->SeekTo(m_deferCommaErrorLoc); + Error(ERRnoRparen); + } + ChkCurTok(tkRParen, ERRnoRparen); bool stashedDisallowImportExportStmt = m_disallowImportExportStmt; @@ -10413,25 +11011,32 @@ ParseNodePtr Parser::ParseStatement() else { this->GetScanner()->Scan(); - for (pstmt = m_pstmtCur; pstmt; pstmt = pstmt->pstmtOuter) + // Check if label is found within the current label id list. + auto checkLabelList = [&](LabelId* list, StmtNest* checkStmtOp) { - LabelId* pLabelId; - for (pLabelId = pstmt->pLabelId; pLabelId; pLabelId = pLabelId->next) + for (LabelId* pLabelId = list; pLabelId; pLabelId = pLabelId->next) { - if (pid == pLabelId->pid) { // Found the label. Make sure we can use it. We can // break out of any statement, but we can only // continue loops. if (fnop == fnopContinue && - !(ParseNode::Grfnop(pstmt->op) & fnop)) + !(ParseNode::Grfnop(checkStmtOp->op) & fnop)) { Error(ERRbadContinue); } - goto LNeedTerminator; + return true; } } + return false; + }; + + if (checkLabelList(pLabelIdList, m_pstmtCur)) goto LNeedTerminator; + + for (pstmt = m_pstmtCur; pstmt; pstmt = pstmt->pstmtOuter) + { + if (checkLabelList(pstmt->pLabelId, pstmt)) goto LNeedTerminator; } } Error(ERRnoLabel); @@ -10662,6 +11267,12 @@ ParseNodePtr Parser::ParseStatement() default: if (!this->GetScanner()->FHadNewLine()) { + Token previous = this->GetScanner()->GetPreviousToken(); + if (tkID == previous.tk && wellKnownPropertyPids.await == previous.GetIdentifier(this->GetHashTbl())) + { + Error(ERRBadAwait); + } + Error(ERRnoSemic); } else @@ -10769,9 +11380,7 @@ ParseNodePtr Parser::ParseStatement() BOOL Parser::TokIsForInOrForOf() { - return m_token.tk == tkIN || - (m_token.tk == tkID && - m_token.GetIdentifier(this->GetHashTbl()) == wellKnownPropertyPids.of); + return m_token.tk == tkIN || CheckContextualKeyword(wellKnownPropertyPids.of); } /*************************************************************************** @@ -11006,14 +11615,25 @@ ULONG Parser::GetDeferralThreshold(bool isProfileLoaded) void Parser::FinishDeferredFunction(ParseNodeBlock * pnodeScopeList) { - uint saveNextBlockId = m_nextBlockId; + ParseContext parseContext; + this->CaptureContext(&parseContext); + m_nextBlockId = pnodeScopeList->blockId + 1; FinishFunctionsInScope(pnodeScopeList, - [this](ParseNodeFnc * pnodeFnc) + [this, &parseContext](ParseNodeFnc * pnodeFnc) { Assert(pnodeFnc->nop == knopFncDecl); + // We need to scan this function based on the already known limits of the function declaration as some of + // the state such as fAllowIn may not be available at this point. Some of this state depends on the context + // of the function declaration. For example, a function declaration may be inside a for..in statement's var + // declaration. It may not be appropriate/possible to try and save all such context information. Functions + // that actually get deferred achieve this by going through the ParseSourceWithOffset code path. + this->GetScanner()->Clear(); + this->GetScanner()->SetText(parseContext.pszSrc, pnodeFnc->cbMin /*+ this->m_scan.m_cMinTokMultiUnits*/, pnodeFnc->LengthInBytes(), pnodeFnc->ichMin, parseContext.isUtf8, parseContext.grfscr, pnodeFnc->lineNumber); + this->GetScanner()->Scan(); + // Non-simple params (such as default) require a good amount of logic to put vars on appropriate scopes. ParseFncDecl handles it // properly (both on defer and non-defer case). This is to avoid write duplicated logic here as well. Function with non-simple-param // will remain deferred until they are called. @@ -11165,7 +11785,7 @@ void Parser::FinishDeferredFunction(ParseNodeBlock * pnodeScopeList) } }); - m_nextBlockId = saveNextBlockId; + this->RestoreContext(&parseContext); } void Parser::InitPids() @@ -11176,20 +11796,22 @@ void Parser::InitPids() wellKnownPropertyPids.get = this->GetHashTbl()->PidHashNameLen(g_ssym_get.sz, g_ssym_get.cch); wellKnownPropertyPids.set = this->GetHashTbl()->PidHashNameLen(g_ssym_set.sz, g_ssym_set.cch); wellKnownPropertyPids.let = this->GetHashTbl()->PidHashNameLen(g_ssym_let.sz, g_ssym_let.cch); + wellKnownPropertyPids.await = this->GetHashTbl()->PidHashNameLen(g_ssym_await.sz, g_ssym_await.cch); wellKnownPropertyPids.constructor = this->GetHashTbl()->PidHashNameLen(g_ssym_constructor.sz, g_ssym_constructor.cch); wellKnownPropertyPids.prototype = this->GetHashTbl()->PidHashNameLen(g_ssym_prototype.sz, g_ssym_prototype.cch); wellKnownPropertyPids.__proto__ = this->GetHashTbl()->PidHashNameLen(_u("__proto__"), sizeof("__proto__") - 1); wellKnownPropertyPids.of = this->GetHashTbl()->PidHashNameLen(_u("of"), sizeof("of") - 1); wellKnownPropertyPids.target = this->GetHashTbl()->PidHashNameLen(_u("target"), sizeof("target") - 1); + wellKnownPropertyPids.meta = this->GetHashTbl()->PidHashNameLen(_u("meta"), sizeof("meta") - 1); wellKnownPropertyPids.as = this->GetHashTbl()->PidHashNameLen(_u("as"), sizeof("as") - 1); wellKnownPropertyPids.from = this->GetHashTbl()->PidHashNameLen(_u("from"), sizeof("from") - 1); wellKnownPropertyPids._default = this->GetHashTbl()->PidHashNameLen(_u("default"), sizeof("default") - 1); - wellKnownPropertyPids._starDefaultStar = this->GetHashTbl()->PidHashNameLen(_u("*default*"), sizeof("*default*") - 1); wellKnownPropertyPids._star = this->GetHashTbl()->PidHashNameLen(_u("*"), sizeof("*") - 1); wellKnownPropertyPids._this = this->GetHashTbl()->PidHashNameLen(_u("*this*"), sizeof("*this*") - 1); wellKnownPropertyPids._newTarget = this->GetHashTbl()->PidHashNameLen(_u("*new.target*"), sizeof("*new.target*") - 1); wellKnownPropertyPids._super = this->GetHashTbl()->PidHashNameLen(_u("*super*"), sizeof("*super*") - 1); wellKnownPropertyPids._superConstructor = this->GetHashTbl()->PidHashNameLen(_u("*superconstructor*"), sizeof("*superconstructor*") - 1); + wellKnownPropertyPids._importMeta = this->GetHashTbl()->PidHashNameLen(_u("*import.meta*"), sizeof("*import.meta*") - 1); } void Parser::RestoreScopeInfo(Js::ScopeInfo * scopeInfo) @@ -11384,6 +12006,7 @@ ParseNodeProg * Parser::Parse(LPCUTF8 pszSrc, size_t offset, size_t length, char m_currentNodeFunc->SetIsGenerator(scopeInfo->IsGeneratorFunctionBody()); m_currentNodeFunc->SetIsAsync(scopeInfo->IsAsyncFunctionBody()); + m_currentNodeFunc->SetIsClassConstructor(scopeInfo->IsClassConstructor()); } } @@ -11400,8 +12023,6 @@ ParseNodeProg * Parser::Parse(LPCUTF8 pszSrc, size_t offset, size_t length, char { // Defer parse for a single function should just parse that one function - there are no other statements. ushort flags = fFncNoFlgs; - size_t iecpMin = 0; - charcount_t ichMin = 0; bool isAsync = false; bool isGenerator = false; bool isMethod = false; @@ -11428,55 +12049,69 @@ ParseNodeProg * Parser::Parse(LPCUTF8 pszSrc, size_t offset, size_t length, char m_grfscr &= ~fscrDeferredFncIsMethod; isMethod = true; flags |= fFncNoName | fFncMethod; - } - // These are the cases which can confirm async function: - // async function() {} -> async function - // async () => {} -> async lambda with parens around the formal parameter - // async arg => {} -> async lambda with single identifier parameter - // async name() {} -> async method - // async [computed_name]() {} -> async method with a computed name - if (m_token.tk == tkID && m_token.GetIdentifier(this->GetHashTbl()) == wellKnownPropertyPids.async && m_scriptContext->GetConfig()->IsES7AsyncAndAwaitEnabled()) - { - ichMin = this->GetScanner()->IchMinTok(); - iecpMin = this->GetScanner()->IecpMinTok(); - - // Keep state so we can rewind if it turns out that this isn't an async function: - // async() {} -> method named async - // async => {} -> lambda with single parameter named async - RestorePoint termStart; - this->GetScanner()->Capture(&termStart); - - this->GetScanner()->Scan(); - - if (m_token.tk == tkDArrow || (m_token.tk == tkLParen && isMethod) || this->GetScanner()->FHadNewLine()) + if (m_grfscr & fscrDeferredFncIsGenerator) { - this->GetScanner()->SeekTo(termStart); + m_grfscr &= ~fscrDeferredFncIsGenerator; + isGenerator = true; + flags |= fFncGenerator; } - else + + if (m_token.tk == tkStar && m_scriptContext->GetConfig()->IsES6GeneratorsEnabled()) { - flags |= fFncAsync; - isAsync = true; + Assert(isGenerator && !isMethod); + this->GetScanner()->Scan(); } } - if (m_token.tk == tkStar && m_scriptContext->GetConfig()->IsES6GeneratorsEnabled()) + if (m_grfscr & fscrDeferredFncIsAsync) { - ichMin = this->GetScanner()->IchMinTok(); - iecpMin = this->GetScanner()->IecpMinTok(); + m_grfscr &= ~fscrDeferredFncIsAsync; + isAsync = true; + flags |= fFncAsync; + } - flags |= fFncGenerator; - isGenerator = true; + if (m_grfscr & fscrDeferredFncIsClassConstructor) + { + m_grfscr &= ~fscrDeferredFncIsClassConstructor; + flags |= fFncClassConstructor | fFncClassMember; + } - this->GetScanner()->Scan(); + if (m_grfscr & fscrDeferredFncIsBaseClassConstructor) + { + m_grfscr &= ~fscrDeferredFncIsBaseClassConstructor; + flags |= fFncBaseClassConstructor; } - // Eat the computed name expression - if (m_token.tk == tkLBrack && isMethod) + if (m_grfscr & fscrDeferredFncIsClassMember) + { + m_grfscr &= ~fscrDeferredFncIsClassMember; + flags |= fFncClassMember; + } + +#if DBG + if (isMethod && m_token.tk == tkID) { + RestorePoint atPid; + IdentPtr pidHint = m_token.GetIdentifier(this->GetHashTbl()); + this->GetScanner()->Capture(&atPid); this->GetScanner()->Scan(); - ParseExpr(); + if ((pidHint == wellKnownPropertyPids.get || pidHint == wellKnownPropertyPids.set) && NextTokenIsPropertyNameStart()) + { + // Getter/setter + // Skip the get/set keyword and continue normally + AssertMsg(false, "We should not be re-parsing the get/set part of member accessor functions"); + } + else + { + // Not a getter/setter; rewind and treat the token as a name. + this->GetScanner()->SeekTo(atPid); + } } +#endif + + // Ensure this isn't a computed name + AssertMsg(!(m_token.tk == tkLBrack && isMethod), "Can't defer parse a computed name expression, we should have started after this"); if (!isMethod && (m_token.tk == tkID || m_token.tk == tkLParen)) { @@ -11488,12 +12123,7 @@ ParseNodeProg * Parser::Parse(LPCUTF8 pszSrc, size_t offset, size_t length, char pnodeProg->pnodeBody = nullptr; AddToNodeList(&pnodeProg->pnodeBody, &lastNodeRef, pnodeFnc); - // Include the async keyword or star character in the function extents - if (isAsync || isGenerator) - { - pnodeFnc->AsParseNodeFnc()->cbMin = iecpMin; - pnodeFnc->ichMin = ichMin; - } + // No need to update the cbStringMin property since no ParseableFunctionInfo will be created from this defer-parsed pnodeFnc } else { @@ -11609,6 +12239,13 @@ ParseNodeProg * Parser::Parse(LPCUTF8 pszSrc, size_t offset, size_t length, char { JS_ETW(EventWriteJSCRIPT_PARSE_METHOD_STOP(m_sourceContextInfo->dwHostSourceContext, GetScriptContext(), pnodeProg->functionId, *m_pCurrentAstSize, false, Js::Constants::GlobalFunction)); } + + if (isModuleSource) + { + // verify that any local module exports are defined + VerifyModuleLocalExportEntries(); + } + return pnodeProg; } @@ -11796,6 +12433,7 @@ HRESULT Parser::ParseFunctionInBackground(ParseNodeFnc * pnodeFnc, ParseContext ParseNodeBlock * pnodeBlock = StartParseBlock(PnodeBlockType::Function, ScopeType_FunctionBody); pnodeFnc->pnodeScopes = pnodeBlock; m_ppnodeScope = &pnodeBlock->pnodeScopes; + bool handled = false; uint uDeferSave = m_grfscr & (fscrCanDeferFncParse | fscrWillDeferFncParse); @@ -11846,9 +12484,11 @@ HRESULT Parser::ParseFunctionInBackground(ParseNodeFnc * pnodeFnc, ParseContext catch (ParseExceptionObject& e) { hr = e.GetError(); + hr = pse->ProcessError(this->GetScanner(), hr, nullptr, e.GetStringOne(), e.GetStringTwo()); + handled = true; } - if (FAILED(hr)) + if (handled == false && FAILED(hr)) { hr = pse->ProcessError(this->GetScanner(), hr, nullptr); } @@ -11995,6 +12635,9 @@ ParseNode* Parser::CopyPnode(ParseNode *pnode) { } //PTNODE(knopInt , "int const" ,None ,Int ,fnopLeaf|fnopConst) case knopInt: + return pnode; + //PTNODE(knopBigInt , "bigint const" ,None ,BigInt ,fnopLeaf|fnopConst) + case knopBigInt: return pnode; //PTNODE(knopFlt , "flt const" ,None ,Flt ,fnopLeaf|fnopConst) case knopFlt: @@ -12106,6 +12749,7 @@ ParseNode* Parser::CopyPnode(ParseNode *pnode) { case knopComma: case knopLogOr: case knopLogAnd: + case knopCoalesce: case knopLsh: case knopRsh: case knopRs2: @@ -12211,6 +12855,9 @@ ParseNode* Parser::CopyPnode(ParseNode *pnode) { case knopForOf: Assert(false); break; + case knopForAwaitOf: + Assert(false); + break; //PTNODE(knopReturn , "return" ,None ,Uni ,fnopNone) case knopReturn: { ParseNode* copyNode = CreateNodeForOpT(pnode->ichMin, pnode->ichLim); @@ -12420,10 +13067,6 @@ ParseNodePtr Parser::ConvertArrayToArrayPattern(ParseNodePtr pnode) { *itemRef = ConvertObjectToObjectPattern(item); } - else if (item->nop == knopName) - { - TrackAssignment(item, nullptr); - } }); return pnode; @@ -12433,7 +13076,6 @@ ParseNodeUni * Parser::ConvertObjectToObjectPattern(ParseNodePtr pnodeMemberList { charcount_t ichMin = this->GetScanner()->IchMinTok(); charcount_t ichLim = this->GetScanner()->IchLimTok(); - ParseNodePtr pnodeMemberNodeList = nullptr; if (pnodeMemberList != nullptr && pnodeMemberList->nop == knopObject) { ichMin = pnodeMemberList->ichMin; @@ -12441,12 +13083,8 @@ ParseNodeUni * Parser::ConvertObjectToObjectPattern(ParseNodePtr pnodeMemberList pnodeMemberList = pnodeMemberList->AsParseNodeUni()->pnode1; } - ForEachItemInList(pnodeMemberList, [&](ParseNodePtr item) { - ParseNodePtr memberNode = ConvertMemberToMemberPattern(item); - AppendToList(&pnodeMemberNodeList, memberNode); - }); - - return CreateUniNode(knopObjectPattern, pnodeMemberNodeList, ichMin, ichLim); + ParseNodeObjLit * objectPatternNode = CreateObjectPatternNode(pnodeMemberList, ichMin, ichLim, true/*convertToPattern*/); + return objectPatternNode; } ParseNodePtr Parser::GetRightSideNodeFromPattern(ParseNodePtr pnode) @@ -12465,11 +13103,7 @@ ParseNodePtr Parser::GetRightSideNodeFromPattern(ParseNodePtr pnode) else { rightNode = pnode; - if (op == knopName) - { - TrackAssignment(pnode, nullptr); - } - else if (op == knopAsg) + if (op == knopAsg) { TrackAssignment(pnode->AsParseNodeBin()->pnode1, nullptr); } @@ -12480,7 +13114,7 @@ ParseNodePtr Parser::GetRightSideNodeFromPattern(ParseNodePtr pnode) ParseNodePtr Parser::ConvertMemberToMemberPattern(ParseNodePtr pnodeMember) { - if (pnodeMember->nop == knopObjectPatternMember) + if (pnodeMember->nop == knopObjectPatternMember || pnodeMember->nop == knopEllipsis) { return pnodeMember; } @@ -12571,6 +13205,9 @@ ParseNodePtr Parser::ParseDestructuredLiteral(tokens declarationType, { ParseNodeUni * pnode = nullptr; Assert(IsPossiblePatternStart()); + + PROBE_STACK_NO_DISPOSE(m_scriptContext, Js::Constants::MinStackDefault); + if (m_token.tk == tkLCurly) { pnode = ParseDestructuredObjectLiteral(declarationType, isDecl, topLevel); @@ -12657,23 +13294,24 @@ ParseNodeUni * Parser::ParseDestructuredObjectLiteral(tokens declarationType, bo declarationType = tkLCurly; } ParseNodePtr pnodeMemberList = ParseMemberList(nullptr/*pNameHint*/, nullptr/*pHintLength*/, declarationType); - Assert(m_token.tk == tkRCurly); - ParseNodeUni * objectPatternNode = nullptr; - if (buildAST) - { - charcount_t ichLim = this->GetScanner()->IchLimTok(); - objectPatternNode = CreateUniNode(knopObjectPattern, pnodeMemberList, ichMin, ichLim); - } + charcount_t ichLim = this->GetScanner()->IchLimTok(); + + ParseNodeObjLit * objectPatternNode = buildAST ? CreateObjectPatternNode(pnodeMemberList, ichMin, ichLim) : nullptr; + + Assert(m_token.tk == tkRCurly); return objectPatternNode; } + + template -ParseNodePtr Parser::ParseDestructuredVarDecl(tokens declarationType, bool isDecl, bool *hasSeenRest, bool topLevel/* = true*/, bool allowEmptyExpression/* = true*/) +ParseNodePtr Parser::ParseDestructuredVarDecl(tokens declarationType, bool isDecl, bool *hasSeenRest, bool topLevel/* = true*/, bool allowEmptyExpression/* = true*/, bool isObjectPattern/* =false*/) { ParseNodePtr pnodeElem = nullptr; int parenCount = 0; bool seenRest = false; + IdentToken token; // Save the Block ID prior to the increments, so we can restore it back. int originalCurrentBlockId = GetCurrentBlock()->blockId; @@ -12714,15 +13352,20 @@ ParseNodePtr Parser::ParseDestructuredVarDecl(tokens declarationType, bool isDec } } - if (m_token.tk != tkID && m_token.tk != tkTHIS && m_token.tk != tkSUPER && m_token.tk != tkLCurly && m_token.tk != tkLBrack) + + if (m_token.tk != tkID && m_token.tk != tkTHIS && m_token.tk != tkSUPER) { - if (isDecl) - { - Error(ERRnoIdent); - } - else + bool nestedDestructuring = m_token.tk == tkLCurly || m_token.tk == tkLBrack; + if ((isObjectPattern && nestedDestructuring) || (!isObjectPattern && !nestedDestructuring)) { - Error(ERRInvalidAssignmentTarget); + if (isDecl) + { + Error(ERRnoIdent); + } + else + { + Error(ERRInvalidAssignmentTarget); + } } } } @@ -12740,7 +13383,6 @@ ParseNodePtr Parser::ParseDestructuredVarDecl(tokens declarationType, bool isDec if (!isDecl) { BOOL fCanAssign; - IdentToken token; // Look for postfix operator pnodeElem = ParsePostfixOperators(pnodeElem, TRUE, FALSE, FALSE, TRUE, &fCanAssign, &token); } @@ -12757,7 +13399,6 @@ ParseNodePtr Parser::ParseDestructuredVarDecl(tokens declarationType, bool isDec else { BOOL fCanAssign; - IdentToken token; // We aren't declaring anything, so scan the ID reference manually. pnodeElem = ParseTerm(/* fAllowCall */ m_token.tk != tkSUPER, nullptr /*pNameHint*/, nullptr /*pHintLength*/, nullptr /*pShortNameOffset*/, &token, false, FALSE, &fCanAssign); @@ -12769,6 +13410,11 @@ ParseNodePtr Parser::ParseDestructuredVarDecl(tokens declarationType, bool isDec Error(ERRInvalidAssignmentTarget); } + if (buildAST) + { + TrackAssignment(pnodeElem, nullptr); + } + if (buildAST) { if (IsStrictMode() && pnodeElem != nullptr && pnodeElem->nop == knopName) @@ -12782,7 +13428,6 @@ ParseNodePtr Parser::ParseDestructuredVarDecl(tokens declarationType, bool isDec { CheckStrictModeEvalArgumentsUsage(token.pid); } - token.tk = tkNone; } } } @@ -12857,6 +13502,11 @@ ParseNodePtr Parser::ParseDestructuredVarDecl(tokens declarationType, bool isDec Error(ERRsyntax); } + if (!buildAST && token.tk == tkID) + { + TrackAssignment(nullptr, &token); + } + return pnodeElem; } @@ -13016,6 +13666,7 @@ void PrintScopesWIndent(ParseNode *pnode, int indentAmt) { case knopFor: scope = pnode->AsParseNodeFor()->pnodeBlock; firstOnly = true; break; case knopForIn: scope = pnode->AsParseNodeForInOrForOf()->pnodeBlock; firstOnly = true; break; case knopForOf: scope = pnode->AsParseNodeForInOrForOf()->pnodeBlock; firstOnly = true; break; + case knopForAwaitOf: scope = pnode->AsParseNodeForInOrForOf()->pnodeBlock; firstOnly = true; break; } if (scope) { Output::Print(_u("[%4d, %4d): "), scope->ichMin, scope->ichLim); @@ -13072,6 +13723,11 @@ void PrintPnodeWIndent(ParseNode *pnode, int indentAmt) { Indent(indentAmt); Output::Print(_u("%d\n"), pnode->AsParseNodeInt()->lw); break; + //PTNODE(knopInt , "int const" ,None ,Int ,fnopLeaf|fnopConst) + case knopBigInt: + Indent(indentAmt); + Output::Print(_u("%s%s\n"), pnode->AsParseNodeBigInt()->isNegative? "-" : "", pnode->AsParseNodeBigInt()->pid->Psz()); + break; //PTNODE(knopFlt , "flt const" ,None ,Flt ,fnopLeaf|fnopConst) case knopFlt: Indent(indentAmt); @@ -13382,6 +14038,12 @@ void PrintPnodeWIndent(ParseNode *pnode, int indentAmt) { PrintPnodeWIndent(pnode->AsParseNodeBin()->pnode1, indentAmt + INDENT_SIZE); PrintPnodeWIndent(pnode->AsParseNodeBin()->pnode2, indentAmt + INDENT_SIZE); break; + case knopCoalesce: + Indent(indentAmt); + Output::Print(_u("??\n")); + PrintPnodeWIndent(pnode->AsParseNodeBin()->pnode1, indentAmt + INDENT_SIZE); + PrintPnodeWIndent(pnode->AsParseNodeBin()->pnode2, indentAmt + INDENT_SIZE); + break; //PTNODE(knopLsh , "<<" ,Lsh ,Bin ,fnopBin) case knopLsh: Indent(indentAmt); @@ -13516,7 +14178,9 @@ void PrintPnodeWIndent(ParseNode *pnode, int indentAmt) { Output::Print(_u("ComputedProperty\n")); PrintPnodeWIndent(pnode->AsParseNodeUni()->pnode1, indentAmt + INDENT_SIZE); break; - + case knopParamPattern: + PrintPnodeWIndent(pnode->AsParseNodeParamPattern()->pnode1, indentAmt); + break; //PTNODE(knopMember , ":" ,None ,Bin ,fnopBin) case knopMember: case knopMemberShort: @@ -13642,6 +14306,14 @@ void PrintPnodeWIndent(ParseNode *pnode, int indentAmt) { PrintPnodeWIndent(pnode->AsParseNodeForInOrForOf()->pnodeObj, indentAmt + INDENT_SIZE); PrintPnodeWIndent(pnode->AsParseNodeForInOrForOf()->pnodeBody, indentAmt + INDENT_SIZE); break; + case knopForAwaitOf: + Indent(indentAmt); + Output::Print(_u("forAwaitOf\n")); + PrintScopesWIndent(pnode, indentAmt + INDENT_SIZE); + PrintPnodeWIndent(pnode->AsParseNodeForInOrForOf()->pnodeLval, indentAmt + INDENT_SIZE); + PrintPnodeWIndent(pnode->AsParseNodeForInOrForOf()->pnodeObj, indentAmt + INDENT_SIZE); + PrintPnodeWIndent(pnode->AsParseNodeForInOrForOf()->pnodeBody, indentAmt + INDENT_SIZE); + break; //PTNODE(knopReturn , "return" ,None ,Uni ,fnopNone) case knopReturn: Indent(indentAmt); @@ -13749,7 +14421,6 @@ void PrintPnodeWIndent(ParseNode *pnode, int indentAmt) { PrintPnodeWIndent(pnode->AsParseNodeClass()->pnodeConstructor, indentAmt + INDENT_SIZE); PrintPnodeWIndent(pnode->AsParseNodeClass()->pnodeMembers, indentAmt + INDENT_SIZE); - PrintPnodeWIndent(pnode->AsParseNodeClass()->pnodeStaticMembers, indentAmt + INDENT_SIZE); break; case knopStrTemplate: Indent(indentAmt); @@ -13797,7 +14468,7 @@ void PrintFormalsWIndent(ParseNode *pnodeArgs, int indentAmt) { for (ParseNode *pnode = pnodeArgs; pnode != nullptr; pnode = pnode->GetFormalNext()) { - PrintPnodeWIndent(pnode->nop == knopParamPattern ? pnode->AsParseNodeParamPattern()->pnode1 : pnode, indentAmt); + PrintPnodeWIndent(pnode, indentAmt); } } @@ -13928,43 +14599,30 @@ bool Parser::IsCreatingStateCache() && CONFIG_FLAG(ParserStateCache)); } -DeferredFunctionStub * Parser::BuildDeferredStubTree(ParseNodeFnc *pnodeFnc, Recycler *recycler) +void Parser::ShiftCurrDeferredStubToChildFunction(ParseNodeFnc* pnodeFnc, ParseNodeFnc* pnodeFncParent) { - Assert(CONFIG_FLAG(ParserStateCache)); - - uint nestedCount = pnodeFnc->nestedCount; - if (nestedCount == 0) + // Goal here is to shift the current deferred stub to point to the stubs for pnodeFnc + // so we may continue parsing pnodeFnc using the correct set of stubs instead of the + // stubs for pnodeFncParent. + // This function assumes we are in the middle of parsing pnodeFnc which is a child + // nested in pnodeFncParent. + if (pnodeFnc->IsNested() && pnodeFncParent != nullptr && m_currDeferredStub != nullptr && pnodeFncParent->ichMin != pnodeFnc->ichMin) { - return nullptr; - } + AssertOrFailFast(pnodeFncParent->nestedCount > 0); - if (pnodeFnc->deferredStub) - { - return pnodeFnc->deferredStub; + DeferredFunctionStub* childStub = m_currDeferredStub + (pnodeFncParent->nestedCount - 1); + m_currDeferredStubCount = childStub->nestedCount; + m_currDeferredStub = childStub->deferredStubs; } +} - DeferredFunctionStub* deferredStubs = RecyclerNewArray(recycler, DeferredFunctionStub, nestedCount); - uint i = 0; - ParseNodeBlock* pnodeBlock = pnodeFnc->pnodeBodyScope; - ParseNodePtr pnodeChild = nullptr; - - if (pnodeFnc->nop == knopProg) - { - Assert(pnodeFnc->pnodeBodyScope == nullptr - && pnodeFnc->pnodeScopes != nullptr - && pnodeFnc->pnodeScopes->blockType == PnodeBlockType::Global); - - pnodeBlock = pnodeFnc->pnodeScopes; - pnodeChild = pnodeFnc->pnodeScopes->pnodeScopes; - } - else - { - Assert(pnodeBlock != nullptr - && (pnodeBlock->blockType == PnodeBlockType::Function - || pnodeBlock->blockType == PnodeBlockType::Parameter)); +uint Parser::BuildDeferredStubTreeHelper(ParseNodeBlock* pnodeBlock, DeferredFunctionStub* deferredStubs, uint currentStubIndex, uint deferredStubCount, Recycler *recycler) +{ + Assert(pnodeBlock != nullptr + && (pnodeBlock->blockType == PnodeBlockType::Function + || pnodeBlock->blockType == PnodeBlockType::Parameter)); - pnodeChild = pnodeBlock->pnodeScopes; - } + ParseNodePtr pnodeChild = pnodeBlock->pnodeScopes; while (pnodeChild != nullptr) { @@ -13979,37 +14637,56 @@ DeferredFunctionStub * Parser::BuildDeferredStubTree(ParseNodeFnc *pnodeFnc, Rec } ParseNodeFnc* pnodeFncChild = pnodeChild->AsParseNodeFnc(); - AnalysisAssertOrFailFast(i < nestedCount); - - if (pnodeFncChild->pnodeBody != nullptr) - { - // Anomalous case of a non-deferred function nested within a deferred one. - // Work around by discarding the stub tree. - return nullptr; - } + AnalysisAssertOrFailFast(currentStubIndex < deferredStubCount); + Assert(pnodeFncChild->pnodeBody == nullptr); if (pnodeFncChild->IsGeneratedDefault()) { - ++i; + ++currentStubIndex; pnodeChild = pnodeFncChild->pnodeNext; continue; } - deferredStubs[i].fncFlags = pnodeFncChild->fncFlags; - deferredStubs[i].nestedCount = pnodeFncChild->nestedCount; - deferredStubs[i].restorePoint = *pnodeFncChild->pRestorePoint; - deferredStubs[i].deferredStubs = BuildDeferredStubTree(pnodeFncChild, recycler); - deferredStubs[i].ichMin = pnodeChild->ichMin; + deferredStubs[currentStubIndex].fncFlags = pnodeFncChild->fncFlags; + deferredStubs[currentStubIndex].nestedCount = pnodeFncChild->nestedCount; + deferredStubs[currentStubIndex].restorePoint = *pnodeFncChild->pRestorePoint; + deferredStubs[currentStubIndex].deferredStubs = BuildDeferredStubTree(pnodeFncChild, recycler); + deferredStubs[currentStubIndex].ichMin = pnodeChild->ichMin; // Save the set of captured names onto the deferred stub. // Since this set is allocated in the Parser arena, we'll have to convert these // into indices in a string table which will survive when the parser goes away. - deferredStubs[i].capturedNamePointers = pnodeFncChild->GetCapturedNames(); + deferredStubs[currentStubIndex].capturedNamePointers = pnodeFncChild->GetCapturedNames(); - ++i; + ++currentStubIndex; pnodeChild = pnodeFncChild->pnodeNext; } + return currentStubIndex; +} + +DeferredFunctionStub * Parser::BuildDeferredStubTree(ParseNodeFnc *pnodeFnc, Recycler *recycler) +{ + Assert(CONFIG_FLAG(ParserStateCache)); + + uint nestedCount = pnodeFnc->nestedCount; + if (nestedCount == 0) + { + return nullptr; + } + + if (pnodeFnc->deferredStub) + { + return pnodeFnc->deferredStub; + } + + DeferredFunctionStub* deferredStubs = RecyclerNewArray(recycler, DeferredFunctionStub, nestedCount); + + uint currentStubIndex = BuildDeferredStubTreeHelper(pnodeFnc->pnodeScopes, deferredStubs, 0, nestedCount, recycler); + currentStubIndex = BuildDeferredStubTreeHelper(pnodeFnc->pnodeBodyScope, deferredStubs, currentStubIndex, nestedCount, recycler); + + Assert(currentStubIndex == nestedCount); + pnodeFnc->deferredStub = deferredStubs; return deferredStubs; } diff --git a/lib/Parser/Parse.h b/lib/Parser/Parse.h index 29a644fecd7..bcbc9413c13 100644 --- a/lib/Parser/Parse.h +++ b/lib/Parser/Parse.h @@ -22,6 +22,7 @@ enum koplQue, // ?: koplLor, // || koplLan, // && + koplLco, // ?? koplBor, // | koplXor, // ^ koplBan, // & @@ -233,7 +234,7 @@ class Parser void SetIsInParsingArgList(bool set) { m_isInParsingArgList = set; } bool GetHasDestructuringPattern() const { return m_hasDestructuringPattern; } - void SetHasDestructuringPattern(bool set) { m_hasDestructuringPattern = set; } + void SetHasDestructuringPattern(bool set) { m_hasDestructuringPattern = set; } ParseNode* CopyPnode(ParseNode* pnode); @@ -272,6 +273,9 @@ class Parser SourceContextInfo * sourceContextInfo, Js::ParseableFunctionInfo* functionInfo); protected: + static uint BuildDeferredStubTreeHelper(ParseNodeBlock* pnodeBlock, DeferredFunctionStub* deferredStubs, uint currentStubIndex, uint deferredStubCount, Recycler *recycler); + void ShiftCurrDeferredStubToChildFunction(ParseNodeFnc* pnodeFnc, ParseNodeFnc* pnodeFncParent); + HRESULT ParseSourceInternal( __out ParseNodeProg ** parseTree, LPCUTF8 pszSrc, size_t offsetInBytes, size_t lengthInCodePoints, charcount_t offsetInChars, bool isUtf8, @@ -310,10 +314,11 @@ class Parser Js::ScriptContext* m_scriptContext; HashTbl * GetHashTbl() { return this->GetScanner()->GetHashTbl(); } - __declspec(noreturn) void Error(HRESULT hr); + LPCWSTR GetTokenString(tokens token); + __declspec(noreturn) void Error(HRESULT hr, LPCWSTR stringOne = _u(""), LPCWSTR stringTwo = _u("")); private: __declspec(noreturn) void Error(HRESULT hr, ParseNodePtr pnode); - __declspec(noreturn) void Error(HRESULT hr, charcount_t ichMin, charcount_t ichLim); + __declspec(noreturn) void Error(HRESULT hr, charcount_t ichMin, charcount_t ichLim, LPCWSTR stringOne = _u(""), LPCWSTR stringTwo = _u("")); __declspec(noreturn) static void OutOfMemory(); void EnsureStackAvailable(); @@ -324,6 +329,16 @@ class Parser bool CheckStrictModeStrPid(IdentPtr pid); bool CheckAsmjsModeStrPid(IdentPtr pid); + bool CheckContextualKeyword(IdentPtr keywordPid) + { + if (m_token.tk == tkID && !GetScanner()->LastIdentifierHasEscape()) + { + IdentPtr pid = m_token.GetIdentifier(GetHashTbl()); + return pid == keywordPid; + } + return false; + } + bool IsCurBlockInLoop() const; void InitPids(); @@ -374,6 +389,7 @@ class Parser ParseNodeInt * CreateIntNode(int32 lw); ParseNodeStr * CreateStrNode(IdentPtr pid); + ParseNodeBigInt * CreateBigIntNode(IdentPtr pid); ParseNodeName * CreateNameNode(IdentPtr pid); ParseNodeName * CreateNameNode(IdentPtr pid, PidRefStack * ref, charcount_t ichMin, charcount_t ichLim); ParseNodeSpecialName * CreateSpecialNameNode(IdentPtr pid, PidRefStack * ref, charcount_t ichMin, charcount_t ichLim); @@ -389,6 +405,8 @@ class Parser ParseNodeParamPattern * CreateParamPatternNode(ParseNodePtr pnode1); ParseNodeParamPattern * CreateDummyParamPatternNode(charcount_t ichMin); + ParseNodeObjLit * CreateObjectPatternNode(ParseNodePtr pnodeMemberList, charcount_t ichMin, charcount_t ichLim, bool convertToPattern=false); + Symbol* AddDeclForPid(ParseNodeVar * pnode, IdentPtr pid, SymbolType symbolType, bool errorOnRedecl); void CheckRedeclarationErrorForBlockId(IdentPtr pid, int blockId); @@ -448,7 +466,7 @@ class Parser ParseNodePtr * m_ppnodeScope; // function list tail ParseNodePtr * m_ppnodeExprScope; // function expression list tail ParseNodePtr * m_ppnodeVar; // variable list tail - bool m_inDeferredNestedFunc; // true if parsing a function in deferred mode, nested within the current node + bool m_inDeferredNestedFunc; // true if parsing a function in deferred mode, nested within the current node bool m_reparsingLambdaParams; bool m_disallowImportExportStmt; bool m_isInParsingArgList; @@ -467,6 +485,7 @@ class Parser IdentPtr set; IdentPtr get; IdentPtr let; + IdentPtr await; IdentPtr constructor; IdentPtr prototype; IdentPtr __proto__; @@ -474,13 +493,14 @@ class Parser IdentPtr target; IdentPtr from; IdentPtr as; + IdentPtr meta; IdentPtr _default; IdentPtr _star; // Special '*' identifier for modules - IdentPtr _starDefaultStar; // Special '*default*' identifier for modules IdentPtr _this; // Special 'this' identifier IdentPtr _newTarget; // Special new.target identifier IdentPtr _super; // Special super identifier IdentPtr _superConstructor; // Special super constructor identifier + IdentPtr _importMeta; // Special import.meta identifier }; WellKnownPropertyPids wellKnownPropertyPids; @@ -534,8 +554,6 @@ class Parser if (buildAST) { pnode->grfnop = 0; - pnode->pnodeOuter = (NULL == m_pstmtCur) ? NULL : m_pstmtCur->pnodeStmt; - pStmt->pnodeStmt = pnode; } else @@ -635,10 +653,12 @@ class Parser ModuleImportOrExportEntryList* EnsureModuleStarExportEntryList(); void AddModuleSpecifier(IdentPtr moduleRequest); - ModuleImportOrExportEntry* AddModuleImportOrExportEntry(ModuleImportOrExportEntryList* importOrExportEntryList, IdentPtr importName, IdentPtr localName, IdentPtr exportName, IdentPtr moduleRequest); + ModuleImportOrExportEntry* AddModuleImportOrExportEntry(ModuleImportOrExportEntryList* importOrExportEntryList, IdentPtr importName, IdentPtr localName, IdentPtr exportName, IdentPtr moduleRequest, charcount_t offsetForError = 0); ModuleImportOrExportEntry* AddModuleImportOrExportEntry(ModuleImportOrExportEntryList* importOrExportEntryList, ModuleImportOrExportEntry* importOrExportEntry); void AddModuleLocalExportEntry(ParseNodePtr varDeclNode); + void CheckForDuplicateExportEntry(IdentPtr exportName); void CheckForDuplicateExportEntry(ModuleImportOrExportEntryList* exportEntryList, IdentPtr exportName); + void VerifyModuleLocalExportEntries(); ParseNodeVar * CreateModuleImportDeclNode(IdentPtr localName); @@ -731,8 +751,15 @@ class Parser else { ForEachItemInList(patternNode->AsParseNodeUni()->pnode1, [&](ParseNodePtr item) { - Assert(item->nop == knopObjectPatternMember); - MapBindIdentifierFromElement(item->AsParseNodeBin()->pnode2, handler); + Assert(item->nop == knopObjectPatternMember || item->nop == knopEllipsis); + if (item->nop == knopObjectPatternMember) + { + MapBindIdentifierFromElement(item->AsParseNodeBin()->pnode2, handler); + } + else + { + MapBindIdentifierFromElement(item->AsParseNodeUni()->pnode1, handler); + } }); } } @@ -848,7 +875,7 @@ class Parser static MemberNameToTypeMap* CreateMemberNameMap(ArenaAllocator* pAllocator); template void ParseComputedName(ParseNodePtr* ppnodeName, LPCOLESTR* ppNameHint, LPCOLESTR* ppFullNameHint = nullptr, uint32 *pNameLength = nullptr, uint32 *pShortNameOffset = nullptr); - template ParseNodeBin * ParseMemberGetSet(OpCode nop, LPCOLESTR* ppNameHint); + template ParseNodeBin * ParseMemberGetSet(OpCode nop, LPCOLESTR* ppNameHint,size_t iecpMin, charcount_t ichMin); template ParseNode * ParseFncDeclCheckScope(ushort flags, bool fAllowIn = true); template ParseNodeFnc * ParseFncDeclNoCheckScope(ushort flags, SuperRestrictionState::State superRestrictionState = SuperRestrictionState::Disallowed, LPCOLESTR pNameHint = nullptr, const bool needsPIDOnRCurlyScan = false, bool fUnaryOrParen = false, bool fAllowIn = true); template ParseNodeFnc * ParseFncDeclInternal(ushort flags, LPCOLESTR pNameHint, const bool needsPIDOnRCurlyScan, bool fUnaryOrParen, bool noStmtContext, SuperRestrictionState::State superRestrictionState = SuperRestrictionState::Disallowed, bool fAllowIn = true); @@ -915,7 +942,8 @@ class Parser _Inout_opt_ IdentToken* pToken = NULL, bool fUnaryOrParen = false, _Inout_opt_ bool* pfLikelyPattern = nullptr, - _Inout_opt_ charcount_t *plastRParen = nullptr); + _Inout_opt_ charcount_t *plastRParen = nullptr, + _Out_opt_ bool* looseCoalesce = nullptr); template ParseNodePtr ParseTerm( BOOL fAllowCall = TRUE, @@ -928,7 +956,8 @@ class Parser _Out_opt_ BOOL* pfCanAssign = nullptr, _Inout_opt_ BOOL* pfLikelyPattern = nullptr, _Out_opt_ bool* pfIsDotOrIndex = nullptr, - _Inout_opt_ charcount_t *plastRParen = nullptr); + _Inout_opt_ charcount_t *plastRParen = nullptr, + _Out_opt_ bool* looseCoalesce = nullptr); template ParseNodePtr ParsePostfixOperators( ParseNodePtr pnode, @@ -947,8 +976,9 @@ class Parser charcount_t ichMin, _Out_opt_ BOOL* pfCanAssign = nullptr); - bool IsImportOrExportStatementValidHere(); + void CheckIfImportOrExportStatementValidHere(); bool IsTopLevelModuleFunc(); + void MakeModuleAsync(); template ParseNodePtr ParseImport(); template void ParseImportClause(ModuleImportOrExportEntryList* importEntryList, bool parsingAfterComma = false); @@ -990,7 +1020,6 @@ class Parser void AppendToList(ParseNodePtr * node, ParseNodePtr nodeToAppend); - bool IsES6DestructuringEnabled() const; bool IsPossiblePatternStart() const { return m_token.tk == tkLCurly || m_token.tk == tkLBrack; } bool IsPostFixOperators() const { @@ -1024,7 +1053,7 @@ class Parser BOOL *nativeForOkay = nullptr); template - ParseNodePtr ParseDestructuredVarDecl(tokens declarationType, bool isDecl, bool *hasSeenRest, bool topLevel = true, bool allowEmptyExpression = true); + ParseNodePtr ParseDestructuredVarDecl(tokens declarationType, bool isDecl, bool *hasSeenRest, bool topLevel = true, bool allowEmptyExpression = true, bool isObjectPattern = false); template ParseNodePtr ParseDestructuredInitializer(ParseNodeUni * lhsNode, @@ -1053,6 +1082,7 @@ class Parser IdentPtr GetArgumentsPid() const { return wellKnownPropertyPids.arguments; } IdentPtr GetEvalPid() const { return wellKnownPropertyPids.eval; } IdentPtr GetTargetPid() const { return wellKnownPropertyPids.target; } + IdentPtr GetMetaPid() const { return wellKnownPropertyPids.meta; } BackgroundParseItem *GetCurrBackgroundParseItem() const { return currBackgroundParseItem; } void SetCurrBackgroundParseItem(BackgroundParseItem *item) { currBackgroundParseItem = item; } @@ -1073,11 +1103,11 @@ class Parser void AddToNodeList(ParseNode ** ppnodeList, ParseNode *** pppnodeLast, ParseNode * pnodeAdd); void AddToNodeListEscapedUse(ParseNode ** ppnodeList, ParseNode *** pppnodeLast, ParseNode * pnodeAdd); - void ChkCurTokNoScan(int tk, int wErr) + void ChkCurTokNoScan(int tk, int wErr, LPCWSTR stringOne = _u(""), LPCWSTR stringTwo = _u("")) { if (m_token.tk != tk) { - Error(wErr); + Error(wErr, stringOne, stringTwo); } } diff --git a/lib/Parser/ParseFlags.h b/lib/Parser/ParseFlags.h index 2ea871802b2..e3f2a2a663e 100644 --- a/lib/Parser/ParseFlags.h +++ b/lib/Parser/ParseFlags.h @@ -14,7 +14,7 @@ enum fscrWillDeferFncParse = 1 << 3, // Heuristically choosing to defer parsing of functions fscrCanDeferFncParse = 1 << 4, // Functionally able to defer parsing of functions fscrDynamicCode = 1 << 5, // The code is being generated dynamically (eval, new Function, etc.) - // Unused = 1 << 6, + fscrUseStrictMode = 1 << 6, fscrNoImplicitHandlers = 1 << 7, // same as Opt NoConnect at start of block fscrCreateParserState = 1 << 8, // The parser should expose parser state information on the parse nodes. // This parser state includes the set of names which are captured by each function @@ -28,28 +28,31 @@ enum fscrEval = 1 << 10, // this expression has eval semantics (i.e., run in caller's context fscrEvalCode = 1 << 11, // this is an eval expression fscrGlobalCode = 1 << 12, // this is a global script - // Unused = 1 << 13, - fscrDeferredFncExpression = 1 << 14, // the function decl node we deferred is an expression, - // i.e., not a declaration statement - fscrDeferredFnc = 1 << 15, // the function we are parsing is deferred - fscrNoPreJit = 1 << 16, // ignore prejit global flag - fscrAllowFunctionProxy = 1 << 17, // Allow creation of function proxies instead of function bodies - fscrIsLibraryCode = 1 << 18, // Current code is engine library code written in Javascript - fscrNoDeferParse = 1 << 19, // Do not defer parsing - fscrJsBuiltIn = 1 << 20, // Current code is a JS built in code written in JavaScript + fscrIsModuleCode = 1 << 13, // Current code should be parsed as a module body + fscrNoAsmJs = 1 << 14, // Disable generation of asm.js code + fscrNoPreJit = 1 << 15, // ignore prejit global flag + fscrAllowFunctionProxy = 1 << 16, // Allow creation of function proxies instead of function bodies + fscrIsLibraryCode = 1 << 17, // Current code is engine library code written in Javascript + fscrNoDeferParse = 1 << 18, // Do not defer parsing + fscrJsBuiltIn = 1 << 19, // Current code is a JS built in code written in JavaScript #ifdef IR_VIEWER - fscrIrDumpEnable = 1 << 21, // Allow parseIR to generate an IR dump + fscrIrDumpEnable = 1 << 20, // Allow parseIR to generate an IR dump #endif /* IRVIEWER */ // Throw a ReferenceError when the global 'this' is used (possibly in a lambda), // for debugger when broken in a lambda that doesn't capture 'this' - fscrDebuggerErrorOnGlobalThis = 1 << 22, - fscrDeferredClassMemberFnc = 1 << 23, - fscrConsoleScopeEval = 1 << 24, // The eval string is console eval or debugEval, used to have top level + fscrDebuggerErrorOnGlobalThis = 1 << 21, + fscrConsoleScopeEval = 1 << 22, // The eval string is console eval or debugEval, used to have top level // let/const in global scope instead of eval scope so that they can be preserved across console inputs - fscrNoAsmJs = 1 << 25, // Disable generation of asm.js code - fscrIsModuleCode = 1 << 26, // Current code should be parsed as a module body - fscrDeferredFncIsMethod = 1 << 27, - fscrAll = (1 << 28) - 1 + fscrDeferredFnc = 1 << 23, // the function we are parsing is deferred + fscrDeferredFncExpression = 1 << 24, // the function decl node we deferred is an expression, + // i.e., not a declaration statement + fscrDeferredFncIsAsync = 1 << 25, + fscrDeferredFncIsMethod = 1 << 26, + fscrDeferredFncIsGenerator = 1 << 27, + fscrDeferredFncIsClassMember = 1 << 28, + fscrDeferredFncIsClassConstructor = 1 << 29, + fscrDeferredFncIsBaseClassConstructor = 1 << 30, + fscrAll = (1 << 29) - 1 }; diff --git a/lib/Parser/ParserCommon.h b/lib/Parser/ParserCommon.h index acfe540975f..e7bf3ced37b 100644 --- a/lib/Parser/ParserCommon.h +++ b/lib/Parser/ParserCommon.h @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- // Common definitions used outside parser so that we don't have to include the whole Parser.h. @@ -25,13 +26,11 @@ enum ErrorTypeEnum kjstSyntaxError, kjstTypeError, kjstURIError, + kjstAggregateError, kjstWebAssemblyCompileError, kjstWebAssemblyRuntimeError, kjstWebAssemblyLinkError, kjstCustomError, -#ifdef ENABLE_PROJECTION - kjstWinRTError, -#endif }; class ParseNode; @@ -39,14 +38,17 @@ class ParseNodeFnc; typedef ParseNode *ParseNodePtr; struct Ident; +struct PidRefStack; typedef Ident *IdentPtr; struct ModuleImportOrExportEntry { - IdentPtr moduleRequest; - IdentPtr importName; - IdentPtr localName; - IdentPtr exportName; + IdentPtr moduleRequest; + IdentPtr importName; + IdentPtr localName; + IdentPtr exportName; + PidRefStack* pidRefStack; + charcount_t offset; }; typedef SList ModuleImportOrExportEntryList; diff --git a/lib/Parser/RegexCompileTime.cpp b/lib/Parser/RegexCompileTime.cpp index 513843362f5..fcbeac2c654 100644 --- a/lib/Parser/RegexCompileTime.cpp +++ b/lib/Parser/RegexCompileTime.cpp @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #include "ParserPch.h" @@ -2538,7 +2539,7 @@ namespace UnifiedRegex { // Root of trie will live in compile-time allocator, but body will be in run-time allocator runtimeTrie = Anew(compiler.ctAllocator, RuntimeCharTrie); - runtimeTrie->CloneFrom(compiler.rtAllocator, trie); + runtimeTrie->CloneFrom(compiler.scriptContext, compiler.rtAllocator, trie); scheme = Trie; } return; @@ -4611,7 +4612,7 @@ namespace UnifiedRegex { #if ENABLE_REGEX_CONFIG_OPTIONS - if (w != 0) + if (w != 0 && REGEX_CONFIG_FLAG(RegexDebugAST)) { w->PrintEOL(_u("REGEX AST /%s/ {"), PointerValue(program->source)); w->Indent(); @@ -4723,7 +4724,7 @@ namespace UnifiedRegex root->AnnotatePass4(compiler); #if ENABLE_REGEX_CONFIG_OPTIONS - if (w != 0) + if (w != 0 && REGEX_CONFIG_FLAG(RegexDebugAST) && REGEX_CONFIG_FLAG(RegexDebugAnnotatedAST)) { w->PrintEOL(_u("REGEX ANNOTATED AST /%s/ {"), PointerValue(program->source)); w->Indent(); diff --git a/lib/Parser/RegexFlags.h b/lib/Parser/RegexFlags.h index ab4bb897ee0..f2501ff60a0 100644 --- a/lib/Parser/RegexFlags.h +++ b/lib/Parser/RegexFlags.h @@ -14,6 +14,7 @@ namespace UnifiedRegex MultilineRegexFlag = 1 << 2, UnicodeRegexFlag = 1 << 3, StickyRegexFlag = 1 << 4, - AllRegexFlags = (1 << 5) - 1 + DotAllRegexFlag = 1 << 5, + AllRegexFlags = (1 << 6) - 1 }; } diff --git a/lib/Parser/RegexParser.cpp b/lib/Parser/RegexParser.cpp index b19978c24c7..fc92a97643b 100644 --- a/lib/Parser/RegexParser.cpp +++ b/lib/Parser/RegexParser.cpp @@ -145,6 +145,7 @@ namespace UnifiedRegex , tempLocationOfRange(nullptr) , codePointAtTempLocation(0) , unicodeFlagPresent(false) + , dotAllFlagPresent(false) , caseInsensitiveFlagPresent(false) , positionAfterLastSurrogate(nullptr) , valueOfLastSurrogate(INVALID_CODEPOINT) @@ -2236,7 +2237,7 @@ namespace UnifiedRegex Assert(!unicodeFlagPresent); Fail(JSERR_RegExpBadRange); } - + codePointSet.SetRange(ctAllocator, pendingRangeStart, pendingCodePoint); pendingRangeStart = pendingCodePoint = INVALID_CODEPOINT; } @@ -2633,7 +2634,7 @@ namespace UnifiedRegex else { // If the lookahead is a non-alphanumeric and not an underscore ('_'), then treat '\' and 'c' separately. - //#sec-regular-expression-patterns-semantics + //#sec-regular-expression-patterns-semantics ECRevert(1); //Put cursor back at 'c' and treat it as a non-escaped character. deferredCharNode->cs[0] = '\\'; return deferredCharNode; @@ -2749,6 +2750,16 @@ namespace UnifiedRegex } flags = (RegexFlags)(flags | MultilineRegexFlag); break; + case 's': + if (scriptContext->GetConfig()->IsES2018RegExDotAllEnabled()) + { + if ((flags & DotAllRegexFlag) != 0) + { + Fail(JSERR_RegExpSyntax); + } + flags = (RegexFlags)(flags | DotAllRegexFlag); + break; + } case 'u': // If we don't have unicode enabled, fall through to default if (scriptContext->GetConfig()->IsES6UnicodeExtensionsEnabled()) @@ -2823,12 +2834,15 @@ namespace UnifiedRegex Fail(JSERR_RegExpSyntax); this->unicodeFlagPresent = (flags & UnifiedRegex::UnicodeRegexFlag) == UnifiedRegex::UnicodeRegexFlag; this->caseInsensitiveFlagPresent = (flags & UnifiedRegex::IgnoreCaseRegexFlag) == UnifiedRegex::IgnoreCaseRegexFlag; + this->dotAllFlagPresent = (flags & UnifiedRegex::DotAllRegexFlag) == UnifiedRegex::DotAllRegexFlag; Assert(!this->unicodeFlagPresent || scriptContext->GetConfig()->IsES6UnicodeExtensionsEnabled()); + Assert(!this->dotAllFlagPresent || scriptContext->GetConfig()->IsES2018RegExDotAllEnabled()); } else { this->unicodeFlagPresent = false; this->caseInsensitiveFlagPresent = false; + this->dotAllFlagPresent = false; } // If this HR has been set, that means we have an earlier failure than the one caught above. @@ -2882,6 +2896,7 @@ namespace UnifiedRegex Options(flags); this->unicodeFlagPresent = (flags & UnifiedRegex::UnicodeRegexFlag) == UnifiedRegex::UnicodeRegexFlag; this->caseInsensitiveFlagPresent = (flags & UnifiedRegex::IgnoreCaseRegexFlag) == UnifiedRegex::IgnoreCaseRegexFlag; + this->dotAllFlagPresent = (flags & UnifiedRegex::DotAllRegexFlag) == UnifiedRegex::DotAllRegexFlag; Assert(!this->unicodeFlagPresent || scriptContext->GetConfig()->IsES6UnicodeExtensionsEnabled()); // If this HR has been set, that means we have an earlier failure than the one caught above. @@ -2937,6 +2952,7 @@ namespace UnifiedRegex Options(dummyFlags); this->unicodeFlagPresent = (dummyFlags & UnifiedRegex::UnicodeRegexFlag) == UnifiedRegex::UnicodeRegexFlag; this->caseInsensitiveFlagPresent = (dummyFlags & UnifiedRegex::IgnoreCaseRegexFlag) == UnifiedRegex::IgnoreCaseRegexFlag; + this->dotAllFlagPresent = (dummyFlags & UnifiedRegex::DotAllRegexFlag) == UnifiedRegex::DotAllRegexFlag; outTotalEncodedChars = Chars::OSB(next, input); outTotalChars = Pos(); @@ -3092,7 +3108,14 @@ namespace UnifiedRegex switch (cc) { case '.': - standardChars->SetNonNewline(ctAllocator, partialPrefixSetNode->set); + if (this->dotAllFlagPresent) + { + standardChars->SetFullSet(ctAllocator, partialPrefixSetNode->set); + } + else + { + standardChars->SetNonNewline(ctAllocator, partialPrefixSetNode->set); + } break; case 'S': standardChars->SetNonWhitespace(ctAllocator, partialPrefixSetNode->set); @@ -3128,7 +3151,14 @@ namespace UnifiedRegex switch (cc) { case '.': - standardChars->SetNonNewline(ctAllocator, setNode->set); + if (this->dotAllFlagPresent) + { + standardChars->SetFullSet(ctAllocator, setNode->set); + } + else + { + standardChars->SetNonNewline(ctAllocator, setNode->set); + } break; case 'S': standardChars->SetNonWhitespace(ctAllocator, setNode->set); diff --git a/lib/Parser/RegexParser.h b/lib/Parser/RegexParser.h index 9264ef8a3ab..cbc5befb402 100644 --- a/lib/Parser/RegexParser.h +++ b/lib/Parser/RegexParser.h @@ -107,6 +107,7 @@ namespace UnifiedRegex SurrogatePairTracker* currentSurrogatePairNode; bool unicodeFlagPresent; bool caseInsensitiveFlagPresent; + bool dotAllFlagPresent; // The following two variables are used to determine if the the surrogate pair has been encountered // First holds the temporary location, second holds the value of the codepoint diff --git a/lib/Parser/RegexPattern.cpp b/lib/Parser/RegexPattern.cpp index a79702bad04..d564fbe1a83 100644 --- a/lib/Parser/RegexPattern.cpp +++ b/lib/Parser/RegexPattern.cpp @@ -93,6 +93,11 @@ namespace UnifiedRegex return (rep.unified.program->flags & IgnoreCaseRegexFlag) != 0; } + bool RegexPattern::IsDotAll() const + { + return GetScriptContext()->GetConfig()->IsES2018RegExDotAllEnabled() && (rep.unified.program->flags & DotAllRegexFlag) != 0; + } + bool RegexPattern::IsGlobal() const { return (rep.unified.program->flags & GlobalRegexFlag) != 0; @@ -178,6 +183,9 @@ namespace UnifiedRegex case _u('\x2029'): w->PrintEscapedChar(c); break; + case _u('-'): + w->Print(_u("-")); + break; case _u('\\'): Assert(i + 1 < str.GetLength()); // cannot end in a '\' w->Print(_u("\\%lc"), str.GetBuffer()[++i]); @@ -195,6 +203,8 @@ namespace UnifiedRegex w->Print(_u("g")); if (IsMultiline()) w->Print(_u("m")); + if (IsDotAll()) + w->Print(_u("s")); if (IsUnicode()) w->Print(_u("u")); if (IsSticky()) diff --git a/lib/Parser/RegexPattern.h b/lib/Parser/RegexPattern.h index 4af0e386ddd..44d1a77a01a 100644 --- a/lib/Parser/RegexPattern.h +++ b/lib/Parser/RegexPattern.h @@ -62,6 +62,7 @@ namespace UnifiedRegex bool IsIgnoreCase() const; bool IsGlobal() const; bool IsMultiline() const; + bool IsDotAll() const; bool IsUnicode() const; bool IsSticky() const; bool WasLastMatchSuccessful() const; diff --git a/lib/Parser/RegexRuntime.cpp b/lib/Parser/RegexRuntime.cpp index f6f76eabdd5..3ee0dc5c666 100644 --- a/lib/Parser/RegexRuntime.cpp +++ b/lib/Parser/RegexRuntime.cpp @@ -778,6 +778,7 @@ namespace UnifiedRegex #if ENABLE_REGEX_CONFIG_OPTIONS void TrieMixin::Print(DebugWriter* w, const char16* litbuf) const { + w->PrintEOL(_u("")); trie.Print(w); } #endif @@ -5752,12 +5753,33 @@ namespace UnifiedRegex w->PrintEOL(_u("Program {")); w->Indent(); w->PrintEOL(_u("source: %s"), PointerValue(source)); + + w->Print(_u("litbuf: ")); + const char16 *litbuf = this->rep.insts.litbuf; + size_t litbufLen = 0; + if (litbuf == nullptr) + { + w->PrintEOL(_u("")); + } + else + { + litbufLen = this->rep.insts.litbufLen; + for (size_t i = 0; i < litbufLen; ++i) + { + const char16 c = (char16)litbuf[i]; + w->PrintEscapedChar(c); + } + w->PrintEOL(_u("")); + } + w->PrintEOL(_u("litbufLen: %u"), litbufLen); + w->Print(_u("flags: ")); if ((flags & GlobalRegexFlag) != 0) w->Print(_u("global ")); if ((flags & MultilineRegexFlag) != 0) w->Print(_u("multiline ")); - if ((flags & IgnoreCaseRegexFlag) != 0) w->Print(_u("ignorecase")); - if ((flags & UnicodeRegexFlag) != 0) w->Print(_u("unicode")); - if ((flags & StickyRegexFlag) != 0) w->Print(_u("sticky")); + if ((flags & IgnoreCaseRegexFlag) != 0) w->Print(_u("ignorecase ")); + if ((flags & DotAllRegexFlag) != 0) w->Print(_u("dotAll ")); + if ((flags & UnicodeRegexFlag) != 0) w->Print(_u("unicode ")); + if ((flags & StickyRegexFlag) != 0) w->Print(_u("sticky ")); w->EOL(); w->PrintEOL(_u("numGroups: %d"), numGroups); w->PrintEOL(_u("numLoops: %d"), numLoops); diff --git a/lib/Parser/Scan.cpp b/lib/Parser/Scan.cpp index a1bb126a387..d3b2be4eb1b 100644 --- a/lib/Parser/Scan.cpp +++ b/lib/Parser/Scan.cpp @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #include "ParserPch.h" @@ -492,6 +493,8 @@ tokens Scanner::ScanIdentifierContinue(bool identifyKwds, bool f break; } + m_lastIdentifierHasEscape = fHasEscape; + Assert(p - pchMin > 0 && p - pchMin <= LONG_MAX); *pp = p; @@ -597,12 +600,12 @@ IdentPtr Scanner::PidOfIdentiferAt(EncodedCharPtr p, EncodedChar } template -typename Scanner::EncodedCharPtr Scanner::FScanNumber(EncodedCharPtr p, double *pdbl, bool& likelyInt) +typename Scanner::EncodedCharPtr Scanner::FScanNumber(EncodedCharPtr p, double *pdbl, LikelyNumberType& likelyType, size_t savedMultiUnits) { EncodedCharPtr last = m_pchLast; EncodedCharPtr pchT = nullptr; bool baseSpecified = false; - likelyInt = true; + likelyType = LikelyNumberType::Int; // Reset m_OctOrLeadingZeroOnLastTKNumber = false; @@ -627,27 +630,28 @@ typename Scanner::EncodedCharPtr Scanner::FScanN case '.': case 'e': case 'E': - likelyInt = false; + case 'n': + likelyType = LikelyNumberType::Double; // Floating point goto LFloat; case 'x': case 'X': // Hex - *pdbl = Js::NumberUtilities::DblFromHex(p + 2, &pchT); + *pdbl = Js::NumberUtilities::DblFromHex(p + 2, &pchT, m_scriptContext->GetConfig()->IsESNumericSeparatorEnabled()); baseSpecifierCheck(); goto LIdCheck; case 'o': case 'O': // Octal - *pdbl = Js::NumberUtilities::DblFromOctal(p + 2, &pchT); + *pdbl = Js::NumberUtilities::DblFromOctal(p + 2, &pchT, m_scriptContext->GetConfig()->IsESNumericSeparatorEnabled()); baseSpecifierCheck(); goto LIdCheck; case 'b': case 'B': // Binary - *pdbl = Js::NumberUtilities::DblFromBinary(p + 2, &pchT); + *pdbl = Js::NumberUtilities::DblFromBinary(p + 2, &pchT, m_scriptContext->GetConfig()->IsESNumericSeparatorEnabled()); baseSpecifierCheck(); goto LIdCheck; @@ -678,8 +682,12 @@ typename Scanner::EncodedCharPtr Scanner::FScanN else { LFloat: - *pdbl = Js::NumberUtilities::StrToDbl(p, &pchT, likelyInt); + *pdbl = Js::NumberUtilities::StrToDbl(p, &pchT, likelyType, m_scriptContext->GetConfig()->IsESBigIntEnabled(), m_scriptContext->GetConfig()->IsESNumericSeparatorEnabled()); Assert(pchT == p || !Js::NumberUtilities::IsNan(*pdbl)); + if (likelyType == LikelyNumberType::BigInt) + { + Assert(*pdbl == 0); + } // fall through to LIdCheck } @@ -696,6 +704,7 @@ typename Scanner::EncodedCharPtr Scanner::FScanN } if (this->charClassifier->IsIdStart(outChar)) { + this->RestoreMultiUnits(savedMultiUnits); Error(ERRIdAfterLit); } @@ -705,12 +714,14 @@ typename Scanner::EncodedCharPtr Scanner::FScanN startingLocation++; // TryReadEscape expects us to point to the 'u', and since it is by reference we need to do it beforehand. if (TryReadEscape(startingLocation, m_pchLast, &outChar)) { + this->RestoreMultiUnits(savedMultiUnits); Error(ERRIdAfterLit); } } if (Js::NumberUtilities::IsDigit(*startingLocation)) { + this->RestoreMultiUnits(savedMultiUnits); Error(ERRbadNumber); } @@ -1056,7 +1067,6 @@ tokens Scanner::ScanStringConstant(OLECHAR delim, EncodedCharPtr ch = rawch = kchNWL; } -LEcmaLineBreak: // Fall through case kchNWL: if (stringTemplateMode) @@ -1116,18 +1126,7 @@ tokens Scanner::ScanStringConstant(OLECHAR delim, EncodedCharPtr LMainDefault: if (this->IsMultiUnitChar(ch)) { - if ((ch == kchLS || ch == kchPS)) - { - goto LEcmaLineBreak; - } - rawch = ch = this->template ReadRest(ch, p, last); - switch (ch) - { - case kchLS: // 0x2028, classifies as new line - case kchPS: // 0x2029, classifies as new line - goto LEcmaLineBreak; - } } break; @@ -1594,9 +1593,10 @@ tokens Scanner::ScanCore(bool identifyKwds) bool seenDelimitedCommentEnd = false; // store the last token - m_tkPrevious = m_ptoken->tk; + m_tokenPrevious = *m_ptoken; m_iecpLimTokPrevious = IecpLimTok(); // Introduced for use by lambda parsing to find correct span of expression lambdas m_ichLimTokPrevious = IchLimTok(); + size_t savedMultiUnits = this->m_cMultiUnits; if (p >= last) { @@ -1637,6 +1637,7 @@ tokens Scanner::ScanCore(bool identifyKwds) #endif switch (ch) { +LDefault: default: if (ch == kchLS || ch == kchPS ) @@ -1729,19 +1730,28 @@ tokens Scanner::ScanCore(bool identifyKwds) Assert(chType == _C_DIG || chType == _C_DOT); p = m_pchMinTok; this->RestoreMultiUnits(m_cMinTokMultiUnits); - bool likelyInt = true; - pchT = FScanNumber(p, &dbl, likelyInt); + LikelyNumberType likelyType = LikelyNumberType::Int; + pchT = FScanNumber(p, &dbl, likelyType, savedMultiUnits); if (p == pchT) { + this->RestoreMultiUnits(savedMultiUnits); Assert(this->PeekFirst(p, last) != '.'); Error(ERRbadNumber); } Assert(!Js::NumberUtilities::IsNan(dbl)); - + if (likelyType == LikelyNumberType::BigInt) + { + Assert(m_scriptContext->GetConfig()->IsESBigIntEnabled()); + AssertOrFailFast(pchT - p < UINT_MAX); + token = tkBigIntCon; + m_ptoken->SetBigInt(this->GetHashTbl()->PidHashNameLen(p, pchT, (uint32) (pchT - p))); + p = pchT; + break; + } p = pchT; int32 value; - if (likelyInt && Js::NumberUtilities::FDblIsInt32(dbl, &value)) + if ((likelyType == LikelyNumberType::Int) && Js::NumberUtilities::FDblIsInt32(dbl, &value)) { m_ptoken->SetLong(value); token = tkIntCon; @@ -1749,7 +1759,7 @@ tokens Scanner::ScanCore(bool identifyKwds) else { token = tkFltCon; - m_ptoken->SetDouble(dbl, likelyInt); + m_ptoken->SetDouble(dbl, likelyType == LikelyNumberType::Int); } break; @@ -1761,7 +1771,18 @@ tokens Scanner::ScanCore(bool identifyKwds) case '[': Assert(chType == _C_LBR); token = tkLBrack; break; case ']': Assert(chType == _C_RBR); token = tkRBrack; break; case '~': Assert(chType == _C_TIL); token = tkTilde; break; - case '?': Assert(chType == _C_QUE); token = tkQMark; break; + + case '?': + Assert(chType == _C_QUE); + token = tkQMark; + if (m_scriptContext->GetConfig()->IsESNullishCoalescingOperatorEnabled() && this->PeekFirst(p, last) == '?') + { + p++; + token = tkCoalesce; + break; + } + break; + case '{': Assert(chType == _C_LC); token = tkLCurly; break; // ES 2015 11.3 Line Terminators @@ -1943,6 +1964,16 @@ tokens Scanner::ScanCore(bool identifyKwds) } } break; + + case '#': + // Hashbang syntax is a single line comment only if it is the first token in the source + if (m_scriptContext->GetConfig()->IsESHashbangEnabled() && this->PeekFirst(p, last) == '!' && m_pchBase == m_pchMinTok) + { + p++; + goto LSkipLineComment; + } + goto LDefault; + case '/': token = tkDiv; switch(this->PeekFirst(p, last)) diff --git a/lib/Parser/Scan.h b/lib/Parser/Scan.h index b34e163b374..199ebfe40b5 100644 --- a/lib/Parser/Scan.h +++ b/lib/Parser/Scan.h @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #pragma once @@ -58,6 +59,7 @@ struct Token Assert(tk == tkStrCon || tk == tkStrTmplBasic || tk == tkStrTmplBegin || tk == tkStrTmplMid || tk == tkStrTmplEnd); return u.pid; } + IdentPtr GetIdentifier(HashTbl * hashTbl) { Assert(IsIdentifier() || IsReservedWord()); @@ -74,6 +76,12 @@ struct Token return u.lw; } + IdentPtr GetBigInt() const + { + Assert(tk == tkBigIntCon); + return u.pid; + } + double GetDouble() const { Assert(tk == tkFltCon); @@ -138,6 +146,12 @@ struct Token this->u.maybeInt = maybeInt; } + void SetBigInt(IdentPtr pid) + { + this->u.pid = pid; + this->u.pchMin = nullptr; + } + tokens SetRegex(UnifiedRegex::RegexPattern *const pattern, Parser *const parser); }; @@ -480,6 +494,10 @@ class Scanner : public IScanner, public EncodingPolicy return m_EscapeOnLastTkStrCon; } + bool LastIdentifierHasEscape() + { + return m_lastIdentifierHasEscape; + } bool IsOctOrLeadingZeroOnLastTKNumber() { @@ -500,7 +518,6 @@ class Scanner : public IScanner, public EncodingPolicy // character of the token would have if the entire file was converted to Unicode (UTF16-LE). charcount_t IchLimTok(void) const { - Assert(m_currentCharacter - m_pchBase >= 0); Assert(m_currentCharacter - m_pchBase <= LONG_MAX); Assert(static_cast(m_currentCharacter - m_pchBase) >= this->m_cMultiUnits); @@ -689,6 +706,8 @@ class Scanner : public IScanner, public EncodingPolicy } }; + tokens GetPrevious() { return m_tokenPrevious.tk; } + Token GetPreviousToken() { return m_tokenPrevious; } void Capture(_Out_ RestorePoint* restorePoint); void SeekTo(const RestorePoint& restorePoint); void SeekToForcingPid(const RestorePoint& restorePoint); @@ -717,6 +736,7 @@ class Scanner : public IScanner, public EncodingPolicy BOOL m_doubleQuoteOnLastTkStrCon :1; bool m_OctOrLeadingZeroOnLastTKNumber :1; bool m_EscapeOnLastTkStrCon:1; + bool m_lastIdentifierHasEscape:1; BOOL m_fNextStringTemplateIsTagged:1; // the next string template scanned has a tag (must create raw strings) BYTE m_DeferredParseFlags:2; // suppressStrPid and suppressIdPid bool es6UnicodeMode; // True if ES6Unicode Extensions are enabled. @@ -738,7 +758,7 @@ class Scanner : public IScanner, public EncodingPolicy Js::ScriptContext* m_scriptContext; const Js::CharClassifier *charClassifier; - tokens m_tkPrevious; + Token m_tokenPrevious; size_t m_iecpLimTokPrevious; charcount_t m_ichLimTokPrevious; @@ -763,11 +783,11 @@ class Scanner : public IScanner, public EncodingPolicy throw ParseExceptionObject(hr); } - const EncodedCharPtr PchBase(void) const + EncodedCharPtr PchBase(void) const { return m_pchBase; } - const EncodedCharPtr PchMinTok(void) + EncodedCharPtr PchMinTok(void) { return m_pchMinTok; } @@ -788,7 +808,7 @@ class Scanner : public IScanner, public EncodingPolicy tokens SkipComment(EncodedCharPtr *pp, /* out */ bool* containTypeDef); tokens ScanRegExpConstant(ArenaAllocator* alloc); tokens ScanRegExpConstantNoAST(ArenaAllocator* alloc); - EncodedCharPtr FScanNumber(EncodedCharPtr p, double *pdbl, bool& likelyInt); + EncodedCharPtr FScanNumber(EncodedCharPtr p, double *pdbl, LikelyNumberType& likelyInt, size_t savedMultiUnits); IdentPtr PidOfIdentiferAt(EncodedCharPtr p, EncodedCharPtr last, bool fHadEscape, bool fHasMultiChar); IdentPtr PidOfIdentiferAt(EncodedCharPtr p, EncodedCharPtr last); uint32 UnescapeToTempBuf(EncodedCharPtr p, EncodedCharPtr last); diff --git a/lib/Parser/StandardChars.cpp b/lib/Parser/StandardChars.cpp index 9980c32aff1..c2c729c3963 100644 --- a/lib/Parser/StandardChars.cpp +++ b/lib/Parser/StandardChars.cpp @@ -261,6 +261,11 @@ END { set.SetNotRanges(setAllocator, numNewlinePairs, newlineStr); } + void StandardChars::SetFullSet(ArenaAllocator* setAllocator, CharSet &set) + { + set.SetNotRanges(allocator, 0, nullptr); + } + CharSet* StandardChars::GetFullSet() { if (fullSet == 0) diff --git a/lib/Parser/StandardChars.h b/lib/Parser/StandardChars.h index 97b0f19da0d..1b762fa36e8 100644 --- a/lib/Parser/StandardChars.h +++ b/lib/Parser/StandardChars.h @@ -323,6 +323,7 @@ namespace UnifiedRegex void SetNonWordIUChars(ArenaAllocator* setAllocator, CharSet &set); void SetNewline(ArenaAllocator* setAllocator, CharSet &set); void SetNonNewline(ArenaAllocator* setAllocator, CharSet &set); + void SetFullSet(ArenaAllocator* setAllocator, CharSet &set); CharSet* GetFullSet(); CharSet* GetEmptySet(); diff --git a/lib/Parser/TextbookBoyerMoore.h b/lib/Parser/TextbookBoyerMoore.h index 3871ac92615..59a4ef8107a 100644 --- a/lib/Parser/TextbookBoyerMoore.h +++ b/lib/Parser/TextbookBoyerMoore.h @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- // From Cormen, Leiserson and Rivest, ch 34. @@ -14,9 +15,9 @@ namespace UnifiedRegex private: typedef typename Chars::Char Char; - template + template friend class TextbookBoyerMoore; - template + template friend class TextbookBoyerMooreWithLinearMap; public: @@ -46,7 +47,7 @@ namespace UnifiedRegex template class TextbookBoyerMooreWithLinearMap : private Chars { - template + template friend struct TextbookBoyerMooreSetup; typedef typename Chars::Char Char; private: @@ -95,7 +96,7 @@ namespace UnifiedRegex template class TextbookBoyerMoore : private Chars { - template + template friend struct TextbookBoyerMooreSetup; typedef typename Chars::Char Char; diff --git a/lib/Parser/cmperr.cpp b/lib/Parser/cmperr.cpp index 13684a16a8c..1adee48715e 100644 --- a/lib/Parser/cmperr.cpp +++ b/lib/Parser/cmperr.cpp @@ -4,8 +4,16 @@ //------------------------------------------------------------------------------------------------------- #include "ParserPch.h" -ParseExceptionObject::ParseExceptionObject(HRESULT hr) : m_hr(hr) +ParseExceptionObject::ParseExceptionObject(HRESULT hr, LPCWSTR stringOneIn, LPCWSTR stringTwoIn) { + m_hr = hr; + stringOne = SysAllocString(stringOneIn); + stringTwo = SysAllocString(stringTwoIn); Assert(FAILED(hr)); } +ParseExceptionObject::~ParseExceptionObject() +{ + SysFreeString(stringOne); + SysFreeString(stringTwo); +} diff --git a/lib/Parser/cmperr.h b/lib/Parser/cmperr.h index 91bff7e74db..a385f01d954 100644 --- a/lib/Parser/cmperr.h +++ b/lib/Parser/cmperr.h @@ -17,8 +17,13 @@ enum class ParseExceptionObject { public: - ParseExceptionObject(HRESULT hr); + ParseExceptionObject(HRESULT hr, LPCWSTR stringOneIn = _u(""), LPCWSTR stringTwoIn = _u("")); + ~ParseExceptionObject(); HRESULT GetError() { return m_hr; } + LPCWSTR GetStringOne() { return stringOne; } + LPCWSTR GetStringTwo() { return stringTwo; } private: HRESULT m_hr; + BSTR stringOne; + BSTR stringTwo; }; diff --git a/lib/Parser/kwd-lsc.h b/lib/Parser/kwd-lsc.h index c8de57c0333..dba31b1c5d9 100644 --- a/lib/Parser/kwd-lsc.h +++ b/lib/Parser/kwd-lsc.h @@ -145,6 +145,7 @@ TOK_DCL(tkQMark ,Que, knopQmark , No, knopNone ) // ? TOK_DCL(tkColon , No, knopNone , No, knopNone ) // : TOK_DCL(tkLogOr ,Lor, knopLogOr , No, knopNone ) // || TOK_DCL(tkLogAnd ,Lan, knopLogAnd , No, knopNone ) // && +TOK_DCL(tkCoalesce ,Lco, knopCoalesce,No, knopNone ) // ?? TOK_DCL(tkOr ,Bor, knopOr , No, knopNone ) // | TOK_DCL(tkXor ,Xor, knopXor , No, knopNone ) // ^ TOK_DCL(tkAnd ,Ban, knopAnd , No, knopNone ) // & diff --git a/lib/Parser/perrors.h b/lib/Parser/perrors.h index ee1ed2070a3..c4b93869ac3 100644 --- a/lib/Parser/perrors.h +++ b/lib/Parser/perrors.h @@ -1,94 +1,96 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- // parser error messages // NOTE: the error numbers should not change from version to version. // Error numbers MUST be sorted. -LSC_ERROR_MSG( 1001, ERRnoMemory , "Out of memory") -LSC_ERROR_MSG( 1002, ERRsyntax , "Syntax error") -LSC_ERROR_MSG( 1003, ERRnoColon , "Expected ':'") -LSC_ERROR_MSG( 1004, ERRnoSemic , "Expected ';'") -LSC_ERROR_MSG( 1005, ERRnoLparen , "Expected '('") -LSC_ERROR_MSG( 1006, ERRnoRparen , "Expected ')'") -LSC_ERROR_MSG( 1007, ERRnoRbrack , "Expected ']'") -LSC_ERROR_MSG( 1008, ERRnoLcurly , "Expected '{'") -LSC_ERROR_MSG( 1009, ERRnoRcurly , "Expected '}'") -LSC_ERROR_MSG( 1010, ERRnoIdent , "Expected identifier") -LSC_ERROR_MSG( 1011, ERRnoEq , "Expected '='") -LSC_ERROR_MSG( 1012, ERRnoSlash , "Expected '/'") -LSC_ERROR_MSG( 1013, ERRbadNumber , "Invalid number") -LSC_ERROR_MSG( 1014, ERRillegalChar , "Invalid character") -LSC_ERROR_MSG( 1015, ERRnoStrEnd , "Unterminated string constant") -LSC_ERROR_MSG( 1016, ERRnoCmtEnd , "Unterminated comment") -LSC_ERROR_MSG( 1017, ERRIdAfterLit , "Unexpected identifier after numeric literal") +LSC_ERROR_MSG(1001, ERRnoMemory , "Out of memory") +LSC_ERROR_MSG(1002, ERRsyntax , "Syntax error") +LSC_ERROR_MSG(1104, ERRsyntaxEOF , "Unexpected end of script.") +LSC_ERROR_MSG(1003, ERRnoColon , "Expected ':'") +LSC_ERROR_MSG(1004, ERRnoSemic , "Expected ';'") +LSC_ERROR_MSG(1005, ERRnoLparen , "Expected '('") +LSC_ERROR_MSG(1006, ERRnoRparen , "Expected ')'") +LSC_ERROR_MSG(1007, ERRnoRbrack , "Expected ']'") +LSC_ERROR_MSG(1008, ERRnoLcurly , "Expected '{'") +LSC_ERROR_MSG(1009, ERRnoRcurly , "Expected '}'") +LSC_ERROR_MSG(1010, ERRnoIdent , "Expected identifier") +LSC_ERROR_MSG(1011, ERRnoEq , "Expected '='") +LSC_ERROR_MSG(1012, ERRnoSlash , "Expected '/'") +LSC_ERROR_MSG(1013, ERRbadNumber , "Invalid number") +LSC_ERROR_MSG(1014, ERRillegalChar , "Invalid character") +LSC_ERROR_MSG(1015, ERRnoStrEnd , "Unterminated string constant") +LSC_ERROR_MSG(1016, ERRnoCmtEnd , "Unterminated comment") +LSC_ERROR_MSG(1017, ERRIdAfterLit , "Unexpected identifier after numeric literal") -LSC_ERROR_MSG( 1018, ERRbadReturn , "'return' statement outside of function") -LSC_ERROR_MSG( 1019, ERRbadBreak , "Can't have 'break' outside of loop") -LSC_ERROR_MSG( 1020, ERRbadContinue , "Can't have 'continue' outside of loop") +LSC_ERROR_MSG(1018, ERRbadReturn , "'return' statement outside of function") +LSC_ERROR_MSG(1019, ERRbadBreak , "Can't have 'break' outside of loop") +LSC_ERROR_MSG(1020, ERRbadContinue , "Can't have 'continue' outside of loop") -LSC_ERROR_MSG( 1023, ERRbadHexDigit , "Expected hexadecimal digit") -LSC_ERROR_MSG( 1024, ERRnoWhile , "Expected 'while'") -LSC_ERROR_MSG( 1025, ERRbadLabel , "Label redefined") -LSC_ERROR_MSG( 1026, ERRnoLabel , "Label not found") -LSC_ERROR_MSG( 1027, ERRdupDefault , "'default' can only appear once in a 'switch' statement") -LSC_ERROR_MSG( 1028, ERRnoMemberIdent , "Expected identifier, string or number") -LSC_ERROR_MSG( 1029, ERRTooManyArgs , "Too many arguments") +LSC_ERROR_MSG(1023, ERRbadHexDigit , "Expected hexadecimal digit") +LSC_ERROR_MSG(1024, ERRnoWhile , "Expected 'while'") +LSC_ERROR_MSG(1025, ERRbadLabel , "Label redefined") +LSC_ERROR_MSG(1026, ERRnoLabel , "Label not found") +LSC_ERROR_MSG(1027, ERRdupDefault , "'default' can only appear once in a 'switch' statement") +LSC_ERROR_MSG(1028, ERRnoMemberIdent , "Expected identifier, string or number") +LSC_ERROR_MSG(1029, ERRTooManyArgs , "Too many arguments") // RETIRED Cc no longer supported ;; LSC_ERROR_MSG( 1030, ERRccOff , "Conditional compilation is turned off") -LSC_ERROR_MSG( 1031, ERRnotConst , "Expected constant") +LSC_ERROR_MSG(1031, ERRnotConst , "Expected constant") // RETIRED Cc no longer supported ;; LSC_ERROR_MSG( 1032, ERRnoAt , "Expected '@'") -LSC_ERROR_MSG( 1033, ERRnoCatch , "Expected 'catch'") -LSC_ERROR_MSG( 1034, ERRnoVar , "Expected 'var'") -LSC_ERROR_MSG( 1035, ERRdanglingThrow , "'throw' must be followed by an expression on the same source line") +LSC_ERROR_MSG(1033, ERRnoCatch , "Expected 'catch'") +LSC_ERROR_MSG(1034, ERRnoVar , "Expected 'var'") +LSC_ERROR_MSG(1035, ERRdanglingThrow , "'throw' must be followed by an expression on the same source line") // RETIRED ECMACP removed ;; LSC_ERROR_MSG( 1036, ERRWithNotInCP , "'with' not available in the ECMA 327 Compact Profile") -LSC_ERROR_MSG( 1037, ERRES5NoWith , "'with' statements are not allowed in strict mode") // string 8 -LSC_ERROR_MSG( 1038, ERRES5ArgSame , "Duplicate formal parameter names not allowed in strict mode") // string 9 -LSC_ERROR_MSG( 1039, ERRES5NoOctal , "Octal numeric literals and escape characters not allowed in strict mode") // string 1 -LSC_ERROR_MSG( 1041, ERREvalUsage , "Invalid usage of 'eval' in strict mode") // string 3 -LSC_ERROR_MSG( 1042, ERRArgsUsage , "Invalid usage of 'arguments' in strict mode") // string 3 -LSC_ERROR_MSG( 1045, ERRInvalidDelete , "Calling delete on expression not allowed in strict mode") //string 4 -LSC_ERROR_MSG( 1046, ERRDupeObjLit , "Multiple definitions of a property not allowed in strict mode") //string 7 -LSC_ERROR_MSG( 1047, ERRFncDeclNotSourceElement, "In strict mode, function declarations cannot be nested inside a statement or block. They may only appear at the top level or directly inside a function body.") -LSC_ERROR_MSG( 1048, ERRKeywordNotId , "The use of a keyword for an identifier is invalid") -LSC_ERROR_MSG( 1049, ERRFutureReservedWordNotId, "The use of a future reserved word for an identifier is invalid") -LSC_ERROR_MSG( 1050, ERRFutureReservedWordInStrictModeNotId, "The use of a future reserved word for an identifier is invalid. The identifier name is reserved in strict mode.") -LSC_ERROR_MSG( 1051, ERRSetterMustHaveOneParameter, "Setter functions must have exactly one parameter") -LSC_ERROR_MSG( 1052, ERRRedeclaration , "Let/Const redeclaration") // "var x; let x;" is also a redeclaration -LSC_ERROR_MSG( 1053, ERRUninitializedConst , "Const must be initialized") -LSC_ERROR_MSG( 1054, ERRDeclOutOfStmt , "Declaration outside statement context") -LSC_ERROR_MSG( 1055, ERRAssignmentToConst , "Assignment to const") -LSC_ERROR_MSG( 1056, ERRUnicodeOutOfRange , "Unicode escape sequence value is higher than 0x10FFFF") -LSC_ERROR_MSG( 1057, ERRInvalidSpreadUse , "Invalid use of the ... operator. Spread can only be used in call arguments or an array literal.") -LSC_ERROR_MSG( 1058, ERRInvalidSuper , "Invalid use of the 'super' keyword") -LSC_ERROR_MSG( 1059, ERRInvalidSuperScope , "The 'super' keyword cannot be used at global scope") -LSC_ERROR_MSG( 1060, ERRSuperInIndirectEval , "The 'super' keyword cannot be used in an indirect eval() call") -LSC_ERROR_MSG( 1061, ERRSuperInGlobalEval , "The 'super' keyword cannot be used in a globally scoped eval() call") -LSC_ERROR_MSG( 1062, ERRnoDArrow , "Expected '=>'") +LSC_ERROR_MSG(1037, ERRES5NoWith , "'with' statements are not allowed in strict mode") // string 8 +LSC_ERROR_MSG(1038, ERRES5ArgSame , "Duplicate formal parameter names not allowed in strict mode") // string 9 +LSC_ERROR_MSG(1039, ERRES5NoOctal , "Octal numeric literals and escape characters not allowed in strict mode") // string 1 +LSC_ERROR_MSG(1041, ERREvalUsage , "Invalid usage of 'eval' in strict mode") // string 3 +LSC_ERROR_MSG(1042, ERRArgsUsage , "Invalid usage of 'arguments' in strict mode") // string 3 +LSC_ERROR_MSG(1045, ERRInvalidDelete , "Calling delete on expression not allowed in strict mode") //string 4 +LSC_ERROR_MSG(1046, ERRDupeObjLit , "Multiple definitions of a property not allowed in strict mode") //string 7 +LSC_ERROR_MSG(1047, ERRFncDeclNotSourceElement, "In strict mode, function declarations cannot be nested inside a statement or block. They may only appear at the top level or directly inside a function body.") +LSC_ERROR_MSG(1048, ERRKeywordNotId , "The use of a keyword for an identifier is invalid") +LSC_ERROR_MSG(1049, ERRFutureReservedWordNotId, "The use of a future reserved word for an identifier is invalid") +LSC_ERROR_MSG(1050, ERRFutureReservedWordInStrictModeNotId, "The use of a future reserved word for an identifier is invalid. The identifier name is reserved in strict mode.") +LSC_ERROR_MSG(1051, ERRSetterMustHaveOneParameter, "Setter functions must have exactly one parameter") +LSC_ERROR_MSG(1052, ERRRedeclaration , "Let/Const redeclaration") // "var x; let x;" is also a redeclaration +LSC_ERROR_MSG(1053, ERRUninitializedConst , "Const must be initialized") +LSC_ERROR_MSG(1054, ERRDeclOutOfStmt , "Declaration outside statement context") +LSC_ERROR_MSG(1055, ERRAssignmentToConst , "Assignment to const") +LSC_ERROR_MSG(1056, ERRUnicodeOutOfRange , "Unicode escape sequence value is higher than 0x10FFFF") +LSC_ERROR_MSG(1057, ERRInvalidSpreadUse , "Invalid use of the ... operator. Spread can only be used in call arguments or an array literal.") +LSC_ERROR_MSG(1058, ERRInvalidSuper , "Invalid use of the 'super' keyword") +LSC_ERROR_MSG(1059, ERRInvalidSuperScope , "The 'super' keyword cannot be used at global scope") +LSC_ERROR_MSG(1060, ERRSuperInIndirectEval , "The 'super' keyword cannot be used in an indirect eval() call") +LSC_ERROR_MSG(1061, ERRSuperInGlobalEval , "The 'super' keyword cannot be used in a globally scoped eval() call") +LSC_ERROR_MSG(1062, ERRnoDArrow , "Expected '=>'") -LSC_ERROR_MSG( 1063, ERRInvalidCodePoint , "Invalid codepoint value in the escape sequence.") -LSC_ERROR_MSG( 1064, ERRMissingCurlyBrace , "Closing curly brace ('}') expected.") -LSC_ERROR_MSG( 1065, ERRRestLastArg, "The rest parameter must be the last parameter in a formals list.") -LSC_ERROR_MSG( 1066, ERRRestWithDefault, "The rest parameter cannot have a default initializer.") -LSC_ERROR_MSG( 1067, ERRUnexpectedEllipsis, "Unexpected ... operator") +LSC_ERROR_MSG(1063, ERRInvalidCodePoint , "Invalid codepoint value in the escape sequence.") +LSC_ERROR_MSG(1064, ERRMissingCurlyBrace , "Closing curly brace ('}') expected.") +LSC_ERROR_MSG(1065, ERRRestLastArg, "The rest parameter must be the last parameter in a formals list.") +LSC_ERROR_MSG(1066, ERRRestWithDefault, "The rest parameter cannot have a default initializer.") +LSC_ERROR_MSG(1067, ERRUnexpectedEllipsis, "Unexpected ... operator") -LSC_ERROR_MSG( 1068, ERRDestructInit, "Destructuring declarations must have an initializer") -LSC_ERROR_MSG( 1069, ERRDestructRestLast, "Destructuring rest variables must be in the last position of the expression") -LSC_ERROR_MSG( 1070, ERRUnexpectedDefault, "Unexpected default initializer") -LSC_ERROR_MSG( 1071, ERRDestructNoOper, "Unexpected operator in destructuring expression") -LSC_ERROR_MSG( 1072, ERRDestructIDRef, "Destructuring expressions can only have identifier references") +LSC_ERROR_MSG(1068, ERRDestructInit, "Destructuring declarations must have an initializer") +LSC_ERROR_MSG(1069, ERRDestructRestLast, "Destructuring rest variables must be in the last position of the expression") +LSC_ERROR_MSG(1070, ERRUnexpectedDefault, "Unexpected default initializer") +LSC_ERROR_MSG(1071, ERRDestructNoOper, "Unexpected operator in destructuring expression") +LSC_ERROR_MSG(1072, ERRDestructIDRef, "Destructuring expressions can only have identifier references") -LSC_ERROR_MSG( 1073, ERRYieldInTryCatchOrFinally, "'yield' expressions are not allowed in 'try', 'catch', or 'finally' blocks") -LSC_ERROR_MSG( 1074, ERRConstructorCannotBeGenerator, "Class constructor may not be a generator") -LSC_ERROR_MSG( 1075, ERRInvalidAssignmentTarget, "Invalid destructuring assignment target") -LSC_ERROR_MSG( 1076, ERRFormalSame, "Duplicate formal parameter names not allowed in this context") -LSC_ERROR_MSG( 1077, ERRDestructNotInit, "Destructuring declarations cannot have an initializer") -// 1078 -- removed +LSC_ERROR_MSG(1073, ERRYieldInTryCatchOrFinally, "'yield' expressions are not allowed in 'try', 'catch', or 'finally' blocks") +LSC_ERROR_MSG(1074, ERRConstructorCannotBeGenerator, "Class constructor may not be a generator") +LSC_ERROR_MSG(1075, ERRInvalidAssignmentTarget, "Invalid destructuring assignment target") +LSC_ERROR_MSG(1076, ERRFormalSame, "Duplicate formal parameter names not allowed in this context") +LSC_ERROR_MSG(1077, ERRDestructNotInit, "Destructuring declarations cannot have an initializer") +LSC_ERROR_MSG(1078, ERRCoalesce, "Coalescing operator '\?\?' not permitted unparenthesized inside '||' or '&&' expressions") LSC_ERROR_MSG(1079, ERRInvalidNewTarget, "Invalid use of the 'new.target' keyword") LSC_ERROR_MSG(1080, ERRForInNoInitAllowed, "for-in loop head declarations cannot have an initializer") LSC_ERROR_MSG(1081, ERRForOfNoInitAllowed, "for-of loop head declarations cannot have an initializer") -LSC_ERROR_MSG(1082, ERRNonSimpleParamListInStrictMode, "Cannot apply strict mode on functions with non-simple parameter list") +LSC_ERROR_MSG(1082, ERRNonSimpleParamListInStrictMode, "Illegal 'use strict' directive in function with non-simple parameter list") LSC_ERROR_MSG(1083, ERRBadAwait, "'await' expression not allowed in this context") @@ -96,7 +98,7 @@ LSC_ERROR_MSG(1084, ERRGetterMustHaveNoParameters, "Getter functions must have n LSC_ERROR_MSG(1085, ERRInvalidUseofExponentiationOperator, "Invalid unary operator on the left hand side of exponentiation (**) operator") -LSC_ERROR_MSG(1086, ERRInvalidModuleImportOrExport, "Module import or export statement unexpected here") +LSC_ERROR_MSG(1086, ERRInvalidModuleImportOrExport, "'import' or 'export' can only occur at top level.") LSC_ERROR_MSG(1087, ERRInvalidExportName, "Unable to resolve module export name") LSC_ERROR_MSG(1088, ERRLetIDInLexicalDecl, "'let' is not an allowed identifier in lexical declarations") @@ -108,4 +110,21 @@ LSC_ERROR_MSG(1092, ERRLabelBeforeAsyncFncDeclaration, "Labels not allowed befor LSC_ERROR_MSG(1093, ERRLabelBeforeClassDeclaration, "Labels not allowed before class declaration") LSC_ERROR_MSG(1094, ERRLabelFollowedByEOF, "Unexpected end of script after a label.") LSC_ERROR_MSG(1095, ERRFunctionAfterLabelInStrict, "Function declarations not allowed after a label in strict mode.") -LSC_ERROR_MSG(1096, ERRAwaitAsLabelInAsync, "Use of 'await' as label in async function is not allowed.") \ No newline at end of file +LSC_ERROR_MSG(1096, ERRAwaitAsLabelInAsync, "Use of 'await' as label in async function is not allowed.") +LSC_ERROR_MSG(1097, ERRExperimental, "Use of disabled experimental feature") +LSC_ERROR_MSG(1098, ERRDuplicateExport, "Duplicate export of name '%s'") +LSC_ERROR_MSG(1099, ERRStmtOfWithIsLabelledFunc, "The statement of a 'with' statement cannot be a labelled function.") +LSC_ERROR_MSG(1100, ERRUndeclaredExportName, "Export of name '%s' which has no local definition.") +LSC_ERROR_MSG(1101, ERRModuleImportOrExportInScript, "'import' or 'export' can only be used in module code.") +LSC_ERROR_MSG(1102, ERRInvalidAsgTarget, "Invalid left-hand side in assignment.") +LSC_ERROR_MSG(1103, ERRMissingFrom, "Expected 'from' after import or export clause.") + +// 1104 ERRsyntaxEOF +// 1105-1199 available for future use + +// Generic errors intended to be re-usable +LSC_ERROR_MSG(1200, ERRKeywordAfter, "Unexpected keyword '%s' after '%s'") +LSC_ERROR_MSG(1201, ERRTokenAfter, "Unexpected token '%s' after '%s'") +LSC_ERROR_MSG(1202, ERRIdentifierAfter, "Unexpected identifier '%s' after '%s'") +LSC_ERROR_MSG(1203, ERRInvalidIdentifier, "Unexpected invalid identifier '%s' after '%s'") +LSC_ERROR_MSG(1205, ERRValidIfFollowedBy, "%s is only valid if followed by %s") diff --git a/lib/Parser/pnodewalk.h b/lib/Parser/pnodewalk.h index fab3c085f1a..a83b1219624 100644 --- a/lib/Parser/pnodewalk.h +++ b/lib/Parser/pnodewalk.h @@ -1,14 +1,15 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #pragma once -template +template struct WalkerPolicyBase { - typedef ResultType ResultType; - typedef Context Context; + using ResultType = _ResultType ; + using Context = _Context ; inline bool ContinueWalk(ResultType) { return true; } inline ResultType DefaultResult() { return ResultType(); } @@ -21,11 +22,11 @@ struct WalkerPolicyBase inline void WalkReference(ParseNode **ppnode, Context context) { } }; -template -struct WalkerPolicyBase +template +struct WalkerPolicyBase { typedef bool ResultType; - typedef Context Context; + using Context = _Context ; inline bool ContinueWalk(ResultType) { return true; } inline bool DefaultResult() { return true; } @@ -407,9 +408,6 @@ class ParseNodeWalker : public WalkerPolicy if (!ContinueWalk(result)) return result; // Walk all non-static members result = WalkList(pnode, pnode->pnodeMembers, context); - if (!ContinueWalk(result)) return result; - // Walk all static members - result = WalkList(pnode, pnode->pnodeStaticMembers, context); return result; } @@ -483,6 +481,9 @@ class ParseNodeWalker : public WalkerPolicy case knopForOf: return WalkForInOrForOf(pnode->AsParseNodeForInOrForOf(), context); + case knopForAwaitOf: + return WalkForInOrForOf(pnode->AsParseNodeForInOrForOf(), context); + //PTNODE(knopReturn , "return" ,None ,Uni ,fnopNone) case knopReturn: return WalkReturn(pnode->AsParseNodeReturn(), context); diff --git a/lib/Parser/ptlist.h b/lib/Parser/ptlist.h index 1eac34291d4..a340d73f5bd 100644 --- a/lib/Parser/ptlist.h +++ b/lib/Parser/ptlist.h @@ -23,6 +23,7 @@ PTNODE(knopNone , "" , Nop , None , fnopNone ***************************************************************************/ PTNODE(knopName , "name" , Nop , Name , fnopLeaf|fnopAllowDefer, "NameExpr" ) PTNODE(knopInt , "int const" , Nop , Int , fnopLeaf|fnopConst , "NumberLit" ) +PTNODE(knopBigInt , "bigint const" , Nop , BigInt , fnopLeaf|fnopConst , "BigIntLit" ) PTNODE(knopImport , "import" , Nop , None , fnopLeaf , "ImportExpr" ) PTNODE(knopFlt , "flt const" , Nop , Float , fnopLeaf|fnopConst , "NumberLit" ) PTNODE(knopStr , "str const" , Nop , Str , fnopLeaf|fnopConst , "StringLit" ) @@ -87,6 +88,7 @@ PTNODE(knopNEqv , "!==" , OP(SrNeq), Bin , fnopBin|fn PTNODE(knopComma , "," , Nop , Bin , fnopBin , "CommaOper" ) PTNODE(knopLogOr , "||" , Nop , Bin , fnopBin , "LogOrOper" ) PTNODE(knopLogAnd , "&&" , Nop , Bin , fnopBin , "LogAndOper" ) +PTNODE(knopCoalesce , "??" , Nop , Bin , fnopBin , "NullishCoalescingOper" ) PTNODE(knopLsh , "<<" , Shl_A , Bin , fnopBin , "LeftShiftOper" ) PTNODE(knopRsh , ">>" , Shr_A , Bin , fnopBin , "RightShiftOper" ) PTNODE(knopRs2 , ">>>" , ShrU_A , Bin , fnopBin , "UnsignedRightShiftOper" ) @@ -134,6 +136,7 @@ PTNODE(knopWhile , "while" , Nop , While , fnopNotExp PTNODE(knopDoWhile , "do-while" , Nop , While , fnopNotExprStmt|fnopCleanup|fnopBreak|fnopContinue , "DoWhileStmt" ) PTNODE(knopForIn , "for in" , Nop , ForInOrForOf, fnopNotExprStmt|fnopCleanup|fnopBreak|fnopContinue , "ForInStmt" ) PTNODE(knopForOf , "for of" , Nop , ForInOrForOf, fnopNotExprStmt|fnopCleanup|fnopBreak|fnopContinue , "ForOfStmt" ) +PTNODE(knopForAwaitOf , "for await of" , Nop , ForInOrForOf, fnopNotExprStmt|fnopCleanup|fnopBreak|fnopContinue , "ForAwaitOfStmt" ) PTNODE(knopBlock , "{}" , Nop , Block , fnopNotExprStmt|fnopAllowDefer, "Block" ) PTNODE(knopStrTemplate, "``" , Nop , StrTemplate , fnopNone , "StringTemplateDecl" ) PTNODE(knopWith , "with" , Nop , With , fnopNotExprStmt , "WithStmt" ) @@ -148,7 +151,7 @@ PTNODE(knopTry , "try" , Nop , Try , fnopNotExp PTNODE(knopThrow , "throw" , Nop , Uni , fnopNotExprStmt , "ThrowStmt" ) PTNODE(knopFinally , "finally" , Nop , Finally , fnopNotExprStmt|fnopCleanup, "FinallyStmt" ) PTNODE(knopTryFinally , "try-finally" , Nop , TryFinally , fnopNotExprStmt , "TryFinallyStmt" ) -PTNODE(knopObjectPattern, "{} = " , Nop , Uni , fnopUni , "ObjectAssignmentPattern" ) +PTNODE(knopObjectPattern, "{} = " , Nop , ObjLit , fnopUni , "ObjectAssignmentPattern" ) PTNODE(knopObjectPatternMember, "{:} = " , Nop , Bin , fnopBin , "ObjectAssignmentPatternMember" ) PTNODE(knopArrayPattern, "[] = " , Nop , ArrLit , fnopUni , "ArrayAssignmentPattern" ) PTNODE(knopParamPattern, "({[]})" , Nop , ParamPattern, fnopUni , "DestructurePattern" ) diff --git a/lib/Parser/ptree.cpp b/lib/Parser/ptree.cpp index b23e052d2d5..faa254f6564 100644 --- a/lib/Parser/ptree.cpp +++ b/lib/Parser/ptree.cpp @@ -42,6 +42,12 @@ ParseNodeInt * ParseNode::AsParseNodeInt() return reinterpret_cast(this); } +ParseNodeBigInt * ParseNode::AsParseNodeBigInt() +{ + Assert(this->nop == knopBigInt); + return reinterpret_cast(this); +} + ParseNodeFloat * ParseNode::AsParseNodeFloat() { Assert(this->nop == knopFlt); @@ -103,6 +109,13 @@ ParseNodeArrLit * ParseNode::AsParseNodeArrLit() return reinterpret_cast(this); } +ParseNodeObjLit * ParseNode::AsParseNodeObjLit() +{ + // Currently only Object Assignment Pattern needs extra field to count members + Assert(this->nop == knopObjectPattern); + return reinterpret_cast(this); +} + ParseNodeCall * ParseNode::AsParseNodeCall() { Assert(this->nop == knopCall || this->nop == knopNew); @@ -131,7 +144,7 @@ ParseNodeStmt * ParseNode::AsParseNodeStmt() { Assert(this->nop == knopBlock || this->nop == knopBreak || this->nop == knopContinue || this->nop == knopWith || this->nop == knopIf || this->nop == knopSwitch || this->nop == knopCase || this->nop == knopReturn || this->nop == knopTryFinally || this->nop == knopTryCatch || this->nop == knopTry || this->nop == knopCatch || this->nop == knopFinally - || this->nop == knopWhile || this->nop == knopDoWhile || this->nop == knopFor || this->nop == knopForIn || this->nop == knopForOf); + || this->nop == knopWhile || this->nop == knopDoWhile || this->nop == knopFor || this->nop == knopForIn || this->nop == knopForOf || this->nop == knopForAwaitOf); return reinterpret_cast(this); } @@ -207,12 +220,6 @@ ParseNodeFinally * ParseNode::AsParseNodeFinally() return reinterpret_cast(this); } -ParseNodeLoop * ParseNode::AsParseNodeLoop() -{ - Assert(this->nop == knopWhile || this->nop == knopDoWhile || this->nop == knopFor || this->nop == knopForIn || this->nop == knopForOf); - return reinterpret_cast(this); -} - ParseNodeWhile * ParseNode::AsParseNodeWhile() { Assert(this->nop == knopWhile || this->nop == knopDoWhile); @@ -227,7 +234,7 @@ ParseNodeFor * ParseNode::AsParseNodeFor() ParseNodeForInOrForOf * ParseNode::AsParseNodeForInOrForOf() { - Assert(this->nop == knopForIn || this->nop == knopForOf); + Assert(this->nop == knopForIn || this->nop == knopForOf || this->nop == knopForAwaitOf); return reinterpret_cast(this); } @@ -349,6 +356,12 @@ ParseNodeStr::ParseNodeStr(charcount_t ichMin, charcount_t ichLim, IdentPtr name { } +ParseNodeBigInt::ParseNodeBigInt(charcount_t ichMin, charcount_t ichLim, IdentPtr name) + : ParseNode(knopBigInt, ichMin, ichLim), pid(name) +{ +} + + ParseNodeName::ParseNodeName(charcount_t ichMin, charcount_t ichLim, IdentPtr name) : ParseNode(knopName, ichMin, ichLim), pid(name) { @@ -396,6 +409,11 @@ ParseNodeArrLit::ParseNodeArrLit(OpCode nop, charcount_t ichMin, charcount_t ich { } +ParseNodeObjLit::ParseNodeObjLit(OpCode nop, charcount_t ichMin, charcount_t ichLim, uint staticCnt, uint computedCnt, bool rest) + : ParseNodeUni(nop, ichMin, ichLim, nullptr), staticCount(staticCnt), computedCount(computedCnt), hasRest(rest) +{ +} + ParseNodeFnc::ParseNodeFnc(OpCode nop, charcount_t ichMin, charcount_t ichLim) : ParseNode(nop, ichMin, ichLim) { @@ -424,6 +442,7 @@ ParseNodeFnc::ParseNodeFnc(OpCode nop, charcount_t ichMin, charcount_t ichLim) this->astSize = 0; this->cbMin = 0; + this->cbStringMin = 0; this->cbLim = 0; this->lineNumber = 0; this->columnNumber = 0; @@ -511,13 +530,8 @@ ParseNodeJump::ParseNodeJump(OpCode nop, charcount_t ichMin, charcount_t ichLim) { } -ParseNodeLoop::ParseNodeLoop(OpCode nop, charcount_t ichMin, charcount_t ichLim) - : ParseNodeStmt(nop, ichMin, ichLim) -{ -} - ParseNodeWhile::ParseNodeWhile(OpCode nop, charcount_t ichMin, charcount_t ichLim) - : ParseNodeLoop(nop, ichMin, ichLim) + : ParseNodeStmt(nop, ichMin, ichLim) { } @@ -537,12 +551,12 @@ ParseNodeIf::ParseNodeIf(OpCode nop, charcount_t ichMin, charcount_t ichLim) } ParseNodeForInOrForOf::ParseNodeForInOrForOf(OpCode nop, charcount_t ichMin, charcount_t ichLim) - : ParseNodeLoop(nop, ichMin, ichLim) + : ParseNodeStmt(nop, ichMin, ichLim) { } ParseNodeFor::ParseNodeFor(OpCode nop, charcount_t ichMin, charcount_t ichLim) - : ParseNodeLoop(nop, ichMin, ichLim) + : ParseNodeStmt(nop, ichMin, ichLim) { } @@ -577,7 +591,7 @@ ParseNodeTry::ParseNodeTry(OpCode nop, charcount_t ichMin, charcount_t ichLim) } ParseNodeCatch::ParseNodeCatch(OpCode nop, charcount_t ichMin, charcount_t ichLim) - : ParseNodeStmt(nop, ichMin, ichLim) + : ParseNodeStmt(nop, ichMin, ichLim), pnodeParam(nullptr) { } diff --git a/lib/Parser/ptree.h b/lib/Parser/ptree.h index 6aaf65eca94..82b56fef30c 100644 --- a/lib/Parser/ptree.h +++ b/lib/Parser/ptree.h @@ -72,6 +72,7 @@ class ParseNodeUni; class ParseNodeBin; class ParseNodeTri; class ParseNodeInt; +class ParseNodeBigInt; class ParseNodeFloat; class ParseNodeRegExp; class ParseNodeStr; @@ -84,6 +85,7 @@ class ParseNodeExportDefault; class ParseNodeStrTemplate; class ParseNodeSuperReference; class ParseNodeArrLit; +class ParseNodeObjLit; class ParseNodeClass; class ParseNodeParamPattern; @@ -100,7 +102,6 @@ class ParseNodeTryCatch; class ParseNodeTry; class ParseNodeCatch; class ParseNodeFinally; -class ParseNodeLoop; class ParseNodeWhile; class ParseNodeFor; class ParseNodeForInOrForOf; @@ -118,6 +119,7 @@ class ParseNode ParseNodeBin * AsParseNodeBin(); ParseNodeTri * AsParseNodeTri(); ParseNodeInt * AsParseNodeInt(); + ParseNodeBigInt * AsParseNodeBigInt(); ParseNodeFloat * AsParseNodeFloat(); ParseNodeRegExp * AsParseNodeRegExp(); ParseNodeVar * AsParseNodeVar(); @@ -129,6 +131,7 @@ class ParseNode ParseNodeStrTemplate * AsParseNodeStrTemplate(); ParseNodeSuperReference * AsParseNodeSuperReference(); ParseNodeArrLit * AsParseNodeArrLit(); + ParseNodeObjLit * AsParseNodeObjLit(); ParseNodeCall * AsParseNodeCall(); ParseNodeSuperCall * AsParseNodeSuperCall(); @@ -150,7 +153,6 @@ class ParseNode ParseNodeCatch * AsParseNodeCatch(); ParseNodeFinally * AsParseNodeFinally(); - ParseNodeLoop * AsParseNodeLoop(); ParseNodeWhile * AsParseNodeWhile(); ParseNodeFor * AsParseNodeFor(); ParseNodeForInOrForOf * AsParseNodeForInOrForOf(); @@ -307,6 +309,19 @@ class ParseNodeInt : public ParseNode DISABLE_SELF_CAST(ParseNodeInt); }; +// bigint constant +class ParseNodeBigInt : public ParseNode +{ +public: + ParseNodeBigInt(charcount_t ichMin, charcount_t ichLim, IdentPtr pid); + + IdentPtr const pid; + bool isNegative : 1; + + DISABLE_SELF_CAST(ParseNodeBigInt); + +}; + // double constant class ParseNodeFloat : public ParseNode { @@ -405,6 +420,18 @@ class ParseNodeArrLit : public ParseNodeUni DISABLE_SELF_CAST(ParseNodeArrLit); }; +class ParseNodeObjLit : public ParseNodeUni +{ +public: + ParseNodeObjLit(OpCode nop, charcount_t ichMin, charcount_t ichLim, uint staticCnt=0, uint computedCnt=0, bool rest=false); + + uint staticCount; + uint computedCount; + bool hasRest; + + DISABLE_SELF_CAST(ParseNodeObjLit); +}; + class FuncInfo; enum PnodeBlockType : unsigned @@ -475,14 +502,12 @@ class ParseNodeFnc : public ParseNode LPCOLESTR hint; uint32 hintLength; uint32 hintOffset; - bool isNameIdentifierRef; - bool nestedFuncEscapes; ParseNodeBlock * pnodeScopes; ParseNodeBlock * pnodeBodyScope; ParseNodePtr pnodeParams; ParseNodePtr pnodeVars; ParseNodePtr pnodeBody; - ParseNodeVar * pnodeRest; + ParseNodePtr pnodeRest; FuncInfo *funcInfo; // function information gathered during byte code generation Scope *scope; @@ -490,11 +515,11 @@ class ParseNodeFnc : public ParseNode uint nestedCount; // Nested function count (valid until children have been processed) uint nestedIndex; // Index within the parent function (Used by ByteCodeGenerator) - uint16 firstDefaultArg; // Position of the first default argument, if any - FncFlags fncFlags; int32 astSize; size_t cbMin; // Min an Lim UTF8 offsets. + size_t cbStringMin; + size_t cbStringLim; size_t cbLim; ULONG lineNumber; // Line number relative to the current source buffer of the function declaration. ULONG columnNumber; // Column number of the declaration. @@ -505,6 +530,9 @@ class ParseNodeFnc : public ParseNode RestorePoint *pRestorePoint; DeferredFunctionStub *deferredStub; IdentPtrSet *capturedNames; + uint16 firstDefaultArg; // Position of the first default argument, if any + bool isNameIdentifierRef; + bool nestedFuncEscapes; bool canBeDeferred; bool isBodyAndParamScopeMerged; // Indicates whether the param scope and the body scope of the function can be merged together or not. // We cannot merge both scopes together if there is any closure capture or eval is present in the param scope. @@ -685,7 +713,6 @@ class ParseNodeClass : public ParseNode ParseNodeBlock * pnodeBlock; ParseNodeFnc * pnodeConstructor; ParseNodePtr pnodeMembers; - ParseNodePtr pnodeStaticMembers; ParseNodePtr pnodeExtends; bool isDefaultModuleExport; @@ -774,8 +801,6 @@ class ParseNodeStmt : public ParseNode public: ParseNodeStmt(OpCode nop, charcount_t ichMin, charcount_t ichLim); - ParseNodeStmt * pnodeOuter; - // Set by parsing code, used by code gen. uint grfnop; @@ -833,21 +858,8 @@ class ParseNodeJump : public ParseNodeStmt DISABLE_SELF_CAST(ParseNodeJump); }; -// base for loop nodes -class ParseNodeLoop : public ParseNodeStmt -{ -public: - ParseNodeLoop(OpCode nop, charcount_t ichMin, charcount_t ichLim); - - // Needed for byte code gen - uint loopId; - - - DISABLE_SELF_CAST(ParseNodeLoop); -}; - // while and do-while loops -class ParseNodeWhile : public ParseNodeLoop +class ParseNodeWhile : public ParseNodeStmt { public: ParseNodeWhile(OpCode nop, charcount_t ichMin, charcount_t ichLim); @@ -898,7 +910,7 @@ class ParseNodeIf : public ParseNodeStmt }; // for-in loop -class ParseNodeForInOrForOf : public ParseNodeLoop +class ParseNodeForInOrForOf : public ParseNodeStmt { public: ParseNodeForInOrForOf(OpCode nop, charcount_t ichMin, charcount_t ichLim); @@ -908,12 +920,14 @@ class ParseNodeForInOrForOf : public ParseNodeLoop ParseNodePtr pnodeLval; ParseNodeBlock * pnodeBlock; Js::RegSlot itemLocation; + Js::RegSlot shouldCallReturnFunctionLocation; + Js::RegSlot shouldCallReturnFunctionLocationFinally; DISABLE_SELF_CAST(ParseNodeForInOrForOf); }; // for loop -class ParseNodeFor : public ParseNodeLoop +class ParseNodeFor : public ParseNodeStmt { public: ParseNodeFor(OpCode nop, charcount_t ichMin, charcount_t ichLim); @@ -1009,6 +1023,9 @@ class ParseNodeCatch : public ParseNodeStmt public: ParseNodeCatch(OpCode nop, charcount_t ichMin, charcount_t ichLim); + bool HasPatternParam() { return pnodeParam != nullptr && pnodeParam->nop == knopParamPattern; } + bool HasParam() { return pnodeParam != nullptr; } + ParseNodePtr GetParam() { return pnodeParam; } void SetParam(ParseNodeName * pnode) { pnodeParam = pnode; } void SetParam(ParseNodeParamPattern * pnode) { pnodeParam = pnode; } @@ -1081,4 +1098,4 @@ template class OpCodeTrait; typedef ParseNode##nk ParseNodeType; \ static const bool AllowDefer = ((ok) & fnopAllowDefer) != 0; \ }; -#include "ptlist.h" \ No newline at end of file +#include "ptlist.h" diff --git a/lib/Parser/rterrors.h b/lib/Parser/rterrors.h index cdc94f77575..b9fc1c1206c 100755 --- a/lib/Parser/rterrors.h +++ b/lib/Parser/rterrors.h @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- -// Copyright (C) Microsoft. All rights reserved. +// Copyright (C) Microsoft Corporation and contributors. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #define IDS_COMPILATION_ERROR_SOURCE 4096 @@ -161,7 +162,7 @@ RT_ERROR_MSG(JSERR_NonExtensibleObject, 5046, "", "Cannot create property for a RT_ERROR_MSG(JSERR_Property_CannotSet_NullOrUndefined, 5047, "Unable to set property '%s' of undefined or null reference", "Object expected", kjstTypeError, JSERR_NeedObject) RT_ERROR_MSG(JSERR_Property_CannotGet_NullOrUndefined, 5048, "Unable to get property '%s' of undefined or null reference", "Object expected", kjstTypeError, JSERR_NeedObject) RT_ERROR_MSG(JSERR_Property_CannotDelete_NullOrUndefined, 5049, "Unable to delete property '%s' of undefined or null reference", "Object expected", kjstTypeError, JSERR_NeedObject) -RT_ERROR_MSG(JSERR_Property_VarDate, 5050, "Unable to access property '%s': type 'VarDate' does not support user-defined properties", "Object expected", kjstTypeError, JSERR_NeedObject) +// 5050 - Removed RT_ERROR_MSG(JSERR_Property_NeedFunction, 5051, "The value of the property '%s' is not a Function object", "Function expected", kjstTypeError, JSERR_NeedFunction) RT_ERROR_MSG(JSERR_Property_NeedFunction_NullOrUndefined, 5052, "The value of the property '%s' is null or undefined, not a Function object", "Function expected", kjstTypeError, JSERR_NeedObject) RT_ERROR_MSG(JSERR_Property_CannotHaveAccessorsAndValue, 5053, "", "Invalid property descriptor: cannot both specify accessors and a 'value' attribute", kjstTypeError, VBSERR_ActionNotSupported) @@ -205,7 +206,7 @@ RT_ERROR_MSG(JSERR_InvalidTypedArraySubarrayLength, 5085, "", "Invalid begin/end RT_ERROR_MSG(JSERR_TypedArray_NeedSource, 5086, "", "Invalid source in typed array set", kjstTypeError, 0) RT_ERROR_MSG(JSERR_This_NeedDataView, 5087, "", "'this' is not a DataView object", kjstTypeError, 0) RT_ERROR_MSG(JSERR_DataView_NeedArgument, 5088, "Required argument %s in DataView method is not specified", "Invalid arguments in DataView", kjstTypeError, 0) -RT_ERROR_MSG(JSERR_DataView_InvalidOffset, 5089, "", "DataView operation access beyond specified buffer length", kjstTypeError, 0) +RT_ERROR_MSG(JSERR_DataView_InvalidOffset, 5089, "", "DataView operation access beyond specified buffer length", kjstTypeError, 0) RT_ERROR_MSG(JSERR_DataView_InvalidArgument, 5090, "DataView constructor argument %s is invalid", "Invalid arguments in DataView", kjstRangeError, 0) RT_ERROR_MSG(JSERR_InvalidFunctionSignature, 5091, "The function '%s' has an invalid signature and cannot be called", "invalid function signature", kjstTypeError, 0) @@ -302,7 +303,12 @@ RT_ERROR_MSG(JSERROR_SetPrototypeOf, 5616, "Failed to set prototype", "Failed to RT_ERROR_MSG(JSERR_ObjectIsNotInitialized, 5617, "%s: Object internal state is not initialized", "Object internal state is not initialized", kjstTypeError, 0) RT_ERROR_MSG(JSERR_GeneratorAlreadyExecuting, 5618, "%s: Cannot execute generator function because it is currently executing", "", kjstTypeError, 0) -// 5619-5626 Unused +RT_ERROR_MSG(JSERR_LengthIsTooBig, 5619, "Length property would exceed maximum value in output from '%s'", "", kjstTypeError, 0) +RT_ERROR_MSG(JSERR_NonObjectFromIterable, 5620, "Iterable provided to %s must not return non-object or null value.", "", kjstTypeError, 0) +RT_ERROR_MSG(JSERR_EmptyArrayAndInitValueNotPresent, 5621, "%s: Array contains no elements and initialValue is not provided", "", kjstTypeError, 0) +RT_ERROR_MSG(JSERR_PromiseAllRejected, 5622, "", "Promise.any all promises rejected.", kjstAggregateError, 0) + +// 5623-5626 Unused RT_ERROR_MSG(JSERR_NeedConstructor, 5627, "'%s' is not a constructor", "Constructor expected", kjstTypeError, 0) RT_ERROR_MSG(VBSERR_CantDisplayDate, 32812, "", "The specified date is not available in the current locale's calendar", kjstRangeError, 0) @@ -365,8 +371,11 @@ RT_ERROR_MSG(JSERR_InvalidIteratorObject, 5672, "%s : Invalid iterator object", RT_ERROR_MSG(JSERR_NoAccessors, 5673, "Invalid property descriptor: accessors not supported on this object", "", kjstTypeError, 0) RT_ERROR_MSG(JSERR_RegExpInvalidEscape, 5674, "", "Invalid regular expression: invalid escape in unicode pattern", kjstSyntaxError, 0) RT_ERROR_MSG(JSERR_RegExpTooManyCapturingGroups, 5675, "", "Regular expression cannot have more than 32,767 capturing groups", kjstRangeError, 0) -RT_ERROR_MSG(JSERR_ProxyHandlerReturnedFalse, 5676, "Proxy %s handler returned false", "Proxy handler returned false", kjstTypeError, 0) +RT_ERROR_MSG(JSERR_ProxyHandlerReturnedFalse, 5676, "Proxy '%s' handler returned falsish for property '%s'", "Proxy handler returned false", kjstTypeError, 0) RT_ERROR_MSG(JSERR_UnicodeRegExpRangeContainsCharClass, 5677, "%s", "Character classes not allowed in a RegExp class range.", kjstSyntaxError, 0) +RT_ERROR_MSG(JSERR_DuplicateKeysFromOwnPropertyKeys, 5678, "%s", "Proxy's ownKeys trap returned duplicate keys", kjstTypeError, 0) +RT_ERROR_MSG(JSERR_InvalidGloFuncDecl, 5679, "The global property %s is not configurable, writable, nor enumerable, therefore cannot be declared as a function", "", kjstTypeError, 0) +RT_ERROR_MSG(JSERR_YieldStarThrowMissing, 5680, "", "Yielded iterator does not have a 'throw' method", kjstTypeError, 0) //Host errors RT_ERROR_MSG(JSERR_HostMaybeMissingPromiseContinuationCallback, 5700, "", "Host may not have set any promise continuation callback. Promises may not be executed.", kjstTypeError, 0) diff --git a/lib/Parser/screrror.cpp b/lib/Parser/screrror.cpp index ecfdf318469..56e6b3826f1 100644 --- a/lib/Parser/screrror.cpp +++ b/lib/Parser/screrror.cpp @@ -251,7 +251,7 @@ void CompileScriptException::CopyInto(CompileScriptException* pse) } } -HRESULT CompileScriptException::ProcessError(IScanner * pScan, HRESULT hr, ParseNode * pnodeBase) +HRESULT CompileScriptException::ProcessError(IScanner * pScan, HRESULT hr, ParseNode * pnodeBase, LPCWSTR stringOne, LPCWSTR stringTwo) { // fill in the ScriptException structure Free(); @@ -267,6 +267,13 @@ HRESULT CompileScriptException::ProcessError(IScanner * pScan, HRESULT hr, Pars if (nullptr == (ei.bstrDescription = SysAllocString(szT))) ei.scode = E_OUTOFMEMORY; } + else if (wcslen(stringOne) > 0) + { + OLECHAR szT[128]; + _snwprintf_s(szT, ARRAYSIZE(szT), ARRAYSIZE(szT)-1, ei.bstrDescription, stringOne, stringTwo); + SysFreeString(ei.bstrDescription); + ei.bstrDescription = SysAllocString(szT); + } ei.bstrSource = BstrGetResourceString(IDS_COMPILATION_ERROR_SOURCE); if (nullptr == pnodeBase && nullptr != pScan) diff --git a/lib/Parser/screrror.h b/lib/Parser/screrror.h index c799e5b7b45..18e29270ed3 100644 --- a/lib/Parser/screrror.h +++ b/lib/Parser/screrror.h @@ -72,7 +72,7 @@ class CompileScriptException : public ScriptException void CopyInto(CompileScriptException* cse); - HRESULT ProcessError(IScanner * pScan, HRESULT hr, ParseNode * pnodeBase); + HRESULT ProcessError(IScanner * pScan, HRESULT hr, ParseNode * pnodeBase, LPCWSTR stringOne = _u(""), LPCWSTR stringTwo = _u("")); friend class ActiveScriptError; }; diff --git a/lib/Parser/tokens.h b/lib/Parser/tokens.h index b8ccbcf632a..ced44efbdb0 100644 --- a/lib/Parser/tokens.h +++ b/lib/Parser/tokens.h @@ -26,6 +26,7 @@ enum tokens tkFltCon, // floating literal tkStrCon, // string literal tkRegExp, // regular expression literal + tkBigIntCon, // bigint literal tkLim }; diff --git a/lib/Runtime/Base/CharStringCache.cpp b/lib/Runtime/Base/CharStringCache.cpp index adcce7745db..f41cb54c646 100644 --- a/lib/Runtime/Base/CharStringCache.cpp +++ b/lib/Runtime/Base/CharStringCache.cpp @@ -78,10 +78,19 @@ using namespace Js; { Assert(c >= 0x10000); CompileAssert(sizeof(char16) * 2 == sizeof(codepoint_t)); + + ScriptContext* scriptContext = JavascriptLibrary::FromCharStringCache(this)->GetScriptContext(); + + // #sec - string.fromcodepoint: "If nextCP < 0 or nextCP > 0x10FFFF, throw a RangeError exception" + if (c > 0x10FFFF) + { + JavascriptError::ThrowRangeError(scriptContext, JSERR_InvalidCodePoint, scriptContext->GetIntegerString(c)); + } + char16 buffer[2]; Js::NumberUtilities::CodePointAsSurrogatePair(c, buffer, buffer + 1); - JavascriptString* str = JavascriptString::NewCopyBuffer(buffer, 2, JavascriptLibrary::FromCharStringCache(this)->GetScriptContext()); + JavascriptString* str = JavascriptString::NewCopyBuffer(buffer, 2, scriptContext); // TODO: perhaps do some sort of cache for supplementary characters return str; } diff --git a/lib/Runtime/Base/Constants.cpp b/lib/Runtime/Base/Constants.cpp index 6726f48f1b2..0396b697d71 100644 --- a/lib/Runtime/Base/Constants.cpp +++ b/lib/Runtime/Base/Constants.cpp @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #include "RuntimeBasePch.h" @@ -19,6 +20,7 @@ const char16 Constants::Anonymous[] = _u("anonymous"); const char16 Constants::Empty[] = _u(""); const char16 Constants::FunctionCode[] = _u("Function code"); const char16 Constants::GlobalCode[] = _u("Global code"); +const char16 Constants::ModuleCode[] = _u("Module code"); const char16 Constants::EvalCode[] = _u("eval code"); const char16 Constants::GlobalFunction[] = _u("glo"); const char16 Constants::UnknownScriptCode[] = _u("Unknown script code"); @@ -28,7 +30,7 @@ const char16 Constants::StringMatch[] = _u("String.prototype.match"); const uint64 Constants::ExponentMask = 0x3FF0000000000000; const uint64 Constants::MantissaMask = 0x000FFFFFFFFFFFFF; -#ifdef _M_AMD64 +#ifdef TARGET_64 const size_t Constants::StackLimitForScriptInterrupt = 0x7fffffffffffffff; #else const size_t Constants::StackLimitForScriptInterrupt = 0x7fffffff; diff --git a/lib/Runtime/Base/Constants.h b/lib/Runtime/Base/Constants.h index 017bdc2640c..d6d40c38bc0 100644 --- a/lib/Runtime/Base/Constants.h +++ b/lib/Runtime/Base/Constants.h @@ -27,6 +27,7 @@ namespace Js static const uint NoByteCodeOffset = (uint)-1; static const PropertyId NoProperty = -1; static const RegSlot NoRegister = (RegSlot)-1; + static const ByteCodeLabel NoByteCodeLabel = (ByteCodeLabel)-1; static const RegSlot OneByteRegister = (RegSlot_OneByte)-1; static const int32 InvalidOffset = -1; static const unsigned int PropertyGroupSize = 512; @@ -153,6 +154,7 @@ namespace Js static const char16 Empty[]; static const char16 FunctionCode[]; static const char16 GlobalCode[]; + static const char16 ModuleCode[]; static const char16 EvalCode[]; static const char16 GlobalFunction[]; static const char16 UnknownScriptCode[]; @@ -165,11 +167,12 @@ namespace Js static const charcount_t FunctionCodeLength = _countof(_u("Function code")) - 1; static const charcount_t GlobalFunctionLength = _countof(_u("glo")) - 1; static const charcount_t GlobalCodeLength = _countof(_u("Global code")) - 1; + static const charcount_t ModuleCodeLength = _countof(_u("Module code")) - 1; static const charcount_t EvalCodeLength = _countof(_u("eval code")) - 1; static const charcount_t UnknownScriptCodeLength = _countof(_u("Unknown script code")) - 1; - static const charcount_t NullStringLength = _countof(_u("Null")) - 1; - static const charcount_t TrueStringLength = _countof(_u("True")) - 1; - static const charcount_t FalseStringLength = _countof(_u("False")) - 1; + static const charcount_t NullStringLength = _countof(_u("Null")) - 1; + static const charcount_t TrueStringLength = _countof(_u("True")) - 1; + static const charcount_t FalseStringLength = _countof(_u("False")) - 1; }; extern const FrameDisplay NullFrameDisplay; diff --git a/lib/Runtime/Base/CrossSite.cpp b/lib/Runtime/Base/CrossSite.cpp index f1a837e801c..b6ecf1d9395 100644 --- a/lib/Runtime/Base/CrossSite.cpp +++ b/lib/Runtime/Base/CrossSite.cpp @@ -28,7 +28,7 @@ namespace Js { return FALSE; } - RecyclableObject * object = RecyclableObject::UnsafeFromVar(instance); + RecyclableObject * object = UnsafeVarTo(instance); if (object->GetScriptContext() == requestContext) { return FALSE; @@ -39,7 +39,7 @@ namespace Js } if (DynamicType::Is(object->GetTypeId())) { - return !DynamicObject::UnsafeFromVar(object)->IsCrossSiteObject() && !object->IsExternal(); + return !UnsafeVarTo(object)->IsCrossSiteObject() && !object->IsExternal(); } return TRUE; } @@ -54,7 +54,7 @@ namespace Js if (object->GetTypeId() == TypeIds_Function) { AssertMsg(object != object->GetScriptContext()->GetLibrary()->GetDefaultAccessorFunction(), "default accessor marshalled"); - JavascriptFunction * function = JavascriptFunction::FromVar(object); + JavascriptFunction * function = VarTo(object); //TODO: this may be too aggressive and create x-site thunks that are't technically needed -- see uglify-2js test. @@ -78,7 +78,7 @@ namespace Js } else if (object->GetTypeId() == TypeIds_Proxy) { - RecyclableObject * target = JavascriptProxy::FromVar(object)->GetTarget(); + RecyclableObject * target = VarTo(object)->GetTarget(); if (JavascriptConversion::IsCallable(target)) { Assert(JavascriptProxy::FunctionCallTrap == object->GetEntryPoint()); @@ -94,7 +94,7 @@ namespace Js while (prototype->GetTypeId() != TypeIds_Null && prototype->GetTypeId() != TypeIds_HostDispatch) { // We should not see any static type or host dispatch here - DynamicObject * prototypeObject = DynamicObject::FromVar(prototype); + DynamicObject * prototypeObject = VarTo(prototype); if (prototypeObject->IsCrossSiteObject()) { break; @@ -103,7 +103,7 @@ namespace Js { MarshalDynamicObject(scriptContext, prototypeObject); } - if (JavascriptProxy::Is(prototypeObject)) + if (VarIs(prototypeObject)) { // Fetching prototype of proxy can invoke trap - which we don't want during the marshalling time. break; @@ -128,10 +128,10 @@ namespace Js for (uint16 i = 0; i < length; i++) { Var value = display->GetItem(i); - if (UnscopablesWrapperObject::Is(value)) + if (Js::VarIs(value)) { // Here we are marshalling the wrappedObject and then ReWrapping th object in the new context. - RecyclableObject* wrappedObject = UnscopablesWrapperObject::FromVar(value)->GetWrappedObject(); + RecyclableObject* wrappedObject = Js::VarTo(value)->GetWrappedObject(); ScriptContext* wrappedObjectScriptContext = wrappedObject->GetScriptContext(); value = JavascriptOperators::ToUnscopablesWrapperObject(CrossSite::MarshalVar(scriptContext, wrappedObject, wrappedObjectScriptContext), scriptContext); @@ -155,7 +155,7 @@ namespace Js { return value; } - return MarshalVarInner(scriptContext, RecyclableObject::FromVar(value), false); + return MarshalVarInner(scriptContext, VarTo(value), false); } return value; } @@ -168,7 +168,7 @@ namespace Js { return value; } - Js::RecyclableObject* object = RecyclableObject::UnsafeFromVar(value); + Js::RecyclableObject* object = UnsafeVarTo(value); if (fRequestWrapper || scriptContext != object->GetScriptContext()) { @@ -194,7 +194,7 @@ namespace Js bool CrossSite::DoRequestWrapper(Js::RecyclableObject* object, bool fRequestWrapper) { - return fRequestWrapper && JavascriptFunction::Is(object) && JavascriptFunction::FromVar(object)->IsExternalFunction(); + return fRequestWrapper && VarIs(object) && VarTo(object)->IsExternalFunction(); } #if ENABLE_TTD @@ -205,7 +205,7 @@ namespace Js if(obj->GetTypeId() == TypeIds_Function) { AssertMsg(obj != obj->GetScriptContext()->GetLibrary()->GetDefaultAccessorFunction(), "default accessor marshalled -- I don't think this should ever happen as it is marshalled in a special case?"); - JavascriptFunction * function = JavascriptFunction::FromVar(obj); + JavascriptFunction * function = VarTo(obj); // //TODO: what happens if the gaurd in marshal (MarshalDynamicObject) isn't true? @@ -320,12 +320,12 @@ namespace Js // so optimization overrides can be updated as a group scriptContext->optimizationOverrides.Merge(&object->GetScriptContext()->optimizationOverrides); - DynamicObject * dynamicObject = DynamicObject::FromVar(object); + DynamicObject * dynamicObject = VarTo(object); if (!dynamicObject->IsExternal()) { if (!dynamicObject->IsCrossSiteObject()) { - if (JavascriptProxy::Is(dynamicObject)) + if (VarIs(dynamicObject)) { // We don't need to marshal the prototype chain in the case of Proxy. Otherwise we will go to the user code. TTD_XSITE_LOG(object->GetScriptContext(), "MarshalDynamicObject", object); @@ -365,7 +365,7 @@ namespace Js #if defined(ENABLE_SCRIPT_PROFILING) || defined(ENABLE_SCRIPT_DEBUGGING) Var CrossSite::ProfileThunk(RecyclableObject* callable, CallInfo callInfo, ...) { - JavascriptFunction* function = JavascriptFunction::FromVar(callable); + JavascriptFunction* function = VarTo(callable); Assert(function->GetTypeId() == TypeIds_Function); Assert(function->GetEntryPoint() == CrossSite::ProfileThunk); RUNTIME_ARGUMENTS(args, callInfo); @@ -380,7 +380,7 @@ namespace Js TTD_XSITE_LOG(callable->GetScriptContext(), "DefaultOrProfileThunk", callable); #ifdef ENABLE_WASM - if (WasmScriptFunction::Is(function)) + if (VarIs(function)) { entryPoint = Js::AsmJsExternalEntryPoint; } else @@ -390,7 +390,7 @@ namespace Js #if ENABLE_DEBUG_CONFIG_OPTIONS char16 debugStringBuffer[MAX_FUNCTION_BODY_DEBUG_STRING_SIZE]; #endif - entryPoint = ScriptFunction::FromVar(function)->GetEntryPointInfo()->jsMethod; + entryPoint = VarTo(function)->GetEntryPointInfo()->jsMethod; if (funcInfo->IsDeferred() && scriptContext->IsProfiling()) { // if the current entrypoint is deferred parse we need to update it appropriately for the profiler mode. @@ -410,7 +410,7 @@ namespace Js Var CrossSite::DefaultThunk(RecyclableObject* callable, CallInfo callInfo, ...) { - JavascriptFunction* function = JavascriptFunction::FromVar(callable); + JavascriptFunction* function = VarTo(callable); Assert(function->GetTypeId() == TypeIds_Function); Assert(function->GetEntryPoint() == CrossSite::DefaultThunk); RUNTIME_ARGUMENTS(args, callInfo); @@ -435,7 +435,7 @@ namespace Js else #endif { - entryPoint = ScriptFunction::FromVar(function)->GetEntryPointInfo()->jsMethod; + entryPoint = VarTo(function)->GetEntryPointInfo()->jsMethod; } } else @@ -448,16 +448,16 @@ namespace Js Var CrossSite::CrossSiteProxyCallTrap(RecyclableObject* function, CallInfo callInfo, ...) { RUNTIME_ARGUMENTS(args, callInfo); - Assert(JavascriptProxy::Is(function)); + Assert(VarIs(function)); return CrossSite::CommonThunk(function, JavascriptProxy::FunctionCallTrap, args); } Var CrossSite::CommonThunk(RecyclableObject* recyclableObject, JavascriptMethod entryPoint, Arguments args) { - DynamicObject* function = DynamicObject::FromVar(recyclableObject); + DynamicObject* function = VarTo(recyclableObject); - FunctionInfo * functionInfo = (JavascriptFunction::Is(function) ? JavascriptFunction::FromVar(function)->GetFunctionInfo() : nullptr); + FunctionInfo * functionInfo = (VarIs(function) ? VarTo(function)->GetFunctionInfo() : nullptr); AutoDisableRedeferral autoDisableRedeferral(functionInfo); ScriptContext* targetScriptContext = function->GetScriptContext(); @@ -488,7 +488,7 @@ namespace Js { i = 1; Assert(args.IsNewCall()); - Assert(JavascriptProxy::Is(function) || (JavascriptFunction::Is(function) && JavascriptFunction::FromVar(function)->GetFunctionInfo()->GetAttributes() & FunctionInfo::SkipDefaultNewObject)); + Assert(VarIs(function) || (VarIs(function) && VarTo(function)->GetFunctionInfo()->GetAttributes() & FunctionInfo::SkipDefaultNewObject)); } uint count = args.Info.Count; for (; i < count; i++) @@ -511,7 +511,7 @@ namespace Js CheckCodeGenFunction checkCodeGenFunction = GetCheckCodeGenFunction(entryPoint); if (checkCodeGenFunction != nullptr) { - ScriptFunction* callFunc = ScriptFunction::FromVar(function); + ScriptFunction* callFunc = VarTo(function); entryPoint = checkCodeGenFunction(callFunc); Assert(CrossSite::IsThunk(function->GetEntryPoint())); } @@ -599,9 +599,9 @@ namespace Js { return; } - while (DynamicType::Is(object->GetTypeId()) && !JavascriptProxy::Is(object)) + while (DynamicType::Is(object->GetTypeId()) && !VarIs(object)) { - DynamicObject* dynamicObject = DynamicObject::UnsafeFromVar(object); + DynamicObject* dynamicObject = UnsafeVarTo(object); if (!dynamicObject->IsCrossSiteObject() && !dynamicObject->IsExternal()) { // force to install cross-site thunk on prototype objects. diff --git a/lib/Runtime/Base/CrossSite.h b/lib/Runtime/Base/CrossSite.h index f502443189c..15ab48628b0 100644 --- a/lib/Runtime/Base/CrossSite.h +++ b/lib/Runtime/Base/CrossSite.h @@ -4,13 +4,11 @@ //------------------------------------------------------------------------------------------------------- #pragma once -class DOMFastPathInfo; namespace Js { class CrossSite { friend class ExternalType; - friend class DOMFastPathInfo; public: static bool IsThunk(JavascriptMethod thunk); static BOOL NeedMarshalVar(Var instance, ScriptContext * requestContext); diff --git a/lib/Runtime/Base/DelayLoadLibrary.cpp b/lib/Runtime/Base/DelayLoadLibrary.cpp index fc4b97b02ea..cd2ae82155d 100644 --- a/lib/Runtime/Base/DelayLoadLibrary.cpp +++ b/lib/Runtime/Base/DelayLoadLibrary.cpp @@ -156,26 +156,6 @@ namespace Js return E_NOTIMPL; } - HRESULT DelayLoadWinRtTypeResolution::RoParseTypeName(__in HSTRING typeName, __out DWORD *partsCount, __RPC__deref_out_ecount_full_opt(*partsCount) HSTRING **typeNameParts) - { - if (m_hModule) - { - if (m_pfnRoParseTypeName == nullptr) - { - m_pfnRoParseTypeName = (PFNCWRoParseTypeName)GetFunction("RoParseTypeName"); - if (m_pfnRoParseTypeName == nullptr) - { - return E_UNEXPECTED; - } - } - - Assert(m_pfnRoParseTypeName != nullptr); - return m_pfnRoParseTypeName(typeName, partsCount, typeNameParts); - } - - return E_NOTIMPL; - } - #ifdef INTL_WINGLOB bool DelayLoadWindowsGlobalization::HasGlobalizationDllLoaded() { @@ -183,7 +163,7 @@ namespace Js } HRESULT DelayLoadWindowsGlobalization::DllGetActivationFactory( - __in HSTRING activatibleClassId, + __in HSTRING activatableClassId, __out IActivationFactory** factory) { if (m_hModule) @@ -198,7 +178,7 @@ namespace Js } Assert(m_pfnFNCWDllGetActivationFactory != nullptr); - return m_pfnFNCWDllGetActivationFactory(activatibleClassId, factory); + return m_pfnFNCWDllGetActivationFactory(activatableClassId, factory); } return E_NOTIMPL; @@ -206,7 +186,7 @@ namespace Js #endif HRESULT DelayLoadWinRtFoundation::RoGetActivationFactory( - __in HSTRING activatibleClassId, + __in HSTRING activatableClassId, __in REFIID iid, __out IActivationFactory** factory) { @@ -222,36 +202,7 @@ namespace Js } Assert(m_pfnFNCWRoGetActivationFactory != nullptr); - return m_pfnFNCWRoGetActivationFactory(activatibleClassId, iid, factory); - } - - return E_NOTIMPL; - } - - HRESULT DelayLoadWinRtTypeResolution::RoResolveNamespace( - __in_opt const HSTRING namespaceName, - __in_opt const HSTRING windowsMetaDataPath, - __in const DWORD packageGraphPathsCount, - __in_opt const HSTRING *packageGraphPaths, - __out DWORD *metaDataFilePathsCount, - HSTRING **metaDataFilePaths, - __out DWORD *subNamespacesCount, - HSTRING **subNamespaces) - { - if (m_hModule) - { - if (m_pfnRoResolveNamespace == nullptr) - { - m_pfnRoResolveNamespace = (PFNCRoResolveNamespace)GetFunction("RoResolveNamespace"); - if (m_pfnRoResolveNamespace == nullptr) - { - return E_UNEXPECTED; - } - } - - Assert(m_pfnRoResolveNamespace != nullptr); - return m_pfnRoResolveNamespace(namespaceName, windowsMetaDataPath, packageGraphPathsCount, packageGraphPaths, - metaDataFilePathsCount, metaDataFilePaths, subNamespacesCount, subNamespaces); + return m_pfnFNCWRoGetActivationFactory(activatableClassId, iid, factory); } return E_NOTIMPL; @@ -349,50 +300,6 @@ namespace Js } #endif -#ifdef ENABLE_PROJECTION - HRESULT DelayLoadWinRtError::RoClearError() - { - if (m_hModule) - { - if (m_pfnRoClearError == nullptr) - { - m_pfnRoClearError = (PFNCRoClearError)GetFunction("RoClearError"); - if (m_pfnRoClearError == nullptr) - { - return E_UNEXPECTED; - } - } - - Assert(m_pfnRoClearError != nullptr); - m_pfnRoClearError(); - - return S_OK; - } - - return E_NOTIMPL; - } - - BOOL DelayLoadWinRtError::RoOriginateLanguageException(__in HRESULT error, __in_opt HSTRING message, __in IUnknown * languageException) - { - if (m_hModule) - { - if (m_pfnRoOriginateLanguageException == nullptr) - { - m_pfnRoOriginateLanguageException = (PFNCRoOriginateLanguageException)GetFunction("RoOriginateLanguageException"); - if (m_pfnRoOriginateLanguageException == nullptr) - { - return FALSE; - } - } - - Assert(m_pfnRoOriginateLanguageException != nullptr); - return m_pfnRoOriginateLanguageException(error, message, languageException); - } - - return FALSE; - } -#endif - BOOL DelayLoadWinCoreProcessThreads::GetProcessInformation( __in HANDLE hProcess, __in PROCESS_INFORMATION_CLASS ProcessInformationClass, diff --git a/lib/Runtime/Base/DelayLoadLibrary.h b/lib/Runtime/Base/DelayLoadLibrary.h index 8a1ea3ac0e7..40eb06a9866 100644 --- a/lib/Runtime/Base/DelayLoadLibrary.h +++ b/lib/Runtime/Base/DelayLoadLibrary.h @@ -8,14 +8,6 @@ #include "activation.h" #include -#ifdef ENABLE_PROJECTION -// cor.h includes corhdr.h which is not clean with warning 4091 -#pragma warning(push) -#pragma warning(disable: 4091) /* warning C4091: 'typedef ': ignored on left of '' when no variable is declared */ -#include -#pragma warning(pop) -#endif - #include "RoParameterizedIID.h" namespace Js @@ -69,67 +61,6 @@ namespace Js virtual HRESULT WindowsDuplicateString(_In_opt_ HSTRING original, _Outptr_result_maybenull_ _Result_nullonfailure_ HSTRING * newString); }; - class DelayLoadWinRtTypeResolution sealed : public DelayLoadLibrary - { - private: - // WinRtTypeResolution specific functions - typedef HRESULT FNCWRoParseTypeName(HSTRING, DWORD *, HSTRING **); - typedef FNCWRoParseTypeName* PFNCWRoParseTypeName; - PFNCWRoParseTypeName m_pfnRoParseTypeName; - - typedef HRESULT FNCRoResolveNamespace(const HSTRING, const HSTRING, const DWORD, const HSTRING*, DWORD*, HSTRING**, DWORD*, HSTRING**); - typedef FNCRoResolveNamespace* PFNCRoResolveNamespace; - PFNCRoResolveNamespace m_pfnRoResolveNamespace; - - public: - DelayLoadWinRtTypeResolution() : DelayLoadLibrary(), - m_pfnRoParseTypeName(nullptr) { } - - virtual ~DelayLoadWinRtTypeResolution() { } - - LPCTSTR GetLibraryName() const { return _u("api-ms-win-ro-typeresolution-l1-1-0.dll"); } - - HRESULT RoParseTypeName(__in HSTRING typeName, __out DWORD *partsCount, __RPC__deref_out_ecount_full_opt(*partsCount) HSTRING **typeNameParts); - - HRESULT RoResolveNamespace( - __in_opt const HSTRING namespaceName, - __in_opt const HSTRING windowsMetaDataPath, - __in const DWORD packageGraphPathsCount, - __in_opt const HSTRING *packageGraphPaths, - __out DWORD *metaDataFilePathsCount, - HSTRING **metaDataFilePaths, - __out DWORD *subNamespacesCount, - HSTRING **subNamespaces); - - }; - -#ifdef ENABLE_PROJECTION - class DelayLoadWinRtRoParameterizedIID sealed : public DelayLoadLibrary - { - private: - // WinRtRoParameterizedIID specific functions - typedef HRESULT FNCWRoGetParameterizedTypeInstanceIID(UINT32, PCWSTR*, const IRoMetaDataLocator&, GUID*, ROPARAMIIDHANDLE*); - - typedef FNCWRoGetParameterizedTypeInstanceIID* PFNCWRoGetParameterizedTypeInstanceIID; - PFNCWRoGetParameterizedTypeInstanceIID m_pfnRoGetParameterizedTypeInstanceIID; - - public: - DelayLoadWinRtRoParameterizedIID() : DelayLoadLibrary(), - m_pfnRoGetParameterizedTypeInstanceIID(nullptr) { } - - virtual ~DelayLoadWinRtRoParameterizedIID() { } - - LPCTSTR GetLibraryName() const { return _u("api-ms-win-core-winrt-roparameterizediid-l1-1-0.dll"); } - - HRESULT RoGetParameterizedTypeInstanceIID( - __in UINT32 nameElementCount, - __in_ecount(nameElementCount) PCWSTR* nameElements, - __in const IRoMetaDataLocator& metaDataLocator, - __out GUID* iid, - __deref_opt_out ROPARAMIIDHANDLE* pExtra = nullptr); - }; -#endif - #ifdef INTL_WINGLOB class DelayLoadWindowsGlobalization sealed : public DelayLoadWinRtString { @@ -198,33 +129,6 @@ namespace Js __out IActivationFactory** factory); }; -#ifdef ENABLE_PROJECTION - class DelayLoadWinRtError sealed : public DelayLoadLibrary - { - private: - // DelayLoadWinRtError specific functions - typedef void FNCRoClearError(); - typedef FNCRoClearError* PFNCRoClearError; - PFNCRoClearError m_pfnRoClearError; - - typedef BOOL FNCRoOriginateLanguageException(HRESULT, HSTRING, IUnknown *); - typedef FNCRoOriginateLanguageException* PFNCRoOriginateLanguageException; - PFNCRoOriginateLanguageException m_pfnRoOriginateLanguageException; - - public: - DelayLoadWinRtError() : DelayLoadLibrary(), - m_pfnRoClearError(nullptr), - m_pfnRoOriginateLanguageException(nullptr) { } - - virtual ~DelayLoadWinRtError() { } - - LPCTSTR GetLibraryName() const { return _u("api-ms-win-core-winrt-error-l1-1-1.dll"); } - - HRESULT RoClearError(); - BOOL RoOriginateLanguageException(__in HRESULT error, __in_opt HSTRING message, __in IUnknown * languageException); - }; -#endif - class DelayLoadWinCoreProcessThreads sealed : public DelayLoadLibrary { private: @@ -250,32 +154,4 @@ namespace Js __in SIZE_T nLength ); }; - -#ifdef ENABLE_PROJECTION - // Implement this function inlined so that WinRT.lib can be used without the runtime. - inline HRESULT DelayLoadWinRtRoParameterizedIID::RoGetParameterizedTypeInstanceIID( - __in UINT32 nameElementCount, - __in_ecount(nameElementCount) PCWSTR* nameElements, - __in const IRoMetaDataLocator& metaDataLocator, - __out GUID* iid, - __deref_opt_out ROPARAMIIDHANDLE* pExtra) - { - if (m_hModule) - { - if (m_pfnRoGetParameterizedTypeInstanceIID == NULL) - { - m_pfnRoGetParameterizedTypeInstanceIID = (PFNCWRoGetParameterizedTypeInstanceIID)GetFunction("RoGetParameterizedTypeInstanceIID"); - if (m_pfnRoGetParameterizedTypeInstanceIID == NULL) - { - return E_UNEXPECTED; - } - } - - Assert(m_pfnRoGetParameterizedTypeInstanceIID != NULL); - return m_pfnRoGetParameterizedTypeInstanceIID(nameElementCount, nameElements, metaDataLocator, iid, pExtra); - } - - return E_NOTIMPL; - } -#endif } diff --git a/lib/Runtime/Base/FunctionBody.cpp b/lib/Runtime/Base/FunctionBody.cpp index 011634f33b3..5f625fc7be7 100644 --- a/lib/Runtime/Base/FunctionBody.cpp +++ b/lib/Runtime/Base/FunctionBody.cpp @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #include "RuntimeBasePch.h" @@ -179,6 +180,12 @@ namespace Js return this->GetUtf8SourceInfo()->GetSource(reason == nullptr ? _u("ParseableFunctionInfo::GetSource") : reason) + this->StartOffset(); } + LPCUTF8 + ParseableFunctionInfo::GetToStringSource(const char16* reason) const + { + return this->GetUtf8SourceInfo()->GetSource(reason == nullptr ? _u("ParseableFunctionInfo::GetToStringSource") : reason) + this->PrintableStartOffset(); + } + LPCUTF8 ParseableFunctionInfo::GetStartOfDocument(const char16* reason) const { @@ -209,6 +216,17 @@ namespace Js return this->m_cbStartOffset; } + uint + ParseableFunctionInfo::PrintableStartOffset() const + { + PrintOffsets* printOffsets = this->GetPrintOffsets(); + if (printOffsets != nullptr) + { + return printOffsets->cbStartPrintOffset; + } + return this->m_cbStartOffset; + } + void ParseableFunctionInfo::RegisterFuncToDiag(ScriptContext * scriptContext, char16 const * pszTitle) { #ifdef ENABLE_SCRIPT_DEBUGGING @@ -321,6 +339,18 @@ namespace Js return FALSE; } + bool + FunctionBody::SkipAutoProfileForCoroutine() const + { + return this->IsCoroutine() && CONFIG_FLAG(JitES6Generators); + } + + bool + FunctionBody::IsGeneratorAndJitIsDisabled() const + { + return this->IsCoroutine() && !(CONFIG_FLAG(JitES6Generators) && !this->GetHasTry() && !this->IsInDebugMode() && !this->IsModule()); + } + ScriptContext* EntryPointInfo::GetScriptContext() { Assert(!IsCleanedUp()); @@ -810,6 +840,10 @@ namespace Js { this->UpdateActiveFunctionsForOneDataSet(pActiveFuncs, callSiteData, callSiteData->GetCallbackInlinees(), this->GetProfiledCallSiteCount()); } + if (callSiteData->GetCallApplyTargetInlinees()) + { + this->UpdateActiveFunctionsForOneDataSet(pActiveFuncs, callSiteData, callSiteData->GetCallApplyTargetInlinees(), this->GetProfiledCallApplyCallSiteCount()); + } } // Now walk the top-level data, but only do it once, since it's always the same. @@ -839,6 +873,15 @@ namespace Js this->UpdateActiveFunctionsForOneDataSet(pActiveFuncs, nullptr, data, this->GetProfiledCallSiteCount()); } } + { +#if ENABLE_NATIVE_CODEGEN + Field(FunctionCodeGenRuntimeData*)* data = this->GetCodeGenCallApplyTargetRuntimeData(); + if (data != nullptr) + { + this->UpdateActiveFunctionsForOneDataSet(pActiveFuncs, nullptr, data, this->GetProfiledCallApplyCallSiteCount()); + } +#endif + } } bool FunctionBody::DoRedeferFunction(uint inactiveThreshold) const @@ -1472,6 +1515,8 @@ namespace Js #define CopyDeferParseField(field) other->field = this->field; CopyDeferParseField(flags); + CopyDeferParseField(crossSiteDeferredFunctionType); + CopyDeferParseField(crossSiteUndeferredFunctionType); CopyDeferParseField(m_isDeclaration); CopyDeferParseField(m_isAccessor); CopyDeferParseField(m_isStrictMode); @@ -1487,6 +1532,7 @@ namespace Js CopyDeferParseField(m_grfscr); other->SetScopeInfo(this->GetScopeInfo()); other->SetDeferredStubs(this->GetDeferredStubs()); + other->SetPrintOffsets(this->GetPrintOffsets()); CopyDeferParseField(m_utf8SourceHasBeenSet); #if DBG CopyDeferParseField(deferredParseNextFunctionId); @@ -1585,6 +1631,8 @@ namespace Js LocalFunctionId functionId, Utf8SourceInfo* sourceInfo, ScriptContext* scriptContext, uint functionNumber, const char16* displayName, uint displayNameLength, uint displayShortNameOffset, FunctionInfo::Attributes attributes, FunctionBodyFlags flags) : FunctionProxy(scriptContext, sourceInfo, functionNumber), + crossSiteDeferredFunctionType(nullptr), + crossSiteUndeferredFunctionType(nullptr), #if DYNAMIC_INTERPRETER_THUNK m_dynamicInterpreterThunk(nullptr), #endif @@ -2071,6 +2119,28 @@ namespace Js undeferredFunctionType = type; } + ScriptFunctionType * FunctionProxy::GetCrossSiteDeferredFunctionType() const + { + return HasParseableInfo() ? GetParseableFunctionInfo()->GetCrossSiteDeferredFunctionType() : nullptr; + } + + void FunctionProxy::SetCrossSiteDeferredFunctionType(ScriptFunctionType * type) + { + Assert(HasParseableInfo()); + GetParseableFunctionInfo()->SetCrossSiteDeferredFunctionType(type); + } + + ScriptFunctionType * FunctionProxy::GetCrossSiteUndeferredFunctionType() const + { + return HasParseableInfo() ? GetParseableFunctionInfo()->GetCrossSiteUndeferredFunctionType() : nullptr; + } + + void FunctionProxy::SetCrossSiteUndeferredFunctionType(ScriptFunctionType * type) + { + Assert(HasParseableInfo()); + GetParseableFunctionInfo()->SetCrossSiteUndeferredFunctionType(type); + } + JavascriptMethod FunctionProxy::GetDirectEntryPoint(ProxyEntryPointInfo* entryPoint) const { Assert(entryPoint->jsMethod != nullptr); @@ -2377,6 +2447,51 @@ namespace Js grfscr &= ~fscrDeferredFncIsMethod; } + if (funcBody->IsAsync()) + { + grfscr |= fscrDeferredFncIsAsync; + } + else + { + grfscr &= ~fscrDeferredFncIsAsync; + } + + if (funcBody->IsGenerator()) + { + grfscr |= fscrDeferredFncIsGenerator; + } + else + { + grfscr &= ~fscrDeferredFncIsGenerator; + } + + if (funcBody->IsClassConstructor()) + { + grfscr |= fscrDeferredFncIsClassConstructor; + } + else + { + grfscr &= ~fscrDeferredFncIsClassConstructor; + } + + if (funcBody->IsBaseClassConstructor()) + { + grfscr |= fscrDeferredFncIsBaseClassConstructor; + } + else + { + grfscr &= ~fscrDeferredFncIsBaseClassConstructor; + } + + if (funcBody->IsClassMethod()) + { + grfscr |= fscrDeferredFncIsClassMember; + } + else + { + grfscr &= ~fscrDeferredFncIsClassMember; + } + if (isDebugOrAsmJsReparse) { // Disable deferred parsing if not DeferNested, or doing a debug/asm.js re-parse @@ -2677,6 +2792,7 @@ namespace Js if (srcName == Js::Constants::GlobalFunction || srcName == Js::Constants::AnonymousFunction || srcName == Js::Constants::GlobalCode || + srcName == Js::Constants::ModuleCode || srcName == Js::Constants::Anonymous || srcName == Js::Constants::UnknownScriptCode || srcName == Js::Constants::FunctionCode) @@ -2809,9 +2925,18 @@ namespace Js { Js::Throw::OutOfMemory(); } + Assert(node->cbStringMin <= node->cbMin); this->m_cbStartOffset = (uint)cbMin; this->m_cbLength = (uint)lengthInBytes; + if (node->cbStringMin != node->cbMin) + { + PrintOffsets* printOffsets = RecyclerNewLeaf(this->m_scriptContext->GetRecycler(), PrintOffsets); + printOffsets->cbStartPrintOffset = (uint)node->cbStringMin; + printOffsets->cbEndPrintOffset = (uint)node->cbStringLim; + this->SetPrintOffsets(printOffsets); + } + Assert(this->m_utf8SourceInfo != nullptr); this->m_utf8SourceHasBeenSet = true; @@ -4286,7 +4411,13 @@ namespace Js void FunctionBody::RecordIntConstant(RegSlot location, unsigned int val) { ScriptContext *scriptContext = this->GetScriptContext(); +#ifdef ENABLE_TEST_HOOKS + Var intConst = scriptContext->GetConfig()->Force32BitByteCode() ? + JavascriptNumber::ToVarFor32BitBytecode((int32)val, scriptContext) : + JavascriptNumber::ToVar((int32)val, scriptContext); +#else Var intConst = JavascriptNumber::ToVar((int32)val, scriptContext); +#endif this->RecordConstant(location, intConst); } @@ -4316,6 +4447,13 @@ namespace Js this->RecordConstant(location, str); } + void FunctionBody::RecordBigIntConstant(RegSlot location, LPCOLESTR psz, uint32 cch, bool isNegative) + { + ScriptContext *scriptContext = this->GetScriptContext(); + Var bigintConst = JavascriptBigInt::Create(psz, cch, isNegative, scriptContext); + this->RecordConstant(location, bigintConst); + } + void FunctionBody::RecordFloatConstant(RegSlot location, double d) { ScriptContext *scriptContext = this->GetScriptContext(); @@ -4504,13 +4642,16 @@ namespace Js } Output::Print(_u("\n\n Line %3d: "), line + 1); // Need to match up cchStartOffset to appropriate cbStartOffset given function's cbStartOffset and cchStartOffset - size_t i = utf8::CharacterIndexToByteIndex(source, sourceInfo->GetCbLength(), cchStartOffset, this->m_cbStartOffset, this->m_cchStartOffset); - - size_t lastOffset = StartOffset() + LengthInBytes(); - for (;i < lastOffset && source[i] != '\n' && source[i] != '\r'; i++) + size_t utf8SrcStartIdx = utf8::CharacterIndexToByteIndex(source, sourceInfo->GetCbLength(), cchStartOffset, this->m_cbStartOffset, this->m_cchStartOffset); + size_t utf8SrcEndIdx = StartOffset() + LengthInBytes(); + char16* utf16Buf = HeapNewArray(char16, utf8SrcEndIdx - utf8SrcStartIdx + 2); + size_t utf16BufSz = utf8::DecodeUnitsIntoAndNullTerminateNoAdvance(utf16Buf, source + utf8SrcStartIdx, source + utf8SrcEndIdx, utf8::DecodeOptions::doDefault); + Assert(utf16BufSz <= utf8SrcEndIdx - utf8SrcStartIdx); + for (size_t i = 0; i < utf16BufSz && utf16Buf[i] != _u('\n') && utf16Buf[i] != _u('\r'); i++) { - Output::Print(_u("%C"), source[i]); + Output::Print(_u("%lc"), utf16Buf[i]); } + HeapDeleteArray(utf8SrcEndIdx - utf8SrcStartIdx + 2, utf16Buf); Output::Print(_u("\n")); Output::Print(_u(" Col %4d:%s^\n"), col + 1, ((col+1)<10000) ? _u(" ") : _u("")); @@ -4938,6 +5079,14 @@ namespace Js this->undeferredFunctionType->SetEntryPoint(this->GetDefaultEntryPointInfo()->jsMethod); this->undeferredFunctionType->SetEntryPointInfo(this->GetDefaultEntryPointInfo()); } + if (this->crossSiteDeferredFunctionType) + { + this->crossSiteDeferredFunctionType->SetEntryPointInfo(this->GetDefaultEntryPointInfo()); + } + if (this->crossSiteUndeferredFunctionType) + { + this->crossSiteUndeferredFunctionType->SetEntryPointInfo(this->GetDefaultEntryPointInfo()); + } #if DBG if (!this->HasValidEntryPoint()) @@ -5013,6 +5162,9 @@ namespace Js this->cacheIdToPropertyIdMap = nullptr; this->SetFormalsPropIdArray(nullptr); this->SetReferencedPropertyIdMap(nullptr); +#if ENABLE_NATIVE_CODEGEN + this->SetCallSiteToCallApplyCallSiteArray(nullptr); +#endif this->SetLiteralRegexs(nullptr); this->SetSlotIdInCachedScopeToNestedIndexArray(nullptr); this->SetStatementMaps(nullptr); @@ -5185,7 +5337,7 @@ namespace Js OUTPUT_VERBOSE_TRACE(Js::DebuggerPhase, _u("Regenerate Due To Debug Mode: function %s (%s) from script context %p\n"), this->GetDisplayName(), this->GetDebugNumberSet(debugStringBuffer), m_scriptContext); - this->UnlockCounters(); // asuming background jit is stopped and allow the counter setters access again + this->UnlockCounters(); // assuming background jit is stopped and allow the counter setters access again #endif } #endif @@ -5229,7 +5381,7 @@ namespace Js if (this->deferredPrototypeType) { // Update old entry points on the deferred prototype type, - // as they may point to old native code gen regions which age gone now. + // as they may point to old native code gen regions which are gone now. this->deferredPrototypeType->SetEntryPoint(this->GetDefaultEntryPointInfo()->jsMethod); this->deferredPrototypeType->SetEntryPointInfo(this->GetDefaultEntryPointInfo()); } @@ -5238,6 +5390,14 @@ namespace Js this->undeferredFunctionType->SetEntryPoint(this->GetDefaultEntryPointInfo()->jsMethod); this->undeferredFunctionType->SetEntryPointInfo(this->GetDefaultEntryPointInfo()); } + if (this->crossSiteDeferredFunctionType) + { + this->crossSiteDeferredFunctionType->SetEntryPointInfo(this->GetDefaultEntryPointInfo()); + } + if (this->crossSiteUndeferredFunctionType) + { + this->crossSiteUndeferredFunctionType->SetEntryPointInfo(this->GetDefaultEntryPointInfo()); + } ReinitializeExecutionModeAndLimits(); } @@ -5525,7 +5685,7 @@ namespace Js ScopeType FrameDisplay::GetScopeType(void* scope) { - if(Js::ActivationObject::Is(scope)) + if(Js::VarIs(scope)) { return ScopeType_ActivationObject; } @@ -5537,7 +5697,7 @@ namespace Js } // ScopeSlots - bool ScopeSlots::IsDebuggerScopeSlotArray() + bool ScopeSlots::IsDebuggerScopeSlotArray() { return DebuggerScope::Is(slotArray[ScopeMetadataSlotIndex]); } @@ -6452,6 +6612,23 @@ namespace Js return slotIdToNestedIndexArray; } +#if ENABLE_NATIVE_CODEGEN + ProfileId* FunctionBody::CreateCallSiteToCallApplyCallSiteArray() + { + Assert(this->GetCallSiteToCallApplyCallSiteArray() == nullptr); + uint count = this->GetProfiledCallSiteCount(); + if (count != 0) + { + this->SetCallSiteToCallApplyCallSiteArray(RecyclerNewArrayLeaf(this->m_scriptContext->GetRecycler(), ProfileId, count)); + for (uint i = 0; i < count; i++) + { + this->GetCallSiteToCallApplyCallSiteArray()[i] = Js::Constants::NoProfileId; + } + } + return this->GetCallSiteToCallApplyCallSiteArray(); + } +#endif + void FunctionBody::ResetProfileIds() { #if ENABLE_PROFILE_INFO @@ -6497,7 +6674,7 @@ namespace Js AssertMsg(!this->byteCodeBlock || !this->IsWasmFunction(), "We should never reset the bytecode block for Wasm"); this->byteCodeBlock = nullptr; - // Also, remove the function body from the source info to prevent any further processing + // Also, remove the function body from the source info to prevent any further processing // of the function such as attempts to set breakpoints. if (GetIsFuncRegistered()) { @@ -6609,6 +6786,23 @@ namespace Js return EnsureCodeGenRuntimeDataCommon(recycler, profiledCallSiteId, inlinee); } + const FunctionCodeGenRuntimeData * FunctionBody::GetCallApplyTargetInlineeCodeGenRuntimeData(const ProfileId callApplyCallSiteId) const + { + Assert(callApplyCallSiteId < GetProfiledCallApplyCallSiteCount()); + + Field(FunctionCodeGenRuntimeData*)* codeGenRuntimeData = this->GetCodeGenCallApplyTargetRuntimeDataWithLock(); + return codeGenRuntimeData ? codeGenRuntimeData[callApplyCallSiteId] : nullptr; + } + + FunctionCodeGenRuntimeData * FunctionBody::EnsureCallApplyTargetInlineeCodeGenRuntimeData( + Recycler *const recycler, + const ProfileId callApplyCallSiteId, + FunctionBody *const inlinee) + { + Assert(callApplyCallSiteId < this->GetProfiledCallApplyCallSiteCount()); + return EnsureCodeGenRuntimeDataCommon(recycler, callApplyCallSiteId, inlinee); + } + const FunctionCodeGenRuntimeData *FunctionBody::GetLdFldInlineeCodeGenRuntimeData(const InlineCacheIndex inlineCacheIndex) const { Assert(inlineCacheIndex < this->GetInlineCacheCount()); @@ -6958,8 +7152,7 @@ namespace Js !GetScriptContext()->IsScriptContextInDebugMode() && DoInterpreterProfile() && #pragma warning(suppress: 6235) // ( || ) is always a non-zero constant. - (!CONFIG_FLAG(NewSimpleJit) || DoInterpreterAutoProfile()) && - !IsCoroutine(); // Generator JIT requires bailout which SimpleJit cannot do since it skips GlobOpt + (!CONFIG_FLAG(NewSimpleJit) || DoInterpreterAutoProfile()); } bool FunctionBody::DoSimpleJitWithLock() const @@ -6973,8 +7166,7 @@ namespace Js !this->IsInDebugMode() && DoInterpreterProfileWithLock() && #pragma warning(suppress: 6235) // ( || ) is always a non-zero constant. - (!CONFIG_FLAG(NewSimpleJit) || DoInterpreterAutoProfile()) && - !IsCoroutine(); // Generator JIT requires bailout which SimpleJit cannot do since it skips GlobOpt + (!CONFIG_FLAG(NewSimpleJit) || DoInterpreterAutoProfile()); } bool FunctionBody::DoSimpleJitDynamicProfile() const @@ -8196,7 +8388,7 @@ namespace Js } #endif - + void EntryPointInfo::PinTypeRefs(ScriptContext* scriptContext) { NativeEntryPointData * nativeEntryPointData = this->GetNativeEntryPointData(); @@ -8229,7 +8421,7 @@ namespace Js Js::PropertyGuard* sharedPropertyGuard = nullptr; bool hasSharedPropertyGuard = nativeEntryPointData->TryGetSharedPropertyGuard(propertyId, sharedPropertyGuard); Assert(hasSharedPropertyGuard); - bool isValid = hasSharedPropertyGuard ? sharedPropertyGuard->IsValid() : false; + bool isValid = hasSharedPropertyGuard && sharedPropertyGuard->IsValid(); if (isValid) { scriptContext->GetThreadContext()->RegisterLazyBailout(propertyId, this); @@ -8287,7 +8479,7 @@ namespace Js if (jitTransferData->equivalentTypeGuardOffsets) { // InstallGuards - int guardCount = jitTransferData->equivalentTypeGuardOffsets->count; + int guardCount = jitTransferData->equivalentTypeGuardOffsets->count; EquivalentTypeCache* cache = this->nativeEntryPointData->EnsureEquivalentTypeCache(guardCount, scriptContext, this); char * nativeDataBuffer = this->GetOOPNativeEntryPointData()->GetNativeDataBuffer(); for (int i = 0; i < guardCount; i++) @@ -8585,7 +8777,14 @@ namespace Js } - void EntryPointInfo::DoLazyBailout(BYTE** addressOfInstructionPointer, Js::FunctionBody* functionBody, const PropertyRecord* propertyRecord) + void EntryPointInfo::DoLazyBailout( + BYTE **addressOfInstructionPointer, + BYTE *framePointer +#if DBG + , Js::FunctionBody *functionBody + , const PropertyRecord *propertyRecord +#endif + ) { BYTE* instructionPointer = *addressOfInstructionPointer; NativeEntryPointData * nativeEntryPointData = this->GetNativeEntryPointData(); @@ -8593,40 +8792,53 @@ namespace Js ptrdiff_t codeSize = nativeEntryPointData->GetCodeSize(); Assert(instructionPointer > (BYTE*)nativeAddress && instructionPointer < ((BYTE*)nativeAddress + codeSize)); size_t offset = instructionPointer - (BYTE*)nativeAddress; - BailOutRecordMap * bailoutRecordMap = this->GetInProcNativeEntryPointData()->GetBailOutRecordMap(); - int found = bailoutRecordMap->BinarySearch([=](const LazyBailOutRecord& record, int index) + NativeLazyBailOutRecordList * bailOutRecordList = this->GetInProcNativeEntryPointData()->GetSortedLazyBailOutRecordList(); + + AssertMsg(bailOutRecordList != nullptr, "Lazy Bailout: bailOutRecordList is missing"); + + int found = bailOutRecordList->BinarySearch([=](const LazyBailOutRecord& record, int index) { - // find the closest entry which is greater than the current offset. - if (record.offset >= offset) + if (record.offset == offset) { - if (index == 0 || (index > 0 && bailoutRecordMap->Item(index - 1).offset < offset)) - { - return 0; - } - else - { - return 1; - } + return 0; + } + else if (record.offset > offset) + { + return 1; + } + else + { + return -1; } - return -1; }); + if (found != -1) { - LazyBailOutRecord& record = bailoutRecordMap->Item(found); - *addressOfInstructionPointer = record.instructionPointer; - record.SetBailOutKind(); + auto inProcNativeEntryPointData = this->GetInProcNativeEntryPointData(); + const LazyBailOutRecord& record = bailOutRecordList->Item(found); + const uint32 lazyBailOutThunkOffset = inProcNativeEntryPointData->GetLazyBailOutThunkOffset(); + BYTE * const lazyBailOutThunkAddress = (BYTE *) nativeAddress + lazyBailOutThunkOffset; + + // Change the instruction pointer of the frame to our thunk so that + // when execution returns back to this frame, we will execute the thunk instead + *addressOfInstructionPointer = lazyBailOutThunkAddress; + + // Put the BailOutRecord corresponding to our LazyBailOut point on the pre-allocated slot on the stack + BYTE *addressOfLazyBailOutRecordSlot = framePointer + inProcNativeEntryPointData->GetLazyBailOutRecordSlotOffset(); + *(reinterpret_cast(addressOfLazyBailOutRecordSlot)) = reinterpret_cast(record.bailOutRecord); + if (PHASE_TRACE1(Js::LazyBailoutPhase)) { - Output::Print(_u("On stack lazy bailout. Property: %s Old IP: 0x%x New IP: 0x%x "), propertyRecord->GetBuffer(), instructionPointer, record.instructionPointer); #if DBG + Output::Print(_u("On stack lazy bailout. Property: %s Old IP: 0x%x New IP: 0x%x "), propertyRecord->GetBuffer(), instructionPointer, lazyBailOutThunkAddress); record.Dump(functionBody); -#endif Output::Print(_u("\n")); +#endif } } else { - AssertMsg(false, "Lazy Bailout address mapping missing"); + AssertMsg(false, "Lazy Bailout: Address mapping missing"); } } @@ -8796,7 +9008,7 @@ namespace Js this->OnCleanup(isShutdown); if (this->nativeEntryPointData) - { + { this->nativeEntryPointData->Cleanup(GetScriptContext(), isShutdown, false); this->nativeEntryPointData = nullptr; } @@ -8876,7 +9088,7 @@ namespace Js void EntryPointInfo::SetTJCodeSize(ptrdiff_t size) { Assert(isAsmJsFunction); - // TODO: We don't need the whole NativeEntryPointData to just hold just the code and size for TJ mode + // TODO: We don't need the whole NativeEntryPointData to just hold just the code and size for TJ mode this->EnsureNativeEntryPointData()->SetTJCodeSize(size); } @@ -9602,4 +9814,4 @@ namespace Js // Don't grow these data structure unless absolutely necessary CompileAssert(sizeof(Js::EntryPointInfo) <= 56); CompileAssert(sizeof(Js::FunctionEntryPointInfo) <= 96); -#endif \ No newline at end of file +#endif diff --git a/lib/Runtime/Base/FunctionBody.h b/lib/Runtime/Base/FunctionBody.h index 120376ab7d5..470e8b21919 100644 --- a/lib/Runtime/Base/FunctionBody.h +++ b/lib/Runtime/Base/FunctionBody.h @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #pragma once @@ -222,7 +223,7 @@ namespace Js // main and JIT threads. class EntryPointInfo : public ProxyEntryPointInfo { - + private: enum State : BYTE { @@ -571,14 +572,19 @@ namespace Js void ResetOnLazyBailoutFailure(); void OnNativeCodeInstallFailure(); virtual void ResetOnNativeCodeInstallFailure() = 0; - - void FreeJitTransferData(); - bool ClearEquivalentTypeCaches(); + + void FreeJitTransferData(); + bool ClearEquivalentTypeCaches(); virtual void Invalidate(bool prolongEntryPoint) { Assert(false); } InlineeFrameRecord* FindInlineeFrame(void* returnAddress); bool HasInlinees(); - void DoLazyBailout(BYTE** addressOfReturnAddress, Js::FunctionBody* functionBody, const PropertyRecord* propertyRecord); + +#if DBG + void DoLazyBailout(BYTE **addressOfInstructionPointer, BYTE *framePointer, Js::FunctionBody *functionBody, const PropertyRecord *propertyRecord); +#else + void DoLazyBailout(BYTE **addressOfInstructionPointer, BYTE *framePointer); +#endif void CleanupNativeCode(ScriptContext * scriptContext); #if DBG_DUMP @@ -637,7 +643,7 @@ namespace Js virtual void Expire() override; virtual void EnterExpirableCollectMode() override; virtual void ResetOnNativeCodeInstallFailure() override; - static const uint8 GetDecrCallCountPerBailout() + static uint8 GetDecrCallCountPerBailout() { return (uint8)CONFIG_FLAG(CallsToBailoutsRatioForRejit) + 1; } @@ -675,7 +681,7 @@ namespace Js #if ENABLE_NATIVE_CODEGEN virtual void ResetOnNativeCodeInstallFailure() override; - static const uint8 GetDecrLoopCountPerBailout() + static uint8 GetDecrLoopCountPerBailout() { return (uint8)CONFIG_FLAG(LoopIterationsToBailoutsRatioForRejit) + 1; } @@ -720,6 +726,7 @@ namespace Js #if ENABLE_NATIVE_CODEGEN Field(uint) rejitCount; #endif + Field(bool) hasYield; Field(bool) isNested; Field(bool) isInTry; Field(bool) isInTryFinally; @@ -730,8 +737,8 @@ namespace Js #endif static const uint NoLoop = (uint)-1; - static const uint GetOffsetOfProfiledLoopCounter() { return offsetof(LoopHeader, profiledLoopCounter); } - static const uint GetOffsetOfInterpretCount() { return offsetof(LoopHeader, interpretCount); } + static uint GetOffsetOfProfiledLoopCounter() { return offsetof(LoopHeader, profiledLoopCounter); } + static uint GetOffsetOfInterpretCount() { return offsetof(LoopHeader, interpretCount); } bool Contains(Js::LoopHeader * loopHeader) const { @@ -849,6 +856,12 @@ namespace Js typedef Field(FunctionInfo*)* FunctionInfoArray; typedef Field(FunctionInfo*)* FunctionInfoPtrPtr; + struct PrintOffsets + { + uint cbStartPrintOffset; + uint cbEndPrintOffset; + }; + // // FunctionProxy represents a user defined function // This could be either from a source file or the byte code cache @@ -896,7 +909,11 @@ namespace Js #if ENABLE_PROFILE_INFO CallbackArgOutInfoList = 25, #endif - +#if ENABLE_NATIVE_CODEGEN + CodeGenCallApplyTargetRuntimeData = 26, + CallSiteToCallApplyCallSiteArray = 27, +#endif + PrintOffsets = 28, Max, Invalid = 0xff }; @@ -941,6 +958,11 @@ namespace Js #if ENABLE_PROFILE_INFO AuxPointerTypeEntry(AuxPointerType::CallbackArgOutInfoList, CallbackInfoList*); #endif +#if ENABLE_NATIVE_CODEGEN + AuxPointerTypeEntry(AuxPointerType::CodeGenCallApplyTargetRuntimeData, Field(FunctionCodeGenRuntimeData*)*); + AuxPointerTypeEntry(AuxPointerType::CallSiteToCallApplyCallSiteArray, ProfileId*); +#endif + AuxPointerTypeEntry(AuxPointerType::PrintOffsets, PrintOffsets*); #undef AuxPointerTypeEntry typedef AuxPtrs AuxPtrsT; @@ -981,7 +1003,7 @@ namespace Js virtual void Mark(Recycler *recycler) override { AssertMsg(false, "Mark called on object that isn't TrackableObject"); } - static const uint GetOffsetOfFunctionInfo() { return offsetof(FunctionProxy, functionInfo); } + static uint GetOffsetOfFunctionInfo() { return offsetof(FunctionProxy, functionInfo); } FunctionInfo * GetFunctionInfo() const { return this->functionInfo; @@ -1022,6 +1044,7 @@ namespace Js void SetEnclosedByGlobalFunc(); bool CanBeDeferred() const; BOOL IsDeferredDeserializeFunction() const; + BOOL HasParseableInfo() const; BOOL IsDeferredParseFunction() const; FunctionInfo::Attributes GetAttributes() const; void SetAttributes(FunctionInfo::Attributes attributes); @@ -1057,6 +1080,10 @@ namespace Js ScriptFunctionType * EnsureDeferredPrototypeType(); ScriptFunctionType * GetUndeferredFunctionType() const; void SetUndeferredFunctionType(ScriptFunctionType * type); + ScriptFunctionType * GetCrossSiteDeferredFunctionType() const; + void SetCrossSiteDeferredFunctionType(ScriptFunctionType * type); + ScriptFunctionType * GetCrossSiteUndeferredFunctionType() const; + void SetCrossSiteUndeferredFunctionType(ScriptFunctionType * type); JavascriptMethod GetDirectEntryPoint(ProxyEntryPointInfo* entryPoint) const; // Function object type list methods @@ -1128,8 +1155,9 @@ namespace Js bool IsJitLoopBodyPhaseEnabled() const { - // Consider: Allow JitLoopBody in generator functions for loops that do not yield. - return !PHASE_OFF(JITLoopBodyPhase, this) && !PHASE_OFF(FullJitPhase, this) && !this->IsCoroutine(); + return !PHASE_OFF(JITLoopBodyPhase, this) && !PHASE_OFF(FullJitPhase, this) && + (!this->IsCoroutine() || !CONFIG_FLAG(JitES6Generators) || this->IsModule()); + // Jitting loop bodies is currently disabled when testing the Jitting of whole generator functions } bool IsJitLoopBodyPhaseForced() const @@ -1302,6 +1330,13 @@ namespace Js return GetFunctionInfo()->IsDeferredDeserializeFunction(); } + inline BOOL FunctionProxy::HasParseableInfo() const + { + Assert(GetFunctionInfo()); + Assert(GetFunctionInfo()->GetFunctionProxy() == this); + return GetFunctionInfo()->HasParseableInfo(); + } + inline BOOL FunctionProxy::IsDeferredParseFunction() const { Assert(GetFunctionInfo()); @@ -1578,6 +1613,11 @@ namespace Js uint32 GetGrfscr() const; void SetGrfscr(uint32 grfscr); + ScriptFunctionType * GetCrossSiteDeferredFunctionType() const { return crossSiteDeferredFunctionType; } + void SetCrossSiteDeferredFunctionType(ScriptFunctionType * type) { Assert(!crossSiteDeferredFunctionType); crossSiteDeferredFunctionType = type; } + ScriptFunctionType * GetCrossSiteUndeferredFunctionType() const { return crossSiteUndeferredFunctionType; } + void SetCrossSiteUndeferredFunctionType(ScriptFunctionType * type) { Assert(!crossSiteUndeferredFunctionType); crossSiteUndeferredFunctionType = type; } + ///---------------------------------------------------------------------------- /// /// ParseableFunctionInfo::GetInParamsCount @@ -1625,6 +1665,7 @@ namespace Js uint LengthInBytes() const { return m_cbLength; } uint StartOffset() const; + uint PrintableStartOffset() const; ULONG GetLineNumber() const; ULONG GetColumnNumber() const; template @@ -1636,6 +1677,7 @@ namespace Js ULONG GetRelativeColumnNumber() const { return m_columnNumber; } uint GetSourceIndex() const; LPCUTF8 GetSource(const char16* reason = nullptr) const; + LPCUTF8 GetToStringSource(const char16* reason = nullptr) const; charcount_t LengthInChars() const { return m_cchLength; } charcount_t StartInDocument() const; bool IsEval() const { return m_isEval; } @@ -1740,6 +1782,8 @@ namespace Js void BuildDeferredStubs(ParseNodeFnc* pnodeFnc); DeferredFunctionStub *GetDeferredStubs() const { return this->GetAuxPtr(); } void SetDeferredStubs(DeferredFunctionStub *stub) { this->SetAuxPtr(stub); } + PrintOffsets* GetPrintOffsets() const { return this->GetAuxPtr(); } + void SetPrintOffsets(PrintOffsets* offsets) { this->SetAuxPtr(offsets); } void RegisterFuncToDiag(ScriptContext * scriptContext, char16 const * pszTitle); bool IsES6ModuleCode() const; private: @@ -1794,20 +1838,23 @@ namespace Js // yet, leaving this here for now. We can look at optimizing the function info and function proxy structures some // more and also fix our thunks to handle 8 bit offsets - FieldWithBarrier(bool) m_utf8SourceHasBeenSet; // start of UTF8-encoded source - FieldWithBarrier(uint) m_sourceIndex; // index into the scriptContext's list of saved sources -#if DYNAMIC_INTERPRETER_THUNK - FieldNoBarrier(void*) m_dynamicInterpreterThunk; // Unique 'thunk' for every interpreted function - used for ETW symbol decoding. -#endif - FieldWithBarrier(uint) m_cbStartOffset; // pUtf8Source is this many bytes from the start of the scriptContext's source buffer. - - // This is generally the same as m_cchStartOffset unless the buffer has a BOM + FieldWithBarrier(bool) m_utf8SourceHasBeenSet : 1; // start of UTF8-encoded source #define DEFINE_PARSEABLE_FUNCTION_INFO_FIELDS 1 #define DECLARE_TAG_FIELD(type, name, serializableType) Field(type) name #define CURRENT_ACCESS_MODIFIER protected: #include "SerializableFunctionFields.h" + FieldWithBarrier(uint) m_sourceIndex; // index into the scriptContext's list of saved sources +#if DYNAMIC_INTERPRETER_THUNK + FieldNoBarrier(void*) m_dynamicInterpreterThunk; // Unique 'thunk' for every interpreted function - used for ETW symbol decoding. +#endif + FieldWithBarrier(ScriptFunctionType*) crossSiteDeferredFunctionType; + FieldWithBarrier(ScriptFunctionType*) crossSiteUndeferredFunctionType; + + FieldWithBarrier(uint) m_cbStartOffset; // pUtf8Source is this many bytes from the start of the scriptContext's source buffer. + // This is generally the same as m_cchStartOffset unless the buffer has a BOM or other non-ascii characters + FieldWithBarrier(ULONG) m_lineNumber; FieldWithBarrier(ULONG) m_columnNumber; FieldWithBarrier(const char16*) m_displayName; // Optional name @@ -1893,16 +1940,17 @@ namespace Js ObjLiteralCount = 15, LiteralRegexCount = 16, InnerScopeCount = 17, + ProfiledCallApplyCallSiteCount = 18, // Following counters uses ((uint32)-1) as default value - LocalClosureRegister = 18, - ParamClosureRegister = 19, - LocalFrameDisplayRegister = 20, - EnvRegister = 21, - ThisRegisterForEventHandler = 22, - FirstInnerScopeRegister = 23, - FuncExprScopeRegister = 24, - FirstTmpRegister = 25, + LocalClosureRegister = 19, + ParamClosureRegister = 20, + LocalFrameDisplayRegister = 21, + EnvRegister = 22, + ThisRegisterForEventHandler = 23, + FirstInnerScopeRegister = 24, + FuncExprScopeRegister = 25, + FirstTmpRegister = 26, Max }; @@ -2224,7 +2272,7 @@ namespace Js #if DYNAMIC_INTERPRETER_THUNK void GenerateDynamicInterpreterThunk(); #endif - + Js::JavascriptMethod GetEntryPoint(ProxyEntryPointInfo* entryPoint) const { return entryPoint->jsMethod; } void CaptureDynamicProfileState(FunctionEntryPointInfo* entryPointInfo); #if ENABLE_DEBUG_CONFIG_OPTIONS @@ -2377,7 +2425,7 @@ namespace Js } #endif - const bool GetIsAsmJsFunction() const + bool GetIsAsmJsFunction() const { return m_isAsmJsFunction; } @@ -2574,6 +2622,11 @@ namespace Js Field(FunctionCodeGenRuntimeData*)* GetCodeGenCallbackRuntimeDataWithLock() const { return this->GetAuxPtrWithLock(); } void SetCodeGenCallbackRuntimeData(FunctionCodeGenRuntimeData** codeGenArgumentRuntimeData) { this->SetAuxPtr(codeGenArgumentRuntimeData); } +#if ENABLE_NATIVE_CODEGEN + Field(FunctionCodeGenRuntimeData*)* GetCodeGenCallApplyTargetRuntimeData() const { return this->GetAuxPtr(); } + Field(FunctionCodeGenRuntimeData*)* GetCodeGenCallApplyTargetRuntimeDataWithLock() const { return this->GetAuxPtrWithLock(); } +#endif + template static StatementMap * GetNextNonSubexpressionStatementMap(TStatementMapList *statementMapList, int & startingAtIndex); static StatementMap * GetPrevNonSubexpressionStatementMap(StatementMapList *statementMapList, int & startingAtIndex); @@ -2751,6 +2804,9 @@ namespace Js ProfileId GetProfiledCallSiteCount() const { return this->profiledCallSiteCount; } void SetProfiledCallSiteCount(ProfileId callSiteId) { this->profiledCallSiteCount = callSiteId; } + ProfileId GetProfiledCallApplyCallSiteCount() const { return (ProfileId)this->GetCountField(CounterFields::ProfiledCallApplyCallSiteCount); } + void SetProfiledCallApplyCallSiteCount(ProfileId count) { SetCountField(CounterFields::ProfiledCallApplyCallSiteCount, count); } + bool AllocProfiledArrayCallSiteId(ProfileId* profileId) { if (this->profiledArrayCallSiteCount != Constants::NoProfileId) { *profileId = this->profiledArrayCallSiteCount++; return true; } return false; } ProfileId GetProfiledArrayCallSiteCount() const { return this->profiledArrayCallSiteCount; } @@ -2965,6 +3021,7 @@ namespace Js void RecordFalseObject(RegSlot location); void RecordIntConstant(RegSlot location, unsigned int val); void RecordStrConstant(RegSlot location, LPCOLESTR psz, uint32 cch, bool forcePropertyString); + void RecordBigIntConstant(RegSlot location, LPCOLESTR psz, uint32 cch, bool isNegative); void RecordFloatConstant(RegSlot location, double d); void RecordNullDisplayConstant(RegSlot location); void RecordStrictNullDisplayConstant(RegSlot location); @@ -3103,12 +3160,21 @@ namespace Js Js::AuxArray * GetSlotIdInCachedScopeToNestedIndexArrayWithLock() const { return this->GetAuxPtrWithLock(); } Js::AuxArray * AllocateSlotIdInCachedScopeToNestedIndexArray(uint32 slotCount); +#if ENABLE_NATIVE_CODEGEN + ProfileId* GetCallSiteToCallApplyCallSiteArray() const { return this->GetAuxPtr(); } + ProfileId* GetCallSiteToCallApplyCallSiteArrayWithLock() const { return this->GetAuxPtrWithLock(); } + ProfileId* CreateCallSiteToCallApplyCallSiteArray(); +#endif + private: void ResetLiteralRegexes(); void ResetObjectLiteralTypes(); void SetObjectLiteralTypes(DynamicType** objLiteralTypes) { this->SetAuxPtr(objLiteralTypes); }; void SetSlotIdInCachedScopeToNestedIndexArray(Js::AuxArray * slotIdInCachedScopeToNestedIndexArray) { this->SetAuxPtr(slotIdInCachedScopeToNestedIndexArray); } void ResetSlotIdInCachedScopeToNestedIndexArray() { SetSlotIdInCachedScopeToNestedIndexArray(nullptr); } +#if ENABLE_NATIVE_CODEGEN + void SetCallSiteToCallApplyCallSiteArray(ProfileId* mapping) { this->SetAuxPtr(mapping); } +#endif public: void ResetByteCodeGenState(); @@ -3128,17 +3194,25 @@ namespace Js Recycler *const recycler, __in_range(0, profiledCallSiteCount - 1) const ProfileId profiledCallSiteId, FunctionBody *const inlinee); + const FunctionCodeGenRuntimeData *GetLdFldInlineeCodeGenRuntimeData(const InlineCacheIndex inlineCacheIndex) const; FunctionCodeGenRuntimeData *EnsureLdFldInlineeCodeGenRuntimeData( Recycler *const recycler, const InlineCacheIndex inlineCacheIndex, FunctionBody *const inlinee); + const FunctionCodeGenRuntimeData * GetCallbackInlineeCodeGenRuntimeData(const ProfileId profiledCallSiteId) const; FunctionCodeGenRuntimeData * EnsureCallbackInlineeCodeGenRuntimeData( Recycler *const recycler, __in_range(0, profiledCallSiteCount - 1) const ProfileId profiledCallSiteId, FunctionBody *const inlinee); + const FunctionCodeGenRuntimeData * GetCallApplyTargetInlineeCodeGenRuntimeData(const ProfileId callApplyCallSiteId) const; + FunctionCodeGenRuntimeData * EnsureCallApplyTargetInlineeCodeGenRuntimeData( + Recycler *const recycler, + const ProfileId callApplyCallSiteId, + FunctionBody *const inlinee); + void LoadDynamicProfileInfo(); bool HasExecutionDynamicProfileInfo() const { return hasExecutionDynamicProfileInfo; } bool HasDynamicProfileInfo() const { return dynamicProfileInfo != nullptr; } @@ -3345,10 +3419,9 @@ namespace Js return IsJitLoopBodyPhaseForced() && !this->GetHasTry(); } - bool IsGeneratorAndJitIsDisabled() - { - return this->IsCoroutine() && !(CONFIG_ISENABLED(Js::JitES6GeneratorsFlag) && !this->GetHasTry()); - } + bool SkipAutoProfileForCoroutine() const; + + bool IsGeneratorAndJitIsDisabled() const; FunctionBodyFlags * GetAddressOfFlags() { return &this->flags; } Js::RegSlot GetRestParamRegSlot(); diff --git a/lib/Runtime/Base/FunctionExecutionStateMachine.cpp b/lib/Runtime/Base/FunctionExecutionStateMachine.cpp index 4eb34507c6b..ba52edee3e4 100644 --- a/lib/Runtime/Base/FunctionExecutionStateMachine.cpp +++ b/lib/Runtime/Base/FunctionExecutionStateMachine.cpp @@ -33,6 +33,32 @@ namespace Js { } + uint16 FunctionExecutionStateMachine::GetDefaultAutoProfilingInterpreter0Limit(bool isCoroutine) const { + return isCoroutine ? 0 : static_cast(Configuration::Global.flags.AutoProfilingInterpreter0Limit); + } + + uint16 FunctionExecutionStateMachine::GetDefaultProfilingInterpreter0Limit(bool isCoroutine) const { + if (isCoroutine) + { + return static_cast(Configuration::Global.flags.AutoProfilingInterpreter0Limit) + + static_cast(Configuration::Global.flags.AutoProfilingInterpreter1Limit); + } + + return static_cast(Configuration::Global.flags.ProfilingInterpreter0Limit); + } + + uint16 FunctionExecutionStateMachine::GetDefaultAutoProfilingInterpreter1Limit(bool isCoroutine) const { + return isCoroutine ? 0 : static_cast(Configuration::Global.flags.AutoProfilingInterpreter1Limit); + } + + uint16 FunctionExecutionStateMachine::GetDefaultSimpleJitLimit(bool isCoroutine) const { + return static_cast(Configuration::Global.flags.SimpleJitLimit); + } + + uint16 FunctionExecutionStateMachine::GetDefaultProfilingInterpreter1Limit(bool isCoroutine) const { + return static_cast(Configuration::Global.flags.ProfilingInterpreter1Limit); + } + void FunctionExecutionStateMachine::InitializeExecutionModeAndLimits(FunctionBody* functionBody) { #if DBG @@ -48,14 +74,17 @@ namespace Js Assert(owner == nullptr || owner == functionBody); owner = functionBody; - const ConfigFlagsTable &configFlags = Configuration::Global.flags; + // AutoProfilingInterpreter might decide to not profile on the first run. For generator + // functions, that means we will miss the profiling information on the first run when we resume + // back to the function. + const bool isCoroutine = functionBody->SkipAutoProfileForCoroutine(); - interpreterLimit = 0; - autoProfilingInterpreter0Limit = static_cast(configFlags.AutoProfilingInterpreter0Limit); - profilingInterpreter0Limit = static_cast(configFlags.ProfilingInterpreter0Limit); - autoProfilingInterpreter1Limit = static_cast(configFlags.AutoProfilingInterpreter1Limit); - simpleJitLimit = static_cast(configFlags.SimpleJitLimit); - profilingInterpreter1Limit = static_cast(configFlags.ProfilingInterpreter1Limit); + interpreterLimit = 0; + autoProfilingInterpreter0Limit = GetDefaultAutoProfilingInterpreter0Limit(isCoroutine); + profilingInterpreter0Limit = GetDefaultProfilingInterpreter0Limit(isCoroutine); + autoProfilingInterpreter1Limit = GetDefaultAutoProfilingInterpreter1Limit(isCoroutine); + simpleJitLimit = GetDefaultSimpleJitLimit(isCoroutine); + profilingInterpreter1Limit = GetDefaultProfilingInterpreter1Limit(isCoroutine); // Based on which execution modes are disabled, calculate the number of additional iterations that need to be covered by // the execution mode that will scale with the full JIT threshold @@ -103,14 +132,8 @@ namespace Js profilingInterpreter1Limit = 0; } - uint16 fullJitThresholdConfig = - static_cast( - configFlags.AutoProfilingInterpreter0Limit + - configFlags.ProfilingInterpreter0Limit + - configFlags.AutoProfilingInterpreter1Limit + - configFlags.SimpleJitLimit + - configFlags.ProfilingInterpreter1Limit); - if (!configFlags.EnforceExecutionModeLimits) + uint16 fullJitThresholdConfig = GetDefaultFullJitThreshold(isCoroutine); + if (!Configuration::Global.flags.EnforceExecutionModeLimits) { /* Scale the full JIT threshold based on some heuristics: @@ -160,6 +183,15 @@ namespace Js TryTransitionToNextInterpreterExecutionMode(); } + uint16 FunctionExecutionStateMachine::GetDefaultFullJitThreshold(bool isCoroutine) const + { + return GetDefaultAutoProfilingInterpreter0Limit(isCoroutine) + + GetDefaultProfilingInterpreter0Limit(isCoroutine) + + GetDefaultAutoProfilingInterpreter1Limit(isCoroutine) + + GetDefaultSimpleJitLimit(isCoroutine) + + GetDefaultProfilingInterpreter1Limit(isCoroutine); + } + void FunctionExecutionStateMachine::ReinitializeExecutionModeAndLimits(FunctionBody* functionBody) { #if DBG diff --git a/lib/Runtime/Base/FunctionExecutionStateMachine.h b/lib/Runtime/Base/FunctionExecutionStateMachine.h index adc10148790..32860ce020c 100644 --- a/lib/Runtime/Base/FunctionExecutionStateMachine.h +++ b/lib/Runtime/Base/FunctionExecutionStateMachine.h @@ -115,6 +115,14 @@ namespace Js // Used to detect when interpretedCount changed from a particular call FieldWithBarrier(uint32) lastInterpretedCount; + inline uint16 GetDefaultAutoProfilingInterpreter0Limit(bool isCoroutine) const; + inline uint16 GetDefaultProfilingInterpreter0Limit(bool isCoroutine) const; + inline uint16 GetDefaultAutoProfilingInterpreter1Limit(bool isCoroutine) const; + inline uint16 GetDefaultSimpleJitLimit(bool isCoroutine) const; + inline uint16 GetDefaultProfilingInterpreter1Limit(bool isCoroutine) const; + + inline uint16 GetDefaultFullJitThreshold(bool isCoroutine) const; + #if DBG FieldWithBarrier(bool) initializedExecutionModeAndLimits; // Temporary debug flags for automation diff --git a/lib/Runtime/Base/FunctionInfo.cpp b/lib/Runtime/Base/FunctionInfo.cpp index e75bd00c5a9..dddbc3bd6a5 100644 --- a/lib/Runtime/Base/FunctionInfo.cpp +++ b/lib/Runtime/Base/FunctionInfo.cpp @@ -23,7 +23,7 @@ namespace Js } FunctionInfo::FunctionInfo(FunctionInfo& that) - : originalEntryPoint(that.originalEntryPoint), attributes(that.attributes), + : originalEntryPoint(that.originalEntryPoint), attributes(that.attributes), functionBodyImpl(FORCE_NO_WRITE_BARRIER_TAG(that.functionBodyImpl)), functionId(that.functionId), compileCount(that.compileCount) { @@ -61,6 +61,16 @@ namespace Js FunctionInfo::Attributes FunctionInfo::GetAttributes(Js::RecyclableObject * function) { return function->GetTypeId() == Js::TypeIds_Function ? - Js::JavascriptFunction::UnsafeFromVar(function)->GetFunctionInfo()->GetAttributes() : Js::FunctionInfo::None; + Js::UnsafeVarTo(function)->GetFunctionInfo()->GetAttributes() : Js::FunctionInfo::None; + } + + bool FunctionInfo::IsBuiltInApplyFunction() + { + return Js::JavascriptLibrary::GetBuiltInForFuncInfo(this->GetLocalFunctionId()) == Js::BuiltinFunction::JavascriptFunction_Apply; + } + + bool FunctionInfo::IsBuiltInCallFunction() + { + return Js::JavascriptLibrary::GetBuiltInForFuncInfo(this->GetLocalFunctionId()) == Js::BuiltinFunction::JavascriptFunction_Call; } } diff --git a/lib/Runtime/Base/FunctionInfo.h b/lib/Runtime/Base/FunctionInfo.h index 1f60fcc4e24..98eee1bea03 100644 --- a/lib/Runtime/Base/FunctionInfo.h +++ b/lib/Runtime/Base/FunctionInfo.h @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- namespace Js @@ -42,7 +43,8 @@ namespace Js Method = 0x400000, // The function is a method ComputedName = 0x800000, ActiveScript = 0x1000000, - HomeObj = 0x2000000 + HomeObj = 0x2000000, + GeneratorWithComplexParams = 0x8000000 // Generator function with non-simple params needs startup yield }; FunctionInfo(JavascriptMethod entryPoint, Attributes attributes = None, LocalFunctionId functionId = Js::Constants::NoFunctionId, FunctionProxy* functionBodyImpl = nullptr); FunctionInfo(JavascriptMethod entryPoint, _no_write_barrier_tag, Attributes attributes = None, LocalFunctionId functionId = Js::Constants::NoFunctionId, FunctionProxy* functionBodyImpl = nullptr); @@ -121,6 +123,9 @@ namespace Js uint GetCompileCount() const { return compileCount; } void SetCompileCount(uint count) { compileCount = count; } + bool IsBuiltInApplyFunction(); + bool IsBuiltInCallFunction(); + BOOL IsDeferredDeserializeFunction() const { return ((this->attributes & DeferredDeserialize) == DeferredDeserialize); } BOOL IsDeferredParseFunction() const { return ((this->attributes & DeferredParse) == DeferredParse); } void SetCapturesThis() { attributes = (Attributes)(attributes | Attributes::CapturesThis); } @@ -133,6 +138,7 @@ namespace Js bool GetBaseConstructorKind() const { return (attributes & Attributes::BaseConstructorKind) != 0; } bool IsActiveScript() const { return ((this->attributes & Attributes::ActiveScript) != 0); } void SetIsActiveScript() { attributes = (Attributes)(attributes | Attributes::ActiveScript); } + bool GetGeneratorWithComplexParams() {return (attributes & Attributes::GeneratorWithComplexParams) != 0; } protected: FieldNoBarrier(JavascriptMethod) originalEntryPoint; FieldWithBarrier(FunctionProxy *) functionBodyImpl; // Implementation of the function- null if the function doesn't have a body diff --git a/lib/Runtime/Base/JnDirectFields.h b/lib/Runtime/Base/JnDirectFields.h index 9f74f4efd96..a13bd6e8de1 100644 --- a/lib/Runtime/Base/JnDirectFields.h +++ b/lib/Runtime/Base/JnDirectFields.h @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft Corporation and contributors. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- @@ -11,8 +12,8 @@ // // NOTE: After modifying this file you might observe unit test failures, especially jd/Debugger unit test failures. -// This can be caused by the build-generated bytecode files for the Intl.js and Promise.js becoming invalidated. -// Run RegenAllByteCode.cmd to update bytecode. (Note: this will build and regen all variants and may take some time.) +// This can be caused by the build-generated bytecode files in Library/InJavascript becoming invalidated. +// Run regenByteCode.py to update bytecode. (Note: this will build and regen all variants and may take some time.) // #if !defined(ENTRY_INTERNAL_SYMBOL) @@ -27,6 +28,7 @@ #if !defined(ENTRY2) #define ENTRY2(name, str) #endif +ENTRY_SYMBOL(_symbolAsyncIterator, _u("Symbol.asyncIterator")) ENTRY_SYMBOL(_symbolHasInstance, _u("Symbol.hasInstance")) ENTRY_SYMBOL(_symbolIsConcatSpreadable, _u("Symbol.isConcatSpreadable")) ENTRY_SYMBOL(_symbolIterator, _u("Symbol.iterator")) @@ -42,6 +44,7 @@ ENTRY_SYMBOL(_symbolUnscopables, _u("Symbol.unscopables")) // math functions must remain contiguous for quick modification check ENTRY(abs) ENTRY(acos) +ENTRY(any) ENTRY(asin) ENTRY(atan) ENTRY(atan2) @@ -79,6 +82,8 @@ ENTRY(clz32) ENTRY(fround) // End math functions +ENTRY(Promise) +ENTRY(asyncIterator) ENTRY(load) ENTRY(store) ENTRY2(and_, _u("and")) @@ -86,10 +91,12 @@ ENTRY2(or_, _u("or")) ENTRY2(xor_, _u("xor")) ENTRY(add) ENTRY(all) +ENTRY(allSettled) ENTRY(anchor) ENTRY(apply) ENTRY(Array) ENTRY(assign) +ENTRY(at) ENTRY(atEnd) ENTRY(big) ENTRY(bind) @@ -101,6 +108,7 @@ ENTRY(JsBuiltIn) ENTRY(call) ENTRY(CanvasPixelArray) ENTRY(cast) +ENTRY(cause) ENTRY2(catch_, _u("catch")) // "catch" cannot be an identifier in C++ so using "catch_" instead ENTRY(charAt) ENTRY(charCodeAt) @@ -125,6 +133,7 @@ ENTRY(description) ENTRY(detach) ENTRY(done) ENTRY(E) +ENTRY(errors) ENTRY(encodeURI) ENTRY(encodeURIComponent) ENTRY(endsWith) @@ -140,11 +149,15 @@ ENTRY(every) ENTRY(exec) ENTRY2(false_, _u("false")) // "false" cannot be an identifier in C++ so using "false_" instead ENTRY(flags) +ENTRY(flat) +ENTRY(flatMap) ENTRY(fill) ENTRY(filter) ENTRY(finally) ENTRY(find) ENTRY(findIndex) +ENTRY(findLast) +ENTRY(findLastIndex) ENTRY(fixed) ENTRY(fontcolor) ENTRY(fontsize) @@ -154,6 +167,8 @@ ENTRY(freeze) ENTRY(from) ENTRY(fromCharCode) ENTRY(fromCodePoint) +ENTRY(fromEntries) +ENTRY(fulfilled) ENTRY(function) ENTRY(Function) ENTRY(getDate) @@ -165,6 +180,7 @@ ENTRY(getMinutes) ENTRY(getMonth) ENTRY(GetObject) ENTRY(getOwnPropertyDescriptor) +ENTRY(getOwnPropertyDescriptors) ENTRY(getOwnPropertyNames) ENTRY(getOwnPropertySymbols) ENTRY(getSeconds) @@ -178,10 +194,10 @@ ENTRY(getUTCMilliseconds) ENTRY(getUTCMinutes) ENTRY(getUTCMonth) ENTRY(getUTCSeconds) -ENTRY(getVarDate) ENTRY(getYear) ENTRY(has) ENTRY(hasInstance) +ENTRY(hasOwn) ENTRY(hasOwnProperty) ENTRY(includes) ENTRY(indexOf) @@ -266,8 +282,6 @@ ENTRY(match) ENTRY(message) ENTRY(MIN_SAFE_INTEGER) ENTRY(MIN_VALUE) -ENTRY(moveFirst) -ENTRY(moveNext) ENTRY(NaN) ENTRY(name) ENTRY(next) @@ -276,6 +290,7 @@ ENTRY(now) ENTRY(null) ENTRY(Number) ENTRY(number) +ENTRY(BigInt) ENTRY(NEGATIVE_INFINITY) ENTRY(ownKeys) ENTRY(object) @@ -305,12 +320,14 @@ ENTRY(push) ENTRY(race) ENTRY(RangeError) ENTRY(raw) +ENTRY(reason) ENTRY(reduce) ENTRY(reduceRight) ENTRY(ReferenceError) ENTRY(Reflect) ENTRY(RegExpError) ENTRY(reject) +ENTRY(rejected) ENTRY(replace) ENTRY(resolve) ENTRY2(return_, _u("return")) // "return" cannot be an identifier in C++ so using "return_" instead @@ -349,6 +366,7 @@ ENTRY(splice) ENTRY(split) ENTRY(SQRT1_2) ENTRY(SQRT2) +ENTRY(status) ENTRY(strike) ENTRY(string) ENTRY(String) @@ -386,7 +404,11 @@ ENTRY(toUpperCase) ENTRY(toUTCString) ENTRY(trim) ENTRY(trimLeft) +ENTRY(trimStart) ENTRY(trimRight) +ENTRY(trimEnd) +ENTRY(padStart) +ENTRY(padEnd) ENTRY2(true_, _u("true")) // "true_" cannot be an identifier in C++ so using "true_" instead ENTRY(TypeError) ENTRY(undefined) @@ -395,14 +417,12 @@ ENTRY(unknown) ENTRY(unscopables) ENTRY(unshift) ENTRY(URIError) +ENTRY(AggregateError) ENTRY(UTC) ENTRY(valueOf) ENTRY(values) ENTRY(WeakMap) ENTRY(WeakSet) -ENTRY(WinRTError) -ENTRY(write) -ENTRY(writeln) ENTRY(setNonUserCodeExceptions) ENTRY(debuggerEnabled) ENTRY(enumerable) @@ -418,8 +438,10 @@ ENTRY(defineProperties) ENTRY(toGMTString) ENTRY(compile) ENTRY(global) +ENTRY(globalThis) ENTRY(lastIndex) ENTRY(multiline) +ENTRY(dotAll) ENTRY(ignoreCase) ENTRY(unicode) ENTRY(sticky) @@ -511,10 +533,40 @@ ENTRY(localeWithoutSubtags) ENTRY(resolvedOptions) ENTRY(subTags) ENTRY(supportedLocalesOf) -ENTRY(tagPublicLibraryCode) ENTRY(winglob) ENTRY(platform) ENTRY(formatToParts) +ENTRY(co) +ENTRY(kn) +ENTRY(kf) +ENTRY(nu) +ENTRY(ca) +ENTRY(hc) +ENTRY(upper) +ENTRY(lower) +ENTRY(base) +ENTRY(accent) +ENTRY2(case_, _u("case")) +ENTRY(variant) +ENTRY(code) +ENTRY(decimal) +ENTRY(percent) +ENTRY(NumberFormatStyle) +ENTRY(NumberFormatCurrencyDisplay) +ENTRY(CollatorSensitivity) +ENTRY(CollatorCaseFirst) +ENTRY(LocaleDataKind) +ENTRY(DateToLocaleString) +ENTRY(DateToLocaleDateString) +ENTRY(DateToLocaleTimeString) +ENTRY(NumberToLocaleString) +ENTRY(StringLocaleCompare) +ENTRY(BuiltInFunctionID) + +// This symbol is not part of the regular Symbol API and is only used in rare circumstances in Intl.js for backwards compatibility +// with the Intl v1 spec. It is visible to the user only using Object.getOwnPropertySymbols(Intl.NumberFormat.call(new Intl.NumberFormat())). +ENTRY(FallbackSymbol) +ENTRY_SYMBOL(_intlFallbackSymbol, _u("Intl.FallbackSymbol")) ENTRY(NumberFormat) ENTRY(__currency) @@ -552,6 +604,7 @@ ENTRY(numeric) ENTRY(sensitivity) ENTRY(sensitivityEnum) ENTRY(caseFirstEnum) +ENTRY(usage) ENTRY(DateTimeFormat) ENTRY(__boundFormat) @@ -593,14 +646,9 @@ ENTRY(select) // JsBuiltIns ENTRY(__chakraLibrary) -ENTRY(alias) -ENTRY(argumentsCount) -ENTRY(className) -ENTRY(forceInline) ENTRY(GetIteratorPrototype) ENTRY(GetLength) ENTRY(InitInternalProperties) -ENTRY(methodName) ENTRY(registerChakraLibraryFunction) ENTRY(registerFunction) ENTRY(toLength) @@ -609,101 +657,24 @@ ENTRY(arraySpeciesCreate) ENTRY(arrayCreateDataPropertyOrThrow) // EngineInterfaceObject built-ins -ENTRY(builtInGlobalObjectEntryIsFinite) -ENTRY(builtInGlobalObjectEntryIsNaN) -ENTRY(builtInGlobalObjectEval) -ENTRY(builtInJavascriptArrayEntryConcat) -ENTRY(builtInJavascriptArrayEntryFilter) -ENTRY(builtInJavascriptArrayEntryForEach) -ENTRY(builtInJavascriptArrayEntryIndexOf) -ENTRY(builtInJavascriptArrayEntryJoin) -ENTRY(builtInJavascriptArrayEntryMap) -ENTRY(builtInJavascriptArrayEntryPush) -ENTRY(builtInJavascriptArrayEntryReduce) -ENTRY(builtInJavascriptArrayEntrySlice) -ENTRY(builtInJavascriptDateEntryGetDate) -ENTRY(builtInJavascriptDateEntryNow) -ENTRY(builtInJavascriptFunctionEntryApply) -ENTRY(builtInJavascriptFunctionEntryBind) -ENTRY(builtInJavascriptObjectCreate) -ENTRY(builtInJavascriptObjectEntryDefineProperty) -ENTRY(builtInJavascriptObjectEntryGetOwnPropertyNames) -ENTRY(builtInJavascriptObjectEntryGetPrototypeOf) -ENTRY(builtInJavascriptObjectEntryHasOwnProperty) -ENTRY(builtInJavascriptObjectEntryIsExtensible) -ENTRY(builtInJavascriptObjectEntryKeys) -ENTRY(builtInJavascriptObjectGetOwnPropertyDescriptor) -ENTRY(builtInJavascriptObjectPreventExtensions) -ENTRY(builtInJavascriptRegExpEntryTest) // TODO(jahorto): is this needed? -ENTRY(builtInJavascriptStringEntryIndexOf) -ENTRY(builtInJavascriptStringEntryMatch) -ENTRY(builtInJavascriptStringEntryRepeat) -ENTRY(builtInJavascriptStringEntryReplace) -ENTRY(builtInJavascriptStringEntrySplit) -ENTRY(builtInJavascriptStringEntrySubstring) -ENTRY(builtInJavascriptStringEntryToLowerCase) -ENTRY(builtInJavascriptStringEntryToUpperCase) -ENTRY(builtInMathAbs) -ENTRY(builtInMathFloor) -ENTRY(builtInMathMax) -ENTRY(builtInMathPow) +ENTRY(builtInArray_prototype_filter) +ENTRY(builtInArray_prototype_forEach) +ENTRY(builtInArray_prototype_indexOf) +ENTRY(builtInArray_prototype_reduce) +ENTRY(builtInMath_object_min) +ENTRY(builtInMath_object_max) ENTRY(EngineInterface) -ENTRY(getErrorMessage) -ENTRY(logDebugMessage) -ENTRY(Object_prototype) -ENTRY(builtInSetPrototype) -ENTRY(builtInGetArrayLength) -ENTRY(builtInRegexMatch) ENTRY(builtInCallInstanceFunction) -ENTRY(raiseInvalidCurrencyCode) -ENTRY(raiseInvalidDate) -ENTRY(raiseLocaleNotWellFormed) -ENTRY(raiseMissingCurrencyCode) -ENTRY(raiseNeedObject) -ENTRY(raiseNeedObjectOfType) -ENTRY(raiseNeedObjectOrString) -ENTRY(raiseNotAConstructor) -ENTRY(raiseObjectIsAlreadyInitialized) -ENTRY(raiseObjectIsNonExtensible) -ENTRY(raiseOptionValueOutOfRange_3) -ENTRY(raiseOptionValueOutOfRange) -ENTRY(raiseThis_NullOrUndefined) -ENTRY(raiseFunctionArgument_NeedFunction) -// Promise (ChakraFull) -ENTRY(Promise) -ENTRY(enqueueTask) -ENTRY(MS_ASYNC_CALLBACK_STATUS_ASSIGN_DELEGATE) -ENTRY(MS_ASYNC_CALLBACK_STATUS_CANCEL) -ENTRY(MS_ASYNC_CALLBACK_STATUS_CHOOSEANY) -ENTRY(MS_ASYNC_CALLBACK_STATUS_ERROR) -ENTRY(MS_ASYNC_CALLBACK_STATUS_JOIN) -ENTRY(MS_ASYNC_OP_STATUS_CANCELED) -ENTRY(MS_ASYNC_OP_STATUS_ERROR) -ENTRY(MS_ASYNC_OP_STATUS_SUCCESS) -ENTRY(msTraceAsyncCallbackCompleted) -ENTRY(msTraceAsyncCallbackStarting) -ENTRY(msTraceAsyncOperationCompleted) -ENTRY(msTraceAsyncOperationStarting) -ENTRY(msUpdateAsyncCallbackRelation) - -// These are ES5/6/7+ builtins that are tracked for telemetry purposes, but currently not implemented by Chakra or are otherwise special. -// IMPORTANT NOTE: See notes at top of this file regarding GenByteCode and test failures after changing this list. -ENTRY(observe) -ENTRY(unobserve) -ENTRY(setUInt16) -ENTRY(at) -ENTRY(contains) -ENTRY(rightPad) -ENTRY(rPad) -ENTRY(padRight) -ENTRY(leftPad) -ENTRY(lPad) -ENTRY(padLeft) -ENTRY(getOwnPropertyDescriptors) -ENTRY(__constructor) // represents an invocation of the constructor function rather than a use of the constructor property (i.e. `new Foo()` rather than `(new Foo()).constructor`). +#define GlobalMathBuiltIn(mathMethod) ENTRY(builtInMath##mathMethod) +#define GlobalBuiltIn(global, method) ENTRY(builtIn##global##Entry##method) +#define BuiltInRaiseException(exceptionType, exceptionID) ENTRY(raise##exceptionID) +#define EngineInterfaceBuiltIn2(propId, nativeMethod) ENTRY(propId) +#include "../Library/EngineInterfaceObjectBuiltIns.h" // SymbolFunctionNameId: for RuntimeFunction nameId + +ENTRY2(_RuntimeFunctionNameId_asyncIterator, _u("[Symbol.asyncIterator]")) ENTRY2(_RuntimeFunctionNameId_hasInstance, _u("[Symbol.hasInstance]")) ENTRY2(_RuntimeFunctionNameId_toStringTag, _u("[Symbol.toStringTag]")) ENTRY2(_RuntimeFunctionNameId_toPrimitive, _u("[Symbol.toPrimitive]")) @@ -714,17 +685,6 @@ ENTRY2(_RuntimeFunctionNameId_search, _u("[Symbol.search]")) ENTRY2(_RuntimeFunctionNameId_match, _u("[Symbol.match]")) ENTRY2(_RuntimeFunctionNameId_split, _u("[Symbol.split]")) -//Previously we would add these right after standard built-ins were generated; now adding them here. -ENTRY(document) -ENTRY2(_event, _u("event")) -ENTRY(history) -ENTRY(location) -ENTRY(navigator) -ENTRY(screen) - -ENTRY(padStart) -ENTRY(padEnd) - ENTRY(SharedArrayBuffer) ENTRY(Atomics) ENTRY(compareExchange) diff --git a/lib/Runtime/Base/LineOffsetCache.cpp b/lib/Runtime/Base/LineOffsetCache.cpp index e62530f51a6..9632f3cf364 100644 --- a/lib/Runtime/Base/LineOffsetCache.cpp +++ b/lib/Runtime/Base/LineOffsetCache.cpp @@ -217,18 +217,18 @@ namespace Js void LineOffsetCache::AddLine(Recycler * allocator, charcount_t characterOffset, charcount_t byteOffset) { LineOffsetCacheList * characterOffsetList = (LineOffsetCacheList *)(LineOffsetCacheReadOnlyList*)this->lineCharacterOffsetCacheList; - characterOffsetList->Add(characterOffset); LineOffsetCacheList * byteOffsetList = (LineOffsetCacheList *)(LineOffsetCacheReadOnlyList*)this->lineByteOffsetCacheList; - if (byteOffsetList == nullptr && characterOffset != byteOffset) + if (characterOffset != byteOffset && byteOffsetList == nullptr) { - byteOffsetList = RecyclerNew(allocator, LineOffsetCacheList, allocator); - byteOffsetList->Copy(characterOffsetList); - this->lineByteOffsetCacheList = byteOffsetList; + byteOffsetList = RecyclerNew(allocator, LineOffsetCacheList, allocator); + byteOffsetList->Copy(characterOffsetList); + this->lineByteOffsetCacheList = byteOffsetList; } - else if (byteOffsetList != nullptr) + if (byteOffsetList != nullptr) { byteOffsetList->Add(byteOffset); - } + } + characterOffsetList->Add(characterOffset); #if DBG Assert(this->lineByteOffsetCacheList == nullptr || this->lineByteOffsetCacheList->Count() == this->lineCharacterOffsetCacheList->Count()); diff --git a/lib/Runtime/Base/PerfHintDescriptions.h b/lib/Runtime/Base/PerfHintDescriptions.h index d3c49a298c7..3ee02e85127 100644 --- a/lib/Runtime/Base/PerfHintDescriptions.h +++ b/lib/Runtime/Base/PerfHintDescriptions.h @@ -15,4 +15,4 @@ PERFHINT_REASON(HeapArgumentsDueToWriteToFormals, true, PerfHintLevels::L1, PERFHINT_REASON(HeapArgumentsDueToNonLocalRef, true, PerfHintLevels::L1, _u("Arguments object not optimized as there were some nested functions or non-local refs found in nested functions"), _u("Scope object creation is required in this case"), _u("Check for nested functions and non-local refs inside") ) PERFHINT_REASON(HeapArgumentsModification, true, PerfHintLevels::L1, _u("Modification to arguments"), _u("Slower lookups, high overhead in the JIT code"), _u("Avoid modification to the arguments")) PERFHINT_REASON(HeapArgumentsCreated, true, PerfHintLevels::L1, _u("Arguments object not optimized"), _u("Slower lookups, high overhead in the JIT code"), _u("Check the usage of arguments in the function")) -PERFHINT_REASON(PolymorphicInilineCap, true, PerfHintLevels::L1, _u("Function has reached polymorphic-inline cap"), _u("This function will not inline more than 4 functions for this call-site."), _u("Check the polymorphic usage of this function")) \ No newline at end of file +PERFHINT_REASON(PolymorphicInilineCap, true, PerfHintLevels::L1, _u("Function has reached polymorphic-inline cap"), _u("This function will not inline more than 4 functions for this call-site."), _u("Check the polymorphic usage of this function")) diff --git a/lib/Runtime/Base/RegexPatternMruMap.h b/lib/Runtime/Base/RegexPatternMruMap.h index d8afa8fab87..25322f86bd3 100644 --- a/lib/Runtime/Base/RegexPatternMruMap.h +++ b/lib/Runtime/Base/RegexPatternMruMap.h @@ -12,13 +12,8 @@ namespace Js namespace JsUtil { template <> - class ValueEntry: public BaseValueEntry + inline void ClearValue::Clear(Js::RegexPatternMruMap::MruDictionaryData* value) { - public: - void Clear() - { - this->value = 0; - } - }; - -}; + *value = 0; + } +} diff --git a/lib/Runtime/Base/ScriptContext.cpp b/lib/Runtime/Base/ScriptContext.cpp index 46c0e1b2921..f9db1d61b29 100644 --- a/lib/Runtime/Base/ScriptContext.cpp +++ b/lib/Runtime/Base/ScriptContext.cpp @@ -40,6 +40,7 @@ #include "ByteCode/ByteCodeSerializer.h" #include "Language/SimpleDataCacheWrapper.h" #include "Core/CRC.h" +#include "Common/CompressionUtilities.h" #ifdef _M_IX86 #ifdef _CONTROL_FLOW_GUARD @@ -79,7 +80,6 @@ namespace Js #endif #if ENABLE_NATIVE_CODEGEN nativeCodeGen(nullptr), - m_domFastPathHelperMap(nullptr), m_remoteScriptContextAddr(nullptr), jitFuncRangeCache(nullptr), #endif @@ -365,9 +365,6 @@ namespace Js intConstPropsOnGlobalObject = Anew(GeneralAllocator(), PropIdSetForConstProp, GeneralAllocator()); intConstPropsOnGlobalUserObject = Anew(GeneralAllocator(), PropIdSetForConstProp, GeneralAllocator()); -#if ENABLE_NATIVE_CODEGEN - m_domFastPathHelperMap = HeapNew(JITDOMFastPathHelperMap, &HeapAllocator::Instance, 17); -#endif #ifdef ENABLE_SCRIPT_DEBUGGING this->debugContext = HeapNew(DebugContext, this); #endif @@ -424,13 +421,6 @@ namespace Js // Take etw rundown lock on this thread context. We are going to change/destroy this scriptContext. AutoCriticalSection autocs(GetThreadContext()->GetFunctionBodyLock()); -#if ENABLE_NATIVE_CODEGEN - if (m_domFastPathHelperMap != nullptr) - { - HeapDelete(m_domFastPathHelperMap); - } -#endif - // TODO: Can we move this on Close()? ClearHostScriptContext(); @@ -1029,7 +1019,7 @@ namespace Js Output::Print(_u(" Object %8d %8d\n"), typeCount[TypeIds_Object], instanceCount[TypeIds_Object]); Output::Print(_u(" Function %8d %8d\n"), typeCount[TypeIds_Function], instanceCount[TypeIds_Function]); Output::Print(_u(" Array %8d %8d\n"), typeCount[TypeIds_Array], instanceCount[TypeIds_Array]); - Output::Print(_u(" Date %8d %8d\n"), typeCount[TypeIds_Date], instanceCount[TypeIds_Date] + instanceCount[TypeIds_WinRTDate]); + Output::Print(_u(" Date %8d %8d\n"), typeCount[TypeIds_Date], instanceCount[TypeIds_Date]); Output::Print(_u(" Symbol %8d %8d\n"), typeCount[TypeIds_Symbol], instanceCount[TypeIds_Symbol]); Output::Print(_u(" RegEx %8d %8d\n"), typeCount[TypeIds_RegEx], instanceCount[TypeIds_RegEx]); Output::Print(_u(" Error %8d %8d\n"), typeCount[TypeIds_Error], instanceCount[TypeIds_Error]); @@ -1052,7 +1042,6 @@ namespace Js Output::Print(_u(" DataView %8d %8d\n"), typeCount[TypeIds_DataView], instanceCount[TypeIds_DataView]); Output::Print(_u(" ModuleRoot %8d %8d\n"), typeCount[TypeIds_ModuleRoot], instanceCount[TypeIds_ModuleRoot]); Output::Print(_u(" HostObject %8d %8d\n"), typeCount[TypeIds_HostObject], instanceCount[TypeIds_HostObject]); - Output::Print(_u(" VariantDate %8d %8d\n"), typeCount[TypeIds_VariantDate], instanceCount[TypeIds_VariantDate]); Output::Print(_u(" HostDispatch %8d %8d\n"), typeCount[TypeIds_HostDispatch], instanceCount[TypeIds_HostDispatch]); Output::Print(_u(" Arguments %8d %8d\n"), typeCount[TypeIds_Arguments], instanceCount[TypeIds_Arguments]); Output::Print(_u(" ActivationObject %8d %8d\n"), typeCount[TypeIds_ActivationObject], instanceCount[TypeIds_ActivationObject]); @@ -1065,6 +1054,7 @@ namespace Js Output::Print(_u(" SetIterator %8d %8d\n"), typeCount[TypeIds_SetIterator], instanceCount[TypeIds_SetIterator]); Output::Print(_u(" StringIterator %8d %8d\n"), typeCount[TypeIds_StringIterator], instanceCount[TypeIds_StringIterator]); Output::Print(_u(" Generator %8d %8d\n"), typeCount[TypeIds_Generator], instanceCount[TypeIds_Generator]); + Output::Print(_u(" AsyncGenerator %8d %8d\n"), typeCount[TypeIds_AsyncGenerator], instanceCount[TypeIds_AsyncGenerator]); #if !DBG Output::Print(_u(" ** Instance statistics only available on debug builds...\n")); #endif @@ -1994,23 +1984,20 @@ namespace Js else { // We do not own the memory passed into DefaultLoadScriptUtf8. We need to save it so we copy the memory. - if (*ppSourceInfo == nullptr) - { #ifndef NTBUILD - if (loadScriptFlag & LoadScriptFlag_ExternalArrayBuffer) - { - *ppSourceInfo = Utf8SourceInfo::NewWithNoCopy(this, - script, (int)length, cb, pSrcInfo, isLibraryCode, - scriptSource); - } - else + if (loadScriptFlag & LoadScriptFlag_ExternalArrayBuffer) + { + *ppSourceInfo = Utf8SourceInfo::NewWithNoCopy(this, + script, (int)length, cb, pSrcInfo, isLibraryCode, + scriptSource); + } + else #endif - { - // the 'length' here is not correct - we will get the length from the parser - however parser hasn't done yet. - // Once the parser is done we will update the utf8sourceinfo's lenght correctly with parser's - *ppSourceInfo = Utf8SourceInfo::New(this, script, - (int)length, cb, pSrcInfo, isLibraryCode); - } + { + // The 'length' here is not correct (we will get the length from the parser) however parser isn't done yet. + // Once the parser is done we will update the utf8sourceinfo's length correctly + *ppSourceInfo = Utf8SourceInfo::New(this, script, + (int)length, cb, pSrcInfo, isLibraryCode); } } } @@ -2034,6 +2021,11 @@ namespace Js } } + if ((loadScriptFlag & LoadScriptFlag_StrictMode) == LoadScriptFlag_StrictMode) + { + grfscr |= fscrUseStrictMode; + } + if ((loadScriptFlag & LoadScriptFlag_disableAsmJs) == LoadScriptFlag_disableAsmJs) { grfscr |= fscrNoAsmJs; @@ -2182,28 +2174,72 @@ namespace Js } // The block includes a 4-byte CRC before the parser state cache. - ULONG byteCount = blockByteCount - sizeof(uint); + ULONG compressedBufferByteCount = blockByteCount - sizeof(uint); // The contract for this bytecode buffer is that it is available as long as we have this ScriptContext. // We will use this buffer as the string table needed to back the deferred stubs as well as bytecode // for defer deserialized functions. // TODO: This, better. ArenaAllocator* alloc = this->SourceCodeAllocator(); - byte* buffer = AnewArray(alloc, byte, byteCount); + size_t decompressedBufferByteCount = 0; + byte* decompressedBuffer = nullptr; - if (buffer == nullptr) + if (CONFIG_FLAG(CompressParserStateCache)) { - return E_FAIL; - } + BEGIN_TEMP_ALLOCATOR(tempAllocator, this, _u("ByteCodeSerializer")); + { + byte* compressedBuffer = AnewNoThrowArray(tempAllocator, byte, compressedBufferByteCount); + if (compressedBuffer == nullptr) + { + hr = E_FAIL; + goto ExitTempAllocator; + } - hr = pDataCache->ReadArray(buffer, byteCount); - if (FAILED(hr)) + hr = pDataCache->ReadArray(compressedBuffer, compressedBufferByteCount); + if (FAILED(hr)) + { + OUTPUT_TRACE_DEBUGONLY(Js::DataCachePhase, _u(" Failed to read compressed parser state cache (wanted %lu bytes) (hr = 0x%08lx) for '%s'\n"), compressedBufferByteCount, hr, url); + goto ExitTempAllocator; + } + + OUTPUT_TRACE_DEBUGONLY(Js::DataCachePhase, _u(" Successfully read compressed parser state cache (%lu bytes) for '%s'\n"), compressedBufferByteCount, url); + + hr = Js::CompressionUtilities::DecompressBuffer(alloc, compressedBuffer, compressedBufferByteCount, &decompressedBuffer, &decompressedBufferByteCount); + if (FAILED(hr)) + { + OUTPUT_TRACE_DEBUGONLY(Js::DataCachePhase, _u(" Failed to decompress parser state cache (hr = 0x%08lx) for '%s'\n"), hr, url); + goto ExitTempAllocator; + } + + OUTPUT_TRACE_DEBUGONLY(Js::DataCachePhase, _u(" Decompressed parser state cache %lu -> %lu bytes (%.2f%%) to stream for '%s'\n"), compressedBufferByteCount, decompressedBufferByteCount, (double)compressedBufferByteCount / decompressedBufferByteCount * 100.0, url); + } +ExitTempAllocator: + END_TEMP_ALLOCATOR(tempAllocator, this); + + if (FAILED(hr)) + { + goto Error; + } + } + else { - OUTPUT_TRACE_DEBUGONLY(Js::DataCachePhase, _u(" Failed to read parser state cache (wanted %lu bytes, got %lu bytes) (hr = 0x%08lx) for '%s'\n"), byteCount, pDataCache->BytesWrittenInBlock(), hr, url); - return hr; + // We didn't compress the parser state cache so don't decompress it, just read the buffer. + decompressedBuffer = AnewNoThrowArray(alloc, byte, compressedBufferByteCount); + decompressedBufferByteCount = compressedBufferByteCount; + if (decompressedBuffer == nullptr) + { + return E_FAIL; + } + + hr = pDataCache->ReadArray(decompressedBuffer, compressedBufferByteCount); + if (FAILED(hr)) + { + OUTPUT_TRACE_DEBUGONLY(Js::DataCachePhase, _u(" Failed to read parser state cache (wanted %lu bytes) (hr = 0x%08lx) for '%s'\n"), decompressedBufferByteCount, hr, url); + goto Error; + } } - OUTPUT_TRACE_DEBUGONLY(Js::DataCachePhase, _u(" Successfully read parser state cache (%lu bytes) for '%s'\n"), byteCount, url); + OUTPUT_TRACE_DEBUGONLY(Js::DataCachePhase, _u(" Successfully read parser state cache (%lu bytes) for '%s'\n"), decompressedBufferByteCount, url); if (utf8SourceInfo != nullptr) { @@ -2221,21 +2257,24 @@ namespace Js OUTPUT_TRACE_DEBUGONLY(Js::DataCachePhase, _u(" Trying to deserialize parser state cache for '%s'\n"), url); FunctionBody* functionBody = nullptr; - hr = Js::ByteCodeSerializer::DeserializeFromBuffer(this, grfscr, (ISourceHolder*) nullptr, srcInfo, buffer, nativeModule, &functionBody, sourceIndex); + hr = Js::ByteCodeSerializer::DeserializeFromBuffer(this, grfscr, (ISourceHolder*) nullptr, srcInfo, decompressedBuffer, nativeModule, &functionBody, sourceIndex); if (FAILED(hr)) { - AdeleteArray(alloc, byteCount, buffer); - OUTPUT_TRACE_DEBUGONLY(Js::DataCachePhase, _u(" Failed to deserialize parser state cache (hr = 0x%08lx) for '%s'\n"), hr, url); - return hr; + goto Error; } OUTPUT_TRACE_DEBUGONLY(Js::DataCachePhase, _u(" Successfully deserialized parser state cache for '%s'\n"), url); *func = functionBody->GetParseableFunctionInfo(); - *parserStateCacheBuffer = buffer; - *parserStateCacheByteCount = byteCount; + *parserStateCacheBuffer = decompressedBuffer; + *parserStateCacheByteCount = (DWORD)decompressedBufferByteCount; +Error: + if (FAILED(hr) && decompressedBuffer != nullptr) + { + AdeleteArray(alloc, decompressedBufferByteCount, decompressedBuffer); + } #endif return hr; @@ -2293,29 +2332,61 @@ namespace Js OUTPUT_TRACE_DEBUGONLY(Js::DataCachePhase, _u(" Trying to write parser state cache (%lu bytes) to stream for '%s'\n"), serializeParserStateCacheSize, url); - hr = pDataCache->StartBlock(Js::SimpleDataCacheWrapper::BlockType_ParserState, serializeParserStateCacheSize + sizeof(uint)); - - if (FAILED(hr)) + BEGIN_TEMP_ALLOCATOR(tempAllocator, this, _u("ByteCodeSerializer")); { - OUTPUT_TRACE_DEBUGONLY(Js::DataCachePhase, _u(" Failed to write a block to the parser state cache data stream (hr = 0x%08lx) for '%s'\n"), hr, url); - return hr; - } + byte* compressedBuffer = nullptr; + size_t compressedSize = 0; - hr = pDataCache->Write(sourceCRC); + if (CONFIG_FLAG(CompressParserStateCache)) + { + hr = Js::CompressionUtilities::CompressBuffer(tempAllocator, serializeParserStateCacheBuffer, serializeParserStateCacheSize, &compressedBuffer, &compressedSize); - OUTPUT_TRACE_DEBUGONLY(Js::DataCachePhase, _u(" Computed CRC value = 0x%08lx for '%s'\n"), sourceCRC, url); + if (FAILED(hr)) + { + OUTPUT_TRACE_DEBUGONLY(Js::DataCachePhase, _u(" Failed to compress parser state cache (hr = 0x%08lx) for '%s'\n"), hr, url); + goto ExitTempAllocator; + } - if (FAILED(hr)) - { - OUTPUT_TRACE_DEBUGONLY(Js::DataCachePhase, _u(" Failed to write CRC data to the data stream (hr = 0x%08lx) for '%s'\n"), hr, url); - return hr; - } + OUTPUT_TRACE_DEBUGONLY(Js::DataCachePhase, _u(" Compressed parser state cache %lu -> %lu bytes (%.2f%%) to stream for '%s'\n"), serializeParserStateCacheSize, compressedSize, (double)compressedSize / serializeParserStateCacheSize * 100.0, url); + } + else + { + // Don't compress, just pass through the parser state cache buffer + compressedBuffer = serializeParserStateCacheBuffer; + compressedSize = serializeParserStateCacheSize; + } + + hr = pDataCache->StartBlock(Js::SimpleDataCacheWrapper::BlockType_ParserState, (ULONG)compressedSize + sizeof(uint)); + + if (FAILED(hr)) + { + OUTPUT_TRACE_DEBUGONLY(Js::DataCachePhase, _u(" Failed to write a block to the parser state cache data stream (hr = 0x%08lx) for '%s'\n"), hr, url); + goto ExitTempAllocator; + } + + OUTPUT_TRACE_DEBUGONLY(Js::DataCachePhase, _u(" Computed CRC value = 0x%08lx for '%s'\n"), sourceCRC, url); + + hr = pDataCache->Write(sourceCRC); + + if (FAILED(hr)) + { + OUTPUT_TRACE_DEBUGONLY(Js::DataCachePhase, _u(" Failed to write CRC data to the data stream (hr = 0x%08lx) for '%s'\n"), hr, url); + goto ExitTempAllocator; + } - hr = pDataCache->WriteArray(serializeParserStateCacheBuffer, serializeParserStateCacheSize); + hr = pDataCache->WriteArray(compressedBuffer, (ULONG)compressedSize); + + if (FAILED(hr)) + { + OUTPUT_TRACE_DEBUGONLY(Js::DataCachePhase, _u(" Failed to write compressed parser state cache (hr = 0x%08lx) for '%s'\n"), hr, url); + goto ExitTempAllocator; + } + } +ExitTempAllocator: + END_TEMP_ALLOCATOR(tempAllocator, this); if (FAILED(hr)) { - OUTPUT_TRACE_DEBUGONLY(Js::DataCachePhase, _u(" Failed to write parser state cache (hr = 0x%08lx) for '%s'\n"), hr, url); return hr; } @@ -2388,7 +2459,7 @@ namespace Js hr = ps.ParseCesu8Source(&parseTree, pszSrc, cbLength, grfscr, pse, &sourceContextInfo->nextLocalFunctionId, sourceContextInfo); } - + utf8SourceInfo->SetParseFlags(grfscr); srcLength = ps.GetSourceLength(); @@ -2476,7 +2547,7 @@ namespace Js SRCINFO const * pSrcInfo, CompileScriptException * pse, Utf8SourceInfo** ppSourceInfo, const char16 *rootDisplayName, LoadScriptFlag loadScriptFlag, Js::Var scriptSource) { - uint sourceIndex; + uint sourceIndex = Constants::InvalidSourceIndex; JavascriptFunction * pFunction = nullptr; ParseNodeProg * parseTree = ParseScript(parser, script, cb, pSrcInfo, @@ -2493,7 +2564,11 @@ namespace Js Assert((loadScriptFlag & LoadScriptFlag_disableAsmJs) != LoadScriptFlag_disableAsmJs); pse->Free(); - + if (sourceIndex != Constants::InvalidSourceIndex) + { + // If we registered source, we should remove it or we will register another source info + this->RemoveSource(sourceIndex); + } loadScriptFlag = (LoadScriptFlag)(loadScriptFlag | LoadScriptFlag_disableAsmJs); return LoadScript(script, cb, pSrcInfo, pse, ppSourceInfo, rootDisplayName, loadScriptFlag, scriptSource); @@ -2732,6 +2807,12 @@ namespace Js return info; } + void ScriptContext::RemoveSource(uint index) + { + Assert(this->sourceList->IsItemValid(index)); // This assert should be a subset of info != null- if info was null, in the last collect, we'd have invalidated the item + this->sourceList->RemoveAt(index); + } + bool ScriptContext::IsItemValidInSourceList(int index) { return (index < this->sourceList->Count()) && this->sourceList->IsItemValid(index); @@ -3763,21 +3844,6 @@ namespace Js } autoRestore(this->GetThreadContext()); - if (!Js::Configuration::Global.EnableJitInDebugMode()) - { - if (attach) - { - // Now force nonative, so the job will not be put in jit queue. - ForceNoNative(); - } - else - { - // Take the runtime out of interpreted mode so the JIT - // queue can be exercised. - this->ForceNative(); - } - } - // Invalidate all the caches. this->threadContext->InvalidateAllProtoInlineCaches(); this->threadContext->InvalidateAllStoreFieldInlineCaches(); @@ -4005,7 +4071,7 @@ namespace Js scriptFunction->GetFunctionBody()->GetAsmJsFunctionInfo() != nullptr && scriptFunction->GetFunctionBody()->GetAsmJsFunctionInfo()->GetModuleFunctionBody() != nullptr) { - AsmJsScriptFunction* asmFunc = AsmJsScriptFunction::FromVar(scriptFunction); + AsmJsScriptFunction* asmFunc = VarTo(scriptFunction); void* env = (void*)asmFunc->GetModuleEnvironment(); SList * funcList = nullptr; if (asmJsEnvironmentMap->TryGetValue(env, &funcList)) @@ -4093,9 +4159,9 @@ namespace Js pFunction->ResetConstructorCacheToDefault(); } - if (ScriptFunctionWithInlineCache::Is(pFunction)) + if (VarIs(pFunction)) { - ScriptFunctionWithInlineCache::FromVar(pFunction)->ClearInlineCacheOnFunctionObject(); + VarTo(pFunction)->ClearInlineCacheOnFunctionObject(); } // We should have force parsed the function, and have a function body @@ -4115,7 +4181,7 @@ namespace Js #endif #ifdef ASMJS_PLAT - ScriptFunction * scriptFunction = ScriptFunction::FromVar(pFunction); + ScriptFunction * scriptFunction = VarTo(pFunction); scriptContext->TransitionEnvironmentForDebugger(scriptFunction); #endif } @@ -4179,7 +4245,7 @@ namespace Js { OUTPUT_TRACE(Js::ScriptProfilerPhase, _u("\t\tJs::ScriptContext::GetProfileModeThunk : 0x%08X\n"), (DWORD_PTR)Js::ScriptContext::GetProfileModeThunk(entryPoint)); - ScriptFunction * scriptFunction = ScriptFunction::FromVar(pFunction); + ScriptFunction * scriptFunction = VarTo(pFunction); scriptFunction->ChangeEntryPoint(proxy->GetDefaultEntryPointInfo(), Js::ScriptContext::GetProfileModeThunk(entryPoint)); #if ENABLE_NATIVE_CODEGEN && defined(ENABLE_SCRIPT_PROFILING) @@ -4412,11 +4478,6 @@ namespace Js { forceNoNative = this->IsInterpreted(); } - else if (!Js::Configuration::Global.EnableJitInDebugMode()) - { - forceNoNative = true; - this->ForceNoNative(); - } return forceNoNative; } @@ -4450,8 +4511,8 @@ namespace Js #if defined(ENABLE_SCRIPT_DEBUGGING) || defined(ENABLE_SCRIPT_PROFILING) RUNTIME_ARGUMENTS(args, callInfo); - Assert(!WasmScriptFunction::Is(callable)); - JavascriptFunction* function = JavascriptFunction::FromVar(callable); + Assert(!VarIs(callable)); + JavascriptFunction* function = VarTo(callable); ScriptContext* scriptContext = function->GetScriptContext(); // We can come here when profiling is not on @@ -4510,7 +4571,7 @@ namespace Js else { // it is string because user had called in toString extract name from it - Assert(JavascriptString::Is(sourceString)); + Assert(VarIs(sourceString)); const char16 *pwszToString = ((JavascriptString *)sourceString)->GetSz(); const char16 *pwszNameStart = wcsstr(pwszToString, _u(" ")); const char16 *pwszNameEnd = wcsstr(pwszToString, _u("(")); @@ -4565,6 +4626,10 @@ namespace Js { origEntryPoint = Js::JavascriptFunction::NewAsyncFunctionInstanceRestrictedMode; } + else if (origEntryPoint == Js::JavascriptFunction::NewAsyncGeneratorFunctionInstance) + { + origEntryPoint = Js::JavascriptFunction::NewAsyncGeneratorFunctionInstanceRestrictedMode; + } } __TRY_FINALLY_BEGIN // SEH is not guaranteed, see the implementation @@ -4840,7 +4905,7 @@ namespace Js if (cachedFunctionId != functionPropertyId) { // This is the scenario where we could be using same function for multiple builtin functions - // e.g. Error.toString, WinRTError.toString etc. + // e.g. Error.toString etc. // We would ignore these extra entrypoints because while profiling, identifying which object's toString is too costly for its worth return S_OK; } @@ -4964,7 +5029,7 @@ namespace Js void ScriptContext::RegisterIsInstInlineCache(Js::IsInstInlineCache * cache, Js::Var function) { - Assert(JavascriptFunction::FromVar(function)->GetScriptContext() == this); + Assert(VarTo(function)->GetScriptContext() == this); hasIsInstInlineCache = true; #if DBG this->isInstInlineCacheAllocator.Unlock(); @@ -5279,6 +5344,8 @@ ScriptContext::GetJitFuncRangeCache() contextData.charStringCacheAddr = (intptr_t)&GetLibrary()->GetCharStringCache(); contextData.libraryAddr = (intptr_t)GetLibrary(); contextData.globalObjectAddr = (intptr_t)GetLibrary()->GetGlobalObject(); + contextData.objectPrototypeAddr = (intptr_t)GetLibrary()->GetObjectPrototype(); + contextData.functionPrototypeAddr = (intptr_t)GetLibrary()->GetFunctionPrototype(); contextData.builtinFunctionsBaseAddr = (intptr_t)GetLibrary()->GetBuiltinFunctions(); contextData.sideEffectsAddr = optimizationOverrides.GetAddressOfSideEffects(); contextData.arraySetElementFastPathVtableAddr = (intptr_t)optimizationOverrides.GetAddressOfArraySetElementFastPathVtable(); @@ -5322,11 +5389,42 @@ ScriptContext::GetJitFuncRangeCache() allowPrereserveAlloc = false; #endif // The EnsureJITThreadContext() call could fail if the JIT Server process has died. In such cases, we should not try to do anything further in the client process. - if (this->GetThreadContext()->EnsureJITThreadContext(allowPrereserveAlloc)) + if (!this->GetThreadContext()->EnsureJITThreadContext(allowPrereserveAlloc)) + { + return; + } + + HRESULT hr = JITManager::GetJITManager()->InitializeScriptContext(&contextData, this->GetThreadContext()->GetRemoteThreadContextAddr(), &m_remoteScriptContextAddr); + JITManager::HandleServerCallResult(hr, RemoteCallType::StateUpdate); + + if (!m_remoteScriptContextAddr) { - HRESULT hr = JITManager::GetJITManager()->InitializeScriptContext(&contextData, this->GetThreadContext()->GetRemoteThreadContextAddr(), &m_remoteScriptContextAddr); + return; + } + + // Initialize mutable ScriptContext state if needed + if (this->IsPRNGSeeded()) + { + hr = JITManager::GetJITManager()->SetIsPRNGSeeded(m_remoteScriptContextAddr, TRUE); JITManager::HandleServerCallResult(hr, RemoteCallType::StateUpdate); } + + ModuleRecordList* moduleRecordList = this->GetLibrary()->GetModuleRecordList(); + if (moduleRecordList) + { + moduleRecordList->Map([this](int start, SourceTextModuleRecord* moduleRecord) { + intptr_t exportSlotsAddr = (intptr_t)moduleRecord->GetLocalExportSlots(); + // only add modules which have initialized localExportSlots + if (exportSlotsAddr) + { + HRESULT hr = JITManager::GetJITManager()->AddModuleRecordInfo( + m_remoteScriptContextAddr, + moduleRecord->GetModuleId(), + exportSlotsAddr); + JITManager::HandleServerCallResult(hr, RemoteCallType::StateUpdate); + } + }); + } } #endif @@ -5460,6 +5558,16 @@ ScriptContext::GetJitFuncRangeCache() return (intptr_t)GetLibrary()->GetGlobalObject()->ToThis(); } + intptr_t ScriptContext::GetObjectPrototypeAddr() const + { + return (intptr_t)GetLibrary()->GetObjectPrototype(); + } + + intptr_t ScriptContext::GetFunctionPrototypeAddr() const + { + return (intptr_t)GetLibrary()->GetFunctionPrototype(); + } + intptr_t ScriptContext::GetNumberAllocatorAddr() const { return (intptr_t)&numberAllocator; @@ -5512,24 +5620,6 @@ ScriptContext::GetJitFuncRangeCache() return (intptr_t)this; } -#if ENABLE_NATIVE_CODEGEN - void ScriptContext::AddToDOMFastPathHelperMap(intptr_t funcInfoAddr, IR::JnHelperMethod helper) - { - m_domFastPathHelperMap->Add(funcInfoAddr, helper); - } - - IR::JnHelperMethod ScriptContext::GetDOMFastPathHelper(intptr_t funcInfoAddr) - { - IR::JnHelperMethod helper = IR::HelperInvalid; - - m_domFastPathHelperMap->LockResize(); - m_domFastPathHelperMap->TryGetValue(funcInfoAddr, &helper); - m_domFastPathHelperMap->UnlockResize(); - - return helper; - } -#endif - intptr_t ScriptContext::GetVTableAddress(VTableValue vtableType) const { Assert(vtableType < VTableValue::Count); diff --git a/lib/Runtime/Base/ScriptContext.h b/lib/Runtime/Base/ScriptContext.h index eb66c74e96f..30c345c8ec2 100644 --- a/lib/Runtime/Base/ScriptContext.h +++ b/lib/Runtime/Base/ScriptContext.h @@ -124,7 +124,8 @@ enum LoadScriptFlag LoadScriptFlag_Utf8Source = 0x40, // input buffer is utf8 encoded. LoadScriptFlag_LibraryCode = 0x80, // for debugger, indicating 'not my code' LoadScriptFlag_ExternalArrayBuffer = 0x100, // for ExternalArrayBuffer - LoadScriptFlag_CreateParserState = 0x200 // create the parser state cache while parsing. + LoadScriptFlag_CreateParserState = 0x200, // create the parser state cache while parsing. + LoadScriptFlag_StrictMode = 0x400 // parse using strict mode semantics }; enum class ScriptContextPrivilegeLevel @@ -175,14 +176,15 @@ class HostScriptContext virtual HRESULT GetExternalJitData(ExternalJitData id, void *data) = 0; virtual HRESULT SetDispatchInvoke(Js::JavascriptMethod dispatchInvoke) = 0; - virtual HRESULT ArrayBufferFromExternalObject(__in Js::RecyclableObject *obj, - __out Js::ArrayBuffer **ppArrayBuffer) = 0; - virtual Js::JavascriptError* CreateWinRTError(IErrorInfo* perrinfo, Js::RestrictedErrorStrings * proerrstr) = 0; virtual HRESULT EnqueuePromiseTask(Js::Var varTask) = 0; virtual HRESULT FetchImportedModule(Js::ModuleRecordBase* referencingModule, LPCOLESTR specifier, Js::ModuleRecordBase** dependentModuleRecord) = 0; virtual HRESULT FetchImportedModuleFromScript(DWORD_PTR dwReferencingSourceContext, LPCOLESTR specifier, Js::ModuleRecordBase** dependentModuleRecord) = 0; virtual HRESULT NotifyHostAboutModuleReady(Js::ModuleRecordBase* referencingModule, Js::Var exceptionVar) = 0; + virtual HRESULT InitializeImportMeta(Js::ModuleRecordBase* referencingModule, Js::Var importMetaObject) = 0; + virtual bool ReportModuleCompletion(Js::ModuleRecordBase* module, Js::Var exception) = 0; + + virtual HRESULT ThrowIfFailed(HRESULT hr) = 0; Js::ScriptContext* GetScriptContext() { return scriptContext; } @@ -197,6 +199,19 @@ class HostScriptContext Js::ScriptContext* scriptContext; }; +class HostStream +{ +public: + virtual byte * ExtendBuffer(byte *oldBuffer, size_t newSize, size_t *allocatedSize) = 0; + virtual bool WriteHostObject(void* data) = 0; +}; + +class HostReadStream +{ +public: + virtual Js::Var ReadHostObject() = 0; +}; + #if ENABLE_TTD typedef void (CALLBACK *JsTTDOnScriptLoadCallback)(FinalizableObject* hostContext, Js::FunctionBody* body, Js::Utf8SourceInfo* utf8SourceInfo, CompileScriptException* compileException, bool notify); typedef uint32 (CALLBACK *JsTTDOnBPRegisterCallback)(void* hostRuntime, int64 bpID, Js::ScriptContext* scriptContext, Js::Utf8SourceInfo* utf8SourceInfo, uint32 line, uint32 column, BOOL* isNewBP); @@ -257,33 +272,10 @@ namespace Js }; #pragma pack(pop) -#ifdef ENABLE_PROJECTION - class ProjectionConfiguration - { - public: - ProjectionConfiguration() : targetVersion(0) - { - } - - DWORD GetTargetVersion() const { return this->targetVersion; } - void SetTargetVersion(DWORD version) { this->targetVersion = version; } - - bool IsTargetWindows8() const { return this->targetVersion == NTDDI_WIN8; } - bool IsTargetWindowsBlueOrLater() const { return this->targetVersion >= NTDDI_WINBLUE; } - - private: - DWORD targetVersion; - }; -#endif // ENABLE_PROJECTION - class ScriptConfiguration { public: ScriptConfiguration(const ThreadConfiguration * const threadConfig, const bool isOptimizedForManyInstances) : -#ifdef ENABLE_PROJECTION - HostType(Configuration::Global.flags.HostType), - WinRTConstructorAllowed(Configuration::Global.flags.WinRTConstructorAllowed), -#endif NoNative(Configuration::Global.flags.NoNative), NoDynamicThunks(false), isOptimizedForManyInstances(isOptimizedForManyInstances), @@ -291,16 +283,6 @@ namespace Js { } - // Version - bool SupportsES3() const { return true; } - bool SupportsES3Extensions() const { -#ifdef ENABLE_PROJECTION - return HostType != HostTypeApplication; -#else - return true; -#endif - } - #define FORWARD_THREAD_CONFIG(flag) inline bool flag() const { return threadConfig->flag(); } #define FLAG(threadFlag, globalFlag) FORWARD_THREAD_CONFIG(threadFlag) #define FLAG_RELEASE(threadFlag, globalFlag) FORWARD_THREAD_CONFIG(threadFlag) @@ -323,48 +305,15 @@ namespace Js { this->NoNative = other.NoNative; this->fCanOptimizeGlobalLookup = other.fCanOptimizeGlobalLookup; -#ifdef ENABLE_PROJECTION - this->HostType = other.HostType; - this->WinRTConstructorAllowed = other.WinRTConstructorAllowed; - this->projectionConfiguration = other.projectionConfiguration; -#endif - } - -#ifdef ENABLE_PROJECTION - Number GetHostType() const // Returns one of enum HostType values (see ConfigFlagsTable.h). - { - AssertMsg(this->HostType >= HostTypeMin && this->HostType <= HostTypeMax, "HostType value is out of valid range."); - return this->HostType; } - ProjectionConfiguration const * GetProjectionConfig() const - { - return &projectionConfiguration; - } - void SetHostType(int32 hostType) { this->HostType = hostType; } - void SetWinRTConstructorAllowed(bool allowed) { this->WinRTConstructorAllowed = allowed; } - void SetProjectionTargetVersion(DWORD version) - { - projectionConfiguration.SetTargetVersion(version); - } - bool IsWinRTEnabled() const { return (GetHostType() == Js::HostTypeApplication) || (GetHostType() == Js::HostTypeWebview); } - - bool IsWinRTConstructorAllowed() const { return (GetHostType() != Js::HostTypeWebview) || this->WinRTConstructorAllowed; } -#endif private: - // Per script configurations bool NoNative; bool NoDynamicThunks; BOOL fCanOptimizeGlobalLookup; const bool isOptimizedForManyInstances; const ThreadConfiguration * const threadConfig; - -#ifdef ENABLE_PROJECTION - Number HostType; // One of enum HostType values (see ConfigFlagsTable.h). - bool WinRTConstructorAllowed; // whether allow constructor in webview host type. Also note that this is not a security feature. - ProjectionConfiguration projectionConfiguration; -#endif }; struct ScriptEntryExitRecord @@ -841,12 +790,12 @@ namespace Js DateTime::Utility dateTimeUtility; public: - inline const WCHAR *const GetStandardName(size_t *nameLength, DateTime::YMD *ymd = NULL) + inline const WCHAR *GetStandardName(size_t *nameLength, DateTime::YMD *ymd = NULL) { return dateTimeUtility.GetStandardName(nameLength, ymd); } - inline const WCHAR *const GetDaylightName(size_t *nameLength, DateTime::YMD *ymd = NULL) + inline const WCHAR *GetDaylightName(size_t *nameLength, DateTime::YMD *ymd = NULL) { return dateTimeUtility.GetDaylightName(nameLength, ymd); } @@ -1232,11 +1181,6 @@ namespace Js void Initialize(); bool Close(bool inDestructor); void MarkForClose(); -#ifdef ENABLE_PROJECTION - void SetHostType(int32 hostType) { config.SetHostType(hostType); } - void SetWinRTConstructorAllowed(bool allowed) { config.SetWinRTConstructorAllowed(allowed); } - void SetProjectionTargetVersion(DWORD version) { config.SetProjectionTargetVersion(version); } -#endif void SetCanOptimizeGlobalLookupFlag(BOOL f){ config.SetCanOptimizeGlobalLookupFlag(f);} BOOL CanOptimizeGlobalLookup(){ return config.CanOptimizeGlobalLookup();} @@ -1450,6 +1394,7 @@ namespace Js uint SaveSourceNoCopy(Utf8SourceInfo* sourceInfo, int cchLength, bool isCesu8); Utf8SourceInfo* GetSource(uint sourceIndex); + void RemoveSource(uint sourceIndex); uint SourceCount() const { return (uint)sourceList->Count(); } void CleanSourceList() { CleanSourceListInternal(false); } @@ -1830,6 +1775,8 @@ namespace Js virtual intptr_t GetLibraryAddr() const override; virtual intptr_t GetGlobalObjectAddr() const override; virtual intptr_t GetGlobalObjectThisAddr() const override; + virtual intptr_t GetObjectPrototypeAddr() const; + virtual intptr_t GetFunctionPrototypeAddr() const; virtual intptr_t GetNumberAllocatorAddr() const override; virtual intptr_t GetRecyclerAddr() const override; virtual bool GetRecyclerAllowNativeCodeBumpAllocation() const override; @@ -1844,12 +1791,6 @@ namespace Js #endif virtual intptr_t GetChakraLibAddr() const override; - -#if ENABLE_NATIVE_CODEGEN - virtual void AddToDOMFastPathHelperMap(intptr_t funcInfoAddr, IR::JnHelperMethod helper) override; - virtual IR::JnHelperMethod GetDOMFastPathHelper(intptr_t funcInfoAddr) override; -#endif - virtual intptr_t GetAddr() const override; virtual intptr_t GetVTableAddress(VTableValue vtableType) const override; @@ -1870,10 +1811,6 @@ namespace Js private: BuiltInLibraryFunctionMap* builtInLibraryFunctions; -#if ENABLE_NATIVE_CODEGEN - JITDOMFastPathHelperMap * m_domFastPathHelperMap; -#endif - #ifdef RECYCLER_PERF_COUNTERS size_t bindReferenceCount; #endif diff --git a/lib/Runtime/Base/ScriptContextInfo.h b/lib/Runtime/Base/ScriptContextInfo.h index 8a160b71047..9f6488a3f44 100644 --- a/lib/Runtime/Base/ScriptContextInfo.h +++ b/lib/Runtime/Base/ScriptContextInfo.h @@ -33,6 +33,8 @@ class ScriptContextInfo virtual intptr_t GetLibraryAddr() const = 0; virtual intptr_t GetGlobalObjectAddr() const = 0; virtual intptr_t GetGlobalObjectThisAddr() const = 0; + virtual intptr_t GetObjectPrototypeAddr() const = 0; + virtual intptr_t GetFunctionPrototypeAddr() const = 0; virtual intptr_t GetNumberAllocatorAddr() const = 0; virtual intptr_t GetRecyclerAddr() const = 0; virtual bool GetRecyclerAllowNativeCodeBumpAllocation() const = 0; @@ -59,12 +61,4 @@ class ScriptContextInfo virtual intptr_t GetChakraLibAddr() const = 0; -#if ENABLE_NATIVE_CODEGEN - virtual void AddToDOMFastPathHelperMap(intptr_t funcInfoAddr, IR::JnHelperMethod helper) = 0; - virtual IR::JnHelperMethod GetDOMFastPathHelper(intptr_t funcInfoAddr) = 0; - - typedef JsUtil::BaseDictionary JITDOMFastPathHelperMap; -#endif - }; diff --git a/lib/Runtime/Base/ScriptContextProfiler.h b/lib/Runtime/Base/ScriptContextProfiler.h index 2860c11126b..9c4095e6246 100644 --- a/lib/Runtime/Base/ScriptContextProfiler.h +++ b/lib/Runtime/Base/ScriptContextProfiler.h @@ -1,17 +1,19 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #pragma once class ServerScriptContext; +class NativeCodeGenerator; namespace Js { class ScriptContextProfiler { #ifdef PROFILE_EXEC - friend class NativeCodeGenerator; - friend class ServerScriptContext; + friend class ::NativeCodeGenerator; + friend class ::ServerScriptContext; public: ScriptContextProfiler(); diff --git a/lib/Runtime/Base/ThreadBoundThreadContextManager.cpp b/lib/Runtime/Base/ThreadBoundThreadContextManager.cpp index 06600a2093b..d0df3175361 100644 --- a/lib/Runtime/Base/ThreadBoundThreadContextManager.cpp +++ b/lib/Runtime/Base/ThreadBoundThreadContextManager.cpp @@ -259,6 +259,13 @@ void ThreadContextManagerBase::ShutdownThreadContext( if (deleteThreadContext) { AllocationPolicyManager * policyManager = threadContext->IsThreadBound() ? threadContext->GetAllocationPolicyManager() : nullptr; +#if DBG + // An assert can fire in the Recycler dtor if this ThreadContext is destroyed while + // the process is detaching (i.e., all of the other threads have terminated). In this + // case, don't run that assert because all of the other threads were torn down early + // because of WFMO + threadContext->GetRecycler()->SetDisableConcurrentThreadExitedCheck(); +#endif HeapDelete(threadContext); if (policyManager) diff --git a/lib/Runtime/Base/ThreadConfigFlagsList.h b/lib/Runtime/Base/ThreadConfigFlagsList.h index 95ca547608b..3026920fc9f 100644 --- a/lib/Runtime/Base/ThreadConfigFlagsList.h +++ b/lib/Runtime/Base/ThreadConfigFlagsList.h @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- -// Copyright (C) Microsoft. All rights reserved. +// Copyright (C) Microsoft Corporation and contributors. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- @@ -8,12 +9,7 @@ FLAG(IsCollectGarbageEnabled, CollectGarbage) FLAG(IsErrorStackTraceEnabled, errorStackTrace) FLAG(IsES6UnicodeVerboseEnabled, ES6UnicodeVerbose) FLAG_RELEASE(IsIntlEnabled, Intl) -FLAG_RELEASE(IsES6SpeciesEnabled, ES6Species) -FLAG_RELEASE(IsES6ClassAndExtendsEnabled, ES6Classes) FLAG_RELEASE(IsES6DateParseFixEnabled, ES6DateParseFix) -FLAG_RELEASE(IsES6DefaultArgsEnabled, ES6DefaultArgs) -FLAG_RELEASE(IsES6DestructuringEnabled, ES6Destructuring) -FLAG_RELEASE(IsES6ForLoopSemanticsEnabled, ES6ForLoopSemantics) FLAG_RELEASE(IsES6FunctionNameFullEnabled, ES6FunctionNameFull) FLAG_RELEASE(IsES6GeneratorsEnabled, ES6Generators) FLAG_RELEASE(IsES7ExponentiationOperatorEnabled, ES7ExponentiationOperator) @@ -25,7 +21,6 @@ FLAG_RELEASE(IsES6ModuleEnabled, ES6Module) FLAG_RELEASE(IsES6ObjectExtensionsEnabled, ES6Object) FLAG_RELEASE(IsES6NumberExtensionsEnabled, ES6Number) FLAG_RELEASE(IsES6ObjectLiteralsEnabled, ES6ObjectLiterals) -FLAG_RELEASE(IsES6PromiseEnabled, ES6Promise) FLAG_RELEASE(IsES6ProxyEnabled, ES6Proxy) FLAG_RELEASE(IsES6RestEnabled, ES6Rest) FLAG_RELEASE(IsES6SpreadEnabled, ES6Spread) @@ -36,17 +31,28 @@ FLAG_RELEASE(IsES6ToPrimitiveEnabled, ES6ToPrimitive) FLAG_RELEASE(IsES6ToLengthEnabled, ES6ToLength) FLAG_RELEASE(IsES6ToStringTagEnabled, ES6ToStringTag) FLAG_RELEASE(IsES6UnicodeExtensionsEnabled, ES6Unicode) -FLAG_RELEASE(IsES6UnscopablesEnabled, ES6Unscopables) FLAG_RELEASE(IsES6RegExStickyEnabled, ES6RegExSticky) +FLAG_RELEASE(IsES2018RegExDotAllEnabled, ES2018RegExDotAll) FLAG_RELEASE(IsES6RegExPrototypePropertiesEnabled, ES6RegExPrototypeProperties) FLAG_RELEASE(IsES6RegExSymbolsEnabled, ES6RegExSymbols) -FLAG_RELEASE(IsES6HasInstanceEnabled, ES6HasInstance) FLAG_RELEASE(SkipSplitOnNoResult, SkipSplitOnNoResult) FLAG_RELEASE(IsES7AsyncAndAwaitEnabled, ES7AsyncAwait) FLAG_RELEASE(IsESObjectGetOwnPropertyDescriptorsEnabled, ESObjectGetOwnPropertyDescriptors) FLAG_RELEASE(IsESSharedArrayBufferEnabled, ESSharedArrayBuffer) FLAG_RELEASE(IsESDynamicImportEnabled, ESDynamicImport) -#ifdef ENABLE_PROJECTION -FLAG(AreWinRTDelegatesInterfaces, WinRTDelegateInterfaces) -FLAG_RELEASE(IsWinRTAdaptiveAppsEnabled, WinRTAdaptiveApps) +FLAG_RELEASE(IsESImportMetaEnabled, ESImportMeta) +FLAG_RELEASE(IsESBigIntEnabled, ESBigInt) +FLAG_RELEASE(IsESNumericSeparatorEnabled, ESNumericSeparator) +FLAG_RELEASE(IsESHashbangEnabled, ESHashbang) +FLAG_RELEASE(IsESNullishCoalescingOperatorEnabled, ESNullishCoalescingOperator) +FLAG_RELEASE(IsESExportNsAsEnabled, ESExportNsAs) +FLAG_RELEASE(IsESSymbolDescriptionEnabled, ESSymbolDescription) +FLAG_RELEASE(IsESPromiseAnyEnabled, ESPromiseAny) +FLAG_RELEASE(IsESArrayFindFromLastEnabled , ESArrayFindFromLast) +FLAG_RELEASE(IsESGlobalThisEnabled, ESGlobalThis) +FLAG_RELEASE(IsES2018AsyncIterationEnabled, ES2018AsyncIteration) +FLAG_RELEASE(IsESTopLevelAwaitEnabled, ESTopLevelAwait) + +#ifdef ENABLE_TEST_HOOKS +FLAG_RELEASE(Force32BitByteCode, Force32BitByteCode) #endif diff --git a/lib/Runtime/Base/ThreadContext.cpp b/lib/Runtime/Base/ThreadContext.cpp index fedb50b5b89..402daaba0ce 100644 --- a/lib/Runtime/Base/ThreadContext.cpp +++ b/lib/Runtime/Base/ThreadContext.cpp @@ -215,7 +215,6 @@ ThreadContext::ThreadContext(AllocationPolicyManager * allocationPolicyManager, , closedScriptContextCount(0) , visibilityState(VisibilityState::Undefined) { - pendingProjectionContextCloseList = JsUtil::List::New(GetThreadAlloc()); hostScriptContextStack = Anew(GetThreadAlloc(), JsUtil::Stack, GetThreadAlloc()); functionCount = 0; @@ -261,12 +260,6 @@ ThreadContext::ThreadContext(AllocationPolicyManager * allocationPolicyManager, pageAllocator.UpdateThreadContextHandle((ThreadContextId)this); #endif -#ifdef ENABLE_PROJECTION -#if DBG_DUMP - this->projectionMemoryInformation = nullptr; -#endif -#endif - #if DBG arrayMutationSeed = (Js::Configuration::Global.flags.ArrayMutationTestSeed != 0) ? (uint)Js::Configuration::Global.flags.ArrayMutationTestSeed : (uint)time(NULL); srand(arrayMutationSeed); @@ -554,10 +547,6 @@ ThreadContext::~ThreadContext() // Do not require all GC callbacks to be revoked, because Trident may not revoke if there // is a leak, and we don't want the leak to be masked by an assert -#ifdef ENABLE_PROJECTION - externalWeakReferenceCacheList.Clear(&HeapAllocator::Instance); -#endif - this->collectCallBackList.Clear(&HeapAllocator::Instance); this->protoInlineCacheByPropId.Reset(); this->storeFieldInlineCacheByPropId.Reset(); @@ -594,16 +583,6 @@ ThreadContext::~ThreadContext() this->dynamicProfileMutator->Delete(); } #endif - -#ifdef ENABLE_PROJECTION -#if DBG_DUMP - if (this->projectionMemoryInformation) - { - this->projectionMemoryInformation->Release(); - this->projectionMemoryInformation = nullptr; - } -#endif -#endif } void @@ -1005,7 +984,7 @@ ThreadContext::UncheckedAddPropertyId(JsUtil::CharacterBuffer const& prop { if(this->TTDContext->GetActiveScriptContext() != nullptr && this->TTDContext->GetActiveScriptContext()->ShouldPerformReplayAction()) { - //We reload all properties that occour in the trace so they only way we get here in TTD mode is: + //We reload all properties that occur in the trace so they only way we get here in TTD mode is: //(1) if the program is creating a new symbol (which always gets a fresh id) and we should recreate it or //(2) if it is forcing arguments in debug parse mode (instead of regular which we recorded in) Js::PropertyId propertyId = Js::Constants::NoProperty; @@ -1506,7 +1485,6 @@ ThreadContext::EnterScriptEnd(Js::ScriptEntryExitRecord * record, bool doCleanup { poller->EndScript(); } - ClosePendingProjectionContexts(); ClosePendingScriptContexts(); Assert(rootPendingClose == nullptr); @@ -1748,7 +1726,7 @@ ThreadContext::ProbeStack(size_t size, Js::RecyclableObject * obj, Js::ScriptCon { AssertCanHandleStackOverflowCall(obj->IsExternal() || (Js::JavascriptOperators::GetTypeId(obj) == Js::TypeIds_Function && - Js::JavascriptFunction::FromVar(obj)->IsExternalFunction())); + Js::VarTo(obj)->IsExternalFunction())); if (!this->IsStackAvailable(size)) { if (this->IsExecutionDisabled()) @@ -1760,7 +1738,7 @@ ThreadContext::ProbeStack(size_t size, Js::RecyclableObject * obj, Js::ScriptCon if (obj->IsExternal() || (Js::JavascriptOperators::GetTypeId(obj) == Js::TypeIds_Function && - Js::JavascriptFunction::FromVar(obj)->IsExternalFunction())) + Js::VarTo(obj)->IsExternalFunction())) { Js::JavascriptError::ThrowStackOverflowError(scriptContext); } @@ -2005,6 +1983,13 @@ ThreadContext::EnsureJITThreadContext(bool allowPrereserveAlloc) &m_jitThunkStartAddr); JITManager::HandleServerCallResult(hr, RemoteCallType::StateUpdate); + // Initialize mutable ThreadContext state if needed + Js::TypeId wellKnownType = this->wellKnownHostTypeIds[WellKnownHostType_HTMLAllCollection]; + if (m_remoteThreadContextInfo && wellKnownType != Js::TypeIds_Undefined) + { + hr = JITManager::GetJITManager()->SetWellKnownHostTypeId(m_remoteThreadContextInfo, wellKnownType); + JITManager::HandleServerCallResult(hr, RemoteCallType::StateUpdate); + } return m_remoteThreadContextInfo != nullptr; #endif } @@ -2452,30 +2437,6 @@ void ThreadContext::ClosePendingScriptContexts() rootPendingClose = nullptr; } -void -ThreadContext::AddToPendingProjectionContextCloseList(IProjectionContext *projectionContext) -{ - pendingProjectionContextCloseList->Add(projectionContext); -} - -void -ThreadContext::RemoveFromPendingClose(IProjectionContext* projectionContext) -{ - pendingProjectionContextCloseList->Remove(projectionContext); -} - -void ThreadContext::ClosePendingProjectionContexts() -{ - IProjectionContext* projectionContext; - for (int i = 0 ; i < pendingProjectionContextCloseList->Count(); i++) - { - projectionContext = pendingProjectionContextCloseList->Item(i); - projectionContext->Close(); - } - pendingProjectionContextCloseList->Clear(); - -} - void ThreadContext::RegisterScriptContext(Js::ScriptContext *scriptContext) { @@ -2600,6 +2561,8 @@ ThreadContext::PreCollectionCallBack(CollectionFlags flags) void ThreadContext::PreSweepCallback() { + CollectionCallBack(Collect_Begin_Sweep); + #ifdef PERSISTENT_INLINE_CACHES ClearInlineCachesWithDeadWeakRefs(); #else @@ -3712,8 +3675,14 @@ ThreadContext::InvalidatePropertyGuardEntry(const Js::PropertyRecord* propertyRe { if (entry->entryPoints->TryGetValue(functionEntryPoint, &dummy)) { - functionEntryPoint->DoLazyBailout(stackWalker.GetCurrentAddressOfInstructionPointer(), - caller->GetFunctionBody(), propertyRecord); + functionEntryPoint->DoLazyBailout( + stackWalker.GetCurrentAddressOfInstructionPointer(), + static_cast(stackWalker.GetFramePointer()) +#if DBG + , caller->GetFunctionBody() + , propertyRecord +#endif + ); } } } @@ -4451,59 +4420,6 @@ void ThreadContext::EtwLogPropertyIdList() } #endif -#ifdef ENABLE_PROJECTION -void ThreadContext::AddExternalWeakReferenceCache(ExternalWeakReferenceCache *externalWeakReferenceCache) -{ - this->externalWeakReferenceCacheList.Prepend(&HeapAllocator::Instance, externalWeakReferenceCache); -} - -void ThreadContext::RemoveExternalWeakReferenceCache(ExternalWeakReferenceCache *externalWeakReferenceCache) -{ - Assert(!externalWeakReferenceCacheList.Empty()); - this->externalWeakReferenceCacheList.Remove(&HeapAllocator::Instance, externalWeakReferenceCache); -} - -void ThreadContext::MarkExternalWeakReferencedObjects(bool inPartialCollect) -{ - SListBase::Iterator iteratorWeakRefCache(&this->externalWeakReferenceCacheList); - while (iteratorWeakRefCache.Next()) - { - iteratorWeakRefCache.Data()->MarkNow(recycler, inPartialCollect); - } -} - -void ThreadContext::ResolveExternalWeakReferencedObjects() -{ - SListBase::Iterator iteratorWeakRefCache(&this->externalWeakReferenceCacheList); - while (iteratorWeakRefCache.Next()) - { - iteratorWeakRefCache.Data()->ResolveNow(recycler); - } -} - -#if DBG_DUMP -void ThreadContext::RegisterProjectionMemoryInformation(IProjectionContextMemoryInfo* projectionContextMemoryInfo) -{ - Assert(this->projectionMemoryInformation == nullptr || this->projectionMemoryInformation == projectionContextMemoryInfo); - - this->projectionMemoryInformation = projectionContextMemoryInfo; -} - -void ThreadContext::DumpProjectionContextMemoryStats(LPCWSTR headerMsg, bool forceDetailed) -{ - if (this->projectionMemoryInformation) - { - this->projectionMemoryInformation->DumpCurrentStats(headerMsg, forceDetailed); - } -} - -IProjectionContextMemoryInfo* ThreadContext::GetProjectionContextMemoryInformation() -{ - return this->projectionMemoryInformation; -} -#endif -#endif - #ifdef ENABLE_DEBUG_CONFIG_OPTIONS Js::Var ThreadContext::GetMemoryStat(Js::ScriptContext* scriptContext) { @@ -4669,29 +4585,6 @@ Js::DelayLoadWinRtString * ThreadContext::GetWinRTStringLibrary() return &delayLoadWinRtString; } -#ifdef ENABLE_PROJECTION -Js::DelayLoadWinRtError * ThreadContext::GetWinRTErrorLibrary() -{ - delayLoadWinRtError.EnsureFromSystemDirOnly(); - - return &delayLoadWinRtError; -} - -Js::DelayLoadWinRtTypeResolution* ThreadContext::GetWinRTTypeResolutionLibrary() -{ - delayLoadWinRtTypeResolution.EnsureFromSystemDirOnly(); - - return &delayLoadWinRtTypeResolution; -} - -Js::DelayLoadWinRtRoParameterizedIID* ThreadContext::GetWinRTRoParameterizedIIDLibrary() -{ - delayLoadWinRtRoParameterizedIID.EnsureFromSystemDirOnly(); - - return &delayLoadWinRtRoParameterizedIID; -} -#endif - #if defined(ENABLE_INTL_OBJECT) || defined(ENABLE_ES6_CHAR_CLASSIFIER) #ifdef INTL_WINGLOB Js::WindowsGlobalizationAdapter* ThreadContext::GetWindowsGlobalizationAdapter() diff --git a/lib/Runtime/Base/ThreadContext.h b/lib/Runtime/Base/ThreadContext.h index eac065b2b3c..ec823a39986 100644 --- a/lib/Runtime/Base/ThreadContext.h +++ b/lib/Runtime/Base/ThreadContext.h @@ -50,12 +50,6 @@ enum ThreadContextFlags const int LS_MAX_STACK_SIZE_KB = 300; -struct IProjectionContext -{ -public: - virtual HRESULT Close() = 0; -}; - class ThreadContext; class InterruptPoller @@ -189,27 +183,11 @@ enum RecyclerCollectCallBackFlags Collect_Begin_Partial = 0x21, Collect_Begin_Concurrent_Partial = Collect_Begin_Concurrent | Collect_Begin_Partial, Collect_End = 0x02, - Collect_Wait = 0x04 // callback can be from another thread + Collect_Wait = 0x04, // callback can be from another thread + Collect_Begin_Sweep = 0x08 }; typedef void (__cdecl *RecyclerCollectCallBackFunction)(void * context, RecyclerCollectCallBackFlags flags); -#ifdef ENABLE_PROJECTION -class ExternalWeakReferenceCache -{ -public: - virtual void MarkNow(Recycler *recycler, bool inPartialCollect) = 0; - virtual void ResolveNow(Recycler *recycler) = 0; -}; -#if DBG_DUMP -class IProjectionContextMemoryInfo abstract -{ -public: - virtual void DumpCurrentStats(LPCWSTR headerMsg, bool forceDetailed) = 0; - virtual void Release() = 0; -}; -#endif -#endif - #ifdef NTBUILD struct ThreadContextWatsonTelemetryBlock { @@ -683,7 +661,6 @@ class ThreadContext sealed : PropertyNoCaseSetType * caseInvariantPropertySet; Js::ScriptContext * rootPendingClose; - JsUtil::List* pendingProjectionContextCloseList; Js::ScriptEntryExitRecord * entryExitRecord; Js::InterpreterStackFrame* leafInterpreterFrame; const Js::PropertyRecord * propertyNamesDirect[128]; @@ -711,13 +688,6 @@ class ThreadContext sealed : Js::TypeId nextTypeId; uint32 polymorphicCacheState; -#ifdef ENABLE_PROJECTION - SListBase externalWeakReferenceCacheList; -#if DBG_DUMP - IProjectionContextMemoryInfo *projectionMemoryInformation; -#endif -#endif - #if ENABLE_NATIVE_CODEGEN JsUtil::JobProcessor *jobProcessor; Js::Var * bailOutRegisterSaveSpace; @@ -802,11 +772,6 @@ class ThreadContext sealed : #ifdef ENABLE_GLOBALIZATION Js::DelayLoadWinRtString delayLoadWinRtString; -#ifdef ENABLE_PROJECTION - Js::DelayLoadWinRtError delayLoadWinRtError; - Js::DelayLoadWinRtTypeResolution delayLoadWinRtTypeResolution; - Js::DelayLoadWinRtRoParameterizedIID delayLoadWinRtRoParameterizedIID; -#endif #if defined(ENABLE_INTL_OBJECT) || defined(ENABLE_ES6_CHAR_CLASSIFIER) #ifdef INTL_WINGLOB Js::DelayLoadWindowsGlobalization delayLoadWindowsGlobalizationLibrary; @@ -920,11 +885,6 @@ class ThreadContext sealed : #ifdef ENABLE_GLOBALIZATION Js::DelayLoadWinRtString *GetWinRTStringLibrary(); -#ifdef ENABLE_PROJECTION - Js::DelayLoadWinRtError *GetWinRTErrorLibrary(); - Js::DelayLoadWinRtTypeResolution* GetWinRTTypeResolutionLibrary(); - Js::DelayLoadWinRtRoParameterizedIID* GetWinRTRoParameterizedIIDLibrary(); -#endif #if defined(ENABLE_INTL_OBJECT) || defined(ENABLE_ES6_CHAR_CLASSIFIER) #ifdef INTL_WINGLOB Js::DelayLoadWindowsGlobalization *GetWindowsGlobalizationLibrary(); @@ -1154,10 +1114,6 @@ class ThreadContext sealed : ThreadContext::CollectCallBack * AddRecyclerCollectCallBack(RecyclerCollectCallBackFunction callback, void * context); void RemoveRecyclerCollectCallBack(ThreadContext::CollectCallBack * collectCallBack); - void AddToPendingProjectionContextCloseList(IProjectionContext *projectionContext); - void RemoveFromPendingClose(IProjectionContext *projectionContext); - void ClosePendingProjectionContexts(); - void AddToPendingScriptContextCloseList(Js::ScriptContext * scriptContext); void RemoveFromPendingClose(Js::ScriptContext * scriptContext); void ClosePendingScriptContexts(); @@ -1223,19 +1179,6 @@ class ThreadContext sealed : void SetThreadServiceWrapper(ThreadServiceWrapper*); ThreadServiceWrapper* GetThreadServiceWrapper(); -#ifdef ENABLE_PROJECTION - void AddExternalWeakReferenceCache(ExternalWeakReferenceCache *externalWeakReferenceCache); - void RemoveExternalWeakReferenceCache(ExternalWeakReferenceCache *externalWeakReferenceCache); - virtual void MarkExternalWeakReferencedObjects(bool inPartialCollect) override; - virtual void ResolveExternalWeakReferencedObjects() override; - -#if DBG_DUMP - void RegisterProjectionMemoryInformation(IProjectionContextMemoryInfo* projectionContextMemoryInfo); - void DumpProjectionContextMemoryStats(LPCWSTR headerMsg, bool forceDetailed = false); - IProjectionContextMemoryInfo* GetProjectionContextMemoryInformation(); -#endif -#endif - uint NewFunctionNumber() { return ++functionCount; } uint PeekNewFunctionNumber() { return functionCount + 1; } diff --git a/lib/Runtime/Base/ThreadContextInfo.cpp b/lib/Runtime/Base/ThreadContextInfo.cpp index bffc810da4b..1dddc70eeea 100644 --- a/lib/Runtime/Base/ThreadContextInfo.cpp +++ b/lib/Runtime/Base/ThreadContextInfo.cpp @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- @@ -21,6 +22,10 @@ # else extern "C" void __fastcall _guard_check_icall(_In_ uintptr_t _Target); # endif + +# ifndef _GUARD_CHECK_ICALL +# define _GUARD_CHECK_ICALL _guard_check_icall +# endif #endif ThreadContextInfo::ThreadContextInfo() : @@ -280,6 +285,24 @@ ThreadContextInfo::GetX86AllOnesF4Addr() const return ShiftAddr(this, &X86_ALL_ONES_F4); } +intptr_t +ThreadContextInfo::GetX86AllOnesI4Addr() const +{ + return ShiftAddr(this, &X86_ALL_ONES_I4); +} + +intptr_t +ThreadContextInfo::GetX86AllOnesI8Addr() const +{ + return ShiftAddr(this, &X86_ALL_ONES_I8); +} + +intptr_t +ThreadContextInfo::GetX86AllOnesI16Addr() const +{ + return ShiftAddr(this, &X86_ALL_ONES_I16); +} + intptr_t ThreadContextInfo::GetX86LowBytesMaskAddr() const { diff --git a/lib/Runtime/Base/ThreadContextInfo.h b/lib/Runtime/Base/ThreadContextInfo.h index ee6b11856c0..e3889bd4f1d 100644 --- a/lib/Runtime/Base/ThreadContextInfo.h +++ b/lib/Runtime/Base/ThreadContextInfo.h @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- @@ -68,6 +69,9 @@ class ThreadContextInfo intptr_t GetX86AllNegOnesF4Addr() const; intptr_t GetX86AllZerosAddr() const; intptr_t GetX86AllOnesF4Addr() const; + intptr_t GetX86AllOnesI4Addr() const; + intptr_t GetX86AllOnesI8Addr() const; + intptr_t GetX86AllOnesI16Addr() const; intptr_t GetX86LowBytesMaskAddr() const; intptr_t GetX86HighBytesMaskAddr() const; intptr_t GetX86DoubleWordSignBitsAddr() const; @@ -148,9 +152,11 @@ class ThreadContextInfo #pragma warning(push) #pragma warning(error: 4440) +CLANG_WNO_BEGIN("-Wignored-attributes") // MSVC will give warning C4440 in case of calling convention redefinition template void EnsureStdcall(F*) { typedef F __stdcall* T; } template void EnsureCdecl(F*) { typedef F __cdecl* T; } +CLANG_WNO_END #pragma warning(pop) template uintptr_t ShiftCdeclAddr(const ThreadContextInfo*const context, T* address) @@ -173,7 +179,3 @@ uintptr_t ShiftAddr(const ThreadContextInfo*const context, T* address) } uintptr_t ShiftAddr(const ThreadContextInfo*const context, uintptr_t address); - -#ifndef _GUARD_CHECK_ICALL -#define _GUARD_CHECK_ICALL _guard_check_icall -#endif diff --git a/lib/Runtime/Base/ThreadContextTlsEntry.cpp b/lib/Runtime/Base/ThreadContextTlsEntry.cpp index e59f95190cf..ef552f31d13 100644 --- a/lib/Runtime/Base/ThreadContextTlsEntry.cpp +++ b/lib/Runtime/Base/ThreadContextTlsEntry.cpp @@ -87,6 +87,14 @@ bool ThreadContextTLSEntry::TrySetThreadContext(ThreadContext * threadContext) if (entry == NULL) { Assert(!threadContext->IsThreadBound()); +#ifdef RECYCLER_WRITE_BARRIER +#ifdef TARGET_64 + if (!Memory::RecyclerWriteBarrierManager::OnThreadInit()) + { + return false; + } +#endif +#endif entry = CreateEntryForCurrentThread(); #ifndef _WIN32 ENTRY_FOR_CURRENT_THREAD() = entry; diff --git a/lib/Runtime/Base/Utf8SourceInfo.h b/lib/Runtime/Base/Utf8SourceInfo.h index 639f1dacd58..d20530ebe35 100644 --- a/lib/Runtime/Base/Utf8SourceInfo.h +++ b/lib/Runtime/Base/Utf8SourceInfo.h @@ -148,14 +148,6 @@ namespace Js } #endif - void ClearFunctions() - { - if (this->functionBodyDictionary) - { - this->functionBodyDictionary->Clear(); - } - } - bool HasFunctions() const { return (this->functionBodyDictionary ? this->functionBodyDictionary->Count() > 0 : false); diff --git a/lib/Runtime/Base/jitprofiling.cpp b/lib/Runtime/Base/jitprofiling.cpp index f04715dbc15..c330157bf46 100644 --- a/lib/Runtime/Base/jitprofiling.cpp +++ b/lib/Runtime/Base/jitprofiling.cpp @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft Corporation and contributors. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #include "RuntimeBasePch.h" @@ -8,12 +9,14 @@ #include "ittnotify_config.h" +#ifdef ITT_PLATFORM #if ITT_PLATFORM==ITT_PLATFORM_WIN #include #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ #if ITT_PLATFORM != ITT_PLATFORM_MAC && ITT_PLATFORM != ITT_PLATFORM_FREEBSD #include #endif +#endif #include #include "jitprofiling.h" diff --git a/lib/Runtime/ByteCode/AsmJsByteCodeWriter.cpp b/lib/Runtime/ByteCode/AsmJsByteCodeWriter.cpp index e04455938b3..65ff5dce9a4 100644 --- a/lib/Runtime/ByteCode/AsmJsByteCodeWriter.cpp +++ b/lib/Runtime/ByteCode/AsmJsByteCodeWriter.cpp @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft Corporation and contributors. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- @@ -632,7 +633,7 @@ namespace Js uint loopId = m_functionWrite->IncrLoopCount(); Assert((uint)m_loopHeaders->Count() == loopId); - m_loopHeaders->Add(LoopHeaderData(m_byteCodeData.GetCurrentOffset(), 0, m_loopNest > 0)); + m_loopHeaders->Add(LoopHeaderData(m_byteCodeData.GetCurrentOffset(), 0, m_loopNest > 0, false)); m_loopNest++; Js::OpCodeAsmJs loopBodyOpcode = Js::OpCodeAsmJs::AsmJsLoopBodyStart; this->MarkAsmJsLabel(loopEntrance); diff --git a/lib/Runtime/ByteCode/AsmJsByteCodeWriter.h b/lib/Runtime/ByteCode/AsmJsByteCodeWriter.h index 9febcb08185..6ea60d08323 100644 --- a/lib/Runtime/ByteCode/AsmJsByteCodeWriter.h +++ b/lib/Runtime/ByteCode/AsmJsByteCodeWriter.h @@ -130,4 +130,4 @@ namespace Js #undef IMP_IWASM #endif -#endif \ No newline at end of file +#endif diff --git a/lib/Runtime/ByteCode/ByteBlock.cpp b/lib/Runtime/ByteCode/ByteBlock.cpp index 5b96b90b8bf..9c83a06a3f8 100644 --- a/lib/Runtime/ByteCode/ByteBlock.cpp +++ b/lib/Runtime/ByteCode/ByteBlock.cpp @@ -21,7 +21,7 @@ namespace Js return m_content; } - const byte ByteBlock::operator[](uint itemIndex) const + byte ByteBlock::operator[](uint itemIndex) const { AssertMsg(itemIndex < m_contentSize, "Ensure valid offset"); diff --git a/lib/Runtime/ByteCode/ByteBlock.h b/lib/Runtime/ByteCode/ByteBlock.h index 896f0a1f92d..96a34879bb9 100644 --- a/lib/Runtime/ByteCode/ByteBlock.h +++ b/lib/Runtime/ByteCode/ByteBlock.h @@ -46,7 +46,7 @@ namespace Js uint GetLength() const; byte* GetBuffer(); const byte* GetBuffer() const; - const byte operator[](uint itemIndex) const; + byte operator[](uint itemIndex) const; byte& operator[] (uint itemIndex); }; } // namespace Js diff --git a/lib/Runtime/ByteCode/ByteCodeCacheReleaseFileVersion.h b/lib/Runtime/ByteCode/ByteCodeCacheReleaseFileVersion.h index cbd07703ee2..c612639bfd1 100644 --- a/lib/Runtime/ByteCode/ByteCodeCacheReleaseFileVersion.h +++ b/lib/Runtime/ByteCode/ByteCodeCacheReleaseFileVersion.h @@ -1,10 +1,12 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- // NOTE: If there is a merge conflict the correct fix is to make a new GUID. -// This file was generated with tools\update_bytecode_version.ps1 +// This file was generated with tools/regenByteCode.py -// {D4C23742-01B6-409A-9C31-1590C22DE5A4} +// {d31c196c-a985-4c41-a9b3-5a895b7dc567} const GUID byteCodeCacheReleaseFileVersion = -{ 0xD4C23742, 0x01B6, 0x409A, { 0x9C, 0x31, 0x15, 0x90, 0xC2, 0x2D, 0xE5, 0xA4 } }; +{ 0xd31c196c, 0xa985, 0x4c41, {0xa9, 0xb3, 0x5a, 0x89, 0x5b, 0x7d, 0xc5, 0x67 } }; + diff --git a/lib/Runtime/ByteCode/ByteCodeDumper.cpp b/lib/Runtime/ByteCode/ByteCodeDumper.cpp index a8adb9eebd3..ce5a1149282 100644 --- a/lib/Runtime/ByteCode/ByteCodeDumper.cpp +++ b/lib/Runtime/ByteCode/ByteCodeDumper.cpp @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #include "RuntimeByteCodePch.h" @@ -181,7 +182,7 @@ namespace Js break; case Js::TypeIds_Boolean: Output::Print(_u("%-10s"), OpCodeUtil::GetOpCodeName( - JavascriptBoolean::FromVar(varConst)->GetValue() ? OpCode::LdTrue : OpCode::LdFalse)); + VarTo(varConst)->GetValue() ? OpCode::LdTrue : OpCode::LdFalse)); break; case Js::TypeIds_Number: #if ENABLE_NATIVE_CODEGEN @@ -191,13 +192,20 @@ namespace Js #endif Output::Print(_u("%G"), JavascriptNumber::GetValue(varConst)); break; + case Js::TypeIds_BigInt: +#if ENABLE_NATIVE_CODEGEN + Output::Print(_u("%-10s"), OpCodeUtil::GetOpCodeName(OpCode::BigIntLiteral)); +#else + Output::Print(_u("%-10s"), OpCodeUtil::GetOpCodeName(OpCode::Ld_A)); +#endif + break; case Js::TypeIds_String: #if ENABLE_NATIVE_CODEGEN Output::Print(_u("%-10s"), OpCodeUtil::GetOpCodeName(OpCode::LdStr)); #else Output::Print(_u("%-10s"), OpCodeUtil::GetOpCodeName(OpCode::Ld_A)); #endif - Output::Print(_u(" (\"%s\")%s"), JavascriptString::FromVar(varConst)->GetSz(), Js::PropertyString::Is(varConst) ? _u(" [prop]") : _u("")); + Output::Print(_u(" (\"%s\")%s"), VarTo(varConst)->GetSz(), Js::VarIs(varConst) ? _u(" [prop]") : _u("")); break; case Js::TypeIds_GlobalObject: #if ENABLE_NATIVE_CODEGEN @@ -599,6 +607,7 @@ namespace Js } case OpCode::DeleteLocalFld: + case OpCode::DeleteLocalFld_ReuseLoc: Output::Print(_u(" R%d = %s "), data->Instance, pPropertyName->GetBuffer()); break; @@ -630,6 +639,11 @@ namespace Js Output::Print(_u(" root.%s"), pPropertyName->GetBuffer()); break; } + case OpCode::EnsureCanDeclGloFunc: + { + Output::Print(_u(" root.%s"), pPropertyName->GetBuffer()); + break; + } case OpCode::LdLocalElemUndef: { Output::Print(_u(" %s = undefined"), pPropertyName->GetBuffer()); @@ -681,6 +695,7 @@ namespace Js switch (op) { case OpCode::DeleteFld: + case OpCode::DeleteFld_ReuseLoc: case OpCode::DeleteRootFld: case OpCode::DeleteFldStrict: case OpCode::DeleteRootFldStrict: @@ -755,12 +770,14 @@ namespace Js break; } case OpCode::StSuperFld: + case OpCode::StSuperFldStrict: { Output::Print(_u(" R%d.%s(this=R%d) = R%d #%d"), data->Instance, pPropertyName->GetBuffer(), data->Value2, data->Value, data->PropertyIdIndex); break; } case OpCode::ProfiledStSuperFld: + case OpCode::ProfiledStSuperFldStrict: { Output::Print(_u(" R%d.%s(this=R%d) = R%d #%d"), data->Instance, pPropertyName->GetBuffer(), data->Value2, data->Value, data->PropertyIdIndex); @@ -804,6 +821,11 @@ namespace Js DumpU4(data->C1); break; } + case OpCode::NewPropIdArrForCompProps: + { + Output::Print(_u(" R%u = [%u] "), data->R0, data->C1); + break; + } default: DumpReg(data->R0); Output::Print(_u("=")); @@ -840,6 +862,7 @@ namespace Js #endif case OpCode::StObjSlot: case OpCode::StObjSlotChkUndecl: + case OpCode::StPropIdArrFromVar: Output::Print(_u(" R%d[%d] = R%d "),data->Instance,data->SlotIndex,data->Value); break; case OpCode::LdSlot: @@ -875,9 +898,10 @@ namespace Js case OpCode::LdLocalSlot: case OpCode::LdParamSlot: case OpCode::LdEnvObj: + case OpCode::LdEnvObj_ReuseLoc: case OpCode::LdLocalObjSlot: case OpCode::LdParamObjSlot: - Output::Print(_u(" R%d = [%d] "),data->Value, data->SlotIndex); + Output::Print(_u(" R%d = [%d] "), data->Value, data->SlotIndex); break; case OpCode::NewScFunc: case OpCode::NewStackScFunc: @@ -972,10 +996,12 @@ namespace Js break; case OpCode::LdLocalFld: + case OpCode::LdLocalFld_ReuseLoc: Output::Print(_u(" R%d = %s #%d"), data->Value, pPropertyName->GetBuffer(), data->inlineCacheIndex); break; case OpCode::ProfiledLdLocalFld: + case OpCode::ProfiledLdLocalFld_ReuseLoc: Output::Print(_u(" R%d = %s #%d"), data->Value, pPropertyName->GetBuffer(), data->inlineCacheIndex); DumpProfileId(data->inlineCacheIndex); break; @@ -1036,6 +1062,7 @@ namespace Js case OpCode::LdLen_A: case OpCode::LdFldForTypeOf: case OpCode::LdFld: + case OpCode::LdFld_ReuseLoc: case OpCode::LdFldForCallApplyTarget: case OpCode::LdMethodFld: case OpCode::ScopedLdMethodFld: @@ -1057,6 +1084,7 @@ namespace Js } case OpCode::ProfiledLdFldForTypeOf: case OpCode::ProfiledLdFld: + case OpCode::ProfiledLdFld_ReuseLoc: case OpCode::ProfiledLdFldForCallApplyTarget: case OpCode::ProfiledLdMethodFld: { @@ -1258,6 +1286,25 @@ namespace Js DumpReg(data->R3); } + template void + ByteCodeDumper::DumpReg2U(OpCode op, const unaligned T * data, FunctionBody * dumpFunction, ByteCodeReader& reader) + { + switch (op) + { + case Js::OpCode::InitBaseClass: + { + FunctionProxy* pfuncActual = dumpFunction->GetNestedFunctionProxy((uint)data->SlotIndex); + Output::Print(_u(" R%d, R%d = %s()"), data->R0, data->R1, pfuncActual->EnsureDeserialized()->GetDisplayName()); + break; + } + + default: + DumpReg(data->R0); + DumpReg(data->R1); + break; + } + } + template void ByteCodeDumper::DumpReg2B1(OpCode op, const unaligned T * data, FunctionBody * dumpFunction, ByteCodeReader& reader) { @@ -1275,6 +1322,43 @@ namespace Js DumpI4(data->B3); } + template void + ByteCodeDumper::DumpReg3U(OpCode op, const unaligned T * data, FunctionBody * dumpFunction, ByteCodeReader& reader) + { + switch (op) + { + case Js::OpCode::InitInnerBaseClass: + { + FunctionProxy* pfuncActual = dumpFunction->GetNestedFunctionProxy((uint)data->SlotIndex); + Output::Print(_u(" R%d, R%d = %s(), env:R%d"), data->R0, data->R1, pfuncActual->EnsureDeserialized()->GetDisplayName(), data->R2); + break; + } + + default: + AssertMsg(false, "Unknown Reg3U opcode"); + break; + } + } + + template void + ByteCodeDumper::DumpReg4U(OpCode op, const unaligned T * data, FunctionBody * dumpFunction, ByteCodeReader& reader) + { + switch (op) + { + case Js::OpCode::InitClass: + { + FunctionProxy* pfuncActual = dumpFunction->GetNestedFunctionProxy((uint)data->SlotIndex); + Output::Print(_u(" R%d, R%d = R%d, R%d, %s()"), data->R0, data->R1, data->R2, data->R3, + pfuncActual->EnsureDeserialized()->GetDisplayName()); + break; + } + + default: + AssertMsg(false, "Unknown Reg4U opcode"); + break; + } + } + template void ByteCodeDumper::DumpReg5(OpCode op, const unaligned T * data, FunctionBody * dumpFunction, ByteCodeReader& reader) { @@ -1285,6 +1369,25 @@ namespace Js DumpReg(data->R4); } + template void + ByteCodeDumper::DumpReg5U(OpCode op, const unaligned T * data, FunctionBody * dumpFunction, ByteCodeReader& reader) + { + switch (op) + { + case Js::OpCode::InitInnerClass: + { + FunctionProxy* pfuncActual = dumpFunction->GetNestedFunctionProxy((uint)data->SlotIndex); + Output::Print(_u(" R%d, R%d = R%d, R%d, %s(), env:R%d"), data->R0, data->R1, data->R2, data->R3, + pfuncActual->EnsureDeserialized()->GetDisplayName(), data->R4); + break; + } + + default: + AssertMsg(false, "Unknown Reg5U opcode"); + break; + } + } + void ByteCodeDumper::DumpW1(OpCode op, const unaligned OpLayoutW1 * data, FunctionBody * dumpFunction, ByteCodeReader& reader) { @@ -1477,17 +1580,6 @@ namespace Js } } - template - void ByteCodeDumper::DumpClass(OpCode op, const unaligned T * data, FunctionBody * dumpFunction, ByteCodeReader& reader) - { - DumpReg(data->Constructor); - if (data->Extends != Js::Constants::NoRegister) - { - Output::Print(_u("extends")); - DumpReg((RegSlot)data->Extends); - } - } - #ifdef BYTECODE_BRANCH_ISLAND void ByteCodeDumper::DumpBrLong(OpCode op, const unaligned OpLayoutBrLong* data, FunctionBody * dumpFunction, ByteCodeReader& reader) { diff --git a/lib/Runtime/ByteCode/ByteCodeEmitter.cpp b/lib/Runtime/ByteCode/ByteCodeEmitter.cpp index 319b64baece..98533e8f0e6 100644 --- a/lib/Runtime/ByteCode/ByteCodeEmitter.cpp +++ b/lib/Runtime/ByteCode/ByteCodeEmitter.cpp @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #include "RuntimeByteCodePch.h" @@ -11,7 +12,9 @@ void EmitReference(ParseNode *pnode, ByteCodeGenerator *byteCodeGenerator, FuncI void EmitAssignment(ParseNode *asgnNode, ParseNode *lhs, Js::RegSlot rhsLocation, ByteCodeGenerator *byteCodeGenerator, FuncInfo *funcInfo); void EmitLoad(ParseNode *rhs, ByteCodeGenerator *byteCodeGenerator, FuncInfo *funcInfo); void EmitCall(ParseNodeCall* pnodeCall, ByteCodeGenerator* byteCodeGenerator, FuncInfo* funcInfo, BOOL fReturnValue, BOOL fEvaluateComponents, Js::RegSlot overrideThisLocation = Js::Constants::NoRegister, Js::RegSlot newTargetLocation = Js::Constants::NoRegister); -void EmitYield(Js::RegSlot inputLocation, Js::RegSlot resultLocation, ByteCodeGenerator* byteCodeGenerator, FuncInfo* funcInfo, Js::RegSlot yieldStarIterator = Js::Constants::NoRegister); +void EmitStartupYield(ByteCodeGenerator* byteCodeGenerator, FuncInfo* funcInfo); +void EmitYield(Js::RegSlot resultReg, Js::RegSlot inputReg, ByteCodeGenerator* byteCodeGenerator, FuncInfo* funcInfo); +void EmitAwait(Js::RegSlot resultReg, Js::RegSlot inputReg, ByteCodeGenerator* byteCodeGenerator, FuncInfo* funcInfo); void EmitUseBeforeDeclaration(Symbol *sym, ByteCodeGenerator *byteCodeGenerator, FuncInfo *funcInfo); void EmitUseBeforeDeclarationRuntimeError(ByteCodeGenerator *byteCodeGenerator, Js::RegSlot location); @@ -34,9 +37,11 @@ if ((isTopLevel)) \ byteCodeGenerator->EndStatement(pnode); \ } -BOOL MayHaveSideEffectOnNode(ParseNode *pnode, ParseNode *pnodeSE) +DynamicLoadRecord::DynamicLoadRecord() : kind(DynamicLoadKind::Invalid), label(Js::Constants::NoByteCodeOffset), instance(Js::Constants::NoSlot) {} + +BOOL MayHaveSideEffectOnNode(ParseNode *pnode, ParseNode *pnodeSE, ByteCodeGenerator *byteCodeGenerator) { - // Try to determine whether pnodeSE may kill the named var represented by pnode. + // Try to determine whether pnodeSE (SE = side effect) may kill the named var represented by pnode. if (pnode->nop == knopComputedName) { @@ -49,54 +54,76 @@ BOOL MayHaveSideEffectOnNode(ParseNode *pnode, ParseNode *pnodeSE) return false; } - uint fnop = ParseNode::Grfnop(pnodeSE->nop); - if (fnop & fnopLeaf) - { - // pnodeSE is a leaf and can't kill anything. - return false; - } + ArenaAllocator *alloc = byteCodeGenerator->GetAllocator(); + SList pNodeSEStack(alloc); - if (fnop & fnopAsg) - { - // pnodeSE is an assignment (=, ++, +=, etc.) - // Trying to examine the LHS of pnodeSE caused small perf regressions, - // maybe because of code layout or some other subtle effect. - return true; - } + pNodeSEStack.Push(pnodeSE); - if (fnop & fnopUni) + // A pnodeSE can have children that can cause a side effect on pnode. A stack is used to check + // pnodeSE and all potential pnodeSE children that could cause a side effect on pnode. When a + // child pnodeSE can cause a side effect on pnode, immediately return true. Otherwise continue + // checking children of pnodeSE until none exist + while (!pNodeSEStack.Empty()) { - // pnodeSE is a unary op, so recurse to the source (if present - e.g., [] may have no opnd). - if (pnodeSE->nop == knopTempRef) + ParseNode *currPnodeSE = pNodeSEStack.Pop(); + uint fnop = ParseNode::Grfnop(currPnodeSE->nop); + + if (fnop & fnopLeaf) { - return false; + // pnodeSE is a leaf and can't kill anything. + continue; } - else + else if (fnop & fnopAsg) { - return pnodeSE->AsParseNodeUni()->pnode1 && MayHaveSideEffectOnNode(pnode, pnodeSE->AsParseNodeUni()->pnode1); + // pnodeSE is an assignment (=, ++, +=, etc.) + // Trying to examine the LHS of pnodeSE caused small perf regressions, + // maybe because of code layout or some other subtle effect. + return true; + } + else if (fnop & fnopUni) + { + // pnodeSE is a unary op, so recurse to the source (if present - e.g., [] may have no opnd). + if (currPnodeSE->nop == knopTempRef) + { + continue; + } + else if (currPnodeSE->AsParseNodeUni()->pnode1) + { + pNodeSEStack.Push(currPnodeSE->AsParseNodeUni()->pnode1); + } + } + else if (fnop & fnopBin) + { + // currPnodeSE is a binary (or ternary) op, so check sources (if present). + + pNodeSEStack.Push(currPnodeSE->AsParseNodeBin()->pnode1); + + if (currPnodeSE->AsParseNodeBin()->pnode2) + { + pNodeSEStack.Push(currPnodeSE->AsParseNodeBin()->pnode2); + } + } + else if (currPnodeSE->nop == knopQmark) + { + ParseNodeTri * pnodeTriSE = currPnodeSE->AsParseNodeTri(); + + pNodeSEStack.Push(pnodeTriSE->pnode1); + pNodeSEStack.Push(pnodeTriSE->pnode2); + pNodeSEStack.Push(pnodeTriSE->pnode3); + } + else if (currPnodeSE->nop == knopCall || currPnodeSE->nop == knopNew) + { + pNodeSEStack.Push(currPnodeSE->AsParseNodeCall()->pnodeTarget); + + if (currPnodeSE->AsParseNodeCall()->pnodeArgs) + { + pNodeSEStack.Push(currPnodeSE->AsParseNodeCall()->pnodeArgs); + } + } + else if (currPnodeSE->nop == knopList) + { + return true; } - } - else if (fnop & fnopBin) - { - // pnodeSE is a binary (or ternary) op, so recurse to the sources (if present). - return MayHaveSideEffectOnNode(pnode, pnodeSE->AsParseNodeBin()->pnode1) || - (pnodeSE->AsParseNodeBin()->pnode2 && MayHaveSideEffectOnNode(pnode, pnodeSE->AsParseNodeBin()->pnode2)); - } - else if (pnodeSE->nop == knopQmark) - { - ParseNodeTri * pnodeTriSE = pnodeSE->AsParseNodeTri(); - return MayHaveSideEffectOnNode(pnode, pnodeTriSE->pnode1) || - MayHaveSideEffectOnNode(pnode, pnodeTriSE->pnode2) || - MayHaveSideEffectOnNode(pnode, pnodeTriSE->pnode3); - } - else if (pnodeSE->nop == knopCall || pnodeSE->nop == knopNew) - { - return MayHaveSideEffectOnNode(pnode, pnodeSE->AsParseNodeCall()->pnodeTarget) || - (pnodeSE->AsParseNodeCall()->pnodeArgs && MayHaveSideEffectOnNode(pnode, pnodeSE->AsParseNodeCall()->pnodeArgs)); - } - else if (pnodeSE->nop == knopList) - { - return true; } return false; @@ -159,7 +186,7 @@ bool IsArguments(ParseNode *pnode) // // Cases where we don't check for "arguments" yet. - // Assume that they might have it. Disable the optimization is such scenarios + // Assume that they might have it. Disable the optimization in such scenarios // case knopList: case knopObject: @@ -174,6 +201,7 @@ bool IsArguments(ParseNode *pnode) case knopWhile: case knopForIn: case knopForOf: + case knopForAwaitOf: case knopReturn: case knopBlock: case knopBreak: @@ -223,7 +251,7 @@ bool IsArguments(ParseNode *pnode) } bool ApplyEnclosesArgs(ParseNode* fncDecl, ByteCodeGenerator* byteCodeGenerator); -void Emit(ParseNode* pnode, ByteCodeGenerator* byteCodeGenerator, FuncInfo* funcInfo, BOOL fReturnValue, bool isConstructorCall = false, Js::RegSlot bindingNameLocation = Js::Constants::NoRegister, bool isTopLevel = false); +void Emit(ParseNode* pnode, ByteCodeGenerator* byteCodeGenerator, FuncInfo* funcInfo, BOOL fReturnValue, bool isConstructorCall = false, bool isTopLevel = false); void EmitBinaryOpnds(ParseNode* pnode1, ParseNode* pnode2, ByteCodeGenerator* byteCodeGenerator, FuncInfo* funcInfo, Js::RegSlot computedPropertyLocation = Js::Constants::NoRegister); bool IsExpressionStatement(ParseNode* stmt, const Js::ScriptContext *const scriptContext); void EmitInvoke(Js::RegSlot location, Js::RegSlot callObjLocation, Js::PropertyId propertyId, ByteCodeGenerator* byteCodeGenerator, FuncInfo* funcInfo); @@ -953,13 +981,9 @@ void ByteCodeGenerator::EmitTopLevelStatement(ParseNode *stmt, FuncInfo *funcInf EndStatement(stmt); } - Emit(stmt, this, funcInfo, fReturnValue, false/*isConstructorCall*/, Js::Constants::NoRegister/*computedPropertyLocation*/, true/*isTopLevel*/); + Emit(stmt, this, funcInfo, fReturnValue, false/*isConstructorCall*/, true/*isTopLevel*/); if (funcInfo->IsTmpReg(stmt->location)) { - if (!stmt->isUsed && !fReturnValue) - { - m_writer.Reg1(Js::OpCode::Unused, stmt->location); - } funcInfo->ReleaseLoc(stmt); } } @@ -1056,7 +1080,7 @@ void ByteCodeGenerator::DefineCachedFunctions(FuncInfo *funcInfoParent) auto fillEntries = [&](ParseNode *pnodeFnc) { Symbol *sym = pnodeFnc->AsParseNodeFnc()->GetFuncSymbol(); - if (sym != nullptr && (pnodeFnc->AsParseNodeFnc()->IsDeclaration())) + if (sym != nullptr && (pnodeFnc->AsParseNodeFnc()->IsDeclaration() || pnodeFnc->AsParseNodeFnc()->IsDefaultModuleExport())) { AssertMsg(!pnodeFnc->AsParseNodeFnc()->IsGenerator(), "Generator functions are not supported by InitCachedFuncs but since they always escape they should disable function caching"); Js::FuncInfoEntry *entry = &info->elements[slotCount]; @@ -1123,7 +1147,7 @@ void ByteCodeGenerator::DefineUncachedFunctions(FuncInfo *funcInfoParent) // after the assignment. Might save register. // - if (pnodeFnc->AsParseNodeFnc()->IsDeclaration()) + if (pnodeFnc->AsParseNodeFnc()->IsDeclaration() || pnodeFnc->AsParseNodeFnc()->IsDefaultModuleExport()) { this->DefineOneFunction(pnodeFnc->AsParseNodeFnc(), funcInfoParent); // The "x = function() {...}" case is being generated on the fly, during emission, @@ -1570,8 +1594,6 @@ void ByteCodeGenerator::EmitScopeObjectInit(FuncInfo *funcInfo) Js::PropertyIdArray *propIds = funcInfo->GetParsedFunctionBody()->AllocatePropertyIdArrayForFormals(extraAlloc, slotCount, Js::ActivationObjectEx::ExtraSlotCount()); ParseNodeFnc *pnodeFnc = funcInfo->root; - ParseNode *pnode; - Symbol *sym; if (funcInfo->GetFuncExprNameReference() && pnodeFnc->GetFuncSymbol()->GetScope() == funcInfo->GetBodyScope()) { @@ -1611,10 +1633,15 @@ void ByteCodeGenerator::EmitScopeObjectInit(FuncInfo *funcInfo) }; MapFormalsWithoutRest(pnodeFnc, initArg); - // If the rest is in the slot - we need to keep that slot. - if (pnodeFnc->pnodeRest != nullptr && pnodeFnc->pnodeRest->sym->IsInSlot(this, funcInfo)) + ParseNodePtr rest = pnodeFnc->pnodeRest; + if (rest != nullptr && rest->IsVarLetOrConst()) { - Symbol::SaveToPropIdArray(pnodeFnc->pnodeRest->sym, propIds, this); + // If the rest is in the slot - we need to keep that slot. + Symbol *sym = rest->AsParseNodeVar()->sym; + if (sym->IsInSlot(this, funcInfo)) + { + Symbol::SaveToPropIdArray(sym, propIds, this); + } } } else @@ -1639,7 +1666,7 @@ void ByteCodeGenerator::EmitScopeObjectInit(FuncInfo *funcInfo) { if (pnodeName->AsParseNodeBin()->pnode1->nop == knopVarDecl) { - sym = pnodeName->AsParseNodeBin()->pnode1->AsParseNodeVar()->sym; + Symbol *sym = pnodeName->AsParseNodeBin()->pnode1->AsParseNodeVar()->sym; if (sym) { Symbol::SaveToPropIdArray(sym, propIds, this, &firstFuncSlot); @@ -1649,7 +1676,7 @@ void ByteCodeGenerator::EmitScopeObjectInit(FuncInfo *funcInfo) } if (pnodeName->nop == knopVarDecl) { - sym = pnodeName->AsParseNodeVar()->sym; + Symbol *sym = pnodeName->AsParseNodeVar()->sym; if (sym) { Symbol::SaveToPropIdArray(sym, propIds, this, &firstFuncSlot); @@ -1663,6 +1690,8 @@ void ByteCodeGenerator::EmitScopeObjectInit(FuncInfo *funcInfo) if (currentScope->GetScopeType() != ScopeType_Parameter) { + ParseNode *pnode; + Symbol *sym; for (pnode = pnodeFnc->pnodeVars; pnode; pnode = pnode->AsParseNodeVar()->pnodeNext) { sym = pnode->AsParseNodeVar()->sym; @@ -1730,14 +1759,8 @@ void ByteCodeGenerator::SetClosureRegisters(FuncInfo* funcInfo, Js::FunctionBody } } -void ByteCodeGenerator::FinalizeRegisters(FuncInfo * funcInfo, Js::FunctionBody * byteCodeFunction) +void ByteCodeGenerator::FinalizeRegisters(FuncInfo* funcInfo, Js::FunctionBody* byteCodeFunction) { - if (byteCodeFunction->IsCoroutine()) - { - // EmitYield uses 'false' to create the IteratorResult object - funcInfo->AssignFalseConstRegister(); - } - if (funcInfo->NeedEnvRegister()) { bool constReg = !funcInfo->GetIsTopLevelEventHandler() && funcInfo->IsGlobalFunction() && !(this->flags & fscrEval); @@ -1769,9 +1792,13 @@ void ByteCodeGenerator::FinalizeRegisters(FuncInfo * funcInfo, Js::FunctionBody } } - // NOTE: The FB expects the yield reg to be the final non-temp. + // NOTE: The FunctionBody expects the yield reg to be the final non-temp. if (byteCodeFunction->IsCoroutine()) { + if (funcInfo->root->IsAsync()) + { + funcInfo->AssignAwaitRegister(); + } funcInfo->AssignYieldRegister(); } @@ -1938,7 +1965,7 @@ void ByteCodeGenerator::LoadAllConstants(FuncInfo *funcInfo) { if (funcInfo->GetThisSymbol()) { - byteCodeFunction->MapAndSetThisRegisterForEventHandler(funcInfo->GetThisSymbol()->GetLocation()); + byteCodeFunction->MapAndSetThisRegisterForEventHandler(funcInfo->GetThisSymbol()->GetLocation()); } // The environment is the namespace hierarchy starting with "this". Assert(!funcInfo->RegIsConst(funcInfo->GetEnvRegister())); @@ -1973,6 +2000,7 @@ void ByteCodeGenerator::LoadAllConstants(FuncInfo *funcInfo) this->RecordAllIntConstants(funcInfo); this->RecordAllStrConstants(funcInfo); + this->RecordAllBigIntConstants(funcInfo); this->RecordAllStringTemplateCallsiteConstants(funcInfo); funcInfo->doubleConstantToRegister.Map([byteCodeFunction](double d, Js::RegSlot location) @@ -2042,6 +2070,11 @@ void ByteCodeGenerator::LoadAllConstants(FuncInfo *funcInfo) this->LoadSuperConstructorObject(funcInfo); } + if (funcInfo->GetImportMetaSymbol()) + { + this->LoadImportMetaObject(funcInfo); + } + // // If the function is a function expression with a name, // load the function object at runtime to its activation object. @@ -2136,7 +2169,7 @@ void ByteCodeGenerator::LoadThisObject(FuncInfo *funcInfo, bool thisLoadedFromPa Assert(thisSym); Assert(!funcInfo->IsLambda()); - if (this->scriptContext->GetConfig()->IsES6ClassAndExtendsEnabled() && funcInfo->IsClassConstructor()) + if (funcInfo->IsClassConstructor()) { // Derived class constructors initialize 'this' to be Undecl // - we'll check this value during a super call and during 'this' access @@ -2160,7 +2193,11 @@ void ByteCodeGenerator::LoadThisObject(FuncInfo *funcInfo, bool thisLoadedFromPa // thisLoadedFromParams would be true for the event Handler case, // "this" would have been loaded from parameters to put in the environment // - if (!thisLoadedFromParams) + if (funcInfo->GetIsStrictMode()) + { + m_writer.ArgIn0(thisSym->GetLocation()); + } + else if (!thisLoadedFromParams) { Js::RegSlot tmpReg = funcInfo->AcquireTmpRegister(); m_writer.ArgIn0(tmpReg); @@ -2201,6 +2238,14 @@ void ByteCodeGenerator::LoadNewTargetObject(FuncInfo *funcInfo) } } +void ByteCodeGenerator::LoadImportMetaObject(FuncInfo* funcInfo) +{ + Symbol* importMetaSym = funcInfo->GetImportMetaSymbol(); + Assert(importMetaSym); + + m_writer.Reg1Unsigned1(Js::OpCode::LdImportMeta, importMetaSym->GetLocation(), this->GetModuleID()); +} + void ByteCodeGenerator::LoadSuperConstructorObject(FuncInfo *funcInfo) { Symbol* superConstructorSym = funcInfo->GetSuperConstructorSymbol(); @@ -2290,7 +2335,7 @@ void ByteCodeGenerator::EmitSuperCall(FuncInfo* funcInfo, ParseNodeSuperCall * p this->Writer()->Reg2(Js::OpCode::NewScObjectNoCtorFull, thisForSuperCall, pnodeSuperCall->pnodeNewTarget->location); this->Writer()->Br(Js::OpCode::Br, makeCallLabel); this->Writer()->MarkLabel(useNewTargetForThisLabel); - this->Writer()->Reg2(Js::OpCode::Ld_A, thisForSuperCall, pnodeSuperCall->pnodeNewTarget->location); + this->Writer()->Reg2(Js::OpCode::Ld_A_ReuseLoc, thisForSuperCall, pnodeSuperCall->pnodeNewTarget->location); this->Writer()->MarkLabel(makeCallLabel); EmitCall(pnodeSuperCall, this, funcInfo, fReturnValue, fEvaluateComponents, thisForSuperCall, pnodeSuperCall->pnodeNewTarget->location); @@ -2308,7 +2353,7 @@ void ByteCodeGenerator::EmitSuperCall(FuncInfo* funcInfo, ParseNodeSuperCall * p this->Writer()->Reg2(Js::OpCode::Ld_A, valueForThis, thisForSuperCall); this->Writer()->Br(Js::OpCode::Br, doneLabel); this->Writer()->MarkLabel(useSuperCallResultLabel); - this->Writer()->Reg2(Js::OpCode::Ld_A, valueForThis, pnodeSuperCall->location); + this->Writer()->Reg2(Js::OpCode::Ld_A_ReuseLoc, valueForThis, pnodeSuperCall->location); this->Writer()->MarkLabel(doneLabel); // The call is done and we know what we will bind to 'this' so let's check to see if 'this' is already decl. @@ -2325,7 +2370,7 @@ void ByteCodeGenerator::EmitSuperCall(FuncInfo* funcInfo, ParseNodeSuperCall * p } Symbol* thisSym = pnodeSuperCall->pnodeThis->sym; - this->Writer()->Reg2(Js::OpCode::StrictLdThis, pnodeSuperCall->pnodeThis->location, valueForThis); + this->Writer()->Reg2(Js::OpCode::Ld_A, pnodeSuperCall->pnodeThis->location, valueForThis); EmitPropStoreForSpecialSymbol(pnodeSuperCall->pnodeThis->location, thisSym, pnodeSuperCall->pnodeThis->pid, funcInfo, false); @@ -2353,7 +2398,10 @@ void ByteCodeGenerator::EmitThis(FuncInfo *funcInfo, Js::RegSlot lhsLocation, Js { if (funcInfo->byteCodeFunction->GetIsStrictMode() && !funcInfo->IsGlobalFunction() && !funcInfo->IsLambda()) { - m_writer.Reg2(Js::OpCode::StrictLdThis, lhsLocation, fromRegister); + if (lhsLocation != fromRegister) + { + m_writer.Reg2(Js::OpCode::Ld_A, lhsLocation, fromRegister); + } } else { @@ -2400,10 +2448,12 @@ void ByteCodeGenerator::HomeArguments(FuncInfo *funcInfo) // Transfer formal parameters to their home locations on the local frame. if (funcInfo->GetHasArguments()) { - if (funcInfo->root->pnodeRest != nullptr) + ParseNodePtr rest = funcInfo->root->pnodeRest; + if (rest != nullptr && rest->IsVarLetOrConst()) { // Since we don't have to iterate over arguments here, we'll trust the location to be correct. - EmitLoadFormalIntoRegister(funcInfo->root->pnodeRest, funcInfo->root->pnodeRest->sym->GetLocation() + 1, funcInfo); + Symbol* sym = rest->AsParseNodeVar()->sym; + EmitLoadFormalIntoRegister(rest, sym->GetLocation() + 1, funcInfo); } // The arguments object creation helper does this work for us. @@ -2596,7 +2646,7 @@ void ByteCodeGenerator::EmitDefaultArgs(FuncInfo *funcInfo, ParseNodeFnc *pnodeF { uint beginOffset = m_writer.GetCurrentOffset(); - auto emitDefaultArg = [&](ParseNode *pnodeArg) + MapFormals(pnodeFnc, [&](ParseNode *pnodeArg) { if (pnodeArg->nop == knopParamPattern) { @@ -2670,62 +2720,7 @@ void ByteCodeGenerator::EmitDefaultArgs(FuncInfo *funcInfo, ParseNodeFnc *pnodeF this->EndStatement(pnodeArg); } - }; - - // If the function is async, we wrap the default arguments in a try catch and reject a Promise in case of error. - if (pnodeFnc->IsAsync()) - { - uint cacheId; - Js::ByteCodeLabel catchLabel = m_writer.DefineLabel(); - Js::ByteCodeLabel doneLabel = m_writer.DefineLabel(); - Js::RegSlot catchArgLocation = funcInfo->AcquireTmpRegister(); - Js::RegSlot promiseLocation = funcInfo->AcquireTmpRegister(); - Js::RegSlot rejectLocation = funcInfo->AcquireTmpRegister(); - - // try - m_writer.RecordCrossFrameEntryExitRecord(/* isEnterBlock = */ true); - m_writer.Br(Js::OpCode::TryCatch, catchLabel); - - // Rest cannot have a default argument, so we ignore it. - MapFormalsWithoutRest(pnodeFnc, emitDefaultArg); - - m_writer.RecordCrossFrameEntryExitRecord(/* isEnterBlock = */ false); - m_writer.Empty(Js::OpCode::Leave); - m_writer.Br(doneLabel); - - // catch - m_writer.MarkLabel(catchLabel); - m_writer.Reg1(Js::OpCode::Catch, catchArgLocation); - - m_writer.RecordCrossFrameEntryExitRecord(/* isEnterBlock = */ true); - m_writer.Empty(Js::OpCode::Nop); - - // return Promise.reject(error); - cacheId = funcInfo->FindOrAddRootObjectInlineCacheId(Js::PropertyIds::Promise, false, false); - m_writer.PatchableRootProperty(Js::OpCode::LdRootFld, promiseLocation, cacheId, false, false); - - EmitInvoke(rejectLocation, promiseLocation, Js::PropertyIds::reject, this, funcInfo, catchArgLocation); - - m_writer.Reg2(Js::OpCode::Ld_A, ByteCodeGenerator::ReturnRegister, rejectLocation); - - m_writer.RecordCrossFrameEntryExitRecord(/* isEnterBlock = */ false); - m_writer.Empty(Js::OpCode::Leave); - m_writer.Br(funcInfo->singleExit); - m_writer.Empty(Js::OpCode::Leave); - - m_writer.MarkLabel(doneLabel); - - this->SetHasTry(true); - - funcInfo->ReleaseTmpRegister(rejectLocation); - funcInfo->ReleaseTmpRegister(promiseLocation); - funcInfo->ReleaseTmpRegister(catchArgLocation); - } - else - { - // Rest cannot have a default argument, so we ignore it. - MapFormalsWithoutRest(pnodeFnc, emitDefaultArg); - } + }); if (m_writer.GetCurrentOffset() > beginOffset) { @@ -2900,6 +2895,7 @@ void ByteCodeGenerator::EmitOneFunction(ParseNodeFnc *pnodeFnc) byteCodeFunction->AllocateLiteralRegexArray(); m_callSiteId = 0; + m_callApplyCallSiteCount = 0; m_writer.Begin(byteCodeFunction, alloc, this->DoJitLoopBodies(funcInfo), funcInfo->hasLoop, this->IsInDebugMode()); this->PushFuncInfo(_u("EmitOneFunction"), funcInfo); @@ -2912,6 +2908,11 @@ void ByteCodeGenerator::EmitOneFunction(ParseNodeFnc *pnodeFnc) LoadAllConstants(funcInfo); HomeArguments(funcInfo); + if (funcInfo->root->IsAsync()) + { + Writer()->Reg1(Js::OpCode::NewAwaitObject, funcInfo->awaitRegister); + } + if (!funcInfo->IsBodyAndParamScopeMerged()) { byteCodeFunction->SetParamAndBodyScopeNotMerged(); @@ -3009,18 +3010,6 @@ void ByteCodeGenerator::EmitOneFunction(ParseNodeFnc *pnodeFnc) } } - // If the function has non simple parameter list, the params needs to be evaluated when the generator object is created - // (that is when the function is called). This yield opcode is to mark the begining of the function body. - // TODO: Inserting a yield should have almost no impact on perf as it is a direct return from the function. But this needs - // to be verified. Ideally if the function has simple parameter list then we can avoid inserting the opcode and the additional call. - if (pnodeFnc->IsGenerator()) - { - Js::RegSlot tempReg = funcInfo->AcquireTmpRegister(); - EmitYield(funcInfo->AssignUndefinedConstRegister(), tempReg, this, funcInfo); - m_writer.Reg1(Js::OpCode::Unused, tempReg); - funcInfo->ReleaseTmpRegister(tempReg); - } - DefineUserVars(funcInfo); // Emit all scope-wide function definitions before emitting function bodies @@ -3034,6 +3023,14 @@ void ByteCodeGenerator::EmitOneFunction(ParseNodeFnc *pnodeFnc) DefineFunctions(funcInfo); } + // If the function has non simple parameter list, the params needs to be evaluated when the generator object is created + // (that is when the function is called). So insert an extra yield we can execute up to, to do this. + // In a Module we execute until this yield to hoist functions accross modules. + if (pnodeFnc->IsGenerator() && (pnodeFnc->HasNonSimpleParameterList() || pnodeFnc->IsModule())) + { + EmitStartupYield(this, funcInfo); + } + if (pnodeFnc->HasNonSimpleParameterList() || !funcInfo->IsBodyAndParamScopeMerged()) { Assert(pnodeFnc->HasNonSimpleParameterList() || CONFIG_FLAG(ForceSplitScope)); @@ -3050,12 +3047,6 @@ void ByteCodeGenerator::EmitOneFunction(ParseNodeFnc *pnodeFnc) MapFormalsWithoutRest(pnodeFnc, [&](ParseNode *pnodeArg) { EmitPropStore(pnodeArg->AsParseNodeVar()->sym->GetLocation(), pnodeArg->AsParseNodeVar()->sym, pnodeArg->AsParseNodeVar()->pid, funcInfo); }); } - // Rest needs to trigger use before declaration until all default args have been processed. - if (pnodeFnc->pnodeRest != nullptr) - { - pnodeFnc->pnodeRest->sym->SetNeedDeclaration(false); - } - Js::RegSlot formalsUpperBound = Js::Constants::NoRegister; // Needed for tracking the last RegSlot in the param scope if (!funcInfo->IsBodyAndParamScopeMerged()) { @@ -3185,6 +3176,13 @@ void ByteCodeGenerator::EmitOneFunction(ParseNodeFnc *pnodeFnc) Assert(this->TopFuncInfo() == funcInfo); PopFuncInfo(_u("EmitOneFunction")); m_writer.SetCallSiteCount(m_callSiteId); + m_writer.SetCallApplyCallsiteCount(m_callApplyCallSiteCount); +#if ENABLE_NATIVE_CODEGEN + if (funcInfo->callSiteToCallApplyCallSiteMap) + { + this->MapCallSiteToCallApplyCallSiteMap(funcInfo); + } +#endif #ifdef LOG_BYTECODE_AST_RATIO m_writer.End(funcInfo->root->astSize, this->maxAstSize); #else @@ -3362,6 +3360,21 @@ void ByteCodeGenerator::MapReferencedPropertyIds(FuncInfo * funcInfo) #endif } +#if ENABLE_NATIVE_CODEGEN +void ByteCodeGenerator::MapCallSiteToCallApplyCallSiteMap(FuncInfo * funcInfo) +{ + Js::FunctionBody * functionBody = funcInfo->GetParsedFunctionBody(); + + if (functionBody->CreateCallSiteToCallApplyCallSiteArray()) + { + funcInfo->callSiteToCallApplyCallSiteMap->Map([functionBody](Js::ProfileId callSiteId, Js::ProfileId callApplyCallSiteId) + { + functionBody->GetCallSiteToCallApplyCallSiteArray()[callSiteId] = callApplyCallSiteId; + }); + } +} +#endif + void ByteCodeGenerator::EmitScopeList(ParseNode *pnode, ParseNode *breakOnBodyScopeNode) { while (pnode) @@ -3997,13 +4010,13 @@ void ByteCodeGenerator::StartEmitCatch(ParseNodeCatch *pnodeCatch) scope->SetIsObject(); } - ParseNode * pnodeParam = pnodeCatch->GetParam(); - if (pnodeParam->nop == knopParamPattern) + if (pnodeCatch->HasPatternParam()) { + ParseNode *pnode1 = pnodeCatch->GetParam()->AsParseNodeParamPattern()->pnode1; scope->SetCapturesAll(funcInfo->GetCallsEval() || funcInfo->GetChildCallsEval()); scope->SetMustInstantiate(scope->Count() > 0 && (scope->GetMustInstantiate() || scope->GetCapturesAll() || funcInfo->IsGlobalFunction())); - Parser::MapBindIdentifier(pnodeParam->AsParseNodeParamPattern()->pnode1, [&](ParseNodePtr item) + Parser::MapBindIdentifier(pnode1, [&](ParseNodePtr item) { Symbol *sym = item->AsParseNodeVar()->sym; if (funcInfo->IsGlobalFunction()) @@ -4022,13 +4035,10 @@ void ByteCodeGenerator::StartEmitCatch(ParseNodeCatch *pnodeCatch) sym->EnsureScopeSlot(this, funcInfo); } }); - - // In the case of pattern we will always going to push the scope. - PushScope(scope); } - else + else if (pnodeCatch->HasParam()) { - Symbol *sym = pnodeParam->AsParseNodeName()->sym; + Symbol *sym = pnodeCatch->GetParam()->AsParseNodeName()->sym; // Catch object is stored in the catch scope if there may be an ambiguous lookup or a var declaration that hides it. scope->SetCapturesAll(funcInfo->GetCallsEval() || funcInfo->GetChildCallsEval() || sym->GetHasNonLocalReference()); @@ -4054,9 +4064,9 @@ void ByteCodeGenerator::StartEmitCatch(ParseNodeCatch *pnodeCatch) sym->EnsureScopeSlot(this, funcInfo); } } - - PushScope(scope); } + + PushScope(scope); } void ByteCodeGenerator::EndEmitCatch(ParseNodeCatch *pnodeCatch) @@ -4192,8 +4202,6 @@ Js::RegSlot ByteCodeGenerator::PrependLocalScopes(Js::RegSlot evalEnv, Js::RegSl void ByteCodeGenerator::EmitLoadInstance(Symbol *sym, IdentPtr pid, Js::RegSlot *pThisLocation, Js::RegSlot *pInstLocation, FuncInfo *funcInfo) { - Js::ByteCodeLabel doneLabel = 0; - bool fLabelDefined = false; Js::RegSlot scopeLocation = Js::Constants::NoRegister; Js::RegSlot thisLocation = *pThisLocation; Js::RegSlot instLocation = *pInstLocation; @@ -4208,6 +4216,8 @@ void ByteCodeGenerator::EmitLoadInstance(Symbol *sym, IdentPtr pid, Js::RegSlot return; } + JsUtil::List recList(this->alloc); + for (;;) { scope = this->FindScopeForSym(symScope, scope, &envIndex, funcInfo); @@ -4226,8 +4236,6 @@ void ByteCodeGenerator::EmitLoadInstance(Symbol *sym, IdentPtr pid, Js::RegSlot if (instLocation == Js::Constants::NoRegister) { instLocation = funcInfo->AcquireTmpRegister(); - // The "this" pointer will not be the same as the instance, so give it its own register. - thisLocation = funcInfo->AcquireTmpRegister(); } } @@ -4244,90 +4252,69 @@ void ByteCodeGenerator::EmitLoadInstance(Symbol *sym, IdentPtr pid, Js::RegSlot // Found a scope to which the property may have been added. Assert(scope && scope->GetIsDynamic()); + AssertOrFailFast(scope->GetIsObject()); - if (!fLabelDefined) - { - fLabelDefined = true; - doneLabel = this->m_writer.DefineLabel(); - } - - Js::ByteCodeLabel nextLabel = this->m_writer.DefineLabel(); + // Record dynamic scopes, in order. Define a label for each one. Remember whether we've seen a 'with'. + // For each dynamic scope, emit BrOnHas[Env,Local]Property $Ln, where n is the scope's position in the list + // Then emit code for default access (i.e., static binding). If no 'with', do not create a temp for 'this', just use 'undefined'. + // End static portion with 'Br $Ldone'. + // Then, for each item in list, emit: + // $Ln: + // copy dynamic scope to 'instance' temp, using 'reuse_loc' form of the opcode + // do the same for 'this' temp', only if we've seen a 'with' + // if not the last item in the list, Br $Ldone + + DynamicLoadRecord rec; + + rec.label = this->m_writer.DefineLabel(); Js::PropertyId propertyId = sym ? sym->EnsurePosition(this) : pid->GetPropertyId(); + Js::PropertyIdIndexType propertyIndex = funcInfo->FindOrAddReferencedPropertyId(propertyId); - bool unwrapWithObj = scope->GetScopeType() == ScopeType_With && scriptContext->GetConfig()->IsES6UnscopablesEnabled(); - if (envIndex != -1) + if (scope->GetScopeType() != ScopeType_With) { - this->m_writer.BrEnvProperty( - Js::OpCode::BrOnNoEnvProperty, nextLabel, - funcInfo->FindOrAddReferencedPropertyId(propertyId), - envIndex + Js::FrameDisplay::GetOffsetOfScopes() / sizeof(Js::Var)); - - AssertOrFailFast(scope->GetIsObject()); - - if (unwrapWithObj) + if (envIndex == -1) { - Js::RegSlot tmpReg = funcInfo->AcquireTmpRegister(); - - this->m_writer.SlotI1(Js::OpCode::LdEnvObj, tmpReg, - envIndex + Js::FrameDisplay::GetOffsetOfScopes() / sizeof(Js::Var)); - - this->m_writer.Reg2(Js::OpCode::UnwrapWithObj, instLocation, tmpReg); - if (thisLocation != Js::Constants::NoRegister) - { - this->m_writer.Reg2(Js::OpCode::UnwrapWithObj, thisLocation, tmpReg); - } - - funcInfo->ReleaseTmpRegister(tmpReg); + // The local body scope. Branch cannot bail on implicit calls. + + this->m_writer.BrLocalProperty(Js::OpCode::BrOnHasLocalProperty, rec.label, propertyIndex); + rec.kind = DynamicLoadKind::Local; } else { - this->m_writer.SlotI1(Js::OpCode::LdEnvObj, instLocation, - envIndex + Js::FrameDisplay::GetOffsetOfScopes() / sizeof(Js::Var)); + // Function body scope in an enclosing function that calls eval. + // Emit a branch opcode that does not require bail on implicit calls. - if (thisLocation != Js::Constants::NoRegister) - { - this->m_writer.Reg2(Js::OpCode::Ld_A, thisLocation, funcInfo->undefinedConstantRegister); - } + uint32 frameDisplayIndex = envIndex + Js::FrameDisplay::GetOffsetOfScopes() / sizeof(Js::Var); + this->m_writer.BrEnvProperty(Js::OpCode::BrOnHasLocalEnvProperty, rec.label, propertyIndex, frameDisplayIndex); + rec.kind = DynamicLoadKind::Env; + rec.index = frameDisplayIndex; } } - else if (scopeLocation != Js::Constants::NoRegister && scopeLocation == funcInfo->frameObjRegister) + else { - this->m_writer.BrLocalProperty(Js::OpCode::BrOnNoLocalProperty, nextLabel, - funcInfo->FindOrAddReferencedPropertyId(propertyId)); - - Assert(!unwrapWithObj); - AssertOrFailFast(scope->GetIsObject()); - this->m_writer.Reg1(Js::OpCode::LdLocalObj, instLocation); - if (thisLocation != Js::Constants::NoRegister) + if (thisLocation == Js::Constants::NoRegister) { - this->m_writer.Reg2(Js::OpCode::Ld_A, thisLocation, funcInfo->undefinedConstantRegister); + thisLocation = funcInfo->AcquireTmpRegister(); } - } - else - { - this->m_writer.BrProperty(Js::OpCode::BrOnNoProperty, nextLabel, scopeLocation, - funcInfo->FindOrAddReferencedPropertyId(propertyId)); - if (unwrapWithObj) + if (envIndex == -1) { - this->m_writer.Reg2(Js::OpCode::UnwrapWithObj, instLocation, scopeLocation); - if (thisLocation != Js::Constants::NoRegister) - { - this->m_writer.Reg2(Js::OpCode::UnwrapWithObj, thisLocation, scopeLocation); - } + // With object declared in this function. HasProperty may have implicit calls. + this->m_writer.BrProperty(Js::OpCode::BrOnHasProperty, rec.label, scopeLocation, propertyIndex); + rec.kind = DynamicLoadKind::LocalWith; + rec.instance = scopeLocation; } else { - this->m_writer.Reg2(Js::OpCode::Ld_A, instLocation, scopeLocation); - if (thisLocation != Js::Constants::NoRegister) - { - this->m_writer.Reg2(Js::OpCode::Ld_A, thisLocation, funcInfo->undefinedConstantRegister); - } + // With object declared in an enclosing function. HasProperty may have implicit calls. + uint32 frameDisplayIndex = envIndex + Js::FrameDisplay::GetOffsetOfScopes() / sizeof(Js::Var); + this->m_writer.BrEnvProperty(Js::OpCode::BrOnHasEnvProperty, rec.label, propertyIndex, frameDisplayIndex); + rec.kind = DynamicLoadKind::EnvWith; + rec.index = frameDisplayIndex; } } - this->m_writer.Br(doneLabel); - this->m_writer.MarkLabel(nextLabel); + recList.Add(rec); } if (sym == nullptr || sym->GetIsGlobal()) @@ -4341,10 +4328,6 @@ void ByteCodeGenerator::EmitLoadInstance(Symbol *sym, IdentPtr pid, Js::RegSlot instLocation = funcInfo->AcquireTmpRegister(); } - // TODO: It should be possible to avoid this double call to ScopedLdInst by having it return both - // results at once. The reason for the uncertainty here is that we don't know whether the callee - // belongs to a "with" object. If it does, we have to pass the "with" object as "this"; in all other - // cases, we pass "undefined". For now, there are apparently no significant performance issues. Js::PropertyId propertyId = sym ? sym->EnsurePosition(this) : pid->GetPropertyId(); if (thisLocation == Js::Constants::NoRegister) @@ -4412,13 +4395,68 @@ void ByteCodeGenerator::EmitLoadInstance(Symbol *sym, IdentPtr pid, Js::RegSlot } } - *pThisLocation = thisLocation; - *pInstLocation = instLocation; - - if (fLabelDefined) + if (!recList.Empty()) { + Assert(instLocation != Js::Constants::NoRegister); + Assert(thisLocation != Js::Constants::NoRegister); + + Js::ByteCodeLabel doneLabel = this->m_writer.DefineLabel(); + this->m_writer.Br(doneLabel); + + for (int i = 0;; i++) + { + this->m_writer.MarkLabel(recList.Item(i).label); + switch(recList.Item(i).kind) + { + case DynamicLoadKind::Local: + this->m_writer.Reg1(Js::OpCode::LdLocalObj_ReuseLoc, instLocation); + if (thisLocation != funcInfo->undefinedConstantRegister) + { + Assert(thisLocation != instLocation); + this->m_writer.Reg2(Js::OpCode::Ld_A_ReuseLoc, thisLocation, funcInfo->undefinedConstantRegister); + } + break; + + case DynamicLoadKind::Env: + this->m_writer.SlotI1(Js::OpCode::LdEnvObj_ReuseLoc, instLocation, recList.Item(i).index); + if (thisLocation != funcInfo->undefinedConstantRegister) + { + Assert(thisLocation != instLocation); + this->m_writer.Reg2(Js::OpCode::Ld_A_ReuseLoc, thisLocation, funcInfo->undefinedConstantRegister); + } + break; + + case DynamicLoadKind::LocalWith: + this->m_writer.Reg2(Js::OpCode::UnwrapWithObj_ReuseLoc, instLocation, recList.Item(i).instance); + this->m_writer.Reg2(Js::OpCode::UnwrapWithObj_ReuseLoc, thisLocation, recList.Item(i).instance); + break; + + case DynamicLoadKind::EnvWith: + { + Js::RegSlot tmpReg = funcInfo->AcquireTmpRegister(); + this->m_writer.SlotI1(Js::OpCode::LdEnvObj, tmpReg, recList.Item(i).index); + this->m_writer.Reg2(Js::OpCode::UnwrapWithObj_ReuseLoc, instLocation, tmpReg); + this->m_writer.Reg2(Js::OpCode::UnwrapWithObj_ReuseLoc, thisLocation, tmpReg); + funcInfo->ReleaseTmpRegister(tmpReg); + break; + } + + default: + AssertOrFailFast(UNREACHED); + } + + if (i == recList.Count() - 1) + { + break; + } + this->m_writer.Br(doneLabel); + } + this->m_writer.MarkLabel(doneLabel); } + + *pThisLocation = thisLocation; + *pInstLocation = instLocation; } void ByteCodeGenerator::EmitGlobalFncDeclInit(Js::RegSlot rhsLocation, Js::PropertyId propertyId, FuncInfo * funcInfo) @@ -4601,8 +4639,6 @@ ByteCodeGenerator::GetInitFldOp(Scope *scope, Js::RegSlot scopeLocation, FuncInf void ByteCodeGenerator::EmitPropStore(Js::RegSlot rhsLocation, Symbol *sym, IdentPtr pid, FuncInfo *funcInfo, bool isLetDecl, bool isConstDecl, bool isFncDeclVar, bool skipUseBeforeDeclarationCheck) { - Js::ByteCodeLabel doneLabel = 0; - bool fLabelDefined = false; Js::PropertyId envIndex = -1; Scope *symScope = sym == nullptr || sym->GetIsGlobal() ? this->globalScope : sym->GetScope(); Assert(symScope); @@ -4611,7 +4647,6 @@ void ByteCodeGenerator::EmitPropStore(Js::RegSlot rhsLocation, Symbol *sym, Iden // to it, skipping over any dynamic scopes that may lie in between. Scope *scope = nullptr; Js::RegSlot scopeLocation = Js::Constants::NoRegister; - bool scopeAcquired = false; Js::OpCode op; if (sym && sym->GetIsModuleExportStorage()) @@ -4638,6 +4673,8 @@ void ByteCodeGenerator::EmitPropStore(Js::RegSlot rhsLocation, Symbol *sym, Iden scopeLocation = scope->GetLocation(); } + JsUtil::List recList(this->alloc); + while (!isFncDeclVar) { scope = this->FindScopeForSym(symScope, scope, &envIndex, funcInfo); @@ -4658,78 +4695,48 @@ void ByteCodeGenerator::EmitPropStore(Js::RegSlot rhsLocation, Symbol *sym, Iden // Found a scope to which the property may have been added. Assert(scope && scope->GetIsDynamic()); + AssertOrFailFast(scope->GetIsObject()); - if (!fLabelDefined) - { - fLabelDefined = true; - doneLabel = this->m_writer.DefineLabel(); - } - Js::ByteCodeLabel nextLabel = this->m_writer.DefineLabel(); + DynamicLoadRecord rec; + + rec.label = this->m_writer.DefineLabel(); Js::PropertyId propertyId = sym ? sym->EnsurePosition(this) : pid->GetPropertyId(); + Js::PropertyIdIndexType propertyIndex = funcInfo->FindOrAddReferencedPropertyId(propertyId); - Js::RegSlot unwrappedScopeLocation = scopeLocation; - bool unwrapWithObj = scope->GetScopeType() == ScopeType_With && scriptContext->GetConfig()->IsES6UnscopablesEnabled(); - if (envIndex != -1) + if (scope->GetScopeType() != ScopeType_With) { - this->m_writer.BrEnvProperty( - Js::OpCode::BrOnNoEnvProperty, - nextLabel, - funcInfo->FindOrAddReferencedPropertyId(propertyId), - envIndex + Js::FrameDisplay::GetOffsetOfScopes() / sizeof(Js::Var)); - - Js::RegSlot instLocation = funcInfo->AcquireTmpRegister(); - - AssertOrFailFast(scope->GetIsObject()); - this->m_writer.SlotI1( - Js::OpCode::LdEnvObj, - instLocation, - envIndex + Js::FrameDisplay::GetOffsetOfScopes() / sizeof(Js::Var)); - - if (unwrapWithObj) + if (envIndex == -1) { - this->m_writer.Reg2(Js::OpCode::UnwrapWithObj, instLocation, instLocation); + this->m_writer.BrLocalProperty(Js::OpCode::BrOnHasLocalProperty, rec.label, propertyIndex); + rec.kind = DynamicLoadKind::Local; + rec.instance = scopeLocation; + } + else + { + uint32 frameDisplayIndex = envIndex + Js::FrameDisplay::GetOffsetOfScopes() / sizeof(Js::Var); + this->m_writer.BrEnvProperty(Js::OpCode::BrOnHasLocalEnvProperty, rec.label, propertyIndex, frameDisplayIndex); + rec.kind = DynamicLoadKind::Env; + rec.index = frameDisplayIndex; } - - this->m_writer.PatchableProperty( - Js::OpCode::StFld, - rhsLocation, - instLocation, - funcInfo->FindOrAddInlineCacheId(instLocation, propertyId, false, true)); - - funcInfo->ReleaseTmpRegister(instLocation); - } - else if (scopeLocation != Js::Constants::NoRegister && scopeLocation == funcInfo->frameObjRegister) - { - this->m_writer.BrLocalProperty(Js::OpCode::BrOnNoLocalProperty, nextLabel, - funcInfo->FindOrAddReferencedPropertyId(propertyId)); - - Assert(!unwrapWithObj); - this->m_writer.ElementP(Js::OpCode::StLocalFld, rhsLocation, - funcInfo->FindOrAddInlineCacheId(scopeLocation, propertyId, false, true)); } else { - this->m_writer.BrProperty(Js::OpCode::BrOnNoProperty, nextLabel, scopeLocation, - funcInfo->FindOrAddReferencedPropertyId(propertyId)); - - if (unwrapWithObj) + if (envIndex == -1) { - unwrappedScopeLocation = funcInfo->AcquireTmpRegister(); - this->m_writer.Reg2(Js::OpCode::UnwrapWithObj, unwrappedScopeLocation, scopeLocation); - scopeLocation = unwrappedScopeLocation; + this->m_writer.BrProperty(Js::OpCode::BrOnHasProperty, rec.label, scopeLocation, propertyIndex); + rec.kind = DynamicLoadKind::LocalWith; + rec.instance = scopeLocation; } - - uint cacheId = funcInfo->FindOrAddInlineCacheId(scopeLocation, propertyId, false, true); - this->m_writer.PatchableProperty(Js::OpCode::StFld, rhsLocation, scopeLocation, cacheId); - - if (unwrapWithObj) + else { - funcInfo->ReleaseTmpRegister(unwrappedScopeLocation); + uint32 frameDisplayIndex = envIndex + Js::FrameDisplay::GetOffsetOfScopes() / sizeof(Js::Var); + this->m_writer.BrEnvProperty(Js::OpCode::BrOnHasEnvProperty, rec.label, propertyIndex, frameDisplayIndex); + rec.kind = DynamicLoadKind::EnvWith; + rec.index = frameDisplayIndex; } } - this->m_writer.Br(doneLabel); - this->m_writer.MarkLabel(nextLabel); + recList.Add(rec); } // Arrived at the scope in which the property was defined. @@ -4771,7 +4778,7 @@ void ByteCodeGenerator::EmitPropStore(Js::RegSlot rhsLocation, Symbol *sym, Iden } else { - this->EmitPatchableRootProperty(GetStFldOpCode(funcInfo, true, isLetDecl, isConstDecl, false), rhsLocation, propertyId, false, true, funcInfo); + this->EmitPatchableRootProperty(GetStFldOpCode(funcInfo, true, isLetDecl, isConstDecl, false, forceStrictModeForClassComputedPropertyName), rhsLocation, propertyId, false, true, funcInfo); } } else if (sym->GetIsFuncExpr()) @@ -4845,14 +4852,63 @@ void ByteCodeGenerator::EmitPropStore(Js::RegSlot rhsLocation, Symbol *sym, Iden } } } - if (fLabelDefined) - { - this->m_writer.MarkLabel(doneLabel); - } - if (scopeAcquired) + + if (!recList.Empty()) { - funcInfo->ReleaseTmpRegister(scopeLocation); + Js::ByteCodeLabel doneLabel = this->m_writer.DefineLabel(); + this->m_writer.Br(doneLabel); + + for (int i = 0;; i++) + { + uint cacheId; + Js::RegSlot instLocation; + Js::PropertyId propertyId = sym ? sym->EnsurePosition(this) : pid->GetPropertyId(); + + this->m_writer.MarkLabel(recList.Item(i).label); + switch(recList.Item(i).kind) + { + case DynamicLoadKind::Local: + cacheId = funcInfo->FindOrAddInlineCacheId(recList.Item(i).instance, propertyId, false, true); + this->m_writer.ElementP(Js::OpCode::StLocalFld, rhsLocation, cacheId); + break; + + case DynamicLoadKind::Env: + instLocation = funcInfo->AcquireTmpRegister(); + this->m_writer.SlotI1(Js::OpCode::LdEnvObj, instLocation, recList.Item(i).index); + cacheId = funcInfo->FindOrAddInlineCacheId(instLocation, propertyId, false, true); + this->m_writer.PatchableProperty(Js::OpCode::StFld, rhsLocation, instLocation, cacheId); + funcInfo->ReleaseTmpRegister(instLocation); + break; + + case DynamicLoadKind::LocalWith: + instLocation = funcInfo->AcquireTmpRegister(); + this->m_writer.Reg2(Js::OpCode::UnwrapWithObj, instLocation, recList.Item(i).instance); + cacheId = funcInfo->FindOrAddInlineCacheId(instLocation, propertyId, false, true); + this->m_writer.PatchableProperty(Js::OpCode::StFld, rhsLocation, instLocation, cacheId); + funcInfo->ReleaseTmpRegister(instLocation); + break; + + case DynamicLoadKind::EnvWith: + instLocation = funcInfo->AcquireTmpRegister(); + this->m_writer.SlotI1(Js::OpCode::LdEnvObj, instLocation, recList.Item(i).index); + this->m_writer.Reg2(Js::OpCode::UnwrapWithObj, instLocation, instLocation); + cacheId = funcInfo->FindOrAddInlineCacheId(instLocation, propertyId, false, true); + this->m_writer.PatchableProperty(Js::OpCode::StFld, rhsLocation, instLocation, cacheId); + funcInfo->ReleaseTmpRegister(instLocation); + break; + + default: + AssertOrFailFast(UNREACHED); + } + + if (i == recList.Count() - 1) + { + break; + } + this->m_writer.Br(doneLabel); + } + this->m_writer.MarkLabel(doneLabel); } } @@ -4981,8 +5037,6 @@ void ByteCodeGenerator::EmitPropLoad(Js::RegSlot lhsLocation, Symbol *sym, Ident // (TODO: optimize this by getting the sym from its normal location if there are no non-local defs.) // Otherwise, just copy the value to the lhsLocation. - Js::ByteCodeLabel doneLabel = 0; - bool fLabelDefined = false; Js::RegSlot scopeLocation = Js::Constants::NoRegister; Js::PropertyId envIndex = -1; Scope *scope = nullptr; @@ -4995,6 +5049,8 @@ void ByteCodeGenerator::EmitPropLoad(Js::RegSlot lhsLocation, Symbol *sym, Ident return; } + JsUtil::List recList(this->alloc); + for (;;) { scope = this->FindScopeForSym(symScope, scope, &envIndex, funcInfo); @@ -5012,79 +5068,48 @@ void ByteCodeGenerator::EmitPropLoad(Js::RegSlot lhsLocation, Symbol *sym, Ident // Found a scope to which the property may have been added. Assert(scope && scope->GetIsDynamic()); + AssertOrFailFast(scope->GetIsObject()); - if (!fLabelDefined) - { - fLabelDefined = true; - doneLabel = this->m_writer.DefineLabel(); - } + DynamicLoadRecord rec; - Js::ByteCodeLabel nextLabel = this->m_writer.DefineLabel(); + rec.label = this->m_writer.DefineLabel(); Js::PropertyId propertyId = sym ? sym->EnsurePosition(this) : pid->GetPropertyId(); + Js::PropertyIdIndexType propertyIndex = funcInfo->FindOrAddReferencedPropertyId(propertyId); - Js::RegSlot unwrappedScopeLocation = Js::Constants::NoRegister; - bool unwrapWithObj = scope->GetScopeType() == ScopeType_With && scriptContext->GetConfig()->IsES6UnscopablesEnabled(); - if (envIndex != -1) + if (scope->GetScopeType() != ScopeType_With) { - this->m_writer.BrEnvProperty( - Js::OpCode::BrOnNoEnvProperty, - nextLabel, - funcInfo->FindOrAddReferencedPropertyId(propertyId), - envIndex + Js::FrameDisplay::GetOffsetOfScopes() / sizeof(Js::Var)); - - Js::RegSlot instLocation = funcInfo->AcquireTmpRegister(); - - AssertOrFailFast(scope->GetIsObject()); - this->m_writer.SlotI1( - Js::OpCode::LdEnvObj, - instLocation, - envIndex + Js::FrameDisplay::GetOffsetOfScopes() / sizeof(Js::Var)); - - if (unwrapWithObj) + if (envIndex == -1) { - this->m_writer.Reg2(Js::OpCode::UnwrapWithObj, instLocation, instLocation); + this->m_writer.BrLocalProperty(Js::OpCode::BrOnHasLocalProperty, rec.label, propertyIndex); + rec.kind = DynamicLoadKind::Local; + rec.instance = scopeLocation; + } + else + { + uint32 frameDisplayIndex = envIndex + Js::FrameDisplay::GetOffsetOfScopes() / sizeof(Js::Var); + this->m_writer.BrEnvProperty(Js::OpCode::BrOnHasLocalEnvProperty, rec.label, propertyIndex, frameDisplayIndex); + rec.kind = DynamicLoadKind::Env; + rec.index = frameDisplayIndex; } - - this->m_writer.PatchableProperty( - Js::OpCode::LdFld, - lhsLocation, - instLocation, - funcInfo->FindOrAddInlineCacheId(instLocation, propertyId, false, false)); - - funcInfo->ReleaseTmpRegister(instLocation); - } - else if (scopeLocation != Js::Constants::NoRegister && scopeLocation == funcInfo->frameObjRegister) - { - this->m_writer.BrLocalProperty(Js::OpCode::BrOnNoLocalProperty, nextLabel, - funcInfo->FindOrAddReferencedPropertyId(propertyId)); - - Assert(!unwrapWithObj); - this->m_writer.ElementP(Js::OpCode::LdLocalFld, lhsLocation, - funcInfo->FindOrAddInlineCacheId(scopeLocation, propertyId, false, false)); } else { - this->m_writer.BrProperty(Js::OpCode::BrOnNoProperty, nextLabel, scopeLocation, - funcInfo->FindOrAddReferencedPropertyId(propertyId)); - - if (unwrapWithObj) + if (envIndex == -1) { - unwrappedScopeLocation = funcInfo->AcquireTmpRegister(); - this->m_writer.Reg2(Js::OpCode::UnwrapWithObj, unwrappedScopeLocation, scopeLocation); - scopeLocation = unwrappedScopeLocation; + this->m_writer.BrProperty(Js::OpCode::BrOnHasProperty, rec.label, scopeLocation, propertyIndex); + rec.kind = DynamicLoadKind::LocalWith; + rec.instance = scopeLocation; } - - uint cacheId = funcInfo->FindOrAddInlineCacheId(scopeLocation, propertyId, false, false); - this->m_writer.PatchableProperty(Js::OpCode::LdFld, lhsLocation, scopeLocation, cacheId); - - if (unwrapWithObj) + else { - funcInfo->ReleaseTmpRegister(unwrappedScopeLocation); + uint32 frameDisplayIndex = envIndex + Js::FrameDisplay::GetOffsetOfScopes() / sizeof(Js::Var); + this->m_writer.BrEnvProperty(Js::OpCode::BrOnHasEnvProperty, rec.label, propertyIndex, frameDisplayIndex); + rec.kind = DynamicLoadKind::EnvWith; + rec.index = frameDisplayIndex; } } - this->m_writer.Br(doneLabel); - this->m_writer.MarkLabel(nextLabel); + recList.Add(rec); } // Arrived at the scope in which the property was defined. @@ -5157,7 +5182,8 @@ void ByteCodeGenerator::EmitPropLoad(Js::RegSlot lhsLocation, Symbol *sym, Ident opcode = Js::OpCode::LdUndef; break; case Js::PropertyIds::__chakraLibrary: - if (CONFIG_FLAG(LdChakraLib)) { + if (CONFIG_FLAG(LdChakraLib) || CONFIG_FLAG(TestChakraLib)) + { opcode = Js::OpCode::LdChakraLib; } break; @@ -5221,10 +5247,64 @@ void ByteCodeGenerator::EmitPropLoad(Js::RegSlot lhsLocation, Symbol *sym, Ident } } - if (fLabelDefined) + if (!recList.Empty()) { + Js::ByteCodeLabel doneLabel = this->m_writer.DefineLabel(); + this->m_writer.Br(doneLabel); + + for (int i = 0;; i++) + { + uint cacheId; + Js::RegSlot instLocation; + Js::PropertyId propertyId = sym ? sym->EnsurePosition(this) : pid->GetPropertyId(); + + this->m_writer.MarkLabel(recList.Item(i).label); + switch(recList.Item(i).kind) + { + case DynamicLoadKind::Local: + cacheId = funcInfo->FindOrAddInlineCacheId(recList.Item(i).instance, propertyId, false, false); + this->m_writer.ElementP(Js::OpCode::LdLocalFld_ReuseLoc, lhsLocation, cacheId); + break; + + case DynamicLoadKind::Env: + instLocation = funcInfo->AcquireTmpRegister(); + this->m_writer.SlotI1(Js::OpCode::LdEnvObj, instLocation, recList.Item(i).index); + cacheId = funcInfo->FindOrAddInlineCacheId(instLocation, propertyId, false, false); + this->m_writer.PatchableProperty(Js::OpCode::LdFld_ReuseLoc, lhsLocation, instLocation, cacheId); + funcInfo->ReleaseTmpRegister(instLocation); + break; + + case DynamicLoadKind::LocalWith: + instLocation = funcInfo->AcquireTmpRegister(); + this->m_writer.Reg2(Js::OpCode::UnwrapWithObj, instLocation, recList.Item(i).instance); + cacheId = funcInfo->FindOrAddInlineCacheId(instLocation, propertyId, false, false); + this->m_writer.PatchableProperty(Js::OpCode::LdFld_ReuseLoc, lhsLocation, instLocation, cacheId); + funcInfo->ReleaseTmpRegister(instLocation); + break; + + case DynamicLoadKind::EnvWith: + instLocation = funcInfo->AcquireTmpRegister(); + this->m_writer.SlotI1(Js::OpCode::LdEnvObj, instLocation, recList.Item(i).index); + this->m_writer.Reg2(Js::OpCode::UnwrapWithObj, instLocation, instLocation); + cacheId = funcInfo->FindOrAddInlineCacheId(instLocation, propertyId, false, false); + this->m_writer.PatchableProperty(Js::OpCode::LdFld_ReuseLoc, lhsLocation, instLocation, cacheId); + funcInfo->ReleaseTmpRegister(instLocation); + break; + + default: + AssertOrFailFast(UNREACHED); + } + + if (i == recList.Count() - 1) + { + break; + } + this->m_writer.Br(doneLabel); + } + this->m_writer.MarkLabel(doneLabel); } + } bool ByteCodeGenerator::NeedCheckBlockVar(Symbol* sym, Scope* scope, FuncInfo* funcInfo) const @@ -5242,14 +5322,14 @@ void ByteCodeGenerator::EmitPropDelete(Js::RegSlot lhsLocation, Symbol *sym, Ide // (TODO: optimize this by getting the sym from its normal location if there are no non-local defs.) // Otherwise, just return false. - Js::ByteCodeLabel doneLabel = 0; - bool fLabelDefined = false; Js::RegSlot scopeLocation = Js::Constants::NoRegister; Js::PropertyId envIndex = -1; Scope *scope = nullptr; Scope *symScope = sym ? sym->GetScope() : this->globalScope; Assert(symScope); + JsUtil::List recList(this->alloc); + for (;;) { scope = this->FindScopeForSym(symScope, scope, &envIndex, funcInfo); @@ -5270,75 +5350,48 @@ void ByteCodeGenerator::EmitPropDelete(Js::RegSlot lhsLocation, Symbol *sym, Ide // Found a scope to which the property may have been added. Assert(scope && scope->GetIsDynamic()); + AssertOrFailFast(scope->GetIsObject()); - if (!fLabelDefined) - { - fLabelDefined = true; - doneLabel = this->m_writer.DefineLabel(); - } + DynamicLoadRecord rec; - Js::ByteCodeLabel nextLabel = this->m_writer.DefineLabel(); + rec.label = this->m_writer.DefineLabel(); Js::PropertyId propertyId = sym ? sym->EnsurePosition(this) : pid->GetPropertyId(); - bool unwrapWithObj = scope->GetScopeType() == ScopeType_With && scriptContext->GetConfig()->IsES6UnscopablesEnabled(); - if (envIndex != -1) - { - this->m_writer.BrEnvProperty( - Js::OpCode::BrOnNoEnvProperty, - nextLabel, - funcInfo->FindOrAddReferencedPropertyId(propertyId), - envIndex + Js::FrameDisplay::GetOffsetOfScopes() / sizeof(Js::Var)); + Js::PropertyIdIndexType propertyIndex = funcInfo->FindOrAddReferencedPropertyId(propertyId); - Js::RegSlot instLocation = funcInfo->AcquireTmpRegister(); - - AssertOrFailFast(scope->GetIsObject()); - this->m_writer.SlotI1( - Js::OpCode::LdEnvObj, - instLocation, - envIndex + Js::FrameDisplay::GetOffsetOfScopes() / sizeof(Js::Var)); - - if (unwrapWithObj) + if (scope->GetScopeType() != ScopeType_With) + { + if (envIndex == -1) { - this->m_writer.Reg2(Js::OpCode::UnwrapWithObj, instLocation, instLocation); + this->m_writer.BrLocalProperty(Js::OpCode::BrOnHasLocalProperty, rec.label, propertyIndex); + rec.kind = DynamicLoadKind::Local; + rec.instance = scopeLocation; + } + else + { + uint32 frameDisplayIndex = envIndex + Js::FrameDisplay::GetOffsetOfScopes() / sizeof(Js::Var); + this->m_writer.BrEnvProperty(Js::OpCode::BrOnHasLocalEnvProperty, rec.label, propertyIndex, frameDisplayIndex); + rec.kind = DynamicLoadKind::Env; + rec.index = frameDisplayIndex; } - - this->m_writer.Property(Js::OpCode::DeleteFld, lhsLocation, instLocation, - funcInfo->FindOrAddReferencedPropertyId(propertyId)); - - funcInfo->ReleaseTmpRegister(instLocation); - } - else if (scopeLocation != Js::Constants::NoRegister && scopeLocation == funcInfo->frameObjRegister) - { - this->m_writer.BrLocalProperty(Js::OpCode::BrOnNoLocalProperty, nextLabel, - funcInfo->FindOrAddReferencedPropertyId(propertyId)); - - Assert(!unwrapWithObj); - this->m_writer.ElementU(Js::OpCode::DeleteLocalFld, lhsLocation, - funcInfo->FindOrAddReferencedPropertyId(propertyId)); } else { - this->m_writer.BrProperty(Js::OpCode::BrOnNoProperty, nextLabel, scopeLocation, - funcInfo->FindOrAddReferencedPropertyId(propertyId)); - - Js::RegSlot unwrappedScopeLocation = Js::Constants::NoRegister; - if (unwrapWithObj) + if (envIndex == -1) { - unwrappedScopeLocation = funcInfo->AcquireTmpRegister(); - this->m_writer.Reg2(Js::OpCode::UnwrapWithObj, unwrappedScopeLocation, scopeLocation); - scopeLocation = unwrappedScopeLocation; + this->m_writer.BrProperty(Js::OpCode::BrOnHasProperty, rec.label, scopeLocation, propertyIndex); + rec.kind = DynamicLoadKind::LocalWith; + rec.instance = scopeLocation; } - - this->m_writer.Property(Js::OpCode::DeleteFld, lhsLocation, scopeLocation, - funcInfo->FindOrAddReferencedPropertyId(propertyId)); - - if (unwrapWithObj) + else { - funcInfo->ReleaseTmpRegister(unwrappedScopeLocation); + uint32 frameDisplayIndex = envIndex + Js::FrameDisplay::GetOffsetOfScopes() / sizeof(Js::Var); + this->m_writer.BrEnvProperty(Js::OpCode::BrOnHasEnvProperty, rec.label, propertyIndex, frameDisplayIndex); + rec.kind = DynamicLoadKind::EnvWith; + rec.index = frameDisplayIndex; } } - this->m_writer.Br(doneLabel); - this->m_writer.MarkLabel(nextLabel); + recList.Add(rec); } // Arrived at the scope in which the property was defined. @@ -5348,7 +5401,7 @@ void ByteCodeGenerator::EmitPropDelete(Js::RegSlot lhsLocation, Symbol *sym, Ide if (this->flags & (fscrEval | fscrImplicitThis)) { this->m_writer.ScopedProperty(Js::OpCode::ScopedDeleteFld, lhsLocation, - funcInfo->FindOrAddReferencedPropertyId(propertyId)); + funcInfo->FindOrAddReferencedPropertyId(propertyId), forceStrictModeForClassComputedPropertyName); } else { @@ -5363,13 +5416,62 @@ void ByteCodeGenerator::EmitPropDelete(Js::RegSlot lhsLocation, Symbol *sym, Ide this->m_writer.Reg1(Js::OpCode::LdFalse, lhsLocation); } - if (fLabelDefined) + if (!recList.Empty()) { + Js::ByteCodeLabel doneLabel = this->m_writer.DefineLabel(); + this->m_writer.Br(doneLabel); + + for (int i = 0;; i++) + { + Js::RegSlot instLocation; + Js::PropertyId propertyId = sym ? sym->EnsurePosition(this) : pid->GetPropertyId(); + Js::PropertyIdIndexType propertyIndex = funcInfo->FindOrAddReferencedPropertyId(propertyId); + + this->m_writer.MarkLabel(recList.Item(i).label); + switch(recList.Item(i).kind) + { + case DynamicLoadKind::Local: + this->m_writer.ElementU(Js::OpCode::DeleteLocalFld_ReuseLoc, lhsLocation, propertyIndex); + break; + + case DynamicLoadKind::Env: + instLocation = funcInfo->AcquireTmpRegister(); + this->m_writer.SlotI1(Js::OpCode::LdEnvObj, instLocation, recList.Item(i).index); + this->m_writer.Property(Js::OpCode::DeleteFld_ReuseLoc, lhsLocation, instLocation, propertyIndex); + funcInfo->ReleaseTmpRegister(instLocation); + break; + + case DynamicLoadKind::LocalWith: + instLocation = funcInfo->AcquireTmpRegister(); + this->m_writer.Reg2(Js::OpCode::UnwrapWithObj, instLocation, recList.Item(i).instance); + this->m_writer.Property(Js::OpCode::DeleteFld_ReuseLoc, lhsLocation, instLocation, propertyIndex); + funcInfo->ReleaseTmpRegister(instLocation); + break; + + case DynamicLoadKind::EnvWith: + instLocation = funcInfo->AcquireTmpRegister(); + this->m_writer.SlotI1(Js::OpCode::LdEnvObj, instLocation, recList.Item(i).index); + this->m_writer.Reg2(Js::OpCode::UnwrapWithObj, instLocation, instLocation); + this->m_writer.Property(Js::OpCode::DeleteFld_ReuseLoc, lhsLocation, instLocation, propertyIndex); + funcInfo->ReleaseTmpRegister(instLocation); + break; + + default: + AssertOrFailFast(UNREACHED); + } + + if (i == recList.Count() - 1) + { + break; + } + this->m_writer.Br(doneLabel); + } + this->m_writer.MarkLabel(doneLabel); } } -void ByteCodeGenerator::EmitTypeOfFld(FuncInfo * funcInfo, Js::PropertyId propertyId, Js::RegSlot value, Js::RegSlot instance, Js::OpCode ldFldOp) +void ByteCodeGenerator::EmitTypeOfFld(FuncInfo * funcInfo, Js::PropertyId propertyId, Js::RegSlot value, Js::RegSlot instance, Js::OpCode ldFldOp, bool reuseLoc) { uint cacheId; @@ -5393,7 +5495,7 @@ void ByteCodeGenerator::EmitTypeOfFld(FuncInfo * funcInfo, Js::PropertyId proper break; } - this->Writer()->Reg2(Js::OpCode::Typeof, value, tmpReg); + this->Writer()->Reg2(reuseLoc ? Js::OpCode::Typeof_ReuseLoc : Js::OpCode::Typeof, value, tmpReg); funcInfo->ReleaseTmpRegister(tmpReg); } @@ -5404,8 +5506,6 @@ void ByteCodeGenerator::EmitPropTypeof(Js::RegSlot lhsLocation, Symbol *sym, Ide // (TODO: optimize this by getting the sym from its normal location if there are no non-local defs.) // Otherwise, just return false - Js::ByteCodeLabel doneLabel = 0; - bool fLabelDefined = false; Js::RegSlot scopeLocation = Js::Constants::NoRegister; Js::PropertyId envIndex = -1; Scope *scope = nullptr; @@ -5421,6 +5521,8 @@ void ByteCodeGenerator::EmitPropTypeof(Js::RegSlot lhsLocation, Symbol *sym, Ide return; } + JsUtil::List recList(this->alloc); + for (;;) { scope = this->FindScopeForSym(symScope, scope, &envIndex, funcInfo); @@ -5441,70 +5543,48 @@ void ByteCodeGenerator::EmitPropTypeof(Js::RegSlot lhsLocation, Symbol *sym, Ide // Found a scope to which the property may have been added. Assert(scope && scope->GetIsDynamic()); + AssertOrFailFast(scope->GetIsObject()); - if (!fLabelDefined) - { - fLabelDefined = true; - doneLabel = this->m_writer.DefineLabel(); - } + DynamicLoadRecord rec; - Js::ByteCodeLabel nextLabel = this->m_writer.DefineLabel(); + rec.label = this->m_writer.DefineLabel(); Js::PropertyId propertyId = sym ? sym->EnsurePosition(this) : pid->GetPropertyId(); + Js::PropertyIdIndexType propertyIndex = funcInfo->FindOrAddReferencedPropertyId(propertyId); - bool unwrapWithObj = scope->GetScopeType() == ScopeType_With && scriptContext->GetConfig()->IsES6UnscopablesEnabled(); - if (envIndex != -1) + if (scope->GetScopeType() != ScopeType_With) { - this->m_writer.BrEnvProperty(Js::OpCode::BrOnNoEnvProperty, nextLabel, - funcInfo->FindOrAddReferencedPropertyId(propertyId), - envIndex + Js::FrameDisplay::GetOffsetOfScopes() / sizeof(Js::Var)); - - Js::RegSlot instLocation = funcInfo->AcquireTmpRegister(); - - AssertOrFailFast(scope->GetIsObject()); - this->m_writer.SlotI1(Js::OpCode::LdEnvObj, - instLocation, - envIndex + Js::FrameDisplay::GetOffsetOfScopes() / sizeof(Js::Var)); - - if (unwrapWithObj) + if (envIndex == -1) { - this->m_writer.Reg2(Js::OpCode::UnwrapWithObj, instLocation, instLocation); + this->m_writer.BrLocalProperty(Js::OpCode::BrOnHasLocalProperty, rec.label, propertyIndex); + rec.kind = DynamicLoadKind::Local; + rec.instance = scopeLocation; + } + else + { + uint32 frameDisplayIndex = envIndex + Js::FrameDisplay::GetOffsetOfScopes() / sizeof(Js::Var); + this->m_writer.BrEnvProperty(Js::OpCode::BrOnHasLocalEnvProperty, rec.label, propertyIndex, frameDisplayIndex); + rec.kind = DynamicLoadKind::Env; + rec.index = frameDisplayIndex; } - - this->EmitTypeOfFld(funcInfo, propertyId, lhsLocation, instLocation, Js::OpCode::LdFldForTypeOf); - - funcInfo->ReleaseTmpRegister(instLocation); - } - else if (scopeLocation != Js::Constants::NoRegister && scopeLocation == funcInfo->frameObjRegister) - { - this->m_writer.BrLocalProperty(Js::OpCode::BrOnNoLocalProperty, nextLabel, - funcInfo->FindOrAddReferencedPropertyId(propertyId)); - - Assert(!unwrapWithObj); - this->EmitTypeOfFld(funcInfo, propertyId, lhsLocation, scopeLocation, Js::OpCode::LdLocalFld); } else { - this->m_writer.BrProperty(Js::OpCode::BrOnNoProperty, nextLabel, scopeLocation, - funcInfo->FindOrAddReferencedPropertyId(propertyId)); - - Js::RegSlot unwrappedScopeLocation = Js::Constants::NoRegister; - if (unwrapWithObj) + if (envIndex == -1) { - unwrappedScopeLocation = funcInfo->AcquireTmpRegister(); - this->m_writer.Reg2(Js::OpCode::UnwrapWithObj, unwrappedScopeLocation, scopeLocation); - scopeLocation = unwrappedScopeLocation; + this->m_writer.BrProperty(Js::OpCode::BrOnHasProperty, rec.label, scopeLocation, propertyIndex); + rec.kind = DynamicLoadKind::LocalWith; + rec.instance = scopeLocation; } - - this->EmitTypeOfFld(funcInfo, propertyId, lhsLocation, scopeLocation, Js::OpCode::LdFldForTypeOf); - - if (unwrapWithObj) + else { - funcInfo->ReleaseTmpRegister(unwrappedScopeLocation); + uint32 frameDisplayIndex = envIndex + Js::FrameDisplay::GetOffsetOfScopes() / sizeof(Js::Var); + this->m_writer.BrEnvProperty(Js::OpCode::BrOnHasEnvProperty, rec.label, propertyIndex, frameDisplayIndex); + rec.kind = DynamicLoadKind::EnvWith; + rec.index = frameDisplayIndex; } } - this->m_writer.Br(doneLabel); - this->m_writer.MarkLabel(nextLabel); + recList.Add(rec); } // Arrived at the scope in which the property was defined. @@ -5586,8 +5666,56 @@ void ByteCodeGenerator::EmitPropTypeof(Js::RegSlot lhsLocation, Symbol *sym, Ide this->m_writer.Reg2(Js::OpCode::Typeof, lhsLocation, sym->GetLocation()); } - if (fLabelDefined) + if (!recList.Empty()) { + Js::ByteCodeLabel doneLabel = this->m_writer.DefineLabel(); + this->m_writer.Br(doneLabel); + + for (int i = 0;; i++) + { + Js::RegSlot instLocation; + Js::PropertyId propertyId = sym ? sym->EnsurePosition(this) : pid->GetPropertyId(); + + this->m_writer.MarkLabel(recList.Item(i).label); + switch(recList.Item(i).kind) + { + case DynamicLoadKind::Local: + this->EmitTypeOfFld(funcInfo, propertyId, lhsLocation, recList.Item(i).instance, Js::OpCode::LdLocalFld, true); + break; + + case DynamicLoadKind::Env: + instLocation = funcInfo->AcquireTmpRegister(); + this->m_writer.SlotI1(Js::OpCode::LdEnvObj, instLocation, recList.Item(i).index); + this->EmitTypeOfFld(funcInfo, propertyId, lhsLocation, instLocation, Js::OpCode::LdFldForTypeOf, true); + funcInfo->ReleaseTmpRegister(instLocation); + break; + + case DynamicLoadKind::LocalWith: + instLocation = funcInfo->AcquireTmpRegister(); + this->m_writer.Reg2(Js::OpCode::UnwrapWithObj, instLocation, recList.Item(i).instance); + this->EmitTypeOfFld(funcInfo, propertyId, lhsLocation, instLocation, Js::OpCode::LdFldForTypeOf, true); + funcInfo->ReleaseTmpRegister(instLocation); + break; + + case DynamicLoadKind::EnvWith: + instLocation = funcInfo->AcquireTmpRegister(); + this->m_writer.SlotI1(Js::OpCode::LdEnvObj, instLocation, recList.Item(i).index); + this->m_writer.Reg2(Js::OpCode::UnwrapWithObj, instLocation, instLocation); + this->EmitTypeOfFld(funcInfo, propertyId, lhsLocation, instLocation, Js::OpCode::LdFldForTypeOf, true); + funcInfo->ReleaseTmpRegister(instLocation); + break; + + default: + AssertOrFailFast(UNREACHED); + } + + if (i == recList.Count() - 1) + { + break; + } + this->m_writer.Br(doneLabel); + } + this->m_writer.MarkLabel(doneLabel); } } @@ -5616,10 +5744,17 @@ void ByteCodeGenerator::EnsureNoRedeclarations(ParseNodeBlock *pnodeBlock, FuncI }); } - auto emitRedeclCheck = [this](Symbol * sym, FuncInfo * funcInfo) + auto emitRedeclCheck = [this](Symbol * sym, FuncInfo * funcInfo, bool isFncDecl = false) { Js::PropertyId propertyId = sym->EnsurePosition(this); + // Global function declarations must pass #sec-candeclareglobalfunction + // which is enforced by EnsureCanDeclGloFunc + if (isFncDecl) + { + this->m_writer.ElementRootU(Js::OpCode::EnsureCanDeclGloFunc, funcInfo->FindOrAddReferencedPropertyId(propertyId)); + } + if (this->flags & fscrEval) { if (!funcInfo->byteCodeFunction->GetIsStrictMode()) @@ -5643,7 +5778,7 @@ void ByteCodeGenerator::EnsureNoRedeclarations(ParseNodeBlock *pnodeBlock, FuncI case knopFncDecl: if (pnode->AsParseNodeFnc()->IsDeclaration()) { - emitRedeclCheck(pnode->AsParseNodeFnc()->pnodeName->sym, funcInfo); + emitRedeclCheck(pnode->AsParseNodeFnc()->pnodeName->sym, funcInfo, true); } pnode = pnode->AsParseNodeFnc()->pnodeNext; @@ -5714,26 +5849,29 @@ void ByteCodeGenerator::RecordAllStrConstants(FuncInfo * funcInfo) }); } +void ByteCodeGenerator::RecordAllBigIntConstants(FuncInfo * funcInfo) +{ + Js::FunctionBody *byteCodeFunction = this->TopFuncInfo()->GetParsedFunctionBody(); + funcInfo->bigintToRegister.Map([byteCodeFunction](ParseNode* pnode, Js::RegSlot location) + { + IdentPtr pid = pnode->AsParseNodeBigInt()->pid; + byteCodeFunction->RecordBigIntConstant(byteCodeFunction->MapRegSlot(location), pid->Psz(), pid->Cch(), pnode->AsParseNodeBigInt()->isNegative); + }); +} + void ByteCodeGenerator::RecordAllStringTemplateCallsiteConstants(FuncInfo* funcInfo) { Js::FunctionBody *byteCodeFunction = this->TopFuncInfo()->GetParsedFunctionBody(); funcInfo->stringTemplateCallsiteRegisterMap.Map([byteCodeFunction](ParseNodePtr pnode, Js::RegSlot location) { Js::ScriptContext* scriptContext = byteCodeFunction->GetScriptContext(); - Js::JavascriptLibrary* library = scriptContext->GetLibrary(); - Js::RecyclableObject* callsiteObject = library->TryGetStringTemplateCallsiteObject(pnode); - - if (callsiteObject == nullptr) - { - Js::RecyclableObject* rawArray = ByteCodeGenerator::BuildArrayFromStringList(pnode->AsParseNodeStrTemplate()->pnodeStringRawLiterals, pnode->AsParseNodeStrTemplate()->countStringLiterals, scriptContext); - rawArray->Freeze(); - - callsiteObject = ByteCodeGenerator::BuildArrayFromStringList(pnode->AsParseNodeStrTemplate()->pnodeStringLiterals, pnode->AsParseNodeStrTemplate()->countStringLiterals, scriptContext); - callsiteObject->SetPropertyWithAttributes(Js::PropertyIds::raw, rawArray, PropertyNone, nullptr); - callsiteObject->Freeze(); + + Js::RecyclableObject* rawArray = ByteCodeGenerator::BuildArrayFromStringList(pnode->AsParseNodeStrTemplate()->pnodeStringRawLiterals, pnode->AsParseNodeStrTemplate()->countStringLiterals, scriptContext); + rawArray->Freeze(); - library->AddStringTemplateCallsiteObject(callsiteObject); - } + Js::RecyclableObject* callsiteObject = ByteCodeGenerator::BuildArrayFromStringList(pnode->AsParseNodeStrTemplate()->pnodeStringLiterals, pnode->AsParseNodeStrTemplate()->countStringLiterals, scriptContext); + callsiteObject->SetPropertyWithAttributes(Js::PropertyIds::raw, rawArray, PropertyNone, nullptr); + callsiteObject->Freeze(); byteCodeFunction->RecordConstant(byteCodeFunction->MapRegSlot(location), callsiteObject); }); @@ -6007,11 +6145,121 @@ void EmitReference(ParseNode *pnode, ByteCodeGenerator *byteCodeGenerator, FuncI } } -void EmitGetIterator(Js::RegSlot iteratorLocation, Js::RegSlot iterableLocation, ByteCodeGenerator* byteCodeGenerator, FuncInfo* funcInfo); -void EmitIteratorNext(Js::RegSlot itemLocation, Js::RegSlot iteratorLocation, Js::RegSlot nextInputLocation, ByteCodeGenerator* byteCodeGenerator, FuncInfo* funcInfo); -void EmitIteratorClose(Js::RegSlot iteratorLocation, ByteCodeGenerator* byteCodeGenerator, FuncInfo* funcInfo); -void EmitIteratorComplete(Js::RegSlot doneLocation, Js::RegSlot iteratorResultLocation, ByteCodeGenerator* byteCodeGenerator, FuncInfo* funcInfo); -void EmitIteratorValue(Js::RegSlot valueLocation, Js::RegSlot iteratorResultLocation, ByteCodeGenerator* byteCodeGenerator, FuncInfo* funcInfo); +void EmitGetIterator(Js::RegSlot iteratorReg, Js::RegSlot iterableReg, ByteCodeGenerator* byteCodeGenerator, FuncInfo* funcInfo); +void EmitIteratorClose(Js::RegSlot iteratorLocation, ByteCodeGenerator* byteCodeGenerator, FuncInfo* funcInfo, bool isAsync = false); + +void EmitFunctionCall( + Js::RegSlot resultReg, + Js::RegSlot funcReg, + Js::RegSlot thisReg, + Js::RegSlot argReg, + ByteCodeGenerator* byteCodeGenerator, + FuncInfo* funcInfo) +{ + Js::ArgSlot argCount = argReg == Js::Constants::NoRegister ? 1 : 2; + funcInfo->StartRecordingOutArgs(argCount); + Js::ProfileId callSite = byteCodeGenerator->GetNextCallSiteId(Js::OpCode::CallI); + byteCodeGenerator->Writer()->StartCall(Js::OpCode::StartCall, argCount); + + byteCodeGenerator->Writer()->ArgOut(0, thisReg, callSite, false); + + if (argReg != Js::Constants::NoRegister) + byteCodeGenerator->Writer()->ArgOut(1, argReg, callSite, false); + + byteCodeGenerator->Writer()->CallI(Js::OpCode::CallI, resultReg, funcReg, argCount, callSite); +} + +void EmitFunctionCall( + Js::RegSlot resultReg, + Js::RegSlot funcReg, + Js::RegSlot thisReg, + ByteCodeGenerator* byteCodeGenerator, + FuncInfo* funcInfo) +{ + Js::RegSlot argReg = Js::Constants::NoRegister; + EmitFunctionCall(resultReg, funcReg, thisReg, argReg, byteCodeGenerator, funcInfo); +} + +void EmitThrowOnNotObject(Js::RegSlot varReg, ByteCodeGenerator* byteCodeGenerator) +{ + Js::ByteCodeLabel skipThrow = byteCodeGenerator->Writer()->DefineLabel(); + byteCodeGenerator->Writer()->BrReg1(Js::OpCode::BrOnObject_A, skipThrow, varReg); + byteCodeGenerator->Writer()->W1(Js::OpCode::RuntimeTypeError, SCODE_CODE(JSERR_NeedObject)); + byteCodeGenerator->Writer()->MarkLabel(skipThrow); +} + +void EmitGetOptionalObjectMethod( + Js::RegSlot methodReg, + Js::RegSlot objectReg, + Js::PropertyId propertyId, + Js::ByteCodeLabel noMethodLabel, + ByteCodeGenerator* byteCodeGenerator, + FuncInfo* funcInfo) +{ + uint cacheId = funcInfo->FindOrAddInlineCacheId( + objectReg, + propertyId, + /* isLoadMethod */ true, + /* isStore */ false); + + byteCodeGenerator->Writer()->PatchableProperty( + Js::OpCode::LdFld, + methodReg, + objectReg, + cacheId, + /* isCtor */ false, + /* registerCacheIdForCall */ true); + + byteCodeGenerator->Writer()->BrReg2( + Js::OpCode::BrEq_A, + noMethodLabel, + methodReg, + funcInfo->undefinedConstantRegister); +} + +void EmitGetObjectMethod( + Js::RegSlot methodReg, + Js::RegSlot objectReg, + Js::PropertyId propertyId, + ByteCodeGenerator* byteCodeGenerator, + FuncInfo* funcInfo) +{ + uint cacheId = funcInfo->FindOrAddInlineCacheId( + objectReg, + propertyId, + /* isLoadMethod */ true, + /* isStore */ false); + + byteCodeGenerator->Writer()->PatchableProperty( + Js::OpCode::LdMethodFld, + methodReg, + objectReg, + cacheId, + /* isCtor */ false, + /* registerCacheIdForCall */ true); +} + +void EmitGetObjectProperty( + Js::RegSlot resultReg, + Js::RegSlot objectReg, + Js::PropertyId propertyId, + ByteCodeGenerator* byteCodeGenerator, + FuncInfo* funcInfo) +{ + uint cacheId = funcInfo->FindOrAddInlineCacheId( + objectReg, + propertyId, + /* isLoadMethod */ false, + /* isStore */ false); + + byteCodeGenerator->Writer()->PatchableProperty( + Js::OpCode::LdFld, + resultReg, + objectReg, + cacheId, + /* isCtor */ false, + /* registerCacheIdForCall */ false); +} void EmitDestructuredElement(ParseNode *elem, Js::RegSlot sourceLocation, ByteCodeGenerator* byteCodeGenerator, FuncInfo *funcInfo) { @@ -6032,23 +6280,25 @@ void EmitDestructuredElement(ParseNode *elem, Js::RegSlot sourceLocation, ByteCo funcInfo->ReleaseReference(elem); } -void EmitDestructuredRestArray(ParseNode *elem, +void EmitDestructuredRestArray( + ParseNode* elem, Js::RegSlot iteratorLocation, + Js::RegSlot nextMethodReg, Js::RegSlot shouldCallReturnFunctionLocation, Js::RegSlot shouldCallReturnFunctionLocationFinally, - ByteCodeGenerator *byteCodeGenerator, - FuncInfo *funcInfo) + ByteCodeGenerator* byteCodeGenerator, + FuncInfo* funcInfo) { Js::RegSlot restArrayLocation = funcInfo->AcquireTmpRegister(); bool isAssignmentTarget = !(elem->AsParseNodeUni()->pnode1->IsPattern() || elem->AsParseNodeUni()->pnode1->IsVarLetOrConst()); if (isAssignmentTarget) { - byteCodeGenerator->Writer()->Reg1(Js::OpCode::LdTrue, shouldCallReturnFunctionLocation); - byteCodeGenerator->Writer()->Reg1(Js::OpCode::LdTrue, shouldCallReturnFunctionLocationFinally); + byteCodeGenerator->Writer()->Reg1(Js::OpCode::LdTrue_ReuseLoc, shouldCallReturnFunctionLocation); + byteCodeGenerator->Writer()->Reg1(Js::OpCode::LdTrue_ReuseLoc, shouldCallReturnFunctionLocationFinally); EmitReference(elem->AsParseNodeUni()->pnode1, byteCodeGenerator, funcInfo); - byteCodeGenerator->Writer()->Reg1(Js::OpCode::LdFalse, shouldCallReturnFunctionLocation); - byteCodeGenerator->Writer()->Reg1(Js::OpCode::LdFalse, shouldCallReturnFunctionLocationFinally); + byteCodeGenerator->Writer()->Reg1(Js::OpCode::LdFalse_ReuseLoc, shouldCallReturnFunctionLocation); + byteCodeGenerator->Writer()->Reg1(Js::OpCode::LdFalse_ReuseLoc, shouldCallReturnFunctionLocationFinally); } byteCodeGenerator->Writer()->Reg1Unsigned1( @@ -6071,19 +6321,36 @@ void EmitDestructuredRestArray(ParseNode *elem, Js::RegSlot itemLocation = funcInfo->AcquireTmpRegister(); - EmitIteratorNext(itemLocation, iteratorLocation, Js::Constants::NoRegister, byteCodeGenerator, funcInfo); + EmitFunctionCall( + itemLocation, + nextMethodReg, + iteratorLocation, + byteCodeGenerator, + funcInfo); + + EmitThrowOnNotObject(itemLocation, byteCodeGenerator); Js::RegSlot doneLocation = funcInfo->AcquireTmpRegister(); - EmitIteratorComplete(doneLocation, itemLocation, byteCodeGenerator, funcInfo); + EmitGetObjectProperty( + doneLocation, + itemLocation, + Js::PropertyIds::done, + byteCodeGenerator, + funcInfo); Js::ByteCodeLabel iteratorDone = byteCodeGenerator->Writer()->DefineLabel(); byteCodeGenerator->Writer()->BrReg1(Js::OpCode::BrTrue_A, iteratorDone, doneLocation); Js::RegSlot valueLocation = funcInfo->AcquireTmpRegister(); - EmitIteratorValue(valueLocation, itemLocation, byteCodeGenerator, funcInfo); + EmitGetObjectProperty( + valueLocation, + itemLocation, + Js::PropertyIds::value, + byteCodeGenerator, + funcInfo); - byteCodeGenerator->Writer()->Reg1(Js::OpCode::LdTrue, shouldCallReturnFunctionLocation); - byteCodeGenerator->Writer()->Reg1(Js::OpCode::LdTrue, shouldCallReturnFunctionLocationFinally); + byteCodeGenerator->Writer()->Reg1(Js::OpCode::LdTrue_ReuseLoc, shouldCallReturnFunctionLocation); + byteCodeGenerator->Writer()->Reg1(Js::OpCode::LdTrue_ReuseLoc, shouldCallReturnFunctionLocationFinally); byteCodeGenerator->Writer()->Element( ByteCodeGenerator::GetStElemIOpCode(funcInfo), @@ -6094,8 +6361,8 @@ void EmitDestructuredRestArray(ParseNode *elem, byteCodeGenerator->Writer()->Reg2(Js::OpCode::Incr_A, counterLocation, counterLocation); - byteCodeGenerator->Writer()->Reg1(Js::OpCode::LdFalse, shouldCallReturnFunctionLocation); - byteCodeGenerator->Writer()->Reg1(Js::OpCode::LdFalse, shouldCallReturnFunctionLocationFinally); + byteCodeGenerator->Writer()->Reg1(Js::OpCode::LdFalse_ReuseLoc, shouldCallReturnFunctionLocation); + byteCodeGenerator->Writer()->Reg1(Js::OpCode::LdFalse_ReuseLoc, shouldCallReturnFunctionLocationFinally); byteCodeGenerator->Writer()->Br(loopTop); @@ -6158,13 +6425,13 @@ void EmitIteratorCloseIfNotDone(Js::RegSlot iteratorLocation, Js::RegSlot doneLo rest.append(value) */ void EmitDestructuredArrayCore( - ParseNode *list, + ParseNode* list, Js::RegSlot iteratorLocation, + Js::RegSlot nextMethodReg, Js::RegSlot shouldCallReturnFunctionLocation, Js::RegSlot shouldCallReturnFunctionLocationFinally, - ByteCodeGenerator *byteCodeGenerator, - FuncInfo *funcInfo - ) + ByteCodeGenerator* byteCodeGenerator, + FuncInfo* funcInfo) { Assert(list != nullptr); @@ -6211,19 +6478,31 @@ void EmitDestructuredArrayCore( if (isAssignmentTarget) { - byteCodeGenerator->Writer()->Reg1(Js::OpCode::LdTrue, shouldCallReturnFunctionLocation); - byteCodeGenerator->Writer()->Reg1(Js::OpCode::LdTrue, shouldCallReturnFunctionLocationFinally); + byteCodeGenerator->Writer()->Reg1(Js::OpCode::LdTrue_ReuseLoc, shouldCallReturnFunctionLocation); + byteCodeGenerator->Writer()->Reg1(Js::OpCode::LdTrue_ReuseLoc, shouldCallReturnFunctionLocationFinally); EmitReference(elem, byteCodeGenerator, funcInfo); } - byteCodeGenerator->Writer()->Reg1(Js::OpCode::LdFalse, shouldCallReturnFunctionLocation); - byteCodeGenerator->Writer()->Reg1(Js::OpCode::LdFalse, shouldCallReturnFunctionLocationFinally); + byteCodeGenerator->Writer()->Reg1(Js::OpCode::LdFalse_ReuseLoc, shouldCallReturnFunctionLocation); + byteCodeGenerator->Writer()->Reg1(Js::OpCode::LdFalse_ReuseLoc, shouldCallReturnFunctionLocationFinally); Js::RegSlot itemLocation = funcInfo->AcquireTmpRegister(); - EmitIteratorNext(itemLocation, iteratorLocation, Js::Constants::NoRegister, byteCodeGenerator, funcInfo); + EmitFunctionCall( + itemLocation, + nextMethodReg, + iteratorLocation, + byteCodeGenerator, + funcInfo); + + EmitThrowOnNotObject(itemLocation, byteCodeGenerator); Js::RegSlot doneLocation = funcInfo->AcquireTmpRegister(); - EmitIteratorComplete(doneLocation, itemLocation, byteCodeGenerator, funcInfo); + EmitGetObjectProperty( + doneLocation, + itemLocation, + Js::PropertyIds::done, + byteCodeGenerator, + funcInfo); if (elem->nop == knopEmpty) { @@ -6250,16 +6529,22 @@ void EmitDestructuredArrayCore( // We're not done with the iterator, so assign the .next() value. Js::RegSlot valueLocation = funcInfo->AcquireTmpRegister(); - EmitIteratorValue(valueLocation, itemLocation, byteCodeGenerator, funcInfo); + EmitGetObjectProperty( + valueLocation, + itemLocation, + Js::PropertyIds::value, + byteCodeGenerator, + funcInfo); + Js::ByteCodeLabel beforeDefaultAssign = byteCodeGenerator->Writer()->DefineLabel(); - byteCodeGenerator->Writer()->Reg1(Js::OpCode::LdTrue, shouldCallReturnFunctionLocation); - byteCodeGenerator->Writer()->Reg1(Js::OpCode::LdTrue, shouldCallReturnFunctionLocationFinally); + byteCodeGenerator->Writer()->Reg1(Js::OpCode::LdTrue_ReuseLoc, shouldCallReturnFunctionLocation); + byteCodeGenerator->Writer()->Reg1(Js::OpCode::LdTrue_ReuseLoc, shouldCallReturnFunctionLocationFinally); byteCodeGenerator->Writer()->Br(beforeDefaultAssign); // iteratorAlreadyDone: byteCodeGenerator->Writer()->MarkLabel(iteratorAlreadyDone); - byteCodeGenerator->Writer()->Reg2(Js::OpCode::Ld_A, valueLocation, funcInfo->undefinedConstantRegister); + byteCodeGenerator->Writer()->Reg2(Js::OpCode::Ld_A_ReuseLoc, valueLocation, funcInfo->undefinedConstantRegister); // beforeDefaultAssign: byteCodeGenerator->Writer()->MarkLabel(beforeDefaultAssign); @@ -6306,7 +6591,7 @@ void EmitDestructuredArrayCore( // skipDefault: byteCodeGenerator->Writer()->MarkLabel(skipDefault); - byteCodeGenerator->Writer()->Reg2(Js::OpCode::Ld_A, valueLocationTmp, valueLocation); + byteCodeGenerator->Writer()->Reg2(Js::OpCode::Ld_A_ReuseLoc, valueLocationTmp, valueLocation); // loadIter: // @@iterator @@ -6343,8 +6628,8 @@ void EmitDestructuredArrayCore( EmitDestructuredValueOrInitializer(elem, valueLocation, init, isAssignmentTarget, byteCodeGenerator, funcInfo); } - byteCodeGenerator->Writer()->Reg1(Js::OpCode::LdFalse, shouldCallReturnFunctionLocation); - byteCodeGenerator->Writer()->Reg1(Js::OpCode::LdFalse, shouldCallReturnFunctionLocationFinally); + byteCodeGenerator->Writer()->Reg1(Js::OpCode::LdFalse_ReuseLoc, shouldCallReturnFunctionLocation); + byteCodeGenerator->Writer()->Reg1(Js::OpCode::LdFalse_ReuseLoc, shouldCallReturnFunctionLocationFinally); if (list->nop != knopList) { @@ -6375,8 +6660,10 @@ void EmitDestructuredArrayCore( // If we saw a rest element, emit the rest array. if (elem != nullptr && elem->nop == knopEllipsis) { - EmitDestructuredRestArray(elem, + EmitDestructuredRestArray( + elem, iteratorLocation, + nextMethodReg, shouldCallReturnFunctionLocation, shouldCallReturnFunctionLocationFinally, byteCodeGenerator, @@ -6384,6 +6671,17 @@ void EmitDestructuredArrayCore( } } +struct ByteCodeGenerator::TryScopeRecord : public JsUtil::DoublyLinkedListElement +{ + Js::OpCode op; + Js::ByteCodeLabel label; + Js::RegSlot reg1; + Js::RegSlot reg2; + + TryScopeRecord(Js::OpCode op, Js::ByteCodeLabel label) : op(op), label(label), reg1(Js::Constants::NoRegister), reg2(Js::Constants::NoRegister) { } + TryScopeRecord(Js::OpCode op, Js::ByteCodeLabel label, Js::RegSlot r1, Js::RegSlot r2) : op(op), label(label), reg1(r1), reg2(r2) { } +}; + // Generating // try { // CallIteratorClose @@ -6391,19 +6689,25 @@ void EmitDestructuredArrayCore( // do nothing // } -void EmitTryCatchAroundClose( +void EmitTryCatchAroundIteratorClose( Js::RegSlot iteratorLocation, Js::ByteCodeLabel endLabel, ByteCodeGenerator *byteCodeGenerator, - FuncInfo *funcInfo) + FuncInfo *funcInfo, + bool isAsync) { Js::ByteCodeLabel catchLabel = byteCodeGenerator->Writer()->DefineLabel(); byteCodeGenerator->Writer()->Br(Js::OpCode::TryCatch, catchLabel); - // - // There is no need to add TryScopeRecord here as we are going to call 'return' function and there is not yield expression here. + // Jump cleanup is only needed in a for-await loop since it will await the + // result of the call to the return method. Otherwise there can be no jump. + if (isAsync) + byteCodeGenerator->PushJumpCleanupForTry(Js::OpCode::TryCatch, catchLabel); - EmitIteratorClose(iteratorLocation, byteCodeGenerator, funcInfo); + EmitIteratorClose(iteratorLocation, byteCodeGenerator, funcInfo, isAsync); + + if (isAsync) + byteCodeGenerator->PopJumpCleanup(); byteCodeGenerator->Writer()->Empty(Js::OpCode::Leave); byteCodeGenerator->Writer()->Br(endLabel); @@ -6416,29 +6720,20 @@ void EmitTryCatchAroundClose( byteCodeGenerator->Writer()->Empty(Js::OpCode::Leave); } -struct ByteCodeGenerator::TryScopeRecord : public JsUtil::DoublyLinkedListElement -{ - Js::OpCode op; - Js::ByteCodeLabel label; - Js::RegSlot reg1; - Js::RegSlot reg2; - - TryScopeRecord(Js::OpCode op, Js::ByteCodeLabel label) : op(op), label(label), reg1(Js::Constants::NoRegister), reg2(Js::Constants::NoRegister) { } - TryScopeRecord(Js::OpCode op, Js::ByteCodeLabel label, Js::RegSlot r1, Js::RegSlot r2) : op(op), label(label), reg1(r1), reg2(r2) { } -}; - // Generating // catch(e) { // if (shouldCallReturn) // CallReturnWhichWrappedByTryCatch // throw e; // } -void EmitTopLevelCatch(Js::ByteCodeLabel catchLabel, +void EmitIteratorTopLevelCatch( + Js::ByteCodeLabel catchLabel, Js::RegSlot iteratorLocation, Js::RegSlot shouldCallReturnLocation, Js::RegSlot shouldCallReturnLocationFinally, - ByteCodeGenerator *byteCodeGenerator, - FuncInfo *funcInfo) + ByteCodeGenerator* byteCodeGenerator, + FuncInfo* funcInfo, + bool isAsync) { Js::ByteCodeLabel afterCatchBlockLabel = byteCodeGenerator->Writer()->DefineLabel(); byteCodeGenerator->Writer()->Empty(Js::OpCode::Leave); @@ -6448,30 +6743,22 @@ void EmitTopLevelCatch(Js::ByteCodeLabel catchLabel, Js::RegSlot catchParamLocation = funcInfo->AcquireTmpRegister(); byteCodeGenerator->Writer()->Reg1(Js::OpCode::Catch, catchParamLocation); - ByteCodeGenerator::TryScopeRecord tryRecForCatch(Js::OpCode::ResumeCatch, catchLabel); - if (funcInfo->byteCodeFunction->IsCoroutine()) - { - byteCodeGenerator->tryScopeRecordsList.LinkToEnd(&tryRecForCatch); - } + byteCodeGenerator->PushJumpCleanupForTry(Js::OpCode::ResumeCatch); Js::ByteCodeLabel skipCallCloseLabel = byteCodeGenerator->Writer()->DefineLabel(); byteCodeGenerator->Writer()->BrReg1(Js::OpCode::BrFalse_A, skipCallCloseLabel, shouldCallReturnLocation); - byteCodeGenerator->Writer()->Reg1(Js::OpCode::LdFalse, shouldCallReturnLocationFinally); - EmitTryCatchAroundClose(iteratorLocation, skipCallCloseLabel, byteCodeGenerator, funcInfo); + byteCodeGenerator->Writer()->Reg1(Js::OpCode::LdFalse_ReuseLoc, shouldCallReturnLocationFinally); + + EmitTryCatchAroundIteratorClose(iteratorLocation, skipCallCloseLabel, byteCodeGenerator, funcInfo, isAsync); byteCodeGenerator->Writer()->MarkLabel(skipCallCloseLabel); - // Rethrow the exception. + // Rethrow the exception byteCodeGenerator->Writer()->Reg1(Js::OpCode::Throw, catchParamLocation); - funcInfo->ReleaseTmpRegister(catchParamLocation); - if (funcInfo->byteCodeFunction->IsCoroutine()) - { - byteCodeGenerator->tryScopeRecordsList.UnlinkFromEnd(); - } - + byteCodeGenerator->PopJumpCleanup(); byteCodeGenerator->Writer()->Empty(Js::OpCode::Leave); byteCodeGenerator->Writer()->MarkLabel(afterCatchBlockLabel); } @@ -6482,13 +6769,15 @@ void EmitTopLevelCatch(Js::ByteCodeLabel catchLabel, // CallReturn // } -void EmitTopLevelFinally(Js::ByteCodeLabel finallyLabel, +void EmitIteratorTopLevelFinally( + Js::ByteCodeLabel finallyLabel, Js::RegSlot iteratorLocation, Js::RegSlot shouldCallReturnLocation, Js::RegSlot yieldExceptionLocation, Js::RegSlot yieldOffsetLocation, - ByteCodeGenerator *byteCodeGenerator, - FuncInfo *funcInfo) + ByteCodeGenerator* byteCodeGenerator, + FuncInfo* funcInfo, + bool isAsync) { bool isCoroutine = funcInfo->byteCodeFunction->IsCoroutine(); @@ -6502,22 +6791,22 @@ void EmitTopLevelFinally(Js::ByteCodeLabel finallyLabel, byteCodeGenerator->Writer()->MarkLabel(finallyLabel); byteCodeGenerator->Writer()->Empty(Js::OpCode::Finally); - ByteCodeGenerator::TryScopeRecord tryRecForFinally(Js::OpCode::ResumeFinally, finallyLabel, yieldExceptionLocation, yieldOffsetLocation); - if (isCoroutine) - { - byteCodeGenerator->tryScopeRecordsList.LinkToEnd(&tryRecForFinally); - } + byteCodeGenerator->PushJumpCleanupForTry( + Js::OpCode::ResumeFinally, + finallyLabel, + yieldExceptionLocation, + yieldOffsetLocation); Js::ByteCodeLabel skipCallCloseLabel = byteCodeGenerator->Writer()->DefineLabel(); byteCodeGenerator->Writer()->BrReg1(Js::OpCode::BrFalse_A, skipCallCloseLabel, shouldCallReturnLocation); - EmitIteratorClose(iteratorLocation, byteCodeGenerator, funcInfo); + EmitIteratorClose(iteratorLocation, byteCodeGenerator, funcInfo, isAsync); byteCodeGenerator->Writer()->MarkLabel(skipCallCloseLabel); + byteCodeGenerator->PopJumpCleanup(); if (isCoroutine) { - byteCodeGenerator->tryScopeRecordsList.UnlinkFromEnd(); funcInfo->ReleaseTmpRegister(yieldOffsetLocation); funcInfo->ReleaseTmpRegister(yieldExceptionLocation); } @@ -6527,42 +6816,40 @@ void EmitTopLevelFinally(Js::ByteCodeLabel finallyLabel, byteCodeGenerator->Writer()->MarkLabel(afterFinallyBlockLabel); } -void EmitCatchAndFinallyBlocks(Js::ByteCodeLabel catchLabel, +void EmitIteratorCatchAndFinally( + Js::ByteCodeLabel catchLabel, Js::ByteCodeLabel finallyLabel, Js::RegSlot iteratorLocation, Js::RegSlot shouldCallReturnFunctionLocation, Js::RegSlot shouldCallReturnFunctionLocationFinally, Js::RegSlot yieldExceptionLocation, Js::RegSlot yieldOffsetLocation, - ByteCodeGenerator *byteCodeGenerator, - FuncInfo *funcInfo - ) + ByteCodeGenerator* byteCodeGenerator, + FuncInfo* funcInfo, + bool isAsync = false) { - bool isCoroutine = funcInfo->byteCodeFunction->IsCoroutine(); - if (isCoroutine) - { - byteCodeGenerator->tryScopeRecordsList.UnlinkFromEnd(); - } + byteCodeGenerator->PopJumpCleanup(); - EmitTopLevelCatch(catchLabel, + EmitIteratorTopLevelCatch( + catchLabel, iteratorLocation, shouldCallReturnFunctionLocation, shouldCallReturnFunctionLocationFinally, byteCodeGenerator, - funcInfo); + funcInfo, + isAsync); - if (isCoroutine) - { - byteCodeGenerator->tryScopeRecordsList.UnlinkFromEnd(); - } + byteCodeGenerator->PopJumpCleanup(); - EmitTopLevelFinally(finallyLabel, + EmitIteratorTopLevelFinally( + finallyLabel, iteratorLocation, shouldCallReturnFunctionLocationFinally, yieldExceptionLocation, yieldOffsetLocation, byteCodeGenerator, - funcInfo); + funcInfo, + isAsync); funcInfo->ReleaseTmpRegister(shouldCallReturnFunctionLocationFinally); funcInfo->ReleaseTmpRegister(shouldCallReturnFunctionLocation); @@ -6593,6 +6880,14 @@ void EmitDestructuredArray( return; } + Js::RegSlot nextMethodReg = funcInfo->AcquireTmpRegister(); + EmitGetObjectMethod( + nextMethodReg, + iteratorLocation, + Js::PropertyIds::next, + byteCodeGenerator, + funcInfo); + // This variable facilitates on when to call the return function (which is Iterator close). When we are emitting bytecode for destructuring element // this variable will be set to true. Js::RegSlot shouldCallReturnFunctionLocation = funcInfo->AcquireTmpRegister(); @@ -6619,36 +6914,35 @@ void EmitDestructuredArray( Js::ByteCodeLabel catchLabel = byteCodeGenerator->Writer()->DefineLabel(); byteCodeGenerator->Writer()->RecordCrossFrameEntryExitRecord(true); - ByteCodeGenerator::TryScopeRecord tryRecForTryFinally(Js::OpCode::TryFinallyWithYield, finallyLabel); - if (isCoroutine) { byteCodeGenerator->Writer()->BrReg2(Js::OpCode::TryFinallyWithYield, finallyLabel, regException, regOffset); - tryRecForTryFinally.reg1 = regException; - tryRecForTryFinally.reg2 = regOffset; - byteCodeGenerator->tryScopeRecordsList.LinkToEnd(&tryRecForTryFinally); + byteCodeGenerator->PushJumpCleanupForTry( + Js::OpCode::TryFinallyWithYield, + finallyLabel, + regException, + regOffset); } else { byteCodeGenerator->Writer()->Br(Js::OpCode::TryFinally, finallyLabel); + byteCodeGenerator->PushJumpCleanupForTry(Js::OpCode::TryFinally, finallyLabel); } byteCodeGenerator->Writer()->Br(Js::OpCode::TryCatch, catchLabel); + byteCodeGenerator->PushJumpCleanupForTry(Js::OpCode::TryCatch, catchLabel); - ByteCodeGenerator::TryScopeRecord tryRecForTry(Js::OpCode::TryCatch, catchLabel); - if (isCoroutine) - { - byteCodeGenerator->tryScopeRecordsList.LinkToEnd(&tryRecForTry); - } - - EmitDestructuredArrayCore(list, + EmitDestructuredArrayCore( + list, iteratorLocation, + nextMethodReg, shouldCallReturnFunctionLocation, shouldCallReturnFunctionLocationFinally, byteCodeGenerator, funcInfo); - EmitCatchAndFinallyBlocks(catchLabel, + EmitIteratorCatchAndFinally( + catchLabel, finallyLabel, iteratorLocation, shouldCallReturnFunctionLocation, @@ -6658,6 +6952,7 @@ void EmitDestructuredArray( byteCodeGenerator, funcInfo); + funcInfo->ReleaseTmpRegister(nextMethodReg); funcInfo->ReleaseTmpRegister(iteratorLocation); byteCodeGenerator->EndStatement(lhs); @@ -6665,6 +6960,9 @@ void EmitDestructuredArray( void EmitNameInvoke(Js::RegSlot lhsLocation, Js::RegSlot objectLocation, + Js::RegSlot computedPropIdArrLocation, + uint32 *computedIndex, + bool hasRest, ParseNodePtr nameNode, ByteCodeGenerator* byteCodeGenerator, FuncInfo* funcInfo) @@ -6676,6 +6974,11 @@ void EmitNameInvoke(Js::RegSlot lhsLocation, Emit(pnode1, byteCodeGenerator, funcInfo, false/*isConstructorCall*/); byteCodeGenerator->Writer()->Element(Js::OpCode::LdElemI_A, lhsLocation, objectLocation, pnode1->location); + if (hasRest) + { + byteCodeGenerator->Writer()->Slot(Js::OpCode::StPropIdArrFromVar, pnode1->location, computedPropIdArrLocation, *computedIndex); + (*computedIndex)++; + } funcInfo->ReleaseLoc(pnode1); } else @@ -6715,7 +7018,7 @@ void EmitDestructuredValueOrInitializer(ParseNodePtr lhsElementNode, byteCodeGenerator->Writer()->MarkLabel(useDefault); Emit(initializer, byteCodeGenerator, funcInfo, false/*isConstructorCall*/); - byteCodeGenerator->Writer()->Reg2(Js::OpCode::Ld_A, rhsLocationTmp, initializer->location); + byteCodeGenerator->Writer()->Reg2(Js::OpCode::Ld_A_ReuseLoc, rhsLocationTmp, initializer->location); funcInfo->ReleaseLoc(initializer); byteCodeGenerator->Writer()->MarkLabel(end); @@ -6746,18 +7049,36 @@ void EmitDestructuredValueOrInitializer(ParseNodePtr lhsElementNode, void EmitDestructuredObjectMember(ParseNodePtr memberNode, Js::RegSlot rhsLocation, + Js::RegSlot propIdArrLocation, + Js::RegSlot computedPropIdArrLocation, + uint32 *computedIndex, + bool hasRest, ByteCodeGenerator *byteCodeGenerator, FuncInfo *funcInfo) { - Assert(memberNode->nop == knopObjectPatternMember); + Assert(memberNode->nop == knopObjectPatternMember || memberNode->nop == knopEllipsis); Js::RegSlot nameLocation = funcInfo->AcquireTmpRegister(); - EmitNameInvoke(nameLocation, rhsLocation, memberNode->AsParseNodeBin()->pnode1, byteCodeGenerator, funcInfo); + ParseNodePtr lhsElementNode = nullptr; + + if (memberNode->nop == knopObjectPatternMember) + { + EmitNameInvoke(nameLocation, rhsLocation, computedPropIdArrLocation, + computedIndex, hasRest, memberNode->AsParseNodeBin()->pnode1, byteCodeGenerator, funcInfo); + + // Imagine we are transforming + // {x:x1} = {} to x1 = {}.x (here x1 is the second node of the member but that is our lhsnode) - // Imagine we are transforming - // {x:x1} = {} to x1 = {}.x (here x1 is the second node of the member but that is our lhsnode) + lhsElementNode = memberNode->AsParseNodeBin()->pnode2; + } + else + { + // memberNode->nop == knopEllipsis, aka we are performing Rest operation + byteCodeGenerator->Writer()->Reg1(Js::OpCode::NewScObjectSimple, nameLocation); + byteCodeGenerator->Writer()->Reg4(Js::OpCode::Restify, rhsLocation, nameLocation, propIdArrLocation, computedPropIdArrLocation); + lhsElementNode = memberNode->AsParseNodeUni()->pnode1; + } - ParseNodePtr lhsElementNode = memberNode->AsParseNodeBin()->pnode2; ParseNodePtr init = nullptr; if (lhsElementNode->IsVarLetOrConst()) { @@ -6774,13 +7095,50 @@ void EmitDestructuredObjectMember(ParseNodePtr memberNode, funcInfo->ReleaseTmpRegister(nameLocation); } +void EmitObjectPropertyIdsToArray(ByteCodeGenerator *byteCodeGenerator, + Js::PropertyId *ids, + ParseNodePtr memberNodes, + uint32 staticCount, + bool *hasComputedProps) +{ + uint32 index = 0; + Parser::ForEachItemInList(memberNodes, [&](ParseNodePtr current) { + if (current->nop != knopEllipsis) + { + ParseNodePtr nameNode = current->AsParseNodeBin()->pnode1; + Assert(nameNode != nullptr); + Assert(nameNode->nop == knopComputedName || nameNode->nop == knopStr); + + if (nameNode->nop == knopStr) + { + if (index >= staticCount) + { + Js::Throw::InternalError(); + return; + } + ids[index] = nameNode->AsParseNodeStr()->pid->GetPropertyId(); + index++; + } + else + { + *hasComputedProps = true; + } + } + }); +} + void EmitDestructuredObject(ParseNode *lhs, Js::RegSlot rhsLocationOrig, ByteCodeGenerator *byteCodeGenerator, FuncInfo *funcInfo) { Assert(lhs->nop == knopObjectPattern); - ParseNodePtr pnode1 = lhs->AsParseNodeUni()->pnode1; + ParseNodeObjLit *pnodeObjLit = lhs->AsParseNodeObjLit(); + ParseNodePtr pnode1 = pnodeObjLit->pnode1; + uint32 staticCount = pnodeObjLit->staticCount; + uint32 computedCount = pnodeObjLit->computedCount; + bool hasRest = pnodeObjLit->hasRest; + bool hasComputedProps = false; byteCodeGenerator->StartStatement(lhs); @@ -6793,19 +7151,51 @@ void EmitDestructuredObject(ParseNode *lhs, if (pnode1 != nullptr) { - Assert(pnode1->nop == knopList || pnode1->nop == knopObjectPatternMember); + Js::RegSlot propIdArrLocation = Js::Constants::NoRegister; + Js::RegSlot computedPropIdArrLocation = Js::Constants::NoRegister; + if (hasRest) + { + uint extraAlloc = UInt32Math::Mul(staticCount, sizeof(Js::PropertyId)); + uint auxSize = UInt32Math::Add(sizeof(Js::PropertyIdArray), extraAlloc); + Js::PropertyIdArray *propIds = AnewPlus(byteCodeGenerator->GetAllocator(), extraAlloc, Js::PropertyIdArray, staticCount, 0); + + Assert(pnode1->nop == knopList || pnode1->nop == knopObjectPatternMember || pnode1->nop == knopEllipsis); + + EmitObjectPropertyIdsToArray(byteCodeGenerator, propIds->elements, pnode1, staticCount, &hasComputedProps); + + // Load static PropertyIdArray here + propIdArrLocation = funcInfo->AcquireTmpRegister(); + byteCodeGenerator->Writer()->Auxiliary(Js::OpCode::LdPropIds, propIdArrLocation, propIds, auxSize, staticCount); + + if (hasComputedProps) + { + computedPropIdArrLocation = funcInfo->AcquireTmpRegister(); + byteCodeGenerator->Writer()->Reg1Unsigned1(Js::OpCode::NewPropIdArrForCompProps, computedPropIdArrLocation, computedCount); + } + else + { + computedPropIdArrLocation = propIdArrLocation; + } + } + + uint32 index = 0; + Parser::ForEachItemInList(pnode1, [&](ParseNodePtr memberNode) { + EmitDestructuredObjectMember(memberNode, rhsLocation, propIdArrLocation, computedPropIdArrLocation, + &index, hasRest, byteCodeGenerator, funcInfo); + }); - ParseNodePtr current = pnode1; - while (current->nop == knopList) + if (hasRest) { - ParseNodePtr memberNode = current->AsParseNodeBin()->pnode1; - EmitDestructuredObjectMember(memberNode, rhsLocation, byteCodeGenerator, funcInfo); - current = current->AsParseNodeBin()->pnode2; + if (hasComputedProps) + { + funcInfo->ReleaseTmpRegister(computedPropIdArrLocation); + } + funcInfo->ReleaseTmpRegister(propIdArrLocation); } - EmitDestructuredObjectMember(current, rhsLocation, byteCodeGenerator, funcInfo); } funcInfo->ReleaseTmpRegister(rhsLocation); + byteCodeGenerator->EndStatement(lhs); } @@ -6856,13 +7246,14 @@ void EmitAssignment( Js::RegSlot tmpReg = byteCodeGenerator->EmitLdObjProto(Js::OpCode::LdHomeObjProto, lhs->AsParseNodeBin()->pnode1->location, funcInfo); funcInfo->ReleaseLoc(lhs->AsParseNodeSuperReference()->pnodeThis); uint cacheId = funcInfo->FindOrAddInlineCacheId(tmpReg, propertyId, false, true); - byteCodeGenerator->Writer()->PatchablePropertyWithThisPtr(Js::OpCode::StSuperFld, rhsLocation, tmpReg, lhs->AsParseNodeSuperReference()->pnodeThis->location, cacheId); + Js::OpCode stFldOpCode = funcInfo->GetIsStrictMode() ? Js::OpCode::StSuperFldStrict : Js::OpCode::StSuperFld; + byteCodeGenerator->Writer()->PatchablePropertyWithThisPtr(stFldOpCode, rhsLocation, tmpReg, lhs->AsParseNodeSuperReference()->pnodeThis->location, cacheId); } else { uint cacheId = funcInfo->FindOrAddInlineCacheId(lhs->AsParseNodeBin()->pnode1->location, propertyId, false, true); byteCodeGenerator->Writer()->PatchableProperty( - ByteCodeGenerator::GetStFldOpCode(funcInfo, false, false, false, false), rhsLocation, lhs->AsParseNodeBin()->pnode1->location, cacheId); + ByteCodeGenerator::GetStFldOpCode(funcInfo, false, false, false, false, byteCodeGenerator->forceStrictModeForClassComputedPropertyName), rhsLocation, lhs->AsParseNodeBin()->pnode1->location, cacheId); } break; @@ -6891,7 +7282,6 @@ void EmitAssignment( case knopObjectPattern: { - Assert(byteCodeGenerator->IsES6DestructuringEnabled()); // Copy the rhs value to be the result of the assignment if needed. if (asgnNode != nullptr) { @@ -6902,7 +7292,6 @@ void EmitAssignment( case knopArrayPattern: { - Assert(byteCodeGenerator->IsES6DestructuringEnabled()); // Copy the rhs value to be the result of the assignment if needed. if (asgnNode != nullptr) { @@ -7652,7 +8041,8 @@ void EmitCallTarget( bool *releaseThisLocation, Js::RegSlot *callObjLocation, ByteCodeGenerator *byteCodeGenerator, - FuncInfo *funcInfo) + FuncInfo *funcInfo, + Js::ProfileId * callApplyCallSiteId) { // - emit target // - assign this @@ -7683,6 +8073,9 @@ void EmitCallTarget( Assert(pnodeBinTarget->pnode2->nop == knopName); if ((pnodeBinTarget->pnode2->AsParseNodeName()->PropertyIdFromNameNode() == Js::PropertyIds::apply) || (pnodeTarget->AsParseNodeBin()->pnode2->AsParseNodeName()->PropertyIdFromNameNode() == Js::PropertyIds::call)) { + funcInfo->EnsureCallSiteToCallApplyCallSiteMap(); + + *callApplyCallSiteId = byteCodeGenerator->GetNextCallApplyCallSiteId(Js::OpCode::CallI); pnodeBinTarget->pnode1->SetIsCallApplyTargetLoad(); } @@ -7697,16 +8090,20 @@ void EmitCallTarget( funcInfo->ReleaseLoc(pnodeBinTarget->AsParseNodeSuperReference()->pnodeThis); funcInfo->ReleaseLoc(pnodeBinTarget->pnode1); - // Function calls on the 'super' object should maintain current 'this' pointer + // Function calls on the 'super' object should maintain current 'this' pointer. *thisLocation = pnodeBinTarget->AsParseNodeSuperReference()->pnodeThis->location; *releaseThisLocation = false; + + uint cacheId = funcInfo->FindOrAddInlineCacheId(protoLocation, propertyId, false, false); + byteCodeGenerator->Writer()->PatchablePropertyWithThisPtr(Js::OpCode::LdSuperFld, + pnodeTarget->location, protoLocation, *thisLocation, cacheId, false); } else { *thisLocation = pnodeBinTarget->pnode1->location; + EmitMethodFld(pnodeBinTarget, protoLocation, propertyId, byteCodeGenerator, funcInfo); } - EmitMethodFld(pnodeBinTarget, protoLocation, propertyId, byteCodeGenerator, funcInfo); break; } @@ -8059,8 +8456,10 @@ void EmitNew(ParseNode* pnode, ByteCodeGenerator* byteCodeGenerator, FuncInfo* f Js::AuxArray *spreadIndices = nullptr; + // Emit argouts at end for generators so that we don't need to restore them when bailing in + bool emitArgOutsAtEnd = pnode->AsParseNodeCall()->hasDestructuring || (funcInfo->byteCodeFunction->IsCoroutine() && pnode->AsParseNodeCall()->pnodeArgs != nullptr); actualArgCount = EmitArgList(pnode->AsParseNodeCall()->pnodeArgs, Js::Constants::NoRegister, Js::Constants::NoRegister, - false, true, byteCodeGenerator, funcInfo, callSiteId, argCount, pnode->AsParseNodeCall()->hasDestructuring, emitProfiledArgouts, pnode->AsParseNodeCall()->spreadArgCount, &spreadIndices); + false, true, byteCodeGenerator, funcInfo, callSiteId, argCount, emitArgOutsAtEnd, emitProfiledArgouts, pnode->AsParseNodeCall()->spreadArgCount, &spreadIndices); funcInfo->ReleaseLoc(pnode->AsParseNodeCall()->pnodeTarget); @@ -8164,6 +8563,7 @@ void EmitCall( bool releaseThisLocation = true; // We already emit the call target for super calls in EmitSuperCall + Js::ProfileId callApplyCallSiteId = Js::Constants::NoProfileId; if (!fIsSuperCall) { if (!fEvaluateComponents) @@ -8172,7 +8572,7 @@ void EmitCall( } else { - EmitCallTarget(pnodeTarget, fSideEffectArgs, &thisLocation, &releaseThisLocation, &callObjLocation, byteCodeGenerator, funcInfo); + EmitCallTarget(pnodeTarget, fSideEffectArgs, &thisLocation, &releaseThisLocation, &callObjLocation, byteCodeGenerator, funcInfo, &callApplyCallSiteId); } } @@ -8189,11 +8589,18 @@ void EmitCall( funcInfo->StartRecordingOutArgs(argCount); Js::ProfileId callSiteId = byteCodeGenerator->GetNextCallSiteId(Js::OpCode::CallI); + if (callApplyCallSiteId != Js::Constants::NoProfileId) + { + funcInfo->callSiteToCallApplyCallSiteMap->AddNew(callSiteId, callApplyCallSiteId); + } // Only emit profiled argouts if we're going to allocate callSiteInfo (on the DynamicProfileInfo) for this call. bool emitProfiledArgouts = callSiteId != byteCodeGenerator->GetCurrentCallSiteId(); + + // Emit argouts at end for generators so that we don't need to restore them when bailing in + bool emitArgOutsAtEnd = pnodeCall->hasDestructuring || (funcInfo->byteCodeFunction->IsCoroutine() && pnodeCall->pnodeArgs != nullptr); Js::AuxArray *spreadIndices; - EmitArgList(pnodeArgs, thisLocation, newTargetLocation, fIsEval, fEvaluateComponents, byteCodeGenerator, funcInfo, callSiteId, (Js::ArgSlot)argCount, pnodeCall->hasDestructuring, emitProfiledArgouts, spreadArgCount, &spreadIndices); + EmitArgList(pnodeArgs, thisLocation, newTargetLocation, fIsEval, fEvaluateComponents, byteCodeGenerator, funcInfo, callSiteId, (Js::ArgSlot)argCount, emitArgOutsAtEnd, emitProfiledArgouts, spreadArgCount, &spreadIndices); if (!fEvaluateComponents) { @@ -8272,24 +8679,35 @@ void EmitMemberNode(ParseNode *memberNode, Js::RegSlot objectLocation, ByteCodeG // Transparently pass the name expr // The Emit will replace this with a temp register if necessary to preserve the value. nameNode->location = nameNode->AsParseNodeUni()->pnode1->location; - computedNamePropertyKey = funcInfo->AcquireTmpRegister(); + // Save the previous value of the flag to be restored later. + bool prevFlag = byteCodeGenerator->forceStrictModeForClassComputedPropertyName; + // Strict mode must be enforced on the evaluation of computed property names inside + // classes, thus enable the flag if the computed property name is a class member. + byteCodeGenerator->forceStrictModeForClassComputedPropertyName = isClassMember || prevFlag; + + computedNamePropertyKey = funcInfo->AcquireTmpRegister(); EmitBinaryOpnds(nameNode, exprNode, byteCodeGenerator, funcInfo, computedNamePropertyKey); - if (isFncDecl && !exprNode->AsParseNodeFnc()->IsClassConstructor() && exprNode->AsParseNodeFnc()->pnodeName == nullptr) + // Restore the flag's previous value. + byteCodeGenerator->forceStrictModeForClassComputedPropertyName = prevFlag; + + if (isFncDecl) { - byteCodeGenerator->Writer()->Reg2(Js::OpCode::SetComputedNameVar, exprNode->location, computedNamePropertyKey); + if (exprNode->AsParseNodeFnc()->pnodeName == nullptr) + { + byteCodeGenerator->Writer()->Reg2(Js::OpCode::SetComputedNameVar, exprNode->location, computedNamePropertyKey); + exprNode->AsParseNodeFnc()->SetHasComputedName(); + } } - } - - // Classes allocates a RegSlot as part of Instance Methods EmitClassInitializers, - // but if we don't have any members then we don't need to load the prototype. - Assert(isClassMember == (isObjectEmpty != nullptr)); - if (isClassMember && *isObjectEmpty) - { - *isObjectEmpty = false; - int cacheId = funcInfo->FindOrAddInlineCacheId(parentNode->location, Js::PropertyIds::prototype, false, false); - byteCodeGenerator->Writer()->PatchableProperty(Js::OpCode::LdFld, objectLocation, parentNode->location, cacheId); + else if (exprNode->nop == knopClassDecl) + { + if (exprNode->AsParseNodeClass()->pnodeName == nullptr) + { + byteCodeGenerator->Writer()->Reg2(Js::OpCode::SetComputedNameVar, exprNode->location, computedNamePropertyKey); + exprNode->AsParseNodeClass()->pnodeConstructor->SetHasComputedName(); + } + } } if (nameNode->nop == knopComputedName) @@ -8302,7 +8720,17 @@ void EmitMemberNode(ParseNode *memberNode, Js::RegSlot objectLocation, ByteCodeG (isClassMember ? Js::OpCode::InitClassMemberSetComputedName : Js::OpCode::InitSetElemI) : (isClassMember ? Js::OpCode::InitClassMemberComputedName : Js::OpCode::InitComputedProperty); - byteCodeGenerator->Writer()->Element(setOp, exprNode->location, objectLocation, computedNamePropertyKey, true); + // Save the previous value of the flag to be restored later. + bool prevFlag = byteCodeGenerator->forceStrictModeForClassComputedPropertyName; + byteCodeGenerator->forceStrictModeForClassComputedPropertyName = isClassMember || prevFlag; + + // Strict mode must be enforced on the evaluation of computed property names inside + // classes, thus enable the flag if the computed property name is a class member. + byteCodeGenerator->Writer()->Element(setOp, exprNode->location, objectLocation, computedNamePropertyKey, true, + byteCodeGenerator->forceStrictModeForClassComputedPropertyName); + + // Restore the flag's previous value. + byteCodeGenerator->forceStrictModeForClassComputedPropertyName = prevFlag; funcInfo->ReleaseLoc(exprNode); funcInfo->ReleaseLoc(nameNode); @@ -8382,6 +8810,16 @@ void EmitMemberNode(ParseNode *memberNode, Js::RegSlot objectLocation, ByteCodeG } } +void EmitObjectSpreadNode(ParseNode *spreadNode, Js::RegSlot objectLocation, ByteCodeGenerator *byteCodeGenerator, FuncInfo *funcInfo) +{ + Js::RegSlot fromObjectLocation; + ParseNode *exprNode = spreadNode->AsParseNodeUni()->pnode1; + Emit(exprNode, byteCodeGenerator, funcInfo, false); + fromObjectLocation = exprNode->location; + byteCodeGenerator->Writer()->Reg2(Js::OpCode::SpreadObjectLiteral, fromObjectLocation, objectLocation); + funcInfo->ReleaseLoc(exprNode); +} + void EmitClassInitializers(ParseNode *memberList, Js::RegSlot objectLocation, ByteCodeGenerator *byteCodeGenerator, FuncInfo *funcInfo, ParseNode* parentNode, bool isObjectEmpty) { if (memberList != nullptr) @@ -8416,14 +8854,14 @@ void EmitObjectInitializers(ParseNode *memberList, Js::RegSlot objectLocation, B typedef JsUtil::BaseHashSet PropertyIdSet; PropertyIdSet* propertyIds = Anew(byteCodeGenerator->GetAllocator(), PropertyIdSet, byteCodeGenerator->GetAllocator(), 17); - bool hasComputedName = false; + bool hasComputedNameOrSpread = false; if (memberList != nullptr) { while (memberList->nop == knopList) { - if (memberList->AsParseNodeBin()->pnode1->AsParseNodeBin()->pnode1->nop == knopComputedName) + if (memberList->AsParseNodeBin()->pnode1->nop == knopEllipsis || memberList->AsParseNodeBin()->pnode1->AsParseNodeBin()->pnode1->nop == knopComputedName) { - hasComputedName = true; + hasComputedNameOrSpread = true; break; } @@ -8436,7 +8874,7 @@ void EmitObjectInitializers(ParseNode *memberList, Js::RegSlot objectLocation, B memberList = memberList->AsParseNodeBin()->pnode2; } - if (memberList->AsParseNodeBin()->pnode1->nop != knopComputedName && !hasComputedName) + if (memberList->nop != knopEllipsis && memberList->AsParseNodeBin()->pnode1->nop != knopComputedName && !hasComputedNameOrSpread) { propertyId = memberList->AsParseNodeBin()->pnode1->AsParseNodeStr()->pid->GetPropertyId(); if (!byteCodeGenerator->GetScriptContext()->IsNumericPropertyId(propertyId, &value)) @@ -8469,7 +8907,7 @@ void EmitObjectInitializers(ParseNode *memberList, Js::RegSlot objectLocation, B unsigned int argIndex = 0; while (memberList->nop == knopList) { - if (memberList->AsParseNodeBin()->pnode1->AsParseNodeBin()->pnode1->nop == knopComputedName) + if (memberList->AsParseNodeBin()->pnode1->nop == knopEllipsis || memberList->AsParseNodeBin()->pnode1->AsParseNodeBin()->pnode1->nop == knopComputedName) { break; } @@ -8482,7 +8920,7 @@ void EmitObjectInitializers(ParseNode *memberList, Js::RegSlot objectLocation, B memberList = memberList->AsParseNodeBin()->pnode2; } - if (memberList->AsParseNodeBin()->pnode1->nop != knopComputedName && !hasComputedName) + if (memberList->nop != knopEllipsis && memberList->AsParseNodeBin()->pnode1->nop != knopComputedName && !hasComputedNameOrSpread) { propertyId = memberList->AsParseNodeBin()->pnode1->AsParseNodeStr()->pid->GetPropertyId(); if (!byteCodeGenerator->GetScriptContext()->IsNumericPropertyId(propertyId, &value) && propertyIds->Remove(propertyId)) @@ -8511,20 +8949,35 @@ void EmitObjectInitializers(ParseNode *memberList, Js::RegSlot objectLocation, B while (memberList->nop == knopList) { ParseNode *memberNode = memberList->AsParseNodeBin()->pnode1; - - if (memberNode->AsParseNodeBin()->pnode1->nop == knopComputedName) + if (memberNode->nop == knopEllipsis) { - useStore = true; + byteCodeGenerator->StartSubexpression(memberNode); + EmitObjectSpreadNode(memberNode, objectLocation, byteCodeGenerator, funcInfo); + byteCodeGenerator->EndSubexpression(memberNode); } + else + { + if (memberNode->AsParseNodeBin()->pnode1->nop == knopComputedName) + { + useStore = true; + } - byteCodeGenerator->StartSubexpression(memberNode); - EmitMemberNode(memberNode, objectLocation, byteCodeGenerator, funcInfo, nullptr, useStore); - byteCodeGenerator->EndSubexpression(memberNode); + byteCodeGenerator->StartSubexpression(memberNode); + EmitMemberNode(memberNode, objectLocation, byteCodeGenerator, funcInfo, nullptr, useStore); + byteCodeGenerator->EndSubexpression(memberNode); + } memberList = memberList->AsParseNodeBin()->pnode2; } byteCodeGenerator->StartSubexpression(memberList); - EmitMemberNode(memberList, objectLocation, byteCodeGenerator, funcInfo, nullptr, useStore); + if (memberList->nop == knopEllipsis) + { + EmitObjectSpreadNode(memberList, objectLocation, byteCodeGenerator, funcInfo); + } + else + { + EmitMemberNode(memberList, objectLocation, byteCodeGenerator, funcInfo, nullptr, useStore); + } byteCodeGenerator->EndSubexpression(memberList); } } @@ -8561,12 +9014,23 @@ void EmitStringTemplate(ParseNodeStrTemplate *pnodeStrTemplate, ByteCodeGenerato ParseNode* stringNodeList = pnodeStrTemplate->pnodeStringLiterals; // Emit the first string and load that into the pnode location. - Emit(stringNodeList->AsParseNodeBin()->pnode1, byteCodeGenerator, funcInfo, false); + // skip loading the string if it is empty + ParseNode* firstString = stringNodeList->AsParseNodeBin()->pnode1; + bool skippedFirst = false; + if (firstString->AsParseNodeStr()->pid->Cch() == 0) + { + skippedFirst = true; + } + else + { + Emit(stringNodeList->AsParseNodeBin()->pnode1, byteCodeGenerator, funcInfo, false); + + Assert(pnodeStrTemplate->location != stringNodeList->AsParseNodeBin()->pnode1->location); - Assert(pnodeStrTemplate->location != stringNodeList->AsParseNodeBin()->pnode1->location); + byteCodeGenerator->Writer()->Reg2(Js::OpCode::Ld_A, pnodeStrTemplate->location, stringNodeList->AsParseNodeBin()->pnode1->location); + funcInfo->ReleaseLoc(stringNodeList->AsParseNodeBin()->pnode1); + } - byteCodeGenerator->Writer()->Reg2(Js::OpCode::Ld_A, pnodeStrTemplate->location, stringNodeList->AsParseNodeBin()->pnode1->location); - funcInfo->ReleaseLoc(stringNodeList->AsParseNodeBin()->pnode1); ParseNode* expressionNodeList = pnodeStrTemplate->pnodeSubstitutionExpressions; ParseNode* stringNode; @@ -8598,10 +9062,20 @@ void EmitStringTemplate(ParseNodeStrTemplate *pnodeStrTemplate, ByteCodeGenerato // Emit the expression and append it to the string we're building. Emit(expressionNode, byteCodeGenerator, funcInfo, false); - Js::RegSlot toStringLocation = funcInfo->AcquireTmpRegister(); - byteCodeGenerator->Writer()->Reg2(Js::OpCode::Conv_Str, toStringLocation, expressionNode->location); - byteCodeGenerator->Writer()->Reg3(Js::OpCode::Add_A, pnodeStrTemplate->location, pnodeStrTemplate->location, toStringLocation); - funcInfo->ReleaseTmpRegister(toStringLocation); + // if this is the first expression AND the initial string was empty write directly to the pnodeStrTemplate location + if (skippedFirst == true) + { + byteCodeGenerator->Writer()->Reg2(Js::OpCode::Conv_Str, pnodeStrTemplate->location, expressionNode->location); + skippedFirst = false; + } + else + { + Js::RegSlot toStringLocation = funcInfo->AcquireTmpRegister(); + byteCodeGenerator->Writer()->Reg2(Js::OpCode::Conv_Str, toStringLocation, expressionNode->location); + byteCodeGenerator->Writer()->Reg3(Js::OpCode::Add_A, pnodeStrTemplate->location, pnodeStrTemplate->location, toStringLocation); + funcInfo->ReleaseTmpRegister(toStringLocation); + } + funcInfo->ReleaseLoc(expressionNode); // Move to the next string in the list - we already got ahead of the expressions in the first string literal above. @@ -8620,9 +9094,12 @@ void EmitStringTemplate(ParseNodeStrTemplate *pnodeStrTemplate, ByteCodeGenerato // Emit the string node following the previous expression and append it to the string. // This is either just some string in the list or it is the last string. - Emit(stringNode, byteCodeGenerator, funcInfo, false); - byteCodeGenerator->Writer()->Reg3(Js::OpCode::Add_A, pnodeStrTemplate->location, pnodeStrTemplate->location, stringNode->location); - funcInfo->ReleaseLoc(stringNode); + if (stringNode->AsParseNodeStr()->pid->Cch() != 0) + { + Emit(stringNode, byteCodeGenerator, funcInfo, false); + byteCodeGenerator->Writer()->Reg3(Js::OpCode::Add_A, pnodeStrTemplate->location, pnodeStrTemplate->location, stringNode->location); + funcInfo->ReleaseLoc(stringNode); + } } } } @@ -8917,7 +9394,7 @@ void EmitBooleanExpression( } void EmitGeneratingBooleanExpression(ParseNode *expr, Js::ByteCodeLabel trueLabel, bool truefallthrough, Js::ByteCodeLabel falseLabel, bool falsefallthrough, Js::RegSlot writeto, - ByteCodeGenerator *byteCodeGenerator, FuncInfo *funcInfo) + bool reuseLoc, ByteCodeGenerator *byteCodeGenerator, FuncInfo *funcInfo) { switch (expr->nop) { @@ -8926,10 +9403,10 @@ void EmitGeneratingBooleanExpression(ParseNode *expr, Js::ByteCodeLabel trueLabe { byteCodeGenerator->StartStatement(expr); Js::ByteCodeLabel leftFalse = byteCodeGenerator->Writer()->DefineLabel(); - EmitGeneratingBooleanExpression(expr->AsParseNodeBin()->pnode1, trueLabel, false, leftFalse, true, writeto, byteCodeGenerator, funcInfo); + EmitGeneratingBooleanExpression(expr->AsParseNodeBin()->pnode1, trueLabel, false, leftFalse, true, writeto, reuseLoc, byteCodeGenerator, funcInfo); funcInfo->ReleaseLoc(expr->AsParseNodeBin()->pnode1); byteCodeGenerator->Writer()->MarkLabel(leftFalse); - EmitGeneratingBooleanExpression(expr->AsParseNodeBin()->pnode2, trueLabel, truefallthrough, falseLabel, falsefallthrough, writeto, byteCodeGenerator, funcInfo); + EmitGeneratingBooleanExpression(expr->AsParseNodeBin()->pnode2, trueLabel, truefallthrough, falseLabel, falsefallthrough, writeto, true, byteCodeGenerator, funcInfo); funcInfo->ReleaseLoc(expr->AsParseNodeBin()->pnode2); byteCodeGenerator->EndStatement(expr); break; @@ -8939,10 +9416,10 @@ void EmitGeneratingBooleanExpression(ParseNode *expr, Js::ByteCodeLabel trueLabe { byteCodeGenerator->StartStatement(expr); Js::ByteCodeLabel leftTrue = byteCodeGenerator->Writer()->DefineLabel(); - EmitGeneratingBooleanExpression(expr->AsParseNodeBin()->pnode1, leftTrue, true, falseLabel, false, writeto, byteCodeGenerator, funcInfo); + EmitGeneratingBooleanExpression(expr->AsParseNodeBin()->pnode1, leftTrue, true, falseLabel, false, writeto, reuseLoc, byteCodeGenerator, funcInfo); funcInfo->ReleaseLoc(expr->AsParseNodeBin()->pnode1); byteCodeGenerator->Writer()->MarkLabel(leftTrue); - EmitGeneratingBooleanExpression(expr->AsParseNodeBin()->pnode2, trueLabel, truefallthrough, falseLabel, falsefallthrough, writeto, byteCodeGenerator, funcInfo); + EmitGeneratingBooleanExpression(expr->AsParseNodeBin()->pnode2, trueLabel, truefallthrough, falseLabel, falsefallthrough, writeto, true, byteCodeGenerator, funcInfo); funcInfo->ReleaseLoc(expr->AsParseNodeBin()->pnode2); byteCodeGenerator->EndStatement(expr); break; @@ -8956,10 +9433,10 @@ void EmitGeneratingBooleanExpression(ParseNode *expr, Js::ByteCodeLabel trueLabe Js::ByteCodeLabel emitFalse = byteCodeGenerator->Writer()->DefineLabel(); EmitBooleanExpression(expr->AsParseNodeUni()->pnode1, emitFalse, emitTrue, byteCodeGenerator, funcInfo, false, true); byteCodeGenerator->Writer()->MarkLabel(emitTrue); - byteCodeGenerator->Writer()->Reg1(Js::OpCode::LdTrue, writeto); + byteCodeGenerator->Writer()->Reg1(reuseLoc ? Js::OpCode::LdTrue_ReuseLoc : Js::OpCode::LdTrue, writeto); byteCodeGenerator->Writer()->Br(trueLabel); byteCodeGenerator->Writer()->MarkLabel(emitFalse); - byteCodeGenerator->Writer()->Reg1(Js::OpCode::LdFalse, writeto); + byteCodeGenerator->Writer()->Reg1(Js::OpCode::LdFalse_ReuseLoc, writeto); if (!falsefallthrough) { byteCodeGenerator->Writer()->Br(falseLabel); @@ -8983,7 +9460,7 @@ void EmitGeneratingBooleanExpression(ParseNode *expr, Js::ByteCodeLabel trueLabe funcInfo->AcquireLoc(expr); byteCodeGenerator->Writer()->Reg3(nopToCMOp[expr->nop], expr->location, expr->AsParseNodeBin()->pnode1->location, expr->AsParseNodeBin()->pnode2->location); - byteCodeGenerator->Writer()->Reg2(Js::OpCode::Ld_A, writeto, expr->location); + byteCodeGenerator->Writer()->Reg2(reuseLoc ? Js::OpCode::Ld_A_ReuseLoc : Js::OpCode::Ld_A, writeto, expr->location); // The inliner likes small bytecode if (!(truefallthrough || falsefallthrough)) { @@ -9000,7 +9477,7 @@ void EmitGeneratingBooleanExpression(ParseNode *expr, Js::ByteCodeLabel trueLabe break; case knopTrue: byteCodeGenerator->StartStatement(expr); - byteCodeGenerator->Writer()->Reg1(Js::OpCode::LdTrue, writeto); + byteCodeGenerator->Writer()->Reg1(reuseLoc ? Js::OpCode::LdTrue_ReuseLoc : Js::OpCode::LdTrue, writeto); if (!truefallthrough) { byteCodeGenerator->Writer()->Br(trueLabel); @@ -9009,7 +9486,7 @@ void EmitGeneratingBooleanExpression(ParseNode *expr, Js::ByteCodeLabel trueLabe break; case knopFalse: byteCodeGenerator->StartStatement(expr); - byteCodeGenerator->Writer()->Reg1(Js::OpCode::LdFalse, writeto); + byteCodeGenerator->Writer()->Reg1(reuseLoc ? Js::OpCode::LdFalse_ReuseLoc : Js::OpCode::LdFalse, writeto); if (!falsefallthrough) { byteCodeGenerator->Writer()->Br(falseLabel); @@ -9026,7 +9503,7 @@ void EmitGeneratingBooleanExpression(ParseNode *expr, Js::ByteCodeLabel trueLabe { byteCodeGenerator->StartStatement(expr); Emit(expr, byteCodeGenerator, funcInfo, false); - byteCodeGenerator->Writer()->Reg2(Js::OpCode::Ld_A, writeto, expr->location); + byteCodeGenerator->Writer()->Reg2(reuseLoc ? Js::OpCode::Ld_A_ReuseLoc : Js::OpCode::Ld_A, writeto, expr->location); // The inliner likes small bytecode if (!(truefallthrough || falsefallthrough)) { @@ -9044,7 +9521,7 @@ void EmitGeneratingBooleanExpression(ParseNode *expr, Js::ByteCodeLabel trueLabe else { Emit(expr, byteCodeGenerator, funcInfo, false); - byteCodeGenerator->Writer()->Reg2(Js::OpCode::Ld_A, writeto, expr->location); + byteCodeGenerator->Writer()->Reg2(reuseLoc ? Js::OpCode::Ld_A_ReuseLoc : Js::OpCode::Ld_A, writeto, expr->location); // The inliner likes small bytecode if (!(truefallthrough || falsefallthrough)) { @@ -9064,7 +9541,7 @@ void EmitGeneratingBooleanExpression(ParseNode *expr, Js::ByteCodeLabel trueLabe // used by while and for loops void EmitLoop( - ParseNodeLoop *loopNode, + ParseNodeStmt *loopNode, ParseNode *cond, ParseNode *body, ParseNode *incr, @@ -9080,7 +9557,7 @@ void EmitLoop( Js::ByteCodeLabel continuePastLoop = byteCodeGenerator->Writer()->DefineLabel(); uint loopId = byteCodeGenerator->Writer()->EnterLoop(loopEntrance); - loopNode->loopId = loopId; + byteCodeGenerator->PushJumpCleanupForLoop(loopNode, loopId); if (doWhile) { @@ -9113,8 +9590,7 @@ void EmitLoop( Emit(body, byteCodeGenerator, funcInfo, fReturnValue); funcInfo->ReleaseLoc(body); - if (byteCodeGenerator->IsES6ForLoopSemanticsEnabled() && - forLoopBlock != nullptr) + if (forLoopBlock != nullptr) { CloneEmitBlock(forLoopBlock, byteCodeGenerator, funcInfo); } @@ -9139,10 +9615,11 @@ void EmitLoop( byteCodeGenerator->Writer()->MarkLabel(loopNode->breakLabel); } + byteCodeGenerator->PopJumpCleanup(); byteCodeGenerator->Writer()->ExitLoop(loopId); } -void ByteCodeGenerator::EmitInvertedLoop(ParseNodeLoop* outerLoop, ParseNodeFor* invertedLoop, FuncInfo* funcInfo) +void ByteCodeGenerator::EmitInvertedLoop(ParseNodeStmt* outerLoop, ParseNodeFor* invertedLoop, FuncInfo* funcInfo) { Js::ByteCodeLabel invertedLoopLabel = this->m_writer.DefineLabel(); Js::ByteCodeLabel afterInvertedLoop = this->m_writer.DefineLabel(); @@ -9164,12 +9641,16 @@ void ByteCodeGenerator::EmitInvertedLoop(ParseNodeLoop* outerLoop, ParseNodeFor* this->m_writer.Br(afterInvertedLoop); this->m_writer.MarkLabel(invertedLoopLabel); - // Emit a zero trip test for the original outer-loop - Js::ByteCodeLabel zeroTrip = this->m_writer.DefineLabel(); - ParseNode* testNode = this->GetParser()->CopyPnode(outerLoop->AsParseNodeFor()->pnodeCond); - EmitBooleanExpression(testNode, zeroTrip, afterInvertedLoop, this, funcInfo, true, false); - this->m_writer.MarkLabel(zeroTrip); - funcInfo->ReleaseLoc(testNode); + // Emit a zero trip test for the original outer-loop if the outer-loop + // has a condition + if (outerLoop->AsParseNodeFor()->pnodeCond) + { + Js::ByteCodeLabel zeroTrip = this->m_writer.DefineLabel(); + ParseNode* testNode = this->GetParser()->CopyPnode(outerLoop->AsParseNodeFor()->pnodeCond); + EmitBooleanExpression(testNode, zeroTrip, afterInvertedLoop, this, funcInfo, true, false); + this->m_writer.MarkLabel(zeroTrip); + funcInfo->ReleaseLoc(testNode); + } // emit inverted Emit(invertedLoop->pnodeInit, this, funcInfo, false); @@ -9179,35 +9660,55 @@ void ByteCodeGenerator::EmitInvertedLoop(ParseNodeLoop* outerLoop, ParseNodeFor* this->m_writer.MarkLabel(afterInvertedLoop); } -void EmitGetIterator(Js::RegSlot iteratorLocation, Js::RegSlot iterableLocation, ByteCodeGenerator* byteCodeGenerator, FuncInfo* funcInfo) +void EmitGetIterator( + Js::RegSlot iteratorReg, + Js::RegSlot iterableReg, + ByteCodeGenerator* byteCodeGenerator, + FuncInfo* funcInfo) { - // get iterator object from the iterable - EmitInvoke(iteratorLocation, iterableLocation, Js::PropertyIds::_symbolIterator, byteCodeGenerator, funcInfo); + EmitGetObjectMethod( + iteratorReg, + iterableReg, + Js::PropertyIds::_symbolIterator, + byteCodeGenerator, + funcInfo); - // throw TypeError if the result is not an object - Js::ByteCodeLabel skipThrow = byteCodeGenerator->Writer()->DefineLabel(); - byteCodeGenerator->Writer()->BrReg1(Js::OpCode::BrOnObject_A, skipThrow, iteratorLocation); - byteCodeGenerator->Writer()->W1(Js::OpCode::RuntimeTypeError, SCODE_CODE(JSERR_NeedObject)); - byteCodeGenerator->Writer()->MarkLabel(skipThrow); + EmitFunctionCall(iteratorReg, iteratorReg, iterableReg, byteCodeGenerator, funcInfo); + EmitThrowOnNotObject(iteratorReg, byteCodeGenerator); } -void EmitIteratorNext(Js::RegSlot itemLocation, Js::RegSlot iteratorLocation, Js::RegSlot nextInputLocation, ByteCodeGenerator* byteCodeGenerator, FuncInfo* funcInfo) +void EmitGetAsyncIterator( + Js::RegSlot resultReg, + Js::RegSlot iterableReg, + ByteCodeGenerator* byteCodeGenerator, + FuncInfo* funcInfo) { - // invoke next() on the iterator - if (nextInputLocation == Js::Constants::NoRegister) - { - EmitInvoke(itemLocation, iteratorLocation, Js::PropertyIds::next, byteCodeGenerator, funcInfo); - } - else - { - EmitInvoke(itemLocation, iteratorLocation, Js::PropertyIds::next, byteCodeGenerator, funcInfo, nextInputLocation); - } + auto* writer = byteCodeGenerator->Writer(); - // throw TypeError if the result is not an object - Js::ByteCodeLabel skipThrow = byteCodeGenerator->Writer()->DefineLabel(); - byteCodeGenerator->Writer()->BrReg1(Js::OpCode::BrOnObject_A, skipThrow, itemLocation); - byteCodeGenerator->Writer()->W1(Js::OpCode::RuntimeTypeError, SCODE_CODE(JSERR_NeedObject)); - byteCodeGenerator->Writer()->MarkLabel(skipThrow); + Js::ByteCodeLabel noAsyncIterator = writer->DefineLabel(); + EmitGetOptionalObjectMethod( + resultReg, + iterableReg, + Js::PropertyIds::_symbolAsyncIterator, + noAsyncIterator, + byteCodeGenerator, + funcInfo); + + EmitFunctionCall(resultReg, resultReg, iterableReg, byteCodeGenerator, funcInfo); + EmitThrowOnNotObject(resultReg, byteCodeGenerator); + + Js::ByteCodeLabel finished = writer->DefineLabel(); + writer->Br(finished); + + // Iterable does not have a Symbol.asyncIterator method: attempt to get a sync + // iterable and wrap it with an AsyncFromSyncIterator + writer->MarkLabel(noAsyncIterator); + Js::RegSlot iteratorReg = funcInfo->AcquireTmpRegister(); + EmitGetIterator(iteratorReg, iterableReg, byteCodeGenerator, funcInfo); + writer->Reg2(Js::OpCode::NewAsyncFromSyncIterator, iteratorReg, iteratorReg); + writer->Reg2(Js::OpCode::Ld_A_ReuseLoc, resultReg, iteratorReg); + funcInfo->ReleaseTmpRegister(iteratorReg); + byteCodeGenerator->Writer()->MarkLabel(finished); } // Generating @@ -9217,44 +9718,32 @@ void EmitIteratorNext(Js::RegSlot itemLocation, Js::RegSlot iteratorLocation, Js // throw TypeError; // } -void EmitIteratorClose(Js::RegSlot iteratorLocation, ByteCodeGenerator* byteCodeGenerator, FuncInfo* funcInfo) +void EmitIteratorClose( + Js::RegSlot iteratorLocation, + ByteCodeGenerator* byteCodeGenerator, + FuncInfo* funcInfo, + bool isAsync) { - Js::RegSlot returnLocation = funcInfo->AcquireTmpRegister(); - - Js::ByteCodeLabel skipThrow = byteCodeGenerator->Writer()->DefineLabel(); + Js::RegSlot returnReg = funcInfo->AcquireTmpRegister(); Js::ByteCodeLabel noReturn = byteCodeGenerator->Writer()->DefineLabel(); - uint cacheId = funcInfo->FindOrAddInlineCacheId(iteratorLocation, Js::PropertyIds::return_, false, false); - byteCodeGenerator->Writer()->PatchableProperty(Js::OpCode::LdFld, returnLocation, iteratorLocation, cacheId); + EmitGetOptionalObjectMethod( + returnReg, + iteratorLocation, + Js::PropertyIds::return_, + noReturn, + byteCodeGenerator, + funcInfo); - byteCodeGenerator->Writer()->BrReg2(Js::OpCode::BrEq_A, noReturn, returnLocation, funcInfo->undefinedConstantRegister); + EmitFunctionCall(returnReg, returnReg, iteratorLocation, byteCodeGenerator, funcInfo); - EmitInvoke(returnLocation, iteratorLocation, Js::PropertyIds::return_, byteCodeGenerator, funcInfo); + // In for-await or async yield* use await on the returned value + if (isAsync) + EmitAwait(returnReg, returnReg, byteCodeGenerator, funcInfo); - // throw TypeError if the result is not an Object - byteCodeGenerator->Writer()->BrReg1(Js::OpCode::BrOnObject_A, skipThrow, returnLocation); - byteCodeGenerator->Writer()->W1(Js::OpCode::RuntimeTypeError, SCODE_CODE(JSERR_NeedObject)); - byteCodeGenerator->Writer()->MarkLabel(skipThrow); + EmitThrowOnNotObject(returnReg, byteCodeGenerator); + funcInfo->ReleaseTmpRegister(returnReg); byteCodeGenerator->Writer()->MarkLabel(noReturn); - - funcInfo->ReleaseTmpRegister(returnLocation); -} - -void EmitIteratorComplete(Js::RegSlot doneLocation, Js::RegSlot iteratorResultLocation, ByteCodeGenerator* byteCodeGenerator, FuncInfo* funcInfo) -{ - // get the iterator result's "done" property - uint cacheId = funcInfo->FindOrAddInlineCacheId(iteratorResultLocation, Js::PropertyIds::done, false, false); - byteCodeGenerator->Writer()->PatchableProperty(Js::OpCode::LdFld, doneLocation, iteratorResultLocation, cacheId); - - // Do not need to do ToBoolean explicitly with current uses of EmitIteratorComplete since BrTrue_A does this. - // Add a ToBoolean controlled by template flag if needed for new uses later on. -} - -void EmitIteratorValue(Js::RegSlot valueLocation, Js::RegSlot iteratorResultLocation, ByteCodeGenerator* byteCodeGenerator, FuncInfo* funcInfo) -{ - // get the iterator result's "value" property - uint cacheId = funcInfo->FindOrAddInlineCacheId(iteratorResultLocation, Js::PropertyIds::value, false, false); - byteCodeGenerator->Writer()->PatchableProperty(Js::OpCode::LdFld, valueLocation, iteratorResultLocation, cacheId); } void EmitForInOfLoopBody(ParseNodeForInOrForOf *loopNode, @@ -9276,10 +9765,7 @@ void EmitForInOfLoopBody(ParseNodeForInOrForOf *loopNode, sym->SetNeedDeclaration(false); } - if (byteCodeGenerator->IsES6ForLoopSemanticsEnabled()) - { - BeginEmitBlock(loopNode->pnodeBlock, byteCodeGenerator, funcInfo); - } + BeginEmitBlock(loopNode->pnodeBlock, byteCodeGenerator, funcInfo); EmitAssignment(nullptr, loopNode->pnodeLval, loopNode->itemLocation, byteCodeGenerator, funcInfo); @@ -9291,10 +9777,7 @@ void EmitForInOfLoopBody(ParseNodeForInOrForOf *loopNode, Emit(loopNode->pnodeBody, byteCodeGenerator, funcInfo, fReturnValue); funcInfo->ReleaseLoc(loopNode->pnodeBody); - if (byteCodeGenerator->IsES6ForLoopSemanticsEnabled()) - { - EndEmitBlock(loopNode->pnodeBlock, byteCodeGenerator, funcInfo); - } + EndEmitBlock(loopNode->pnodeBlock, byteCodeGenerator, funcInfo); funcInfo->ReleaseTmpRegister(loopNode->itemLocation); if (loopNode->emitLabels) @@ -9333,7 +9816,7 @@ void EmitForIn(ParseNodeForInOrForOf *loopNode, // Need to increment loop count whether we are going into profile or not for HasLoop() uint loopId = byteCodeGenerator->Writer()->EnterLoop(loopEntrance); - loopNode->loopId = loopId; + byteCodeGenerator->PushJumpCleanupForLoop(loopNode, loopId); // The EndStatement will happen in the EmitForInOfLoopBody function byteCodeGenerator->StartStatement(loopNode->pnodeLval); @@ -9343,20 +9826,17 @@ void EmitForIn(ParseNodeForInOrForOf *loopNode, EmitForInOfLoopBody(loopNode, loopEntrance, continuePastLoop, byteCodeGenerator, funcInfo, fReturnValue); + byteCodeGenerator->PopJumpCleanup(); byteCodeGenerator->Writer()->ExitLoop(loopId); funcInfo->ReleaseForInLoopLevel(forInLoopLevel); - - if (!byteCodeGenerator->IsES6ForLoopSemanticsEnabled()) - { - EndEmitBlock(loopNode->pnodeBlock, byteCodeGenerator, funcInfo); - } } void EmitForInOrForOf(ParseNodeForInOrForOf *loopNode, ByteCodeGenerator *byteCodeGenerator, FuncInfo *funcInfo, BOOL fReturnValue) { bool isForIn = (loopNode->nop == knopForIn); - Assert(isForIn || loopNode->nop == knopForOf); + bool isForAwaitOf = (loopNode->nop == knopForAwaitOf); + Assert(isForAwaitOf || isForIn || loopNode->nop == knopForOf); BeginEmitBlock(loopNode->pnodeBlock, byteCodeGenerator, funcInfo); @@ -9375,8 +9855,7 @@ void EmitForInOrForOf(ParseNodeForInOrForOf *loopNode, ByteCodeGenerator *byteCo // (break every time on the loop back edge) and correct display of current statement under debugger. // See WinBlue 231880 for details. byteCodeGenerator->Writer()->RecordStatementAdjustment(Js::FunctionBody::SAT_All); - if (byteCodeGenerator->IsES6ForLoopSemanticsEnabled() && - loopNode->pnodeBlock->HasBlockScopedContent()) + if (loopNode->pnodeBlock->HasBlockScopedContent()) { byteCodeGenerator->Writer()->RecordForInOrOfCollectionScope(); } @@ -9391,26 +9870,17 @@ void EmitForInOrForOf(ParseNodeForInOrForOf *loopNode, ByteCodeGenerator *byteCo Emit(loopNode->pnodeObj, byteCodeGenerator, funcInfo, false); // evaluate collection expression funcInfo->ReleaseLoc(loopNode->pnodeObj); - if (byteCodeGenerator->IsES6ForLoopSemanticsEnabled()) + EndEmitBlock(loopNode->pnodeBlock, byteCodeGenerator, funcInfo); + if (loopNode->pnodeBlock->scope != nullptr) { - EndEmitBlock(loopNode->pnodeBlock, byteCodeGenerator, funcInfo); - if (loopNode->pnodeBlock->scope != nullptr) - { - loopNode->pnodeBlock->scope->ForEachSymbol([](Symbol *sym) { - sym->SetIsTrackedForDebugger(false); - }); - } + loopNode->pnodeBlock->scope->ForEachSymbol([](Symbol *sym) { + sym->SetIsTrackedForDebugger(false); + }); } if (isForIn) { EmitForIn(loopNode, loopEntrance, continuePastLoop, byteCodeGenerator, funcInfo, fReturnValue); - - if (!byteCodeGenerator->IsES6ForLoopSemanticsEnabled()) - { - EndEmitBlock(loopNode->pnodeBlock, byteCodeGenerator, funcInfo); - } - return; } @@ -9422,12 +9892,12 @@ void EmitForInOrForOf(ParseNodeForInOrForOf *loopNode, ByteCodeGenerator *byteCo Js::RegSlot regException = Js::Constants::NoRegister; Js::RegSlot regOffset = Js::Constants::NoRegister; - // These two temp variables store the information of return function to be called or not. - // one variable is used for catch block and one is used for finally block. These variable will be set to true when we think that return function - // to be called on abrupt loop break. - // Why two variables? since these are temps and JIT does like not flow if single variable is used in multiple blocks. - Js::RegSlot shouldCallReturnFunctionLocation = funcInfo->AcquireTmpRegister(); - Js::RegSlot shouldCallReturnFunctionLocationFinally = funcInfo->AcquireTmpRegister(); + // These two temp variables track whether the return method of the source iterator should + // be called. One variable is used for catch block and one is used for finally block. + // Non-temps are used so that when jitting loop bodies, writes to these variables are not + // mistaken for dead stores. + Js::RegSlot shouldCallReturnFunctionLocation = loopNode->shouldCallReturnFunctionLocation; + Js::RegSlot shouldCallReturnFunctionLocationFinally = loopNode->shouldCallReturnFunctionLocationFinally; bool isCoroutine = funcInfo->byteCodeFunction->IsCoroutine(); @@ -9439,6 +9909,7 @@ void EmitForInOrForOf(ParseNodeForInOrForOf *loopNode, ByteCodeGenerator *byteCo // Grab registers for the enumerator and for the current enumerated item. // The enumerator register will be released after this call returns. + Js::RegSlot nextMethodReg = funcInfo->AcquireTmpRegister(); loopNode->itemLocation = funcInfo->AcquireTmpRegister(); // We want call profile information on the @@iterator call, so instead of adding a GetForOfIterator bytecode op @@ -9453,9 +9924,20 @@ void EmitForInOrForOf(ParseNodeForInOrForOf *loopNode, ByteCodeGenerator *byteCo Js::RegSlot tmpObj = funcInfo->AcquireTmpRegister(); byteCodeGenerator->Writer()->Reg2(Js::OpCode::Conv_Obj, tmpObj, loopNode->pnodeObj->location); - EmitGetIterator(loopNode->location, tmpObj, byteCodeGenerator, funcInfo); + if (isForAwaitOf) + EmitGetAsyncIterator(loopNode->location, tmpObj, byteCodeGenerator, funcInfo); + else + EmitGetIterator(loopNode->location, tmpObj, byteCodeGenerator, funcInfo); + funcInfo->ReleaseTmpRegister(tmpObj); + EmitGetObjectMethod( + nextMethodReg, + loopNode->location, + Js::PropertyIds::next, + byteCodeGenerator, + funcInfo); + // The whole loop is surrounded with try..catch..finally - in order to capture the abrupt completion. Js::ByteCodeLabel finallyLabel = byteCodeGenerator->Writer()->DefineLabel(); Js::ByteCodeLabel catchLabel = byteCodeGenerator->Writer()->DefineLabel(); @@ -9464,59 +9946,79 @@ void EmitForInOrForOf(ParseNodeForInOrForOf *loopNode, ByteCodeGenerator *byteCo byteCodeGenerator->Writer()->Reg1(Js::OpCode::LdFalse, shouldCallReturnFunctionLocation); byteCodeGenerator->Writer()->Reg1(Js::OpCode::LdFalse, shouldCallReturnFunctionLocationFinally); - ByteCodeGenerator::TryScopeRecord tryRecForTryFinally(Js::OpCode::TryFinallyWithYield, finallyLabel); - if (isCoroutine) { byteCodeGenerator->Writer()->BrReg2(Js::OpCode::TryFinallyWithYield, finallyLabel, regException, regOffset); - tryRecForTryFinally.reg1 = regException; - tryRecForTryFinally.reg2 = regOffset; - byteCodeGenerator->tryScopeRecordsList.LinkToEnd(&tryRecForTryFinally); + byteCodeGenerator->PushJumpCleanupForTry( + Js::OpCode::TryFinallyWithYield, + finallyLabel, + regException, + regOffset); } else { byteCodeGenerator->Writer()->Br(Js::OpCode::TryFinally, finallyLabel); + byteCodeGenerator->PushJumpCleanupForTry(Js::OpCode::TryFinally, finallyLabel); } byteCodeGenerator->Writer()->Br(Js::OpCode::TryCatch, catchLabel); - - ByteCodeGenerator::TryScopeRecord tryRecForTry(Js::OpCode::TryCatch, catchLabel); - if (isCoroutine) - { - byteCodeGenerator->tryScopeRecordsList.LinkToEnd(&tryRecForTry); - } + byteCodeGenerator->PushJumpCleanupForTry(Js::OpCode::TryCatch, catchLabel); byteCodeGenerator->EndStatement(loopNode); // Need to increment loop count whether we are going into profile or not for HasLoop() uint loopId = byteCodeGenerator->Writer()->EnterLoop(loopEntrance); - loopNode->loopId = loopId; + byteCodeGenerator->PushJumpCleanupForLoop(loopNode, loopId); byteCodeGenerator->StartStatement(loopNode->pnodeLval); byteCodeGenerator->Writer()->Reg1(Js::OpCode::LdFalse, shouldCallReturnFunctionLocation); byteCodeGenerator->Writer()->Reg1(Js::OpCode::LdFalse, shouldCallReturnFunctionLocationFinally); - EmitIteratorNext(loopNode->itemLocation, loopNode->location, Js::Constants::NoRegister, byteCodeGenerator, funcInfo); + // Call next on the iterator + EmitFunctionCall( + loopNode->itemLocation, + nextMethodReg, + loopNode->location, + byteCodeGenerator, + funcInfo); + + // If this is a for-await-of then await the iterator next result + if (isForAwaitOf) + EmitAwait(loopNode->itemLocation, loopNode->itemLocation, byteCodeGenerator, funcInfo); + + EmitThrowOnNotObject(loopNode->itemLocation, byteCodeGenerator); Js::RegSlot doneLocation = funcInfo->AcquireTmpRegister(); - EmitIteratorComplete(doneLocation, loopNode->itemLocation, byteCodeGenerator, funcInfo); + EmitGetObjectProperty( + doneLocation, + loopNode->itemLocation, + Js::PropertyIds::done, + byteCodeGenerator, + funcInfo); - // branch past loop if the result's done property is truthy + // Branch past loop if the result's done property is truthy byteCodeGenerator->Writer()->BrReg1(Js::OpCode::BrTrue_A, continuePastLoop, doneLocation); funcInfo->ReleaseTmpRegister(doneLocation); - // otherwise put result's value property in itemLocation - EmitIteratorValue(loopNode->itemLocation, loopNode->itemLocation, byteCodeGenerator, funcInfo); + // Otherwise put result's value property in itemLocation + EmitGetObjectProperty( + loopNode->itemLocation, + loopNode->itemLocation, + Js::PropertyIds::value, + byteCodeGenerator, + funcInfo); byteCodeGenerator->Writer()->Reg1(Js::OpCode::LdTrue, shouldCallReturnFunctionLocation); byteCodeGenerator->Writer()->Reg1(Js::OpCode::LdTrue, shouldCallReturnFunctionLocationFinally); EmitForInOfLoopBody(loopNode, loopEntrance, continuePastLoop, byteCodeGenerator, funcInfo, fReturnValue); + byteCodeGenerator->PopJumpCleanup(); byteCodeGenerator->Writer()->ExitLoop(loopId); + funcInfo->ReleaseTmpRegister(nextMethodReg); - EmitCatchAndFinallyBlocks(catchLabel, + EmitIteratorCatchAndFinally(catchLabel, finallyLabel, loopNode->location, shouldCallReturnFunctionLocation, @@ -9524,12 +10026,8 @@ void EmitForInOrForOf(ParseNodeForInOrForOf *loopNode, ByteCodeGenerator *byteCo regException, regOffset, byteCodeGenerator, - funcInfo); - - if (!byteCodeGenerator->IsES6ForLoopSemanticsEnabled()) - { - EndEmitBlock(loopNode->pnodeBlock, byteCodeGenerator, funcInfo); - } + funcInfo, + isForAwaitOf); } void EmitArrayLiteral(ParseNode *pnode, ByteCodeGenerator *byteCodeGenerator, FuncInfo *funcInfo) @@ -9549,53 +10047,44 @@ void EmitArrayLiteral(ParseNode *pnode, ByteCodeGenerator *byteCodeGenerator, Fu } } -void EmitJumpCleanup(ParseNodeStmt *pnode, ParseNode *pnodeTarget, ByteCodeGenerator *byteCodeGenerator, FuncInfo * funcInfo) +void ByteCodeGenerator::EmitJumpCleanup(ParseNode* target, FuncInfo* funcInfo) { - for (; pnode != pnodeTarget; pnode = pnode->pnodeOuter) + for (JumpCleanupList::Iterator iter(this->jumpCleanupList); iter.Next();) { - switch (pnode->nop) - { - case knopTry: - case knopCatch: - case knopFinally: - // We insert OpCode::Leave when there is a 'return' inside try/catch/finally. - // This is for flow control and does not participate in identifying boundaries of try/catch blocks, - // thus we shouldn't call RecordCrossFrameEntryExitRecord() here. - byteCodeGenerator->Writer()->Empty(Js::OpCode::Leave); - break; + const JumpCleanupInfo& info = iter.Data(); - case knopForOf: -#if ENABLE_PROFILE_INFO - if (Js::DynamicProfileInfo::EnableImplicitCallFlags(funcInfo->GetParsedFunctionBody())) - { - byteCodeGenerator->Writer()->Unsigned1(Js::OpCode::ProfiledLoopEnd, pnode->AsParseNodeLoop()->loopId); - } -#endif - // The ForOf loop code is wrapped around try..catch..finally - Forcing couple Leave bytecode over here - byteCodeGenerator->Writer()->Empty(Js::OpCode::Leave); - byteCodeGenerator->Writer()->Empty(Js::OpCode::Leave); - break; + if (info.loopNode) + { + if (info.loopNode == target) + break; #if ENABLE_PROFILE_INFO - case knopWhile: - case knopDoWhile: - case knopFor: - case knopForIn: if (Js::DynamicProfileInfo::EnableImplicitCallFlags(funcInfo->GetParsedFunctionBody())) - { - byteCodeGenerator->Writer()->Unsigned1(Js::OpCode::ProfiledLoopEnd, pnode->AsParseNodeLoop()->loopId); - } - break; + this->Writer()->Unsigned1(Js::OpCode::ProfiledLoopEnd, info.loopId); #endif + } + else + { + Assert( + info.tryOp == Js::OpCode::TryCatch || + info.tryOp == Js::OpCode::TryFinally || + info.tryOp == Js::OpCode::TryFinallyWithYield || + info.tryOp == Js::OpCode::ResumeCatch || + info.tryOp == Js::OpCode::ResumeFinally); + // We insert OpCode::Leave when there is a 'return' inside try/catch/finally. + // This is for flow control and does not participate in identifying boundaries + // of try/catch blocks, thus we shouldn't call RecordCrossFrameEntryExitRecord + // here. + this->Writer()->Empty(Js::OpCode::Leave); } } } -void EmitBinaryOpnds(ParseNode *pnode1, ParseNode *pnode2, ByteCodeGenerator *byteCodeGenerator, FuncInfo *funcInfo, Js::RegSlot computedPropertyLocation) +void EmitBinaryOpnds(ParseNode* pnode1, ParseNode* pnode2, ByteCodeGenerator* byteCodeGenerator, FuncInfo* funcInfo, Js::RegSlot computedPropertyLocation) { // If opnd2 can overwrite opnd1, make sure the value of opnd1 is stashed away. - if (MayHaveSideEffectOnNode(pnode1, pnode2)) + if (MayHaveSideEffectOnNode(pnode1, pnode2, byteCodeGenerator)) { SaveOpndValue(pnode1, funcInfo); } @@ -9616,7 +10105,7 @@ void EmitBinaryReference(ParseNode *pnode1, ParseNode *pnode2, ByteCodeGenerator switch (pnode1->nop) { case knopName: - if (fLoadLhs && MayHaveSideEffectOnNode(pnode1, pnode2)) + if (fLoadLhs && MayHaveSideEffectOnNode(pnode1, pnode2, byteCodeGenerator)) { // Given x op y, y may kill x, so stash x. // Note that this only matters if we're loading x prior to the op. @@ -9629,7 +10118,7 @@ void EmitBinaryReference(ParseNode *pnode1, ParseNode *pnode2, ByteCodeGenerator // We're loading the value of the LHS before the RHS, so make sure the LHS gets a register first. funcInfo->AcquireLoc(pnode1); } - if (MayHaveSideEffectOnNode(pnode1->AsParseNodeBin()->pnode1, pnode2)) + if (MayHaveSideEffectOnNode(pnode1->AsParseNodeBin()->pnode1, pnode2, byteCodeGenerator)) { // Given x.y op z, z may kill x, so stash x away. SaveOpndValue(pnode1->AsParseNodeBin()->pnode1, funcInfo); @@ -9641,13 +10130,13 @@ void EmitBinaryReference(ParseNode *pnode1, ParseNode *pnode2, ByteCodeGenerator // We're loading the value of the LHS before the RHS, so make sure the LHS gets a register first. funcInfo->AcquireLoc(pnode1); } - if (MayHaveSideEffectOnNode(pnode1->AsParseNodeBin()->pnode1, pnode2) || - MayHaveSideEffectOnNode(pnode1->AsParseNodeBin()->pnode1, pnode1->AsParseNodeBin()->pnode2)) + if (MayHaveSideEffectOnNode(pnode1->AsParseNodeBin()->pnode1, pnode2, byteCodeGenerator) || + MayHaveSideEffectOnNode(pnode1->AsParseNodeBin()->pnode1, pnode1->AsParseNodeBin()->pnode2, byteCodeGenerator)) { // Given x[y] op z, y or z may kill x, so stash x away. SaveOpndValue(pnode1->AsParseNodeBin()->pnode1, funcInfo); } - if (MayHaveSideEffectOnNode(pnode1->AsParseNodeBin()->pnode2, pnode2)) + if (MayHaveSideEffectOnNode(pnode1->AsParseNodeBin()->pnode2, pnode2, byteCodeGenerator)) { // Given x[y] op z, z may kill y, so stash y away. // But make sure that x gets a register before y. @@ -9711,7 +10200,11 @@ void EmitBinary(Js::OpCode opcode, ParseNode *pnode, ByteCodeGenerator *byteCode byteCodeGenerator->EndStatement(pnode); } -bool CollectConcat(ParseNode *pnodeAdd, DListCounted& concatOpnds, ArenaAllocator *arenaAllocator) +bool CollectConcat(ParseNode *pnodeAdd, DListCounted& concatOpnds, ArenaAllocator *arenaAllocator +#ifdef ENABLE_TEST_HOOKS + , bool Force32BitByteCode = false +#endif +) { Assert(pnodeAdd->nop == knopAdd); Assert(pnodeAdd->CanFlattenConcatExpr()); @@ -9732,7 +10225,18 @@ bool CollectConcat(ParseNode *pnodeAdd, DListCountedAsParseNodeStr()->pid->Cch() > 4); + } + else + { + doConcatString = doConcatString || !Js::CompoundString::ShouldAppendChars(pnode->AsParseNodeStr()->pid->Cch()); + } +#else doConcatString = doConcatString || !Js::CompoundString::ShouldAppendChars(pnode->AsParseNodeStr()->pid->Cch()); +#endif } else { @@ -9757,12 +10261,12 @@ bool CollectConcat(ParseNode *pnodeAdd, DListCountedStartStatement(pnode); - if (MayHaveSideEffectOnNode(pnode1, pnode2) || MayHaveSideEffectOnNode(pnode1, pnode3)) + if (MayHaveSideEffectOnNode(pnode1, pnode2, byteCodeGenerator) || MayHaveSideEffectOnNode(pnode1, pnode3, byteCodeGenerator)) { SaveOpndValue(pnode1, funcInfo); } - if (MayHaveSideEffectOnNode(pnode2, pnode3)) + if (MayHaveSideEffectOnNode(pnode2, pnode3, byteCodeGenerator)) { SaveOpndValue(pnode2, funcInfo); } @@ -9804,7 +10308,12 @@ void EmitAdd(ParseNode *pnode, ByteCodeGenerator *byteCodeGenerator, FuncInfo *f // We should only have a string concat if the feature is on. Assert(!PHASE_OFF1(Js::ByteCodeConcatExprOptPhase)); DListCounted concatOpnds(byteCodeGenerator->GetAllocator()); +#ifdef ENABLE_TEST_HOOKS + bool doConcatString = CollectConcat(pnode, concatOpnds, byteCodeGenerator->GetAllocator(), + byteCodeGenerator->GetScriptContext()->GetConfig()->Force32BitByteCode()); +#else bool doConcatString = CollectConcat(pnode, concatOpnds, byteCodeGenerator->GetAllocator()); +#endif if (doConcatString) { uint concatCount = concatOpnds.Count(); @@ -9903,124 +10412,583 @@ void EmitAdd(ParseNode *pnode, ByteCodeGenerator *byteCodeGenerator, FuncInfo *f } } -void ByteCodeGenerator::EmitLeaveOpCodesBeforeYield() -{ - for (TryScopeRecord* node = this->tryScopeRecordsList.Tail(); node != nullptr; node = node->Previous()) +void ByteCodeGenerator::EmitLeaveOpCodesBeforeYield() +{ + for (JumpCleanupList::Iterator iter(this->jumpCleanupList); iter.Next();) + { + const JumpCleanupInfo& info = iter.Data(); + switch (info.tryOp) + { + case Js::OpCode::TryFinallyWithYield: + this->Writer()->Empty(Js::OpCode::LeaveNull); + break; + case Js::OpCode::TryCatch: + case Js::OpCode::ResumeFinally: + case Js::OpCode::ResumeCatch: + this->Writer()->Empty(Js::OpCode::Leave); + break; + case Js::OpCode::Nop: + break; + default: + AssertMsg(false, "Unexpected OpCode in jumpCleanupList"); + break; + } + } +} + +void ByteCodeGenerator::EmitTryBlockHeadersAfterYield() +{ + for (JumpCleanupList::Iterator iter(this->jumpCleanupList); iter.Prev();) + { + const JumpCleanupInfo& info = iter.Data(); + switch (info.tryOp) + { + case Js::OpCode::TryCatch: + this->Writer()->Br(info.tryOp, info.label); + break; + case Js::OpCode::TryFinallyWithYield: + case Js::OpCode::ResumeFinally: + this->Writer()->BrReg2(info.tryOp, info.label, info.regSlot1, info.regSlot2); + break; + case Js::OpCode::ResumeCatch: + this->Writer()->Empty(info.tryOp); + break; + case Js::OpCode::Nop: + break; + default: + AssertMsg(false, "Unexpected OpCode in jumpCleanupList"); + break; + } + } +} + +void EmitYieldAndResume( + Js::RegSlot resumeValueReg, + Js::RegSlot inputReg, + Js::ByteCodeLabel resumeNormalLabel, + Js::ByteCodeLabel resumeThrowLabel, + ByteCodeGenerator* byteCodeGenerator, + FuncInfo* funcInfo) +{ + // If `resultThrowLabel` is a valid label, then the instruction + // sequence following this call must handle the return yield resume + // case. Otherwise, the instruction sequence following this call + // must handle both the throw and return cases. + + auto* writer = byteCodeGenerator->Writer(); + + // If in a loop mark it as containing Yield and hence not eligible for Jit loop body + writer->SetCurrentLoopHasYield(); + + if (inputReg != funcInfo->yieldRegister) + writer->Reg2(Js::OpCode::Ld_A, funcInfo->yieldRegister, inputReg); + + // Yield the result. On resume, the resume yield object will be in yieldRegister + byteCodeGenerator->EmitLeaveOpCodesBeforeYield(); + writer->Reg2(Js::OpCode::Yield, funcInfo->yieldRegister, funcInfo->yieldRegister); + byteCodeGenerator->EmitTryBlockHeadersAfterYield(); + + Js::RegSlot resumeKindReg = funcInfo->AcquireTmpRegister(); + + // Get the "kind" property of the resume object + EmitGetObjectProperty( + resumeKindReg, + funcInfo->yieldRegister, + Js::PropertyIds::kind, + byteCodeGenerator, + funcInfo); + + // Get the "value" property of the resume object + EmitGetObjectProperty( + resumeValueReg, + funcInfo->yieldRegister, + Js::PropertyIds::value, + byteCodeGenerator, + funcInfo); + + Js::RegSlot normalConst = funcInfo->constantToRegister.Lookup( + (uint)Js::ResumeYieldKind::Normal, + Js::Constants::NoRegister); + + Assert(normalConst != Js::Constants::NoRegister); + + // Branch to normal resume if kind is Normal + writer->BrReg2(Js::OpCode::BrSrEq_A, resumeNormalLabel, resumeKindReg, normalConst); + + if (resumeThrowLabel != Js::Constants::NoByteCodeLabel) + { + Js::RegSlot throwConst = funcInfo->constantToRegister.Lookup( + (uint)Js::ResumeYieldKind::Throw, + Js::Constants::NoRegister); + + Assert(throwConst != Js::Constants::NoRegister); + + // Branch to throw if kind is Throw + writer->BrReg2(Js::OpCode::BrSrEq_A, resumeThrowLabel, resumeKindReg, throwConst); + } + + funcInfo->ReleaseTmpRegister(resumeKindReg); +} + +void EmitReturnFromYield( + Js::RegSlot resultReg, + ByteCodeGenerator* byteCodeGenerator, + FuncInfo* funcInfo) +{ + auto* writer = byteCodeGenerator->Writer(); + writer->Reg2(Js::OpCode::Ld_A, ByteCodeGenerator::ReturnRegister, resultReg); + byteCodeGenerator->EmitJumpCleanup(nullptr, funcInfo); + writer->Br(funcInfo->singleExit); +} + +void EmitStartupYield(ByteCodeGenerator* byteCodeGenerator, FuncInfo* funcInfo) +{ + // Generators are "paused" after evaluating the parameter list. A synthetic + // yield is inserted at the beginning of the function for this purpose. It + // has the following special properties: it can only be resumed with a "normal" + // completion (the other types are handled in the generator logic), the + // resume value is not observable to user code, and it cannot be contained + // within a try scope. + Assert(!byteCodeGenerator->HasJumpCleanup()); + auto* writer = byteCodeGenerator->Writer(); + writer->Reg1(Js::OpCode::LdUndef, funcInfo->yieldRegister); + writer->Reg2(Js::OpCode::Yield, funcInfo->yieldRegister, funcInfo->yieldRegister); +} + +void EmitAwait( + Js::RegSlot resultReg, + Js::RegSlot inputReg, + ByteCodeGenerator* byteCodeGenerator, + FuncInfo* funcInfo) +{ + + auto writer = byteCodeGenerator->Writer(); + writer->PatchableProperty( + Js::OpCode::StFld, + inputReg, + funcInfo->awaitRegister, + funcInfo->FindOrAddInlineCacheId(funcInfo->awaitRegister, Js::PropertyIds::value, false, true)); + Js::ByteCodeLabel resumeNormal = writer->DefineLabel(); + + EmitYieldAndResume( + resultReg, + funcInfo->awaitRegister, + resumeNormal, + Js::Constants::NoByteCodeLabel, + byteCodeGenerator, + funcInfo); + + // Throw case: throw the resume value + writer->Reg1(Js::OpCode::Throw, resultReg); + + // Normal case: continue (value is already in result register) + writer->MarkLabel(resumeNormal); +} + +void EmitCreateYieldResult( + Js::RegSlot resultReg, + Js::RegSlot inputReg, + ByteCodeGenerator* byteCodeGenerator, + FuncInfo* funcInfo) +{ + Assert(resultReg != inputReg); + + byteCodeGenerator->Writer()->Reg1(Js::OpCode::NewScObjectSimple, resultReg); + + byteCodeGenerator->Writer()->PatchableProperty( + Js::OpCode::StFld, + inputReg, + resultReg, + funcInfo->FindOrAddInlineCacheId(resultReg, Js::PropertyIds::value, false, true)); + + byteCodeGenerator->Writer()->PatchableProperty( + Js::OpCode::StFld, + funcInfo->falseConstantRegister, + resultReg, + funcInfo->FindOrAddInlineCacheId(resultReg, Js::PropertyIds::done, false, true)); +} + +void EmitYield( + Js::RegSlot resultReg, + Js::RegSlot inputReg, + ByteCodeGenerator* byteCodeGenerator, + FuncInfo* funcInfo) +{ + auto* writer = byteCodeGenerator->Writer(); + Js::RegSlot yieldReg = funcInfo->yieldRegister; + + EmitCreateYieldResult(yieldReg, inputReg, byteCodeGenerator, funcInfo); + + Js::ByteCodeLabel resumeNormal = writer->DefineLabel(); + Js::ByteCodeLabel resumeThrow = writer->DefineLabel(); + + EmitYieldAndResume( + resultReg, + yieldReg, + resumeNormal, + resumeThrow, + byteCodeGenerator, + funcInfo); + + // Return case: set the return register value and branch to function exit + EmitReturnFromYield(resultReg, byteCodeGenerator, funcInfo); + + // Throw case: throw the resume value + writer->MarkLabel(resumeThrow); + writer->Reg1(Js::OpCode::Throw, resultReg); + + // Normal case: continue (value is already in result register) + writer->MarkLabel(resumeNormal); +} + +void EmitYieldStar( + ParseNodeUni* yieldStarNode, + ByteCodeGenerator* byteCodeGenerator, + FuncInfo* funcInfo) +{ + bool isAsync = funcInfo->IsAsyncGenerator(); + auto* writer = byteCodeGenerator->Writer(); + + Js::ByteCodeLabel loopEntrance = writer->DefineLabel(); + Js::ByteCodeLabel continueLoop = writer->DefineLabel(); + Js::ByteCodeLabel continuePastLoop = writer->DefineLabel(); + Js::ByteCodeLabel finishReturn = writer->DefineLabel(); + Js::ByteCodeLabel finishNormal = writer->DefineLabel(); + + Js::RegSlot yieldStarReg = yieldStarNode->location; + + // Initialize shouldReturn to false; this flag is used to indicate + // whether we should return or continue after the loop is complete + Js::RegSlot shouldReturnReg = funcInfo->AcquireTmpRegister(); + writer->Reg1(Js::OpCode::LdFalse, shouldReturnReg); + + // Evaluate operand and get the inner iterator + Js::RegSlot iteratorReg = funcInfo->AcquireTmpRegister(); + ParseNode* operand = yieldStarNode->pnode1; + Emit(operand, byteCodeGenerator, funcInfo, false); + + if (isAsync) + EmitGetAsyncIterator(iteratorReg, operand->location, byteCodeGenerator, funcInfo); + else + EmitGetIterator(iteratorReg, operand->location, byteCodeGenerator, funcInfo); + + funcInfo->ReleaseLoc(operand); + + // Load next method + Js::RegSlot nextMethodReg = funcInfo->AcquireTmpRegister(); + EmitGetObjectMethod( + nextMethodReg, + iteratorReg, + Js::PropertyIds::next, + byteCodeGenerator, + funcInfo); + + // Call the next method of iterator to obtain the first result + EmitFunctionCall( + yieldStarReg, + nextMethodReg, + iteratorReg, + funcInfo->undefinedConstantRegister, + byteCodeGenerator, + funcInfo); + + // Begin loop + uint loopId = writer->EnterLoop(loopEntrance); + + // If this is an async generator await the yielded value + if (isAsync) + EmitAwait(yieldStarReg, yieldStarReg, byteCodeGenerator, funcInfo); + + EmitThrowOnNotObject(yieldStarReg, byteCodeGenerator); + + // Get the iterator result's done property + Js::RegSlot doneReg = funcInfo->AcquireTmpRegister(); + EmitGetObjectProperty( + doneReg, + yieldStarReg, + Js::PropertyIds::done, + byteCodeGenerator, + funcInfo); + + // Break out of loop if the done property is truthy + writer->BrReg1(Js::OpCode::BrTrue_A, continuePastLoop, doneReg); + funcInfo->ReleaseTmpRegister(doneReg); + + // Reset shouldReturn to false + writer->Reg1(Js::OpCode::LdFalse_ReuseLoc, shouldReturnReg); + + Js::ByteCodeLabel resumeNormal = writer->DefineLabel(); + Js::ByteCodeLabel resumeThrow = writer->DefineLabel(); + Js::RegSlot resumeValueReg = funcInfo->AcquireTmpRegister(); + + if (isAsync) + { + // For async generators, extract the value property and wrap it in a + // new result object, so that exceptions thrown when getting the value + // property are handled appropriately + Js::RegSlot valueReg = funcInfo->AcquireTmpRegister(); + + EmitGetObjectProperty( + valueReg, + yieldStarReg, + Js::PropertyIds::value, + byteCodeGenerator, + funcInfo); + + EmitCreateYieldResult(yieldStarReg, valueReg, byteCodeGenerator, funcInfo); + + funcInfo->ReleaseTmpRegister(valueReg); + } + + // Yield the next result to the caller + EmitYieldAndResume( + resumeValueReg, + yieldStarReg, + resumeNormal, + resumeThrow, + byteCodeGenerator, + funcInfo); + + // Return case: set shouldReturn to true and attempt to call return + writer->Reg1(Js::OpCode::LdTrue_ReuseLoc, shouldReturnReg); + + Js::RegSlot returnMethodReg = funcInfo->AcquireTmpRegister(); + + // Load return method + Js::ByteCodeLabel noReturnMethod = writer->DefineLabel(); + EmitGetOptionalObjectMethod( + returnMethodReg, + iteratorReg, + Js::PropertyIds::return_, + noReturnMethod, + byteCodeGenerator, + funcInfo); + + // The iterator has a return method: call method and loop + EmitFunctionCall( + yieldStarReg, + returnMethodReg, + iteratorReg, + resumeValueReg, + byteCodeGenerator, + funcInfo); + + funcInfo->ReleaseTmpRegister(returnMethodReg); + writer->Br(continueLoop); + + // The iterator does not have a return method: exit loop + writer->MarkLabel(noReturnMethod); + + if (isAsync) { - switch (node->op) - { - case Js::OpCode::TryFinallyWithYield: - this->Writer()->Empty(Js::OpCode::LeaveNull); - break; - case Js::OpCode::TryCatch: - case Js::OpCode::ResumeFinally: - case Js::OpCode::ResumeCatch: - this->Writer()->Empty(Js::OpCode::Leave); - break; - default: - AssertMsg(false, "Unexpected OpCode before Yield in the Try-Catch-Finally cache for generator!"); - break; - } + Js::RegSlot awaitValue = funcInfo->AcquireTmpRegister(); + writer->Reg2(Js::OpCode::Ld_A, awaitValue, resumeValueReg); + + EmitAwait(awaitValue, awaitValue, byteCodeGenerator, funcInfo); + writer->Reg2(Js::OpCode::Ld_A_ReuseLoc, yieldStarReg, awaitValue); + + funcInfo->ReleaseTmpRegister(awaitValue); } + else + writer->Reg2(Js::OpCode::Ld_A_ReuseLoc, yieldStarReg, resumeValueReg); + + writer->Br(finishReturn); + + // Throw case: attempt to call throw + writer->MarkLabel(resumeThrow); + + Js::RegSlot throwMethodReg = funcInfo->AcquireTmpRegister(); + Js::ByteCodeLabel noThrowMethod = writer->DefineLabel(); + + // Load throw method + EmitGetOptionalObjectMethod( + throwMethodReg, + iteratorReg, + Js::PropertyIds::throw_, + noThrowMethod, + byteCodeGenerator, + funcInfo); + + // Iterator has throw method: call method and loop + EmitFunctionCall( + yieldStarReg, + throwMethodReg, + iteratorReg, + resumeValueReg, + byteCodeGenerator, + funcInfo); + + funcInfo->ReleaseTmpRegister(throwMethodReg); + writer->Br(continueLoop); + + // Iterator does not have a throw method; close the iterator and throw a TypeError + writer->MarkLabel(noThrowMethod); + EmitIteratorClose(iteratorReg, byteCodeGenerator, funcInfo, isAsync); + byteCodeGenerator->Writer()->W1( + Js::OpCode::RuntimeTypeError, + SCODE_CODE(JSERR_YieldStarThrowMissing)); + + // Normal case: call next method of iterator + writer->MarkLabel(resumeNormal); + EmitFunctionCall( + yieldStarReg, + nextMethodReg, + iteratorReg, + resumeValueReg, + byteCodeGenerator, + funcInfo); + + funcInfo->ReleaseTmpRegister(resumeValueReg); + funcInfo->ReleaseTmpRegister(nextMethodReg); + funcInfo->ReleaseTmpRegister(iteratorReg); + + // Loop end + writer->MarkLabel(continueLoop); + writer->Br(loopEntrance); + writer->MarkLabel(continuePastLoop); + writer->ExitLoop(loopId); + + // Load the iterator result value into place + EmitGetObjectProperty( + yieldStarReg, + yieldStarReg, + Js::PropertyIds::value, + byteCodeGenerator, + funcInfo); + + writer->BrReg1(Js::OpCode::BrFalse_A, finishNormal, shouldReturnReg); + funcInfo->ReleaseTmpRegister(shouldReturnReg); + + // Return case: return the value from the generator + writer->MarkLabel(finishReturn); + EmitReturnFromYield(yieldStarReg, byteCodeGenerator, funcInfo); + + // Normal case + writer->MarkLabel(finishNormal); } -void ByteCodeGenerator::EmitTryBlockHeadersAfterYield() +void EmitClass(ParseNodeClass * pnodeClass, ByteCodeGenerator * byteCodeGenerator, FuncInfo * funcInfo) { - for (TryScopeRecord* node = this->tryScopeRecordsList.Head(); node != nullptr; node = node->Next()) + funcInfo->AcquireLoc(pnodeClass); + + Assert(pnodeClass->pnodeConstructor); + pnodeClass->pnodeConstructor->location = pnodeClass->location; + Js::RegSlot protoLoc = funcInfo->AcquireTmpRegister(); + BeginEmitBlock(pnodeClass->pnodeBlock, byteCodeGenerator, funcInfo); + + Js::RegSlot frameDisplayLoc = funcInfo->frameDisplayRegister != Js::Constants::NoRegister ? funcInfo->frameDisplayRegister : funcInfo->GetEnvRegister(); + Js::RegSlot tmpFrameDisplayLoc = funcInfo->AcquireTmpRegister(); + frameDisplayLoc = byteCodeGenerator->PrependLocalScopes(frameDisplayLoc, tmpFrameDisplayLoc, funcInfo); + if (frameDisplayLoc != tmpFrameDisplayLoc) { - switch (node->op) - { - case Js::OpCode::TryCatch: - this->Writer()->Br(node->op, node->label); - break; - case Js::OpCode::TryFinallyWithYield: - case Js::OpCode::ResumeFinally: - this->Writer()->BrReg2(node->op, node->label, node->reg1, node->reg2); - break; - case Js::OpCode::ResumeCatch: - this->Writer()->Empty(node->op); - break; - default: - AssertMsg(false, "Unexpected OpCode after yield in the Try-Catch-Finally cache for generator!"); - break; - } + funcInfo->ReleaseTmpRegister(tmpFrameDisplayLoc); } -} -void EmitYield(Js::RegSlot inputLocation, Js::RegSlot resultLocation, ByteCodeGenerator* byteCodeGenerator, FuncInfo* funcInfo, Js::RegSlot yieldStarIterator) -{ - // If the bytecode emitted by this function is part of 'yield*', inputLocation is the object - // returned by the iterable's next/return/throw method. Otherwise, it is the yielded value. - if (yieldStarIterator == Js::Constants::NoRegister) + // Extends + if (pnodeClass->pnodeExtends) { - byteCodeGenerator->Writer()->Reg1(Js::OpCode::NewScObjectSimple, funcInfo->yieldRegister); + Emit(pnodeClass->pnodeExtends, byteCodeGenerator, funcInfo, false); - uint cacheId = funcInfo->FindOrAddInlineCacheId(funcInfo->yieldRegister, Js::PropertyIds::value, false, true); - byteCodeGenerator->Writer()->PatchableProperty(Js::OpCode::StFld, inputLocation, funcInfo->yieldRegister, cacheId); + byteCodeGenerator->StartStatement(pnodeClass->pnodeExtends); - cacheId = funcInfo->FindOrAddInlineCacheId(funcInfo->yieldRegister, Js::PropertyIds::done, false, true); - byteCodeGenerator->Writer()->PatchableProperty(Js::OpCode::StFld, funcInfo->falseConstantRegister, funcInfo->yieldRegister, cacheId); - } - else - { - byteCodeGenerator->Writer()->Reg2(Js::OpCode::Ld_A, funcInfo->yieldRegister, inputLocation); - } + Js::RegSlot ctorParentLoc = funcInfo->IsTmpReg(pnodeClass->pnodeExtends->location) ? pnodeClass->pnodeExtends->location : funcInfo->AcquireTmpRegister(); + Js::RegSlot protoParentLoc = funcInfo->AcquireTmpRegister(); - byteCodeGenerator->EmitLeaveOpCodesBeforeYield(); - byteCodeGenerator->Writer()->Reg2(Js::OpCode::Yield, funcInfo->yieldRegister, funcInfo->yieldRegister); - byteCodeGenerator->EmitTryBlockHeadersAfterYield(); + if (pnodeClass->pnodeExtends->location != ctorParentLoc) + { + byteCodeGenerator->Writer()->Reg2(Js::OpCode::Ld_A_ReuseLoc, ctorParentLoc, pnodeClass->pnodeExtends->location); + } - if (yieldStarIterator == Js::Constants::NoRegister) - { - byteCodeGenerator->Writer()->Reg2(Js::OpCode::ResumeYield, resultLocation, funcInfo->yieldRegister); - } - else - { - byteCodeGenerator->Writer()->Reg3(Js::OpCode::ResumeYieldStar, resultLocation, funcInfo->yieldRegister, yieldStarIterator); - } -} + Js::ByteCodeLabel needProto = byteCodeGenerator->Writer()->DefineLabel(); + Js::ByteCodeLabel haveConstructor = byteCodeGenerator->Writer()->DefineLabel(); + Js::ByteCodeLabel labelParentsFound = byteCodeGenerator->Writer()->DefineLabel(); -void EmitYieldStar(ParseNodeUni* yieldStarNode, ByteCodeGenerator* byteCodeGenerator, FuncInfo* funcInfo) -{ - funcInfo->AcquireLoc(yieldStarNode); + byteCodeGenerator->Writer()->BrReg1(Js::OpCode::BrOnNotNullObj_A, needProto, ctorParentLoc); - Js::ByteCodeLabel loopEntrance = byteCodeGenerator->Writer()->DefineLabel(); - Js::ByteCodeLabel continuePastLoop = byteCodeGenerator->Writer()->DefineLabel(); + byteCodeGenerator->Writer()->Reg1(Js::OpCode::LdC_A_Null, protoParentLoc); + byteCodeGenerator->Writer()->Reg1(Js::OpCode::LdBaseFncProto, ctorParentLoc); + byteCodeGenerator->Writer()->Br(labelParentsFound); - Js::RegSlot iteratorLocation = funcInfo->AcquireTmpRegister(); + byteCodeGenerator->Writer()->MarkLabel(needProto); + byteCodeGenerator->Writer()->BrReg1(Js::OpCode::BrOnConstructor_A, haveConstructor, ctorParentLoc); + byteCodeGenerator->Writer()->W1(Js::OpCode::RuntimeTypeError, SCODE_CODE(JSERR_ErrorOnNew)); - // Evaluate operand - Emit(yieldStarNode->pnode1, byteCodeGenerator, funcInfo, false); - funcInfo->ReleaseLoc(yieldStarNode->pnode1); + byteCodeGenerator->Writer()->MarkLabel(haveConstructor); + uint cacheId = funcInfo->FindOrAddInlineCacheId(ctorParentLoc, Js::PropertyIds::prototype, false, false); + byteCodeGenerator->Writer()->PatchableProperty(Js::OpCode::LdFld_ReuseLoc, protoParentLoc, ctorParentLoc, cacheId); + byteCodeGenerator->Writer()->BrReg1(Js::OpCode::BrOnObjectOrNull_A, labelParentsFound, protoParentLoc); + byteCodeGenerator->Writer()->W1(Js::OpCode::RuntimeTypeError, SCODE_CODE(JSERR_InvalidPrototype)); + + byteCodeGenerator->Writer()->MarkLabel(labelParentsFound); + if (frameDisplayLoc == funcInfo->frameDisplayRegister || frameDisplayLoc == funcInfo->GetEnvRegister()) + { + byteCodeGenerator->Writer()->Reg4U(Js::OpCode::InitClass, pnodeClass->location, protoLoc, ctorParentLoc, protoParentLoc, pnodeClass->pnodeConstructor->nestedIndex); + } + else + { + byteCodeGenerator->Writer()->Reg5U(Js::OpCode::InitInnerClass, pnodeClass->location, protoLoc, ctorParentLoc, protoParentLoc, frameDisplayLoc, pnodeClass->pnodeConstructor->nestedIndex); + } - EmitGetIterator(iteratorLocation, yieldStarNode->pnode1->location, byteCodeGenerator, funcInfo); + funcInfo->ReleaseTmpRegister(protoParentLoc); + funcInfo->ReleaseTmpRegister(ctorParentLoc); - // Call the iterator's next() - EmitIteratorNext(yieldStarNode->location, iteratorLocation, funcInfo->undefinedConstantRegister, byteCodeGenerator, funcInfo); + byteCodeGenerator->EndStatement(pnodeClass->pnodeExtends); + } + else + { + if (frameDisplayLoc == funcInfo->frameDisplayRegister || frameDisplayLoc == funcInfo->GetEnvRegister()) + { + byteCodeGenerator->Writer()->Reg2U(Js::OpCode::InitBaseClass, pnodeClass->location, protoLoc, pnodeClass->pnodeConstructor->nestedIndex); + } + else + { + byteCodeGenerator->Writer()->Reg3U(Js::OpCode::InitInnerBaseClass, pnodeClass->location, protoLoc, frameDisplayLoc, pnodeClass->pnodeConstructor->nestedIndex); + } + } - uint loopId = byteCodeGenerator->Writer()->EnterLoop(loopEntrance); - // since a yield* doesn't have a user defined body, we cannot return from this loop - // which means we don't need to support EmitJumpCleanup() and there do not need to - // remember the loopId like the loop statements do. + funcInfo->ReleaseTmpRegister(frameDisplayLoc); - Js::RegSlot doneLocation = funcInfo->AcquireTmpRegister(); - EmitIteratorComplete(doneLocation, yieldStarNode->location, byteCodeGenerator, funcInfo); + // Methods + bool isObjectEmpty = true; + ParseNode * pnodeMembers = pnodeClass->pnodeMembers; + ParseNode * pnodeMember; + ParseNodeFnc * pnodeMemberFnc; + if (pnodeMembers != nullptr) + { + while (pnodeMembers->nop == knopList) + { + pnodeMember = pnodeMembers->AsParseNodeBin()->pnode1; + pnodeMemberFnc = pnodeMember->AsParseNodeBin()->pnode2->AsParseNodeFnc(); + EmitMemberNode(pnodeMember, pnodeMemberFnc->IsStaticMember() ? pnodeClass->location : protoLoc, byteCodeGenerator, funcInfo, pnodeClass, /*useStore*/ false, &isObjectEmpty); + pnodeMembers = pnodeMembers->AsParseNodeBin()->pnode2; + } + pnodeMemberFnc = pnodeMembers->AsParseNodeBin()->pnode2->AsParseNodeFnc(); + EmitMemberNode(pnodeMembers, pnodeMemberFnc->IsStaticMember() ? pnodeClass->location : protoLoc, byteCodeGenerator, funcInfo, pnodeClass, /*useStore*/ false, &isObjectEmpty); + } - // branch past the loop if the done property is truthy - byteCodeGenerator->Writer()->BrReg1(Js::OpCode::BrTrue_A, continuePastLoop, doneLocation); - funcInfo->ReleaseTmpRegister(doneLocation); + funcInfo->ReleaseTmpRegister(protoLoc); - EmitYield(yieldStarNode->location, yieldStarNode->location, byteCodeGenerator, funcInfo, iteratorLocation); + // Emit name binding. + if (pnodeClass->pnodeName) + { + Symbol * sym = pnodeClass->pnodeName->sym; + sym->SetNeedDeclaration(false); + byteCodeGenerator->EmitPropStore(pnodeClass->location, sym, nullptr, funcInfo, false, true); + } - funcInfo->ReleaseTmpRegister(iteratorLocation); + EndEmitBlock(pnodeClass->pnodeBlock, byteCodeGenerator, funcInfo); - byteCodeGenerator->Writer()->Br(loopEntrance); - byteCodeGenerator->Writer()->MarkLabel(continuePastLoop); - byteCodeGenerator->Writer()->ExitLoop(loopId); + if (pnodeClass->pnodeDeclName) + { + Symbol * sym = pnodeClass->pnodeDeclName->sym; + sym->SetNeedDeclaration(false); + byteCodeGenerator->EmitPropStore(pnodeClass->location, sym, nullptr, funcInfo, true, false); + } - // Put the iterator result's value in yieldStarNode->location. - // It will be used as the result value of the yield* operator expression. - EmitIteratorValue(yieldStarNode->location, yieldStarNode->location, byteCodeGenerator, funcInfo); + if (pnodeClass->IsDefaultModuleExport()) + { + byteCodeGenerator->EmitAssignmentToDefaultModuleExport(pnodeClass, funcInfo); + } } void TrackIntConstantsOnGlobalUserObject(ByteCodeGenerator *byteCodeGenerator, bool isSymGlobalAndSingleAssignment, Js::PropertyId propertyId) @@ -10057,13 +11025,16 @@ void TrackMemberNodesInObjectForIntConstants(ByteCodeGenerator *byteCodeGenerato while (memberList != nullptr) { ParseNodePtr memberNode = memberList->nop == knopList ? memberList->AsParseNodeBin()->pnode1 : memberList; - ParseNodePtr memberNameNode = memberNode->AsParseNodeBin()->pnode1; - ParseNodePtr memberValNode = memberNode->AsParseNodeBin()->pnode2; - - if (memberNameNode->nop != knopComputedName && memberValNode->nop == knopInt) + if (memberNode->nop != knopEllipsis) { - Js::PropertyId propertyId = memberNameNode->AsParseNodeStr()->pid->GetPropertyId(); - TrackIntConstantsOnGlobalUserObject(byteCodeGenerator, true, propertyId); + ParseNodePtr memberNameNode = memberNode->AsParseNodeBin()->pnode1; + ParseNodePtr memberValNode = memberNode->AsParseNodeBin()->pnode2; + + if (memberNameNode->nop != knopComputedName && memberValNode->nop == knopInt) + { + Js::PropertyId propertyId = memberNameNode->AsParseNodeStr()->pid->GetPropertyId(); + TrackIntConstantsOnGlobalUserObject(byteCodeGenerator, true, propertyId); + } } memberList = memberList->nop == knopList ? memberList->AsParseNodeBin()->pnode2 : nullptr; @@ -10153,7 +11124,7 @@ void TrackGlobalIntAssignments(ParseNodePtr pnode, ByteCodeGenerator * byteCodeG } } -void Emit(ParseNode *pnode, ByteCodeGenerator *byteCodeGenerator, FuncInfo *funcInfo, BOOL fReturnValue, bool isConstructorCall, Js::RegSlot bindingNameLocation, bool isTopLevel) +void Emit(ParseNode* pnode, ByteCodeGenerator* byteCodeGenerator, FuncInfo* funcInfo, BOOL fReturnValue, bool isConstructorCall, bool isTopLevel) { if (pnode == nullptr) { @@ -10182,6 +11153,9 @@ void Emit(ParseNode *pnode, ByteCodeGenerator *byteCodeGenerator, FuncInfo *func // TODO: protocol for combining string constants break; // PTNODE(knopRegExp , "reg expr" ,None ,Pid ,fnopLeaf|fnopConst) + case knopBigInt: + // PTNODE(knopBigInt , "bigint const" ,None ,Pid ,fnopLeaf|fnopConst) + break; case knopRegExp: funcInfo->GetParsedFunctionBody()->SetLiteralRegex(pnode->AsParseNodeRegExp()->regexPatternIndex, pnode->AsParseNodeRegExp()->regexPattern); byteCodeGenerator->Writer()->Reg1Unsigned1(Js::OpCode::NewRegEx, funcInfo->AcquireLoc(pnode), pnode->AsParseNodeRegExp()->regexPatternIndex); @@ -10250,7 +11224,7 @@ void Emit(ParseNode *pnode, ByteCodeGenerator *byteCodeGenerator, FuncInfo *func Emit(pnode->AsParseNodeUni()->pnode1, byteCodeGenerator, funcInfo, false); byteCodeGenerator->Writer()->Reg1(Js::OpCode::LdFalse, pnode->location); byteCodeGenerator->Writer()->BrReg1(Js::OpCode::BrTrue_A, doneLabel, pnode->AsParseNodeUni()->pnode1->location); - byteCodeGenerator->Writer()->Reg1(Js::OpCode::LdTrue, pnode->location); + byteCodeGenerator->Writer()->Reg1(Js::OpCode::LdTrue_ReuseLoc, pnode->location); byteCodeGenerator->Writer()->MarkLabel(doneLabel); } funcInfo->ReleaseLoc(pnode->AsParseNodeUni()->pnode1); @@ -10261,7 +11235,7 @@ void Emit(ParseNode *pnode, ByteCodeGenerator *byteCodeGenerator, FuncInfo *func case knopEllipsis: { Emit(pnode->AsParseNodeUni()->pnode1, byteCodeGenerator, funcInfo, false); - // Transparently pass the location of the array. + // Transparently pass the location of the object or array. pnode->location = pnode->AsParseNodeUni()->pnode1->location; break; } @@ -10272,7 +11246,16 @@ void Emit(ParseNode *pnode, ByteCodeGenerator *byteCodeGenerator, FuncInfo *func if (pnode->isUsed || fReturnValue) { byteCodeGenerator->StartStatement(pnode); - const Js::OpCode op = (pnode->nop == knopDecPost) ? Js::OpCode::Sub_A : Js::OpCode::Add_A; + bool isESBigIntEnabled = byteCodeGenerator->GetScriptContext()->GetConfig()->IsESBigIntEnabled(); + Js::OpCode op1; + if (isESBigIntEnabled) + { + op1 = (pnode->nop == knopDecPost) ? Js::OpCode::Decr_Num_A : Js::OpCode::Incr_Num_A; + } + else + { + op1 = (pnode->nop == knopDecPost) ? Js::OpCode::Sub_A : Js::OpCode::Add_A; + } ParseNode* pnode1 = pnode->AsParseNodeUni()->pnode1; // Grab a register for the expression result. @@ -10280,7 +11263,8 @@ void Emit(ParseNode *pnode, ByteCodeGenerator *byteCodeGenerator, FuncInfo *func // Load the initial value, convert it (this is the expression result), and increment it. EmitLoad(pnode1, byteCodeGenerator, funcInfo); - byteCodeGenerator->Writer()->Reg2(Js::OpCode::Conv_Num, pnode->location, pnode1->location); + const Js::OpCode op2 = isESBigIntEnabled ? Js::OpCode::Conv_Numeric : Js::OpCode::Conv_Num; + byteCodeGenerator->Writer()->Reg2(op2, pnode->location, pnode1->location); // Use temporary register if lhs cannot be assigned Js::RegSlot incDecResult = pnode1->location; @@ -10289,10 +11273,17 @@ void Emit(ParseNode *pnode, ByteCodeGenerator *byteCodeGenerator, FuncInfo *func { incDecResult = funcInfo->AcquireTmpRegister(); } - - Js::RegSlot oneReg = funcInfo->constantToRegister.LookupWithKey(1, Js::Constants::NoRegister); - Assert(oneReg != Js::Constants::NoRegister); - byteCodeGenerator->Writer()->Reg3(op, incDecResult, pnode->location, oneReg); + + if (isESBigIntEnabled) + { + byteCodeGenerator->Writer()->Reg2(op1, incDecResult, pnode->location); + } + else + { + Js::RegSlot oneReg = funcInfo->constantToRegister.LookupWithKey(1, Js::Constants::NoRegister); + Assert(oneReg != Js::Constants::NoRegister); + byteCodeGenerator->Writer()->Reg3(op1, incDecResult, pnode->location, oneReg); + } // Store the incremented value. EmitAssignment(nullptr, pnode1, incDecResult, byteCodeGenerator, funcInfo); @@ -10528,7 +11519,7 @@ void Emit(ParseNode *pnode, ByteCodeGenerator *byteCodeGenerator, FuncInfo *func Js::PropertyId propertyId = pexpr->AsParseNodeBin()->pnode2->AsParseNodeName()->PropertyIdFromNameNode(); funcInfo->AcquireLoc(pnode); byteCodeGenerator->Writer()->Property(Js::OpCode::DeleteFld, pnode->location, pexpr->AsParseNodeBin()->pnode1->location, - funcInfo->FindOrAddReferencedPropertyId(propertyId)); + funcInfo->FindOrAddReferencedPropertyId(propertyId), byteCodeGenerator->forceStrictModeForClassComputedPropertyName); } break; @@ -10618,44 +11609,37 @@ void Emit(ParseNode *pnode, ByteCodeGenerator *byteCodeGenerator, FuncInfo *func case knopDot: { Emit(pnode->AsParseNodeBin()->pnode1, byteCodeGenerator, funcInfo, false); - funcInfo->ReleaseLoc(pnode->AsParseNodeBin()->pnode1); - funcInfo->AcquireLoc(pnode); - Js::PropertyId propertyId = pnode->AsParseNodeBin()->pnode2->AsParseNodeName()->PropertyIdFromNameNode(); Js::RegSlot callObjLocation = pnode->AsParseNodeBin()->pnode1->location; Js::RegSlot protoLocation = callObjLocation; + if (ByteCodeGenerator::IsSuper(pnode->AsParseNodeBin()->pnode1)) + { + Emit(pnode->AsParseNodeSuperReference()->pnodeThis, byteCodeGenerator, funcInfo, false); + protoLocation = byteCodeGenerator->EmitLdObjProto(Js::OpCode::LdHomeObjProto, callObjLocation, funcInfo); + funcInfo->ReleaseLoc(pnode->AsParseNodeSuperReference()->pnodeThis); + } + + funcInfo->ReleaseLoc(pnode->AsParseNodeBin()->pnode1); + funcInfo->AcquireLoc(pnode); + Js::PropertyId propertyId = pnode->AsParseNodeBin()->pnode2->AsParseNodeName()->PropertyIdFromNameNode(); + uint cacheId = funcInfo->FindOrAddInlineCacheId(protoLocation, propertyId, false, false); + if (propertyId == Js::PropertyIds::length) { - uint cacheId = funcInfo->FindOrAddInlineCacheId(protoLocation, propertyId, false, false); byteCodeGenerator->Writer()->PatchableProperty(Js::OpCode::LdLen_A, pnode->location, protoLocation, cacheId); } else if (pnode->IsCallApplyTargetLoad()) { - if (ByteCodeGenerator::IsSuper(pnode->AsParseNodeBin()->pnode1)) - { - Emit(pnode->AsParseNodeSuperReference()->pnodeThis, byteCodeGenerator, funcInfo, false); - protoLocation = byteCodeGenerator->EmitLdObjProto(Js::OpCode::LdHomeObjProto, callObjLocation, funcInfo); - funcInfo->ReleaseLoc(pnode->AsParseNodeSuperReference()->pnodeThis); - } - uint cacheId = funcInfo->FindOrAddInlineCacheId(protoLocation, propertyId, false, false); byteCodeGenerator->Writer()->PatchableProperty(Js::OpCode::LdFldForCallApplyTarget, pnode->location, protoLocation, cacheId); } + else if (ByteCodeGenerator::IsSuper(pnode->AsParseNodeBin()->pnode1)) + { + byteCodeGenerator->Writer()->PatchablePropertyWithThisPtr(Js::OpCode::LdSuperFld, pnode->location, protoLocation, pnode->AsParseNodeSuperReference()->pnodeThis->location, cacheId, isConstructorCall); + } else { - if (ByteCodeGenerator::IsSuper(pnode->AsParseNodeBin()->pnode1)) - { - Emit(pnode->AsParseNodeSuperReference()->pnodeThis, byteCodeGenerator, funcInfo, false); - protoLocation = byteCodeGenerator->EmitLdObjProto(Js::OpCode::LdHomeObjProto, callObjLocation, funcInfo); - funcInfo->ReleaseLoc(pnode->AsParseNodeSuperReference()->pnodeThis); - uint cacheId = funcInfo->FindOrAddInlineCacheId(protoLocation, propertyId, false, false); - byteCodeGenerator->Writer()->PatchablePropertyWithThisPtr(Js::OpCode::LdSuperFld, pnode->location, protoLocation, pnode->AsParseNodeSuperReference()->pnodeThis->location, cacheId, isConstructorCall); - } - else - { - uint cacheId = funcInfo->FindOrAddInlineCacheId(callObjLocation, propertyId, false, false); - byteCodeGenerator->Writer()->PatchableProperty(Js::OpCode::LdFld, pnode->location, callObjLocation, cacheId, isConstructorCall); - } + byteCodeGenerator->Writer()->PatchableProperty(Js::OpCode::LdFld, pnode->location, callObjLocation, cacheId, isConstructorCall); } break; @@ -10681,7 +11665,7 @@ void Emit(ParseNode *pnode, ByteCodeGenerator *byteCodeGenerator, FuncInfo *func EmitAssignment(nullptr, lhs, rhs->location, byteCodeGenerator, funcInfo); } funcInfo->ReleaseLoc(rhs); - if (!(byteCodeGenerator->IsES6DestructuringEnabled() && (lhs->IsPattern()))) + if (!lhs->IsPattern()) { funcInfo->ReleaseReference(lhs); } @@ -10724,30 +11708,17 @@ void Emit(ParseNode *pnode, ByteCodeGenerator *byteCodeGenerator, FuncInfo *func } while (pnode1->nop == knopComma); Emit(pnode1, byteCodeGenerator, funcInfo, false); - if (funcInfo->IsTmpReg(pnode1->location)) - { - byteCodeGenerator->Writer()->Reg1(Js::OpCode::Unused, pnode1->location); - } - while (!rhsStack.Empty()) { ParseNode *pnodeRhs = rhsStack.Pop(); pnodeRhs->isUsed = false; Emit(pnodeRhs, byteCodeGenerator, funcInfo, false); - if (funcInfo->IsTmpReg(pnodeRhs->location)) - { - byteCodeGenerator->Writer()->Reg1(Js::OpCode::Unused, pnodeRhs->location); - } funcInfo->ReleaseLoc(pnodeRhs); } } else { Emit(pnode1, byteCodeGenerator, funcInfo, false); - if (funcInfo->IsTmpReg(pnode1->location)) - { - byteCodeGenerator->Writer()->Reg1(Js::OpCode::Unused, pnode1->location); - } } funcInfo->ReleaseLoc(pnode1); @@ -10774,7 +11745,7 @@ void Emit(ParseNode *pnode, ByteCodeGenerator *byteCodeGenerator, FuncInfo *func // We use a single dest here for the whole generating boolean expr, because we were poorly // optimizing the previous version where we had a dest for each level funcInfo->AcquireLoc(pnode); - EmitGeneratingBooleanExpression(pnode, doneLabel, true, doneLabel, true, pnode->location, byteCodeGenerator, funcInfo); + EmitGeneratingBooleanExpression(pnode, doneLabel, true, doneLabel, true, pnode->location, false, byteCodeGenerator, funcInfo); byteCodeGenerator->Writer()->MarkLabel(doneLabel); ENDSTATEMENET_IFTOPLEVEL(isTopLevel, pnode); break; @@ -10787,7 +11758,33 @@ void Emit(ParseNode *pnode, ByteCodeGenerator *byteCodeGenerator, FuncInfo *func // We use a single dest here for the whole generating boolean expr, because we were poorly // optimizing the previous version where we had a dest for each level funcInfo->AcquireLoc(pnode); - EmitGeneratingBooleanExpression(pnode, doneLabel, true, doneLabel, true, pnode->location, byteCodeGenerator, funcInfo); + EmitGeneratingBooleanExpression(pnode, doneLabel, true, doneLabel, true, pnode->location, false, byteCodeGenerator, funcInfo); + byteCodeGenerator->Writer()->MarkLabel(doneLabel); + ENDSTATEMENET_IFTOPLEVEL(isTopLevel, pnode); + break; + } + // The Coalescing operator resolves to the left hand side if it is not null or undefined + // In that case the right hand side is not evaluated + // If the left hand side is null or undefined it resolves to the right hand side + // PTNODE(knopCoalesce , "??" ,None ,Bin ,fnopBin) + case knopCoalesce: + { + STARTSTATEMENET_IFTOPLEVEL(isTopLevel, pnode); + Js::ByteCodeLabel doneLabel = byteCodeGenerator->Writer()->DefineLabel(); + funcInfo->AcquireLoc(pnode); + + // LHS + Emit(pnode->AsParseNodeBin()->pnode1, byteCodeGenerator, funcInfo, false); + byteCodeGenerator->Writer()->Reg2(Js::OpCode::Ld_A, pnode->location, pnode->AsParseNodeBin()->pnode1->location); + funcInfo->ReleaseLoc(pnode->AsParseNodeBin()->pnode1); + // check for null/undefined with != null + byteCodeGenerator->Writer()->BrReg2(Js::OpCode::BrNeq_A, doneLabel, pnode->location, funcInfo->nullConstantRegister); + + // RHS + Emit(pnode->AsParseNodeBin()->pnode2, byteCodeGenerator, funcInfo, false); + byteCodeGenerator->Writer()->Reg2(Js::OpCode::Ld_A_ReuseLoc, pnode->location, pnode->AsParseNodeBin()->pnode2->location); + funcInfo->ReleaseLoc(pnode->AsParseNodeBin()->pnode2); + byteCodeGenerator->Writer()->MarkLabel(doneLabel); ENDSTATEMENET_IFTOPLEVEL(isTopLevel, pnode); break; @@ -10818,7 +11815,7 @@ void Emit(ParseNode *pnode, ByteCodeGenerator *byteCodeGenerator, FuncInfo *func byteCodeGenerator->Writer()->MarkLabel(falseLabel); Emit(pnode->AsParseNodeTri()->pnode3, byteCodeGenerator, funcInfo, false); - byteCodeGenerator->Writer()->Reg2(Js::OpCode::Ld_A, pnode->location, pnode->AsParseNodeTri()->pnode3->location); + byteCodeGenerator->Writer()->Reg2(Js::OpCode::Ld_A_ReuseLoc, pnode->location, pnode->AsParseNodeTri()->pnode3->location); funcInfo->ReleaseLoc(pnode->AsParseNodeTri()->pnode3); byteCodeGenerator->Writer()->MarkLabel(skipLabel); @@ -10956,85 +11953,12 @@ void Emit(ParseNode *pnode, ByteCodeGenerator *byteCodeGenerator, FuncInfo *func byteCodeGenerator->DefineOneFunction(pnode->AsParseNodeFnc(), funcInfo, false); } break; + // PTNODE(knopClassDecl, "class" ,None ,None ,fnopLeaf) case knopClassDecl: - { - ParseNodeClass * pnodeClass = pnode->AsParseNodeClass(); - funcInfo->AcquireLoc(pnodeClass); - - Assert(pnodeClass->pnodeConstructor); - pnodeClass->pnodeConstructor->location = pnodeClass->location; - - BeginEmitBlock(pnodeClass->pnodeBlock, byteCodeGenerator, funcInfo); - - // Extends - if (pnodeClass->pnodeExtends) - { - // We can't do StartStatement/EndStatement for pnodeExtends here because the load locations may differ between - // defer and nondefer parse modes. - Emit(pnodeClass->pnodeExtends, byteCodeGenerator, funcInfo, false); - } - - // Constructor - Emit(pnodeClass->pnodeConstructor, byteCodeGenerator, funcInfo, false); - - if (bindingNameLocation != Js::Constants::NoRegister && !pnodeClass->pnodeConstructor->pnodeName) - { - Assert(pnodeClass->pnodeConstructor->HasComputedName()); - byteCodeGenerator->Writer()->Reg2(Js::OpCode::SetComputedNameVar, pnodeClass->pnodeConstructor->location, bindingNameLocation); - } - - if (pnodeClass->pnodeExtends) - { - byteCodeGenerator->StartStatement(pnodeClass->pnodeExtends); - byteCodeGenerator->Writer()->InitClass(pnodeClass->location, pnodeClass->pnodeExtends->location); - byteCodeGenerator->EndStatement(pnodeClass->pnodeExtends); - } - else - { - byteCodeGenerator->Writer()->InitClass(pnodeClass->location); - } - - Js::RegSlot protoLoc = funcInfo->AcquireTmpRegister(); //register set if we have Instance Methods - int cacheId = funcInfo->FindOrAddInlineCacheId(pnodeClass->location, Js::PropertyIds::prototype, false, false); - byteCodeGenerator->Writer()->PatchableProperty(Js::OpCode::LdFld, protoLoc, pnodeClass->location, cacheId); - - // Static Methods - EmitClassInitializers(pnodeClass->pnodeStaticMembers, pnodeClass->location, byteCodeGenerator, funcInfo, pnode, /*isObjectEmpty*/ false); - - // Instance Methods - EmitClassInitializers(pnodeClass->pnodeMembers, protoLoc, byteCodeGenerator, funcInfo, pnode, /*isObjectEmpty*/ true); - funcInfo->ReleaseTmpRegister(protoLoc); - - // Emit name binding. - if (pnodeClass->pnodeName) - { - Symbol * sym = pnodeClass->pnodeName->sym; - sym->SetNeedDeclaration(false); - byteCodeGenerator->EmitPropStore(pnodeClass->location, sym, nullptr, funcInfo, false, true); - } - - EndEmitBlock(pnodeClass->pnodeBlock, byteCodeGenerator, funcInfo); - - if (pnodeClass->pnodeExtends) - { - funcInfo->ReleaseLoc(pnodeClass->pnodeExtends); - } - - if (pnodeClass->pnodeDeclName) - { - Symbol * sym = pnodeClass->pnodeDeclName->sym; - sym->SetNeedDeclaration(false); - byteCodeGenerator->EmitPropStore(pnodeClass->location, sym, nullptr, funcInfo, true, false); - } - - if (pnodeClass->IsDefaultModuleExport()) - { - byteCodeGenerator->EmitAssignmentToDefaultModuleExport(pnodeClass, funcInfo); - } - + EmitClass(pnode->AsParseNodeClass(), byteCodeGenerator, funcInfo); break; - } + case knopStrTemplate: STARTSTATEMENET_IFTOPLEVEL(isTopLevel, pnode); EmitStringTemplate(pnode->AsParseNodeStrTemplate(), byteCodeGenerator, funcInfo); @@ -11089,10 +12013,9 @@ void Emit(ParseNode *pnode, ByteCodeGenerator *byteCodeGenerator, FuncInfo *func BeginEmitBlock(pnodeFor->pnodeBlock, byteCodeGenerator, funcInfo); Emit(pnodeFor->pnodeInit, byteCodeGenerator, funcInfo, false); funcInfo->ReleaseLoc(pnodeFor->pnodeInit); - if (byteCodeGenerator->IsES6ForLoopSemanticsEnabled()) - { - CloneEmitBlock(pnodeFor->pnodeBlock, byteCodeGenerator, funcInfo); - } + + CloneEmitBlock(pnodeFor->pnodeBlock, byteCodeGenerator, funcInfo); + EmitLoop(pnodeFor, pnodeFor->pnodeCond, pnodeFor->pnodeBody, @@ -11179,6 +12102,7 @@ void Emit(ParseNode *pnode, ByteCodeGenerator *byteCodeGenerator, FuncInfo *func case knopForIn: EmitForInOrForOf(pnode->AsParseNodeForInOrForOf(), byteCodeGenerator, funcInfo, fReturnValue); break; + case knopForAwaitOf: case knopForOf: EmitForInOrForOf(pnode->AsParseNodeForInOrForOf(), byteCodeGenerator, funcInfo, fReturnValue); break; @@ -11188,14 +12112,22 @@ void Emit(ParseNode *pnode, ByteCodeGenerator *byteCodeGenerator, FuncInfo *func ParseNodeReturn * pnodeReturn = pnode->AsParseNodeReturn(); byteCodeGenerator->StartStatement(pnodeReturn); if (pnodeReturn->pnodeExpr != nullptr) - { + { if (pnodeReturn->pnodeExpr->location == Js::Constants::NoRegister) { // No need to burn a register for the return value. If we need a temp, use R0 directly. pnodeReturn->pnodeExpr->location = ByteCodeGenerator::ReturnRegister; } Emit(pnodeReturn->pnodeExpr, byteCodeGenerator, funcInfo, fReturnValue); - if (pnodeReturn->pnodeExpr->location != ByteCodeGenerator::ReturnRegister) + if (funcInfo->IsAsyncGenerator()) + { + EmitAwait( + ByteCodeGenerator::ReturnRegister, + pnodeReturn->pnodeExpr->location, + byteCodeGenerator, + funcInfo); + } + else if (pnodeReturn->pnodeExpr->location != ByteCodeGenerator::ReturnRegister) { byteCodeGenerator->Writer()->Reg2(Js::OpCode::Ld_A, ByteCodeGenerator::ReturnRegister, pnodeReturn->pnodeExpr->location); } @@ -11237,7 +12169,7 @@ void Emit(ParseNode *pnode, ByteCodeGenerator *byteCodeGenerator, FuncInfo *func } if (pnodeReturn->grfnop & fnopCleanup) { - EmitJumpCleanup(pnodeReturn, nullptr, byteCodeGenerator, funcInfo); + byteCodeGenerator->EmitJumpCleanup(nullptr, funcInfo); } byteCodeGenerator->Writer()->Br(funcInfo->singleExit); @@ -11270,12 +12202,9 @@ void Emit(ParseNode *pnode, ByteCodeGenerator *byteCodeGenerator, FuncInfo *func funcInfo->AcquireLoc(pnodeWith); Emit(pnodeWith->pnodeObj, byteCodeGenerator, funcInfo, false); - Js::RegSlot regVal = (byteCodeGenerator->GetScriptContext()->GetConfig()->IsES6UnscopablesEnabled()) ? funcInfo->AcquireTmpRegister() : pnodeWith->location; + Js::RegSlot regVal = funcInfo->AcquireTmpRegister(); byteCodeGenerator->Writer()->Reg2(Js::OpCode::Conv_Obj, regVal, pnodeWith->pnodeObj->location); - if (byteCodeGenerator->GetScriptContext()->GetConfig()->IsES6UnscopablesEnabled()) - { - byteCodeGenerator->Writer()->Reg2(Js::OpCode::NewUnscopablesWrapperObject, pnodeWith->location, regVal); - } + byteCodeGenerator->Writer()->Reg2(Js::OpCode::NewUnscopablesWrapperObject, pnodeWith->location, regVal); byteCodeGenerator->EndStatement(pnodeWith); #ifdef PERF_HINT @@ -11307,10 +12236,7 @@ void Emit(ParseNode *pnode, ByteCodeGenerator *byteCodeGenerator, FuncInfo *func { byteCodeGenerator->Writer()->MarkLabel(pnodeWith->breakLabel); } - if (byteCodeGenerator->GetScriptContext()->GetConfig()->IsES6UnscopablesEnabled()) - { - funcInfo->ReleaseTmpRegister(regVal); - } + funcInfo->ReleaseTmpRegister(regVal); funcInfo->ReleaseLoc(pnodeWith->pnodeObj); break; } @@ -11322,7 +12248,7 @@ void Emit(ParseNode *pnode, ByteCodeGenerator *byteCodeGenerator, FuncInfo *func byteCodeGenerator->StartStatement(pnodeJump); if (pnodeJump->grfnop & fnopCleanup) { - EmitJumpCleanup(pnodeJump, pnodeJump->pnodeTarget, byteCodeGenerator, funcInfo); + byteCodeGenerator->EmitJumpCleanup(pnodeJump->pnodeTarget, funcInfo); } byteCodeGenerator->Writer()->Br(pnodeJump->pnodeTarget->breakLabel); if (pnodeJump->emitLabels) @@ -11339,7 +12265,7 @@ void Emit(ParseNode *pnode, ByteCodeGenerator *byteCodeGenerator, FuncInfo *func byteCodeGenerator->StartStatement(pnodeJump); if (pnodeJump->grfnop & fnopCleanup) { - EmitJumpCleanup(pnodeJump, pnodeJump->pnodeTarget, byteCodeGenerator, funcInfo); + byteCodeGenerator->EmitJumpCleanup(pnodeJump->pnodeTarget, funcInfo); } byteCodeGenerator->Writer()->Br(pnodeJump->pnodeTarget->continueLabel); byteCodeGenerator->EndStatement(pnodeJump); @@ -11432,52 +12358,38 @@ void Emit(ParseNode *pnode, ByteCodeGenerator *byteCodeGenerator, FuncInfo *func byteCodeGenerator->Writer()->Br(Js::OpCode::TryCatch, catchLabel); - ByteCodeGenerator::TryScopeRecord tryRecForTry(Js::OpCode::TryCatch, catchLabel); - if (funcInfo->byteCodeFunction->IsCoroutine()) - { - byteCodeGenerator->tryScopeRecordsList.LinkToEnd(&tryRecForTry); - } - + byteCodeGenerator->PushJumpCleanupForTry(Js::OpCode::TryCatch, catchLabel); Emit(pnodeTry->pnodeBody, byteCodeGenerator, funcInfo, fReturnValue); - funcInfo->ReleaseLoc(pnodeTry->pnodeBody); + byteCodeGenerator->PopJumpCleanup(); - if (funcInfo->byteCodeFunction->IsCoroutine()) - { - byteCodeGenerator->tryScopeRecordsList.UnlinkFromEnd(); - } + funcInfo->ReleaseLoc(pnodeTry->pnodeBody); byteCodeGenerator->Writer()->RecordCrossFrameEntryExitRecord(/* isEnterBlock = */ false); byteCodeGenerator->Writer()->Empty(Js::OpCode::Leave); byteCodeGenerator->Writer()->Br(pnodeTryCatch->breakLabel); byteCodeGenerator->Writer()->MarkLabel(catchLabel); - - ParseNode *pnodeObj = pnodeCatch->GetParam(); - Assert(pnodeObj); - - Js::RegSlot location; - - bool acquiredTempLocation = false; + Js::RegSlot location = Js::Constants::NoRegister; Js::DebuggerScope *debuggerScope = nullptr; Js::DebuggerScopePropertyFlags debuggerPropertyFlags = Js::DebuggerScopePropertyFlags_CatchObject; + ParseNode *tempLocationNode = nullptr; - bool isPattern = pnodeObj->nop == knopParamPattern; - - if (isPattern) + if (pnodeCatch->HasPatternParam()) { - location = pnodeObj->AsParseNodeParamPattern()->location; + location = pnodeCatch->GetParam()->AsParseNodeParamPattern()->location; } - else + else if (pnodeCatch->HasParam()) { - location = pnodeObj->AsParseNodeName()->sym->GetLocation(); + location = pnodeCatch->GetParam()->AsParseNodeName()->sym->GetLocation(); } if (location == Js::Constants::NoRegister) { - location = funcInfo->AcquireLoc(pnodeObj); - acquiredTempLocation = true; + tempLocationNode = pnodeCatch->HasParam() ? pnodeCatch->GetParam() : pnodeCatch; + location = funcInfo->AcquireLoc(tempLocationNode); } + byteCodeGenerator->Writer()->Reg1(Js::OpCode::Catch, location); Scope *scope = pnodeCatch->scope; @@ -11493,7 +12405,6 @@ void Emit(ParseNode *pnode, ByteCodeGenerator *byteCodeGenerator, FuncInfo *func } else { - int index = Js::DebuggerScope::InvalidScopeIndex; debuggerScope = byteCodeGenerator->RecordStartScopeObject(pnodeTryCatch, Js::DiagCatchScopeInSlot, funcInfo->InnerScopeToRegSlot(scope), &index); byteCodeGenerator->Writer()->Num3(Js::OpCode::NewInnerScopeSlots, scope->GetInnerScopeIndex(), scope->GetScopeSlotCount() + Js::ScopeSlots::FirstSlotIndex, index); @@ -11551,9 +12462,10 @@ void Emit(ParseNode *pnode, ByteCodeGenerator *byteCodeGenerator, FuncInfo *func }; ByteCodeGenerator::TryScopeRecord tryRecForCatch(Js::OpCode::ResumeCatch, catchLabel); - if (isPattern) + if (pnodeCatch->HasPatternParam()) { - Parser::MapBindIdentifier(pnodeObj->AsParseNodeParamPattern()->pnode1, [&](ParseNodePtr item) + ParseNode *pnode1 = pnodeCatch->GetParam()->AsParseNodeParamPattern()->pnode1; + Parser::MapBindIdentifier(pnode1, [&](ParseNodePtr item) { Js::RegSlot itemLocation = item->AsParseNodeVar()->sym->GetLocation(); if (itemLocation == Js::Constants::NoRegister) @@ -11568,52 +12480,45 @@ void Emit(ParseNode *pnode, ByteCodeGenerator *byteCodeGenerator, FuncInfo *func // Now emitting bytecode for destructuring pattern byteCodeGenerator->StartStatement(pnodeCatch); - ParseNodePtr pnode1 = pnodeObj->AsParseNodeParamPattern()->pnode1; Assert(pnode1->IsPattern()); - if (funcInfo->byteCodeFunction->IsCoroutine()) - { - byteCodeGenerator->tryScopeRecordsList.LinkToEnd(&tryRecForCatch); - } + byteCodeGenerator->PushJumpCleanupForTry(Js::OpCode::ResumeCatch); EmitAssignment(nullptr, pnode1, location, byteCodeGenerator, funcInfo); byteCodeGenerator->EndStatement(pnodeCatch); } else { - ParamTrackAndInitialization(pnodeObj->AsParseNodeName()->sym, true /*initializeParam*/, location); - if (scope->GetMustInstantiate()) + if (pnodeCatch->HasParam()) { - pnodeObj->AsParseNodeName()->sym->SetIsGlobalCatch(true); + Symbol *sym = pnodeCatch->GetParam()->AsParseNodeName()->sym; + ParamTrackAndInitialization(sym, true /*initializeParam*/, location); + if (scope->GetMustInstantiate()) + { + sym->SetIsGlobalCatch(true); + } + byteCodeGenerator->Writer()->RecordCrossFrameEntryExitRecord(true); } - byteCodeGenerator->Writer()->RecordCrossFrameEntryExitRecord(true); - // Allow a debugger to stop on the 'catch (e)' + // Allow a debugger to stop on the 'catch' byteCodeGenerator->StartStatement(pnodeCatch); byteCodeGenerator->Writer()->Empty(Js::OpCode::Nop); byteCodeGenerator->EndStatement(pnodeCatch); - if (funcInfo->byteCodeFunction->IsCoroutine()) - { - byteCodeGenerator->tryScopeRecordsList.LinkToEnd(&tryRecForCatch); - } + + byteCodeGenerator->PushJumpCleanupForTry(Js::OpCode::ResumeCatch); } Emit(pnodeCatch->pnodeBody, byteCodeGenerator, funcInfo, fReturnValue); - if (funcInfo->byteCodeFunction->IsCoroutine()) - { - byteCodeGenerator->tryScopeRecordsList.UnlinkFromEnd(); - } - + byteCodeGenerator->PopJumpCleanup(); byteCodeGenerator->PopScope(); - byteCodeGenerator->RecordEndScopeObject(pnodeTryCatch); funcInfo->ReleaseLoc(pnodeCatch->pnodeBody); - if (acquiredTempLocation) + if (tempLocationNode != nullptr) { - funcInfo->ReleaseLoc(pnodeObj); + funcInfo->ReleaseLoc(tempLocationNode); } byteCodeGenerator->Writer()->RecordCrossFrameEntryExitRecord(false); @@ -11643,19 +12548,21 @@ void Emit(ParseNode *pnode, ByteCodeGenerator *byteCodeGenerator, FuncInfo *func // [CONSIDER][aneeshd] Ideally the TryFinallyWithYield opcode needs to be used only if there is a yield expression. // For now, if the function is generator we are using the TryFinallyWithYield. - ByteCodeGenerator::TryScopeRecord tryRecForTry(Js::OpCode::TryFinallyWithYield, finallyLabel); if (funcInfo->byteCodeFunction->IsCoroutine()) { regException = funcInfo->AcquireTmpRegister(); regOffset = funcInfo->AcquireTmpRegister(); byteCodeGenerator->Writer()->BrReg2(Js::OpCode::TryFinallyWithYield, finallyLabel, regException, regOffset); - tryRecForTry.reg1 = regException; - tryRecForTry.reg2 = regOffset; - byteCodeGenerator->tryScopeRecordsList.LinkToEnd(&tryRecForTry); + byteCodeGenerator->PushJumpCleanupForTry( + Js::OpCode::TryFinallyWithYield, + finallyLabel, + regException, + regOffset); } else { byteCodeGenerator->Writer()->Br(Js::OpCode::TryFinally, finallyLabel); + byteCodeGenerator->PushJumpCleanupForTry(Js::OpCode::TryFinally, finallyLabel); } // Increasing the stack as we will be storing the additional values when we enter try..finally. @@ -11664,11 +12571,7 @@ void Emit(ParseNode *pnode, ByteCodeGenerator *byteCodeGenerator, FuncInfo *func Emit(pnodeTry->pnodeBody, byteCodeGenerator, funcInfo, fReturnValue); funcInfo->ReleaseLoc(pnodeTry->pnodeBody); - if (funcInfo->byteCodeFunction->IsCoroutine()) - { - byteCodeGenerator->tryScopeRecordsList.UnlinkFromEnd(); - } - + byteCodeGenerator->PopJumpCleanup(); byteCodeGenerator->Writer()->Empty(Js::OpCode::Leave); byteCodeGenerator->Writer()->RecordCrossFrameEntryExitRecord(false); @@ -11681,22 +12584,23 @@ void Emit(ParseNode *pnode, ByteCodeGenerator *byteCodeGenerator, FuncInfo *func byteCodeGenerator->Writer()->MarkLabel(finallyLabel); byteCodeGenerator->Writer()->Empty(Js::OpCode::Finally); - ByteCodeGenerator::TryScopeRecord tryRecForFinally(Js::OpCode::ResumeFinally, finallyLabel, regException, regOffset); - if (funcInfo->byteCodeFunction->IsCoroutine()) - { - byteCodeGenerator->tryScopeRecordsList.LinkToEnd(&tryRecForFinally); - } + byteCodeGenerator->PushJumpCleanupForTry( + Js::OpCode::ResumeFinally, + finallyLabel, + regException, + regOffset); Emit(pnodeFinally->pnodeBody, byteCodeGenerator, funcInfo, fReturnValue); funcInfo->ReleaseLoc(pnodeFinally->pnodeBody); if (funcInfo->byteCodeFunction->IsCoroutine()) { - byteCodeGenerator->tryScopeRecordsList.UnlinkFromEnd(); funcInfo->ReleaseTmpRegister(regOffset); funcInfo->ReleaseTmpRegister(regException); } + byteCodeGenerator->PopJumpCleanup(); + funcInfo->EndRecordingOutArgs(1); byteCodeGenerator->Writer()->RecordCrossFrameEntryExitRecord(false); @@ -11716,15 +12620,22 @@ void Emit(ParseNode *pnode, ByteCodeGenerator *byteCodeGenerator, FuncInfo *func case knopYieldLeaf: byteCodeGenerator->StartStatement(pnode); funcInfo->AcquireLoc(pnode); - EmitYield(funcInfo->undefinedConstantRegister, pnode->location, byteCodeGenerator, funcInfo); + EmitYield(pnode->location, funcInfo->undefinedConstantRegister, byteCodeGenerator, funcInfo); byteCodeGenerator->EndStatement(pnode); break; case knopAwait: + byteCodeGenerator->StartStatement(pnode); + funcInfo->AcquireLoc(pnode); + Emit(pnode->AsParseNodeUni()->pnode1, byteCodeGenerator, funcInfo, false); + EmitAwait(pnode->location, pnode->AsParseNodeUni()->pnode1->location, byteCodeGenerator, funcInfo); + funcInfo->ReleaseLoc(pnode->AsParseNodeUni()->pnode1); + byteCodeGenerator->EndStatement(pnode); + break; case knopYield: byteCodeGenerator->StartStatement(pnode); funcInfo->AcquireLoc(pnode); Emit(pnode->AsParseNodeUni()->pnode1, byteCodeGenerator, funcInfo, false); - EmitYield(pnode->AsParseNodeUni()->pnode1->location, pnode->location, byteCodeGenerator, funcInfo); + EmitYield(pnode->location, pnode->AsParseNodeUni()->pnode1->location, byteCodeGenerator, funcInfo); funcInfo->ReleaseLoc(pnode->AsParseNodeUni()->pnode1); byteCodeGenerator->EndStatement(pnode); break; diff --git a/lib/Runtime/ByteCode/ByteCodeGenerator.cpp b/lib/Runtime/ByteCode/ByteCodeGenerator.cpp index e2a0b15d1a2..1ed46444cf4 100644 --- a/lib/Runtime/ByteCode/ByteCodeGenerator.cpp +++ b/lib/Runtime/ByteCode/ByteCodeGenerator.cpp @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #include "RuntimeByteCodePch.h" @@ -309,7 +310,6 @@ void Visit(ParseNode *pnode, ByteCodeGenerator* byteCodeGenerator, PrefixFn pref // See ES 2017 14.5.13 Runtime Semantics: ClassDefinitionEvaluation. Visit(pnode->AsParseNodeClass()->pnodeExtends, byteCodeGenerator, prefix, postfix); Visit(pnode->AsParseNodeClass()->pnodeName, byteCodeGenerator, prefix, postfix); - Visit(pnode->AsParseNodeClass()->pnodeStaticMembers, byteCodeGenerator, prefix, postfix); Visit(pnode->AsParseNodeClass()->pnodeConstructor, byteCodeGenerator, prefix, postfix); Visit(pnode->AsParseNodeClass()->pnodeMembers, byteCodeGenerator, prefix, postfix); EndVisitBlock(pnode->AsParseNodeClass()->pnodeBlock, byteCodeGenerator); @@ -377,6 +377,7 @@ void Visit(ParseNode *pnode, ByteCodeGenerator* byteCodeGenerator, PrefixFn pref // PTNODE(knopForIn , "for in" ,None ,ForIn,fnopBreak|fnopContinue|fnopCleanup) case knopForIn: case knopForOf: + case knopForAwaitOf: BeginVisitBlock(pnode->AsParseNodeForInOrForOf()->pnodeBlock, byteCodeGenerator); Visit(pnode->AsParseNodeForInOrForOf()->pnodeLval, byteCodeGenerator, prefix, postfix); Visit(pnode->AsParseNodeForInOrForOf()->pnodeObj, byteCodeGenerator, prefix, postfix); @@ -528,6 +529,7 @@ bool IsJump(ParseNode *pnode) case knopIf: case knopForIn: case knopForOf: + case knopForAwaitOf: case knopFor: case knopSwitch: case knopCase: @@ -576,6 +578,12 @@ bool MustProduceValue(ParseNode *pnode, const Js::ScriptContext *const scriptCon { // Determine whether the current statement is guaranteed to produce a value. + if (pnode->IsPatternDeclaration()) + { + // The pattern declaration are as var declaration they don't produce a value. + return false; + } + if (IsExpressionStatement(pnode, scriptContext)) { // These are trivially true. @@ -719,6 +727,7 @@ ByteCodeGenerator::ByteCodeGenerator(Js::ScriptContext* scriptContext, Js::Scope scriptContext(scriptContext), flags(0), funcInfoStack(nullptr), + jumpCleanupList(nullptr), pRootFunc(nullptr), pCurrentFunction(nullptr), globalScope(nullptr), @@ -778,16 +787,6 @@ bool ByteCodeGenerator::IsSuper(ParseNode* pnode) return pnode->nop == knopName && pnode->AsParseNodeName()->IsSpecialName() && pnode->AsParseNodeSpecialName()->isSuper; } -bool ByteCodeGenerator::IsES6DestructuringEnabled() const -{ - return scriptContext->GetConfig()->IsES6DestructuringEnabled(); -} - -bool ByteCodeGenerator::IsES6ForLoopSemanticsEnabled() const -{ - return scriptContext->GetConfig()->IsES6ForLoopSemanticsEnabled(); -} - // ByteCodeGenerator debug mode means we are generating debug mode user-code. Library code is always in non-debug mode. bool ByteCodeGenerator::IsInDebugMode() const { @@ -969,6 +968,18 @@ Js::RegSlot ByteCodeGenerator::EnregisterConstant(unsigned int constant) return loc; } +Js::RegSlot ByteCodeGenerator::EnregisterBigIntConstant(ParseNode* pnode) +{ + Js::RegSlot loc = Js::Constants::NoRegister; + FuncInfo *top = funcInfoStack->Top(); + if (!top->bigintToRegister.TryGetValue(pnode, &loc)) + { + loc = NextConstRegister(); + top->bigintToRegister.Add(pnode, loc); + } + return loc; +} + Js::RegSlot ByteCodeGenerator::EnregisterStringConstant(IdentPtr pid) { Js::RegSlot loc = Js::Constants::NoRegister; @@ -1230,7 +1241,8 @@ static const Js::FunctionInfo::Attributes StableFunctionInfoAttributesMask = (Js Js::FunctionInfo::Attributes::Generator | Js::FunctionInfo::Attributes::Module | Js::FunctionInfo::Attributes::ComputedName | - Js::FunctionInfo::Attributes::HomeObj + Js::FunctionInfo::Attributes::HomeObj | + Js::FunctionInfo::Attributes::GeneratorWithComplexParams ); static Js::FunctionInfo::Attributes GetFunctionInfoAttributes(ParseNodeFnc * pnodeFnc) @@ -1267,10 +1279,22 @@ static Js::FunctionInfo::Attributes GetFunctionInfoAttributes(ParseNodeFnc * pno if (pnodeFnc->IsMethod()) { attributes = (Js::FunctionInfo::Attributes)(attributes | Js::FunctionInfo::Attributes::Method); + + // #sec-runtime-semantics-classdefinitionevaluation calls #sec-makeconstructor. #sec-makeconstructor + // creates a prototype. Thus a method that is a class constructor has a prototype and should not + // throw an error when new is called on the method. + if (!pnodeFnc->IsClassConstructor()) + { + attributes = (Js::FunctionInfo::Attributes)(attributes | Js::FunctionInfo::Attributes::ErrorOnNew); + } } if (pnodeFnc->IsGenerator()) { attributes = (Js::FunctionInfo::Attributes)(attributes | Js::FunctionInfo::Attributes::Generator); + if (pnodeFnc->HasNonSimpleParameterList()) + { + attributes = (Js::FunctionInfo::Attributes)(attributes | Js::FunctionInfo::Attributes::GeneratorWithComplexParams); + } } if (pnodeFnc->IsAccessor()) { @@ -1937,9 +1961,9 @@ Scope * ByteCodeGenerator::FindScopeForSym(Scope *symScope, Scope *scope, Js::Pr } /* static */ -Js::OpCode ByteCodeGenerator::GetStFldOpCode(FuncInfo* funcInfo, bool isRoot, bool isLetDecl, bool isConstDecl, bool isClassMemberInit) +Js::OpCode ByteCodeGenerator::GetStFldOpCode(FuncInfo* funcInfo, bool isRoot, bool isLetDecl, bool isConstDecl, bool isClassMemberInit, bool forceStrictModeForClassComputedPropertyName) { - return GetStFldOpCode(funcInfo->GetIsStrictMode(), isRoot, isLetDecl, isConstDecl, isClassMemberInit); + return GetStFldOpCode(funcInfo->GetIsStrictMode() || forceStrictModeForClassComputedPropertyName, isRoot, isLetDecl, isConstDecl, isClassMemberInit); } /* static */ @@ -2089,7 +2113,10 @@ void ByteCodeGenerator::CheckDeferParseHasMaybeEscapedNestedFunc() else { // We have to wait until it is parsed before we populate the stack nested func parent. - FuncInfo * parentFunc = top->GetParamScope() ? top->GetParamScope()->GetEnclosingFunc() : top->GetBodyScope()->GetEnclosingFunc(); + Scope * enclosingScope = top->GetParamScope() ? top->GetParamScope() : + top->GetBodyScope() ? top->GetBodyScope() : + top->GetFuncExprScope(); + FuncInfo * parentFunc = enclosingScope->GetEnclosingFunc(); if (!parentFunc->IsGlobalFunction()) { Assert(parentFunc->byteCodeFunction != rootFuncBody); @@ -2178,6 +2205,7 @@ void ByteCodeGenerator::Begin( this->funcInfosToFinalize = nullptr; this->funcInfoStack = Anew(alloc, SList, alloc); + this->jumpCleanupList = Anew(alloc, JumpCleanupList, alloc); } HRESULT GenerateByteCode(__in ParseNodeProg *pnode, __in uint32 grfscr, __in Js::ScriptContext* scriptContext, __inout Js::ParseableFunctionInfo ** ppRootFunc, @@ -2369,11 +2397,16 @@ void AddVarsToScope(ParseNode *vars, ByteCodeGenerator *byteCodeGenerator) if (sym->IsThis()) { funcInfo->SetThisSymbol(sym); + funcInfo->GetParsedFunctionBody()->SetHasThis(true); } else if (sym->IsNewTarget()) { funcInfo->SetNewTargetSymbol(sym); } + else if (sym->IsImportMeta()) + { + funcInfo->SetImportMetaSymbol(sym); + } else if (sym->IsSuper()) { funcInfo->SetSuperSymbol(sym); @@ -2470,6 +2503,12 @@ FuncInfo* PreVisitFunction(ParseNodeFnc* pnodeFnc, ByteCodeGenerator* byteCodeGe // funcExprWithName = true; } + else if (pnodeFnc->IsModule()) + { + funcName = Js::Constants::ModuleCode; + funcNameLength = Js::Constants::ModuleCodeLength; + functionNameOffset = 0; + } if (byteCodeGenerator->Trace()) { @@ -2928,6 +2967,10 @@ FuncInfo* PostVisitFunction(ParseNodeFnc* pnodeFnc, ByteCodeGenerator* byteCodeG { byteCodeGenerator->AssignRegister(top->GetSuperConstructorSymbol()); } + if (top->GetImportMetaSymbol()) + { + byteCodeGenerator->AssignRegister(top->GetImportMetaSymbol()); + } Assert(!funcExprWithName || sym); if (funcExprWithName) @@ -3466,7 +3509,7 @@ void VisitNestedScopes(ParseNode* pnodeScopeList, ParseNode* pnodeParent, ByteCo ParseNodeCatch * pnodeCatchScope = pnodeScope->AsParseNodeCatch(); PreVisitCatch(pnodeCatchScope, byteCodeGenerator); - if (pnodeCatchScope->GetParam()->nop != knopParamPattern) + if (pnodeCatchScope->HasParam() && !pnodeCatchScope->HasPatternParam()) { Visit(pnodeCatchScope->GetParam(), byteCodeGenerator, prefix, postfix); } @@ -3647,11 +3690,10 @@ void PreVisitCatch(ParseNodeCatch *pnodeCatch, ByteCodeGenerator *byteCodeGenera { // Push the catch scope and add the catch expression to it. byteCodeGenerator->StartBindCatch(pnodeCatch); - - ParseNode * pnodeParam = pnodeCatch->GetParam(); - if (pnodeParam->nop == knopParamPattern) + + if (pnodeCatch->HasPatternParam()) { - ParseNodeParamPattern * pnodeParamPattern = pnodeParam->AsParseNodeParamPattern(); + ParseNodeParamPattern * pnodeParamPattern = pnodeCatch->GetParam()->AsParseNodeParamPattern(); Parser::MapBindIdentifier(pnodeParamPattern->pnode1, [&](ParseNodePtr item) { Symbol *sym = item->AsParseNodeVar()->sym; @@ -3666,9 +3708,9 @@ void PreVisitCatch(ParseNodeCatch *pnodeCatch, ByteCodeGenerator *byteCodeGenera sym->SetIsBlockVar(true); }); } - else + else if (pnodeCatch->HasParam()) { - ParseNodeName * pnodeName = pnodeParam->AsParseNodeName(); + ParseNodeName * pnodeName = pnodeCatch->GetParam()->AsParseNodeName(); Symbol *sym = *pnodeName->GetSymRef(); Assert(sym->GetScope() == pnodeCatch->scope); #if DBG_DUMP @@ -3681,6 +3723,7 @@ void PreVisitCatch(ParseNodeCatch *pnodeCatch, ByteCodeGenerator *byteCodeGenera sym->SetIsCatch(true); pnodeName->sym = sym; } + // This call will actually add the nested function symbols to the enclosing function scope (which is what we want). AddFunctionsToScope(pnodeCatch->pnodeScopes, byteCodeGenerator); } @@ -4672,11 +4715,11 @@ void CheckFuncAssignment(Symbol * sym, ParseNode * pnode2, ByteCodeGenerator * b funcParentScope = funcParentScope->GetEnclosingScope(); } - // Need to always detect interleaving dynamic scope ('with') for assignments - // as those may end up escaping into the 'with' scope. + // Need to always detect interleaving dynamic scope ('with') for assignments + // as those may end up escaping into the 'with' scope. // TODO: the with scope is marked as MustInstantiate late during byte code emit // We could detect this using the loop above as well, by marking the with - // scope as must instantiate early, this is just less risky of a fix for RTM. + // scope as must instantiate early, this is just less risky of a fix for RTM. if (byteCodeGenerator->HasInterleavingDynamicScope(sym)) { @@ -4690,6 +4733,21 @@ void CheckFuncAssignment(Symbol * sym, ParseNode * pnode2, ByteCodeGenerator * b }; } +void AssignYieldResumeRegisters(ByteCodeGenerator* byteCodeGenerator) +{ + // On resuming from a yield, we branch based on the ResumeYieldKind + // integer value + byteCodeGenerator->EnregisterConstant((uint)Js::ResumeYieldKind::Normal); + byteCodeGenerator->EnregisterConstant((uint)Js::ResumeYieldKind::Throw); +} + +void AssignAwaitRegisters(ByteCodeGenerator* byteCodeGenerator) +{ + // On resuming from an await, we branch based on whether the ResumeYieldKind + // is normal or throw + byteCodeGenerator->EnregisterConstant((uint)Js::ResumeYieldKind::Normal); +} + // Assign permanent (non-temp) registers for the function. // These include constants (null, 3.7, this) and locals that use registers as their home locations. // Assign the location fields of parse nodes whose values are constants/locals with permanent/known registers. @@ -4752,7 +4810,7 @@ void AssignRegisters(ParseNode *pnode, ByteCodeGenerator *byteCodeGenerator) CheckMaybeEscapedUse(pnode->AsParseNodeBin()->pnode1, byteCodeGenerator); } - if (byteCodeGenerator->IsES6DestructuringEnabled() && (pnode->AsParseNodeBin()->pnode1->nop == knopArrayPattern || pnode->AsParseNodeBin()->pnode1->nop == knopObjectPattern)) + if ((pnode->AsParseNodeBin()->pnode1->nop == knopArrayPattern || pnode->AsParseNodeBin()->pnode1->nop == knopObjectPattern)) { // Destructured arrays may have default values and need undefined. byteCodeGenerator->AssignUndefinedConstRegister(); @@ -4874,10 +4932,18 @@ void AssignRegisters(ParseNode *pnode, ByteCodeGenerator *byteCodeGenerator) CheckMaybeEscapedUse(pnode->AsParseNodeForInOrForOf()->pnodeObj, byteCodeGenerator); break; + case knopForAwaitOf: + AssignAwaitRegisters(byteCodeGenerator); + // Fall-through case knopForOf: - byteCodeGenerator->AssignNullConstRegister(); - byteCodeGenerator->AssignUndefinedConstRegister(); - CheckMaybeEscapedUse(pnode->AsParseNodeForInOrForOf()->pnodeObj, byteCodeGenerator); + { + ParseNodeForInOrForOf* pnodeForOf = pnode->AsParseNodeForInOrForOf(); + byteCodeGenerator->AssignNullConstRegister(); + byteCodeGenerator->AssignUndefinedConstRegister(); + pnodeForOf->shouldCallReturnFunctionLocation = byteCodeGenerator->NextVarRegister(); + pnodeForOf->shouldCallReturnFunctionLocationFinally = byteCodeGenerator->NextVarRegister(); + CheckMaybeEscapedUse(pnodeForOf->pnodeObj, byteCodeGenerator); + } break; case knopTrue: @@ -4895,6 +4961,7 @@ void AssignRegisters(ParseNode *pnode, ByteCodeGenerator *byteCodeGenerator) byteCodeGenerator->EnregisterConstant(1); CheckMaybeEscapedUse(pnode->AsParseNodeUni()->pnode1, byteCodeGenerator); break; + case knopCoalesce: case knopObject: byteCodeGenerator->AssignNullConstRegister(); break; @@ -4953,6 +5020,9 @@ void AssignRegisters(ParseNode *pnode, ByteCodeGenerator *byteCodeGenerator) pnode->location = byteCodeGenerator->EnregisterDoubleConstant(pnode->AsParseNodeFloat()->dbl); break; } + case knopBigInt: + pnode->location = byteCodeGenerator->EnregisterBigIntConstant(pnode); + break; case knopStr: pnode->location = byteCodeGenerator->EnregisterStringConstant(pnode->AsParseNodeStr()->pid); break; @@ -5106,6 +5176,10 @@ void AssignRegisters(ParseNode *pnode, ByteCodeGenerator *byteCodeGenerator) break; case knopReturn: { + if (byteCodeGenerator->TopFuncInfo()->IsAsyncGenerator()) + { + AssignAwaitRegisters(byteCodeGenerator); + } ParseNode *pnodeExpr = pnode->AsParseNodeReturn()->pnodeExpr; CheckMaybeEscapedUse(pnodeExpr, byteCodeGenerator); break; @@ -5147,14 +5221,29 @@ void AssignRegisters(ParseNode *pnode, ByteCodeGenerator *byteCodeGenerator) break; } case knopYieldLeaf: + // The done property of the result object is set to false and the + // value property is set to undefined + byteCodeGenerator->AssignFalseConstRegister(); byteCodeGenerator->AssignUndefinedConstRegister(); + AssignYieldResumeRegisters(byteCodeGenerator); + break; + case knopAwait: + AssignAwaitRegisters(byteCodeGenerator); + CheckMaybeEscapedUse(pnode->AsParseNodeUni()->pnode1, byteCodeGenerator); break; case knopYield: + // The done property of the result object is set to false + byteCodeGenerator->AssignFalseConstRegister(); + AssignYieldResumeRegisters(byteCodeGenerator); CheckMaybeEscapedUse(pnode->AsParseNodeUni()->pnode1, byteCodeGenerator); break; case knopYieldStar: - byteCodeGenerator->AssignNullConstRegister(); + // Reserve a local for our YieldStar loop so that the backend doesn't complain + pnode->location = byteCodeGenerator->NextVarRegister(); byteCodeGenerator->AssignUndefinedConstRegister(); + byteCodeGenerator->AssignTrueConstRegister(); + byteCodeGenerator->AssignFalseConstRegister(); + AssignYieldResumeRegisters(byteCodeGenerator); CheckMaybeEscapedUse(pnode->AsParseNodeUni()->pnode1, byteCodeGenerator); break; } diff --git a/lib/Runtime/ByteCode/ByteCodeGenerator.h b/lib/Runtime/ByteCode/ByteCodeGenerator.h index ae0e116fbf2..4b117478402 100644 --- a/lib/Runtime/ByteCode/ByteCodeGenerator.h +++ b/lib/Runtime/ByteCode/ByteCodeGenerator.h @@ -8,6 +8,41 @@ const int32 AstBytecodeRatioEstimate = 4; const int32 AstBytecodeRatioEstimate = 5; #endif + +enum DynamicLoadKind +{ + Invalid, + Local, + Env, + LocalWith, + EnvWith +}; + +struct DynamicLoadRecord +{ + DynamicLoadRecord(); + DynamicLoadKind kind; + Js::ByteCodeLabel label; + union + { + uint32 index; + Js::RegSlot instance; + }; +}; + +struct JumpCleanupInfo +{ + // Used for loop nodes + ParseNode* loopNode; + uint loopId; + + // Used for try and finally nodes + Js::OpCode tryOp; + Js::ByteCodeLabel label; + Js::RegSlot regSlot1; + Js::RegSlot regSlot2; +}; + class ByteCodeGenerator { private: @@ -27,12 +62,16 @@ class ByteCodeGenerator SList * funcInfosToFinalize; + using JumpCleanupList = DList; + JumpCleanupList* jumpCleanupList; + int32 maxAstSize; uint16 envDepth; uint sourceIndex; uint dynamicScopeCount; uint loopDepth; uint16 m_callSiteId; + uint16 m_callApplyCallSiteCount; bool isBinding; bool trackEnvDepth; bool funcEscapes; @@ -65,6 +104,13 @@ class ByteCodeGenerator static const unsigned int MinArgumentsForCallOptimization = 16; bool forceNoNative; + // A flag that when set will force bytecode opcodes to be emitted in strict mode when avaliable. + // This flag is set outside of emit calls under the condition that the bytecode being emitted + // corresponds to computed property names within classes. This fixes a bug where computed property + // names would not enforce strict mode when inside a class even though the spec requires that + // all code within a class must be strict. + bool forceStrictModeForClassComputedPropertyName = false; + ByteCodeGenerator(Js::ScriptContext* scriptContext, Js::ScopeInfo* parentScopeInfo); #if DBG_DUMP @@ -144,6 +190,18 @@ class ByteCodeGenerator } Js::ProfileId GetCurrentCallSiteId() { return m_callSiteId; } + Js::ProfileId GetNextCallApplyCallSiteId(Js::OpCode op) + { + if (m_writer.ShouldIncrementCallSiteId(op)) + { + if (m_callApplyCallSiteCount != Js::Constants::NoProfileId) + { + return m_callApplyCallSiteCount++; + } + } + return m_callApplyCallSiteCount; + } + Js::RegSlot NextVarRegister(); Js::RegSlot NextConstRegister(); FuncInfo *TopFuncInfo() const; @@ -176,6 +234,7 @@ class ByteCodeGenerator Js::RegSlot EnregisterConstant(unsigned int constant); Js::RegSlot EnregisterStringConstant(IdentPtr pid); Js::RegSlot EnregisterDoubleConstant(double d); + Js::RegSlot EnregisterBigIntConstant(ParseNodePtr pid); Js::RegSlot EnregisterStringTemplateCallsiteConstant(ParseNode* pnode); static Js::JavascriptArray* BuildArrayFromStringList(ParseNode* stringNodeList, uint arrayLength, Js::ScriptContext* scriptContext); @@ -206,6 +265,7 @@ class ByteCodeGenerator void RecordAllIntConstants(FuncInfo * funcInfo); void RecordAllStrConstants(FuncInfo * funcInfo); + void RecordAllBigIntConstants(FuncInfo * funcInfo); void RecordAllStringTemplateCallsiteConstants(FuncInfo* funcInfo); // For now, this just assigns field ids for the current script. @@ -214,6 +274,9 @@ class ByteCodeGenerator void AssignPropertyIds(Js::ParseableFunctionInfo* functionInfo); void MapCacheIdsToPropertyIds(FuncInfo *funcInfo); void MapReferencedPropertyIds(FuncInfo *funcInfo); +#if ENABLE_NATIVE_CODEGEN + void MapCallSiteToCallApplyCallSiteMap(FuncInfo * funcInfo); +#endif FuncInfo *StartBindFunction(const char16 *name, uint nameLength, uint shortNameOffset, bool* pfuncExprWithName, ParseNodeFnc *pnodeFnc, Js::ParseableFunctionInfo * reuseNestedFunc); void EndBindFunction(bool funcExprWithName); void StartBindCatch(ParseNode *pnode); @@ -254,7 +317,7 @@ class ByteCodeGenerator Symbol *AddSymbolToFunctionScope(const char16 *key, int keyLength, ParseNode *varDecl, SymbolType symbolType); void FuncEscapes(Scope *scope); void EmitTopLevelStatement(ParseNode *stmt, FuncInfo *funcInfo, BOOL fReturnValue); - void EmitInvertedLoop(ParseNodeLoop* outerLoop,ParseNodeFor* invertedLoop,FuncInfo* funcInfo); + void EmitInvertedLoop(ParseNodeStmt* outerLoop,ParseNodeFor* invertedLoop,FuncInfo* funcInfo); void DefineFunctions(FuncInfo *funcInfoParent); Js::RegSlot DefineOneFunction(ParseNodeFnc *pnodeFnc, FuncInfo *funcInfoParent, bool generateAssignment=true, Js::RegSlot regEnv = Js::Constants::NoRegister, Js::RegSlot frameDisplayTemp = Js::Constants::NoRegister); void DefineCachedFunctions(FuncInfo *funcInfoParent); @@ -269,6 +332,7 @@ class ByteCodeGenerator void LoadThisObject(FuncInfo *funcInfo, bool thisLoadedFromParams = false); void EmitThis(FuncInfo *funcInfo, Js::RegSlot lhsLocation, Js::RegSlot fromRegister); void LoadNewTargetObject(FuncInfo *funcInfo); + void LoadImportMetaObject(FuncInfo* funcInfo); void LoadSuperObject(FuncInfo *funcInfo); void LoadSuperConstructorObject(FuncInfo *funcInfo); void EmitSuperCall(FuncInfo* funcInfo, ParseNodeSuperCall * pnodeSuperCall, BOOL fReturnValue, BOOL fEvaluateComponents); @@ -291,7 +355,7 @@ class ByteCodeGenerator void EmitPropLoad(Js::RegSlot lhsLocation, Symbol *sym, IdentPtr pid, FuncInfo *funcInfo, bool skipUseBeforeDeclarationCheck = false); void EmitPropDelete(Js::RegSlot lhsLocation, Symbol *sym, IdentPtr pid, FuncInfo *funcInfo); void EmitPropTypeof(Js::RegSlot lhsLocation, Symbol *sym, IdentPtr pid, FuncInfo *funcInfo); - void EmitTypeOfFld(FuncInfo * funcInfo, Js::PropertyId propertyId, Js::RegSlot value, Js::RegSlot instance, Js::OpCode op1); + void EmitTypeOfFld(FuncInfo * funcInfo, Js::PropertyId propertyId, Js::RegSlot value, Js::RegSlot instance, Js::OpCode op1, bool reuseLoc = false); bool ShouldLoadConstThis(FuncInfo* funcInfo); @@ -325,7 +389,7 @@ class ByteCodeGenerator isStrictMode ? (isRoot ? Js::OpCode::StRootFldStrict : Js::OpCode::StFldStrict) : isRoot ? Js::OpCode::StRootFld : Js::OpCode::StFld; } - static Js::OpCode GetStFldOpCode(FuncInfo* funcInfo, bool isRoot, bool isLetDecl, bool isConstDecl, bool isClassMemberInit); + static Js::OpCode GetStFldOpCode(FuncInfo* funcInfo, bool isRoot, bool isLetDecl, bool isConstDecl, bool isClassMemberInit, bool forceStrictModeForClassComputedPropertyName = false); static Js::OpCode GetScopedStFldOpCode(bool isStrictMode, bool isConsoleScope = false) { return isStrictMode ? @@ -360,9 +424,6 @@ class ByteCodeGenerator void StartSubexpression(ParseNode* node); void EndSubexpression(ParseNode* node); - bool IsES6DestructuringEnabled() const; - bool IsES6ForLoopSemanticsEnabled() const; - // Debugger methods. bool IsInDebugMode() const; bool IsInNonDebugMode() const; @@ -397,6 +458,31 @@ class ByteCodeGenerator Js::OpCode GetStSlotOp(Scope *scope, int envIndex, Js::RegSlot scopeLocation, bool chkBlockVar, FuncInfo *funcInfo); Js::OpCode GetLdSlotOp(Scope *scope, int envIndex, Js::RegSlot scopeLocation, FuncInfo *funcInfo); Js::OpCode GetInitFldOp(Scope *scope, Js::RegSlot scopeLocation, FuncInfo *funcInfo, bool letDecl = false); + + void PushJumpCleanupForLoop(ParseNode* loopNode, uint loopId) + { + this->jumpCleanupList->Prepend({ + loopNode, + loopId, + Js::OpCode::Nop, + 0, + Js::Constants::NoRegister, + Js::Constants::NoRegister + }); + } + + void PushJumpCleanupForTry( + Js::OpCode tryOp, + Js::ByteCodeLabel label = 0, + Js::RegSlot regSlot1 = Js::Constants::NoRegister, + Js::RegSlot regSlot2 = Js::Constants::NoRegister) + { + this->jumpCleanupList->Prepend({nullptr, 0, tryOp, label, regSlot1, regSlot2}); + } + + void PopJumpCleanup() { this->jumpCleanupList->RemoveHead(); } + bool HasJumpCleanup() { return !this->jumpCleanupList->Empty(); } + void EmitJumpCleanup(ParseNode* target, FuncInfo* funcInfo); private: bool NeedCheckBlockVar(Symbol* sym, Scope* scope, FuncInfo* funcInfo) const; @@ -413,7 +499,8 @@ template void ByteCodeGenerator::IterateBlockScopedVariables(ParseNode } } -struct ApplyCheck { +struct ApplyCheck +{ bool matches; bool insideApplyCall; bool sawApply; diff --git a/lib/Runtime/ByteCode/ByteCodeSerializeFlags.h b/lib/Runtime/ByteCode/ByteCodeSerializeFlags.h index a98af421a29..0ecd33a6a4e 100644 --- a/lib/Runtime/ByteCode/ByteCodeSerializeFlags.h +++ b/lib/Runtime/ByteCode/ByteCodeSerializeFlags.h @@ -11,4 +11,4 @@ // of these flags to indicate how to allocate the memory. The absence of both flags // indicates that no allocation is needed. #define GENERATE_BYTE_CODE_COTASKMEMALLOC 0x00000008 -#define GENERATE_BYTE_CODE_ALLOC_ANEW 0x00000010 \ No newline at end of file +#define GENERATE_BYTE_CODE_ALLOC_ANEW 0x00000010 diff --git a/lib/Runtime/ByteCode/ByteCodeSerializer.cpp b/lib/Runtime/ByteCode/ByteCodeSerializer.cpp index 6c07600c615..144be52c482 100644 --- a/lib/Runtime/ByteCode/ByteCodeSerializer.cpp +++ b/lib/Runtime/ByteCode/ByteCodeSerializer.cpp @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft Corporation and contributors. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- @@ -65,6 +66,8 @@ namespace Js const int magicEndOfPropIdsOfFormals = *(int*)"]pif"; const int magicStartOfSlotIdToNestedIndexArray = *(int*)"sni["; const int magicEndOfSlotIdToNestedIndexArray = *(int*)"]sni"; + const int magicStartOfCallSiteToCallApplyCallSiteArray = *(int*)"cca["; + const int magicEndOfCallSiteToCallApplyCallSiteArray = *(int*)"]cca"; #endif // Serialized files are architecture specific @@ -137,9 +140,11 @@ struct SerializedFieldList { bool has_auxiliary : 1; bool has_propertyIdOfFormals: 1; bool has_slotIdInCachedScopeToNestedIndexArray : 1; + bool has_callSiteToCallApplyCallSiteArray : 1; bool has_debuggerScopeSlotArray : 1; bool has_deferredStubs : 1; bool has_scopeInfo : 1; + bool has_printOffsets : 1; }; C_ASSERT(sizeof(GUID)==sizeof(DWORD)*4); @@ -484,6 +489,12 @@ class ByteCodeBufferBuilder { expectedFunctionBodySize.value = 0; expectedOpCodeCount.value = 0; +#ifdef ENABLE_TEST_HOOKS + if (scriptContext->GetConfig()->Force32BitByteCode()) + { + architecture.value = 32; + } +#endif } // Library bytecode uses its own scheme @@ -1049,9 +1060,13 @@ class ByteCodeBufferBuilder DEFAULT_LAYOUT(Empty); DEFAULT_LAYOUT_WITH_ONEBYTE(Reg1); DEFAULT_LAYOUT_WITH_ONEBYTE_AND_PROFILED(Reg2); + DEFAULT_LAYOUT_WITH_ONEBYTE(Reg2U); DEFAULT_LAYOUT_WITH_ONEBYTE_AND_PROFILED(Reg3); + DEFAULT_LAYOUT_WITH_ONEBYTE(Reg3U); DEFAULT_LAYOUT_WITH_ONEBYTE(Reg4); + DEFAULT_LAYOUT_WITH_ONEBYTE(Reg4U); DEFAULT_LAYOUT_WITH_ONEBYTE(Reg5); + DEFAULT_LAYOUT_WITH_ONEBYTE(Reg5U); DEFAULT_LAYOUT_WITH_ONEBYTE(Reg3C); DEFAULT_LAYOUT_WITH_ONEBYTE_AND_PROFILED(Arg); DEFAULT_LAYOUT_WITH_ONEBYTE(ArgNoSrc); @@ -1085,7 +1100,6 @@ class ByteCodeBufferBuilder DEFAULT_LAYOUT_WITH_ONEBYTE(ElementPIndexed); DEFAULT_LAYOUT_WITH_ONEBYTE(Reg2B1); DEFAULT_LAYOUT_WITH_ONEBYTE(Reg3B1); - DEFAULT_LAYOUT_WITH_ONEBYTE(Class); DEFAULT_LAYOUT_WITH_ONEBYTE(ElementU); DEFAULT_LAYOUT_WITH_ONEBYTE(ElementRootU); DEFAULT_LAYOUT_WITH_ONEBYTE(ElementScopedC); @@ -1459,7 +1473,7 @@ class ByteCodeBufferBuilder uint32 PrependStringConstant(BufferBuilderList & builder, Var var) { - auto str = JavascriptString::FromVar(var); + auto str = VarTo(var); uint32 size = 0; #ifdef BYTE_CODE_MAGIC_CONSTANTS @@ -1477,7 +1491,7 @@ class ByteCodeBufferBuilder uint32 PrependStringTemplateCallsiteConstant(BufferBuilderList & builder, Var var) { - ES5Array* callsite = ES5Array::FromVar(var); + ES5Array* callsite = VarTo(var); Var element = nullptr; auto size = PrependInt32(builder, _u("String Template Callsite Constant String Count"), (int)callsite->GetLength()); @@ -1488,7 +1502,7 @@ class ByteCodeBufferBuilder } Var rawVar = JavascriptOperators::OP_GetProperty(callsite, Js::PropertyIds::raw, callsite->GetScriptContext()); - ES5Array* rawArray = ES5Array::FromVar(rawVar); + ES5Array* rawArray = VarTo(rawVar); for (uint32 i = 0; i < rawArray->GetLength(); i++) { @@ -1520,7 +1534,7 @@ class ByteCodeBufferBuilder return PrependByte(builder, _u("Null Constant"), ctNull); case TypeIds_Boolean: - return PrependByte(builder, _u("Boolean Constant"), JavascriptBoolean::FromVar(var)->GetValue()? ctTrue : ctFalse); + return PrependByte(builder, _u("Boolean Constant"), VarTo(var)->GetValue()? ctTrue : ctFalse); case TypeIds_Number: { @@ -1550,8 +1564,8 @@ class ByteCodeBufferBuilder case TypeIds_String: { - auto size = PrependByte(builder, _u("String Constant 16"), - Js::PropertyString::Is(var)? ctPropertyString16 : ctString16); + auto size = PrependByte(builder, _u("String Constant 16"), + Js::VarIs(var)? ctPropertyString16 : ctString16); return size + PrependStringConstant(builder, var); } @@ -1691,6 +1705,27 @@ class ByteCodeBufferBuilder return size; } +#if ENABLE_NATIVE_CODEGEN + uint32 AddCallSiteToCallApplyCallSiteArray(BufferBuilderList& builder, FunctionBody * functionBody) + { + uint32 size = 0; + +#ifdef BYTE_CODE_MAGIC_CONSTANTS + size += PrependInt32(builder, _u("Start CallSiteToCallApplyCallSiteArray"), magicStartOfCallSiteToCallApplyCallSiteArray); +#endif + Js::ProfileId * callSiteToCallApplyCallSiteArray = functionBody->GetCallSiteToCallApplyCallSiteArray(); + for (Js::ProfileId i = 0; i < functionBody->GetProfiledCallSiteCount(); i++) + { + size += PrependInt16(builder, _u(".call/.apply call site id for call site id"), callSiteToCallApplyCallSiteArray[i]); + } + +#ifdef BYTE_CODE_MAGIC_CONSTANTS + size += PrependInt32(builder, _u("End CallSiteToCallApplyCallSiteArray"), magicEndOfCallSiteToCallApplyCallSiteArray); +#endif + return size; + } +#endif + // Gets the number of debugger slot array scopes there are in the function body's scope chain list. uint32 GetDebuggerScopeSlotArrayCount(FunctionBody * function) { @@ -2159,6 +2194,20 @@ class ByteCodeBufferBuilder AddSlotIdInCachedScopeToNestedIndexArray(builder, function); } +#if ENABLE_NATIVE_CODEGEN + if (function->GetCallSiteToCallApplyCallSiteArray() == nullptr) + { + definedFields.has_callSiteToCallApplyCallSiteArray = false; + } + else + { + definedFields.has_callSiteToCallApplyCallSiteArray = true; + AddCallSiteToCallApplyCallSiteArray(builder, function); + } +#else + definedFields.has_callSiteToCallApplyCallSiteArray = false; +#endif + uint debuggerScopeSlotArraySize = GetDebuggerScopeSlotArrayCount(function); if (debuggerScopeSlotArraySize != 0) { @@ -2294,8 +2343,9 @@ class ByteCodeBufferBuilder definedFields.has_attributes = true; PrependInt32(builder, _u("Attributes"), attributes); } - + PrependInt32(builder, _u("Offset Into Source"), sourceDiff); + PrependInt32(builder, _u("Offset Into Source for toString"), function->PrintableStartOffset()); if (function->GetNestedCount() > 0) { definedFields.has_m_nestedCount = true; @@ -2311,6 +2361,14 @@ class ByteCodeBufferBuilder AddDeferredStubs(builder, deferredStubs, function->GetNestedCount(), cache, true); } + PrintOffsets* printOffsets = function->GetPrintOffsets(); + if (printOffsets != nullptr) + { + definedFields.has_printOffsets = true; + PrependInt32(builder, _u("Start print offset"), printOffsets->cbStartPrintOffset); + PrependInt32(builder, _u("End print offset"), printOffsets->cbEndPrintOffset); + } + ScopeInfo* scopeInfo = function->GetScopeInfo(); if (scopeInfo != nullptr && (attributes & (FunctionInfo::Attributes::DeferredParse | FunctionInfo::Attributes::CanDefer)) != 0) @@ -2895,7 +2953,7 @@ class ByteCodeBufferReader uint32 countOfAuxiliaryStructure; current = ReadUInt32(current, &countOfAuxiliaryStructure); Assert(countOfAuxiliaryStructure != 0); - + uint32 sizeOfAuxiliaryBlock; uint32 sizeOfAuxiliaryContextBlock; current = ReadUInt32(current, &sizeOfAuxiliaryBlock); @@ -3130,7 +3188,7 @@ class ByteCodeBufferReader string16IndexTable = (StringIndexRecord*)ReadInt32(string16s, &string16Count); lineCharacterOffsetCacheBuffer = (charcount_t *)ReadInt32(lineInfoCaches, &lineInfoCacheCount); byte haslineByteOffsetCacheBuffer; - current = ReadByte(lineInfoCaches + sizeof(charcount_t) * lineInfoCacheCount, &haslineByteOffsetCacheBuffer); + current = ReadByte((byte*)lineCharacterOffsetCacheBuffer + sizeof(charcount_t) * lineInfoCacheCount, &haslineByteOffsetCacheBuffer); if (haslineByteOffsetCacheBuffer) { lineByteOffsetCacheBuffer = (charcount_t *)current; @@ -3209,16 +3267,7 @@ class ByteCodeBufferReader callsite->SetPropertyWithAttributes(Js::PropertyIds::raw, rawArray, PropertyNone, nullptr); callsite->Freeze(); - JavascriptLibrary* library = scriptContext->GetLibrary(); - - var = library->TryGetStringTemplateCallsiteObject(callsite); - - if (var == nullptr) - { - library->AddStringTemplateCallsiteObject(callsite); - var = callsite; - } - + var = callsite; LEAVE_PINNED_SCOPE(); return current; @@ -3427,7 +3476,7 @@ class ByteCodeBufferReader current = ReadUInt32(current, &count); Js::AuxArray * slotIdInCachedScopeToNestedIndexArray = functionBody->AllocateSlotIdInCachedScopeToNestedIndexArray(count); - + uint32 value; for (uint i = 0; i < count; i++) { @@ -3441,7 +3490,31 @@ class ByteCodeBufferReader return current; } + +#if ENABLE_NATIVE_CODEGEN + const byte * ReadCallSiteToCallApplyCallSiteArray(const byte * current, FunctionBody * functionBody) + { +#ifdef BYTE_CODE_MAGIC_CONSTANTS + int constant; + current = ReadInt32(current, &constant); + Assert(constant == magicStartOfCallSiteToCallApplyCallSiteArray); +#endif + Js::ProfileId * callSiteToCallApplyCallSiteArray = functionBody->CreateCallSiteToCallApplyCallSiteArray(); + Js::ProfileId value; + for (Js::ProfileId i = 0; i < functionBody->GetProfiledCallSiteCount(); i++) + { + current = ReadUInt16(current, &value); + callSiteToCallApplyCallSiteArray[i] = value; + } +#ifdef BYTE_CODE_MAGIC_CONSTANTS + current = ReadInt32(current, &constant); + Assert(constant == magicEndOfCallSiteToCallApplyCallSiteArray); +#endif + + return current; + } +#endif const byte * ReadSlotArrayDebuggerScopeProperties(const byte * current, FunctionBody* function, DebuggerScope* debuggerScope, uint propertyCount) { @@ -3483,7 +3556,7 @@ class ByteCodeBufferReader { Assert(function); Assert(debuggerScopeCount != 0); - + #ifdef BYTE_CODE_MAGIC_CONSTANTS int constant; current = ReadInt32(current, &constant); @@ -4003,7 +4076,9 @@ class ByteCodeBufferReader } uint32 offsetIntoSource = 0; + uint32 offsetIntoSourcePrintable = 0; current = ReadUInt32(current, &offsetIntoSource); + current = ReadUInt32(current, &offsetIntoSourcePrintable); int nestedCount = 0; if (definedFields->has_m_nestedCount) @@ -4019,6 +4094,14 @@ class ByteCodeBufferReader current = ReadDeferredStubs(current, cache, nestedCount, &deferredStubs, true); } + PrintOffsets* printOffsets = nullptr; + if (definedFields->has_printOffsets) + { + printOffsets = RecyclerNewLeaf(this->scriptContext->GetRecycler(), PrintOffsets); + current = ReadUInt32(current, &printOffsets->cbStartPrintOffset); + current = ReadUInt32(current, &printOffsets->cbEndPrintOffset); + } + ScopeInfo* scopeInfo = nullptr; if (definedFields->has_scopeInfo) { @@ -4083,6 +4166,10 @@ class ByteCodeBufferReader { (*function)->SetDeferredStubs(deferredStubs); } + if (printOffsets != nullptr) + { + (*function)->SetPrintOffsets(printOffsets); + } if (scopeInfo != nullptr) { (*function)->SetScopeInfo(scopeInfo); @@ -4115,7 +4202,7 @@ class ByteCodeBufferReader (*function)->m_isClassMember = (bitflags & ffIsClassMember) ? true : false; // This is offsetIntoSource is the start offset in bytes as well. - (*function)->m_cbStartOffset = (size_t) offsetIntoSource; + (*function)->m_cbStartOffset = offsetIntoSource; (*function)->m_sourceIndex = this->sourceIndex; #define DEFINE_FUNCTION_PROXY_FIELDS 1 @@ -4267,6 +4354,13 @@ class ByteCodeBufferReader current = ReadSlotIdInCachedScopeToNestedIndexArray(current, *functionBody); } +#if ENABLE_NATIVE_CODEGEN + if (definedFields->has_callSiteToCallApplyCallSiteArray) + { + current = ReadCallSiteToCallApplyCallSiteArray(current, *functionBody); + } +#endif + if (definedFields->has_debuggerScopeSlotArray) { uint debuggerScopeCount = 0; @@ -4543,7 +4637,7 @@ class ByteCodeBufferReader auto propertyCount = serialized->propertyCount; auto extraSlotCount = serialized->extraSlots; - Assert(serialized->offset + sizeof(PropertyIdArray) < deserializeInto->GetLength()); + Assert(serialized->offset + sizeof(PropertyIdArray) <= deserializeInto->GetLength()); auto result = (PropertyIdArray *)(deserializeInto->GetBuffer() + serialized->offset); result->count = propertyCount; result->extraSlots = extraSlotCount; @@ -4875,7 +4969,7 @@ HRESULT ByteCodeSerializer::SerializeToBuffer(ScriptContext * scriptContext, Are int32 sourceCharLength = utf8SourceInfo->GetCchLength(); ByteCodeBufferBuilder builder(sourceByteLength, sourceCharLength, utf8Source, utf8SourceInfo, scriptContext, alloc, dwFlags, builtInPropertyCount); - + hr = builder.AddTopFunctionBody(function, srcInfo, cache); if (SUCCEEDED(hr)) diff --git a/lib/Runtime/ByteCode/ByteCodeWriter.cpp b/lib/Runtime/ByteCode/ByteCodeWriter.cpp index 3b984a21867..955deccc8cf 100644 --- a/lib/Runtime/ByteCode/ByteCodeWriter.cpp +++ b/lib/Runtime/ByteCode/ByteCodeWriter.cpp @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #include "RuntimeByteCodePch.h" @@ -209,7 +210,7 @@ namespace Js } } - if (this->DoJitLoopBodies() && + if (this->DoJitLoopBodies() && this->HasLoopWithoutYield() && !(this->m_functionWrite->GetFunctionBody()->GetHasTry() && PHASE_OFF(Js::JITLoopBodyInTryCatchPhase, this->m_functionWrite)) && !(this->m_functionWrite->GetFunctionBody()->GetHasFinally() && PHASE_OFF(Js::JITLoopBodyInTryFinallyPhase, this->m_functionWrite))) { @@ -251,6 +252,7 @@ namespace Js loopHeader->startOffset = data.startOffset; loopHeader->endOffset = data.endOffset; loopHeader->isNested = data.isNested; + loopHeader->hasYield = data.hasYield; }); } @@ -315,7 +317,7 @@ namespace Js void ByteCodeWriter::CheckLabel(ByteCodeLabel labelID) { - AssertMsg(labelID < m_labelOffsets->Count(), + AssertMsg(labelID >= 0 && labelID < m_labelOffsets->Count(), "Label must be previously defined before being marked in the byte-code"); } @@ -382,20 +384,9 @@ namespace Js CheckOp(op, OpLayoutType::Reg2); Assert(OpCodeAttr::HasMultiSizeLayout(op)); - if (DoDynamicProfileOpcode(CheckThisPhase) || - DoDynamicProfileOpcode(TypedArrayTypeSpecPhase) || - DoDynamicProfileOpcode(ArrayCheckHoistPhase)) - { - if (op == OpCode::StrictLdThis) - { - op = OpCode::ProfiledStrictLdThis; - } - } - R0 = ConsumeReg(R0); R1 = ConsumeReg(R1); - bool isProfiled = false; bool isProfiled2 = false; Js::ProfileId profileId = Js::Constants::NoProfileId; @@ -493,6 +484,18 @@ namespace Js MULTISIZE_LAYOUT_WRITE(Reg3C, op, R0, R1, R2, cacheId); } + template + bool ByteCodeWriter::TryWriteReg2U(OpCode op, RegSlot R0, RegSlot R1, uint index) + { + OpLayoutT_Reg2U layout; + if (SizePolicy::Assign(layout.R0, R0) && SizePolicy::Assign(layout.R1, R1) && SizePolicy::Assign(layout.SlotIndex, index)) + { + m_byteCodeData.EncodeT(op, &layout, sizeof(layout), this); + return true; + } + return false; + } + template bool ByteCodeWriter::TryWriteReg4(OpCode op, RegSlot R0, RegSlot R1, RegSlot R2, RegSlot R3) { @@ -520,6 +523,61 @@ namespace Js MULTISIZE_LAYOUT_WRITE(Reg4, op, R0, R1, R2, R3); } + template + bool ByteCodeWriter::TryWriteReg4U(OpCode op, RegSlot R0, RegSlot R1, RegSlot R2, RegSlot R3, uint index) + { + OpLayoutT_Reg4U layout; + if (SizePolicy::Assign(layout.R0, R0) && SizePolicy::Assign(layout.R1, R1) && SizePolicy::Assign(layout.R2, R2) + && SizePolicy::Assign(layout.R3, R3) && SizePolicy::Assign(layout.SlotIndex, index)) + { + m_byteCodeData.EncodeT(op, &layout, sizeof(layout), this); + return true; + } + return false; + } + + void ByteCodeWriter::Reg4U(OpCode op, RegSlot R0, RegSlot R1, RegSlot R2, RegSlot R3, uint slotIndex) + { + CheckOpen(); + CheckOp(op, OpLayoutType::Reg4U); + Assert(OpCodeAttr::HasMultiSizeLayout(op)); + + R0 = ConsumeReg(R0); + R1 = ConsumeReg(R1); + R2 = ConsumeReg(R2); + R3 = ConsumeReg(R3); + + MULTISIZE_LAYOUT_WRITE(Reg4U, op, R0, R1, R2, R3, slotIndex); + } + + template + bool ByteCodeWriter::TryWriteReg5U(OpCode op, RegSlot R0, RegSlot R1, RegSlot R2, RegSlot R3, RegSlot R4, uint index) + { + OpLayoutT_Reg5U layout; + if (SizePolicy::Assign(layout.R0, R0) && SizePolicy::Assign(layout.R1, R1) && SizePolicy::Assign(layout.R2, R2) + && SizePolicy::Assign(layout.R3, R3) && SizePolicy::Assign(layout.R4, R4) && SizePolicy::Assign(layout.SlotIndex, index)) + { + m_byteCodeData.EncodeT(op, &layout, sizeof(layout), this); + return true; + } + return false; + } + + void ByteCodeWriter::Reg5U(OpCode op, RegSlot R0, RegSlot R1, RegSlot R2, RegSlot R3, RegSlot R4, uint slotIndex) + { + CheckOpen(); + CheckOp(op, OpLayoutType::Reg5U); + Assert(OpCodeAttr::HasMultiSizeLayout(op)); + + R0 = ConsumeReg(R0); + R1 = ConsumeReg(R1); + R2 = ConsumeReg(R2); + R3 = ConsumeReg(R3); + R4 = ConsumeReg(R4); + + MULTISIZE_LAYOUT_WRITE(Reg5U, op, R0, R1, R2, R3, R4, slotIndex); + } + template bool ByteCodeWriter::TryWriteReg2B1(OpCode op, RegSlot R0, RegSlot R1, uint8 B2) { @@ -1301,7 +1359,7 @@ namespace Js return false; } - void ByteCodeWriter::Element(OpCode op, RegSlot Value, RegSlot Instance, RegSlot Element, bool instanceAtReturnRegOK) + void ByteCodeWriter::Element(OpCode op, RegSlot Value, RegSlot Instance, RegSlot Element, bool instanceAtReturnRegOK, bool forceStrictMode) { CheckOpen(); CheckOp(op, OpLayoutType::ElementI); @@ -1311,7 +1369,7 @@ namespace Js Instance = ConsumeReg(Instance); Element = ConsumeReg(Element); - if (this->m_functionWrite->GetIsStrictMode()) + if (this->m_functionWrite->GetIsStrictMode() || forceStrictMode) { if (op == OpCode::DeleteElemI_A) { @@ -1401,7 +1459,7 @@ namespace Js return false; } - void ByteCodeWriter::ScopedProperty(OpCode op, RegSlot value, PropertyIdIndexType propertyIdIndex) + void ByteCodeWriter::ScopedProperty(OpCode op, RegSlot value, PropertyIdIndexType propertyIdIndex, bool forceStrictMode) { CheckOpen(); CheckOp(op, OpLayoutType::ElementScopedC); @@ -1424,7 +1482,7 @@ namespace Js } #endif - if (this->m_functionWrite->GetIsStrictMode()) + if (this->m_functionWrite->GetIsStrictMode() || forceStrictMode) { if (op == OpCode::ScopedDeleteFld) { @@ -1448,7 +1506,7 @@ namespace Js return false; } - void ByteCodeWriter::Property(OpCode op, RegSlot value, RegSlot instance, PropertyIdIndexType propertyIdIndex) + void ByteCodeWriter::Property(OpCode op, RegSlot value, RegSlot instance, PropertyIdIndexType propertyIdIndex, bool forceStrictMode) { CheckOpen(); CheckOp(op, OpLayoutType::ElementC); @@ -1466,6 +1524,7 @@ namespace Js case OpCode::InitClassMemberSet: case OpCode::InitProto: case OpCode::DeleteFld: + case OpCode::DeleteFld_ReuseLoc: case OpCode::DeleteRootFld: case OpCode::LdElemUndefScoped: case OpCode::StFuncExpr: @@ -1477,7 +1536,7 @@ namespace Js } #endif - if (this->m_functionWrite->GetIsStrictMode()) + if (this->m_functionWrite->GetIsStrictMode() || forceStrictMode) { if (op == OpCode::DeleteFld) { @@ -1525,6 +1584,7 @@ namespace Js #endif case OpCode::StObjSlot: case OpCode::StObjSlotChkUndecl: + case OpCode::StPropIdArrFromVar: break; default: @@ -1593,6 +1653,7 @@ namespace Js switch (op) { case OpCode::LdEnvObj: + case OpCode::LdEnvObj_ReuseLoc: case OpCode::StLocalSlot: case OpCode::StParamSlot: case OpCode::StLocalObjSlot: @@ -1920,6 +1981,7 @@ namespace Js break; case OpCode::LdLocalFld: + case OpCode::LdLocalFld_ReuseLoc: if (isCtor) // The symbol loaded by this LdFld will be used as a constructor { if (registerCacheIdForCall) @@ -2054,6 +2116,7 @@ namespace Js } case OpCode::LdFldForTypeOf: case OpCode::LdFld: + case OpCode::LdFld_ReuseLoc: if (isCtor) // The symbol loaded by this LdFld will be used as a constructor { if (registerCacheIdForCall) @@ -2154,6 +2217,7 @@ namespace Js } break; case OpCode::StSuperFld: + case OpCode::StSuperFldStrict: if (DoDynamicProfileOpcode(ProfileBasedFldFastPathPhase) || DoDynamicProfileOpcode(InlinePhase) || DoDynamicProfileOpcode(ObjTypeSpecPhase)) @@ -2204,11 +2268,23 @@ namespace Js MULTISIZE_LAYOUT_WRITE(ElementScopedC2, op, value, propertyIdIndex, value2); } + void ByteCodeWriter::Reg2U(OpCode op, RegSlot R0, RegSlot R1, uint index) + { + Assert(OpCodeAttr::HasMultiSizeLayout(op)); + CheckOp(op, OpLayoutType::Reg2U); + CheckOpen(); + + R0 = ConsumeReg(R0); + R1 = ConsumeReg(R1); + + MULTISIZE_LAYOUT_WRITE(Reg2U, op, R0, R1, index); + } + template - bool ByteCodeWriter::TryWriteClass(OpCode op, RegSlot constructor, RegSlot extends) + bool ByteCodeWriter::TryWriteReg3U(OpCode op, RegSlot R0, RegSlot R1, RegSlot R2, uint index) { - OpLayoutT_Class layout; - if (SizePolicy::Assign(layout.Constructor, constructor) && SizePolicy::Assign(layout.Extends, extends)) + OpLayoutT_Reg3U layout; + if (SizePolicy::Assign(layout.R0, R0) && SizePolicy::Assign(layout.R1, R1) && SizePolicy::Assign(layout.R2, R2) && SizePolicy::Assign(layout.SlotIndex, index)) { m_byteCodeData.EncodeT(op, &layout, sizeof(layout), this); return true; @@ -2216,20 +2292,17 @@ namespace Js return false; } - void ByteCodeWriter::InitClass(RegSlot constructor, RegSlot extends) + void ByteCodeWriter::Reg3U(OpCode op, RegSlot R0, RegSlot R1, RegSlot R2, uint index) { - Assert(OpCodeAttr::HasMultiSizeLayout(Js::OpCode::InitClass)); - + Assert(OpCodeAttr::HasMultiSizeLayout(op)); + CheckOp(op, OpLayoutType::Reg3U); CheckOpen(); - constructor = ConsumeReg(constructor); - - if (extends != Js::Constants::NoRegister) - { - extends = ConsumeReg(extends); - } + R0 = ConsumeReg(R0); + R1 = ConsumeReg(R1); + R2 = ConsumeReg(R2); - MULTISIZE_LAYOUT_WRITE(Class, Js::OpCode::InitClass, constructor, extends); + MULTISIZE_LAYOUT_WRITE(Reg3U, op, R0, R1, R2, index); } void ByteCodeWriter::NewFunction(RegSlot destinationRegister, uint index, bool isGenerator, RegSlot homeObjLocation) @@ -3152,7 +3225,7 @@ namespace Js uint loopId = m_functionWrite->IncrLoopCount(); Assert((uint)m_loopHeaders->Count() == loopId); - m_loopHeaders->Add(LoopHeaderData(m_byteCodeData.GetCurrentOffset(), 0, m_loopNest > 0)); + m_loopHeaders->Add(LoopHeaderData(m_byteCodeData.GetCurrentOffset(), 0, m_loopNest > 0, false)); m_loopNest++; m_functionWrite->SetHasNestedLoop(m_loopNest > 1); @@ -3187,6 +3260,20 @@ namespace Js m_loopHeaders->Item(loopId).endOffset = m_byteCodeData.GetCurrentOffset(); } + void ByteCodeWriter::SetCurrentLoopHasYield() + { + if (m_loopNest > 0) + { + for (int i = 0; i < m_loopHeaders->Count(); ++i) + { + if (m_loopHeaders->Item(i).endOffset == 0) // check for loops we're currently inside + { + m_loopHeaders->Item(i).hasYield = true; + } + } + } + } + void ByteCodeWriter::IncreaseByteCodeCount() { m_byteCodeCount++; diff --git a/lib/Runtime/ByteCode/ByteCodeWriter.h b/lib/Runtime/ByteCode/ByteCodeWriter.h index b6e1fb29f1b..2b596d6e877 100644 --- a/lib/Runtime/ByteCode/ByteCodeWriter.h +++ b/lib/Runtime/ByteCode/ByteCodeWriter.h @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #pragma once @@ -113,8 +114,9 @@ namespace Js uint startOffset; uint endOffset; bool isNested; + bool hasYield; LoopHeaderData() {} - LoopHeaderData(uint startOffset, uint endOffset, bool isNested) : startOffset(startOffset), endOffset(endOffset), isNested(isNested){} + LoopHeaderData(uint startOffset, uint endOffset, bool isNested, bool hasYield) : startOffset(startOffset), endOffset(endOffset), isNested(isNested), hasYield(hasYield){} }; JsUtil::List * m_labelOffsets; // Label offsets, once defined @@ -242,13 +244,17 @@ namespace Js void Empty(OpCode op); void Reg1(OpCode op, RegSlot R0); void Reg2(OpCode op, RegSlot R0, RegSlot R1); + void Reg2U(OpCode op, RegSlot R0, RegSlot R1, uint slotIndex); void Reg3(OpCode op, RegSlot R0, RegSlot R1, RegSlot R2); + void Reg3U(OpCode op, RegSlot R0, RegSlot R1, RegSlot R2, uint slotIndex); void Reg3C(OpCode op, RegSlot R0, RegSlot R1, RegSlot R2, uint cacheId); void Reg4(OpCode op, RegSlot R0, RegSlot R1, RegSlot R2, RegSlot R3); + void Reg4U(OpCode op, RegSlot R0, RegSlot R1, RegSlot R2, RegSlot R3, uint slotIndex); void Reg1Unsigned1(OpCode op, RegSlot R0, uint C1); void Reg2B1(OpCode op, RegSlot R0, RegSlot R1, uint8 B3); void Reg3B1(OpCode op, RegSlot R0, RegSlot R1, RegSlot R2, uint8 B3); void Reg5(OpCode op, RegSlot R0, RegSlot R1, RegSlot R2, RegSlot R3, RegSlot R4); + void Reg5U(OpCode op, RegSlot R0, RegSlot R1, RegSlot R2, RegSlot R3, RegSlot R4, uint slotIndex); void ArgIn0(RegSlot arg); template void ArgOut(ArgSlot arg, RegSlot reg, ProfileId callSiteId, bool emitProfiledArgout); @@ -269,10 +275,10 @@ namespace Js void CallI(OpCode op, RegSlot returnValueRegister, RegSlot functionRegister, ArgSlot givenArgCount, ProfileId callSiteId, CallFlags callFlags = CallFlags_None); void CallIExtended(OpCode op, RegSlot returnValueRegister, RegSlot functionRegister, ArgSlot givenArgCount, CallIExtendedOptions options, const void *buffer, uint byteCount, ProfileId callSiteId, CallFlags callFlags = CallFlags_None); void RemoveEntryForRegSlotFromCacheIdMap(RegSlot functionRegister); - void Element(OpCode op, RegSlot value, RegSlot instance, RegSlot element, bool instanceAtReturnRegOK = false); + void Element(OpCode op, RegSlot value, RegSlot instance, RegSlot element, bool instanceAtReturnRegOK = false, bool forceStrictMode = false); void ElementUnsigned1(OpCode op, RegSlot value, RegSlot instance, uint32 element); - void Property(OpCode op, RegSlot Value, RegSlot Instance, PropertyIdIndexType propertyIdIndex); - void ScopedProperty(OpCode op, RegSlot Value, PropertyIdIndexType propertyIdIndex); + void Property(OpCode op, RegSlot Value, RegSlot Instance, PropertyIdIndexType propertyIdIndex, bool forceStrictMode = false); + void ScopedProperty(OpCode op, RegSlot Value, PropertyIdIndexType propertyIdIndex, bool forceStrictMode = false); void Slot(OpCode op, RegSlot value, RegSlot instance, uint32 slotId); void Slot(OpCode op, RegSlot value, RegSlot instance, uint32 slotId, ProfileId profileId); void SlotI1(OpCode op, RegSlot value, uint32 slotId1); @@ -295,12 +301,16 @@ namespace Js template bool TryWriteReg1(OpCode op, RegSlot R0); template bool TryWriteReg2(OpCode op, RegSlot R0, RegSlot R1); + template bool TryWriteReg2U(OpCode op, RegSlot R0, RegSlot R1, uint index); template bool TryWriteReg3(OpCode op, RegSlot R0, RegSlot R1, RegSlot R2); + template bool TryWriteReg3U(OpCode op, RegSlot R0, RegSlot R1, RegSlot R2, uint index); template bool TryWriteReg3C(OpCode op, RegSlot R0, RegSlot R1, RegSlot R2, CacheId cacheId); template bool TryWriteReg4(OpCode op, RegSlot R0, RegSlot R1, RegSlot R2, RegSlot R3); + template bool TryWriteReg4U(OpCode op, RegSlot R0, RegSlot R1, RegSlot R2, RegSlot R3, uint slotIndex); template bool TryWriteReg2B1(OpCode op, RegSlot R0, RegSlot R1, uint8 B2); template bool TryWriteReg3B1(OpCode op, RegSlot R0, RegSlot R1, RegSlot R2, uint8 B3); template bool TryWriteReg5(OpCode op, RegSlot R0, RegSlot R1, RegSlot R2, RegSlot R3, RegSlot R4); + template bool TryWriteReg5U(OpCode op, RegSlot R0, RegSlot R1, RegSlot R2, RegSlot R3, RegSlot R4, uint slotIndex); template bool TryWriteUnsigned1(OpCode op, uint C1); template bool TryWriteArg(OpCode op, ArgSlot arg, RegSlot reg); template bool TryWriteArgNoSrc(OpCode op, ArgSlot arg); @@ -332,7 +342,6 @@ namespace Js template bool TryWriteElementCP(OpCode op, RegSlot value, RegSlot instance, CacheId cacheId); template bool TryWriteElementScopedC2(OpCode op, RegSlot value, PropertyIdIndexType propertyIdIndex, RegSlot instance2); template bool TryWriteElementC2(OpCode op, RegSlot value, RegSlot instance, PropertyIdIndexType propertyIdIndex, RegSlot instance2); - template bool TryWriteClass(OpCode op, RegSlot constructor, RegSlot extends); template bool TryWriteReg1Unsigned1(OpCode op, RegSlot R0, uint C1); template bool TryWriteReg2Int1(OpCode op, RegSlot R0, RegSlot R1, int C1); @@ -345,7 +354,6 @@ namespace Js void Reg2Aux(OpCode op, RegSlot R0, RegSlot R1, uint byteOffset, int size); uint InsertAuxiliaryData(const void* buffer, uint byteCount); - void InitClass(RegSlot constructor, RegSlot extends = Js::Constants::NoRegister); void NewFunction(RegSlot destinationRegister, uint index, bool isGenerator, RegSlot homeObjLocation); void NewInnerFunction(RegSlot destinationRegister, uint index, RegSlot environmentRegister, bool isGenerator, RegSlot homeObjLocation); ByteCodeLabel DefineLabel(); @@ -361,6 +369,7 @@ namespace Js void SetCurrent(uint offset, DataChunk * chunk) { m_byteCodeData.SetCurrent(offset, chunk); } bool ShouldIncrementCallSiteId(OpCode op); inline void SetCallSiteCount(Js::ProfileId callSiteId) { this->m_functionWrite->SetProfiledCallSiteCount(callSiteId); } + inline void SetCallApplyCallsiteCount(Js::ProfileId count) { this->m_functionWrite->SetProfiledCallApplyCallSiteCount(count); } // Debugger methods. DebuggerScope* RecordStartScopeObject(DiagExtraScopesType scopeType, RegSlot scopeLocation = Js::Constants::NoRegister, int* index = nullptr); @@ -376,6 +385,18 @@ namespace Js uint EnterLoop(Js::ByteCodeLabel loopEntrance); void ExitLoop(uint loopId); + void SetCurrentLoopHasYield(); + bool HasLoopWithoutYield() + { + for (int i = 0; i < m_loopHeaders->Count(); ++i) + { + if(!m_loopHeaders->Item(i).hasYield) + { + return true; + } + } + return false; + } bool DoJitLoopBodies() const { return m_doJitLoopBodies; } bool DoInterruptProbes() const { return m_doInterruptProbe; } @@ -424,12 +445,8 @@ namespace Js namespace JsUtil { template <> - class ValueEntry: public BaseValueEntry + inline void ClearValue::Clear(Js::ByteCodeWriter::CacheIdUnit* value) { - public: - void Clear() - { - this->value = 0; - } - }; -}; + *value = 0; + } +} diff --git a/lib/Runtime/ByteCode/FuncInfo.cpp b/lib/Runtime/ByteCode/FuncInfo.cpp index 111cb5837a5..ca277e059cb 100644 --- a/lib/Runtime/ByteCode/FuncInfo.cpp +++ b/lib/Runtime/ByteCode/FuncInfo.cpp @@ -49,6 +49,7 @@ FuncInfo::FuncInfo( frameDisplayRegister(Js::Constants::NoRegister), funcObjRegister(Js::Constants::NoRegister), localClosureReg(Js::Constants::NoRegister), + awaitRegister(Js::Constants::NoRegister), yieldRegister(Js::Constants::NoRegister), firstTmpReg(Js::Constants::NoRegister), curTmpReg(Js::Constants::NoRegister), @@ -76,6 +77,7 @@ FuncInfo::FuncInfo( constantToRegister(alloc, 17), stringToRegister(alloc, 17), + bigintToRegister(alloc, 17), doubleConstantToRegister(alloc, 17), stringTemplateCallsiteRegisterMap(alloc, 17), @@ -91,6 +93,7 @@ FuncInfo::FuncInfo( rootObjectStoreInlineCacheMap(nullptr), inlineCacheMap(nullptr), referencedPropertyIdToMapIndex(nullptr), + callSiteToCallApplyCallSiteMap(nullptr), valueOfStoreCacheIds(), toStringStoreCacheIds(), slotProfileIdMap(alloc), @@ -99,6 +102,7 @@ FuncInfo::FuncInfo( newTargetSymbol(nullptr), superSymbol(nullptr), superConstructorSymbol(nullptr), + importMetaSymbol(nullptr), nonUserNonTempRegistersToInitialize(alloc) { if (bodyScope != nullptr) @@ -169,6 +173,11 @@ BOOL FuncInfo::IsDerivedClassConstructor() const return root->IsDerivedClassConstructor(); } +bool FuncInfo::IsAsyncGenerator() const +{ + return (root->IsAsync() && root->IsGenerator()); +} + Scope * FuncInfo::GetGlobalBlockScope() const { @@ -479,6 +488,15 @@ CapturedSymMap *FuncInfo::EnsureCapturedSymMap() return this->capturedSymMap; } +CallSiteToCallApplyCallSiteMap * FuncInfo::EnsureCallSiteToCallApplyCallSiteMap() +{ + if (this->callSiteToCallApplyCallSiteMap == nullptr) + { + this->callSiteToCallApplyCallSiteMap = Anew(alloc, CallSiteToCallApplyCallSiteMap, alloc); + } + return this->callSiteToCallApplyCallSiteMap; +} + void FuncInfo::SetHasMaybeEscapedNestedFunc(DebugOnly(char16 const * reason)) { if (PHASE_TESTTRACE(Js::StackFuncPhase, this->byteCodeFunction) && !hasEscapedUseNestedFunc) diff --git a/lib/Runtime/ByteCode/FuncInfo.h b/lib/Runtime/ByteCode/FuncInfo.h index 8634d5ab2b5..ecc63f08b18 100644 --- a/lib/Runtime/ByteCode/FuncInfo.h +++ b/lib/Runtime/ByteCode/FuncInfo.h @@ -19,6 +19,7 @@ struct InlineCacheUnit }; typedef JsUtil::BaseDictionary*, ArenaAllocator, PowerOf2SizePolicy> CapturedSymMap; +typedef JsUtil::BaseDictionary CallSiteToCallApplyCallSiteMap; class FuncInfo { @@ -113,6 +114,7 @@ class FuncInfo Js::RegSlot frameDisplayRegister; // location, if any, of the display of nested frames Js::RegSlot funcObjRegister; Js::RegSlot localClosureReg; + Js::RegSlot awaitRegister; Js::RegSlot yieldRegister; Js::RegSlot firstTmpReg; Js::RegSlot curTmpReg; @@ -145,8 +147,10 @@ class FuncInfo PidRegisterMap stringToRegister; // maps string constant to register typedef JsUtil::BaseDictionary DoubleRegisterMap; DoubleRegisterMap doubleConstantToRegister; // maps double constant to register + typedef JsUtil::BaseDictionary BigIntRegisterMap; + BigIntRegisterMap bigintToRegister; // maps bigint constant to register - typedef JsUtil::BaseDictionary StringTemplateCallsiteRegisterMap; + typedef JsUtil::BaseDictionary StringTemplateCallsiteRegisterMap; StringTemplateCallsiteRegisterMap stringTemplateCallsiteRegisterMap; // maps string template callsite constant to register Scope *paramScope; // top level scope for parameter default values @@ -166,6 +170,7 @@ class FuncInfo RootObjectInlineCacheIdMap * rootObjectStoreInlineCacheMap; InlineCacheMap * inlineCacheMap; ReferencedPropertyIdMap * referencedPropertyIdToMapIndex; + CallSiteToCallApplyCallSiteMap * callSiteToCallApplyCallSiteMap; SListBase valueOfStoreCacheIds; SListBase toStringStoreCacheIds; typedef JsUtil::BaseDictionary SlotProfileIdMap; @@ -173,6 +178,7 @@ class FuncInfo Symbol *argumentsSymbol; Symbol *thisSymbol; Symbol *newTargetSymbol; + Symbol* importMetaSymbol; Symbol *superSymbol; Symbol *superConstructorSymbol; JsUtil::List nonUserNonTempRegistersToInitialize; @@ -321,6 +327,17 @@ class FuncInfo return newTargetSymbol; } + void SetImportMetaSymbol(Symbol* sym) + { + Assert(importMetaSymbol == nullptr || importMetaSymbol == sym); + importMetaSymbol = sym; + } + + Symbol* GetImportMetaSymbol() const + { + return importMetaSymbol; + } + void SetSuperSymbol(Symbol *sym) { Assert(superSymbol == nullptr || superSymbol == sym); @@ -467,6 +484,7 @@ class FuncInfo BOOL IsClassConstructor() const; BOOL IsBaseClassConstructor() const; BOOL IsDerivedClassConstructor() const; + bool IsAsyncGenerator() const; void RemoveTargetStmt(ParseNodeStmt* pnodeStmt) { targetStatements.Remove(pnodeStmt); @@ -551,6 +569,13 @@ class FuncInfo return this->falseConstantRegister; } + Js::RegSlot AssignAwaitRegister() + { + AssertMsg(this->awaitRegister == Js::Constants::NoRegister, "await register should only be assigned once by FinalizeRegisters()"); + this->awaitRegister = NextVarRegister(); + return this->awaitRegister; + } + Js::RegSlot AssignYieldRegister() { AssertMsg(this->yieldRegister == Js::Constants::NoRegister, "yield register should only be assigned once by FinalizeRegisters()"); @@ -674,7 +699,7 @@ class FuncInfo } // If we share inline caches we should never have more than one entry in the list. - Assert(Js::FunctionBody::ShouldShareInlineCaches() || cacheList->Count() <= 1); + Assert(!Js::FunctionBody::ShouldShareInlineCaches() || cacheList->Count() <= 1); InlineCacheUnit cacheIdUnit; @@ -792,6 +817,7 @@ class FuncInfo void OnEndVisitScope(Scope *scope, bool isMergedScope = false); void AddCapturedSym(Symbol *sym); CapturedSymMap *EnsureCapturedSymMap(); + CallSiteToCallApplyCallSiteMap * EnsureCallSiteToCallApplyCallSiteMap(); #if DBG_DUMP void Dump(); diff --git a/lib/Runtime/ByteCode/LayoutTypes.h b/lib/Runtime/ByteCode/LayoutTypes.h index cc499aa8325..085e58e7d60 100644 --- a/lib/Runtime/ByteCode/LayoutTypes.h +++ b/lib/Runtime/ByteCode/LayoutTypes.h @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- // @@ -46,8 +47,12 @@ LAYOUT_TYPE (Empty) LAYOUT_TYPE_WMS (Reg1) LAYOUT_TYPE_PROFILED_WMS (Reg2) LAYOUT_TYPE_PROFILED_WMS (Reg3) +LAYOUT_TYPE_WMS (Reg3U) LAYOUT_TYPE_WMS (Reg4) +LAYOUT_TYPE_WMS (Reg4U) +LAYOUT_TYPE_WMS (Reg5U) LAYOUT_TYPE_PROFILED_WMS (Reg1Unsigned1) +LAYOUT_TYPE_WMS (Reg2U) LAYOUT_TYPE_WMS (Reg2B1) LAYOUT_TYPE_WMS (Reg3B1) LAYOUT_TYPE_WMS (Reg3C) @@ -73,7 +78,6 @@ LAYOUT_TYPE_PROFILED2_WMS (CallIExtended) LAYOUT_TYPE_PROFILED_WMS (CallIExtendedFlags) LAYOUT_TYPE_PROFILED_WMS (CallIExtendedWithICIndex) LAYOUT_TYPE_PROFILED_WMS (CallIExtendedFlagsWithICIndex) -LAYOUT_TYPE_WMS (Class) LAYOUT_TYPE_PROFILED_WMS (ElementI) LAYOUT_TYPE_WMS (ElementUnsigned1) LAYOUT_TYPE_WMS (ElementC) diff --git a/lib/Runtime/ByteCode/OpCodeUtil.h b/lib/Runtime/ByteCode/OpCodeUtil.h index 0a79932dc92..b3b4ed6ea68 100644 --- a/lib/Runtime/ByteCode/OpCodeUtil.h +++ b/lib/Runtime/ByteCode/OpCodeUtil.h @@ -32,11 +32,11 @@ class OpCodeUtil static bool IsValidByteCodeOpcode(OpCode op); static bool IsValidOpcode(OpCode op); static bool IsPrefixOpcode(OpCode op); - static const bool IsSmallEncodedOpcode(OpCode op) + static bool IsSmallEncodedOpcode(OpCode op) { return op <= Js::OpCode::MaxByteSizedOpcodes; } - static const uint EncodedSize(OpCode op, LayoutSize layoutSize) + static uint EncodedSize(OpCode op, LayoutSize layoutSize) { // Simple case, only 1 byte // Small OpCode with Medium or Large layout: 1 extra byte for the prefix diff --git a/lib/Runtime/ByteCode/OpCodes.h b/lib/Runtime/ByteCode/OpCodes.h index 1bdb65950b8..72bd47425bb 100755 --- a/lib/Runtime/ByteCode/OpCodes.h +++ b/lib/Runtime/ByteCode/OpCodes.h @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft Corporation and contributors. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- // Default all macro to nothing @@ -71,10 +72,10 @@ MACRO_WMS_WITH_DBG_ATTR(opcode, layout, attr, OpDbgAttr_LoadRoot) #define MACRO_EXTENDED_ROOT(opcode, layout, attr) \ - MACRO_EXTENDED_WITH_DBG_ATTR(opcode, layout, attr, OpDbgAttr_LoadRoot) + MACRO_EXTEND_WITH_DBG_ATTR(opcode, layout, attr, OpDbgAttr_LoadRoot) #define MACRO_EXTEND_WMS_ROOT(opcode, layout, attr) \ - MACRO_EXTENDED_WMS_WITH_DBG_ATTR(opcode, layout, attr, OpDbgAttr_LoadRoot) + MACRO_EXTEND_WMS_WITH_DBG_ATTR(opcode, layout, attr, OpDbgAttr_LoadRoot) #define MACRO_WMS_PROFILED( opcode, layout, attr) \ MACRO_WMS(opcode, layout, OpHasProfiled|attr) \ @@ -160,11 +161,17 @@ MACRO_BACKEND_ONLY( BrUnLe_A, BrReg2, OpSideEffect|OpOpndH MACRO_WMS( BrSrEq_A, BrReg2, OpSideEffect|OpOpndHasImplicitCall|OpTempNumberSources|OpTempObjectSources) // Branch if '===' (strict equals) (NOTE: May have DOM implicit calls) MACRO_WMS( BrSrNeq_A, BrReg2, OpSideEffect|OpOpndHasImplicitCall|OpTempNumberSources|OpTempObjectSources) // Branch if '!==' (not strict equals) (NOTE: May have DOM implicit calls) MACRO_EXTEND( BrOnHasProperty, BrProperty, OpSideEffect|OpOpndHasImplicitCall|OpTempNumberSources|OpTempObjectSources) // Branch if object has the given property (NOTE: May have DOM implicit calls) -MACRO( BrOnNoProperty, BrProperty, OpSideEffect|OpOpndHasImplicitCall|OpTempNumberSources|OpTempObjectSources) // Branch if object does not have the given property (NOTE: May have DOM implicit calls) -MACRO( BrOnNoLocalProperty,BrLocalProperty,OpSideEffect|OpOpndHasImplicitCall|OpTempNumberSources|OpTempObjectSources) // Branch if object does not have the given property (NOTE: May have DOM implicit calls) -MACRO( BrOnNoEnvProperty, BrEnvProperty, OpSideEffect|OpOpndHasImplicitCall|OpTempNumberSources|OpTempObjectSources) // Branch if object does not have the given property (NOTE: May have DOM implicit calls) +MACRO_EXTEND( BrOnNoProperty, BrProperty, OpSideEffect|OpOpndHasImplicitCall|OpTempNumberSources|OpTempObjectSources) // Branch if object does not have the given property (NOTE: May have DOM implicit calls) +MACRO( BrOnHasLocalProperty,BrLocalProperty,OpSideEffect|OpTempNumberSources|OpTempObjectSources) // Branch if object has the given property (NOTE: May have DOM implicit calls) +MACRO_BACKEND_ONLY( BrOnNoLocalProperty,BrLocalProperty,OpSideEffect|OpTempNumberSources|OpTempObjectSources) // Branch if object does not have the given property (NOTE: May have DOM implicit calls) +MACRO_EXTEND( BrOnHasEnvProperty, BrEnvProperty, OpSideEffect|OpOpndHasImplicitCall|OpTempNumberSources|OpTempObjectSources) // Branch if object has the given property (NOTE: May have DOM implicit calls) +MACRO_BACKEND_ONLY( BrOnNoEnvProperty, BrEnvProperty, OpSideEffect|OpOpndHasImplicitCall|OpTempNumberSources|OpTempObjectSources) // Branch if object does not have the given property (NOTE: May have DOM implicit calls) +MACRO( BrOnHasLocalEnvProperty, BrEnvProperty, OpSideEffect|OpTempNumberSources|OpTempObjectSources) // Branch if object has the given property (NOTE: May have DOM implicit calls) +MACRO_EXTEND( BrOnNoLocalEnvProperty, BrEnvProperty, OpSideEffect|OpTempNumberSources|OpTempObjectSources) // Branch if object does not have the given property (NOTE: May have DOM implicit calls) MACRO_WMS( BrOnObject_A, BrReg1, OpSideEffect|OpTempNumberSources|OpTempObjectSources) // Branch if typeId is not primitive type (i.e. > TypeIds_LastJavascriptPrimitiveType) MACRO_WMS( BrNotNull_A, BrReg1, OpSideEffect|OpTempNumberSources|OpTempObjectSources) // Branch if not NULL +MACRO_WMS( BrOnNotNullObj_A, BrReg1, OpTempNumberSources|OpTempObjectSources) +MACRO_EXTEND_WMS( BrOnObjectOrNull_A, BrReg1, OpTempNumberSources|OpTempObjectSources) MACRO_EXTEND_WMS( BrNotUndecl_A, BrReg1, OpSideEffect|OpTempNumberSources|OpTempObjectSources) // Branch if source reg is NEQ to Undecl MACRO_BACKEND_ONLY( BrNotEq_A, Empty, OpSideEffect|OpOpndHasImplicitCall|OpTempNumberSources|OpTempObjectSources) // Branch if !'>=' MACRO_BACKEND_ONLY( BrNotNeq_A, Empty, OpSideEffect|OpOpndHasImplicitCall|OpTempNumberSources|OpTempObjectSources) // Branch if !'>=' @@ -230,8 +237,6 @@ MACRO_BACKEND_ONLY( EHThrow, Reg1, OpSideEffect|OpPostO MACRO_WMS( Throw, Reg1, OpSideEffect|OpNoFallThrough|OpPostOpDbgBailOut) // Throw exception MACRO( Ret, Empty, OpSideEffect|OpUseAllFields|OpNoFallThrough) // Return from function MACRO_WMS( Yield, Reg2, OpSideEffect|OpUseAllFields) // Yield from generator function -MACRO_WMS( ResumeYield, Reg2, OpSideEffect) -MACRO_WMS( ResumeYieldStar, Reg3, OpSideEffect) // Unary operations MACRO_WMS( Incr_A, Reg2, OpTempNumberProducing|OpOpndHasImplicitCall|OpDoNotTransfer|OpTempNumberSources|OpTempObjectSources|OpCanCSE|OpPostOpDbgBailOut|OpProducesNumber) // Increment @@ -255,6 +260,7 @@ MACRO_BACKEND_ONLY( Not_I4, Empty, OpDoNotTransfer|OpTe // REVIEW: TypeofRootFld will be off the root object which can't be null? So we could remove OpSideEffect? MACRO_WMS( Typeof, Reg2, OpTempNumberProducing|OpDoNotTransfer|OpOpndHasImplicitCall|OpCanCSE) // typeof x +MACRO_EXTEND_WMS( Typeof_ReuseLoc, Reg2, OpTempNumberProducing|OpDoNotTransfer|OpOpndHasImplicitCall|OpCanCSE) // typeof x MACRO_WMS( TypeofElem, ElementI, OpTempNumberProducing|OpSideEffect|OpDoNotTransfer|OpOpndHasImplicitCall|OpPostOpDbgBailOut) // typeof x[y] MACRO_WMS( ApplyArgs, Reg5, OpByteCodeOnly|OpSideEffect|OpUseAllFields) // apply function to this function's arguments and this pointer @@ -340,9 +346,12 @@ MACRO_BACKEND_ONLY( TrapIfTruncOverflow, Reg2, OpSideEffect) // Register MACRO_EXTEND_WMS( UnwrapWithObj, Reg2, OpSideEffect) // Copy Var register with unwrapped object +MACRO_EXTEND_WMS( UnwrapWithObj_ReuseLoc,Reg2, OpSideEffect) // Copy Var register with unwrapped object MACRO_EXTEND_WMS( SetComputedNameVar, Reg2, OpSideEffect) MACRO_WMS( Ld_A, Reg2, OpTempNumberTransfer|OpTempObjectTransfer|OpNonIntTransfer|OpCanCSE) // Copy Var register +MACRO_WMS( Ld_A_ReuseLoc, Reg2, OpTempNumberTransfer|OpTempObjectTransfer|OpNonIntTransfer|OpCanCSE) // Copy Var register MACRO_WMS( LdLocalObj, Reg1, OpCanCSE) // Load non-stack frame object +MACRO_EXTEND_WMS( LdLocalObj_ReuseLoc,Reg1, OpCanCSE) // Load non-stack frame object MACRO_EXTEND_WMS( LdParamObj, Reg1, OpCanCSE) // Load non-stack param scope frame object MACRO_WMS( LdInnerScope, Reg1Unsigned1, OpCanCSE) // Load non-stack inner scope MACRO_WMS( LdC_A_Null, Reg1, OpByteCodeOnly|OpCanCSE) // Load from 'null' as Var @@ -356,6 +365,7 @@ MACRO_WMS( ChkUndecl, Reg1, OpSideEffect MACRO_WMS_ROOT( EnsureNoRootFld, ElementRootU, OpSideEffect) MACRO_WMS_ROOT( EnsureNoRootRedeclFld, ElementRootU, OpSideEffect) +MACRO_EXTEND_WMS_ROOT( EnsureCanDeclGloFunc, ElementRootU, OpSideEffect) MACRO_WMS( ScopedEnsureNoRedeclFld, ElementScopedC, OpSideEffect) MACRO_WMS( InitUndecl, Reg1, OpCanCSE) @@ -385,6 +395,9 @@ MACRO_EXTEND_WMS( InitClassMemberSetComputedName,ElementI, OpSideEffect MACRO_EXTEND_WMS( InitClassMemberGetComputedName,ElementI, OpSideEffect|OpOpndHasImplicitCall|OpPostOpDbgBailOut) // Class member in get syntax with computed property name MACRO_EXTEND_WMS( BrOnClassConstructor, BrReg1, None) // Branch if argument is a class constructor MACRO_EXTEND_WMS( BrOnBaseConstructorKind, BrReg1, None) // Branch if argument's [[ConstructorKind]] is 'base' +MACRO_EXTEND_WMS( BrOnConstructor_A, BrReg1, None) // Branch if argument is a Constructor +MACRO_BACKEND_ONLY( NewClassProto, Empty, OpSideEffect) +MACRO_BACKEND_ONLY( NewClassConstructor, Empty, OpSideEffect) MACRO_BACKEND_ONLY( ArgIn_A, Empty, None) // Copy from "in slot" to "local slot", unchecked MACRO_WMS( ArgIn0, Reg1, OpByteCodeOnly) // Copy from "in slot" to "local slot", unchecked @@ -403,8 +416,11 @@ MACRO_WMS( Delete_A, Reg2, OpSideEffect // Object operations MACRO_WMS_PROFILED_OP( LdFld, ElementCP, OpSideEffect|OpOpndHasImplicitCall|OpFastFldInstr|OpPostOpDbgBailOut|OpCanLoadFixedFields) // Load from ScriptObject instance's direct field -MACRO_WMS_PROFILED_OP( LdLocalFld, ElementP, OpSideEffect|OpOpndHasImplicitCall|OpFastFldInstr|OpPostOpDbgBailOut|OpCanLoadFixedFields) // Load from ScriptObject instance's direct field -MACRO_WMS( LdEnvObj, ElementSlotI1, OpTempNumberSources) +MACRO_WMS_PROFILED_OP( LdFld_ReuseLoc, ElementCP, OpSideEffect|OpOpndHasImplicitCall|OpFastFldInstr|OpPostOpDbgBailOut|OpCanLoadFixedFields) // Load from ScriptObject instance's direct field +MACRO_WMS_PROFILED_OP( LdLocalFld, ElementP, OpSideEffect|OpFastFldInstr|OpPostOpDbgBailOut|OpCanLoadFixedFields) // Load from ScriptObject instance's direct field +MACRO_WMS_PROFILED_OP( LdLocalFld_ReuseLoc, ElementP, OpSideEffect|OpFastFldInstr|OpPostOpDbgBailOut|OpCanLoadFixedFields) // Load from ScriptObject instance's direct field +MACRO_EXTEND_WMS( LdEnvObj, ElementSlotI1, OpTempNumberSources) +MACRO_EXTEND_WMS( LdEnvObj_ReuseLoc, ElementSlotI1, OpTempNumberSources) MACRO_EXTEND_WMS_AND_PROFILED_OP(LdSuperFld, ElementC2, OpSideEffect|OpOpndHasImplicitCall|OpFastFldInstr|OpPostOpDbgBailOut|OpCanLoadFixedFields) // Load from ScriptObject super instance's direct field MACRO_WMS_PROFILED_OP( LdFldForTypeOf, ElementCP, OpSideEffect|OpOpndHasImplicitCall|OpFastFldInstr|OpPostOpDbgBailOut|OpCanLoadFixedFields) MACRO_EXTEND_WMS_AND_PROFILED_OP_ROOT(LdRootFldForTypeOf, ElementRootCP, OpSideEffect|OpOpndHasImplicitCall|OpFastFldInstr|OpPostOpDbgBailOut|OpCanLoadFixedFields) @@ -412,7 +428,7 @@ MACRO_EXTEND_WMS_AND_PROFILED_OP_ROOT(LdRootFldForTypeOf, ElementRootCP, OpSideE MACRO_WMS_PROFILED_OP( LdFldForCallApplyTarget, ElementCP, OpSideEffect|OpOpndHasImplicitCall|OpFastFldInstr|OpPostOpDbgBailOut) MACRO_WMS_PROFILED_OP_ROOT(LdRootFld, ElementRootCP, OpSideEffect|OpOpndHasImplicitCall|OpFastFldInstr|OpPostOpDbgBailOut|OpCanLoadFixedFields) // Load from ScriptObject instance's direct field (access to let/const on root object) MACRO_WMS_PROFILED_OP(LdMethodFld, ElementCP, OpSideEffect|OpOpndHasImplicitCall|OpFastFldInstr|OpPostOpDbgBailOut|OpCanLoadFixedFields) // Load call target from ScriptObject instance's direct field -MACRO_EXTEND_WMS_AND_PROFILED_OP(LdLocalMethodFld, ElementP, OpSideEffect|OpOpndHasImplicitCall|OpFastFldInstr|OpPostOpDbgBailOut|OpCanLoadFixedFields) // Load call target from ScriptObject instance's direct field +MACRO_EXTEND_WMS_AND_PROFILED_OP(LdLocalMethodFld, ElementP, OpSideEffect|OpFastFldInstr|OpPostOpDbgBailOut|OpCanLoadFixedFields) // Load call target from ScriptObject instance's direct field MACRO_BACKEND_ONLY( LdMethodFldPolyInlineMiss, ElementCP, OpSideEffect|OpOpndHasImplicitCall|OpDoNotTransfer|OpPostOpDbgBailOut) // Load call target from ScriptObject instance's direct field, when the call target is neither of // the ones we inlined using fixed methods, at a polymorphic call site, // but don't allow it to participate in any obj type spec optimizations, @@ -420,20 +436,23 @@ MACRO_BACKEND_ONLY( LdMethodFldPolyInlineMiss, ElementCP, OpSideEffect|OpOpn MACRO_WMS_PROFILED_OP_ROOT(LdRootMethodFld, ElementRootCP, OpSideEffect|OpOpndHasImplicitCall|OpFastFldInstr|OpPostOpDbgBailOut) // Load call target from ScriptObject instance's direct field (access to let/const on root object) MACRO_WMS_PROFILED_OP( StFld, ElementCP, OpSideEffect|OpOpndHasImplicitCall|OpFastFldInstr|OpPostOpDbgBailOut) // Store into ScriptObject instance's direct field MACRO_EXTEND_WMS_AND_PROFILED_OP(StSuperFld, ElementC2, OpSideEffect|OpOpndHasImplicitCall|OpFastFldInstr|OpPostOpDbgBailOut) // Store into ScriptObject super instance's direct field +MACRO_EXTEND_WMS_AND_PROFILED_OP(StSuperFldStrict, ElementC2, OpSideEffect|OpOpndHasImplicitCall|OpFastFldInstr|OpPostOpDbgBailOut) // Store into ScriptObject super instance's direct field (strict mode, super.x = ...) MACRO_WMS_PROFILED_OP_ROOT(StRootFld, ElementRootCP, OpSideEffect|OpOpndHasImplicitCall|OpFastFldInstr|OpPostOpDbgBailOut) // Store into ScriptObject instance's direct field (access to let/const on root object) -MACRO_WMS_PROFILED_OP( StLocalFld, ElementP, OpSideEffect|OpOpndHasImplicitCall|OpFastFldInstr|OpPostOpDbgBailOut) // Store into local activation object +MACRO_WMS_PROFILED_OP( StLocalFld, ElementP, OpSideEffect|OpFastFldInstr|OpPostOpDbgBailOut) // Store into local activation object MACRO_WMS_PROFILED_OP( StFldStrict, ElementCP, OpSideEffect|OpOpndHasImplicitCall|OpFastFldInstr|OpPostOpDbgBailOut) // Store into ScriptObject instance's direct field (strict mode, a.x = ...) MACRO_WMS_PROFILED_OP_ROOT(StRootFldStrict, ElementRootCP, OpSideEffect|OpOpndHasImplicitCall|OpFastFldInstr|OpPostOpDbgBailOut) // Store into ScriptObject instance's direct field (strict mode, x = ..., access to let/const on root object) MACRO_WMS_PROFILED_OP( InitFld, ElementCP, OpSideEffect|OpOpndHasImplicitCall|OpFastFldInstr|OpPostOpDbgBailOut) // Declare a property with an initial value -MACRO_WMS_PROFILED_OP( InitLocalFld, ElementP, OpSideEffect|OpOpndHasImplicitCall|OpFastFldInstr|OpPostOpDbgBailOut) // Declare a property with an initial value -MACRO_EXTEND_WMS( InitLocalLetFld, ElementP, OpSideEffect|OpOpndHasImplicitCall|OpPostOpDbgBailOut) // Declare a property with an initial value -MACRO_EXTEND_WMS( InitInnerFld, ElementPIndexed,OpSideEffect|OpOpndHasImplicitCall|OpFastFldInstr|OpPostOpDbgBailOut) // Declare a property with an initial value -MACRO_EXTEND_WMS( InitInnerLetFld, ElementPIndexed,OpSideEffect|OpOpndHasImplicitCall|OpPostOpDbgBailOut) // Declare a property with an initial value +MACRO_WMS_PROFILED_OP( InitLocalFld, ElementP, OpSideEffect|OpFastFldInstr|OpPostOpDbgBailOut) // Declare a property with an initial value +MACRO_EXTEND_WMS( InitLocalLetFld, ElementP, OpSideEffect|OpPostOpDbgBailOut) // Declare a property with an initial value +MACRO_EXTEND_WMS( InitInnerFld, ElementPIndexed,OpSideEffect|OpFastFldInstr|OpPostOpDbgBailOut) // Declare a property with an initial value +MACRO_EXTEND_WMS( InitInnerLetFld, ElementPIndexed,OpSideEffect|OpPostOpDbgBailOut) // Declare a property with an initial value MACRO_WMS_PROFILED_OP_ROOT(InitRootFld, ElementRootCP, OpSideEffect|OpOpndHasImplicitCall|OpFastFldInstr|OpPostOpDbgBailOut) // Declare a property with an initial value MACRO_BACKEND_ONLY( LdMethodFromFlags, ElementCP, OpFastFldInstr|OpCanCSE) MACRO_WMS( DeleteFld, ElementC, OpSideEffect|OpOpndHasImplicitCall|OpDoNotTransfer|OpPostOpDbgBailOut) // Remove a property -MACRO_EXTEND_WMS( DeleteLocalFld, ElementU, OpSideEffect|OpOpndHasImplicitCall|OpDoNotTransfer|OpPostOpDbgBailOut) // Remove a property +MACRO_EXTEND_WMS( DeleteFld_ReuseLoc, ElementC, OpSideEffect|OpOpndHasImplicitCall|OpDoNotTransfer|OpPostOpDbgBailOut) // Remove a property +MACRO_EXTEND_WMS( DeleteLocalFld, ElementU, OpSideEffect|OpDoNotTransfer|OpPostOpDbgBailOut) // Remove a property +MACRO_EXTEND_WMS( DeleteLocalFld_ReuseLoc, ElementU, OpSideEffect|OpDoNotTransfer|OpPostOpDbgBailOut) // Remove a property MACRO_WMS_ROOT( DeleteRootFld, ElementC, OpSideEffect|OpOpndHasImplicitCall|OpDoNotTransfer|OpPostOpDbgBailOut) // Remove a property (access to let/const on root object) MACRO_WMS( DeleteFldStrict, ElementC, OpSideEffect|OpOpndHasImplicitCall|OpDoNotTransfer|OpPostOpDbgBailOut) // Remove a property in strict mode MACRO_WMS_ROOT( DeleteRootFldStrict, ElementC, OpSideEffect|OpHasImplicitCall|OpDoNotTransfer|OpPostOpDbgBailOut) // Remove a property in strict mode (access to let/const on root object) @@ -513,8 +532,8 @@ MACRO_WMS( StArrSegItem_CI4, ElementUnsigned1, OpSideEff MACRO( StArrSegItem_A, Auxiliary, OpSideEffect) MACRO_WMS( DeleteElemI_A, ElementI, OpSideEffect|OpHasImplicitCall|OpPostOpDbgBailOut) // Remove from instance's indirect element / field, checked MACRO_WMS( DeleteElemIStrict_A, ElementI, OpSideEffect|OpHasImplicitCall|OpPostOpDbgBailOut) // Remove from instance's indirect element / field, checked -MACRO_EXTEND_WMS( InitSetFld, ElementC, OpSideEffect|OpOpndHasImplicitCall|OpFastFldInstr|OpPostOpDbgBailOut) // Set in Object Literal Syntax {set prop(args){}}; -MACRO_EXTEND_WMS( InitGetFld, ElementC, OpSideEffect|OpOpndHasImplicitCall|OpFastFldInstr|OpPostOpDbgBailOut) // Get in Object Literal Syntax {get prop(){}}; +MACRO_EXTEND_WMS( InitSetFld, ElementC, OpSideEffect|OpOpndHasImplicitCall|OpPostOpDbgBailOut) // Set in Object Literal Syntax {set prop(args){}}; +MACRO_EXTEND_WMS( InitGetFld, ElementC, OpSideEffect|OpOpndHasImplicitCall|OpPostOpDbgBailOut) // Get in Object Literal Syntax {get prop(){}}; MACRO_EXTEND_WMS( InitSetElemI, ElementI, OpSideEffect|OpOpndHasImplicitCall|OpPostOpDbgBailOut) // Set in Object Literal Syntax {set [expr](args){}}; MACRO_EXTEND_WMS( InitGetElemI, ElementI, OpSideEffect|OpOpndHasImplicitCall|OpPostOpDbgBailOut) // Get in Object Literal Syntax {get [expr](args){}}; MACRO_EXTEND_WMS( InitComputedProperty, ElementI, OpSideEffect|OpOpndHasImplicitCall|OpPostOpDbgBailOut) // Data property in Object Literal Syntax { [expr] : expr}; @@ -526,12 +545,16 @@ MACRO_WMS( LdUndef, Reg1, OpByteCodeOnly|OpCan MACRO_WMS( LdNaN, Reg1, OpByteCodeOnly|OpCanCSE) // Load 'NaN' MACRO_WMS( LdInfinity, Reg1, OpByteCodeOnly|OpCanCSE) // Load 'Infinity' MACRO_WMS( LdTrue, Reg1, OpByteCodeOnly|OpCanCSE) // Load 'true' boolean primitive +MACRO_WMS( LdTrue_ReuseLoc, Reg1, OpByteCodeOnly|OpCanCSE) // Load 'true' boolean primitive MACRO_WMS( LdFalse, Reg1, OpByteCodeOnly|OpCanCSE) // Load 'false' boolean primitive +MACRO_WMS( LdFalse_ReuseLoc, Reg1, OpByteCodeOnly|OpCanCSE) // Load 'false' boolean primitive MACRO_EXTEND_WMS( LdChakraLib, Reg1, OpByteCodeOnly|OpCanCSE) // Load '__chakraLibrary' +MACRO_EXTEND_WMS( LdImportMeta, Reg1Unsigned1, OpHasImplicitCall) // Load 'import.meta' object MACRO_BACKEND_ONLY( LdEnv, Reg1, None) // Load the optional FixedSizeArray environment for closures MACRO_BACKEND_ONLY( LdAsmJsEnv, Reg1, None) // Load the asm.js memory MACRO_WMS( LdArgCnt, Reg1, None) // Load the argument count from the current function +MACRO_WMS( LdBaseFncProto, Reg1, None) MACRO_BACKEND_ONLY( InitLoopBodyCount, Reg1, None) // fake instruction for loop body counter init MACRO_BACKEND_ONLY( IncrLoopBodyCount, Reg2, None) // fake instruction for loop body counter increment @@ -543,9 +566,7 @@ MACRO_WMS( LdHeapArgsCached, Reg1, OpSideEffect) // L MACRO_EXTEND_WMS( LdLetHeapArgsCached,Reg1, OpSideEffect) // Load the heap-based "arguments" object in a cached scope (formals are let-like instead of var-like) MACRO_EXTEND_WMS( LdStackArgPtr, Reg1, OpSideEffect) // Load the address of the base of the input parameter area MACRO_WMS_PROFILED_OP( LdThis, Reg2Int1, OpOpndHasImplicitCall|OpTempNumberTransfer) // Load this object (NOTE: TryLoadRoot exit scripts on host dispatch, but otherwise, no side effect) -MACRO_WMS_PROFILED_OP( StrictLdThis, Reg2, OpOpndHasImplicitCall|OpTempNumberTransfer) // Load this object in strict mode MACRO_BACKEND_ONLY( CheckThis, Reg1, OpCanCSE|OpBailOutRec) -MACRO_BACKEND_ONLY( StrictCheckThis, Reg1, OpCanCSE|OpBailOutRec) MACRO_BACKEND_ONLY( LdHandlerScope, Reg1, OpHasImplicitCall) // Load a scope stack for an event handler (both "this" and parent scopes) MACRO_BACKEND_ONLY( LdFrameDisplay, Reg3, None) // Set up a frame display for this function and its parent frames #if DBG @@ -588,7 +609,10 @@ MACRO_WMS_PROFILED( NewScArray, Reg1Unsigned1, OpSideEffect|OpTempO MACRO_WMS( NewScArrayWithMissingValues, Reg1Unsigned1, OpSideEffect|OpTempObjectProducing) // Create new ScriptArray instance MACRO_PROFILED( NewScIntArray, Auxiliary, OpSideEffect|OpTempObjectProducing) // Create new ScriptArray instance MACRO_PROFILED( NewScFltArray, Auxiliary, OpSideEffect|OpTempObjectProducing) // Create new ScriptArray instance -MACRO_EXTEND_WMS( InitClass, Class, OpSideEffect|OpHasImplicitCall|OpPostOpDbgBailOut) +MACRO_EXTEND_WMS( InitBaseClass, Reg2U, OpSideEffect|OpPostOpDbgBailOut) +MACRO_EXTEND_WMS( InitInnerBaseClass, Reg3U, OpSideEffect|OpPostOpDbgBailOut) +MACRO_EXTEND_WMS( InitClass, Reg4U, OpSideEffect|OpPostOpDbgBailOut) +MACRO_EXTEND_WMS( InitInnerClass, Reg5U, OpSideEffect|OpPostOpDbgBailOut) MACRO_WMS( NewScFunc, ElementSlotI1, OpSideEffect) // Create new ScriptFunction instance MACRO_BACKEND_ONLY( NewScFuncData, Reg2, None) @@ -601,13 +625,15 @@ MACRO_WMS( NewScFuncHomeObj, ElementSlot, OpSideEffect) // C MACRO_EXTEND_WMS( NewScGenFuncHomeObj, ElementSlot, OpSideEffect) // Create new JavascriptGeneratorFunction instance that has home object MACRO_EXTEND_WMS( NewInnerScFuncHomeObj, ElementSlotI3, OpSideEffect) // Create new ScriptFunction instance that has home object MACRO_EXTEND_WMS( NewInnerScGenFuncHomeObj, ElementSlotI3, OpSideEffect) // Create new JavascriptGeneratorFunction instance that has home object +MACRO_EXTEND_WMS( NewAsyncFromSyncIterator, Reg2, OpSideEffect) // Create new JavascriptAsyncFromSyncOperator instance +MACRO_EXTEND_WMS( NewAwaitObject, Reg1, OpSideEffect) // Create new internal await object instance MACRO_BACKEND_ONLY( NewScopeObject, Reg1, None) // Create new NewScopeObject MACRO_BACKEND_ONLY( InitCachedScope, Reg2Aux, None) // Retrieve cached scope; create if not cached MACRO_BACKEND_ONLY( InitLetCachedScope, Reg2Aux, OpSideEffect) // Retrieve cached scope; create if not cached (formals are let-like instead of var-like) MACRO( InitCachedFuncs, AuxNoReg, OpSideEffect) MACRO_WMS( GetCachedFunc, Reg1Unsigned1, None) MACRO( CommitScope, Empty, OpSideEffect) // Mark the cached scope object as committed on exit from the function -MACRO_WMS( InvalCachedScope, Unsigned1, OpSideEffect) +MACRO_EXTEND_WMS( InvalCachedScope, Unsigned1, OpSideEffect) MACRO_WMS( NewPseudoScope, Unsigned1, None) // Create new scope that can't take normal var inits MACRO_WMS( NewBlockScope, Unsigned1, None) // Create new scope that takes only block-scoped inits MACRO_WMS( CloneBlockScope, Unsigned1, OpSideEffect) // Clone existing block scope in place for for-loop iterations @@ -664,7 +690,7 @@ MACRO_WMS( ProfiledReturnTypeCallIExtended, ProfiledCallIExtended, MACRO_WMS( ProfiledReturnTypeCallIExtendedFlags, ProfiledCallIExtendedFlags, OpByteCodeOnly|OpSideEffect|OpUseAllFields|OpCallInstr) MACRO_EXTEND_WMS( EmitTmpRegCount, Unsigned1, OpByteCodeOnly) -MACRO_WMS( Unused, Reg1, None) +MACRO_BACKEND_ONLY( Unused, Reg1, None) // String operations MACRO_WMS( Concat3, Reg4, OpByteCodeOnly|OpOpndHasImplicitCall|OpTempNumberSources|OpTempObjectSources|OpCanCSE|OpPostOpDbgBailOut) @@ -766,19 +792,18 @@ MACRO_BACKEND_ONLY( InlineArrayPop, Empty, OpSideEffect|OpInli MACRO_BACKEND_ONLY( InlineArrayPush, Empty, OpSideEffect|OpInlinableBuiltIn|OpHasImplicitCall) MACRO_BACKEND_ONLY( InlineFunctionApply, Empty, OpSideEffect|OpInlinableBuiltIn) MACRO_BACKEND_ONLY( InlineFunctionCall, Empty, OpSideEffect|OpInlinableBuiltIn) +MACRO_BACKEND_ONLY( InlineCallInstanceFunction, Empty, OpSideEffect|OpInlinableBuiltIn) MACRO_BACKEND_ONLY( InlineRegExpExec, Empty, OpSideEffect|OpInlinableBuiltIn) MACRO_BACKEND_ONLY( CallIFixed, Empty, OpSideEffect|OpUseAllFields|OpCallInstr|OpInlineCallInstr) MACRO_BACKEND_ONLY( CheckFixedFld, Empty, OpFastFldInstr|OpTempObjectSources|OpCanCSE) +MACRO_BACKEND_ONLY( CheckIsFuncObj, Empty, OpCanCSE | OpBailOutRec) +MACRO_BACKEND_ONLY( CheckFuncInfo, Empty, OpCanCSE | OpBailOutRec) MACRO_BACKEND_ONLY( CheckPropertyGuardAndLoadType, Empty, OpFastFldInstr|OpTempObjectSources|OpDoNotTransfer) MACRO_BACKEND_ONLY( CheckObjType, Empty, OpFastFldInstr|OpTempObjectSources|OpCanCSE) MACRO_BACKEND_ONLY( AdjustObjType, Empty, OpSideEffect) +MACRO_BACKEND_ONLY( AdjustObjTypeReloadAuxSlotPtr, Empty, OpSideEffect) - // Edge inline built-ins -#ifdef ENABLE_DOM_FAST_PATH -MACRO_BACKEND_ONLY( DOMFastPathGetter, Empty, OpCanCSE) // unlike other builtins, we don't know the return type -MACRO_BACKEND_ONLY( DOMFastPathSetter, Empty, OpSideEffect) -#endif MACRO_BACKEND_ONLY( ExtendArg_A, Empty, OpCanCSE) // extend a list of arguments to be passed to functions. #ifdef _M_X64 @@ -795,7 +820,7 @@ MACRO_BACKEND_ONLY( LdNullDisplay, Empty, None) // Load MACRO_BACKEND_ONLY( LdStrictNullDisplay,Empty, None) // Load the strict null frame display #endif -MACRO( SpreadArrayLiteral, Reg2Aux, OpSideEffect|OpHasImplicitCall) +MACRO_EXTEND( SpreadArrayLiteral, Reg2Aux, OpSideEffect|OpHasImplicitCall) MACRO_BACKEND_ONLY( LdSpreadIndices, Empty, None) MACRO_EXTEND_WMS( ClearAttributes, ElementU, None) @@ -812,7 +837,6 @@ MACRO_EXTEND_WMS( ImportCall, Reg2, OpSideEffect|OpHasIm MACRO_BACKEND_ONLY( BrFncCachedScopeEq, Reg2, None) MACRO_BACKEND_ONLY( BrFncCachedScopeNeq,Reg2, None) -MACRO_BACKEND_ONLY( GeneratorResumeJumpTable, Reg1, OpSideEffect) MACRO_BACKEND_ONLY( RestoreOutParam, Empty, None) MACRO_BACKEND_ONLY( SlotArrayCheck, Empty, OpCanCSE) @@ -828,6 +852,27 @@ MACRO_BACKEND_ONLY( TrapIfMinIntOverNegOne, Reg3, OpSideEffect) MACRO_BACKEND_ONLY( TrapIfZero, Reg3, OpSideEffect) MACRO_BACKEND_ONLY( TrapIfUnalignedAccess, Reg3, OpSideEffect) +MACRO_EXTEND_WMS( SpreadObjectLiteral,Reg2, OpSideEffect|OpHasImplicitCall) +MACRO_EXTEND_WMS( StPropIdArrFromVar, ElementSlot, OpSideEffect|OpHasImplicitCall) +MACRO_EXTEND_WMS( Restify, Reg4, OpSideEffect|OpHasImplicitCall) +MACRO_EXTEND_WMS( NewPropIdArrForCompProps, Reg1Unsigned1, OpSideEffect) + +MACRO_BACKEND_ONLY(BigIntLiteral, Empty, None) // Load BigInt literal +MACRO_EXTEND_WMS(Conv_Numeric, Reg2, OpSideEffect | OpTempNumberProducing | OpTempNumberTransfer | OpTempObjectSources | OpOpndHasImplicitCall | OpProducesNumber) // Convert to Numeric. [[ToNumeric()]] +MACRO_EXTEND_WMS(Incr_Num_A, Reg2, OpTempNumberProducing | OpOpndHasImplicitCall | OpDoNotTransfer | OpTempNumberSources | OpTempObjectSources | OpCanCSE | OpPostOpDbgBailOut | OpProducesNumber) // Increment Numeric +MACRO_EXTEND_WMS(Decr_Num_A, Reg2, OpTempNumberProducing | OpOpndHasImplicitCall | OpDoNotTransfer | OpTempNumberSources | OpTempObjectSources | OpCanCSE | OpPostOpDbgBailOut | OpProducesNumber) // Increment Numeric +MACRO_BACKEND_ONLY(LazyBailOutThunkLabel, Empty, None) + +// Jitting Generator +MACRO_BACKEND_ONLY(GeneratorResumeJumpTable, Reg1, OpSideEffect) // OpSideEffect because we don't want this to be deadstored +MACRO_BACKEND_ONLY(GeneratorCreateInterpreterStackFrame, Reg1, OpSideEffect) // OpSideEffect because we don't want this to be deadstored +MACRO_BACKEND_ONLY(GeneratorResumeYield, Reg1, OpSideEffect) // OpSideEffect because we don't want this to be deadstored +MACRO_BACKEND_ONLY(GeneratorOutputBailInTrace, Empty, OpSideEffect) // OpSideEffect because we don't want this to be deadstored +MACRO_BACKEND_ONLY(GeneratorOutputBailInTraceLabel, Empty, None) +MACRO_BACKEND_ONLY(GeneratorBailInLabel, Empty, None) +MACRO_BACKEND_ONLY(GeneratorEpilogueFrameNullOutLabel, Empty, None) +MACRO_BACKEND_ONLY(GeneratorEpilogueNoFrameNullOutLabel, Empty, None) + // All SIMD ops are backend only for non-asmjs. #define MACRO_SIMD(opcode, asmjsLayout, opCodeAttrAsmJs, OpCodeAttr, ...) MACRO_BACKEND_ONLY(opcode, Empty, OpCodeAttr) #define MACRO_SIMD_WMS(opcode, asmjsLayout, opCodeAttrAsmJs, OpCodeAttr, ...) MACRO_BACKEND_ONLY(opcode, Empty, OpCodeAttr) @@ -857,4 +902,4 @@ MACRO_BACKEND_ONLY( TrapIfUnalignedAccess, Reg3, OpSideEffect) #undef MACRO_WMS_WITH_DBG_ATTR #undef MACRO_EXTEND_WITH_DBG_ATTR #undef MACRO_EXTEND_WMS_WITH_DBG_ATTR -#undef MACRO_BACKEND_ONLY_WITH_DBG_ATTR \ No newline at end of file +#undef MACRO_BACKEND_ONLY_WITH_DBG_ATTR diff --git a/lib/Runtime/ByteCode/OpLayouts.h b/lib/Runtime/ByteCode/OpLayouts.h index 271007af722..c08e3450f58 100644 --- a/lib/Runtime/ByteCode/OpLayouts.h +++ b/lib/Runtime/ByteCode/OpLayouts.h @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #pragma once @@ -149,6 +150,14 @@ namespace Js { typename SizePolicy::CacheIdType inlineCacheIndex; }; + template + struct OpLayoutT_Reg2U + { + typename SizePolicy::RegSlotType R0; + typename SizePolicy::RegSlotType R1; + typename SizePolicy::UnsignedType SlotIndex; + }; + template struct OpLayoutT_Reg2B1 { @@ -166,6 +175,15 @@ namespace Js { byte B3; }; + template + struct OpLayoutT_Reg3U + { + typename SizePolicy::RegSlotType R0; + typename SizePolicy::RegSlotType R1; + typename SizePolicy::RegSlotType R2; + typename SizePolicy::UnsignedType SlotIndex; + }; + template struct OpLayoutT_Reg4 // R0 <- R1 op R2 op R3 { @@ -175,6 +193,16 @@ namespace Js { typename SizePolicy::RegSlotType R3; }; + template + struct OpLayoutT_Reg4U + { + typename SizePolicy::RegSlotType R0; + typename SizePolicy::RegSlotType R1; + typename SizePolicy::RegSlotType R2; + typename SizePolicy::RegSlotType R3; + typename SizePolicy::UnsignedType SlotIndex; + }; + template struct OpLayoutT_Reg5 // R0 <- R1 op R2 op R3 op R4 { @@ -185,6 +213,17 @@ namespace Js { typename SizePolicy::RegSlotType R4; }; + template + struct OpLayoutT_Reg5U + { + typename SizePolicy::RegSlotType R0; + typename SizePolicy::RegSlotType R1; + typename SizePolicy::RegSlotType R2; + typename SizePolicy::RegSlotType R3; + typename SizePolicy::RegSlotType R4; + typename SizePolicy::UnsignedType SlotIndex; + }; + template struct OpLayoutT_ArgNoSrc // OutArg { @@ -321,13 +360,6 @@ namespace Js { CallFlags callFlags; }; - template - struct OpLayoutT_Class // class _ extends Extends { Constructor(...) { ... } } - { - typename SizePolicy::RegSlotType Constructor; - typename SizePolicy::RegSlotSType Extends; - }; - template struct OpLayoutT_ElementU // Instance.PropertyIndex = . e.g. undefined { diff --git a/lib/Runtime/ByteCode/ScopeInfo.cpp b/lib/Runtime/ByteCode/ScopeInfo.cpp index b0f924c9f0f..b7040f34311 100644 --- a/lib/Runtime/ByteCode/ScopeInfo.cpp +++ b/lib/Runtime/ByteCode/ScopeInfo.cpp @@ -36,6 +36,7 @@ namespace Js this->SetIsFuncExpr(scopeSlot, sym->GetIsFuncExpr()); this->SetIsModuleExportStorage(scopeSlot, sym->GetIsModuleExportStorage()); this->SetIsModuleImport(scopeSlot, sym->GetIsModuleImport()); + this->SetNeedDeclaration(scopeSlot, sym->GetNeedDeclaration()); } TRACE_BYTECODE(_u("%12s %d\n"), sym->GetName().GetBuffer(), sym->GetScopeSlot()); @@ -76,6 +77,7 @@ namespace Js { scopeInfo->isGeneratorFunctionBody = scope->GetFunc()->byteCodeFunction->GetFunctionInfo()->IsGenerator(); scopeInfo->isAsyncFunctionBody = scope->GetFunc()->byteCodeFunction->GetFunctionInfo()->IsAsync(); + scopeInfo->isClassConstructor = scope->GetFunc()->byteCodeFunction->GetFunctionInfo()->IsClassConstructor(); } TRACE_BYTECODE(_u("\nSave ScopeInfo: %s #symbols: %d %s\n"), @@ -282,6 +284,7 @@ namespace Js sym->SetIsFuncExpr(GetIsFuncExpr(i)); sym->SetIsModuleExportStorage(GetIsModuleExportStorage(i)); sym->SetIsModuleImport(GetIsModuleImport(i)); + sym->SetNeedDeclaration(GetNeedDeclaration(i)); if (GetHasFuncAssignment(i)) { sym->RestoreHasFuncAssignment(); diff --git a/lib/Runtime/ByteCode/ScopeInfo.h b/lib/Runtime/ByteCode/ScopeInfo.h index cb151751320..450ed43a27c 100644 --- a/lib/Runtime/ByteCode/ScopeInfo.h +++ b/lib/Runtime/ByteCode/ScopeInfo.h @@ -40,6 +40,7 @@ namespace Js { Field(bool) isFuncExpr : 1; Field(bool) isModuleExportStorage : 1; Field(bool) isModuleImport : 1; + Field(bool) needDeclaration : 1; }; private: @@ -54,6 +55,7 @@ namespace Js { Field(BYTE) hasLocalInClosure : 1; Field(BYTE) isGeneratorFunctionBody : 1; Field(BYTE) isAsyncFunctionBody : 1; + Field(BYTE) isClassConstructor : 1; FieldNoBarrier(Scope *) scope; Field(::ScopeType) scopeType; @@ -63,7 +65,7 @@ namespace Js { private: ScopeInfo(FunctionInfo * function, int symbolCount) - : functionInfo(function), /*funcExprScopeInfo(nullptr), paramScopeInfo(nullptr),*/ symbolCount(symbolCount), parent(nullptr), scope(nullptr), areNamesCached(false), hasLocalInClosure(false), isGeneratorFunctionBody(false), isAsyncFunctionBody(false)/*, parentOnly(false)*/ + : functionInfo(function), /*funcExprScopeInfo(nullptr), paramScopeInfo(nullptr),*/ symbolCount(symbolCount), parent(nullptr), scope(nullptr), areNamesCached(false), hasLocalInClosure(false), isGeneratorFunctionBody(false), isAsyncFunctionBody(false), isClassConstructor(false)/*, parentOnly(false)*/ { } @@ -123,6 +125,13 @@ namespace Js { symbols[i].isModuleImport = is; } + void SetNeedDeclaration(int i, bool is) + { + Assert(!areNamesCached); + Assert(i >= 0 && i < symbolCount); + symbols[i].needDeclaration = is; + } + void SetPropertyName(int i, PropertyRecord const* name) { Assert(!areNamesCached); @@ -161,6 +170,12 @@ namespace Js { return symbols[i].isModuleImport; } + bool GetNeedDeclaration(int i) + { + Assert(i >= 0 && i < symbolCount); + return symbols[i].needDeclaration; + } + bool GetIsBlockVariable(int i) { Assert(i >= 0 && i < symbolCount); @@ -278,6 +293,11 @@ namespace Js { return this->isAsyncFunctionBody; } + bool IsClassConstructor() const + { + return this->isClassConstructor; + } + static void SaveEnclosingScopeInfo(ByteCodeGenerator* byteCodeGenerator, /*FuncInfo* parentFunc,*/ FuncInfo* func); void EnsurePidTracking(ScriptContext* scriptContext); diff --git a/lib/Runtime/ByteCode/Symbol.h b/lib/Runtime/ByteCode/Symbol.h index 698a8bb0cd4..f029dea7e14 100644 --- a/lib/Runtime/ByteCode/Symbol.h +++ b/lib/Runtime/ByteCode/Symbol.h @@ -49,6 +49,7 @@ class Symbol BYTE isNewTarget : 1; BYTE isSuper : 1; BYTE isSuperConstructor : 1; + BYTE isImportMeta : 1; BYTE needsScopeObject : 1; // These are get and set a lot, don't put it in bit fields, we are exceeding the number of bits anyway @@ -59,7 +60,7 @@ class Symbol AssignmentState assignmentState; public: - Symbol(SymbolName const& name, ParseNode *decl, SymbolType symbolType) : + Symbol(SymbolName const& name, ParseNode* decl, SymbolType symbolType) : name(name), pid(nullptr), decl(decl), @@ -92,6 +93,7 @@ class Symbol isNewTarget(false), isSuper(false), isSuperConstructor(false), + isImportMeta(false), needsScopeObject(false), hasFuncAssignment(false), // will get reset by SetSymbolType hasMaybeEscapedUse(false), // will get reset by SetSymbolType @@ -397,6 +399,16 @@ class Symbol isNewTarget = is; } + bool IsImportMeta() const + { + return isImportMeta; + } + + void SetIsImportMeta(bool is = true) + { + isImportMeta = is; + } + bool IsSuper() const { return isSuper; diff --git a/lib/Runtime/ByteCode/WasmByteCodeWriter.cpp b/lib/Runtime/ByteCode/WasmByteCodeWriter.cpp index 43134a20c12..09fbc963d9a 100644 --- a/lib/Runtime/ByteCode/WasmByteCodeWriter.cpp +++ b/lib/Runtime/ByteCode/WasmByteCodeWriter.cpp @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft Corporation and contributors. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #include "RuntimeByteCodePch.h" @@ -45,7 +46,7 @@ uint32 WasmByteCodeWriter::WasmLoopStart(ByteCodeLabel loopEntrance, __in_ecount uint loopId = m_functionWrite->IncrLoopCount(); Assert((uint)m_loopHeaders->Count() == loopId); - m_loopHeaders->Add(LoopHeaderData(m_byteCodeData.GetCurrentOffset(), 0, m_loopNest > 0)); + m_loopHeaders->Add(LoopHeaderData(m_byteCodeData.GetCurrentOffset(), 0, m_loopNest > 0, false)); m_loopNest++; this->MarkAsmJsLabel(loopEntrance); MULTISIZE_LAYOUT_WRITE(WasmLoopStart, Js::OpCodeAsmJs::WasmLoopBodyStart, loopId, curRegs); diff --git a/lib/Runtime/Debug/BreakpointProbe.cpp b/lib/Runtime/Debug/BreakpointProbe.cpp index e9a63f13c9f..ab75325f439 100644 --- a/lib/Runtime/Debug/BreakpointProbe.cpp +++ b/lib/Runtime/Debug/BreakpointProbe.cpp @@ -86,4 +86,4 @@ namespace Js statement->statement.begin = this->characterOffset; } } -#endif \ No newline at end of file +#endif diff --git a/lib/Runtime/Debug/DebugDocument.cpp b/lib/Runtime/Debug/DebugDocument.cpp index 5e9593d1a5e..c4b0b9af562 100644 --- a/lib/Runtime/Debug/DebugDocument.cpp +++ b/lib/Runtime/Debug/DebugDocument.cpp @@ -352,4 +352,4 @@ namespace Js return TRUE; } } -#endif \ No newline at end of file +#endif diff --git a/lib/Runtime/Debug/DebugManager.cpp b/lib/Runtime/Debug/DebugManager.cpp index eb1b48e9195..5a2a297cb98 100644 --- a/lib/Runtime/Debug/DebugManager.cpp +++ b/lib/Runtime/Debug/DebugManager.cpp @@ -233,4 +233,4 @@ AutoSetDispatchHaltFlag::~AutoSetDispatchHaltFlag() Assert(m_scriptContext->GetDebugContext()->GetProbeContainer()->IsPrimaryBrokenToDebuggerContext()); m_scriptContext->GetDebugContext()->GetProbeContainer()->SetIsPrimaryBrokenToDebuggerContext(false); } -#endif \ No newline at end of file +#endif diff --git a/lib/Runtime/Debug/DebuggingFlags.cpp b/lib/Runtime/Debug/DebuggingFlags.cpp index 13ba6c87a68..236aebf524b 100644 --- a/lib/Runtime/Debug/DebuggingFlags.cpp +++ b/lib/Runtime/Debug/DebuggingFlags.cpp @@ -76,4 +76,4 @@ void DebuggingFlags::SetIsBuiltInWrapperPresent(bool value /* = true */) { m_isBuiltInWrapperPresent = value; } -#endif \ No newline at end of file +#endif diff --git a/lib/Runtime/Debug/DiagHelperMethodWrapper.cpp b/lib/Runtime/Debug/DiagHelperMethodWrapper.cpp index cfb75493a43..85826e75c6a 100644 --- a/lib/Runtime/Debug/DiagHelperMethodWrapper.cpp +++ b/lib/Runtime/Debug/DiagHelperMethodWrapper.cpp @@ -270,4 +270,4 @@ namespace Js template void HandleHelperOrLibraryMethodWrapperException(ScriptContext * scriptContext, JavascriptExceptionObject * exceptionObject); template void HandleHelperOrLibraryMethodWrapperException (ScriptContext * scriptContext, JavascriptExceptionObject * exceptionObject); } // namespace Js -#endif \ No newline at end of file +#endif diff --git a/lib/Runtime/Debug/DiagObjectModel.cpp b/lib/Runtime/Debug/DiagObjectModel.cpp index 249f129284f..784eb2650e0 100644 --- a/lib/Runtime/Debug/DiagObjectModel.cpp +++ b/lib/Runtime/Debug/DiagObjectModel.cpp @@ -71,15 +71,15 @@ namespace Js IDiagObjectModelDisplay* pOMDisplay = nullptr; ReferencedArenaAdapter* pRefArena = scriptContext->GetThreadContext()->GetDebugManager()->GetDiagnosticArena(); - if (Js::TypedArrayBase::Is(obj)) + if (Js::VarIs(obj)) { pOMDisplay = Anew(pRefArena->Arena(), RecyclableTypedArrayDisplay, this); } - else if (Js::ES5Array::Is(obj)) + else if (Js::VarIs(obj)) { pOMDisplay = Anew(pRefArena->Arena(), RecyclableES5ArrayDisplay, this); } - else if (Js::JavascriptArray::Is(obj)) + else if (Js::JavascriptArray::IsNonES5Array(obj)) { // DisableJIT-TODO: Review- is this correct? #if ENABLE_COPYONACCESS_ARRAY @@ -426,7 +426,7 @@ namespace Js // This is fake [Methods] object. pResolvedObject->name = groupType == UIGroupType_Scope ? _u("[Scope]") : _u("[Globals]"); - pResolvedObject->obj = Js::RecyclableObject::FromVar(instance); + pResolvedObject->obj = Js::VarTo(instance); pResolvedObject->typeId = TypeIds_Function; pResolvedObject->address = nullptr; // Scope object should not be editable @@ -780,7 +780,7 @@ namespace Js if (displayInfo->IsInDeadZone()) { // The uninitialized string is already set in the var for the dead zone display. - Assert(JavascriptString::Is(displayInfo->aVar)); + Assert(VarIs(displayInfo->aVar)); returnedVar = displayInfo->aVar; } else @@ -820,9 +820,9 @@ namespace Js ScriptContext * scriptContext = pFrame->GetScriptContext(); ArenaAllocator *arena = GetArenaFromContext(scriptContext); - Assert(Js::RecyclableObject::Is(instance)); + Assert(Js::VarIs(instance)); - Js::RecyclableObject* object = Js::RecyclableObject::FromVar(instance); + Js::RecyclableObject* object = Js::VarTo(instance); Assert(JavascriptOperators::IsObject(object)); int count = object->GetPropertyCount(); @@ -861,7 +861,7 @@ namespace Js itemObj = scriptContext->GetLibrary()->GetUndefined(); } - AssertMsg(!RootObjectBase::Is(object) || !isConst, "root object shouldn't produce const properties through IsPropertyValid"); + AssertMsg(!VarIs(object) || !isConst, "root object shouldn't produce const properties through IsPropertyValid"); DebuggerPropertyDisplayInfo *info = AllocateNewPropertyDisplayInfo( propertyId, @@ -892,8 +892,8 @@ namespace Js ScriptContext * scriptContext = pFrame->GetScriptContext(); ArenaAllocator *arena = GetArenaFromContext(scriptContext); - Assert(Js::RootObjectBase::Is(instance)); - Js::RootObjectBase* object = Js::RootObjectBase::FromVar(instance); + Assert(Js::VarIs(instance)); + Js::RootObjectBase* object = Js::VarTo(instance); int count = object->GetPropertyCount(); pMembersList = JsUtil::List::New(arena, count); @@ -1634,7 +1634,7 @@ namespace Js { // If we're in a dead zone, the value will be the // [Uninitialized block variable] string. - Assert(JavascriptString::Is(value)); + Assert(VarIs(value)); } #endif // DBG @@ -1647,12 +1647,12 @@ namespace Js BOOL LocalObjectAddressForSlot::IsInDeadZone() const { Var value = slotArray.Get(slotIndex); - if (!RecyclableObject::Is(value)) + if (!VarIs(value)) { return FALSE; } - RecyclableObject* obj = RecyclableObject::FromVar(value); + RecyclableObject* obj = VarTo(value); ScriptContext* scriptContext = obj->GetScriptContext(); return scriptContext->IsUndeclBlockVar(obj) ? TRUE : FALSE; } @@ -1697,7 +1697,7 @@ namespace Js { // If we're in a dead zone, the value will be the // [Uninitialized block variable] string. - Assert(JavascriptString::Is(value)); + Assert(VarIs(value)); } #endif // DBG @@ -1754,9 +1754,9 @@ namespace Js if (debuggerScope->scopeType == Js::DiagCatchScopeInObject) { Var obj = pFrame->GetInnerScopeFromRegSlot(debuggerScope->GetLocation()); - Assert(RecyclableObject::Is(obj)); + Assert(VarIs(obj)); - outValue = RecyclableObjectWalker::GetObject(RecyclableObject::FromVar(obj), RecyclableObject::FromVar(obj), scopeProperty.propId, scriptContext); + outValue = RecyclableObjectWalker::GetObject(VarTo(obj), VarTo(obj), scopeProperty.propId, scriptContext); bool isInDeadZone = scriptContext->IsUndeclBlockVar(outValue); if (isInDeadZone) { @@ -1814,7 +1814,7 @@ namespace Js value(_value), isInDeadZone(_isInDeadZone) { - parentObj = ((RecyclableObject*)parentObj)->GetThisObjectOrUnWrap(); + parentObj = Js::VarTo(parentObj)->GetUnwrappedObject(); } BOOL RecyclableObjectAddress::IsInDeadZone() const @@ -1824,9 +1824,9 @@ namespace Js BOOL RecyclableObjectAddress::Set(Var updateObject) { - if (Js::RecyclableObject::Is(parentObj)) + if (Js::VarIs(parentObj)) { - Js::RecyclableObject* obj = Js::RecyclableObject::FromVar(parentObj); + Js::RecyclableObject* obj = Js::VarTo(parentObj); ScriptContext* requestContext = obj->GetScriptContext(); //TODO: real requestContext return Js::JavascriptOperators::SetProperty(obj, obj, propId, updateObject, requestContext); @@ -1836,9 +1836,9 @@ namespace Js BOOL RecyclableObjectAddress::IsWritable() { - if (Js::RecyclableObject::Is(parentObj)) + if (Js::VarIs(parentObj)) { - Js::RecyclableObject* obj = Js::RecyclableObject::FromVar(parentObj); + Js::RecyclableObject* obj = Js::VarTo(parentObj); return obj->IsWritable(propId); } @@ -1853,9 +1853,9 @@ namespace Js return value; } - if (Js::RecyclableObject::Is(parentObj)) + if (Js::VarIs(parentObj)) { - Js::RecyclableObject* obj = Js::RecyclableObject::FromVar(parentObj); + Js::RecyclableObject* obj = Js::VarTo(parentObj); ScriptContext* requestContext = obj->GetScriptContext(); Var objValue = nullptr; @@ -1938,7 +1938,7 @@ namespace Js } else { - Js::RecyclableObject* obj = Js::RecyclableObject::FromVar(instance); + Js::RecyclableObject* obj = Js::VarTo(instance); StringBuilder* builder = scriptContext->GetThreadContext()->GetDebugManager()->pCurrentInterpreterLocation->stringBuilder; builder->Reset(); @@ -1951,9 +1951,9 @@ namespace Js if (typeId == TypeIds_Object && GetPropertyWithScriptEnter(obj, obj, PropertyIds::constructor, &value, scriptContext)) { builder->AppendCppLiteral(_u("Object")); - if (Js::JavascriptFunction::Is(value)) + if (Js::VarIs(value)) { - Js::JavascriptFunction *pfunction = Js::JavascriptFunction::FromVar(value); + Js::JavascriptFunction *pfunction = Js::VarTo(value); // For an odd chance that the constructor wasn't called to create the object. Js::ParseableFunctionInfo *pFuncBody = pfunction->GetFunctionProxy() != nullptr ? pfunction->GetFunctionProxy()->EnsureDeserialized() : nullptr; if (pFuncBody) @@ -1997,7 +1997,7 @@ namespace Js if(Js::TaggedInt::Is(instance) || Js::JavascriptNumber::Is(instance) - || Js::JavascriptNumberObject::Is(instance) + || Js::VarIs(instance) || Js::JavascriptOperators::GetTypeId(instance) == TypeIds_Int64Number || Js::JavascriptOperators::GetTypeId(instance) == TypeIds_UInt64Number) { @@ -2012,15 +2012,15 @@ namespace Js } else if (Js::JavascriptOperators::GetTypeId(instance) == TypeIds_Int64Number) { - value = (double)JavascriptInt64Number::FromVar(instance)->GetValue(); + value = (double)VarTo(instance)->GetValue(); } else if (Js::JavascriptOperators::GetTypeId(instance) == TypeIds_UInt64Number) { - value = (double)JavascriptUInt64Number::FromVar(instance)->GetValue(); + value = (double)VarTo(instance)->GetValue(); } else { - Js::JavascriptNumberObject* numobj = Js::JavascriptNumberObject::FromVar(instance); + Js::JavascriptNumberObject* numobj = Js::VarTo(instance); value = numobj->GetValue(); } @@ -2061,7 +2061,7 @@ namespace Js } else { - Js::RecyclableObject* obj = Js::RecyclableObject::FromVar(instance); + Js::RecyclableObject* obj = Js::VarTo(instance); StringBuilder* builder = scriptContext->GetThreadContext()->GetDebugManager()->pCurrentInterpreterLocation->stringBuilder; builder->Reset(); @@ -2081,9 +2081,9 @@ namespace Js BOOL RecyclableObjectDisplay::HasChildren() { - if (Js::RecyclableObject::Is(instance)) + if (Js::VarIs(instance)) { - Js::RecyclableObject* object = Js::RecyclableObject::FromVar(instance); + Js::RecyclableObject* object = Js::VarTo(instance); if (JavascriptOperators::IsObject(object)) { @@ -2139,7 +2139,7 @@ namespace Js { // The For in enumerator can throw an exception and we will use the error object as a child in that case. Var error = err.GetAndClear()->GetThrownObject(scriptContext); - if (error != nullptr && Js::JavascriptError::Is(error)) + if (error != nullptr && Js::VarIs(error)) { return TRUE; } @@ -2164,7 +2164,7 @@ namespace Js { DBGPROP_ATTRIB_FLAGS flag = defaultAttributes; - if (Js::RecyclableObject::Is(instance)) + if (Js::VarIs(instance)) { if (instance == scriptContext->GetLibrary()->GetDebuggerDeadZoneBlockVariableString()) { @@ -2289,7 +2289,7 @@ namespace Js return FALSE; } - int nonArrayElementCount = Js::RecyclableObject::Is(instance) ? pMembersList->Count() : 0; + int nonArrayElementCount = Js::VarIs(instance) ? pMembersList->Count() : 0; // First the virtual groups if (index < fakeObjCount) @@ -2302,7 +2302,7 @@ namespace Js if (index < nonArrayElementCount) { - Assert(Js::RecyclableObject::Is(instance)); + Assert(Js::VarIs(instance)); pResolvedObject->propId = pMembersList->Item(index)->propId; @@ -2407,11 +2407,11 @@ namespace Js RecyclableMethodsGroupWalker *pMethodsGroupWalker = nullptr; - if (Js::RecyclableObject::Is(instance)) + if (Js::VarIs(instance)) { - Js::RecyclableObject* object = Js::RecyclableObject::FromVar(instance); + Js::RecyclableObject* object = Js::VarTo(instance); // If we are walking a prototype, we'll use its instance for property names enumeration, but originalInstance to get values - Js::RecyclableObject* originalObject = (originalInstance != nullptr) ? Js::RecyclableObject::FromVar(originalInstance) : object; + Js::RecyclableObject* originalObject = (originalInstance != nullptr) ? Js::VarTo(originalInstance) : object; const Js::TypeId typeId = JavascriptOperators::GetTypeId(instance); if (JavascriptOperators::IsObject(object)) @@ -2454,7 +2454,7 @@ namespace Js catch (const JavascriptException& err) { Var error = err.GetAndClear()->GetThrownObject(scriptContext); - if (error != nullptr && Js::JavascriptError::Is(error)) + if (error != nullptr && Js::VarIs(error)) { Js::PropertyId propertyId = scriptContext->GetOrAddPropertyIdTracked(_u("{error}")); InsertItem(propertyId, false /*isConst*/, false /*isUnscoped*/, error, &pMethodsGroupWalker); @@ -2466,7 +2466,7 @@ namespace Js // Provide [Proxy] group object EnsureFakeGroupObjectWalkerList(); - JavascriptProxy* proxy = JavascriptProxy::FromVar(object); + JavascriptProxy* proxy = VarTo(object); RecyclableProxyObjectWalker* proxyWalker = Anew(arena, RecyclableProxyObjectWalker, scriptContext, proxy); fakeGroupObjectWalkerList->Add(proxyWalker); } @@ -2486,7 +2486,7 @@ namespace Js if (JavascriptOperators::GetTypeId(object) == TypeIds_UnscopablesWrapperObject) { wrapperObject = object; - object = object->GetThisObjectOrUnWrap(); + object = Js::UnsafeVarTo(JavascriptOperators::OP_UnwrapWithObj(wrapperObject)); } int count = object->GetPropertyCount(); @@ -2520,14 +2520,14 @@ namespace Js if (propertyId != Js::Constants::NoProperty) { bool isConst = true; - if (propertyId == PropertyIds::length && Js::JavascriptArray::Is(object)) + if (propertyId == PropertyIds::length && Js::JavascriptArray::IsNonES5Array(object)) { // For JavascriptArrays, we allow resetting the length special property. isConst = false; } auto containsPredicate = [&](Js::DebuggerPropertyDisplayInfo* info) { return info->propId == propertyId; }; - if (Js::BoundFunction::Is(object) + if (Js::VarIs(object) && this->pMembersList->Any(containsPredicate)) { // Bound functions can already contain their special properties, @@ -2542,12 +2542,11 @@ namespace Js InsertItem(originalObject, object, propertyId, isConst, isUnscoped, &pMethodsGroupWalker); } } - if (Js::JavascriptFunction::Is(object)) + if (Js::VarIs(object)) { // We need to special-case RegExp constructor here because it has some special properties (above) and some // special enumerable properties which should all show up in the debugger. JavascriptRegExpConstructor* regExp = scriptContext->GetLibrary()->GetRegExpConstructor(); - Js::JavascriptFunction* jsFunction = Js::JavascriptFunction::FromVar(object); if (regExp == object) { @@ -2563,11 +2562,6 @@ namespace Js InsertItem(originalObject, object, propertyId, isConst, isUnscoped, &pMethodsGroupWalker); } } - else if ((jsFunction->IsScriptFunction() && !jsFunction->GetFunctionProxy()->IsJsBuiltInCode()) || jsFunction->IsBoundFunction()) - { - // Adding special property length for the ScriptFunction, like it is done in JavascriptFunction::GetSpecialNonEnumerablePropertyName - InsertItem(originalObject, object, PropertyIds::length, true/*not editable*/, false /*isUnscoped*/, &pMethodsGroupWalker); - } } } @@ -2600,7 +2594,7 @@ namespace Js // Provide [Map] group object. EnsureFakeGroupObjectWalkerList(); - JavascriptMap* map = JavascriptMap::FromVar(object); + JavascriptMap* map = VarTo(object); RecyclableMapObjectWalker *pMapWalker = Anew(arena, RecyclableMapObjectWalker, scriptContext, map); fakeGroupObjectWalkerList->Add(pMapWalker); } @@ -2609,7 +2603,7 @@ namespace Js // Provide [Set] group object. EnsureFakeGroupObjectWalkerList(); - JavascriptSet* set = JavascriptSet::FromVar(object); + JavascriptSet* set = VarTo(object); RecyclableSetObjectWalker *pSetWalker = Anew(arena, RecyclableSetObjectWalker, scriptContext, set); fakeGroupObjectWalkerList->Add(pSetWalker); } @@ -2618,7 +2612,7 @@ namespace Js // Provide [WeakMap] group object. EnsureFakeGroupObjectWalkerList(); - JavascriptWeakMap* weakMap = JavascriptWeakMap::FromVar(object); + JavascriptWeakMap* weakMap = VarTo(object); RecyclableWeakMapObjectWalker *pWeakMapWalker = Anew(arena, RecyclableWeakMapObjectWalker, scriptContext, weakMap); fakeGroupObjectWalkerList->Add(pWeakMapWalker); } @@ -2627,7 +2621,7 @@ namespace Js // Provide [WeakSet] group object. EnsureFakeGroupObjectWalkerList(); - JavascriptWeakSet* weakSet = JavascriptWeakSet::FromVar(object); + JavascriptWeakSet* weakSet = VarTo(object); RecyclableWeakSetObjectWalker *pWeakSetWalker = Anew(arena, RecyclableWeakSetObjectWalker, scriptContext, weakSet); fakeGroupObjectWalkerList->Add(pWeakSetWalker); } @@ -2636,21 +2630,21 @@ namespace Js // Provide [Promise] group object. EnsureFakeGroupObjectWalkerList(); - JavascriptPromise* promise = JavascriptPromise::FromVar(object); + JavascriptPromise* promise = VarTo(object); RecyclablePromiseObjectWalker *pPromiseWalker = Anew(arena, RecyclablePromiseObjectWalker, scriptContext, promise); fakeGroupObjectWalkerList->Add(pPromiseWalker); } else if (Js::DynamicType::Is(typeId)) { - DynamicObject *const dynamicObject = Js::DynamicObject::FromVar(instance); + DynamicObject *const dynamicObject = Js::VarTo(instance); if (dynamicObject->HasNonEmptyObjectArray()) { ArrayObject* objectArray = dynamicObject->GetObjectArray(); - if (Js::ES5Array::Is(objectArray)) + if (Js::VarIs(objectArray)) { innerArrayObjectWalker = Anew(arena, RecyclableES5ArrayWalker, scriptContext, objectArray, originalInstance); } - else if (Js::JavascriptArray::Is(objectArray)) + else if (Js::JavascriptArray::IsNonES5Array(objectArray)) { innerArrayObjectWalker = Anew(arena, RecyclableArrayWalker, scriptContext, objectArray, originalInstance); } @@ -2787,7 +2781,7 @@ namespace Js catch(const JavascriptException& err) { Var error = err.GetAndClear()->GetThrownObject(instance->GetScriptContext()); - if (error != nullptr && Js::JavascriptError::Is(error)) + if (error != nullptr && Js::VarIs(error)) { obj = error; } @@ -2809,9 +2803,9 @@ namespace Js BOOL RecyclableArrayAddress::Set(Var updateObject) { - if (Js::JavascriptArray::Is(parentArray)) + if (Js::JavascriptArray::IsNonES5Array(parentArray)) { - Js::JavascriptArray* jsArray = Js::JavascriptArray::FromVar(parentArray); + Js::JavascriptArray* jsArray = Js::VarTo(parentArray); return jsArray->SetItem(index, updateObject, PropertyOperation_None); } return FALSE; @@ -2841,9 +2835,9 @@ namespace Js BOOL RecyclableArrayDisplay::HasChildren() { - if (Js::JavascriptArray::Is(instance)) + if (Js::JavascriptArray::IsNonES5Array(instance)) { - Js::JavascriptArray* arrayObj = Js::JavascriptArray::FromVar(instance); + Js::JavascriptArray* arrayObj = Js::VarTo(instance); if (HasChildrenInternal(arrayObj)) { return TRUE; @@ -2964,7 +2958,7 @@ namespace Js { AssertMsg(pResolvedObject, "Bad usage of RecyclableArrayWalker::Get"); - if (Js::JavascriptArray::Is(instance) || Js::ES5Array::Is(instance)) + if (Js::JavascriptArray::IsNonES5Array(instance) || Js::VarIs(instance)) { Js::JavascriptArray* arrayObj = GetArrayObject(); @@ -2993,15 +2987,15 @@ namespace Js Js::JavascriptArray* RecyclableArrayWalker::GetArrayObject() { - Assert(Js::JavascriptArray::Is(instance) || Js::ES5Array::Is(instance)); - return Js::ES5Array::Is(instance) ? - static_cast(RecyclableObject::FromVar(instance)) : - Js::JavascriptArray::FromVar(instance); + Assert(Js::JavascriptArray::IsNonES5Array(instance) || Js::VarIs(instance)); + return Js::VarIs(instance) ? + static_cast(VarTo(instance)) : + Js::VarTo(instance); } uint32 RecyclableArrayWalker::GetChildrenCount() { - if (Js::JavascriptArray::Is(instance) || Js::ES5Array::Is(instance)) + if (Js::JavascriptArray::IsNonES5Array(instance) || Js::VarIs(instance)) { uint32 count = (!fOnlyOwnProperties ? RecyclableObjectWalker::GetChildrenCount() : 0); @@ -3029,7 +3023,7 @@ namespace Js BOOL RecyclableArgumentsArrayAddress::Set(Var updateObject) { - if (Js::ArgumentsObject::Is(parentArray)) + if (Js::VarIs(parentArray)) { Js::ArgumentsObject* argObj = static_cast(parentArray); return argObj->SetItem(index, updateObject, PropertyOperation_None); @@ -3101,7 +3095,7 @@ namespace Js { if (pMembersList == nullptr) { - Assert(Js::ArgumentsObject::Is(instance)); + Assert(Js::VarIs(instance)); Js::ArgumentsObject * argObj = static_cast(instance); pMembersList = JsUtil::List::New(GetArenaFromContext(scriptContext)); @@ -3164,7 +3158,7 @@ namespace Js AssertMsg(pResolvedObject, "Bad usage of RecyclableArgumentsArrayWalker::Get"); Assert(i >= 0); - Assert(Js::ArgumentsObject::Is(instance)); + Assert(Js::VarIs(instance)); if (pMembersList && i < pMembersList->Count()) { @@ -3178,7 +3172,6 @@ namespace Js if (pResolvedObject->obj == nullptr) { // Temp workaround till the arguments (In jit code) work is ready. - Assert(Js::Configuration::Global.EnableJitInDebugMode()); pResolvedObject->obj = pMembersList->Item(i)->aVar; } else if (pResolvedObject->obj != pMembersList->Item(i)->aVar) @@ -3274,9 +3267,9 @@ namespace Js { if (!indexedItemCount) { - Assert(Js::TypedArrayBase::Is(instance)); + Assert(Js::VarIs(instance)); - Js::TypedArrayBase * typedArrayObj = Js::TypedArrayBase::FromVar(instance); + Js::TypedArrayBase * typedArrayObj = Js::VarTo(instance); indexedItemCount = typedArrayObj->GetLength() + (!fOnlyOwnProperties ? RecyclableObjectWalker::GetChildrenCount() : 0); } @@ -3288,9 +3281,9 @@ namespace Js { AssertMsg(pResolvedObject, "Bad usage of RecyclableTypedArrayWalker::Get"); - Assert(Js::TypedArrayBase::Is(instance)); + Assert(Js::VarIs(instance)); - Js::TypedArrayBase * typedArrayObj = Js::TypedArrayBase::FromVar(instance); + Js::TypedArrayBase * typedArrayObj = Js::VarTo(instance); int nonArrayElementCount = (!fOnlyOwnProperties ? RecyclableObjectWalker::GetChildrenCount() : 0); @@ -3332,9 +3325,9 @@ namespace Js BOOL RecyclableES5ArrayAddress::Set(Var updateObject) { - if (Js::ES5Array::Is(parentArray)) + if (Js::VarIs(parentArray)) { - Js::ES5Array* arrayObj = Js::ES5Array::FromVar(parentArray); + Js::ES5Array* arrayObj = Js::VarTo(parentArray); return arrayObj->SetItem(index, updateObject, PropertyOperation_None); } @@ -3352,9 +3345,9 @@ namespace Js BOOL RecyclableES5ArrayDisplay::HasChildren() { - if (Js::ES5Array::Is(instance)) + if (Js::VarIs(instance)) { - Js::JavascriptArray* arrayObj = static_cast(RecyclableObject::FromVar(instance)); + Js::JavascriptArray* arrayObj = static_cast(VarTo(instance)); if (HasChildrenInternal(arrayObj)) { return TRUE; @@ -3378,7 +3371,7 @@ namespace Js uint32 RecyclableES5ArrayWalker::GetNextDescriptor(uint32 currentDescriptor) { - Js::ES5Array *es5Array = static_cast(RecyclableObject::FromVar(instance)); + Js::ES5Array *es5Array = static_cast(VarTo(instance)); IndexPropertyDescriptor* descriptor = nullptr; void * descriptorValidationToken = nullptr; return es5Array->GetNextDescriptor(currentDescriptor, &descriptor, &descriptorValidationToken); @@ -3430,14 +3423,14 @@ namespace Js defaultAttributes = DBGPROP_ATTRIB_VALUE_IS_FAKE; } - RecyclableObject *obj = Js::RecyclableObject::FromVar(instance); + RecyclableObject *obj = Js::VarTo(instance); Assert(obj->GetPrototype() != nullptr); //UnscopablesWrapperObjects prototype is null Assert(obj->GetPrototype()->GetTypeId() != TypeIds_Null || (obj->GetPrototype()->GetTypeId() == TypeIds_Null && obj->GetTypeId() == TypeIds_UnscopablesWrapperObject)); pResolvedObject->obj = obj->GetPrototype(); - pResolvedObject->originalObj = (originalInstance != nullptr) ? Js::RecyclableObject::FromVar(originalInstance) : pResolvedObject->obj; + pResolvedObject->originalObj = (originalInstance != nullptr) ? Js::VarTo(originalInstance) : pResolvedObject->obj; pResolvedObject->scriptContext = scriptContext; pResolvedObject->typeId = JavascriptOperators::GetTypeId(pResolvedObject->obj); @@ -3562,7 +3555,7 @@ namespace Js template uint32 RecyclableCollectionObjectWalker::GetChildrenCount() { - TData* data = TData::FromVar(instance); + TData* data = VarTo(instance); if (data->Size() > 0 && propertyList == nullptr) { propertyList = JsUtil::List, ArenaAllocator>::New(GetArenaFromContext(scriptContext)); @@ -3575,7 +3568,7 @@ namespace Js template <> void RecyclableCollectionObjectWalker::GetChildren() { - JavascriptMap* data = JavascriptMap::FromVar(instance); + JavascriptMap* data = VarTo(instance); auto iterator = data->GetIterator(); while (iterator.Next()) { @@ -3588,7 +3581,7 @@ namespace Js template <> void RecyclableCollectionObjectWalker::GetChildren() { - JavascriptSet* data = JavascriptSet::FromVar(instance); + JavascriptSet* data = VarTo(instance); auto iterator = data->GetIterator(); while (iterator.Next()) { @@ -3600,7 +3593,7 @@ namespace Js template <> void RecyclableCollectionObjectWalker::GetChildren() { - JavascriptWeakMap* data = JavascriptWeakMap::FromVar(instance); + JavascriptWeakMap* data = VarTo(instance); data->Map([&](Var key, Var value) { propertyList->Add(RecyclableCollectionObjectWalkerPropertyData(key, value)); @@ -3610,7 +3603,7 @@ namespace Js template <> void RecyclableCollectionObjectWalker::GetChildren() { - JavascriptWeakSet* data = JavascriptWeakSet::FromVar(instance); + JavascriptWeakSet* data = VarTo(instance); data->Map([&](Var value) { propertyList->Add(RecyclableCollectionObjectWalkerPropertyData(value)); @@ -3759,7 +3752,7 @@ namespace Js BOOL RecyclableProxyObjectWalker::Get(int i, ResolvedObject* pResolvedObject) { - JavascriptProxy* proxy = JavascriptProxy::FromVar(instance); + JavascriptProxy* proxy = VarTo(instance); if (proxy->GetTarget() == nullptr || proxy->GetHandler() == nullptr) { return FALSE; @@ -3838,7 +3831,7 @@ namespace Js BOOL RecyclablePromiseObjectWalker::Get(int i, ResolvedObject* pResolvedObject) { - JavascriptPromise* promise = JavascriptPromise::FromVar(instance); + JavascriptPromise* promise = VarTo(instance); if (i == 0) { @@ -3925,7 +3918,7 @@ namespace Js // This is fake [Methods] object. pResolvedObject->name = _u("[Methods]"); - pResolvedObject->obj = Js::RecyclableObject::FromVar(instance); + pResolvedObject->obj = Js::VarTo(instance); pResolvedObject->scriptContext = scriptContext; pResolvedObject->typeId = JavascriptOperators::GetTypeId(pResolvedObject->obj); pResolvedObject->address = nullptr; // Methods object will not be editable @@ -3997,23 +3990,23 @@ namespace Js LPCWSTR ScopeVariablesGroupDisplay::Value(int radix) { - if (ActivationObject::Is(instance)) + if (VarIs(instance)) { // The scope is defined by the activation object. - Js::RecyclableObject *object = Js::RecyclableObject::FromVar(instance); + Js::RecyclableObject *object = Js::VarTo(instance); try { // Trying to find out the JavascriptFunction from the scope. Var value = nullptr; if (object->GetTypeId() == TypeIds_ActivationObject && GetPropertyWithScriptEnter(object, object, PropertyIds::arguments, &value, scriptContext)) { - if (Js::RecyclableObject::Is(value)) + if (Js::VarIs(value)) { - Js::RecyclableObject *argObject = Js::RecyclableObject::FromVar(value); + Js::RecyclableObject *argObject = Js::VarTo(value); Var calleeFunc = nullptr; - if (GetPropertyWithScriptEnter(argObject, argObject, PropertyIds::callee, &calleeFunc, scriptContext) && Js::JavascriptFunction::Is(calleeFunc)) + if (GetPropertyWithScriptEnter(argObject, argObject, PropertyIds::callee, &calleeFunc, scriptContext) && Js::VarIs(calleeFunc)) { - Js::JavascriptFunction *calleeFunction = Js::JavascriptFunction::FromVar(calleeFunc); + Js::JavascriptFunction *calleeFunction = Js::VarTo(calleeFunc); Js::FunctionBody *pFuncBody = calleeFunction->GetFunctionBody(); if (pFuncBody) @@ -4216,4 +4209,4 @@ namespace Js } #endif } -#endif \ No newline at end of file +#endif diff --git a/lib/Runtime/Debug/DiagStackFrame.cpp b/lib/Runtime/Debug/DiagStackFrame.cpp index ddc4c79bb6c..0305b81679b 100644 --- a/lib/Runtime/Debug/DiagStackFrame.cpp +++ b/lib/Runtime/Debug/DiagStackFrame.cpp @@ -29,7 +29,7 @@ namespace Js ScriptFunction* DiagStackFrame::GetScriptFunction() { - return ScriptFunction::FromVar(GetJavascriptFunction()); + return VarTo(GetJavascriptFunction()); } FunctionBody* DiagStackFrame::GetFunction() @@ -79,7 +79,7 @@ namespace Js { display = this->GetScriptFunction()->GetEnvironment(); } - + return display; } @@ -156,8 +156,10 @@ namespace Js } } - Js::GlobalObject::UpdateThisForEval(varThis, moduleId, scriptContext, this->IsStrictMode()); - + if (!this->IsStrictMode()) + { + Js::GlobalObject::UpdateThisForEval(varThis, moduleId, scriptContext); + } return varThis; } @@ -298,7 +300,7 @@ namespace Js Js::ScriptContext* scriptContext = this->GetScriptContext(); ArenaAllocator *arena = scriptContext->GetThreadContext()->GetDebugManager()->GetDiagnosticArena()->Arena(); - Js::LocalsWalker *localsWalker = Anew(arena, Js::LocalsWalker, this, + Js::LocalsWalker *localsWalker = Anew(arena, Js::LocalsWalker, this, Js::FrameWalkerFlags::FW_EnumWithScopeAlso | Js::FrameWalkerFlags::FW_AllowLexicalThis | Js::FrameWalkerFlags::FW_AllowSuperReference | Js::FrameWalkerFlags::FW_DontAddGlobalsDirectly); // Store the diag address of a var to the map so that it will be used for editing the value. @@ -658,4 +660,4 @@ namespace Js } } // namespace Js -#endif \ No newline at end of file +#endif diff --git a/lib/Runtime/Debug/MutationBreakpoint.cpp b/lib/Runtime/Debug/MutationBreakpoint.cpp index 850880cb991..8f6b0e9d2d4 100644 --- a/lib/Runtime/Debug/MutationBreakpoint.cpp +++ b/lib/Runtime/Debug/MutationBreakpoint.cpp @@ -42,7 +42,7 @@ bool Js::MutationBreakpoint::HandleSetProperty(Js::ScriptContext *scriptContext, && objectContext->HasMutationBreakpoints()) { MutationBreakpoint *bp = nullptr; - DynamicObject *dynObj = DynamicObject::FromVar(object); + DynamicObject *dynObj = VarTo(object); if (dynObj->GetInternalProperty(object, InternalPropertyIds::MutationBp, reinterpret_cast(&bp), nullptr, objectContext) && bp) @@ -83,7 +83,7 @@ void Js::MutationBreakpoint::HandleDeleteProperty(ScriptContext *scriptContext, Assert(instance); if (MutationBreakpoint::CanSet(instance)) { - DynamicObject *obj = DynamicObject::FromVar(instance); + DynamicObject *obj = VarTo(instance); if (obj->GetScriptContext()->HasMutationBreakpoints()) { MutationBreakpoint *bp = nullptr; @@ -107,8 +107,8 @@ void Js::MutationBreakpoint::HandleDeleteProperty(ScriptContext *scriptContext, void Js::MutationBreakpoint::HandleDeleteProperty(ScriptContext *scriptContext, Var instance, Js::JavascriptString *propertyNameString) { PropertyRecord const *propertyRecord = nullptr; - DynamicObject *obj = DynamicObject::FromVar(instance); - + DynamicObject *obj = VarTo(instance); + if (JavascriptOperators::ShouldTryDeleteProperty(obj, propertyNameString, &propertyRecord)) { Assert(propertyRecord); diff --git a/lib/Runtime/Debug/ProbeContainer.cpp b/lib/Runtime/Debug/ProbeContainer.cpp index c534c63e413..0cb1b466b43 100644 --- a/lib/Runtime/Debug/ProbeContainer.cpp +++ b/lib/Runtime/Debug/ProbeContainer.cpp @@ -143,7 +143,7 @@ namespace Js if (func->IsScriptFunction()) { frm = Anew(pDiagArena, DiagNativeStackFrame, - ScriptFunction::FromVar(walker.GetCurrentFunction()), walker.GetByteCodeOffset(), stackAddress, walker.GetCurrentCodeAddr()); + VarTo(walker.GetCurrentFunction()), walker.GetByteCodeOffset(), stackAddress, walker.GetCurrentCodeAddr()); } else #else @@ -298,7 +298,7 @@ namespace Js } } }, - [&](bool) + [&](bool) { DestroyLocation(); }); @@ -383,7 +383,7 @@ namespace Js { DestroyLocation(); }); - + OUTPUT_TRACE(Js::DebuggerPhase, _u("ProbeContainer::DispatchInlineBreakpoint: end: pHaltState=%p\n"), pHaltState); } @@ -405,7 +405,7 @@ namespace Js // Will store current offset of the bytecode block. int currentOffset = -1; - TryFinally([&]() + TryFinally([&]() { InitializeLocation(pHaltState, false); OUTPUT_TRACE(Js::DebuggerPhase, _u("ProbeContainer::DispatchExceptionBreakpoint: initialized location: pHaltState=%p, IsInterpreterFrame=%d\n"), @@ -533,7 +533,7 @@ namespace Js // will store Current offset of the bytecode block. int currentOffset = -1; - TryFinally([&]() + TryFinally([&]() { InitializeLocation(pHaltState); OUTPUT_TRACE(Js::DebuggerPhase, _u("ProbeContainer::DispatchMutationBreakpoint: initialized location: pHaltState=%p, pHaltState->IsValid()=%d\n"), @@ -580,7 +580,7 @@ namespace Js return; } - TryFinally([&]() + TryFinally([&]() { InitializeLocation(pHaltState); @@ -1135,4 +1135,4 @@ namespace Js } #endif } // namespace Js. -#endif \ No newline at end of file +#endif diff --git a/lib/Runtime/Debug/TTActionEvents.cpp b/lib/Runtime/Debug/TTActionEvents.cpp index af768553c5c..d1321587989 100644 --- a/lib/Runtime/Debug/TTActionEvents.cpp +++ b/lib/Runtime/Debug/TTActionEvents.cpp @@ -126,7 +126,7 @@ namespace TTD { const JsRTSingleVarArgumentAction* action = GetInlineEventDataAs(evt); Js::Var gvar = InflateVarInReplay(executeContext, GetVarItem_0(action)); - TTDAssert(gvar == nullptr || Js::GlobalObject::Is(gvar), "Something is not right here!"); + TTDAssert(gvar == nullptr || Js::VarIs(gvar), "Something is not right here!"); Js::GlobalObject* gobj = static_cast(gvar); Js::ScriptContext* newCtx = (gobj != nullptr) ? gobj->GetScriptContext() : nullptr; @@ -286,7 +286,7 @@ namespace TTD TTD_LOG_PTR_ID origId = reinterpret_cast(GetVarItem_0(action)); Js::Var var = InflateVarInReplay(executeContext, GetVarItem_0(action)); - Js::RecyclableObject* newObj = Js::RecyclableObject::FromVar(var); + Js::RecyclableObject* newObj = Js::VarTo(var); executeContext->AddRootRef_Replay(origId, newObj); } @@ -298,7 +298,7 @@ namespace TTD TTD_LOG_PTR_ID origId = reinterpret_cast(GetVarItem_0(action)); Js::Var var = InflateVarInReplay(executeContext, GetVarItem_0(action)); - Js::RecyclableObject* newObj = Js::RecyclableObject::FromVar(var); + Js::RecyclableObject* newObj = Js::VarTo(var); executeContext->AddRootRef_Replay(origId, newObj); } @@ -506,8 +506,8 @@ namespace TTD Js::Var constructor = InflateVarInReplay(executeContext, GetVarItem_1(action)); TTD_REPLAY_VALIDATE_INCOMING_REFERENCE(constructor, ctx); - //Result is not needed but trigger computation for any effects - Js::RecyclableObject::FromVar(constructor)->HasInstance(object, ctx); + // Result is not needed but trigger computation for any effects + Js::JavascriptOperators::OP_IsInst(object, constructor, ctx, nullptr); } void EqualsAction_Execute(const EventLogEntry* evt, ThreadContextTTD* executeContext) @@ -559,12 +559,12 @@ namespace TTD //These really don't have any effect, we need the marshal in validate, so just skip since Js::JavascriptSymbol has strange declaration order // - //if(!Js::JavascriptSymbol::Is(sym)) + //if(!Js::VarIs(sym)) //{ // return JsErrorPropertyNotSymbol; //} // - //Js::JavascriptSymbol::FromVar(symbol)->GetValue(); + //Js::VarTo(symbol)->GetValue(); } void GetPrototypeAction_Execute(const EventLogEntry* evt, ThreadContextTTD* executeContext) @@ -616,7 +616,7 @@ namespace TTD Js::Var res = nullptr; Js::PropertyDescriptor propertyDescriptorValue; - if(Js::JavascriptOperators::GetOwnPropertyDescriptor(Js::RecyclableObject::FromVar(var), GetPropertyIdItem(action), ctx, &propertyDescriptorValue)) + if(Js::JavascriptOperators::GetOwnPropertyDescriptor(Js::VarTo(var), GetPropertyIdItem(action), ctx, &propertyDescriptorValue)) { res = Js::JavascriptOperators::FromPropertyDescriptor(propertyDescriptorValue, ctx); } @@ -667,7 +667,7 @@ namespace TTD Js::PropertyDescriptor propertyDescriptorValue; Js::JavascriptOperators::ToPropertyDescriptor(propertyDescriptor, &propertyDescriptorValue, ctx); - Js::JavascriptOperators::DefineOwnPropertyDescriptor(Js::RecyclableObject::FromVar(object), GetPropertyIdItem(action), propertyDescriptorValue, true, ctx); + Js::JavascriptOperators::DefineOwnPropertyDescriptor(Js::VarTo(object), GetPropertyIdItem(action), propertyDescriptorValue, true, ctx); } void DeletePropertyAction_Execute(const EventLogEntry* evt, ThreadContextTTD* executeContext) @@ -692,7 +692,7 @@ namespace TTD Js::Var proto = InflateVarInReplay(executeContext, GetVarItem_1(action)); TTD_REPLAY_VALIDATE_INCOMING_OBJECT_OR_NULL(proto, ctx); - Js::JavascriptObject::ChangePrototype(Js::RecyclableObject::FromVar(var), Js::RecyclableObject::FromVar(proto), true, ctx); + Js::JavascriptObject::ChangePrototype(Js::VarTo(var), Js::VarTo(proto), true, ctx); } void SetPropertyAction_Execute(const EventLogEntry* evt, ThreadContextTTD* executeContext) @@ -726,7 +726,7 @@ namespace TTD const JsRTSingleVarArgumentAction* action = GetInlineEventDataAs(evt); Js::Var var = InflateVarInReplay(executeContext, GetVarItem_0(action)); - Js::TypedArrayBase* typedArrayBase = Js::TypedArrayBase::FromVar(var); + Js::TypedArrayBase* typedArrayBase = Js::VarTo(var); Js::Var res = typedArrayBase->GetArrayBuffer(); //Need additional notify since JsRTActionHandleResultForReplay may allocate but GetTypedArrayInfo does not enter runtime @@ -740,7 +740,7 @@ namespace TTD const JsRTSingleVarArgumentAction* action = GetInlineEventDataAs(evt); Js::Var var = InflateVarInReplay(executeContext, GetVarItem_0(action)); - Js::DataView* dataView = Js::DataView::FromVar(var); + Js::DataView* dataView = Js::VarTo(var); Js::Var res = dataView->GetArrayBuffer(); //Need additional notify since JsRTActionHandleResultForReplay may allocate but GetDataViewInfo does not enter runtime @@ -787,12 +787,12 @@ namespace TTD Js::Var dst = InflateVarInReplay(executeContext, action->Dst); //never cross context Js::Var src = InflateVarInReplay(executeContext, action->Src); //never cross context - TTDAssert(Js::ArrayBuffer::Is(dst) && Js::ArrayBuffer::Is(src), "Not array buffer objects!!!"); - TTDAssert(action->DstIndx + action->Count <= Js::ArrayBuffer::FromVar(dst)->GetByteLength(), "Copy off end of buffer!!!"); - TTDAssert(action->SrcIndx + action->Count <= Js::ArrayBuffer::FromVar(src)->GetByteLength(), "Copy off end of buffer!!!"); + TTDAssert(Js::VarIs(dst) && Js::VarIs(src), "Not array buffer objects!!!"); + TTDAssert(action->DstIndx + action->Count <= Js::VarTo(dst)->GetByteLength(), "Copy off end of buffer!!!"); + TTDAssert(action->SrcIndx + action->Count <= Js::VarTo(src)->GetByteLength(), "Copy off end of buffer!!!"); - byte* dstBuff = Js::ArrayBuffer::FromVar(dst)->GetBuffer() + action->DstIndx; - byte* srcBuff = Js::ArrayBuffer::FromVar(src)->GetBuffer() + action->SrcIndx; + byte* dstBuff = Js::VarTo(dst)->GetBuffer() + action->DstIndx; + byte* srcBuff = Js::VarTo(src)->GetBuffer() + action->SrcIndx; //node uses mmove so we do too memmove(dstBuff, srcBuff, action->Count); @@ -803,10 +803,10 @@ namespace TTD const JsRTRawBufferModifyAction* action = GetInlineEventDataAs(evt); Js::Var trgt = InflateVarInReplay(executeContext, action->Trgt); //never cross context - TTDAssert(Js::ArrayBuffer::Is(trgt), "Not array buffer object!!!"); - TTDAssert(action->Index + action->Length <= Js::ArrayBuffer::FromVar(trgt)->GetByteLength(), "Copy off end of buffer!!!"); + TTDAssert(Js::VarIs(trgt), "Not array buffer object!!!"); + TTDAssert(action->Index + action->Length <= Js::VarTo(trgt)->GetByteLength(), "Copy off end of buffer!!!"); - byte* trgtBuff = Js::ArrayBuffer::FromVar(trgt)->GetBuffer() + action->Index; + byte* trgtBuff = Js::VarTo(trgt)->GetBuffer() + action->Index; js_memcpy_s(trgtBuff, action->Length, action->Data, action->Length); } @@ -816,7 +816,7 @@ namespace TTD const JsRTRawBufferModifyAction* action = GetInlineEventDataAs(evt); Js::Var trgt = InflateVarInReplay(executeContext, action->Trgt); //never cross context - ctx->TTDContextInfo->AddToAsyncPendingList(Js::ArrayBuffer::FromVar(trgt), action->Index); + ctx->TTDContextInfo->AddToAsyncPendingList(Js::VarTo(trgt), action->Index); } void RawBufferAsyncModifyComplete_Execute(const EventLogEntry* evt, ThreadContextTTD* executeContext) @@ -825,7 +825,7 @@ namespace TTD const JsRTRawBufferModifyAction* action = GetInlineEventDataAs(evt); Js::Var trgt = InflateVarInReplay(executeContext, action->Trgt); //never cross context - const Js::ArrayBuffer* dstBuff = Js::ArrayBuffer::FromVar(trgt); + const Js::ArrayBuffer* dstBuff = Js::VarTo(trgt); byte* copyBuff = dstBuff->GetBuffer() + action->Index; byte* finalModPos = dstBuff->GetBuffer() + action->Index + action->Length; @@ -855,13 +855,13 @@ namespace TTD ccAction->ExecArgs[i - 1] = argi; } - Js::JavascriptFunction* jsFunction = Js::JavascriptFunction::FromVar(jsFunctionVar); + Js::JavascriptFunction* jsFunction = Js::VarTo(jsFunctionVar); Js::CallInfo callInfo(Js::CallFlags::CallFlags_New, (ushort)(ccAction->ArgCount - 1)); Js::Arguments jsArgs(callInfo, ccAction->ExecArgs); // //TODO: we will want to look at this at some point -- either treat as "top-level" call or maybe constructors are fast so we can just jump back to previous "real" code - //TTDAssert(!Js::ScriptFunction::Is(jsFunction) || execContext->GetThreadContext()->TTDRootNestingCount != 0, "This will cause user code to execute and we need to add support for that as a top-level call source!!!!"); + //TTDAssert(!Js::VarIs(jsFunction) || execContext->GetThreadContext()->TTDRootNestingCount != 0, "This will cause user code to execute and we need to add support for that as a top-level call source!!!!"); // Js::Var res = nullptr; @@ -1064,9 +1064,9 @@ namespace TTD { JsRTCallFunctionAction* cfAction = GetInlineEventDataAs(evt); - if(Js::JavascriptFunction::Is(funcVar)) + if(Js::VarIs(funcVar)) { - Js::JavascriptString* displayName = Js::JavascriptFunction::FromVar(funcVar)->GetDisplayName(); + Js::JavascriptString* displayName = Js::VarTo(funcVar)->GetDisplayName(); alloc.CopyStringIntoWLength(displayName->GetString(), displayName->GetLength(), cfAction->FunctionName); } else @@ -1119,7 +1119,7 @@ namespace TTD Js::Var jsFunctionVar = InflateVarInReplay(executeContext, cfAction->ArgArray[0]); TTD_REPLAY_VALIDATE_INCOMING_FUNCTION(jsFunctionVar, ctx); - Js::JavascriptFunction *jsFunction = Js::JavascriptFunction::FromVar(jsFunctionVar); + Js::JavascriptFunction *jsFunction = Js::VarTo(jsFunctionVar); //remove implicit constructor function as first arg in callInfo and argument loop below Js::CallInfo callInfo((ushort)(cfAction->ArgCount - 1)); diff --git a/lib/Runtime/Debug/TTEventLog.cpp b/lib/Runtime/Debug/TTEventLog.cpp index 7747210fc31..aabf558183d 100644 --- a/lib/Runtime/Debug/TTEventLog.cpp +++ b/lib/Runtime/Debug/TTEventLog.cpp @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #include "RuntimeDebugPch.h" @@ -2421,9 +2422,9 @@ namespace TTD void EventLog::RecordJsRTRawBufferCopySync(TTDJsRTActionResultAutoRecorder& actionPopper, Js::Var dst, uint32 dstIndex, Js::Var src, uint32 srcIndex, uint32 length) { - TTDAssert(Js::ArrayBuffer::Is(dst) && Js::ArrayBuffer::Is(src), "Not array buffer objects!!!"); - TTDAssert(dstIndex + length <= Js::ArrayBuffer::FromVar(dst)->GetByteLength(), "Copy off end of buffer!!!"); - TTDAssert(srcIndex + length <= Js::ArrayBuffer::FromVar(src)->GetByteLength(), "Copy off end of buffer!!!"); + TTDAssert(Js::VarIs(dst) && Js::VarIs(src), "Not array buffer objects!!!"); + TTDAssert(dstIndex + length <= Js::VarTo(dst)->GetByteLength(), "Copy off end of buffer!!!"); + TTDAssert(srcIndex + length <= Js::VarTo(src)->GetByteLength(), "Copy off end of buffer!!!"); NSLogEvents::JsRTRawBufferCopyAction* rbcAction = nullptr; NSLogEvents::EventLogEntry* evt = this->RecordGetInitializedEvent(&rbcAction); @@ -2438,8 +2439,8 @@ namespace TTD void EventLog::RecordJsRTRawBufferModifySync(TTDJsRTActionResultAutoRecorder& actionPopper, Js::Var dst, uint32 index, uint32 count) { - TTDAssert(Js::ArrayBuffer::Is(dst), "Not array buffer object!!!"); - TTDAssert(index + count <= Js::ArrayBuffer::FromVar(dst)->GetByteLength(), "Copy off end of buffer!!!"); + TTDAssert(Js::VarIs(dst), "Not array buffer object!!!"); + TTDAssert(index + count <= Js::VarTo(dst)->GetByteLength(), "Copy off end of buffer!!!"); NSLogEvents::JsRTRawBufferModifyAction* rbmAction = nullptr; NSLogEvents::EventLogEntry* evt = this->RecordGetInitializedEvent(&rbmAction); @@ -2448,7 +2449,7 @@ namespace TTD rbmAction->Length = count; rbmAction->Data = (rbmAction->Length != 0) ? this->m_eventSlabAllocator.SlabAllocateArray(rbmAction->Length) : nullptr; - byte* copyBuff = Js::ArrayBuffer::FromVar(dst)->GetBuffer() + index; + byte* copyBuff = Js::VarTo(dst)->GetBuffer() + index; js_memcpy_s(rbmAction->Data, rbmAction->Length, copyBuff, count); actionPopper.InitializeWithEventAndEnter(evt); @@ -2466,7 +2467,7 @@ namespace TTD void EventLog::RecordJsRTRawBufferAsyncModifyComplete(TTDJsRTActionResultAutoRecorder& actionPopper, TTDPendingAsyncBufferModification& pendingAsyncInfo, byte* finalModPos) { - Js::ArrayBuffer* dstBuff = Js::ArrayBuffer::FromVar(pendingAsyncInfo.ArrayBufferVar); + Js::ArrayBuffer* dstBuff = Js::VarTo(pendingAsyncInfo.ArrayBufferVar); byte* copyBuff = dstBuff->GetBuffer() + pendingAsyncInfo.Index; NSLogEvents::JsRTRawBufferModifyAction* rbrAction = nullptr; @@ -2816,7 +2817,9 @@ namespace TTD TTDAssert(wcscmp(_u("x86"), archString.Contents) == 0, "Mismatch in arch between record and replay!!!"); #elif defined(_M_X64) TTDAssert(wcscmp(_u("x64"), archString.Contents) == 0, "Mismatch in arch between record and replay!!!"); -#elif defined(_M_ARM) +#elif defined(_M_ARM) // #TODO investigate why this is checking for "arm64" instead of "arm" + TTDAssert(wcscmp(_u("arm64"), archString.Contents) == 0, "Mismatch in arch between record and replay!!!"); +#elif defined(_M_ARM64) TTDAssert(wcscmp(_u("arm64"), archString.Contents) == 0, "Mismatch in arch between record and replay!!!"); #else TTDAssert(false, "Unknown arch!!!"); diff --git a/lib/Runtime/Debug/TTEvents.cpp b/lib/Runtime/Debug/TTEvents.cpp index f823dfcf2d1..8d75f8e5d1d 100644 --- a/lib/Runtime/Debug/TTEvents.cpp +++ b/lib/Runtime/Debug/TTEvents.cpp @@ -23,7 +23,7 @@ namespace TTD if(replayVar != nullptr && TTD::JsSupport::IsVarPtrValued(replayVar)) { - Js::RecyclableObject* obj = Js::RecyclableObject::FromVar(replayVar); + Js::RecyclableObject* obj = Js::VarTo(replayVar); executeContext->AddLocalRoot(TTD_CONVERT_OBJ_TO_LOG_PTR_ID(origVar), obj); } } diff --git a/lib/Runtime/Debug/TTEvents.h b/lib/Runtime/Debug/TTEvents.h index 8621221c27d..15777a15797 100644 --- a/lib/Runtime/Debug/TTEvents.h +++ b/lib/Runtime/Debug/TTEvents.h @@ -28,7 +28,7 @@ } #define TTD_REPLAY_MARSHAL_OBJECT(p, scriptContext) \ - Js::RecyclableObject* __obj = Js::RecyclableObject::FromVar(p); \ + Js::RecyclableObject* __obj = Js::VarTo(p); \ if (__obj->GetScriptContext() != scriptContext) \ { \ p = Js::CrossSite::MarshalVar(scriptContext, __obj); \ @@ -36,7 +36,7 @@ #define TTD_REPLAY_VALIDATE_INCOMING_REFERENCE(p, scriptContext) \ TTD_REPLAY_VALIDATE_JSREF(p); \ - if (Js::RecyclableObject::Is(p)) \ + if (Js::VarIs(p)) \ { \ TTD_REPLAY_MARSHAL_OBJECT(p, scriptContext) \ } @@ -64,7 +64,7 @@ #define TTD_REPLAY_VALIDATE_INCOMING_FUNCTION(p, scriptContext) \ { \ TTD_REPLAY_VALIDATE_JSREF(p); \ - if(!Js::JavascriptFunction::Is(p)) \ + if(!Js::VarIs(p)) \ { \ return; \ } \ @@ -272,7 +272,7 @@ namespace TTD //A struct that represents snapshot events struct SnapshotEventLogEntry { - //The timestamp we should restore to + //The timestamp we should restore to int64 RestoreTimestamp; //The snapshot (we many persist this to disk and inflate back in later) diff --git a/lib/Runtime/Debug/TTRuntimeInfoTracker.cpp b/lib/Runtime/Debug/TTRuntimeInfoTracker.cpp index a3f70e91e13..36457b79ea1 100644 --- a/lib/Runtime/Debug/TTRuntimeInfoTracker.cpp +++ b/lib/Runtime/Debug/TTRuntimeInfoTracker.cpp @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #include "RuntimeDebugPch.h" @@ -24,7 +25,7 @@ namespace TTD ctx->InitializeDebugging(); #else // - //TODO: x-plat does not like some parts of initiallize debugging so just set the flag we need + //TODO: x-plat does not like some parts of initiallize debugging so just set the flag we need // ctx->GetDebugContext()->SetDebuggerMode(Js::DebuggerMode::Debugging); #endif @@ -48,7 +49,7 @@ namespace TTD : m_threadCtx(threadContext), m_runtimeHandle(runtimeHandle), m_contextCreatedOrDestoyedInReplay(false), SnapInterval(snapInterval), SnapHistoryLength(snapHistoryLength), m_activeContext(nullptr), m_contextList(&HeapAllocator::Instance), m_ttdContextToExternalRefMap(&HeapAllocator::Instance), - m_ttdRootTagToObjectMap(&HeapAllocator::Instance), m_ttdMayBeLongLivedRoot(&HeapAllocator::Instance), + m_ttdRootTagToObjectMap(&HeapAllocator::Instance), m_ttdMayBeLongLivedRoot(&HeapAllocator::Instance), m_ttdRecordRootWeakMap(),m_ttdReplayRootPinSet(), TTDataIOInfo({ 0 }), TTDExternalObjectFunctions({ 0 }) { @@ -274,7 +275,7 @@ namespace TTD } } - //Now sync up the root list wrt. long lived roots that we recorded + //Now sync up the root list wrt. long lived roots that we recorded JsUtil::BaseHashSet refInfoMap(&HeapAllocator::Instance); for(uint32 i = 0; i < liveRootCount; ++i) { @@ -351,7 +352,7 @@ namespace TTD for(int32 i = 0; i < this->m_ttdPendingAsyncModList.Count(); ++i) { const TTDPendingAsyncBufferModification& pi = this->m_ttdPendingAsyncModList.Item(i); - const Js::ArrayBuffer* pbuff = Js::ArrayBuffer::FromVar(pi.ArrayBufferVar); + const Js::ArrayBuffer* pbuff = Js::VarTo(pi.ArrayBufferVar); const byte* pbuffBegin = pbuff->GetBuffer() + pi.Index; const byte* pbuffMax = pbuff->GetBuffer() + pbuff->GetByteLength(); @@ -675,7 +676,7 @@ namespace TTD return wcscmp(p1->GetBuffer(), p2->GetBuffer()) > 0; } } - + RuntimeContextInfo::RuntimeContextInfo() : m_worklist(&HeapAllocator::Instance), m_nullString(), m_coreObjToPathMap(&HeapAllocator::Instance, TTD_CORE_OBJECT_COUNT), m_coreBodyToPathMap(&HeapAllocator::Instance, TTD_CORE_FUNCTION_BODY_COUNT), m_coreDbgScopeToPathMap(&HeapAllocator::Instance, TTD_CORE_FUNCTION_BODY_COUNT), @@ -774,7 +775,7 @@ namespace TTD this->EnqueueRootPathObject(_u("global"), ctx->GetGlobalObject()); this->EnqueueRootPathObject(_u("null"), ctx->GetLibrary()->GetNull()); - this->EnqueueRootPathObject(_u("undeclBlockVar"), Js::RecyclableObject::FromVar(ctx->GetLibrary()->GetUndeclBlockVar())); + this->EnqueueRootPathObject(_u("undeclBlockVar"), Js::VarTo(ctx->GetLibrary()->GetUndeclBlockVar())); this->EnqueueRootPathObject(_u("_defaultAccessor"), ctx->GetLibrary()->GetDefaultAccessorFunction()); @@ -785,16 +786,14 @@ namespace TTD this->EnqueueRootPathObject(_u("_throwTypeErrorRestrictedPropertyAccessor"), ctx->GetLibrary()->GetThrowTypeErrorRestrictedPropertyAccessorFunction()); - if(ctx->GetConfig()->IsES6PromiseEnabled()) - { - this->EnqueueRootPathObject(_u("_identityFunction"), ctx->GetLibrary()->GetIdentityFunction()); - this->EnqueueRootPathObject(_u("_throwerFunction"), ctx->GetLibrary()->GetThrowerFunction()); - } + this->EnqueueRootPathObject(_u("_identityFunction"), ctx->GetLibrary()->GetIdentityFunction()); + this->EnqueueRootPathObject(_u("_throwerFunction"), ctx->GetLibrary()->GetThrowerFunction()); + // ArrayIteratorPrototype is not created when we have JsBuiltins, it it created on-demand only #ifdef ENABLE_JS_BUILTINS if (ctx->IsJsBuiltInEnabled()) { - ctx->GetLibrary()->EnsureBuiltInEngineIsReady(); + ctx->GetLibrary()->EnsureArrayBuiltInsAreReady(); } #endif this->EnqueueRootPathObject(_u("_arrayIteratorPrototype"), ctx->GetLibrary()->GetArrayIteratorPrototype()); @@ -833,14 +832,14 @@ namespace TTD { if(getter != nullptr && !Js::JavascriptOperators::IsUndefinedObject(getter)) { - TTDAssert(Js::JavascriptFunction::Is(getter), "The getter is not a function?"); + TTDAssert(Js::VarIs(getter), "The getter is not a function?"); this->EnqueueNewPathVarAsNeeded(curr, getter, precord, _u(">")); } if(setter != nullptr && !Js::JavascriptOperators::IsUndefinedObject(setter)) { - TTDAssert(Js::JavascriptFunction::Is(setter), "The setter is not a function?"); - this->EnqueueNewPathVarAsNeeded(curr, Js::RecyclableObject::FromVar(setter), precord, _u("<")); + TTDAssert(Js::VarIs(setter), "The setter is not a function?"); + this->EnqueueNewPathVarAsNeeded(curr, Js::VarTo(setter), precord, _u("<")); } } else @@ -854,9 +853,9 @@ namespace TTD } //shouldn't have any dynamic array valued properties - if(Js::DynamicType::Is(curr->GetTypeId())) + if(Js::DynamicType::Is(curr->GetTypeId())) { - Js::ArrayObject* parray = Js::DynamicObject::FromVar(curr)->GetObjectArray(); + Js::ArrayObject* parray = Js::VarTo(curr)->GetObjectArray(); if(parray != nullptr) { this->EnqueueNewPathVarAsNeeded(curr, parray, _u("_object_array_")); @@ -902,14 +901,14 @@ namespace TTD return; } - if(JsSupport::IsVarPrimitiveKind(val) && !Js::GlobalObject::Is(parent)) + if(JsSupport::IsVarPrimitiveKind(val) && !Js::VarIs(parent)) { return; //we keep primitives from global object only -- may need others but this is a simple way to start to get undefined, null, infy, etc. } - Js::RecyclableObject* obj = Js::RecyclableObject::FromVar(val); + Js::RecyclableObject* obj = Js::VarTo(val); if(!this->m_coreObjToPathMap.ContainsKey(obj)) - { + { const UtilSupport::TTAutoString* ppath = this->m_coreObjToPathMap.Item(parent); this->m_worklist.Enqueue(obj); diff --git a/lib/Runtime/Debug/TTSerialize.cpp b/lib/Runtime/Debug/TTSerialize.cpp index a667fbc02ea..8d5ce8fd230 100644 --- a/lib/Runtime/Debug/TTSerialize.cpp +++ b/lib/Runtime/Debug/TTSerialize.cpp @@ -894,7 +894,7 @@ namespace TTD // Null-terminate the list before we try to use the buffer as a string. charList.Add(_u('\0')); - bool likelyint; //we don't care about this just want to know that it is convertable to a number + LikelyNumberType likelyint; //we don't care about this just want to know that it is convertable to a number const char16* end; const char16* start = charList.GetBuffer(); double val = Js::NumberUtilities::StrToDbl(start, &end, likelyint); @@ -1152,7 +1152,7 @@ namespace TTD double TextFormatReader::ReadDoubleFromCharArray(const char16* buff) { - bool likelytInt; //we don't care about this as we already know it is a double + LikelyNumberType likelytInt; //we don't care about this as we already know it is a double const char16* end; double val = Js::NumberUtilities::StrToDbl(buff, &end, likelytInt); TTDAssert((buff != end) && !Js::JavascriptNumber::IsNan(val), "Error in parse."); @@ -1906,7 +1906,7 @@ namespace TTD this->AppendLiteral("null"); break; case Js::TypeIds_Boolean: - this->AppendBool(!!Js::JavascriptBoolean::FromVar(var)->GetValue()); + this->AppendBool(!!Js::VarTo(var)->GetValue()); break; case Js::TypeIds_Integer: this->AppendInteger(Js::TaggedInt::ToInt64(var)); @@ -1915,30 +1915,30 @@ namespace TTD this->AppendDouble(Js::JavascriptNumber::GetValue(var)); break; case Js::TypeIds_Int64Number: - this->AppendInteger(Js::JavascriptInt64Number::FromVar(var)->GetValue()); + this->AppendInteger(Js::VarTo(var)->GetValue()); break; case Js::TypeIds_UInt64Number: - this->AppendUnsignedInteger(Js::JavascriptUInt64Number::FromVar(var)->GetValue()); + this->AppendUnsignedInteger(Js::VarTo(var)->GetValue()); break; case Js::TypeIds_String: this->AppendLiteral("'"); if(!skipStringContents) { - if(Js::JavascriptString::FromVar(var)->GetLength() <= 40) + if(Js::VarTo(var)->GetLength() <= 40) { - this->AppendText(Js::JavascriptString::FromVar(var)->GetString(), Js::JavascriptString::FromVar(var)->GetLength()); + this->AppendText(Js::VarTo(var)->GetString(), Js::VarTo(var)->GetLength()); } else { - this->AppendText(Js::JavascriptString::FromVar(var)->GetString(), 40); + this->AppendText(Js::VarTo(var)->GetString(), 40); this->AppendLiteral("..."); - this->AppendInteger(Js::JavascriptString::FromVar(var)->GetLength()); + this->AppendInteger(Js::VarTo(var)->GetLength()); } } else { this->AppendLiteral("string@length="); - this->AppendInteger(Js::JavascriptString::FromVar(var)->GetLength()); + this->AppendInteger(Js::VarTo(var)->GetLength()); this->AppendLiteral("..."); } this->AppendLiteral("'"); @@ -1948,7 +1948,7 @@ namespace TTD #if ENABLE_OBJECT_SOURCE_TRACKING if(tid > Js::TypeIds_LastStaticType) { - const Js::DynamicObject* dynObj = Js::DynamicObject::FromVar(var); + const Js::DynamicObject* dynObj = Js::VarTo(var); if(!IsDiagnosticOriginInformationValid(dynObj->TTDDiagOriginInfo)) { this->AppendLiteral("*"); diff --git a/lib/Runtime/Debug/TTSnapObjects.cpp b/lib/Runtime/Debug/TTSnapObjects.cpp index fd5924ab462..7105d9ef0d5 100644 --- a/lib/Runtime/Debug/TTSnapObjects.cpp +++ b/lib/Runtime/Debug/TTSnapObjects.cpp @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #include "RuntimeDebugPch.h" @@ -18,7 +19,7 @@ namespace TTD TTDAssert(!obj->IsExternal(), "We are not prepared for custom external objects yet"); sobj->ObjectPtrId = TTD_CONVERT_VAR_TO_PTR_ID(obj); - sobj->SnapObjectTag = obj->GetSnapTag_TTD(); + sobj->SnapObjectTag = obj->GetTypeId() == Js::TypeId::TypeIds_AwaitObject ? SnapObjectType::SnapAwaitObject : obj->GetSnapTag_TTD(); TTD_WELLKNOWN_TOKEN lookupToken = isWellKnown ? obj->GetScriptContext()->TTDWellKnownInfo->ResolvePathForKnownObject(obj) : TTD_INVALID_WELLKNOWN_TOKEN; sobj->OptWellKnownToken = alloc.CopyRawNullTerminatedStringInto(lookupToken); @@ -39,7 +40,10 @@ namespace TTD NSSnapObjects::StdPropertyExtract_DynamicType(sobj, static_cast(obj), alloc); } - obj->ExtractSnapObjectDataInto(sobj, alloc); + if (sobj->SnapObjectTag != SnapObjectType::SnapAwaitObject) + { + obj->ExtractSnapObjectDataInto(sobj, alloc); + } } void StdPropertyExtract_StaticType(SnapObject* snpObject, Js::RecyclableObject* obj) @@ -110,13 +114,13 @@ namespace TTD Js::DynamicObject* ReuseObjectCheckAndReset(const SnapObject* snpObject, InflateMap* inflator) { Js::RecyclableObject* robj = inflator->FindReusableObjectIfExists(snpObject->ObjectPtrId); - if(robj == nullptr || Js::DynamicObject::FromVar(robj)->GetTypeId() != snpObject->SnapType->JsTypeId || Js::DynamicObject::FromVar(robj)->IsCrossSiteObject() != snpObject->IsCrossSite) + if(robj == nullptr || Js::VarTo(robj)->GetTypeId() != snpObject->SnapType->JsTypeId || Js::VarTo(robj)->IsCrossSiteObject() != snpObject->IsCrossSite) { return nullptr; } TTDAssert(Js::DynamicType::Is(robj->GetTypeId()), "You should only do this for dynamic objects!!!"); - Js::DynamicObject* dynObj = Js::DynamicObject::FromVar(robj); + Js::DynamicObject* dynObj = Js::VarTo(robj); return ObjectPropertyReset_General(snpObject, dynObj, inflator); } @@ -276,7 +280,7 @@ namespace TTD //Many protos are set at creation, don't mess with them if they are already correct if(snpObject->SnapType->PrototypeVar != nullptr) { - Js::RecyclableObject* protoObj = Js::RecyclableObject::FromVar(inflator->InflateTTDVar(snpObject->SnapType->PrototypeVar)); + Js::RecyclableObject* protoObj = Js::VarTo(inflator->InflateTTDVar(snpObject->SnapType->PrototypeVar)); if(obj->GetType()->GetPrototype() != protoObj) { obj->SetPrototype(protoObj); @@ -304,7 +308,7 @@ namespace TTD continue; } - TTDAssert(!Js::JavascriptProxy::Is(obj), "I didn't think proxies could have real properties directly on them."); + TTDAssert(!Js::VarIs(obj), "I didn't think proxies could have real properties directly on them."); Js::PropertyId pid = handler->PropertyInfoArray[i].PropertyRecordId; @@ -331,7 +335,7 @@ namespace TTD } else { - //get the value to see if it is alreay ok + //get the value to see if it is already ok Js::Var currentValue = nullptr; Js::JavascriptOperators::GetOwnProperty(obj, pid, ¤tValue, obj->GetScriptContext(), nullptr); @@ -681,6 +685,21 @@ namespace TTD } #endif + Js::RecyclableObject* DoObjectInflation_SnapAwaitObject(const SnapObject* snpObject, InflateMap* inflator) + { + Js::DynamicObject* rcObj = ReuseObjectCheckAndReset(snpObject, inflator); + if(rcObj != nullptr) + { + return rcObj; + } + else + { + Js::ScriptContext* ctx = inflator->LookupScriptContext(snpObject->SnapType->ScriptContextLogId); + + return Js::DynamicObject::New(ctx->GetRecycler(), ctx->GetLibrary()->GetAwaitObjectType()); + } + } + Js::RecyclableObject* DoObjectInflation_SnapDynamicObject(const SnapObject* snpObject, InflateMap* inflator) { Js::DynamicObject* rcObj = ReuseObjectCheckAndReset(snpObject, inflator); @@ -708,7 +727,7 @@ namespace TTD Js::Var res = nullptr; ctx->GetThreadContext()->TTDContext->TTDExternalObjectFunctions.pfCreateExternalObject(ctx, nullptr, &res); - return Js::RecyclableObject::FromVar(res); + return Js::VarTo(res); } } @@ -739,7 +758,7 @@ namespace TTD void DoAddtlValueInstantiation_SnapScriptFunctionInfo(const SnapObject* snpObject, Js::RecyclableObject* obj, InflateMap* inflator) { - Js::ScriptFunction* fobj = Js::ScriptFunction::FromVar(obj); + Js::ScriptFunction* fobj = Js::VarTo(obj); SnapScriptFunctionInfo* snapFuncInfo = SnapObjectGetAddtlInfoAs(snpObject); DoAddtlValueInstantiation_SnapScriptFunctionInfoEx(snapFuncInfo, fobj, inflator); } @@ -748,7 +767,7 @@ namespace TTD { if(snapFuncInfo->CachedScopeObjId != TTD_INVALID_PTR_ID) { - func->SetCachedScope(Js::ActivationObjectEx::FromVar(inflator->LookupObject(snapFuncInfo->CachedScopeObjId))); + func->SetCachedScope(Js::VarTo(inflator->LookupObject(snapFuncInfo->CachedScopeObjId))); } if(snapFuncInfo->HomeObjId != TTD_INVALID_PTR_ID) @@ -1309,7 +1328,7 @@ namespace TTD Js::JavascriptPromiseCapability* capabilities = InflatePromiseCapabilityInfo(&aInfo->Capabilities, ctx, inflator); - if(!inflator->IsPromiseInfoDefined(aInfo->RemainingElementsWrapperId)) + if (!inflator->IsPromiseInfoDefined(aInfo->RemainingElementsWrapperId)) { Js::JavascriptPromiseAllResolveElementFunctionRemainingElementsWrapper* remainingWrapper = ctx->GetLibrary()->CreateRemainingElementsWrapper_TTD(ctx, aInfo->RemainingElementsValue); inflator->AddInflatedPromiseInfo(aInfo->RemainingElementsWrapperId, remainingWrapper); @@ -1376,6 +1395,95 @@ namespace TTD ////////////////// + //// + //AllSettledResolveOrRejectElementFunctionObject Info + Js::RecyclableObject* DoObjectInflation_SnapPromiseAllSettledResolveOrRejectElementFunctionInfo(const SnapObject* snpObject, InflateMap* inflator) + { + const SnapPromiseAllSettledResolveOrRejectElementFunctionInfo* aInfo = SnapObjectGetAddtlInfoAs(snpObject); + Js::ScriptContext* ctx = inflator->LookupScriptContext(snpObject->SnapType->ScriptContextLogId); + + Js::JavascriptPromiseCapability* capabilities = InflatePromiseCapabilityInfo(&aInfo->Capabilities, ctx, inflator); + + if(!inflator->IsPromiseInfoDefined(aInfo->RemainingElementsWrapperId)) + { + Js::JavascriptPromiseAllResolveElementFunctionRemainingElementsWrapper* remainingWrapper = ctx->GetLibrary()->CreateRemainingElementsWrapper_TTD(ctx, aInfo->RemainingElementsValue); + inflator->AddInflatedPromiseInfo(aInfo->RemainingElementsWrapperId, remainingWrapper); + } + Js::JavascriptPromiseAllResolveElementFunctionRemainingElementsWrapper* wrapper = inflator->LookupInflatedPromiseInfo(aInfo->RemainingElementsWrapperId); + + if (!inflator->IsPromiseInfoDefined(aInfo->AlreadyCalledWrapperId)) + { + Js::JavascriptPromiseResolveOrRejectFunctionAlreadyResolvedWrapper* alreadyCalledWrapper = ctx->GetLibrary()->CreateAlreadyCalledWrapper_TTD(ctx, aInfo->AlreadyCalledValue); + inflator->AddInflatedPromiseInfo(aInfo->AlreadyCalledWrapperId, alreadyCalledWrapper); + } + Js::JavascriptPromiseResolveOrRejectFunctionAlreadyResolvedWrapper* alreadyCalledWrapper = inflator->LookupInflatedPromiseInfo(aInfo->AlreadyCalledWrapperId); + + Js::RecyclableObject* values = inflator->LookupObject(aInfo->Values); + + return ctx->GetLibrary()->CreatePromiseAllSettledResolveOrRejectElementFunction_TTD(capabilities, aInfo->Index, wrapper, values, alreadyCalledWrapper, aInfo->IsRejecting); + } + + void EmitAddtlInfo_SnapPromiseAllSettledResolveOrRejectElementFunctionInfo(const SnapObject* snpObject, FileWriter* writer) + { + SnapPromiseAllSettledResolveOrRejectElementFunctionInfo* aInfo = SnapObjectGetAddtlInfoAs(snpObject); + + writer->WriteKey(NSTokens::Key::entry, NSTokens::Separator::CommaSeparator); + NSSnapValues::EmitPromiseCapabilityInfo(&aInfo->Capabilities, writer, NSTokens::Separator::NoSeparator); + + writer->WriteUInt32(NSTokens::Key::u32Val, aInfo->Index, NSTokens::Separator::CommaSeparator); + writer->WriteAddr(NSTokens::Key::ptrIdVal, aInfo->RemainingElementsWrapperId, NSTokens::Separator::CommaSeparator); + writer->WriteUInt32(NSTokens::Key::u32Val, aInfo->RemainingElementsValue, NSTokens::Separator::CommaSeparator); + + writer->WriteAddr(NSTokens::Key::ptrIdVal, aInfo->AlreadyCalledWrapperId, NSTokens::Separator::CommaSeparator); + writer->WriteBool(NSTokens::Key::boolVal, aInfo->AlreadyCalledValue, NSTokens::Separator::CommaSeparator); + + writer->WriteBool(NSTokens::Key::boolVal, aInfo->IsRejecting, NSTokens::Separator::CommaSeparator); + writer->WriteAddr(NSTokens::Key::ptrIdVal, aInfo->Values, NSTokens::Separator::CommaSeparator); + } + + void ParseAddtlInfo_SnapPromiseAllSettledResolveOrRejectElementFunctionInfo(SnapObject* snpObject, FileReader* reader, SlabAllocator& alloc) + { + SnapPromiseAllSettledResolveOrRejectElementFunctionInfo* aInfo = alloc.SlabAllocateStruct(); + + reader->ReadKey(NSTokens::Key::entry, true); + NSSnapValues::ParsePromiseCapabilityInfo(&aInfo->Capabilities, false, reader, alloc); + + aInfo->Index = reader->ReadUInt32(NSTokens::Key::u32Val, true); + aInfo->RemainingElementsWrapperId = reader->ReadAddr(NSTokens::Key::ptrIdVal, true); + aInfo->RemainingElementsValue = reader->ReadUInt32(NSTokens::Key::u32Val, true); + + aInfo->AlreadyCalledWrapperId = reader->ReadAddr(NSTokens::Key::ptrIdVal, true); + aInfo->AlreadyCalledValue = reader->ReadBool(NSTokens::Key::boolVal, true); + + aInfo->IsRejecting = reader->ReadBool(NSTokens::Key::boolVal, true); + aInfo->Values = reader->ReadAddr(NSTokens::Key::ptrIdVal, true); + + SnapObjectSetAddtlInfoAs(snpObject, aInfo); + } + + +#if ENABLE_SNAPSHOT_COMPARE + void AssertSnapEquiv_SnapPromiseAllSettledResolveOrRejectElementFunctionInfo(const SnapObject* sobj1, const SnapObject* sobj2, TTDCompareMap& compareMap) + { + SnapPromiseAllSettledResolveOrRejectElementFunctionInfo* aInfo1 = SnapObjectGetAddtlInfoAs(sobj1); + SnapPromiseAllSettledResolveOrRejectElementFunctionInfo* aInfo2 = SnapObjectGetAddtlInfoAs(sobj2); + + NSSnapValues::AssertSnapEquiv(&aInfo1->Capabilities, &aInfo2->Capabilities, compareMap); + + compareMap.DiagnosticAssert(aInfo1->Index == aInfo2->Index); + compareMap.DiagnosticAssert(aInfo1->RemainingElementsValue == aInfo2->RemainingElementsValue); + compareMap.DiagnosticAssert(aInfo1->AlreadyCalledValue == aInfo2->AlreadyCalledValue); + compareMap.DiagnosticAssert(aInfo1->IsRejecting == aInfo2->IsRejecting); + + compareMap.CheckConsistentAndAddPtrIdMapping_Special(aInfo1->Values, aInfo2->Values, _u("values")); + + compareMap.CheckConsistentAndAddPtrIdMapping_NoEnqueue(aInfo1->RemainingElementsWrapperId, aInfo2->RemainingElementsWrapperId); + compareMap.CheckConsistentAndAddPtrIdMapping_NoEnqueue(aInfo1->AlreadyCalledWrapperId, aInfo2->AlreadyCalledWrapperId); + } +#endif + + ////////////////// + Js::RecyclableObject* DoObjectInflation_SnapBoxedValue(const SnapObject* snpObject, InflateMap* inflator) { //Boxed values are not too common and have special internal state so it seems easiest to always re-create them. @@ -1801,7 +1909,7 @@ namespace TTD SnapTypedArrayInfo* typedArrayInfo = SnapObjectGetAddtlInfoAs(snpObject); Js::JavascriptLibrary* jslib = ctx->GetLibrary(); - Js::ArrayBuffer* arrayBuffer = Js::ArrayBuffer::FromVar(inflator->LookupObject(typedArrayInfo->ArrayBufferAddr)); + Js::ArrayBuffer* arrayBuffer = Js::VarTo(inflator->LookupObject(typedArrayInfo->ArrayBufferAddr)); Js::Var tab = nullptr; switch(snpObject->SnapType->JsTypeId) @@ -1850,7 +1958,7 @@ namespace TTD break; } - return Js::RecyclableObject::FromVar(tab); + return Js::VarTo(tab); } void EmitAddtlInfo_SnapTypedArrayInfo(const SnapObject* snpObject, FileWriter* writer) @@ -2217,9 +2325,9 @@ namespace TTD } } - generator->SetFrameSlots(generatorInfo->frame_slotCount, frameSlotArray); if (generatorInfo->byteCodeReader_offset > 0) { + generator->SetFrameSlots(generatorInfo->frame_slotCount, frameSlotArray); frame->InitializeClosures(); frame->GetReader()->SetCurrentOffset(generatorInfo->byteCodeReader_offset); } @@ -2337,7 +2445,7 @@ namespace TTD void DoAddtlValueInstantiation_SnapGeneratorFunctionInfo(const SnapObject *snpObject, Js::RecyclableObject *obj, InflateMap *inflator) { - Js::JavascriptGeneratorFunction *func = Js::JavascriptGeneratorFunction::FromVar(obj); + Js::JavascriptGeneratorFunction *func = Js::VarTo(obj); SnapGeneratorFunctionInfo *sfi = SnapObjectGetAddtlInfoAs(snpObject); if(sfi->scriptFunction != TTD_INVALID_PTR_ID) @@ -2379,7 +2487,7 @@ namespace TTD void DoAddtlValueInstantiation_SnapAsyncFunction(const SnapObject* snpObject, Js::RecyclableObject* obj, InflateMap* inflator) { - Js::JavascriptAsyncFunction* func = Js::JavascriptAsyncFunction::FromVar(obj); + Js::JavascriptAsyncFunction* func = Js::VarTo(obj); SnapGeneratorFunctionInfo* info = SnapObjectGetAddtlInfoAs(snpObject); if (info->scriptFunction != TTD_INVALID_PTR_ID) @@ -2456,55 +2564,10 @@ namespace TTD //////////////////// - Js::RecyclableObject* DoObjectInflation_SnapJavascriptPromiseAsyncSpawnExecutorFunction(const SnapObject *snpObject, InflateMap *inflator) + Js::RecyclableObject *DoObjectInflation_SnapJavascriptAsyncSpawnStepFunctionInfo(const SnapObject *snpObject, InflateMap *inflator) { Js::ScriptContext *ctx = inflator->LookupScriptContext(snpObject->SnapType->ScriptContextLogId); - SnapJavascriptPromiseAsyncSpawnExecutorFunctionInfo* info = SnapObjectGetAddtlInfoAs(snpObject); - Js::Var target = (info->target!= nullptr) ? inflator->InflateTTDVar(info->target) : nullptr; - - Js::JavascriptGenerator* generator = nullptr; - if (info->generator != TTD_INVALID_PTR_ID) - { - generator = reinterpret_cast(inflator->LookupObject(info->generator)); - } - - // TODO; why do we need to cast here?? - Js::RecyclableObject* res = reinterpret_cast(ctx->GetLibrary()->CreatePromiseAsyncSpawnExecutorFunction(generator, target)); - return res; - } - - void DoAddtlValueInstantiation_SnapJavascriptPromiseAsyncSpawnExecutorFunction(const SnapObject* snpObject, Js::RecyclableObject* obj, InflateMap* inflator) - { - } - - void EmitAddtlInfo_SnapJavascriptPromiseAsyncSpawnExecutorFunction(const SnapObject* snpObject, FileWriter* writer) - { - SnapJavascriptPromiseAsyncSpawnExecutorFunctionInfo* info = SnapObjectGetAddtlInfoAs(snpObject); - writer->WriteAddr(NSTokens::Key::objectId, info->generator, NSTokens::Separator::CommaSeparator); - writer->WriteKey(NSTokens::Key::target, NSTokens::Separator::CommaSeparator); - NSSnapValues::EmitTTDVar(info->target, writer, NSTokens::Separator::NoSeparator); - } - - void ParseAddtlInfo_SnapJavascriptPromiseAsyncSpawnExecutorFunction(SnapObject* snpObject, FileReader* reader, SlabAllocator& alloc) - { - SnapJavascriptPromiseAsyncSpawnExecutorFunctionInfo* info = alloc.SlabAllocateStruct(); - info->generator = reader->ReadAddr(NSTokens::Key::objectId, true); - reader->ReadKey(NSTokens::Key::target, true); - info->target= NSSnapValues::ParseTTDVar(false, reader); - SnapObjectSetAddtlInfoAs(snpObject, info); - } -#if ENABLE_SNAPSHOT_COMPARE - void AssertSnapEquiv_SnapJavascriptPromiseAsyncSpawnExecutorFunction(const SnapObject* sobj1, const SnapObject* sobj2, TTDCompareMap& compareMap) - { - } -#endif - - //////////////////// - - Js::RecyclableObject *DoObjectInflation_SnapJavascriptPromiseAsyncSpawnStepArgumentExecutorFunctionInfo(const SnapObject *snpObject, InflateMap *inflator) - { - Js::ScriptContext *ctx = inflator->LookupScriptContext(snpObject->SnapType->ScriptContextLogId); - SnapJavascriptPromiseAsyncSpawnStepArgumentExecutorFunctionInfo* info = SnapObjectGetAddtlInfoAs(snpObject); + SnapJavascriptAsyncSpawnStepFunctionInfo* info = SnapObjectGetAddtlInfoAs(snpObject); Js::Var reject = (info->reject != nullptr) ? inflator->InflateTTDVar(info->reject) : nullptr; Js::Var resolve = (info->resolve != nullptr) ? inflator->InflateTTDVar(info->resolve) : nullptr; Js::Var argument = (info->argument != nullptr) ? inflator->InflateTTDVar(info->argument) : nullptr; @@ -2520,28 +2583,28 @@ namespace TTD switch (info->entryPoint) { case 1: - entryPoint = Js::JavascriptPromise::EntryJavascriptPromiseAsyncSpawnStepNextExecutorFunction; + entryPoint = Js::JavascriptAsyncFunction::EntryAsyncSpawnStepNextFunction; break; case 2: - entryPoint = Js::JavascriptPromise::EntryJavascriptPromiseAsyncSpawnStepThrowExecutorFunction; + entryPoint = Js::JavascriptAsyncFunction::EntryAsyncSpawnStepThrowFunction; break; case 3: - entryPoint = Js::JavascriptPromise::EntryJavascriptPromiseAsyncSpawnCallStepExecutorFunction; + entryPoint = Js::JavascriptAsyncFunction::EntryAsyncSpawnCallStepFunction; break; default: - TTDAssert(false, "Unexpected value for entryPoint when inflating JavascriptPromiseAsyncSpawnStepArgumentExecutorFunction"); + TTDAssert(false, "Unexpected value for entryPoint when inflating JavascriptAsyncSpawnStepFunction"); break; } - return ctx->GetLibrary()->CreatePromiseAsyncSpawnStepArgumentExecutorFunction(entryPoint, generator, argument, resolve, reject, isReject); + return ctx->GetLibrary()->CreateAsyncSpawnStepFunction(entryPoint, generator, argument, resolve, reject, isReject); } - void DoAddtlValueInstantiation_SnapJavascriptPromiseAsyncSpawnStepArgumentExecutorFunctionInfo(const SnapObject* snpObject, Js::RecyclableObject* obj, InflateMap* inflator) + void DoAddtlValueInstantiation_SnapJavascriptAsyncSpawnStepFunctionInfo(const SnapObject* snpObject, Js::RecyclableObject* obj, InflateMap* inflator) { } - - void EmitAddtlInfo_SnapJavascriptPromiseAsyncSpawnStepArgumentExecutorFunctionInfo(const SnapObject* snpObject, FileWriter* writer) + + void EmitAddtlInfo_SnapJavascriptAsyncSpawnStepFunctionInfo(const SnapObject* snpObject, FileWriter* writer) { - SnapJavascriptPromiseAsyncSpawnStepArgumentExecutorFunctionInfo* info = SnapObjectGetAddtlInfoAs(snpObject); + SnapJavascriptAsyncSpawnStepFunctionInfo* info = SnapObjectGetAddtlInfoAs(snpObject); writer->WriteAddr(NSTokens::Key::objectId, info->generator, NSTokens::Separator::CommaSeparator); writer->WriteKey(NSTokens::Key::reject, NSTokens::Separator::CommaSeparator); NSSnapValues::EmitTTDVar(info->reject, writer, NSTokens::Separator::NoSeparator); @@ -2553,9 +2616,9 @@ namespace TTD writer->WriteBool(NSTokens::Key::boolVal, info->isReject, NSTokens::Separator::CommaSeparator); } - void ParseAddtlInfo_SnapJavascriptPromiseAsyncSpawnStepArgumentExecutorFunctionInfo(SnapObject* snpObject, FileReader* reader, SlabAllocator& alloc) + void ParseAddtlInfo_SnapJavascriptAsyncSpawnStepFunctionInfo(SnapObject* snpObject, FileReader* reader, SlabAllocator& alloc) { - SnapJavascriptPromiseAsyncSpawnStepArgumentExecutorFunctionInfo* info = alloc.SlabAllocateStruct(); + SnapJavascriptAsyncSpawnStepFunctionInfo* info = alloc.SlabAllocateStruct(); info->generator = reader->ReadAddr(NSTokens::Key::objectId, true); reader->ReadKey(NSTokens::Key::reject, true); info->reject = NSSnapValues::ParseTTDVar(false, reader); @@ -2565,11 +2628,11 @@ namespace TTD info->argument = NSSnapValues::ParseTTDVar(false, reader); info->entryPoint = reader->ReadUInt32(NSTokens::Key::u32Val, true); info->isReject = reader->ReadBool(NSTokens::Key::boolVal, true); - SnapObjectSetAddtlInfoAs(snpObject, info); + SnapObjectSetAddtlInfoAs(snpObject, info); } #if ENABLE_SNAPSHOT_COMPARE - void AssertSnapEquiv_SnapJavascriptPromiseAsyncSpawnStepArgumentExecutorFunctionInfo(const SnapObject* sobj1, const SnapObject* sobj2, TTDCompareMap& compareMap) + void AssertSnapEquiv_SnapJavascriptAsyncSpawnStepFunctionInfo(const SnapObject* sobj1, const SnapObject* sobj2, TTDCompareMap& compareMap) { } #endif ////////// diff --git a/lib/Runtime/Debug/TTSnapObjects.h b/lib/Runtime/Debug/TTSnapObjects.h index 9bf131bbe08..115d987d6b2 100644 --- a/lib/Runtime/Debug/TTSnapObjects.h +++ b/lib/Runtime/Debug/TTSnapObjects.h @@ -66,7 +66,7 @@ namespace TTD //The numeric indexed properties associated with the object (or invalid if no associated array) TTD_PTR_ID OptIndexedObjectArray; - //Objects this depends on when creating (or nullptr if no dependencies) + //Objects this depends on when creating (or nullptr if no dependencies) DependsOnInfo* OptDependsOnInfo; //A ptr for the remaining info which must be cast when needed by handler methods @@ -127,16 +127,16 @@ namespace TTD Js::DynamicObject* ObjectPropertyReset_WellKnown(const SnapObject* snpObject, Js::DynamicObject* dynObj, InflateMap* inflator); Js::DynamicObject* ObjectPropertyReset_General(const SnapObject* snpObject, Js::DynamicObject* dynObj, InflateMap* inflator); - //Set all the general properties for the object + //Set all the general properties for the object void StdPropertyRestore(const SnapObject* snpObject, Js::DynamicObject* obj, InflateMap* inflator); - //serialize the object data + //serialize the object data void EmitObject(const SnapObject* snpObject, FileWriter* writer, NSTokens::Separator separator, const SnapObjectVTable* vtable, ThreadContext* threadContext); //de-serialize a SnapObject void ParseObject(SnapObject* snpObject, bool readSeparator, FileReader* reader, SlabAllocator& alloc, const SnapObjectVTable* vtable, const TTDIdentifierDictionary& ptrIdToTypeMap); -#if ENABLE_SNAPSHOT_COMPARE +#if ENABLE_SNAPSHOT_COMPARE void AssertSnapEquiv(const SnapObject* sobj1, const SnapObject* sobj2, TTDCompareMap& compareMap); #endif @@ -155,6 +155,8 @@ namespace TTD //ParseAddtlInfo is a nop //AssertSnapEquiv is a nop + Js::RecyclableObject* DoObjectInflation_SnapAwaitObject(const SnapObject* snpObject, InflateMap* inflator); + ////////////////// //A struct that represents a script function object @@ -190,7 +192,7 @@ namespace TTD void EmitAddtlInfo_SnapScriptFunctionInfoEx(const SnapScriptFunctionInfo* snapFuncInfo, FileWriter* writer); void ParseAddtlInfo_SnapScriptFunctionInfoEx(SnapScriptFunctionInfo* snapFuncInfo, FileReader* reader, SlabAllocator& alloc); -#if ENABLE_SNAPSHOT_COMPARE +#if ENABLE_SNAPSHOT_COMPARE void AssertSnapEquiv_SnapScriptFunctionInfo(const SnapObject* sobj1, const SnapObject* sobj2, TTDCompareMap& compareMap); #endif @@ -211,7 +213,7 @@ namespace TTD void EmitAddtlInfo_SnapExternalFunctionInfo(const SnapObject* snpObject, FileWriter* writer); void ParseAddtlInfo_SnapExternalFunctionInfo(SnapObject* snpObject, FileReader* reader, SlabAllocator& alloc); -#if ENABLE_SNAPSHOT_COMPARE +#if ENABLE_SNAPSHOT_COMPARE void AssertSnapEquiv_SnapExternalFunctionInfo(const SnapObject* sobj1, const SnapObject* sobj2, TTDCompareMap& compareMap); #endif @@ -223,7 +225,7 @@ namespace TTD void EmitAddtlInfo_SnapRevokerFunctionInfo(const SnapObject* snpObject, FileWriter* writer); void ParseAddtlInfo_SnapRevokerFunctionInfo(SnapObject* snpObject, FileReader* reader, SlabAllocator& alloc); -#if ENABLE_SNAPSHOT_COMPARE +#if ENABLE_SNAPSHOT_COMPARE void AssertSnapEquiv_SnapRevokerFunctionInfo(const SnapObject* sobj1, const SnapObject* sobj2, TTDCompareMap& compareMap); #endif @@ -251,7 +253,7 @@ namespace TTD void EmitAddtlInfo_SnapBoundFunctionInfo(const SnapObject* snpObject, FileWriter* writer); void ParseAddtlInfo_SnapBoundFunctionInfo(SnapObject* snpObject, FileReader* reader, SlabAllocator& alloc); -#if ENABLE_SNAPSHOT_COMPARE +#if ENABLE_SNAPSHOT_COMPARE void AssertSnapEquiv_SnapBoundFunctionInfo(const SnapObject* sobj1, const SnapObject* sobj2, TTDCompareMap& compareMap); #endif @@ -277,7 +279,7 @@ namespace TTD //number of arguments uint32 NumOfArguments; - //The frame object + //The frame object bool IsFrameNullPtr; TTD_PTR_ID FrameObject; @@ -375,7 +377,7 @@ namespace TTD TTDVar Result; // - //We have the reaction info's inline even theought we want to preserve their pointer identity when inflating. + //We have the reaction info's inline even theought we want to preserve their pointer identity when inflating. //So we duplicate data here but avoid needed to add more kinds to the mark/extract logic and will check on inflation. // @@ -391,7 +393,7 @@ namespace TTD void EmitAddtlInfo_SnapPromiseInfo(const SnapObject* snpObject, FileWriter* writer); void ParseAddtlInfo_SnapPromiseInfo(SnapObject* snpObject, FileReader* reader, SlabAllocator& alloc); -#if ENABLE_SNAPSHOT_COMPARE +#if ENABLE_SNAPSHOT_COMPARE void AssertSnapEquiv_SnapPromiseInfo(const SnapObject* sobj1, const SnapObject* sobj2, TTDCompareMap& compareMap); #endif @@ -412,7 +414,7 @@ namespace TTD void EmitAddtlInfo_SnapPromiseResolveOrRejectFunctionInfo(const SnapObject* snpObject, FileWriter* writer); void ParseAddtlInfo_SnapPromiseResolveOrRejectFunctionInfo(SnapObject* snpObject, FileReader* reader, SlabAllocator& alloc); -#if ENABLE_SNAPSHOT_COMPARE +#if ENABLE_SNAPSHOT_COMPARE void AssertSnapEquiv_SnapPromiseResolveOrRejectFunctionInfo(const SnapObject* sobj1, const SnapObject* sobj2, TTDCompareMap& compareMap); #endif @@ -430,7 +432,7 @@ namespace TTD void EmitAddtlInfo_SnapPromiseReactionTaskFunctionInfo(const SnapObject* snpObject, FileWriter* writer); void ParseAddtlInfo_SnapPromiseReactionTaskFunctionInfo(SnapObject* snpObject, FileReader* reader, SlabAllocator& alloc); -#if ENABLE_SNAPSHOT_COMPARE +#if ENABLE_SNAPSHOT_COMPARE void AssertSnapEquiv_SnapPromiseReactionTaskFunctionInfo(const SnapObject* sobj1, const SnapObject* sobj2, TTDCompareMap& compareMap); #endif @@ -453,10 +455,37 @@ namespace TTD void EmitAddtlInfo_SnapPromiseAllResolveElementFunctionInfo(const SnapObject* snpObject, FileWriter* writer); void ParseAddtlInfo_SnapPromiseAllResolveElementFunctionInfo(SnapObject* snpObject, FileReader* reader, SlabAllocator& alloc); -#if ENABLE_SNAPSHOT_COMPARE +#if ENABLE_SNAPSHOT_COMPARE void AssertSnapEquiv_SnapPromiseAllResolveElementFunctionInfo(const SnapObject* sobj1, const SnapObject* sobj2, TTDCompareMap& compareMap); #endif + //// + //AllSettledResolveOrRejectElementFunctionObject Info + struct SnapPromiseAllSettledResolveOrRejectElementFunctionInfo + { + NSSnapValues::SnapPromiseCapabilityInfo Capabilities; + uint32 Index; + + TTD_PTR_ID RemainingElementsWrapperId; + uint32 RemainingElementsValue; + + TTD_PTR_ID AlreadyCalledWrapperId; + bool AlreadyCalledValue; + + bool IsRejecting; + + TTD_PTR_ID Values; + }; + + Js::RecyclableObject* DoObjectInflation_SnapPromiseAllSettledResolveOrRejectElementFunctionInfo(const SnapObject* snpObject, InflateMap* inflator); + //DoAddtlValueInstantiation is a nop + void EmitAddtlInfo_SnapPromiseAllSettledResolveOrRejectElementFunctionInfo(const SnapObject* snpObject, FileWriter* writer); + void ParseAddtlInfo_SnapPromiseAllSettledResolveOrRejectElementFunctionInfo(SnapObject* snpObject, FileReader* reader, SlabAllocator& alloc); + +#if ENABLE_SNAPSHOT_COMPARE + void AssertSnapEquiv_SnapPromiseAllSettledResolveOrRejectElementFunctionInfo(const SnapObject* sobj1, const SnapObject* sobj2, TTDCompareMap& compareMap); +#endif + ////////////////// //// @@ -467,7 +496,7 @@ namespace TTD void EmitAddtlInfo_SnapBoxedValue(const SnapObject* snpObject, FileWriter* writer); void ParseAddtlInfo_SnapBoxedValue(SnapObject* snpObject, FileReader* reader, SlabAllocator& alloc); -#if ENABLE_SNAPSHOT_COMPARE +#if ENABLE_SNAPSHOT_COMPARE void AssertSnapEquiv_SnapBoxedValue(const SnapObject* sobj1, const SnapObject* sobj2, TTDCompareMap& compareMap); #endif @@ -479,7 +508,7 @@ namespace TTD void EmitAddtlInfo_SnapDate(const SnapObject* snpObject, FileWriter* writer); void ParseAddtlInfo_SnapDate(SnapObject* snpObject, FileReader* reader, SlabAllocator& alloc); -#if ENABLE_SNAPSHOT_COMPARE +#if ENABLE_SNAPSHOT_COMPARE void AssertSnapEquiv_SnapDate(const SnapObject* sobj1, const SnapObject* sobj2, TTDCompareMap& compareMap); #endif @@ -507,7 +536,7 @@ namespace TTD void EmitAddtlInfo_SnapRegexInfo(const SnapObject* snpObject, FileWriter* writer); void ParseAddtlInfo_SnapRegexInfo(SnapObject* snpObject, FileReader* reader, SlabAllocator& alloc); -#if ENABLE_SNAPSHOT_COMPARE +#if ENABLE_SNAPSHOT_COMPARE void AssertSnapEquiv_SnapRegexInfo(const SnapObject* sobj1, const SnapObject* sobj2, TTDCompareMap& compareMap); #endif @@ -632,7 +661,7 @@ namespace TTD void SnapArrayInfo_EmitValue(TTDVar value, FileWriter* writer); void SnapArrayInfo_ParseValue(TTDVar* into, FileReader* reader, SlabAllocator& alloc); -#if ENABLE_SNAPSHOT_COMPARE +#if ENABLE_SNAPSHOT_COMPARE void SnapArrayInfo_EquivValue(int32 val1, int32 val2, TTDCompareMap& compareMap, int32 i); void SnapArrayInfo_EquivValue(double val1, double val2, TTDCompareMap& compareMap, int32 i); void SnapArrayInfo_EquivValue(TTDVar val1, TTDVar val2, TTDCompareMap& compareMap, int32 i); @@ -669,7 +698,7 @@ namespace TTD Js::DynamicObject* rcObj = ReuseObjectCheckAndReset(snpObject, inflator); if(rcObj != nullptr) { - Js::JavascriptArray::FromVar(rcObj)->SetLength(preAllocSpace); + Js::VarTo(rcObj)->SetLength(preAllocSpace); return rcObj; } else @@ -1147,23 +1176,7 @@ namespace TTD void AssertSnapEquiv_SnapAsyncFunction(const SnapObject* sobj1, const SnapObject* sobj2, TTDCompareMap& compareMap); #endif - ////////// - struct SnapJavascriptPromiseAsyncSpawnExecutorFunctionInfo - { - TTD_PTR_ID generator; - TTDVar target; - }; - - Js::RecyclableObject *DoObjectInflation_SnapJavascriptPromiseAsyncSpawnExecutorFunction(const SnapObject *snpObject, InflateMap *inflator); - void DoAddtlValueInstantiation_SnapJavascriptPromiseAsyncSpawnExecutorFunction(const SnapObject* snpObject, Js::RecyclableObject* obj, InflateMap* inflator); - void EmitAddtlInfo_SnapJavascriptPromiseAsyncSpawnExecutorFunction(const SnapObject* snpObject, FileWriter* writer); - void ParseAddtlInfo_SnapJavascriptPromiseAsyncSpawnExecutorFunction(SnapObject* snpObject, FileReader* reader, SlabAllocator& alloc); -#if ENABLE_SNAPSHOT_COMPARE - void AssertSnapEquiv_SnapJavascriptPromiseAsyncSpawnExecutorFunction(const SnapObject* sobj1, const SnapObject* sobj2, TTDCompareMap& compareMap); -#endif - ////////// - - struct SnapJavascriptPromiseAsyncSpawnStepArgumentExecutorFunctionInfo + struct SnapJavascriptAsyncSpawnStepFunctionInfo { TTD_PTR_ID generator; TTDVar reject; @@ -1173,16 +1186,15 @@ namespace TTD uint32 entryPoint; }; - Js::RecyclableObject *DoObjectInflation_SnapJavascriptPromiseAsyncSpawnStepArgumentExecutorFunctionInfo(const SnapObject *snpObject, InflateMap *inflator); - void DoAddtlValueInstantiation_SnapJavascriptPromiseAsyncSpawnStepArgumentExecutorFunctionInfo(const SnapObject* snpObject, Js::RecyclableObject* obj, InflateMap* inflator); - void EmitAddtlInfo_SnapJavascriptPromiseAsyncSpawnStepArgumentExecutorFunctionInfo(const SnapObject* snpObject, FileWriter* writer); - void ParseAddtlInfo_SnapJavascriptPromiseAsyncSpawnStepArgumentExecutorFunctionInfo(SnapObject* snpObject, FileReader* reader, SlabAllocator& alloc); + Js::RecyclableObject *DoObjectInflation_SnapJavascriptAsyncSpawnStepFunctionInfo(const SnapObject *snpObject, InflateMap *inflator); + void DoAddtlValueInstantiation_SnapJavascriptAsyncSpawnStepFunctionInfo(const SnapObject* snpObject, Js::RecyclableObject* obj, InflateMap* inflator); + void EmitAddtlInfo_SnapJavascriptAsyncSpawnStepFunctionInfo(const SnapObject* snpObject, FileWriter* writer); + void ParseAddtlInfo_SnapJavascriptAsyncSpawnStepFunctionInfo(SnapObject* snpObject, FileReader* reader, SlabAllocator& alloc); #if ENABLE_SNAPSHOT_COMPARE - void AssertSnapEquiv_SnapJavascriptPromiseAsyncSpawnStepArgumentExecutorFunctionInfo(const SnapObject* sobj1, const SnapObject* sobj2, TTDCompareMap& compareMap); + void AssertSnapEquiv_SnapJavascriptAsyncSpawnStepFunctionInfo(const SnapObject* sobj1, const SnapObject* sobj2, TTDCompareMap& compareMap); #endif ////////// } } #endif - diff --git a/lib/Runtime/Debug/TTSnapValues.cpp b/lib/Runtime/Debug/TTSnapValues.cpp index 931649ad587..cee7dada1ea 100644 --- a/lib/Runtime/Debug/TTSnapValues.cpp +++ b/lib/Runtime/Debug/TTSnapValues.cpp @@ -29,7 +29,7 @@ namespace TTD return false; } - Js::TypeId tid = Js::RecyclableObject::FromVar(v)->GetTypeId(); + Js::TypeId tid = Js::VarTo(v)->GetTypeId(); return tid <= Js::TypeIds_LastToPrimitiveType; } @@ -40,7 +40,7 @@ namespace TTD return false; } - Js::TypeId tid = Js::RecyclableObject::FromVar(v)->GetTypeId(); + Js::TypeId tid = Js::VarTo(v)->GetTypeId(); return tid > Js::TypeIds_LastToPrimitiveType; } @@ -332,20 +332,20 @@ namespace TTD case Js::TypeIds_Null: break; case Js::TypeIds_Boolean: - snapValue->u_boolValue = Js::JavascriptBoolean::FromVar(jsValue)->GetValue(); + snapValue->u_boolValue = Js::VarTo(jsValue)->GetValue(); break; case Js::TypeIds_Number: snapValue->u_doubleValue = Js::JavascriptNumber::GetValue(jsValue); break; case Js::TypeIds_Int64Number: - snapValue->u_int64Value = Js::JavascriptInt64Number::FromVar(jsValue)->GetValue(); + snapValue->u_int64Value = Js::VarTo(jsValue)->GetValue(); break; case Js::TypeIds_UInt64Number: - snapValue->u_uint64Value = Js::JavascriptUInt64Number::FromVar(jsValue)->GetValue(); + snapValue->u_uint64Value = Js::VarTo(jsValue)->GetValue(); break; case Js::TypeIds_String: snapValue->u_stringValue = alloc.SlabAllocateStruct(); - alloc.CopyStringIntoWLength(Js::JavascriptString::FromVar(jsValue)->GetString(), Js::JavascriptString::FromVar(jsValue)->GetLength(), *(snapValue->u_stringValue)); + alloc.CopyStringIntoWLength(Js::VarTo(jsValue)->GetString(), Js::VarTo(jsValue)->GetLength(), *(snapValue->u_stringValue)); break; case Js::TypeIds_Symbol: snapValue->u_propertyIdValue = jslib->ExtractPrimitveSymbolId_TTD(jsValue); @@ -409,7 +409,7 @@ namespace TTD } } - inflator->AddObject(snapValue->PrimitiveValueId, Js::RecyclableObject::FromVar(res)); + inflator->AddObject(snapValue->PrimitiveValueId, Js::VarTo(res)); } void EmitSnapPrimitiveValue(const SnapPrimitiveValue* snapValue, FileWriter* writer, NSTokens::Separator separator) @@ -1653,7 +1653,7 @@ namespace TTD for(int32 k = 0; k < pendingAsyncList.Count(); ++k) { const TTDPendingAsyncBufferModification& pk = pendingAsyncList.Item(k); - snapCtx->PendingAsyncModArray[k].LogId = objToLogIdMap.Item(Js::RecyclableObject::FromVar(pk.ArrayBufferVar)); + snapCtx->PendingAsyncModArray[k].LogId = objToLogIdMap.Item(Js::VarTo(pk.ArrayBufferVar)); snapCtx->PendingAsyncModArray[k].Index = pk.Index; } } @@ -1762,8 +1762,8 @@ namespace TTD Js::RecyclableObject* buff = intoCtx->GetThreadContext()->TTDContext->LookupObjectForLogID(snpCtx->PendingAsyncModArray[i].LogId); uint32 index = snpCtx->PendingAsyncModArray[i].Index; - TTDAssert(Js::ArrayBuffer::Is(buff), "Not an ArrayBuffer!!!"); - intoCtx->TTDContextInfo->AddToAsyncPendingList(Js::ArrayBuffer::FromVar(buff), index); + TTDAssert(Js::VarIs(buff), "Not an ArrayBuffer!!!"); + intoCtx->TTDContextInfo->AddToAsyncPendingList(Js::VarTo(buff), index); } } diff --git a/lib/Runtime/Debug/TTSnapshot.cpp b/lib/Runtime/Debug/TTSnapshot.cpp index c5bdb582b66..59e3d430a25 100644 --- a/lib/Runtime/Debug/TTSnapshot.cpp +++ b/lib/Runtime/Debug/TTSnapshot.cpp @@ -210,7 +210,7 @@ namespace TTD res = ctx->TTDWellKnownInfo->LookupKnownObjectFromPath(snpObject->OptWellKnownToken); //Well known objects may always be dirty (e.g. we are re-using a context) so we always want to clean them - res = NSSnapObjects::ObjectPropertyReset_WellKnown(snpObject, Js::DynamicObject::FromVar(res), inflator); + res = NSSnapObjects::ObjectPropertyReset_WellKnown(snpObject, Js::VarTo(res), inflator); TTDAssert(res != nullptr, "Should always produce a result!!!"); } else @@ -229,7 +229,7 @@ namespace TTD if(Js::DynamicType::Is(snpObject->SnapType->JsTypeId)) { //Always ok to be x-site but if snap was x-site then we must be too - Js::DynamicObject* dynObj = Js::DynamicObject::FromVar(res); + Js::DynamicObject* dynObj = Js::VarTo(res); if(snpObject->IsCrossSite && !dynObj->IsCrossSiteObject()) { Js::CrossSite::MarshalCrossSite_TTDInflate(dynObj); @@ -303,6 +303,7 @@ namespace TTD //For the objects that have inflators this->m_snapObjectVTableArray[(uint32)NSSnapObjects::SnapObjectType::SnapDynamicObject] = { &NSSnapObjects::DoObjectInflation_SnapDynamicObject, nullptr, nullptr, nullptr }; + this->m_snapObjectVTableArray[(uint32)NSSnapObjects::SnapObjectType::SnapAwaitObject] = { &NSSnapObjects::DoObjectInflation_SnapAwaitObject, nullptr, nullptr, nullptr }; this->m_snapObjectVTableArray[(uint32)NSSnapObjects::SnapObjectType::SnapExternalObject] = { &NSSnapObjects::DoObjectInflation_SnapExternalObject, nullptr, nullptr, nullptr }; this->m_snapObjectVTableArray[(uint32)NSSnapObjects::SnapObjectType::SnapScriptFunctionObject] = { &NSSnapObjects::DoObjectInflation_SnapScriptFunctionInfo, &NSSnapObjects::DoAddtlValueInstantiation_SnapScriptFunctionInfo, &NSSnapObjects::EmitAddtlInfo_SnapScriptFunctionInfo, &NSSnapObjects::ParseAddtlInfo_SnapScriptFunctionInfo }; @@ -363,17 +364,11 @@ namespace TTD &NSSnapObjects::DoAddtlValueInstantiation_SnapGeneratorInfo, &NSSnapObjects::EmitAddtlInfo_SnapGeneratorInfo, &NSSnapObjects::ParseAddtlInfo_SnapGeneratorInfo }; - this->m_snapObjectVTableArray[(uint32)NSSnapObjects::SnapObjectType::JavascriptPromiseAsyncSpawnExecutorFunction] = { - &NSSnapObjects::DoObjectInflation_SnapJavascriptPromiseAsyncSpawnExecutorFunction, - &NSSnapObjects::DoAddtlValueInstantiation_SnapJavascriptPromiseAsyncSpawnExecutorFunction, - &NSSnapObjects::EmitAddtlInfo_SnapJavascriptPromiseAsyncSpawnExecutorFunction, - &NSSnapObjects::ParseAddtlInfo_SnapJavascriptPromiseAsyncSpawnExecutorFunction - }; - this->m_snapObjectVTableArray[(uint32)NSSnapObjects::SnapObjectType::JavascriptPromiseAsyncSpawnStepArgumentExecutorFunction] = { - &NSSnapObjects::DoObjectInflation_SnapJavascriptPromiseAsyncSpawnStepArgumentExecutorFunctionInfo, - &NSSnapObjects::DoAddtlValueInstantiation_SnapJavascriptPromiseAsyncSpawnStepArgumentExecutorFunctionInfo, - &NSSnapObjects::EmitAddtlInfo_SnapJavascriptPromiseAsyncSpawnStepArgumentExecutorFunctionInfo, - &NSSnapObjects::ParseAddtlInfo_SnapJavascriptPromiseAsyncSpawnStepArgumentExecutorFunctionInfo + this->m_snapObjectVTableArray[(uint32)NSSnapObjects::SnapObjectType::JavascriptAsyncSpawnStepFunction] = { + &NSSnapObjects::DoObjectInflation_SnapJavascriptAsyncSpawnStepFunctionInfo, + &NSSnapObjects::DoAddtlValueInstantiation_SnapJavascriptAsyncSpawnStepFunctionInfo, + &NSSnapObjects::EmitAddtlInfo_SnapJavascriptAsyncSpawnStepFunctionInfo, + &NSSnapObjects::ParseAddtlInfo_SnapJavascriptAsyncSpawnStepFunctionInfo }; @@ -518,7 +513,7 @@ namespace TTD if(snpObj->OptWellKnownToken != TTD_INVALID_WELLKNOWN_TOKEN) { Js::RecyclableObject* rObj = inflator->FindReusableObject_WellKnowReuseCheck(snpObj->ObjectPtrId); - bool blocking = NSSnapObjects::DoesObjectBlockScriptContextReuse(snpObj, Js::DynamicObject::FromVar(rObj), inflator); + bool blocking = NSSnapObjects::DoesObjectBlockScriptContextReuse(snpObj, Js::VarTo(rObj), inflator); if(blocking) { @@ -609,7 +604,7 @@ namespace TTD if(Js::DynamicType::Is(sobj->SnapType->JsTypeId)) { - NSSnapObjects::StdPropertyRestore(sobj, Js::DynamicObject::FromVar(iobj), inflator); + NSSnapObjects::StdPropertyRestore(sobj, Js::VarTo(iobj), inflator); } } diff --git a/lib/Runtime/Debug/TTSnapshotExtractor.cpp b/lib/Runtime/Debug/TTSnapshotExtractor.cpp index 5217bedb169..6decdcd00a2 100644 --- a/lib/Runtime/Debug/TTSnapshotExtractor.cpp +++ b/lib/Runtime/Debug/TTSnapshotExtractor.cpp @@ -40,7 +40,7 @@ namespace TTD if(Js::DynamicType::Is(obj->GetTypeId())) { - Js::DynamicObject* dynObj = Js::DynamicObject::FromVar(obj); + Js::DynamicObject* dynObj = Js::VarTo(obj); dynObj->GetDynamicType()->GetTypeHandler()->MarkObjectSlots_TTD(this, dynObj); @@ -247,7 +247,7 @@ namespace TTD void SnapshotExtractor::MarkVisitVar(Js::Var var) { TTDAssert(var != nullptr, "I don't think this should happen but not 100% sure."); - TTDAssert(Js::JavascriptOperators::GetTypeId(var) < Js::TypeIds_Limit || Js::RecyclableObject::FromVar(var)->IsExternal(), "Not cool."); + TTDAssert(Js::JavascriptOperators::GetTypeId(var) < Js::TypeIds_Limit || Js::VarTo(var)->IsExternal(), "Not cool."); //We don't need to visit tagged things if(JsSupport::IsVarTaggedInline(var)) @@ -259,7 +259,7 @@ namespace TTD { if(this->m_marks.MarkAndTestAddr(var)) { - Js::RecyclableObject* obj = Js::RecyclableObject::FromVar(var); + Js::RecyclableObject* obj = Js::VarTo(var); this->MarkVisitType(obj->GetType()); } } @@ -269,12 +269,12 @@ namespace TTD if(this->m_marks.MarkAndTestAddr(var)) { - Js::RecyclableObject* obj = Js::RecyclableObject::FromVar(var); + Js::RecyclableObject* obj = Js::VarTo(var); //do this here instead of in mark visit type as it wants the dynamic object as well if(Js::DynamicType::Is(obj->GetTypeId())) { - Js::DynamicObject* dynObj = Js::DynamicObject::FromVar(obj); + Js::DynamicObject* dynObj = Js::VarTo(obj); if(dynObj->GetDynamicType()->GetTypeHandler()->IsDeferredTypeHandler()) { dynObj->GetDynamicType()->GetTypeHandler()->EnsureObjectReady(dynObj); @@ -476,7 +476,7 @@ namespace TTD case MarkTableTag::CompoundObjectTag: { this->ExtractTypeIfNeeded(this->m_marks.GetPtrValue()->GetType(), threadContext); - if(Js::ScriptFunction::Is(this->m_marks.GetPtrValue())) + if(Js::VarIs(this->m_marks.GetPtrValue())) { this->ExtractScriptFunctionEnvironmentIfNeeded(this->m_marks.GetPtrValue()); } diff --git a/lib/Runtime/Debug/TTSupport.h b/lib/Runtime/Debug/TTSupport.h index 11c2ea523f1..909c67f2cec 100644 --- a/lib/Runtime/Debug/TTSupport.h +++ b/lib/Runtime/Debug/TTSupport.h @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #pragma once @@ -250,12 +251,15 @@ namespace TTD SnapPromiseResolveOrRejectFunctionObject, SnapPromiseReactionTaskFunctionObject, SnapPromiseAllResolveElementFunctionObject, + SnapPromiseAllSettledResolveOrRejectElementFunctionObject, + SnapPromiseAnyRejectElementFunctionObject, SnapGeneratorFunction, SnapGeneratorVirtualScriptFunction, SnapAsyncFunction, SnapGenerator, - JavascriptPromiseAsyncSpawnExecutorFunction, - JavascriptPromiseAsyncSpawnStepArgumentExecutorFunction, + SnapAwaitObject, + JavascriptAsyncSpawnExecutorFunction, + JavascriptAsyncSpawnStepFunction, //objects that should always be well known but which may have other info we want to restore SnapWellKnownObject, diff --git a/lib/Runtime/InternalPropertyList.h b/lib/Runtime/InternalPropertyList.h index 4b1bb6c727e..13c1df4a2f3 100644 --- a/lib/Runtime/InternalPropertyList.h +++ b/lib/Runtime/InternalPropertyList.h @@ -26,4 +26,6 @@ INTERNALPROPERTY(CachedUDateFormat) // Used to store cached UDateF INTERNALPROPERTY(CachedUPluralRules) // Used to store cached UPluralRules objects for Intl.PluralRules INTERNALPROPERTY(RevocableProxy) // Internal slot for [[RevokableProxy]] for revocable proxy in ES6 INTERNALPROPERTY(MutationBp) // Used to store strong reference to the mutation breakpoint object +INTERNALPROPERTY(EmbedderData) // Holds embedder data here. + #undef INTERNALPROPERTY diff --git a/lib/Runtime/Language/Arguments.h b/lib/Runtime/Language/Arguments.h index ee3baf5e30f..9b033ffedd8 100644 --- a/lib/Runtime/Language/Arguments.h +++ b/lib/Runtime/Language/Arguments.h @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #pragma once @@ -82,6 +83,9 @@ inline int _count_args(const T1&, const T2&, const T3&, const T4&, const T5&, Js // xplat-todo: fix me ARM #define CALL_ENTRYPOINT_NOASSERT(entryPoint, function, callInfo, ...) \ entryPoint(function, callInfo, ##__VA_ARGS__) +#elif defined (_ARM64_) +#define CALL_ENTRYPOINT_NOASSERT(entryPoint, function, callInfo, ...) \ + entryPoint(function, callInfo, function, callInfo, ##__VA_ARGS__) #else #error CALL_ENTRYPOINT_NOASSERT not yet implemented #endif @@ -196,7 +200,7 @@ namespace Js Arguments(const Arguments& other) : Info(other.Info), Values(other.Values) {} Var operator [](int idxArg) { return const_cast(static_cast(*this)[idxArg]); } - const Var operator [](int idxArg) const + Var operator [](int idxArg) const { AssertMsg((idxArg < (int)Info.Count) && (idxArg >= 0), "Ensure a valid argument index"); return Values[idxArg]; diff --git a/lib/Runtime/Language/AsmJs.cpp b/lib/Runtime/Language/AsmJs.cpp index 24a39cd2eab..6ac4d4cf246 100644 --- a/lib/Runtime/Language/AsmJs.cpp +++ b/lib/Runtime/Language/AsmJs.cpp @@ -851,6 +851,11 @@ namespace Js if( member ) { + if (!(member->Grfnop() & fnopBin)) + { + return m.Fail(node, _u("Return object member must be an assignment expression")); + } + ParseNode* field = ParserWrapper::GetBinaryLeft( member ); ParseNode* value = ParserWrapper::GetBinaryRight( member ); if( !ParserWrapper::IsNameDeclaration( field ) || !ParserWrapper::IsNameDeclaration( value ) ) diff --git a/lib/Runtime/Language/AsmJs.h b/lib/Runtime/Language/AsmJs.h index 5a93fe9ac1a..19fc6f6a4ab 100644 --- a/lib/Runtime/Language/AsmJs.h +++ b/lib/Runtime/Language/AsmJs.h @@ -48,8 +48,6 @@ namespace Js static bool CheckNewArrayView( AsmJsModuleCompiler &m, PropertyName varName, ParseNode *newExpr ); static bool CheckFunction( AsmJsModuleCompiler &m, ParseNodeFnc* fncNode ); static bool CheckFunctionsSequential(AsmJsModuleCompiler &m); - static bool CheckChangeHeap(AsmJsModuleCompiler &m); - static bool CheckByteLengthCall(AsmJsModuleCompiler &m, ParseNode * node, ParseNode * newBufferDecl); static bool CheckGlobalVariableInitImport( AsmJsModuleCompiler &m, PropertyName varName, ParseNode *initNode, bool isMutable = true ); static bool CheckGlobalVariableImportExpr(AsmJsModuleCompiler &m, PropertyName varName, AsmJSCoercion coercion, ParseNode *coercedExpr); static bool CheckFunctionTables(AsmJsModuleCompiler& m); diff --git a/lib/Runtime/Language/AsmJsArrayBufferViews.h b/lib/Runtime/Language/AsmJsArrayBufferViews.h index 0a50677f928..221243d78d3 100644 --- a/lib/Runtime/Language/AsmJsArrayBufferViews.h +++ b/lib/Runtime/Language/AsmJsArrayBufferViews.h @@ -17,6 +17,7 @@ #endif // (Name , Align , RegType, MemType , irSuffix ) +// (log2) ARRAYBUFFER_VIEW_INT(INT8 , 0 , int32 , int8 , Int8 ) ARRAYBUFFER_VIEW_INT(UINT8 , 0 , int32 , uint8 , Uint8 ) ARRAYBUFFER_VIEW_INT(INT16 , 1 , int32 , int16 , Int16 ) diff --git a/lib/Runtime/Language/AsmJsBuiltInNames.h b/lib/Runtime/Language/AsmJsBuiltInNames.h index 7cf90e7df10..b8eab11e037 100644 --- a/lib/Runtime/Language/AsmJsBuiltInNames.h +++ b/lib/Runtime/Language/AsmJsBuiltInNames.h @@ -4,6 +4,11 @@ //------------------------------------------------------------------------------------------------------- // Default all macros to nothing + +#ifndef ASMJS_JSBUILTIN_MATH_FUNC_NAMES +#define ASMJS_JSBUILTIN_MATH_FUNC_NAMES(propertyId, funcName) +#endif + #ifndef ASMJS_MATH_FUNC_NAMES #define ASMJS_MATH_FUNC_NAMES(name, propertyName, funcInfo) #endif @@ -16,12 +21,13 @@ #define ASMJS_MATH_DOUBLE_CONST_NAMES(name, propertyName, value) ASMJS_MATH_CONST_NAMES(name, propertyName, value) #endif -#ifndef ASMJS_ARRAY_NAMES -#define ASMJS_ARRAY_NAMES(name, propertyName) +#ifndef ASMJS_TYPED_ARRAY_NAMES +#define ASMJS_TYPED_ARRAY_NAMES(name, propertyName) #endif -#ifndef ASMJS_TYPED_ARRAY_NAMES -#define ASMJS_TYPED_ARRAY_NAMES(name, propertyName) ASMJS_ARRAY_NAMES(name, propertyName) +#ifdef ENABLE_JS_BUILTINS +ASMJS_JSBUILTIN_MATH_FUNC_NAMES(Js::PropertyIds::min, Min ) +ASMJS_JSBUILTIN_MATH_FUNC_NAMES(Js::PropertyIds::max, Max ) #endif ASMJS_MATH_FUNC_NAMES(sin, sin, Math::EntryInfo::Sin ) @@ -63,11 +69,10 @@ ASMJS_TYPED_ARRAY_NAMES(Uint32Array, Uint32Array) ASMJS_TYPED_ARRAY_NAMES(Int32Array, Int32Array) ASMJS_TYPED_ARRAY_NAMES(Float32Array, Float32Array) ASMJS_TYPED_ARRAY_NAMES(Float64Array, Float64Array) -ASMJS_ARRAY_NAMES(byteLength, byteLength) // help the caller to undefine all the macros +#undef ASMJS_JSBUILTIN_MATH_FUNC_NAMES #undef ASMJS_MATH_FUNC_NAMES #undef ASMJS_MATH_CONST_NAMES #undef ASMJS_MATH_DOUBLE_CONST_NAMES -#undef ASMJS_ARRAY_NAMES #undef ASMJS_TYPED_ARRAY_NAMES diff --git a/lib/Runtime/Language/AsmJsByteCodeGenerator.cpp b/lib/Runtime/Language/AsmJsByteCodeGenerator.cpp index 7d932419a41..a005e565b3b 100644 --- a/lib/Runtime/Language/AsmJsByteCodeGenerator.cpp +++ b/lib/Runtime/Language/AsmJsByteCodeGenerator.cpp @@ -2192,7 +2192,7 @@ namespace Js return EmitExpressionInfo( AsmJsType::Void ); } - Js::EmitExpressionInfo AsmJSByteCodeGenerator::EmitLoop( ParseNodeLoop *loopNode, ParseNode *cond, ParseNode *body, ParseNode *incr, BOOL doWhile /*= false */ ) + Js::EmitExpressionInfo AsmJSByteCodeGenerator::EmitLoop( ParseNodeStmt *loopNode, ParseNode *cond, ParseNode *body, ParseNode *incr, BOOL doWhile /*= false */ ) { // Need to increment loop count whether we are going to profile or not for HasLoop() StartStatement(loopNode); @@ -2200,7 +2200,6 @@ namespace Js Js::ByteCodeLabel continuePastLoop = mWriter.DefineLabel(); uint loopId = mWriter.EnterLoop( loopEntrance ); - loopNode->loopId = loopId; EndStatement(loopNode); if( doWhile ) { diff --git a/lib/Runtime/Language/AsmJsByteCodeGenerator.h b/lib/Runtime/Language/AsmJsByteCodeGenerator.h index 0cdf09dccbe..fefe6b970bf 100644 --- a/lib/Runtime/Language/AsmJsByteCodeGenerator.h +++ b/lib/Runtime/Language/AsmJsByteCodeGenerator.h @@ -96,7 +96,7 @@ namespace Js EmitExpressionInfo EmitQMark( ParseNode * pnode ); EmitExpressionInfo EmitSwitch( ParseNodeSwitch * pnode ); EmitExpressionInfo EmitBinaryComparator( ParseNode * pnode, EBinaryComparatorOpCodes op); - EmitExpressionInfo EmitLoop( ParseNodeLoop *loopNode, ParseNode *cond, ParseNode *body, ParseNode *incr, BOOL doWhile = false ); + EmitExpressionInfo EmitLoop( ParseNodeStmt *loopNode, ParseNode *cond, ParseNode *body, ParseNode *incr, BOOL doWhile = false ); EmitExpressionInfo EmitIf( ParseNodeIf * pnode ); EmitExpressionInfo EmitBooleanExpression( ParseNode* pnodeCond, Js::ByteCodeLabel trueLabel, Js::ByteCodeLabel falseLabel ); diff --git a/lib/Runtime/Language/AsmJsLink.cpp b/lib/Runtime/Language/AsmJsLink.cpp index 982bd726bac..829327f4ce7 100644 --- a/lib/Runtime/Language/AsmJsLink.cpp +++ b/lib/Runtime/Language/AsmJsLink.cpp @@ -15,7 +15,7 @@ namespace Js{ return true; } - if (!JavascriptArrayBuffer::Is(bufferView)) + if (!VarIs(bufferView)) { AsmJSCompiler::OutputError(scriptContext, _u("Asm.js Runtime Error : Buffer parameter is not an Array buffer")); return false; @@ -42,12 +42,12 @@ namespace Js{ return true; } Assert(foreign); - if (!RecyclableObject::Is(foreign)) + if (!VarIs(foreign)) { AsmJSCompiler::OutputError(scriptContext, _u("Asm.js Runtime Error : FFI is not an object")); return false; } - TypeId foreignObjType = RecyclableObject::FromVar(foreign)->GetTypeId(); + TypeId foreignObjType = VarTo(foreign)->GetTypeId(); if (StaticType::Is(foreignObjType) || TypeIds_Proxy == foreignObjType) { AsmJSCompiler::OutputError(scriptContext, _u("Asm.js Runtime Error : FFI is not an object")); @@ -69,12 +69,12 @@ namespace Js{ return true; } Assert(stdlib); - if (!RecyclableObject::Is(stdlib)) + if (!VarIs(stdlib)) { AsmJSCompiler::OutputError(scriptContext, _u("Asm.js Runtime Error : StdLib is not an object")); return false; } - TypeId stdLibObjType = RecyclableObject::FromVar(stdlib)->GetTypeId(); + TypeId stdLibObjType = VarTo(stdlib)->GetTypeId(); if (StaticType::Is(stdLibObjType) || TypeIds_Proxy == stdLibObjType) { AsmJSCompiler::OutputError(scriptContext, _u("Asm.js Runtime Error : StdLib is not an object")); @@ -138,31 +138,8 @@ namespace Js{ bool ASMLink::CheckArrayLibraryMethod(ScriptContext* scriptContext, const Var stdlib, const AsmJSTypedArrayBuiltinFunction arrayLibMethod) { - Var arrayFuncObj; switch (arrayLibMethod) { - case AsmJSTypedArrayBuiltinFunction::AsmJSTypedArrayBuiltin_byteLength: - arrayFuncObj = JavascriptOperators::OP_GetProperty(stdlib, PropertyIds::byteLength, scriptContext); - if (JavascriptFunction::Is(arrayFuncObj)) - { - JavascriptFunction* arrayLibFunc = (JavascriptFunction*)arrayFuncObj; - if (arrayLibFunc->IsBoundFunction()) - { - BoundFunction* boundFunc = (BoundFunction*)arrayLibFunc; - RecyclableObject* thisObj = boundFunc->GetBoundThis(); - if (JavascriptFunction::Is(thisObj)) - { - JavascriptFunction * thisFunc = (JavascriptFunction*)thisObj; - if (thisFunc->GetFunctionInfo()->GetOriginalEntryPoint() != (&ArrayBuffer::EntryInfo::GetterByteLength)->GetOriginalEntryPoint()) - { - return false; - } - } - JavascriptFunction* targetFunc = boundFunc->GetTargetFunction(); - return targetFunc->GetFunctionInfo()->GetOriginalEntryPoint() == (&JavascriptFunction::EntryInfo::Call)->GetOriginalEntryPoint(); - } - } - break; #define ASMJS_TYPED_ARRAY_NAMES(name, propertyName) case AsmJSTypedArrayBuiltinFunction::AsmJSTypedArrayBuiltin_##name: \ return CheckIsBuiltinFunction(scriptContext, stdlib, PropertyIds::##propertyName, propertyName##::EntryInfo::NewInstance); #include "AsmJsBuiltInNames.h" @@ -191,8 +168,20 @@ namespace Js{ bool ASMLink::CheckIsBuiltinFunction(ScriptContext* scriptContext, const Var object, PropertyId propertyId, const FunctionInfo& funcInfo) { Var mathFuncObj = JavascriptOperators::OP_GetProperty(object, propertyId, scriptContext); - return JavascriptFunction::Is(mathFuncObj) && - JavascriptFunction::FromVar(mathFuncObj)->GetFunctionInfo()->GetOriginalEntryPoint() == funcInfo.GetOriginalEntryPoint(); +#ifdef ENABLE_JS_BUILTINS + if (scriptContext->IsJsBuiltInEnabled()) + { + switch (propertyId) + { +#define ASMJS_JSBUILTIN_MATH_FUNC_NAMES(propertyId, funcName) case propertyId: \ + return VarIs(mathFuncObj) && \ + VarTo(mathFuncObj) == scriptContext->GetLibrary()->GetMath##funcName##Function(); +#include "AsmJsBuiltInNames.h" + } + } +#endif + return VarIs(mathFuncObj) && + VarTo(mathFuncObj)->GetFunctionInfo()->GetOriginalEntryPoint() == funcInfo.GetOriginalEntryPoint(); } bool ASMLink::CheckIsBuiltinValue(ScriptContext* scriptContext, const Var object, PropertyId propertyId, double value) diff --git a/lib/Runtime/Language/AsmJsModule.cpp b/lib/Runtime/Language/AsmJsModule.cpp index 799cae79c8f..769f6cf9101 100644 --- a/lib/Runtime/Language/AsmJsModule.cpp +++ b/lib/Runtime/Language/AsmJsModule.cpp @@ -1001,27 +1001,6 @@ namespace Js return nullptr; } - bool AsmJsModuleCompiler::CheckByteLengthCall(ParseNode * callNode, ParseNode * bufferDecl) - { - if (callNode->nop != knopCall || callNode->AsParseNodeCall()->pnodeTarget->nop != knopName) - { - return false; - } - AsmJsTypedArrayFunction* arrayFunc = LookupIdentifier(callNode->AsParseNodeCall()->pnodeTarget->name()); - if (!arrayFunc) - { - return false; - } - - return callNode->AsParseNodeCall()->argCount == 1 && - !callNode->AsParseNodeCall()->isApplyCall && - !callNode->AsParseNodeCall()->isEvalCall && - callNode->AsParseNodeCall()->spreadArgCount == 0 && - arrayFunc->GetArrayBuiltInFunction() == AsmJSTypedArrayBuiltin_byteLength && - callNode->AsParseNodeCall()->pnodeArgs->nop == knopName && - callNode->AsParseNodeCall()->pnodeArgs->name()->GetPropertyId() == bufferDecl->name()->GetPropertyId(); - } - bool AsmJsModuleCompiler::Fail(ParseNode* usepn, const wchar *error) { AsmJSCompiler::OutputError(GetScriptContext(), error); @@ -1203,7 +1182,6 @@ namespace Js arrayFunctions[AsmJSTypedArrayBuiltin_Uint32Array] = ArrayFunc(PropertyIds::Uint32Array, Anew(&mAllocator, AsmJsTypedArrayFunction, nullptr, &mAllocator, AsmJSTypedArrayBuiltin_Uint32Array, ArrayBufferView::TYPE_UINT32)); arrayFunctions[AsmJSTypedArrayBuiltin_Float32Array] = ArrayFunc(PropertyIds::Float32Array, Anew(&mAllocator, AsmJsTypedArrayFunction, nullptr, &mAllocator, AsmJSTypedArrayBuiltin_Float32Array, ArrayBufferView::TYPE_FLOAT32)); arrayFunctions[AsmJSTypedArrayBuiltin_Float64Array] = ArrayFunc(PropertyIds::Float64Array, Anew(&mAllocator, AsmJsTypedArrayFunction, nullptr, &mAllocator, AsmJSTypedArrayBuiltin_Float64Array, ArrayBufferView::TYPE_FLOAT64)); - arrayFunctions[AsmJSTypedArrayBuiltin_byteLength] = ArrayFunc(PropertyIds::byteLength, Anew(&mAllocator, AsmJsTypedArrayFunction, nullptr, &mAllocator, AsmJSTypedArrayBuiltin_byteLength, ArrayBufferView::TYPE_COUNT)); for (int i = 0; i < AsmJSTypedArrayBuiltin_COUNT; i++) { @@ -1727,9 +1705,9 @@ namespace Js void AsmJsModuleInfo::EnsureHeapAttached(ScriptFunction * func) { #ifdef ENABLE_WASM - if (WasmScriptFunction::Is(func)) + if (VarIs(func)) { - WasmScriptFunction* wasmFunc = WasmScriptFunction::FromVar(func); + WasmScriptFunction* wasmFunc = VarTo(func); WebAssemblyMemory * wasmMem = wasmFunc->GetWebAssemblyMemory(); if (wasmMem && wasmMem->GetBuffer() && wasmMem->GetBuffer()->IsDetached()) { @@ -1739,7 +1717,7 @@ namespace Js else #endif { - AsmJsScriptFunction* asmFunc = AsmJsScriptFunction::FromVar(func); + AsmJsScriptFunction* asmFunc = VarTo(func); ArrayBuffer* moduleArrayBuffer = asmFunc->GetAsmJsArrayBuffer(); if (moduleArrayBuffer && moduleArrayBuffer->IsDetached()) { @@ -1761,7 +1739,7 @@ namespace Js // AsmJsModuleEnvironment is all laid out here Var * asmJsEnvironment = static_cast(env); Var * asmBufferPtr = asmJsEnvironment + asmModuleInfo->GetModuleMemory().mArrayBufferOffset; - ArrayBuffer * asmBuffer = *asmBufferPtr ? ArrayBuffer::FromVar(*asmBufferPtr) : nullptr; + ArrayBuffer * asmBuffer = *asmBufferPtr ? VarTo(*asmBufferPtr) : nullptr; Var stdLibObj = *(asmJsEnvironment + asmModuleInfo->GetModuleMemory().mStdLibOffset); Var asmMathObject = stdLibObj ? JavascriptOperators::OP_GetProperty(stdLibObj, PropertyIds::Math, scriptContext) : nullptr; @@ -1917,7 +1895,7 @@ namespace Js case AsmJsSymbol::TypedArrayBuiltinFunction: switch (asmSlot->builtinArrayFunc) { -#define ASMJS_ARRAY_NAMES(name, propertyName) \ +#define ASMJS_TYPED_ARRAY_NAMES(name, propertyName) \ case AsmJSTypedArrayBuiltin_##name: \ value = JavascriptOperators::OP_GetProperty(stdLibObj, PropertyIds::##propertyName, scriptContext); \ break; diff --git a/lib/Runtime/Language/AsmJsModule.h b/lib/Runtime/Language/AsmJsModule.h index dfe9da2fabc..c2c9607f1ac 100644 --- a/lib/Runtime/Language/AsmJsModule.h +++ b/lib/Runtime/Language/AsmJsModule.h @@ -277,7 +277,6 @@ namespace Js { bool AddStandardLibraryMathName(PropertyId id, AsmJsMathFunction* func, AsmJSMathBuiltinFunction mathLibFunctionName); bool AddStandardLibraryMathName(PropertyId id, const double* cstAddr, AsmJSMathBuiltinFunction mathLibFunctionName); bool AddStandardLibraryArrayName(PropertyId id, AsmJsTypedArrayFunction * func, AsmJSTypedArrayBuiltinFunction mathLibFunctionName); - bool CheckByteLengthCall(ParseNode * node, ParseNode * newBufferDecl); }; template diff --git a/lib/Runtime/Language/AsmJsTypes.h b/lib/Runtime/Language/AsmJsTypes.h index 851bffeb17e..89e618e722a 100644 --- a/lib/Runtime/Language/AsmJsTypes.h +++ b/lib/Runtime/Language/AsmJsTypes.h @@ -90,7 +90,7 @@ namespace Js }; enum AsmJSTypedArrayBuiltinFunction { -#define ASMJS_ARRAY_NAMES(name, propertyName) AsmJSTypedArrayBuiltin_##name, +#define ASMJS_TYPED_ARRAY_NAMES(name, propertyName) AsmJSTypedArrayBuiltin_##name, #include "AsmJsBuiltInNames.h" AsmJSTypedArrayBuiltin_COUNT }; @@ -390,7 +390,7 @@ namespace Js // Constructor AsmJsModuleArg(PropertyName name, ArgType type) : AsmJsSymbol(name, symbolType), mArgType(type) { } // Accessor - inline const ArgType GetArgType()const { return mArgType; } + inline ArgType GetArgType()const { return mArgType; } // AsmJsSymbol interface public: diff --git a/lib/Runtime/Language/AsmJsUtils.cpp b/lib/Runtime/Language/AsmJsUtils.cpp index d5431d3a14f..ec11589b03f 100644 --- a/lib/Runtime/Language/AsmJsUtils.cpp +++ b/lib/Runtime/Language/AsmJsUtils.cpp @@ -37,7 +37,10 @@ namespace Js ParseNode* rhs = GetBinaryRight( body ); if( rhs && rhs->nop == knopList ) { - AssertMsg( lhs->nop == knopStr, "this should be use asm" ); + if (lhs->nop != knopStr) + { + return false; + } *var = rhs; return true; } @@ -152,7 +155,7 @@ namespace Js #if ENABLE_DEBUG_CONFIG_OPTIONS int64 ConvertStringToInt64(Var string, ScriptContext* scriptContext) { - JavascriptString* str = JavascriptString::FromVar(string); + JavascriptString* str = VarTo(string); charcount_t length = str->GetLength(); const char16* buf = str->GetString(); int radix = 10; @@ -197,7 +200,7 @@ namespace Js if (i < actualArgCount) { #if ENABLE_DEBUG_CONFIG_OPTIONS - if (allowTestInputs && JavascriptString::Is(*origArgs)) + if (allowTestInputs && VarIs(*origArgs)) { intVal = (int32)ConvertStringToInt64(*origArgs, scriptContext); } @@ -229,13 +232,13 @@ namespace Js int64 val; if (i < actualArgCount) { - if (JavascriptString::Is(*origArgs)) + if (VarIs(*origArgs)) { val = ConvertStringToInt64(*origArgs, scriptContext); } - else if (JavascriptObject::Is(*origArgs)) + else if (DynamicObject::IsBaseDynamicObject(*origArgs)) { - RecyclableObject* object = RecyclableObject::FromVar(*origArgs); + RecyclableObject* object = VarTo(*origArgs); PropertyRecord const * lowPropRecord = nullptr; PropertyRecord const * highPropRecord = nullptr; scriptContext->GetOrAddPropertyRecord(_u("low"), (int)wcslen(_u("low")), &lowPropRecord); @@ -268,7 +271,7 @@ namespace Js if (i < actualArgCount) { #if ENABLE_DEBUG_CONFIG_OPTIONS - if (allowTestInputs && JavascriptString::Is(*origArgs)) + if (allowTestInputs && VarIs(*origArgs)) { int32 val = (int32)ConvertStringToInt64(*origArgs, scriptContext); floatVal = *(float*)&val; @@ -293,7 +296,7 @@ namespace Js if (i < actualArgCount) { #if ENABLE_DEBUG_CONFIG_OPTIONS - if (allowTestInputs && JavascriptString::Is(*origArgs)) + if (allowTestInputs && VarIs(*origArgs)) { int64 val = ConvertStringToInt64(*origArgs, scriptContext); doubleVal = *(double*)&val; diff --git a/lib/Runtime/Language/CMakeLists.txt b/lib/Runtime/Language/CMakeLists.txt index 20a2a254b74..20647547396 100644 --- a/lib/Runtime/Language/CMakeLists.txt +++ b/lib/Runtime/Language/CMakeLists.txt @@ -78,6 +78,12 @@ elseif(CC_TARGETS_X86) i386/AsmJsJitTemplate.cpp i386/StackFrame.cpp ) +elseif(CC_TARGETS_ARM64) + set (CRL_SOURCE_FILES ${CRL_SOURCE_FILES} + arm64/StackFrame.cpp + arm64/arm64_Thunks.S + arm64/arm64_CallEhFrame.S + ) elseif(CC_TARGETS_ARM) set (CRL_SOURCE_FILES ${CRL_SOURCE_FILES} arm/StackFrame.cpp diff --git a/lib/Runtime/Language/CacheOperators.cpp b/lib/Runtime/Language/CacheOperators.cpp index 6f04d1de4db..4e1062a62e9 100644 --- a/lib/Runtime/Language/CacheOperators.cpp +++ b/lib/Runtime/Language/CacheOperators.cpp @@ -35,7 +35,7 @@ namespace Js PropertyIndex propertyIndex = info->GetPropertyIndex(); Assert(propertyIndex == objectWithProperty->GetPropertyIndex(propertyId) || - (RootObjectBase::Is(objectWithProperty) && propertyIndex == RootObjectBase::FromVar(objectWithProperty)->GetRootPropertyIndex(propertyId))); + (VarIs(objectWithProperty) && propertyIndex == VarTo(objectWithProperty)->GetRootPropertyIndex(propertyId))); Assert(DynamicType::Is(objectWithProperty->GetTypeId())); #if ENABLE_FIXED_FIELDS @@ -44,7 +44,7 @@ namespace Js Assert(info->IsNoCache() || !info->IsStoreFieldCacheEnabled() || info->GetInstance() != objectWithProperty || !objectWithProperty->IsFixedProperty(propertyId)); #endif - DynamicObject * dynamicObjectWithProperty = DynamicObject::FromVar(objectWithProperty); + DynamicObject * dynamicObjectWithProperty = VarTo(objectWithProperty); PropertyIndex slotIndex; bool isInlineSlot; dynamicObjectWithProperty->GetDynamicType()->GetTypeHandler()->PropertyIndexToInlineOrAuxSlotIndex(propertyIndex, &slotIndex, &isInlineSlot); @@ -57,8 +57,8 @@ namespace Js } else if( PropertyValueInfo::PrototypeCacheDisabled((PropertyValueInfo*)info) || - !RecyclableObject::Is(startingObject) || - RecyclableObject::UnsafeFromVar(startingObject)->GetScriptContext() != requestContext) + !VarIs(startingObject) || + UnsafeVarTo(startingObject)->GetScriptContext() != requestContext) { // Don't need to cache if the beginning property is number etc. return; @@ -80,7 +80,7 @@ namespace Js isProto, dynamicObjectWithProperty, isRoot, - RecyclableObject::FromVar(startingObject)->GetType(), + VarTo(startingObject)->GetType(), nullptr, propertyId, slotIndex, @@ -116,7 +116,7 @@ namespace Js Assert(DynamicType::Is(info->GetInstance()->GetTypeId())); - DynamicObject * dynamicInstance = DynamicObject::FromVar(info->GetInstance()); + DynamicObject * dynamicInstance = VarTo(info->GetInstance()); PropertyIndex slotIndex; bool isInlineSlot; dynamicInstance->GetDynamicType()->GetTypeHandler()->PropertyIndexToInlineOrAuxSlotIndex(info->GetPropertyIndex(), &slotIndex, &isInlineSlot); @@ -197,12 +197,12 @@ namespace Js } Assert((!isRoot && propertyIndex == object->GetPropertyIndex(propertyId)) || isSetter || - (isRoot && propertyIndex == RootObjectBase::FromVar(object)->GetRootPropertyIndex(propertyId))); + (isRoot && propertyIndex == VarTo(object)->GetRootPropertyIndex(propertyId))); Assert(DynamicType::Is(object->GetTypeId())); AssertMsg((info->GetFlags() & InlineCacheGetterFlag) == 0, "invalid getter for CachePropertyWrite"); RecyclableObject* instance = info->GetInstance(); - DynamicObject * dynamicInstance = DynamicObject::FromVar(instance); + DynamicObject * dynamicInstance = VarTo(instance); PropertyIndex slotIndex; bool isInlineSlot; dynamicInstance->GetDynamicType()->GetTypeHandler()->PropertyIndexToInlineOrAuxSlotIndex(propertyIndex, &slotIndex, &isInlineSlot); @@ -283,7 +283,7 @@ namespace Js Cache( false, - DynamicObject::FromVar(object), + VarTo(object), isRoot, object->GetType(), typeWithoutProperty, diff --git a/lib/Runtime/Language/CacheOperators.inl b/lib/Runtime/Language/CacheOperators.inl index fd93341aba6..fa4d177bcfb 100644 --- a/lib/Runtime/Language/CacheOperators.inl +++ b/lib/Runtime/Language/CacheOperators.inl @@ -350,7 +350,7 @@ namespace Js } // Before allowing proxies to cache, we would need to solve various issues (see JavascriptProxy::GetPropertyQuery). - Assert(!JavascriptProxy::Is(objectWithProperty)); + Assert(!VarIs(objectWithProperty)); } else { @@ -363,13 +363,13 @@ namespace Js // Built-in Function.prototype properties 'length', 'arguments', and 'caller' are special cases. Assert( objectWithProperty->IsWritable(propertyId) || - (isRoot && RootObjectBase::FromVar(objectWithProperty)->IsLetConstGlobal(propertyId)) || + (isRoot && VarTo(objectWithProperty)->IsLetConstGlobal(propertyId)) || JavascriptFunction::IsBuiltinProperty(objectWithProperty, propertyId)); } - const bool includeTypePropertyCache = - IncludeTypePropertyCache && - !isRoot && + const bool includeTypePropertyCache = + IncludeTypePropertyCache && + !isRoot && (info->GetFunctionBody() ? !PHASE_OFF(Js::TypePropertyCachePhase, info->GetFunctionBody()) : !PHASE_OFF1(Js::TypePropertyCachePhase) diff --git a/lib/Runtime/Language/ConstructorCache.cpp b/lib/Runtime/Language/ConstructorCache.cpp index b9b69477d02..e9e144bb904 100644 --- a/lib/Runtime/Language/ConstructorCache.cpp +++ b/lib/Runtime/Language/ConstructorCache.cpp @@ -216,4 +216,4 @@ namespace Js this->GetSkipDefaultNewObject(), this->GetCtorHasNoExplicitReturnValue()); } #endif -} \ No newline at end of file +} diff --git a/lib/Runtime/Language/ConstructorCache.h b/lib/Runtime/Language/ConstructorCache.h index 6db775145bd..c2150bd7da6 100644 --- a/lib/Runtime/Language/ConstructorCache.h +++ b/lib/Runtime/Language/ConstructorCache.h @@ -67,8 +67,8 @@ namespace Js ConstructorCache(); ConstructorCache(ConstructorCache const * other); - static size_t const GetOffsetOfGuardValue() { return PropertyGuard::GetOffsetOfValue(); } - static size_t const GetSizeOfGuardValue() { return PropertyGuard::GetSizeOfValue(); } + static size_t GetOffsetOfGuardValue() { return PropertyGuard::GetOffsetOfValue(); } + static size_t GetSizeOfGuardValue() { return PropertyGuard::GetSizeOfValue(); } void Populate(DynamicType* type, ScriptContext* scriptContext, bool ctorHasNoExplicitReturnValue, bool updateAfterCtor); void PopulateForSkipDefaultNewObject(ScriptContext* scriptContext); @@ -252,4 +252,4 @@ namespace Js private: void InvalidateOnPrototypeChange(); }; -} \ No newline at end of file +} diff --git a/lib/Runtime/Language/DynamicProfileInfo.cpp b/lib/Runtime/Language/DynamicProfileInfo.cpp index b0a167f16d6..87d171fe30d 100644 --- a/lib/Runtime/Language/DynamicProfileInfo.cpp +++ b/lib/Runtime/Language/DynamicProfileInfo.cpp @@ -61,6 +61,7 @@ namespace Js Allocation batch[] = { { (uint)offsetof(DynamicProfileInfo, callSiteInfo), functionBody->GetProfiledCallSiteCount() * sizeof(CallSiteInfo) }, + { (uint)offsetof(DynamicProfileInfo, callApplyTargetInfo), functionBody->GetProfiledCallApplyCallSiteCount() * sizeof(CallSiteInfo) }, { (uint)offsetof(DynamicProfileInfo, ldLenInfo), functionBody->GetProfiledLdLenCount() * sizeof(LdLenInfo) }, { (uint)offsetof(DynamicProfileInfo, ldElemInfo), functionBody->GetProfiledLdElemCount() * sizeof(LdElemInfo) }, { (uint)offsetof(DynamicProfileInfo, stElemInfo), functionBody->GetProfiledStElemCount() * sizeof(StElemInfo) }, @@ -155,6 +156,11 @@ namespace Js callSiteInfo[i].returnType = ValueType::Uninitialized; callSiteInfo[i].u.functionData.sourceId = NoSourceId; } + for (ProfileId i = 0; i < functionBody->GetProfiledCallApplyCallSiteCount(); ++i) + { + callApplyTargetInfo[i].returnType = ValueType::Uninitialized; + callApplyTargetInfo[i].u.functionData.sourceId = NoSourceId; + } for (ProfileId i = 0; i < functionBody->GetProfiledLdLenCount(); ++i) { ldLenInfo[i].arrayType = ValueType::Uninitialized; @@ -387,7 +393,7 @@ namespace Js return true; }; - FunctionInfo* calleeFunctionInfo = callee->GetTypeId() == TypeIds_Function ? JavascriptFunction::FromVar(callee)->GetFunctionInfo() : nullptr; + FunctionInfo* calleeFunctionInfo = callee->GetTypeId() == TypeIds_Function ? VarTo(callee)->GetFunctionInfo() : nullptr; if (calleeFunctionInfo == nullptr) { return false; @@ -434,12 +440,12 @@ namespace Js return; } - if (arg != nullptr && RecyclableObject::Is(arg) && JavascriptFunction::Is(arg)) + if (arg != nullptr && VarIs(arg) && VarIs(arg)) { CallbackInfo * callbackInfo = EnsureCallbackInfo(functionBody, callSiteId); if (callbackInfo->sourceId == NoSourceId) { - JavascriptFunction * callback = JavascriptFunction::UnsafeFromVar(arg); + JavascriptFunction * callback = UnsafeVarTo(arg); GetSourceAndFunctionId(functionBody, callback->GetFunctionInfo(), callback, &callbackInfo->sourceId, &callbackInfo->functionId); callbackInfo->argNumber = argNum; } @@ -453,7 +459,7 @@ namespace Js { Js::SourceId sourceId; Js::LocalFunctionId functionId; - JavascriptFunction * callback = JavascriptFunction::UnsafeFromVar(arg); + JavascriptFunction * callback = UnsafeVarTo(arg); GetSourceAndFunctionId(functionBody, callback->GetFunctionInfo(), callback, &sourceId, &functionId); if (sourceId != callbackInfo->sourceId || functionId != callbackInfo->functionId) @@ -761,6 +767,38 @@ namespace Js return; } + void DynamicProfileInfo::RecordCallApplyTargetInfo(FunctionBody* functionBody, ProfileId callApplyCallSiteNum, FunctionInfo * targetFunctionInfo, JavascriptFunction* targetFunction) + { + AutoCriticalSection cs(&this->callSiteInfoCS); + +#if DBG_DUMP || defined(DYNAMIC_PROFILE_STORAGE) || defined(RUNTIME_DATA_COLLECTION) + // If we persistsAcrossScriptContext, the dynamic profile info may be referred to by multiple function body from + // different script context + Assert(!DynamicProfileInfo::NeedProfileInfoList() || this->persistsAcrossScriptContexts || this->functionBody == functionBody); +#endif + Assert(callApplyCallSiteNum < functionBody->GetProfiledCallApplyCallSiteCount()); + Js::SourceId oldSourceId = callApplyTargetInfo[callApplyCallSiteNum].u.functionData.sourceId; + Js::LocalFunctionId oldFunctionId = callApplyTargetInfo[callApplyCallSiteNum].u.functionData.functionId; + if (oldSourceId == InvalidSourceId) + { + return; + } + + Js::SourceId sourceId; + Js::LocalFunctionId functionId; + GetSourceAndFunctionId(functionBody, targetFunctionInfo, targetFunction, &sourceId, &functionId); + + if (oldSourceId == NoSourceId) + { + callApplyTargetInfo[callApplyCallSiteNum].u.functionData.sourceId = sourceId; + callApplyTargetInfo[callApplyCallSiteNum].u.functionData.functionId = functionId; + callApplyTargetInfo[callApplyCallSiteNum].dontInline = false; + } + else if (oldSourceId != sourceId || oldFunctionId != functionId) + { + callApplyTargetInfo[callApplyCallSiteNum].isPolymorphic = true; + } + } bool DynamicProfileInfo::IsPolymorphicCallSite(Js::LocalFunctionId curFunctionId, Js::SourceId curSourceId, Js::LocalFunctionId oldFunctionId, Js::SourceId oldSourceId) { @@ -1124,6 +1162,34 @@ namespace Js return GetFunctionInfo(functionBody, callbackInfo->sourceId, callbackInfo->functionId); } + FunctionInfo * DynamicProfileInfo::GetCallApplyTargetInfo(FunctionBody * functionBody, ProfileId callSiteId) + { + Assert(functionBody != nullptr); + Js::ProfileId callSiteCount = functionBody->GetProfiledCallSiteCount(); + Assert(callSiteId < callSiteCount); + Assert(functionBody->IsJsBuiltInCode() || functionBody->IsPublicLibraryCode() || HasCallSiteInfo(functionBody)); + + if (functionBody->GetCallSiteToCallApplyCallSiteArray()) + { + Js::ProfileId callApplyCallSiteId = functionBody->GetCallSiteToCallApplyCallSiteArray()[callSiteId]; + if (callApplyCallSiteId == Js::Constants::NoProfileId) + { + return nullptr; + } + + Assert(callApplyCallSiteId < functionBody->GetProfiledCallApplyCallSiteCount()); + + if (callApplyTargetInfo[callApplyCallSiteId].isPolymorphic) + { + return nullptr; + } + + return GetFunctionInfo(functionBody, callApplyTargetInfo[callApplyCallSiteId].u.functionData.sourceId, callApplyTargetInfo[callApplyCallSiteId].u.functionData.functionId); + } + + return nullptr; + } + uint DynamicProfileInfo::GetLdFldCacheIndexFromCallSiteInfo(FunctionBody* functionBody, ProfileId callSiteId) { Assert(functionBody); @@ -1399,6 +1465,7 @@ namespace Js this->dynamicProfileFunctionInfo = RecyclerNewStructLeaf(recycler, DynamicProfileFunctionInfo); } this->dynamicProfileFunctionInfo->callSiteInfoCount = functionBody->GetProfiledCallSiteCount(); + this->dynamicProfileFunctionInfo->callApplyTargetInfoCount = functionBody->GetProfiledCallApplyCallSiteCount(); this->dynamicProfileFunctionInfo->paramInfoCount = functionBody->GetProfiledInParamsCount(); this->dynamicProfileFunctionInfo->divCount = functionBody->GetProfiledDivOrRemCount(); this->dynamicProfileFunctionInfo->switchCount = functionBody->GetProfiledSwitchCount(); @@ -1452,6 +1519,7 @@ namespace Js || this->dynamicProfileFunctionInfo->fldInfoCount != functionBody->GetProfiledFldCount() || this->dynamicProfileFunctionInfo->slotInfoCount != functionBody->GetProfiledSlotCount() || this->dynamicProfileFunctionInfo->callSiteInfoCount != functionBody->GetProfiledCallSiteCount() + || this->dynamicProfileFunctionInfo->callApplyTargetInfoCount != functionBody->GetProfiledCallApplyCallSiteCount() || this->dynamicProfileFunctionInfo->returnTypeInfoCount != functionBody->GetProfiledReturnTypeCount() || this->dynamicProfileFunctionInfo->loopCount != functionBody->GetLoopCount() || this->dynamicProfileFunctionInfo->switchCount != functionBody->GetProfiledSwitchCount() @@ -2113,6 +2181,8 @@ namespace Js || !writer->WriteArray(this->slotInfo, functionBody->GetProfiledSlotCount()) || !writer->Write(functionBody->GetProfiledCallSiteCount()) || !writer->WriteArray(this->callSiteInfo, functionBody->GetProfiledCallSiteCount()) + || !writer->Write(functionBody->GetProfiledCallApplyCallSiteCount()) + || !writer->WriteArray(this->callApplyTargetInfo, functionBody->GetProfiledCallApplyCallSiteCount()) || !writer->Write(functionBody->GetProfiledDivOrRemCount()) || !writer->WriteArray(this->divideTypeInfo, functionBody->GetProfiledDivOrRemCount()) || !writer->Write(functionBody->GetProfiledSwitchCount()) @@ -2142,6 +2212,7 @@ namespace Js ProfileId arrayCallSiteCount = 0; ProfileId slotInfoCount = 0; ProfileId callSiteInfoCount = 0; + ProfileId callApplyTargetInfoCount = 0; ProfileId returnTypeInfoCount = 0; ProfileId divCount = 0; ProfileId switchCount = 0; @@ -2155,6 +2226,7 @@ namespace Js FldInfo * fldInfo = nullptr; ValueType * slotInfo = nullptr; CallSiteInfo * callSiteInfo = nullptr; + CallSiteInfo * callApplyTargetInfo = nullptr; ValueType * divTypeInfo = nullptr; ValueType * switchTypeInfo = nullptr; ValueType * returnTypeInfo = nullptr; @@ -2291,6 +2363,23 @@ namespace Js } } + if (!reader->Read(&callApplyTargetInfoCount)) + { + goto Error; + } + + if (callApplyTargetInfoCount != 0) + { + // CallSiteInfo contains pointer "polymorphicCallSiteInfo", but + // we explicitly save that pointer in FunctionBody. Safe to + // allocate CallSiteInfo[] as Leaf here. + callApplyTargetInfo = RecyclerNewArrayLeaf(recycler, CallSiteInfo, callApplyTargetInfoCount); + if (!reader->ReadArray(callApplyTargetInfo, callApplyTargetInfoCount)) + { + goto Error; + } + } + if (!reader->Read(&divCount)) { goto Error; @@ -2373,6 +2462,7 @@ namespace Js dynamicProfileFunctionInfo->fldInfoCount = fldInfoCount; dynamicProfileFunctionInfo->slotInfoCount = slotInfoCount; dynamicProfileFunctionInfo->callSiteInfoCount = callSiteInfoCount; + dynamicProfileFunctionInfo->callApplyTargetInfoCount = callApplyTargetInfoCount; dynamicProfileFunctionInfo->divCount = divCount; dynamicProfileFunctionInfo->switchCount = switchCount; dynamicProfileFunctionInfo->returnTypeInfoCount = returnTypeInfoCount; @@ -2388,6 +2478,7 @@ namespace Js dynamicProfileInfo->fldInfo = fldInfo; dynamicProfileInfo->slotInfo = slotInfo; dynamicProfileInfo->callSiteInfo = callSiteInfo; + dynamicProfileInfo->callApplyTargetInfo = callApplyTargetInfo; dynamicProfileInfo->divideTypeInfo = divTypeInfo; dynamicProfileInfo->switchTypeInfo = switchTypeInfo; dynamicProfileInfo->returnTypeInfo = returnTypeInfo; @@ -2813,7 +2904,13 @@ const char* GetBailOutKindName(IR::BailOutKind kind) kind ^= BailOutMarkTempObject; position += ConcatBailOutKindBits(name, sizeof(name), position, offset); } + ++offset; + if (kind & LazyBailOut) + { + kind ^= LazyBailOut; + position += ConcatBailOutKindBits(name, sizeof(name), position, offset); + } ++offset; // BailOutKindBits diff --git a/lib/Runtime/Language/DynamicProfileInfo.h b/lib/Runtime/Language/DynamicProfileInfo.h index d8bd6cba4e9..55430338c0c 100644 --- a/lib/Runtime/Language/DynamicProfileInfo.h +++ b/lib/Runtime/Language/DynamicProfileInfo.h @@ -60,6 +60,7 @@ namespace Js Field(ProfileId) arrayCallSiteCount; Field(ProfileId) slotInfoCount; Field(ProfileId) callSiteInfoCount; + Field(ProfileId) callApplyTargetInfoCount; Field(ProfileId) returnTypeInfoCount; Field(ProfileId) divCount; Field(ProfileId) switchCount; @@ -129,7 +130,6 @@ namespace Js } u; }; - // TODO: include ImplicitCallFlags in this structure struct LoopFlags { @@ -460,10 +460,12 @@ namespace Js void RecordAsmJsCallSiteInfo(FunctionBody* callerBody, ProfileId callSiteId, FunctionBody* calleeBody); #endif void RecordCallSiteInfo(FunctionBody* functionBody, ProfileId callSiteId, FunctionInfo * calleeFunctionInfo, JavascriptFunction* calleeFunction, uint actualArgCount, bool isConstructorCall, InlineCacheIndex ldFldInlineCacheId = Js::Constants::NoInlineCacheIndex); + void RecordCallApplyTargetInfo(FunctionBody* functionBody, ProfileId callSiteId, FunctionInfo * targetFunctionInfo, JavascriptFunction* targetFunction); void RecordParameterAtCallSite(FunctionBody * functionBody, ProfileId callSiteId, Var arg, int argNum, Js::RegSlot regSlot); static bool HasCallSiteInfo(FunctionBody* functionBody); bool HasCallSiteInfo(FunctionBody* functionBody, ProfileId callSiteId); // Does a particular callsite have ProfileInfo? FunctionInfo * GetCallbackInfo(FunctionBody * functionBody, ProfileId callSiteId); + FunctionInfo * GetCallApplyTargetInfo(FunctionBody * functionBody, ProfileId callSiteId); bool MayHaveNonBuiltinCallee(ProfileId callSiteId); FunctionInfo * GetCallSiteInfo(FunctionBody* functionBody, ProfileId callSiteId, bool *isConstructorCall, bool *isPolymorphicCall); CallSiteInfo * GetCallSiteInfo() const { return callSiteInfo; } @@ -533,6 +535,7 @@ namespace Js // Replaced with the function body it is verified and matched (See DynamicProfileInfo::MatchFunctionBody) Field(DynamicProfileFunctionInfo *) dynamicProfileFunctionInfo; Field(CallSiteInfo *) callSiteInfo; + Field(CallSiteInfo *) callApplyTargetInfo; Field(ValueType *) returnTypeInfo; // return type of calls for non inline call sites Field(ValueType *) divideTypeInfo; Field(ValueType *) switchTypeInfo; diff --git a/lib/Runtime/Language/EvalMapRecord.h b/lib/Runtime/Language/EvalMapRecord.h index 6f63d60c8e0..fa3b3c4d9e8 100644 --- a/lib/Runtime/Language/EvalMapRecord.h +++ b/lib/Runtime/Language/EvalMapRecord.h @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #pragma once @@ -103,11 +104,11 @@ namespace Js template class TwoLevelHashDictionary { - template + template class AutoRestoreSetInAdd { public: - AutoRestoreSetInAdd(T* instance, Value value) : + AutoRestoreSetInAdd(T* instance, V value) : instance(instance), value(value) { instance->SetIsInAdd(value); @@ -119,7 +120,7 @@ namespace Js private: T* instance; - Value value; + V value; }; public: diff --git a/lib/Runtime/Language/FunctionCodeGenRuntimeData.cpp b/lib/Runtime/Language/FunctionCodeGenRuntimeData.cpp index 4c1656b3ed4..a278e6df3ad 100644 --- a/lib/Runtime/Language/FunctionCodeGenRuntimeData.cpp +++ b/lib/Runtime/Language/FunctionCodeGenRuntimeData.cpp @@ -136,6 +136,16 @@ namespace Js return EnsureInlineeCommon(recycler, profiledCallSiteId, inlinee, callbackInlinees); } + + FunctionCodeGenRuntimeData * FunctionCodeGenRuntimeData::EnsureCallApplyTargetInlinee( + Recycler *const recycler, + const ProfileId callApplyCallSiteId, + FunctionBody *const inlinee) + { + Assert(callApplyCallSiteId < functionBody->GetProfiledCallApplyCallSiteCount()); + return EnsureInlineeCommon(recycler, callApplyCallSiteId, inlinee, callApplyTargetInlinees); + } + const FunctionCodeGenRuntimeData *FunctionCodeGenRuntimeData::GetLdFldInlinee(const InlineCacheIndex inlineCacheIndex) const { Assert(inlineCacheIndex < functionBody->GetInlineCacheCount()); @@ -181,4 +191,11 @@ namespace Js return callbackInlinees ? callbackInlinees[profiledCallSiteId] : nullptr; } + + const FunctionCodeGenRuntimeData * FunctionCodeGenRuntimeData::GetCallApplyTargetInlinee(const ProfileId callApplyCallSiteId) const + { + Assert(callApplyCallSiteId < functionBody->GetProfiledCallApplyCallSiteCount()); + + return callApplyTargetInlinees ? callApplyTargetInlinees[callApplyCallSiteId] : nullptr; + } } diff --git a/lib/Runtime/Language/FunctionCodeGenRuntimeData.h b/lib/Runtime/Language/FunctionCodeGenRuntimeData.h index 73129bb08e2..a2f1fe042c7 100644 --- a/lib/Runtime/Language/FunctionCodeGenRuntimeData.h +++ b/lib/Runtime/Language/FunctionCodeGenRuntimeData.h @@ -30,6 +30,8 @@ namespace Js // There will be a non-null entry for each call site where a function is passed in as an argument Field(Field(FunctionCodeGenRuntimeData *)*) callbackInlinees; + Field(Field(FunctionCodeGenRuntimeData *)*) callApplyTargetInlinees; + Field(FunctionCodeGenRuntimeData *) next; public: @@ -42,6 +44,7 @@ namespace Js Field(FunctionCodeGenRuntimeData*)* GetInlinees() const { return inlinees; } Field(FunctionCodeGenRuntimeData*)* GetLdFldInlinees() const { return ldFldInlinees; } Field(FunctionCodeGenRuntimeData*)* GetCallbackInlinees() const { return callbackInlinees; } + Field(FunctionCodeGenRuntimeData*)* GetCallApplyTargetInlinees() const { return callApplyTargetInlinees; } const FunctionCodeGenRuntimeData *GetForTarget(FunctionBody *targetFuncBody) const; const InlineCachePointerArray *ClonedInlineCaches() const; InlineCachePointerArray *ClonedInlineCaches(); @@ -77,6 +80,12 @@ namespace Js const ProfileId profiledCallSiteId, FunctionBody *const inlinee); + const FunctionCodeGenRuntimeData * GetCallApplyTargetInlinee(const ProfileId callApplyCallSiteId) const; + FunctionCodeGenRuntimeData * EnsureCallApplyTargetInlinee( + Recycler *const recycler, + const ProfileId callApplyCallSiteId, + FunctionBody *const inlinee); + // This function walks all the chained jittimedata and returns the one which match the functionInfo. // This can return null, if the functionInfo doesn't match. const FunctionCodeGenRuntimeData *GetRuntimeDataFromFunctionInfo(FunctionInfo *polyFunctionInfo) const; diff --git a/lib/Runtime/Language/InlineCache.cpp b/lib/Runtime/Language/InlineCache.cpp index 15a6bf19624..37f43d662bb 100644 --- a/lib/Runtime/Language/InlineCache.cpp +++ b/lib/Runtime/Language/InlineCache.cpp @@ -322,12 +322,12 @@ namespace Js if (type == u.accessor.type) { - *callee = RecyclableObject::FromVar(DynamicObject::FromVar(object)->GetInlineSlot(u.accessor.slotIndex)); + *callee = VarTo(VarTo(object)->GetInlineSlot(u.accessor.slotIndex)); return true; } else if (taggedType == u.accessor.type) { - *callee = RecyclableObject::FromVar(DynamicObject::FromVar(object)->GetAuxSlot(u.accessor.slotIndex)); + *callee = VarTo(VarTo(object)->GetAuxSlot(u.accessor.slotIndex)); return true; } } @@ -344,19 +344,19 @@ namespace Js { if (type == u.local.type) { - const Var objectAtInlineSlot = DynamicObject::FromVar(obj)->GetInlineSlot(u.local.slotIndex); + const Var objectAtInlineSlot = VarTo(obj)->GetInlineSlot(u.local.slotIndex); if (!Js::TaggedNumber::Is(objectAtInlineSlot)) { - *callee = RecyclableObject::FromVar(objectAtInlineSlot); + *callee = VarTo(objectAtInlineSlot); return true; } } else if (taggedType == u.local.type) { - const Var objectAtAuxSlot = DynamicObject::FromVar(obj)->GetAuxSlot(u.local.slotIndex); + const Var objectAtAuxSlot = VarTo(obj)->GetAuxSlot(u.local.slotIndex); if (!Js::TaggedNumber::Is(objectAtAuxSlot)) { - *callee = RecyclableObject::FromVar(DynamicObject::FromVar(obj)->GetAuxSlot(u.local.slotIndex)); + *callee = VarTo(VarTo(obj)->GetAuxSlot(u.local.slotIndex)); return true; } } @@ -369,7 +369,7 @@ namespace Js const Var objectAtInlineSlot = u.proto.prototypeObject->GetInlineSlot(u.proto.slotIndex); if (!Js::TaggedNumber::Is(objectAtInlineSlot)) { - *callee = RecyclableObject::FromVar(objectAtInlineSlot); + *callee = VarTo(objectAtInlineSlot); return true; } } @@ -378,7 +378,7 @@ namespace Js const Var objectAtAuxSlot = u.proto.prototypeObject->GetAuxSlot(u.proto.slotIndex); if (!Js::TaggedNumber::Is(objectAtAuxSlot)) { - *callee = RecyclableObject::FromVar(objectAtAuxSlot); + *callee = VarTo(objectAtAuxSlot); return true; } } @@ -468,7 +468,7 @@ namespace Js { isUseFixedProperty = propertyOwnerTypeHandler->TryUseFixedAccessor(methodPropertyRecord, &fixedMethod, Js::FixedPropertyKind::FixedAccessorProperty, this->IsGetterAccessor(), functionBody->GetScriptContext()); } - AssertMsg(fixedMethod == nullptr || Js::JavascriptFunction::Is(fixedMethod), "The fixed value should have been a Method !!!"); + AssertMsg(fixedMethod == nullptr || Js::VarIs(fixedMethod), "The fixed value should have been a Method !!!"); *pFixedMethod = reinterpret_cast(fixedMethod); return isUseFixedProperty; } @@ -1181,7 +1181,7 @@ namespace Js Assert(function != NULL); if (this->function == function && - this->type == RecyclableObject::FromVar(instance)->GetType()) + this->type == VarTo(instance)->GetType()) { if (result != nullptr) { @@ -1222,7 +1222,7 @@ namespace Js this->Set(instanceType, function, result); } } - + /* static */ uint32 IsInstInlineCache::OffsetOfFunction() { diff --git a/lib/Runtime/Language/InlineCache.h b/lib/Runtime/Language/InlineCache.h index b34d7d0845b..c8e9a43bf32 100644 --- a/lib/Runtime/Language/InlineCache.h +++ b/lib/Runtime/Language/InlineCache.h @@ -430,11 +430,11 @@ namespace Js RecyclableObject * function; if (cache->u.accessor.isOnProto) { - function = RecyclableObject::UnsafeFromVar(cache->GetPropertyValue(cache->u.accessor.object, cache->u.accessor.slotIndex)); + function = UnsafeVarTo(cache->GetPropertyValue(cache->u.accessor.object, cache->u.accessor.slotIndex)); } else { - function = RecyclableObject::UnsafeFromVar(cache->GetPropertyValue(DynamicObject::UnsafeFromVar(propertyObject), cache->u.accessor.slotIndex)); + function = UnsafeVarTo(cache->GetPropertyValue(UnsafeVarTo(propertyObject), cache->u.accessor.slotIndex)); } *propertyValue = JavascriptOperators::CallGetter(function, instance, requestContext); @@ -461,12 +461,12 @@ namespace Js #if DBG Var slowPathValue = JavascriptOperators::GetProperty(propertyObject, propertyId, requestContext); Var rootObjectValue = nullptr; - if (RootObjectBase::Is(propertyObject)) + if (VarIs(propertyObject)) { rootObjectValue = JavascriptOperators::GetRootProperty(propertyObject, propertyId, requestContext); } Assert(*propertyValue == slowPathValue || - (RootObjectBase::Is(propertyObject) && *propertyValue == rootObjectValue) || + (VarIs(propertyObject) && *propertyValue == rootObjectValue) || // In some cases, such as CustomExternalObject, if implicit calls are disabled GetPropertyQuery may return null. See CustomExternalObject::GetPropertyQuery for an example. (slowPathValue == requestContext->GetLibrary()->GetNull() && requestContext->GetThreadContext()->IsDisableImplicitCall() && propertyObject->GetType()->IsExternal())); #endif diff --git a/lib/Runtime/Language/InlineCache.inl b/lib/Runtime/Language/InlineCache.inl index aa7d17f8d13..26ed23f3d85 100644 --- a/lib/Runtime/Language/InlineCache.inl +++ b/lib/Runtime/Language/InlineCache.inl @@ -119,7 +119,7 @@ namespace Js template<> inline DynamicObject* InlineCache::GetSourceObject(RecyclableObject *const propertyObject) { - return DynamicObject::UnsafeFromVar(propertyObject); + return UnsafeVarTo(propertyObject); } template<> inline DynamicObject* InlineCache::GetSourceObject(RecyclableObject *const propertyObject) { @@ -212,10 +212,10 @@ namespace Js if (CheckLocal && type == u.local.type) { Assert(object->GetScriptContext() == requestContext); // we never cache a type from another script context - Assert(isRoot || object->GetPropertyIndex(propertyId) == DynamicObject::FromVar(object)->GetTypeHandler()->InlineOrAuxSlotIndexToPropertyIndex(u.local.slotIndex, true)); - Assert(!isRoot || RootObjectBase::FromVar(object)->GetRootPropertyIndex(propertyId) == DynamicObject::FromVar(object)->GetTypeHandler()->InlineOrAuxSlotIndexToPropertyIndex(u.local.slotIndex, true)); + Assert(isRoot || object->GetPropertyIndex(propertyId) == VarTo(object)->GetTypeHandler()->InlineOrAuxSlotIndexToPropertyIndex(u.local.slotIndex, true)); + Assert(!isRoot || VarTo(object)->GetRootPropertyIndex(propertyId) == VarTo(object)->GetTypeHandler()->InlineOrAuxSlotIndexToPropertyIndex(u.local.slotIndex, true)); Assert(object->CanStorePropertyValueDirectly(propertyId, isRoot)); - DynamicObject::UnsafeFromVar(object)->SetInlineSlot(SetSlotArgumentsRoot(propertyId, isRoot, u.local.slotIndex, propertyValue)); + UnsafeVarTo(object)->SetInlineSlot(SetSlotArgumentsRoot(propertyId, isRoot, u.local.slotIndex, propertyValue)); if (ReturnOperationInfo) { operationInfo->cacheType = CacheType_Local; @@ -228,10 +228,10 @@ namespace Js if (CheckLocal && TypeWithAuxSlotTag(type) == u.local.type) { Assert(object->GetScriptContext() == requestContext); // we never cache a type from another script context - Assert(isRoot || object->GetPropertyIndex(propertyId) == DynamicObject::FromVar(object)->GetTypeHandler()->InlineOrAuxSlotIndexToPropertyIndex(u.local.slotIndex, false)); - Assert(!isRoot || RootObjectBase::FromVar(object)->GetRootPropertyIndex(propertyId) == DynamicObject::FromVar(object)->GetTypeHandler()->InlineOrAuxSlotIndexToPropertyIndex(u.local.slotIndex, false)); + Assert(isRoot || object->GetPropertyIndex(propertyId) == VarTo(object)->GetTypeHandler()->InlineOrAuxSlotIndexToPropertyIndex(u.local.slotIndex, false)); + Assert(!isRoot || VarTo(object)->GetRootPropertyIndex(propertyId) == VarTo(object)->GetTypeHandler()->InlineOrAuxSlotIndexToPropertyIndex(u.local.slotIndex, false)); Assert(object->CanStorePropertyValueDirectly(propertyId, isRoot)); - DynamicObject::UnsafeFromVar(object)->SetAuxSlot(SetSlotArgumentsRoot(propertyId, isRoot, u.local.slotIndex, propertyValue)); + UnsafeVarTo(object)->SetAuxSlot(SetSlotArgumentsRoot(propertyId, isRoot, u.local.slotIndex, propertyValue)); if (ReturnOperationInfo) { operationInfo->cacheType = CacheType_Local; @@ -259,15 +259,15 @@ namespace Js AssertMsg(!((DynamicType*)u.local.typeWithoutProperty)->GetTypeHandler()->GetIsPrototype(), "Why did we cache a property add for a prototype?"); Assert(((DynamicType*)typeWithProperty)->GetTypeHandler()->CanStorePropertyValueDirectly((const DynamicObject*)object, propertyId, isRoot)); - DynamicObject *const dynamicObject = DynamicObject::UnsafeFromVar(object); + DynamicObject *const dynamicObject = UnsafeVarTo(object); // If we're adding a property to an inlined slot, we should never need to adjust auxiliary slot array size. Assert(newAuxSlotCapacity == 0); dynamicObject->type = typeWithProperty; - Assert(isRoot || object->GetPropertyIndex(propertyId) == DynamicObject::FromVar(object)->GetTypeHandler()->InlineOrAuxSlotIndexToPropertyIndex(propertyIndex, true)); - Assert(!isRoot || RootObjectBase::FromVar(object)->GetRootPropertyIndex(propertyId) == DynamicObject::FromVar(object)->GetTypeHandler()->InlineOrAuxSlotIndexToPropertyIndex(propertyIndex, true)); + Assert(isRoot || object->GetPropertyIndex(propertyId) == VarTo(object)->GetTypeHandler()->InlineOrAuxSlotIndexToPropertyIndex(propertyIndex, true)); + Assert(!isRoot || VarTo(object)->GetRootPropertyIndex(propertyId) == VarTo(object)->GetTypeHandler()->InlineOrAuxSlotIndexToPropertyIndex(propertyIndex, true)); dynamicObject->SetInlineSlot(SetSlotArgumentsRoot(propertyId, isRoot, propertyIndex, propertyValue)); @@ -295,7 +295,7 @@ namespace Js AssertMsg(!((DynamicType*)TypeWithoutAuxSlotTag(u.local.typeWithoutProperty))->GetTypeHandler()->GetIsPrototype(), "Why did we cache a property add for a prototype?"); Assert(((DynamicType*)typeWithProperty)->GetTypeHandler()->CanStorePropertyValueDirectly((const DynamicObject*)object, propertyId, isRoot)); - DynamicObject *const dynamicObject = DynamicObject::UnsafeFromVar(object); + DynamicObject *const dynamicObject = UnsafeVarTo(object); if (newAuxSlotCapacity > 0) { @@ -307,8 +307,8 @@ namespace Js dynamicObject->type = typeWithProperty; - Assert(isRoot || object->GetPropertyIndex(propertyId) == DynamicObject::FromVar(object)->GetTypeHandler()->InlineOrAuxSlotIndexToPropertyIndex(propertyIndex, false)); - Assert(!isRoot || RootObjectBase::FromVar(object)->GetRootPropertyIndex(propertyId) == DynamicObject::FromVar(object)->GetTypeHandler()->InlineOrAuxSlotIndexToPropertyIndex(propertyIndex, false)); + Assert(isRoot || object->GetPropertyIndex(propertyId) == VarTo(object)->GetTypeHandler()->InlineOrAuxSlotIndexToPropertyIndex(propertyIndex, false)); + Assert(!isRoot || VarTo(object)->GetRootPropertyIndex(propertyId) == VarTo(object)->GetTypeHandler()->InlineOrAuxSlotIndexToPropertyIndex(propertyIndex, false)); dynamicObject->SetAuxSlot(SetSlotArgumentsRoot(propertyId, isRoot, propertyIndex, propertyValue)); @@ -328,11 +328,11 @@ namespace Js RecyclableObject * function; if (u.accessor.isOnProto) { - function = RecyclableObject::UnsafeFromVar(u.accessor.object->GetInlineSlot(u.accessor.slotIndex)); + function = UnsafeVarTo(u.accessor.object->GetInlineSlot(u.accessor.slotIndex)); } else { - function = RecyclableObject::UnsafeFromVar(DynamicObject::FromVar(object)->GetInlineSlot(u.accessor.slotIndex)); + function = UnsafeVarTo(VarTo(object)->GetInlineSlot(u.accessor.slotIndex)); } Assert(setterValue == nullptr || setterValue == function); @@ -359,11 +359,11 @@ namespace Js RecyclableObject * function; if (u.accessor.isOnProto) { - function = RecyclableObject::UnsafeFromVar(u.accessor.object->GetAuxSlot(u.accessor.slotIndex)); + function = UnsafeVarTo(u.accessor.object->GetAuxSlot(u.accessor.slotIndex)); } else { - function = RecyclableObject::UnsafeFromVar(DynamicObject::FromVar(object)->GetAuxSlot(u.accessor.slotIndex)); + function = UnsafeVarTo(VarTo(object)->GetAuxSlot(u.accessor.slotIndex)); } Assert(setterValue == nullptr || setterValue == function); diff --git a/lib/Runtime/Language/InterpreterHandler.inl b/lib/Runtime/Language/InterpreterHandler.inl index 87371173e9b..830a5ecfc29 100644 --- a/lib/Runtime/Language/InterpreterHandler.inl +++ b/lib/Runtime/Language/InterpreterHandler.inl @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- // Default all macro to nothing @@ -45,7 +46,7 @@ EXDEF2 (BRLONG, BrLong, OP_Br) #endif DEF3 (CUSTOM, StartCall, OP_StartCall, StartCall) DEF2 (NOP, Nop, Empty) - DEF2_WMS(NOP, Unused, Reg1) + DEF2_WMS(IP_TARG, ProfiledLoopStart, OP_ProfiledLoopStart) DEF2_WMS(FALLTHROUGH, LoopBodyStart, /* Common case with ProfiledLoopBodyStart */) DEF2_WMS(IP_TARG, ProfiledLoopBodyStart, OP_ProfiledLoopBodyStart) @@ -59,7 +60,9 @@ EXDEF2 (BRLONG, BrLong, OP_Br) DEF2_WMS(BRBMem_ALLOW_STACK, BrFalse_A, OP_BrFalse_A) DEF2_WMS(BRBMem_ALLOW_STACK, BrTrue_A, OP_BrTrue_A) DEF2_WMS(BRB_ALLOW_STACK, BrOnObject_A, JavascriptOperators::IsObject) +EXDEF2_WMS(BRB_ALLOW_STACK, BrOnObjectOrNull_A, JavascriptOperators::IsObjectOrNull) DEF2_WMS(BRB, BrNotNull_A, OP_BrNotNull_A) + DEF2_WMS(BRB, BrOnNotNullObj_A, OP_BrOnNotNullObj_A) //Not emitted for byte code, keep it here for completeness //EXDEF2_WMS(BRB, BrUndecl_A, OP_BrUndecl_A) EXDEF2_WMS(BRB, BrNotUndecl_A, OP_BrNotUndecl_A) @@ -70,9 +73,10 @@ EXDEF2_WMS(BRB, BrNotUndecl_A, OP_BrNotUndecl_A //DEF2 (BRS, BrHasSideEffects, JavascriptOperators::OP_BrHasSideEffects) DEF2 (BRS, BrNotHasSideEffects, JavascriptOperators::OP_BrNotHasSideEffects) EXDEF2 (BRPROP, BrOnHasProperty, OP_BrOnHasProperty) - DEF2 (BRPROP, BrOnNoProperty, OP_BrOnNoProperty) - DEF2 (BRLOCALPROP, BrOnNoLocalProperty, OP_BrOnNoProperty) - DEF2 (BRENVPROP, BrOnNoEnvProperty, OP_BrOnNoEnvProperty) +EXDEF2 (BRPROP, BrOnNoProperty, OP_BrOnNoProperty) + DEF2 (BRLOCALPROP, BrOnHasLocalProperty, OP_BrOnHasProperty) +EXDEF2 (BRENVPROP, BrOnHasEnvProperty, OP_BrOnHasEnvProperty) + DEF2 (BRENVPROP, BrOnHasLocalEnvProperty, OP_BrOnHasEnvProperty) DEF2_WMS(BRBS, BrFncNeqApply, JavascriptOperators::OP_BrFncNeqApply) //Not emitted for byte code, keep it here for completeness //DEF2_WMS(BRBS, BrFncEqApply, JavascriptOperators::OP_BrFncEqApply) @@ -102,6 +106,7 @@ EXDEF2_WMS(A1toA1Mem, NewUnscopablesWrapperObject,JavascriptOperat DEF2_WMS(A1toA1Mem, Decr_A, JavascriptMath::Decrement) DEF2_WMS(A1toA1Mem, Neg_A, JavascriptMath::Negate) DEF2_WMS(A1toA1Mem, Not_A, JavascriptMath::Not) +EXDEF2_WMS(A1toA1Mem, Typeof_ReuseLoc, JavascriptOperators::Typeof) DEF2_WMS(A1toA1Mem, Typeof, JavascriptOperators::Typeof) DEF2_WMS(A1toA1Mem, Delete_A, JavascriptOperators::Delete) DEF2_WMS(GET_ELEM_IMem, TypeofElem, JavascriptOperators::TypeofElem) @@ -132,16 +137,20 @@ EXDEF2_WMS(A1toA1Mem, NewUnscopablesWrapperObject,JavascriptOperat DEF2_WMS(CMMem, CmSrEq_A, JavascriptOperators::StrictEqual) DEF2_WMS(CMMem, CmSrNeq_A, JavascriptOperators::NotStrictEqual) DEF2_WMS(FALLTHROUGH, BeginSwitch, /* Common case with Ld_A */) + DEF2_WMS(FALLTHROUGH, Ld_A_ReuseLoc, /* Common case with Ld_A */) DEF2_WMS(A1toA1_ALLOW_STACK, Ld_A, OP_Ld_A) DEF2_WMS(INNERtoA1, LdInnerScope, OP_Ld_A) +EXDEF2_WMS(XXtoA1, LdLocalObj_ReuseLoc, OP_LdLocalObj) DEF2_WMS(XXtoA1, LdLocalObj, OP_LdLocalObj) EXDEF2_WMS(XXtoA1, LdParamObj, OP_LdParamObj) +EXDEF2_WMS(FALLTHROUGH, UnwrapWithObj_ReuseLoc, /* Common case with UnwrapWithObj */) EXDEF2_WMS(A1toA1_ALLOW_STACK, UnwrapWithObj, JavascriptOperators::OP_UnwrapWithObj) EXDEF2_WMS(A2toXX, SetComputedNameVar, JavascriptOperators::OP_SetComputedNameVar) DEF2_WMS(A1toXX_ALLOW_STACK, ChkUndecl, OP_ChkUndecl) DEF2_WMS(XXtoA1, InitUndecl, OP_InitUndecl) DEF2_WMS(ELEM_RtU_to_XX, EnsureNoRootFld, OP_EnsureNoRootProperty) DEF2_WMS(ELEM_RtU_to_XX, EnsureNoRootRedeclFld, OP_EnsureNoRootRedeclProperty) +EXDEF2_WMS(ELEM_RtU_to_XX, EnsureCanDeclGloFunc, OP_EnsureCanDeclGloFunc) DEF2_WMS(ELEM_C2_to_XX, ScopedEnsureNoRedeclFld, OP_ScopedEnsureNoRedeclProperty) DEF2_WMS(A1toA1Profiled, ProfiledBeginSwitch, PROFILEDOP(ProfiledSwitch, ProfiledSwitch)) DEF2_WMS(XXtoA1Mem, LdC_A_Null, JavascriptOperators::OP_LdNull) @@ -155,13 +164,17 @@ EXDEF2_WMS(A2toXX, SetComputedNameVar, JavascriptOperat DEF2_WMS(CUSTOM_L_Arg, ArgOut_A, OP_ArgOut_A) DEF3_WMS(CUSTOM_L_Arg2, ProfiledArgOut_A, PROFILEDOP(OP_ProfiledArgOut_A, OP_ArgOut_A), ProfiledArg) + DEF2_WMS(FALLTHROUGH, LdFld_ReuseLoc, /* Common case with LdFld */) DEF3_WMS(CUSTOM_L_Value, LdFld, OP_GetProperty, ElementCP) + DEF2_WMS(FALLTHROUGH, LdLocalFld_ReuseLoc, /* Common case with LdLocalFld */) DEF3_WMS(CUSTOM_L_Value, LdLocalFld, OP_GetLocalProperty, ElementP) EXDEF3_WMS(CUSTOM_L_Value, LdSuperFld, OP_GetSuperProperty, ElementC2) DEF3_WMS(CUSTOM_L_Value, LdFldForTypeOf, OP_GetPropertyForTypeOf, ElementCP) EXDEF3_WMS(CUSTOM_L_Value, LdRootFldForTypeOf, OP_GetRootPropertyForTypeOf, ElementRootCP) DEF3_WMS(CUSTOM_L_Value, LdFldForCallApplyTarget, OP_GetProperty, ElementCP) + DEF2_WMS(FALLTHROUGH, ProfiledLdFld_ReuseLoc, /* Common case with ProfiledLdFld */) DEF3_WMS(CUSTOM_L_Value, ProfiledLdFld, PROFILEDOP(OP_ProfiledGetProperty, OP_GetProperty), ElementCP) + DEF2_WMS(FALLTHROUGH, ProfiledLdLocalFld_ReuseLoc,/* Common case with ProfiledLdLocalFld */) DEF3_WMS(CUSTOM_L_Value, ProfiledLdLocalFld, PROFILEDOP(OP_ProfiledGetLocalProperty, OP_GetLocalProperty), ElementP) EXDEF3_WMS(CUSTOM_L_Value, ProfiledLdSuperFld, PROFILEDOP(OP_ProfiledGetSuperProperty, OP_GetSuperProperty), ElementC2) DEF3_WMS(CUSTOM_L_Value, ProfiledLdFldForTypeOf, PROFILEDOP(OP_ProfiledGetPropertyForTypeOf, OP_GetPropertyForTypeOf), ElementCP) @@ -176,6 +189,8 @@ EXDEF3_WMS(CUSTOM_L_Value, ProfiledLdLocalMethodFld, PROFILEDOP(OP_Pr DEF3_WMS(CUSTOM_L_Value, LdRootMethodFld, OP_GetRootMethodProperty, ElementRootCP) DEF3_WMS(CUSTOM_L_Value, ProfiledLdRootMethodFld, PROFILEDOP(OP_ProfiledGetRootMethodProperty, OP_GetRootMethodProperty), ElementRootCP) DEF3_WMS(CUSTOM_L_Value, DeleteFld, OP_DeleteFld, ElementC) +EXDEF3_WMS(CUSTOM_L_Value, DeleteFld_ReuseLoc, OP_DeleteFld, ElementC) +EXDEF2_WMS(FALLTHROUGH, DeleteLocalFld_ReuseLoc, /* Common case with DeleteLocalFld */) EXDEF3_WMS(CUSTOM_L_Value, DeleteLocalFld, OP_DeleteLocalFld, ElementU) DEF3_WMS(CUSTOM_L_Value, DeleteRootFld, OP_DeleteRootFld, ElementC) DEF3_WMS(CUSTOM_L_Value, DeleteFldStrict, OP_DeleteFldStrict, ElementC) @@ -183,9 +198,11 @@ EXDEF3_WMS(CUSTOM_L_Value, DeleteLocalFld, OP_DeleteLocalFl DEF3_WMS(CUSTOM, StFld, OP_SetProperty, ElementCP) DEF3_WMS(CUSTOM, StLocalFld, OP_SetLocalProperty, ElementP) EXDEF3_WMS(CUSTOM_L_Value, StSuperFld, OP_SetSuperProperty, ElementC2) +EXDEF3_WMS(CUSTOM_L_Value, StSuperFldStrict, OP_SetSuperPropertyStrict, ElementC2) DEF3_WMS(CUSTOM, ProfiledStFld, PROFILEDOP(OP_ProfiledSetProperty, OP_SetProperty), ElementCP) DEF3_WMS(CUSTOM, ProfiledStLocalFld, PROFILEDOP(OP_ProfiledSetLocalProperty, OP_SetLocalProperty), ElementP) EXDEF3_WMS(CUSTOM_L_Value, ProfiledStSuperFld, PROFILEDOP(OP_ProfiledSetSuperProperty, OP_SetSuperProperty), ElementC2) +EXDEF3_WMS(CUSTOM_L_Value, ProfiledStSuperFldStrict, PROFILEDOP(OP_ProfiledSetSuperPropertyStrict, OP_SetSuperPropertyStrict), ElementC2) DEF3_WMS(CUSTOM, StRootFld, OP_SetRootProperty, ElementRootCP) DEF3_WMS(CUSTOM, ProfiledStRootFld, PROFILEDOP(OP_ProfiledSetRootProperty, OP_SetRootProperty), ElementRootCP) DEF3_WMS(CUSTOM, StFldStrict, OP_SetPropertyStrict, ElementCP) @@ -221,12 +238,14 @@ EXDEF3_WMS(CUSTOM, InitClassMemberGet, OP_InitClassMemb EXDEF3_WMS(CUSTOM, InitClassMemberSetComputedName, OP_InitClassMemberSetComputedName, ElementI) EXDEF2_WMS(BRB, BrOnClassConstructor, OP_BrOnClassConstructor) EXDEF2_WMS(BRB, BrOnBaseConstructorKind, OP_BrOnBaseConstructorKind) +EXDEF2_WMS(BRB, BrOnConstructor_A, OP_BrOnConstructor) DEF3_WMS(GET_ELEM_LOCALSLOTNonVar,LdLocalSlot, OP_LdSlot, ElementSlotI1) EXDEF3_WMS(GET_ELEM_PARAMSLOTNonVar,LdParamSlot, OP_LdSlot, ElementSlotI1) DEF3_WMS(GET_ELEM_INNERSLOTNonVar,LdInnerSlot, OP_LdInnerSlot, ElementSlotI2) EXDEF3_WMS(GET_ELEM_INNERSLOTNonVar,LdInnerObjSlot, OP_LdInnerObjSlot, ElementSlotI2) DEF3_WMS(GET_ELEM_ENVSLOTNonVar, LdEnvSlot, OP_LdEnvSlot, ElementSlotI2) - DEF3_WMS(GET_ELEM_ENVSLOTNonVar, LdEnvObj, OP_LdEnvObj, ElementSlotI1) +EXDEF2_WMS(FALLTHROUGH, LdEnvObj_ReuseLoc, /* LdEnvObj */) +EXDEF3_WMS(GET_ELEM_ENVSLOTNonVar, LdEnvObj, OP_LdEnvObj, ElementSlotI1) EXDEF3_WMS(GET_ELEM_ENVSLOTNonVar, LdEnvObjSlot, OP_LdEnvObjSlot, ElementSlotI2) EXDEF3_WMS(GET_ELEM_ENVSLOTNonVar, LdModuleSlot, OP_LdModuleSlot, ElementSlotI2) EXDEF2_WMS(SET_ELEM_ENVSLOTNonVar, StModuleSlot, OP_StModuleSlot) @@ -292,7 +311,10 @@ EXDEF3_WMS(CALL, ProfiledNewScObjectSpread, PROFILEDOP(OP_Pr DEF2_WMS(XXtoA1Mem, LdNaN, JavascriptOperators::OP_LdNaN) DEF2_WMS(XXtoA1Mem, LdInfinity, JavascriptOperators::OP_LdInfinity) DEF2_WMS(XXtoA1Mem, LdTrue, JavascriptBoolean::OP_LdTrue) + DEF2_WMS(XXtoA1Mem, LdTrue_ReuseLoc, JavascriptBoolean::OP_LdTrue) DEF2_WMS(XXtoA1Mem, LdFalse, JavascriptBoolean::OP_LdFalse) + DEF2_WMS(XXtoA1Mem, LdFalse_ReuseLoc, JavascriptBoolean::OP_LdFalse) + DEF2_WMS(XXtoA1, LdBaseFncProto, OP_LdBaseFncProto) EXDEF2_WMS(XXtoA1Mem, LdChakraLib, JavascriptOperators::OP_LdChakraLib) DEF2_WMS(A1I1toA1Mem, LdThis, JavascriptOperators::OP_GetThisNoFastPath) EXDEF2_WMS(XXtoA1Mem, LdHomeObj, OP_LdHomeObj) @@ -300,9 +322,7 @@ EXDEF2_WMS(XXtoA1Mem, LdFuncObj, OP_LdFuncObj) EXDEF2_WMS(A1toA1Mem, LdHomeObjProto, JavascriptOperators::OP_LdHomeObjProto) EXDEF2_WMS(A1toA1Mem, LdFuncObjProto, JavascriptOperators::OP_LdFuncObjProto) EXDEF2_WMS(A1toA1Mem, ImportCall, OP_ImportCall) - DEF2_WMS(A1toA1Mem, StrictLdThis, JavascriptOperators::OP_StrictGetThis) DEF2_WMS(A1I1toA1Mem, ProfiledLdThis, PROFILEDOP(OP_ProfiledLdThis, JavascriptOperators::OP_GetThisNoFastPath)) - DEF2_WMS(A1toA1Mem, ProfiledStrictLdThis, PROFILEDOP(OP_ProfiledStrictLdThis, JavascriptOperators::OP_StrictGetThis)) DEF2_WMS(XXtoA1Mem, LdHeapArgsCached, OP_LdHeapArgsCached) EXDEF2_WMS(XXtoA1Mem, LdLetHeapArgsCached, OP_LdLetHeapArgsCached) EXDEF2_WMS(XXtoA1NonVar, LdStackArgPtr, OP_LdStackArgPtr) @@ -317,6 +337,7 @@ EXDEF3_WMS(CUSTOM, InitProto, OP_InitProto, El DEF3_WMS(CUSTOM, StFuncExpr, OP_StFunctionExpression, ElementC) DEF3_WMS(CUSTOM, StLocalFuncExpr, OP_StLocalFunctionExpression, ElementU) EXDEF3_WMS(CUSTOM_L_R0, LdNewTarget, OP_LdNewTarget, Reg1) +EXDEF3_WMS(CUSTOM_L_R0, LdImportMeta, OP_LdImportMeta, Reg1Unsigned1) EXDEF2 (EMPTY, ChkNewCallFlag, OP_ChkNewCallFlag) DEF2_WMS(U1toINNERMemNonVar, NewBlockScope, JavascriptOperators::OP_NewBlockScope) DEF3_WMS(CUSTOM, CloneBlockScope, OP_CloneBlockScope, Unsigned1) @@ -331,6 +352,8 @@ EXDEF2_WMS(GET_ELEM_SLOT_FB, NewInnerScGenFunc, JavascriptGenera EXDEF2_WMS(GET_SLOT_FB_HMO, NewScGenFuncHomeObj, JavascriptGeneratorFunction::OP_NewScGenFuncHomeObj) EXDEF2_WMS(GET_ELEM_SLOT_FB_HMO, NewInnerScFuncHomeObj, ScriptFunction::OP_NewScFuncHomeObj) EXDEF2_WMS(GET_ELEM_SLOT_FB_HMO, NewInnerScGenFuncHomeObj, JavascriptGeneratorFunction::OP_NewScGenFuncHomeObj) +EXDEF2_WMS(A1toA1Mem, NewAsyncFromSyncIterator, JavascriptOperators::OP_NewAsyncFromSyncIterator) +EXDEF2_WMS(XXtoA1Mem, NewAwaitObject, JavascriptOperators::OP_NewAwaitObject) DEF2_WMS(A1U1toXX, InitForInEnumerator, OP_InitForInEnumerator) DEF2_WMS(A1U1toXXWithCache, ProfiledInitForInEnumerator,OP_InitForInEnumeratorWithCache) DEF2_WMS(A1toXXMem, Throw, JavascriptExceptionOperators::OP_Throw) @@ -366,7 +389,7 @@ EXDEF3_WMS(CUSTOM, LdLocalElemUndef, OP_LdLocalElemen DEF3 (CUSTOM_L_R0, LdPropIds, OP_LdPropIds, Auxiliary) DEF3 (CUSTOM, InitCachedFuncs, OP_InitCachedFuncs, AuxNoReg) DEF2_WMS(LOCALI1toA1, GetCachedFunc, OP_GetCachedFunc) - DEF2_WMS(EnvU1toXX, InvalCachedScope, JavascriptOperators::OP_InvalidateCachedScope) +EXDEF2_WMS(EnvU1toXX, InvalCachedScope, JavascriptOperators::OP_InvalidateCachedScope) DEF2 (EMPTY, CommitScope, OP_CommitScope) DEF2_WMS(A1I2toXXNonVar_FuncBody, NewInnerScopeSlots, OP_NewInnerScopeSlots) DEF3_WMS(CUSTOM, CloneInnerScopeSlots, OP_CloneInnerScopeSlots, Unsigned1) @@ -378,24 +401,33 @@ EXDEF3_WMS(CUSTOM, LdLocalElemUndef, OP_LdLocalElemen DEF3 (CUSTOM_L_R0, ProfiledNewScIntArray, PROFILEDOP(ProfiledNewScIntArray, ProfiledNewScIntArray), ProfiledAuxiliary) DEF3 (CUSTOM_L_R0, ProfiledNewScFltArray, PROFILEDOP(ProfiledNewScFltArray, ProfiledNewScFltArray), ProfiledAuxiliary) DEF2_WMS(RegextoA1, NewRegEx, JavascriptRegExp::OP_NewRegEx) -EXDEF3_WMS(CUSTOM, InitClass, OP_InitClass, Class) +EXDEF2_WMS(XXtoA2_FB, InitBaseClass, OP_InitBaseClass) +EXDEF2_WMS(A1toA2_FB, InitInnerBaseClass, OP_InitBaseClass) +EXDEF2_WMS(A2toA2_FB, InitClass, OP_InitClass) +EXDEF2_WMS(A3toA2_FB, InitInnerClass, OP_InitClass) DEF2_WMS(BRBReturnP1toA1, BrOnEmpty, JavascriptOperators::OP_BrOnEmpty) DEF2 (TRY, TryCatch, OP_TryCatch) DEF2 (TRY, TryFinally, OP_TryFinally) EXDEF2_WMS(TRYBR2, TryFinallyWithYield, OP_TryFinallyWithYield) EXDEF2 (EMPTY, ResumeCatch, OP_ResumeCatch) EXDEF2_WMS(TRYBR2, ResumeFinally, OP_ResumeFinally) - DEF2_WMS(A1NonVarToA1, ResumeYield, OP_ResumeYield) - DEF2_WMS(A2NonVarToA1Reg, ResumeYieldStar, OP_ResumeYield) EXDEF2 (W1, RuntimeTypeError, JavascriptExceptionOperators::OP_RuntimeTypeError) EXDEF2 (W1, RuntimeReferenceError, JavascriptExceptionOperators::OP_RuntimeReferenceError) - DEF3 (CUSTOM_L_R0, SpreadArrayLiteral, OP_SpreadArrayLiteral, Reg2Aux) +EXDEF3 (CUSTOM_L_R0, SpreadArrayLiteral, OP_SpreadArrayLiteral, Reg2Aux) EXDEF3_WMS(CUSTOM, ClearAttributes, OP_ClearAttributes, ElementU) DEF3_WMS(CUSTOM, ApplyArgs, OP_ApplyArgs, Reg5) #ifdef ENABLE_SCRIPT_DEBUGGING EXDEF3_WMS(CUSTOM, EmitTmpRegCount, OP_EmitTmpRegCount, Unsigned1) #endif EXDEF2 (EMPTY, BeginBodyScope, OP_BeginBodyScope) +EXDEF2_WMS(A2toXXMem, SpreadObjectLiteral, JavascriptObject::SpreadObjectLiteral) +EXDEF2_WMS(A2A2NonVartoXXMem, Restify, JavascriptObject::Restify) +EXDEF2_WMS(SET_ELEM_SLOTMem, StPropIdArrFromVar, OP_StPropIdArrFromVar) +EXDEF2_WMS(SIZEtoA1MemNonVar, NewPropIdArrForCompProps, OP_NewPropIdArrForCompProps) + +EXDEF2_WMS(A1toA1Mem, Conv_Numeric, JavascriptOperators::ToNumeric) +EXDEF2_WMS(A1toA1Mem, Incr_Num_A, JavascriptMath::Increment_Numeric) +EXDEF2_WMS(A1toA1Mem, Decr_Num_A, JavascriptMath::Decrement_Numeric) #endif diff --git a/lib/Runtime/Language/InterpreterHandlerAsmJs.inl b/lib/Runtime/Language/InterpreterHandlerAsmJs.inl index 8f33762a32b..33e95754460 100755 --- a/lib/Runtime/Language/InterpreterHandlerAsmJs.inl +++ b/lib/Runtime/Language/InterpreterHandlerAsmJs.inl @@ -420,7 +420,7 @@ EXDEF2_WMS( SIMD_B8_1U8_2toU8_1 , Simd128_Select_U8 , Js::SIMDInt32x4Opera EXDEF2_WMS( SIMD_B16_1U16_2toU16_1 , Simd128_Select_U16 , Js::SIMDInt32x4Operation::OpSelect ) // args out, copy value to outParams -EXDEF3_WMS ( CUSTOM_ASMJS , Simd128_ArgOut_F4 , (OP_InvalidWasmTypeConversion) , Reg1Float32x4_1) +EXDEF3_WMS ( CUSTOM_ASMJS , Simd128_ArgOut_F4 , (OP_InvalidWasmTypeConversion) , Reg1Float32x4_1) EXDEF2_WMS ( SIMD_F4_1toR1Mem , Simd128_I_ArgOut_F4 , OP_I_SetOutAsmSimd ) DEF2_WMS ( SIMD_I4_1toR1Mem , Simd128_I_ArgOut_I4 , OP_I_SetOutAsmSimd ) diff --git a/lib/Runtime/Language/InterpreterLoop.inl b/lib/Runtime/Language/InterpreterLoop.inl index 026d3e98365..25499577190 100644 --- a/lib/Runtime/Language/InterpreterLoop.inl +++ b/lib/Runtime/Language/InterpreterLoop.inl @@ -170,7 +170,7 @@ Js::Var Js::InterpreterStackFrame::INTERPRETERLOOPNAME() } Assert(this->returnAddress != nullptr); - AssertMsg(!this->GetFunctionBody()->GetUsesArgumentsObject() || m_arguments == NULL || Js::ArgumentsObject::Is(m_arguments), "Bad arguments!"); + AssertMsg(!this->GetFunctionBody()->GetUsesArgumentsObject() || m_arguments == NULL || Js::VarIs(m_arguments), "Bad arguments!"); // IP Passing in the interpreter: // We keep a local copy of the bytecode's instruction pointer and @@ -307,6 +307,7 @@ SWAP_BP_FOR_OPCODE: #ifndef INTERPRETER_ASMJS case INTERPRETER_OPCODE::Yield: { + this->retOffset = m_reader.GetCurrentOffset(); m_reader.Reg2_Small(ip); return GetReg(GetFunctionBody()->GetYieldRegister()); } diff --git a/lib/Runtime/Language/InterpreterProcessOpCodeAsmJs.h b/lib/Runtime/Language/InterpreterProcessOpCodeAsmJs.h index d239a33ba7c..74889b4da31 100755 --- a/lib/Runtime/Language/InterpreterProcessOpCodeAsmJs.h +++ b/lib/Runtime/Language/InterpreterProcessOpCodeAsmJs.h @@ -2308,4 +2308,4 @@ if (switchProfileMode) \ -#endif \ No newline at end of file +#endif diff --git a/lib/Runtime/Language/InterpreterStackFrame.cpp b/lib/Runtime/Language/InterpreterStackFrame.cpp index 8848ba7f454..6a002ab3f01 100644 --- a/lib/Runtime/Language/InterpreterStackFrame.cpp +++ b/lib/Runtime/Language/InterpreterStackFrame.cpp @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft Corporation and contributors. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- @@ -283,6 +284,17 @@ #define PROCESS_A1toA1MemNonVar(name, func) PROCESS_A1toA1MemNonVar_COMMON(name, func,) +#define PROCESS_SIZEtoA1MemNonVar_COMMON(name, func, suffix) \ + case OpCode::name: \ + { \ + PROCESS_READ_LAYOUT(name, Reg1Unsigned1, suffix); \ + SetNonVarReg(playout->R0, \ + func(playout->C1, GetScriptContext())); \ + break; \ + } + +#define PROCESS_SIZEtoA1MemNonVar(name, func) PROCESS_SIZEtoA1MemNonVar_COMMON(name, func,) + #define PROCESS_INNERtoA1_COMMON(name, func, suffix) \ case OpCode::name: \ { \ @@ -303,6 +315,52 @@ #define PROCESS_U1toINNERMemNonVar(name, func) PROCESS_U1toINNERMemNonVar_COMMON(name, func,) +#define PROCESS_XXtoA2_FB_COMMON(name, func, suffix) \ + case OpCode::name: \ + { \ + PROCESS_READ_LAYOUT(name, Reg2U, suffix); \ + SetReg(playout->R0, \ + func(this->GetFrameDisplayForNestedFunc(), this->m_functionBody->GetNestedFuncReference(playout->SlotIndex), playout->R1)); \ + break; \ + } + +#define PROCESS_XXtoA2_FB(name, func) PROCESS_XXtoA2_FB_COMMON(name, func,) + +#define PROCESS_A1toA2_FB_COMMON(name, func, suffix) \ + case OpCode::name: \ + { \ + PROCESS_READ_LAYOUT(name, Reg3U, suffix); \ + SetReg(playout->R0, \ + func((FrameDisplay*)GetNonVarReg(playout->R2), this->m_functionBody->GetNestedFuncReference(playout->SlotIndex), playout->R1)); \ + break; \ + } + +#define PROCESS_A1toA2_FB(name, func) PROCESS_A1toA2_FB_COMMON(name, func,) + +#define PROCESS_A2toA2_FB_COMMON(name, func, suffix) \ + case OpCode::name: \ + { \ + PROCESS_READ_LAYOUT(name, Reg4U, suffix); \ + SetReg(playout->R0, \ + func(this->GetFrameDisplayForNestedFunc(), this->m_functionBody->GetNestedFuncReference(playout->SlotIndex), \ + GetReg(playout->R2), GetReg(playout->R3), playout->R1)); \ + break; \ + } + +#define PROCESS_A2toA2_FB(name, func) PROCESS_A2toA2_FB_COMMON(name, func,) + +#define PROCESS_A3toA2_FB_COMMON(name, func, suffix) \ + case OpCode::name: \ + { \ + PROCESS_READ_LAYOUT(name, Reg5U, suffix); \ + SetReg(playout->R0, \ + func((FrameDisplay*)GetNonVarReg(playout->R4), this->m_functionBody->GetNestedFuncReference(playout->SlotIndex), \ + GetReg(playout->R2), GetReg(playout->R3), playout->R1)); \ + break; \ + } + +#define PROCESS_A3toA2_FB(name, func) PROCESS_A3toA2_FB_COMMON(name, func,) + #define PROCESS_XXINNERtoA1MemNonVar_COMMON(name, func, suffix) \ case OpCode::name: \ { \ @@ -389,6 +447,26 @@ #define PROCESS_A2toXXMemNonVar(name, func) PROCESS_A2toXXMemNonVar_COMMON(name, func,) +#define PROCESS_A2toXXMem_COMMON(name, func, suffix) \ + case OpCode::name: \ + { \ + PROCESS_READ_LAYOUT(name, Reg2, suffix); \ + func(GetReg(playout->R0), GetReg(playout->R1), GetScriptContext()); \ + break; \ + } + +#define PROCESS_A2A2NonVartoXXMem(name, func) PROCESS_A2A2NonVartoXXMem_COMMON(name, func,) + +#define PROCESS_A2A2NonVartoXXMem_COMMON(name, func, suffix) \ + case OpCode::name: \ + { \ + PROCESS_READ_LAYOUT(name, Reg4, suffix); \ + func(GetReg(playout->R0), GetReg(playout->R1), GetNonVarReg(playout->R2), GetNonVarReg(playout->R3), GetScriptContext()); \ + break; \ + } + +#define PROCESS_A2toXXMem(name, func) PROCESS_A2toXXMem_COMMON(name, func,) + #define PROCESS_A1NonVarToA1_COMMON(name, func, suffix) \ case OpCode::name: \ { \ @@ -828,6 +906,16 @@ #define PROCESS_SET_ELEM_SLOTNonVar(name, func) PROCESS_SET_ELEM_SLOTNonVar_COMMON(name, func,) +#define PROCESS_SET_ELEM_SLOTMem_COMMON(name, func, suffix) \ + case OpCode::name: \ + { \ + PROCESS_READ_LAYOUT(name, ElementSlot, suffix); \ + func(GetNonVarReg(playout->Instance), playout->SlotIndex, GetReg(playout->Value), GetScriptContext()); \ + break; \ + } + +#define PROCESS_SET_ELEM_SLOTMem(name, func) PROCESS_SET_ELEM_SLOTMem_COMMON(name, func,) + #define PROCESS_SET_ELEM_LOCALSLOTNonVar_COMMON(name, func, suffix) \ case OpCode::name: \ { \ @@ -980,23 +1068,37 @@ namespace Js } const int k_stackFrameVarCount = (sizeof(InterpreterStackFrame) + sizeof(Var) - 1) / sizeof(Var); - InterpreterStackFrame::Setup::Setup(Js::ScriptFunction * function, Js::Arguments& args, bool bailedOut, bool inlinee) - : function(function), inParams(args.Values), inSlotsCount(args.Info.Count), executeFunction(function->GetFunctionBody()), callFlags(args.Info.Flags), bailedOutOfInlinee(inlinee), bailedOut(bailedOut) + InterpreterStackFrame::Setup::Setup(Js::ScriptFunction * function, Js::Arguments& args, bool bailedOut, bool inlinee, bool isGeneratorFrame) + : function(function), + inParams(args.Values), + inSlotsCount(args.Info.Count), + executeFunction(function->GetFunctionBody()), + callFlags(args.Info.Flags), + bailedOutOfInlinee(inlinee), + bailedOut(bailedOut), + isGeneratorFrame(isGeneratorFrame) { SetupInternal(); } InterpreterStackFrame::Setup::Setup(Js::ScriptFunction * function, Var * inParams, int inSlotsCount) - : function(function), inParams(inParams), inSlotsCount(inSlotsCount), executeFunction(function->GetFunctionBody()), callFlags(CallFlags_None), bailedOutOfInlinee(false), bailedOut(false) + : function(function), + inParams(inParams), + inSlotsCount(inSlotsCount), + executeFunction(function->GetFunctionBody()), + callFlags(CallFlags_None), + bailedOutOfInlinee(false), + bailedOut(false), + isGeneratorFrame(false) { SetupInternal(); } void InterpreterStackFrame::Setup::SetupInternal() { - if (this->function->GetHasInlineCaches() && Js::ScriptFunctionWithInlineCache::Is(this->function)) + if (this->function->GetHasInlineCaches() && Js::VarIs(this->function)) { - this->inlineCaches = (void**)Js::ScriptFunctionWithInlineCache::FromVar(this->function)->GetInlineCaches(); + this->inlineCaches = (void**)Js::VarTo(this->function)->GetInlineCaches(); Assert(this->inlineCaches != nullptr); } else @@ -1018,8 +1120,9 @@ namespace Js extraVarCount += (sizeof(ImplicitCallFlags) * this->executeFunction->GetLoopCount() + sizeof(Var) - 1) / sizeof(Var); } #endif - // If we bailed out, we will use the JIT frame's for..in enumerators - uint forInVarCount = bailedOut ? 0 : (this->executeFunction->GetForInLoopDepth() * (sizeof(Js::ForInObjectEnumerator) / sizeof(Var))); + // If we bailed out, we will use the JIT frame's for..in enumerators. + // But for generators, we will allocate space for them instead. + uint forInVarCount = (bailedOut && !isGeneratorFrame) ? 0 : (this->executeFunction->GetForInLoopDepth() * (sizeof(Js::ForInObjectEnumerator) / sizeof(Var))); this->varAllocCount = k_stackFrameVarCount + localCount + this->executeFunction->GetOutParamMaxDepth() + forInVarCount + extraVarCount + this->executeFunction->GetInnerScopeCount(); this->stackVarAllocCount = 0; @@ -1117,7 +1220,7 @@ namespace Js !(this->executeFunction->GetHasTry() && (PHASE_OFF((Js::JITLoopBodyInTryCatchPhase), this->executeFunction))) && !(this->executeFunction->GetHasFinally() && (PHASE_OFF((Js::JITLoopBodyInTryFinallyPhase), this->executeFunction))) && (this->executeFunction->ForceJITLoopBody() || this->executeFunction->IsJitLoopBodyPhaseEnabled()) && - !this->executeFunction->IsInDebugMode(); + !this->executeFunction->IsInDebugMode() && this->executeFunction->GetLoopHeaderArray() != nullptr; #endif // Pick a version of the LoopBodyStart OpCode handlers that is hardcoded to do loop body JIT and @@ -1167,7 +1270,7 @@ namespace Js char * nextAllocBytes = (char *)(outparamsEnd); // If we bailed out, we will use the JIT frame's for..in enumerators - if (bailedOut || this->executeFunction->GetForInLoopDepth() == 0) + if (this->executeFunction->GetForInLoopDepth() == 0 || (!isGeneratorFrame && bailedOut)) { newInstance->forInObjectEnumerators = nullptr; } @@ -1711,19 +1814,19 @@ namespace Js } #endif -#if !defined(_M_ARM64) +#if defined(_M_ARM64) && defined(_WIN32) + // Language\arm64\arm64_Thunks.asm +#else Var InterpreterStackFrame::StaticInterpreterThunk(RecyclableObject* function, CallInfo callInfo, ...) { return InterpreterThunk((JavascriptCallStackLayout*)&function); } -#else - // Language\arm64\arm64_Thunks.asm #endif #pragma optimize("", on) Var InterpreterStackFrame::InterpreterThunk(JavascriptCallStackLayout* layout) { - Js::ScriptFunction * function = Js::ScriptFunction::UnsafeFromVar(layout->functionObject); + Js::ScriptFunction * function = Js::UnsafeVarTo(layout->functionObject); Js::ArgumentReader args(&layout->callInfo, layout->args); void* localReturnAddress = _ReturnAddress(); void* localAddressOfReturnAddress = _AddressOfReturnAddress(); @@ -1737,13 +1840,13 @@ namespace Js ARGUMENTS(args, callInfo); void* localReturnAddress = _ReturnAddress(); void* localAddressOfReturnAddress = _AddressOfReturnAddress(); - Assert(ScriptFunction::Is(function)); - return InterpreterHelper(ScriptFunction::FromVar(function), args, localReturnAddress, localAddressOfReturnAddress); + Assert(VarIs(function)); + return InterpreterHelper(VarTo(function), args, localReturnAddress, localAddressOfReturnAddress); } #pragma optimize("", on) #endif - const bool InterpreterStackFrame::ShouldDoProfile(FunctionBody* executeFunction) + bool InterpreterStackFrame::ShouldDoProfile(FunctionBody* executeFunction) { #if ENABLE_PROFILE_INFO const bool doProfile = executeFunction->GetInterpreterExecutionMode(false) == ExecutionMode::ProfilingInterpreter || @@ -1762,7 +1865,7 @@ namespace Js // ScriptContext* functionScriptContext = function->GetScriptContext(); Arguments generatorArgs = generator->GetArguments(); - InterpreterStackFrame::Setup setup(function, generatorArgs); + InterpreterStackFrame::Setup setup(function, generatorArgs, false /* bailedOut */, false /* inlinee */, true /* isGeneratorFrame */); Assert(setup.GetStackAllocationVarCount() == 0); size_t varAllocCount = setup.GetAllocationVarCount(); size_t varSizeInBytes = varAllocCount * sizeof(Var); @@ -1788,6 +1891,20 @@ namespace Js newInstance->m_reader.Create(executeFunction); generator->SetFrame(newInstance, varSizeInBytes); + + // Moving this to when we create the generator instance in the first place would be nice. + // But at that point the function might not have been parsed yet, so we don't have the locals count. + // We are also allocating more space than we actually need because we shouldn't need to + // reload all the symbols when bailing in. +#ifdef ENABLE_DEBUG_CONFIG_OPTIONS + if (PHASE_TRACE(Js::Phase::BailInPhase, function->GetFunctionBody())) + { + generator->bailInSymbolsTraceArray = (Js::JavascriptGenerator::BailInSymbol*) RecyclerNewArrayLeafZ( + functionScriptContext->GetRecycler(), Js::JavascriptGenerator::BailInSymbol, executeFunction->GetFunctionBody()->GetLocalsCount() + ); + } +#endif + return newInstance; } @@ -1822,7 +1939,7 @@ namespace Js Assert(threadContext->IsScriptActive()); Assert(threadContext->IsInScript()); - FunctionBody* executeFunction = JavascriptFunction::UnsafeFromVar(function)->GetFunctionBody(); + FunctionBody* executeFunction = function->GetFunctionBody(); #ifdef ENABLE_DEBUG_CONFIG_OPTIONS if (!isAsmJs && executeFunction->IsInDebugMode() != functionScriptContext->IsScriptContextInDebugMode()) // debug mode mismatch { @@ -1900,22 +2017,23 @@ namespace Js // If the FunctionBody is a generator then this call is being made by one of the three // generator resuming methods: next(), throw(), or return(). They all pass the generator // object as the first of two arguments. The real user arguments are obtained from the - // generator object. The second argument is the ResumeYieldData which is only needed - // when resuming a generator and so it only used here if a frame already exists on the + // generator object. The second argument is the resume yield object which is only needed + // when resuming a generator and so it is only used here if a frame already exists on the // generator object. - AssertOrFailFastMsg(args.Info.Count == 2 && ((args.Info.Flags & CallFlags_ExtraArg) == CallFlags_None), "Generator ScriptFunctions should only be invoked by generator APIs with the pair of arguments they pass in -- the generator object and a ResumeYieldData pointer"); + AssertOrFailFastMsg(args.Info.Count == 2 && ((args.Info.Flags & CallFlags_ExtraArg) == CallFlags_None), "Generator ScriptFunctions should only be invoked by generator APIs with the pair of arguments they pass in -- the generator object and a resume yield object"); - JavascriptGenerator* generator = JavascriptGenerator::FromVar(args[0]); + JavascriptGenerator* generator = VarTo(args[0]); newInstance = generator->GetFrame(); if (newInstance != nullptr) { - ResumeYieldData* resumeYieldData = static_cast(args[1]); - newInstance->SetNonVarReg(executeFunction->GetYieldRegister(), resumeYieldData); + newInstance->SetNonVarReg(executeFunction->GetYieldRegister(), args[1]); // The debugger relies on comparing stack addresses of frames to decide when a step_out is complete so // give the InterpreterStackFrame a legit enough stack address to make this comparison work. newInstance->m_stackAddress = reinterpret_cast(&generator); + + newInstance->retOffset = 0; } else { @@ -2198,7 +2316,7 @@ namespace Js template T InterpreterStackFrame::AsmJsInterpreter(AsmJsCallStackLayout* layout) { - Js::ScriptFunction * function = Js::ScriptFunction::FromVar(layout->functionObject); + Js::ScriptFunction * function = Js::VarTo(layout->functionObject); int flags = CallFlags_Value; ArgSlot nbArgs = ArgSlotMath::Add(function->GetFunctionBody()->GetAsmJsFunctionInfo()->GetArgCount(), 1); @@ -2412,8 +2530,7 @@ namespace Js if (exception) { bool skipException = false; - if (!exception->IsGeneratorReturnException() && - exception != scriptContext->GetThreadContext()->GetPendingSOErrorObject() && + if (exception != scriptContext->GetThreadContext()->GetPendingSOErrorObject() && exception != scriptContext->GetThreadContext()->GetPendingOOMErrorObject()) { skipException = exception->IsDebuggerSkip(); @@ -2616,7 +2733,7 @@ namespace Js if (CONFIG_FLAG(AsmJsEdge)) { // emscripten had a bug which caused this check to fail in some circumstances, so this check fails for some demos - if (!TaggedNumber::Is(value) && (!RecyclableObject::Is(value) || DynamicType::Is(RecyclableObject::FromVar(value)->GetTypeId()))) + if (!TaggedNumber::Is(value) && (!VarIs(value) || DynamicType::Is(VarTo(value)->GetTypeId()))) { AsmJSCompiler::OutputError(this->scriptContext, _u("Asm.js Runtime Error : Var import %s must be primitive"), this->scriptContext->GetPropertyName(import.field)->GetBuffer()); goto linkFailure; @@ -2659,7 +2776,7 @@ namespace Js AsmJSCompiler::OutputError(this->scriptContext, _u("Asm.js Runtime Error : Accessing foreign function import %s has side effects"), this->scriptContext->GetPropertyName(import.field)->GetBuffer()); return this->ProcessLinkFailedAsmJsModule(); } - if (!JavascriptFunction::Is(importFunc)) + if (!VarIs(importFunc)) { AsmJSCompiler::OutputError(this->scriptContext, _u("Asm.js Runtime Error : Foreign function import %s is not a function"), this->scriptContext->GetPropertyName(import.field)->GetBuffer()); goto linkFailure; @@ -2944,13 +3061,13 @@ namespace Js } // Load module environment - AsmJsScriptFunction* asmJsFunc = AsmJsScriptFunction::FromVar(this->function); + AsmJsScriptFunction* asmJsFunc = VarTo(this->function); m_localSlots[AsmJsFunctionMemory::ModuleEnvRegister] = asmJsFunc->GetModuleEnvironment(); m_localSlots[AsmJsFunctionMemory::ArrayBufferRegister] = nullptr; #ifdef ENABLE_WASM - if (WasmScriptFunction::Is(func)) + if (VarIs(func)) { - WasmScriptFunction* wasmFunc = WasmScriptFunction::FromVar(func); + WasmScriptFunction* wasmFunc = VarTo(func); m_wasmMemory = wasmFunc->GetWebAssemblyMemory(); m_signatures = func->GetFunctionBody()->GetAsmJsFunctionInfo()->GetWebAssemblyModule()->GetSignatures(); } @@ -3523,7 +3640,7 @@ namespace Js Js::Var instance = this->GetRootObject(); PropertyId propertyId = GetPropertyIdFromCacheId(playout->inlineCacheIndex); InlineCache *inlineCache = this->GetInlineCache(playout->inlineCacheIndex); - DynamicObject *obj = DynamicObject::UnsafeFromVar(instance); + DynamicObject *obj = UnsafeVarTo(instance); PropertyValueInfo info; PropertyValueInfo::SetCacheInfo(&info, GetFunctionBody(), inlineCache, playout->inlineCacheIndex, true); @@ -3549,7 +3666,7 @@ namespace Js GetFunctionBody(), GetInlineCache(playout->inlineCacheIndex), playout->inlineCacheIndex, - DynamicObject::UnsafeFromVar(rootInstance), + UnsafeVarTo(rootInstance), propertyId ); @@ -3575,9 +3692,9 @@ namespace Js PropertyId propertyId = GetPropertyIdFromCacheId(playout->inlineCacheIndex); RecyclableObject* obj = NULL; - if (RecyclableObject::Is(varInstance)) + if (VarIs(varInstance)) { - obj = RecyclableObject::FromVar(varInstance); + obj = VarTo(varInstance); } InlineCache *inlineCache = this->GetInlineCache(playout->inlineCacheIndex); @@ -3698,7 +3815,7 @@ namespace Js } void InterpreterStackFrame::OP_CallAsmInternalCommon(ScriptFunction* function, RegSlot returnReg) { - AsmJsScriptFunction* scriptFunc = AsmJsScriptFunction::FromVar(function); + AsmJsScriptFunction* scriptFunc = VarTo(function); AsmJsFunctionInfo* asmInfo = scriptFunc->GetFunctionBody()->GetAsmJsFunctionInfo(); uint alignedArgsSize = ::Math::Align(asmInfo->GetArgByteSize(), 16); #if _M_X64 && _WIN32 @@ -3758,15 +3875,19 @@ namespace Js case AsmJsRetType::Uint8x16: #if _WIN32 //WASM.SIMD ToDo: Enable thunk for Xplat #if _M_X64 +#if !defined(__clang__) X86SIMDValue simdVal; simdVal.m128_value = JavascriptFunction::CallAsmJsFunction<__m128>(function, jsMethod, m_outParams, alignedArgsSize, reg); m_localSimdSlots[returnReg] = X86SIMDValue::ToSIMDValue(simdVal); +#else + AssertOrFailFastMsg(false, "This particular path causes linking issues in clang on windows; potential difference in name mangling?"); +#endif // !defined(__clang__) #else m_localSimdSlots[returnReg] = JavascriptFunction::CallAsmJsFunction(function, jsMethod, m_outParams, alignedArgsSize, reg); -#endif -#endif +#endif // _M_X64 +#endif // _WIN32 break; -#endif +#endif // ENABLE_WASM_SIMD default: Assume(UNREACHED); } @@ -3884,13 +4005,41 @@ namespace Js template void InterpreterStackFrame::OP_ProfileCallCommon(const unaligned T * playout, RecyclableObject * function, unsigned flags, ProfileId profileId, InlineCacheIndex inlineCacheIndex, const Js::AuxArray *spreadIndices) { + JavascriptFunction * targetFunction = VarIs(m_outParams[0]) ? UnsafeVarTo(m_outParams[0]) : nullptr; FunctionBody* functionBody = this->m_functionBody; - DynamicProfileInfo * dynamicProfileInfo = functionBody->GetDynamicProfileInfo(); FunctionInfo* functionInfo = function->GetTypeId() == TypeIds_Function ? - JavascriptFunction::FromVar(function)->GetFunctionInfo() : nullptr; + VarTo(function)->GetFunctionInfo() : nullptr; + DynamicProfileInfo* dynamicProfileInfo = functionBody->GetDynamicProfileInfo(); bool isConstructorCall = (CallFlags_New & flags) == CallFlags_New; - dynamicProfileInfo->RecordCallSiteInfo(functionBody, profileId, functionInfo, functionInfo ? static_cast(function) : nullptr, playout->ArgCount, isConstructorCall, inlineCacheIndex); + + OP_CallCommon(playout, function, flags, spreadIndices); + + + // Profile call site + + dynamicProfileInfo->RecordCallSiteInfo(functionBody, profileId, functionInfo, functionInfo ? static_cast(function) : nullptr, playout->ArgCount, isConstructorCall, inlineCacheIndex); + + if (functionInfo && !functionInfo->HasBody()) + { + if ((functionInfo->IsBuiltInApplyFunction() || functionInfo->IsBuiltInCallFunction()) && targetFunction) + { + Js::ProfileId* callSiteToCallApplyCallSiteMap = this->m_functionBody->GetCallSiteToCallApplyCallSiteArray(); + if (callSiteToCallApplyCallSiteMap) + { + Js::ProfileId callApplyCallSiteId = callSiteToCallApplyCallSiteMap[profileId]; + if (callApplyCallSiteId < functionBody->GetProfiledCallApplyCallSiteCount()) + { + dynamicProfileInfo->RecordCallApplyTargetInfo(functionBody, callApplyCallSiteId, targetFunction->GetFunctionInfo(), targetFunction); + } + else + { + Assert(callApplyCallSiteId == Js::Constants::NoProfileId); + } + } + } + } + if (playout->Return != Js::Constants::NoRegister) { dynamicProfileInfo->RecordReturnTypeOnCallSiteInfo(functionBody, profileId, GetReg((RegSlot)playout->Return)); @@ -3920,7 +4069,7 @@ namespace Js InlineCache *inlineCache = this->GetInlineCache(playout->inlineCacheIndex); PropertyId propertyId = GetPropertyIdFromCacheId(playout->inlineCacheIndex); - DynamicObject * obj = DynamicObject::UnsafeFromVar(instance); + DynamicObject * obj = UnsafeVarTo(instance); PropertyValueInfo info; PropertyValueInfo::SetCacheInfo(&info, GetFunctionBody(), inlineCache, playout->inlineCacheIndex, true); @@ -3945,7 +4094,7 @@ namespace Js GetFunctionBody(), GetInlineCache(playout->inlineCacheIndex), playout->inlineCacheIndex, - DynamicObject::UnsafeFromVar(rootInstance), + UnsafeVarTo(rootInstance), propertyId ); @@ -3970,7 +4119,7 @@ namespace Js GetFunctionBody(), GetInlineCache(playout->inlineCacheIndex), playout->inlineCacheIndex, - DynamicObject::UnsafeFromVar(rootInstance), + UnsafeVarTo(rootInstance), propertyId ); @@ -4144,10 +4293,10 @@ namespace Js Var thisInstance = GetReg(playout->Value2); InlineCache *inlineCache = GetInlineCache(playout->PropertyIdIndex); PropertyId propertyId = GetPropertyIdFromCacheId(playout->PropertyIdIndex); - if (RecyclableObject::Is(instance) && RecyclableObject::Is(thisInstance)) + if (VarIs(instance) && VarIs(thisInstance)) { - RecyclableObject* superObj = RecyclableObject::FromVar(instance); - RecyclableObject* thisObj = RecyclableObject::FromVar(thisInstance); + RecyclableObject* superObj = VarTo(instance); + RecyclableObject* thisObj = VarTo(thisInstance); PropertyValueInfo info; PropertyValueInfo::SetCacheInfo(&info, GetFunctionBody(), inlineCache, playout->PropertyIdIndex, true); @@ -4269,7 +4418,7 @@ namespace Js int length = pScope->GetLength(); if (1 == length) { - RecyclableObject *obj = RecyclableObject::FromVar(pScope->GetItem(0)); + RecyclableObject *obj = VarTo(pScope->GetItem(0)); PropertyValueInfo info; PropertyValueInfo::SetCacheInfo(&info, GetFunctionBody(), inlineCache, playout->inlineCacheIndex, true); Var value; @@ -4372,7 +4521,7 @@ namespace Js int length = pScope->GetLength(); if (1 == length) { - RecyclableObject* obj = RecyclableObject::FromVar(pScope->GetItem(0)); + RecyclableObject* obj = VarTo(pScope->GetItem(0)); PropertyValueInfo info; PropertyValueInfo::SetCacheInfo(&info, GetFunctionBody(), inlineCache, playout->inlineCacheIndex, true); if (CacheOperators::TrySetProperty( @@ -4454,7 +4603,7 @@ namespace Js InlineCache *inlineCache; if (!TaggedNumber::Is(instance) - && TrySetPropertyLocalFastPath(playout, propertyId, RecyclableObject::UnsafeFromVar(instance), inlineCache, flags)) + && TrySetPropertyLocalFastPath(playout, propertyId, UnsafeVarTo(instance), inlineCache, flags)) { if (GetJavascriptFunction()->GetConstructorCache()->NeedsUpdateAfterCtor()) { @@ -4567,8 +4716,7 @@ namespace Js GetInlineCache(playout->PropertyIdIndex), playout->PropertyIdIndex, GetReg(playout->Value), - m_functionBody->GetIsStrictMode() ? - (PropertyOperationFlags)(flags | PropertyOperation_StrictMode) : flags, + flags, GetJavascriptFunction(), thisInstance); } @@ -4592,6 +4740,12 @@ namespace Js DoSetSuperProperty(playout, GetReg(playout->Instance), PropertyOperation_None); } + template + void InterpreterStackFrame::OP_SetSuperPropertyStrict(unaligned T* playout) + { + DoSetSuperProperty(playout, GetReg(playout->Instance), PropertyOperation_StrictMode); + } + template void InterpreterStackFrame::OP_ProfiledSetProperty(unaligned T* playout) { @@ -4610,6 +4764,12 @@ namespace Js ProfiledSetSuperProperty(playout, GetReg(playout->Instance), GetReg(playout->Value2), PropertyOperation_None); } + template + void InterpreterStackFrame::OP_ProfiledSetSuperPropertyStrict(unaligned T* playout) + { + ProfiledSetSuperProperty(playout, GetReg(playout->Instance), GetReg(playout->Value2), PropertyOperation_StrictMode); + } + template void InterpreterStackFrame::OP_SetRootProperty(unaligned T* playout) { @@ -4731,7 +4891,7 @@ namespace Js Assert(!TaggedNumber::Is(instance)); PropertyId propertyId = GetPropertyIdFromCacheId(playout->inlineCacheIndex); - if (TrySetPropertyLocalFastPath(playout, propertyId, RecyclableObject::UnsafeFromVar(instance), inlineCache)) + if (TrySetPropertyLocalFastPath(playout, propertyId, UnsafeVarTo(instance), inlineCache)) { return; } @@ -4746,7 +4906,7 @@ namespace Js GetFunctionBody(), GetInlineCache(playout->inlineCacheIndex), playout->inlineCacheIndex, - RecyclableObject::FromVar(instance), + VarTo(instance), GetPropertyIdFromCacheId(playout->inlineCacheIndex), GetReg(playout->Value)); } @@ -4761,7 +4921,7 @@ namespace Js Assert(!TaggedNumber::Is(instance)); PropertyId propertyId = GetPropertyIdFromCacheId(playout->inlineCacheIndex); - if (!TrySetPropertyLocalFastPath(playout, propertyId, RecyclableObject::UnsafeFromVar(instance), inlineCache, flags)) + if (!TrySetPropertyLocalFastPath(playout, propertyId, UnsafeVarTo(instance), inlineCache, flags)) { JavascriptOperators::OP_InitClassMember(instance, propertyId, GetReg(playout->Value)); } @@ -4823,7 +4983,7 @@ namespace Js Assert(!TaggedNumber::Is(instance)); PropertyId propertyId = GetPropertyIdFromCacheId(playout->inlineCacheIndex); - if (!TrySetPropertyLocalFastPath(playout, propertyId, RecyclableObject::UnsafeFromVar(instance), inlineCache, flags)) + if (!TrySetPropertyLocalFastPath(playout, propertyId, UnsafeVarTo(instance), inlineCache, flags)) { JavascriptOperators::OP_InitLetProperty(instance, propertyId, GetReg(playout->Value)); } @@ -4837,7 +4997,7 @@ namespace Js Assert(!TaggedNumber::Is(instance)); PropertyId propertyId = GetPropertyIdFromCacheId(playout->inlineCacheIndex); - if (!TrySetPropertyLocalFastPath(playout, propertyId, RecyclableObject::UnsafeFromVar(instance), inlineCache, flags)) + if (!TrySetPropertyLocalFastPath(playout, propertyId, UnsafeVarTo(instance), inlineCache, flags)) { JavascriptOperators::OP_InitConstProperty(instance, propertyId, GetReg(playout->Value)); } @@ -4957,7 +5117,7 @@ namespace Js void InterpreterStackFrame::OP_InitUndeclConsoleLetProperty(unaligned T* playout) { FrameDisplay* pScope = (FrameDisplay*)this->LdEnv(); - AssertMsg(ConsoleScopeActivationObject::Is((DynamicObject*)pScope->GetItem(pScope->GetLength() - 1)), "How come we got this opcode without ConsoleScopeActivationObject?"); + AssertMsg(VarIs((DynamicObject*)pScope->GetItem(pScope->GetLength() - 1)), "How come we got this opcode without ConsoleScopeActivationObject?"); PropertyId propertyId = m_functionBody->GetReferencedPropertyId(playout->PropertyIdIndex); JavascriptOperators::OP_InitLetProperty(pScope->GetItem(0), propertyId, this->scriptContext->GetLibrary()->GetUndeclBlockVar()); } @@ -4966,7 +5126,7 @@ namespace Js void InterpreterStackFrame::OP_InitUndeclConsoleConstProperty(unaligned T* playout) { FrameDisplay* pScope = (FrameDisplay*)this->LdEnv(); - AssertMsg(ConsoleScopeActivationObject::Is((DynamicObject*)pScope->GetItem(pScope->GetLength() - 1)), "How come we got this opcode without ConsoleScopeActivationObject?"); + AssertMsg(VarIs((DynamicObject*)pScope->GetItem(pScope->GetLength() - 1)), "How come we got this opcode without ConsoleScopeActivationObject?"); PropertyId propertyId = m_functionBody->GetReferencedPropertyId(playout->PropertyIdIndex); JavascriptOperators::OP_InitConstProperty(pScope->GetItem(0), propertyId, this->scriptContext->GetLibrary()->GetUndeclBlockVar()); } @@ -4976,7 +5136,7 @@ namespace Js void InterpreterStackFrame::ProfiledInitProperty(unaligned T* playout, Var instance) { ProfilingHelpers::ProfiledInitFld( - RecyclableObject::FromVar(instance), + VarTo(instance), GetPropertyIdFromCacheId(playout->inlineCacheIndex), GetInlineCache(playout->inlineCacheIndex), playout->inlineCacheIndex, @@ -5044,7 +5204,7 @@ namespace Js { element = ProfilingHelpers::ProfiledLdElem_FastPath( - JavascriptArray::UnsafeFromVar(instance), + UnsafeVarTo(instance), GetReg(playout->Element), GetScriptContext()); } @@ -5082,7 +5242,7 @@ namespace Js !JavascriptOperators::SetElementMayHaveImplicitCalls(GetScriptContext())) { ProfilingHelpers::ProfiledStElem_FastPath( - JavascriptArray::UnsafeFromVar(instance), + UnsafeVarTo(instance), varIndex, value, GetScriptContext(), @@ -5506,7 +5666,7 @@ namespace Js Var InterpreterStackFrame::OP_GetCachedFunc(Var instance, int32 index) { - ActivationObjectEx *obj = ActivationObjectEx::FromVar(instance); + ActivationObjectEx *obj = VarTo(instance); FuncCacheEntry *entry = obj->GetFuncCacheEntry((uint)index); return entry->func; @@ -5520,7 +5680,7 @@ namespace Js void InterpreterStackFrame::OP_CommitScopeHelper(const PropertyIdArray *propIds) { - ActivationObjectEx *obj = ActivationObjectEx::FromVar(this->localClosure); + ActivationObjectEx *obj = VarTo(this->localClosure); ScriptFunction *func = obj->GetParentFunc(); Assert(obj->GetParentFunc() == func); @@ -5582,6 +5742,21 @@ namespace Js SetNonVarReg(playout->R0, (Var)propIds); } + void InterpreterStackFrame::OP_StPropIdArrFromVar(Var instance, uint32 index, Var value, ScriptContext* scriptContext) + { + Js::PropertyIdArray * propIds = reinterpret_cast(instance); + AssertOrFailFast(index < propIds->count); + Js::PropertyId id = JavascriptOperators::GetPropertyId(value, scriptContext); + propIds->elements[index] = id; + } + + Js::PropertyIdArray * InterpreterStackFrame::OP_NewPropIdArrForCompProps(uint32 size, ScriptContext* scriptContext) + { + uint extraAlloc = UInt32Math::Mul(size, sizeof(Js::PropertyId)); + Js::PropertyIdArray * propIdArr = RecyclerNewPlusLeaf(scriptContext->GetRecycler(), extraAlloc, Js::PropertyIdArray, size, 0); + return propIdArr; + } + bool InterpreterStackFrame::IsCurrentLoopNativeAddr(void * codeAddr) const { if (this->GetCurrentLoopNum() == LoopHeader::NoLoop) @@ -5882,7 +6057,7 @@ namespace Js Js::LoopEntryPointInfo * entryPointInfo = loopHeader->GetCurrentEntryPointInfo(); - if (fn->ForceJITLoopBody() && loopHeader->interpretCount == 0 && + if (fn->ForceJITLoopBody() && loopHeader->interpretCount == 0 && loopHeader->hasYield == false && (entryPointInfo != NULL && entryPointInfo->IsNotScheduled())) { #if ENABLE_PROFILE_INFO @@ -6075,7 +6250,7 @@ namespace Js return nullptr; } - if (!fn->DoJITLoopBody()) + if (!fn->DoJITLoopBody() || loopHeader->hasYield) { return nullptr; } @@ -6177,7 +6352,11 @@ namespace Js // For ARM we need to make sure that pipeline is synchronized with memory/cache for newly jitted code. // Note: this does not seem to affect perf, but if it was, we could add a boolean isCalled to EntryPointInfo // and do ISB only for 1st time this entry point is called (potential working set regression though). + #if defined(_InstructionSynchronizationBarrier) _InstructionSynchronizationBarrier(); + #else + asm("isb"); + #endif #endif uint newOffset = ::Math::PointerCastToIntegral( CALL_ENTRYPOINT_NOASSERT(address, function, CallInfo(CallFlags_InternalFrame, 1), this)); @@ -6211,7 +6390,11 @@ namespace Js // For ARM we need to make sure that pipeline is synchronized with memory/cache for newly jitted code. // Note: this does not seem to affect perf, but if it was, we could add a boolean isCalled to EntryPointInfo // and do ISB only for 1st time this entry point is called (potential working set regression though). + #if defined(_InstructionSynchronizationBarrier) _InstructionSynchronizationBarrier(); + #else + asm("isb"); + #endif #endif uint newOffset = ::Math::PointerCastToIntegral( CALL_ENTRYPOINT_NOASSERT(address, function, CallInfo(CallFlags_InternalFrame, 1), this)); @@ -6505,6 +6688,12 @@ namespace Js JavascriptOperators::OP_EnsureNoRootRedeclProperty(instance, this->m_functionBody->GetReferencedPropertyId(propertyIdIndex)); } + void InterpreterStackFrame::OP_EnsureCanDeclGloFunc(uint propertyIdIndex) + { + Var instance = this->GetRootObject(); + JavascriptOperators::OP_EnsureCanDeclGloFunc(instance, this->m_functionBody->GetReferencedPropertyId(propertyIdIndex)); + } + void InterpreterStackFrame::OP_ScopedEnsureNoRedeclProperty(Var aValue, uint propertyIdIndex, Var aValue2) { Js::PropertyId propertyId = this->m_functionBody->GetReferencedPropertyId(propertyIdIndex); @@ -6575,12 +6764,6 @@ namespace Js // Now that the stack is unwound, let's run the catch block. if (exception) { - if (exception->IsGeneratorReturnException()) - { - // Generator return scenario, so no need to go into the catch block and we must rethrow to propagate the exception to down level - JavascriptExceptionOperators::DoThrow(exception, scriptContext); - } - exception = exception->CloneIfStaticExceptionObject(scriptContext); // We've got a JS exception. Grab the exception object and assign it to the // catch object's location, then call the handler (i.e., we consume the Catch op here). @@ -6791,11 +6974,6 @@ namespace Js // Now that the stack is unwound, let's run the catch block. if (exception) { - if (exception->IsGeneratorReturnException()) - { - // Generator return scenario, so no need to go into the catch block and we must rethrow to propagate the exception to down level - JavascriptExceptionOperators::DoThrow(exception, scriptContext); - } if (catchOffset != 0) { exception = exception->CloneIfStaticExceptionObject(scriptContext); @@ -7057,7 +7235,7 @@ namespace Js SetNonVarReg(regOffset, reinterpret_cast(currOffset)); } - if (pExceptionObject && !pExceptionObject->IsGeneratorReturnException()) + if (pExceptionObject) { // Clone static exception object early in case finally block overwrites it pExceptionObject = pExceptionObject->CloneIfStaticExceptionObject(scriptContext); @@ -7115,7 +7293,7 @@ namespace Js return; } - if (pExceptionObject && (endOfFinallyBlock || !pExceptionObject->IsGeneratorReturnException())) + if (pExceptionObject) { JavascriptExceptionOperators::DoThrow(pExceptionObject, scriptContext); } @@ -7165,7 +7343,7 @@ namespace Js } Js::JavascriptExceptionObject* exceptionObj = (Js::JavascriptExceptionObject*)GetNonVarReg(exceptionRegSlot); - if (exceptionObj && (endOfFinallyBlock || !exceptionObj->IsGeneratorReturnException())) + if (exceptionObj) { JavascriptExceptionOperators::DoThrow(exceptionObj, scriptContext); } @@ -7399,7 +7577,7 @@ namespace Js { uint innerScopeIndex = playout->C1; Var scope = this->InnerScopeFromIndex(innerScopeIndex); - BlockActivationObject* blockScope = BlockActivationObject::FromVar(scope); + BlockActivationObject* blockScope = VarTo(scope); scope = JavascriptOperators::OP_CloneBlockScope(blockScope, scriptContext); this->SetInnerScopeFromIndex(innerScopeIndex, scope); @@ -7682,10 +7860,38 @@ namespace Js return m_reader.SetCurrentRelativeOffset((const byte *)(playout + 1), playout->RelativeJumpOffset); } - template - void InterpreterStackFrame::OP_InitClass(const unaligned OpLayoutT_Class * playout) + Var InterpreterStackFrame::OP_InitBaseClass(FrameDisplay *environment, FunctionInfoPtrPtr infoRef, RegSlot protoReg) + { + RecyclableObject * protoParent = scriptContext->GetLibrary()->GetObjectPrototype(); + RecyclableObject * constructorParent = scriptContext->GetLibrary()->GetFunctionPrototype(); + + return InitClassHelper(environment, infoRef, protoParent, constructorParent, protoReg); + } + + Var InterpreterStackFrame::OP_InitClass(FrameDisplay *environment, FunctionInfoPtrPtr infoRef, Var constructorParent, Var protoParent, RegSlot protoReg) { - JavascriptOperators::OP_InitClass(GetReg(playout->Constructor), playout->Extends != Js::Constants::NoRegister ? GetReg(playout->Extends) : NULL, GetScriptContext()); + return InitClassHelper(environment, infoRef, VarTo(protoParent), VarTo(constructorParent), protoReg); + } + + Var InterpreterStackFrame::InitClassHelper(FrameDisplay *environment, FunctionInfoPtrPtr infoRef, RecyclableObject *protoParent, RecyclableObject *constructorParent, RegSlot protoReg) + { + Assert(protoParent && JavascriptOperators::IsObjectOrNull(protoParent)); + Assert(constructorParent && (JavascriptOperators::IsConstructor(constructorParent) || constructorParent == scriptContext->GetLibrary()->GetFunctionPrototype())); + + // Create prototype object with the default class prototype object shape {'constructor': W:T, E:F, C:T} and [[Prototype]] == protoParent + DynamicObject * proto = scriptContext->GetLibrary()->CreateClassPrototypeObject(protoParent); + + // Create class constructor object for the constructor function, with default constructor shape: + // {'prototype': W:F, E:F, C:F}, {'length': W:F, E:F, C:T}, {'name': W:F, E:F, C:T} + // [[Prototype]] == constructorParent and [[HomeObject]] == proto + // The callee initializes the object and the 3 properties. + ScriptFunction * constructor = ScriptFunction::OP_NewClassConstructor(environment, infoRef, proto, constructorParent); + + proto->SetSlot(SetSlotArguments(Constants::NoProperty, 0, constructor)); + constructor->SetSlot(SetSlotArguments(Constants::NoProperty, 0, proto)); + + SetReg(protoReg, proto); + return constructor; } #ifdef ENABLE_SCRIPT_DEBUGGING @@ -8025,7 +8231,12 @@ namespace Js void InterpreterStackFrame::OP_SimdLdArrGeneric(const unaligned T* playout) { Assert(playout->ViewType < Js::ArrayBufferView::TYPE_COUNT); - const uint64 index = ((uint64)(uint32)GetRegRawInt(playout->SlotIndex) + playout->Offset /* WASM only */) & (int64)(int)ArrayBufferView::ViewMask[playout->ViewType]; + + if (GetRegRawInt(playout->SlotIndex) < 0) { + JavascriptError::ThrowRangeError(scriptContext, JSERR_ArgumentOutOfRange, _u("Simd typed array access")); + } + + const uint64 index = (uint64)GetRegRawInt(playout->SlotIndex) + playout->Offset; ArrayBufferBase* arr = #ifdef ENABLE_WASM_SIMD @@ -8073,7 +8284,12 @@ namespace Js void InterpreterStackFrame::OP_SimdStArrGeneric(const unaligned T* playout) { Assert(playout->ViewType < Js::ArrayBufferView::TYPE_COUNT); - const uint64 index = ((uint64)(uint32)GetRegRawInt(playout->SlotIndex) + playout->Offset /* WASM only */) & (int64)(int)ArrayBufferView::ViewMask[playout->ViewType]; + + if (GetRegRawInt(playout->SlotIndex) < 0) + { + JavascriptError::ThrowRangeError(scriptContext, JSERR_ArgumentOutOfRange, _u("Simd typed array access")); + } + const uint64 index = (uint64)GetRegRawInt(playout->SlotIndex) + playout->Offset; ArrayBufferBase* arr = #ifdef ENABLE_WASM_SIMD @@ -8412,6 +8628,11 @@ namespace Js return aValue != NULL; } + bool InterpreterStackFrame::OP_BrOnNotNullObj_A(Var aValue) + { + return aValue != scriptContext->GetLibrary()->GetNull(); + } + BOOL InterpreterStackFrame::OP_BrUndecl_A(Var aValue) { return this->scriptContext->GetLibrary()->IsUndeclBlockVar(aValue); @@ -8434,10 +8655,10 @@ namespace Js this->m_functionBody->GetReferencedPropertyId(propertyIdIndex), scriptContext); } - BOOL InterpreterStackFrame::OP_BrOnNoEnvProperty(Var envInstance, int32 slotIndex, uint propertyIdIndex, ScriptContext* scriptContext) + BOOL InterpreterStackFrame::OP_BrOnHasEnvProperty(Var envInstance, int32 slotIndex, uint propertyIdIndex, ScriptContext* scriptContext) { Var instance = OP_LdFrameDisplaySlot(envInstance, slotIndex); - return !JavascriptOperators::OP_HasProperty(instance, + return JavascriptOperators::OP_HasProperty(instance, this->m_functionBody->GetReferencedPropertyId(propertyIdIndex), scriptContext); } @@ -8451,6 +8672,16 @@ namespace Js return JavascriptOperators::IsBaseConstructorKind(aValue); } + bool InterpreterStackFrame::OP_BrOnConstructor(Var aValue) + { + return JavascriptOperators::IsConstructor(aValue); + } + + Var InterpreterStackFrame::OP_LdBaseFncProto() + { + return scriptContext->GetLibrary()->GetFunctionPrototype(); + } + template void InterpreterStackFrame::OP_LdLen(const unaligned T * const playout) { @@ -8592,6 +8823,12 @@ namespace Js } } + template + void InterpreterStackFrame::OP_LdImportMeta(const unaligned T* playout) + { + SetReg(playout->R0, JavascriptOperators::OP_LdImportMeta(playout->C1, scriptContext)); + } + Var InterpreterStackFrame::OP_Ld_A(Var aValue) { return aValue; @@ -8667,7 +8904,7 @@ namespace Js void InterpreterStackFrame::OP_LdArrWasmFunc(const unaligned T* playout) { #ifdef ENABLE_WASM - WebAssemblyTable * table = WebAssemblyTable::FromVar(GetRegRawPtr(playout->Instance)); + WebAssemblyTable * table = VarTo(GetRegRawPtr(playout->Instance)); const uint32 index = (uint32)GetRegRawInt(playout->SlotIndex); if (index >= table->GetCurrentLength()) { @@ -8686,7 +8923,7 @@ namespace Js void InterpreterStackFrame::OP_CheckSignature(const unaligned T* playout) { #ifdef ENABLE_WASM - ScriptFunction * func = ScriptFunction::FromVar(GetRegRawPtr(playout->R0)); + ScriptFunction * func = VarTo(GetRegRawPtr(playout->R0)); int sigIndex = playout->C1; Wasm::WasmSignature * expected = &m_signatures[sigIndex]; if (func->GetFunctionInfo()->IsDeferredParseFunction()) @@ -9252,7 +9489,7 @@ namespace Js isCachedScope = m_functionBody->HasCachedScopePropIds(); propIds = this->m_functionBody->GetFormalsPropIdArray(); - if (isScopeObjRestored && ActivationObject::Is(frameObject)) + if (isScopeObjRestored && VarIs(frameObject)) { Assert(this->GetFunctionBody()->GetDoScopeObjectCreation()); isCachedScope = true; @@ -9300,7 +9537,7 @@ namespace Js if (heapArgObj) { - Assert(frameObject == nullptr || ActivationObject::Is(frameObject)); + Assert(frameObject == nullptr || VarIs(frameObject)); heapArgObj->SetFormalCount(formalsCount); heapArgObj->SetFrameObject(frameObject != nullptr ? static_cast(frameObject) : nullptr); @@ -9327,14 +9564,6 @@ namespace Js return (void*)m_inSlotsCount; } - Var InterpreterStackFrame::OP_ResumeYield(Var yieldDataVar, RegSlot yieldStarIterator) - { - ResumeYieldData* yieldData = static_cast(yieldDataVar); - RecyclableObject* iterator = yieldStarIterator != Constants::NoRegister ? RecyclableObject::FromVar(GetNonVarReg(yieldStarIterator)) : nullptr; - - return JavascriptOperators::OP_ResumeYield(yieldData, iterator); - } - void* InterpreterStackFrame::operator new(size_t byteSize, void* previousAllocation) throw() { // diff --git a/lib/Runtime/Language/InterpreterStackFrame.h b/lib/Runtime/Language/InterpreterStackFrame.h index ae14024b67e..c6a9be39042 100644 --- a/lib/Runtime/Language/InterpreterStackFrame.h +++ b/lib/Runtime/Language/InterpreterStackFrame.h @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft Corporation and contributors. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- @@ -47,7 +48,7 @@ namespace Js class Setup { public: - Setup(ScriptFunction * function, Arguments& args, bool bailout = false, bool inlinee = false); + Setup(ScriptFunction * function, Arguments& args, bool bailout = false, bool inlinee = false, bool isGeneratorFrame = false); Setup(ScriptFunction * function, Var * inParams, int inSlotsCount); size_t GetAllocationVarCount() const { return varAllocCount; } size_t GetStackAllocationVarCount() const { return stackVarAllocCount; } @@ -83,6 +84,11 @@ namespace Js Js::CallFlags callFlags; bool bailedOut; bool bailedOutOfInlinee; + + // Indicate whether this InterpreterStackFrame belongs to a generator function + // We use this flag to determine whether we need to allocate more space for + // objects such as for-in enumerators in a generator. + bool isGeneratorFrame; }; struct AsmJsReturnStruct @@ -110,7 +116,7 @@ namespace Js Var* m_inParams; // Range of 'in' parameters Var* m_outParams; // Range of 'out' parameters (offset in m_localSlots) Var* m_outSp; // Stack pointer for next outparam - Var* m_outSpCached; // Stack pointer for caching previos SP (in order to assist in try..finally) + Var* m_outSpCached; // Stack pointer for caching previous SP (in order to assist in try..finally) Var m_arguments; // Dedicated location for this frame's arguments object StackScriptFunction * stackNestedFunctions; FrameDisplay * localFrameDisplay; @@ -156,7 +162,6 @@ namespace Js uint retOffset; int16 nestedFinallyDepth; - void (InterpreterStackFrame::*opLoopBodyStart)(uint32 loopNumber, LayoutSize layoutSize, bool isFirstIteration); #if ENABLE_PROFILE_INFO void (InterpreterStackFrame::*opProfiledLoopBodyStart)(uint32 loopNumber, LayoutSize layoutSize, bool isFirstIteration); @@ -311,12 +316,17 @@ namespace Js void * GetReturnAddress() { return returnAddress; } static uint32 GetOffsetOfLocals() { return offsetof(InterpreterStackFrame, m_localSlots); } - static uint32 GetOffsetOfArguments() { return offsetof(InterpreterStackFrame, m_arguments); } + static uint32 GetOffsetOfInParams() { return offsetof(InterpreterStackFrame, m_inParams); } static uint32 GetOffsetOfInSlotsCount() { return offsetof(InterpreterStackFrame, m_inSlotsCount); } static uint32 GetOffsetOfStackNestedFunctions() { return offsetof(InterpreterStackFrame, stackNestedFunctions); } static uint32 GetOffsetOfForInEnumerators() { return offsetof(InterpreterStackFrame, forInObjectEnumerators); } + static uint32 GetOffsetOfArguments() { return offsetof(InterpreterStackFrame, m_arguments); } + static uint32 GetOffsetOfLocalFrameDisplay() { return offsetof(InterpreterStackFrame, localFrameDisplay); } + static uint32 GetOffsetOfLocalClosure() { return offsetof(InterpreterStackFrame, localClosure); } + static uint32 GetOffsetOfParamClosure() { return offsetof(InterpreterStackFrame, paramClosure); } + static uint32 GetStartLocationOffset() { return offsetof(InterpreterStackFrame, m_reader) + ByteCodeReader::GetStartLocationOffset(); } static uint32 GetCurrentLocationOffset() { return offsetof(InterpreterStackFrame, m_reader) + ByteCodeReader::GetCurrentLocationOffset(); } @@ -362,11 +372,14 @@ namespace Js _NOINLINE static Var InterpreterThunk(RecyclableObject* function, CallInfo callInfo, ...); #endif static Var InterpreterHelper(ScriptFunction* function, ArgumentReader args, void* returnAddress, void* addressOfReturnAddress, AsmJsReturnStruct* asmReturn = nullptr); - static const bool ShouldDoProfile(FunctionBody* executeFunction); + static bool ShouldDoProfile(FunctionBody* executeFunction); static InterpreterStackFrame* CreateInterpreterStackFrameForGenerator(ScriptFunction* function, FunctionBody* executeFunction, JavascriptGenerator* generator, bool doProfile); void InitializeClosures(); + static void OP_StPropIdArrFromVar(Var instance, uint32 index, Var value, ScriptContext* scriptContext); + static Js::PropertyIdArray * OP_NewPropIdArrForCompProps(uint32 size, ScriptContext* scriptContext); + static const int LocalsThreshold = 32 * 1024; // Number of locals vars we'll allocate on the frame. // If there are more, we'll use an arena. @@ -464,13 +477,15 @@ namespace Js BOOL OP_BrFalse_A(Var aValue, ScriptContext* scriptContext); BOOL OP_BrTrue_A(Var aValue, ScriptContext* scriptContext); BOOL OP_BrNotNull_A(Var aValue); + bool OP_BrOnNotNullObj_A(Var aValue); BOOL OP_BrUndecl_A(Var aValue); BOOL OP_BrNotUndecl_A(Var aValue); BOOL OP_BrOnHasProperty(Var argInstance, uint propertyIdIndex, ScriptContext* scriptContext); BOOL OP_BrOnNoProperty(Var argInstance, uint propertyIdIndex, ScriptContext* scriptContext); - BOOL OP_BrOnNoEnvProperty(Var envInstance, int32 slotIndex, uint propertyIdIndex, ScriptContext* scriptContext); + BOOL OP_BrOnHasEnvProperty(Var envInstance, int32 slotIndex, uint propertyIdIndex, ScriptContext* scriptContext); BOOL OP_BrOnClassConstructor(Var aValue); BOOL OP_BrOnBaseConstructorKind(Var aValue); + bool OP_BrOnConstructor(Var aValue); RecyclableObject * OP_CallGetFunc(Var target); @@ -556,9 +571,11 @@ namespace Js template void OP_SetProperty(unaligned T* playout); template void OP_SetLocalProperty(unaligned T* playout); template void OP_SetSuperProperty(unaligned T* playout); + template void OP_SetSuperPropertyStrict(unaligned T* playout); template void OP_ProfiledSetProperty(unaligned T* playout); template void OP_ProfiledSetLocalProperty(unaligned T* playout); template void OP_ProfiledSetSuperProperty(unaligned T* playout); + template void OP_ProfiledSetSuperPropertyStrict(unaligned T* playout); template void OP_SetRootProperty(unaligned T* playout); template void OP_ProfiledSetRootProperty(unaligned T* playout); template void OP_SetPropertyStrict(unaligned T* playout); @@ -648,6 +665,7 @@ namespace Js void OP_StFunctionExpression(Var instance, Var value, PropertyIdIndexType index); template inline void OP_LdNewTarget(const unaligned T* playout); + template inline void OP_LdImportMeta(const unaligned T* playout); inline Var OP_Ld_A(Var aValue); inline Var OP_LdLocalObj(); @@ -657,6 +675,7 @@ namespace Js void OP_EnsureNoRootProperty(uint propertyIdIndex); void OP_EnsureNoRootRedeclProperty(uint propertyIdIndex); + void OP_EnsureCanDeclGloFunc(uint propertyIdIndex); void OP_ScopedEnsureNoRedeclProperty(Var aValue, uint propertyIdIndex, Var aValue2); Var OP_InitUndecl(); void OP_InitUndeclSlot(Var aValue, int32 slot); @@ -769,9 +788,11 @@ namespace Js void OP_TryFinallyWithYield(const byte* ip, Js::JumpOffset jumpOffset, Js::RegSlot regException, Js::RegSlot regOffset); void OP_ResumeCatch(); void OP_ResumeFinally(const byte* ip, Js::JumpOffset jumpOffset, RegSlot exceptionRegSlot, RegSlot offsetRegSlot); - inline Var OP_ResumeYield(Var yieldDataVar, RegSlot yieldStarIterator = Js::Constants::NoRegister); template void OP_IsInst(const unaligned T * playout); - template void OP_InitClass(const unaligned OpLayoutT_Class * playout); + Var OP_InitBaseClass(FrameDisplay *environment, FunctionInfoPtrPtr infoRef, RegSlot protoReg); + Var OP_InitClass(FrameDisplay *environment, FunctionInfoPtrPtr infoRef, Var ctorParent, Var protoParent, RegSlot protoReg); + Var InitClassHelper(FrameDisplay *environment, FunctionInfoPtrPtr infoRef, RecyclableObject *protoParent, RecyclableObject *constructorParent, RegSlot protoReg); + Var OP_LdBaseFncProto(); inline Var OP_LdHomeObj(ScriptContext * scriptContext); inline Var OP_LdFuncObj(ScriptContext * scriptContext); template void OP_LdElementUndefined(const unaligned OpLayoutT_ElementU* playout); diff --git a/lib/Runtime/Language/JavascriptConversion.cpp b/lib/Runtime/Language/JavascriptConversion.cpp index a0978838e75..482688556af 100644 --- a/lib/Runtime/Language/JavascriptConversion.cpp +++ b/lib/Runtime/Language/JavascriptConversion.cpp @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) 2022 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #include "RuntimeLanguagePch.h" @@ -28,16 +29,17 @@ using namespace Js; //If Object has a [[Call]] internal method, then return true, otherwise return false bool JavascriptConversion::IsCallable(Var aValue) { - if (!RecyclableObject::Is(aValue)) + if (!VarIs(aValue)) { return false; } - return IsCallable(RecyclableObject::UnsafeFromVar(aValue)); + return IsCallable(UnsafeVarTo(aValue)); } bool JavascriptConversion::IsCallable(_In_ RecyclableObject* aValue) { - JavascriptMethod entryPoint = RecyclableObject::UnsafeFromVar(aValue)->GetEntryPoint(); + Assert(VarIsCorrectType(aValue)); + JavascriptMethod entryPoint = aValue->GetEntryPoint(); return RecyclableObject::DefaultEntryPoint != entryPoint; } @@ -88,13 +90,13 @@ using namespace Js; case TypeIds_Int64Number: { int leftValue = TaggedInt::ToInt32(aLeft); - __int64 rightValue = JavascriptInt64Number::UnsafeFromVar(aRight)->GetValue(); + __int64 rightValue = UnsafeVarTo(aRight)->GetValue(); return leftValue == rightValue; } case TypeIds_UInt64Number: { int leftValue = TaggedInt::ToInt32(aLeft); - unsigned __int64 rightValue = JavascriptInt64Number::FromVar(aRight)->GetValue(); + unsigned __int64 rightValue = VarTo(aRight)->GetValue(); return leftValue == rightValue; } } @@ -104,24 +106,24 @@ using namespace Js; { case TypeIds_Integer: { - __int64 leftValue = JavascriptInt64Number::UnsafeFromVar(aLeft)->GetValue(); + __int64 leftValue = UnsafeVarTo(aLeft)->GetValue(); int rightValue = TaggedInt::ToInt32(aRight); return leftValue == rightValue; } case TypeIds_Number: - dblLeft = (double)JavascriptInt64Number::UnsafeFromVar(aLeft)->GetValue(); + dblLeft = (double)UnsafeVarTo(aLeft)->GetValue(); dblRight = JavascriptNumber::GetValue(aRight); goto CommonNumber; case TypeIds_Int64Number: { - __int64 leftValue = JavascriptInt64Number::UnsafeFromVar(aLeft)->GetValue(); - __int64 rightValue = JavascriptInt64Number::UnsafeFromVar(aRight)->GetValue(); + __int64 leftValue = UnsafeVarTo(aLeft)->GetValue(); + __int64 rightValue = UnsafeVarTo(aRight)->GetValue(); return leftValue == rightValue; } case TypeIds_UInt64Number: { - __int64 leftValue = JavascriptInt64Number::UnsafeFromVar(aLeft)->GetValue(); - unsigned __int64 rightValue = JavascriptInt64Number::FromVar(aRight)->GetValue(); + __int64 leftValue = UnsafeVarTo(aLeft)->GetValue(); + unsigned __int64 rightValue = VarTo(aRight)->GetValue(); return ((unsigned __int64)leftValue == rightValue); } } @@ -131,24 +133,24 @@ using namespace Js; { case TypeIds_Integer: { - unsigned __int64 leftValue = JavascriptUInt64Number::UnsafeFromVar(aLeft)->GetValue(); + unsigned __int64 leftValue = UnsafeVarTo(aLeft)->GetValue(); __int64 rightValue = TaggedInt::ToInt32(aRight); return (leftValue == (unsigned __int64)rightValue); } case TypeIds_Number: - dblLeft = (double)JavascriptUInt64Number::UnsafeFromVar(aLeft)->GetValue(); + dblLeft = (double)UnsafeVarTo(aLeft)->GetValue(); dblRight = JavascriptNumber::GetValue(aRight); goto CommonNumber; case TypeIds_Int64Number: { - unsigned __int64 leftValue = JavascriptUInt64Number::UnsafeFromVar(aLeft)->GetValue(); - __int64 rightValue = JavascriptInt64Number::UnsafeFromVar(aRight)->GetValue(); + unsigned __int64 leftValue = UnsafeVarTo(aLeft)->GetValue(); + __int64 rightValue = UnsafeVarTo(aRight)->GetValue(); return (leftValue == (unsigned __int64)rightValue); } case TypeIds_UInt64Number: { - unsigned __int64 leftValue = JavascriptUInt64Number::UnsafeFromVar(aLeft)->GetValue(); - unsigned __int64 rightValue = JavascriptInt64Number::FromVar(aRight)->GetValue(); + unsigned __int64 leftValue = UnsafeVarTo(aLeft)->GetValue(); + unsigned __int64 rightValue = VarTo(aRight)->GetValue(); return leftValue == rightValue; } } @@ -162,11 +164,11 @@ using namespace Js; goto CommonNumber; case TypeIds_Int64Number: dblLeft = JavascriptNumber::GetValue(aLeft); - dblRight = (double)JavascriptInt64Number::UnsafeFromVar(aRight)->GetValue(); + dblRight = (double)UnsafeVarTo(aRight)->GetValue(); goto CommonNumber; case TypeIds_UInt64Number: dblLeft = JavascriptNumber::GetValue(aLeft); - dblRight = (double)JavascriptUInt64Number::UnsafeFromVar(aRight)->GetValue(); + dblRight = (double)UnsafeVarTo(aRight)->GetValue(); goto CommonNumber; case TypeIds_Number: dblLeft = JavascriptNumber::GetValue(aLeft); @@ -196,15 +198,15 @@ using namespace Js; switch (rightType) { case TypeIds_String: - return JavascriptString::Equals(JavascriptString::UnsafeFromVar(aLeft), JavascriptString::UnsafeFromVar(aRight)); + return JavascriptString::Equals(UnsafeVarTo(aLeft), UnsafeVarTo(aRight)); } break; #if DBG case TypeIds_Symbol: if (rightType == TypeIds_Symbol) { - JavascriptSymbol* leftSymbol = JavascriptSymbol::UnsafeFromVar(aLeft); - JavascriptSymbol* rightSymbol = JavascriptSymbol::UnsafeFromVar(aRight); + JavascriptSymbol* leftSymbol = UnsafeVarTo(aLeft); + JavascriptSymbol* rightSymbol = UnsafeVarTo(aRight); Assert(leftSymbol->GetValue() != rightSymbol->GetValue()); } #endif @@ -258,7 +260,7 @@ using namespace Js; return TRUE; default: - *object = RecyclableObject::FromVar(aValue)->ToObject(scriptContext); + *object = VarTo(aValue)->ToObject(scriptContext); return TRUE; } } @@ -275,19 +277,19 @@ using namespace Js; { Var key = JavascriptConversion::ToPrimitive(argument, scriptContext); PropertyString * propertyString = nullptr; - if (JavascriptSymbol::Is(key)) + if (VarIs(key)) { // If we are looking up a property keyed by a symbol, we already have the PropertyId in the symbol - *propertyRecord = JavascriptSymbol::UnsafeFromVar(key)->GetValue(); + *propertyRecord = UnsafeVarTo(key)->GetValue(); } else { // For all other types, convert the key into a string and use that as the property name JavascriptString * propName = JavascriptConversion::ToString(key, scriptContext); propName->GetPropertyRecord(propertyRecord); - if (PropertyString::Is(propName)) + if (VarIs(propName)) { - propertyString = PropertyString::UnsafeFromVar(propName); + propertyString = UnsafeVarTo(propName); } key = propName; } @@ -309,7 +311,6 @@ using namespace Js; // Boolean: The result equals the input argument (no conversion). // Number: The result equals the input argument (no conversion). // String: The result equals the input argument (no conversion). - // VariantDate:Returns the value for variant date by calling ToPrimitive directly. // Object: Return a default value for the Object. // The default value of an object is retrieved by calling the [[DefaultValue]] // internal method of the object, passing the optional hint PreferredType. @@ -328,21 +329,12 @@ using namespace Js; case TypeIds_Number: case TypeIds_String: case TypeIds_Symbol: + case TypeIds_BigInt: return aValue; - case TypeIds_VariantDate: - { - Var result = nullptr; - if (JavascriptVariantDate::UnsafeFromVar(aValue)->ToPrimitive(hint, &result, requestContext) != TRUE) - { - result = nullptr; - } - return result; - } - case TypeIds_StringObject: { - JavascriptStringObject * stringObject = JavascriptStringObject::UnsafeFromVar(aValue); + JavascriptStringObject * stringObject = UnsafeVarTo(aValue); ScriptContext * objectScriptContext = stringObject->GetScriptContext(); if (objectScriptContext->optimizationOverrides.GetSideEffects() & (hint == JavascriptHint::HintString ? SideEffects_ToString : SideEffects_ValueOf)) { @@ -354,7 +346,7 @@ using namespace Js; case TypeIds_NumberObject: { - JavascriptNumberObject * numberObject = JavascriptNumberObject::UnsafeFromVar(aValue); + JavascriptNumberObject * numberObject = UnsafeVarTo(aValue); ScriptContext * objectScriptContext = numberObject->GetScriptContext(); if (hint == JavascriptHint::HintString) { @@ -378,15 +370,19 @@ using namespace Js; case TypeIds_SymbolObject: { - JavascriptSymbolObject* symbolObject = JavascriptSymbolObject::UnsafeFromVar(aValue); + JavascriptSymbolObject* symbolObject = UnsafeVarTo(aValue); + ScriptContext* objectScriptContext = symbolObject->GetScriptContext(); + if (objectScriptContext->optimizationOverrides.GetSideEffects() & SideEffects_ToPrimitive) + { + return MethodCallToPrimitive(symbolObject, requestContext); + } - return CrossSite::MarshalVar(requestContext, symbolObject->Unwrap(), symbolObject->GetScriptContext()); + return CrossSite::MarshalVar(requestContext, symbolObject->Unwrap(), objectScriptContext); } case TypeIds_Date: - case TypeIds_WinRTDate: { - JavascriptDate* dateObject = JavascriptDate::UnsafeFromVar(aValue); + JavascriptDate* dateObject = UnsafeVarTo(aValue); if(hint == JavascriptHint::HintNumber) { if (dateObject->GetScriptContext()->optimizationOverrides.GetSideEffects() & SideEffects_ValueOf) @@ -411,14 +407,14 @@ using namespace Js; // convert to JavascriptNumber case TypeIds_Int64Number: - return JavascriptInt64Number::UnsafeFromVar(aValue)->ToJavascriptNumber(); + return UnsafeVarTo(aValue)->ToJavascriptNumber(); case TypeIds_UInt64Number: - return JavascriptUInt64Number::UnsafeFromVar(aValue)->ToJavascriptNumber(); + return UnsafeVarTo(aValue)->ToJavascriptNumber(); default: // if no Method exists this function falls back to OrdinaryToPrimitive // if IsES6ToPrimitiveEnabled flag is off we also fall back to OrdinaryToPrimitive - return MethodCallToPrimitive(RecyclableObject::UnsafeFromVar(aValue), requestContext); + return MethodCallToPrimitive(UnsafeVarTo(aValue), requestContext); } } @@ -472,7 +468,7 @@ using namespace Js; { return OrdinaryToPrimitive(value, requestContext); } - if (!JavascriptFunction::Is(varMethod)) + if (!VarIs(varMethod)) { // Don't error if we disabled implicit calls JavascriptError::TryThrowTypeError(scriptContext, requestContext, JSERR_Property_NeedFunction, requestContext->GetPropertyName(PropertyIds::_symbolToPrimitive)->GetBuffer()); @@ -480,7 +476,7 @@ using namespace Js; } // Let exoticToPrim be GetMethod(input, @@toPrimitive). - JavascriptFunction* exoticToPrim = JavascriptFunction::UnsafeFromVar(varMethod); + JavascriptFunction* exoticToPrim = UnsafeVarTo(varMethod); JavascriptString* hintString = nullptr; if (hint == JavascriptHint::HintString) @@ -612,14 +608,14 @@ using namespace Js; return scriptContext->GetIntegerString(aValue); case TypeIds_Boolean: - return JavascriptBoolean::UnsafeFromVar(aValue)->GetValue() ? scriptContext->GetLibrary()->GetTrueDisplayString() : scriptContext->GetLibrary()->GetFalseDisplayString(); + return UnsafeVarTo(aValue)->GetValue() ? scriptContext->GetLibrary()->GetTrueDisplayString() : scriptContext->GetLibrary()->GetFalseDisplayString(); case TypeIds_Number: return JavascriptNumber::ToStringRadix10(JavascriptNumber::GetValue(aValue), scriptContext); case TypeIds_Int64Number: { - __int64 value = JavascriptInt64Number::UnsafeFromVar(aValue)->GetValue(); + __int64 value = UnsafeVarTo(aValue)->GetValue(); if (!TaggedInt::IsOverflow(value)) { return scriptContext->GetIntegerString((int)value); @@ -632,7 +628,7 @@ using namespace Js; case TypeIds_UInt64Number: { - unsigned __int64 value = JavascriptUInt64Number::UnsafeFromVar(aValue)->GetValue(); + unsigned __int64 value = UnsafeVarTo(aValue)->GetValue(); if (!TaggedInt::IsOverflow(value)) { return scriptContext->GetIntegerString((uint)value); @@ -645,18 +641,16 @@ using namespace Js; case TypeIds_String: { - ScriptContext* aValueScriptContext = Js::RecyclableObject::UnsafeFromVar(aValue)->GetScriptContext(); - return JavascriptString::UnsafeFromVar(CrossSite::MarshalVar(scriptContext, + ScriptContext* aValueScriptContext = Js::UnsafeVarTo(aValue)->GetScriptContext(); + return UnsafeVarTo(CrossSite::MarshalVar(scriptContext, aValue, aValueScriptContext)); } - case TypeIds_VariantDate: - return JavascriptVariantDate::FromVar(aValue)->GetValueString(scriptContext); case TypeIds_Symbol: - return JavascriptSymbol::UnsafeFromVar(aValue)->ToString(scriptContext); + return UnsafeVarTo(aValue)->ToString(scriptContext); case TypeIds_SymbolObject: - return JavascriptSymbol::ToString(JavascriptSymbolObject::UnsafeFromVar(aValue)->GetValue(), scriptContext); + return JavascriptSymbol::ToString(UnsafeVarTo(aValue)->GetValue(), scriptContext); case TypeIds_GlobalObject: aValue = static_cast(aValue)->ToThis(); @@ -692,42 +686,35 @@ using namespace Js; return JavascriptNumber::ToLocaleString(TaggedInt::ToInt32(aValue), scriptContext); case TypeIds_Boolean: - return JavascriptBoolean::UnsafeFromVar(aValue)->GetValue() ? scriptContext->GetLibrary()->GetTrueDisplayString() : scriptContext->GetLibrary()->GetFalseDisplayString(); + return UnsafeVarTo(aValue)->GetValue() ? scriptContext->GetLibrary()->GetTrueDisplayString() : scriptContext->GetLibrary()->GetFalseDisplayString(); case TypeIds_Int64Number: - return JavascriptNumber::ToLocaleString((double)JavascriptInt64Number::UnsafeFromVar(aValue)->GetValue(), scriptContext); + return JavascriptNumber::ToLocaleString((double)UnsafeVarTo(aValue)->GetValue(), scriptContext); case TypeIds_UInt64Number: - return JavascriptNumber::ToLocaleString((double)JavascriptUInt64Number::UnsafeFromVar(aValue)->GetValue(), scriptContext); + return JavascriptNumber::ToLocaleString((double)UnsafeVarTo(aValue)->GetValue(), scriptContext); case TypeIds_Number: return JavascriptNumber::ToLocaleString(JavascriptNumber::GetValue(aValue), scriptContext); - case TypeIds_String: - return JavascriptString::UnsafeFromVar(aValue); - - case TypeIds_VariantDate: - // Legacy behavior was to create an empty object and call toLocaleString on it, which would result in this value - return scriptContext->GetLibrary()->GetObjectDisplayString(); - case TypeIds_Symbol: - return JavascriptSymbol::UnsafeFromVar(aValue)->ToString(scriptContext); + return UnsafeVarTo(aValue)->ToString(scriptContext); default: { - RecyclableObject* object = RecyclableObject::FromVar(aValue); + RecyclableObject* object = VarTo(aValue); Var value = JavascriptOperators::GetProperty(object, PropertyIds::toLocaleString, scriptContext, NULL); if (JavascriptConversion::IsCallable(value)) { - RecyclableObject* toLocaleStringFunction = RecyclableObject::FromVar(value); + RecyclableObject* toLocaleStringFunction = VarTo(value); Var aResult = scriptContext->GetThreadContext()->ExecuteImplicitCall(toLocaleStringFunction, Js::ImplicitCall_ToPrimitive, [=]()->Js::Var { return CALL_FUNCTION(scriptContext->GetThreadContext(), toLocaleStringFunction, CallInfo(1), aValue); }); - if (JavascriptString::Is(aResult)) + if (VarIs(aResult)) { - return JavascriptString::UnsafeFromVar(aResult); + return UnsafeVarTo(aResult); } else { @@ -759,23 +746,19 @@ using namespace Js; BOOL JavascriptConversion::ToBoolean_Full(Var aValue, ScriptContext* scriptContext) { AssertMsg(!TaggedInt::Is(aValue), "Should be detected"); - AssertMsg(RecyclableObject::Is(aValue), "Should be handled already"); + AssertMsg(VarIs(aValue), "Should be handled already"); - auto type = RecyclableObject::UnsafeFromVar(aValue)->GetType(); + auto type = UnsafeVarTo(aValue)->GetType(); switch (type->GetTypeId()) { case TypeIds_Undefined: case TypeIds_Null: - case TypeIds_VariantDate: return false; case TypeIds_Symbol: return true; - case TypeIds_Boolean: - return JavascriptBoolean::UnsafeFromVar(aValue)->GetValue(); - #if !FLOATVAR case TypeIds_Number: { @@ -786,19 +769,19 @@ using namespace Js; case TypeIds_Int64Number: { - __int64 value = JavascriptInt64Number::UnsafeFromVar(aValue)->GetValue(); + __int64 value = UnsafeVarTo(aValue)->GetValue(); return value != 0; } case TypeIds_UInt64Number: { - unsigned __int64 value = JavascriptUInt64Number::UnsafeFromVar(aValue)->GetValue(); + unsigned __int64 value = UnsafeVarTo(aValue)->GetValue(); return value != 0; } case TypeIds_String: { - JavascriptString * pstValue = JavascriptString::UnsafeFromVar(aValue); + JavascriptString * pstValue = UnsafeVarTo(aValue); return pstValue->GetLength() > 0; } @@ -834,7 +817,7 @@ using namespace Js; JIT_HELPER_REENTRANT_HEADER(Op_ConvNumber_FromPrimitive); Assert(Js::JavascriptStackWalker::ValidateTopJitFrame(scriptContext)); Assert(!TaggedNumber::Is(aValue)); - RecyclableObject *obj = RecyclableObject::FromVar(aValue); + RecyclableObject *obj = VarTo(aValue); // NOTE: Don't allow strings, otherwise JIT's float type specialization has to worry about concats if (obj->GetTypeId() >= TypeIds_String) @@ -866,7 +849,7 @@ using namespace Js; double JavascriptConversion::ToNumber_Full(Var aValue,ScriptContext* scriptContext) { AssertMsg(!TaggedInt::Is(aValue), "Should be detected"); - ScriptContext * objectScriptContext = RecyclableObject::Is(aValue) ? RecyclableObject::UnsafeFromVar(aValue)->GetScriptContext() : nullptr; + ScriptContext * objectScriptContext = VarIs(aValue) ? UnsafeVarTo(aValue)->GetScriptContext() : nullptr; BOOL fPrimitiveOnly = false; while(true) { @@ -886,22 +869,19 @@ using namespace Js; return TaggedInt::ToDouble(aValue); case TypeIds_Boolean: - return JavascriptBoolean::UnsafeFromVar(aValue)->GetValue() ? 1 : +0; + return UnsafeVarTo(aValue)->GetValue() ? 1 : +0; case TypeIds_Number: return JavascriptNumber::GetValue(aValue); case TypeIds_Int64Number: - return (double)JavascriptInt64Number::UnsafeFromVar(aValue)->GetValue(); + return (double)UnsafeVarTo(aValue)->GetValue(); case TypeIds_UInt64Number: - return (double)JavascriptUInt64Number::UnsafeFromVar(aValue)->GetValue(); + return (double)UnsafeVarTo(aValue)->GetValue(); case TypeIds_String: - return JavascriptString::UnsafeFromVar(aValue)->ToDouble(); - - case TypeIds_VariantDate: - return Js::DateImplementation::GetTvUtc(Js::DateImplementation::JsLocalTimeFromVarDate(JavascriptVariantDate::UnsafeFromVar(aValue)->GetValue()), scriptContext); + return UnsafeVarTo(aValue)->ToDouble(); default: { @@ -923,7 +903,7 @@ using namespace Js; double JavascriptConversion::ToInteger_Full(Var aValue,ScriptContext* scriptContext) { AssertMsg(!TaggedInt::Is(aValue), "Should be detected"); - ScriptContext * objectScriptContext = RecyclableObject::Is(aValue) ? RecyclableObject::UnsafeFromVar(aValue)->GetScriptContext() : nullptr; + ScriptContext * objectScriptContext = VarIs(aValue) ? UnsafeVarTo(aValue)->GetScriptContext() : nullptr; BOOL fPrimitiveOnly = false; while(true) { @@ -940,21 +920,18 @@ using namespace Js; return TaggedInt::ToInt32(aValue); case TypeIds_Boolean: - return JavascriptBoolean::UnsafeFromVar(aValue)->GetValue() ? 1 : +0; + return UnsafeVarTo(aValue)->GetValue() ? 1 : +0; case TypeIds_Number: return ToInteger(JavascriptNumber::GetValue(aValue)); case TypeIds_Int64Number: - return ToInteger((double)JavascriptInt64Number::UnsafeFromVar(aValue)->GetValue()); + return ToInteger((double)UnsafeVarTo(aValue)->GetValue()); case TypeIds_UInt64Number: - return ToInteger((double)JavascriptUInt64Number::UnsafeFromVar(aValue)->GetValue()); + return ToInteger((double)UnsafeVarTo(aValue)->GetValue()); case TypeIds_String: - return ToInteger(JavascriptString::UnsafeFromVar(aValue)->ToDouble()); - - case TypeIds_VariantDate: - return ToInteger(ToNumber_Full(aValue, scriptContext)); + return ToInteger(UnsafeVarTo(aValue)->ToDouble()); default: { @@ -973,10 +950,9 @@ using namespace Js; double JavascriptConversion::ToInteger(double val) { - if(JavascriptNumber::IsNan(val)) + if(JavascriptNumber::IsNan(val) || JavascriptNumber::IsZero(val)) return 0; - if(JavascriptNumber::IsPosInf(val) || JavascriptNumber::IsNegInf(val) || - JavascriptNumber::IsZero(val)) + if(JavascriptNumber::IsPosInf(val) || JavascriptNumber::IsNegInf(val)) { return val; } @@ -994,7 +970,7 @@ using namespace Js; Assert(Js::JavascriptStackWalker::ValidateTopJitFrame(scriptContext)); AssertMsg(!TaggedInt::Is(aValue), "Should be detected"); - ScriptContext * objectScriptContext = RecyclableObject::Is(aValue) ? RecyclableObject::UnsafeFromVar(aValue)->GetScriptContext() : nullptr; + ScriptContext * objectScriptContext = VarIs(aValue) ? UnsafeVarTo(aValue)->GetScriptContext() : nullptr; // This is used when TaggedInt's overflow but remain under int32 // so Number is our most critical case: @@ -1018,22 +994,22 @@ using namespace Js; return TaggedInt::ToInt32(aValue); case TypeIds_Boolean: - return JavascriptBoolean::UnsafeFromVar(aValue)->GetValue() ? 1 : +0; + return UnsafeVarTo(aValue)->GetValue() ? 1 : +0; case TypeIds_Int64Number: // we won't lose precision if the int64 is within 32bit boundary; otherwise we need to // treat it as double anyhow. - return JavascriptMath::ToInt32Core((double)JavascriptInt64Number::UnsafeFromVar(aValue)->GetValue()); + return JavascriptMath::ToInt32Core((double)UnsafeVarTo(aValue)->GetValue()); case TypeIds_UInt64Number: // we won't lose precision if the int64 is within 32bit boundary; otherwise we need to // treat it as double anyhow. - return JavascriptMath::ToInt32Core((double)JavascriptUInt64Number::UnsafeFromVar(aValue)->GetValue()); + return JavascriptMath::ToInt32Core((double)UnsafeVarTo(aValue)->GetValue()); case TypeIds_String: { double result; - if (JavascriptString::UnsafeFromVar(aValue)->ToDouble(&result)) + if (UnsafeVarTo(aValue)->ToDouble(&result)) { return JavascriptMath::ToInt32Core(result); } @@ -1041,9 +1017,6 @@ using namespace Js; return 0; } - case TypeIds_VariantDate: - return ToInt32(ToNumber_Full(aValue, scriptContext)); - default: AssertMsg(JavascriptOperators::IsObject(aValue), "bad type object in conversion ToInteger32"); aValue = ToPrimitive(aValue, scriptContext); @@ -1062,7 +1035,7 @@ using namespace Js; return TaggedInt::ToInt32(aValue); case TypeIds_Boolean: - return JavascriptBoolean::UnsafeFromVar(aValue)->GetValue() ? 1 : +0; + return UnsafeVarTo(aValue)->GetValue() ? 1 : +0; case TypeIds_Number: return ToInt32(JavascriptNumber::GetValue(aValue)); @@ -1070,17 +1043,17 @@ using namespace Js; case TypeIds_Int64Number: // we won't lose precision if the int64 is within 32bit boundary; otherwise we need to // treat it as double anyhow. - return JavascriptMath::ToInt32Core((double)JavascriptInt64Number::UnsafeFromVar(aValue)->GetValue()); + return JavascriptMath::ToInt32Core((double)UnsafeVarTo(aValue)->GetValue()); case TypeIds_UInt64Number: // we won't lose precision if the int64 is within 32bit boundary; otherwise we need to // treat it as double anyhow. - return JavascriptMath::ToInt32Core((double)JavascriptUInt64Number::UnsafeFromVar(aValue)->GetValue()); + return JavascriptMath::ToInt32Core((double)UnsafeVarTo(aValue)->GetValue()); case TypeIds_String: { double result; - if (JavascriptString::UnsafeFromVar(aValue)->ToDouble(&result)) + if (UnsafeVarTo(aValue)->ToDouble(&result)) { return ToInt32(result); } @@ -1088,9 +1061,6 @@ using namespace Js; return 0; } - case TypeIds_VariantDate: - return ToInt32(ToNumber_Full(aValue, scriptContext)); - default: AssertMsg(FALSE, "wrong call in ToInteger32_Full, no dynamic objects should get here."); JavascriptError::ThrowError(scriptContext, VBSERR_OLENoPropOrMethod); @@ -1101,7 +1071,7 @@ using namespace Js; // a strict version of ToInt32 conversion that returns false for non int32 values like, inf, NaN, undef BOOL JavascriptConversion::ToInt32Finite(Var aValue, ScriptContext* scriptContext, int32* result) { - ScriptContext * objectScriptContext = RecyclableObject::Is(aValue) ? RecyclableObject::UnsafeFromVar(aValue)->GetScriptContext() : nullptr; + ScriptContext * objectScriptContext = VarIs(aValue) ? UnsafeVarTo(aValue)->GetScriptContext() : nullptr; BOOL fPrimitiveOnly = false; while(true) { @@ -1123,7 +1093,7 @@ using namespace Js; return true; case TypeIds_Boolean: - *result = JavascriptBoolean::UnsafeFromVar(aValue)->GetValue() ? 1 : +0; + *result = UnsafeVarTo(aValue)->GetValue() ? 1 : +0; return true; case TypeIds_Number: @@ -1132,18 +1102,15 @@ using namespace Js; case TypeIds_Int64Number: // we won't lose precision if the int64 is within 32bit boundary; otherwise we need to // treat it as double anyhow. - return ToInt32Finite((double)JavascriptInt64Number::UnsafeFromVar(aValue)->GetValue(), result); + return ToInt32Finite((double)UnsafeVarTo(aValue)->GetValue(), result); case TypeIds_UInt64Number: // we won't lose precision if the int64 is within 32bit boundary; otherwise we need to // treat it as double anyhow. - return ToInt32Finite((double)JavascriptUInt64Number::UnsafeFromVar(aValue)->GetValue(), result); + return ToInt32Finite((double)UnsafeVarTo(aValue)->GetValue(), result); case TypeIds_String: - return ToInt32Finite(JavascriptString::UnsafeFromVar(aValue)->ToDouble(), result); - - case TypeIds_VariantDate: - return ToInt32Finite(ToNumber_Full(aValue, scriptContext), result); + return ToInt32Finite(UnsafeVarTo(aValue)->ToDouble(), result); default: { @@ -1175,12 +1142,12 @@ using namespace Js; } case TypeIds_Int64Number: { - JavascriptInt64Number* int64Number = JavascriptInt64Number::UnsafeFromVar(aValue); + JavascriptInt64Number* int64Number = UnsafeVarTo(aValue); return int64Number->GetValue(); } case TypeIds_UInt64Number: { - JavascriptUInt64Number* uint64Number = JavascriptUInt64Number::UnsafeFromVar(aValue); + JavascriptUInt64Number* uint64Number = UnsafeVarTo(aValue); return (__int64)uint64Number->GetValue(); } case TypeIds_Number: @@ -1200,12 +1167,12 @@ using namespace Js; } case TypeIds_Int64Number: { - JavascriptInt64Number* int64Number = JavascriptInt64Number::UnsafeFromVar(aValue); + JavascriptInt64Number* int64Number = UnsafeVarTo(aValue); return (unsigned __int64)int64Number->GetValue(); } case TypeIds_UInt64Number: { - JavascriptUInt64Number* uint64Number = JavascriptUInt64Number::UnsafeFromVar(aValue); + JavascriptUInt64Number* uint64Number = UnsafeVarTo(aValue); return uint64Number->GetValue(); } case TypeIds_Number: @@ -1236,7 +1203,7 @@ using namespace Js; { JIT_HELPER_REENTRANT_HEADER(Conv_ToUInt32_Full); AssertMsg(!TaggedInt::Is(aValue), "Should be detected"); - ScriptContext * objectScriptContext = RecyclableObject::Is(aValue) ? RecyclableObject::UnsafeFromVar(aValue)->GetScriptContext() : nullptr; + ScriptContext * objectScriptContext = VarIs(aValue) ? UnsafeVarTo(aValue)->GetScriptContext() : nullptr; BOOL fPrimitiveOnly = false; while(true) { @@ -1253,7 +1220,7 @@ using namespace Js; return TaggedInt::ToUInt32(aValue); case TypeIds_Boolean: - return JavascriptBoolean::UnsafeFromVar(aValue)->GetValue() ? 1 : +0; + return UnsafeVarTo(aValue)->GetValue() ? 1 : +0; case TypeIds_Number: return JavascriptMath::ToUInt32(JavascriptNumber::GetValue(aValue)); @@ -1261,17 +1228,17 @@ using namespace Js; case TypeIds_Int64Number: // we won't lose precision if the int64 is within 32bit boundary; otherwise we need to // treat it as double anyhow. - return JavascriptMath::ToUInt32((double)JavascriptInt64Number::UnsafeFromVar(aValue)->GetValue()); + return JavascriptMath::ToUInt32((double)UnsafeVarTo(aValue)->GetValue()); case TypeIds_UInt64Number: // we won't lose precision if the int64 is within 32bit boundary; otherwise we need to // treat it as double anyhow. - return JavascriptMath::ToUInt32((double)JavascriptUInt64Number::UnsafeFromVar(aValue)->GetValue()); + return JavascriptMath::ToUInt32((double)UnsafeVarTo(aValue)->GetValue()); case TypeIds_String: { double result; - if (JavascriptString::UnsafeFromVar(aValue)->ToDouble(&result)) + if (UnsafeVarTo(aValue)->ToDouble(&result)) { return JavascriptMath::ToUInt32(result); } @@ -1279,9 +1246,6 @@ using namespace Js; return 0; } - case TypeIds_VariantDate: - return JavascriptMath::ToUInt32(ToNumber_Full(aValue, scriptContext)); - default: { AssertMsg(JavascriptOperators::IsObject(aValue), "bad type object in conversion ToUInt32"); @@ -1317,7 +1281,7 @@ using namespace Js; uint16 JavascriptConversion::ToUInt16_Full(IN Var aValue, ScriptContext* scriptContext) { AssertMsg(!TaggedInt::Is(aValue), "Should be detected"); - ScriptContext * objectScriptContext = RecyclableObject::Is(aValue) ? RecyclableObject::UnsafeFromVar(aValue)->GetScriptContext() : nullptr; + ScriptContext * objectScriptContext = VarIs(aValue) ? UnsafeVarTo(aValue)->GetScriptContext() : nullptr; BOOL fPrimitiveOnly = false; while(true) { @@ -1334,7 +1298,7 @@ using namespace Js; return TaggedInt::ToUInt16(aValue); case TypeIds_Boolean: - return JavascriptBoolean::UnsafeFromVar(aValue)->GetValue() ? 1 : +0; + return UnsafeVarTo(aValue)->GetValue() ? 1 : +0; case TypeIds_Number: return ToUInt16(JavascriptNumber::GetValue(aValue)); @@ -1342,17 +1306,17 @@ using namespace Js; case TypeIds_Int64Number: // we won't lose precision if the int64 is within 16bit boundary; otherwise we need to // treat it as double anyhow. - return ToUInt16((double)JavascriptInt64Number::UnsafeFromVar(aValue)->GetValue()); + return ToUInt16((double)UnsafeVarTo(aValue)->GetValue()); case TypeIds_UInt64Number: // we won't lose precision if the int64 is within 16bit boundary; otherwise we need to // treat it as double anyhow. - return ToUInt16((double)JavascriptUInt64Number::UnsafeFromVar(aValue)->GetValue()); + return ToUInt16((double)UnsafeVarTo(aValue)->GetValue()); case TypeIds_String: { double result; - if (JavascriptString::UnsafeFromVar(aValue)->ToDouble(&result)) + if (UnsafeVarTo(aValue)->ToDouble(&result)) { return ToUInt16(result); } @@ -1360,9 +1324,6 @@ using namespace Js; return 0; } - case TypeIds_VariantDate: - return ToUInt16(ToNumber_Full(aValue, scriptContext)); - default: { AssertMsg(JavascriptOperators::IsObject(aValue), "bad type object in conversion ToUIn16"); @@ -1466,3 +1427,15 @@ using namespace Js; return NumberUtilities::TryToInt64(length); } + JavascriptBigInt *JavascriptConversion::ToBigInt(Var aValue, ScriptContext* scriptContext) + { + Assert(scriptContext->GetThreadContext()->IsScriptActive()); + switch (JavascriptOperators::GetTypeId(aValue)) + { + case TypeIds_BigInt: + break; + default: + AssertOrFailFastMsg(false, "do not support conversion of other types in ToBigInt"); + } + return UnsafeVarTo(aValue); + } diff --git a/lib/Runtime/Language/JavascriptConversion.h b/lib/Runtime/Language/JavascriptConversion.h index bcfdc8d5bdb..57024e90905 100644 --- a/lib/Runtime/Language/JavascriptConversion.h +++ b/lib/Runtime/Language/JavascriptConversion.h @@ -83,6 +83,8 @@ namespace Js { static int64 ToLength(Var aValue, ScriptContext* scriptContext); + static JavascriptBigInt * ToBigInt(Var aValue, ScriptContext * scriptContext); + static float LongToFloat(__int64 aValue); static float ULongToFloat(unsigned __int64 aValue); static double LongToDouble(__int64 aValue); diff --git a/lib/Runtime/Language/JavascriptConversion.inl b/lib/Runtime/Language/JavascriptConversion.inl index f004f932091..89258060065 100644 --- a/lib/Runtime/Language/JavascriptConversion.inl +++ b/lib/Runtime/Language/JavascriptConversion.inl @@ -15,7 +15,12 @@ namespace Js { inline BOOL JavascriptConversion::ToBoolean(Var aValue,ScriptContext* scriptContext) { JIT_HELPER_NOT_REENTRANT_HEADER(Conv_ToBoolean, reentrancylock, scriptContext->GetThreadContext()); - if (TaggedInt::Is(aValue)) + + if (VarIs(aValue)) + { + return UnsafeVarTo(aValue)->GetValue(); + } + else if (TaggedInt::Is(aValue)) { return aValue != reinterpret_cast(AtomTag_IntPtr); } @@ -248,7 +253,7 @@ namespace Js { { return nullptr; } - int64 int64Val = JavascriptInt64Number::UnsafeFromVar(value)->GetValue(); + int64 int64Val = UnsafeVarTo(value)->GetValue(); return TryCanonicalizeIntHelper(int64Val); @@ -259,7 +264,7 @@ namespace Js { { return nullptr; } - uint64 uint64Val = JavascriptUInt64Number::UnsafeFromVar(value)->GetValue(); + uint64 uint64Val = UnsafeVarTo(value)->GetValue(); return TryCanonicalizeIntHelper(uint64Val); } @@ -297,10 +302,12 @@ namespace Js { #if FLOATVAR if (typeId == TypeIds_Number) { - // NaN could have sign bit set, but that isn't observable so canonicalize to positive NaN double numberValue = JavascriptNumber::GetValue(value); + // NaN and -NaN do not canonicalize to the same value, but they are equal, so only allow +NaN return JavascriptNumber::IsNan(numberValue) - ? JavascriptNumber::ToVar(JavascriptNumber::NaN) + ? JavascriptNumber::IsNegative(numberValue) + ? nullptr + : JavascriptNumber::ToVar(JavascriptNumber::NaN) : value; } #else diff --git a/lib/Runtime/Language/JavascriptExceptionObject.cpp b/lib/Runtime/Language/JavascriptExceptionObject.cpp index 75b7bf2fbf0..4bb4ef3afe6 100644 --- a/lib/Runtime/Language/JavascriptExceptionObject.cpp +++ b/lib/Runtime/Language/JavascriptExceptionObject.cpp @@ -90,10 +90,10 @@ namespace Js } if (rethrownObject) { - if (JavascriptError::Is(rethrownObject)) + if (VarIs(rethrownObject)) { - JavascriptError* jsErrorObject = JavascriptError::FromVar(rethrownObject); + JavascriptError* jsErrorObject = VarTo(rethrownObject); if (jsErrorObject->GetScriptContext() != requestingScriptContext ) { Assert(requestingScriptContext->GetHostScriptContext()); @@ -109,7 +109,7 @@ namespace Js } else { - if (RecyclableObject::Is(rethrownObject)) + if (VarIs(rethrownObject)) { if (CrossSite::NeedMarshalVar(rethrownObject, requestingScriptContext)) { diff --git a/lib/Runtime/Language/JavascriptExceptionObject.h b/lib/Runtime/Language/JavascriptExceptionObject.h index 59f76f70635..11317188f48 100644 --- a/lib/Runtime/Language/JavascriptExceptionObject.h +++ b/lib/Runtime/Language/JavascriptExceptionObject.h @@ -19,12 +19,12 @@ namespace Js JavascriptExceptionObject(Var object, ScriptContext * scriptContext, JavascriptExceptionContext* exceptionContextIn, bool isPendingExceptionObject = false) : thrownObject(object), isPendingExceptionObject(isPendingExceptionObject), - scriptContext(scriptContext), tag(true), + scriptContext(scriptContext), tag(true), #ifdef ENABLE_SCRIPT_DEBUGGING isDebuggerSkip(false), byteCodeOffsetAfterDebuggerSkip(Constants::InvalidByteCodeOffset), hasDebuggerLogged(false), isFirstChance(false), isExceptionCaughtInNonUserCode(false), ignoreAdvanceToNextStatement(false), #endif - hostWrapperCreateFunc(nullptr), isGeneratorReturnException(false), + hostWrapperCreateFunc(nullptr), next(nullptr) { if (exceptionContextIn) @@ -139,15 +139,15 @@ namespace Js void ReplaceThrownObject(Var object) { - AssertMsg(RecyclableObject::Is(object), "Why are we replacing a non recyclable thrown object?"); - AssertMsg(this->GetScriptContext() != RecyclableObject::FromVar(object)->GetScriptContext() || this->thrownObject != object, "If replaced thrownObject is from same context what's the need to replace?"); + AssertMsg(VarIs(object), "Why are we replacing a non recyclable thrown object?"); + AssertMsg(this->GetScriptContext() != VarTo(object)->GetScriptContext() || this->thrownObject != object, "If replaced thrownObject is from same context what's the need to replace?"); this->thrownObject = object; } void SetThrownObject(Var object) { // Only pending exception object and generator return exception use this API. - Assert(this->isPendingExceptionObject || this->isGeneratorReturnException); + Assert(this->isPendingExceptionObject); this->thrownObject = object; } JavascriptExceptionObject* CloneIfStaticExceptionObject(ScriptContext* scriptContext); @@ -159,18 +159,6 @@ namespace Js bool IsPendingExceptionObject() const { return isPendingExceptionObject; } - - void SetGeneratorReturnException(bool is) - { - isGeneratorReturnException = is; - } - - bool IsGeneratorReturnException() - { - // Used by the generators to throw an exception to indicate the return from generator function - return isGeneratorReturnException; - } - private: friend class ::ThreadContext; static void Insert(Field(JavascriptExceptionObject*)* head, JavascriptExceptionObject* item); @@ -179,14 +167,13 @@ namespace Js private: Field(Var) thrownObject; Field(ScriptContext *) scriptContext; - + #ifdef ENABLE_SCRIPT_DEBUGGING Field(int) byteCodeOffsetAfterDebuggerSkip; #endif Field(const bool) tag : 1; // Tag the low bit to prevent possible GC false references Field(bool) isPendingExceptionObject : 1; - Field(bool) isGeneratorReturnException : 1; #ifdef ENABLE_SCRIPT_DEBUGGING Field(bool) isDebuggerSkip : 1; @@ -210,18 +197,4 @@ namespace Js PREVENT_COPY(JavascriptExceptionObject) }; - - class GeneratorReturnExceptionObject : public JavascriptExceptionObject - { - public: - GeneratorReturnExceptionObject(Var object, ScriptContext * scriptContext) - : JavascriptExceptionObject(object, scriptContext, nullptr) - { -#ifdef ENABLE_SCRIPT_DEBUGGING - this->SetDebuggerSkip(true); - this->SetIgnoreAdvanceToNextStatement(true); -#endif - this->SetGeneratorReturnException(true); - } - }; } diff --git a/lib/Runtime/Language/JavascriptExceptionOperators.cpp b/lib/Runtime/Language/JavascriptExceptionOperators.cpp index 2f64e7f8cd1..5bb2fb808ea 100644 --- a/lib/Runtime/Language/JavascriptExceptionOperators.cpp +++ b/lib/Runtime/Language/JavascriptExceptionOperators.cpp @@ -171,7 +171,7 @@ namespace Js // it so happens that this catch was on the stack and caught the exception. // Re-throw! JavascriptExceptionOperators::DoThrow(exception, scriptContext); - } + } Var exceptionObject = exception->GetThrownObject(scriptContext); AssertMsg(exceptionObject, "Caught object is null."); @@ -1048,18 +1048,18 @@ namespace Js Assert(scriptContext != nullptr); // TODO: FastDOM Trampolines will throw JS Exceptions but are not isScriptActive //AssertMsg(scriptContext->GetThreadContext()->IsScriptActive() || - // (JavascriptError::Is(object) && (JavascriptError::FromVar(object))->IsExternalError()), + // (VarIs(object) && (VarTo(object))->IsExternalError()), // "Javascript exception raised when script is not active"); AssertMsg(scriptContext->GetThreadContext()->IsInScript() || - (JavascriptError::Is(object) && (JavascriptError::FromVar(object))->IsExternalError()), + (VarIs(object) && (VarTo(object))->IsExternalError()), "Javascript exception raised without being in CallRootFunction"); JavascriptError *javascriptError = nullptr; - if (JavascriptError::Is(object)) + if (VarIs(object)) { // We keep track of the JavascriptExceptionObject that was created when this error // was first thrown so that we can always get the correct metadata. - javascriptError = JavascriptError::FromVar(object); + javascriptError = VarTo(object); JavascriptExceptionObject *exceptionObject = javascriptError->GetJavascriptExceptionObject(); if (exceptionObject) { @@ -1152,9 +1152,9 @@ namespace Js // In WER scenario, we should combine the original stack with latest throw stack as the final throw might be coming form // a different stack. uint64 i = 1; - if (crawlStackForWER && thrownObject && Js::JavascriptError::Is(thrownObject)) + if (crawlStackForWER && thrownObject && Js::VarIs(thrownObject)) { - Js::JavascriptError* errorObject = Js::JavascriptError::FromVar(thrownObject); + Js::JavascriptError* errorObject = Js::VarTo(thrownObject); Js::JavascriptExceptionContext::StackTrace *originalStackTrace = NULL; const Js::JavascriptExceptionObject* originalExceptionObject = errorObject->GetJavascriptExceptionObject(); if (!resetStack && errorObject->GetInternalProperty(errorObject, InternalPropertyIds::StackTrace, (Js::Var*) &originalStackTrace, NULL, &scriptContext) && @@ -1444,14 +1444,14 @@ namespace Js // bool JavascriptExceptionOperators::IsErrorInstance(Var thrownObject) { - if (thrownObject && JavascriptError::Is(thrownObject)) + if (thrownObject && VarIs(thrownObject)) { - return !JavascriptError::FromVar(thrownObject)->IsPrototype(); + return !VarTo(thrownObject)->IsPrototype(); } - if (thrownObject && RecyclableObject::Is(thrownObject)) + if (thrownObject && VarIs(thrownObject)) { - RecyclableObject* obj = RecyclableObject::FromVar(thrownObject); + RecyclableObject* obj = VarTo(thrownObject); while (true) { @@ -1461,7 +1461,7 @@ namespace Js break; } - if (JavascriptError::Is(obj)) + if (VarIs(obj)) { return true; } @@ -1495,7 +1495,7 @@ namespace Js // If we still have stack trace to store and obj is a thrown exception object, obj must be an Error instance. Assert(!isThrownException || IsErrorInstance(targetObject)); - RecyclableObject* obj = RecyclableObject::FromVar(targetObject); + RecyclableObject* obj = VarTo(targetObject); if (!resetStack && obj->HasProperty(PropertyIds::stack)) { return; // we don't want to overwrite an existing "stack" property @@ -1556,19 +1556,19 @@ namespace Js // If the first argument to the accessor is not a recyclable object, return undefined // for compat with other browsers - if (!RecyclableObject::Is(args[0])) + if (!VarIs(args[0])) { return scriptContext->GetLibrary()->GetUndefined(); } - RecyclableObject *obj = RecyclableObject::FromVar(args[0]); + RecyclableObject *obj = VarTo(args[0]); // If an argument was passed to the accessor, it is being called as a setter. // Set the internal StackTraceCache property accordingly. if (args.Info.Count > 1) { obj->SetInternalProperty(InternalPropertyIds::StackTraceCache, args[1], PropertyOperationFlags::PropertyOperation_None, NULL); - if (JavascriptError::Is(obj)) + if (VarIs(obj)) { ((JavascriptError *)obj)->SetStackPropertyRedefined(true); } @@ -1670,7 +1670,7 @@ namespace Js if (scriptContext->GetConfig()->IsErrorStackTraceEnabled() && IsErrorInstance(thrownObject)) { - HRESULT hr = JavascriptError::GetRuntimeError(RecyclableObject::FromVar(thrownObject), NULL); + HRESULT hr = JavascriptError::GetRuntimeError(VarTo(thrownObject), NULL); JavascriptFunction* error = scriptContext->GetLibrary()->GetErrorConstructor(); // If we are throwing StackOverflow and Error.stackTraceLimit is a custom getter, we can't make the getter diff --git a/lib/Runtime/Language/JavascriptOperators.cpp b/lib/Runtime/Language/JavascriptOperators.cpp index 12b83e62189..078e02cea8b 100644 --- a/lib/Runtime/Language/JavascriptOperators.cpp +++ b/lib/Runtime/Language/JavascriptOperators.cpp @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #include "RuntimeLanguagePch.h" @@ -12,6 +13,7 @@ #include "Library/JavascriptRegularExpression.h" #include "Library/ThrowErrorObject.h" #include "Library/JavascriptGeneratorFunction.h" +#include "Library/JavascriptAsyncFunction.h" #include "Library/ForInObjectEnumerator.h" #include "Library/ES5Array.h" @@ -209,7 +211,7 @@ using namespace Js; // See Win8 bug 490489. callInfo.Flags = CallFlags_Value; - RecyclableObject *funcPtr = RecyclableObject::UnsafeFromVar(func); + RecyclableObject *funcPtr = UnsafeVarTo(func); PROBE_STACK(scriptContext, Js::Constants::MinStackDefault + argCount * 4); JavascriptMethod entryPoint = funcPtr->GetEntryPoint(); @@ -308,6 +310,15 @@ using namespace Js; JIT_HELPER_END(Op_ConvNumberInPlace); } + Var JavascriptOperators::ToNumericInPlace(Var aRight, ScriptContext* scriptContext, JavascriptNumber* result) + { + if (JavascriptOperators::GetTypeId(aRight) == TypeIds_BigInt) + { + return aRight; + } + return JavascriptOperators::ToNumberInPlace(aRight, scriptContext, result); + } + Var JavascriptOperators::Typeof(Var var, ScriptContext* scriptContext) { JIT_HELPER_REENTRANT_HEADER(Op_Typeof); @@ -325,13 +336,13 @@ using namespace Js; return scriptContext->GetLibrary()->GetNumberTypeDisplayString(); default: // Falsy objects are typeof 'undefined'. - if (RecyclableObject::FromVar(var)->GetType()->IsFalsy()) + if (VarTo(var)->GetType()->IsFalsy()) { return scriptContext->GetLibrary()->GetUndefinedDisplayString(); } else { - return RecyclableObject::FromVar(var)->GetTypeOfString(scriptContext); + return VarTo(var)->GetTypeOfString(scriptContext); } } JIT_HELPER_END(Op_Typeof); @@ -540,14 +551,8 @@ using namespace Js; { return false; } - else if (JavascriptVariantDate::Is(aLeft) == false) // only need to check on aLeft - since they are the same var, aRight would do the same - { - return true; - } else { - //In ES5 mode strict equals (===) on same instance of object type VariantDate succeeds. - //Hence equals needs to succeed. return true; } } @@ -567,7 +572,7 @@ using namespace Js; } else { - BOOL res = RecyclableObject::UnsafeFromVar(aRight)->Equals(aLeft, &result, requestContext); + BOOL res = UnsafeVarTo(aRight)->Equals(aLeft, &result, requestContext); AssertMsg(res, "Should have handled this"); return result; } @@ -584,13 +589,13 @@ using namespace Js; } else { - BOOL res = RecyclableObject::UnsafeFromVar(aRight)->Equals(aLeft, &result, requestContext); + BOOL res = UnsafeVarTo(aRight)->Equals(aLeft, &result, requestContext); AssertMsg(res, "Should have handled this"); return result; } } - if (RecyclableObject::UnsafeFromVar(aLeft)->Equals(aRight, &result, requestContext)) + if (UnsafeVarTo(aLeft)->Equals(aRight, &result, requestContext)) { return result; } @@ -641,6 +646,13 @@ using namespace Js; TypeId leftType = JavascriptOperators::GetTypeId(aLeft); TypeId rightType = JavascriptOperators::GetTypeId(aRight); + if ((leftType == TypeIds_BigInt) || (rightType == TypeIds_BigInt)) + { + // TODO: support comparison with types other than BigInt + AssertOrFailFastMsg(leftType == rightType, "do not support comparison with types other than BigInt"); + return JavascriptBigInt::LessThan(aLeft, aRight); + } + switch (leftType) { case TypeIds_Integer: @@ -679,15 +691,15 @@ using namespace Js; { case TypeIds_Int64Number: { - __int64 leftValue = JavascriptInt64Number::UnsafeFromVar(aLeft)->GetValue(); - __int64 rightValue = JavascriptInt64Number::UnsafeFromVar(aRight)->GetValue(); + __int64 leftValue = UnsafeVarTo(aLeft)->GetValue(); + __int64 rightValue = UnsafeVarTo(aRight)->GetValue(); return leftValue < rightValue; } break; case TypeIds_UInt64Number: { - __int64 leftValue = JavascriptInt64Number::UnsafeFromVar(aLeft)->GetValue(); - unsigned __int64 rightValue = JavascriptUInt64Number::UnsafeFromVar(aRight)->GetValue(); + __int64 leftValue = UnsafeVarTo(aLeft)->GetValue(); + unsigned __int64 rightValue = UnsafeVarTo(aRight)->GetValue(); if (rightValue <= INT_MAX && leftValue >= 0) { return leftValue < (__int64)rightValue; @@ -695,7 +707,7 @@ using namespace Js; } break; } - dblLeft = (double)JavascriptInt64Number::UnsafeFromVar(aLeft)->GetValue(); + dblLeft = (double)UnsafeVarTo(aLeft)->GetValue(); dblRight = JavascriptConversion::ToNumber(aRight, scriptContext); } break; @@ -709,8 +721,8 @@ using namespace Js; { case TypeIds_Int64Number: { - unsigned __int64 leftValue = JavascriptUInt64Number::UnsafeFromVar(aLeft)->GetValue(); - __int64 rightValue = JavascriptInt64Number::UnsafeFromVar(aRight)->GetValue(); + unsigned __int64 leftValue = UnsafeVarTo(aLeft)->GetValue(); + __int64 rightValue = UnsafeVarTo(aRight)->GetValue(); if (leftValue < INT_MAX && rightValue >= 0) { return (__int64)leftValue < rightValue; @@ -719,16 +731,17 @@ using namespace Js; break; case TypeIds_UInt64Number: { - unsigned __int64 leftValue = JavascriptUInt64Number::UnsafeFromVar(aLeft)->GetValue(); - unsigned __int64 rightValue = JavascriptUInt64Number::UnsafeFromVar(aRight)->GetValue(); + unsigned __int64 leftValue = UnsafeVarTo(aLeft)->GetValue(); + unsigned __int64 rightValue = UnsafeVarTo(aRight)->GetValue(); return leftValue < rightValue; } break; } - dblLeft = (double)JavascriptUInt64Number::UnsafeFromVar(aLeft)->GetValue(); + dblLeft = (double)UnsafeVarTo(aLeft)->GetValue(); dblRight = JavascriptConversion::ToNumber(aRight, scriptContext); } break; + case TypeIds_String: switch (rightType) { @@ -821,6 +834,144 @@ using namespace Js; JIT_HELPER_END(Op_StrictEqualEmptyString); } +#ifdef _CHAKRACOREBUILD + BOOL JavascriptOperators::StrictEqualNumberType(Var aLeft, Var aRight, TypeId leftType, TypeId rightType, ScriptContext *requestContext) + { + double dblLeft, dblRight; + + switch (leftType) + { + case TypeIds_Integer: + switch (rightType) + { + case TypeIds_Integer: + return aLeft == aRight; + // we don't need to worry about int64: it cannot equal as we create + // JavascriptInt64Number only in overflow scenarios. + case TypeIds_Number: + dblLeft = TaggedInt::ToDouble(aLeft); + dblRight = JavascriptNumber::GetValue(aRight); + goto CommonNumber; + } + return FALSE; + + case TypeIds_Int64Number: + switch (rightType) + { + case TypeIds_Int64Number: + { + __int64 leftValue = UnsafeVarTo(aLeft)->GetValue(); + __int64 rightValue = UnsafeVarTo(aRight)->GetValue(); + return leftValue == rightValue; + } + case TypeIds_UInt64Number: + { + __int64 leftValue = UnsafeVarTo(aLeft)->GetValue(); + unsigned __int64 rightValue = VarTo(aRight)->GetValue(); + return ((unsigned __int64)leftValue == rightValue); + } + case TypeIds_Number: + dblLeft = (double)UnsafeVarTo(aLeft)->GetValue(); + dblRight = JavascriptNumber::GetValue(aRight); + goto CommonNumber; + } + return FALSE; + + case TypeIds_UInt64Number: + switch (rightType) + { + case TypeIds_Int64Number: + { + unsigned __int64 leftValue = UnsafeVarTo(aLeft)->GetValue(); + __int64 rightValue = UnsafeVarTo(aRight)->GetValue(); + return (leftValue == (unsigned __int64)rightValue); + } + case TypeIds_UInt64Number: + { + unsigned __int64 leftValue = UnsafeVarTo(aLeft)->GetValue(); + unsigned __int64 rightValue = VarTo(aRight)->GetValue(); + return leftValue == rightValue; + } + case TypeIds_Number: + dblLeft = (double)UnsafeVarTo(aLeft)->GetValue(); + dblRight = JavascriptNumber::GetValue(aRight); + goto CommonNumber; + } + return FALSE; + + case TypeIds_Number: + switch (rightType) + { + case TypeIds_Integer: + dblLeft = JavascriptNumber::GetValue(aLeft); + dblRight = TaggedInt::ToDouble(aRight); + goto CommonNumber; + case TypeIds_Int64Number: + dblLeft = JavascriptNumber::GetValue(aLeft); + dblRight = (double)VarTo(aRight)->GetValue(); + goto CommonNumber; + case TypeIds_UInt64Number: + dblLeft = JavascriptNumber::GetValue(aLeft); + dblRight = (double)UnsafeVarTo(aRight)->GetValue(); + goto CommonNumber; + case TypeIds_Number: + dblLeft = JavascriptNumber::GetValue(aLeft); + dblRight = JavascriptNumber::GetValue(aRight); + CommonNumber: + return FEqualDbl(dblLeft, dblRight); + } + return FALSE; + } + + Assert(0 && "Unreachable Code"); + return FALSE; + } + + BOOL JavascriptOperators::StrictEqual(Var aLeft, Var aRight, ScriptContext* requestContext) + { + JIT_HELPER_REENTRANT_HEADER(Op_StrictEqual); + TypeId rightType, leftType; + leftType = JavascriptOperators::GetTypeId(aLeft); + + // Because NaN !== NaN, we may not return TRUE when typeId is Number + if (aLeft == aRight && leftType != TypeIds_Number) return TRUE; + + rightType = JavascriptOperators::GetTypeId(aRight); + + if (leftType == TypeIds_String) + { + if (rightType == TypeIds_String) + { + return JavascriptString::Equals(UnsafeVarTo(aLeft), UnsafeVarTo(aRight)); + } + return FALSE; + } + else if (leftType >= TypeIds_Integer && leftType <= TypeIds_UInt64Number) + { + return JavascriptOperators::StrictEqualNumberType(aLeft, aRight, leftType, rightType, requestContext); + } + else if (leftType == TypeIds_GlobalObject) + { + BOOL result; + if (UnsafeVarTo(aLeft)->StrictEquals(aRight, &result, requestContext)) + { + return result; + } + return false; + } + else if (leftType == TypeIds_BigInt) + { + if (rightType == TypeIds_BigInt) + { + return JavascriptBigInt::Equals(aLeft, aRight); + } + return FALSE; + } + + return aLeft == aRight; + JIT_HELPER_END(Op_StrictEqual); + } + #else BOOL JavascriptOperators::StrictEqual(Var aLeft, Var aRight, ScriptContext* requestContext) { JIT_HELPER_REENTRANT_HEADER(Op_StrictEqual); @@ -839,7 +990,7 @@ using namespace Js; switch (rightType) { case TypeIds_String: - return JavascriptString::Equals(JavascriptString::UnsafeFromVar(aLeft), JavascriptString::UnsafeFromVar(aRight)); + return JavascriptString::Equals(UnsafeVarTo(aLeft), UnsafeVarTo(aRight)); } return FALSE; case TypeIds_Integer: @@ -860,18 +1011,18 @@ using namespace Js; { case TypeIds_Int64Number: { - __int64 leftValue = JavascriptInt64Number::UnsafeFromVar(aLeft)->GetValue(); - __int64 rightValue = JavascriptInt64Number::UnsafeFromVar(aRight)->GetValue(); + __int64 leftValue = UnsafeVarTo(aLeft)->GetValue(); + __int64 rightValue = UnsafeVarTo(aRight)->GetValue(); return leftValue == rightValue; } case TypeIds_UInt64Number: { - __int64 leftValue = JavascriptInt64Number::UnsafeFromVar(aLeft)->GetValue(); - unsigned __int64 rightValue = JavascriptInt64Number::FromVar(aRight)->GetValue(); + __int64 leftValue = UnsafeVarTo(aLeft)->GetValue(); + unsigned __int64 rightValue = VarTo(aRight)->GetValue(); return ((unsigned __int64)leftValue == rightValue); } case TypeIds_Number: - dblLeft = (double)JavascriptInt64Number::UnsafeFromVar(aLeft)->GetValue(); + dblLeft = (double)UnsafeVarTo(aLeft)->GetValue(); dblRight = JavascriptNumber::GetValue(aRight); goto CommonNumber; } @@ -881,18 +1032,18 @@ using namespace Js; { case TypeIds_Int64Number: { - unsigned __int64 leftValue = JavascriptUInt64Number::UnsafeFromVar(aLeft)->GetValue(); - __int64 rightValue = JavascriptInt64Number::UnsafeFromVar(aRight)->GetValue(); + unsigned __int64 leftValue = UnsafeVarTo(aLeft)->GetValue(); + __int64 rightValue = UnsafeVarTo(aRight)->GetValue(); return (leftValue == (unsigned __int64)rightValue); } case TypeIds_UInt64Number: { - unsigned __int64 leftValue = JavascriptUInt64Number::UnsafeFromVar(aLeft)->GetValue(); - unsigned __int64 rightValue = JavascriptInt64Number::FromVar(aRight)->GetValue(); + unsigned __int64 leftValue = UnsafeVarTo(aLeft)->GetValue(); + unsigned __int64 rightValue = VarTo(aRight)->GetValue(); return leftValue == rightValue; } case TypeIds_Number: - dblLeft = (double)JavascriptUInt64Number::UnsafeFromVar(aLeft)->GetValue(); + dblLeft = (double)UnsafeVarTo(aLeft)->GetValue(); dblRight = JavascriptNumber::GetValue(aRight); goto CommonNumber; } @@ -907,11 +1058,11 @@ using namespace Js; goto CommonNumber; case TypeIds_Int64Number: dblLeft = JavascriptNumber::GetValue(aLeft); - dblRight = (double)JavascriptInt64Number::FromVar(aRight)->GetValue(); + dblRight = (double)VarTo(aRight)->GetValue(); goto CommonNumber; case TypeIds_UInt64Number: dblLeft = JavascriptNumber::GetValue(aLeft); - dblRight = (double)JavascriptUInt64Number::UnsafeFromVar(aRight)->GetValue(); + dblRight = (double)UnsafeVarTo(aRight)->GetValue(); goto CommonNumber; case TypeIds_Number: dblLeft = JavascriptNumber::GetValue(aLeft); @@ -920,6 +1071,14 @@ using namespace Js; return FEqualDbl(dblLeft, dblRight); } return FALSE; + + case TypeIds_BigInt: + switch (rightType) + { + case TypeIds_BigInt: + return JavascriptBigInt::Equals(aLeft, aRight); + } + return FALSE; case TypeIds_Boolean: switch (rightType) { @@ -940,8 +1099,8 @@ using namespace Js; case TypeIds_Symbol: if (rightType == TypeIds_Symbol) { - const PropertyRecord* leftValue = JavascriptSymbol::UnsafeFromVar(aLeft)->GetValue(); - const PropertyRecord* rightValue = JavascriptSymbol::UnsafeFromVar(aRight)->GetValue(); + const PropertyRecord* leftValue = UnsafeVarTo(aLeft)->GetValue(); + const PropertyRecord* rightValue = UnsafeVarTo(aRight)->GetValue(); Assert(leftValue != rightValue); } break; @@ -954,7 +1113,7 @@ using namespace Js; case TypeIds_GlobalObject: { BOOL result; - if(RecyclableObject::UnsafeFromVar(aLeft)->StrictEquals(aRight, &result, requestContext)) + if(UnsafeVarTo(aLeft)->StrictEquals(aRight, &result, requestContext)) { return result; } @@ -964,10 +1123,10 @@ using namespace Js; break; } - if (RecyclableObject::FromVar(aLeft)->IsExternal()) + if (VarTo(aLeft)->IsExternal()) { BOOL result; - if (RecyclableObject::FromVar(aLeft)->StrictEquals(aRight, &result, requestContext)) + if (VarTo(aLeft)->StrictEquals(aRight, &result, requestContext)) { if (result) { @@ -976,10 +1135,10 @@ using namespace Js; } } - if (!TaggedNumber::Is(aRight) && RecyclableObject::FromVar(aRight)->IsExternal()) + if (!TaggedNumber::Is(aRight) && VarTo(aRight)->IsExternal()) { BOOL result; - if (RecyclableObject::FromVar(aRight)->StrictEquals(aLeft, &result, requestContext)) + if (VarTo(aRight)->StrictEquals(aLeft, &result, requestContext)) { if (result) { @@ -991,6 +1150,7 @@ using namespace Js; return aLeft == aRight; JIT_HELPER_END(Op_StrictEqual); } +#endif BOOL JavascriptOperators::HasOwnProperty( Var instance, @@ -1002,9 +1162,9 @@ using namespace Js; { return FALSE; } - RecyclableObject* object = RecyclableObject::UnsafeFromVar(instance); + RecyclableObject* object = UnsafeVarTo(instance); - if (JavascriptProxy::Is(instance)) + if (VarIs(instance)) { PropertyDescriptor desc; return GetOwnPropertyDescriptor(object, propertyId, requestContext, &desc); @@ -1058,7 +1218,7 @@ using namespace Js; } else { - RecyclableObject* object = RecyclableObject::UnsafeFromVar(instance); + RecyclableObject* object = UnsafeVarTo(instance); result = object && object->GetAccessors(propertyId, getter, setter, requestContext); } return result; @@ -1066,7 +1226,8 @@ using namespace Js; JavascriptArray* JavascriptOperators::GetOwnPropertyNames(Var instance, ScriptContext *scriptContext) { - RecyclableObject *object = RecyclableObject::FromVar(ToObject(instance, scriptContext)); + RecyclableObject *object = ToObject(instance, scriptContext); + AssertOrFailFast(VarIsCorrectType(object)); // Consider moving this check into ToObject JavascriptProxy * proxy = JavascriptOperators::TryFromVar(instance); if (proxy) { @@ -1078,7 +1239,8 @@ using namespace Js; JavascriptArray* JavascriptOperators::GetOwnPropertySymbols(Var instance, ScriptContext *scriptContext) { - RecyclableObject *object = RecyclableObject::FromVar(ToObject(instance, scriptContext)); + RecyclableObject *object = ToObject(instance, scriptContext); + AssertOrFailFast(VarIsCorrectType(object)); CHAKRATEL_LANGSTATS_INC_BUILTINCOUNT(Object_Constructor_getOwnPropertySymbols); JavascriptProxy* proxy = JavascriptOperators::TryFromVar(instance); @@ -1092,7 +1254,8 @@ using namespace Js; JavascriptArray* JavascriptOperators::GetOwnPropertyKeys(Var instance, ScriptContext* scriptContext) { - RecyclableObject *object = RecyclableObject::FromVar(ToObject(instance, scriptContext)); + RecyclableObject *object = ToObject(instance, scriptContext); + AssertOrFailFast(VarIsCorrectType(object)); JavascriptProxy* proxy = JavascriptOperators::TryFromVar(instance); if (proxy) @@ -1120,7 +1283,7 @@ using namespace Js; { element = proxyResult->DirectGetItem(i); - Assert(!JavascriptSymbol::Is(element)); + Assert(!VarIs(element)); PropertyDescriptor propertyDescriptor; JavascriptConversion::ToPropertyKey(element, scriptContext, &propertyRecord, nullptr); @@ -1134,6 +1297,7 @@ using namespace Js; } return proxyResultToReturn; } + return JavascriptObject::CreateOwnEnumerableStringPropertiesHelper(object, scriptContext); } @@ -1144,6 +1308,7 @@ using namespace Js; { return proxy->PropertyKeysTrap(JavascriptProxy::KeysTrapKind::KeysKind, scriptContext); } + return JavascriptObject::CreateOwnEnumerableStringSymbolPropertiesHelper(object, scriptContext); } @@ -1156,7 +1321,7 @@ using namespace Js; } else { - RecyclableObject* object = RecyclableObject::FromVar(instance); + RecyclableObject* object = VarTo(instance); result = object && object->GetProperty(object, propertyId, value, propertyValueInfo, requestContext); if (propertyValueInfo && result) @@ -1184,7 +1349,7 @@ using namespace Js; Assert(scriptContext); Assert(propertyDescriptor); - if (JavascriptProxy::Is(obj)) + if (VarIs(obj)) { return JavascriptProxy::GetOwnPropertyDescriptor(obj, propertyId, scriptContext, propertyDescriptor); } @@ -1319,8 +1484,10 @@ using namespace Js; bool JavascriptOperators::IsConstructor(_In_ Var instanceVar) { + JIT_HELPER_NOT_REENTRANT_NOLOCK_HEADER(Op_IsConstructor); RecyclableObject* instanceObj = TryFromVar(instanceVar); return instanceObj && IsConstructor(instanceObj); + JIT_HELPER_END(Op_IsConstructor); } BOOL JavascriptOperators::IsConcatSpreadable(Var instanceVar) @@ -1332,7 +1499,7 @@ using namespace Js; return false; } - RecyclableObject* instance = RecyclableObject::UnsafeFromVar(instanceVar); + RecyclableObject* instance = UnsafeVarTo(instanceVar); ScriptContext* scriptContext = instance->GetScriptContext(); if (!PHASE_OFF1(IsConcatSpreadableCachePhase)) @@ -1399,23 +1566,23 @@ using namespace Js; #endif #ifdef ENABLE_JS_BUILTINS - scriptContext->GetLibrary()->EnsureBuiltInEngineIsReady(); + scriptContext->GetLibrary()->EnsureArrayBuiltInsAreReady(); #endif RecyclableObject* function = GetIteratorFunction(aRight, scriptContext); JavascriptMethod method = function->GetEntryPoint(); - if (((JavascriptArray::Is(aRight) && + if (((JavascriptArray::IsNonES5Array(aRight) && ( JavascriptLibrary::IsDefaultArrayValuesFunction(function, scriptContext) // Verify that the head segment of the array covers all elements with no gaps. // Accessing an element on the prototype could have side-effects that would invalidate the optimization. - && JavascriptArray::UnsafeFromVar(aRight)->GetHead()->next == nullptr - && JavascriptArray::UnsafeFromVar(aRight)->GetHead()->left == 0 - && JavascriptArray::UnsafeFromVar(aRight)->GetHead()->length == JavascriptArray::FromVar(aRight)->GetLength() - && JavascriptArray::UnsafeFromVar(aRight)->HasNoMissingValues() - && !JavascriptArray::UnsafeFromVar(aRight)->IsCrossSiteObject() + && UnsafeVarTo(aRight)->GetHead()->next == nullptr + && UnsafeVarTo(aRight)->GetHead()->left == 0 + && UnsafeVarTo(aRight)->GetHead()->length == VarTo(aRight)->GetLength() + && UnsafeVarTo(aRight)->HasNoMissingValues() + && !UnsafeVarTo(aRight)->IsCrossSiteObject() )) || - (TypedArrayBase::Is(aRight) && method == TypedArrayBase::EntryInfo::Values.GetOriginalEntryPoint())) + (VarIs(aRight) && method == TypedArrayBase::EntryInfo::Values.GetOriginalEntryPoint())) // We can't optimize away the iterator if the array iterator prototype is user defined. && !JavascriptLibrary::ArrayIteratorPrototypeHasUserDefinedNext(scriptContext)) { @@ -1451,13 +1618,13 @@ using namespace Js; BOOL JavascriptOperators::IsPropertyUnscopable(Var instanceVar, PropertyId propertyId) { - RecyclableObject* instance = RecyclableObject::FromVar(instanceVar); + RecyclableObject* instance = VarTo(instanceVar); ScriptContext * scriptContext = instance->GetScriptContext(); Var unscopables = JavascriptOperators::GetProperty(instance, PropertyIds::_symbolUnscopables, scriptContext); if (JavascriptOperators::IsObject(unscopables)) { - DynamicObject *unscopablesList = DynamicObject::FromVar(unscopables); + DynamicObject *unscopablesList = VarTo(unscopables); Var value = nullptr; //8.1.1.2.1.9.c If blocked is not undefined if (JavascriptOperators::GetProperty(unscopablesList, propertyId, &value, scriptContext)) @@ -1492,7 +1659,7 @@ using namespace Js; BOOL JavascriptOperators::HasRootProperty(RecyclableObject* instance, PropertyId propertyId) { - Assert(RootObjectBase::Is(instance)); + Assert(VarIs(instance)); RootObjectBase* rootObject = static_cast(instance); if (rootObject->HasRootProperty(propertyId)) @@ -1537,18 +1704,18 @@ using namespace Js; JIT_HELPER_REENTRANT_HEADER(Op_HasProperty); RecyclableObject* object = TaggedNumber::Is(instance) ? scriptContext->GetLibrary()->GetNumberPrototype() : - RecyclableObject::FromVar(instance); + VarTo(instance); BOOL result = HasProperty(object, propertyId); return result; JIT_HELPER_END(Op_HasProperty); } - BOOL JavascriptOperators::OP_HasOwnProperty(Var instance, PropertyId propertyId, ScriptContext* scriptContext) + BOOL JavascriptOperators::OP_HasOwnProperty(Var instance, PropertyId propertyId, ScriptContext* scriptContext, _In_opt_ PropertyString * propString) { RecyclableObject* object = TaggedNumber::Is(instance) ? scriptContext->GetLibrary()->GetNumberPrototype() : - RecyclableObject::FromVar(instance); - BOOL result = HasOwnProperty(object, propertyId, scriptContext, nullptr); + VarTo(instance); + BOOL result = HasOwnProperty(object, propertyId, scriptContext, propString); return result; } @@ -1557,7 +1724,7 @@ using namespace Js; { AssertMsg(!TaggedNumber::Is(instance), "HasOwnPropertyNoHostObject int passed"); - RecyclableObject* object = RecyclableObject::FromVar(instance); + RecyclableObject* object = VarTo(instance); return object && object->HasOwnPropertyNoHostObject(propertyId); } @@ -1567,13 +1734,13 @@ using namespace Js; { AssertMsg(!TaggedNumber::Is(instance), "HasOwnPropertyNoHostObjectForHeapEnum int passed"); - RecyclableObject * object = RecyclableObject::FromVar(instance); + RecyclableObject * object = VarTo(instance); if (StaticType::Is(object->GetTypeId())) { return FALSE; } getter = setter = NULL; - DynamicObject* dynamicObject = DynamicObject::FromVar(instance); + DynamicObject* dynamicObject = VarTo(instance); Assert(dynamicObject->GetScriptContext()->IsHeapEnumInProgress()); if (dynamicObject->UseDynamicObjectForNoHostObjectAccess()) { @@ -1581,7 +1748,7 @@ using namespace Js; { Var value = nullptr; if (!JavascriptConversion::PropertyQueryFlagsToBoolean(dynamicObject->DynamicObject::GetPropertyQuery(instance, propertyId, &value, NULL, requestContext)) || - (requestContext->IsUndeclBlockVar(value) && (ActivationObject::Is(instance) || RootObjectBase::Is(instance)))) + (requestContext->IsUndeclBlockVar(value) && (VarIs(instance) || VarIs(instance)))) { return FALSE; } @@ -1593,7 +1760,7 @@ using namespace Js; { Var value = nullptr; if (!object->GetProperty(instance, propertyId, &value, NULL, requestContext) || - (requestContext->IsUndeclBlockVar(value) && (ActivationObject::Is(instance) || RootObjectBase::Is(instance)))) + (requestContext->IsUndeclBlockVar(value) && (VarIs(instance) || VarIs(instance)))) { return FALSE; } @@ -1606,7 +1773,7 @@ using namespace Js; { AssertMsg(!TaggedNumber::Is(instance), "GetDataPropertyNoHostObject int passed"); Assert(HasOwnPropertyNoHostObjectForHeapEnum(instance, propertyId, requestContext, getter, setter) || getter || setter); - DynamicObject* dynamicObject = DynamicObject::FromVar(instance); + DynamicObject* dynamicObject = VarTo(instance); getter = setter = NULL; if (NULL == dynamicObject) { @@ -1639,10 +1806,10 @@ using namespace Js; BOOL JavascriptOperators::OP_HasOwnPropScoped(Var scope, PropertyId propertyId, Var defaultInstance, ScriptContext* scriptContext) { - AssertMsg(scope == scriptContext->GetLibrary()->GetNull() || JavascriptArray::Is(scope), + AssertMsg(scope == scriptContext->GetLibrary()->GetNull() || JavascriptArray::IsNonES5Array(scope), "Invalid scope chain pointer passed - should be null or an array"); - JavascriptArray* arrScope = JavascriptOperators::TryFromVar(scope); + JavascriptArray* arrScope = JavascriptArray::TryVarToNonES5Array(scope); if (arrScope) { Var instance = arrScope->DirectGetItem(0); @@ -1663,7 +1830,7 @@ using namespace Js; BOOL JavascriptOperators::GetRootProperty(Var instance, PropertyId propertyId, Var* value, ScriptContext* requestContext, PropertyValueInfo* info) { - return GetProperty_Internal(instance, RecyclableObject::FromVar(instance), true, propertyId, value, requestContext, info); + return GetProperty_Internal(instance, VarTo(instance), true, propertyId, value, requestContext, info); } BOOL JavascriptOperators::GetProperty_InternalSimple(Var instance, RecyclableObject* object, PropertyId propertyId, _Outptr_result_maybenull_ Var* value, ScriptContext* requestContext) @@ -1707,7 +1874,7 @@ using namespace Js; BOOL foundProperty = FALSE; if (isRoot) { - Assert(RootObjectBase::Is(object)); + Assert(VarIs(object)); RootObjectBase* rootObject = static_cast(object); foundProperty = rootObject->GetRootProperty(instance, propertyId, value, info, requestContext); @@ -1740,7 +1907,7 @@ using namespace Js; if (foundProperty) { #if ENABLE_FIXED_FIELDS && DBG - if (DynamicObject::Is(object)) + if (DynamicObject::IsBaseDynamicObject(object)) { DynamicObject* dynamicObject = (DynamicObject*)object; DynamicTypeHandler* dynamicTypeHandler = dynamicObject->GetDynamicType()->GetTypeHandler(); @@ -1748,10 +1915,10 @@ using namespace Js; if (dynamicTypeHandler->CheckFixedProperty(requestContext->GetPropertyName(propertyId), &property, requestContext)) { bool skipAssert = false; - if (value != nullptr && Js::RecyclableObject::Is(property)) + if (value != nullptr && Js::VarIs(property)) { - Js::RecyclableObject* pObject = Js::RecyclableObject::FromVar(property); - Js::RecyclableObject* pValue = Js::RecyclableObject::FromVar(*value); + Js::RecyclableObject* pObject = Js::VarTo(property); + Js::RecyclableObject* pValue = Js::VarTo(*value); if (pValue->GetScriptContext() != pObject->GetScriptContext()) { @@ -1766,7 +1933,7 @@ using namespace Js; // Don't cache the information if the value is undecl block var // REVIEW: We might want to only check this if we need to (For LdRootFld or ScopedLdFld) // Also we might want to throw here instead of checking it again in the caller - if (value && !requestContext->IsUndeclBlockVar(*value) && !UnscopablesWrapperObject::Is(object)) + if (value && !requestContext->IsUndeclBlockVar(*value) && !VarIs(object)) { CacheOperators::CachePropertyRead(propertyObject, object, isRoot, propertyId, false, info, requestContext); } @@ -1814,14 +1981,20 @@ using namespace Js; void JavascriptOperators::TryCacheMissingProperty(Var instance, Var cacheInstance, bool isRoot, PropertyId propertyId, ScriptContext* requestContext, _Inout_ PropertyValueInfo * info) { // Here, any well-behaved subclasses of DynamicObject can opt in to getting included in the missing property cache. - // For now, we only include basic objects and arrays. CustomExternalObject in particular is problematic because in - // some cases it can add new properties without transitioning its type handler. - if (PHASE_OFF1(MissingPropertyCachePhase) || isRoot || !(DynamicObject::Is(instance) || DynamicObject::IsAnyArray(instance))) + // For now, we only include basic objects and arrays. + if (PHASE_OFF1(MissingPropertyCachePhase) || isRoot || !(DynamicObject::IsBaseDynamicObject(instance) || DynamicObject::IsAnyArray(instance))) + { + return; + } + + // CustomExternalObject in particular is problematic because in some cases it can report missing when implicit callsare disabled. + // See CustomExternalObject::GetPropertyQuery for an example. + if (UnsafeVarTo(instance)->GetType()->IsJsrtExternal() && requestContext->GetThreadContext()->IsDisableImplicitCall()) { return; } - DynamicTypeHandler* handler = DynamicObject::UnsafeFromVar(instance)->GetDynamicType()->GetTypeHandler(); + DynamicTypeHandler* handler = UnsafeVarTo(instance)->GetDynamicType()->GetTypeHandler(); // Only cache missing property lookups for non-root field loads on objects that have PathTypeHandlers, because only these types have the right behavior // when the missing property is later added. DictionaryTypeHandler's introduce the possibility that a stale TypePropertyCache entry with isMissing==true can @@ -1879,7 +2052,7 @@ using namespace Js; if (result != PropertyQueryFlags::Property_NotFound) { - if (!UnscopablesWrapperObject::Is(object) && info->GetPropertyRecordUsageCache()) + if (!VarIs(object) && info->GetPropertyRecordUsageCache()) { PropertyId propertyId = info->GetPropertyRecordUsageCache()->GetPropertyRecord()->GetPropertyId(); CacheOperators::CachePropertyRead(instance, object, false, propertyId, false, info, requestContext); @@ -1955,7 +2128,7 @@ using namespace Js; *propertyObject = scriptContext->GetLibrary()->GetNumberPrototype(); return TRUE; } - RecyclableObject* object = RecyclableObject::UnsafeFromVar(instance); + RecyclableObject* object = UnsafeVarTo(instance); *propertyObject = object; if (JavascriptOperators::IsUndefinedOrNull(object)) { @@ -1996,10 +2169,10 @@ using namespace Js; Var JavascriptOperators::OP_GetRootProperty(Var instance, PropertyId propertyId, PropertyValueInfo * info, ScriptContext* scriptContext) { - AssertMsg(RootObjectBase::Is(instance), "Root must be an object!"); + AssertMsg(VarIs(instance), "Root must be an object!"); Var value = nullptr; - if (JavascriptOperators::GetRootProperty(RecyclableObject::FromVar(instance), propertyId, &value, scriptContext, info)) + if (JavascriptOperators::GetRootProperty(VarTo(instance), propertyId, &value, scriptContext, info)) { if (scriptContext->IsUndeclBlockVar(value) && scriptContext->GetThreadContext()->RecordImplicitException()) { @@ -2037,7 +2210,7 @@ using namespace Js; for (int i = 0; i < length; i += 1) { Var value = nullptr; - RecyclableObject *obj = RecyclableObject::FromVar(pScope->GetItem(i)); + RecyclableObject *obj = VarTo(pScope->GetItem(i)); if (JavascriptOperators::GetProperty(obj, Js::PropertyIds::_this, &value, scriptContext)) { return value; @@ -2050,7 +2223,7 @@ using namespace Js; Var JavascriptOperators::OP_UnwrapWithObj(Var aValue) { JIT_HELPER_NOT_REENTRANT_NOLOCK_HEADER(Op_UnwrapWithObj); - return RecyclableObject::FromVar(aValue)->GetThisObjectOrUnWrap(); + return VarTo(aValue)->GetWrappedObject(); JIT_HELPER_END(Op_UnwrapWithObj); } Var JavascriptOperators::OP_GetInstanceScoped(FrameDisplay *pScope, PropertyId propertyId, Var rootObject, Var* thisVar, ScriptContext* scriptContext) @@ -2066,7 +2239,6 @@ using namespace Js; { RecyclableObject *obj = (RecyclableObject*)pScope->GetItem(i); - if (JavascriptOperators::HasProperty(obj, propertyId)) { // HasProperty will call UnscopablesWrapperObject's HasProperty which will do the filtering @@ -2165,7 +2337,7 @@ using namespace Js; if (isRoot) { - foundProperty = RootObjectBase::FromVar(object)->GetRootPropertyReference(instance, propertyId, value, info, requestContext); + foundProperty = VarTo(object)->GetRootPropertyReference(instance, propertyId, value, info, requestContext); } if (!foundProperty) { @@ -2193,7 +2365,7 @@ using namespace Js; } #if ENABLE_FIXED_FIELDS && DBG - if (DynamicObject::Is(object)) + if (DynamicObject::IsBaseDynamicObject(object)) { DynamicObject* dynamicObject = (DynamicObject*)object; DynamicTypeHandler* dynamicTypeHandler = dynamicObject->GetDynamicType()->GetTypeHandler(); @@ -2319,12 +2491,15 @@ using namespace Js; } if (setterValueOrProxy) { - if (!UnscopablesWrapperObject::Is(receiver) && info->GetPropertyRecordUsageCache() && !JavascriptOperators::IsUndefinedAccessor(setterValueOrProxy, requestContext)) + if (VarIs(receiver)) { - CacheOperators::CachePropertyWrite(RecyclableObject::FromVar(receiver), false, object->GetType(), info->GetPropertyRecordUsageCache()->GetPropertyRecord()->GetPropertyId(), info, requestContext); + receiver = (UnsafeVarTo(receiver))->GetWrappedObject(); } - receiver = (RecyclableObject::FromVar(receiver))->GetThisObjectOrUnWrap(); - RecyclableObject* func = RecyclableObject::FromVar(setterValueOrProxy); + else if (info->GetPropertyRecordUsageCache() && !JavascriptOperators::IsUndefinedAccessor(setterValueOrProxy, requestContext)) + { + CacheOperators::CachePropertyWrite(VarTo(receiver), false, object->GetType(), info->GetPropertyRecordUsageCache()->GetPropertyRecord()->GetPropertyId(), info, requestContext); + } + RecyclableObject* func = VarTo(setterValueOrProxy); JavascriptOperators::CallSetter(func, receiver, newValue, requestContext); } @@ -2332,8 +2507,8 @@ using namespace Js; } else if ((flags & Proxy) == Proxy) { - Assert(JavascriptProxy::Is(setterValueOrProxy)); - JavascriptProxy* proxy = JavascriptProxy::FromVar(setterValueOrProxy); + Assert(VarIs(setterValueOrProxy)); + JavascriptProxy* proxy = VarTo(setterValueOrProxy); auto fn = [&](RecyclableObject* target) -> BOOL { return JavascriptOperators::SetPropertyWPCache(receiver, target, propertyKey, newValue, requestContext, propertyOperationFlags, info); }; @@ -2359,7 +2534,7 @@ using namespace Js; return FALSE; } - RecyclableObject* receiverObject = RecyclableObject::FromVar(receiver); + RecyclableObject* receiverObject = VarTo(receiver); if (receiver != object) { // If the receiver object has the property and it is an accessor then return false @@ -2375,9 +2550,9 @@ using namespace Js; // in 9.1.9, step 5, we should return false if receiver is not object, and that will happen in default RecyclableObject operation anyhow. if (receiverObject->SetProperty(propertyKey, newValue, propertyOperationFlags, info)) { - if (!JavascriptProxy::Is(receiver) && info->GetPropertyRecordUsageCache() && info->GetFlags() != InlineCacheSetterFlag && !object->IsExternal()) + if (!VarIs(receiver) && info->GetPropertyRecordUsageCache() && info->GetFlags() != InlineCacheSetterFlag && !object->IsExternal()) { - CacheOperators::CachePropertyWrite(RecyclableObject::FromVar(receiver), false, typeWithoutProperty, info->GetPropertyRecordUsageCache()->GetPropertyRecord()->GetPropertyId(), info, requestContext); + CacheOperators::CachePropertyWrite(VarTo(receiver), false, typeWithoutProperty, info->GetPropertyRecordUsageCache()->GetPropertyRecord()->GetPropertyId(), info, requestContext); if (info->GetInstance() == receiverObject) { @@ -2415,15 +2590,15 @@ using namespace Js; } if (setterValueOrProxy) { - RecyclableObject* func = RecyclableObject::FromVar(setterValueOrProxy); + RecyclableObject* func = VarTo(setterValueOrProxy); JavascriptOperators::CallSetter(func, receiver, newValue, requestContext); return TRUE; } } else if ((flags & Proxy) == Proxy) { - Assert(JavascriptProxy::Is(setterValueOrProxy)); - JavascriptProxy* proxy = JavascriptProxy::FromVar(setterValueOrProxy); + Assert(VarIs(setterValueOrProxy)); + JavascriptProxy* proxy = VarTo(setterValueOrProxy); const PropertyRecord* propertyRecord = nullptr; proxy->PropertyIdFromInt(index, &propertyRecord); return proxy->SetPropertyTrap(receiver, JavascriptProxy::SetPropertyTrapKind::SetItemOnTaggedNumberKind, propertyRecord->GetPropertyId(), newValue, requestContext, propertyOperationFlags); @@ -2464,7 +2639,7 @@ using namespace Js; } if (setterValueOrProxy) { - RecyclableObject* func = RecyclableObject::FromVar(setterValueOrProxy); + RecyclableObject* func = VarTo(setterValueOrProxy); Assert(info.GetFlags() == InlineCacheSetterFlag || info.GetPropertyIndex() == Constants::NoSlot); JavascriptOperators::CallSetter(func, receiver, newValue, requestContext); return TRUE; @@ -2472,8 +2647,8 @@ using namespace Js; } else if ((flags & Proxy) == Proxy) { - Assert(JavascriptProxy::Is(setterValueOrProxy)); - JavascriptProxy* proxy = JavascriptProxy::FromVar(setterValueOrProxy); + Assert(VarIs(setterValueOrProxy)); + JavascriptProxy* proxy = VarTo(setterValueOrProxy); return proxy->SetPropertyTrap(receiver, JavascriptProxy::SetPropertyTrapKind::SetPropertyOnTaggedNumberKind, propertyId, newValue, requestContext, propertyOperationFlags); } else @@ -2521,29 +2696,39 @@ using namespace Js; *result = FALSE; Var setterValueOrProxy = nullptr; DescriptorFlags flags = None; + bool receiverNonWritable = false; + + if (receiver != object && !isRoot) + { + Var receiverSetter = nullptr; + PropertyValueInfo receiverInfo; + DescriptorFlags receiverFlags = VarTo(receiver)->GetSetter(propertyId, &receiverSetter, &receiverInfo, requestContext); + receiverNonWritable = ((receiverFlags & Data) == Data && (receiverFlags & Writable) == None); + } + if ((isRoot && JavascriptOperators::CheckPrototypesForAccessorOrNonWritableRootProperty(object, propertyId, &setterValueOrProxy, &flags, info, requestContext)) || - (!isRoot && JavascriptOperators::CheckPrototypesForAccessorOrNonWritableProperty(object, propertyId, &setterValueOrProxy, &flags, info, requestContext))) + (!isRoot && (JavascriptOperators::CheckPrototypesForAccessorOrNonWritableProperty(object, propertyId, &setterValueOrProxy, &flags, info, requestContext) || + receiverNonWritable))) { if ((flags & Accessor) == Accessor) { - if (JavascriptError::ThrowIfStrictModeUndefinedSetter(propertyOperationFlags, setterValueOrProxy, requestContext) || - JavascriptError::ThrowIfNotExtensibleUndefinedSetter(propertyOperationFlags, setterValueOrProxy, requestContext)) + if (JavascriptError::ThrowIfUndefinedSetter(propertyOperationFlags, setterValueOrProxy, requestContext, propertyId)) { *result = TRUE; return true; } if (setterValueOrProxy) { - RecyclableObject* func = RecyclableObject::FromVar(setterValueOrProxy); + RecyclableObject* func = VarTo(setterValueOrProxy); Assert(!info || info->GetFlags() == InlineCacheSetterFlag || info->GetPropertyIndex() == Constants::NoSlot); - if (UnscopablesWrapperObject::Is(receiver)) + if (VarIs(receiver)) { - receiver = (RecyclableObject::FromVar(receiver))->GetThisObjectOrUnWrap(); + receiver = (UnsafeVarTo(receiver))->GetWrappedObject(); } else if (!JavascriptOperators::IsUndefinedAccessor(setterValueOrProxy, requestContext)) { - CacheOperators::CachePropertyWrite(RecyclableObject::FromVar(receiver), isRoot, object->GetType(), propertyId, info, requestContext); + CacheOperators::CachePropertyWrite(VarTo(receiver), isRoot, object->GetType(), propertyId, info, requestContext); } #ifdef ENABLE_MUTATION_BREAKPOINT if (MutationBreakpoint::IsFeatureEnabled(requestContext)) @@ -2558,8 +2743,8 @@ using namespace Js; } else if ((flags & Proxy) == Proxy) { - Assert(JavascriptProxy::Is(setterValueOrProxy)); - JavascriptProxy* proxy = JavascriptProxy::FromVar(setterValueOrProxy); + Assert(VarIs(setterValueOrProxy)); + JavascriptProxy* proxy = VarTo(setterValueOrProxy); // We can't cache the property at this time. both target and handler can be changed outside of the proxy, so the inline cache needs to be // invalidate when target, handler, or handler prototype has changed. We don't have a way to achieve this yet. PropertyValueInfo::SetNoCache(info, proxy); @@ -2570,7 +2755,7 @@ using namespace Js; } else { - Assert((flags & Data) == Data && (flags & Writable) == None); + Assert(((flags & Data) == Data && (flags & Writable) == None) || receiverNonWritable); if (!allowUndecInConsoleScope) { if (flags & Const) @@ -2629,7 +2814,7 @@ using namespace Js; } else { - RecyclableObject* instanceObject = RecyclableObject::FromVar(receiver); + RecyclableObject* instanceObject = VarTo(receiver); while (!JavascriptOperators::IsNull(instanceObject)) { if (unscopables && JavascriptOperators::IsPropertyUnscopable(instanceObject, propertyId)) @@ -2657,9 +2842,9 @@ using namespace Js; if (updateCache) { - if (!JavascriptProxy::Is(receiver)) + if (!VarIs(receiver)) { - CacheOperators::CachePropertyWrite(RecyclableObject::FromVar(receiver), isRoot, typeWithoutProperty, propertyId, info, requestContext); + CacheOperators::CachePropertyWrite(VarTo(receiver), isRoot, typeWithoutProperty, propertyId, info, requestContext); } } return TRUE; @@ -2684,7 +2869,7 @@ using namespace Js; { return FALSE; } - RecyclableObject* object = RecyclableObject::FromVar(instance); + RecyclableObject* object = VarTo(instance); Var member = nullptr; // If the item is found in the array own body, then it is a number @@ -2741,18 +2926,10 @@ using namespace Js; } return TRUE; } - else if (typeId == TypeIds_VariantDate) - { - if (scriptContext->GetThreadContext()->RecordImplicitException()) - { - JavascriptError::ThrowTypeError(scriptContext, JSERR_Property_VarDate, scriptContext->GetPropertyName(propertyId)->GetBuffer()); - } - return TRUE; - } if (!TaggedNumber::Is(instance) && !TaggedNumber::Is(thisInstance)) { - return JavascriptOperators::SetProperty(RecyclableObject::UnsafeFromVar(thisInstance), RecyclableObject::UnsafeFromVar(instance), propertyId, newValue, info, scriptContext, flags); + return JavascriptOperators::SetProperty(UnsafeVarTo(thisInstance), UnsafeVarTo(instance), propertyId, newValue, info, scriptContext, flags); } JavascriptError::ThrowCantAssignIfStrictMode(flags, scriptContext); @@ -2761,7 +2938,7 @@ using namespace Js; BOOL JavascriptOperators::OP_StFunctionExpression(Var obj, PropertyId propertyId, Var newValue) { - RecyclableObject* instance = RecyclableObject::FromVar(obj); + RecyclableObject* instance = VarTo(obj); JIT_HELPER_NOT_REENTRANT_HEADER(Op_StFunctionExpression, reentrancylock, instance->GetScriptContext()->GetThreadContext()); instance->SetProperty(propertyId, newValue, PropertyOperation_None, NULL); @@ -2775,7 +2952,7 @@ using namespace Js; BOOL JavascriptOperators::OP_InitClassMember(Var obj, PropertyId propertyId, Var newValue) { JIT_HELPER_REENTRANT_HEADER(Op_InitClassMember); - RecyclableObject* instance = RecyclableObject::FromVar(obj); + RecyclableObject* instance = VarTo(obj); PropertyOperationFlags flags = PropertyOperation_None; PropertyAttributes attributes = PropertyClassMemberDefaults; @@ -2789,12 +2966,12 @@ using namespace Js; BOOL JavascriptOperators::OP_InitLetProperty(Var obj, PropertyId propertyId, Var newValue) { JIT_HELPER_REENTRANT_HEADER(Op_InitLetFld); - RecyclableObject* instance = RecyclableObject::FromVar(obj); + RecyclableObject* instance = VarTo(obj); PropertyOperationFlags flags = instance->GetScriptContext()->IsUndeclBlockVar(newValue) ? PropertyOperation_SpecialValue : PropertyOperation_None; PropertyAttributes attributes = PropertyLetDefaults; - if (RootObjectBase::Is(instance)) + if (VarIs(instance)) { attributes |= PropertyLetConstGlobal; } @@ -2807,13 +2984,13 @@ using namespace Js; BOOL JavascriptOperators::OP_InitConstProperty(Var obj, PropertyId propertyId, Var newValue) { - RecyclableObject* instance = RecyclableObject::FromVar(obj); + RecyclableObject* instance = VarTo(obj); JIT_HELPER_REENTRANT_HEADER(Op_InitConstFld); PropertyOperationFlags flags = instance->GetScriptContext()->IsUndeclBlockVar(newValue) ? PropertyOperation_SpecialValue : PropertyOperation_None; PropertyAttributes attributes = PropertyConstDefaults; - if (RootObjectBase::Is(instance)) + if (VarIs(instance)) { attributes |= PropertyLetConstGlobal; } @@ -2826,7 +3003,7 @@ using namespace Js; BOOL JavascriptOperators::OP_InitUndeclRootLetProperty(Var obj, PropertyId propertyId) { - RecyclableObject* instance = RecyclableObject::FromVar(obj); + RecyclableObject* instance = VarTo(obj); JIT_HELPER_NOT_REENTRANT_HEADER(Op_InitUndeclRootLetFld, reentrancylock, instance->GetScriptContext()->GetThreadContext()); PropertyOperationFlags flags = static_cast(PropertyOperation_SpecialValue | PropertyOperation_AllowUndecl); @@ -2840,7 +3017,7 @@ using namespace Js; BOOL JavascriptOperators::OP_InitUndeclRootConstProperty(Var obj, PropertyId propertyId) { - RecyclableObject* instance = RecyclableObject::FromVar(obj); + RecyclableObject* instance = VarTo(obj); JIT_HELPER_NOT_REENTRANT_HEADER(Op_InitUndeclRootConstFld, reentrancylock, instance->GetScriptContext()->GetThreadContext()); PropertyOperationFlags flags = static_cast(PropertyOperation_SpecialValue | PropertyOperation_AllowUndecl); @@ -2855,8 +3032,8 @@ using namespace Js; BOOL JavascriptOperators::OP_InitUndeclConsoleLetProperty(Var obj, PropertyId propertyId) { FrameDisplay *pScope = (FrameDisplay*)obj; - AssertMsg(ConsoleScopeActivationObject::Is((DynamicObject*)pScope->GetItem(pScope->GetLength() - 1)), "How come we got this opcode without ConsoleScopeActivationObject?"); - RecyclableObject* instance = RecyclableObject::FromVar(pScope->GetItem(0)); + AssertMsg(VarIs((DynamicObject*)pScope->GetItem(pScope->GetLength() - 1)), "How come we got this opcode without ConsoleScopeActivationObject?"); + RecyclableObject* instance = VarTo(pScope->GetItem(0)); JIT_HELPER_NOT_REENTRANT_HEADER(Op_InitUndeclConsoleLetFld, reentrancylock, instance->GetScriptContext()->GetThreadContext()); PropertyOperationFlags flags = static_cast(PropertyOperation_SpecialValue | PropertyOperation_AllowUndecl); @@ -2869,8 +3046,8 @@ using namespace Js; BOOL JavascriptOperators::OP_InitUndeclConsoleConstProperty(Var obj, PropertyId propertyId) { FrameDisplay *pScope = (FrameDisplay*)obj; - AssertMsg(ConsoleScopeActivationObject::Is((DynamicObject*)pScope->GetItem(pScope->GetLength() - 1)), "How come we got this opcode without ConsoleScopeActivationObject?"); - RecyclableObject* instance = RecyclableObject::FromVar(pScope->GetItem(0)); + AssertMsg(VarIs((DynamicObject*)pScope->GetItem(pScope->GetLength() - 1)), "How come we got this opcode without ConsoleScopeActivationObject?"); + RecyclableObject* instance = VarTo(pScope->GetItem(0)); JIT_HELPER_NOT_REENTRANT_HEADER(Op_InitUndeclConsoleConstFld, reentrancylock, instance->GetScriptContext()->GetThreadContext()); PropertyOperationFlags flags = static_cast(PropertyOperation_SpecialValue | PropertyOperation_AllowUndecl); @@ -2888,7 +3065,7 @@ using namespace Js; BOOL JavascriptOperators::OP_InitProperty(Var instance, PropertyId propertyId, Var newValue) { if(TaggedNumber::Is(instance)) { return false; } - return JavascriptOperators::InitProperty(RecyclableObject::FromVar(instance), propertyId, newValue); + return JavascriptOperators::InitProperty(VarTo(instance), propertyId, newValue); } BOOL JavascriptOperators::DeleteProperty(RecyclableObject* instance, PropertyId propertyId, PropertyOperationFlags propertyOperationFlags) @@ -2960,7 +3137,7 @@ using namespace Js; return scriptContext->GetLibrary()->GetTrue(); } - RecyclableObject* recyclableObject = RecyclableObject::FromVar(instance); + RecyclableObject* recyclableObject = VarTo(instance); if (JavascriptOperators::IsUndefinedOrNull(recyclableObject)) { JavascriptError::ThrowTypeError(scriptContext, JSERR_Property_CannotDelete_NullOrUndefined, @@ -2976,7 +3153,7 @@ using namespace Js; { // In Edge the root is an External Object which can call Dispose and thus, can have reentrancy. JIT_HELPER_REENTRANT_HEADER(Op_DeleteRootProperty); - AssertMsg(RootObjectBase::Is(instance), "Root must be a global object!"); + AssertMsg(VarIs(instance), "Root must be a global object!"); RootObjectBase* rootObject = static_cast(instance); return scriptContext->GetLibrary()->CreateBoolean( @@ -3005,9 +3182,9 @@ using namespace Js; for (uint16 i = 0; i < length; i++) { - object = RecyclableObject::UnsafeFromVar(pDisplay->GetItem(i)); + object = UnsafeVarTo(pDisplay->GetItem(i)); - AssertMsg(!ConsoleScopeActivationObject::Is(object) || (i == length - 1), "Invalid location for ConsoleScopeActivationObject"); + AssertMsg(!VarIs(object) || (i == length - 1), "Invalid location for ConsoleScopeActivationObject"); Type* type = object->GetType(); if (CacheOperators::TrySetProperty( @@ -3061,7 +3238,7 @@ using namespace Js; CacheOperators::TraceCache(inlineCache, _u("PatchSetPropertyScoped"), propertyId, scriptContext, object); } #endif - if (!JavascriptProxy::Is(object) && !allowUndecInConsoleScope) + if (!VarIs(object) && !allowUndecInConsoleScope) { CacheOperators::CachePropertyWrite(object, false, type, propertyId, &info2, scriptContext); } @@ -3073,7 +3250,7 @@ using namespace Js; Assert(!isLexicalThisSlotSymbol); // If we have console scope and no one in the scope had the property add it to console scope - if ((length > 0) && ConsoleScopeActivationObject::Is(pDisplay->GetItem(length - 1))) + if ((length > 0) && VarIs(pDisplay->GetItem(length - 1))) { // CheckPrototypesForAccessorOrNonWritableProperty does not check for const in global object. We should check it here. if (length > 1) @@ -3101,7 +3278,7 @@ using namespace Js; } } - RecyclableObject* obj = RecyclableObject::FromVar((DynamicObject*)pDisplay->GetItem(length - 1)); + RecyclableObject* obj = VarTo(pDisplay->GetItem(length - 1)); OUTPUT_TRACE(Js::ConsoleScopePhase, _u("Adding property '%s' to console scope object\n"), scriptContext->GetPropertyName(propertyId)->GetBuffer()); JavascriptOperators::SetProperty(obj, obj, propertyId, newValue, scriptContext, propertyOperationFlags); return; @@ -3110,7 +3287,7 @@ using namespace Js; // No one in the scope stack has the property, so add it to the default instance provided by the caller. AssertMsg(!TaggedNumber::Is(defaultInstance), "Root object is an int or tagged float?"); Assert(defaultInstance != nullptr); - RecyclableObject* obj = RecyclableObject::FromVar(defaultInstance); + RecyclableObject* obj = VarTo(defaultInstance); { //SetPropertyScoped does not use inline cache for default instance PropertyValueInfo info2; @@ -3142,7 +3319,7 @@ using namespace Js; } AssertMsg(!TaggedNumber::Is(defaultInstance), "Root object is an int or tagged float?"); - return RecyclableObject::FromVar(defaultInstance)->InitFuncScoped(propertyId, newValue); + return VarTo(defaultInstance)->InitFuncScoped(propertyId, newValue); JIT_HELPER_END(Op_InitFuncScoped); } @@ -3162,7 +3339,7 @@ using namespace Js; } AssertMsg(!TaggedNumber::Is(defaultInstance), "Root object is an int or tagged float?"); - return RecyclableObject::FromVar(defaultInstance)->InitPropertyScoped(propertyId, newValue); + return VarTo(defaultInstance)->InitPropertyScoped(propertyId, newValue); } Var JavascriptOperators::OP_DeletePropertyScoped( @@ -3186,7 +3363,7 @@ using namespace Js; } } - return JavascriptOperators::OP_DeleteRootProperty(RecyclableObject::FromVar(defaultInstance), propertyId, scriptContext, propertyOperationFlags); + return JavascriptOperators::OP_DeleteRootProperty(VarTo(defaultInstance), propertyId, scriptContext, propertyOperationFlags); JIT_HELPER_END(Op_DeletePropertyScoped); } @@ -3205,7 +3382,7 @@ using namespace Js; } } - return JavascriptOperators::TypeofRootFld(RecyclableObject::FromVar(defaultInstance), propertyId, scriptContext); + return JavascriptOperators::TypeofRootFld(VarTo(defaultInstance), propertyId, scriptContext); JIT_HELPER_END(Op_TypeofPropertyScoped); } @@ -3310,15 +3487,15 @@ using namespace Js; } if (setterValueOrProxy) { - RecyclableObject* func = RecyclableObject::FromVar(setterValueOrProxy); + RecyclableObject* func = VarTo(setterValueOrProxy); JavascriptOperators::CallSetter(func, receiver, value, scriptContext); } return TRUE; } else if ((flags & Proxy) == Proxy) { - Assert(JavascriptProxy::Is(setterValueOrProxy)); - JavascriptProxy* proxy = JavascriptProxy::FromVar(setterValueOrProxy); + Assert(VarIs(setterValueOrProxy)); + JavascriptProxy* proxy = VarTo(setterValueOrProxy); const PropertyRecord* propertyRecord = nullptr; proxy->PropertyIdFromInt(index, &propertyRecord); return proxy->SetPropertyTrap(receiver, JavascriptProxy::SetPropertyTrapKind::SetItemKind, propertyRecord->GetPropertyId(), value, scriptContext, propertyOperationFlags, skipPrototypeCheck); @@ -3342,7 +3519,7 @@ using namespace Js; return FALSE; } - return (RecyclableObject::FromVar(receiver))->SetItem(index, value, propertyOperationFlags); + return (VarTo(receiver))->SetItem(index, value, propertyOperationFlags); } BOOL JavascriptOperators::DeleteItem(RecyclableObject* object, uint32 index, PropertyOperationFlags propertyOperationFlags) @@ -3360,7 +3537,7 @@ using namespace Js; { RecyclableObject* object = TaggedNumber::Is(instance) ? scriptContext->GetLibrary()->GetNumberPrototype() : - RecyclableObject::FromVar(instance); + VarTo(instance); uint32 indexVal; PropertyRecord const * propertyRecord = nullptr; @@ -3448,7 +3625,7 @@ using namespace Js; { JavascriptError::ThrowTypeError(scriptContext, JSERR_NeedFunction /* TODO-ERROR: get arg name - aFunc */); } - return RecyclableObject::UnsafeFromVar(callee); + return UnsafeVarTo(callee); } Var JavascriptOperators::OP_GetElementI_JIT(Var instance, Var index, ScriptContext *scriptContext) @@ -3496,7 +3673,7 @@ using namespace Js; return false; } - JavascriptArray* arrayPrototype = JavascriptArray::UnsafeFromVar(prototype); //Prototype must be Array.prototype (unless changed through __proto__) + JavascriptArray* arrayPrototype = UnsafeVarTo(prototype); //Prototype must be Array.prototype (unless changed through __proto__) if (arrayPrototype->GetLength() && arrayPrototype->GetItem(arrayPrototype, (uint32)indexInt, result, scriptContext)) { return true; @@ -3508,7 +3685,7 @@ using namespace Js; return false; } - if (DynamicObject::FromVar(prototype)->HasNonEmptyObjectArray()) + if (VarTo(prototype)->HasNonEmptyObjectArray()) { if (prototype->GetItem(arr, (uint32)indexInt, result, scriptContext)) { @@ -3529,7 +3706,7 @@ using namespace Js; case TypeIds_Array: //fast path for array { Var result; - if (OP_GetElementI_ArrayFastPath(JavascriptArray::UnsafeFromVar(instance), TaggedInt::ToInt32(index), &result, scriptContext)) + if (OP_GetElementI_ArrayFastPath(UnsafeVarTo(instance), TaggedInt::ToInt32(index), &result, scriptContext)) { return result; } @@ -3541,7 +3718,7 @@ using namespace Js; JavascriptLibrary::CheckAndConvertCopyOnAccessNativeIntArray(instance); #endif Var result; - if (OP_GetElementI_ArrayFastPath(JavascriptNativeIntArray::UnsafeFromVar(instance), TaggedInt::ToInt32(index), &result, scriptContext)) + if (OP_GetElementI_ArrayFastPath(UnsafeVarTo(instance), TaggedInt::ToInt32(index), &result, scriptContext)) { return result; } @@ -3550,7 +3727,7 @@ using namespace Js; case TypeIds_NativeFloatArray: { Var result; - if (OP_GetElementI_ArrayFastPath(JavascriptNativeFloatArray::UnsafeFromVar(instance), TaggedInt::ToInt32(index), &result, scriptContext)) + if (OP_GetElementI_ArrayFastPath(UnsafeVarTo(instance), TaggedInt::ToInt32(index), &result, scriptContext)) { return result; } @@ -3560,7 +3737,7 @@ using namespace Js; case TypeIds_String: // fast path for string { charcount_t indexInt = TaggedInt::ToUInt32(index); - JavascriptString* string = JavascriptString::UnsafeFromVar(instance); + JavascriptString* string = UnsafeVarTo(instance); Var result; if (JavascriptConversion::PropertyQueryFlagsToBoolean(string->JavascriptString::GetItemQuery(instance, indexInt, &result, scriptContext))) { @@ -3575,7 +3752,7 @@ using namespace Js; int32 indexInt = TaggedInt::ToInt32(index); if (VirtualTableInfo::HasVirtualTable(instance)) { - Int8VirtualArray* int8Array = Int8VirtualArray::UnsafeFromVar(instance); + Int8VirtualArray* int8Array = UnsafeVarTo(instance); if (indexInt >= 0) { return int8Array->DirectGetItem(indexInt); @@ -3583,7 +3760,7 @@ using namespace Js; } else if (VirtualTableInfo::HasVirtualTable(instance)) { - Int8Array* int8Array = Int8Array::UnsafeFromVar(instance); + Int8Array* int8Array = UnsafeVarTo(instance); if (indexInt >= 0) { return int8Array->DirectGetItem(indexInt); @@ -3598,7 +3775,7 @@ using namespace Js; int32 indexInt = TaggedInt::ToInt32(index); if (VirtualTableInfo::HasVirtualTable(instance)) { - Uint8VirtualArray* uint8Array = Uint8VirtualArray::UnsafeFromVar(instance); + Uint8VirtualArray* uint8Array = UnsafeVarTo(instance); if (indexInt >= 0) { return uint8Array->DirectGetItem(indexInt); @@ -3606,7 +3783,7 @@ using namespace Js; } else if (VirtualTableInfo::HasVirtualTable(instance)) { - Uint8Array* uint8Array = Uint8Array::UnsafeFromVar(instance); + Uint8Array* uint8Array = UnsafeVarTo(instance); if (indexInt >= 0) { return uint8Array->DirectGetItem(indexInt); @@ -3621,7 +3798,7 @@ using namespace Js; int32 indexInt = TaggedInt::ToInt32(index); if (VirtualTableInfo::HasVirtualTable(instance)) { - Uint8ClampedVirtualArray* uint8ClampedArray = Uint8ClampedVirtualArray::UnsafeFromVar(instance); + Uint8ClampedVirtualArray* uint8ClampedArray = UnsafeVarTo(instance); if (indexInt >= 0) { return uint8ClampedArray->DirectGetItem(indexInt); @@ -3629,7 +3806,7 @@ using namespace Js; } else if (VirtualTableInfo::HasVirtualTable(instance)) { - Uint8ClampedArray* uint8ClampedArray = Uint8ClampedArray::UnsafeFromVar(instance); + Uint8ClampedArray* uint8ClampedArray = UnsafeVarTo(instance); if (indexInt >= 0) { return uint8ClampedArray->DirectGetItem(indexInt); @@ -3645,7 +3822,7 @@ using namespace Js; if (VirtualTableInfo::HasVirtualTable(instance)) { - Int16VirtualArray* int16Array = Int16VirtualArray::UnsafeFromVar(instance); + Int16VirtualArray* int16Array = UnsafeVarTo(instance); if (indexInt >= 0) { return int16Array->DirectGetItem(indexInt); @@ -3653,7 +3830,7 @@ using namespace Js; } else if (VirtualTableInfo::HasVirtualTable(instance)) { - Int16Array* int16Array = Int16Array::UnsafeFromVar(instance); + Int16Array* int16Array = UnsafeVarTo(instance); if (indexInt >= 0) { return int16Array->DirectGetItem(indexInt); @@ -3669,7 +3846,7 @@ using namespace Js; if (VirtualTableInfo::HasVirtualTable(instance)) { - Uint16VirtualArray* uint16Array = Uint16VirtualArray::UnsafeFromVar(instance); + Uint16VirtualArray* uint16Array = UnsafeVarTo(instance); if (indexInt >= 0) { return uint16Array->DirectGetItem(indexInt); @@ -3677,7 +3854,7 @@ using namespace Js; } else if (VirtualTableInfo::HasVirtualTable(instance)) { - Uint16Array* uint16Array = Uint16Array::UnsafeFromVar(instance); + Uint16Array* uint16Array = UnsafeVarTo(instance); if (indexInt >= 0) { return uint16Array->DirectGetItem(indexInt); @@ -3691,7 +3868,7 @@ using namespace Js; int32 indexInt = TaggedInt::ToInt32(index); if (VirtualTableInfo::HasVirtualTable(instance)) { - Int32VirtualArray* int32Array = Int32VirtualArray::UnsafeFromVar(instance); + Int32VirtualArray* int32Array = UnsafeVarTo(instance); if (indexInt >= 0) { return int32Array->DirectGetItem(indexInt); @@ -3699,7 +3876,7 @@ using namespace Js; } else if (VirtualTableInfo::HasVirtualTable(instance)) { - Int32Array* int32Array = Int32Array::UnsafeFromVar(instance); + Int32Array* int32Array = UnsafeVarTo(instance); if (indexInt >= 0) { return int32Array->DirectGetItem(indexInt); @@ -3714,7 +3891,7 @@ using namespace Js; int32 indexInt = TaggedInt::ToInt32(index); if (VirtualTableInfo::HasVirtualTable(instance)) { - Uint32VirtualArray* uint32Array = Uint32VirtualArray::UnsafeFromVar(instance); + Uint32VirtualArray* uint32Array = UnsafeVarTo(instance); if (indexInt >= 0) { return uint32Array->DirectGetItem(indexInt); @@ -3722,7 +3899,7 @@ using namespace Js; } else if (VirtualTableInfo::HasVirtualTable(instance)) { - Uint32Array* uint32Array = Uint32Array::UnsafeFromVar(instance); + Uint32Array* uint32Array = UnsafeVarTo(instance); if (indexInt >= 0) { return uint32Array->DirectGetItem(indexInt); @@ -3737,7 +3914,7 @@ using namespace Js; if (VirtualTableInfo::HasVirtualTable(instance)) { - Float32VirtualArray* float32Array = Float32VirtualArray::UnsafeFromVar(instance); + Float32VirtualArray* float32Array = UnsafeVarTo(instance); if (indexInt >= 0) { return float32Array->DirectGetItem(indexInt); @@ -3745,7 +3922,7 @@ using namespace Js; } else if (VirtualTableInfo::HasVirtualTable(instance)) { - Float32Array* float32Array = Float32Array::UnsafeFromVar(instance); + Float32Array* float32Array = UnsafeVarTo(instance); if (indexInt >= 0) { return float32Array->DirectGetItem(indexInt); @@ -3759,7 +3936,7 @@ using namespace Js; int32 indexInt = TaggedInt::ToInt32(index); if (VirtualTableInfo::HasVirtualTable(instance)) { - Float64VirtualArray* float64Array = Float64VirtualArray::UnsafeFromVar(instance); + Float64VirtualArray* float64Array = UnsafeVarTo(instance); if (indexInt >= 0) { return float64Array->DirectGetItem(indexInt); @@ -3767,7 +3944,7 @@ using namespace Js; } else if (VirtualTableInfo::HasVirtualTable(instance)) { - Float64Array* float64Array = Float64Array::UnsafeFromVar(instance); + Float64Array* float64Array = UnsafeVarTo(instance); if (indexInt >= 0) { return float64Array->DirectGetItem(indexInt); @@ -3811,7 +3988,9 @@ using namespace Js; Var JavascriptOperators::OP_GetElementI(Var instance, Var index, ScriptContext* scriptContext) { +#ifdef ENABLE_SPECTRE_RUNTIME_MITIGATIONS instance = BreakSpeculation(instance); +#endif if (TaggedInt::Is(index)) { return GetElementIIntIndex(instance, index, scriptContext); @@ -3827,7 +4006,7 @@ using namespace Js; return GetElementIIntIndex(instance, index, scriptContext); } } - else if (RecyclableObject::Is(instance)) + else if (VarIs(instance)) { RecyclableObject* cacheOwner; PropertyRecordUsageCache* propertyRecordUsageCache; @@ -4076,7 +4255,7 @@ using namespace Js; { return JavascriptNativeIntArray::MissingItem; } - JavascriptArray * arr = JavascriptArray::FromVar(instance); + JavascriptArray * arr = VarTo(instance); int32 result; if (arr->DirectGetItemAt((uint32)indexInt, &result)) { @@ -4094,7 +4273,7 @@ using namespace Js; { return JavascriptNativeIntArray::MissingItem; } - JavascriptArray * arr = JavascriptArray::FromVar(instance); + JavascriptArray * arr = VarTo(instance); int32 result; if (arr->DirectGetItemAt((uint32)indexInt, &result)) { @@ -4153,7 +4332,7 @@ using namespace Js; } else { - JavascriptArray * arr = JavascriptArray::FromVar(instance); + JavascriptArray * arr = VarTo(instance); if (!arr->DirectGetItemAt((uint32)indexInt, &result)) { result = JavascriptNativeFloatArray::MissingItem; @@ -4173,7 +4352,7 @@ using namespace Js; } else { - JavascriptArray * arr = JavascriptArray::FromVar(instance); + JavascriptArray * arr = VarTo(instance); if (!arr->DirectGetItemAt((uint32)indexInt, &result)) { result = JavascriptNativeFloatArray::MissingItem; @@ -4380,7 +4559,7 @@ using namespace Js; if (isTypedArray) { - if (TaggedInt::Is(index) || JavascriptNumber::Is_NoTaggedIntCheck(index) || JavascriptString::Is(index)) + if (TaggedInt::Is(index) || JavascriptNumber::Is_NoTaggedIntCheck(index) || VarIs(index)) { BOOL returnValue = FALSE; bool isNumericIndex = false; @@ -4395,12 +4574,12 @@ using namespace Js; if (VirtualTableInfo::HasVirtualTable(instance)) { - Int8VirtualArray* int8Array = Int8VirtualArray::UnsafeFromVar(instance); + Int8VirtualArray* int8Array = UnsafeVarTo(instance); returnValue = int8Array->ValidateIndexAndDirectSetItem(index, value, &isNumericIndex); } else if( VirtualTableInfo::HasVirtualTable(instance)) { - Int8Array* int8Array = Int8Array::UnsafeFromVar(instance); + Int8Array* int8Array = UnsafeVarTo(instance); returnValue = int8Array->ValidateIndexAndDirectSetItem(index, value, &isNumericIndex); } break; @@ -4411,12 +4590,12 @@ using namespace Js; // The typed array will deal with all possible values for the index if (VirtualTableInfo::HasVirtualTable(instance)) { - Uint8VirtualArray* uint8Array = Uint8VirtualArray::UnsafeFromVar(instance); + Uint8VirtualArray* uint8Array = UnsafeVarTo(instance); returnValue = uint8Array->ValidateIndexAndDirectSetItem(index, value, &isNumericIndex); } else if (VirtualTableInfo::HasVirtualTable(instance)) { - Uint8Array* uint8Array = Uint8Array::UnsafeFromVar(instance); + Uint8Array* uint8Array = UnsafeVarTo(instance); returnValue = uint8Array->ValidateIndexAndDirectSetItem(index, value, &isNumericIndex); } break; @@ -4427,12 +4606,12 @@ using namespace Js; // The typed array will deal with all possible values for the index if (VirtualTableInfo::HasVirtualTable(instance)) { - Uint8ClampedVirtualArray* uint8ClampedArray = Uint8ClampedVirtualArray::UnsafeFromVar(instance); + Uint8ClampedVirtualArray* uint8ClampedArray = UnsafeVarTo(instance); returnValue = uint8ClampedArray->ValidateIndexAndDirectSetItem(index, value, &isNumericIndex); } else if(VirtualTableInfo::HasVirtualTable(instance)) { - Uint8ClampedArray* uint8ClampedArray = Uint8ClampedArray::UnsafeFromVar(instance); + Uint8ClampedArray* uint8ClampedArray = UnsafeVarTo(instance); returnValue = uint8ClampedArray->ValidateIndexAndDirectSetItem(index, value, &isNumericIndex); } break; @@ -4443,12 +4622,12 @@ using namespace Js; // The type array will deal with all possible values for the index if (VirtualTableInfo::HasVirtualTable(instance)) { - Int16VirtualArray* int16Array = Int16VirtualArray::UnsafeFromVar(instance); + Int16VirtualArray* int16Array = UnsafeVarTo(instance); returnValue = int16Array->ValidateIndexAndDirectSetItem(index, value, &isNumericIndex); } else if (VirtualTableInfo::HasVirtualTable(instance)) { - Int16Array* int16Array = Int16Array::UnsafeFromVar(instance); + Int16Array* int16Array = UnsafeVarTo(instance); returnValue = int16Array->ValidateIndexAndDirectSetItem(index, value, &isNumericIndex); } break; @@ -4460,12 +4639,12 @@ using namespace Js; if (VirtualTableInfo::HasVirtualTable(instance)) { - Uint16VirtualArray* uint16Array = Uint16VirtualArray::UnsafeFromVar(instance); + Uint16VirtualArray* uint16Array = UnsafeVarTo(instance); returnValue = uint16Array->ValidateIndexAndDirectSetItem(index, value, &isNumericIndex); } else if (VirtualTableInfo::HasVirtualTable(instance)) { - Uint16Array* uint16Array = Uint16Array::UnsafeFromVar(instance); + Uint16Array* uint16Array = UnsafeVarTo(instance); returnValue = uint16Array->ValidateIndexAndDirectSetItem(index, value, &isNumericIndex); } break; @@ -4475,12 +4654,12 @@ using namespace Js; // The type array will deal with all possible values for the index if (VirtualTableInfo::HasVirtualTable(instance)) { - Int32VirtualArray* int32Array = Int32VirtualArray::UnsafeFromVar(instance); + Int32VirtualArray* int32Array = UnsafeVarTo(instance); returnValue = int32Array->ValidateIndexAndDirectSetItem(index, value, &isNumericIndex); } else if(VirtualTableInfo::HasVirtualTable(instance)) { - Int32Array* int32Array = Int32Array::UnsafeFromVar(instance); + Int32Array* int32Array = UnsafeVarTo(instance); returnValue = int32Array->ValidateIndexAndDirectSetItem(index, value, &isNumericIndex); } break; @@ -4491,12 +4670,12 @@ using namespace Js; if (VirtualTableInfo::HasVirtualTable(instance)) { - Uint32VirtualArray* uint32Array = Uint32VirtualArray::UnsafeFromVar(instance); + Uint32VirtualArray* uint32Array = UnsafeVarTo(instance); returnValue = uint32Array->ValidateIndexAndDirectSetItem(index, value, &isNumericIndex); } else if (VirtualTableInfo::HasVirtualTable(instance)) { - Uint32Array* uint32Array = Uint32Array::UnsafeFromVar(instance); + Uint32Array* uint32Array = UnsafeVarTo(instance); returnValue = uint32Array->ValidateIndexAndDirectSetItem(index, value, &isNumericIndex); } break; @@ -4506,12 +4685,12 @@ using namespace Js; // The type array will deal with all possible values for the index if (VirtualTableInfo::HasVirtualTable(instance)) { - Float32VirtualArray* float32Array = Float32VirtualArray::UnsafeFromVar(instance); + Float32VirtualArray* float32Array = UnsafeVarTo(instance); returnValue = float32Array->ValidateIndexAndDirectSetItem(index, value, &isNumericIndex); } else if (VirtualTableInfo::HasVirtualTable(instance)) { - Float32Array* float32Array = Float32Array::UnsafeFromVar(instance); + Float32Array* float32Array = UnsafeVarTo(instance); returnValue = float32Array->ValidateIndexAndDirectSetItem(index, value, &isNumericIndex); } break; @@ -4521,12 +4700,12 @@ using namespace Js; // The type array will deal with all possible values for the index if (VirtualTableInfo::HasVirtualTable(instance)) { - Float64VirtualArray* float64Array = Float64VirtualArray::UnsafeFromVar(instance); + Float64VirtualArray* float64Array = UnsafeVarTo(instance); returnValue = float64Array->ValidateIndexAndDirectSetItem(index, value, &isNumericIndex); } else if (VirtualTableInfo::HasVirtualTable(instance)) { - Float64Array* float64Array = Float64Array::UnsafeFromVar(instance); + Float64Array* float64Array = UnsafeVarTo(instance); returnValue = float64Array->ValidateIndexAndDirectSetItem(index, value, &isNumericIndex); } break; @@ -4553,7 +4732,7 @@ using namespace Js; int indexInt = TaggedInt::ToInt32(index); if (indexInt >= 0 && scriptContext->optimizationOverrides.IsEnabledArraySetElementFastPath()) { - JavascriptArray::UnsafeFromVar(instance)->SetItem((uint32)indexInt, value, flags); + UnsafeVarTo(instance)->SetItem((uint32)indexInt, value, flags); return TRUE; } break; @@ -4603,7 +4782,7 @@ using namespace Js; } #if DBG_DUMP - scriptContext->forinNoCache += (!TaggedInt::Is(index) && JavascriptString::Is(index)); + scriptContext->forinNoCache += (!TaggedInt::Is(index) && VarIs(index)); #endif indexType = GetIndexType(index, scriptContext, &indexVal, &propertyRecord, &propertyNameString, false, true); if (scriptContext->GetThreadContext()->IsDisableImplicitCall() && @@ -4774,7 +4953,7 @@ using namespace Js; int32 indexInt = TaggedInt::ToInt32(aElementIndex); if (indexInt >= 0 && scriptContext->optimizationOverrides.IsEnabledArraySetElementFastPath()) { - JavascriptNativeIntArray *arr = JavascriptNativeIntArray::FromVar(instance); + JavascriptNativeIntArray *arr = VarTo(instance); if (!(arr->TryGrowHeadSegmentAndSetItem((uint32)indexInt, iValue))) { arr->SetItem(indexInt, iValue); @@ -4843,7 +5022,7 @@ using namespace Js; int32 indexInt = TaggedInt::ToInt32(aElementIndex); if (indexInt >= 0 && scriptContext->optimizationOverrides.IsEnabledArraySetElementFastPath()) { - JavascriptNativeFloatArray *arr = JavascriptNativeFloatArray::FromVar(instance); + JavascriptNativeFloatArray *arr = VarTo(instance); if (!(arr->TryGrowHeadSegmentAndSetItem((uint32)indexInt, dValue))) { arr->SetItem(indexInt, dValue); @@ -4915,7 +5094,7 @@ using namespace Js; } BOOL returnValue = false; -#define MEMCOPY_TYPED_ARRAY(type, conversion) type ## ::FromVar(dstInstance)->DirectSetItemAtRange( type ## ::FromVar(srcInstance), srcStart, dstStart, length, JavascriptConversion:: ## conversion) +#define MEMCOPY_TYPED_ARRAY(type, conversion) VarTo< type ## >(dstInstance)->DirectSetItemAtRange( VarTo< type ## >(srcInstance), srcStart, dstStart, length, JavascriptConversion:: ## conversion) switch (instanceType) { case TypeIds_Int8Array: @@ -4973,8 +5152,8 @@ using namespace Js; break; } // Upper bounds check for source array - JavascriptArray* srcArray = JavascriptArray::UnsafeFromVar(srcInstance); - JavascriptArray* dstArray = JavascriptArray::FromVar(dstInstance); + JavascriptArray* srcArray = UnsafeVarTo(srcInstance); + JavascriptArray* dstArray = VarTo(dstInstance); if (scriptContext->optimizationOverrides.IsEnabledArraySetElementFastPath()) { INT_PTR vt = VirtualTableInfoBase::GetVirtualTable(dstInstance); @@ -5029,7 +5208,7 @@ using namespace Js; { \ type## ::TypedArrayType typedValue = 0; \ if (!MemsetConversion(value, scriptContext, &typedValue)) return false; \ - returnValue = type## ::FromVar(instance)->DirectSetItemAtRange(start, length, typedValue); \ + returnValue = VarTo< type## >(instance)->DirectSetItemAtRange(start, length, typedValue); \ break; \ } switch (instanceType) @@ -5062,7 +5241,7 @@ using namespace Js; INT_PTR vt = VirtualTableInfoBase::GetVirtualTable(instance); if (instanceType == TypeIds_Array) { - returnValue = JavascriptArray::UnsafeFromVar(instance)->DirectSetItemAtRange(start, length, value); + returnValue = UnsafeVarTo(instance)->DirectSetItemAtRange(start, length, value); } else if (instanceType == TypeIds_NativeIntArray) { @@ -5081,7 +5260,7 @@ using namespace Js; { return false; } - returnValue = JavascriptArray::UnsafeFromVar(instance)->DirectSetItemAtRange(start, length, intValue); + returnValue = UnsafeVarTo(instance)->DirectSetItemAtRange(start, length, intValue); } else { @@ -5101,7 +5280,7 @@ using namespace Js; { return false; } - returnValue = JavascriptArray::UnsafeFromVar(instance)->DirectSetItemAtRange(start, length, doubleValue); + returnValue = UnsafeVarTo(instance)->DirectSetItemAtRange(start, length, doubleValue); } returnValue &= vt == VirtualTableInfoBase::GetVirtualTable(instance); } @@ -5156,7 +5335,7 @@ using namespace Js; #if ENABLE_COPYONACCESS_ARRAY JavascriptLibrary::CheckAndConvertCopyOnAccessNativeIntArray(instance); #endif - RecyclableObject* object = RecyclableObject::FromVar(instance); + RecyclableObject* object = VarTo(instance); if (JavascriptOperators::IsUndefinedOrNull(object)) { JavascriptError::ThrowTypeError(scriptContext, JSERR_Property_CannotDelete_NullOrUndefined, GetPropertyDisplayNameForError(index, scriptContext)); @@ -5245,7 +5424,7 @@ using namespace Js; else if (typeId == TypeIds_HostDispatch) { TypeId remoteTypeId = TypeIds_Limit; - if (RecyclableObject::FromVar(thisVar)->GetRemoteTypeId(&remoteTypeId)) + if (VarTo(thisVar)->GetRemoteTypeId(&remoteTypeId)) { if (remoteTypeId == TypeIds_Null || remoteTypeId == TypeIds_Undefined || remoteTypeId == TypeIds_ActivationObject) { @@ -5340,20 +5519,6 @@ using namespace Js; } } - Var JavascriptOperators::OP_StrictGetThis(Var thisVar, ScriptContext* scriptContext) - { - JIT_HELPER_NOT_REENTRANT_HEADER(StrictLdThis, reentrancylock, scriptContext->GetThreadContext()); - TypeId typeId = JavascriptOperators::GetTypeId(thisVar); - - if (typeId == TypeIds_ActivationObject) - { - return scriptContext->GetLibrary()->GetUndefined(); - } - - return thisVar; - JIT_HELPER_END(StrictLdThis); - } - BOOL JavascriptOperators::GetRemoteTypeId(Var aValue, __out TypeId* typeId) { *typeId = TypeIds_Limit; @@ -5361,7 +5526,7 @@ using namespace Js; { return FALSE; } - return RecyclableObject::FromVar(aValue)->GetRemoteTypeId(typeId); + return VarTo(aValue)->GetRemoteTypeId(typeId); } BOOL JavascriptOperators::IsJsNativeType(TypeId type) @@ -5378,7 +5543,6 @@ using namespace Js; case TypeIds_NativeFloatArray: case TypeIds_ES5Array: case TypeIds_Date: - case TypeIds_WinRTDate: case TypeIds_RegEx: case TypeIds_Error: case TypeIds_BooleanObject: @@ -5400,6 +5564,8 @@ using namespace Js; case TypeIds_SetIterator: case TypeIds_StringIterator: case TypeIds_Generator: + case TypeIds_AsyncGenerator: + case TypeIds_AsyncFromSyncIterator: case TypeIds_Promise: case TypeIds_Proxy: return true; @@ -5487,7 +5653,7 @@ using namespace Js; } else { - RecyclableObject* object = RecyclableObject::FromVar(instance); + RecyclableObject* object = VarTo(instance); if (JavascriptOperators::IsNull(object)) { return object; @@ -5665,9 +5831,9 @@ using namespace Js; switch (GetTypeId(var)) { case TypeIds_ArrayBuffer: - return Js::ArrayBuffer::FromVar(var)->DetachAndGetState(queueForDelayFree); + return Js::VarTo(var)->DetachAndGetState(queueForDelayFree); default: - if (!Js::RecyclableObject::FromVar(var)->IsExternal()) + if (!Js::VarTo(var)->IsExternal()) { AssertMsg(false, "We should explicitly have a case statement for each non-external object that can be detached."); } @@ -5680,7 +5846,7 @@ using namespace Js; switch (GetTypeId(var)) { case TypeIds_ArrayBuffer: - return Js::ArrayBuffer::FromVar(var)->IsDetached(); + return Js::VarTo(var)->IsDetached(); default: return false; } @@ -5783,17 +5949,17 @@ using namespace Js; Var JavascriptOperators::OP_InitCachedScope(Var varFunc, const Js::PropertyIdArray *propIds, Field(DynamicType*)* literalType, bool formalsAreLetDecls, ScriptContext *scriptContext) { JIT_HELPER_NOT_REENTRANT_HEADER(OP_InitCachedScope, reentrancylock, scriptContext->GetThreadContext()); - bool isGAFunction = JavascriptFunction::Is(varFunc); + bool isGAFunction = VarIs(varFunc); Assert(isGAFunction); if (isGAFunction) { - JavascriptFunction *function = JavascriptFunction::FromVar(varFunc); + JavascriptFunction *function = VarTo(varFunc); isGAFunction = JavascriptGeneratorFunction::Test(function) || JavascriptAsyncFunction::Test(function); } ScriptFunction *func = isGAFunction ? - JavascriptGeneratorFunction::FromVar(varFunc)->GetGeneratorVirtualScriptFunction() : - ScriptFunction::FromVar(varFunc); + VarTo(varFunc)->GetGeneratorVirtualScriptFunction() : + VarTo(varFunc); #ifdef PROFILE_OBJECT_LITERALS // Empty objects not counted in the object literal counts @@ -5891,8 +6057,8 @@ using namespace Js; Var item = disp->GetItem(envIndex); if (item != nullptr) { - Assert(ActivationObjectEx::Is(item)); - RecyclableObject *objScope = RecyclableObject::FromVar(item); + Assert(VarIs(item)); + RecyclableObject *objScope = VarTo(item); objScope->InvalidateCachedScope(); } JIT_HELPER_END(OP_InvalidateCachedScope); @@ -5901,7 +6067,7 @@ using namespace Js; void JavascriptOperators::OP_InitCachedFuncs(Var varScope, FrameDisplay *pDisplay, const FuncInfoArray *info, ScriptContext *scriptContext) { JIT_HELPER_NOT_REENTRANT_HEADER(OP_InitCachedFuncs, reentrancylock, scriptContext->GetThreadContext()); - ActivationObjectEx *scopeObj = ActivationObjectEx::FromVar(varScope); + ActivationObjectEx *scopeObj = VarTo(varScope); Assert(scopeObj->GetTypeHandler()->GetInlineSlotCapacity() == 0); uint funcCount = info->count; @@ -6059,7 +6225,7 @@ using namespace Js; if (JavascriptOperators::IsObjectType(prototypeType)) { - *prototypeObject = RecyclableObject::FromVar(prototypeProperty); + *prototypeObject = VarTo(prototypeProperty); return true; } *prototypeObject = constructorFunction->GetLibrary()->GetObjectPrototype(); @@ -6071,7 +6237,7 @@ using namespace Js; TypeId typeId = JavascriptOperators::GetTypeId(instance); if (typeId == TypeIds_Function) { - JavascriptFunction * function = JavascriptFunction::UnsafeFromVar(instance); + JavascriptFunction * function = UnsafeVarTo(instance); return function->GetFunctionInfo(); } if (typeId != TypeIds_HostDispatch && typeId != TypeIds_Proxy) @@ -6094,7 +6260,7 @@ using namespace Js; #if ENABLE_DEBUG_CONFIG_OPTIONS if (Js::Configuration::Global.flags.IsEnabled(Js::autoProxyFlag)) { - newObject = DynamicObject::FromVar(JavascriptProxy::AutoProxyWrapper(newObject)); + newObject = VarTo(JavascriptProxy::AutoProxyWrapper(newObject)); } #endif return newObject; @@ -6138,7 +6304,7 @@ using namespace Js; Var JavascriptOperators::NewScObjectNoArgNoCtorCommon(Var instance, ScriptContext* requestContext, bool isBaseClassConstructorNewScObject) { - RecyclableObject * object = RecyclableObject::FromVar(instance); + RecyclableObject * object = VarTo(instance); FunctionInfo* functionInfo = JavascriptOperators::GetConstructorFunctionInfo(instance, requestContext); Assert(functionInfo != &JavascriptObject::EntryInfo::NewInstance); // built-ins are not inlined Assert(functionInfo != &JavascriptArray::EntryInfo::NewInstance); // built-ins are not inlined @@ -6154,7 +6320,8 @@ using namespace Js; JavascriptProxy * proxy = JavascriptOperators::TryFromVar(instance); if (proxy) { - Arguments args(CallInfo(CallFlags_New, 1), &instance); + Var dummy = nullptr; + Arguments args(CallInfo(CallFlags_New, 1), &dummy); return requestContext->GetThreadContext()->ExecuteImplicitCall(proxy, Js::ImplicitCall_Accessor, [=]()->Js::Var { return proxy->ConstructorTrap(args, requestContext, 0); @@ -6162,7 +6329,7 @@ using namespace Js; } FunctionInfo* functionInfo = JavascriptOperators::GetConstructorFunctionInfo(instance, requestContext); - RecyclableObject * object = RecyclableObject::FromVar(instance); + RecyclableObject * object = VarTo(instance); if (functionInfo == &JavascriptObject::EntryInfo::NewInstance) { @@ -6175,7 +6342,7 @@ using namespace Js; #if ENABLE_DEBUG_CONFIG_OPTIONS if (Js::Configuration::Global.flags.IsEnabled(Js::autoProxyFlag)) { - newObject = DynamicObject::FromVar(JavascriptProxy::AutoProxyWrapper(newObject)); + newObject = VarTo(JavascriptProxy::AutoProxyWrapper(newObject)); } #endif @@ -6183,7 +6350,7 @@ using namespace Js; DynamicType* newObjectType = newObject->GetDynamicType(); Assert(newObjectType->GetIsShared()); - JavascriptFunction* constructor = JavascriptFunction::FromVar(instance); + JavascriptFunction* constructor = VarTo(instance); Assert(!constructor->GetConstructorCache()->NeedsUpdateAfterCtor()); #endif @@ -6213,7 +6380,7 @@ using namespace Js; DynamicType* newArrayType = newArray->GetDynamicType(); Assert(newArrayType->GetIsShared()); - JavascriptFunction* constructor = JavascriptFunction::FromVar(instance); + JavascriptFunction* constructor = VarTo(instance); Assert(!constructor->GetConstructorCache()->NeedsUpdateAfterCtor()); #endif @@ -6254,7 +6421,7 @@ using namespace Js; #if ENABLE_DEBUG_CONFIG_OPTIONS if (Js::Configuration::Global.flags.IsEnabled(Js::autoProxyFlag)) { - DynamicObject* newDynamicObject = DynamicObject::FromVar(JavascriptProxy::AutoProxyWrapper(newObject)); + DynamicObject* newDynamicObject = VarTo(JavascriptProxy::AutoProxyWrapper(newObject)); // this might come from a different scriptcontext. newObject = CrossSite::MarshalVar(requestContext, newDynamicObject, newDynamicObject->GetScriptContext()); } @@ -6283,7 +6450,7 @@ using namespace Js; // We can still call into NewScObjectNoCtor variations in JIT code for performance; however for proxy we don't // really need the new object as the trap will handle the "this" pointer separately. pass back nullptr to ensure // failure in invalid case. - return (JavascriptProxy::Is(instance)) ? nullptr : NewScObjectNoCtorCommon(instance, requestContext, false); + return (VarIs(instance)) ? nullptr : NewScObjectNoCtorCommon(instance, requestContext, false); JIT_HELPER_END(NewScObjectNoCtor); } @@ -6293,11 +6460,11 @@ using namespace Js; if (functionInfo) { - return JavascriptOperators::NewScObjectCommon(RecyclableObject::UnsafeFromVar(instance), functionInfo, requestContext, isBaseClassConstructorNewScObject); + return JavascriptOperators::NewScObjectCommon(UnsafeVarTo(instance), functionInfo, requestContext, isBaseClassConstructorNewScObject); } else { - return JavascriptOperators::NewScObjectHostDispatchOrProxy(RecyclableObject::FromVar(instance), requestContext); + return JavascriptOperators::NewScObjectHostDispatchOrProxy(VarTo(instance), requestContext); } } @@ -6306,14 +6473,14 @@ using namespace Js; ScriptContext* functionScriptContext = function->GetScriptContext(); RecyclableObject * prototype = JavascriptOperators::GetPrototypeObject(function, functionScriptContext); - prototype = RecyclableObject::FromVar(CrossSite::MarshalVar(requestContext, prototype, functionScriptContext)); + prototype = VarTo(CrossSite::MarshalVar(requestContext, prototype, functionScriptContext)); Var object = requestContext->GetLibrary()->CreateObject(prototype); JS_ETW(EventWriteJSCRIPT_RECYCLER_ALLOCATE_OBJECT(object)); #if ENABLE_DEBUG_CONFIG_OPTIONS if (Js::Configuration::Global.flags.IsEnabled(Js::autoProxyFlag)) { - object = DynamicObject::FromVar(JavascriptProxy::AutoProxyWrapper(object)); + object = VarTo(JavascriptProxy::AutoProxyWrapper(object)); } #endif return object; @@ -6329,7 +6496,7 @@ using namespace Js; // the inline cache arena to allow it to be zeroed, but retain a recycler-allocated portion to hold on to the size of // inlined slots. - JavascriptFunction* constructor = JavascriptFunction::UnsafeFromVar(function); + JavascriptFunction* constructor = UnsafeVarTo(function); if (functionInfo->IsClassConstructor() && !isBaseClassConstructorNewScObject) { // If we are calling new on a class constructor, the contract is that we pass new.target as the 'this' argument. @@ -6361,7 +6528,7 @@ using namespace Js; #if ENABLE_DEBUG_CONFIG_OPTIONS if (Js::Configuration::Global.flags.IsEnabled(Js::autoProxyFlag)) { - object = DynamicObject::FromVar(JavascriptProxy::AutoProxyWrapper(object)); + object = VarTo(JavascriptProxy::AutoProxyWrapper(object)); } #endif return object; @@ -6437,7 +6604,7 @@ using namespace Js; bool prototypeCanBeCached; RecyclableObject* prototype = JavascriptOperators::GetPrototypeObjectForConstructorCache( function, constructorScriptContext, prototypeCanBeCached); - prototype = RecyclableObject::FromVar(CrossSite::MarshalVar(requestContext, + prototype = VarTo(CrossSite::MarshalVar(requestContext, prototype, constructorScriptContext)); DynamicObject* newObject = requestContext->GetLibrary()->CreateObject(prototype, 8); @@ -6446,14 +6613,14 @@ using namespace Js; #if ENABLE_DEBUG_CONFIG_OPTIONS if (Js::Configuration::Global.flags.IsEnabled(Js::autoProxyFlag)) { - newObject = DynamicObject::FromVar(JavascriptProxy::AutoProxyWrapper(newObject)); + newObject = VarTo(JavascriptProxy::AutoProxyWrapper(newObject)); } #endif Assert(newObject->GetTypeHandler()->GetPropertyCount() == 0); if (prototypeCanBeCached && functionBody != nullptr && requestContext == constructorScriptContext && - !Js::JavascriptProxy::Is(newObject) && + !Js::VarIs(newObject) && !PHASE_OFF1(ConstructorCachePhase) && !PHASE_OFF(ConstructorCachePhase, functionBody)) { DynamicType* newObjectType = newObject->GetDynamicType(); @@ -6509,7 +6676,7 @@ using namespace Js; void JavascriptOperators::UpdateNewScObjectCache(Var function, Var instance, ScriptContext* requestContext) { JIT_HELPER_NOT_REENTRANT_HEADER(UpdateNewScObjectCache, reentrancylock, requestContext->GetThreadContext()); - JavascriptFunction* constructor = JavascriptFunction::FromVar(function); + JavascriptFunction* constructor = VarTo(function); if(constructor->GetScriptContext() != requestContext) { // The cache is populated only when the constructor function's context is the same as the calling context. However, @@ -6545,7 +6712,7 @@ using namespace Js; FunctionBody* constructorBody = constructor->GetFunctionBody(); AssertMsg(constructorBody != nullptr, "Constructor function doesn't have a function body."); - Assert(RecyclableObject::Is(instance)); + Assert(VarIs(instance)); // The cache might have been invalidated between NewScObjectCommon and UpdateNewScObjectCache. This could occur, for example, if // the constructor updates its own prototype property. If that happens we don't want to re-populate it here. A new cache will @@ -6560,15 +6727,33 @@ using namespace Js; Assert(constructorCache->GetGuardValueAsType() != nullptr); - if (DynamicType::Is(RecyclableObject::FromVar(instance)->GetTypeId())) + if (DynamicType::Is(VarTo(instance)->GetTypeId())) { - DynamicObject *object = DynamicObject::UnsafeFromVar(instance); + DynamicObject *object = UnsafeVarTo(instance); DynamicType* type = object->GetDynamicType(); DynamicTypeHandler* typeHandler = type->GetTypeHandler(); if (constructorBody->GetHasOnlyThisStmts()) { - if (typeHandler->IsSharable()) + if (!typeHandler->IsSharable()) + { + // Dynamic type created is not sharable. + // So in future don't try to check for "this assignment optimization". + constructorBody->SetHasOnlyThisStmts(false); +#if DBG_DUMP + TraceUpdateConstructorCache(constructorCache, constructorBody, false, _u("because final type is not shareable")); +#endif + } + else if (typeHandler->GetPropertyCount() >= Js::PropertyIndexRanges::MaxValue) + { + // Dynamic type created has too many properties. + // So in future don't try to check for "this assignment optimization". + constructorBody->SetHasOnlyThisStmts(false); +#if DBG_DUMP + TraceUpdateConstructorCache(constructorCache, constructorBody, false, _u("because final type has too many properties")); +#endif + } + else { #if DBG bool cachedProtoCanBeCached = false; @@ -6587,7 +6772,6 @@ using namespace Js; if ((profileInfo != nullptr && profileInfo->GetImplicitCallFlags() <= ImplicitCall_None) || CheckIfPrototypeChainHasOnlyWritableDataProperties(type->GetPrototype())) { - Assert(typeHandler->GetPropertyCount() < Js::PropertyIndexRanges::MaxValue); for (PropertyIndex pi = 0; pi < typeHandler->GetPropertyCount(); pi++) { @@ -6626,15 +6810,6 @@ using namespace Js; } } #endif -#endif - } - else - { - // Dynamic type created is not sharable. - // So in future don't try to check for "this assignment optimization". - constructorBody->SetHasOnlyThisStmts(false); -#if DBG_DUMP - TraceUpdateConstructorCache(constructorCache, constructorBody, false, _u("because final type is not shareable")); #endif } } @@ -6989,7 +7164,7 @@ using namespace Js; AssertMsg(false, "Illegal byte code: stack object as with scope"); Js::Throw::FatalInternalError(); } - if (!RecyclableObject::Is(argHead)) + if (!VarIs(argHead)) { AssertMsg(false, "Illegal byte code: non-object as with scope"); Js::Throw::FatalInternalError(); @@ -7024,7 +7199,7 @@ using namespace Js; void JavascriptOperators::OP_InitSetter(Var object, PropertyId propertyId, Var setter) { AssertMsg(!TaggedNumber::Is(object), "SetMember on a non-object?"); - RecyclableObject* recylableObject = RecyclableObject::FromVar(object); + RecyclableObject* recylableObject = VarTo(object); JIT_HELPER_NOT_REENTRANT_HEADER(OP_InitSetter, reentrancylock, recylableObject->GetScriptContext()->GetThreadContext()); recylableObject->SetAccessors(propertyId, nullptr, setter); JIT_HELPER_END(OP_InitSetter); @@ -7036,7 +7211,7 @@ using namespace Js; JIT_HELPER_SAME_ATTRIBUTES(Op_InitClassMemberSet, OP_InitSetter); JavascriptOperators::OP_InitSetter(object, propertyId, setter); - RecyclableObject::FromVar(object)->SetAttributes(propertyId, PropertyClassMemberDefaults); + VarTo(object)->SetAttributes(propertyId, PropertyClassMemberDefaults); JIT_HELPER_END(Op_InitClassMemberSet); } @@ -7047,7 +7222,7 @@ using namespace Js; PropertyId propertyId = JavascriptOperators::GetPropertyId(elementName, scriptContext); - RecyclableObject::FromVar(object)->SetAccessors(propertyId, nullptr, setter); + VarTo(object)->SetAccessors(propertyId, nullptr, setter); return propertyId; JIT_HELPER_END(OP_InitElemSetter); @@ -7086,14 +7261,21 @@ using namespace Js; *addr = value; } + Var JavascriptOperators::OP_LdImportMeta(uint moduleIndex, ScriptContext* scriptContext) + { + JIT_HELPER_REENTRANT_HEADER(LdImportMeta); + return scriptContext->GetLibrary()->GetModuleRecord(moduleIndex)->GetImportMetaObject(); + JIT_HELPER_END(LdImportMeta); + } + void JavascriptOperators::OP_InitClassMemberSetComputedName(Var object, Var elementName, Var value, ScriptContext* scriptContext, PropertyOperationFlags flags) { JIT_HELPER_REENTRANT_HEADER(Op_InitClassMemberSetComputedName); Js::PropertyId propertyId = JavascriptOperators::OP_InitElemSetter(object, elementName, value, scriptContext); - RecyclableObject* instance = RecyclableObject::FromVar(object); + RecyclableObject* instance = VarTo(object); // instance will be a function if it is the class constructor (otherwise it would be an object) - if (JavascriptFunction::Is(instance) && Js::PropertyIds::prototype == propertyId) + if (VarIs(instance) && Js::PropertyIds::prototype == propertyId) { // It is a TypeError to have a static member with a computed name that evaluates to 'prototype' JavascriptError::ThrowTypeError(scriptContext, JSERR_ClassStaticMethodCannotBePrototype); @@ -7107,7 +7289,7 @@ using namespace Js; { JIT_HELPER_NOT_REENTRANT_NOLOCK_HEADER(Op_IsClassConstructor); JavascriptFunction * function = JavascriptOperators::TryFromVar(instance); - return function && (function->GetFunctionInfo()->IsClassConstructor() || (!function->IsScriptFunction() && !function->IsExternalFunction())); + return function && function->GetFunctionInfo()->IsClassConstructor(); JIT_HELPER_END(Op_IsClassConstructor); } @@ -7128,7 +7310,7 @@ using namespace Js; void JavascriptOperators::OP_InitGetter(Var object, PropertyId propertyId, Var getter) { AssertMsg(!TaggedNumber::Is(object), "GetMember on a non-object?"); - RecyclableObject* recylableObject = RecyclableObject::FromVar(object); + RecyclableObject* recylableObject = VarTo(object); JIT_HELPER_NOT_REENTRANT_HEADER(OP_InitGetter, reentrancylock, recylableObject->GetScriptContext()->GetThreadContext()); recylableObject->SetAccessors(propertyId, getter, nullptr); JIT_HELPER_END(OP_InitGetter); @@ -7140,7 +7322,7 @@ using namespace Js; JIT_HELPER_SAME_ATTRIBUTES(Op_InitClassMemberGet, OP_InitGetter); JavascriptOperators::OP_InitGetter(object, propertyId, getter); - RecyclableObject::FromVar(object)->SetAttributes(propertyId, PropertyClassMemberDefaults); + VarTo(object)->SetAttributes(propertyId, PropertyClassMemberDefaults); JIT_HELPER_END(Op_InitClassMemberGet); } @@ -7151,7 +7333,7 @@ using namespace Js; PropertyId propertyId = JavascriptOperators::GetPropertyId(elementName, scriptContext); - RecyclableObject::FromVar(object)->SetAccessors(propertyId, getter, nullptr); + VarTo(object)->SetAccessors(propertyId, getter, nullptr); return propertyId; JIT_HELPER_END(OP_InitElemGetter); @@ -7161,10 +7343,10 @@ using namespace Js; { JIT_HELPER_REENTRANT_HEADER(Op_InitClassMemberGetComputedName); Js::PropertyId propertyId = JavascriptOperators::OP_InitElemGetter(object, elementName, value, scriptContext); - RecyclableObject* instance = RecyclableObject::FromVar(object); + RecyclableObject* instance = VarTo(object); // instance will be a function if it is the class constructor (otherwise it would be an object) - if (JavascriptFunction::Is(instance) && Js::PropertyIds::prototype == propertyId) + if (VarIs(instance) && Js::PropertyIds::prototype == propertyId) { // It is a TypeError to have a static member with a computed name that evaluates to 'prototype' JavascriptError::ThrowTypeError(scriptContext, JSERR_ClassStaticMethodCannotBePrototype); @@ -7179,7 +7361,7 @@ using namespace Js; JIT_HELPER_REENTRANT_HEADER(OP_InitComputedProperty); PropertyId propertyId = JavascriptOperators::GetPropertyId(elementName, scriptContext); - RecyclableObject::FromVar(object)->InitProperty(propertyId, value, flags); + VarTo(object)->InitProperty(propertyId, value, flags); JIT_HELPER_END(OP_InitComputedProperty); } @@ -7187,10 +7369,10 @@ using namespace Js; { JIT_HELPER_REENTRANT_HEADER(Op_InitClassMemberComputedName); PropertyId propertyId = JavascriptOperators::GetPropertyId(elementName, scriptContext); - RecyclableObject* instance = RecyclableObject::FromVar(object); + RecyclableObject* instance = VarTo(object); // instance will be a function if it is the class constructor (otherwise it would be an object) - if (JavascriptFunction::Is(instance) && Js::PropertyIds::prototype == propertyId) + if (VarIs(instance) && Js::PropertyIds::prototype == propertyId) { // It is a TypeError to have a static member with a computed name that evaluates to 'prototype' JavascriptError::ThrowTypeError(scriptContext, JSERR_ClassStaticMethodCannotBePrototype); @@ -7205,10 +7387,10 @@ using namespace Js; // void JavascriptOperators::OP_InitProto(Var instance, PropertyId propertyId, Var value) { - AssertMsg(RecyclableObject::Is(instance), "__proto__ member on a non-object?"); + AssertMsg(VarIs(instance), "__proto__ member on a non-object?"); Assert(propertyId == PropertyIds::__proto__); - RecyclableObject* object = RecyclableObject::FromVar(instance); + RecyclableObject* object = VarTo(instance); ScriptContext* scriptContext = object->GetScriptContext(); JIT_HELPER_NOT_REENTRANT_HEADER(OP_InitProto, reentrancylock, scriptContext->GetThreadContext()); @@ -7219,7 +7401,7 @@ using namespace Js; // b.Return NormalCompletion(empty). if (JavascriptOperators::IsObjectOrNull(value)) { - JavascriptObject::ChangePrototype(object, RecyclableObject::FromVar(value), /*validate*/false, scriptContext); + JavascriptObject::ChangePrototype(object, VarTo(value), /*validate*/false, scriptContext); } JIT_HELPER_END(OP_InitProto); } @@ -7300,7 +7482,7 @@ using namespace Js; DynamicObject* frameObject = nullptr; if (useCachedScope) { - frameObject = DynamicObject::FromVar(frameObj); + frameObject = VarTo(frameObj); __analysis_assume((uint32)frameObject->GetDynamicType()->GetTypeHandler()->GetSlotCapacity() >= formalsCount); } else @@ -7314,8 +7496,8 @@ using namespace Js; DynamicType* newType = nullptr; if (nonSimpleParamList) { - bool skipLetAttrForArguments = ((JavascriptGeneratorFunction::Is(funcCallee) || JavascriptAsyncFunction::Is(funcCallee)) ? - JavascriptGeneratorFunction::FromVar(funcCallee)->GetGeneratorVirtualScriptFunction()->GetFunctionBody()->HasReferenceableBuiltInArguments() + bool skipLetAttrForArguments = ( VarIs(funcCallee) ? + UnsafeVarTo(funcCallee)->GetGeneratorVirtualScriptFunction()->GetFunctionBody()->HasReferenceableBuiltInArguments() : funcCallee->GetFunctionBody()->HasReferenceableBuiltInArguments()); if (skipLetAttrForArguments) @@ -7528,121 +7710,57 @@ using namespace Js; Var JavascriptOperators::OP_IsInst(Var instance, Var aClass, ScriptContext* scriptContext, IsInstInlineCache* inlineCache) { JIT_HELPER_REENTRANT_HEADER(ScrObj_OP_IsInst); - if (!RecyclableObject::Is(aClass)) + if (!VarIs(aClass)) { JavascriptError::ThrowTypeError(scriptContext, JSERR_Operand_Invalid_NeedFunction, _u("instanceof")); } - RecyclableObject* constructor = RecyclableObject::FromVar(aClass); - if (scriptContext->GetConfig()->IsES6HasInstanceEnabled()) + RecyclableObject* constructor = VarTo(aClass); + if (VarIs(constructor)) { - Var instOfHandler = JavascriptOperators::GetPropertyNoCache(constructor, - PropertyIds::_symbolHasInstance, scriptContext); - if (JavascriptOperators::IsUndefinedObject(instOfHandler) - || instOfHandler == scriptContext->GetBuiltInLibraryFunction(JavascriptFunction::EntryInfo::SymbolHasInstance.GetOriginalEntryPoint())) - { - return JavascriptBoolean::ToVar(constructor->HasInstance(instance, scriptContext, inlineCache), scriptContext); - } - else + JavascriptFunction* func = VarTo(constructor); + if (func->IsBoundFunction()) { - if (!JavascriptConversion::IsCallable(instOfHandler)) - { - JavascriptError::ThrowTypeError(scriptContext, JSERR_Property_NeedFunction, _u("Symbol[Symbol.hasInstance]")); - } - - ThreadContext * threadContext = scriptContext->GetThreadContext(); - RecyclableObject *instFunc = RecyclableObject::FromVar(instOfHandler); - Var result = threadContext->ExecuteImplicitCall(instFunc, ImplicitCall_Accessor, [=]()->Js::Var - { - return CALL_FUNCTION(scriptContext->GetThreadContext(), instFunc, CallInfo(CallFlags_Value, 2), constructor, instance); - }); - - return JavascriptBoolean::ToVar(JavascriptConversion::ToBoolean(result, scriptContext) ? TRUE : FALSE, scriptContext); + BoundFunction* boundFunc = (BoundFunction*)func; + constructor = boundFunc->GetTargetFunction(); } } - else + + Var instOfHandler = JavascriptOperators::GetPropertyNoCache(constructor, + PropertyIds::_symbolHasInstance, scriptContext); + if (JavascriptOperators::IsUndefinedObject(instOfHandler)) { return JavascriptBoolean::ToVar(constructor->HasInstance(instance, scriptContext, inlineCache), scriptContext); } - JIT_HELPER_END(ScrObj_OP_IsInst); - } - - void JavascriptOperators::OP_InitClass(Var constructor, Var extends, ScriptContext * scriptContext) - { - JIT_HELPER_REENTRANT_HEADER(OP_InitClass); - if (JavascriptOperators::GetTypeId(constructor) != Js::TypeId::TypeIds_Function) - { - JavascriptError::ThrowTypeError(scriptContext, JSERR_Operand_Invalid_NeedFunction, _u("class")); - } - - RecyclableObject * ctor = RecyclableObject::FromVar(constructor); - - if (extends) + else { - switch (JavascriptOperators::GetTypeId(extends)) + if (!JavascriptConversion::IsCallable(instOfHandler)) { - case Js::TypeId::TypeIds_Null: - { - Var ctorProto = JavascriptOperators::GetProperty(constructor, ctor, Js::PropertyIds::prototype, scriptContext); - RecyclableObject * ctorProtoObj = RecyclableObject::FromVar(ctorProto); - - ctorProtoObj->SetPrototype(RecyclableObject::FromVar(extends)); - - ctorProtoObj->EnsureProperty(Js::PropertyIds::constructor); - ctorProtoObj->SetEnumerable(Js::PropertyIds::constructor, FALSE); - - break; - } - - default: - { - if (!RecyclableObject::Is(extends)) - { - JavascriptError::ThrowTypeError(scriptContext, JSERR_ErrorOnNew); - } - RecyclableObject * extendsObj = RecyclableObject::FromVar(extends); - if (!JavascriptOperators::IsConstructor(extendsObj)) - { - JavascriptError::ThrowTypeError(scriptContext, JSERR_ErrorOnNew); - } - if (!extendsObj->HasProperty(Js::PropertyIds::prototype)) - { - JavascriptError::ThrowTypeError(scriptContext, JSERR_InvalidPrototype); - } - - Var extendsProto = JavascriptOperators::GetPropertyNoCache(extends, extendsObj, Js::PropertyIds::prototype, scriptContext); - uint extendsProtoTypeId = JavascriptOperators::GetTypeId(extendsProto); - if (extendsProtoTypeId <= Js::TypeId::TypeIds_LastJavascriptPrimitiveType && extendsProtoTypeId != Js::TypeId::TypeIds_Null) - { - JavascriptError::ThrowTypeError(scriptContext, JSERR_InvalidPrototype); - } - - Var ctorProto = JavascriptOperators::GetPropertyNoCache(constructor, ctor, Js::PropertyIds::prototype, scriptContext); - RecyclableObject * ctorProtoObj = RecyclableObject::FromVar(ctorProto); - - ctorProtoObj->SetPrototype(RecyclableObject::FromVar(extendsProto)); - - ctorProtoObj->EnsureProperty(Js::PropertyIds::constructor); - ctorProtoObj->SetEnumerable(Js::PropertyIds::constructor, FALSE); + JavascriptError::ThrowTypeError(scriptContext, JSERR_Property_NeedFunction, _u("Symbol[Symbol.hasInstance]")); + } - Var protoCtor = JavascriptOperators::GetPropertyNoCache(ctorProto, ctorProtoObj, Js::PropertyIds::constructor, scriptContext); - RecyclableObject * protoCtorObj = RecyclableObject::FromVar(protoCtor); - protoCtorObj->SetPrototype(extendsObj); + ThreadContext * threadContext = scriptContext->GetThreadContext(); + RecyclableObject *instFunc = VarTo(instOfHandler); + Var result = threadContext->ExecuteImplicitCall(instFunc, ImplicitCall_Accessor, [=]()->Js::Var + { + return CALL_FUNCTION(scriptContext->GetThreadContext(), instFunc, CallInfo(CallFlags_Value, 2), constructor, instance); + }); - break; - } - } + return JavascriptBoolean::ToVar(JavascriptConversion::ToBoolean(result, scriptContext) ? TRUE : FALSE, scriptContext); } + JIT_HELPER_END(ScrObj_OP_IsInst); + } - Var proto = JavascriptOperators::GetProperty(constructor, ctor, Js::PropertyIds::prototype, scriptContext); - JavascriptOperators::OP_SetHomeObj(constructor, proto); - - JIT_HELPER_END(OP_InitClass); + Var JavascriptOperators::OP_NewClassProto(Var protoParent, ScriptContext * scriptContext) + { + JIT_HELPER_NOT_REENTRANT_HEADER(Op_NewClassProto, reentrancylock, scriptContext->GetThreadContext()); + return scriptContext->GetLibrary()->CreateClassPrototypeObject(VarTo(protoParent)); + JIT_HELPER_END(Op_NewClassProto); } void JavascriptOperators::OP_LoadUndefinedToElement(Var instance, PropertyId propertyId) { - JIT_HELPER_NOT_REENTRANT_HEADER(Op_LdElemUndef, reentrancylock, RecyclableObject::FromVar(instance)->GetScriptContext()->GetThreadContext()); + JIT_HELPER_NOT_REENTRANT_HEADER(Op_LdElemUndef, reentrancylock, VarTo(instance)->GetScriptContext()->GetThreadContext()); AssertMsg(!TaggedNumber::Is(instance), "Invalid scope/root object"); JavascriptOperators::EnsureProperty(instance, propertyId); JIT_HELPER_END(Op_LdElemUndef); @@ -7676,22 +7794,22 @@ using namespace Js; JIT_HELPER_NOT_REENTRANT_HEADER(Op_LdElemUndefDynamic, reentrancylock, scriptContext->GetThreadContext()); if (!JavascriptOperators::HasOwnPropertyNoHostObject(instance, propertyId)) { - RecyclableObject::FromVar(instance)->InitPropertyScoped(propertyId, scriptContext->GetLibrary()->GetUndefined()); + VarTo(instance)->InitPropertyScoped(propertyId, scriptContext->GetLibrary()->GetUndefined()); } JIT_HELPER_END(Op_LdElemUndefDynamic); } BOOL JavascriptOperators::EnsureProperty(Var instance, PropertyId propertyId) { - RecyclableObject *obj = RecyclableObject::FromVar(instance); + RecyclableObject *obj = VarTo(instance); return (obj && obj->EnsureProperty(propertyId)); } void JavascriptOperators::OP_EnsureNoRootProperty(Var instance, PropertyId propertyId) { JIT_HELPER_NOT_REENTRANT_NOLOCK_HEADER(Op_EnsureNoRootProperty); - Assert(RootObjectBase::Is(instance)); - RootObjectBase *obj = RootObjectBase::FromVar(instance); + Assert(VarIs(instance)); + RootObjectBase *obj = VarTo(instance); obj->EnsureNoProperty(propertyId); JIT_HELPER_END(Op_EnsureNoRootProperty); } @@ -7699,12 +7817,21 @@ using namespace Js; void JavascriptOperators::OP_EnsureNoRootRedeclProperty(Var instance, PropertyId propertyId) { JIT_HELPER_NOT_REENTRANT_NOLOCK_HEADER(Op_EnsureNoRootRedeclProperty); - Assert(RootObjectBase::Is(instance)); - RecyclableObject *obj = RecyclableObject::FromVar(instance); + Assert(VarIs(instance)); + RecyclableObject *obj = VarTo(instance); obj->EnsureNoRedeclProperty(propertyId); JIT_HELPER_END(Op_EnsureNoRootRedeclProperty); } + void JavascriptOperators::OP_EnsureCanDeclGloFunc(Var instance, PropertyId propertyId) + { + JIT_HELPER_NOT_REENTRANT_NOLOCK_HEADER(Op_EnsureCanDeclGloFunc); + Assert(VarIs(instance)); + RootObjectBase *obj = VarTo(instance); + obj->EnsureCanDeclGloFunc(propertyId); + JIT_HELPER_END(Op_EnsureCanDeclGloFunc); + } + void JavascriptOperators::OP_ScopedEnsureNoRedeclProperty(FrameDisplay *pDisplay, PropertyId propertyId, Var defaultInstance) { JIT_HELPER_NOT_REENTRANT_NOLOCK_HEADER(Op_EnsureNoRedeclPropertyScoped); @@ -7714,14 +7841,14 @@ using namespace Js; for (i = 0; i < length; i++) { - object = RecyclableObject::FromVar(pDisplay->GetItem(i)); + object = VarTo(pDisplay->GetItem(i)); if (object->EnsureNoRedeclProperty(propertyId)) { return; } } - object = RecyclableObject::FromVar(defaultInstance); + object = VarTo(defaultInstance); object->EnsureNoRedeclProperty(propertyId); JIT_HELPER_END(Op_EnsureNoRedeclPropertyScoped); } @@ -7736,7 +7863,7 @@ using namespace Js; JavascriptError::ThrowTypeError(scriptContext, JSERR_Operand_Invalid_NeedObject, _u("in")); } - RecyclableObject* object = RecyclableObject::FromVar(instance); + RecyclableObject* object = VarTo(instance); BOOL result; PropertyRecord const * propertyRecord = nullptr; uint32 index; @@ -7754,7 +7881,7 @@ using namespace Js; PropertyValueInfo info; if (propertyRecordUsageCache->TryGetPropertyFromCache(instance, object, &value, scriptContext, &info, cacheOwner, nullptr)) { - Assert(JavascriptBoolean::Is(value)); + Assert(VarIs(value)); return value; } result = JavascriptOperators::GetPropertyWPCache(instance, object, propertyRecordUsageCache->GetPropertyRecord()->GetPropertyId(), &value, scriptContext, &info); @@ -7960,7 +8087,7 @@ using namespace Js; inline Var JavascriptOperators::PatchGetRootValue(FunctionBody *const functionBody, TInlineCache *const inlineCache, const InlineCacheIndex inlineCacheIndex, DynamicObject * object, PropertyId propertyId) { JIT_HELPER_REENTRANT_HEADER(Op_PatchGetRootValue); - AssertMsg(RootObjectBase::Is(object), "Root must be a global object!"); + AssertMsg(VarIs(object), "Root must be a global object!"); ScriptContext *const scriptContext = functionBody->GetScriptContext(); @@ -7993,7 +8120,7 @@ using namespace Js; Var JavascriptOperators::PatchGetRootValueForTypeOf(FunctionBody *const functionBody, TInlineCache *const inlineCache, const InlineCacheIndex inlineCacheIndex, DynamicObject * object, PropertyId propertyId) { JIT_HELPER_REENTRANT_HEADER(Op_PatchGetRootValueForTypeOf); - AssertMsg(RootObjectBase::Is(object), "Root must be a global object!"); + AssertMsg(VarIs(object), "Root must be a global object!"); ScriptContext *const scriptContext = functionBody->GetScriptContext(); @@ -8014,7 +8141,8 @@ using namespace Js; #endif value = nullptr; BEGIN_TYPEOF_ERROR_HANDLER(scriptContext); - if (JavascriptOperators::GetRootProperty(RecyclableObject::FromVar(object), propertyId, &value, scriptContext, &info)) + AssertOrFailFast(VarIsCorrectType(static_cast(object))); + if (JavascriptOperators::GetRootProperty(object, propertyId, &value, scriptContext, &info)) { if (scriptContext->IsUndeclBlockVar(value)) { @@ -8042,13 +8170,13 @@ using namespace Js; functionBody, inlineCache, inlineCacheIndex, - DynamicObject::FromVar(instance), + VarTo(instance), propertyId); } Var JavascriptOperators::PatchGetRootValueNoFastPath(FunctionBody *const functionBody, InlineCache *const inlineCache, const InlineCacheIndex inlineCacheIndex, DynamicObject* object, PropertyId propertyId) { - AssertMsg(RootObjectBase::Is(object), "Root must be a global object!"); + AssertMsg(VarIs(object), "Root must be a global object!"); ScriptContext *const scriptContext = functionBody->GetScriptContext(); @@ -8071,7 +8199,7 @@ using namespace Js; PropertyValueInfo::SetCacheInfo(&info, functionBody, inlineCache, inlineCacheIndex, !IsFromFullJit); for (uint16 i = 0; i < length; i++) { - RecyclableObject* object = RecyclableObject::UnsafeFromVar(pDisplay->GetItem(i)); + RecyclableObject* object = UnsafeVarTo(pDisplay->GetItem(i)); Var value; if (CacheOperators::TryGetProperty( @@ -8108,7 +8236,7 @@ using namespace Js; } // No one in the scope stack has the property, so get it from the default instance provided by the caller. - Var value = JavascriptOperators::PatchGetRootValue(functionBody, inlineCache, inlineCacheIndex, DynamicObject::FromVar(defaultInstance), propertyId); + Var value = JavascriptOperators::PatchGetRootValue(functionBody, inlineCache, inlineCacheIndex, VarTo(defaultInstance), propertyId); if (scriptContext->IsUndeclBlockVar(value)) { JavascriptError::ThrowReferenceError(scriptContext, JSERR_UseBeforeDeclaration); @@ -8213,7 +8341,7 @@ using namespace Js; JIT_HELPER_REENTRANT_HEADER(Op_PatchGetRootMethod); Assert(inlineCache != nullptr); - AssertMsg(RootObjectBase::Is(object), "Root must be a global object!"); + AssertMsg(VarIs(object), "Root must be a global object!"); ScriptContext *const scriptContext = functionBody->GetScriptContext(); @@ -8275,7 +8403,7 @@ using namespace Js; PropertyValueInfo info; PropertyValueInfo::SetCacheInfo(&info, functionBody, inlineCache, inlineCacheIndex, !IsFromFullJit); - const bool isRoot = RootObjectBase::Is(object); + const bool isRoot = VarIs(object); Var value; if (CacheOperators::TryGetProperty( instance, isRoot, object, propertyId, &value, scriptContext, nullptr, &info)) @@ -8330,13 +8458,13 @@ using namespace Js; functionBody, inlineCache, inlineCacheIndex, - DynamicObject::FromVar(instance), + VarTo(instance), propertyId); } Var JavascriptOperators::PatchGetRootMethodNoFastPath(FunctionBody *const functionBody, InlineCache *const inlineCache, const InlineCacheIndex inlineCacheIndex, DynamicObject* object, PropertyId propertyId) { - AssertMsg(RootObjectBase::Is(object), "Root must be a global object!"); + AssertMsg(VarIs(object), "Root must be a global object!"); PropertyValueInfo info; PropertyValueInfo::SetCacheInfo(&info, functionBody, inlineCache, inlineCacheIndex, true); @@ -8352,7 +8480,7 @@ using namespace Js; if (isRootLd) { - RootObjectBase* rootObject = RootObjectBase::FromVar(instance); + RootObjectBase* rootObject = VarTo(instance); foundValue = JavascriptOperators::GetRootPropertyReference(rootObject, propertyId, &value, scriptContext, info); } else @@ -8436,7 +8564,7 @@ using namespace Js; #if ENABLE_COPYONACCESS_ARRAY JavascriptLibrary::CheckAndConvertCopyOnAccessNativeIntArray(instance); #endif - RecyclableObject* object = RecyclableObject::FromVar(instance); + RecyclableObject* object = VarTo(instance); PropertyValueInfo info; PropertyValueInfo::SetCacheInfo(&info, functionBody, inlineCache, inlineCacheIndex, !IsFromFullJit); if (CacheOperators::TrySetProperty( @@ -8483,7 +8611,7 @@ using namespace Js; JIT_HELPER_REENTRANT_HEADER(Op_PatchPutRootValue); ScriptContext *const scriptContext = functionBody->GetScriptContext(); - RecyclableObject* object = RecyclableObject::FromVar(instance); + RecyclableObject* object = VarTo(instance); PropertyValueInfo info; PropertyValueInfo::SetCacheInfo(&info, functionBody, inlineCache, inlineCacheIndex, !IsFromFullJit); if (CacheOperators::TrySetProperty( @@ -8557,7 +8685,7 @@ using namespace Js; #if ENABLE_COPYONACCESS_ARRAY JavascriptLibrary::CheckAndConvertCopyOnAccessNativeIntArray(instance); #endif - RecyclableObject *object = RecyclableObject::UnsafeFromVar(instance); + RecyclableObject *object = UnsafeVarTo(instance); PropertyValueInfo info; PropertyValueInfo::SetCacheInfo(&info, functionBody, inlineCache, inlineCacheIndex, !IsFromFullJit); @@ -8605,7 +8733,7 @@ using namespace Js; JIT_HELPER_REENTRANT_HEADER(Op_PatchPutRootValueNoLocalFastPath); ScriptContext *const scriptContext = functionBody->GetScriptContext(); - RecyclableObject *object = RecyclableObject::FromVar(instance); + RecyclableObject *object = VarTo(instance); PropertyValueInfo info; PropertyValueInfo::SetCacheInfo(&info, functionBody, inlineCache, inlineCacheIndex, !IsFromFullJit); @@ -8661,7 +8789,7 @@ using namespace Js; JavascriptOperators::SetPropertyOnTaggedNumber(instance, nullptr, propertyId, newValue, scriptContext, flags); return; } - RecyclableObject* object = RecyclableObject::FromVar(instance); + RecyclableObject* object = VarTo(instance); PropertyValueInfo info; PropertyValueInfo::SetCacheInfo(&info, functionBody, inlineCache, inlineCacheIndex, true); @@ -8676,7 +8804,7 @@ using namespace Js; { ScriptContext *const scriptContext = functionBody->GetScriptContext(); - RecyclableObject* object = RecyclableObject::FromVar(instance); + RecyclableObject* object = VarTo(instance); PropertyValueInfo info; PropertyValueInfo::SetCacheInfo(&info, functionBody, inlineCache, inlineCacheIndex, true); @@ -8687,15 +8815,95 @@ using namespace Js; } } + template + inline bool JavascriptOperators::PatchPutValueCantChangeType(FunctionBody *const functionBody, TInlineCache *const inlineCache, const InlineCacheIndex inlineCacheIndex, Var instance, PropertyId propertyId, Var newValue, PropertyOperationFlags flags) + { + JIT_HELPER_REENTRANT_HEADER(Op_PatchPutValueCantChangeType); + JIT_HELPER_SAME_ATTRIBUTES(Op_PatchPutValueCantChangeType, Op_PatchPutValue); + + Type * oldType = VarIs(instance) ? UnsafeVarTo(instance)->GetType() : nullptr; + PatchPutValueWithThisPtr(functionBody, inlineCache, inlineCacheIndex, instance, propertyId, newValue, instance, flags); + return (oldType != nullptr && oldType != UnsafeVarTo(instance)->GetType()); + + JIT_HELPER_END(Op_PatchPutValueCantChangeType); + } + JIT_HELPER_TEMPLATE(Op_PatchPutValueCantChangeType, Op_PatchPutValuePolymorphicCantChangeType); + template bool JavascriptOperators::PatchPutValueCantChangeType(FunctionBody *const functionBody, InlineCache *const inlineCache, const InlineCacheIndex inlineCacheIndex, Var instance, PropertyId propertyId, Var newValue, PropertyOperationFlags flags); + template bool JavascriptOperators::PatchPutValueCantChangeType(FunctionBody *const functionBody, PolymorphicInlineCache *const inlineCache, const InlineCacheIndex inlineCacheIndex, Var instance, PropertyId propertyId, Var newValue, PropertyOperationFlags flags); + + template + inline bool JavascriptOperators::PatchPutValueWithThisPtrCantChangeType(FunctionBody *const functionBody, TInlineCache *const inlineCache, const InlineCacheIndex inlineCacheIndex, Var instance, PropertyId propertyId, Var newValue, Var thisInstance, PropertyOperationFlags flags) + { + JIT_HELPER_REENTRANT_HEADER(Op_PatchPutValueWithThisPtrCantChangeType); + JIT_HELPER_SAME_ATTRIBUTES(Op_PatchPutValueWithThisPtrCantChangeType, Op_PatchPutValueWithThisPtr); + + Type * oldType = VarIs(instance) ? UnsafeVarTo(instance)->GetType() : nullptr; + PatchPutValueWithThisPtr(functionBody, inlineCache, inlineCacheIndex, instance, propertyId, newValue, thisInstance, flags); + return (oldType != nullptr && oldType != UnsafeVarTo(instance)->GetType()); + + JIT_HELPER_END(Op_PatchPutValueWithThisPtrCantChangeType); + } + JIT_HELPER_TEMPLATE(Op_PatchPutValueWithThisPtrCantChangeType, Op_PatchPutValueWithThisPtrPolymorphicCantChangeType); + template bool JavascriptOperators::PatchPutValueWithThisPtrCantChangeType(FunctionBody *const functionBody, InlineCache *const inlineCache, const InlineCacheIndex inlineCacheIndex, Var instance, PropertyId propertyId, Var newValue, Var thisInstance, PropertyOperationFlags flags); + template bool JavascriptOperators::PatchPutValueWithThisPtrCantChangeType(FunctionBody *const functionBody, PolymorphicInlineCache *const inlineCache, const InlineCacheIndex inlineCacheIndex, Var instance, PropertyId propertyId, Var newValue, Var thisInstance, PropertyOperationFlags flags); + + template + inline bool JavascriptOperators::PatchPutValueNoLocalFastPathCantChangeType(FunctionBody *const functionBody, TInlineCache *const inlineCache, const InlineCacheIndex inlineCacheIndex, Var instance, PropertyId propertyId, Var newValue, PropertyOperationFlags flags) + { + JIT_HELPER_REENTRANT_HEADER(Op_PatchPutValueNoLocalFastPathCantChangeType); + JIT_HELPER_SAME_ATTRIBUTES(Op_PatchPutValueNoLocalFastPathCantChangeType, Op_PatchPutValueNoLocalFastPath); + + Type * oldType = VarIs(instance) ? UnsafeVarTo(instance)->GetType() : nullptr; + PatchPutValueWithThisPtrNoLocalFastPath(functionBody, inlineCache, inlineCacheIndex, instance, propertyId, newValue, instance, flags); + return (oldType != nullptr && oldType != UnsafeVarTo(instance)->GetType()); + + JIT_HELPER_END(Op_PatchPutValueNoLocalFastPathCantChangeType); + } + JIT_HELPER_TEMPLATE(Op_PatchPutValueNoLocalFastPathCantChangeType, Op_PatchPutValueNoLocalFastPathPolymorphicCantChangeType); + template bool JavascriptOperators::PatchPutValueNoLocalFastPathCantChangeType(FunctionBody *const functionBody, InlineCache *const inlineCache, const InlineCacheIndex inlineCacheIndex, Var instance, PropertyId propertyId, Var newValue, PropertyOperationFlags flags); + template bool JavascriptOperators::PatchPutValueNoLocalFastPathCantChangeType(FunctionBody *const functionBody, PolymorphicInlineCache *const inlineCache, const InlineCacheIndex inlineCacheIndex, Var instance, PropertyId propertyId, Var newValue, PropertyOperationFlags flags); + + template + inline bool JavascriptOperators::PatchPutValueWithThisPtrNoLocalFastPathCantChangeType(FunctionBody *const functionBody, TInlineCache *const inlineCache, const InlineCacheIndex inlineCacheIndex, Var instance, PropertyId propertyId, Var newValue, Var thisInstance, PropertyOperationFlags flags) + { + JIT_HELPER_REENTRANT_HEADER(Op_PatchPutValueWithThisPtrNoLocalFastPathCantChangeType); + JIT_HELPER_SAME_ATTRIBUTES(Op_PatchPutValueWithThisPtrNoLocalFastPathCantChangeType, Op_PatchPutValueWithThisPtrNoLocalFastPath); + + Type * oldType = VarIs(instance) ? UnsafeVarTo(instance)->GetType() : nullptr; + PatchPutValueWithThisPtrNoLocalFastPath(functionBody, inlineCache, inlineCacheIndex, instance, propertyId, newValue, thisInstance, flags); + return (oldType != nullptr && oldType != UnsafeVarTo(instance)->GetType()); + + JIT_HELPER_END(Op_PatchPutValueWithThisPtrNoLocalFastPathCantChangeType); + } + JIT_HELPER_TEMPLATE(Op_PatchPutValueWithThisPtrNoLocalFastPathCantChangeType, Op_PatchPutValueWithThisPtrNoLocalFastPathPolymorphicCantChangeType); + template bool JavascriptOperators::PatchPutValueWithThisPtrNoLocalFastPathCantChangeType(FunctionBody *const functionBody, InlineCache *const inlineCache, const InlineCacheIndex inlineCacheIndex, Var instance, PropertyId propertyId, Var newValue, Var thisInstance, PropertyOperationFlags flags); + template bool JavascriptOperators::PatchPutValueWithThisPtrNoLocalFastPathCantChangeType(FunctionBody *const functionBody, PolymorphicInlineCache *const inlineCache, const InlineCacheIndex inlineCacheIndex, Var instance, PropertyId propertyId, Var newValue, Var thisInstance, PropertyOperationFlags flags); + + template + inline bool JavascriptOperators::PatchInitValueCantChangeType(FunctionBody *const functionBody, TInlineCache *const inlineCache, const InlineCacheIndex inlineCacheIndex, RecyclableObject* object, PropertyId propertyId, Var newValue) + { + JIT_HELPER_REENTRANT_HEADER(Op_PatchInitValueCantChangeType); + JIT_HELPER_SAME_ATTRIBUTES(Op_PatchInitValueCantChangeType, Op_PatchInitValue); + + Type * oldType = VarIs(object) ? UnsafeVarTo(object)->GetType() : nullptr; + PatchInitValue(functionBody, inlineCache, inlineCacheIndex, object, propertyId, newValue); + return (oldType != nullptr && oldType != UnsafeVarTo(object)->GetType()); + + JIT_HELPER_END(Op_PatchInitValueCantChangeType); + } + JIT_HELPER_TEMPLATE(Op_PatchInitValueCantChangeType, Op_PatchInitValuePolymorphicCantChangeType); + template bool JavascriptOperators::PatchInitValueCantChangeType(FunctionBody *const functionBody, InlineCache *const inlineCache, const InlineCacheIndex inlineCacheIndex, RecyclableObject* object, PropertyId propertyId, Var newValue); + template bool JavascriptOperators::PatchInitValueCantChangeType(FunctionBody *const functionBody, PolymorphicInlineCache *const inlineCache, const InlineCacheIndex inlineCacheIndex, RecyclableObject* object, PropertyId propertyId, Var newValue); + template inline bool JavascriptOperators::PatchPutValueCheckLayout(FunctionBody *const functionBody, TInlineCache *const inlineCache, const InlineCacheIndex inlineCacheIndex, Var instance, PropertyId propertyId, Var newValue, PropertyOperationFlags flags) { JIT_HELPER_REENTRANT_HEADER(Op_PatchPutValueCheckLayout); JIT_HELPER_SAME_ATTRIBUTES(Op_PatchPutValueCheckLayout, Op_PatchPutValue); - DynamicTypeHandler * oldTypeHandler = DynamicObject::Is(instance) ? DynamicObject::FromVar(instance)->GetTypeHandler() : nullptr; + DynamicTypeHandler * oldTypeHandler = VarIs(instance) ? UnsafeVarTo(instance)->GetTypeHandler() : nullptr; PatchPutValueWithThisPtr(functionBody, inlineCache, inlineCacheIndex, instance, propertyId, newValue, instance, flags); - return (oldTypeHandler != nullptr && LayoutChanged(DynamicObject::FromVar(instance), oldTypeHandler)); + return (oldTypeHandler != nullptr && LayoutChanged(UnsafeVarTo(instance), oldTypeHandler)); JIT_HELPER_END(Op_PatchPutValueCheckLayout); } @@ -8709,9 +8917,9 @@ using namespace Js; JIT_HELPER_REENTRANT_HEADER(Op_PatchPutValueWithThisPtrCheckLayout); JIT_HELPER_SAME_ATTRIBUTES(Op_PatchPutValueWithThisPtrCheckLayout, Op_PatchPutValueWithThisPtr); - DynamicTypeHandler * oldTypeHandler = DynamicObject::Is(instance) ? DynamicObject::FromVar(instance)->GetTypeHandler() : nullptr; + DynamicTypeHandler * oldTypeHandler = VarIs(instance) ? UnsafeVarTo(instance)->GetTypeHandler() : nullptr; PatchPutValueWithThisPtr(functionBody, inlineCache, inlineCacheIndex, instance, propertyId, newValue, thisInstance, flags); - return (oldTypeHandler != nullptr && LayoutChanged(DynamicObject::FromVar(instance), oldTypeHandler)); + return (oldTypeHandler != nullptr && LayoutChanged(UnsafeVarTo(instance), oldTypeHandler)); JIT_HELPER_END(Op_PatchPutValueWithThisPtrCheckLayout); } @@ -8725,9 +8933,9 @@ using namespace Js; JIT_HELPER_REENTRANT_HEADER(Op_PatchPutValueNoLocalFastPathCheckLayout); JIT_HELPER_SAME_ATTRIBUTES(Op_PatchPutValueNoLocalFastPathCheckLayout, Op_PatchPutValueNoLocalFastPath); - DynamicTypeHandler * oldTypeHandler = DynamicObject::Is(instance) ? DynamicObject::FromVar(instance)->GetTypeHandler() : nullptr; + DynamicTypeHandler * oldTypeHandler = VarIs(instance) ? UnsafeVarTo(instance)->GetTypeHandler() : nullptr; PatchPutValueWithThisPtrNoLocalFastPath(functionBody, inlineCache, inlineCacheIndex, instance, propertyId, newValue, instance, flags); - return (oldTypeHandler != nullptr && LayoutChanged(DynamicObject::FromVar(instance), oldTypeHandler)); + return (oldTypeHandler != nullptr && LayoutChanged(UnsafeVarTo(instance), oldTypeHandler)); JIT_HELPER_END(Op_PatchPutValueNoLocalFastPathCheckLayout); } @@ -8741,9 +8949,9 @@ using namespace Js; JIT_HELPER_REENTRANT_HEADER(Op_PatchPutValueWithThisPtrNoLocalFastPathCheckLayout); JIT_HELPER_SAME_ATTRIBUTES(Op_PatchPutValueWithThisPtrNoLocalFastPathCheckLayout, Op_PatchPutValueWithThisPtrNoLocalFastPath); - DynamicTypeHandler * oldTypeHandler = DynamicObject::Is(instance) ? DynamicObject::FromVar(instance)->GetTypeHandler() : nullptr; + DynamicTypeHandler * oldTypeHandler = VarIs(instance) ? UnsafeVarTo(instance)->GetTypeHandler() : nullptr; PatchPutValueWithThisPtrNoLocalFastPath(functionBody, inlineCache, inlineCacheIndex, instance, propertyId, newValue, thisInstance, flags); - return (oldTypeHandler != nullptr && LayoutChanged(DynamicObject::FromVar(instance), oldTypeHandler)); + return (oldTypeHandler != nullptr && LayoutChanged(UnsafeVarTo(instance), oldTypeHandler)); JIT_HELPER_END(Op_PatchPutValueWithThisPtrNoLocalFastPathCheckLayout); } @@ -8757,9 +8965,9 @@ using namespace Js; JIT_HELPER_REENTRANT_HEADER(Op_PatchInitValueCheckLayout); JIT_HELPER_SAME_ATTRIBUTES(Op_PatchInitValueCheckLayout, Op_PatchInitValue); - DynamicTypeHandler * oldTypeHandler = DynamicObject::Is(object) ? DynamicObject::FromVar(object)->GetTypeHandler() : nullptr; + DynamicTypeHandler * oldTypeHandler = VarIs(object) ? UnsafeVarTo(object)->GetTypeHandler() : nullptr; PatchInitValue(functionBody, inlineCache, inlineCacheIndex, object, propertyId, newValue); - return (oldTypeHandler != nullptr && LayoutChanged(DynamicObject::FromVar(object), oldTypeHandler)); + return (oldTypeHandler != nullptr && LayoutChanged(UnsafeVarTo(object), oldTypeHandler)); JIT_HELPER_END(Op_PatchInitValueCheckLayout); } @@ -8867,7 +9075,10 @@ using namespace Js; { JavascriptOperators::InitProperty(object, PropertyIds::value, descriptor.GetValue()); } - JavascriptOperators::InitProperty(object, PropertyIds::writable, JavascriptBoolean::ToVar(descriptor.IsWritable(),scriptContext)); + if (descriptor.WritableSpecified()) + { + JavascriptOperators::InitProperty(object, PropertyIds::writable, JavascriptBoolean::ToVar(descriptor.IsWritable(), scriptContext)); + } } else if (descriptor.IsAccessorDescriptor()) { @@ -8890,15 +9101,26 @@ using namespace Js; // Return value: // - TRUE = success. // - FALSE (can throw depending on throwOnError parameter) = unsuccessful. - BOOL JavascriptOperators::DefineOwnPropertyDescriptor(RecyclableObject* obj, PropertyId propId, const PropertyDescriptor& descriptor, bool throwOnError, ScriptContext* scriptContext) + BOOL JavascriptOperators::DefineOwnPropertyDescriptor(RecyclableObject* obj, PropertyId propId, const PropertyDescriptor& descriptor, bool throwOnError, ScriptContext* scriptContext, PropertyOperationFlags flags /* = Js::PropertyOperation_None */) { Assert(obj); Assert(scriptContext); - if (JavascriptProxy::Is(obj)) + if (VarIs(obj)) { - return JavascriptProxy::DefineOwnPropertyDescriptor(obj, propId, descriptor, throwOnError, scriptContext); + return JavascriptProxy::DefineOwnPropertyDescriptor(obj, propId, descriptor, throwOnError, scriptContext, flags); } +#ifdef _CHAKRACOREBUILD + else if (VarIs(obj)) + { + // See if there is a trap for defineProperty. + BOOL wrapperResult = CustomExternalWrapperObject::DefineOwnPropertyDescriptor(obj, propId, descriptor, throwOnError, scriptContext); + if (wrapperResult) + { + return TRUE; + } + } +#endif PropertyDescriptor currentDescriptor; BOOL isCurrentDescriptorDefined = JavascriptOperators::GetOwnPropertyDescriptor(obj, propId, scriptContext, ¤tDescriptor); @@ -8940,7 +9162,13 @@ using namespace Js; BOOL tempResult = obj->SetPropertyWithAttributes(propId, filledDescriptor.GetValue(), filledDescriptor.GetAttributes(), nullptr); if (!obj->IsExternal() && !tempResult) { - Assert(TypedArrayBase::Is(obj)); // typed array returns false when canonical numeric index is not integer or out of range + Assert( + // Arrays return false when length property is non-writable and property is numeric + // and greater than or equal to length + DynamicObject::IsAnyArray(obj) || + // Typed arrays return false when canonical numeric index is not integer or out of range + DynamicObject::IsAnyTypedArray(obj) + ); return FALSE; } } @@ -9040,7 +9268,7 @@ using namespace Js; if (isSetAccessorsSuccess) { tempDescriptor.SetAttributes(preserveFromObject, PropertyConfigurable | PropertyEnumerable); - forceSetAttributes = true; // use SetAttrbiutes with 'force' as default attributes in type system are different from ES5. + forceSetAttributes = true; // use SetAttributes with 'force' as default attributes in type system are different from ES5. mergeDescriptors = true; } } @@ -9268,6 +9496,64 @@ using namespace Js; return DefineOwnPropertyDescriptor(arr, propId, descriptor, throwOnError, scriptContext); } + // ES2017: 9.4.5.3 https://tc39.github.io/ecma262/#sec-integer-indexed-exotic-objects-defineownproperty-p-desc + BOOL JavascriptOperators::DefineOwnPropertyForTypedArray(TypedArrayBase* typedArray, PropertyId propId, const PropertyDescriptor& descriptor, bool throwOnError, ScriptContext* scriptContext) + { + // 1. Assert: IsPropertyKey(P) is true. + // 2. Assert: Assert: O is an Object that has a [[ViewedArrayBuffer]] internal slot. + + const PropertyRecord* propertyRecord = scriptContext->GetPropertyName(propId); + // 3. If Type(P) is String, then + // a. Let numericIndex be ! CanonicalNumericIndexString(P). + // b. If numericIndex is not undefined, then + // i. if IsInteger(numbericIndex), return false + // ii. if numbericIndex = -0, return false + // iii. If numericIndex < 0, return false. + + if (propertyRecord->IsNumeric()) { + uint32 uint32Index = propertyRecord->GetNumericValue(); + // iv. Let length be O.[[ArrayLength]]. + uint32 length = typedArray->GetLength(); + // v. If numericIndex >= length, return false. + if (uint32Index >= length) + { + return Reject(throwOnError, scriptContext, JSERR_InvalidTypedArrayIndex, propId); + } + // vi. If IsAccessorDescriptor(Desc) is true, return false. + // vii. If Desc has a[[Configurable]] field and if Desc.[[Configurable]] is true, return false. + // viii. If Desc has an[[Enumerable]] field and if Desc.[[Enumerable]] is false, return false. + // ix. If Desc has a[[Writable]] field and if Desc.[[Writable]] is false, return false. + if (descriptor.IsAccessorDescriptor() + || (descriptor.ConfigurableSpecified() && descriptor.IsConfigurable()) + || (descriptor.EnumerableSpecified() && !descriptor.IsEnumerable()) + || (descriptor.WritableSpecified() && !descriptor.IsWritable())) + { + return Reject(throwOnError, scriptContext, JSERR_DefineProperty_NotConfigurable, propId); + } // x. If Desc has a[[Value]] field, then + // 1. Let value be Desc.[[Value]]. + // 2. Return ? IntegerIndexedElementSet(O, numericIndex, value). + if (descriptor.ValueSpecified()) + { + Js::Var value = descriptor.GetValue(); + return typedArray->DirectSetItem(uint32Index, value); + } + // xi. Return true. + return true; + } + if (!propertyRecord->IsSymbol()) + { + PropertyString *propertyString = scriptContext->GetPropertyString(propId); + double result; + if (JavascriptConversion::CanonicalNumericIndexString(propertyString, &result, scriptContext)) + { + return Reject(throwOnError, scriptContext, JSERR_InvalidTypedArrayIndex, propId); + } + } + // 4. Return ! OrdinaryDefineOwnProperty(O, P, Desc). + return DefineOwnPropertyDescriptor(typedArray, propId, descriptor, throwOnError, scriptContext); + } + + BOOL JavascriptOperators::SetPropertyDescriptor(RecyclableObject* object, PropertyId propId, const PropertyDescriptor& descriptor) { if (descriptor.ValueSpecified()) @@ -9304,7 +9590,7 @@ using namespace Js; } Var value; - RecyclableObject* propertySpecObj = RecyclableObject::FromVar(propertySpec); + RecyclableObject* propertySpecObj = VarTo(propertySpec); if (JavascriptOperators::HasProperty(propertySpecObj, PropertyIds::enumerable) == TRUE) { @@ -9403,7 +9689,7 @@ using namespace Js; } Var value; - RecyclableObject* propertySpecObj = RecyclableObject::FromVar(propertySpec); + RecyclableObject* propertySpecObj = VarTo(propertySpec); if (JavascriptOperators::GetPropertyNoCache(propertySpecObj, PropertyIds::enumerable, &value, scriptContext)) { @@ -9448,9 +9734,9 @@ using namespace Js; BOOL JavascriptOperators::ToPropertyDescriptor(Var propertySpec, PropertyDescriptor* descriptor, ScriptContext* scriptContext) { - if (JavascriptProxy::Is(propertySpec) || ( - RecyclableObject::Is(propertySpec) && - JavascriptOperators::CheckIfPrototypeChainContainsProxyObject(RecyclableObject::FromVar(propertySpec)->GetPrototype()))) + if (VarIs(propertySpec) || ( + VarIs(propertySpec) && + JavascriptOperators::CheckIfPrototypeChainContainsProxyObject(VarTo(propertySpec)->GetPrototype()))) { if (ToPropertyDescriptorForProxyObjects(propertySpec, descriptor, scriptContext) == FALSE) { @@ -9550,7 +9836,7 @@ using namespace Js; } else if (descriptor.IsAccessorDescriptor()) { - // The reason is that JavascriptOperators::OP_SetProperty checks for RecyclableObject::FromVar(instance)->IsWritableOrAccessor(propertyId), + // The reason is that JavascriptOperators::OP_SetProperty checks for VarTo(instance)->IsWritableOrAccessor(propertyId), // which should in fact check for 'is writable or accessor' but since there is no GetAttributes, we can't do that efficiently. isWritable = TRUE; } @@ -9576,9 +9862,9 @@ using namespace Js; JIT_HELPER_NOT_REENTRANT_NOLOCK_HEADER(OP_ClearAttributes); Assert(instance); - if (RecyclableObject::Is(instance)) + if (VarIs(instance)) { - RecyclableObject* obj = RecyclableObject::FromVar(instance); + RecyclableObject* obj = VarTo(instance); obj->SetAttributes(propertyId, PropertyNone); } JIT_HELPER_END(OP_ClearAttributes); @@ -9744,7 +10030,7 @@ using namespace Js; Var thisVar = RootToThisObject(object, scriptContext); - RecyclableObject* marshalledFunction = RecyclableObject::UnsafeFromVar( + RecyclableObject* marshalledFunction = UnsafeVarTo( CrossSite::MarshalVar(requestContext, function, scriptContext)); Var result = CALL_ENTRYPOINT(threadContext, marshalledFunction->GetEntryPoint(), function, CallInfo(flags, 1), thisVar); @@ -9790,7 +10076,7 @@ using namespace Js; RecyclableObject* marshalledFunction = function; if (requestContext) { - marshalledFunction = RecyclableObject::UnsafeFromVar(CrossSite::MarshalVar(requestContext, function, function->GetScriptContext())); + marshalledFunction = UnsafeVarTo(CrossSite::MarshalVar(requestContext, function, function->GetScriptContext())); } Var result = CALL_ENTRYPOINT(threadContext, marshalledFunction->GetEntryPoint(), function, CallInfo(flags, 2), thisVar, putValue); @@ -9848,14 +10134,14 @@ using namespace Js; void JavascriptOperators::SetConcatStrMultiItem(Var concatStr, Var str, uint index, ScriptContext * scriptContext) { - ConcatStringMulti::FromVar(concatStr)->SetItem(index, + VarTo(concatStr)->SetItem(index, JavascriptConversion::ToPrimitiveString(str, scriptContext)); } void JavascriptOperators::SetConcatStrMultiItem2(Var concatStr, Var str1, Var str2, uint index, ScriptContext * scriptContext) { - ConcatStringMulti * cs = ConcatStringMulti::FromVar(concatStr); + ConcatStringMulti * cs = VarTo(concatStr); cs->SetItem(index, JavascriptConversion::ToPrimitiveString(str1, scriptContext)); cs->SetItem(index + 1, JavascriptConversion::ToPrimitiveString(str2, scriptContext)); } @@ -9863,14 +10149,14 @@ using namespace Js; void JavascriptOperators::OP_SetComputedNameVar(Var method, Var computedNameVar) { JIT_HELPER_NOT_REENTRANT_NOLOCK_HEADER(SetComputedNameVar); - ScriptFunctionBase *scriptFunction = ScriptFunctionBase::FromVar(method); + ScriptFunctionBase *scriptFunction = VarTo(method); scriptFunction->SetComputedNameVar(computedNameVar); JIT_HELPER_END(SetComputedNameVar); } void JavascriptOperators::OP_SetHomeObj(Var method, Var homeObj) { - ScriptFunctionBase *scriptFunction = ScriptFunctionBase::FromVar(method); + ScriptFunctionBase *scriptFunction = VarTo(method); JIT_HELPER_NOT_REENTRANT_HEADER(SetHomeObj, reentrancylock, scriptFunction->GetScriptContext()->GetThreadContext()); scriptFunction->SetHomeObj(homeObj); JIT_HELPER_END(SetHomeObj); @@ -9880,12 +10166,12 @@ using namespace Js; { JIT_HELPER_NOT_REENTRANT_HEADER(LdHomeObj, reentrancylock, scriptContext->GetThreadContext()); // Ensure this is not a stack ScriptFunction - if (!ScriptFunction::Is(scriptFunction) || ThreadContext::IsOnStack(scriptFunction)) + if (!VarIs(scriptFunction) || ThreadContext::IsOnStack(scriptFunction)) { return scriptContext->GetLibrary()->GetUndefined(); } - ScriptFunction *instance = ScriptFunction::UnsafeFromVar(scriptFunction); + ScriptFunction *instance = UnsafeVarTo(scriptFunction); // We keep a reference to the current class rather than its super prototype // since the prototype could change. @@ -9898,12 +10184,12 @@ using namespace Js; Var JavascriptOperators::OP_LdHomeObjProto(Var homeObj, ScriptContext* scriptContext) { JIT_HELPER_NOT_REENTRANT_HEADER(LdHomeObjProto, reentrancylock, scriptContext->GetThreadContext()); - if (homeObj == nullptr || !RecyclableObject::Is(homeObj)) + if (homeObj == nullptr || !VarIs(homeObj)) { return scriptContext->GetLibrary()->GetUndefined(); } - RecyclableObject *thisObjPrototype = RecyclableObject::FromVar(homeObj); + RecyclableObject *thisObjPrototype = VarTo(homeObj); TypeId typeId = thisObjPrototype->GetTypeId(); @@ -9916,7 +10202,7 @@ using namespace Js; RecyclableObject *superBase = thisObjPrototype->GetPrototype(); - if (superBase == nullptr || !RecyclableObject::Is(superBase)) + if (superBase == nullptr || !VarIsCorrectType(superBase)) { return scriptContext->GetLibrary()->GetUndefined(); } @@ -9930,7 +10216,7 @@ using namespace Js; JIT_HELPER_NOT_REENTRANT_NOLOCK_HEADER(LdFuncObj); // use self as value of [[FunctionObject]] - this is true only for constructors - Assert(RecyclableObject::Is(scriptFunction)); + Assert(VarIs(scriptFunction)); return scriptFunction; JIT_HELPER_END(LdFuncObj); @@ -9939,7 +10225,7 @@ using namespace Js; Var JavascriptOperators::OP_LdFuncObjProto(Var funcObj, ScriptContext* scriptContext) { JIT_HELPER_NOT_REENTRANT_HEADER(LdFuncObjProto, reentrancylock, scriptContext->GetThreadContext()); - RecyclableObject *superCtor = RecyclableObject::FromVar(funcObj)->GetPrototype(); + RecyclableObject *superCtor = VarTo(funcObj)->GetPrototype(); if (superCtor == nullptr || !IsConstructor(superCtor)) { @@ -10064,131 +10350,21 @@ using namespace Js; JIT_HELPER_END(ImportCall); } - Var JavascriptOperators::OP_ResumeYield(ResumeYieldData* yieldData, RecyclableObject* iterator) + Var JavascriptOperators::OP_NewAwaitObject(ScriptContext* scriptContext) { - JIT_HELPER_REENTRANT_HEADER(ResumeYield); - bool isNext = yieldData->exceptionObj == nullptr; - bool isThrow = !isNext && !yieldData->exceptionObj->IsGeneratorReturnException(); - - if (iterator != nullptr) // yield* - { - ScriptContext* scriptContext = iterator->GetScriptContext(); - PropertyId propertyId = isNext ? PropertyIds::next : isThrow ? PropertyIds::throw_ : PropertyIds::return_; - Var prop = JavascriptOperators::GetProperty(iterator, propertyId, scriptContext); - - if (!isNext && JavascriptOperators::IsUndefinedOrNull(prop)) - { - if (isThrow) - { - // 5.b.iii.2 - // NOTE: If iterator does not have a throw method, this throw is going to terminate the yield* loop. - // But first we need to give iterator a chance to clean up. - - prop = JavascriptOperators::GetProperty(iterator, PropertyIds::return_, scriptContext); - if (!JavascriptOperators::IsUndefinedOrNull(prop)) - { - if (!JavascriptConversion::IsCallable(prop)) - { - JavascriptError::ThrowTypeError(scriptContext, JSERR_Property_NeedFunction, _u("return")); - } - - Var result = nullptr; - RecyclableObject* method = RecyclableObject::FromVar(prop); - BEGIN_SAFE_REENTRANT_CALL(scriptContext->GetThreadContext()) - { - Var args[] = { iterator, yieldData->data }; - CallInfo callInfo(CallFlags_Value, _countof(args)); - result = JavascriptFunction::CallFunction(method, method->GetEntryPoint(), Arguments(callInfo, args)); - } - END_SAFE_REENTRANT_CALL - - if (!JavascriptOperators::IsObject(result)) - { - JavascriptError::ThrowTypeError(scriptContext, JSERR_NeedObject); - } - } - - // 5.b.iii.3 - // NOTE: The next step throws a TypeError to indicate that there was a yield* protocol violation: - // iterator does not have a throw method. - JavascriptError::ThrowTypeError(scriptContext, JSERR_Property_NeedFunction, _u("throw")); - } - - // Do not use ThrowExceptionObject for return() API exceptions since these exceptions are not real exceptions - JavascriptExceptionOperators::DoThrow(yieldData->exceptionObj, scriptContext); - } - - if (!JavascriptConversion::IsCallable(prop)) - { - JavascriptError::ThrowTypeError(scriptContext, JSERR_Property_NeedFunction, isNext ? _u("next") : isThrow ? _u("throw") : _u("return")); - } - - RecyclableObject* method = RecyclableObject::FromVar(prop); - Var result = scriptContext->GetThreadContext()->ExecuteImplicitCall(method, Js::ImplicitCall_Accessor, [=]()->Js::Var - { - Var args[] = { iterator, yieldData->data }; - CallInfo callInfo(CallFlags_Value, _countof(args)); - return JavascriptFunction::CallFunction(method, method->GetEntryPoint(), Arguments(callInfo, args)); - }); - - if (!JavascriptOperators::IsObject(result)) - { - JavascriptError::ThrowTypeError(scriptContext, JSERR_NeedObject); - } - - if (isThrow || isNext) - { - // 5.b.ii.2 - // NOTE: Exceptions from the inner iterator throw method are propagated. - // Normal completions from an inner throw method are processed similarly to an inner next. - return result; - } - - RecyclableObject* obj = RecyclableObject::FromVar(result); - Var done = JavascriptOperators::GetProperty(obj, PropertyIds::done, scriptContext); - if (done == iterator->GetLibrary()->GetTrue()) - { - Var value = JavascriptOperators::GetProperty(obj, PropertyIds::value, scriptContext); - yieldData->exceptionObj->SetThrownObject(value); - // Do not use ThrowExceptionObject for return() API exceptions since these exceptions are not real exceptions - JavascriptExceptionOperators::DoThrow(yieldData->exceptionObj, scriptContext); - } - return result; - } - - // CONSIDER: Fast path this early out return path in JITed code before helper call to avoid the helper call overhead in the common case e.g. next() calls. - if (isNext) - { - return yieldData->data; - } - - if (isThrow) - { - // Use ThrowExceptionObject() to get debugger support for breaking on throw - JavascriptExceptionOperators::ThrowExceptionObject(yieldData->exceptionObj, yieldData->exceptionObj->GetScriptContext(), true); - } - - // CONSIDER: Using an exception to carry the return value and force finally code to execute is a bit of a janky - // solution since we have to override the value here in the case of yield* expressions. It works but is there - // a more elegant way? - // - // Instead what if ResumeYield was a "set Dst then optionally branch" opcode, that could also throw? Then we could - // avoid using a special exception entirely with byte code something like this: - // - // ;; Ry is the yieldData - // - // ResumeYield Rx Ry $returnPathLabel - // ... code like normal - // $returnPathLabel: - // Ld_A R0 Rx - // Br $exitFinallyAndReturn - // - // This would probably give better performance for the common case of calling next() on generators since we wouldn't - // have to wrap the call to the generator code in a try catch. + JIT_HELPER_NOT_REENTRANT_NOLOCK_HEADER(NewAwaitObject); + auto* awaitObject = DynamicObject::New( + scriptContext->GetRecycler(), + scriptContext->GetLibrary()->GetAwaitObjectType()); + return awaitObject; + JIT_HELPER_END(NewAwaitObject); + } - // Do not use ThrowExceptionObject for return() API exceptions since these exceptions are not real exceptions - JavascriptExceptionOperators::DoThrow(yieldData->exceptionObj, yieldData->exceptionObj->GetScriptContext()); - JIT_HELPER_END(ResumeYield); + Var JavascriptOperators::OP_NewAsyncFromSyncIterator(Var syncIterator, ScriptContext* scriptContext) + { + JIT_HELPER_NOT_REENTRANT_NOLOCK_HEADER(NewAsyncFromSyncIterator); + return scriptContext->GetLibrary()->CreateAsyncFromSyncIterator(VarTo(syncIterator)); + JIT_HELPER_END(NewAsyncFromSyncIterator); } Js::Var @@ -10210,15 +10386,15 @@ using namespace Js; case Js::TypeIds_Integer: return instance; case Js::TypeIds_RegEx: - return JavascriptRegExp::BoxStackInstance(JavascriptRegExp::FromVar(instance), deepCopy); + return JavascriptRegExp::BoxStackInstance(VarTo(instance), deepCopy); case Js::TypeIds_Object: - return DynamicObject::BoxStackInstance(DynamicObject::FromVar(instance), deepCopy); + return DynamicObject::BoxStackInstance(VarTo(instance), deepCopy); case Js::TypeIds_Array: - return JavascriptArray::BoxStackInstance(JavascriptArray::UnsafeFromVar(instance), deepCopy); + return JavascriptArray::BoxStackInstance(UnsafeVarTo(instance), deepCopy); case Js::TypeIds_NativeIntArray: - return JavascriptNativeIntArray::BoxStackInstance(JavascriptNativeIntArray::UnsafeFromVar(instance), deepCopy); + return JavascriptNativeIntArray::BoxStackInstance(UnsafeVarTo(instance), deepCopy); case Js::TypeIds_NativeFloatArray: - return JavascriptNativeFloatArray::BoxStackInstance(JavascriptNativeFloatArray::UnsafeFromVar(instance), deepCopy); + return JavascriptNativeFloatArray::BoxStackInstance(UnsafeVarTo(instance), deepCopy); case Js::TypeIds_Function: Assert(allowStackFunction); // Stack functions are deal with not mar mark them, but by nested function escape analysis @@ -10434,7 +10610,7 @@ using namespace Js; __out_bcount(length*elementSize) byte* buffer, Js::ScriptContext* scriptContext) { - Js::DynamicObject* dynamicObject = DynamicObject::FromVar(arrayObject); + Js::DynamicObject* dynamicObject = VarTo(arrayObject); if (dynamicObject->IsCrossSiteObject() || Js::TaggedInt::IsOverflow(length)) { Js::JavascriptOperators::ObjectToNativeArray(&arrayObject, valueType, length, elementSize, buffer, scriptContext); @@ -10447,13 +10623,13 @@ using namespace Js; switch (Js::JavascriptOperators::GetTypeId(arrayObject)) { case TypeIds_Array: - Js::JavascriptOperators::ObjectToNativeArray(Js::JavascriptArray::UnsafeFromVar(arrayObject), valueType, length, elementSize, buffer, scriptContext); + Js::JavascriptOperators::ObjectToNativeArray(Js::UnsafeVarTo(arrayObject), valueType, length, elementSize, buffer, scriptContext); break; case TypeIds_NativeFloatArray: - Js::JavascriptOperators::ObjectToNativeArray(Js::JavascriptNativeFloatArray::UnsafeFromVar(arrayObject), valueType, length, elementSize, buffer, scriptContext); + Js::JavascriptOperators::ObjectToNativeArray(Js::UnsafeVarTo(arrayObject), valueType, length, elementSize, buffer, scriptContext); break; case TypeIds_NativeIntArray: - Js::JavascriptOperators::ObjectToNativeArray(Js::JavascriptNativeIntArray::UnsafeFromVar(arrayObject), valueType, length, elementSize, buffer, scriptContext); + Js::JavascriptOperators::ObjectToNativeArray(Js::UnsafeVarTo(arrayObject), valueType, length, elementSize, buffer, scriptContext); break; // We can have more specialized template if needed. default: @@ -10472,30 +10648,28 @@ using namespace Js; //3.ReturnIfAbrupt(C). Var constructor = JavascriptOperators::GetProperty(object, PropertyIds::constructor, scriptContext); - if (scriptContext->GetConfig()->IsES6SpeciesEnabled()) + //4.If C is undefined, return defaultConstructor. + if (JavascriptOperators::IsUndefinedObject(constructor)) { - //4.If C is undefined, return defaultConstructor. - if (JavascriptOperators::IsUndefinedObject(constructor)) - { - return defaultConstructor; - } - //5.If Type(C) is not Object, throw a TypeError exception. - if (!JavascriptOperators::IsObject(constructor)) - { - JavascriptError::ThrowTypeError(scriptContext, JSERR_NeedObject, _u("[constructor]")); - } - //6.Let S be Get(C, @@species). - //7.ReturnIfAbrupt(S). - Var species = nullptr; - if (!JavascriptOperators::GetProperty(RecyclableObject::FromVar(constructor), - PropertyIds::_symbolSpecies, &species, scriptContext) - || JavascriptOperators::IsUndefinedOrNull(species)) - { - //8.If S is either undefined or null, return defaultConstructor. - return defaultConstructor; - } - constructor = species; + return defaultConstructor; + } + //5.If Type(C) is not Object, throw a TypeError exception. + if (!JavascriptOperators::IsObject(constructor)) + { + JavascriptError::ThrowTypeError(scriptContext, JSERR_NeedObject, _u("[constructor]")); } + //6.Let S be Get(C, @@species). + //7.ReturnIfAbrupt(S). + Var species = nullptr; + if (!JavascriptOperators::GetProperty(VarTo(constructor), + PropertyIds::_symbolSpecies, &species, scriptContext) + || JavascriptOperators::IsUndefinedOrNull(species)) + { + //8.If S is either undefined or null, return defaultConstructor. + return defaultConstructor; + } + constructor = species; + //9.If IsConstructor(S) is true, return S. RecyclableObject* constructorObj = JavascriptOperators::TryFromVar(constructor); if (constructorObj && JavascriptOperators::IsConstructor(constructorObj)) @@ -10644,7 +10818,7 @@ using namespace Js; JIT_HELPER_SAME_ATTRIBUTES(Op_Equal, Op_Equal_Full); if (aLeft == aRight) { - if (TaggedInt::Is(aLeft) || JavascriptObject::Is(aLeft)) + if (TaggedInt::Is(aLeft) || DynamicObject::IsBaseDynamicObject(aLeft)) { return true; } @@ -10654,7 +10828,7 @@ using namespace Js; } } - if (JavascriptString::Is(aLeft) && JavascriptString::Is(aRight)) + if (VarIs(aLeft) && VarIs(aRight)) { JavascriptString* left = (JavascriptString*)aLeft; JavascriptString* right = (JavascriptString*)aRight; @@ -10765,7 +10939,7 @@ using namespace Js; Var JavascriptOperators::ToUnscopablesWrapperObject(Var aRight, ScriptContext* scriptContext) { JIT_HELPER_NOT_REENTRANT_HEADER(Op_NewUnscopablesWrapperObject, reentrancylock, scriptContext->GetThreadContext()); - RecyclableObject* object = RecyclableObject::FromVar(aRight); + RecyclableObject* object = VarTo(aRight); UnscopablesWrapperObject* withWrapper = RecyclerNew(scriptContext->GetRecycler(), UnscopablesWrapperObject, object, scriptContext->GetLibrary()->GetWithType()); return withWrapper; @@ -10784,6 +10958,15 @@ using namespace Js; JIT_HELPER_END(Op_ConvNumber_Full); } + Var JavascriptOperators::ToNumeric(Var aRight, ScriptContext* scriptContext) + { + if (JavascriptOperators::GetTypeId(aRight) == TypeIds_BigInt) + { + return aRight; + } + return JavascriptOperators::ToNumber(aRight, scriptContext); + } + BOOL JavascriptOperators::IsObject(_In_ RecyclableObject* instance) { return GetTypeId(instance) > TypeIds_LastJavascriptPrimitiveType; @@ -10808,8 +10991,10 @@ using namespace Js; BOOL JavascriptOperators::IsObjectOrNull(Var instance) { + JIT_HELPER_NOT_REENTRANT_NOLOCK_HEADER(Op_IsObjectOrNull); TypeId typeId = GetTypeId(instance); return IsObjectType(typeId) || typeId == TypeIds_Null; + JIT_HELPER_END(Op_IsObjectOrNull); } BOOL JavascriptOperators::IsUndefined(_In_ RecyclableObject* instance) @@ -10860,7 +11045,7 @@ using namespace Js; BOOL JavascriptOperators::IsNull(Var instance, JavascriptLibrary* library) { - Assert(!RecyclableObject::Is(instance) ? TRUE : ((RecyclableObject*)instance)->GetScriptContext()->GetLibrary() == library ); + Assert(!VarIs(instance) ? TRUE : ((RecyclableObject*)instance)->GetScriptContext()->GetLibrary() == library ); return library->GetNull() == instance; } @@ -10899,7 +11084,7 @@ using namespace Js; BOOL JavascriptOperators::IsUndefinedObject(Var instance, JavascriptLibrary* library) { - Assert(!RecyclableObject::Is(instance) ? TRUE : ((RecyclableObject*)instance)->GetScriptContext()->GetLibrary() == library ); + Assert(!VarIs(instance) ? TRUE : ((RecyclableObject*)instance)->GetScriptContext()->GetLibrary() == library ); return JavascriptOperators::IsUndefinedObject(instance, library->GetUndefined()); } @@ -10936,7 +11121,7 @@ using namespace Js; JavascriptError::ThrowTypeError(scriptContext, JSERR_Property_NeedFunction); } - RecyclableObject* function = RecyclableObject::FromVar(func); + RecyclableObject* function = VarTo(func); return function; } @@ -10960,7 +11145,7 @@ using namespace Js; JavascriptError::ThrowTypeError(scriptContext, JSERR_NeedObject); } - return RecyclableObject::FromVar(iterator); + return VarTo(iterator); } void JavascriptOperators::IteratorClose(RecyclableObject* iterator, ScriptContext* scriptContext) @@ -10971,7 +11156,7 @@ using namespace Js; if (JavascriptConversion::IsCallable(func)) { - RecyclableObject* callable = RecyclableObject::FromVar(func); + RecyclableObject* callable = VarTo(func); scriptContext->GetThreadContext()->ExecuteImplicitCall(callable, ImplicitCall_Accessor, [=]()->Var { Js::Var args[] = { iterator }; @@ -10988,13 +11173,12 @@ using namespace Js; } } - // IteratorNext as described in ES6.0 (draft 22) Section 7.4.2 - RecyclableObject* JavascriptOperators::IteratorNext(RecyclableObject* iterator, ScriptContext* scriptContext, Var value) + RecyclableObject* JavascriptOperators::CacheIteratorNext(RecyclableObject* iterator, ScriptContext* scriptContext) { - Var func = JavascriptOperators::GetPropertyNoCache(iterator, PropertyIds::next, scriptContext); + Var nextFunc = JavascriptOperators::GetPropertyNoCache(iterator, PropertyIds::next, scriptContext); ThreadContext *threadContext = scriptContext->GetThreadContext(); - if (!JavascriptConversion::IsCallable(func)) + if (!JavascriptConversion::IsCallable(nextFunc)) { if (!threadContext->RecordImplicitException()) { @@ -11002,13 +11186,19 @@ using namespace Js; } JavascriptError::ThrowTypeError(scriptContext, JSERR_NeedFunction); } + return VarTo(nextFunc); + } - RecyclableObject* callable = RecyclableObject::FromVar(func); - Var result = threadContext->ExecuteImplicitCall(callable, ImplicitCall_Accessor, [=]() -> Var + // IteratorNext as described in ES6.0 (draft 22) Section 7.4.2 + RecyclableObject* JavascriptOperators::IteratorNext(RecyclableObject* iterator, ScriptContext* scriptContext, RecyclableObject* nextFunc, Var value) + { + ThreadContext *threadContext = scriptContext->GetThreadContext(); + + Var result = threadContext->ExecuteImplicitCall(nextFunc, ImplicitCall_Accessor, [=]() -> Var { Js::Var args[] = { iterator, value }; Js::CallInfo callInfo(Js::CallFlags_Value, _countof(args) + (value == nullptr ? -1 : 0)); - return JavascriptFunction::CallFunction(callable, callable->GetEntryPoint(), Arguments(callInfo, args)); + return JavascriptFunction::CallFunction(nextFunc, nextFunc->GetEntryPoint(), Arguments(callInfo, args)); }); if (!JavascriptOperators::IsObject(result)) @@ -11020,7 +11210,7 @@ using namespace Js; JavascriptError::ThrowTypeError(scriptContext, JSERR_NeedObject); } - return RecyclableObject::FromVar(result); + return VarTo(result); } // IteratorComplete as described in ES6.0 (draft 22) Section 7.4.3 @@ -11038,18 +11228,18 @@ using namespace Js; } // IteratorStep as described in ES6.0 (draft 22) Section 7.4.5 - bool JavascriptOperators::IteratorStep(RecyclableObject* iterator, ScriptContext* scriptContext, RecyclableObject** result) + bool JavascriptOperators::IteratorStep(RecyclableObject* iterator, ScriptContext* scriptContext, RecyclableObject* nextFunc, RecyclableObject** result) { Assert(result); - *result = JavascriptOperators::IteratorNext(iterator, scriptContext); + *result = JavascriptOperators::IteratorNext(iterator, scriptContext, nextFunc); return !JavascriptOperators::IteratorComplete(*result, scriptContext); } - bool JavascriptOperators::IteratorStepAndValue(RecyclableObject* iterator, ScriptContext* scriptContext, Var* resultValue) + bool JavascriptOperators::IteratorStepAndValue(RecyclableObject* iterator, ScriptContext* scriptContext, RecyclableObject* nextFunc, Var* resultValue) { // CONSIDER: Fast-pathing for iterators that are built-ins? - RecyclableObject* result = JavascriptOperators::IteratorNext(iterator, scriptContext); + RecyclableObject* result = JavascriptOperators::IteratorNext(iterator, scriptContext, nextFunc); if (!JavascriptOperators::IteratorComplete(result, scriptContext)) { @@ -11076,9 +11266,9 @@ using namespace Js; // If constructor.prototype is an object, we should use that as the [[Prototype]] for our obj. // Else, we set the [[Prototype]] internal slot of obj to %intrinsicProto% - which should be the default. if (JavascriptOperators::IsObjectType(JavascriptOperators::GetTypeId(proto)) && - DynamicObject::FromVar(proto) != intrinsicProto) + VarTo(proto) != intrinsicProto) { - JavascriptObject::ChangePrototype(obj, RecyclableObject::FromVar(proto), /*validate*/true, scriptContext); + JavascriptObject::ChangePrototype(obj, VarTo(proto), /*validate*/true, scriptContext); } return obj; @@ -11250,17 +11440,14 @@ using namespace Js; // Helper to fetch @@species from a constructor object Var JavascriptOperators::GetSpecies(RecyclableObject* constructor, ScriptContext* scriptContext) { - if (scriptContext->GetConfig()->IsES6SpeciesEnabled()) - { - Var species = nullptr; + Var species = nullptr; - // Let S be Get(C, @@species) - if (JavascriptOperators::GetProperty(constructor, PropertyIds::_symbolSpecies, &species, scriptContext) - && !JavascriptOperators::IsUndefinedOrNull(species)) - { - // If S is neither undefined nor null, let C be S - return species; - } + // Let S be Get(C, @@species) + if (JavascriptOperators::GetProperty(constructor, PropertyIds::_symbolSpecies, &species, scriptContext) + && !JavascriptOperators::IsUndefinedOrNull(species)) + { + // If S is neither undefined nor null, let C be S + return species; } return constructor; diff --git a/lib/Runtime/Language/JavascriptOperators.h b/lib/Runtime/Language/JavascriptOperators.h index 41f388e6ea4..70406aa8acf 100644 --- a/lib/Runtime/Language/JavascriptOperators.h +++ b/lib/Runtime/Language/JavascriptOperators.h @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #pragma once @@ -15,8 +16,6 @@ class ScriptContextInfo; namespace Js { - struct ResumeYieldData; - #define DeclareExceptionPointer(ep) \ EXCEPTION_RECORD ep##er; \ CONTEXT ep##c; \ @@ -26,7 +25,7 @@ namespace Js // and propagate all other exceptions. // // NB: Re-throw from catch unwinds the active frame but doesn't clear the stack - // (catch clauses keep accumulating at the top of the stack until a catch + // (catch clauses keep accumulating at the top of the stack until a catch // that doesn't re-throw). This is problematic if we've detected potential // stack overflow and report it via exceptions: the handling of throw // might actually overflow the stack and cause system SO exception. @@ -126,6 +125,8 @@ namespace Js static Var OP_LdCustomSpreadIteratorList(Var aRight, ScriptContext* scriptContext); static Var ToNumber(Var aRight,ScriptContext* scriptContext); static Var ToNumberInPlace(Var aRight,ScriptContext* scriptContext, JavascriptNumber* result); + static Var ToNumeric(Var aRight, ScriptContext* scriptContext); + static Var ToNumericInPlace(Var aRight, ScriptContext* scriptContext, JavascriptNumber* result); #ifdef _M_IX86 static Var Int32ToVar(int32 value, ScriptContext* scriptContext); static Var Int32ToVarInPlace(int32 value, ScriptContext* scriptContext, JavascriptNumber *result); @@ -162,6 +163,9 @@ namespace Js static BOOL StrictEqual(Var aLeft, Var aRight,ScriptContext* scriptContext); static BOOL StrictEqualString(Var aLeft, JavascriptString* aRight); static BOOL StrictEqualEmptyString(Var aLeft); +#ifdef _CHAKRACOREBUILD + static BOOL StrictEqualNumberType(Var aLeft, Var aRight, TypeId leftType, TypeId rightType, ScriptContext *requestContext); +#endif static BOOL NotStrictEqual(Var aLeft, Var aRight,ScriptContext* scriptContext); static BOOL HasOwnProperty(Var instance, PropertyId propertyId, _In_ ScriptContext * requestContext, _In_opt_ PropertyString * propString); @@ -170,6 +174,7 @@ namespace Js static BOOL EnsureProperty(Var instance, PropertyId propertyId); static void OP_EnsureNoRootProperty(Var instance, PropertyId propertyId); static void OP_EnsureNoRootRedeclProperty(Var instance, PropertyId propertyId); + static void OP_EnsureCanDeclGloFunc(Var instance, PropertyId propertyId); static void OP_ScopedEnsureNoRedeclProperty(FrameDisplay *pDisplay, PropertyId propertyId, Var instanceDefault); static JavascriptArray* GetOwnPropertyNames(Var instance, ScriptContext *scriptContext); static JavascriptArray* GetOwnPropertySymbols(Var instance, ScriptContext *scriptContext); @@ -245,15 +250,15 @@ namespace Js static TypeId GetTypeId(_In_ const Var instance); static TypeId GetTypeId(_In_ RecyclableObject* instance); static TypeId GetTypeIdNoCheck(Var instance); - template - __forceinline static T* TryFromVar(_In_ RecyclableObject* value) + template + __forceinline static T* TryFromVar(_In_ U* value) { - return T::Is(value) ? T::UnsafeFromVar(value) : nullptr; + return VarIs(value) ? UnsafeVarTo(value) : nullptr; } - template - __forceinline static T* TryFromVar(_In_ Var value) + template + __forceinline static T* TryFromVar(WriteBarrierPtr value) { - return T::Is(value) ? T::UnsafeFromVar(value) : nullptr; + return VarIs(value) ? UnsafeVarTo(value) : nullptr; } static BOOL IsObject(_In_ Var instance); static BOOL IsObject(_In_ RecyclableObject* instance); @@ -327,7 +332,7 @@ namespace Js static RecyclableObject* OP_GetPrototype(Var instance, ScriptContext* scriptContext); static BOOL OP_HasProperty(Var instance, PropertyId propertyId, ScriptContext* scriptContext); - static BOOL OP_HasOwnProperty(Var instance, PropertyId propertyId, ScriptContext* scriptContext); + static BOOL OP_HasOwnProperty(Var instance, PropertyId propertyId, ScriptContext* scriptContext, _In_opt_ PropertyString * propString = nullptr); static BOOL HasOwnPropertyNoHostObject(Var instance, PropertyId propertyId); static BOOL HasOwnPropertyNoHostObjectForHeapEnum(Var instance, PropertyId propertyId, ScriptContext* scriptContext, Var& getter, Var& setter); static Var GetOwnPropertyNoHostObjectForHeapEnum(Var instance, PropertyId propertyId, ScriptContext* scriptContext, Var& getter, Var &setter); @@ -367,6 +372,7 @@ namespace Js static Field(Var)* OP_GetModuleExportSlotAddress(uint moduleIndex, uint slotIndex, ScriptContext* scriptContext); static Var OP_LdModuleSlot(uint moduleIndex, uint slotIndex, ScriptContext* scriptContext); static void OP_StModuleSlot(uint moduleIndex, uint slotIndex, Var value, ScriptContext* scriptContext); + static Var OP_LdImportMeta(uint moduleIndex, ScriptContext* scriptContext); static Js::PropertyId GetPropertyId(Var propertyName, ScriptContext* scriptContext); @@ -412,7 +418,6 @@ namespace Js static Var OP_GetLength(Var instance, ScriptContext* scriptContext); static Var OP_GetThis(Var thisVar, int moduleID, ScriptContextInfo* scriptContext); static Var OP_GetThisNoFastPath(Var thisVar, int moduleID, ScriptContext* scriptContext); - static Var OP_StrictGetThis(Var thisVar, ScriptContext* scriptContext); static bool IsThisSelf(TypeId typeId); static Var GetThisHelper(Var thisVar, TypeId typeId, int moduleID, ScriptContextInfo *scriptContext); static Var GetThisFromModuleRoot(Var thisVar); @@ -486,7 +491,8 @@ namespace Js static RecyclableObject* GetIteratorFunction(RecyclableObject* instance, ScriptContext * scriptContext, bool optional = false); static RecyclableObject* GetIterator(Var instance, ScriptContext* scriptContext, bool optional = false); static RecyclableObject* GetIterator(RecyclableObject* instance, ScriptContext* scriptContext, bool optional = false); - static RecyclableObject* IteratorNext(RecyclableObject* iterator, ScriptContext* scriptContext, Var value = nullptr); + static RecyclableObject* CacheIteratorNext(RecyclableObject* iterator, ScriptContext* scriptContext); + static RecyclableObject* IteratorNext(RecyclableObject* iterator, ScriptContext* scriptContext, RecyclableObject* nextFunc, Var value = nullptr); static void IteratorClose(RecyclableObject* iterator, ScriptContext* scriptContext); template @@ -494,8 +500,8 @@ namespace Js static bool IteratorComplete(RecyclableObject* iterResult, ScriptContext* scriptContext); static Var IteratorValue(RecyclableObject* iterResult, ScriptContext* scriptContext); - static bool IteratorStep(RecyclableObject* iterator, ScriptContext* scriptContext, RecyclableObject** result); - static bool IteratorStepAndValue(RecyclableObject* iterator, ScriptContext* scriptContext, Var* resultValue); + static bool IteratorStep(RecyclableObject* iterator, ScriptContext* scriptContext, RecyclableObject* nextFunc, RecyclableObject** result); + static bool IteratorStepAndValue(RecyclableObject* iterator, ScriptContext* scriptContext, RecyclableObject* nextFunc, Var* resultValue); static void TraceUseConstructorCache(const ConstructorCache* ctorCache, const JavascriptFunction* ctor, bool isHit); static void TraceUpdateConstructorCache(const ConstructorCache* ctorCache, const FunctionBody* ctorBody, bool updated, const char16* reason); @@ -534,7 +540,7 @@ namespace Js static Var OP_NewPseudoScope(ScriptContext *scriptContext); static Var OP_NewBlockScope(ScriptContext *scriptContext); static Var OP_CloneBlockScope(BlockActivationObject *blockScope, ScriptContext *scriptContext); - static void OP_InitClass(Var constructor, Var extends, ScriptContext * scriptContext); + static Var OP_NewClassProto(Var protoParent, ScriptContext * scriptContext); static void OP_LoadUndefinedToElement(Var instance, PropertyId propertyId); static void OP_LoadUndefinedToElementDynamic(Var instance, PropertyId propertyId, ScriptContext* scriptContext); static void OP_LoadUndefinedToElementScoped(FrameDisplay *pScope, PropertyId propertyId, Var defaultInstance, ScriptContext* scriptContext); @@ -575,6 +581,12 @@ namespace Js template static void PatchInitValue(FunctionBody *const functionBody, TInlineCache *const inlineCache, const InlineCacheIndex inlineCacheIndex, RecyclableObject* object, PropertyId propertyId, Var newValue); static void PatchInitValueNoFastPath(FunctionBody *const functionBody, InlineCache *const inlineCache, const InlineCacheIndex inlineCacheIndex, RecyclableObject* object, PropertyId propertyId, Var newValue); + template static bool PatchPutValueCantChangeType(FunctionBody *const functionBody, TInlineCache *const inlineCache, const InlineCacheIndex inlineCacheIndex, Var obj, PropertyId propertyId, Var newValue, PropertyOperationFlags flags = PropertyOperation_None); + template static bool PatchPutValueWithThisPtrCantChangeType(FunctionBody *const functionBody, TInlineCache *const inlineCache, const InlineCacheIndex inlineCacheIndex, Var obj, PropertyId propertyId, Var newValue, Var thisInstance, PropertyOperationFlags flags = PropertyOperation_None); + template static bool PatchPutValueNoLocalFastPathCantChangeType(FunctionBody *const functionBody, TInlineCache *const inlineCache, const InlineCacheIndex inlineCacheIndex, Var instance, PropertyId propertyId, Var newValue, PropertyOperationFlags flags = PropertyOperation_None); + template static bool PatchPutValueWithThisPtrNoLocalFastPathCantChangeType(FunctionBody *const functionBody, TInlineCache *const inlineCache, const InlineCacheIndex inlineCacheIndex, Var instance, PropertyId propertyId, Var newValue, Var thisInstance, PropertyOperationFlags flags = PropertyOperation_None); + template static bool PatchInitValueCantChangeType(FunctionBody *const functionBody, TInlineCache *const inlineCache, const InlineCacheIndex inlineCacheIndex, RecyclableObject* object, PropertyId propertyId, Var newValue); + template static bool PatchPutValueCheckLayout(FunctionBody *const functionBody, TInlineCache *const inlineCache, const InlineCacheIndex inlineCacheIndex, Var obj, PropertyId propertyId, Var newValue, PropertyOperationFlags flags = PropertyOperation_None); template static bool PatchPutValueWithThisPtrCheckLayout(FunctionBody *const functionBody, TInlineCache *const inlineCache, const InlineCacheIndex inlineCacheIndex, Var obj, PropertyId propertyId, Var newValue, Var thisInstance, PropertyOperationFlags flags = PropertyOperation_None); template static bool PatchPutValueNoLocalFastPathCheckLayout(FunctionBody *const functionBody, TInlineCache *const inlineCache, const InlineCacheIndex inlineCacheIndex, Var instance, PropertyId propertyId, Var newValue, PropertyOperationFlags flags = PropertyOperation_None); @@ -601,9 +613,11 @@ namespace Js static Var FromPropertyDescriptor(const PropertyDescriptor& descriptor, ScriptContext* scriptContext); static void CompletePropertyDescriptor(PropertyDescriptor* resultDescriptor, PropertyDescriptor* likePropertyDescriptor, ScriptContext* requestContext); static BOOL SetPropertyDescriptor(RecyclableObject* object, PropertyId propId, const PropertyDescriptor& descriptor); - static BOOL DefineOwnPropertyDescriptor(RecyclableObject* object, PropertyId propId, const PropertyDescriptor& descriptor, bool throwOnError, ScriptContext* scriptContext); + static BOOL DefineOwnPropertyDescriptor(RecyclableObject* object, PropertyId propId, const PropertyDescriptor& descriptor, bool throwOnError, ScriptContext* scriptContext, PropertyOperationFlags flags = Js::PropertyOperation_None); static BOOL DefineOwnPropertyForArray(JavascriptArray* arr, PropertyId propId, const PropertyDescriptor& descriptor, bool throwOnError, ScriptContext* scriptContext); + static BOOL DefineOwnPropertyForTypedArray(TypedArrayBase * typedArray, PropertyId propId, const PropertyDescriptor & descriptor, bool throwOnError, ScriptContext * scriptContext); + static BOOL IsCompatiblePropertyDescriptor(const PropertyDescriptor& descriptor, PropertyDescriptor* currentDescriptor, bool isExtensible, bool throwOnError, ScriptContext* scriptContext); template @@ -638,7 +652,8 @@ namespace Js static Var OP_LdFuncObjProto(Var aRight, ScriptContext* scriptContext); static Var OP_ImportCall(__in JavascriptFunction *function, __in Var specifier, __in ScriptContext* scriptContext); - static Var OP_ResumeYield(ResumeYieldData* yieldData, RecyclableObject* iterator); + static Var OP_NewAwaitObject(ScriptContext* scriptContext); + static Var OP_NewAsyncFromSyncIterator(Var syncIterator, ScriptContext* scriptContext); template static void * JitRecyclerAlloc(DECLSPEC_GUARD_OVERFLOW size_t size, Recycler* recycler) @@ -792,5 +807,4 @@ namespace Js static BOOL IsRemoteArray(RecyclableObject* instance); }; - } // namespace Js diff --git a/lib/Runtime/Language/JavascriptOperators.inl b/lib/Runtime/Language/JavascriptOperators.inl index 12984b5b20a..fc2be311185 100644 --- a/lib/Runtime/Language/JavascriptOperators.inl +++ b/lib/Runtime/Language/JavascriptOperators.inl @@ -31,7 +31,7 @@ namespace Js #endif else { - return JavascriptOperators::GetTypeId(RecyclableObject::UnsafeFromVar(aValue)); + return JavascriptOperators::GetTypeId(UnsafeVarTo(aValue)); } } @@ -51,7 +51,7 @@ namespace Js #endif else { - auto typeId = RecyclableObject::FromVar(aValue)->GetTypeId(); + auto typeId = VarTo(aValue)->GetTypeId(); return typeId; } } @@ -65,7 +65,8 @@ namespace Js JavascriptExceptionObject *exception = nullptr; try { - while (JavascriptOperators::IteratorStepAndValue(iterator, scriptContext, &nextItem)) + RecyclableObject* nextFunc = JavascriptOperators::CacheIteratorNext(iterator, scriptContext); + while (JavascriptOperators::IteratorStepAndValue(iterator, scriptContext, nextFunc, &nextItem)) { shouldCallReturn = true; handler(nextItem); diff --git a/lib/Runtime/Language/JavascriptStackWalker.cpp b/lib/Runtime/Language/JavascriptStackWalker.cpp index d2c19669234..35c0ccee65f 100644 --- a/lib/Runtime/Language/JavascriptStackWalker.cpp +++ b/lib/Runtime/Language/JavascriptStackWalker.cpp @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #include "RuntimeLanguagePch.h" @@ -82,7 +83,7 @@ namespace Js } - void* const JavascriptCallStackLayout::ToFramePointer(JavascriptCallStackLayout* callstackLayout) + void* JavascriptCallStackLayout::ToFramePointer(JavascriptCallStackLayout* callstackLayout) { return reinterpret_cast( @@ -163,7 +164,7 @@ namespace Js // Get the heap-allocated args for this frame. Var args = this->GetCurrentArgumentsObject(); - if (args && ArgumentsObject::Is(args)) + if (args && VarIs(args)) { args = ((ArgumentsObject*)args)->GetHeapArguments(); } @@ -278,9 +279,9 @@ namespace Js } else #endif - if (this->GetCurrentFunction()->GetFunctionInfo()->IsCoroutine()) + if (this->GetCurrentFunction()->GetFunctionInfo()->IsCoroutine()) { - JavascriptGenerator* gen = JavascriptGenerator::FromVar(this->GetCurrentArgv()[JavascriptFunctionArgIndex_This]); + JavascriptGenerator* gen = VarTo(this->GetCurrentArgv()[JavascriptFunctionArgIndex_This]); return gen->GetArguments().Values; } else @@ -454,7 +455,7 @@ namespace Js // are inlined frames on the stack the InlineeCallInfo of the first inlined frame // has the native offset of the current physical frame. Assert(!*inlinee); - InlinedFrameWalker::FromPhysicalFrame(tmpFrameWalker, currentFrame, ScriptFunction::FromVar(parentFunction), PreviousInterpreterFrameIsFromBailout(), loopNum, this, useInternalFrameInfo, false /*noAlloc*/); + InlinedFrameWalker::FromPhysicalFrame(tmpFrameWalker, currentFrame, VarTo(parentFunction), PreviousInterpreterFrameIsFromBailout(), loopNum, this, useInternalFrameInfo, false /*noAlloc*/); inlineeOffset = tmpFrameWalker.GetBottomMostInlineeOffset(); tmpFrameWalker.Close(); } @@ -559,7 +560,7 @@ namespace Js } bool hasInlinedFramesOnStack = InlinedFrameWalker::FromPhysicalFrame(inlinedFrameWalker, currentFrame, - ScriptFunction::FromVar(function), true /*fromBailout*/, loopNum, this, false /*useInternalFrameInfo*/, false /*noAlloc*/); + VarTo(function), true /*fromBailout*/, loopNum, this, false /*useInternalFrameInfo*/, false /*noAlloc*/); if (hasInlinedFramesOnStack) { @@ -610,7 +611,7 @@ namespace Js bool inlinedFramesFound = InlinedFrameWalker::FromPhysicalFrame( inlinedFrameWalker, currentFrame, - ScriptFunction::FromVar(function), + VarTo(function), false, // fromBailout -1, // loopNum nullptr,// walker @@ -891,7 +892,7 @@ namespace Js return addressOfReturnAddress == nativeLibraryEntryAddress #if defined(_M_IX86) // Under some odd cases on x86, addressOfReturnAddress and stashed entry address need to be aligned. - // This happens when code is generated using two stack pointers. One or both have the address of + // This happens when code is generated using two stack pointers. One or both have the address of // return address offset by 4, 8, or 12. || (((uint)nativeLibraryEntryAddress - (uint)addressOfReturnAddress < 0x10) && *(void**)addressOfReturnAddress == *(void**)nativeLibraryEntryAddress @@ -956,7 +957,7 @@ namespace Js // wouldn't have created a new interpreterFrame if the bailout were from the loop body itself. Assert(this->interpreterFrame->TestFlags(Js::InterpreterStackFrameFlags_FromBailOut)); InlinedFrameWalker tmpFrameWalker; - Assert(InlinedFrameWalker::FromPhysicalFrame(tmpFrameWalker, currentFrame, Js::ScriptFunction::FromVar(argv[JavascriptFunctionArgIndex_Function]), + Assert(InlinedFrameWalker::FromPhysicalFrame(tmpFrameWalker, currentFrame, Js::VarTo(argv[JavascriptFunctionArgIndex_Function]), true /*fromBailout*/, this->tempInterpreterFrame->GetCurrentLoopNum(), this, false /*useInternalFrameInfo*/, true /*noAlloc*/)); tmpFrameWalker.Close(); } @@ -993,7 +994,7 @@ namespace Js return false; } - ScriptFunction* funcObj = Js::ScriptFunction::FromVar(argv[JavascriptFunctionArgIndex_Function]); + ScriptFunction* funcObj = Js::VarTo(argv[JavascriptFunctionArgIndex_Function]); if (funcObj->GetFunctionBody()->GetIsAsmjsMode()) { return false; @@ -1003,7 +1004,7 @@ namespace Js if (((CallInfo const *)&argv[JavascriptFunctionArgIndex_CallInfo])->Flags & CallFlags_InternalFrame) { if (includeInlineFrames && - InlinedFrameWalker::FromPhysicalFrame(inlinedFrameWalker, currentFrame, Js::ScriptFunction::FromVar(argv[JavascriptFunctionArgIndex_Function]), + InlinedFrameWalker::FromPhysicalFrame(inlinedFrameWalker, currentFrame, Js::VarTo(argv[JavascriptFunctionArgIndex_Function]), false /*fromBailout*/, this->tempInterpreterFrame->GetCurrentLoopNum(), this, false /*useInternalFrameInfo*/, false /*noAlloc*/)) { // Found inlined frames in a jitted loop body. We dont want to skip the inlined frames; walk all of them before setting codeAddress on lastInternalFrameInfo. @@ -1043,7 +1044,7 @@ namespace Js if (this->isNativeLibraryFrame) { // Return saved function. Do not read from stack as compiler may stackpack/optimize args. - return JavascriptFunction::FromVar(this->prevNativeLibraryEntry->function); + return VarTo(this->prevNativeLibraryEntry->function); } else { @@ -1083,7 +1084,7 @@ namespace Js } else if (this->GetCurrentFunction()->GetFunctionInfo()->IsCoroutine()) { - JavascriptGenerator* gen = JavascriptGenerator::FromVar(this->GetCurrentArgv()[JavascriptFunctionArgIndex_This]); + JavascriptGenerator* gen = VarTo(this->GetCurrentArgv()[JavascriptFunctionArgIndex_This]); callInfo = gen->GetArguments().Info; } else if (this->isNativeLibraryFrame) @@ -1116,7 +1117,7 @@ namespace Js if (this->GetCurrentFunction()->GetFunctionInfo()->IsCoroutine()) { - JavascriptGenerator* gen = JavascriptGenerator::FromVar(this->GetCurrentArgv()[JavascriptFunctionArgIndex_This]); + JavascriptGenerator* gen = VarTo(this->GetCurrentArgv()[JavascriptFunctionArgIndex_This]); return gen->GetArguments()[0]; } @@ -1484,12 +1485,12 @@ namespace Js return GetFrameAtIndex(frameCount - 1)->function; } - InlinedFrameWalker::InlinedFrame *const InlinedFrameWalker::GetCurrentFrame() const + InlinedFrameWalker::InlinedFrame *InlinedFrameWalker::GetCurrentFrame() const { return GetFrameAtIndex(currentIndex); } - InlinedFrameWalker::InlinedFrame *const InlinedFrameWalker::GetFrameAtIndex(signed index) const + InlinedFrameWalker::InlinedFrame *InlinedFrameWalker::GetFrameAtIndex(signed index) const { Assert(frames); Assert(frameCount); diff --git a/lib/Runtime/Language/JavascriptStackWalker.h b/lib/Runtime/Language/JavascriptStackWalker.h index 359442427e6..212651cedf9 100644 --- a/lib/Runtime/Language/JavascriptStackWalker.h +++ b/lib/Runtime/Language/JavascriptStackWalker.h @@ -57,7 +57,7 @@ namespace Js ForInObjectEnumerator * GetForInObjectEnumeratorArrayAtOffset(int offset) const; static JavascriptCallStackLayout *FromFramePointer(void *const framePointer); - static void* const ToFramePointer(JavascriptCallStackLayout* callstackLayout); + static void* ToFramePointer(JavascriptCallStackLayout* callstackLayout); private: JavascriptCallStackLayout() : callInfo(0) {}; }; @@ -137,12 +137,12 @@ namespace Js }; public: - InlinedFrame *const GetFrameAtIndex(signed index) const; + InlinedFrame *GetFrameAtIndex(signed index) const; private: void Initialize(int32 frameCount, __in_ecount(frameCount) InlinedFrame **frames, Js::ScriptFunction *parent); void MoveNext(); - InlinedFrame *const GetCurrentFrame() const; + InlinedFrame *GetCurrentFrame() const; Js::ScriptFunction *parentFunction; InlinedFrame **frames; @@ -305,6 +305,11 @@ namespace Js return this->currentFrame.GetInstructionPointer(); } + void* GetFramePointer() const + { + return this->currentFrame.GetFrame(); + } + bool GetCurrentFrameFromBailout() const { return previousInterpreterFrameIsFromBailout; diff --git a/lib/Runtime/Language/ModuleNamespace.cpp b/lib/Runtime/Language/ModuleNamespace.cpp index 1046fd01cbe..e8bbea7ea89 100644 --- a/lib/Runtime/Language/ModuleNamespace.cpp +++ b/lib/Runtime/Language/ModuleNamespace.cpp @@ -95,7 +95,7 @@ namespace Js sortedExportedNames->Add(propertyString); if (!moduleRecord->ResolveExport(propertyId, nullptr, &moduleNameRecord)) { - // ignore ambigious resolution. + // ignore ambiguous resolution. #if DBG unresolvableExportsCount++; #endif @@ -109,12 +109,16 @@ namespace Js if (moduleNameRecord->module == moduleRecord) { // skip local exports as they are covered in the localExportSlots. + // have to check the property map to avoid filtering out aliased local re-exports + // which are not covered in localExportSlots + if (propertyMap->ContainsKey(scriptContext->GetThreadContext()->GetPropertyName(propertyId))) + { #if DBG - localExportCount++; + localExportCount++; #endif - return; + return; + } } - Assert(moduleNameRecord->module != moduleRecord); this->AddUnambiguousNonLocalExport(propertyId, moduleNameRecord); }); } @@ -272,6 +276,12 @@ namespace Js // TODO: maybe we can cache the slot address & offset, instead of looking up everytime? We do need to look up the reference everytime. if (unambiguousNonLocalExports->TryGetValue(propertyId, &moduleNameRecord)) { + // special case for export * as ns + if (moduleNameRecord.bindingName == Js::PropertyIds::star_) + { + *value = static_cast(moduleNameRecord.module->GetNamespace()); + return PropertyQueryFlags::Property_Found; + } return JavascriptConversion::BooleanToPropertyQueryFlags(moduleNameRecord.module->GetNamespace()->GetProperty(originalInstance, moduleNameRecord.bindingName, value, info, requestContext)); } } diff --git a/lib/Runtime/Language/ModuleNamespace.h b/lib/Runtime/Language/ModuleNamespace.h index 535be1d4353..11711e6bb3d 100644 --- a/lib/Runtime/Language/ModuleNamespace.h +++ b/lib/Runtime/Language/ModuleNamespace.h @@ -30,8 +30,6 @@ namespace Js static ModuleNamespace* GetModuleNamespace(ModuleRecordBase* moduleRecord); void Initialize(); ListForListIterator* GetSortedExportedNames() { return this->sortedExportedNames; } - static bool Is(Var aValue) { return JavascriptOperators::GetTypeId(aValue) == TypeIds_ModuleNamespace; } - static ModuleNamespace* FromVar(Var obj) { AssertOrFailFast(JavascriptOperators::GetTypeId(obj) == TypeIds_ModuleNamespace); return static_cast(obj); } virtual PropertyId GetPropertyId(BigPropertyIndex index) override; virtual PropertyQueryFlags HasPropertyQuery(PropertyId propertyId, _Inout_opt_ PropertyValueInfo* info) override; @@ -98,4 +96,9 @@ namespace Js // Methods used by NamespaceEnumerator; BOOL FindNextProperty(BigPropertyIndex& index, JavascriptString** propertyString, PropertyId* propertyId, PropertyAttributes* attributes, ScriptContext * requestContext) const; }; + + template <> inline bool VarIsImpl(RecyclableObject* obj) + { + return JavascriptOperators::GetTypeId(obj) == TypeIds_ModuleNamespace; + } } diff --git a/lib/Runtime/Language/ModuleNamespaceEnumerator.cpp b/lib/Runtime/Language/ModuleNamespaceEnumerator.cpp index 7e1b3e1417c..248e7f43b4b 100644 --- a/lib/Runtime/Language/ModuleNamespaceEnumerator.cpp +++ b/lib/Runtime/Language/ModuleNamespaceEnumerator.cpp @@ -71,8 +71,8 @@ namespace Js currentLocalMapIndex++; if (currentLocalMapIndex < sortedExportedNames->Count()) { - Assert(JavascriptString::Is(sortedExportedNames->Item(currentLocalMapIndex))); - return JavascriptString::FromVar(sortedExportedNames->Item(currentLocalMapIndex)); + Assert(VarIs(sortedExportedNames->Item(currentLocalMapIndex))); + return VarTo(sortedExportedNames->Item(currentLocalMapIndex)); } else { diff --git a/lib/Runtime/Language/ModuleRecordBase.h b/lib/Runtime/Language/ModuleRecordBase.h index 43e4497e956..46613a67cde 100644 --- a/lib/Runtime/Language/ModuleRecordBase.h +++ b/lib/Runtime/Language/ModuleRecordBase.h @@ -53,4 +53,4 @@ namespace Js Field(bool) wasEvaluated; Field(JavascriptLibrary*) javascriptLibrary; }; -} \ No newline at end of file +} diff --git a/lib/Runtime/Language/ProfilingHelpers.cpp b/lib/Runtime/Language/ProfilingHelpers.cpp index a78532c003b..01987a0961a 100644 --- a/lib/Runtime/Language/ProfilingHelpers.cpp +++ b/lib/Runtime/Language/ProfilingHelpers.cpp @@ -36,7 +36,7 @@ using namespace Js; const bool fastPath = isJsArray; if(fastPath) { - JavascriptArray *const array = JavascriptArray::UnsafeFromVar(base); + JavascriptArray *const array = UnsafeVarTo(base); ldElemInfo.arrayType = ValueType::FromArray(ObjectType::Array, array, TypeIds_Array).ToLikely(); const Var element = ProfiledLdElem_FastPath(array, varIndex, functionBody->GetScriptContext(), &ldElemInfo); @@ -81,9 +81,9 @@ using namespace Js; bool isVirtual = (VirtualTableInfoBase::GetVirtualTable(base) == ValueType::GetVirtualTypedArrayVtable(arrayTypeId)); ldElemInfo.arrayType = ValueType::FromTypeId(arrayTypeId, isVirtual).ToLikely(); } - else if(Js::RecyclableObject::Is(base)) + else if(Js::VarIs(base)) { - ldElemInfo.arrayType = ValueType::FromObject(Js::RecyclableObject::UnsafeFromVar(base)).ToLikely(); + ldElemInfo.arrayType = ValueType::FromObject(Js::UnsafeVarTo(base)).ToLikely(); break; } else @@ -257,7 +257,7 @@ using namespace Js; const bool fastPath = isJsArray && !JavascriptOperators::SetElementMayHaveImplicitCalls(scriptContext); if(fastPath) { - JavascriptArray *const array = JavascriptArray::UnsafeFromVar(base); + JavascriptArray *const array = UnsafeVarTo(base); stElemInfo.arrayType = ValueType::FromArray(ObjectType::Array, array, TypeIds_Array).ToLikely(); stElemInfo.createdMissingValue = array->HasNoMissingValues(); @@ -273,7 +273,7 @@ using namespace Js; TypeId arrayTypeId; if(isJsArray) { - array = JavascriptArray::UnsafeFromVar(base); + array = UnsafeVarTo(base); isObjectWithArray = false; arrayTypeId = TypeIds_Array; } @@ -312,7 +312,7 @@ using namespace Js; { length = headSegmentLength; bool isVirtual = (VirtualTableInfoBase::GetVirtualTable(base) == ValueType::GetVirtualTypedArrayVtable(arrayTypeId)); - stElemInfo.arrayType = ValueType::FromTypeId(arrayTypeId, isVirtual).ToLikely(); + stElemInfo.arrayType = ValueType::FromTypeId(arrayTypeId, isVirtual).ToLikely(); if (!TaggedNumber::Is(value) && !JavascriptNumber::Is_NoTaggedIntCheck(value)) { // Non-number stored to a typed array. A helper call will be needed to convert the value. @@ -526,7 +526,7 @@ using namespace Js; ...) { ARGUMENTS(args, callee, framePointer, profileId, arrayProfileId, callInfo); - ScriptFunction* func = ScriptFunction::UnsafeFromVar(JavascriptCallStackLayout::FromFramePointer(framePointer)->functionObject); + ScriptFunction* func = UnsafeVarTo(JavascriptCallStackLayout::FromFramePointer(framePointer)->functionObject); JIT_HELPER_REENTRANT_HEADER(ProfiledNewScObjArray); return ProfiledNewScObjArray( @@ -549,7 +549,7 @@ using namespace Js; { ARGUMENTS(args, spreadIndices, callee, framePointer, profileId, arrayProfileId, callInfo); - Js::ScriptFunction *function = ScriptFunction::UnsafeFromVar(JavascriptCallStackLayout::FromFramePointer(framePointer)->functionObject); + Js::ScriptFunction *function = UnsafeVarTo(JavascriptCallStackLayout::FromFramePointer(framePointer)->functionObject); ScriptContext* scriptContext = function->GetScriptContext(); JIT_HELPER_REENTRANT_HEADER(ProfiledNewScObjArraySpread); @@ -638,7 +638,7 @@ using namespace Js; args.Values[0] = nullptr; Var array; - Js::RecyclableObject* calleeObject = RecyclableObject::UnsafeFromVar(callee); + Js::RecyclableObject* calleeObject = UnsafeVarTo(callee); if (arrayInfo->IsNativeIntArray()) { array = JavascriptNativeIntArray::NewInstance(calleeObject, args); @@ -701,7 +701,7 @@ using namespace Js; const auto calleeObject = JavascriptOperators::GetCallableObjectOrThrow(callee, scriptContext); const auto calleeFunctionInfo = calleeObject->GetTypeId() == TypeIds_Function - ? JavascriptFunction::UnsafeFromVar(calleeObject)->GetFunctionInfo() + ? UnsafeVarTo(calleeObject)->GetFunctionInfo() : nullptr; DynamicProfileInfo *profileInfo = callerFunctionBody->GetDynamicProfileInfo(); profileInfo->RecordCallSiteInfo( @@ -720,7 +720,7 @@ using namespace Js; retVal = JavascriptOperators::NewScObject(callee, args, scriptContext, spreadIndices); } END_SAFE_REENTRANT_CALL - + profileInfo->RecordReturnTypeOnCallSiteInfo(callerFunctionBody, profileId, retVal); return retVal; } @@ -751,7 +751,7 @@ using namespace Js; void *const framePointer) { JIT_HELPER_REENTRANT_HEADER(ProfiledLdLen); - ScriptFunction * const scriptFunction = ScriptFunction::UnsafeFromVar(JavascriptCallStackLayout::FromFramePointer(framePointer)->functionObject); + ScriptFunction * const scriptFunction = UnsafeVarTo(JavascriptCallStackLayout::FromFramePointer(framePointer)->functionObject); FunctionBody * functionBody = scriptFunction->GetFunctionBody(); DynamicProfileInfo * profileInfo = functionBody->GetDynamicProfileInfo(); @@ -778,7 +778,7 @@ using namespace Js; { JIT_HELPER_REENTRANT_HEADER(ProfiledLdFld); ScriptFunction *const scriptFunction = - ScriptFunction::UnsafeFromVar(JavascriptCallStackLayout::FromFramePointer(framePointer)->functionObject); + UnsafeVarTo(JavascriptCallStackLayout::FromFramePointer(framePointer)->functionObject); return ProfiledLdFld( instance, @@ -799,7 +799,7 @@ using namespace Js; { JIT_HELPER_REENTRANT_HEADER(ProfiledLdSuperFld); ScriptFunction *const scriptFunction = - ScriptFunction::UnsafeFromVar(JavascriptCallStackLayout::FromFramePointer(framePointer)->functionObject); + UnsafeVarTo(JavascriptCallStackLayout::FromFramePointer(framePointer)->functionObject); return ProfiledLdFld( instance, @@ -819,7 +819,7 @@ using namespace Js; { JIT_HELPER_REENTRANT_HEADER(ProfiledLdFldForTypeOf); ScriptFunction *const scriptFunction = - ScriptFunction::UnsafeFromVar(JavascriptCallStackLayout::FromFramePointer(framePointer)->functionObject); + UnsafeVarTo(JavascriptCallStackLayout::FromFramePointer(framePointer)->functionObject); return ProfiledLdFldForTypeOf( instance, @@ -839,7 +839,7 @@ using namespace Js; { JIT_HELPER_REENTRANT_HEADER(ProfiledLdFld_CallApplyTarget); ScriptFunction *const scriptFunction = - ScriptFunction::UnsafeFromVar(JavascriptCallStackLayout::FromFramePointer(framePointer)->functionObject); + UnsafeVarTo(JavascriptCallStackLayout::FromFramePointer(framePointer)->functionObject); return ProfiledLdFld( instance, @@ -859,7 +859,7 @@ using namespace Js; { JIT_HELPER_REENTRANT_HEADER(ProfiledLdMethodFld); ScriptFunction *const scriptFunction = - ScriptFunction::UnsafeFromVar(JavascriptCallStackLayout::FromFramePointer(framePointer)->functionObject); + UnsafeVarTo(JavascriptCallStackLayout::FromFramePointer(framePointer)->functionObject); return ProfiledLdFld( instance, @@ -879,7 +879,7 @@ using namespace Js; { JIT_HELPER_REENTRANT_HEADER(ProfiledLdRootFld); ScriptFunction *const scriptFunction = - ScriptFunction::UnsafeFromVar(JavascriptCallStackLayout::FromFramePointer(framePointer)->functionObject); + UnsafeVarTo(JavascriptCallStackLayout::FromFramePointer(framePointer)->functionObject); return ProfiledLdFld( instance, @@ -899,7 +899,7 @@ using namespace Js; { JIT_HELPER_REENTRANT_HEADER(ProfiledLdRootFldForTypeOf); ScriptFunction *const scriptFunction = - ScriptFunction::UnsafeFromVar(JavascriptCallStackLayout::FromFramePointer(framePointer)->functionObject); + UnsafeVarTo(JavascriptCallStackLayout::FromFramePointer(framePointer)->functionObject); return ProfiledLdFldForTypeOf( instance, @@ -918,7 +918,7 @@ using namespace Js; { JIT_HELPER_REENTRANT_HEADER(ProfiledLdRootMethodFld); ScriptFunction *const scriptFunction = - ScriptFunction::UnsafeFromVar(JavascriptCallStackLayout::FromFramePointer(framePointer)->functionObject); + UnsafeVarTo(JavascriptCallStackLayout::FromFramePointer(framePointer)->functionObject); return ProfiledLdFld( instance, @@ -954,17 +954,17 @@ using namespace Js; DynamicProfileInfo *const dynamicProfileInfo = functionBody->GetDynamicProfileInfo(); Var value; FldInfoFlags fldInfoFlags = FldInfo_NoInfo; - if (Root || (RecyclableObject::Is(instance) && RecyclableObject::Is(thisInstance))) + if (Root || (VarIs(instance) && VarIs(thisInstance))) { - RecyclableObject *const object = RecyclableObject::UnsafeFromVar(instance); - RecyclableObject *const thisObject = RecyclableObject::UnsafeFromVar(thisInstance); + RecyclableObject *const object = UnsafeVarTo(instance); + RecyclableObject *const thisObject = UnsafeVarTo(thisInstance); - if (!Root && Method && (propertyId == PropertyIds::apply || propertyId == PropertyIds::call) && ScriptFunction::Is(object)) + if (!Root && Method && (propertyId == PropertyIds::apply || propertyId == PropertyIds::call) && VarIs(object)) { // If the property being loaded is "apply"/"call", make an optimistic assumption that apply/call is not overridden and // undefer the function right here if it was defer parsed before. This is required so that the load of "apply"/"call" // happens from the same "type". Otherwise, we will have a polymorphic cache for load of "apply"/"call". - ScriptFunction *fn = ScriptFunction::UnsafeFromVar(object); + ScriptFunction *fn = UnsafeVarTo(object); if (fn->GetType()->GetEntryPoint() == JavascriptFunction::DeferredParsingThunk) { JavascriptFunction::DeferredParse(&fn); @@ -1086,7 +1086,7 @@ using namespace Js; { JIT_HELPER_REENTRANT_HEADER(ProfiledStFld); ScriptFunction *const scriptFunction = - ScriptFunction::UnsafeFromVar(JavascriptCallStackLayout::FromFramePointer(framePointer)->functionObject); + UnsafeVarTo(JavascriptCallStackLayout::FromFramePointer(framePointer)->functionObject); ProfiledStFld( instance, propertyId, @@ -1109,7 +1109,7 @@ using namespace Js; { JIT_HELPER_REENTRANT_HEADER(ProfiledStSuperFld); ScriptFunction *const scriptFunction = - ScriptFunction::UnsafeFromVar(JavascriptCallStackLayout::FromFramePointer(framePointer)->functionObject); + UnsafeVarTo(JavascriptCallStackLayout::FromFramePointer(framePointer)->functionObject); ProfiledStFld( instance, propertyId, @@ -1122,6 +1122,29 @@ using namespace Js; JIT_HELPER_END(ProfiledStSuperFld); } + void ProfilingHelpers::ProfiledStSuperFld_Strict_Jit( + const Var instance, + const PropertyId propertyId, + const InlineCacheIndex inlineCacheIndex, + const Var value, + void* const framePointer, + const Var thisInstance) + { + JIT_HELPER_REENTRANT_HEADER(ProfiledStSuperFld_Strict); + ScriptFunction* const scriptFunction = + UnsafeVarTo(JavascriptCallStackLayout::FromFramePointer(framePointer)->functionObject); + ProfiledStFld( + instance, + propertyId, + GetInlineCache(scriptFunction, inlineCacheIndex), + inlineCacheIndex, + value, + PropertyOperation_StrictMode, + scriptFunction, + thisInstance); + JIT_HELPER_END(ProfiledStSuperFld_Strict); + } + void ProfilingHelpers::ProfiledStFld_Strict_Jit( const Var instance, const PropertyId propertyId, @@ -1131,7 +1154,7 @@ using namespace Js; { JIT_HELPER_REENTRANT_HEADER(ProfiledStFld_Strict); ScriptFunction *const scriptFunction = - ScriptFunction::UnsafeFromVar(JavascriptCallStackLayout::FromFramePointer(framePointer)->functionObject); + UnsafeVarTo(JavascriptCallStackLayout::FromFramePointer(framePointer)->functionObject); ProfiledStFld( instance, propertyId, @@ -1153,7 +1176,7 @@ using namespace Js; { JIT_HELPER_REENTRANT_HEADER(ProfiledStRootFld); ScriptFunction *const scriptFunction = - ScriptFunction::UnsafeFromVar(JavascriptCallStackLayout::FromFramePointer(framePointer)->functionObject); + UnsafeVarTo(JavascriptCallStackLayout::FromFramePointer(framePointer)->functionObject); ProfiledStFld( instance, propertyId, @@ -1175,7 +1198,7 @@ using namespace Js; { JIT_HELPER_REENTRANT_HEADER(ProfiledStRootFld_Strict); ScriptFunction *const scriptFunction = - ScriptFunction::UnsafeFromVar(JavascriptCallStackLayout::FromFramePointer(framePointer)->functionObject); + UnsafeVarTo(JavascriptCallStackLayout::FromFramePointer(framePointer)->functionObject); ProfiledStFld( instance, propertyId, @@ -1216,10 +1239,10 @@ using namespace Js; ScriptContext *const scriptContext = functionBody->GetScriptContext(); FldInfoFlags fldInfoFlags = FldInfo_NoInfo; - if(Root || (RecyclableObject::Is(instance) && RecyclableObject::Is(thisInstance))) + if(Root || (VarIs(instance) && VarIs(thisInstance))) { - RecyclableObject *const object = RecyclableObject::UnsafeFromVar(instance); - RecyclableObject *const thisObject = RecyclableObject::UnsafeFromVar(thisInstance); + RecyclableObject *const object = UnsafeVarTo(instance); + RecyclableObject *const thisObject = UnsafeVarTo(thisInstance); PropertyCacheOperationInfo operationInfo; PropertyValueInfo propertyValueInfo; PropertyValueInfo::SetCacheInfo(&propertyValueInfo, functionBody, inlineCache, inlineCacheIndex, true); @@ -1326,9 +1349,9 @@ using namespace Js; { JIT_HELPER_REENTRANT_HEADER(ProfiledInitFld); ScriptFunction *const scriptFunction = - ScriptFunction::UnsafeFromVar(JavascriptCallStackLayout::FromFramePointer(framePointer)->functionObject); + UnsafeVarTo(JavascriptCallStackLayout::FromFramePointer(framePointer)->functionObject); ProfiledInitFld( - RecyclableObject::FromVar(instance), + VarTo(instance), propertyId, GetInlineCache(scriptFunction, inlineCacheIndex), inlineCacheIndex, @@ -1436,7 +1459,7 @@ using namespace Js; return scriptFunction->GetHasInlineCaches() - ? ScriptFunctionWithInlineCache::UnsafeFromVar(scriptFunction)->GetInlineCache(inlineCacheIndex) + ? UnsafeVarTo(scriptFunction)->GetInlineCache(inlineCacheIndex) : scriptFunction->GetFunctionBody()->GetInlineCache(inlineCacheIndex); } #endif diff --git a/lib/Runtime/Language/ProfilingHelpers.h b/lib/Runtime/Language/ProfilingHelpers.h index e57cad3afb4..3b2f87f9f12 100644 --- a/lib/Runtime/Language/ProfilingHelpers.h +++ b/lib/Runtime/Language/ProfilingHelpers.h @@ -48,6 +48,7 @@ namespace Js public: static void ProfiledStFld_Jit(const Var instance, const PropertyId propertyId, const InlineCacheIndex inlineCacheIndex, const Var value, void *const framePointer); static void ProfiledStSuperFld_Jit(const Var instance, const PropertyId propertyId, const InlineCacheIndex inlineCacheIndex, const Var value, void *const framePointer, const Var thisInstance); + static void ProfiledStSuperFld_Strict_Jit(const Var instance, const PropertyId propertyId, const InlineCacheIndex inlineCacheIndex, const Var value, void* const framePointer, const Var thisInstance); static void ProfiledStFld_Strict_Jit(const Var instance, const PropertyId propertyId, const InlineCacheIndex inlineCacheIndex, const Var value, void *const framePointer); static void ProfiledStRootFld_Jit(const Var instance, const PropertyId propertyId, const InlineCacheIndex inlineCacheIndex, const Var value, void *const framePointer); static void ProfiledStRootFld_Strict_Jit(const Var instance, const PropertyId propertyId, const InlineCacheIndex inlineCacheIndex, const Var value, void *const framePointer); diff --git a/lib/Runtime/Language/PropertyGuard.h b/lib/Runtime/Language/PropertyGuard.h index 1708799ff22..cd75d575265 100644 --- a/lib/Runtime/Language/PropertyGuard.h +++ b/lib/Runtime/Language/PropertyGuard.h @@ -44,8 +44,8 @@ class PropertyGuard Assert(this->value != GuardValue::Invalidated && this->value != GuardValue::Invalidated_DuringSweep); } - inline static size_t const GetSizeOfValue() { return sizeof(((PropertyGuard*)0)->value); } - inline static size_t const GetOffsetOfValue() { return offsetof(PropertyGuard, value); } + inline static size_t GetSizeOfValue() { return sizeof(((PropertyGuard*)0)->value); } + inline static size_t GetOffsetOfValue() { return offsetof(PropertyGuard, value); } intptr_t GetValue() const { return this->value; } bool IsValid() diff --git a/lib/Runtime/Language/RuntimeLanguagePch.h b/lib/Runtime/Language/RuntimeLanguagePch.h index 1b91a3d543c..910f8b16453 100644 --- a/lib/Runtime/Language/RuntimeLanguagePch.h +++ b/lib/Runtime/Language/RuntimeLanguagePch.h @@ -33,7 +33,10 @@ #include "Library/ArgumentsObject.h" #include "Types/TypePropertyCache.h" -#include "Library/JavascriptVariantDate.h" +#include "Library/JavascriptAsyncFromSyncIterator.h" +#ifdef _CHAKRACOREBUILD +#include "Library/CustomExternalWrapperObject.h" +#endif #include "Library/JavascriptProxy.h" #include "Library/JavascriptSymbolObject.h" #include "Library/JavascriptGenerator.h" diff --git a/lib/Runtime/Language/SourceTextModuleRecord.cpp b/lib/Runtime/Language/SourceTextModuleRecord.cpp index 3e2bf352c8f..010885f89f4 100644 --- a/lib/Runtime/Language/SourceTextModuleRecord.cpp +++ b/lib/Runtime/Language/SourceTextModuleRecord.cpp @@ -31,20 +31,15 @@ namespace Js localExportMapByLocalName(nullptr), localExportIndexList(nullptr), normalizedSpecifier(nullptr), - moduleUrl(nullptr), errorObject(nullptr), hostDefined(nullptr), exportedNames(nullptr), resolvedExportMap(nullptr), - wasParsed(false), - wasDeclarationInitialized(false), - parentsNotified(false), - isRootModule(false), - hadNotifyHostReady(false), localExportSlots(nullptr), moduleId(InvalidModuleIndex), localSlotCount(InvalidSlotCount), promise(nullptr), + importMetaObject(nullptr), localExportCount(0) { namespaceRecord.module = this; @@ -107,6 +102,13 @@ namespace Js return E_NOTIMPL; } + // Mark module as root module if it currently has no parents + // Note, if there are circular imports it may gain parents later + if (parentModuleList == nullptr && promise == nullptr) + { + SetIsRootModule(); + } + // Host indicates that the current module failed to load. if (sourceText == nullptr) { @@ -139,7 +141,7 @@ namespace Js Utf8SourceInfo* pResultSourceInfo = nullptr; this->parseTree = scriptContext->ParseScript(parser, sourceText, - sourceLength, srcInfo, &se, &pResultSourceInfo, _u("module"), + sourceLength, srcInfo, &se, &pResultSourceInfo, Constants::ModuleCode, loadScriptFlag, &sourceIndex, nullptr); this->pSourceInfo = pResultSourceInfo; } @@ -172,7 +174,7 @@ namespace Js } // Cleanup in case of error. - this->ReleaseParserResources(); + this->ReleaseParserResourcesForHierarchy(); return E_FAIL; } } @@ -182,13 +184,12 @@ namespace Js { if (*exceptionVar == nullptr) { - const WCHAR * sourceUrl = nullptr; - if (this->GetModuleUrl()) - { - sourceUrl = this->GetModuleUrlSz(); - } + const WCHAR * sourceUrl = this->GetSpecifierSz(); + *exceptionVar = JavascriptError::CreateFromCompileScriptException(scriptContext, &se, sourceUrl); } + // Cleanup in case of error. + this->ReleaseParserResourcesForHierarchy(); if (this->parser) { this->parseTree = nullptr; @@ -202,11 +203,11 @@ namespace Js if (this->promise != nullptr) { - SourceTextModuleRecord::ResolveOrRejectDynamicImportPromise(false, this->errorObject, this->scriptContext, this); + SourceTextModuleRecord::ResolveOrRejectDynamicImportPromise(false, this->errorObject, this->scriptContext, this, false); } - // Notify host if current module is dynamically-loaded module, or is root module and the host hasn't been notified - if (this->promise != nullptr || (isRootModule && !hadNotifyHostReady)) + // Notify host if current module is root module and the host hasn't been notified + if (isRootModule && !hadNotifyHostReady) { OUTPUT_TRACE_DEBUGONLY(Js::ModulePhase, _u("\t>NotifyHostAboutModuleReady %s (ParseSource error)\n"), this->GetSpecifierSz()); LEAVE_SCRIPT_IF_ACTIVE(scriptContext, @@ -247,7 +248,7 @@ namespace Js { Assert(scriptContext->GetConfig()->IsES6ModuleEnabled()); ParseNodeModule* moduleParseNode = this->parseTree->AsParseNodeModule(); - SetrequestedModuleList(moduleParseNode->requestedModules); + SetRequestedModuleList(moduleParseNode->requestedModules); SetImportRecordList(moduleParseNode->importEntries); SetStarExportRecordList(moduleParseNode->starExportEntries); SetIndirectExportRecordList(moduleParseNode->indirectExportEntries); @@ -262,6 +263,19 @@ namespace Js } } + void SourceTextModuleRecord::ReleaseParserResourcesForHierarchy() + { + this->ReleaseParserResources(); + + if (this->childrenModuleSet != nullptr) + { + this->childrenModuleSet->EachValue([=](SourceTextModuleRecord* childModuleRecord) + { + childModuleRecord->ReleaseParserResources(); + }); + } + } + HRESULT SourceTextModuleRecord::PostParseProcess() { HRESULT hr = NOERROR; @@ -276,7 +290,7 @@ namespace Js else { // Cleanup in case of error. - this->ReleaseParserResources(); + this->ReleaseParserResourcesForHierarchy(); } return hr; @@ -306,8 +320,8 @@ namespace Js if (this->errorObject != nullptr) { // Cleanup in case of error. - this->ReleaseParserResources(); - SourceTextModuleRecord::ResolveOrRejectDynamicImportPromise(false, this->errorObject, scriptContext, this); + this->ReleaseParserResourcesForHierarchy(); + SourceTextModuleRecord::ResolveOrRejectDynamicImportPromise(false, this->errorObject, scriptContext, this, false); } else { @@ -327,7 +341,7 @@ namespace Js if (FAILED(hr)) { // Cleanup in case of error. - this->ReleaseParserResources(); + this->ReleaseParserResourcesForHierarchy(); // We cannot just use the buffer in the specifier string - need to make a copy here. const char16* moduleName = this->GetSpecifierSz(); @@ -342,7 +356,7 @@ namespace Js } } - return this->promise; + return JavascriptPromise::CreatePassThroughPromise(this->promise, scriptContext); } HRESULT SourceTextModuleRecord::PrepareForModuleDeclarationInitialization() @@ -355,7 +369,7 @@ namespace Js OUTPUT_TRACE_DEBUGONLY(Js::ModulePhase, _u("\t>NotifyParentsAsNeeded\n")); NotifyParentsAsNeeded(); - if (!WasDeclarationInitialized() && (isRootModule || this->promise != nullptr)) + if (!WasDeclarationInitialized() && (isRootModule || promise != nullptr)) { // TODO: move this as a promise call? if parser is called from a different thread // We'll need to call the bytecode gen in the main thread as we are accessing GC. @@ -366,6 +380,13 @@ namespace Js { GenerateRootFunction(); } + + if (this->errorObject != nullptr) + { + // Cleanup in case of error. + this->ReleaseParserResourcesForHierarchy(); + } + if (!hadNotifyHostReady && !WasEvaluated()) { OUTPUT_TRACE_DEBUGONLY(Js::ModulePhase, _u("\t>NotifyHostAboutModuleReady %s (PrepareForModuleDeclarationInitialization)\n"), this->GetSpecifierSz()); @@ -394,17 +415,17 @@ namespace Js } // Cleanup in case of error. - this->ReleaseParserResources(); + this->ReleaseParserResourcesForHierarchy(); OUTPUT_TRACE_DEBUGONLY(Js::ModulePhase, _u("\t>NotifyParentAsNeeded (childException)\n"), this->GetSpecifierSz()); NotifyParentsAsNeeded(); if (this->promise != nullptr) { - SourceTextModuleRecord::ResolveOrRejectDynamicImportPromise(false, this->errorObject, this->scriptContext, this); + SourceTextModuleRecord::ResolveOrRejectDynamicImportPromise(false, this->errorObject, this->scriptContext, this, false); } - if (this->promise != nullptr || (isRootModule && !hadNotifyHostReady)) + if (isRootModule && !hadNotifyHostReady) { OUTPUT_TRACE_DEBUGONLY(Js::ModulePhase, _u("\t>NotifyHostAboutModuleReady %s (OnChildModuleReady)\n"), this->GetSpecifierSz()); LEAVE_SCRIPT_IF_ACTIVE(scriptContext, @@ -632,24 +653,28 @@ namespace Js SourceTextModuleRecord* childModuleRecord = GetChildModuleRecord(exportEntry.moduleRequest->Psz()); if (childModuleRecord == nullptr) { + this->ReleaseParserResourcesForHierarchy(); JavascriptError::ThrowReferenceError(scriptContext, JSERR_CannotResolveModule, exportEntry.moduleRequest->Psz()); } - else + + if (exportEntry.importName->GetPropertyId() == PropertyIds::star_) { - isAmbiguous = !childModuleRecord->ResolveExport(importNameId, resolveSet, exportRecord); - if (isAmbiguous) - { - // ambiguous; don't need to search further - return true; - } - else - { - // found a resolution. done; - if (*exportRecord != nullptr) - { - return true; - } - } + // export * as someName from "foo" + *exportRecord = childModuleRecord->GetNamespaceNameRecord(); + return true; + } + + isAmbiguous = !childModuleRecord->ResolveExport(importNameId, resolveSet, exportRecord); + if (isAmbiguous) + { + // ambiguous; don't need to search further + return true; + } + + // found a resolution. done; + if (*exportRecord != nullptr) + { + return true; } return false; }); @@ -665,9 +690,6 @@ namespace Js if (exportName == PropertyIds::default_) { - JavascriptError* errorObj = scriptContext->GetLibrary()->CreateSyntaxError(); - JavascriptError::SetErrorMessage(errorObj, JSERR_ModuleResolveExport, scriptContext->GetPropertyName(exportName)->GetBuffer(), scriptContext); - this->errorObject = errorObj; return false; } @@ -680,10 +702,12 @@ namespace Js SourceTextModuleRecord* childModule = GetChildModuleRecord(starExportEntry.moduleRequest->Psz()); if (childModule == nullptr) { + this->ReleaseParserResourcesForHierarchy(); JavascriptError::ThrowReferenceError(GetScriptContext(), JSERR_CannotResolveModule, starExportEntry.moduleRequest->Psz()); } if (childModule->errorObject != nullptr) { + this->ReleaseParserResourcesForHierarchy(); JavascriptExceptionOperators::Throw(childModule->errorObject, GetScriptContext()); } @@ -737,6 +761,11 @@ namespace Js { this->parentModuleList->Add(parentRecord); } + + if (IsEvaluating()) + { + parentRecord->IncrementAwaited(); + } } } @@ -752,25 +781,27 @@ namespace Js } bool result = true; confirmedReady = true; - EnsureChildModuleSet(GetScriptContext()); - childrenModuleSet->EachValue([&](SourceTextModuleRecord* childModuleRecord) { - if (childModuleRecord->ParentsNotified()) - { - return false; - } - else - { - if (childModuleRecord->ConfirmChildrenParsed()) + if (childrenModuleSet != nullptr) + { + childrenModuleSet->EachValue([&](SourceTextModuleRecord* childModuleRecord) { + if (childModuleRecord->ParentsNotified()) { return false; } else { - result = false; - return true; + if (childModuleRecord->ConfirmChildrenParsed()) + { + return false; + } + else + { + result = false; + return true; + } } - } - }); + }); + } confirmedReady = false; return result; } @@ -844,14 +875,10 @@ namespace Js { // zero out fields is more a defense in depth as those fields are not needed anymore Assert(wasParsed); - Assert(wasEvaluated); + Assert(evaluating); Assert(wasDeclarationInitialized); // Debugger can reparse the source and generate the byte code again. Don't cleanup the // helper information for now. - - // Parser uses a temporary guest arena to keep regex patterns alive. We need to release this arena only after we have no further use - // for the regex pattern objects. - this->ReleaseParserResources(); } bool SourceTextModuleRecord::ModuleDeclarationInstantiation() @@ -895,10 +922,6 @@ namespace Js if (this->errorObject != nullptr) { - OUTPUT_TRACE_DEBUGONLY(Js::ModulePhase, _u("\t>NotifyParentsAsNeeded (errorObject)\n")); - // Cleanup in case of error. - this->ReleaseParserResources(); - NotifyParentsAsNeeded(); return false; } @@ -907,7 +930,7 @@ namespace Js void SourceTextModuleRecord::GenerateRootFunction() { - // On cyclic dependency, we may endup generating the root function twice + // On cyclic dependency, we may end up generating the root function twice // so make sure we don't if (this->rootFunction != nullptr) { @@ -921,14 +944,16 @@ namespace Js Assert(this->WasDeclarationInitialized()); Assert(this == scriptContext->GetLibrary()->GetModuleRecord(this->pSourceInfo->GetSrcInfo()->moduleID)); - this->rootFunction = scriptContext->GenerateRootFunction(parseTree, sourceIndex, this->parser, this->pSourceInfo->GetParseFlags(), &se, _u("module")); + this->rootFunction = scriptContext->GenerateRootFunction(parseTree, sourceIndex, this->parser, this->pSourceInfo->GetParseFlags(), &se, Constants::ModuleCode); + + // Parser uses a temporary guest arena to keep regex patterns alive. We need to release this arena only after we have no further use + // for the regex pattern objects. + this->ReleaseParserResources(); + if (rootFunction == nullptr) { - const WCHAR * sourceUrl = nullptr; - if (this->GetModuleUrl()) - { - sourceUrl = this->GetModuleUrlSz(); - } + const WCHAR * sourceUrl = this->GetSpecifierSz(); + this->errorObject = JavascriptError::CreateFromCompileScriptException(scriptContext, &se, sourceUrl); OUTPUT_TRACE_DEBUGONLY(Js::ModulePhase, _u("\t>NotifyParentAsNeeded rootFunction == nullptr\n")); NotifyParentsAsNeeded(); @@ -948,97 +973,326 @@ namespace Js } } - Var SourceTextModuleRecord::ModuleEvaluation() + static bool ReportModuleCompletion(SourceTextModuleRecord* module, Var exception) { - OUTPUT_TRACE_DEBUGONLY(Js::ModulePhase, _u("ModuleEvaluation(%s)\n"), this->GetSpecifierSz()); - -#if DBG - if (childrenModuleSet != nullptr) + bool hasCallback = false; + ScriptContext* scriptContext = module->GetScriptContext(); + OUTPUT_TRACE_DEBUGONLY(Js::ModulePhase, _u("ReportModuleCompletion %s\n"), module->GetSpecifierSz()); + LEAVE_SCRIPT_IF_ACTIVE(scriptContext, { - childrenModuleSet->EachValue([=](SourceTextModuleRecord* childModuleRecord) - { - AssertMsg(childModuleRecord->WasParsed(), "child module needs to have been parsed"); - AssertMsg(childModuleRecord->WasDeclarationInitialized(), "child module needs to have been initialized."); - }); - } -#endif - if (!scriptContext->GetConfig()->IsES6ModuleEnabled() || WasEvaluated()) - { - return nullptr; - } + hasCallback = scriptContext->GetHostScriptContext()->ReportModuleCompletion(module, exception); + }); + return hasCallback; + } + bool SourceTextModuleRecord::ModuleEvaluationPrepass() + { if (this->errorObject != nullptr) { // Cleanup in case of error. - this->ReleaseParserResources(); + this->ReleaseParserResourcesForHierarchy(); if (this->promise != nullptr) { - SourceTextModuleRecord::ResolveOrRejectDynamicImportPromise(false, this->errorObject, this->scriptContext, this); - return scriptContext->GetLibrary()->GetUndefined(); + SourceTextModuleRecord::ResolveOrRejectDynamicImportPromise(false, this->errorObject, this->scriptContext, this, false); + return false; + } + if (isRootModule && ReportModuleCompletion(this, errorObject)) + { + return false; } else { JavascriptExceptionOperators::Throw(errorObject, this->scriptContext); } } + SetEvaluationPrepassed(); - Assert(this->errorObject == nullptr); - SetWasEvaluated(); +#if DBG + if (childrenModuleSet != nullptr) + { + childrenModuleSet->EachValue([=](SourceTextModuleRecord* childModuleRecord) + { + AssertMsg(childModuleRecord->WasParsed(), "child module needs to have been parsed"); + AssertMsg(childModuleRecord->WasDeclarationInitialized(), "child module needs to have been initialized."); + }); + } +#endif if (childrenModuleSet != nullptr) { childrenModuleSet->EachValue([=](SourceTextModuleRecord* childModuleRecord) { - if (!childModuleRecord->WasEvaluated()) + if (!childModuleRecord->WasEvaluationPrepassed()) { - childModuleRecord->ModuleEvaluation(); + childModuleRecord->ModuleEvaluationPrepass(); + } + + // if child module was evaluated before and threw need to re-throw now + // if child module has been dynamically imported and has exception need to throw + if (childModuleRecord->GetErrorObject() != nullptr) + { + this->ReleaseParserResourcesForHierarchy(); + + JavascriptExceptionOperators::Throw(childModuleRecord->GetErrorObject(), this->scriptContext); } }); } - CleanupBeforeExecution(); - Arguments outArgs(CallInfo(CallFlags_Value, 0), nullptr); + AUTO_NESTED_HANDLED_EXCEPTION_TYPE((ExceptionType)(ExceptionType_OutOfMemory | ExceptionType_JavascriptException)); + BEGIN_SAFE_REENTRANT_CALL(scriptContext->GetThreadContext()) + { + Arguments outArgs(CallInfo(CallFlags_Value, 0), nullptr); + this->generator = VarTo(rootFunction->CallRootFunction(outArgs, scriptContext, true)); + } + END_SAFE_REENTRANT_CALL + + return true; + } + + + Var SourceTextModuleRecord::ModuleEvaluation() + { + OUTPUT_TRACE_DEBUGONLY(Js::ModulePhase, _u("ModuleEvaluation(%s)\n"), this->GetSpecifierSz()); + + if (WasEvaluated() || IsEvaluating() || !scriptContext->GetConfig()->IsES6ModuleEnabled()) + { + return nullptr; + } - Var ret = nullptr; - JavascriptExceptionObject *exception = nullptr; try { - AUTO_NESTED_HANDLED_EXCEPTION_TYPE((ExceptionType)(ExceptionType_OutOfMemory | ExceptionType_JavascriptException)); - ENTER_SCRIPT_IF(scriptContext, true, false, false, !scriptContext->GetThreadContext()->IsScriptActive(), + if (!WasEvaluationPrepassed()) { - ret = rootFunction->CallRootFunction(outArgs, scriptContext, true); - }); + if (!ModuleEvaluationPrepass()) + { + return scriptContext->GetLibrary()->GetUndefined(); + } + } + + Assert(this->errorObject == nullptr); + SetEvaluating(true); + + if (requestedModuleList != nullptr) + { + requestedModuleList->Reverse(); + requestedModuleList->Map([&](IdentPtr specifier) { + SourceTextModuleRecord* childModuleRecord = nullptr; + AssertOrFailFast(childrenModuleSet->TryGetValue(specifier->Psz(), &childModuleRecord)); + + childModuleRecord->ModuleEvaluation(); + // if child module was evaluated before and threw need to re-throw now + // if child module has been dynamically imported and has exception need to throw + if (childModuleRecord->GetErrorObject() != nullptr) + { + this->ReleaseParserResourcesForHierarchy(); + + JavascriptExceptionOperators::Throw(childModuleRecord->GetErrorObject(), this->scriptContext); + } + }); + } + if (awaitedModules == 0) + { + FinishModuleEvaluation(true); + } + else + { + if (this->parentModuleList != nullptr) + { + parentModuleList->Map([=](uint i, SourceTextModuleRecord* parentModule) + { + parentModule->IncrementAwaited(); + }); + } + } } catch (const Js::JavascriptException &err) { - exception = err.GetAndClear(); + if (!WasEvaluated()) + { + SetWasEvaluated(); + } + SetEvaluating(false); + JavascriptExceptionObject *exception = err.GetAndClear(); Var errorObject = exception->GetThrownObject(scriptContext); AssertOrFailFastMsg(errorObject != nullptr, "ModuleEvaluation: null error object thrown from root function"); this->errorObject = errorObject; if (this->promise != nullptr) { - ResolveOrRejectDynamicImportPromise(false, errorObject, scriptContext, this); - return scriptContext->GetLibrary()->GetUndefined(); + ResolveOrRejectDynamicImportPromise(false, errorObject, scriptContext, this, false); + } + if (isRootModule && !ReportModuleCompletion(this, errorObject)) + { + JavascriptExceptionOperators::DoThrowCheckClone(exception, scriptContext); } } - if (exception != nullptr) + return scriptContext->GetLibrary()->GetUndefined(); + } + + void SourceTextModuleRecord::FinishModuleEvaluation(bool shouldIncrementAwait) + { + if (WasEvaluated()) { - JavascriptExceptionOperators::DoThrowCheckClone(exception, scriptContext); + return; } - if (this->promise != nullptr) + CleanupBeforeExecution(); + + JavascriptGenerator* gen = static_cast (generator); + + AUTO_NESTED_HANDLED_EXCEPTION_TYPE((ExceptionType)(ExceptionType_OutOfMemory | ExceptionType_JavascriptException)); + BEGIN_SAFE_REENTRANT_CALL(scriptContext->GetThreadContext()) { - SourceTextModuleRecord::ResolveOrRejectDynamicImportPromise(true, this->GetNamespace(), this->GetScriptContext(), this); + if (gen->IsAsyncModule()) + { + JavascriptPromise* prom = JavascriptAsyncFunction::BeginAsyncFunctionExecution(this->generator); + if (this->parentModuleList != nullptr && shouldIncrementAwait) + { + parentModuleList->Map([=](uint i, SourceTextModuleRecord* parentModule) + { + parentModule->IncrementAwaited(); + }); + } + auto* fulfilled = scriptContext->GetLibrary()->CreateAsyncModuleCallbackFunction(EntryAsyncModuleFulfilled, this); + auto* rejected = scriptContext->GetLibrary()->CreateAsyncModuleCallbackFunction(EntryAsyncModuleRejected, this); + auto* unused = JavascriptPromise::UnusedPromiseCapability(scriptContext); + JavascriptPromise::PerformPromiseThen(prom, unused, fulfilled, rejected, scriptContext); + } + else + { + SetWasEvaluated(); + SetEvaluating(false); + gen->CallGenerator(scriptContext->GetLibrary()->GetUndefined(), ResumeYieldKind::Normal); + if (this->parentModuleList != nullptr && !shouldIncrementAwait) + { + parentModuleList->Map([=](uint i, SourceTextModuleRecord* parentModule) + { + if (parentModule->DecrementAwaited()) + { + if(parentModule->IsEvaluating()) + { + parentModule->FinishModuleEvaluation(false); + } + } + }); + } + if (this->promise != nullptr) + { + ResolveOrRejectDynamicImportPromise(true, GetNamespace(), scriptContext, this, false); + } + if (isRootModule) + { + ReportModuleCompletion(this, nullptr); + } + } } + END_SAFE_REENTRANT_CALL + } + + void SourceTextModuleRecord::DecrementAndEvaluateIfNothingAwaited() + { + if (DecrementAwaited()) + { + JavascriptExceptionObject *exception = nullptr; + try + { + FinishModuleEvaluation(false); + } + catch (const Js::JavascriptException &err) + { + if (!WasEvaluated()) + { + SetWasEvaluated(); + } + SetEvaluating(false); + exception = err.GetAndClear(); + Var errorObject = exception->GetThrownObject(scriptContext); + AssertOrFailFastMsg(errorObject != nullptr, "ModuleEvaluation: null error object thrown from root function"); - return ret; + PropogateRejection(errorObject); + return; + } + } + } + + Var SourceTextModuleRecord::EntryAsyncModuleFulfilled( + RecyclableObject* function, + CallInfo callInfo, ...) + { + SourceTextModuleRecord* module = VarTo(function)->module; + module->SetEvaluating(false); + module->SetWasEvaluated(); + if (module->parentModuleList != nullptr) + { + module->parentModuleList->Map([=](uint i, SourceTextModuleRecord* parentModule) + { + parentModule->DecrementAndEvaluateIfNothingAwaited(); + }); + } + + if (module->GetPromise() != nullptr) + { + ResolveOrRejectDynamicImportPromise(true, module->GetNamespace(), module->scriptContext, module, false); + } + else if (module->GetIsRootModule()) + { + ReportModuleCompletion(module, nullptr); + } + + return function->GetLibrary()->GetUndefined(); + } + + Var SourceTextModuleRecord::EntryAsyncModuleRejected( + RecyclableObject* function, + CallInfo callInfo, ...) + { + SourceTextModuleRecord* module = VarTo(function)->module; + + PROBE_STACK(module->scriptContext, Js::Constants::MinStackDefault); + ARGUMENTS(args, callInfo); + + Assert (args.Info.Count > 1); + module->PropogateRejection(args[1]); + + return function->GetLibrary()->GetUndefined(); + } + + void SourceTextModuleRecord::PropogateRejection(Var reason) + { + SetEvaluating(false); + if (wasEvaluated) + { + return; + } + + SetWasEvaluated(); + + this->errorObject = reason; + if (this->parentModuleList != nullptr) + { + parentModuleList->Map([=](uint i, SourceTextModuleRecord* parentModule) + { + if (parentModule->GetErrorObject() == nullptr) + { + parentModule->PropogateRejection(reason); + } + }); + } + + if (this->promise != nullptr) + { + ResolveOrRejectDynamicImportPromise(false, reason, scriptContext, this, false); + } + if (isRootModule) + { + ReportModuleCompletion(this, errorObject); + } } HRESULT SourceTextModuleRecord::OnHostException(void* errorVar) { - if (!RecyclableObject::Is(errorVar)) + if (!VarIs(errorVar)) { return E_INVALIDARG; } @@ -1126,6 +1380,7 @@ namespace Js // 2G is too big already. if (localExportCount >= INT_MAX) { + this->ReleaseParserResourcesForHierarchy(); JavascriptError::ThrowRangeError(scriptContext, JSERR_TooManyImportExports); } localExportCount++; @@ -1149,6 +1404,7 @@ namespace Js currentSlotCount++; if (currentSlotCount >= INT_MAX) { + this->ReleaseParserResourcesForHierarchy(); JavascriptError::ThrowRangeError(scriptContext, JSERR_TooManyImportExports); } } @@ -1170,7 +1426,7 @@ namespace Js #if ENABLE_NATIVE_CODEGEN if (JITManager::GetJITManager()->IsOOPJITEnabled() && JITManager::GetJITManager()->IsConnected()) { - PSCRIPTCONTEXT_HANDLE remoteScriptContext = this->scriptContext->GetRemoteScriptAddr(); + PSCRIPTCONTEXT_HANDLE remoteScriptContext = this->scriptContext->GetRemoteScriptAddr(false); if (remoteScriptContext) { HRESULT hr = JITManager::GetJITManager()->AddModuleRecordInfo( @@ -1211,8 +1467,9 @@ namespace Js this->errorObject = errorObj; return; } - if (!childModuleRecord->ResolveExport(propertyId, nullptr, &exportRecord) || - (exportRecord == nullptr)) + if (propertyId != PropertyIds::star_ && + (!childModuleRecord->ResolveExport(propertyId, nullptr, &exportRecord) || + (exportRecord == nullptr))) { JavascriptError* errorObj = scriptContext->GetLibrary()->CreateSyntaxError(); JavascriptError::SetErrorMessage(errorObj, JSERR_ModuleResolveExport, exportEntry.exportName->Psz(), scriptContext); @@ -1256,7 +1513,7 @@ namespace Js } // static - Var SourceTextModuleRecord::ResolveOrRejectDynamicImportPromise(bool isResolve, Var value, ScriptContext *scriptContext, SourceTextModuleRecord *moduleRecord) + Var SourceTextModuleRecord::ResolveOrRejectDynamicImportPromise(bool isResolve, Var value, ScriptContext *scriptContext, SourceTextModuleRecord *moduleRecord, bool useReturn) { bool isScriptActive = scriptContext->GetThreadContext()->IsScriptActive(); JavascriptPromise *promise = nullptr; @@ -1285,8 +1542,46 @@ namespace Js if (moduleRecord != nullptr) { moduleRecord->SetPromise(nullptr); + if (!moduleRecord->WasEvaluated()) + { + moduleRecord->SetWasEvaluated(); + } + if (useReturn) + { + return JavascriptPromise::CreatePassThroughPromise(promise, scriptContext); + } } - return promise; } + + Var SourceTextModuleRecord::GetImportMetaObject() + { + if (this->importMetaObject) + { + return this->importMetaObject; + } + + ScriptContext* scriptContext = this->GetScriptContext(); + JavascriptLibrary* library = scriptContext->GetLibrary(); + + this->importMetaObject = library->CreateObject(library->GetNull()); + + OUTPUT_TRACE_DEBUGONLY(Js::ModulePhase, _u("InitializeImportMeta %s\n"), this->GetSpecifierSz()); + LEAVE_SCRIPT_IF_ACTIVE(scriptContext, + { + scriptContext->GetHostScriptContext()->InitializeImportMeta(this, this->importMetaObject); + }); + + return this->importMetaObject; + } + + template<> + bool VarIsImpl(RecyclableObject* obj) + { + return VarIs(obj) && ( + VirtualTableInfo::HasVirtualTable(obj) || + VirtualTableInfo>::HasVirtualTable(obj) + ); + } + } diff --git a/lib/Runtime/Language/SourceTextModuleRecord.h b/lib/Runtime/Language/SourceTextModuleRecord.h index f95bbf5c3ae..1cd3e10fd29 100644 --- a/lib/Runtime/Language/SourceTextModuleRecord.h +++ b/lib/Runtime/Language/SourceTextModuleRecord.h @@ -17,6 +17,7 @@ namespace Js { public: friend class ModuleNamespace; + friend class JavascriptLibrary; SourceTextModuleRecord(ScriptContext* scriptContext); IdentPtrList* GetRequestedModuleList() const { return requestedModuleList; } @@ -34,6 +35,10 @@ namespace Js bool ModuleDeclarationInstantiation() override; void GenerateRootFunction(); Var ModuleEvaluation() override; + void FinishModuleEvaluation(bool shouldIncrementAwait); + bool ModuleEvaluationPrepass(); + void DecrementAndEvaluateIfNothingAwaited(); + void PropogateRejection(Var reason); virtual ModuleNamespace* GetNamespace(); virtual void SetNamespace(ModuleNamespace* moduleNamespace); @@ -50,27 +55,36 @@ namespace Js void SetSpecifier(Var specifier) { this->normalizedSpecifier = specifier; } Var GetSpecifier() const { return normalizedSpecifier; } - const char16 *GetSpecifierSz() const { return JavascriptString::FromVar(this->normalizedSpecifier)->GetSz(); } - - void SetModuleUrl(Var moduleUrl) { this->moduleUrl = moduleUrl; } - Var GetModuleUrl() const { return moduleUrl;} - const char16 *GetModuleUrlSz() const { return JavascriptString::FromVar(this->moduleUrl)->GetSz(); } + const char16 *GetSpecifierSz() const + { + return this->normalizedSpecifier != nullptr ? + VarTo(this->normalizedSpecifier)->GetSz() : _u("module"); + } Var GetErrorObject() const { return errorObject; } bool WasParsed() const { return wasParsed; } void SetWasParsed() { wasParsed = true; } + bool WasEvaluationPrepassed() const { return wasPrepassed; } + void SetEvaluationPrepassed() { wasPrepassed = true; } + bool IsEvaluating() const { return evaluating; } + void SetEvaluating(bool status) { evaluating = status; } + void IncrementAwaited() { ++awaitedModules; } + bool DecrementAwaited() { return (--awaitedModules) == 0; } bool WasDeclarationInitialized() const { return wasDeclarationInitialized; } void SetWasDeclarationInitialized() { wasDeclarationInitialized = true; } void SetIsRootModule() { isRootModule = true; } + bool GetIsRootModule() { return isRootModule; } JavascriptPromise *GetPromise() { return this->promise; } void SetPromise(JavascriptPromise *value) { this->promise = value; } + Var GetImportMetaObject(); + void SetImportRecordList(ModuleImportOrExportEntryList* importList) { importRecordList = importList; } void SetLocalExportRecordList(ModuleImportOrExportEntryList* localExports) { localExportRecordList = localExports; } void SetIndirectExportRecordList(ModuleImportOrExportEntryList* indirectExports) { indirectExportRecordList = indirectExports; } void SetStarExportRecordList(ModuleImportOrExportEntryList* starExports) { starExportRecordList = starExports; } - void SetrequestedModuleList(IdentPtrList* requestModules) { requestedModuleList = requestModules; } + void SetRequestedModuleList(IdentPtrList* requestModules) { requestedModuleList = requestModules; } ScriptContext* GetScriptContext() const { return scriptContext; } HRESULT ParseSource(__in_bcount(sourceLength) byte* sourceText, uint32 sourceLength, SRCINFO * srcInfo, Var* exceptionVar, bool isUtf8); @@ -95,6 +109,14 @@ namespace Js static SourceTextModuleRecord* Create(ScriptContext* scriptContext); + static Var EntryAsyncModuleFulfilled( + RecyclableObject* function, + CallInfo callInfo, ...); + + static Var EntryAsyncModuleRejected( + RecyclableObject* function, + CallInfo callInfo, ...); + uint GetLocalExportSlotIndexByExportName(PropertyId exportNameId); uint GetLocalExportSlotIndexByLocalName(PropertyId localNameId); Field(Var)* GetLocalExportSlots() const { return localExportSlots; } @@ -108,7 +130,7 @@ namespace Js void SetParent(SourceTextModuleRecord* parentRecord, LPCOLESTR moduleName); Utf8SourceInfo* GetSourceInfo() { return this->pSourceInfo; } - static Var ResolveOrRejectDynamicImportPromise(bool isResolve, Var value, ScriptContext *scriptContext, SourceTextModuleRecord *mr = nullptr); + static Var ResolveOrRejectDynamicImportPromise(bool isResolve, Var value, ScriptContext *scriptContext, SourceTextModuleRecord *mr = nullptr, bool useReturn = true); Var PostProcessDynamicModuleImport(); private: @@ -116,15 +138,17 @@ namespace Js const static uint InvalidSlotCount = 0xffffffff; const static uint InvalidSlotIndex = 0xffffffff; // TODO: move non-GC fields out to avoid false reference? - // This is the parsed tree resulted from compilation. Field(bool) confirmedReady = false; Field(bool) notifying = false; - Field(bool) wasParsed; - Field(bool) wasDeclarationInitialized; - Field(bool) parentsNotified; - Field(bool) isRootModule; - Field(bool) hadNotifyHostReady; - Field(ParseNodeProg *) parseTree; + Field(bool) wasPrepassed = false; + Field(bool) wasParsed = false; + Field(bool) wasDeclarationInitialized = false; + Field(bool) parentsNotified = false; + Field(bool) isRootModule = false; + Field(bool) hadNotifyHostReady = false; + Field(bool) evaluating = false; + Field(JavascriptGenerator*) generator; + Field(ParseNodeProg *) parseTree; // This is the parsed tree resulted from compilation. Field(Utf8SourceInfo*) pSourceInfo; Field(uint) sourceIndex; FieldNoBarrier(Parser*) parser; // we'll need to keep the parser around till we are done with bytecode gen. @@ -144,7 +168,6 @@ namespace Js Field(Js::JavascriptFunction*) rootFunction; Field(void*) hostDefined; - Field(Var) moduleUrl; Field(Var) normalizedSpecifier; Field(Var) errorObject; Field(Field(Var)*) localExportSlots; @@ -154,12 +177,18 @@ namespace Js Field(uint) localExportCount; Field(uint) moduleId; + // for Top level Await + Field(uint) awaitedModules; + Field(ModuleNameRecord) namespaceRecord; Field(JavascriptPromise*) promise; + Field(Var) importMetaObject; + HRESULT PostParseProcess(); HRESULT PrepareForModuleDeclarationInitialization(); void ReleaseParserResources(); + void ReleaseParserResourcesForHierarchy(); void ImportModuleListsFromParser(); HRESULT OnChildModuleReady(SourceTextModuleRecord* childModule, Var errorObj); void NotifyParentsAsNeeded(); @@ -180,4 +209,25 @@ namespace Js uint moduleId; Field(Var)* localExportSlotsAddr; }; + + class AsyncModuleCallbackFunction : public RuntimeFunction + { + protected: + DEFINE_VTABLE_CTOR(AsyncModuleCallbackFunction, RuntimeFunction); + DEFINE_MARSHAL_OBJECT_TO_SCRIPT_CONTEXT(AsyncModuleCallbackFunction); + + public: + AsyncModuleCallbackFunction( + DynamicType* type, + FunctionInfo* functionInfo, + SourceTextModuleRecord* module) : + RuntimeFunction(type, functionInfo), + module(module) {} + + Field(SourceTextModuleRecord*) module; + }; + + template<> + bool VarIsImpl(RecyclableObject* obj); + } diff --git a/lib/Runtime/Language/TaggedInt.h b/lib/Runtime/Language/TaggedInt.h index a6842ce37f2..ca154b1a74e 100644 --- a/lib/Runtime/Language/TaggedInt.h +++ b/lib/Runtime/Language/TaggedInt.h @@ -80,6 +80,11 @@ namespace Js { static const int k_nMaxValue = INT_MAX / AtomTag_Multiply; }; + template <> inline bool VarIs(Var aValue) + { + return TaggedInt::Is(aValue); + } + // Helper representing operations and checks on TaggedInteger // and JavascriptNumber ( aka TaggedFloat) - JavascriptNumber is a Tagged value // only for 64-bit platforms. diff --git a/lib/Runtime/Language/TaggedInt.inl b/lib/Runtime/Language/TaggedInt.inl index 0e2ffc9ce40..ac24cd60818 100644 --- a/lib/Runtime/Language/TaggedInt.inl +++ b/lib/Runtime/Language/TaggedInt.inl @@ -309,7 +309,7 @@ LblDone: bool isTaggedNumber; #if FLOATVAR // If we add another tagged representation that is not numerical - this will not work. - isTaggedNumber = !RecyclableObject::Is(aValue); + isTaggedNumber = !VarIs(aValue); #else isTaggedNumber = TaggedInt::Is(aValue); #endif diff --git a/lib/Runtime/Language/ValueType.cpp b/lib/Runtime/Language/ValueType.cpp index b86b7963f34..4a418aab38f 100644 --- a/lib/Runtime/Language/ValueType.cpp +++ b/lib/Runtime/Language/ValueType.cpp @@ -485,6 +485,11 @@ bool ValueType::IsPrimitive() const return result; } +bool ValueType::IsPrimitiveOrObject() const +{ + return OneOnOthersOff(Bits::PrimitiveOrObject, Bits::CanBeTaggedValue); +} + bool ValueType::IsLikelyPrimitive() const { bool result = @@ -809,7 +814,7 @@ ValueType ValueType::SetArrayTypeId(const Js::TypeId typeId) const { using namespace Js; Assert(IsLikelyArrayOrObjectWithArray()); - Assert(JavascriptArray::Is(typeId)); + Assert(JavascriptArray::IsNonES5Array(typeId)); Assert(typeId == TypeIds_Array || IsLikelyObject() && GetObjectType() == ObjectType::Array); // objects with native arrays are currently not supported Bits newBits = bits & ~(Bits::NonInts | Bits::NonFloats); @@ -1105,7 +1110,7 @@ ValueType ValueType::Merge(const Js::Var var) const ? GetInt(false) : ValueType::Float); } - return Merge(FromObject(RecyclableObject::UnsafeFromVar(var))); + return Merge(FromObject(UnsafeVarTo(var))); } ValueType::Bits ValueType::TypeIdToBits[Js::TypeIds_Limit]; @@ -1357,7 +1362,7 @@ ValueType ValueType::FromObject(Js::RecyclableObject *const recyclableObject) } Assert(DynamicType::Is(typeId)); // all static type IDs have nonzero values in TypeIdToBits - if(!JavascriptArray::Is(typeId)) + if(!JavascriptArray::IsNonES5Array(typeId)) { // TODO: Once the issue with loop bodies and uninitialized interpreter local slots is fixed, use FromVar DynamicObject *const object = static_cast(recyclableObject); @@ -1381,7 +1386,7 @@ ValueType ValueType::FromObjectWithArray(Js::DynamicObject *const object) Assert(objectArray); if(!VirtualTableInfo::HasVirtualTable(objectArray)) return GetObject(ObjectType::Object); - return FromObjectArray(JavascriptArray::FromVar(objectArray)); + return FromObjectArray(VarTo(objectArray)); } ValueType ValueType::FromObjectArray(Js::JavascriptArray *const objectArray) diff --git a/lib/Runtime/Language/ValueType.h b/lib/Runtime/Language/ValueType.h index 582d5d89e73..a5ffb88430b 100644 --- a/lib/Runtime/Language/ValueType.h +++ b/lib/Runtime/Language/ValueType.h @@ -172,6 +172,7 @@ class ValueType bool HasBeenPrimitive() const; bool IsPrimitive() const; + bool IsPrimitiveOrObject() const; bool IsLikelyPrimitive() const; #if DBG diff --git a/lib/Runtime/Language/WebAssemblySource.cpp b/lib/Runtime/Language/WebAssemblySource.cpp index b2ac5bf079a..7a4155f05c6 100644 --- a/lib/Runtime/Language/WebAssemblySource.cpp +++ b/lib/Runtime/Language/WebAssemblySource.cpp @@ -27,15 +27,15 @@ WebAssemblySource::WebAssemblySource(byte* source, uint bufferLength, bool creat void WebAssemblySource::ReadBufferSource(Var val, ScriptContext * scriptContext) { BYTE* srcBuffer; - if (Js::TypedArrayBase::Is(val)) + if (Js::VarIs(val)) { - Js::TypedArrayBase* array = Js::TypedArrayBase::FromVar(val); + Js::TypedArrayBase* array = Js::VarTo(val); srcBuffer = array->GetByteBuffer(); bufferLength = array->GetByteLength(); } - else if (Js::ArrayBuffer::Is(val)) + else if (Js::VarIs(val)) { - Js::ArrayBuffer* arrayBuffer = Js::ArrayBuffer::FromVar(val); + Js::ArrayBuffer* arrayBuffer = Js::VarTo(val); srcBuffer = arrayBuffer->GetBuffer(); bufferLength = arrayBuffer->GetByteLength(); } @@ -85,4 +85,4 @@ void WebAssemblySource::CreateSourceInfo(bool createNewContext, ScriptContext* s } } -#endif \ No newline at end of file +#endif diff --git a/lib/Runtime/Language/WebAssemblySource.h b/lib/Runtime/Language/WebAssemblySource.h index 5f5e7df3de0..74dcf7cef30 100644 --- a/lib/Runtime/Language/WebAssemblySource.h +++ b/lib/Runtime/Language/WebAssemblySource.h @@ -26,4 +26,4 @@ namespace Js void CreateSourceInfo(bool createNewContext, ScriptContext* scriptContext); }; } -#endif \ No newline at end of file +#endif diff --git a/lib/Runtime/Language/amd64/JavascriptConversionA.asm b/lib/Runtime/Language/amd64/JavascriptConversionA.asm index a644a9ee382..5dede284425 100644 --- a/lib/Runtime/Language/amd64/JavascriptConversionA.asm +++ b/lib/Runtime/Language/amd64/JavascriptConversionA.asm @@ -27,4 +27,4 @@ align 16 ?ULongToDouble@JavascriptConversion@Js@@SAN_K@Z ENDP _TEXT ENDS - end \ No newline at end of file + end diff --git a/lib/Runtime/Language/amd64/StackFrame.cpp b/lib/Runtime/Language/amd64/StackFrame.cpp index 53e1985e51e..2e72203d350 100644 --- a/lib/Runtime/Language/amd64/StackFrame.cpp +++ b/lib/Runtime/Language/amd64/StackFrame.cpp @@ -67,6 +67,7 @@ bool Js::Amd64StackFrame::Next() if (hasCallerContext) { *currentContext = *callerContext; + this->addressOfCodeAddr = this->GetAddressOfReturnAddress(); OnCurrentContextUpdated(); return true; } diff --git a/lib/Runtime/Language/amd64/amd64_Thunks.S b/lib/Runtime/Language/amd64/amd64_Thunks.S index ab4f99b57c7..7fdadaf1aaf 100644 --- a/lib/Runtime/Language/amd64/amd64_Thunks.S +++ b/lib/Runtime/Language/amd64/amd64_Thunks.S @@ -216,11 +216,13 @@ NESTED_ENTRY _ZN2Js23AsmJsExternalEntryPointEPNS_16RecyclableObjectENS_8CallInfo lea rbp, [rsp] set_cfa_register rbp, (2*8) // Set to compute CFA as: rbp + 16 (sizeof: [rbp] [ReturnAddress]) - + sub rsp, 0x40 mov [rsp + 0x28], r12 + .cfi_rel_offset r12, -0x18 mov [rsp + 0x30], r13 + .cfi_rel_offset r13, -0x10 mov r12, rdi // r12: entryObject mov r13, rsi // r13: callInfo @@ -267,7 +269,9 @@ NESTED_ENTRY _ZN2Js23AsmJsExternalEntryPointEPNS_16RecyclableObjectENS_8CallInfo mov rsp, r13 // restore stack pointer Epilogue: mov r12, [rsp + 0x28] + .cfi_restore r12 mov r13, [rsp + 0x30] + .cfi_restore r13 lea rsp, [rbp] pop_nonvol_reg rbp diff --git a/lib/Runtime/Language/arm64/arm64_CallEhFrame.S b/lib/Runtime/Language/arm64/arm64_CallEhFrame.S new file mode 100644 index 00000000000..a145a48551c --- /dev/null +++ b/lib/Runtime/Language/arm64/arm64_CallEhFrame.S @@ -0,0 +1,136 @@ +;------------------------------------------------------------------------------------------------------- +; Copyright (C) Microsoft. All rights reserved. +; Copyright (c) ChakraCore Project Contributors. All rights reserved. +; Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. +;------------------------------------------------------------------------------------------------------- + +; +; arm64_CallEhFrame() and arm64_CallCatch() both thunk into jitted code at the +; start of an EH region. The purpose is to restore the frame pointer (fp) +; and locals pointer (x28) to the appropriate values for executing the parent +; function and to create a local frame that can be unwound using the parent +; function's pdata. The parent's frame looks like this: +; +;------------------- +; {x0-x7} -- homed parameters +; lr -- address from which parent was called +; fp -- saved frame pointer, pointed to by current fp +; arg obj +; {x19-x28} -- non-volatile registers: all of them are saved +; {q8-q15} -- non-volatile double registers: all of them are saved +; locals area -- pointed to by x28 +; pointer to non-volatile register area above +; stack args +;------------------- +; +; The reason for the "pointer to non-volatile register area" is to allow the +; unwinder to deallocate the locals area regardless of its size. So this thunk can skip +; the allocation of the locals area altogether, and unwinding still works. +; The unwind pseudo-codes for the above prolog look like: +; +; 1. Deallocate stack args (sp now points to "pointer to non-volatile register area") +; 2. Restore rN (rN now points to first saved register) +; 3. Copy rN to sp (sp now points to first saved register) +; 4. Restore {q8-q15} (non-volatile double registers restored) +; 5. Restore {x19-x28} (non-volatile registers restored, sp points to saved r11) +; 6. Restore fp +; 7. Load lr into pc and deallocate remaining stack. +; +; The prologs for the assembly thunks allocate a frame that can be unwound by executing +; the above steps, although we don't allocate a locals area and don't know the size of the +; stack args. The caller doesn't return to this thunk; it executes its own epilog and +; returns to the caller of the thunk (one of the runtime try helpers). + + +#include "unixasmmacros.inc" + +.global C_FUNC(arm64_CallEhFrame) +.global C_FUNC(arm64_CallCatch) + +.macro STANDARD_PROLOG + + ; + ; Generate a prolog that will match the original function's, with all + ; parameters homed and all non-volatile registers saved: + ; + ; Size Offset + ; ---- ------ + ; 64 176 Homed parameters + ; 16 160 Saved FP/LR + ; 16 144 ArgOut / stack function list + ; 80 64 Saved x19-x28 + ; 64 0 Saved d8-d15 + ; = 240 total + ; + ; The try/catch/finally blocks will jump to the epilog code skipping + ; the instruction that deallocates the locals, in order to allow these + ; thunks to skip re-allocating locals space. + ; + + ; Params: + ; x0 -- thunk target + ; x1 -- frame pointer + ; x2 -- locals pointer + ; x3 -- size of stack args area + ; x4 -- exception object (for arm64_CallCatch only) + + PROLOG_SAVE_REG_PAIR d8, d9, -240 + PROLOG_SAVE_REG_PAIR d10, d11, 16 + PROLOG_SAVE_REG_PAIR d12, d13, 32 + PROLOG_SAVE_REG_PAIR d14, d15, 48 + PROLOG_SAVE_REG_PAIR x19, x20, 64 + PROLOG_SAVE_REG_PAIR x21, x22, 80 + PROLOG_SAVE_REG_PAIR x23, x24, 96 + PROLOG_SAVE_REG_PAIR x25, x26, 112 + PROLOG_SAVE_REG_PAIR x27, x28, 128 + PROLOG_SAVE_REG fp, 160 ; TODO: verify that this works the same as PROLOG_SAVE_REG_PAIR_NO_FP + PROLOG_SAVE_REG lr, 168 + + sub x15, x1, x2 ; x15 = frame pointer minus locals pointer + sub x15, x15, #160 ; x15 -= space we already allocated + add x15, x15, x3 ; x15 += argout area = same stack allocation as original function + lsr x15, x15, #4 ; x15 /= 16 + sub sp, sp, x15, lsl #4 ; allocate the stack + +.endm + + + +NESTED_ENTRY arm64_CallEhFrame, _TEXT, NoHandler + + STANDARD_PROLOG + + ; Set up the locals pointer and frame pointer + mov x28, x2 + mov fp, x1 + + ; Thunk to the jitted code (and don't return) + br x0 + +NESTED_END arm64_CallEhFrame + + + + ; arm64_CallCatch() is similar to arm64_CallEhFrame() except that we also pass the catch object to the jitted code + +NESTED_ENTRY arm64_CallCatch, _TEXT, NoHandler + + ; Params: + ; x0 -- thunk target + ; x1 -- frame pointer + ; x2 -- locals pointer + ; x3 -- size of stack args area + ; x4 -- exception object + + STANDARD_PROLOG + + ; Set up the locals pointer and frame pointer and catch object handler + mov x28, x2 + mov fp, x1 + mov x1, x4 + + ; Thunk to the jitted code (and don't return) + br x0 + +NESTED_END arm64_CallCatch + diff --git a/lib/Runtime/Language/arm64/arm64_Thunks.S b/lib/Runtime/Language/arm64/arm64_Thunks.S new file mode 100644 index 00000000000..de740b3f393 --- /dev/null +++ b/lib/Runtime/Language/arm64/arm64_Thunks.S @@ -0,0 +1,96 @@ +;------------------------------------------------------------------------------------------------------- +; Copyright (C) Microsoft. All rights reserved. +; Copyright (c) ChakraCore Project Contributors. All rights reserved. +; Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. +;------------------------------------------------------------------------------------------------------- + +#include "unixasmmacros.inc" + +.global C_FUNC(_ZN2Js13ScriptContext31ProfileModeDeferredParsingThunkEPNS_16RecyclableObjectENS_8CallInfoEz) +.global C_FUNC(_ZN2Js13ScriptContext35ProfileModeDeferredDeserializeThunkEPNS_16RecyclableObjectENS_8CallInfoEz) + +#ifdef _ENABLE_DYNAMIC_THUNKS + +.global C_FUNC(_ZN2Js21InterpreterStackFrame28DelayDynamicInterpreterThunkEPNS_16RecyclableObjectENS_8CallInfoEz) +.global C_FUNC(_ZN2Js18DynamicProfileInfo29EnsureDynamicProfileInfoThunkEPNS_16RecyclableObjectENS_8CallInfoEz) + +;;============================================================================================================ +;; InterpreterStackFrame::DelayDynamicInterpreterThunk +;;============================================================================================================ + ;Var InterpreterStackFrame::DelayDynamicInterpreterThunk(RecyclableObject* function, CallInfo callInfo, ...) + +NESTED_ENTRY _ZN2Js21InterpreterStackFrame28DelayDynamicInterpreterThunkEPNS_16RecyclableObjectENS_8CallInfoEz, _TEXT, NoHandler + + PROLOG_SAVE_REG_PAIR_INDEXED fp, lr, -32 ; save parameters and volatile registers + stp x0, x1, [sp, #16] + + bl C_FUNC(_ZN2Js21InterpreterStackFrame29EnsureDynamicInterpreterThunkEPNS_14ScriptFunctionE) ; call InterpreterStackFrame::EnsureDynamicInterpreterThunk + mov x16, x0 ; back up entryPoint in x16 + + ldp x0, x1, [sp, #16] ; restore parameters and volatile registers + + EPILOG_RESTORE_REG_PAIR_INDEXED fp, lr, 32 + br x16 ; jump (tail call) to new entryPoint + +NESTED_END _ZN2Js21InterpreterStackFrame28DelayDynamicInterpreterThunkEPNS_16RecyclableObjectENS_8CallInfoEz, _TEXT + +;;============================================================================================================ +;; DynamicProfileInfo::EnsureDynamicProfileInfoThunk +;;============================================================================================================ + ;Var DynamicProfileInfo::EnsureDynamicProfileInfoThunk(RecyclableObject* function, CallInfo callInfo, ...) +NESTED_ENTRY _ZN2Js18DynamicProfileInfo29EnsureDynamicProfileInfoThunkEPNS_16RecyclableObjectENS_8CallInfoEz, _TEXT, NoHandler + + PROLOG_SAVE_REG_PAIR_INDEXED fp, lr, -32 ; save parameters and volatile registers + stp x0, x1, [sp, #16] + + bl C_FUNC(_ZN2Js18DynamicProfileInfo24EnsureDynamicProfileInfoEPNS_14ScriptFunctionE) ; call DynamicProfileInfo::EnsureDynamicProfileInfo + mov x16, x0 ; back up entryPoint in x16 + + ldp x0, x1, [sp, #16] ; restore parameters and volatile registers + + EPILOG_RESTORE_REG_PAIR_INDEXED fp, lr, 32 + br x16 ; jump (tail call) to new entryPoint + +NESTED_END _ZN2Js18DynamicProfileInfo29EnsureDynamicProfileInfoThunkEPNS_16RecyclableObjectENS_8CallInfoEz, _TEXT + +#endif + +;;============================================================================================================ +;; ScriptContext::ProfileModeDeferredParsingThunk +;;============================================================================================================ + ;; Var ScriptContext::ProfileModeDeferredParsingThunk(RecyclableObject* function, CallInfo callInfo, ...) +NESTED_ENTRY _ZN2Js13ScriptContext31ProfileModeDeferredParsingThunkEPNS_16RecyclableObjectENS_8CallInfoEz, _TEXT, NoHandler + + PROLOG_SAVE_REG_PAIR_INDEXED fp, lr, -32 ; save parameters and volatile registers + stp x0, x1, [sp, #16] + + mov x0, sp ; Pass the address of the function at the saved x0 in case it need to be boxed + add x0, x0, #16 ; 16 is subtracted from the stack pointer when the a function is called, add it back here. + bl C_FUNC(_ZN2Js13ScriptContext24ProfileModeDeferredParseEPPNS_14ScriptFunctionE) ; call ScriptContext::ProfileModeDeferredParse + mov x16, x0 ; back up entryPoint in x16 + + ldp x0, x1, [sp, #16] ; restore parameters and volatile registers + + EPILOG_RESTORE_REG_PAIR_INDEXED fp, lr, 32 + br x16 ; jump (tail call) to new entryPoint + +NESTED_END _ZN2Js13ScriptContext31ProfileModeDeferredParsingThunkEPNS_16RecyclableObjectENS_8CallInfoEz, _TEXT + +;;============================================================================================================ +;; ScriptContext::ProfileModeDeferredDeserializeThunk +;;============================================================================================================ + ;; Var ScriptContext::ProfileModeDeferredDeserializeThunk(RecyclableObject* function, CallInfo callInfo, ...) +NESTED_ENTRY _ZN2Js13ScriptContext35ProfileModeDeferredDeserializeThunkEPNS_16RecyclableObjectENS_8CallInfoEz, _TEXT, NoHandler + + PROLOG_SAVE_REG_PAIR_INDEXED fp, lr, -32 ; save parameters and volatile registers + stp x0, x1, [sp, #16] + + bl C_FUNC(_ZN2Js13ScriptContext30ProfileModeDeferredDeserializeEPNS_14ScriptFunctionE) ; call ScriptContext::ProfileModeDeferredDeserialize + mov x16, x0 ; back up entryPoint in x16 + + ldp x0, x1, [sp, #16] ; restore parameters and volatile registers + + EPILOG_RESTORE_REG_PAIR_INDEXED fp, lr, 32 + br x16 ; jump (tail call) to new entryPoint + +NESTED_END _ZN2Js13ScriptContext35ProfileModeDeferredDeserializeThunkEPNS_16RecyclableObjectENS_8CallInfoEz, _TEXT diff --git a/lib/Runtime/Language/i386/AsmJsJitTemplate.cpp b/lib/Runtime/Language/i386/AsmJsJitTemplate.cpp index 4ac03c64cc9..78128610434 100644 --- a/lib/Runtime/Language/i386/AsmJsJitTemplate.cpp +++ b/lib/Runtime/Language/i386/AsmJsJitTemplate.cpp @@ -546,16 +546,25 @@ namespace Js AsmJsSIMDValue* simdArg; // setup stack memory - AsmJsScriptFunction* asmJsFunc = AsmJsScriptFunction::FromVar(func); + AsmJsScriptFunction* asmJsFunc = VarTo(func); Var moduleEnv = asmJsFunc->GetModuleEnvironment(); JavascriptArrayBuffer* arrayBuffer = asmJsFunc->GetAsmJsArrayBuffer(); int arraySize = 0; BYTE* arrayPtr = nullptr; - if (JavascriptArrayBuffer::Is(arrayBuffer)) + + if (VarIsCorrectType(arrayBuffer)) { arrayPtr = arrayBuffer->GetBuffer(); arraySize = arrayBuffer->GetByteLength(); } + else + { + // Null should be the only way to fail VarIsCorrectType + // TODO: just check for null above + Assert(arrayBuffer == nullptr); + arrayBuffer = nullptr; + } + Var* m_localSlots; int* m_localIntSlots; double* m_localDoubleSlots; @@ -1349,7 +1358,7 @@ namespace Js X86TemplateData* templateData = GetTemplateData( context ); int size = 0; leftOffset -= templateData->GetBaseOffSet(); - if (!isSrc2Const) + if (!isSrc2Const) { rightOffset -= templateData->GetBaseOffSet(); } @@ -1375,11 +1384,11 @@ namespace Js size += CMP::EncodeInstruction( buffer, InstrParamsRegAddr( reg1, RegEBP, rightOffset ) ); break; case 2: - if (isSrc2Const) + if (isSrc2Const) { size += CMP::EncodeInstruction(buffer, InstrParamsAddrImm(RegEBP, leftOffset, rightOffset)); } - else + else { size += CMP::EncodeInstruction(buffer, InstrParamsRegAddr(reg2, RegEBP, leftOffset)); } diff --git a/lib/Runtime/Library/ArgumentsObject.cpp b/lib/Runtime/Library/ArgumentsObject.cpp index d8302b6f017..80477729b55 100644 --- a/lib/Runtime/Library/ArgumentsObject.cpp +++ b/lib/Runtime/Library/ArgumentsObject.cpp @@ -27,11 +27,6 @@ namespace Js return TRUE; } - bool ArgumentsObject::Is(Var aValue) - { - return JavascriptOperators::GetTypeId(aValue) == TypeIds_Arguments; - } - HeapArgumentsObject::HeapArgumentsObject(DynamicType * type) : ArgumentsObject(type), frameObject(nullptr), formalCount(0), numOfArguments(0), callerDeleted(false), deletedArgs(nullptr) { @@ -40,7 +35,7 @@ namespace Js HeapArgumentsObject::HeapArgumentsObject(Recycler *recycler, ActivationObject* obj, uint32 formalCount, DynamicType * type) : ArgumentsObject(type), frameObject(obj), formalCount(formalCount), numOfArguments(0), callerDeleted(false), deletedArgs(nullptr) { - Assert(!frameObject || ActivationObject::Is(frameObject)); + Assert(!frameObject || VarIsCorrectType(frameObject)); } void HeapArgumentsObject::SetNumberOfArguments(uint32 len) @@ -55,9 +50,9 @@ namespace Js HeapArgumentsObject* HeapArgumentsObject::As(Var aValue) { - if (ArgumentsObject::Is(aValue) && static_cast(RecyclableObject::FromVar(aValue))->GetHeapArguments() == aValue) + if (VarIs(aValue) && static_cast(VarTo(aValue))->GetHeapArguments() == aValue) { - return static_cast(RecyclableObject::FromVar(aValue)); + return static_cast(VarTo(aValue)); } return NULL; } diff --git a/lib/Runtime/Library/ArgumentsObject.h b/lib/Runtime/Library/ArgumentsObject.h index 09c0d53db51..09ea2284b01 100644 --- a/lib/Runtime/Library/ArgumentsObject.h +++ b/lib/Runtime/Library/ArgumentsObject.h @@ -19,8 +19,6 @@ namespace Js Assert(type->GetTypeId() == TypeIds_Arguments); } - static bool Is(Var aValue); - virtual BOOL GetDiagValueString(StringBuilder* stringBuilder, ScriptContext* requestContext) override; virtual BOOL GetDiagTypeString(StringBuilder* stringBuilder, ScriptContext* requestContext) override; virtual BOOL GetEnumerator(JavascriptStaticEnumerator * enumerator, EnumeratorFlags flags, ScriptContext* requestContext, EnumeratorCache * enumeratorCache = nullptr) override; @@ -32,6 +30,11 @@ namespace Js virtual BOOL AdvanceWalkerToArgsFrame(JavascriptStackWalker *walker) = 0; }; + template <> inline bool VarIsImpl(RecyclableObject* obj) + { + return JavascriptOperators::GetTypeId(obj) == TypeIds_Arguments; + } + class ES5HeapArgumentsObject; // The arguments passed to a function are cached as follows: @@ -116,11 +119,11 @@ namespace Js } ES5HeapArgumentsObject* ConvertToUnmappedArgumentsObject(bool overwriteArgsUsingFrameObject = true); - const ActivationObject* const GetFrameObject() { return frameObject; } + const ActivationObject* GetFrameObject() { return frameObject; } void SetFrameObject(ActivationObject * value) { AssertMsg(frameObject == nullptr, "Setting the frame object again?"); - Assert(!value || ActivationObject::Is(value)); + Assert(!value || VarIsCorrectType(value)); frameObject = value; } diff --git a/lib/Runtime/Library/ArgumentsObjectEnumerator.h b/lib/Runtime/Library/ArgumentsObjectEnumerator.h index 39835228b72..423962de1e2 100644 --- a/lib/Runtime/Library/ArgumentsObjectEnumerator.h +++ b/lib/Runtime/Library/ArgumentsObjectEnumerator.h @@ -21,6 +21,7 @@ namespace Js ArgumentsObjectPrefixEnumerator(ArgumentsObject* argumentsObject, EnumeratorFlags flags, ScriptContext* requestContext); virtual void Reset() override; virtual JavascriptString * MoveAndGetNext(PropertyId& propertyId, PropertyAttributes* attributes = nullptr) override; + virtual uint32 GetCurrentItemIndex() override { return formalArgIndex; } }; class ES5ArgumentsObjectEnumerator : public ArgumentsObjectPrefixEnumerator diff --git a/lib/Runtime/Library/ArrayBuffer.cpp b/lib/Runtime/Library/ArrayBuffer.cpp index 29e3523fd57..f199f5d5341 100644 --- a/lib/Runtime/Library/ArrayBuffer.cpp +++ b/lib/Runtime/Library/ArrayBuffer.cpp @@ -39,21 +39,9 @@ namespace Js return 0; } - bool ArrayBufferBase::Is(Var value) + template <> bool VarIsImpl(RecyclableObject* obj) { - return ArrayBuffer::Is(value) || SharedArrayBuffer::Is(value); - } - - ArrayBufferBase* ArrayBufferBase::FromVar(Var value) - { - AssertOrFailFast(ArrayBufferBase::Is(value)); - return static_cast (value); - } - - ArrayBufferBase* ArrayBufferBase::UnsafeFromVar(Var value) - { - Assert(ArrayBufferBase::Is(value)); - return static_cast (value); + return VarIs(obj) || VarIs(obj); } ArrayBuffer* ArrayBuffer::NewFromDetachedState(DetachedStateBase* state, JavascriptLibrary *library) @@ -100,7 +88,7 @@ namespace Js switch (JavascriptOperators::GetTypeId(parent)) { case TypeIds_Int8Array: - if (Int8VirtualArray::Is(parent)) + if (VarIs(parent)) { if (VirtualTableInfo::HasVirtualTable(parent)) { @@ -112,11 +100,11 @@ namespace Js VirtualTableInfo>::SetVirtualTable(parent); } } - TypedArrayBase::UnsafeFromVar(parent)->ClearLengthAndBufferOnDetach(); + UnsafeVarTo(parent)->ClearLengthAndBufferOnDetach(); break; case TypeIds_Uint8Array: - if (Uint8VirtualArray::Is(parent)) + if (VarIs(parent)) { if (VirtualTableInfo::HasVirtualTable(parent)) { @@ -128,11 +116,11 @@ namespace Js VirtualTableInfo>::SetVirtualTable(parent); } } - TypedArrayBase::UnsafeFromVar(parent)->ClearLengthAndBufferOnDetach(); + UnsafeVarTo(parent)->ClearLengthAndBufferOnDetach(); break; case TypeIds_Uint8ClampedArray: - if (Uint8ClampedVirtualArray::Is(parent)) + if (VarIs(parent)) { if (VirtualTableInfo::HasVirtualTable(parent)) { @@ -144,11 +132,11 @@ namespace Js VirtualTableInfo>::SetVirtualTable(parent); } } - TypedArrayBase::UnsafeFromVar(parent)->ClearLengthAndBufferOnDetach(); + UnsafeVarTo(parent)->ClearLengthAndBufferOnDetach(); break; case TypeIds_Int16Array: - if (Int16VirtualArray::Is(parent)) + if (VarIs(parent)) { if (VirtualTableInfo::HasVirtualTable(parent)) { @@ -160,11 +148,11 @@ namespace Js VirtualTableInfo>::SetVirtualTable(parent); } } - TypedArrayBase::UnsafeFromVar(parent)->ClearLengthAndBufferOnDetach(); + UnsafeVarTo(parent)->ClearLengthAndBufferOnDetach(); break; case TypeIds_Uint16Array: - if (Uint16VirtualArray::Is(parent)) + if (VarIs(parent)) { if (VirtualTableInfo::HasVirtualTable(parent)) { @@ -176,11 +164,11 @@ namespace Js VirtualTableInfo>::SetVirtualTable(parent); } } - TypedArrayBase::UnsafeFromVar(parent)->ClearLengthAndBufferOnDetach(); + UnsafeVarTo(parent)->ClearLengthAndBufferOnDetach(); break; case TypeIds_Int32Array: - if (Int32VirtualArray::Is(parent)) + if (VarIs(parent)) { if (VirtualTableInfo::HasVirtualTable(parent)) { @@ -192,11 +180,11 @@ namespace Js VirtualTableInfo>::SetVirtualTable(parent); } } - TypedArrayBase::UnsafeFromVar(parent)->ClearLengthAndBufferOnDetach(); + UnsafeVarTo(parent)->ClearLengthAndBufferOnDetach(); break; case TypeIds_Uint32Array: - if (Uint32VirtualArray::Is(parent)) + if (VarIs(parent)) { if (VirtualTableInfo::HasVirtualTable(parent)) { @@ -208,11 +196,11 @@ namespace Js VirtualTableInfo>::SetVirtualTable(parent); } } - TypedArrayBase::UnsafeFromVar(parent)->ClearLengthAndBufferOnDetach(); + UnsafeVarTo(parent)->ClearLengthAndBufferOnDetach(); break; case TypeIds_Float32Array: - if (Float32VirtualArray::Is(parent)) + if (VarIs(parent)) { if (VirtualTableInfo::HasVirtualTable(parent)) { @@ -224,11 +212,11 @@ namespace Js VirtualTableInfo>::SetVirtualTable(parent); } } - TypedArrayBase::UnsafeFromVar(parent)->ClearLengthAndBufferOnDetach(); + UnsafeVarTo(parent)->ClearLengthAndBufferOnDetach(); break; case TypeIds_Float64Array: - if (Float64VirtualArray::Is(parent)) + if (VarIs(parent)) { if (VirtualTableInfo::HasVirtualTable(parent)) { @@ -240,18 +228,18 @@ namespace Js VirtualTableInfo>::SetVirtualTable(parent); } } - TypedArrayBase::UnsafeFromVar(parent)->ClearLengthAndBufferOnDetach(); + UnsafeVarTo(parent)->ClearLengthAndBufferOnDetach(); break; case TypeIds_Int64Array: case TypeIds_Uint64Array: case TypeIds_CharArray: case TypeIds_BoolArray: - TypedArrayBase::UnsafeFromVar(parent)->ClearLengthAndBufferOnDetach(); + UnsafeVarTo(parent)->ClearLengthAndBufferOnDetach(); break; case TypeIds_DataView: - DataView::FromVar(parent)->ClearLengthAndBufferOnDetach(); + VarTo(parent)->ClearLengthAndBufferOnDetach(); break; default: @@ -345,6 +333,12 @@ namespace Js } } + ArrayBuffer * ArrayBuffer::GetAsArrayBuffer() + { + AssertOrFailFast(VarIsCorrectType(this)); + return this; + } + uint32 ArrayBuffer::ToIndex(Var value, int32 errorCode, ScriptContext *scriptContext, uint32 MaxAllowedLength, bool checkSameValueZero) { if (JavascriptOperators::IsUndefined(value)) @@ -408,8 +402,8 @@ namespace Js } RecyclableObject* newArr = scriptContext->GetLibrary()->CreateArrayBuffer(byteLength); - Assert(ArrayBuffer::Is(newArr)); - if (byteLength > 0 && !ArrayBuffer::FromVar(newArr)->GetByteLength()) + Assert(VarIs(newArr)); + if (byteLength > 0 && !VarTo(newArr)->GetByteLength()) { JavascriptError::ThrowRangeError(scriptContext, JSERR_FunctionArgument_Invalid); } @@ -420,7 +414,7 @@ namespace Js } #endif return isCtorSuperCall ? - JavascriptOperators::OrdinaryCreateFromConstructor(RecyclableObject::FromVar(newTarget), newArr, nullptr, scriptContext) : + JavascriptOperators::OrdinaryCreateFromConstructor(VarTo(newTarget), newArr, nullptr, scriptContext) : newArr; } @@ -434,12 +428,12 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !ArrayBuffer::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { JavascriptError::ThrowTypeError(scriptContext, JSERR_NeedArrayBufferObject); } - ArrayBuffer* arrayBuffer = ArrayBuffer::FromVar(args[0]); + ArrayBuffer* arrayBuffer = VarTo(args[0]); if (arrayBuffer->IsDetached()) { return JavascriptNumber::ToVar(0, scriptContext); @@ -468,7 +462,7 @@ namespace Js } // Only DataView or any TypedArray objects have [[ViewedArrayBuffer]] internal slots - if (DataView::Is(arg) || TypedArrayBase::Is(arg)) + if (VarIs(arg) || VarIs(arg)) { return library->GetTrue(); } @@ -489,12 +483,12 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count < 2 || !ArrayBuffer::Is(args[1])) + if (args.Info.Count < 2 || !VarIs(args[1])) { JavascriptError::ThrowTypeError(scriptContext, JSERR_NeedArrayBufferObject); } - ArrayBuffer* arrayBuffer = ArrayBuffer::FromVar(args[1]); + ArrayBuffer* arrayBuffer = VarTo(args[1]); if (arrayBuffer->IsDetached()) { @@ -523,13 +517,13 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (!ArrayBuffer::Is(args[0])) + if (!VarIs(args[0])) { JavascriptError::ThrowTypeError(scriptContext, JSERR_NeedArrayBufferObject); } JavascriptLibrary* library = scriptContext->GetLibrary(); - ArrayBuffer* arrayBuffer = ArrayBuffer::FromVar(args[0]); + ArrayBuffer* arrayBuffer = VarTo(args[0]); if (arrayBuffer->IsDetached()) // 24.1.4.3: 5. If IsDetachedBuffer(O) is true, then throw a TypeError exception. { @@ -566,50 +560,43 @@ namespace Js // start and end are clamped to valid indices, so the new length also cannot exceed MaxArrayBufferLength. // Therefore, should be safe to cast down newLen to uint32. // TODO: If we ever support allocating ArrayBuffer with byteLength > MaxArrayBufferLength we may need to review this math. - Assert(newLen < MaxArrayBufferLength); + Assert(newLen <= MaxArrayBufferLength); uint32 byteLength = static_cast(newLen); ArrayBuffer* newBuffer = nullptr; - if (scriptContext->GetConfig()->IsES6SpeciesEnabled()) - { - JavascriptFunction* defaultConstructor = scriptContext->GetLibrary()->GetArrayBufferConstructor(); - RecyclableObject* constructor = JavascriptOperators::SpeciesConstructor(arrayBuffer, defaultConstructor, scriptContext); - AssertOrFailFast(JavascriptOperators::IsConstructor(constructor)); + JavascriptFunction* defaultConstructor = scriptContext->GetLibrary()->GetArrayBufferConstructor(); + RecyclableObject* constructor = JavascriptOperators::SpeciesConstructor(arrayBuffer, defaultConstructor, scriptContext); + AssertOrFailFast(JavascriptOperators::IsConstructor(constructor)); - bool isDefaultConstructor = constructor == defaultConstructor; - Js::Var newVar = JavascriptOperators::NewObjectCreationHelper_ReentrancySafe(constructor, isDefaultConstructor, scriptContext->GetThreadContext(), [=]()->Js::Var - { - Js::Var constructorArgs[] = { constructor, JavascriptNumber::ToVar(byteLength, scriptContext) }; - Js::CallInfo constructorCallInfo(Js::CallFlags_New, _countof(constructorArgs)); - return JavascriptOperators::NewScObject(constructor, Js::Arguments(constructorCallInfo, constructorArgs), scriptContext); - }); - - if (!ArrayBuffer::Is(newVar)) // 24.1.4.3: 19.If new does not have an [[ArrayBufferData]] internal slot throw a TypeError exception. - { - JavascriptError::ThrowTypeError(scriptContext, JSERR_NeedArrayBufferObject); - } + bool isDefaultConstructor = constructor == defaultConstructor; + Js::Var newVar = JavascriptOperators::NewObjectCreationHelper_ReentrancySafe(constructor, isDefaultConstructor, scriptContext->GetThreadContext(), [=]()->Js::Var + { + Js::Var constructorArgs[] = { constructor, JavascriptNumber::ToVar(byteLength, scriptContext) }; + Js::CallInfo constructorCallInfo(Js::CallFlags_New, _countof(constructorArgs)); + return JavascriptOperators::NewScObject(constructor, Js::Arguments(constructorCallInfo, constructorArgs), scriptContext); + }); - newBuffer = ArrayBuffer::FromVar(newVar); + if (!VarIs(newVar)) // 24.1.4.3: 19.If new does not have an [[ArrayBufferData]] internal slot throw a TypeError exception. + { + JavascriptError::ThrowTypeError(scriptContext, JSERR_NeedArrayBufferObject); + } - if (newBuffer->IsDetached()) // 24.1.4.3: 21. If IsDetachedBuffer(new) is true, then throw a TypeError exception. - { - JavascriptError::ThrowTypeError(scriptContext, JSERR_DetachedTypedArray, _u("ArrayBuffer.prototype.slice")); - } + newBuffer = VarTo(newVar); - if (newBuffer == arrayBuffer) // 24.1.4.3: 22. If SameValue(new, O) is true, then throw a TypeError exception. - { - JavascriptError::ThrowTypeError(scriptContext, JSERR_NeedArrayBufferObject); - } + if (newBuffer->IsDetached()) // 24.1.4.3: 21. If IsDetachedBuffer(new) is true, then throw a TypeError exception. + { + JavascriptError::ThrowTypeError(scriptContext, JSERR_DetachedTypedArray, _u("ArrayBuffer.prototype.slice")); + } - if (newBuffer->bufferLength < byteLength) // 24.1.4.3: 23.If the value of new's [[ArrayBufferByteLength]] internal slot < newLen, then throw a TypeError exception. - { - JavascriptError::ThrowTypeError(scriptContext, JSERR_ArgumentOutOfRange, _u("ArrayBuffer.prototype.slice")); - } + if (newBuffer == arrayBuffer) // 24.1.4.3: 22. If SameValue(new, O) is true, then throw a TypeError exception. + { + JavascriptError::ThrowTypeError(scriptContext, JSERR_NeedArrayBufferObject); } - else + + if (newBuffer->bufferLength < byteLength) // 24.1.4.3: 23.If the value of new's [[ArrayBufferByteLength]] internal slot < newLen, then throw a TypeError exception. { - newBuffer = library->CreateArrayBuffer(byteLength); + JavascriptError::ThrowTypeError(scriptContext, JSERR_ArgumentOutOfRange, _u("ArrayBuffer.prototype.slice")); } Assert(newBuffer); @@ -640,29 +627,10 @@ namespace Js return args[0]; } - ArrayBuffer* ArrayBuffer::FromVar(Var aValue) - { - AssertOrFailFastMsg(Is(aValue), "var must be an ArrayBuffer"); - - return static_cast(aValue); - } - - ArrayBuffer* ArrayBuffer::UnsafeFromVar(Var aValue) - { - AssertMsg(Is(aValue), "var must be an ArrayBuffer"); - - return static_cast(aValue); - } - - bool ArrayBuffer::Is(Var aValue) - { - return JavascriptOperators::GetTypeId(aValue) == TypeIds_ArrayBuffer; - } - ArrayBufferContentForDelayedFreeBase* ArrayBuffer::CopyBufferContentForDelayedFree(RefCountedBuffer * content, DECLSPEC_GUARD_OVERFLOW uint32 bufferLength) { Assert(content != nullptr); - FreeFn* freeFn = nullptr; + FreeFn freeFn = nullptr; #if ENABLE_FAST_ARRAYBUFFER if (IsValidVirtualBufferLength(bufferLength)) { @@ -856,9 +824,23 @@ namespace Js return result; } + ArrayBuffer::FreeFn JavascriptArrayBuffer::GetArrayBufferFreeFn() + { +#if ENABLE_FAST_ARRAYBUFFER + if (IsValidVirtualBufferLength(bufferLength)) + { + return FreeMemAlloc; + } + else +#endif + { + return free; + } + } + ArrayBufferDetachedStateBase* JavascriptArrayBuffer::CreateDetachedState(RefCountedBuffer * content, uint32 bufferLength) { - FreeFn* freeFn = nullptr; + FreeFn freeFn = nullptr; ArrayBufferAllocationType allocationType; #if ENABLE_FAST_ARRAYBUFFER if (IsValidVirtualBufferLength(bufferLength)) @@ -925,14 +907,14 @@ namespace Js if (refCount == 0) { BYTE * buffer = content->GetBuffer(); - if (buffer) + if (buffer && !this->externalized) { // Recycler may not be available at Dispose. We need to // free the memory and report that it has been freed at the same // time. Otherwise, AllocationPolicyManager is unable to provide correct feedback #if ENABLE_FAST_ARRAYBUFFER //AsmJS Virtual Free - if (buffer && IsValidVirtualBufferLength(this->bufferLength)) + if (IsValidVirtualBufferLength(this->bufferLength)) { FreeMemAlloc(buffer); } diff --git a/lib/Runtime/Library/ArrayBuffer.h b/lib/Runtime/Library/ArrayBuffer.h index a75bf2d82dc..be7fa2c44c6 100644 --- a/lib/Runtime/Library/ArrayBuffer.h +++ b/lib/Runtime/Library/ArrayBuffer.h @@ -60,13 +60,13 @@ namespace Js return AllocWrapper(length, MaxVirtualSize); } - static void FreeMemAlloc(Var ptr) + static void __cdecl FreeMemAlloc(Var ptr) { BOOL fSuccess = VirtualFree((LPVOID)ptr, 0, MEM_RELEASE); Assert(fSuccess); } #else - static void FreeMemAlloc(Var ptr) + static void __cdecl FreeMemAlloc(Var ptr) { // This free function should never be used Js::Throw::FatalInternalError(); @@ -77,7 +77,12 @@ namespace Js virtual void MarshalToScriptContext(Js::ScriptContext * scriptContext) = 0; - ArrayBufferBase(DynamicType *type) : DynamicObject(type), isDetached(false) { } + ArrayBufferBase(DynamicType *type) : + DynamicObject(type), + isDetached(false), + infoBits(0), + externalized(false) { } + bool IsDetached() { return isDetached; } #if ENABLE_TTD @@ -94,15 +99,20 @@ namespace Js virtual BYTE* GetBuffer() const = 0; virtual bool IsValidVirtualBufferLength(uint length) const { return false; }; - static bool Is(Var value); - static ArrayBufferBase* FromVar(Var value); - static ArrayBufferBase* UnsafeFromVar(Var value); + char GetExtraInfoBits() { return infoBits; } + void SetExtraInfoBits(char info) { infoBits = info; } + static int GetIsDetachedOffset() { return offsetof(ArrayBufferBase, isDetached); } + void Externalize() { this->externalized = true; } protected: Field(bool) isDetached; + Field(bool) externalized; + Field(char) infoBits; }; + template <> bool VarIsImpl(RecyclableObject* obj); + // This encapsulate buffer blob and the refCount. class RefCountedBuffer { @@ -139,9 +149,9 @@ namespace Js class ArrayBufferDetachedState : public ArrayBufferDetachedStateBase { public: - FreeFN* freeFunction; + FreeFN freeFunction; Recycler* recycler; - ArrayBufferDetachedState(RefCountedBuffer* buffer, uint32 bufferLength, FreeFN* freeFunction, Recycler* r, ArrayBufferAllocationType allocationType) + ArrayBufferDetachedState(RefCountedBuffer* buffer, uint32 bufferLength, FreeFN freeFunction, Recycler* r, ArrayBufferAllocationType allocationType) : ArrayBufferDetachedStateBase(TypeIds_ArrayBuffer, buffer, bufferLength, allocationType), recycler(r), freeFunction(freeFunction) @@ -192,10 +202,7 @@ namespace Js static Var EntryDetach(RecyclableObject* function, CallInfo callInfo, ...); #endif - static bool Is(Var aValue); static ArrayBuffer* NewFromDetachedState(DetachedStateBase* state, JavascriptLibrary *library); - static ArrayBuffer* FromVar(Var aValue); - static ArrayBuffer* UnsafeFromVar(Var aValue); virtual BOOL GetDiagTypeString(StringBuilder* stringBuilder, ScriptContext* requestContext) override; virtual BOOL GetDiagValueString(StringBuilder* stringBuilder, ScriptContext* requestContext) override; @@ -205,9 +212,13 @@ namespace Js virtual BYTE* GetBuffer() const override; RefCountedBuffer *GetBufferContent() { return bufferContent; } static int GetBufferContentsOffset() { return offsetof(ArrayBuffer, bufferContent); } - static int GetByteLengthOffset() { return offsetof(ArrayBuffer, bufferLength); } + typedef void(__cdecl *FreeFn)(void*); + virtual FreeFn GetArrayBufferFreeFn() { return nullptr; } + static int GetByteLengthOffset() { return offsetof(ArrayBuffer, bufferLength); } virtual void AddParent(ArrayBufferParent* parent) override; + + void Detach(); #if defined(TARGET_64) //maximum 2G -1 for amd64 static const uint32 MaxArrayBufferLength = 0x7FFFFFFF; @@ -220,7 +231,7 @@ namespace Js virtual bool IsValidAsmJsBufferLength(uint length, bool forceCheck = false) { return false; } virtual bool IsArrayBuffer() override { return true; } virtual bool IsSharedArrayBuffer() override { return false; } - virtual ArrayBuffer * GetAsArrayBuffer() override { return ArrayBuffer::FromVar(this); } + virtual ArrayBuffer * GetAsArrayBuffer() override; virtual ArrayBufferContentForDelayedFreeBase* CopyBufferContentForDelayedFree(RefCountedBuffer * content, DECLSPEC_GUARD_OVERFLOW uint32 bufferLength); @@ -228,9 +239,7 @@ namespace Js protected: virtual void ReportExternalMemoryFree(); - void Detach(); - typedef void __cdecl FreeFn(void* ptr); virtual ArrayBufferDetachedStateBase* CreateDetachedState(RefCountedBuffer * content, DECLSPEC_GUARD_OVERFLOW uint32 bufferLength) = 0; // This function will be called from External buffer and projection buffer as they pass the buffer @@ -253,6 +262,11 @@ namespace Js Field(uint32) bufferLength; // Number of bytes allocated }; + template <> inline bool VarIsImpl(RecyclableObject* obj) + { + return JavascriptOperators::GetTypeId(obj) == TypeIds_ArrayBuffer; + } + class ArrayBufferParent : public ArrayObject { friend ArrayBuffer; @@ -303,7 +317,9 @@ namespace Js virtual bool IsValidAsmJsBufferLength(uint length, bool forceCheck = false) override; virtual bool IsValidVirtualBufferLength(uint length) const override; - protected: + virtual FreeFn GetArrayBufferFreeFn() override; + + protected: JavascriptArrayBuffer(DynamicType * type); virtual ArrayBufferDetachedStateBase* CreateDetachedState(RefCountedBuffer * content, DECLSPEC_GUARD_OVERFLOW uint32 bufferLength) override; @@ -349,7 +365,7 @@ namespace Js DEFINE_VTABLE_CTOR(ProjectionArrayBuffer, ArrayBuffer); DEFINE_MARSHAL_OBJECT_TO_SCRIPT_CONTEXT(ProjectionArrayBuffer); - typedef void __stdcall FreeFn(LPVOID ptr); + typedef void (__stdcall *FreeFn)(LPVOID ptr); virtual ArrayBufferDetachedStateBase* CreateDetachedState(RefCountedBuffer * content, DECLSPEC_GUARD_OVERFLOW uint32 bufferLength) override { return HeapNew(ArrayBufferDetachedState, content, bufferLength, CoTaskMemFree, GetScriptContext()->GetRecycler(), ArrayBufferAllocationType::CoTask); diff --git a/lib/Runtime/Library/AtomicsObject.cpp b/lib/Runtime/Library/AtomicsObject.cpp index 391a47fa080..e8f9d6060d1 100644 --- a/lib/Runtime/Library/AtomicsObject.cpp +++ b/lib/Runtime/Library/AtomicsObject.cpp @@ -19,7 +19,7 @@ namespace Js { Var AtomicsObject::ValidateSharedIntegerTypedArray(Var typedArray, ScriptContext *scriptContext, bool onlyInt32) { - if (!TypedArrayBase::Is(typedArray)) + if (!VarIs(typedArray)) { JavascriptError::ThrowTypeError(scriptContext, JSERR_NeedTypedArrayObject); } @@ -41,9 +41,9 @@ namespace Js } } - TypedArrayBase *typedArrayBase = TypedArrayBase::UnsafeFromVar(typedArray); + TypedArrayBase *typedArrayBase = UnsafeVarTo(typedArray); ArrayBufferBase* arrayBuffer = typedArrayBase->GetArrayBuffer(); - if (arrayBuffer == nullptr || !ArrayBufferBase::Is(arrayBuffer) || !arrayBuffer->IsSharedArrayBuffer()) + if (arrayBuffer == nullptr || !VarIsCorrectType(arrayBuffer) || !arrayBuffer->IsSharedArrayBuffer()) { JavascriptError::ThrowTypeError(scriptContext, JSERR_NeedSharedArrayBufferObject); } @@ -53,7 +53,7 @@ namespace Js uint32 AtomicsObject::ValidateAtomicAccess(Var typedArray, Var requestIndex, ScriptContext *scriptContext) { - Assert(TypedArrayBase::Is(typedArray)); + Assert(VarIs(typedArray)); int32 accessIndex = -1; if (TaggedInt::Is(requestIndex)) @@ -74,7 +74,7 @@ namespace Js } } - if (accessIndex < 0 || accessIndex >= (int32)TypedArrayBase::FromVar(typedArray)->GetLength()) + if (accessIndex < 0 || accessIndex >= (int32)VarTo(typedArray)->GetLength()) { JavascriptError::ThrowRangeError(scriptContext, JSERR_InvalidTypedArrayIndex); } @@ -91,7 +91,7 @@ namespace Js *accessIndex = i; } - return TypedArrayBase::FromVar(typedArray); + return VarTo(typedArray); } Var AtomicsObject::EntryAdd(RecyclableObject* function, CallInfo callInfo, ...) @@ -222,7 +222,7 @@ namespace Js Assert(sharedArrayBuffer->GetSharedContents()->IsValidAgent(agent)); #pragma prefast(suppress:__WARNING_CALLER_FAILING_TO_HOLD, "This is a prefast false-positive caused by it being unable to identify that the critical section used here is the same as the one held by the AutoCriticalSection") awoken = waiterList->AddAndSuspendWaiter(agent, timeout); - if (!awoken) + if (!awoken) { waiterList->RemoveWaiter(agent); } diff --git a/lib/Runtime/Library/BoundFunction.cpp b/lib/Runtime/Library/BoundFunction.cpp index ce4a0d5c892..fd54782a44c 100644 --- a/lib/Runtime/Library/BoundFunction.cpp +++ b/lib/Runtime/Library/BoundFunction.cpp @@ -24,12 +24,11 @@ namespace Js count(0), boundArgs(nullptr) { - DebugOnly(VerifyEntryPoint()); AssertMsg(args.Info.Count > 0, "wrong number of args in BoundFunction"); ScriptContext *scriptContext = this->GetScriptContext(); - targetFunction = RecyclableObject::FromVar(args[0]); + targetFunction = VarTo(args[0]); Assert(!CrossSite::NeedMarshalVar(targetFunction, scriptContext)); @@ -44,21 +43,19 @@ namespace Js } type->SetPrototype(proto); } + + int len = 0; // If targetFunction is proxy, need to make sure that traps are called in right order as per 19.2.3.2 in RC#4 dated April 3rd 2015. - // Here although we won't use value of length, this is just to make sure that we call traps involved with HasOwnProperty(Target, "length") and Get(Target, "length") - if (JavascriptProxy::Is(targetFunction)) + // additionally need to get the correct length value for the boundFunctions' length property + if (JavascriptOperators::HasOwnProperty(targetFunction, PropertyIds::length, scriptContext, nullptr) == TRUE) { - if (JavascriptOperators::HasOwnProperty(targetFunction, PropertyIds::length, scriptContext, nullptr) == TRUE) + Var varLength; + if (targetFunction->GetProperty(targetFunction, PropertyIds::length, &varLength, nullptr, scriptContext)) { - int len = 0; - Var varLength; - if (targetFunction->GetProperty(targetFunction, PropertyIds::length, &varLength, nullptr, scriptContext)) - { - len = JavascriptConversion::ToInt32(varLength, scriptContext); - } + len = JavascriptConversion::ToInt32(varLength, scriptContext); } - GetTypeHandler()->EnsureObjectReady(this); } + GetTypeHandler()->EnsureObjectReady(this); if (args.Info.Count > 1) { @@ -84,27 +81,12 @@ namespace Js // If no "this" is passed, "undefined" is used boundThis = scriptContext->GetLibrary()->GetUndefined(); } - } - BoundFunction::BoundFunction(RecyclableObject* targetFunction, Var boundThis, Var* args, uint argsCount, DynamicType * type) - : JavascriptFunction(type, &functionInfo), - count(argsCount), - boundArgs(nullptr) - { - DebugOnly(VerifyEntryPoint()); - - this->targetFunction = targetFunction; - this->boundThis = boundThis; - - if (argsCount != 0) - { - this->boundArgs = RecyclerNewArray(this->GetScriptContext()->GetRecycler(), Field(Var), argsCount); + // Reduce length number of bound args + len = len - this->count; + len = max(len, 0); - for (uint i = 0; i < argsCount; i++) - { - this->boundArgs[i] = args[i]; - } - } + SetPropertyWithAttributes(PropertyIds::length, TaggedInt::ToVarUnchecked(len), PropertyConfigurable, nullptr, PropertyOperation_None, SideEffects_None); } BoundFunction* BoundFunction::New(ScriptContext* scriptContext, ArgumentReader args) @@ -138,10 +120,10 @@ namespace Js { if (args.HasNewTarget()) { - // target has an overriden new target make a new object from the newTarget + // target has an overridden new target make a new object from the newTarget Var newTargetVar = args.GetNewTarget(); AssertOrFailFastMsg(JavascriptOperators::IsConstructor(newTargetVar), "newTarget must be a constructor"); - RecyclableObject* newTarget = RecyclableObject::UnsafeFromVar(newTargetVar); + RecyclableObject* newTarget = UnsafeVarTo(newTargetVar); // Class constructors expect newTarget to be in args slot 0 (usually "this"), // because "this" is not constructed until we reach the most-super superclass. @@ -159,7 +141,7 @@ namespace Js END_SAFE_REENTRANT_CALL } } - else if (!JavascriptProxy::Is(targetFunction)) + else if (!VarIs(targetFunction)) { // No new target and target is not a proxy can make a new object in a "normal" way. // NewScObjectNoCtor will either construct an object or return targetFunction depending @@ -172,7 +154,7 @@ namespace Js } else { - // target is a proxy without an overriden new target + // target is a proxy without an overridden new target // give nullptr - FunctionCallTrap will make a new object args.Values[0] = newVarInstance; } @@ -261,14 +243,14 @@ namespace Js if (targetFunction != nullptr) { RecyclableObject* _targetFunction = targetFunction; - while (JavascriptProxy::Is(_targetFunction)) + while (VarIs(_targetFunction)) { - _targetFunction = JavascriptProxy::FromVar(_targetFunction)->GetTarget(); + _targetFunction = VarTo(_targetFunction)->GetTarget(); } - if (JavascriptFunction::Is(_targetFunction)) + if (VarIs(_targetFunction)) { - return JavascriptFunction::FromVar(_targetFunction); + return VarTo(_targetFunction); } // targetFunction should always be a JavascriptFunction. @@ -283,19 +265,19 @@ namespace Js if (targetFunction != nullptr) { Var value = JavascriptOperators::GetPropertyNoCache(targetFunction, PropertyIds::name, targetFunction->GetScriptContext()); - if (JavascriptString::Is(value)) + if (VarIs(value)) { - displayName = JavascriptString::FromVar(value); + displayName = VarTo(value); } } - return LiteralString::Concat(LiteralString::NewCopySz(_u("bound "), this->GetScriptContext()), displayName); + return JavascriptString::Concat(GetLibrary()->GetBoundFunctionPrefixString(), displayName); } RecyclableObject* BoundFunction::GetBoundThis() { - if (boundThis != nullptr && RecyclableObject::Is(boundThis)) + if (boundThis != nullptr && VarIs(boundThis)) { - return RecyclableObject::FromVar(boundThis); + return VarTo(boundThis); } return NULL; } @@ -310,114 +292,11 @@ namespace Js return false; } - PropertyQueryFlags BoundFunction::HasPropertyQuery(PropertyId propertyId, _Inout_opt_ PropertyValueInfo* info) - { - if (propertyId == PropertyIds::length) - { - return PropertyQueryFlags::Property_Found; - } - - return JavascriptFunction::HasPropertyQuery(propertyId, info); - } - - PropertyQueryFlags BoundFunction::GetPropertyQuery(Var originalInstance, PropertyId propertyId, Var* value, PropertyValueInfo* info, ScriptContext* requestContext) - { - BOOL result; - if (GetPropertyBuiltIns(originalInstance, propertyId, value, info, requestContext, &result)) - { - return JavascriptConversion::BooleanToPropertyQueryFlags(result); - } - - return JavascriptFunction::GetPropertyQuery(originalInstance, propertyId, value, info, requestContext); - } - - PropertyQueryFlags BoundFunction::GetPropertyQuery(Var originalInstance, JavascriptString* propertyNameString, Var* value, PropertyValueInfo* info, ScriptContext* requestContext) - { - BOOL result; - PropertyRecord const* propertyRecord; - this->GetScriptContext()->FindPropertyRecord(propertyNameString, &propertyRecord); - - if (propertyRecord != nullptr && GetPropertyBuiltIns(originalInstance, propertyRecord->GetPropertyId(), value, info, requestContext, &result)) - { - return JavascriptConversion::BooleanToPropertyQueryFlags(result); - } - - return JavascriptFunction::GetPropertyQuery(originalInstance, propertyNameString, value, info, requestContext); - } - - bool BoundFunction::GetPropertyBuiltIns(Var originalInstance, PropertyId propertyId, Var* value, PropertyValueInfo* info, ScriptContext* requestContext, BOOL* result) - { - if (propertyId == PropertyIds::length) - { - // Get the "length" property of the underlying target function - int len = 0; - Var varLength; - if (targetFunction->GetProperty(targetFunction, PropertyIds::length, &varLength, nullptr, requestContext)) - { - if (!TaggedInt::Is(varLength)) - { - // ToInt32 conversion on non-primitive length can invalidate assumptions made by the JIT, - // so add implicit call flag if length isn't a TaggedInt already - requestContext->GetThreadContext()->AddImplicitCallFlags(ImplicitCall_Accessor); - } - len = JavascriptConversion::ToInt32(varLength, requestContext); - } - - // Reduce by number of bound args - len = len - this->count; - len = max(len, 0); - - *value = JavascriptNumber::ToVar(len, requestContext); - *result = true; - return true; - } - - return false; - } - PropertyQueryFlags BoundFunction::GetPropertyReferenceQuery(Var originalInstance, PropertyId propertyId, Var* value, PropertyValueInfo* info, ScriptContext* requestContext) { return BoundFunction::GetPropertyQuery(originalInstance, propertyId, value, info, requestContext); } - BOOL BoundFunction::SetProperty(PropertyId propertyId, Var value, PropertyOperationFlags flags, PropertyValueInfo* info) - { - BOOL result; - if (SetPropertyBuiltIns(propertyId, value, flags, info, &result)) - { - return result; - } - - return JavascriptFunction::SetProperty(propertyId, value, flags, info); - } - - BOOL BoundFunction::SetProperty(JavascriptString* propertyNameString, Var value, PropertyOperationFlags flags, PropertyValueInfo* info) - { - BOOL result; - PropertyRecord const* propertyRecord; - this->GetScriptContext()->FindPropertyRecord(propertyNameString, &propertyRecord); - - if (propertyRecord != nullptr && SetPropertyBuiltIns(propertyRecord->GetPropertyId(), value, flags, info, &result)) - { - return result; - } - - return JavascriptFunction::SetProperty(propertyNameString, value, flags, info); - } - - bool BoundFunction::SetPropertyBuiltIns(PropertyId propertyId, Var value, PropertyOperationFlags flags, PropertyValueInfo* info, BOOL* result) - { - if (propertyId == PropertyIds::length) - { - JavascriptError::ThrowCantAssignIfStrictMode(flags, this->GetScriptContext()); - - *result = false; - return true; - } - - return false; - } - _Check_return_ _Success_(return) BOOL BoundFunction::GetAccessors(PropertyId propertyId, _Outptr_result_maybenull_ Var* getter, _Outptr_result_maybenull_ Var* setter, ScriptContext* requestContext) { return DynamicObject::GetAccessors(propertyId, getter, setter, requestContext); @@ -438,56 +317,6 @@ namespace Js return SetProperty(propertyId, value, PropertyOperation_None, info); } - BOOL BoundFunction::DeleteProperty(PropertyId propertyId, PropertyOperationFlags flags) - { - if (propertyId == PropertyIds::length) - { - return false; - } - - return JavascriptFunction::DeleteProperty(propertyId, flags); - } - - BOOL BoundFunction::DeleteProperty(JavascriptString *propertyNameString, PropertyOperationFlags flags) - { - if (BuiltInPropertyRecords::length.Equals(propertyNameString)) - { - return false; - } - - return JavascriptFunction::DeleteProperty(propertyNameString, flags); - } - - BOOL BoundFunction::IsWritable(PropertyId propertyId) - { - if (propertyId == PropertyIds::length) - { - return false; - } - - return JavascriptFunction::IsWritable(propertyId); - } - - BOOL BoundFunction::IsConfigurable(PropertyId propertyId) - { - if (propertyId == PropertyIds::length) - { - return false; - } - - return JavascriptFunction::IsConfigurable(propertyId); - } - - BOOL BoundFunction::IsEnumerable(PropertyId propertyId) - { - if (propertyId == PropertyIds::length) - { - return false; - } - - return JavascriptFunction::IsEnumerable(propertyId); - } - BOOL BoundFunction::HasInstance(Var instance, ScriptContext* scriptContext, IsInstInlineCache* inlineCache) { return this->targetFunction->HasInstance(instance, scriptContext, inlineCache); diff --git a/lib/Runtime/Library/BoundFunction.h b/lib/Runtime/Library/BoundFunction.h index db788a818c6..4dbbd1ca254 100644 --- a/lib/Runtime/Library/BoundFunction.h +++ b/lib/Runtime/Library/BoundFunction.h @@ -19,31 +19,19 @@ namespace Js protected: BoundFunction(DynamicType * type); BoundFunction(Arguments args, DynamicType * type); - BoundFunction(RecyclableObject* targetFunction, Var boundThis, Var* args, uint argsCount, DynamicType *type); + public: static BoundFunction* New(ScriptContext* scriptContext, ArgumentReader args); - static bool Is(Var func){ return JavascriptFunction::Is(func) && JavascriptFunction::UnsafeFromVar(func)->IsBoundFunction(); } static Var NewInstance(RecyclableObject* function, CallInfo callInfo, ...); virtual JavascriptString* GetDisplayNameImpl() const override; - virtual PropertyQueryFlags HasPropertyQuery(PropertyId propertyId, _Inout_opt_ PropertyValueInfo* info) override; - virtual PropertyQueryFlags GetPropertyQuery(Var originalInstance, PropertyId propertyId, Var* value, PropertyValueInfo* info, ScriptContext* requestContext) override; - virtual PropertyQueryFlags GetPropertyQuery(Var originalInstance, JavascriptString* propertyNameString, Var* value, PropertyValueInfo* info, ScriptContext* requestContext) override; virtual PropertyQueryFlags GetPropertyReferenceQuery(Var originalInstance, PropertyId propertyId, Var* value, PropertyValueInfo* info, ScriptContext* requestContext) override; - virtual BOOL SetProperty(PropertyId propertyId, Var value, PropertyOperationFlags flags, PropertyValueInfo* info) override; - virtual BOOL SetProperty(JavascriptString* propertyNameString, Var value, PropertyOperationFlags flags, PropertyValueInfo* info) override; _Check_return_ _Success_(return) virtual BOOL GetAccessors(PropertyId propertyId, _Outptr_result_maybenull_ Var* getter, _Outptr_result_maybenull_ Var* setter, ScriptContext* requestContext) override; virtual DescriptorFlags GetSetter(PropertyId propertyId, Var *setterValue, PropertyValueInfo* info, ScriptContext* requestContext) override; virtual DescriptorFlags GetSetter(JavascriptString* propertyNameString, Var *setterValue, PropertyValueInfo* info, ScriptContext* requestContext) override; virtual BOOL InitProperty(PropertyId propertyId, Var value, PropertyOperationFlags flags = PropertyOperation_None, PropertyValueInfo* info = NULL) override; - virtual BOOL DeleteProperty(PropertyId propertyId, PropertyOperationFlags flags) override; - virtual BOOL DeleteProperty(JavascriptString *propertyNameString, PropertyOperationFlags flags) override; - - virtual BOOL IsWritable(PropertyId propertyId) override; - virtual BOOL IsConfigurable(PropertyId propertyId) override; - virtual BOOL IsEnumerable(PropertyId propertyId) override; virtual BOOL HasInstance(Var instance, ScriptContext* scriptContext, IsInstInlineCache* inlineCache = NULL) override; virtual inline BOOL IsConstructor() const override; @@ -74,4 +62,9 @@ namespace Js Field(uint) count; Field(Field(Var)*) boundArgs; }; + + template <> inline bool VarIsImpl(RecyclableObject* obj) + { + return VarIs(obj) && UnsafeVarTo(obj)->IsBoundFunction(); + } } // namespace Js diff --git a/lib/Runtime/Library/CMakeLists.txt b/lib/Runtime/Library/CMakeLists.txt index a54f5f2c442..4ed3d3bdde3 100644 --- a/lib/Runtime/Library/CMakeLists.txt +++ b/lib/Runtime/Library/CMakeLists.txt @@ -33,6 +33,7 @@ set(CRLIB_SOURCE_CODES CommonExternalApiImpl.cpp CompoundString.cpp ConcatString.cpp + CustomExternalWrapperObject.cpp DataView.cpp DateImplementation.cpp ES5Array.cpp @@ -46,7 +47,6 @@ set(CRLIB_SOURCE_CODES JSONParser.cpp JSONScanner.cpp JSONStack.cpp - JSONString.cpp JSONStringBuilder.cpp JSONStringifier.cpp JavascriptArray.cpp @@ -54,6 +54,10 @@ set(CRLIB_SOURCE_CODES JavascriptArrayIndexEnumeratorBase.cpp JavascriptArrayIndexSnapshotEnumerator.cpp JavascriptArrayIterator.cpp + JavascriptAsyncFromSyncIterator.cpp + JavascriptAsyncFunction.cpp + JavascriptAsyncGenerator.cpp + JavascriptAsyncGeneratorFunction.cpp JavascriptBoolean.cpp JavascriptBooleanObject.cpp JavascriptBuiltInFunctions.cpp @@ -86,10 +90,11 @@ set(CRLIB_SOURCE_CODES JavascriptStringEnumerator.cpp JavascriptStringIterator.cpp JavascriptStringObject.cpp + JavascriptBigInt.cpp + JavascriptBigIntObject.cpp JavascriptSymbol.cpp JavascriptSymbolObject.cpp JavascriptTypedNumber.cpp - JavascriptVariantDate.cpp JavascriptWeakMap.cpp JavascriptWeakSet.cpp JsBuiltInEngineInterfaceExtensionObject.cpp @@ -128,6 +133,12 @@ elseif(CC_TARGETS_ARM) set (CRLIB_SOURCE_CODES ${CRLIB_SOURCE_CODES} arm/arm_JavascriptFunctionA.S ) +elseif(CC_TARGETS_ARM64) + set (CRLIB_SOURCE_CODES ${CRLIB_SOURCE_CODES} + arm64/arm64_CallFunction.S + arm64/arm64_DeferredDeserializeThunk.S + arm64/arm64_DeferredParsingThunk.S + ) endif() add_library (Chakra.Runtime.Library OBJECT ${CRLIB_SOURCE_CODES}) diff --git a/lib/Runtime/Library/Chakra.Runtime.Library.vcxproj b/lib/Runtime/Library/Chakra.Runtime.Library.vcxproj index 1ba20538ccb..dd7d62fc90f 100644 --- a/lib/Runtime/Library/Chakra.Runtime.Library.vcxproj +++ b/lib/Runtime/Library/Chakra.Runtime.Library.vcxproj @@ -54,6 +54,10 @@ + + + + @@ -75,7 +79,6 @@ - @@ -112,7 +115,6 @@ - @@ -150,6 +152,9 @@ + + + @@ -159,13 +164,12 @@ + + + - - - - @@ -186,12 +190,18 @@ - - + + + + + + + + @@ -215,7 +225,6 @@ - @@ -257,7 +266,6 @@ - @@ -311,7 +319,6 @@ - @@ -330,4 +337,4 @@ - \ No newline at end of file + diff --git a/lib/Runtime/Library/Chakra.Runtime.Library.vcxproj.filters b/lib/Runtime/Library/Chakra.Runtime.Library.vcxproj.filters index ca26a287310..5033d74374f 100644 --- a/lib/Runtime/Library/Chakra.Runtime.Library.vcxproj.filters +++ b/lib/Runtime/Library/Chakra.Runtime.Library.vcxproj.filters @@ -10,6 +10,10 @@ + + + + @@ -32,7 +36,6 @@ - @@ -64,7 +67,6 @@ - @@ -104,6 +106,9 @@ + + + @@ -120,10 +125,16 @@ - - + + + + + + + + @@ -147,7 +158,6 @@ - @@ -182,7 +192,6 @@ - @@ -224,12 +233,13 @@ - - - - + + + + + @@ -240,7 +250,6 @@ - amd64 @@ -290,4 +299,4 @@ - \ No newline at end of file + diff --git a/lib/Runtime/Library/CompoundString.cpp b/lib/Runtime/Library/CompoundString.cpp index 58b0be17a51..0816fac9578 100644 --- a/lib/Runtime/Library/CompoundString.cpp +++ b/lib/Runtime/Library/CompoundString.cpp @@ -383,7 +383,7 @@ using namespace Js; { AllocateBuffer(charCapacity, recycler); charLength = usedCharLength; - + ArrayWriteBarrierVerifyBits(Block::Pointers(Chars()), Block::PointerLengthFromCharLength(charCapacity)); js_wmemcpy_s(Chars(), charCapacity, (const char16*)(buffer), usedCharLength); // SWB: buffer may contain chars or pointers. Trigger write barrier for the whole buffer. @@ -584,7 +584,7 @@ using namespace Js; CompoundString * CompoundString::JitClone(CompoundString * cs) { JIT_HELPER_NOT_REENTRANT_NOLOCK_HEADER(Op_CompoundStringCloneForConcat); - Assert(Is(cs)); + Assert(VarIsCorrectType(cs)); return cs->Clone(false); JIT_HELPER_END(Op_CompoundStringCloneForConcat); } @@ -592,47 +592,22 @@ using namespace Js; CompoundString * CompoundString::JitCloneForAppending(CompoundString * cs) { JIT_HELPER_NOT_REENTRANT_NOLOCK_HEADER(Op_CompoundStringCloneForAppending); - Assert(Is(cs)); + Assert(VarIsCorrectType(cs)); return cs->Clone(true); JIT_HELPER_END(Op_CompoundStringCloneForAppending); } - bool CompoundString::Is(RecyclableObject *const object) - { - return VirtualTableInfo::HasVirtualTable(object); - } - - bool CompoundString::Is(const Var var) - { - return RecyclableObject::Is(var) && Is(RecyclableObject::FromVar(var)); - } - - CompoundString *CompoundString::FromVar(RecyclableObject *const object) - { - AssertOrFailFast(Is(object)); - - CompoundString *const cs = static_cast(object); - Assert(!cs->IsFinalized()); - return cs; - } - - CompoundString *CompoundString::UnsafeFromVar(RecyclableObject *const object) - { - Assert(Is(object)); - - CompoundString *const cs = static_cast(object); - Assert(!cs->IsFinalized()); - return cs; - } - - CompoundString *CompoundString::FromVar(const Var var) + template <> bool Js::VarIsImpl(RecyclableObject * object) { - return FromVar(RecyclableObject::FromVar(var)); - } - - CompoundString *CompoundString::UnsafeFromVar(const Var var) - { - return UnsafeFromVar(RecyclableObject::UnsafeFromVar(var)); + bool result = VirtualTableInfo::HasVirtualTable(object); +#if DBG + if (result) + { + CompoundString *const cs = static_cast(object); + Assert(!cs->IsFinalized()); + } +#endif + return result; } JavascriptString *CompoundString::GetImmutableOrScriptUnreferencedString(JavascriptString *const s) @@ -644,7 +619,7 @@ using namespace Js; // another CompoundString, for instance). If the provided string is a CompoundString, it must not be mutated by script // code after the concatenation operation. In that case, clone the string to ensure that it is not referenced by script // code. If the clone is never handed back to script code, it effectively behaves as an immutable string. - return Is(s) ? UnsafeFromVar(s)->Clone(false) : s; + return VarIs(s) ? UnsafeVarTo(s)->Clone(false) : s; } bool CompoundString::ShouldAppendChars(const CharCount appendCharLength) @@ -681,7 +656,7 @@ using namespace Js; // A compound string cannot flatten itself while appending itself to itself since flattening would make the append // illegal. Clone the string being appended if necessary, before flattening. - return s == this ? FromVar(s)->Clone(false)->GetSz() : s->GetString(); + return s == this ? VarTo(s)->Clone(false)->GetSz() : s->GetString(); } char16 *CompoundString::LastBlockChars() const @@ -1124,12 +1099,12 @@ using namespace Js; if(IsPackedInfo(pointer2)) { Assert(pointerIndex != 0); - s = JavascriptString::FromVar(blockPointers[--pointerIndex]); + s = VarTo(blockPointers[--pointerIndex]); } else #endif { - s = JavascriptString::FromVar(pointer2); + s = VarTo(pointer2); pointer2 = nullptr; } @@ -1144,7 +1119,7 @@ using namespace Js; } else { - JavascriptString *const s = JavascriptString::FromVar(pointer); + JavascriptString *const s = VarTo(pointer); const CharCount copyCharLength = s->GetLength(); Assert(remainingCharLengthToCopy >= copyCharLength); diff --git a/lib/Runtime/Library/CompoundString.h b/lib/Runtime/Library/CompoundString.h index 7a14b0773dc..a38c663a10b 100644 --- a/lib/Runtime/Library/CompoundString.h +++ b/lib/Runtime/Library/CompoundString.h @@ -338,12 +338,6 @@ namespace Js static CompoundString * JitClone(CompoundString * cs); static CompoundString * JitCloneForAppending(CompoundString * cs); public: - static bool Is(RecyclableObject *const object); - static bool Is(const Var var); - static CompoundString *FromVar(RecyclableObject *const object); - static CompoundString *UnsafeFromVar(RecyclableObject *const object); - static CompoundString *FromVar(const Var var); - static CompoundString *UnsafeFromVar(const Var var); static size_t GetOffsetOfOwnsLastBlock() { return offsetof(CompoundString, ownsLastBlock); } static size_t GetOffsetOfDirectCharLength() { return offsetof(CompoundString, directCharLength); } static size_t GetOffsetOfLastBlockInfo() { return offsetof(CompoundString, lastBlockInfo); } @@ -444,6 +438,8 @@ namespace Js } }; + template <> bool VarIsImpl(RecyclableObject * object); + #pragma region CompoundString::Builder definition #ifndef CompoundStringJsDiag //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -1243,7 +1239,7 @@ namespace Js return; } - JavascriptString *const js = LiteralString::NewCopyBuffer(s, appendCharLength, toString->GetScriptContext()); + JavascriptString *const js = JavascriptString::NewCopyBuffer(s, appendCharLength, toString->GetScriptContext()); if(TryAppendGeneric(js, appendCharLength, toString)) return; toString->AppendSlow(js); diff --git a/lib/Runtime/Library/ConcatString.cpp b/lib/Runtime/Library/ConcatString.cpp index 7f4ef3f225b..a24d8147260 100644 --- a/lib/Runtime/Library/ConcatString.cpp +++ b/lib/Runtime/Library/ConcatString.cpp @@ -152,18 +152,11 @@ namespace Js } } - /* static */ - bool LiteralStringWithPropertyStringPtr::Is(RecyclableObject * obj) + template <> bool VarIsImpl(RecyclableObject * obj) { return VirtualTableInfo::HasVirtualTable(obj); } - /* static */ - bool LiteralStringWithPropertyStringPtr::Is(Var var) - { - return RecyclableObject::Is(var) && LiteralStringWithPropertyStringPtr::Is(RecyclableObject::UnsafeFromVar(var)); - } - void LiteralStringWithPropertyStringPtr::GetPropertyRecord(_Out_ PropertyRecord const** propRecord, bool dontLookupFromDictionary) { return GetPropertyRecordImpl(propRecord, dontLookupFromDictionary); @@ -538,24 +531,9 @@ namespace Js scriptContext->GetLibrary()->GetStringTypeStatic()); } - bool - ConcatStringMulti::Is(Var var) - { - return VirtualTableInfo::HasVirtualTable(var); - } - - ConcatStringMulti * - ConcatStringMulti::FromVar(Var var) - { - AssertOrFailFast(ConcatStringMulti::Is(var)); - return static_cast(var); - } - - ConcatStringMulti * - ConcatStringMulti::UnsafeFromVar(Var var) + template <> bool VarIsImpl(RecyclableObject* obj) { - Assert(ConcatStringMulti::Is(var)); - return static_cast(var); + return VirtualTableInfo::HasVirtualTable(obj); } const char16 * diff --git a/lib/Runtime/Library/ConcatString.h b/lib/Runtime/Library/ConcatString.h index 950b591b4f9..e9b0db1a58a 100644 --- a/lib/Runtime/Library/ConcatString.h +++ b/lib/Runtime/Library/ConcatString.h @@ -35,9 +35,6 @@ namespace Js template static LiteralStringWithPropertyStringPtr * ConvertString(StringType * originalString); static uint GetOffsetOfPropertyString() { return offsetof(LiteralStringWithPropertyStringPtr, propertyString); } - static bool Is(Var var); - static bool Is(RecyclableObject* var); - template static LiteralStringWithPropertyStringPtr* TryFromVar(T var); static JavascriptString * NewFromCString(const char * cString, const CharCount charCount, JavascriptLibrary *const library); @@ -60,17 +57,7 @@ namespace Js } }; - // Templated so that the Is call dispatchs to different function depending - // on if argument is already a RecyclableObject* or only known to be a Var - // - // In case it is known to be a RecyclableObject*, the Is call skips that check - template - inline LiteralStringWithPropertyStringPtr * LiteralStringWithPropertyStringPtr::TryFromVar(T var) - { - return LiteralStringWithPropertyStringPtr::Is(var) - ? reinterpret_cast(var) - : nullptr; - } + template <> bool VarIsImpl(RecyclableObject * obj); // Base class for concat strings. // Concat string is a virtual string, or a non-leaf node in concat string tree. @@ -279,9 +266,6 @@ namespace Js public: static ConcatStringMulti * New(uint slotCount, JavascriptString * a1, JavascriptString * a2, ScriptContext* scriptContext); const char16 * GetSz() override sealed; - static bool Is(Var var); - static ConcatStringMulti * FromVar(Var value); - static ConcatStringMulti * UnsafeFromVar(Var value); static size_t GetAllocSize(uint slotCount); void SetItem(_In_range_(0, slotCount - 1) uint index, JavascriptString* value); @@ -304,4 +288,6 @@ namespace Js return VTableValue::VtableConcatStringMulti; } }; + + template <> bool VarIsImpl(RecyclableObject* obj); } diff --git a/lib/Runtime/Library/CustomExternalIterator.cpp b/lib/Runtime/Library/CustomExternalIterator.cpp index 2bfc8053629..7b55445c133 100644 --- a/lib/Runtime/Library/CustomExternalIterator.cpp +++ b/lib/Runtime/Library/CustomExternalIterator.cpp @@ -19,7 +19,7 @@ namespace Js void ExternalIteratorCreatorFunction::ThrowIfNotValidObject(Var instance) { JavascriptTypeId typeId = (JavascriptTypeId)Js::JavascriptOperators::GetTypeId(instance); - if (typeId != m_externalTypeId || !RecyclableObject::Is(m_prototypeForIterator)) + if (typeId != m_externalTypeId || !VarIs(m_prototypeForIterator)) { JavascriptError::ThrowTypeError(GetScriptContext(), JSERR_InvalidIterableObject); } @@ -52,7 +52,7 @@ namespace Js function->ThrowIfNotValidObject(instance); ScriptContext *scriptContext = function->GetScriptContext(); - AssertOrFailFast(RecyclableObject::Is(function->m_prototypeForIterator)); + AssertOrFailFast(VarIs(function->m_prototypeForIterator)); DynamicObject *prototype = static_cast(PointerValue(function->m_prototypeForIterator)); Js::DynamicType *type = scriptContext->GetLibrary()->CreateObjectTypeNoCache(prototype, TypeIds_ExternalIterator); @@ -140,22 +140,9 @@ namespace Js Assert(type->GetTypeId() == TypeIds_ExternalIterator); } - bool CustomExternalIterator::Is(Var aValue) + template <> bool VarIsImpl(RecyclableObject* obj) { - TypeId typeId = JavascriptOperators::GetTypeId(aValue); - return typeId == TypeIds_ExternalIterator; - } - - CustomExternalIterator* CustomExternalIterator::FromVar(Var aValue) - { - AssertOrFailFastMsg(Is(aValue), "Ensure var is actually a 'ExternalIterator'"); - return static_cast(aValue); - } - - CustomExternalIterator* CustomExternalIterator::UnsafeFromVar(Var aValue) - { - AssertMsg(Is(aValue), "Ensure var is actually a 'ExternalIterator'"); - return static_cast(aValue); + return JavascriptOperators::GetTypeId(obj) == TypeIds_ExternalIterator; } Var CustomExternalIterator::CreateNextFunction(JavascriptLibrary *library, JavascriptTypeId typeId) @@ -177,12 +164,12 @@ namespace Js Var thisObj = args[0]; - if (!CustomExternalIterator::Is(thisObj)) + if (!VarIs(thisObj)) { JavascriptError::ThrowTypeError(scriptContext, JSERR_InvalidIteratorObject, _u("Iterator.prototype.next")); } - CustomExternalIterator * currentIterator = CustomExternalIterator::FromVar(thisObj); + CustomExternalIterator * currentIterator = VarTo(thisObj); if (iteratorNextFunction->GetExternalTypeId() != currentIterator->m_externalTypeId) { JavascriptError::ThrowTypeError(scriptContext, JSERR_InvalidIteratorObject, _u("Iterator.prototype.next")); @@ -194,7 +181,7 @@ namespace Js if (currentIterator->m_nextFunction == nullptr) { - return library->CreateIteratorResultObjectUndefinedTrue(); + return library->CreateIteratorResultObjectDone(); } bool ret = false; @@ -206,7 +193,7 @@ namespace Js if (!ret) { - return library->CreateIteratorResultObjectUndefinedTrue(); + return library->CreateIteratorResultObjectDone(); } Var result; @@ -227,6 +214,6 @@ namespace Js result = value; } - return library->CreateIteratorResultObjectValueFalse(result); + return library->CreateIteratorResultObject(result); } } diff --git a/lib/Runtime/Library/CustomExternalIterator.h b/lib/Runtime/Library/CustomExternalIterator.h index 8f1deb7715d..5084d20c8c0 100644 --- a/lib/Runtime/Library/CustomExternalIterator.h +++ b/lib/Runtime/Library/CustomExternalIterator.h @@ -104,11 +104,10 @@ namespace Js public: CustomExternalIterator(DynamicType* type, ExternalIteratorKind kind, JavascriptTypeId typeId, NextFunction nextFunction); - static bool Is(Var aValue); - static CustomExternalIterator* FromVar(Var aValue); - static CustomExternalIterator* UnsafeFromVar(Var aValue); static Var CreateNextFunction(JavascriptLibrary *library, JavascriptTypeId typeId); static Var EntryNext(RecyclableObject* function, CallInfo callInfo, ...); }; + template <> bool VarIsImpl(RecyclableObject* obj); + } diff --git a/lib/Runtime/Library/CustomExternalWrapperObject.cpp b/lib/Runtime/Library/CustomExternalWrapperObject.cpp new file mode 100644 index 00000000000..4c30534a1b5 --- /dev/null +++ b/lib/Runtime/Library/CustomExternalWrapperObject.cpp @@ -0,0 +1,1139 @@ +//------------------------------------------------------------------------------------------------------- +// Copyright (C) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. +//------------------------------------------------------------------------------------------------------- + +#include "RuntimeLibraryPch.h" + +#ifdef _CHAKRACOREBUILD +#include "Types/PathTypeHandler.h" + +using namespace Js; + +CustomExternalWrapperType::CustomExternalWrapperType(Js::ScriptContext* scriptContext, JsTraceCallback traceCallback, JsFinalizeCallback finalizeCallback, Js::RecyclableObject * prototype) + : Js::DynamicType( + scriptContext, + Js::TypeIds_Object, + prototype, + nullptr, + Js::PathTypeHandlerNoAttr::New(scriptContext, scriptContext->GetLibrary()->GetRootPath(), 0, 0, 0, true, true), + true, + true) + , jsTraceCallback(traceCallback) + , jsFinalizeCallback(finalizeCallback) +{ + this->jsGetterSetterInterceptor = RecyclerNewStructZ(scriptContext->GetRecycler(), JsGetterSetterInterceptor); + this->flags |= TypeFlagMask_JsrtExternal; +} + +CustomExternalWrapperObject::CustomExternalWrapperObject(CustomExternalWrapperType * type, void *data, uint inlineSlotSize) : + Js::DynamicObject(type, false/* initSlots*/) +{ + if (inlineSlotSize != 0) + { + this->slotType = SlotType::Inline; + this->u.inlineSlotSize = inlineSlotSize; + if (data) + { + memcpy_s(this->GetInlineSlots(), inlineSlotSize, data, inlineSlotSize); + } + } + else + { + this->slotType = SlotType::External; + this->u.slot = data; + } +} + +CustomExternalWrapperObject::CustomExternalWrapperObject(CustomExternalWrapperObject * instance, bool deepCopy) : + Js::DynamicObject(instance, deepCopy), + initialized(instance->initialized) +{ + if (instance->GetInlineSlotSize() != 0) + { + this->slotType = SlotType::Inline; + this->u.inlineSlotSize = instance->GetInlineSlotSize(); + if (instance->GetInlineSlots()) + { + memcpy_s(this->GetInlineSlots(), this->GetInlineSlotSize(), instance->GetInlineSlots(), instance->GetInlineSlotSize()); + } + } + else + { + this->slotType = SlotType::External; + this->u.slot = instance->GetInlineSlots(); + } +} + +/* static */ +CustomExternalWrapperObject* CustomExternalWrapperObject::Create(void *data, uint inlineSlotSize, JsTraceCallback traceCallback, JsFinalizeCallback finalizeCallback, JsGetterSetterInterceptor ** getterSetterInterceptor, Js::RecyclableObject * prototype, Js::ScriptContext *scriptContext) +{ + if (prototype == nullptr) + { + prototype = scriptContext->GetLibrary()->GetObjectPrototype(); + } + + Js::DynamicType * dynamicType = scriptContext->GetLibrary()->GetCachedCustomExternalWrapperType(reinterpret_cast(traceCallback), reinterpret_cast(finalizeCallback), reinterpret_cast(*getterSetterInterceptor), reinterpret_cast(prototype)); + if (dynamicType == nullptr) + { + dynamicType = RecyclerNew(scriptContext->GetRecycler(), CustomExternalWrapperType, scriptContext, traceCallback, finalizeCallback, prototype); + *getterSetterInterceptor = reinterpret_cast(dynamicType)->GetJsGetterSetterInterceptor(); + scriptContext->GetLibrary()->CacheCustomExternalWrapperType(reinterpret_cast(traceCallback), reinterpret_cast(finalizeCallback), reinterpret_cast(*getterSetterInterceptor), reinterpret_cast(prototype), dynamicType); + } + else + { + if (*getterSetterInterceptor == nullptr) + { + *getterSetterInterceptor = reinterpret_cast(dynamicType)->GetJsGetterSetterInterceptor(); + } + else + { + Assert(*getterSetterInterceptor == reinterpret_cast(dynamicType)->GetJsGetterSetterInterceptor()); + } + } + + Assert(dynamicType->IsJsrtExternal()); + + CustomExternalWrapperObject * externalObject; + if (traceCallback != nullptr) + { + externalObject = RecyclerNewTrackedPlus(scriptContext->GetRecycler(), inlineSlotSize, CustomExternalWrapperObject, static_cast(dynamicType), data, inlineSlotSize); + } + else if (finalizeCallback != nullptr) + { + externalObject = RecyclerNewFinalizedPlus(scriptContext->GetRecycler(), inlineSlotSize, CustomExternalWrapperObject, static_cast(dynamicType), data, inlineSlotSize); + } + else + { + externalObject = RecyclerNewPlus(scriptContext->GetRecycler(), inlineSlotSize, CustomExternalWrapperObject, static_cast(dynamicType), data, inlineSlotSize); + } + + return externalObject; +} + +BOOL CustomExternalWrapperObject::EnsureInitialized(ScriptContext* requestContext) +{ + ThreadContext* threadContext = requestContext->GetThreadContext(); + if (this->initialized) + { + return TRUE; + } + void* initializeTrap = this->GetExternalType()->GetJsGetterSetterInterceptor()->initializeTrap; + if (initializeTrap == nullptr) + { + return TRUE; + } + if (threadContext->IsDisableImplicitCall()) + { + threadContext->AddImplicitCallFlags(Js::ImplicitCall_External); + return FALSE; + } + + this->initialized = true; + JavascriptFunction * initializeMethod = Js::VarTo(initializeTrap); + + Js::RecyclableObject * targetObj = this; + threadContext->ExecuteImplicitCall(initializeMethod, Js::ImplicitCall_Accessor, [=]()->Js::Var + { + return CALL_FUNCTION(threadContext, initializeMethod, Js::CallInfo(Js::CallFlags_Value, 1), targetObj); + }); + return TRUE; +} + +CustomExternalWrapperObject* CustomExternalWrapperObject::Copy(bool deepCopy) +{ + Recycler* recycler = this->GetRecycler(); + CustomExternalWrapperType* externalType = this->GetExternalType(); + int inlineSlotSize = this->GetInlineSlotSize(); + + if (externalType->GetJsTraceCallback() != nullptr) + { + return RecyclerNewTrackedPlus(recycler, inlineSlotSize, CustomExternalWrapperObject, this, deepCopy); + } + else if (externalType->GetJsFinalizeCallback() != nullptr) + { + return RecyclerNewFinalizedPlus(recycler, inlineSlotSize, CustomExternalWrapperObject, this, deepCopy); + } + else + { + return RecyclerNewPlus(recycler, inlineSlotSize, CustomExternalWrapperObject, this, deepCopy); + } +} + +BOOL CustomExternalWrapperObject::IsObjectAlive() +{ + return !this->GetScriptContext()->IsClosed(); +} + +BOOL CustomExternalWrapperObject::VerifyObjectAlive() +{ + Js::ScriptContext* scriptContext = GetScriptContext(); + if (!scriptContext->VerifyAlive()) + { + return FALSE; + } + + // Perform an extended host object invalidation check only for external host objects. + if (scriptContext->IsInvalidatedForHostObjects()) + { + if (!scriptContext->GetThreadContext()->RecordImplicitException()) + return FALSE; + Js::JavascriptError::MapAndThrowError(scriptContext, E_ACCESSDENIED); + } + return TRUE; +} + +BOOL CustomExternalWrapperObject::Equals(__in Var other, __out BOOL* value, ScriptContext* requestContext) +{ + // We need to implement comparison to other by reference in case the object + // is in the left side of the comparison, and does not call a toString + // method (like different objects) when compared to string. For Node, such + // comparision is used for Buffers. + *value = (other == this); + return true; +} + +BOOL CustomExternalWrapperObject::StrictEquals(__in Var other, __out BOOL* value, ScriptContext* requestContext) +{ + // We need to implement comparison to other by reference in case the object + // is in the left side of the comparison, and does not call a toString + // method (like different objects) when compared to string. For Node, such + // comparision is used for Buffers. + *value = (other == this); + return true; +} + +void CustomExternalWrapperObject::Mark(Recycler * recycler) +{ + recycler->SetNeedExternalWrapperTracing(); + JsTraceCallback traceCallback = this->GetExternalType()->GetJsTraceCallback(); + Assert(nullptr != traceCallback); + traceCallback(this->GetSlotData()); +} + +void CustomExternalWrapperObject::Finalize(bool isShutdown) +{ + JsFinalizeCallback finalizeCallback = this->GetExternalType()->GetJsFinalizeCallback(); + Assert(this->GetExternalType()->GetJsTraceCallback() != nullptr || finalizeCallback != nullptr); + if (nullptr != finalizeCallback) + { + finalizeCallback(this->GetSlotData()); + } +} + +void CustomExternalWrapperObject::Dispose(bool isShutdown) +{ +} + +void * CustomExternalWrapperObject::GetSlotData() const +{ + return this->slotType == SlotType::External + ? unsafe_write_barrier_cast(this->u.slot) + : GetInlineSlots(); +} + +void CustomExternalWrapperObject::SetSlotData(void * data) +{ + this->slotType = SlotType::External; + this->u.slot = data; +} + +int CustomExternalWrapperObject::GetInlineSlotSize() const +{ + return this->slotType == SlotType::External + ? 0 + : this->u.inlineSlotSize; +} + +void* CustomExternalWrapperObject::GetInlineSlots() const +{ + return this->slotType == SlotType::External + ? nullptr + : (void*)((uintptr_t)this + sizeof(CustomExternalWrapperObject)); +} + +Js::DynamicType* CustomExternalWrapperObject::DuplicateType() +{ + return RecyclerNew(this->GetScriptContext()->GetRecycler(), CustomExternalWrapperType, this->GetExternalType()); +} + +void CustomExternalWrapperObject::SetPrototype(RecyclableObject* newPrototype) +{ + if (!this->VerifyObjectAlive()) + { + return; + } + + // setting the value could be deferred and now we are on a different context from + // make sure the value has the same context as the containing object. + newPrototype = VarTo(Js::CrossSite::MarshalVar(this->GetScriptContext(), newPrototype)); + DynamicObject::SetPrototype(newPrototype); +} + +Js::Var CustomExternalWrapperObject::GetValueFromDescriptor(Js::Var instance, Js::PropertyDescriptor propertyDescriptor, Js::ScriptContext * requestContext) +{ + if (propertyDescriptor.ValueSpecified()) + { + return propertyDescriptor.GetValue(); + } + if (propertyDescriptor.GetterSpecified()) + { + return Js::JavascriptOperators::CallGetter(VarTo(propertyDescriptor.GetGetter()), instance, requestContext); + } + Assert(FALSE); + return requestContext->GetLibrary()->GetUndefined(); +} + +void CustomExternalWrapperObject::PropertyIdFromInt(uint32 index, Js::PropertyRecord const** propertyRecord) +{ + char16 buffer[22]; + int pos = Js::TaggedInt::ToBuffer(index, buffer, _countof(buffer)); + + GetScriptContext()->GetOrAddPropertyRecord((LPCWSTR)buffer + pos, (_countof(buffer) - 1) - pos, propertyRecord); +} + +Js::Var CustomExternalWrapperObject::GetName(Js::ScriptContext* requestContext, Js::PropertyId propertyId, Var * isPropertyNameNumeric, Var * propertyNameNumericValue) +{ + const Js::PropertyRecord* propertyRecord = requestContext->GetThreadContext()->GetPropertyName(propertyId); + Js::Var name; + if (propertyRecord->IsSymbol()) + { + name = requestContext->GetSymbol(propertyRecord); + } + else + { + name = requestContext->GetPropertyString(propertyRecord); + } + + *isPropertyNameNumeric = propertyRecord->IsNumeric() ? requestContext->GetLibrary()->GetTrue() : requestContext->GetLibrary()->GetFalse(); + *propertyNameNumericValue = propertyRecord->IsNumeric() ? JavascriptNumber::ToVar(propertyRecord->GetNumericValue(), requestContext) : nullptr; + return name; +} + +template +BOOL CustomExternalWrapperObject::GetPropertyTrap(Js::Var instance, Js::PropertyDescriptor * propertyDescriptor, Fn fn, GetPropertyNameFunc getPropertyName, Js::ScriptContext * requestContext, Js::PropertyValueInfo* info) +{ + PROBE_STACK(GetScriptContext(), Js::Constants::MinStackDefault); + + ThreadContext* threadContext = requestContext->GetThreadContext(); + + if (!this->EnsureInitialized(requestContext)) + { + return FALSE; + } + + Js::RecyclableObject * targetObj = this; + CustomExternalWrapperType * type = this->GetExternalType(); + Js::JavascriptFunction* getGetMethod = nullptr; + if (type->GetJsGetterSetterInterceptor()->getTrap != nullptr) + { + getGetMethod = Js::VarTo(type->GetJsGetterSetterInterceptor()->getTrap); + } + + if (nullptr == getGetMethod || requestContext->IsHeapEnumInProgress()) + { + return fn(targetObj); + } + + Js::Var isPropertyNameNumeric; + Js::Var propertyNameNumericValue; + Js::Var propertyName = getPropertyName(requestContext, &isPropertyNameNumeric, &propertyNameNumericValue); + + PropertyValueInfo::SetNoCache(info, targetObj); + PropertyValueInfo::DisablePrototypeCache(info, targetObj); + Js::Var getGetResult = threadContext->ExecuteImplicitCall(getGetMethod, Js::ImplicitCall_Accessor, [=]()->Js::Var + { + return CALL_FUNCTION(threadContext, getGetMethod, Js::CallInfo(Js::CallFlags_Value, 4), targetObj, propertyName, isPropertyNameNumeric, propertyNameNumericValue); + }); + + Js::TypeId getResultTypeId = Js::JavascriptOperators::GetTypeId(getGetResult); + if (getResultTypeId == Js::TypeIds_Undefined) + { + return FALSE; + } + + propertyDescriptor->SetValue(getGetResult); + return TRUE; +} + +template +BOOL CustomExternalWrapperObject::HasPropertyTrap(Fn fn, GetPropertyNameFunc getPropertyName, Js::PropertyValueInfo* info) +{ + PROBE_STACK(GetScriptContext(), Js::Constants::MinStackDefault); + + ThreadContext* threadContext = GetScriptContext()->GetThreadContext(); + + // Caller does not pass requestContext. Retrieve from host scriptContext stack. + Js::ScriptContext* requestContext = + threadContext->GetPreviousHostScriptContext()->GetScriptContext(); + + if (!this->EnsureInitialized(requestContext)) + { + return FALSE; + } + + Js::RecyclableObject *targetObj = this; + CustomExternalWrapperType * type = this->GetExternalType(); + Js::JavascriptFunction* hasMethod = nullptr; + if (type->GetJsGetterSetterInterceptor()->hasTrap != nullptr) + { + hasMethod = Js::VarTo(type->GetJsGetterSetterInterceptor()->hasTrap); + } + + if (nullptr == hasMethod || requestContext->IsHeapEnumInProgress()) + { + return fn(targetObj); + } + + Js::Var isPropertyNameNumeric; + Js::Var propertyNameNumericValue; + Js::Var propertyName = getPropertyName(requestContext, &isPropertyNameNumeric, &propertyNameNumericValue); + + PropertyValueInfo::SetNoCache(info, targetObj); + PropertyValueInfo::DisablePrototypeCache(info, targetObj); + Js::Var getHasResult = threadContext->ExecuteImplicitCall(hasMethod, Js::ImplicitCall_Accessor, [=]()->Js::Var + { + return CALL_FUNCTION(threadContext, hasMethod, Js::CallInfo(Js::CallFlags_Value, 4), targetObj, propertyName, isPropertyNameNumeric, propertyNameNumericValue); + }); + + BOOL hasProperty = Js::JavascriptConversion::ToBoolean(getHasResult, requestContext); + return hasProperty; +} + +Js::PropertyQueryFlags CustomExternalWrapperObject::HasPropertyQuery(Js::PropertyId propertyId, _Inout_opt_ Js::PropertyValueInfo* info) +{ + auto fn = [&](RecyclableObject* object)->BOOL { + return JavascriptConversion::PropertyQueryFlagsToBoolean(DynamicObject::HasPropertyQuery(propertyId, info)); + }; + auto getPropertyName = [&](Js::ScriptContext * requestContext, Js::Var * isPropertyNameNumeric, Js::Var * propertyNameNumericValue)->Js::Var + { + return GetName(requestContext, propertyId, isPropertyNameNumeric, propertyNameNumericValue); + }; + return Js::JavascriptConversion::BooleanToPropertyQueryFlags(HasPropertyTrap(fn, getPropertyName, info)); +} + +BOOL CustomExternalWrapperObject::GetPropertyDescriptorTrap(Js::PropertyId propertyId, Js::PropertyDescriptor* resultDescriptor, Js::ScriptContext* requestContext) +{ + PROBE_STACK(GetScriptContext(), Js::Constants::MinStackDefault); + + ThreadContext* threadContext = requestContext->GetThreadContext(); + + if (!this->EnsureInitialized(requestContext)) + { + return FALSE; + } + + Js::RecyclableObject * targetObj = this; + + CustomExternalWrapperType * type = this->GetExternalType(); + Js::JavascriptFunction* gOPDMethod = nullptr; + if (type->GetJsGetterSetterInterceptor()->getOwnPropertyDescriptorTrap != nullptr) + { + gOPDMethod = Js::VarTo(type->GetJsGetterSetterInterceptor()->getOwnPropertyDescriptorTrap); + } + + if (GetScriptContext()->IsHeapEnumInProgress()) + { + return FALSE; + } + + if (nullptr == gOPDMethod) + { + Var getter, setter; + if (false == JavascriptOperators::GetOwnAccessors(this, propertyId, &getter, &setter, requestContext)) + { + Var value = nullptr; + if (false == JavascriptOperators::GetOwnProperty(this, propertyId, &value, requestContext, nullptr)) + { + return FALSE; + } + if (nullptr != value) + { + resultDescriptor->SetValue(value); + } + + resultDescriptor->SetWritable(FALSE != this->IsWritable(propertyId)); + } + else + { + if (nullptr == getter) + { + getter = requestContext->GetLibrary()->GetUndefined(); + } + resultDescriptor->SetGetter(getter); + + if (nullptr == setter) + { + setter = requestContext->GetLibrary()->GetUndefined(); + } + resultDescriptor->SetSetter(setter); + } + + resultDescriptor->SetConfigurable(FALSE != this->IsConfigurable(propertyId)); + resultDescriptor->SetEnumerable(FALSE != this->IsEnumerable(propertyId)); + return TRUE; + } + + Js::Var isPropertyNameNumeric; + Js::Var propertyNameNumericValue; + Js::Var propertyName = GetName(requestContext, propertyId, &isPropertyNameNumeric, &propertyNameNumericValue); + + Assert(Js::VarIs(propertyName) || Js::VarIs(propertyName)); + + Js::Var getResult = threadContext->ExecuteImplicitCall(gOPDMethod, Js::ImplicitCall_Accessor, [=]()->Js::Var + { + return CALL_FUNCTION(threadContext, gOPDMethod, Js::CallInfo(Js::CallFlags_Value, 4), targetObj, propertyName, isPropertyNameNumeric, propertyNameNumericValue); + }); + + Js::TypeId getResultTypeId = Js::JavascriptOperators::GetTypeId(getResult); + if (Js::StaticType::Is(getResultTypeId) && getResultTypeId != Js::TypeIds_Undefined) + { + Js::JavascriptError::ThrowTypeError(requestContext, JSERR_NeedObject, _u("getOwnPropertyDescriptor")); + } + + BOOL toProperty = Js::JavascriptOperators::ToPropertyDescriptor(getResult, resultDescriptor, requestContext); + Js::JavascriptOperators::CompletePropertyDescriptor(resultDescriptor, nullptr, requestContext); + return toProperty; +} + +BOOL CustomExternalWrapperObject::GetOwnPropertyDescriptor(Js::RecyclableObject * obj, Js::PropertyId propertyId, Js::ScriptContext * requestContext, Js::PropertyDescriptor * propertyDescriptor) +{ + CustomExternalWrapperObject * customObject = VarTo(obj); + return customObject->GetPropertyDescriptorTrap(propertyId, propertyDescriptor, requestContext); +} + +BOOL CustomExternalWrapperObject::DefineOwnPropertyDescriptor(Js::RecyclableObject * obj, Js::PropertyId propId, const Js::PropertyDescriptor& descriptor, bool throwOnError, Js::ScriptContext * requestContext) +{ + PROBE_STACK(requestContext, Js::Constants::MinStackDefault); + + ThreadContext* threadContext = requestContext->GetThreadContext(); + + CustomExternalWrapperObject * customObject = VarTo(obj); + + if (!customObject->EnsureInitialized(requestContext)) + { + return FALSE; + } + + Js::RecyclableObject * targetObj = obj; + + CustomExternalWrapperType * type = customObject->GetExternalType(); + Js::JavascriptFunction* defineOwnPropertyMethod = nullptr; + if (type->GetJsGetterSetterInterceptor()->definePropertyTrap != nullptr) + { + defineOwnPropertyMethod = Js::VarTo(type->GetJsGetterSetterInterceptor()->definePropertyTrap); + } + + Assert(!requestContext->IsHeapEnumInProgress()); + if (nullptr == defineOwnPropertyMethod) + { + Js::PropertyDescriptor desc = descriptor; + + if(desc.ValueSpecified()) + { + // setting the value could be deferred and now we are on a different context from + // make sure the value has the same context as the containing object. + desc.SetValue(Js::CrossSite::MarshalVar(targetObj->GetScriptContext(), descriptor.GetValue())); + } + + PropertyDescriptor currentDescriptor; + BOOL isCurrentDescriptorDefined = JavascriptOperators::GetOwnPropertyDescriptor(obj, propId, requestContext, ¤tDescriptor); + + bool isExtensible = !!obj->IsExtensible(); + return Js::JavascriptOperators::ValidateAndApplyPropertyDescriptor(obj, propId, desc, isCurrentDescriptorDefined ? ¤tDescriptor : nullptr, isExtensible, throwOnError, requestContext); + } + + Js::Var descVar = descriptor.GetOriginal(); + if (descVar == nullptr) + { + descVar = Js::JavascriptOperators::FromPropertyDescriptor(descriptor, requestContext); + } + + Js::Var isPropertyNameNumeric; + Js::Var propertyNameNumericValue; + Js::Var propertyName = customObject->GetName(requestContext, propId, &isPropertyNameNumeric, &propertyNameNumericValue); + + Js::Var definePropertyResult = threadContext->ExecuteImplicitCall(defineOwnPropertyMethod, Js::ImplicitCall_Accessor, [=]()->Js::Var + { + return CALL_FUNCTION(threadContext, defineOwnPropertyMethod, Js::CallInfo(Js::CallFlags_Value, 5), targetObj, propertyName, isPropertyNameNumeric, propertyNameNumericValue, descVar); + }); + + BOOL defineResult = Js::JavascriptConversion::ToBoolean(definePropertyResult, requestContext); + if (defineResult) + { + return defineResult; + } + + Js::PropertyDescriptor targetDescriptor; + BOOL hasProperty = Js::JavascriptOperators::GetOwnPropertyDescriptor(targetObj, propId, requestContext, &targetDescriptor); + BOOL isExtensible = targetObj->IsExtensible(); + BOOL settingConfigFalse = (descriptor.ConfigurableSpecified() && !descriptor.IsConfigurable()); + if (!hasProperty) + { + if (!isExtensible || settingConfigFalse) + { + Js::JavascriptError::ThrowTypeError(requestContext, JSERR_InconsistentTrapResult, _u("defineProperty")); + } + } + else + { + if (!Js::JavascriptOperators::IsCompatiblePropertyDescriptor(descriptor, hasProperty ? &targetDescriptor : nullptr, !!isExtensible, true, requestContext)) + { + Js::JavascriptError::ThrowTypeError(requestContext, JSERR_InconsistentTrapResult, _u("defineProperty")); + } + if (settingConfigFalse && targetDescriptor.IsConfigurable()) + { + Js::JavascriptError::ThrowTypeError(requestContext, JSERR_InconsistentTrapResult, _u("defineProperty")); + } + } + return hasProperty; +} + +BOOL CustomExternalWrapperObject::SetPropertyTrap(Js::Var receiver, SetPropertyTrapKind setPropertyTrapKind, Js::JavascriptString * propertyNameString, Js::Var newValue, Js::ScriptContext * requestContext, Js::PropertyOperationFlags propertyOperationFlags, Js::PropertyValueInfo* info) +{ + auto getPropertyName = [&](Js::ScriptContext * requestContext, Js::Var * isPropertyNameNumeric, Js::Var * propertyNameNumericValue)->Js::Var + { + const Js::PropertyRecord* propertyRecord; + propertyNameString->GetPropertyRecord(&propertyRecord); + return GetName(requestContext, propertyRecord->GetPropertyId(), isPropertyNameNumeric, propertyNameNumericValue); + }; + auto fn = [&]()->BOOL + { + // setting the value could be deferred and now we are on a different context from + // make sure the value has the same context as the containing object. + newValue = Js::CrossSite::MarshalVar(this->GetScriptContext(), newValue); + return DynamicObject::SetProperty(propertyNameString, newValue, propertyOperationFlags, nullptr); + }; + return SetPropertyTrap(receiver, setPropertyTrapKind, getPropertyName, newValue, requestContext, propertyOperationFlags, FALSE, fn, info); +} + +template +BOOL CustomExternalWrapperObject::SetPropertyTrap(Js::Var receiver, SetPropertyTrapKind setPropertyTrapKind, GetPropertyNameFunc getPropertyName, Js::Var newValue, Js::ScriptContext * requestContext, Js::PropertyOperationFlags propertyOperationFlags, BOOL skipPrototypeCheck, Fn fn, Js::PropertyValueInfo* info) +{ + PROBE_STACK(GetScriptContext(), Js::Constants::MinStackDefault); + + ThreadContext* threadContext = requestContext->GetThreadContext(); + + if (!this->EnsureInitialized(requestContext)) + { + return FALSE; + } + + Js::RecyclableObject *targetObj = this; + CustomExternalWrapperType * type = this->GetExternalType(); + Js::JavascriptFunction* setMethod = nullptr; + if (type->GetJsGetterSetterInterceptor()->setTrap != nullptr) + { + setMethod = Js::VarTo(type->GetJsGetterSetterInterceptor()->setTrap); + } + else + { + return fn(); + } + + Assert(!GetScriptContext()->IsHeapEnumInProgress()); + Js::Var isPropertyNameNumeric; + Js::Var propertyNameNumericValue; + Js::Var propertyName = getPropertyName(requestContext, &isPropertyNameNumeric, &propertyNameNumericValue); + + PropertyValueInfo::SetNoCache(info, targetObj); + PropertyValueInfo::DisablePrototypeCache(info, targetObj); + if (nullptr != setMethod) + { + Js::Var setPropertyResult = threadContext->ExecuteImplicitCall(setMethod, Js::ImplicitCall_Accessor, [=]()->Js::Var + { + return CALL_FUNCTION(threadContext, setMethod, Js::CallInfo(Js::CallFlags_Value, 5), targetObj, propertyName, isPropertyNameNumeric, propertyNameNumericValue, newValue); + }); + + BOOL setResult = Js::JavascriptConversion::ToBoolean(setPropertyResult, requestContext); + return setResult; + } + + return FALSE; +} + +Js::PropertyQueryFlags CustomExternalWrapperObject::GetPropertyQuery(Js::Var originalInstance, Js::PropertyId propertyId, Js::Var* value, Js::PropertyValueInfo* info, Js::ScriptContext* requestContext) +{ + if (!this->VerifyObjectAlive()) return Js::PropertyQueryFlags::Property_NotFound; + Js::PropertyDescriptor result; + + auto fn = [&](Js::RecyclableObject* object)-> BOOL { + BOOL found = JavascriptConversion::PropertyQueryFlagsToBoolean(DynamicObject::GetPropertyQuery(originalInstance, propertyId, value, info, requestContext)); + result.SetValue(*value); + return found; + }; + auto getPropertyName = [&](Js::ScriptContext * requestContext, Js::Var * isPropertyNameNumeric, Js::Var * propertyNameNumericValue)->Js::Var + { + return GetName(requestContext, propertyId, isPropertyNameNumeric, propertyNameNumericValue); + }; + BOOL foundProperty = GetPropertyTrap(originalInstance, &result, fn, getPropertyName, requestContext, info); + if (!foundProperty) + { + *value = requestContext->GetMissingPropertyResult(); + } + else + { + *value = GetValueFromDescriptor(originalInstance, result, requestContext); + } + return Js::JavascriptConversion::BooleanToPropertyQueryFlags(foundProperty); +} + +Js::PropertyQueryFlags CustomExternalWrapperObject::GetPropertyQuery(Js::Var originalInstance, Js::JavascriptString* propertyNameString, Js::Var* value, Js::PropertyValueInfo* info, Js::ScriptContext* requestContext) +{ + if (!this->VerifyObjectAlive()) return Js::PropertyQueryFlags::Property_NotFound; + Js::PropertyDescriptor result; + + auto fn = [&](Js::RecyclableObject* object)-> BOOL { + BOOL found = JavascriptConversion::PropertyQueryFlagsToBoolean(DynamicObject::GetPropertyQuery(originalInstance, propertyNameString, value, info, requestContext)); + result.SetValue(*value); + return found; + }; + + auto getPropertyName = [&](Js::ScriptContext * requestContext, Js::Var * isPropertyNameNumeric, Js::Var * propertyNameNumericValue)->Js::Var + { + const Js::PropertyRecord* propertyRecord; + propertyNameString->GetPropertyRecord(&propertyRecord); + return GetName(requestContext, propertyRecord->GetPropertyId(), isPropertyNameNumeric, propertyNameNumericValue); + }; + + BOOL foundProperty = GetPropertyTrap(originalInstance, &result, fn, getPropertyName, requestContext, info); + if (!foundProperty) + { + *value = requestContext->GetMissingPropertyResult(); + } + else + { + *value = GetValueFromDescriptor(originalInstance, result, requestContext); + } + return Js::JavascriptConversion::BooleanToPropertyQueryFlags(foundProperty); +} + +Js::PropertyQueryFlags CustomExternalWrapperObject::GetPropertyReferenceQuery(Js::Var originalInstance, Js::PropertyId propertyId, Js::Var* value, Js::PropertyValueInfo* info, Js::ScriptContext* requestContext) +{ + if (!this->VerifyObjectAlive()) return Js::PropertyQueryFlags::Property_NotFound; + Js::PropertyDescriptor result; + + auto fn = [&](Js::RecyclableObject* object)-> BOOL { + BOOL found = JavascriptConversion::PropertyQueryFlagsToBoolean(DynamicObject::GetPropertyReferenceQuery(originalInstance, propertyId, value, info, requestContext)); + result.SetValue(*value); + return found; + }; + + auto getPropertyName = [&](Js::ScriptContext * requestContext, Js::Var * isPropertyNameNumeric, Js::Var * propertyNameNumericValue)->Js::Var + { + return GetName(requestContext, propertyId, isPropertyNameNumeric, propertyNameNumericValue); + }; + + BOOL foundProperty = GetPropertyTrap(originalInstance, &result, fn, getPropertyName, requestContext, info); + if (!foundProperty) + { + *value = requestContext->GetMissingPropertyResult(); + } + else + { + *value = GetValueFromDescriptor(originalInstance, result, requestContext); + } + return Js::JavascriptConversion::BooleanToPropertyQueryFlags(foundProperty); +} + +Js::PropertyQueryFlags CustomExternalWrapperObject::HasItemQuery(uint32 index) +{ + auto fn = [&](Js::RecyclableObject* object)-> BOOL { + return JavascriptConversion::PropertyQueryFlagsToBoolean(DynamicObject::HasItemQuery(index)); + }; + + auto getPropertyName = [&](Js::ScriptContext * requestContext, Js::Var * isPropertyNameNumeric, Js::Var * propertyNameNumericValue)->Js::Var + { + *isPropertyNameNumeric = requestContext->GetLibrary()->GetTrue(); + *propertyNameNumericValue = JavascriptNumber::ToVar(index, requestContext); + return nullptr; + }; + + return Js::JavascriptConversion::BooleanToPropertyQueryFlags(HasPropertyTrap(fn, getPropertyName, nullptr)); +} + +BOOL CustomExternalWrapperObject::HasOwnItem(uint32 index) +{ + auto fn = [&](Js::RecyclableObject* object)-> BOOL { + return DynamicObject::HasOwnItem(index); + }; + auto getPropertyName = [&](Js::ScriptContext * requestContext, Js::Var * isPropertyNameNumeric, Js::Var * propertyNameNumericValue)->Js::Var + { + *isPropertyNameNumeric = requestContext->GetLibrary()->GetTrue(); + *propertyNameNumericValue = JavascriptNumber::ToVar(index, requestContext); + return nullptr; + }; + + return HasPropertyTrap(fn, getPropertyName, nullptr); +} + +Js::PropertyQueryFlags CustomExternalWrapperObject::GetItemQuery(Js::Var originalInstance, uint32 index, Js::Var* value, Js::ScriptContext * requestContext) +{ + if (!this->VerifyObjectAlive()) return Js::PropertyQueryFlags::Property_NotFound; + Js::PropertyDescriptor result; + + auto fn = [&](Js::RecyclableObject* object)-> BOOL { + BOOL found = JavascriptConversion::PropertyQueryFlagsToBoolean(DynamicObject::GetItemQuery(originalInstance, index, value, requestContext)); + result.SetValue(*value); + return found; + }; + + auto getPropertyName = [&](Js::ScriptContext * requestContext, Js::Var * isPropertyNameNumeric, Js::Var * propertyNameNumericValue)->Js::Var + { + *isPropertyNameNumeric = requestContext->GetLibrary()->GetTrue(); + *propertyNameNumericValue = JavascriptNumber::ToVar(index, requestContext); + return nullptr; + }; + + BOOL foundProperty = GetPropertyTrap(originalInstance, &result, fn, getPropertyName, requestContext, nullptr); + if (!foundProperty) + { + *value = requestContext->GetMissingItemResult(); + } + else + { + *value = GetValueFromDescriptor(originalInstance, result, requestContext); + } + return Js::JavascriptConversion::BooleanToPropertyQueryFlags(foundProperty); +} + +Js::PropertyQueryFlags CustomExternalWrapperObject::GetItemReferenceQuery(Js::Var originalInstance, uint32 index, Js::Var* value, Js::ScriptContext * requestContext) +{ + if (!this->VerifyObjectAlive()) return Js::PropertyQueryFlags::Property_NotFound; + + Js::PropertyDescriptor result; + auto fn = [&](Js::RecyclableObject* object)-> BOOL { + BOOL found = JavascriptConversion::PropertyQueryFlagsToBoolean(DynamicObject::GetItemReferenceQuery(originalInstance, index, value, requestContext)); + result.SetValue(*value); + return found; + }; + + auto getPropertyName = [&](Js::ScriptContext * requestContext, Js::Var * isPropertyNameNumeric, Js::Var * propertyNameNumericValue)->Js::Var + { + *isPropertyNameNumeric = requestContext->GetLibrary()->GetTrue(); + *propertyNameNumericValue = JavascriptNumber::ToVar(index, requestContext); + return nullptr; + }; + + BOOL foundProperty = GetPropertyTrap(originalInstance, &result, fn, getPropertyName, requestContext, nullptr); + if (!foundProperty) + { + *value = requestContext->GetMissingItemResult(); + } + else + { + *value = GetValueFromDescriptor(originalInstance, result, requestContext); + } + return Js::JavascriptConversion::BooleanToPropertyQueryFlags(foundProperty); +} + +BOOL CustomExternalWrapperObject::SetItem(uint32 index, Js::Var value, Js::PropertyOperationFlags flags) +{ + if (!this->VerifyObjectAlive()) return FALSE; + + auto getPropertyName = [&](Js::ScriptContext * requestContext, Js::Var * isPropertyNameNumeric, Js::Var * propertyNameNumericValue)->Js::Var + { + *isPropertyNameNumeric = requestContext->GetLibrary()->GetTrue(); + *propertyNameNumericValue = JavascriptNumber::ToVar(index, requestContext); + return nullptr; + }; + + auto fn = [&]()->BOOL + { + // setting the value could be deferred and now we are on a different context from + // make sure the value has the same context as the containing object. + value = Js::CrossSite::MarshalVar(this->GetScriptContext(), value); + return DynamicObject::SetItem(index, value, flags); + }; + BOOL trapResult = SetPropertyTrap(this, CustomExternalWrapperObject::SetPropertyTrapKind::SetItemKind, getPropertyName, value, GetScriptContext(), flags, FALSE, fn, nullptr); + if (!trapResult) + { + // setting the value could be deferred and now we are on a different context from + // make sure the value has the same context as the containing object. + value = Js::CrossSite::MarshalVar(this->GetScriptContext(), value); + return Js::DynamicObject::SetItem(index, value, flags); + } + + return TRUE; +} + +BOOL CustomExternalWrapperObject::DeleteItem(uint32 index, Js::PropertyOperationFlags flags) +{ + if (!this->VerifyObjectAlive()) return FALSE; + const PropertyRecord* propertyRecord = nullptr; + PropertyIdFromInt(index, &propertyRecord); + return this->DeleteProperty(propertyRecord->GetPropertyId(), flags); +} + +BOOL CustomExternalWrapperObject::GetEnumerator(Js::JavascriptStaticEnumerator * enumerator, Js::EnumeratorFlags flags, Js::ScriptContext* requestContext, Js::EnumeratorCache * enumeratorCache) +{ + if (!this->VerifyObjectAlive()) return FALSE; + ThreadContext* threadContext = requestContext->GetThreadContext(); + + if (!this->EnsureInitialized(requestContext)) + { + return FALSE; + } + + CustomExternalWrapperType * type = this->GetExternalType(); + Js::JavascriptFunction* getEnumeratorMethod = nullptr; + if (type->GetJsGetterSetterInterceptor()->enumerateTrap != nullptr) + { + getEnumeratorMethod = Js::VarTo(type->GetJsGetterSetterInterceptor()->enumerateTrap); + } + + Js::RecyclableObject * targetObj = this; + JavascriptArray * trapResult = nullptr; + if (getEnumeratorMethod == nullptr) + { + return DynamicObject::GetEnumerator(enumerator, flags, requestContext, enumeratorCache); + } + else + { + Js::Var getGetEnumeratorResult = threadContext->ExecuteImplicitCall(getEnumeratorMethod, Js::ImplicitCall_Accessor, [=]()->Js::Var + { + return CALL_FUNCTION(threadContext, getEnumeratorMethod, Js::CallInfo(Js::CallFlags_Value, 1), targetObj); + }); + + Js::TypeId getResultTypeId = Js::JavascriptOperators::GetTypeId(getGetEnumeratorResult); + if (getResultTypeId == Js::TypeIds_Undefined) + { + return FALSE; + } + + trapResult = JavascriptOperators::TryFromVar(getGetEnumeratorResult); + if (trapResult == nullptr) + { + return FALSE; + } + } + + struct WrapperOwnKeysEnumerator : public JavascriptEnumerator + { + typedef JsUtil::BaseHashSet, Recycler> VisitedNamesHashSet; + Field(VisitedNamesHashSet*) visited; + Field(JavascriptArray*) trapResult; + Field(CustomExternalWrapperObject*) wrapper; + FieldNoBarrier(ScriptContext*) scriptContext; + Field(uint32) index; + + DEFINE_VTABLE_CTOR_ABSTRACT(WrapperOwnKeysEnumerator, JavascriptEnumerator) + + WrapperOwnKeysEnumerator(ScriptContext* scriptContext, CustomExternalWrapperObject* wrapper, JavascriptArray* trapResult) + :JavascriptEnumerator(scriptContext), scriptContext(scriptContext), wrapper(wrapper), trapResult(trapResult) + { + visited = RecyclerNew(scriptContext->GetRecycler(), VisitedNamesHashSet, scriptContext->GetRecycler()); + } + virtual void Reset() override + { + index = 0; + visited->Reset(); + } + + virtual JavascriptString * MoveAndGetNext(PropertyId& propertyId, PropertyAttributes* attributes = nullptr) override + { + propertyId = Constants::NoProperty; + if (attributes != nullptr) + { + *attributes = PropertyEnumerable; + } + // 13.7.5.15 EnumerateObjectProperties(O) (https://tc39.github.io/ecma262/#sec-enumerate-object-properties) + // for (let key of Reflect.ownKeys(obj)) { + if (trapResult != nullptr) + { + uint32 len = trapResult->GetLength(); + while (index < len) + { + Var var = trapResult->DirectGetItem(index++); + if (var) + { + // if (typeof key === "string") { + if (VarIs(var)) + { + JavascriptString* propertyName = VarTo(var); + // let desc = Reflect.getOwnPropertyDescriptor(obj, key); + Js::PropertyDescriptor desc; + BOOL ret = JavascriptOperators::GetOwnPropertyDescriptor(wrapper, propertyName, scriptContext, &desc); + const JsUtil::CharacterBuffer propertyString(propertyName->GetString(), propertyName->GetLength()); + // if (desc && !visited.has(key)) { + if (ret && !visited->Contains(propertyString)) + { + visited->Add(propertyString); + // if (desc.enumerable) yield key; + if (desc.IsEnumerable()) + { + //TODO: (vsadov) not sure if should marshal here, it is "getting" + return VarTo(CrossSite::MarshalVar( + scriptContext, propertyName, propertyName->GetScriptContext())); + } + } + } + } + } + } + return nullptr; + } + }; + + WrapperOwnKeysEnumerator* ownKeysEnum = RecyclerNew(requestContext->GetRecycler(), WrapperOwnKeysEnumerator, requestContext, this, trapResult); + + return enumerator->Initialize(ownKeysEnum, nullptr, nullptr, flags, requestContext, enumeratorCache); +} + +BOOL CustomExternalWrapperObject::SetProperty(Js::PropertyId propertyId, Js::Var value, Js::PropertyOperationFlags flags, Js::PropertyValueInfo* info) +{ + if (!this->VerifyObjectAlive()) return FALSE; + PROBE_STACK(GetScriptContext(), Js::Constants::MinStackDefault); + + auto getPropertyName = [&](Js::ScriptContext * requestContext, Js::Var * isPropertyNameNumeric, Js::Var * propertyNameNumericValue)->Js::Var + { + return GetName(requestContext, propertyId, isPropertyNameNumeric, propertyNameNumericValue); + }; + + auto fn = [&]()->BOOL + { + // setting the value could be deferred and now we are on a different context from + // make sure the value has the same context as the containing object. + value = Js::CrossSite::MarshalVar(this->GetScriptContext(), value); + return DynamicObject::SetProperty(propertyId, value, flags, info); + }; + + return SetPropertyTrap(this, CustomExternalWrapperObject::SetPropertyTrapKind::SetPropertyKind, getPropertyName, value, GetScriptContext(), flags, FALSE, fn, info); +} + +BOOL CustomExternalWrapperObject::SetProperty(Js::JavascriptString* propertyNameString, Js::Var value, Js::PropertyOperationFlags flags, Js::PropertyValueInfo* info) +{ + if (!this->VerifyObjectAlive()) return FALSE; + PROBE_STACK(GetScriptContext(), Js::Constants::MinStackDefault); + + auto getPropertyName = [&](Js::ScriptContext * requestContext, Js::Var * isPropertyNameNumeric, Js::Var * propertyNameNumericValue)->Js::Var + { + return propertyNameString; + }; + + auto fn = [&]()->BOOL + { + // setting the value could be deferred and now we are on a different context from + // make sure the value has the same context as the containing object. + value = Js::CrossSite::MarshalVar(this->GetScriptContext(), value); + return DynamicObject::SetProperty(propertyNameString, value, flags, info); + }; + + return SetPropertyTrap(this, CustomExternalWrapperObject::SetPropertyTrapKind::SetPropertyKind, getPropertyName, value, GetScriptContext(), flags, FALSE, fn, info); +} + +BOOL CustomExternalWrapperObject::EnsureNoRedeclProperty(Js::PropertyId propertyId) +{ + CustomExternalWrapperObject::HasOwnPropertyCheckNoRedecl(propertyId); + return true; +} + +BOOL CustomExternalWrapperObject::InitProperty(PropertyId propertyId, Var value, PropertyOperationFlags flags, PropertyValueInfo* info) +{ + if (!this->VerifyObjectAlive()) return FALSE; + + ThreadContext* threadContext = GetScriptContext()->GetThreadContext(); + + // Caller does not pass requestContext. Retrieve from host scriptContext stack. + Js::ScriptContext* requestContext = + threadContext->GetPreviousHostScriptContext()->GetScriptContext(); + + if (!this->EnsureInitialized(requestContext)) + { + return FALSE; + } + + // setting the value could be deferred and now we are on a different context from + // make sure the value has the same context as the containing object. + value = Js::CrossSite::MarshalVar(this->GetScriptContext(), value); + return DynamicObject::InitProperty(propertyId, value, flags, info); +} + +BOOL CustomExternalWrapperObject::DeleteProperty(Js::PropertyId propertyId, Js::PropertyOperationFlags flags) +{ + if (!this->VerifyObjectAlive()) return FALSE; + + PROBE_STACK(GetScriptContext(), Js::Constants::MinStackDefault); + + ThreadContext* threadContext = GetScriptContext()->GetThreadContext(); + + // Caller does not pass requestContext. Retrieve from host scriptContext stack. + Js::ScriptContext* requestContext = + threadContext->GetPreviousHostScriptContext()->GetScriptContext(); + + if (!this->EnsureInitialized(requestContext)) + { + return FALSE; + } + + RecyclableObject * targetObj = this; + CustomExternalWrapperType * type = this->GetExternalType(); + Js::JavascriptFunction* deleteMethod = nullptr; + if (type->GetJsGetterSetterInterceptor()->deletePropertyTrap != nullptr) + { + deleteMethod = Js::VarTo(type->GetJsGetterSetterInterceptor()->deletePropertyTrap); + } + + Assert(!GetScriptContext()->IsHeapEnumInProgress()); + if (nullptr == deleteMethod) + { + return __super::DeleteProperty(propertyId, flags); + } + + Js::Var isPropertyNameNumeric; + Js::Var propertyNameNumericValue; + Js::Var propertyName = GetName(requestContext, propertyId, &isPropertyNameNumeric, &propertyNameNumericValue); + + Js::Var deletePropertyResult = threadContext->ExecuteImplicitCall(deleteMethod, Js::ImplicitCall_Accessor, [=]()->Js::Var + { + return CALL_FUNCTION(threadContext, deleteMethod, Js::CallInfo(Js::CallFlags_Value, 4), targetObj, propertyName, isPropertyNameNumeric, propertyNameNumericValue); + }); + + BOOL trapResult = Js::JavascriptConversion::ToBoolean(deletePropertyResult, requestContext); + if (!trapResult) + { + if (flags & Js::PropertyOperation_StrictMode) + { + Js::JavascriptError::ThrowTypeError(requestContext, JSERR_InconsistentTrapResult, _u("deleteProperty")); + } + return trapResult; + } + + Js::PropertyDescriptor targetPropertyDescriptor; + if (!Js::JavascriptOperators::GetOwnPropertyDescriptor(targetObj, propertyId, requestContext, &targetPropertyDescriptor)) + { + return TRUE; + } + if (!targetPropertyDescriptor.IsConfigurable()) + { + Js::JavascriptError::ThrowTypeError(requestContext, JSERR_InconsistentTrapResult, _u("deleteProperty")); + } + return TRUE; +} + +BOOL CustomExternalWrapperObject::DeleteProperty(Js::JavascriptString *propertyNameString, Js::PropertyOperationFlags flags) +{ + if (!this->VerifyObjectAlive()) return FALSE; + Js::PropertyRecord const *propertyRecord = nullptr; + if (Js::JavascriptOperators::ShouldTryDeleteProperty(this, propertyNameString, &propertyRecord)) + { + Assert(propertyRecord); + return DeleteProperty(propertyRecord->GetPropertyId(), flags); + } + + return TRUE; +} + +#if ENABLE_TTD +TTD::NSSnapObjects::SnapObjectType CustomExternalWrapperObject::GetSnapTag_TTD() const +{ + //TODO:akatti: TTD. Do we need to define a new TTD object type for CustomExternalWrapperObject? + return TTD::NSSnapObjects::SnapObjectType::SnapExternalObject; +} + +void CustomExternalWrapperObject::ExtractSnapObjectDataInto(TTD::NSSnapObjects::SnapObject* objData, TTD::SlabAllocator& alloc) +{ + TTD::NSSnapObjects::StdExtractSetKindSpecificInfo(objData, nullptr); +} +#endif +#endif // _CHAKRACOREBUILD diff --git a/lib/Runtime/Library/CustomExternalWrapperObject.h b/lib/Runtime/Library/CustomExternalWrapperObject.h new file mode 100644 index 00000000000..8ba8cd10351 --- /dev/null +++ b/lib/Runtime/Library/CustomExternalWrapperObject.h @@ -0,0 +1,233 @@ +//------------------------------------------------------------------------------------------------------- +// Copyright (C) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. +//------------------------------------------------------------------------------------------------------- +#pragma once + +namespace Js +{ + typedef void (*JsTraceCallback)(void * data); + typedef void (*JsFinalizeCallback)(void * data); + + typedef struct _JsGetterSetterInterceptor { + Field(void *) getTrap; + Field(void *) setTrap; + Field(void *) deletePropertyTrap; + Field(void *) enumerateTrap; + Field(void *) ownKeysTrap; + Field(void *) hasTrap; + Field(void *) getOwnPropertyDescriptorTrap; + Field(void *) definePropertyTrap; + Field(void *) initializeTrap; + } JsGetterSetterInterceptor; + + class CustomExternalWrapperType sealed : public DynamicType + { + public: + CustomExternalWrapperType(CustomExternalWrapperType * type) : DynamicType(type), jsTraceCallback(type->jsTraceCallback), jsFinalizeCallback(type->jsFinalizeCallback), jsGetterSetterInterceptor(type->jsGetterSetterInterceptor) {} + CustomExternalWrapperType(ScriptContext * scriptContext, JsTraceCallback traceCallback, JsFinalizeCallback finalizeCallback, RecyclableObject * prototype); + + JsTraceCallback GetJsTraceCallback() const { return this->jsTraceCallback; } + JsFinalizeCallback GetJsFinalizeCallback() const { return this->jsFinalizeCallback; } + JsGetterSetterInterceptor * GetJsGetterSetterInterceptor() const { return this->jsGetterSetterInterceptor; } + + private: + FieldNoBarrier(JsTraceCallback const) jsTraceCallback; + FieldNoBarrier(JsFinalizeCallback const) jsFinalizeCallback; + FieldNoBarrier(JsGetterSetterInterceptor *) jsGetterSetterInterceptor; + }; + + class CustomExternalWrapperObject : public DynamicObject + { + protected: + DEFINE_VTABLE_CTOR(CustomExternalWrapperObject, DynamicObject); + DEFINE_MARSHAL_OBJECT_TO_SCRIPT_CONTEXT(CustomExternalWrapperObject); + + public: + typedef enum SetPropertyTrapKind { + SetItemOnTaggedNumberKind, + SetPropertyOnTaggedNumberKind, + SetPropertyKind, + SetItemKind, + SetPropertyWPCacheKind, + } SetPropertyTrapKind; + + enum KeysTrapKind { + GetOwnEnumerablePropertyNamesKind, + GetOwnPropertyNamesKind, + GetOwnPropertySymbolKind, + EnumerableKeysKind, + KeysKind + }; + + CustomExternalWrapperObject(CustomExternalWrapperType * type, void *data, uint inlineSlotSize); + CustomExternalWrapperObject(CustomExternalWrapperObject* instance, bool deepCopy); + + BOOL IsObjectAlive(); + BOOL VerifyObjectAlive(); + + static CustomExternalWrapperObject * Create(void *data, uint inlineSlotSize, JsTraceCallback traceCallback, JsFinalizeCallback finalizeCallback, JsGetterSetterInterceptor ** getterSetterInterceptor, RecyclableObject * prototype, ScriptContext *scriptContext); + + virtual CustomExternalWrapperObject* Copy(bool deepCopy) override; + + static BOOL GetOwnPropertyDescriptor(RecyclableObject * obj, PropertyId propertyId, ScriptContext* requestContext, PropertyDescriptor* propertyDescriptor); + static BOOL DefineOwnPropertyDescriptor(RecyclableObject * obj, PropertyId propId, const PropertyDescriptor& descriptor, bool throwOnError, ScriptContext* requestContext); + + CustomExternalWrapperType * GetExternalType() const { return (CustomExternalWrapperType *)this->GetType(); } + + BOOL EnsureInitialized(ScriptContext* requestContext); + + void Mark(Recycler * recycler) override; + void Finalize(bool isShutdown) override; + void Dispose(bool isShutdown) override; + + bool HasReadOnlyPropertiesInvisibleToTypeHandler() override { return true; } + bool IsInitialized() const { return this->initialized; } + + virtual PropertyQueryFlags GetPropertyQuery(Var originalInstance, PropertyId propertyId, Var * value, PropertyValueInfo * info, ScriptContext * requestContext) override; + virtual PropertyQueryFlags GetPropertyQuery(Var originalInstance, JavascriptString* propertyNameString, Var * value, PropertyValueInfo * info, ScriptContext * requestContext) override; + virtual PropertyQueryFlags GetPropertyReferenceQuery(Var originalInstance, PropertyId propertyId, Var * value, PropertyValueInfo * info, ScriptContext * requestContext) override; + virtual PropertyQueryFlags HasPropertyQuery(PropertyId propertyId, _Inout_opt_ PropertyValueInfo* info) override; + virtual BOOL SetProperty(PropertyId propertyId, Var value, PropertyOperationFlags flags, PropertyValueInfo * info) override; + virtual BOOL SetProperty(JavascriptString* propertyNameString, Var value, PropertyOperationFlags flags, PropertyValueInfo * info) override; + virtual BOOL EnsureNoRedeclProperty(PropertyId propertyId) override; + virtual BOOL InitProperty(PropertyId propertyId, Var value, PropertyOperationFlags flags = PropertyOperation_None, PropertyValueInfo* info = nullptr) override; + virtual BOOL DeleteProperty(PropertyId propertyId, PropertyOperationFlags flags) override; + virtual BOOL DeleteProperty(JavascriptString *propertyNameString, PropertyOperationFlags flags) override; + virtual PropertyQueryFlags HasItemQuery(uint32 index) override; + virtual BOOL HasOwnItem(uint32 index) override; + virtual PropertyQueryFlags GetItemQuery(Var originalInstance, uint32 index, Var * value, ScriptContext * requestContext) override; + virtual PropertyQueryFlags GetItemReferenceQuery(Var originalInstance, uint32 index, Var * value, ScriptContext * requestContext) override; + virtual BOOL SetItem(uint32 index, Var value, PropertyOperationFlags flags) override; + virtual BOOL DeleteItem(uint32 index, PropertyOperationFlags flags) override; + virtual BOOL GetEnumerator(JavascriptStaticEnumerator * enumerator, EnumeratorFlags flags, ScriptContext * requestContext, EnumeratorCache * enumeratorCache = nullptr) override; + virtual BOOL Equals(__in Var other, __out BOOL* value, ScriptContext* requestContext) override; + virtual BOOL StrictEquals(__in Var other, __out BOOL* value, ScriptContext* requestContext) override; + + virtual DynamicType* DuplicateType() override; + virtual void SetPrototype(RecyclableObject* newPrototype) override; + + void PropertyIdFromInt(uint32 index, PropertyRecord const** propertyRecord); + + template + BOOL SetPropertyTrap(Var receiver, SetPropertyTrapKind setPropertyTrapKind, GetPropertyNameFunc getPropertyName, Var newValue, ScriptContext * requestContext, PropertyOperationFlags propertyOperationFlags, BOOL skipPrototypeCheck, Fn fn, Js::PropertyValueInfo* info); + BOOL SetPropertyTrap(Var receiver, SetPropertyTrapKind setPropertyTrapKind, JavascriptString * propertyString, Var newValue, ScriptContext * requestContext, PropertyOperationFlags propertyOperationFlags, Js::PropertyValueInfo* info); + + void * GetSlotData() const; + void SetSlotData(void * data); + int GetInlineSlotSize() const; + void* GetInlineSlots() const; + + virtual PropertyId GetPropertyId(PropertyIndex index) override { if (!EnsureInitialized(GetScriptContext())) { return Constants::NoProperty; } return DynamicObject::GetPropertyId(index); } + virtual PropertyId GetPropertyId(BigPropertyIndex index) override { if (!EnsureInitialized(GetScriptContext())) { return Constants::NoProperty; } return DynamicObject::GetPropertyId(index); } + virtual BOOL HasOwnProperty(PropertyId propertyId) override { if (!EnsureInitialized(GetScriptContext())) { return FALSE; } return DynamicObject::HasOwnProperty(propertyId); } + virtual DescriptorFlags GetSetter(PropertyId propertyId, Var *setterValue, PropertyValueInfo* info, ScriptContext* requestContext) override { if (!EnsureInitialized(GetScriptContext())) { return None; } return DynamicObject::GetSetter(propertyId, setterValue, info, requestContext); } + virtual DescriptorFlags GetSetter(JavascriptString* propertyNameString, Var *setterValue, PropertyValueInfo* info, ScriptContext* requestContext) override { if (!EnsureInitialized(GetScriptContext())) { return None; } return DynamicObject::GetSetter(propertyNameString, setterValue, info, requestContext); } + virtual BOOL SetPropertyWithAttributes(PropertyId propertyId, Var value, PropertyAttributes attributes, PropertyValueInfo* info, PropertyOperationFlags flags = PropertyOperation_None, SideEffects possibleSideEffects = SideEffects_Any) override { if (!EnsureInitialized(GetScriptContext())) { return FALSE; } return DynamicObject::SetPropertyWithAttributes(propertyId, value, attributes, info, flags, possibleSideEffects); } +#if ENABLE_FIXED_FIELDS + virtual BOOL IsFixedProperty(PropertyId propertyId) override { if (!EnsureInitialized(GetScriptContext())) { return FALSE; } return DynamicObject::IsFixedProperty(propertyId); } +#endif + virtual DescriptorFlags GetItemSetter(uint32 index, Var* setterValue, ScriptContext* requestContext) override { if (!EnsureInitialized(GetScriptContext())) { return None; } return DynamicObject::GetItemSetter(index, setterValue, requestContext); } + virtual BOOL ToPrimitive(JavascriptHint hint, Var* result, ScriptContext * requestContext) override { if (!EnsureInitialized(GetScriptContext())) { return FALSE; } return DynamicObject::ToPrimitive(hint, result, requestContext); } + virtual BOOL SetAccessors(PropertyId propertyId, Var getter, Var setter, PropertyOperationFlags flags = PropertyOperation_None) override { if (!EnsureInitialized(GetScriptContext())) { return FALSE; } return DynamicObject::SetAccessors(propertyId, getter, setter, flags); } + _Check_return_ _Success_(return) virtual BOOL GetAccessors(PropertyId propertyId, _Outptr_result_maybenull_ Var* getter, _Outptr_result_maybenull_ Var* setter, ScriptContext* requestContext) override { if (!EnsureInitialized(GetScriptContext())) { return FALSE; } return DynamicObject::GetAccessors(propertyId, getter, setter, requestContext); } + virtual BOOL IsWritable(PropertyId propertyId) override { if (!EnsureInitialized(GetScriptContext())) { return FALSE; } return DynamicObject::IsWritable(propertyId); } + virtual BOOL IsConfigurable(PropertyId propertyId) override { if (!EnsureInitialized(GetScriptContext())) { return FALSE; } return DynamicObject::IsConfigurable(propertyId); } + virtual BOOL IsEnumerable(PropertyId propertyId) override { if (!EnsureInitialized(GetScriptContext())) { return FALSE; } return DynamicObject::IsEnumerable(propertyId); } + virtual BOOL SetEnumerable(PropertyId propertyId, BOOL value) override { if (!EnsureInitialized(GetScriptContext())) { return FALSE; } return DynamicObject::SetEnumerable(propertyId, value); } + virtual BOOL SetWritable(PropertyId propertyId, BOOL value) override { if (!EnsureInitialized(GetScriptContext())) { return FALSE; } return DynamicObject::SetWritable(propertyId, value); } + virtual BOOL SetConfigurable(PropertyId propertyId, BOOL value) override { if (!EnsureInitialized(GetScriptContext())) { return FALSE; } return DynamicObject::SetConfigurable(propertyId, value); } + virtual BOOL SetAttributes(PropertyId propertyId, PropertyAttributes attributes) override { if (!EnsureInitialized(GetScriptContext())) { return FALSE; } return DynamicObject::SetAttributes(propertyId, attributes); } + virtual BOOL Seal() override { if (!EnsureInitialized(GetScriptContext())) { return FALSE; } return DynamicObject::Seal(); } + virtual BOOL Freeze() override { if (!EnsureInitialized(GetScriptContext())) { return FALSE; } return DynamicObject::Freeze(); } + +#if DBG + virtual bool CanStorePropertyValueDirectly(PropertyId propertyId, bool allowLetConst) override { if (!EnsureInitialized(GetScriptContext())) { return FALSE; } return DynamicObject::CanStorePropertyValueDirectly(propertyId, allowLetConst); } +#endif + + virtual void RemoveFromPrototype(ScriptContext * requestContext, bool * allProtoCachesInvalidated) override { if (!EnsureInitialized(GetScriptContext())) { return; } return DynamicObject::RemoveFromPrototype(requestContext, allProtoCachesInvalidated); } + virtual void AddToPrototype(ScriptContext * requestContext, bool * allProtoCachesInvalidated) override { if (!EnsureInitialized(GetScriptContext())) { return; } return DynamicObject::AddToPrototype(requestContext, allProtoCachesInvalidated); } + virtual bool ClearProtoCachesWereInvalidated() override { if (!EnsureInitialized(GetScriptContext())) { return FALSE; } return DynamicObject::ClearProtoCachesWereInvalidated(); } + private: + enum class SlotType { + Inline, + External + }; + + Field(bool) initialized = false; + Field(SlotType) slotType; + union SlotInfo + { + Field(void *) slot; + Field(uint) inlineSlotSize; + SlotInfo() + { + memset(this, 0, sizeof(SlotInfo)); + } + }; + Field(SlotInfo) u; + + Var GetValueFromDescriptor(Var instance, PropertyDescriptor propertyDescriptor, ScriptContext * requestContext); + Var GetName(ScriptContext* requestContext, PropertyId propertyId, Var * isPropertyNameNumeric, Var * propertyNameNumericValue); + + BOOL GetPropertyDescriptorTrap(PropertyId propertyId, PropertyDescriptor * resultDescriptor, ScriptContext * requestContext); + + template + BOOL GetPropertyTrap(Var instance, PropertyDescriptor * propertyDescriptor, Fn fn, GetPropertyNameFunc getPropertyName, ScriptContext * requestContext, Js::PropertyValueInfo* info); + + template + BOOL HasPropertyTrap(Fn fn, GetPropertyNameFunc getPropertyName, Js::PropertyValueInfo* info); + + template + void GetOwnPropertyKeysHelper(ScriptContext * scriptContext, RecyclableObject * trapResultArray, uint32 len, JavascriptArray * trapResult, + JsUtil::BaseDictionary& targetToTrapResultMap, Fn fn) + { + Var element = nullptr; + const PropertyRecord* propertyRecord; + uint32 trapResultIndex = 0; + PropertyId propertyId; + for (uint32 i = 0; i < len; i++) + { + if (!JavascriptOperators::GetItem(trapResultArray, i, &element, scriptContext) || // missing + !(VarIs(element) || VarIs(element))) // neither String nor Symbol + { + JavascriptError::ThrowTypeError(scriptContext, JSERR_InconsistentTrapResult, _u("ownKeys")); + } + + JavascriptConversion::ToPropertyKey(element, scriptContext, &propertyRecord, nullptr); + propertyId = propertyRecord->GetPropertyId(); + + if (propertyId != Constants::NoProperty) + { + if (targetToTrapResultMap.AddNew(propertyId, true) == -1) + { + JavascriptError::ThrowTypeError(scriptContext, JSERR_InconsistentTrapResult); + } + } + + if (fn(propertyRecord)) + { + trapResult->DirectSetItemAt(trapResultIndex++, element); + } + } + } + +#if ENABLE_TTD + public: + virtual TTD::NSSnapObjects::SnapObjectType GetSnapTag_TTD() const override; + virtual void ExtractSnapObjectDataInto(TTD::NSSnapObjects::SnapObject* objData, TTD::SlabAllocator& alloc) override; +#endif + }; + + template <> inline bool VarIsImpl(RecyclableObject* obj) + { + return (VirtualTableInfo::HasVirtualTable(obj)) || + (VirtualTableInfo>::HasVirtualTable(obj)); + } + +} + +#ifndef __APPLE__ // TODO: for some reason on OSX builds this initialization happens before PAL initialization +AUTO_REGISTER_RECYCLER_OBJECT_DUMPER(Js::CustomExternalWrapperType, &Js::Type::DumpObjectFunction); +AUTO_REGISTER_RECYCLER_OBJECT_DUMPER(Js::CustomExternalWrapperObject, &Js::RecyclableObject::DumpObjectFunction); +#endif diff --git a/lib/Runtime/Library/DataView.cpp b/lib/Runtime/Library/DataView.cpp index 0beca76bd35..a4d06debb97 100644 --- a/lib/Runtime/Library/DataView.cpp +++ b/lib/Runtime/Library/DataView.cpp @@ -37,34 +37,13 @@ namespace Js JavascriptError::ThrowTypeError(scriptContext, JSERR_DataView_NeedArgument, _u("buffer")); } - // Currently the only reason we check for an external object is projection related, so it remains under conditional compilation. - RecyclableObject* jsArraySource = NULL; - if (JavascriptOperators::IsObject(args[1]) && JavascriptConversion::ToObject(args[1], scriptContext, &jsArraySource)) - { - ArrayBuffer *ab = nullptr; - HRESULT hr = scriptContext->GetHostScriptContext()->ArrayBufferFromExternalObject(jsArraySource, &ab); - switch (hr) - { - case S_OK: - case S_FALSE: - arrayBuffer = ab; - // Both of these cases will be handled by the arrayBuffer null check. - break; - - default: - // Any FAILURE HRESULT or unexpected HRESULT. - JavascriptError::ThrowTypeError(scriptContext, JSERR_DataView_InvalidArgument, _u("buffer")); - break; - } - } - //2. If Type(buffer) is not Object, throw a TypeError exception. //3. If buffer does not have an [[ArrayBufferData]] internal slot, throw a TypeError exception. if (arrayBuffer == nullptr) { - if (ArrayBufferBase::Is(args[1])) + if (VarIs(args[1])) { - arrayBuffer = ArrayBufferBase::FromVar(args[1]); + arrayBuffer = VarTo(args[1]); } else { @@ -100,17 +79,17 @@ namespace Js // a. Let viewByteLength be ToIndex(byteLength). // b. If offset + viewByteLength > bufferByteLength, throw a RangeError exception. if (args.Info.Count > 3 && !JavascriptOperators::IsUndefinedObject(args[3])) - { - Var thirdArgument = args[3]; - mappedLength = ArrayBuffer::ToIndex(thirdArgument, JSERR_ArrayLengthConstructIncorrect, scriptContext, ArrayBuffer::MaxArrayBufferLength, false); - uint32 viewRange = mappedLength + offset; + { + Var thirdArgument = args[3]; + mappedLength = ArrayBuffer::ToIndex(thirdArgument, JSERR_ArrayLengthConstructIncorrect, scriptContext, ArrayBuffer::MaxArrayBufferLength, false); + uint32 viewRange = mappedLength + offset; - if (viewRange > byteLength || viewRange < mappedLength) // overflow indicates out-of-range - { - JavascriptError::ThrowRangeError( - scriptContext, JSERR_DataView_InvalidArgument, _u("byteLength")); - } + if (viewRange > byteLength || viewRange < mappedLength) // overflow indicates out-of-range + { + JavascriptError::ThrowRangeError( + scriptContext, JSERR_DataView_InvalidArgument, _u("byteLength")); } + } else { mappedLength = byteLength - offset; @@ -130,7 +109,7 @@ namespace Js //15. Return O. dataView = scriptContext->GetLibrary()->CreateDataView(arrayBuffer, offset, mappedLength); return isCtorSuperCall ? - JavascriptOperators::OrdinaryCreateFromConstructor(RecyclableObject::FromVar(newTarget), dataView, nullptr, scriptContext) : + JavascriptOperators::OrdinaryCreateFromConstructor(VarTo(newTarget), dataView, nullptr, scriptContext) : dataView; } @@ -141,11 +120,6 @@ namespace Js buffer = arrayBuffer->GetBuffer() + byteoffset; } - BOOL DataView::Is(Var aValue) - { - return JavascriptOperators::GetTypeId(aValue) == TypeIds_DataView; - } - Var DataView::EntryGetInt8(RecyclableObject* function, CallInfo callInfo, ...) { PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); @@ -155,7 +129,7 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !DataView::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDataView); } @@ -164,7 +138,7 @@ namespace Js JavascriptError::ThrowTypeError(scriptContext, JSERR_DataView_NeedArgument, _u("offset")); } - DataView* dataView = DataView::FromVar(args[0]); + DataView* dataView = VarTo(args[0]); return dataView->template GetValue(args[1], _u("DataView.prototype.GetInt8"), FALSE); } @@ -177,16 +151,16 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !DataView::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDataView); } if (args.Info.Count < 2) { - JavascriptError::ThrowTypeError(scriptContext, JSERR_DataView_NeedArgument, _u("offset")); + JavascriptError::ThrowTypeError(scriptContext, JSERR_DataView_NeedArgument, _u("offset")); } - DataView* dataView = DataView::FromVar(args[0]); + DataView* dataView = VarTo(args[0]); return dataView->GetValue(args[1], _u("DataView.prototype.GetUint8"), FALSE); } @@ -200,7 +174,7 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !DataView::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDataView); } @@ -213,7 +187,7 @@ namespace Js isLittleEndian = JavascriptConversion::ToBoolean(args[2], scriptContext); } - DataView* dataView = DataView::FromVar(args[0]); + DataView* dataView = VarTo(args[0]); return dataView->GetValue(args[1], _u("DataView.prototype.GetInt16"), isLittleEndian); } @@ -227,20 +201,20 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !DataView::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDataView); } if (args.Info.Count < 2) { - JavascriptError::ThrowTypeError(scriptContext, JSERR_DataView_NeedArgument, _u("offset")); + JavascriptError::ThrowTypeError(scriptContext, JSERR_DataView_NeedArgument, _u("offset")); } if (args.Info.Count > 2) { isLittleEndian = JavascriptConversion::ToBoolean(args[2], scriptContext); } - DataView* dataView = DataView::FromVar(args[0]); + DataView* dataView = VarTo(args[0]); return dataView->template GetValue(args[1], _u("DataView.prototype.GetUint16"), isLittleEndian); } @@ -254,20 +228,20 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !DataView::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDataView); } if (args.Info.Count < 2) { - JavascriptError::ThrowTypeError(scriptContext, JSERR_DataView_NeedArgument, _u("offset")); + JavascriptError::ThrowTypeError(scriptContext, JSERR_DataView_NeedArgument, _u("offset")); } if (args.Info.Count > 2) { isLittleEndian = JavascriptConversion::ToBoolean(args[2], scriptContext); } - DataView* dataView = DataView::FromVar(args[0]); + DataView* dataView = VarTo(args[0]); return dataView->GetValue(args[1], _u("DataView.prototype.GetUint32"), isLittleEndian); } @@ -281,7 +255,7 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !DataView::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDataView); } @@ -294,7 +268,7 @@ namespace Js isLittleEndian = JavascriptConversion::ToBoolean(args[2], scriptContext); } - DataView* dataView = DataView::FromVar(args[0]); + DataView* dataView = VarTo(args[0]); return dataView->GetValue(args[1], _u("DataView.prototype.GetInt32"), isLittleEndian); } @@ -308,20 +282,20 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !DataView::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDataView); } if (args.Info.Count < 2) { - JavascriptError::ThrowTypeError(scriptContext, JSERR_DataView_NeedArgument, _u("offset")); + JavascriptError::ThrowTypeError(scriptContext, JSERR_DataView_NeedArgument, _u("offset")); } if (args.Info.Count > 2) { isLittleEndian = JavascriptConversion::ToBoolean(args[2], scriptContext); } - DataView* dataView = DataView::FromVar(args[0]); + DataView* dataView = VarTo(args[0]); return dataView->GetValueWithCheck(args[1], _u("DataView.prototype.GetFloat32"), isLittleEndian); } @@ -335,21 +309,21 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !DataView::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDataView); } if (args.Info.Count < 2) { - JavascriptError::ThrowTypeError(scriptContext, JSERR_DataView_NeedArgument, _u("offset")); + JavascriptError::ThrowTypeError(scriptContext, JSERR_DataView_NeedArgument, _u("offset")); } if (args.Info.Count > 2) { isLittleEndian = JavascriptConversion::ToBoolean(args[2], scriptContext); } - DataView* dataView = DataView::FromVar(args[0]); - return dataView->GetValueWithCheck(args[1], _u("DataView.prototype.GetFloat64"), isLittleEndian); + DataView* dataView = VarTo(args[0]); + return dataView->GetValueWithCheck(args[1], _u("DataView.prototype.GetFloat64"), isLittleEndian); } Var DataView::EntrySetInt8(RecyclableObject* function, CallInfo callInfo, ...) @@ -361,16 +335,29 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !DataView::Is(args[0])) + int8 value = 0; + switch (args.Info.Count) { + case 0: JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDataView); + break; + case 1: + JavascriptError::ThrowTypeError(scriptContext, JSERR_DataView_NeedArgument, _u("offset")); + break; + default: + if (!VarIs(args[0])) + { + JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDataView); + break; + } + if (args.Info.Count > 2) + { + value = JavascriptConversion::ToInt8(args[2], scriptContext); + } + break; } - if (args.Info.Count < 3) - { - JavascriptError::ThrowTypeError(scriptContext, JSERR_DataView_NeedArgument, _u("offset or value")); - } - DataView* dataView = DataView::FromVar(args[0]); - int8 value = JavascriptConversion::ToInt8(args[2], scriptContext); + + DataView* dataView = VarTo(args[0]); dataView->SetValue(args[1], value, _u("DataView.prototype.SetInt8")); return scriptContext->GetLibrary()->GetUndefined(); } @@ -384,16 +371,29 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !DataView::Is(args[0])) + uint8 value = 0; + switch (args.Info.Count) { + case 0: JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDataView); + break; + case 1: + JavascriptError::ThrowTypeError(scriptContext, JSERR_DataView_NeedArgument, _u("offset")); + break; + default: + if (!VarIs(args[0])) + { + JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDataView); + break; + } + if (args.Info.Count > 2) + { + value = JavascriptConversion::ToUInt8(args[2], scriptContext); + } + break; } - if (args.Info.Count < 3) - { - JavascriptError::ThrowTypeError(scriptContext, JSERR_DataView_NeedArgument, _u("offset or value")); - } - DataView* dataView = DataView::FromVar(args[0]); - uint8 value = JavascriptConversion::ToUInt8(args[2], scriptContext); + + DataView* dataView = VarTo(args[0]); dataView->SetValue(args[1], value, _u("DataView.prototype.SetUint8")); return scriptContext->GetLibrary()->GetUndefined(); } @@ -404,24 +404,40 @@ namespace Js ARGUMENTS(args, callInfo); ScriptContext* scriptContext = function->GetScriptContext(); - BOOL isLittleEndian = FALSE; Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !DataView::Is(args[0])) + BOOL isLittleEndian = FALSE; + int16 value = 0; + switch (args.Info.Count) { + case 0: JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDataView); + break; + case 1: + JavascriptError::ThrowTypeError(scriptContext, JSERR_DataView_NeedArgument, _u("offset")); + break; + default: + if (!VarIs(args[0])) + { + JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDataView); + break; + } + if (args.Info.Count > 2) + { + if (!JavascriptOperators::IsUndefined(args[2])) + { + value = JavascriptConversion::ToInt16(args[2], scriptContext); + } + if (args.Info.Count > 3) + { + isLittleEndian = JavascriptConversion::ToBoolean(args[3], scriptContext); + } + } + break; } - if (args.Info.Count < 3) - { - JavascriptError::ThrowTypeError(scriptContext, JSERR_DataView_NeedArgument, _u("offset or value")); - } - DataView* dataView = DataView::FromVar(args[0]); - int16 value = JavascriptConversion::ToInt16(args[2], scriptContext); - if (args.Info.Count > 3) - { - isLittleEndian = JavascriptConversion::ToBoolean(args[3], scriptContext); - } + + DataView* dataView = VarTo(args[0]); dataView->SetValue(args[1], value, _u("DataView.prototype.SetInt16"), isLittleEndian); return scriptContext->GetLibrary()->GetUndefined(); } @@ -432,24 +448,40 @@ namespace Js ARGUMENTS(args, callInfo); ScriptContext* scriptContext = function->GetScriptContext(); - BOOL isLittleEndian = FALSE; Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !DataView::Is(args[0])) + BOOL isLittleEndian = FALSE; + uint16 value = 0; + switch (args.Info.Count) { + case 0: JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDataView); + break; + case 1: + JavascriptError::ThrowTypeError(scriptContext, JSERR_DataView_NeedArgument, _u("offset")); + break; + default: + if (!VarIs(args[0])) + { + JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDataView); + break; + } + if (args.Info.Count > 2) + { + if (!JavascriptOperators::IsUndefined(args[2])) + { + value = JavascriptConversion::ToUInt16(args[2], scriptContext); + } + if (args.Info.Count > 3) + { + isLittleEndian = JavascriptConversion::ToBoolean(args[3], scriptContext); + } + } + break; } - if (args.Info.Count < 3) - { - JavascriptError::ThrowTypeError(scriptContext, JSERR_DataView_NeedArgument, _u("offset or value")); - } - DataView* dataView = DataView::FromVar(args[0]); - uint16 value = JavascriptConversion::ToUInt16(args[2], scriptContext); - if (args.Info.Count > 3) - { - isLittleEndian = JavascriptConversion::ToBoolean(args[3], scriptContext); - } + + DataView* dataView = VarTo(args[0]); dataView->SetValue(args[1], value, _u("DataView.prototype.SetUint16"), isLittleEndian); return scriptContext->GetLibrary()->GetUndefined(); } @@ -460,24 +492,40 @@ namespace Js ARGUMENTS(args, callInfo); ScriptContext* scriptContext = function->GetScriptContext(); - BOOL isLittleEndian = FALSE; Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !DataView::Is(args[0])) + BOOL isLittleEndian = FALSE; + int32 value = 0; + switch (args.Info.Count) { + case 0: JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDataView); + break; + case 1: + JavascriptError::ThrowTypeError(scriptContext, JSERR_DataView_NeedArgument, _u("offset")); + break; + default: + if (!VarIs(args[0])) + { + JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDataView); + break; + } + if (args.Info.Count > 2) + { + if (!JavascriptOperators::IsUndefined(args[2])) + { + value = JavascriptConversion::ToInt32(args[2], scriptContext); + } + if (args.Info.Count > 3) + { + isLittleEndian = JavascriptConversion::ToBoolean(args[3], scriptContext); + } + } + break; } - if (args.Info.Count < 3) - { - JavascriptError::ThrowTypeError(scriptContext, JSERR_DataView_NeedArgument, _u("offset or value")); - } - DataView* dataView = DataView::FromVar(args[0]); - int32 value = JavascriptConversion::ToInt32(args[2], scriptContext); - if (args.Info.Count > 3) - { - isLittleEndian = JavascriptConversion::ToBoolean(args[3], scriptContext); - } + + DataView* dataView = VarTo(args[0]); dataView->SetValue(args[1], value, _u("DataView.prototype.SetInt32"), isLittleEndian); return scriptContext->GetLibrary()->GetUndefined(); } @@ -488,24 +536,40 @@ namespace Js ARGUMENTS(args, callInfo); ScriptContext* scriptContext = function->GetScriptContext(); - BOOL isLittleEndian = FALSE; Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !DataView::Is(args[0])) + BOOL isLittleEndian = FALSE; + uint32 value = 0; + switch (args.Info.Count) { + case 0: JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDataView); + break; + case 1: + JavascriptError::ThrowTypeError(scriptContext, JSERR_DataView_NeedArgument, _u("offset")); + break; + default: + if (!VarIs(args[0])) + { + JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDataView); + break; + } + if (args.Info.Count > 2) + { + if (!JavascriptOperators::IsUndefined(args[2])) + { + value = JavascriptConversion::ToUInt32(args[2], scriptContext); + } + if (args.Info.Count > 3) + { + isLittleEndian = JavascriptConversion::ToBoolean(args[3], scriptContext); + } + } + break; } - if (args.Info.Count < 3) - { - JavascriptError::ThrowTypeError(scriptContext, JSERR_DataView_NeedArgument, _u("offset or value")); - } - DataView* dataView = DataView::FromVar(args[0]); - uint32 value = JavascriptConversion::ToUInt32(args[2], scriptContext); - if (args.Info.Count > 3) - { - isLittleEndian = JavascriptConversion::ToBoolean(args[3], scriptContext); - } + + DataView* dataView = VarTo(args[0]); dataView->SetValue(args[1], value, _u("DataView.prototype.SetUint32"), isLittleEndian); return scriptContext->GetLibrary()->GetUndefined(); } @@ -516,24 +580,40 @@ namespace Js ARGUMENTS(args, callInfo); ScriptContext* scriptContext = function->GetScriptContext(); - BOOL isLittleEndian = FALSE; Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !DataView::Is(args[0])) - { - JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDataView, _u("offset or value")); - } - if (args.Info.Count < 3) - { - JavascriptError::ThrowTypeError(scriptContext, JSERR_DataView_NeedArgument); - } - DataView* dataView = DataView::FromVar(args[0]); - float value = JavascriptConversion::ToFloat(args[2], scriptContext); - if (args.Info.Count > 3) + BOOL isLittleEndian = FALSE; + float value = static_cast(JavascriptNumber::NaN); + switch (args.Info.Count) { - isLittleEndian = JavascriptConversion::ToBoolean(args[3], scriptContext); + case 0: + JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDataView); + break; + case 1: + JavascriptError::ThrowTypeError(scriptContext, JSERR_DataView_NeedArgument, _u("offset")); + break; + default: + if (!VarIs(args[0])) + { + JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDataView); + break; + } + if (args.Info.Count > 2) + { + if (!JavascriptOperators::IsUndefined(args[2])) + { + value = JavascriptConversion::ToFloat(args[2], scriptContext); + } + if (args.Info.Count > 3) + { + isLittleEndian = JavascriptConversion::ToBoolean(args[3], scriptContext); + } + } + break; } + + DataView* dataView = VarTo(args[0]); dataView->SetValue(args[1], value, _u("DataView.prototype.SetFloat32"), isLittleEndian); return scriptContext->GetLibrary()->GetUndefined(); } @@ -544,24 +624,40 @@ namespace Js ARGUMENTS(args, callInfo); ScriptContext* scriptContext = function->GetScriptContext(); - BOOL isLittleEndian = FALSE; Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !DataView::Is(args[0])) + BOOL isLittleEndian = FALSE; + double value = JavascriptNumber::NaN; + switch (args.Info.Count) { + case 0: JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDataView); + break; + case 1: + JavascriptError::ThrowTypeError(scriptContext, JSERR_DataView_NeedArgument, _u("offset")); + break; + default: + if (!VarIs(args[0])) + { + JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDataView); + break; + } + if (args.Info.Count > 2) + { + if (!JavascriptOperators::IsUndefined(args[2])) + { + value = JavascriptConversion::ToNumber(args[2], scriptContext); + } + if (args.Info.Count > 3) + { + isLittleEndian = JavascriptConversion::ToBoolean(args[3], scriptContext); + } + } + break; } - if (args.Info.Count < 3) - { - JavascriptError::ThrowTypeError(scriptContext, JSERR_DataView_NeedArgument, _u("offset or value")); - } - DataView* dataView = DataView::FromVar(args[0]); - double value = JavascriptConversion::ToNumber(args[2], scriptContext); - if (args.Info.Count > 3) - { - isLittleEndian = JavascriptConversion::ToBoolean(args[3], scriptContext); - } + + DataView* dataView = VarTo(args[0]); dataView->SetValue(args[1], value, _u("DataView.prototype.SetFloat64"), isLittleEndian); return scriptContext->GetLibrary()->GetUndefined(); } @@ -575,12 +671,12 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !DataView::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDataView); } - DataView* dataView = DataView::FromVar(args[0]); + DataView* dataView = VarTo(args[0]); ArrayBufferBase* arrayBuffer = dataView->GetArrayBuffer(); if (arrayBuffer == nullptr) @@ -599,12 +695,12 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !DataView::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDataView); } - DataView* dataView = DataView::FromVar(args[0]); + DataView* dataView = VarTo(args[0]); ArrayBufferBase* arrayBuffer = dataView->GetArrayBuffer(); if (arrayBuffer == nullptr) @@ -628,12 +724,12 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !DataView::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDataView); } - DataView* dataView = DataView::FromVar(args[0]); + DataView* dataView = VarTo(args[0]); ArrayBufferBase* arrayBuffer = dataView->GetArrayBuffer(); if (arrayBuffer == nullptr) diff --git a/lib/Runtime/Library/DataView.h b/lib/Runtime/Library/DataView.h index 330c1813c14..bcec94c788d 100644 --- a/lib/Runtime/Library/DataView.h +++ b/lib/Runtime/Library/DataView.h @@ -41,20 +41,6 @@ namespace Js DataView(ArrayBufferBase* arrayBuffer, uint32 byteOffset, uint32 mappedLength, DynamicType* type); - static BOOL Is(Var aValue); - - static inline DataView* FromVar(Var aValue) - { - AssertOrFailFast(DataView::Is(aValue)); - return static_cast(aValue); - } - - static inline DataView* UnsafeFromVar(Var aValue) - { - Assert(DataView::Is(aValue)); - return static_cast(aValue); - } - uint32 GetByteOffset() const { return byteOffset; } void ClearLengthAndBufferOnDetach(); @@ -216,4 +202,9 @@ namespace Js Field(BYTE*) buffer; // beginning of buffer }; + + template <> inline bool VarIsImpl(RecyclableObject* obj) + { + return JavascriptOperators::GetTypeId(obj) == TypeIds_DataView; + } } diff --git a/lib/Runtime/Library/DateImplementation.cpp b/lib/Runtime/Library/DateImplementation.cpp index c62746d0787..8249a382d17 100644 --- a/lib/Runtime/Library/DateImplementation.cpp +++ b/lib/Runtime/Library/DateImplementation.cpp @@ -346,24 +346,6 @@ namespace Js { m_tvUtc = GetTvUtc(tv, requestContext); } - JavascriptString* - DateImplementation::ConvertVariantDateToString(double dbl, ScriptContext* scriptContext) - { - Js::DateImplementation::TZD tzd; - DateTime::YMD ymd; - double tv = Js::DateImplementation::GetTvUtc(Js::DateImplementation::JsLocalTimeFromVarDate(dbl), scriptContext); - - tv = Js::DateImplementation::GetTvLcl(tv, scriptContext, &tzd); - if (Js::JavascriptNumber::IsNan(tv)) - { - return JavascriptNumber::ToStringNan(scriptContext); - } - - Js::DateImplementation::GetYmdFromTv(tv, &ymd); - - return DateImplementation::GetDateDefaultString(&ymd, &tzd, 0, scriptContext); - } - JavascriptString* DateImplementation::GetDateDefaultString(DateTime::YMD *pymd, TZD *ptzd,DateTimeFlag noDateTime,ScriptContext* scriptContext) { @@ -1118,19 +1100,13 @@ namespace Js { continue; } case '+': - { - if (lwNil != lwTime) - { - ss = ssAddOffset; - } - continue; - } case '-': { - if (lwNil != lwTime) + if (lwNil == lwTime) { - ss = ssSubOffset; + goto LError; } + ss = (ch == '+') ? ssAddOffset : ssSubOffset; continue; } } @@ -1266,13 +1242,23 @@ namespace Js { goto LError; } - for (lwT = ch - '0'; !FBig(*pch) && isdigit(*pch); pch++) + for (lwT = ch - '0'; ; pch++) { + // for time zone offset HH:mm, we already got HH so skip ':' and grab mm + if (((ss == ssAddOffset) || (ss == ssSubOffset)) && (*pch == ':')) + { + continue; + } + if (FBig(*pch) || !isdigit(*pch)) + { + break; + } // to avoid overflow if (pch - pchBase > 6) { goto LError; } + // convert string to number, e.g. 07:30 -> 730 lwT = lwT * 10 + *pch - '0'; } @@ -1290,8 +1276,9 @@ namespace Js { { AssertMsg(isNextFieldDateNegativeVersion5 == false, "isNextFieldDateNegativeVersion5 == false"); - if (lwNil != lwOffset) + if (lwNil != lwOffset || lwNil == lwTime) goto LError; + // convert into minutes, e.g. 730 -> 7*60+30 lwOffset = lwT < 24 ? lwT * 60 : (lwT % 100) + (lwT / 100) * 60; if (ssSubOffset == ss) @@ -1591,49 +1578,6 @@ namespace Js { return true; } - //------------------------------------ - //Convert a utc time to a variant date. - //------------------------------------ - double DateImplementation::VarDateFromJsUtcTime(double dbl, ScriptContext * scriptContext) - { - Assert(scriptContext); - - // Convert to local time. - dbl = Js::DateImplementation::GetTvLcl(dbl, scriptContext); - if (!Js::NumberUtilities::IsFinite(dbl)) - return Js::JavascriptNumber::NaN; - - // Convert to an automation date. - dbl = dbl / 86400000 + g_kdblJanuary1st1970; - - // dbl is the actual number of days since 0000h 12/30/1899. - // Convert this to a true Automation-style date. - - if (dbl < 0.0) - { - // This works around a bug in OLE Automation. - // If a date is negative _and_ less than 500 - // milliseconds before midnight then Automation will - // "round" it to two days earlier. To work around this - // bug, round dates just before midnight to midnight. - double dblT; - - dbl = 2.0 * floor(dbl) - dbl; - dblT = dbl - floor(dbl); - if (dblT <= kdblHalfSecond && 0.0 < dblT) - dbl = ceil(dbl) + 1.0; - } - - return dbl; - } - - double DateImplementation::JsUtcTimeFromVarDate(double dbl, ScriptContext * scriptContext) - { - Assert(scriptContext); - - return GetTvUtc(JsLocalTimeFromVarDate(dbl), scriptContext); - } - double DateImplementation::DateFncUTC(ScriptContext* scriptContext, Arguments args) { const int kcvarMax = 7; diff --git a/lib/Runtime/Library/DateImplementation.h b/lib/Runtime/Library/DateImplementation.h index 0a6f2093c28..8a29e5b72a6 100644 --- a/lib/Runtime/Library/DateImplementation.h +++ b/lib/Runtime/Library/DateImplementation.h @@ -14,7 +14,6 @@ namespace Js { public DateUtilities { friend class JavascriptDate; - friend class JavascriptVariantDate; typedef struct tm TM; static const short kpstDstRuleChangeYear = 2007; @@ -91,13 +90,6 @@ namespace Js { double &retVal, ScriptContext * const scriptContext); - // Used for VT_DATE conversions - //------------------------------------ - //Convert a utc time to a variant date. - //------------------------------------ - static double VarDateFromJsUtcTime(double dbl, ScriptContext * scriptContext); - static double JsUtcTimeFromVarDate(double dbl, ScriptContext *scriptContext); - void SetTvUtc(double tv); bool IsModified() { return m_modified; } void ClearModified() { m_modified = false; } @@ -138,7 +130,6 @@ namespace Js { // ISO format. static bool TryParseIsoString(const char16 *const str, const size_t length, double &timeValue, ScriptContext *scriptContext); - static JavascriptString* ConvertVariantDateToString(double variantDateDouble, ScriptContext* scriptContext); static JavascriptString* GetDateDefaultString(DateTime::YMD *pymd, TZD *ptzd,DateTimeFlag noDateTime,ScriptContext* scriptContext); static JavascriptString* GetDateGmtString(DateTime::YMD *pymd,ScriptContext* scriptContext); #ifdef ENABLE_GLOBALIZATION // todo-xplat: Implement this ICU? @@ -266,9 +257,6 @@ namespace Js { template StringBuilder* GetDiagValueString(ScriptContext* scriptContext, NewStringBuilderFunc newStringBuilder); - template - static StringBuilder* ConvertVariantDateToString(double dbl, ScriptContext* scriptContext, NewStringBuilderFunc newStringBuilder); - template static StringBuilder* GetDateDefaultString(DateTime::YMD *pymd, TZD *ptzd, DateTimeFlag noDateTime, ScriptContext* scriptContext, NewStringBuilderFunc newStringBuilder); @@ -363,25 +351,6 @@ namespace Js { return GetDateDefaultString(&m_ymdLcl, &m_tzd, DateTimeFlag::None, scriptContext, newStringBuilder); } - template - StringBuilder* DateImplementation::ConvertVariantDateToString(double dbl, ScriptContext* scriptContext, NewStringBuilderFunc newStringBuilder) - { - TZD tzd; - DateTime::YMD ymd; - double tv = GetTvUtc(JsLocalTimeFromVarDate(dbl), scriptContext); - - tv = GetTvLcl(tv, scriptContext, &tzd); - if (JavascriptNumber::IsNan(tv)) - { - StringBuilder* bs = newStringBuilder(0); - bs->Append(JS_DISPLAY_STRING_NAN); - return bs; - } - - GetYmdFromTv(tv, &ymd); - return GetDateDefaultString(&ymd, &tzd, DateTimeFlag::None, scriptContext, newStringBuilder); - } - const auto ConvertUInt32ToString_ZeroPad_4 = [](const uint32 value, char16 *const buffer, const CharCount charCapacity) { Assert(charCapacity >= 4); diff --git a/lib/Runtime/Library/DelayFreeArrayBufferHelper.h b/lib/Runtime/Library/DelayFreeArrayBufferHelper.h index 72218cc9062..b96971d03b5 100644 --- a/lib/Runtime/Library/DelayFreeArrayBufferHelper.h +++ b/lib/Runtime/Library/DelayFreeArrayBufferHelper.h @@ -93,10 +93,10 @@ namespace Js template class ArrayBufferContentForDelayedFree : public ArrayBufferContentForDelayedFreeBase { - FreeFN* freeFunction; + FreeFN freeFunction; public: - ArrayBufferContentForDelayedFree(RefCountedBuffer *content, uint32 len, Recycler *r, FreeFN * freeFunction) + ArrayBufferContentForDelayedFree(RefCountedBuffer *content, uint32 len, Recycler *r, FreeFN freeFunction) : ArrayBufferContentForDelayedFreeBase( content, len, r), freeFunction(freeFunction) {} diff --git a/lib/Runtime/Library/ES5Array.cpp b/lib/Runtime/Library/ES5Array.cpp index fa978be3af7..418a741d45f 100644 --- a/lib/Runtime/Library/ES5Array.cpp +++ b/lib/Runtime/Library/ES5Array.cpp @@ -13,23 +13,6 @@ namespace Js { } - bool ES5Array::Is(Var instance) - { - return JavascriptOperators::GetTypeId(instance) == TypeIds_ES5Array; - } - - ES5Array* ES5Array::FromVar(Var instance) - { - AssertOrFailFast(Is(instance)); - return static_cast(instance); - } - - ES5Array* ES5Array::UnsafeFromVar(Var instance) - { - Assert(Is(instance)); - return static_cast(instance); - } - DynamicType* ES5Array::DuplicateType() { return RecyclerNew(GetScriptContext()->GetRecycler(), ES5ArrayType, this->GetDynamicType()); diff --git a/lib/Runtime/Library/ES5Array.h b/lib/Runtime/Library/ES5Array.h index 9cf92234808..7f5baf39ed2 100644 --- a/lib/Runtime/Library/ES5Array.h +++ b/lib/Runtime/Library/ES5Array.h @@ -39,9 +39,6 @@ namespace Js bool GetSetterBuiltIns(PropertyId propertyId, PropertyValueInfo* info, DescriptorFlags* result); public: - static bool Is(Var instance); - static ES5Array* FromVar(Var instance); - static ES5Array* UnsafeFromVar(Var instance); static uint32 ToLengthValue(Var value, ScriptContext* scriptContext); bool IsLengthWritable() const; @@ -104,5 +101,10 @@ namespace Js virtual void ExtractSnapObjectDataInto(TTD::NSSnapObjects::SnapObject* objData, TTD::SlabAllocator& alloc) override; #endif }; + + template <> inline bool VarIsImpl(RecyclableObject* instance) + { + return JavascriptOperators::GetTypeId(instance) == TypeIds_ES5Array; + } } AUTO_REGISTER_RECYCLER_OBJECT_DUMPER(Js::ES5Array, &Js::RecyclableObject::DumpObjectFunction); diff --git a/lib/Runtime/Library/ES5ArrayIndexEnumerator.h b/lib/Runtime/Library/ES5ArrayIndexEnumerator.h index 138c9a76c29..1d0e2f39b8c 100644 --- a/lib/Runtime/Library/ES5ArrayIndexEnumerator.h +++ b/lib/Runtime/Library/ES5ArrayIndexEnumerator.h @@ -18,7 +18,7 @@ namespace Js DEFINE_VTABLE_CTOR(ES5ArrayIndexEnumerator, JavascriptArrayIndexEnumeratorBase); private: - ES5Array* GetArray() const { return ES5Array::FromVar(arrayObject); } + ES5Array* GetArray() const { return VarTo(arrayObject); } public: ES5ArrayIndexEnumerator(ES5Array* arrayObject, EnumeratorFlags flags, ScriptContext* scriptContext); diff --git a/lib/Runtime/Library/EngineInterfaceObject.cpp b/lib/Runtime/Library/EngineInterfaceObject.cpp index 810904ebc61..106bb4eba16 100644 --- a/lib/Runtime/Library/EngineInterfaceObject.cpp +++ b/lib/Runtime/Library/EngineInterfaceObject.cpp @@ -4,7 +4,7 @@ //------------------------------------------------------------------------------------------------------- #include "RuntimeLibraryPch.h" -#if defined(ENABLE_INTL_OBJECT) || defined(ENABLE_JS_BUILTINS) || defined(ENABLE_PROJECTION) +#if defined(ENABLE_INTL_OBJECT) || defined(ENABLE_JS_BUILTINS) #include "errstr.h" #include "Library/EngineInterfaceObject.h" @@ -61,7 +61,7 @@ GetPropertyFrom(obj, Js::PropertyIds::builtInPropID) \ #define GetTypedPropertyBuiltInFrom(obj, builtInPropID, Type) \ - (GetPropertyFrom(obj, Js::PropertyIds::builtInPropID) && Type::Is(propertyValue)) \ + (GetPropertyFrom(obj, Js::PropertyIds::builtInPropID) && VarIs(propertyValue)) \ #define HasPropertyOn(obj, propID) \ Js::JavascriptOperators::HasProperty(obj, propID) \ @@ -101,37 +101,11 @@ namespace Js } } - NoProfileFunctionInfo EngineInterfaceObject::EntryInfo::GetErrorMessage(FORCE_NO_WRITE_BARRIER_TAG(EngineInterfaceObject::Entry_GetErrorMessage)); - NoProfileFunctionInfo EngineInterfaceObject::EntryInfo::LogDebugMessage(FORCE_NO_WRITE_BARRIER_TAG(EngineInterfaceObject::Entry_LogDebugMessage)); - NoProfileFunctionInfo EngineInterfaceObject::EntryInfo::TagPublicLibraryCode(FORCE_NO_WRITE_BARRIER_TAG(EngineInterfaceObject::Entry_TagPublicLibraryCode)); - NoProfileFunctionInfo EngineInterfaceObject::EntryInfo::SetPrototype(FORCE_NO_WRITE_BARRIER_TAG(EngineInterfaceObject::Entry_SetPrototype)); - NoProfileFunctionInfo EngineInterfaceObject::EntryInfo::GetArrayLength(FORCE_NO_WRITE_BARRIER_TAG(EngineInterfaceObject::Entry_GetArrayLength)); - NoProfileFunctionInfo EngineInterfaceObject::EntryInfo::RegexMatch(FORCE_NO_WRITE_BARRIER_TAG(EngineInterfaceObject::Entry_RegexMatch)); - NoProfileFunctionInfo EngineInterfaceObject::EntryInfo::CallInstanceFunction(FORCE_NO_WRITE_BARRIER_TAG(EngineInterfaceObject::Entry_CallInstanceFunction)); - -#ifndef GlobalBuiltIn -#define GlobalBuiltIn(global, method) \ - NoProfileFunctionInfo EngineInterfaceObject::EntryInfo::BuiltIn_##global##_##method##(FORCE_NO_WRITE_BARRIER_TAG(global##::##method##)); \ - -#define GlobalBuiltInConstructor(global) - -#define BuiltInRaiseException(exceptionType, exceptionID) \ - NoProfileFunctionInfo EngineInterfaceObject::EntryInfo::BuiltIn_raise##exceptionID(FORCE_NO_WRITE_BARRIER_TAG(EngineInterfaceObject::Entry_BuiltIn_raise##exceptionID)); \ - -#define BuiltInRaiseException1(exceptionType, exceptionID) BuiltInRaiseException(exceptionType, exceptionID) -#define BuiltInRaiseException2(exceptionType, exceptionID) BuiltInRaiseException(exceptionType, exceptionID) -#define BuiltInRaiseException3(exceptionType, exceptionID) BuiltInRaiseException(exceptionType, exceptionID##_3) - +// initialize EngineInterfaceObject::EntryInfo +#define EngineInterfaceBuiltIn2(propId, nativeMethod) NoProfileFunctionInfo EngineInterfaceObject::EntryInfo::nativeMethod(FORCE_NO_WRITE_BARRIER_TAG(EngineInterfaceObject::Entry_##nativeMethod)); +#define BuiltInRaiseException(exceptionType, exceptionID) NoProfileFunctionInfo EngineInterfaceObject::EntryInfo::BuiltIn_raise##exceptionID(FORCE_NO_WRITE_BARRIER_TAG(EngineInterfaceObject::Entry_BuiltIn_raise##exceptionID)); #include "EngineInterfaceObjectBuiltIns.h" -#undef BuiltInRaiseException -#undef BuiltInRaiseException1 -#undef BuiltInRaiseException2 -#undef BuiltInRaiseException3 -#undef GlobalBuiltInConstructor -#undef GlobalBuiltIn -#endif - EngineInterfaceObject * EngineInterfaceObject::New(Recycler * recycler, DynamicType * type) { EngineInterfaceObject* newObject = NewObject(recycler, type); @@ -142,24 +116,6 @@ namespace Js return newObject; } - bool EngineInterfaceObject::Is(Var aValue) - { - return JavascriptOperators::GetTypeId(aValue) == TypeIds_EngineInterfaceObject; - } - - EngineInterfaceObject* EngineInterfaceObject::FromVar(Var aValue) - { - AssertOrFailFastMsg(Is(aValue), "aValue is actually an EngineInterfaceObject"); - - return static_cast(aValue); - } - - EngineInterfaceObject* EngineInterfaceObject::UnsafeFromVar(Var aValue) - { - AssertMsg(Is(aValue), "aValue is actually an EngineInterfaceObject"); - - return static_cast(aValue); - } void EngineInterfaceObject::Initialize() { Recycler* recycler = this->GetRecycler(); @@ -206,48 +162,28 @@ namespace Js bool EngineInterfaceObject::InitializeCommonNativeInterfaces(DynamicObject* commonNativeInterfaces, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode) { - typeHandler->Convert(commonNativeInterfaces, mode, 38); - - JavascriptLibrary* library = commonNativeInterfaces->GetScriptContext()->GetLibrary(); - -#ifndef GlobalBuiltIn -#define GlobalBuiltIn(global, method) \ - library->AddFunctionToLibraryObject(commonNativeInterfaces, Js::PropertyIds::builtIn##global##method, &EngineInterfaceObject::EntryInfo::BuiltIn_##global##_##method##, 1); \ - -#define GlobalBuiltInConstructor(global) SetPropertyOn(commonNativeInterfaces, Js::PropertyIds::##global##, library->Get##global##Constructor()); - -#define BuiltInRaiseException(exceptionType, exceptionID) \ - library->AddFunctionToLibraryObject(commonNativeInterfaces, Js::PropertyIds::raise##exceptionID, &EngineInterfaceObject::EntryInfo::BuiltIn_raise##exceptionID, 1); \ - -#define BuiltInRaiseException1(exceptionType, exceptionID) BuiltInRaiseException(exceptionType, exceptionID) -#define BuiltInRaiseException2(exceptionType, exceptionID) BuiltInRaiseException(exceptionType, exceptionID) -#define BuiltInRaiseException3(exceptionType, exceptionID) BuiltInRaiseException(exceptionType, exceptionID##_3) - + // start with 1 for CallInstanceFunction + int initSlotCapacity = 1; + +#define GlobalMathBuiltIn(mathMethod) initSlotCapacity++; +#define GlobalBuiltIn(global, method) initSlotCapacity++; +#define GlobalBuiltInConstructor(global) initSlotCapacity++; +#define BuiltInRaiseException(exceptionType, exceptionID) initSlotCapacity++; +#define EngineInterfaceBuiltIn2(propId, nativeMethod) initSlotCapacity++; #include "EngineInterfaceObjectBuiltIns.h" -#undef BuiltInRaiseException -#undef BuiltInRaiseException1 -#undef BuiltInRaiseException2 -#undef BuiltInRaiseException3 -#undef GlobalBuiltIn -#undef GlobalBuiltInConstructor -#endif - library->AddFunctionToLibraryObject(commonNativeInterfaces, Js::PropertyIds::builtInJavascriptObjectCreate, &JavascriptObject::EntryInfo::Create, 1); - library->AddFunctionToLibraryObject(commonNativeInterfaces, Js::PropertyIds::builtInJavascriptObjectPreventExtensions, &JavascriptObject::EntryInfo::PreventExtensions, 1); - library->AddFunctionToLibraryObject(commonNativeInterfaces, Js::PropertyIds::builtInJavascriptObjectGetOwnPropertyDescriptor, &JavascriptObject::EntryInfo::GetOwnPropertyDescriptor, 1); - - library->AddFunctionToLibraryObject(commonNativeInterfaces, Js::PropertyIds::builtInGlobalObjectEval, &GlobalObject::EntryInfo::Eval, 2); + typeHandler->Convert(commonNativeInterfaces, mode, initSlotCapacity); - library->AddMember(commonNativeInterfaces, PropertyIds::Object_prototype, library->GetObjectPrototype()); + JavascriptLibrary* library = commonNativeInterfaces->GetScriptContext()->GetLibrary(); - library->AddFunctionToLibraryObject(commonNativeInterfaces, Js::PropertyIds::getErrorMessage, &EngineInterfaceObject::EntryInfo::GetErrorMessage, 1); - library->AddFunctionToLibraryObject(commonNativeInterfaces, Js::PropertyIds::logDebugMessage, &EngineInterfaceObject::EntryInfo::LogDebugMessage, 1); - library->AddFunctionToLibraryObject(commonNativeInterfaces, Js::PropertyIds::tagPublicLibraryCode, &EngineInterfaceObject::EntryInfo::TagPublicLibraryCode, 1); +#define GlobalMathBuiltIn(mathMethod) library->AddFunctionToLibraryObject(commonNativeInterfaces, PropertyIds::builtInMath##mathMethod, &Math::EntryInfo::mathMethod, 1); +#define GlobalBuiltIn(global, method) library->AddFunctionToLibraryObject(commonNativeInterfaces, PropertyIds::builtIn##global##Entry##method, &global::EntryInfo::method, 1); +#define GlobalBuiltInConstructor(global) SetPropertyOn(commonNativeInterfaces, PropertyIds::##global##, library->Get##global##Constructor()); +#define BuiltInRaiseException(exceptionType, exceptionID) library->AddFunctionToLibraryObject(commonNativeInterfaces, PropertyIds::raise##exceptionID, &EngineInterfaceObject::EntryInfo::BuiltIn_raise##exceptionID, 1); +#define EngineInterfaceBuiltIn2(propId, nativeMethod) library->AddFunctionToLibraryObject(commonNativeInterfaces, PropertyIds::propId, &EngineInterfaceObject::EntryInfo::nativeMethod, 1); +#include "EngineInterfaceObjectBuiltIns.h" - library->AddFunctionToLibraryObject(commonNativeInterfaces, Js::PropertyIds::builtInSetPrototype, &EngineInterfaceObject::EntryInfo::SetPrototype, 1); - library->AddFunctionToLibraryObject(commonNativeInterfaces, Js::PropertyIds::builtInGetArrayLength, &EngineInterfaceObject::EntryInfo::GetArrayLength, 1); - library->AddFunctionToLibraryObject(commonNativeInterfaces, Js::PropertyIds::builtInRegexMatch, &EngineInterfaceObject::EntryInfo::RegexMatch, 1); - library->AddFunctionToLibraryObject(commonNativeInterfaces, Js::PropertyIds::builtInCallInstanceFunction, &EngineInterfaceObject::EntryInfo::CallInstanceFunction, 1); + library->AddFunctionToLibraryObject(commonNativeInterfaces, PropertyIds::builtInCallInstanceFunction, &EngineInterfaceObject::EntryInfo::CallInstanceFunction, 1); commonNativeInterfaces->SetHasNoEnumerableProperties(true); @@ -299,12 +235,12 @@ namespace Js EngineInterfaceObject_CommonFunctionProlog(function, callInfo); #if DBG - if (callInfo.Count < 2 || !JavascriptString::Is(args.Values[1])) + if (callInfo.Count < 2 || !VarIs(args.Values[1])) { return scriptContext->GetLibrary()->GetUndefined(); } - JavascriptString* message = JavascriptString::FromVar(args.Values[1]); + JavascriptString* message = VarTo(args.Values[1]); Output::Print(message->GetString()); Output::Flush(); @@ -313,34 +249,125 @@ namespace Js return scriptContext->GetLibrary()->GetUndefined(); } - Var EngineInterfaceObject::Entry_TagPublicLibraryCode(RecyclableObject *function, CallInfo callInfo, ...) + /* static */ + ScriptFunction *EngineInterfaceObject::CreateLibraryCodeScriptFunction(ScriptFunction *scriptFunction, JavascriptString *displayName, bool isConstructor, bool isJsBuiltIn, bool isPublic) { - EngineInterfaceObject_CommonFunctionProlog(function, callInfo); + if (scriptFunction->GetFunctionProxy()->IsPublicLibraryCode()) + { + // this can happen when we re-initialize Intl for a different mode -- for instance, if we have the following JS: + // print((1).toLocaleString()) + // print(new Intl.NumberFormat().format(1)) + // Intl will first get initialized for Number, and then will get re-initialized for all of Intl. This will cause + // Number.prototype.toLocaleString to be registered twice, which breaks some of our assertions below. + return scriptFunction; + } - if (callInfo.Count >= 2 && JavascriptFunction::Is(args.Values[1])) + ScriptContext *scriptContext = scriptFunction->GetScriptContext(); + + if (!isConstructor) { - JavascriptFunction* func = JavascriptFunction::FromVar(args.Values[1]); - func->GetFunctionProxy()->SetIsPublicLibraryCode(); + // set the ErrorOnNew attribute to disallow construction. JsBuiltIn/Intl functions are usually regular ScriptFunctions + // (not lambdas or class methods), so they are usually constructable by default. + FunctionInfo *info = scriptFunction->GetFunctionInfo(); + AssertMsg((info->GetAttributes() & FunctionInfo::Attributes::ErrorOnNew) == 0, "Why are we trying to disable construction of a function that already isn't constructable?"); + info->SetAttributes((FunctionInfo::Attributes) (info->GetAttributes() | FunctionInfo::Attributes::ErrorOnNew)); + + // Assert that the type handler is deferred to ensure that we aren't overwriting previous modifications. + // Script functions start with deferred type handlers, which undefer as soon as any property is modified. + // Since the function that is passed in should be an inline function expression, its type should still be deferred by the time it gets here. + AssertOrFailFast(scriptFunction->GetDynamicType()->GetTypeHandler()->IsDeferredTypeHandler()); + + // give the function a type handler with name and length but without prototype + DynamicTypeHandler::SetInstanceTypeHandler(scriptFunction, scriptContext->GetLibrary()->GetDeferredFunctionWithLengthTypeHandler()); + } + else + { + AssertMsg((scriptFunction->GetFunctionInfo()->GetAttributes() & FunctionInfo::Attributes::ErrorOnNew) == 0, "Why is the function not constructable by default?"); + } + + if (isPublic) + { + // Use GetSz rather than GetString because we use wcsrchr below, which expects a null-terminated string + // Callers can pass in a string like "get compare" or "Intl.Collator.prototype.resolvedOptions" -- only for the + // latter do we extract a shortName. + const char16 *methodNameBuf = displayName->GetSz(); + charcount_t methodNameLength = displayName->GetLength(); + const char16 *shortName = wcsrchr(methodNameBuf, _u('.')); + charcount_t shortNameOffset = 0; + if (shortName != nullptr) + { + shortName++; + shortNameOffset = static_cast(shortName - methodNameBuf); + } + + scriptFunction->GetFunctionProxy()->EnsureDeserialized()->SetDisplayName(methodNameBuf, methodNameLength, shortNameOffset); + + // handle the name property AFTER handling isConstructor, because this can initialize the function's deferred type + Var existingName = nullptr; + if (JavascriptOperators::GetOwnProperty(scriptFunction, PropertyIds::name, &existingName, scriptContext, nullptr)) + { + JavascriptString *existingNameString = VarTo(existingName); + if (existingNameString->GetLength() == 0) + { + // Only overwrite the name of the function object if it was anonymous coming in + // If the input function was named, it is likely intentional + existingName = nullptr; + } + } - if (callInfo.Count >= 3 && JavascriptString::Is(args.Values[2])) + if (existingName == nullptr || JavascriptOperators::IsUndefined(existingName)) { - JavascriptString* customFunctionName = JavascriptString::FromVar(args.Values[2]); - // tagPublicFunction("Intl.Collator", Collator); in Intl.js calls TagPublicLibraryCode the expected name is Collator so we need to calculate the offset - const char16 * shortName = wcsrchr(customFunctionName->GetString(), _u('.')); - uint shortNameOffset = 0; - if (shortName != nullptr) + // It is convenient to set the name here rather than in script, since it is often duplicated. + JavascriptString *funcName = displayName; + if (shortName) { - // JavascriptString length is bounded by uint max - shortName++; - shortNameOffset = static_cast(shortName - customFunctionName->GetString()); + funcName = JavascriptString::NewCopyBuffer(shortName, methodNameLength - shortNameOffset, scriptContext); } - func->GetFunctionProxy()->EnsureDeserialized()->SetDisplayName(customFunctionName->GetString(), customFunctionName->GetLength(), shortNameOffset); + + scriptFunction->SetPropertyWithAttributes(PropertyIds::name, funcName, PropertyConfigurable, nullptr); } - return func; + scriptFunction->GetFunctionProxy()->SetIsPublicLibraryCode(); } - return scriptContext->GetLibrary()->GetUndefined(); + if (isJsBuiltIn) + { + scriptFunction->GetFunctionProxy()->SetIsJsBuiltInCode(); + + // This makes it so that the given scriptFunction can't reference/close over any outside variables, + // which is desirable for JsBuiltIns (though currently not for Intl) + scriptFunction->SetEnvironment(const_cast(&StrictNullFrameDisplay)); + + // TODO(jahorto): investigate force-inlining Intl code + scriptFunction->GetFunctionProxy()->EnsureDeserialized(); + AssertOrFailFast(scriptFunction->HasFunctionBody()); + scriptFunction->GetFunctionBody()->SetJsBuiltInForceInline(); + } + + return scriptFunction; + } + + Var EngineInterfaceObject::Entry_TagPublicLibraryCode(RecyclableObject *function, CallInfo callInfo, ...) + { +#pragma warning(push) +#pragma warning(disable: 4189) // 'scriptContext': local variable is initialized but not referenced + EngineInterfaceObject_CommonFunctionProlog(function, callInfo); +#pragma warning(pop) + + AssertOrFailFast((args.Info.Count == 3 || args.Info.Count == 4) && VarIs(args.Values[1]) && VarIs(args.Values[2])); + + ScriptFunction *func = UnsafeVarTo(args[1]); + JavascriptString *methodName = UnsafeVarTo(args[2]); + + bool isConstructor = true; + if (args.Info.Count == 4) + { + AssertOrFailFast(VarIs(args.Values[3])); + isConstructor = UnsafeVarTo(args.Values[3])->GetValue(); + } + + // isConstructor = true is the default (when no 3rd arg is provided) + return CreateLibraryCodeScriptFunction(func, methodName, isConstructor, false /* isJsBuiltIn */, true /* isPublic */); } /* @@ -350,13 +377,13 @@ namespace Js { EngineInterfaceObject_CommonFunctionProlog(function, callInfo); - if (callInfo.Count < 3 || !DynamicObject::Is(args.Values[1]) || !RecyclableObject::Is(args.Values[2])) + if (callInfo.Count < 3 || !DynamicObject::IsBaseDynamicObject(args.Values[1]) || !VarIs(args.Values[2])) { return scriptContext->GetLibrary()->GetUndefined(); } - DynamicObject* obj = DynamicObject::FromVar(args.Values[1]); - RecyclableObject* value = RecyclableObject::FromVar(args.Values[2]); + DynamicObject* obj = VarTo(args.Values[1]); + RecyclableObject* value = VarTo(args.Values[2]); obj->SetPrototype(value); @@ -395,13 +422,13 @@ namespace Js { EngineInterfaceObject_CommonFunctionProlog(function, callInfo); - if (callInfo.Count < 2 || !JavascriptString::Is(args.Values[1]) || !JavascriptRegExp::Is(args.Values[2])) + if (callInfo.Count < 2 || !VarIs(args.Values[1]) || !VarIs(args.Values[2])) { return scriptContext->GetLibrary()->GetUndefined(); } - JavascriptString *stringToUse = JavascriptString::FromVar(args.Values[1]); - JavascriptRegExp *regexpToUse = JavascriptRegExp::FromVar(args.Values[2]); + JavascriptString *stringToUse = VarTo(args.Values[1]); + JavascriptRegExp *regexpToUse = VarTo(args.Values[2]); return RegexHelper::RegexMatchNoHistory(scriptContext, regexpToUse, stringToUse, false); } @@ -413,38 +440,31 @@ namespace Js { EngineInterfaceObject_CommonFunctionProlog(function, callInfo); - Assert(args.Info.Count <= 5); - if (callInfo.Count < 3 || args.Info.Count > 5 || !JavascriptConversion::IsCallable(args.Values[1]) || !RecyclableObject::Is(args.Values[2])) + if (callInfo.Count < 3 || !JavascriptConversion::IsCallable(args.Values[1])) { return scriptContext->GetLibrary()->GetUndefined(); } - RecyclableObject *func = RecyclableObject::FromVar(args.Values[1]); + // TODO: This is marked volatile due to MSVC codegen bug in x86_test_pogo builds. Remove when the bug is fixed + RecyclableObject *volatile func = VarTo(args.Values[1]); AssertOrFailFastMsg(func != scriptContext->GetLibrary()->GetUndefined(), "Trying to callInstanceFunction(undefined, ...)"); //Shift the arguments by 2 so argument at index 2 becomes the 'this' argument at index 0 - Var newVars[3]; - Js::Arguments newArgs(callInfo, newVars); - - for (uint i = 0; iGetThreadContext()) { - return JavascriptFunction::CallFunction(func, func->GetEntryPoint(), newArgs); + return JavascriptFunction::CallFunction(func, func->GetEntryPoint(), args); } END_SAFE_REENTRANT_CALL } -#ifndef GlobalBuiltIn -#define GlobalBuiltIn(global, method) -#define GlobalBuiltInConstructor(global) - #define BuiltInRaiseException(exceptionType, exceptionID) \ Var EngineInterfaceObject::Entry_BuiltIn_raise##exceptionID(RecyclableObject *function, CallInfo callInfo, ...) \ { \ @@ -458,12 +478,12 @@ namespace Js { \ EngineInterfaceObject_CommonFunctionProlog(function, callInfo); \ \ - if(args.Info.Count < 2 || !JavascriptString::Is(args.Values[1])) \ + if(args.Info.Count < 2 || !VarIs(args.Values[1])) \ { \ Assert(false); \ JavascriptError::Throw##exceptionType(scriptContext, JSERR_##exceptionID); \ } \ - JavascriptError::Throw##exceptionType##Var(scriptContext, JSERR_##exceptionID, JavascriptString::FromVar(args.Values[1])->GetSz()); \ + JavascriptError::Throw##exceptionType##Var(scriptContext, JSERR_##exceptionID, VarTo(args.Values[1])->GetSz()); \ } #define BuiltInRaiseException2(exceptionType, exceptionID) \ @@ -471,12 +491,12 @@ namespace Js { \ EngineInterfaceObject_CommonFunctionProlog(function, callInfo); \ \ - if(args.Info.Count < 3 || !JavascriptString::Is(args.Values[1]) || !JavascriptString::Is(args.Values[2])) \ + if(args.Info.Count < 3 || !VarIs(args.Values[1]) || !VarIs(args.Values[2])) \ { \ Assert(false); \ JavascriptError::Throw##exceptionType(scriptContext, JSERR_##exceptionID); \ } \ - JavascriptError::Throw##exceptionType##Var(scriptContext, JSERR_##exceptionID, JavascriptString::FromVar(args.Values[1])->GetSz(), JavascriptString::FromVar(args.Values[2])->GetSz()); \ + JavascriptError::Throw##exceptionType##Var(scriptContext, JSERR_##exceptionID, VarTo(args.Values[1])->GetSz(), VarTo(args.Values[2])->GetSz()); \ } #define BuiltInRaiseException3(exceptionType, exceptionID) \ @@ -484,23 +504,15 @@ namespace Js { \ EngineInterfaceObject_CommonFunctionProlog(function, callInfo); \ \ - if(args.Info.Count < 4 || !JavascriptString::Is(args.Values[1]) || !JavascriptString::Is(args.Values[2]) || !JavascriptString::Is(args.Values[3])) \ + if(args.Info.Count < 4 || !VarIs(args.Values[1]) || !VarIs(args.Values[2]) || !VarIs(args.Values[3])) \ { \ Assert(false); \ JavascriptError::Throw##exceptionType(scriptContext, JSERR_##exceptionID); \ } \ - JavascriptError::Throw##exceptionType##Var(scriptContext, JSERR_##exceptionID, JavascriptString::FromVar(args.Values[1])->GetSz(), JavascriptString::FromVar(args.Values[2])->GetSz(), JavascriptString::FromVar(args.Values[3])->GetSz()); \ + JavascriptError::Throw##exceptionType##Var(scriptContext, JSERR_##exceptionID, VarTo(args.Values[1])->GetSz(), VarTo(args.Values[2])->GetSz(), VarTo(args.Values[3])->GetSz()); \ } #include "EngineInterfaceObjectBuiltIns.h" -#undef BuiltInRaiseException -#undef BuiltInRaiseException1 -#undef BuiltInRaiseException2 -#undef BuiltInRaiseException3 -#undef GlobalBuiltIn -#undef GlobalBuiltInConstructor -#endif - } -#endif // ENABLE_INTL_OBJECT || ENABLE_JS_BUILTINS || ENABLE_PROJECTION +#endif // ENABLE_INTL_OBJECT || ENABLE_JS_BUILTINS diff --git a/lib/Runtime/Library/EngineInterfaceObject.h b/lib/Runtime/Library/EngineInterfaceObject.h index 92e2bcb8eb0..4c320ed2574 100644 --- a/lib/Runtime/Library/EngineInterfaceObject.h +++ b/lib/Runtime/Library/EngineInterfaceObject.h @@ -1,10 +1,33 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #pragma once -#if defined(ENABLE_INTL_OBJECT) || defined(ENABLE_JS_BUILTINS) || defined(ENABLE_PROJECTION) +#if defined(ENABLE_INTL_OBJECT) || defined(ENABLE_JS_BUILTINS) + + +#pragma warning(push) +#pragma warning(disable:4309) // truncation of constant value +#pragma warning(disable:4838) // conversion from 'int' to 'const char' requires a narrowing conversion + +#if DISABLE_JIT +#if TARGET_64 +#include "InJavascript/JsBuiltIn.nojit.bc.64b.h" +#else +#include "InJavascript/JsBuiltIn.nojit.bc.32b.h" +#endif // TARGET_64 +#else +#if TARGET_64 +#include "InJavascript/JsBuiltIn.bc.64b.h" +#else +#include "InJavascript/JsBuiltIn.bc.32b.h" +#endif // TARGET_64 +#endif // DISABLE_JIT + +#pragma warning(pop) + namespace Js { @@ -71,9 +94,6 @@ namespace Js void SetEngineExtension(EngineInterfaceExtensionKind extensionKind, EngineExtensionObjectBase* extensionObject); static EngineInterfaceObject* New(Recycler * recycler, DynamicType * type); - static bool Is(Var aValue); - static EngineInterfaceObject* FromVar(Var aValue); - static EngineInterfaceObject* UnsafeFromVar(Var aValue); #if ENABLE_TTD virtual void MarkVisitKindSpecificPtrs(TTD::SnapshotExtractor* extractor) override; @@ -88,75 +108,30 @@ namespace Js static bool __cdecl InitializeCommonNativeInterfaces(DynamicObject* engineInterface, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode); + static ScriptFunction *CreateLibraryCodeScriptFunction(ScriptFunction *scriptFunction, JavascriptString *displayName, bool isConstructor, bool isJsBuiltIn, bool isPublic); + class EntryInfo { public: - static NoProfileFunctionInfo GetErrorMessage; - static NoProfileFunctionInfo LogDebugMessage; - static NoProfileFunctionInfo TagPublicLibraryCode; - static NoProfileFunctionInfo SetPrototype; - static NoProfileFunctionInfo GetArrayLength; - static NoProfileFunctionInfo RegexMatch; - static NoProfileFunctionInfo CallInstanceFunction; - -#ifndef GlobalBuiltIn -#define GlobalBuiltIn(global, method) \ - static NoProfileFunctionInfo BuiltIn_##global##_##method##; \ - -#define GlobalBuiltInConstructor(global) - -#define BuiltInRaiseException(exceptionType, exceptionID) \ - static NoProfileFunctionInfo BuiltIn_raise##exceptionID; - -#define BuiltInRaiseException1(exceptionType, exceptionID) BuiltInRaiseException(exceptionType, exceptionID) -#define BuiltInRaiseException2(exceptionType, exceptionID) BuiltInRaiseException(exceptionType, exceptionID) -#define BuiltInRaiseException3(exceptionType, exceptionID) BuiltInRaiseException(exceptionType, exceptionID##_3) + // CallInstanceFunction is still handled specially because it gets special inline treatment from the JIT + static FunctionInfo CallInstanceFunction; +#define BuiltInRaiseException(exceptionType, exceptionID) static NoProfileFunctionInfo BuiltIn_raise##exceptionID; +#define EngineInterfaceBuiltIn2(propId, nativeMethod) static NoProfileFunctionInfo nativeMethod; #include "EngineInterfaceObjectBuiltIns.h" - -#undef BuiltInRaiseException -#undef BuiltInRaiseException1 -#undef BuiltInRaiseException2 -#undef BuiltInRaiseException3 -#undef GlobalBuiltInConstructor -#undef GlobalBuiltIn -#endif }; - static Var Entry_GetErrorMessage(RecyclableObject *function, CallInfo callInfo, ...); - static Var Entry_LogDebugMessage(RecyclableObject *function, CallInfo callInfo, ...); - static Var Entry_TagPublicLibraryCode(RecyclableObject *function, CallInfo callInfo, ...); - static Var Entry_SetPrototype(RecyclableObject *function, CallInfo callInfo, ...); - static Var Entry_GetArrayLength(RecyclableObject *function, CallInfo callInfo, ...); - static Var Entry_RegexMatch(RecyclableObject *function, CallInfo callInfo, ...); static Var Entry_CallInstanceFunction(RecyclableObject *function, CallInfo callInfo, ...); -#ifdef ENABLE_PROJECTION - static Var EntryPromise_EnqueueTask(RecyclableObject *function, CallInfo callInfo, ...); -#endif - -#ifndef GlobalBuiltIn -#define GlobalBuiltIn(global, method) - -#define GlobalBuiltInConstructor(global) - -#define BuiltInRaiseException(exceptionType, exceptionID) \ - static Var Entry_BuiltIn_raise##exceptionID(RecyclableObject *function, CallInfo callInfo, ...); - -#define BuiltInRaiseException1(exceptionType, exceptionID) BuiltInRaiseException(exceptionType, exceptionID) -#define BuiltInRaiseException2(exceptionType, exceptionID) BuiltInRaiseException(exceptionType, exceptionID) -#define BuiltInRaiseException3(exceptionType, exceptionID) BuiltInRaiseException(exceptionType, exceptionID##_3) +#define BuiltInRaiseException(exceptionType, exceptionID) static Var Entry_BuiltIn_raise##exceptionID(RecyclableObject *function, CallInfo callInfo, ...); +#define EngineInterfaceBuiltIn2(propId, nativeMethod) static Var Entry_##nativeMethod(RecyclableObject *function, CallInfo callInfo, ...); #include "EngineInterfaceObjectBuiltIns.h" - -#undef BuiltInRaiseException -#undef BuiltInRaiseException1 -#undef BuiltInRaiseException2 -#undef BuiltInRaiseException3 -#undef GlobalBuiltInConstructor -#undef GlobalBuiltIn -#endif - }; + + template <> inline bool VarIsImpl(RecyclableObject* obj) + { + return JavascriptOperators::GetTypeId(obj) == TypeIds_EngineInterfaceObject; + } } -#endif // ENABLE_INTL_OBJECT || ENABLE_JS_BUILTINS || ENABLE_PROJECTION +#endif // ENABLE_INTL_OBJECT || ENABLE_JS_BUILTINS diff --git a/lib/Runtime/Library/EngineInterfaceObjectBuiltIns.h b/lib/Runtime/Library/EngineInterfaceObjectBuiltIns.h index 923366d0aec..8916fc3abc8 100644 --- a/lib/Runtime/Library/EngineInterfaceObjectBuiltIns.h +++ b/lib/Runtime/Library/EngineInterfaceObjectBuiltIns.h @@ -1,53 +1,96 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- + +// shim out common fallbacks +#ifndef GlobalBuiltInConstructor +#define GlobalBuiltInConstructor(Ctor) +#endif + +#ifndef GlobalMathBuiltIn +#define GlobalMathBuiltIn(method) +#endif + +#ifndef GlobalBuiltIn +#define GlobalBuiltIn(class, method) +#endif + +#ifndef BuiltInRaiseException +#define BuiltInRaiseException(T, id) +#endif + +#ifndef BuiltInRaiseException1 +#define BuiltInRaiseException1(T, id) BuiltInRaiseException(T, id) +#endif + +#ifndef BuiltInRaiseException1 +#define BuiltInRaiseException1(T, id) BuiltInRaiseException(T, id) +#endif + +#ifndef BuiltInRaiseException2 +#define BuiltInRaiseException2(T, id) BuiltInRaiseException(T, id) +#endif + +#ifndef BuiltInRaiseException3 +#define BuiltInRaiseException3(T, id) BuiltInRaiseException(T, id##_3) +#endif + +#ifndef EngineInterfaceBuiltIn2 +#define EngineInterfaceBuiltIn2(propID, method) +#endif + +#ifndef EngineInterfaceBuiltIn +#define EngineInterfaceBuiltIn(name) EngineInterfaceBuiltIn2(builtIn##name, name) +#endif + GlobalBuiltInConstructor(Boolean) GlobalBuiltInConstructor(Object) GlobalBuiltInConstructor(Number) GlobalBuiltInConstructor(RegExp) GlobalBuiltInConstructor(String) GlobalBuiltInConstructor(Date) -GlobalBuiltInConstructor(Error) /*This was added back in to allow assert errors*/ -GlobalBuiltInConstructor(Map) +GlobalBuiltInConstructor(Error) // TODO(jahorto): consider deleting (currently used by WinRT Promises) +GlobalBuiltInConstructor(Map) // TODO(jahorto): consider deleting (when do we need a Map over an object?) GlobalBuiltInConstructor(Symbol) -GlobalBuiltIn(Math,Abs) -GlobalBuiltIn(Math,Floor) -GlobalBuiltIn(Math,Max) -GlobalBuiltIn(Math,Pow) - -GlobalBuiltIn(JavascriptObject, EntryDefineProperty) -GlobalBuiltIn(JavascriptObject, EntryGetPrototypeOf) -GlobalBuiltIn(JavascriptObject, EntryIsExtensible) -GlobalBuiltIn(JavascriptObject, EntryGetOwnPropertyNames) -GlobalBuiltIn(JavascriptObject, EntryHasOwnProperty) -GlobalBuiltIn(JavascriptObject, EntryKeys) - -GlobalBuiltIn(JavascriptArray, EntryForEach) -GlobalBuiltIn(JavascriptArray, EntryPush) -GlobalBuiltIn(JavascriptArray, EntryJoin) -GlobalBuiltIn(JavascriptArray, EntryMap) -GlobalBuiltIn(JavascriptArray, EntryReduce) -GlobalBuiltIn(JavascriptArray, EntrySlice) -GlobalBuiltIn(JavascriptArray, EntryConcat) - -GlobalBuiltIn(JavascriptFunction, EntryBind) -GlobalBuiltIn(JavascriptFunction, EntryApply) - -GlobalBuiltIn(JavascriptDate, EntryGetDate) -GlobalBuiltIn(JavascriptDate, EntryNow) - -GlobalBuiltIn(JavascriptString, EntryReplace) -GlobalBuiltIn(JavascriptString, EntryToLowerCase) -GlobalBuiltIn(JavascriptString, EntryToUpperCase) -GlobalBuiltIn(JavascriptString, EntrySplit) -GlobalBuiltIn(JavascriptString, EntrySubstring) -GlobalBuiltIn(JavascriptString, EntryRepeat) -GlobalBuiltIn(JavascriptString, EntryIndexOf) - -GlobalBuiltIn(GlobalObject, EntryIsFinite) -GlobalBuiltIn(GlobalObject, EntryIsNaN) +GlobalMathBuiltIn(Abs) +GlobalMathBuiltIn(Floor) +GlobalMathBuiltIn(Pow) + +GlobalBuiltIn(JavascriptObject, DefineProperty) +GlobalBuiltIn(JavascriptObject, GetPrototypeOf) +GlobalBuiltIn(JavascriptObject, IsExtensible) +GlobalBuiltIn(JavascriptObject, GetOwnPropertyNames) +GlobalBuiltIn(JavascriptObject, HasOwnProperty) +GlobalBuiltIn(JavascriptObject, Keys) +GlobalBuiltIn(JavascriptObject, Create) +GlobalBuiltIn(JavascriptObject, GetOwnPropertyDescriptor) +GlobalBuiltIn(JavascriptObject, PreventExtensions) + +GlobalBuiltIn(JavascriptArray, Join) +GlobalBuiltIn(JavascriptArray, Map) +GlobalBuiltIn(JavascriptArray, Slice) +GlobalBuiltIn(JavascriptArray, Concat) + +GlobalBuiltIn(JavascriptFunction, Bind) +GlobalBuiltIn(JavascriptFunction, Apply) + +GlobalBuiltIn(JavascriptDate, GetDate) +GlobalBuiltIn(JavascriptDate, Now) + +GlobalBuiltIn(JavascriptString, Replace) +GlobalBuiltIn(JavascriptString, ToLowerCase) +GlobalBuiltIn(JavascriptString, ToUpperCase) +GlobalBuiltIn(JavascriptString, Split) +GlobalBuiltIn(JavascriptString, Substring) +GlobalBuiltIn(JavascriptString, Repeat) +GlobalBuiltIn(JavascriptString, IndexOf) + +GlobalBuiltIn(GlobalObject, IsFinite) // TODO(jahorto): consider switching to Number.isFinite +GlobalBuiltIn(GlobalObject, IsNaN) // TODO(jahorto): consider switching to Number.isNaN +GlobalBuiltIn(GlobalObject, Eval) // TODO(jahorto): consider deleting (currently used by WinRT Promises) BuiltInRaiseException(TypeError, NeedObject) BuiltInRaiseException2(TypeError, ObjectIsAlreadyInitialized) @@ -58,8 +101,29 @@ BuiltInRaiseException1(RangeError, LocaleNotWellFormed) BuiltInRaiseException1(TypeError, This_NullOrUndefined) BuiltInRaiseException1(TypeError, NotAConstructor) BuiltInRaiseException1(TypeError, ObjectIsNonExtensible) +BuiltInRaiseException1(TypeError, LengthIsTooBig) +BuiltInRaiseException1(TypeError, NonObjectFromIterable) +BuiltInRaiseException1(TypeError, EmptyArrayAndInitValueNotPresent) BuiltInRaiseException2(TypeError, NeedObjectOfType) BuiltInRaiseException1(RangeError, InvalidCurrencyCode) BuiltInRaiseException(TypeError, MissingCurrencyCode) BuiltInRaiseException(RangeError, InvalidDate) BuiltInRaiseException1(TypeError, FunctionArgument_NeedFunction) + +EngineInterfaceBuiltIn2(getErrorMessage, GetErrorMessage) +EngineInterfaceBuiltIn2(logDebugMessage, LogDebugMessage) +EngineInterfaceBuiltIn2(tagPublicLibraryCode, TagPublicLibraryCode) +EngineInterfaceBuiltIn(SetPrototype) +EngineInterfaceBuiltIn(GetArrayLength) +EngineInterfaceBuiltIn(RegexMatch) + +#undef GlobalBuiltInConstructor +#undef GlobalMathBuiltIn +#undef GlobalBuiltIn +#undef BuiltInRaiseException +#undef BuiltInRaiseException1 +#undef BuiltInRaiseException1 +#undef BuiltInRaiseException2 +#undef BuiltInRaiseException3 +#undef EngineInterfaceBuiltIn2 +#undef EngineInterfaceBuiltIn diff --git a/lib/Runtime/Library/ForInObjectEnumerator.cpp b/lib/Runtime/Library/ForInObjectEnumerator.cpp index ea673f9303e..fab0740c733 100644 --- a/lib/Runtime/Library/ForInObjectEnumerator.cpp +++ b/lib/Runtime/Library/ForInObjectEnumerator.cpp @@ -102,7 +102,7 @@ namespace Js } if (!DynamicType::Is(firstPrototypeWithEnumerableProperties->GetTypeId()) - || !DynamicObject::UnsafeFromVar(firstPrototypeWithEnumerableProperties)->GetHasNoEnumerableProperties()) + || !UnsafeVarTo(firstPrototypeWithEnumerableProperties)->GetHasNoEnumerableProperties()) { break; } diff --git a/lib/Runtime/Library/GlobalObject.cpp b/lib/Runtime/Library/GlobalObject.cpp index 6eca6ce85bb..aab1ad2fe75 100644 --- a/lib/Runtime/Library/GlobalObject.cpp +++ b/lib/Runtime/Library/GlobalObject.cpp @@ -54,36 +54,29 @@ using namespace Js; library = localLibrary; } - bool GlobalObject::Is(Var aValue) - { - return RecyclableObject::Is(aValue) && (RecyclableObject::UnsafeFromVar(aValue)->GetTypeId() == TypeIds_GlobalObject); - } - - GlobalObject* GlobalObject::FromVar(Var aValue) - { - AssertOrFailFastMsg(Is(aValue), "Ensure var is actually a 'GlobalObject'"); - return static_cast(aValue); - } - - GlobalObject* GlobalObject::UnsafeFromVar(Var aValue) - { - AssertMsg(Is(aValue), "Ensure var is actually a 'GlobalObject'"); - return static_cast(aValue); - } - HRESULT GlobalObject::SetDirectHostObject(RecyclableObject* hostObject, RecyclableObject* secureDirectHostObject) { HRESULT hr = S_OK; + this->directHostObject = hostObject; + this->secureDirectHostObject = secureDirectHostObject; + BEGIN_TRANSLATE_OOM_TO_HRESULT_NESTED { // In fastDOM scenario, we should use the host object to lookup the prototype. this->SetPrototype(library->GetNull()); + + // Host can call to set the direct host object after the GlobalObject has been initialized but + // before user script has run. (This happens even before the previous call to SetPrototype) + // If that happens, we'll need to update the 'globalThis' property to point to the secure + // host object so that we don't hand a reference to the bare GlobalObject out to user script. + if (this->GetScriptContext()->GetConfig()->IsESGlobalThisEnabled()) + { + this->SetProperty(PropertyIds::globalThis, this->ToThis(), PropertyOperation_None, nullptr); + } } END_TRANSLATE_OOM_TO_HRESULT(hr) - this->directHostObject = hostObject; - this->secureDirectHostObject = secureDirectHostObject; return hr; } @@ -158,7 +151,7 @@ using namespace Js; const char16 *source = nullptr; size_t sourceLength = 0; - if (Js::JavascriptString::Is(codeVar)) + if (Js::VarIs(codeVar)) { codeStringVar = (Js::JavascriptString *)codeVar; source = codeStringVar->GetString(); @@ -575,7 +568,7 @@ using namespace Js; } Var evalArg = args[1]; - if (!JavascriptString::Is(evalArg)) + if (!VarIs(evalArg)) { // "If x is not a string value, return x." return evalArg; @@ -588,7 +581,7 @@ using namespace Js; #endif ScriptFunction *pfuncScript = nullptr; - JavascriptString *argString = JavascriptString::FromVar(evalArg); + JavascriptString *argString = VarTo(evalArg); char16 const * sourceString = argString->GetSz(); charcount_t sourceLen = argString->GetLength(); FastEvalMapString key(argString, sourceString, sourceLen, moduleID, strictMode, isLibraryCode); @@ -597,7 +590,7 @@ using namespace Js; // PropertyString's buffer references to PropertyRecord's inline buffer, if both PropertyString and PropertyRecord are collected // we'll leave the PropertyRecord's interior buffer pointer in the EvalMap. So do not use evalmap if we are evaluating PropertyString bool useEvalMap = !VirtualTableInfo::HasVirtualTable(argString) && debugEvalScriptContext == nullptr; // Don't use the cache in case of debugEval - + bool found = useEvalMap && scriptContext->IsInEvalMap(key, isIndirect, &pfuncScript); if (!found || (!isIndirect && pfuncScript->GetEnvironment() != &NullFrameDisplay)) { @@ -621,7 +614,7 @@ using namespace Js; // This is console scope scenario. DebugEval script context is on the top of the stack. But we are going // to execute the user script from target script context. In order to fix the script context stack we // need to marshall the function object. - pfuncScript = ScriptFunction::FromVar(CrossSite::MarshalVar(debugEvalScriptContext, pfuncScript)); + pfuncScript = VarTo(CrossSite::MarshalVar(debugEvalScriptContext, pfuncScript)); } if (useEvalMap && !found) @@ -693,41 +686,6 @@ using namespace Js; pfuncScript->GetFunctionProxy()->EnsureDeserialized(); } - if (pfuncScript->GetFunctionBody()->GetHasThis()) - { - // The eval expression refers to "this" - if (args.Info.Flags & CallFlags_ExtraArg) - { - JavascriptFunction* pfuncCaller = nullptr; - // If we are non-hidden call to eval then look for the "this" object in the frame display if the caller is a lambda else get "this" from the caller's frame. - - bool successful = false; - if (JavascriptStackWalker::GetCaller(&pfuncCaller, scriptContext)) - { - FunctionInfo* functionInfo = pfuncCaller->GetFunctionInfo(); - if (functionInfo != nullptr && (functionInfo->IsLambda() || functionInfo->IsClassConstructor())) - { - Var defaultInstance = (moduleID == kmodGlobal) ? JavascriptOperators::OP_LdRoot(scriptContext)->ToThis() : (Var)JavascriptOperators::GetModuleRoot(moduleID, scriptContext); - varThis = JavascriptOperators::OP_GetThisScoped(environment, defaultInstance, scriptContext); - UpdateThisForEval(varThis, moduleID, scriptContext, strictMode); - successful = true; - } - } - - if (!successful) - { - JavascriptStackWalker::GetThis(&varThis, moduleID, scriptContext); - UpdateThisForEval(varThis, moduleID, scriptContext, strictMode); - } - } - else - { - // The expression, which refers to "this", is evaluated by an indirect eval. - // Set "this" to the current module root. - varThis = JavascriptOperators::OP_GetThis(scriptContext->GetLibrary()->GetUndefined(), moduleID, scriptContext); - } - } - if (pfuncScript->HasSuperReference()) { // Indirect evals cannot have a super reference. @@ -740,16 +698,9 @@ using namespace Js; return library->GetGlobalObject()->ExecuteEvalParsedFunction(pfuncScript, environment, varThis, scriptContext); } - void GlobalObject::UpdateThisForEval(Var &varThis, ModuleID moduleID, ScriptContext *scriptContext, BOOL strictMode) + void GlobalObject::UpdateThisForEval(Var &varThis, ModuleID moduleID, ScriptContext *scriptContext) { - if (strictMode) - { - varThis = JavascriptOperators::OP_StrictGetThis(varThis, scriptContext); - } - else - { - varThis = JavascriptOperators::OP_GetThisNoFastPath(varThis, moduleID, scriptContext); - } + varThis = JavascriptOperators::OP_GetThisNoFastPath(varThis, moduleID, scriptContext); } @@ -883,7 +834,7 @@ using namespace Js; HRESULT hrCodeGen = S_OK; CompileScriptException se; Js::ParseableFunctionInfo * funcBody = NULL; - + uint sourceIndex = Constants::InvalidSourceIndex; BEGIN_LEAVE_SCRIPT_INTERNAL(scriptContext); BEGIN_TRANSLATE_EXCEPTION_TO_HRESULT { @@ -931,7 +882,7 @@ using namespace Js; Js::AutoDynamicCodeReference dynamicFunctionReference(scriptContext); Assert(cchSource < MAXLONG); - uint sourceIndex = scriptContext->SaveSourceNoCopy(sourceInfo, cchSource, true); + sourceIndex = scriptContext->SaveSourceNoCopy(sourceInfo, cchSource, true); // Tell byte code gen not to attempt to interact with the caller's context if this is indirect eval. // TODO: Handle strict mode. @@ -975,8 +926,13 @@ using namespace Js; } else if (hrCodeGen == JSERR_AsmJsCompileError) { - // if asm.js compilation succeeded, retry with asm.js disabled + // if asm.js compilation failed, retry with asm.js disabled grfscr |= fscrNoAsmJs; + if (sourceIndex != Constants::InvalidSourceIndex) + { + // If we registered source, we should remove it or we will register another source info + scriptContext->RemoveSource(sourceIndex); + } return DefaultEvalHelper(scriptContext, source, sourceLength, moduleID, grfscr, pszTitle, registerDocument, isIndirect, strictMode); } JavascriptError::MapAndThrowError(scriptContext, hrCodeGen); @@ -1217,9 +1173,9 @@ using namespace Js; } // convert input to a string - if (JavascriptString::Is(args[1])) + if (VarIs(args[1])) { - str = JavascriptString::FromVar(args[1]); + str = VarTo(args[1]); } else { @@ -1280,9 +1236,9 @@ using namespace Js; } // convert input to a string - if (JavascriptString::Is(args[1])) + if (VarIs(args[1])) { - str = JavascriptString::FromVar(args[1]); + str = VarTo(args[1]); } else { @@ -1584,19 +1540,6 @@ using namespace Js; Assert(!(callInfo.Flags & CallFlags_New)); ScriptContext* scriptContext = function->GetScriptContext(); - if (!scriptContext->GetConfig()->IsCollectGarbageEnabled() -#ifdef ENABLE_PROJECTION - && scriptContext->GetConfig()->GetHostType() != HostType::HostTypeApplication - && scriptContext->GetConfig()->GetHostType() != HostType::HostTypeWebview -#endif - ) - { - // We expose the CollectGarbage API with flag for compat reasons. - // If CollectGarbage key is not enabled, and if the HostType is neither - // HostType::HostTypeApplication nor HostType::HostTypeWebview, - // then we do not trigger collection. - return scriptContext->GetLibrary()->GetUndefined(); - } Recycler* recycler = scriptContext->GetRecycler(); if (recycler) @@ -1616,10 +1559,6 @@ using namespace Js; } #if DBG_DUMP -#ifdef ENABLE_PROJECTION - scriptContext->GetThreadContext()->DumpProjectionContextMemoryStats(_u("Stats after GlobalObject::EntryCollectGarbage call")); -#endif - if (Js::Configuration::Global.flags.TraceWin8Allocations) { Output::Print(_u("MemoryTrace: GlobalObject::EntryCollectGarbage Exit\n")); @@ -1653,10 +1592,10 @@ using namespace Js; PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); ARGUMENTS(args, callInfo); - TTDAssert(args.Info.Count >= 2 && Js::JavascriptString::Is(args[1]), "Bad arguments!!!"); + TTDAssert(args.Info.Count >= 2 && Js::VarIs(args[1]), "Bad arguments!!!"); - Js::JavascriptString* jsString = Js::JavascriptString::FromVar(args[1]); - bool doPrint = (args.Info.Count == 3) && Js::JavascriptBoolean::Is(args[2]) && (Js::JavascriptBoolean::FromVar(args[2])->GetValue()); + Js::JavascriptString* jsString = Js::VarTo(args[1]); + bool doPrint = (args.Info.Count == 3) && Js::VarIs(args[2]) && (Js::VarTo(args[2])->GetValue()); if(function->GetScriptContext()->ShouldPerformReplayAction()) { @@ -1715,7 +1654,7 @@ using namespace Js; Js::JavascriptLibrary* jslib = function->GetScriptContext()->GetLibrary(); - if(args.Info.Count != 2 || !Js::JavascriptString::Is(args[1])) + if(args.Info.Count != 2 || !Js::VarIs(args[1])) { return jslib->GetFalse(); } @@ -1729,7 +1668,7 @@ using namespace Js; if(function->GetScriptContext()->ShouldPerformRecordAction()) { - Js::JavascriptString* jsString = Js::JavascriptString::FromVar(args[1]); + Js::JavascriptString* jsString = Js::VarTo(args[1]); function->GetScriptContext()->GetThreadContext()->TTDLog->RecordEmitLogEvent(jsString); return jslib->GetTrue(); @@ -1773,7 +1712,7 @@ using namespace Js; } //get a pattern which doesn't contain leading and trailing stars - subPattern = JavascriptString::FromVar(JavascriptString::SubstringCore(pattern, idxStart, idxEnd - idxStart, scriptContext)); + subPattern = VarTo(JavascriptString::SubstringCore(pattern, idxStart, idxEnd - idxStart, scriptContext)); uint index = JavascriptString::strstr(propertyName, subPattern, false); diff --git a/lib/Runtime/Library/GlobalObject.h b/lib/Runtime/Library/GlobalObject.h index 2eea6440c8b..4671c6d2e87 100644 --- a/lib/Runtime/Library/GlobalObject.h +++ b/lib/Runtime/Library/GlobalObject.h @@ -110,7 +110,7 @@ namespace Js #endif /* IR_VIEWER */ static void ValidateSyntax(ScriptContext* scriptContext, const char16 *source, int sourceLength, bool isGenerator, bool isAsync, void (Parser::*validateSyntax)()); - static void UpdateThisForEval(Var &varThis, ModuleID moduleID, ScriptContext *scriptContext, BOOL strictMode) ; + static void UpdateThisForEval(Var &varThis, ModuleID moduleID, ScriptContext *scriptContext) ; static ScriptFunction* DefaultEvalHelper(ScriptContext* scriptContext, const char16 *source, int sourceLength, ModuleID moduleID, uint32 grfscr, LPCOLESTR pszTitle, BOOL registerDocument, BOOL isIndirect, BOOL strictMode); #ifdef ENABLE_SCRIPT_PROFILING static ScriptFunction* ProfileModeEvalHelper(ScriptContext* scriptContext, const char16 *source, int sourceLength, ModuleID moduleID, uint32 grfscr, LPCOLESTR pszTitle, BOOL registerDocument, BOOL isIndirect, BOOL strictMode); @@ -121,10 +121,6 @@ namespace Js BOOL registerDocument, BOOL isIndirect, BOOL strictMode); #endif /* IR_VIEWER */ - static bool Is(Var aValue); - static GlobalObject* FromVar(Var aValue); - static GlobalObject* UnsafeFromVar(Var aValue); - typedef ScriptFunction* (*EvalHelperType)(ScriptContext* scriptContext, const char16 *source, int sourceLength, ModuleID moduleID, uint32 grfscr, LPCOLESTR pszTitle, BOOL registerDocument, BOOL isIndirect, BOOL strictMode); FieldNoBarrier(EvalHelperType) EvalHelper; @@ -189,4 +185,9 @@ namespace Js virtual void ExtractSnapObjectDataInto(TTD::NSSnapObjects::SnapObject* objData, TTD::SlabAllocator& alloc) override; #endif }; + + template <> inline bool VarIsImpl(RecyclableObject* obj) + { + return obj->GetTypeId() == TypeIds_GlobalObject; + } } diff --git a/lib/Runtime/Library/InJavascript/Array_prototype.js b/lib/Runtime/Library/InJavascript/Array_prototype.js new file mode 100644 index 00000000000..163790404e1 --- /dev/null +++ b/lib/Runtime/Library/InJavascript/Array_prototype.js @@ -0,0 +1,568 @@ +//------------------------------------------------------------------------------------------------------- +// Copyright (C) Microsoft. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. +// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. +//------------------------------------------------------------------------------------------------------- + +"use strict"; + +(function (intrinsic) { + var platform = intrinsic.JsBuiltIn; + + var setPrototype = platform.builtInSetPrototype; + var _objectDefineProperty = platform.builtInJavascriptObjectEntryDefineProperty; + var Symbol = platform.Symbol; + var CreateObject = platform.builtInJavascriptObjectEntryCreate; + + platform.registerChakraLibraryFunction("ArrayIterator", function (arrayObj, iterationKind) { + __chakraLibrary.InitInternalProperties(this, 4, "__$arrayObj$__", "__$nextIndex$__", "__$kind$__", "__$internalDone$__"); + this.__$arrayObj$__ = arrayObj; + this.__$nextIndex$__ = 0; + this.__$kind$__ = iterationKind; + this.__$internalDone$__ = false; // We use this additional property to enable hoisting load of arrayObj outside the loop, we write to this property instead of the arrayObj + }); + + // ArrayIterator's prototype is the C++ Iterator, which is also the prototype for StringIterator, MapIterator etc + var iteratorPrototype = platform.GetIteratorPrototype(); + // Establish prototype chain here + __chakraLibrary.ArrayIterator.prototype = CreateObject(iteratorPrototype); + __chakraLibrary.raiseNeedObjectOfType = platform.raiseNeedObjectOfType; + __chakraLibrary.raiseThis_NullOrUndefined = platform.raiseThis_NullOrUndefined; + __chakraLibrary.raiseEmptyArrayAndInitValueNotPresent = platform.raiseEmptyArrayAndInitValueNotPresent; + __chakraLibrary.raiseLengthIsTooBig = platform.raiseLengthIsTooBig; + __chakraLibrary.raiseFunctionArgument_NeedFunction = platform.raiseFunctionArgument_NeedFunction; + + _objectDefineProperty(__chakraLibrary.ArrayIterator.prototype, 'next', + // Object's getter and setter can get overriden on the prototype, in that case while setting the value attributes, we will end up with TypeError + // So, we need to set the prototype of attributes to null + setPrototype({ + value: function () { + let o = this; + + if (!(o instanceof __chakraLibrary.ArrayIterator)) { + __chakraLibrary.raiseNeedObjectOfType("Array Iterator.prototype.next", "Array Iterator"); + } + + let a = o.__$arrayObj$__; + + if (o.__$internalDone$__ === true) { + return { value: undefined, done: true }; + } else { + let index = o.__$nextIndex$__; + let len = __chakraLibrary.isArray(a) ? a.length : __chakraLibrary.GetLength(a); + + if (index < len) { // < comparison should happen instead of >= , because len can be NaN + let itemKind = o.__$kind$__; + + o.__$nextIndex$__ = index + 1; + + if (itemKind === 1 /*ArrayIterationKind.Value*/) { + return {value : a[index], done : false}; + } else if (itemKind === 0 /*ArrayIterationKind.Key*/) { // TODO (megupta) : Use clean enums here ? + return {value : index, done : false}; + } else { + let elementKey = index; + let elementValue = a[index]; + return {value : [elementKey, elementValue], done : false}; + } + } else { + o.__$internalDone$__ = true; + return { value : undefined, done : true}; + } + } + }, + writable: true, + enumerable: false, + configurable: true + }, null) + ); + + _objectDefineProperty(__chakraLibrary.ArrayIterator.prototype, Symbol.toStringTag, setPrototype({ value: "Array Iterator", writable: false, enumerable: false, configurable: true }, null)); + + _objectDefineProperty(__chakraLibrary.ArrayIterator.prototype.next, 'length', setPrototype({ value: 0, writable: false, enumerable: false, configurable: true }, null)); + + _objectDefineProperty(__chakraLibrary.ArrayIterator.prototype.next, 'name', setPrototype({ value: "next", writable: false, enumerable: false, configurable: true }, null)); + + platform.registerChakraLibraryFunction("CreateArrayIterator", function (arrayObj, iterationKind) { + return new __chakraLibrary.ArrayIterator(arrayObj, iterationKind); + }); + + platform.registerFunction('keys', function () { + if (this === null || this === undefined) { + __chakraLibrary.raiseThis_NullOrUndefined("Array.prototype.keys"); + } + let o = __chakraLibrary.Object(this); + return __chakraLibrary.CreateArrayIterator(o, 0 /* ArrayIterationKind.Key*/); + }); + + platform.registerFunction('values', function () { + if (this === null || this === undefined) { + __chakraLibrary.raiseThis_NullOrUndefined("Array.prototype.values"); + } + let o = __chakraLibrary.Object(this); + return __chakraLibrary.CreateArrayIterator(o, 1 /* ArrayIterationKind.Value*/); + }); + + platform.registerFunction('entries', function () { + if (this === null || this === undefined) { + __chakraLibrary.raiseThis_NullOrUndefined("Array.prototype.entries"); + } + let o = __chakraLibrary.Object(this); + return __chakraLibrary.CreateArrayIterator(o, 2 /* ArrayIterationKind.KeyAndValue*/); + }); + + platform.registerFunction('indexOf', function (searchElement, fromIndex = undefined) { + // ECMAScript 2017 #sec-array.prototype.indexof + + let {o, len} = __chakraLibrary.CheckArrayAndGetLen(this, "Array.prototype.indexOf"); + + if (len === 0) { + return -1; + } + + let n = __chakraLibrary.toInteger(fromIndex); + if (n >= len) { + return -1; + } + + let k; + + /* We refactored the code but it still respect the spec. + When using -0 or +0, the engine might think we are meaning + to use floating point numbers which can hurt performance. + So we refactored to use integers instead. */ + if (n === 0) { // Corresponds to "If n is -0, let k be +0" in the spec + k = 0; + } else if (n > 0) { // Corresponds to "If n >= 0, then [...] let k be n." + k = n; + } else { // Corresponds to "Else n < 0" + k = len + n; + + if (k < 0) { + k = 0; + } + } + + while (k < len) { + if (k in o) { + let elementK = o[k]; + + if (elementK === searchElement) { + return k; + } + } + + k++; + } + + return -1; + }); + + platform.registerChakraLibraryFunction("CheckArrayAndGetLen", function (obj, builtInFunc) { + if (__chakraLibrary.isArray(obj)) { + return { o: obj, len: obj.length }; + } else { + if (obj === null || obj === undefined) { + __chakraLibrary.raiseThis_NullOrUndefined(builtInFunc); + } + return { o: __chakraLibrary.Object(obj), len: __chakraLibrary.toLength(obj["length"]) }; + } + }); + + platform.registerFunction('filter', function (callbackfn, thisArg = undefined) { + // ECMAScript 2017 #sec-array.prototype.filter + + let {o, len} = __chakraLibrary.CheckArrayAndGetLen(this, "Array.prototype.filter"); + + if (typeof callbackfn !== "function") { + __chakraLibrary.raiseFunctionArgument_NeedFunction("Array.prototype.filter"); + } + + let a = __chakraLibrary.arraySpeciesCreate(o, 0); + let k = 0; + let to = 0; + + while (k < len) { + if (k in o) { + let kValue = o[k]; + if (__chakraLibrary.builtInCallInstanceFunction(callbackfn, thisArg, kValue, k, o)) { + __chakraLibrary.arrayCreateDataPropertyOrThrow(a, to, kValue); + to++; + } + } + k++; + } + + return a; + }); + + platform.registerChakraLibraryFunction("FlattenIntoArray", function(target, source, sourceLen, start, depth) + { + // this is FlattenIntoArray from the flat/flatMap proposal BUT with no mapperFunction + // a seperate function has been made to handle the case where there is a mapperFunction + + //1. Let targetIndex be start. + let targetIndex = start; + //2. Let sourceIndex be 0. + let sourceIndex = 0; + //3. Repeat, while sourceIndex < sourceLen + let element; + while (sourceIndex < sourceLen) { + // a. Let P be ! ToString(sourceIndex). + // b. Let exists be ? HasProperty(source, P). + if (sourceIndex in source) { + // c. If exists is true, then + // i. Let element be ? Get(source, P). + element = source[sourceIndex]; + // ii. If mapperFunction is present - skipped see separate function + // iii. Let shouldFlatten be false. + // iv. If depth > 0, then + // 1. Set shouldFlatten to ? IsArray(element). + if (depth > 0 && __chakraLibrary.isArray(element)) { + // v. If shouldFlatten is true, then + // 1. Let elementLen be ? ToLength(? Get(element, "length")). + // 2. Set targetIndex to ? FlattenIntoArray(target, element, elementLen, targetIndex, depth - 1). + targetIndex = __chakraLibrary.FlattenIntoArray(target, element, __chakraLibrary.toLength(element.length), targetIndex, depth - 1); + } else { + // vi. Else, + // 1. If targetIndex >= 2^53-1, throw a TypeError exception. + if (targetIndex >= 9007199254740991 /* 2^53-1 */) { + __chakraLibrary.raiseLengthIsTooBig("Array.prototype.flat"); + } + // 2. Perform ? CreateDataPropertyOrThrow(target, ! ToString(targetIndex), element). + __chakraLibrary.arrayCreateDataPropertyOrThrow(target, targetIndex, element); + // 3. Increase targetIndex by 1. + ++targetIndex; + } + } + // d. Increase sourceIndex by 1. + ++sourceIndex; + } + //4. Return targetIndex. + return targetIndex; + }); + + platform.registerChakraLibraryFunction("FlattenIntoArrayMapped", function(target, source, sourceLen, start, mapperFunction, thisArg) { + // this is FlattenIntoArray from the flat/flatMap proposal BUT with: + // depth = 1 and the presence of a mapperFunction guaranteed + // both these conditions are always met when this is called from flatMap + // Additionally this is slightly refactored rather than taking a thisArg + // the calling function binds the thisArg if it's required + //1. Let targetIndex be start. + let targetIndex = start; + //2. Let sourceIndex be 0. + let sourceIndex = 0; + //3. Repeat, while sourceIndex < sourceLen + + let element, innerLength, innerIndex; + while (sourceIndex < sourceLen) { + // a. Let P be ! ToString(sourceIndex). + // b. Let exists be ? HasProperty(source, P). + if (sourceIndex in source) { + // c. If exists is true, then + // i. Let element be ? Get(source, P). + // ii. If mapperFunction is present, then + // 1. Assert: thisArg is present. + // 2. Set element to ? Call(mapperFunction, thisArg , element, sourceIndex, source). + element = __chakraLibrary.builtInCallInstanceFunction(mapperFunction, thisArg, source[sourceIndex], sourceIndex, source); + // iii. Let shouldFlatten be false. + // iv. If depth > 0, then + // 1. Set shouldFlatten to ? IsArray(element). + // v. If shouldFlatten is true, then + // 1. Let elementLen be ? ToLength(? Get(element, "length")). + // 2. Set targetIndex to ? FlattenIntoArray(target, element, elementLen, targetIndex, depth - 1). + if (__chakraLibrary.isArray(element)) { + // instead of calling FlattenIntoArray use a simple loop here - as depth is always 0 + innerLength = __chakraLibrary.toLength(element.length); + innerIndex = 0; + while (innerIndex < innerLength) { + if (innerIndex in element) { + // 1. If targetIndex >= 2^53-1, throw a TypeError exception. + if (targetIndex >= 9007199254740991 /* 2^53-1 */) { + __chakraLibrary.raiseLengthIsTooBig("Array.prototype.flatMap"); + } + // 2. Perform ? CreateDataPropertyOrThrow(target, ! ToString(targetIndex), element). + __chakraLibrary.arrayCreateDataPropertyOrThrow(target, targetIndex, element[innerIndex]); + // 3. Increase targetIndex by 1. + ++targetIndex; + } + ++innerIndex; + } + } else { + // vi. Else, + // 1. If targetIndex >= 2^53-1, throw a TypeError exception. + if (targetIndex >= 9007199254740991 /* 2^53-1 */) { + __chakraLibrary.raiseLengthIsTooBig("Array.prototype.flatMap"); + } + // 2. Perform ? CreateDataPropertyOrThrow(target, ! ToString(targetIndex), element). + __chakraLibrary.arrayCreateDataPropertyOrThrow(target, targetIndex, element); + // 3. Increase targetIndex by 1. + ++targetIndex; + } + } + // d. Increase sourceIndex by 1. + ++sourceIndex; + } + //4. Return targetIndex. + return targetIndex; + }); + + platform.registerFunction('flat', function (depth = undefined) { + //1. Let O be ? ToObject(this value). + //2. Let sourceLen be ? ToLength(? Get(O, "length")). + let {o, len} = __chakraLibrary.CheckArrayAndGetLen(this, "Array.prototype.flat"); + + //3. Let depthNum be 1. + //4. If depth is not undefined, then + //5. Set depthNum to ? ToInteger(depth). + const depthNum = depth !== undefined ? __chakraLibrary.toInteger(depth) : 1; + //6. Let A be ? ArraySpeciesCreate(O, 0). + const A = __chakraLibrary.arraySpeciesCreate(o, 0); + //7. Perform ? FlattenIntoArray(A, O, sourceLen, 0, depthNum). + __chakraLibrary.FlattenIntoArray(A, o, len, 0, depthNum); + //8. Return A. + return A; + }); + + platform.registerFunction('flatMap', function (mapperFunction, thisArg = undefined) { + //1. Let O be ? ToObject(this value). + //2. Let sourceLen be ? ToLength(? Get(O, "length")). + let {o, len} = __chakraLibrary.CheckArrayAndGetLen(this, "Array.prototype.flatMap"); + + //3. If IsCallable(mapperFunction) is false throw a TypeError exception + if (typeof mapperFunction !== "function") { + __chakraLibrary.raiseFunctionArgument_NeedFunction("Array.prototype.flatMap"); + } + //4. If thisArg is present, let T be thisArg; else let T be undefined + //5. Let A be ? ArraySpeciesCreate(O, 0). + const A = __chakraLibrary.arraySpeciesCreate(o, 0); + //6. Perform ? FlattenIntoArray(A, O, sourceLen, 0, depthNum). + __chakraLibrary.FlattenIntoArrayMapped(A, o, len, 0, mapperFunction, thisArg); + //7. Return A. + return A; + }); + + platform.registerFunction('forEach', function (callbackfn, thisArg = undefined) { + // ECMAScript 2017 #sec-array.prototype.foreach + + //Let O be ? ToObject(this value). + //Let len be ? ToLength(? Get(O, "length")). + let {o, len} = __chakraLibrary.CheckArrayAndGetLen(this, "Array.prototype.forEach"); + + //If IsCallable(callbackfn) is false, throw a TypeError exception. + if (typeof callbackfn !== "function") { + __chakraLibrary.raiseFunctionArgument_NeedFunction("Array.prototype.forEach"); + } + + //If thisArg is present, let T be thisArg; else let T be undefined. + //Let k be 0. + let k = 0; + + //Repeat, while k < len + while (k < len) { + //Let Pk be ! ToString(k). + //Let kPresent be ? HasProperty(O, Pk). + //If kPresent is true, then + if (k in o) { + //Let kValue be ? Get(O, Pk). + let kValue = o[k]; + //Perform ? Call(callbackfn, T, kValue, k, O ). + __chakraLibrary.builtInCallInstanceFunction(callbackfn, thisArg, kValue, k, o); + } + //Increase k by 1. + k++; + } + //Return undefined. + return undefined; + }); + + platform.registerFunction('some', function (callbackfn, thisArg = undefined) { + // ECMAScript 2017 #sec-array.prototype.some + + //Let O be ? ToObject(this value). + //Let len be ? ToLength(? Get(O, "length")). + let {o, len} = __chakraLibrary.CheckArrayAndGetLen(this, "Array.prototype.some"); + + //If IsCallable(callbackfn) is false, throw a TypeError exception. + if (typeof callbackfn !== "function") { + __chakraLibrary.raiseFunctionArgument_NeedFunction("Array.prototype.some"); + } + + //If thisArg is present, let T be thisArg; else let T be undefined. + //Let k be 0. + let k = 0; + + //Repeat, while k < len + while (k < len) { + //Let Pk be ! ToString(k). + //Let kPresent be ? HasProperty(O, Pk). + //If kPresent is true, then + if (k in o) { + //Let kValue be ? Get(O, Pk). + let kValue = o[k]; + //Let testResult be ToBoolean(? Call(callbackfn, T, kValue, k, O )). + //If testResult is true, return true. + if (__chakraLibrary.builtInCallInstanceFunction(callbackfn, thisArg, kValue, k, o)) { + return true; + } + } + //Increase k by 1. + k++; + } + //Return false. + return false; + }); + + platform.registerFunction('every', function (callbackfn, thisArg = undefined) { + // ECMAScript 2017 #sec-array.prototype.every + + //Let O be ? ToObject(this value). + //Let len be ? ToLength(? Get(O, "length")). + let {o, len} = __chakraLibrary.CheckArrayAndGetLen(this, "Array.prototype.every"); + + //If IsCallable(callbackfn) is false, throw a TypeError exception. + if (typeof callbackfn !== "function") { + __chakraLibrary.raiseFunctionArgument_NeedFunction("Array.prototype.every"); + } + + //If thisArg is present, let T be thisArg; else let T be undefined. + //Let k be 0. + let k = 0; + + //Repeat, while k < len + while (k < len) { + //Let Pk be ! ToString(k). + //Let kPresent be ? HasProperty(O, Pk). + //If kPresent is true, then + if (k in o) { + //Let kValue be ? Get(O, Pk). + let kValue = o[k]; + //Let testResult be ToBoolean(? Call(callbackfn, T, kValue, k, O )). + //If testResult is false, return false. + if (!__chakraLibrary.builtInCallInstanceFunction(callbackfn, thisArg, kValue, k, o)) { + return false; + } + } + //Increase k by 1. + k++; + } + //Return true. + return true; + }); + + platform.registerFunction('includes', function (searchElement, fromIndex = undefined) { + // ECMAScript 2017 #sec-array.prototype.includes + + //Let O be ? ToObject(this value). + //Let len be ? ToLength(? Get(O, "length")). + let {o, len} = __chakraLibrary.CheckArrayAndGetLen(this,"Array.prototype.includes"); + + //If len is 0, return false. + if (len === 0) { + return false; + } + + //Let n be ? ToInteger(fromIndex). + //Assert: If fromIndex is undefined, then n is 0. + let n = __chakraLibrary.toInteger(fromIndex); + let k; + + //If n >= 0, then + // Let k be n. + //Else n < 0, + // Let k be len + n. + // If k < 0, set k to 0. + if (n >= 0) { + k = n; + } + else { + k = len + n; + + if (k < 0) { + k = 0; + } + } + + //Repeat, while k < len + while (k < len) { + //Let elementK be the result of ? Get(O, ! ToString(k)). + let elementK = o[k]; + //If SameValueZero(searchElement, elementK) is true, return true. + if ((searchElement === elementK) || (searchElement !== searchElement && elementK !== elementK)) { // check for isNaN + return true; + } + //Increase k by 1. + k++; + } + //Return false. + return false; + }); + + platform.registerFunction('reduce', function (callbackfn, initialValue = undefined) { + // ECMAScript 2017 #sec-array.prototype.reduce + + //Let O be ? ToObject(this value). + //Let len be ? ToLength(? Get(O, "length")). + let {o, len} = __chakraLibrary.CheckArrayAndGetLen(this, "Array.prototype.reduce"); + + //If IsCallable(callbackfn) is false, throw a TypeError exception. + if (typeof callbackfn !== "function") { + __chakraLibrary.raiseFunctionArgument_NeedFunction("Array.prototype.reduce"); + } + + //If len is 0 and initialValue is not present, throw a TypeError exception. + if (len === 0 && initialValue === undefined) { + __chakraLibrary.raiseEmptyArrayAndInitValueNotPresent("Array.prototype.reduce"); + } + + //Let k be 0. + //Let accumulator be undefined. + let k = 0; + let accumulator = undefined; + + //If initialValue is present, then + //Set accumulator to initialValue. + if (arguments.length > 1) { //Checking for array length because intialValue could be passed in as undefined + accumulator = initialValue; + } + //Else initialValue is not present, + else { + //Let kPresent be false. + let kPresent = false; + //Repeat, while kPresent is false and k < len + while (!kPresent && k < len) { + //Let Pk be ! ToString(k). + //Set kPresent to ? HasProperty(O, Pk). + //If kPresent is true, then + // Set accumulator to ? Get(O, Pk). + if (k in o) { + kPresent = true; + accumulator = o[k]; + } + //Increase k by 1. + k++; + } + //If kPresent is false, throw a TypeError exception. + if (!kPresent) { + __chakraLibrary.raiseEmptyArrayAndInitValueNotPresent("Array.prototype.reduce"); + } + } + + //Repeat, while k < len + while (k < len) { + //Let Pk be ! ToString(k). + //Let kPresent be ? HasProperty(O, Pk). + //If kPresent is true, then + if (k in o) { + //Let kValue be ? Get(O, Pk). + let kValue = o[k]; + //Set accumulator to ? Call(callbackfn, undefined, accumulator, kValue, k, O ). + accumulator = __chakraLibrary.builtInCallInstanceFunction(callbackfn, undefined, accumulator, kValue, k, o); + } + //Increase k by 1. + k++; + } + //Return accumulator. + return accumulator; + }); +}); diff --git a/lib/Runtime/Library/InJavascript/GenByteCode.cmd b/lib/Runtime/Library/InJavascript/GenByteCode.cmd deleted file mode 100644 index 63bed0a289e..00000000000 --- a/lib/Runtime/Library/InJavascript/GenByteCode.cmd +++ /dev/null @@ -1,85 +0,0 @@ -::------------------------------------------------------------------------------------------------------- -:: Copyright (C) Microsoft. All rights reserved. -:: Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. -::------------------------------------------------------------------------------------------------------- - -@echo off -setlocal -set _HASERROR=0 -set _binary=ch.exe -set _BuildDir=%~dp0..\..\..\..\Build - -if "%_FILE%" == "" ( - set "_FILE=%~dp0*.js" -) - -:ContinueArgParse -if not [%1]==[] ( - if [%1]==[-nojit] ( - set _suffix=.nojit - goto :ContinueArgParseEnd - ) - if [%1]==[-binary] ( - if [%2]==[] ( - echo Error: no argument supplied to -binary. Exiting ... - exit /b 1 - ) - set _binary=%2 - shift - goto :ContinueArgParseEnd - ) - if [%1]==[-bindir] ( - if [%2]==[] ( - echo Error: no argument supplied to -bindir. Exiting ... - exit /b 1 - ) - set _BinLocation=%2 - shift - goto :ContinueArgParseEnd - ) - - :ContinueArgParseEnd - shift - goto :ContinueArgParse -) - -:: This script will expect %_binary% to be built for x86_debug and x64_debug - -if "%OutBaseDir%" NEQ "" ( - set _BinLocation=%OutBaseDir%\Chakra.Core%_suffix%\bin -) -if "%_BinLocation%"=="" ( - set _BinLocation=%_BuildDir%\VcBuild%_suffix%\bin -) - -if not exist %_BinLocation%\x86_debug\%_binary% ( - echo Error: %_BinLocation%\x86_debug\%_binary% not found, please build sources. Exiting ... - exit /b 1 -) - -if not exist %_BinLocation%\x64_debug\%_binary% ( - echo Error: %_BinLocation%\x64_debug\%_binary% not found, please build sources. Exiting ... - exit /b 1 -) - -for %%i in (%_FILE%) do ( - call :GenerateLibraryByteCodeHeader %%i -) -exit /B %_HASERROR% - -:GenerateLibraryBytecodeHeader - -echo Generating %1%_suffix%.bc.32b.h -call :Generate %1 %_BinLocation%\x86_debug %1%_suffix%.bc.32b.h -echo Generating %1%_suffix%.bc.64b.h -call :Generate %1 %_BinLocation%\x64_debug %1%_suffix%.bc.64b.h -exit /B 0 - -:Generate -%2\%_binary% -GenerateLibraryByteCodeHeader:%3 -Intl %1 -if "%errorlevel%" NEQ "0" ( - echo %1: Error generating bytecode file. Ensure %3 writable. - set _HASERROR=1 -) else ( - echo Bytecode generated. Please rebuild to incorporate the new bytecode. -) diff --git a/lib/Runtime/Library/InJavascript/Intl.js b/lib/Runtime/Library/InJavascript/Intl.js index d2760121e9e..aa9ed91ec68 100644 --- a/lib/Runtime/Library/InJavascript/Intl.js +++ b/lib/Runtime/Library/InJavascript/Intl.js @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- @@ -55,6 +56,8 @@ }); } + var Intl = platform.Intl; + var Boolean = platform.Boolean; var Object = platform.Object; var RegExp = platform.RegExp; @@ -68,7 +71,7 @@ var Math = setPrototype({ abs: platform.builtInMathAbs, floor: platform.builtInMathFloor, - max: platform.builtInMathMax, + max: platform.builtInMath_object_max, pow: platform.builtInMathPow }, null); @@ -83,9 +86,8 @@ _objectDefineProperty(obj, prop, setPrototype(attributes, null)); }; - var ArrayInstanceForEach = platform.builtInJavascriptArrayEntryForEach; - var ArrayInstanceIndexOf = platform.builtInJavascriptArrayEntryIndexOf; - var ArrayInstancePush = platform.builtInJavascriptArrayEntryPush; + var ArrayInstanceForEach = platform.builtInArray_prototype_forEach; + var ArrayInstanceIndexOf = platform.builtInArray_prototype_indexOf; var ArrayInstanceJoin = platform.builtInJavascriptArrayEntryJoin; var FunctionInstanceBind = platform.builtInJavascriptFunctionEntryBind; @@ -96,22 +98,9 @@ var StringInstanceToLowerCase = platform.builtInJavascriptStringEntryToLowerCase; var StringInstanceToUpperCase = platform.builtInJavascriptStringEntryToUpperCase; - var ObjectPrototype = platform.Object_prototype; - var isFinite = platform.builtInGlobalObjectEntryIsFinite; var isNaN = platform.builtInGlobalObjectEntryIsNaN; - // Keep this "enum" in sync with IntlEngineInterfaceExtensionObject::EntryIntl_RegisterBuiltInFunction - const IntlBuiltInFunctionID = setPrototype({ - MIN: 0, - DateToLocaleString: 0, - DateToLocaleDateString: 1, - DateToLocaleTimeString: 2, - NumberToLocaleString: 3, - StringLocaleCompare: 4, - MAX: 5 - }, null); - const _ = { toUpperCase(str) { return callInstanceFunc(StringInstanceToUpperCase, str); }, toLowerCase(str) { return callInstanceFunc(StringInstanceToLowerCase, str); }, @@ -123,14 +112,13 @@ repeat(str, count) { return callInstanceFunc(platform.builtInJavascriptStringEntryRepeat, str, count); }, forEach(array, func) { return callInstanceFunc(ArrayInstanceForEach, array, func); }, - push(array, ...els) { return callInstanceFunc(ArrayInstancePush, array, ...els); }, join(array, sep) { return callInstanceFunc(ArrayInstanceJoin, array, sep); }, arrayIndexOf(array, el, from) { return callInstanceFunc(ArrayInstanceIndexOf, array, el, from); }, map(array, func) { return callInstanceFunc(platform.builtInJavascriptArrayEntryMap, array, func); }, - reduce(array, func, init) { return callInstanceFunc(platform.builtInJavascriptArrayEntryReduce, array, func, init); }, + reduce(array, func, init) { return callInstanceFunc(platform.builtInArray_prototype_reduce, array, func, init); }, slice(array, start, end) { return callInstanceFunc(platform.builtInJavascriptArrayEntrySlice, array, start, end); }, concat(array, ...els) { return callInstanceFunc(platform.builtInJavascriptArrayEntryConcat, array, ...els); }, - filter(array, func) { return callInstanceFunc(platform.builtInJavascriptArrayEntryFilter, array, func); }, + filter(array, func) { return callInstanceFunc(platform.builtInArray_prototype_filter, array, func); }, unique(array) { return _.filter(array, (v, i) => _.arrayIndexOf(array, v) === i); }, keys: platform.builtInJavascriptObjectEntryKeys, @@ -141,13 +129,13 @@ platform.builtInJavascriptObjectEntryDefineProperty(o, prop, desc); }, isExtensible: platform.builtInJavascriptObjectEntryIsExtensible, - create(proto = null) { return platform.builtInJavascriptObjectCreate(proto); }, + create(proto = null) { return platform.builtInJavascriptObjectEntryCreate(proto); }, setPrototypeOf(target, proto = null) { return platform.builtInSetPrototype(target, proto); }, abs: platform.builtInMathAbs, // Make _.floor more like ECMA262 #sec-mathematical-operations' floor by normalizing -0 floor(x) { return x === 0 ? 0 : platform.builtInMathFloor(x) }, - max: platform.builtInMathMax, + max: platform.builtInMath_object_max, pow: platform.builtInMathPow, isFinite: platform.builtInGlobalObjectEntryIsFinite, @@ -159,46 +147,6 @@ apply(func, that, args) { return callInstanceFunc(platform.builtInJavascriptFunctionEntryApply, func, that, args); }, }; - const raise = { - rangeError() { return arguments.length === 3 ? platform.raiseOptionValueOutOfRange_3(...arguments) : platform.raiseOptionValueOutOfRange(); }, - assert(test, err) { return test ? undefined : platform.raiseAssert(err || new Error("Assert failed")); } - }; - - // Keep these "enums" in sync with lib/Runtime/PlatformAgnostic/Intl.h - const CollatorSensitivity = bare({ - base: 0, - accent: 1, - case: 2, - variant: 3, - DEFAULT: 3 - }); - const CollatorCaseFirst = bare({ - upper: 0, - lower: 1, - false: 2, - DEFAULT: 2 - }); - const NumberFormatStyle = bare({ - DEFAULT: 0, // "decimal" is the default - DECIMAL: 0, // Intl.NumberFormat(locale, { style: "decimal" }); // aka in our code as "number" - PERCENT: 1, // Intl.NumberFormat(locale, { style: "percent" }); - CURRENCY: 2, // Intl.NumberFormat(locale, { style: "currency", ... }); - }); - const NumberFormatCurrencyDisplay = bare({ - DEFAULT: 0, // "symbol" is the default - SYMBOL: 0, // Intl.NumberFormat(locale, { style: "currency", currencyDisplay: "symbol" }); // e.g. "$" or "US$" depeding on locale - CODE: 1, // Intl.NumberFormat(locale, { style: "currency", currencyDisplay: "code" }); // e.g. "USD" - NAME: 2, // Intl.NumberFormat(locale, { style: "currency", currencyDisplay: "name" }); // e.g. "US dollar" - }); - - const toEnum = function (enumObject, key) { - if (!key || typeof key !== "string") { - return enumObject.DEFAULT; - } else { - return enumObject[key]; - } - } - // When this file was originally written, it assumed Windows Globalization semantics. // Throughout the transition to ICU, we tried to share as much code as possible between WinGlob and ICU. // However, because ICU has different semantics and our ICU-based implementation tries to match a newer @@ -236,6 +184,19 @@ return platform.tagPublicLibraryCode(f, name); }; + const createPublicMethod = function (name, f) { + return platform.tagPublicLibraryCode(f, name, false); + } + + const OrdinaryCreateFromConstructor = function (constructor, intrinsicDefaultProto) { + let proto = constructor.prototype; + if (typeof proto !== "object") { + proto = intrinsicDefaultProto; + } + + return _.create(proto); + }; + /** * Determines the best possible locale available in the system * @@ -280,33 +241,6 @@ } }; - /** - * Returns an array of acceptable values for a given key in a given locale. It is expected that - * locale is one that has already been validated by platform.is*LocaleAvailable and key is limited - * to the [[RelevantExtensionKeys]] of Collator, NumberFormat, and DateTimeFormat. - * - * ECMA402: #sec-internal-slots ([[SortLocaleData]], [[SearchLocaleData]], and [[LocaleData]]) - * - * @param {String} key a unicode extension key like "co", "ca", etc - * @param {String} locale the locale for which to get the given key's data - * @returns {String[]} - */ - const getKeyLocaleData = function (key, locale) { - // NOTE: keep this enum in sync with `enum class LocaleDataKind` in IntlEngineInterfaceExtensionObject.cpp - const LocaleDataKind = { - co: 0, - kf: 1, - kn: 2, - ca: 3, - nu: 4, - hc: 5, - }; - - const keyLocaleData = platform.getLocaleData(LocaleDataKind[key], locale); - - return keyLocaleData; - }; - /** * Determines which locale (or fallback) to use of an array of locales. * @@ -349,7 +283,6 @@ * @param {String} key the specific key we are looking for in the extension, such as "co" */ const UnicodeExtensionValue = function (extension, key) { - raise.assert(key.length === 2); const size = extension.length; // search for the key-value pair @@ -410,7 +343,7 @@ const result = bare({ dataLocale: foundLocale }); let supportedExtension = "-u"; _.forEach(relevantExtensionKeys, function (key) { - const keyLocaleData = getKeyLocaleData(key, foundLocale); + const keyLocaleData = platform.getLocaleData(platform.LocaleDataKind[key], foundLocale); let value = keyLocaleData[0]; let supportedExtensionAddition = ""; if (r.extension) { @@ -478,13 +411,30 @@ return v !== undefined ? Boolean(v) : undefined; }, - ToUint32(n) { - var num = Number(n), - ret = 0; - if (!isNaN(num) && isFinite(num)) { - ret = _.abs(num % _.pow(2, 32)); + ToInteger(n) { + const number = Number(n); + if (isNaN(number)) { + return 0; + } else if (number === 0 || !isFinite(number)) { + return number; } - return ret; + + const ret = _.floor(_.abs(number)); + if (number < 0) { + return -ret + } else { + return ret; + } + }, + + ToLength(n) { + const len = Internal.ToInteger(n); + if (len <= 0) { + return 0; + } + + const max = _.pow(2, 53) - 1; + return max < len ? max : len; } }); @@ -744,8 +694,8 @@ const seen = []; const O = typeof locales === "string" ? [locales] : Internal.ToObject(locales); - const len = Internal.ToUint32(O.length); - let k = 0; + const len = Internal.ToLength(O.length); + let k = 0, i = 0;; while (k < len) { const Pk = Internal.ToString(k); @@ -765,7 +715,7 @@ // See comment in platform.normalizeLanguageTag about when this happens platform.raiseLocaleNotWellFormed(tag); } else if (_.arrayIndexOf(seen, canonicalizedTag) === -1) { - _.push(seen, canonicalizedTag); + _.defineProperty(seen, i++, {value: canonicalizedTag, enumerable: true, configurable: true, writable: true}); } } @@ -785,10 +735,11 @@ */ const LookupSupportedLocales = function (isAvailableLocale, requestedLocales) { const subset = []; + let i = 0; _.forEach(requestedLocales, function (locale) { const noExtensionsLocale = parseLangtag(locale).base; if (BestAvailableLocale(isAvailableLocale, noExtensionsLocale) !== undefined) { - _.push(subset, locale); + _.defineProperty(subset, i++, {value: locale, enumerable: true, configurable: true, writable: true}); } }); @@ -864,56 +815,9 @@ return supportedLocales; }; - // the following two functions exist solely to prevent calling new Intl.{getCanonicalLocales|*.supportedLocalesOf} - // both should be bound to `intlStaticMethodThisArg` which has a hiddenObject with isValid = "Valid" - const intlStaticMethodThisArg = _.create(); - platform.setHiddenObject(intlStaticMethodThisArg, { isValid: "Valid" }); - const supportedLocalesOf_unconstructable = function (that, functionName, isAvailableLocale, requestedLocales, options) { - if (that === null || that === undefined) { - platform.raiseNotAConstructor(functionName); - } - - const hiddenObj = platform.getHiddenObject(that); - if (!hiddenObj || hiddenObj.isValid !== "Valid") { - platform.raiseNotAConstructor(functionName); - } - - return SupportedLocales(isAvailableLocale, CanonicalizeLocaleList(requestedLocales), options); - } - - const getCanonicalLocales_unconstructable = function (that, functionName, locales) { - if (that === null || that === undefined) { - platform.raiseNotAConstructor(functionName); - } - - const hiddenObj = platform.getHiddenObject(that); - if (!hiddenObj || hiddenObj.isValid !== "Valid") { - platform.raiseNotAConstructor(functionName); - } - - return CanonicalizeLocaleList(locales); - } - - // We go through a bit of a circus here to create and bind the getCanonicalLocales function for two reasons: - // 1. We want its name to be "getCanonicalLocales" - // 2. We want to make sure it isnt callable as `new {Intl.}getCanonicalLocales()` - // To accomplish (2), since we cant check CallFlags_New in JS Builtins, the next best thing is to bind the function to a known - // `this` and ensure that that is properly `this` on call (if not, we were called with `new` and should bail). - // However, this makes (1) more difficult, since binding a function changes its name - // When https://github.com/Microsoft/ChakraCore/issues/637 is fixed and we have a way - // to make built-in functions non-constructible, we can (and should) rethink this strategy - // TODO(jahorto): explore making these arrow functions, as suggested in #637, to get non-constructable "for free" if (InitType === "Intl") { - const getCanonicalLocales_name = "Intl.getCanonicalLocales"; - const getCanonicalLocales_func = tagPublicFunction(getCanonicalLocales_name, function (locales) { - return getCanonicalLocales_unconstructable(this, getCanonicalLocales_name, locales); - }); - const getCanonicalLocales = _.bind(getCanonicalLocales_func, intlStaticMethodThisArg); - _.defineProperty(getCanonicalLocales, 'name', { - value: 'getCanonicalLocales', - writable: false, - enumerable: false, - configurable: true, + const getCanonicalLocales = createPublicMethod("Intl.getCanonicalLocales", function getCanonicalLocales(locales) { + return CanonicalizeLocaleList(locales); }); _.defineProperty(Intl, "getCanonicalLocales", { value: getCanonicalLocales, @@ -944,7 +848,7 @@ } }); - return _.setPrototypeOf(resolved, platform.Object_prototype); + return _.setPrototypeOf(resolved, platform.Object.prototype); }; // Intl.Collator, String.prototype.localeCompare @@ -957,9 +861,16 @@ const requestedLocales = CanonicalizeLocaleList(locales); options = options === undefined ? _.create() : Internal.ToObject(options); + // The spec says that usage dictates whether to use "[[SearchLocaleData]]" or "[[SortLocaleData]]" + // ICU has no concept of a difference between the two, and instead sort/search corresponds to + // collation = "standard" or collation = "search", respectively. Standard/sort is the default. + // Thus, when the usage is sort, we can accept and honor -u-co in the locale, while if usage is search, + // we are going to overwrite any -u-co value provided before giving the locale to ICU anyways. + // To make the logic simpler, we can simply pretend like we don't accept a -u-co value if the usage is search. + // See the lazy UCollator initialization in EntryIntl_LocaleCompare for where the collation value + // gets overwritten by "search". collator.usage = GetOption(options, "usage", "string", ["sort", "search"], "sort"); - // TODO: determine the difference between sort and search locale data - // const collatorLocaleData = collator.usage === "sort" ? localeData : localeData; + const relevantExtensionKeys = collator.usage === "sort" ? ["co", "kn", "kf"] : ["kn", "kf"]; const opt = _.create(); opt.matcher = GetOption(options, "localeMatcher", "string", ["lookup", "best fit"], "best fit"); @@ -967,15 +878,17 @@ opt.kn = kn === undefined ? kn : Internal.ToString(kn); opt.kf = GetOption(options, "caseFirst", "string", ["upper", "lower", "false"], undefined); - const r = ResolveLocale(platform.isCollatorLocaleAvailable, requestedLocales, opt, ["co", "kn", "kf"]); + const r = ResolveLocale(platform.isCollatorLocaleAvailable, requestedLocales, opt, relevantExtensionKeys); collator.locale = r.locale; - collator.collation = r.co === null ? "default" : r.co; + // r.co is null when usage === "sort" and no -u-co is provided + // r.co is undefined when usage === "search", since relevantExtensionKeys doesn't even look for -co + collator.collation = r.co === null || r.co === undefined ? "default" : r.co; collator.numeric = r.kn === "true"; collator.caseFirst = r.kf; - collator.caseFirstEnum = toEnum(CollatorCaseFirst, collator.caseFirst); + collator.caseFirstEnum = platform.CollatorCaseFirst[collator.caseFirst]; collator.sensitivity = GetOption(options, "sensitivity", "string", ["base", "accent", "case", "variant"], "variant"); - collator.sensitivityEnum = toEnum(CollatorSensitivity, collator.sensitivity); + collator.sensitivityEnum = platform.CollatorSensitivity[collator.sensitivity]; collator.ignorePunctuation = GetOption(options, "ignorePunctuation", "boolean", undefined, false); @@ -986,7 +899,7 @@ let localeCompareStateCache; // Make arguments undefined to ensure that localeCompare.length === 1 - platform.registerBuiltInFunction(tagPublicFunction("String.prototype.localeCompare", function (that, locales = undefined, options = undefined) { + platform.registerBuiltInFunction(createPublicMethod("String.prototype.localeCompare", function localeCompare(that, locales = undefined, options = undefined) { if (this === undefined || this === null) { platform.raiseThis_NullOrUndefined("String.prototype.localeCompare"); } @@ -1010,43 +923,35 @@ } return platform.localeCompare(thisStr, thatStr, stateObject, /* forStringPrototypeLocaleCompare */ true); - }), IntlBuiltInFunctionID.StringLocaleCompare); + }), platform.BuiltInFunctionID.StringLocaleCompare); // If we were only initializing Intl for String.prototype, don't initialize Intl.Collator if (InitType === "String") { return; } - // using const f = function ... to remain consistent with the rest of the file, - // but the following function expressions get a name themselves to satisfy Intl.Collator.name - // and Intl.Collator.prototype.compare.name - const Collator = tagPublicFunction("Intl.Collator", function Collator(locales = undefined, options = undefined) { - if (this === Intl || this === undefined) { - return new Collator(locales, options); - } + const CollatorPrototype = {}; - let obj = Internal.ToObject(this); - if (!_.isExtensible(obj)) { - platform.raiseObjectIsNonExtensible("Collator"); - } + const Collator = tagPublicFunction("Intl.Collator", function (locales = undefined, options = undefined) { + const newTarget = new.target === undefined ? Collator : new.target; + const collator = OrdinaryCreateFromConstructor(newTarget, CollatorPrototype); // Use the hidden object to store data - let hiddenObject = platform.getHiddenObject(obj); - + let hiddenObject = platform.getHiddenObject(collator); if (hiddenObject === undefined) { hiddenObject = _.create(); - platform.setHiddenObject(obj, hiddenObject); + platform.setHiddenObject(collator, hiddenObject); } InitializeCollator(hiddenObject, locales, options); // Add the bound compare - hiddenObject.boundCompare = _.bind(compare, obj); + hiddenObject.boundCompare = _.bind(compare, collator); delete hiddenObject.boundCompare.name; - return obj; + return collator; }); - const compare = tagPublicFunction("Intl.Collator.prototype.compare", function compare(x, y) { + const compare = createPublicMethod("Intl.Collator.prototype.compare", function compare(x, y) { if (typeof this !== "object") { platform.raiseNeedObjectOfType("Collator.prototype.compare", "Collator"); } @@ -1059,41 +964,31 @@ return platform.localeCompare(String(x), String(y), hiddenObject, /* forStringPrototypeLocaleCompare */ false); }); - // See explanation of `getCanonicalLocales` - const collator_supportedLocalesOf_name = "Intl.Collator.supportedLocalesOf"; - const collator_supportedLocalesOf_func = tagPublicFunction(collator_supportedLocalesOf_name, function (locales, options = undefined) { - return supportedLocalesOf_unconstructable(this, collator_supportedLocalesOf_name, platform.isCollatorLocaleAvailable, locales, options); - }); - const collator_supportedLocalesOf = _.bind(collator_supportedLocalesOf_func, intlStaticMethodThisArg); - _.defineProperty(collator_supportedLocalesOf, "name", { - value: "supportedLocalesOf", - writable: false, - enumerable: false, - configurable: true, + const supportedLocalesOf = createPublicMethod("Intl.Collator.supportedLocalesOf", function supportedLocalesOf(locales, options = undefined) { + return SupportedLocales(platform.isCollatorLocaleAvailable, CanonicalizeLocaleList(locales), options); }); _.defineProperty(Collator, "supportedLocalesOf", { - value: collator_supportedLocalesOf, + value: supportedLocalesOf, writable: true, enumerable: false, configurable: true, }); _.defineProperty(Collator, "prototype", { - value: new Collator(), + value: CollatorPrototype, writable: false, enumerable: false, configurable: false }); - setPrototype(Collator.prototype, Object.prototype); - _.defineProperty(Collator.prototype, "constructor", { + _.defineProperty(CollatorPrototype, "constructor", { value: Collator, writable: true, enumerable: false, configurable: true }); - _.defineProperty(Collator.prototype, "resolvedOptions", { - value: function resolvedOptions() { + _.defineProperty(CollatorPrototype, "resolvedOptions", { + value: createPublicMethod("Intl.Collator.prototype.resolvedOptions", function resolvedOptions() { if (typeof this !== "object") { platform.raiseNeedObjectOfType("Collator.prototype.resolvedOptions", "Collator"); } @@ -1113,14 +1008,14 @@ ]; return createResolvedOptions(options, hiddenObject); - }, + }), writable: true, enumerable: false, configurable: true }); // test262's test\intl402\Collator\prototype\compare\name.js checks the name of the descriptor's getter function - const getCompare = function () { + const getCompare = createPublicMethod("get compare", function () { if (typeof this !== "object") { platform.raiseNeedObjectOfType("Collator.prototype.compare", "Collator"); } @@ -1131,15 +1026,9 @@ } return hiddenObject.boundCompare; - }; - _.defineProperty(getCompare, "name", { - value: "get compare", - writable: false, - enumerable: false, - configurable: true, }); - _.defineProperty(Collator.prototype, "compare", { - get: tagPublicFunction("get compare", getCompare), + _.defineProperty(CollatorPrototype, "compare", { + get: getCompare, enumerable: false, configurable: true }); @@ -1166,7 +1055,7 @@ const style = GetOption(options, "style", "string", ["decimal", "percent", "currency"], "decimal"); nf.style = style; - nf.formatterToUse = toEnum(NumberFormatStyle, _.toUpperCase(style)); + nf.formatterToUse = platform.NumberFormatStyle[style]; const useCurrency = style === "currency"; let currency = GetOption(options, "currency", "string", undefined, undefined); @@ -1185,8 +1074,8 @@ let currencyDisplay = GetOption(options, "currencyDisplay", "string", ["code", "symbol", "name"], "symbol"); if (useCurrency) { - nf.currencyDisplay = currencyDisplay - nf.currencyDisplayToUse = toEnum(NumberFormatCurrencyDisplay, _.toUpperCase(currencyDisplay)); + nf.currencyDisplay = currencyDisplay; + nf.currencyDisplayToUse = platform.NumberFormatCurrencyDisplay[currencyDisplay]; } let mnfdDefault, mxfdDefault; @@ -1214,7 +1103,7 @@ return nf; }; - platform.registerBuiltInFunction(tagPublicFunction("Number.prototype.toLocaleString", function () { + platform.registerBuiltInFunction(createPublicMethod("Number.prototype.toLocaleString", function toLocaleString() { if (typeof this !== "number" && !(this instanceof Number)) { platform.raiseNeedObjectOfType("Number.prototype.toLocaleString", "Number"); } @@ -1224,54 +1113,52 @@ const n = Internal.ToNumber(this); return platform.formatNumber(n, stateObject, /* toParts */ false, /* forNumberPrototypeToLocaleString */ true); - }), IntlBuiltInFunctionID.NumberToLocaleString); + }), platform.BuiltInFunctionID.NumberToLocaleString); if (InitType === "Number") { return; } - const NumberFormat = tagPublicFunction("Intl.NumberFormat", function NumberFormat(locales = undefined, options = undefined) { - if (this === Intl || this === undefined) { - return new NumberFormat(locales, options); - } - - const obj = Internal.ToObject(this); + const NumberFormatPrototype = {}; - if (!_.isExtensible(obj)) { - platform.raiseObjectIsNonExtensible("NumberFormat"); - } + const NumberFormat = tagPublicFunction("Intl.NumberFormat", function NumberFormat(locales = undefined, options = undefined) { + const newTarget = new.target === undefined ? NumberFormat : new.target; + const numberFormat = OrdinaryCreateFromConstructor(newTarget, NumberFormatPrototype); - // Use the hidden object to store data - let hiddenObject = platform.getHiddenObject(obj); + let hiddenObject = platform.getHiddenObject(numberFormat); if (hiddenObject === undefined) { hiddenObject = _.create(); - platform.setHiddenObject(obj, hiddenObject); + platform.setHiddenObject(numberFormat, hiddenObject); } InitializeNumberFormat(hiddenObject, locales, options); - hiddenObject.boundFormat = _.bind(format, obj) - delete hiddenObject.boundFormat.name; + if (new.target === undefined && this instanceof NumberFormat) { + _.defineProperty(this, platform.FallbackSymbol, { + value: numberFormat, + writable: false, + enumerable: false, + configurable: false + }); - return obj; + return this; + } + + return numberFormat; }); - const format = tagPublicFunction("Intl.NumberFormat.prototype.format", function format(n) { + // format should always be bound to a valid NumberFormat's hiddenObject by getFormat() + const format = createPublicMethod("Intl.NumberFormat.prototype.format", function format(n) { n = Internal.ToNumber(n); - if (typeof this !== "object") { + if (!this || !this.initializedNumberFormat) { platform.raiseNeedObjectOfType("NumberFormat.prototype.format", "NumberFormat"); } - const hiddenObject = platform.getHiddenObject(this); - if (hiddenObject === undefined || !hiddenObject.initializedNumberFormat) { - platform.raiseNeedObjectOfType("NumberFormat.prototype.format", "NumberFormat"); - } - - return platform.formatNumber(n, hiddenObject, /* toParts */ false, /* forNumberPrototypeToLocaleString */ false); + return platform.formatNumber(n, this, /* toParts */ false, /* forNumberPrototypeToLocaleString */ false); }); - const formatToParts = tagPublicFunction("Intl.NumberFormat.prototype.formatToParts", function formatToParts(n) { + const formatToParts = createPublicMethod("Intl.NumberFormat.prototype.formatToParts", function formatToParts(n) { n = Internal.ToNumber(n); if (typeof this !== "object") { @@ -1286,86 +1173,95 @@ return platform.formatNumber(n, hiddenObject, /* toParts */ true, /* forNumberPrototypeToLocaleString */ false); }); - // See explanation of `getCanonicalLocales` - const numberFormat_supportedLocalesOf_name = "Intl.NumberFormat.supportedLocalesOf"; - const numberFormat_supportedLocalesOf_func = tagPublicFunction(numberFormat_supportedLocalesOf_name, function (locales, options = undefined) { - return supportedLocalesOf_unconstructable(this, numberFormat_supportedLocalesOf_name, platform.isNFLocaleAvailable, locales, options); - }); - const numberFormat_supportedLocalesOf = _.bind(numberFormat_supportedLocalesOf_func, intlStaticMethodThisArg); - _.defineProperty(numberFormat_supportedLocalesOf, "name", { - value: "supportedLocalesOf", - writable: false, - enumerable: false, - configurable: true, + const supportedLocalesOf = createPublicMethod("Intl.NumberFormat.supportedLocalesOf", function supportedLocalesOf(locales, options = undefined) { + return SupportedLocales(platform.isNFLocaleAvailable, CanonicalizeLocaleList(locales), options); }); _.defineProperty(NumberFormat, "supportedLocalesOf", { - value: numberFormat_supportedLocalesOf, + value: supportedLocalesOf, writable: true, enumerable: false, configurable: true, }); _.defineProperty(NumberFormat, "prototype", { - value: new NumberFormat(), + value: NumberFormatPrototype, writable: false, enumerable: false, - configurable: false, + configurable: false }); - setPrototype(NumberFormat.prototype, Object.prototype); - _.defineProperty(NumberFormat.prototype, "constructor", { + + _.defineProperty(NumberFormatPrototype, "constructor", { value: NumberFormat, writable: true, enumerable: false, configurable: true, }); - _.defineProperty(NumberFormat.prototype, "resolvedOptions", { - value: function resolvedOptions() { + const UnwrapNumberFormat = function (nf) { + let hiddenObject = platform.getHiddenObject(nf); + if ((!hiddenObject || !hiddenObject.initializedNumberFormat) && nf instanceof NumberFormat) { + nf = nf[platform.FallbackSymbol]; + } + + if (typeof nf !== "object") { + platform.raiseNeedObjectOfType("NumberFormat.prototype.format", "NumberFormat"); + } + + hiddenObject = platform.getHiddenObject(nf); + if (!hiddenObject.initializedNumberFormat) { + platform.raiseNeedObjectOfType("NumberFormat.prototype.format", "NumberFormat"); + } + + return hiddenObject; + }; + + _.defineProperty(NumberFormatPrototype, "resolvedOptions", { + value: createPublicMethod("Intl.NumberFormat.prototype.resolvedOptions", function resolvedOptions() { if (typeof this !== "object") { - platform.raiseNeedObjectOfType("NumberFormat.prototype.resolvedOptions", "NumberFormat"); - } - const hiddenObject = platform.getHiddenObject(this); - if (hiddenObject === undefined || !hiddenObject.initializedNumberFormat) { - platform.raiseNeedObjectOfType("NumberFormat.prototype.resolvedOptions", "NumberFormat"); + platform.raiseNeedObjectOfType("NumberFormat.prototype.format", "NumberFormat"); } + const hiddenObject = UnwrapNumberFormat(this); + const options = ["locale", "numberingSystem", "style", "currency", "currencyDisplay", "minimumIntegerDigits", "minimumFractionDigits", "maximumFractionDigits", "minimumSignificantDigits", "maximumSignificantDigits", "useGrouping"]; return createResolvedOptions(options, hiddenObject); - }, + }), writable: true, enumerable: false, configurable: true, }); // test262's test\intl402\NumberFormat\prototype\format\name.js checks the name of the descriptor's getter function - const getFormat = function () { + const getFormat = createPublicMethod("get format", function () { if (typeof this !== "object") { platform.raiseNeedObjectOfType("NumberFormat.prototype.format", "NumberFormat"); } - const hiddenObject = platform.getHiddenObject(this); - if (hiddenObject === undefined || !hiddenObject.initializedNumberFormat) { - platform.raiseNeedObjectOfType("NumberFormat.prototype.format", "NumberFormat"); + const hiddenObject = UnwrapNumberFormat(this); + + if (hiddenObject.boundFormat === undefined) { + hiddenObject.boundFormat = _.bind(format, hiddenObject); + delete hiddenObject.boundFormat.name; } return hiddenObject.boundFormat; - }; + }); _.defineProperty(getFormat, "name", { value: "get format", writable: false, enumerable: false, configurable: true, }); - _.defineProperty(NumberFormat.prototype, "format", { - get: tagPublicFunction("get format", getFormat), + _.defineProperty(NumberFormatPrototype, "format", { + get: getFormat, enumerable: false, configurable: true, }); - _.defineProperty(NumberFormat.prototype, "formatToParts", { + _.defineProperty(NumberFormatPrototype, "formatToParts", { value: formatToParts, enumerable: false, configurable: true, @@ -1461,7 +1357,8 @@ k: "h24", }; - return function (dtf, options) { + // take the hour12 option by name so that we dont call the getter for options.hour12 twice + return function (dtf, options, hour12) { const resolvedOptions = _.reduce(dateTimeComponents, function (resolved, component) { const prop = component[0]; const value = GetOption(options, prop, "string", component[1], undefined); @@ -1472,9 +1369,6 @@ return resolved; }, _.create()); - // Providing undefined for the `values` argument allows { hour12: "asd" } to become hour12 = true, - // which is apparently a feature of the spec, rather than a bug. - const hour12 = GetOption(options, "hour12", "boolean", undefined, undefined); const hc = dtf.hourCycle; // Build up a skeleton by repeating skeleton keys (like "G", "y", etc) for a count corresponding to the intl option value. @@ -1579,8 +1473,15 @@ const opt = _.create(); opt.localeMatcher = GetOption(options, "localeMatcher", "string", ["lookup", "best fit"], "best fit"); - // hc is the only option that can be set by -u extension or by options object key - opt.hc = GetOption(options, "hourCycle", "string", ["h11", "h12", "h23", "h24"], undefined); + + // Providing undefined for the `values` argument allows { hour12: "asd" } to become hour12 = true, + // which is apparently a feature of the spec, rather than a bug. + const hour12 = GetOption(options, "hour12", "boolean", undefined, undefined); + let hourCycle = GetOption(options, "hourCycle", "string", ["h11", "h12", "h23", "h24"], undefined); + if (hour12 !== undefined) { + hourCycle = null; + } + opt.hc = hourCycle; const r = ResolveLocale(platform.isDTFLocaleAvailable, requestedLocales, opt, ["nu", "ca", "hc"]); dateTimeFormat.locale = r.locale; @@ -1600,7 +1501,7 @@ // is supposed to be done in #sec-isvalidtimezonename) const canonicalTZ = platform.validateAndCanonicalizeTimeZone(tz); if (canonicalTZ === undefined || canonicalTZ === "Etc/Unknown") { - raise.rangeError(tz, "timeZone", "IANA Zone or Link name (Area/Location)"); + platform.raiseOptionValueOutOfRange_3(tz, "timeZone", "IANA Zone or Link name (Area/Location)"); } else if (canonicalTZ === "Etc/UTC" || canonicalTZ === "Etc/GMT") { tz = "UTC"; } else { @@ -1613,7 +1514,7 @@ GetOption(options, "formatMatcher", "string", ["basic", "best fit"], "best fit"); // this call replaces most of the spec code related to hour12/hourCycle and format negotiation/handling - getPatternForOptions(dateTimeFormat, options); + getPatternForOptions(dateTimeFormat, options, hour12); dateTimeFormat.initializedDateTimeFormat = true; return dateTimeFormat; @@ -1676,14 +1577,6 @@ return options; }; - const FormatDateTime = function (dtf, x) { - if (_.isNaN(x) || !_.isFinite(x)) { - platform.raiseInvalidDate(); - } - - return platform.formatDateTime(dtf, x, /* toParts */ false, /* forDatePrototypeToLocaleString */ false); - }; - const FormatDateTimeToParts = function (dtf, x) { if (_.isNaN(x) || !_.isFinite(x)) { platform.raiseInvalidDate(); @@ -1731,53 +1624,53 @@ return platform.formatDateTime(stateObject, Internal.ToNumber(this), /* toParts */ false, /* forDatePrototypeToLocaleString */ true); } - // Note: tagPublicFunction (platform.tagPublicLibraryCode) messes with declared name of the FunctionBody so that - // the functions called appear correctly in the debugger and stack traces. Thus, we we cannot call tagPublicFunction in a loop. + // Note: createPublicMethod (platform.tagPublicLibraryCode) messes with declared name of the FunctionBody so that + // the functions called appear correctly in the debugger and stack traces. Thus, we we cannot call createPublicMethod in a loop. // Each entry point needs to have its own unique FunctionBody (which is a function as defined in the source code); // this is why we have seemingly repeated ourselves below, instead of having one function and calling it multiple times with // different parameters. // - // The following invocations of `platform.registerBuiltInFunction(tagPublicFunction(name, entryPoint))` are enclosed in IIFEs. + // The following invocations of `platform.registerBuiltInFunction(createPublicMethod(name, entryPoint))` are enclosed in IIFEs. // The IIFEs are used to group all of the meaningful differences between each entry point into the arguments to the IIFE. // The exception to this are the different entryPoint names which are only significant for debugging (and cannot be passed in // as arguments, as the name is intrinsic to the function declaration). // // The `date_toLocale*String_entryPoint` function names are placeholder names that will never be seen from user code. - // The function name property and FunctionBody declared name are overwritten by `tagPublicFunction`. + // The function name property and FunctionBody declared name are overwritten by `createPublicMethod`. // The fact that they are declared with unique names is helpful for debugging. // The functions *must not* be declared as anonymous functions (must be declared with a name); // converting from an unnnamed function to a named function is not readily supported by the platform code and // this has caused us to hit assertions in debug builds in the past. // - // See invocations of `tagPublicFunction` on the `supportedLocalesOf` entry points for a similar pattern. - // // The entryPoint functions will be called as `Date.prototype.toLocale*String` and thus their `this` parameters will be a Date. // `DateInstanceToLocaleStringImplementation` is not on `Date.prototype`, so we must propagate `this` into the call by using // `DateInstanceToLocaleStringImplementation.call(this, ...)`. (function (name, option1, option2, cacheSlot, platformFunctionID) { - platform.registerBuiltInFunction(tagPublicFunction(name, function date_toLocaleString_entryPoint(locales = undefined, options = undefined) { + platform.registerBuiltInFunction(createPublicMethod(name, function date_toLocaleString_entryPoint(locales = undefined, options = undefined) { return DateInstanceToLocaleStringImplementation.call(this, name, option1, option2, cacheSlot, locales, options); }), platformFunctionID); - })("Date.prototype.toLocaleString", "any", "all", __DateInstanceToLocaleStringDefaultCacheSlot.toLocaleString, IntlBuiltInFunctionID.DateToLocaleString); + })("Date.prototype.toLocaleString", "any", "all", __DateInstanceToLocaleStringDefaultCacheSlot.toLocaleString, platform.BuiltInFunctionID.DateToLocaleString); (function (name, option1, option2, cacheSlot, platformFunctionID) { - platform.registerBuiltInFunction(tagPublicFunction(name, function date_toLocaleDateString_entryPoint(locales = undefined, options = undefined) { + platform.registerBuiltInFunction(createPublicMethod(name, function date_toLocaleDateString_entryPoint(locales = undefined, options = undefined) { return DateInstanceToLocaleStringImplementation.call(this, name, option1, option2, cacheSlot, locales, options); }), platformFunctionID); - })("Date.prototype.toLocaleDateString", "date", "date", __DateInstanceToLocaleStringDefaultCacheSlot.toLocaleDateString, IntlBuiltInFunctionID.DateToLocaleDateString); + })("Date.prototype.toLocaleDateString", "date", "date", __DateInstanceToLocaleStringDefaultCacheSlot.toLocaleDateString, platform.BuiltInFunctionID.DateToLocaleDateString); (function (name, option1, option2, cacheSlot, platformFunctionID) { - platform.registerBuiltInFunction(tagPublicFunction(name, function date_toLocaleTimeString_entryPoint(locales = undefined, options = undefined) { + platform.registerBuiltInFunction(createPublicMethod(name, function date_toLocaleTimeString_entryPoint(locales = undefined, options = undefined) { return DateInstanceToLocaleStringImplementation.call(this, name, option1, option2, cacheSlot, locales, options); }), platformFunctionID); - })("Date.prototype.toLocaleTimeString", "time", "time", __DateInstanceToLocaleStringDefaultCacheSlot.toLocaleTimeString, IntlBuiltInFunctionID.DateToLocaleTimeString); + })("Date.prototype.toLocaleTimeString", "time", "time", __DateInstanceToLocaleStringDefaultCacheSlot.toLocaleTimeString, platform.BuiltInFunctionID.DateToLocaleTimeString); // if we were only initializing Date, dont bother initializing Intl.DateTimeFormat if (InitType !== "Intl") { return; } + const DateTimeFormatPrototype = {}; + /** * The Intl.DateTimeFormat constructor * @@ -1786,97 +1679,102 @@ * @param {String|String[]} locales * @param {Object} options */ - function DateTimeFormat(locales = undefined, options = undefined) { - if (this === Intl || this === undefined) { - return new DateTimeFormat(locales, options); - } - - const obj = Internal.ToObject(this); - if (!_.isExtensible(obj)) { - platform.raiseObjectIsNonExtensible("DateTimeFormat"); - } - - // Use the hidden object to store data - let hiddenObject = platform.getHiddenObject(obj); + const DateTimeFormat = tagPublicFunction("Intl.DateTimeFormat", function DateTimeFormat(locales = undefined, options = undefined) { + const newTarget = new.target === undefined ? DateTimeFormat : new.target; + const dateTimeFormat = OrdinaryCreateFromConstructor(newTarget, DateTimeFormatPrototype); + let hiddenObject = platform.getHiddenObject(dateTimeFormat); if (hiddenObject === undefined) { hiddenObject = _.create(); - platform.setHiddenObject(obj, hiddenObject); + platform.setHiddenObject(dateTimeFormat, hiddenObject); } InitializeDateTimeFormat(hiddenObject, locales, options); - // only format has to be bound and attached to the DateTimeFormat - hiddenObject.boundFormat = _.bind(format, obj); - delete hiddenObject.boundFormat.name; - - return obj; - } - tagPublicFunction("Intl.DateTimeFormat", DateTimeFormat); + if (new.target === undefined && this instanceof DateTimeFormat) { + _.defineProperty(this, platform.FallbackSymbol, { + value: dateTimeFormat, + writable: false, + enumerable: false, + configurable: false + }); - /** - * Asserts that dtf is a valid DateTimeFormat object, or throws a TypeError otherwise. - * - * Returns the hiddenObject for the given dtf. - * - * @param {Object} dtf `this` of a given call to a DateTimeFormat member function - * @param {String} name the name of the function requiring dtf to be a valid DateTimeFormat - * @returns {Object} the hiddenObject for the given dtf - */ - const ensureMember = function (dtf, name) { - if (typeof dtf !== 'object') { - platform.raiseNeedObjectOfType(`Intl.DateTimeFormat.prototype.${name}`, "DateTimeFormat"); + return this; } + + return dateTimeFormat; + }); + + const UnwrapDateTimeFormat = function (dtf) { let hiddenObject = platform.getHiddenObject(dtf); - if (hiddenObject === undefined || !hiddenObject.initializedDateTimeFormat) { - platform.raiseNeedObjectOfType(`Intl.DateTimeFormat.prototype.${name}`, "DateTimeFormat"); + if ((!hiddenObject || !hiddenObject.initializedDateTimeFormat) && dtf instanceof DateTimeFormat) { + dtf = dtf[platform.FallbackSymbol]; + } + + if (typeof dtf !== "object") { + platform.raiseNeedObjectOfType("DateTimeFormat.prototype.format", "DateTimeFormat"); + } + + hiddenObject = platform.getHiddenObject(dtf); + if (!hiddenObject.initializedDateTimeFormat) { + platform.raiseNeedObjectOfType("DateTimeFormat.prototype.format", "DateTimeFormat"); } return hiddenObject; }; - /** - * Calls ensureMember on dtf, and then converts the given date to a number. - * - * Returns the hiddenObject for the given dtf and the resolved date. - * - * @param {Object} dtf `this` of a given call to a DateTimeFormat member function - * @param {Object} date the date to be formatted - * @param {String} name the name of the function requiring dtf to be a valid DateTimeFormat - */ - const ensureFormat = function (dtf, date, name) { - const hiddenObject = ensureMember(dtf, name); + // format should always be bound to a valid DateTimeFormat's hiddenObject by getFormat() + const format = createPublicMethod("Intl.DateTimeFormat.prototype.format", function format(date) { + if (!this || !this.initializedDateTimeFormat) { + platform.raiseNeedObjectOfType("DateTimeFormat.prototype.format", "DateTimeFormat"); + } let x; if (date === undefined) { x = platform.builtInJavascriptDateEntryNow(); } else { x = Internal.ToNumber(date); + + if (_.isNaN(x) || !_.isFinite(x)) { + platform.raiseInvalidDate(); + } } - // list of arguments for FormatDateTime{ToParts} - return [hiddenObject, x]; - }; + return platform.formatDateTime(this, x, /* toParts */ false, /* forDatePrototypeToLocaleString */ false); + }); - const format = function (date) { - return _.apply(FormatDateTime, undefined, ensureFormat(this, date, "format")); - }; - tagPublicFunction("Intl.DateTimeFormat.prototype.format", format); + const formatToParts = createPublicMethod("Intl.DateTimeFormat.prototype.formatToParts", function formatToParts(date) { + if (typeof this !== "object") { + platform.raiseNeedObjectOfType("DateTimeFormat.prototype.formatToParts", "DateTimeFormat"); + } - const formatToParts = function (date) { - return _.apply(FormatDateTimeToParts, undefined, ensureFormat(this, date, "formatToParts")); - }; - tagPublicFunction("Intl.DateTimeFormat.prototype.formatToParts", formatToParts); + const hiddenObject = platform.getHiddenObject(this); + if (hiddenObject === undefined || !hiddenObject.initializedDateTimeFormat) { + platform.raiseNeedObjectOfType("DateTimeFormat.prototype.formatToParts", "DateTimeFormat"); + } + + let x; + if (date === undefined) { + x = platform.builtInJavascriptDateEntryNow(); + } else { + x = Internal.ToNumber(date); + + if (_.isNaN(x) || !_.isFinite(x)) { + platform.raiseInvalidDate(); + } + } + + return platform.formatDateTime(hiddenObject, x, /* toParts */ true, /* forDatePrototypeToLocaleString */ false); + }); _.defineProperty(DateTimeFormat, "prototype", { - value: new DateTimeFormat(), + value: DateTimeFormatPrototype, writable: false, enumerable: false, configurable: false }); - setPrototype(DateTimeFormat.prototype, Object.prototype); - _.defineProperty(DateTimeFormat.prototype, "constructor", { + _.defineProperty(DateTimeFormatPrototype, "constructor", { value: DateTimeFormat, writable: true, enumerable: false, @@ -1884,31 +1782,44 @@ }); // test262's test\intl402\DateTimeFormat\prototype\format\name.js checks the name of the descriptor's getter function - const getFormat = function () { - const hiddenObject = ensureMember(this, format); + const getFormat = createPublicMethod("get format", function () { + if (typeof this !== "object") { + platform.raiseNeedObjectOfType("DateTimeFormat.prototype.format", "DateTimeFormat"); + } + + const hiddenObject = UnwrapDateTimeFormat(this); + + if (hiddenObject.boundFormat === undefined) { + hiddenObject.boundFormat = _.bind(format, hiddenObject); + delete hiddenObject.boundFormat.name; + } return hiddenObject.boundFormat; - }; + }); _.defineProperty(getFormat, "name", { value: "get format", writable: false, enumerable: false, configurable: true, }); - _.defineProperty(DateTimeFormat.prototype, "format", { - get: tagPublicFunction("get format", getFormat), + _.defineProperty(DateTimeFormatPrototype, "format", { + get: getFormat, enumerable: false, configurable: true, }); - _.defineProperty(DateTimeFormat.prototype, "formatToParts", { + _.defineProperty(DateTimeFormatPrototype, "formatToParts", { value: formatToParts, enumerable: false, configurable: true, writable: true, }); - _.defineProperty(DateTimeFormat.prototype, "resolvedOptions", { - value: function resolvedOptions() { - const hiddenObject = ensureMember(this, "resolvedOptions"); + _.defineProperty(DateTimeFormatPrototype, "resolvedOptions", { + value: createPublicMethod("Intl.DateTimeFormat.prototype.resolvedOptions", function resolvedOptions() { + if (typeof this !== "object") { + platform.raiseNeedObjectOfType("DateTimeFormat.prototype.format", "DateTimeFormat"); + } + + const hiddenObject = UnwrapDateTimeFormat(this); const options = [ "locale", "calendar", @@ -1937,26 +1848,17 @@ return true; } }); - }, + }), writable: true, enumerable: false, configurable: true, }); - // See explanation of `getCanonicalLocales` - const dateTimeFormat_supportedLocalesOf_name = "Intl.DateTimeFormat.supportedLocalesOf"; - const dateTimeFormat_supportedLocalesOf_func = tagPublicFunction(dateTimeFormat_supportedLocalesOf_name, function (locales, options = undefined) { - return supportedLocalesOf_unconstructable(this, dateTimeFormat_supportedLocalesOf_name, platform.isDTFLocaleAvailable, locales, options); - }); - const dateTimeFormat_supportedLocalesOf = _.bind(dateTimeFormat_supportedLocalesOf_func, intlStaticMethodThisArg); - _.defineProperty(dateTimeFormat_supportedLocalesOf, "name", { - value: "supportedLocalesOf", - writable: false, - enumerable: false, - configurable: true, + const supportedLocalesOf = createPublicMethod("Intl.DateTimeFormat.supportedLocalesOf", function supportedLocalesOf(locales, options = undefined) { + return SupportedLocales(platform.isDTFLocaleAvailable, CanonicalizeLocaleList(locales), options); }); _.defineProperty(DateTimeFormat, "supportedLocalesOf", { - value: dateTimeFormat_supportedLocalesOf, + value: supportedLocalesOf, writable: true, enumerable: false, configurable: true, @@ -2016,51 +1918,51 @@ return platform.pluralRulesSelect(pluralRules, n); }; + const PluralRulesPrototype = {}; + // params are explicitly `= undefined` to make PluralRules.length === 0 - const PluralRules = function PluralRules(locales = undefined, options = undefined) { + const PluralRules = tagPublicFunction("Intl.PluralRules", function PluralRules(locales = undefined, options = undefined) { if (new.target === undefined) { platform.raiseNeedObjectOfType("Intl.PluralRules", "PluralRules"); } + const pluralRules = OrdinaryCreateFromConstructor(new.target, PluralRulesPrototype); + const stateObject = _.create(); - platform.setHiddenObject(this, stateObject); + platform.setHiddenObject(pluralRules, stateObject); InitializePluralRules(stateObject, locales, options); - return this; - }; - tagPublicFunction("Intl.PluralRules", PluralRules); + return pluralRules; + }); // ECMA 402: #sec-intl.pluralrules.prototype _.defineProperty(PluralRules, "prototype", { - value: {}, + value: PluralRulesPrototype, writable: false, enumerable: false, configurable: false, }); - // See explanation of `getCanonicalLocales` - // ECMA 402: #sec-intl.pluralrules.supportedlocalesof - const pluralRules_supportedLocalesOf_name = "Intl.PluralRules.supportedLocalesOf"; - const pluralRules_supportedLocalesOf_func = tagPublicFunction(pluralRules_supportedLocalesOf_name, function (locales, options = undefined) { - return supportedLocalesOf_unconstructable(this, pluralRules_supportedLocalesOf_name, platform.isPRLocaleAvailable, locales, options); - }); - const pluralRules_supportedLocalesOf = _.bind(pluralRules_supportedLocalesOf_func, intlStaticMethodThisArg); - _.defineProperty(pluralRules_supportedLocalesOf, "name", { - value: "supportedLocalesOf", - writable: false, + _.defineProperty(PluralRulesPrototype, "constructor", { + value: PluralRules, + writable: true, enumerable: false, - configurable: true, + configurable: true + }); + + const supportedLocalesOf = createPublicMethod("Intl.PluralRules.supportedLocalesOf", function supportedLocalesOf(locales, options = undefined) { + return SupportedLocales(platform.isPRLocaleAvailable, CanonicalizeLocaleList(locales), options); }); _.defineProperty(PluralRules, "supportedLocalesOf", { - value: pluralRules_supportedLocalesOf, + value: supportedLocalesOf, writable: true, enumerable: false, configurable: true, }); // ECMA 402: #sec-intl.pluralrules.prototype.select - const select = function select(value) { + const select = createPublicMethod("Intl.PluralRules.prototype.select", function select(value) { const pr = platform.getHiddenObject(this); if (!pr || !pr.initializedPluralRules) { platform.raiseNeedObjectOfType("Intl.PluralRules.prototype.select", "PluralRules"); @@ -2068,16 +1970,15 @@ const n = Internal.ToNumber(value); return ResolvePlural(pr, n); - }; - tagPublicFunction("Intl.PluralRules.prototype.select", select); - _.defineProperty(PluralRules.prototype, "select", { + }); + _.defineProperty(PluralRulesPrototype, "select", { value: select, enumerable: false, configurable: true, writable: true, }); - const resolvedOptions = function resolvedOptions() { + const resolvedOptions = createPublicMethod("Intl.PluralRules.prototype.resolvedOptions", function resolvedOptions() { const pr = platform.getHiddenObject(this); if (!pr || !pr.initializedPluralRules) { platform.raiseNeedObjectOfType("Intl.PluralRules.prototype.select", "PluralRules"); @@ -2099,9 +2000,8 @@ return true; } }); - }; - tagPublicFunction("Intl.PluralRules.prototype.resolvedOptions", resolvedOptions); - _.defineProperty(PluralRules.prototype, "resolvedOptions", { + }); + _.defineProperty(PluralRulesPrototype, "resolvedOptions", { value: resolvedOptions, enumerable: false, configurable: true, @@ -2305,11 +2205,12 @@ if (extensionFilter !== undefined) { // Filter to expected sub-tags var filtered = []; + let i = 0; callInstanceFunc(ArrayInstanceForEach, subTags, (function (subTag) { var parts = platform.builtInRegexMatch(subTag, /([^-]*)-?(.*)?/); // [0] entire thing; [1] key; [2] value var key = parts[1]; if (callInstanceFunc(ArrayInstanceIndexOf, extensionFilter, key) !== -1) { - callInstanceFunc(ArrayInstancePush, filtered, subTag); + _.defineProperty(filtered, i++, {value: subTag, enumerable: true, configurable: true, writable: true}); } })); subTags = filtered; @@ -2562,6 +2463,7 @@ // TODO: Use sets here to prevent duplicates let seen = []; + let i = 0; forEachIfPresent(locales, length, function (locale) { if ((typeof locale !== 'string' && typeof locale !== 'object') || locale === null) { @@ -2577,7 +2479,7 @@ tag = platform.normalizeLanguageTag(tag); if (tag !== undefined && callInstanceFunc(ArrayInstanceIndexOf, seen, tag) === -1) { - callInstanceFunc(ArrayInstancePush, seen, tag); + _.defineProperty(seen, i++, {value: tag, writable: true, enumerable: true, configurable: true}); } }); @@ -2922,12 +2824,12 @@ thisArg, that, stateObject.__localeForCompare, - toEnum(CollatorSensitivity, stateObject.__sensitivity), + platform.CollatorSensitivity[stateObject.__sensitivity], stateObject.__ignorePunctuation, stateObject.__numeric, - toEnum(CollatorCaseFirst, stateObject.__caseFirst) + platform.CollatorCaseFirst[stateObject.__caseFirst] )); - }), IntlBuiltInFunctionID.StringLocaleCompare); + }), platform.BuiltInFunctionID.StringLocaleCompare); if (InitType === 'Intl') { @@ -2975,10 +2877,10 @@ a, b, hiddenObject.__localeForCompare, - toEnum(CollatorSensitivity, hiddenObject.__sensitivity), + platform.CollatorSensitivity[hiddenObject.__sensitivity], hiddenObject.__ignorePunctuation, hiddenObject.__numeric, - toEnum(CollatorCaseFirst, hiddenObject.__caseFirst) + platform.CollatorCaseFirst[hiddenObject.__caseFirst] )); } tagPublicFunction("Intl.Collator.prototype.compare", compare); @@ -3058,12 +2960,7 @@ var matcher = GetOption(options, "localeMatcher", "string", ["lookup", "best fit"], "best fit"); var style = GetOption(options, "style", "string", ["decimal", "percent", "currency"], "decimal"); - var formatterToUse = NumberFormatStyle.DECIMAL; // DEFAULT - if (style === 'percent') { - formatterToUse = NumberFormatStyle.PERCENT; - } else if (style === 'currency') { - formatterToUse = NumberFormatStyle.CURRENCY; - } + var formatterToUse = platform.NumberFormatStyle[style]; var currency = GetOption(options, "currency", "string", undefined, undefined); var currencyDisplay = GetOption(options, 'currencyDisplay', 'string', ['code', 'symbol', 'name'], 'symbol'); @@ -3130,14 +3027,7 @@ if (currencyDisplay !== undefined) { numberFormat.__currencyDisplay = currencyDisplay; - numberFormat.__currencyDisplayToUse = NumberFormatCurrencyDisplay.DEFAULT; - if (currencyDisplay === "symbol") { - numberFormat.__currencyDisplayToUse = NumberFormatCurrencyDisplay.SYMBOL; - } else if (currencyDisplay === "code") { - numberFormat.__currencyDisplayToUse = NumberFormatCurrencyDisplay.CODE; - } else if (currencyDisplay === "name") { - numberFormat.__currencyDisplayToUse = NumberFormatCurrencyDisplay.NAME; - } + numberFormat.__currencyDisplayToUse = platform.NumberFormatCurrencyDisplay[currencyDisplay]; } numberFormat.__minimumIntegerDigits = minimumIntegerDigits; @@ -3181,7 +3071,7 @@ var n = Internal.ToNumber(this); return String(platform.formatNumber(n, stateObject)); - }), IntlBuiltInFunctionID.NumberToLocaleString); + }), platform.BuiltInFunctionID.NumberToLocaleString); if (InitType === 'Intl') { function NumberFormat(locales = undefined, options = undefined) { @@ -3338,54 +3228,56 @@ // Currently you cannot format date pieces and time pieces together, so this builds up a format template for each separately. function EcmaOptionsToWindowsTemplate(options) { var template = []; + template.__proto__ = null; + let i = 0; if (options.weekday) { if (options.weekday === 'narrow' || options.weekday === 'short') { - callInstanceFunc(ArrayInstancePush, template, 'dayofweek.abbreviated'); + template[i++] = 'dayofweek.abbreviated'; } else if (options.weekday === 'long') { - callInstanceFunc(ArrayInstancePush, template, 'dayofweek.full'); + template[i++] = 'dayofweek.full'; } } // TODO: Era not supported if (options.year) { if (options.year === '2-digit') { - callInstanceFunc(ArrayInstancePush, template, 'year.abbreviated'); + template[i++] = 'year.abbreviated'; } else if (options.year === 'numeric') { - callInstanceFunc(ArrayInstancePush, template, 'year.full'); + template[i++] = 'year.full'; } } if (options.month) { if (options.month === '2-digit' || options.month === 'numeric') { - callInstanceFunc(ArrayInstancePush, template, 'month.numeric') + template[i++] = 'month.numeric'; } else if (options.month === 'short' || options.month === 'narrow') { - callInstanceFunc(ArrayInstancePush, template, 'month.abbreviated'); + template[i++] = 'month.abbreviated'; } else if (options.month === 'long') { - callInstanceFunc(ArrayInstancePush, template, 'month.full'); + template[i++] = 'month.full'; } } if (options.day) { - callInstanceFunc(ArrayInstancePush, template, 'day'); + template[i++] = 'day'; } if (options.timeZoneName) { if (options.timeZoneName === "short") { - callInstanceFunc(ArrayInstancePush, template, 'timezone.abbreviated'); + template[i++] = 'timezone.abbreviated'; } else if (options.timeZoneName === "long") { - callInstanceFunc(ArrayInstancePush, template, 'timezone.full'); + template[i++] = 'timezone.full'; } } callInstanceFunc(ArrayInstanceForEach, ['hour', 'minute', 'second'], function (opt) { if (options[opt]) { - callInstanceFunc(ArrayInstancePush, template, opt); + template[i++] = opt; } }); // TODO: Timezone Name not supported. - return getArrayLength(template) > 0 ? callInstanceFunc(ArrayInstanceJoin, template, ' ') : undefined; + return i > 0 ? callInstanceFunc(ArrayInstanceJoin, template, ' ') : undefined; } var WindowsToEcmaCalendarMap = { @@ -3703,19 +3595,19 @@ platform.registerBuiltInFunction(tagPublicFunction(name, function date_toLocaleString_entryPoint(locales = undefined, options = undefined) { return DateInstanceToLocaleStringImplementation.call(this, name, option1, option2, cacheSlot, locales, options); }), platformFunctionID); - })("Date.prototype.toLocaleString", "any", "all", __DateInstanceToLocaleStringDefaultCacheSlot.toLocaleString, IntlBuiltInFunctionID.DateToLocaleString); + })("Date.prototype.toLocaleString", "any", "all", __DateInstanceToLocaleStringDefaultCacheSlot.toLocaleString, platform.BuiltInFunctionID.DateToLocaleString); (function (name, option1, option2, cacheSlot, platformFunctionID) { platform.registerBuiltInFunction(tagPublicFunction(name, function date_toLocaleDateString_entryPoint(locales = undefined, options = undefined) { return DateInstanceToLocaleStringImplementation.call(this, name, option1, option2, cacheSlot, locales, options); }), platformFunctionID); - })("Date.prototype.toLocaleDateString", "date", "date", __DateInstanceToLocaleStringDefaultCacheSlot.toLocaleDateString, IntlBuiltInFunctionID.DateToLocaleDateString); + })("Date.prototype.toLocaleDateString", "date", "date", __DateInstanceToLocaleStringDefaultCacheSlot.toLocaleDateString, platform.BuiltInFunctionID.DateToLocaleDateString); (function (name, option1, option2, cacheSlot, platformFunctionID) { platform.registerBuiltInFunction(tagPublicFunction(name, function date_toLocaleTimeString_entryPoint(locales = undefined, options = undefined) { return DateInstanceToLocaleStringImplementation.call(this, name, option1, option2, cacheSlot, locales, options); }), platformFunctionID); - })("Date.prototype.toLocaleTimeString", "time", "time", __DateInstanceToLocaleStringDefaultCacheSlot.toLocaleTimeString, IntlBuiltInFunctionID.DateToLocaleTimeString); + })("Date.prototype.toLocaleTimeString", "time", "time", __DateInstanceToLocaleStringDefaultCacheSlot.toLocaleTimeString, platform.BuiltInFunctionID.DateToLocaleTimeString); if (InitType === 'Intl') { function DateTimeFormat(locales = undefined, options = undefined) { diff --git a/lib/Runtime/Library/InJavascript/Intl.js.bc.32b.h b/lib/Runtime/Library/InJavascript/Intl.js.bc.32b.h deleted file mode 100755 index 6d951323db7..00000000000 --- a/lib/Runtime/Library/InJavascript/Intl.js.bc.32b.h +++ /dev/null @@ -1,11420 +0,0 @@ -//------------------------------------------------------------------------------------------------------- -// Copyright (C) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. -//------------------------------------------------------------------------------------------------------- -#if 0 -//------------------------------------------------------------------------------------------------------- -// Copyright (C) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. -//------------------------------------------------------------------------------------------------------- - -"use strict"; -// Core intl lib -(function (EngineInterface, InitType) { - var platform = EngineInterface.Intl; - - // allow unit tests to disable caching behavior for testing convenience but have this always `true` in real scenarios - platform.useCaches = true; - - // determine what backing library we are using - // making these vars in JS allows us to more change how we - // determine the backing library - const isPlatformUsingICU = !platform.winglob; - const isPlatformUsingWinGlob = platform.winglob; - - // constants - const NOT_FOUND = "NOT_FOUND"; - - // Built-Ins - var setPrototype = platform.builtInSetPrototype; - var getArrayLength = platform.builtInGetArrayLength; - var callInstanceFunc = platform.builtInCallInstanceFunction; - - // Helper for our extensive usage of null-prototyped objects - const bare = (obj = {}) => setPrototype(obj, null); - - // REVIEW(jahorto): IntlCache replaces past use of raw objects and JS Maps to cache arbitrary data for a given locale - // We use a raw object rather than a Map because we don't need any features specific to Maps - // If the cache gets too big (arbitrarily, > 25 keys is "too big" by default), we delete the entire internal object and start from scratch - // TODO(jahorto): Experiment with the performance benefit of using an LRU or random-delete cache here. - function IntlCache(n = 25) { - return bare({ - n: n, - _cache: _.create(), - - get(key) { - return platform.useCaches ? this._cache[key] : undefined; - }, - - set(key, value) { - if (!platform.useCaches) { - return; - } - - if (_.keys(this._cache).length > this.n && this._cache[key] === undefined) { - this._cache = _.create(); - } - - this._cache[key] = value; - } - }); - } - - var Boolean = platform.Boolean; - var Object = platform.Object; - var RegExp = platform.RegExp; - var Number = platform.Number; - var String = platform.String; - var Date = platform.Date; - var Error = platform.Error; - - var RaiseAssert = platform.raiseAssert; - - var Math = setPrototype({ - abs: platform.builtInMathAbs, - floor: platform.builtInMathFloor, - max: platform.builtInMathMax, - pow: platform.builtInMathPow - }, null); - - var ObjectGetPrototypeOf = platform.builtInJavascriptObjectEntryGetPrototypeOf; - var ObjectIsExtensible = platform.builtInJavascriptObjectEntryIsExtensible; - var ObjectGetOwnPropertyNames = platform.builtInJavascriptObjectEntryGetOwnPropertyNames; - var ObjectInstanceHasOwnProperty = platform.builtInJavascriptObjectEntryHasOwnProperty; - // Because we don't keep track of the attributes object, and neither does the internals of Object.defineProperty; - // We don't need to restore it's prototype. - var _objectDefineProperty = platform.builtInJavascriptObjectEntryDefineProperty; - var ObjectDefineProperty = function (obj, prop, attributes) { - _objectDefineProperty(obj, prop, setPrototype(attributes, null)); - }; - - var ArrayInstanceForEach = platform.builtInJavascriptArrayEntryForEach; - var ArrayInstanceIndexOf = platform.builtInJavascriptArrayEntryIndexOf; - var ArrayInstancePush = platform.builtInJavascriptArrayEntryPush; - var ArrayInstanceJoin = platform.builtInJavascriptArrayEntryJoin; - - var FunctionInstanceBind = platform.builtInJavascriptFunctionEntryBind; - var DateInstanceGetDate = platform.builtInJavascriptDateEntryGetDate; - var DateNow = platform.builtInJavascriptDateEntryNow; - - var StringInstanceReplace = platform.builtInJavascriptStringEntryReplace; - var StringInstanceToLowerCase = platform.builtInJavascriptStringEntryToLowerCase; - var StringInstanceToUpperCase = platform.builtInJavascriptStringEntryToUpperCase; - - var ObjectPrototype = platform.Object_prototype; - - var isFinite = platform.builtInGlobalObjectEntryIsFinite; - var isNaN = platform.builtInGlobalObjectEntryIsNaN; - - // Keep this "enum" in sync with IntlEngineInterfaceExtensionObject::EntryIntl_RegisterBuiltInFunction - const IntlBuiltInFunctionID = setPrototype({ - MIN: 0, - DateToLocaleString: 0, - DateToLocaleDateString: 1, - DateToLocaleTimeString: 2, - NumberToLocaleString: 3, - StringLocaleCompare: 4, - MAX: 5 - }, null); - - const _ = { - toUpperCase(str) { return callInstanceFunc(StringInstanceToUpperCase, str); }, - toLowerCase(str) { return callInstanceFunc(StringInstanceToLowerCase, str); }, - replace(str, pattern, replacement) { return callInstanceFunc(StringInstanceReplace, str, pattern, replacement); }, - split(str, pattern) { return callInstanceFunc(platform.builtInJavascriptStringEntrySplit, str, pattern); }, - substring(str, start, end) { return callInstanceFunc(platform.builtInJavascriptStringEntrySubstring, str, start, end); }, - stringIndexOf(str, el, from) { return callInstanceFunc(platform.builtInJavascriptStringEntryIndexOf, str, el, from); }, - match(str, re) { return platform.builtInRegexMatch(str, re); }, - repeat(str, count) { return callInstanceFunc(platform.builtInJavascriptStringEntryRepeat, str, count); }, - - forEach(array, func) { return callInstanceFunc(ArrayInstanceForEach, array, func); }, - push(array, ...els) { return callInstanceFunc(ArrayInstancePush, array, ...els); }, - join(array, sep) { return callInstanceFunc(ArrayInstanceJoin, array, sep); }, - arrayIndexOf(array, el, from) { return callInstanceFunc(ArrayInstanceIndexOf, array, el, from); }, - map(array, func) { return callInstanceFunc(platform.builtInJavascriptArrayEntryMap, array, func); }, - reduce(array, func, init) { return callInstanceFunc(platform.builtInJavascriptArrayEntryReduce, array, func, init); }, - slice(array, start, end) { return callInstanceFunc(platform.builtInJavascriptArrayEntrySlice, array, start, end); }, - concat(array, ...els) { return callInstanceFunc(platform.builtInJavascriptArrayEntryConcat, array, ...els); }, - filter(array, func) { return callInstanceFunc(platform.builtInJavascriptArrayEntryFilter, array, func); }, - unique(array) { return _.filter(array, (v, i) => _.arrayIndexOf(array, v) === i); }, - - keys: platform.builtInJavascriptObjectEntryKeys, - hasOwnProperty(o, prop) { return callInstanceFunc(platform.builtInJavascriptObjectEntryHasOwnProperty, o, prop); }, - // If we don't set the descriptor's prototype to null, defining properties with `value`s can fail of Object.prototype.get is defined - defineProperty(o, prop, desc) { - _.setPrototypeOf(desc, null); - platform.builtInJavascriptObjectEntryDefineProperty(o, prop, desc); - }, - isExtensible: platform.builtInJavascriptObjectEntryIsExtensible, - create(proto = null) { return platform.builtInJavascriptObjectCreate(proto); }, - setPrototypeOf(target, proto = null) { return platform.builtInSetPrototype(target, proto); }, - - abs: platform.builtInMathAbs, - // Make _.floor more like ECMA262 #sec-mathematical-operations' floor by normalizing -0 - floor(x) { return x === 0 ? 0 : platform.builtInMathFloor(x) }, - max: platform.builtInMathMax, - pow: platform.builtInMathPow, - - isFinite: platform.builtInGlobalObjectEntryIsFinite, - isNaN: platform.builtInGlobalObjectEntryIsNaN, - - getDate(date) { return callInstanceFunc(platform.builtInJavascriptDateEntryGetDate, date); }, - - bind(func, that) { return callInstanceFunc(platform.builtInJavascriptFunctionEntryBind, func, that); }, - apply(func, that, args) { return callInstanceFunc(platform.builtInJavascriptFunctionEntryApply, func, that, args); }, - }; - - const raise = { - rangeError() { return arguments.length === 3 ? platform.raiseOptionValueOutOfRange_3(...arguments) : platform.raiseOptionValueOutOfRange(); }, - assert(test, err) { return test ? undefined : platform.raiseAssert(err || new Error("Assert failed")); } - }; - - // Keep these "enums" in sync with lib/Runtime/PlatformAgnostic/Intl.h - const CollatorSensitivity = bare({ - base: 0, - accent: 1, - case: 2, - variant: 3, - DEFAULT: 3 - }); - const CollatorCaseFirst = bare({ - upper: 0, - lower: 1, - false: 2, - DEFAULT: 2 - }); - const NumberFormatStyle = bare({ - DEFAULT: 0, // "decimal" is the default - DECIMAL: 0, // Intl.NumberFormat(locale, { style: "decimal" }); // aka in our code as "number" - PERCENT: 1, // Intl.NumberFormat(locale, { style: "percent" }); - CURRENCY: 2, // Intl.NumberFormat(locale, { style: "currency", ... }); - }); - const NumberFormatCurrencyDisplay = bare({ - DEFAULT: 0, // "symbol" is the default - SYMBOL: 0, // Intl.NumberFormat(locale, { style: "currency", currencyDisplay: "symbol" }); // e.g. "$" or "US$" depeding on locale - CODE: 1, // Intl.NumberFormat(locale, { style: "currency", currencyDisplay: "code" }); // e.g. "USD" - NAME: 2, // Intl.NumberFormat(locale, { style: "currency", currencyDisplay: "name" }); // e.g. "US dollar" - }); - - const toEnum = function (enumObject, key) { - if (!key || typeof key !== "string") { - return enumObject.DEFAULT; - } else { - return enumObject[key]; - } - } - - // When this file was originally written, it assumed Windows Globalization semantics. - // Throughout the transition to ICU, we tried to share as much code as possible between WinGlob and ICU. - // However, because ICU has different semantics and our ICU-based implementation tries to match a newer - // version of the Intl spec, we have decided that the code sharing was causing more harm than good. - // Thus, while we support both ICU and WinGlob, we have decided to duplicate a substantial amount of code. - // The indentation of the below if block is intentionally incorrect so as to minimize diff. - if (isPlatformUsingICU) { - - let __defaultLocale = undefined; - const GetDefaultLocale = function () { - if (__defaultLocale && platform.useCaches) { - return __defaultLocale; - } - - const locale = platform.getDefaultLocale(); - if (!locale) { - // if the system locale is undefined/null/empty string, we have to - // do something or else we will crash - __defaultLocale = "en"; - } else { - __defaultLocale = locale; - } - - return __defaultLocale; - }; - - // A helper function that is meant to rethrow SOE and OOM exceptions allowing them to propagate. - var throwExIfOOMOrSOE = function (ex) { - if (ex.number === -2146828260 || ex.number === -2146828281) { - throw ex; - } - }; - - var tagPublicFunction = function (name, f) { - return platform.tagPublicLibraryCode(f, name); - }; - - /** - * Determines the best possible locale available in the system - * - * ECMA-402: #sec-bestavailablelocale - * - * @param {Function} isAvailableLocale A function that takes a locale and returns if the locale is supported - * @param {String} locale the locale (including its fallbacks) that will be searched for - * @returns {String} the given locale or one of its fallbacks, or undefined - */ - const BestAvailableLocale = function (isAvailableLocale, locale) { - if (locale === undefined) { - return undefined; - } - - let candidate = locale; - const hyphen = "-"; - while (true) { - if (isAvailableLocale(candidate)) { - return candidate; - } - - let pos = -1; - for (let i = candidate.length - 1; i >= 0; i--) { - if (candidate[i] === hyphen) { - pos = i; - break; - } - } - - if (pos === -1) { - return undefined; - } else if (pos >= 2 && candidate[pos - 2] === hyphen) { - // This is spec code likely intended to skip over singletons, - // such that if we just searched for "en-a-value", - // pos would initially truncate the candidate to "en-a", which - // is not a valid language tag. - // See https://tools.ietf.org/html/rfc5646#section-4.4.2 - pos -= 2; - } - - candidate = _.substring(candidate, 0, pos); - } - }; - - /** - * Returns an array of acceptable values for a given key in a given locale. It is expected that - * locale is one that has already been validated by platform.is*LocaleAvailable and key is limited - * to the [[RelevantExtensionKeys]] of Collator, NumberFormat, and DateTimeFormat. - * - * ECMA402: #sec-internal-slots ([[SortLocaleData]], [[SearchLocaleData]], and [[LocaleData]]) - * - * @param {String} key a unicode extension key like "co", "ca", etc - * @param {String} locale the locale for which to get the given key's data - * @returns {String[]} - */ - const getKeyLocaleData = function (key, locale) { - // NOTE: keep this enum in sync with `enum class LocaleDataKind` in IntlEngineInterfaceExtensionObject.cpp - const LocaleDataKind = { - co: 0, - kf: 1, - kn: 2, - ca: 3, - nu: 4, - hc: 5, - }; - - const keyLocaleData = platform.getLocaleData(LocaleDataKind[key], locale); - - return keyLocaleData; - }; - - /** - * Determines which locale (or fallback) to use of an array of locales. - * - * ECMA-402: #sec-lookupmatcher - * - * @param {Function} isAvailableLocale A function that takes a locale and returns if the locale is supported - * @param {String[]} requestedLocales An array of requested locales - */ - const LookupMatcher = function (isAvailableLocale, requestedLocales) { - const result = _.create(); - for (let i = 0; i < requestedLocales.length; ++i) { - const parsedLangtag = parseLangtag(requestedLocales[i]); - if (parsedLangtag === null) { - continue; - } - - const availableLocale = BestAvailableLocale(isAvailableLocale, parsedLangtag.base); - if (availableLocale !== undefined) { - result.locale = availableLocale; - if (requestedLocales[i] !== parsedLangtag.base) { - result.extension = parsedLangtag.unicodeExtension; - } - - return result; - } - } - - result.locale = GetDefaultLocale(); - return result; - }; - - const BestFitMatcher = LookupMatcher; - - /** - * Determine a value for a given key in the given extension string - * - * ECMA-402: #sec-unicodeextensionvalue - * - * @param {String} extension the full unicode extension, such as "-u-co-phonebk-kf-true" - * @param {String} key the specific key we are looking for in the extension, such as "co" - */ - const UnicodeExtensionValue = function (extension, key) { - raise.assert(key.length === 2); - const size = extension.length; - - // search for the key-value pair - let pos = _.stringIndexOf(extension, `-${key}-`); - if (pos !== -1) { - const start = pos + 4; - let end = start; - let k = start; - let done = false; - while (!done) { - const e = _.stringIndexOf(extension, "-", k); - const len = e === -1 ? size - k : e - k; - if (len === 2) { - done = true; - } else if (e === -1) { - end = size; - done = true; - } else { - end = e; - k = e + 1; - } - } - - return _.substring(extension, start, end); - } - - // search for the key with no associated value - pos = _.stringIndexOf(extension, `-${key}`); - if (pos !== -1 && pos + 3 === size) { - return ""; - } else { - return undefined; - } - }; - - /** - * Resolves a locale by finding which base locale or fallback is available on the system, - * then determines which provided unicode options are available for that locale. - * - * ECMA-402: #sec-resolvelocale - * - * @param {Function} isAvailableLocale A function that takes a locale and returns if the locale is supported - * @param {String[]} requestedLocales The result of calling CanonicalizeLocaleList on the user-requested locale array - * @param {Object} options An object containing a lookupMatcher value and any value given by the user's option object, - * mapped to the correct unicode extension key - * @param {String[]} relevantExtensionKeys An array of unicode extension keys that we care about for the current lookup - */ - const ResolveLocale = function (isAvailableLocale, requestedLocales, options, relevantExtensionKeys) { - const matcher = options.lookupMatcher; - let r; - if (matcher === "lookup") { - r = LookupMatcher(isAvailableLocale, requestedLocales); - } else { - r = BestFitMatcher(isAvailableLocale, requestedLocales); - } - - let foundLocale = r.locale; - const result = bare({ dataLocale: foundLocale }); - let supportedExtension = "-u"; - _.forEach(relevantExtensionKeys, function (key) { - const keyLocaleData = getKeyLocaleData(key, foundLocale); - let value = keyLocaleData[0]; - let supportedExtensionAddition = ""; - if (r.extension) { - const requestedValue = UnicodeExtensionValue(r.extension, key); - if (requestedValue !== undefined) { - if (requestedValue !== "") { - if (_.arrayIndexOf(keyLocaleData, requestedValue) !== -1) { - value = requestedValue; - supportedExtensionAddition = `-${key}-${value}`; - } - } else if (_.arrayIndexOf(keyLocaleData, "true") !== -1) { - value = "true"; - } - } - } - - if (_.hasOwnProperty(options, key)) { - const optionsValue = options[key]; - if (_.arrayIndexOf(keyLocaleData, optionsValue) !== -1) { - if (optionsValue !== value) { - value = optionsValue; - supportedExtensionAddition = ""; - } - } - } - - result[key] = value; - supportedExtension += supportedExtensionAddition; - }); - - if (supportedExtension.length > 2) { - const privateIndex = _.stringIndexOf(foundLocale, "-x-"); - if (privateIndex === -1) { - foundLocale += supportedExtension; - } else { - const preExtension = _.substring(foundLocale, 0, privateIndex); - const postExtension = _.substring(foundLocale, privateIndex); - foundLocale = preExtension + supportedExtension + postExtension; - } - - foundLocale = platform.normalizeLanguageTag(foundLocale); - } - - result.locale = foundLocale; - return result; - }; - - var Internal = bare({ - ToObject(o) { - if (o === null) { - platform.raiseNeedObject(); - } - return o !== undefined ? Object(o) : undefined; - }, - - ToString(s) { - return s !== undefined ? String(s) : undefined; - }, - - ToNumber(n) { - return n !== undefined ? Number(n) : NaN; - }, - - ToLogicalBoolean(v) { - return v !== undefined ? Boolean(v) : undefined; - }, - - ToUint32(n) { - var num = Number(n), - ret = 0; - if (!isNaN(num) && isFinite(num)) { - ret = _.abs(num % _.pow(2, 32)); - } - return ret; - } - }); - - // Internal ops implemented in JS: - function GetOption(options, property, type, values, fallback) { - let value = options[property]; - - if (value !== undefined) { - if (type == "boolean") { - value = Internal.ToLogicalBoolean(value); - } - - if (type == "string") { - value = Internal.ToString(value); - } - - if (type == "number") { - value = Internal.ToNumber(value); - } - - if (values !== undefined && _.arrayIndexOf(values, value) == -1) { - platform.raiseOptionValueOutOfRange_3(String(value), String(property), `['${_.join(values, "', '")}']`); - } - - return value; - } - - return fallback; - } - - /** - * Extracts the value of the property named property from the provided options object, - * converts it to a Number value, checks whether it is in the allowed range, - * and fills in a fallback value if necessary. - * - * NOTE: this has known differences compared to the spec GetNumberOption in order to - * support more verbose errors. It is more similar to DefaultNumberOption - * - * ECMA402: #sec-defaultnumberoption - * - * @param {Object} options user-provided options object - * @param {String} property the property we are trying to get off of `options` - * @param {Number} minimum minimum allowable value for options[property] - * @param {Number} maximum maximum allowable value for options[property] - * @param {Number} fallback return value if options[property] is undefined or invalid - * @returns {Number} - */ - const GetNumberOption = function (options, property, minimum, maximum, fallback) { - let value = options[property]; - if (value !== undefined) { - value = Internal.ToNumber(value); - if (_.isNaN(value) || value < minimum || value > maximum) { - platform.raiseOptionValueOutOfRange_3(String(value), property, `[${minimum} - ${maximum}]`); - } - return _.floor(value); - } - - return fallback; - }; - - let CURRENCY_CODE_RE; - function InitializeCurrencyRegExp() { - CURRENCY_CODE_RE = /^[A-Z]{3}$/i; - } - - /** - * Returns an object representing the language, script, region, extension, and base of a language tag, - * or null if the language tag isn't valid. - * - * @param {String} langtag a candidate BCP47 langtag - */ - const parseLangtag = (function () { - // Language Tag Syntax as described in RFC 5646 #section-2.1 - // Note: All language tags are comprised only of ASCII characters (makes our job easy here) - // Note: Language tags in canonical form have case conventions, but language tags are case-insensitive for our purposes - - // Note: The ABNF syntax used in RFC 5646 #section-2.1 uses the following numeric quantifier conventions: - // - (Parentheses) are used for grouping - // - PRODUCTION => exactly 1 of PRODUCTION /PRODUCTION/ - // - [PRODUCTION] => 0 or 1 of PRODUCTION /(PRODUCTION)?/ - // - #PRODUCTION => exactly # of PRODUCTION /(PRODUCTION){#}/ - // - a*bPRODUCTION (where a and b are optional) - // - *PRODUCTION => any number of PRODUCTION /(PRODUCTION)*/ - // - 1*PRODUCTION => 1 or more of PRODUCTION /(PRODUCTION)+/ - // - #*PRODUCTION => # or more of PRODUCTION /(PRODUCTION){#,}/ - // - *#PRODUCTION => 0 to # (inclusive) of PRODUCTION /(PRODUCTION){,#}/ or /(PRODUCTION){0,#}/ - // - a*bPRODUCTION => a to b (inclusive) of PRODUCTION /(PRODUCTION){a,b}/ - - const ALPHA = "[A-Z]"; - const DIGIT = "[0-9]"; - const alphanum = `(?:${ALPHA}|${DIGIT})`; - - const regular = "\\b(?:art-lojban|cel-gaulish|no-bok|no-nyn|zh-guoyu|zh-hakka|zh-min|zh-min-nan|zh-xiang)\\b"; - const irregular = "\\b(?:en-GB-oed|i-ami|i-bnn|i-default|i-enochian|i-hak|i-klingon|i-lux|i-mingo" + - "|i-navajo|i-pwn|i-tao|i-tay|i-tsu|sgn-BE-FR|sgn-BE-NL|sgn-CH-DE)\\b"; - const grandfathered = `\\b(?:${regular}|${irregular})\\b`; - - const privateuse = `\\b(?:x(?:-${alphanum}{1,8}\\b)+)\\b`; // privateuse = "x" 1*("-" (1*8alphanum)) - const singleton = `\\b(?:${DIGIT}|[A-WY-Z])\\b`; // singleton ~= alphanum except for 'x' ; (paraphrased) - const extension = `\\b(?:${singleton}(?:-${alphanum}{2,8})+)\\b`; // extension = singleton 1*("-" (2*8alphanum)) - const variant = `\\b(?:${alphanum}{5,8}|${DIGIT}${alphanum}{3})\\b`; // variant = 5*8alphanum / (DIGIT 3alphanum) - const region = `\\b(?:${ALPHA}{2}|${DIGIT}{3})\\b`; // region = 2ALPHA / 3DIGIT - - const script = `\\b(?:${ALPHA}{4})\\b`; // script = 4ALPHA - const extlang = `\\b(?:${ALPHA}{3}\\b(?:-${ALPHA}{3}){0,2})\\b`; // extlang = 3ALPHA *2("-" 3ALPHA) - - const language = '\\b(?:' + // language = - `${ALPHA}{2,3}` + // 2*3ALPHA ; shortest ISO 639 code - `\\b(?:-${extlang})?` + // ["-" extlang] ; sometimes followed by extended language subtags - // `|${ALPHA}{4}` + // / 4ALPHA ; or reserved for future use - // `|${ALPHA}{5,8}` + // / 5*8ALPHA ; or registered language subtag - `|${ALPHA}{4,8}` + // ~/ 4*8ALPHA ; (paraphrased: combined previous two lines) - ')\\b'; - - // Use matching groups only when needed - const LANG_TAG_BASE = `\\b(${language})\\b` + // langtag = language - `\\b(?:-(${script}))?\\b` + // ["-" script] - `\\b(?:-(${region}))?\\b` ; // ["-" region] - const LANG_TAG_EXT = `\\b((?:-${variant})*)\\b` + // *("-" variant) - `\\b((?:-${extension})*)\\b` + // *("-" extension) - `\\b(?:-${privateuse})?\\b` ; // ["-" privateuse] - const langtag = `\\b${LANG_TAG_BASE}\\b${LANG_TAG_EXT}\\b`; - - const LANG_TAG = `\\b(?:${langtag}|${privateuse}|${grandfathered})\\b`; // Language-Tag = ... - - // Use ^ and $ to enforce that the entire input string is a langtag - const LANG_TAG_BASE_RE = new RegExp(`^${LANG_TAG_BASE}$`, 'i'); // [1] language; [2] script; [3] region; - const LANG_TAG_EXT_RE = new RegExp(`^${LANG_TAG_EXT}$`, 'i'); // [1] variants; [2] extensions; - const LANG_TAG_RE = new RegExp(`^${LANG_TAG}$`, 'i'); // [1] language; [2] script; [3] region; [4] variants; [5] extensions; - - const parsedLangtagCache = new IntlCache(); - return function (langtag) { - const cached = parsedLangtagCache.get(langtag); - if (cached) { - return cached; - } - - const parts = _.match(langtag, LANG_TAG_RE); - if (!parts) { - return null; - } - - const ret = _.create(); - ret.language = parts[1]; - ret.base = parts[1]; - if (parts[2]) { - ret.script = parts[2]; - ret.base += "-" + parts[2]; - } - - if (parts[3]) { - ret.region = parts[3]; - ret.base += "-" + parts[3]; - } - - if (parts[4]) { - ret.variants = parts[4]; - } - - if (parts[5]) { - ret.extensions = parts[5]; - - // parse the extension to find the unicode (-u) extension - const extensionParts = _.split(parts[5], "-"); - for (let i = 0; i < extensionParts.length; ++i) { - if (extensionParts[i] !== "u") { - continue; - } - - let k; - for (k = i + 1; k < extensionParts.length && extensionParts[k].length > 1; k++) { - // do nothing, we just want k to equal the index of the next element whose length is 1 - // or to equal the length of extensionParts - // We could have done this with Array.prototype.findIndex too - } - - if (k > i + 1) { - // this creates u-(keys and values)*, which is good enough for the UnicodeExtensionValue, - // which is the only place that this return value is intended to be used - ret.unicodeExtension = _.join(_.slice(extensionParts, i, k), "-"); - } - - // if we have gotten this far, we have found -u-{values}, so we can break - break; - } - } - - parsedLangtagCache.set(langtag, ret); - - return ret; - }; - })(); - - const IsWellFormedCurrencyCode = function (code) { - code = Internal.ToString(code); - - if (!CURRENCY_CODE_RE) { - InitializeCurrencyRegExp(); - } - - return platform.builtInRegexMatch(code, CURRENCY_CODE_RE) !== null; - } - - /** - * Returns true if locale can be generated by RFC5646 section 2.1 and does not contain - * duplicate variant or singleton subtags. - * - * Note that ICU does not implement this correctly for our usage because it is - * extremely permissive about what it will allow -- completely invalid language tags can - * pass through a round of uloc_forLanguageTag/uloc_toLanguageTag or uloc_canonicalize - * even if they are completely bogus. - * - * ECMA402: #sec-isstructurallyvalidlanguagetag - * - * @param {String} locale The locale to check - * @returns {Boolean} - */ - const IsStructurallyValidLanguageTag = function (locale) { - const parsed = parseLangtag(locale); - if (parsed === null) { - return false; - } - - // check duplicate variants - if (parsed.variants) { - const variants = _.split(parsed.variants, "-"); - const uniqueVariants = _.unique(variants); - - if (variants.length !== uniqueVariants.length) { - return false; - } - } - - if (parsed.extensions) { - const extensionParts = _.split(parsed.extensions, "-"); - const singletons = _.map(_.filter(extensionParts, (element) => element.length === 1), (element) => _.toLowerCase(element)); - const uniqueSingletons = _.unique(singletons); - - return singletons.length === uniqueSingletons.length; - } - - return true; - }; - - /** - * Given a locale or list of locales, returns a corresponding list where each locale - * is guaranteed to be "canonical" (proper capitalization, order, etc.). - * - * ECMA402: #sec-canonicalizelocalelist - * - * @param {String|String[]} locales the user-provided locales to be canonicalized - */ - const CanonicalizeLocaleList = function (locales) { - if (typeof locales === "undefined") { - return []; - } - - const seen = []; - const O = typeof locales === "string" ? [locales] : Internal.ToObject(locales); - const len = Internal.ToUint32(O.length); - let k = 0; - - while (k < len) { - const Pk = Internal.ToString(k); - if (Pk in O) { - const kValue = O[Pk]; - if ((typeof kValue !== "string" && typeof kValue !== "object") || kValue === null) { - platform.raiseNeedObjectOrString("locale"); - } - - const tag = Internal.ToString(kValue); - if (!IsStructurallyValidLanguageTag(tag)) { - platform.raiseLocaleNotWellFormed(tag); - } - - const canonicalizedTag = platform.normalizeLanguageTag(tag); - if (canonicalizedTag === undefined) { - // See comment in platform.normalizeLanguageTag about when this happens - platform.raiseLocaleNotWellFormed(tag); - } else if (_.arrayIndexOf(seen, canonicalizedTag) === -1) { - _.push(seen, canonicalizedTag); - } - } - - k += 1; - } - - return seen; - }; - - /** - * Returns the subset of requestedLocales that has a matching locale according to BestAvailableLocale. - * - * ECMA402: #sec-lookupsupportedlocales - * - * @param {Function} isAvailableLocale A function that takes a locale and returns if the locale is supported - * @param {String|String[]} requestedLocales - */ - const LookupSupportedLocales = function (isAvailableLocale, requestedLocales) { - const subset = []; - _.forEach(requestedLocales, function (locale) { - const noExtensionsLocale = parseLangtag(locale).base; - if (BestAvailableLocale(isAvailableLocale, noExtensionsLocale) !== undefined) { - _.push(subset, locale); - } - }); - - return subset; - }; - - const BestFitSupportedLocales = LookupSupportedLocales; - - /** - * Applies digit options used for number formatting onto the given intlObj - * - * This function is used by both NumberFormat and PluralRules, despite being defined - * as a NumberFormat abstract operation - * - * ECMA 402: #sec-setnfdigitoptions - * - * @param {Object} intlObj The state object of either a NumberFormat or PluralRules on which to set the resolved number options - * @param {Object} options The option object to pull min/max sigfigs, fraction digits, and integer digits - * @param {Number} mnfdDefault The default minimumFractionDigits - * @param {Number} mxfdDefault The default maximumFractionDigits - */ - const SetNumberFormatDigitOptions = function (intlObj, options, mnfdDefault, mxfdDefault) { - const mnid = GetNumberOption(options, "minimumIntegerDigits", 1, 21, 1); - const mnfd = GetNumberOption(options, "minimumFractionDigits", 0, 20, mnfdDefault); - const mxfdActualDefault = _.max(mnfd, mxfdDefault); - const mxfd = GetNumberOption(options, "maximumFractionDigits", mnfd, 20, mxfdActualDefault); - intlObj.minimumIntegerDigits = mnid; - intlObj.minimumFractionDigits = mnfd; - intlObj.maximumFractionDigits = mxfd; - - let mnsd = options.minimumSignificantDigits; - let mxsd = options.maximumSignificantDigits; - if (mnsd !== undefined || mxsd !== undefined) { - // don't read options.minimumSignificantDigits below in order to pass - // test262/test/intl402/NumberFormat/significant-digits-options-get-sequence.js - mnsd = GetNumberOption({ minimumSignificantDigits: mnsd }, "minimumSignificantDigits", 1, 21, 1); - mxsd = GetNumberOption({ maximumSignificantDigits: mxsd }, "maximumSignificantDigits", mnsd, 21, 21); - intlObj.minimumSignificantDigits = mnsd; - intlObj.maximumSignificantDigits = mxsd; - } - }; - - /** - * Returns the subset of requestedLocales that has a matching locale, according to - * options.localeMatcher and isAvailableLocale. - * - * ECMA402: #sec-supportedlocales - * - * @param {Function} isAvailableLocale A function that takes a locale and returns if the locale is supported - * @param {String|String[]} requestedLocales - * @param {Object} options - */ - const SupportedLocales = function (isAvailableLocale, requestedLocales, options) { - const matcher = options === undefined - ? "best fit" - : GetOption(Internal.ToObject(options), "localeMatcher", "string", ["best fit", "lookup"], "best fit"); - const supportedLocales = matcher === "best fit" - ? BestFitSupportedLocales(isAvailableLocale, requestedLocales) - : LookupSupportedLocales(isAvailableLocale, requestedLocales); - - for (let i = 0; i < supportedLocales.length; i++) { - _.defineProperty(supportedLocales, Internal.ToString(i), { configurable: false, writable: false }); - } - - // test262 supportedLocalesOf-returned-array-elements-are-frozen.js: - // Property length of object returned by SupportedLocales should not be writable - _.defineProperty(supportedLocales, "length", { - writable: false, - configurable: false, - enumerable: false, - }); - - return supportedLocales; - }; - - // the following two functions exist solely to prevent calling new Intl.{getCanonicalLocales|*.supportedLocalesOf} - // both should be bound to `intlStaticMethodThisArg` which has a hiddenObject with isValid = "Valid" - const intlStaticMethodThisArg = _.create(); - platform.setHiddenObject(intlStaticMethodThisArg, { isValid: "Valid" }); - const supportedLocalesOf_unconstructable = function (that, functionName, isAvailableLocale, requestedLocales, options) { - if (that === null || that === undefined) { - platform.raiseNotAConstructor(functionName); - } - - const hiddenObj = platform.getHiddenObject(that); - if (!hiddenObj || hiddenObj.isValid !== "Valid") { - platform.raiseNotAConstructor(functionName); - } - - return SupportedLocales(isAvailableLocale, CanonicalizeLocaleList(requestedLocales), options); - } - - const getCanonicalLocales_unconstructable = function (that, functionName, locales) { - if (that === null || that === undefined) { - platform.raiseNotAConstructor(functionName); - } - - const hiddenObj = platform.getHiddenObject(that); - if (!hiddenObj || hiddenObj.isValid !== "Valid") { - platform.raiseNotAConstructor(functionName); - } - - return CanonicalizeLocaleList(locales); - } - - // We go through a bit of a circus here to create and bind the getCanonicalLocales function for two reasons: - // 1. We want its name to be "getCanonicalLocales" - // 2. We want to make sure it isnt callable as `new {Intl.}getCanonicalLocales()` - // To accomplish (2), since we cant check CallFlags_New in JS Builtins, the next best thing is to bind the function to a known - // `this` and ensure that that is properly `this` on call (if not, we were called with `new` and should bail). - // However, this makes (1) more difficult, since binding a function changes its name - // When https://github.com/Microsoft/ChakraCore/issues/637 is fixed and we have a way - // to make built-in functions non-constructible, we can (and should) rethink this strategy - // TODO(jahorto): explore making these arrow functions, as suggested in #637, to get non-constructable "for free" - if (InitType === "Intl") { - const getCanonicalLocales_name = "Intl.getCanonicalLocales"; - const getCanonicalLocales_func = tagPublicFunction(getCanonicalLocales_name, function (locales) { - return getCanonicalLocales_unconstructable(this, getCanonicalLocales_name, locales); - }); - const getCanonicalLocales = _.bind(getCanonicalLocales_func, intlStaticMethodThisArg); - _.defineProperty(getCanonicalLocales, 'name', { - value: 'getCanonicalLocales', - writable: false, - enumerable: false, - configurable: true, - }); - _.defineProperty(Intl, "getCanonicalLocales", { - value: getCanonicalLocales, - writable: true, - enumerable: false, - configurable: true - }); - } - - /** - * Creates an object to be returned out of resolvedOptions() methods that avoids being tainted by Object.prototype - * - * @param {String[]} props The list of properties to extract from hiddenObject and add to the final resolved options - * @param {Object} hiddenObject The hiddenObject of the calling constructor that contains values for each prop in props - * @param {Function} func An optional custom function(prop, resolved) run for each prop; it should return true when - * it handles a property itself. If it does not return true, the default logic will be used. - */ - const createResolvedOptions = function (props, hiddenObject, func = null) { - const resolved = _.create(); - _.forEach(props, function (prop) { - if (func !== null && func(prop, resolved) === true) { - // the callback returned true, which means this property was handled and we can go to the next one - return; - } - - if (typeof hiddenObject[prop] !== "undefined") { - resolved[prop] = hiddenObject[prop]; - } - }); - - return _.setPrototypeOf(resolved, platform.Object_prototype); - }; - - // Intl.Collator, String.prototype.localeCompare - const Collator = (function () { - if (InitType !== "Intl" && InitType !== "String") { - return; - } - - const InitializeCollator = function (collator, locales, options) { - const requestedLocales = CanonicalizeLocaleList(locales); - options = options === undefined ? _.create() : Internal.ToObject(options); - - collator.usage = GetOption(options, "usage", "string", ["sort", "search"], "sort"); - // TODO: determine the difference between sort and search locale data - // const collatorLocaleData = collator.usage === "sort" ? localeData : localeData; - - const opt = _.create(); - opt.matcher = GetOption(options, "localeMatcher", "string", ["lookup", "best fit"], "best fit"); - let kn = GetOption(options, "numeric", "boolean", undefined, undefined); - opt.kn = kn === undefined ? kn : Internal.ToString(kn); - opt.kf = GetOption(options, "caseFirst", "string", ["upper", "lower", "false"], undefined); - - const r = ResolveLocale(platform.isCollatorLocaleAvailable, requestedLocales, opt, ["co", "kn", "kf"]); - collator.locale = r.locale; - collator.collation = r.co === null ? "default" : r.co; - collator.numeric = r.kn === "true"; - collator.caseFirst = r.kf; - collator.caseFirstEnum = toEnum(CollatorCaseFirst, collator.caseFirst); - - collator.sensitivity = GetOption(options, "sensitivity", "string", ["base", "accent", "case", "variant"], "variant"); - collator.sensitivityEnum = toEnum(CollatorSensitivity, collator.sensitivity); - - collator.ignorePunctuation = GetOption(options, "ignorePunctuation", "boolean", undefined, false); - - collator.initializedCollator = true; - - return collator; - }; - - let localeCompareStateCache; - // Make arguments undefined to ensure that localeCompare.length === 1 - platform.registerBuiltInFunction(tagPublicFunction("String.prototype.localeCompare", function (that, locales = undefined, options = undefined) { - if (this === undefined || this === null) { - platform.raiseThis_NullOrUndefined("String.prototype.localeCompare"); - } - - const thisStr = String(this); - const thatStr = String(that); - - // Performance optimization to cache the state object and UCollator when the default arguments are provided - // TODO(jahorto): investigate caching when locales and/or options are provided - let stateObject; - if (locales === undefined && options === undefined) { - if (localeCompareStateCache === undefined) { - localeCompareStateCache = _.create(); - InitializeCollator(localeCompareStateCache, undefined, undefined); - } - - stateObject = localeCompareStateCache; - } else { - stateObject = _.create(); - InitializeCollator(stateObject, locales, options); - } - - return platform.localeCompare(thisStr, thatStr, stateObject, /* forStringPrototypeLocaleCompare */ true); - }), IntlBuiltInFunctionID.StringLocaleCompare); - - // If we were only initializing Intl for String.prototype, don't initialize Intl.Collator - if (InitType === "String") { - return; - } - - // using const f = function ... to remain consistent with the rest of the file, - // but the following function expressions get a name themselves to satisfy Intl.Collator.name - // and Intl.Collator.prototype.compare.name - const Collator = tagPublicFunction("Intl.Collator", function Collator(locales = undefined, options = undefined) { - if (this === Intl || this === undefined) { - return new Collator(locales, options); - } - - let obj = Internal.ToObject(this); - if (!_.isExtensible(obj)) { - platform.raiseObjectIsNonExtensible("Collator"); - } - - // Use the hidden object to store data - let hiddenObject = platform.getHiddenObject(obj); - - if (hiddenObject === undefined) { - hiddenObject = _.create(); - platform.setHiddenObject(obj, hiddenObject); - } - - InitializeCollator(hiddenObject, locales, options); - - // Add the bound compare - hiddenObject.boundCompare = _.bind(compare, obj); - delete hiddenObject.boundCompare.name; - return obj; - }); - - const compare = tagPublicFunction("Intl.Collator.prototype.compare", function compare(x, y) { - if (typeof this !== "object") { - platform.raiseNeedObjectOfType("Collator.prototype.compare", "Collator"); - } - - const hiddenObject = platform.getHiddenObject(this); - if (hiddenObject === undefined || !hiddenObject.initializedCollator) { - platform.raiseNeedObjectOfType("Collator.prototype.compare", "Collator"); - } - - return platform.localeCompare(String(x), String(y), hiddenObject, /* forStringPrototypeLocaleCompare */ false); - }); - - // See explanation of `getCanonicalLocales` - const collator_supportedLocalesOf_name = "Intl.Collator.supportedLocalesOf"; - const collator_supportedLocalesOf_func = tagPublicFunction(collator_supportedLocalesOf_name, function (locales, options = undefined) { - return supportedLocalesOf_unconstructable(this, collator_supportedLocalesOf_name, platform.isCollatorLocaleAvailable, locales, options); - }); - const collator_supportedLocalesOf = _.bind(collator_supportedLocalesOf_func, intlStaticMethodThisArg); - _.defineProperty(collator_supportedLocalesOf, "name", { - value: "supportedLocalesOf", - writable: false, - enumerable: false, - configurable: true, - }); - _.defineProperty(Collator, "supportedLocalesOf", { - value: collator_supportedLocalesOf, - writable: true, - enumerable: false, - configurable: true, - }); - - _.defineProperty(Collator, "prototype", { - value: new Collator(), - writable: false, - enumerable: false, - configurable: false - }); - setPrototype(Collator.prototype, Object.prototype); - - _.defineProperty(Collator.prototype, "constructor", { - value: Collator, - writable: true, - enumerable: false, - configurable: true - }); - _.defineProperty(Collator.prototype, "resolvedOptions", { - value: function resolvedOptions() { - if (typeof this !== "object") { - platform.raiseNeedObjectOfType("Collator.prototype.resolvedOptions", "Collator"); - } - const hiddenObject = platform.getHiddenObject(this); - if (hiddenObject === undefined || !hiddenObject.initializedCollator) { - platform.raiseNeedObjectOfType("Collator.prototype.resolvedOptions", "Collator"); - } - - const options = [ - "locale", - "usage", - "sensitivity", - "ignorePunctuation", - "collation", - "numeric", - "caseFirst", - ]; - - return createResolvedOptions(options, hiddenObject); - }, - writable: true, - enumerable: false, - configurable: true - }); - - // test262's test\intl402\Collator\prototype\compare\name.js checks the name of the descriptor's getter function - const getCompare = function () { - if (typeof this !== "object") { - platform.raiseNeedObjectOfType("Collator.prototype.compare", "Collator"); - } - - const hiddenObject = platform.getHiddenObject(this); - if (hiddenObject === undefined || !hiddenObject.initializedCollator) { - platform.raiseNeedObjectOfType("Collator.prototype.compare", "Collator"); - } - - return hiddenObject.boundCompare; - }; - _.defineProperty(getCompare, "name", { - value: "get compare", - writable: false, - enumerable: false, - configurable: true, - }); - _.defineProperty(Collator.prototype, "compare", { - get: tagPublicFunction("get compare", getCompare), - enumerable: false, - configurable: true - }); - - return Collator; - })(); - - // Intl.NumberFormat, Number.prototype.toLocaleString - var NumberFormat = (function () { - if (InitType !== "Intl" && InitType !== "Number") { - return; - } - - const InitializeNumberFormat = function (nf, locales, options) { - const requestedLocales = CanonicalizeLocaleList(locales); - options = options === undefined ? _.create() : Internal.ToObject(options); - - const opt = _.create(); - opt.localeMatcher = GetOption(options, "localeMatcher", "string", ["best fit", "lookup"], "best fit"); - - const r = ResolveLocale(platform.isNFLocaleAvailable, requestedLocales, opt, ["nu"]); - nf.locale = r.locale; - nf.numberingSystem = r.nu; - - const style = GetOption(options, "style", "string", ["decimal", "percent", "currency"], "decimal"); - nf.style = style; - nf.formatterToUse = toEnum(NumberFormatStyle, _.toUpperCase(style)); - const useCurrency = style === "currency"; - - let currency = GetOption(options, "currency", "string", undefined, undefined); - if (currency !== undefined && !IsWellFormedCurrencyCode(currency)) { - platform.raiseInvalidCurrencyCode(currency); - } else if (currency === undefined && useCurrency) { - platform.raiseMissingCurrencyCode(); - } - - let cDigits = 0; - if (useCurrency) { - currency = _.toUpperCase(currency); - nf.currency = currency; - cDigits = platform.currencyDigits(currency); - } - - let currencyDisplay = GetOption(options, "currencyDisplay", "string", ["code", "symbol", "name"], "symbol"); - if (useCurrency) { - nf.currencyDisplay = currencyDisplay - nf.currencyDisplayToUse = toEnum(NumberFormatCurrencyDisplay, _.toUpperCase(currencyDisplay)); - } - - let mnfdDefault, mxfdDefault; - if (useCurrency) { - mnfdDefault = cDigits; - mxfdDefault = cDigits; - } else { - mnfdDefault = 0; - if (style === "percent") { - mxfdDefault = 0; - } else { - mxfdDefault = 3; - } - } - - SetNumberFormatDigitOptions(nf, options, mnfdDefault, mxfdDefault); - - nf.useGrouping = GetOption(options, "useGrouping", "boolean", undefined, true); - - nf.initializedNumberFormat = true; - - // Cache api instance and update numbering system on the object - platform.cacheNumberFormat(nf); - - return nf; - }; - - platform.registerBuiltInFunction(tagPublicFunction("Number.prototype.toLocaleString", function () { - if (typeof this !== "number" && !(this instanceof Number)) { - platform.raiseNeedObjectOfType("Number.prototype.toLocaleString", "Number"); - } - - const stateObject = _.create(); - InitializeNumberFormat(stateObject, arguments[0], arguments[1]); - - const n = Internal.ToNumber(this); - return platform.formatNumber(n, stateObject, /* toParts */ false, /* forNumberPrototypeToLocaleString */ true); - }), IntlBuiltInFunctionID.NumberToLocaleString); - - if (InitType === "Number") { - return; - } - - const NumberFormat = tagPublicFunction("Intl.NumberFormat", function NumberFormat(locales = undefined, options = undefined) { - if (this === Intl || this === undefined) { - return new NumberFormat(locales, options); - } - - const obj = Internal.ToObject(this); - - if (!_.isExtensible(obj)) { - platform.raiseObjectIsNonExtensible("NumberFormat"); - } - - // Use the hidden object to store data - let hiddenObject = platform.getHiddenObject(obj); - if (hiddenObject === undefined) { - hiddenObject = _.create(); - platform.setHiddenObject(obj, hiddenObject); - } - - InitializeNumberFormat(hiddenObject, locales, options); - - hiddenObject.boundFormat = _.bind(format, obj) - delete hiddenObject.boundFormat.name; - - return obj; - }); - - const format = tagPublicFunction("Intl.NumberFormat.prototype.format", function format(n) { - n = Internal.ToNumber(n); - - if (typeof this !== "object") { - platform.raiseNeedObjectOfType("NumberFormat.prototype.format", "NumberFormat"); - } - - const hiddenObject = platform.getHiddenObject(this); - if (hiddenObject === undefined || !hiddenObject.initializedNumberFormat) { - platform.raiseNeedObjectOfType("NumberFormat.prototype.format", "NumberFormat"); - } - - return platform.formatNumber(n, hiddenObject, /* toParts */ false, /* forNumberPrototypeToLocaleString */ false); - }); - - const formatToParts = tagPublicFunction("Intl.NumberFormat.prototype.formatToParts", function formatToParts(n) { - n = Internal.ToNumber(n); - - if (typeof this !== "object") { - platform.raiseNeedObjectOfType("NumberFormat.prototype.formatToParts", "NumberFormat"); - } - - const hiddenObject = platform.getHiddenObject(this); - if (hiddenObject === undefined || !hiddenObject.initializedNumberFormat) { - platform.raiseNeedObjectOfType("NumberFormat.prototype.formatToParts", "NumberFormat"); - } - - return platform.formatNumber(n, hiddenObject, /* toParts */ true, /* forNumberPrototypeToLocaleString */ false); - }); - - // See explanation of `getCanonicalLocales` - const numberFormat_supportedLocalesOf_name = "Intl.NumberFormat.supportedLocalesOf"; - const numberFormat_supportedLocalesOf_func = tagPublicFunction(numberFormat_supportedLocalesOf_name, function (locales, options = undefined) { - return supportedLocalesOf_unconstructable(this, numberFormat_supportedLocalesOf_name, platform.isNFLocaleAvailable, locales, options); - }); - const numberFormat_supportedLocalesOf = _.bind(numberFormat_supportedLocalesOf_func, intlStaticMethodThisArg); - _.defineProperty(numberFormat_supportedLocalesOf, "name", { - value: "supportedLocalesOf", - writable: false, - enumerable: false, - configurable: true, - }); - _.defineProperty(NumberFormat, "supportedLocalesOf", { - value: numberFormat_supportedLocalesOf, - writable: true, - enumerable: false, - configurable: true, - }); - - _.defineProperty(NumberFormat, "prototype", { - value: new NumberFormat(), - writable: false, - enumerable: false, - configurable: false, - }); - setPrototype(NumberFormat.prototype, Object.prototype); - _.defineProperty(NumberFormat.prototype, "constructor", { - value: NumberFormat, - writable: true, - enumerable: false, - configurable: true, - }); - - _.defineProperty(NumberFormat.prototype, "resolvedOptions", { - value: function resolvedOptions() { - if (typeof this !== "object") { - platform.raiseNeedObjectOfType("NumberFormat.prototype.resolvedOptions", "NumberFormat"); - } - const hiddenObject = platform.getHiddenObject(this); - if (hiddenObject === undefined || !hiddenObject.initializedNumberFormat) { - platform.raiseNeedObjectOfType("NumberFormat.prototype.resolvedOptions", "NumberFormat"); - } - - const options = ["locale", "numberingSystem", "style", "currency", "currencyDisplay", "minimumIntegerDigits", - "minimumFractionDigits", "maximumFractionDigits", "minimumSignificantDigits", "maximumSignificantDigits", - "useGrouping"]; - - return createResolvedOptions(options, hiddenObject); - }, - writable: true, - enumerable: false, - configurable: true, - }); - - // test262's test\intl402\NumberFormat\prototype\format\name.js checks the name of the descriptor's getter function - const getFormat = function () { - if (typeof this !== "object") { - platform.raiseNeedObjectOfType("NumberFormat.prototype.format", "NumberFormat"); - } - - const hiddenObject = platform.getHiddenObject(this); - if (hiddenObject === undefined || !hiddenObject.initializedNumberFormat) { - platform.raiseNeedObjectOfType("NumberFormat.prototype.format", "NumberFormat"); - } - - return hiddenObject.boundFormat; - }; - _.defineProperty(getFormat, "name", { - value: "get format", - writable: false, - enumerable: false, - configurable: true, - }); - _.defineProperty(NumberFormat.prototype, "format", { - get: tagPublicFunction("get format", getFormat), - enumerable: false, - configurable: true, - }); - - _.defineProperty(NumberFormat.prototype, "formatToParts", { - value: formatToParts, - enumerable: false, - configurable: true, - writable: true, - }); - - return NumberFormat; - })(); - - // Intl.DateTimeFormat, Date.prototype.toLocaleString, Date.prototype.toLocaleDateString, Date.prototype.toLocaleTimeString - var DateTimeFormat = (function () { - if (InitType !== "Intl" && InitType !== "Date") { - return; - } - - const narrowShortLong = ["narrow", "short", "long"]; - const twoDigitNumeric = ["2-digit", "numeric"]; - const allOptionValues = _.concat(twoDigitNumeric, narrowShortLong); - const dateTimeComponents = [ - ["weekday", narrowShortLong], - ["era", narrowShortLong], - ["year", twoDigitNumeric], - ["month", allOptionValues], // month has every option available to it - ["day", twoDigitNumeric], - ["hour", twoDigitNumeric], - ["minute", twoDigitNumeric], - ["second", twoDigitNumeric], - ["timeZoneName", _.slice(narrowShortLong, 1)] // timeZoneName only allows "short" and "long" - ]; - - /** - * Given a user-provided options object, getPatternForOptions generates a LDML/ICU pattern and then - * sets the pattern and all of the relevant options implemented by the pattern on the provided dtf before returning. - * - * @param {Object} dtf the DateTimeFormat internal object - * @param {Object} options the options object originally given by the user - */ - const getPatternForOptions = (function () { - // symbols come from the Unicode LDML: http://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table - const symbolForOption = { - weekday: "E", - era: "G", - year: "y", - month: "M", - day: "d", - // for hour, we have some special handling - hour: "j", hour12: "h", hour24: "H", - minute: "m", - second: "s", - timeZoneName: "z", - }; - // NOTE - keep this up to date with the map in PlatformAgnostic::Intl::GetDateTimePartKind and the UDateFormatField enum - const optionForSymbol = { - E: "weekday", c: "weekday", e: "weekday", - G: "era", - y: "year", u: "year", U: "year", - M: "month", L: "month", - d: "day", - h: "hour", H: "hour", K: "hour", k: "hour", - m: "minute", - s: "second", - z: "timeZoneName", Z: "timeZoneName", v: "timeZoneName", V: "timeZoneName", O: "timeZoneName", X: "timeZoneName", x: "timeZoneName", - }; - - // lengths here are how many times a symbol is repeated in a skeleton for a given option - // the Intl spec recommends that Intl "short" -> CLDR "abbreviated" and Intl "long" -> CLDR "wide" - const symbolLengthForOption = { - numeric: 1, - "2-digit": 2, - short: 3, - long: 4, - narrow: 5, - }; - const optionForSymbolLength = { - 1: "numeric", - 2: "2-digit", - 3: "short", - 4: "long", - 5: "narrow", - }; - - // for fixing up the hour pattern later - const patternForHourCycle = { - h12: "h", - h23: "H", - h11: "K", - h24: "k", - }; - const hourCycleForPattern = { - h: "h12", - H: "h23", - K: "h11", - k: "h24", - }; - - return function (dtf, options) { - const resolvedOptions = _.reduce(dateTimeComponents, function (resolved, component) { - const prop = component[0]; - const value = GetOption(options, prop, "string", component[1], undefined); - if (value !== undefined) { - resolved[prop] = value; - } - - return resolved; - }, _.create()); - - // Providing undefined for the `values` argument allows { hour12: "asd" } to become hour12 = true, - // which is apparently a feature of the spec, rather than a bug. - const hour12 = GetOption(options, "hour12", "boolean", undefined, undefined); - const hc = dtf.hourCycle; - - // Build up a skeleton by repeating skeleton keys (like "G", "y", etc) for a count corresponding to the intl option value. - const skeleton = _.reduce(_.keys(resolvedOptions), function (skeleton, optionKey) { - let optionValue = resolvedOptions[optionKey]; - if (optionKey === "hour") { - // hour12/hourCycle resolution in the spec has multiple issues: - // hourCycle and -hc can be out of sync: https://github.com/tc39/ecma402/issues/195 - // hour12 has precedence over a more specific option in hourCycle/hc - // hour12 can force a locale that prefers h23 and h12 to use h11 or h24, according to the spec - // We temporarily work around these similarly to firefox and implement custom hourCycle/hour12 resolution. - // TODO(jahorto): follow up with Intl spec about these issues - if (hour12 === true || (hour12 === undefined && (hc === "h11" || hc === "h12"))) { - optionKey = "hour12"; - } else if (hour12 === false || (hour12 === undefined && (hc === "h23" || hc === "h24"))) { - optionKey = "hour24"; - } - } - - return skeleton + _.repeat(symbolForOption[optionKey], symbolLengthForOption[optionValue]); - }, ""); - - let pattern = platform.getPatternForSkeleton(dtf.locale, skeleton); - - // getPatternForSkeleton (udatpg_getBestPattern) can ignore, add, and modify fields compared to the markers we gave in the skeleton. - // Most importantly, udatpg_getBestPattern will determine the most-preferred hour field for a locale and time type (12 or 24). - // Scan the generated pattern to extract the resolved fields, and fix up the hour field if the user requested an explicit hour cycle - let inLiteral = false; - let i = 0; - while (i < pattern.length) { - let cur = pattern[i]; - const isQuote = cur === "'"; - if (inLiteral) { - if (isQuote) { - inLiteral = false; - } - ++i; - continue; - } else if (isQuote) { - inLiteral = true; - ++i; - continue; - } else if (cur === " ") { - ++i; - continue; - } - - // we are not in a format literal, so we are in a symbolic section of the pattern - // now, we can force the correct hour pattern and set the internal slots correctly - if (cur === "h" || cur === "H" || cur === "K" || cur === "k") { - if (hc && hour12 === undefined) { - // if we have found an hour-like symbol and the user wanted a specific hour cycle, - // replace it and all such proceding contiguous symbols with the symbol corresponding - // to the user-requested hour cycle, if they are different - const replacement = patternForHourCycle[hc]; - if (replacement !== cur) { - if (pattern[i + 1] === cur) { - // 2-digit hour - pattern = _.substring(pattern, 0, i) + replacement + replacement + _.substring(pattern, i + 2); - } else { - // numeric hour - pattern = _.substring(pattern, 0, i) + replacement + _.substring(pattern, i + 1); - } - - // we have modified pattern[i] so we need to update cur - cur = pattern[i]; - } - } else { - // if we have found an hour-like symbol and the user didnt request an hour cycle, - // set the internal hourCycle property from the resolved pattern - dtf.hourCycle = hourCycleForPattern[cur]; - } - } - - let k = i + 1; - while (k < pattern.length && pattern[k] === cur) { - ++k; - } - - const resolvedKey = optionForSymbol[cur]; - const resolvedValue = optionForSymbolLength[k - i]; - dtf[resolvedKey] = resolvedValue; - i = k; - } - - dtf.pattern = pattern; - }; - })(); - - /** - * Initializes the dateTimeFormat argument with the given locales and options. - * - * ECMA-402: #sec-initializedatetimeformat - * - * @param {Object} dateTimeFormat the state object representing a DateTimeFormat instance or toLocale*String call - * @param {String|String[]} locales a user-provided list of locales - * @param {Object} options a user-provided options object - */ - const InitializeDateTimeFormat = function (dateTimeFormat, locales, options) { - const requestedLocales = CanonicalizeLocaleList(locales); - options = ToDateTimeOptions(options, "any", "date"); - - const opt = _.create(); - opt.localeMatcher = GetOption(options, "localeMatcher", "string", ["lookup", "best fit"], "best fit"); - // hc is the only option that can be set by -u extension or by options object key - opt.hc = GetOption(options, "hourCycle", "string", ["h11", "h12", "h23", "h24"], undefined); - - const r = ResolveLocale(platform.isDTFLocaleAvailable, requestedLocales, opt, ["nu", "ca", "hc"]); - dateTimeFormat.locale = r.locale; - dateTimeFormat.calendar = r.ca; - dateTimeFormat.hourCycle = r.hc; - dateTimeFormat.numberingSystem = r.nu; - - const localeWithoutSubtags = r.dataLocale; - let tz = options.timeZone; - if (tz === undefined) { - tz = platform.getDefaultTimeZone(); - } else { - tz = Internal.ToString(tz); - } - - // make tz uppercase here, as its easier to do now than in platform (even though the uppercase operation - // is supposed to be done in #sec-isvalidtimezonename) - const canonicalTZ = platform.validateAndCanonicalizeTimeZone(tz); - if (canonicalTZ === undefined || canonicalTZ === "Etc/Unknown") { - raise.rangeError(tz, "timeZone", "IANA Zone or Link name (Area/Location)"); - } else if (canonicalTZ === "Etc/UTC" || canonicalTZ === "Etc/GMT") { - tz = "UTC"; - } else { - tz = canonicalTZ; - } - - dateTimeFormat.timeZone = tz; - - // get the formatMatcher for validation only - GetOption(options, "formatMatcher", "string", ["basic", "best fit"], "best fit"); - - // this call replaces most of the spec code related to hour12/hourCycle and format negotiation/handling - getPatternForOptions(dateTimeFormat, options); - dateTimeFormat.initializedDateTimeFormat = true; - - return dateTimeFormat; - }; - - /** - * Modifies the options argument to have correct default values - * - * ECMA-402: #sec-todatetimeoptions - * - * @param {Object} options user-provided options object passed as second argument to Intl.DateTimeFormat/toLocale*String - * @param {String} required which kind of options must be provided for the call (one of "date", "time", or "any") - * @param {String} defaults which kind of options will be set to a default value (one of "date", "time", or "all") - * @returns {Object} modified options object - */ - const ToDateTimeOptions = function (options, required, defaults) { - options = options === undefined ? null : Internal.ToObject(options); - options = _.create(options); - let needDefaults = true; - if (required === "date" || required === "any") { - _.forEach(["weekday", "year", "month", "day"], function (prop) { - const value = options[prop]; - if (value !== undefined) { - needDefaults = false; - } - }); - } - - if (required === "time" || required === "any") { - _.forEach(["hour", "minute", "second"], function (prop) { - const value = options[prop]; - if (value !== undefined) { - needDefaults = false; - } - }); - } - - if (needDefaults === true && (defaults === "date" || defaults === "all")) { - _.forEach(["year", "month", "day"], function (prop) { - _.defineProperty(options, prop, { - value: "numeric", - writable: true, - enumerable: true, - configurable: true, - }); - }) - } - - if (needDefaults === true && (defaults === "time" || defaults === "all")) { - _.forEach(["hour", "minute", "second"], function (prop) { - _.defineProperty(options, prop, { - value: "numeric", - writable: true, - enumerable: true, - configurable: true, - }); - }) - } - - return options; - }; - - const FormatDateTime = function (dtf, x) { - if (_.isNaN(x) || !_.isFinite(x)) { - platform.raiseInvalidDate(); - } - - return platform.formatDateTime(dtf, x, /* toParts */ false, /* forDatePrototypeToLocaleString */ false); - }; - - const FormatDateTimeToParts = function (dtf, x) { - if (_.isNaN(x) || !_.isFinite(x)) { - platform.raiseInvalidDate(); - } - - return platform.formatDateTime(dtf, x, /* toParts */ true, /* forDatePrototypeToLocaleString */ false); - }; - - // caches for objects constructed with default parameters for each method - const __DateInstanceToLocaleStringDefaultCache = [undefined, undefined, undefined]; - const __DateInstanceToLocaleStringDefaultCacheSlot = bare({ - toLocaleString: 0, - toLocaleDateString: 1, - toLocaleTimeString: 2 - }); - - function DateInstanceToLocaleStringImplementation(name, option1, option2, cacheSlot, locales, options) { - if (typeof this !== 'object' || !(this instanceof Date)) { - platform.raiseNeedObjectOfType(name, "Date"); - } - const value = _.getDate(new Date(this)); - if (_.isNaN(value) || !_.isFinite(value)) { - return "Invalid Date"; - } - - let stateObject = undefined; - if (platform.useCaches && locales === undefined && options === undefined) { - // All default parameters (locales and options): this is the most valuable case to cache. - if (__DateInstanceToLocaleStringDefaultCache[cacheSlot]) { - // retrieve cached value - stateObject = __DateInstanceToLocaleStringDefaultCache[cacheSlot]; - } else { - // populate cache - stateObject = _.create(); - InitializeDateTimeFormat(stateObject, undefined, ToDateTimeOptions(undefined, option1, option2)); - __DateInstanceToLocaleStringDefaultCache[cacheSlot] = stateObject; - } - } - - if (!stateObject) { - stateObject = _.create(); - InitializeDateTimeFormat(stateObject, locales, ToDateTimeOptions(options, option1, option2)); - } - - return platform.formatDateTime(stateObject, Internal.ToNumber(this), /* toParts */ false, /* forDatePrototypeToLocaleString */ true); - } - - // Note: tagPublicFunction (platform.tagPublicLibraryCode) messes with declared name of the FunctionBody so that - // the functions called appear correctly in the debugger and stack traces. Thus, we we cannot call tagPublicFunction in a loop. - // Each entry point needs to have its own unique FunctionBody (which is a function as defined in the source code); - // this is why we have seemingly repeated ourselves below, instead of having one function and calling it multiple times with - // different parameters. - // - // The following invocations of `platform.registerBuiltInFunction(tagPublicFunction(name, entryPoint))` are enclosed in IIFEs. - // The IIFEs are used to group all of the meaningful differences between each entry point into the arguments to the IIFE. - // The exception to this are the different entryPoint names which are only significant for debugging (and cannot be passed in - // as arguments, as the name is intrinsic to the function declaration). - // - // The `date_toLocale*String_entryPoint` function names are placeholder names that will never be seen from user code. - // The function name property and FunctionBody declared name are overwritten by `tagPublicFunction`. - // The fact that they are declared with unique names is helpful for debugging. - // The functions *must not* be declared as anonymous functions (must be declared with a name); - // converting from an unnnamed function to a named function is not readily supported by the platform code and - // this has caused us to hit assertions in debug builds in the past. - // - // See invocations of `tagPublicFunction` on the `supportedLocalesOf` entry points for a similar pattern. - // - // The entryPoint functions will be called as `Date.prototype.toLocale*String` and thus their `this` parameters will be a Date. - // `DateInstanceToLocaleStringImplementation` is not on `Date.prototype`, so we must propagate `this` into the call by using - // `DateInstanceToLocaleStringImplementation.call(this, ...)`. - - (function (name, option1, option2, cacheSlot, platformFunctionID) { - platform.registerBuiltInFunction(tagPublicFunction(name, function date_toLocaleString_entryPoint(locales = undefined, options = undefined) { - return DateInstanceToLocaleStringImplementation.call(this, name, option1, option2, cacheSlot, locales, options); - }), platformFunctionID); - })("Date.prototype.toLocaleString", "any", "all", __DateInstanceToLocaleStringDefaultCacheSlot.toLocaleString, IntlBuiltInFunctionID.DateToLocaleString); - - (function (name, option1, option2, cacheSlot, platformFunctionID) { - platform.registerBuiltInFunction(tagPublicFunction(name, function date_toLocaleDateString_entryPoint(locales = undefined, options = undefined) { - return DateInstanceToLocaleStringImplementation.call(this, name, option1, option2, cacheSlot, locales, options); - }), platformFunctionID); - })("Date.prototype.toLocaleDateString", "date", "date", __DateInstanceToLocaleStringDefaultCacheSlot.toLocaleDateString, IntlBuiltInFunctionID.DateToLocaleDateString); - - (function (name, option1, option2, cacheSlot, platformFunctionID) { - platform.registerBuiltInFunction(tagPublicFunction(name, function date_toLocaleTimeString_entryPoint(locales = undefined, options = undefined) { - return DateInstanceToLocaleStringImplementation.call(this, name, option1, option2, cacheSlot, locales, options); - }), platformFunctionID); - })("Date.prototype.toLocaleTimeString", "time", "time", __DateInstanceToLocaleStringDefaultCacheSlot.toLocaleTimeString, IntlBuiltInFunctionID.DateToLocaleTimeString); - - // if we were only initializing Date, dont bother initializing Intl.DateTimeFormat - if (InitType !== "Intl") { - return; - } - - /** - * The Intl.DateTimeFormat constructor - * - * ECMA-402: #sec-intl.datetimeformat - * - * @param {String|String[]} locales - * @param {Object} options - */ - function DateTimeFormat(locales = undefined, options = undefined) { - if (this === Intl || this === undefined) { - return new DateTimeFormat(locales, options); - } - - const obj = Internal.ToObject(this); - if (!_.isExtensible(obj)) { - platform.raiseObjectIsNonExtensible("DateTimeFormat"); - } - - // Use the hidden object to store data - let hiddenObject = platform.getHiddenObject(obj); - - if (hiddenObject === undefined) { - hiddenObject = _.create(); - platform.setHiddenObject(obj, hiddenObject); - } - - InitializeDateTimeFormat(hiddenObject, locales, options); - - // only format has to be bound and attached to the DateTimeFormat - hiddenObject.boundFormat = _.bind(format, obj); - delete hiddenObject.boundFormat.name; - - return obj; - } - tagPublicFunction("Intl.DateTimeFormat", DateTimeFormat); - - /** - * Asserts that dtf is a valid DateTimeFormat object, or throws a TypeError otherwise. - * - * Returns the hiddenObject for the given dtf. - * - * @param {Object} dtf `this` of a given call to a DateTimeFormat member function - * @param {String} name the name of the function requiring dtf to be a valid DateTimeFormat - * @returns {Object} the hiddenObject for the given dtf - */ - const ensureMember = function (dtf, name) { - if (typeof dtf !== 'object') { - platform.raiseNeedObjectOfType(`Intl.DateTimeFormat.prototype.${name}`, "DateTimeFormat"); - } - let hiddenObject = platform.getHiddenObject(dtf); - if (hiddenObject === undefined || !hiddenObject.initializedDateTimeFormat) { - platform.raiseNeedObjectOfType(`Intl.DateTimeFormat.prototype.${name}`, "DateTimeFormat"); - } - - return hiddenObject; - }; - - /** - * Calls ensureMember on dtf, and then converts the given date to a number. - * - * Returns the hiddenObject for the given dtf and the resolved date. - * - * @param {Object} dtf `this` of a given call to a DateTimeFormat member function - * @param {Object} date the date to be formatted - * @param {String} name the name of the function requiring dtf to be a valid DateTimeFormat - */ - const ensureFormat = function (dtf, date, name) { - const hiddenObject = ensureMember(dtf, name); - - let x; - if (date === undefined) { - x = platform.builtInJavascriptDateEntryNow(); - } else { - x = Internal.ToNumber(date); - } - - // list of arguments for FormatDateTime{ToParts} - return [hiddenObject, x]; - }; - - const format = function (date) { - return _.apply(FormatDateTime, undefined, ensureFormat(this, date, "format")); - }; - tagPublicFunction("Intl.DateTimeFormat.prototype.format", format); - - const formatToParts = function (date) { - return _.apply(FormatDateTimeToParts, undefined, ensureFormat(this, date, "formatToParts")); - }; - tagPublicFunction("Intl.DateTimeFormat.prototype.formatToParts", formatToParts); - - _.defineProperty(DateTimeFormat, "prototype", { - value: new DateTimeFormat(), - writable: false, - enumerable: false, - configurable: false - }); - setPrototype(DateTimeFormat.prototype, Object.prototype); - - _.defineProperty(DateTimeFormat.prototype, "constructor", { - value: DateTimeFormat, - writable: true, - enumerable: false, - configurable: true - }); - - // test262's test\intl402\DateTimeFormat\prototype\format\name.js checks the name of the descriptor's getter function - const getFormat = function () { - const hiddenObject = ensureMember(this, format); - - return hiddenObject.boundFormat; - }; - _.defineProperty(getFormat, "name", { - value: "get format", - writable: false, - enumerable: false, - configurable: true, - }); - _.defineProperty(DateTimeFormat.prototype, "format", { - get: tagPublicFunction("get format", getFormat), - enumerable: false, - configurable: true, - }); - _.defineProperty(DateTimeFormat.prototype, "formatToParts", { - value: formatToParts, - enumerable: false, - configurable: true, - writable: true, - }); - _.defineProperty(DateTimeFormat.prototype, "resolvedOptions", { - value: function resolvedOptions() { - const hiddenObject = ensureMember(this, "resolvedOptions"); - const options = [ - "locale", - "calendar", - "numberingSystem", - "timeZone", - "hourCycle", - "weekday", - "era", - "year", - "month", - "day", - "hour", - "minute", - "second", - "timeZoneName", - ]; - - return createResolvedOptions(options, hiddenObject, function (prop, resolved) { - if (prop === "hourCycle") { - const hc = hiddenObject.hourCycle; - if (hiddenObject.hour !== undefined && hc !== null) { - resolved.hourCycle = hc; - resolved.hour12 = hc === "h11" || hc === "h12"; - } - - return true; - } - }); - }, - writable: true, - enumerable: false, - configurable: true, - }); - - // See explanation of `getCanonicalLocales` - const dateTimeFormat_supportedLocalesOf_name = "Intl.DateTimeFormat.supportedLocalesOf"; - const dateTimeFormat_supportedLocalesOf_func = tagPublicFunction(dateTimeFormat_supportedLocalesOf_name, function (locales, options = undefined) { - return supportedLocalesOf_unconstructable(this, dateTimeFormat_supportedLocalesOf_name, platform.isDTFLocaleAvailable, locales, options); - }); - const dateTimeFormat_supportedLocalesOf = _.bind(dateTimeFormat_supportedLocalesOf_func, intlStaticMethodThisArg); - _.defineProperty(dateTimeFormat_supportedLocalesOf, "name", { - value: "supportedLocalesOf", - writable: false, - enumerable: false, - configurable: true, - }); - _.defineProperty(DateTimeFormat, "supportedLocalesOf", { - value: dateTimeFormat_supportedLocalesOf, - writable: true, - enumerable: false, - configurable: true, - }); - - return DateTimeFormat; - })(); - - const PluralRules = (function() { - if (InitType !== "Intl") { - return; - } - - /** - * Initializes the given pluralRules object - * - * ECMA 402: #sec-initializepluralrules - * - * @param {Object} pluralRules - * @param {String|String[]} locales - * @param {Object} options - */ - const InitializePluralRules = function (pluralRules, locales, options) { - const requestedLocales = CanonicalizeLocaleList(locales); - options = options === undefined ? _.create() : Internal.ToObject(options); - const opt = _.create(); - opt.matcher = GetOption(options, "localeMatcher", "string", ["lookup", "best fit"], "best fit"); - pluralRules.type = GetOption(options, "type", "string", ["cardinal", "ordinal"], "cardinal"); - - SetNumberFormatDigitOptions(pluralRules, options, 0, 3); - - // %PluralRules%.[[RelevantExtensionKeys]] = [] (#sec-intl.pluralrules-internal-slots) - const r = ResolveLocale(platform.isPRLocaleAvailable, requestedLocales, opt, []); - - pluralRules.locale = r.locale; - pluralRules.pluralCategories = platform.pluralRulesKeywords(pluralRules); - - pluralRules.initializedPluralRules = true; - - return pluralRules; - }; - - /** - * Returns a String value representing the plural form of n according to - * the effective locale and the options of pluralRules - * - * ECMA 402: #sec-resolveplural - * - * @param {Object} pluralRules - * @param {Number} n - */ - const ResolvePlural = function (pluralRules, n) { - if (!_.isFinite(n)) { - return "other"; - } - - return platform.pluralRulesSelect(pluralRules, n); - }; - - // params are explicitly `= undefined` to make PluralRules.length === 0 - const PluralRules = function PluralRules(locales = undefined, options = undefined) { - if (new.target === undefined) { - platform.raiseNeedObjectOfType("Intl.PluralRules", "PluralRules"); - } - - const stateObject = _.create(); - platform.setHiddenObject(this, stateObject); - - InitializePluralRules(stateObject, locales, options); - - return this; - }; - tagPublicFunction("Intl.PluralRules", PluralRules); - - // ECMA 402: #sec-intl.pluralrules.prototype - _.defineProperty(PluralRules, "prototype", { - value: {}, - writable: false, - enumerable: false, - configurable: false, - }); - - // See explanation of `getCanonicalLocales` - // ECMA 402: #sec-intl.pluralrules.supportedlocalesof - const pluralRules_supportedLocalesOf_name = "Intl.PluralRules.supportedLocalesOf"; - const pluralRules_supportedLocalesOf_func = tagPublicFunction(pluralRules_supportedLocalesOf_name, function (locales, options = undefined) { - return supportedLocalesOf_unconstructable(this, pluralRules_supportedLocalesOf_name, platform.isPRLocaleAvailable, locales, options); - }); - const pluralRules_supportedLocalesOf = _.bind(pluralRules_supportedLocalesOf_func, intlStaticMethodThisArg); - _.defineProperty(pluralRules_supportedLocalesOf, "name", { - value: "supportedLocalesOf", - writable: false, - enumerable: false, - configurable: true, - }); - _.defineProperty(PluralRules, "supportedLocalesOf", { - value: pluralRules_supportedLocalesOf, - writable: true, - enumerable: false, - configurable: true, - }); - - // ECMA 402: #sec-intl.pluralrules.prototype.select - const select = function select(value) { - const pr = platform.getHiddenObject(this); - if (!pr || !pr.initializedPluralRules) { - platform.raiseNeedObjectOfType("Intl.PluralRules.prototype.select", "PluralRules"); - } - - const n = Internal.ToNumber(value); - return ResolvePlural(pr, n); - }; - tagPublicFunction("Intl.PluralRules.prototype.select", select); - _.defineProperty(PluralRules.prototype, "select", { - value: select, - enumerable: false, - configurable: true, - writable: true, - }); - - const resolvedOptions = function resolvedOptions() { - const pr = platform.getHiddenObject(this); - if (!pr || !pr.initializedPluralRules) { - platform.raiseNeedObjectOfType("Intl.PluralRules.prototype.select", "PluralRules"); - } - - return createResolvedOptions([ - "locale", - "type", - "minimumIntegerDigits", - "minimumFractionDigits", - "maximumFractionDigits", - "minimumSignificantDigits", - "maximumSignificantDigits", - "pluralCategories" - ], pr, (prop, resolved) => { - if (prop === "pluralCategories") { - // https://github.com/tc39/ecma402/issues/224: create a copy of the pluralCategories array - resolved.pluralCategories = _.slice(pr.pluralCategories, 0); - return true; - } - }); - }; - tagPublicFunction("Intl.PluralRules.prototype.resolvedOptions", resolvedOptions); - _.defineProperty(PluralRules.prototype, "resolvedOptions", { - value: resolvedOptions, - enumerable: false, - configurable: true, - writable: true, - }); - - return PluralRules; - })(); - - // Initialize Intl properties only if needed - if (InitType === "Intl") { - _.defineProperty(Intl, "Collator", { value: Collator, writable: true, enumerable: false, configurable: true }); - _.defineProperty(Intl, "NumberFormat", { value: NumberFormat, writable: true, enumerable: false, configurable: true }); - _.defineProperty(Intl, "DateTimeFormat", { value: DateTimeFormat, writable: true, enumerable: false, configurable: true }); - _.defineProperty(Intl, "PluralRules", { value: PluralRules, writable: true, enumerable: false, configurable: true }); - } - - } - /** - * - * - * - * - * - * - * END ICU, BEGIN WINGLOB - * - * - * - * - * - * - */ - else { - - if (platform.localeLookupCache === undefined) { - platform.localeLookupCache = new IntlCache(); - } - if (platform.localeBestFitCache === undefined) { - platform.localeBestFitCache = new IntlCache(); - } - - let __defaultLocale = undefined; - const GetDefaultLocale = function () { - if (__defaultLocale && platform.useCaches) { - return __defaultLocale; - } - - const locale = platform.getDefaultLocale(); - if (!locale) { - // if the system locale is undefined/null/empty string, we have to - // do something or else we will crash - __defaultLocale = "en"; - } else { - __defaultLocale = locale; - } - - return __defaultLocale; - }; - - let CreateDateTimeFormat = function (dateTimeFormat, condition) { - let retVal = platform.createDateTimeFormat(dateTimeFormat, condition); - if (retVal === null) { - // TODO (doilij): remove this fallback when implemented under ICU - dateTimeFormat.__numberingSystem = ""; - dateTimeFormat.__patternStrings = [ - "{month.a}{day.b}{hour.c}{minute.d}{second.e}", - "" // another entry for fun - ] - } - // no return value - }; - - let IsWellFormedLanguageTag = function (langTag) { - let retVal = platform.isWellFormedLanguageTag(langTag); - if (retVal === null) { - if (!LANG_TAG_RE) { - InitializeLangTagREs(); - } - let match = platform.builtInRegexMatch(langTag, LANG_TAG_RE); - return !!match; - } else { - return retVal; - } - }; - - var forEachIfPresent = function (obj, length, func) { - let current = 0; - while (current < length) { - if (current in obj) { - func(obj[current]); - } - current++; - } - }; - - // A helper function that is meant to rethrow SOE and OOM exceptions allowing them to propagate. - var throwExIfOOMOrSOE = function (ex) { - if (ex.number === -2146828260 || ex.number === -2146828281) { - throw ex; - } - }; - - var tagPublicFunction = function (name, f) { - return platform.tagPublicLibraryCode(f, name); - }; - - var resolveLocaleBestFit = function (locale, defaultLocale) { - var resolvedLocale = platform.localeBestFitCache.get(locale); - if (resolvedLocale === undefined) { - resolvedLocale = platform.resolveLocaleBestFit(locale); - if (resolvedLocale === null) { - if (!LANG_TAG_BASE_RE) { - InitializeLangTagREs(); - } - let match = platform.builtInRegexMatch(locale, LANG_TAG_BASE_RE); - resolvedLocale = match[1] + (match[2] ? ('-' + match[2]) : '') + (match[3] ? ('-' + match[3]) : ''); - } - // If resolvedLocale is undefined, cache that we got undefined - // so we don't try to resolve for `locale` in future. - platform.localeBestFitCache.set(locale, resolvedLocale === undefined ? NOT_FOUND : resolvedLocale); - } else if (resolvedLocale === NOT_FOUND) { - resolvedLocale = undefined; - } - - if (defaultLocale === locale) { - return resolvedLocale; - } else if (defaultLocale === resolvedLocale) { - return undefined; - } else { - return resolvedLocale; - } - } - - var resolveLocaleLookup = function (localeWithoutSubtags) { - let resolvedLocale = platform.localeLookupCache.get(localeWithoutSubtags); - if (resolvedLocale === undefined) { - resolvedLocale = platform.resolveLocaleLookup(localeWithoutSubtags); - if (resolvedLocale === null) { - if (!LANG_TAG_BASE_RE) { - InitializeLangTagREs(); - } - let match = platform.builtInRegexMatch(localeWithoutSubtags, LANG_TAG_BASE_RE); - // match: [1] language; [2] script; [3] region (e.g. en-Latn-US) - resolvedLocale = match[1] - + (match[2] ? ('-' + match[2]) : '') - + (match[3] ? ('-' + match[3]) : ''); - } - // If resolvedLocale is undefined, cache that we got undefined - // so we don't try to resolve for `locale` in future. - platform.localeLookupCache.set(localeWithoutSubtags, resolvedLocale === undefined ? NOT_FOUND : resolvedLocale); - } else if (resolvedLocale === NOT_FOUND) { - resolvedLocale = undefined; - } - return resolvedLocale; - } - - var getExtensionSubtags = function (locale) { - if (!LANG_TAG_EXT_RE) { - InitializeLangTagREs(); - } - - const match = platform.builtInRegexMatch(locale, LANG_TAG_EXT_RE); - if (!match) { - return undefined; - } - - // Note: extensions are /((${extension})-)*/ and are made up of \\b(?:${singleton}(?:-${alphanum}{2,8})+)\\b - // where the ${alphanum}{2,8} fields are of the form `${key}-${value}`. - // TODO (doilij): return an array of `${key}-${value}` pairs - - // REVIEW (doilij): leading - might mean we need to filter: // ss.match(rr)[4].split('-').filter((x)=>!!x) - // In that case: - // TODO StringInstanceSplit - // TODO ArrayInstanceFilter - // let extSubtags = ArrayInstanceFilter(extensionsString.split('-'), (x)=>!!x); - const extSubtags = match[0].split('-').filter((x) => !!x); - // REVIEW (doilij): performance (testing for str[0]==='-' and using the string after that or updating the regex might be faster) - - return extSubtags; - } - - var resolveLocaleHelper = function (locale, fitter, extensionFilter, defaultLocale) { - var subTags = platform.getExtensions(locale); - if (subTags === null) { - // platform.getExtensions returns null to indicate fallback to JS implementation - subTags = getExtensionSubtags(locale); - } - - if (subTags) { - callInstanceFunc(ArrayInstanceForEach, subTags, function (subTag) { - locale = callInstanceFunc(StringInstanceReplace, locale, "-" + subTag, ""); - }); - } - - // Instead of using replace, we will match two groups, one capturing, one not. The non capturing group just strips away -u if present. - // We are substituting for the function replace; which will only make a change if /-u$/ was found (-u at the end of the line) - // And because match will return null if we don't match entire sequence, we are using the two groups stated above. - locale = platform.builtInRegexMatch(locale, /(.*?)(?:-u)?$/)[1]; - var resolved = fitter(locale, defaultLocale); - - if (extensionFilter !== undefined) { // Filter to expected sub-tags - var filtered = []; - callInstanceFunc(ArrayInstanceForEach, subTags, (function (subTag) { - var parts = platform.builtInRegexMatch(subTag, /([^-]*)-?(.*)?/); // [0] entire thing; [1] key; [2] value - var key = parts[1]; - if (callInstanceFunc(ArrayInstanceIndexOf, extensionFilter, key) !== -1) { - callInstanceFunc(ArrayInstancePush, filtered, subTag); - } - })); - subTags = filtered; - } - - // As long as we are using the JS version of getExtensions on ICU, "u" will be considered an extension - // of a locale like "de-u-co-phonebk" - // Thus, we can't add the -u- ourselves here - const withoutSubTags = resolved; - if (resolved) { - if (subTags && getArrayLength(subTags) > 0) { - if (isPlatformUsingICU) { - resolved += "-"; - } else { - resolved += "-u-"; - } - } - - resolved += callInstanceFunc(ArrayInstanceJoin, subTags, "-"); - } else { - resolved = undefined; - } - - return setPrototype({ - locale: resolved, - subTags: subTags, - localeWithoutSubtags: withoutSubTags - }, null); - } - - var resolveLocales = function (givenLocales, matcher, extensionFilter, defaultLocaleFunc) { - var fitter = matcher === "lookup" ? resolveLocaleLookup : resolveLocaleBestFit; - var length = getArrayLength(givenLocales); - - var defaultLocale = defaultLocaleFunc(); - - length = length !== undefined ? length : 0; - for (var i = 0; i < length; i++) { - var resolved = resolveLocaleHelper(givenLocales[i], fitter, extensionFilter, defaultLocale); - if (resolved.locale !== undefined) { - return resolved; - } - } - return resolveLocaleHelper(defaultLocale, fitter, undefined, defaultLocale); - } - - // get just the language-script-region from the default locale - let __strippedDefaultLocale = undefined; - var strippedDefaultLocale = function () { - if (__strippedDefaultLocale) { - return __strippedDefaultLocale; - } - - if (isPlatformUsingICU) { - if (!LANG_TAG_BASE_RE) { - InitializeLangTagREs(); - } - - const def = GetDefaultLocale(); - const match = platform.builtInRegexMatch(def, LANG_TAG_BASE_RE); - if (match) { - // strip extensions by matching only the base - __strippedDefaultLocale = match[0]; - } else { - __strippedDefaultLocale = def; - } - } else { - // the only thing to strip off of a WinGlob locale is the collation, - // which comes after the underscore - __strippedDefaultLocale = platform.builtInRegexMatch(GetDefaultLocale(), /([^_]*).*/)[1]; - } - - return __strippedDefaultLocale; - }; - - var Internal = (function () { - return setPrototype({ - ToObject: function (o) { - if (o === null) { - platform.raiseNeedObject(); - } - return o !== undefined ? Object(o) : undefined; - }, - - ToString: function (s) { - return s !== undefined ? String(s) : undefined; - }, - - ToNumber: function (n) { - return n === undefined ? NaN : Number(n); - }, - - ToLogicalBoolean: function (v) { - return v !== undefined ? Boolean(v) : undefined; - }, - - ToUint32: function (n) { - var num = Number(n), - ret = 0; - if (!isNaN(num) && isFinite(num)) { - ret = Math.abs(num % Math.pow(2, 32)); - } - return ret; - }, - - HasProperty: function (o, p) { - // Walk the prototype chain - while (o) { - if (callInstanceFunc(ObjectInstanceHasOwnProperty, o, p)) { - return true; - } - o = ObjectGetPrototypeOf(o); - } - } - }, null) - })(); - - // Internal ops implemented in JS: - function GetOption(options, property, type, values, fallback) { - let value = options[property]; - - if (value !== undefined) { - if (type == "boolean") { - value = Internal.ToLogicalBoolean(value); - } - - if (type == "string") { - value = Internal.ToString(value); - } - - if (type == "number") { - value = Internal.ToNumber(value); - } - - if (values !== undefined && callInstanceFunc(ArrayInstanceIndexOf, values, value) == -1) { - platform.raiseOptionValueOutOfRange_3(String(value), String(property), "['" + callInstanceFunc(ArrayInstanceJoin, values, "', '") + "']"); - } - - return value; - } - - return fallback; - } - - function GetNumberOption(options, property, minimum, maximum, fallback) { - const rawValue = options[property]; - - if (typeof rawValue !== 'undefined') { - const formattedValue = Internal.ToNumber(rawValue); - - if (isNaN(formattedValue) || formattedValue < minimum || formattedValue > maximum) { - platform.raiseOptionValueOutOfRange_3(String(rawValue), String(property), "[" + minimum + " - " + maximum + "]"); - } - - return Math.floor(formattedValue); - } else { - return fallback; - } - } - - let CURRENCY_CODE_RE; - function InitializeCurrencyRegExp() { - CURRENCY_CODE_RE = /^[A-Z]{3}$/i; - } - - let LANG_TAG_BASE_RE; // language[-script[-region]] - let LANG_TAG_EXT_RE; // extension part (variant, extension, privateuse) - let LANG_TAG_RE; // full syntax of language tags (including privateuse and grandfathered) - function InitializeLangTagREs() { - // Language Tag Syntax as described in RFC 5646 #section-2.1 - // Note: All language tags are comprised only of ASCII characters (makes our job easy here) - // Note: Language tags in canonical form have case conventions, but language tags are case-insensitive for our purposes - - // Note: The ABNF syntax used in RFC 5646 #section-2.1 uses the following numeric quantifier conventions: - // - (Parentheses) are used for grouping - // - PRODUCTION => exactly 1 of PRODUCTION /PRODUCTION/ - // - [PRODUCTION] => 0 or 1 of PRODUCTION /(PRODUCTION)?/ - // - #PRODUCTION => exactly # of PRODUCTION /(PRODUCTION){#}/ - // - a*bPRODUCTION (where a and b are optional) - // - *PRODUCTION => any number of PRODUCTION /(PRODUCTION)*/ - // - 1*PRODUCTION => 1 or more of PRODUCTION /(PRODUCTION)+/ - // - #*PRODUCTION => # or more of PRODUCTION /(PRODUCTION){#,}/ - // - *#PRODUCTION => 0 to # (inclusive) of PRODUCTION /(PRODUCTION){,#}/ or /(PRODUCTION){0,#}/ - // - a*bPRODUCTION => a to b (inclusive) of PRODUCTION /(PRODUCTION){a,b}/ - - const ALPHA = "[A-Z]"; - const DIGIT = "[0-9]"; - const alphanum = `(?:${ALPHA}|${DIGIT})`; - - const regular = "\\b(?:art-lojban|cel-gaulish|no-bok|no-nyn|zh-guoyu|zh-hakka|zh-min|zh-min-nan|zh-xiang)\\b"; - const irregular = "\\b(?:en-GB-oed|i-ami|i-bnn|i-default|i-enochian|i-hak|i-klingon|i-lux|i-mingo" + - "|i-navajo|i-pwn|i-tao|i-tay|i-tsu|sgn-BE-FR|sgn-BE-NL|sgn-CH-DE)\\b"; - const grandfathered = `\\b(?:${regular}|${irregular})\\b`; - - const privateuse = `\\b(?:x(?:-${alphanum}{1,8}\\b)+)\\b`; // privateuse = "x" 1*("-" (1*8alphanum)) - const singleton = `\\b(?:${DIGIT}|[A-WY-Z])\\b`; // singleton ~= alphanum except for 'x' ; (paraphrased) - const extension = `\\b(?:${singleton}(?:-${alphanum}{2,8})+)\\b`; // extension = singleton 1*("-" (2*8alphanum)) - const variant = `\\b(?:${alphanum}{5,8}|${DIGIT}${alphanum}{3})\\b`; // variant = 5*8alphanum / (DIGIT 3alphanum) - const region = `\\b(?:${ALPHA}{2}|${DIGIT}{3})\\b`; // region = 2ALPHA / 3DIGIT - - const script = `\\b(?:${ALPHA}{4})\\b`; // script = 4ALPHA - const extlang = `\\b(?:${ALPHA}{3}\\b(?:-${ALPHA}{3}){0,2})\\b`; // extlang = 3ALPHA *2("-" 3ALPHA) - - const language = '\\b(?:' + // language = - `${ALPHA}{2,3}` + // 2*3ALPHA ; shortest ISO 639 code - `\\b(?:-${extlang})?` + // ["-" extlang] ; sometimes followed by extended language subtags - // `|${ALPHA}{4}` + // / 4ALPHA ; or reserved for future use - // `|${ALPHA}{5,8}` + // / 5*8ALPHA ; or registered language subtag - `|${ALPHA}{4,8}` + // ~/ 4*8ALPHA ; (paraphrased: combined previous two lines) - ')\\b'; - - // below: ${language}, ${script}, and ${region} are wrapped in parens because matching groups are useful for replacement - const LANG_TAG_BASE = `\\b(${language})\\b` + // langtag = language - `\\b(?:-(${script}))?\\b` + // ["-" script] - `\\b(?:-(${region}))?\\b` ; // ["-" region] - const LANG_TAG_EXT = `\\b(?:-${variant})*\\b` + // *("-" variant) - `\\b((?:-${extension})*)\\b` + // *("-" extension) - `\\b(?:-${privateuse})?\\b` ; // ["-" privateuse] - const langtag = `\\b${LANG_TAG_BASE}\\b${LANG_TAG_EXT}\\b`; - - const LANG_TAG = `\\b(?:${langtag}|${privateuse}|${grandfathered})\\b`; // Language-Tag = ... - - LANG_TAG_BASE_RE = new RegExp(LANG_TAG_BASE, 'i'); // [1] language; [2] script; [3] region - LANG_TAG_EXT_RE = new RegExp(LANG_TAG_EXT, 'i'); // [1] extensions /((${extension})-)*/ - LANG_TAG_RE = new RegExp(LANG_TAG, 'i'); // [1] language; [2] script; [3] region; [4] extensions - } - - function IsWellFormedCurrencyCode(code) { - code = Internal.ToString(code); - - if (!CURRENCY_CODE_RE) { - InitializeCurrencyRegExp(); - } - - return platform.builtInRegexMatch(code, CURRENCY_CODE_RE) !== null; - } - - // Make sure locales is an array, remove duplicate locales, make sure each locale is valid, and canonicalize each. - function CanonicalizeLocaleList(locales) { - if (typeof locales === 'undefined') { - return []; - } - - if (typeof locales === 'string') { - locales = [locales]; - } - - locales = Internal.ToObject(locales); - const length = Internal.ToUint32(locales.length); - - // TODO: Use sets here to prevent duplicates - let seen = []; - - forEachIfPresent(locales, length, function (locale) { - if ((typeof locale !== 'string' && typeof locale !== 'object') || locale === null) { - platform.raiseNeedObjectOrString("Locale"); - } - - let tag = Internal.ToString(locale); - - if (!IsWellFormedLanguageTag(tag)) { - platform.raiseLocaleNotWellFormed(String(tag)); - } - - tag = platform.normalizeLanguageTag(tag); - - if (tag !== undefined && callInstanceFunc(ArrayInstanceIndexOf, seen, tag) === -1) { - callInstanceFunc(ArrayInstancePush, seen, tag); - } - }); - - return seen; - } - - function LookupSupportedLocales(requestedLocales, fitter, defaultLocale) { - var subset = []; - var count = 0; - callInstanceFunc(ArrayInstanceForEach, requestedLocales, function (locale) { - try { - var resolved = resolveLocaleHelper(locale, fitter, undefined, defaultLocale); - if (resolved.locale) { - ObjectDefineProperty(subset, count, { value: resolved.locale, writable: false, configurable: false, enumerable: true }); - count = count + 1; - } - } catch (ex) { - throwExIfOOMOrSOE(ex); - // Expecting an error (other than OOM or SOE), same as fitter returning undefined - } - }); - ObjectDefineProperty(subset, "length", { value: count, writable: false, configurable: false }); - return subset; - } - - var supportedLocalesOfWrapper = function (that, functionName, locales, options) { - if (that === null || that === undefined) { - platform.raiseNotAConstructor(functionName); - } - - var hiddenObj = platform.getHiddenObject(that); - if (!hiddenObj || hiddenObj.isValid !== "Valid") { - platform.raiseNotAConstructor(functionName); - } - - return supportedLocalesOf(locales, options); - } - - var canonicalizeLocaleListWrapper = function (that, functionName, locales) { - if (that === null || that === undefined) { - platform.raiseNotAConstructor(functionName); - } - - var hiddenObj = platform.getHiddenObject(that); - if (!hiddenObj || hiddenObj.isValid !== "Valid") { - platform.raiseNotAConstructor(functionName); - } - - return CanonicalizeLocaleList(locales); - } - - // Shared among all the constructors - var supportedLocalesOf = function (locales, options) { - var matcher; - locales = CanonicalizeLocaleList(locales); - - if (typeof options !== 'undefined') { - matcher = options.localeMatcher; - - if (typeof matcher !== 'undefined') { - matcher = Internal.ToString(matcher); - - if (matcher !== 'lookup' && matcher !== 'best fit') { - platform.raiseOptionValueOutOfRange_3(String(matcher), "localeMatcher", "['best fit', 'lookup']"); - } - } - } - - if (typeof matcher === 'undefined' || matcher === 'best fit') { - return LookupSupportedLocales(locales, resolveLocaleBestFit, platform.normalizeLanguageTag(strippedDefaultLocale())); - } else { - return LookupSupportedLocales(locales, resolveLocaleLookup, strippedDefaultLocale()); - } - }; - - const intlStaticMethodThisArg = setPrototype({}, null); - platform.setHiddenObject(intlStaticMethodThisArg, setPrototype({ isValid: "Valid" }, null)); - - // We wrap these functions so that we can define the correct name for this function for each Intl constructor, - // which allows us to display the correct error message for each Intl type. - const collator_supportedLocalesOf_name = "Intl.Collator.supportedLocalesOf"; - const collator_supportedLocalesOf = callInstanceFunc(FunctionInstanceBind, tagPublicFunction(collator_supportedLocalesOf_name, - function collator_supportedLocalesOf_dummyName(locales, options = undefined) { - return supportedLocalesOfWrapper(this, collator_supportedLocalesOf_name, locales, options); - }), intlStaticMethodThisArg); - - const numberFormat_supportedLocalesOf_name = "Intl.NumberFormat.supportedLocalesOf"; - const numberFormat_supportedLocalesOf = callInstanceFunc(FunctionInstanceBind, tagPublicFunction(numberFormat_supportedLocalesOf_name, - function numberFormat_supportedLocalesOf_dummyName(locales, options = undefined) { - return supportedLocalesOfWrapper(this, numberFormat_supportedLocalesOf_name, locales, options); - }), intlStaticMethodThisArg); - - const dateTimeFormat_supportedLocalesOf_name = "Intl.DateTimeFormat.supportedLocalesOf"; - const dateTimeFormat_supportedLocalesOf = callInstanceFunc(FunctionInstanceBind, tagPublicFunction(dateTimeFormat_supportedLocalesOf_name, - function dateTimeFormat_supportedLocalesOf_dummyName(locales, options = undefined) { - return supportedLocalesOfWrapper(this, dateTimeFormat_supportedLocalesOf_name, locales, options); - }), intlStaticMethodThisArg); - - const getCanonicalLocales_name = "Intl.getCanonicalLocales"; - const getCanonicalLocales = callInstanceFunc(FunctionInstanceBind, tagPublicFunction(getCanonicalLocales_name, - function getCanonicalLocales_dummyName(locales) { - return canonicalizeLocaleListWrapper(this, getCanonicalLocales_name, locales); - }), intlStaticMethodThisArg); - - // TODO: Bound functions get the "bound" prefix by default, so we need to remove it. - // When https://github.com/Microsoft/ChakraCore/issues/637 is fixed and we have a way - // to make built-in functions non-constructible, we can remove the call to - // Function.prototype.bind (i.e. FunctionInstanceBind) and just rely on tagging instead of setting the "name" manually. - ObjectDefineProperty(collator_supportedLocalesOf, 'name', { value: 'supportedLocalesOf' }); - ObjectDefineProperty(numberFormat_supportedLocalesOf, 'name', { value: 'supportedLocalesOf' }); - ObjectDefineProperty(dateTimeFormat_supportedLocalesOf, 'name', { value: 'supportedLocalesOf' }); - ObjectDefineProperty(getCanonicalLocales, 'name', { value: 'getCanonicalLocales' }); - - // If an empty string is encountered for the value of the property; that means that is by default. - // So in the case of zh-TW; "default" and "stroke" are the same. - // This list was discussed with AnBorod, AnGlass and SureshJa. - var localesAcceptingCollationValues = setPrototype({ - "es-ES": setPrototype({ "trad": "tradnl" }, null), - "lv-LV": setPrototype({ "trad": "tradnl" }, null), - "de-DE": setPrototype({ "phonebk": "phoneb" }, null), - "ja-JP": setPrototype({ "unihan": "radstr" }, null), - // We believe "pronun" means "pronunciation" - "zh-TW": setPrototype({ "phonetic": "pronun", "unihan": "radstr", "stroke": "" }, null), - "zh-HK": setPrototype({ "unihan": "radstr", "stroke": "" }, null), - "zh-MO": setPrototype({ "unihan": "radstr", "stroke": "" }, null), - "zh-CN": setPrototype({ "stroke": "stroke", "pinyin": "" }, null), - "zh-SG": setPrototype({ "stroke": "stroke", "pinyin": "" }, null) - - // The following locales are supported by Windows; however, no BCP47 equivalent collation values were found for these. - // In future releases; this list (plus most of the Collator implementation) will be changed/removed as the platform support is expected to change. - // "hu-HU": ["technl"], - // "ka-GE": ["modern"], - // "x-IV": ["mathan"] - }, null); - - // reverses the keys and values in each locale's sub-object in localesAcceptingCollationValues - // localesAcceptingCollationValues[locale][key] = value -> reverseLocalesAcceptingCollationValues[locale][value] = key - var reverseLocalesAcceptingCollationValues = (function () { - const toReturn = setPrototype({}, null); - callInstanceFunc(ArrayInstanceForEach, ObjectGetOwnPropertyNames(localesAcceptingCollationValues), function (locale) { - const collationValuesForLocale = localesAcceptingCollationValues[locale]; - const reversedCollationValues = setPrototype({}, null); - - callInstanceFunc(ArrayInstanceForEach, ObjectGetOwnPropertyNames(collationValuesForLocale), function (collation) { - const windowsTag = collationValuesForLocale[collation]; - if (windowsTag !== "") { - reversedCollationValues[windowsTag] = collation; - } - }); - - toReturn[locale] = reversedCollationValues; - }); - return toReturn; - }()); - - // mappedDefaultLocale will get the default locale and update any deprecated - // collation/sort order values it may use - let __mappedDefaultLocale = undefined; - var mappedDefaultLocale = function () { - if (__mappedDefaultLocale && platform.useCaches) { - return __mappedDefaultLocale; - } - - let locale = undefined; - let collation = undefined; - if (isPlatformUsingICU) { - // ICU's getDefaultLocale() will return a valid BCP-47/RFC 5646 langtag - locale = GetDefaultLocale(); - const match = platform.builtInRegexMatch(locale, /-u(?:-[^\-][^\-]?-[^\-]+)*-co-([^\-]+).*/); - if (match) { - // if the system default locale had a collation, strip it for now - // we will add the collation back later in this function - collation = match[1]; - locale = callInstanceFunc(StringInstanceReplace, locale, `-co-${collation}`, ""); - } - } else { - // Windows' getDefaultLocale() will return a RFC4646 langtag - const parts = platform.builtInRegexMatch(GetDefaultLocale(), /([^_]*)_?(.+)?/); - locale = parts[1]; - collation = parts[2]; - } - - if (collation === undefined) { - __mappedDefaultLocale = locale; - return __mappedDefaultLocale; - } - - // we stripped the -co-collation or _collation above, so this function adds it back - const createLocaleCollationString = function (finalLocale, finalCollation) { - if (isPlatformUsingICU) { - return `${finalLocale}-co-${finalCollation}`; - } else { - return `${finalLocale}-u-co-${finalCollation}`; - } - }; - - const collationMapForLocale = reverseLocalesAcceptingCollationValues[locale]; - if (collationMapForLocale === undefined) { - // Assume the system wouldn't give us back a bad collation value - __mappedDefaultLocale = createLocaleCollationString(locale, collation); - return __mappedDefaultLocale; - } - - const mappedCollation = collationMapForLocale[collation]; - if (mappedCollation !== undefined) { - __mappedDefaultLocale = createLocaleCollationString(locale, mappedCollation); - } else { - __mappedDefaultLocale = createLocaleCollationString(locale, collation); - } - - return __mappedDefaultLocale; - }; - - // Intl.Collator, String.prototype.localeCompare - var Collator = (function () { - - if (InitType === 'Intl' || InitType === 'String') { - - function InitializeCollator(collator, localeList, options) { - if (typeof collator != "object") { - platform.raiseNeedObject(); - } - - if (callInstanceFunc(ObjectInstanceHasOwnProperty, collator, '__initializedIntlObject') && collator.__initializedIntlObject) { - platform.raiseObjectIsAlreadyInitialized("Collator", "Collator"); - } - - collator.__initializedIntlObject = true; - - // Extract options - if (typeof options === 'undefined') { - options = setPrototype({}, null); - } else { - options = Internal.ToObject(options); - } - - var matcher = GetOption(options, "localeMatcher", "string", ["lookup", "best fit"], "best fit"); - var usage = GetOption(options, "usage", "string", ["sort", "search"], "sort"); - var sensitivity = GetOption(options, "sensitivity", "string", ["base", "accent", "case", "variant"], undefined); - var ignorePunctuation = GetOption(options, "ignorePunctuation", "boolean", undefined, false); - var caseFirst = GetOption(options, "caseFirst", "string", ["upper", "lower", "false"], undefined); - var numeric = GetOption(options, "numeric", "boolean", [true, false], undefined); - - // Deal with the locales and extensions - localeList = CanonicalizeLocaleList(localeList); - var resolvedLocaleInfo = resolveLocales(localeList, matcher, undefined, mappedDefaultLocale); - - var collation = "default"; - var resolvedLocaleLookup = resolveLocaleLookup(resolvedLocaleInfo.localeWithoutSubtags); - var collationAugmentedLocale = resolvedLocaleLookup; - - if (resolvedLocaleInfo.subTags) { - callInstanceFunc(ArrayInstanceForEach, resolvedLocaleInfo.subTags, function (subTag) { - var parts = platform.builtInRegexMatch(subTag, /([^-]*)-?(.*)?/); // [0] entire thing; [1] key; [2] value - var key = parts[1]; - var value = parts[2] === "" ? undefined : parts[2]; - if (key === "kf" && caseFirst === undefined) { - caseFirst = GetOption(setPrototype({ caseFirst: value }, null), "caseFirst", "string", ["upper", "lower", "false"], undefined); - } else if (key === "kn" && numeric === undefined) { - if (value !== undefined) { - numeric = Internal.ToLogicalBoolean(callInstanceFunc(StringInstanceToLowerCase, value) === "true"); - } else { - numeric = true; - } - } else if (key === "co" && value !== undefined && value !== "default" && value !== "search" && value !== "sort" && value !== "standard") { - // Ignore these collation values as they shouldn't have any impact - collation = value; - } - }); - } - if (collation !== "default") { - var accepedCollationForLocale = localesAcceptingCollationValues[collationAugmentedLocale]; - var windowsCollation = ""; - if (accepedCollationForLocale !== undefined && (windowsCollation = accepedCollationForLocale[collation]) !== undefined) { - if (windowsCollation !== "") { - collationAugmentedLocale = collationAugmentedLocale + "_" + windowsCollation; - } - } - else { - collation = "default"; - } - } - - // Correct options if need be. - if (caseFirst === undefined) { - try { - var num = platform.compareString('A', 'a', resolvedLocaleLookup, undefined, undefined, undefined, undefined); - } catch (e) { - // Rethrow OOM or SOE - throwExIfOOMOrSOE(e); - - // Otherwise, Generic message to cover the exception throw from the CompareStringEx api. - // The platform's exception is also generic and in most if not all cases specifies that "a" argument is invalid. - // We have no other information from the platform on the cause of the exception. - platform.raiseOptionValueOutOfRange(); - } - - if (num === 0) { - caseFirst = 'false'; - } else if (num === -1) { - caseFirst = 'upper'; - } else { - caseFirst = 'lower'; - } - } - - if (sensitivity === undefined) { - sensitivity = "variant"; - } - - if (numeric === undefined) { - numeric = false; - } - - // Set the options on the object - collator.__matcher = matcher; - collator.__locale = resolvedLocaleInfo.localeWithoutSubtags; - collator.__localeForCompare = collationAugmentedLocale; - collator.__usage = usage; - collator.__sensitivity = sensitivity; - collator.__ignorePunctuation = ignorePunctuation; - collator.__caseFirst = caseFirst; - collator.__numeric = numeric; - collator.__collation = collation; - collator.__initializedCollator = true; - } - - platform.registerBuiltInFunction(tagPublicFunction("String.prototype.localeCompare", function () { - var that = arguments[0]; - if (this === undefined || this === null) { - platform.raiseThis_NullOrUndefined("String.prototype.localeCompare"); - } - else if (that === null) { - platform.raiseNeedObject(); - } - // ToString must be called on this/that argument before we do any other operation, as other operations in InitializeCollator may also be observable - var thisArg = String(this); - var that = String(that); - var stateObject = setPrototype({}, null); - InitializeCollator(stateObject, arguments[1], arguments[2]); - return Number(platform.compareString( - thisArg, - that, - stateObject.__localeForCompare, - toEnum(CollatorSensitivity, stateObject.__sensitivity), - stateObject.__ignorePunctuation, - stateObject.__numeric, - toEnum(CollatorCaseFirst, stateObject.__caseFirst) - )); - }), IntlBuiltInFunctionID.StringLocaleCompare); - - if (InitType === 'Intl') { - - function Collator(locales = undefined, options = undefined) { - if (this === Intl || this === undefined) { - return new Collator(locales, options); - } - - let obj = Internal.ToObject(this); - if (!ObjectIsExtensible(obj)) { - platform.raiseObjectIsNonExtensible("Collator"); - } - - // Use the hidden object to store data - let hiddenObject = platform.getHiddenObject(obj); - - if (hiddenObject === undefined) { - hiddenObject = setPrototype({}, null); - platform.setHiddenObject(obj, hiddenObject); - } - - InitializeCollator(hiddenObject, locales, options); - - // Add the bound compare - hiddenObject.__boundCompare = callInstanceFunc(FunctionInstanceBind, compare, obj); - delete hiddenObject.__boundCompare.name; - return obj; - } - tagPublicFunction("Intl.Collator", Collator); - - function compare(a, b) { - if (typeof this !== 'object') { - platform.raiseNeedObjectOfType("Collator.prototype.compare", "Collator"); - } - - var hiddenObject = platform.getHiddenObject(this); - if (hiddenObject === undefined || !hiddenObject.__initializedCollator) { - platform.raiseNeedObjectOfType("Collator.prototype.compare", "Collator"); - } - - a = String(a); - b = String(b); - - return Number(platform.compareString( - a, - b, - hiddenObject.__localeForCompare, - toEnum(CollatorSensitivity, hiddenObject.__sensitivity), - hiddenObject.__ignorePunctuation, - hiddenObject.__numeric, - toEnum(CollatorCaseFirst, hiddenObject.__caseFirst) - )); - } - tagPublicFunction("Intl.Collator.prototype.compare", compare); - - ObjectDefineProperty(Collator, 'supportedLocalesOf', { value: collator_supportedLocalesOf, writable: true, configurable: true }); - - ObjectDefineProperty(Collator, 'prototype', { value: new Collator(), writable: false, enumerable: false, configurable: false }); - setPrototype(Collator.prototype, Object.prototype); - - ObjectDefineProperty(Collator.prototype, 'constructor', { value: Collator, writable: true, enumerable: false, configurable: true }); - - ObjectDefineProperty(Collator.prototype, 'resolvedOptions', { - value: function resolvedOptions() { - if (typeof this !== 'object') { - platform.raiseNeedObjectOfType("Collator.prototype.resolvedOptions", "Collator"); - } - var hiddenObject = platform.getHiddenObject(this); - if (hiddenObject === undefined || !hiddenObject.__initializedCollator) { - platform.raiseNeedObjectOfType("Collator.prototype.resolvedOptions", "Collator"); - } - - return { - locale: hiddenObject.__locale, - usage: hiddenObject.__usage, - sensitivity: hiddenObject.__sensitivity, - ignorePunctuation: hiddenObject.__ignorePunctuation, - collation: hiddenObject.__collation, // "co" unicode extension - numeric: hiddenObject.__numeric, // "ka" unicode extension TODO: Determine if this is supported (doesn't have to be) - caseFirst: hiddenObject.__caseFirst // "kf" unicode extension TODO: Determine if this is supported (doesn't have to be) - } - }, writable: true, enumerable: false, configurable: true - }); - - ObjectDefineProperty(Collator.prototype, 'compare', { - get: tagPublicFunction('get compare', function () { - if (typeof this !== 'object') { - platform.raiseNeedObjectOfType("Collator.prototype.compare", "Collator"); - } - - var hiddenObject = platform.getHiddenObject(this); - if (hiddenObject === undefined || !hiddenObject.__initializedCollator) { - platform.raiseNeedObjectOfType("Collator.prototype.compare", "Collator"); - } - - return hiddenObject.__boundCompare; - }), enumerable: false, configurable: true - }); - - return Collator; - } - } - // 'Init.Collator' not defined if reached here. Return 'undefined' - return undefined; - })(); - - // Intl.NumberFormat, Number.prototype.toLocaleString - var NumberFormat = (function () { - if (InitType === 'Intl' || InitType === 'Number') { - function InitializeNumberFormat(numberFormat, localeList, options) { - if (typeof numberFormat != "object") { - platform.raiseNeedObject(); - } - - if (callInstanceFunc(ObjectInstanceHasOwnProperty, numberFormat, '__initializedIntlObject') && numberFormat.__initializedIntlObject) { - platform.raiseObjectIsAlreadyInitialized("NumberFormat", "NumberFormat"); - } - - numberFormat.__initializedIntlObject = true; - - // Extract options - if (typeof options === 'undefined') { - options = setPrototype({}, null); - } else { - options = Internal.ToObject(options); - } - - var matcher = GetOption(options, "localeMatcher", "string", ["lookup", "best fit"], "best fit"); - var style = GetOption(options, "style", "string", ["decimal", "percent", "currency"], "decimal"); - - var formatterToUse = NumberFormatStyle.DECIMAL; // DEFAULT - if (style === 'percent') { - formatterToUse = NumberFormatStyle.PERCENT; - } else if (style === 'currency') { - formatterToUse = NumberFormatStyle.CURRENCY; - } - - var currency = GetOption(options, "currency", "string", undefined, undefined); - var currencyDisplay = GetOption(options, 'currencyDisplay', 'string', ['code', 'symbol', 'name'], 'symbol'); - var currencyDigits = undefined; - - var minimumIntegerDigits = GetNumberOption(options, 'minimumIntegerDigits', 1, 21, 1); - var minimumFractionDigits = undefined; - var maximumFractionDigits = undefined; - var maximumFractionDigitsDefault = undefined; - - var minimumSignificantDigits = options.minimumSignificantDigits; - var maximumSignificantDigits = options.maximumSignificantDigits; - - if (typeof minimumSignificantDigits !== 'undefined' || typeof maximumSignificantDigits !== 'undefined') { - minimumSignificantDigits = GetNumberOption(options, 'minimumSignificantDigits', 1, 21, 1); - maximumSignificantDigits = GetNumberOption(options, 'maximumSignificantDigits', minimumSignificantDigits, 21, 21); - } - - var useGrouping = GetOption(options, 'useGrouping', 'boolean', undefined, true); - - // Deal with the locales and extensions - localeList = CanonicalizeLocaleList(localeList); - var resolvedLocaleInfo = resolveLocales(localeList, matcher, ["nu"], strippedDefaultLocale); - - // Correct the options if necessary - if (typeof currency !== 'undefined' && !IsWellFormedCurrencyCode(currency)) { - platform.raiseInvalidCurrencyCode(String(currency)); - } - - if (style === "currency") { - if (typeof currency === 'undefined') { - platform.raiseMissingCurrencyCode(); - } - currency = callInstanceFunc(StringInstanceToUpperCase, currency); - try { - currencyDigits = platform.currencyDigits(currency); - } catch (e) { - throwExIfOOMOrSOE(e); - platform.raiseInvalidCurrencyCode(String(currency)); - } - minimumFractionDigits = GetNumberOption(options, 'minimumFractionDigits', 0, 20, currencyDigits); - maximumFractionDigitsDefault = Math.max(currencyDigits, minimumFractionDigits); - } else { - currency = undefined; - currencyDisplay = undefined; - minimumFractionDigits = GetNumberOption(options, 'minimumFractionDigits', 0, 20, 0); - if (style === "percent") { - maximumFractionDigitsDefault = Math.max(minimumFractionDigits, 0); - } else { - maximumFractionDigitsDefault = Math.max(minimumFractionDigits, 3) - } - } - - maximumFractionDigits = GetNumberOption(options, 'maximumFractionDigits', minimumFractionDigits, 20, maximumFractionDigitsDefault); - - // Set the options on the object - numberFormat.__localeMatcher = matcher; - numberFormat.__locale = resolvedLocaleInfo.locale; - numberFormat.__style = style; - - if (currency !== undefined) { - numberFormat.__currency = currency; - } - - if (currencyDisplay !== undefined) { - numberFormat.__currencyDisplay = currencyDisplay; - numberFormat.__currencyDisplayToUse = NumberFormatCurrencyDisplay.DEFAULT; - if (currencyDisplay === "symbol") { - numberFormat.__currencyDisplayToUse = NumberFormatCurrencyDisplay.SYMBOL; - } else if (currencyDisplay === "code") { - numberFormat.__currencyDisplayToUse = NumberFormatCurrencyDisplay.CODE; - } else if (currencyDisplay === "name") { - numberFormat.__currencyDisplayToUse = NumberFormatCurrencyDisplay.NAME; - } - } - - numberFormat.__minimumIntegerDigits = minimumIntegerDigits; - numberFormat.__minimumFractionDigits = minimumFractionDigits; - numberFormat.__maximumFractionDigits = maximumFractionDigits; - - if (maximumSignificantDigits !== undefined) { - numberFormat.__minimumSignificantDigits = minimumSignificantDigits; - numberFormat.__maximumSignificantDigits = maximumSignificantDigits; - } - - numberFormat.__formatterToUse = formatterToUse; - numberFormat.__useGrouping = useGrouping; - - try { - // Cache api instance and update numbering system on the object - platform.cacheNumberFormat(numberFormat); - } catch (e) { - throwExIfOOMOrSOE(e); - // Generic message to cover the exception throw from the platform. - // The platform's exception is also generic and in most if not all cases specifies that "a" argument is invalid. - // We have no other information from the platform on the cause of the exception. - platform.raiseOptionValueOutOfRange(); - } - - if (!numberFormat.__numberingSystem) { - numberFormat.__numberingSystem = "latn"; // assume Latin numerals by default - } - - numberFormat.__numberingSystem = callInstanceFunc(StringInstanceToLowerCase, numberFormat.__numberingSystem); - numberFormat.__initializedNumberFormat = true; - } - - platform.registerBuiltInFunction(tagPublicFunction("Number.prototype.toLocaleString", function () { - if ((typeof this) !== 'number' && !(this instanceof Number)) { - platform.raiseNeedObjectOfType("Number.prototype.toLocaleString", "Number"); - } - - var stateObject = setPrototype({}, null); - InitializeNumberFormat(stateObject, arguments[0], arguments[1]); - - var n = Internal.ToNumber(this); - return String(platform.formatNumber(n, stateObject)); - }), IntlBuiltInFunctionID.NumberToLocaleString); - - if (InitType === 'Intl') { - function NumberFormat(locales = undefined, options = undefined) { - if (this === Intl || this === undefined) { - return new NumberFormat(locales, options); - } - - let obj = Internal.ToObject(this); - - if (!ObjectIsExtensible(obj)) { - platform.raiseObjectIsNonExtensible("NumberFormat"); - } - - // Use the hidden object to store data - let hiddenObject = platform.getHiddenObject(obj); - - if (hiddenObject === undefined) { - hiddenObject = setPrototype({}, null); - platform.setHiddenObject(obj, hiddenObject); - } - - InitializeNumberFormat(hiddenObject, locales, options); - - hiddenObject.__boundFormat = callInstanceFunc(FunctionInstanceBind, format, obj) - delete hiddenObject.__boundFormat.name; - - return obj; - } - tagPublicFunction("Intl.NumberFormat", NumberFormat); - - function format(n) { - n = Internal.ToNumber(n); - - if (typeof this !== 'object') { - platform.raiseNeedObjectOfType("NumberFormat.prototype.format", "NumberFormat"); - } - - var hiddenObject = platform.getHiddenObject(this); - if (hiddenObject === undefined || !hiddenObject.__initializedNumberFormat) { - platform.raiseNeedObjectOfType("NumberFormat.prototype.format", "NumberFormat"); - } - - return String(platform.formatNumber(n, hiddenObject)); - } - tagPublicFunction("Intl.NumberFormat.prototype.format", format); - - ObjectDefineProperty(NumberFormat, 'supportedLocalesOf', { value: numberFormat_supportedLocalesOf, writable: true, configurable: true }); - - var options = ['locale', 'numberingSystem', 'style', 'currency', 'currencyDisplay', 'minimumIntegerDigits', - 'minimumFractionDigits', 'maximumFractionDigits', 'minimumSignificantDigits', 'maximumSignificantDigits', - 'useGrouping']; - - ObjectDefineProperty(NumberFormat, 'prototype', { value: new NumberFormat(), writable: false, enumerable: false, configurable: false }); - setPrototype(NumberFormat.prototype, Object.prototype); - ObjectDefineProperty(NumberFormat.prototype, 'constructor', { value: NumberFormat, writable: true, enumerable: false, configurable: true }); - - ObjectDefineProperty(NumberFormat.prototype, 'resolvedOptions', { - value: function resolvedOptions() { - if (typeof this !== 'object') { - platform.raiseNeedObjectOfType("NumberFormat.prototype.resolvedOptions", "NumberFormat"); - } - var hiddenObject = platform.getHiddenObject(this); - if (hiddenObject === undefined || !hiddenObject.__initializedNumberFormat) { - platform.raiseNeedObjectOfType("NumberFormat.prototype.resolvedOptions", "NumberFormat"); - } - - var resolvedOptions = setPrototype({}, null); - - callInstanceFunc(ArrayInstanceForEach, options, function (option) { - if (typeof hiddenObject['__' + option] !== 'undefined') { - resolvedOptions[option] = hiddenObject['__' + option]; - } - }); - - return setPrototype(resolvedOptions, {}); - }, writable: true, enumerable: false, configurable: true - }); - - ObjectDefineProperty(NumberFormat.prototype, 'format', { - get: tagPublicFunction('get format', function () { - if (typeof this !== 'object') { - platform.raiseNeedObjectOfType("NumberFormat.prototype.format", "NumberFormat"); - } - - var hiddenObject = platform.getHiddenObject(this); - if (hiddenObject === undefined || !hiddenObject.__initializedNumberFormat) { - platform.raiseNeedObjectOfType("NumberFormat.prototype.format", "NumberFormat"); - } - - return hiddenObject.__boundFormat; - }), enumerable: false, configurable: true - }); - - return NumberFormat; - } - } - // 'Init.NumberFormat' not defined if reached here. Return 'undefined' - return undefined; - })(); - - // Intl.DateTimeFormat, Date.prototype.toLocaleString, Date.prototype.toLocaleDateString, Date.prototype.toLocaleTimeString - var DateTimeFormat = (function () { - if (InitType === 'Intl' || InitType === 'Date') { - function ToDateTimeOptions(options, required, defaults) { - if (options === undefined) { - options = setPrototype({}, null); - } else { - options = Internal.ToObject(options); - } - - var needDefaults = true; - if (required === "date" || required === "any") { - if (options.weekday !== undefined || options.year !== undefined || options.month !== undefined || options.day !== undefined) { - needDefaults = false; - } - } - if (required === "time" || required === "any") { - if (options.hour !== undefined || options.minute !== undefined || options.second !== undefined) { - needDefaults = false; - } - } - - if (needDefaults && (defaults === "date" || defaults === "all")) { - ObjectDefineProperty(options, "year", { - value: "numeric", writable: true, - enumerable: true, configurable: true - }); - ObjectDefineProperty(options, "month", { - value: "numeric", writable: true, - enumerable: true, configurable: true - }); - ObjectDefineProperty(options, "day", { - value: "numeric", writable: true, - enumerable: true, configurable: true - }); - } - if (needDefaults && (defaults === "time" || defaults === "all")) { - ObjectDefineProperty(options, "hour", { - value: "numeric", writable: true, - enumerable: true, configurable: true - }); - ObjectDefineProperty(options, "minute", { - value: "numeric", writable: true, - enumerable: true, configurable: true - }); - ObjectDefineProperty(options, "second", { - value: "numeric", writable: true, - enumerable: true, configurable: true - }); - } - return options; - } - - // Currently you cannot format date pieces and time pieces together, so this builds up a format template for each separately. - function EcmaOptionsToWindowsTemplate(options) { - var template = []; - - if (options.weekday) { - if (options.weekday === 'narrow' || options.weekday === 'short') { - callInstanceFunc(ArrayInstancePush, template, 'dayofweek.abbreviated'); - } else if (options.weekday === 'long') { - callInstanceFunc(ArrayInstancePush, template, 'dayofweek.full'); - } - } - - // TODO: Era not supported - if (options.year) { - if (options.year === '2-digit') { - callInstanceFunc(ArrayInstancePush, template, 'year.abbreviated'); - } else if (options.year === 'numeric') { - callInstanceFunc(ArrayInstancePush, template, 'year.full'); - } - } - - if (options.month) { - if (options.month === '2-digit' || options.month === 'numeric') { - callInstanceFunc(ArrayInstancePush, template, 'month.numeric') - } else if (options.month === 'short' || options.month === 'narrow') { - callInstanceFunc(ArrayInstancePush, template, 'month.abbreviated'); - } else if (options.month === 'long') { - callInstanceFunc(ArrayInstancePush, template, 'month.full'); - } - } - - if (options.day) { - callInstanceFunc(ArrayInstancePush, template, 'day'); - } - - if (options.timeZoneName) { - if (options.timeZoneName === "short") { - callInstanceFunc(ArrayInstancePush, template, 'timezone.abbreviated'); - } else if (options.timeZoneName === "long") { - callInstanceFunc(ArrayInstancePush, template, 'timezone.full'); - } - } - - callInstanceFunc(ArrayInstanceForEach, ['hour', 'minute', 'second'], function (opt) { - if (options[opt]) { - callInstanceFunc(ArrayInstancePush, template, opt); - } - }); - - // TODO: Timezone Name not supported. - return getArrayLength(template) > 0 ? callInstanceFunc(ArrayInstanceJoin, template, ' ') : undefined; - } - - var WindowsToEcmaCalendarMap = { - 'GregorianCalendar': 'gregory', - 'HebrewCalendar': 'hebrew', - 'HijriCalendar': 'islamic', - 'JapaneseCalendar': 'japanese', - 'JulianCalendar': 'julian', - 'KoreanCalendar': 'korean', - 'UmAlQuraCalendar': 'islamic-civil', - 'ThaiCalendar': 'thai', - 'TaiwanCalendar': 'taiwan' - }; - - function WindowsToEcmaCalendar(calendar) { - if (typeof calendar === 'undefined') { - return ''; - } - - return WindowsToEcmaCalendarMap[calendar] || 'gregory'; - } - - // Certain formats have similar patterns on both ecma and windows; will use helper methods for them - function correctWeekdayEraMonthPattern(patternString, userValue, searchParam) { - // parts[1] is either dayofweek.solo, dayofweek, era or month; parts[2] is either abbreviated or full - var parts = platform.builtInRegexMatch(patternString, RegExp("{(" + searchParam + "(?:\\.solo)?)\\.([a-z]*)(?:\\([0-9]\\))?}")); - // If this happens that means windows removed the specific pattern (which isn't expected; but better be safe) - if (parts === null) { - RaiseAssert(new Error("Error when correcting windows returned weekday/Era/Month pattern; regex returned null. \nInput was: '" + patternString + "'\nRegex: '" + "{(" + searchParam + "(\\.solo)?)\\.([a-z]*)(\\([0-9]\\))?}'")); - return patternString; - } - - if (parts[2] !== "full" && userValue === "long") { - return callInstanceFunc(StringInstanceReplace, patternString, parts[0], "{" + parts[1] + "." + "full" + "}"); - } else if (userValue !== "long") { - return callInstanceFunc(StringInstanceReplace, patternString, parts[0], "{" + parts[1] + "." + (userValue === "short" ? "abbreviated" : "abbreviated(1)") + "}"); - } - return patternString; - } - - function correctDayHourMinuteSecondMonthPattern(patternString, userValue, searchParam) { - // parts[1] is either month, day, hour, minute, or second - // REVIEW (doilij) is it even possible to have a '.solo' (i.e. /(?:\\.solo)?/ ) in the above cases? - var parts = platform.builtInRegexMatch(patternString, RegExp("{(" + searchParam + ")(?:\\.solo)?\\.([a-z]*)(?:\\([0-9]\\))?}")); - if (parts === null) { - RaiseAssert(new Error("Error when correcting windows returned day/hour/minute/second/month pattern; regex returned null. \nInput was: '" + patternString + "'\nRegex: '" + "{(" + searchParam + "(\\.solo)?)\\.([a-z]*)(\\([0-9]\\))?}'")); - return patternString; - } - - // Only correct the 2 digit; unless part[2] isn't integer - if (userValue === "2-digit") { - return callInstanceFunc(StringInstanceReplace, patternString, parts[0], "{" + parts[1] + ".integer(2)}"); - } else if (parts[2] !== "integer") { - return callInstanceFunc(StringInstanceReplace, patternString, parts[0], "{" + parts[1] + ".integer}"); - } - - return patternString; - } - - // Perhaps the level of validation that we have might not be required for this method - function updatePatternStrings(patternString, dateTimeFormat) { - if (dateTimeFormat.__weekday !== undefined) { - patternString = correctWeekdayEraMonthPattern(patternString, dateTimeFormat.__weekday, "dayofweek"); - } - - if (dateTimeFormat.__era !== undefined) { - // This is commented because not all options are supported for locales that do have era; - // In addition, we can't force era to be part of a locale using templates. - // patternString = correctWeekdayEraMonthPattern(patternString, dateTimeFormat.__era, "era", 2); - } - - if (dateTimeFormat.__year === "2-digit") { - var parts = platform.builtInRegexMatch(patternString, /\{year\.[a-z]*(\([0-9]\))?\}/); - if (parts === null) { - RaiseAssert(new Error("Error when correcting windows returned year; regex returned null")); - } else { - patternString = callInstanceFunc(StringInstanceReplace, patternString, parts[0], "{year.abbreviated(2)}"); - } - } else if (dateTimeFormat.__year === "full") { - var parts = platform.builtInRegexMatch(patternString, /\{year\.[a-z]*(\([0-9]\))?\}/); - if (parts === null) { - RaiseAssert(new Error("Error when correcting windows returned year; regex returned null")); - } else { - patternString = callInstanceFunc(StringInstanceReplace, patternString, parts[0], "{year.full}"); - } - } - - // Month partially overlaps with weekday/month; unless it's 2-digit or numeric in which case it overlaps with day/hour/minute/second - if (dateTimeFormat.__month !== undefined && dateTimeFormat.__month !== "2-digit" && dateTimeFormat.__month !== "numeric") { - patternString = correctWeekdayEraMonthPattern(patternString, dateTimeFormat.__month, "month"); - } else if (dateTimeFormat.__month !== undefined) { - patternString = correctDayHourMinuteSecondMonthPattern(patternString, dateTimeFormat.__month, "month"); - } - - if (dateTimeFormat.__day !== undefined) { - patternString = correctDayHourMinuteSecondMonthPattern(patternString, dateTimeFormat.__day, "day"); - } - - if (dateTimeFormat.__hour !== undefined) { - patternString = correctDayHourMinuteSecondMonthPattern(patternString, dateTimeFormat.__hour, "hour"); - } - - if (dateTimeFormat.__minute !== undefined) { - patternString = correctDayHourMinuteSecondMonthPattern(patternString, dateTimeFormat.__minute, "minute"); - } - - if (dateTimeFormat.__second !== undefined) { - patternString = correctDayHourMinuteSecondMonthPattern(patternString, dateTimeFormat.__second, "second"); - } - - if (dateTimeFormat.__timeZoneName !== undefined) { - patternString = correctWeekdayEraMonthPattern(patternString, dateTimeFormat.__timeZoneName, "timezone"); - } - - return patternString; - } - - function InitializeDateTimeFormat(dateTimeFormat, localeList, options) { - if (typeof dateTimeFormat != "object") { - platform.raiseNeedObject(); - } - - if (callInstanceFunc(ObjectInstanceHasOwnProperty, dateTimeFormat, '__initializedIntlObject') && dateTimeFormat.__initializedIntlObject) { - platform.raiseObjectIsAlreadyInitialized("DateTimeFormat", "DateTimeFormat"); - } - - dateTimeFormat.__initializedIntlObject = true; - - // Extract the options - options = ToDateTimeOptions(options, "any", "date"); - - var matcher = GetOption(options, "localeMatcher", "string", ["lookup", "best fit"], "best fit"); - var timeZone = GetOption(options, "timeZone", "string", undefined, undefined); - - if (timeZone !== undefined) { - timeZone = platform.validateAndCanonicalizeTimeZone(timeZone); - } else { - timeZone = platform.getDefaultTimeZone(); - } - - if (timeZone === undefined) { - platform.raiseOptionValueOutOfRange(); - } - - // Format options - var weekday = GetOption(options, "weekday", "string", ['narrow', 'short', 'long'], undefined); - var era = GetOption(options, "era", "string", ['narrow', 'short', 'long'], undefined); - var year = GetOption(options, "year", "string", ['2-digit', 'numeric'], undefined); - var month = GetOption(options, "month", "string", ['2-digit', 'numeric', 'narrow', 'short', 'long'], undefined); - var day = GetOption(options, "day", "string", ['2-digit', 'numeric'], undefined); - var hour = GetOption(options, "hour", "string", ['2-digit', 'numeric'], undefined); - var minute = GetOption(options, "minute", "string", ['2-digit', 'numeric'], undefined); - var second = GetOption(options, "second", "string", ['2-digit', 'numeric'], undefined); - var timeZoneName = GetOption(options, "timeZoneName", "string", ['short', 'long'], undefined); - - var hour12 = hour ? GetOption(options, "hour12", "boolean", undefined, undefined) : undefined; - var formatMatcher = GetOption(options, "formatMatcher", "string", ["basic", "best fit"], "best fit"); - - var windowsClock = hour12 !== undefined ? (hour12 ? "12HourClock" : "24HourClock") : undefined; - - var templateString = EcmaOptionsToWindowsTemplate(setPrototype({ - weekday: weekday, - era: era, - year: year, - month: month, - day: day, - hour: hour, - minute: minute, - second: second, - timeZoneName: timeZoneName - }, null)); - - // Deal with the locale - localeList = CanonicalizeLocaleList(localeList); - var resolvedLocaleInfo = resolveLocales(localeList, matcher, ["nu", "ca"], strippedDefaultLocale); - - // Assign the options - dateTimeFormat.__matcher = matcher; - dateTimeFormat.__timeZone = timeZone; - dateTimeFormat.__locale = resolvedLocaleInfo.locale; - - // Format options - dateTimeFormat.__weekday = weekday; - dateTimeFormat.__era = era; - dateTimeFormat.__year = year; - dateTimeFormat.__month = month; - dateTimeFormat.__day = day; - dateTimeFormat.__hour = hour; - dateTimeFormat.__minute = minute; - dateTimeFormat.__second = second; - dateTimeFormat.__timeZoneName = timeZoneName; - - dateTimeFormat.__hour12 = hour12; - dateTimeFormat.__formatMatcher = formatMatcher; - dateTimeFormat.__windowsClock = windowsClock; - - dateTimeFormat.__templateString = templateString; - - /* - * NOTE: - * Pattern string's are position-sensitive; while templates are not. - * If we specify {hour.integer(2)}:{minute.integer(2)} pattern string; we will always format as HH:mm. - * On the other hand, template strings don't give as fine granularity for options; and the platform decides how long month.abbreviated should be. - * Therefore, we have to create using template strings; and then change the .abbreivated/.integer values to have correct digits count if necessary. - * Thus, this results in this redundant looking code to create dateTimeFormat twice. - */ - var errorThrown = false; - - try { - // Create the DateTimeFormatter to extract pattern strings - CreateDateTimeFormat(dateTimeFormat, false); - } catch (e) { - // Rethrow SOE or OOM - throwExIfOOMOrSOE(e); - - // We won't throw for the first exception, but assume the template strings were rejected. - // Instead, we will try to fall back to default template strings. - var defaultOptions = ToDateTimeOptions(options, "none", "all"); - dateTimeFormat.__templateString = EcmaOptionsToWindowsTemplate(defaultOptions, null); - errorThrown = true; - } - - if (!errorThrown) { - // Update the pattern strings - dateTimeFormat.__templateString = updatePatternStrings(dateTimeFormat.__patternStrings[0], dateTimeFormat); - } - - try { - // Cache the date time formatter - CreateDateTimeFormat(dateTimeFormat, true); - } catch (e) { - // Rethrow SOE or OOM - throwExIfOOMOrSOE(e); - - // Otherwise, Generic message to cover the exception throw from the platform. - // The platform's exception is also generic and in most if not all cases specifies that "a" argument is invalid. - // We have no other information from the platform on the cause of the exception. - platform.raiseOptionValueOutOfRange(); - } - - // Correct the api's updated - dateTimeFormat.__calendar = WindowsToEcmaCalendar(dateTimeFormat.__windowsCalendar); - - dateTimeFormat.__numberingSystem = callInstanceFunc(StringInstanceToLowerCase, dateTimeFormat.__numberingSystem); - if (dateTimeFormat.__hour !== undefined) { - dateTimeFormat.__hour12 = dateTimeFormat.__windowsClock === "12HourClock"; - } - dateTimeFormat.__initializedDateTimeFormat = true; - } - - // caches for objects constructed with default parameters for each method - let __DateInstanceToLocaleStringDefaultCache = [undefined, undefined, undefined]; - const __DateInstanceToLocaleStringDefaultCacheSlot = setPrototype({ - toLocaleString: 0, - toLocaleDateString: 1, - toLocaleTimeString: 2 - }, null); - - function DateInstanceToLocaleStringImplementation(name, option1, option2, cacheSlot, locales, options) { - if (typeof this !== 'object' || !(this instanceof Date)) { - platform.raiseNeedObjectOfType(name, "Date"); - } - let value = callInstanceFunc(DateInstanceGetDate, new Date(this)); - if (isNaN(value) || !isFinite(value)) { - return "Invalid Date"; - } - - let stateObject = undefined; - if (platform.useCaches && locales === undefined && options === undefined) { - // All default parameters (locales and options): this is the most valuable case to cache. - if (__DateInstanceToLocaleStringDefaultCache[cacheSlot]) { - // retrieve cached value - stateObject = __DateInstanceToLocaleStringDefaultCache[cacheSlot]; - } else { - // populate cache - stateObject = setPrototype({}, null); - InitializeDateTimeFormat(stateObject, undefined, ToDateTimeOptions(undefined, option1, option2)); - __DateInstanceToLocaleStringDefaultCache[cacheSlot] = stateObject; - } - } - - if (!stateObject) { - stateObject = setPrototype({}, null); - InitializeDateTimeFormat(stateObject, locales, ToDateTimeOptions(options, option1, option2)); - } - - return String(platform.formatDateTime(Internal.ToNumber(this), stateObject)); - } - - // Note: tagPublicFunction (platform.tagPublicLibraryCode) messes with declared name of the FunctionBody so that - // the functions called appear correctly in the debugger and stack traces. Thus, we we cannot call tagPublicFunction in a loop. - // Each entry point needs to have its own unique FunctionBody (which is a function as defined in the source code); - // this is why we have seemingly repeated ourselves below, instead of having one function and calling it multiple times with - // different parameters. - // - // The following invocations of `platform.registerBuiltInFunction(tagPublicFunction(name, entryPoint))` are enclosed in IIFEs. - // The IIFEs are used to group all of the meaningful differences between each entry point into the arguments to the IIFE. - // The exception to this are the different entryPoint names which are only significant for debugging (and cannot be passed in - // as arguments, as the name is intrinsic to the function declaration). - // - // The `date_toLocale*String_entryPoint` function names are placeholder names that will never be seen from user code. - // The function name property and FunctionBody declared name are overwritten by `tagPublicFunction`. - // The fact that they are declared with unique names is helpful for debugging. - // The functions *must not* be declared as anonymous functions (must be declared with a name); - // converting from an unnnamed function to a named function is not readily supported by the platform code and - // this has caused us to hit assertions in debug builds in the past. - // - // See invocations of `tagPublicFunction` on the `supportedLocalesOf` entry points for a similar pattern. - // - // The entryPoint functions will be called as `Date.prototype.toLocale*String` and thus their `this` parameters will be a Date. - // `DateInstanceToLocaleStringImplementation` is not on `Date.prototype`, so we must propagate `this` into the call by using - // `DateInstanceToLocaleStringImplementation.call(this, ...)`. - - (function (name, option1, option2, cacheSlot, platformFunctionID) { - platform.registerBuiltInFunction(tagPublicFunction(name, function date_toLocaleString_entryPoint(locales = undefined, options = undefined) { - return DateInstanceToLocaleStringImplementation.call(this, name, option1, option2, cacheSlot, locales, options); - }), platformFunctionID); - })("Date.prototype.toLocaleString", "any", "all", __DateInstanceToLocaleStringDefaultCacheSlot.toLocaleString, IntlBuiltInFunctionID.DateToLocaleString); - - (function (name, option1, option2, cacheSlot, platformFunctionID) { - platform.registerBuiltInFunction(tagPublicFunction(name, function date_toLocaleDateString_entryPoint(locales = undefined, options = undefined) { - return DateInstanceToLocaleStringImplementation.call(this, name, option1, option2, cacheSlot, locales, options); - }), platformFunctionID); - })("Date.prototype.toLocaleDateString", "date", "date", __DateInstanceToLocaleStringDefaultCacheSlot.toLocaleDateString, IntlBuiltInFunctionID.DateToLocaleDateString); - - (function (name, option1, option2, cacheSlot, platformFunctionID) { - platform.registerBuiltInFunction(tagPublicFunction(name, function date_toLocaleTimeString_entryPoint(locales = undefined, options = undefined) { - return DateInstanceToLocaleStringImplementation.call(this, name, option1, option2, cacheSlot, locales, options); - }), platformFunctionID); - })("Date.prototype.toLocaleTimeString", "time", "time", __DateInstanceToLocaleStringDefaultCacheSlot.toLocaleTimeString, IntlBuiltInFunctionID.DateToLocaleTimeString); - - if (InitType === 'Intl') { - function DateTimeFormat(locales = undefined, options = undefined) { - if (this === Intl || this === undefined) { - return new DateTimeFormat(locales, options); - } - - let obj = Internal.ToObject(this); - if (!ObjectIsExtensible(obj)) { - platform.raiseObjectIsNonExtensible("DateTimeFormat"); - } - - // Use the hidden object to store data - let hiddenObject = platform.getHiddenObject(obj); - - if (hiddenObject === undefined) { - hiddenObject = setPrototype({}, null); - platform.setHiddenObject(obj, hiddenObject); - } - - InitializeDateTimeFormat(hiddenObject, locales, options); - - hiddenObject.__boundFormat = callInstanceFunc(FunctionInstanceBind, format, obj); - delete hiddenObject.__boundFormat.name; - - return obj; - } - tagPublicFunction("Intl.DateTimeFormat", DateTimeFormat); - - function format(date) { - if (typeof this !== 'object') { - platform.raiseNeedObjectOfType("DateTimeFormat.prototype.format", "DateTimeFormat"); - } - let hiddenObject = platform.getHiddenObject(this); - if (hiddenObject === undefined || !hiddenObject.__initializedDateTimeFormat) { - platform.raiseNeedObjectOfType("DateTimeFormat.prototype.format", "DateTimeFormat"); - } - - if (date !== undefined && (isNaN(date) || !isFinite(date))) { - platform.raiseInvalidDate(); - } - - let dateValue = undefined; - if (date !== undefined) { - dateValue = Internal.ToNumber(date) - } else { - dateValue = DateNow(); - } - - return String(platform.formatDateTime(dateValue, hiddenObject)); - } - tagPublicFunction("Intl.DateTimeFormat.prototype.format", format); - - DateTimeFormat.__relevantExtensionKeys = ['ca', 'nu']; - - ObjectDefineProperty(DateTimeFormat, 'prototype', { value: new DateTimeFormat(), writable: false, enumerable: false, configurable: false }); - setPrototype(DateTimeFormat.prototype, Object.prototype); - ObjectDefineProperty(DateTimeFormat.prototype, 'constructor', { value: DateTimeFormat, writable: true, enumerable: false, configurable: true }); - - ObjectDefineProperty(DateTimeFormat.prototype, 'format', { - get: tagPublicFunction('get format', function () { - if (typeof this !== 'object') { - platform.raiseNeedObjectOfType("DateTimeFormat.prototype.format", "DateTimeFormat"); - } - - var hiddenObject = platform.getHiddenObject(this); - if (hiddenObject === undefined || !hiddenObject.__initializedDateTimeFormat) { - platform.raiseNeedObjectOfType("DateTimeFormat.prototype.format", "DateTimeFormat"); - } - - return hiddenObject.__boundFormat; - }), enumerable: false, configurable: true - }); - - ObjectDefineProperty(DateTimeFormat.prototype, 'resolvedOptions', { - value: function resolvedOptions() { - if (typeof this !== 'object') { - platform.raiseNeedObjectOfType("DateTimeFormat.prototype.resolvedOptions", "DateTimeFormat"); - } - var hiddenObject = platform.getHiddenObject(this); - if (hiddenObject === undefined || !hiddenObject.__initializedDateTimeFormat) { - platform.raiseNeedObjectOfType("DateTimeFormat.prototype.resolvedOptions", "DateTimeFormat"); - } - var temp = setPrototype({ - locale: hiddenObject.__locale, - calendar: hiddenObject.__calendar, // ca unicode extension - numberingSystem: hiddenObject.__numberingSystem, // nu unicode extension - timeZone: hiddenObject.__timeZone, - hour12: hiddenObject.__hour12, - weekday: hiddenObject.__weekday, - era: hiddenObject.__era, - year: hiddenObject.__year, - month: hiddenObject.__month, - day: hiddenObject.__day, - hour: hiddenObject.__hour, - minute: hiddenObject.__minute, - second: hiddenObject.__second, - timeZoneName: hiddenObject.__timeZoneName - }, null) - var options = setPrototype({}, null); - callInstanceFunc(ArrayInstanceForEach, ObjectGetOwnPropertyNames(temp), function (prop) { - if ((temp[prop] !== undefined || prop === 'timeZone') && callInstanceFunc(ObjectInstanceHasOwnProperty, hiddenObject, "__" + prop)) { - options[prop] = temp[prop]; - } - }, hiddenObject); - return setPrototype(options, Object.prototype); - }, writable: true, enumerable: false, configurable: true - }); - - ObjectDefineProperty(DateTimeFormat, 'supportedLocalesOf', { value: dateTimeFormat_supportedLocalesOf, writable: true, configurable: true }); - - return DateTimeFormat; - } - } - // 'Init.DateTimeFormat' not defined if reached here. Return 'undefined' - return undefined; - })(); - - // Initialize Intl properties only if needed - if (InitType === 'Intl') { - ObjectDefineProperty(Intl, "Collator", { value: Collator, writable: true, enumerable: false, configurable: true }); - ObjectDefineProperty(Intl, "NumberFormat", { value: NumberFormat, writable: true, enumerable: false, configurable: true }); - ObjectDefineProperty(Intl, "DateTimeFormat", { value: DateTimeFormat, writable: true, enumerable: false, configurable: true }); - ObjectDefineProperty(Intl, "getCanonicalLocales", { value: getCanonicalLocales, writable: true, enumerable: false, configurable: true }); - } - - } // END WINGLOB -}); - -#endif -namespace Js -{ - const char Library_Bytecode_Intl[] = { -/* 00000000 */ 0x43, 0x68, 0x42, 0x63, 0x92, 0xD8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 00000010 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0xFE, 0xCE, 0x02, 0x00, 0xFF, -/* 00000020 */ 0x2E, 0xC9, 0x02, 0x00, 0xFF, 0x2E, 0xC9, 0x02, 0x00, 0x39, 0x00, 0x00, 0x00, 0x24, 0x4B, 0x00, -/* 00000030 */ 0x00, 0x44, 0x87, 0x00, 0x00, 0x91, 0xD8, 0x01, 0x00, 0xFE, 0x45, 0x02, 0x9A, 0x0B, 0x00, 0x00, -/* 00000040 */ 0x00, 0xB2, 0x0B, 0x00, 0x00, 0x00, 0xC8, 0x0B, 0x00, 0x00, 0x01, 0xDC, 0x0B, 0x00, 0x00, 0x01, -/* 00000050 */ 0xF6, 0x0B, 0x00, 0x00, 0x01, 0x14, 0x0C, 0x00, 0x00, 0x01, 0x36, 0x0C, 0x00, 0x00, 0x01, 0x4E, -/* 00000060 */ 0x0C, 0x00, 0x00, 0x01, 0x78, 0x0C, 0x00, 0x00, 0x01, 0x9E, 0x0C, 0x00, 0x00, 0x01, 0xD2, 0x0C, -/* 00000070 */ 0x00, 0x00, 0x01, 0x0C, 0x0D, 0x00, 0x00, 0x01, 0x38, 0x0D, 0x00, 0x00, 0x01, 0x62, 0x0D, 0x00, -/* 00000080 */ 0x00, 0x01, 0x8C, 0x0D, 0x00, 0x00, 0x01, 0xB6, 0x0D, 0x00, 0x00, 0x01, 0xDA, 0x0D, 0x00, 0x00, -/* 00000090 */ 0x01, 0xFE, 0x0D, 0x00, 0x00, 0x01, 0x28, 0x0E, 0x00, 0x00, 0x01, 0x50, 0x0E, 0x00, 0x00, 0x01, -/* 000000A0 */ 0x60, 0x0E, 0x00, 0x00, 0x01, 0x8C, 0x0E, 0x00, 0x00, 0x01, 0xC0, 0x0E, 0x00, 0x00, 0x01, 0xF4, -/* 000000B0 */ 0x0E, 0x00, 0x00, 0x01, 0x18, 0x0F, 0x00, 0x00, 0x01, 0x3C, 0x0F, 0x00, 0x00, 0x01, 0x4E, 0x0F, -/* 000000C0 */ 0x00, 0x00, 0x01, 0x70, 0x0F, 0x00, 0x00, 0x01, 0x98, 0x0F, 0x00, 0x00, 0x01, 0xC0, 0x0F, 0x00, -/* 000000D0 */ 0x00, 0x01, 0xDE, 0x0F, 0x00, 0x00, 0x01, 0x0A, 0x10, 0x00, 0x00, 0x01, 0x3E, 0x10, 0x00, 0x00, -/* 000000E0 */ 0x01, 0x7A, 0x10, 0x00, 0x00, 0x01, 0xBA, 0x10, 0x00, 0x00, 0x01, 0x08, 0x11, 0x00, 0x00, 0x01, -/* 000000F0 */ 0x30, 0x11, 0x00, 0x00, 0x01, 0x42, 0x11, 0x00, 0x00, 0x01, 0x68, 0x11, 0x00, 0x00, 0x01, 0x7C, -/* 00000100 */ 0x11, 0x00, 0x00, 0x01, 0x86, 0x11, 0x00, 0x00, 0x01, 0xB2, 0x11, 0x00, 0x00, 0x01, 0xB6, 0x11, -/* 00000110 */ 0x00, 0x00, 0x01, 0xC2, 0x11, 0x00, 0x00, 0x01, 0xEA, 0x11, 0x00, 0x00, 0x01, 0x0E, 0x12, 0x00, -/* 00000120 */ 0x00, 0x01, 0x32, 0x12, 0x00, 0x00, 0x01, 0x6A, 0x12, 0x00, 0x00, 0x01, 0x78, 0x12, 0x00, 0x00, -/* 00000130 */ 0x00, 0x80, 0x12, 0x00, 0x00, 0x00, 0x8C, 0x12, 0x00, 0x00, 0x00, 0x94, 0x12, 0x00, 0x00, 0x00, -/* 00000140 */ 0x9C, 0x12, 0x00, 0x00, 0x01, 0xA4, 0x12, 0x00, 0x00, 0x01, 0xCA, 0x12, 0x00, 0x00, 0x01, 0xF8, -/* 00000150 */ 0x12, 0x00, 0x00, 0x01, 0x26, 0x13, 0x00, 0x00, 0x01, 0x50, 0x13, 0x00, 0x00, 0x01, 0x78, 0x13, -/* 00000160 */ 0x00, 0x00, 0x01, 0x80, 0x13, 0x00, 0x00, 0x00, 0x98, 0x13, 0x00, 0x00, 0x00, 0xB0, 0x13, 0x00, -/* 00000170 */ 0x00, 0x00, 0xC0, 0x13, 0x00, 0x00, 0x00, 0xCC, 0x13, 0x00, 0x00, 0x00, 0xE0, 0x13, 0x00, 0x00, -/* 00000180 */ 0x01, 0xFC, 0x13, 0x00, 0x00, 0x00, 0x08, 0x14, 0x00, 0x00, 0x00, 0x16, 0x14, 0x00, 0x00, 0x00, -/* 00000190 */ 0x26, 0x14, 0x00, 0x00, 0x00, 0x30, 0x14, 0x00, 0x00, 0x00, 0x3A, 0x14, 0x00, 0x00, 0x01, 0x54, -/* 000001A0 */ 0x14, 0x00, 0x00, 0x00, 0x5C, 0x14, 0x00, 0x00, 0x00, 0x6A, 0x14, 0x00, 0x00, 0x00, 0x76, 0x14, -/* 000001B0 */ 0x00, 0x00, 0x00, 0x84, 0x14, 0x00, 0x00, 0x00, 0x92, 0x14, 0x00, 0x00, 0x01, 0xA0, 0x14, 0x00, -/* 000001C0 */ 0x00, 0x00, 0xAA, 0x14, 0x00, 0x00, 0x00, 0xC8, 0x14, 0x00, 0x00, 0x00, 0xE6, 0x14, 0x00, 0x00, -/* 000001D0 */ 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x0E, 0x15, 0x00, 0x00, 0x00, 0x2C, 0x15, 0x00, 0x00, 0x00, -/* 000001E0 */ 0x3E, 0x15, 0x00, 0x00, 0x00, 0x4A, 0x15, 0x00, 0x00, 0x00, 0x5A, 0x15, 0x00, 0x00, 0x00, 0x64, -/* 000001F0 */ 0x15, 0x00, 0x00, 0x00, 0x70, 0x15, 0x00, 0x00, 0x01, 0x86, 0x15, 0x00, 0x00, 0x01, 0x94, 0x15, -/* 00000200 */ 0x00, 0x00, 0x01, 0x9E, 0x15, 0x00, 0x00, 0x01, 0xAC, 0x15, 0x00, 0x00, 0x01, 0xB6, 0x15, 0x00, -/* 00000210 */ 0x00, 0x01, 0xC6, 0x15, 0x00, 0x00, 0x01, 0xD6, 0x15, 0x00, 0x00, 0x01, 0xE2, 0x15, 0x00, 0x00, -/* 00000220 */ 0x01, 0xEE, 0x15, 0x00, 0x00, 0x00, 0xFA, 0x15, 0x00, 0x00, 0x01, 0x0A, 0x16, 0x00, 0x00, 0x01, -/* 00000230 */ 0x1A, 0x16, 0x00, 0x00, 0x01, 0x2C, 0x16, 0x00, 0x00, 0x01, 0x3A, 0x16, 0x00, 0x00, 0x01, 0x44, -/* 00000240 */ 0x16, 0x00, 0x00, 0x01, 0x4E, 0x16, 0x00, 0x00, 0x01, 0x60, 0x16, 0x00, 0x00, 0x01, 0x72, 0x16, -/* 00000250 */ 0x00, 0x00, 0x01, 0x84, 0x16, 0x00, 0x00, 0x01, 0xA6, 0x16, 0x00, 0x00, 0x01, 0xB8, 0x16, 0x00, -/* 00000260 */ 0x00, 0x00, 0xC8, 0x16, 0x00, 0x00, 0x00, 0xD4, 0x16, 0x00, 0x00, 0x00, 0xDE, 0x16, 0x00, 0x00, -/* 00000270 */ 0x00, 0x10, 0x17, 0x00, 0x00, 0x00, 0x1A, 0x17, 0x00, 0x00, 0x00, 0x26, 0x17, 0x00, 0x00, 0x00, -/* 00000280 */ 0x4E, 0x17, 0x00, 0x00, 0x00, 0x60, 0x17, 0x00, 0x00, 0x00, 0x76, 0x17, 0x00, 0x00, 0x00, 0x90, -/* 00000290 */ 0x17, 0x00, 0x00, 0x00, 0xA2, 0x17, 0x00, 0x00, 0x00, 0xBC, 0x17, 0x00, 0x00, 0x00, 0xDA, 0x17, -/* 000002A0 */ 0x00, 0x00, 0x00, 0xF2, 0x17, 0x00, 0x00, 0x00, 0x34, 0x18, 0x00, 0x00, 0x00, 0x7E, 0x18, 0x00, -/* 000002B0 */ 0x00, 0x00, 0xCC, 0x18, 0x00, 0x00, 0x00, 0xF2, 0x18, 0x00, 0x00, 0x01, 0xFE, 0x18, 0x00, 0x00, -/* 000002C0 */ 0x01, 0x08, 0x19, 0x00, 0x00, 0x00, 0x16, 0x19, 0x00, 0x00, 0x01, 0x22, 0x19, 0x00, 0x00, 0x01, -/* 000002D0 */ 0x2E, 0x19, 0x00, 0x00, 0x01, 0x3E, 0x19, 0x00, 0x00, 0x00, 0x4C, 0x19, 0x00, 0x00, 0x01, 0x58, -/* 000002E0 */ 0x19, 0x00, 0x00, 0x01, 0x66, 0x19, 0x00, 0x00, 0x00, 0x74, 0x19, 0x00, 0x00, 0x01, 0x80, 0x19, -/* 000002F0 */ 0x00, 0x00, 0x01, 0x92, 0x19, 0x00, 0x00, 0x00, 0xA0, 0x19, 0x00, 0x00, 0x01, 0xAE, 0x19, 0x00, -/* 00000300 */ 0x00, 0x00, 0xB0, 0x19, 0x00, 0x00, 0x01, 0xBC, 0x19, 0x00, 0x00, 0x01, 0xC8, 0x19, 0x00, 0x00, -/* 00000310 */ 0x01, 0xD4, 0x19, 0x00, 0x00, 0x01, 0xE2, 0x19, 0x00, 0x00, 0x01, 0xEE, 0x19, 0x00, 0x00, 0x01, -/* 00000320 */ 0x02, 0x1A, 0x00, 0x00, 0x01, 0x26, 0x1A, 0x00, 0x00, 0x01, 0x4C, 0x1A, 0x00, 0x00, 0x01, 0x60, -/* 00000330 */ 0x1A, 0x00, 0x00, 0x01, 0x92, 0x1A, 0x00, 0x00, 0x01, 0xB2, 0x1A, 0x00, 0x00, 0x01, 0xD4, 0x1A, -/* 00000340 */ 0x00, 0x00, 0x01, 0xFC, 0x1A, 0x00, 0x00, 0x01, 0x1E, 0x1B, 0x00, 0x00, 0x01, 0x3A, 0x1B, 0x00, -/* 00000350 */ 0x00, 0x01, 0x58, 0x1B, 0x00, 0x00, 0x01, 0x84, 0x1B, 0x00, 0x00, 0x01, 0xA0, 0x1B, 0x00, 0x00, -/* 00000360 */ 0x01, 0xC0, 0x1B, 0x00, 0x00, 0x01, 0xE2, 0x1B, 0x00, 0x00, 0x01, 0xFC, 0x1B, 0x00, 0x00, 0x01, -/* 00000370 */ 0x2E, 0x1C, 0x00, 0x00, 0x01, 0x6C, 0x1C, 0x00, 0x00, 0x01, 0x9A, 0x1C, 0x00, 0x00, 0x01, 0xC8, -/* 00000380 */ 0x1C, 0x00, 0x00, 0x01, 0xF8, 0x1C, 0x00, 0x00, 0x01, 0x30, 0x1D, 0x00, 0x00, 0x01, 0x52, 0x1D, -/* 00000390 */ 0x00, 0x00, 0x01, 0x82, 0x1D, 0x00, 0x00, 0x01, 0xC8, 0x1D, 0x00, 0x00, 0x01, 0x10, 0x1E, 0x00, -/* 000003A0 */ 0x00, 0x01, 0x3C, 0x1E, 0x00, 0x00, 0x01, 0x6E, 0x1E, 0x00, 0x00, 0x01, 0x98, 0x1E, 0x00, 0x00, -/* 000003B0 */ 0x01, 0xC2, 0x1E, 0x00, 0x00, 0x01, 0xF2, 0x1E, 0x00, 0x00, 0x01, 0x22, 0x1F, 0x00, 0x00, 0x01, -/* 000003C0 */ 0x44, 0x1F, 0x00, 0x00, 0x01, 0x64, 0x1F, 0x00, 0x00, 0x01, 0x7C, 0x1F, 0x00, 0x00, 0x01, 0xBE, -/* 000003D0 */ 0x1F, 0x00, 0x00, 0x01, 0xF6, 0x1F, 0x00, 0x00, 0x01, 0x40, 0x20, 0x00, 0x00, 0x01, 0x80, 0x20, -/* 000003E0 */ 0x00, 0x00, 0x01, 0xCE, 0x20, 0x00, 0x00, 0x01, 0x12, 0x21, 0x00, 0x00, 0x01, 0x3E, 0x21, 0x00, -/* 000003F0 */ 0x00, 0x01, 0x42, 0x21, 0x00, 0x00, 0x01, 0x50, 0x21, 0x00, 0x00, 0x00, 0x58, 0x21, 0x00, 0x00, -/* 00000400 */ 0x00, 0x60, 0x21, 0x00, 0x00, 0x00, 0x7C, 0x21, 0x00, 0x00, 0x00, 0x98, 0x21, 0x00, 0x00, 0x00, -/* 00000410 */ 0xAC, 0x21, 0x00, 0x00, 0x00, 0xBC, 0x21, 0x00, 0x00, 0x00, 0xD4, 0x21, 0x00, 0x00, 0x00, 0xF4, -/* 00000420 */ 0x21, 0x00, 0x00, 0x00, 0x04, 0x22, 0x00, 0x00, 0x00, 0x16, 0x22, 0x00, 0x00, 0x00, 0x2A, 0x22, -/* 00000430 */ 0x00, 0x00, 0x00, 0x38, 0x22, 0x00, 0x00, 0x00, 0x46, 0x22, 0x00, 0x00, 0x00, 0x64, 0x22, 0x00, -/* 00000440 */ 0x00, 0x00, 0x70, 0x22, 0x00, 0x00, 0x00, 0x82, 0x22, 0x00, 0x00, 0x00, 0x92, 0x22, 0x00, 0x00, -/* 00000450 */ 0x00, 0xA4, 0x22, 0x00, 0x00, 0x00, 0xB6, 0x22, 0x00, 0x00, 0x00, 0xC8, 0x22, 0x00, 0x00, 0x01, -/* 00000460 */ 0xD4, 0x22, 0x00, 0x00, 0x00, 0xF6, 0x22, 0x00, 0x00, 0x00, 0x18, 0x23, 0x00, 0x00, 0x00, 0x2A, -/* 00000470 */ 0x23, 0x00, 0x00, 0x00, 0x4C, 0x23, 0x00, 0x00, 0x00, 0x5C, 0x23, 0x00, 0x00, 0x00, 0x70, 0x23, -/* 00000480 */ 0x00, 0x00, 0x00, 0x7E, 0x23, 0x00, 0x00, 0x00, 0x8E, 0x23, 0x00, 0x00, 0x00, 0xB0, 0x23, 0x00, -/* 00000490 */ 0x00, 0x00, 0xCA, 0x23, 0x00, 0x00, 0x00, 0xE6, 0x23, 0x00, 0x00, 0x00, 0xF4, 0x23, 0x00, 0x00, -/* 000004A0 */ 0x00, 0xFA, 0x23, 0x00, 0x00, 0x00, 0xFE, 0x23, 0x00, 0x00, 0x01, 0x04, 0x24, 0x00, 0x00, 0x01, -/* 000004B0 */ 0x0A, 0x24, 0x00, 0x00, 0x01, 0x10, 0x24, 0x00, 0x00, 0x01, 0x16, 0x24, 0x00, 0x00, 0x01, 0x1C, -/* 000004C0 */ 0x24, 0x00, 0x00, 0x01, 0x22, 0x24, 0x00, 0x00, 0x01, 0x44, 0x24, 0x00, 0x00, 0x01, 0x58, 0x24, -/* 000004D0 */ 0x00, 0x00, 0x01, 0x5C, 0x24, 0x00, 0x00, 0x01, 0x74, 0x24, 0x00, 0x00, 0x01, 0x82, 0x24, 0x00, -/* 000004E0 */ 0x00, 0x01, 0xA8, 0x24, 0x00, 0x00, 0x00, 0xB6, 0x24, 0x00, 0x00, 0x01, 0xCC, 0x24, 0x00, 0x00, -/* 000004F0 */ 0x00, 0xD2, 0x24, 0x00, 0x00, 0x00, 0xDA, 0x24, 0x00, 0x00, 0x01, 0xF6, 0x24, 0x00, 0x00, 0x00, -/* 00000500 */ 0x00, 0x25, 0x00, 0x00, 0x00, 0x10, 0x25, 0x00, 0x00, 0x00, 0x1E, 0x25, 0x00, 0x00, 0x00, 0x24, -/* 00000510 */ 0x25, 0x00, 0x00, 0x00, 0x2A, 0x25, 0x00, 0x00, 0x00, 0x34, 0x25, 0x00, 0x00, 0x00, 0x38, 0x25, -/* 00000520 */ 0x00, 0x00, 0x00, 0x40, 0x25, 0x00, 0x00, 0x00, 0x44, 0x25, 0x00, 0x00, 0x00, 0x5A, 0x25, 0x00, -/* 00000530 */ 0x00, 0x01, 0x80, 0x25, 0x00, 0x00, 0x00, 0x8C, 0x25, 0x00, 0x00, 0x00, 0x98, 0x25, 0x00, 0x00, -/* 00000540 */ 0x00, 0xA0, 0x25, 0x00, 0x00, 0x00, 0xA4, 0x25, 0x00, 0x00, 0x00, 0xA8, 0x25, 0x00, 0x00, 0x00, -/* 00000550 */ 0x5C, 0x26, 0x00, 0x00, 0x00, 0xF8, 0x26, 0x00, 0x00, 0x00, 0x7E, 0x27, 0x00, 0x00, 0x00, 0x8A, -/* 00000560 */ 0x27, 0x00, 0x00, 0x00, 0x92, 0x27, 0x00, 0x00, 0x00, 0xA8, 0x27, 0x00, 0x00, 0x00, 0xC2, 0x27, -/* 00000570 */ 0x00, 0x00, 0x00, 0xDC, 0x27, 0x00, 0x00, 0x00, 0xE6, 0x27, 0x00, 0x00, 0x00, 0xFC, 0x27, 0x00, -/* 00000580 */ 0x00, 0x00, 0x0A, 0x28, 0x00, 0x00, 0x00, 0x18, 0x28, 0x00, 0x00, 0x00, 0x22, 0x28, 0x00, 0x00, -/* 00000590 */ 0x00, 0x30, 0x28, 0x00, 0x00, 0x00, 0x44, 0x28, 0x00, 0x00, 0x00, 0x5E, 0x28, 0x00, 0x00, 0x00, -/* 000005A0 */ 0x6A, 0x28, 0x00, 0x00, 0x00, 0x78, 0x28, 0x00, 0x00, 0x00, 0x7E, 0x28, 0x00, 0x00, 0x00, 0x8A, -/* 000005B0 */ 0x28, 0x00, 0x00, 0x00, 0x92, 0x28, 0x00, 0x00, 0x00, 0xA2, 0x28, 0x00, 0x00, 0x00, 0xAE, 0x28, -/* 000005C0 */ 0x00, 0x00, 0x00, 0xBE, 0x28, 0x00, 0x00, 0x00, 0xCA, 0x28, 0x00, 0x00, 0x00, 0xD4, 0x28, 0x00, -/* 000005D0 */ 0x00, 0x00, 0xDA, 0x28, 0x00, 0x00, 0x00, 0xDE, 0x28, 0x00, 0x00, 0x00, 0xE2, 0x28, 0x00, 0x00, -/* 000005E0 */ 0x00, 0xE6, 0x28, 0x00, 0x00, 0x01, 0xEA, 0x28, 0x00, 0x00, 0x01, 0xFC, 0x28, 0x00, 0x00, 0x01, -/* 000005F0 */ 0x0A, 0x29, 0x00, 0x00, 0x01, 0x18, 0x29, 0x00, 0x00, 0x01, 0x2A, 0x29, 0x00, 0x00, 0x01, 0x40, -/* 00000600 */ 0x29, 0x00, 0x00, 0x00, 0x54, 0x29, 0x00, 0x00, 0x00, 0x62, 0x29, 0x00, 0x00, 0x00, 0x70, 0x29, -/* 00000610 */ 0x00, 0x00, 0x01, 0x94, 0x29, 0x00, 0x00, 0x01, 0xA2, 0x29, 0x00, 0x00, 0x00, 0xCC, 0x29, 0x00, -/* 00000620 */ 0x00, 0x00, 0xF8, 0x29, 0x00, 0x00, 0x00, 0x24, 0x2A, 0x00, 0x00, 0x00, 0x56, 0x2A, 0x00, 0x00, -/* 00000630 */ 0x00, 0x88, 0x2A, 0x00, 0x00, 0x00, 0x9A, 0x2A, 0x00, 0x00, 0x00, 0xB6, 0x2A, 0x00, 0x00, 0x00, -/* 00000640 */ 0xC4, 0x2A, 0x00, 0x00, 0x01, 0xDE, 0x2A, 0x00, 0x00, 0x01, 0xE8, 0x2A, 0x00, 0x00, 0x01, 0xFA, -/* 00000650 */ 0x2A, 0x00, 0x00, 0x01, 0x20, 0x2B, 0x00, 0x00, 0x01, 0x50, 0x2B, 0x00, 0x00, 0x00, 0x5E, 0x2B, -/* 00000660 */ 0x00, 0x00, 0x00, 0x9C, 0x2B, 0x00, 0x00, 0x00, 0xB8, 0x2B, 0x00, 0x00, 0x00, 0xF8, 0x2B, 0x00, -/* 00000670 */ 0x00, 0x00, 0x0C, 0x2C, 0x00, 0x00, 0x00, 0x24, 0x2C, 0x00, 0x00, 0x00, 0x44, 0x2C, 0x00, 0x00, -/* 00000680 */ 0x00, 0x5C, 0x2C, 0x00, 0x00, 0x00, 0x6C, 0x2C, 0x00, 0x00, 0x01, 0x78, 0x2C, 0x00, 0x00, 0x00, -/* 00000690 */ 0x82, 0x2C, 0x00, 0x00, 0x00, 0x90, 0x2C, 0x00, 0x00, 0x00, 0xA0, 0x2C, 0x00, 0x00, 0x01, 0xB4, -/* 000006A0 */ 0x2C, 0x00, 0x00, 0x00, 0xC4, 0x2C, 0x00, 0x00, 0x00, 0xDC, 0x2C, 0x00, 0x00, 0x00, 0x00, 0x2D, -/* 000006B0 */ 0x00, 0x00, 0x01, 0x10, 0x2D, 0x00, 0x00, 0x01, 0x24, 0x2D, 0x00, 0x00, 0x01, 0x4C, 0x2D, 0x00, -/* 000006C0 */ 0x00, 0x01, 0x66, 0x2D, 0x00, 0x00, 0x00, 0x9C, 0x2D, 0x00, 0x00, 0x00, 0xE2, 0x2D, 0x00, 0x00, -/* 000006D0 */ 0x00, 0xF8, 0x2D, 0x00, 0x00, 0x01, 0x26, 0x2E, 0x00, 0x00, 0x00, 0x34, 0x2E, 0x00, 0x00, 0x00, -/* 000006E0 */ 0x74, 0x2E, 0x00, 0x00, 0x00, 0x98, 0x2E, 0x00, 0x00, 0x00, 0xDE, 0x2E, 0x00, 0x00, 0x00, 0x32, -/* 000006F0 */ 0x2F, 0x00, 0x00, 0x00, 0x48, 0x2F, 0x00, 0x00, 0x00, 0x56, 0x2F, 0x00, 0x00, 0x00, 0x72, 0x2F, -/* 00000700 */ 0x00, 0x00, 0x01, 0x7E, 0x2F, 0x00, 0x00, 0x00, 0x8E, 0x2F, 0x00, 0x00, 0x00, 0x9E, 0x2F, 0x00, -/* 00000710 */ 0x00, 0x00, 0xB0, 0x2F, 0x00, 0x00, 0x00, 0xD0, 0x2F, 0x00, 0x00, 0x00, 0xDA, 0x2F, 0x00, 0x00, -/* 00000720 */ 0x00, 0xE8, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x01, 0x30, 0x30, 0x00, 0x00, 0x01, -/* 00000730 */ 0x48, 0x30, 0x00, 0x00, 0x00, 0x84, 0x30, 0x00, 0x00, 0x00, 0xCE, 0x30, 0x00, 0x00, 0x00, 0x1C, -/* 00000740 */ 0x31, 0x00, 0x00, 0x00, 0x3C, 0x31, 0x00, 0x00, 0x00, 0x50, 0x31, 0x00, 0x00, 0x01, 0xA2, 0x31, -/* 00000750 */ 0x00, 0x00, 0x01, 0xC8, 0x31, 0x00, 0x00, 0x01, 0xF2, 0x31, 0x00, 0x00, 0x01, 0x24, 0x32, 0x00, -/* 00000760 */ 0x00, 0x01, 0x48, 0x32, 0x00, 0x00, 0x01, 0x66, 0x32, 0x00, 0x00, 0x01, 0x92, 0x32, 0x00, 0x00, -/* 00000770 */ 0x01, 0xE4, 0x32, 0x00, 0x00, 0x01, 0xFE, 0x32, 0x00, 0x00, 0x01, 0x18, 0x33, 0x00, 0x00, 0x00, -/* 00000780 */ 0x22, 0x33, 0x00, 0x00, 0x01, 0x30, 0x33, 0x00, 0x00, 0x01, 0x3C, 0x33, 0x00, 0x00, 0x01, 0x46, -/* 00000790 */ 0x33, 0x00, 0x00, 0x01, 0x56, 0x33, 0x00, 0x00, 0x00, 0x66, 0x33, 0x00, 0x00, 0x00, 0x6E, 0x33, -/* 000007A0 */ 0x00, 0x00, 0x00, 0x78, 0x33, 0x00, 0x00, 0x00, 0x84, 0x33, 0x00, 0x00, 0x00, 0x8C, 0x33, 0x00, -/* 000007B0 */ 0x00, 0x00, 0x96, 0x33, 0x00, 0x00, 0x00, 0xA4, 0x33, 0x00, 0x00, 0x00, 0xB2, 0x33, 0x00, 0x00, -/* 000007C0 */ 0x00, 0xCC, 0x33, 0x00, 0x00, 0x00, 0xEA, 0x33, 0x00, 0x00, 0x00, 0x10, 0x34, 0x00, 0x00, 0x00, -/* 000007D0 */ 0x36, 0x34, 0x00, 0x00, 0x00, 0x72, 0x34, 0x00, 0x00, 0x00, 0x7A, 0x34, 0x00, 0x00, 0x00, 0x82, -/* 000007E0 */ 0x34, 0x00, 0x00, 0x00, 0xC6, 0x34, 0x00, 0x00, 0x00, 0xD0, 0x34, 0x00, 0x00, 0x00, 0x14, 0x35, -/* 000007F0 */ 0x00, 0x00, 0x00, 0x1E, 0x35, 0x00, 0x00, 0x00, 0x46, 0x35, 0x00, 0x00, 0x00, 0x90, 0x35, 0x00, -/* 00000800 */ 0x00, 0x00, 0xE8, 0x35, 0x00, 0x00, 0x01, 0x08, 0x36, 0x00, 0x00, 0x01, 0x28, 0x36, 0x00, 0x00, -/* 00000810 */ 0x01, 0x54, 0x36, 0x00, 0x00, 0x01, 0x80, 0x36, 0x00, 0x00, 0x01, 0xA8, 0x36, 0x00, 0x00, 0x01, -/* 00000820 */ 0xD0, 0x36, 0x00, 0x00, 0x00, 0xD4, 0x36, 0x00, 0x00, 0x01, 0xD8, 0x36, 0x00, 0x00, 0x01, 0xDC, -/* 00000830 */ 0x36, 0x00, 0x00, 0x01, 0xE0, 0x36, 0x00, 0x00, 0x01, 0xE4, 0x36, 0x00, 0x00, 0x00, 0xE8, 0x36, -/* 00000840 */ 0x00, 0x00, 0x00, 0xF6, 0x36, 0x00, 0x00, 0x01, 0xFA, 0x36, 0x00, 0x00, 0x01, 0x08, 0x37, 0x00, -/* 00000850 */ 0x00, 0x01, 0x0C, 0x37, 0x00, 0x00, 0x01, 0x10, 0x37, 0x00, 0x00, 0x01, 0x14, 0x37, 0x00, 0x00, -/* 00000860 */ 0x01, 0x18, 0x37, 0x00, 0x00, 0x01, 0x1C, 0x37, 0x00, 0x00, 0x01, 0x20, 0x37, 0x00, 0x00, 0x01, -/* 00000870 */ 0x24, 0x37, 0x00, 0x00, 0x01, 0x28, 0x37, 0x00, 0x00, 0x01, 0x2C, 0x37, 0x00, 0x00, 0x01, 0x30, -/* 00000880 */ 0x37, 0x00, 0x00, 0x01, 0x34, 0x37, 0x00, 0x00, 0x01, 0x38, 0x37, 0x00, 0x00, 0x01, 0x3C, 0x37, -/* 00000890 */ 0x00, 0x00, 0x01, 0x40, 0x37, 0x00, 0x00, 0x01, 0x44, 0x37, 0x00, 0x00, 0x01, 0x48, 0x37, 0x00, -/* 000008A0 */ 0x00, 0x01, 0x4C, 0x37, 0x00, 0x00, 0x01, 0x50, 0x37, 0x00, 0x00, 0x01, 0x54, 0x37, 0x00, 0x00, -/* 000008B0 */ 0x01, 0x58, 0x37, 0x00, 0x00, 0x01, 0x5C, 0x37, 0x00, 0x00, 0x01, 0x64, 0x37, 0x00, 0x00, 0x01, -/* 000008C0 */ 0x6C, 0x37, 0x00, 0x00, 0x01, 0x74, 0x37, 0x00, 0x00, 0x01, 0x7C, 0x37, 0x00, 0x00, 0x00, 0x80, -/* 000008D0 */ 0x37, 0x00, 0x00, 0x00, 0x84, 0x37, 0x00, 0x00, 0x01, 0x98, 0x37, 0x00, 0x00, 0x00, 0xB0, 0x37, -/* 000008E0 */ 0x00, 0x00, 0x00, 0xC2, 0x37, 0x00, 0x00, 0x00, 0x10, 0x38, 0x00, 0x00, 0x00, 0x20, 0x38, 0x00, -/* 000008F0 */ 0x00, 0x00, 0x30, 0x38, 0x00, 0x00, 0x00, 0x38, 0x38, 0x00, 0x00, 0x00, 0x54, 0x38, 0x00, 0x00, -/* 00000900 */ 0x00, 0x60, 0x38, 0x00, 0x00, 0x01, 0x94, 0x38, 0x00, 0x00, 0x01, 0xAE, 0x38, 0x00, 0x00, 0x00, -/* 00000910 */ 0xC8, 0x38, 0x00, 0x00, 0x01, 0xD8, 0x38, 0x00, 0x00, 0x01, 0xE8, 0x38, 0x00, 0x00, 0x01, 0xFC, -/* 00000920 */ 0x38, 0x00, 0x00, 0x00, 0x3A, 0x39, 0x00, 0x00, 0x00, 0x80, 0x39, 0x00, 0x00, 0x00, 0xC6, 0x39, -/* 00000930 */ 0x00, 0x00, 0x00, 0x04, 0x3A, 0x00, 0x00, 0x00, 0x16, 0x3A, 0x00, 0x00, 0x01, 0x42, 0x3A, 0x00, -/* 00000940 */ 0x00, 0x01, 0x5E, 0x3A, 0x00, 0x00, 0x01, 0xA6, 0x3A, 0x00, 0x00, 0x00, 0xC8, 0x3A, 0x00, 0x00, -/* 00000950 */ 0x00, 0x10, 0x3B, 0x00, 0x00, 0x00, 0x54, 0x3B, 0x00, 0x00, 0x00, 0x62, 0x3B, 0x00, 0x00, 0x00, -/* 00000960 */ 0xB8, 0x3B, 0x00, 0x00, 0x00, 0xC2, 0x3B, 0x00, 0x00, 0x00, 0xD4, 0x3B, 0x00, 0x00, 0x00, 0xE4, -/* 00000970 */ 0x3B, 0x00, 0x00, 0x01, 0x06, 0x3C, 0x00, 0x00, 0x01, 0x34, 0x3C, 0x00, 0x00, 0x00, 0x40, 0x3C, -/* 00000980 */ 0x00, 0x00, 0x01, 0x46, 0x3C, 0x00, 0x00, 0x00, 0xA0, 0x3C, 0x00, 0x00, 0x00, 0xCA, 0x3C, 0x00, -/* 00000990 */ 0x00, 0x00, 0xF2, 0x3C, 0x00, 0x00, 0x01, 0x04, 0x3D, 0x00, 0x00, 0x01, 0x24, 0x3D, 0x00, 0x00, -/* 000009A0 */ 0x00, 0x2C, 0x3D, 0x00, 0x00, 0x00, 0x3C, 0x3D, 0x00, 0x00, 0x00, 0x66, 0x3D, 0x00, 0x00, 0x00, -/* 000009B0 */ 0x82, 0x3D, 0x00, 0x00, 0x00, 0xA0, 0x3D, 0x00, 0x00, 0x00, 0xB4, 0x3D, 0x00, 0x00, 0x01, 0xCC, -/* 000009C0 */ 0x3D, 0x00, 0x00, 0x00, 0xD6, 0x3D, 0x00, 0x00, 0x01, 0xE0, 0x3D, 0x00, 0x00, 0x00, 0xEE, 0x3D, -/* 000009D0 */ 0x00, 0x00, 0x01, 0xFA, 0x3D, 0x00, 0x00, 0x01, 0x08, 0x3E, 0x00, 0x00, 0x01, 0x24, 0x3E, 0x00, -/* 000009E0 */ 0x00, 0x00, 0x52, 0x3E, 0x00, 0x00, 0x00, 0x9E, 0x3E, 0x00, 0x00, 0x00, 0xF2, 0x3E, 0x00, 0x00, -/* 000009F0 */ 0x00, 0x4A, 0x3F, 0x00, 0x00, 0x00, 0x86, 0x3F, 0x00, 0x00, 0x01, 0x98, 0x3F, 0x00, 0x00, 0x01, -/* 00000A00 */ 0xCA, 0x3F, 0x00, 0x00, 0x01, 0xFA, 0x3F, 0x00, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x00, 0x56, -/* 00000A10 */ 0x40, 0x00, 0x00, 0x00, 0x74, 0x40, 0x00, 0x00, 0x00, 0xAC, 0x40, 0x00, 0x00, 0x00, 0xBA, 0x40, -/* 00000A20 */ 0x00, 0x00, 0x00, 0xEA, 0x40, 0x00, 0x00, 0x00, 0xEE, 0x40, 0x00, 0x00, 0x00, 0xF2, 0x40, 0x00, -/* 00000A30 */ 0x00, 0x01, 0x18, 0x41, 0x00, 0x00, 0x01, 0x28, 0x41, 0x00, 0x00, 0x01, 0x44, 0x41, 0x00, 0x00, -/* 00000A40 */ 0x01, 0x6C, 0x41, 0x00, 0x00, 0x01, 0x84, 0x41, 0x00, 0x00, 0x01, 0x98, 0x41, 0x00, 0x00, 0x00, -/* 00000A50 */ 0xAA, 0x41, 0x00, 0x00, 0x00, 0xB4, 0x41, 0x00, 0x00, 0x01, 0xD4, 0x41, 0x00, 0x00, 0x00, 0xDA, -/* 00000A60 */ 0x41, 0x00, 0x00, 0x01, 0x0C, 0x42, 0x00, 0x00, 0x01, 0x30, 0x42, 0x00, 0x00, 0x00, 0x40, 0x42, -/* 00000A70 */ 0x00, 0x00, 0x01, 0x5E, 0x42, 0x00, 0x00, 0x00, 0x6C, 0x42, 0x00, 0x00, 0x01, 0x88, 0x42, 0x00, -/* 00000A80 */ 0x00, 0x00, 0x98, 0x42, 0x00, 0x00, 0x01, 0xBA, 0x42, 0x00, 0x00, 0x00, 0xCC, 0x42, 0x00, 0x00, -/* 00000A90 */ 0x01, 0xEA, 0x42, 0x00, 0x00, 0x00, 0xF8, 0x42, 0x00, 0x00, 0x01, 0x16, 0x43, 0x00, 0x00, 0x00, -/* 00000AA0 */ 0x24, 0x43, 0x00, 0x00, 0x01, 0x46, 0x43, 0x00, 0x00, 0x00, 0x62, 0x43, 0x00, 0x00, 0x01, 0x7C, -/* 00000AB0 */ 0x43, 0x00, 0x00, 0x00, 0x86, 0x43, 0x00, 0x00, 0x01, 0xA4, 0x43, 0x00, 0x00, 0x00, 0xB2, 0x43, -/* 00000AC0 */ 0x00, 0x00, 0x01, 0xEC, 0x43, 0x00, 0x00, 0x01, 0x18, 0x44, 0x00, 0x00, 0x01, 0x54, 0x44, 0x00, -/* 00000AD0 */ 0x00, 0x01, 0xA2, 0x44, 0x00, 0x00, 0x01, 0xCC, 0x44, 0x00, 0x00, 0x01, 0xDE, 0x44, 0x00, 0x00, -/* 00000AE0 */ 0x00, 0x0A, 0x45, 0x00, 0x00, 0x00, 0x28, 0x45, 0x00, 0x00, 0x00, 0x4A, 0x45, 0x00, 0x00, 0x00, -/* 00000AF0 */ 0x5E, 0x45, 0x00, 0x00, 0x00, 0x7A, 0x45, 0x00, 0x00, 0x00, 0x9E, 0x45, 0x00, 0x00, 0x00, 0xB4, -/* 00000B00 */ 0x45, 0x00, 0x00, 0x00, 0xDE, 0x45, 0x00, 0x00, 0x00, 0xFA, 0x45, 0x00, 0x00, 0x00, 0x00, 0x46, -/* 00000B10 */ 0x00, 0x00, 0x00, 0x4C, 0x46, 0x00, 0x00, 0x00, 0x16, 0x47, 0x00, 0x00, 0x00, 0x2C, 0x47, 0x00, -/* 00000B20 */ 0x00, 0x00, 0x72, 0x47, 0x00, 0x00, 0x00, 0x7C, 0x47, 0x00, 0x00, 0x00, 0x80, 0x47, 0x00, 0x00, -/* 00000B30 */ 0x00, 0x84, 0x47, 0x00, 0x00, 0x00, 0x88, 0x47, 0x00, 0x00, 0x00, 0xA0, 0x47, 0x00, 0x00, 0x00, -/* 00000B40 */ 0xBE, 0x47, 0x00, 0x00, 0x00, 0x0A, 0x48, 0x00, 0x00, 0x00, 0xEA, 0x48, 0x00, 0x00, 0x00, 0x04, -/* 00000B50 */ 0x49, 0x00, 0x00, 0x00, 0x14, 0x49, 0x00, 0x00, 0x00, 0x28, 0x49, 0x00, 0x00, 0x00, 0x3C, 0x49, -/* 00000B60 */ 0x00, 0x00, 0x00, 0xBE, 0x49, 0x00, 0x00, 0x00, 0xEA, 0x49, 0x00, 0x00, 0x00, 0x02, 0x4A, 0x00, -/* 00000B70 */ 0x00, 0x00, 0x14, 0x4A, 0x00, 0x00, 0x00, 0x4E, 0x4A, 0x00, 0x00, 0x00, 0x66, 0x4A, 0x00, 0x00, -/* 00000B80 */ 0x00, 0x7E, 0x4A, 0x00, 0x00, 0x00, 0x88, 0x4A, 0x00, 0x00, 0x00, 0xC8, 0x4A, 0x00, 0x00, 0x01, -/* 00000B90 */ 0xD2, 0x4A, 0x00, 0x00, 0x00, 0x24, 0x4B, 0x00, 0x00, 0x00, 0x47, 0x00, 0x6C, 0x00, 0x6F, 0x00, -/* 00000BA0 */ 0x62, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x20, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x64, 0x00, 0x65, 0x00, -/* 00000BB0 */ 0x00, 0x00, 0x75, 0x00, 0x73, 0x00, 0x65, 0x00, 0x20, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, -/* 00000BC0 */ 0x69, 0x00, 0x63, 0x00, 0x74, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, -/* 00000BD0 */ 0x43, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x00, 0x00, 0x73, 0x00, 0x65, 0x00, -/* 00000BE0 */ 0x74, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, -/* 00000BF0 */ 0x70, 0x00, 0x65, 0x00, 0x00, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x41, 0x00, 0x72, 0x00, -/* 00000C00 */ 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x4C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x74, 0x00, -/* 00000C10 */ 0x68, 0x00, 0x00, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x49, 0x00, 0x6E, 0x00, -/* 00000C20 */ 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, 0x46, 0x00, 0x75, 0x00, -/* 00000C30 */ 0x6E, 0x00, 0x63, 0x00, 0x00, 0x00, 0x52, 0x00, 0x61, 0x00, 0x69, 0x00, 0x73, 0x00, 0x65, 0x00, -/* 00000C40 */ 0x41, 0x00, 0x73, 0x00, 0x73, 0x00, 0x65, 0x00, 0x72, 0x00, 0x74, 0x00, 0x00, 0x00, 0x4F, 0x00, -/* 00000C50 */ 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x47, 0x00, 0x65, 0x00, 0x74, 0x00, -/* 00000C60 */ 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, -/* 00000C70 */ 0x65, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x4F, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, -/* 00000C80 */ 0x63, 0x00, 0x74, 0x00, 0x49, 0x00, 0x73, 0x00, 0x45, 0x00, 0x78, 0x00, 0x74, 0x00, 0x65, 0x00, -/* 00000C90 */ 0x6E, 0x00, 0x73, 0x00, 0x69, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x4F, 0x00, -/* 00000CA0 */ 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x47, 0x00, 0x65, 0x00, 0x74, 0x00, -/* 00000CB0 */ 0x4F, 0x00, 0x77, 0x00, 0x6E, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x65, 0x00, -/* 00000CC0 */ 0x72, 0x00, 0x74, 0x00, 0x79, 0x00, 0x4E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x73, 0x00, -/* 00000CD0 */ 0x00, 0x00, 0x4F, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x49, 0x00, -/* 00000CE0 */ 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, 0x48, 0x00, -/* 00000CF0 */ 0x61, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x77, 0x00, 0x6E, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, -/* 00000D00 */ 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x6F, 0x00, -/* 00000D10 */ 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x44, 0x00, 0x65, 0x00, 0x66, 0x00, -/* 00000D20 */ 0x69, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x65, 0x00, -/* 00000D30 */ 0x72, 0x00, 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x4F, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, -/* 00000D40 */ 0x63, 0x00, 0x74, 0x00, 0x44, 0x00, 0x65, 0x00, 0x66, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x65, 0x00, -/* 00000D50 */ 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x74, 0x00, 0x79, 0x00, -/* 00000D60 */ 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x49, 0x00, 0x6E, 0x00, -/* 00000D70 */ 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, -/* 00000D80 */ 0x72, 0x00, 0x45, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, -/* 00000D90 */ 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, -/* 00000DA0 */ 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x65, 0x00, 0x78, 0x00, -/* 00000DB0 */ 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, -/* 00000DC0 */ 0x49, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, -/* 00000DD0 */ 0x50, 0x00, 0x75, 0x00, 0x73, 0x00, 0x68, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, -/* 00000DE0 */ 0x61, 0x00, 0x79, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, -/* 00000DF0 */ 0x63, 0x00, 0x65, 0x00, 0x4A, 0x00, 0x6F, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x46, 0x00, -/* 00000E00 */ 0x75, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x49, 0x00, -/* 00000E10 */ 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, 0x42, 0x00, -/* 00000E20 */ 0x69, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x00, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, -/* 00000E30 */ 0x49, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, -/* 00000E40 */ 0x47, 0x00, 0x65, 0x00, 0x74, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 00000E50 */ 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x4E, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x00, 0x00, -/* 00000E60 */ 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x49, 0x00, 0x6E, 0x00, -/* 00000E70 */ 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, 0x52, 0x00, 0x65, 0x00, -/* 00000E80 */ 0x70, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x63, 0x00, 0x65, 0x00, 0x00, 0x00, 0x53, 0x00, 0x74, 0x00, -/* 00000E90 */ 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, -/* 00000EA0 */ 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, -/* 00000EB0 */ 0x77, 0x00, 0x65, 0x00, 0x72, 0x00, 0x43, 0x00, 0x61, 0x00, 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 00000EC0 */ 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x49, 0x00, 0x6E, 0x00, -/* 00000ED0 */ 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, 0x54, 0x00, 0x6F, 0x00, -/* 00000EE0 */ 0x55, 0x00, 0x70, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x43, 0x00, 0x61, 0x00, 0x73, 0x00, -/* 00000EF0 */ 0x65, 0x00, 0x00, 0x00, 0x74, 0x00, 0x68, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x45, 0x00, -/* 00000F00 */ 0x78, 0x00, 0x49, 0x00, 0x66, 0x00, 0x4F, 0x00, 0x4F, 0x00, 0x4D, 0x00, 0x4F, 0x00, 0x72, 0x00, -/* 00000F10 */ 0x53, 0x00, 0x4F, 0x00, 0x45, 0x00, 0x00, 0x00, 0x74, 0x00, 0x61, 0x00, 0x67, 0x00, 0x50, 0x00, -/* 00000F20 */ 0x75, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x63, 0x00, 0x46, 0x00, 0x75, 0x00, 0x6E, 0x00, -/* 00000F30 */ 0x63, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, -/* 00000F40 */ 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x66, 0x00, -/* 00000F50 */ 0x6F, 0x00, 0x72, 0x00, 0x45, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x49, 0x00, 0x66, 0x00, -/* 00000F60 */ 0x50, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x00, 0x00, -/* 00000F70 */ 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x45, 0x00, 0x78, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6E, 0x00, -/* 00000F80 */ 0x73, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x53, 0x00, 0x75, 0x00, 0x62, 0x00, 0x74, 0x00, -/* 00000F90 */ 0x61, 0x00, 0x67, 0x00, 0x73, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, -/* 00000FA0 */ 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00000FB0 */ 0x65, 0x00, 0x48, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, -/* 00000FC0 */ 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x4C, 0x00, -/* 00000FD0 */ 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x73, 0x00, -/* 00000FE0 */ 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x70, 0x00, 0x70, 0x00, 0x65, 0x00, 0x64, 0x00, 0x44, 0x00, -/* 00000FF0 */ 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x4C, 0x00, 0x6F, 0x00, -/* 00001000 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, -/* 00001010 */ 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, -/* 00001020 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x57, 0x00, -/* 00001030 */ 0x72, 0x00, 0x61, 0x00, 0x70, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x63, 0x00, -/* 00001040 */ 0x61, 0x00, 0x6E, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00001050 */ 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00001060 */ 0x65, 0x00, 0x4C, 0x00, 0x69, 0x00, 0x73, 0x00, 0x74, 0x00, 0x57, 0x00, 0x72, 0x00, 0x61, 0x00, -/* 00001070 */ 0x70, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, -/* 00001080 */ 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x41, 0x00, 0x63, 0x00, 0x63, 0x00, 0x65, 0x00, -/* 00001090 */ 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, -/* 000010A0 */ 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x56, 0x00, 0x61, 0x00, -/* 000010B0 */ 0x6C, 0x00, 0x75, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, 0x76, 0x00, -/* 000010C0 */ 0x65, 0x00, 0x72, 0x00, 0x73, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, -/* 000010D0 */ 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x41, 0x00, 0x63, 0x00, 0x63, 0x00, 0x65, 0x00, 0x70, 0x00, -/* 000010E0 */ 0x74, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, -/* 000010F0 */ 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x56, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00001100 */ 0x75, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x70, 0x00, 0x70, 0x00, -/* 00001110 */ 0x65, 0x00, 0x64, 0x00, 0x44, 0x00, 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, -/* 00001120 */ 0x74, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 00001130 */ 0x49, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x54, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, -/* 00001140 */ 0x00, 0x00, 0x69, 0x00, 0x73, 0x00, 0x50, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x66, 0x00, -/* 00001150 */ 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x55, 0x00, 0x73, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, -/* 00001160 */ 0x49, 0x00, 0x43, 0x00, 0x55, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x4F, 0x00, 0x54, 0x00, 0x5F, 0x00, -/* 00001170 */ 0x46, 0x00, 0x4F, 0x00, 0x55, 0x00, 0x4E, 0x00, 0x44, 0x00, 0x00, 0x00, 0x62, 0x00, 0x61, 0x00, -/* 00001180 */ 0x72, 0x00, 0x65, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x42, 0x00, -/* 00001190 */ 0x75, 0x00, 0x69, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x46, 0x00, 0x75, 0x00, -/* 000011A0 */ 0x6E, 0x00, 0x63, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x49, 0x00, 0x44, 0x00, -/* 000011B0 */ 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x72, 0x00, 0x61, 0x00, 0x69, 0x00, 0x73, 0x00, 0x65, 0x00, -/* 000011C0 */ 0x00, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, -/* 000011D0 */ 0x72, 0x00, 0x53, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, -/* 000011E0 */ 0x76, 0x00, 0x69, 0x00, 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, -/* 000011F0 */ 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x43, 0x00, 0x61, 0x00, 0x73, 0x00, -/* 00001200 */ 0x65, 0x00, 0x46, 0x00, 0x69, 0x00, 0x72, 0x00, 0x73, 0x00, 0x74, 0x00, 0x00, 0x00, 0x4E, 0x00, -/* 00001210 */ 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, -/* 00001220 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x53, 0x00, 0x74, 0x00, 0x79, 0x00, 0x6C, 0x00, 0x65, 0x00, -/* 00001230 */ 0x00, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, -/* 00001240 */ 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x43, 0x00, 0x75, 0x00, 0x72, 0x00, -/* 00001250 */ 0x72, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x79, 0x00, 0x44, 0x00, 0x69, 0x00, 0x73, 0x00, -/* 00001260 */ 0x70, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x79, 0x00, 0x00, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x45, 0x00, -/* 00001270 */ 0x6E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x00, 0x00, 0x61, 0x00, 0x62, 0x00, 0x73, 0x00, 0x00, 0x00, -/* 00001280 */ 0x66, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x61, 0x00, -/* 00001290 */ 0x78, 0x00, 0x00, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x00, 0x00, 0x4D, 0x00, 0x49, 0x00, -/* 000012A0 */ 0x4E, 0x00, 0x00, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x6F, 0x00, -/* 000012B0 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, -/* 000012C0 */ 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, -/* 000012D0 */ 0x65, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 000012E0 */ 0x65, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, -/* 000012F0 */ 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, -/* 00001300 */ 0x54, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, -/* 00001310 */ 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, -/* 00001320 */ 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, -/* 00001330 */ 0x72, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00001340 */ 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, -/* 00001350 */ 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x4C, 0x00, 0x6F, 0x00, -/* 00001360 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00, -/* 00001370 */ 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, 0x00, 0x00, 0x4D, 0x00, 0x41, 0x00, 0x58, 0x00, 0x00, 0x00, -/* 00001380 */ 0x74, 0x00, 0x6F, 0x00, 0x55, 0x00, 0x70, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x43, 0x00, -/* 00001390 */ 0x61, 0x00, 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, -/* 000013A0 */ 0x77, 0x00, 0x65, 0x00, 0x72, 0x00, 0x43, 0x00, 0x61, 0x00, 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 000013B0 */ 0x72, 0x00, 0x65, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x63, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 000013C0 */ 0x73, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x74, 0x00, 0x00, 0x00, 0x73, 0x00, 0x75, 0x00, -/* 000013D0 */ 0x62, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, -/* 000013E0 */ 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x49, 0x00, 0x6E, 0x00, -/* 000013F0 */ 0x64, 0x00, 0x65, 0x00, 0x78, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x61, 0x00, -/* 00001400 */ 0x74, 0x00, 0x63, 0x00, 0x68, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, 0x70, 0x00, 0x65, 0x00, -/* 00001410 */ 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x45, 0x00, 0x61, 0x00, -/* 00001420 */ 0x63, 0x00, 0x68, 0x00, 0x00, 0x00, 0x70, 0x00, 0x75, 0x00, 0x73, 0x00, 0x68, 0x00, 0x00, 0x00, -/* 00001430 */ 0x6A, 0x00, 0x6F, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x61, 0x00, 0x72, 0x00, 0x72, 0x00, -/* 00001440 */ 0x61, 0x00, 0x79, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x65, 0x00, 0x78, 0x00, 0x4F, 0x00, -/* 00001450 */ 0x66, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x70, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, -/* 00001460 */ 0x64, 0x00, 0x75, 0x00, 0x63, 0x00, 0x65, 0x00, 0x00, 0x00, 0x73, 0x00, 0x6C, 0x00, 0x69, 0x00, -/* 00001470 */ 0x63, 0x00, 0x65, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x61, 0x00, -/* 00001480 */ 0x74, 0x00, 0x00, 0x00, 0x66, 0x00, 0x69, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, -/* 00001490 */ 0x00, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x71, 0x00, 0x75, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 000014A0 */ 0x6B, 0x00, 0x65, 0x00, 0x79, 0x00, 0x73, 0x00, 0x00, 0x00, 0x68, 0x00, 0x61, 0x00, 0x73, 0x00, -/* 000014B0 */ 0x4F, 0x00, 0x77, 0x00, 0x6E, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x65, 0x00, -/* 000014C0 */ 0x72, 0x00, 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x64, 0x00, 0x65, 0x00, 0x66, 0x00, 0x69, 0x00, -/* 000014D0 */ 0x6E, 0x00, 0x65, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, -/* 000014E0 */ 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x69, 0x00, 0x73, 0x00, 0x45, 0x00, 0x78, 0x00, 0x74, 0x00, -/* 000014F0 */ 0x65, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x69, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 00001500 */ 0x63, 0x00, 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, 0x73, 0x00, -/* 00001510 */ 0x65, 0x00, 0x74, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, -/* 00001520 */ 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x69, 0x00, 0x73, 0x00, -/* 00001530 */ 0x46, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, 0x69, 0x00, -/* 00001540 */ 0x73, 0x00, 0x4E, 0x00, 0x61, 0x00, 0x4E, 0x00, 0x00, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, -/* 00001550 */ 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6E, 0x00, -/* 00001560 */ 0x64, 0x00, 0x00, 0x00, 0x61, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x79, 0x00, 0x00, 0x00, -/* 00001570 */ 0x72, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x65, 0x00, 0x45, 0x00, 0x72, 0x00, 0x72, 0x00, -/* 00001580 */ 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x61, 0x00, 0x73, 0x00, 0x73, 0x00, 0x65, 0x00, 0x72, 0x00, -/* 00001590 */ 0x74, 0x00, 0x00, 0x00, 0x62, 0x00, 0x61, 0x00, 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, 0x61, 0x00, -/* 000015A0 */ 0x63, 0x00, 0x63, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x00, 0x00, 0x63, 0x00, 0x61, 0x00, -/* 000015B0 */ 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, 0x76, 0x00, 0x61, 0x00, 0x72, 0x00, 0x69, 0x00, 0x61, 0x00, -/* 000015C0 */ 0x6E, 0x00, 0x74, 0x00, 0x00, 0x00, 0x44, 0x00, 0x45, 0x00, 0x46, 0x00, 0x41, 0x00, 0x55, 0x00, -/* 000015D0 */ 0x4C, 0x00, 0x54, 0x00, 0x00, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, -/* 000015E0 */ 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x66, 0x00, -/* 000015F0 */ 0x61, 0x00, 0x6C, 0x00, 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, 0x44, 0x00, 0x45, 0x00, 0x43, 0x00, -/* 00001600 */ 0x49, 0x00, 0x4D, 0x00, 0x41, 0x00, 0x4C, 0x00, 0x00, 0x00, 0x50, 0x00, 0x45, 0x00, 0x52, 0x00, -/* 00001610 */ 0x43, 0x00, 0x45, 0x00, 0x4E, 0x00, 0x54, 0x00, 0x00, 0x00, 0x43, 0x00, 0x55, 0x00, 0x52, 0x00, -/* 00001620 */ 0x52, 0x00, 0x45, 0x00, 0x4E, 0x00, 0x43, 0x00, 0x59, 0x00, 0x00, 0x00, 0x53, 0x00, 0x59, 0x00, -/* 00001630 */ 0x4D, 0x00, 0x42, 0x00, 0x4F, 0x00, 0x4C, 0x00, 0x00, 0x00, 0x43, 0x00, 0x4F, 0x00, 0x44, 0x00, -/* 00001640 */ 0x45, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x41, 0x00, 0x4D, 0x00, 0x45, 0x00, 0x00, 0x00, 0x54, 0x00, -/* 00001650 */ 0x6F, 0x00, 0x4F, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x00, 0x00, -/* 00001660 */ 0x54, 0x00, 0x6F, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, -/* 00001670 */ 0x00, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, -/* 00001680 */ 0x72, 0x00, 0x00, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x67, 0x00, 0x69, 0x00, -/* 00001690 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x42, 0x00, 0x6F, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x65, 0x00, -/* 000016A0 */ 0x61, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x55, 0x00, 0x69, 0x00, 0x6E, 0x00, -/* 000016B0 */ 0x74, 0x00, 0x33, 0x00, 0x32, 0x00, 0x00, 0x00, 0x69, 0x00, 0x73, 0x00, 0x56, 0x00, 0x61, 0x00, -/* 000016C0 */ 0x6C, 0x00, 0x69, 0x00, 0x64, 0x00, 0x00, 0x00, 0x56, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, -/* 000016D0 */ 0x64, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x49, 0x00, -/* 000016E0 */ 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x43, 0x00, -/* 000016F0 */ 0x61, 0x00, 0x6E, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00001700 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, -/* 00001710 */ 0x6E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x76, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00001720 */ 0x75, 0x00, 0x65, 0x00, 0x00, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x43, 0x00, 0x61, 0x00, -/* 00001730 */ 0x6E, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x4C, 0x00, -/* 00001740 */ 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x77, 0x00, -/* 00001750 */ 0x72, 0x00, 0x69, 0x00, 0x74, 0x00, 0x61, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 00001760 */ 0x65, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x72, 0x00, 0x61, 0x00, 0x62, 0x00, -/* 00001770 */ 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x66, 0x00, 0x69, 0x00, -/* 00001780 */ 0x67, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 00001790 */ 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, -/* 000017A0 */ 0x00, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, -/* 000017B0 */ 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x44, 0x00, 0x61, 0x00, -/* 000017C0 */ 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, -/* 000017D0 */ 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x50, 0x00, 0x6C, 0x00, 0x75, 0x00, -/* 000017E0 */ 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x52, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, -/* 000017F0 */ 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x43, 0x00, 0x6F, 0x00, -/* 00001800 */ 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x2E, 0x00, 0x73, 0x00, -/* 00001810 */ 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, -/* 00001820 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, -/* 00001830 */ 0x66, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x4E, 0x00, -/* 00001840 */ 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, -/* 00001850 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, -/* 00001860 */ 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, -/* 00001870 */ 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x49, 0x00, -/* 00001880 */ 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, -/* 00001890 */ 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, -/* 000018A0 */ 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, -/* 000018B0 */ 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, -/* 000018C0 */ 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x73, 0x00, 0x75, 0x00, -/* 000018D0 */ 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, -/* 000018E0 */ 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, -/* 000018F0 */ 0x00, 0x00, 0x65, 0x00, 0x73, 0x00, 0x2D, 0x00, 0x45, 0x00, 0x53, 0x00, 0x00, 0x00, 0x74, 0x00, -/* 00001900 */ 0x72, 0x00, 0x61, 0x00, 0x64, 0x00, 0x00, 0x00, 0x74, 0x00, 0x72, 0x00, 0x61, 0x00, 0x64, 0x00, -/* 00001910 */ 0x6E, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x2D, 0x00, 0x4C, 0x00, 0x56, 0x00, -/* 00001920 */ 0x00, 0x00, 0x64, 0x00, 0x65, 0x00, 0x2D, 0x00, 0x44, 0x00, 0x45, 0x00, 0x00, 0x00, 0x70, 0x00, -/* 00001930 */ 0x68, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x62, 0x00, 0x6B, 0x00, 0x00, 0x00, 0x70, 0x00, -/* 00001940 */ 0x68, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x62, 0x00, 0x00, 0x00, 0x6A, 0x00, 0x61, 0x00, -/* 00001950 */ 0x2D, 0x00, 0x4A, 0x00, 0x50, 0x00, 0x00, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x68, 0x00, -/* 00001960 */ 0x61, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x72, 0x00, 0x61, 0x00, 0x64, 0x00, 0x73, 0x00, 0x74, 0x00, -/* 00001970 */ 0x72, 0x00, 0x00, 0x00, 0x7A, 0x00, 0x68, 0x00, 0x2D, 0x00, 0x54, 0x00, 0x57, 0x00, 0x00, 0x00, -/* 00001980 */ 0x70, 0x00, 0x68, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x74, 0x00, 0x69, 0x00, 0x63, 0x00, -/* 00001990 */ 0x00, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x00, 0x00, -/* 000019A0 */ 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x6B, 0x00, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 000019B0 */ 0x7A, 0x00, 0x68, 0x00, 0x2D, 0x00, 0x48, 0x00, 0x4B, 0x00, 0x00, 0x00, 0x7A, 0x00, 0x68, 0x00, -/* 000019C0 */ 0x2D, 0x00, 0x4D, 0x00, 0x4F, 0x00, 0x00, 0x00, 0x7A, 0x00, 0x68, 0x00, 0x2D, 0x00, 0x43, 0x00, -/* 000019D0 */ 0x4E, 0x00, 0x00, 0x00, 0x70, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x79, 0x00, 0x69, 0x00, 0x6E, 0x00, -/* 000019E0 */ 0x00, 0x00, 0x7A, 0x00, 0x68, 0x00, 0x2D, 0x00, 0x53, 0x00, 0x47, 0x00, 0x00, 0x00, 0x75, 0x00, -/* 000019F0 */ 0x73, 0x00, 0x65, 0x00, 0x43, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x73, 0x00, -/* 00001A00 */ 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x4C, 0x00, -/* 00001A10 */ 0x6F, 0x00, 0x6F, 0x00, 0x6B, 0x00, 0x75, 0x00, 0x70, 0x00, 0x43, 0x00, 0x61, 0x00, 0x63, 0x00, -/* 00001A20 */ 0x68, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00001A30 */ 0x65, 0x00, 0x42, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x46, 0x00, 0x69, 0x00, 0x74, 0x00, -/* 00001A40 */ 0x43, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x00, 0x00, 0x47, 0x00, 0x65, 0x00, -/* 00001A50 */ 0x74, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, -/* 00001A60 */ 0x49, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, -/* 00001A70 */ 0x7A, 0x00, 0x65, 0x00, 0x43, 0x00, 0x75, 0x00, 0x72, 0x00, 0x72, 0x00, 0x65, 0x00, 0x6E, 0x00, -/* 00001A80 */ 0x63, 0x00, 0x79, 0x00, 0x52, 0x00, 0x65, 0x00, 0x67, 0x00, 0x45, 0x00, 0x78, 0x00, 0x70, 0x00, -/* 00001A90 */ 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x64, 0x00, 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, -/* 00001AA0 */ 0x6C, 0x00, 0x74, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, -/* 00001AB0 */ 0x00, 0x00, 0x47, 0x00, 0x65, 0x00, 0x74, 0x00, 0x44, 0x00, 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, -/* 00001AC0 */ 0x75, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00001AD0 */ 0x65, 0x00, 0x00, 0x00, 0x42, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x41, 0x00, 0x76, 0x00, -/* 00001AE0 */ 0x61, 0x00, 0x69, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x4C, 0x00, -/* 00001AF0 */ 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x67, 0x00, 0x65, 0x00, -/* 00001B00 */ 0x74, 0x00, 0x4B, 0x00, 0x65, 0x00, 0x79, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, -/* 00001B10 */ 0x6C, 0x00, 0x65, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x61, 0x00, 0x00, 0x00, 0x4C, 0x00, -/* 00001B20 */ 0x6F, 0x00, 0x6F, 0x00, 0x6B, 0x00, 0x75, 0x00, 0x70, 0x00, 0x4D, 0x00, 0x61, 0x00, 0x74, 0x00, -/* 00001B30 */ 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x42, 0x00, 0x65, 0x00, 0x73, 0x00, -/* 00001B40 */ 0x74, 0x00, 0x46, 0x00, 0x69, 0x00, 0x74, 0x00, 0x4D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x63, 0x00, -/* 00001B50 */ 0x68, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x55, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x63, 0x00, -/* 00001B60 */ 0x6F, 0x00, 0x64, 0x00, 0x65, 0x00, 0x45, 0x00, 0x78, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6E, 0x00, -/* 00001B70 */ 0x73, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x56, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x75, 0x00, -/* 00001B80 */ 0x65, 0x00, 0x00, 0x00, 0x52, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, -/* 00001B90 */ 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 00001BA0 */ 0x47, 0x00, 0x65, 0x00, 0x74, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, -/* 00001BB0 */ 0x72, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, -/* 00001BC0 */ 0x43, 0x00, 0x55, 0x00, 0x52, 0x00, 0x52, 0x00, 0x45, 0x00, 0x4E, 0x00, 0x43, 0x00, 0x59, 0x00, -/* 00001BD0 */ 0x5F, 0x00, 0x43, 0x00, 0x4F, 0x00, 0x44, 0x00, 0x45, 0x00, 0x5F, 0x00, 0x52, 0x00, 0x45, 0x00, -/* 00001BE0 */ 0x00, 0x00, 0x70, 0x00, 0x61, 0x00, 0x72, 0x00, 0x73, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x61, 0x00, -/* 00001BF0 */ 0x6E, 0x00, 0x67, 0x00, 0x74, 0x00, 0x61, 0x00, 0x67, 0x00, 0x00, 0x00, 0x49, 0x00, 0x73, 0x00, -/* 00001C00 */ 0x57, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, -/* 00001C10 */ 0x65, 0x00, 0x64, 0x00, 0x43, 0x00, 0x75, 0x00, 0x72, 0x00, 0x72, 0x00, 0x65, 0x00, 0x6E, 0x00, -/* 00001C20 */ 0x63, 0x00, 0x79, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x64, 0x00, 0x65, 0x00, 0x00, 0x00, 0x49, 0x00, -/* 00001C30 */ 0x73, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x75, 0x00, 0x63, 0x00, 0x74, 0x00, 0x75, 0x00, -/* 00001C40 */ 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x79, 0x00, 0x56, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00001C50 */ 0x69, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x75, 0x00, 0x61, 0x00, -/* 00001C60 */ 0x67, 0x00, 0x65, 0x00, 0x54, 0x00, 0x61, 0x00, 0x67, 0x00, 0x00, 0x00, 0x43, 0x00, 0x61, 0x00, -/* 00001C70 */ 0x6E, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, -/* 00001C80 */ 0x7A, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, -/* 00001C90 */ 0x4C, 0x00, 0x69, 0x00, 0x73, 0x00, 0x74, 0x00, 0x00, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x6F, 0x00, -/* 00001CA0 */ 0x6B, 0x00, 0x75, 0x00, 0x70, 0x00, 0x53, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, -/* 00001CB0 */ 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, -/* 00001CC0 */ 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x42, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, -/* 00001CD0 */ 0x46, 0x00, 0x69, 0x00, 0x74, 0x00, 0x53, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, -/* 00001CE0 */ 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, -/* 00001CF0 */ 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x53, 0x00, 0x65, 0x00, 0x74, 0x00, 0x4E, 0x00, -/* 00001D00 */ 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, -/* 00001D10 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x44, 0x00, 0x69, 0x00, 0x67, 0x00, 0x69, 0x00, 0x74, 0x00, -/* 00001D20 */ 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x00, 0x00, -/* 00001D30 */ 0x53, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, -/* 00001D40 */ 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, -/* 00001D50 */ 0x00, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x53, 0x00, 0x74, 0x00, 0x61, 0x00, -/* 00001D60 */ 0x74, 0x00, 0x69, 0x00, 0x63, 0x00, 0x4D, 0x00, 0x65, 0x00, 0x74, 0x00, 0x68, 0x00, 0x6F, 0x00, -/* 00001D70 */ 0x64, 0x00, 0x54, 0x00, 0x68, 0x00, 0x69, 0x00, 0x73, 0x00, 0x41, 0x00, 0x72, 0x00, 0x67, 0x00, -/* 00001D80 */ 0x00, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, -/* 00001D90 */ 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, -/* 00001DA0 */ 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x5F, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x6F, 0x00, -/* 00001DB0 */ 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x75, 0x00, 0x63, 0x00, 0x74, 0x00, 0x61, 0x00, -/* 00001DC0 */ 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x43, 0x00, -/* 00001DD0 */ 0x61, 0x00, 0x6E, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00001DE0 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x5F, 0x00, -/* 00001DF0 */ 0x75, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, -/* 00001E00 */ 0x75, 0x00, 0x63, 0x00, 0x74, 0x00, 0x61, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 00001E10 */ 0x63, 0x00, 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x52, 0x00, 0x65, 0x00, -/* 00001E20 */ 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4F, 0x00, 0x70, 0x00, -/* 00001E30 */ 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x00, 0x00, 0x67, 0x00, 0x65, 0x00, -/* 00001E40 */ 0x74, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x63, 0x00, -/* 00001E50 */ 0x61, 0x00, 0x6C, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, -/* 00001E60 */ 0x73, 0x00, 0x5F, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x49, 0x00, -/* 00001E70 */ 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x7A, 0x00, -/* 00001E80 */ 0x65, 0x00, 0x4C, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x54, 0x00, 0x61, 0x00, 0x67, 0x00, -/* 00001E90 */ 0x52, 0x00, 0x45, 0x00, 0x73, 0x00, 0x00, 0x00, 0x43, 0x00, 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, -/* 00001EA0 */ 0x74, 0x00, 0x65, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, -/* 00001EB0 */ 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, -/* 00001EC0 */ 0x00, 0x00, 0x49, 0x00, 0x73, 0x00, 0x57, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x46, 0x00, -/* 00001ED0 */ 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x61, 0x00, 0x6E, 0x00, -/* 00001EE0 */ 0x67, 0x00, 0x75, 0x00, 0x61, 0x00, 0x67, 0x00, 0x65, 0x00, 0x54, 0x00, 0x61, 0x00, 0x67, 0x00, -/* 00001EF0 */ 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x70, 0x00, -/* 00001F00 */ 0x70, 0x00, 0x65, 0x00, 0x64, 0x00, 0x44, 0x00, 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, -/* 00001F10 */ 0x6C, 0x00, 0x74, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, -/* 00001F20 */ 0x00, 0x00, 0x4C, 0x00, 0x41, 0x00, 0x4E, 0x00, 0x47, 0x00, 0x5F, 0x00, 0x54, 0x00, 0x41, 0x00, -/* 00001F30 */ 0x47, 0x00, 0x5F, 0x00, 0x42, 0x00, 0x41, 0x00, 0x53, 0x00, 0x45, 0x00, 0x5F, 0x00, 0x52, 0x00, -/* 00001F40 */ 0x45, 0x00, 0x00, 0x00, 0x4C, 0x00, 0x41, 0x00, 0x4E, 0x00, 0x47, 0x00, 0x5F, 0x00, 0x54, 0x00, -/* 00001F50 */ 0x41, 0x00, 0x47, 0x00, 0x5F, 0x00, 0x45, 0x00, 0x58, 0x00, 0x54, 0x00, 0x5F, 0x00, 0x52, 0x00, -/* 00001F60 */ 0x45, 0x00, 0x00, 0x00, 0x4C, 0x00, 0x41, 0x00, 0x4E, 0x00, 0x47, 0x00, 0x5F, 0x00, 0x54, 0x00, -/* 00001F70 */ 0x41, 0x00, 0x47, 0x00, 0x5F, 0x00, 0x52, 0x00, 0x45, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, -/* 00001F80 */ 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x5F, 0x00, 0x73, 0x00, -/* 00001F90 */ 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, -/* 00001FA0 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, -/* 00001FB0 */ 0x66, 0x00, 0x5F, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x63, 0x00, -/* 00001FC0 */ 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x5F, 0x00, -/* 00001FD0 */ 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, -/* 00001FE0 */ 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, -/* 00001FF0 */ 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, -/* 00002000 */ 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x5F, 0x00, -/* 00002010 */ 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, -/* 00002020 */ 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, -/* 00002030 */ 0x4F, 0x00, 0x66, 0x00, 0x5F, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 00002040 */ 0x6E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, -/* 00002050 */ 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x5F, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, -/* 00002060 */ 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, -/* 00002070 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, -/* 00002080 */ 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, -/* 00002090 */ 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x5F, 0x00, 0x73, 0x00, -/* 000020A0 */ 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, -/* 000020B0 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, -/* 000020C0 */ 0x66, 0x00, 0x5F, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x64, 0x00, -/* 000020D0 */ 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, -/* 000020E0 */ 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x5F, 0x00, 0x73, 0x00, 0x75, 0x00, -/* 000020F0 */ 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, -/* 00002100 */ 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, -/* 00002110 */ 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x70, 0x00, 0x70, 0x00, 0x65, 0x00, -/* 00002120 */ 0x64, 0x00, 0x44, 0x00, 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x74, 0x00, -/* 00002130 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6E, 0x00, -/* 00002140 */ 0x00, 0x00, 0x5F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 00002150 */ 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x00, 0x00, 0x73, 0x00, 0x65, 0x00, 0x74, 0x00, 0x00, 0x00, -/* 00002160 */ 0x5F, 0x00, 0x2E, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x55, 0x00, 0x70, 0x00, 0x70, 0x00, 0x65, 0x00, -/* 00002170 */ 0x72, 0x00, 0x43, 0x00, 0x61, 0x00, 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, -/* 00002180 */ 0x74, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x65, 0x00, 0x72, 0x00, 0x43, 0x00, -/* 00002190 */ 0x61, 0x00, 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x72, 0x00, 0x65, 0x00, -/* 000021A0 */ 0x70, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x63, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, -/* 000021B0 */ 0x73, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x74, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, -/* 000021C0 */ 0x73, 0x00, 0x75, 0x00, 0x62, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, -/* 000021D0 */ 0x67, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, -/* 000021E0 */ 0x6E, 0x00, 0x67, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x65, 0x00, 0x78, 0x00, 0x4F, 0x00, -/* 000021F0 */ 0x66, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x63, 0x00, -/* 00002200 */ 0x68, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x72, 0x00, 0x65, 0x00, 0x70, 0x00, 0x65, 0x00, -/* 00002210 */ 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, -/* 00002220 */ 0x45, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x70, 0x00, -/* 00002230 */ 0x75, 0x00, 0x73, 0x00, 0x68, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x6A, 0x00, 0x6F, 0x00, -/* 00002240 */ 0x69, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x61, 0x00, 0x72, 0x00, 0x72, 0x00, -/* 00002250 */ 0x61, 0x00, 0x79, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x65, 0x00, 0x78, 0x00, 0x4F, 0x00, -/* 00002260 */ 0x66, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x70, 0x00, 0x00, 0x00, -/* 00002270 */ 0x5F, 0x00, 0x2E, 0x00, 0x72, 0x00, 0x65, 0x00, 0x64, 0x00, 0x75, 0x00, 0x63, 0x00, 0x65, 0x00, -/* 00002280 */ 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x63, 0x00, 0x65, 0x00, -/* 00002290 */ 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x61, 0x00, -/* 000022A0 */ 0x74, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x69, 0x00, 0x6C, 0x00, 0x74, 0x00, -/* 000022B0 */ 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x69, 0x00, -/* 000022C0 */ 0x71, 0x00, 0x75, 0x00, 0x65, 0x00, 0x00, 0x00, 0x61, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, -/* 000022D0 */ 0x79, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x68, 0x00, 0x61, 0x00, 0x73, 0x00, 0x4F, 0x00, -/* 000022E0 */ 0x77, 0x00, 0x6E, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, -/* 000022F0 */ 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x64, 0x00, 0x65, 0x00, 0x66, 0x00, -/* 00002300 */ 0x69, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x65, 0x00, -/* 00002310 */ 0x72, 0x00, 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x63, 0x00, 0x72, 0x00, -/* 00002320 */ 0x65, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x73, 0x00, -/* 00002330 */ 0x65, 0x00, 0x74, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, -/* 00002340 */ 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, -/* 00002350 */ 0x66, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, -/* 00002360 */ 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 00002370 */ 0x5F, 0x00, 0x2E, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x00, 0x00, 0x5F, 0x00, -/* 00002380 */ 0x2E, 0x00, 0x61, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x79, 0x00, 0x00, 0x00, 0x72, 0x00, -/* 00002390 */ 0x61, 0x00, 0x69, 0x00, 0x73, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6E, 0x00, -/* 000023A0 */ 0x67, 0x00, 0x65, 0x00, 0x45, 0x00, 0x72, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, -/* 000023B0 */ 0x72, 0x00, 0x61, 0x00, 0x69, 0x00, 0x73, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x61, 0x00, 0x73, 0x00, -/* 000023C0 */ 0x73, 0x00, 0x65, 0x00, 0x72, 0x00, 0x74, 0x00, 0x00, 0x00, 0x41, 0x00, 0x73, 0x00, 0x73, 0x00, -/* 000023D0 */ 0x65, 0x00, 0x72, 0x00, 0x74, 0x00, 0x20, 0x00, 0x66, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6C, 0x00, -/* 000023E0 */ 0x65, 0x00, 0x64, 0x00, 0x00, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, -/* 000023F0 */ 0x67, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x63, 0x00, -/* 00002400 */ 0x6F, 0x00, 0x00, 0x00, 0x6B, 0x00, 0x66, 0x00, 0x00, 0x00, 0x6B, 0x00, 0x6E, 0x00, 0x00, 0x00, -/* 00002410 */ 0x63, 0x00, 0x61, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x00, 0x00, 0x68, 0x00, 0x63, 0x00, -/* 00002420 */ 0x00, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x64, 0x00, 0x65, 0x00, -/* 00002430 */ 0x45, 0x00, 0x78, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x69, 0x00, 0x6F, 0x00, -/* 00002440 */ 0x6E, 0x00, 0x00, 0x00, 0x65, 0x00, 0x78, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x73, 0x00, -/* 00002450 */ 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, 0x66, 0x00, 0x6F, 0x00, -/* 00002460 */ 0x75, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00002470 */ 0x65, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x74, 0x00, -/* 00002480 */ 0x00, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, -/* 00002490 */ 0x65, 0x00, 0x64, 0x00, 0x45, 0x00, 0x78, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x73, 0x00, -/* 000024A0 */ 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x6F, 0x00, 0x6B, 0x00, -/* 000024B0 */ 0x75, 0x00, 0x70, 0x00, 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, 0x61, 0x00, 0x4C, 0x00, -/* 000024C0 */ 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x2D, 0x00, 0x75, 0x00, -/* 000024D0 */ 0x00, 0x00, 0x2D, 0x00, 0x78, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x6F, 0x00, -/* 000024E0 */ 0x6B, 0x00, 0x75, 0x00, 0x70, 0x00, 0x4D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x63, 0x00, 0x68, 0x00, -/* 000024F0 */ 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x74, 0x00, 0x72, 0x00, 0x75, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 00002500 */ 0x62, 0x00, 0x6F, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x00, 0x00, -/* 00002510 */ 0x6E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x5B, 0x00, -/* 00002520 */ 0x27, 0x00, 0x00, 0x00, 0x27, 0x00, 0x5D, 0x00, 0x00, 0x00, 0x27, 0x00, 0x2C, 0x00, 0x20, 0x00, -/* 00002530 */ 0x27, 0x00, 0x00, 0x00, 0x5B, 0x00, 0x00, 0x00, 0x20, 0x00, 0x2D, 0x00, 0x20, 0x00, 0x00, 0x00, -/* 00002540 */ 0x5D, 0x00, 0x00, 0x00, 0x5E, 0x00, 0x5B, 0x00, 0x41, 0x00, 0x2D, 0x00, 0x5A, 0x00, 0x5D, 0x00, -/* 00002550 */ 0x7B, 0x00, 0x33, 0x00, 0x7D, 0x00, 0x24, 0x00, 0x00, 0x00, 0x70, 0x00, 0x61, 0x00, 0x72, 0x00, -/* 00002560 */ 0x73, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x74, 0x00, -/* 00002570 */ 0x61, 0x00, 0x67, 0x00, 0x43, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 00002580 */ 0x5B, 0x00, 0x41, 0x00, 0x2D, 0x00, 0x5A, 0x00, 0x5D, 0x00, 0x00, 0x00, 0x5B, 0x00, 0x30, 0x00, -/* 00002590 */ 0x2D, 0x00, 0x39, 0x00, 0x5D, 0x00, 0x00, 0x00, 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x00, 0x00, -/* 000025A0 */ 0x7C, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x28, 0x00, 0x3F, 0x00, -/* 000025B0 */ 0x3A, 0x00, 0x61, 0x00, 0x72, 0x00, 0x74, 0x00, 0x2D, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x6A, 0x00, -/* 000025C0 */ 0x62, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x7C, 0x00, 0x63, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x2D, 0x00, -/* 000025D0 */ 0x67, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x7C, 0x00, -/* 000025E0 */ 0x6E, 0x00, 0x6F, 0x00, 0x2D, 0x00, 0x62, 0x00, 0x6F, 0x00, 0x6B, 0x00, 0x7C, 0x00, 0x6E, 0x00, -/* 000025F0 */ 0x6F, 0x00, 0x2D, 0x00, 0x6E, 0x00, 0x79, 0x00, 0x6E, 0x00, 0x7C, 0x00, 0x7A, 0x00, 0x68, 0x00, -/* 00002600 */ 0x2D, 0x00, 0x67, 0x00, 0x75, 0x00, 0x6F, 0x00, 0x79, 0x00, 0x75, 0x00, 0x7C, 0x00, 0x7A, 0x00, -/* 00002610 */ 0x68, 0x00, 0x2D, 0x00, 0x68, 0x00, 0x61, 0x00, 0x6B, 0x00, 0x6B, 0x00, 0x61, 0x00, 0x7C, 0x00, -/* 00002620 */ 0x7A, 0x00, 0x68, 0x00, 0x2D, 0x00, 0x6D, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x7C, 0x00, 0x7A, 0x00, -/* 00002630 */ 0x68, 0x00, 0x2D, 0x00, 0x6D, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x2D, 0x00, 0x6E, 0x00, 0x61, 0x00, -/* 00002640 */ 0x6E, 0x00, 0x7C, 0x00, 0x7A, 0x00, 0x68, 0x00, 0x2D, 0x00, 0x78, 0x00, 0x69, 0x00, 0x61, 0x00, -/* 00002650 */ 0x6E, 0x00, 0x67, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x62, 0x00, -/* 00002660 */ 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x2D, 0x00, 0x47, 0x00, 0x42, 0x00, -/* 00002670 */ 0x2D, 0x00, 0x6F, 0x00, 0x65, 0x00, 0x64, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x61, 0x00, -/* 00002680 */ 0x6D, 0x00, 0x69, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x62, 0x00, 0x6E, 0x00, 0x6E, 0x00, -/* 00002690 */ 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x64, 0x00, 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, -/* 000026A0 */ 0x6C, 0x00, 0x74, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x6F, 0x00, -/* 000026B0 */ 0x63, 0x00, 0x68, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, -/* 000026C0 */ 0x68, 0x00, 0x61, 0x00, 0x6B, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x6B, 0x00, 0x6C, 0x00, -/* 000026D0 */ 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, -/* 000026E0 */ 0x6C, 0x00, 0x75, 0x00, 0x78, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x6D, 0x00, 0x69, 0x00, -/* 000026F0 */ 0x6E, 0x00, 0x67, 0x00, 0x6F, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x6E, 0x00, -/* 00002700 */ 0x61, 0x00, 0x76, 0x00, 0x61, 0x00, 0x6A, 0x00, 0x6F, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, -/* 00002710 */ 0x70, 0x00, 0x77, 0x00, 0x6E, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x74, 0x00, 0x61, 0x00, -/* 00002720 */ 0x6F, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x74, 0x00, 0x61, 0x00, 0x79, 0x00, 0x7C, 0x00, -/* 00002730 */ 0x69, 0x00, 0x2D, 0x00, 0x74, 0x00, 0x73, 0x00, 0x75, 0x00, 0x7C, 0x00, 0x73, 0x00, 0x67, 0x00, -/* 00002740 */ 0x6E, 0x00, 0x2D, 0x00, 0x42, 0x00, 0x45, 0x00, 0x2D, 0x00, 0x46, 0x00, 0x52, 0x00, 0x7C, 0x00, -/* 00002750 */ 0x73, 0x00, 0x67, 0x00, 0x6E, 0x00, 0x2D, 0x00, 0x42, 0x00, 0x45, 0x00, 0x2D, 0x00, 0x4E, 0x00, -/* 00002760 */ 0x4C, 0x00, 0x7C, 0x00, 0x73, 0x00, 0x67, 0x00, 0x6E, 0x00, 0x2D, 0x00, 0x43, 0x00, 0x48, 0x00, -/* 00002770 */ 0x2D, 0x00, 0x44, 0x00, 0x45, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x5C, 0x00, -/* 00002780 */ 0x62, 0x00, 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x00, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, -/* 00002790 */ 0x00, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x78, 0x00, 0x28, 0x00, -/* 000027A0 */ 0x3F, 0x00, 0x3A, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x31, 0x00, 0x2C, 0x00, 0x38, 0x00, -/* 000027B0 */ 0x7D, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x29, 0x00, 0x2B, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, -/* 000027C0 */ 0x00, 0x00, 0x7C, 0x00, 0x5B, 0x00, 0x41, 0x00, 0x2D, 0x00, 0x57, 0x00, 0x59, 0x00, 0x2D, 0x00, -/* 000027D0 */ 0x5A, 0x00, 0x5D, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x28, 0x00, 0x3F, 0x00, -/* 000027E0 */ 0x3A, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x32, 0x00, 0x2C, 0x00, 0x38, 0x00, 0x7D, 0x00, -/* 000027F0 */ 0x29, 0x00, 0x2B, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x35, 0x00, -/* 00002800 */ 0x2C, 0x00, 0x38, 0x00, 0x7D, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x33, 0x00, 0x7D, 0x00, -/* 00002810 */ 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x32, 0x00, 0x7D, 0x00, 0x7C, 0x00, -/* 00002820 */ 0x00, 0x00, 0x7B, 0x00, 0x34, 0x00, 0x7D, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, -/* 00002830 */ 0x7B, 0x00, 0x33, 0x00, 0x7D, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, -/* 00002840 */ 0x2D, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x33, 0x00, 0x7D, 0x00, 0x29, 0x00, 0x7B, 0x00, 0x30, 0x00, -/* 00002850 */ 0x2C, 0x00, 0x32, 0x00, 0x7D, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x7B, 0x00, -/* 00002860 */ 0x32, 0x00, 0x2C, 0x00, 0x33, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x28, 0x00, -/* 00002870 */ 0x3F, 0x00, 0x3A, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x7B, 0x00, -/* 00002880 */ 0x34, 0x00, 0x2C, 0x00, 0x38, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x28, 0x00, -/* 00002890 */ 0x00, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x2D, 0x00, 0x28, 0x00, -/* 000028A0 */ 0x00, 0x00, 0x29, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x5C, 0x00, -/* 000028B0 */ 0x62, 0x00, 0x28, 0x00, 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x29, 0x00, -/* 000028C0 */ 0x2A, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x5C, 0x00, -/* 000028D0 */ 0x62, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x5E, 0x00, 0x00, 0x00, 0x24, 0x00, -/* 000028E0 */ 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x6E, 0x00, -/* 000028F0 */ 0x67, 0x00, 0x75, 0x00, 0x61, 0x00, 0x67, 0x00, 0x65, 0x00, 0x00, 0x00, 0x73, 0x00, 0x63, 0x00, -/* 00002900 */ 0x72, 0x00, 0x69, 0x00, 0x70, 0x00, 0x74, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, 0x67, 0x00, -/* 00002910 */ 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x76, 0x00, 0x61, 0x00, 0x72, 0x00, 0x69, 0x00, -/* 00002920 */ 0x61, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x65, 0x00, 0x78, 0x00, 0x74, 0x00, -/* 00002930 */ 0x65, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x00, 0x00, -/* 00002940 */ 0x75, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x65, 0x00, 0x66, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x65, 0x00, -/* 00002950 */ 0x64, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, -/* 00002960 */ 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 00002970 */ 0x69, 0x00, 0x73, 0x00, 0x41, 0x00, 0x76, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6C, 0x00, 0x61, 0x00, -/* 00002980 */ 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00002990 */ 0x65, 0x00, 0x00, 0x00, 0x73, 0x00, 0x75, 0x00, 0x62, 0x00, 0x73, 0x00, 0x65, 0x00, 0x74, 0x00, -/* 000029A0 */ 0x00, 0x00, 0x6D, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x75, 0x00, 0x6D, 0x00, -/* 000029B0 */ 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x65, 0x00, 0x67, 0x00, 0x65, 0x00, 0x72, 0x00, 0x44, 0x00, -/* 000029C0 */ 0x69, 0x00, 0x67, 0x00, 0x69, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x69, 0x00, -/* 000029D0 */ 0x6E, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x46, 0x00, 0x72, 0x00, 0x61, 0x00, -/* 000029E0 */ 0x63, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x44, 0x00, 0x69, 0x00, 0x67, 0x00, -/* 000029F0 */ 0x69, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x78, 0x00, 0x69, 0x00, -/* 00002A00 */ 0x6D, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x46, 0x00, 0x72, 0x00, 0x61, 0x00, 0x63, 0x00, 0x74, 0x00, -/* 00002A10 */ 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x44, 0x00, 0x69, 0x00, 0x67, 0x00, 0x69, 0x00, 0x74, 0x00, -/* 00002A20 */ 0x73, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x75, 0x00, -/* 00002A30 */ 0x6D, 0x00, 0x53, 0x00, 0x69, 0x00, 0x67, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x66, 0x00, 0x69, 0x00, -/* 00002A40 */ 0x63, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x44, 0x00, 0x69, 0x00, 0x67, 0x00, 0x69, 0x00, -/* 00002A50 */ 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x78, 0x00, 0x69, 0x00, 0x6D, 0x00, -/* 00002A60 */ 0x75, 0x00, 0x6D, 0x00, 0x53, 0x00, 0x69, 0x00, 0x67, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x66, 0x00, -/* 00002A70 */ 0x69, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x44, 0x00, 0x69, 0x00, 0x67, 0x00, -/* 00002A80 */ 0x69, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x62, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, -/* 00002A90 */ 0x20, 0x00, 0x66, 0x00, 0x69, 0x00, 0x74, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, -/* 00002AA0 */ 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x4D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x63, 0x00, 0x68, 0x00, -/* 00002AB0 */ 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x74, 0x00, -/* 00002AC0 */ 0x68, 0x00, 0x00, 0x00, 0x68, 0x00, 0x69, 0x00, 0x64, 0x00, 0x64, 0x00, 0x65, 0x00, 0x6E, 0x00, -/* 00002AD0 */ 0x4F, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x00, 0x00, 0x66, 0x00, -/* 00002AE0 */ 0x75, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, -/* 00002AF0 */ 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x64, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x69, 0x00, -/* 00002B00 */ 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x43, 0x00, -/* 00002B10 */ 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, -/* 00002B20 */ 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x43, 0x00, 0x6F, 0x00, -/* 00002B30 */ 0x6D, 0x00, 0x70, 0x00, 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x61, 0x00, -/* 00002B40 */ 0x74, 0x00, 0x65, 0x00, 0x43, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 00002B50 */ 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, 0x53, 0x00, -/* 00002B60 */ 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, -/* 00002B70 */ 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, -/* 00002B80 */ 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x43, 0x00, 0x6F, 0x00, -/* 00002B90 */ 0x6D, 0x00, 0x70, 0x00, 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, -/* 00002BA0 */ 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, -/* 00002BB0 */ 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, -/* 00002BC0 */ 0x2E, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, -/* 00002BD0 */ 0x72, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, -/* 00002BE0 */ 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00, -/* 00002BF0 */ 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, 0x00, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, -/* 00002C00 */ 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, -/* 00002C10 */ 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x75, 0x00, 0x63, 0x00, 0x74, 0x00, 0x6F, 0x00, -/* 00002C20 */ 0x72, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, -/* 00002C30 */ 0x65, 0x00, 0x64, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, -/* 00002C40 */ 0x73, 0x00, 0x00, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x20, 0x00, 0x63, 0x00, 0x6F, 0x00, -/* 00002C50 */ 0x6D, 0x00, 0x70, 0x00, 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, -/* 00002C60 */ 0x6D, 0x00, 0x70, 0x00, 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, 0x00, 0x00, 0x75, 0x00, 0x73, 0x00, -/* 00002C70 */ 0x61, 0x00, 0x67, 0x00, 0x65, 0x00, 0x00, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, -/* 00002C80 */ 0x00, 0x00, 0x73, 0x00, 0x65, 0x00, 0x61, 0x00, 0x72, 0x00, 0x63, 0x00, 0x68, 0x00, 0x00, 0x00, -/* 00002C90 */ 0x6E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x72, 0x00, 0x69, 0x00, 0x63, 0x00, 0x00, 0x00, -/* 00002CA0 */ 0x63, 0x00, 0x61, 0x00, 0x73, 0x00, 0x65, 0x00, 0x46, 0x00, 0x69, 0x00, 0x72, 0x00, 0x73, 0x00, -/* 00002CB0 */ 0x74, 0x00, 0x00, 0x00, 0x64, 0x00, 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, -/* 00002CC0 */ 0x74, 0x00, 0x00, 0x00, 0x73, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x69, 0x00, 0x74, 0x00, -/* 00002CD0 */ 0x69, 0x00, 0x76, 0x00, 0x69, 0x00, 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x69, 0x00, 0x67, 0x00, -/* 00002CE0 */ 0x6E, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x65, 0x00, 0x50, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x63, 0x00, -/* 00002CF0 */ 0x74, 0x00, 0x75, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, -/* 00002D00 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, -/* 00002D10 */ 0x63, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, -/* 00002D20 */ 0x6E, 0x00, 0x00, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, -/* 00002D30 */ 0x6C, 0x00, 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x64, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, -/* 00002D40 */ 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x62, 0x00, 0x6F, 0x00, -/* 00002D50 */ 0x75, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00, 0x61, 0x00, -/* 00002D60 */ 0x72, 0x00, 0x65, 0x00, 0x00, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, -/* 00002D70 */ 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, -/* 00002D80 */ 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x63, 0x00, 0x6F, 0x00, -/* 00002D90 */ 0x6D, 0x00, 0x70, 0x00, 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, 0x00, 0x00, 0x43, 0x00, 0x6F, 0x00, -/* 00002DA0 */ 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x2E, 0x00, 0x70, 0x00, -/* 00002DB0 */ 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, -/* 00002DC0 */ 0x2E, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, -/* 00002DD0 */ 0x64, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, -/* 00002DE0 */ 0x00, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00, -/* 00002DF0 */ 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, -/* 00002E00 */ 0x69, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x4E, 0x00, 0x75, 0x00, -/* 00002E10 */ 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, -/* 00002E20 */ 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, -/* 00002E30 */ 0x72, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, -/* 00002E40 */ 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, -/* 00002E50 */ 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, -/* 00002E60 */ 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, -/* 00002E70 */ 0x67, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x4E, 0x00, -/* 00002E80 */ 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, -/* 00002E90 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, -/* 00002EA0 */ 0x2E, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, -/* 00002EB0 */ 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, -/* 00002EC0 */ 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, -/* 00002ED0 */ 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x49, 0x00, -/* 00002EE0 */ 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, -/* 00002EF0 */ 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, -/* 00002F00 */ 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, -/* 00002F10 */ 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, -/* 00002F20 */ 0x74, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x50, 0x00, 0x61, 0x00, 0x72, 0x00, 0x74, 0x00, 0x73, 0x00, -/* 00002F30 */ 0x00, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x20, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, -/* 00002F40 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, -/* 00002F50 */ 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, -/* 00002F60 */ 0x74, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x50, 0x00, 0x61, 0x00, 0x72, 0x00, 0x74, 0x00, 0x73, 0x00, -/* 00002F70 */ 0x00, 0x00, 0x73, 0x00, 0x74, 0x00, 0x79, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x64, 0x00, -/* 00002F80 */ 0x65, 0x00, 0x63, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x70, 0x00, -/* 00002F90 */ 0x65, 0x00, 0x72, 0x00, 0x63, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x00, 0x00, 0x63, 0x00, -/* 00002FA0 */ 0x75, 0x00, 0x72, 0x00, 0x72, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x79, 0x00, 0x00, 0x00, -/* 00002FB0 */ 0x63, 0x00, 0x75, 0x00, 0x72, 0x00, 0x72, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x79, 0x00, -/* 00002FC0 */ 0x44, 0x00, 0x69, 0x00, 0x73, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x79, 0x00, 0x00, 0x00, -/* 00002FD0 */ 0x63, 0x00, 0x6F, 0x00, 0x64, 0x00, 0x65, 0x00, 0x00, 0x00, 0x73, 0x00, 0x79, 0x00, 0x6D, 0x00, -/* 00002FE0 */ 0x62, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x75, 0x00, 0x73, 0x00, 0x65, 0x00, 0x47, 0x00, -/* 00002FF0 */ 0x72, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x70, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, -/* 00003000 */ 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, -/* 00003010 */ 0x7A, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, -/* 00003020 */ 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, -/* 00003030 */ 0x62, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, -/* 00003040 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, -/* 00003050 */ 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, -/* 00003060 */ 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, -/* 00003070 */ 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, -/* 00003080 */ 0x74, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, -/* 00003090 */ 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, -/* 000030A0 */ 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, -/* 000030B0 */ 0x2E, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x54, 0x00, -/* 000030C0 */ 0x6F, 0x00, 0x50, 0x00, 0x61, 0x00, 0x72, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x4E, 0x00, -/* 000030D0 */ 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, -/* 000030E0 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, -/* 000030F0 */ 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x72, 0x00, 0x65, 0x00, -/* 00003100 */ 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4F, 0x00, 0x70, 0x00, -/* 00003110 */ 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x75, 0x00, -/* 00003120 */ 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x53, 0x00, -/* 00003130 */ 0x79, 0x00, 0x73, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6D, 0x00, 0x00, 0x00, 0x67, 0x00, 0x65, 0x00, -/* 00003140 */ 0x74, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, -/* 00003150 */ 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, -/* 00003160 */ 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, -/* 00003170 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, -/* 00003180 */ 0x6E, 0x00, 0x67, 0x00, 0x49, 0x00, 0x6D, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6D, 0x00, -/* 00003190 */ 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, -/* 000031A0 */ 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, -/* 000031B0 */ 0x65, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x65, 0x00, -/* 000031C0 */ 0x6E, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x50, 0x00, -/* 000031D0 */ 0x61, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x46, 0x00, 0x6F, 0x00, -/* 000031E0 */ 0x72, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, -/* 000031F0 */ 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00003200 */ 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, -/* 00003210 */ 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, -/* 00003220 */ 0x74, 0x00, 0x00, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, -/* 00003230 */ 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, -/* 00003240 */ 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x00, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, -/* 00003250 */ 0x61, 0x00, 0x74, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, -/* 00003260 */ 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, -/* 00003270 */ 0x74, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, -/* 00003280 */ 0x65, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x50, 0x00, 0x61, 0x00, 0x72, 0x00, 0x74, 0x00, 0x73, 0x00, -/* 00003290 */ 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x49, 0x00, -/* 000032A0 */ 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, 0x54, 0x00, -/* 000032B0 */ 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x53, 0x00, -/* 000032C0 */ 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x44, 0x00, 0x65, 0x00, 0x66, 0x00, -/* 000032D0 */ 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x43, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, -/* 000032E0 */ 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x75, 0x00, 0x72, 0x00, 0x65, 0x00, -/* 000032F0 */ 0x4D, 0x00, 0x65, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x65, 0x00, -/* 00003300 */ 0x6E, 0x00, 0x73, 0x00, 0x75, 0x00, 0x72, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, -/* 00003310 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, -/* 00003320 */ 0x00, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x72, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x00, 0x00, -/* 00003330 */ 0x73, 0x00, 0x68, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, -/* 00003340 */ 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, 0x32, 0x00, 0x2D, 0x00, 0x64, 0x00, 0x69, 0x00, 0x67, 0x00, -/* 00003350 */ 0x69, 0x00, 0x74, 0x00, 0x00, 0x00, 0x77, 0x00, 0x65, 0x00, 0x65, 0x00, 0x6B, 0x00, 0x64, 0x00, -/* 00003360 */ 0x61, 0x00, 0x79, 0x00, 0x00, 0x00, 0x65, 0x00, 0x72, 0x00, 0x61, 0x00, 0x00, 0x00, 0x79, 0x00, -/* 00003370 */ 0x65, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x74, 0x00, -/* 00003380 */ 0x68, 0x00, 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, 0x79, 0x00, 0x00, 0x00, 0x68, 0x00, 0x6F, 0x00, -/* 00003390 */ 0x75, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x74, 0x00, -/* 000033A0 */ 0x65, 0x00, 0x00, 0x00, 0x73, 0x00, 0x65, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x64, 0x00, -/* 000033B0 */ 0x00, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x5A, 0x00, 0x6F, 0x00, 0x6E, 0x00, -/* 000033C0 */ 0x65, 0x00, 0x4E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x74, 0x00, 0x6F, 0x00, -/* 000033D0 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, -/* 000033E0 */ 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x4C, 0x00, -/* 000033F0 */ 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, -/* 00003400 */ 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, -/* 00003410 */ 0x74, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, -/* 00003420 */ 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, -/* 00003430 */ 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x2E, 0x00, -/* 00003440 */ 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, -/* 00003450 */ 0x65, 0x00, 0x2E, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, -/* 00003460 */ 0x6C, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, -/* 00003470 */ 0x00, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x79, 0x00, 0x00, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x6C, 0x00, -/* 00003480 */ 0x00, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, -/* 00003490 */ 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, -/* 000034A0 */ 0x74, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, -/* 000034B0 */ 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, -/* 000034C0 */ 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 000034D0 */ 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, -/* 000034E0 */ 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x74, 0x00, -/* 000034F0 */ 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x54, 0x00, -/* 00003500 */ 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, -/* 00003510 */ 0x67, 0x00, 0x00, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x49, 0x00, -/* 00003520 */ 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, -/* 00003530 */ 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, -/* 00003540 */ 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, -/* 00003550 */ 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, -/* 00003560 */ 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, -/* 00003570 */ 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, -/* 00003580 */ 0x2E, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, -/* 00003590 */ 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, -/* 000035A0 */ 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, -/* 000035B0 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, -/* 000035C0 */ 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x6F, 0x00, -/* 000035D0 */ 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x50, 0x00, 0x61, 0x00, -/* 000035E0 */ 0x72, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x73, 0x00, 0x79, 0x00, 0x6D, 0x00, 0x62, 0x00, -/* 000035F0 */ 0x6F, 0x00, 0x6C, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, -/* 00003600 */ 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, -/* 00003610 */ 0x6F, 0x00, 0x6E, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x53, 0x00, 0x79, 0x00, 0x6D, 0x00, -/* 00003620 */ 0x62, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x73, 0x00, 0x79, 0x00, 0x6D, 0x00, 0x62, 0x00, -/* 00003630 */ 0x6F, 0x00, 0x6C, 0x00, 0x4C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x74, 0x00, 0x68, 0x00, -/* 00003640 */ 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, -/* 00003650 */ 0x6E, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, -/* 00003660 */ 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x53, 0x00, 0x79, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x6F, 0x00, -/* 00003670 */ 0x6C, 0x00, 0x4C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x74, 0x00, 0x68, 0x00, 0x00, 0x00, -/* 00003680 */ 0x70, 0x00, 0x61, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x46, 0x00, -/* 00003690 */ 0x6F, 0x00, 0x72, 0x00, 0x48, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x72, 0x00, 0x43, 0x00, 0x79, 0x00, -/* 000036A0 */ 0x63, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x68, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x72, 0x00, -/* 000036B0 */ 0x43, 0x00, 0x79, 0x00, 0x63, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, -/* 000036C0 */ 0x50, 0x00, 0x61, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x00, 0x00, -/* 000036D0 */ 0x45, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x4D, 0x00, 0x00, 0x00, -/* 000036E0 */ 0x64, 0x00, 0x00, 0x00, 0x6A, 0x00, 0x00, 0x00, 0x68, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x72, 0x00, -/* 000036F0 */ 0x31, 0x00, 0x32, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x68, 0x00, 0x6F, 0x00, 0x75, 0x00, -/* 00003700 */ 0x72, 0x00, 0x32, 0x00, 0x34, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x00, 0x00, -/* 00003710 */ 0x73, 0x00, 0x00, 0x00, 0x7A, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 00003720 */ 0x55, 0x00, 0x00, 0x00, 0x4C, 0x00, 0x00, 0x00, 0x4B, 0x00, 0x00, 0x00, 0x6B, 0x00, 0x00, 0x00, -/* 00003730 */ 0x5A, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x4F, 0x00, 0x00, 0x00, -/* 00003740 */ 0x58, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, -/* 00003750 */ 0x33, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x68, 0x00, 0x31, 0x00, -/* 00003760 */ 0x32, 0x00, 0x00, 0x00, 0x68, 0x00, 0x32, 0x00, 0x33, 0x00, 0x00, 0x00, 0x68, 0x00, 0x31, 0x00, -/* 00003770 */ 0x31, 0x00, 0x00, 0x00, 0x68, 0x00, 0x32, 0x00, 0x34, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, -/* 00003780 */ 0x20, 0x00, 0x00, 0x00, 0x68, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x72, 0x00, 0x43, 0x00, 0x79, 0x00, -/* 00003790 */ 0x63, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x45, 0x00, 0x74, 0x00, 0x63, 0x00, 0x2F, 0x00, -/* 000037A0 */ 0x55, 0x00, 0x6E, 0x00, 0x6B, 0x00, 0x6E, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x6E, 0x00, 0x00, 0x00, -/* 000037B0 */ 0x74, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x5A, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x65, 0x00, -/* 000037C0 */ 0x00, 0x00, 0x49, 0x00, 0x41, 0x00, 0x4E, 0x00, 0x41, 0x00, 0x20, 0x00, 0x5A, 0x00, 0x6F, 0x00, -/* 000037D0 */ 0x6E, 0x00, 0x65, 0x00, 0x20, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x20, 0x00, 0x4C, 0x00, 0x69, 0x00, -/* 000037E0 */ 0x6E, 0x00, 0x6B, 0x00, 0x20, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x20, 0x00, -/* 000037F0 */ 0x28, 0x00, 0x41, 0x00, 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, 0x2F, 0x00, 0x4C, 0x00, 0x6F, 0x00, -/* 00003800 */ 0x63, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x29, 0x00, 0x00, 0x00, -/* 00003810 */ 0x45, 0x00, 0x74, 0x00, 0x63, 0x00, 0x2F, 0x00, 0x55, 0x00, 0x54, 0x00, 0x43, 0x00, 0x00, 0x00, -/* 00003820 */ 0x45, 0x00, 0x74, 0x00, 0x63, 0x00, 0x2F, 0x00, 0x47, 0x00, 0x4D, 0x00, 0x54, 0x00, 0x00, 0x00, -/* 00003830 */ 0x55, 0x00, 0x54, 0x00, 0x43, 0x00, 0x00, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, -/* 00003840 */ 0x61, 0x00, 0x74, 0x00, 0x4D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, -/* 00003850 */ 0x72, 0x00, 0x00, 0x00, 0x62, 0x00, 0x61, 0x00, 0x73, 0x00, 0x69, 0x00, 0x63, 0x00, 0x00, 0x00, -/* 00003860 */ 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, -/* 00003870 */ 0x7A, 0x00, 0x65, 0x00, 0x64, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, -/* 00003880 */ 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, -/* 00003890 */ 0x74, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x65, 0x00, 0x64, 0x00, 0x44, 0x00, 0x65, 0x00, -/* 000038A0 */ 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x49, 0x00, -/* 000038B0 */ 0x6E, 0x00, 0x76, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x64, 0x00, 0x20, 0x00, 0x44, 0x00, -/* 000038C0 */ 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, -/* 000038D0 */ 0x6F, 0x00, 0x6E, 0x00, 0x31, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, -/* 000038E0 */ 0x6F, 0x00, 0x6E, 0x00, 0x32, 0x00, 0x00, 0x00, 0x63, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, -/* 000038F0 */ 0x65, 0x00, 0x53, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, -/* 00003900 */ 0x74, 0x00, 0x65, 0x00, 0x5F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, -/* 00003910 */ 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, -/* 00003920 */ 0x67, 0x00, 0x5F, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x72, 0x00, 0x79, 0x00, 0x50, 0x00, -/* 00003930 */ 0x6F, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, -/* 00003940 */ 0x65, 0x00, 0x5F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, -/* 00003950 */ 0x6C, 0x00, 0x65, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, -/* 00003960 */ 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x5F, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, -/* 00003970 */ 0x72, 0x00, 0x79, 0x00, 0x50, 0x00, 0x6F, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x00, 0x00, -/* 00003980 */ 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x5F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x4C, 0x00, -/* 00003990 */ 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, -/* 000039A0 */ 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x5F, 0x00, -/* 000039B0 */ 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x72, 0x00, 0x79, 0x00, 0x50, 0x00, 0x6F, 0x00, 0x69, 0x00, -/* 000039C0 */ 0x6E, 0x00, 0x74, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, -/* 000039D0 */ 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, -/* 000039E0 */ 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, -/* 000039F0 */ 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, -/* 00003A00 */ 0x2E, 0x00, 0x00, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, -/* 00003A10 */ 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, -/* 00003A20 */ 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x50, 0x00, 0x6C, 0x00, 0x75, 0x00, -/* 00003A30 */ 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x52, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, -/* 00003A40 */ 0x00, 0x00, 0x52, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, -/* 00003A50 */ 0x50, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x70, 0x00, -/* 00003A60 */ 0x6C, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x52, 0x00, 0x75, 0x00, 0x6C, 0x00, -/* 00003A70 */ 0x65, 0x00, 0x73, 0x00, 0x5F, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, -/* 00003A80 */ 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, -/* 00003A90 */ 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x5F, 0x00, 0x6E, 0x00, 0x61, 0x00, -/* 00003AA0 */ 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, -/* 00003AB0 */ 0x50, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x52, 0x00, 0x75, 0x00, -/* 00003AC0 */ 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, -/* 00003AD0 */ 0x2E, 0x00, 0x50, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x52, 0x00, -/* 00003AE0 */ 0x75, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, -/* 00003AF0 */ 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, -/* 00003B00 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, -/* 00003B10 */ 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x50, 0x00, 0x6C, 0x00, 0x75, 0x00, -/* 00003B20 */ 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x52, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, -/* 00003B30 */ 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, -/* 00003B40 */ 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x63, 0x00, -/* 00003B50 */ 0x74, 0x00, 0x00, 0x00, 0x73, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, -/* 00003B60 */ 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x50, 0x00, 0x6C, 0x00, -/* 00003B70 */ 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x52, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x65, 0x00, -/* 00003B80 */ 0x73, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, -/* 00003B90 */ 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, -/* 00003BA0 */ 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, -/* 00003BB0 */ 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x00, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, -/* 00003BC0 */ 0x00, 0x00, 0x63, 0x00, 0x61, 0x00, 0x72, 0x00, 0x64, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x61, 0x00, -/* 00003BD0 */ 0x6C, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x64, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x61, 0x00, -/* 00003BE0 */ 0x6C, 0x00, 0x00, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00003BF0 */ 0x43, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x67, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x69, 0x00, -/* 00003C00 */ 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, -/* 00003C10 */ 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x64, 0x00, 0x50, 0x00, 0x6C, 0x00, -/* 00003C20 */ 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x52, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x65, 0x00, -/* 00003C30 */ 0x73, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x68, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, -/* 00003C40 */ 0x70, 0x00, 0x72, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x6D, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x74, 0x00, -/* 00003C50 */ 0x68, 0x00, 0x2E, 0x00, 0x61, 0x00, 0x7D, 0x00, 0x7B, 0x00, 0x64, 0x00, 0x61, 0x00, 0x79, 0x00, -/* 00003C60 */ 0x2E, 0x00, 0x62, 0x00, 0x7D, 0x00, 0x7B, 0x00, 0x68, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x72, 0x00, -/* 00003C70 */ 0x2E, 0x00, 0x63, 0x00, 0x7D, 0x00, 0x7B, 0x00, 0x6D, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x75, 0x00, -/* 00003C80 */ 0x74, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x64, 0x00, 0x7D, 0x00, 0x7B, 0x00, 0x73, 0x00, 0x65, 0x00, -/* 00003C90 */ 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x2E, 0x00, 0x65, 0x00, 0x7D, 0x00, 0x00, 0x00, -/* 00003CA0 */ 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x4C, 0x00, -/* 00003CB0 */ 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x42, 0x00, 0x65, 0x00, 0x73, 0x00, -/* 00003CC0 */ 0x74, 0x00, 0x46, 0x00, 0x69, 0x00, 0x74, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, -/* 00003CD0 */ 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, -/* 00003CE0 */ 0x6C, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x6F, 0x00, 0x6B, 0x00, 0x75, 0x00, 0x70, 0x00, -/* 00003CF0 */ 0x00, 0x00, 0x66, 0x00, 0x69, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x65, 0x00, -/* 00003D00 */ 0x64, 0x00, 0x00, 0x00, 0x65, 0x00, 0x78, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x73, 0x00, -/* 00003D10 */ 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x46, 0x00, 0x69, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x65, 0x00, -/* 00003D20 */ 0x72, 0x00, 0x00, 0x00, 0x2D, 0x00, 0x75, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x73, 0x00, 0x75, 0x00, -/* 00003D30 */ 0x62, 0x00, 0x54, 0x00, 0x61, 0x00, 0x67, 0x00, 0x73, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, -/* 00003D40 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x57, 0x00, 0x69, 0x00, 0x74, 0x00, 0x68, 0x00, -/* 00003D50 */ 0x6F, 0x00, 0x75, 0x00, 0x74, 0x00, 0x53, 0x00, 0x75, 0x00, 0x62, 0x00, 0x74, 0x00, 0x61, 0x00, -/* 00003D60 */ 0x67, 0x00, 0x73, 0x00, 0x00, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x2A, 0x00, 0x3F, 0x00, 0x29, 0x00, -/* 00003D70 */ 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x2D, 0x00, 0x75, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x24, 0x00, -/* 00003D80 */ 0x00, 0x00, 0x28, 0x00, 0x5B, 0x00, 0x5E, 0x00, 0x2D, 0x00, 0x5D, 0x00, 0x2A, 0x00, 0x29, 0x00, -/* 00003D90 */ 0x2D, 0x00, 0x3F, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x2A, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x00, 0x00, -/* 00003DA0 */ 0x28, 0x00, 0x5B, 0x00, 0x5E, 0x00, 0x5F, 0x00, 0x5D, 0x00, 0x2A, 0x00, 0x29, 0x00, 0x2E, 0x00, -/* 00003DB0 */ 0x2A, 0x00, 0x00, 0x00, 0x48, 0x00, 0x61, 0x00, 0x73, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, -/* 00003DC0 */ 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x29, 0x00, 0x2A, 0x00, -/* 00003DD0 */ 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x73, 0x00, 0x65, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x00, 0x00, -/* 00003DE0 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x63, 0x00, -/* 00003DF0 */ 0x6F, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x00, 0x00, 0x66, 0x00, 0x69, 0x00, 0x74, 0x00, -/* 00003E00 */ 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x64, 0x00, 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, -/* 00003E10 */ 0x75, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00003E20 */ 0x65, 0x00, 0x00, 0x00, 0x5B, 0x00, 0x27, 0x00, 0x62, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, -/* 00003E30 */ 0x20, 0x00, 0x66, 0x00, 0x69, 0x00, 0x74, 0x00, 0x27, 0x00, 0x2C, 0x00, 0x20, 0x00, 0x27, 0x00, -/* 00003E40 */ 0x6C, 0x00, 0x6F, 0x00, 0x6F, 0x00, 0x6B, 0x00, 0x75, 0x00, 0x70, 0x00, 0x27, 0x00, 0x5D, 0x00, -/* 00003E50 */ 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, -/* 00003E60 */ 0x72, 0x00, 0x5F, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, -/* 00003E70 */ 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00003E80 */ 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x5F, 0x00, 0x64, 0x00, 0x75, 0x00, 0x6D, 0x00, -/* 00003E90 */ 0x6D, 0x00, 0x79, 0x00, 0x4E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6E, 0x00, -/* 00003EA0 */ 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, -/* 00003EB0 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x5F, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, -/* 00003EC0 */ 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, -/* 00003ED0 */ 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x5F, 0x00, 0x64, 0x00, -/* 00003EE0 */ 0x75, 0x00, 0x6D, 0x00, 0x6D, 0x00, 0x79, 0x00, 0x4E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, -/* 00003EF0 */ 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, -/* 00003F00 */ 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x5F, 0x00, -/* 00003F10 */ 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, -/* 00003F20 */ 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, -/* 00003F30 */ 0x4F, 0x00, 0x66, 0x00, 0x5F, 0x00, 0x64, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x6D, 0x00, 0x79, 0x00, -/* 00003F40 */ 0x4E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, -/* 00003F50 */ 0x43, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x63, 0x00, 0x61, 0x00, -/* 00003F60 */ 0x6C, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, -/* 00003F70 */ 0x5F, 0x00, 0x64, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x6D, 0x00, 0x79, 0x00, 0x4E, 0x00, 0x61, 0x00, -/* 00003F80 */ 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x52, 0x00, 0x65, 0x00, 0x74, 0x00, -/* 00003F90 */ 0x75, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, -/* 00003FA0 */ 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x56, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00003FB0 */ 0x75, 0x00, 0x65, 0x00, 0x73, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x4C, 0x00, 0x6F, 0x00, -/* 00003FC0 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, 0x76, 0x00, -/* 00003FD0 */ 0x65, 0x00, 0x72, 0x00, 0x73, 0x00, 0x65, 0x00, 0x64, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, -/* 00003FE0 */ 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x56, 0x00, 0x61, 0x00, -/* 00003FF0 */ 0x6C, 0x00, 0x75, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x2D, 0x00, 0x63, 0x00, 0x6F, 0x00, -/* 00004000 */ 0x2D, 0x00, 0x00, 0x00, 0x2D, 0x00, 0x75, 0x00, 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x2D, 0x00, -/* 00004010 */ 0x5B, 0x00, 0x5E, 0x00, 0x5C, 0x00, 0x2D, 0x00, 0x5D, 0x00, 0x5B, 0x00, 0x5E, 0x00, 0x5C, 0x00, -/* 00004020 */ 0x2D, 0x00, 0x5D, 0x00, 0x3F, 0x00, 0x2D, 0x00, 0x5B, 0x00, 0x5E, 0x00, 0x5C, 0x00, 0x2D, 0x00, -/* 00004030 */ 0x5D, 0x00, 0x2B, 0x00, 0x29, 0x00, 0x2A, 0x00, 0x2D, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x2D, 0x00, -/* 00004040 */ 0x28, 0x00, 0x5B, 0x00, 0x5E, 0x00, 0x5C, 0x00, 0x2D, 0x00, 0x5D, 0x00, 0x2B, 0x00, 0x29, 0x00, -/* 00004050 */ 0x2E, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x28, 0x00, 0x5B, 0x00, 0x5E, 0x00, 0x5F, 0x00, 0x5D, 0x00, -/* 00004060 */ 0x2A, 0x00, 0x29, 0x00, 0x5F, 0x00, 0x3F, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x2B, 0x00, 0x29, 0x00, -/* 00004070 */ 0x3F, 0x00, 0x00, 0x00, 0x63, 0x00, 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, -/* 00004080 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x43, 0x00, 0x6F, 0x00, -/* 00004090 */ 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x53, 0x00, -/* 000040A0 */ 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, 0x2D, 0x00, 0x75, 0x00, -/* 000040B0 */ 0x2D, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x69, 0x00, -/* 000040C0 */ 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x7A, 0x00, -/* 000040D0 */ 0x65, 0x00, 0x64, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x4F, 0x00, 0x62, 0x00, -/* 000040E0 */ 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x61, 0x00, -/* 000040F0 */ 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00004100 */ 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00, -/* 00004110 */ 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x75, 0x00, 0x73, 0x00, -/* 00004120 */ 0x61, 0x00, 0x67, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x73, 0x00, 0x65, 0x00, -/* 00004130 */ 0x6E, 0x00, 0x73, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x76, 0x00, 0x69, 0x00, 0x74, 0x00, -/* 00004140 */ 0x79, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x69, 0x00, 0x67, 0x00, 0x6E, 0x00, 0x6F, 0x00, -/* 00004150 */ 0x72, 0x00, 0x65, 0x00, 0x50, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x74, 0x00, 0x75, 0x00, -/* 00004160 */ 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, -/* 00004170 */ 0x63, 0x00, 0x61, 0x00, 0x73, 0x00, 0x65, 0x00, 0x46, 0x00, 0x69, 0x00, 0x72, 0x00, 0x73, 0x00, -/* 00004180 */ 0x74, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x65, 0x00, -/* 00004190 */ 0x72, 0x00, 0x69, 0x00, 0x63, 0x00, 0x00, 0x00, 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, -/* 000041A0 */ 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x64, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, -/* 000041B0 */ 0x6E, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, -/* 000041C0 */ 0x6C, 0x00, 0x65, 0x00, 0x4D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, -/* 000041D0 */ 0x72, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x57, 0x00, 0x69, 0x00, 0x6E, 0x00, -/* 000041E0 */ 0x64, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x73, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x45, 0x00, 0x63, 0x00, -/* 000041F0 */ 0x6D, 0x00, 0x61, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, -/* 00004200 */ 0x61, 0x00, 0x72, 0x00, 0x4D, 0x00, 0x61, 0x00, 0x70, 0x00, 0x00, 0x00, 0x47, 0x00, 0x72, 0x00, -/* 00004210 */ 0x65, 0x00, 0x67, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x43, 0x00, -/* 00004220 */ 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, -/* 00004230 */ 0x67, 0x00, 0x72, 0x00, 0x65, 0x00, 0x67, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x79, 0x00, 0x00, 0x00, -/* 00004240 */ 0x48, 0x00, 0x65, 0x00, 0x62, 0x00, 0x72, 0x00, 0x65, 0x00, 0x77, 0x00, 0x43, 0x00, 0x61, 0x00, -/* 00004250 */ 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x68, 0x00, -/* 00004260 */ 0x65, 0x00, 0x62, 0x00, 0x72, 0x00, 0x65, 0x00, 0x77, 0x00, 0x00, 0x00, 0x48, 0x00, 0x69, 0x00, -/* 00004270 */ 0x6A, 0x00, 0x72, 0x00, 0x69, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, -/* 00004280 */ 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x69, 0x00, 0x73, 0x00, 0x6C, 0x00, 0x61, 0x00, -/* 00004290 */ 0x6D, 0x00, 0x69, 0x00, 0x63, 0x00, 0x00, 0x00, 0x4A, 0x00, 0x61, 0x00, 0x70, 0x00, 0x61, 0x00, -/* 000042A0 */ 0x6E, 0x00, 0x65, 0x00, 0x73, 0x00, 0x65, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, -/* 000042B0 */ 0x6E, 0x00, 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6A, 0x00, 0x61, 0x00, 0x70, 0x00, -/* 000042C0 */ 0x61, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, 0x4A, 0x00, 0x75, 0x00, -/* 000042D0 */ 0x6C, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, -/* 000042E0 */ 0x6E, 0x00, 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6A, 0x00, 0x75, 0x00, 0x6C, 0x00, -/* 000042F0 */ 0x69, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x4B, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x65, 0x00, -/* 00004300 */ 0x61, 0x00, 0x6E, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, -/* 00004310 */ 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6B, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, -/* 00004320 */ 0x6E, 0x00, 0x00, 0x00, 0x55, 0x00, 0x6D, 0x00, 0x41, 0x00, 0x6C, 0x00, 0x51, 0x00, 0x75, 0x00, -/* 00004330 */ 0x72, 0x00, 0x61, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, -/* 00004340 */ 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x69, 0x00, 0x73, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x6D, 0x00, -/* 00004350 */ 0x69, 0x00, 0x63, 0x00, 0x2D, 0x00, 0x63, 0x00, 0x69, 0x00, 0x76, 0x00, 0x69, 0x00, 0x6C, 0x00, -/* 00004360 */ 0x00, 0x00, 0x54, 0x00, 0x68, 0x00, 0x61, 0x00, 0x69, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00004370 */ 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x74, 0x00, 0x68, 0x00, -/* 00004380 */ 0x61, 0x00, 0x69, 0x00, 0x00, 0x00, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x77, 0x00, 0x61, 0x00, -/* 00004390 */ 0x6E, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x61, 0x00, -/* 000043A0 */ 0x72, 0x00, 0x00, 0x00, 0x74, 0x00, 0x61, 0x00, 0x69, 0x00, 0x77, 0x00, 0x61, 0x00, 0x6E, 0x00, -/* 000043B0 */ 0x00, 0x00, 0x45, 0x00, 0x63, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, -/* 000043C0 */ 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x57, 0x00, 0x69, 0x00, -/* 000043D0 */ 0x6E, 0x00, 0x64, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x73, 0x00, 0x54, 0x00, 0x65, 0x00, 0x6D, 0x00, -/* 000043E0 */ 0x70, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, 0x57, 0x00, 0x69, 0x00, -/* 000043F0 */ 0x6E, 0x00, 0x64, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x73, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x45, 0x00, -/* 00004400 */ 0x63, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, -/* 00004410 */ 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x72, 0x00, -/* 00004420 */ 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x57, 0x00, 0x65, 0x00, 0x65, 0x00, 0x6B, 0x00, 0x64, 0x00, -/* 00004430 */ 0x61, 0x00, 0x79, 0x00, 0x45, 0x00, 0x72, 0x00, 0x61, 0x00, 0x4D, 0x00, 0x6F, 0x00, 0x6E, 0x00, -/* 00004440 */ 0x74, 0x00, 0x68, 0x00, 0x50, 0x00, 0x61, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, -/* 00004450 */ 0x6E, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x72, 0x00, 0x65, 0x00, 0x63, 0x00, -/* 00004460 */ 0x74, 0x00, 0x44, 0x00, 0x61, 0x00, 0x79, 0x00, 0x48, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x72, 0x00, -/* 00004470 */ 0x4D, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x74, 0x00, 0x65, 0x00, 0x53, 0x00, 0x65, 0x00, -/* 00004480 */ 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x4D, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x74, 0x00, -/* 00004490 */ 0x68, 0x00, 0x50, 0x00, 0x61, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, -/* 000044A0 */ 0x00, 0x00, 0x75, 0x00, 0x70, 0x00, 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x50, 0x00, -/* 000044B0 */ 0x61, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x53, 0x00, 0x74, 0x00, -/* 000044C0 */ 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x73, 0x00, 0x00, 0x00, 0x74, 0x00, 0x65, 0x00, -/* 000044D0 */ 0x6D, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, 0x64, 0x00, -/* 000044E0 */ 0x61, 0x00, 0x79, 0x00, 0x6F, 0x00, 0x66, 0x00, 0x77, 0x00, 0x65, 0x00, 0x65, 0x00, 0x6B, 0x00, -/* 000044F0 */ 0x2E, 0x00, 0x61, 0x00, 0x62, 0x00, 0x62, 0x00, 0x72, 0x00, 0x65, 0x00, 0x76, 0x00, 0x69, 0x00, -/* 00004500 */ 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, 0x79, 0x00, -/* 00004510 */ 0x6F, 0x00, 0x66, 0x00, 0x77, 0x00, 0x65, 0x00, 0x65, 0x00, 0x6B, 0x00, 0x2E, 0x00, 0x66, 0x00, -/* 00004520 */ 0x75, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x79, 0x00, 0x65, 0x00, 0x61, 0x00, 0x72, 0x00, -/* 00004530 */ 0x2E, 0x00, 0x61, 0x00, 0x62, 0x00, 0x62, 0x00, 0x72, 0x00, 0x65, 0x00, 0x76, 0x00, 0x69, 0x00, -/* 00004540 */ 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x00, 0x00, 0x79, 0x00, 0x65, 0x00, 0x61, 0x00, -/* 00004550 */ 0x72, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x6D, 0x00, -/* 00004560 */ 0x6F, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x68, 0x00, 0x2E, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x6D, 0x00, -/* 00004570 */ 0x65, 0x00, 0x72, 0x00, 0x69, 0x00, 0x63, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x6F, 0x00, 0x6E, 0x00, -/* 00004580 */ 0x74, 0x00, 0x68, 0x00, 0x2E, 0x00, 0x61, 0x00, 0x62, 0x00, 0x62, 0x00, 0x72, 0x00, 0x65, 0x00, -/* 00004590 */ 0x76, 0x00, 0x69, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x00, 0x00, 0x6D, 0x00, -/* 000045A0 */ 0x6F, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x68, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x75, 0x00, 0x6C, 0x00, -/* 000045B0 */ 0x6C, 0x00, 0x00, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x7A, 0x00, 0x6F, 0x00, -/* 000045C0 */ 0x6E, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x61, 0x00, 0x62, 0x00, 0x62, 0x00, 0x72, 0x00, 0x65, 0x00, -/* 000045D0 */ 0x76, 0x00, 0x69, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x00, 0x00, 0x74, 0x00, -/* 000045E0 */ 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x7A, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x2E, 0x00, -/* 000045F0 */ 0x66, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x28, 0x00, 0x00, 0x00, -/* 00004600 */ 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x5C, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, -/* 00004610 */ 0x6F, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x2E, 0x00, 0x28, 0x00, 0x5B, 0x00, -/* 00004620 */ 0x61, 0x00, 0x2D, 0x00, 0x7A, 0x00, 0x5D, 0x00, 0x2A, 0x00, 0x29, 0x00, 0x28, 0x00, 0x3F, 0x00, -/* 00004630 */ 0x3A, 0x00, 0x5C, 0x00, 0x28, 0x00, 0x5B, 0x00, 0x30, 0x00, 0x2D, 0x00, 0x39, 0x00, 0x5D, 0x00, -/* 00004640 */ 0x5C, 0x00, 0x29, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x45, 0x00, 0x72, 0x00, -/* 00004650 */ 0x72, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x20, 0x00, 0x77, 0x00, 0x68, 0x00, 0x65, 0x00, 0x6E, 0x00, -/* 00004660 */ 0x20, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x72, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, -/* 00004670 */ 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x20, 0x00, 0x77, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x64, 0x00, -/* 00004680 */ 0x6F, 0x00, 0x77, 0x00, 0x73, 0x00, 0x20, 0x00, 0x72, 0x00, 0x65, 0x00, 0x74, 0x00, 0x75, 0x00, -/* 00004690 */ 0x72, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x64, 0x00, 0x20, 0x00, 0x77, 0x00, 0x65, 0x00, 0x65, 0x00, -/* 000046A0 */ 0x6B, 0x00, 0x64, 0x00, 0x61, 0x00, 0x79, 0x00, 0x2F, 0x00, 0x45, 0x00, 0x72, 0x00, 0x61, 0x00, -/* 000046B0 */ 0x2F, 0x00, 0x4D, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x68, 0x00, 0x20, 0x00, 0x70, 0x00, -/* 000046C0 */ 0x61, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x3B, 0x00, 0x20, 0x00, -/* 000046D0 */ 0x72, 0x00, 0x65, 0x00, 0x67, 0x00, 0x65, 0x00, 0x78, 0x00, 0x20, 0x00, 0x72, 0x00, 0x65, 0x00, -/* 000046E0 */ 0x74, 0x00, 0x75, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x64, 0x00, 0x20, 0x00, 0x6E, 0x00, -/* 000046F0 */ 0x75, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x20, 0x00, 0x0A, 0x00, 0x49, 0x00, 0x6E, 0x00, -/* 00004700 */ 0x70, 0x00, 0x75, 0x00, 0x74, 0x00, 0x20, 0x00, 0x77, 0x00, 0x61, 0x00, 0x73, 0x00, 0x3A, 0x00, -/* 00004710 */ 0x20, 0x00, 0x27, 0x00, 0x00, 0x00, 0x27, 0x00, 0x0A, 0x00, 0x52, 0x00, 0x65, 0x00, 0x67, 0x00, -/* 00004720 */ 0x65, 0x00, 0x78, 0x00, 0x3A, 0x00, 0x20, 0x00, 0x27, 0x00, 0x00, 0x00, 0x28, 0x00, 0x5C, 0x00, -/* 00004730 */ 0x2E, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x29, 0x00, -/* 00004740 */ 0x5C, 0x00, 0x2E, 0x00, 0x28, 0x00, 0x5B, 0x00, 0x61, 0x00, 0x2D, 0x00, 0x7A, 0x00, 0x5D, 0x00, -/* 00004750 */ 0x2A, 0x00, 0x29, 0x00, 0x28, 0x00, 0x5C, 0x00, 0x28, 0x00, 0x5B, 0x00, 0x30, 0x00, 0x2D, 0x00, -/* 00004760 */ 0x39, 0x00, 0x5D, 0x00, 0x5C, 0x00, 0x29, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x7D, 0x00, 0x27, 0x00, -/* 00004770 */ 0x00, 0x00, 0x66, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x00, 0x00, -/* 00004780 */ 0x2E, 0x00, 0x00, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x61, 0x00, 0x62, 0x00, 0x62, 0x00, 0x72, 0x00, -/* 00004790 */ 0x65, 0x00, 0x76, 0x00, 0x69, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x00, 0x00, -/* 000047A0 */ 0x61, 0x00, 0x62, 0x00, 0x62, 0x00, 0x72, 0x00, 0x65, 0x00, 0x76, 0x00, 0x69, 0x00, 0x61, 0x00, -/* 000047B0 */ 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x28, 0x00, 0x31, 0x00, 0x29, 0x00, 0x00, 0x00, 0x29, 0x00, -/* 000047C0 */ 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x5C, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, -/* 000047D0 */ 0x6F, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x5C, 0x00, 0x2E, 0x00, 0x28, 0x00, 0x5B, 0x00, 0x61, 0x00, -/* 000047E0 */ 0x2D, 0x00, 0x7A, 0x00, 0x5D, 0x00, 0x2A, 0x00, 0x29, 0x00, 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, -/* 000047F0 */ 0x5C, 0x00, 0x28, 0x00, 0x5B, 0x00, 0x30, 0x00, 0x2D, 0x00, 0x39, 0x00, 0x5D, 0x00, 0x5C, 0x00, -/* 00004800 */ 0x29, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x45, 0x00, 0x72, 0x00, 0x72, 0x00, -/* 00004810 */ 0x6F, 0x00, 0x72, 0x00, 0x20, 0x00, 0x77, 0x00, 0x68, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x20, 0x00, -/* 00004820 */ 0x63, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x72, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x69, 0x00, -/* 00004830 */ 0x6E, 0x00, 0x67, 0x00, 0x20, 0x00, 0x77, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x6F, 0x00, -/* 00004840 */ 0x77, 0x00, 0x73, 0x00, 0x20, 0x00, 0x72, 0x00, 0x65, 0x00, 0x74, 0x00, 0x75, 0x00, 0x72, 0x00, -/* 00004850 */ 0x6E, 0x00, 0x65, 0x00, 0x64, 0x00, 0x20, 0x00, 0x64, 0x00, 0x61, 0x00, 0x79, 0x00, 0x2F, 0x00, -/* 00004860 */ 0x68, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x72, 0x00, 0x2F, 0x00, 0x6D, 0x00, 0x69, 0x00, 0x6E, 0x00, -/* 00004870 */ 0x75, 0x00, 0x74, 0x00, 0x65, 0x00, 0x2F, 0x00, 0x73, 0x00, 0x65, 0x00, 0x63, 0x00, 0x6F, 0x00, -/* 00004880 */ 0x6E, 0x00, 0x64, 0x00, 0x2F, 0x00, 0x6D, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x68, 0x00, -/* 00004890 */ 0x20, 0x00, 0x70, 0x00, 0x61, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, -/* 000048A0 */ 0x3B, 0x00, 0x20, 0x00, 0x72, 0x00, 0x65, 0x00, 0x67, 0x00, 0x65, 0x00, 0x78, 0x00, 0x20, 0x00, -/* 000048B0 */ 0x72, 0x00, 0x65, 0x00, 0x74, 0x00, 0x75, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x64, 0x00, -/* 000048C0 */ 0x20, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x20, 0x00, 0x0A, 0x00, -/* 000048D0 */ 0x49, 0x00, 0x6E, 0x00, 0x70, 0x00, 0x75, 0x00, 0x74, 0x00, 0x20, 0x00, 0x77, 0x00, 0x61, 0x00, -/* 000048E0 */ 0x73, 0x00, 0x3A, 0x00, 0x20, 0x00, 0x27, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x69, 0x00, 0x6E, 0x00, -/* 000048F0 */ 0x74, 0x00, 0x65, 0x00, 0x67, 0x00, 0x65, 0x00, 0x72, 0x00, 0x28, 0x00, 0x32, 0x00, 0x29, 0x00, -/* 00004900 */ 0x7D, 0x00, 0x00, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x65, 0x00, 0x67, 0x00, 0x65, 0x00, -/* 00004910 */ 0x72, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x65, 0x00, 0x67, 0x00, -/* 00004920 */ 0x65, 0x00, 0x72, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, 0x79, 0x00, 0x6F, 0x00, -/* 00004930 */ 0x66, 0x00, 0x77, 0x00, 0x65, 0x00, 0x65, 0x00, 0x6B, 0x00, 0x00, 0x00, 0x45, 0x00, 0x72, 0x00, -/* 00004940 */ 0x72, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x20, 0x00, 0x77, 0x00, 0x68, 0x00, 0x65, 0x00, 0x6E, 0x00, -/* 00004950 */ 0x20, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x72, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, -/* 00004960 */ 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x20, 0x00, 0x77, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x64, 0x00, -/* 00004970 */ 0x6F, 0x00, 0x77, 0x00, 0x73, 0x00, 0x20, 0x00, 0x72, 0x00, 0x65, 0x00, 0x74, 0x00, 0x75, 0x00, -/* 00004980 */ 0x72, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x64, 0x00, 0x20, 0x00, 0x79, 0x00, 0x65, 0x00, 0x61, 0x00, -/* 00004990 */ 0x72, 0x00, 0x3B, 0x00, 0x20, 0x00, 0x72, 0x00, 0x65, 0x00, 0x67, 0x00, 0x65, 0x00, 0x78, 0x00, -/* 000049A0 */ 0x20, 0x00, 0x72, 0x00, 0x65, 0x00, 0x74, 0x00, 0x75, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x65, 0x00, -/* 000049B0 */ 0x64, 0x00, 0x20, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x7B, 0x00, -/* 000049C0 */ 0x79, 0x00, 0x65, 0x00, 0x61, 0x00, 0x72, 0x00, 0x2E, 0x00, 0x61, 0x00, 0x62, 0x00, 0x62, 0x00, -/* 000049D0 */ 0x72, 0x00, 0x65, 0x00, 0x76, 0x00, 0x69, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, -/* 000049E0 */ 0x28, 0x00, 0x32, 0x00, 0x29, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x79, 0x00, 0x65, 0x00, -/* 000049F0 */ 0x61, 0x00, 0x72, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x7D, 0x00, -/* 00004A00 */ 0x00, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x7A, 0x00, 0x6F, 0x00, 0x6E, 0x00, -/* 00004A10 */ 0x65, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x7B, 0x00, 0x79, 0x00, 0x65, 0x00, 0x61, 0x00, 0x72, 0x00, -/* 00004A20 */ 0x5C, 0x00, 0x2E, 0x00, 0x5B, 0x00, 0x61, 0x00, 0x2D, 0x00, 0x7A, 0x00, 0x5D, 0x00, 0x2A, 0x00, -/* 00004A30 */ 0x28, 0x00, 0x5C, 0x00, 0x28, 0x00, 0x5B, 0x00, 0x30, 0x00, 0x2D, 0x00, 0x39, 0x00, 0x5D, 0x00, -/* 00004A40 */ 0x5C, 0x00, 0x29, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x5C, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x31, 0x00, -/* 00004A50 */ 0x32, 0x00, 0x48, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x72, 0x00, 0x43, 0x00, 0x6C, 0x00, 0x6F, 0x00, -/* 00004A60 */ 0x63, 0x00, 0x6B, 0x00, 0x00, 0x00, 0x32, 0x00, 0x34, 0x00, 0x48, 0x00, 0x6F, 0x00, 0x75, 0x00, -/* 00004A70 */ 0x72, 0x00, 0x43, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x6B, 0x00, 0x00, 0x00, 0x6E, 0x00, -/* 00004A80 */ 0x6F, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x00, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, -/* 00004A90 */ 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, -/* 00004AA0 */ 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, -/* 00004AB0 */ 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, -/* 00004AC0 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6D, 0x00, 0x70, 0x00, -/* 00004AD0 */ 0x00, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, -/* 00004AE0 */ 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, -/* 00004AF0 */ 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, -/* 00004B00 */ 0x65, 0x00, 0x2E, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, -/* 00004B10 */ 0x65, 0x00, 0x64, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, -/* 00004B20 */ 0x73, 0x00, 0x00, 0x00, 0xFE, 0x07, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x6A, 0x00, 0x00, 0x00, 0x9B, -/* 00004B30 */ 0x00, 0x00, 0x00, 0x05, 0x01, 0x00, 0x00, 0x6F, 0x01, 0x00, 0x00, 0x70, 0x01, 0x00, 0x00, 0x7E, -/* 00004B40 */ 0x01, 0x00, 0x00, 0x8F, 0x01, 0x00, 0x00, 0xB7, 0x01, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x00, 0xE1, -/* 00004B50 */ 0x01, 0x00, 0x00, 0x5B, 0x02, 0x00, 0x00, 0x7A, 0x02, 0x00, 0x00, 0x7B, 0x02, 0x00, 0x00, 0xAE, -/* 00004B60 */ 0x02, 0x00, 0x00, 0xED, 0x02, 0x00, 0x00, 0x12, 0x03, 0x00, 0x00, 0x44, 0x03, 0x00, 0x00, 0x79, -/* 00004B70 */ 0x03, 0x00, 0x00, 0x7A, 0x03, 0x00, 0x00, 0x8B, 0x03, 0x00, 0x00, 0xAE, 0x03, 0x00, 0x00, 0xAF, -/* 00004B80 */ 0x03, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0xF5, 0x03, 0x00, 0x00, 0x2E, 0x04, 0x00, 0x00, 0x6F, -/* 00004B90 */ 0x04, 0x00, 0x00, 0x70, 0x04, 0x00, 0x00, 0xB1, 0x04, 0x00, 0x00, 0xE9, 0x04, 0x00, 0x00, 0xEA, -/* 00004BA0 */ 0x04, 0x00, 0x00, 0x64, 0x05, 0x00, 0x00, 0xC5, 0x05, 0x00, 0x00, 0x54, 0x06, 0x00, 0x00, 0xBF, -/* 00004BB0 */ 0x06, 0x00, 0x00, 0xE0, 0x06, 0x00, 0x00, 0xF6, 0x06, 0x00, 0x00, 0x08, 0x07, 0x00, 0x00, 0x28, -/* 00004BC0 */ 0x07, 0x00, 0x00, 0x29, 0x07, 0x00, 0x00, 0x40, 0x07, 0x00, 0x00, 0x8A, 0x07, 0x00, 0x00, 0x99, -/* 00004BD0 */ 0x07, 0x00, 0x00, 0x9A, 0x07, 0x00, 0x00, 0xB8, 0x07, 0x00, 0x00, 0xE3, 0x07, 0x00, 0x00, 0xFF, -/* 00004BE0 */ 0x07, 0x00, 0x00, 0x11, 0x08, 0x00, 0x00, 0x12, 0x08, 0x00, 0x00, 0x6F, 0x08, 0x00, 0x00, 0x9D, -/* 00004BF0 */ 0x08, 0x00, 0x00, 0xAF, 0x08, 0x00, 0x00, 0xB0, 0x08, 0x00, 0x00, 0xDA, 0x08, 0x00, 0x00, 0xE8, -/* 00004C00 */ 0x08, 0x00, 0x00, 0xF4, 0x08, 0x00, 0x00, 0xFA, 0x08, 0x00, 0x00, 0xFB, 0x08, 0x00, 0x00, 0x1F, -/* 00004C10 */ 0x09, 0x00, 0x00, 0x41, 0x09, 0x00, 0x00, 0x63, 0x09, 0x00, 0x00, 0x85, 0x09, 0x00, 0x00, 0xA7, -/* 00004C20 */ 0x09, 0x00, 0x00, 0xC5, 0x09, 0x00, 0x00, 0xE5, 0x09, 0x00, 0x00, 0xE6, 0x09, 0x00, 0x00, 0x12, -/* 00004C30 */ 0x0A, 0x00, 0x00, 0x13, 0x0A, 0x00, 0x00, 0x31, 0x0A, 0x00, 0x00, 0x57, 0x0A, 0x00, 0x00, 0x81, -/* 00004C40 */ 0x0A, 0x00, 0x00, 0xA7, 0x0A, 0x00, 0x00, 0xCC, 0x0A, 0x00, 0x00, 0xDA, 0x0A, 0x00, 0x00, 0xDB, -/* 00004C50 */ 0x0A, 0x00, 0x00, 0x2F, 0x0B, 0x00, 0x00, 0x7F, 0x0B, 0x00, 0x00, 0xDD, 0x0B, 0x00, 0x00, 0x39, -/* 00004C60 */ 0x0C, 0x00, 0x00, 0xAF, 0x0C, 0x00, 0x00, 0xDF, 0x0C, 0x00, 0x00, 0x34, 0x0D, 0x00, 0x00, 0x76, -/* 00004C70 */ 0x0D, 0x00, 0x00, 0xC0, 0x0D, 0x00, 0x00, 0xC7, 0x0D, 0x00, 0x00, 0xC8, 0x0D, 0x00, 0x00, 0x14, -/* 00004C80 */ 0x0E, 0x00, 0x00, 0x60, 0x0E, 0x00, 0x00, 0xA6, 0x0E, 0x00, 0x00, 0xEC, 0x0E, 0x00, 0x00, 0xED, -/* 00004C90 */ 0x0E, 0x00, 0x00, 0x39, 0x0F, 0x00, 0x00, 0x83, 0x0F, 0x00, 0x00, 0xBD, 0x0F, 0x00, 0x00, 0xBE, -/* 00004CA0 */ 0x0F, 0x00, 0x00, 0x0C, 0x10, 0x00, 0x00, 0x62, 0x10, 0x00, 0x00, 0xB8, 0x10, 0x00, 0x00, 0xB9, -/* 00004CB0 */ 0x10, 0x00, 0x00, 0xEE, 0x10, 0x00, 0x00, 0xEF, 0x10, 0x00, 0x00, 0x2D, 0x11, 0x00, 0x00, 0x65, -/* 00004CC0 */ 0x11, 0x00, 0x00, 0x66, 0x11, 0x00, 0x00, 0xD1, 0x11, 0x00, 0x00, 0x02, 0x12, 0x00, 0x00, 0x12, -/* 00004CD0 */ 0x12, 0x00, 0x00, 0x31, 0x12, 0x00, 0x00, 0x54, 0x12, 0x00, 0x00, 0x77, 0x12, 0x00, 0x00, 0x98, -/* 00004CE0 */ 0x12, 0x00, 0x00, 0xB8, 0x12, 0x00, 0x00, 0xC7, 0x12, 0x00, 0x00, 0xD5, 0x12, 0x00, 0x00, 0xD6, -/* 00004CF0 */ 0x12, 0x00, 0x00, 0xE6, 0x12, 0x00, 0x00, 0x3D, 0x13, 0x00, 0x00, 0x94, 0x13, 0x00, 0x00, 0x0F, -/* 00004D00 */ 0x14, 0x00, 0x00, 0x83, 0x14, 0x00, 0x00, 0x05, 0x15, 0x00, 0x00, 0x85, 0x15, 0x00, 0x00, 0xCD, -/* 00004D10 */ 0x15, 0x00, 0x00, 0x3F, 0x16, 0x00, 0x00, 0x40, 0x16, 0x00, 0x00, 0x9E, 0x16, 0x00, 0x00, 0xFA, -/* 00004D20 */ 0x16, 0x00, 0x00, 0x50, 0x17, 0x00, 0x00, 0xBB, 0x17, 0x00, 0x00, 0x28, 0x18, 0x00, 0x00, 0xA7, -/* 00004D30 */ 0x18, 0x00, 0x00, 0x24, 0x19, 0x00, 0x00, 0x9B, 0x19, 0x00, 0x00, 0x0E, 0x1A, 0x00, 0x00, 0x6B, -/* 00004D40 */ 0x1A, 0x00, 0x00, 0x6C, 0x1A, 0x00, 0x00, 0xA5, 0x1A, 0x00, 0x00, 0x21, 0x1B, 0x00, 0x00, 0xAE, -/* 00004D50 */ 0x1B, 0x00, 0x00, 0xD6, 0x1B, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x50, 0x1C, 0x00, 0x00, 0x5B, -/* 00004D60 */ 0x1C, 0x00, 0x00, 0xA4, 0x1C, 0x00, 0x00, 0xFC, 0x1C, 0x00, 0x00, 0x62, 0x1D, 0x00, 0x00, 0x63, -/* 00004D70 */ 0x1D, 0x00, 0x00, 0x89, 0x1D, 0x00, 0x00, 0xE9, 0x1D, 0x00, 0x00, 0x31, 0x1E, 0x00, 0x00, 0x57, -/* 00004D80 */ 0x1E, 0x00, 0x00, 0x7D, 0x1E, 0x00, 0x00, 0x7E, 0x1E, 0x00, 0x00, 0xBB, 0x1E, 0x00, 0x00, 0xF2, -/* 00004D90 */ 0x1E, 0x00, 0x00, 0xF3, 0x1E, 0x00, 0x00, 0x59, 0x1F, 0x00, 0x00, 0x5A, 0x1F, 0x00, 0x00, 0xCA, -/* 00004DA0 */ 0x1F, 0x00, 0x00, 0x48, 0x20, 0x00, 0x00, 0x4F, 0x20, 0x00, 0x00, 0x50, 0x20, 0x00, 0x00, 0x64, -/* 00004DB0 */ 0x20, 0x00, 0x00, 0xFB, 0x20, 0x00, 0x00, 0x6C, 0x21, 0x00, 0x00, 0x73, 0x21, 0x00, 0x00, 0x74, -/* 00004DC0 */ 0x21, 0x00, 0x00, 0xBF, 0x21, 0x00, 0x00, 0xE6, 0x21, 0x00, 0x00, 0xF7, 0x21, 0x00, 0x00, 0x0A, -/* 00004DD0 */ 0x22, 0x00, 0x00, 0x1B, 0x22, 0x00, 0x00, 0x2F, 0x22, 0x00, 0x00, 0x42, 0x22, 0x00, 0x00, 0x4A, -/* 00004DE0 */ 0x22, 0x00, 0x00, 0x6F, 0x22, 0x00, 0x00, 0x81, 0x22, 0x00, 0x00, 0x93, 0x22, 0x00, 0x00, 0xA5, -/* 00004DF0 */ 0x22, 0x00, 0x00, 0xB8, 0x22, 0x00, 0x00, 0xC0, 0x22, 0x00, 0x00, 0xE5, 0x22, 0x00, 0x00, 0x15, -/* 00004E00 */ 0x23, 0x00, 0x00, 0x7C, 0x23, 0x00, 0x00, 0xC4, 0x23, 0x00, 0x00, 0x13, 0x24, 0x00, 0x00, 0x1B, -/* 00004E10 */ 0x24, 0x00, 0x00, 0x4A, 0x24, 0x00, 0x00, 0x79, 0x24, 0x00, 0x00, 0x04, 0x25, 0x00, 0x00, 0x71, -/* 00004E20 */ 0x25, 0x00, 0x00, 0xE4, 0x25, 0x00, 0x00, 0xEC, 0x25, 0x00, 0x00, 0xED, 0x25, 0x00, 0x00, 0x1D, -/* 00004E30 */ 0x26, 0x00, 0x00, 0x4C, 0x26, 0x00, 0x00, 0x73, 0x26, 0x00, 0x00, 0x84, 0x26, 0x00, 0x00, 0xA8, -/* 00004E40 */ 0x26, 0x00, 0x00, 0xB2, 0x26, 0x00, 0x00, 0xB8, 0x26, 0x00, 0x00, 0xB9, 0x26, 0x00, 0x00, 0x13, -/* 00004E50 */ 0x27, 0x00, 0x00, 0x80, 0x27, 0x00, 0x00, 0xEC, 0x27, 0x00, 0x00, 0x54, 0x28, 0x00, 0x00, 0xC3, -/* 00004E60 */ 0x28, 0x00, 0x00, 0x23, 0x29, 0x00, 0x00, 0x41, 0x29, 0x00, 0x00, 0x42, 0x29, 0x00, 0x00, 0x67, -/* 00004E70 */ 0x29, 0x00, 0x00, 0x92, 0x29, 0x00, 0x00, 0xC7, 0x29, 0x00, 0x00, 0xEB, 0x29, 0x00, 0x00, 0xF5, -/* 00004E80 */ 0x29, 0x00, 0x00, 0xF6, 0x29, 0x00, 0x00, 0x2A, 0x2A, 0x00, 0x00, 0x41, 0x2A, 0x00, 0x00, 0x90, -/* 00004E90 */ 0x2A, 0x00, 0x00, 0xC2, 0x2A, 0x00, 0x00, 0xE6, 0x2A, 0x00, 0x00, 0xF7, 0x2A, 0x00, 0x00, 0x1D, -/* 00004EA0 */ 0x2B, 0x00, 0x00, 0x27, 0x2B, 0x00, 0x00, 0x28, 0x2B, 0x00, 0x00, 0x48, 0x2B, 0x00, 0x00, 0x4F, -/* 00004EB0 */ 0x2B, 0x00, 0x00, 0x50, 0x2B, 0x00, 0x00, 0xB5, 0x2B, 0x00, 0x00, 0xE1, 0x2B, 0x00, 0x00, 0x27, -/* 00004EC0 */ 0x2C, 0x00, 0x00, 0x3D, 0x2C, 0x00, 0x00, 0x47, 0x2C, 0x00, 0x00, 0x4E, 0x2C, 0x00, 0x00, 0x4F, -/* 00004ED0 */ 0x2C, 0x00, 0x00, 0x80, 0x2C, 0x00, 0x00, 0xB7, 0x2C, 0x00, 0x00, 0xBE, 0x2C, 0x00, 0x00, 0xBF, -/* 00004EE0 */ 0x2C, 0x00, 0x00, 0xC7, 0x2C, 0x00, 0x00, 0x0A, 0x2D, 0x00, 0x00, 0x11, 0x2D, 0x00, 0x00, 0x3B, -/* 00004EF0 */ 0x2D, 0x00, 0x00, 0x42, 0x2D, 0x00, 0x00, 0xB3, 0x2D, 0x00, 0x00, 0x10, 0x2E, 0x00, 0x00, 0x60, -/* 00004F00 */ 0x2E, 0x00, 0x00, 0x68, 0x2E, 0x00, 0x00, 0xAF, 0x2E, 0x00, 0x00, 0xD3, 0x2E, 0x00, 0x00, 0xF1, -/* 00004F10 */ 0x2E, 0x00, 0x00, 0xFB, 0x2E, 0x00, 0x00, 0xFC, 0x2E, 0x00, 0x00, 0x1C, 0x2F, 0x00, 0x00, 0x38, -/* 00004F20 */ 0x2F, 0x00, 0x00, 0x4F, 0x2F, 0x00, 0x00, 0x7F, 0x2F, 0x00, 0x00, 0xA1, 0x2F, 0x00, 0x00, 0xAF, -/* 00004F30 */ 0x2F, 0x00, 0x00, 0xB0, 0x2F, 0x00, 0x00, 0xCA, 0x2F, 0x00, 0x00, 0x08, 0x30, 0x00, 0x00, 0x37, -/* 00004F40 */ 0x30, 0x00, 0x00, 0x54, 0x30, 0x00, 0x00, 0x6F, 0x30, 0x00, 0x00, 0x81, 0x30, 0x00, 0x00, 0x8F, -/* 00004F50 */ 0x30, 0x00, 0x00, 0x90, 0x30, 0x00, 0x00, 0xAE, 0x30, 0x00, 0x00, 0xD0, 0x30, 0x00, 0x00, 0x14, -/* 00004F60 */ 0x31, 0x00, 0x00, 0x62, 0x31, 0x00, 0x00, 0xA5, 0x31, 0x00, 0x00, 0xF4, 0x31, 0x00, 0x00, 0x24, -/* 00004F70 */ 0x32, 0x00, 0x00, 0x6D, 0x32, 0x00, 0x00, 0x87, 0x32, 0x00, 0x00, 0x95, 0x32, 0x00, 0x00, 0x96, -/* 00004F80 */ 0x32, 0x00, 0x00, 0xCE, 0x32, 0x00, 0x00, 0xD8, 0x32, 0x00, 0x00, 0xDF, 0x32, 0x00, 0x00, 0xE0, -/* 00004F90 */ 0x32, 0x00, 0x00, 0xE8, 0x32, 0x00, 0x00, 0x4C, 0x33, 0x00, 0x00, 0xB3, 0x33, 0x00, 0x00, 0x0A, -/* 00004FA0 */ 0x34, 0x00, 0x00, 0x11, 0x34, 0x00, 0x00, 0x74, 0x34, 0x00, 0x00, 0x7B, 0x34, 0x00, 0x00, 0xC3, -/* 00004FB0 */ 0x34, 0x00, 0x00, 0x12, 0x35, 0x00, 0x00, 0x2D, 0x35, 0x00, 0x00, 0x35, 0x35, 0x00, 0x00, 0x6B, -/* 00004FC0 */ 0x35, 0x00, 0x00, 0xDE, 0x35, 0x00, 0x00, 0xFF, 0x35, 0x00, 0x00, 0x12, 0x36, 0x00, 0x00, 0x25, -/* 00004FD0 */ 0x36, 0x00, 0x00, 0x38, 0x36, 0x00, 0x00, 0x4B, 0x36, 0x00, 0x00, 0x5E, 0x36, 0x00, 0x00, 0x71, -/* 00004FE0 */ 0x36, 0x00, 0x00, 0x7C, 0x36, 0x00, 0x00, 0x7D, 0x36, 0x00, 0x00, 0xD0, 0x36, 0x00, 0x00, 0xD1, -/* 00004FF0 */ 0x36, 0x00, 0x00, 0xEF, 0x36, 0x00, 0x00, 0xF6, 0x36, 0x00, 0x00, 0xF7, 0x36, 0x00, 0x00, 0xFF, -/* 00005000 */ 0x36, 0x00, 0x00, 0x4B, 0x37, 0x00, 0x00, 0x52, 0x37, 0x00, 0x00, 0x76, 0x37, 0x00, 0x00, 0x7D, -/* 00005010 */ 0x37, 0x00, 0x00, 0xEE, 0x37, 0x00, 0x00, 0x36, 0x38, 0x00, 0x00, 0x3E, 0x38, 0x00, 0x00, 0x89, -/* 00005020 */ 0x38, 0x00, 0x00, 0xAC, 0x38, 0x00, 0x00, 0xE8, 0x38, 0x00, 0x00, 0x2D, 0x39, 0x00, 0x00, 0x57, -/* 00005030 */ 0x39, 0x00, 0x00, 0x71, 0x39, 0x00, 0x00, 0x7F, 0x39, 0x00, 0x00, 0x80, 0x39, 0x00, 0x00, 0xE0, -/* 00005040 */ 0x39, 0x00, 0x00, 0x11, 0x3A, 0x00, 0x00, 0x42, 0x3A, 0x00, 0x00, 0x84, 0x3A, 0x00, 0x00, 0xCB, -/* 00005050 */ 0x3A, 0x00, 0x00, 0xDD, 0x3A, 0x00, 0x00, 0xDE, 0x3A, 0x00, 0x00, 0xFD, 0x3A, 0x00, 0x00, 0x0B, -/* 00005060 */ 0x3B, 0x00, 0x00, 0x15, 0x3B, 0x00, 0x00, 0x16, 0x3B, 0x00, 0x00, 0x42, 0x3B, 0x00, 0x00, 0x59, -/* 00005070 */ 0x3B, 0x00, 0x00, 0x60, 0x3B, 0x00, 0x00, 0x61, 0x3B, 0x00, 0x00, 0x8B, 0x3B, 0x00, 0x00, 0x8C, -/* 00005080 */ 0x3B, 0x00, 0x00, 0x94, 0x3B, 0x00, 0x00, 0xDB, 0x3B, 0x00, 0x00, 0xE2, 0x3B, 0x00, 0x00, 0x0E, -/* 00005090 */ 0x3C, 0x00, 0x00, 0x15, 0x3C, 0x00, 0x00, 0x72, 0x3C, 0x00, 0x00, 0xD0, 0x3C, 0x00, 0x00, 0xD8, -/* 000050A0 */ 0x3C, 0x00, 0x00, 0x16, 0x3D, 0x00, 0x00, 0x3E, 0x3D, 0x00, 0x00, 0x65, 0x3D, 0x00, 0x00, 0x66, -/* 000050B0 */ 0x3D, 0x00, 0x00, 0x8F, 0x3D, 0x00, 0x00, 0xC9, 0x3D, 0x00, 0x00, 0xE3, 0x3D, 0x00, 0x00, 0x06, -/* 000050C0 */ 0x3E, 0x00, 0x00, 0x23, 0x3E, 0x00, 0x00, 0x3E, 0x3E, 0x00, 0x00, 0x5C, 0x3E, 0x00, 0x00, 0x78, -/* 000050D0 */ 0x3E, 0x00, 0x00, 0xB6, 0x3E, 0x00, 0x00, 0xEF, 0x3E, 0x00, 0x00, 0x10, 0x3F, 0x00, 0x00, 0x31, -/* 000050E0 */ 0x3F, 0x00, 0x00, 0x58, 0x3F, 0x00, 0x00, 0x78, 0x3F, 0x00, 0x00, 0x99, 0x3F, 0x00, 0x00, 0xB2, -/* 000050F0 */ 0x3F, 0x00, 0x00, 0xCF, 0x3F, 0x00, 0x00, 0xEE, 0x3F, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x0E, -/* 00005100 */ 0x40, 0x00, 0x00, 0x0F, 0x40, 0x00, 0x00, 0x46, 0x40, 0x00, 0x00, 0x50, 0x40, 0x00, 0x00, 0x51, -/* 00005110 */ 0x40, 0x00, 0x00, 0x88, 0x40, 0x00, 0x00, 0xBD, 0x40, 0x00, 0x00, 0xEB, 0x40, 0x00, 0x00, 0x02, -/* 00005120 */ 0x41, 0x00, 0x00, 0x13, 0x41, 0x00, 0x00, 0x31, 0x41, 0x00, 0x00, 0x3B, 0x41, 0x00, 0x00, 0x42, -/* 00005130 */ 0x41, 0x00, 0x00, 0x43, 0x41, 0x00, 0x00, 0x4B, 0x41, 0x00, 0x00, 0xA9, 0x41, 0x00, 0x00, 0xFE, -/* 00005140 */ 0x41, 0x00, 0x00, 0x05, 0x42, 0x00, 0x00, 0x29, 0x42, 0x00, 0x00, 0x30, 0x42, 0x00, 0x00, 0xA1, -/* 00005150 */ 0x42, 0x00, 0x00, 0x1B, 0x43, 0x00, 0x00, 0x96, 0x43, 0x00, 0x00, 0xC9, 0x43, 0x00, 0x00, 0x45, -/* 00005160 */ 0x44, 0x00, 0x00, 0x4D, 0x44, 0x00, 0x00, 0xB8, 0x44, 0x00, 0x00, 0xE7, 0x44, 0x00, 0x00, 0xF6, -/* 00005170 */ 0x44, 0x00, 0x00, 0x1A, 0x45, 0x00, 0x00, 0x5E, 0x45, 0x00, 0x00, 0x6F, 0x45, 0x00, 0x00, 0xB4, -/* 00005180 */ 0x45, 0x00, 0x00, 0xBE, 0x45, 0x00, 0x00, 0xBF, 0x45, 0x00, 0x00, 0xE3, 0x45, 0x00, 0x00, 0x1D, -/* 00005190 */ 0x46, 0x00, 0x00, 0x44, 0x46, 0x00, 0x00, 0x7E, 0x46, 0x00, 0x00, 0xC4, 0x46, 0x00, 0x00, 0xEE, -/* 000051A0 */ 0x46, 0x00, 0x00, 0x1F, 0x47, 0x00, 0x00, 0x3E, 0x47, 0x00, 0x00, 0x8E, 0x47, 0x00, 0x00, 0xC2, -/* 000051B0 */ 0x47, 0x00, 0x00, 0xF3, 0x47, 0x00, 0x00, 0x47, 0x48, 0x00, 0x00, 0x7B, 0x48, 0x00, 0x00, 0xC8, -/* 000051C0 */ 0x48, 0x00, 0x00, 0xE2, 0x48, 0x00, 0x00, 0x31, 0x49, 0x00, 0x00, 0x59, 0x49, 0x00, 0x00, 0x6F, -/* 000051D0 */ 0x49, 0x00, 0x00, 0x81, 0x49, 0x00, 0x00, 0x8F, 0x49, 0x00, 0x00, 0x90, 0x49, 0x00, 0x00, 0xC2, -/* 000051E0 */ 0x49, 0x00, 0x00, 0xF5, 0x49, 0x00, 0x00, 0x3F, 0x4A, 0x00, 0x00, 0x71, 0x4A, 0x00, 0x00, 0x9F, -/* 000051F0 */ 0x4A, 0x00, 0x00, 0xD8, 0x4A, 0x00, 0x00, 0xEE, 0x4A, 0x00, 0x00, 0x00, 0x4B, 0x00, 0x00, 0x0E, -/* 00005200 */ 0x4B, 0x00, 0x00, 0x0F, 0x4B, 0x00, 0x00, 0x30, 0x4B, 0x00, 0x00, 0x6E, 0x4B, 0x00, 0x00, 0x7A, -/* 00005210 */ 0x4B, 0x00, 0x00, 0x7B, 0x4B, 0x00, 0x00, 0xA8, 0x4B, 0x00, 0x00, 0xEE, 0x4B, 0x00, 0x00, 0x15, -/* 00005220 */ 0x4C, 0x00, 0x00, 0x48, 0x4C, 0x00, 0x00, 0x5D, 0x4C, 0x00, 0x00, 0xAD, 0x4C, 0x00, 0x00, 0xFB, -/* 00005230 */ 0x4C, 0x00, 0x00, 0x4C, 0x4D, 0x00, 0x00, 0x5A, 0x4D, 0x00, 0x00, 0x5B, 0x4D, 0x00, 0x00, 0xA1, -/* 00005240 */ 0x4D, 0x00, 0x00, 0xAB, 0x4D, 0x00, 0x00, 0xAC, 0x4D, 0x00, 0x00, 0xD1, 0x4D, 0x00, 0x00, 0xE8, -/* 00005250 */ 0x4D, 0x00, 0x00, 0xEF, 0x4D, 0x00, 0x00, 0xF0, 0x4D, 0x00, 0x00, 0x0A, 0x4E, 0x00, 0x00, 0x20, -/* 00005260 */ 0x4E, 0x00, 0x00, 0x3E, 0x4E, 0x00, 0x00, 0x6A, 0x4E, 0x00, 0x00, 0x78, 0x4E, 0x00, 0x00, 0xB4, -/* 00005270 */ 0x4E, 0x00, 0x00, 0xBF, 0x4E, 0x00, 0x00, 0xC0, 0x4E, 0x00, 0x00, 0xD6, 0x4E, 0x00, 0x00, 0x12, -/* 00005280 */ 0x4F, 0x00, 0x00, 0x1D, 0x4F, 0x00, 0x00, 0x1E, 0x4F, 0x00, 0x00, 0x34, 0x4F, 0x00, 0x00, 0x6A, -/* 00005290 */ 0x4F, 0x00, 0x00, 0x75, 0x4F, 0x00, 0x00, 0x76, 0x4F, 0x00, 0x00, 0x94, 0x4F, 0x00, 0x00, 0xD1, -/* 000052A0 */ 0x4F, 0x00, 0x00, 0xDC, 0x4F, 0x00, 0x00, 0xDD, 0x4F, 0x00, 0x00, 0xF3, 0x4F, 0x00, 0x00, 0x14, -/* 000052B0 */ 0x50, 0x00, 0x00, 0x2D, 0x50, 0x00, 0x00, 0x5D, 0x50, 0x00, 0x00, 0x8E, 0x50, 0x00, 0x00, 0x9C, -/* 000052C0 */ 0x50, 0x00, 0x00, 0xB4, 0x50, 0x00, 0x00, 0xBE, 0x50, 0x00, 0x00, 0xC6, 0x50, 0x00, 0x00, 0xC7, -/* 000052D0 */ 0x50, 0x00, 0x00, 0xEE, 0x50, 0x00, 0x00, 0x32, 0x51, 0x00, 0x00, 0x59, 0x51, 0x00, 0x00, 0x5A, -/* 000052E0 */ 0x51, 0x00, 0x00, 0x7D, 0x51, 0x00, 0x00, 0xA2, 0x51, 0x00, 0x00, 0xDC, 0x51, 0x00, 0x00, 0xEA, -/* 000052F0 */ 0x51, 0x00, 0x00, 0xEB, 0x51, 0x00, 0x00, 0x0F, 0x52, 0x00, 0x00, 0x41, 0x52, 0x00, 0x00, 0x4F, -/* 00005300 */ 0x52, 0x00, 0x00, 0x50, 0x52, 0x00, 0x00, 0x74, 0x52, 0x00, 0x00, 0xA6, 0x52, 0x00, 0x00, 0xB4, -/* 00005310 */ 0x52, 0x00, 0x00, 0xB5, 0x52, 0x00, 0x00, 0x04, 0x53, 0x00, 0x00, 0x7D, 0x53, 0x00, 0x00, 0x8B, -/* 00005320 */ 0x53, 0x00, 0x00, 0x8C, 0x53, 0x00, 0x00, 0xA6, 0x53, 0x00, 0x00, 0xB0, 0x53, 0x00, 0x00, 0xB1, -/* 00005330 */ 0x53, 0x00, 0x00, 0xCA, 0x53, 0x00, 0x00, 0xD0, 0x53, 0x00, 0x00, 0xD1, 0x53, 0x00, 0x00, 0xD9, -/* 00005340 */ 0x53, 0x00, 0x00, 0x34, 0x54, 0x00, 0x00, 0x85, 0x54, 0x00, 0x00, 0xB8, 0x54, 0x00, 0x00, 0xBF, -/* 00005350 */ 0x54, 0x00, 0x00, 0x18, 0x55, 0x00, 0x00, 0x66, 0x55, 0x00, 0x00, 0x6D, 0x55, 0x00, 0x00, 0x96, -/* 00005360 */ 0x55, 0x00, 0x00, 0x9D, 0x55, 0x00, 0x00, 0xD9, 0x55, 0x00, 0x00, 0x2C, 0x56, 0x00, 0x00, 0x79, -/* 00005370 */ 0x56, 0x00, 0x00, 0xC6, 0x56, 0x00, 0x00, 0x20, 0x57, 0x00, 0x00, 0x39, 0x57, 0x00, 0x00, 0x41, -/* 00005380 */ 0x57, 0x00, 0x00, 0x98, 0x57, 0x00, 0x00, 0xBF, 0x57, 0x00, 0x00, 0xE2, 0x57, 0x00, 0x00, 0x10, -/* 00005390 */ 0x58, 0x00, 0x00, 0x58, 0x58, 0x00, 0x00, 0xC5, 0x58, 0x00, 0x00, 0xD3, 0x58, 0x00, 0x00, 0xF6, -/* 000053A0 */ 0x58, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x01, 0x59, 0x00, 0x00, 0x1A, 0x59, 0x00, 0x00, 0x21, -/* 000053B0 */ 0x59, 0x00, 0x00, 0x22, 0x59, 0x00, 0x00, 0x3C, 0x59, 0x00, 0x00, 0x66, 0x59, 0x00, 0x00, 0x90, -/* 000053C0 */ 0x59, 0x00, 0x00, 0x96, 0x59, 0x00, 0x00, 0x97, 0x59, 0x00, 0x00, 0x9F, 0x59, 0x00, 0x00, 0x0A, -/* 000053D0 */ 0x5A, 0x00, 0x00, 0x3A, 0x5A, 0x00, 0x00, 0x41, 0x5A, 0x00, 0x00, 0x7A, 0x5A, 0x00, 0x00, 0x82, -/* 000053E0 */ 0x5A, 0x00, 0x00, 0xAA, 0x5A, 0x00, 0x00, 0xEF, 0x5A, 0x00, 0x00, 0x53, 0x5B, 0x00, 0x00, 0xD3, -/* 000053F0 */ 0x5B, 0x00, 0x00, 0xD4, 0x5B, 0x00, 0x00, 0x46, 0x5C, 0x00, 0x00, 0x77, 0x5C, 0x00, 0x00, 0xC6, -/* 00005400 */ 0x5C, 0x00, 0x00, 0x18, 0x5D, 0x00, 0x00, 0x6C, 0x5D, 0x00, 0x00, 0xA4, 0x5D, 0x00, 0x00, 0xF6, -/* 00005410 */ 0x5D, 0x00, 0x00, 0x48, 0x5E, 0x00, 0x00, 0x9D, 0x5E, 0x00, 0x00, 0x09, 0x5F, 0x00, 0x00, 0x5F, -/* 00005420 */ 0x5F, 0x00, 0x00, 0x60, 0x5F, 0x00, 0x00, 0x7F, 0x5F, 0x00, 0x00, 0x9E, 0x5F, 0x00, 0x00, 0xD0, -/* 00005430 */ 0x5F, 0x00, 0x00, 0xD1, 0x5F, 0x00, 0x00, 0x48, 0x60, 0x00, 0x00, 0xB5, 0x60, 0x00, 0x00, 0x08, -/* 00005440 */ 0x61, 0x00, 0x00, 0x4B, 0x61, 0x00, 0x00, 0x4C, 0x61, 0x00, 0x00, 0xC9, 0x61, 0x00, 0x00, 0x5D, -/* 00005450 */ 0x62, 0x00, 0x00, 0xE0, 0x62, 0x00, 0x00, 0x63, 0x63, 0x00, 0x00, 0xD6, 0x63, 0x00, 0x00, 0xD7, -/* 00005460 */ 0x63, 0x00, 0x00, 0x41, 0x64, 0x00, 0x00, 0xBA, 0x64, 0x00, 0x00, 0xBB, 0x64, 0x00, 0x00, 0x1E, -/* 00005470 */ 0x65, 0x00, 0x00, 0xAD, 0x65, 0x00, 0x00, 0x56, 0x66, 0x00, 0x00, 0xEA, 0x66, 0x00, 0x00, 0x81, -/* 00005480 */ 0x67, 0x00, 0x00, 0x25, 0x68, 0x00, 0x00, 0x39, 0x68, 0x00, 0x00, 0x3A, 0x68, 0x00, 0x00, 0x6A, -/* 00005490 */ 0x68, 0x00, 0x00, 0xD6, 0x68, 0x00, 0x00, 0x46, 0x69, 0x00, 0x00, 0xB6, 0x69, 0x00, 0x00, 0x28, -/* 000054A0 */ 0x6A, 0x00, 0x00, 0x9C, 0x6A, 0x00, 0x00, 0x10, 0x6B, 0x00, 0x00, 0x5A, 0x6B, 0x00, 0x00, 0x5B, -/* 000054B0 */ 0x6B, 0x00, 0x00, 0xC8, 0x6B, 0x00, 0x00, 0xC9, 0x6B, 0x00, 0x00, 0x15, 0x6C, 0x00, 0x00, 0x89, -/* 000054C0 */ 0x6C, 0x00, 0x00, 0x1B, 0x6D, 0x00, 0x00, 0xAD, 0x6D, 0x00, 0x00, 0xAE, 0x6D, 0x00, 0x00, 0xE2, -/* 000054D0 */ 0x6D, 0x00, 0x00, 0x06, 0x6E, 0x00, 0x00, 0x42, 0x6E, 0x00, 0x00, 0x5C, 0x6E, 0x00, 0x00, 0x7B, -/* 000054E0 */ 0x6E, 0x00, 0x00, 0x89, 0x6E, 0x00, 0x00, 0x8A, 0x6E, 0x00, 0x00, 0xC3, 0x6E, 0x00, 0x00, 0xDD, -/* 000054F0 */ 0x6E, 0x00, 0x00, 0xFA, 0x6E, 0x00, 0x00, 0x08, 0x6F, 0x00, 0x00, 0x09, 0x6F, 0x00, 0x00, 0x2D, -/* 00005500 */ 0x6F, 0x00, 0x00, 0x52, 0x6F, 0x00, 0x00, 0x73, 0x6F, 0x00, 0x00, 0x8F, 0x6F, 0x00, 0x00, 0xB6, -/* 00005510 */ 0x6F, 0x00, 0x00, 0xE2, 0x6F, 0x00, 0x00, 0xF0, 0x6F, 0x00, 0x00, 0xF1, 0x6F, 0x00, 0x00, 0x0D, -/* 00005520 */ 0x70, 0x00, 0x00, 0x34, 0x70, 0x00, 0x00, 0x60, 0x70, 0x00, 0x00, 0x6E, 0x70, 0x00, 0x00, 0x6F, -/* 00005530 */ 0x70, 0x00, 0x00, 0x8B, 0x70, 0x00, 0x00, 0xB4, 0x70, 0x00, 0x00, 0xC2, 0x70, 0x00, 0x00, 0xC3, -/* 00005540 */ 0x70, 0x00, 0x00, 0xDF, 0x70, 0x00, 0x00, 0x0A, 0x71, 0x00, 0x00, 0x0B, 0x71, 0x00, 0x00, 0x55, -/* 00005550 */ 0x71, 0x00, 0x00, 0x94, 0x71, 0x00, 0x00, 0xD6, 0x71, 0x00, 0x00, 0x0B, 0x72, 0x00, 0x00, 0x2D, -/* 00005560 */ 0x72, 0x00, 0x00, 0x43, 0x72, 0x00, 0x00, 0x44, 0x72, 0x00, 0x00, 0x5F, 0x72, 0x00, 0x00, 0xC5, -/* 00005570 */ 0x72, 0x00, 0x00, 0x34, 0x73, 0x00, 0x00, 0x78, 0x73, 0x00, 0x00, 0xCE, 0x73, 0x00, 0x00, 0xE4, -/* 00005580 */ 0x73, 0x00, 0x00, 0xE5, 0x73, 0x00, 0x00, 0x0A, 0x74, 0x00, 0x00, 0x7C, 0x74, 0x00, 0x00, 0xDD, -/* 00005590 */ 0x74, 0x00, 0x00, 0x38, 0x75, 0x00, 0x00, 0x4E, 0x75, 0x00, 0x00, 0x4F, 0x75, 0x00, 0x00, 0xAD, -/* 000055A0 */ 0x75, 0x00, 0x00, 0xC8, 0x75, 0x00, 0x00, 0xDA, 0x75, 0x00, 0x00, 0xE8, 0x75, 0x00, 0x00, 0xE9, -/* 000055B0 */ 0x75, 0x00, 0x00, 0x1B, 0x76, 0x00, 0x00, 0x1C, 0x76, 0x00, 0x00, 0x34, 0x76, 0x00, 0x00, 0x3F, -/* 000055C0 */ 0x76, 0x00, 0x00, 0x49, 0x76, 0x00, 0x00, 0x4A, 0x76, 0x00, 0x00, 0x81, 0x76, 0x00, 0x00, 0xA9, -/* 000055D0 */ 0x76, 0x00, 0x00, 0xAA, 0x76, 0x00, 0x00, 0xCB, 0x76, 0x00, 0x00, 0xF3, 0x76, 0x00, 0x00, 0xFD, -/* 000055E0 */ 0x76, 0x00, 0x00, 0xFE, 0x76, 0x00, 0x00, 0x4A, 0x77, 0x00, 0x00, 0x50, 0x77, 0x00, 0x00, 0x51, -/* 000055F0 */ 0x77, 0x00, 0x00, 0x59, 0x77, 0x00, 0x00, 0xB4, 0x77, 0x00, 0x00, 0xE3, 0x77, 0x00, 0x00, 0xEA, -/* 00005600 */ 0x77, 0x00, 0x00, 0x3D, 0x78, 0x00, 0x00, 0x9A, 0x78, 0x00, 0x00, 0xF5, 0x78, 0x00, 0x00, 0x1F, -/* 00005610 */ 0x79, 0x00, 0x00, 0x26, 0x79, 0x00, 0x00, 0x5A, 0x79, 0x00, 0x00, 0x61, 0x79, 0x00, 0x00, 0x93, -/* 00005620 */ 0x79, 0x00, 0x00, 0xAD, 0x79, 0x00, 0x00, 0xB5, 0x79, 0x00, 0x00, 0xF4, 0x79, 0x00, 0x00, 0x21, -/* 00005630 */ 0x7A, 0x00, 0x00, 0x40, 0x7A, 0x00, 0x00, 0x5A, 0x7A, 0x00, 0x00, 0x64, 0x7A, 0x00, 0x00, 0x65, -/* 00005640 */ 0x7A, 0x00, 0x00, 0x89, 0x7A, 0x00, 0x00, 0xA8, 0x7A, 0x00, 0x00, 0xE4, 0x7A, 0x00, 0x00, 0x1B, -/* 00005650 */ 0x7B, 0x00, 0x00, 0x1C, 0x7B, 0x00, 0x00, 0x59, 0x7B, 0x00, 0x00, 0x77, 0x7B, 0x00, 0x00, 0x85, -/* 00005660 */ 0x7B, 0x00, 0x00, 0x8F, 0x7B, 0x00, 0x00, 0x90, 0x7B, 0x00, 0x00, 0xB1, 0x7B, 0x00, 0x00, 0xF5, -/* 00005670 */ 0x7B, 0x00, 0x00, 0x7D, 0x7C, 0x00, 0x00, 0xB8, 0x7C, 0x00, 0x00, 0xB9, 0x7C, 0x00, 0x00, 0xFB, -/* 00005680 */ 0x7C, 0x00, 0x00, 0x05, 0x7D, 0x00, 0x00, 0x06, 0x7D, 0x00, 0x00, 0x1B, 0x7D, 0x00, 0x00, 0x22, -/* 00005690 */ 0x7D, 0x00, 0x00, 0x23, 0x7D, 0x00, 0x00, 0x2B, 0x7D, 0x00, 0x00, 0x84, 0x7D, 0x00, 0x00, 0xD1, -/* 000056A0 */ 0x7D, 0x00, 0x00, 0xD8, 0x7D, 0x00, 0x00, 0x04, 0x7E, 0x00, 0x00, 0x0B, 0x7E, 0x00, 0x00, 0x61, -/* 000056B0 */ 0x7E, 0x00, 0x00, 0x69, 0x7E, 0x00, 0x00, 0xA1, 0x7E, 0x00, 0x00, 0xCF, 0x7E, 0x00, 0x00, 0xE6, -/* 000056C0 */ 0x7E, 0x00, 0x00, 0xF0, 0x7E, 0x00, 0x00, 0xF1, 0x7E, 0x00, 0x00, 0x0A, 0x7F, 0x00, 0x00, 0x62, -/* 000056D0 */ 0x7F, 0x00, 0x00, 0x93, 0x7F, 0x00, 0x00, 0xA6, 0x7F, 0x00, 0x00, 0xA7, 0x7F, 0x00, 0x00, 0xC1, -/* 000056E0 */ 0x7F, 0x00, 0x00, 0xEE, 0x7F, 0x00, 0x00, 0x09, 0x80, 0x00, 0x00, 0x2F, 0x80, 0x00, 0x00, 0x94, -/* 000056F0 */ 0x80, 0x00, 0x00, 0xD4, 0x80, 0x00, 0x00, 0xE6, 0x80, 0x00, 0x00, 0xE7, 0x80, 0x00, 0x00, 0x1E, -/* 00005700 */ 0x81, 0x00, 0x00, 0x5A, 0x81, 0x00, 0x00, 0x96, 0x81, 0x00, 0x00, 0xA8, 0x81, 0x00, 0x00, 0xA9, -/* 00005710 */ 0x81, 0x00, 0x00, 0xF6, 0x81, 0x00, 0x00, 0x2C, 0x82, 0x00, 0x00, 0x88, 0x82, 0x00, 0x00, 0xC4, -/* 00005720 */ 0x82, 0x00, 0x00, 0x10, 0x83, 0x00, 0x00, 0x44, 0x83, 0x00, 0x00, 0x56, 0x83, 0x00, 0x00, 0x64, -/* 00005730 */ 0x83, 0x00, 0x00, 0x65, 0x83, 0x00, 0x00, 0x79, 0x83, 0x00, 0x00, 0x83, 0x83, 0x00, 0x00, 0x84, -/* 00005740 */ 0x83, 0x00, 0x00, 0x99, 0x83, 0x00, 0x00, 0xA0, 0x83, 0x00, 0x00, 0xA1, 0x83, 0x00, 0x00, 0xA9, -/* 00005750 */ 0x83, 0x00, 0x00, 0x14, 0x84, 0x00, 0x00, 0x1B, 0x84, 0x00, 0x00, 0x47, 0x84, 0x00, 0x00, 0x4E, -/* 00005760 */ 0x84, 0x00, 0x00, 0xBF, 0x84, 0x00, 0x00, 0xF0, 0x84, 0x00, 0x00, 0xF8, 0x84, 0x00, 0x00, 0x4C, -/* 00005770 */ 0x85, 0x00, 0x00, 0x67, 0x85, 0x00, 0x00, 0x9F, 0x85, 0x00, 0x00, 0xE1, 0x85, 0x00, 0x00, 0x3D, -/* 00005780 */ 0x86, 0x00, 0x00, 0x65, 0x86, 0x00, 0x00, 0x73, 0x86, 0x00, 0x00, 0x7F, 0x86, 0x00, 0x00, 0x80, -/* 00005790 */ 0x86, 0x00, 0x00, 0x97, 0x86, 0x00, 0x00, 0x9E, 0x86, 0x00, 0x00, 0x9F, 0x86, 0x00, 0x00, 0xDB, -/* 000057A0 */ 0x86, 0x00, 0x00, 0xDC, 0x86, 0x00, 0x00, 0xE4, 0x86, 0x00, 0x00, 0x33, 0x87, 0x00, 0x00, 0x3A, -/* 000057B0 */ 0x87, 0x00, 0x00, 0x93, 0x87, 0x00, 0x00, 0xBF, 0x87, 0x00, 0x00, 0xC6, 0x87, 0x00, 0x00, 0xEE, -/* 000057C0 */ 0x87, 0x00, 0x00, 0xF5, 0x87, 0x00, 0x00, 0x79, 0x88, 0x00, 0x00, 0xE7, 0x88, 0x00, 0x00, 0x2C, -/* 000057D0 */ 0x89, 0x00, 0x00, 0x71, 0x89, 0x00, 0x00, 0x79, 0x89, 0x00, 0x00, 0xD9, 0x89, 0x00, 0x00, 0x2A, -/* 000057E0 */ 0x8A, 0x00, 0x00, 0x86, 0x8A, 0x00, 0x00, 0xC2, 0x8A, 0x00, 0x00, 0x27, 0x8B, 0x00, 0x00, 0x54, -/* 000057F0 */ 0x8B, 0x00, 0x00, 0x82, 0x8B, 0x00, 0x00, 0xB0, 0x8B, 0x00, 0x00, 0xB1, 0x8B, 0x00, 0x00, 0xE6, -/* 00005800 */ 0x8B, 0x00, 0x00, 0x1B, 0x8C, 0x00, 0x00, 0x53, 0x8C, 0x00, 0x00, 0xA5, 0x8C, 0x00, 0x00, 0x01, -/* 00005810 */ 0x8D, 0x00, 0x00, 0x6F, 0x8D, 0x00, 0x00, 0xE1, 0x8D, 0x00, 0x00, 0x16, 0x8E, 0x00, 0x00, 0x4B, -/* 00005820 */ 0x8E, 0x00, 0x00, 0x55, 0x8E, 0x00, 0x00, 0x5C, 0x8E, 0x00, 0x00, 0x5D, 0x8E, 0x00, 0x00, 0x65, -/* 00005830 */ 0x8E, 0x00, 0x00, 0xBC, 0x8E, 0x00, 0x00, 0xF0, 0x8E, 0x00, 0x00, 0xF7, 0x8E, 0x00, 0x00, 0x1D, -/* 00005840 */ 0x8F, 0x00, 0x00, 0x24, 0x8F, 0x00, 0x00, 0x95, 0x8F, 0x00, 0x00, 0xC6, 0x8F, 0x00, 0x00, 0xE5, -/* 00005850 */ 0x8F, 0x00, 0x00, 0xED, 0x8F, 0x00, 0x00, 0x44, 0x90, 0x00, 0x00, 0x72, 0x90, 0x00, 0x00, 0x8B, -/* 00005860 */ 0x90, 0x00, 0x00, 0xFF, 0x90, 0x00, 0x00, 0x37, 0x91, 0x00, 0x00, 0x82, 0x91, 0x00, 0x00, 0xCD, -/* 00005870 */ 0x91, 0x00, 0x00, 0xCE, 0x91, 0x00, 0x00, 0x0A, 0x92, 0x00, 0x00, 0x7A, 0x92, 0x00, 0x00, 0x84, -/* 00005880 */ 0x92, 0x00, 0x00, 0x85, 0x92, 0x00, 0x00, 0xD2, 0x92, 0x00, 0x00, 0x2B, 0x93, 0x00, 0x00, 0x62, -/* 00005890 */ 0x93, 0x00, 0x00, 0x7F, 0x93, 0x00, 0x00, 0xA0, 0x93, 0x00, 0x00, 0xBF, 0x93, 0x00, 0x00, 0xCB, -/* 000058A0 */ 0x93, 0x00, 0x00, 0xCC, 0x93, 0x00, 0x00, 0xED, 0x93, 0x00, 0x00, 0xF4, 0x93, 0x00, 0x00, 0xF5, -/* 000058B0 */ 0x93, 0x00, 0x00, 0x6C, 0x94, 0x00, 0x00, 0xD5, 0x94, 0x00, 0x00, 0x05, 0x95, 0x00, 0x00, 0x52, -/* 000058C0 */ 0x95, 0x00, 0x00, 0xCF, 0x95, 0x00, 0x00, 0x02, 0x96, 0x00, 0x00, 0x3B, 0x96, 0x00, 0x00, 0x45, -/* 000058D0 */ 0x96, 0x00, 0x00, 0x46, 0x96, 0x00, 0x00, 0x80, 0x96, 0x00, 0x00, 0xBB, 0x96, 0x00, 0x00, 0xF4, -/* 000058E0 */ 0x96, 0x00, 0x00, 0xFE, 0x96, 0x00, 0x00, 0xFF, 0x96, 0x00, 0x00, 0x66, 0x97, 0x00, 0x00, 0x6C, -/* 000058F0 */ 0x97, 0x00, 0x00, 0x6D, 0x97, 0x00, 0x00, 0xC6, 0x97, 0x00, 0x00, 0xF9, 0x97, 0x00, 0x00, 0x32, -/* 00005900 */ 0x98, 0x00, 0x00, 0x3C, 0x98, 0x00, 0x00, 0x3D, 0x98, 0x00, 0x00, 0x77, 0x98, 0x00, 0x00, 0xB2, -/* 00005910 */ 0x98, 0x00, 0x00, 0xEB, 0x98, 0x00, 0x00, 0xF5, 0x98, 0x00, 0x00, 0xF6, 0x98, 0x00, 0x00, 0x26, -/* 00005920 */ 0x99, 0x00, 0x00, 0x2C, 0x99, 0x00, 0x00, 0x2D, 0x99, 0x00, 0x00, 0x9E, 0x99, 0x00, 0x00, 0xD5, -/* 00005930 */ 0x99, 0x00, 0x00, 0x2B, 0x9A, 0x00, 0x00, 0xAE, 0x9A, 0x00, 0x00, 0x21, 0x9B, 0x00, 0x00, 0x7A, -/* 00005940 */ 0x9B, 0x00, 0x00, 0xD4, 0x9B, 0x00, 0x00, 0x33, 0x9C, 0x00, 0x00, 0xA9, 0x9C, 0x00, 0x00, 0xC8, -/* 00005950 */ 0x9C, 0x00, 0x00, 0x0D, 0x9D, 0x00, 0x00, 0x77, 0x9D, 0x00, 0x00, 0xD8, 0x9D, 0x00, 0x00, 0xE4, -/* 00005960 */ 0x9D, 0x00, 0x00, 0x43, 0x9E, 0x00, 0x00, 0x7B, 0x9E, 0x00, 0x00, 0xA5, 0x9E, 0x00, 0x00, 0xC2, -/* 00005970 */ 0x9E, 0x00, 0x00, 0xE1, 0x9E, 0x00, 0x00, 0x01, 0x9F, 0x00, 0x00, 0x0D, 0x9F, 0x00, 0x00, 0x45, -/* 00005980 */ 0x9F, 0x00, 0x00, 0x6D, 0x9F, 0x00, 0x00, 0x89, 0x9F, 0x00, 0x00, 0xA8, 0x9F, 0x00, 0x00, 0xC7, -/* 00005990 */ 0x9F, 0x00, 0x00, 0xD3, 0x9F, 0x00, 0x00, 0xD9, 0x9F, 0x00, 0x00, 0xDA, 0x9F, 0x00, 0x00, 0xE2, -/* 000059A0 */ 0x9F, 0x00, 0x00, 0x59, 0xA0, 0x00, 0x00, 0x60, 0xA0, 0x00, 0x00, 0xD9, 0xA0, 0x00, 0x00, 0x55, -/* 000059B0 */ 0xA1, 0x00, 0x00, 0xCD, 0xA1, 0x00, 0x00, 0x2E, 0xA2, 0x00, 0x00, 0x36, 0xA2, 0x00, 0x00, 0x86, -/* 000059C0 */ 0xA2, 0x00, 0x00, 0xAB, 0xA2, 0x00, 0x00, 0xD6, 0xA2, 0x00, 0x00, 0x18, 0xA3, 0x00, 0x00, 0x8B, -/* 000059D0 */ 0xA3, 0x00, 0x00, 0xA3, 0xA3, 0x00, 0x00, 0xB1, 0xA3, 0x00, 0x00, 0xB2, 0xA3, 0x00, 0x00, 0xEF, -/* 000059E0 */ 0xA3, 0x00, 0x00, 0x24, 0xA4, 0x00, 0x00, 0x32, 0xA4, 0x00, 0x00, 0x3E, 0xA4, 0x00, 0x00, 0x3F, -/* 000059F0 */ 0xA4, 0x00, 0x00, 0x85, 0xA4, 0x00, 0x00, 0x8C, 0xA4, 0x00, 0x00, 0x8D, 0xA4, 0x00, 0x00, 0xC2, -/* 00005A00 */ 0xA4, 0x00, 0x00, 0xE6, 0xA4, 0x00, 0x00, 0x22, 0xA5, 0x00, 0x00, 0x36, 0xA5, 0x00, 0x00, 0x40, -/* 00005A10 */ 0xA5, 0x00, 0x00, 0x41, 0xA5, 0x00, 0x00, 0x8C, 0xA5, 0x00, 0x00, 0xD2, 0xA5, 0x00, 0x00, 0x29, -/* 00005A20 */ 0xA6, 0x00, 0x00, 0x2A, 0xA6, 0x00, 0x00, 0x8A, 0xA6, 0x00, 0x00, 0xDC, 0xA6, 0x00, 0x00, 0x3B, -/* 00005A30 */ 0xA7, 0x00, 0x00, 0x3C, 0xA7, 0x00, 0x00, 0x60, 0xA7, 0x00, 0x00, 0xCD, 0xA7, 0x00, 0x00, 0x22, -/* 00005A40 */ 0xA8, 0x00, 0x00, 0x66, 0xA8, 0x00, 0x00, 0xCE, 0xA8, 0x00, 0x00, 0xCF, 0xA8, 0x00, 0x00, 0x43, -/* 00005A50 */ 0xA9, 0x00, 0x00, 0x6B, 0xA9, 0x00, 0x00, 0xAE, 0xA9, 0x00, 0x00, 0xDE, 0xA9, 0x00, 0x00, 0x05, -/* 00005A60 */ 0xAA, 0x00, 0x00, 0x59, 0xAA, 0x00, 0x00, 0x5A, 0xAA, 0x00, 0x00, 0xDC, 0xAA, 0x00, 0x00, 0x36, -/* 00005A70 */ 0xAB, 0x00, 0x00, 0x37, 0xAB, 0x00, 0x00, 0xA6, 0xAB, 0x00, 0x00, 0xA7, 0xAB, 0x00, 0x00, 0xD8, -/* 00005A80 */ 0xAB, 0x00, 0x00, 0xD9, 0xAB, 0x00, 0x00, 0xF6, 0xAB, 0x00, 0x00, 0x01, 0xAC, 0x00, 0x00, 0x02, -/* 00005A90 */ 0xAC, 0x00, 0x00, 0x27, 0xAC, 0x00, 0x00, 0x75, 0xAC, 0x00, 0x00, 0x0E, 0xAD, 0x00, 0x00, 0x45, -/* 00005AA0 */ 0xAD, 0x00, 0x00, 0x9B, 0xAD, 0x00, 0x00, 0xA9, 0xAD, 0x00, 0x00, 0xAA, 0xAD, 0x00, 0x00, 0xD4, -/* 00005AB0 */ 0xAD, 0x00, 0x00, 0xFE, 0xAD, 0x00, 0x00, 0xFF, 0xAD, 0x00, 0x00, 0x77, 0xAE, 0x00, 0x00, 0xD2, -/* 00005AC0 */ 0xAE, 0x00, 0x00, 0xEF, 0xAE, 0x00, 0x00, 0x31, 0xAF, 0x00, 0x00, 0x6E, 0xAF, 0x00, 0x00, 0xA8, -/* 00005AD0 */ 0xAF, 0x00, 0x00, 0xFF, 0xAF, 0x00, 0x00, 0x11, 0xB0, 0x00, 0x00, 0x12, 0xB0, 0x00, 0x00, 0x49, -/* 00005AE0 */ 0xB0, 0x00, 0x00, 0x5E, 0xB0, 0x00, 0x00, 0x88, 0xB0, 0x00, 0x00, 0xCB, 0xB0, 0x00, 0x00, 0xD9, -/* 00005AF0 */ 0xB0, 0x00, 0x00, 0xDA, 0xB0, 0x00, 0x00, 0x50, 0xB1, 0x00, 0x00, 0x88, 0xB1, 0x00, 0x00, 0x89, -/* 00005B00 */ 0xB1, 0x00, 0x00, 0xEB, 0xB1, 0x00, 0x00, 0x10, 0xB2, 0x00, 0x00, 0x24, 0xB2, 0x00, 0x00, 0x2E, -/* 00005B10 */ 0xB2, 0x00, 0x00, 0x2F, 0xB2, 0x00, 0x00, 0x87, 0xB2, 0x00, 0x00, 0xED, 0xB2, 0x00, 0x00, 0x21, -/* 00005B20 */ 0xB3, 0x00, 0x00, 0x9B, 0xB3, 0x00, 0x00, 0xD2, 0xB3, 0x00, 0x00, 0x09, 0xB4, 0x00, 0x00, 0x17, -/* 00005B30 */ 0xB4, 0x00, 0x00, 0x18, 0xB4, 0x00, 0x00, 0x47, 0xB4, 0x00, 0x00, 0x6F, 0xB4, 0x00, 0x00, 0xB0, -/* 00005B40 */ 0xB4, 0x00, 0x00, 0xBE, 0xB4, 0x00, 0x00, 0xBF, 0xB4, 0x00, 0x00, 0xF2, 0xB4, 0x00, 0x00, 0x30, -/* 00005B50 */ 0xB5, 0x00, 0x00, 0x31, 0xB5, 0x00, 0x00, 0x5F, 0xB5, 0x00, 0x00, 0x8A, 0xB5, 0x00, 0x00, 0xC7, -/* 00005B60 */ 0xB5, 0x00, 0x00, 0xD5, 0xB5, 0x00, 0x00, 0xD6, 0xB5, 0x00, 0x00, 0x16, 0xB6, 0x00, 0x00, 0x17, -/* 00005B70 */ 0xB6, 0x00, 0x00, 0x3C, 0xB6, 0x00, 0x00, 0x7A, 0xB6, 0x00, 0x00, 0xAD, 0xB6, 0x00, 0x00, 0xC5, -/* 00005B80 */ 0xB6, 0x00, 0x00, 0xD1, 0xB6, 0x00, 0x00, 0xD2, 0xB6, 0x00, 0x00, 0x38, 0xB7, 0x00, 0x00, 0x64, -/* 00005B90 */ 0xB7, 0x00, 0x00, 0xBE, 0xB7, 0x00, 0x00, 0xCC, 0xB7, 0x00, 0x00, 0xCD, 0xB7, 0x00, 0x00, 0x0E, -/* 00005BA0 */ 0xB8, 0x00, 0x00, 0x61, 0xB8, 0x00, 0x00, 0xBB, 0xB8, 0x00, 0x00, 0xC9, 0xB8, 0x00, 0x00, 0xCA, -/* 00005BB0 */ 0xB8, 0x00, 0x00, 0x46, 0xB9, 0x00, 0x00, 0x52, 0xB9, 0x00, 0x00, 0x53, 0xB9, 0x00, 0x00, 0x87, -/* 00005BC0 */ 0xB9, 0x00, 0x00, 0xDC, 0xB9, 0x00, 0x00, 0x6B, 0xBA, 0x00, 0x00, 0x00, 0xBB, 0x00, 0x00, 0x0C, -/* 00005BD0 */ 0xBB, 0x00, 0x00, 0x7B, 0xBB, 0x00, 0x00, 0xBB, 0xBB, 0x00, 0x00, 0xE4, 0xBB, 0x00, 0x00, 0x01, -/* 00005BE0 */ 0xBC, 0x00, 0x00, 0x20, 0xBC, 0x00, 0x00, 0x40, 0xBC, 0x00, 0x00, 0x4C, 0xBC, 0x00, 0x00, 0x87, -/* 00005BF0 */ 0xBC, 0x00, 0x00, 0xB7, 0xBC, 0x00, 0x00, 0xD3, 0xBC, 0x00, 0x00, 0xF2, 0xBC, 0x00, 0x00, 0x12, -/* 00005C00 */ 0xBD, 0x00, 0x00, 0x1E, 0xBD, 0x00, 0x00, 0x1F, 0xBD, 0x00, 0x00, 0x51, 0xBD, 0x00, 0x00, 0x74, -/* 00005C10 */ 0xBD, 0x00, 0x00, 0x91, 0xBD, 0x00, 0x00, 0xB0, 0xBD, 0x00, 0x00, 0xD0, 0xBD, 0x00, 0x00, 0xDC, -/* 00005C20 */ 0xBD, 0x00, 0x00, 0x18, 0xBE, 0x00, 0x00, 0x19, 0xBE, 0x00, 0x00, 0x57, 0xBE, 0x00, 0x00, 0x74, -/* 00005C30 */ 0xBE, 0x00, 0x00, 0x90, 0xBE, 0x00, 0x00, 0xAF, 0xBE, 0x00, 0x00, 0xCE, 0xBE, 0x00, 0x00, 0xDA, -/* 00005C40 */ 0xBE, 0x00, 0x00, 0x1C, 0xBF, 0x00, 0x00, 0x4C, 0xBF, 0x00, 0x00, 0x7C, 0xBF, 0x00, 0x00, 0xE2, -/* 00005C50 */ 0xBF, 0x00, 0x00, 0xF4, 0xBF, 0x00, 0x00, 0x39, 0xC0, 0x00, 0x00, 0x90, 0xC0, 0x00, 0x00, 0xF6, -/* 00005C60 */ 0xC0, 0x00, 0x00, 0x08, 0xC1, 0x00, 0x00, 0x09, 0xC1, 0x00, 0x00, 0x2B, 0xC1, 0x00, 0x00, 0x49, -/* 00005C70 */ 0xC1, 0x00, 0x00, 0x66, 0xC1, 0x00, 0x00, 0x89, 0xC1, 0x00, 0x00, 0xB2, 0xC1, 0x00, 0x00, 0xD3, -/* 00005C80 */ 0xC1, 0x00, 0x00, 0xF2, 0xC1, 0x00, 0x00, 0x13, 0xC2, 0x00, 0x00, 0x26, 0xC2, 0x00, 0x00, 0x27, -/* 00005C90 */ 0xC2, 0x00, 0x00, 0x6C, 0xC2, 0x00, 0x00, 0x7B, 0xC2, 0x00, 0x00, 0x97, 0xC2, 0x00, 0x00, 0xB6, -/* 00005CA0 */ 0xC2, 0x00, 0x00, 0xD5, 0xC2, 0x00, 0x00, 0xE1, 0xC2, 0x00, 0x00, 0xE2, 0xC2, 0x00, 0x00, 0x5B, -/* 00005CB0 */ 0xC3, 0x00, 0x00, 0x84, 0xC3, 0x00, 0x00, 0xB0, 0xC3, 0x00, 0x00, 0x0A, 0xC4, 0x00, 0x00, 0x18, -/* 00005CC0 */ 0xC4, 0x00, 0x00, 0x19, 0xC4, 0x00, 0x00, 0x5A, 0xC4, 0x00, 0x00, 0xAD, 0xC4, 0x00, 0x00, 0x07, -/* 00005CD0 */ 0xC5, 0x00, 0x00, 0x15, 0xC5, 0x00, 0x00, 0x16, 0xC5, 0x00, 0x00, 0x44, 0xC5, 0x00, 0x00, 0x4F, -/* 00005CE0 */ 0xC5, 0x00, 0x00, 0x7E, 0xC5, 0x00, 0x00, 0xA0, 0xC5, 0x00, 0x00, 0xBD, 0xC5, 0x00, 0x00, 0xDC, -/* 00005CF0 */ 0xC5, 0x00, 0x00, 0xFC, 0xC5, 0x00, 0x00, 0x08, 0xC6, 0x00, 0x00, 0x42, 0xC6, 0x00, 0x00, 0x81, -/* 00005D00 */ 0xC6, 0x00, 0x00, 0xA0, 0xC6, 0x00, 0x00, 0xBF, 0xC6, 0x00, 0x00, 0xCB, 0xC6, 0x00, 0x00, 0xCC, -/* 00005D10 */ 0xC6, 0x00, 0x00, 0xE5, 0xC6, 0x00, 0x00, 0xEF, 0xC6, 0x00, 0x00, 0xF0, 0xC6, 0x00, 0x00, 0x2A, -/* 00005D20 */ 0xC7, 0x00, 0x00, 0x50, 0xC7, 0x00, 0x00, 0x8C, 0xC7, 0x00, 0x00, 0xA0, 0xC7, 0x00, 0x00, 0xAA, -/* 00005D30 */ 0xC7, 0x00, 0x00, 0xAB, 0xC7, 0x00, 0x00, 0xF4, 0xC7, 0x00, 0x00, 0x3A, 0xC8, 0x00, 0x00, 0x91, -/* 00005D40 */ 0xC8, 0x00, 0x00, 0x92, 0xC8, 0x00, 0x00, 0xB6, 0xC8, 0x00, 0x00, 0x29, 0xC9, 0x00, 0x00, 0x2A, -/* 00005D50 */ 0xC9, 0x00, 0x00, 0x8C, 0xC9, 0x00, 0x00, 0xAE, 0xC9, 0x00, 0x00, 0xD5, 0xC9, 0x00, 0x00, 0xD6, -/* 00005D60 */ 0xC9, 0x00, 0x00, 0x46, 0xCA, 0x00, 0x00, 0x64, 0xCA, 0x00, 0x00, 0xB5, 0xCA, 0x00, 0x00, 0xEB, -/* 00005D70 */ 0xCA, 0x00, 0x00, 0xEC, 0xCA, 0x00, 0x00, 0x47, 0xCB, 0x00, 0x00, 0x98, 0xCB, 0x00, 0x00, 0xD5, -/* 00005D80 */ 0xCB, 0x00, 0x00, 0x15, 0xCC, 0x00, 0x00, 0x4A, 0xCC, 0x00, 0x00, 0x58, 0xCC, 0x00, 0x00, 0x59, -/* 00005D90 */ 0xCC, 0x00, 0x00, 0x76, 0xCC, 0x00, 0x00, 0x95, 0xCC, 0x00, 0x00, 0xC9, 0xCC, 0x00, 0x00, 0xF1, -/* 00005DA0 */ 0xCC, 0x00, 0x00, 0x2E, 0xCD, 0x00, 0x00, 0x3C, 0xCD, 0x00, 0x00, 0x3D, 0xCD, 0x00, 0x00, 0xB6, -/* 00005DB0 */ 0xCD, 0x00, 0x00, 0xD5, 0xCD, 0x00, 0x00, 0x0A, 0xCE, 0x00, 0x00, 0x79, 0xCE, 0x00, 0x00, 0x87, -/* 00005DC0 */ 0xCE, 0x00, 0x00, 0x88, 0xCE, 0x00, 0x00, 0xB2, 0xCE, 0x00, 0x00, 0xD1, 0xCE, 0x00, 0x00, 0xF8, -/* 00005DD0 */ 0xCE, 0x00, 0x00, 0x1F, 0xCF, 0x00, 0x00, 0x34, 0xCF, 0x00, 0x00, 0x55, 0xCF, 0x00, 0x00, 0x80, -/* 00005DE0 */ 0xCF, 0x00, 0x00, 0xA5, 0xCF, 0x00, 0x00, 0xBE, 0xCF, 0x00, 0x00, 0xE3, 0xCF, 0x00, 0x00, 0xF5, -/* 00005DF0 */ 0xCF, 0x00, 0x00, 0x03, 0xD0, 0x00, 0x00, 0x04, 0xD0, 0x00, 0x00, 0x54, 0xD0, 0x00, 0x00, 0x55, -/* 00005E00 */ 0xD0, 0x00, 0x00, 0xB1, 0xD0, 0x00, 0x00, 0xB2, 0xD0, 0x00, 0x00, 0xE1, 0xD0, 0x00, 0x00, 0xE2, -/* 00005E10 */ 0xD0, 0x00, 0x00, 0x2E, 0xD1, 0x00, 0x00, 0x5A, 0xD1, 0x00, 0x00, 0x5B, 0xD1, 0x00, 0x00, 0x72, -/* 00005E20 */ 0xD1, 0x00, 0x00, 0x7D, 0xD1, 0x00, 0x00, 0x7E, 0xD1, 0x00, 0x00, 0xEA, 0xD1, 0x00, 0x00, 0x33, -/* 00005E30 */ 0xD2, 0x00, 0x00, 0x90, 0xD2, 0x00, 0x00, 0x9E, 0xD2, 0x00, 0x00, 0x9F, 0xD2, 0x00, 0x00, 0xCB, -/* 00005E40 */ 0xD2, 0x00, 0x00, 0x18, 0xD3, 0x00, 0x00, 0x19, 0xD3, 0x00, 0x00, 0x48, 0xD3, 0x00, 0x00, 0xC4, -/* 00005E50 */ 0xD3, 0x00, 0x00, 0xFD, 0xD3, 0x00, 0x00, 0xFE, 0xD3, 0x00, 0x00, 0x23, 0xD4, 0x00, 0x00, 0x37, -/* 00005E60 */ 0xD4, 0x00, 0x00, 0x41, 0xD4, 0x00, 0x00, 0x42, 0xD4, 0x00, 0x00, 0xC8, 0xD4, 0x00, 0x00, 0xFF, -/* 00005E70 */ 0xD4, 0x00, 0x00, 0x3A, 0xD5, 0x00, 0x00, 0x48, 0xD5, 0x00, 0x00, 0x49, 0xD5, 0x00, 0x00, 0x7A, -/* 00005E80 */ 0xD5, 0x00, 0x00, 0x7B, 0xD5, 0x00, 0x00, 0xA3, 0xD5, 0x00, 0x00, 0xE8, 0xD5, 0x00, 0x00, 0xF6, -/* 00005E90 */ 0xD5, 0x00, 0x00, 0xF7, 0xD5, 0x00, 0x00, 0x2A, 0xD6, 0x00, 0x00, 0x68, 0xD6, 0x00, 0x00, 0x96, -/* 00005EA0 */ 0xD6, 0x00, 0x00, 0xC1, 0xD6, 0x00, 0x00, 0xFE, 0xD6, 0x00, 0x00, 0x0C, 0xD7, 0x00, 0x00, 0x0D, -/* 00005EB0 */ 0xD7, 0x00, 0x00, 0x51, 0xD7, 0x00, 0x00, 0x52, 0xD7, 0x00, 0x00, 0x8D, 0xD7, 0x00, 0x00, 0xBF, -/* 00005EC0 */ 0xD7, 0x00, 0x00, 0xC0, 0xD7, 0x00, 0x00, 0xD8, 0xD7, 0x00, 0x00, 0xE4, 0xD7, 0x00, 0x00, 0xE5, -/* 00005ED0 */ 0xD7, 0x00, 0x00, 0x49, 0xD8, 0x00, 0x00, 0x6F, 0xD8, 0x00, 0x00, 0x70, 0xD8, 0x00, 0x00, 0x9C, -/* 00005EE0 */ 0xD8, 0x00, 0x00, 0xFD, 0xD8, 0x00, 0x00, 0x0B, 0xD9, 0x00, 0x00, 0x0C, 0xD9, 0x00, 0x00, 0x4D, -/* 00005EF0 */ 0xD9, 0x00, 0x00, 0xA4, 0xD9, 0x00, 0x00, 0x05, 0xDA, 0x00, 0x00, 0x13, 0xDA, 0x00, 0x00, 0x14, -/* 00005F00 */ 0xDA, 0x00, 0x00, 0x92, 0xDA, 0x00, 0x00, 0x9E, 0xDA, 0x00, 0x00, 0x9F, 0xDA, 0x00, 0x00, 0x18, -/* 00005F10 */ 0xDB, 0x00, 0x00, 0x3E, 0xDB, 0x00, 0x00, 0x3F, 0xDB, 0x00, 0x00, 0x6B, 0xDB, 0x00, 0x00, 0xD3, -/* 00005F20 */ 0xDB, 0x00, 0x00, 0xE1, 0xDB, 0x00, 0x00, 0xE2, 0xDB, 0x00, 0x00, 0x23, 0xDC, 0x00, 0x00, 0x7A, -/* 00005F30 */ 0xDC, 0x00, 0x00, 0xE2, 0xDC, 0x00, 0x00, 0xF0, 0xDC, 0x00, 0x00, 0xF1, 0xDC, 0x00, 0x00, 0x6E, -/* 00005F40 */ 0xDD, 0x00, 0x00, 0x7A, 0xDD, 0x00, 0x00, 0x7B, 0xDD, 0x00, 0x00, 0xAF, 0xDD, 0x00, 0x00, 0x0C, -/* 00005F50 */ 0xDE, 0x00, 0x00, 0xA3, 0xDE, 0x00, 0x00, 0x36, 0xDF, 0x00, 0x00, 0x42, 0xDF, 0x00, 0x00, 0xB9, -/* 00005F60 */ 0xDF, 0x00, 0x00, 0xFD, 0xDF, 0x00, 0x00, 0x26, 0xE0, 0x00, 0x00, 0x43, 0xE0, 0x00, 0x00, 0x62, -/* 00005F70 */ 0xE0, 0x00, 0x00, 0x82, 0xE0, 0x00, 0x00, 0x8E, 0xE0, 0x00, 0x00, 0xCD, 0xE0, 0x00, 0x00, 0x01, -/* 00005F80 */ 0xE1, 0x00, 0x00, 0x1D, 0xE1, 0x00, 0x00, 0x3C, 0xE1, 0x00, 0x00, 0x5C, 0xE1, 0x00, 0x00, 0x68, -/* 00005F90 */ 0xE1, 0x00, 0x00, 0x69, 0xE1, 0x00, 0x00, 0x9F, 0xE1, 0x00, 0x00, 0xC6, 0xE1, 0x00, 0x00, 0xE3, -/* 00005FA0 */ 0xE1, 0x00, 0x00, 0x02, 0xE2, 0x00, 0x00, 0x23, 0xE2, 0x00, 0x00, 0x2F, 0xE2, 0x00, 0x00, 0x6F, -/* 00005FB0 */ 0xE2, 0x00, 0x00, 0xB1, 0xE2, 0x00, 0x00, 0xD2, 0xE2, 0x00, 0x00, 0xEE, 0xE2, 0x00, 0x00, 0x0D, -/* 00005FC0 */ 0xE3, 0x00, 0x00, 0x2D, 0xE3, 0x00, 0x00, 0x39, 0xE3, 0x00, 0x00, 0x3A, 0xE3, 0x00, 0x00, 0x80, -/* 00005FD0 */ 0xE3, 0x00, 0x00, 0xB0, 0xE3, 0x00, 0x00, 0xE0, 0xE3, 0x00, 0x00, 0x4E, 0xE4, 0x00, 0x00, 0x60, -/* 00005FE0 */ 0xE4, 0x00, 0x00, 0xA5, 0xE4, 0x00, 0x00, 0x00, 0xE5, 0x00, 0x00, 0x6E, 0xE5, 0x00, 0x00, 0x80, -/* 00005FF0 */ 0xE5, 0x00, 0x00, 0x81, 0xE5, 0x00, 0x00, 0xFF, 0xE5, 0x00, 0x00, 0x7D, 0xE6, 0x00, 0x00, 0xA1, -/* 00006000 */ 0xE6, 0x00, 0x00, 0xA2, 0xE6, 0x00, 0x00, 0xE7, 0xE6, 0x00, 0x00, 0xF6, 0xE6, 0x00, 0x00, 0x12, -/* 00006010 */ 0xE7, 0x00, 0x00, 0x31, 0xE7, 0x00, 0x00, 0x51, 0xE7, 0x00, 0x00, 0x5D, 0xE7, 0x00, 0x00, 0x5E, -/* 00006020 */ 0xE7, 0x00, 0x00, 0xDA, 0xE7, 0x00, 0x00, 0x02, 0xE8, 0x00, 0x00, 0x2E, 0xE8, 0x00, 0x00, 0x8F, -/* 00006030 */ 0xE8, 0x00, 0x00, 0x9D, 0xE8, 0x00, 0x00, 0x9E, 0xE8, 0x00, 0x00, 0xDF, 0xE8, 0x00, 0x00, 0x36, -/* 00006040 */ 0xE9, 0x00, 0x00, 0x97, 0xE9, 0x00, 0x00, 0xA5, 0xE9, 0x00, 0x00, 0xA6, 0xE9, 0x00, 0x00, 0xD3, -/* 00006050 */ 0xE9, 0x00, 0x00, 0xDE, 0xE9, 0x00, 0x00, 0x0C, 0xEA, 0x00, 0x00, 0x2D, 0xEA, 0x00, 0x00, 0x4A, -/* 00006060 */ 0xEA, 0x00, 0x00, 0x69, 0xEA, 0x00, 0x00, 0x89, 0xEA, 0x00, 0x00, 0x95, 0xEA, 0x00, 0x00, 0xD2, -/* 00006070 */ 0xEA, 0x00, 0x00, 0x0F, 0xEB, 0x00, 0x00, 0x2E, 0xEB, 0x00, 0x00, 0x4E, 0xEB, 0x00, 0x00, 0x5A, -/* 00006080 */ 0xEB, 0x00, 0x00, 0x5B, 0xEB, 0x00, 0x00, 0x9F, 0xEB, 0x00, 0x00, 0xC1, 0xEB, 0x00, 0x00, 0xE0, -/* 00006090 */ 0xEB, 0x00, 0x00, 0x00, 0xEC, 0x00, 0x00, 0x1C, 0xEC, 0x00, 0x00, 0x28, 0xEC, 0x00, 0x00, 0x29, -/* 000060A0 */ 0xEC, 0x00, 0x00, 0x46, 0xEC, 0x00, 0x00, 0x50, 0xEC, 0x00, 0x00, 0x51, 0xEC, 0x00, 0x00, 0xD1, -/* 000060B0 */ 0xEC, 0x00, 0x00, 0xF9, 0xEC, 0x00, 0x00, 0x33, 0xED, 0x00, 0x00, 0x47, 0xED, 0x00, 0x00, 0x51, -/* 000060C0 */ 0xED, 0x00, 0x00, 0x52, 0xED, 0x00, 0x00, 0x8F, 0xED, 0x00, 0x00, 0xC7, 0xED, 0x00, 0x00, 0x13, -/* 000060D0 */ 0xEE, 0x00, 0x00, 0x38, 0xEE, 0x00, 0x00, 0x62, 0xEE, 0x00, 0x00, 0x88, 0xEE, 0x00, 0x00, 0xAF, -/* 000060E0 */ 0xEE, 0x00, 0x00, 0x01, 0xEF, 0x00, 0x00, 0x27, 0xEF, 0x00, 0x00, 0x4E, 0xEF, 0x00, 0x00, 0x77, -/* 000060F0 */ 0xEF, 0x00, 0x00, 0xA0, 0xEF, 0x00, 0x00, 0x09, 0xF0, 0x00, 0x00, 0x14, 0xF0, 0x00, 0x00, 0x15, -/* 00006100 */ 0xF0, 0x00, 0x00, 0x21, 0xF0, 0x00, 0x00, 0x8D, 0xF0, 0x00, 0x00, 0x0A, 0xF1, 0x00, 0x00, 0x15, -/* 00006110 */ 0xF1, 0x00, 0x00, 0x57, 0xF1, 0x00, 0x00, 0xAA, 0xF1, 0x00, 0x00, 0xB6, 0xF1, 0x00, 0x00, 0xEA, -/* 00006120 */ 0xF1, 0x00, 0x00, 0x69, 0xF2, 0x00, 0x00, 0x8F, 0xF2, 0x00, 0x00, 0xAD, 0xF2, 0x00, 0x00, 0xC7, -/* 00006130 */ 0xF2, 0x00, 0x00, 0xE2, 0xF2, 0x00, 0x00, 0xFE, 0xF2, 0x00, 0x00, 0x18, 0xF3, 0x00, 0x00, 0x53, -/* 00006140 */ 0xF3, 0x00, 0x00, 0x88, 0xF3, 0x00, 0x00, 0xA5, 0xF3, 0x00, 0x00, 0xC2, 0xF3, 0x00, 0x00, 0xE5, -/* 00006150 */ 0xF3, 0x00, 0x00, 0xF4, 0xF3, 0x00, 0x00, 0x79, 0xF4, 0x00, 0x00, 0x9F, 0xF4, 0x00, 0x00, 0xD9, -/* 00006160 */ 0xF4, 0x00, 0x00, 0xF3, 0xF4, 0x00, 0x00, 0x24, 0xF5, 0x00, 0x00, 0x4C, 0xF5, 0x00, 0x00, 0x66, -/* 00006170 */ 0xF5, 0x00, 0x00, 0xA2, 0xF5, 0x00, 0x00, 0xBF, 0xF5, 0x00, 0x00, 0xDC, 0xF5, 0x00, 0x00, 0x71, -/* 00006180 */ 0xF6, 0x00, 0x00, 0x80, 0xF6, 0x00, 0x00, 0x81, 0xF6, 0x00, 0x00, 0xE6, 0xF6, 0x00, 0x00, 0x55, -/* 00006190 */ 0xF7, 0x00, 0x00, 0x81, 0xF7, 0x00, 0x00, 0x9D, 0xF7, 0x00, 0x00, 0xBB, 0xF7, 0x00, 0x00, 0xD5, -/* 000061A0 */ 0xF7, 0x00, 0x00, 0xEE, 0xF7, 0x00, 0x00, 0x09, 0xF8, 0x00, 0x00, 0x18, 0xF8, 0x00, 0x00, 0x44, -/* 000061B0 */ 0xF8, 0x00, 0x00, 0x62, 0xF8, 0x00, 0x00, 0x80, 0xF8, 0x00, 0x00, 0x9C, 0xF8, 0x00, 0x00, 0xB7, -/* 000061C0 */ 0xF8, 0x00, 0x00, 0xD4, 0xF8, 0x00, 0x00, 0xE3, 0xF8, 0x00, 0x00, 0xE4, 0xF8, 0x00, 0x00, 0x18, -/* 000061D0 */ 0xF9, 0x00, 0x00, 0x42, 0xF9, 0x00, 0x00, 0x5C, 0xF9, 0x00, 0x00, 0x76, 0xF9, 0x00, 0x00, 0x90, -/* 000061E0 */ 0xF9, 0x00, 0x00, 0xAA, 0xF9, 0x00, 0x00, 0xB9, 0xF9, 0x00, 0x00, 0xE3, 0xF9, 0x00, 0x00, 0xFD, -/* 000061F0 */ 0xF9, 0x00, 0x00, 0x17, 0xFA, 0x00, 0x00, 0x31, 0xFA, 0x00, 0x00, 0x4B, 0xFA, 0x00, 0x00, 0x5A, -/* 00006200 */ 0xFA, 0x00, 0x00, 0x5B, 0xFA, 0x00, 0x00, 0x88, 0xFA, 0x00, 0x00, 0xEE, 0xFA, 0x00, 0x00, 0x1D, -/* 00006210 */ 0xFB, 0x00, 0x00, 0x7C, 0xFB, 0x00, 0x00, 0xAB, 0xFB, 0x00, 0x00, 0xDB, 0xFB, 0x00, 0x00, 0xF1, -/* 00006220 */ 0xFB, 0x00, 0x00, 0xF2, 0xFB, 0x00, 0x00, 0x17, 0xFC, 0x00, 0x00, 0x37, 0xFC, 0x00, 0x00, 0x38, -/* 00006230 */ 0xFC, 0x00, 0x00, 0xAB, 0xFC, 0x00, 0x00, 0xFC, 0xFC, 0x00, 0x00, 0x5A, 0xFD, 0x00, 0x00, 0x84, -/* 00006240 */ 0xFD, 0x00, 0x00, 0x85, 0xFD, 0x00, 0x00, 0x10, 0xFE, 0x00, 0x00, 0x74, 0xFE, 0x00, 0x00, 0xB6, -/* 00006250 */ 0xFE, 0x00, 0x00, 0xE6, 0xFE, 0x00, 0x00, 0x3E, 0xFF, 0x00, 0x00, 0xAA, 0xFF, 0x00, 0x00, 0x07, -/* 00006260 */ 0x00, 0x01, 0x00, 0x7E, 0x00, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x57, 0x01, 0x01, 0x00, 0xC2, -/* 00006270 */ 0x01, 0x01, 0x00, 0xF4, 0x01, 0x01, 0x00, 0x67, 0x02, 0x01, 0x00, 0x99, 0x02, 0x01, 0x00, 0xB3, -/* 00006280 */ 0x02, 0x01, 0x00, 0xC9, 0x02, 0x01, 0x00, 0xCA, 0x02, 0x01, 0x00, 0x3A, 0x03, 0x01, 0x00, 0x52, -/* 00006290 */ 0x03, 0x01, 0x00, 0x53, 0x03, 0x01, 0x00, 0xA7, 0x03, 0x01, 0x00, 0xA8, 0x03, 0x01, 0x00, 0x3D, -/* 000062A0 */ 0x04, 0x01, 0x00, 0xCC, 0x04, 0x01, 0x00, 0x61, 0x05, 0x01, 0x00, 0x88, 0x05, 0x01, 0x00, 0xA3, -/* 000062B0 */ 0x05, 0x01, 0x00, 0xD0, 0x05, 0x01, 0x00, 0xFA, 0x05, 0x01, 0x00, 0x2B, 0x06, 0x01, 0x00, 0x50, -/* 000062C0 */ 0x06, 0x01, 0x00, 0x77, 0x06, 0x01, 0x00, 0xA6, 0x06, 0x01, 0x00, 0xC0, 0x06, 0x01, 0x00, 0xDD, -/* 000062D0 */ 0x06, 0x01, 0x00, 0xFF, 0x06, 0x01, 0x00, 0x29, 0x07, 0x01, 0x00, 0x53, 0x07, 0x01, 0x00, 0x70, -/* 000062E0 */ 0x07, 0x01, 0x00, 0x92, 0x07, 0x01, 0x00, 0xC0, 0x07, 0x01, 0x00, 0xDD, 0x07, 0x01, 0x00, 0xFF, -/* 000062F0 */ 0x07, 0x01, 0x00, 0x15, 0x08, 0x01, 0x00, 0x16, 0x08, 0x01, 0x00, 0x7C, 0x08, 0x01, 0x00, 0xE3, -/* 00006300 */ 0x08, 0x01, 0x00, 0x37, 0x09, 0x01, 0x00, 0x71, 0x09, 0x01, 0x00, 0xE0, 0x09, 0x01, 0x00, 0x52, -/* 00006310 */ 0x0A, 0x01, 0x00, 0xA9, 0x0A, 0x01, 0x00, 0xF2, 0x0A, 0x01, 0x00, 0x29, 0x0B, 0x01, 0x00, 0x67, -/* 00006320 */ 0x0B, 0x01, 0x00, 0x9B, 0x0B, 0x01, 0x00, 0x1F, 0x0C, 0x01, 0x00, 0x48, 0x0C, 0x01, 0x00, 0x7C, -/* 00006330 */ 0x0C, 0x01, 0x00, 0xF2, 0x0C, 0x01, 0x00, 0x14, 0x0D, 0x01, 0x00, 0x15, 0x0D, 0x01, 0x00, 0x6D, -/* 00006340 */ 0x0D, 0x01, 0x00, 0x9F, 0x0D, 0x01, 0x00, 0xBD, 0x0D, 0x01, 0x00, 0xDE, 0x0D, 0x01, 0x00, 0x4C, -/* 00006350 */ 0x0E, 0x01, 0x00, 0xA9, 0x0E, 0x01, 0x00, 0xEF, 0x0E, 0x01, 0x00, 0x09, 0x0F, 0x01, 0x00, 0x1F, -/* 00006360 */ 0x0F, 0x01, 0x00, 0x20, 0x0F, 0x01, 0x00, 0x43, 0x0F, 0x01, 0x00, 0x8A, 0x0F, 0x01, 0x00, 0xA7, -/* 00006370 */ 0x0F, 0x01, 0x00, 0xBD, 0x0F, 0x01, 0x00, 0xBE, 0x0F, 0x01, 0x00, 0xFC, 0x0F, 0x01, 0x00, 0x44, -/* 00006380 */ 0x10, 0x01, 0x00, 0x7A, 0x10, 0x01, 0x00, 0x95, 0x10, 0x01, 0x00, 0xA7, 0x10, 0x01, 0x00, 0xA8, -/* 00006390 */ 0x10, 0x01, 0x00, 0xCF, 0x10, 0x01, 0x00, 0xDE, 0x10, 0x01, 0x00, 0xEC, 0x10, 0x01, 0x00, 0xED, -/* 000063A0 */ 0x10, 0x01, 0x00, 0xF9, 0x10, 0x01, 0x00, 0x50, 0x11, 0x01, 0x00, 0x5B, 0x11, 0x01, 0x00, 0x8E, -/* 000063B0 */ 0x11, 0x01, 0x00, 0x99, 0x11, 0x01, 0x00, 0x13, 0x12, 0x01, 0x00, 0x5F, 0x12, 0x01, 0x00, 0xA1, -/* 000063C0 */ 0x12, 0x01, 0x00, 0xAD, 0x12, 0x01, 0x00, 0x04, 0x13, 0x01, 0x00, 0x4A, 0x13, 0x01, 0x00, 0x8B, -/* 000063D0 */ 0x13, 0x01, 0x00, 0x8C, 0x13, 0x01, 0x00, 0xB0, 0x13, 0x01, 0x00, 0x23, 0x14, 0x01, 0x00, 0x81, -/* 000063E0 */ 0x14, 0x01, 0x00, 0xEA, 0x14, 0x01, 0x00, 0xEB, 0x14, 0x01, 0x00, 0x5A, 0x15, 0x01, 0x00, 0x88, -/* 000063F0 */ 0x15, 0x01, 0x00, 0xB4, 0x15, 0x01, 0x00, 0xE1, 0x15, 0x01, 0x00, 0x14, 0x16, 0x01, 0x00, 0x15, -/* 00006400 */ 0x16, 0x01, 0x00, 0x4C, 0x16, 0x01, 0x00, 0x73, 0x16, 0x01, 0x00, 0x97, 0x16, 0x01, 0x00, 0xCB, -/* 00006410 */ 0x16, 0x01, 0x00, 0xE0, 0x16, 0x01, 0x00, 0x0C, 0x17, 0x01, 0x00, 0x1A, 0x17, 0x01, 0x00, 0x1B, -/* 00006420 */ 0x17, 0x01, 0x00, 0x90, 0x17, 0x01, 0x00, 0xD3, 0x17, 0x01, 0x00, 0x21, 0x18, 0x01, 0x00, 0x6F, -/* 00006430 */ 0x18, 0x01, 0x00, 0xCB, 0x18, 0x01, 0x00, 0x1C, 0x19, 0x01, 0x00, 0x38, 0x19, 0x01, 0x00, 0x4D, -/* 00006440 */ 0x19, 0x01, 0x00, 0x6F, 0x19, 0x01, 0x00, 0x7D, 0x19, 0x01, 0x00, 0x7E, 0x19, 0x01, 0x00, 0xA8, -/* 00006450 */ 0x19, 0x01, 0x00, 0xA9, 0x19, 0x01, 0x00, 0xE2, 0x19, 0x01, 0x00, 0x40, 0x1A, 0x01, 0x00, 0x41, -/* 00006460 */ 0x1A, 0x01, 0x00, 0xB5, 0x1A, 0x01, 0x00, 0xF0, 0x1A, 0x01, 0x00, 0x2D, 0x1B, 0x01, 0x00, 0x2E, -/* 00006470 */ 0x1B, 0x01, 0x00, 0x51, 0x1B, 0x01, 0x00, 0x5C, 0x1B, 0x01, 0x00, 0x5D, 0x1B, 0x01, 0x00, 0x69, -/* 00006480 */ 0x1B, 0x01, 0x00, 0xB1, 0x1B, 0x01, 0x00, 0xBC, 0x1B, 0x01, 0x00, 0xE8, 0x1B, 0x01, 0x00, 0xF3, -/* 00006490 */ 0x1B, 0x01, 0x00, 0x74, 0x1C, 0x01, 0x00, 0xEE, 0x1C, 0x01, 0x00, 0x69, 0x1D, 0x01, 0x00, 0x9E, -/* 000064A0 */ 0x1D, 0x01, 0x00, 0xAA, 0x1D, 0x01, 0x00, 0xF5, 0x1D, 0x01, 0x00, 0x46, 0x1E, 0x01, 0x00, 0x6F, -/* 000064B0 */ 0x1E, 0x01, 0x00, 0x94, 0x1E, 0x01, 0x00, 0xD1, 0x1E, 0x01, 0x00, 0x22, 0x1F, 0x01, 0x00, 0x53, -/* 000064C0 */ 0x1F, 0x01, 0x00, 0x82, 0x1F, 0x01, 0x00, 0xB0, 0x1F, 0x01, 0x00, 0xC6, 0x1F, 0x01, 0x00, 0xDA, -/* 000064D0 */ 0x1F, 0x01, 0x00, 0xE8, 0x1F, 0x01, 0x00, 0xE9, 0x1F, 0x01, 0x00, 0x26, 0x20, 0x01, 0x00, 0x70, -/* 000064E0 */ 0x20, 0x01, 0x00, 0xA1, 0x20, 0x01, 0x00, 0xD0, 0x20, 0x01, 0x00, 0xFE, 0x20, 0x01, 0x00, 0x14, -/* 000064F0 */ 0x21, 0x01, 0x00, 0x28, 0x21, 0x01, 0x00, 0x36, 0x21, 0x01, 0x00, 0x37, 0x21, 0x01, 0x00, 0x8F, -/* 00006500 */ 0x21, 0x01, 0x00, 0xD5, 0x21, 0x01, 0x00, 0x0B, 0x22, 0x01, 0x00, 0x35, 0x22, 0x01, 0x00, 0x5D, -/* 00006510 */ 0x22, 0x01, 0x00, 0x87, 0x22, 0x01, 0x00, 0xB3, 0x22, 0x01, 0x00, 0xCB, 0x22, 0x01, 0x00, 0xDE, -/* 00006520 */ 0x22, 0x01, 0x00, 0xEC, 0x22, 0x01, 0x00, 0xED, 0x22, 0x01, 0x00, 0x45, 0x23, 0x01, 0x00, 0x8F, -/* 00006530 */ 0x23, 0x01, 0x00, 0xC5, 0x23, 0x01, 0x00, 0xEF, 0x23, 0x01, 0x00, 0x17, 0x24, 0x01, 0x00, 0x41, -/* 00006540 */ 0x24, 0x01, 0x00, 0x6D, 0x24, 0x01, 0x00, 0x85, 0x24, 0x01, 0x00, 0x98, 0x24, 0x01, 0x00, 0xA6, -/* 00006550 */ 0x24, 0x01, 0x00, 0xA7, 0x24, 0x01, 0x00, 0xC3, 0x24, 0x01, 0x00, 0xCE, 0x24, 0x01, 0x00, 0xCF, -/* 00006560 */ 0x24, 0x01, 0x00, 0x02, 0x25, 0x01, 0x00, 0x32, 0x25, 0x01, 0x00, 0x5F, 0x25, 0x01, 0x00, 0x6D, -/* 00006570 */ 0x25, 0x01, 0x00, 0x6E, 0x25, 0x01, 0x00, 0xE3, 0x25, 0x01, 0x00, 0xEE, 0x25, 0x01, 0x00, 0xEF, -/* 00006580 */ 0x25, 0x01, 0x00, 0x29, 0x26, 0x01, 0x00, 0x59, 0x26, 0x01, 0x00, 0x86, 0x26, 0x01, 0x00, 0x94, -/* 00006590 */ 0x26, 0x01, 0x00, 0x95, 0x26, 0x01, 0x00, 0x09, 0x27, 0x01, 0x00, 0x14, 0x27, 0x01, 0x00, 0x15, -/* 000065A0 */ 0x27, 0x01, 0x00, 0x67, 0x27, 0x01, 0x00, 0xC3, 0x27, 0x01, 0x00, 0x07, 0x28, 0x01, 0x00, 0x26, -/* 000065B0 */ 0x28, 0x01, 0x00, 0x49, 0x28, 0x01, 0x00, 0x6B, 0x28, 0x01, 0x00, 0x77, 0x28, 0x01, 0x00, 0x78, -/* 000065C0 */ 0x28, 0x01, 0x00, 0xE9, 0x28, 0x01, 0x00, 0x30, 0x29, 0x01, 0x00, 0x6E, 0x29, 0x01, 0x00, 0x7C, -/* 000065D0 */ 0x29, 0x01, 0x00, 0xB1, 0x29, 0x01, 0x00, 0xE9, 0x29, 0x01, 0x00, 0x10, 0x2A, 0x01, 0x00, 0x1E, -/* 000065E0 */ 0x2A, 0x01, 0x00, 0x1F, 0x2A, 0x01, 0x00, 0x48, 0x2A, 0x01, 0x00, 0xA0, 0x2A, 0x01, 0x00, 0x0A, -/* 000065F0 */ 0x2B, 0x01, 0x00, 0x55, 0x2B, 0x01, 0x00, 0x82, 0x2B, 0x01, 0x00, 0xD9, 0x2B, 0x01, 0x00, 0xF2, -/* 00006600 */ 0x2B, 0x01, 0x00, 0x18, 0x2C, 0x01, 0x00, 0x46, 0x2C, 0x01, 0x00, 0xBC, 0x2C, 0x01, 0x00, 0x13, -/* 00006610 */ 0x2D, 0x01, 0x00, 0x25, 0x2D, 0x01, 0x00, 0x33, 0x2D, 0x01, 0x00, 0x34, 0x2D, 0x01, 0x00, 0x54, -/* 00006620 */ 0x2D, 0x01, 0x00, 0x7E, 0x2D, 0x01, 0x00, 0xEC, 0x2D, 0x01, 0x00, 0xFA, 0x2D, 0x01, 0x00, 0xFB, -/* 00006630 */ 0x2D, 0x01, 0x00, 0x8D, 0x2E, 0x01, 0x00, 0x97, 0x2E, 0x01, 0x00, 0x98, 0x2E, 0x01, 0x00, 0x11, -/* 00006640 */ 0x2F, 0x01, 0x00, 0x99, 0x2F, 0x01, 0x00, 0x14, 0x30, 0x01, 0x00, 0x99, 0x30, 0x01, 0x00, 0xBA, -/* 00006650 */ 0x30, 0x01, 0x00, 0xC5, 0x30, 0x01, 0x00, 0x4C, 0x31, 0x01, 0x00, 0xCE, 0x31, 0x01, 0x00, 0x54, -/* 00006660 */ 0x32, 0x01, 0x00, 0xA4, 0x32, 0x01, 0x00, 0xAF, 0x32, 0x01, 0x00, 0x2D, 0x33, 0x01, 0x00, 0x9A, -/* 00006670 */ 0x33, 0x01, 0x00, 0xF1, 0x33, 0x01, 0x00, 0x58, 0x34, 0x01, 0x00, 0xCE, 0x34, 0x01, 0x00, 0x1B, -/* 00006680 */ 0x35, 0x01, 0x00, 0x26, 0x35, 0x01, 0x00, 0x98, 0x35, 0x01, 0x00, 0xA3, 0x35, 0x01, 0x00, 0x2B, -/* 00006690 */ 0x36, 0x01, 0x00, 0xB0, 0x36, 0x01, 0x00, 0xF7, 0x36, 0x01, 0x00, 0xF8, 0x36, 0x01, 0x00, 0x44, -/* 000066A0 */ 0x37, 0x01, 0x00, 0xDD, 0x37, 0x01, 0x00, 0x5E, 0x38, 0x01, 0x00, 0x83, 0x38, 0x01, 0x00, 0x25, -/* 000066B0 */ 0x39, 0x01, 0x00, 0x26, 0x39, 0x01, 0x00, 0x72, 0x39, 0x01, 0x00, 0x0F, 0x3A, 0x01, 0x00, 0x90, -/* 000066C0 */ 0x3A, 0x01, 0x00, 0xB5, 0x3A, 0x01, 0x00, 0x65, 0x3B, 0x01, 0x00, 0x66, 0x3B, 0x01, 0x00, 0xB2, -/* 000066D0 */ 0x3B, 0x01, 0x00, 0x4F, 0x3C, 0x01, 0x00, 0xD0, 0x3C, 0x01, 0x00, 0xF5, 0x3C, 0x01, 0x00, 0xA5, -/* 000066E0 */ 0x3D, 0x01, 0x00, 0xA6, 0x3D, 0x01, 0x00, 0x01, 0x3E, 0x01, 0x00, 0x24, 0x3E, 0x01, 0x00, 0x38, -/* 000066F0 */ 0x3E, 0x01, 0x00, 0x42, 0x3E, 0x01, 0x00, 0x43, 0x3E, 0x01, 0x00, 0x4F, 0x3E, 0x01, 0x00, 0x7E, -/* 00006700 */ 0x3E, 0x01, 0x00, 0x89, 0x3E, 0x01, 0x00, 0xB7, 0x3E, 0x01, 0x00, 0xC2, 0x3E, 0x01, 0x00, 0xEE, -/* 00006710 */ 0x3E, 0x01, 0x00, 0x11, 0x3F, 0x01, 0x00, 0x1D, 0x3F, 0x01, 0x00, 0x69, 0x3F, 0x01, 0x00, 0xA0, -/* 00006720 */ 0x3F, 0x01, 0x00, 0xDD, 0x3F, 0x01, 0x00, 0xEB, 0x3F, 0x01, 0x00, 0xEC, 0x3F, 0x01, 0x00, 0x1D, -/* 00006730 */ 0x40, 0x01, 0x00, 0x45, 0x40, 0x01, 0x00, 0x8C, 0x40, 0x01, 0x00, 0x9A, 0x40, 0x01, 0x00, 0x9B, -/* 00006740 */ 0x40, 0x01, 0x00, 0xCE, 0x40, 0x01, 0x00, 0x0C, 0x41, 0x01, 0x00, 0x0D, 0x41, 0x01, 0x00, 0x3B, -/* 00006750 */ 0x41, 0x01, 0x00, 0x66, 0x41, 0x01, 0x00, 0xA3, 0x41, 0x01, 0x00, 0xB1, 0x41, 0x01, 0x00, 0xB2, -/* 00006760 */ 0x41, 0x01, 0x00, 0xF8, 0x41, 0x01, 0x00, 0xF9, 0x41, 0x01, 0x00, 0x47, 0x42, 0x01, 0x00, 0x83, -/* 00006770 */ 0x42, 0x01, 0x00, 0xB5, 0x42, 0x01, 0x00, 0xB6, 0x42, 0x01, 0x00, 0xCE, 0x42, 0x01, 0x00, 0xD8, -/* 00006780 */ 0x42, 0x01, 0x00, 0x1A, 0x43, 0x01, 0x00, 0x1B, 0x43, 0x01, 0x00, 0x27, 0x43, 0x01, 0x00, 0x86, -/* 00006790 */ 0x43, 0x01, 0x00, 0x91, 0x43, 0x01, 0x00, 0xC8, 0x43, 0x01, 0x00, 0xD3, 0x43, 0x01, 0x00, 0x2D, -/* 000067A0 */ 0x44, 0x01, 0x00, 0x91, 0x44, 0x01, 0x00, 0xD1, 0x44, 0x01, 0x00, 0xDD, 0x44, 0x01, 0x00, 0x11, -/* 000067B0 */ 0x45, 0x01, 0x00, 0x3C, 0x45, 0x01, 0x00, 0xA7, 0x45, 0x01, 0x00, 0xB5, 0x45, 0x01, 0x00, 0xF3, -/* 000067C0 */ 0x45, 0x01, 0x00, 0x4C, 0x46, 0x01, 0x00, 0xB7, 0x46, 0x01, 0x00, 0xC5, 0x46, 0x01, 0x00, 0xC6, -/* 000067D0 */ 0x46, 0x01, 0x00, 0xE7, 0x46, 0x01, 0x00, 0xF2, 0x46, 0x01, 0x00, 0xF3, 0x46, 0x01, 0x00, 0xFF, -/* 000067E0 */ 0x46, 0x01, 0x00, 0x53, 0x47, 0x01, 0x00, 0x5E, 0x47, 0x01, 0x00, 0xAB, 0x47, 0x01, 0x00, 0xB6, -/* 000067F0 */ 0x47, 0x01, 0x00, 0x10, 0x48, 0x01, 0x00, 0x49, 0x48, 0x01, 0x00, 0xAD, 0x48, 0x01, 0x00, 0xB9, -/* 00006800 */ 0x48, 0x01, 0x00, 0xF3, 0x48, 0x01, 0x00, 0x2D, 0x49, 0x01, 0x00, 0x2E, 0x49, 0x01, 0x00, 0x41, -/* 00006810 */ 0x49, 0x01, 0x00, 0x67, 0x49, 0x01, 0x00, 0xA5, 0x49, 0x01, 0x00, 0xBA, 0x49, 0x01, 0x00, 0xE7, -/* 00006820 */ 0x49, 0x01, 0x00, 0xF5, 0x49, 0x01, 0x00, 0xF6, 0x49, 0x01, 0x00, 0x33, 0x4A, 0x01, 0x00, 0x59, -/* 00006830 */ 0x4A, 0x01, 0x00, 0x64, 0x4A, 0x01, 0x00, 0x65, 0x4A, 0x01, 0x00, 0x8E, 0x4A, 0x01, 0x00, 0xE9, -/* 00006840 */ 0x4A, 0x01, 0x00, 0xF4, 0x4A, 0x01, 0x00, 0x3F, 0x4B, 0x01, 0x00, 0x40, 0x4B, 0x01, 0x00, 0x70, -/* 00006850 */ 0x4B, 0x01, 0x00, 0xD9, 0x4B, 0x01, 0x00, 0xE4, 0x4B, 0x01, 0x00, 0x3D, 0x4C, 0x01, 0x00, 0x3E, -/* 00006860 */ 0x4C, 0x01, 0x00, 0x76, 0x4C, 0x01, 0x00, 0x9F, 0x4C, 0x01, 0x00, 0xBC, 0x4C, 0x01, 0x00, 0xDB, -/* 00006870 */ 0x4C, 0x01, 0x00, 0xFB, 0x4C, 0x01, 0x00, 0x07, 0x4D, 0x01, 0x00, 0x49, 0x4D, 0x01, 0x00, 0x4A, -/* 00006880 */ 0x4D, 0x01, 0x00, 0x8E, 0x4D, 0x01, 0x00, 0xB1, 0x4D, 0x01, 0x00, 0xCD, 0x4D, 0x01, 0x00, 0xEC, -/* 00006890 */ 0x4D, 0x01, 0x00, 0x0B, 0x4E, 0x01, 0x00, 0x17, 0x4E, 0x01, 0x00, 0x18, 0x4E, 0x01, 0x00, 0x96, -/* 000068A0 */ 0x4E, 0x01, 0x00, 0xBE, 0x4E, 0x01, 0x00, 0xFB, 0x4E, 0x01, 0x00, 0xFC, 0x4E, 0x01, 0x00, 0x29, -/* 000068B0 */ 0x4F, 0x01, 0x00, 0x34, 0x4F, 0x01, 0x00, 0x62, 0x4F, 0x01, 0x00, 0x83, 0x4F, 0x01, 0x00, 0xA0, -/* 000068C0 */ 0x4F, 0x01, 0x00, 0xBF, 0x4F, 0x01, 0x00, 0xDF, 0x4F, 0x01, 0x00, 0xEB, 0x4F, 0x01, 0x00, 0x2A, -/* 000068D0 */ 0x50, 0x01, 0x00, 0x67, 0x50, 0x01, 0x00, 0x86, 0x50, 0x01, 0x00, 0xA6, 0x50, 0x01, 0x00, 0xB2, -/* 000068E0 */ 0x50, 0x01, 0x00, 0xF8, 0x50, 0x01, 0x00, 0x1A, 0x51, 0x01, 0x00, 0x39, 0x51, 0x01, 0x00, 0x59, -/* 000068F0 */ 0x51, 0x01, 0x00, 0x75, 0x51, 0x01, 0x00, 0x81, 0x51, 0x01, 0x00, 0xC9, 0x51, 0x01, 0x00, 0xF9, -/* 00006900 */ 0x51, 0x01, 0x00, 0x45, 0x52, 0x01, 0x00, 0x67, 0x52, 0x01, 0x00, 0x85, 0x52, 0x01, 0x00, 0xA5, -/* 00006910 */ 0x52, 0x01, 0x00, 0xCC, 0x52, 0x01, 0x00, 0xEC, 0x52, 0x01, 0x00, 0x0D, 0x53, 0x01, 0x00, 0x2C, -/* 00006920 */ 0x53, 0x01, 0x00, 0x47, 0x53, 0x01, 0x00, 0x63, 0x53, 0x01, 0x00, 0x80, 0x53, 0x01, 0x00, 0x9B, -/* 00006930 */ 0x53, 0x01, 0x00, 0xB7, 0x53, 0x01, 0x00, 0xD5, 0x53, 0x01, 0x00, 0xF3, 0x53, 0x01, 0x00, 0x17, -/* 00006940 */ 0x54, 0x01, 0x00, 0x2A, 0x54, 0x01, 0x00, 0x2B, 0x54, 0x01, 0x00, 0x8B, 0x54, 0x01, 0x00, 0xBB, -/* 00006950 */ 0x54, 0x01, 0x00, 0xF6, 0x54, 0x01, 0x00, 0x44, 0x55, 0x01, 0x00, 0x79, 0x55, 0x01, 0x00, 0xC5, -/* 00006960 */ 0x55, 0x01, 0x00, 0xDF, 0x55, 0x01, 0x00, 0xE0, 0x55, 0x01, 0x00, 0x05, 0x56, 0x01, 0x00, 0x1B, -/* 00006970 */ 0x56, 0x01, 0x00, 0x2F, 0x56, 0x01, 0x00, 0x3E, 0x56, 0x01, 0x00, 0x5A, 0x56, 0x01, 0x00, 0x79, -/* 00006980 */ 0x56, 0x01, 0x00, 0x99, 0x56, 0x01, 0x00, 0xA5, 0x56, 0x01, 0x00, 0xA6, 0x56, 0x01, 0x00, 0xDA, -/* 00006990 */ 0x56, 0x01, 0x00, 0x3B, 0x57, 0x01, 0x00, 0xD6, 0x57, 0x01, 0x00, 0x6C, 0x58, 0x01, 0x00, 0x78, -/* 000069A0 */ 0x58, 0x01, 0x00, 0xF3, 0x58, 0x01, 0x00, 0x39, 0x59, 0x01, 0x00, 0x62, 0x59, 0x01, 0x00, 0x7F, -/* 000069B0 */ 0x59, 0x01, 0x00, 0x9E, 0x59, 0x01, 0x00, 0xBE, 0x59, 0x01, 0x00, 0xCA, 0x59, 0x01, 0x00, 0x0B, -/* 000069C0 */ 0x5A, 0x01, 0x00, 0x41, 0x5A, 0x01, 0x00, 0x5D, 0x5A, 0x01, 0x00, 0x7C, 0x5A, 0x01, 0x00, 0x9C, -/* 000069D0 */ 0x5A, 0x01, 0x00, 0xA8, 0x5A, 0x01, 0x00, 0xA9, 0x5A, 0x01, 0x00, 0xC8, 0x5A, 0x01, 0x00, 0xD2, -/* 000069E0 */ 0x5A, 0x01, 0x00, 0xD3, 0x5A, 0x01, 0x00, 0xF9, 0x5A, 0x01, 0x00, 0x1C, 0x5B, 0x01, 0x00, 0x30, -/* 000069F0 */ 0x5B, 0x01, 0x00, 0x3A, 0x5B, 0x01, 0x00, 0x3B, 0x5B, 0x01, 0x00, 0x47, 0x5B, 0x01, 0x00, 0x7B, -/* 00006A00 */ 0x5B, 0x01, 0x00, 0x86, 0x5B, 0x01, 0x00, 0xB6, 0x5B, 0x01, 0x00, 0xC1, 0x5B, 0x01, 0x00, 0xE8, -/* 00006A10 */ 0x5B, 0x01, 0x00, 0x14, 0x5C, 0x01, 0x00, 0x37, 0x5C, 0x01, 0x00, 0x43, 0x5C, 0x01, 0x00, 0x94, -/* 00006A20 */ 0x5C, 0x01, 0x00, 0xDA, 0x5C, 0x01, 0x00, 0x31, 0x5D, 0x01, 0x00, 0x55, 0x5D, 0x01, 0x00, 0xC2, -/* 00006A30 */ 0x5D, 0x01, 0x00, 0x2C, 0x5E, 0x01, 0x00, 0x2D, 0x5E, 0x01, 0x00, 0x72, 0x5E, 0x01, 0x00, 0x73, -/* 00006A40 */ 0x5E, 0x01, 0x00, 0xD6, 0x5E, 0x01, 0x00, 0x34, 0x5F, 0x01, 0x00, 0x35, 0x5F, 0x01, 0x00, 0x60, -/* 00006A50 */ 0x5F, 0x01, 0x00, 0xB6, 0x5F, 0x01, 0x00, 0xB7, 0x5F, 0x01, 0x00, 0xEE, 0x5F, 0x01, 0x00, 0xEF, -/* 00006A60 */ 0x5F, 0x01, 0x00, 0x0F, 0x60, 0x01, 0x00, 0x1A, 0x60, 0x01, 0x00, 0x1B, 0x60, 0x01, 0x00, 0x27, -/* 00006A70 */ 0x60, 0x01, 0x00, 0x78, 0x60, 0x01, 0x00, 0xB7, 0x60, 0x01, 0x00, 0xC2, 0x60, 0x01, 0x00, 0xEA, -/* 00006A80 */ 0x60, 0x01, 0x00, 0xF5, 0x60, 0x01, 0x00, 0x1C, 0x61, 0x01, 0x00, 0x39, 0x61, 0x01, 0x00, 0x45, -/* 00006A90 */ 0x61, 0x01, 0x00, 0x7F, 0x61, 0x01, 0x00, 0xA1, 0x61, 0x01, 0x00, 0xC1, 0x61, 0x01, 0x00, 0xCF, -/* 00006AA0 */ 0x61, 0x01, 0x00, 0xD0, 0x61, 0x01, 0x00, 0x0F, 0x62, 0x01, 0x00, 0x1A, 0x62, 0x01, 0x00, 0x1B, -/* 00006AB0 */ 0x62, 0x01, 0x00, 0x6B, 0x62, 0x01, 0x00, 0xC8, 0x62, 0x01, 0x00, 0xF4, 0x62, 0x01, 0x00, 0x47, -/* 00006AC0 */ 0x63, 0x01, 0x00, 0x55, 0x63, 0x01, 0x00, 0x56, 0x63, 0x01, 0x00, 0x82, 0x63, 0x01, 0x00, 0xBB, -/* 00006AD0 */ 0x63, 0x01, 0x00, 0xBC, 0x63, 0x01, 0x00, 0xFE, 0x63, 0x01, 0x00, 0xFF, 0x63, 0x01, 0x00, 0x18, -/* 00006AE0 */ 0x64, 0x01, 0x00, 0x23, 0x64, 0x01, 0x00, 0x5F, 0x64, 0x01, 0x00, 0x60, 0x64, 0x01, 0x00, 0x95, -/* 00006AF0 */ 0x64, 0x01, 0x00, 0xCA, 0x64, 0x01, 0x00, 0xE1, 0x64, 0x01, 0x00, 0xFE, 0x64, 0x01, 0x00, 0x1D, -/* 00006B00 */ 0x65, 0x01, 0x00, 0x3E, 0x65, 0x01, 0x00, 0x4A, 0x65, 0x01, 0x00, 0x4B, 0x65, 0x01, 0x00, 0x7F, -/* 00006B10 */ 0x65, 0x01, 0x00, 0xBD, 0x65, 0x01, 0x00, 0x18, 0x66, 0x01, 0x00, 0xAD, 0x66, 0x01, 0x00, 0x3F, -/* 00006B20 */ 0x67, 0x01, 0x00, 0x4B, 0x67, 0x01, 0x00, 0xC0, 0x67, 0x01, 0x00, 0x03, 0x68, 0x01, 0x00, 0x2C, -/* 00006B30 */ 0x68, 0x01, 0x00, 0x49, 0x68, 0x01, 0x00, 0x68, 0x68, 0x01, 0x00, 0x88, 0x68, 0x01, 0x00, 0x94, -/* 00006B40 */ 0x68, 0x01, 0x00, 0xD2, 0x68, 0x01, 0x00, 0x05, 0x69, 0x01, 0x00, 0x21, 0x69, 0x01, 0x00, 0x40, -/* 00006B50 */ 0x69, 0x01, 0x00, 0x60, 0x69, 0x01, 0x00, 0x6C, 0x69, 0x01, 0x00, 0x6D, 0x69, 0x01, 0x00, 0xA9, -/* 00006B60 */ 0x69, 0x01, 0x00, 0xD9, 0x69, 0x01, 0x00, 0x10, 0x6A, 0x01, 0x00, 0x45, 0x6A, 0x01, 0x00, 0xA9, -/* 00006B70 */ 0x6A, 0x01, 0x00, 0xB7, 0x6A, 0x01, 0x00, 0xB8, 0x6A, 0x01, 0x00, 0xE8, 0x6A, 0x01, 0x00, 0x11, -/* 00006B80 */ 0x6B, 0x01, 0x00, 0x1C, 0x6B, 0x01, 0x00, 0x64, 0x6B, 0x01, 0x00, 0xA0, 0x6B, 0x01, 0x00, 0xBB, -/* 00006B90 */ 0x6B, 0x01, 0x00, 0xDA, 0x6B, 0x01, 0x00, 0xFA, 0x6B, 0x01, 0x00, 0x16, 0x6C, 0x01, 0x00, 0x22, -/* 00006BA0 */ 0x6C, 0x01, 0x00, 0x23, 0x6C, 0x01, 0x00, 0x60, 0x6C, 0x01, 0x00, 0x97, 0x6C, 0x01, 0x00, 0xCC, -/* 00006BB0 */ 0x6C, 0x01, 0x00, 0x30, 0x6D, 0x01, 0x00, 0x3E, 0x6D, 0x01, 0x00, 0x3F, 0x6D, 0x01, 0x00, 0x6A, -/* 00006BC0 */ 0x6D, 0x01, 0x00, 0x84, 0x6D, 0x01, 0x00, 0x9C, 0x6D, 0x01, 0x00, 0xC4, 0x6D, 0x01, 0x00, 0xED, -/* 00006BD0 */ 0x6D, 0x01, 0x00, 0x16, 0x6E, 0x01, 0x00, 0x42, 0x6E, 0x01, 0x00, 0x6E, 0x6E, 0x01, 0x00, 0x91, -/* 00006BE0 */ 0x6E, 0x01, 0x00, 0xBA, 0x6E, 0x01, 0x00, 0xED, 0x6E, 0x01, 0x00, 0x5C, 0x6F, 0x01, 0x00, 0xAD, -/* 00006BF0 */ 0x6F, 0x01, 0x00, 0xCE, 0x6F, 0x01, 0x00, 0xE0, 0x6F, 0x01, 0x00, 0xF0, 0x6F, 0x01, 0x00, 0xFB, -/* 00006C00 */ 0x6F, 0x01, 0x00, 0x55, 0x70, 0x01, 0x00, 0x9A, 0x70, 0x01, 0x00, 0xBE, 0x70, 0x01, 0x00, 0xDD, -/* 00006C10 */ 0x70, 0x01, 0x00, 0xFD, 0x70, 0x01, 0x00, 0x19, 0x71, 0x01, 0x00, 0x25, 0x71, 0x01, 0x00, 0x26, -/* 00006C20 */ 0x71, 0x01, 0x00, 0x42, 0x71, 0x01, 0x00, 0x4C, 0x71, 0x01, 0x00, 0x4D, 0x71, 0x01, 0x00, 0x7E, -/* 00006C30 */ 0x71, 0x01, 0x00, 0x9D, 0x71, 0x01, 0x00, 0x2F, 0x72, 0x01, 0x00, 0xC1, 0x72, 0x01, 0x00, 0x53, -/* 00006C40 */ 0x73, 0x01, 0x00, 0xE5, 0x73, 0x01, 0x00, 0xEB, 0x73, 0x01, 0x00, 0xEC, 0x73, 0x01, 0x00, 0xF2, -/* 00006C50 */ 0x73, 0x01, 0x00, 0xFA, 0x73, 0x01, 0x00, 0x01, 0x74, 0x01, 0x00, 0x08, 0x74, 0x01, 0x00, 0x0F, -/* 00006C60 */ 0x74, 0x01, 0x00, 0x16, 0x74, 0x01, 0x00, 0x1D, 0x74, 0x01, 0x00, 0x24, 0x74, 0x01, 0x00, 0x42, -/* 00006C70 */ 0x74, 0x01, 0x00, 0x49, 0x74, 0x01, 0x00, 0x50, 0x74, 0x01, 0x00, 0x57, 0x74, 0x01, 0x00, 0x5E, -/* 00006C80 */ 0x74, 0x01, 0x00, 0x65, 0x74, 0x01, 0x00, 0x6C, 0x74, 0x01, 0x00, 0x74, 0x74, 0x01, 0x00, 0x7F, -/* 00006C90 */ 0x74, 0x01, 0x00, 0x80, 0x74, 0x01, 0x00, 0xB4, 0x74, 0x01, 0x00, 0xEA, 0x74, 0x01, 0x00, 0xF0, -/* 00006CA0 */ 0x74, 0x01, 0x00, 0x25, 0x75, 0x01, 0x00, 0x5C, 0x75, 0x01, 0x00, 0x62, 0x75, 0x01, 0x00, 0x63, -/* 00006CB0 */ 0x75, 0x01, 0x00, 0x88, 0x75, 0x01, 0x00, 0xB3, 0x75, 0x01, 0x00, 0xE8, 0x75, 0x01, 0x00, 0x0C, -/* 00006CC0 */ 0x76, 0x01, 0x00, 0x16, 0x76, 0x01, 0x00, 0x17, 0x76, 0x01, 0x00, 0x4B, 0x76, 0x01, 0x00, 0x62, -/* 00006CD0 */ 0x76, 0x01, 0x00, 0xB1, 0x76, 0x01, 0x00, 0xE3, 0x76, 0x01, 0x00, 0x07, 0x77, 0x01, 0x00, 0x18, -/* 00006CE0 */ 0x77, 0x01, 0x00, 0x3E, 0x77, 0x01, 0x00, 0x48, 0x77, 0x01, 0x00, 0x49, 0x77, 0x01, 0x00, 0x69, -/* 00006CF0 */ 0x77, 0x01, 0x00, 0x70, 0x77, 0x01, 0x00, 0x71, 0x77, 0x01, 0x00, 0xB7, 0x77, 0x01, 0x00, 0x06, -/* 00006D00 */ 0x78, 0x01, 0x00, 0x25, 0x78, 0x01, 0x00, 0x73, 0x78, 0x01, 0x00, 0xA6, 0x78, 0x01, 0x00, 0xD6, -/* 00006D10 */ 0x78, 0x01, 0x00, 0x16, 0x79, 0x01, 0x00, 0x42, 0x79, 0x01, 0x00, 0x50, 0x79, 0x01, 0x00, 0x5A, -/* 00006D20 */ 0x79, 0x01, 0x00, 0x75, 0x79, 0x01, 0x00, 0x7C, 0x79, 0x01, 0x00, 0x7D, 0x79, 0x01, 0x00, 0xB4, -/* 00006D30 */ 0x79, 0x01, 0x00, 0xF4, 0x79, 0x01, 0x00, 0x13, 0x7A, 0x01, 0x00, 0x33, 0x7A, 0x01, 0x00, 0x5B, -/* 00006D40 */ 0x7A, 0x01, 0x00, 0x69, 0x7A, 0x01, 0x00, 0xB3, 0x7A, 0x01, 0x00, 0xCF, 0x7A, 0x01, 0x00, 0xE0, -/* 00006D50 */ 0x7A, 0x01, 0x00, 0xFB, 0x7A, 0x01, 0x00, 0x05, 0x7B, 0x01, 0x00, 0x0C, 0x7B, 0x01, 0x00, 0x0D, -/* 00006D60 */ 0x7B, 0x01, 0x00, 0x47, 0x7B, 0x01, 0x00, 0x60, 0x7B, 0x01, 0x00, 0x83, 0x7B, 0x01, 0x00, 0xA5, -/* 00006D70 */ 0x7B, 0x01, 0x00, 0xC9, 0x7B, 0x01, 0x00, 0xD7, 0x7B, 0x01, 0x00, 0xEE, 0x7B, 0x01, 0x00, 0xF8, -/* 00006D80 */ 0x7B, 0x01, 0x00, 0xFF, 0x7B, 0x01, 0x00, 0x00, 0x7C, 0x01, 0x00, 0x65, 0x7C, 0x01, 0x00, 0x91, -/* 00006D90 */ 0x7C, 0x01, 0x00, 0xD7, 0x7C, 0x01, 0x00, 0xED, 0x7C, 0x01, 0x00, 0xF7, 0x7C, 0x01, 0x00, 0xFE, -/* 00006DA0 */ 0x7C, 0x01, 0x00, 0xFF, 0x7C, 0x01, 0x00, 0x30, 0x7D, 0x01, 0x00, 0x67, 0x7D, 0x01, 0x00, 0x6E, -/* 00006DB0 */ 0x7D, 0x01, 0x00, 0x6F, 0x7D, 0x01, 0x00, 0xB1, 0x7D, 0x01, 0x00, 0xF7, 0x7D, 0x01, 0x00, 0x23, -/* 00006DC0 */ 0x7E, 0x01, 0x00, 0x67, 0x7E, 0x01, 0x00, 0x92, 0x7E, 0x01, 0x00, 0xBB, 0x7E, 0x01, 0x00, 0xE7, -/* 00006DD0 */ 0x7E, 0x01, 0x00, 0xF9, 0x7E, 0x01, 0x00, 0x4B, 0x7F, 0x01, 0x00, 0xC0, 0x7F, 0x01, 0x00, 0xCE, -/* 00006DE0 */ 0x7F, 0x01, 0x00, 0x19, 0x80, 0x01, 0x00, 0x5B, 0x80, 0x01, 0x00, 0xCB, 0x80, 0x01, 0x00, 0xFE, -/* 00006DF0 */ 0x80, 0x01, 0x00, 0x26, 0x81, 0x01, 0x00, 0x30, 0x81, 0x01, 0x00, 0x31, 0x81, 0x01, 0x00, 0x59, -/* 00006E00 */ 0x81, 0x01, 0x00, 0x7C, 0x81, 0x01, 0x00, 0xB3, 0x81, 0x01, 0x00, 0xD1, 0x81, 0x01, 0x00, 0xE2, -/* 00006E10 */ 0x81, 0x01, 0x00, 0x05, 0x82, 0x01, 0x00, 0x0F, 0x82, 0x01, 0x00, 0x15, 0x82, 0x01, 0x00, 0x16, -/* 00006E20 */ 0x82, 0x01, 0x00, 0x56, 0x82, 0x01, 0x00, 0xA9, 0x82, 0x01, 0x00, 0xD5, 0x82, 0x01, 0x00, 0x26, -/* 00006E30 */ 0x83, 0x01, 0x00, 0x51, 0x83, 0x01, 0x00, 0x7A, 0x83, 0x01, 0x00, 0xA6, 0x83, 0x01, 0x00, 0xB8, -/* 00006E40 */ 0x83, 0x01, 0x00, 0x18, 0x84, 0x01, 0x00, 0x69, 0x84, 0x01, 0x00, 0x93, 0x84, 0x01, 0x00, 0xCC, -/* 00006E50 */ 0x84, 0x01, 0x00, 0x06, 0x85, 0x01, 0x00, 0x14, 0x85, 0x01, 0x00, 0x5F, 0x85, 0x01, 0x00, 0xA1, -/* 00006E60 */ 0x85, 0x01, 0x00, 0x1E, 0x86, 0x01, 0x00, 0x51, 0x86, 0x01, 0x00, 0x79, 0x86, 0x01, 0x00, 0x83, -/* 00006E70 */ 0x86, 0x01, 0x00, 0xA2, 0x86, 0x01, 0x00, 0xA8, 0x86, 0x01, 0x00, 0xA9, 0x86, 0x01, 0x00, 0xDB, -/* 00006E80 */ 0x86, 0x01, 0x00, 0xFB, 0x86, 0x01, 0x00, 0x1F, 0x87, 0x01, 0x00, 0x29, 0x87, 0x01, 0x00, 0x2A, -/* 00006E90 */ 0x87, 0x01, 0x00, 0x75, 0x87, 0x01, 0x00, 0x8B, 0x87, 0x01, 0x00, 0xA9, 0x87, 0x01, 0x00, 0xB3, -/* 00006EA0 */ 0x87, 0x01, 0x00, 0xB4, 0x87, 0x01, 0x00, 0x29, 0x88, 0x01, 0x00, 0x79, 0x88, 0x01, 0x00, 0xBE, -/* 00006EB0 */ 0x88, 0x01, 0x00, 0xBF, 0x88, 0x01, 0x00, 0x32, 0x89, 0x01, 0x00, 0x4B, 0x89, 0x01, 0x00, 0x6F, -/* 00006EC0 */ 0x89, 0x01, 0x00, 0x93, 0x89, 0x01, 0x00, 0xEB, 0x89, 0x01, 0x00, 0x2E, 0x8A, 0x01, 0x00, 0xB7, -/* 00006ED0 */ 0x8A, 0x01, 0x00, 0xB8, 0x8A, 0x01, 0x00, 0xD3, 0x8A, 0x01, 0x00, 0xD9, 0x8A, 0x01, 0x00, 0xDA, -/* 00006EE0 */ 0x8A, 0x01, 0x00, 0x34, 0x8B, 0x01, 0x00, 0x6A, 0x8B, 0x01, 0x00, 0x8A, 0x8B, 0x01, 0x00, 0xE7, -/* 00006EF0 */ 0x8B, 0x01, 0x00, 0x1A, 0x8C, 0x01, 0x00, 0x24, 0x8C, 0x01, 0x00, 0x25, 0x8C, 0x01, 0x00, 0x3C, -/* 00006F00 */ 0x8C, 0x01, 0x00, 0x8C, 0x8C, 0x01, 0x00, 0xE8, 0x8C, 0x01, 0x00, 0xF8, 0x8C, 0x01, 0x00, 0x02, -/* 00006F10 */ 0x8D, 0x01, 0x00, 0x03, 0x8D, 0x01, 0x00, 0x92, 0x8D, 0x01, 0x00, 0x18, 0x8E, 0x01, 0x00, 0x93, -/* 00006F20 */ 0x8E, 0x01, 0x00, 0xDC, 0x8E, 0x01, 0x00, 0x12, 0x8F, 0x01, 0x00, 0x13, 0x8F, 0x01, 0x00, 0x5F, -/* 00006F30 */ 0x8F, 0x01, 0x00, 0x7E, 0x8F, 0x01, 0x00, 0xCF, 0x8F, 0x01, 0x00, 0x49, 0x90, 0x01, 0x00, 0x6D, -/* 00006F40 */ 0x90, 0x01, 0x00, 0xC8, 0x90, 0x01, 0x00, 0x13, 0x91, 0x01, 0x00, 0x25, 0x91, 0x01, 0x00, 0x36, -/* 00006F50 */ 0x91, 0x01, 0x00, 0x56, 0x91, 0x01, 0x00, 0x60, 0x91, 0x01, 0x00, 0x61, 0x91, 0x01, 0x00, 0xD0, -/* 00006F60 */ 0x91, 0x01, 0x00, 0xFE, 0x91, 0x01, 0x00, 0x33, 0x92, 0x01, 0x00, 0x5C, 0x92, 0x01, 0x00, 0x74, -/* 00006F70 */ 0x92, 0x01, 0x00, 0xAE, 0x92, 0x01, 0x00, 0xD8, 0x92, 0x01, 0x00, 0xFD, 0x92, 0x01, 0x00, 0x16, -/* 00006F80 */ 0x93, 0x01, 0x00, 0x3D, 0x93, 0x01, 0x00, 0x4F, 0x93, 0x01, 0x00, 0x5D, 0x93, 0x01, 0x00, 0x5E, -/* 00006F90 */ 0x93, 0x01, 0x00, 0xA9, 0x93, 0x01, 0x00, 0xBA, 0x93, 0x01, 0x00, 0xDC, 0x93, 0x01, 0x00, 0xE6, -/* 00006FA0 */ 0x93, 0x01, 0x00, 0xE7, 0x93, 0x01, 0x00, 0x05, 0x94, 0x01, 0x00, 0x23, 0x94, 0x01, 0x00, 0x41, -/* 00006FB0 */ 0x94, 0x01, 0x00, 0x72, 0x94, 0x01, 0x00, 0x84, 0x94, 0x01, 0x00, 0x8A, 0x94, 0x01, 0x00, 0x8B, -/* 00006FC0 */ 0x94, 0x01, 0x00, 0xEB, 0x94, 0x01, 0x00, 0x43, 0x95, 0x01, 0x00, 0x76, 0x95, 0x01, 0x00, 0x77, -/* 00006FD0 */ 0x95, 0x01, 0x00, 0xA8, 0x95, 0x01, 0x00, 0xA9, 0x95, 0x01, 0x00, 0xDD, 0x95, 0x01, 0x00, 0x08, -/* 00006FE0 */ 0x96, 0x01, 0x00, 0x71, 0x96, 0x01, 0x00, 0xA2, 0x96, 0x01, 0x00, 0xC3, 0x96, 0x01, 0x00, 0xD1, -/* 00006FF0 */ 0x96, 0x01, 0x00, 0xDB, 0x96, 0x01, 0x00, 0x30, 0x97, 0x01, 0x00, 0x36, 0x97, 0x01, 0x00, 0x37, -/* 00007000 */ 0x97, 0x01, 0x00, 0x7A, 0x97, 0x01, 0x00, 0xA7, 0x97, 0x01, 0x00, 0xD5, 0x97, 0x01, 0x00, 0xFC, -/* 00007010 */ 0x97, 0x01, 0x00, 0x28, 0x98, 0x01, 0x00, 0x32, 0x98, 0x01, 0x00, 0x33, 0x98, 0x01, 0x00, 0x55, -/* 00007020 */ 0x98, 0x01, 0x00, 0x7A, 0x98, 0x01, 0x00, 0xA2, 0x98, 0x01, 0x00, 0xB0, 0x98, 0x01, 0x00, 0xB1, -/* 00007030 */ 0x98, 0x01, 0x00, 0xDD, 0x98, 0x01, 0x00, 0x2A, 0x99, 0x01, 0x00, 0x43, 0x99, 0x01, 0x00, 0x81, -/* 00007040 */ 0x99, 0x01, 0x00, 0xB5, 0x99, 0x01, 0x00, 0xCA, 0x99, 0x01, 0x00, 0xF9, 0x99, 0x01, 0x00, 0x07, -/* 00007050 */ 0x9A, 0x01, 0x00, 0x18, 0x9A, 0x01, 0x00, 0x69, 0x9A, 0x01, 0x00, 0x99, 0x9A, 0x01, 0x00, 0xFF, -/* 00007060 */ 0x9A, 0x01, 0x00, 0x09, 0x9B, 0x01, 0x00, 0x0A, 0x9B, 0x01, 0x00, 0x32, 0x9B, 0x01, 0x00, 0x39, -/* 00007070 */ 0x9B, 0x01, 0x00, 0x3A, 0x9B, 0x01, 0x00, 0x5C, 0x9B, 0x01, 0x00, 0x7A, 0x9B, 0x01, 0x00, 0x9F, -/* 00007080 */ 0x9B, 0x01, 0x00, 0xC1, 0x9B, 0x01, 0x00, 0xF1, 0x9B, 0x01, 0x00, 0x03, 0x9C, 0x01, 0x00, 0x43, -/* 00007090 */ 0x9C, 0x01, 0x00, 0x52, 0x9C, 0x01, 0x00, 0x53, 0x9C, 0x01, 0x00, 0x78, 0x9C, 0x01, 0x00, 0xB8, -/* 000070A0 */ 0x9C, 0x01, 0x00, 0xC7, 0x9C, 0x01, 0x00, 0xC8, 0x9C, 0x01, 0x00, 0xED, 0x9C, 0x01, 0x00, 0x27, -/* 000070B0 */ 0x9D, 0x01, 0x00, 0x36, 0x9D, 0x01, 0x00, 0x37, 0x9D, 0x01, 0x00, 0x64, 0x9D, 0x01, 0x00, 0xA5, -/* 000070C0 */ 0x9D, 0x01, 0x00, 0xB4, 0x9D, 0x01, 0x00, 0xB5, 0x9D, 0x01, 0x00, 0xDA, 0x9D, 0x01, 0x00, 0xFF, -/* 000070D0 */ 0x9D, 0x01, 0x00, 0x1C, 0x9E, 0x01, 0x00, 0x50, 0x9E, 0x01, 0x00, 0x8B, 0x9E, 0x01, 0x00, 0x9D, -/* 000070E0 */ 0x9E, 0x01, 0x00, 0xB9, 0x9E, 0x01, 0x00, 0xC8, 0x9E, 0x01, 0x00, 0xC9, 0x9E, 0x01, 0x00, 0xF4, -/* 000070F0 */ 0x9E, 0x01, 0x00, 0x20, 0x9F, 0x01, 0x00, 0x3C, 0x9F, 0x01, 0x00, 0x8C, 0x9F, 0x01, 0x00, 0xB1, -/* 00007100 */ 0x9F, 0x01, 0x00, 0xC7, 0x9F, 0x01, 0x00, 0xF8, 0x9F, 0x01, 0x00, 0x0A, 0xA0, 0x01, 0x00, 0x18, -/* 00007110 */ 0xA0, 0x01, 0x00, 0x29, 0xA0, 0x01, 0x00, 0x33, 0xA0, 0x01, 0x00, 0x34, 0xA0, 0x01, 0x00, 0x5B, -/* 00007120 */ 0xA0, 0x01, 0x00, 0x9F, 0xA0, 0x01, 0x00, 0xC6, 0xA0, 0x01, 0x00, 0xC7, 0xA0, 0x01, 0x00, 0xEA, -/* 00007130 */ 0xA0, 0x01, 0x00, 0x0F, 0xA1, 0x01, 0x00, 0x49, 0xA1, 0x01, 0x00, 0x57, 0xA1, 0x01, 0x00, 0x58, -/* 00007140 */ 0xA1, 0x01, 0x00, 0x7C, 0xA1, 0x01, 0x00, 0xAE, 0xA1, 0x01, 0x00, 0xBC, 0xA1, 0x01, 0x00, 0xBD, -/* 00007150 */ 0xA1, 0x01, 0x00, 0xE1, 0xA1, 0x01, 0x00, 0x13, 0xA2, 0x01, 0x00, 0x21, 0xA2, 0x01, 0x00, 0x22, -/* 00007160 */ 0xA2, 0x01, 0x00, 0x89, 0xA2, 0x01, 0x00, 0x24, 0xA3, 0x01, 0x00, 0x32, 0xA3, 0x01, 0x00, 0x33, -/* 00007170 */ 0xA3, 0x01, 0x00, 0x4D, 0xA3, 0x01, 0x00, 0x57, 0xA3, 0x01, 0x00, 0x58, 0xA3, 0x01, 0x00, 0x71, -/* 00007180 */ 0xA3, 0x01, 0x00, 0x77, 0xA3, 0x01, 0x00, 0x78, 0xA3, 0x01, 0x00, 0xC6, 0xA3, 0x01, 0x00, 0xF2, -/* 00007190 */ 0xA3, 0x01, 0x00, 0xF3, 0xA3, 0x01, 0x00, 0x22, 0xA4, 0x01, 0x00, 0x62, 0xA4, 0x01, 0x00, 0x63, -/* 000071A0 */ 0xA4, 0x01, 0x00, 0xC4, 0xA4, 0x01, 0x00, 0x46, 0xA5, 0x01, 0x00, 0x54, 0xA5, 0x01, 0x00, 0x55, -/* 000071B0 */ 0xA5, 0x01, 0x00, 0x84, 0xA5, 0x01, 0x00, 0x95, 0xA5, 0x01, 0x00, 0xB2, 0xA5, 0x01, 0x00, 0xBC, -/* 000071C0 */ 0xA5, 0x01, 0x00, 0xC2, 0xA5, 0x01, 0x00, 0xC3, 0xA5, 0x01, 0x00, 0xDD, 0xA5, 0x01, 0x00, 0x07, -/* 000071D0 */ 0xA6, 0x01, 0x00, 0x31, 0xA6, 0x01, 0x00, 0x37, 0xA6, 0x01, 0x00, 0x38, 0xA6, 0x01, 0x00, 0x70, -/* 000071E0 */ 0xA6, 0x01, 0x00, 0xBC, 0xA6, 0x01, 0x00, 0x1A, 0xA7, 0x01, 0x00, 0x40, 0xA7, 0x01, 0x00, 0x85, -/* 000071F0 */ 0xA7, 0x01, 0x00, 0xE9, 0xA7, 0x01, 0x00, 0x69, 0xA8, 0x01, 0x00, 0x6A, 0xA8, 0x01, 0x00, 0xDC, -/* 00007200 */ 0xA8, 0x01, 0x00, 0x0D, 0xA9, 0x01, 0x00, 0x5C, 0xA9, 0x01, 0x00, 0xAE, 0xA9, 0x01, 0x00, 0x02, -/* 00007210 */ 0xAA, 0x01, 0x00, 0x3A, 0xAA, 0x01, 0x00, 0x8C, 0xAA, 0x01, 0x00, 0xDE, 0xAA, 0x01, 0x00, 0x33, -/* 00007220 */ 0xAB, 0x01, 0x00, 0x9F, 0xAB, 0x01, 0x00, 0xF5, 0xAB, 0x01, 0x00, 0xF6, 0xAB, 0x01, 0x00, 0x15, -/* 00007230 */ 0xAC, 0x01, 0x00, 0x34, 0xAC, 0x01, 0x00, 0x66, 0xAC, 0x01, 0x00, 0x67, 0xAC, 0x01, 0x00, 0xDE, -/* 00007240 */ 0xAC, 0x01, 0x00, 0x4B, 0xAD, 0x01, 0x00, 0x9E, 0xAD, 0x01, 0x00, 0xE1, 0xAD, 0x01, 0x00, 0xE2, -/* 00007250 */ 0xAD, 0x01, 0x00, 0x5F, 0xAE, 0x01, 0x00, 0xF3, 0xAE, 0x01, 0x00, 0x76, 0xAF, 0x01, 0x00, 0xF9, -/* 00007260 */ 0xAF, 0x01, 0x00, 0x6C, 0xB0, 0x01, 0x00, 0x6D, 0xB0, 0x01, 0x00, 0xD7, 0xB0, 0x01, 0x00, 0x50, -/* 00007270 */ 0xB1, 0x01, 0x00, 0x51, 0xB1, 0x01, 0x00, 0xB4, 0xB1, 0x01, 0x00, 0x43, 0xB2, 0x01, 0x00, 0xEC, -/* 00007280 */ 0xB2, 0x01, 0x00, 0x80, 0xB3, 0x01, 0x00, 0x17, 0xB4, 0x01, 0x00, 0xBB, 0xB4, 0x01, 0x00, 0xCF, -/* 00007290 */ 0xB4, 0x01, 0x00, 0xD0, 0xB4, 0x01, 0x00, 0x51, 0xB5, 0x01, 0x00, 0xBD, 0xB5, 0x01, 0x00, 0x2D, -/* 000072A0 */ 0xB6, 0x01, 0x00, 0x9D, 0xB6, 0x01, 0x00, 0x0F, 0xB7, 0x01, 0x00, 0x83, 0xB7, 0x01, 0x00, 0xF7, -/* 000072B0 */ 0xB7, 0x01, 0x00, 0x41, 0xB8, 0x01, 0x00, 0x42, 0xB8, 0x01, 0x00, 0xAF, 0xB8, 0x01, 0x00, 0xB0, -/* 000072C0 */ 0xB8, 0x01, 0x00, 0x16, 0xB9, 0x01, 0x00, 0xA1, 0xB9, 0x01, 0x00, 0x17, 0xBA, 0x01, 0x00, 0x1D, -/* 000072D0 */ 0xBA, 0x01, 0x00, 0x1E, 0xBA, 0x01, 0x00, 0x4C, 0xBA, 0x01, 0x00, 0x74, 0xBA, 0x01, 0x00, 0x75, -/* 000072E0 */ 0xBA, 0x01, 0x00, 0x96, 0xBA, 0x01, 0x00, 0xBE, 0xBA, 0x01, 0x00, 0xC8, 0xBA, 0x01, 0x00, 0xC9, -/* 000072F0 */ 0xBA, 0x01, 0x00, 0x15, 0xBB, 0x01, 0x00, 0x1B, 0xBB, 0x01, 0x00, 0x1C, 0xBB, 0x01, 0x00, 0x93, -/* 00007300 */ 0xBB, 0x01, 0x00, 0xC2, 0xBB, 0x01, 0x00, 0xF0, 0xBB, 0x01, 0x00, 0x07, 0xBC, 0x01, 0x00, 0x11, -/* 00007310 */ 0xBC, 0x01, 0x00, 0x12, 0xBC, 0x01, 0x00, 0x3D, 0xBC, 0x01, 0x00, 0x5E, 0xBC, 0x01, 0x00, 0x68, -/* 00007320 */ 0xBC, 0x01, 0x00, 0x69, 0xBC, 0x01, 0x00, 0x97, 0xBC, 0x01, 0x00, 0xD1, 0xBC, 0x01, 0x00, 0xD2, -/* 00007330 */ 0xBC, 0x01, 0x00, 0x07, 0xBD, 0x01, 0x00, 0x1E, 0xBD, 0x01, 0x00, 0x1F, 0xBD, 0x01, 0x00, 0x5D, -/* 00007340 */ 0xBD, 0x01, 0x00, 0xBE, 0xBD, 0x01, 0x00, 0xFA, 0xBD, 0x01, 0x00, 0x08, 0xBE, 0x01, 0x00, 0x09, -/* 00007350 */ 0xBE, 0x01, 0x00, 0x3A, 0xBE, 0x01, 0x00, 0x3B, 0xBE, 0x01, 0x00, 0x6C, 0xBE, 0x01, 0x00, 0xAC, -/* 00007360 */ 0xBE, 0x01, 0x00, 0xBA, 0xBE, 0x01, 0x00, 0xBB, 0xBE, 0x01, 0x00, 0xF1, 0xBE, 0x01, 0x00, 0xF2, -/* 00007370 */ 0xBE, 0x01, 0x00, 0x53, 0xBF, 0x01, 0x00, 0x93, 0xBF, 0x01, 0x00, 0xA1, 0xBF, 0x01, 0x00, 0xAD, -/* 00007380 */ 0xBF, 0x01, 0x00, 0xAE, 0xBF, 0x01, 0x00, 0xC3, 0xBF, 0x01, 0x00, 0xC9, 0xBF, 0x01, 0x00, 0xCA, -/* 00007390 */ 0xBF, 0x01, 0x00, 0x19, 0xC0, 0x01, 0x00, 0x32, 0xC0, 0x01, 0x00, 0x49, 0xC0, 0x01, 0x00, 0x9E, -/* 000073A0 */ 0xC0, 0x01, 0x00, 0xB0, 0xC0, 0x01, 0x00, 0x0E, 0xC1, 0x01, 0x00, 0x35, 0xC1, 0x01, 0x00, 0xC2, -/* 000073B0 */ 0xC1, 0x01, 0x00, 0xE9, 0xC1, 0x01, 0x00, 0xFB, 0xC1, 0x01, 0x00, 0x16, 0xC2, 0x01, 0x00, 0x3D, -/* 000073C0 */ 0xC2, 0x01, 0x00, 0x9F, 0xC2, 0x01, 0x00, 0xAD, 0xC2, 0x01, 0x00, 0xB9, 0xC2, 0x01, 0x00, 0x21, -/* 000073D0 */ 0xC3, 0x01, 0x00, 0x38, 0xC3, 0x01, 0x00, 0x3E, 0xC3, 0x01, 0x00, 0x3F, 0xC3, 0x01, 0x00, 0x95, -/* 000073E0 */ 0xC3, 0x01, 0x00, 0xC8, 0xC3, 0x01, 0x00, 0x01, 0xC4, 0x01, 0x00, 0x0B, 0xC4, 0x01, 0x00, 0x0C, -/* 000073F0 */ 0xC4, 0x01, 0x00, 0x44, 0xC4, 0x01, 0x00, 0x7F, 0xC4, 0x01, 0x00, 0xB8, 0xC4, 0x01, 0x00, 0xC2, -/* 00007400 */ 0xC4, 0x01, 0x00, 0xC3, 0xC4, 0x01, 0x00, 0xF8, 0xC4, 0x01, 0x00, 0xFE, 0xC4, 0x01, 0x00, 0xFF, -/* 00007410 */ 0xC4, 0x01, 0x00, 0x50, 0xC5, 0x01, 0x00, 0x83, 0xC5, 0x01, 0x00, 0xBC, 0xC5, 0x01, 0x00, 0xC6, -/* 00007420 */ 0xC5, 0x01, 0x00, 0xC7, 0xC5, 0x01, 0x00, 0xFF, 0xC5, 0x01, 0x00, 0x3A, 0xC6, 0x01, 0x00, 0x73, -/* 00007430 */ 0xC6, 0x01, 0x00, 0x7D, 0xC6, 0x01, 0x00, 0x7E, 0xC6, 0x01, 0x00, 0xAE, 0xC6, 0x01, 0x00, 0xB4, -/* 00007440 */ 0xC6, 0x01, 0x00, 0xB5, 0xC6, 0x01, 0x00, 0xDE, 0xC6, 0x01, 0x00, 0x19, 0xC7, 0x01, 0x00, 0x2E, -/* 00007450 */ 0xC7, 0x01, 0x00, 0x61, 0xC7, 0x01, 0x00, 0x62, 0xC7, 0x01, 0x00, 0x90, 0xC7, 0x01, 0x00, 0xBD, -/* 00007460 */ 0xC7, 0x01, 0x00, 0xBE, 0xC7, 0x01, 0x00, 0xF0, 0xC7, 0x01, 0x00, 0x26, 0xC8, 0x01, 0x00, 0x27, -/* 00007470 */ 0xC8, 0x01, 0x00, 0x6D, 0xC8, 0x01, 0x00, 0xE4, 0xC8, 0x01, 0x00, 0xF6, 0xC8, 0x01, 0x00, 0x04, -/* 00007480 */ 0xC9, 0x01, 0x00, 0x0E, 0xC9, 0x01, 0x00, 0x0F, 0xC9, 0x01, 0x00, 0x57, 0xC9, 0x01, 0x00, 0xD9, -/* 00007490 */ 0xC9, 0x01, 0x00, 0xEA, 0xC9, 0x01, 0x00, 0x4C, 0xCA, 0x01, 0x00, 0x56, 0xCA, 0x01, 0x00, 0x5D, -/* 000074A0 */ 0xCA, 0x01, 0x00, 0x5E, 0xCA, 0x01, 0x00, 0x9A, 0xCA, 0x01, 0x00, 0xFB, 0xCA, 0x01, 0x00, 0xFC, -/* 000074B0 */ 0xCA, 0x01, 0x00, 0x6F, 0xCB, 0x01, 0x00, 0xBF, 0xCB, 0x01, 0x00, 0x10, 0xCC, 0x01, 0x00, 0x93, -/* 000074C0 */ 0xCC, 0x01, 0x00, 0xEA, 0xCC, 0x01, 0x00, 0x52, 0xCD, 0x01, 0x00, 0x78, 0xCD, 0x01, 0x00, 0x79, -/* 000074D0 */ 0xCD, 0x01, 0x00, 0xD2, 0xCD, 0x01, 0x00, 0x5D, 0xCE, 0x01, 0x00, 0xB8, 0xCE, 0x01, 0x00, 0x24, -/* 000074E0 */ 0xCF, 0x01, 0x00, 0x4A, 0xCF, 0x01, 0x00, 0x4B, 0xCF, 0x01, 0x00, 0xA8, 0xCF, 0x01, 0x00, 0x37, -/* 000074F0 */ 0xD0, 0x01, 0x00, 0x94, 0xD0, 0x01, 0x00, 0x02, 0xD1, 0x01, 0x00, 0x28, 0xD1, 0x01, 0x00, 0x29, -/* 00007500 */ 0xD1, 0x01, 0x00, 0x6A, 0xD1, 0x01, 0x00, 0xDD, 0xD1, 0x01, 0x00, 0x17, 0xD2, 0x01, 0x00, 0x72, -/* 00007510 */ 0xD2, 0x01, 0x00, 0x98, 0xD2, 0x01, 0x00, 0x99, 0xD2, 0x01, 0x00, 0xF2, 0xD2, 0x01, 0x00, 0x4C, -/* 00007520 */ 0xD3, 0x01, 0x00, 0x9B, 0xD3, 0x01, 0x00, 0x17, 0xD4, 0x01, 0x00, 0x77, 0xD4, 0x01, 0x00, 0xDB, -/* 00007530 */ 0xD4, 0x01, 0x00, 0x41, 0xD5, 0x01, 0x00, 0x9A, 0xD5, 0x01, 0x00, 0x9B, 0xD5, 0x01, 0x00, 0x02, -/* 00007540 */ 0xD6, 0x01, 0x00, 0x47, 0xD6, 0x01, 0x00, 0x8A, 0xD6, 0x01, 0x00, 0xC3, 0xD6, 0x01, 0x00, 0xFE, -/* 00007550 */ 0xD6, 0x01, 0x00, 0x39, 0xD7, 0x01, 0x00, 0x77, 0xD7, 0x01, 0x00, 0xB4, 0xD7, 0x01, 0x00, 0xE9, -/* 00007560 */ 0xD7, 0x01, 0x00, 0x4A, 0xD8, 0x01, 0x00, 0x95, 0xD8, 0x01, 0x00, 0xE0, 0xD8, 0x01, 0x00, 0x2B, -/* 00007570 */ 0xD9, 0x01, 0x00, 0x75, 0xD9, 0x01, 0x00, 0x76, 0xD9, 0x01, 0x00, 0xF5, 0xD9, 0x01, 0x00, 0x90, -/* 00007580 */ 0xDA, 0x01, 0x00, 0xB0, 0xDA, 0x01, 0x00, 0xD0, 0xDA, 0x01, 0x00, 0xEE, 0xDA, 0x01, 0x00, 0xFC, -/* 00007590 */ 0xDA, 0x01, 0x00, 0xFD, 0xDA, 0x01, 0x00, 0x60, 0xDB, 0x01, 0x00, 0xDB, 0xDB, 0x01, 0x00, 0x1B, -/* 000075A0 */ 0xDC, 0x01, 0x00, 0x4C, 0xDC, 0x01, 0x00, 0xCB, 0xDC, 0x01, 0x00, 0x21, 0xDD, 0x01, 0x00, 0x65, -/* 000075B0 */ 0xDD, 0x01, 0x00, 0x66, 0xDD, 0x01, 0x00, 0xE5, 0xDD, 0x01, 0x00, 0x2D, 0xDE, 0x01, 0x00, 0x56, -/* 000075C0 */ 0xDE, 0x01, 0x00, 0x9B, 0xDE, 0x01, 0x00, 0xAD, 0xDE, 0x01, 0x00, 0xBD, 0xDE, 0x01, 0x00, 0xBE, -/* 000075D0 */ 0xDE, 0x01, 0x00, 0xF6, 0xDE, 0x01, 0x00, 0x02, 0xDF, 0x01, 0x00, 0x1B, 0xDF, 0x01, 0x00, 0x25, -/* 000075E0 */ 0xDF, 0x01, 0x00, 0x26, 0xDF, 0x01, 0x00, 0x77, 0xDF, 0x01, 0x00, 0xA5, 0xDF, 0x01, 0x00, 0xD0, -/* 000075F0 */ 0xDF, 0x01, 0x00, 0xFC, 0xDF, 0x01, 0x00, 0x37, 0xE0, 0x01, 0x00, 0x61, 0xE0, 0x01, 0x00, 0x6B, -/* 00007600 */ 0xE0, 0x01, 0x00, 0x6C, 0xE0, 0x01, 0x00, 0x8C, 0xE0, 0x01, 0x00, 0xAF, 0xE0, 0x01, 0x00, 0xD1, -/* 00007610 */ 0xE0, 0x01, 0x00, 0x25, 0xE1, 0x01, 0x00, 0x4E, 0xE1, 0x01, 0x00, 0xB8, 0xE1, 0x01, 0x00, 0xD1, -/* 00007620 */ 0xE1, 0x01, 0x00, 0x23, 0xE2, 0x01, 0x00, 0x6C, 0xE2, 0x01, 0x00, 0x92, 0xE2, 0x01, 0x00, 0xF4, -/* 00007630 */ 0xE2, 0x01, 0x00, 0x02, 0xE3, 0x01, 0x00, 0x13, 0xE3, 0x01, 0x00, 0x5C, 0xE3, 0x01, 0x00, 0xB8, -/* 00007640 */ 0xE3, 0x01, 0x00, 0xD7, 0xE3, 0x01, 0x00, 0xF9, 0xE3, 0x01, 0x00, 0x03, 0xE4, 0x01, 0x00, 0x04, -/* 00007650 */ 0xE4, 0x01, 0x00, 0x2B, 0xE4, 0x01, 0x00, 0x57, 0xE4, 0x01, 0x00, 0x81, 0xE4, 0x01, 0x00, 0x8B, -/* 00007660 */ 0xE4, 0x01, 0x00, 0x8C, 0xE4, 0x01, 0x00, 0xE8, 0xE4, 0x01, 0x00, 0x3D, 0xE5, 0x01, 0x00, 0x63, -/* 00007670 */ 0xE5, 0x01, 0x00, 0xA1, 0xE5, 0x01, 0x00, 0xB6, 0xE5, 0x01, 0x00, 0xF6, 0xE5, 0x01, 0x00, 0x04, -/* 00007680 */ 0xE6, 0x01, 0x00, 0x0F, 0xE6, 0x01, 0x00, 0x10, 0xE6, 0x01, 0x00, 0x66, 0xE6, 0x01, 0x00, 0x99, -/* 00007690 */ 0xE6, 0x01, 0x00, 0xE6, 0xE6, 0x01, 0x00, 0x3A, 0xE7, 0x01, 0x00, 0x64, 0xE7, 0x01, 0x00, 0x6E, -/* 000076A0 */ 0xE7, 0x01, 0x00, 0x6F, 0xE7, 0x01, 0x00, 0xB1, 0xE7, 0x01, 0x00, 0xDE, 0xE7, 0x01, 0x00, 0x38, -/* 000076B0 */ 0xE8, 0x01, 0x00, 0x49, 0xE8, 0x01, 0x00, 0x9D, 0xE8, 0x01, 0x00, 0xA7, 0xE8, 0x01, 0x00, 0xA8, -/* 000076C0 */ 0xE8, 0x01, 0x00, 0xCE, 0xE8, 0x01, 0x00, 0xD5, 0xE8, 0x01, 0x00, 0xD6, 0xE8, 0x01, 0x00, 0x0B, -/* 000076D0 */ 0xE9, 0x01, 0x00, 0x2D, 0xE9, 0x01, 0x00, 0x2E, 0xE9, 0x01, 0x00, 0x6A, 0xE9, 0x01, 0x00, 0x6B, -/* 000076E0 */ 0xE9, 0x01, 0x00, 0xB4, 0xE9, 0x01, 0x00, 0xE7, 0xE9, 0x01, 0x00, 0x17, 0xEA, 0x01, 0x00, 0x29, -/* 000076F0 */ 0xEA, 0x01, 0x00, 0x2A, 0xEA, 0x01, 0x00, 0xB9, 0xEA, 0x01, 0x00, 0x0F, 0xEB, 0x01, 0x00, 0x21, -/* 00007700 */ 0xEB, 0x01, 0x00, 0x22, 0xEB, 0x01, 0x00, 0x5B, 0xEB, 0x01, 0x00, 0x5C, 0xEB, 0x01, 0x00, 0x7F, -/* 00007710 */ 0xEB, 0x01, 0x00, 0xB5, 0xEB, 0x01, 0x00, 0xEB, 0xEB, 0x01, 0x00, 0x04, 0xEC, 0x01, 0x00, 0x3E, -/* 00007720 */ 0xEC, 0x01, 0x00, 0x50, 0xEC, 0x01, 0x00, 0x51, 0xEC, 0x01, 0x00, 0xC2, 0xEC, 0x01, 0x00, 0x21, -/* 00007730 */ 0xED, 0x01, 0x00, 0xA2, 0xED, 0x01, 0x00, 0x10, 0xEE, 0x01, 0x00, 0x83, 0xEE, 0x01, 0x00, 0xE5, -/* 00007740 */ 0xEE, 0x01, 0x00, 0xE6, 0xEE, 0x01, 0x00, 0x1E, 0xEF, 0x01, 0x00, 0x5F, 0xEF, 0x01, 0x00, 0xCD, -/* 00007750 */ 0xEF, 0x01, 0x00, 0xCE, 0xEF, 0x01, 0x00, 0xF9, 0xEF, 0x01, 0x00, 0x62, 0xF0, 0x01, 0x00, 0xA7, -/* 00007760 */ 0xF0, 0x01, 0x00, 0xA8, 0xF0, 0x01, 0x00, 0xDA, 0xF0, 0x01, 0x00, 0x45, 0xF1, 0x01, 0x00, 0xC7, -/* 00007770 */ 0xF1, 0x01, 0x00, 0xF3, 0xF1, 0x01, 0x00, 0x3F, 0xF2, 0x01, 0x00, 0x86, 0xF2, 0x01, 0x00, 0x22, -/* 00007780 */ 0xF3, 0x01, 0x00, 0x6E, 0xF3, 0x01, 0x00, 0xA5, 0xF3, 0x01, 0x00, 0x29, 0xF4, 0x01, 0x00, 0x4E, -/* 00007790 */ 0xF4, 0x01, 0x00, 0x7E, 0xF4, 0x01, 0x00, 0x9C, 0xF4, 0x01, 0x00, 0x3F, 0xF5, 0x01, 0x00, 0x9E, -/* 000077A0 */ 0xF5, 0x01, 0x00, 0xCD, 0xF5, 0x01, 0x00, 0xE7, 0xF5, 0x01, 0x00, 0xFF, 0xF5, 0x01, 0x00, 0x11, -/* 000077B0 */ 0xF6, 0x01, 0x00, 0x40, 0xF6, 0x01, 0x00, 0xAF, 0xF6, 0x01, 0x00, 0xDE, 0xF6, 0x01, 0x00, 0x6C, -/* 000077C0 */ 0xF7, 0x01, 0x00, 0xA3, 0xF7, 0x01, 0x00, 0x0D, 0xF8, 0x01, 0x00, 0x27, 0xF8, 0x01, 0x00, 0x3D, -/* 000077D0 */ 0xF8, 0x01, 0x00, 0x58, 0xF8, 0x01, 0x00, 0x87, 0xF8, 0x01, 0x00, 0x9D, 0xF8, 0x01, 0x00, 0xAF, -/* 000077E0 */ 0xF8, 0x01, 0x00, 0xB0, 0xF8, 0x01, 0x00, 0xDF, 0xF8, 0x01, 0x00, 0x0E, 0xF9, 0x01, 0x00, 0x28, -/* 000077F0 */ 0xF9, 0x01, 0x00, 0xAE, 0xF9, 0x01, 0x00, 0xD0, 0xF9, 0x01, 0x00, 0xFE, 0xF9, 0x01, 0x00, 0x2C, -/* 00007800 */ 0xFA, 0x01, 0x00, 0x2D, 0xFA, 0x01, 0x00, 0x9E, 0xFA, 0x01, 0x00, 0x27, 0xFB, 0x01, 0x00, 0x90, -/* 00007810 */ 0xFB, 0x01, 0x00, 0xCF, 0xFB, 0x01, 0x00, 0xE5, 0xFB, 0x01, 0x00, 0xE6, 0xFB, 0x01, 0x00, 0x0B, -/* 00007820 */ 0xFC, 0x01, 0x00, 0x38, 0xFC, 0x01, 0x00, 0x65, 0xFC, 0x01, 0x00, 0x92, 0xFC, 0x01, 0x00, 0xAF, -/* 00007830 */ 0xFC, 0x01, 0x00, 0xDC, 0xFC, 0x01, 0x00, 0xF2, 0xFC, 0x01, 0x00, 0x04, 0xFD, 0x01, 0x00, 0x05, -/* 00007840 */ 0xFD, 0x01, 0x00, 0x36, 0xFD, 0x01, 0x00, 0x63, 0xFD, 0x01, 0x00, 0x75, 0xFD, 0x01, 0x00, 0x76, -/* 00007850 */ 0xFD, 0x01, 0x00, 0xA3, 0xFD, 0x01, 0x00, 0xC8, 0xFD, 0x01, 0x00, 0xDA, 0xFD, 0x01, 0x00, 0xDB, -/* 00007860 */ 0xFD, 0x01, 0x00, 0x0C, 0xFE, 0x01, 0x00, 0x3A, 0xFE, 0x01, 0x00, 0x87, 0xFE, 0x01, 0x00, 0xCF, -/* 00007870 */ 0xFE, 0x01, 0x00, 0xF9, 0xFE, 0x01, 0x00, 0x2F, 0xFF, 0x01, 0x00, 0x71, 0xFF, 0x01, 0x00, 0xA3, -/* 00007880 */ 0xFF, 0x01, 0x00, 0xD1, 0xFF, 0x01, 0x00, 0x03, 0x00, 0x02, 0x00, 0x3A, 0x00, 0x02, 0x00, 0x48, -/* 00007890 */ 0x00, 0x02, 0x00, 0x49, 0x00, 0x02, 0x00, 0xB8, 0x00, 0x02, 0x00, 0xE1, 0x00, 0x02, 0x00, 0x1C, -/* 000078A0 */ 0x01, 0x02, 0x00, 0x76, 0x01, 0x02, 0x00, 0x88, 0x01, 0x02, 0x00, 0xB2, 0x01, 0x02, 0x00, 0xE2, -/* 000078B0 */ 0x01, 0x02, 0x00, 0xF4, 0x01, 0x02, 0x00, 0x98, 0x02, 0x02, 0x00, 0xC4, 0x02, 0x02, 0x00, 0xED, -/* 000078C0 */ 0x02, 0x02, 0x00, 0x27, 0x03, 0x02, 0x00, 0x74, 0x03, 0x02, 0x00, 0xAA, 0x03, 0x02, 0x00, 0xC7, -/* 000078D0 */ 0x03, 0x02, 0x00, 0xE1, 0x03, 0x02, 0x00, 0x15, 0x04, 0x02, 0x00, 0x61, 0x04, 0x02, 0x00, 0x96, -/* 000078E0 */ 0x04, 0x02, 0x00, 0xC1, 0x04, 0x02, 0x00, 0x08, 0x05, 0x02, 0x00, 0x1C, 0x05, 0x02, 0x00, 0x58, -/* 000078F0 */ 0x05, 0x02, 0x00, 0x59, 0x05, 0x02, 0x00, 0x80, 0x05, 0x02, 0x00, 0x81, 0x05, 0x02, 0x00, 0xCF, -/* 00007900 */ 0x05, 0x02, 0x00, 0x0E, 0x06, 0x02, 0x00, 0x4D, 0x06, 0x02, 0x00, 0x63, 0x06, 0x02, 0x00, 0x64, -/* 00007910 */ 0x06, 0x02, 0x00, 0x9B, 0x06, 0x02, 0x00, 0xCF, 0x06, 0x02, 0x00, 0x18, 0x07, 0x02, 0x00, 0x2E, -/* 00007920 */ 0x07, 0x02, 0x00, 0x2F, 0x07, 0x02, 0x00, 0x6A, 0x07, 0x02, 0x00, 0xB0, 0x07, 0x02, 0x00, 0xB1, -/* 00007930 */ 0x07, 0x02, 0x00, 0xE7, 0x07, 0x02, 0x00, 0x26, 0x08, 0x02, 0x00, 0x6B, 0x08, 0x02, 0x00, 0x81, -/* 00007940 */ 0x08, 0x02, 0x00, 0x82, 0x08, 0x02, 0x00, 0xCA, 0x08, 0x02, 0x00, 0xCB, 0x08, 0x02, 0x00, 0xF8, -/* 00007950 */ 0x08, 0x02, 0x00, 0x60, 0x09, 0x02, 0x00, 0x9D, 0x09, 0x02, 0x00, 0xBD, 0x09, 0x02, 0x00, 0xCF, -/* 00007960 */ 0x09, 0x02, 0x00, 0x0D, 0x0A, 0x02, 0x00, 0x0E, 0x0A, 0x02, 0x00, 0x37, 0x0A, 0x02, 0x00, 0x6B, -/* 00007970 */ 0x0A, 0x02, 0x00, 0xCD, 0x0A, 0x02, 0x00, 0xE3, 0x0A, 0x02, 0x00, 0xE4, 0x0A, 0x02, 0x00, 0x2B, -/* 00007980 */ 0x0B, 0x02, 0x00, 0x88, 0x0B, 0x02, 0x00, 0xEA, 0x0B, 0x02, 0x00, 0x00, 0x0C, 0x02, 0x00, 0x01, -/* 00007990 */ 0x0C, 0x02, 0x00, 0x24, 0x0C, 0x02, 0x00, 0x47, 0x0C, 0x02, 0x00, 0x48, 0x0C, 0x02, 0x00, 0x82, -/* 000079A0 */ 0x0C, 0x02, 0x00, 0x9D, 0x0C, 0x02, 0x00, 0xB8, 0x0C, 0x02, 0x00, 0xF1, 0x0C, 0x02, 0x00, 0x42, -/* 000079B0 */ 0x0D, 0x02, 0x00, 0x7C, 0x0D, 0x02, 0x00, 0xAC, 0x0D, 0x02, 0x00, 0xF8, 0x0D, 0x02, 0x00, 0x10, -/* 000079C0 */ 0x0E, 0x02, 0x00, 0x22, 0x0E, 0x02, 0x00, 0x71, 0x0E, 0x02, 0x00, 0x72, 0x0E, 0x02, 0x00, 0x04, -/* 000079D0 */ 0x0F, 0x02, 0x00, 0x05, 0x0F, 0x02, 0x00, 0x96, 0x0F, 0x02, 0x00, 0xDA, 0x0F, 0x02, 0x00, 0xDB, -/* 000079E0 */ 0x0F, 0x02, 0x00, 0x70, 0x10, 0x02, 0x00, 0x71, 0x10, 0x02, 0x00, 0xBF, 0x10, 0x02, 0x00, 0xF7, -/* 000079F0 */ 0x10, 0x02, 0x00, 0x2F, 0x11, 0x02, 0x00, 0x9D, 0x11, 0x02, 0x00, 0xB7, 0x11, 0x02, 0x00, 0x02, -/* 00007A00 */ 0x12, 0x02, 0x00, 0x63, 0x12, 0x02, 0x00, 0xD1, 0x12, 0x02, 0x00, 0xEB, 0x12, 0x02, 0x00, 0xEC, -/* 00007A10 */ 0x12, 0x02, 0x00, 0x0D, 0x13, 0x02, 0x00, 0x48, 0x13, 0x02, 0x00, 0x81, 0x13, 0x02, 0x00, 0xC6, -/* 00007A20 */ 0x13, 0x02, 0x00, 0x17, 0x14, 0x02, 0x00, 0x72, 0x14, 0x02, 0x00, 0x07, 0x15, 0x02, 0x00, 0x9C, -/* 00007A30 */ 0x15, 0x02, 0x00, 0xB6, 0x15, 0x02, 0x00, 0x03, 0x16, 0x02, 0x00, 0x17, 0x16, 0x02, 0x00, 0x18, -/* 00007A40 */ 0x16, 0x02, 0x00, 0x5E, 0x16, 0x02, 0x00, 0xA6, 0x16, 0x02, 0x00, 0xDE, 0x16, 0x02, 0x00, 0x44, -/* 00007A50 */ 0x17, 0x02, 0x00, 0x5E, 0x17, 0x02, 0x00, 0x5F, 0x17, 0x02, 0x00, 0xAA, 0x17, 0x02, 0x00, 0x0B, -/* 00007A60 */ 0x18, 0x02, 0x00, 0x71, 0x18, 0x02, 0x00, 0x8B, 0x18, 0x02, 0x00, 0x8C, 0x18, 0x02, 0x00, 0xC8, -/* 00007A70 */ 0x18, 0x02, 0x00, 0x06, 0x19, 0x02, 0x00, 0x1A, 0x19, 0x02, 0x00, 0x1B, 0x19, 0x02, 0x00, 0x3C, -/* 00007A80 */ 0x19, 0x02, 0x00, 0x4A, 0x19, 0x02, 0x00, 0x54, 0x19, 0x02, 0x00, 0x9F, 0x19, 0x02, 0x00, 0xB9, -/* 00007A90 */ 0x19, 0x02, 0x00, 0xC3, 0x19, 0x02, 0x00, 0xC4, 0x19, 0x02, 0x00, 0xFE, 0x19, 0x02, 0x00, 0x24, -/* 00007AA0 */ 0x1A, 0x02, 0x00, 0x60, 0x1A, 0x02, 0x00, 0xB1, 0x1A, 0x02, 0x00, 0xE8, 0x1A, 0x02, 0x00, 0x18, -/* 00007AB0 */ 0x1B, 0x02, 0x00, 0x2A, 0x1B, 0x02, 0x00, 0x2B, 0x1B, 0x02, 0x00, 0xC2, 0x1B, 0x02, 0x00, 0x20, -/* 00007AC0 */ 0x1C, 0x02, 0x00, 0x32, 0x1C, 0x02, 0x00, 0x33, 0x1C, 0x02, 0x00, 0x70, 0x1C, 0x02, 0x00, 0x71, -/* 00007AD0 */ 0x1C, 0x02, 0x00, 0x94, 0x1C, 0x02, 0x00, 0xCA, 0x1C, 0x02, 0x00, 0x00, 0x1D, 0x02, 0x00, 0x19, -/* 00007AE0 */ 0x1D, 0x02, 0x00, 0x53, 0x1D, 0x02, 0x00, 0x65, 0x1D, 0x02, 0x00, 0x66, 0x1D, 0x02, 0x00, 0xD7, -/* 00007AF0 */ 0x1D, 0x02, 0x00, 0x49, 0x1E, 0x02, 0x00, 0x4A, 0x1E, 0x02, 0x00, 0x95, 0x1E, 0x02, 0x00, 0xC0, -/* 00007B00 */ 0x1E, 0x02, 0x00, 0x00, 0x1F, 0x02, 0x00, 0x33, 0x1F, 0x02, 0x00, 0x74, 0x1F, 0x02, 0x00, 0x86, -/* 00007B10 */ 0x1F, 0x02, 0x00, 0x87, 0x1F, 0x02, 0x00, 0xE6, 0x1F, 0x02, 0x00, 0x63, 0x20, 0x02, 0x00, 0x93, -/* 00007B20 */ 0x20, 0x02, 0x00, 0x94, 0x20, 0x02, 0x00, 0xFB, 0x20, 0x02, 0x00, 0x32, 0x21, 0x02, 0x00, 0x69, -/* 00007B30 */ 0x21, 0x02, 0x00, 0xA7, 0x21, 0x02, 0x00, 0xA8, 0x21, 0x02, 0x00, 0xF9, 0x21, 0x02, 0x00, 0x4A, -/* 00007B40 */ 0x22, 0x02, 0x00, 0x4B, 0x22, 0x02, 0x00, 0xC5, 0x22, 0x02, 0x00, 0x34, 0x23, 0x02, 0x00, 0xBB, -/* 00007B50 */ 0x23, 0x02, 0x00, 0xCD, 0x23, 0x02, 0x00, 0xCE, 0x23, 0x02, 0x00, 0x2F, 0x24, 0x02, 0x00, 0x30, -/* 00007B60 */ 0x24, 0x02, 0x00, 0x68, 0x24, 0x02, 0x00, 0xA9, 0x24, 0x02, 0x00, 0x16, 0x25, 0x02, 0x00, 0x17, -/* 00007B70 */ 0x25, 0x02, 0x00, 0x4B, 0x25, 0x02, 0x00, 0xA9, 0x25, 0x02, 0x00, 0xF2, 0x25, 0x02, 0x00, 0x04, -/* 00007B80 */ 0x26, 0x02, 0x00, 0x05, 0x26, 0x02, 0x00, 0x31, 0x26, 0x02, 0x00, 0x6C, 0x26, 0x02, 0x00, 0xA9, -/* 00007B90 */ 0x26, 0x02, 0x00, 0xBF, 0x26, 0x02, 0x00, 0x15, 0x27, 0x02, 0x00, 0x2F, 0x27, 0x02, 0x00, 0x7B, -/* 00007BA0 */ 0x27, 0x02, 0x00, 0x9D, 0x27, 0x02, 0x00, 0xCB, 0x27, 0x02, 0x00, 0x18, 0x28, 0x02, 0x00, 0x2E, -/* 00007BB0 */ 0x28, 0x02, 0x00, 0xA4, 0x28, 0x02, 0x00, 0x08, 0x29, 0x02, 0x00, 0x21, 0x29, 0x02, 0x00, 0x4B, -/* 00007BC0 */ 0x29, 0x02, 0x00, 0x7C, 0x29, 0x02, 0x00, 0xE5, 0x29, 0x02, 0x00, 0x14, 0x2A, 0x02, 0x00, 0x6F, -/* 00007BD0 */ 0x2A, 0x02, 0x00, 0x8C, 0x2A, 0x02, 0x00, 0xE6, 0x2A, 0x02, 0x00, 0xFC, 0x2A, 0x02, 0x00, 0x0E, -/* 00007BE0 */ 0x2B, 0x02, 0x00, 0x0F, 0x2B, 0x02, 0x00, 0xA3, 0x2B, 0x02, 0x00, 0xA4, 0x2B, 0x02, 0x00, 0xD5, -/* 00007BF0 */ 0x2B, 0x02, 0x00, 0x0D, 0x2C, 0x02, 0x00, 0x50, 0x2C, 0x02, 0x00, 0x7E, 0x2C, 0x02, 0x00, 0x7F, -/* 00007C00 */ 0x2C, 0x02, 0x00, 0xAD, 0x2C, 0x02, 0x00, 0xE5, 0x2C, 0x02, 0x00, 0xF7, 0x2C, 0x02, 0x00, 0xF8, -/* 00007C10 */ 0x2C, 0x02, 0x00, 0x2D, 0x2D, 0x02, 0x00, 0x73, 0x2D, 0x02, 0x00, 0xD2, 0x2D, 0x02, 0x00, 0x0A, -/* 00007C20 */ 0x2E, 0x02, 0x00, 0x6C, 0x2E, 0x02, 0x00, 0xA9, 0x2E, 0x02, 0x00, 0x09, 0x2F, 0x02, 0x00, 0x46, -/* 00007C30 */ 0x2F, 0x02, 0x00, 0xA6, 0x2F, 0x02, 0x00, 0xBC, 0x2F, 0x02, 0x00, 0xCE, 0x2F, 0x02, 0x00, 0xCF, -/* 00007C40 */ 0x2F, 0x02, 0x00, 0x1B, 0x30, 0x02, 0x00, 0x69, 0x30, 0x02, 0x00, 0xB7, 0x30, 0x02, 0x00, 0xB8, -/* 00007C50 */ 0x30, 0x02, 0x00, 0xF6, 0x30, 0x02, 0x00, 0x4E, 0x31, 0x02, 0x00, 0xA6, 0x31, 0x02, 0x00, 0xB8, -/* 00007C60 */ 0x31, 0x02, 0x00, 0xB9, 0x31, 0x02, 0x00, 0xF9, 0x31, 0x02, 0x00, 0x33, 0x32, 0x02, 0x00, 0x34, -/* 00007C70 */ 0x32, 0x02, 0x00, 0x4A, 0x32, 0x02, 0x00, 0x9E, 0x32, 0x02, 0x00, 0xDC, 0x32, 0x02, 0x00, 0xFA, -/* 00007C80 */ 0x32, 0x02, 0x00, 0x24, 0x33, 0x02, 0x00, 0x7B, 0x33, 0x02, 0x00, 0x00, 0x34, 0x02, 0x00, 0x65, -/* 00007C90 */ 0x34, 0x02, 0x00, 0xA0, 0x34, 0x02, 0x00, 0xB2, 0x34, 0x02, 0x00, 0xB3, 0x34, 0x02, 0x00, 0xEA, -/* 00007CA0 */ 0x34, 0x02, 0x00, 0x4B, 0x35, 0x02, 0x00, 0x5D, 0x35, 0x02, 0x00, 0x5E, 0x35, 0x02, 0x00, 0xDC, -/* 00007CB0 */ 0x35, 0x02, 0x00, 0x1B, 0x36, 0x02, 0x00, 0x29, 0x36, 0x02, 0x00, 0x2A, 0x36, 0x02, 0x00, 0x9A, -/* 00007CC0 */ 0x36, 0x02, 0x00, 0xE9, 0x36, 0x02, 0x00, 0x4A, 0x37, 0x02, 0x00, 0x5C, 0x37, 0x02, 0x00, 0x5D, -/* 00007CD0 */ 0x37, 0x02, 0x00, 0x97, 0x37, 0x02, 0x00, 0xE8, 0x37, 0x02, 0x00, 0xE9, 0x37, 0x02, 0x00, 0x1A, -/* 00007CE0 */ 0x38, 0x02, 0x00, 0x60, 0x38, 0x02, 0x00, 0x9D, 0x38, 0x02, 0x00, 0x9E, 0x38, 0x02, 0x00, 0xC5, -/* 00007CF0 */ 0x38, 0x02, 0x00, 0x17, 0x39, 0x02, 0x00, 0x56, 0x39, 0x02, 0x00, 0x99, 0x39, 0x02, 0x00, 0xAF, -/* 00007D00 */ 0x39, 0x02, 0x00, 0xB0, 0x39, 0x02, 0x00, 0xE7, 0x39, 0x02, 0x00, 0xE8, 0x39, 0x02, 0x00, 0x1C, -/* 00007D10 */ 0x3A, 0x02, 0x00, 0x69, 0x3A, 0x02, 0x00, 0x7F, 0x3A, 0x02, 0x00, 0x80, 0x3A, 0x02, 0x00, 0xBB, -/* 00007D20 */ 0x3A, 0x02, 0x00, 0x01, 0x3B, 0x02, 0x00, 0x02, 0x3B, 0x02, 0x00, 0x38, 0x3B, 0x02, 0x00, 0x77, -/* 00007D30 */ 0x3B, 0x02, 0x00, 0xBC, 0x3B, 0x02, 0x00, 0xD2, 0x3B, 0x02, 0x00, 0xD3, 0x3B, 0x02, 0x00, 0x1F, -/* 00007D40 */ 0x3C, 0x02, 0x00, 0x20, 0x3C, 0x02, 0x00, 0x85, 0x3C, 0x02, 0x00, 0xC1, 0x3C, 0x02, 0x00, 0xC2, -/* 00007D50 */ 0x3C, 0x02, 0x00, 0xE2, 0x3C, 0x02, 0x00, 0xF4, 0x3C, 0x02, 0x00, 0x3A, 0x3D, 0x02, 0x00, 0x3B, -/* 00007D60 */ 0x3D, 0x02, 0x00, 0x60, 0x3D, 0x02, 0x00, 0x8E, 0x3D, 0x02, 0x00, 0x8F, 0x3D, 0x02, 0x00, 0xC3, -/* 00007D70 */ 0x3D, 0x02, 0x00, 0x2C, 0x3E, 0x02, 0x00, 0x42, 0x3E, 0x02, 0x00, 0x43, 0x3E, 0x02, 0x00, 0x8A, -/* 00007D80 */ 0x3E, 0x02, 0x00, 0xEB, 0x3E, 0x02, 0x00, 0x54, 0x3F, 0x02, 0x00, 0x6A, 0x3F, 0x02, 0x00, 0x6B, -/* 00007D90 */ 0x3F, 0x02, 0x00, 0xB6, 0x3F, 0x02, 0x00, 0xC8, 0x3F, 0x02, 0x00, 0x19, 0x40, 0x02, 0x00, 0x1A, -/* 00007DA0 */ 0x40, 0x02, 0x00, 0xB4, 0x40, 0x02, 0x00, 0xB5, 0x40, 0x02, 0x00, 0x31, 0x41, 0x02, 0x00, 0xAF, -/* 00007DB0 */ 0x41, 0x02, 0x00, 0xD3, 0x41, 0x02, 0x00, 0xD4, 0x41, 0x02, 0x00, 0x6D, 0x42, 0x02, 0x00, 0xB5, -/* 00007DC0 */ 0x42, 0x02, 0x00, 0x52, 0x43, 0x02, 0x00, 0x53, 0x43, 0x02, 0x00, 0xA5, 0x43, 0x02, 0x00, 0xDD, -/* 00007DD0 */ 0x43, 0x02, 0x00, 0x15, 0x44, 0x02, 0x00, 0x8B, 0x44, 0x02, 0x00, 0xA5, 0x44, 0x02, 0x00, 0xF0, -/* 00007DE0 */ 0x44, 0x02, 0x00, 0x55, 0x45, 0x02, 0x00, 0xCB, 0x45, 0x02, 0x00, 0xE5, 0x45, 0x02, 0x00, 0xE6, -/* 00007DF0 */ 0x45, 0x02, 0x00, 0x2C, 0x46, 0x02, 0x00, 0x2D, 0x46, 0x02, 0x00, 0x89, 0x46, 0x02, 0x00, 0xDF, -/* 00007E00 */ 0x46, 0x02, 0x00, 0x36, 0x47, 0x02, 0x00, 0x54, 0x47, 0x02, 0x00, 0x70, 0x47, 0x02, 0x00, 0x71, -/* 00007E10 */ 0x47, 0x02, 0x00, 0xB3, 0x47, 0x02, 0x00, 0x00, 0x48, 0x02, 0x00, 0x14, 0x48, 0x02, 0x00, 0x15, -/* 00007E20 */ 0x48, 0x02, 0x00, 0x5E, 0x48, 0x02, 0x00, 0xA5, 0x48, 0x02, 0x00, 0xDD, 0x48, 0x02, 0x00, 0x4A, -/* 00007E30 */ 0x49, 0x02, 0x00, 0x64, 0x49, 0x02, 0x00, 0x65, 0x49, 0x02, 0x00, 0xB0, 0x49, 0x02, 0x00, 0x15, -/* 00007E40 */ 0x4A, 0x02, 0x00, 0x82, 0x4A, 0x02, 0x00, 0x9C, 0x4A, 0x02, 0x00, 0x9D, 0x4A, 0x02, 0x00, 0xD8, -/* 00007E50 */ 0x4A, 0x02, 0x00, 0x16, 0x4B, 0x02, 0x00, 0x2A, 0x4B, 0x02, 0x00, 0x2B, 0x4B, 0x02, 0x00, 0x50, -/* 00007E60 */ 0x4B, 0x02, 0x00, 0x5E, 0x4B, 0x02, 0x00, 0x68, 0x4B, 0x02, 0x00, 0xB7, 0x4B, 0x02, 0x00, 0xD1, -/* 00007E70 */ 0x4B, 0x02, 0x00, 0xDB, 0x4B, 0x02, 0x00, 0xDC, 0x4B, 0x02, 0x00, 0x5C, 0x4C, 0x02, 0x00, 0x84, -/* 00007E80 */ 0x4C, 0x02, 0x00, 0xBE, 0x4C, 0x02, 0x00, 0x04, 0x4D, 0x02, 0x00, 0x31, 0x4D, 0x02, 0x00, 0x67, -/* 00007E90 */ 0x4D, 0x02, 0x00, 0x80, 0x4D, 0x02, 0x00, 0xBA, 0x4D, 0x02, 0x00, 0xCC, 0x4D, 0x02, 0x00, 0xCD, -/* 00007EA0 */ 0x4D, 0x02, 0x00, 0xF6, 0x4D, 0x02, 0x00, 0x37, 0x4E, 0x02, 0x00, 0xCA, 0x4E, 0x02, 0x00, 0xF8, -/* 00007EB0 */ 0x4E, 0x02, 0x00, 0x0E, 0x4F, 0x02, 0x00, 0x20, 0x4F, 0x02, 0x00, 0x61, 0x4F, 0x02, 0x00, 0xD7, -/* 00007EC0 */ 0x4F, 0x02, 0x00, 0x05, 0x50, 0x02, 0x00, 0x1B, 0x50, 0x02, 0x00, 0x2D, 0x50, 0x02, 0x00, 0x2E, -/* 00007ED0 */ 0x50, 0x02, 0x00, 0x81, 0x50, 0x02, 0x00, 0xBD, 0x50, 0x02, 0x00, 0xF7, 0x50, 0x02, 0x00, 0x34, -/* 00007EE0 */ 0x51, 0x02, 0x00, 0x4C, 0x51, 0x02, 0x00, 0x89, 0x51, 0x02, 0x00, 0xC3, 0x51, 0x02, 0x00, 0x00, -/* 00007EF0 */ 0x52, 0x02, 0x00, 0x18, 0x52, 0x02, 0x00, 0x53, 0x52, 0x02, 0x00, 0x8D, 0x52, 0x02, 0x00, 0xCA, -/* 00007F00 */ 0x52, 0x02, 0x00, 0xE2, 0x52, 0x02, 0x00, 0xF4, 0x52, 0x02, 0x00, 0x47, 0x53, 0x02, 0x00, 0x83, -/* 00007F10 */ 0x53, 0x02, 0x00, 0xBD, 0x53, 0x02, 0x00, 0xFA, 0x53, 0x02, 0x00, 0x12, 0x54, 0x02, 0x00, 0x50, -/* 00007F20 */ 0x54, 0x02, 0x00, 0x8A, 0x54, 0x02, 0x00, 0xC7, 0x54, 0x02, 0x00, 0xDF, 0x54, 0x02, 0x00, 0x1D, -/* 00007F30 */ 0x55, 0x02, 0x00, 0x57, 0x55, 0x02, 0x00, 0x94, 0x55, 0x02, 0x00, 0xAC, 0x55, 0x02, 0x00, 0xBE, -/* 00007F40 */ 0x55, 0x02, 0x00, 0xDE, 0x55, 0x02, 0x00, 0xEC, 0x55, 0x02, 0x00, 0xED, 0x55, 0x02, 0x00, 0x77, -/* 00007F50 */ 0x56, 0x02, 0x00, 0xB4, 0x56, 0x02, 0x00, 0xD7, 0x56, 0x02, 0x00, 0xD8, 0x56, 0x02, 0x00, 0xFF, -/* 00007F60 */ 0x56, 0x02, 0x00, 0x56, 0x57, 0x02, 0x00, 0xB6, 0x57, 0x02, 0x00, 0xF3, 0x57, 0x02, 0x00, 0x4C, -/* 00007F70 */ 0x58, 0x02, 0x00, 0x62, 0x58, 0x02, 0x00, 0x74, 0x58, 0x02, 0x00, 0x75, 0x58, 0x02, 0x00, 0xA0, -/* 00007F80 */ 0x58, 0x02, 0x00, 0xC4, 0x58, 0x02, 0x00, 0xFA, 0x58, 0x02, 0x00, 0x55, 0x59, 0x02, 0x00, 0x92, -/* 00007F90 */ 0x59, 0x02, 0x00, 0xE6, 0x59, 0x02, 0x00, 0xFC, 0x59, 0x02, 0x00, 0x0E, 0x5A, 0x02, 0x00, 0x0F, -/* 00007FA0 */ 0x5A, 0x02, 0x00, 0x34, 0x5A, 0x02, 0x00, 0x8A, 0x5A, 0x02, 0x00, 0xE1, 0x5A, 0x02, 0x00, 0x3B, -/* 00007FB0 */ 0x5B, 0x02, 0x00, 0x97, 0x5B, 0x02, 0x00, 0xD2, 0x5B, 0x02, 0x00, 0x27, 0x5C, 0x02, 0x00, 0x3D, -/* 00007FC0 */ 0x5C, 0x02, 0x00, 0x4F, 0x5C, 0x02, 0x00, 0x50, 0x5C, 0x02, 0x00, 0x73, 0x5C, 0x02, 0x00, 0xBD, -/* 00007FD0 */ 0x5C, 0x02, 0x00, 0xCF, 0x5C, 0x02, 0x00, 0xD0, 0x5C, 0x02, 0x00, 0xFC, 0x5C, 0x02, 0x00, 0x38, -/* 00007FE0 */ 0x5D, 0x02, 0x00, 0x97, 0x5D, 0x02, 0x00, 0xD9, 0x5D, 0x02, 0x00, 0x31, 0x5E, 0x02, 0x00, 0x47, -/* 00007FF0 */ 0x5E, 0x02, 0x00, 0x59, 0x5E, 0x02, 0x00, 0x5A, 0x5E, 0x02, 0x00, 0xC0, 0x5E, 0x02, 0x00, 0xE8, -/* 00008000 */ 0x5E, 0x02, 0x00, 0x34, 0x5F, 0x02, 0x00, 0x4A, 0x5F, 0x02, 0x00, 0x5E, 0x5F, 0x02, 0x00, 0x5F, -/* 00008010 */ 0x5F, 0x02, 0x00, 0x95, 0x5F, 0x02, 0x00, 0x0B, 0x60, 0x02, 0x00, 0x19, 0x60, 0x02, 0x00, 0x1A, -/* 00008020 */ 0x60, 0x02, 0x00, 0x47, 0x60, 0x02, 0x00, 0x77, 0x60, 0x02, 0x00, 0xA3, 0x60, 0x02, 0x00, 0xCF, -/* 00008030 */ 0x60, 0x02, 0x00, 0xFF, 0x60, 0x02, 0x00, 0x2B, 0x61, 0x02, 0x00, 0x57, 0x61, 0x02, 0x00, 0x8C, -/* 00008040 */ 0x61, 0x02, 0x00, 0xB4, 0x61, 0x02, 0x00, 0xDF, 0x61, 0x02, 0x00, 0xEE, 0x61, 0x02, 0x00, 0xEF, -/* 00008050 */ 0x61, 0x02, 0x00, 0x26, 0x62, 0x02, 0x00, 0x5D, 0x62, 0x02, 0x00, 0x7C, 0x62, 0x02, 0x00, 0x8E, -/* 00008060 */ 0x62, 0x02, 0x00, 0x8F, 0x62, 0x02, 0x00, 0xD7, 0x62, 0x02, 0x00, 0xE5, 0x62, 0x02, 0x00, 0xE6, -/* 00008070 */ 0x62, 0x02, 0x00, 0x56, 0x63, 0x02, 0x00, 0xB2, 0x63, 0x02, 0x00, 0x28, 0x64, 0x02, 0x00, 0xB9, -/* 00008080 */ 0x64, 0x02, 0x00, 0x37, 0x65, 0x02, 0x00, 0x5D, 0x65, 0x02, 0x00, 0x52, 0x66, 0x02, 0x00, 0x7C, -/* 00008090 */ 0x66, 0x02, 0x00, 0x8E, 0x66, 0x02, 0x00, 0x8F, 0x66, 0x02, 0x00, 0xD2, 0x66, 0x02, 0x00, 0x54, -/* 000080A0 */ 0x67, 0x02, 0x00, 0x87, 0x67, 0x02, 0x00, 0x3D, 0x68, 0x02, 0x00, 0x4F, 0x68, 0x02, 0x00, 0x75, -/* 000080B0 */ 0x68, 0x02, 0x00, 0x83, 0x68, 0x02, 0x00, 0x84, 0x68, 0x02, 0x00, 0xE9, 0x68, 0x02, 0x00, 0x33, -/* 000080C0 */ 0x69, 0x02, 0x00, 0xA7, 0x69, 0x02, 0x00, 0x38, 0x6A, 0x02, 0x00, 0x5E, 0x6A, 0x02, 0x00, 0x5E, -/* 000080D0 */ 0x6B, 0x02, 0x00, 0x88, 0x6B, 0x02, 0x00, 0x9A, 0x6B, 0x02, 0x00, 0x9B, 0x6B, 0x02, 0x00, 0xE5, -/* 000080E0 */ 0x6B, 0x02, 0x00, 0x14, 0x6C, 0x02, 0x00, 0x92, 0x6C, 0x02, 0x00, 0xC7, 0x6C, 0x02, 0x00, 0x42, -/* 000080F0 */ 0x6D, 0x02, 0x00, 0x54, 0x6D, 0x02, 0x00, 0x55, 0x6D, 0x02, 0x00, 0x7B, 0x6D, 0x02, 0x00, 0x89, -/* 00008100 */ 0x6D, 0x02, 0x00, 0x8A, 0x6D, 0x02, 0x00, 0xEC, 0x6D, 0x02, 0x00, 0x37, 0x6E, 0x02, 0x00, 0x75, -/* 00008110 */ 0x6E, 0x02, 0x00, 0xEE, 0x6E, 0x02, 0x00, 0x00, 0x6F, 0x02, 0x00, 0x01, 0x6F, 0x02, 0x00, 0x3B, -/* 00008120 */ 0x6F, 0x02, 0x00, 0xA8, 0x6F, 0x02, 0x00, 0x07, 0x70, 0x02, 0x00, 0x7C, 0x70, 0x02, 0x00, 0x8E, -/* 00008130 */ 0x70, 0x02, 0x00, 0x8F, 0x70, 0x02, 0x00, 0xCA, 0x70, 0x02, 0x00, 0x35, 0x71, 0x02, 0x00, 0x5F, -/* 00008140 */ 0x71, 0x02, 0x00, 0xD3, 0x71, 0x02, 0x00, 0xF0, 0x71, 0x02, 0x00, 0x73, 0x72, 0x02, 0x00, 0x89, -/* 00008150 */ 0x72, 0x02, 0x00, 0xC8, 0x72, 0x02, 0x00, 0x33, 0x73, 0x02, 0x00, 0x5D, 0x73, 0x02, 0x00, 0xD1, -/* 00008160 */ 0x73, 0x02, 0x00, 0xEE, 0x73, 0x02, 0x00, 0x67, 0x74, 0x02, 0x00, 0x7D, 0x74, 0x02, 0x00, 0x8F, -/* 00008170 */ 0x74, 0x02, 0x00, 0x90, 0x74, 0x02, 0x00, 0x25, 0x75, 0x02, 0x00, 0xB1, 0x75, 0x02, 0x00, 0x24, -/* 00008180 */ 0x76, 0x02, 0x00, 0x67, 0x76, 0x02, 0x00, 0xE3, 0x76, 0x02, 0x00, 0xF5, 0x76, 0x02, 0x00, 0xF6, -/* 00008190 */ 0x76, 0x02, 0x00, 0x30, 0x77, 0x02, 0x00, 0xA8, 0x77, 0x02, 0x00, 0xBA, 0x77, 0x02, 0x00, 0xBB, -/* 000081A0 */ 0x77, 0x02, 0x00, 0xF6, 0x77, 0x02, 0x00, 0x70, 0x78, 0x02, 0x00, 0x82, 0x78, 0x02, 0x00, 0x83, -/* 000081B0 */ 0x78, 0x02, 0x00, 0xC0, 0x78, 0x02, 0x00, 0x3E, 0x79, 0x02, 0x00, 0x50, 0x79, 0x02, 0x00, 0x51, -/* 000081C0 */ 0x79, 0x02, 0x00, 0x8E, 0x79, 0x02, 0x00, 0x0C, 0x7A, 0x02, 0x00, 0x1E, 0x7A, 0x02, 0x00, 0x1F, -/* 000081D0 */ 0x7A, 0x02, 0x00, 0x62, 0x7A, 0x02, 0x00, 0xDF, 0x7A, 0x02, 0x00, 0xF1, 0x7A, 0x02, 0x00, 0xF2, -/* 000081E0 */ 0x7A, 0x02, 0x00, 0x18, 0x7B, 0x02, 0x00, 0x26, 0x7B, 0x02, 0x00, 0x27, 0x7B, 0x02, 0x00, 0x7C, -/* 000081F0 */ 0x7B, 0x02, 0x00, 0xB5, 0x7B, 0x02, 0x00, 0xE5, 0x7B, 0x02, 0x00, 0xF7, 0x7B, 0x02, 0x00, 0xF8, -/* 00008200 */ 0x7B, 0x02, 0x00, 0x93, 0x7C, 0x02, 0x00, 0xF5, 0x7C, 0x02, 0x00, 0x07, 0x7D, 0x02, 0x00, 0x08, -/* 00008210 */ 0x7D, 0x02, 0x00, 0x47, 0x7D, 0x02, 0x00, 0x48, 0x7D, 0x02, 0x00, 0x6F, 0x7D, 0x02, 0x00, 0xB4, -/* 00008220 */ 0x7D, 0x02, 0x00, 0xB5, 0x7D, 0x02, 0x00, 0x26, 0x7E, 0x02, 0x00, 0x85, 0x7E, 0x02, 0x00, 0x86, -/* 00008230 */ 0x7E, 0x02, 0x00, 0xB4, 0x7E, 0x02, 0x00, 0x07, 0x7F, 0x02, 0x00, 0x20, 0x7F, 0x02, 0x00, 0x5E, -/* 00008240 */ 0x7F, 0x02, 0x00, 0x70, 0x7F, 0x02, 0x00, 0x71, 0x7F, 0x02, 0x00, 0x9F, 0x7F, 0x02, 0x00, 0xDA, -/* 00008250 */ 0x7F, 0x02, 0x00, 0xEC, 0x7F, 0x02, 0x00, 0xED, 0x7F, 0x02, 0x00, 0x0F, 0x80, 0x02, 0x00, 0x7E, -/* 00008260 */ 0x80, 0x02, 0x00, 0xE5, 0x80, 0x02, 0x00, 0x49, 0x81, 0x02, 0x00, 0xCA, 0x81, 0x02, 0x00, 0x2C, -/* 00008270 */ 0x82, 0x02, 0x00, 0x90, 0x82, 0x02, 0x00, 0xF8, 0x82, 0x02, 0x00, 0x60, 0x83, 0x02, 0x00, 0xCF, -/* 00008280 */ 0x83, 0x02, 0x00, 0xD0, 0x83, 0x02, 0x00, 0x3F, 0x84, 0x02, 0x00, 0xB5, 0x84, 0x02, 0x00, 0xB6, -/* 00008290 */ 0x84, 0x02, 0x00, 0x26, 0x85, 0x02, 0x00, 0x27, 0x85, 0x02, 0x00, 0x78, 0x85, 0x02, 0x00, 0x9E, -/* 000082A0 */ 0x85, 0x02, 0x00, 0xBC, 0x85, 0x02, 0x00, 0xDC, 0x85, 0x02, 0x00, 0xFE, 0x85, 0x02, 0x00, 0x1C, -/* 000082B0 */ 0x86, 0x02, 0x00, 0x3C, 0x86, 0x02, 0x00, 0x60, 0x86, 0x02, 0x00, 0x84, 0x86, 0x02, 0x00, 0xB3, -/* 000082C0 */ 0x86, 0x02, 0x00, 0xCE, 0x86, 0x02, 0x00, 0xCF, 0x86, 0x02, 0x00, 0xF7, 0x86, 0x02, 0x00, 0x38, -/* 000082D0 */ 0x87, 0x02, 0x00, 0xAB, 0x87, 0x02, 0x00, 0xAC, 0x87, 0x02, 0x00, 0xD2, 0x87, 0x02, 0x00, 0x06, -/* 000082E0 */ 0x88, 0x02, 0x00, 0x3C, 0x88, 0x02, 0x00, 0x81, 0x88, 0x02, 0x00, 0x82, 0x88, 0x02, 0x00, 0xA4, -/* 000082F0 */ 0x88, 0x02, 0x00, 0xD8, 0x88, 0x02, 0x00, 0x04, 0x89, 0x02, 0x00, 0x32, 0x89, 0x02, 0x00, 0x62, -/* 00008300 */ 0x89, 0x02, 0x00, 0x8E, 0x89, 0x02, 0x00, 0xBC, 0x89, 0x02, 0x00, 0xEE, 0x89, 0x02, 0x00, 0x20, -/* 00008310 */ 0x8A, 0x02, 0x00, 0x5E, 0x8A, 0x02, 0x00, 0x5F, 0x8A, 0x02, 0x00, 0x91, 0x8A, 0x02, 0x00, 0xD1, -/* 00008320 */ 0x8A, 0x02, 0x00, 0x0F, 0x8B, 0x02, 0x00, 0x10, 0x8B, 0x02, 0x00, 0x52, 0x8B, 0x02, 0x00, 0x53, -/* 00008330 */ 0x8B, 0x02, 0x00, 0x66, 0x8B, 0x02, 0x00, 0x82, 0x8B, 0x02, 0x00, 0xDA, 0x8B, 0x02, 0x00, 0x54, -/* 00008340 */ 0x8C, 0x02, 0x00, 0xF9, 0x8C, 0x02, 0x00, 0xA0, 0x8D, 0x02, 0x00, 0x08, 0x8E, 0x02, 0x00, 0x1F, -/* 00008350 */ 0x8E, 0x02, 0x00, 0x48, 0x8E, 0x02, 0x00, 0x49, 0x8E, 0x02, 0x00, 0x5F, 0x8E, 0x02, 0x00, 0xAE, -/* 00008360 */ 0x8E, 0x02, 0x00, 0xEF, 0x8E, 0x02, 0x00, 0x0D, 0x8F, 0x02, 0x00, 0x37, 0x8F, 0x02, 0x00, 0x61, -/* 00008370 */ 0x8F, 0x02, 0x00, 0x62, 0x8F, 0x02, 0x00, 0xD0, 0x8F, 0x02, 0x00, 0x26, 0x90, 0x02, 0x00, 0x7A, -/* 00008380 */ 0x90, 0x02, 0x00, 0xE4, 0x90, 0x02, 0x00, 0x0C, 0x91, 0x02, 0x00, 0x1E, 0x91, 0x02, 0x00, 0x1F, -/* 00008390 */ 0x91, 0x02, 0x00, 0x43, 0x91, 0x02, 0x00, 0x75, 0x91, 0x02, 0x00, 0xF5, 0x91, 0x02, 0x00, 0x07, -/* 000083A0 */ 0x92, 0x02, 0x00, 0x08, 0x92, 0x02, 0x00, 0x1E, 0x92, 0x02, 0x00, 0x53, 0x92, 0x02, 0x00, 0x93, -/* 000083B0 */ 0x92, 0x02, 0x00, 0xB1, 0x92, 0x02, 0x00, 0xDB, 0x92, 0x02, 0x00, 0x05, 0x93, 0x02, 0x00, 0x06, -/* 000083C0 */ 0x93, 0x02, 0x00, 0x68, 0x93, 0x02, 0x00, 0xED, 0x93, 0x02, 0x00, 0x52, 0x94, 0x02, 0x00, 0x8D, -/* 000083D0 */ 0x94, 0x02, 0x00, 0x9F, 0x94, 0x02, 0x00, 0xA0, 0x94, 0x02, 0x00, 0xCD, 0x94, 0x02, 0x00, 0x32, -/* 000083E0 */ 0x95, 0x02, 0x00, 0x33, 0x95, 0x02, 0x00, 0xB5, 0x95, 0x02, 0x00, 0xF0, 0x95, 0x02, 0x00, 0x4F, -/* 000083F0 */ 0x96, 0x02, 0x00, 0x61, 0x96, 0x02, 0x00, 0xA4, 0x96, 0x02, 0x00, 0xB2, 0x96, 0x02, 0x00, 0xB3, -/* 00008400 */ 0x96, 0x02, 0x00, 0x09, 0x97, 0x02, 0x00, 0x67, 0x97, 0x02, 0x00, 0xB7, 0x97, 0x02, 0x00, 0xDA, -/* 00008410 */ 0x97, 0x02, 0x00, 0x01, 0x98, 0x02, 0x00, 0x27, 0x98, 0x02, 0x00, 0x3D, 0x98, 0x02, 0x00, 0x3E, -/* 00008420 */ 0x98, 0x02, 0x00, 0xB3, 0x98, 0x02, 0x00, 0xFE, 0x98, 0x02, 0x00, 0x40, 0x99, 0x02, 0x00, 0x52, -/* 00008430 */ 0x99, 0x02, 0x00, 0xA5, 0x99, 0x02, 0x00, 0xDD, 0x99, 0x02, 0x00, 0x08, 0x9A, 0x02, 0x00, 0x1A, -/* 00008440 */ 0x9A, 0x02, 0x00, 0x1B, 0x9A, 0x02, 0x00, 0x48, 0x9A, 0x02, 0x00, 0xA4, 0x9A, 0x02, 0x00, 0x12, -/* 00008450 */ 0x9B, 0x02, 0x00, 0x61, 0x9B, 0x02, 0x00, 0x92, 0x9B, 0x02, 0x00, 0xED, 0x9B, 0x02, 0x00, 0x0A, -/* 00008460 */ 0x9C, 0x02, 0x00, 0x34, 0x9C, 0x02, 0x00, 0x72, 0x9C, 0x02, 0x00, 0xEC, 0x9C, 0x02, 0x00, 0x47, -/* 00008470 */ 0x9D, 0x02, 0x00, 0x5D, 0x9D, 0x02, 0x00, 0x6F, 0x9D, 0x02, 0x00, 0x70, 0x9D, 0x02, 0x00, 0x94, -/* 00008480 */ 0x9D, 0x02, 0x00, 0xCE, 0x9D, 0x02, 0x00, 0x40, 0x9E, 0x02, 0x00, 0x52, 0x9E, 0x02, 0x00, 0x53, -/* 00008490 */ 0x9E, 0x02, 0x00, 0xB1, 0x9E, 0x02, 0x00, 0xBF, 0x9E, 0x02, 0x00, 0xC0, 0x9E, 0x02, 0x00, 0x3D, -/* 000084A0 */ 0x9F, 0x02, 0x00, 0xC9, 0x9F, 0x02, 0x00, 0x48, 0xA0, 0x02, 0x00, 0xD1, 0xA0, 0x02, 0x00, 0xF6, -/* 000084B0 */ 0xA0, 0x02, 0x00, 0x05, 0xA1, 0x02, 0x00, 0x90, 0xA1, 0x02, 0x00, 0x16, 0xA2, 0x02, 0x00, 0xA0, -/* 000084C0 */ 0xA2, 0x02, 0x00, 0xF4, 0xA2, 0x02, 0x00, 0x03, 0xA3, 0x02, 0x00, 0x85, 0xA3, 0x02, 0x00, 0xF6, -/* 000084D0 */ 0xA3, 0x02, 0x00, 0x51, 0xA4, 0x02, 0x00, 0xBC, 0xA4, 0x02, 0x00, 0x36, 0xA5, 0x02, 0x00, 0x87, -/* 000084E0 */ 0xA5, 0x02, 0x00, 0x96, 0xA5, 0x02, 0x00, 0x0C, 0xA6, 0x02, 0x00, 0x1B, 0xA6, 0x02, 0x00, 0xA7, -/* 000084F0 */ 0xA6, 0x02, 0x00, 0x30, 0xA7, 0x02, 0x00, 0x7B, 0xA7, 0x02, 0x00, 0x7C, 0xA7, 0x02, 0x00, 0xCC, -/* 00008500 */ 0xA7, 0x02, 0x00, 0x69, 0xA8, 0x02, 0x00, 0xEE, 0xA8, 0x02, 0x00, 0x17, 0xA9, 0x02, 0x00, 0xBD, -/* 00008510 */ 0xA9, 0x02, 0x00, 0xBE, 0xA9, 0x02, 0x00, 0x0E, 0xAA, 0x02, 0x00, 0xAF, 0xAA, 0x02, 0x00, 0x34, -/* 00008520 */ 0xAB, 0x02, 0x00, 0x5D, 0xAB, 0x02, 0x00, 0x11, 0xAC, 0x02, 0x00, 0x12, 0xAC, 0x02, 0x00, 0x62, -/* 00008530 */ 0xAC, 0x02, 0x00, 0x03, 0xAD, 0x02, 0x00, 0x88, 0xAD, 0x02, 0x00, 0xB1, 0xAD, 0x02, 0x00, 0x65, -/* 00008540 */ 0xAE, 0x02, 0x00, 0x66, 0xAE, 0x02, 0x00, 0x8D, 0xAE, 0x02, 0x00, 0xE1, 0xAE, 0x02, 0x00, 0x20, -/* 00008550 */ 0xAF, 0x02, 0x00, 0x65, 0xAF, 0x02, 0x00, 0x7B, 0xAF, 0x02, 0x00, 0x7C, 0xAF, 0x02, 0x00, 0xB3, -/* 00008560 */ 0xAF, 0x02, 0x00, 0xE7, 0xAF, 0x02, 0x00, 0x36, 0xB0, 0x02, 0x00, 0x4C, 0xB0, 0x02, 0x00, 0x4D, -/* 00008570 */ 0xB0, 0x02, 0x00, 0x88, 0xB0, 0x02, 0x00, 0xCE, 0xB0, 0x02, 0x00, 0xCF, 0xB0, 0x02, 0x00, 0x05, -/* 00008580 */ 0xB1, 0x02, 0x00, 0x44, 0xB1, 0x02, 0x00, 0x89, 0xB1, 0x02, 0x00, 0x9F, 0xB1, 0x02, 0x00, 0xA0, -/* 00008590 */ 0xB1, 0x02, 0x00, 0xEE, 0xB1, 0x02, 0x00, 0xEF, 0xB1, 0x02, 0x00, 0x55, 0xB2, 0x02, 0x00, 0x91, -/* 000085A0 */ 0xB2, 0x02, 0x00, 0x92, 0xB2, 0x02, 0x00, 0xB2, 0xB2, 0x02, 0x00, 0xC4, 0xB2, 0x02, 0x00, 0x0E, -/* 000085B0 */ 0xB3, 0x02, 0x00, 0x0F, 0xB3, 0x02, 0x00, 0x37, 0xB3, 0x02, 0x00, 0x6B, 0xB3, 0x02, 0x00, 0xD8, -/* 000085C0 */ 0xB3, 0x02, 0x00, 0xEE, 0xB3, 0x02, 0x00, 0x35, 0xB4, 0x02, 0x00, 0x98, 0xB4, 0x02, 0x00, 0x05, -/* 000085D0 */ 0xB5, 0x02, 0x00, 0x1B, 0xB5, 0x02, 0x00, 0x1C, 0xB5, 0x02, 0x00, 0x6E, 0xB5, 0x02, 0x00, 0xA3, -/* 000085E0 */ 0xB5, 0x02, 0x00, 0xB9, 0xB5, 0x02, 0x00, 0xBA, 0xB5, 0x02, 0x00, 0xE9, 0xB5, 0x02, 0x00, 0x17, -/* 000085F0 */ 0xB6, 0x02, 0x00, 0x53, 0xB6, 0x02, 0x00, 0x70, 0xB6, 0x02, 0x00, 0x9F, 0xB6, 0x02, 0x00, 0xB5, -/* 00008600 */ 0xB6, 0x02, 0x00, 0xB6, 0xB6, 0x02, 0x00, 0x0B, 0xB7, 0x02, 0x00, 0x1D, 0xB7, 0x02, 0x00, 0x70, -/* 00008610 */ 0xB7, 0x02, 0x00, 0x71, 0xB7, 0x02, 0x00, 0xB8, 0xB7, 0x02, 0x00, 0xB9, 0xB7, 0x02, 0x00, 0x56, -/* 00008620 */ 0xB8, 0x02, 0x00, 0xA0, 0xB8, 0x02, 0x00, 0x41, 0xB9, 0x02, 0x00, 0x42, 0xB9, 0x02, 0x00, 0x8D, -/* 00008630 */ 0xB9, 0x02, 0x00, 0xD4, 0xB9, 0x02, 0x00, 0x0C, 0xBA, 0x02, 0x00, 0x7D, 0xBA, 0x02, 0x00, 0x97, -/* 00008640 */ 0xBA, 0x02, 0x00, 0x98, 0xBA, 0x02, 0x00, 0xE3, 0xBA, 0x02, 0x00, 0x4A, 0xBB, 0x02, 0x00, 0xBB, -/* 00008650 */ 0xBB, 0x02, 0x00, 0xD5, 0xBB, 0x02, 0x00, 0xD6, 0xBB, 0x02, 0x00, 0x11, 0xBC, 0x02, 0x00, 0x4F, -/* 00008660 */ 0xBC, 0x02, 0x00, 0x63, 0xBC, 0x02, 0x00, 0x64, 0xBC, 0x02, 0x00, 0xB8, 0xBC, 0x02, 0x00, 0xF0, -/* 00008670 */ 0xBC, 0x02, 0x00, 0x28, 0xBD, 0x02, 0x00, 0xA2, 0xBD, 0x02, 0x00, 0xBC, 0xBD, 0x02, 0x00, 0x07, -/* 00008680 */ 0xBE, 0x02, 0x00, 0x6E, 0xBE, 0x02, 0x00, 0xE8, 0xBE, 0x02, 0x00, 0x02, 0xBF, 0x02, 0x00, 0x34, -/* 00008690 */ 0xBF, 0x02, 0x00, 0x6F, 0xBF, 0x02, 0x00, 0xC6, 0xBF, 0x02, 0x00, 0x2B, 0xC0, 0x02, 0x00, 0x6A, -/* 000086A0 */ 0xC0, 0x02, 0x00, 0xA5, 0xC0, 0x02, 0x00, 0xE2, 0xC0, 0x02, 0x00, 0x17, 0xC1, 0x02, 0x00, 0x4E, -/* 000086B0 */ 0xC1, 0x02, 0x00, 0x87, 0xC1, 0x02, 0x00, 0xBC, 0xC1, 0x02, 0x00, 0xF3, 0xC1, 0x02, 0x00, 0x2E, -/* 000086C0 */ 0xC2, 0x02, 0x00, 0x69, 0xC2, 0x02, 0x00, 0xAF, 0xC2, 0x02, 0x00, 0xD0, 0xC2, 0x02, 0x00, 0x0E, -/* 000086D0 */ 0xC3, 0x02, 0x00, 0x80, 0xC3, 0x02, 0x00, 0x22, 0xC4, 0x02, 0x00, 0x5E, 0xC4, 0x02, 0x00, 0x7C, -/* 000086E0 */ 0xC4, 0x02, 0x00, 0xA6, 0xC4, 0x02, 0x00, 0xEE, 0xC4, 0x02, 0x00, 0x3B, 0xC5, 0x02, 0x00, 0x4F, -/* 000086F0 */ 0xC5, 0x02, 0x00, 0x50, 0xC5, 0x02, 0x00, 0xEE, 0xC5, 0x02, 0x00, 0xEF, 0xC5, 0x02, 0x00, 0x16, -/* 00008700 */ 0xC6, 0x02, 0x00, 0x24, 0xC6, 0x02, 0x00, 0x2E, 0xC6, 0x02, 0x00, 0x7F, 0xC6, 0x02, 0x00, 0x99, -/* 00008710 */ 0xC6, 0x02, 0x00, 0xA3, 0xC6, 0x02, 0x00, 0xA4, 0xC6, 0x02, 0x00, 0xD5, 0xC6, 0x02, 0x00, 0xF4, -/* 00008720 */ 0xC6, 0x02, 0x00, 0x70, 0xC7, 0x02, 0x00, 0xF4, 0xC7, 0x02, 0x00, 0x7C, 0xC8, 0x02, 0x00, 0x0E, -/* 00008730 */ 0xC9, 0x02, 0x00, 0x14, 0xC9, 0x02, 0x00, 0x15, 0xC9, 0x02, 0x00, 0x2A, 0xC9, 0x02, 0x00, 0x2E, -/* 00008740 */ 0xC9, 0x02, 0x00, 0x00, 0xCC, 0xB9, 0x0C, 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0xA8, 0x41, 0xC0, -/* 00008750 */ 0x00, 0xFE, 0xCE, 0x02, 0x00, 0xFE, 0x70, 0x01, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0xFE, 0x70, -/* 00008760 */ 0x01, 0xFF, 0xBE, 0xC7, 0x02, 0x00, 0xFF, 0xBE, 0xC7, 0x02, 0x00, 0x40, 0x01, 0x04, 0x04, 0x05, -/* 00008770 */ 0x05, 0x03, 0x05, 0xFE, 0xCF, 0x02, 0x0A, 0x09, 0xA6, 0x00, 0xD3, 0x00, 0x04, 0xFA, 0x04, 0x24, -/* 00008780 */ 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00, 0x8C, 0x87, 0x00, 0x00, 0xBF, 0x1D, 0x08, 0xC1, -/* 00008790 */ 0x53, 0xAD, 0x25, 0x01, 0x07, 0x01, 0xA2, 0x41, 0xD1, 0x00, 0x01, 0xFE, 0x90, 0x01, 0x5F, 0xFF, -/* 000087A0 */ 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x90, 0x01, 0xFF, 0x9B, 0xC7, 0x02, 0x00, 0xFF, 0x9B, -/* 000087B0 */ 0xC7, 0x02, 0x00, 0x40, 0x3C, 0xFE, 0xD0, 0x02, 0xFE, 0xFF, 0x01, 0xFE, 0xD1, 0x02, 0xFE, 0xD2, -/* 000087C0 */ 0x02, 0xFE, 0xD3, 0x02, 0x51, 0xFE, 0x02, 0x01, 0xFE, 0x28, 0x01, 0xFD, 0xFE, 0x4A, 0x01, 0x63, -/* 000087D0 */ 0x76, 0xFE, 0xD4, 0x02, 0xC7, 0xFE, 0xD5, 0x02, 0xFE, 0xD6, 0x02, 0xFE, 0xD7, 0x02, 0xFE, 0xD8, -/* 000087E0 */ 0x02, 0xFE, 0xD9, 0x02, 0xFE, 0xDA, 0x02, 0xFE, 0xDB, 0x02, 0xFE, 0xDC, 0x02, 0xFE, 0xDD, 0x02, -/* 000087F0 */ 0xFE, 0xDE, 0x02, 0xFE, 0xDF, 0x02, 0xFE, 0xE0, 0x02, 0xFE, 0xE1, 0x02, 0xFE, 0xE2, 0x02, 0xFE, -/* 00008800 */ 0xE3, 0x02, 0xFE, 0xE4, 0x02, 0xB1, 0xB4, 0xFE, 0xE5, 0x02, 0xFE, 0xE6, 0x02, 0xFE, 0xE7, 0x02, -/* 00008810 */ 0xFE, 0xE8, 0x02, 0xFE, 0xDE, 0x01, 0xFE, 0xDD, 0x01, 0xFE, 0xE9, 0x02, 0xFE, 0xEA, 0x02, 0xFE, -/* 00008820 */ 0xEB, 0x02, 0xFE, 0xEC, 0x02, 0xFE, 0xED, 0x02, 0xFE, 0xEE, 0x02, 0xFE, 0xFC, 0x01, 0xFE, 0xEF, -/* 00008830 */ 0x02, 0xFE, 0xF0, 0x02, 0xFE, 0xF1, 0x02, 0xFE, 0xF2, 0x02, 0xFE, 0xF3, 0x02, 0xFE, 0xF4, 0x02, -/* 00008840 */ 0xFE, 0xF5, 0x02, 0xFE, 0xF6, 0x02, 0xFE, 0xF7, 0x02, 0xFE, 0xF8, 0x02, 0xFE, 0xF9, 0x02, 0xFE, -/* 00008850 */ 0xFA, 0x02, 0xFE, 0xFB, 0x02, 0xFE, 0xFC, 0x02, 0xFE, 0xFD, 0x02, 0x20, 0x70, 0x8A, 0x09, 0xFE, -/* 00008860 */ 0x25, 0x04, 0xFE, 0x18, 0x04, 0x3A, 0x16, 0x8F, 0x8E, 0x8F, 0x8F, 0x23, 0x02, 0x87, 0x88, 0x89, -/* 00008870 */ 0x8A, 0x08, 0x0B, 0x06, 0xFE, 0xF4, 0x02, 0x06, 0xFE, 0xFE, 0x02, 0x06, 0xFE, 0xFF, 0x02, 0x06, -/* 00008880 */ 0xFE, 0x00, 0x03, 0x06, 0xFE, 0x01, 0x03, 0x07, 0x06, 0xFE, 0x02, 0x03, 0x01, 0x00, 0x06, 0xFE, -/* 00008890 */ 0x03, 0x03, 0x06, 0xFE, 0x04, 0x03, 0x01, 0x01, 0x06, 0xFE, 0x05, 0x03, 0x01, 0x02, 0x06, 0xFE, -/* 000088A0 */ 0x06, 0x03, 0x01, 0x03, 0x06, 0xFE, 0x07, 0x03, 0x01, 0x04, 0x06, 0xFE, 0x08, 0x03, 0x01, 0x05, -/* 000088B0 */ 0x06, 0xFE, 0x09, 0x03, 0x06, 0xFE, 0x0A, 0x03, 0x06, 0xFE, 0x0B, 0x03, 0x06, 0xFE, 0x0C, 0x03, -/* 000088C0 */ 0x06, 0xFE, 0x0D, 0x03, 0x06, 0xFE, 0x0E, 0x03, 0x06, 0xFE, 0x0F, 0x03, 0x06, 0xFE, 0x10, 0x03, -/* 000088D0 */ 0x06, 0xFE, 0x11, 0x03, 0x06, 0xFE, 0x12, 0x03, 0x06, 0xFE, 0x13, 0x03, 0x06, 0xFE, 0x14, 0x03, -/* 000088E0 */ 0x06, 0xFE, 0x15, 0x03, 0x06, 0xFE, 0x16, 0x03, 0x06, 0xFE, 0x17, 0x03, 0x06, 0xFE, 0x18, 0x03, -/* 000088F0 */ 0x06, 0xFE, 0x19, 0x03, 0x06, 0xFE, 0x1A, 0x03, 0x06, 0xFE, 0x1B, 0x03, 0x06, 0xFE, 0x1C, 0x03, -/* 00008900 */ 0x06, 0xFE, 0x1D, 0x03, 0x06, 0xFE, 0x1E, 0x03, 0x06, 0xFE, 0x1F, 0x03, 0x06, 0xFE, 0x20, 0x03, -/* 00008910 */ 0x06, 0xFE, 0x21, 0x03, 0x06, 0xFE, 0x22, 0x03, 0x06, 0xFE, 0x23, 0x03, 0x06, 0xFE, 0x24, 0x03, -/* 00008920 */ 0x06, 0xFE, 0x25, 0x03, 0x06, 0xFE, 0x26, 0x03, 0x06, 0xFE, 0x27, 0x03, 0x06, 0xFE, 0x28, 0x03, -/* 00008930 */ 0x06, 0xFE, 0x29, 0x03, 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, 0x2B, 0x03, 0x06, 0xFE, 0x2C, 0x03, -/* 00008940 */ 0x06, 0xFE, 0x2D, 0x03, 0x06, 0xFE, 0x2E, 0x03, 0x06, 0xFE, 0x2F, 0x03, 0x06, 0xFE, 0x30, 0x03, -/* 00008950 */ 0x06, 0xFE, 0x31, 0x03, 0x06, 0xFE, 0x32, 0x03, 0x06, 0xFE, 0x33, 0x03, 0x06, 0xFE, 0x34, 0x03, -/* 00008960 */ 0x06, 0xFE, 0x35, 0x03, 0x06, 0xFE, 0x36, 0x03, 0x06, 0xFE, 0x37, 0x03, 0x06, 0xFE, 0x38, 0x03, -/* 00008970 */ 0x06, 0xFE, 0x39, 0x03, 0x06, 0xFE, 0x3A, 0x03, 0x06, 0xFE, 0x3B, 0x03, 0x05, 0xFE, 0x3C, 0x03, -/* 00008980 */ 0x06, 0xFE, 0x3D, 0x03, 0x05, 0xFE, 0x3E, 0x03, 0x06, 0xFE, 0x3F, 0x03, 0x06, 0xFE, 0x40, 0x03, -/* 00008990 */ 0x05, 0xFE, 0x41, 0x03, 0x06, 0xFE, 0x42, 0x03, 0x0C, 0x06, 0xFE, 0x43, 0x03, 0x06, 0xFE, 0x44, -/* 000089A0 */ 0x03, 0x06, 0xFE, 0x45, 0x03, 0x06, 0xFE, 0x46, 0x03, 0x06, 0xFE, 0x47, 0x03, 0x06, 0xFE, 0x48, -/* 000089B0 */ 0x03, 0x05, 0xFE, 0x49, 0x03, 0x05, 0xFE, 0x4A, 0x03, 0x05, 0xFE, 0x4B, 0x03, 0x06, 0xFE, 0x4C, -/* 000089C0 */ 0x03, 0x06, 0xFE, 0x4D, 0x03, 0x06, 0xFE, 0x4E, 0x03, 0x05, 0xFE, 0x4F, 0x03, 0x06, 0xFE, 0x50, -/* 000089D0 */ 0x03, 0x06, 0xFE, 0x51, 0x03, 0x06, 0xFE, 0x52, 0x03, 0x05, 0xFE, 0x53, 0x03, 0x06, 0xFE, 0x54, -/* 000089E0 */ 0x03, 0x06, 0xFE, 0x55, 0x03, 0x05, 0xFE, 0x56, 0x03, 0x06, 0xFE, 0x57, 0x03, 0x06, 0xFE, 0x58, -/* 000089F0 */ 0x03, 0x05, 0xFE, 0x59, 0x03, 0x06, 0xFE, 0x5A, 0x03, 0x06, 0xFE, 0x5B, 0x03, 0x06, 0xFE, 0x5C, -/* 00008A00 */ 0x03, 0x06, 0xFE, 0x5D, 0x03, 0x06, 0xFE, 0x5E, 0x03, 0x06, 0xFE, 0x5F, 0x03, 0x06, 0xFE, 0x60, -/* 00008A10 */ 0x03, 0xFE, 0xB1, 0x12, 0x94, 0x32, 0x71, 0xA6, 0x81, 0xA6, 0x82, 0xA6, 0x86, 0xD3, 0x01, 0x72, -/* 00008A20 */ 0x94, 0x02, 0x72, 0x4F, 0x7C, 0x4F, 0x80, 0x4F, 0x83, 0xA6, 0x73, 0xA6, 0x74, 0x4F, 0x7E, 0x4F, -/* 00008A30 */ 0x7F, 0x4F, 0x84, 0x4F, 0x85, 0xA6, 0x75, 0xA6, 0x76, 0xA6, 0x77, 0xA6, 0x78, 0xA6, 0x79, 0xA6, -/* 00008A40 */ 0x7A, 0xA6, 0x7B, 0x4F, 0x8C, 0x94, 0x33, 0x8C, 0x4F, 0x8C, 0x94, 0x34, 0x8C, 0x4F, 0x8C, 0x94, -/* 00008A50 */ 0x35, 0x8C, 0x4F, 0x8C, 0x94, 0x36, 0x8C, 0x4F, 0x8C, 0x94, 0x37, 0x8C, 0x4F, 0x8C, 0x94, 0x38, -/* 00008A60 */ 0x8C, 0x4F, 0x8C, 0x94, 0x39, 0x8C, 0x4F, 0x8C, 0x94, 0x3A, 0x8C, 0x4F, 0x8C, 0x94, 0x3B, 0x8C, -/* 00008A70 */ 0x4F, 0x8C, 0x94, 0x3C, 0x8C, 0x4F, 0x8C, 0x94, 0x3D, 0x8C, 0x60, 0x8C, 0x70, 0x00, 0x94, 0x03, -/* 00008A80 */ 0x8C, 0x91, 0x03, 0x8C, 0x00, 0x00, 0x75, 0x03, 0x8C, 0x01, 0x91, 0x03, 0x8D, 0x00, 0x00, 0x60, -/* 00008A90 */ 0x8D, 0x8D, 0x02, 0xAA, 0x8C, 0x0F, 0x02, 0x00, 0x8D, 0xA9, 0x8C, 0x94, 0x33, 0x8C, 0x91, 0x03, -/* 00008AA0 */ 0x8C, 0x00, 0x00, 0x60, 0x8C, 0x8C, 0x03, 0x47, 0x7C, 0x8C, 0x94, 0x34, 0x04, 0x91, 0x03, 0x8C, -/* 00008AB0 */ 0x00, 0x00, 0x60, 0x8C, 0x8C, 0x04, 0x94, 0x04, 0x8C, 0x91, 0x03, 0x8C, 0x00, 0x00, 0x60, 0x8C, -/* 00008AC0 */ 0x8C, 0x05, 0x94, 0x05, 0x8C, 0x91, 0x03, 0x8C, 0x00, 0x00, 0x60, 0x8C, 0x8C, 0x06, 0x94, 0x06, -/* 00008AD0 */ 0x8C, 0xD3, 0x00, 0x8C, 0x94, 0x35, 0x8C, 0x91, 0x03, 0x8C, 0x00, 0x00, 0x60, 0x8C, 0x8C, 0x07, -/* 00008AE0 */ 0x94, 0x07, 0x8C, 0x91, 0x03, 0x8C, 0x00, 0x00, 0x60, 0x8C, 0x8C, 0x08, 0x94, 0x08, 0x8C, 0x91, -/* 00008AF0 */ 0x03, 0x8C, 0x00, 0x00, 0x60, 0x8C, 0x8C, 0x09, 0x94, 0x09, 0x8C, 0x91, 0x03, 0x8C, 0x00, 0x00, -/* 00008B00 */ 0x60, 0x8C, 0x8C, 0x0A, 0x94, 0x0A, 0x8C, 0x91, 0x03, 0x8C, 0x00, 0x00, 0x60, 0x8C, 0x8C, 0x0B, -/* 00008B10 */ 0x94, 0x0B, 0x8C, 0x91, 0x03, 0x8C, 0x00, 0x00, 0x60, 0x8C, 0x8C, 0x0C, 0x94, 0x0C, 0x8C, 0x91, -/* 00008B20 */ 0x03, 0x8C, 0x00, 0x00, 0x60, 0x8C, 0x8C, 0x0D, 0x94, 0x0D, 0x8C, 0x91, 0x03, 0x8C, 0x00, 0x00, -/* 00008B30 */ 0x60, 0x8C, 0x8C, 0x0E, 0x94, 0x0E, 0x8C, 0x91, 0x04, 0x8C, 0x01, 0x00, 0x07, 0x03, 0x00, 0x5A, -/* 00008B40 */ 0x00, 0x02, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, 0x91, -/* 00008B50 */ 0x03, 0x8E, 0x00, 0x00, 0x60, 0x8E, 0x8E, 0x0F, 0x79, 0x8E, 0x8D, 0x10, 0x91, 0x03, 0x8E, 0x00, -/* 00008B60 */ 0x00, 0x60, 0x8E, 0x8E, 0x11, 0x79, 0x8E, 0x8D, 0x12, 0x91, 0x03, 0x8E, 0x00, 0x00, 0x60, 0x8E, -/* 00008B70 */ 0x8E, 0x13, 0x79, 0x8E, 0x8D, 0x14, 0x91, 0x03, 0x8E, 0x00, 0x00, 0x60, 0x8E, 0x8E, 0x15, 0x79, -/* 00008B80 */ 0x8E, 0x8D, 0x16, 0x5B, 0x01, 0x8D, 0x00, 0x00, 0x5B, 0x02, 0x09, 0x00, 0x00, 0x02, 0xEE, 0x03, -/* 00008B90 */ 0x8C, 0x00, 0x8C, 0x00, 0x00, 0x00, 0x94, 0x0F, 0x8C, 0x91, 0x03, 0x8C, 0x00, 0x00, 0x60, 0x8C, -/* 00008BA0 */ 0x8C, 0x17, 0x94, 0x10, 0x8C, 0x91, 0x03, 0x8C, 0x00, 0x00, 0x60, 0x8C, 0x8C, 0x18, 0x94, 0x11, -/* 00008BB0 */ 0x8C, 0x91, 0x03, 0x8C, 0x00, 0x00, 0x60, 0x8C, 0x8C, 0x19, 0x94, 0x12, 0x8C, 0x91, 0x03, 0x8C, -/* 00008BC0 */ 0x00, 0x00, 0x60, 0x8C, 0x8C, 0x1A, 0x94, 0x13, 0x8C, 0x91, 0x03, 0x8C, 0x00, 0x00, 0x60, 0x8C, -/* 00008BD0 */ 0x8C, 0x1B, 0x94, 0x14, 0x8C, 0xD3, 0x02, 0x8C, 0x94, 0x15, 0x8C, 0x91, 0x03, 0x8C, 0x00, 0x00, -/* 00008BE0 */ 0x60, 0x8C, 0x8C, 0x1C, 0x94, 0x16, 0x8C, 0x91, 0x03, 0x8C, 0x00, 0x00, 0x60, 0x8C, 0x8C, 0x1D, -/* 00008BF0 */ 0x94, 0x17, 0x8C, 0x91, 0x03, 0x8C, 0x00, 0x00, 0x60, 0x8C, 0x8C, 0x1E, 0x94, 0x18, 0x8C, 0x91, -/* 00008C00 */ 0x03, 0x8C, 0x00, 0x00, 0x60, 0x8C, 0x8C, 0x1F, 0x94, 0x19, 0x8C, 0x91, 0x03, 0x8C, 0x00, 0x00, -/* 00008C10 */ 0x60, 0x8C, 0x8C, 0x20, 0x94, 0x1A, 0x8C, 0x91, 0x03, 0x8C, 0x00, 0x00, 0x60, 0x8C, 0x8C, 0x21, -/* 00008C20 */ 0x94, 0x1B, 0x8C, 0x91, 0x03, 0x8C, 0x00, 0x00, 0x60, 0x8C, 0x8C, 0x22, 0x94, 0x1C, 0x8C, 0x91, -/* 00008C30 */ 0x03, 0x8C, 0x00, 0x00, 0x60, 0x8C, 0x8C, 0x23, 0x94, 0x1D, 0x8C, 0x91, 0x03, 0x8C, 0x00, 0x00, -/* 00008C40 */ 0x60, 0x8C, 0x8C, 0x24, 0x94, 0x1E, 0x8C, 0x91, 0x03, 0x8C, 0x00, 0x00, 0x60, 0x8C, 0x8C, 0x25, -/* 00008C50 */ 0x94, 0x1F, 0x8C, 0x91, 0x03, 0x8C, 0x00, 0x00, 0x60, 0x8C, 0x8C, 0x26, 0x47, 0x7D, 0x8C, 0x91, -/* 00008C60 */ 0x03, 0x8C, 0x00, 0x00, 0x60, 0x8C, 0x8C, 0x27, 0x94, 0x20, 0x8C, 0x91, 0x03, 0x8C, 0x00, 0x00, -/* 00008C70 */ 0x60, 0x8C, 0x8C, 0x28, 0x94, 0x21, 0x8C, 0x91, 0x04, 0x8C, 0x01, 0x00, 0x07, 0x03, 0x00, 0x5A, -/* 00008C80 */ 0x00, 0x02, 0xCB, 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, 0x79, -/* 00008C90 */ 0x0B, 0x8D, 0x29, 0x79, 0x0B, 0x8D, 0x2A, 0x79, 0x0E, 0x8D, 0x2B, 0x79, 0x10, 0x8D, 0x2C, 0x79, -/* 00008CA0 */ 0x12, 0x8D, 0x2D, 0x79, 0x14, 0x8D, 0x2E, 0x79, 0x16, 0x8D, 0x2F, 0x5B, 0x01, 0x8D, 0x01, 0x00, -/* 00008CB0 */ 0x5B, 0x02, 0x09, 0x01, 0x00, 0x02, 0xEE, 0x03, 0x8C, 0x00, 0x8C, 0x00, 0x01, 0x00, 0x94, 0x36, -/* 00008CC0 */ 0x8C, 0xCB, 0x3C, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x00, 0xD6, 0x03, -/* 00008CD0 */ 0x8D, 0x8C, 0x79, 0x8D, 0x8C, 0x30, 0xD6, 0x04, 0x8D, 0x8C, 0x79, 0x8D, 0x8C, 0x31, 0xD6, 0x05, -/* 00008CE0 */ 0x8D, 0x8C, 0x79, 0x8D, 0x8C, 0x32, 0xD6, 0x06, 0x8D, 0x8C, 0x79, 0x8D, 0x8C, 0x33, 0xD6, 0x07, -/* 00008CF0 */ 0x8D, 0x8C, 0x79, 0x8D, 0x8C, 0x34, 0xD6, 0x08, 0x8D, 0x8C, 0x79, 0x8D, 0x8C, 0x35, 0xD6, 0x09, -/* 00008D00 */ 0x8D, 0x8C, 0x79, 0x8D, 0x8C, 0x36, 0xD6, 0x0A, 0x8D, 0x8C, 0x79, 0x8D, 0x8C, 0x37, 0xD6, 0x0B, -/* 00008D10 */ 0x8D, 0x8C, 0x79, 0x8D, 0x8C, 0x38, 0xD6, 0x0C, 0x8D, 0x8C, 0x79, 0x8D, 0x8C, 0x39, 0xD6, 0x0D, -/* 00008D20 */ 0x8D, 0x8C, 0x79, 0x8D, 0x8C, 0x3A, 0xD6, 0x0E, 0x8D, 0x8C, 0x79, 0x8D, 0x8C, 0x3B, 0xD6, 0x0F, -/* 00008D30 */ 0x8D, 0x8C, 0x79, 0x8D, 0x8C, 0x3C, 0xD6, 0x10, 0x8D, 0x8C, 0x79, 0x8D, 0x8C, 0x3D, 0xD6, 0x11, -/* 00008D40 */ 0x8D, 0x8C, 0x79, 0x8D, 0x8C, 0x3E, 0xD6, 0x12, 0x8D, 0x8C, 0x79, 0x8D, 0x8C, 0x3F, 0xD6, 0x13, -/* 00008D50 */ 0x8D, 0x8C, 0x79, 0x8D, 0x8C, 0x40, 0xD6, 0x14, 0x8D, 0x8C, 0x79, 0x8D, 0x8C, 0x41, 0x91, 0x03, -/* 00008D60 */ 0x8D, 0x00, 0x00, 0x60, 0x8D, 0x8D, 0x42, 0x79, 0x8D, 0x8C, 0x43, 0xD6, 0x15, 0x8D, 0x8C, 0x79, -/* 00008D70 */ 0x8D, 0x8C, 0x44, 0xD6, 0x16, 0x8D, 0x8C, 0x79, 0x8D, 0x8C, 0x45, 0x91, 0x03, 0x8D, 0x00, 0x00, -/* 00008D80 */ 0x60, 0x8D, 0x8D, 0x46, 0x79, 0x8D, 0x8C, 0x47, 0xD6, 0x17, 0x8D, 0x8C, 0x79, 0x8D, 0x8C, 0x48, -/* 00008D90 */ 0xD6, 0x18, 0x8D, 0x8C, 0x79, 0x8D, 0x8C, 0x49, 0x91, 0x03, 0x8D, 0x00, 0x00, 0x60, 0x8D, 0x8D, -/* 00008DA0 */ 0x4A, 0x79, 0x8D, 0x8C, 0x4B, 0xD6, 0x19, 0x8D, 0x8C, 0x79, 0x8D, 0x8C, 0x4C, 0x91, 0x03, 0x8D, -/* 00008DB0 */ 0x00, 0x00, 0x60, 0x8D, 0x8D, 0x4D, 0x79, 0x8D, 0x8C, 0x4E, 0x91, 0x03, 0x8D, 0x00, 0x00, 0x60, -/* 00008DC0 */ 0x8D, 0x8D, 0x4F, 0x79, 0x8D, 0x8C, 0x50, 0x91, 0x03, 0x8D, 0x00, 0x00, 0x60, 0x8D, 0x8D, 0x51, -/* 00008DD0 */ 0x79, 0x8D, 0x8C, 0x52, 0x91, 0x03, 0x8D, 0x00, 0x00, 0x60, 0x8D, 0x8D, 0x53, 0x79, 0x8D, 0x8C, -/* 00008DE0 */ 0x54, 0xD6, 0x1A, 0x8D, 0x8C, 0x79, 0x8D, 0x8C, 0x55, 0xD6, 0x1B, 0x8D, 0x8C, 0x79, 0x8D, 0x8C, -/* 00008DF0 */ 0x56, 0xD6, 0x1C, 0x8D, 0x8C, 0x79, 0x8D, 0x8C, 0x57, 0x94, 0x37, 0x8C, 0xCB, 0xC8, 0x00, 0x00, -/* 00008E00 */ 0x00, 0x03, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x00, 0xD6, 0x1D, 0x8D, 0x8C, 0x79, 0x8D, 0x8C, -/* 00008E10 */ 0x58, 0xD6, 0x1E, 0x8D, 0x8C, 0x79, 0x8D, 0x8C, 0x59, 0x94, 0x38, 0x8C, 0x91, 0x35, 0x8C, 0x02, -/* 00008E20 */ 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0xD8, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, -/* 00008E30 */ 0x8D, 0x00, 0x00, 0x00, 0x79, 0x0B, 0x8D, 0x5A, 0x79, 0x0E, 0x8D, 0x5B, 0x79, 0x10, 0x8D, 0x5C, -/* 00008E40 */ 0x79, 0x12, 0x8D, 0x5D, 0x79, 0x12, 0x8D, 0x5E, 0x5B, 0x01, 0x8D, 0x02, 0x00, 0x02, 0xEE, 0x02, -/* 00008E50 */ 0x8C, 0x00, 0x8C, 0x00, 0x02, 0x00, 0x94, 0x39, 0x8C, 0x91, 0x35, 0x8C, 0x02, 0x00, 0x07, 0x02, -/* 00008E60 */ 0x00, 0x5A, 0x00, 0x02, 0xCB, 0xF4, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, -/* 00008E70 */ 0x00, 0x79, 0x0B, 0x8D, 0x5F, 0x79, 0x0E, 0x8D, 0x60, 0x79, 0x10, 0x8D, 0x61, 0x79, 0x10, 0x8D, -/* 00008E80 */ 0x5E, 0x5B, 0x01, 0x8D, 0x03, 0x00, 0x02, 0xEE, 0x02, 0x8C, 0x00, 0x8C, 0x00, 0x03, 0x00, 0x94, -/* 00008E90 */ 0x3A, 0x8C, 0x91, 0x35, 0x8C, 0x02, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0x0C, 0x01, -/* 00008EA0 */ 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, 0x79, 0x0B, 0x8D, 0x5E, 0x79, 0x0B, -/* 00008EB0 */ 0x8D, 0x62, 0x79, 0x0E, 0x8D, 0x63, 0x79, 0x10, 0x8D, 0x64, 0x5B, 0x01, 0x8D, 0x04, 0x00, 0x02, -/* 00008EC0 */ 0xEE, 0x02, 0x8C, 0x00, 0x8C, 0x00, 0x04, 0x00, 0x94, 0x3B, 0x8C, 0x91, 0x35, 0x8C, 0x02, 0x00, -/* 00008ED0 */ 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0x24, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x8D, -/* 00008EE0 */ 0x00, 0x00, 0x00, 0x79, 0x0B, 0x8D, 0x5E, 0x79, 0x0B, 0x8D, 0x65, 0x79, 0x0E, 0x8D, 0x66, 0x79, -/* 00008EF0 */ 0x10, 0x8D, 0x67, 0x5B, 0x01, 0x8D, 0x05, 0x00, 0x02, 0xEE, 0x02, 0x8C, 0x00, 0x8C, 0x00, 0x05, -/* 00008F00 */ 0x00, 0x94, 0x3C, 0x8C, 0xD3, 0x1F, 0x8C, 0x94, 0x3D, 0x8C, 0x91, 0x33, 0x8C, 0x03, 0x00, 0x0E, -/* 00008F10 */ 0x45, 0x05, 0x8C, 0xDE, 0x00, 0x1A, 0x03, 0xB6, 0x8C, 0x00, 0x01, 0x53, 0x01, 0x2D, 0x73, 0x8C, -/* 00008F20 */ 0x93, 0x00, 0x02, 0x73, 0x01, 0x53, 0x01, 0x2F, 0x74, 0x8C, 0x93, 0x00, 0x03, 0x74, 0x4F, 0x8C, -/* 00008F30 */ 0x93, 0x00, 0x04, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x05, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x06, 0x8C, -/* 00008F40 */ 0x4F, 0x8C, 0x93, 0x00, 0x07, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x08, 0x8C, 0x4F, 0x8C, 0x93, 0x00, -/* 00008F50 */ 0x09, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x0A, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x0B, 0x8C, 0x4F, 0x8C, -/* 00008F60 */ 0x93, 0x00, 0x0C, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x0D, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x0E, 0x8C, -/* 00008F70 */ 0x4F, 0x8C, 0x93, 0x00, 0x0F, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x10, 0x8C, 0x4F, 0x8C, 0x93, 0x00, -/* 00008F80 */ 0x11, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x12, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x13, 0x8C, 0x4F, 0x8C, -/* 00008F90 */ 0x93, 0x00, 0x14, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x15, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x16, 0x8C, -/* 00008FA0 */ 0x4F, 0x8C, 0x93, 0x00, 0x17, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x18, 0x8C, 0x4F, 0x8C, 0x93, 0x00, -/* 00008FB0 */ 0x19, 0x8C, 0xA6, 0x8C, 0x93, 0x00, 0x04, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x20, 0x8C, -/* 00008FC0 */ 0x8D, 0x93, 0x00, 0x05, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x21, 0x8C, 0x8D, 0x94, 0x22, -/* 00008FD0 */ 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x22, 0x8C, 0x8D, 0x94, 0x23, 0x8C, 0xB6, 0x8D, 0x00, -/* 00008FE0 */ 0x01, 0x53, 0x01, 0x23, 0x8C, 0x8D, 0x93, 0x00, 0x06, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, -/* 00008FF0 */ 0x24, 0x8C, 0x8D, 0x93, 0x00, 0x07, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x25, 0x8C, 0x8D, -/* 00009000 */ 0x93, 0x00, 0x08, 0x8C, 0x8F, 0x00, 0x08, 0x8C, 0x04, 0x00, 0x93, 0x00, 0x09, 0x8C, 0xB6, 0x8D, -/* 00009010 */ 0x00, 0x01, 0x53, 0x01, 0x26, 0x8C, 0x8D, 0x93, 0x00, 0x0A, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, -/* 00009020 */ 0x01, 0x27, 0x8C, 0x8D, 0x93, 0x00, 0x0B, 0x8C, 0x91, 0x35, 0x8C, 0x02, 0x00, 0x07, 0x02, 0x00, -/* 00009030 */ 0x5A, 0x00, 0x02, 0xCB, 0x3C, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, -/* 00009040 */ 0xB6, 0x8F, 0x00, 0x01, 0x57, 0x01, 0x28, 0x8E, 0x8F, 0x8D, 0x79, 0x8E, 0x8D, 0x68, 0xB6, 0x8F, -/* 00009050 */ 0x00, 0x01, 0x57, 0x01, 0x29, 0x8E, 0x8F, 0x8D, 0x79, 0x8E, 0x8D, 0x69, 0xB6, 0x8F, 0x00, 0x01, -/* 00009060 */ 0x57, 0x01, 0x2A, 0x8E, 0x8F, 0x8D, 0x79, 0x8E, 0x8D, 0x6A, 0xB6, 0x8F, 0x00, 0x01, 0x57, 0x01, -/* 00009070 */ 0x2B, 0x8E, 0x8F, 0x8D, 0x79, 0x8E, 0x8D, 0x6B, 0xB6, 0x8F, 0x00, 0x01, 0x57, 0x01, 0x2C, 0x8E, -/* 00009080 */ 0x8F, 0x8D, 0x79, 0x8E, 0x8D, 0x6C, 0x5B, 0x01, 0x8D, 0x06, 0x00, 0x02, 0xEE, 0x02, 0x8C, 0x00, -/* 00009090 */ 0x8C, 0x00, 0x06, 0x00, 0x94, 0x24, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x2E, 0x8C, 0x8D, -/* 000090A0 */ 0x93, 0x00, 0x0C, 0x8C, 0xA6, 0x8C, 0x93, 0x00, 0x0D, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, -/* 000090B0 */ 0x30, 0x8C, 0x8D, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x02, 0x02, 0xEE, 0x01, 0x8C, 0x00, 0x8C, 0x00, -/* 000090C0 */ 0x07, 0x00, 0x93, 0x00, 0x0E, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x31, 0x8C, 0x8D, 0x93, -/* 000090D0 */ 0x00, 0x0F, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x32, 0x8C, 0x8D, 0x93, 0x00, 0x10, 0x8C, -/* 000090E0 */ 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x33, 0x8C, 0x8D, 0x93, 0x00, 0x11, 0x8C, 0xB6, 0x8D, 0x00, -/* 000090F0 */ 0x01, 0x53, 0x01, 0x34, 0x8C, 0x8D, 0x93, 0x00, 0x12, 0x8C, 0x8F, 0x00, 0x12, 0x8C, 0x05, 0x00, -/* 00009100 */ 0x93, 0x00, 0x13, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x35, 0x8C, 0x8D, 0x93, 0x00, 0x14, -/* 00009110 */ 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x36, 0x8C, 0x8D, 0x93, 0x00, 0x15, 0x8C, 0x91, 0x37, -/* 00009120 */ 0x8D, 0x06, 0x00, 0x6B, 0x8C, 0x8D, 0x6D, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x8D, 0x02, 0xF2, 0x01, -/* 00009130 */ 0x8C, 0x00, 0x8C, 0x00, 0x6D, 0x00, 0x00, 0x00, 0x08, 0x00, 0x93, 0x00, 0x16, 0x8C, 0x91, 0x03, -/* 00009140 */ 0x8D, 0x00, 0x00, 0x6B, 0x8C, 0x8D, 0x6E, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x8D, 0x8F, 0x00, 0x16, -/* 00009150 */ 0x8E, 0x07, 0x00, 0x5B, 0x01, 0x8E, 0x09, 0x00, 0xCB, 0x58, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, -/* 00009160 */ 0x00, 0x8E, 0x00, 0x00, 0x00, 0x79, 0x4A, 0x8E, 0x6F, 0x5B, 0x02, 0x8E, 0x09, 0x00, 0xF2, 0x03, -/* 00009170 */ 0xFF, 0x8C, 0x6E, 0x00, 0x00, 0x00, 0x09, 0x00, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x37, 0x8C, -/* 00009180 */ 0x8D, 0x93, 0x00, 0x17, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x38, 0x8C, 0x8D, 0x93, 0x00, -/* 00009190 */ 0x18, 0x8C, 0x91, 0x32, 0x8C, 0x08, 0x00, 0x14, 0x03, 0x00, 0x8C, 0x4B, 0x09, 0x04, 0x01, 0xDE, -/* 000091A0 */ 0x01, 0x03, 0x05, 0x4F, 0x8C, 0x93, 0x01, 0x02, 0x8C, 0x93, 0x01, 0x02, 0x4C, 0x91, 0x23, 0x8C, -/* 000091B0 */ 0x09, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x8F, 0x01, 0x02, 0x8D, 0x0A, 0x00, 0x5B, 0x01, -/* 000091C0 */ 0x8D, 0x0A, 0x00, 0xB6, 0x8E, 0x00, 0xB5, 0x01, 0x00, 0x00, 0x00, 0x8E, 0x8E, 0x01, 0x53, 0x01, -/* 000091D0 */ 0x39, 0x8D, 0x8E, 0x5B, 0x02, 0x8D, 0x0A, 0x00, 0x02, 0xEE, 0x03, 0x8C, 0x00, 0x8C, 0x00, 0x0A, -/* 000091E0 */ 0x00, 0x47, 0x7E, 0x8C, 0x91, 0x37, 0x8D, 0x06, 0x00, 0x6B, 0x8C, 0x8D, 0x70, 0x07, 0x03, 0x00, -/* 000091F0 */ 0x5A, 0x00, 0x8D, 0x5B, 0x01, 0x7E, 0x0B, 0x00, 0x8F, 0x00, 0x16, 0x8E, 0x07, 0x00, 0x5B, 0x02, -/* 00009200 */ 0x8E, 0x0B, 0x00, 0x02, 0xF2, 0x03, 0x8C, 0x00, 0x8C, 0x00, 0x70, 0x00, 0x00, 0x00, 0x0B, 0x00, -/* 00009210 */ 0x47, 0x7F, 0x8C, 0x91, 0x37, 0x8D, 0x06, 0x00, 0x6B, 0x8C, 0x8D, 0x71, 0x07, 0x04, 0x00, 0x5A, -/* 00009220 */ 0x00, 0x8D, 0x5B, 0x01, 0x7F, 0x0C, 0x00, 0x5B, 0x02, 0x4D, 0x0C, 0x00, 0xCB, 0x64, 0x01, 0x00, -/* 00009230 */ 0x00, 0x0A, 0x00, 0x00, 0x00, 0x8E, 0x00, 0x00, 0x00, 0x79, 0x4F, 0x8E, 0x72, 0x79, 0x51, 0x8E, -/* 00009240 */ 0x73, 0x79, 0x51, 0x8E, 0x74, 0x79, 0x03, 0x8E, 0x75, 0x5B, 0x03, 0x8E, 0x0C, 0x00, 0xF2, 0x04, -/* 00009250 */ 0xFF, 0x8C, 0x71, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x91, 0x37, 0x8D, 0x06, 0x00, 0x6B, 0x8C, 0x8D, -/* 00009260 */ 0x71, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x8D, 0x69, 0x8E, 0x00, 0x00, 0x00, 0x8E, 0x5B, 0x01, 0x8E, -/* 00009270 */ 0x0D, 0x00, 0x5B, 0x02, 0x4F, 0x0D, 0x00, 0xCB, 0x7C, 0x01, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, -/* 00009280 */ 0x8E, 0x00, 0x00, 0x00, 0x79, 0x7F, 0x8E, 0x72, 0x79, 0x03, 0x8E, 0x73, 0x79, 0x51, 0x8E, 0x74, -/* 00009290 */ 0x79, 0x03, 0x8E, 0x75, 0x5B, 0x03, 0x8E, 0x0D, 0x00, 0xF2, 0x04, 0xFF, 0x8C, 0x71, 0x00, 0x00, -/* 000092A0 */ 0x00, 0x0D, 0x00, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x3A, 0x8C, 0x8D, 0x93, 0x00, 0x19, 0x8C, -/* 000092B0 */ 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x3B, 0x8C, 0x8D, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x02, 0x02, -/* 000092C0 */ 0xEE, 0x01, 0x8C, 0x00, 0x8C, 0x00, 0x0E, 0x00, 0x47, 0x80, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, -/* 000092D0 */ 0x01, 0x3C, 0x8C, 0x8D, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x02, 0x02, 0xEE, 0x01, 0x8C, 0x00, 0x8C, -/* 000092E0 */ 0x00, 0x0F, 0x00, 0x47, 0x81, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x3D, 0x8C, 0x8D, 0x07, -/* 000092F0 */ 0x01, 0x00, 0x5A, 0x00, 0x02, 0x02, 0xEE, 0x01, 0x8C, 0x00, 0x8C, 0x00, 0x10, 0x00, 0x47, 0x82, -/* 00009300 */ 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x3E, 0x8C, 0x8D, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x02, -/* 00009310 */ 0x02, 0xEE, 0x01, 0x8C, 0x00, 0x8C, 0x00, 0x11, 0x00, 0x47, 0x83, 0x8C, 0x91, 0x32, 0x8C, 0x08, -/* 00009320 */ 0x00, 0x14, 0x03, 0x00, 0x8C, 0x4B, 0x09, 0x2C, 0x01, 0x91, 0x37, 0x8D, 0x06, 0x00, 0x6B, 0x8C, -/* 00009330 */ 0x8D, 0x71, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x8D, 0x69, 0x8E, 0x00, 0x00, 0x00, 0x8E, 0x5B, 0x01, -/* 00009340 */ 0x8E, 0x12, 0x00, 0x5B, 0x02, 0x54, 0x12, 0x00, 0xCB, 0x94, 0x01, 0x00, 0x00, 0x0C, 0x00, 0x00, -/* 00009350 */ 0x00, 0x8E, 0x00, 0x00, 0x00, 0x79, 0x80, 0x8E, 0x72, 0x79, 0x03, 0x8E, 0x73, 0x79, 0x51, 0x8E, -/* 00009360 */ 0x74, 0x79, 0x03, 0x8E, 0x75, 0x5B, 0x03, 0x8E, 0x12, 0x00, 0xF2, 0x04, 0xFF, 0x8C, 0x71, 0x00, -/* 00009370 */ 0x00, 0x00, 0x12, 0x00, 0x91, 0x37, 0x8D, 0x06, 0x00, 0x6B, 0x8C, 0x8D, 0x71, 0x07, 0x04, 0x00, -/* 00009380 */ 0x5A, 0x00, 0x8D, 0x69, 0x8E, 0x00, 0x00, 0x00, 0x8E, 0x5B, 0x01, 0x8E, 0x13, 0x00, 0x5B, 0x02, -/* 00009390 */ 0x55, 0x13, 0x00, 0xCB, 0xAC, 0x01, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x8E, 0x00, 0x00, 0x00, -/* 000093A0 */ 0x79, 0x81, 0x8E, 0x72, 0x79, 0x03, 0x8E, 0x73, 0x79, 0x51, 0x8E, 0x74, 0x79, 0x03, 0x8E, 0x75, -/* 000093B0 */ 0x5B, 0x03, 0x8E, 0x13, 0x00, 0xF2, 0x04, 0xFF, 0x8C, 0x71, 0x00, 0x00, 0x00, 0x13, 0x00, 0x91, -/* 000093C0 */ 0x37, 0x8D, 0x06, 0x00, 0x6B, 0x8C, 0x8D, 0x71, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x8D, 0x69, 0x8E, -/* 000093D0 */ 0x00, 0x00, 0x00, 0x8E, 0x5B, 0x01, 0x8E, 0x14, 0x00, 0x5B, 0x02, 0x56, 0x14, 0x00, 0xCB, 0xC4, -/* 000093E0 */ 0x01, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x8E, 0x00, 0x00, 0x00, 0x79, 0x82, 0x8E, 0x72, 0x79, -/* 000093F0 */ 0x03, 0x8E, 0x73, 0x79, 0x51, 0x8E, 0x74, 0x79, 0x03, 0x8E, 0x75, 0x5B, 0x03, 0x8E, 0x14, 0x00, -/* 00009400 */ 0xF2, 0x04, 0xFF, 0x8C, 0x71, 0x00, 0x00, 0x00, 0x14, 0x00, 0x91, 0x37, 0x8D, 0x06, 0x00, 0x6B, -/* 00009410 */ 0x8C, 0x8D, 0x71, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x8D, 0x69, 0x8E, 0x00, 0x00, 0x00, 0x8E, 0x5B, -/* 00009420 */ 0x01, 0x8E, 0x15, 0x00, 0x5B, 0x02, 0x57, 0x15, 0x00, 0xCB, 0xDC, 0x01, 0x00, 0x00, 0x0F, 0x00, -/* 00009430 */ 0x00, 0x00, 0x8E, 0x00, 0x00, 0x00, 0x79, 0x83, 0x8E, 0x72, 0x79, 0x03, 0x8E, 0x73, 0x79, 0x51, -/* 00009440 */ 0x8E, 0x74, 0x79, 0x03, 0x8E, 0x75, 0x5B, 0x03, 0x8E, 0x15, 0x00, 0xF2, 0x04, 0xFF, 0x8C, 0x71, -/* 00009450 */ 0x00, 0x00, 0x00, 0x15, 0x00, 0x09, 0x69, 0x08, 0xDE, 0x00, 0x1A, 0x07, 0xB6, 0x8C, 0x00, 0x01, -/* 00009460 */ 0x53, 0x01, 0x4C, 0x75, 0x8C, 0x93, 0x00, 0x02, 0x75, 0x01, 0x53, 0x01, 0x4D, 0x76, 0x8C, 0x93, -/* 00009470 */ 0x00, 0x03, 0x76, 0x01, 0x53, 0x01, 0x4E, 0x77, 0x8C, 0x93, 0x00, 0x04, 0x77, 0x01, 0x53, 0x01, -/* 00009480 */ 0x4F, 0x78, 0x8C, 0x93, 0x00, 0x05, 0x78, 0x01, 0x53, 0x01, 0x50, 0x79, 0x8C, 0x93, 0x00, 0x06, -/* 00009490 */ 0x79, 0x01, 0x53, 0x01, 0x51, 0x7A, 0x8C, 0x93, 0x00, 0x07, 0x7A, 0x01, 0x53, 0x01, 0x52, 0x7B, -/* 000094A0 */ 0x8C, 0x93, 0x00, 0x08, 0x7B, 0x4F, 0x8C, 0x93, 0x00, 0x09, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x0A, -/* 000094B0 */ 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x0B, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x0C, 0x8C, 0x4F, 0x8C, 0x93, -/* 000094C0 */ 0x00, 0x0D, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x0E, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x0F, 0x8C, 0x4F, -/* 000094D0 */ 0x8C, 0x93, 0x00, 0x10, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x11, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x12, -/* 000094E0 */ 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x13, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x14, 0x8C, 0x4F, 0x8C, 0x93, -/* 000094F0 */ 0x00, 0x15, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x16, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x17, 0x8C, 0x4F, -/* 00009500 */ 0x8C, 0x93, 0x00, 0x18, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x19, 0x8C, 0x91, 0x03, 0x8C, 0x00, 0x00, -/* 00009510 */ 0x60, 0x8C, 0x8C, 0x76, 0xA6, 0x8D, 0x14, 0x03, 0x00, 0x8C, 0x8D, 0x09, 0x1A, 0x00, 0x91, 0x03, -/* 00009520 */ 0x8C, 0x00, 0x00, 0x91, 0x02, 0x8D, 0x0B, 0x00, 0x07, 0x01, 0x00, 0x02, 0xC2, 0x01, 0x8D, 0x00, -/* 00009530 */ 0x8D, 0x00, 0x16, 0x00, 0x75, 0x8D, 0x8C, 0x77, 0x91, 0x03, 0x8C, 0x00, 0x00, 0x60, 0x8C, 0x8C, -/* 00009540 */ 0x78, 0xA6, 0x8D, 0x14, 0x03, 0x00, 0x8C, 0x8D, 0x09, 0x1A, 0x00, 0x91, 0x03, 0x8C, 0x00, 0x00, -/* 00009550 */ 0x91, 0x02, 0x8D, 0x0B, 0x00, 0x07, 0x01, 0x00, 0x02, 0xC2, 0x01, 0x8D, 0x00, 0x8D, 0x00, 0x17, -/* 00009560 */ 0x00, 0x75, 0x8D, 0x8C, 0x79, 0xA6, 0x8C, 0x93, 0x00, 0x09, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, -/* 00009570 */ 0x01, 0x3F, 0x8C, 0x8D, 0x93, 0x00, 0x0A, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x40, 0x8C, -/* 00009580 */ 0x8D, 0x93, 0x00, 0x0B, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x41, 0x8C, 0x8D, 0x93, 0x00, -/* 00009590 */ 0x0C, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x42, 0x8C, 0x8D, 0x94, 0x25, 0x8C, 0xB6, 0x8D, -/* 000095A0 */ 0x00, 0x01, 0x53, 0x01, 0x43, 0x8C, 0x8D, 0x94, 0x22, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, -/* 000095B0 */ 0x44, 0x8C, 0x8D, 0x94, 0x23, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x45, 0x8C, 0x8D, 0x94, -/* 000095C0 */ 0x26, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x46, 0x8C, 0x8D, 0x94, 0x27, 0x8C, 0xB6, 0x8D, -/* 000095D0 */ 0x00, 0x01, 0x53, 0x01, 0x47, 0x8C, 0x8D, 0x94, 0x28, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, -/* 000095E0 */ 0x48, 0x8C, 0x8D, 0x94, 0x29, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x49, 0x8C, 0x8D, 0x94, -/* 000095F0 */ 0x2A, 0x8C, 0xA6, 0x8C, 0x93, 0x00, 0x0D, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x4A, 0x8C, -/* 00009600 */ 0x8D, 0x94, 0x2B, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x4B, 0x8C, 0x8D, 0x07, 0x01, 0x00, -/* 00009610 */ 0x5A, 0x00, 0x02, 0x02, 0xEE, 0x01, 0x8C, 0x00, 0x8C, 0x00, 0x18, 0x00, 0x94, 0x24, 0x8C, 0xA6, -/* 00009620 */ 0x8C, 0x93, 0x00, 0x0E, 0x8C, 0xA6, 0x8C, 0x93, 0x00, 0x0F, 0x8C, 0xA6, 0x8C, 0x93, 0x00, 0x10, -/* 00009630 */ 0x8C, 0xA6, 0x8C, 0x93, 0x00, 0x11, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x53, 0x8C, 0x8D, -/* 00009640 */ 0x94, 0x2C, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x54, 0x8C, 0x8D, 0x94, 0x2D, 0x8C, 0xB6, -/* 00009650 */ 0x8D, 0x00, 0x01, 0x53, 0x01, 0x55, 0x8C, 0x8D, 0x94, 0x2E, 0x8C, 0x91, 0x04, 0x8C, 0x01, 0x00, -/* 00009660 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0xCA, 0x8D, 0x5B, 0x01, 0x8D, 0x19, 0x00, 0x5B, 0x02, 0x09, -/* 00009670 */ 0x19, 0x00, 0x02, 0xEE, 0x03, 0x8C, 0x00, 0x8C, 0x00, 0x19, 0x00, 0x47, 0x84, 0x8C, 0x91, 0x03, -/* 00009680 */ 0x8D, 0x00, 0x00, 0x6B, 0x8C, 0x8D, 0x6E, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x8D, 0x5B, 0x01, 0x84, -/* 00009690 */ 0x1A, 0x00, 0x91, 0x04, 0x8E, 0x01, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0xF4, 0x01, -/* 000096A0 */ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x8F, 0x00, 0x00, 0x00, 0x79, 0x4A, 0x8F, 0x7A, 0x5B, 0x01, -/* 000096B0 */ 0x8F, 0x1B, 0x00, 0x5B, 0x02, 0x09, 0x1B, 0x00, 0x02, 0xEE, 0x03, 0x8E, 0x00, 0x8E, 0x00, 0x1B, -/* 000096C0 */ 0x00, 0x5B, 0x02, 0x8E, 0x1A, 0x00, 0xF2, 0x03, 0xFF, 0x8C, 0x6E, 0x00, 0x00, 0x00, 0x1A, 0x00, -/* 000096D0 */ 0x93, 0x00, 0x12, 0x58, 0x91, 0x06, 0x8C, 0x0C, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x91, -/* 000096E0 */ 0x1A, 0x8D, 0x0D, 0x00, 0x5B, 0x01, 0x8D, 0x1C, 0x00, 0x91, 0x23, 0x8D, 0x09, 0x00, 0x07, 0x03, -/* 000096F0 */ 0x00, 0x5A, 0x00, 0x02, 0x8F, 0x00, 0x12, 0x8E, 0x0E, 0x00, 0x5B, 0x01, 0x8E, 0x1D, 0x00, 0xB6, -/* 00009700 */ 0x8F, 0x00, 0x01, 0x53, 0x01, 0x56, 0x8E, 0x8F, 0x5B, 0x02, 0x8E, 0x1D, 0x00, 0x02, 0xEE, 0x03, -/* 00009710 */ 0x8D, 0x00, 0x8D, 0x00, 0x1D, 0x00, 0x5B, 0x02, 0x8D, 0x1C, 0x00, 0x5B, 0x03, 0x84, 0x1C, 0x00, -/* 00009720 */ 0x02, 0xEE, 0x04, 0x8C, 0x00, 0x8C, 0x00, 0x1C, 0x00, 0x93, 0x00, 0x13, 0x8C, 0x93, 0x00, 0x14, -/* 00009730 */ 0x59, 0x91, 0x06, 0x8C, 0x0C, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x91, 0x1A, 0x8D, 0x0D, -/* 00009740 */ 0x00, 0x5B, 0x01, 0x8D, 0x1E, 0x00, 0x91, 0x23, 0x8D, 0x09, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, -/* 00009750 */ 0x02, 0x8F, 0x00, 0x14, 0x8E, 0x0F, 0x00, 0x5B, 0x01, 0x8E, 0x1F, 0x00, 0xB6, 0x8F, 0x00, 0x01, -/* 00009760 */ 0x53, 0x01, 0x57, 0x8E, 0x8F, 0x5B, 0x02, 0x8E, 0x1F, 0x00, 0x02, 0xEE, 0x03, 0x8D, 0x00, 0x8D, -/* 00009770 */ 0x00, 0x1F, 0x00, 0x5B, 0x02, 0x8D, 0x1E, 0x00, 0x5B, 0x03, 0x84, 0x1E, 0x00, 0x02, 0xEE, 0x04, -/* 00009780 */ 0x8C, 0x00, 0x8C, 0x00, 0x1E, 0x00, 0x93, 0x00, 0x15, 0x8C, 0x93, 0x00, 0x16, 0x5A, 0x91, 0x06, -/* 00009790 */ 0x8C, 0x0C, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x91, 0x1A, 0x8D, 0x0D, 0x00, 0x5B, 0x01, -/* 000097A0 */ 0x8D, 0x20, 0x00, 0x91, 0x23, 0x8D, 0x09, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x8F, 0x00, -/* 000097B0 */ 0x16, 0x8E, 0x10, 0x00, 0x5B, 0x01, 0x8E, 0x21, 0x00, 0xB6, 0x8F, 0x00, 0x01, 0x53, 0x01, 0x58, -/* 000097C0 */ 0x8E, 0x8F, 0x5B, 0x02, 0x8E, 0x21, 0x00, 0x02, 0xEE, 0x03, 0x8D, 0x00, 0x8D, 0x00, 0x21, 0x00, -/* 000097D0 */ 0x5B, 0x02, 0x8D, 0x20, 0x00, 0x5B, 0x03, 0x84, 0x20, 0x00, 0x02, 0xEE, 0x04, 0x8C, 0x00, 0x8C, -/* 000097E0 */ 0x00, 0x20, 0x00, 0x93, 0x00, 0x17, 0x8C, 0x93, 0x00, 0x18, 0x4C, 0x91, 0x06, 0x8C, 0x0C, 0x00, -/* 000097F0 */ 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x91, 0x1A, 0x8D, 0x0D, 0x00, 0x5B, 0x01, 0x8D, 0x22, 0x00, -/* 00009800 */ 0x91, 0x23, 0x8D, 0x09, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x8F, 0x00, 0x18, 0x8E, 0x11, -/* 00009810 */ 0x00, 0x5B, 0x01, 0x8E, 0x23, 0x00, 0xB6, 0x8F, 0x00, 0x01, 0x53, 0x01, 0x59, 0x8E, 0x8F, 0x5B, -/* 00009820 */ 0x02, 0x8E, 0x23, 0x00, 0x02, 0xEE, 0x03, 0x8D, 0x00, 0x8D, 0x00, 0x23, 0x00, 0x5B, 0x02, 0x8D, -/* 00009830 */ 0x22, 0x00, 0x5B, 0x03, 0x84, 0x22, 0x00, 0x02, 0xEE, 0x04, 0x8C, 0x00, 0x8C, 0x00, 0x22, 0x00, -/* 00009840 */ 0x47, 0x85, 0x8C, 0x91, 0x15, 0x8C, 0x12, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8F, 0x00, -/* 00009850 */ 0x13, 0x8D, 0x13, 0x00, 0x5B, 0x01, 0x8D, 0x24, 0x00, 0x5B, 0x02, 0x4D, 0x24, 0x00, 0xCB, 0x00, -/* 00009860 */ 0x02, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, 0x79, 0x5B, 0x8D, 0x7B, 0x5B, -/* 00009870 */ 0x03, 0x8D, 0x24, 0x00, 0xEE, 0x04, 0xFF, 0x8C, 0x24, 0x00, 0x91, 0x15, 0x8C, 0x12, 0x00, 0x07, -/* 00009880 */ 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8F, 0x00, 0x15, 0x8D, 0x14, 0x00, 0x5B, 0x01, 0x8D, 0x25, 0x00, -/* 00009890 */ 0x5B, 0x02, 0x4D, 0x25, 0x00, 0xCB, 0x0C, 0x02, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x8D, 0x00, -/* 000098A0 */ 0x00, 0x00, 0x79, 0x5B, 0x8D, 0x7B, 0x5B, 0x03, 0x8D, 0x25, 0x00, 0xEE, 0x04, 0xFF, 0x8C, 0x25, -/* 000098B0 */ 0x00, 0x91, 0x15, 0x8C, 0x12, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8F, 0x00, 0x17, 0x8D, -/* 000098C0 */ 0x15, 0x00, 0x5B, 0x01, 0x8D, 0x26, 0x00, 0x5B, 0x02, 0x4D, 0x26, 0x00, 0xCB, 0x18, 0x02, 0x00, -/* 000098D0 */ 0x00, 0x13, 0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, 0x79, 0x5B, 0x8D, 0x7B, 0x5B, 0x03, 0x8D, -/* 000098E0 */ 0x26, 0x00, 0xEE, 0x04, 0xFF, 0x8C, 0x26, 0x00, 0x91, 0x15, 0x8C, 0x12, 0x00, 0x07, 0x04, 0x00, -/* 000098F0 */ 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x85, 0x27, 0x00, 0x5B, 0x02, 0x4D, 0x27, 0x00, 0xCB, 0x24, 0x02, -/* 00009900 */ 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, 0x79, 0x4F, 0x8D, 0x7B, 0x5B, 0x03, -/* 00009910 */ 0x8D, 0x27, 0x00, 0xEE, 0x04, 0xFF, 0x8C, 0x27, 0x00, 0x91, 0x04, 0x8C, 0x01, 0x00, 0x07, 0x03, -/* 00009920 */ 0x00, 0x5A, 0x00, 0x02, 0xCB, 0x30, 0x02, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, -/* 00009930 */ 0x00, 0x91, 0x04, 0x8E, 0x01, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0x5C, 0x02, 0x00, -/* 00009940 */ 0x00, 0x16, 0x00, 0x00, 0x00, 0x8F, 0x00, 0x00, 0x00, 0x79, 0x5E, 0x8F, 0x7C, 0x5B, 0x01, 0x8F, -/* 00009950 */ 0x29, 0x00, 0x5B, 0x02, 0x09, 0x29, 0x00, 0x02, 0xEE, 0x03, 0x8E, 0x00, 0x8E, 0x00, 0x29, 0x00, -/* 00009960 */ 0x79, 0x8E, 0x8D, 0x7D, 0x91, 0x04, 0x8E, 0x01, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0xCB, -/* 00009970 */ 0x68, 0x02, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x8F, 0x00, 0x00, 0x00, 0x79, 0x5E, 0x8F, 0x7C, -/* 00009980 */ 0x5B, 0x01, 0x8F, 0x2A, 0x00, 0x5B, 0x02, 0x09, 0x2A, 0x00, 0x02, 0xEE, 0x03, 0x8E, 0x00, 0x8E, -/* 00009990 */ 0x00, 0x2A, 0x00, 0x79, 0x8E, 0x8D, 0x7E, 0x91, 0x04, 0x8E, 0x01, 0x00, 0x07, 0x03, 0x00, 0x5A, -/* 000099A0 */ 0x00, 0x02, 0xCB, 0x74, 0x02, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x8F, 0x00, 0x00, 0x00, 0x79, -/* 000099B0 */ 0x62, 0x8F, 0x7F, 0x5B, 0x01, 0x8F, 0x2B, 0x00, 0x5B, 0x02, 0x09, 0x2B, 0x00, 0x02, 0xEE, 0x03, -/* 000099C0 */ 0x8E, 0x00, 0x8E, 0x00, 0x2B, 0x00, 0x79, 0x8E, 0x8D, 0x80, 0x91, 0x04, 0x8E, 0x01, 0x00, 0x07, -/* 000099D0 */ 0x03, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0x80, 0x02, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x8F, 0x00, -/* 000099E0 */ 0x00, 0x00, 0x79, 0x65, 0x8F, 0x81, 0x5B, 0x01, 0x8F, 0x2C, 0x00, 0x5B, 0x02, 0x09, 0x2C, 0x00, -/* 000099F0 */ 0x02, 0xEE, 0x03, 0x8E, 0x00, 0x8E, 0x00, 0x2C, 0x00, 0x79, 0x8E, 0x8D, 0x82, 0x91, 0x04, 0x8E, -/* 00009A00 */ 0x01, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0x8C, 0x02, 0x00, 0x00, 0x1A, 0x00, 0x00, -/* 00009A10 */ 0x00, 0x8F, 0x00, 0x00, 0x00, 0x79, 0x68, 0x8F, 0x83, 0x79, 0x65, 0x8F, 0x81, 0x79, 0x6A, 0x8F, -/* 00009A20 */ 0x84, 0x5B, 0x01, 0x8F, 0x2D, 0x00, 0x5B, 0x02, 0x09, 0x2D, 0x00, 0x02, 0xEE, 0x03, 0x8E, 0x00, -/* 00009A30 */ 0x8E, 0x00, 0x2D, 0x00, 0x79, 0x8E, 0x8D, 0x85, 0x91, 0x04, 0x8E, 0x01, 0x00, 0x07, 0x03, 0x00, -/* 00009A40 */ 0x5A, 0x00, 0x02, 0xCB, 0xA0, 0x02, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00, 0x8F, 0x00, 0x00, 0x00, -/* 00009A50 */ 0x79, 0x65, 0x8F, 0x81, 0x79, 0x6A, 0x8F, 0x84, 0x5B, 0x01, 0x8F, 0x2E, 0x00, 0x5B, 0x02, 0x09, -/* 00009A60 */ 0x2E, 0x00, 0x02, 0xEE, 0x03, 0x8E, 0x00, 0x8E, 0x00, 0x2E, 0x00, 0x79, 0x8E, 0x8D, 0x86, 0x91, -/* 00009A70 */ 0x04, 0x8E, 0x01, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0xB0, 0x02, 0x00, 0x00, 0x1C, -/* 00009A80 */ 0x00, 0x00, 0x00, 0x8F, 0x00, 0x00, 0x00, 0x79, 0x65, 0x8F, 0x81, 0x79, 0x6A, 0x8F, 0x84, 0x5B, -/* 00009A90 */ 0x01, 0x8F, 0x2F, 0x00, 0x5B, 0x02, 0x09, 0x2F, 0x00, 0x02, 0xEE, 0x03, 0x8E, 0x00, 0x8E, 0x00, -/* 00009AA0 */ 0x2F, 0x00, 0x79, 0x8E, 0x8D, 0x87, 0x91, 0x04, 0x8E, 0x01, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, -/* 00009AB0 */ 0x02, 0xCB, 0xC0, 0x02, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0x8F, 0x00, 0x00, 0x00, 0x79, 0x69, -/* 00009AC0 */ 0x8F, 0x84, 0x79, 0x6A, 0x8F, 0x88, 0x5B, 0x01, 0x8F, 0x30, 0x00, 0x5B, 0x02, 0x09, 0x30, 0x00, -/* 00009AD0 */ 0x02, 0xEE, 0x03, 0x8E, 0x00, 0x8E, 0x00, 0x30, 0x00, 0x79, 0x8E, 0x8D, 0x89, 0x91, 0x04, 0x8E, -/* 00009AE0 */ 0x01, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0xD0, 0x02, 0x00, 0x00, 0x1E, 0x00, 0x00, -/* 00009AF0 */ 0x00, 0x8F, 0x00, 0x00, 0x00, 0x79, 0x69, 0x8F, 0x84, 0x79, 0x6A, 0x8F, 0x88, 0x5B, 0x01, 0x8F, -/* 00009B00 */ 0x31, 0x00, 0x5B, 0x02, 0x09, 0x31, 0x00, 0x02, 0xEE, 0x03, 0x8E, 0x00, 0x8E, 0x00, 0x31, 0x00, -/* 00009B10 */ 0x79, 0x8E, 0x8D, 0x8A, 0x5B, 0x01, 0x8D, 0x28, 0x00, 0x5B, 0x02, 0x09, 0x28, 0x00, 0x02, 0xEE, -/* 00009B20 */ 0x03, 0x8C, 0x00, 0x8C, 0x00, 0x28, 0x00, 0x94, 0x2F, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, -/* 00009B30 */ 0x5A, 0x8C, 0x8D, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x02, 0x02, 0xEE, 0x01, 0x8C, 0x00, 0x8C, 0x00, -/* 00009B40 */ 0x32, 0x00, 0x94, 0x30, 0x8C, 0xA6, 0x8C, 0x93, 0x00, 0x19, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, -/* 00009B50 */ 0x01, 0x5B, 0x8C, 0x8D, 0x94, 0x31, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x5C, 0x8C, 0x8D, -/* 00009B60 */ 0x07, 0x01, 0x00, 0x5A, 0x00, 0x02, 0x02, 0xEE, 0x01, 0x8C, 0x00, 0x8C, 0x00, 0x33, 0x00, 0x47, -/* 00009B70 */ 0x86, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x5D, 0x8C, 0x8D, 0x07, 0x01, 0x00, 0x5A, 0x00, -/* 00009B80 */ 0x02, 0x02, 0xEE, 0x01, 0x8C, 0x00, 0x8C, 0x00, 0x34, 0x00, 0x47, 0x81, 0x8C, 0xB6, 0x8D, 0x00, -/* 00009B90 */ 0x01, 0x53, 0x01, 0x5E, 0x8C, 0x8D, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x02, 0x02, 0xEE, 0x01, 0x8C, -/* 00009BA0 */ 0x00, 0x8C, 0x00, 0x35, 0x00, 0x47, 0x82, 0x8C, 0x91, 0x32, 0x8C, 0x08, 0x00, 0x14, 0x03, 0x00, -/* 00009BB0 */ 0x8C, 0x4B, 0x09, 0x0C, 0x01, 0x91, 0x15, 0x8C, 0x12, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, -/* 00009BC0 */ 0x69, 0x8E, 0x00, 0x00, 0x00, 0x8D, 0x5B, 0x01, 0x8D, 0x36, 0x00, 0x5B, 0x02, 0x54, 0x36, 0x00, -/* 00009BD0 */ 0xCB, 0xE0, 0x02, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, 0x79, 0x86, 0x8D, -/* 00009BE0 */ 0x7B, 0x79, 0x03, 0x8D, 0x8B, 0x79, 0x51, 0x8D, 0x8C, 0x79, 0x03, 0x8D, 0x8D, 0x5B, 0x03, 0x8D, -/* 00009BF0 */ 0x36, 0x00, 0xEE, 0x04, 0xFF, 0x8C, 0x36, 0x00, 0x91, 0x15, 0x8C, 0x12, 0x00, 0x07, 0x04, 0x00, -/* 00009C00 */ 0x5A, 0x00, 0x02, 0x69, 0x8E, 0x00, 0x00, 0x00, 0x8D, 0x5B, 0x01, 0x8D, 0x37, 0x00, 0x5B, 0x02, -/* 00009C10 */ 0x55, 0x37, 0x00, 0xCB, 0xF8, 0x02, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, -/* 00009C20 */ 0x79, 0x81, 0x8D, 0x7B, 0x79, 0x03, 0x8D, 0x8B, 0x79, 0x51, 0x8D, 0x8C, 0x79, 0x03, 0x8D, 0x8D, -/* 00009C30 */ 0x5B, 0x03, 0x8D, 0x37, 0x00, 0xEE, 0x04, 0xFF, 0x8C, 0x37, 0x00, 0x91, 0x15, 0x8C, 0x12, 0x00, -/* 00009C40 */ 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x69, 0x8E, 0x00, 0x00, 0x00, 0x8D, 0x5B, 0x01, 0x8D, 0x38, -/* 00009C50 */ 0x00, 0x5B, 0x02, 0x56, 0x38, 0x00, 0xCB, 0x10, 0x03, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x8D, -/* 00009C60 */ 0x00, 0x00, 0x00, 0x79, 0x82, 0x8D, 0x7B, 0x79, 0x03, 0x8D, 0x8B, 0x79, 0x51, 0x8D, 0x8C, 0x79, -/* 00009C70 */ 0x03, 0x8D, 0x8D, 0x5B, 0x03, 0x8D, 0x38, 0x00, 0xEE, 0x04, 0xFF, 0x8C, 0x38, 0x00, 0x91, 0x15, -/* 00009C80 */ 0x8C, 0x12, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x69, 0x8E, 0x00, 0x00, 0x00, 0x8D, 0x5B, -/* 00009C90 */ 0x01, 0x8D, 0x39, 0x00, 0x5B, 0x02, 0x4F, 0x39, 0x00, 0xCB, 0x28, 0x03, 0x00, 0x00, 0x22, 0x00, -/* 00009CA0 */ 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, 0x79, 0x85, 0x8D, 0x7B, 0x79, 0x03, 0x8D, 0x8B, 0x79, 0x51, -/* 00009CB0 */ 0x8D, 0x8C, 0x79, 0x03, 0x8D, 0x8D, 0x5B, 0x03, 0x8D, 0x39, 0x00, 0xEE, 0x04, 0xFF, 0x8C, 0x39, -/* 00009CC0 */ 0x00, 0xA6, 0x00, 0x24, 0x00, 0x23, 0xFE, 0x40, 0x03, 0x00, 0x28, 0x03, 0x00, 0x00, 0x03, 0x04, -/* 00009CD0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, -/* 00009CE0 */ 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x10, 0x03, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, -/* 00009CF0 */ 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, -/* 00009D00 */ 0x00, 0x00, 0xF8, 0x02, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, -/* 00009D10 */ 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0xE0, 0x02, -/* 00009D20 */ 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, -/* 00009D30 */ 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0xD0, 0x02, 0x00, 0x00, 0x03, 0x02, -/* 00009D40 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5A, 0x03, 0x00, 0x00, 0x5F, 0x03, 0x00, 0x00, 0xC0, 0x02, -/* 00009D50 */ 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5A, 0x03, 0x00, 0x00, 0x5F, 0x03, -/* 00009D60 */ 0x00, 0x00, 0xB0, 0x02, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x03, -/* 00009D70 */ 0x00, 0x00, 0x5A, 0x03, 0x00, 0x00, 0xA0, 0x02, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, -/* 00009D80 */ 0x00, 0x00, 0x55, 0x03, 0x00, 0x00, 0x5A, 0x03, 0x00, 0x00, 0x8C, 0x02, 0x00, 0x00, 0x03, 0x03, -/* 00009D90 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x03, 0x00, 0x00, 0x55, 0x03, 0x00, 0x00, 0x5A, 0x03, -/* 00009DA0 */ 0x00, 0x00, 0x80, 0x02, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x03, -/* 00009DB0 */ 0x00, 0x00, 0x74, 0x02, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x03, -/* 00009DC0 */ 0x00, 0x00, 0x68, 0x02, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4E, 0x03, -/* 00009DD0 */ 0x00, 0x00, 0x5C, 0x02, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4E, 0x03, -/* 00009DE0 */ 0x00, 0x00, 0x30, 0x02, 0x00, 0x00, 0x03, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x03, -/* 00009DF0 */ 0x00, 0x00, 0x50, 0x03, 0x00, 0x00, 0x51, 0x03, 0x00, 0x00, 0x54, 0x03, 0x00, 0x00, 0x57, 0x03, -/* 00009E00 */ 0x00, 0x00, 0x5C, 0x03, 0x00, 0x00, 0x5D, 0x03, 0x00, 0x00, 0x5E, 0x03, 0x00, 0x00, 0x60, 0x03, -/* 00009E10 */ 0x00, 0x00, 0x24, 0x02, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, -/* 00009E20 */ 0x00, 0x00, 0x18, 0x02, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, -/* 00009E30 */ 0x00, 0x00, 0x0C, 0x02, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, -/* 00009E40 */ 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, -/* 00009E50 */ 0x00, 0x00, 0xF4, 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0x01, -/* 00009E60 */ 0x00, 0x00, 0xDC, 0x01, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, -/* 00009E70 */ 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0xC4, 0x01, -/* 00009E80 */ 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, -/* 00009E90 */ 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0xAC, 0x01, 0x00, 0x00, 0x03, 0x04, -/* 00009EA0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, -/* 00009EB0 */ 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, -/* 00009EC0 */ 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, -/* 00009ED0 */ 0x00, 0x00, 0x7C, 0x01, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, -/* 00009EE0 */ 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x64, 0x01, -/* 00009EF0 */ 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, -/* 00009F00 */ 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x58, 0x01, 0x00, 0x00, 0x03, 0x01, -/* 00009F10 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0x01, 0x00, 0x00, 0x3C, 0x01, 0x00, 0x00, 0x03, 0x05, -/* 00009F20 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x03, 0x00, 0x00, 0x37, 0x03, 0x00, 0x00, 0x38, 0x03, -/* 00009F30 */ 0x00, 0x00, 0x39, 0x03, 0x00, 0x00, 0x3A, 0x03, 0x00, 0x00, 0x24, 0x01, 0x00, 0x00, 0x03, 0x04, -/* 00009F40 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2C, 0x03, 0x00, 0x00, 0x33, 0x03, 0x00, 0x00, 0x34, 0x03, -/* 00009F50 */ 0x00, 0x00, 0x35, 0x03, 0x00, 0x00, 0x0C, 0x01, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, -/* 00009F60 */ 0x00, 0x00, 0x2C, 0x03, 0x00, 0x00, 0x30, 0x03, 0x00, 0x00, 0x31, 0x03, 0x00, 0x00, 0x32, 0x03, -/* 00009F70 */ 0x00, 0x00, 0xF4, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x03, -/* 00009F80 */ 0x00, 0x00, 0x2E, 0x03, 0x00, 0x00, 0x7B, 0x00, 0x00, 0x00, 0x2C, 0x03, 0x00, 0x00, 0xD8, 0x00, -/* 00009F90 */ 0x00, 0x00, 0x03, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x03, 0x00, 0x00, 0x29, 0x03, -/* 00009FA0 */ 0x00, 0x00, 0x2A, 0x03, 0x00, 0x00, 0x2B, 0x03, 0x00, 0x00, 0x2C, 0x03, 0x00, 0x00, 0xC8, 0x00, -/* 00009FB0 */ 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0x03, 0x00, 0x00, 0x27, 0x03, -/* 00009FC0 */ 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x03, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x69, 0x01, -/* 00009FD0 */ 0x00, 0x00, 0x63, 0x01, 0x00, 0x00, 0x22, 0x01, 0x00, 0x00, 0x45, 0x01, 0x00, 0x00, 0x4C, 0x01, -/* 00009FE0 */ 0x00, 0x00, 0x0E, 0x03, 0x00, 0x00, 0xF1, 0x00, 0x00, 0x00, 0x29, 0x01, 0x00, 0x00, 0x86, 0x00, -/* 00009FF0 */ 0x00, 0x00, 0x18, 0x01, 0x00, 0x00, 0xBC, 0x00, 0x00, 0x00, 0x14, 0x03, 0x00, 0x00, 0xC5, 0x00, -/* 0000A000 */ 0x00, 0x00, 0x1C, 0x01, 0x00, 0x00, 0x3F, 0x01, 0x00, 0x00, 0x5D, 0x00, 0x00, 0x00, 0x7E, 0x00, -/* 0000A010 */ 0x00, 0x00, 0x1A, 0x03, 0x00, 0x00, 0xBF, 0x00, 0x00, 0x00, 0xA7, 0x00, 0x00, 0x00, 0x88, 0x01, -/* 0000A020 */ 0x00, 0x00, 0xB0, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x86, 0x01, 0x00, 0x00, 0x1B, 0x00, -/* 0000A030 */ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xEE, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0xB1, 0x00, -/* 0000A040 */ 0x00, 0x00, 0xB4, 0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, 0x4D, 0x00, 0x00, 0x00, 0x48, 0x00, -/* 0000A050 */ 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, -/* 0000A060 */ 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x04, 0x03, 0x00, 0x00, 0x05, 0x03, 0x00, 0x00, 0x06, 0x03, -/* 0000A070 */ 0x00, 0x00, 0x07, 0x03, 0x00, 0x00, 0x08, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, -/* 0000A080 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xEE, 0x00, -/* 0000A090 */ 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0xAB, 0xFE, 0x61, 0x03, 0xFE, 0xFE, 0x01, 0xFE, 0xFE, 0x01, -/* 0000A0A0 */ 0xFE, 0x81, 0x02, 0xFE, 0x82, 0x02, 0xFE, 0x84, 0x02, 0x51, 0xFE, 0x02, 0x01, 0xFE, 0x28, 0x01, -/* 0000A0B0 */ 0xFD, 0xFE, 0x4A, 0x01, 0x63, 0x76, 0xFE, 0xD6, 0x01, 0xFE, 0x79, 0x02, 0x1B, 0xFE, 0x7A, 0x02, -/* 0000A0C0 */ 0x23, 0xFE, 0x7B, 0x02, 0xEE, 0xFE, 0x7C, 0x02, 0x29, 0xFE, 0x6A, 0x02, 0xFE, 0x6C, 0x02, 0xFE, -/* 0000A0D0 */ 0x69, 0x02, 0xFE, 0x6B, 0x02, 0xFE, 0x68, 0x02, 0xFE, 0x5C, 0x02, 0xFE, 0x5D, 0x02, 0xFE, 0x60, -/* 0000A0E0 */ 0x02, 0xFE, 0x5E, 0x02, 0xFE, 0x66, 0x02, 0xFE, 0x63, 0x02, 0xFE, 0x64, 0x02, 0xFE, 0x74, 0x02, -/* 0000A0F0 */ 0xFE, 0x77, 0x02, 0xFE, 0x78, 0x02, 0xFE, 0x80, 0x02, 0xFE, 0x57, 0x02, 0xFE, 0x58, 0x02, 0xFE, -/* 0000A100 */ 0x02, 0x03, 0xFE, 0x03, 0x03, 0xFE, 0x04, 0x03, 0xFE, 0x05, 0x03, 0xFE, 0x06, 0x03, 0xFE, 0x07, -/* 0000A110 */ 0x03, 0xFE, 0x08, 0x03, 0xFE, 0x69, 0x01, 0xFE, 0x63, 0x01, 0xFE, 0x22, 0x01, 0xFE, 0x45, 0x01, -/* 0000A120 */ 0xFE, 0x4C, 0x01, 0xFE, 0x0E, 0x03, 0xF1, 0xFE, 0x29, 0x01, 0x86, 0xFE, 0x18, 0x01, 0xBC, 0xFE, -/* 0000A130 */ 0x14, 0x03, 0xC5, 0xFE, 0x1C, 0x01, 0xFE, 0x3F, 0x01, 0x5D, 0x7E, 0xFE, 0x1A, 0x03, 0xFE, 0x6D, -/* 0000A140 */ 0x02, 0xBF, 0xA7, 0xFE, 0x88, 0x01, 0xFE, 0x6C, 0x02, 0xB0, 0x61, 0xFE, 0x86, 0x01, 0xFE, 0x79, -/* 0000A150 */ 0x02, 0x1B, 0x23, 0xFE, 0x7B, 0x02, 0xEE, 0xFE, 0x7C, 0x02, 0x29, 0xFE, 0x57, 0x02, 0xB1, 0xFE, -/* 0000A160 */ 0x58, 0x02, 0xB4, 0x8D, 0x4D, 0x48, 0xFE, 0x26, 0x03, 0xFE, 0x27, 0x03, 0xFE, 0x28, 0x03, 0xFE, -/* 0000A170 */ 0x29, 0x03, 0xFE, 0x2A, 0x03, 0xFE, 0x2B, 0x03, 0xFE, 0x2C, 0x03, 0xFE, 0x2D, 0x03, 0xFE, 0x2E, -/* 0000A180 */ 0x03, 0x7B, 0xFE, 0x30, 0x03, 0xFE, 0x31, 0x03, 0xFE, 0x32, 0x03, 0xFE, 0x33, 0x03, 0xFE, 0x34, -/* 0000A190 */ 0x03, 0xFE, 0x35, 0x03, 0xFE, 0x36, 0x03, 0xFE, 0x37, 0x03, 0xFE, 0x38, 0x03, 0xFE, 0x39, 0x03, -/* 0000A1A0 */ 0xFE, 0x3A, 0x03, 0x61, 0xFE, 0xF0, 0x01, 0xFE, 0xF6, 0x01, 0x4D, 0xFE, 0x88, 0x01, 0xFE, 0x83, -/* 0000A1B0 */ 0x01, 0xFE, 0x82, 0x01, 0xFE, 0x80, 0x01, 0xFE, 0x81, 0x01, 0xFE, 0x62, 0x03, 0xFE, 0x62, 0x03, -/* 0000A1C0 */ 0xFE, 0x63, 0x03, 0xFE, 0x63, 0x03, 0xFE, 0xF6, 0x01, 0xFE, 0x83, 0x01, 0xFE, 0x4E, 0x03, 0xFE, -/* 0000A1D0 */ 0x4D, 0x03, 0xFE, 0x50, 0x03, 0xFE, 0x52, 0x03, 0xFE, 0x51, 0x03, 0xFE, 0x55, 0x03, 0xFE, 0x54, -/* 0000A1E0 */ 0x03, 0xFE, 0x58, 0x03, 0xFE, 0x5A, 0x03, 0xFE, 0x57, 0x03, 0xFE, 0x5C, 0x03, 0xFE, 0x5D, 0x03, -/* 0000A1F0 */ 0xFE, 0x5F, 0x03, 0xFE, 0x5E, 0x03, 0xFE, 0x60, 0x03, 0xFE, 0x82, 0x01, 0xFE, 0x80, 0x01, 0xFE, -/* 0000A200 */ 0x81, 0x01, 0xAB, 0x03, 0x03, 0x18, 0x00, 0xFE, 0x64, 0x03, 0x01, 0xFE, 0x65, 0x03, 0x02, 0xFE, -/* 0000A210 */ 0x66, 0x03, 0x03, 0xFE, 0x67, 0x03, 0x04, 0xFE, 0x68, 0x03, 0x05, 0xFE, 0x69, 0x03, 0x06, 0xFE, -/* 0000A220 */ 0x6A, 0x03, 0x07, 0xFE, 0x6B, 0x03, 0x08, 0xFE, 0x6C, 0x03, 0x09, 0xFE, 0x6D, 0x03, 0x0A, 0xFE, -/* 0000A230 */ 0x6E, 0x03, 0x0B, 0xFE, 0x6F, 0x03, 0x0C, 0xFE, 0x70, 0x03, 0x0D, 0xFE, 0x71, 0x03, 0x0E, 0xFE, -/* 0000A240 */ 0x72, 0x03, 0x0F, 0xFE, 0x73, 0x03, 0x10, 0xFE, 0x74, 0x03, 0x11, 0xFE, 0x75, 0x03, 0x12, 0xFE, -/* 0000A250 */ 0x76, 0x03, 0x13, 0xFE, 0x77, 0x03, 0x14, 0xFE, 0x78, 0x03, 0x15, 0xFE, 0x79, 0x03, 0x16, 0xFE, -/* 0000A260 */ 0x7A, 0x03, 0x17, 0xFE, 0x7B, 0x03, 0x05, 0x01, 0x00, 0xFE, 0x7C, 0x03, 0x07, 0x18, 0x00, 0xFE, -/* 0000A270 */ 0x64, 0x03, 0x01, 0xFE, 0x6E, 0x03, 0x02, 0xFE, 0x65, 0x03, 0x03, 0xFE, 0x7D, 0x03, 0x04, 0xFE, -/* 0000A280 */ 0x71, 0x03, 0x05, 0xFE, 0x73, 0x03, 0x06, 0xFE, 0x74, 0x03, 0x07, 0xFE, 0x66, 0x03, 0x08, 0xFE, -/* 0000A290 */ 0x67, 0x03, 0x09, 0xFE, 0x7E, 0x03, 0x0A, 0xFE, 0x7F, 0x03, 0x0B, 0xFE, 0x80, 0x03, 0x0C, 0xFE, -/* 0000A2A0 */ 0x6F, 0x03, 0x0D, 0xFE, 0x81, 0x03, 0x0E, 0xFE, 0x82, 0x03, 0x0F, 0xFE, 0x83, 0x03, 0x10, 0xFE, -/* 0000A2B0 */ 0x84, 0x03, 0x11, 0xFE, 0x85, 0x03, 0x12, 0xFE, 0x86, 0x03, 0x13, 0xFE, 0x87, 0x03, 0x14, 0xFE, -/* 0000A2C0 */ 0x88, 0x03, 0x15, 0xFE, 0x89, 0x03, 0x16, 0xFE, 0x7C, 0x03, 0x17, 0xFE, 0x8A, 0x03, 0xFE, 0xBB, -/* 0000A2D0 */ 0x01, 0x8C, 0x66, 0x00, 0x00, 0x00, 0x07, 0x00, 0xA4, 0x00, 0x09, 0x00, 0xB7, 0x00, 0x14, 0x00, -/* 0000A2E0 */ 0x32, 0x00, 0x0C, 0x00, 0x47, 0x00, 0x03, 0x00, 0x35, 0x00, 0x0C, 0x00, 0x35, 0x00, 0x0C, 0x00, -/* 0000A2F0 */ 0x39, 0x00, 0x0C, 0x00, 0x83, 0x00, 0x06, 0x00, 0x4A, 0x04, 0x0C, 0x00, 0x24, 0x00, 0x0C, 0x00, -/* 0000A300 */ 0x22, 0x00, 0x0C, 0x00, 0x22, 0x00, 0x0C, 0x00, 0x22, 0x00, 0x0C, 0x00, 0x22, 0x00, 0x0C, 0x00, -/* 0000A310 */ 0x1E, 0x00, 0x0C, 0x00, 0x21, 0x00, 0x0C, 0x00, 0x2D, 0x00, 0x62, 0x00, 0xC8, 0x00, 0x0C, 0x00, -/* 0000A320 */ 0x54, 0x00, 0x0C, 0x00, 0x50, 0x00, 0x0C, 0x00, 0x5E, 0x00, 0x0C, 0x00, 0x02, 0x01, 0x0C, 0x00, -/* 0000A330 */ 0x55, 0x00, 0x06, 0x00, 0x94, 0x00, 0x0C, 0x00, 0x4C, 0x00, 0x0C, 0x00, 0x4C, 0x00, 0x0C, 0x00, -/* 0000A340 */ 0x46, 0x00, 0x0C, 0x00, 0x47, 0x00, 0x0C, 0x00, 0x4C, 0x00, 0x0C, 0x00, 0x4A, 0x00, 0x0C, 0x00, -/* 0000A350 */ 0x3B, 0x00, 0x0C, 0x00, 0x4E, 0x00, 0x0C, 0x00, 0x56, 0x00, 0x0C, 0x00, 0x57, 0x00, 0x0C, 0x00, -/* 0000A360 */ 0x36, 0x00, 0x0C, 0x00, 0x3E, 0x00, 0x0C, 0x00, 0xA4, 0x00, 0x4A, 0x00, 0x05, 0x01, 0x3B, 0x01, -/* 0000A370 */ 0x7A, 0x0D, 0x20, 0x00, 0x6F, 0x01, 0x3D, 0x00, 0x8B, 0x00, 0x39, 0x00, 0x76, 0x00, 0x39, 0x00, -/* 0000A380 */ 0x5B, 0x01, 0x39, 0x00, 0xD2, 0x01, 0x06, 0x00, 0x36, 0x03, 0xA8, 0x00, 0x1F, 0x00, 0x06, 0x00, -/* 0000A390 */ 0x25, 0x00, 0x0D, 0x00, 0x4E, 0x02, 0x0C, 0x00, 0x9A, 0x00, 0x0C, 0x00, 0x19, 0x02, 0x0D, 0x00, -/* 0000A3A0 */ 0xCD, 0x06, 0x0D, 0x00, 0x09, 0x03, 0x0D, 0x00, 0x23, 0x03, 0x0A, 0x00, 0x77, 0x01, 0x0D, 0x00, -/* 0000A3B0 */ 0x75, 0x07, 0x0D, 0x00, 0xA3, 0x09, 0x6F, 0x00, 0x51, 0x09, 0x0D, 0x00, 0xE1, 0x01, 0x06, 0x00, -/* 0000A3C0 */ 0x60, 0x01, 0x1C, 0x00, 0xC8, 0x1B, 0x0D, 0x00, 0x6B, 0x03, 0x0D, 0x00, 0xB4, 0x04, 0x0D, 0x00, -/* 0000A3D0 */ 0x8F, 0x06, 0x0D, 0x00, 0xA7, 0x01, 0x0A, 0x00, 0xDA, 0x02, 0x0D, 0x00, 0x74, 0x06, 0x0D, 0x00, -/* 0000A3E0 */ 0xE8, 0x04, 0x20, 0x00, 0x30, 0x00, 0x3A, 0x00, 0x4D, 0x00, 0x0D, 0x00, 0x1B, 0x02, 0x0D, 0x00, -/* 0000A3F0 */ 0x3C, 0x05, 0x17, 0x00, 0x23, 0x00, 0x04, 0x00, 0x45, 0x00, 0x37, 0x00, 0xD7, 0x00, 0x2F, 0x00, -/* 0000A400 */ 0x5F, 0x00, 0x45, 0x00, 0xCA, 0x00, 0x4B, 0x00, 0x25, 0x03, 0x0D, 0x00, 0x8C, 0x02, 0x1B, 0x00, -/* 0000A410 */ 0x68, 0x22, 0x1B, 0x00, 0xA7, 0x25, 0x1B, 0x00, 0x02, 0x6E, 0x1B, 0x00, 0xAB, 0x16, 0x0D, 0x00, -/* 0000A420 */ 0x23, 0x00, 0x4B, 0x00, 0x92, 0x00, 0x4B, 0x00, 0x92, 0x00, 0x4B, 0x00, 0x92, 0x00, 0x01, 0x01, -/* 0000A430 */ 0x29, 0x01, 0x13, 0x00, 0x38, 0x00, 0x1A, 0x00, 0x38, 0x00, 0x13, 0x00, 0x39, 0x00, 0x1A, 0x00, -/* 0000A440 */ 0x3A, 0x00, 0x06, 0x00, 0x25, 0x00, 0x0D, 0x00, 0xE9, 0x01, 0x0D, 0x00, 0x0C, 0x02, 0x0D, 0x00, -/* 0000A450 */ 0x90, 0x01, 0x0C, 0x00, 0x58, 0x01, 0x0C, 0x00, 0x9A, 0x00, 0x0C, 0x00, 0x70, 0x00, 0x0C, 0x00, -/* 0000A460 */ 0xA7, 0x04, 0x0C, 0x00, 0x93, 0x04, 0x0C, 0x00, 0x31, 0x04, 0x0C, 0x00, 0xB1, 0x09, 0x0C, 0x00, -/* 0000A470 */ 0xEF, 0x02, 0x06, 0x00, 0x2D, 0x00, 0x0C, 0x00, 0x93, 0x03, 0x1B, 0x00, 0x89, 0x0A, 0x06, 0x00, -/* 0000A480 */ 0x75, 0x00, 0x06, 0x00, 0x38, 0x00, 0x06, 0x00, 0x4C, 0x00, 0x06, 0x00, 0x83, 0x1C, 0x0C, 0x00, -/* 0000A490 */ 0xC0, 0x01, 0x0C, 0x00, 0xDF, 0x01, 0x0C, 0x00, 0x80, 0x03, 0x23, 0x00, 0x3C, 0x00, 0x52, 0x00, -/* 0000A4A0 */ 0x25, 0x01, 0x04, 0x00, 0x51, 0x00, 0x59, 0x00, 0x69, 0x01, 0x04, 0x00, 0x59, 0x00, 0x59, 0x00, -/* 0000A4B0 */ 0x79, 0x01, 0x04, 0x00, 0x5D, 0x00, 0x59, 0x00, 0x81, 0x01, 0x04, 0x00, 0x41, 0x00, 0x58, 0x00, -/* 0000A4C0 */ 0xAD, 0x02, 0x37, 0x00, 0x60, 0x00, 0x37, 0x00, 0x64, 0x00, 0x37, 0x00, 0x66, 0x00, 0x31, 0x00, -/* 0000A4D0 */ 0x49, 0x01, 0x11, 0x02, 0x51, 0x05, 0x1B, 0x00, 0xCA, 0x03, 0x06, 0x00, 0x2B, 0x00, 0x0C, 0x00, -/* 0000A4E0 */ 0x3B, 0x09, 0x1B, 0x00, 0xF3, 0x30, 0x1B, 0x00, 0x5E, 0x32, 0x1B, 0x00, 0x79, 0x7A, 0x0D, 0x00, -/* 0000A4F0 */ 0x23, 0x00, 0x43, 0x00, 0x7C, 0x00, 0x43, 0x00, 0x84, 0x00, 0x43, 0x00, 0x88, 0x00, 0x45, 0x00, -/* 0000A500 */ 0xA6, 0x00, 0x00, 0x21, 0xD8, 0x01, 0x00, 0xB8, 0xD5, 0x01, 0x00, 0x3B, 0xD5, 0x01, 0x00, 0xD1, -/* 0000A510 */ 0xD4, 0x01, 0x00, 0x67, 0xD4, 0x01, 0x00, 0xF3, 0xD3, 0x01, 0x00, 0x79, 0xD3, 0x01, 0x00, 0xFA, -/* 0000A520 */ 0xD2, 0x01, 0x00, 0x7B, 0xD2, 0x01, 0x00, 0x09, 0xD2, 0x01, 0x00, 0x8F, 0xD1, 0x01, 0x00, 0x20, -/* 0000A530 */ 0xD1, 0x01, 0x00, 0x97, 0xD0, 0x01, 0x00, 0x28, 0xD0, 0x01, 0x00, 0xB4, 0xCF, 0x01, 0x00, 0x3A, -/* 0000A540 */ 0xCF, 0x01, 0x00, 0xBB, 0xCE, 0x01, 0x00, 0x3C, 0xCE, 0x01, 0x00, 0xA8, 0xCD, 0x01, 0x00, 0x2E, -/* 0000A550 */ 0xCD, 0x01, 0x00, 0x2F, 0xCC, 0x01, 0x00, 0xB5, 0xCB, 0x01, 0x00, 0x13, 0xCB, 0x01, 0x00, 0x98, -/* 0000A560 */ 0xCA, 0x01, 0x00, 0x18, 0xCA, 0x01, 0x00, 0x98, 0xC9, 0x01, 0x00, 0x23, 0xC9, 0x01, 0x00, 0xA9, -/* 0000A570 */ 0xC8, 0x01, 0x00, 0x2A, 0xC8, 0x01, 0x00, 0x6C, 0xC7, 0x01, 0x00, 0xCE, 0xC6, 0x01, 0x00, 0x5E, -/* 0000A580 */ 0xC6, 0x01, 0x00, 0x94, 0xC5, 0x01, 0x00, 0x26, 0xC5, 0x01, 0x00, 0xBA, 0xC4, 0x01, 0x00, 0x3B, -/* 0000A590 */ 0xC3, 0x01, 0x00, 0x29, 0xC2, 0x01, 0x00, 0xA9, 0xC0, 0x01, 0x00, 0x41, 0xBE, 0x01, 0x00, 0xFD, -/* 0000A5A0 */ 0xB8, 0x01, 0x00, 0x56, 0xB8, 0x01, 0x00, 0xE1, 0xB7, 0x01, 0x00, 0x6C, 0xB7, 0x01, 0x00, 0xF7, -/* 0000A5B0 */ 0xB6, 0x01, 0x00, 0xE8, 0xB5, 0x01, 0x00, 0xE2, 0xB3, 0x01, 0x00, 0x7C, 0xB2, 0x01, 0x00, 0x30, -/* 0000A5C0 */ 0xB2, 0x01, 0x00, 0xA3, 0xAA, 0x01, 0x00, 0xD6, 0xA9, 0x01, 0x00, 0x07, 0xA7, 0x01, 0x00, 0x0E, -/* 0000A5D0 */ 0xA4, 0x01, 0x00, 0xA0, 0xA2, 0x01, 0x00, 0x4A, 0xA0, 0x01, 0x00, 0xE5, 0x9D, 0x01, 0x00, 0xBA, -/* 0000A5E0 */ 0x9C, 0x01, 0x00, 0xB2, 0x9B, 0x01, 0x00, 0x41, 0x9B, 0x01, 0x00, 0x72, 0x99, 0x01, 0x00, 0xC6, -/* 0000A5F0 */ 0x86, 0x01, 0x00, 0xC5, 0x71, 0x01, 0x00, 0x3F, 0x42, 0x01, 0x00, 0x46, 0x36, 0x01, 0x00, 0x74, -/* 0000A600 */ 0x35, 0x01, 0x00, 0xBE, 0x34, 0x01, 0x00, 0xB5, 0x33, 0x01, 0x00, 0x1A, 0x33, 0x01, 0x00, 0xA4, -/* 0000A610 */ 0x32, 0x01, 0x00, 0x30, 0x32, 0x01, 0x00, 0x0A, 0x30, 0x01, 0x00, 0x13, 0x2E, 0x01, 0x00, 0xA5, -/* 0000A620 */ 0x2C, 0x01, 0x00, 0x53, 0x28, 0x01, 0x00, 0xE2, 0x26, 0x01, 0x00, 0x5A, 0x25, 0x01, 0x00, 0x5D, -/* 0000A630 */ 0x20, 0x01, 0x00, 0x5B, 0x1E, 0x01, 0x00, 0xE6, 0x1C, 0x01, 0x00, 0x94, 0x1C, 0x01, 0x00, 0xD1, -/* 0000A640 */ 0x18, 0x01, 0x00, 0xFE, 0x17, 0x01, 0x00, 0xFD, 0x14, 0x01, 0x00, 0x65, 0x12, 0x01, 0x00, 0x56, -/* 0000A650 */ 0x11, 0x01, 0x00, 0x4A, 0x10, 0x01, 0x00, 0x5A, 0x0E, 0x01, 0x00, 0xCF, 0x0D, 0x01, 0x00, 0x44, -/* 0000A660 */ 0x0D, 0x01, 0x00, 0xB9, 0x0C, 0x01, 0x00, 0x41, 0x0C, 0x01, 0x00, 0x01, 0x0A, 0x01, 0x00, 0x9D, -/* 0000A670 */ 0x06, 0x01, 0x00, 0x52, 0xF0, 0x00, 0x00, 0xF5, 0xD9, 0x00, 0x00, 0x7F, 0xA6, 0x00, 0x00, 0x3F, -/* 0000A680 */ 0x5D, 0x18, 0xC1, 0x53, 0xAD, 0x25, 0x01, 0xFE, 0xD5, 0x0C, 0x1A, 0xA0, 0x41, 0xD1, 0x00, 0xB7, -/* 0000A690 */ 0xFF, 0x76, 0x4C, 0x02, 0x00, 0x0F, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFF, 0x76, 0x4C, -/* 0000A6A0 */ 0x02, 0x00, 0xFE, 0x28, 0x7A, 0xFE, 0x28, 0x7A, 0x01, 0xFE, 0xD5, 0x04, 0x15, 0x36, 0x44, 0x09, -/* 0000A6B0 */ 0xEE, 0xED, 0x02, 0x0E, 0x02, 0x09, 0x19, 0x19, 0x19, 0x19, 0x07, 0x02, 0x41, 0x42, 0x43, 0x44, -/* 0000A6C0 */ 0x08, 0x06, 0xFE, 0x3D, 0x03, 0x06, 0xFE, 0x41, 0x04, 0x06, 0xFE, 0xD6, 0x04, 0x05, 0xFE, 0xD7, -/* 0000A6D0 */ 0x04, 0x06, 0xFE, 0xD8, 0x04, 0x05, 0xFE, 0xD9, 0x04, 0x06, 0xFE, 0xDA, 0x04, 0x05, 0xFE, 0xDB, -/* 0000A6E0 */ 0x04, 0x06, 0xFE, 0xDC, 0x04, 0x05, 0xFE, 0xDD, 0x04, 0x06, 0xFE, 0xDE, 0x04, 0x05, 0xFE, 0xDF, -/* 0000A6F0 */ 0x04, 0x06, 0xFE, 0xE0, 0x04, 0x05, 0xFE, 0xE1, 0x04, 0x06, 0xFE, 0xE2, 0x04, 0x05, 0xFE, 0xE3, -/* 0000A700 */ 0x04, 0x06, 0xFE, 0xE4, 0x04, 0x05, 0xFE, 0xE5, 0x04, 0x06, 0xFE, 0xE6, 0x04, 0x05, 0xFE, 0xE7, -/* 0000A710 */ 0x04, 0x07, 0x06, 0xFE, 0x4F, 0x04, 0x01, 0x00, 0x06, 0xFE, 0x50, 0x04, 0x01, 0x01, 0x06, 0xFE, -/* 0000A720 */ 0x51, 0x04, 0x01, 0x02, 0x05, 0xFE, 0x52, 0x04, 0x05, 0xFE, 0x53, 0x04, 0x06, 0xFE, 0x54, 0x04, -/* 0000A730 */ 0x05, 0xFE, 0x55, 0x04, 0x06, 0xFE, 0x56, 0x04, 0x05, 0xFE, 0x57, 0x04, 0x05, 0xFE, 0x58, 0x04, -/* 0000A740 */ 0x05, 0xFE, 0x59, 0x04, 0x05, 0xFE, 0x5A, 0x04, 0x06, 0xFE, 0xB3, 0x03, 0x06, 0xFE, 0xB4, 0x03, -/* 0000A750 */ 0x06, 0xFE, 0x0B, 0x04, 0x06, 0xFE, 0x40, 0x03, 0x06, 0xFE, 0x42, 0x03, 0x0C, 0x06, 0xFE, 0x43, -/* 0000A760 */ 0x03, 0x06, 0xFE, 0x44, 0x03, 0x06, 0xFE, 0x0C, 0x04, 0x0B, 0x06, 0xFE, 0x26, 0x04, 0x06, 0xFE, -/* 0000A770 */ 0x8D, 0x03, 0x05, 0xFE, 0x25, 0x04, 0x06, 0xFE, 0x0D, 0x04, 0x06, 0xFE, 0x4C, 0x03, 0xFE, 0x4C, -/* 0000A780 */ 0x04, 0x4F, 0x40, 0xA6, 0x36, 0xA6, 0x37, 0xA6, 0x38, 0xA6, 0x39, 0xA6, 0x3A, 0xA6, 0x3B, 0xA6, -/* 0000A790 */ 0x3C, 0xA6, 0x3D, 0xA6, 0x3E, 0xA6, 0x3F, 0x8D, 0x02, 0x32, 0x46, 0x00, 0x00, 0x14, 0x0E, 0x00, -/* 0000A7A0 */ 0x46, 0x03, 0x8D, 0x02, 0x32, 0x46, 0x00, 0x00, 0x14, 0x03, 0x00, 0x46, 0x04, 0x09, 0x14, 0x04, -/* 0000A7B0 */ 0xDE, 0x00, 0x0B, 0x01, 0xB6, 0x46, 0x00, 0x01, 0x53, 0x01, 0x00, 0x36, 0x46, 0x93, 0x00, 0x02, -/* 0000A7C0 */ 0x36, 0x01, 0x53, 0x01, 0x01, 0x37, 0x46, 0x93, 0x00, 0x03, 0x37, 0x01, 0x53, 0x01, 0x02, 0x38, -/* 0000A7D0 */ 0x46, 0x93, 0x00, 0x04, 0x38, 0x01, 0x53, 0x01, 0x03, 0x39, 0x46, 0x93, 0x00, 0x05, 0x39, 0x01, -/* 0000A7E0 */ 0x53, 0x01, 0x04, 0x3A, 0x46, 0x93, 0x00, 0x06, 0x3A, 0x01, 0x53, 0x01, 0x05, 0x3B, 0x46, 0x93, -/* 0000A7F0 */ 0x00, 0x07, 0x3B, 0x01, 0x53, 0x01, 0x06, 0x3C, 0x46, 0x93, 0x00, 0x08, 0x3C, 0x01, 0x53, 0x01, -/* 0000A800 */ 0x07, 0x3D, 0x46, 0x93, 0x00, 0x09, 0x3D, 0x4F, 0x46, 0x93, 0x00, 0x0A, 0x46, 0xCB, 0x00, 0x00, -/* 0000A810 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x79, 0x06, 0x46, 0x00, 0x79, 0x08, -/* 0000A820 */ 0x46, 0x01, 0x79, 0x0A, 0x46, 0x02, 0x79, 0x0C, 0x46, 0x03, 0x79, 0x0E, 0x46, 0x04, 0x79, 0x10, -/* 0000A830 */ 0x46, 0x05, 0x79, 0x12, 0x46, 0x06, 0x79, 0x14, 0x46, 0x07, 0x79, 0x16, 0x46, 0x08, 0x94, 0x02, -/* 0000A840 */ 0x46, 0xCD, 0x46, 0x03, 0x00, 0x00, 0xA6, 0x47, 0x9F, 0x00, 0x47, 0x46, 0xA6, 0x47, 0x9F, 0x01, -/* 0000A850 */ 0x47, 0x46, 0xA6, 0x47, 0x9F, 0x02, 0x47, 0x46, 0x93, 0x00, 0x0A, 0x46, 0x8D, 0x02, 0x04, 0x46, -/* 0000A860 */ 0x01, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0x2C, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, -/* 0000A870 */ 0x00, 0x47, 0x00, 0x00, 0x00, 0x79, 0x19, 0x47, 0x09, 0x79, 0x1B, 0x47, 0x0A, 0x79, 0x1D, 0x47, -/* 0000A880 */ 0x0B, 0x5B, 0x01, 0x47, 0x00, 0x00, 0x5B, 0x02, 0x17, 0x00, 0x00, 0xEE, 0x03, 0x46, 0x46, 0x00, -/* 0000A890 */ 0x00, 0x47, 0x40, 0x46, 0xB6, 0x47, 0x00, 0x01, 0x53, 0x01, 0x08, 0x46, 0x47, 0x07, 0x06, 0x00, -/* 0000A8A0 */ 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x1E, 0x01, 0x00, 0x5B, 0x02, 0x1F, 0x01, 0x00, 0x5B, 0x03, 0x20, -/* 0000A8B0 */ 0x01, 0x00, 0x60, 0x47, 0x40, 0x0C, 0x5B, 0x04, 0x47, 0x01, 0x00, 0x8D, 0x02, 0x36, 0x47, 0x02, -/* 0000A8C0 */ 0x00, 0x4B, 0x47, 0x60, 0x47, 0x47, 0x0D, 0x5B, 0x05, 0x47, 0x01, 0x00, 0xEE, 0x06, 0xFF, 0x46, -/* 0000A8D0 */ 0x01, 0x00, 0xB6, 0x47, 0x00, 0x01, 0x53, 0x01, 0x09, 0x46, 0x47, 0x07, 0x06, 0x00, 0x5A, 0x00, -/* 0000A8E0 */ 0x02, 0x5B, 0x01, 0x21, 0x02, 0x00, 0x5B, 0x02, 0x22, 0x02, 0x00, 0x5B, 0x03, 0x22, 0x02, 0x00, -/* 0000A8F0 */ 0x60, 0x47, 0x40, 0x0E, 0x5B, 0x04, 0x47, 0x02, 0x00, 0x8D, 0x02, 0x36, 0x47, 0x02, 0x00, 0x4B, -/* 0000A900 */ 0x47, 0x60, 0x47, 0x47, 0x0F, 0x5B, 0x05, 0x47, 0x02, 0x00, 0xEE, 0x06, 0xFF, 0x46, 0x02, 0x00, -/* 0000A910 */ 0xB6, 0x47, 0x00, 0x01, 0x53, 0x01, 0x0A, 0x46, 0x47, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x02, 0x5B, -/* 0000A920 */ 0x01, 0x23, 0x03, 0x00, 0x5B, 0x02, 0x24, 0x03, 0x00, 0x5B, 0x03, 0x24, 0x03, 0x00, 0x60, 0x47, -/* 0000A930 */ 0x40, 0x10, 0x5B, 0x04, 0x47, 0x03, 0x00, 0x8D, 0x02, 0x36, 0x47, 0x02, 0x00, 0x4B, 0x47, 0x60, -/* 0000A940 */ 0x47, 0x47, 0x11, 0x5B, 0x05, 0x47, 0x03, 0x00, 0xEE, 0x06, 0xFF, 0x46, 0x03, 0x00, 0x8D, 0x02, -/* 0000A950 */ 0x32, 0x46, 0x00, 0x00, 0x14, 0x03, 0x00, 0x46, 0x03, 0x09, 0x68, 0x02, 0xDE, 0x01, 0x04, 0x03, -/* 0000A960 */ 0xB6, 0x46, 0x00, 0xB5, 0x01, 0x00, 0x00, 0x00, 0x46, 0x46, 0x01, 0x53, 0x01, 0x0B, 0x3E, 0x46, -/* 0000A970 */ 0x93, 0x01, 0x02, 0x3E, 0x01, 0x53, 0x01, 0x0C, 0x3F, 0x46, 0x93, 0x01, 0x03, 0x3F, 0x8D, 0x02, -/* 0000A980 */ 0x23, 0x46, 0x03, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x25, 0x04, 0x00, 0x8F, -/* 0000A990 */ 0x01, 0x02, 0x47, 0x04, 0x00, 0x5B, 0x02, 0x47, 0x04, 0x00, 0xEE, 0x03, 0xFF, 0x46, 0x04, 0x00, -/* 0000A9A0 */ 0x8D, 0x02, 0x23, 0x46, 0x03, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x26, 0x05, -/* 0000A9B0 */ 0x00, 0x8F, 0x01, 0x03, 0x47, 0x05, 0x00, 0x5B, 0x02, 0x47, 0x05, 0x00, 0xEE, 0x03, 0xFF, 0x46, -/* 0000A9C0 */ 0x05, 0x00, 0x8F, 0x01, 0x02, 0x46, 0x04, 0x00, 0xCD, 0x47, 0x02, 0x01, 0x00, 0x9F, 0x00, 0x27, -/* 0000A9D0 */ 0x47, 0x9F, 0x01, 0x28, 0x47, 0x75, 0x47, 0x46, 0x12, 0x8D, 0x02, 0x15, 0x46, 0x06, 0x00, 0x07, -/* 0000A9E0 */ 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8F, 0x01, 0x02, 0x47, 0x04, 0x00, 0x5B, 0x01, 0x47, 0x06, 0x00, -/* 0000A9F0 */ 0x5B, 0x02, 0x29, 0x06, 0x00, 0xCB, 0x40, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, -/* 0000AA00 */ 0x00, 0x00, 0x8F, 0x01, 0x02, 0x48, 0x04, 0x00, 0x07, 0x01, 0x00, 0xC2, 0x01, 0x48, 0x48, 0x07, -/* 0000AA10 */ 0x00, 0x79, 0x48, 0x47, 0x13, 0x79, 0x2C, 0x47, 0x14, 0x79, 0x2C, 0x47, 0x15, 0x79, 0x2C, 0x47, -/* 0000AA20 */ 0x16, 0x5B, 0x03, 0x47, 0x06, 0x00, 0xEE, 0x04, 0xFF, 0x46, 0x06, 0x00, 0x8D, 0x02, 0x04, 0x46, -/* 0000AA30 */ 0x01, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x8F, 0x01, 0x02, 0x47, 0x04, 0x00, 0x60, 0x47, -/* 0000AA40 */ 0x47, 0x17, 0x5B, 0x01, 0x47, 0x08, 0x00, 0x8D, 0x02, 0x08, 0x47, 0x07, 0x00, 0x60, 0x47, 0x47, -/* 0000AA50 */ 0x17, 0x5B, 0x02, 0x47, 0x08, 0x00, 0xEE, 0x03, 0xFF, 0x46, 0x08, 0x00, 0x8D, 0x02, 0x15, 0x46, -/* 0000AA60 */ 0x06, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8F, 0x01, 0x02, 0x47, 0x04, 0x00, 0x60, 0x47, -/* 0000AA70 */ 0x47, 0x17, 0x5B, 0x01, 0x47, 0x09, 0x00, 0x5B, 0x02, 0x2F, 0x09, 0x00, 0xCB, 0x58, 0x00, 0x00, -/* 0000AA80 */ 0x00, 0x03, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0x8F, 0x01, 0x02, 0x48, 0x04, 0x00, 0x79, -/* 0000AA90 */ 0x48, 0x47, 0x13, 0x79, 0x30, 0x47, 0x14, 0x79, 0x2C, 0x47, 0x15, 0x79, 0x30, 0x47, 0x16, 0x5B, -/* 0000AAA0 */ 0x03, 0x47, 0x09, 0x00, 0xEE, 0x04, 0xFF, 0x46, 0x09, 0x00, 0x8D, 0x02, 0x15, 0x46, 0x06, 0x00, -/* 0000AAB0 */ 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8F, 0x01, 0x02, 0x47, 0x04, 0x00, 0x60, 0x47, 0x47, 0x17, -/* 0000AAC0 */ 0x5B, 0x01, 0x47, 0x0A, 0x00, 0x5B, 0x02, 0x31, 0x0A, 0x00, 0xCB, 0x70, 0x00, 0x00, 0x00, 0x04, -/* 0000AAD0 */ 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0x8D, 0x02, 0x23, 0x48, 0x03, 0x00, 0x07, 0x03, 0x00, -/* 0000AAE0 */ 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x33, 0x0B, 0x00, 0xB6, 0x4A, 0x00, 0xB5, 0x01, 0x00, 0x00, 0x00, -/* 0000AAF0 */ 0x4A, 0x4A, 0x01, 0x53, 0x01, 0x0D, 0x49, 0x4A, 0x5B, 0x02, 0x49, 0x0B, 0x00, 0xEE, 0x03, 0x48, -/* 0000AB00 */ 0x48, 0x0B, 0x00, 0x79, 0x48, 0x47, 0x18, 0x79, 0x2C, 0x47, 0x15, 0x79, 0x30, 0x47, 0x16, 0x5B, -/* 0000AB10 */ 0x03, 0x47, 0x0A, 0x00, 0xEE, 0x04, 0xFF, 0x46, 0x0A, 0x00, 0x8D, 0x02, 0x15, 0x46, 0x06, 0x00, -/* 0000AB20 */ 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8F, 0x01, 0x02, 0x47, 0x04, 0x00, 0x60, 0x47, 0x47, 0x17, -/* 0000AB30 */ 0x5B, 0x01, 0x47, 0x0C, 0x00, 0x5B, 0x02, 0x34, 0x0C, 0x00, 0xCB, 0x84, 0x00, 0x00, 0x00, 0x05, -/* 0000AB40 */ 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0xB6, 0x49, 0x00, 0xB5, 0x01, 0x00, 0x00, 0x00, 0x49, -/* 0000AB50 */ 0x49, 0x01, 0x57, 0x01, 0x0E, 0x48, 0x49, 0x47, 0x79, 0x48, 0x47, 0x13, 0x79, 0x30, 0x47, 0x14, -/* 0000AB60 */ 0x79, 0x2C, 0x47, 0x15, 0x79, 0x30, 0x47, 0x16, 0x5B, 0x03, 0x47, 0x0C, 0x00, 0xEE, 0x04, 0xFF, -/* 0000AB70 */ 0x46, 0x0C, 0x00, 0x8D, 0x02, 0x15, 0x46, 0x06, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8F, -/* 0000AB80 */ 0x01, 0x02, 0x47, 0x04, 0x00, 0x5B, 0x01, 0x47, 0x0D, 0x00, 0x5B, 0x02, 0x35, 0x0D, 0x00, 0xCB, -/* 0000AB90 */ 0x9C, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0x8D, 0x01, 0x17, 0x48, -/* 0000ABA0 */ 0x08, 0x00, 0x4B, 0x48, 0x79, 0x48, 0x47, 0x13, 0x79, 0x30, 0x47, 0x14, 0x79, 0x30, 0x47, 0x16, -/* 0000ABB0 */ 0x5B, 0x03, 0x47, 0x0D, 0x00, 0xEE, 0x04, 0xFF, 0x46, 0x0D, 0x00, 0x8F, 0x01, 0x02, 0x00, 0x04, -/* 0000ABC0 */ 0x00, 0x09, 0x07, 0x00, 0xA6, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x07, 0xB0, 0x00, -/* 0000ABD0 */ 0x9C, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, -/* 0000ABE0 */ 0x82, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, -/* 0000ABF0 */ 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, -/* 0000AC00 */ 0x81, 0x01, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 0000AC10 */ 0x84, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, -/* 0000AC20 */ 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, -/* 0000AC30 */ 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, -/* 0000AC40 */ 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, -/* 0000AC50 */ 0x81, 0x01, 0x00, 0x00, 0x2C, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 0000AC60 */ 0x60, 0x01, 0x00, 0x00, 0x5E, 0x01, 0x00, 0x00, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 0000AC70 */ 0x03, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD6, 0x04, 0x00, 0x00, 0xD8, 0x04, 0x00, 0x00, -/* 0000AC80 */ 0xDA, 0x04, 0x00, 0x00, 0xDC, 0x04, 0x00, 0x00, 0xDE, 0x04, 0x00, 0x00, 0xE0, 0x04, 0x00, 0x00, -/* 0000AC90 */ 0xE2, 0x04, 0x00, 0x00, 0xE4, 0x04, 0x00, 0x00, 0xE6, 0x04, 0x00, 0x00, 0xFE, 0xD6, 0x04, 0xFE, -/* 0000ACA0 */ 0xD8, 0x04, 0xFE, 0xDA, 0x04, 0xFE, 0xDC, 0x04, 0xFE, 0xDE, 0x04, 0xFE, 0xE0, 0x04, 0xFE, 0xE2, -/* 0000ACB0 */ 0x04, 0xFE, 0xE4, 0x04, 0xFE, 0xE6, 0x04, 0xFE, 0x60, 0x01, 0xFE, 0x5E, 0x01, 0xFE, 0x61, 0x01, -/* 0000ACC0 */ 0xFE, 0x60, 0x01, 0xFE, 0x03, 0x03, 0xFE, 0x5E, 0x01, 0xFE, 0x04, 0x03, 0xFE, 0x61, 0x01, 0xFE, -/* 0000ACD0 */ 0x05, 0x03, 0xFE, 0xF4, 0x01, 0xFE, 0x83, 0x01, 0xFE, 0x82, 0x01, 0xFE, 0x80, 0x01, 0xFE, 0x81, -/* 0000ACE0 */ 0x01, 0xFE, 0x15, 0x01, 0xFE, 0x84, 0x01, 0x02, 0x01, 0x09, 0x00, 0xFE, 0x3B, 0x04, 0x01, 0xFE, -/* 0000ACF0 */ 0xE8, 0x04, 0x02, 0xFE, 0xE9, 0x04, 0x03, 0xFE, 0xEA, 0x04, 0x04, 0xFE, 0xEB, 0x04, 0x05, 0xFE, -/* 0000AD00 */ 0xEC, 0x04, 0x06, 0xFE, 0x3A, 0x04, 0x07, 0xFE, 0x37, 0x04, 0x08, 0xFE, 0x3E, 0x04, 0x03, 0x02, -/* 0000AD10 */ 0x00, 0xFE, 0x24, 0x02, 0x01, 0xFE, 0xF5, 0x01, 0xFF, 0x8C, 0x4C, 0x02, 0x00, 0x14, 0x16, 0x00, -/* 0000AD20 */ 0x00, 0x00, 0x76, 0x00, 0x9A, 0x13, 0x34, 0x00, 0xEF, 0x36, 0x1B, 0x00, 0x5E, 0x00, 0x38, 0x00, -/* 0000AD30 */ 0x16, 0x10, 0x3E, 0x00, 0x42, 0x02, 0x3E, 0x00, 0x54, 0x02, 0x3E, 0x00, 0x53, 0x02, 0x30, 0x00, -/* 0000AD40 */ 0x62, 0x04, 0x22, 0x00, 0x59, 0x04, 0x22, 0x00, 0x54, 0x00, 0x17, 0x00, 0x48, 0x00, 0x53, 0x00, -/* 0000AD50 */ 0x9D, 0x00, 0x30, 0x00, 0x4A, 0x00, 0x4E, 0x00, 0xA2, 0x00, 0x70, 0x00, 0x22, 0x03, 0x59, 0x00, -/* 0000AD60 */ 0xEC, 0x08, 0x48, 0x00, 0x9F, 0x00, 0x09, 0x00, 0x88, 0x00, 0x07, 0x00, 0x16, 0x00, 0x00, 0xEB, -/* 0000AD70 */ 0xD5, 0x00, 0x00, 0xD2, 0xD0, 0x00, 0x00, 0x4F, 0xD0, 0x00, 0x00, 0x46, 0xCE, 0x00, 0x00, 0x78, -/* 0000AD80 */ 0xCC, 0x00, 0x00, 0x24, 0xC8, 0x00, 0x00, 0x90, 0xBE, 0x00, 0x00, 0xA0, 0xBB, 0x00, 0x00, 0x24, -/* 0000AD90 */ 0xBA, 0x00, 0x00, 0xA8, 0xB8, 0x00, 0x00, 0x2C, 0xB7, 0x00, 0x00, 0x00, 0xB5, 0x00, 0x00, 0xF7, -/* 0000ADA0 */ 0xB2, 0x00, 0x00, 0xF0, 0xB1, 0x00, 0x00, 0xAB, 0xAD, 0x00, 0x00, 0x3F, 0x5D, 0x08, 0xC1, 0x13, -/* 0000ADB0 */ 0x8D, 0x27, 0x00, 0xFE, 0xD1, 0x0E, 0x1B, 0xA0, 0x41, 0xC3, 0x00, 0xFE, 0x0D, 0x04, 0xCA, 0xFF, -/* 0000ADC0 */ 0x00, 0x00, 0x00, 0x02, 0xFF, 0xD3, 0xBC, 0x02, 0x00, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, -/* 0000ADD0 */ 0x01, 0xFF, 0xD3, 0xBC, 0x02, 0x00, 0xFE, 0x30, 0x08, 0xFE, 0x30, 0x08, 0x03, 0xFE, 0x02, 0x04, -/* 0000ADE0 */ 0xFE, 0x11, 0x05, 0xFE, 0xCA, 0x01, 0x07, 0x15, 0x19, 0x09, 0x78, 0x78, 0x05, 0x08, 0x09, 0x20, -/* 0000ADF0 */ 0x20, 0x20, 0x20, 0x01, 0x16, 0x17, 0x18, 0x06, 0xFE, 0xF6, 0x03, 0x05, 0xFE, 0x12, 0x05, 0x06, -/* 0000AE00 */ 0xFE, 0x47, 0x03, 0x06, 0xFE, 0xF7, 0x03, 0x06, 0xFE, 0x99, 0x04, 0x06, 0xFE, 0x35, 0x04, 0x06, -/* 0000AE10 */ 0xFE, 0x88, 0x04, 0x06, 0xFE, 0x68, 0x04, 0x06, 0xFE, 0x46, 0x04, 0x06, 0xFE, 0x47, 0x04, 0x06, -/* 0000AE20 */ 0xFE, 0x48, 0x04, 0x06, 0xFE, 0x49, 0x04, 0x06, 0xFE, 0x4A, 0x04, 0x06, 0xFE, 0x4B, 0x04, 0x06, -/* 0000AE30 */ 0xFE, 0x4C, 0x04, 0x06, 0xFE, 0x4D, 0x04, 0x06, 0xFE, 0x4E, 0x04, 0x07, 0x08, 0xFE, 0x18, 0x02, -/* 0000AE40 */ 0x59, 0x19, 0xB2, 0x15, 0x19, 0x2C, 0x19, 0x15, 0x15, 0x03, 0x00, 0x19, 0x02, 0x09, 0x24, 0x00, -/* 0000AE50 */ 0x8D, 0x05, 0x03, 0x1A, 0x00, 0x00, 0x6B, 0x19, 0x1A, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x1A, -/* 0000AE60 */ 0x5B, 0x01, 0x03, 0x00, 0x00, 0x5B, 0x02, 0x04, 0x00, 0x00, 0xF2, 0x03, 0xFF, 0x19, 0x00, 0x00, -/* 0000AE70 */ 0x00, 0x00, 0x00, 0x00, 0x8D, 0x05, 0x03, 0x1A, 0x00, 0x00, 0x6B, 0x19, 0x1A, 0x01, 0x07, 0x02, -/* 0000AE80 */ 0x00, 0x5A, 0x00, 0x1A, 0x5B, 0x01, 0x15, 0x01, 0x00, 0xF2, 0x02, 0x19, 0x19, 0x01, 0x00, 0x00, -/* 0000AE90 */ 0x00, 0x01, 0x00, 0x94, 0x02, 0x19, 0x91, 0x02, 0x19, 0x01, 0x00, 0xA6, 0x1A, 0x14, 0x0D, 0x00, -/* 0000AEA0 */ 0x19, 0x1A, 0x91, 0x02, 0x19, 0x01, 0x00, 0x60, 0x19, 0x19, 0x02, 0x0F, 0x24, 0x00, 0x19, 0x8D, -/* 0000AEB0 */ 0x05, 0x03, 0x1A, 0x00, 0x00, 0x6B, 0x19, 0x1A, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x1A, 0x5B, -/* 0000AEC0 */ 0x01, 0x03, 0x02, 0x00, 0x5B, 0x02, 0x04, 0x02, 0x00, 0xF2, 0x03, 0xFF, 0x19, 0x00, 0x00, 0x00, -/* 0000AED0 */ 0x00, 0x02, 0x00, 0x8D, 0x05, 0x04, 0x19, 0x02, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x14, 0xCB, -/* 0000AEE0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00, 0x91, 0x02, 0x1B, 0x01, -/* 0000AEF0 */ 0x00, 0x60, 0x1B, 0x1B, 0x03, 0x79, 0x1B, 0x1A, 0x04, 0x91, 0x02, 0x1B, 0x01, 0x00, 0x60, 0x1B, -/* 0000AF00 */ 0x1B, 0x05, 0x79, 0x1B, 0x1A, 0x06, 0x91, 0x02, 0x1B, 0x01, 0x00, 0x60, 0x1B, 0x1B, 0x07, 0x79, -/* 0000AF10 */ 0x1B, 0x1A, 0x08, 0x91, 0x02, 0x1B, 0x01, 0x00, 0x60, 0x1B, 0x1B, 0x09, 0x79, 0x1B, 0x1A, 0x0A, -/* 0000AF20 */ 0x91, 0x02, 0x1B, 0x01, 0x00, 0x60, 0x1B, 0x1B, 0x0B, 0x79, 0x1B, 0x1A, 0x0C, 0x91, 0x02, 0x1B, -/* 0000AF30 */ 0x01, 0x00, 0x60, 0x1B, 0x1B, 0x0D, 0x79, 0x1B, 0x1A, 0x0E, 0x91, 0x02, 0x1B, 0x01, 0x00, 0x60, -/* 0000AF40 */ 0x1B, 0x1B, 0x0F, 0x79, 0x1B, 0x1A, 0x10, 0x91, 0x02, 0x1B, 0x01, 0x00, 0x60, 0x1B, 0x1B, 0x11, -/* 0000AF50 */ 0x79, 0x1B, 0x1A, 0x12, 0x91, 0x02, 0x1B, 0x01, 0x00, 0x60, 0x1B, 0x1B, 0x13, 0x79, 0x1B, 0x1A, -/* 0000AF60 */ 0x14, 0x91, 0x02, 0x1B, 0x01, 0x00, 0x60, 0x1B, 0x1B, 0x15, 0x79, 0x1B, 0x1A, 0x16, 0x91, 0x02, -/* 0000AF70 */ 0x1B, 0x01, 0x00, 0x60, 0x1B, 0x1B, 0x17, 0x79, 0x1B, 0x1A, 0x18, 0x91, 0x02, 0x1B, 0x01, 0x00, -/* 0000AF80 */ 0x60, 0x1B, 0x1B, 0x19, 0x79, 0x1B, 0x1A, 0x1A, 0x91, 0x02, 0x1B, 0x01, 0x00, 0x60, 0x1B, 0x1B, -/* 0000AF90 */ 0x1B, 0x79, 0x1B, 0x1A, 0x1C, 0x91, 0x02, 0x1B, 0x01, 0x00, 0x60, 0x1B, 0x1B, 0x1D, 0x79, 0x1B, -/* 0000AFA0 */ 0x1A, 0x1E, 0x5B, 0x01, 0x1A, 0x03, 0x00, 0x5B, 0x02, 0x13, 0x03, 0x00, 0xEE, 0x03, 0x19, 0x19, -/* 0000AFB0 */ 0x03, 0x00, 0x94, 0x03, 0x19, 0x8D, 0x05, 0x04, 0x19, 0x02, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, -/* 0000AFC0 */ 0x14, 0xCA, 0x1A, 0x5B, 0x01, 0x1A, 0x04, 0x00, 0x5B, 0x02, 0x13, 0x04, 0x00, 0xEE, 0x03, 0x19, -/* 0000AFD0 */ 0x19, 0x04, 0x00, 0x94, 0x04, 0x19, 0x8D, 0x05, 0x06, 0x19, 0x03, 0x00, 0x07, 0x05, 0x00, 0x5A, -/* 0000AFE0 */ 0x00, 0x14, 0x8D, 0x05, 0x16, 0x1A, 0x04, 0x00, 0x5B, 0x01, 0x1A, 0x05, 0x00, 0x8D, 0x05, 0x12, -/* 0000AFF0 */ 0x1A, 0x05, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x14, 0x91, 0x03, 0x1B, 0x06, 0x00, 0x5B, 0x01, -/* 0000B000 */ 0x1B, 0x06, 0x00, 0xEE, 0x02, 0x1A, 0x1A, 0x06, 0x00, 0x5B, 0x02, 0x1A, 0x05, 0x00, 0xD3, 0x00, -/* 0000B010 */ 0x1A, 0x5B, 0x03, 0x1A, 0x05, 0x00, 0x91, 0x02, 0x1A, 0x01, 0x00, 0x5B, 0x04, 0x1A, 0x05, 0x00, -/* 0000B020 */ 0xEE, 0x05, 0xFF, 0x19, 0x05, 0x00, 0x8D, 0x05, 0x04, 0x19, 0x02, 0x00, 0x07, 0x03, 0x00, 0x5A, -/* 0000B030 */ 0x00, 0x14, 0x91, 0x04, 0x1A, 0x07, 0x00, 0x5B, 0x01, 0x1A, 0x07, 0x00, 0x8D, 0x05, 0x08, 0x1A, -/* 0000B040 */ 0x08, 0x00, 0x60, 0x1A, 0x1A, 0x1F, 0x5B, 0x02, 0x1A, 0x07, 0x00, 0xEE, 0x03, 0x00, 0x19, 0x07, -/* 0000B050 */ 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, -/* 0000B060 */ 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0x01, 0x00, 0x00, 0x39, 0x02, 0x00, 0x00, 0x18, -/* 0000B070 */ 0x02, 0x00, 0x00, 0x42, 0x02, 0x00, 0x00, 0x3D, 0x02, 0x00, 0x00, 0x44, 0x02, 0x00, 0x00, 0x3B, -/* 0000B080 */ 0x02, 0x00, 0x00, 0x45, 0x02, 0x00, 0x00, 0x3F, 0x02, 0x00, 0x00, 0x3A, 0x02, 0x00, 0x00, 0x3C, -/* 0000B090 */ 0x02, 0x00, 0x00, 0x3E, 0x02, 0x00, 0x00, 0x41, 0x02, 0x00, 0x00, 0x43, 0x02, 0x00, 0x00, 0xFE, -/* 0000B0A0 */ 0x8A, 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0x2C, 0x02, 0xFE, 0xF3, 0x01, 0xFE, 0xF7, 0x01, 0xFE, 0x26, -/* 0000B0B0 */ 0x02, 0xFE, 0x39, 0x02, 0xFE, 0x0C, 0x02, 0xFE, 0x18, 0x02, 0xFE, 0x33, 0x02, 0xFE, 0x42, 0x02, -/* 0000B0C0 */ 0xFE, 0x2B, 0x02, 0xFE, 0x3D, 0x02, 0xFE, 0x35, 0x02, 0xFE, 0x44, 0x02, 0xFE, 0x28, 0x02, 0xFE, -/* 0000B0D0 */ 0x3B, 0x02, 0xFE, 0x38, 0x02, 0xFE, 0x45, 0x02, 0xFE, 0x2F, 0x02, 0xFE, 0x3F, 0x02, 0xFE, 0x27, -/* 0000B0E0 */ 0x02, 0xFE, 0x3A, 0x02, 0xFE, 0x2A, 0x02, 0xFE, 0x3C, 0x02, 0xFE, 0x2E, 0x02, 0xFE, 0x3E, 0x02, -/* 0000B0F0 */ 0xFE, 0x31, 0x02, 0xFE, 0x41, 0x02, 0xFE, 0x34, 0x02, 0xFE, 0x43, 0x02, 0xFE, 0x15, 0x01, 0xFF, -/* 0000B100 */ 0x08, 0xBD, 0x02, 0x00, 0x0A, 0x05, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3C, 0x00, 0x24, 0x00, 0x90, -/* 0000B110 */ 0x00, 0x22, 0x00, 0x4B, 0x00, 0x19, 0x00, 0x6B, 0x00, 0x24, 0x00, 0x90, 0x00, 0xE2, 0x00, 0xCE, -/* 0000B120 */ 0x03, 0x21, 0x00, 0x3E, 0x00, 0x50, 0x00, 0x98, 0x01, 0x30, 0x00, 0x44, 0x00, 0x00, 0x32, 0xB1, -/* 0000B130 */ 0x00, 0x00, 0xBF, 0x5C, 0x0E, 0x01, 0x00, 0x88, 0x01, 0x00, 0xFE, 0xEA, 0x0E, 0x60, 0xA2, 0x41, -/* 0000B140 */ 0xD1, 0x00, 0xCB, 0xFF, 0x6E, 0xC3, 0x02, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, -/* 0000B150 */ 0x6E, 0xC3, 0x02, 0x00, 0xFE, 0x27, 0x01, 0xFE, 0x27, 0x01, 0x41, 0x04, 0x05, 0x07, 0x05, 0x18, -/* 0000B160 */ 0x18, 0x06, 0x02, 0x01, 0x01, 0x05, 0x06, 0x06, 0xFE, 0x88, 0x04, 0x05, 0xFE, 0xD4, 0x04, 0x08, -/* 0000B170 */ 0x6C, 0x8D, 0x01, 0x03, 0x07, 0x00, 0x00, 0x96, 0x07, 0x07, 0x05, 0x00, 0x00, 0xA6, 0x08, 0x15, -/* 0000B180 */ 0x08, 0x00, 0x07, 0x08, 0x14, 0x03, 0x00, 0x05, 0x02, 0x09, 0x4D, 0x00, 0x8D, 0x06, 0x06, 0x07, -/* 0000B190 */ 0x01, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x04, 0x8D, 0x06, 0x13, 0x08, 0x02, 0x00, 0x5B, 0x01, -/* 0000B1A0 */ 0x08, 0x00, 0x00, 0x8D, 0x01, 0x02, 0x08, 0x03, 0x00, 0x5B, 0x02, 0x08, 0x00, 0x00, 0x2F, 0x08, -/* 0000B1B0 */ 0x03, 0x05, 0x5B, 0x03, 0x08, 0x00, 0x00, 0xEE, 0x04, 0x07, 0x07, 0x00, 0x00, 0x0E, 0x18, 0x00, -/* 0000B1C0 */ 0x07, 0x8D, 0x01, 0x04, 0x07, 0x04, 0x00, 0x8D, 0x01, 0x03, 0x08, 0x00, 0x00, 0x96, 0x08, 0x08, -/* 0000B1D0 */ 0x05, 0x01, 0x00, 0x9B, 0x08, 0x07, 0x05, 0x00, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFF, 0x9C, 0xC3, -/* 0000B1E0 */ 0x02, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0xA6, 0x00, 0x1A, 0x00, 0x52, 0x00, 0x00, -/* 0000B1F0 */ 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0xC2, 0x0E, 0x39, 0xA0, 0x41, 0xD1, 0x00, -/* 0000B200 */ 0xC9, 0xFF, 0xC6, 0xB9, 0x02, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFF, 0xC6, 0xB9, -/* 0000B210 */ 0x02, 0x00, 0xFE, 0x60, 0x02, 0xFE, 0x60, 0x02, 0x01, 0x05, 0x05, 0x08, 0x04, 0x23, 0x22, 0x05, -/* 0000B220 */ 0x03, 0x01, 0x04, 0x04, 0x04, 0x04, 0x07, 0x06, 0xFE, 0xF6, 0x03, 0x05, 0xFE, 0x10, 0x05, 0x06, -/* 0000B230 */ 0xFE, 0x47, 0x03, 0x94, 0x59, 0x08, 0xB2, 0x05, 0x08, 0x2C, 0x08, 0x05, 0x15, 0x03, 0x00, 0x08, -/* 0000B240 */ 0x02, 0x09, 0x24, 0x00, 0x8D, 0x05, 0x03, 0x09, 0x00, 0x00, 0x6B, 0x08, 0x09, 0x00, 0x07, 0x03, -/* 0000B250 */ 0x00, 0x5A, 0x00, 0x09, 0x5B, 0x01, 0x03, 0x00, 0x00, 0x5B, 0x02, 0x04, 0x00, 0x00, 0xF2, 0x03, -/* 0000B260 */ 0xFF, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8D, 0x05, 0x03, 0x09, 0x00, 0x00, 0x6B, 0x08, -/* 0000B270 */ 0x09, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x09, 0x5B, 0x01, 0x05, 0x01, 0x00, 0xF2, 0x02, 0x08, -/* 0000B280 */ 0x08, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x06, 0x08, 0xA6, 0x08, 0x14, 0x08, 0x00, 0x06, -/* 0000B290 */ 0x08, 0x60, 0x08, 0x06, 0x02, 0x0F, 0x24, 0x00, 0x08, 0x8D, 0x05, 0x03, 0x09, 0x00, 0x00, 0x6B, -/* 0000B2A0 */ 0x08, 0x09, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x09, 0x5B, 0x01, 0x03, 0x02, 0x00, 0x5B, 0x02, -/* 0000B2B0 */ 0x04, 0x02, 0x00, 0xF2, 0x03, 0xFF, 0x08, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x60, 0x00, 0x06, -/* 0000B2C0 */ 0x03, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x8A, 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0x2C, -/* 0000B2D0 */ 0x02, 0xFE, 0x25, 0x02, 0xFF, 0xEC, 0xB9, 0x02, 0x00, 0x07, 0x05, 0x00, 0x00, 0x00, 0x0B, 0x00, -/* 0000B2E0 */ 0x3C, 0x00, 0x24, 0x00, 0x88, 0x00, 0x22, 0x00, 0x4B, 0x00, 0x0F, 0x00, 0x6B, 0x00, 0x24, 0x00, -/* 0000B2F0 */ 0x88, 0x00, 0x09, 0x00, 0x37, 0x00, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, -/* 0000B300 */ 0xA3, 0x0E, 0x10, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x26, 0x04, 0xC8, 0xFF, 0x1F, 0xB3, 0x02, 0x00, -/* 0000B310 */ 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0x1F, 0xB3, 0x02, 0x00, 0xFE, 0xFD, 0x03, 0xFE, -/* 0000B320 */ 0xFD, 0x03, 0x01, 0x08, 0x06, 0x0B, 0x07, 0x56, 0x52, 0x05, 0x0A, 0x06, 0x06, 0x06, 0x06, 0x06, -/* 0000B330 */ 0x0A, 0x06, 0xFE, 0xF6, 0x03, 0x05, 0xFE, 0x10, 0x05, 0x06, 0xFE, 0x47, 0x03, 0x08, 0xFE, 0x72, -/* 0000B340 */ 0x01, 0x59, 0x0B, 0xB2, 0x07, 0x0B, 0x4F, 0x08, 0x4F, 0x09, 0x2C, 0x0B, 0x07, 0x15, 0x03, 0x00, -/* 0000B350 */ 0x0B, 0x02, 0x09, 0x24, 0x00, 0x8D, 0x05, 0x03, 0x0C, 0x00, 0x00, 0x6B, 0x0B, 0x0C, 0x00, 0x07, -/* 0000B360 */ 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x03, 0x00, 0x00, 0x5B, 0x02, 0x04, 0x00, 0x00, 0xF2, -/* 0000B370 */ 0x03, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8D, 0x05, 0x03, 0x0C, 0x00, 0x00, 0x6B, -/* 0000B380 */ 0x0B, 0x0C, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x07, 0x01, 0x00, 0xF2, 0x02, -/* 0000B390 */ 0x0B, 0x0B, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x08, 0x0B, 0xA6, 0x0B, 0x14, 0x08, 0x00, -/* 0000B3A0 */ 0x08, 0x0B, 0x60, 0x0B, 0x08, 0x02, 0x0F, 0x24, 0x00, 0x0B, 0x8D, 0x05, 0x03, 0x0C, 0x00, 0x00, -/* 0000B3B0 */ 0x6B, 0x0B, 0x0C, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x03, 0x02, 0x00, 0x5B, -/* 0000B3C0 */ 0x02, 0x04, 0x02, 0x00, 0xF2, 0x03, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xA6, 0x0B, -/* 0000B3D0 */ 0x15, 0x03, 0x00, 0x06, 0x0B, 0x09, 0x50, 0x00, 0x8D, 0x05, 0x21, 0x0B, 0x01, 0x00, 0x07, 0x02, -/* 0000B3E0 */ 0x00, 0x5A, 0x00, 0x05, 0x5B, 0x01, 0x06, 0x03, 0x00, 0xEE, 0x02, 0x0B, 0x0B, 0x03, 0x00, 0x0F, -/* 0000B3F0 */ 0x1B, 0x00, 0x0B, 0x8D, 0x05, 0x20, 0x0B, 0x02, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x05, 0x5B, -/* 0000B400 */ 0x01, 0x06, 0x04, 0x00, 0xEE, 0x02, 0x0B, 0x0B, 0x04, 0x00, 0x0F, 0x1A, 0x00, 0x0B, 0x8D, 0x05, -/* 0000B410 */ 0x03, 0x0C, 0x00, 0x00, 0x6B, 0x0B, 0x0C, 0x03, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x0C, 0xF2, 0x01, -/* 0000B420 */ 0xFF, 0x0B, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0xA6, 0x0B, 0x47, 0x09, 0x0B, 0xA6, 0x0B, 0x15, -/* 0000B430 */ 0x03, 0x00, 0x06, 0x0B, 0x09, 0x25, 0x00, 0x8D, 0x05, 0x24, 0x0C, 0x03, 0x00, 0x6B, 0x0B, 0x0C, -/* 0000B440 */ 0x04, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x06, 0x06, 0x00, 0xF2, 0x02, 0x0B, 0x0B, -/* 0000B450 */ 0x04, 0x00, 0x00, 0x00, 0x06, 0x00, 0x47, 0x09, 0x0B, 0x09, 0x15, 0x00, 0x8D, 0x05, 0x1C, 0x0B, -/* 0000B460 */ 0x04, 0x00, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x05, 0xEE, 0x01, 0x0B, 0x0B, 0x07, 0x00, 0x47, 0x09, -/* 0000B470 */ 0x0B, 0x8D, 0x05, 0x0B, 0x0B, 0x05, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x05, 0x8D, 0x05, 0x03, -/* 0000B480 */ 0x0D, 0x00, 0x00, 0x6B, 0x0C, 0x0D, 0x05, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0D, 0x5B, 0x01, 0x09, -/* 0000B490 */ 0x09, 0x00, 0x5B, 0x02, 0x08, 0x09, 0x00, 0xF2, 0x03, 0x0C, 0x0C, 0x05, 0x00, 0x00, 0x00, 0x09, -/* 0000B4A0 */ 0x00, 0x5B, 0x01, 0x0C, 0x08, 0x00, 0xEE, 0x02, 0x00, 0x0B, 0x08, 0x00, 0x09, 0x02, 0x00, 0xA6, -/* 0000B4B0 */ 0x00, 0x24, 0x00, 0xFE, 0x8A, 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0x2C, 0x02, 0xFE, 0x86, 0x02, 0xFE, -/* 0000B4C0 */ 0x38, 0x03, 0xFE, 0xE6, 0x01, 0xFF, 0x4B, 0xB3, 0x02, 0x00, 0x0D, 0x09, 0x00, 0x00, 0x00, 0x0B, -/* 0000B4D0 */ 0x00, 0x38, 0x00, 0x24, 0x00, 0x7F, 0x00, 0x22, 0x00, 0x47, 0x00, 0x0F, 0x00, 0x67, 0x00, 0x24, -/* 0000B4E0 */ 0x00, 0x80, 0x00, 0x40, 0x00, 0x56, 0x00, 0x1A, 0x00, 0x48, 0x00, 0x05, 0x00, 0x2F, 0x00, 0x0A, -/* 0000B4F0 */ 0x00, 0x32, 0x00, 0x25, 0x00, 0x59, 0x00, 0x15, 0x00, 0x42, 0x00, 0x40, 0x00, 0x51, 0x00, 0x00, -/* 0000B500 */ 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x88, 0x0E, 0x10, 0xA3, 0x41, 0xC1, 0x00, -/* 0000B510 */ 0xFE, 0x47, 0x03, 0xC7, 0xFF, 0x9D, 0xAE, 0x02, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x01, -/* 0000B520 */ 0xFF, 0x9D, 0xAE, 0x02, 0x00, 0xFE, 0x26, 0x04, 0xFE, 0x26, 0x04, 0x01, 0x09, 0x05, 0x0B, 0x05, -/* 0000B530 */ 0x60, 0x59, 0x05, 0x09, 0x09, 0x07, 0x06, 0x07, 0x07, 0x0A, 0x08, 0x06, 0xFE, 0x47, 0x03, 0x07, -/* 0000B540 */ 0xFE, 0x8F, 0x01, 0x59, 0x0B, 0xB2, 0x07, 0x0B, 0x4F, 0x08, 0x4F, 0x09, 0x15, 0x05, 0x00, 0x05, -/* 0000B550 */ 0x02, 0xA6, 0x0B, 0x47, 0x05, 0x0B, 0x15, 0x05, 0x00, 0x06, 0x02, 0xA6, 0x0B, 0x47, 0x06, 0x0B, -/* 0000B560 */ 0x4F, 0x08, 0x4F, 0x09, 0x69, 0x06, 0x00, 0x00, 0x00, 0x0B, 0x14, 0x0A, 0x00, 0x07, 0x0B, 0xA6, -/* 0000B570 */ 0x0B, 0x14, 0x03, 0x00, 0x07, 0x0B, 0x09, 0x1E, 0x00, 0x8D, 0x01, 0x02, 0x0B, 0x00, 0x00, 0x4B, -/* 0000B580 */ 0x0B, 0x07, 0x03, 0x00, 0x5B, 0x01, 0x05, 0x00, 0x00, 0x5B, 0x02, 0x06, 0x00, 0x00, 0xC2, 0x03, -/* 0000B590 */ 0x00, 0x0B, 0x00, 0x00, 0x09, 0x39, 0x01, 0x8D, 0x05, 0x24, 0x0C, 0x01, 0x00, 0x6B, 0x0B, 0x0C, -/* 0000B5A0 */ 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x07, 0x01, 0x00, 0xF2, 0x02, 0x0B, 0x0B, -/* 0000B5B0 */ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x08, 0x0B, 0x8D, 0x05, 0x11, 0x0B, 0x02, 0x00, 0x07, -/* 0000B5C0 */ 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x08, 0x02, 0x00, 0xEE, 0x02, 0x0B, 0x0B, 0x02, 0x00, -/* 0000B5D0 */ 0x0F, 0x1F, 0x00, 0x0B, 0x8D, 0x05, 0x03, 0x0C, 0x03, 0x00, 0x6B, 0x0B, 0x0C, 0x01, 0x07, 0x02, -/* 0000B5E0 */ 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x03, 0x03, 0x00, 0xF2, 0x02, 0xFF, 0x0B, 0x01, 0x00, 0x00, -/* 0000B5F0 */ 0x00, 0x03, 0x00, 0x8D, 0x05, 0x03, 0x0C, 0x03, 0x00, 0x6B, 0x0B, 0x0C, 0x02, 0x07, 0x02, 0x00, -/* 0000B600 */ 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x08, 0x04, 0x00, 0xF2, 0x02, 0x0B, 0x0B, 0x02, 0x00, 0x00, 0x00, -/* 0000B610 */ 0x04, 0x00, 0x47, 0x09, 0x0B, 0xA6, 0x0B, 0x14, 0x03, 0x00, 0x09, 0x0B, 0x09, 0x45, 0x00, 0x8D, -/* 0000B620 */ 0x05, 0x04, 0x0B, 0x04, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0xCA, 0x0C, 0x5B, 0x01, 0x0C, -/* 0000B630 */ 0x05, 0x00, 0x5B, 0x02, 0x04, 0x05, 0x00, 0xEE, 0x03, 0x0B, 0x0B, 0x05, 0x00, 0x47, 0x09, 0x0B, -/* 0000B640 */ 0x8D, 0x05, 0x03, 0x0C, 0x03, 0x00, 0x6B, 0x0B, 0x0C, 0x03, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, -/* 0000B650 */ 0x5B, 0x01, 0x08, 0x06, 0x00, 0x5B, 0x02, 0x09, 0x06, 0x00, 0xF2, 0x03, 0xFF, 0x0B, 0x03, 0x00, -/* 0000B660 */ 0x00, 0x00, 0x06, 0x00, 0x8D, 0x02, 0x08, 0x0B, 0x05, 0x00, 0x4B, 0x0B, 0x07, 0x04, 0x00, 0x5A, -/* 0000B670 */ 0x00, 0x02, 0x5B, 0x01, 0x09, 0x07, 0x00, 0x5B, 0x02, 0x05, 0x07, 0x00, 0x5B, 0x03, 0x06, 0x07, -/* 0000B680 */ 0x00, 0xEE, 0x04, 0xFF, 0x0B, 0x07, 0x00, 0x47, 0x0B, 0x09, 0x8D, 0x05, 0x06, 0x0C, 0x06, 0x00, -/* 0000B690 */ 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8D, 0x05, 0x1A, 0x0D, 0x07, 0x00, 0x5B, 0x01, 0x0D, 0x08, -/* 0000B6A0 */ 0x00, 0x8D, 0x01, 0x03, 0x0D, 0x08, 0x00, 0x4B, 0x0D, 0x5B, 0x02, 0x0D, 0x08, 0x00, 0x5B, 0x03, -/* 0000B6B0 */ 0x08, 0x08, 0x00, 0xEE, 0x04, 0x0C, 0x0C, 0x08, 0x00, 0x75, 0x0C, 0x0B, 0x04, 0x60, 0x0B, 0x09, -/* 0000B6C0 */ 0x05, 0x80, 0x0B, 0x0B, 0xF8, 0x00, 0xFA, 0x0B, 0x47, 0x00, 0x08, 0x09, 0x02, 0x00, 0xA6, 0x00, -/* 0000B6D0 */ 0x24, 0x00, 0xFE, 0x36, 0x03, 0xFE, 0x8E, 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0xF0, 0x01, 0xFE, 0x25, -/* 0000B6E0 */ 0x02, 0xFE, 0x25, 0x02, 0xAB, 0xFF, 0xB5, 0xAE, 0x02, 0x00, 0x10, 0x09, 0x00, 0x00, 0x00, 0x0A, -/* 0000B6F0 */ 0x00, 0x15, 0x00, 0x0E, 0x00, 0x2B, 0x00, 0x15, 0x00, 0x43, 0x00, 0x1E, 0x00, 0x58, 0x00, 0x22, -/* 0000B700 */ 0x00, 0x37, 0x00, 0x1B, 0x00, 0x38, 0x00, 0x1F, 0x00, 0x9D, 0x00, 0x22, 0x00, 0x47, 0x00, 0x0A, -/* 0000B710 */ 0x00, 0x3A, 0x00, 0x21, 0x00, 0x3F, 0x00, 0x24, 0x00, 0x58, 0x00, 0x23, 0x00, 0x4F, 0x00, 0x36, -/* 0000B720 */ 0x00, 0x66, 0x00, 0x0B, 0x00, 0x3D, 0x00, 0x08, 0x00, 0x1C, 0x00, 0x00, 0xBF, 0x5D, 0x08, 0xC1, -/* 0000B730 */ 0x03, 0x8D, 0x05, 0x00, 0xFE, 0x81, 0x0E, 0x0D, 0xA2, 0x41, 0xD1, 0x00, 0xC5, 0xFF, 0x1F, 0xAC, -/* 0000B740 */ 0x02, 0x00, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x06, 0x06, 0xFF, 0x1F, 0xAC, 0x02, 0x00, 0xFE, -/* 0000B750 */ 0x9F, 0x01, 0xFE, 0x9F, 0x01, 0x40, 0x04, 0xF8, 0xFE, 0x92, 0x04, 0xFE, 0x93, 0x04, 0xFE, 0x94, -/* 0000B760 */ 0x04, 0x0C, 0x03, 0x0B, 0x08, 0x16, 0x16, 0x04, 0x02, 0x03, 0x01, 0x01, 0x01, 0x01, 0x08, 0x09, -/* 0000B770 */ 0x0A, 0x08, 0x58, 0x94, 0x02, 0x03, 0x94, 0x03, 0x04, 0x94, 0x04, 0x05, 0x94, 0x05, 0x06, 0x8D, -/* 0000B780 */ 0x04, 0x03, 0x0C, 0x00, 0x00, 0x6B, 0x0B, 0x0C, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x8D, -/* 0000B790 */ 0x04, 0x23, 0x0D, 0x01, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x91, 0x02, 0x0E, 0x02, 0x00, -/* 0000B7A0 */ 0x5B, 0x01, 0x0E, 0x01, 0x00, 0xD3, 0x00, 0x0E, 0x5B, 0x02, 0x0E, 0x01, 0x00, 0xEE, 0x03, 0x0D, -/* 0000B7B0 */ 0x0D, 0x01, 0x00, 0x5B, 0x01, 0x0D, 0x00, 0x00, 0x5B, 0x02, 0x07, 0x00, 0x00, 0xF2, 0x03, 0xFF, -/* 0000B7C0 */ 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xEE, 0x01, 0xFF, 0x72, -/* 0000B7D0 */ 0xAC, 0x02, 0x00, 0x02, 0x0C, 0x00, 0x00, 0x00, 0x4A, 0x00, 0x4B, 0x01, 0x00, 0xE1, 0xB7, 0x00, -/* 0000B7E0 */ 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x82, 0x0E, 0x49, 0xA2, 0x41, 0xC3, -/* 0000B7F0 */ 0x00, 0xFE, 0x97, 0x04, 0xC6, 0xFF, 0xAB, 0xAC, 0x02, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, -/* 0000B800 */ 0x01, 0xFF, 0xAB, 0xAC, 0x02, 0x00, 0xEE, 0xEE, 0x01, 0x07, 0x03, 0x07, 0x09, 0x1D, 0x1B, 0x05, -/* 0000B810 */ 0x01, 0x05, 0x01, 0x01, 0x01, 0x01, 0x06, 0x08, 0x77, 0x59, 0x07, 0xB2, 0x05, 0x07, 0x15, 0x05, -/* 0000B820 */ 0x00, 0x03, 0x02, 0xA6, 0x07, 0x47, 0x03, 0x07, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA6, 0x07, 0x47, -/* 0000B830 */ 0x04, 0x07, 0x8D, 0x02, 0x09, 0x08, 0x00, 0x00, 0x4B, 0x08, 0x6B, 0x07, 0x08, 0x00, 0x07, 0x08, -/* 0000B840 */ 0x00, 0x5A, 0x00, 0x08, 0x5B, 0x01, 0x05, 0x00, 0x00, 0x8D, 0x01, 0x02, 0x09, 0x01, 0x00, 0x5B, -/* 0000B850 */ 0x02, 0x09, 0x00, 0x00, 0x8D, 0x01, 0x03, 0x09, 0x02, 0x00, 0x5B, 0x03, 0x09, 0x00, 0x00, 0x8D, -/* 0000B860 */ 0x01, 0x04, 0x09, 0x03, 0x00, 0x5B, 0x04, 0x09, 0x00, 0x00, 0x8D, 0x01, 0x05, 0x09, 0x04, 0x00, -/* 0000B870 */ 0x5B, 0x05, 0x09, 0x00, 0x00, 0x5B, 0x06, 0x03, 0x00, 0x00, 0x5B, 0x07, 0x04, 0x00, 0x00, 0xF2, -/* 0000B880 */ 0x08, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, -/* 0000B890 */ 0x53, 0xFF, 0xD7, 0xAC, 0x02, 0x00, 0x04, 0x05, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0A, -/* 0000B8A0 */ 0x00, 0x2B, 0x00, 0x5C, 0x00, 0x81, 0x00, 0x00, 0xBF, 0x5D, 0x08, 0xC1, 0x03, 0x8D, 0x05, 0x00, -/* 0000B8B0 */ 0xFE, 0x7B, 0x0E, 0x0D, 0xA2, 0x41, 0xD1, 0x00, 0xC3, 0xFF, 0xCB, 0xA9, 0x02, 0x00, 0x01, 0xFF, -/* 0000B8C0 */ 0x00, 0x10, 0x01, 0x00, 0x06, 0x06, 0xFF, 0xCB, 0xA9, 0x02, 0x00, 0xFE, 0x9F, 0x01, 0xFE, 0x9F, -/* 0000B8D0 */ 0x01, 0x40, 0x04, 0xF8, 0xFE, 0x92, 0x04, 0xFE, 0x93, 0x04, 0xFE, 0x94, 0x04, 0x0C, 0x03, 0x0B, -/* 0000B8E0 */ 0x08, 0x16, 0x16, 0x04, 0x02, 0x03, 0x01, 0x01, 0x01, 0x01, 0x08, 0x09, 0x0A, 0x08, 0x58, 0x94, -/* 0000B8F0 */ 0x02, 0x03, 0x94, 0x03, 0x04, 0x94, 0x04, 0x05, 0x94, 0x05, 0x06, 0x8D, 0x04, 0x03, 0x0C, 0x00, -/* 0000B900 */ 0x00, 0x6B, 0x0B, 0x0C, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x8D, 0x04, 0x23, 0x0D, 0x01, -/* 0000B910 */ 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x91, 0x02, 0x0E, 0x02, 0x00, 0x5B, 0x01, 0x0E, 0x01, -/* 0000B920 */ 0x00, 0xD3, 0x00, 0x0E, 0x5B, 0x02, 0x0E, 0x01, 0x00, 0xEE, 0x03, 0x0D, 0x0D, 0x01, 0x00, 0x5B, -/* 0000B930 */ 0x01, 0x0D, 0x00, 0x00, 0x5B, 0x02, 0x07, 0x00, 0x00, 0xF2, 0x03, 0xFF, 0x0B, 0x00, 0x00, 0x00, -/* 0000B940 */ 0x00, 0x00, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xEE, 0x01, 0xFF, 0x1E, 0xAA, 0x02, 0x00, 0x02, -/* 0000B950 */ 0x0C, 0x00, 0x00, 0x00, 0x4A, 0x00, 0x4B, 0x01, 0x00, 0x5D, 0xB9, 0x00, 0x00, 0xBF, 0x5C, 0x08, -/* 0000B960 */ 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x7C, 0x0E, 0x49, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x96, 0x04, -/* 0000B970 */ 0xC4, 0xFF, 0x57, 0xAA, 0x02, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x01, 0xFF, 0x57, 0xAA, -/* 0000B980 */ 0x02, 0x00, 0xEE, 0xEE, 0x01, 0x07, 0x03, 0x07, 0x09, 0x1D, 0x1B, 0x05, 0x01, 0x05, 0x01, 0x01, -/* 0000B990 */ 0x01, 0x01, 0x06, 0x08, 0x77, 0x59, 0x07, 0xB2, 0x05, 0x07, 0x15, 0x05, 0x00, 0x03, 0x02, 0xA6, -/* 0000B9A0 */ 0x07, 0x47, 0x03, 0x07, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA6, 0x07, 0x47, 0x04, 0x07, 0x8D, 0x02, -/* 0000B9B0 */ 0x09, 0x08, 0x00, 0x00, 0x4B, 0x08, 0x6B, 0x07, 0x08, 0x00, 0x07, 0x08, 0x00, 0x5A, 0x00, 0x08, -/* 0000B9C0 */ 0x5B, 0x01, 0x05, 0x00, 0x00, 0x8D, 0x01, 0x02, 0x09, 0x01, 0x00, 0x5B, 0x02, 0x09, 0x00, 0x00, -/* 0000B9D0 */ 0x8D, 0x01, 0x03, 0x09, 0x02, 0x00, 0x5B, 0x03, 0x09, 0x00, 0x00, 0x8D, 0x01, 0x04, 0x09, 0x03, -/* 0000B9E0 */ 0x00, 0x5B, 0x04, 0x09, 0x00, 0x00, 0x8D, 0x01, 0x05, 0x09, 0x04, 0x00, 0x5B, 0x05, 0x09, 0x00, -/* 0000B9F0 */ 0x00, 0x5B, 0x06, 0x03, 0x00, 0x00, 0x5B, 0x07, 0x04, 0x00, 0x00, 0xF2, 0x08, 0x00, 0x07, 0x00, -/* 0000BA00 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x53, 0xFF, 0x83, 0xAA, -/* 0000BA10 */ 0x02, 0x00, 0x04, 0x05, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0A, 0x00, 0x2B, 0x00, 0x5C, -/* 0000BA20 */ 0x00, 0x81, 0x00, 0x00, 0xBF, 0x5D, 0x08, 0xC1, 0x03, 0x8D, 0x05, 0x00, 0xFE, 0x75, 0x0E, 0x0D, -/* 0000BA30 */ 0xA2, 0x41, 0xD1, 0x00, 0xC1, 0xFF, 0x89, 0xA7, 0x02, 0x00, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, -/* 0000BA40 */ 0x06, 0x06, 0xFF, 0x89, 0xA7, 0x02, 0x00, 0xFE, 0x9B, 0x01, 0xFE, 0x9B, 0x01, 0x40, 0x04, 0xF8, -/* 0000BA50 */ 0xFE, 0x92, 0x04, 0xFE, 0x93, 0x04, 0xFE, 0x94, 0x04, 0x0C, 0x03, 0x0B, 0x08, 0x16, 0x16, 0x04, -/* 0000BA60 */ 0x02, 0x03, 0x01, 0x01, 0x01, 0x01, 0x08, 0x09, 0x0A, 0x08, 0x58, 0x94, 0x02, 0x03, 0x94, 0x03, -/* 0000BA70 */ 0x04, 0x94, 0x04, 0x05, 0x94, 0x05, 0x06, 0x8D, 0x04, 0x03, 0x0C, 0x00, 0x00, 0x6B, 0x0B, 0x0C, -/* 0000BA80 */ 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x8D, 0x04, 0x23, 0x0D, 0x01, 0x00, 0x07, 0x03, 0x00, -/* 0000BA90 */ 0x5A, 0x00, 0x02, 0x91, 0x02, 0x0E, 0x02, 0x00, 0x5B, 0x01, 0x0E, 0x01, 0x00, 0xD3, 0x00, 0x0E, -/* 0000BAA0 */ 0x5B, 0x02, 0x0E, 0x01, 0x00, 0xEE, 0x03, 0x0D, 0x0D, 0x01, 0x00, 0x5B, 0x01, 0x0D, 0x00, 0x00, -/* 0000BAB0 */ 0x5B, 0x02, 0x07, 0x00, 0x00, 0xF2, 0x03, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA6, -/* 0000BAC0 */ 0x00, 0x24, 0x00, 0xFE, 0xEE, 0x01, 0xFF, 0xDC, 0xA7, 0x02, 0x00, 0x02, 0x0C, 0x00, 0x00, 0x00, -/* 0000BAD0 */ 0x4A, 0x00, 0x47, 0x01, 0x00, 0xD9, 0xBA, 0x00, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x01, -/* 0000BAE0 */ 0x00, 0xFE, 0x76, 0x0E, 0x49, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x95, 0x04, 0xC2, 0xFF, 0x15, 0xA8, -/* 0000BAF0 */ 0x02, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x01, 0xFF, 0x15, 0xA8, 0x02, 0x00, 0xEA, 0xEA, -/* 0000BB00 */ 0x01, 0x07, 0x03, 0x07, 0x09, 0x1D, 0x1B, 0x05, 0x01, 0x05, 0x01, 0x01, 0x01, 0x01, 0x06, 0x08, -/* 0000BB10 */ 0x77, 0x59, 0x07, 0xB2, 0x05, 0x07, 0x15, 0x05, 0x00, 0x03, 0x02, 0xA6, 0x07, 0x47, 0x03, 0x07, -/* 0000BB20 */ 0x15, 0x05, 0x00, 0x04, 0x02, 0xA6, 0x07, 0x47, 0x04, 0x07, 0x8D, 0x02, 0x09, 0x08, 0x00, 0x00, -/* 0000BB30 */ 0x4B, 0x08, 0x6B, 0x07, 0x08, 0x00, 0x07, 0x08, 0x00, 0x5A, 0x00, 0x08, 0x5B, 0x01, 0x05, 0x00, -/* 0000BB40 */ 0x00, 0x8D, 0x01, 0x02, 0x09, 0x01, 0x00, 0x5B, 0x02, 0x09, 0x00, 0x00, 0x8D, 0x01, 0x03, 0x09, -/* 0000BB50 */ 0x02, 0x00, 0x5B, 0x03, 0x09, 0x00, 0x00, 0x8D, 0x01, 0x04, 0x09, 0x03, 0x00, 0x5B, 0x04, 0x09, -/* 0000BB60 */ 0x00, 0x00, 0x8D, 0x01, 0x05, 0x09, 0x04, 0x00, 0x5B, 0x05, 0x09, 0x00, 0x00, 0x5B, 0x06, 0x03, -/* 0000BB70 */ 0x00, 0x00, 0x5B, 0x07, 0x04, 0x00, 0x00, 0xF2, 0x08, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 0000BB80 */ 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x53, 0xFF, 0x3D, 0xA8, 0x02, 0x00, 0x04, 0x05, -/* 0000BB90 */ 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0A, 0x00, 0x2B, 0x00, 0x5C, 0x00, 0x81, 0x00, 0x00, -/* 0000BBA0 */ 0xBF, 0x5C, 0x0E, 0xC1, 0x07, 0x88, 0x01, 0x00, 0xFE, 0x3E, 0x0E, 0x0C, 0xA3, 0x41, 0xC1, 0x00, -/* 0000BBB0 */ 0xFE, 0x37, 0x04, 0xC0, 0xFF, 0x4A, 0x98, 0x02, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x07, 0x07, -/* 0000BBC0 */ 0xFF, 0x4A, 0x98, 0x02, 0x00, 0xFE, 0x74, 0x06, 0xFE, 0x74, 0x06, 0x01, 0x0F, 0x07, 0x11, 0x0A, -/* 0000BBD0 */ 0x8A, 0x84, 0x04, 0x02, 0x01, 0x0E, 0x0C, 0x04, 0x04, 0x04, 0x04, 0x01, 0x10, 0x06, 0xFE, 0xF6, -/* 0000BBE0 */ 0x03, 0x06, 0xFE, 0x41, 0x04, 0x08, 0x05, 0xFE, 0x91, 0x04, 0x07, 0xFE, 0x4B, 0x02, 0x59, 0x11, -/* 0000BBF0 */ 0xB2, 0x0D, 0x11, 0x4F, 0x0E, 0x4F, 0x0F, 0x2C, 0x11, 0x0D, 0x15, 0x0F, 0x00, 0x11, 0x02, 0x8D, -/* 0000BC00 */ 0x04, 0x0C, 0x11, 0x00, 0x00, 0xE1, 0x11, 0x0D, 0x11, 0x00, 0x0F, 0x24, 0x00, 0x11, 0x8D, 0x04, -/* 0000BC10 */ 0x03, 0x12, 0x01, 0x00, 0x6B, 0x11, 0x12, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x12, 0x5B, 0x01, -/* 0000BC20 */ 0x07, 0x00, 0x00, 0x5B, 0x02, 0x03, 0x00, 0x00, 0xF2, 0x03, 0xFF, 0x11, 0x00, 0x00, 0x00, 0x00, -/* 0000BC30 */ 0x00, 0x00, 0x8D, 0x04, 0x06, 0x11, 0x02, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x04, 0x8D, 0x04, -/* 0000BC40 */ 0x1B, 0x12, 0x03, 0x00, 0x5B, 0x01, 0x12, 0x01, 0x00, 0x8D, 0x04, 0x0C, 0x12, 0x00, 0x00, 0x07, -/* 0000BC50 */ 0x02, 0x00, 0x5B, 0x01, 0x0D, 0x02, 0x00, 0xC2, 0x02, 0x12, 0x12, 0x02, 0x00, 0x5B, 0x02, 0x12, -/* 0000BC60 */ 0x01, 0x00, 0xEE, 0x03, 0x11, 0x11, 0x01, 0x00, 0x47, 0x0E, 0x11, 0x8D, 0x04, 0x21, 0x11, 0x04, -/* 0000BC70 */ 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x0E, 0x03, 0x00, 0xEE, 0x02, 0x11, 0x11, -/* 0000BC80 */ 0x03, 0x00, 0x0F, 0x1B, 0x00, 0x11, 0x8D, 0x04, 0x20, 0x11, 0x05, 0x00, 0x07, 0x02, 0x00, 0x5A, -/* 0000BC90 */ 0x00, 0x04, 0x5B, 0x01, 0x0E, 0x04, 0x00, 0xEE, 0x02, 0x11, 0x11, 0x04, 0x00, 0x0F, 0x06, 0x00, -/* 0000BCA0 */ 0x11, 0x47, 0x00, 0x05, 0x09, 0x90, 0x01, 0xA6, 0x11, 0x47, 0x0F, 0x11, 0x8D, 0x04, 0x03, 0x11, -/* 0000BCB0 */ 0x01, 0x00, 0x60, 0x11, 0x11, 0x01, 0x0E, 0xB3, 0x00, 0x11, 0xA6, 0x11, 0x14, 0x03, 0x00, 0x0B, -/* 0000BCC0 */ 0x11, 0x09, 0xA9, 0x00, 0xA6, 0x11, 0x14, 0x03, 0x00, 0x0C, 0x11, 0x09, 0x9F, 0x00, 0x8D, 0x01, -/* 0000BCD0 */ 0x0A, 0x11, 0x06, 0x00, 0x4B, 0x11, 0x96, 0x11, 0x11, 0x0A, 0x00, 0x00, 0x0E, 0x14, 0x00, 0x11, -/* 0000BCE0 */ 0x8D, 0x01, 0x0A, 0x11, 0x06, 0x00, 0x4B, 0x11, 0x96, 0x11, 0x11, 0x0A, 0x01, 0x00, 0x47, 0x0F, -/* 0000BCF0 */ 0x11, 0x09, 0x79, 0x00, 0x8D, 0x04, 0x04, 0x11, 0x07, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x04, -/* 0000BD00 */ 0xCA, 0x12, 0x5B, 0x01, 0x12, 0x05, 0x00, 0x5B, 0x02, 0x06, 0x05, 0x00, 0xEE, 0x03, 0x11, 0x11, -/* 0000BD10 */ 0x05, 0x00, 0x47, 0x0F, 0x11, 0x8D, 0x01, 0x08, 0x11, 0x08, 0x00, 0x4B, 0x11, 0x07, 0x04, 0x00, -/* 0000BD20 */ 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x0F, 0x06, 0x00, 0xA6, 0x12, 0x5B, 0x02, 0x12, 0x06, 0x00, 0x8D, -/* 0000BD30 */ 0x01, 0x02, 0x12, 0x09, 0x00, 0x4B, 0x12, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x04, 0xA6, 0x13, 0x5B, -/* 0000BD40 */ 0x01, 0x13, 0x07, 0x00, 0x5B, 0x02, 0x08, 0x07, 0x00, 0x5B, 0x03, 0x09, 0x07, 0x00, 0xEE, 0x04, -/* 0000BD50 */ 0x12, 0x12, 0x07, 0x00, 0x5B, 0x03, 0x12, 0x06, 0x00, 0xEE, 0x04, 0xFF, 0x11, 0x06, 0x00, 0x8D, -/* 0000BD60 */ 0x01, 0x0A, 0x11, 0x06, 0x00, 0x4B, 0x11, 0x9B, 0x0F, 0x11, 0x0A, 0x00, 0x00, 0x0F, 0x67, 0x00, -/* 0000BD70 */ 0x0F, 0x8D, 0x04, 0x04, 0x11, 0x07, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x04, 0xCA, 0x12, 0x5B, -/* 0000BD80 */ 0x01, 0x12, 0x08, 0x00, 0x5B, 0x02, 0x06, 0x08, 0x00, 0xEE, 0x03, 0x11, 0x11, 0x08, 0x00, 0x47, -/* 0000BD90 */ 0x0F, 0x11, 0x8D, 0x01, 0x08, 0x11, 0x08, 0x00, 0x4B, 0x11, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x04, -/* 0000BDA0 */ 0x5B, 0x01, 0x0F, 0x09, 0x00, 0x5B, 0x02, 0x0B, 0x09, 0x00, 0x8D, 0x01, 0x02, 0x12, 0x09, 0x00, -/* 0000BDB0 */ 0x4B, 0x12, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x0C, 0x0A, 0x00, 0x5B, 0x02, 0x08, -/* 0000BDC0 */ 0x0A, 0x00, 0x5B, 0x03, 0x09, 0x0A, 0x00, 0xEE, 0x04, 0x12, 0x12, 0x0A, 0x00, 0x5B, 0x03, 0x12, -/* 0000BDD0 */ 0x09, 0x00, 0xEE, 0x04, 0xFF, 0x11, 0x09, 0x00, 0x8D, 0x04, 0x0B, 0x11, 0x0A, 0x00, 0x07, 0x02, -/* 0000BDE0 */ 0x00, 0x5A, 0x00, 0x04, 0x8D, 0x04, 0x03, 0x13, 0x01, 0x00, 0x6B, 0x12, 0x13, 0x02, 0x07, 0x03, -/* 0000BDF0 */ 0x00, 0x5A, 0x00, 0x13, 0x8D, 0x04, 0x24, 0x15, 0x0B, 0x00, 0x6B, 0x14, 0x15, 0x03, 0x07, 0x02, -/* 0000BE00 */ 0x00, 0x5A, 0x00, 0x15, 0x5B, 0x01, 0x0D, 0x0D, 0x00, 0xF2, 0x02, 0x14, 0x14, 0x03, 0x00, 0x00, -/* 0000BE10 */ 0x00, 0x0D, 0x00, 0x5B, 0x01, 0x14, 0x0C, 0x00, 0x5B, 0x02, 0x0F, 0x0C, 0x00, 0xF2, 0x03, 0x12, -/* 0000BE20 */ 0x12, 0x02, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x5B, 0x01, 0x12, 0x0B, 0x00, 0xEE, 0x02, 0x00, 0x11, -/* 0000BE30 */ 0x0B, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x8A, 0x02, 0xFE, 0x61, 0x03, 0xFE, -/* 0000BE40 */ 0xE6, 0x01, 0xFE, 0x38, 0x03, 0xFF, 0xC3, 0x98, 0x02, 0x00, 0x11, 0x09, 0x00, 0x00, 0x00, 0x17, -/* 0000BE50 */ 0x00, 0x4F, 0x00, 0x24, 0x00, 0x50, 0x00, 0x39, 0x00, 0x53, 0x00, 0x36, 0x00, 0x3C, 0x00, 0x06, -/* 0000BE60 */ 0x00, 0x3A, 0x00, 0x05, 0x00, 0x2D, 0x00, 0x22, 0x00, 0xCE, 0x00, 0x12, 0x00, 0x84, 0x00, 0x14, -/* 0000BE70 */ 0x00, 0xA2, 0x00, 0x21, 0x00, 0x3E, 0x00, 0x4A, 0x00, 0x7A, 0x00, 0x0E, 0x00, 0x7C, 0x00, 0x04, -/* 0000BE80 */ 0x00, 0x28, 0x00, 0x21, 0x00, 0x3A, 0x00, 0x46, 0x00, 0x81, 0x00, 0x5F, 0x00, 0x5A, 0x00, 0x00, -/* 0000BE90 */ 0xBF, 0x5C, 0x1A, 0xC1, 0x53, 0xA8, 0x21, 0x00, 0xFE, 0xB1, 0x0D, 0x0C, 0xB3, 0x41, 0xC1, 0x00, -/* 0000BEA0 */ 0xFE, 0x3A, 0x04, 0xBF, 0xFF, 0x33, 0x7B, 0x02, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, -/* 0000BEB0 */ 0xFF, 0x33, 0x7B, 0x02, 0x00, 0xFE, 0x7E, 0x1B, 0xFE, 0x7E, 0x1B, 0x45, 0x1C, 0x29, 0x41, 0x07, -/* 0000BEC0 */ 0xFE, 0xB3, 0x01, 0xFE, 0x93, 0x01, 0x04, 0x01, 0x22, 0x0C, 0x0F, 0x2A, 0x2A, 0x2A, 0x2A, 0x01, -/* 0000BED0 */ 0x01, 0x40, 0x41, 0x06, 0xFE, 0xF6, 0x03, 0x06, 0xFE, 0xC8, 0x04, 0x08, 0x06, 0xFE, 0x47, 0x03, -/* 0000BEE0 */ 0x0B, 0x05, 0xFE, 0x53, 0x04, 0x06, 0xFE, 0x56, 0x04, 0x06, 0xFE, 0x00, 0x04, 0x06, 0xFE, 0xAD, -/* 0000BEF0 */ 0x03, 0x05, 0xFE, 0xBC, 0x03, 0x05, 0xFE, 0xFF, 0x03, 0x06, 0xFE, 0x88, 0x04, 0x06, 0xFE, 0x46, -/* 0000BF00 */ 0x04, 0x06, 0xFE, 0x42, 0x04, 0x06, 0xFE, 0x43, 0x04, 0x06, 0xFE, 0x44, 0x04, 0x06, 0xFE, 0x47, -/* 0000BF10 */ 0x04, 0x06, 0xFE, 0x48, 0x04, 0x06, 0xFE, 0x45, 0x04, 0x06, 0xFE, 0x13, 0x04, 0x06, 0xFE, 0x49, -/* 0000BF20 */ 0x04, 0x06, 0xFE, 0x4A, 0x04, 0x06, 0xFE, 0x4B, 0x04, 0x06, 0xFE, 0x4C, 0x04, 0x06, 0xFE, 0x4D, -/* 0000BF30 */ 0x04, 0x06, 0xFE, 0x4E, 0x04, 0x06, 0xFE, 0x68, 0x04, 0x06, 0xFE, 0xC2, 0x03, 0x05, 0xFE, 0x8D, -/* 0000BF40 */ 0x04, 0x05, 0xFE, 0x8E, 0x04, 0x05, 0xFE, 0x0D, 0x05, 0x05, 0xFE, 0x0E, 0x05, 0x07, 0x06, 0xFE, -/* 0000BF50 */ 0xB4, 0x03, 0x06, 0xFE, 0xB3, 0x03, 0x0C, 0x05, 0xFE, 0x0F, 0x05, 0x06, 0xFE, 0x54, 0x04, 0x01, -/* 0000BF60 */ 0x00, 0xFE, 0x0C, 0x07, 0xA6, 0x3F, 0x2C, 0x42, 0x29, 0x0D, 0x03, 0x00, 0x42, 0x02, 0x09, 0x1A, -/* 0000BF70 */ 0x00, 0x8D, 0x04, 0x03, 0x43, 0x00, 0x00, 0x6B, 0x42, 0x43, 0x00, 0x07, 0x01, 0x00, 0x5A, 0x00, -/* 0000BF80 */ 0x43, 0xF2, 0x01, 0xFF, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8D, 0x04, 0x06, 0x42, 0x01, -/* 0000BF90 */ 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x04, 0x8D, 0x04, 0x13, 0x43, 0x02, 0x00, 0x5B, 0x01, 0x43, -/* 0000BFA0 */ 0x01, 0x00, 0x5B, 0x02, 0x29, 0x01, 0x00, 0x5B, 0x03, 0x03, 0x01, 0x00, 0xEE, 0x04, 0x42, 0x42, -/* 0000BFB0 */ 0x01, 0x00, 0x0E, 0x2C, 0x00, 0x42, 0x60, 0x42, 0x29, 0x01, 0x0E, 0x24, 0x00, 0x42, 0x8D, 0x04, -/* 0000BFC0 */ 0x03, 0x43, 0x00, 0x00, 0x6B, 0x42, 0x43, 0x02, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x43, 0x5B, 0x01, -/* 0000BFD0 */ 0x05, 0x02, 0x00, 0x5B, 0x02, 0x05, 0x02, 0x00, 0xF2, 0x03, 0xFF, 0x42, 0x02, 0x00, 0x00, 0x00, -/* 0000BFE0 */ 0x02, 0x00, 0x75, 0x06, 0x29, 0x03, 0x8D, 0x01, 0x02, 0x42, 0x03, 0x00, 0x4B, 0x42, 0x07, 0x04, -/* 0000BFF0 */ 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x2B, 0x03, 0x00, 0x5B, 0x02, 0x07, 0x03, 0x00, 0x5B, 0x03, -/* 0000C000 */ 0x08, 0x03, 0x00, 0xEE, 0x04, 0x42, 0x42, 0x03, 0x00, 0x47, 0x2B, 0x42, 0x8D, 0x03, 0x02, 0x42, -/* 0000C010 */ 0x04, 0x00, 0x4B, 0x42, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x2B, 0x04, 0x00, 0x5B, -/* 0000C020 */ 0x02, 0x09, 0x04, 0x00, 0x5B, 0x03, 0x0A, 0x04, 0x00, 0xCD, 0x43, 0x02, 0x00, 0x00, 0x9F, 0x00, -/* 0000C030 */ 0x0B, 0x43, 0x9F, 0x01, 0x0C, 0x43, 0x5B, 0x04, 0x43, 0x04, 0x00, 0x5B, 0x05, 0x0C, 0x04, 0x00, -/* 0000C040 */ 0xEE, 0x06, 0x42, 0x42, 0x04, 0x00, 0x47, 0x2E, 0x42, 0x8D, 0x03, 0x02, 0x42, 0x04, 0x00, 0x4B, -/* 0000C050 */ 0x42, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x2B, 0x05, 0x00, 0x5B, 0x02, 0x0D, 0x05, -/* 0000C060 */ 0x00, 0x5B, 0x03, 0x0A, 0x05, 0x00, 0xA6, 0x43, 0x5B, 0x04, 0x43, 0x05, 0x00, 0xA6, 0x43, 0x5B, -/* 0000C070 */ 0x05, 0x43, 0x05, 0x00, 0xEE, 0x06, 0x42, 0x42, 0x05, 0x00, 0x47, 0x2F, 0x42, 0xA6, 0x42, 0x15, -/* 0000C080 */ 0x03, 0x00, 0x2F, 0x42, 0x09, 0x25, 0x00, 0x8D, 0x04, 0x03, 0x43, 0x00, 0x00, 0x6B, 0x42, 0x43, -/* 0000C090 */ 0x04, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x43, 0x5B, 0x01, 0x2F, 0x06, 0x00, 0xF2, 0x02, 0x42, 0x42, -/* 0000C0A0 */ 0x04, 0x00, 0x00, 0x00, 0x06, 0x00, 0x47, 0x2F, 0x42, 0x09, 0x1D, 0x00, 0x8D, 0x04, 0x03, 0x43, -/* 0000C0B0 */ 0x00, 0x00, 0x6B, 0x42, 0x43, 0x05, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x43, 0xF2, 0x01, 0x42, 0x42, -/* 0000C0C0 */ 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x47, 0x2F, 0x42, 0xA6, 0x42, 0x14, 0x03, 0x00, 0x2F, 0x42, -/* 0000C0D0 */ 0x09, 0x1A, 0x00, 0x8D, 0x04, 0x03, 0x43, 0x00, 0x00, 0x6B, 0x42, 0x43, 0x06, 0x07, 0x01, 0x00, -/* 0000C0E0 */ 0x5A, 0x00, 0x43, 0xF2, 0x01, 0xFF, 0x42, 0x06, 0x00, 0x00, 0x00, 0x08, 0x00, 0x8D, 0x03, 0x02, -/* 0000C0F0 */ 0x42, 0x04, 0x00, 0x4B, 0x42, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x2B, 0x09, 0x00, -/* 0000C100 */ 0x5B, 0x02, 0x0E, 0x09, 0x00, 0x5B, 0x03, 0x0A, 0x09, 0x00, 0xCD, 0x43, 0x03, 0x01, 0x00, 0x9F, -/* 0000C110 */ 0x00, 0x0F, 0x43, 0x9F, 0x01, 0x10, 0x43, 0x9F, 0x02, 0x11, 0x43, 0x5B, 0x04, 0x43, 0x09, 0x00, -/* 0000C120 */ 0xA6, 0x43, 0x5B, 0x05, 0x43, 0x09, 0x00, 0xEE, 0x06, 0x42, 0x42, 0x09, 0x00, 0x47, 0x30, 0x42, -/* 0000C130 */ 0x8D, 0x03, 0x02, 0x42, 0x04, 0x00, 0x4B, 0x42, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, -/* 0000C140 */ 0x2B, 0x0A, 0x00, 0x5B, 0x02, 0x12, 0x0A, 0x00, 0x5B, 0x03, 0x0A, 0x0A, 0x00, 0xCD, 0x43, 0x03, -/* 0000C150 */ 0x02, 0x00, 0x9F, 0x00, 0x0F, 0x43, 0x9F, 0x01, 0x10, 0x43, 0x9F, 0x02, 0x11, 0x43, 0x5B, 0x04, -/* 0000C160 */ 0x43, 0x0A, 0x00, 0xA6, 0x43, 0x5B, 0x05, 0x43, 0x0A, 0x00, 0xEE, 0x06, 0x42, 0x42, 0x0A, 0x00, -/* 0000C170 */ 0x47, 0x31, 0x42, 0x8D, 0x03, 0x02, 0x42, 0x04, 0x00, 0x4B, 0x42, 0x07, 0x06, 0x00, 0x5A, 0x00, -/* 0000C180 */ 0x04, 0x5B, 0x01, 0x2B, 0x0B, 0x00, 0x5B, 0x02, 0x13, 0x0B, 0x00, 0x5B, 0x03, 0x0A, 0x0B, 0x00, -/* 0000C190 */ 0xCD, 0x43, 0x02, 0x03, 0x00, 0x9F, 0x00, 0x14, 0x43, 0x9F, 0x01, 0x15, 0x43, 0x5B, 0x04, 0x43, -/* 0000C1A0 */ 0x0B, 0x00, 0xA6, 0x43, 0x5B, 0x05, 0x43, 0x0B, 0x00, 0xEE, 0x06, 0x42, 0x42, 0x0B, 0x00, 0x47, -/* 0000C1B0 */ 0x32, 0x42, 0x8D, 0x03, 0x02, 0x42, 0x04, 0x00, 0x4B, 0x42, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, -/* 0000C1C0 */ 0x5B, 0x01, 0x2B, 0x0C, 0x00, 0x5B, 0x02, 0x16, 0x0C, 0x00, 0x5B, 0x03, 0x0A, 0x0C, 0x00, 0xCD, -/* 0000C1D0 */ 0x43, 0x05, 0x04, 0x00, 0x9F, 0x00, 0x14, 0x43, 0x9F, 0x01, 0x15, 0x43, 0x9F, 0x02, 0x0F, 0x43, -/* 0000C1E0 */ 0x9F, 0x03, 0x10, 0x43, 0x9F, 0x04, 0x11, 0x43, 0x5B, 0x04, 0x43, 0x0C, 0x00, 0xA6, 0x43, 0x5B, -/* 0000C1F0 */ 0x05, 0x43, 0x0C, 0x00, 0xEE, 0x06, 0x42, 0x42, 0x0C, 0x00, 0x47, 0x33, 0x42, 0x8D, 0x03, 0x02, -/* 0000C200 */ 0x42, 0x04, 0x00, 0x4B, 0x42, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x2B, 0x0D, 0x00, -/* 0000C210 */ 0x5B, 0x02, 0x17, 0x0D, 0x00, 0x5B, 0x03, 0x0A, 0x0D, 0x00, 0xCD, 0x43, 0x02, 0x05, 0x00, 0x9F, -/* 0000C220 */ 0x00, 0x14, 0x43, 0x9F, 0x01, 0x15, 0x43, 0x5B, 0x04, 0x43, 0x0D, 0x00, 0xA6, 0x43, 0x5B, 0x05, -/* 0000C230 */ 0x43, 0x0D, 0x00, 0xEE, 0x06, 0x42, 0x42, 0x0D, 0x00, 0x47, 0x34, 0x42, 0x8D, 0x03, 0x02, 0x42, -/* 0000C240 */ 0x04, 0x00, 0x4B, 0x42, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x2B, 0x0E, 0x00, 0x5B, -/* 0000C250 */ 0x02, 0x18, 0x0E, 0x00, 0x5B, 0x03, 0x0A, 0x0E, 0x00, 0xCD, 0x43, 0x02, 0x06, 0x00, 0x9F, 0x00, -/* 0000C260 */ 0x14, 0x43, 0x9F, 0x01, 0x15, 0x43, 0x5B, 0x04, 0x43, 0x0E, 0x00, 0xA6, 0x43, 0x5B, 0x05, 0x43, -/* 0000C270 */ 0x0E, 0x00, 0xEE, 0x06, 0x42, 0x42, 0x0E, 0x00, 0x47, 0x35, 0x42, 0x8D, 0x03, 0x02, 0x42, 0x04, -/* 0000C280 */ 0x00, 0x4B, 0x42, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x2B, 0x0F, 0x00, 0x5B, 0x02, -/* 0000C290 */ 0x19, 0x0F, 0x00, 0x5B, 0x03, 0x0A, 0x0F, 0x00, 0xCD, 0x43, 0x02, 0x07, 0x00, 0x9F, 0x00, 0x14, -/* 0000C2A0 */ 0x43, 0x9F, 0x01, 0x15, 0x43, 0x5B, 0x04, 0x43, 0x0F, 0x00, 0xA6, 0x43, 0x5B, 0x05, 0x43, 0x0F, -/* 0000C2B0 */ 0x00, 0xEE, 0x06, 0x42, 0x42, 0x0F, 0x00, 0x47, 0x36, 0x42, 0x8D, 0x03, 0x02, 0x42, 0x04, 0x00, -/* 0000C2C0 */ 0x4B, 0x42, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x2B, 0x10, 0x00, 0x5B, 0x02, 0x1A, -/* 0000C2D0 */ 0x10, 0x00, 0x5B, 0x03, 0x0A, 0x10, 0x00, 0xCD, 0x43, 0x02, 0x08, 0x00, 0x9F, 0x00, 0x14, 0x43, -/* 0000C2E0 */ 0x9F, 0x01, 0x15, 0x43, 0x5B, 0x04, 0x43, 0x10, 0x00, 0xA6, 0x43, 0x5B, 0x05, 0x43, 0x10, 0x00, -/* 0000C2F0 */ 0xEE, 0x06, 0x42, 0x42, 0x10, 0x00, 0x47, 0x37, 0x42, 0x8D, 0x03, 0x02, 0x42, 0x04, 0x00, 0x4B, -/* 0000C300 */ 0x42, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x2B, 0x11, 0x00, 0x5B, 0x02, 0x1B, 0x11, -/* 0000C310 */ 0x00, 0x5B, 0x03, 0x0A, 0x11, 0x00, 0xCD, 0x43, 0x02, 0x09, 0x00, 0x9F, 0x00, 0x10, 0x43, 0x9F, -/* 0000C320 */ 0x01, 0x11, 0x43, 0x5B, 0x04, 0x43, 0x11, 0x00, 0xA6, 0x43, 0x5B, 0x05, 0x43, 0x11, 0x00, 0xEE, -/* 0000C330 */ 0x06, 0x42, 0x42, 0x11, 0x00, 0x47, 0x38, 0x42, 0x0E, 0x37, 0x00, 0x35, 0x8D, 0x03, 0x02, 0x43, -/* 0000C340 */ 0x04, 0x00, 0x4B, 0x43, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x2B, 0x12, 0x00, 0x5B, -/* 0000C350 */ 0x02, 0x1C, 0x12, 0x00, 0x5B, 0x03, 0x1D, 0x12, 0x00, 0xA6, 0x44, 0x5B, 0x04, 0x44, 0x12, 0x00, -/* 0000C360 */ 0xA6, 0x44, 0x5B, 0x05, 0x44, 0x12, 0x00, 0xEE, 0x06, 0x43, 0x43, 0x12, 0x00, 0x47, 0x42, 0x43, -/* 0000C370 */ 0x09, 0x05, 0x00, 0xA6, 0x43, 0x47, 0x42, 0x43, 0x47, 0x39, 0x42, 0x8D, 0x03, 0x02, 0x42, 0x04, -/* 0000C380 */ 0x00, 0x4B, 0x42, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x2B, 0x13, 0x00, 0x5B, 0x02, -/* 0000C390 */ 0x1E, 0x13, 0x00, 0x5B, 0x03, 0x0A, 0x13, 0x00, 0xCD, 0x43, 0x02, 0x0A, 0x00, 0x9F, 0x00, 0x1F, -/* 0000C3A0 */ 0x43, 0x9F, 0x01, 0x0C, 0x43, 0x5B, 0x04, 0x43, 0x13, 0x00, 0x5B, 0x05, 0x0C, 0x13, 0x00, 0xEE, -/* 0000C3B0 */ 0x06, 0x42, 0x42, 0x13, 0x00, 0x47, 0x3A, 0x42, 0xA6, 0x42, 0x15, 0x03, 0x00, 0x39, 0x42, 0x09, -/* 0000C3C0 */ 0x13, 0x00, 0x0E, 0x06, 0x00, 0x39, 0x47, 0x43, 0x20, 0x09, 0x03, 0x00, 0x47, 0x43, 0x21, 0x47, -/* 0000C3D0 */ 0x42, 0x43, 0x09, 0x05, 0x00, 0xA6, 0x43, 0x47, 0x42, 0x43, 0x47, 0x3B, 0x42, 0x8D, 0x01, 0x03, -/* 0000C3E0 */ 0x42, 0x05, 0x00, 0x4B, 0x42, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, 0x8D, 0x04, 0x04, 0x43, 0x06, -/* 0000C3F0 */ 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x04, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 0000C400 */ 0x44, 0x00, 0x00, 0x00, 0x79, 0x30, 0x44, 0x07, 0x79, 0x31, 0x44, 0x08, 0x79, 0x32, 0x44, 0x09, -/* 0000C410 */ 0x79, 0x33, 0x44, 0x0A, 0x79, 0x34, 0x44, 0x0B, 0x79, 0x35, 0x44, 0x0C, 0x79, 0x36, 0x44, 0x0D, -/* 0000C420 */ 0x79, 0x37, 0x44, 0x0E, 0x79, 0x38, 0x44, 0x0F, 0x5B, 0x01, 0x44, 0x15, 0x00, 0x5B, 0x02, 0x22, -/* 0000C430 */ 0x15, 0x00, 0xEE, 0x03, 0x43, 0x43, 0x15, 0x00, 0x5B, 0x01, 0x43, 0x14, 0x00, 0xEE, 0x02, 0x42, -/* 0000C440 */ 0x42, 0x14, 0x00, 0x47, 0x3C, 0x42, 0x8D, 0x03, 0x07, 0x42, 0x07, 0x00, 0x4B, 0x42, 0x07, 0x02, -/* 0000C450 */ 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x2A, 0x16, 0x00, 0xEE, 0x02, 0x42, 0x42, 0x16, 0x00, 0x47, -/* 0000C460 */ 0x2A, 0x42, 0x8D, 0x04, 0x2A, 0x42, 0x08, 0x00, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, -/* 0000C470 */ 0x2A, 0x17, 0x00, 0x5B, 0x02, 0x2E, 0x17, 0x00, 0xCD, 0x43, 0x02, 0x0B, 0x00, 0x9F, 0x00, 0x23, -/* 0000C480 */ 0x43, 0x9F, 0x01, 0x24, 0x43, 0x5B, 0x03, 0x43, 0x17, 0x00, 0x8D, 0x04, 0x2B, 0x43, 0x09, 0x00, -/* 0000C490 */ 0x5B, 0x04, 0x43, 0x17, 0x00, 0xEE, 0x05, 0x42, 0x42, 0x17, 0x00, 0x47, 0x3D, 0x42, 0x75, 0x2E, -/* 0000C4A0 */ 0x29, 0x10, 0x75, 0x2F, 0x29, 0x11, 0x60, 0x42, 0x3D, 0x12, 0x75, 0x42, 0x29, 0x13, 0x75, 0x30, -/* 0000C4B0 */ 0x29, 0x14, 0x75, 0x31, 0x29, 0x15, 0x75, 0x32, 0x29, 0x16, 0x75, 0x33, 0x29, 0x17, 0x75, 0x34, -/* 0000C4C0 */ 0x29, 0x18, 0x75, 0x35, 0x29, 0x19, 0x75, 0x36, 0x29, 0x1A, 0x75, 0x37, 0x29, 0x1B, 0x75, 0x38, -/* 0000C4D0 */ 0x29, 0x1C, 0x75, 0x39, 0x29, 0x1D, 0x75, 0x3A, 0x29, 0x1E, 0x75, 0x3B, 0x29, 0x1F, 0x75, 0x3C, -/* 0000C4E0 */ 0x29, 0x20, 0x47, 0x3E, 0x25, 0xE5, 0x22, 0x00, 0x8D, 0x03, 0x0B, 0x42, 0x0A, 0x00, 0x4B, 0x42, -/* 0000C4F0 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x29, 0x18, 0x00, 0x5B, 0x02, 0x25, 0x18, 0x00, -/* 0000C500 */ 0xEE, 0x03, 0xFF, 0x42, 0x18, 0x00, 0xE9, 0x09, 0x69, 0x00, 0xE7, 0x2C, 0x06, 0x8D, 0x04, 0x22, -/* 0000C510 */ 0x42, 0x0B, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x2C, 0x19, 0x00, 0xEE, 0x02, -/* 0000C520 */ 0xFF, 0x42, 0x19, 0x00, 0x8D, 0x01, 0x02, 0x42, 0x03, 0x00, 0x4B, 0x42, 0x07, 0x04, 0x00, 0x5A, -/* 0000C530 */ 0x00, 0x04, 0x5B, 0x01, 0x2B, 0x1A, 0x00, 0x5B, 0x02, 0x26, 0x1A, 0x00, 0x5B, 0x03, 0x27, 0x1A, -/* 0000C540 */ 0x00, 0xEE, 0x04, 0x42, 0x42, 0x1A, 0x00, 0x47, 0x3F, 0x42, 0x47, 0x42, 0x29, 0x8D, 0x01, 0x03, -/* 0000C550 */ 0x43, 0x05, 0x00, 0x4B, 0x43, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x3F, 0x1B, 0x00, -/* 0000C560 */ 0x5B, 0x02, 0x22, 0x1B, 0x00, 0xEE, 0x03, 0x43, 0x43, 0x1B, 0x00, 0x75, 0x43, 0x42, 0x21, 0x47, -/* 0000C570 */ 0x3E, 0x06, 0xE9, 0x0F, 0x2F, 0x00, 0x3E, 0x47, 0x42, 0x29, 0x8D, 0x01, 0x07, 0x43, 0x0C, 0x00, -/* 0000C580 */ 0x4B, 0x43, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x04, 0x60, 0x44, 0x29, 0x22, 0x96, 0x44, 0x44, 0x28, -/* 0000C590 */ 0x00, 0x00, 0x5B, 0x01, 0x44, 0x1C, 0x00, 0x5B, 0x02, 0x29, 0x1C, 0x00, 0xEE, 0x03, 0x43, 0x43, -/* 0000C5A0 */ 0x1C, 0x00, 0x75, 0x43, 0x42, 0x21, 0xE5, 0x22, 0x00, 0x8D, 0x03, 0x0B, 0x42, 0x0A, 0x00, 0x4B, -/* 0000C5B0 */ 0x42, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x29, 0x1D, 0x00, 0x5B, 0x02, 0x06, 0x1D, -/* 0000C5C0 */ 0x00, 0xEE, 0x03, 0xFF, 0x42, 0x1D, 0x00, 0xE9, 0x09, 0x35, 0x00, 0xE7, 0x2D, 0x06, 0x8D, 0x04, -/* 0000C5D0 */ 0x22, 0x42, 0x0B, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x2D, 0x1E, 0x00, 0xEE, -/* 0000C5E0 */ 0x02, 0xFF, 0x42, 0x1E, 0x00, 0x8D, 0x04, 0x03, 0x43, 0x00, 0x00, 0x6B, 0x42, 0x43, 0x06, 0x07, -/* 0000C5F0 */ 0x01, 0x00, 0x5A, 0x00, 0x43, 0xF2, 0x01, 0xFF, 0x42, 0x06, 0x00, 0x00, 0x00, 0x1F, 0x00, 0xE9, -/* 0000C600 */ 0x8D, 0x01, 0x04, 0x42, 0x0D, 0x00, 0x4B, 0x42, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, 0x60, 0x43, -/* 0000C610 */ 0x29, 0x23, 0x5B, 0x01, 0x43, 0x20, 0x00, 0xEE, 0x02, 0x42, 0x42, 0x20, 0x00, 0x75, 0x42, 0x29, -/* 0000C620 */ 0x24, 0x47, 0x42, 0x29, 0x8D, 0x04, 0x06, 0x43, 0x01, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x04, -/* 0000C630 */ 0x8D, 0x04, 0x1E, 0x44, 0x0E, 0x00, 0x5B, 0x01, 0x44, 0x21, 0x00, 0x60, 0x44, 0x29, 0x25, 0x5B, -/* 0000C640 */ 0x02, 0x44, 0x21, 0x00, 0xEE, 0x03, 0x43, 0x43, 0x21, 0x00, 0x75, 0x43, 0x42, 0x26, 0x60, 0x42, -/* 0000C650 */ 0x29, 0x27, 0xA6, 0x43, 0x15, 0x03, 0x00, 0x42, 0x43, 0x09, 0x0C, 0x00, 0x60, 0x42, 0x29, 0x28, -/* 0000C660 */ 0x43, 0x42, 0x42, 0x20, 0x75, 0x42, 0x29, 0x1D, 0x75, 0x06, 0x29, 0x29, 0xA6, 0x00, 0x24, 0x00, -/* 0000C670 */ 0x01, 0x2C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, -/* 0000C680 */ 0x02, 0x00, 0x00, 0x3B, 0x02, 0x00, 0x00, 0x45, 0x02, 0x00, 0x00, 0x3F, 0x02, 0x00, 0x00, 0x3A, -/* 0000C690 */ 0x02, 0x00, 0x00, 0x3C, 0x02, 0x00, 0x00, 0x3E, 0x02, 0x00, 0x00, 0x41, 0x02, 0x00, 0x00, 0x43, -/* 0000C6A0 */ 0x02, 0x00, 0x00, 0xFE, 0x89, 0x02, 0xFE, 0xF2, 0x01, 0xFE, 0x8D, 0x02, 0xFE, 0xF2, 0x01, 0xFE, -/* 0000C6B0 */ 0xE7, 0x01, 0xFE, 0xE8, 0x01, 0xFE, 0x90, 0x02, 0xFE, 0x44, 0x02, 0xFE, 0x3B, 0x02, 0xFE, 0x45, -/* 0000C6C0 */ 0x02, 0xFE, 0x3F, 0x02, 0xFE, 0x3A, 0x02, 0xFE, 0x3C, 0x02, 0xFE, 0x3E, 0x02, 0xFE, 0x41, 0x02, -/* 0000C6D0 */ 0xFE, 0x43, 0x02, 0xFE, 0x2D, 0x02, 0xFE, 0x33, 0x02, 0xFE, 0xF7, 0x01, 0xFE, 0xF3, 0x01, 0xFE, -/* 0000C6E0 */ 0x35, 0x02, 0xFE, 0x28, 0x02, 0xFE, 0x38, 0x02, 0xFE, 0x2F, 0x02, 0xFE, 0x27, 0x02, 0xFE, 0x2A, -/* 0000C6F0 */ 0x02, 0xFE, 0x2E, 0x02, 0xFE, 0x31, 0x02, 0xFE, 0x34, 0x02, 0xFE, 0x2B, 0x02, 0xFE, 0x29, 0x02, -/* 0000C700 */ 0xFE, 0x37, 0x02, 0xFE, 0x0D, 0x02, 0xFE, 0x0D, 0x02, 0xFE, 0x30, 0x02, 0xFE, 0x36, 0x02, 0xFE, -/* 0000C710 */ 0x26, 0x02, 0xFE, 0x0C, 0x02, 0xFE, 0x0C, 0x02, 0xFE, 0x2A, 0x02, 0xFE, 0x37, 0x02, 0xFE, 0x2C, -/* 0000C720 */ 0x02, 0xFF, 0x8C, 0x7B, 0x02, 0x00, 0x3F, 0x02, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3D, 0x00, 0x1A, -/* 0000C730 */ 0x00, 0x3F, 0x00, 0x33, 0x00, 0x9F, 0x00, 0x24, 0x00, 0x71, 0x00, 0x04, 0x00, 0x67, 0x00, 0x26, -/* 0000C740 */ 0x00, 0x46, 0x00, 0x3D, 0x00, 0x71, 0x00, 0x34, 0x00, 0x60, 0x00, 0x0A, 0x00, 0x32, 0x00, 0x25, -/* 0000C750 */ 0x00, 0x6C, 0x00, 0x1D, 0x00, 0x4D, 0x00, 0x0A, 0x00, 0x32, 0x00, 0x1A, 0x00, 0x6C, 0x00, 0x43, -/* 0000C760 */ 0x00, 0x6F, 0x00, 0x43, 0x00, 0x67, 0x00, 0x3F, 0x00, 0x64, 0x00, 0x4B, 0x00, 0x81, 0x00, 0x3F, -/* 0000C770 */ 0x00, 0x62, 0x00, 0x3F, 0x00, 0x64, 0x00, 0x3F, 0x00, 0x68, 0x00, 0x3F, 0x00, 0x68, 0x00, 0x3F, -/* 0000C780 */ 0x00, 0x70, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x3D, 0x00, 0x77, 0x00, 0x25, 0x00, 0x71, 0x00, 0x69, -/* 0000C790 */ 0x00, 0xD0, 0x01, 0x1C, 0x00, 0x41, 0x00, 0x3C, 0x00, 0x9A, 0x00, 0x04, 0x00, 0x34, 0x00, 0x04, -/* 0000C7A0 */ 0x00, 0x36, 0x00, 0x08, 0x00, 0x68, 0x00, 0x04, 0x00, 0x34, 0x00, 0x04, 0x00, 0x2C, 0x00, 0x04, -/* 0000C7B0 */ 0x00, 0x2E, 0x00, 0x04, 0x00, 0x30, 0x00, 0x04, 0x00, 0x2C, 0x00, 0x04, 0x00, 0x2E, 0x00, 0x04, -/* 0000C7C0 */ 0x00, 0x32, 0x00, 0x04, 0x00, 0x32, 0x00, 0x04, 0x00, 0x3F, 0x00, 0x04, 0x00, 0x32, 0x00, 0x04, -/* 0000C7D0 */ 0x00, 0x40, 0x00, 0x04, 0x00, 0x3F, 0x00, 0x04, 0x00, 0x0F, 0x03, 0x06, 0x00, 0x93, 0x00, 0x24, -/* 0000C7E0 */ 0x00, 0x3F, 0x00, 0x01, 0x00, 0x4A, 0x00, 0x17, 0x00, 0xEF, 0x00, 0x26, 0x00, 0x54, 0x00, 0x25, -/* 0000C7F0 */ 0x00, 0x6A, 0x00, 0x04, 0x00, 0x37, 0x00, 0x04, 0x00, 0x5A, 0x00, 0x32, 0x00, 0xDE, 0x00, 0x24, -/* 0000C800 */ 0x00, 0x3E, 0x00, 0x01, 0x00, 0x4A, 0x00, 0x17, 0x00, 0x77, 0x01, 0x1B, 0x00, 0x77, 0x00, 0x21, -/* 0000C810 */ 0x00, 0x66, 0x00, 0x2D, 0x00, 0x82, 0x00, 0x0E, 0x00, 0x3F, 0x00, 0x0C, 0x00, 0x6D, 0x00, 0x06, -/* 0000C820 */ 0x00, 0x3F, 0x00, 0x00, 0xBF, 0x5C, 0x0A, 0xC1, 0x23, 0x88, 0x01, 0x00, 0xFE, 0x78, 0x0D, 0x0C, -/* 0000C830 */ 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0xEC, 0x04, 0xBE, 0xFF, 0xF8, 0x6D, 0x02, 0x00, 0xFF, 0x00, 0x10, -/* 0000C840 */ 0x01, 0x00, 0x03, 0x03, 0xFF, 0xF8, 0x6D, 0x02, 0x00, 0xFE, 0x2D, 0x0D, 0xFE, 0x2D, 0x0D, 0x01, -/* 0000C850 */ 0x07, 0x12, 0x16, 0x06, 0xC8, 0xBB, 0x04, 0x02, 0x10, 0x07, 0x0A, 0x0A, 0x0A, 0x0A, 0x02, 0x15, -/* 0000C860 */ 0x05, 0xFE, 0x07, 0x05, 0x08, 0x06, 0xFE, 0x45, 0x04, 0x07, 0x05, 0xFE, 0x08, 0x05, 0x01, 0x00, -/* 0000C870 */ 0x05, 0xFE, 0x09, 0x05, 0x05, 0xFE, 0xFC, 0x04, 0x05, 0xFE, 0x0A, 0x05, 0x06, 0xFE, 0x13, 0x04, -/* 0000C880 */ 0x06, 0xFE, 0x49, 0x04, 0x06, 0xFE, 0x4A, 0x04, 0x06, 0xFE, 0x4B, 0x04, 0x06, 0xFE, 0x4C, 0x04, -/* 0000C890 */ 0x06, 0xFE, 0x4D, 0x04, 0x05, 0xFE, 0x0B, 0x05, 0xFE, 0x3A, 0x03, 0xA6, 0x14, 0x60, 0x16, 0x13, -/* 0000C8A0 */ 0x00, 0xA6, 0x17, 0x15, 0x03, 0x00, 0x16, 0x17, 0x09, 0x2A, 0x00, 0x8D, 0x01, 0x05, 0x16, 0x00, -/* 0000C8B0 */ 0x00, 0x4B, 0x16, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x5B, 0x01, 0x12, 0x00, 0x00, 0x60, 0x17, -/* 0000C8C0 */ 0x13, 0x00, 0x5B, 0x02, 0x17, 0x00, 0x00, 0x5B, 0x03, 0x02, 0x00, 0x00, 0xEE, 0x04, 0x16, 0x16, -/* 0000C8D0 */ 0x00, 0x00, 0x47, 0x12, 0x16, 0x60, 0x16, 0x13, 0x01, 0xA6, 0x17, 0x15, 0x03, 0x00, 0x16, 0x17, -/* 0000C8E0 */ 0x09, 0x00, 0x00, 0x60, 0x16, 0x13, 0x02, 0x14, 0x03, 0x00, 0x16, 0x04, 0x09, 0x98, 0x00, 0x8D, -/* 0000C8F0 */ 0x04, 0x03, 0x17, 0x01, 0x00, 0x6B, 0x16, 0x17, 0x03, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x17, 0x5B, -/* 0000C900 */ 0x01, 0x12, 0x01, 0x00, 0xE0, 0x18, 0x00, 0x5B, 0x02, 0x18, 0x01, 0x00, 0xF2, 0x03, 0x16, 0x16, -/* 0000C910 */ 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x14, 0x16, 0x14, 0x03, 0x00, 0x14, 0x05, 0x09, 0x2E, -/* 0000C920 */ 0x00, 0x8D, 0x04, 0x0E, 0x16, 0x02, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x03, 0x8D, 0x04, 0x0D, -/* 0000C930 */ 0x17, 0x03, 0x00, 0x07, 0x02, 0x00, 0x5B, 0x01, 0x06, 0x03, 0x00, 0xC2, 0x02, 0x17, 0x17, 0x03, -/* 0000C940 */ 0x00, 0x5B, 0x01, 0x17, 0x02, 0x00, 0xEE, 0x02, 0xFF, 0x16, 0x02, 0x00, 0x09, 0x35, 0x00, 0x8D, -/* 0000C950 */ 0x04, 0x06, 0x16, 0x04, 0x00, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x03, 0x8D, 0x04, 0x1D, 0x17, 0x05, -/* 0000C960 */ 0x00, 0x5B, 0x01, 0x17, 0x04, 0x00, 0x5B, 0x02, 0x12, 0x04, 0x00, 0x96, 0x17, 0x14, 0x07, 0x00, -/* 0000C970 */ 0x00, 0x5B, 0x03, 0x17, 0x04, 0x00, 0x5B, 0x04, 0x08, 0x04, 0x00, 0xEE, 0x05, 0x16, 0x16, 0x04, -/* 0000C980 */ 0x00, 0x47, 0x12, 0x16, 0x09, 0xA1, 0x00, 0x60, 0x16, 0x13, 0x02, 0x14, 0x03, 0x00, 0x16, 0x09, -/* 0000C990 */ 0x09, 0x95, 0x00, 0x8D, 0x04, 0x03, 0x17, 0x01, 0x00, 0x6B, 0x16, 0x17, 0x03, 0x07, 0x03, 0x00, -/* 0000C9A0 */ 0x5A, 0x00, 0x17, 0x5B, 0x01, 0x12, 0x05, 0x00, 0xE0, 0x18, 0x01, 0x5B, 0x02, 0x18, 0x05, 0x00, -/* 0000C9B0 */ 0xF2, 0x03, 0x16, 0x16, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x47, 0x14, 0x16, 0x14, 0x03, 0x00, -/* 0000C9C0 */ 0x14, 0x05, 0x09, 0x2E, 0x00, 0x8D, 0x04, 0x0E, 0x16, 0x02, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 0000C9D0 */ 0x03, 0x8D, 0x04, 0x0D, 0x17, 0x03, 0x00, 0x07, 0x02, 0x00, 0x5B, 0x01, 0x06, 0x07, 0x00, 0xC2, -/* 0000C9E0 */ 0x02, 0x17, 0x17, 0x07, 0x00, 0x5B, 0x01, 0x17, 0x06, 0x00, 0xEE, 0x02, 0xFF, 0x16, 0x06, 0x00, -/* 0000C9F0 */ 0x09, 0x35, 0x00, 0x8D, 0x04, 0x06, 0x16, 0x04, 0x00, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x03, 0x8D, -/* 0000CA00 */ 0x04, 0x1D, 0x17, 0x05, 0x00, 0x5B, 0x01, 0x17, 0x08, 0x00, 0x5B, 0x02, 0x12, 0x08, 0x00, 0x96, -/* 0000CA10 */ 0x17, 0x14, 0x07, 0x01, 0x00, 0x5B, 0x03, 0x17, 0x08, 0x00, 0x5B, 0x04, 0x0A, 0x08, 0x00, 0xEE, -/* 0000CA20 */ 0x05, 0x16, 0x16, 0x08, 0x00, 0x47, 0x12, 0x16, 0x60, 0x16, 0x13, 0x04, 0xA6, 0x17, 0x15, 0x03, -/* 0000CA30 */ 0x00, 0x16, 0x17, 0x09, 0x45, 0x00, 0x60, 0x16, 0x13, 0x04, 0x15, 0x03, 0x00, 0x16, 0x04, 0x09, -/* 0000CA40 */ 0x39, 0x00, 0x60, 0x16, 0x13, 0x04, 0x15, 0x03, 0x00, 0x16, 0x0B, 0x09, 0x2D, 0x00, 0x8D, 0x01, -/* 0000CA50 */ 0x05, 0x16, 0x00, 0x00, 0x4B, 0x16, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x5B, 0x01, 0x12, 0x09, -/* 0000CA60 */ 0x00, 0x60, 0x17, 0x13, 0x04, 0x5B, 0x02, 0x17, 0x09, 0x00, 0x5B, 0x03, 0x0C, 0x09, 0x00, 0xEE, -/* 0000CA70 */ 0x04, 0x16, 0x16, 0x09, 0x00, 0x47, 0x12, 0x16, 0x09, 0x38, 0x00, 0x60, 0x16, 0x13, 0x04, 0xA6, -/* 0000CA80 */ 0x17, 0x15, 0x03, 0x00, 0x16, 0x17, 0x09, 0x2A, 0x00, 0x8D, 0x01, 0x06, 0x16, 0x06, 0x00, 0x4B, -/* 0000CA90 */ 0x16, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x5B, 0x01, 0x12, 0x0A, 0x00, 0x60, 0x17, 0x13, 0x04, -/* 0000CAA0 */ 0x5B, 0x02, 0x17, 0x0A, 0x00, 0x5B, 0x03, 0x0C, 0x0A, 0x00, 0xEE, 0x04, 0x16, 0x16, 0x0A, 0x00, -/* 0000CAB0 */ 0x47, 0x12, 0x16, 0x60, 0x16, 0x13, 0x05, 0xA6, 0x17, 0x15, 0x03, 0x00, 0x16, 0x17, 0x09, 0x2A, -/* 0000CAC0 */ 0x00, 0x8D, 0x01, 0x06, 0x16, 0x06, 0x00, 0x4B, 0x16, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x5B, -/* 0000CAD0 */ 0x01, 0x12, 0x0B, 0x00, 0x60, 0x17, 0x13, 0x05, 0x5B, 0x02, 0x17, 0x0B, 0x00, 0x5B, 0x03, 0x0D, -/* 0000CAE0 */ 0x0B, 0x00, 0xEE, 0x04, 0x16, 0x16, 0x0B, 0x00, 0x47, 0x12, 0x16, 0x60, 0x16, 0x13, 0x06, 0xA6, -/* 0000CAF0 */ 0x17, 0x15, 0x03, 0x00, 0x16, 0x17, 0x09, 0x2A, 0x00, 0x8D, 0x01, 0x06, 0x16, 0x06, 0x00, 0x4B, -/* 0000CB00 */ 0x16, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x5B, 0x01, 0x12, 0x0C, 0x00, 0x60, 0x17, 0x13, 0x06, -/* 0000CB10 */ 0x5B, 0x02, 0x17, 0x0C, 0x00, 0x5B, 0x03, 0x0E, 0x0C, 0x00, 0xEE, 0x04, 0x16, 0x16, 0x0C, 0x00, -/* 0000CB20 */ 0x47, 0x12, 0x16, 0x60, 0x16, 0x13, 0x07, 0xA6, 0x17, 0x15, 0x03, 0x00, 0x16, 0x17, 0x09, 0x2A, -/* 0000CB30 */ 0x00, 0x8D, 0x01, 0x06, 0x16, 0x06, 0x00, 0x4B, 0x16, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x5B, -/* 0000CB40 */ 0x01, 0x12, 0x0D, 0x00, 0x60, 0x17, 0x13, 0x07, 0x5B, 0x02, 0x17, 0x0D, 0x00, 0x5B, 0x03, 0x0F, -/* 0000CB50 */ 0x0D, 0x00, 0xEE, 0x04, 0x16, 0x16, 0x0D, 0x00, 0x47, 0x12, 0x16, 0x60, 0x16, 0x13, 0x08, 0xA6, -/* 0000CB60 */ 0x17, 0x15, 0x03, 0x00, 0x16, 0x17, 0x09, 0x2A, 0x00, 0x8D, 0x01, 0x06, 0x16, 0x06, 0x00, 0x4B, -/* 0000CB70 */ 0x16, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x5B, 0x01, 0x12, 0x0E, 0x00, 0x60, 0x17, 0x13, 0x08, -/* 0000CB80 */ 0x5B, 0x02, 0x17, 0x0E, 0x00, 0x5B, 0x03, 0x10, 0x0E, 0x00, 0xEE, 0x04, 0x16, 0x16, 0x0E, 0x00, -/* 0000CB90 */ 0x47, 0x12, 0x16, 0x60, 0x16, 0x13, 0x09, 0xA6, 0x17, 0x15, 0x03, 0x00, 0x16, 0x17, 0x09, 0x2A, -/* 0000CBA0 */ 0x00, 0x8D, 0x01, 0x05, 0x16, 0x00, 0x00, 0x4B, 0x16, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x5B, -/* 0000CBB0 */ 0x01, 0x12, 0x0F, 0x00, 0x60, 0x17, 0x13, 0x09, 0x5B, 0x02, 0x17, 0x0F, 0x00, 0x5B, 0x03, 0x11, -/* 0000CBC0 */ 0x0F, 0x00, 0xEE, 0x04, 0x16, 0x16, 0x0F, 0x00, 0x47, 0x12, 0x16, 0x47, 0x00, 0x12, 0x09, 0x02, -/* 0000CBD0 */ 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x35, 0x02, 0xFE, 0x28, 0x02, 0xFE, 0x38, 0x02, 0xFE, 0x83, -/* 0000CBE0 */ 0x02, 0xFE, 0x2F, 0x02, 0xFE, 0x27, 0x02, 0xFE, 0x2A, 0x02, 0xFE, 0x2E, 0x02, 0xFE, 0x31, 0x02, -/* 0000CBF0 */ 0xFE, 0x34, 0x02, 0x1C, 0xFE, 0x0C, 0x05, 0x00, 0x1C, 0xFE, 0x0C, 0x05, 0x00, 0xFF, 0x47, 0x6E, -/* 0000CC00 */ 0x02, 0x00, 0x1D, 0x02, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x42, 0x00, 0x2A, 0x00, 0x88, 0x00, 0x0E, -/* 0000CC10 */ 0x00, 0x8E, 0x01, 0x0C, 0x00, 0x3F, 0x00, 0x2A, 0x00, 0x6B, 0x00, 0x08, 0x00, 0x2E, 0x00, 0x2E, -/* 0000CC20 */ 0x00, 0x91, 0x00, 0x38, 0x00, 0x98, 0x00, 0x0C, 0x00, 0x3C, 0x00, 0x2A, 0x00, 0x6B, 0x00, 0x08, -/* 0000CC30 */ 0x00, 0x2E, 0x00, 0x2E, 0x00, 0x91, 0x00, 0x35, 0x00, 0x2F, 0x01, 0x26, 0x00, 0x90, 0x00, 0x2D, -/* 0000CC40 */ 0x00, 0x76, 0x00, 0x0E, 0x00, 0x40, 0x00, 0x2A, 0x00, 0x8B, 0x00, 0x0E, 0x00, 0x3E, 0x00, 0x2A, -/* 0000CC50 */ 0x00, 0x87, 0x00, 0x0E, 0x00, 0x3F, 0x00, 0x2A, 0x00, 0x89, 0x00, 0x0E, 0x00, 0x41, 0x00, 0x2A, -/* 0000CC60 */ 0x00, 0x8D, 0x00, 0x0E, 0x00, 0x41, 0x00, 0x2A, 0x00, 0x8D, 0x00, 0x0E, 0x00, 0x47, 0x00, 0x2A, -/* 0000CC70 */ 0x00, 0x8C, 0x00, 0x08, 0x00, 0x22, 0x00, 0x00, 0xBF, 0x5C, 0x0A, 0xC1, 0x03, 0x88, 0x01, 0x00, -/* 0000CC80 */ 0xFE, 0x64, 0x0D, 0x0C, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0xEB, 0x04, 0xBD, 0xFF, 0x90, 0x68, 0x02, -/* 0000CC90 */ 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFF, 0x90, 0x68, 0x02, 0x00, 0xFE, 0xF8, 0x04, -/* 0000CCA0 */ 0xFE, 0xF8, 0x04, 0x01, 0x09, 0x11, 0x16, 0x07, 0x43, 0x40, 0x04, 0x05, 0x06, 0x06, 0x01, 0x01, -/* 0000CCB0 */ 0x01, 0x01, 0x15, 0x05, 0xFE, 0xF7, 0x04, 0x05, 0xFE, 0x02, 0x05, 0x08, 0x07, 0x05, 0xFE, 0x03, -/* 0000CCC0 */ 0x05, 0x05, 0xFE, 0xFA, 0x04, 0x05, 0xFE, 0xFB, 0x04, 0x06, 0xFE, 0x45, 0x04, 0x01, 0x00, 0x06, -/* 0000CCD0 */ 0xFE, 0xFD, 0x04, 0x01, 0x01, 0x05, 0xFE, 0x04, 0x05, 0x01, 0x02, 0x05, 0xFE, 0x05, 0x05, 0x05, -/* 0000CCE0 */ 0xFE, 0x06, 0x05, 0xFE, 0x2E, 0x01, 0x8D, 0x04, 0x03, 0x17, 0x00, 0x00, 0x6B, 0x16, 0x17, 0x00, -/* 0000CCF0 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x17, 0x5B, 0x01, 0x11, 0x00, 0x00, 0x8D, 0x04, 0x09, 0x18, 0x01, -/* 0000CD00 */ 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, 0xFB, 0x19, 0x02, 0x13, 0x03, 0x5B, 0x01, 0x19, 0x01, -/* 0000CD10 */ 0x00, 0xEE, 0x02, 0x18, 0x18, 0x01, 0x00, 0x5B, 0x02, 0x18, 0x00, 0x00, 0xF2, 0x03, 0x16, 0x16, -/* 0000CD20 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x14, 0x16, 0x14, 0x03, 0x00, 0x14, 0x05, 0x09, 0x40, -/* 0000CD30 */ 0x00, 0x8D, 0x04, 0x0E, 0x16, 0x02, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, 0x8D, 0x04, 0x0D, -/* 0000CD40 */ 0x17, 0x03, 0x00, 0x07, 0x02, 0x00, 0xFC, 0x18, 0x06, 0x11, 0x06, 0xFE, 0x18, 0x07, 0x02, 0x02, -/* 0000CD50 */ 0xFE, 0x18, 0x13, 0x08, 0x04, 0x5B, 0x01, 0x18, 0x03, 0x00, 0xC2, 0x02, 0x17, 0x17, 0x03, 0x00, -/* 0000CD60 */ 0x5B, 0x01, 0x17, 0x02, 0x00, 0xEE, 0x02, 0xFF, 0x16, 0x02, 0x00, 0x47, 0x00, 0x11, 0x09, 0xA1, -/* 0000CD70 */ 0x00, 0x14, 0x03, 0x00, 0x12, 0x09, 0x09, 0x43, 0x00, 0x8D, 0x04, 0x06, 0x16, 0x04, 0x00, 0x07, -/* 0000CD80 */ 0x05, 0x00, 0x5A, 0x00, 0x04, 0x8D, 0x04, 0x1D, 0x17, 0x05, 0x00, 0x5B, 0x01, 0x17, 0x04, 0x00, -/* 0000CD90 */ 0x5B, 0x02, 0x11, 0x04, 0x00, 0x96, 0x17, 0x14, 0x0A, 0x00, 0x00, 0x5B, 0x03, 0x17, 0x04, 0x00, -/* 0000CDA0 */ 0x96, 0x17, 0x14, 0x0C, 0x01, 0x00, 0xFB, 0x17, 0x0B, 0x17, 0x0D, 0x5B, 0x04, 0x17, 0x04, 0x00, -/* 0000CDB0 */ 0xEE, 0x05, 0x00, 0x16, 0x04, 0x00, 0x09, 0x59, 0x00, 0x09, 0x4E, 0x00, 0x96, 0x16, 0x14, 0x0E, -/* 0000CDC0 */ 0x02, 0x00, 0x15, 0x03, 0x00, 0x16, 0x0F, 0x09, 0x40, 0x00, 0x8D, 0x04, 0x06, 0x16, 0x04, 0x00, -/* 0000CDD0 */ 0x07, 0x05, 0x00, 0x5A, 0x00, 0x04, 0x8D, 0x04, 0x1D, 0x17, 0x05, 0x00, 0x5B, 0x01, 0x17, 0x05, -/* 0000CDE0 */ 0x00, 0x5B, 0x02, 0x11, 0x05, 0x00, 0x96, 0x17, 0x14, 0x0A, 0x03, 0x00, 0x5B, 0x03, 0x17, 0x05, -/* 0000CDF0 */ 0x00, 0x96, 0x17, 0x14, 0x0C, 0x04, 0x00, 0xFB, 0x17, 0x0B, 0x17, 0x10, 0x5B, 0x04, 0x17, 0x05, -/* 0000CE00 */ 0x00, 0xEE, 0x05, 0x00, 0x16, 0x05, 0x00, 0x09, 0x08, 0x00, 0x47, 0x00, 0x11, 0x09, 0x02, 0x00, -/* 0000CE10 */ 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x83, 0x02, 0xFF, 0xB7, 0x69, 0x02, 0x00, 0x0A, 0x00, 0x00, 0x00, -/* 0000CE20 */ 0x00, 0x43, 0x00, 0x91, 0x00, 0x08, 0x00, 0x2A, 0x00, 0x3A, 0x00, 0x00, 0x01, 0x06, 0x00, 0x83, -/* 0000CE30 */ 0x00, 0x08, 0x00, 0x33, 0x00, 0x43, 0x00, 0x81, 0x00, 0x0E, 0x00, 0x32, 0x00, 0x40, 0x00, 0x8A, -/* 0000CE40 */ 0x00, 0x08, 0x00, 0x22, 0x00, 0x00, 0xBF, 0x5C, 0x0A, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x53, -/* 0000CE50 */ 0x0D, 0x0C, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0xEA, 0x04, 0xBC, 0xFF, 0x62, 0x63, 0x02, 0x00, 0xFF, -/* 0000CE60 */ 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFF, 0x62, 0x63, 0x02, 0x00, 0xFE, 0x20, 0x05, 0xFE, 0x20, -/* 0000CE70 */ 0x05, 0x01, 0x09, 0x14, 0x19, 0x07, 0x50, 0x4B, 0x04, 0x05, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, -/* 0000CE80 */ 0x18, 0x05, 0xFE, 0xF7, 0x04, 0x05, 0xFE, 0xF8, 0x04, 0x08, 0x07, 0x05, 0xFE, 0xF9, 0x04, 0x05, -/* 0000CE90 */ 0xFE, 0xFA, 0x04, 0x05, 0xFE, 0xFB, 0x04, 0x01, 0x02, 0x05, 0xFE, 0xFC, 0x04, 0x06, 0xFE, 0x44, -/* 0000CEA0 */ 0x04, 0x01, 0x00, 0x06, 0xFE, 0xFD, 0x04, 0x01, 0x01, 0x06, 0xFE, 0xFE, 0x04, 0x06, 0xFE, 0xFF, -/* 0000CEB0 */ 0x04, 0x06, 0xFE, 0x43, 0x04, 0x05, 0xFE, 0x00, 0x05, 0x05, 0xFE, 0x01, 0x05, 0xFE, 0x5D, 0x01, -/* 0000CEC0 */ 0x8D, 0x04, 0x03, 0x1A, 0x00, 0x00, 0x6B, 0x19, 0x1A, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x1A, -/* 0000CED0 */ 0x5B, 0x01, 0x14, 0x00, 0x00, 0x8D, 0x04, 0x09, 0x1B, 0x01, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 0000CEE0 */ 0x04, 0xFB, 0x1C, 0x02, 0x16, 0x03, 0x5B, 0x01, 0x1C, 0x01, 0x00, 0xEE, 0x02, 0x1B, 0x1B, 0x01, -/* 0000CEF0 */ 0x00, 0x5B, 0x02, 0x1B, 0x00, 0x00, 0xF2, 0x03, 0x19, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 0000CF00 */ 0x47, 0x17, 0x19, 0x14, 0x03, 0x00, 0x17, 0x05, 0x09, 0x40, 0x00, 0x8D, 0x04, 0x0E, 0x19, 0x02, -/* 0000CF10 */ 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, 0x8D, 0x04, 0x0D, 0x1A, 0x03, 0x00, 0x07, 0x02, 0x00, -/* 0000CF20 */ 0xFC, 0x1B, 0x06, 0x14, 0x06, 0xFE, 0x1B, 0x07, 0x02, 0x02, 0xFE, 0x1B, 0x16, 0x08, 0x04, 0x5B, -/* 0000CF30 */ 0x01, 0x1B, 0x03, 0x00, 0xC2, 0x02, 0x1A, 0x1A, 0x03, 0x00, 0x5B, 0x01, 0x1A, 0x02, 0x00, 0xEE, -/* 0000CF40 */ 0x02, 0xFF, 0x19, 0x02, 0x00, 0x47, 0x00, 0x14, 0x09, 0xD0, 0x00, 0x96, 0x19, 0x17, 0x09, 0x00, -/* 0000CF50 */ 0x00, 0x15, 0x03, 0x00, 0x19, 0x0A, 0x09, 0x56, 0x00, 0x14, 0x03, 0x00, 0x15, 0x0B, 0x09, 0x4E, -/* 0000CF60 */ 0x00, 0x8D, 0x04, 0x06, 0x19, 0x04, 0x00, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x04, 0x8D, 0x04, 0x1D, -/* 0000CF70 */ 0x1A, 0x05, 0x00, 0x5B, 0x01, 0x1A, 0x04, 0x00, 0x5B, 0x02, 0x14, 0x04, 0x00, 0x96, 0x1A, 0x17, -/* 0000CF80 */ 0x0C, 0x01, 0x00, 0x5B, 0x03, 0x1A, 0x04, 0x00, 0x96, 0x1A, 0x17, 0x0E, 0x02, 0x00, 0x2F, 0x1A, -/* 0000CF90 */ 0x0D, 0x1A, 0x2F, 0x1A, 0x1A, 0x0F, 0x2F, 0x1A, 0x1A, 0x0A, 0x2F, 0x1A, 0x1A, 0x10, 0x5B, 0x04, -/* 0000CFA0 */ 0x1A, 0x04, 0x00, 0xEE, 0x05, 0x00, 0x19, 0x04, 0x00, 0x09, 0x6F, 0x00, 0x09, 0x64, 0x00, 0x15, -/* 0000CFB0 */ 0x03, 0x00, 0x15, 0x0B, 0x09, 0x5C, 0x00, 0x8D, 0x04, 0x06, 0x19, 0x04, 0x00, 0x07, 0x05, 0x00, -/* 0000CFC0 */ 0x5A, 0x00, 0x04, 0x8D, 0x04, 0x1D, 0x1A, 0x05, 0x00, 0x5B, 0x01, 0x1A, 0x05, 0x00, 0x5B, 0x02, -/* 0000CFD0 */ 0x14, 0x05, 0x00, 0x96, 0x1A, 0x17, 0x0C, 0x03, 0x00, 0x5B, 0x03, 0x1A, 0x05, 0x00, 0x96, 0x1A, -/* 0000CFE0 */ 0x17, 0x0E, 0x04, 0x00, 0x2F, 0x1A, 0x0D, 0x1A, 0x2F, 0x1A, 0x1A, 0x0F, 0x14, 0x03, 0x00, 0x15, -/* 0000CFF0 */ 0x11, 0x09, 0x06, 0x00, 0x47, 0x1B, 0x12, 0x09, 0x03, 0x00, 0x47, 0x1B, 0x13, 0x2F, 0x1A, 0x1A, -/* 0000D000 */ 0x1B, 0x2F, 0x1A, 0x1A, 0x10, 0x5B, 0x04, 0x1A, 0x05, 0x00, 0xEE, 0x05, 0x00, 0x19, 0x05, 0x00, -/* 0000D010 */ 0x09, 0x08, 0x00, 0x47, 0x00, 0x14, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x83, 0x02, -/* 0000D020 */ 0xFF, 0x38, 0x64, 0x02, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x43, 0x00, 0x0F, 0x01, 0x08, 0x00, -/* 0000D030 */ 0x2A, 0x00, 0x3A, 0x00, 0xF5, 0x00, 0x06, 0x00, 0x39, 0x00, 0x16, 0x00, 0x47, 0x00, 0x4E, 0x00, -/* 0000D040 */ 0x85, 0x00, 0x08, 0x00, 0x30, 0x00, 0x5C, 0x00, 0xC4, 0x00, 0x08, 0x00, 0x22, 0x00, 0x00, 0xBF, -/* 0000D050 */ 0x4C, 0x02, 0x01, 0x00, 0x88, 0x01, 0x00, 0xFE, 0x4A, 0x0D, 0x0C, 0xA3, 0x41, 0xC1, 0x00, 0xFE, -/* 0000D060 */ 0xE9, 0x04, 0xBB, 0xFF, 0xFB, 0x61, 0x02, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, -/* 0000D070 */ 0xFB, 0x61, 0x02, 0x00, 0xE9, 0xE9, 0x01, 0x03, 0x05, 0x07, 0x0E, 0x0B, 0x04, 0x01, 0x01, 0x06, -/* 0000D080 */ 0x06, 0xFE, 0xF5, 0x03, 0x06, 0xFE, 0x5B, 0x03, 0x05, 0xFE, 0xD7, 0x04, 0x2E, 0x2C, 0x07, 0x05, -/* 0000D090 */ 0x14, 0x03, 0x00, 0x07, 0x02, 0x09, 0x06, 0x00, 0x47, 0x00, 0x03, 0x09, 0x1B, 0x00, 0x8D, 0x02, -/* 0000D0A0 */ 0x02, 0x07, 0x00, 0x00, 0x96, 0x07, 0x07, 0x05, 0x00, 0x00, 0x47, 0x00, 0x07, 0x0F, 0x03, 0x00, -/* 0000D0B0 */ 0x07, 0x47, 0x00, 0x04, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFF, 0x36, 0x62, 0x02, 0x00, -/* 0000D0C0 */ 0x04, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3B, 0x00, 0x06, 0x00, 0x2E, 0x00, 0x1B, 0x00, 0x44, -/* 0000D0D0 */ 0x00, 0x00, 0x3F, 0x5D, 0x18, 0xC1, 0x03, 0x8D, 0x05, 0x00, 0xFE, 0x0A, 0x0D, 0x0C, 0xA3, 0x41, -/* 0000D0E0 */ 0xC1, 0x00, 0xFE, 0xE8, 0x04, 0xB9, 0xFF, 0x83, 0x56, 0x02, 0x00, 0x01, 0xFF, 0x00, 0x10, 0x01, -/* 0000D0F0 */ 0x00, 0x02, 0x02, 0xFF, 0x83, 0x56, 0x02, 0x00, 0xFE, 0x95, 0x09, 0xFE, 0x95, 0x09, 0x02, 0xFE, -/* 0000D100 */ 0xED, 0x04, 0xFE, 0xCA, 0x01, 0x06, 0x17, 0x1B, 0x05, 0xC4, 0xC2, 0x04, 0x0D, 0x02, 0x07, 0x05, -/* 0000D110 */ 0x05, 0x05, 0x05, 0x18, 0x19, 0x1A, 0x06, 0xFE, 0x42, 0x04, 0x06, 0xFE, 0x43, 0x04, 0x05, 0xFE, -/* 0000D120 */ 0xEE, 0x04, 0x08, 0x06, 0xFE, 0x44, 0x04, 0x05, 0xFE, 0xEF, 0x04, 0x06, 0xFE, 0x45, 0x04, 0x05, -/* 0000D130 */ 0xFE, 0xF0, 0x04, 0x06, 0xFE, 0x13, 0x04, 0x05, 0xFE, 0xF1, 0x04, 0x05, 0xFE, 0xF2, 0x04, 0x05, -/* 0000D140 */ 0xFE, 0xF3, 0x04, 0x05, 0xFE, 0xF4, 0x04, 0x06, 0xFE, 0x4A, 0x04, 0x05, 0xFE, 0xF5, 0x04, 0x05, -/* 0000D150 */ 0xFE, 0xF6, 0x04, 0x06, 0xFE, 0x4B, 0x04, 0x06, 0xFE, 0x4C, 0x04, 0x06, 0xFE, 0x4D, 0x04, 0x01, -/* 0000D160 */ 0x00, 0x06, 0xFE, 0x85, 0x04, 0xFE, 0x73, 0x03, 0x94, 0x03, 0x17, 0xCD, 0x1B, 0x00, 0x00, 0x00, -/* 0000D170 */ 0x94, 0x02, 0x1B, 0x91, 0x03, 0x1B, 0x00, 0x00, 0x60, 0x1B, 0x1B, 0x00, 0x0E, 0x8B, 0x00, 0x1B, -/* 0000D180 */ 0x91, 0x03, 0x1B, 0x00, 0x00, 0x60, 0x1B, 0x1B, 0x00, 0x14, 0x11, 0x00, 0x1B, 0x02, 0x91, 0x03, -/* 0000D190 */ 0x1B, 0x00, 0x00, 0x60, 0x1B, 0x1B, 0x00, 0x14, 0x03, 0x00, 0x1B, 0x03, 0x09, 0x2F, 0x00, 0x8D, -/* 0000D1A0 */ 0x04, 0x06, 0x1B, 0x01, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x05, 0x8D, 0x04, 0x18, 0x1C, 0x02, -/* 0000D1B0 */ 0x00, 0x5B, 0x01, 0x1C, 0x00, 0x00, 0x91, 0x02, 0x1C, 0x03, 0x00, 0x5B, 0x02, 0x1C, 0x00, 0x00, -/* 0000D1C0 */ 0x5B, 0x03, 0x04, 0x00, 0x00, 0xEE, 0x04, 0xFF, 0x1B, 0x00, 0x00, 0x09, 0x3D, 0x00, 0x91, 0x03, -/* 0000D1D0 */ 0x1B, 0x00, 0x00, 0x60, 0x1B, 0x1B, 0x00, 0x14, 0x03, 0x00, 0x1B, 0x06, 0x09, 0x2C, 0x00, 0x8D, -/* 0000D1E0 */ 0x04, 0x06, 0x1B, 0x01, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x05, 0x8D, 0x04, 0x18, 0x1C, 0x02, -/* 0000D1F0 */ 0x00, 0x5B, 0x01, 0x1C, 0x01, 0x00, 0x91, 0x02, 0x1C, 0x03, 0x00, 0x5B, 0x02, 0x1C, 0x01, 0x00, -/* 0000D200 */ 0x5B, 0x03, 0x07, 0x01, 0x00, 0xEE, 0x04, 0xFF, 0x1B, 0x01, 0x00, 0x91, 0x03, 0x1B, 0x00, 0x00, -/* 0000D210 */ 0x60, 0x1B, 0x1B, 0x01, 0x0E, 0x7D, 0x00, 0x1B, 0x91, 0x03, 0x1B, 0x00, 0x00, 0x60, 0x1B, 0x1B, -/* 0000D220 */ 0x01, 0x14, 0x03, 0x00, 0x1B, 0x08, 0x09, 0x2F, 0x00, 0x8D, 0x04, 0x06, 0x1B, 0x01, 0x00, 0x07, -/* 0000D230 */ 0x04, 0x00, 0x5A, 0x00, 0x05, 0x8D, 0x04, 0x18, 0x1C, 0x02, 0x00, 0x5B, 0x01, 0x1C, 0x02, 0x00, -/* 0000D240 */ 0x91, 0x02, 0x1C, 0x03, 0x00, 0x5B, 0x02, 0x1C, 0x02, 0x00, 0x5B, 0x03, 0x09, 0x02, 0x00, 0xEE, -/* 0000D250 */ 0x04, 0xFF, 0x1B, 0x02, 0x00, 0x09, 0x3D, 0x00, 0x91, 0x03, 0x1B, 0x00, 0x00, 0x60, 0x1B, 0x1B, -/* 0000D260 */ 0x01, 0x14, 0x03, 0x00, 0x1B, 0x0A, 0x09, 0x2C, 0x00, 0x8D, 0x04, 0x06, 0x1B, 0x01, 0x00, 0x07, -/* 0000D270 */ 0x04, 0x00, 0x5A, 0x00, 0x05, 0x8D, 0x04, 0x18, 0x1C, 0x02, 0x00, 0x5B, 0x01, 0x1C, 0x03, 0x00, -/* 0000D280 */ 0x91, 0x02, 0x1C, 0x03, 0x00, 0x5B, 0x02, 0x1C, 0x03, 0x00, 0x5B, 0x03, 0x0B, 0x03, 0x00, 0xEE, -/* 0000D290 */ 0x04, 0xFF, 0x1B, 0x03, 0x00, 0x91, 0x03, 0x1B, 0x00, 0x00, 0x60, 0x1B, 0x1B, 0x02, 0x0E, 0xD9, -/* 0000D2A0 */ 0x00, 0x1B, 0x91, 0x03, 0x1B, 0x00, 0x00, 0x60, 0x1B, 0x1B, 0x02, 0x14, 0x11, 0x00, 0x1B, 0x08, -/* 0000D2B0 */ 0x91, 0x03, 0x1B, 0x00, 0x00, 0x60, 0x1B, 0x1B, 0x02, 0x14, 0x03, 0x00, 0x1B, 0x0A, 0x09, 0x2F, -/* 0000D2C0 */ 0x00, 0x8D, 0x04, 0x06, 0x1B, 0x01, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x05, 0x8D, 0x04, 0x18, -/* 0000D2D0 */ 0x1C, 0x02, 0x00, 0x5B, 0x01, 0x1C, 0x04, 0x00, 0x91, 0x02, 0x1C, 0x03, 0x00, 0x5B, 0x02, 0x1C, -/* 0000D2E0 */ 0x04, 0x00, 0x5B, 0x03, 0x0C, 0x04, 0x00, 0xEE, 0x04, 0xFF, 0x1B, 0x04, 0x00, 0x09, 0x8B, 0x00, -/* 0000D2F0 */ 0x91, 0x03, 0x1B, 0x00, 0x00, 0x60, 0x1B, 0x1B, 0x02, 0x14, 0x11, 0x00, 0x1B, 0x03, 0x91, 0x03, -/* 0000D300 */ 0x1B, 0x00, 0x00, 0x60, 0x1B, 0x1B, 0x02, 0x14, 0x03, 0x00, 0x1B, 0x02, 0x09, 0x2F, 0x00, 0x8D, -/* 0000D310 */ 0x04, 0x06, 0x1B, 0x01, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x05, 0x8D, 0x04, 0x18, 0x1C, 0x02, -/* 0000D320 */ 0x00, 0x5B, 0x01, 0x1C, 0x05, 0x00, 0x91, 0x02, 0x1C, 0x03, 0x00, 0x5B, 0x02, 0x1C, 0x05, 0x00, -/* 0000D330 */ 0x5B, 0x03, 0x0D, 0x05, 0x00, 0xEE, 0x04, 0xFF, 0x1B, 0x05, 0x00, 0x09, 0x3D, 0x00, 0x91, 0x03, -/* 0000D340 */ 0x1B, 0x00, 0x00, 0x60, 0x1B, 0x1B, 0x02, 0x14, 0x03, 0x00, 0x1B, 0x06, 0x09, 0x2C, 0x00, 0x8D, -/* 0000D350 */ 0x04, 0x06, 0x1B, 0x01, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x05, 0x8D, 0x04, 0x18, 0x1C, 0x02, -/* 0000D360 */ 0x00, 0x5B, 0x01, 0x1C, 0x06, 0x00, 0x91, 0x02, 0x1C, 0x03, 0x00, 0x5B, 0x02, 0x1C, 0x06, 0x00, -/* 0000D370 */ 0x5B, 0x03, 0x0E, 0x06, 0x00, 0xEE, 0x04, 0xFF, 0x1B, 0x06, 0x00, 0x91, 0x03, 0x1B, 0x00, 0x00, -/* 0000D380 */ 0x60, 0x1B, 0x1B, 0x03, 0x0E, 0x2C, 0x00, 0x1B, 0x8D, 0x04, 0x06, 0x1B, 0x01, 0x00, 0x07, 0x04, -/* 0000D390 */ 0x00, 0x5A, 0x00, 0x05, 0x8D, 0x04, 0x18, 0x1C, 0x02, 0x00, 0x5B, 0x01, 0x1C, 0x07, 0x00, 0x91, -/* 0000D3A0 */ 0x02, 0x1C, 0x03, 0x00, 0x5B, 0x02, 0x1C, 0x07, 0x00, 0x5B, 0x03, 0x0F, 0x07, 0x00, 0xEE, 0x04, -/* 0000D3B0 */ 0xFF, 0x1B, 0x07, 0x00, 0x91, 0x03, 0x1B, 0x00, 0x00, 0x60, 0x1B, 0x1B, 0x04, 0x0E, 0x7D, 0x00, -/* 0000D3C0 */ 0x1B, 0x91, 0x03, 0x1B, 0x00, 0x00, 0x60, 0x1B, 0x1B, 0x04, 0x14, 0x03, 0x00, 0x1B, 0x03, 0x09, -/* 0000D3D0 */ 0x2F, 0x00, 0x8D, 0x04, 0x06, 0x1B, 0x01, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x05, 0x8D, 0x04, -/* 0000D3E0 */ 0x18, 0x1C, 0x02, 0x00, 0x5B, 0x01, 0x1C, 0x08, 0x00, 0x91, 0x02, 0x1C, 0x03, 0x00, 0x5B, 0x02, -/* 0000D3F0 */ 0x1C, 0x08, 0x00, 0x5B, 0x03, 0x10, 0x08, 0x00, 0xEE, 0x04, 0xFF, 0x1B, 0x08, 0x00, 0x09, 0x3D, -/* 0000D400 */ 0x00, 0x91, 0x03, 0x1B, 0x00, 0x00, 0x60, 0x1B, 0x1B, 0x04, 0x14, 0x03, 0x00, 0x1B, 0x06, 0x09, -/* 0000D410 */ 0x2C, 0x00, 0x8D, 0x04, 0x06, 0x1B, 0x01, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x05, 0x8D, 0x04, -/* 0000D420 */ 0x18, 0x1C, 0x02, 0x00, 0x5B, 0x01, 0x1C, 0x09, 0x00, 0x91, 0x02, 0x1C, 0x03, 0x00, 0x5B, 0x02, -/* 0000D430 */ 0x1C, 0x09, 0x00, 0x5B, 0x03, 0x11, 0x09, 0x00, 0xEE, 0x04, 0xFF, 0x1B, 0x09, 0x00, 0x8D, 0x04, -/* 0000D440 */ 0x06, 0x1B, 0x01, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x05, 0x8D, 0x04, 0x16, 0x1C, 0x04, 0x00, -/* 0000D450 */ 0x5B, 0x01, 0x1C, 0x0A, 0x00, 0xCD, 0x1C, 0x03, 0x01, 0x00, 0x9F, 0x00, 0x12, 0x1C, 0x9F, 0x01, -/* 0000D460 */ 0x13, 0x1C, 0x9F, 0x02, 0x14, 0x1C, 0x5B, 0x02, 0x1C, 0x0A, 0x00, 0xD3, 0x00, 0x1C, 0x5B, 0x03, -/* 0000D470 */ 0x1C, 0x0A, 0x00, 0xEE, 0x04, 0xFF, 0x1B, 0x0A, 0x00, 0x8D, 0x04, 0x05, 0x1B, 0x05, 0x00, 0x07, -/* 0000D480 */ 0x02, 0x00, 0x5A, 0x00, 0x05, 0x91, 0x02, 0x1C, 0x03, 0x00, 0x5B, 0x01, 0x1C, 0x0B, 0x00, 0xEE, -/* 0000D490 */ 0x02, 0x1B, 0x1B, 0x0B, 0x00, 0x11, 0x03, 0x00, 0x1B, 0x15, 0x09, 0x32, 0x00, 0x8D, 0x04, 0x06, -/* 0000D4A0 */ 0x1B, 0x01, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x05, 0x8D, 0x04, 0x19, 0x1C, 0x06, 0x00, 0x5B, -/* 0000D4B0 */ 0x01, 0x1C, 0x0C, 0x00, 0x91, 0x02, 0x1C, 0x03, 0x00, 0x5B, 0x02, 0x1C, 0x0C, 0x00, 0x5B, 0x03, -/* 0000D4C0 */ 0x16, 0x0C, 0x00, 0xEE, 0x04, 0x1B, 0x1B, 0x0C, 0x00, 0x47, 0x00, 0x1B, 0x09, 0x05, 0x00, 0xA6, -/* 0000D4D0 */ 0x1B, 0x47, 0x00, 0x1B, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x44, 0x02, 0xFE, 0x45, -/* 0000D4E0 */ 0x02, 0xFE, 0x3F, 0x02, 0xFE, 0x3A, 0x02, 0xFE, 0x43, 0x02, 0xFF, 0xC4, 0x56, 0x02, 0x00, 0x1C, -/* 0000D4F0 */ 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x24, 0x00, 0x0D, 0x00, 0x2B, 0x00, 0x1F, 0x00, 0x5B, 0x00, -/* 0000D500 */ 0x2F, 0x00, 0x63, 0x00, 0x11, 0x00, 0x3A, 0x00, 0x2C, 0x00, 0xA5, 0x00, 0x0D, 0x00, 0x28, 0x00, -/* 0000D510 */ 0x11, 0x00, 0x3A, 0x00, 0x2F, 0x00, 0x5E, 0x00, 0x11, 0x00, 0x3A, 0x00, 0x2C, 0x00, 0x75, 0x00, -/* 0000D520 */ 0x0D, 0x00, 0x29, 0x00, 0x1F, 0x00, 0x5A, 0x00, 0x2F, 0x00, 0x5A, 0x00, 0x1F, 0x00, 0x57, 0x00, -/* 0000D530 */ 0x2F, 0x00, 0x5F, 0x00, 0x11, 0x00, 0x38, 0x00, 0x2C, 0x00, 0x76, 0x00, 0x0D, 0x00, 0x27, 0x00, -/* 0000D540 */ 0x2C, 0x00, 0x59, 0x00, 0x0D, 0x00, 0x30, 0x00, 0x11, 0x00, 0x40, 0x00, 0x2F, 0x00, 0x62, 0x00, -/* 0000D550 */ 0x11, 0x00, 0x3F, 0x00, 0x2C, 0x00, 0x79, 0x00, 0x3B, 0x00, 0x3B, 0x01, 0x60, 0x00, 0x72, 0x00, -/* 0000D560 */ 0x00, 0x65, 0xD5, 0x00, 0x00, 0xBF, 0x5C, 0x0A, 0x01, 0x00, 0x88, 0x01, 0x00, 0xFE, 0x34, 0x0D, -/* 0000D570 */ 0x55, 0xA2, 0x41, 0xD1, 0x00, 0xBA, 0xFF, 0xAF, 0x5E, 0x02, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, -/* 0000D580 */ 0x02, 0x02, 0xFF, 0xAF, 0x5E, 0x02, 0x00, 0xAC, 0xAC, 0x41, 0x04, 0x03, 0x05, 0x05, 0x0F, 0x0F, -/* 0000D590 */ 0x05, 0x01, 0x01, 0x04, 0x04, 0x08, 0x41, 0x8D, 0x01, 0x03, 0x05, 0x00, 0x00, 0x96, 0x05, 0x05, -/* 0000D5A0 */ 0x03, 0x00, 0x00, 0x0E, 0x2D, 0x00, 0x05, 0x8D, 0x05, 0x06, 0x05, 0x01, 0x00, 0x07, 0x04, 0x00, -/* 0000D5B0 */ 0x5A, 0x00, 0x02, 0x8D, 0x05, 0x18, 0x06, 0x02, 0x00, 0x5B, 0x01, 0x06, 0x00, 0x00, 0x8D, 0x01, -/* 0000D5C0 */ 0x02, 0x06, 0x03, 0x00, 0x5B, 0x02, 0x06, 0x00, 0x00, 0x5B, 0x03, 0x03, 0x00, 0x00, 0xEE, 0x04, -/* 0000D5D0 */ 0xFF, 0x05, 0x00, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFF, 0xD4, 0x5E, 0x02, 0x00, 0x03, 0x00, 0x00, -/* 0000D5E0 */ 0x00, 0x00, 0x10, 0x00, 0x2C, 0x00, 0x2F, 0x00, 0x5A, 0x00, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x13, -/* 0000D5F0 */ 0x88, 0x21, 0x00, 0xFE, 0xD7, 0x0C, 0x0C, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x3B, 0x04, 0xB8, 0xFF, -/* 0000D600 */ 0xCA, 0x4C, 0x02, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFF, 0xCA, 0x4C, 0x02, 0x00, -/* 0000D610 */ 0xFE, 0x21, 0x09, 0xFE, 0x21, 0x09, 0x01, 0x07, 0x15, 0x1A, 0x05, 0x88, 0x82, 0x04, 0x08, 0x03, -/* 0000D620 */ 0x0C, 0x0C, 0x0C, 0x0C, 0x06, 0x19, 0x07, 0x08, 0x0B, 0x06, 0xFE, 0x56, 0x04, 0x05, 0xFE, 0x53, -/* 0000D630 */ 0x04, 0x0C, 0x05, 0xFE, 0x58, 0x04, 0x06, 0xFE, 0x54, 0x04, 0x06, 0xFE, 0x48, 0x04, 0x06, 0xFE, -/* 0000D640 */ 0x40, 0x03, 0x06, 0xFE, 0x13, 0x04, 0x06, 0xFE, 0x42, 0x03, 0x06, 0xFE, 0x43, 0x03, 0x06, 0xFE, -/* 0000D650 */ 0x44, 0x03, 0x06, 0xFE, 0x49, 0x04, 0x06, 0xFE, 0x4A, 0x04, 0x06, 0xFE, 0x4B, 0x04, 0x06, 0xFE, -/* 0000D660 */ 0x4C, 0x04, 0x06, 0xFE, 0x4D, 0x04, 0xFE, 0x66, 0x02, 0xA6, 0x1A, 0x14, 0x03, 0x00, 0x15, 0x1A, -/* 0000D670 */ 0x09, 0x24, 0x00, 0x8D, 0x04, 0x04, 0x1A, 0x00, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x03, 0xCA, -/* 0000D680 */ 0x1B, 0x5B, 0x01, 0x1B, 0x00, 0x00, 0x5B, 0x02, 0x02, 0x00, 0x00, 0xEE, 0x03, 0x1A, 0x1A, 0x00, -/* 0000D690 */ 0x00, 0x47, 0x15, 0x1A, 0x09, 0x22, 0x00, 0x8D, 0x04, 0x24, 0x1B, 0x01, 0x00, 0x6B, 0x1A, 0x1B, -/* 0000D6A0 */ 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x1B, 0x5B, 0x01, 0x15, 0x01, 0x00, 0xF2, 0x02, 0x1A, 0x1A, -/* 0000D6B0 */ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x15, 0x1A, 0x47, 0x18, 0x04, 0x14, 0x08, 0x00, 0x16, -/* 0000D6C0 */ 0x05, 0x14, 0x03, 0x00, 0x16, 0x06, 0x09, 0x32, 0x00, 0x60, 0x1A, 0x15, 0x01, 0xA6, 0x1B, 0x15, -/* 0000D6D0 */ 0x24, 0x00, 0x1A, 0x1B, 0x60, 0x1A, 0x15, 0x02, 0xA6, 0x1B, 0x15, 0x19, 0x00, 0x1A, 0x1B, 0x60, -/* 0000D6E0 */ 0x1A, 0x15, 0x03, 0xA6, 0x1B, 0x15, 0x0E, 0x00, 0x1A, 0x1B, 0x60, 0x1A, 0x15, 0x04, 0xA6, 0x1B, -/* 0000D6F0 */ 0x15, 0x03, 0x00, 0x1A, 0x1B, 0x09, 0x03, 0x00, 0x47, 0x18, 0x07, 0x14, 0x08, 0x00, 0x16, 0x08, -/* 0000D700 */ 0x14, 0x03, 0x00, 0x16, 0x06, 0x09, 0x27, 0x00, 0x60, 0x1A, 0x15, 0x05, 0xA6, 0x1B, 0x15, 0x19, -/* 0000D710 */ 0x00, 0x1A, 0x1B, 0x60, 0x1A, 0x15, 0x06, 0xA6, 0x1B, 0x15, 0x0E, 0x00, 0x1A, 0x1B, 0x60, 0x1A, -/* 0000D720 */ 0x15, 0x07, 0xA6, 0x1B, 0x15, 0x03, 0x00, 0x1A, 0x1B, 0x09, 0x03, 0x00, 0x47, 0x18, 0x07, 0x0E, -/* 0000D730 */ 0xC7, 0x00, 0x18, 0x14, 0x08, 0x00, 0x17, 0x05, 0x14, 0x03, 0x00, 0x17, 0x09, 0x09, 0xBA, 0x00, -/* 0000D740 */ 0x8D, 0x04, 0x15, 0x1A, 0x02, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x5B, 0x01, 0x15, 0x02, -/* 0000D750 */ 0x00, 0x5B, 0x02, 0x0A, 0x02, 0x00, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, -/* 0000D760 */ 0x00, 0x00, 0x00, 0x79, 0x0C, 0x1B, 0x08, 0x79, 0x04, 0x1B, 0x09, 0x79, 0x04, 0x1B, 0x0A, 0x79, -/* 0000D770 */ 0x04, 0x1B, 0x0B, 0x5B, 0x03, 0x1B, 0x02, 0x00, 0xEE, 0x04, 0xFF, 0x1A, 0x02, 0x00, 0x8D, 0x04, -/* 0000D780 */ 0x15, 0x1A, 0x02, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x5B, 0x01, 0x15, 0x03, 0x00, 0x5B, -/* 0000D790 */ 0x02, 0x10, 0x03, 0x00, 0xCB, 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, -/* 0000D7A0 */ 0x00, 0x79, 0x0C, 0x1B, 0x08, 0x79, 0x04, 0x1B, 0x09, 0x79, 0x04, 0x1B, 0x0A, 0x79, 0x04, 0x1B, -/* 0000D7B0 */ 0x0B, 0x5B, 0x03, 0x1B, 0x03, 0x00, 0xEE, 0x04, 0xFF, 0x1A, 0x03, 0x00, 0x8D, 0x04, 0x15, 0x1A, -/* 0000D7C0 */ 0x02, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x5B, 0x01, 0x15, 0x04, 0x00, 0x5B, 0x02, 0x11, -/* 0000D7D0 */ 0x04, 0x00, 0xCB, 0x30, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00, 0x79, -/* 0000D7E0 */ 0x0C, 0x1B, 0x08, 0x79, 0x04, 0x1B, 0x09, 0x79, 0x04, 0x1B, 0x0A, 0x79, 0x04, 0x1B, 0x0B, 0x5B, -/* 0000D7F0 */ 0x03, 0x1B, 0x04, 0x00, 0xEE, 0x04, 0xFF, 0x1A, 0x04, 0x00, 0x0E, 0xC7, 0x00, 0x18, 0x14, 0x08, -/* 0000D800 */ 0x00, 0x17, 0x08, 0x14, 0x03, 0x00, 0x17, 0x09, 0x09, 0xBA, 0x00, 0x8D, 0x04, 0x15, 0x1A, 0x02, -/* 0000D810 */ 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x5B, 0x01, 0x15, 0x05, 0x00, 0x5B, 0x02, 0x12, 0x05, -/* 0000D820 */ 0x00, 0xCB, 0x48, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00, 0x79, 0x0C, -/* 0000D830 */ 0x1B, 0x08, 0x79, 0x04, 0x1B, 0x09, 0x79, 0x04, 0x1B, 0x0A, 0x79, 0x04, 0x1B, 0x0B, 0x5B, 0x03, -/* 0000D840 */ 0x1B, 0x05, 0x00, 0xEE, 0x04, 0xFF, 0x1A, 0x05, 0x00, 0x8D, 0x04, 0x15, 0x1A, 0x02, 0x00, 0x07, -/* 0000D850 */ 0x04, 0x00, 0x5A, 0x00, 0x03, 0x5B, 0x01, 0x15, 0x06, 0x00, 0x5B, 0x02, 0x13, 0x06, 0x00, 0xCB, -/* 0000D860 */ 0x60, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00, 0x79, 0x0C, 0x1B, 0x08, -/* 0000D870 */ 0x79, 0x04, 0x1B, 0x09, 0x79, 0x04, 0x1B, 0x0A, 0x79, 0x04, 0x1B, 0x0B, 0x5B, 0x03, 0x1B, 0x06, -/* 0000D880 */ 0x00, 0xEE, 0x04, 0xFF, 0x1A, 0x06, 0x00, 0x8D, 0x04, 0x15, 0x1A, 0x02, 0x00, 0x07, 0x04, 0x00, -/* 0000D890 */ 0x5A, 0x00, 0x03, 0x5B, 0x01, 0x15, 0x07, 0x00, 0x5B, 0x02, 0x14, 0x07, 0x00, 0xCB, 0x78, 0x00, -/* 0000D8A0 */ 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00, 0x79, 0x0C, 0x1B, 0x08, 0x79, 0x04, -/* 0000D8B0 */ 0x1B, 0x09, 0x79, 0x04, 0x1B, 0x0A, 0x79, 0x04, 0x1B, 0x0B, 0x5B, 0x03, 0x1B, 0x07, 0x00, 0xEE, -/* 0000D8C0 */ 0x04, 0xFF, 0x1A, 0x07, 0x00, 0x47, 0x00, 0x15, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x06, -/* 0000D8D0 */ 0x90, 0x00, 0x78, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, -/* 0000D8E0 */ 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x60, 0x00, -/* 0000D8F0 */ 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, -/* 0000D900 */ 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x03, 0x04, -/* 0000D910 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, -/* 0000D920 */ 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, -/* 0000D930 */ 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, -/* 0000D940 */ 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, -/* 0000D950 */ 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x00, 0x00, -/* 0000D960 */ 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, -/* 0000D970 */ 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0xFE, 0x36, 0x03, 0xFE, 0x44, 0x02, -/* 0000D980 */ 0xFE, 0x45, 0x02, 0xFE, 0x3F, 0x02, 0xFE, 0x3A, 0x02, 0xFE, 0x3C, 0x02, 0xFE, 0x3E, 0x02, 0xFE, -/* 0000D990 */ 0x41, 0x02, 0xFE, 0x83, 0x01, 0xFE, 0x82, 0x01, 0xFE, 0x80, 0x01, 0xFE, 0x81, 0x01, 0xFF, 0x14, -/* 0000D9A0 */ 0x4D, 0x02, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x31, 0x00, 0x24, 0x00, 0x4F, 0x00, -/* 0000D9B0 */ 0x22, 0x00, 0x49, 0x00, 0x03, 0x00, 0x29, 0x00, 0x0D, 0x00, 0x45, 0x00, 0x2F, 0x00, 0x97, 0x00, -/* 0000D9C0 */ 0x03, 0x00, 0x4E, 0x00, 0x0D, 0x00, 0x45, 0x00, 0x24, 0x00, 0x7A, 0x00, 0x03, 0x00, 0x4F, 0x00, -/* 0000D9D0 */ 0x11, 0x00, 0x57, 0x00, 0x3E, 0x00, 0xCB, 0x00, 0x3E, 0x00, 0xCC, 0x00, 0x3E, 0x00, 0xD8, 0x00, -/* 0000D9E0 */ 0x11, 0x00, 0x57, 0x00, 0x3E, 0x00, 0xCB, 0x00, 0x3E, 0x00, 0xCD, 0x00, 0x3E, 0x00, 0xDB, 0x00, -/* 0000D9F0 */ 0x08, 0x00, 0x1C, 0x00, 0x00, 0x3F, 0x5D, 0x18, 0xC1, 0x53, 0xAD, 0x25, 0x01, 0xFE, 0xDD, 0x0B, -/* 0000DA00 */ 0x18, 0xA0, 0x41, 0xD1, 0x00, 0xAF, 0xFF, 0x16, 0x1A, 0x02, 0x00, 0x06, 0xFF, 0x00, 0x10, 0x01, -/* 0000DA10 */ 0x00, 0x01, 0x01, 0xFF, 0x16, 0x1A, 0x02, 0x00, 0xFE, 0xC0, 0x31, 0xFE, 0xC0, 0x31, 0x01, 0xFE, -/* 0000DA20 */ 0xCA, 0x01, 0x0D, 0x21, 0x27, 0x09, 0xA8, 0xA8, 0x02, 0x0C, 0x01, 0x0A, 0x08, 0x08, 0x08, 0x08, -/* 0000DA30 */ 0x05, 0x02, 0x24, 0x25, 0x26, 0x27, 0x08, 0x06, 0xFE, 0x3D, 0x03, 0x06, 0xFE, 0x20, 0x04, 0x05, -/* 0000DA40 */ 0xFE, 0x21, 0x04, 0x05, 0xFE, 0x22, 0x04, 0x05, 0xFE, 0x23, 0x04, 0x06, 0xFE, 0x4C, 0x03, 0x06, -/* 0000DA50 */ 0xFE, 0x40, 0x03, 0x06, 0xFE, 0x42, 0x03, 0x0B, 0x06, 0xFE, 0x44, 0x03, 0x07, 0x06, 0xFE, 0xF7, -/* 0000DA60 */ 0x03, 0x06, 0xFE, 0x35, 0x04, 0x06, 0xFE, 0x28, 0x04, 0x06, 0xFE, 0x2B, 0x04, 0x06, 0xFE, 0x2C, -/* 0000DA70 */ 0x04, 0x06, 0xFE, 0xFA, 0x03, 0x06, 0xFE, 0xFB, 0x03, 0x06, 0xFE, 0xFC, 0x03, 0x06, 0xFE, 0xFD, -/* 0000DA80 */ 0x03, 0x06, 0xFE, 0xFE, 0x03, 0x06, 0xFE, 0x2F, 0x04, 0x06, 0xFE, 0x0B, 0x04, 0x0C, 0x06, 0xFE, -/* 0000DA90 */ 0x43, 0x03, 0x06, 0xFE, 0x0C, 0x04, 0x06, 0xFE, 0x0D, 0x04, 0x06, 0xFE, 0x26, 0x04, 0x06, 0xFE, -/* 0000DAA0 */ 0x8D, 0x03, 0x05, 0xFE, 0x25, 0x04, 0xFE, 0x21, 0x03, 0xA6, 0x21, 0xA6, 0x22, 0xA6, 0x23, 0x8D, -/* 0000DAB0 */ 0x02, 0x32, 0x29, 0x00, 0x00, 0x14, 0x0E, 0x00, 0x29, 0x03, 0x8D, 0x02, 0x32, 0x29, 0x00, 0x00, -/* 0000DAC0 */ 0x14, 0x03, 0x00, 0x29, 0x04, 0x09, 0xF9, 0x02, 0xDE, 0x00, 0x03, 0x01, 0xB6, 0x29, 0x00, 0x01, -/* 0000DAD0 */ 0x53, 0x01, 0x00, 0x21, 0x29, 0x93, 0x00, 0x02, 0x21, 0x8D, 0x02, 0x03, 0x2A, 0x01, 0x00, 0x6B, -/* 0000DAE0 */ 0x29, 0x2A, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x2A, 0x8D, 0x02, 0x23, 0x2B, 0x02, 0x00, 0x07, -/* 0000DAF0 */ 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x05, 0x01, 0x00, 0xB6, 0x2D, 0x00, 0x01, 0x53, 0x01, -/* 0000DB00 */ 0x01, 0x2C, 0x2D, 0x5B, 0x02, 0x2C, 0x01, 0x00, 0xEE, 0x03, 0x2B, 0x2B, 0x01, 0x00, 0x5B, 0x01, -/* 0000DB10 */ 0x2B, 0x00, 0x00, 0x8D, 0x02, 0x36, 0x2B, 0x03, 0x00, 0x4B, 0x2B, 0x60, 0x2B, 0x2B, 0x01, 0x5B, -/* 0000DB20 */ 0x02, 0x2B, 0x00, 0x00, 0xF2, 0x03, 0xFF, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8D, 0x02, -/* 0000DB30 */ 0x32, 0x29, 0x00, 0x00, 0x14, 0x03, 0x00, 0x29, 0x03, 0x09, 0x85, 0x02, 0xDE, 0x01, 0x04, 0x02, -/* 0000DB40 */ 0xB6, 0x29, 0x00, 0xB5, 0x01, 0x00, 0x00, 0x00, 0x29, 0x29, 0x01, 0x53, 0x01, 0x02, 0x22, 0x29, -/* 0000DB50 */ 0x93, 0x01, 0x02, 0x22, 0x01, 0x53, 0x01, 0x03, 0x23, 0x29, 0x93, 0x01, 0x03, 0x23, 0x8D, 0x02, -/* 0000DB60 */ 0x23, 0x29, 0x02, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x06, 0x02, 0x00, 0x8F, -/* 0000DB70 */ 0x01, 0x02, 0x2A, 0x04, 0x00, 0x5B, 0x02, 0x2A, 0x02, 0x00, 0xEE, 0x03, 0xFF, 0x29, 0x02, 0x00, -/* 0000DB80 */ 0x8D, 0x02, 0x23, 0x29, 0x02, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x07, 0x03, -/* 0000DB90 */ 0x00, 0x8F, 0x01, 0x03, 0x2A, 0x05, 0x00, 0x5B, 0x02, 0x2A, 0x03, 0x00, 0xEE, 0x03, 0xFF, 0x29, -/* 0000DBA0 */ 0x03, 0x00, 0x8D, 0x02, 0x15, 0x29, 0x06, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8F, 0x01, -/* 0000DBB0 */ 0x02, 0x2A, 0x04, 0x00, 0x5B, 0x01, 0x2A, 0x04, 0x00, 0x5B, 0x02, 0x08, 0x04, 0x00, 0xCB, 0x00, -/* 0000DBC0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x8D, 0x01, 0x15, 0x2B, 0x07, -/* 0000DBD0 */ 0x00, 0x4B, 0x2B, 0x79, 0x2B, 0x2A, 0x02, 0x79, 0x0B, 0x2A, 0x03, 0x79, 0x0B, 0x2A, 0x04, 0x5B, -/* 0000DBE0 */ 0x03, 0x2A, 0x04, 0x00, 0xEE, 0x04, 0xFF, 0x29, 0x04, 0x00, 0xCD, 0x29, 0x0B, 0x00, 0x00, 0x9F, -/* 0000DBF0 */ 0x00, 0x0E, 0x29, 0x9F, 0x01, 0x0F, 0x29, 0x9F, 0x02, 0x10, 0x29, 0x9F, 0x03, 0x11, 0x29, 0x9F, -/* 0000DC00 */ 0x04, 0x12, 0x29, 0x9F, 0x05, 0x13, 0x29, 0x9F, 0x06, 0x14, 0x29, 0x9F, 0x07, 0x15, 0x29, 0x9F, -/* 0000DC10 */ 0x08, 0x16, 0x29, 0x9F, 0x09, 0x17, 0x29, 0x9F, 0x0A, 0x18, 0x29, 0x94, 0x02, 0x29, 0x8D, 0x02, -/* 0000DC20 */ 0x15, 0x29, 0x06, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8F, 0x01, 0x02, 0x2A, 0x04, 0x00, -/* 0000DC30 */ 0x5B, 0x01, 0x2A, 0x05, 0x00, 0x5B, 0x02, 0x19, 0x05, 0x00, 0xCB, 0x14, 0x00, 0x00, 0x00, 0x01, -/* 0000DC40 */ 0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x8F, 0x01, 0x02, 0x2B, 0x04, 0x00, 0x07, 0x01, 0x00, -/* 0000DC50 */ 0xC2, 0x01, 0x2B, 0x2B, 0x06, 0x00, 0x79, 0x2B, 0x2A, 0x02, 0x79, 0x1A, 0x2A, 0x03, 0x79, 0x1A, -/* 0000DC60 */ 0x2A, 0x05, 0x79, 0x1A, 0x2A, 0x04, 0x5B, 0x03, 0x2A, 0x05, 0x00, 0xEE, 0x04, 0xFF, 0x29, 0x05, -/* 0000DC70 */ 0x00, 0x8D, 0x02, 0x04, 0x29, 0x08, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x8F, 0x01, 0x02, -/* 0000DC80 */ 0x2A, 0x04, 0x00, 0x60, 0x2A, 0x2A, 0x06, 0x5B, 0x01, 0x2A, 0x07, 0x00, 0x8D, 0x02, 0x08, 0x2A, -/* 0000DC90 */ 0x09, 0x00, 0x60, 0x2A, 0x2A, 0x06, 0x5B, 0x02, 0x2A, 0x07, 0x00, 0xEE, 0x03, 0xFF, 0x29, 0x07, -/* 0000DCA0 */ 0x00, 0x8D, 0x02, 0x15, 0x29, 0x06, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8F, 0x01, 0x02, -/* 0000DCB0 */ 0x2A, 0x04, 0x00, 0x60, 0x2A, 0x2A, 0x06, 0x5B, 0x01, 0x2A, 0x08, 0x00, 0x5B, 0x02, 0x1C, 0x08, -/* 0000DCC0 */ 0x00, 0xCB, 0x2C, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x8F, 0x01, -/* 0000DCD0 */ 0x02, 0x2B, 0x04, 0x00, 0x79, 0x2B, 0x2A, 0x02, 0x79, 0x0B, 0x2A, 0x03, 0x79, 0x1A, 0x2A, 0x05, -/* 0000DCE0 */ 0x79, 0x0B, 0x2A, 0x04, 0x5B, 0x03, 0x2A, 0x08, 0x00, 0xEE, 0x04, 0xFF, 0x29, 0x08, 0x00, 0x8D, -/* 0000DCF0 */ 0x02, 0x15, 0x29, 0x06, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8F, 0x01, 0x02, 0x2A, 0x04, -/* 0000DD00 */ 0x00, 0x60, 0x2A, 0x2A, 0x06, 0x5B, 0x01, 0x2A, 0x09, 0x00, 0x5B, 0x02, 0x1D, 0x09, 0x00, 0xCB, -/* 0000DD10 */ 0x44, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x00, 0xB6, 0x2C, 0x00, 0xB5, -/* 0000DD20 */ 0x01, 0x00, 0x00, 0x00, 0x2C, 0x2C, 0x01, 0x57, 0x01, 0x04, 0x2B, 0x2C, 0x2A, 0x79, 0x2B, 0x2A, -/* 0000DD30 */ 0x02, 0x79, 0x0B, 0x2A, 0x03, 0x79, 0x1A, 0x2A, 0x05, 0x79, 0x0B, 0x2A, 0x04, 0x5B, 0x03, 0x2A, -/* 0000DD40 */ 0x09, 0x00, 0xEE, 0x04, 0xFF, 0x29, 0x09, 0x00, 0x8D, 0x02, 0x15, 0x29, 0x06, 0x00, 0x07, 0x04, -/* 0000DD50 */ 0x00, 0x5A, 0x00, 0x02, 0x8F, 0x01, 0x02, 0x2A, 0x04, 0x00, 0x60, 0x2A, 0x2A, 0x06, 0x5B, 0x01, -/* 0000DD60 */ 0x2A, 0x0A, 0x00, 0x5B, 0x02, 0x1E, 0x0A, 0x00, 0xCB, 0x5C, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, -/* 0000DD70 */ 0x00, 0x2A, 0x00, 0x00, 0x00, 0x8D, 0x02, 0x23, 0x2B, 0x02, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, -/* 0000DD80 */ 0x02, 0x5B, 0x01, 0x20, 0x0B, 0x00, 0xB6, 0x2D, 0x00, 0xB5, 0x01, 0x00, 0x00, 0x00, 0x2D, 0x2D, -/* 0000DD90 */ 0x01, 0x53, 0x01, 0x05, 0x2C, 0x2D, 0x5B, 0x02, 0x2C, 0x0B, 0x00, 0xEE, 0x03, 0x2B, 0x2B, 0x0B, -/* 0000DDA0 */ 0x00, 0x79, 0x2B, 0x2A, 0x07, 0x79, 0x1A, 0x2A, 0x05, 0x79, 0x0B, 0x2A, 0x04, 0x5B, 0x03, 0x2A, -/* 0000DDB0 */ 0x0A, 0x00, 0xEE, 0x04, 0xFF, 0x29, 0x0A, 0x00, 0x8F, 0x01, 0x02, 0x00, 0x04, 0x00, 0x09, 0x07, -/* 0000DDC0 */ 0x00, 0xA6, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x05, 0x70, 0x00, 0x5C, 0x00, 0x00, -/* 0000DDD0 */ 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, -/* 0000DDE0 */ 0x00, 0x81, 0x01, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 0000DDF0 */ 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, -/* 0000DE00 */ 0x00, 0x2C, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, -/* 0000DE10 */ 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x14, 0x00, 0x00, -/* 0000DE20 */ 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, -/* 0000DE30 */ 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, -/* 0000DE40 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, -/* 0000DE50 */ 0x00, 0xFE, 0xEE, 0x01, 0xFE, 0x06, 0x03, 0xFE, 0x83, 0x01, 0xFE, 0x82, 0x01, 0xFE, 0x81, 0x01, -/* 0000DE60 */ 0xFE, 0x80, 0x01, 0xFE, 0x15, 0x01, 0xFE, 0x84, 0x01, 0x02, 0x01, 0x01, 0x00, 0xFE, 0x1F, 0x04, -/* 0000DE70 */ 0x02, 0x02, 0x00, 0xFE, 0x01, 0x02, 0x01, 0xFE, 0xF5, 0x01, 0xFF, 0x2C, 0x1A, 0x02, 0x00, 0x0F, -/* 0000DE80 */ 0x06, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x0A, 0x1C, 0x55, 0x00, 0x74, 0x02, 0x30, 0x00, 0x5A, 0x04, -/* 0000DE90 */ 0x22, 0x00, 0xD4, 0x02, 0x22, 0x00, 0x52, 0x00, 0x48, 0x00, 0x9B, 0x00, 0x34, 0x00, 0x1F, 0x01, -/* 0000DEA0 */ 0x53, 0x00, 0x99, 0x00, 0x30, 0x00, 0x48, 0x00, 0x4E, 0x00, 0x9E, 0x00, 0x59, 0x00, 0xC2, 0x04, -/* 0000DEB0 */ 0x70, 0x00, 0x16, 0x03, 0x09, 0x00, 0x84, 0x00, 0x07, 0x00, 0x16, 0x00, 0x00, 0x04, 0xE7, 0x00, -/* 0000DEC0 */ 0x00, 0x93, 0xE5, 0x00, 0x00, 0x67, 0xE3, 0x00, 0x00, 0xFC, 0xE1, 0x00, 0x00, 0xDC, 0xDF, 0x00, -/* 0000DED0 */ 0x00, 0xD5, 0xDE, 0x00, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0xBF, 0x0C, -/* 0000DEE0 */ 0x39, 0xA0, 0x41, 0xD1, 0x00, 0xB6, 0xFF, 0x97, 0x48, 0x02, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, -/* 0000DEF0 */ 0x01, 0x01, 0xFF, 0x97, 0x48, 0x02, 0x00, 0xFE, 0x56, 0x02, 0xFE, 0x56, 0x02, 0x01, 0x05, 0x05, -/* 0000DF00 */ 0x08, 0x04, 0x23, 0x22, 0x05, 0x03, 0x01, 0x04, 0x04, 0x04, 0x04, 0x07, 0x06, 0xFE, 0xF6, 0x03, -/* 0000DF10 */ 0x05, 0xFE, 0x32, 0x04, 0x06, 0xFE, 0x46, 0x03, 0x94, 0x59, 0x08, 0xB2, 0x05, 0x08, 0x2C, 0x08, -/* 0000DF20 */ 0x05, 0x15, 0x03, 0x00, 0x08, 0x02, 0x09, 0x24, 0x00, 0x8D, 0x05, 0x03, 0x09, 0x00, 0x00, 0x6B, -/* 0000DF30 */ 0x08, 0x09, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x09, 0x5B, 0x01, 0x03, 0x00, 0x00, 0x5B, 0x02, -/* 0000DF40 */ 0x04, 0x00, 0x00, 0xF2, 0x03, 0xFF, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8D, 0x05, 0x03, -/* 0000DF50 */ 0x09, 0x00, 0x00, 0x6B, 0x08, 0x09, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x09, 0x5B, 0x01, 0x05, -/* 0000DF60 */ 0x01, 0x00, 0xF2, 0x02, 0x08, 0x08, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x06, 0x08, 0xA6, -/* 0000DF70 */ 0x08, 0x14, 0x08, 0x00, 0x06, 0x08, 0x60, 0x08, 0x06, 0x02, 0x0F, 0x24, 0x00, 0x08, 0x8D, 0x05, -/* 0000DF80 */ 0x03, 0x09, 0x00, 0x00, 0x6B, 0x08, 0x09, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x09, 0x5B, 0x01, -/* 0000DF90 */ 0x03, 0x02, 0x00, 0x5B, 0x02, 0x04, 0x02, 0x00, 0xF2, 0x03, 0xFF, 0x08, 0x00, 0x00, 0x00, 0x00, -/* 0000DFA0 */ 0x02, 0x00, 0x60, 0x00, 0x06, 0x03, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x8A, 0x02, -/* 0000DFB0 */ 0xFE, 0xEF, 0x01, 0xFE, 0x06, 0x02, 0xFE, 0x25, 0x02, 0xFF, 0xBD, 0x48, 0x02, 0x00, 0x07, 0x05, -/* 0000DFC0 */ 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3C, 0x00, 0x24, 0x00, 0x84, 0x00, 0x22, 0x00, 0x4B, 0x00, 0x0F, -/* 0000DFD0 */ 0x00, 0x69, 0x00, 0x24, 0x00, 0x84, 0x00, 0x09, 0x00, 0x37, 0x00, 0x00, 0x3F, 0x5D, 0x08, 0xC1, -/* 0000DFE0 */ 0x03, 0x8D, 0x07, 0x00, 0xFE, 0xA9, 0x0C, 0x1B, 0xA0, 0x41, 0xC3, 0x00, 0xFE, 0x0D, 0x04, 0xB4, -/* 0000DFF0 */ 0xFF, 0x00, 0x00, 0x00, 0x02, 0xFF, 0xC0, 0x43, 0x02, 0x00, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, -/* 0000E000 */ 0x01, 0x01, 0xFF, 0xC0, 0x43, 0x02, 0x00, 0xFE, 0x08, 0x04, 0xFE, 0x08, 0x04, 0x02, 0xFE, 0x02, -/* 0000E010 */ 0x04, 0xFE, 0xFA, 0x01, 0x06, 0x07, 0x0B, 0x05, 0x3E, 0x3E, 0x05, 0x06, 0x07, 0x03, 0x03, 0x03, -/* 0000E020 */ 0x03, 0x08, 0x09, 0x0A, 0x06, 0xFE, 0xF6, 0x03, 0x05, 0xFE, 0x34, 0x04, 0x06, 0xFE, 0x46, 0x03, -/* 0000E030 */ 0x07, 0x08, 0xFE, 0x0E, 0x01, 0x59, 0x0B, 0xB2, 0x07, 0x0B, 0x2C, 0x0B, 0x07, 0x15, 0x03, 0x00, -/* 0000E040 */ 0x0B, 0x02, 0x09, 0x24, 0x00, 0x8D, 0x05, 0x03, 0x0C, 0x00, 0x00, 0x6B, 0x0B, 0x0C, 0x00, 0x07, -/* 0000E050 */ 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x03, 0x00, 0x00, 0x5B, 0x02, 0x04, 0x00, 0x00, 0xF2, -/* 0000E060 */ 0x03, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8D, 0x05, 0x03, 0x0C, 0x00, 0x00, 0x6B, -/* 0000E070 */ 0x0B, 0x0C, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x07, 0x01, 0x00, 0xF2, 0x02, -/* 0000E080 */ 0x0B, 0x0B, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x94, 0x02, 0x0B, 0x91, 0x02, 0x0B, 0x01, 0x00, -/* 0000E090 */ 0xA6, 0x0C, 0x14, 0x0D, 0x00, 0x0B, 0x0C, 0x91, 0x02, 0x0B, 0x01, 0x00, 0x60, 0x0B, 0x0B, 0x02, -/* 0000E0A0 */ 0x0F, 0x24, 0x00, 0x0B, 0x8D, 0x05, 0x03, 0x0C, 0x00, 0x00, 0x6B, 0x0B, 0x0C, 0x00, 0x07, 0x03, -/* 0000E0B0 */ 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x03, 0x02, 0x00, 0x5B, 0x02, 0x04, 0x02, 0x00, 0xF2, 0x03, -/* 0000E0C0 */ 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x8D, 0x05, 0x04, 0x0B, 0x02, 0x00, 0x07, 0x03, -/* 0000E0D0 */ 0x00, 0x5A, 0x00, 0x06, 0xCA, 0x0C, 0x5B, 0x01, 0x0C, 0x03, 0x00, 0x5B, 0x02, 0x05, 0x03, 0x00, -/* 0000E0E0 */ 0xEE, 0x03, 0x0B, 0x0B, 0x03, 0x00, 0x94, 0x03, 0x0B, 0x8D, 0x05, 0x06, 0x0B, 0x03, 0x00, 0x07, -/* 0000E0F0 */ 0x04, 0x00, 0x5A, 0x00, 0x06, 0x8D, 0x05, 0x16, 0x0C, 0x04, 0x00, 0x5B, 0x01, 0x0C, 0x04, 0x00, -/* 0000E100 */ 0x8D, 0x03, 0x02, 0x0C, 0x05, 0x00, 0x5B, 0x02, 0x0C, 0x04, 0x00, 0xD3, 0x00, 0x0C, 0x5B, 0x03, -/* 0000E110 */ 0x0C, 0x04, 0x00, 0xEE, 0x04, 0xFF, 0x0B, 0x04, 0x00, 0x8D, 0x05, 0x04, 0x0B, 0x02, 0x00, 0x07, -/* 0000E120 */ 0x03, 0x00, 0x5A, 0x00, 0x06, 0x91, 0x03, 0x0C, 0x06, 0x00, 0x5B, 0x01, 0x0C, 0x05, 0x00, 0xCA, -/* 0000E130 */ 0x0C, 0x5B, 0x02, 0x0C, 0x05, 0x00, 0xEE, 0x03, 0x00, 0x0B, 0x05, 0x00, 0x09, 0x02, 0x00, 0xA6, -/* 0000E140 */ 0x00, 0x24, 0x00, 0xFE, 0x8A, 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0x06, 0x02, 0xFF, 0xF5, 0x43, 0x02, -/* 0000E150 */ 0x00, 0x09, 0x05, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3C, 0x00, 0x24, 0x00, 0x8C, 0x00, 0x22, 0x00, -/* 0000E160 */ 0x4B, 0x00, 0x19, 0x00, 0x69, 0x00, 0x24, 0x00, 0x8D, 0x00, 0x21, 0x00, 0x47, 0x00, 0x30, 0x00, -/* 0000E170 */ 0x44, 0x01, 0x28, 0x00, 0x3E, 0x00, 0x00, 0x7B, 0xE1, 0x00, 0x00, 0xBF, 0x4C, 0x06, 0x01, 0x00, -/* 0000E180 */ 0x88, 0x01, 0x00, 0xFE, 0xB4, 0x0C, 0x48, 0xA2, 0x41, 0xD1, 0x00, 0xB5, 0xFF, 0x75, 0x46, 0x02, -/* 0000E190 */ 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0x75, 0x46, 0x02, 0x00, 0xF8, 0xF8, 0x41, -/* 0000E1A0 */ 0x05, 0x04, 0x06, 0x0D, 0x0D, 0x06, 0x01, 0x01, 0x02, 0x05, 0x05, 0xFE, 0xD4, 0x04, 0x06, 0xFE, -/* 0000E1B0 */ 0xF5, 0x03, 0x36, 0x8D, 0x01, 0x02, 0x06, 0x00, 0x00, 0x2F, 0x07, 0x02, 0x04, 0x2D, 0x06, 0x06, -/* 0000E1C0 */ 0x07, 0x15, 0x03, 0x00, 0x06, 0x03, 0x09, 0x1C, 0x00, 0x8D, 0x01, 0x03, 0x06, 0x01, 0x00, 0x8D, -/* 0000E1D0 */ 0x01, 0x02, 0x07, 0x00, 0x00, 0x2F, 0x08, 0x02, 0x04, 0x96, 0x07, 0x07, 0x08, 0x00, 0x00, 0x9B, -/* 0000E1E0 */ 0x07, 0x06, 0x04, 0x00, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFF, 0xA5, 0x46, 0x02, 0x00, 0x03, 0x00, -/* 0000E1F0 */ 0x00, 0x00, 0x00, 0x16, 0x00, 0x5A, 0x00, 0x1E, 0x00, 0x6D, 0x00, 0x00, 0xBF, 0x5C, 0x08, 0xC1, -/* 0000E200 */ 0x03, 0x88, 0x01, 0x00, 0xFE, 0x8E, 0x0C, 0x10, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x26, 0x04, 0xB3, -/* 0000E210 */ 0xFF, 0x4B, 0x3D, 0x02, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0x4B, 0x3D, 0x02, -/* 0000E220 */ 0x00, 0xFE, 0x7C, 0x02, 0xFE, 0x7C, 0x02, 0x01, 0x07, 0x06, 0x0A, 0x07, 0x35, 0x33, 0x05, 0x06, -/* 0000E230 */ 0x03, 0x05, 0x05, 0x05, 0x05, 0x09, 0x06, 0xFE, 0xF6, 0x03, 0x05, 0xFE, 0x32, 0x04, 0x06, 0xFE, -/* 0000E240 */ 0x46, 0x03, 0x08, 0xED, 0x59, 0x0A, 0xB2, 0x07, 0x0A, 0x8D, 0x05, 0x24, 0x0B, 0x00, 0x00, 0x6B, -/* 0000E250 */ 0x0A, 0x0B, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0B, 0x5B, 0x01, 0x06, 0x00, 0x00, 0xF2, 0x02, -/* 0000E260 */ 0x0A, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x06, 0x0A, 0x2C, 0x0A, 0x07, 0x15, 0x03, -/* 0000E270 */ 0x00, 0x0A, 0x02, 0x09, 0x24, 0x00, 0x8D, 0x05, 0x03, 0x0B, 0x01, 0x00, 0x6B, 0x0A, 0x0B, 0x01, -/* 0000E280 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0B, 0x5B, 0x01, 0x03, 0x01, 0x00, 0x5B, 0x02, 0x04, 0x01, 0x00, -/* 0000E290 */ 0xF2, 0x03, 0xFF, 0x0A, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x8D, 0x05, 0x03, 0x0B, 0x01, 0x00, -/* 0000E2A0 */ 0x6B, 0x0A, 0x0B, 0x02, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0B, 0x5B, 0x01, 0x07, 0x02, 0x00, 0xF2, -/* 0000E2B0 */ 0x02, 0x0A, 0x0A, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x47, 0x08, 0x0A, 0xA6, 0x0A, 0x14, 0x08, -/* 0000E2C0 */ 0x00, 0x08, 0x0A, 0x60, 0x0A, 0x08, 0x03, 0x0F, 0x24, 0x00, 0x0A, 0x8D, 0x05, 0x03, 0x0B, 0x01, -/* 0000E2D0 */ 0x00, 0x6B, 0x0A, 0x0B, 0x01, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0B, 0x5B, 0x01, 0x03, 0x03, 0x00, -/* 0000E2E0 */ 0x5B, 0x02, 0x04, 0x03, 0x00, 0xF2, 0x03, 0xFF, 0x0A, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x8D, -/* 0000E2F0 */ 0x05, 0x0B, 0x0A, 0x02, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x05, 0x8D, 0x05, 0x03, 0x0C, 0x01, -/* 0000E300 */ 0x00, 0x6B, 0x0B, 0x0C, 0x04, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x06, 0x05, 0x00, -/* 0000E310 */ 0x5B, 0x02, 0x08, 0x05, 0x00, 0xF2, 0x03, 0x0B, 0x0B, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x5B, -/* 0000E320 */ 0x01, 0x0B, 0x04, 0x00, 0xEE, 0x02, 0x00, 0x0A, 0x04, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, -/* 0000E330 */ 0x00, 0xFE, 0x38, 0x03, 0xFE, 0x8A, 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0x06, 0x02, 0xFE, 0xE2, 0x01, -/* 0000E340 */ 0xFF, 0x74, 0x3D, 0x02, 0x00, 0x08, 0x05, 0x00, 0x00, 0x00, 0x22, 0x00, 0x2F, 0x00, 0x0B, 0x00, -/* 0000E350 */ 0x38, 0x00, 0x24, 0x00, 0x7C, 0x00, 0x22, 0x00, 0x47, 0x00, 0x0F, 0x00, 0x65, 0x00, 0x24, 0x00, -/* 0000E360 */ 0x7C, 0x00, 0x40, 0x00, 0x47, 0x00, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, -/* 0000E370 */ 0x72, 0x0C, 0x10, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x46, 0x03, 0xB2, 0xFF, 0xD5, 0x38, 0x02, 0x00, -/* 0000E380 */ 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x01, 0xFF, 0xD5, 0x38, 0x02, 0x00, 0xFE, 0x1E, 0x04, 0xFE, -/* 0000E390 */ 0x1E, 0x04, 0x01, 0x09, 0x05, 0x0B, 0x05, 0x60, 0x59, 0x05, 0x09, 0x09, 0x07, 0x06, 0x07, 0x07, -/* 0000E3A0 */ 0x0A, 0x08, 0x06, 0xFE, 0x46, 0x03, 0x07, 0xFE, 0x8F, 0x01, 0x59, 0x0B, 0xB2, 0x07, 0x0B, 0x4F, -/* 0000E3B0 */ 0x08, 0x4F, 0x09, 0x15, 0x05, 0x00, 0x05, 0x02, 0xA6, 0x0B, 0x47, 0x05, 0x0B, 0x15, 0x05, 0x00, -/* 0000E3C0 */ 0x06, 0x02, 0xA6, 0x0B, 0x47, 0x06, 0x0B, 0x4F, 0x08, 0x4F, 0x09, 0x69, 0x06, 0x00, 0x00, 0x00, -/* 0000E3D0 */ 0x0B, 0x14, 0x0A, 0x00, 0x07, 0x0B, 0xA6, 0x0B, 0x14, 0x03, 0x00, 0x07, 0x0B, 0x09, 0x1E, 0x00, -/* 0000E3E0 */ 0x8D, 0x01, 0x02, 0x0B, 0x00, 0x00, 0x4B, 0x0B, 0x07, 0x03, 0x00, 0x5B, 0x01, 0x05, 0x00, 0x00, -/* 0000E3F0 */ 0x5B, 0x02, 0x06, 0x00, 0x00, 0xC2, 0x03, 0x00, 0x0B, 0x00, 0x00, 0x09, 0x39, 0x01, 0x8D, 0x05, -/* 0000E400 */ 0x24, 0x0C, 0x01, 0x00, 0x6B, 0x0B, 0x0C, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, -/* 0000E410 */ 0x07, 0x01, 0x00, 0xF2, 0x02, 0x0B, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x08, 0x0B, -/* 0000E420 */ 0x8D, 0x05, 0x11, 0x0B, 0x02, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x08, 0x02, -/* 0000E430 */ 0x00, 0xEE, 0x02, 0x0B, 0x0B, 0x02, 0x00, 0x0F, 0x1F, 0x00, 0x0B, 0x8D, 0x05, 0x03, 0x0C, 0x03, -/* 0000E440 */ 0x00, 0x6B, 0x0B, 0x0C, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x03, 0x03, 0x00, -/* 0000E450 */ 0xF2, 0x02, 0xFF, 0x0B, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x8D, 0x05, 0x03, 0x0C, 0x03, 0x00, -/* 0000E460 */ 0x6B, 0x0B, 0x0C, 0x02, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x08, 0x04, 0x00, 0xF2, -/* 0000E470 */ 0x02, 0x0B, 0x0B, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x47, 0x09, 0x0B, 0xA6, 0x0B, 0x14, 0x03, -/* 0000E480 */ 0x00, 0x09, 0x0B, 0x09, 0x45, 0x00, 0x8D, 0x05, 0x04, 0x0B, 0x04, 0x00, 0x07, 0x03, 0x00, 0x5A, -/* 0000E490 */ 0x00, 0x02, 0xCA, 0x0C, 0x5B, 0x01, 0x0C, 0x05, 0x00, 0x5B, 0x02, 0x04, 0x05, 0x00, 0xEE, 0x03, -/* 0000E4A0 */ 0x0B, 0x0B, 0x05, 0x00, 0x47, 0x09, 0x0B, 0x8D, 0x05, 0x03, 0x0C, 0x03, 0x00, 0x6B, 0x0B, 0x0C, -/* 0000E4B0 */ 0x03, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x08, 0x06, 0x00, 0x5B, 0x02, 0x09, 0x06, -/* 0000E4C0 */ 0x00, 0xF2, 0x03, 0xFF, 0x0B, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x8D, 0x02, 0x02, 0x0B, 0x05, -/* 0000E4D0 */ 0x00, 0x4B, 0x0B, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x09, 0x07, 0x00, 0x5B, 0x02, -/* 0000E4E0 */ 0x05, 0x07, 0x00, 0x5B, 0x03, 0x06, 0x07, 0x00, 0xEE, 0x04, 0xFF, 0x0B, 0x07, 0x00, 0x47, 0x0B, -/* 0000E4F0 */ 0x09, 0x8D, 0x05, 0x06, 0x0C, 0x06, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8D, 0x05, 0x1A, -/* 0000E500 */ 0x0D, 0x07, 0x00, 0x5B, 0x01, 0x0D, 0x08, 0x00, 0x8D, 0x01, 0x03, 0x0D, 0x08, 0x00, 0x4B, 0x0D, -/* 0000E510 */ 0x5B, 0x02, 0x0D, 0x08, 0x00, 0x5B, 0x03, 0x08, 0x08, 0x00, 0xEE, 0x04, 0x0C, 0x0C, 0x08, 0x00, -/* 0000E520 */ 0x75, 0x0C, 0x0B, 0x04, 0x60, 0x0B, 0x09, 0x05, 0x80, 0x0B, 0x0B, 0xF8, 0x00, 0xFA, 0x0B, 0x47, -/* 0000E530 */ 0x00, 0x08, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x36, 0x03, 0xFE, 0x8E, 0x02, 0xFE, -/* 0000E540 */ 0xEF, 0x01, 0xFE, 0xF0, 0x01, 0xFE, 0x25, 0x02, 0xFE, 0x25, 0x02, 0xAB, 0xFF, 0xEB, 0x38, 0x02, -/* 0000E550 */ 0x00, 0x10, 0x09, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0E, 0x00, 0x2B, 0x00, 0x15, 0x00, -/* 0000E560 */ 0x43, 0x00, 0x1E, 0x00, 0x56, 0x00, 0x22, 0x00, 0x38, 0x00, 0x1B, 0x00, 0x38, 0x00, 0x1F, 0x00, -/* 0000E570 */ 0x9B, 0x00, 0x22, 0x00, 0x47, 0x00, 0x0A, 0x00, 0x3A, 0x00, 0x21, 0x00, 0x3F, 0x00, 0x24, 0x00, -/* 0000E580 */ 0x58, 0x00, 0x23, 0x00, 0x4D, 0x00, 0x36, 0x00, 0x65, 0x00, 0x0B, 0x00, 0x3D, 0x00, 0x08, 0x00, -/* 0000E590 */ 0x1C, 0x00, 0x00, 0xBF, 0x5C, 0x0A, 0xC1, 0x07, 0x88, 0x01, 0x00, 0xFE, 0x65, 0x0C, 0x62, 0xA0, -/* 0000E5A0 */ 0x41, 0xF1, 0x00, 0xB1, 0xFF, 0x8C, 0x36, 0x02, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, -/* 0000E5B0 */ 0xFF, 0x8C, 0x36, 0x02, 0x00, 0xFE, 0xE1, 0x01, 0xFE, 0xE1, 0x01, 0x03, 0x08, 0x09, 0x0E, 0x07, -/* 0000E5C0 */ 0x39, 0x37, 0x04, 0x02, 0x06, 0x06, 0x03, 0x03, 0x03, 0x03, 0x01, 0x0D, 0x07, 0x06, 0xFE, 0xC3, -/* 0000E5D0 */ 0x03, 0x05, 0xFE, 0x21, 0x04, 0x06, 0xFE, 0x20, 0x04, 0x08, 0x01, 0x00, 0x01, 0x01, 0xF9, 0xAC, -/* 0000E5E0 */ 0x0B, 0x59, 0x0E, 0xB2, 0x09, 0x0E, 0x2C, 0x0E, 0x09, 0x15, 0x03, 0x00, 0x0E, 0x03, 0x09, 0x33, -/* 0000E5F0 */ 0x00, 0x8D, 0x04, 0x0A, 0x0E, 0x00, 0x00, 0xE1, 0x0E, 0x09, 0x0E, 0x00, 0x0F, 0x24, 0x00, 0x0E, -/* 0000E600 */ 0x8D, 0x04, 0x03, 0x0F, 0x01, 0x00, 0x6B, 0x0E, 0x0F, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0F, -/* 0000E610 */ 0x5B, 0x01, 0x04, 0x00, 0x00, 0x5B, 0x02, 0x05, 0x00, 0x00, 0xF2, 0x03, 0xFF, 0x0E, 0x00, 0x00, -/* 0000E620 */ 0x00, 0x00, 0x00, 0x00, 0x8D, 0x04, 0x04, 0x0E, 0x02, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x06, -/* 0000E630 */ 0xCA, 0x0F, 0x5B, 0x01, 0x0F, 0x01, 0x00, 0x5B, 0x02, 0x02, 0x01, 0x00, 0xEE, 0x03, 0x0E, 0x0E, -/* 0000E640 */ 0x01, 0x00, 0x47, 0x0A, 0x0E, 0x8D, 0x01, 0x02, 0x0E, 0x03, 0x00, 0x4B, 0x0E, 0x07, 0x04, 0x00, -/* 0000E650 */ 0x5A, 0x00, 0x06, 0x5B, 0x01, 0x0A, 0x02, 0x00, 0x96, 0x0F, 0x0B, 0x07, 0x00, 0x00, 0x5B, 0x02, -/* 0000E660 */ 0x0F, 0x02, 0x00, 0x96, 0x0F, 0x0B, 0x08, 0x01, 0x00, 0x5B, 0x03, 0x0F, 0x02, 0x00, 0xEE, 0x04, -/* 0000E670 */ 0xFF, 0x0E, 0x02, 0x00, 0x8D, 0x04, 0x24, 0x0F, 0x04, 0x00, 0x6B, 0x0E, 0x0F, 0x01, 0x07, 0x02, -/* 0000E680 */ 0x00, 0x5A, 0x00, 0x0F, 0x5B, 0x01, 0x09, 0x03, 0x00, 0xF2, 0x02, 0x0E, 0x0E, 0x01, 0x00, 0x00, -/* 0000E690 */ 0x00, 0x03, 0x00, 0x47, 0x0C, 0x0E, 0x8D, 0x04, 0x0B, 0x0E, 0x05, 0x00, 0x07, 0x02, 0x00, 0x5A, -/* 0000E6A0 */ 0x00, 0x06, 0x8D, 0x04, 0x03, 0x10, 0x01, 0x00, 0x6B, 0x0F, 0x10, 0x02, 0x07, 0x03, 0x00, 0x5A, -/* 0000E6B0 */ 0x00, 0x10, 0x5B, 0x01, 0x0C, 0x05, 0x00, 0x5B, 0x02, 0x0A, 0x05, 0x00, 0xF2, 0x03, 0x0F, 0x0F, -/* 0000E6C0 */ 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x5B, 0x01, 0x0F, 0x04, 0x00, 0xEE, 0x02, 0x00, 0x0E, 0x04, -/* 0000E6D0 */ 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x8A, 0x02, 0xFE, 0x38, 0x03, 0xFE, 0xE2, -/* 0000E6E0 */ 0x01, 0xFF, 0xAA, 0x36, 0x02, 0x00, 0x07, 0x07, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x53, 0x00, 0x24, -/* 0000E6F0 */ 0x00, 0x70, 0x00, 0x21, 0x00, 0x3A, 0x00, 0x2F, 0x00, 0x52, 0x00, 0x22, 0x00, 0x31, 0x00, 0x40, -/* 0000E700 */ 0x00, 0x42, 0x00, 0x00, 0xBF, 0x5C, 0x18, 0xC1, 0x43, 0xA8, 0x01, 0x00, 0xFE, 0xDF, 0x0B, 0x0C, -/* 0000E710 */ 0xB3, 0x41, 0xC1, 0x00, 0xFE, 0x1F, 0x04, 0xB0, 0xFF, 0x6C, 0x1A, 0x02, 0x00, 0xFF, 0x00, 0x10, -/* 0000E720 */ 0x01, 0x00, 0x04, 0x04, 0xFF, 0x6C, 0x1A, 0x02, 0x00, 0xFE, 0xBC, 0x1B, 0xFE, 0xBC, 0x1B, 0x45, -/* 0000E730 */ 0x18, 0x23, 0x37, 0x07, 0xFE, 0xA3, 0x01, 0xFE, 0x83, 0x01, 0x04, 0x22, 0x04, 0x12, 0x26, 0x26, -/* 0000E740 */ 0x26, 0x26, 0x01, 0x36, 0x37, 0x06, 0xFE, 0xF6, 0x03, 0x06, 0xFE, 0xC8, 0x04, 0x08, 0x06, 0xFE, -/* 0000E750 */ 0x46, 0x03, 0x0B, 0x06, 0xFE, 0xF5, 0x03, 0x07, 0x06, 0xFE, 0x00, 0x04, 0x06, 0xFE, 0xAD, 0x03, -/* 0000E760 */ 0x05, 0xFE, 0xBC, 0x03, 0x05, 0xFE, 0xFF, 0x03, 0x06, 0xFE, 0x28, 0x04, 0x05, 0xFE, 0x29, 0x04, -/* 0000E770 */ 0x05, 0xFE, 0x2A, 0x04, 0x06, 0xFE, 0x2B, 0x04, 0x06, 0xFE, 0x2C, 0x04, 0x05, 0xFE, 0x2D, 0x04, -/* 0000E780 */ 0x06, 0xFE, 0x2E, 0x04, 0x06, 0xFE, 0x3F, 0x03, 0x06, 0xFE, 0xFA, 0x03, 0x01, 0x01, 0x01, 0x15, -/* 0000E790 */ 0x06, 0xFE, 0xFD, 0x03, 0x06, 0xFE, 0xFE, 0x03, 0x06, 0xFE, 0x2F, 0x04, 0x06, 0xFE, 0xC2, 0x03, -/* 0000E7A0 */ 0x06, 0xFE, 0xB4, 0x03, 0x06, 0xFE, 0xFB, 0x03, 0x01, 0x00, 0x01, 0x14, 0x01, 0x03, 0x06, 0xFE, -/* 0000E7B0 */ 0xFC, 0x03, 0x05, 0xFE, 0xD2, 0x04, 0xFE, 0xE2, 0x06, 0x2C, 0x38, 0x23, 0x0D, 0x03, 0x00, 0x38, -/* 0000E7C0 */ 0x02, 0x09, 0x1A, 0x00, 0x8D, 0x04, 0x03, 0x39, 0x00, 0x00, 0x6B, 0x38, 0x39, 0x00, 0x07, 0x01, -/* 0000E7D0 */ 0x00, 0x5A, 0x00, 0x39, 0xF2, 0x01, 0xFF, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8D, 0x04, -/* 0000E7E0 */ 0x06, 0x38, 0x01, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x04, 0x8D, 0x04, 0x13, 0x39, 0x02, 0x00, -/* 0000E7F0 */ 0x5B, 0x01, 0x39, 0x01, 0x00, 0x5B, 0x02, 0x23, 0x01, 0x00, 0x5B, 0x03, 0x03, 0x01, 0x00, 0xEE, -/* 0000E800 */ 0x04, 0x38, 0x38, 0x01, 0x00, 0x0E, 0x2C, 0x00, 0x38, 0x60, 0x38, 0x23, 0x01, 0x0E, 0x24, 0x00, -/* 0000E810 */ 0x38, 0x8D, 0x04, 0x03, 0x39, 0x00, 0x00, 0x6B, 0x38, 0x39, 0x02, 0x07, 0x03, 0x00, 0x5A, 0x00, -/* 0000E820 */ 0x39, 0x5B, 0x01, 0x05, 0x02, 0x00, 0x5B, 0x02, 0x05, 0x02, 0x00, 0xF2, 0x03, 0xFF, 0x38, 0x02, -/* 0000E830 */ 0x00, 0x00, 0x00, 0x02, 0x00, 0x75, 0x06, 0x23, 0x03, 0x2C, 0x38, 0x25, 0x14, 0x03, 0x00, 0x38, -/* 0000E840 */ 0x07, 0x09, 0x24, 0x00, 0x8D, 0x04, 0x04, 0x38, 0x03, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x04, -/* 0000E850 */ 0xCA, 0x39, 0x5B, 0x01, 0x39, 0x03, 0x00, 0x5B, 0x02, 0x08, 0x03, 0x00, 0xEE, 0x03, 0x38, 0x38, -/* 0000E860 */ 0x03, 0x00, 0x47, 0x25, 0x38, 0x09, 0x22, 0x00, 0x8D, 0x04, 0x24, 0x39, 0x04, 0x00, 0x6B, 0x38, -/* 0000E870 */ 0x39, 0x04, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x39, 0x5B, 0x01, 0x25, 0x04, 0x00, 0xF2, 0x02, 0x38, -/* 0000E880 */ 0x38, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x47, 0x25, 0x38, 0x8D, 0x03, 0x02, 0x38, 0x05, 0x00, -/* 0000E890 */ 0x4B, 0x38, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x25, 0x05, 0x00, 0x5B, 0x02, 0x09, -/* 0000E8A0 */ 0x05, 0x00, 0x5B, 0x03, 0x0A, 0x05, 0x00, 0xCD, 0x39, 0x02, 0x00, 0x00, 0x9F, 0x00, 0x0B, 0x39, -/* 0000E8B0 */ 0x9F, 0x01, 0x0C, 0x39, 0x5B, 0x04, 0x39, 0x05, 0x00, 0x5B, 0x05, 0x0C, 0x05, 0x00, 0xEE, 0x06, -/* 0000E8C0 */ 0x38, 0x38, 0x05, 0x00, 0x47, 0x28, 0x38, 0x8D, 0x03, 0x02, 0x38, 0x05, 0x00, 0x4B, 0x38, 0x07, -/* 0000E8D0 */ 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x25, 0x06, 0x00, 0x5B, 0x02, 0x0D, 0x06, 0x00, 0x5B, -/* 0000E8E0 */ 0x03, 0x0A, 0x06, 0x00, 0xCD, 0x39, 0x03, 0x01, 0x00, 0x9F, 0x00, 0x0E, 0x39, 0x9F, 0x01, 0x0F, -/* 0000E8F0 */ 0x39, 0x9F, 0x02, 0x10, 0x39, 0x5B, 0x04, 0x39, 0x06, 0x00, 0x5B, 0x05, 0x0E, 0x06, 0x00, 0xEE, -/* 0000E900 */ 0x06, 0x38, 0x38, 0x06, 0x00, 0x47, 0x29, 0x38, 0x8D, 0x04, 0x3B, 0x38, 0x06, 0x00, 0x4B, 0x38, -/* 0000E910 */ 0x60, 0x38, 0x38, 0x05, 0x47, 0x2A, 0x38, 0x14, 0x03, 0x00, 0x29, 0x0F, 0x09, 0x12, 0x00, 0x8D, -/* 0000E920 */ 0x04, 0x3B, 0x38, 0x06, 0x00, 0x4B, 0x38, 0x60, 0x38, 0x38, 0x06, 0x47, 0x2A, 0x38, 0x09, 0x17, -/* 0000E930 */ 0x00, 0x14, 0x03, 0x00, 0x29, 0x10, 0x09, 0x0F, 0x00, 0x8D, 0x04, 0x3B, 0x38, 0x06, 0x00, 0x4B, -/* 0000E940 */ 0x38, 0x60, 0x38, 0x38, 0x07, 0x47, 0x2A, 0x38, 0x8D, 0x03, 0x02, 0x38, 0x05, 0x00, 0x4B, 0x38, -/* 0000E950 */ 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x25, 0x07, 0x00, 0x5B, 0x02, 0x10, 0x07, 0x00, -/* 0000E960 */ 0x5B, 0x03, 0x0A, 0x07, 0x00, 0xA6, 0x39, 0x5B, 0x04, 0x39, 0x07, 0x00, 0xA6, 0x39, 0x5B, 0x05, -/* 0000E970 */ 0x39, 0x07, 0x00, 0xEE, 0x06, 0x38, 0x38, 0x07, 0x00, 0x47, 0x2B, 0x38, 0x8D, 0x03, 0x02, 0x38, -/* 0000E980 */ 0x05, 0x00, 0x4B, 0x38, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x25, 0x08, 0x00, 0x5B, -/* 0000E990 */ 0x02, 0x11, 0x08, 0x00, 0x5B, 0x03, 0x0A, 0x08, 0x00, 0xCD, 0x39, 0x03, 0x02, 0x00, 0x9F, 0x00, -/* 0000E9A0 */ 0x12, 0x39, 0x9F, 0x01, 0x13, 0x39, 0x9F, 0x02, 0x14, 0x39, 0x5B, 0x04, 0x39, 0x08, 0x00, 0x5B, -/* 0000E9B0 */ 0x05, 0x13, 0x08, 0x00, 0xEE, 0x06, 0x38, 0x38, 0x08, 0x00, 0x47, 0x2C, 0x38, 0xA6, 0x38, 0x47, -/* 0000E9C0 */ 0x2D, 0x38, 0x8D, 0x03, 0x03, 0x38, 0x07, 0x00, 0x4B, 0x38, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, -/* 0000E9D0 */ 0x5B, 0x01, 0x25, 0x09, 0x00, 0x5B, 0x02, 0x15, 0x09, 0x00, 0x5B, 0x03, 0x16, 0x09, 0x00, 0x5B, -/* 0000E9E0 */ 0x04, 0x17, 0x09, 0x00, 0x5B, 0x05, 0x16, 0x09, 0x00, 0xEE, 0x06, 0x38, 0x38, 0x09, 0x00, 0x47, -/* 0000E9F0 */ 0x2E, 0x38, 0xA6, 0x38, 0x47, 0x2F, 0x38, 0xA6, 0x38, 0x47, 0x30, 0x38, 0xA6, 0x38, 0x47, 0x31, -/* 0000EA00 */ 0x38, 0x60, 0x38, 0x25, 0x08, 0x47, 0x32, 0x38, 0x60, 0x38, 0x25, 0x09, 0x47, 0x33, 0x38, 0x2C, -/* 0000EA10 */ 0x38, 0x32, 0x15, 0x0B, 0x00, 0x38, 0x07, 0x2C, 0x38, 0x33, 0x15, 0x03, 0x00, 0x38, 0x07, 0x09, -/* 0000EA20 */ 0x60, 0x00, 0x8D, 0x03, 0x03, 0x38, 0x07, 0x00, 0x4B, 0x38, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, -/* 0000EA30 */ 0x5B, 0x01, 0x25, 0x0A, 0x00, 0x5B, 0x02, 0x18, 0x0A, 0x00, 0x5B, 0x03, 0x16, 0x0A, 0x00, 0x5B, -/* 0000EA40 */ 0x04, 0x17, 0x0A, 0x00, 0x5B, 0x05, 0x16, 0x0A, 0x00, 0xEE, 0x06, 0x38, 0x38, 0x0A, 0x00, 0x47, -/* 0000EA50 */ 0x32, 0x38, 0x8D, 0x03, 0x03, 0x38, 0x07, 0x00, 0x4B, 0x38, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, -/* 0000EA60 */ 0x5B, 0x01, 0x25, 0x0B, 0x00, 0x5B, 0x02, 0x19, 0x0B, 0x00, 0x5B, 0x03, 0x32, 0x0B, 0x00, 0x5B, -/* 0000EA70 */ 0x04, 0x17, 0x0B, 0x00, 0x5B, 0x05, 0x17, 0x0B, 0x00, 0xEE, 0x06, 0x38, 0x38, 0x0B, 0x00, 0x47, -/* 0000EA80 */ 0x33, 0x38, 0x8D, 0x03, 0x02, 0x38, 0x05, 0x00, 0x4B, 0x38, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, -/* 0000EA90 */ 0x5B, 0x01, 0x25, 0x0C, 0x00, 0x5B, 0x02, 0x1A, 0x0C, 0x00, 0x5B, 0x03, 0x1B, 0x0C, 0x00, 0xA6, -/* 0000EAA0 */ 0x39, 0x5B, 0x04, 0x39, 0x0C, 0x00, 0x5B, 0x05, 0x06, 0x0C, 0x00, 0xEE, 0x06, 0x38, 0x38, 0x0C, -/* 0000EAB0 */ 0x00, 0x47, 0x34, 0x38, 0x8D, 0x03, 0x07, 0x38, 0x08, 0x00, 0x4B, 0x38, 0x07, 0x02, 0x00, 0x5A, -/* 0000EAC0 */ 0x00, 0x04, 0x5B, 0x01, 0x24, 0x0D, 0x00, 0xEE, 0x02, 0x38, 0x38, 0x0D, 0x00, 0x47, 0x24, 0x38, -/* 0000EAD0 */ 0x8D, 0x04, 0x2A, 0x38, 0x09, 0x00, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x24, 0x0E, -/* 0000EAE0 */ 0x00, 0x5B, 0x02, 0x28, 0x0E, 0x00, 0xCD, 0x39, 0x01, 0x03, 0x00, 0x9F, 0x00, 0x1C, 0x39, 0x5B, -/* 0000EAF0 */ 0x03, 0x39, 0x0E, 0x00, 0x8D, 0x04, 0x2B, 0x39, 0x0A, 0x00, 0x5B, 0x04, 0x39, 0x0E, 0x00, 0xEE, -/* 0000EB00 */ 0x05, 0x38, 0x38, 0x0E, 0x00, 0x47, 0x35, 0x38, 0x2C, 0x38, 0x2B, 0x15, 0x03, 0x00, 0x38, 0x07, -/* 0000EB10 */ 0x09, 0x53, 0x00, 0x8D, 0x03, 0x06, 0x38, 0x0B, 0x00, 0x4B, 0x38, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 0000EB20 */ 0x04, 0x5B, 0x01, 0x2B, 0x0F, 0x00, 0xEE, 0x02, 0x38, 0x38, 0x0F, 0x00, 0x0F, 0x36, 0x00, 0x38, -/* 0000EB30 */ 0x8D, 0x04, 0x03, 0x39, 0x00, 0x00, 0x6B, 0x38, 0x39, 0x0A, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x39, -/* 0000EB40 */ 0x8D, 0x04, 0x0B, 0x3A, 0x0C, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x2B, 0x11, -/* 0000EB50 */ 0x00, 0xEE, 0x02, 0x3A, 0x3A, 0x11, 0x00, 0x5B, 0x01, 0x3A, 0x10, 0x00, 0xF2, 0x02, 0xFF, 0x38, -/* 0000EB60 */ 0x0A, 0x00, 0x00, 0x00, 0x10, 0x00, 0x14, 0x03, 0x00, 0x29, 0x10, 0x09, 0x1E, 0x01, 0x2C, 0x38, -/* 0000EB70 */ 0x2B, 0x14, 0x03, 0x00, 0x38, 0x07, 0x09, 0x1A, 0x00, 0x8D, 0x04, 0x03, 0x39, 0x00, 0x00, 0x6B, -/* 0000EB80 */ 0x38, 0x39, 0x0B, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x39, 0xF2, 0x01, 0xFF, 0x38, 0x0B, 0x00, 0x00, -/* 0000EB90 */ 0x00, 0x12, 0x00, 0x8D, 0x04, 0x06, 0x38, 0x01, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x04, 0x8D, -/* 0000EBA0 */ 0x04, 0x1F, 0x39, 0x0D, 0x00, 0x5B, 0x01, 0x39, 0x13, 0x00, 0x5B, 0x02, 0x2B, 0x13, 0x00, 0xEE, -/* 0000EBB0 */ 0x03, 0x38, 0x38, 0x13, 0x00, 0x47, 0x2B, 0x38, 0xE5, 0x26, 0x00, 0x8D, 0x04, 0x03, 0x39, 0x00, -/* 0000EBC0 */ 0x00, 0x6B, 0x38, 0x39, 0x0C, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x39, 0x5B, 0x01, 0x2B, 0x14, 0x00, -/* 0000EBD0 */ 0xF2, 0x02, 0x38, 0x38, 0x0C, 0x00, 0x00, 0x00, 0x14, 0x00, 0x47, 0x2D, 0x38, 0xE9, 0x09, 0x51, -/* 0000EBE0 */ 0x00, 0xE7, 0x26, 0x06, 0x8D, 0x04, 0x22, 0x38, 0x0E, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, -/* 0000EBF0 */ 0x5B, 0x01, 0x26, 0x15, 0x00, 0xEE, 0x02, 0xFF, 0x38, 0x15, 0x00, 0x8D, 0x04, 0x03, 0x39, 0x00, -/* 0000EC00 */ 0x00, 0x6B, 0x38, 0x39, 0x0A, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x39, 0x8D, 0x04, 0x0B, 0x3A, 0x0C, -/* 0000EC10 */ 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x2B, 0x17, 0x00, 0xEE, 0x02, 0x3A, 0x3A, -/* 0000EC20 */ 0x17, 0x00, 0x5B, 0x01, 0x3A, 0x16, 0x00, 0xF2, 0x02, 0xFF, 0x38, 0x0A, 0x00, 0x00, 0x00, 0x16, -/* 0000EC30 */ 0x00, 0xE9, 0x8D, 0x03, 0x03, 0x38, 0x07, 0x00, 0x4B, 0x38, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, -/* 0000EC40 */ 0x5B, 0x01, 0x25, 0x18, 0x00, 0x5B, 0x02, 0x1D, 0x18, 0x00, 0x5B, 0x03, 0x1E, 0x18, 0x00, 0x5B, -/* 0000EC50 */ 0x04, 0x1F, 0x18, 0x00, 0x5B, 0x05, 0x2D, 0x18, 0x00, 0xEE, 0x06, 0x38, 0x38, 0x18, 0x00, 0x47, -/* 0000EC60 */ 0x2F, 0x38, 0x8D, 0x04, 0x0F, 0x39, 0x0F, 0x00, 0x6B, 0x38, 0x39, 0x0D, 0x07, 0x03, 0x00, 0x5A, -/* 0000EC70 */ 0x00, 0x39, 0x5B, 0x01, 0x2D, 0x19, 0x00, 0x5B, 0x02, 0x2F, 0x19, 0x00, 0xF2, 0x03, 0x38, 0x38, -/* 0000EC80 */ 0x0D, 0x00, 0x00, 0x00, 0x19, 0x00, 0x47, 0x31, 0x38, 0x09, 0x93, 0x00, 0xA6, 0x38, 0x47, 0x2B, -/* 0000EC90 */ 0x38, 0xA6, 0x38, 0x47, 0x2C, 0x38, 0x8D, 0x03, 0x03, 0x38, 0x07, 0x00, 0x4B, 0x38, 0x07, 0x06, -/* 0000ECA0 */ 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x25, 0x1A, 0x00, 0x5B, 0x02, 0x1D, 0x1A, 0x00, 0x5B, 0x03, -/* 0000ECB0 */ 0x1E, 0x1A, 0x00, 0x5B, 0x04, 0x1F, 0x1A, 0x00, 0x5B, 0x05, 0x1E, 0x1A, 0x00, 0xEE, 0x06, 0x38, -/* 0000ECC0 */ 0x38, 0x1A, 0x00, 0x47, 0x2F, 0x38, 0x14, 0x03, 0x00, 0x29, 0x0F, 0x09, 0x2A, 0x00, 0x8D, 0x04, -/* 0000ECD0 */ 0x0F, 0x39, 0x0F, 0x00, 0x6B, 0x38, 0x39, 0x0D, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x39, 0x5B, 0x01, -/* 0000ECE0 */ 0x2F, 0x1B, 0x00, 0x5B, 0x02, 0x1E, 0x1B, 0x00, 0xF2, 0x03, 0x38, 0x38, 0x0D, 0x00, 0x00, 0x00, -/* 0000ECF0 */ 0x1B, 0x00, 0x47, 0x31, 0x38, 0x09, 0x27, 0x00, 0x8D, 0x04, 0x0F, 0x39, 0x0F, 0x00, 0x6B, 0x38, -/* 0000ED00 */ 0x39, 0x0D, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x39, 0x5B, 0x01, 0x2F, 0x1C, 0x00, 0x5B, 0x02, 0x20, -/* 0000ED10 */ 0x1C, 0x00, 0xF2, 0x03, 0x38, 0x38, 0x0D, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x47, 0x31, 0x38, 0x8D, -/* 0000ED20 */ 0x03, 0x03, 0x38, 0x07, 0x00, 0x4B, 0x38, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x25, -/* 0000ED30 */ 0x1D, 0x00, 0x5B, 0x02, 0x21, 0x1D, 0x00, 0x5B, 0x03, 0x2F, 0x1D, 0x00, 0x5B, 0x04, 0x1F, 0x1D, -/* 0000ED40 */ 0x00, 0x5B, 0x05, 0x31, 0x1D, 0x00, 0xEE, 0x06, 0x38, 0x38, 0x1D, 0x00, 0x47, 0x30, 0x38, 0x75, -/* 0000ED50 */ 0x28, 0x23, 0x0E, 0x60, 0x38, 0x35, 0x0F, 0x75, 0x38, 0x23, 0x10, 0x75, 0x29, 0x23, 0x11, 0xA6, -/* 0000ED60 */ 0x38, 0x15, 0x03, 0x00, 0x2B, 0x38, 0x09, 0x04, 0x00, 0x75, 0x2B, 0x23, 0x12, 0xA6, 0x38, 0x15, -/* 0000ED70 */ 0x03, 0x00, 0x2C, 0x38, 0x09, 0x62, 0x00, 0x75, 0x2C, 0x23, 0x13, 0x8D, 0x04, 0x3C, 0x38, 0x10, -/* 0000ED80 */ 0x00, 0x4B, 0x38, 0x60, 0x38, 0x38, 0x14, 0x75, 0x38, 0x23, 0x15, 0x14, 0x03, 0x00, 0x2C, 0x13, -/* 0000ED90 */ 0x09, 0x13, 0x00, 0x8D, 0x04, 0x3C, 0x38, 0x10, 0x00, 0x4B, 0x38, 0x60, 0x38, 0x38, 0x16, 0x75, -/* 0000EDA0 */ 0x38, 0x23, 0x15, 0x09, 0x33, 0x00, 0x14, 0x03, 0x00, 0x2C, 0x12, 0x09, 0x13, 0x00, 0x8D, 0x04, -/* 0000EDB0 */ 0x3C, 0x38, 0x10, 0x00, 0x4B, 0x38, 0x60, 0x38, 0x38, 0x17, 0x75, 0x38, 0x23, 0x15, 0x09, 0x18, -/* 0000EDC0 */ 0x00, 0x14, 0x03, 0x00, 0x2C, 0x14, 0x09, 0x10, 0x00, 0x8D, 0x04, 0x3C, 0x38, 0x10, 0x00, 0x4B, -/* 0000EDD0 */ 0x38, 0x60, 0x38, 0x38, 0x18, 0x75, 0x38, 0x23, 0x15, 0x75, 0x2E, 0x23, 0x19, 0x75, 0x2F, 0x23, -/* 0000EDE0 */ 0x1A, 0x75, 0x30, 0x23, 0x1B, 0xA6, 0x38, 0x15, 0x03, 0x00, 0x33, 0x38, 0x09, 0x08, 0x00, 0x75, -/* 0000EDF0 */ 0x32, 0x23, 0x1C, 0x75, 0x33, 0x23, 0x1D, 0x75, 0x2A, 0x23, 0x1E, 0x75, 0x34, 0x23, 0x1F, 0xE5, -/* 0000EE00 */ 0x23, 0x00, 0x8D, 0x04, 0x03, 0x39, 0x00, 0x00, 0x6B, 0x38, 0x39, 0x20, 0x07, 0x02, 0x00, 0x5A, -/* 0000EE10 */ 0x00, 0x39, 0x5B, 0x01, 0x23, 0x1E, 0x00, 0xF2, 0x02, 0xFF, 0x38, 0x20, 0x00, 0x00, 0x00, 0x1E, -/* 0000EE20 */ 0x00, 0xE9, 0x09, 0x35, 0x00, 0xE7, 0x27, 0x06, 0x8D, 0x04, 0x22, 0x38, 0x0E, 0x00, 0x07, 0x02, -/* 0000EE30 */ 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x27, 0x1F, 0x00, 0xEE, 0x02, 0xFF, 0x38, 0x1F, 0x00, 0x8D, -/* 0000EE40 */ 0x04, 0x03, 0x39, 0x00, 0x00, 0x6B, 0x38, 0x39, 0x21, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x39, 0xF2, -/* 0000EE50 */ 0x01, 0xFF, 0x38, 0x21, 0x00, 0x00, 0x00, 0x20, 0x00, 0xE9, 0x60, 0x38, 0x23, 0x22, 0x0F, 0x04, -/* 0000EE60 */ 0x00, 0x38, 0x75, 0x22, 0x23, 0x23, 0x47, 0x38, 0x23, 0x8D, 0x04, 0x06, 0x39, 0x01, 0x00, 0x07, -/* 0000EE70 */ 0x03, 0x00, 0x5A, 0x00, 0x04, 0x8D, 0x04, 0x1E, 0x3A, 0x11, 0x00, 0x5B, 0x01, 0x3A, 0x21, 0x00, -/* 0000EE80 */ 0x60, 0x3A, 0x23, 0x22, 0x5B, 0x02, 0x3A, 0x21, 0x00, 0xEE, 0x03, 0x39, 0x39, 0x21, 0x00, 0x75, -/* 0000EE90 */ 0x39, 0x38, 0x24, 0x75, 0x06, 0x23, 0x25, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x89, 0x02, 0xFE, 0xF2, -/* 0000EEA0 */ 0x01, 0xFE, 0x8D, 0x02, 0xFE, 0xF2, 0x01, 0xFE, 0x36, 0x03, 0xFE, 0x30, 0x03, 0xFE, 0x31, 0x03, -/* 0000EEB0 */ 0xFE, 0x32, 0x03, 0xFE, 0x17, 0x02, 0xFE, 0x14, 0x02, 0xFE, 0x85, 0x02, 0xFE, 0x88, 0x02, 0xFE, -/* 0000EEC0 */ 0xE5, 0x01, 0xEE, 0xFE, 0xD3, 0x04, 0xFE, 0xF7, 0x01, 0xFE, 0xF3, 0x01, 0xFE, 0x32, 0x02, 0xFE, -/* 0000EED0 */ 0x02, 0x02, 0xFE, 0x03, 0x02, 0xFE, 0x2C, 0x03, 0xFE, 0x04, 0x02, 0xFE, 0x33, 0x03, 0xFE, 0x34, -/* 0000EEE0 */ 0x03, 0xFE, 0x35, 0x03, 0xFE, 0x0A, 0x02, 0xFE, 0x09, 0x02, 0xFE, 0x07, 0x02, 0xFE, 0x0B, 0x02, -/* 0000EEF0 */ 0xFE, 0x08, 0x02, 0xFE, 0x05, 0x02, 0xFE, 0x0E, 0x02, 0xFE, 0xE3, 0x01, 0xFE, 0x90, 0x02, 0xFE, -/* 0000EF00 */ 0x0C, 0x02, 0xFE, 0x0C, 0x02, 0xFE, 0x0C, 0x02, 0xFE, 0x06, 0x02, 0xFF, 0xC1, 0x1A, 0x02, 0x00, -/* 0000EF10 */ 0x50, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3B, 0x00, 0x1A, 0x00, 0x3F, 0x00, 0x33, 0x00, 0x9B, -/* 0000EF20 */ 0x00, 0x24, 0x00, 0x6D, 0x00, 0x04, 0x00, 0x61, 0x00, 0x0B, 0x00, 0x3A, 0x00, 0x24, 0x00, 0x4F, -/* 0000EF30 */ 0x00, 0x22, 0x00, 0x49, 0x00, 0x3D, 0x00, 0x71, 0x00, 0x41, 0x00, 0x73, 0x00, 0x0F, 0x00, 0x4B, -/* 0000EF40 */ 0x00, 0x08, 0x00, 0x2F, 0x00, 0x12, 0x00, 0x43, 0x00, 0x08, 0x00, 0x30, 0x00, 0x0F, 0x00, 0x50, -/* 0000EF50 */ 0x00, 0x34, 0x00, 0x5F, 0x00, 0x41, 0x00, 0x7D, 0x00, 0x05, 0x00, 0x31, 0x00, 0x30, 0x00, 0x67, -/* 0000EF60 */ 0x00, 0x05, 0x00, 0x37, 0x00, 0x05, 0x00, 0x37, 0x00, 0x05, 0x00, 0x3F, 0x00, 0x07, 0x00, 0x51, -/* 0000EF70 */ 0x00, 0x07, 0x00, 0x52, 0x00, 0x13, 0x00, 0x7E, 0x00, 0x30, 0x00, 0x6F, 0x00, 0x30, 0x00, 0x96, -/* 0000EF80 */ 0x00, 0x32, 0x00, 0x9A, 0x00, 0x1C, 0x00, 0x41, 0x00, 0x38, 0x00, 0xA2, 0x00, 0x28, 0x00, 0x62, -/* 0000EF90 */ 0x00, 0x36, 0x00, 0x58, 0x00, 0x08, 0x00, 0x30, 0x00, 0x0B, 0x00, 0x3F, 0x00, 0x1A, 0x00, 0x4F, -/* 0000EFA0 */ 0x00, 0x28, 0x00, 0x74, 0x00, 0x28, 0x00, 0x4A, 0x00, 0x01, 0x00, 0x24, 0x00, 0x17, 0x00, 0x2E, -/* 0000EFB0 */ 0x00, 0x37, 0x00, 0x5F, 0x00, 0x30, 0x00, 0x76, 0x00, 0x2A, 0x00, 0x7D, 0x00, 0x05, 0x00, 0x2A, -/* 0000EFC0 */ 0x00, 0x05, 0x00, 0x31, 0x00, 0x30, 0x00, 0x69, 0x00, 0x08, 0x00, 0x33, 0x00, 0x2A, 0x00, 0x78, -/* 0000EFD0 */ 0x00, 0x27, 0x00, 0x7B, 0x00, 0x30, 0x00, 0xC6, 0x00, 0x04, 0x00, 0x38, 0x00, 0x08, 0x00, 0x43, -/* 0000EFE0 */ 0x00, 0x04, 0x00, 0x2F, 0x00, 0x0A, 0x00, 0x32, 0x00, 0x04, 0x00, 0x47, 0x00, 0x0A, 0x00, 0x39, -/* 0000EFF0 */ 0x00, 0x04, 0x00, 0x46, 0x00, 0x10, 0x00, 0x5F, 0x00, 0x08, 0x00, 0x3C, 0x00, 0x13, 0x00, 0x65, -/* 0000F000 */ 0x00, 0x08, 0x00, 0x3A, 0x00, 0x13, 0x00, 0x63, 0x00, 0x08, 0x00, 0x3A, 0x00, 0x10, 0x00, 0x81, -/* 0000F010 */ 0x00, 0x04, 0x00, 0x4C, 0x00, 0x04, 0x00, 0x4E, 0x00, 0x04, 0x00, 0x4F, 0x00, 0x0A, 0x00, 0x42, -/* 0000F020 */ 0x00, 0x04, 0x00, 0x58, 0x00, 0x04, 0x00, 0x67, 0x00, 0x04, 0x00, 0x40, 0x00, 0x07, 0x00, 0xA9, -/* 0000F030 */ 0x00, 0x25, 0x00, 0x3C, 0x00, 0x01, 0x00, 0x20, 0x00, 0x17, 0x00, 0x6B, 0x01, 0x1B, 0x00, 0x4A, -/* 0000F040 */ 0x00, 0x08, 0x00, 0x3B, 0x00, 0x04, 0x00, 0x70, 0x00, 0x2D, 0x00, 0x7E, 0x00, 0x06, 0x00, 0x3B, -/* 0000F050 */ 0x00, 0x00, 0x3F, 0x5C, 0x08, 0xC1, 0x53, 0xA8, 0x25, 0x01, 0xFE, 0xEA, 0x0A, 0x14, 0xA0, 0x41, -/* 0000F060 */ 0xD1, 0x00, 0xA7, 0xFF, 0x1F, 0xE9, 0x01, 0x00, 0x06, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, -/* 0000F070 */ 0xFF, 0x1F, 0xE9, 0x01, 0x00, 0xFE, 0x9F, 0x30, 0xFE, 0x9F, 0x30, 0x0B, 0x16, 0x1A, 0x09, 0x9B, -/* 0000F080 */ 0x9B, 0x02, 0x0C, 0x0A, 0x08, 0x08, 0x08, 0x08, 0x05, 0x02, 0x19, 0x1A, 0x08, 0x06, 0xFE, 0x3D, -/* 0000F090 */ 0x03, 0x06, 0xFE, 0x07, 0x04, 0x05, 0xFE, 0x08, 0x04, 0x05, 0xFE, 0x09, 0x04, 0x05, 0xFE, 0x0A, -/* 0000F0A0 */ 0x04, 0x06, 0xFE, 0x4C, 0x03, 0x06, 0xFE, 0x40, 0x03, 0x06, 0xFE, 0x42, 0x03, 0x0B, 0x06, 0xFE, -/* 0000F0B0 */ 0x44, 0x03, 0x07, 0x06, 0xFE, 0x0B, 0x04, 0x0C, 0x06, 0xFE, 0x43, 0x03, 0x06, 0xFE, 0x0C, 0x04, -/* 0000F0C0 */ 0x06, 0xFE, 0x0D, 0x04, 0x06, 0xFE, 0x0F, 0x04, 0x06, 0xFE, 0x8D, 0x03, 0x05, 0xFE, 0x0E, 0x04, -/* 0000F0D0 */ 0xFE, 0xED, 0x02, 0xA6, 0x16, 0xA6, 0x17, 0xA6, 0x18, 0x8D, 0x02, 0x32, 0x1C, 0x00, 0x00, 0x14, -/* 0000F0E0 */ 0x0E, 0x00, 0x1C, 0x03, 0x8D, 0x02, 0x32, 0x1C, 0x00, 0x00, 0x14, 0x03, 0x00, 0x1C, 0x04, 0x09, -/* 0000F0F0 */ 0xC5, 0x02, 0xDE, 0x00, 0x03, 0x01, 0xB6, 0x1C, 0x00, 0x01, 0x53, 0x01, 0x00, 0x16, 0x1C, 0x93, -/* 0000F100 */ 0x00, 0x02, 0x16, 0x8D, 0x02, 0x03, 0x1D, 0x01, 0x00, 0x6B, 0x1C, 0x1D, 0x00, 0x07, 0x03, 0x00, -/* 0000F110 */ 0x5A, 0x00, 0x1D, 0x8D, 0x02, 0x23, 0x1E, 0x02, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5B, -/* 0000F120 */ 0x01, 0x05, 0x01, 0x00, 0xB6, 0x20, 0x00, 0x01, 0x53, 0x01, 0x01, 0x1F, 0x20, 0x5B, 0x02, 0x1F, -/* 0000F130 */ 0x01, 0x00, 0xEE, 0x03, 0x1E, 0x1E, 0x01, 0x00, 0x5B, 0x01, 0x1E, 0x00, 0x00, 0x8D, 0x02, 0x36, -/* 0000F140 */ 0x1E, 0x03, 0x00, 0x4B, 0x1E, 0x60, 0x1E, 0x1E, 0x01, 0x5B, 0x02, 0x1E, 0x00, 0x00, 0xF2, 0x03, -/* 0000F150 */ 0xFF, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8D, 0x02, 0x32, 0x1C, 0x00, 0x00, 0x14, 0x03, -/* 0000F160 */ 0x00, 0x1C, 0x03, 0x09, 0x51, 0x02, 0xDE, 0x01, 0x04, 0x02, 0xB6, 0x1C, 0x00, 0xB5, 0x01, 0x00, -/* 0000F170 */ 0x00, 0x00, 0x1C, 0x1C, 0x01, 0x53, 0x01, 0x02, 0x17, 0x1C, 0x93, 0x01, 0x02, 0x17, 0x01, 0x53, -/* 0000F180 */ 0x01, 0x03, 0x18, 0x1C, 0x93, 0x01, 0x03, 0x18, 0x8D, 0x02, 0x23, 0x1C, 0x02, 0x00, 0x07, 0x03, -/* 0000F190 */ 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x06, 0x02, 0x00, 0x8F, 0x01, 0x02, 0x1D, 0x04, 0x00, 0x5B, -/* 0000F1A0 */ 0x02, 0x1D, 0x02, 0x00, 0xEE, 0x03, 0xFF, 0x1C, 0x02, 0x00, 0x8D, 0x02, 0x23, 0x1C, 0x02, 0x00, -/* 0000F1B0 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x07, 0x03, 0x00, 0x8F, 0x01, 0x03, 0x1D, 0x05, -/* 0000F1C0 */ 0x00, 0x5B, 0x02, 0x1D, 0x03, 0x00, 0xEE, 0x03, 0xFF, 0x1C, 0x03, 0x00, 0x8D, 0x02, 0x15, 0x1C, -/* 0000F1D0 */ 0x06, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8F, 0x01, 0x02, 0x1D, 0x04, 0x00, 0x5B, 0x01, -/* 0000F1E0 */ 0x1D, 0x04, 0x00, 0x5B, 0x02, 0x08, 0x04, 0x00, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 0000F1F0 */ 0x00, 0x1D, 0x00, 0x00, 0x00, 0x8D, 0x01, 0x13, 0x1E, 0x07, 0x00, 0x4B, 0x1E, 0x79, 0x1E, 0x1D, -/* 0000F200 */ 0x02, 0x79, 0x0B, 0x1D, 0x03, 0x79, 0x0B, 0x1D, 0x04, 0x5B, 0x03, 0x1D, 0x04, 0x00, 0xEE, 0x04, -/* 0000F210 */ 0xFF, 0x1C, 0x04, 0x00, 0x8D, 0x02, 0x15, 0x1C, 0x06, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, -/* 0000F220 */ 0x8F, 0x01, 0x02, 0x1D, 0x04, 0x00, 0x5B, 0x01, 0x1D, 0x05, 0x00, 0x5B, 0x02, 0x0E, 0x05, 0x00, -/* 0000F230 */ 0xCB, 0x14, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0x8F, 0x01, 0x02, -/* 0000F240 */ 0x1E, 0x04, 0x00, 0x07, 0x01, 0x00, 0xC2, 0x01, 0x1E, 0x1E, 0x06, 0x00, 0x79, 0x1E, 0x1D, 0x02, -/* 0000F250 */ 0x79, 0x0F, 0x1D, 0x03, 0x79, 0x0F, 0x1D, 0x05, 0x79, 0x0F, 0x1D, 0x04, 0x5B, 0x03, 0x1D, 0x05, -/* 0000F260 */ 0x00, 0xEE, 0x04, 0xFF, 0x1C, 0x05, 0x00, 0x8D, 0x02, 0x04, 0x1C, 0x08, 0x00, 0x07, 0x03, 0x00, -/* 0000F270 */ 0x5A, 0x00, 0x02, 0x8F, 0x01, 0x02, 0x1D, 0x04, 0x00, 0x60, 0x1D, 0x1D, 0x06, 0x5B, 0x01, 0x1D, -/* 0000F280 */ 0x07, 0x00, 0x8D, 0x02, 0x08, 0x1D, 0x09, 0x00, 0x60, 0x1D, 0x1D, 0x06, 0x5B, 0x02, 0x1D, 0x07, -/* 0000F290 */ 0x00, 0xEE, 0x03, 0xFF, 0x1C, 0x07, 0x00, 0x8D, 0x02, 0x15, 0x1C, 0x06, 0x00, 0x07, 0x04, 0x00, -/* 0000F2A0 */ 0x5A, 0x00, 0x02, 0x8F, 0x01, 0x02, 0x1D, 0x04, 0x00, 0x60, 0x1D, 0x1D, 0x06, 0x5B, 0x01, 0x1D, -/* 0000F2B0 */ 0x08, 0x00, 0x5B, 0x02, 0x11, 0x08, 0x00, 0xCB, 0x2C, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, -/* 0000F2C0 */ 0x1D, 0x00, 0x00, 0x00, 0x8F, 0x01, 0x02, 0x1E, 0x04, 0x00, 0x79, 0x1E, 0x1D, 0x02, 0x79, 0x0B, -/* 0000F2D0 */ 0x1D, 0x03, 0x79, 0x0F, 0x1D, 0x05, 0x79, 0x0B, 0x1D, 0x04, 0x5B, 0x03, 0x1D, 0x08, 0x00, 0xEE, -/* 0000F2E0 */ 0x04, 0xFF, 0x1C, 0x08, 0x00, 0x8D, 0x02, 0x15, 0x1C, 0x06, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, -/* 0000F2F0 */ 0x02, 0x8F, 0x01, 0x02, 0x1D, 0x04, 0x00, 0x60, 0x1D, 0x1D, 0x06, 0x5B, 0x01, 0x1D, 0x09, 0x00, -/* 0000F300 */ 0x5B, 0x02, 0x12, 0x09, 0x00, 0xCB, 0x44, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1D, 0x00, -/* 0000F310 */ 0x00, 0x00, 0xB6, 0x1F, 0x00, 0xB5, 0x01, 0x00, 0x00, 0x00, 0x1F, 0x1F, 0x01, 0x57, 0x01, 0x04, -/* 0000F320 */ 0x1E, 0x1F, 0x1D, 0x79, 0x1E, 0x1D, 0x02, 0x79, 0x0B, 0x1D, 0x03, 0x79, 0x0F, 0x1D, 0x05, 0x79, -/* 0000F330 */ 0x0B, 0x1D, 0x04, 0x5B, 0x03, 0x1D, 0x09, 0x00, 0xEE, 0x04, 0xFF, 0x1C, 0x09, 0x00, 0x8D, 0x02, -/* 0000F340 */ 0x15, 0x1C, 0x06, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8F, 0x01, 0x02, 0x1D, 0x04, 0x00, -/* 0000F350 */ 0x60, 0x1D, 0x1D, 0x06, 0x5B, 0x01, 0x1D, 0x0A, 0x00, 0x5B, 0x02, 0x13, 0x0A, 0x00, 0xCB, 0x5C, -/* 0000F360 */ 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0x8D, 0x02, 0x23, 0x1E, 0x02, -/* 0000F370 */ 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x15, 0x0B, 0x00, 0xB6, 0x20, 0x00, 0xB5, -/* 0000F380 */ 0x01, 0x00, 0x00, 0x00, 0x20, 0x20, 0x01, 0x53, 0x01, 0x05, 0x1F, 0x20, 0x5B, 0x02, 0x1F, 0x0B, -/* 0000F390 */ 0x00, 0xEE, 0x03, 0x1E, 0x1E, 0x0B, 0x00, 0x79, 0x1E, 0x1D, 0x07, 0x79, 0x0F, 0x1D, 0x05, 0x79, -/* 0000F3A0 */ 0x0B, 0x1D, 0x04, 0x5B, 0x03, 0x1D, 0x0A, 0x00, 0xEE, 0x04, 0xFF, 0x1C, 0x0A, 0x00, 0x8F, 0x01, -/* 0000F3B0 */ 0x02, 0x00, 0x04, 0x00, 0x09, 0x07, 0x00, 0xA6, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, -/* 0000F3C0 */ 0x05, 0x70, 0x00, 0x5C, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, -/* 0000F3D0 */ 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x03, -/* 0000F3E0 */ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, -/* 0000F3F0 */ 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x2C, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, -/* 0000F400 */ 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, -/* 0000F410 */ 0x01, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, -/* 0000F420 */ 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x00, -/* 0000F430 */ 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, -/* 0000F440 */ 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0xFE, 0xEE, 0x01, 0xFE, 0x07, 0x03, 0xFE, 0x83, 0x01, -/* 0000F450 */ 0xFE, 0x82, 0x01, 0xFE, 0x81, 0x01, 0xFE, 0x80, 0x01, 0xFE, 0x15, 0x01, 0xFE, 0x84, 0x01, 0x02, -/* 0000F460 */ 0x01, 0x01, 0x00, 0xFE, 0x05, 0x04, 0x02, 0x02, 0x00, 0xFE, 0x1A, 0x02, 0x01, 0xFE, 0x1E, 0x02, -/* 0000F470 */ 0xFF, 0x36, 0xE9, 0x01, 0x00, 0x0E, 0x06, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x1F, 0x17, 0x55, 0x00, -/* 0000F480 */ 0x10, 0x05, 0x30, 0x00, 0x7A, 0x04, 0x22, 0x00, 0x53, 0x04, 0x22, 0x00, 0x50, 0x00, 0x48, 0x00, -/* 0000F490 */ 0x93, 0x00, 0x53, 0x00, 0x91, 0x00, 0x30, 0x00, 0x45, 0x00, 0x4E, 0x00, 0x96, 0x00, 0x59, 0x00, -/* 0000F4A0 */ 0xA7, 0x05, 0x70, 0x00, 0x03, 0x03, 0x09, 0x00, 0x7C, 0x00, 0x07, 0x00, 0x16, 0x00, 0x00, 0xF6, -/* 0000F4B0 */ 0xFD, 0x00, 0x00, 0xC2, 0xFB, 0x00, 0x00, 0x96, 0xF9, 0x00, 0x00, 0x8E, 0xF7, 0x00, 0x00, 0xCE, -/* 0000F4C0 */ 0xF5, 0x00, 0x00, 0xC7, 0xF4, 0x00, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, -/* 0000F4D0 */ 0xC7, 0x0B, 0x3A, 0xA0, 0x41, 0xD1, 0x00, 0xAE, 0xFF, 0x98, 0x16, 0x02, 0x00, 0xFF, 0x00, 0x10, -/* 0000F4E0 */ 0x01, 0x00, 0x01, 0x01, 0xFF, 0x98, 0x16, 0x02, 0x00, 0xFE, 0x45, 0x02, 0xFE, 0x45, 0x02, 0x01, -/* 0000F4F0 */ 0x05, 0x05, 0x08, 0x04, 0x23, 0x22, 0x04, 0x03, 0x01, 0x04, 0x04, 0x04, 0x04, 0x07, 0x06, 0xFE, -/* 0000F500 */ 0xF6, 0x03, 0x05, 0xFE, 0x1C, 0x04, 0x06, 0xFE, 0x45, 0x03, 0x94, 0x59, 0x08, 0xB2, 0x05, 0x08, -/* 0000F510 */ 0x2C, 0x08, 0x05, 0x15, 0x03, 0x00, 0x08, 0x02, 0x09, 0x24, 0x00, 0x8D, 0x04, 0x03, 0x09, 0x00, -/* 0000F520 */ 0x00, 0x6B, 0x08, 0x09, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x09, 0x5B, 0x01, 0x03, 0x00, 0x00, -/* 0000F530 */ 0x5B, 0x02, 0x04, 0x00, 0x00, 0xF2, 0x03, 0xFF, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8D, -/* 0000F540 */ 0x04, 0x03, 0x09, 0x00, 0x00, 0x6B, 0x08, 0x09, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x09, 0x5B, -/* 0000F550 */ 0x01, 0x05, 0x01, 0x00, 0xF2, 0x02, 0x08, 0x08, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x06, -/* 0000F560 */ 0x08, 0xA6, 0x08, 0x14, 0x08, 0x00, 0x06, 0x08, 0x60, 0x08, 0x06, 0x02, 0x0F, 0x24, 0x00, 0x08, -/* 0000F570 */ 0x8D, 0x04, 0x03, 0x09, 0x00, 0x00, 0x6B, 0x08, 0x09, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x09, -/* 0000F580 */ 0x5B, 0x01, 0x03, 0x02, 0x00, 0x5B, 0x02, 0x04, 0x02, 0x00, 0xF2, 0x03, 0xFF, 0x08, 0x00, 0x00, -/* 0000F590 */ 0x00, 0x00, 0x02, 0x00, 0x60, 0x00, 0x06, 0x03, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, -/* 0000F5A0 */ 0x8A, 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0x1D, 0x02, 0xFE, 0x1B, 0x02, 0xFF, 0xBE, 0x16, 0x02, 0x00, -/* 0000F5B0 */ 0x07, 0x05, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3C, 0x00, 0x24, 0x00, 0x7D, 0x00, 0x22, 0x00, 0x4B, -/* 0000F5C0 */ 0x00, 0x0F, 0x00, 0x65, 0x00, 0x24, 0x00, 0x7D, 0x00, 0x09, 0x00, 0x38, 0x00, 0x00, 0xBF, 0x5C, -/* 0000F5D0 */ 0x08, 0xC1, 0x13, 0x88, 0x23, 0x00, 0xFE, 0xB1, 0x0B, 0x1B, 0xA0, 0x41, 0xC3, 0x00, 0xFE, 0x0D, -/* 0000F5E0 */ 0x04, 0xAD, 0xFF, 0x00, 0x00, 0x00, 0x02, 0xFF, 0xDA, 0x10, 0x02, 0x00, 0xFF, 0x00, 0x10, 0x01, -/* 0000F5F0 */ 0x00, 0x01, 0x01, 0xFF, 0xDA, 0x10, 0x02, 0x00, 0xFE, 0xF1, 0x04, 0xFE, 0xF1, 0x04, 0x01, 0x05, -/* 0000F600 */ 0x0D, 0x10, 0x04, 0x31, 0x30, 0x04, 0x03, 0x01, 0x11, 0x11, 0x11, 0x11, 0x01, 0x0F, 0x06, 0xFE, -/* 0000F610 */ 0xF6, 0x03, 0x05, 0xFE, 0x1D, 0x04, 0x06, 0xFE, 0x45, 0x03, 0x06, 0xFE, 0xF7, 0x03, 0x06, 0xFE, -/* 0000F620 */ 0x10, 0x04, 0x06, 0xFE, 0x16, 0x04, 0x06, 0xFE, 0x17, 0x04, 0x06, 0xFE, 0x19, 0x04, 0x06, 0xFE, -/* 0000F630 */ 0x13, 0x04, 0x06, 0xFE, 0x14, 0x04, 0x07, 0xD5, 0x59, 0x10, 0xB2, 0x0D, 0x10, 0x2C, 0x10, 0x0D, -/* 0000F640 */ 0x15, 0x03, 0x00, 0x10, 0x02, 0x09, 0x24, 0x00, 0x8D, 0x04, 0x03, 0x11, 0x00, 0x00, 0x6B, 0x10, -/* 0000F650 */ 0x11, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x11, 0x5B, 0x01, 0x03, 0x00, 0x00, 0x5B, 0x02, 0x04, -/* 0000F660 */ 0x00, 0x00, 0xF2, 0x03, 0xFF, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8D, 0x04, 0x03, 0x11, -/* 0000F670 */ 0x00, 0x00, 0x6B, 0x10, 0x11, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x11, 0x5B, 0x01, 0x0D, 0x01, -/* 0000F680 */ 0x00, 0xF2, 0x02, 0x10, 0x10, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x0E, 0x10, 0xA6, 0x10, -/* 0000F690 */ 0x14, 0x08, 0x00, 0x0E, 0x10, 0x60, 0x10, 0x0E, 0x02, 0x0F, 0x24, 0x00, 0x10, 0x8D, 0x04, 0x03, -/* 0000F6A0 */ 0x11, 0x00, 0x00, 0x6B, 0x10, 0x11, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x11, 0x5B, 0x01, 0x03, -/* 0000F6B0 */ 0x02, 0x00, 0x5B, 0x02, 0x04, 0x02, 0x00, 0xF2, 0x03, 0xFF, 0x10, 0x00, 0x00, 0x00, 0x00, 0x02, -/* 0000F6C0 */ 0x00, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x10, -/* 0000F6D0 */ 0x0E, 0x03, 0x79, 0x10, 0x00, 0x04, 0x60, 0x10, 0x0E, 0x05, 0x79, 0x10, 0x00, 0x06, 0x60, 0x10, -/* 0000F6E0 */ 0x0E, 0x07, 0x79, 0x10, 0x00, 0x08, 0x60, 0x10, 0x0E, 0x09, 0x79, 0x10, 0x00, 0x0A, 0x60, 0x10, -/* 0000F6F0 */ 0x0E, 0x0B, 0x79, 0x10, 0x00, 0x0C, 0x60, 0x10, 0x0E, 0x0D, 0x79, 0x10, 0x00, 0x0E, 0x60, 0x10, -/* 0000F700 */ 0x0E, 0x0F, 0x79, 0x10, 0x00, 0x10, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x01, 0x24, 0x00, -/* 0000F710 */ 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0x01, 0x00, 0x00, -/* 0000F720 */ 0x10, 0x04, 0x00, 0x00, 0x21, 0x02, 0x00, 0x00, 0x1F, 0x02, 0x00, 0x00, 0x19, 0x04, 0x00, 0x00, -/* 0000F730 */ 0x20, 0x02, 0x00, 0x00, 0x14, 0x04, 0x00, 0x00, 0xFE, 0x8A, 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0x1D, -/* 0000F740 */ 0x02, 0xFE, 0xF3, 0x01, 0xFE, 0xF7, 0x01, 0xFE, 0xCC, 0x04, 0xFE, 0x10, 0x04, 0xFE, 0xCD, 0x04, -/* 0000F750 */ 0xFE, 0x21, 0x02, 0xFE, 0xCE, 0x04, 0xFE, 0x1F, 0x02, 0xFE, 0x1C, 0x02, 0xFE, 0x19, 0x04, 0xFE, -/* 0000F760 */ 0xD0, 0x04, 0xFE, 0x20, 0x02, 0xFE, 0xCF, 0x04, 0xFE, 0x14, 0x04, 0xFF, 0x0F, 0x11, 0x02, 0x00, -/* 0000F770 */ 0x07, 0x05, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3C, 0x00, 0x24, 0x00, 0x84, 0x00, 0x22, 0x00, 0x4B, -/* 0000F780 */ 0x00, 0x0F, 0x00, 0x65, 0x00, 0x24, 0x00, 0x85, 0x00, 0x4A, 0x00, 0xC6, 0x02, 0x00, 0xBF, 0x5C, -/* 0000F790 */ 0x08, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x90, 0x0B, 0x10, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x0F, -/* 0000F7A0 */ 0x04, 0xAC, 0xFF, 0x1E, 0x0A, 0x02, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFF, 0x1E, -/* 0000F7B0 */ 0x0A, 0x02, 0x00, 0xFE, 0x03, 0x04, 0xFE, 0x03, 0x04, 0x01, 0x0A, 0x06, 0x0B, 0x10, 0x56, 0x53, -/* 0000F7C0 */ 0x04, 0x09, 0x06, 0x09, 0x09, 0x09, 0x09, 0x0A, 0x06, 0xFE, 0xF6, 0x03, 0x05, 0xFE, 0x1C, 0x04, -/* 0000F7D0 */ 0x06, 0xFE, 0x45, 0x03, 0x08, 0xFE, 0x78, 0x01, 0x59, 0x0B, 0xB2, 0x08, 0x0B, 0x2C, 0x0B, 0x08, -/* 0000F7E0 */ 0x15, 0x03, 0x00, 0x0B, 0x02, 0x09, 0x24, 0x00, 0x8D, 0x04, 0x03, 0x0C, 0x00, 0x00, 0x6B, 0x0B, -/* 0000F7F0 */ 0x0C, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x03, 0x00, 0x00, 0x5B, 0x02, 0x04, -/* 0000F800 */ 0x00, 0x00, 0xF2, 0x03, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8D, 0x04, 0x03, 0x0C, -/* 0000F810 */ 0x00, 0x00, 0x6B, 0x0B, 0x0C, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x08, 0x01, -/* 0000F820 */ 0x00, 0xF2, 0x02, 0x0B, 0x0B, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x09, 0x0B, 0xA6, 0x0B, -/* 0000F830 */ 0x14, 0x08, 0x00, 0x09, 0x0B, 0x60, 0x0B, 0x09, 0x02, 0x0F, 0x24, 0x00, 0x0B, 0x8D, 0x04, 0x03, -/* 0000F840 */ 0x0C, 0x00, 0x00, 0x6B, 0x0B, 0x0C, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x03, -/* 0000F850 */ 0x02, 0x00, 0x5B, 0x02, 0x04, 0x02, 0x00, 0xF2, 0x03, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x02, -/* 0000F860 */ 0x00, 0x8D, 0x04, 0x0B, 0x0B, 0x01, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x05, 0x5B, 0x01, 0x06, -/* 0000F870 */ 0x03, 0x00, 0xEE, 0x02, 0x0B, 0x0B, 0x03, 0x00, 0x47, 0x06, 0x0B, 0x8D, 0x04, 0x0B, 0x0B, 0x01, -/* 0000F880 */ 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x05, 0x5B, 0x01, 0x07, 0x04, 0x00, 0xEE, 0x02, 0x0B, 0x0B, -/* 0000F890 */ 0x04, 0x00, 0x47, 0x07, 0x0B, 0x8D, 0x04, 0x0A, 0x0B, 0x02, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 0000F8A0 */ 0x05, 0x8D, 0x04, 0x03, 0x0D, 0x00, 0x00, 0x6B, 0x0C, 0x0D, 0x03, 0x07, 0x08, 0x00, 0x5A, 0x00, -/* 0000F8B0 */ 0x0D, 0x5B, 0x01, 0x06, 0x06, 0x00, 0x5B, 0x02, 0x07, 0x06, 0x00, 0x60, 0x0E, 0x09, 0x04, 0x5B, -/* 0000F8C0 */ 0x03, 0x0E, 0x06, 0x00, 0x8D, 0x04, 0x3D, 0x0E, 0x03, 0x00, 0x4B, 0x0E, 0x07, 0x03, 0x00, 0x5A, -/* 0000F8D0 */ 0x00, 0x05, 0x8D, 0x04, 0x39, 0x0F, 0x04, 0x00, 0x4B, 0x0F, 0x5B, 0x01, 0x0F, 0x07, 0x00, 0x60, -/* 0000F8E0 */ 0x0F, 0x09, 0x05, 0x5B, 0x02, 0x0F, 0x07, 0x00, 0xEE, 0x03, 0x0E, 0x0E, 0x07, 0x00, 0x5B, 0x04, -/* 0000F8F0 */ 0x0E, 0x06, 0x00, 0x60, 0x0E, 0x09, 0x06, 0x5B, 0x05, 0x0E, 0x06, 0x00, 0x60, 0x0E, 0x09, 0x07, -/* 0000F900 */ 0x5B, 0x06, 0x0E, 0x06, 0x00, 0x8D, 0x04, 0x3D, 0x0E, 0x03, 0x00, 0x4B, 0x0E, 0x07, 0x03, 0x00, -/* 0000F910 */ 0x5A, 0x00, 0x05, 0x8D, 0x04, 0x3A, 0x0F, 0x05, 0x00, 0x4B, 0x0F, 0x5B, 0x01, 0x0F, 0x08, 0x00, -/* 0000F920 */ 0x60, 0x0F, 0x09, 0x08, 0x5B, 0x02, 0x0F, 0x08, 0x00, 0xEE, 0x03, 0x0E, 0x0E, 0x08, 0x00, 0x5B, -/* 0000F930 */ 0x07, 0x0E, 0x06, 0x00, 0xF2, 0x08, 0x0C, 0x0C, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x5B, 0x01, -/* 0000F940 */ 0x0C, 0x05, 0x00, 0xEE, 0x02, 0x00, 0x0B, 0x05, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, -/* 0000F950 */ 0xFE, 0x8A, 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0x1D, 0x02, 0xFE, 0xE1, 0x01, 0xFE, 0xCB, 0x04, 0xFE, -/* 0000F960 */ 0xCD, 0x04, 0xFE, 0xCE, 0x04, 0xFE, 0xD0, 0x04, 0xFE, 0xCF, 0x04, 0xFF, 0x4B, 0x0A, 0x02, 0x00, -/* 0000F970 */ 0x09, 0x05, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x38, 0x00, 0x24, 0x00, 0x75, 0x00, 0x22, 0x00, 0x47, -/* 0000F980 */ 0x00, 0x0F, 0x00, 0x61, 0x00, 0x24, 0x00, 0x75, 0x00, 0x1A, 0x00, 0x23, 0x00, 0x1A, 0x00, 0x24, -/* 0000F990 */ 0x00, 0xB9, 0x00, 0xC4, 0x01, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x75, -/* 0000F9A0 */ 0x0B, 0x10, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x45, 0x03, 0xAB, 0xFF, 0x91, 0x05, 0x02, 0x00, 0xFF, -/* 0000F9B0 */ 0x00, 0x10, 0x01, 0x00, 0x03, 0x01, 0xFF, 0x91, 0x05, 0x02, 0x00, 0xFE, 0x3D, 0x04, 0xFE, 0x3D, -/* 0000F9C0 */ 0x04, 0x01, 0x09, 0x05, 0x0B, 0x05, 0x60, 0x59, 0x04, 0x09, 0x09, 0x07, 0x06, 0x07, 0x07, 0x0A, -/* 0000F9D0 */ 0x08, 0x06, 0xFE, 0x45, 0x03, 0x07, 0xFE, 0x8F, 0x01, 0x59, 0x0B, 0xB2, 0x07, 0x0B, 0x4F, 0x08, -/* 0000F9E0 */ 0x4F, 0x09, 0x15, 0x05, 0x00, 0x05, 0x02, 0xA6, 0x0B, 0x47, 0x05, 0x0B, 0x15, 0x05, 0x00, 0x06, -/* 0000F9F0 */ 0x02, 0xA6, 0x0B, 0x47, 0x06, 0x0B, 0x4F, 0x08, 0x4F, 0x09, 0x69, 0x06, 0x00, 0x00, 0x00, 0x0B, -/* 0000FA00 */ 0x14, 0x0A, 0x00, 0x07, 0x0B, 0xA6, 0x0B, 0x14, 0x03, 0x00, 0x07, 0x0B, 0x09, 0x1E, 0x00, 0x8D, -/* 0000FA10 */ 0x01, 0x02, 0x0B, 0x00, 0x00, 0x4B, 0x0B, 0x07, 0x03, 0x00, 0x5B, 0x01, 0x05, 0x00, 0x00, 0x5B, -/* 0000FA20 */ 0x02, 0x06, 0x00, 0x00, 0xC2, 0x03, 0x00, 0x0B, 0x00, 0x00, 0x09, 0x39, 0x01, 0x8D, 0x04, 0x24, -/* 0000FA30 */ 0x0C, 0x01, 0x00, 0x6B, 0x0B, 0x0C, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x07, -/* 0000FA40 */ 0x01, 0x00, 0xF2, 0x02, 0x0B, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x08, 0x0B, 0x8D, -/* 0000FA50 */ 0x04, 0x11, 0x0B, 0x02, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x08, 0x02, 0x00, -/* 0000FA60 */ 0xEE, 0x02, 0x0B, 0x0B, 0x02, 0x00, 0x0F, 0x1F, 0x00, 0x0B, 0x8D, 0x04, 0x03, 0x0C, 0x03, 0x00, -/* 0000FA70 */ 0x6B, 0x0B, 0x0C, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x03, 0x03, 0x00, 0xF2, -/* 0000FA80 */ 0x02, 0xFF, 0x0B, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x8D, 0x04, 0x03, 0x0C, 0x03, 0x00, 0x6B, -/* 0000FA90 */ 0x0B, 0x0C, 0x02, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x08, 0x04, 0x00, 0xF2, 0x02, -/* 0000FAA0 */ 0x0B, 0x0B, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x47, 0x09, 0x0B, 0xA6, 0x0B, 0x14, 0x03, 0x00, -/* 0000FAB0 */ 0x09, 0x0B, 0x09, 0x45, 0x00, 0x8D, 0x04, 0x04, 0x0B, 0x04, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, -/* 0000FAC0 */ 0x02, 0xCA, 0x0C, 0x5B, 0x01, 0x0C, 0x05, 0x00, 0x5B, 0x02, 0x04, 0x05, 0x00, 0xEE, 0x03, 0x0B, -/* 0000FAD0 */ 0x0B, 0x05, 0x00, 0x47, 0x09, 0x0B, 0x8D, 0x04, 0x03, 0x0C, 0x03, 0x00, 0x6B, 0x0B, 0x0C, 0x03, -/* 0000FAE0 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x08, 0x06, 0x00, 0x5B, 0x02, 0x09, 0x06, 0x00, -/* 0000FAF0 */ 0xF2, 0x03, 0xFF, 0x0B, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x8D, 0x02, 0x02, 0x0B, 0x05, 0x00, -/* 0000FB00 */ 0x4B, 0x0B, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x09, 0x07, 0x00, 0x5B, 0x02, 0x05, -/* 0000FB10 */ 0x07, 0x00, 0x5B, 0x03, 0x06, 0x07, 0x00, 0xEE, 0x04, 0xFF, 0x0B, 0x07, 0x00, 0x47, 0x0B, 0x09, -/* 0000FB20 */ 0x8D, 0x04, 0x06, 0x0C, 0x06, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8D, 0x04, 0x1A, 0x0D, -/* 0000FB30 */ 0x07, 0x00, 0x5B, 0x01, 0x0D, 0x08, 0x00, 0x8D, 0x01, 0x03, 0x0D, 0x08, 0x00, 0x4B, 0x0D, 0x5B, -/* 0000FB40 */ 0x02, 0x0D, 0x08, 0x00, 0x5B, 0x03, 0x08, 0x08, 0x00, 0xEE, 0x04, 0x0C, 0x0C, 0x08, 0x00, 0x75, -/* 0000FB50 */ 0x0C, 0x0B, 0x04, 0x60, 0x0B, 0x09, 0x05, 0x80, 0x0B, 0x0B, 0xF8, 0x00, 0xFA, 0x0B, 0x47, 0x00, -/* 0000FB60 */ 0x08, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x36, 0x03, 0xFE, 0x8E, 0x02, 0xFE, 0xEF, -/* 0000FB70 */ 0x01, 0xFE, 0xF0, 0x01, 0xFE, 0x1B, 0x02, 0xFE, 0x1B, 0x02, 0xAB, 0xFF, 0xA3, 0x05, 0x02, 0x00, -/* 0000FB80 */ 0x10, 0x09, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0E, 0x00, 0x2B, 0x00, 0x15, 0x00, 0x43, -/* 0000FB90 */ 0x00, 0x1E, 0x00, 0x52, 0x00, 0x22, 0x00, 0x37, 0x00, 0x1B, 0x00, 0x38, 0x00, 0x1F, 0x00, 0x97, -/* 0000FBA0 */ 0x00, 0x22, 0x00, 0x47, 0x00, 0x0A, 0x00, 0x3A, 0x00, 0x21, 0x00, 0x3F, 0x00, 0x24, 0x00, 0x58, -/* 0000FBB0 */ 0x00, 0x23, 0x00, 0x76, 0x00, 0x36, 0x00, 0x68, 0x00, 0x0B, 0x00, 0x3D, 0x00, 0x08, 0x00, 0x1C, -/* 0000FBC0 */ 0x00, 0x00, 0xBF, 0x5C, 0x0A, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x5B, 0x0B, 0x61, 0xA0, 0x41, -/* 0000FBD0 */ 0xF1, 0x00, 0xAA, 0xFF, 0xAA, 0x00, 0x02, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFF, -/* 0000FBE0 */ 0xAA, 0x00, 0x02, 0x00, 0xFE, 0x7F, 0x04, 0xFE, 0x7F, 0x04, 0x03, 0x0B, 0x08, 0x0E, 0x10, 0x61, -/* 0000FBF0 */ 0x5D, 0x03, 0x03, 0x0A, 0x08, 0x08, 0x08, 0x08, 0x08, 0x0D, 0x07, 0x01, 0x00, 0x05, 0xFE, 0x08, -/* 0000FC00 */ 0x04, 0x08, 0x01, 0x01, 0x01, 0x02, 0xFE, 0xA2, 0x01, 0xAC, 0x08, 0x59, 0x0E, 0xB2, 0x0A, 0x0E, -/* 0000FC10 */ 0x96, 0x0E, 0x08, 0x03, 0x00, 0x00, 0x47, 0x09, 0x0E, 0xA6, 0x0E, 0x14, 0x08, 0x00, 0x0A, 0x0E, -/* 0000FC20 */ 0x14, 0x03, 0x00, 0x0A, 0x02, 0x09, 0x22, 0x00, 0x8D, 0x03, 0x03, 0x0F, 0x00, 0x00, 0x6B, 0x0E, -/* 0000FC30 */ 0x0F, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0F, 0x5B, 0x01, 0x04, 0x00, 0x00, 0xF2, 0x02, 0xFF, -/* 0000FC40 */ 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x22, 0x00, 0x14, 0x03, 0x00, 0x09, 0x02, 0x09, -/* 0000FC50 */ 0x1A, 0x00, 0x8D, 0x03, 0x03, 0x0F, 0x00, 0x00, 0x6B, 0x0E, 0x0F, 0x01, 0x07, 0x01, 0x00, 0x5A, -/* 0000FC60 */ 0x00, 0x0F, 0xF2, 0x01, 0xFF, 0x0E, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x8D, 0x03, 0x0B, 0x0E, -/* 0000FC70 */ 0x01, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x05, 0x5B, 0x01, 0x0A, 0x02, 0x00, 0xEE, 0x02, 0x0E, -/* 0000FC80 */ 0x0E, 0x02, 0x00, 0x47, 0x0B, 0x0E, 0x8D, 0x03, 0x0B, 0x0E, 0x01, 0x00, 0x07, 0x02, 0x00, 0x5A, -/* 0000FC90 */ 0x00, 0x05, 0x5B, 0x01, 0x09, 0x03, 0x00, 0xEE, 0x02, 0x0E, 0x0E, 0x03, 0x00, 0x47, 0x09, 0x0E, -/* 0000FCA0 */ 0x8D, 0x03, 0x04, 0x0E, 0x02, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x05, 0xCA, 0x0F, 0x5B, 0x01, -/* 0000FCB0 */ 0x0F, 0x04, 0x00, 0x5B, 0x02, 0x02, 0x04, 0x00, 0xEE, 0x03, 0x0E, 0x0E, 0x04, 0x00, 0x47, 0x0C, -/* 0000FCC0 */ 0x0E, 0x8D, 0x01, 0x02, 0x0E, 0x03, 0x00, 0x4B, 0x0E, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x05, 0x5B, -/* 0000FCD0 */ 0x01, 0x0C, 0x05, 0x00, 0x96, 0x0F, 0x08, 0x06, 0x01, 0x00, 0x5B, 0x02, 0x0F, 0x05, 0x00, 0x96, -/* 0000FCE0 */ 0x0F, 0x08, 0x07, 0x02, 0x00, 0x5B, 0x03, 0x0F, 0x05, 0x00, 0xEE, 0x04, 0xFF, 0x0E, 0x05, 0x00, -/* 0000FCF0 */ 0x8D, 0x03, 0x0A, 0x0E, 0x04, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x05, 0x8D, 0x03, 0x03, 0x10, -/* 0000FD00 */ 0x00, 0x00, 0x6B, 0x0F, 0x10, 0x02, 0x07, 0x08, 0x00, 0x5A, 0x00, 0x10, 0x5B, 0x01, 0x0B, 0x07, -/* 0000FD10 */ 0x00, 0x5B, 0x02, 0x09, 0x07, 0x00, 0x60, 0x11, 0x0C, 0x03, 0x5B, 0x03, 0x11, 0x07, 0x00, 0x8D, -/* 0000FD20 */ 0x03, 0x3D, 0x11, 0x05, 0x00, 0x4B, 0x11, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x05, 0x8D, 0x03, 0x39, -/* 0000FD30 */ 0x12, 0x06, 0x00, 0x4B, 0x12, 0x5B, 0x01, 0x12, 0x08, 0x00, 0x60, 0x12, 0x0C, 0x04, 0x5B, 0x02, -/* 0000FD40 */ 0x12, 0x08, 0x00, 0xEE, 0x03, 0x11, 0x11, 0x08, 0x00, 0x5B, 0x04, 0x11, 0x07, 0x00, 0x60, 0x11, -/* 0000FD50 */ 0x0C, 0x05, 0x5B, 0x05, 0x11, 0x07, 0x00, 0x60, 0x11, 0x0C, 0x06, 0x5B, 0x06, 0x11, 0x07, 0x00, -/* 0000FD60 */ 0x8D, 0x03, 0x3D, 0x11, 0x05, 0x00, 0x4B, 0x11, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x05, 0x8D, 0x03, -/* 0000FD70 */ 0x3A, 0x12, 0x07, 0x00, 0x4B, 0x12, 0x5B, 0x01, 0x12, 0x09, 0x00, 0x60, 0x12, 0x0C, 0x07, 0x5B, -/* 0000FD80 */ 0x02, 0x12, 0x09, 0x00, 0xEE, 0x03, 0x11, 0x11, 0x09, 0x00, 0x5B, 0x07, 0x11, 0x07, 0x00, 0xF2, -/* 0000FD90 */ 0x08, 0x0F, 0x0F, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x5B, 0x01, 0x0F, 0x06, 0x00, 0xEE, 0x02, -/* 0000FDA0 */ 0x00, 0x0E, 0x06, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x91, 0x02, 0xFE, 0x89, -/* 0000FDB0 */ 0x02, 0xFE, 0xE1, 0x01, 0xFE, 0xCB, 0x04, 0xFE, 0xCD, 0x04, 0xFE, 0xCE, 0x04, 0xFE, 0xD0, 0x04, -/* 0000FDC0 */ 0xFE, 0xCF, 0x04, 0xFF, 0xC8, 0x00, 0x02, 0x00, 0x0B, 0x07, 0x00, 0x00, 0x00, 0x09, 0x00, 0x29, -/* 0000FDD0 */ 0x00, 0x0F, 0x00, 0x3F, 0x00, 0x22, 0x00, 0x6D, 0x00, 0x08, 0x00, 0x29, 0x00, 0x1A, 0x00, 0xE2, -/* 0000FDE0 */ 0x00, 0x1A, 0x00, 0x2C, 0x00, 0x1A, 0x00, 0x29, 0x00, 0x21, 0x00, 0x3A, 0x00, 0x2F, 0x00, 0x4D, -/* 0000FDF0 */ 0x00, 0xB9, 0x00, 0xA4, 0x01, 0x00, 0xBF, 0x5D, 0x1A, 0xC1, 0x43, 0xAD, 0x05, 0x00, 0xFE, 0xEE, -/* 0000FE00 */ 0x0A, 0x0C, 0xB3, 0x41, 0xC1, 0x00, 0xFE, 0x05, 0x04, 0xA8, 0xFF, 0x77, 0xE9, 0x01, 0x00, 0x01, -/* 0000FE10 */ 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFF, 0x77, 0xE9, 0x01, 0x00, 0xFE, 0xD0, 0x16, 0xFE, -/* 0000FE20 */ 0xD0, 0x16, 0x44, 0x03, 0xFE, 0x14, 0x04, 0xFE, 0x20, 0x02, 0xFE, 0x19, 0x04, 0x15, 0x24, 0x35, -/* 0000FE30 */ 0x09, 0xFE, 0x10, 0x01, 0xFE, 0xFF, 0x00, 0x03, 0x02, 0x12, 0x05, 0x10, 0x13, 0x13, 0x13, 0x13, -/* 0000FE40 */ 0x01, 0x32, 0x33, 0x34, 0x35, 0x06, 0xFE, 0xF6, 0x03, 0x06, 0xFE, 0xC8, 0x04, 0x08, 0x06, 0xFE, -/* 0000FE50 */ 0x45, 0x03, 0x0B, 0x06, 0xFE, 0xF5, 0x03, 0x07, 0x06, 0xFE, 0x00, 0x04, 0x06, 0xFE, 0xAD, 0x03, -/* 0000FE60 */ 0x05, 0xFE, 0xBC, 0x03, 0x05, 0xFE, 0xFF, 0x03, 0x06, 0xFE, 0x10, 0x04, 0x06, 0xFE, 0x11, 0x04, -/* 0000FE70 */ 0x06, 0xFE, 0x12, 0x04, 0x06, 0xFE, 0x16, 0x04, 0x06, 0xFE, 0x28, 0x03, 0x06, 0xFE, 0x29, 0x03, -/* 0000FE80 */ 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, 0x2B, 0x03, 0x06, 0xFE, 0x17, 0x04, 0x06, 0xFE, 0xC2, 0x03, -/* 0000FE90 */ 0x0C, 0x06, 0xFE, 0x14, 0x04, 0x06, 0xFE, 0x2D, 0x03, 0x06, 0xFE, 0x2E, 0x03, 0x06, 0xFE, 0x2F, -/* 0000FEA0 */ 0x03, 0x06, 0xFE, 0x13, 0x04, 0x06, 0xFE, 0x15, 0x04, 0x06, 0xFE, 0x5B, 0x03, 0x06, 0xFE, 0xF7, -/* 0000FEB0 */ 0x02, 0x06, 0xFE, 0xC9, 0x04, 0x06, 0xFE, 0xCA, 0x04, 0x01, 0x00, 0x01, 0xFF, 0xFE, 0x60, 0x04, -/* 0000FEC0 */ 0xA6, 0x2F, 0xA6, 0x30, 0xA6, 0x31, 0x2C, 0x36, 0x24, 0x0D, 0x03, 0x00, 0x36, 0x02, 0x09, 0x1A, -/* 0000FED0 */ 0x00, 0x8D, 0x03, 0x03, 0x37, 0x00, 0x00, 0x6B, 0x36, 0x37, 0x00, 0x07, 0x01, 0x00, 0x5A, 0x00, -/* 0000FEE0 */ 0x37, 0xF2, 0x01, 0xFF, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8D, 0x03, 0x06, 0x36, 0x01, -/* 0000FEF0 */ 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x04, 0x8D, 0x03, 0x13, 0x37, 0x02, 0x00, 0x5B, 0x01, 0x37, -/* 0000FF00 */ 0x01, 0x00, 0x5B, 0x02, 0x24, 0x01, 0x00, 0x5B, 0x03, 0x03, 0x01, 0x00, 0xEE, 0x04, 0x36, 0x36, -/* 0000FF10 */ 0x01, 0x00, 0x0E, 0x2C, 0x00, 0x36, 0x60, 0x36, 0x24, 0x01, 0x0E, 0x24, 0x00, 0x36, 0x8D, 0x03, -/* 0000FF20 */ 0x03, 0x37, 0x00, 0x00, 0x6B, 0x36, 0x37, 0x02, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x37, 0x5B, 0x01, -/* 0000FF30 */ 0x05, 0x02, 0x00, 0x5B, 0x02, 0x05, 0x02, 0x00, 0xF2, 0x03, 0xFF, 0x36, 0x02, 0x00, 0x00, 0x00, -/* 0000FF40 */ 0x02, 0x00, 0x75, 0x06, 0x24, 0x03, 0x2C, 0x36, 0x26, 0x14, 0x03, 0x00, 0x36, 0x07, 0x09, 0x24, -/* 0000FF50 */ 0x00, 0x8D, 0x03, 0x04, 0x36, 0x03, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x04, 0xCA, 0x37, 0x5B, -/* 0000FF60 */ 0x01, 0x37, 0x03, 0x00, 0x5B, 0x02, 0x08, 0x03, 0x00, 0xEE, 0x03, 0x36, 0x36, 0x03, 0x00, 0x47, -/* 0000FF70 */ 0x26, 0x36, 0x09, 0x22, 0x00, 0x8D, 0x03, 0x24, 0x37, 0x04, 0x00, 0x6B, 0x36, 0x37, 0x04, 0x07, -/* 0000FF80 */ 0x02, 0x00, 0x5A, 0x00, 0x37, 0x5B, 0x01, 0x26, 0x04, 0x00, 0xF2, 0x02, 0x36, 0x36, 0x04, 0x00, -/* 0000FF90 */ 0x00, 0x00, 0x04, 0x00, 0x47, 0x26, 0x36, 0x8D, 0x02, 0x02, 0x36, 0x05, 0x00, 0x4B, 0x36, 0x07, -/* 0000FFA0 */ 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x26, 0x05, 0x00, 0x5B, 0x02, 0x09, 0x05, 0x00, 0x5B, -/* 0000FFB0 */ 0x03, 0x0A, 0x05, 0x00, 0xCD, 0x37, 0x02, 0x00, 0x00, 0x9F, 0x00, 0x0B, 0x37, 0x9F, 0x01, 0x0C, -/* 0000FFC0 */ 0x37, 0x5B, 0x04, 0x37, 0x05, 0x00, 0x5B, 0x05, 0x0C, 0x05, 0x00, 0xEE, 0x06, 0x36, 0x36, 0x05, -/* 0000FFD0 */ 0x00, 0x47, 0x28, 0x36, 0x8D, 0x02, 0x02, 0x36, 0x05, 0x00, 0x4B, 0x36, 0x07, 0x06, 0x00, 0x5A, -/* 0000FFE0 */ 0x00, 0x04, 0x5B, 0x01, 0x26, 0x06, 0x00, 0x5B, 0x02, 0x0D, 0x06, 0x00, 0x5B, 0x03, 0x0A, 0x06, -/* 0000FFF0 */ 0x00, 0xCD, 0x37, 0x02, 0x01, 0x00, 0x9F, 0x00, 0x0E, 0x37, 0x9F, 0x01, 0x0F, 0x37, 0x5B, 0x04, -/* 00010000 */ 0x37, 0x06, 0x00, 0x5B, 0x05, 0x0E, 0x06, 0x00, 0xEE, 0x06, 0x36, 0x36, 0x06, 0x00, 0x47, 0x29, -/* 00010010 */ 0x36, 0x8D, 0x02, 0x02, 0x36, 0x05, 0x00, 0x4B, 0x36, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5B, -/* 00010020 */ 0x01, 0x26, 0x07, 0x00, 0x5B, 0x02, 0x10, 0x07, 0x00, 0x5B, 0x03, 0x0A, 0x07, 0x00, 0xCD, 0x37, -/* 00010030 */ 0x04, 0x02, 0x00, 0x9F, 0x00, 0x11, 0x37, 0x9F, 0x01, 0x12, 0x37, 0x9F, 0x02, 0x13, 0x37, 0x9F, -/* 00010040 */ 0x03, 0x14, 0x37, 0x5B, 0x04, 0x37, 0x07, 0x00, 0xA6, 0x37, 0x5B, 0x05, 0x37, 0x07, 0x00, 0xEE, -/* 00010050 */ 0x06, 0x36, 0x36, 0x07, 0x00, 0x47, 0x2A, 0x36, 0x8D, 0x02, 0x02, 0x36, 0x05, 0x00, 0x4B, 0x36, -/* 00010060 */ 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x26, 0x08, 0x00, 0x5B, 0x02, 0x15, 0x08, 0x00, -/* 00010070 */ 0x5B, 0x03, 0x16, 0x08, 0x00, 0xA6, 0x37, 0x5B, 0x04, 0x37, 0x08, 0x00, 0x5B, 0x05, 0x17, 0x08, -/* 00010080 */ 0x00, 0xEE, 0x06, 0x36, 0x36, 0x08, 0x00, 0x47, 0x2B, 0x36, 0x8D, 0x02, 0x02, 0x36, 0x05, 0x00, -/* 00010090 */ 0x4B, 0x36, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x26, 0x09, 0x00, 0x5B, 0x02, 0x18, -/* 000100A0 */ 0x09, 0x00, 0x5B, 0x03, 0x0A, 0x09, 0x00, 0xCD, 0x37, 0x03, 0x03, 0x00, 0x9F, 0x00, 0x19, 0x37, -/* 000100B0 */ 0x9F, 0x01, 0x1A, 0x37, 0x9F, 0x02, 0x1B, 0x37, 0x5B, 0x04, 0x37, 0x09, 0x00, 0xA6, 0x37, 0x5B, -/* 000100C0 */ 0x05, 0x37, 0x09, 0x00, 0xEE, 0x06, 0x36, 0x36, 0x09, 0x00, 0x94, 0x02, 0x36, 0x8D, 0x02, 0x02, -/* 000100D0 */ 0x36, 0x05, 0x00, 0x4B, 0x36, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x26, 0x0A, 0x00, -/* 000100E0 */ 0x5B, 0x02, 0x1C, 0x0A, 0x00, 0x5B, 0x03, 0x16, 0x0A, 0x00, 0xCD, 0x37, 0x02, 0x04, 0x00, 0x9F, -/* 000100F0 */ 0x00, 0x06, 0x37, 0x9F, 0x01, 0x17, 0x37, 0x5B, 0x04, 0x37, 0x0A, 0x00, 0xA6, 0x37, 0x5B, 0x05, -/* 00010100 */ 0x37, 0x0A, 0x00, 0xEE, 0x06, 0x36, 0x36, 0x0A, 0x00, 0x94, 0x03, 0x36, 0x8D, 0x02, 0x07, 0x36, -/* 00010110 */ 0x06, 0x00, 0x4B, 0x36, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x25, 0x0B, 0x00, 0xEE, -/* 00010120 */ 0x02, 0x36, 0x36, 0x0B, 0x00, 0x47, 0x25, 0x36, 0x8D, 0x03, 0x2A, 0x36, 0x07, 0x00, 0x07, 0x05, -/* 00010130 */ 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x25, 0x0C, 0x00, 0x5B, 0x02, 0x28, 0x0C, 0x00, 0xA6, 0x37, -/* 00010140 */ 0x5B, 0x03, 0x37, 0x0C, 0x00, 0x8D, 0x03, 0x31, 0x37, 0x08, 0x00, 0x5B, 0x04, 0x37, 0x0C, 0x00, -/* 00010150 */ 0xEE, 0x05, 0x36, 0x36, 0x0C, 0x00, 0x47, 0x2C, 0x36, 0x94, 0x04, 0x1D, 0x8D, 0x03, 0x27, 0x36, -/* 00010160 */ 0x09, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, 0x60, 0x37, 0x2C, 0x05, 0x5B, 0x01, 0x37, 0x0D, -/* 00010170 */ 0x00, 0xEE, 0x02, 0x36, 0x36, 0x0D, 0x00, 0x47, 0x2D, 0x36, 0x47, 0x2E, 0x2D, 0x60, 0x36, 0x2C, -/* 00010180 */ 0x06, 0x0E, 0x2E, 0x00, 0x36, 0x8D, 0x03, 0x06, 0x36, 0x01, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, -/* 00010190 */ 0x04, 0x8D, 0x03, 0x16, 0x37, 0x0A, 0x00, 0x5B, 0x01, 0x37, 0x0E, 0x00, 0x60, 0x37, 0x2C, 0x06, -/* 000101A0 */ 0x5B, 0x02, 0x37, 0x0E, 0x00, 0xD3, 0x00, 0x37, 0x5B, 0x03, 0x37, 0x0E, 0x00, 0xEE, 0x04, 0xFF, -/* 000101B0 */ 0x36, 0x0E, 0x00, 0x91, 0x04, 0x36, 0x0B, 0x00, 0x15, 0x03, 0x00, 0x36, 0x1D, 0x09, 0x50, 0x00, -/* 000101C0 */ 0x8D, 0x03, 0x2F, 0x36, 0x0C, 0x00, 0x96, 0x36, 0x36, 0x2E, 0x00, 0x00, 0x47, 0x2F, 0x36, 0x47, -/* 000101D0 */ 0x30, 0x1E, 0xA6, 0x36, 0x15, 0x03, 0x00, 0x2F, 0x36, 0x09, 0x31, 0x00, 0x91, 0x04, 0x37, 0x0B, -/* 000101E0 */ 0x00, 0x96, 0x37, 0x2F, 0x37, 0x01, 0x00, 0x47, 0x30, 0x37, 0x47, 0x36, 0x37, 0xA6, 0x37, 0x15, -/* 000101F0 */ 0x03, 0x00, 0x36, 0x37, 0x09, 0x16, 0x00, 0x15, 0x03, 0x00, 0x30, 0x1E, 0x09, 0x0B, 0x00, 0x2F, -/* 00010200 */ 0x36, 0x2E, 0x1F, 0x2F, 0x36, 0x36, 0x30, 0x47, 0x2E, 0x36, 0x09, 0x03, 0x00, 0x94, 0x04, 0x1D, -/* 00010210 */ 0x91, 0x02, 0x36, 0x0D, 0x00, 0xA6, 0x37, 0x14, 0x03, 0x00, 0x36, 0x37, 0x09, 0xA3, 0x00, 0xE5, -/* 00010220 */ 0x4C, 0x00, 0x8D, 0x03, 0x03, 0x37, 0x00, 0x00, 0x6B, 0x36, 0x37, 0x07, 0x07, 0x08, 0x00, 0x5A, -/* 00010230 */ 0x00, 0x37, 0x5B, 0x01, 0x20, 0x0F, 0x00, 0x5B, 0x02, 0x21, 0x0F, 0x00, 0x5B, 0x03, 0x2D, 0x0F, -/* 00010240 */ 0x00, 0xA6, 0x38, 0x5B, 0x04, 0x38, 0x0F, 0x00, 0xA6, 0x38, 0x5B, 0x05, 0x38, 0x0F, 0x00, 0xA6, -/* 00010250 */ 0x38, 0x5B, 0x06, 0x38, 0x0F, 0x00, 0xA6, 0x38, 0x5B, 0x07, 0x38, 0x0F, 0x00, 0xF2, 0x08, 0x36, -/* 00010260 */ 0x36, 0x07, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x47, 0x31, 0x36, 0xE9, 0x09, 0x35, 0x00, 0xE7, 0x27, -/* 00010270 */ 0x06, 0x8D, 0x03, 0x22, 0x36, 0x0E, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x27, -/* 00010280 */ 0x10, 0x00, 0xEE, 0x02, 0xFF, 0x36, 0x10, 0x00, 0x8D, 0x03, 0x03, 0x37, 0x00, 0x00, 0x6B, 0x36, -/* 00010290 */ 0x37, 0x08, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x37, 0xF2, 0x01, 0xFF, 0x36, 0x08, 0x00, 0x00, 0x00, -/* 000102A0 */ 0x11, 0x00, 0xE9, 0x14, 0x03, 0x00, 0x31, 0x22, 0x09, 0x06, 0x00, 0x94, 0x02, 0x1B, 0x09, 0x11, -/* 000102B0 */ 0x00, 0x14, 0x03, 0x00, 0x31, 0x23, 0x09, 0x06, 0x00, 0x94, 0x02, 0x19, 0x09, 0x03, 0x00, 0x94, -/* 000102C0 */ 0x02, 0x1A, 0xA6, 0x36, 0x14, 0x03, 0x00, 0x2A, 0x36, 0x09, 0x03, 0x00, 0x47, 0x2A, 0x14, 0x91, -/* 000102D0 */ 0x03, 0x36, 0x0F, 0x00, 0xA6, 0x37, 0x14, 0x03, 0x00, 0x36, 0x37, 0x09, 0x03, 0x00, 0x94, 0x03, -/* 000102E0 */ 0x17, 0x75, 0x28, 0x24, 0x09, 0x60, 0x36, 0x2C, 0x05, 0x75, 0x36, 0x24, 0x0A, 0x75, 0x2E, 0x24, -/* 000102F0 */ 0x0B, 0x75, 0x29, 0x24, 0x0C, 0x75, 0x2A, 0x24, 0x0D, 0x75, 0x2B, 0x24, 0x0E, 0x91, 0x02, 0x36, -/* 00010300 */ 0x0D, 0x00, 0x75, 0x36, 0x24, 0x0F, 0x91, 0x03, 0x36, 0x0F, 0x00, 0x75, 0x36, 0x24, 0x10, 0x91, -/* 00010310 */ 0x04, 0x36, 0x0B, 0x00, 0x75, 0x36, 0x24, 0x11, 0x75, 0x06, 0x24, 0x12, 0xA6, 0x00, 0x24, 0x00, -/* 00010320 */ 0xFE, 0x89, 0x02, 0xFE, 0xF2, 0x01, 0xFE, 0x8D, 0x02, 0xFE, 0xF2, 0x01, 0xFE, 0x36, 0x03, 0xFE, -/* 00010330 */ 0xF9, 0x01, 0xFE, 0xFB, 0x01, 0xFE, 0xE1, 0x01, 0xFE, 0x90, 0x02, 0xFE, 0x2D, 0x02, 0xFE, 0xF3, -/* 00010340 */ 0x01, 0xFE, 0xCB, 0x04, 0xFE, 0xCC, 0x04, 0xFE, 0xCD, 0x04, 0xFE, 0xCE, 0x04, 0xFE, 0xCF, 0x04, -/* 00010350 */ 0xFE, 0xD0, 0x04, 0xFE, 0x1C, 0x02, 0xFE, 0x1D, 0x02, 0xFF, 0xC4, 0xE9, 0x01, 0x00, 0x35, 0x06, -/* 00010360 */ 0x00, 0x00, 0x00, 0x0B, 0x00, 0x37, 0x00, 0x1A, 0x00, 0x3F, 0x00, 0x33, 0x00, 0x93, 0x00, 0x24, -/* 00010370 */ 0x00, 0x65, 0x00, 0x04, 0x00, 0x5D, 0x00, 0x0B, 0x00, 0x3A, 0x00, 0x24, 0x00, 0x4F, 0x00, 0x22, -/* 00010380 */ 0x00, 0x49, 0x00, 0x3D, 0x00, 0x71, 0x00, 0x3D, 0x00, 0x5F, 0x00, 0x47, 0x00, 0x81, 0x00, 0x32, -/* 00010390 */ 0x00, 0x6E, 0x00, 0x43, 0x00, 0x73, 0x00, 0x3F, 0x00, 0x9B, 0x00, 0x1C, 0x00, 0x41, 0x00, 0x31, -/* 000103A0 */ 0x00, 0x6F, 0x00, 0x03, 0x00, 0x2B, 0x00, 0x1E, 0x00, 0x69, 0x00, 0x03, 0x00, 0x46, 0x00, 0x08, -/* 000103B0 */ 0x00, 0x36, 0x00, 0x2E, 0x00, 0x33, 0x05, 0x0D, 0x00, 0x33, 0x00, 0x0F, 0x00, 0x6F, 0x00, 0x03, -/* 000103C0 */ 0x00, 0x2F, 0x00, 0x25, 0x00, 0x92, 0x00, 0x08, 0x00, 0x3B, 0x00, 0x0E, 0x00, 0xB1, 0x00, 0x03, -/* 000103D0 */ 0x00, 0x7F, 0x00, 0x12, 0x00, 0x51, 0x00, 0x4E, 0x00, 0x84, 0x00, 0x01, 0x00, 0x52, 0x00, 0x17, -/* 000103E0 */ 0x00, 0x92, 0x01, 0x1B, 0x00, 0x52, 0x00, 0x08, 0x00, 0x29, 0x00, 0x06, 0x00, 0x30, 0x00, 0x08, -/* 000103F0 */ 0x00, 0x2A, 0x00, 0x06, 0x00, 0x4A, 0x00, 0x03, 0x00, 0x4E, 0x00, 0x0A, 0x00, 0x35, 0x00, 0x03, -/* 00010400 */ 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x31, 0x00, 0x03, 0x00, 0x65, 0x00, 0x04, 0x00, 0x2E, 0x00, 0x08, -/* 00010410 */ 0x00, 0x4D, 0x00, 0x04, 0x00, 0x48, 0x00, 0x04, 0x00, 0x2A, 0x00, 0x04, 0x00, 0x36, 0x00, 0x04, -/* 00010420 */ 0x00, 0x42, 0x00, 0x09, 0x00, 0x32, 0x00, 0x09, 0x00, 0x2E, 0x00, 0x09, 0x00, 0x32, 0x00, 0x06, -/* 00010430 */ 0x00, 0x33, 0x00, 0x00, 0x38, 0x04, 0x01, 0x00, 0xBF, 0x5C, 0x1A, 0xC1, 0x33, 0x88, 0x21, 0x00, -/* 00010440 */ 0xFE, 0x10, 0x0B, 0x57, 0xA2, 0x41, 0xD1, 0x00, 0xA9, 0xFF, 0x31, 0xF1, 0x01, 0x00, 0xFF, 0x00, -/* 00010450 */ 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0x31, 0xF1, 0x01, 0x00, 0xFE, 0xCB, 0x04, 0xFE, 0xCB, 0x04, -/* 00010460 */ 0x41, 0x09, 0x15, 0x1A, 0x0B, 0x5F, 0x5A, 0x04, 0x03, 0x05, 0x01, 0x08, 0x03, 0x03, 0x03, 0x03, -/* 00010470 */ 0x01, 0x01, 0x19, 0x01, 0x01, 0x01, 0x02, 0x06, 0xFE, 0x5B, 0x03, 0x06, 0xFE, 0xB1, 0x03, 0x06, -/* 00010480 */ 0xFE, 0x14, 0x04, 0x07, 0x08, 0x06, 0xFE, 0xAD, 0x03, 0x06, 0xFE, 0x2D, 0x03, 0x06, 0xFE, 0x2E, -/* 00010490 */ 0x03, 0x06, 0xFE, 0x2F, 0x03, 0x06, 0xFE, 0xB2, 0x03, 0x06, 0xFE, 0xC1, 0x03, 0x0B, 0x06, 0xFE, -/* 000104A0 */ 0xB0, 0x03, 0x06, 0xFE, 0x15, 0x04, 0x06, 0xFE, 0x12, 0x04, 0x06, 0xFE, 0x11, 0x04, 0x05, 0xFE, -/* 000104B0 */ 0xD1, 0x04, 0xFE, 0x90, 0x01, 0x8D, 0x04, 0x03, 0x1B, 0x00, 0x00, 0x6B, 0x1A, 0x1B, 0x00, 0x07, -/* 000104C0 */ 0x03, 0x00, 0x5A, 0x00, 0x1B, 0x5B, 0x01, 0x15, 0x00, 0x00, 0xE0, 0x1C, 0x00, 0x5B, 0x02, 0x1C, -/* 000104D0 */ 0x00, 0x00, 0xF2, 0x03, 0x1A, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x16, 0x1A, 0x96, -/* 000104E0 */ 0x1A, 0x16, 0x02, 0x00, 0x00, 0x47, 0x17, 0x1A, 0x96, 0x1A, 0x16, 0x03, 0x01, 0x00, 0x14, 0x03, -/* 000104F0 */ 0x00, 0x1A, 0x04, 0x09, 0x08, 0x00, 0xA6, 0x1B, 0x47, 0x1A, 0x1B, 0x09, 0x09, 0x00, 0x96, 0x1B, -/* 00010500 */ 0x16, 0x03, 0x02, 0x00, 0x47, 0x1A, 0x1B, 0x47, 0x18, 0x1A, 0x14, 0x03, 0x00, 0x17, 0x05, 0x09, -/* 00010510 */ 0x84, 0x00, 0x8D, 0x01, 0x02, 0x1A, 0x01, 0x00, 0xA6, 0x1B, 0x14, 0x03, 0x00, 0x1A, 0x1B, 0x09, -/* 00010520 */ 0x74, 0x00, 0x8D, 0x03, 0x02, 0x1A, 0x02, 0x00, 0x4B, 0x1A, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x08, -/* 00010530 */ 0x8D, 0x04, 0x04, 0x1B, 0x03, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x08, 0xCB, 0x00, 0x00, 0x00, -/* 00010540 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x79, 0x18, 0x1C, 0x01, 0x5B, 0x01, 0x1C, -/* 00010550 */ 0x02, 0x00, 0x5B, 0x02, 0x07, 0x02, 0x00, 0xEE, 0x03, 0x1B, 0x1B, 0x02, 0x00, 0x5B, 0x01, 0x1B, -/* 00010560 */ 0x01, 0x00, 0x5B, 0x02, 0x06, 0x01, 0x00, 0x5B, 0x03, 0x09, 0x01, 0x00, 0xCD, 0x1B, 0x03, 0x00, -/* 00010570 */ 0x00, 0x9F, 0x00, 0x0A, 0x1B, 0x9F, 0x01, 0x0B, 0x1B, 0x9F, 0x02, 0x0C, 0x1B, 0x5B, 0x04, 0x1B, -/* 00010580 */ 0x01, 0x00, 0xA6, 0x1B, 0x5B, 0x05, 0x1B, 0x01, 0x00, 0xEE, 0x06, 0x1A, 0x1A, 0x01, 0x00, 0x92, -/* 00010590 */ 0x01, 0x02, 0x1A, 0x09, 0xAB, 0x00, 0x14, 0x03, 0x00, 0x17, 0x0D, 0x09, 0x6D, 0x00, 0x8D, 0x01, -/* 000105A0 */ 0x03, 0x1A, 0x04, 0x00, 0xA6, 0x1B, 0x14, 0x03, 0x00, 0x1A, 0x1B, 0x09, 0x5D, 0x00, 0xA6, 0x1A, -/* 000105B0 */ 0x15, 0x03, 0x00, 0x18, 0x1A, 0x09, 0x4C, 0x00, 0x8D, 0x04, 0x24, 0x1B, 0x05, 0x00, 0x6B, 0x1A, -/* 000105C0 */ 0x1B, 0x02, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x1B, 0x8D, 0x04, 0x06, 0x1C, 0x06, 0x00, 0x07, 0x03, -/* 000105D0 */ 0x00, 0x5A, 0x00, 0x08, 0x8D, 0x04, 0x1E, 0x1D, 0x07, 0x00, 0x5B, 0x01, 0x1D, 0x04, 0x00, 0x5B, -/* 000105E0 */ 0x02, 0x18, 0x04, 0x00, 0xEE, 0x03, 0x1C, 0x1C, 0x04, 0x00, 0x43, 0x1C, 0x1C, 0x0E, 0x5B, 0x01, -/* 000105F0 */ 0x1C, 0x03, 0x00, 0xF2, 0x02, 0x1A, 0x1A, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x92, 0x01, 0x03, -/* 00010600 */ 0x1A, 0x09, 0x04, 0x00, 0x92, 0x01, 0x03, 0x0F, 0x09, 0x36, 0x00, 0x14, 0x03, 0x00, 0x17, 0x10, -/* 00010610 */ 0x09, 0x2E, 0x00, 0xA6, 0x1A, 0x15, 0x03, 0x00, 0x18, 0x1A, 0x09, 0x24, 0x00, 0x15, 0x03, 0x00, -/* 00010620 */ 0x18, 0x11, 0x09, 0x1C, 0x00, 0x15, 0x03, 0x00, 0x18, 0x12, 0x09, 0x14, 0x00, 0x15, 0x03, 0x00, -/* 00010630 */ 0x18, 0x13, 0x09, 0x0C, 0x00, 0x15, 0x03, 0x00, 0x18, 0x14, 0x09, 0x04, 0x00, 0x92, 0x01, 0x04, -/* 00010640 */ 0x18, 0xA6, 0x00, 0x24, 0x00, 0x01, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, -/* 00010650 */ 0x00, 0x00, 0x00, 0x00, 0x14, 0x04, 0x00, 0x00, 0xFE, 0x83, 0x02, 0xFE, 0x14, 0x04, 0xFE, 0x39, -/* 00010660 */ 0x03, 0x0E, 0xFE, 0xB2, 0x04, 0x00, 0xFF, 0x5D, 0xF1, 0x01, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, -/* 00010670 */ 0x2A, 0x00, 0x82, 0x00, 0x09, 0x00, 0x2C, 0x00, 0x22, 0x00, 0x4C, 0x00, 0x18, 0x00, 0x4B, 0x00, -/* 00010680 */ 0x74, 0x00, 0x9F, 0x00, 0x18, 0x00, 0x49, 0x00, 0x0A, 0x00, 0x3B, 0x00, 0x4C, 0x00, 0xA9, 0x00, -/* 00010690 */ 0x07, 0x00, 0x4D, 0x00, 0x32, 0x00, 0xFF, 0x00, 0x06, 0x00, 0x41, 0x00, 0x00, 0xBF, 0x5C, 0x0A, -/* 000106A0 */ 0xC1, 0x63, 0xA8, 0x05, 0x00, 0xFE, 0xB2, 0x0A, 0x1E, 0xA0, 0x41, 0xC1, 0x00, 0xFE, 0xF1, 0x02, -/* 000106B0 */ 0xA5, 0xFF, 0xEE, 0xDF, 0x01, 0x00, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFF, 0xEE, -/* 000106C0 */ 0xDF, 0x01, 0x00, 0xFE, 0xE5, 0x08, 0xFE, 0xE5, 0x08, 0x01, 0x0C, 0x07, 0x0F, 0x06, 0x7A, 0x6D, -/* 000106D0 */ 0x02, 0x05, 0x08, 0x07, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x0E, 0x0F, 0x08, 0x01, 0x01, 0x05, -/* 000106E0 */ 0xFE, 0xC3, 0x04, 0x06, 0xFE, 0x5B, 0x03, 0x01, 0x02, 0xFE, 0xE7, 0x01, 0x4F, 0x07, 0x4F, 0x08, -/* 000106F0 */ 0x4F, 0x0B, 0x4F, 0x0C, 0x4F, 0x0D, 0x4F, 0x09, 0x4F, 0x0A, 0x8D, 0x01, 0x19, 0x10, 0x00, 0x00, -/* 00010700 */ 0x4B, 0x10, 0x0E, 0x19, 0x00, 0x10, 0x8D, 0x02, 0x03, 0x10, 0x01, 0x00, 0x60, 0x10, 0x10, 0x00, -/* 00010710 */ 0x0E, 0x0B, 0x00, 0x10, 0x8D, 0x01, 0x19, 0x00, 0x00, 0x00, 0x4B, 0x00, 0x09, 0xB2, 0x01, 0xA6, -/* 00010720 */ 0x10, 0x47, 0x07, 0x10, 0xA6, 0x10, 0x47, 0x08, 0x10, 0x8D, 0x02, 0x33, 0x10, 0x02, 0x00, 0x4B, -/* 00010730 */ 0x10, 0x0E, 0x90, 0x00, 0x10, 0x8D, 0x01, 0x0A, 0x10, 0x03, 0x00, 0x4B, 0x10, 0x07, 0x01, 0x00, -/* 00010740 */ 0x5A, 0x00, 0x02, 0xEE, 0x01, 0x10, 0x10, 0x00, 0x00, 0x47, 0x07, 0x10, 0x8D, 0x02, 0x03, 0x11, -/* 00010750 */ 0x01, 0x00, 0x6B, 0x10, 0x11, 0x01, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x11, 0x5B, 0x01, 0x07, 0x01, -/* 00010760 */ 0x00, 0xE0, 0x12, 0x00, 0x5B, 0x02, 0x12, 0x01, 0x00, 0xF2, 0x03, 0x10, 0x10, 0x01, 0x00, 0x00, -/* 00010770 */ 0x00, 0x01, 0x00, 0x47, 0x09, 0x10, 0x0E, 0x48, 0x00, 0x09, 0x96, 0x10, 0x09, 0x03, 0x00, 0x00, -/* 00010780 */ 0x47, 0x08, 0x10, 0x8D, 0x02, 0x06, 0x10, 0x04, 0x00, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x02, 0x8D, -/* 00010790 */ 0x02, 0x1D, 0x11, 0x05, 0x00, 0x5B, 0x01, 0x11, 0x02, 0x00, 0x5B, 0x02, 0x07, 0x02, 0x00, 0x47, -/* 000107A0 */ 0x11, 0x04, 0x01, 0x04, 0x01, 0x12, 0x08, 0x2F, 0x11, 0x11, 0x12, 0x2F, 0x11, 0x11, 0x05, 0x5B, -/* 000107B0 */ 0x03, 0x11, 0x02, 0x00, 0x5B, 0x04, 0x05, 0x02, 0x00, 0xEE, 0x05, 0x10, 0x10, 0x02, 0x00, 0x47, -/* 000107C0 */ 0x07, 0x10, 0x09, 0x50, 0x00, 0x8D, 0x02, 0x03, 0x11, 0x01, 0x00, 0x6B, 0x10, 0x11, 0x01, 0x07, -/* 000107D0 */ 0x03, 0x00, 0x5A, 0x00, 0x11, 0x8D, 0x01, 0x0A, 0x12, 0x03, 0x00, 0x4B, 0x12, 0x07, 0x01, 0x00, -/* 000107E0 */ 0x5A, 0x00, 0x02, 0xEE, 0x01, 0x12, 0x12, 0x04, 0x00, 0x5B, 0x01, 0x12, 0x03, 0x00, 0xE0, 0x12, -/* 000107F0 */ 0x01, 0x5B, 0x02, 0x12, 0x03, 0x00, 0xF2, 0x03, 0x10, 0x10, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, -/* 00010800 */ 0x47, 0x0A, 0x10, 0x96, 0x10, 0x0A, 0x03, 0x01, 0x00, 0x47, 0x07, 0x10, 0x96, 0x10, 0x0A, 0x06, -/* 00010810 */ 0x02, 0x00, 0x47, 0x08, 0x10, 0xA6, 0x10, 0x14, 0x03, 0x00, 0x08, 0x10, 0x09, 0x11, 0x00, 0x01, -/* 00010820 */ 0x34, 0x01, 0x01, 0x19, 0x07, 0x8D, 0x01, 0x19, 0x00, 0x00, 0x00, 0x4B, 0x00, 0x09, 0xA1, 0x00, -/* 00010830 */ 0xD5, 0x00, 0x10, 0x47, 0x0B, 0x10, 0x8D, 0x02, 0x30, 0x10, 0x06, 0x00, 0x96, 0x10, 0x10, 0x07, -/* 00010840 */ 0x03, 0x00, 0x47, 0x0C, 0x10, 0xA6, 0x10, 0x14, 0x03, 0x00, 0x0C, 0x10, 0x09, 0x27, 0x00, 0x07, -/* 00010850 */ 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x07, 0x05, 0x00, 0x5B, 0x02, 0x08, 0x05, 0x00, 0xEE, -/* 00010860 */ 0x03, 0x10, 0x0B, 0x05, 0x00, 0x01, 0x34, 0x01, 0x01, 0x19, 0x10, 0x8D, 0x01, 0x19, 0x00, 0x00, -/* 00010870 */ 0x00, 0x4B, 0x00, 0x09, 0x5B, 0x00, 0x96, 0x10, 0x0C, 0x08, 0x04, 0x00, 0x47, 0x0D, 0x10, 0xA6, -/* 00010880 */ 0x10, 0x15, 0x03, 0x00, 0x0D, 0x10, 0x09, 0x1F, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5B, -/* 00010890 */ 0x01, 0x07, 0x06, 0x00, 0x5B, 0x02, 0x0D, 0x06, 0x00, 0xEE, 0x03, 0x10, 0x0B, 0x06, 0x00, 0x01, -/* 000108A0 */ 0x34, 0x01, 0x01, 0x19, 0x10, 0x09, 0x1C, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, -/* 000108B0 */ 0x07, 0x07, 0x00, 0x5B, 0x02, 0x08, 0x07, 0x00, 0xEE, 0x03, 0x10, 0x0B, 0x07, 0x00, 0x01, 0x34, -/* 000108C0 */ 0x01, 0x01, 0x19, 0x10, 0x8D, 0x01, 0x19, 0x00, 0x00, 0x00, 0x4B, 0x00, 0x09, 0x02, 0x00, 0xA6, -/* 000108D0 */ 0x00, 0x24, 0x00, 0xFE, 0x61, 0x03, 0xFE, 0x83, 0x02, 0x28, 0xFE, 0xC4, 0x04, 0x00, 0x0E, 0xFE, -/* 000108E0 */ 0xC5, 0x04, 0x00, 0xFF, 0x04, 0xE0, 0x01, 0x00, 0x1B, 0x0E, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x3F, -/* 000108F0 */ 0x00, 0x0B, 0x00, 0x31, 0x00, 0x05, 0x00, 0x20, 0x00, 0x05, 0x00, 0x23, 0x00, 0x0C, 0x00, 0x7A, -/* 00010900 */ 0x00, 0x17, 0x00, 0x29, 0x00, 0x2A, 0x00, 0x6A, 0x00, 0x04, 0x00, 0xB8, 0x00, 0x09, 0x00, 0x26, -/* 00010910 */ 0x00, 0x42, 0x00, 0xC6, 0x00, 0x3E, 0x00, 0x5C, 0x00, 0x09, 0x00, 0x1F, 0x00, 0x09, 0x00, 0x29, -/* 00010920 */ 0x00, 0x0A, 0x00, 0x2B, 0x00, 0x06, 0x00, 0x2C, 0x00, 0x0B, 0x00, 0x8D, 0x00, 0x06, 0x00, 0x28, -/* 00010930 */ 0x01, 0x0F, 0x00, 0x56, 0x00, 0x0A, 0x00, 0x84, 0x00, 0x1C, 0x00, 0x54, 0x00, 0x0B, 0x00, 0x31, -/* 00010940 */ 0x00, 0x09, 0x00, 0x42, 0x00, 0x0A, 0x00, 0x31, 0x00, 0x1F, 0x00, 0x6B, 0x00, 0x1C, 0x00, 0x5B, -/* 00010950 */ 0x00, 0x0D, 0x00, 0x22, 0x00, 0x00, 0x5A, 0x09, 0x01, 0x00, 0xBF, 0x4C, 0x00, 0x01, 0x00, 0x88, -/* 00010960 */ 0x01, 0x00, 0xFE, 0xD0, 0x0A, 0x2C, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xC6, 0x04, 0xA6, 0xFF, 0x14, -/* 00010970 */ 0xE5, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFF, 0x14, 0xE5, 0x01, 0x00, 0xF9, -/* 00010980 */ 0xF9, 0x01, 0x04, 0x05, 0x08, 0x17, 0x15, 0x02, 0x01, 0x07, 0x06, 0xFE, 0x5B, 0x03, 0x05, 0xFE, -/* 00010990 */ 0xC3, 0x04, 0x05, 0xFE, 0xC7, 0x04, 0x53, 0x8D, 0x02, 0x33, 0x08, 0x00, 0x00, 0x4B, 0x08, 0x0E, -/* 000109A0 */ 0x23, 0x00, 0x08, 0x47, 0x00, 0x02, 0x01, 0x04, 0x01, 0x08, 0x05, 0x2F, 0x00, 0x00, 0x08, 0x2F, -/* 000109B0 */ 0x00, 0x00, 0x03, 0x01, 0x04, 0x01, 0x08, 0x06, 0x2F, 0x00, 0x00, 0x08, 0x2F, 0x00, 0x00, 0x02, -/* 000109C0 */ 0x09, 0x25, 0x00, 0x09, 0x20, 0x00, 0x47, 0x00, 0x02, 0x01, 0x04, 0x01, 0x08, 0x05, 0x2F, 0x00, -/* 000109D0 */ 0x00, 0x08, 0x2F, 0x00, 0x00, 0x04, 0x01, 0x04, 0x01, 0x08, 0x06, 0x2F, 0x00, 0x00, 0x08, 0x2F, -/* 000109E0 */ 0x00, 0x00, 0x02, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFF, 0x49, 0xE5, 0x01, 0x00, 0x04, -/* 000109F0 */ 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x2A, 0x00, 0x23, 0x00, 0x53, 0x00, 0x22, 0x00, 0x46, 0x00, -/* 00010A00 */ 0x00, 0x3F, 0x5D, 0x08, 0x01, 0x00, 0x8D, 0x05, 0x00, 0xFE, 0x9D, 0x0A, 0x32, 0xA0, 0x41, 0xD1, -/* 00010A10 */ 0x00, 0xA2, 0xFF, 0x0D, 0xDC, 0x01, 0x00, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFF, -/* 00010A20 */ 0x0D, 0xDC, 0x01, 0x00, 0xFE, 0x13, 0x03, 0xFE, 0x13, 0x03, 0x01, 0xFE, 0xC0, 0x04, 0x06, 0x04, -/* 00010A30 */ 0x07, 0x08, 0x1E, 0x1E, 0x02, 0x03, 0x06, 0x04, 0x05, 0x06, 0x07, 0x08, 0x79, 0x4F, 0x07, 0x94, -/* 00010A40 */ 0x02, 0x07, 0x8D, 0x02, 0x04, 0x07, 0x00, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x03, 0xCA, 0x08, -/* 00010A50 */ 0x5B, 0x01, 0x08, 0x00, 0x00, 0x5B, 0x02, 0x02, 0x00, 0x00, 0xEE, 0x03, 0x07, 0x07, 0x00, 0x00, -/* 00010A60 */ 0x94, 0x02, 0x07, 0x8D, 0x02, 0x06, 0x07, 0x01, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x8D, -/* 00010A70 */ 0x02, 0x16, 0x08, 0x02, 0x00, 0x5B, 0x01, 0x08, 0x01, 0x00, 0x8D, 0x02, 0x12, 0x08, 0x03, 0x00, -/* 00010A80 */ 0x07, 0x02, 0x00, 0x5A, 0x00, 0x03, 0x8D, 0x02, 0x2F, 0x09, 0x04, 0x00, 0x5B, 0x01, 0x09, 0x02, -/* 00010A90 */ 0x00, 0xEE, 0x02, 0x08, 0x08, 0x02, 0x00, 0x5B, 0x02, 0x08, 0x01, 0x00, 0xD3, 0x00, 0x08, 0x5B, -/* 00010AA0 */ 0x03, 0x08, 0x01, 0x00, 0xEE, 0x04, 0xFF, 0x07, 0x01, 0x00, 0x91, 0x02, 0x00, 0x05, 0x00, 0x09, -/* 00010AB0 */ 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFF, 0x23, 0xDC, 0x01, 0x00, 0x04, 0x05, 0x00, 0x00, 0x00, -/* 00010AC0 */ 0x21, 0x00, 0x31, 0x00, 0x47, 0x00, 0xB6, 0x02, 0x0A, 0x00, 0x15, 0x00, 0x00, 0xD1, 0x0A, 0x01, -/* 00010AD0 */ 0x00, 0xBF, 0x5D, 0x0E, 0x01, 0x00, 0x8D, 0x05, 0x00, 0xFE, 0x9F, 0x0A, 0x6B, 0xA2, 0x41, 0xD1, -/* 00010AE0 */ 0x00, 0xA3, 0xFF, 0xB7, 0xDC, 0x01, 0x00, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, -/* 00010AF0 */ 0xB7, 0xDC, 0x01, 0x00, 0xFE, 0x48, 0x02, 0xFE, 0x48, 0x02, 0x40, 0x02, 0xFE, 0xC1, 0x04, 0xFE, -/* 00010B00 */ 0xC2, 0x04, 0x07, 0x04, 0x08, 0x08, 0x25, 0x25, 0x03, 0x01, 0x01, 0x03, 0x08, 0x05, 0x06, 0x07, -/* 00010B10 */ 0x07, 0x08, 0x97, 0x4F, 0x08, 0x94, 0x02, 0x08, 0x4F, 0x08, 0x94, 0x03, 0x08, 0x8D, 0x03, 0x2F, -/* 00010B20 */ 0x08, 0x00, 0x00, 0x96, 0x08, 0x08, 0x04, 0x00, 0x00, 0x94, 0x02, 0x08, 0x8D, 0x03, 0x04, 0x08, -/* 00010B30 */ 0x01, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x03, 0xCA, 0x09, 0x5B, 0x01, 0x09, 0x00, 0x00, 0x5B, -/* 00010B40 */ 0x02, 0x02, 0x00, 0x00, 0xEE, 0x03, 0x08, 0x08, 0x00, 0x00, 0x94, 0x03, 0x08, 0x8D, 0x03, 0x06, -/* 00010B50 */ 0x08, 0x02, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x8D, 0x03, 0x16, 0x09, 0x03, 0x00, 0x5B, -/* 00010B60 */ 0x01, 0x09, 0x01, 0x00, 0x8D, 0x03, 0x12, 0x09, 0x04, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x03, -/* 00010B70 */ 0x91, 0x02, 0x0A, 0x05, 0x00, 0x5B, 0x01, 0x0A, 0x02, 0x00, 0xEE, 0x02, 0x09, 0x09, 0x02, 0x00, -/* 00010B80 */ 0x5B, 0x02, 0x09, 0x01, 0x00, 0xD3, 0x00, 0x09, 0x5B, 0x03, 0x09, 0x01, 0x00, 0xEE, 0x04, 0xFF, -/* 00010B90 */ 0x08, 0x01, 0x00, 0x8D, 0x01, 0x02, 0x08, 0x06, 0x00, 0x4B, 0x08, 0x91, 0x03, 0x09, 0x07, 0x00, -/* 00010BA0 */ 0x9B, 0x09, 0x08, 0x04, 0x00, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFF, 0xD7, 0xDC, 0x01, 0x00, 0x05, -/* 00010BB0 */ 0x0A, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x56, 0x00, 0x21, 0x00, 0x45, 0x00, 0x46, 0x00, 0x58, 0x01, -/* 00010BC0 */ 0x15, 0x00, 0x34, 0x00, 0x00, 0xC9, 0x0B, 0x01, 0x00, 0xBF, 0x4C, 0x06, 0x01, 0x00, 0x88, 0x01, -/* 00010BD0 */ 0x00, 0xFE, 0xA3, 0x0A, 0x68, 0xA2, 0x41, 0xD1, 0x00, 0xA4, 0xFF, 0xCE, 0xDD, 0x01, 0x00, 0xFF, -/* 00010BE0 */ 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0xCE, 0xDD, 0x01, 0x00, 0xEC, 0xEC, 0x41, 0x04, 0x03, -/* 00010BF0 */ 0x06, 0x0D, 0x0C, 0x04, 0x01, 0x01, 0x02, 0x05, 0x06, 0xFE, 0x5B, 0x03, 0x2D, 0x4F, 0x04, 0x8D, -/* 00010C00 */ 0x01, 0x02, 0x06, 0x00, 0x00, 0x4B, 0x06, 0x96, 0x06, 0x06, 0x03, 0x00, 0x00, 0x47, 0x04, 0x06, -/* 00010C10 */ 0x15, 0x03, 0x00, 0x04, 0x02, 0x09, 0x0E, 0x00, 0x8D, 0x01, 0x03, 0x06, 0x01, 0x00, 0x4B, 0x06, -/* 00010C20 */ 0x9B, 0x03, 0x06, 0x04, 0x00, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFF, 0xF5, 0xDD, 0x01, 0x00, 0x04, -/* 00010C30 */ 0x02, 0x00, 0x00, 0x00, 0x11, 0x00, 0x48, 0x00, 0x08, 0x00, 0x2D, 0x00, 0x10, 0x00, 0x4F, 0x00, -/* 00010C40 */ 0x00, 0xBF, 0x5C, 0x08, 0x01, 0x00, 0x88, 0x01, 0x00, 0xFE, 0x78, 0x0A, 0x08, 0xA2, 0x41, 0xC3, -/* 00010C50 */ 0x00, 0xFE, 0xBF, 0x04, 0xA1, 0xFF, 0xE5, 0xD1, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, -/* 00010C60 */ 0x02, 0xFF, 0xE5, 0xD1, 0x01, 0x00, 0x96, 0x96, 0x01, 0x05, 0x03, 0x06, 0x05, 0x0F, 0x0F, 0x02, -/* 00010C70 */ 0x01, 0x02, 0x05, 0x08, 0x35, 0x59, 0x06, 0xB2, 0x04, 0x06, 0x8D, 0x02, 0x2D, 0x06, 0x00, 0x00, -/* 00010C80 */ 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x04, 0x00, 0x00, 0x8D, 0x01, 0x18, 0x07, 0x01, -/* 00010C90 */ 0x00, 0x4B, 0x07, 0x5B, 0x02, 0x07, 0x00, 0x00, 0x5B, 0x03, 0x03, 0x00, 0x00, 0xEE, 0x04, 0x00, -/* 00010CA0 */ 0x06, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFF, 0x23, 0xD2, 0x01, 0x00, 0x02, -/* 00010CB0 */ 0x05, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x57, 0x00, 0x00, 0xBF, 0x5C, 0x08, 0x01, 0x00, 0x88, 0x01, -/* 00010CC0 */ 0x00, 0xFE, 0x72, 0x0A, 0x08, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0xBE, 0x04, 0xA0, 0xFF, 0x3F, 0xD0, -/* 00010CD0 */ 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x02, 0xFF, 0x3F, 0xD0, 0x01, 0x00, 0xCC, 0xCC, -/* 00010CE0 */ 0x01, 0x06, 0x03, 0x07, 0x06, 0x13, 0x12, 0x02, 0x01, 0x02, 0x06, 0x08, 0x44, 0x59, 0x07, 0xB2, -/* 00010CF0 */ 0x05, 0x07, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA6, 0x07, 0x47, 0x04, 0x07, 0x8D, 0x02, 0x2C, 0x07, -/* 00010D00 */ 0x00, 0x00, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x05, 0x00, 0x00, 0x8D, 0x01, 0x16, -/* 00010D10 */ 0x08, 0x01, 0x00, 0x4B, 0x08, 0x5B, 0x02, 0x08, 0x00, 0x00, 0x5B, 0x03, 0x03, 0x00, 0x00, 0x5B, -/* 00010D20 */ 0x04, 0x04, 0x00, 0x00, 0xEE, 0x05, 0x00, 0x07, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, -/* 00010D30 */ 0x00, 0xFF, 0x7D, 0xD0, 0x01, 0x00, 0x03, 0x05, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x23, 0x00, 0x33, -/* 00010D40 */ 0x00, 0x6A, 0x00, 0x00, 0xBF, 0x5C, 0x08, 0x01, 0x00, 0x88, 0x01, 0x00, 0xFE, 0x6C, 0x0A, 0x08, -/* 00010D50 */ 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0xBD, 0x04, 0x9F, 0xFF, 0x65, 0xCE, 0x01, 0x00, 0xFF, 0x00, 0x10, -/* 00010D60 */ 0x01, 0x00, 0x03, 0x02, 0xFF, 0x65, 0xCE, 0x01, 0x00, 0xC8, 0xC8, 0x01, 0x06, 0x03, 0x07, 0x06, -/* 00010D70 */ 0x13, 0x12, 0x02, 0x01, 0x02, 0x06, 0x08, 0x44, 0x59, 0x07, 0xB2, 0x05, 0x07, 0x15, 0x05, 0x00, -/* 00010D80 */ 0x04, 0x02, 0xA6, 0x07, 0x47, 0x04, 0x07, 0x8D, 0x02, 0x2C, 0x07, 0x00, 0x00, 0x07, 0x05, 0x00, -/* 00010D90 */ 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x05, 0x00, 0x00, 0x8D, 0x01, 0x14, 0x08, 0x01, 0x00, 0x4B, 0x08, -/* 00010DA0 */ 0x5B, 0x02, 0x08, 0x00, 0x00, 0x5B, 0x03, 0x03, 0x00, 0x00, 0x5B, 0x04, 0x04, 0x00, 0x00, 0xEE, -/* 00010DB0 */ 0x05, 0x00, 0x07, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFF, 0xA1, 0xCE, 0x01, -/* 00010DC0 */ 0x00, 0x03, 0x05, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x23, 0x00, 0x33, 0x00, 0x68, 0x00, 0x00, 0xBF, -/* 00010DD0 */ 0x5C, 0x08, 0x01, 0x00, 0x88, 0x01, 0x00, 0xFE, 0x66, 0x0A, 0x08, 0xA2, 0x41, 0xC3, 0x00, 0xFE, -/* 00010DE0 */ 0xBC, 0x04, 0x9E, 0xFF, 0x9B, 0xCC, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x02, 0xFF, -/* 00010DF0 */ 0x9B, 0xCC, 0x01, 0x00, 0xC0, 0xC0, 0x01, 0x06, 0x03, 0x07, 0x06, 0x13, 0x12, 0x02, 0x01, 0x02, -/* 00010E00 */ 0x06, 0x08, 0x44, 0x59, 0x07, 0xB2, 0x05, 0x07, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA6, 0x07, 0x47, -/* 00010E10 */ 0x04, 0x07, 0x8D, 0x02, 0x2C, 0x07, 0x00, 0x00, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, -/* 00010E20 */ 0x05, 0x00, 0x00, 0x8D, 0x01, 0x12, 0x08, 0x01, 0x00, 0x4B, 0x08, 0x5B, 0x02, 0x08, 0x00, 0x00, -/* 00010E30 */ 0x5B, 0x03, 0x03, 0x00, 0x00, 0x5B, 0x04, 0x04, 0x00, 0x00, 0xEE, 0x05, 0x00, 0x07, 0x00, 0x00, -/* 00010E40 */ 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFF, 0xD3, 0xCC, 0x01, 0x00, 0x03, 0x05, 0x00, 0x00, -/* 00010E50 */ 0x00, 0x0A, 0x00, 0x23, 0x00, 0x33, 0x00, 0x64, 0x00, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, -/* 00010E60 */ 0x01, 0x00, 0xFE, 0x48, 0x0A, 0x1D, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x4C, 0x03, 0x9D, 0xFF, 0xFB, -/* 00010E70 */ 0xC6, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFF, 0xFB, 0xC6, 0x01, 0x00, 0xFE, -/* 00010E80 */ 0x60, 0x03, 0xFE, 0x60, 0x03, 0x01, 0x08, 0x08, 0x0C, 0x0A, 0x52, 0x4F, 0x02, 0x09, 0x08, 0x04, -/* 00010E90 */ 0x04, 0x04, 0x04, 0x0B, 0x08, 0x06, 0xFE, 0xF5, 0x03, 0x05, 0xFE, 0xBC, 0x03, 0x05, 0xFE, 0xFF, -/* 00010EA0 */ 0x03, 0x06, 0xFE, 0x00, 0x04, 0x05, 0xFE, 0xBB, 0x04, 0xFE, 0x5F, 0x01, 0xA6, 0x0A, 0x8D, 0x01, -/* 00010EB0 */ 0x07, 0x0C, 0x00, 0x00, 0x4B, 0x0C, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x08, 0x00, -/* 00010EC0 */ 0x00, 0xEE, 0x02, 0x0C, 0x0C, 0x00, 0x00, 0x47, 0x08, 0x0C, 0x2C, 0x0C, 0x09, 0x15, 0x03, 0x00, -/* 00010ED0 */ 0x0C, 0x03, 0x09, 0x84, 0x00, 0x60, 0x0C, 0x09, 0x00, 0x47, 0x0A, 0x0C, 0x2C, 0x0C, 0x0A, 0x15, -/* 00010EE0 */ 0x03, 0x00, 0x0C, 0x03, 0x09, 0x72, 0x00, 0x8D, 0x02, 0x24, 0x0D, 0x01, 0x00, 0x6B, 0x0C, 0x0D, -/* 00010EF0 */ 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0D, 0x5B, 0x01, 0x0A, 0x01, 0x00, 0xF2, 0x02, 0x0C, 0x0C, -/* 00010F00 */ 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x0A, 0x0C, 0x15, 0x03, 0x00, 0x0A, 0x04, 0x09, 0x48, -/* 00010F10 */ 0x00, 0x15, 0x03, 0x00, 0x0A, 0x05, 0x09, 0x40, 0x00, 0x8D, 0x02, 0x03, 0x0D, 0x02, 0x00, 0x6B, -/* 00010F20 */ 0x0C, 0x0D, 0x02, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x0D, 0x8D, 0x02, 0x0B, 0x0E, 0x03, 0x00, 0x07, -/* 00010F30 */ 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x0A, 0x03, 0x00, 0xEE, 0x02, 0x0E, 0x0E, 0x03, 0x00, -/* 00010F40 */ 0x5B, 0x01, 0x0E, 0x02, 0x00, 0x5B, 0x02, 0x06, 0x02, 0x00, 0x5B, 0x03, 0x07, 0x02, 0x00, 0xF2, -/* 00010F50 */ 0x04, 0xFF, 0x0C, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x2C, 0x0C, 0x0A, 0x14, 0x08, 0x00, 0x0C, -/* 00010F60 */ 0x03, 0x14, 0x03, 0x00, 0x0A, 0x05, 0x09, 0x60, 0x00, 0x8D, 0x01, 0x08, 0x0C, 0x04, 0x00, 0x4B, -/* 00010F70 */ 0x0C, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x08, 0x04, 0x00, 0x8D, 0x02, 0x26, 0x0D, -/* 00010F80 */ 0x05, 0x00, 0x5B, 0x02, 0x0D, 0x04, 0x00, 0x8D, 0x02, 0x03, 0x0E, 0x02, 0x00, 0x6B, 0x0D, 0x0E, -/* 00010F90 */ 0x03, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0E, 0x8D, 0x02, 0x2B, 0x0F, 0x06, 0x00, 0x07, 0x01, 0x00, -/* 00010FA0 */ 0x5A, 0x00, 0x02, 0xEE, 0x01, 0x0F, 0x0F, 0x06, 0x00, 0x5B, 0x01, 0x0F, 0x05, 0x00, 0xF2, 0x02, -/* 00010FB0 */ 0x0D, 0x0D, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x5B, 0x03, 0x0D, 0x04, 0x00, 0xEE, 0x04, 0x00, -/* 00010FC0 */ 0x0C, 0x04, 0x00, 0x09, 0x43, 0x00, 0x09, 0x3E, 0x00, 0x8D, 0x01, 0x08, 0x0C, 0x04, 0x00, 0x4B, -/* 00010FD0 */ 0x0C, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x08, 0x07, 0x00, 0x8D, 0x02, 0x27, 0x0D, -/* 00010FE0 */ 0x07, 0x00, 0x5B, 0x02, 0x0D, 0x07, 0x00, 0x8D, 0x02, 0x2B, 0x0D, 0x06, 0x00, 0x07, 0x01, 0x00, -/* 00010FF0 */ 0x5A, 0x00, 0x02, 0xEE, 0x01, 0x0D, 0x0D, 0x08, 0x00, 0x5B, 0x03, 0x0D, 0x07, 0x00, 0xEE, 0x04, -/* 00011000 */ 0x00, 0x0C, 0x07, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xF8, 0x01, 0xFE, 0x37, -/* 00011010 */ 0x03, 0xFE, 0x8F, 0x02, 0xFE, 0xD8, 0x01, 0xFF, 0x36, 0xC7, 0x01, 0x00, 0x0B, 0x02, 0x00, 0x00, -/* 00011020 */ 0x00, 0x1C, 0x00, 0x34, 0x00, 0x0B, 0x00, 0x32, 0x00, 0x07, 0x00, 0x2E, 0x00, 0x0B, 0x00, 0x36, -/* 00011030 */ 0x00, 0x22, 0x00, 0x37, 0x00, 0x10, 0x00, 0x4A, 0x00, 0x40, 0x00, 0x96, 0x00, 0x10, 0x00, 0x4C, -/* 00011040 */ 0x00, 0x60, 0x00, 0x93, 0x00, 0x40, 0x00, 0x64, 0x00, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, -/* 00011050 */ 0x01, 0x00, 0xFE, 0x3A, 0x0A, 0x28, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xEE, 0x02, 0x9C, 0xFF, 0x27, -/* 00011060 */ 0xC5, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFF, 0x27, 0xC5, 0x01, 0x00, 0xFE, -/* 00011070 */ 0x8C, 0x01, 0xFE, 0x8C, 0x01, 0x01, 0x07, 0x05, 0x0A, 0x03, 0x25, 0x24, 0x02, 0x04, 0x02, 0x03, -/* 00011080 */ 0x03, 0x03, 0x03, 0x09, 0x07, 0x05, 0xFE, 0x3C, 0x03, 0x08, 0x9F, 0x14, 0x0A, 0x00, 0x05, 0x02, -/* 00011090 */ 0xA6, 0x0A, 0x14, 0x03, 0x00, 0x05, 0x0A, 0x09, 0x1F, 0x00, 0x8D, 0x02, 0x03, 0x0B, 0x00, 0x00, -/* 000110A0 */ 0x6B, 0x0A, 0x0B, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0B, 0x5B, 0x01, 0x06, 0x00, 0x00, 0xF2, -/* 000110B0 */ 0x02, 0xFF, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8D, 0x02, 0x03, 0x0B, 0x00, 0x00, 0x6B, -/* 000110C0 */ 0x0A, 0x0B, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0B, 0x5B, 0x01, 0x05, 0x01, 0x00, 0xF2, 0x02, -/* 000110D0 */ 0x0A, 0x0A, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x08, 0x0A, 0x0E, 0x0C, 0x00, 0x08, 0x60, -/* 000110E0 */ 0x0A, 0x08, 0x02, 0x15, 0x03, 0x00, 0x0A, 0x03, 0x09, 0x1F, 0x00, 0x8D, 0x02, 0x03, 0x0B, 0x00, -/* 000110F0 */ 0x00, 0x6B, 0x0A, 0x0B, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0B, 0x5B, 0x01, 0x06, 0x02, 0x00, -/* 00011100 */ 0xF2, 0x02, 0xFF, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x8D, 0x01, 0x07, 0x0A, 0x01, 0x00, -/* 00011110 */ 0x4B, 0x0A, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x07, 0x03, 0x00, 0xEE, 0x02, 0x00, -/* 00011120 */ 0x0A, 0x03, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x8C, 0x02, 0xFE, 0xEF, 0x01, -/* 00011130 */ 0xFE, 0xF6, 0x01, 0xFF, 0x58, 0xC5, 0x01, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x37, -/* 00011140 */ 0x00, 0x1F, 0x00, 0x40, 0x00, 0x22, 0x00, 0x38, 0x00, 0x10, 0x00, 0x3F, 0x00, 0x1F, 0x00, 0x40, -/* 00011150 */ 0x00, 0x1E, 0x00, 0x2C, 0x00, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x2D, -/* 00011160 */ 0x0A, 0x24, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xED, 0x02, 0x9B, 0xFF, 0x63, 0xC3, 0x01, 0x00, 0xFF, -/* 00011170 */ 0x00, 0x10, 0x01, 0x00, 0x05, 0x05, 0xFF, 0x63, 0xC3, 0x01, 0x00, 0xFE, 0x9A, 0x01, 0xFE, 0x9A, -/* 00011180 */ 0x01, 0x01, 0x08, 0x05, 0x0B, 0x04, 0x25, 0x24, 0x02, 0x04, 0x02, 0x03, 0x03, 0x03, 0x03, 0x0A, -/* 00011190 */ 0x07, 0x05, 0xFE, 0x3C, 0x03, 0x08, 0xA2, 0x14, 0x0A, 0x00, 0x05, 0x02, 0xA6, 0x0B, 0x14, 0x03, -/* 000111A0 */ 0x00, 0x05, 0x0B, 0x09, 0x1F, 0x00, 0x8D, 0x02, 0x03, 0x0C, 0x00, 0x00, 0x6B, 0x0B, 0x0C, 0x00, -/* 000111B0 */ 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x06, 0x00, 0x00, 0xF2, 0x02, 0xFF, 0x0B, 0x00, -/* 000111C0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x8D, 0x02, 0x03, 0x0C, 0x00, 0x00, 0x6B, 0x0B, 0x0C, 0x01, 0x07, -/* 000111D0 */ 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x05, 0x01, 0x00, 0xF2, 0x02, 0x0B, 0x0B, 0x01, 0x00, -/* 000111E0 */ 0x00, 0x00, 0x01, 0x00, 0x47, 0x09, 0x0B, 0x0E, 0x0C, 0x00, 0x09, 0x60, 0x0B, 0x09, 0x02, 0x15, -/* 000111F0 */ 0x03, 0x00, 0x0B, 0x03, 0x09, 0x1F, 0x00, 0x8D, 0x02, 0x03, 0x0C, 0x00, 0x00, 0x6B, 0x0B, 0x0C, -/* 00011200 */ 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x06, 0x02, 0x00, 0xF2, 0x02, 0xFF, 0x0B, -/* 00011210 */ 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x8D, 0x02, 0x2E, 0x0B, 0x01, 0x00, 0x07, 0x03, 0x00, 0x5A, -/* 00011220 */ 0x00, 0x04, 0x5B, 0x01, 0x07, 0x03, 0x00, 0x5B, 0x02, 0x08, 0x03, 0x00, 0xEE, 0x03, 0x00, 0x0B, -/* 00011230 */ 0x03, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x8C, 0x02, 0xFE, 0xEF, 0x01, 0xFE, -/* 00011240 */ 0xF6, 0x01, 0xFF, 0x9D, 0xC3, 0x01, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x37, 0x00, -/* 00011250 */ 0x1F, 0x00, 0x40, 0x00, 0x22, 0x00, 0x38, 0x00, 0x10, 0x00, 0x3F, 0x00, 0x1F, 0x00, 0x40, 0x00, -/* 00011260 */ 0x21, 0x00, 0x31, 0x00, 0x00, 0x3F, 0x5D, 0x18, 0xC1, 0x13, 0x8D, 0x25, 0x00, 0xFE, 0x1A, 0x0A, -/* 00011270 */ 0x04, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x74, 0x03, 0x99, 0xFF, 0xCE, 0xBF, 0x01, 0x00, 0x01, 0xFF, -/* 00011280 */ 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFF, 0xCE, 0xBF, 0x01, 0x00, 0xFE, 0x6F, 0x03, 0xFE, 0x6F, -/* 00011290 */ 0x03, 0x04, 0xFE, 0xF9, 0x03, 0xFE, 0xB8, 0x04, 0xFE, 0xB9, 0x04, 0xFE, 0xBA, 0x04, 0x09, 0x0A, -/* 000112A0 */ 0x10, 0x05, 0x20, 0x20, 0x02, 0x02, 0x01, 0x05, 0x03, 0x03, 0x03, 0x03, 0x01, 0x0D, 0x0E, 0x0F, -/* 000112B0 */ 0x01, 0x00, 0x08, 0x06, 0xFE, 0x01, 0x04, 0x06, 0xFE, 0x40, 0x03, 0x06, 0xFE, 0x42, 0x03, 0x0C, -/* 000112C0 */ 0x06, 0xFE, 0x44, 0x03, 0x07, 0x8B, 0x94, 0x04, 0x0B, 0x94, 0x05, 0x0C, 0xCD, 0x10, 0x00, 0x00, -/* 000112D0 */ 0x00, 0x94, 0x02, 0x10, 0x94, 0x03, 0x02, 0x8D, 0x02, 0x06, 0x10, 0x00, 0x00, 0x07, 0x04, 0x00, -/* 000112E0 */ 0x5A, 0x00, 0x03, 0x8D, 0x02, 0x16, 0x11, 0x01, 0x00, 0x5B, 0x01, 0x11, 0x00, 0x00, 0x5B, 0x02, -/* 000112F0 */ 0x0A, 0x00, 0x00, 0xD3, 0x00, 0x11, 0x5B, 0x03, 0x11, 0x00, 0x00, 0xEE, 0x04, 0xFF, 0x10, 0x00, -/* 00011300 */ 0x00, 0x8D, 0x02, 0x15, 0x10, 0x02, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x91, 0x02, 0x11, -/* 00011310 */ 0x03, 0x00, 0x5B, 0x01, 0x11, 0x01, 0x00, 0x5B, 0x02, 0x04, 0x01, 0x00, 0xCB, 0x00, 0x00, 0x00, -/* 00011320 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x91, 0x03, 0x12, 0x04, 0x00, 0x79, 0x12, -/* 00011330 */ 0x11, 0x00, 0x79, 0x07, 0x11, 0x01, 0x79, 0x07, 0x11, 0x02, 0x5B, 0x03, 0x11, 0x01, 0x00, 0xEE, -/* 00011340 */ 0x04, 0xFF, 0x10, 0x01, 0x00, 0x91, 0x02, 0x00, 0x03, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, -/* 00011350 */ 0x00, 0x01, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 00011360 */ 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0xFE, 0x83, 0x01, 0xFE, -/* 00011370 */ 0x82, 0x01, 0xFE, 0x81, 0x01, 0xFF, 0x21, 0xC0, 0x01, 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 0x08, -/* 00011380 */ 0x00, 0x19, 0x00, 0x03, 0x00, 0x17, 0x00, 0x2A, 0x00, 0x70, 0x02, 0x44, 0x00, 0x68, 0x00, 0x0A, -/* 00011390 */ 0x00, 0x13, 0x00, 0x00, 0x98, 0x13, 0x01, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x53, 0xA8, 0x21, 0x00, -/* 000113A0 */ 0xFE, 0x1D, 0x0A, 0x41, 0xB2, 0x41, 0xD1, 0x00, 0x9A, 0xFF, 0x8A, 0xC0, 0x01, 0x00, 0xFF, 0x00, -/* 000113B0 */ 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0x8A, 0xC0, 0x01, 0x00, 0xFE, 0x2C, 0x02, 0xFE, 0x2C, 0x02, -/* 000113C0 */ 0x45, 0x08, 0x0B, 0x0F, 0x06, 0x2F, 0x2E, 0x03, 0x03, 0x07, 0x05, 0x05, 0x05, 0x05, 0x01, 0x01, -/* 000113D0 */ 0x0E, 0x0F, 0x08, 0x06, 0xFE, 0x40, 0x03, 0x06, 0xFE, 0x42, 0x03, 0x0C, 0x06, 0xFE, 0x44, 0x03, -/* 000113E0 */ 0x06, 0xFE, 0x43, 0x03, 0x0B, 0x07, 0x01, 0x01, 0xC3, 0xA6, 0x0D, 0xE5, 0x9F, 0x00, 0x8D, 0x03, -/* 000113F0 */ 0x29, 0x10, 0x00, 0x00, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x0B, 0x00, 0x00, 0x8D, -/* 00011400 */ 0x01, 0x04, 0x11, 0x01, 0x00, 0x5B, 0x02, 0x11, 0x00, 0x00, 0xA6, 0x11, 0x5B, 0x03, 0x11, 0x00, -/* 00011410 */ 0x00, 0x8D, 0x01, 0x05, 0x11, 0x02, 0x00, 0x5B, 0x04, 0x11, 0x00, 0x00, 0xEE, 0x05, 0x10, 0x10, -/* 00011420 */ 0x00, 0x00, 0x47, 0x0D, 0x10, 0x60, 0x10, 0x0D, 0x00, 0x0E, 0x5C, 0x00, 0x10, 0x8D, 0x03, 0x15, -/* 00011430 */ 0x10, 0x03, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8D, 0x01, 0x02, 0x11, 0x04, 0x00, 0x5B, -/* 00011440 */ 0x01, 0x11, 0x01, 0x00, 0x8D, 0x01, 0x03, 0x11, 0x05, 0x00, 0x5B, 0x02, 0x11, 0x01, 0x00, 0xCB, -/* 00011450 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x60, 0x12, 0x0D, 0x00, -/* 00011460 */ 0x79, 0x12, 0x11, 0x01, 0x79, 0x05, 0x11, 0x02, 0x79, 0x05, 0x11, 0x03, 0x79, 0x08, 0x11, 0x04, -/* 00011470 */ 0x5B, 0x03, 0x11, 0x01, 0x00, 0xEE, 0x04, 0xFF, 0x10, 0x01, 0x00, 0x8D, 0x01, 0x03, 0x10, 0x05, -/* 00011480 */ 0x00, 0x2F, 0x10, 0x10, 0x0A, 0x92, 0x01, 0x03, 0x10, 0xE9, 0x09, 0x1B, 0x00, 0xE7, 0x0C, 0x06, -/* 00011490 */ 0x8D, 0x03, 0x22, 0x10, 0x06, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x0C, 0x02, -/* 000114A0 */ 0x00, 0xEE, 0x02, 0xFF, 0x10, 0x02, 0x00, 0xE9, 0xA6, 0x00, 0x24, 0x00, 0x01, 0x18, 0x00, 0x00, -/* 000114B0 */ 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, -/* 000114C0 */ 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0xFE, 0xF7, 0x01, 0xFE, 0x83, -/* 000114D0 */ 0x01, 0xFE, 0x82, 0x01, 0xFE, 0x81, 0x01, 0xFE, 0x80, 0x01, 0xFF, 0xC0, 0xC0, 0x01, 0x00, 0x07, -/* 000114E0 */ 0x05, 0x00, 0x00, 0x00, 0x37, 0x00, 0x5E, 0x00, 0x08, 0x00, 0x2B, 0x00, 0x4E, 0x00, 0x8D, 0x00, -/* 000114F0 */ 0x14, 0x00, 0x33, 0x00, 0x01, 0x00, 0x1D, 0x00, 0x1A, 0x00, 0x8F, 0x00, 0x00, 0x3F, 0x5D, 0x19, -/* 00011500 */ 0xC1, 0x03, 0x8D, 0x05, 0x00, 0xFE, 0xF6, 0x09, 0x04, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x73, 0x03, -/* 00011510 */ 0x97, 0xFF, 0x97, 0xBB, 0x01, 0x00, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0x97, -/* 00011520 */ 0xBB, 0x01, 0x00, 0xFE, 0x31, 0x04, 0xFE, 0x31, 0x04, 0x01, 0xFE, 0xB6, 0x04, 0x08, 0x05, 0x0A, -/* 00011530 */ 0x05, 0x2C, 0x29, 0x02, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x07, 0x08, 0x09, 0x06, -/* 00011540 */ 0xFE, 0xF5, 0x03, 0x06, 0xFE, 0xAD, 0x03, 0x08, 0xB3, 0x4F, 0x06, 0x4F, 0x0A, 0x94, 0x02, 0x0A, -/* 00011550 */ 0x2C, 0x0A, 0x05, 0x14, 0x03, 0x00, 0x0A, 0x02, 0x09, 0x08, 0x00, 0xCD, 0x00, 0x00, 0x00, 0x00, -/* 00011560 */ 0x09, 0x97, 0x00, 0x2C, 0x0A, 0x05, 0x14, 0x03, 0x00, 0x0A, 0x03, 0x09, 0x0C, 0x00, 0xCD, 0x0A, -/* 00011570 */ 0x01, 0x01, 0x00, 0x9F, 0x00, 0x05, 0x0A, 0x47, 0x05, 0x0A, 0x8D, 0x02, 0x24, 0x0B, 0x00, 0x00, -/* 00011580 */ 0x6B, 0x0A, 0x0B, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0B, 0x5B, 0x01, 0x05, 0x00, 0x00, 0xF2, -/* 00011590 */ 0x02, 0x0A, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x05, 0x0A, 0x8D, 0x02, 0x24, 0x0B, -/* 000115A0 */ 0x00, 0x00, 0x6B, 0x0A, 0x0B, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0B, 0xA5, 0x0C, 0x05, 0x02, -/* 000115B0 */ 0x00, 0x00, 0x5B, 0x01, 0x0C, 0x01, 0x00, 0xF2, 0x02, 0x0A, 0x0A, 0x01, 0x00, 0x00, 0x00, 0x01, -/* 000115C0 */ 0x00, 0x47, 0x06, 0x0A, 0xCD, 0x0A, 0x00, 0x02, 0x00, 0x94, 0x02, 0x0A, 0x8D, 0x02, 0x25, 0x0A, -/* 000115D0 */ 0x01, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x05, 0x02, 0x00, 0x5B, 0x02, 0x06, -/* 000115E0 */ 0x02, 0x00, 0xD3, 0x00, 0x0B, 0x5B, 0x03, 0x0B, 0x02, 0x00, 0xEE, 0x04, 0xFF, 0x0A, 0x02, 0x00, -/* 000115F0 */ 0x91, 0x02, 0x00, 0x02, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x36, 0x03, 0xFE, -/* 00011600 */ 0x3A, 0x03, 0xC1, 0xFF, 0xCA, 0xBB, 0x01, 0x00, 0x0A, 0x07, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x32, -/* 00011610 */ 0x00, 0x08, 0x00, 0x1E, 0x00, 0x0B, 0x00, 0x2F, 0x00, 0x0C, 0x00, 0x28, 0x00, 0x22, 0x00, 0x2E, -/* 00011620 */ 0x00, 0x28, 0x00, 0x70, 0x00, 0x08, 0x00, 0x18, 0x00, 0x24, 0x00, 0x8F, 0x02, 0x0A, 0x00, 0x11, -/* 00011630 */ 0x00, 0x00, 0x36, 0x16, 0x01, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x05, -/* 00011640 */ 0x0A, 0x2A, 0xA2, 0x41, 0xD1, 0x00, 0x98, 0xFF, 0x49, 0xBD, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, -/* 00011650 */ 0x00, 0x02, 0x02, 0xFF, 0x49, 0xBD, 0x01, 0x00, 0xFE, 0x61, 0x02, 0xFE, 0x61, 0x02, 0x41, 0x06, -/* 00011660 */ 0x08, 0x0B, 0x06, 0x4A, 0x48, 0x03, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x0A, 0x06, 0xFE, 0xAD, -/* 00011670 */ 0x03, 0x06, 0xFE, 0xF6, 0x03, 0x07, 0x05, 0xFE, 0xB7, 0x04, 0x08, 0x01, 0xFF, 0xFE, 0x47, 0x01, -/* 00011680 */ 0x4F, 0x09, 0x2C, 0x0B, 0x08, 0x15, 0x03, 0x00, 0x0B, 0x02, 0x09, 0x08, 0x00, 0x2C, 0x0B, 0x08, -/* 00011690 */ 0x15, 0x08, 0x00, 0x0B, 0x03, 0x14, 0x03, 0x00, 0x08, 0x04, 0x09, 0x1F, 0x00, 0x8D, 0x03, 0x03, -/* 000116A0 */ 0x0C, 0x00, 0x00, 0x6B, 0x0B, 0x0C, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x05, -/* 000116B0 */ 0x00, 0x00, 0xF2, 0x02, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8D, 0x03, 0x24, 0x0C, -/* 000116C0 */ 0x01, 0x00, 0x6B, 0x0B, 0x0C, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x08, 0x01, -/* 000116D0 */ 0x00, 0xF2, 0x02, 0x0B, 0x0B, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x09, 0x0B, 0x8D, 0x02, -/* 000116E0 */ 0x0C, 0x0B, 0x02, 0x00, 0x4B, 0x0B, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x06, 0x5B, 0x01, 0x09, 0x02, -/* 000116F0 */ 0x00, 0xEE, 0x02, 0x0B, 0x0B, 0x02, 0x00, 0x0F, 0x36, 0x00, 0x0B, 0x8D, 0x03, 0x03, 0x0C, 0x00, -/* 00011700 */ 0x00, 0x6B, 0x0B, 0x0C, 0x02, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x8D, 0x03, 0x0B, 0x0D, 0x03, -/* 00011710 */ 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x06, 0x5B, 0x01, 0x09, 0x04, 0x00, 0xEE, 0x02, 0x0D, 0x0D, -/* 00011720 */ 0x04, 0x00, 0x5B, 0x01, 0x0D, 0x03, 0x00, 0xF2, 0x02, 0xFF, 0x0B, 0x02, 0x00, 0x00, 0x00, 0x03, -/* 00011730 */ 0x00, 0x8D, 0x03, 0x03, 0x0C, 0x00, 0x00, 0x6B, 0x0B, 0x0C, 0x03, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 00011740 */ 0x0C, 0x5B, 0x01, 0x09, 0x05, 0x00, 0xF2, 0x02, 0x0B, 0x0B, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, -/* 00011750 */ 0x47, 0x09, 0x0B, 0xA6, 0x0B, 0x15, 0x03, 0x00, 0x09, 0x0B, 0x09, 0x66, 0x00, 0x8D, 0x03, 0x06, -/* 00011760 */ 0x0B, 0x04, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x06, 0x8D, 0x03, 0x17, 0x0C, 0x05, 0x00, 0x5B, -/* 00011770 */ 0x01, 0x0C, 0x06, 0x00, 0x8D, 0x01, 0x02, 0x0C, 0x06, 0x00, 0x4B, 0x0C, 0x5B, 0x02, 0x0C, 0x06, -/* 00011780 */ 0x00, 0x5B, 0x03, 0x09, 0x06, 0x00, 0xEE, 0x04, 0x0B, 0x0B, 0x06, 0x00, 0x14, 0x03, 0x00, 0x0B, -/* 00011790 */ 0x07, 0x09, 0x2F, 0x00, 0x8D, 0x03, 0x06, 0x0B, 0x04, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x06, -/* 000117A0 */ 0x8D, 0x03, 0x18, 0x0C, 0x07, 0x00, 0x5B, 0x01, 0x0C, 0x07, 0x00, 0x8D, 0x01, 0x02, 0x0C, 0x06, -/* 000117B0 */ 0x00, 0x4B, 0x0C, 0x5B, 0x02, 0x0C, 0x07, 0x00, 0x5B, 0x03, 0x09, 0x07, 0x00, 0xEE, 0x04, 0xFF, -/* 000117C0 */ 0x0B, 0x07, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x8B, 0x02, 0xFE, 0x37, 0x03, 0xFE, 0x87, 0x02, -/* 000117D0 */ 0xFE, 0xD8, 0x01, 0xFF, 0x69, 0xBD, 0x01, 0x00, 0x09, 0x02, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x65, -/* 000117E0 */ 0x00, 0x1F, 0x00, 0x47, 0x00, 0x22, 0x00, 0x32, 0x00, 0x1D, 0x00, 0x35, 0x00, 0x36, 0x00, 0x4B, -/* 000117F0 */ 0x00, 0x22, 0x00, 0x37, 0x00, 0x41, 0x00, 0x65, 0x00, 0x31, 0x00, 0x46, 0x00, 0x00, 0xBF, 0x5C, -/* 00011800 */ 0x08, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0xEB, 0x09, 0x04, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x71, -/* 00011810 */ 0x03, 0x96, 0xFF, 0x22, 0xBA, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0x22, -/* 00011820 */ 0xBA, 0x01, 0x00, 0xF8, 0xF8, 0x01, 0x05, 0x04, 0x06, 0x04, 0x1D, 0x1C, 0x02, 0x03, 0x04, 0x02, -/* 00011830 */ 0x02, 0x02, 0x02, 0x05, 0x08, 0x07, 0x79, 0x8D, 0x02, 0x24, 0x07, 0x00, 0x00, 0x6B, 0x06, 0x07, -/* 00011840 */ 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x07, 0x5B, 0x01, 0x04, 0x00, 0x00, 0xF2, 0x02, 0x06, 0x06, -/* 00011850 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x04, 0x06, 0x8D, 0x01, 0x0E, 0x06, 0x01, 0x00, 0x4B, -/* 00011860 */ 0x06, 0x0F, 0x14, 0x00, 0x06, 0x8D, 0x01, 0x04, 0x06, 0x02, 0x00, 0x4B, 0x06, 0x07, 0x01, 0x00, -/* 00011870 */ 0x5A, 0x00, 0x02, 0xEE, 0x01, 0xFF, 0x06, 0x01, 0x00, 0x8D, 0x02, 0x03, 0x07, 0x03, 0x00, 0x6B, -/* 00011880 */ 0x06, 0x07, 0x01, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x07, 0x5B, 0x01, 0x04, 0x02, 0x00, 0x8D, 0x01, -/* 00011890 */ 0x0E, 0x08, 0x01, 0x00, 0x4B, 0x08, 0x5B, 0x02, 0x08, 0x02, 0x00, 0xF2, 0x03, 0x06, 0x06, 0x01, -/* 000118A0 */ 0x00, 0x00, 0x00, 0x02, 0x00, 0x44, 0x00, 0x06, 0x03, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, -/* 000118B0 */ 0xFE, 0x37, 0x03, 0xFE, 0x83, 0x02, 0xFF, 0x54, 0xBA, 0x01, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, -/* 000118C0 */ 0x22, 0x00, 0x29, 0x00, 0x0C, 0x00, 0x25, 0x00, 0x14, 0x00, 0x2F, 0x00, 0x35, 0x00, 0x48, 0x00, -/* 000118D0 */ 0x00, 0xBF, 0x5C, 0x08, 0x01, 0x00, 0x88, 0x01, 0x00, 0xFE, 0xB0, 0x09, 0x04, 0xA1, 0x41, 0xC1, -/* 000118E0 */ 0x00, 0xFE, 0x7D, 0x03, 0x95, 0xFF, 0x1E, 0xA7, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, -/* 000118F0 */ 0x01, 0xFF, 0x1E, 0xA7, 0x01, 0x00, 0xFE, 0xFE, 0x12, 0xFE, 0xFE, 0x12, 0x41, 0x17, 0x25, 0x38, -/* 00011900 */ 0x04, 0xAF, 0x89, 0x02, 0x03, 0x01, 0x37, 0x05, 0xFE, 0xCC, 0x03, 0x05, 0xFE, 0xCD, 0x03, 0x05, -/* 00011910 */ 0xFE, 0xCE, 0x03, 0x06, 0xFE, 0xCF, 0x03, 0x06, 0xFE, 0xD0, 0x03, 0x05, 0xFE, 0xD1, 0x03, 0x05, -/* 00011920 */ 0xFE, 0xD2, 0x03, 0x05, 0xFE, 0xD3, 0x03, 0x05, 0xFE, 0xD4, 0x03, 0x05, 0xFE, 0xD5, 0x03, 0x05, -/* 00011930 */ 0xFE, 0xD6, 0x03, 0x05, 0xFE, 0xD7, 0x03, 0x05, 0xFE, 0xD8, 0x03, 0x05, 0xFE, 0xD9, 0x03, 0x05, -/* 00011940 */ 0xFE, 0xDA, 0x03, 0x05, 0xFE, 0xDB, 0x03, 0x06, 0xFE, 0x5B, 0x03, 0x05, 0xFE, 0xDC, 0x03, 0x05, -/* 00011950 */ 0xFE, 0xDD, 0x03, 0x05, 0xFE, 0xDE, 0x03, 0x05, 0xFE, 0xDF, 0x03, 0x05, 0xFE, 0xE0, 0x03, 0x05, -/* 00011960 */ 0xFE, 0xE1, 0x03, 0x05, 0xFE, 0xE2, 0x03, 0x05, 0xFE, 0xE3, 0x03, 0x05, 0xFE, 0xE4, 0x03, 0x05, -/* 00011970 */ 0xFE, 0xE5, 0x03, 0x05, 0xFE, 0xE6, 0x03, 0x05, 0xFE, 0xE7, 0x03, 0x05, 0xFE, 0xB5, 0x04, 0x05, -/* 00011980 */ 0xFE, 0xE8, 0x03, 0x05, 0xFE, 0xE9, 0x03, 0x05, 0xFE, 0xEA, 0x03, 0x05, 0xFE, 0xEB, 0x03, 0x06, -/* 00011990 */ 0xFE, 0xEE, 0x03, 0xFE, 0x9F, 0x02, 0x4F, 0x25, 0x4F, 0x26, 0x4F, 0x27, 0x4F, 0x28, 0x4F, 0x29, -/* 000119A0 */ 0x4F, 0x2A, 0x4F, 0x2B, 0x4F, 0x2C, 0x4F, 0x2D, 0x4F, 0x2E, 0x4F, 0x2F, 0x4F, 0x30, 0x4F, 0x31, -/* 000119B0 */ 0x4F, 0x32, 0x4F, 0x33, 0x4F, 0x34, 0x4F, 0x35, 0x4F, 0x36, 0x47, 0x25, 0x02, 0x47, 0x26, 0x03, -/* 000119C0 */ 0x47, 0x38, 0x04, 0x01, 0x04, 0x01, 0x39, 0x25, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x05, -/* 000119D0 */ 0x01, 0x04, 0x01, 0x39, 0x26, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x06, 0x47, 0x27, 0x38, -/* 000119E0 */ 0x47, 0x28, 0x07, 0x2F, 0x38, 0x08, 0x09, 0x47, 0x29, 0x38, 0x47, 0x38, 0x0A, 0x01, 0x04, 0x01, -/* 000119F0 */ 0x39, 0x28, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x05, 0x01, 0x04, 0x01, 0x39, 0x29, 0x2F, -/* 00011A00 */ 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x0B, 0x47, 0x2A, 0x38, 0x47, 0x38, 0x0C, 0x01, 0x04, 0x01, -/* 00011A10 */ 0x39, 0x27, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x0D, 0x47, 0x2B, 0x38, 0x47, 0x38, 0x0A, -/* 00011A20 */ 0x01, 0x04, 0x01, 0x39, 0x26, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x0E, 0x47, 0x2C, 0x38, -/* 00011A30 */ 0x47, 0x38, 0x0A, 0x01, 0x04, 0x01, 0x39, 0x2C, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x0F, -/* 00011A40 */ 0x01, 0x04, 0x01, 0x39, 0x27, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x10, 0x47, 0x2D, 0x38, -/* 00011A50 */ 0x47, 0x38, 0x0A, 0x01, 0x04, 0x01, 0x39, 0x27, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x11, -/* 00011A60 */ 0x01, 0x04, 0x01, 0x39, 0x26, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x12, 0x01, 0x04, 0x01, -/* 00011A70 */ 0x39, 0x27, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x13, 0x47, 0x2E, 0x38, 0x47, 0x38, 0x0A, -/* 00011A80 */ 0x01, 0x04, 0x01, 0x39, 0x25, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x14, 0x01, 0x04, 0x01, -/* 00011A90 */ 0x39, 0x26, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x13, 0x47, 0x2F, 0x38, 0x47, 0x38, 0x0A, -/* 00011AA0 */ 0x01, 0x04, 0x01, 0x39, 0x25, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x15, 0x47, 0x30, 0x38, -/* 00011AB0 */ 0x47, 0x38, 0x0A, 0x01, 0x04, 0x01, 0x39, 0x25, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x16, -/* 00011AC0 */ 0x01, 0x04, 0x01, 0x39, 0x25, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x17, 0x47, 0x31, 0x38, -/* 00011AD0 */ 0x47, 0x39, 0x12, 0x01, 0x04, 0x01, 0x3A, 0x25, 0x2F, 0x39, 0x39, 0x3A, 0x2F, 0x39, 0x39, 0x18, -/* 00011AE0 */ 0xFC, 0x38, 0x0A, 0x39, 0x05, 0x47, 0x39, 0x19, 0x01, 0x04, 0x01, 0x3A, 0x31, 0x2F, 0x39, 0x39, -/* 00011AF0 */ 0x3A, 0x2F, 0x39, 0x39, 0x1A, 0x47, 0x3A, 0x05, 0x01, 0x04, 0x01, 0x3B, 0x25, 0x2F, 0x3A, 0x3A, -/* 00011B00 */ 0x3B, 0x2F, 0x3A, 0x3A, 0x1B, 0xFE, 0x38, 0x39, 0x3A, 0x02, 0xFD, 0x38, 0x0B, 0x04, 0x47, 0x32, -/* 00011B10 */ 0x38, 0x47, 0x38, 0x1C, 0x01, 0x04, 0x01, 0x39, 0x32, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, -/* 00011B20 */ 0x0B, 0x47, 0x39, 0x1D, 0x01, 0x04, 0x01, 0x3A, 0x30, 0x2F, 0x39, 0x39, 0x3A, 0x2F, 0x39, 0x39, -/* 00011B30 */ 0x1E, 0x2F, 0x38, 0x38, 0x39, 0x47, 0x39, 0x1D, 0x01, 0x04, 0x01, 0x3A, 0x2F, 0x2F, 0x39, 0x39, -/* 00011B40 */ 0x3A, 0x2F, 0x39, 0x39, 0x1E, 0x2F, 0x38, 0x38, 0x39, 0x47, 0x33, 0x38, 0x47, 0x38, 0x19, 0x01, -/* 00011B50 */ 0x04, 0x01, 0x39, 0x2E, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x1F, 0x47, 0x39, 0x20, 0x01, -/* 00011B60 */ 0x04, 0x01, 0x3A, 0x2D, 0x2F, 0x39, 0x39, 0x3A, 0x2F, 0x39, 0x39, 0x21, 0x2F, 0x38, 0x38, 0x39, -/* 00011B70 */ 0x47, 0x39, 0x19, 0x01, 0x04, 0x01, 0x3A, 0x2B, 0x2F, 0x39, 0x39, 0x3A, 0x2F, 0x39, 0x39, 0x22, -/* 00011B80 */ 0x2F, 0x38, 0x38, 0x39, 0x47, 0x34, 0x38, 0x47, 0x38, 0x23, 0x01, 0x04, 0x01, 0x39, 0x33, 0x2F, -/* 00011B90 */ 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x23, 0x01, 0x04, 0x01, 0x39, 0x34, 0x2F, 0x38, 0x38, 0x39, -/* 00011BA0 */ 0x2F, 0x38, 0x38, 0x23, 0x47, 0x35, 0x38, 0x47, 0x38, 0x0A, 0x01, 0x04, 0x01, 0x39, 0x35, 0x2F, -/* 00011BB0 */ 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x05, 0x01, 0x04, 0x01, 0x39, 0x2B, 0x2F, 0x38, 0x38, 0x39, -/* 00011BC0 */ 0x2F, 0x38, 0x38, 0x05, 0x01, 0x04, 0x01, 0x39, 0x2A, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, -/* 00011BD0 */ 0x0B, 0x47, 0x36, 0x38, 0x8D, 0x02, 0x09, 0x38, 0x00, 0x00, 0x07, 0x03, 0x00, 0x5B, 0x01, 0x33, -/* 00011BE0 */ 0x00, 0x00, 0x5B, 0x02, 0x24, 0x00, 0x00, 0xC2, 0x03, 0x38, 0x38, 0x00, 0x00, 0x01, 0x34, 0x01, -/* 00011BF0 */ 0x01, 0x0F, 0x38, 0x8D, 0x02, 0x09, 0x38, 0x00, 0x00, 0x07, 0x03, 0x00, 0x5B, 0x01, 0x34, 0x01, -/* 00011C00 */ 0x00, 0x5B, 0x02, 0x24, 0x01, 0x00, 0xC2, 0x03, 0x38, 0x38, 0x01, 0x00, 0x01, 0x34, 0x01, 0x01, -/* 00011C10 */ 0x10, 0x38, 0x8D, 0x02, 0x09, 0x38, 0x00, 0x00, 0x07, 0x03, 0x00, 0x5B, 0x01, 0x36, 0x02, 0x00, -/* 00011C20 */ 0x5B, 0x02, 0x24, 0x02, 0x00, 0xC2, 0x03, 0x38, 0x38, 0x02, 0x00, 0x01, 0x34, 0x01, 0x01, 0x11, -/* 00011C30 */ 0x38, 0xA6, 0x00, 0x24, 0x00, 0xFF, 0xFE, 0xAB, 0x01, 0x00, 0x16, 0x24, 0x00, 0x00, 0x00, 0x03, -/* 00011C40 */ 0x00, 0x1F, 0x00, 0x03, 0x00, 0x1F, 0x00, 0x20, 0x00, 0x33, 0x00, 0x03, 0x00, 0x77, 0x00, 0x07, -/* 00011C50 */ 0x00, 0xC0, 0x00, 0x20, 0x00, 0x44, 0x00, 0x13, 0x00, 0x7D, 0x00, 0x13, 0x00, 0x94, 0x00, 0x20, -/* 00011C60 */ 0x00, 0x83, 0x00, 0x2D, 0x00, 0x83, 0x00, 0x20, 0x00, 0x74, 0x00, 0x13, 0x00, 0x6A, 0x00, 0x20, -/* 00011C70 */ 0x00, 0x7A, 0x00, 0x41, 0x00, 0x00, 0x04, 0x3B, 0x00, 0x4C, 0x01, 0x3B, 0x00, 0x5A, 0x01, 0x20, -/* 00011C80 */ 0x00, 0x4B, 0x00, 0x2D, 0x00, 0x6E, 0x00, 0x1F, 0x00, 0x66, 0x00, 0x1F, 0x00, 0x8B, 0x00, 0x21, -/* 00011C90 */ 0x00, 0x72, 0x00, 0x00, 0xBF, 0x4C, 0x00, 0x00, 0x20, 0x88, 0x01, 0x00, 0xFE, 0xA9, 0x09, 0x04, -/* 00011CA0 */ 0xA1, 0x41, 0xC1, 0x00, 0xFE, 0x65, 0x03, 0x94, 0xFF, 0xE1, 0xA5, 0x01, 0x00, 0xFF, 0x00, 0x10, -/* 00011CB0 */ 0x01, 0x00, 0x01, 0x01, 0xFF, 0xE1, 0xA5, 0x01, 0x00, 0x55, 0x55, 0x41, 0x02, 0x02, 0x03, 0x05, -/* 00011CC0 */ 0x05, 0x02, 0x01, 0x02, 0x0D, 0xE0, 0x03, 0x00, 0x01, 0x34, 0x01, 0x01, 0x0E, 0x03, 0xA6, 0x00, -/* 00011CD0 */ 0x24, 0x00, 0x0A, 0xFE, 0xCA, 0x03, 0x01, 0xFF, 0x0F, 0xA6, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, -/* 00011CE0 */ 0x00, 0x0B, 0x00, 0x26, 0x00, 0x00, 0xBF, 0x5C, 0x0A, 0xC1, 0x43, 0xA8, 0x01, 0x00, 0xFE, 0x98, -/* 00011CF0 */ 0x09, 0x04, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x6E, 0x03, 0x93, 0xFF, 0x7C, 0xA3, 0x01, 0x00, 0xFF, -/* 00011D00 */ 0x00, 0x10, 0x01, 0x00, 0x06, 0x06, 0xFF, 0x7C, 0xA3, 0x01, 0x00, 0xFE, 0x45, 0x02, 0xFE, 0x45, -/* 00011D10 */ 0x02, 0x01, 0x0C, 0x07, 0x0F, 0x08, 0x3A, 0x37, 0x02, 0x01, 0x06, 0x05, 0x03, 0x03, 0x03, 0x03, -/* 00011D20 */ 0x01, 0x0E, 0x0F, 0x06, 0xFE, 0xF5, 0x03, 0x08, 0x06, 0xFE, 0xC7, 0x03, 0x05, 0xFE, 0xC8, 0x03, -/* 00011D30 */ 0x06, 0xFE, 0xC9, 0x03, 0xF8, 0x4F, 0x0C, 0x4F, 0x0D, 0x96, 0x10, 0x07, 0x08, 0x00, 0x00, 0x47, -/* 00011D40 */ 0x0C, 0x10, 0x2C, 0x10, 0x0C, 0x15, 0x03, 0x00, 0x10, 0x02, 0x09, 0xD6, 0x00, 0x8D, 0x02, 0x24, -/* 00011D50 */ 0x11, 0x00, 0x00, 0x6B, 0x10, 0x11, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x11, 0x5B, 0x01, 0x0C, -/* 00011D60 */ 0x00, 0x00, 0xF2, 0x02, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x0D, 0x10, 0x8D, -/* 00011D70 */ 0x02, 0x21, 0x10, 0x01, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x03, 0x5B, 0x01, 0x0D, 0x01, 0x00, -/* 00011D80 */ 0xEE, 0x02, 0x10, 0x10, 0x01, 0x00, 0x0F, 0x0D, 0x00, 0x10, 0x12, 0x08, 0x00, 0x0D, 0x09, 0x11, -/* 00011D90 */ 0x03, 0x00, 0x0D, 0x0A, 0x09, 0x67, 0x00, 0x8D, 0x02, 0x03, 0x11, 0x02, 0x00, 0x6B, 0x10, 0x11, -/* 00011DA0 */ 0x01, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x11, 0x8D, 0x02, 0x0B, 0x12, 0x03, 0x00, 0x07, 0x02, 0x00, -/* 00011DB0 */ 0x5A, 0x00, 0x03, 0x5B, 0x01, 0x0C, 0x03, 0x00, 0xEE, 0x02, 0x12, 0x12, 0x03, 0x00, 0x5B, 0x01, -/* 00011DC0 */ 0x12, 0x02, 0x00, 0x8D, 0x02, 0x0B, 0x12, 0x03, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x03, 0x5B, -/* 00011DD0 */ 0x01, 0x08, 0x04, 0x00, 0xEE, 0x02, 0x12, 0x12, 0x04, 0x00, 0x5B, 0x02, 0x12, 0x02, 0x00, 0x2F, -/* 00011DE0 */ 0x12, 0x04, 0x09, 0x2F, 0x12, 0x12, 0x05, 0x2F, 0x12, 0x12, 0x0A, 0x2F, 0x12, 0x12, 0x06, 0x5B, -/* 00011DF0 */ 0x03, 0x12, 0x02, 0x00, 0xF2, 0x04, 0xFF, 0x10, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x8D, 0x02, -/* 00011E00 */ 0x0F, 0x11, 0x04, 0x00, 0x6B, 0x10, 0x11, 0x02, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x11, 0x5B, 0x01, -/* 00011E10 */ 0x0D, 0x05, 0x00, 0xF2, 0x02, 0x00, 0x10, 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x09, 0x0B, 0x00, -/* 00011E20 */ 0x09, 0x06, 0x00, 0x47, 0x00, 0x0B, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x38, 0x03, -/* 00011E30 */ 0xFE, 0x8F, 0x02, 0x23, 0xFF, 0xCE, 0xA3, 0x01, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x09, 0x00, -/* 00011E40 */ 0x2D, 0x00, 0x0B, 0x00, 0x33, 0x00, 0x22, 0x00, 0x41, 0x00, 0x28, 0x00, 0x65, 0x00, 0x67, 0x00, -/* 00011E50 */ 0x8D, 0x00, 0x25, 0x00, 0x40, 0x00, 0x08, 0x00, 0x1F, 0x00, 0x00, 0xBF, 0x5C, 0x0A, 0xC1, 0x03, -/* 00011E60 */ 0x88, 0x01, 0x00, 0xFE, 0x7E, 0x09, 0x04, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x64, 0x03, 0x92, 0xFF, -/* 00011E70 */ 0x5F, 0xA0, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x06, 0x06, 0xFF, 0x5F, 0xA0, 0x01, 0x00, -/* 00011E80 */ 0xFE, 0x17, 0x03, 0xFE, 0x17, 0x03, 0x01, 0x0B, 0x0A, 0x11, 0x0A, 0x51, 0x4B, 0x02, 0x01, 0x08, -/* 00011E90 */ 0x06, 0x04, 0x04, 0x04, 0x04, 0x10, 0x06, 0xFE, 0xC2, 0x03, 0x06, 0xFE, 0xAD, 0x03, 0x06, 0xFE, -/* 00011EA0 */ 0xC3, 0x03, 0x08, 0x01, 0xFF, 0x05, 0xFE, 0xC4, 0x03, 0x05, 0xFE, 0xC6, 0x03, 0x05, 0xFE, 0xC5, -/* 00011EB0 */ 0x03, 0xFE, 0x62, 0x01, 0x4F, 0x0F, 0x96, 0x11, 0x0A, 0x0B, 0x00, 0x00, 0x47, 0x0F, 0x11, 0xA6, -/* 00011EC0 */ 0x11, 0x15, 0x03, 0x00, 0x0F, 0x11, 0x09, 0x43, 0x01, 0x0C, 0x03, 0x00, 0x0C, 0x02, 0x09, 0x22, -/* 00011ED0 */ 0x00, 0x8D, 0x02, 0x24, 0x12, 0x00, 0x00, 0x6B, 0x11, 0x12, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 00011EE0 */ 0x12, 0x5B, 0x01, 0x0F, 0x00, 0x00, 0xF2, 0x02, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 00011EF0 */ 0x47, 0x0F, 0x11, 0x0C, 0x03, 0x00, 0x0C, 0x03, 0x09, 0x22, 0x00, 0x8D, 0x02, 0x24, 0x12, 0x00, -/* 00011F00 */ 0x00, 0x6B, 0x11, 0x12, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x12, 0x5B, 0x01, 0x0F, 0x01, 0x00, -/* 00011F10 */ 0xF2, 0x02, 0x11, 0x11, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x0F, 0x11, 0x0C, 0x03, 0x00, -/* 00011F20 */ 0x0C, 0x04, 0x09, 0x22, 0x00, 0x8D, 0x02, 0x24, 0x12, 0x00, 0x00, 0x6B, 0x11, 0x12, 0x02, 0x07, -/* 00011F30 */ 0x02, 0x00, 0x5A, 0x00, 0x12, 0x5B, 0x01, 0x0F, 0x02, 0x00, 0xF2, 0x02, 0x11, 0x11, 0x02, 0x00, -/* 00011F40 */ 0x00, 0x00, 0x02, 0x00, 0x47, 0x0F, 0x11, 0xA6, 0x11, 0x15, 0x03, 0x00, 0x0D, 0x11, 0x09, 0xB5, -/* 00011F50 */ 0x00, 0x8D, 0x02, 0x06, 0x11, 0x01, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x05, 0x8D, 0x02, 0x17, -/* 00011F60 */ 0x12, 0x02, 0x00, 0x5B, 0x01, 0x12, 0x03, 0x00, 0x5B, 0x02, 0x0D, 0x03, 0x00, 0x5B, 0x03, 0x0F, -/* 00011F70 */ 0x03, 0x00, 0xEE, 0x04, 0x11, 0x11, 0x03, 0x00, 0x0C, 0x03, 0x00, 0x11, 0x06, 0x09, 0x86, 0x00, -/* 00011F80 */ 0x8D, 0x02, 0x03, 0x12, 0x03, 0x00, 0x6B, 0x11, 0x12, 0x03, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x12, -/* 00011F90 */ 0x8D, 0x02, 0x0B, 0x13, 0x04, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x05, 0x5B, 0x01, 0x0F, 0x05, -/* 00011FA0 */ 0x00, 0xEE, 0x02, 0x13, 0x13, 0x05, 0x00, 0x5B, 0x01, 0x13, 0x04, 0x00, 0x8D, 0x02, 0x0B, 0x13, -/* 00011FB0 */ 0x04, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x05, 0x5B, 0x01, 0x0B, 0x06, 0x00, 0xEE, 0x02, 0x13, -/* 00011FC0 */ 0x13, 0x06, 0x00, 0x5B, 0x02, 0x13, 0x04, 0x00, 0x8D, 0x02, 0x06, 0x13, 0x01, 0x00, 0x07, 0x04, -/* 00011FD0 */ 0x00, 0x5A, 0x00, 0x05, 0x8D, 0x02, 0x19, 0x14, 0x05, 0x00, 0x5B, 0x01, 0x14, 0x07, 0x00, 0x5B, -/* 00011FE0 */ 0x02, 0x0D, 0x07, 0x00, 0x5B, 0x03, 0x08, 0x07, 0x00, 0xEE, 0x04, 0x13, 0x13, 0x07, 0x00, 0x2F, -/* 00011FF0 */ 0x13, 0x07, 0x13, 0x2F, 0x13, 0x13, 0x09, 0x5B, 0x03, 0x13, 0x04, 0x00, 0xF2, 0x04, 0xFF, 0x11, -/* 00012000 */ 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x47, 0x00, 0x0F, 0x09, 0x08, 0x00, 0x47, 0x00, 0x0E, 0x09, -/* 00012010 */ 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x39, 0x03, 0xFE, 0x37, 0x03, 0xFE, 0x38, 0x03, 0xFE, -/* 00012020 */ 0x8F, 0x02, 0xFF, 0xA7, 0xA0, 0x01, 0x00, 0x0D, 0x02, 0x00, 0x00, 0x00, 0x09, 0x00, 0x28, 0x00, -/* 00012030 */ 0x0A, 0x00, 0x27, 0x00, 0x08, 0x00, 0x29, 0x00, 0x22, 0x00, 0x45, 0x00, 0x08, 0x00, 0x28, 0x00, -/* 00012040 */ 0x22, 0x00, 0x3D, 0x00, 0x08, 0x00, 0x28, 0x00, 0x22, 0x00, 0x3D, 0x00, 0x39, 0x00, 0x6B, 0x00, -/* 00012050 */ 0x86, 0x00, 0xA6, 0x00, 0x06, 0x00, 0x21, 0x00, 0x08, 0x00, 0x15, 0x00, 0x00, 0x3F, 0x5C, 0x08, -/* 00012060 */ 0xC1, 0x13, 0x88, 0x25, 0x00, 0xFE, 0x53, 0x09, 0x14, 0xA0, 0x41, 0xD1, 0x00, 0x8B, 0xFF, 0x4E, -/* 00012070 */ 0x9B, 0x01, 0x00, 0x06, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFF, 0x4E, 0x9B, 0x01, 0x00, -/* 00012080 */ 0xFE, 0xE0, 0x04, 0xFE, 0xE0, 0x04, 0x04, 0x0A, 0x0B, 0x04, 0x17, 0x17, 0x02, 0x01, 0x01, 0x06, -/* 00012090 */ 0x06, 0x06, 0x06, 0x01, 0x0A, 0x08, 0x06, 0xFE, 0x36, 0x03, 0x06, 0xFE, 0x37, 0x03, 0x06, 0xFE, -/* 000120A0 */ 0x38, 0x03, 0x06, 0xFE, 0x39, 0x03, 0x06, 0xFE, 0x3A, 0x03, 0x06, 0xFE, 0xB4, 0x04, 0x07, 0x60, -/* 000120B0 */ 0x8D, 0x02, 0x04, 0x0B, 0x00, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0x00, 0x00, 0x00, -/* 000120C0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0xD6, 0x00, 0x0D, 0x0C, 0x79, 0x0D, 0x0C, -/* 000120D0 */ 0x00, 0xD6, 0x01, 0x0D, 0x0C, 0x79, 0x0D, 0x0C, 0x01, 0xD6, 0x02, 0x0D, 0x0C, 0x79, 0x0D, 0x0C, -/* 000120E0 */ 0x02, 0xD6, 0x03, 0x0D, 0x0C, 0x79, 0x0D, 0x0C, 0x03, 0xD6, 0x04, 0x0D, 0x0C, 0x79, 0x0D, 0x0C, -/* 000120F0 */ 0x04, 0xD6, 0x05, 0x0D, 0x0C, 0x79, 0x0D, 0x0C, 0x05, 0x5B, 0x01, 0x0C, 0x00, 0x00, 0x5B, 0x02, -/* 00012100 */ 0x09, 0x00, 0x00, 0xEE, 0x03, 0x00, 0x0B, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, -/* 00012110 */ 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, -/* 00012120 */ 0x03, 0x00, 0x00, 0x37, 0x03, 0x00, 0x00, 0x38, 0x03, 0x00, 0x00, 0x39, 0x03, 0x00, 0x00, 0x3A, -/* 00012130 */ 0x03, 0x00, 0x00, 0xB4, 0x04, 0x00, 0x00, 0xFE, 0x36, 0x03, 0xFE, 0x37, 0x03, 0xFE, 0x38, 0x03, -/* 00012140 */ 0xFE, 0x39, 0x03, 0xFE, 0x3A, 0x03, 0xFE, 0xB4, 0x04, 0xFF, 0x64, 0x9B, 0x01, 0x00, 0x02, 0x00, -/* 00012150 */ 0x00, 0x00, 0x00, 0x5E, 0x00, 0xC9, 0x04, 0x00, 0xAD, 0x24, 0x01, 0x00, 0x32, 0x24, 0x01, 0x00, -/* 00012160 */ 0xB7, 0x23, 0x01, 0x00, 0x3C, 0x23, 0x01, 0x00, 0x2B, 0x22, 0x01, 0x00, 0x70, 0x21, 0x01, 0x00, -/* 00012170 */ 0xBF, 0x7C, 0x08, 0x03, 0x00, 0x88, 0x0B, 0x00, 0xFE, 0x71, 0x09, 0x19, 0xA2, 0x41, 0xC1, 0x00, -/* 00012180 */ 0xFE, 0xB4, 0x04, 0x91, 0xFF, 0x00, 0x00, 0x00, 0x02, 0xFF, 0xE2, 0x9E, 0x01, 0x00, 0xFF, 0x00, -/* 00012190 */ 0x10, 0x01, 0x00, 0x03, 0x03, 0xFF, 0xE2, 0x9E, 0x01, 0x00, 0xFE, 0x35, 0x01, 0xFE, 0x35, 0x01, -/* 000121A0 */ 0x01, 0x05, 0x04, 0x07, 0x05, 0x1A, 0x18, 0x17, 0x02, 0x02, 0x03, 0x01, 0x06, 0x00, 0x5A, 0x08, -/* 000121B0 */ 0x0B, 0x5E, 0xEB, 0x00, 0xEC, 0x00, 0x0E, 0x50, 0x00, 0x04, 0x8D, 0x02, 0x06, 0x07, 0x00, 0x00, -/* 000121C0 */ 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8D, 0x02, 0x13, 0x08, 0x01, 0x00, 0x5B, 0x01, 0x08, 0x00, -/* 000121D0 */ 0x00, 0x5B, 0x02, 0x04, 0x00, 0x00, 0x5B, 0x03, 0x05, 0x00, 0x00, 0xEE, 0x04, 0x07, 0x07, 0x00, -/* 000121E0 */ 0x00, 0x0E, 0x08, 0x00, 0x07, 0x47, 0x00, 0x03, 0xED, 0x00, 0x09, 0x21, 0x00, 0x8D, 0x02, 0x10, -/* 000121F0 */ 0x07, 0x02, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x04, 0x01, 0x00, 0xEE, 0x02, -/* 00012200 */ 0x07, 0x07, 0x01, 0x00, 0x47, 0x04, 0x07, 0x09, 0xAA, 0xFF, 0xED, 0x00, 0xA6, 0x00, 0x24, 0x00, -/* 00012210 */ 0xFF, 0x37, 0x9F, 0x01, 0x00, 0x05, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x19, 0x00, 0x2B, 0x00, -/* 00012220 */ 0x54, 0x00, 0x08, 0x00, 0x37, 0x00, 0x21, 0x00, 0x3B, 0x00, 0x00, 0xBF, 0x5C, 0x28, 0xC1, 0x03, -/* 00012230 */ 0x88, 0x03, 0x00, 0xFE, 0x68, 0x09, 0x16, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x3A, 0x03, 0x90, 0xFF, -/* 00012240 */ 0x00, 0x00, 0x00, 0x02, 0xFF, 0xCB, 0x9D, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, -/* 00012250 */ 0xFF, 0xCB, 0x9D, 0x01, 0x00, 0xFB, 0xFB, 0x01, 0x09, 0x06, 0x0A, 0x07, 0x28, 0x23, 0x02, 0x05, -/* 00012260 */ 0x01, 0x04, 0x02, 0x02, 0x02, 0x02, 0x09, 0x08, 0x01, 0x00, 0x01, 0x02, 0x01, 0x20, 0xAC, 0x8D, -/* 00012270 */ 0x02, 0x0A, 0x0A, 0x00, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x06, 0x00, 0x00, -/* 00012280 */ 0xEE, 0x02, 0x0A, 0x0A, 0x00, 0x00, 0x47, 0x07, 0x0A, 0x47, 0x08, 0x03, 0x8D, 0x02, 0x21, 0x0A, -/* 00012290 */ 0x01, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x07, 0x01, 0x00, 0xEE, 0x02, 0x0A, -/* 000122A0 */ 0x0A, 0x01, 0x00, 0x0F, 0x6A, 0x00, 0x0A, 0x8D, 0x02, 0x20, 0x0A, 0x02, 0x00, 0x07, 0x02, 0x00, -/* 000122B0 */ 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x07, 0x02, 0x00, 0xEE, 0x02, 0x0A, 0x0A, 0x02, 0x00, 0x0E, 0x4F, -/* 000122C0 */ 0x00, 0x0A, 0x8D, 0x02, 0x0F, 0x0B, 0x03, 0x00, 0x6B, 0x0A, 0x0B, 0x00, 0x07, 0x02, 0x00, 0x5A, -/* 000122D0 */ 0x00, 0x0B, 0x47, 0x0C, 0x07, 0x8D, 0x02, 0x0F, 0x0E, 0x03, 0x00, 0x6B, 0x0D, 0x0E, 0x01, 0x07, -/* 000122E0 */ 0x03, 0x00, 0x5A, 0x00, 0x0E, 0x5B, 0x01, 0x04, 0x04, 0x00, 0x5B, 0x02, 0x05, 0x04, 0x00, 0xF2, -/* 000122F0 */ 0x03, 0x0D, 0x0D, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x34, 0x0C, 0x0C, 0x0D, 0x00, 0x00, 0x5B, -/* 00012300 */ 0x01, 0x0C, 0x03, 0x00, 0xF2, 0x02, 0x0A, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x47, 0x08, -/* 00012310 */ 0x0A, 0x47, 0x00, 0x08, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x1B, 0x29, 0xFF, 0xEA, 0x9D, -/* 00012320 */ 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x29, 0x00, 0x03, 0x00, 0x19, 0x00, 0x36, -/* 00012330 */ 0x00, 0x38, 0x00, 0x4F, 0x00, 0x49, 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, 0xBF, 0x5C, 0x08, 0x01, -/* 00012340 */ 0x00, 0x88, 0x03, 0x00, 0xFE, 0x64, 0x09, 0x1E, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x39, 0x03, 0x8F, -/* 00012350 */ 0xFF, 0x00, 0x00, 0x00, 0x02, 0xFF, 0x55, 0x9D, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, -/* 00012360 */ 0x02, 0xFF, 0x55, 0x9D, 0x01, 0x00, 0x5D, 0x5D, 0x01, 0x03, 0x03, 0x05, 0x03, 0x10, 0x0E, 0x02, -/* 00012370 */ 0x01, 0x01, 0x04, 0x08, 0x33, 0xA6, 0x05, 0x15, 0x03, 0x00, 0x03, 0x05, 0x09, 0x1D, 0x00, 0x8D, -/* 00012380 */ 0x02, 0x07, 0x05, 0x00, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x03, 0x00, 0x00, -/* 00012390 */ 0xEE, 0x02, 0x05, 0x05, 0x00, 0x00, 0x47, 0x00, 0x05, 0x09, 0x05, 0x00, 0xA6, 0x05, 0x47, 0x00, -/* 000123A0 */ 0x05, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFF, 0x74, 0x9D, 0x01, 0x00, 0x02, 0x00, 0x00, -/* 000123B0 */ 0x00, 0x00, 0x31, 0x00, 0x3D, 0x00, 0x00, 0xBF, 0x5C, 0x08, 0x01, 0x00, 0x88, 0x03, 0x00, 0xFE, -/* 000123C0 */ 0x60, 0x09, 0x16, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x38, 0x03, 0x8E, 0xFF, 0x00, 0x00, 0x00, 0x02, -/* 000123D0 */ 0xFF, 0xDE, 0x9C, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0xDE, 0x9C, 0x01, -/* 000123E0 */ 0x00, 0x56, 0x56, 0x01, 0x03, 0x03, 0x05, 0x03, 0x10, 0x0E, 0x02, 0x01, 0x01, 0x04, 0x08, 0x33, -/* 000123F0 */ 0xA6, 0x05, 0x14, 0x03, 0x00, 0x03, 0x05, 0x09, 0x08, 0x00, 0xA7, 0x05, 0x47, 0x00, 0x05, 0x09, -/* 00012400 */ 0x1A, 0x00, 0x8D, 0x02, 0x0A, 0x05, 0x00, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, -/* 00012410 */ 0x03, 0x00, 0x00, 0xEE, 0x02, 0x05, 0x05, 0x00, 0x00, 0x47, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA6, -/* 00012420 */ 0x00, 0x24, 0x00, 0xFF, 0xFD, 0x9C, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x31, 0x00, 0x36, -/* 00012430 */ 0x00, 0x00, 0xBF, 0x5C, 0x08, 0x01, 0x00, 0x88, 0x03, 0x00, 0xFE, 0x5C, 0x09, 0x16, 0xA2, 0x41, -/* 00012440 */ 0xC1, 0x00, 0xFE, 0x37, 0x03, 0x8D, 0xFF, 0x00, 0x00, 0x00, 0x02, 0xFF, 0x69, 0x9C, 0x01, 0x00, -/* 00012450 */ 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0x69, 0x9C, 0x01, 0x00, 0x5C, 0x5C, 0x01, 0x03, -/* 00012460 */ 0x03, 0x05, 0x03, 0x10, 0x0E, 0x02, 0x01, 0x01, 0x04, 0x08, 0x33, 0xA6, 0x05, 0x15, 0x03, 0x00, -/* 00012470 */ 0x03, 0x05, 0x09, 0x1D, 0x00, 0x8D, 0x02, 0x0B, 0x05, 0x00, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 00012480 */ 0x02, 0x5B, 0x01, 0x03, 0x00, 0x00, 0xEE, 0x02, 0x05, 0x05, 0x00, 0x00, 0x47, 0x00, 0x05, 0x09, -/* 00012490 */ 0x05, 0x00, 0xA6, 0x05, 0x47, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFF, 0x88, -/* 000124A0 */ 0x9C, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x31, 0x00, 0x3C, 0x00, 0x00, 0xBF, 0x5C, 0x08, -/* 000124B0 */ 0xC1, 0x03, 0x88, 0x03, 0x00, 0xFE, 0x55, 0x09, 0x16, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x36, 0x03, -/* 000124C0 */ 0x8C, 0xFF, 0x00, 0x00, 0x00, 0x02, 0xFF, 0x90, 0x9B, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, -/* 000124D0 */ 0x02, 0x02, 0xFF, 0x90, 0x9B, 0x01, 0x00, 0xC0, 0xC0, 0x01, 0x04, 0x04, 0x06, 0x03, 0x17, 0x15, -/* 000124E0 */ 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x05, 0x07, 0x08, 0x55, 0x14, 0x03, 0x00, 0x04, 0x02, -/* 000124F0 */ 0x09, 0x1A, 0x00, 0x8D, 0x02, 0x03, 0x07, 0x00, 0x00, 0x6B, 0x06, 0x07, 0x00, 0x07, 0x01, 0x00, -/* 00012500 */ 0x5A, 0x00, 0x07, 0xF2, 0x01, 0xFF, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA6, 0x06, 0x15, -/* 00012510 */ 0x03, 0x00, 0x04, 0x06, 0x09, 0x1D, 0x00, 0x8D, 0x02, 0x08, 0x06, 0x01, 0x00, 0x07, 0x02, 0x00, -/* 00012520 */ 0x5A, 0x00, 0x03, 0x5B, 0x01, 0x04, 0x01, 0x00, 0xEE, 0x02, 0x06, 0x06, 0x01, 0x00, 0x47, 0x00, -/* 00012530 */ 0x06, 0x09, 0x05, 0x00, 0xA6, 0x06, 0x47, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, -/* 00012540 */ 0xFE, 0x89, 0x02, 0xFF, 0xAF, 0x9B, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x26, -/* 00012550 */ 0x00, 0x1A, 0x00, 0x3E, 0x00, 0x31, 0x00, 0x3C, 0x00, 0x00, 0xBF, 0x5C, 0x0A, 0xC1, 0x63, 0xA8, -/* 00012560 */ 0x01, 0x00, 0xFE, 0x38, 0x09, 0x20, 0xA0, 0x41, 0xC1, 0x00, 0xFE, 0xEC, 0x02, 0x8A, 0xFF, 0xC7, -/* 00012570 */ 0x97, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFF, 0xC7, 0x97, 0x01, 0x00, 0xFE, -/* 00012580 */ 0x70, 0x03, 0xFE, 0x70, 0x03, 0x01, 0x07, 0x05, 0x08, 0x06, 0x3E, 0x3C, 0x02, 0x02, 0x05, 0x06, -/* 00012590 */ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x07, 0x08, 0x08, 0x01, 0x00, 0x01, 0x01, 0xFE, 0xFF, 0x00, -/* 000125A0 */ 0x4F, 0x05, 0x4F, 0x06, 0x8D, 0x01, 0x0D, 0x09, 0x00, 0x00, 0x4B, 0x09, 0x0E, 0x0B, 0x00, 0x09, -/* 000125B0 */ 0x8D, 0x01, 0x0D, 0x00, 0x00, 0x00, 0x4B, 0x00, 0x09, 0xE2, 0x00, 0x8D, 0x02, 0x33, 0x09, 0x01, -/* 000125C0 */ 0x00, 0x4B, 0x09, 0x0E, 0x82, 0x00, 0x09, 0x8D, 0x01, 0x0F, 0x09, 0x02, 0x00, 0x4B, 0x09, 0x0F, -/* 000125D0 */ 0x14, 0x00, 0x09, 0x8D, 0x01, 0x05, 0x09, 0x03, 0x00, 0x4B, 0x09, 0x07, 0x01, 0x00, 0x5A, 0x00, -/* 000125E0 */ 0x02, 0xEE, 0x01, 0xFF, 0x09, 0x00, 0x00, 0x8D, 0x01, 0x0A, 0x09, 0x04, 0x00, 0x4B, 0x09, 0x07, -/* 000125F0 */ 0x01, 0x00, 0x5A, 0x00, 0x02, 0xEE, 0x01, 0x09, 0x09, 0x01, 0x00, 0x47, 0x05, 0x09, 0x8D, 0x02, -/* 00012600 */ 0x03, 0x0A, 0x05, 0x00, 0x6B, 0x09, 0x0A, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0A, 0x5B, 0x01, -/* 00012610 */ 0x05, 0x02, 0x00, 0x8D, 0x01, 0x0F, 0x0B, 0x02, 0x00, 0x4B, 0x0B, 0x5B, 0x02, 0x0B, 0x02, 0x00, -/* 00012620 */ 0xF2, 0x03, 0x09, 0x09, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x47, 0x06, 0x09, 0x0E, 0x0F, 0x00, -/* 00012630 */ 0x06, 0x96, 0x09, 0x06, 0x03, 0x00, 0x00, 0x01, 0x34, 0x01, 0x01, 0x0D, 0x09, 0x09, 0x06, 0x00, -/* 00012640 */ 0x01, 0x34, 0x01, 0x01, 0x0D, 0x05, 0x09, 0x47, 0x00, 0x8D, 0x02, 0x03, 0x0A, 0x05, 0x00, 0x6B, -/* 00012650 */ 0x09, 0x0A, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0A, 0x8D, 0x01, 0x0A, 0x0B, 0x04, 0x00, 0x4B, -/* 00012660 */ 0x0B, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x02, 0xEE, 0x01, 0x0B, 0x0B, 0x04, 0x00, 0x5B, 0x01, 0x0B, -/* 00012670 */ 0x03, 0x00, 0xE0, 0x0B, 0x00, 0x5B, 0x02, 0x0B, 0x03, 0x00, 0xF2, 0x03, 0x09, 0x09, 0x00, 0x00, -/* 00012680 */ 0x00, 0x00, 0x03, 0x00, 0x96, 0x09, 0x09, 0x04, 0x01, 0x00, 0x01, 0x34, 0x01, 0x01, 0x0D, 0x09, -/* 00012690 */ 0x8D, 0x01, 0x0D, 0x00, 0x00, 0x00, 0x4B, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, -/* 000126A0 */ 0x83, 0x02, 0x09, 0xFE, 0xB3, 0x04, 0x00, 0xFF, 0xDD, 0x97, 0x01, 0x00, 0x0D, 0x04, 0x00, 0x00, -/* 000126B0 */ 0x00, 0x0C, 0x00, 0x2B, 0x00, 0x0B, 0x00, 0x33, 0x00, 0x0C, 0x00, 0x26, 0x00, 0x0C, 0x00, 0x29, -/* 000126C0 */ 0x00, 0x14, 0x00, 0x33, 0x00, 0x17, 0x00, 0x2C, 0x00, 0x2F, 0x00, 0x4D, 0x00, 0x04, 0x00, 0x5B, -/* 000126D0 */ 0x00, 0x0F, 0x00, 0x49, 0x00, 0x09, 0x00, 0xCB, 0x00, 0x47, 0x00, 0x6D, 0x00, 0x0D, 0x00, 0x24, -/* 000126E0 */ 0x00, 0x00, 0xBF, 0x7C, 0x0A, 0xC3, 0x03, 0x88, 0x09, 0x00, 0xFE, 0x26, 0x09, 0x19, 0xA2, 0x41, -/* 000126F0 */ 0xC1, 0x00, 0xFE, 0xEB, 0x02, 0x89, 0xFF, 0xA4, 0x94, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, -/* 00012700 */ 0x05, 0x05, 0xFF, 0xA4, 0x94, 0x01, 0x00, 0xFE, 0x91, 0x02, 0xFE, 0x91, 0x02, 0x01, 0x0C, 0x06, -/* 00012710 */ 0x10, 0x06, 0x41, 0x36, 0x18, 0x02, 0x01, 0x04, 0x04, 0x01, 0x01, 0x01, 0x01, 0x01, 0x0F, 0x66, -/* 00012720 */ 0xBF, 0x05, 0xFE, 0xBC, 0x03, 0x08, 0x01, 0x00, 0x01, 0x01, 0xEE, 0xA6, 0x0D, 0xA6, 0x0E, 0x14, -/* 00012730 */ 0x03, 0x00, 0x07, 0x02, 0x09, 0x0C, 0x00, 0x8D, 0x02, 0x27, 0x11, 0x00, 0x00, 0x47, 0x10, 0x11, -/* 00012740 */ 0x09, 0x09, 0x00, 0x8D, 0x02, 0x26, 0x11, 0x01, 0x00, 0x47, 0x10, 0x11, 0x47, 0x0A, 0x10, 0x8D, -/* 00012750 */ 0x02, 0x05, 0x10, 0x02, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x03, 0x5B, 0x01, 0x06, 0x00, 0x00, -/* 00012760 */ 0xEE, 0x02, 0x10, 0x10, 0x00, 0x00, 0x47, 0x0B, 0x10, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x03, 0xEE, -/* 00012770 */ 0x01, 0x10, 0x09, 0x01, 0x00, 0x47, 0x0C, 0x10, 0xA6, 0x10, 0x15, 0x03, 0x00, 0x0B, 0x10, 0x09, -/* 00012780 */ 0x06, 0x00, 0x47, 0x10, 0x0B, 0x09, 0x03, 0x00, 0x47, 0x10, 0x04, 0x47, 0x0B, 0x10, 0x47, 0x0D, -/* 00012790 */ 0x04, 0xEB, 0x00, 0xEC, 0x00, 0x12, 0x03, 0x00, 0x0D, 0x0B, 0x09, 0x4B, 0x00, 0x8D, 0x02, 0x29, -/* 000127A0 */ 0x10, 0x03, 0x00, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x03, 0x96, 0x11, 0x06, 0x0D, 0x00, 0x00, 0x5B, -/* 000127B0 */ 0x01, 0x11, 0x02, 0x00, 0x5B, 0x02, 0x0A, 0x02, 0x00, 0x5B, 0x03, 0x08, 0x02, 0x00, 0x5B, 0x04, -/* 000127C0 */ 0x0C, 0x02, 0x00, 0xEE, 0x05, 0x10, 0x10, 0x02, 0x00, 0x47, 0x0E, 0x10, 0x60, 0x10, 0x0E, 0x00, -/* 000127D0 */ 0xA6, 0x11, 0x15, 0x03, 0x00, 0x10, 0x11, 0x09, 0x08, 0x00, 0x47, 0x00, 0x0E, 0xED, 0x00, 0x09, -/* 000127E0 */ 0x35, 0x00, 0x28, 0x0D, 0x0D, 0x09, 0xAB, 0xFF, 0xED, 0x00, 0x8D, 0x02, 0x29, 0x10, 0x03, 0x00, -/* 000127F0 */ 0x07, 0x05, 0x00, 0x5A, 0x00, 0x03, 0x5B, 0x01, 0x0C, 0x03, 0x00, 0x5B, 0x02, 0x0A, 0x03, 0x00, -/* 00012800 */ 0xA6, 0x11, 0x5B, 0x03, 0x11, 0x03, 0x00, 0x5B, 0x04, 0x0C, 0x03, 0x00, 0xEE, 0x05, 0x00, 0x10, -/* 00012810 */ 0x03, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xF7, 0x01, 0xFF, 0xF3, 0x94, 0x01, -/* 00012820 */ 0x00, 0x0C, 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x58, 0x00, 0x1A, 0x00, 0x34, 0x00, 0x0F, 0x00, -/* 00012830 */ 0x32, 0x00, 0x16, 0x00, 0x39, 0x00, 0x07, 0x00, 0x0B, 0x00, 0x08, 0x00, 0x1F, 0x00, 0x2F, 0x00, -/* 00012840 */ 0x69, 0x00, 0x0E, 0x00, 0x35, 0x00, 0x08, 0x00, 0x4F, 0xFF, 0x08, 0x00, 0xE2, 0x00, 0x2D, 0x00, -/* 00012850 */ 0x51, 0x00, 0x00, 0x3F, 0x5D, 0x1A, 0xC1, 0x73, 0xAD, 0x25, 0x00, 0xFE, 0xEE, 0x08, 0x1E, 0xA2, -/* 00012860 */ 0x41, 0xC1, 0x00, 0xFE, 0xEA, 0x02, 0x86, 0xFF, 0xF8, 0x8A, 0x01, 0x00, 0x02, 0xFF, 0x00, 0x10, -/* 00012870 */ 0x01, 0x00, 0x05, 0x05, 0xFF, 0xF8, 0x8A, 0x01, 0x00, 0xFE, 0x91, 0x09, 0xFE, 0x91, 0x09, 0x03, -/* 00012880 */ 0xFE, 0xAC, 0x04, 0xFE, 0xF7, 0x01, 0xFE, 0xAD, 0x04, 0x0E, 0x0B, 0x15, 0x05, 0x6D, 0x65, 0x02, -/* 00012890 */ 0x01, 0x09, 0x01, 0x0B, 0x05, 0x05, 0x05, 0x05, 0x01, 0x01, 0x01, 0x12, 0x13, 0x14, 0x15, 0x07, -/* 000128A0 */ 0x08, 0x01, 0x01, 0x01, 0x00, 0x06, 0xFE, 0xAF, 0x03, 0x05, 0xFE, 0xAE, 0x04, 0x06, 0xFE, 0xF7, -/* 000128B0 */ 0x03, 0x06, 0xFE, 0xAF, 0x04, 0x06, 0xFE, 0xB0, 0x04, 0xFE, 0xD6, 0x01, 0x94, 0x03, 0x0B, 0x94, -/* 000128C0 */ 0x04, 0x0D, 0x4F, 0x11, 0x8D, 0x02, 0x03, 0x17, 0x00, 0x00, 0x6B, 0x16, 0x17, 0x00, 0x07, 0x02, -/* 000128D0 */ 0x00, 0x5A, 0x00, 0x17, 0x91, 0x03, 0x18, 0x01, 0x00, 0x5B, 0x01, 0x18, 0x00, 0x00, 0xF2, 0x02, -/* 000128E0 */ 0x16, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x0F, 0x16, 0x14, 0x03, 0x00, 0x0F, 0x02, -/* 000128F0 */ 0x09, 0x1F, 0x00, 0x8D, 0x02, 0x28, 0x16, 0x02, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x03, 0x91, -/* 00012900 */ 0x03, 0x17, 0x01, 0x00, 0x5B, 0x01, 0x17, 0x01, 0x00, 0xEE, 0x02, 0x16, 0x16, 0x01, 0x00, 0x47, -/* 00012910 */ 0x0F, 0x16, 0x0E, 0x2A, 0x00, 0x0F, 0x8D, 0x02, 0x06, 0x16, 0x03, 0x00, 0x07, 0x04, 0x00, 0x5A, -/* 00012920 */ 0x00, 0x03, 0x8D, 0x02, 0x16, 0x17, 0x04, 0x00, 0x5B, 0x01, 0x17, 0x02, 0x00, 0x5B, 0x02, 0x0F, -/* 00012930 */ 0x02, 0x00, 0xD3, 0x00, 0x17, 0x5B, 0x03, 0x17, 0x02, 0x00, 0xEE, 0x04, 0xFF, 0x16, 0x02, 0x00, -/* 00012940 */ 0x8D, 0x02, 0x03, 0x17, 0x00, 0x00, 0x6B, 0x16, 0x17, 0x01, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x17, -/* 00012950 */ 0x91, 0x03, 0x18, 0x01, 0x00, 0x5B, 0x01, 0x18, 0x03, 0x00, 0xE0, 0x18, 0x00, 0x5B, 0x02, 0x18, -/* 00012960 */ 0x03, 0x00, 0xF2, 0x03, 0x16, 0x16, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x96, 0x16, 0x16, 0x04, -/* 00012970 */ 0x00, 0x00, 0x94, 0x03, 0x16, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x03, 0x91, 0x03, 0x16, 0x01, 0x00, -/* 00012980 */ 0x5B, 0x01, 0x16, 0x04, 0x00, 0x5B, 0x02, 0x0E, 0x04, 0x00, 0xEE, 0x03, 0x16, 0x0C, 0x04, 0x00, -/* 00012990 */ 0x47, 0x10, 0x16, 0x91, 0x04, 0x16, 0x05, 0x00, 0xA6, 0x17, 0x15, 0x03, 0x00, 0x16, 0x17, 0x09, -/* 000129A0 */ 0x3A, 0x00, 0xCD, 0x16, 0x00, 0x00, 0x00, 0x94, 0x02, 0x16, 0x8D, 0x02, 0x06, 0x16, 0x03, 0x00, -/* 000129B0 */ 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x8D, 0x02, 0x16, 0x17, 0x04, 0x00, 0x5B, 0x01, 0x17, 0x05, -/* 000129C0 */ 0x00, 0x5B, 0x02, 0x0F, 0x05, 0x00, 0xD3, 0x01, 0x17, 0x5B, 0x03, 0x17, 0x05, 0x00, 0xEE, 0x04, -/* 000129D0 */ 0xFF, 0x16, 0x05, 0x00, 0x91, 0x02, 0x16, 0x06, 0x00, 0x47, 0x0F, 0x16, 0x47, 0x11, 0x10, 0x0E, -/* 000129E0 */ 0x6E, 0x00, 0x10, 0x0E, 0x36, 0x00, 0x0F, 0x8D, 0x02, 0x05, 0x16, 0x07, 0x00, 0x07, 0x02, 0x00, -/* 000129F0 */ 0x5A, 0x00, 0x03, 0x5B, 0x01, 0x0F, 0x06, 0x00, 0xEE, 0x02, 0x16, 0x16, 0x06, 0x00, 0x11, 0x03, -/* 00012A00 */ 0x00, 0x16, 0x05, 0x09, 0x17, 0x00, 0x8D, 0x02, 0x33, 0x16, 0x08, 0x00, 0x4B, 0x16, 0x0E, 0x07, -/* 00012A10 */ 0x00, 0x16, 0x2F, 0x10, 0x10, 0x06, 0x09, 0x04, 0x00, 0x2F, 0x10, 0x10, 0x07, 0x47, 0x16, 0x10, -/* 00012A20 */ 0x8D, 0x02, 0x06, 0x17, 0x03, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x8D, 0x02, 0x19, 0x18, -/* 00012A30 */ 0x09, 0x00, 0x5B, 0x01, 0x18, 0x07, 0x00, 0x5B, 0x02, 0x0F, 0x07, 0x00, 0x5B, 0x03, 0x06, 0x07, -/* 00012A40 */ 0x00, 0xEE, 0x04, 0x17, 0x17, 0x07, 0x00, 0x2F, 0x16, 0x16, 0x17, 0x47, 0x10, 0x16, 0x09, 0x05, -/* 00012A50 */ 0x00, 0xA6, 0x16, 0x47, 0x10, 0x16, 0x8D, 0x02, 0x04, 0x16, 0x0A, 0x00, 0x07, 0x03, 0x00, 0x5A, -/* 00012A60 */ 0x00, 0x03, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x79, -/* 00012A70 */ 0x10, 0x17, 0x02, 0x79, 0x0F, 0x17, 0x03, 0x79, 0x11, 0x17, 0x04, 0x5B, 0x01, 0x17, 0x08, 0x00, -/* 00012A80 */ 0x5B, 0x02, 0x02, 0x08, 0x00, 0xEE, 0x03, 0x00, 0x16, 0x08, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, -/* 00012A90 */ 0x24, 0x00, 0x01, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 00012AA0 */ 0x00, 0xF7, 0x01, 0x00, 0x00, 0xFB, 0x01, 0x00, 0x00, 0xF9, 0x01, 0x00, 0x00, 0xFE, 0xE0, 0x01, -/* 00012AB0 */ 0xFE, 0x83, 0x02, 0xFE, 0xF7, 0x01, 0xFE, 0xFB, 0x01, 0xFE, 0xF9, 0x01, 0x0D, 0xFE, 0xB1, 0x04, -/* 00012AC0 */ 0x00, 0xFF, 0x3C, 0x8B, 0x01, 0x00, 0x15, 0x08, 0x00, 0x00, 0x00, 0x27, 0x00, 0x36, 0x00, 0x08, -/* 00012AD0 */ 0x00, 0x81, 0x00, 0x1F, 0x00, 0x3A, 0x00, 0x04, 0x00, 0x1B, 0x00, 0x2A, 0x00, 0x53, 0x02, 0x35, -/* 00012AE0 */ 0x00, 0x49, 0x00, 0x1E, 0x00, 0x37, 0x00, 0x0F, 0x00, 0x50, 0x00, 0x08, 0x00, 0x1F, 0x00, 0x2A, -/* 00012AF0 */ 0x00, 0xB8, 0x01, 0x08, 0x00, 0xF9, 0x00, 0x03, 0x00, 0x29, 0x00, 0x04, 0x00, 0x1C, 0x00, 0x23, -/* 00012B00 */ 0x00, 0x3E, 0x00, 0x0C, 0x00, 0x2E, 0x00, 0x07, 0x00, 0x3E, 0x00, 0x04, 0x00, 0x40, 0x00, 0x34, -/* 00012B10 */ 0x00, 0x5C, 0x00, 0x05, 0x00, 0x29, 0x00, 0x3A, 0x00, 0x99, 0x00, 0x00, 0x1F, 0x2C, 0x01, 0x00, -/* 00012B20 */ 0x24, 0x2B, 0x01, 0x00, 0xBF, 0x5C, 0x0A, 0xC1, 0x23, 0x88, 0x01, 0x00, 0xFE, 0x03, 0x09, 0x3D, -/* 00012B30 */ 0xA2, 0x41, 0xD1, 0x00, 0x88, 0xFF, 0xBB, 0x8F, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, -/* 00012B40 */ 0x02, 0xFF, 0xBB, 0x8F, 0x01, 0x00, 0xFE, 0x77, 0x01, 0xFE, 0x77, 0x01, 0x41, 0x07, 0x05, 0x09, -/* 00012B50 */ 0x05, 0x22, 0x20, 0x03, 0x01, 0x03, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x08, 0x01, 0x01, 0x08, -/* 00012B60 */ 0x01, 0xFF, 0x99, 0x8D, 0x03, 0x03, 0x0A, 0x00, 0x00, 0x6B, 0x09, 0x0A, 0x00, 0x07, 0x03, 0x00, -/* 00012B70 */ 0x5A, 0x00, 0x0A, 0x5B, 0x01, 0x05, 0x00, 0x00, 0xE0, 0x0B, 0x00, 0x5B, 0x02, 0x0B, 0x00, 0x00, -/* 00012B80 */ 0xF2, 0x03, 0x09, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x06, 0x09, 0x96, 0x09, 0x06, -/* 00012B90 */ 0x02, 0x00, 0x00, 0x47, 0x07, 0x09, 0x8D, 0x03, 0x06, 0x09, 0x01, 0x00, 0x07, 0x04, 0x00, 0x5A, -/* 00012BA0 */ 0x00, 0x03, 0x8D, 0x03, 0x17, 0x0A, 0x02, 0x00, 0x5B, 0x01, 0x0A, 0x01, 0x00, 0x8D, 0x01, 0x04, -/* 00012BB0 */ 0x0A, 0x03, 0x00, 0x5B, 0x02, 0x0A, 0x01, 0x00, 0x5B, 0x03, 0x07, 0x01, 0x00, 0xEE, 0x04, 0x09, -/* 00012BC0 */ 0x09, 0x01, 0x00, 0x15, 0x03, 0x00, 0x09, 0x04, 0x09, 0x2D, 0x00, 0x8D, 0x03, 0x06, 0x09, 0x01, -/* 00012BD0 */ 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x8D, 0x03, 0x18, 0x0A, 0x04, 0x00, 0x5B, 0x01, 0x0A, -/* 00012BE0 */ 0x02, 0x00, 0x8D, 0x01, 0x02, 0x0A, 0x05, 0x00, 0x5B, 0x02, 0x0A, 0x02, 0x00, 0x5B, 0x03, 0x05, -/* 00012BF0 */ 0x02, 0x00, 0xEE, 0x04, 0xFF, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x83, 0x02, 0x0E, -/* 00012C00 */ 0xFE, 0xB2, 0x04, 0x00, 0xFF, 0xDF, 0x8F, 0x01, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, -/* 00012C10 */ 0x7A, 0x00, 0x09, 0x00, 0x24, 0x00, 0x35, 0x00, 0x5F, 0x00, 0x2F, 0x00, 0x55, 0x00, 0x00, 0xBF, -/* 00012C20 */ 0x5C, 0x08, 0x01, 0x00, 0x88, 0x01, 0x00, 0xFE, 0xF6, 0x08, 0x3C, 0xA2, 0x41, 0xD1, 0x00, 0x87, -/* 00012C30 */ 0xFF, 0x78, 0x8C, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0x78, 0x8C, 0x01, -/* 00012C40 */ 0x00, 0x7D, 0x7D, 0x41, 0x04, 0x05, 0x07, 0x06, 0x0F, 0x0F, 0x03, 0x01, 0x03, 0x06, 0x06, 0xFE, -/* 00012C50 */ 0xAF, 0x03, 0x06, 0xFE, 0x5B, 0x03, 0x08, 0x3E, 0x8D, 0x03, 0x06, 0x07, 0x00, 0x00, 0x07, 0x05, -/* 00012C60 */ 0x00, 0x5A, 0x00, 0x04, 0x8D, 0x03, 0x1D, 0x08, 0x01, 0x00, 0x5B, 0x01, 0x08, 0x00, 0x00, 0x8D, -/* 00012C70 */ 0x01, 0x03, 0x08, 0x02, 0x00, 0x5B, 0x02, 0x08, 0x00, 0x00, 0x2F, 0x08, 0x02, 0x05, 0x5B, 0x03, -/* 00012C80 */ 0x08, 0x00, 0x00, 0x5B, 0x04, 0x03, 0x00, 0x00, 0xEE, 0x05, 0x07, 0x07, 0x00, 0x00, 0x92, 0x01, -/* 00012C90 */ 0x03, 0x07, 0xA6, 0x00, 0x24, 0x00, 0xFF, 0x9C, 0x8C, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -/* 00012CA0 */ 0x3C, 0x00, 0x58, 0x00, 0x00, 0x3F, 0x5C, 0x0A, 0xC1, 0x03, 0x88, 0x05, 0x00, 0xFE, 0xD5, 0x08, -/* 00012CB0 */ 0x1E, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xE9, 0x02, 0x84, 0xFF, 0xC7, 0x86, 0x01, 0x00, 0x01, 0xFF, -/* 00012CC0 */ 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0xC7, 0x86, 0x01, 0x00, 0xFE, 0x11, 0x04, 0xFE, 0x11, -/* 00012CD0 */ 0x04, 0x07, 0x05, 0x09, 0x04, 0x29, 0x26, 0x02, 0x01, 0x04, 0x03, 0x03, 0x03, 0x03, 0x03, 0x08, -/* 00012CE0 */ 0x08, 0x01, 0x00, 0x06, 0xFE, 0xAF, 0x03, 0xA4, 0x4F, 0x06, 0x4F, 0x07, 0x8D, 0x01, 0x10, 0x09, -/* 00012CF0 */ 0x00, 0x00, 0x4B, 0x09, 0x0F, 0x14, 0x00, 0x09, 0x8D, 0x01, 0x05, 0x09, 0x01, 0x00, 0x4B, 0x09, -/* 00012D00 */ 0x07, 0x01, 0x00, 0x5A, 0x00, 0x02, 0xEE, 0x01, 0xFF, 0x09, 0x00, 0x00, 0x8D, 0x02, 0x03, 0x0A, -/* 00012D10 */ 0x02, 0x00, 0x6B, 0x09, 0x0A, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0A, 0x5B, 0x01, 0x05, 0x01, -/* 00012D20 */ 0x00, 0x8D, 0x01, 0x10, 0x0B, 0x00, 0x00, 0x4B, 0x0B, 0x5B, 0x02, 0x0B, 0x01, 0x00, 0xF2, 0x03, -/* 00012D30 */ 0x09, 0x09, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x06, 0x09, 0x0F, 0x05, 0x00, 0x06, 0xA6, -/* 00012D40 */ 0x00, 0x09, 0x46, 0x00, 0x96, 0x0B, 0x06, 0x03, 0x00, 0x00, 0x6B, 0x0A, 0x0B, 0x01, 0x07, 0x02, -/* 00012D50 */ 0x00, 0x5A, 0x00, 0x0B, 0x5B, 0x01, 0x04, 0x02, 0x00, 0xF2, 0x02, 0x0A, 0x0A, 0x01, 0x00, 0x00, -/* 00012D60 */ 0x00, 0x02, 0x00, 0x6B, 0x09, 0x0A, 0x02, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0A, 0xD3, 0x00, 0x0B, -/* 00012D70 */ 0x5B, 0x01, 0x0B, 0x03, 0x00, 0xF2, 0x02, 0x09, 0x09, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x47, -/* 00012D80 */ 0x07, 0x09, 0x47, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x83, 0x02, 0xFE, -/* 00012D90 */ 0x45, 0x01, 0x7E, 0xFF, 0xE3, 0x86, 0x01, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x24, -/* 00012DA0 */ 0x00, 0x14, 0x00, 0x2B, 0x00, 0x2F, 0x00, 0x4B, 0x00, 0x04, 0x00, 0x1A, 0x00, 0x05, 0x00, 0x5C, -/* 00012DB0 */ 0x02, 0x3E, 0x00, 0xCD, 0x00, 0x08, 0x00, 0x17, 0x00, 0x00, 0xBE, 0x2D, 0x01, 0x00, 0xBF, 0x4C, -/* 00012DC0 */ 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0xFE, 0xE8, 0x08, 0x36, 0xA2, 0x41, 0xD0, 0x00, 0x85, 0xFE, -/* 00012DD0 */ 0x01, 0x10, 0xFF, 0x21, 0x8A, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0x21, -/* 00012DE0 */ 0x8A, 0x01, 0x00, 0x0A, 0x0A, 0x01, 0x02, 0x02, 0x03, 0x0A, 0x0A, 0x02, 0x17, 0xAA, 0x03, 0x0F, -/* 00012DF0 */ 0x02, 0x00, 0x02, 0xA9, 0x03, 0xAA, 0x00, 0x0F, 0x02, 0x00, 0x03, 0xA9, 0x00, 0x09, 0x02, 0x00, -/* 00012E00 */ 0xA6, 0x00, 0x24, 0x00, 0xFF, 0x28, 0x8A, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, -/* 00012E10 */ 0x03, 0x00, 0x00, 0xBF, 0x5C, 0x0A, 0xC1, 0x43, 0xA8, 0x01, 0x00, 0xFE, 0xBE, 0x08, 0x1E, 0xA2, -/* 00012E20 */ 0x41, 0xC1, 0x00, 0xFE, 0xAB, 0x04, 0x83, 0xFF, 0x34, 0x82, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, -/* 00012E30 */ 0x00, 0x02, 0x02, 0xFF, 0x34, 0x82, 0x01, 0x00, 0xFE, 0x73, 0x04, 0xFE, 0x73, 0x04, 0x01, 0x09, -/* 00012E40 */ 0x09, 0x0D, 0x04, 0x56, 0x4A, 0x02, 0x05, 0x05, 0x04, 0x05, 0x05, 0x05, 0x05, 0x01, 0x0C, 0x0D, -/* 00012E50 */ 0x07, 0x08, 0x01, 0x01, 0x01, 0x02, 0x06, 0xFE, 0xAF, 0x03, 0x06, 0xFE, 0x5B, 0x03, 0x01, 0x03, -/* 00012E60 */ 0xFE, 0x5D, 0x01, 0x4F, 0x0A, 0x4F, 0x0B, 0x8D, 0x02, 0x03, 0x0F, 0x00, 0x00, 0x60, 0x0F, 0x0F, -/* 00012E70 */ 0x00, 0x6B, 0x0E, 0x0F, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0F, 0x5B, 0x01, 0x09, 0x00, 0x00, -/* 00012E80 */ 0xF2, 0x02, 0x0E, 0x0E, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x0A, 0x0E, 0xA6, 0x0E, 0x14, -/* 00012E90 */ 0x03, 0x00, 0x0A, 0x0E, 0x09, 0x0A, 0x01, 0x8D, 0x02, 0x03, 0x0F, 0x00, 0x00, 0x6B, 0x0E, 0x0F, -/* 00012EA0 */ 0x02, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0F, 0x5B, 0x01, 0x09, 0x01, 0x00, 0xF2, 0x02, 0x0E, 0x0E, -/* 00012EB0 */ 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x0A, 0x0E, 0x14, 0x03, 0x00, 0x0A, 0x02, 0x09, 0x9A, -/* 00012EC0 */ 0x00, 0x8D, 0x01, 0x0F, 0x0E, 0x01, 0x00, 0x4B, 0x0E, 0x0F, 0x14, 0x00, 0x0E, 0x8D, 0x01, 0x05, -/* 00012ED0 */ 0x0E, 0x02, 0x00, 0x4B, 0x0E, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x03, 0xEE, 0x01, 0xFF, 0x0E, 0x02, -/* 00012EE0 */ 0x00, 0x8D, 0x02, 0x03, 0x0F, 0x00, 0x00, 0x6B, 0x0E, 0x0F, 0x03, 0x07, 0x03, 0x00, 0x5A, 0x00, -/* 00012EF0 */ 0x0F, 0x5B, 0x01, 0x09, 0x03, 0x00, 0x8D, 0x01, 0x0F, 0x10, 0x01, 0x00, 0x4B, 0x10, 0x5B, 0x02, -/* 00012F00 */ 0x10, 0x03, 0x00, 0xF2, 0x03, 0x0E, 0x0E, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x47, 0x0B, 0x0E, -/* 00012F10 */ 0x96, 0x0E, 0x0B, 0x04, 0x00, 0x00, 0x96, 0x0F, 0x0B, 0x05, 0x01, 0x00, 0x0E, 0x10, 0x00, 0x0F, -/* 00012F20 */ 0x96, 0x10, 0x0B, 0x05, 0x02, 0x00, 0x2F, 0x10, 0x06, 0x10, 0x47, 0x0F, 0x10, 0x09, 0x03, 0x00, -/* 00012F30 */ 0x47, 0x0F, 0x07, 0x2F, 0x0E, 0x0E, 0x0F, 0x96, 0x0F, 0x0B, 0x08, 0x03, 0x00, 0x0E, 0x10, 0x00, -/* 00012F40 */ 0x0F, 0x96, 0x10, 0x0B, 0x08, 0x04, 0x00, 0x2F, 0x10, 0x06, 0x10, 0x47, 0x0F, 0x10, 0x09, 0x03, -/* 00012F50 */ 0x00, 0x47, 0x0F, 0x07, 0x2F, 0x0E, 0x0E, 0x0F, 0x47, 0x0A, 0x0E, 0x8D, 0x02, 0x03, 0x0F, 0x00, -/* 00012F60 */ 0x00, 0x60, 0x0F, 0x0F, 0x00, 0x6B, 0x0E, 0x0F, 0x04, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0F, 0x5B, -/* 00012F70 */ 0x01, 0x09, 0x04, 0x00, 0xA6, 0x10, 0x14, 0x03, 0x00, 0x0A, 0x10, 0x09, 0x0E, 0x00, 0x8D, 0x02, -/* 00012F80 */ 0x34, 0x11, 0x03, 0x00, 0x4B, 0x11, 0x47, 0x10, 0x11, 0x09, 0x03, 0x00, 0x47, 0x10, 0x0A, 0x5B, -/* 00012F90 */ 0x02, 0x10, 0x04, 0x00, 0xF2, 0x03, 0xFF, 0x0E, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x09, 0x15, -/* 00012FA0 */ 0x00, 0x8D, 0x02, 0x34, 0x0E, 0x03, 0x00, 0x4B, 0x0E, 0x14, 0x03, 0x00, 0x0A, 0x0E, 0x09, 0x05, -/* 00012FB0 */ 0x00, 0xA6, 0x0E, 0x47, 0x0A, 0x0E, 0x47, 0x00, 0x0A, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, -/* 00012FC0 */ 0xFE, 0x62, 0x03, 0xFE, 0x84, 0x01, 0xFE, 0xDD, 0x01, 0xFE, 0x83, 0x02, 0xFE, 0x87, 0x01, 0xFF, -/* 00012FD0 */ 0x5E, 0x82, 0x01, 0x00, 0x0D, 0x04, 0x00, 0x00, 0x00, 0x26, 0x00, 0x53, 0x00, 0x0A, 0x00, 0x30, -/* 00012FE0 */ 0x00, 0x22, 0x00, 0x51, 0x00, 0x08, 0x00, 0x2F, 0x00, 0x0C, 0x00, 0x2D, 0x00, 0x14, 0x00, 0x3A, -/* 00012FF0 */ 0x00, 0x2F, 0x00, 0xB1, 0x00, 0x4B, 0x00, 0x34, 0x01, 0x46, 0x00, 0x80, 0x00, 0x10, 0x00, 0x30, -/* 00013000 */ 0x00, 0x05, 0x00, 0x2E, 0x00, 0x08, 0x00, 0x1B, 0x00, 0x00, 0xBF, 0x5C, 0x0A, 0xC1, 0x43, 0xA8, -/* 00013010 */ 0x01, 0x00, 0xFE, 0xA3, 0x08, 0x1F, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xAA, 0x04, 0x82, 0xFF, 0x8E, -/* 00013020 */ 0x7D, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFF, 0x8E, 0x7D, 0x01, 0x00, 0xFE, -/* 00013030 */ 0x86, 0x04, 0xFE, 0x86, 0x04, 0x01, 0x0A, 0x09, 0x0E, 0x04, 0x5F, 0x52, 0x02, 0x05, 0x05, 0x04, -/* 00013040 */ 0x05, 0x05, 0x05, 0x05, 0x01, 0x0D, 0x0E, 0x07, 0x08, 0x01, 0x01, 0x01, 0x02, 0x06, 0xFE, 0xAF, -/* 00013050 */ 0x03, 0x06, 0xFE, 0x5B, 0x03, 0x01, 0x03, 0xFE, 0x7C, 0x01, 0x4F, 0x0C, 0x8D, 0x02, 0x03, 0x10, -/* 00013060 */ 0x00, 0x00, 0x60, 0x10, 0x10, 0x00, 0x6B, 0x0F, 0x10, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x10, -/* 00013070 */ 0x5B, 0x01, 0x09, 0x00, 0x00, 0xF2, 0x02, 0x0F, 0x0F, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, -/* 00013080 */ 0x0B, 0x0F, 0xA6, 0x0F, 0x14, 0x03, 0x00, 0x0B, 0x0F, 0x09, 0x0A, 0x01, 0x8D, 0x02, 0x03, 0x10, -/* 00013090 */ 0x00, 0x00, 0x6B, 0x0F, 0x10, 0x02, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x10, 0x5B, 0x01, 0x09, 0x01, -/* 000130A0 */ 0x00, 0xF2, 0x02, 0x0F, 0x0F, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x0B, 0x0F, 0x14, 0x03, -/* 000130B0 */ 0x00, 0x0B, 0x02, 0x09, 0x9A, 0x00, 0x8D, 0x01, 0x0F, 0x0F, 0x01, 0x00, 0x4B, 0x0F, 0x0F, 0x14, -/* 000130C0 */ 0x00, 0x0F, 0x8D, 0x01, 0x05, 0x0F, 0x02, 0x00, 0x4B, 0x0F, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x03, -/* 000130D0 */ 0xEE, 0x01, 0xFF, 0x0F, 0x02, 0x00, 0x8D, 0x02, 0x03, 0x10, 0x00, 0x00, 0x6B, 0x0F, 0x10, 0x03, -/* 000130E0 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x10, 0x5B, 0x01, 0x09, 0x03, 0x00, 0x8D, 0x01, 0x0F, 0x11, 0x01, -/* 000130F0 */ 0x00, 0x4B, 0x11, 0x5B, 0x02, 0x11, 0x03, 0x00, 0xF2, 0x03, 0x0F, 0x0F, 0x03, 0x00, 0x00, 0x00, -/* 00013100 */ 0x03, 0x00, 0x47, 0x0C, 0x0F, 0x96, 0x0F, 0x0C, 0x04, 0x00, 0x00, 0x96, 0x10, 0x0C, 0x05, 0x01, -/* 00013110 */ 0x00, 0x0E, 0x10, 0x00, 0x10, 0x96, 0x11, 0x0C, 0x05, 0x02, 0x00, 0x2F, 0x11, 0x06, 0x11, 0x47, -/* 00013120 */ 0x10, 0x11, 0x09, 0x03, 0x00, 0x47, 0x10, 0x07, 0x2F, 0x0F, 0x0F, 0x10, 0x96, 0x10, 0x0C, 0x08, -/* 00013130 */ 0x03, 0x00, 0x0E, 0x10, 0x00, 0x10, 0x96, 0x11, 0x0C, 0x08, 0x04, 0x00, 0x2F, 0x11, 0x06, 0x11, -/* 00013140 */ 0x47, 0x10, 0x11, 0x09, 0x03, 0x00, 0x47, 0x10, 0x07, 0x2F, 0x0F, 0x0F, 0x10, 0x47, 0x0B, 0x0F, -/* 00013150 */ 0x8D, 0x02, 0x03, 0x10, 0x00, 0x00, 0x60, 0x10, 0x10, 0x00, 0x6B, 0x0F, 0x10, 0x04, 0x07, 0x03, -/* 00013160 */ 0x00, 0x5A, 0x00, 0x10, 0x5B, 0x01, 0x09, 0x04, 0x00, 0xA6, 0x11, 0x14, 0x03, 0x00, 0x0B, 0x11, -/* 00013170 */ 0x09, 0x0E, 0x00, 0x8D, 0x02, 0x34, 0x12, 0x03, 0x00, 0x4B, 0x12, 0x47, 0x11, 0x12, 0x09, 0x03, -/* 00013180 */ 0x00, 0x47, 0x11, 0x0B, 0x5B, 0x02, 0x11, 0x04, 0x00, 0xF2, 0x03, 0xFF, 0x0F, 0x04, 0x00, 0x00, -/* 00013190 */ 0x00, 0x04, 0x00, 0x09, 0x15, 0x00, 0x8D, 0x02, 0x34, 0x0F, 0x03, 0x00, 0x4B, 0x0F, 0x14, 0x03, -/* 000131A0 */ 0x00, 0x0B, 0x0F, 0x09, 0x05, 0x00, 0xA6, 0x0F, 0x47, 0x0B, 0x0F, 0x14, 0x03, 0x00, 0x0A, 0x09, -/* 000131B0 */ 0x09, 0x09, 0x00, 0x47, 0x00, 0x0B, 0x09, 0x1B, 0x00, 0x09, 0x16, 0x00, 0x14, 0x03, 0x00, 0x0A, -/* 000131C0 */ 0x0B, 0x09, 0x08, 0x00, 0xA6, 0x00, 0x09, 0x0B, 0x00, 0x09, 0x06, 0x00, 0x47, 0x00, 0x0B, 0x09, -/* 000131D0 */ 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x63, 0x03, 0xFE, 0x84, 0x01, 0xFE, 0xDE, 0x01, 0xFE, -/* 000131E0 */ 0x83, 0x02, 0xFE, 0x87, 0x01, 0xFF, 0xB9, 0x7D, 0x01, 0x00, 0x11, 0x02, 0x00, 0x00, 0x00, 0x26, -/* 000131F0 */ 0x00, 0x46, 0x00, 0x0A, 0x00, 0x30, 0x00, 0x22, 0x00, 0x44, 0x00, 0x08, 0x00, 0x2F, 0x00, 0x0C, -/* 00013200 */ 0x00, 0x2D, 0x00, 0x14, 0x00, 0x3A, 0x00, 0x2F, 0x00, 0x52, 0x00, 0x4B, 0x00, 0x0C, 0x01, 0x46, -/* 00013210 */ 0x00, 0x73, 0x00, 0x10, 0x00, 0x30, 0x00, 0x05, 0x00, 0x2F, 0x00, 0x08, 0x00, 0x2C, 0x00, 0x09, -/* 00013220 */ 0x00, 0x26, 0x00, 0x08, 0x00, 0x34, 0x00, 0x08, 0x00, 0x2F, 0x00, 0x08, 0x00, 0x25, 0x00, 0x00, -/* 00013230 */ 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x9F, 0x08, 0x1C, 0xA2, 0x41, 0xC1, 0x00, -/* 00013240 */ 0xFE, 0xE6, 0x02, 0x81, 0xFF, 0x1B, 0x7D, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, -/* 00013250 */ 0xFF, 0x1B, 0x7D, 0x01, 0x00, 0x51, 0x51, 0x01, 0x05, 0x02, 0x05, 0x04, 0x0B, 0x0B, 0x02, 0x01, -/* 00013260 */ 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x2B, 0x8D, 0x02, 0x03, 0x06, 0x00, 0x00, 0x6B, 0x05, 0x06, -/* 00013270 */ 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x06, 0x5B, 0x01, 0x03, 0x00, 0x00, 0x5B, 0x02, 0x02, 0x00, -/* 00013280 */ 0x00, 0xF2, 0x03, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, -/* 00013290 */ 0x24, 0x00, 0xFE, 0xFD, 0x01, 0xFF, 0x38, 0x7D, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x29, -/* 000132A0 */ 0x00, 0x33, 0x00, 0x00, 0xBF, 0x4C, 0x00, 0xC0, 0x03, 0x80, 0x01, 0x00, 0xFE, 0x99, 0x08, 0x1C, -/* 000132B0 */ 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xE5, 0x02, 0x80, 0xFF, 0x81, 0x7C, 0x01, 0x00, 0xFF, 0x00, 0x10, -/* 000132C0 */ 0x01, 0x00, 0x02, 0x02, 0xFF, 0x81, 0x7C, 0x01, 0x00, 0x7B, 0x7B, 0x41, 0x02, 0x04, 0x05, 0x09, -/* 000132D0 */ 0x09, 0x02, 0x01, 0x01, 0x01, 0x01, 0x04, 0x00, 0x00, 0x00, 0xF9, 0x7F, 0xFD, 0xDF, 0xC1, 0x04, -/* 000132E0 */ 0x00, 0x00, 0x40, 0xFE, 0x7F, 0xFD, 0xDF, 0xC1, 0x1B, 0x60, 0x05, 0x04, 0x00, 0x14, 0x0C, 0x00, -/* 000132F0 */ 0x05, 0x02, 0x60, 0x05, 0x04, 0x00, 0x14, 0x03, 0x00, 0x05, 0x03, 0x09, 0x02, 0x00, 0x23, 0x04, -/* 00013300 */ 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xFE, 0x00, 0xFF, 0x99, 0x7C, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, -/* 00013310 */ 0x00, 0x15, 0x00, 0x4A, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0xBF, 0x7C, 0x0A, 0x02, 0x00, 0x80, -/* 00013320 */ 0x09, 0x00, 0xFE, 0x8E, 0x08, 0x1B, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xE8, 0x02, 0x7F, 0xFF, 0x28, -/* 00013330 */ 0x7B, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFF, 0x28, 0x7B, 0x01, 0x00, 0xD5, -/* 00013340 */ 0xD5, 0x41, 0x06, 0x05, 0x09, 0x03, 0x14, 0x12, 0x0F, 0x02, 0x02, 0x01, 0x01, 0x05, 0x3D, 0x01, -/* 00013350 */ 0x00, 0x08, 0x01, 0x01, 0x41, 0x4F, 0x08, 0x47, 0x08, 0x02, 0xEB, 0x00, 0xEC, 0x00, 0x12, 0x03, -/* 00013360 */ 0x00, 0x08, 0x06, 0x09, 0x2A, 0x00, 0xB9, 0x09, 0x08, 0x05, 0x00, 0x00, 0x0E, 0x1A, 0x00, 0x09, -/* 00013370 */ 0x47, 0x09, 0x07, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x03, 0x96, 0x0A, 0x05, 0x08, 0x01, 0x00, 0x5B, -/* 00013380 */ 0x01, 0x0A, 0x00, 0x00, 0xEE, 0x02, 0xFF, 0x09, 0x00, 0x00, 0x28, 0x08, 0x08, 0x09, 0xCC, 0xFF, -/* 00013390 */ 0xED, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFF, 0x4F, 0x7B, 0x01, 0x00, 0x06, 0x02, 0x00, 0x00, 0x00, -/* 000133A0 */ 0x07, 0x00, 0x20, 0x00, 0x08, 0x00, 0x20, 0x00, 0x0A, 0x00, 0x26, 0x00, 0x1A, 0x00, 0x2E, 0x00, -/* 000133B0 */ 0x0A, 0x00, 0x19, 0x00, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x43, 0xA8, 0x01, 0x00, 0xFE, 0x81, 0x08, -/* 000133C0 */ 0x22, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x7F, 0x03, 0x7E, 0xFF, 0x9F, 0x79, 0x01, 0x00, 0xFF, 0x00, -/* 000133D0 */ 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0x9F, 0x79, 0x01, 0x00, 0xFE, 0x6B, 0x01, 0xFE, 0x6B, 0x01, -/* 000133E0 */ 0x01, 0x08, 0x04, 0x08, 0x04, 0x2A, 0x27, 0x02, 0x03, 0x03, 0x02, 0x02, 0x02, 0x02, 0x01, 0x07, -/* 000133F0 */ 0x08, 0x07, 0x08, 0x9D, 0x4F, 0x05, 0x4F, 0x06, 0x8D, 0x02, 0x03, 0x0A, 0x00, 0x00, 0x6B, 0x09, -/* 00013400 */ 0x0A, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0A, 0x5B, 0x01, 0x04, 0x00, 0x00, 0xF2, 0x02, 0x09, -/* 00013410 */ 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x05, 0x09, 0x14, 0x03, 0x00, 0x05, 0x02, 0x09, -/* 00013420 */ 0x65, 0x00, 0x8D, 0x01, 0x11, 0x09, 0x01, 0x00, 0x4B, 0x09, 0x0F, 0x14, 0x00, 0x09, 0x8D, 0x01, -/* 00013430 */ 0x05, 0x09, 0x02, 0x00, 0x4B, 0x09, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x03, 0xEE, 0x01, 0xFF, 0x09, -/* 00013440 */ 0x01, 0x00, 0x8D, 0x02, 0x03, 0x0A, 0x00, 0x00, 0x6B, 0x09, 0x0A, 0x01, 0x07, 0x03, 0x00, 0x5A, -/* 00013450 */ 0x00, 0x0A, 0x5B, 0x01, 0x04, 0x02, 0x00, 0x8D, 0x01, 0x11, 0x0B, 0x01, 0x00, 0x4B, 0x0B, 0x5B, -/* 00013460 */ 0x02, 0x0B, 0x02, 0x00, 0xF2, 0x03, 0x09, 0x09, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x47, 0x06, -/* 00013470 */ 0x09, 0xAA, 0x09, 0x0F, 0x02, 0x00, 0x06, 0xA9, 0x09, 0xAA, 0x00, 0x0F, 0x02, 0x00, 0x09, 0xA9, -/* 00013480 */ 0x00, 0x09, 0x0B, 0x00, 0x09, 0x06, 0x00, 0x47, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, -/* 00013490 */ 0x00, 0xFE, 0xD7, 0x01, 0xFE, 0x83, 0x02, 0xFF, 0xBC, 0x79, 0x01, 0x00, 0x08, 0x04, 0x00, 0x00, -/* 000134A0 */ 0x00, 0x22, 0x00, 0x40, 0x00, 0x08, 0x00, 0x23, 0x00, 0x0C, 0x00, 0x24, 0x00, 0x14, 0x00, 0x32, -/* 000134B0 */ 0x00, 0x2F, 0x00, 0x4A, 0x00, 0x16, 0x00, 0x2D, 0x00, 0x08, 0x00, 0x1D, 0x00, 0x00, 0xBF, 0x5C, -/* 000134C0 */ 0x18, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x74, 0x08, 0x1F, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x7E, -/* 000134D0 */ 0x03, 0x7D, 0xFF, 0x90, 0x77, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFF, 0x90, -/* 000134E0 */ 0x77, 0x01, 0x00, 0xFE, 0xEA, 0x01, 0xFE, 0xEA, 0x01, 0x41, 0x06, 0x05, 0x09, 0x04, 0x14, 0x12, -/* 000134F0 */ 0x02, 0x01, 0x01, 0x01, 0x03, 0x03, 0x03, 0x03, 0x08, 0x07, 0x06, 0xFE, 0x5B, 0x03, 0x05, 0xFE, -/* 00013500 */ 0xA9, 0x04, 0x4D, 0x4F, 0x07, 0x8D, 0x02, 0x03, 0x0A, 0x00, 0x00, 0x6B, 0x09, 0x0A, 0x00, 0x07, -/* 00013510 */ 0x03, 0x00, 0x5A, 0x00, 0x0A, 0x5B, 0x01, 0x05, 0x00, 0x00, 0x5B, 0x02, 0x06, 0x00, 0x00, 0xF2, -/* 00013520 */ 0x03, 0x09, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x07, 0x09, 0x14, 0x03, 0x00, 0x07, -/* 00013530 */ 0x02, 0x09, 0x18, 0x00, 0x75, 0x03, 0x05, 0x01, 0x47, 0x09, 0x05, 0xCD, 0x0A, 0x02, 0x00, 0x00, -/* 00013540 */ 0x9F, 0x00, 0x04, 0x0A, 0x9F, 0x01, 0x03, 0x0A, 0x75, 0x0A, 0x09, 0x02, 0xA6, 0x00, 0x24, 0x00, -/* 00013550 */ 0xFE, 0xE4, 0x01, 0xFE, 0x0C, 0x02, 0xFE, 0x30, 0x02, 0xFF, 0xBF, 0x77, 0x01, 0x00, 0x05, 0x02, -/* 00013560 */ 0x00, 0x00, 0x00, 0x27, 0x00, 0x4F, 0x00, 0x08, 0x00, 0x71, 0x00, 0x04, 0x00, 0x33, 0x00, 0x16, -/* 00013570 */ 0x00, 0xC7, 0x00, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x63, 0x08, 0x1D, -/* 00013580 */ 0xA0, 0x41, 0xC1, 0x00, 0xFE, 0x67, 0x03, 0x7C, 0xFF, 0xA5, 0x75, 0x01, 0x00, 0xFF, 0x00, 0x10, -/* 00013590 */ 0x01, 0x00, 0x01, 0x01, 0xFF, 0xA5, 0x75, 0x01, 0x00, 0xFE, 0xC9, 0x01, 0xFE, 0xC9, 0x01, 0x01, -/* 000135A0 */ 0x04, 0x03, 0x05, 0x02, 0x1A, 0x19, 0x02, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x04, 0x05, 0xFE, -/* 000135B0 */ 0xAE, 0x03, 0x66, 0x4F, 0x03, 0x8D, 0x01, 0x09, 0x05, 0x00, 0x00, 0x4B, 0x05, 0x0E, 0x19, 0x00, -/* 000135C0 */ 0x05, 0x8D, 0x02, 0x03, 0x05, 0x01, 0x00, 0x60, 0x05, 0x05, 0x00, 0x0E, 0x0B, 0x00, 0x05, 0x8D, -/* 000135D0 */ 0x01, 0x09, 0x00, 0x00, 0x00, 0x4B, 0x00, 0x09, 0x3D, 0x00, 0x8D, 0x02, 0x03, 0x06, 0x01, 0x00, -/* 000135E0 */ 0x6B, 0x05, 0x06, 0x01, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x06, 0xF2, 0x01, 0x05, 0x05, 0x01, 0x00, -/* 000135F0 */ 0x00, 0x00, 0x00, 0x00, 0x47, 0x03, 0x05, 0x0F, 0x09, 0x00, 0x03, 0x01, 0x34, 0x01, 0x01, 0x09, -/* 00013600 */ 0x02, 0x09, 0x06, 0x00, 0x01, 0x34, 0x01, 0x01, 0x09, 0x03, 0x8D, 0x01, 0x09, 0x00, 0x00, 0x00, -/* 00013610 */ 0x4B, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x61, 0x03, 0xFE, 0xDF, 0x01, 0xFF, -/* 00013620 */ 0xBB, 0x75, 0x01, 0x00, 0x08, 0x02, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x39, 0x00, 0x0B, 0x00, 0x2B, -/* 00013630 */ 0x00, 0x1D, 0x00, 0x34, 0x00, 0x04, 0x00, 0x9C, 0x00, 0x09, 0x00, 0x35, 0x00, 0x06, 0x00, 0x2D, -/* 00013640 */ 0x00, 0x0D, 0x00, 0x1C, 0x00, 0x00, 0x3F, 0x5D, 0x08, 0xC1, 0x13, 0x8D, 0x25, 0x00, 0xFE, 0xAF, -/* 00013650 */ 0x07, 0x19, 0xA0, 0x41, 0xD1, 0x00, 0x74, 0xFF, 0xEC, 0x5A, 0x01, 0x00, 0x06, 0xFF, 0x00, 0x10, -/* 00013660 */ 0x01, 0x00, 0x01, 0x01, 0xFF, 0xEC, 0x5A, 0x01, 0x00, 0xFE, 0x5B, 0x16, 0xFE, 0x5B, 0x16, 0x03, -/* 00013670 */ 0xFE, 0x9A, 0x04, 0xFE, 0x9B, 0x04, 0xFE, 0x9C, 0x04, 0x0C, 0x14, 0x1C, 0x05, 0x8F, 0x89, 0x02, -/* 00013680 */ 0x0A, 0x05, 0x07, 0x07, 0x07, 0x07, 0x05, 0x19, 0x1A, 0x1B, 0x06, 0xFE, 0x3D, 0x03, 0x05, 0xFE, -/* 00013690 */ 0x9D, 0x04, 0x08, 0x06, 0xFE, 0x0B, 0x04, 0x06, 0xFE, 0x40, 0x03, 0x07, 0x06, 0xFE, 0x42, 0x03, -/* 000136A0 */ 0x0C, 0x06, 0xFE, 0x43, 0x03, 0x06, 0xFE, 0x44, 0x03, 0x05, 0xFE, 0x9E, 0x04, 0x06, 0xFE, 0x3F, -/* 000136B0 */ 0x03, 0x06, 0xFE, 0x4C, 0x03, 0x0B, 0x05, 0xFE, 0x9F, 0x04, 0x06, 0xFE, 0xA0, 0x04, 0x05, 0xFE, -/* 000136C0 */ 0xA1, 0x04, 0x06, 0xFE, 0x0D, 0x04, 0xFE, 0x75, 0x02, 0x4F, 0x14, 0x4F, 0x15, 0x4F, 0x16, 0x4F, -/* 000136D0 */ 0x17, 0x4F, 0x18, 0x4F, 0x1C, 0x94, 0x02, 0x1C, 0x4F, 0x1C, 0x94, 0x03, 0x1C, 0x4F, 0x1C, 0x94, -/* 000136E0 */ 0x04, 0x1C, 0x8D, 0x02, 0x32, 0x1C, 0x00, 0x00, 0x15, 0x03, 0x00, 0x1C, 0x02, 0x09, 0x05, 0x00, -/* 000136F0 */ 0xA6, 0x00, 0x09, 0x47, 0x02, 0xD3, 0x00, 0x1C, 0x94, 0x02, 0x1C, 0xD3, 0x01, 0x1C, 0x94, 0x03, -/* 00013700 */ 0x1C, 0xD3, 0x02, 0x1C, 0x47, 0x14, 0x1C, 0x8D, 0x02, 0x23, 0x1C, 0x01, 0x00, 0x07, 0x03, 0x00, -/* 00013710 */ 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x03, 0x00, 0x00, 0x5B, 0x02, 0x14, 0x00, 0x00, 0xEE, 0x03, 0xFF, -/* 00013720 */ 0x1C, 0x00, 0x00, 0x8D, 0x02, 0x37, 0x1D, 0x02, 0x00, 0x4B, 0x1D, 0x6B, 0x1C, 0x1D, 0x00, 0x07, -/* 00013730 */ 0x04, 0x00, 0x5A, 0x00, 0x1D, 0x5B, 0x01, 0x14, 0x01, 0x00, 0x5B, 0x02, 0x05, 0x01, 0x00, 0xCB, -/* 00013740 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0xCA, 0x1F, 0x79, 0x1F, -/* 00013750 */ 0x1E, 0x01, 0x79, 0x09, 0x1E, 0x02, 0x79, 0x09, 0x1E, 0x03, 0x79, 0x09, 0x1E, 0x04, 0x5B, 0x03, -/* 00013760 */ 0x1E, 0x01, 0x00, 0xF2, 0x04, 0xFF, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x94, 0x04, 0x0C, -/* 00013770 */ 0x8D, 0x02, 0x23, 0x1C, 0x01, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x04, 0x91, 0x04, 0x1D, 0x03, -/* 00013780 */ 0x00, 0x5B, 0x01, 0x1D, 0x02, 0x00, 0xD3, 0x03, 0x1D, 0x5B, 0x02, 0x1D, 0x02, 0x00, 0xEE, 0x03, -/* 00013790 */ 0x1C, 0x1C, 0x02, 0x00, 0x47, 0x15, 0x1C, 0x8D, 0x02, 0x37, 0x1D, 0x02, 0x00, 0x4B, 0x1D, 0x6B, -/* 000137A0 */ 0x1C, 0x1D, 0x05, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x1D, 0x5B, 0x01, 0x15, 0x03, 0x00, 0x8D, 0x01, -/* 000137B0 */ 0x16, 0x1E, 0x04, 0x00, 0x4B, 0x1E, 0x5B, 0x02, 0x1E, 0x03, 0x00, 0xF2, 0x03, 0x1C, 0x1C, 0x05, -/* 000137C0 */ 0x00, 0x00, 0x00, 0x03, 0x00, 0x47, 0x16, 0x1C, 0x8D, 0x02, 0x37, 0x1D, 0x02, 0x00, 0x4B, 0x1D, -/* 000137D0 */ 0x6B, 0x1C, 0x1D, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x1D, 0x5B, 0x01, 0x16, 0x04, 0x00, 0x5B, -/* 000137E0 */ 0x02, 0x0D, 0x04, 0x00, 0xCB, 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, -/* 000137F0 */ 0x00, 0x79, 0x0E, 0x1E, 0x01, 0x79, 0x09, 0x1E, 0x02, 0x79, 0x09, 0x1E, 0x03, 0x79, 0x0F, 0x1E, -/* 00013800 */ 0x04, 0x5B, 0x03, 0x1E, 0x04, 0x00, 0xF2, 0x04, 0xFF, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, -/* 00013810 */ 0x8D, 0x02, 0x37, 0x1D, 0x02, 0x00, 0x4B, 0x1D, 0x6B, 0x1C, 0x1D, 0x00, 0x07, 0x04, 0x00, 0x5A, -/* 00013820 */ 0x00, 0x1D, 0x5B, 0x01, 0x14, 0x05, 0x00, 0x5B, 0x02, 0x0E, 0x05, 0x00, 0xCB, 0x30, 0x00, 0x00, -/* 00013830 */ 0x00, 0x02, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x79, 0x16, 0x1E, 0x01, 0x79, 0x0F, 0x1E, -/* 00013840 */ 0x02, 0x79, 0x09, 0x1E, 0x03, 0x79, 0x0F, 0x1E, 0x04, 0x5B, 0x03, 0x1E, 0x05, 0x00, 0xF2, 0x04, -/* 00013850 */ 0xFF, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0xD3, 0x04, 0x1C, 0x47, 0x17, 0x1C, 0x8D, 0x02, -/* 00013860 */ 0x23, 0x1C, 0x01, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x10, 0x06, 0x00, 0x5B, -/* 00013870 */ 0x02, 0x17, 0x06, 0x00, 0xEE, 0x03, 0xFF, 0x1C, 0x06, 0x00, 0x8D, 0x02, 0x37, 0x1D, 0x02, 0x00, -/* 00013880 */ 0x4B, 0x1D, 0x6B, 0x1C, 0x1D, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x1D, 0x60, 0x1E, 0x14, 0x06, -/* 00013890 */ 0x5B, 0x01, 0x1E, 0x07, 0x00, 0x5B, 0x02, 0x11, 0x07, 0x00, 0xCB, 0x48, 0x00, 0x00, 0x00, 0x03, -/* 000138A0 */ 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x79, 0x17, 0x1E, 0x01, 0x79, 0x09, 0x1E, 0x03, 0x79, -/* 000138B0 */ 0x0F, 0x1E, 0x04, 0x79, 0x0F, 0x1E, 0x02, 0x5B, 0x03, 0x1E, 0x07, 0x00, 0xF2, 0x04, 0xFF, 0x1C, -/* 000138C0 */ 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0xD3, 0x05, 0x1C, 0x47, 0x18, 0x1C, 0x8D, 0x02, 0x23, 0x1C, -/* 000138D0 */ 0x01, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x12, 0x08, 0x00, 0x5B, 0x02, 0x18, -/* 000138E0 */ 0x08, 0x00, 0xEE, 0x03, 0xFF, 0x1C, 0x08, 0x00, 0x8D, 0x02, 0x37, 0x1D, 0x02, 0x00, 0x4B, 0x1D, -/* 000138F0 */ 0x6B, 0x1C, 0x1D, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x1D, 0x60, 0x1E, 0x14, 0x06, 0x5B, 0x01, -/* 00013900 */ 0x1E, 0x09, 0x00, 0x5B, 0x02, 0x13, 0x09, 0x00, 0xCB, 0x60, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, -/* 00013910 */ 0x00, 0x1E, 0x00, 0x00, 0x00, 0x79, 0x18, 0x1E, 0x01, 0x79, 0x09, 0x1E, 0x03, 0x79, 0x0F, 0x1E, -/* 00013920 */ 0x04, 0x79, 0x0F, 0x1E, 0x02, 0x5B, 0x03, 0x1E, 0x09, 0x00, 0xF2, 0x04, 0xFF, 0x1C, 0x00, 0x00, -/* 00013930 */ 0x00, 0x00, 0x09, 0x00, 0x47, 0x00, 0x14, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x05, 0x78, -/* 00013940 */ 0x00, 0x60, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, -/* 00013950 */ 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x48, 0x00, 0x00, -/* 00013960 */ 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, -/* 00013970 */ 0x00, 0x81, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, -/* 00013980 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, -/* 00013990 */ 0x00, 0x81, 0x01, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 000139A0 */ 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, -/* 000139B0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, -/* 000139C0 */ 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0xFE, 0x88, 0x01, -/* 000139D0 */ 0xFE, 0x83, 0x01, 0xFE, 0x82, 0x01, 0xFE, 0x80, 0x01, 0xFE, 0x81, 0x01, 0x4D, 0xFE, 0x15, 0x01, -/* 000139E0 */ 0xFF, 0x01, 0x5B, 0x01, 0x00, 0x14, 0x19, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x27, 0x00, 0x05, 0x00, -/* 000139F0 */ 0x23, 0x01, 0x06, 0x00, 0x02, 0x05, 0x06, 0x00, 0x26, 0x01, 0x06, 0x00, 0xB8, 0x01, 0x1C, 0x00, -/* 00013A00 */ 0x72, 0x00, 0x4A, 0x00, 0x28, 0x01, 0x03, 0x00, 0x5B, 0x00, 0x27, 0x00, 0x33, 0x01, 0x31, 0x00, -/* 00013A10 */ 0x75, 0x00, 0x48, 0x00, 0xD4, 0x00, 0x48, 0x00, 0x15, 0x01, 0x06, 0x00, 0x73, 0x01, 0x1C, 0x00, -/* 00013A20 */ 0x48, 0x00, 0x4C, 0x00, 0xBF, 0x00, 0x06, 0x00, 0xD8, 0x03, 0x1C, 0x00, 0x5A, 0x00, 0x4C, 0x00, -/* 00013A30 */ 0xD1, 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, 0xDE, 0x3F, 0x01, 0x00, 0x32, 0x3F, 0x01, 0x00, 0xFD, -/* 00013A40 */ 0x3D, 0x01, 0x00, 0x5D, 0x3D, 0x01, 0x00, 0x4C, 0x3C, 0x01, 0x00, 0x4F, 0x3A, 0x01, 0x00, 0x3F, -/* 00013A50 */ 0x5D, 0x18, 0xC1, 0x03, 0x8D, 0x05, 0x00, 0xFE, 0x1F, 0x08, 0x20, 0xA0, 0x41, 0xC3, 0x00, 0xFE, -/* 00013A60 */ 0x0D, 0x04, 0x7A, 0xFF, 0x43, 0x6C, 0x01, 0x00, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, -/* 00013A70 */ 0xFF, 0x43, 0x6C, 0x01, 0x00, 0xFE, 0xB6, 0x03, 0xFE, 0xB6, 0x03, 0x01, 0xFE, 0xA8, 0x04, 0x06, -/* 00013A80 */ 0x0D, 0x11, 0x05, 0x2E, 0x2E, 0x03, 0x03, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x0E, 0x0F, 0x10, -/* 00013A90 */ 0x05, 0xFE, 0x9F, 0x04, 0x06, 0xFE, 0x48, 0x03, 0x06, 0xFE, 0xF7, 0x03, 0x06, 0xFE, 0xA2, 0x04, -/* 00013AA0 */ 0x06, 0xFE, 0xFA, 0x03, 0x06, 0xFE, 0xFB, 0x03, 0x06, 0xFE, 0xFC, 0x03, 0x06, 0xFE, 0xFD, 0x03, -/* 00013AB0 */ 0x06, 0xFE, 0xFE, 0x03, 0x06, 0xFE, 0xA5, 0x04, 0x08, 0xBD, 0x59, 0x11, 0xB2, 0x0D, 0x11, 0x4F, -/* 00013AC0 */ 0x11, 0x94, 0x02, 0x11, 0x8D, 0x03, 0x03, 0x12, 0x00, 0x00, 0x6B, 0x11, 0x12, 0x00, 0x07, 0x02, -/* 00013AD0 */ 0x00, 0x5A, 0x00, 0x12, 0x5B, 0x01, 0x0D, 0x00, 0x00, 0xF2, 0x02, 0x11, 0x11, 0x00, 0x00, 0x00, -/* 00013AE0 */ 0x00, 0x00, 0x00, 0x94, 0x02, 0x11, 0x91, 0x02, 0x11, 0x01, 0x00, 0x0E, 0x0D, 0x00, 0x11, 0x91, -/* 00013AF0 */ 0x02, 0x11, 0x01, 0x00, 0x60, 0x11, 0x11, 0x01, 0x0F, 0x24, 0x00, 0x11, 0x8D, 0x03, 0x03, 0x12, -/* 00013B00 */ 0x00, 0x00, 0x6B, 0x11, 0x12, 0x02, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x12, 0x5B, 0x01, 0x02, 0x01, -/* 00013B10 */ 0x00, 0x5B, 0x02, 0x03, 0x01, 0x00, 0xF2, 0x03, 0xFF, 0x11, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, -/* 00013B20 */ 0x8D, 0x02, 0x19, 0x11, 0x02, 0x00, 0x4B, 0x11, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x0C, 0xCD, 0x12, -/* 00013B30 */ 0x08, 0x00, 0x00, 0x9F, 0x00, 0x04, 0x12, 0x9F, 0x01, 0x05, 0x12, 0x9F, 0x02, 0x06, 0x12, 0x9F, -/* 00013B40 */ 0x03, 0x07, 0x12, 0x9F, 0x04, 0x08, 0x12, 0x9F, 0x05, 0x09, 0x12, 0x9F, 0x06, 0x0A, 0x12, 0x9F, -/* 00013B50 */ 0x07, 0x0B, 0x12, 0x5B, 0x01, 0x12, 0x02, 0x00, 0x91, 0x02, 0x12, 0x01, 0x00, 0x5B, 0x02, 0x12, -/* 00013B60 */ 0x02, 0x00, 0xD3, 0x00, 0x12, 0x5B, 0x03, 0x12, 0x02, 0x00, 0xEE, 0x04, 0x00, 0x11, 0x02, 0x00, -/* 00013B70 */ 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xEF, 0x01, 0xFE, 0xA6, 0x04, 0xFE, 0x8A, 0x02, -/* 00013B80 */ 0xFF, 0x6C, 0x6C, 0x01, 0x00, 0x05, 0x0A, 0x00, 0x00, 0x00, 0x22, 0x00, 0x37, 0x00, 0x16, 0x00, -/* 00013B90 */ 0x39, 0x00, 0x24, 0x00, 0x6F, 0x00, 0x55, 0x00, 0xAD, 0x02, 0x00, 0x9F, 0x3B, 0x01, 0x00, 0xBF, -/* 00013BA0 */ 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x03, 0x00, 0xFE, 0x2E, 0x08, 0x13, 0xA2, 0x41, 0xD0, 0x00, 0x7B, -/* 00013BB0 */ 0xFE, 0x01, 0x10, 0xFF, 0xA4, 0x6E, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFF, -/* 00013BC0 */ 0xA4, 0x6E, 0x01, 0x00, 0xFE, 0x49, 0x01, 0xFE, 0x49, 0x01, 0x01, 0x07, 0x05, 0x08, 0x04, 0x14, -/* 00013BD0 */ 0x12, 0x04, 0x01, 0x02, 0x03, 0x03, 0x03, 0x03, 0x07, 0x06, 0xFE, 0xA5, 0x04, 0x01, 0x00, 0x0B, -/* 00013BE0 */ 0x4B, 0x14, 0x03, 0x00, 0x05, 0x02, 0x09, 0x3F, 0x00, 0x47, 0x08, 0x06, 0x8D, 0x04, 0x37, 0x0A, -/* 00013BF0 */ 0x00, 0x00, 0x4B, 0x0A, 0x6B, 0x09, 0x0A, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0A, 0x8D, 0x01, -/* 00013C00 */ 0x02, 0x0B, 0x01, 0x00, 0x4B, 0x0B, 0x60, 0x0B, 0x0B, 0x01, 0x5B, 0x01, 0x0B, 0x00, 0x00, 0x5B, -/* 00013C10 */ 0x02, 0x03, 0x00, 0x00, 0xF2, 0x03, 0x09, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x09, -/* 00013C20 */ 0x08, 0x02, 0x47, 0x00, 0x04, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x3F, 0x01, 0xFE, -/* 00013C30 */ 0xA5, 0x04, 0xFE, 0xA5, 0x04, 0xFF, 0xCA, 0x6E, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x08, -/* 00013C40 */ 0x00, 0xA6, 0x00, 0x39, 0x00, 0x51, 0x00, 0x08, 0x00, 0x2B, 0x00, 0x00, 0xBF, 0x5C, 0x08, 0xC1, -/* 00013C50 */ 0x03, 0x88, 0x01, 0x00, 0xFE, 0x0E, 0x08, 0x17, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0xA0, 0x04, 0x79, -/* 00013C60 */ 0xFF, 0xC0, 0x69, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0xC0, 0x69, 0x01, -/* 00013C70 */ 0x00, 0xFE, 0x5A, 0x01, 0xFE, 0x5A, 0x01, 0x01, 0x07, 0x05, 0x0A, 0x04, 0x27, 0x25, 0x03, 0x04, -/* 00013C80 */ 0x03, 0x04, 0x04, 0x04, 0x04, 0x09, 0x05, 0xFE, 0x9F, 0x04, 0x06, 0xFE, 0x48, 0x03, 0x08, 0xA2, -/* 00013C90 */ 0x59, 0x0A, 0xB2, 0x06, 0x0A, 0x4F, 0x07, 0x4F, 0x08, 0x8D, 0x03, 0x03, 0x0B, 0x00, 0x00, 0x6B, -/* 00013CA0 */ 0x0A, 0x0B, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0B, 0x5B, 0x01, 0x06, 0x00, 0x00, 0xF2, 0x02, -/* 00013CB0 */ 0x0A, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x07, 0x0A, 0x0E, 0x08, 0x00, 0x07, 0x60, -/* 00013CC0 */ 0x0A, 0x07, 0x01, 0x0F, 0x24, 0x00, 0x0A, 0x8D, 0x03, 0x03, 0x0B, 0x00, 0x00, 0x6B, 0x0A, 0x0B, -/* 00013CD0 */ 0x02, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0B, 0x5B, 0x01, 0x02, 0x01, 0x00, 0x5B, 0x02, 0x03, 0x01, -/* 00013CE0 */ 0x00, 0xF2, 0x03, 0xFF, 0x0A, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x8D, 0x03, 0x24, 0x0B, 0x01, -/* 00013CF0 */ 0x00, 0x6B, 0x0A, 0x0B, 0x03, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0B, 0x5B, 0x01, 0x05, 0x02, 0x00, -/* 00013D00 */ 0xF2, 0x02, 0x0A, 0x0A, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x47, 0x08, 0x0A, 0x8D, 0x01, 0x03, -/* 00013D10 */ 0x0A, 0x02, 0x00, 0x4B, 0x0A, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x07, 0x03, 0x00, -/* 00013D20 */ 0x5B, 0x02, 0x08, 0x03, 0x00, 0xEE, 0x03, 0x00, 0x0A, 0x03, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, -/* 00013D30 */ 0x24, 0x00, 0xFE, 0xEF, 0x01, 0xFE, 0xA6, 0x04, 0xFE, 0x8A, 0x02, 0xFE, 0x38, 0x03, 0xFF, 0xE5, -/* 00013D40 */ 0x69, 0x01, 0x00, 0x06, 0x09, 0x00, 0x00, 0x00, 0x22, 0x00, 0x37, 0x00, 0x0C, 0x00, 0x39, 0x00, -/* 00013D50 */ 0x24, 0x00, 0x6F, 0x00, 0x22, 0x00, 0x30, 0x00, 0x23, 0x00, 0x25, 0x00, 0x00, 0xBF, 0x5C, 0x08, -/* 00013D60 */ 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0xFC, 0x07, 0x6B, 0xA2, 0x41, 0xD1, 0x00, 0x78, 0xFF, 0x83, -/* 00013D70 */ 0x66, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x02, 0xFF, 0x83, 0x66, 0x01, 0x00, 0xC5, -/* 00013D80 */ 0xC5, 0x01, 0x06, 0x03, 0x07, 0x07, 0x17, 0x16, 0x03, 0x01, 0x03, 0x01, 0x01, 0x01, 0x01, 0x06, -/* 00013D90 */ 0x08, 0x55, 0x59, 0x07, 0xB2, 0x05, 0x07, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA6, 0x07, 0x47, 0x04, -/* 00013DA0 */ 0x07, 0x8D, 0x02, 0x17, 0x07, 0x00, 0x00, 0x4B, 0x07, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x02, 0x5B, -/* 00013DB0 */ 0x01, 0x05, 0x00, 0x00, 0x8D, 0x01, 0x04, 0x08, 0x01, 0x00, 0x4B, 0x08, 0x5B, 0x02, 0x08, 0x00, -/* 00013DC0 */ 0x00, 0x8D, 0x03, 0x03, 0x08, 0x02, 0x00, 0x60, 0x08, 0x08, 0x00, 0x5B, 0x03, 0x08, 0x00, 0x00, -/* 00013DD0 */ 0x5B, 0x04, 0x03, 0x00, 0x00, 0x5B, 0x05, 0x04, 0x00, 0x00, 0xEE, 0x06, 0x00, 0x07, 0x00, 0x00, -/* 00013DE0 */ 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xDC, 0x01, 0xFF, 0x96, 0x66, 0x01, 0x00, 0x03, -/* 00013DF0 */ 0x05, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x23, 0x00, 0x44, 0x00, 0x8E, 0x00, 0x00, 0xBF, 0x5C, 0x08, -/* 00013E00 */ 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0xE3, 0x07, 0x1C, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x48, 0x03, -/* 00013E10 */ 0x77, 0xFF, 0x87, 0x62, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x01, 0xFF, 0x87, 0x62, -/* 00013E20 */ 0x01, 0x00, 0xFE, 0x9A, 0x01, 0xFE, 0x9A, 0x01, 0x01, 0x08, 0x05, 0x0B, 0x05, 0x30, 0x2C, 0x03, -/* 00013E30 */ 0x04, 0x03, 0x03, 0x03, 0x03, 0x03, 0x0A, 0x08, 0x05, 0xFE, 0x9D, 0x04, 0x06, 0xFE, 0x48, 0x03, -/* 00013E40 */ 0xBF, 0x01, 0x4D, 0x01, 0x07, 0x59, 0x0B, 0xB2, 0x09, 0x0B, 0x4F, 0x08, 0x15, 0x05, 0x00, 0x05, -/* 00013E50 */ 0x02, 0xA6, 0x0B, 0x47, 0x05, 0x0B, 0x15, 0x05, 0x00, 0x06, 0x02, 0xA6, 0x0B, 0x47, 0x06, 0x0B, -/* 00013E60 */ 0x4F, 0x08, 0xA6, 0x0B, 0x14, 0x03, 0x00, 0x07, 0x0B, 0x09, 0x24, 0x00, 0x8D, 0x03, 0x03, 0x0C, -/* 00013E70 */ 0x00, 0x00, 0x6B, 0x0B, 0x0C, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x03, 0x00, -/* 00013E80 */ 0x00, 0x5B, 0x02, 0x04, 0x00, 0x00, 0xF2, 0x03, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 00013E90 */ 0x8D, 0x03, 0x37, 0x0C, 0x01, 0x00, 0x4B, 0x0C, 0x6B, 0x0B, 0x0C, 0x01, 0x07, 0x01, 0x00, 0x5A, -/* 00013EA0 */ 0x00, 0x0C, 0xF2, 0x01, 0x0B, 0x0B, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x08, 0x0B, 0x8D, -/* 00013EB0 */ 0x03, 0x03, 0x0C, 0x00, 0x00, 0x6B, 0x0B, 0x0C, 0x02, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x5B, -/* 00013EC0 */ 0x01, 0x09, 0x02, 0x00, 0x5B, 0x02, 0x08, 0x02, 0x00, 0xF2, 0x03, 0xFF, 0x0B, 0x02, 0x00, 0x00, -/* 00013ED0 */ 0x00, 0x02, 0x00, 0x8D, 0x01, 0x02, 0x0B, 0x02, 0x00, 0x4B, 0x0B, 0x07, 0x04, 0x00, 0x5A, 0x00, -/* 00013EE0 */ 0x02, 0x5B, 0x01, 0x08, 0x03, 0x00, 0x5B, 0x02, 0x05, 0x03, 0x00, 0x5B, 0x03, 0x06, 0x03, 0x00, -/* 00013EF0 */ 0xEE, 0x04, 0xFF, 0x0B, 0x03, 0x00, 0x47, 0x00, 0x09, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, -/* 00013F00 */ 0xFE, 0x8A, 0x02, 0x61, 0xFE, 0xF0, 0x01, 0xFF, 0x9C, 0x62, 0x01, 0x00, 0x09, 0x0B, 0x00, 0x00, -/* 00013F10 */ 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0C, 0x00, 0x23, 0x00, 0x0A, 0x00, 0x30, 0x00, 0x24, 0x00, 0x5E, -/* 00013F20 */ 0x00, 0x1F, 0x00, 0x2C, 0x00, 0x24, 0x00, 0x3A, 0x00, 0x23, 0x00, 0x43, 0x00, 0x08, 0x00, 0x15, -/* 00013F30 */ 0x00, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0xDA, 0x07, 0x1E, 0xA2, 0x41, -/* 00013F40 */ 0xC1, 0x00, 0xFE, 0x9B, 0x04, 0x76, 0xFF, 0x63, 0x61, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, -/* 00013F50 */ 0x03, 0x03, 0xFF, 0x63, 0x61, 0x01, 0x00, 0xB5, 0xB5, 0x01, 0x05, 0x03, 0x06, 0x04, 0x15, 0x14, -/* 00013F60 */ 0x03, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x05, 0x05, 0xFE, 0xA7, 0x04, 0x56, 0x8D, 0x03, 0x37, -/* 00013F70 */ 0x07, 0x00, 0x00, 0x4B, 0x07, 0x6B, 0x06, 0x07, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x07, 0x5B, -/* 00013F80 */ 0x01, 0x04, 0x00, 0x00, 0xF2, 0x02, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x06, -/* 00013F90 */ 0x00, 0x06, 0x47, 0x00, 0x02, 0x09, 0x29, 0x00, 0x8D, 0x03, 0x03, 0x07, 0x01, 0x00, 0x6B, 0x06, -/* 00013FA0 */ 0x07, 0x01, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x07, 0x5B, 0x01, 0x03, 0x01, 0x00, 0x5B, 0x02, 0x04, -/* 00013FB0 */ 0x01, 0x00, 0xF2, 0x03, 0x00, 0x06, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x09, 0x02, 0x00, 0xA6, -/* 00013FC0 */ 0x00, 0x24, 0x00, 0xB1, 0xFE, 0xEC, 0x01, 0xFF, 0x8B, 0x61, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, -/* 00013FD0 */ 0x00, 0x25, 0x00, 0x26, 0x00, 0x06, 0x00, 0x2B, 0x00, 0x29, 0x00, 0x3B, 0x00, 0x00, 0xBF, 0x5C, -/* 00013FE0 */ 0x18, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0xBD, 0x07, 0x26, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x9A, -/* 00013FF0 */ 0x04, 0x75, 0xFF, 0x69, 0x5C, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFF, 0x69, -/* 00014000 */ 0x5C, 0x01, 0x00, 0xFE, 0xAF, 0x03, 0xFE, 0xAF, 0x03, 0x01, 0x0A, 0x0D, 0x14, 0x07, 0x67, 0x5E, -/* 00014010 */ 0x03, 0x09, 0x03, 0x07, 0x0B, 0x0B, 0x0B, 0x0B, 0x13, 0x08, 0x06, 0xFE, 0x00, 0x04, 0x06, 0xFE, -/* 00014020 */ 0xAD, 0x03, 0x05, 0xFE, 0xBC, 0x03, 0x05, 0xFE, 0xFF, 0x03, 0x06, 0xFE, 0xA2, 0x04, 0x05, 0xFE, -/* 00014030 */ 0xA3, 0x04, 0x05, 0xFE, 0xA4, 0x04, 0x01, 0x00, 0x01, 0x03, 0x0B, 0xFE, 0xAF, 0x01, 0x4F, 0x10, -/* 00014040 */ 0x4F, 0x11, 0x4F, 0x12, 0x8D, 0x02, 0x11, 0x14, 0x00, 0x00, 0x4B, 0x14, 0x07, 0x02, 0x00, 0x5A, -/* 00014050 */ 0x00, 0x02, 0x5B, 0x01, 0x0E, 0x00, 0x00, 0xEE, 0x02, 0x14, 0x14, 0x00, 0x00, 0x47, 0x10, 0x14, -/* 00014060 */ 0xA6, 0x14, 0x14, 0x03, 0x00, 0x0F, 0x14, 0x09, 0x22, 0x00, 0x8D, 0x03, 0x37, 0x16, 0x01, 0x00, -/* 00014070 */ 0x4B, 0x16, 0x6B, 0x15, 0x16, 0x00, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x16, 0xF2, 0x01, 0x15, 0x15, -/* 00014080 */ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x14, 0x15, 0x09, 0x22, 0x00, 0x8D, 0x03, 0x24, 0x16, -/* 00014090 */ 0x02, 0x00, 0x6B, 0x15, 0x16, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x16, 0x5B, 0x01, 0x0F, 0x02, -/* 000140A0 */ 0x00, 0xF2, 0x02, 0x15, 0x15, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x47, 0x14, 0x15, 0x47, 0x0F, -/* 000140B0 */ 0x14, 0x8D, 0x03, 0x37, 0x15, 0x01, 0x00, 0x4B, 0x15, 0x6B, 0x14, 0x15, 0x02, 0x07, 0x01, 0x00, -/* 000140C0 */ 0x5A, 0x00, 0x15, 0xF2, 0x01, 0x14, 0x14, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x47, 0x11, 0x14, -/* 000140D0 */ 0x47, 0x14, 0x11, 0x8D, 0x02, 0x02, 0x15, 0x03, 0x00, 0x4B, 0x15, 0x07, 0x06, 0x00, 0x5A, 0x00, -/* 000140E0 */ 0x02, 0x5B, 0x01, 0x0F, 0x04, 0x00, 0x5B, 0x02, 0x03, 0x04, 0x00, 0x5B, 0x03, 0x04, 0x04, 0x00, -/* 000140F0 */ 0xCD, 0x16, 0x02, 0x00, 0x00, 0x9F, 0x00, 0x05, 0x16, 0x9F, 0x01, 0x06, 0x16, 0x5B, 0x04, 0x16, -/* 00014100 */ 0x04, 0x00, 0x5B, 0x05, 0x06, 0x04, 0x00, 0xEE, 0x06, 0x15, 0x15, 0x04, 0x00, 0x75, 0x15, 0x14, -/* 00014110 */ 0x03, 0x47, 0x14, 0x0D, 0x8D, 0x02, 0x02, 0x15, 0x03, 0x00, 0x4B, 0x15, 0x07, 0x06, 0x00, 0x5A, -/* 00014120 */ 0x00, 0x02, 0x5B, 0x01, 0x0F, 0x05, 0x00, 0x5B, 0x02, 0x07, 0x05, 0x00, 0x5B, 0x03, 0x04, 0x05, -/* 00014130 */ 0x00, 0xCD, 0x16, 0x02, 0x01, 0x00, 0x9F, 0x00, 0x08, 0x16, 0x9F, 0x01, 0x09, 0x16, 0x5B, 0x04, -/* 00014140 */ 0x16, 0x05, 0x00, 0x5B, 0x05, 0x08, 0x05, 0x00, 0xEE, 0x06, 0x15, 0x15, 0x05, 0x00, 0x75, 0x15, -/* 00014150 */ 0x14, 0x04, 0x8D, 0x02, 0x14, 0x14, 0x04, 0x00, 0x4B, 0x14, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x02, -/* 00014160 */ 0x5B, 0x01, 0x0D, 0x06, 0x00, 0x5B, 0x02, 0x0F, 0x06, 0x00, 0x5B, 0x03, 0x0A, 0x06, 0x00, 0x5B, -/* 00014170 */ 0x04, 0x0B, 0x06, 0x00, 0xEE, 0x05, 0xFF, 0x14, 0x06, 0x00, 0x8D, 0x02, 0x0B, 0x14, 0x05, 0x00, -/* 00014180 */ 0x4B, 0x14, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x02, 0x8D, 0x03, 0x03, 0x15, 0x06, 0x00, 0x60, 0x15, -/* 00014190 */ 0x15, 0x05, 0x5B, 0x01, 0x15, 0x07, 0x00, 0x5B, 0x02, 0x10, 0x07, 0x00, 0x5B, 0x03, 0x11, 0x07, -/* 000141A0 */ 0x00, 0xCD, 0x15, 0x00, 0x02, 0x00, 0x5B, 0x04, 0x15, 0x07, 0x00, 0xEE, 0x05, 0x14, 0x14, 0x07, -/* 000141B0 */ 0x00, 0x47, 0x12, 0x14, 0x60, 0x14, 0x12, 0x06, 0x75, 0x14, 0x0D, 0x07, 0x8D, 0x03, 0x03, 0x15, -/* 000141C0 */ 0x06, 0x00, 0x6B, 0x14, 0x15, 0x08, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x15, 0x5B, 0x01, 0x0D, 0x08, -/* 000141D0 */ 0x00, 0xF2, 0x02, 0x14, 0x14, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x75, 0x14, 0x0D, 0x09, 0x75, -/* 000141E0 */ 0x0C, 0x0D, 0x0A, 0x47, 0x00, 0x0D, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x61, 0xFE, 0x36, -/* 000141F0 */ 0x03, 0x61, 0xFE, 0x18, 0x04, 0xE6, 0xFE, 0xDC, 0x01, 0xFE, 0xF7, 0x01, 0xFE, 0xF7, 0x01, 0xFE, -/* 00014200 */ 0xED, 0x01, 0xFE, 0xA5, 0x04, 0xFE, 0xA6, 0x04, 0xFF, 0xA0, 0x5C, 0x01, 0x00, 0x0C, 0x06, 0x00, -/* 00014210 */ 0x00, 0x00, 0x1C, 0x00, 0x46, 0x00, 0x51, 0x00, 0x57, 0x00, 0x1F, 0x00, 0x24, 0x00, 0x41, 0x00, -/* 00014220 */ 0x6D, 0x00, 0x41, 0x00, 0x6B, 0x00, 0x28, 0x00, 0xA9, 0x00, 0x3A, 0x00, 0x5F, 0x00, 0x08, 0x00, -/* 00014230 */ 0x2B, 0x00, 0x23, 0x00, 0x57, 0x00, 0x04, 0x00, 0x38, 0x00, 0x08, 0x00, 0x1C, 0x00, 0x00, 0x3F, -/* 00014240 */ 0x5D, 0x18, 0xC1, 0x13, 0x8D, 0x25, 0x00, 0xFE, 0x62, 0x05, 0x1A, 0xA0, 0x41, 0xD1, 0x00, 0x57, -/* 00014250 */ 0xFE, 0xEB, 0xEC, 0x11, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0xEB, 0xEC, 0xFE, 0xE2, -/* 00014260 */ 0x6D, 0xFE, 0xE2, 0x6D, 0x0D, 0xFE, 0x37, 0x04, 0xFE, 0x24, 0x02, 0xFE, 0x38, 0x04, 0xFE, 0x39, -/* 00014270 */ 0x04, 0xFE, 0x3A, 0x04, 0xFE, 0x3B, 0x04, 0xFE, 0x3C, 0x04, 0xFE, 0x3D, 0x04, 0xFE, 0x3E, 0x04, -/* 00014280 */ 0xFE, 0x3F, 0x04, 0xFE, 0x40, 0x04, 0xFE, 0xF5, 0x01, 0xFE, 0x88, 0x03, 0x11, 0x34, 0x41, 0x09, -/* 00014290 */ 0xFE, 0x7C, 0x01, 0xFE, 0x74, 0x01, 0x02, 0x17, 0x0D, 0x0B, 0x14, 0x14, 0x14, 0x14, 0x09, 0x3E, -/* 000142A0 */ 0x3F, 0x40, 0x08, 0x06, 0xFE, 0x3D, 0x03, 0x06, 0xFE, 0x41, 0x04, 0x06, 0xFE, 0x42, 0x04, 0x06, -/* 000142B0 */ 0xFE, 0x43, 0x04, 0x06, 0xFE, 0x44, 0x04, 0x06, 0xFE, 0x45, 0x04, 0x06, 0xFE, 0x13, 0x04, 0x06, -/* 000142C0 */ 0xFE, 0x46, 0x04, 0x06, 0xFE, 0x47, 0x04, 0x06, 0xFE, 0x48, 0x04, 0x06, 0xFE, 0x49, 0x04, 0x06, -/* 000142D0 */ 0xFE, 0x4A, 0x04, 0x06, 0xFE, 0x4B, 0x04, 0x06, 0xFE, 0x4C, 0x04, 0x06, 0xFE, 0x4D, 0x04, 0x06, -/* 000142E0 */ 0xFE, 0x4E, 0x04, 0x01, 0x01, 0x06, 0xFE, 0x4F, 0x04, 0x01, 0x00, 0x06, 0xFE, 0x50, 0x04, 0x06, -/* 000142F0 */ 0xFE, 0x51, 0x04, 0x01, 0x02, 0x07, 0x05, 0xFE, 0x52, 0x04, 0x05, 0xFE, 0x53, 0x04, 0x06, 0xFE, -/* 00014300 */ 0x54, 0x04, 0x05, 0xFE, 0x55, 0x04, 0x06, 0xFE, 0x56, 0x04, 0x05, 0xFE, 0x57, 0x04, 0x05, 0xFE, -/* 00014310 */ 0x58, 0x04, 0x05, 0xFE, 0x59, 0x04, 0x05, 0xFE, 0x5A, 0x04, 0x05, 0xFE, 0x5B, 0x04, 0x06, 0xFE, -/* 00014320 */ 0x0B, 0x04, 0x06, 0xFE, 0x40, 0x03, 0x06, 0xFE, 0x42, 0x03, 0x0C, 0x06, 0xFE, 0x43, 0x03, 0x06, -/* 00014330 */ 0xFE, 0x44, 0x03, 0x06, 0xFE, 0x0C, 0x04, 0x0B, 0x06, 0xFE, 0x3F, 0x03, 0x05, 0xFE, 0x25, 0x04, -/* 00014340 */ 0x06, 0xFE, 0x26, 0x04, 0x06, 0xFE, 0x8D, 0x03, 0x06, 0xFE, 0x27, 0x04, 0x06, 0xFE, 0x0D, 0x04, -/* 00014350 */ 0x05, 0xFE, 0x4B, 0x03, 0x06, 0xFE, 0x4C, 0x03, 0xFE, 0x6B, 0x06, 0xD3, 0x05, 0x34, 0x94, 0x02, -/* 00014360 */ 0x34, 0xD3, 0x09, 0x35, 0x94, 0x03, 0x35, 0x4F, 0x36, 0x4F, 0x37, 0x4F, 0x38, 0x4F, 0x39, 0x4F, -/* 00014370 */ 0x3A, 0x4F, 0x3B, 0x4F, 0x3C, 0x4F, 0x3D, 0x4F, 0x41, 0x94, 0x04, 0x41, 0x4F, 0x41, 0x94, 0x05, -/* 00014380 */ 0x41, 0x4F, 0x41, 0x94, 0x06, 0x41, 0x4F, 0x41, 0x94, 0x07, 0x41, 0x4F, 0x41, 0x94, 0x08, 0x41, -/* 00014390 */ 0x4F, 0x41, 0x94, 0x09, 0x41, 0x4F, 0x41, 0x94, 0x0A, 0x41, 0x4F, 0x41, 0x94, 0x0B, 0x41, 0x4F, -/* 000143A0 */ 0x41, 0x94, 0x0C, 0x41, 0x4F, 0x41, 0x94, 0x0D, 0x41, 0x4F, 0x41, 0x94, 0x0E, 0x41, 0x8D, 0x02, -/* 000143B0 */ 0x32, 0x41, 0x00, 0x00, 0x15, 0x03, 0x00, 0x41, 0x03, 0x09, 0x13, 0x00, 0x8D, 0x02, 0x32, 0x41, -/* 000143C0 */ 0x00, 0x00, 0x15, 0x03, 0x00, 0x41, 0x04, 0x09, 0x05, 0x00, 0xA6, 0x00, 0x09, 0xF5, 0x05, 0xCD, -/* 000143D0 */ 0x41, 0x03, 0x00, 0x00, 0x9F, 0x00, 0x05, 0x41, 0x9F, 0x01, 0x06, 0x41, 0x9F, 0x02, 0x07, 0x41, -/* 000143E0 */ 0x47, 0x36, 0x41, 0xCD, 0x41, 0x02, 0x01, 0x00, 0x9F, 0x00, 0x08, 0x41, 0x9F, 0x01, 0x09, 0x41, -/* 000143F0 */ 0x47, 0x37, 0x41, 0x8D, 0x02, 0x37, 0x42, 0x01, 0x00, 0x4B, 0x42, 0x6B, 0x41, 0x42, 0x00, 0x07, -/* 00014400 */ 0x03, 0x00, 0x5A, 0x00, 0x42, 0x5B, 0x01, 0x37, 0x00, 0x00, 0x5B, 0x02, 0x36, 0x00, 0x00, 0xF2, -/* 00014410 */ 0x03, 0x41, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x38, 0x41, 0xCD, 0x41, 0x09, 0x02, -/* 00014420 */ 0x00, 0xCD, 0x42, 0x02, 0x03, 0x00, 0x9F, 0x00, 0x0A, 0x42, 0x9F, 0x01, 0x36, 0x42, 0x9F, 0x00, -/* 00014430 */ 0x42, 0x41, 0xCD, 0x42, 0x02, 0x04, 0x00, 0x9F, 0x00, 0x0B, 0x42, 0x9F, 0x01, 0x36, 0x42, 0x9F, -/* 00014440 */ 0x01, 0x42, 0x41, 0xCD, 0x42, 0x02, 0x05, 0x00, 0x9F, 0x00, 0x0C, 0x42, 0x9F, 0x01, 0x37, 0x42, -/* 00014450 */ 0x9F, 0x02, 0x42, 0x41, 0xCD, 0x42, 0x02, 0x06, 0x00, 0x9F, 0x00, 0x0D, 0x42, 0x9F, 0x01, 0x38, -/* 00014460 */ 0x42, 0x9F, 0x03, 0x42, 0x41, 0xCD, 0x42, 0x02, 0x07, 0x00, 0x9F, 0x00, 0x0E, 0x42, 0x9F, 0x01, -/* 00014470 */ 0x37, 0x42, 0x9F, 0x04, 0x42, 0x41, 0xCD, 0x42, 0x02, 0x08, 0x00, 0x9F, 0x00, 0x0F, 0x42, 0x9F, -/* 00014480 */ 0x01, 0x37, 0x42, 0x9F, 0x05, 0x42, 0x41, 0xCD, 0x42, 0x02, 0x09, 0x00, 0x9F, 0x00, 0x10, 0x42, -/* 00014490 */ 0x9F, 0x01, 0x37, 0x42, 0x9F, 0x06, 0x42, 0x41, 0xCD, 0x42, 0x02, 0x0A, 0x00, 0x9F, 0x00, 0x11, -/* 000144A0 */ 0x42, 0x9F, 0x01, 0x37, 0x42, 0x9F, 0x07, 0x42, 0x41, 0xCD, 0x42, 0x02, 0x0B, 0x00, 0x9F, 0x00, -/* 000144B0 */ 0x12, 0x42, 0x8D, 0x02, 0x37, 0x44, 0x01, 0x00, 0x4B, 0x44, 0x6B, 0x43, 0x44, 0x01, 0x07, 0x03, -/* 000144C0 */ 0x00, 0x5A, 0x00, 0x44, 0x5B, 0x01, 0x36, 0x01, 0x00, 0x5B, 0x02, 0x13, 0x01, 0x00, 0xF2, 0x03, -/* 000144D0 */ 0x43, 0x43, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x9F, 0x01, 0x43, 0x42, 0x9F, 0x08, 0x42, 0x41, -/* 000144E0 */ 0x94, 0x04, 0x41, 0xD3, 0x00, 0x41, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x02, 0xEE, 0x01, 0x41, 0x41, -/* 000144F0 */ 0x02, 0x00, 0x94, 0x05, 0x41, 0xD3, 0x01, 0x41, 0x94, 0x06, 0x41, 0xD3, 0x02, 0x41, 0x94, 0x07, -/* 00014500 */ 0x41, 0xD3, 0x03, 0x41, 0x94, 0x08, 0x41, 0xD3, 0x04, 0x41, 0x94, 0x09, 0x41, 0xCD, 0x41, 0x03, -/* 00014510 */ 0x0C, 0x00, 0xA6, 0x42, 0x9F, 0x00, 0x42, 0x41, 0xA6, 0x42, 0x9F, 0x01, 0x42, 0x41, 0xA6, 0x42, -/* 00014520 */ 0x9F, 0x02, 0x42, 0x41, 0x94, 0x0A, 0x41, 0x8D, 0x02, 0x35, 0x41, 0x02, 0x00, 0x4B, 0x41, 0x07, -/* 00014530 */ 0x02, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, -/* 00014540 */ 0x00, 0x00, 0x79, 0x15, 0x42, 0x02, 0x79, 0x13, 0x42, 0x03, 0x79, 0x18, 0x42, 0x04, 0x5B, 0x01, -/* 00014550 */ 0x42, 0x03, 0x00, 0xEE, 0x02, 0x41, 0x41, 0x03, 0x00, 0x47, 0x39, 0x41, 0xD3, 0x06, 0x41, 0x07, -/* 00014560 */ 0x06, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x1A, 0x04, 0x00, 0x5B, 0x02, 0x1B, 0x04, 0x00, 0x5B, -/* 00014570 */ 0x03, 0x1C, 0x04, 0x00, 0x60, 0x42, 0x39, 0x05, 0x5B, 0x04, 0x42, 0x04, 0x00, 0x8D, 0x02, 0x36, -/* 00014580 */ 0x42, 0x03, 0x00, 0x4B, 0x42, 0x60, 0x42, 0x42, 0x06, 0x5B, 0x05, 0x42, 0x04, 0x00, 0xEE, 0x06, -/* 00014590 */ 0xFF, 0x41, 0x04, 0x00, 0xD3, 0x07, 0x41, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x1D, -/* 000145A0 */ 0x05, 0x00, 0x5B, 0x02, 0x1E, 0x05, 0x00, 0x5B, 0x03, 0x1E, 0x05, 0x00, 0x60, 0x42, 0x39, 0x07, -/* 000145B0 */ 0x5B, 0x04, 0x42, 0x05, 0x00, 0x8D, 0x02, 0x36, 0x42, 0x03, 0x00, 0x4B, 0x42, 0x60, 0x42, 0x42, -/* 000145C0 */ 0x08, 0x5B, 0x05, 0x42, 0x05, 0x00, 0xEE, 0x06, 0xFF, 0x41, 0x05, 0x00, 0xD3, 0x08, 0x41, 0x07, -/* 000145D0 */ 0x06, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x1F, 0x06, 0x00, 0x5B, 0x02, 0x20, 0x06, 0x00, 0x5B, -/* 000145E0 */ 0x03, 0x20, 0x06, 0x00, 0x60, 0x42, 0x39, 0x09, 0x5B, 0x04, 0x42, 0x06, 0x00, 0x8D, 0x02, 0x36, -/* 000145F0 */ 0x42, 0x03, 0x00, 0x4B, 0x42, 0x60, 0x42, 0x42, 0x0A, 0x5B, 0x05, 0x42, 0x06, 0x00, 0xEE, 0x06, -/* 00014600 */ 0xFF, 0x41, 0x06, 0x00, 0x8D, 0x02, 0x32, 0x41, 0x00, 0x00, 0x15, 0x03, 0x00, 0x41, 0x03, 0x09, -/* 00014610 */ 0x05, 0x00, 0xA6, 0x00, 0x09, 0xAD, 0x03, 0x8D, 0x02, 0x23, 0x41, 0x04, 0x00, 0x07, 0x03, 0x00, -/* 00014620 */ 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x21, 0x07, 0x00, 0x91, 0x03, 0x42, 0x05, 0x00, 0x5B, 0x02, 0x42, -/* 00014630 */ 0x07, 0x00, 0xEE, 0x03, 0xFF, 0x41, 0x07, 0x00, 0xD3, 0x0A, 0x41, 0x94, 0x0B, 0x41, 0xD3, 0x0B, -/* 00014640 */ 0x41, 0x94, 0x0C, 0x41, 0xD3, 0x0C, 0x41, 0x94, 0x0D, 0x41, 0x8D, 0x02, 0x23, 0x41, 0x04, 0x00, -/* 00014650 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x22, 0x08, 0x00, 0x91, 0x0D, 0x42, 0x06, 0x00, -/* 00014660 */ 0x5B, 0x02, 0x42, 0x08, 0x00, 0xEE, 0x03, 0xFF, 0x41, 0x08, 0x00, 0xD3, 0x0D, 0x41, 0x47, 0x3A, -/* 00014670 */ 0x41, 0x8D, 0x02, 0x23, 0x41, 0x04, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x23, -/* 00014680 */ 0x09, 0x00, 0x5B, 0x02, 0x3A, 0x09, 0x00, 0xEE, 0x03, 0xFF, 0x41, 0x09, 0x00, 0x8D, 0x02, 0x37, -/* 00014690 */ 0x42, 0x01, 0x00, 0x4B, 0x42, 0x6B, 0x41, 0x42, 0x0B, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x42, 0x91, -/* 000146A0 */ 0x03, 0x43, 0x05, 0x00, 0x5B, 0x01, 0x43, 0x0A, 0x00, 0x5B, 0x02, 0x24, 0x0A, 0x00, 0xCB, 0x14, -/* 000146B0 */ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x91, 0x03, 0x44, 0x05, 0x00, -/* 000146C0 */ 0x07, 0x01, 0x00, 0xC2, 0x01, 0x44, 0x44, 0x0B, 0x00, 0x79, 0x44, 0x43, 0x0C, 0x79, 0x27, 0x43, -/* 000146D0 */ 0x0D, 0x79, 0x27, 0x43, 0x0E, 0x79, 0x27, 0x43, 0x0F, 0x5B, 0x03, 0x43, 0x0A, 0x00, 0xF2, 0x04, -/* 000146E0 */ 0xFF, 0x41, 0x0B, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x8D, 0x02, 0x04, 0x41, 0x07, 0x00, 0x07, 0x03, -/* 000146F0 */ 0x00, 0x5A, 0x00, 0x02, 0x91, 0x03, 0x42, 0x05, 0x00, 0x60, 0x42, 0x42, 0x10, 0x5B, 0x01, 0x42, -/* 00014700 */ 0x0C, 0x00, 0x8D, 0x02, 0x08, 0x42, 0x08, 0x00, 0x60, 0x42, 0x42, 0x10, 0x5B, 0x02, 0x42, 0x0C, -/* 00014710 */ 0x00, 0xEE, 0x03, 0xFF, 0x41, 0x0C, 0x00, 0x8D, 0x02, 0x37, 0x42, 0x01, 0x00, 0x4B, 0x42, 0x6B, -/* 00014720 */ 0x41, 0x42, 0x0B, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x42, 0x91, 0x03, 0x43, 0x05, 0x00, 0x60, 0x43, -/* 00014730 */ 0x43, 0x11, 0x5B, 0x01, 0x43, 0x0D, 0x00, 0x5B, 0x02, 0x2A, 0x0D, 0x00, 0xCB, 0x2C, 0x00, 0x00, -/* 00014740 */ 0x00, 0x02, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x91, 0x03, 0x44, 0x05, 0x00, 0x79, 0x44, -/* 00014750 */ 0x43, 0x0C, 0x79, 0x2B, 0x43, 0x0D, 0x79, 0x27, 0x43, 0x0E, 0x79, 0x2B, 0x43, 0x0F, 0x5B, 0x03, -/* 00014760 */ 0x43, 0x0D, 0x00, 0xF2, 0x04, 0xFF, 0x41, 0x0B, 0x00, 0x00, 0x00, 0x0D, 0x00, 0xD3, 0x0E, 0x41, -/* 00014770 */ 0x47, 0x3B, 0x41, 0x8D, 0x02, 0x37, 0x42, 0x01, 0x00, 0x4B, 0x42, 0x6B, 0x41, 0x42, 0x0B, 0x07, -/* 00014780 */ 0x04, 0x00, 0x5A, 0x00, 0x42, 0x5B, 0x01, 0x3B, 0x0E, 0x00, 0x5B, 0x02, 0x2C, 0x0E, 0x00, 0xCB, -/* 00014790 */ 0x44, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x79, 0x2D, 0x43, 0x0C, -/* 000147A0 */ 0x79, 0x27, 0x43, 0x0D, 0x79, 0x27, 0x43, 0x0E, 0x79, 0x2B, 0x43, 0x0F, 0x5B, 0x03, 0x43, 0x0E, -/* 000147B0 */ 0x00, 0xF2, 0x04, 0xFF, 0x41, 0x0B, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x8D, 0x02, 0x37, 0x42, 0x01, -/* 000147C0 */ 0x00, 0x4B, 0x42, 0x6B, 0x41, 0x42, 0x0B, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x42, 0x91, 0x03, 0x43, -/* 000147D0 */ 0x05, 0x00, 0x60, 0x43, 0x43, 0x11, 0x5B, 0x01, 0x43, 0x0F, 0x00, 0x5B, 0x02, 0x2E, 0x0F, 0x00, -/* 000147E0 */ 0xCB, 0x5C, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x8D, 0x02, 0x23, -/* 000147F0 */ 0x44, 0x04, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x2D, 0x10, 0x00, 0x5B, 0x02, -/* 00014800 */ 0x3B, 0x10, 0x00, 0xEE, 0x03, 0x44, 0x44, 0x10, 0x00, 0x79, 0x44, 0x43, 0x12, 0x79, 0x27, 0x43, -/* 00014810 */ 0x0E, 0x79, 0x2B, 0x43, 0x0F, 0x5B, 0x03, 0x43, 0x0F, 0x00, 0xF2, 0x04, 0xFF, 0x41, 0x0B, 0x00, -/* 00014820 */ 0x00, 0x00, 0x0F, 0x00, 0x8D, 0x02, 0x37, 0x42, 0x01, 0x00, 0x4B, 0x42, 0x6B, 0x41, 0x42, 0x0B, -/* 00014830 */ 0x07, 0x04, 0x00, 0x5A, 0x00, 0x42, 0x91, 0x03, 0x43, 0x05, 0x00, 0x60, 0x43, 0x43, 0x11, 0x5B, -/* 00014840 */ 0x01, 0x43, 0x11, 0x00, 0x5B, 0x02, 0x30, 0x11, 0x00, 0xCB, 0x70, 0x00, 0x00, 0x00, 0x05, 0x00, -/* 00014850 */ 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x79, 0x3A, 0x43, 0x0C, 0x79, 0x27, 0x43, 0x0E, 0x79, 0x2B, -/* 00014860 */ 0x43, 0x0F, 0x79, 0x2B, 0x43, 0x0D, 0x5B, 0x03, 0x43, 0x11, 0x00, 0xF2, 0x04, 0xFF, 0x41, 0x0B, -/* 00014870 */ 0x00, 0x00, 0x00, 0x11, 0x00, 0x8D, 0x02, 0x37, 0x42, 0x01, 0x00, 0x4B, 0x42, 0x6B, 0x41, 0x42, -/* 00014880 */ 0x0B, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x42, 0x91, 0x03, 0x43, 0x05, 0x00, 0x60, 0x43, 0x43, 0x11, -/* 00014890 */ 0x5B, 0x01, 0x43, 0x12, 0x00, 0x5B, 0x02, 0x31, 0x12, 0x00, 0xCB, 0x88, 0x00, 0x00, 0x00, 0x06, -/* 000148A0 */ 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0xD6, 0x0F, 0x44, 0x43, 0x79, 0x44, 0x43, 0x0C, 0x79, -/* 000148B0 */ 0x2B, 0x43, 0x0D, 0x79, 0x27, 0x43, 0x0E, 0x79, 0x2B, 0x43, 0x0F, 0x5B, 0x03, 0x43, 0x12, 0x00, -/* 000148C0 */ 0xF2, 0x04, 0xFF, 0x41, 0x0B, 0x00, 0x00, 0x00, 0x12, 0x00, 0x94, 0x0E, 0x32, 0x8D, 0x02, 0x23, -/* 000148D0 */ 0x41, 0x04, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x91, 0x0E, 0x42, 0x09, 0x00, 0x5B, 0x01, -/* 000148E0 */ 0x42, 0x13, 0x00, 0xD3, 0x10, 0x42, 0x5B, 0x02, 0x42, 0x13, 0x00, 0xEE, 0x03, 0x41, 0x41, 0x13, -/* 000148F0 */ 0x00, 0x47, 0x3C, 0x41, 0x8D, 0x02, 0x37, 0x42, 0x01, 0x00, 0x4B, 0x42, 0x6B, 0x41, 0x42, 0x13, -/* 00014900 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x42, 0x5B, 0x01, 0x3C, 0x14, 0x00, 0x8D, 0x01, 0x16, 0x43, 0x0A, -/* 00014910 */ 0x00, 0x4B, 0x43, 0x5B, 0x02, 0x43, 0x14, 0x00, 0xF2, 0x03, 0x41, 0x41, 0x13, 0x00, 0x00, 0x00, -/* 00014920 */ 0x14, 0x00, 0x47, 0x3D, 0x41, 0x8D, 0x02, 0x37, 0x42, 0x01, 0x00, 0x4B, 0x42, 0x6B, 0x41, 0x42, -/* 00014930 */ 0x0B, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x42, 0x5B, 0x01, 0x3D, 0x15, 0x00, 0x5B, 0x02, 0x2C, 0x15, -/* 00014940 */ 0x00, 0xCB, 0xA0, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x79, 0x33, -/* 00014950 */ 0x43, 0x0C, 0x79, 0x27, 0x43, 0x0D, 0x79, 0x27, 0x43, 0x0E, 0x79, 0x2B, 0x43, 0x0F, 0x5B, 0x03, -/* 00014960 */ 0x43, 0x15, 0x00, 0xF2, 0x04, 0xFF, 0x41, 0x0B, 0x00, 0x00, 0x00, 0x15, 0x00, 0x8D, 0x02, 0x37, -/* 00014970 */ 0x42, 0x01, 0x00, 0x4B, 0x42, 0x6B, 0x41, 0x42, 0x0B, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x42, 0x91, -/* 00014980 */ 0x03, 0x43, 0x05, 0x00, 0x5B, 0x01, 0x43, 0x16, 0x00, 0x5B, 0x02, 0x33, 0x16, 0x00, 0xCB, 0xB8, -/* 00014990 */ 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x79, 0x3D, 0x43, 0x0C, 0x79, -/* 000149A0 */ 0x2B, 0x43, 0x0D, 0x79, 0x27, 0x43, 0x0E, 0x79, 0x2B, 0x43, 0x0F, 0x5B, 0x03, 0x43, 0x16, 0x00, -/* 000149B0 */ 0xF2, 0x04, 0xFF, 0x41, 0x0B, 0x00, 0x00, 0x00, 0x16, 0x00, 0x91, 0x03, 0x00, 0x05, 0x00, 0x09, -/* 000149C0 */ 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x09, 0xD0, 0x00, 0xB8, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, -/* 000149D0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, -/* 000149E0 */ 0x00, 0x81, 0x01, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 000149F0 */ 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, -/* 00014A00 */ 0x00, 0x88, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, -/* 00014A10 */ 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x70, 0x00, 0x00, -/* 00014A20 */ 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, -/* 00014A30 */ 0x00, 0x81, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x5C, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, -/* 00014A40 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, -/* 00014A50 */ 0x00, 0x44, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, -/* 00014A60 */ 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x2C, 0x00, 0x00, -/* 00014A70 */ 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, -/* 00014A80 */ 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, -/* 00014A90 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, -/* 00014AA0 */ 0x00, 0x81, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 00014AB0 */ 0x00, 0x60, 0x01, 0x00, 0x00, 0x5E, 0x01, 0x00, 0x00, 0x61, 0x01, 0x00, 0x00, 0x5D, 0xFE, 0x3F, -/* 00014AC0 */ 0x01, 0xFE, 0x60, 0x01, 0xFE, 0x5E, 0x01, 0xFE, 0x61, 0x01, 0xFE, 0x60, 0x01, 0xFE, 0x03, 0x03, -/* 00014AD0 */ 0xFE, 0x5E, 0x01, 0xFE, 0x04, 0x03, 0xFE, 0x61, 0x01, 0xFE, 0x05, 0x03, 0xFE, 0x88, 0x01, 0xFE, -/* 00014AE0 */ 0x83, 0x01, 0xFE, 0x82, 0x01, 0xFE, 0x80, 0x01, 0xFE, 0x81, 0x01, 0xFE, 0x15, 0x01, 0xFE, 0x15, -/* 00014AF0 */ 0x01, 0xFE, 0x84, 0x01, 0x4D, 0xFE, 0x01, 0xED, 0x28, 0x53, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x3E, -/* 00014B00 */ 0x00, 0x05, 0x00, 0x1B, 0x00, 0x14, 0x00, 0x3D, 0x00, 0x10, 0x00, 0x38, 0x00, 0x29, 0x00, 0x4C, -/* 00014B10 */ 0x00, 0xC7, 0x00, 0xA3, 0x03, 0x12, 0x00, 0xF7, 0x20, 0x06, 0x00, 0xFD, 0x0A, 0x06, 0x00, 0x25, -/* 00014B20 */ 0x07, 0x06, 0x00, 0x20, 0x01, 0x06, 0x00, 0x78, 0x01, 0x1A, 0x00, 0x5C, 0x00, 0x35, 0x00, 0x36, -/* 00014B30 */ 0x0F, 0x38, 0x00, 0x2E, 0x02, 0x38, 0x00, 0x40, 0x02, 0x38, 0x00, 0x9A, 0x02, 0x0E, 0x00, 0x27, -/* 00014B40 */ 0x00, 0x05, 0x00, 0xB0, 0x04, 0x21, 0x00, 0x05, 0x02, 0x06, 0x00, 0xDC, 0x03, 0x06, 0x00, 0xAC, -/* 00014B50 */ 0x01, 0x06, 0x00, 0x8F, 0x00, 0x21, 0x00, 0x4C, 0x00, 0x06, 0x00, 0xA4, 0x00, 0x1C, 0x00, 0x5A, -/* 00014B60 */ 0x00, 0x5B, 0x00, 0xC9, 0x00, 0x2F, 0x00, 0x43, 0x00, 0x56, 0x00, 0x4C, 0x01, 0x06, 0x00, 0x9E, -/* 00014B70 */ 0x00, 0x48, 0x00, 0xB7, 0x00, 0x69, 0x00, 0xC7, 0x00, 0x51, 0x00, 0xCF, 0x00, 0x55, 0x00, 0x59, -/* 00014B80 */ 0x05, 0x03, 0x00, 0x61, 0x00, 0x27, 0x00, 0x3D, 0x01, 0x31, 0x00, 0x7B, 0x00, 0x48, 0x00, 0xD7, -/* 00014B90 */ 0x00, 0x4D, 0x00, 0xDF, 0x00, 0x0A, 0x00, 0x1B, 0x00, 0x00, 0xF6, 0x66, 0x01, 0x00, 0x19, 0x63, -/* 00014BA0 */ 0x01, 0x00, 0x05, 0x5E, 0x01, 0x00, 0x11, 0x5D, 0x01, 0x00, 0x20, 0x5C, 0x01, 0x00, 0x29, 0x59, -/* 00014BB0 */ 0x01, 0x00, 0xAF, 0x57, 0x01, 0x00, 0x35, 0x56, 0x01, 0x00, 0xBB, 0x54, 0x01, 0x00, 0x88, 0x52, -/* 00014BC0 */ 0x01, 0x00, 0x61, 0x51, 0x01, 0x00, 0x71, 0x50, 0x01, 0x00, 0xC1, 0x4F, 0x01, 0x00, 0x11, 0x4F, -/* 00014BD0 */ 0x01, 0x00, 0x88, 0x4E, 0x01, 0x00, 0x7E, 0x4C, 0x01, 0x00, 0xDE, 0x4B, 0x01, 0x00, 0xBF, 0x5C, -/* 00014BE0 */ 0x08, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x9B, 0x07, 0x71, 0xA2, 0x41, 0xD1, 0x00, 0x73, 0xFF, -/* 00014BF0 */ 0xAC, 0x57, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x02, 0xFF, 0xAC, 0x57, 0x01, 0x00, -/* 00014C00 */ 0xC9, 0xC9, 0x01, 0x06, 0x03, 0x07, 0x07, 0x17, 0x16, 0x03, 0x01, 0x03, 0x01, 0x01, 0x01, 0x01, -/* 00014C10 */ 0x06, 0x08, 0x55, 0x59, 0x07, 0xB2, 0x05, 0x07, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA6, 0x07, 0x47, -/* 00014C20 */ 0x04, 0x07, 0x8D, 0x02, 0x17, 0x07, 0x00, 0x00, 0x4B, 0x07, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x02, -/* 00014C30 */ 0x5B, 0x01, 0x05, 0x00, 0x00, 0x8D, 0x01, 0x0E, 0x08, 0x01, 0x00, 0x4B, 0x08, 0x5B, 0x02, 0x08, -/* 00014C40 */ 0x00, 0x00, 0x8D, 0x03, 0x03, 0x08, 0x02, 0x00, 0x60, 0x08, 0x08, 0x00, 0x5B, 0x03, 0x08, 0x00, -/* 00014C50 */ 0x00, 0x5B, 0x04, 0x03, 0x00, 0x00, 0x5B, 0x05, 0x04, 0x00, 0x00, 0xEE, 0x06, 0x00, 0x07, 0x00, -/* 00014C60 */ 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xD9, 0x01, 0xFF, 0xBF, 0x57, 0x01, 0x00, -/* 00014C70 */ 0x03, 0x05, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x23, 0x00, 0x44, 0x00, 0x92, 0x00, 0x00, 0x3F, 0x5D, -/* 00014C80 */ 0x18, 0x01, 0x00, 0x8D, 0x07, 0x00, 0xFE, 0x75, 0x07, 0x13, 0xA0, 0x41, 0xC3, 0x00, 0xFE, 0x0D, -/* 00014C90 */ 0x04, 0x71, 0xFF, 0x00, 0x00, 0x00, 0x02, 0xFF, 0xDC, 0x51, 0x01, 0x00, 0x01, 0xFF, 0x00, 0x10, -/* 00014CA0 */ 0x01, 0x00, 0x01, 0x01, 0xFF, 0xDC, 0x51, 0x01, 0x00, 0xFE, 0x60, 0x04, 0xFE, 0x60, 0x04, 0x01, -/* 00014CB0 */ 0xFE, 0x02, 0x04, 0x07, 0x12, 0x17, 0x05, 0x2B, 0x2A, 0x03, 0x02, 0x01, 0x03, 0x14, 0x15, 0x16, -/* 00014CC0 */ 0x06, 0xFE, 0x0D, 0x04, 0x08, 0x06, 0xFE, 0xF7, 0x03, 0x06, 0xFE, 0x99, 0x04, 0x06, 0xFE, 0x35, -/* 00014CD0 */ 0x04, 0x06, 0xFE, 0x88, 0x04, 0x06, 0xFE, 0x86, 0x04, 0x06, 0xFE, 0x46, 0x04, 0x06, 0xFE, 0x47, -/* 00014CE0 */ 0x04, 0x06, 0xFE, 0x48, 0x04, 0x06, 0xFE, 0x49, 0x04, 0x06, 0xFE, 0x4A, 0x04, 0x06, 0xFE, 0x4B, -/* 00014CF0 */ 0x04, 0x06, 0xFE, 0x4C, 0x04, 0x06, 0xFE, 0x4D, 0x04, 0x06, 0xFE, 0x4E, 0x04, 0x9F, 0x59, 0x17, -/* 00014D00 */ 0xB2, 0x12, 0x17, 0x4F, 0x13, 0x4F, 0x17, 0x94, 0x02, 0x17, 0x8D, 0x01, 0x0B, 0x17, 0x00, 0x00, -/* 00014D10 */ 0x4B, 0x17, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x03, 0x5B, 0x01, 0x12, 0x00, 0x00, 0x5B, 0x02, 0x02, -/* 00014D20 */ 0x00, 0x00, 0xEE, 0x03, 0x17, 0x17, 0x00, 0x00, 0x94, 0x02, 0x17, 0xCD, 0x17, 0x0E, 0x00, 0x00, -/* 00014D30 */ 0x9F, 0x00, 0x04, 0x17, 0x9F, 0x01, 0x05, 0x17, 0x9F, 0x02, 0x06, 0x17, 0x9F, 0x03, 0x07, 0x17, -/* 00014D40 */ 0x9F, 0x04, 0x08, 0x17, 0x9F, 0x05, 0x09, 0x17, 0x9F, 0x06, 0x0A, 0x17, 0x9F, 0x07, 0x0B, 0x17, -/* 00014D50 */ 0x9F, 0x08, 0x0C, 0x17, 0x9F, 0x09, 0x0D, 0x17, 0x9F, 0x0A, 0x0E, 0x17, 0x9F, 0x0B, 0x0F, 0x17, -/* 00014D60 */ 0x9F, 0x0C, 0x10, 0x17, 0x9F, 0x0D, 0x11, 0x17, 0x47, 0x13, 0x17, 0x8D, 0x02, 0x19, 0x17, 0x01, -/* 00014D70 */ 0x00, 0x4B, 0x17, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x5B, 0x01, 0x13, 0x01, 0x00, 0x91, 0x02, -/* 00014D80 */ 0x18, 0x02, 0x00, 0x5B, 0x02, 0x18, 0x01, 0x00, 0xD3, 0x00, 0x18, 0x5B, 0x03, 0x18, 0x01, 0x00, -/* 00014D90 */ 0xEE, 0x04, 0x00, 0x17, 0x01, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFF, 0x09, 0x52, -/* 00014DA0 */ 0x01, 0x00, 0x04, 0x0C, 0x00, 0x00, 0x00, 0x21, 0x00, 0x4C, 0x00, 0x40, 0x00, 0xE6, 0x01, 0x30, -/* 00014DB0 */ 0x00, 0x00, 0x02, 0x00, 0xB8, 0x4D, 0x01, 0x00, 0xBF, 0x4C, 0x00, 0xC1, 0x43, 0xA8, 0x01, 0x00, -/* 00014DC0 */ 0xFE, 0x88, 0x07, 0x44, 0xA2, 0x41, 0xD1, 0x00, 0x72, 0xFF, 0x6F, 0x54, 0x01, 0x00, 0xFF, 0x00, -/* 00014DD0 */ 0x10, 0x01, 0x00, 0x03, 0x03, 0xFF, 0x6F, 0x54, 0x01, 0x00, 0xFE, 0xBD, 0x01, 0xFE, 0xBD, 0x01, -/* 00014DE0 */ 0x01, 0x07, 0x07, 0x0B, 0x1B, 0x17, 0x04, 0x01, 0x04, 0x04, 0x04, 0x04, 0x01, 0x0A, 0x0B, 0x06, -/* 00014DF0 */ 0xFE, 0x86, 0x04, 0x07, 0x06, 0xFE, 0x82, 0x04, 0x06, 0xFE, 0x80, 0x04, 0x0B, 0x5B, 0x4F, 0x09, -/* 00014E00 */ 0x14, 0x03, 0x00, 0x07, 0x02, 0x09, 0x4D, 0x00, 0x8D, 0x01, 0x02, 0x0C, 0x00, 0x00, 0x4B, 0x0C, -/* 00014E10 */ 0x60, 0x0C, 0x0C, 0x00, 0x47, 0x09, 0x0C, 0x8D, 0x01, 0x02, 0x0C, 0x00, 0x00, 0x4B, 0x0C, 0x60, -/* 00014E20 */ 0x0C, 0x0C, 0x01, 0xA6, 0x0D, 0x15, 0x03, 0x00, 0x0C, 0x0D, 0x09, 0x22, 0x00, 0x15, 0x03, 0x00, -/* 00014E30 */ 0x09, 0x03, 0x09, 0x1A, 0x00, 0x75, 0x09, 0x08, 0x02, 0x43, 0x0D, 0x09, 0x04, 0x47, 0x0C, 0x0D, -/* 00014E40 */ 0x0F, 0x07, 0x00, 0x0D, 0x43, 0x0D, 0x09, 0x05, 0x47, 0x0C, 0x0D, 0x75, 0x0C, 0x08, 0x03, 0x47, -/* 00014E50 */ 0x00, 0x06, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x86, 0x04, 0xFE, 0x3C, 0x02, 0xFE, -/* 00014E60 */ 0x86, 0x04, 0xFE, 0x3D, 0x02, 0xFF, 0x9F, 0x54, 0x01, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, -/* 00014E70 */ 0x00, 0x34, 0x00, 0x0F, 0x00, 0x3B, 0x00, 0x1E, 0x00, 0x52, 0x00, 0x04, 0x00, 0x35, 0x00, 0x16, -/* 00014E80 */ 0x00, 0x63, 0x00, 0x08, 0x00, 0x33, 0x00, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x01, 0x00, -/* 00014E90 */ 0xFE, 0x5E, 0x07, 0x1A, 0xA0, 0x41, 0xC1, 0x00, 0xFE, 0x36, 0x04, 0x70, 0xFF, 0xB0, 0x4E, 0x01, -/* 00014EA0 */ 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFF, 0xB0, 0x4E, 0x01, 0x00, 0x82, 0x82, 0x01, -/* 00014EB0 */ 0x05, 0x03, 0x06, 0x04, 0x12, 0x11, 0x03, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x05, 0x08, 0x3B, -/* 00014EC0 */ 0x59, 0x06, 0xB2, 0x03, 0x06, 0x4F, 0x04, 0x8D, 0x01, 0x0B, 0x06, 0x00, 0x00, 0x4B, 0x06, 0x07, -/* 00014ED0 */ 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x03, 0x00, 0x00, 0x8D, 0x01, 0x0D, 0x07, 0x01, 0x00, -/* 00014EE0 */ 0x4B, 0x07, 0x5B, 0x02, 0x07, 0x00, 0x00, 0xEE, 0x03, 0x06, 0x06, 0x00, 0x00, 0x47, 0x04, 0x06, -/* 00014EF0 */ 0x60, 0x00, 0x04, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x31, 0x04, 0xFF, 0xCA, -/* 00014F00 */ 0x4E, 0x01, 0x00, 0x03, 0x07, 0x00, 0x00, 0x00, 0x29, 0x00, 0x3E, 0x00, 0x09, 0x00, 0x29, 0x00, -/* 00014F10 */ 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x49, 0x07, 0x1E, 0xA2, 0x41, 0xC1, -/* 00014F20 */ 0x00, 0xFE, 0x27, 0x04, 0x6F, 0xFF, 0x5E, 0x4B, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, -/* 00014F30 */ 0x02, 0xFF, 0x5E, 0x4B, 0x01, 0x00, 0x84, 0x84, 0x01, 0x06, 0x04, 0x07, 0x0A, 0x1A, 0x1A, 0x03, -/* 00014F40 */ 0x02, 0x03, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0xFE, 0x27, 0x04, 0x08, 0x64, 0x59, 0x07, 0xB2, -/* 00014F50 */ 0x05, 0x07, 0x8D, 0x03, 0x37, 0x08, 0x00, 0x00, 0x4B, 0x08, 0x6B, 0x07, 0x08, 0x00, 0x07, 0x04, -/* 00014F60 */ 0x00, 0x5A, 0x00, 0x08, 0x8D, 0x01, 0x09, 0x09, 0x01, 0x00, 0x4B, 0x09, 0x5B, 0x01, 0x09, 0x00, -/* 00014F70 */ 0x00, 0xA6, 0x09, 0x5B, 0x02, 0x09, 0x00, 0x00, 0x8D, 0x01, 0x0C, 0x09, 0x02, 0x00, 0x4B, 0x09, -/* 00014F80 */ 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x5B, 0x01, 0x05, 0x01, 0x00, 0x5B, 0x02, 0x04, 0x01, 0x00, -/* 00014F90 */ 0x5B, 0x03, 0x02, 0x01, 0x00, 0xEE, 0x04, 0x09, 0x09, 0x01, 0x00, 0x5B, 0x03, 0x09, 0x00, 0x00, -/* 00014FA0 */ 0xF2, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, -/* 00014FB0 */ 0x00, 0x48, 0xFF, 0x7C, 0x4B, 0x01, 0x00, 0x02, 0x05, 0x00, 0x00, 0x00, 0x5D, 0x00, 0x65, 0x00, -/* 00014FC0 */ 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x44, 0x07, 0x17, 0xA2, 0x41, 0xC1, -/* 00014FD0 */ 0x00, 0xFE, 0x26, 0x04, 0x6E, 0xFF, 0x7C, 0x4A, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, -/* 00014FE0 */ 0x02, 0xFF, 0x7C, 0x4A, 0x01, 0x00, 0x76, 0x76, 0x01, 0x06, 0x04, 0x07, 0x0A, 0x1A, 0x1A, 0x03, -/* 00014FF0 */ 0x02, 0x03, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0xFE, 0x26, 0x04, 0x08, 0x64, 0x59, 0x07, 0xB2, -/* 00015000 */ 0x05, 0x07, 0x8D, 0x03, 0x37, 0x08, 0x00, 0x00, 0x4B, 0x08, 0x6B, 0x07, 0x08, 0x00, 0x07, 0x04, -/* 00015010 */ 0x00, 0x5A, 0x00, 0x08, 0x8D, 0x01, 0x08, 0x09, 0x01, 0x00, 0x4B, 0x09, 0x5B, 0x01, 0x09, 0x00, -/* 00015020 */ 0x00, 0xA6, 0x09, 0x5B, 0x02, 0x09, 0x00, 0x00, 0x8D, 0x01, 0x0C, 0x09, 0x02, 0x00, 0x4B, 0x09, -/* 00015030 */ 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x5B, 0x01, 0x05, 0x01, 0x00, 0x5B, 0x02, 0x04, 0x01, 0x00, -/* 00015040 */ 0x5B, 0x03, 0x02, 0x01, 0x00, 0xEE, 0x04, 0x09, 0x09, 0x01, 0x00, 0x5B, 0x03, 0x09, 0x00, 0x00, -/* 00015050 */ 0xF2, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, -/* 00015060 */ 0x00, 0x48, 0xFF, 0x9A, 0x4A, 0x01, 0x00, 0x02, 0x05, 0x00, 0x00, 0x00, 0x5D, 0x00, 0x57, 0x00, -/* 00015070 */ 0x00, 0xBF, 0x5C, 0x18, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x36, 0x07, 0x1D, 0xA2, 0x41, 0xC1, -/* 00015080 */ 0x00, 0xFE, 0x40, 0x04, 0x6D, 0xFF, 0xD6, 0x48, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, -/* 00015090 */ 0x04, 0xFF, 0xD6, 0x48, 0x01, 0x00, 0xFE, 0x8C, 0x01, 0xFE, 0x8C, 0x01, 0x01, 0x08, 0x03, 0x09, -/* 000150A0 */ 0x04, 0x24, 0x20, 0x03, 0x03, 0x01, 0x03, 0x02, 0x02, 0x02, 0x02, 0x08, 0x08, 0x8A, 0x4F, 0x06, -/* 000150B0 */ 0x4F, 0x07, 0x8D, 0x01, 0x0B, 0x09, 0x00, 0x00, 0x4B, 0x09, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, -/* 000150C0 */ 0x5B, 0x01, 0x03, 0x00, 0x00, 0x5B, 0x02, 0x05, 0x00, 0x00, 0xEE, 0x03, 0x09, 0x09, 0x00, 0x00, -/* 000150D0 */ 0x47, 0x06, 0x09, 0xA6, 0x09, 0x47, 0x07, 0x09, 0xA6, 0x09, 0x14, 0x03, 0x00, 0x04, 0x09, 0x09, -/* 000150E0 */ 0x20, 0x00, 0x8D, 0x03, 0x03, 0x0A, 0x01, 0x00, 0x6B, 0x09, 0x0A, 0x00, 0x07, 0x01, 0x00, 0x5A, -/* 000150F0 */ 0x00, 0x0A, 0xF2, 0x01, 0x09, 0x09, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x07, 0x09, 0x09, -/* 00015100 */ 0x22, 0x00, 0x8D, 0x03, 0x24, 0x0A, 0x02, 0x00, 0x6B, 0x09, 0x0A, 0x01, 0x07, 0x02, 0x00, 0x5A, -/* 00015110 */ 0x00, 0x0A, 0x5B, 0x01, 0x04, 0x02, 0x00, 0xF2, 0x02, 0x09, 0x09, 0x01, 0x00, 0x00, 0x00, 0x02, -/* 00015120 */ 0x00, 0x47, 0x07, 0x09, 0xCD, 0x00, 0x02, 0x00, 0x00, 0x9F, 0x00, 0x06, 0x00, 0x9F, 0x01, 0x07, -/* 00015130 */ 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x64, 0x02, 0xFE, 0x38, 0x03, 0xFF, 0xFF, -/* 00015140 */ 0x48, 0x01, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00, 0x21, 0x00, 0x3B, 0x00, 0x05, 0x00, 0x13, 0x00, -/* 00015150 */ 0x0A, 0x00, 0x2A, 0x00, 0x20, 0x00, 0x53, 0x00, 0x22, 0x00, 0x75, 0x00, 0x12, 0x00, 0x22, 0x00, -/* 00015160 */ 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x21, 0x07, 0x1D, 0xA2, 0x41, 0xC1, -/* 00015170 */ 0x00, 0xFE, 0x3F, 0x04, 0x6C, 0xFF, 0xFA, 0x44, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, -/* 00015180 */ 0x03, 0xFF, 0xFA, 0x44, 0x01, 0x00, 0xFE, 0xF6, 0x01, 0xFE, 0xF6, 0x01, 0x01, 0x08, 0x06, 0x0A, -/* 00015190 */ 0x04, 0x2A, 0x26, 0x03, 0x03, 0x01, 0x03, 0x03, 0x03, 0x03, 0x09, 0x06, 0xFE, 0xF6, 0x03, 0x05, -/* 000151A0 */ 0xFE, 0x98, 0x04, 0x06, 0xFE, 0x5B, 0x03, 0x06, 0xFE, 0x47, 0x03, 0xB0, 0x4F, 0x08, 0x2C, 0x0A, -/* 000151B0 */ 0x06, 0x15, 0x03, 0x00, 0x0A, 0x02, 0x09, 0x34, 0x00, 0x8D, 0x03, 0x03, 0x0B, 0x00, 0x00, 0x6B, -/* 000151C0 */ 0x0A, 0x0B, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0B, 0x47, 0x0C, 0x03, 0x01, 0x04, 0x01, 0x0D, -/* 000151D0 */ 0x07, 0x2F, 0x0C, 0x0C, 0x0D, 0x2F, 0x0C, 0x0C, 0x04, 0x5B, 0x01, 0x0C, 0x00, 0x00, 0x5B, 0x02, -/* 000151E0 */ 0x05, 0x00, 0x00, 0xF2, 0x03, 0xFF, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8D, 0x03, 0x03, -/* 000151F0 */ 0x0B, 0x00, 0x00, 0x6B, 0x0A, 0x0B, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0B, 0x5B, 0x01, 0x06, -/* 00015200 */ 0x01, 0x00, 0xF2, 0x02, 0x0A, 0x0A, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x08, 0x0A, 0xA6, -/* 00015210 */ 0x0A, 0x14, 0x08, 0x00, 0x08, 0x0A, 0x60, 0x0A, 0x08, 0x02, 0x0F, 0x34, 0x00, 0x0A, 0x8D, 0x03, -/* 00015220 */ 0x03, 0x0B, 0x00, 0x00, 0x6B, 0x0A, 0x0B, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0B, 0x47, 0x0C, -/* 00015230 */ 0x03, 0x01, 0x04, 0x01, 0x0D, 0x07, 0x2F, 0x0C, 0x0C, 0x0D, 0x2F, 0x0C, 0x0C, 0x04, 0x5B, 0x01, -/* 00015240 */ 0x0C, 0x02, 0x00, 0x5B, 0x02, 0x05, 0x02, 0x00, 0xF2, 0x03, 0xFF, 0x0A, 0x00, 0x00, 0x00, 0x00, -/* 00015250 */ 0x02, 0x00, 0x47, 0x00, 0x08, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x8A, 0x02, 0xFE, -/* 00015260 */ 0xEF, 0x01, 0xFE, 0x8F, 0x04, 0xFF, 0x1D, 0x45, 0x01, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x0B, -/* 00015270 */ 0x00, 0x2F, 0x00, 0x34, 0x00, 0x75, 0x00, 0x22, 0x00, 0x3E, 0x00, 0x0F, 0x00, 0x5D, 0x00, 0x34, -/* 00015280 */ 0x00, 0x76, 0x00, 0x08, 0x00, 0x1D, 0x00, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x01, 0x00, -/* 00015290 */ 0xFE, 0xFC, 0x06, 0x08, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x47, 0x03, 0x6B, 0xFF, 0x25, 0x3F, 0x01, -/* 000152A0 */ 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x01, 0xFF, 0x25, 0x3F, 0x01, 0x00, 0xFE, 0xB2, 0x03, -/* 000152B0 */ 0xFE, 0xB2, 0x03, 0x01, 0x0A, 0x04, 0x0A, 0x05, 0x60, 0x59, 0x03, 0x09, 0x06, 0x0A, 0x09, 0x0A, -/* 000152C0 */ 0x0A, 0x09, 0x08, 0x06, 0xFE, 0x47, 0x03, 0xFE, 0x94, 0x01, 0x59, 0x0A, 0xB2, 0x06, 0x0A, 0x4F, -/* 000152D0 */ 0x07, 0x4F, 0x08, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA6, 0x0A, 0x47, 0x04, 0x0A, 0x15, 0x05, 0x00, -/* 000152E0 */ 0x05, 0x02, 0xA6, 0x0A, 0x47, 0x05, 0x0A, 0x4F, 0x07, 0x4F, 0x08, 0x69, 0x09, 0x00, 0x00, 0x00, -/* 000152F0 */ 0x0A, 0x14, 0x0A, 0x00, 0x06, 0x0A, 0xA6, 0x0A, 0x14, 0x03, 0x00, 0x06, 0x0A, 0x09, 0x1C, 0x00, -/* 00015300 */ 0x8D, 0x01, 0x03, 0x0A, 0x00, 0x00, 0x07, 0x03, 0x00, 0x5B, 0x01, 0x04, 0x00, 0x00, 0x5B, 0x02, -/* 00015310 */ 0x05, 0x00, 0x00, 0xC2, 0x03, 0x00, 0x0A, 0x00, 0x00, 0x09, 0x40, 0x01, 0x8D, 0x03, 0x24, 0x0B, -/* 00015320 */ 0x01, 0x00, 0x6B, 0x0A, 0x0B, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0B, 0x5B, 0x01, 0x06, 0x01, -/* 00015330 */ 0x00, 0xF2, 0x02, 0x0A, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x07, 0x0A, 0x8D, 0x03, -/* 00015340 */ 0x37, 0x0B, 0x02, 0x00, 0x4B, 0x0B, 0x6B, 0x0A, 0x0B, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0B, -/* 00015350 */ 0x5B, 0x01, 0x07, 0x02, 0x00, 0xF2, 0x02, 0x0A, 0x0A, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x0F, -/* 00015360 */ 0x1F, 0x00, 0x0A, 0x8D, 0x03, 0x03, 0x0B, 0x03, 0x00, 0x6B, 0x0A, 0x0B, 0x02, 0x07, 0x02, 0x00, -/* 00015370 */ 0x5A, 0x00, 0x0B, 0x5B, 0x01, 0x03, 0x03, 0x00, 0xF2, 0x02, 0xFF, 0x0A, 0x02, 0x00, 0x00, 0x00, -/* 00015380 */ 0x03, 0x00, 0x8D, 0x03, 0x03, 0x0B, 0x03, 0x00, 0x6B, 0x0A, 0x0B, 0x03, 0x07, 0x02, 0x00, 0x5A, -/* 00015390 */ 0x00, 0x0B, 0x5B, 0x01, 0x07, 0x04, 0x00, 0xF2, 0x02, 0x0A, 0x0A, 0x03, 0x00, 0x00, 0x00, 0x04, -/* 000153A0 */ 0x00, 0x47, 0x08, 0x0A, 0xA6, 0x0A, 0x14, 0x03, 0x00, 0x08, 0x0A, 0x09, 0x43, 0x00, 0x8D, 0x03, -/* 000153B0 */ 0x37, 0x0B, 0x02, 0x00, 0x4B, 0x0B, 0x6B, 0x0A, 0x0B, 0x04, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x0B, -/* 000153C0 */ 0xF2, 0x01, 0x0A, 0x0A, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x47, 0x08, 0x0A, 0x8D, 0x03, 0x03, -/* 000153D0 */ 0x0B, 0x03, 0x00, 0x6B, 0x0A, 0x0B, 0x05, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0B, 0x5B, 0x01, 0x07, -/* 000153E0 */ 0x06, 0x00, 0x5B, 0x02, 0x08, 0x06, 0x00, 0xF2, 0x03, 0xFF, 0x0A, 0x05, 0x00, 0x00, 0x00, 0x06, -/* 000153F0 */ 0x00, 0x8D, 0x01, 0x06, 0x0A, 0x04, 0x00, 0x4B, 0x0A, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x5B, -/* 00015400 */ 0x01, 0x08, 0x07, 0x00, 0x5B, 0x02, 0x04, 0x07, 0x00, 0x5B, 0x03, 0x05, 0x07, 0x00, 0xEE, 0x04, -/* 00015410 */ 0xFF, 0x0A, 0x07, 0x00, 0x47, 0x0A, 0x08, 0x8D, 0x03, 0x37, 0x0C, 0x02, 0x00, 0x4B, 0x0C, 0x6B, -/* 00015420 */ 0x0B, 0x0C, 0x06, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x8D, 0x01, 0x0D, 0x0D, 0x05, 0x00, 0x4B, -/* 00015430 */ 0x0D, 0x5B, 0x01, 0x0D, 0x08, 0x00, 0x5B, 0x02, 0x07, 0x08, 0x00, 0xF2, 0x03, 0x0B, 0x0B, 0x06, -/* 00015440 */ 0x00, 0x00, 0x00, 0x08, 0x00, 0x75, 0x0B, 0x0A, 0x07, 0x60, 0x0A, 0x08, 0x08, 0x80, 0x0A, 0x0A, -/* 00015450 */ 0xF8, 0x00, 0xFA, 0x0A, 0x47, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x36, -/* 00015460 */ 0x03, 0xB0, 0xFE, 0x8E, 0x02, 0xFE, 0xEF, 0x01, 0x61, 0xFE, 0xF0, 0x01, 0x4D, 0xFE, 0x31, 0x04, -/* 00015470 */ 0xFE, 0x31, 0x04, 0xAB, 0xFF, 0x3D, 0x3F, 0x01, 0x00, 0x10, 0x09, 0x00, 0x00, 0x00, 0x0A, 0x00, -/* 00015480 */ 0x15, 0x00, 0x0E, 0x00, 0x23, 0x00, 0x15, 0x00, 0x3B, 0x00, 0x1C, 0x00, 0x48, 0x00, 0x22, 0x00, -/* 00015490 */ 0x31, 0x00, 0x25, 0x00, 0x2C, 0x00, 0x1F, 0x00, 0x85, 0x00, 0x22, 0x00, 0x3F, 0x00, 0x0A, 0x00, -/* 000154A0 */ 0x32, 0x00, 0x1F, 0x00, 0x2B, 0x00, 0x24, 0x00, 0x48, 0x00, 0x23, 0x00, 0x95, 0x00, 0x35, 0x00, -/* 000154B0 */ 0x3C, 0x00, 0x0B, 0x00, 0x33, 0x00, 0x08, 0x00, 0x14, 0x00, 0x00, 0xBF, 0x5D, 0x08, 0xC1, 0x03, -/* 000154C0 */ 0x8D, 0x05, 0x00, 0xFE, 0xE9, 0x06, 0x09, 0xA2, 0x41, 0xD1, 0x00, 0x69, 0xFF, 0x6F, 0x3B, 0x01, -/* 000154D0 */ 0x00, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x06, 0x06, 0xFF, 0x6F, 0x3B, 0x01, 0x00, 0xFE, 0x8F, -/* 000154E0 */ 0x01, 0xFE, 0x8F, 0x01, 0x40, 0x04, 0xF8, 0xFE, 0x92, 0x04, 0xFE, 0x93, 0x04, 0xFE, 0x94, 0x04, -/* 000154F0 */ 0x0C, 0x03, 0x0B, 0x08, 0x16, 0x16, 0x03, 0x02, 0x03, 0x01, 0x01, 0x01, 0x01, 0x08, 0x09, 0x0A, -/* 00015500 */ 0x08, 0x58, 0x94, 0x02, 0x03, 0x94, 0x03, 0x04, 0x94, 0x04, 0x05, 0x94, 0x05, 0x06, 0x8D, 0x03, -/* 00015510 */ 0x03, 0x0C, 0x00, 0x00, 0x6B, 0x0B, 0x0C, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x8D, 0x03, -/* 00015520 */ 0x23, 0x0D, 0x01, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x91, 0x02, 0x0E, 0x02, 0x00, 0x5B, -/* 00015530 */ 0x01, 0x0E, 0x01, 0x00, 0xD3, 0x00, 0x0E, 0x5B, 0x02, 0x0E, 0x01, 0x00, 0xEE, 0x03, 0x0D, 0x0D, -/* 00015540 */ 0x01, 0x00, 0x5B, 0x01, 0x0D, 0x00, 0x00, 0x5B, 0x02, 0x07, 0x00, 0x00, 0xF2, 0x03, 0xFF, 0x0B, -/* 00015550 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xEE, 0x01, 0xFF, 0xBE, 0x3B, -/* 00015560 */ 0x01, 0x00, 0x02, 0x0C, 0x00, 0x00, 0x00, 0x4A, 0x00, 0x3F, 0x01, 0x00, 0x70, 0x55, 0x01, 0x00, -/* 00015570 */ 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0xEA, 0x06, 0x45, 0xA2, 0x41, 0xC3, 0x00, -/* 00015580 */ 0xFE, 0x97, 0x04, 0x6A, 0xFF, 0xF7, 0x3B, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x01, -/* 00015590 */ 0xFF, 0xF7, 0x3B, 0x01, 0x00, 0xE6, 0xE6, 0x01, 0x07, 0x03, 0x07, 0x09, 0x1C, 0x1A, 0x04, 0x01, -/* 000155A0 */ 0x05, 0x01, 0x01, 0x01, 0x01, 0x06, 0x08, 0x75, 0x59, 0x07, 0xB2, 0x05, 0x07, 0x15, 0x05, 0x00, -/* 000155B0 */ 0x03, 0x02, 0xA6, 0x07, 0x47, 0x03, 0x07, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA6, 0x07, 0x47, 0x04, -/* 000155C0 */ 0x07, 0x8D, 0x02, 0x02, 0x08, 0x00, 0x00, 0x6B, 0x07, 0x08, 0x00, 0x07, 0x08, 0x00, 0x5A, 0x00, -/* 000155D0 */ 0x08, 0x5B, 0x01, 0x05, 0x00, 0x00, 0x8D, 0x01, 0x02, 0x09, 0x01, 0x00, 0x5B, 0x02, 0x09, 0x00, -/* 000155E0 */ 0x00, 0x8D, 0x01, 0x03, 0x09, 0x02, 0x00, 0x5B, 0x03, 0x09, 0x00, 0x00, 0x8D, 0x01, 0x04, 0x09, -/* 000155F0 */ 0x03, 0x00, 0x5B, 0x04, 0x09, 0x00, 0x00, 0x8D, 0x01, 0x05, 0x09, 0x04, 0x00, 0x5B, 0x05, 0x09, -/* 00015600 */ 0x00, 0x00, 0x5B, 0x06, 0x03, 0x00, 0x00, 0x5B, 0x07, 0x04, 0x00, 0x00, 0xF2, 0x08, 0x00, 0x07, -/* 00015610 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x53, 0xFF, 0x23, -/* 00015620 */ 0x3C, 0x01, 0x00, 0x04, 0x05, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0A, 0x00, 0x27, 0x00, -/* 00015630 */ 0x5A, 0x00, 0x7D, 0x00, 0x00, 0xBF, 0x5D, 0x08, 0xC1, 0x03, 0x8D, 0x05, 0x00, 0xFE, 0xE3, 0x06, -/* 00015640 */ 0x09, 0xA2, 0x41, 0xD1, 0x00, 0x67, 0xFF, 0x2F, 0x39, 0x01, 0x00, 0x01, 0xFF, 0x00, 0x10, 0x01, -/* 00015650 */ 0x00, 0x06, 0x06, 0xFF, 0x2F, 0x39, 0x01, 0x00, 0xFE, 0x8F, 0x01, 0xFE, 0x8F, 0x01, 0x40, 0x04, -/* 00015660 */ 0xF8, 0xFE, 0x92, 0x04, 0xFE, 0x93, 0x04, 0xFE, 0x94, 0x04, 0x0C, 0x03, 0x0B, 0x08, 0x16, 0x16, -/* 00015670 */ 0x03, 0x02, 0x03, 0x01, 0x01, 0x01, 0x01, 0x08, 0x09, 0x0A, 0x08, 0x58, 0x94, 0x02, 0x03, 0x94, -/* 00015680 */ 0x03, 0x04, 0x94, 0x04, 0x05, 0x94, 0x05, 0x06, 0x8D, 0x03, 0x03, 0x0C, 0x00, 0x00, 0x6B, 0x0B, -/* 00015690 */ 0x0C, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x8D, 0x03, 0x23, 0x0D, 0x01, 0x00, 0x07, 0x03, -/* 000156A0 */ 0x00, 0x5A, 0x00, 0x02, 0x91, 0x02, 0x0E, 0x02, 0x00, 0x5B, 0x01, 0x0E, 0x01, 0x00, 0xD3, 0x00, -/* 000156B0 */ 0x0E, 0x5B, 0x02, 0x0E, 0x01, 0x00, 0xEE, 0x03, 0x0D, 0x0D, 0x01, 0x00, 0x5B, 0x01, 0x0D, 0x00, -/* 000156C0 */ 0x00, 0x5B, 0x02, 0x07, 0x00, 0x00, 0xF2, 0x03, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 000156D0 */ 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xEE, 0x01, 0xFF, 0x7E, 0x39, 0x01, 0x00, 0x02, 0x0C, 0x00, 0x00, -/* 000156E0 */ 0x00, 0x4A, 0x00, 0x3F, 0x01, 0x00, 0xEA, 0x56, 0x01, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, -/* 000156F0 */ 0x01, 0x00, 0xFE, 0xE4, 0x06, 0x45, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x96, 0x04, 0x68, 0xFF, 0xB7, -/* 00015700 */ 0x39, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x01, 0xFF, 0xB7, 0x39, 0x01, 0x00, 0xE6, -/* 00015710 */ 0xE6, 0x01, 0x07, 0x03, 0x07, 0x09, 0x1C, 0x1A, 0x04, 0x01, 0x05, 0x01, 0x01, 0x01, 0x01, 0x06, -/* 00015720 */ 0x08, 0x75, 0x59, 0x07, 0xB2, 0x05, 0x07, 0x15, 0x05, 0x00, 0x03, 0x02, 0xA6, 0x07, 0x47, 0x03, -/* 00015730 */ 0x07, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA6, 0x07, 0x47, 0x04, 0x07, 0x8D, 0x02, 0x02, 0x08, 0x00, -/* 00015740 */ 0x00, 0x6B, 0x07, 0x08, 0x00, 0x07, 0x08, 0x00, 0x5A, 0x00, 0x08, 0x5B, 0x01, 0x05, 0x00, 0x00, -/* 00015750 */ 0x8D, 0x01, 0x02, 0x09, 0x01, 0x00, 0x5B, 0x02, 0x09, 0x00, 0x00, 0x8D, 0x01, 0x03, 0x09, 0x02, -/* 00015760 */ 0x00, 0x5B, 0x03, 0x09, 0x00, 0x00, 0x8D, 0x01, 0x04, 0x09, 0x03, 0x00, 0x5B, 0x04, 0x09, 0x00, -/* 00015770 */ 0x00, 0x8D, 0x01, 0x05, 0x09, 0x04, 0x00, 0x5B, 0x05, 0x09, 0x00, 0x00, 0x5B, 0x06, 0x03, 0x00, -/* 00015780 */ 0x00, 0x5B, 0x07, 0x04, 0x00, 0x00, 0xF2, 0x08, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 00015790 */ 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x53, 0xFF, 0xE3, 0x39, 0x01, 0x00, 0x04, 0x05, 0x00, -/* 000157A0 */ 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0A, 0x00, 0x27, 0x00, 0x5A, 0x00, 0x7D, 0x00, 0x00, 0xBF, -/* 000157B0 */ 0x5D, 0x08, 0xC1, 0x03, 0x8D, 0x05, 0x00, 0xFE, 0xDD, 0x06, 0x09, 0xA2, 0x41, 0xD1, 0x00, 0x65, -/* 000157C0 */ 0xFF, 0x01, 0x37, 0x01, 0x00, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x06, 0x06, 0xFF, 0x01, 0x37, -/* 000157D0 */ 0x01, 0x00, 0xFE, 0x8B, 0x01, 0xFE, 0x8B, 0x01, 0x40, 0x04, 0xF8, 0xFE, 0x92, 0x04, 0xFE, 0x93, -/* 000157E0 */ 0x04, 0xFE, 0x94, 0x04, 0x0C, 0x03, 0x0B, 0x08, 0x16, 0x16, 0x03, 0x02, 0x03, 0x01, 0x01, 0x01, -/* 000157F0 */ 0x01, 0x08, 0x09, 0x0A, 0x08, 0x58, 0x94, 0x02, 0x03, 0x94, 0x03, 0x04, 0x94, 0x04, 0x05, 0x94, -/* 00015800 */ 0x05, 0x06, 0x8D, 0x03, 0x03, 0x0C, 0x00, 0x00, 0x6B, 0x0B, 0x0C, 0x00, 0x07, 0x03, 0x00, 0x5A, -/* 00015810 */ 0x00, 0x0C, 0x8D, 0x03, 0x23, 0x0D, 0x01, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x91, 0x02, -/* 00015820 */ 0x0E, 0x02, 0x00, 0x5B, 0x01, 0x0E, 0x01, 0x00, 0xD3, 0x00, 0x0E, 0x5B, 0x02, 0x0E, 0x01, 0x00, -/* 00015830 */ 0xEE, 0x03, 0x0D, 0x0D, 0x01, 0x00, 0x5B, 0x01, 0x0D, 0x00, 0x00, 0x5B, 0x02, 0x07, 0x00, 0x00, -/* 00015840 */ 0xF2, 0x03, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xEE, -/* 00015850 */ 0x01, 0xFF, 0x50, 0x37, 0x01, 0x00, 0x02, 0x0C, 0x00, 0x00, 0x00, 0x4A, 0x00, 0x3B, 0x01, 0x00, -/* 00015860 */ 0x64, 0x58, 0x01, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0xDE, 0x06, 0x45, -/* 00015870 */ 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x95, 0x04, 0x66, 0xFF, 0x89, 0x37, 0x01, 0x00, 0xFF, 0x00, 0x10, -/* 00015880 */ 0x01, 0x00, 0x03, 0x01, 0xFF, 0x89, 0x37, 0x01, 0x00, 0xE2, 0xE2, 0x01, 0x07, 0x03, 0x07, 0x09, -/* 00015890 */ 0x1C, 0x1A, 0x04, 0x01, 0x05, 0x01, 0x01, 0x01, 0x01, 0x06, 0x08, 0x75, 0x59, 0x07, 0xB2, 0x05, -/* 000158A0 */ 0x07, 0x15, 0x05, 0x00, 0x03, 0x02, 0xA6, 0x07, 0x47, 0x03, 0x07, 0x15, 0x05, 0x00, 0x04, 0x02, -/* 000158B0 */ 0xA6, 0x07, 0x47, 0x04, 0x07, 0x8D, 0x02, 0x02, 0x08, 0x00, 0x00, 0x6B, 0x07, 0x08, 0x00, 0x07, -/* 000158C0 */ 0x08, 0x00, 0x5A, 0x00, 0x08, 0x5B, 0x01, 0x05, 0x00, 0x00, 0x8D, 0x01, 0x02, 0x09, 0x01, 0x00, -/* 000158D0 */ 0x5B, 0x02, 0x09, 0x00, 0x00, 0x8D, 0x01, 0x03, 0x09, 0x02, 0x00, 0x5B, 0x03, 0x09, 0x00, 0x00, -/* 000158E0 */ 0x8D, 0x01, 0x04, 0x09, 0x03, 0x00, 0x5B, 0x04, 0x09, 0x00, 0x00, 0x8D, 0x01, 0x05, 0x09, 0x04, -/* 000158F0 */ 0x00, 0x5B, 0x05, 0x09, 0x00, 0x00, 0x5B, 0x06, 0x03, 0x00, 0x00, 0x5B, 0x07, 0x04, 0x00, 0x00, -/* 00015900 */ 0xF2, 0x08, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, -/* 00015910 */ 0x00, 0x53, 0xFF, 0xB1, 0x37, 0x01, 0x00, 0x04, 0x05, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, -/* 00015920 */ 0x0A, 0x00, 0x27, 0x00, 0x5A, 0x00, 0x7D, 0x00, 0x00, 0xBF, 0x5C, 0x0E, 0xC1, 0x07, 0x88, 0x01, -/* 00015930 */ 0x00, 0xFE, 0xA6, 0x06, 0x08, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x37, 0x04, 0x64, 0xFF, 0x80, 0x28, -/* 00015940 */ 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x07, 0x07, 0xFF, 0x80, 0x28, 0x01, 0x00, 0xFE, 0x16, -/* 00015950 */ 0x06, 0xFE, 0x16, 0x06, 0x01, 0x0E, 0x08, 0x12, 0x0A, 0x89, 0x83, 0x03, 0x02, 0x01, 0x0D, 0x07, -/* 00015960 */ 0x08, 0x08, 0x08, 0x08, 0x01, 0x11, 0x06, 0xFE, 0xF6, 0x03, 0x06, 0xFE, 0x41, 0x04, 0x05, 0xFE, -/* 00015970 */ 0x91, 0x04, 0x08, 0x0C, 0x0B, 0xFE, 0x4D, 0x02, 0x59, 0x12, 0xB2, 0x0E, 0x12, 0x4F, 0x0F, 0x4F, -/* 00015980 */ 0x10, 0x2C, 0x12, 0x0E, 0x15, 0x0F, 0x00, 0x12, 0x02, 0x8D, 0x03, 0x0C, 0x12, 0x00, 0x00, 0xE1, -/* 00015990 */ 0x12, 0x0E, 0x12, 0x00, 0x0F, 0x24, 0x00, 0x12, 0x8D, 0x03, 0x03, 0x13, 0x01, 0x00, 0x6B, 0x12, -/* 000159A0 */ 0x13, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x13, 0x5B, 0x01, 0x08, 0x00, 0x00, 0x5B, 0x02, 0x03, -/* 000159B0 */ 0x00, 0x00, 0xF2, 0x03, 0xFF, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8D, 0x03, 0x37, 0x13, -/* 000159C0 */ 0x02, 0x00, 0x4B, 0x13, 0x6B, 0x12, 0x13, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x13, 0x8D, 0x03, -/* 000159D0 */ 0x0C, 0x14, 0x00, 0x00, 0x07, 0x02, 0x00, 0x5B, 0x01, 0x0E, 0x02, 0x00, 0xC2, 0x02, 0x14, 0x14, -/* 000159E0 */ 0x02, 0x00, 0x5B, 0x01, 0x14, 0x01, 0x00, 0xF2, 0x02, 0x12, 0x12, 0x01, 0x00, 0x00, 0x00, 0x01, -/* 000159F0 */ 0x00, 0x47, 0x0F, 0x12, 0x8D, 0x03, 0x37, 0x13, 0x02, 0x00, 0x4B, 0x13, 0x6B, 0x12, 0x13, 0x02, -/* 00015A00 */ 0x07, 0x02, 0x00, 0x5A, 0x00, 0x13, 0x5B, 0x01, 0x0F, 0x03, 0x00, 0xF2, 0x02, 0x12, 0x12, 0x02, -/* 00015A10 */ 0x00, 0x00, 0x00, 0x03, 0x00, 0x0F, 0x25, 0x00, 0x12, 0x8D, 0x03, 0x37, 0x13, 0x02, 0x00, 0x4B, -/* 00015A20 */ 0x13, 0x6B, 0x12, 0x13, 0x03, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x13, 0x5B, 0x01, 0x0F, 0x04, 0x00, -/* 00015A30 */ 0xF2, 0x02, 0x12, 0x12, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x0F, 0x06, 0x00, 0x12, 0x47, 0x00, -/* 00015A40 */ 0x04, 0x09, 0x7F, 0x01, 0xA6, 0x12, 0x47, 0x10, 0x12, 0x8D, 0x03, 0x03, 0x12, 0x01, 0x00, 0x60, -/* 00015A50 */ 0x12, 0x12, 0x04, 0x0E, 0xB1, 0x00, 0x12, 0xA6, 0x12, 0x14, 0x03, 0x00, 0x0C, 0x12, 0x09, 0xA7, -/* 00015A60 */ 0x00, 0xA6, 0x12, 0x14, 0x03, 0x00, 0x0D, 0x12, 0x09, 0x9D, 0x00, 0x8D, 0x01, 0x0A, 0x12, 0x03, -/* 00015A70 */ 0x00, 0x4B, 0x12, 0x96, 0x12, 0x12, 0x0B, 0x00, 0x00, 0x0E, 0x14, 0x00, 0x12, 0x8D, 0x01, 0x0A, -/* 00015A80 */ 0x12, 0x03, 0x00, 0x4B, 0x12, 0x96, 0x12, 0x12, 0x0B, 0x01, 0x00, 0x47, 0x10, 0x12, 0x09, 0x77, -/* 00015A90 */ 0x00, 0x8D, 0x03, 0x37, 0x13, 0x02, 0x00, 0x4B, 0x13, 0x6B, 0x12, 0x13, 0x05, 0x07, 0x01, 0x00, -/* 00015AA0 */ 0x5A, 0x00, 0x13, 0xF2, 0x01, 0x12, 0x12, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x47, 0x10, 0x12, -/* 00015AB0 */ 0x8D, 0x01, 0x06, 0x12, 0x04, 0x00, 0x4B, 0x12, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x05, 0x5B, 0x01, -/* 00015AC0 */ 0x10, 0x06, 0x00, 0xA6, 0x13, 0x5B, 0x02, 0x13, 0x06, 0x00, 0x8D, 0x01, 0x07, 0x13, 0x05, 0x00, -/* 00015AD0 */ 0x4B, 0x13, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x05, 0xA6, 0x14, 0x5B, 0x01, 0x14, 0x07, 0x00, 0x5B, -/* 00015AE0 */ 0x02, 0x09, 0x07, 0x00, 0x5B, 0x03, 0x0A, 0x07, 0x00, 0xEE, 0x04, 0x13, 0x13, 0x07, 0x00, 0x5B, -/* 00015AF0 */ 0x03, 0x13, 0x06, 0x00, 0xEE, 0x04, 0xFF, 0x12, 0x06, 0x00, 0x8D, 0x01, 0x0A, 0x12, 0x03, 0x00, -/* 00015B00 */ 0x4B, 0x12, 0x9B, 0x10, 0x12, 0x0B, 0x00, 0x00, 0x0F, 0x65, 0x00, 0x10, 0x8D, 0x03, 0x37, 0x13, -/* 00015B10 */ 0x02, 0x00, 0x4B, 0x13, 0x6B, 0x12, 0x13, 0x05, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x13, 0xF2, 0x01, -/* 00015B20 */ 0x12, 0x12, 0x05, 0x00, 0x00, 0x00, 0x08, 0x00, 0x47, 0x10, 0x12, 0x8D, 0x01, 0x06, 0x12, 0x04, -/* 00015B30 */ 0x00, 0x4B, 0x12, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x05, 0x5B, 0x01, 0x10, 0x09, 0x00, 0x5B, 0x02, -/* 00015B40 */ 0x0C, 0x09, 0x00, 0x8D, 0x01, 0x07, 0x13, 0x05, 0x00, 0x4B, 0x13, 0x07, 0x04, 0x00, 0x5A, 0x00, -/* 00015B50 */ 0x05, 0x5B, 0x01, 0x0D, 0x0A, 0x00, 0x5B, 0x02, 0x09, 0x0A, 0x00, 0x5B, 0x03, 0x0A, 0x0A, 0x00, -/* 00015B60 */ 0xEE, 0x04, 0x13, 0x13, 0x0A, 0x00, 0x5B, 0x03, 0x13, 0x09, 0x00, 0xEE, 0x04, 0xFF, 0x12, 0x09, -/* 00015B70 */ 0x00, 0x8D, 0x03, 0x03, 0x13, 0x01, 0x00, 0x6B, 0x12, 0x13, 0x06, 0x07, 0x05, 0x00, 0x5A, 0x00, -/* 00015B80 */ 0x13, 0x5B, 0x01, 0x10, 0x0B, 0x00, 0x8D, 0x03, 0x24, 0x15, 0x06, 0x00, 0x6B, 0x14, 0x15, 0x07, -/* 00015B90 */ 0x07, 0x02, 0x00, 0x5A, 0x00, 0x15, 0x5B, 0x01, 0x0E, 0x0C, 0x00, 0xF2, 0x02, 0x14, 0x14, 0x07, -/* 00015BA0 */ 0x00, 0x00, 0x00, 0x0C, 0x00, 0x5B, 0x02, 0x14, 0x0B, 0x00, 0x5B, 0x03, 0x06, 0x0B, 0x00, 0x5B, -/* 00015BB0 */ 0x04, 0x07, 0x0B, 0x00, 0xF2, 0x05, 0x00, 0x12, 0x06, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x09, 0x02, -/* 00015BC0 */ 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x8A, 0x02, 0x8D, 0xB4, 0xB1, 0xFE, 0x61, 0x03, 0x61, 0xFE, -/* 00015BD0 */ 0xE6, 0x01, 0xFE, 0x38, 0x03, 0xFF, 0xF5, 0x28, 0x01, 0x00, 0x11, 0x09, 0x00, 0x00, 0x00, 0x17, -/* 00015BE0 */ 0x00, 0x4B, 0x00, 0x24, 0x00, 0x48, 0x00, 0x38, 0x00, 0x35, 0x00, 0x4A, 0x00, 0x3C, 0x00, 0x06, -/* 00015BF0 */ 0x00, 0x32, 0x00, 0x05, 0x00, 0x29, 0x00, 0x22, 0x00, 0xC6, 0x00, 0x12, 0x00, 0x7C, 0x00, 0x14, -/* 00015C00 */ 0x00, 0x96, 0x00, 0x1F, 0x00, 0x2E, 0x00, 0x4A, 0x00, 0x76, 0x00, 0x0E, 0x00, 0x70, 0x00, 0x04, -/* 00015C10 */ 0x00, 0x24, 0x00, 0x1F, 0x00, 0x2A, 0x00, 0x46, 0x00, 0x79, 0x00, 0x52, 0x00, 0x8E, 0x00, 0x00, -/* 00015C20 */ 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x96, 0x06, 0x26, 0xA2, 0x41, 0xC1, 0x00, -/* 00015C30 */ 0xFE, 0x3D, 0x04, 0x63, 0xFF, 0x15, 0x26, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, -/* 00015C40 */ 0xFF, 0x15, 0x26, 0x01, 0x00, 0xFD, 0xFD, 0x01, 0x05, 0x04, 0x07, 0x06, 0x22, 0x22, 0x03, 0x04, -/* 00015C50 */ 0x02, 0x04, 0x04, 0x04, 0x04, 0x06, 0x0B, 0x0C, 0x99, 0x8D, 0x03, 0x37, 0x08, 0x00, 0x00, 0x4B, -/* 00015C60 */ 0x08, 0x6B, 0x07, 0x08, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x08, 0x5B, 0x01, 0x05, 0x00, 0x00, -/* 00015C70 */ 0xF2, 0x02, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x25, 0x00, 0x07, 0x8D, 0x03, -/* 00015C80 */ 0x37, 0x08, 0x00, 0x00, 0x4B, 0x08, 0x6B, 0x07, 0x08, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x08, -/* 00015C90 */ 0x5B, 0x01, 0x05, 0x01, 0x00, 0xF2, 0x02, 0x07, 0x07, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0F, -/* 00015CA0 */ 0x1A, 0x00, 0x07, 0x8D, 0x03, 0x03, 0x08, 0x01, 0x00, 0x6B, 0x07, 0x08, 0x02, 0x07, 0x01, 0x00, -/* 00015CB0 */ 0x5A, 0x00, 0x08, 0xF2, 0x01, 0xFF, 0x07, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x8D, 0x03, 0x03, -/* 00015CC0 */ 0x08, 0x01, 0x00, 0x6B, 0x07, 0x08, 0x03, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x08, 0x5B, 0x01, 0x04, -/* 00015CD0 */ 0x03, 0x00, 0x5B, 0x02, 0x05, 0x03, 0x00, 0x5B, 0x03, 0x02, 0x03, 0x00, 0x5B, 0x04, 0x03, 0x03, -/* 00015CE0 */ 0x00, 0xF2, 0x05, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, -/* 00015CF0 */ 0x24, 0x00, 0xB4, 0xB1, 0xFE, 0x86, 0x02, 0xFE, 0xE6, 0x01, 0xFF, 0x35, 0x26, 0x01, 0x00, 0x04, -/* 00015D00 */ 0x00, 0x00, 0x00, 0x00, 0x4A, 0x00, 0x34, 0x00, 0x1A, 0x00, 0x38, 0x00, 0x33, 0x00, 0x70, 0x00, -/* 00015D10 */ 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x8E, 0x06, 0x1F, 0xA2, 0x41, 0xC1, -/* 00015D20 */ 0x00, 0xFE, 0x3C, 0x04, 0x62, 0xFF, 0xEE, 0x24, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, -/* 00015D30 */ 0x03, 0xFF, 0xEE, 0x24, 0x01, 0x00, 0xFE, 0xFE, 0x00, 0xFE, 0xFE, 0x00, 0x01, 0x05, 0x03, 0x06, -/* 00015D40 */ 0x06, 0x22, 0x22, 0x03, 0x04, 0x02, 0x04, 0x04, 0x04, 0x04, 0x05, 0x0C, 0x99, 0x8D, 0x03, 0x37, -/* 00015D50 */ 0x07, 0x00, 0x00, 0x4B, 0x07, 0x6B, 0x06, 0x07, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x07, 0x5B, -/* 00015D60 */ 0x01, 0x04, 0x00, 0x00, 0xF2, 0x02, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x25, -/* 00015D70 */ 0x00, 0x06, 0x8D, 0x03, 0x37, 0x07, 0x00, 0x00, 0x4B, 0x07, 0x6B, 0x06, 0x07, 0x01, 0x07, 0x02, -/* 00015D80 */ 0x00, 0x5A, 0x00, 0x07, 0x5B, 0x01, 0x04, 0x01, 0x00, 0xF2, 0x02, 0x06, 0x06, 0x01, 0x00, 0x00, -/* 00015D90 */ 0x00, 0x01, 0x00, 0x0F, 0x1A, 0x00, 0x06, 0x8D, 0x03, 0x03, 0x07, 0x01, 0x00, 0x6B, 0x06, 0x07, -/* 00015DA0 */ 0x02, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x07, 0xF2, 0x01, 0xFF, 0x06, 0x02, 0x00, 0x00, 0x00, 0x02, -/* 00015DB0 */ 0x00, 0x8D, 0x03, 0x03, 0x07, 0x01, 0x00, 0x6B, 0x06, 0x07, 0x03, 0x07, 0x05, 0x00, 0x5A, 0x00, -/* 00015DC0 */ 0x07, 0x5B, 0x01, 0x03, 0x03, 0x00, 0x5B, 0x02, 0x04, 0x03, 0x00, 0x5B, 0x03, 0x02, 0x03, 0x00, -/* 00015DD0 */ 0x5B, 0x04, 0x02, 0x03, 0x00, 0xF2, 0x05, 0x00, 0x06, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x09, -/* 00015DE0 */ 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xB4, 0xB1, 0xFE, 0x86, 0x02, 0xFE, 0xE6, 0x01, 0xFF, 0x0E, -/* 00015DF0 */ 0x25, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x4A, 0x00, 0x34, 0x00, 0x1A, 0x00, 0x38, 0x00, -/* 00015E00 */ 0x33, 0x00, 0x71, 0x00, 0x00, 0x3F, 0x5D, 0x18, 0xC1, 0x43, 0xAD, 0x05, 0x00, 0xFE, 0x5F, 0x06, -/* 00015E10 */ 0x22, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x3B, 0x04, 0x5D, 0xFF, 0xCC, 0x1D, 0x01, 0x00, 0x04, 0xFF, -/* 00015E20 */ 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFF, 0xCC, 0x1D, 0x01, 0x00, 0xFE, 0x00, 0x07, 0xFE, 0x00, -/* 00015E30 */ 0x07, 0x02, 0xFE, 0xCA, 0x01, 0xFE, 0x90, 0x04, 0x0B, 0x0F, 0x15, 0x04, 0x68, 0x66, 0x03, 0x06, -/* 00015E40 */ 0x04, 0x04, 0x03, 0x03, 0x03, 0x03, 0x01, 0x12, 0x13, 0x14, 0x15, 0x07, 0x0B, 0x06, 0xFE, 0x56, -/* 00015E50 */ 0x04, 0x05, 0xFE, 0x53, 0x04, 0x06, 0xFE, 0x46, 0x04, 0x06, 0xFE, 0x48, 0x04, 0x06, 0xFE, 0x49, -/* 00015E60 */ 0x04, 0x06, 0xFE, 0x4A, 0x04, 0x05, 0xFE, 0x58, 0x04, 0x06, 0xFE, 0x4B, 0x04, 0x06, 0xFE, 0x4C, -/* 00015E70 */ 0x04, 0x06, 0xFE, 0x4D, 0x04, 0x06, 0xFE, 0x54, 0x04, 0xFE, 0xB9, 0x01, 0x94, 0x02, 0x0F, 0x4F, -/* 00015E80 */ 0x16, 0x94, 0x03, 0x16, 0x91, 0x02, 0x16, 0x00, 0x00, 0xA6, 0x17, 0x14, 0x03, 0x00, 0x16, 0x17, -/* 00015E90 */ 0x09, 0x06, 0x00, 0x47, 0x16, 0x02, 0x09, 0x27, 0x00, 0x8D, 0x03, 0x24, 0x18, 0x01, 0x00, 0x6B, -/* 00015EA0 */ 0x17, 0x18, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x18, 0x91, 0x02, 0x19, 0x00, 0x00, 0x5B, 0x01, -/* 00015EB0 */ 0x19, 0x00, 0x00, 0xF2, 0x02, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x16, 0x17, -/* 00015EC0 */ 0x94, 0x02, 0x16, 0x8D, 0x03, 0x37, 0x17, 0x02, 0x00, 0x4B, 0x17, 0x6B, 0x16, 0x17, 0x01, 0x07, -/* 00015ED0 */ 0x02, 0x00, 0x5A, 0x00, 0x17, 0x91, 0x02, 0x18, 0x00, 0x00, 0x5B, 0x01, 0x18, 0x01, 0x00, 0xF2, -/* 00015EE0 */ 0x02, 0x16, 0x16, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x94, 0x02, 0x16, 0x94, 0x03, 0x03, 0x14, -/* 00015EF0 */ 0x08, 0x00, 0x10, 0x04, 0x14, 0x03, 0x00, 0x10, 0x05, 0x09, 0x3E, 0x00, 0x8D, 0x03, 0x37, 0x17, -/* 00015F00 */ 0x02, 0x00, 0x4B, 0x17, 0x6B, 0x16, 0x17, 0x02, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x17, 0xCD, 0x18, -/* 00015F10 */ 0x04, 0x00, 0x00, 0x9F, 0x00, 0x06, 0x18, 0x9F, 0x01, 0x07, 0x18, 0x9F, 0x02, 0x08, 0x18, 0x9F, -/* 00015F20 */ 0x03, 0x09, 0x18, 0x5B, 0x01, 0x18, 0x02, 0x00, 0xD3, 0x00, 0x18, 0x5B, 0x02, 0x18, 0x02, 0x00, -/* 00015F30 */ 0xF2, 0x03, 0xFF, 0x16, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x14, 0x08, 0x00, 0x10, 0x0A, 0x14, -/* 00015F40 */ 0x03, 0x00, 0x10, 0x05, 0x09, 0x3A, 0x00, 0x8D, 0x03, 0x37, 0x17, 0x02, 0x00, 0x4B, 0x17, 0x6B, -/* 00015F50 */ 0x16, 0x17, 0x02, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x17, 0xCD, 0x18, 0x03, 0x01, 0x00, 0x9F, 0x00, -/* 00015F60 */ 0x0B, 0x18, 0x9F, 0x01, 0x0C, 0x18, 0x9F, 0x02, 0x0D, 0x18, 0x5B, 0x01, 0x18, 0x03, 0x00, 0xD3, -/* 00015F70 */ 0x01, 0x18, 0x5B, 0x02, 0x18, 0x03, 0x00, 0xF2, 0x03, 0xFF, 0x16, 0x02, 0x00, 0x00, 0x00, 0x03, -/* 00015F80 */ 0x00, 0x91, 0x03, 0x16, 0x03, 0x00, 0x14, 0x03, 0x00, 0x16, 0x03, 0x09, 0x47, 0x00, 0x14, 0x08, -/* 00015F90 */ 0x00, 0x11, 0x04, 0x14, 0x03, 0x00, 0x11, 0x0E, 0x09, 0x3A, 0x00, 0x8D, 0x03, 0x37, 0x17, 0x02, -/* 00015FA0 */ 0x00, 0x4B, 0x17, 0x6B, 0x16, 0x17, 0x02, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x17, 0xCD, 0x18, 0x03, -/* 00015FB0 */ 0x02, 0x00, 0x9F, 0x00, 0x07, 0x18, 0x9F, 0x01, 0x08, 0x18, 0x9F, 0x02, 0x09, 0x18, 0x5B, 0x01, -/* 00015FC0 */ 0x18, 0x04, 0x00, 0xD3, 0x02, 0x18, 0x5B, 0x02, 0x18, 0x04, 0x00, 0xF2, 0x03, 0xFF, 0x16, 0x02, -/* 00015FD0 */ 0x00, 0x00, 0x00, 0x04, 0x00, 0x91, 0x03, 0x16, 0x03, 0x00, 0x14, 0x03, 0x00, 0x16, 0x03, 0x09, -/* 00015FE0 */ 0x47, 0x00, 0x14, 0x08, 0x00, 0x11, 0x0A, 0x14, 0x03, 0x00, 0x11, 0x0E, 0x09, 0x3A, 0x00, 0x8D, -/* 00015FF0 */ 0x03, 0x37, 0x17, 0x02, 0x00, 0x4B, 0x17, 0x6B, 0x16, 0x17, 0x02, 0x07, 0x03, 0x00, 0x5A, 0x00, -/* 00016000 */ 0x17, 0xCD, 0x18, 0x03, 0x03, 0x00, 0x9F, 0x00, 0x0B, 0x18, 0x9F, 0x01, 0x0C, 0x18, 0x9F, 0x02, -/* 00016010 */ 0x0D, 0x18, 0x5B, 0x01, 0x18, 0x05, 0x00, 0xD3, 0x03, 0x18, 0x5B, 0x02, 0x18, 0x05, 0x00, 0xF2, -/* 00016020 */ 0x03, 0xFF, 0x16, 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x91, 0x02, 0x00, 0x00, 0x00, 0x09, 0x02, -/* 00016030 */ 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x36, 0x03, 0x61, 0x86, 0xFF, 0x01, 0x1E, 0x01, 0x00, 0x0D, -/* 00016040 */ 0x08, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x51, 0x00, 0x29, 0x00, 0x29, 0x00, 0x03, 0x00, 0x25, 0x00, -/* 00016050 */ 0x0D, 0x00, 0x41, 0x00, 0x3E, 0x00, 0x14, 0x01, 0x0D, 0x00, 0x41, 0x00, 0x3A, 0x00, 0x0D, 0x01, -/* 00016060 */ 0x1A, 0x00, 0x5C, 0x00, 0x3A, 0x00, 0x5A, 0x01, 0x1A, 0x00, 0x5C, 0x00, 0x3A, 0x00, 0x5E, 0x01, -/* 00016070 */ 0x0A, 0x00, 0x18, 0x00, 0x00, 0xAD, 0x62, 0x01, 0x00, 0x41, 0x62, 0x01, 0x00, 0x63, 0x61, 0x01, -/* 00016080 */ 0x00, 0x85, 0x60, 0x01, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x13, 0x88, 0x21, 0x00, 0xFE, 0x81, 0x06, -/* 00016090 */ 0x38, 0xA2, 0x41, 0xD1, 0x00, 0x61, 0xFF, 0x7D, 0x23, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, -/* 000160A0 */ 0x02, 0x02, 0xFF, 0x7D, 0x23, 0x01, 0x00, 0xFE, 0x19, 0x01, 0xFE, 0x19, 0x01, 0x41, 0x05, 0x09, -/* 000160B0 */ 0x0B, 0x05, 0x12, 0x12, 0x04, 0x01, 0x02, 0x05, 0x05, 0x05, 0x05, 0x01, 0x0A, 0x06, 0xFE, 0x40, -/* 000160C0 */ 0x03, 0x06, 0xFE, 0x13, 0x04, 0x06, 0xFE, 0x42, 0x03, 0x0B, 0x06, 0xFE, 0x43, 0x03, 0x06, 0xFE, -/* 000160D0 */ 0x44, 0x03, 0x07, 0x52, 0x8D, 0x04, 0x37, 0x0C, 0x00, 0x00, 0x4B, 0x0C, 0x6B, 0x0B, 0x0C, 0x00, -/* 000160E0 */ 0x07, 0x04, 0x00, 0x5A, 0x00, 0x0C, 0x8D, 0x01, 0x02, 0x0D, 0x01, 0x00, 0x5B, 0x01, 0x0D, 0x00, -/* 000160F0 */ 0x00, 0x5B, 0x02, 0x09, 0x00, 0x00, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, -/* 00016100 */ 0x00, 0x00, 0x00, 0x79, 0x03, 0x0D, 0x01, 0x79, 0x05, 0x0D, 0x02, 0x79, 0x05, 0x0D, 0x03, 0x79, -/* 00016110 */ 0x05, 0x0D, 0x04, 0x5B, 0x03, 0x0D, 0x00, 0x00, 0xF2, 0x04, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, -/* 00016120 */ 0x00, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x01, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, -/* 00016130 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, -/* 00016140 */ 0x00, 0x81, 0x01, 0x00, 0x00, 0xFE, 0x88, 0x01, 0xFE, 0x83, 0x01, 0xFE, 0x82, 0x01, 0xFE, 0x80, -/* 00016150 */ 0x01, 0xFE, 0x81, 0x01, 0xFF, 0xA3, 0x23, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, -/* 00016160 */ 0xF2, 0x00, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x13, 0x88, 0x21, 0x00, 0xFE, 0x76, 0x06, 0x34, 0xA2, -/* 00016170 */ 0x41, 0xD1, 0x00, 0x60, 0xFF, 0xC3, 0x21, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, -/* 00016180 */ 0xFF, 0xC3, 0x21, 0x01, 0x00, 0xFE, 0x19, 0x01, 0xFE, 0x19, 0x01, 0x41, 0x05, 0x09, 0x0B, 0x05, -/* 00016190 */ 0x12, 0x12, 0x04, 0x01, 0x02, 0x05, 0x05, 0x05, 0x05, 0x01, 0x0A, 0x06, 0xFE, 0x40, 0x03, 0x06, -/* 000161A0 */ 0xFE, 0x13, 0x04, 0x06, 0xFE, 0x42, 0x03, 0x0B, 0x06, 0xFE, 0x43, 0x03, 0x06, 0xFE, 0x44, 0x03, -/* 000161B0 */ 0x07, 0x52, 0x8D, 0x04, 0x37, 0x0C, 0x00, 0x00, 0x4B, 0x0C, 0x6B, 0x0B, 0x0C, 0x00, 0x07, 0x04, -/* 000161C0 */ 0x00, 0x5A, 0x00, 0x0C, 0x8D, 0x01, 0x02, 0x0D, 0x01, 0x00, 0x5B, 0x01, 0x0D, 0x00, 0x00, 0x5B, -/* 000161D0 */ 0x02, 0x09, 0x00, 0x00, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, -/* 000161E0 */ 0x00, 0x79, 0x03, 0x0D, 0x01, 0x79, 0x05, 0x0D, 0x02, 0x79, 0x05, 0x0D, 0x03, 0x79, 0x05, 0x0D, -/* 000161F0 */ 0x04, 0x5B, 0x03, 0x0D, 0x00, 0x00, 0xF2, 0x04, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 00016200 */ 0xA6, 0x00, 0x24, 0x00, 0x01, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, -/* 00016210 */ 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, -/* 00016220 */ 0x01, 0x00, 0x00, 0xFE, 0x88, 0x01, 0xFE, 0x83, 0x01, 0xFE, 0x82, 0x01, 0xFE, 0x80, 0x01, 0xFE, -/* 00016230 */ 0x81, 0x01, 0xFF, 0xE9, 0x21, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0xF2, 0x00, -/* 00016240 */ 0x00, 0xBF, 0x4C, 0x02, 0x01, 0x00, 0x88, 0x01, 0x00, 0xFE, 0x6D, 0x06, 0x38, 0xA2, 0x41, 0xD1, -/* 00016250 */ 0x00, 0x5F, 0xFF, 0x5E, 0x20, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0x5E, -/* 00016260 */ 0x20, 0x01, 0x00, 0xC7, 0xC7, 0x41, 0x04, 0x03, 0x06, 0x0B, 0x0A, 0x04, 0x01, 0x01, 0x05, 0x0C, -/* 00016270 */ 0x25, 0x4F, 0x04, 0x8D, 0x01, 0x02, 0x06, 0x00, 0x00, 0x96, 0x06, 0x06, 0x03, 0x00, 0x00, 0x47, -/* 00016280 */ 0x04, 0x06, 0xA6, 0x06, 0x15, 0x03, 0x00, 0x04, 0x06, 0x09, 0x06, 0x00, 0x01, 0x34, 0x01, 0x01, -/* 00016290 */ 0x03, 0x02, 0xA6, 0x00, 0x24, 0x00, 0xFF, 0x84, 0x20, 0x01, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00, -/* 000162A0 */ 0x0F, 0x00, 0x31, 0x00, 0x0A, 0x00, 0x33, 0x00, 0x08, 0x00, 0x3C, 0x00, 0x00, 0xBF, 0x4C, 0x02, -/* 000162B0 */ 0x01, 0x00, 0x88, 0x01, 0x00, 0xFE, 0x64, 0x06, 0x3F, 0xA2, 0x41, 0xD1, 0x00, 0x5E, 0xFF, 0x10, -/* 000162C0 */ 0x1F, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0x10, 0x1F, 0x01, 0x00, 0xC7, -/* 000162D0 */ 0xC7, 0x41, 0x04, 0x03, 0x06, 0x0B, 0x0A, 0x04, 0x01, 0x01, 0x05, 0x0C, 0x25, 0x4F, 0x04, 0x8D, -/* 000162E0 */ 0x01, 0x02, 0x06, 0x00, 0x00, 0x96, 0x06, 0x06, 0x03, 0x00, 0x00, 0x47, 0x04, 0x06, 0xA6, 0x06, -/* 000162F0 */ 0x15, 0x03, 0x00, 0x04, 0x06, 0x09, 0x06, 0x00, 0x01, 0x34, 0x01, 0x01, 0x03, 0x02, 0xA6, 0x00, -/* 00016300 */ 0x24, 0x00, 0xFF, 0x36, 0x1F, 0x01, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x31, 0x00, -/* 00016310 */ 0x0A, 0x00, 0x33, 0x00, 0x08, 0x00, 0x3C, 0x00, 0x00, 0xBF, 0x5C, 0x18, 0xC1, 0x03, 0x88, 0x01, -/* 00016320 */ 0x00, 0xFE, 0x27, 0x06, 0x29, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x3A, 0x04, 0x5C, 0xFF, 0xD6, 0x12, -/* 00016330 */ 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFF, 0xD6, 0x12, 0x01, 0x00, 0xFE, 0x84, -/* 00016340 */ 0x08, 0xFE, 0x84, 0x08, 0x01, 0x0D, 0x1A, 0x24, 0x07, 0xA1, 0x93, 0x03, 0x0C, 0x04, 0x09, 0x14, -/* 00016350 */ 0x14, 0x14, 0x14, 0x23, 0x08, 0x05, 0xFE, 0x53, 0x04, 0x06, 0xFE, 0x56, 0x04, 0x06, 0xFE, 0x00, -/* 00016360 */ 0x04, 0x06, 0xFE, 0xAD, 0x03, 0x05, 0xFE, 0xBC, 0x03, 0x05, 0xFE, 0xFF, 0x03, 0x06, 0xFE, 0x86, -/* 00016370 */ 0x04, 0x06, 0xFE, 0x82, 0x04, 0x06, 0xFE, 0x80, 0x04, 0x06, 0xFE, 0x81, 0x04, 0x06, 0xFE, 0x83, -/* 00016380 */ 0x04, 0x06, 0xFE, 0xB4, 0x03, 0x06, 0xFE, 0xB3, 0x03, 0x06, 0xFE, 0xB5, 0x03, 0x05, 0xFE, 0x87, -/* 00016390 */ 0x04, 0x06, 0xFE, 0x88, 0x04, 0x05, 0xFE, 0x89, 0x04, 0x05, 0xFE, 0x8A, 0x04, 0x05, 0xFE, 0x8B, -/* 000163A0 */ 0x04, 0x06, 0xFE, 0x8C, 0x04, 0x05, 0xFE, 0x8D, 0x04, 0x05, 0xFE, 0x8E, 0x04, 0x0B, 0xFE, 0x98, -/* 000163B0 */ 0x02, 0x4F, 0x1D, 0x4F, 0x1E, 0x4F, 0x1F, 0x4F, 0x20, 0x4F, 0x21, 0x4F, 0x22, 0x8D, 0x02, 0x11, -/* 000163C0 */ 0x24, 0x00, 0x00, 0x4B, 0x24, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x1B, 0x00, 0x00, -/* 000163D0 */ 0xEE, 0x02, 0x24, 0x24, 0x00, 0x00, 0x47, 0x1D, 0x24, 0x8D, 0x01, 0x07, 0x24, 0x01, 0x00, 0x4B, -/* 000163E0 */ 0x24, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x1C, 0x01, 0x00, 0x5B, 0x02, 0x03, 0x01, -/* 000163F0 */ 0x00, 0x5B, 0x03, 0x04, 0x01, 0x00, 0xEE, 0x04, 0x24, 0x24, 0x01, 0x00, 0x47, 0x1C, 0x24, 0x8D, -/* 00016400 */ 0x03, 0x37, 0x25, 0x02, 0x00, 0x4B, 0x25, 0x6B, 0x24, 0x25, 0x00, 0x07, 0x01, 0x00, 0x5A, 0x00, -/* 00016410 */ 0x25, 0xF2, 0x01, 0x24, 0x24, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x47, 0x1E, 0x24, 0x47, 0x24, -/* 00016420 */ 0x1E, 0x8D, 0x02, 0x02, 0x25, 0x03, 0x00, 0x4B, 0x25, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x02, 0x5B, -/* 00016430 */ 0x01, 0x1C, 0x03, 0x00, 0x5B, 0x02, 0x05, 0x03, 0x00, 0x5B, 0x03, 0x06, 0x03, 0x00, 0xCD, 0x26, -/* 00016440 */ 0x02, 0x00, 0x00, 0x9F, 0x00, 0x07, 0x26, 0x9F, 0x01, 0x08, 0x26, 0x5B, 0x04, 0x26, 0x03, 0x00, -/* 00016450 */ 0x5B, 0x05, 0x08, 0x03, 0x00, 0xEE, 0x06, 0x25, 0x25, 0x03, 0x00, 0x75, 0x25, 0x24, 0x01, 0x47, -/* 00016460 */ 0x24, 0x1E, 0x8D, 0x02, 0x02, 0x25, 0x03, 0x00, 0x4B, 0x25, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x02, -/* 00016470 */ 0x5B, 0x01, 0x1C, 0x04, 0x00, 0x5B, 0x02, 0x09, 0x04, 0x00, 0x5B, 0x03, 0x06, 0x04, 0x00, 0xCD, -/* 00016480 */ 0x26, 0x04, 0x01, 0x00, 0x9F, 0x00, 0x0A, 0x26, 0x9F, 0x01, 0x0B, 0x26, 0x9F, 0x02, 0x0C, 0x26, -/* 00016490 */ 0x9F, 0x03, 0x0D, 0x26, 0x5B, 0x04, 0x26, 0x04, 0x00, 0xA6, 0x26, 0x5B, 0x05, 0x26, 0x04, 0x00, -/* 000164A0 */ 0xEE, 0x06, 0x25, 0x25, 0x04, 0x00, 0x75, 0x25, 0x24, 0x02, 0x8D, 0x02, 0x0B, 0x24, 0x04, 0x00, -/* 000164B0 */ 0x4B, 0x24, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x02, 0x8D, 0x03, 0x03, 0x25, 0x05, 0x00, 0x60, 0x25, -/* 000164C0 */ 0x25, 0x03, 0x5B, 0x01, 0x25, 0x05, 0x00, 0x5B, 0x02, 0x1D, 0x05, 0x00, 0x5B, 0x03, 0x1E, 0x05, -/* 000164D0 */ 0x00, 0xCD, 0x25, 0x03, 0x02, 0x00, 0x9F, 0x00, 0x0E, 0x25, 0x9F, 0x01, 0x0F, 0x25, 0x9F, 0x02, -/* 000164E0 */ 0x10, 0x25, 0x5B, 0x04, 0x25, 0x05, 0x00, 0xEE, 0x05, 0x24, 0x24, 0x05, 0x00, 0x47, 0x1F, 0x24, -/* 000164F0 */ 0x60, 0x24, 0x1F, 0x04, 0x75, 0x24, 0x1A, 0x05, 0x60, 0x24, 0x1F, 0x06, 0x75, 0x24, 0x1A, 0x07, -/* 00016500 */ 0x60, 0x24, 0x1F, 0x08, 0x75, 0x24, 0x1A, 0x09, 0x60, 0x24, 0x1F, 0x0A, 0x75, 0x24, 0x1A, 0x0B, -/* 00016510 */ 0x60, 0x24, 0x1F, 0x0C, 0x47, 0x20, 0x24, 0x60, 0x24, 0x1C, 0x0D, 0x47, 0x21, 0x24, 0xA6, 0x24, -/* 00016520 */ 0x14, 0x03, 0x00, 0x21, 0x24, 0x09, 0x20, 0x00, 0x8D, 0x03, 0x03, 0x25, 0x05, 0x00, 0x6B, 0x24, -/* 00016530 */ 0x25, 0x0E, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x25, 0xF2, 0x01, 0x24, 0x24, 0x0E, 0x00, 0x00, 0x00, -/* 00016540 */ 0x06, 0x00, 0x47, 0x21, 0x24, 0x09, 0x22, 0x00, 0x8D, 0x03, 0x24, 0x25, 0x06, 0x00, 0x6B, 0x24, -/* 00016550 */ 0x25, 0x0F, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x25, 0x5B, 0x01, 0x21, 0x07, 0x00, 0xF2, 0x02, 0x24, -/* 00016560 */ 0x24, 0x0F, 0x00, 0x00, 0x00, 0x07, 0x00, 0x47, 0x21, 0x24, 0x8D, 0x03, 0x03, 0x25, 0x05, 0x00, -/* 00016570 */ 0x6B, 0x24, 0x25, 0x10, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x25, 0x5B, 0x01, 0x21, 0x08, 0x00, 0xF2, -/* 00016580 */ 0x02, 0x24, 0x24, 0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x47, 0x22, 0x24, 0xA6, 0x24, 0x14, 0x08, -/* 00016590 */ 0x00, 0x22, 0x24, 0x14, 0x03, 0x00, 0x22, 0x11, 0x09, 0x2E, 0x00, 0x8D, 0x03, 0x38, 0x25, 0x07, -/* 000165A0 */ 0x00, 0x4B, 0x25, 0x6B, 0x24, 0x25, 0x11, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x25, 0x5B, 0x01, 0x21, -/* 000165B0 */ 0x09, 0x00, 0x5B, 0x02, 0x12, 0x09, 0x00, 0x5B, 0x03, 0x13, 0x09, 0x00, 0xF2, 0x04, 0xFF, 0x24, -/* 000165C0 */ 0x11, 0x00, 0x00, 0x00, 0x09, 0x00, 0x09, 0x16, 0x00, 0x14, 0x08, 0x00, 0x22, 0x14, 0x14, 0x03, -/* 000165D0 */ 0x00, 0x22, 0x15, 0x09, 0x06, 0x00, 0x47, 0x21, 0x16, 0x09, 0x03, 0x00, 0x47, 0x21, 0x22, 0x75, -/* 000165E0 */ 0x21, 0x1A, 0x12, 0x8D, 0x02, 0x02, 0x24, 0x03, 0x00, 0x4B, 0x24, 0x07, 0x06, 0x00, 0x5A, 0x00, -/* 000165F0 */ 0x02, 0x5B, 0x01, 0x1C, 0x0A, 0x00, 0x5B, 0x02, 0x17, 0x0A, 0x00, 0x5B, 0x03, 0x06, 0x0A, 0x00, -/* 00016600 */ 0xCD, 0x25, 0x02, 0x03, 0x00, 0x9F, 0x00, 0x18, 0x25, 0x9F, 0x01, 0x08, 0x25, 0x5B, 0x04, 0x25, -/* 00016610 */ 0x0A, 0x00, 0x5B, 0x05, 0x08, 0x0A, 0x00, 0xEE, 0x06, 0xFF, 0x24, 0x0A, 0x00, 0x8D, 0x01, 0x05, -/* 00016620 */ 0x24, 0x08, 0x00, 0x4B, 0x24, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x1A, 0x0B, 0x00, -/* 00016630 */ 0x5B, 0x02, 0x1C, 0x0B, 0x00, 0xEE, 0x03, 0xFF, 0x24, 0x0B, 0x00, 0x75, 0x19, 0x1A, 0x13, 0x47, -/* 00016640 */ 0x00, 0x1A, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x61, 0xFE, 0xF8, 0x01, 0xFE, 0xB5, 0x03, -/* 00016650 */ 0xFE, 0xD9, 0x01, 0xFE, 0xF7, 0x01, 0xFE, 0xF7, 0x01, 0xFE, 0xB3, 0x03, 0xFE, 0x39, 0x02, 0xFE, -/* 00016660 */ 0xB5, 0x03, 0xFE, 0x86, 0x04, 0xFE, 0xB4, 0x03, 0xFE, 0x18, 0x02, 0xFE, 0xBD, 0x03, 0xFE, 0x42, -/* 00016670 */ 0x02, 0xFE, 0xE8, 0x01, 0xFE, 0x37, 0x03, 0xFE, 0xE7, 0x01, 0xFE, 0x26, 0x03, 0xFE, 0x42, 0x02, -/* 00016680 */ 0xFE, 0x8F, 0x04, 0xFF, 0x10, 0x13, 0x01, 0x00, 0x1B, 0x0C, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x46, -/* 00016690 */ 0x00, 0x26, 0x00, 0x42, 0x00, 0x1F, 0x00, 0x24, 0x00, 0x41, 0x00, 0xD1, 0x00, 0x4B, 0x00, 0x6A, -/* 000166A0 */ 0x00, 0x46, 0x00, 0x6F, 0x00, 0x08, 0x00, 0x2E, 0x00, 0x08, 0x00, 0x2C, 0x00, 0x08, 0x00, 0x2D, -/* 000166B0 */ 0x00, 0x08, 0x00, 0x34, 0x00, 0x07, 0x00, 0x37, 0x00, 0x07, 0x00, 0x27, 0x00, 0x0A, 0x00, 0x28, -/* 000166C0 */ 0x00, 0x20, 0x00, 0x49, 0x00, 0x22, 0x00, 0xEF, 0x00, 0x22, 0x00, 0x4E, 0x00, 0x0F, 0x00, 0x52, -/* 000166D0 */ 0x00, 0x2E, 0x00, 0x5F, 0x00, 0x0D, 0x00, 0x4E, 0x00, 0x06, 0x00, 0x31, 0x00, 0x03, 0x00, 0x2D, -/* 000166E0 */ 0x00, 0x04, 0x00, 0x64, 0x00, 0x3A, 0x00, 0xD3, 0x00, 0x1E, 0x00, 0x3B, 0x00, 0x04, 0x00, 0x3E, -/* 000166F0 */ 0x00, 0x08, 0x00, 0x1F, 0x00, 0x00, 0x3F, 0x4D, 0x00, 0xC0, 0x13, 0x8D, 0x25, 0x00, 0xFE, 0x7D, -/* 00016700 */ 0x05, 0x26, 0xA0, 0x41, 0xD1, 0x00, 0x58, 0xFE, 0xDC, 0xF1, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, -/* 00016710 */ 0x01, 0x01, 0xFE, 0xDC, 0xF1, 0xFE, 0x0B, 0x1F, 0xFE, 0x0B, 0x1F, 0x06, 0xFE, 0x5C, 0x04, 0xFE, -/* 00016720 */ 0x5D, 0x04, 0xFE, 0x5E, 0x04, 0xFE, 0x5F, 0x04, 0xFE, 0x60, 0x04, 0xFE, 0x61, 0x04, 0x04, 0x39, -/* 00016730 */ 0x3C, 0x51, 0x51, 0x03, 0x30, 0x30, 0x30, 0x30, 0x05, 0x39, 0x3A, 0x3B, 0x06, 0xFE, 0x46, 0x04, -/* 00016740 */ 0x06, 0xFE, 0x62, 0x04, 0x06, 0xFE, 0x47, 0x04, 0x06, 0xFE, 0x63, 0x04, 0x06, 0xFE, 0x48, 0x04, -/* 00016750 */ 0x06, 0xFE, 0x64, 0x04, 0x06, 0xFE, 0x49, 0x04, 0x06, 0xFE, 0x65, 0x04, 0x06, 0xFE, 0x4A, 0x04, -/* 00016760 */ 0x06, 0xFE, 0x66, 0x04, 0x06, 0xFE, 0x4B, 0x04, 0x06, 0xFE, 0x67, 0x04, 0x06, 0xFE, 0x68, 0x04, -/* 00016770 */ 0x06, 0xFE, 0x69, 0x04, 0x06, 0xFE, 0x6A, 0x04, 0x06, 0xFE, 0x6B, 0x04, 0x06, 0xFE, 0x4C, 0x04, -/* 00016780 */ 0x06, 0xFE, 0x6C, 0x04, 0x06, 0xFE, 0x4D, 0x04, 0x06, 0xFE, 0x6D, 0x04, 0x06, 0xFE, 0x4E, 0x04, -/* 00016790 */ 0x06, 0xFE, 0x6E, 0x04, 0x07, 0x06, 0xFE, 0x6F, 0x04, 0x06, 0xFE, 0x70, 0x04, 0x06, 0xFE, 0xEF, -/* 000167A0 */ 0x03, 0x06, 0xFE, 0x71, 0x04, 0x06, 0xFE, 0x72, 0x04, 0x06, 0xFE, 0x73, 0x04, 0x06, 0xFE, 0x74, -/* 000167B0 */ 0x04, 0x06, 0xFE, 0x75, 0x04, 0x06, 0xFE, 0x76, 0x04, 0x06, 0xFE, 0x77, 0x04, 0x06, 0xFE, 0x78, -/* 000167C0 */ 0x04, 0x06, 0xFE, 0x79, 0x04, 0x06, 0xFE, 0x7A, 0x04, 0x06, 0xFE, 0x13, 0x04, 0x01, 0x01, 0x06, -/* 000167D0 */ 0xFE, 0x45, 0x04, 0x01, 0x02, 0x06, 0xFE, 0x43, 0x04, 0x01, 0x03, 0x06, 0xFE, 0x44, 0x04, 0x01, -/* 000167E0 */ 0x04, 0x06, 0xFE, 0x42, 0x04, 0x01, 0x05, 0x06, 0xFE, 0x7B, 0x04, 0x06, 0xFE, 0x7C, 0x04, 0x06, -/* 000167F0 */ 0xFE, 0x7D, 0x04, 0x06, 0xFE, 0x7E, 0x04, 0x06, 0xFE, 0x7F, 0x04, 0x06, 0xFE, 0x80, 0x04, 0x06, -/* 00016800 */ 0xFE, 0x81, 0x04, 0x06, 0xFE, 0x82, 0x04, 0x06, 0xFE, 0x83, 0x04, 0xFE, 0x4D, 0x01, 0x4F, 0x3C, -/* 00016810 */ 0x94, 0x02, 0x3C, 0x4F, 0x3C, 0x94, 0x03, 0x3C, 0x4F, 0x3C, 0x94, 0x04, 0x3C, 0x4F, 0x3C, 0x94, -/* 00016820 */ 0x05, 0x3C, 0x4F, 0x3C, 0x94, 0x06, 0x3C, 0x4F, 0x3C, 0x94, 0x07, 0x3C, 0xCB, 0x00, 0x00, 0x00, -/* 00016830 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x79, 0x03, 0x3C, 0x00, 0x79, 0x05, 0x3C, -/* 00016840 */ 0x01, 0x79, 0x07, 0x3C, 0x02, 0x79, 0x09, 0x3C, 0x03, 0x79, 0x0B, 0x3C, 0x04, 0x79, 0x0D, 0x3C, -/* 00016850 */ 0x05, 0x79, 0x0F, 0x3C, 0x06, 0x79, 0x11, 0x3C, 0x07, 0x79, 0x13, 0x3C, 0x08, 0x79, 0x15, 0x3C, -/* 00016860 */ 0x09, 0x79, 0x17, 0x3C, 0x0A, 0x94, 0x02, 0x3C, 0xCB, 0x34, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, -/* 00016870 */ 0x00, 0x3C, 0x00, 0x00, 0x00, 0x79, 0x02, 0x3C, 0x0B, 0x79, 0x02, 0x3C, 0x0C, 0x79, 0x02, 0x3C, -/* 00016880 */ 0x0D, 0x79, 0x04, 0x3C, 0x0E, 0x79, 0x06, 0x3C, 0x0F, 0x79, 0x06, 0x3C, 0x10, 0x79, 0x06, 0x3C, -/* 00016890 */ 0x11, 0x79, 0x08, 0x3C, 0x12, 0x79, 0x08, 0x3C, 0x13, 0x79, 0x0A, 0x3C, 0x14, 0x79, 0x0C, 0x3C, -/* 000168A0 */ 0x15, 0x79, 0x0C, 0x3C, 0x16, 0x79, 0x0C, 0x3C, 0x17, 0x79, 0x0C, 0x3C, 0x18, 0x79, 0x12, 0x3C, -/* 000168B0 */ 0x19, 0x79, 0x14, 0x3C, 0x1A, 0x79, 0x16, 0x3C, 0x1B, 0x79, 0x16, 0x3C, 0x1C, 0x79, 0x16, 0x3C, -/* 000168C0 */ 0x1D, 0x79, 0x16, 0x3C, 0x1E, 0x79, 0x16, 0x3C, 0x1F, 0x79, 0x16, 0x3C, 0x20, 0x79, 0x16, 0x3C, -/* 000168D0 */ 0x21, 0x94, 0x03, 0x3C, 0xCB, 0x98, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, -/* 000168E0 */ 0x00, 0x79, 0x27, 0x3C, 0x22, 0x79, 0x29, 0x3C, 0x23, 0x79, 0x2B, 0x3C, 0x24, 0x79, 0x2D, 0x3C, -/* 000168F0 */ 0x25, 0x79, 0x2F, 0x3C, 0x26, 0x94, 0x04, 0x3C, 0xCA, 0x3C, 0x79, 0x26, 0x3C, 0x27, 0x79, 0x28, -/* 00016900 */ 0x3C, 0x28, 0x79, 0x2A, 0x3C, 0x29, 0x79, 0x2C, 0x3C, 0x2A, 0x79, 0x2E, 0x3C, 0x2B, 0x94, 0x05, -/* 00016910 */ 0x3C, 0xCB, 0xB4, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x79, 0x0F, -/* 00016920 */ 0x3C, 0x2C, 0x79, 0x11, 0x3C, 0x2D, 0x79, 0x1E, 0x3C, 0x2E, 0x79, 0x1F, 0x3C, 0x2F, 0x94, 0x06, -/* 00016930 */ 0x3C, 0xCB, 0xCC, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x79, 0x35, -/* 00016940 */ 0x3C, 0x15, 0x79, 0x36, 0x3C, 0x16, 0x79, 0x37, 0x3C, 0x17, 0x79, 0x38, 0x3C, 0x18, 0x94, 0x07, -/* 00016950 */ 0x3C, 0xD3, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x05, 0xE4, 0x00, 0xCC, 0x00, -/* 00016960 */ 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x69, 0x04, 0x00, 0x00, 0x6B, 0x04, -/* 00016970 */ 0x00, 0x00, 0x73, 0x04, 0x00, 0x00, 0x74, 0x04, 0x00, 0x00, 0xB4, 0x00, 0x00, 0x00, 0x03, 0x04, -/* 00016980 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x81, 0x04, 0x00, 0x00, 0x82, 0x04, -/* 00016990 */ 0x00, 0x00, 0x83, 0x04, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x03, 0x05, 0x00, 0x00, 0x00, 0x00, -/* 000169A0 */ 0x00, 0x00, 0x20, 0x02, 0x00, 0x00, 0x45, 0x04, 0x00, 0x00, 0x43, 0x04, 0x00, 0x00, 0x44, 0x04, -/* 000169B0 */ 0x00, 0x00, 0x42, 0x04, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x03, 0x17, 0x00, 0x00, 0x00, 0x00, -/* 000169C0 */ 0x00, 0x00, 0x6D, 0x00, 0x00, 0x00, 0x6F, 0x04, 0x00, 0x00, 0x70, 0x04, 0x00, 0x00, 0x63, 0x04, -/* 000169D0 */ 0x00, 0x00, 0x64, 0x04, 0x00, 0x00, 0xEF, 0x03, 0x00, 0x00, 0x71, 0x04, 0x00, 0x00, 0x65, 0x04, -/* 000169E0 */ 0x00, 0x00, 0x72, 0x04, 0x00, 0x00, 0x66, 0x04, 0x00, 0x00, 0x69, 0x04, 0x00, 0x00, 0x6B, 0x04, -/* 000169F0 */ 0x00, 0x00, 0x73, 0x04, 0x00, 0x00, 0x74, 0x04, 0x00, 0x00, 0x6C, 0x04, 0x00, 0x00, 0x6D, 0x04, -/* 00016A00 */ 0x00, 0x00, 0x6E, 0x04, 0x00, 0x00, 0x75, 0x04, 0x00, 0x00, 0x76, 0x04, 0x00, 0x00, 0x77, 0x04, -/* 00016A10 */ 0x00, 0x00, 0x78, 0x04, 0x00, 0x00, 0x79, 0x04, 0x00, 0x00, 0x7A, 0x04, 0x00, 0x00, 0x00, 0x00, -/* 00016A20 */ 0x00, 0x00, 0x03, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x02, 0x00, 0x00, 0x3B, 0x02, -/* 00016A30 */ 0x00, 0x00, 0x45, 0x02, 0x00, 0x00, 0x3F, 0x02, 0x00, 0x00, 0x3A, 0x02, 0x00, 0x00, 0x3C, 0x02, -/* 00016A40 */ 0x00, 0x00, 0x3D, 0x02, 0x00, 0x00, 0x6A, 0x04, 0x00, 0x00, 0x3E, 0x02, 0x00, 0x00, 0x41, 0x02, -/* 00016A50 */ 0x00, 0x00, 0x43, 0x02, 0x00, 0x00, 0xFE, 0x44, 0x02, 0xFE, 0x3B, 0x02, 0xFE, 0x45, 0x02, 0xFE, -/* 00016A60 */ 0x3F, 0x02, 0xFE, 0x3A, 0x02, 0xFE, 0x3C, 0x02, 0xFE, 0x3D, 0x02, 0xFE, 0x6A, 0x04, 0xFE, 0x3E, -/* 00016A70 */ 0x02, 0xFE, 0x41, 0x02, 0xFE, 0x43, 0x02, 0x6D, 0xFE, 0x6F, 0x04, 0xFE, 0x70, 0x04, 0xFE, 0x63, -/* 00016A80 */ 0x04, 0xFE, 0x64, 0x04, 0xFE, 0xEF, 0x03, 0xFE, 0x71, 0x04, 0xFE, 0x65, 0x04, 0xFE, 0x72, 0x04, -/* 00016A90 */ 0xFE, 0x66, 0x04, 0xFE, 0x69, 0x04, 0xFE, 0x6B, 0x04, 0xFE, 0x73, 0x04, 0xFE, 0x74, 0x04, 0xFE, -/* 00016AA0 */ 0x6C, 0x04, 0xFE, 0x6D, 0x04, 0xFE, 0x6E, 0x04, 0xFE, 0x75, 0x04, 0xFE, 0x76, 0x04, 0xFE, 0x77, -/* 00016AB0 */ 0x04, 0xFE, 0x78, 0x04, 0xFE, 0x79, 0x04, 0xFE, 0x7A, 0x04, 0xFE, 0x20, 0x02, 0xFE, 0x45, 0x04, -/* 00016AC0 */ 0xFE, 0x43, 0x04, 0xFE, 0x44, 0x04, 0xFE, 0x42, 0x04, 0xFE, 0x7B, 0x04, 0xFE, 0x7C, 0x04, 0xFE, -/* 00016AD0 */ 0x7D, 0x04, 0xFE, 0x7E, 0x04, 0xFE, 0x7F, 0x04, 0xFE, 0x80, 0x04, 0xFE, 0x81, 0x04, 0xFE, 0x82, -/* 00016AE0 */ 0x04, 0xFE, 0x83, 0x04, 0xFE, 0x75, 0xF2, 0x08, 0x1E, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x10, 0x02, -/* 00016AF0 */ 0x6C, 0x00, 0xDC, 0x02, 0x24, 0x00, 0xC3, 0x00, 0x19, 0x00, 0x00, 0x01, 0x20, 0x00, 0xA1, 0x00, -/* 00016B00 */ 0x20, 0x00, 0xA2, 0x00, 0x08, 0x00, 0x7F, 0x16, 0x00, 0x0D, 0x6B, 0x01, 0x00, 0xBF, 0x7D, 0x0F, -/* 00016B10 */ 0xC3, 0x43, 0xAD, 0x0D, 0x00, 0xFE, 0xB7, 0x05, 0x13, 0xA2, 0x41, 0xD1, 0x00, 0x59, 0xFE, 0x6E, -/* 00016B20 */ 0xFA, 0x02, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x6E, 0xFA, 0xFE, 0x6E, 0x16, 0xFE, -/* 00016B30 */ 0x6E, 0x16, 0x40, 0x04, 0xFE, 0xCA, 0x01, 0xFE, 0xFA, 0x01, 0xFE, 0x3D, 0x02, 0xFE, 0xB5, 0x03, -/* 00016B40 */ 0x16, 0x11, 0x20, 0x08, 0xD1, 0xC1, 0x7B, 0x04, 0x02, 0x08, 0x01, 0x0A, 0x0C, 0x02, 0x0B, 0x0B, -/* 00016B50 */ 0x0B, 0x0B, 0x02, 0x1D, 0x1E, 0x1F, 0x20, 0xFE, 0x43, 0x01, 0xFE, 0x3E, 0x03, 0xFE, 0xE2, 0x02, -/* 00016B60 */ 0xFE, 0x0A, 0x03, 0x06, 0xFE, 0x68, 0x04, 0x06, 0xFE, 0xC2, 0x03, 0x08, 0x06, 0xFE, 0x5B, 0x03, -/* 00016B70 */ 0x0C, 0x01, 0x00, 0x06, 0xFE, 0x84, 0x04, 0x01, 0x01, 0x0B, 0x06, 0xFE, 0x85, 0x04, 0x06, 0xFE, -/* 00016B80 */ 0x69, 0x04, 0x06, 0xFE, 0x6B, 0x04, 0x06, 0xFE, 0x73, 0x04, 0x06, 0xFE, 0x74, 0x04, 0x01, 0x02, -/* 00016B90 */ 0xFE, 0x46, 0x03, 0x94, 0x02, 0x12, 0x4F, 0x13, 0x4F, 0x14, 0x4F, 0x15, 0x4F, 0x16, 0x4F, 0x17, -/* 00016BA0 */ 0x4F, 0x18, 0x4F, 0x1A, 0x4F, 0x1B, 0x4F, 0x1C, 0x4F, 0x19, 0x4F, 0x22, 0x94, 0x03, 0x22, 0x4F, -/* 00016BB0 */ 0x22, 0x94, 0x04, 0x22, 0x4F, 0x22, 0x94, 0x05, 0x22, 0x8D, 0x04, 0x37, 0x23, 0x00, 0x00, 0x4B, -/* 00016BC0 */ 0x23, 0x6B, 0x22, 0x23, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x23, 0x8D, 0x02, 0x04, 0x24, 0x01, -/* 00016BD0 */ 0x00, 0x4B, 0x24, 0x5B, 0x01, 0x24, 0x00, 0x00, 0xD3, 0x00, 0x24, 0x5B, 0x02, 0x24, 0x00, 0x00, -/* 00016BE0 */ 0x8D, 0x04, 0x37, 0x25, 0x00, 0x00, 0x4B, 0x25, 0x6B, 0x24, 0x25, 0x01, 0x07, 0x01, 0x00, 0x5A, -/* 00016BF0 */ 0x00, 0x25, 0xF2, 0x01, 0x24, 0x24, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x5B, 0x03, 0x24, 0x00, -/* 00016C00 */ 0x00, 0xF2, 0x04, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x94, 0x03, 0x22, 0x8D, 0x03, -/* 00016C10 */ 0x02, 0x22, 0x02, 0x00, 0x4B, 0x22, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x91, 0x02, 0x23, 0x03, -/* 00016C20 */ 0x00, 0x5B, 0x01, 0x23, 0x02, 0x00, 0x5B, 0x02, 0x02, 0x02, 0x00, 0x5B, 0x03, 0x03, 0x02, 0x00, -/* 00016C30 */ 0xA6, 0x23, 0x5B, 0x04, 0x23, 0x02, 0x00, 0xA6, 0x23, 0x5B, 0x05, 0x23, 0x02, 0x00, 0xEE, 0x06, -/* 00016C40 */ 0x22, 0x22, 0x02, 0x00, 0x94, 0x04, 0x22, 0x60, 0x22, 0x11, 0x02, 0x94, 0x05, 0x22, 0x8D, 0x04, -/* 00016C50 */ 0x37, 0x23, 0x00, 0x00, 0x4B, 0x23, 0x6B, 0x22, 0x23, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x23, -/* 00016C60 */ 0x8D, 0x04, 0x37, 0x25, 0x00, 0x00, 0x4B, 0x25, 0x6B, 0x24, 0x25, 0x03, 0x07, 0x02, 0x00, 0x5A, -/* 00016C70 */ 0x00, 0x25, 0x91, 0x03, 0x26, 0x04, 0x00, 0x5B, 0x01, 0x26, 0x04, 0x00, 0xF2, 0x02, 0x24, 0x24, -/* 00016C80 */ 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x5B, 0x01, 0x24, 0x03, 0x00, 0xD3, 0x01, 0x24, 0x5B, 0x02, -/* 00016C90 */ 0x24, 0x03, 0x00, 0x5B, 0x03, 0x05, 0x03, 0x00, 0xF2, 0x04, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, -/* 00016CA0 */ 0x03, 0x00, 0x47, 0x13, 0x22, 0x8D, 0x04, 0x03, 0x23, 0x05, 0x00, 0x6B, 0x22, 0x23, 0x04, 0x07, -/* 00016CB0 */ 0x03, 0x00, 0x5A, 0x00, 0x23, 0x60, 0x24, 0x11, 0x05, 0x5B, 0x01, 0x24, 0x05, 0x00, 0x5B, 0x02, -/* 00016CC0 */ 0x13, 0x05, 0x00, 0xF2, 0x03, 0x22, 0x22, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x47, 0x14, 0x22, -/* 00016CD0 */ 0x47, 0x15, 0x06, 0x47, 0x16, 0x07, 0xEB, 0x00, 0xEC, 0x00, 0xA5, 0x22, 0x14, 0x06, 0x00, 0x00, -/* 00016CE0 */ 0x12, 0x03, 0x00, 0x16, 0x22, 0x09, 0xE7, 0x01, 0x96, 0x22, 0x14, 0x16, 0x00, 0x00, 0x47, 0x17, -/* 00016CF0 */ 0x22, 0x43, 0x22, 0x17, 0x08, 0x47, 0x18, 0x22, 0x0E, 0x10, 0x00, 0x15, 0x0E, 0x03, 0x00, 0x18, -/* 00016D00 */ 0x47, 0x15, 0x06, 0x28, 0x16, 0x16, 0x09, 0xC3, 0x01, 0x09, 0x1E, 0x00, 0x0E, 0x0C, 0x00, 0x18, -/* 00016D10 */ 0x47, 0x15, 0x0A, 0x28, 0x16, 0x16, 0x09, 0xB3, 0x01, 0x09, 0x0E, 0x00, 0x14, 0x03, 0x00, 0x17, -/* 00016D20 */ 0x0B, 0x09, 0x06, 0x00, 0x28, 0x16, 0x16, 0x09, 0xA2, 0x01, 0x14, 0x12, 0x00, 0x17, 0x0C, 0x14, -/* 00016D30 */ 0x0D, 0x00, 0x17, 0x0D, 0x14, 0x08, 0x00, 0x17, 0x0E, 0x14, 0x03, 0x00, 0x17, 0x0F, 0x09, 0x2D, -/* 00016D40 */ 0x01, 0x91, 0x05, 0x22, 0x06, 0x00, 0x0E, 0x12, 0x01, 0x22, 0x91, 0x04, 0x22, 0x07, 0x00, 0xA6, -/* 00016D50 */ 0x23, 0x14, 0x03, 0x00, 0x22, 0x23, 0x09, 0x03, 0x01, 0x8D, 0x01, 0x06, 0x22, 0x08, 0x00, 0x4B, -/* 00016D60 */ 0x22, 0x91, 0x05, 0x23, 0x06, 0x00, 0x96, 0x22, 0x22, 0x23, 0x01, 0x00, 0x47, 0x19, 0x22, 0x15, -/* 00016D70 */ 0x03, 0x00, 0x19, 0x17, 0x09, 0xE2, 0x00, 0x2F, 0x22, 0x16, 0x09, 0x96, 0x22, 0x14, 0x22, 0x02, -/* 00016D80 */ 0x00, 0x14, 0x03, 0x00, 0x22, 0x17, 0x09, 0x67, 0x00, 0x8D, 0x04, 0x37, 0x23, 0x00, 0x00, 0x4B, -/* 00016D90 */ 0x23, 0x6B, 0x22, 0x23, 0x07, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x23, 0x5B, 0x01, 0x14, 0x06, 0x00, -/* 00016DA0 */ 0x5B, 0x02, 0x07, 0x06, 0x00, 0x5B, 0x03, 0x16, 0x06, 0x00, 0xF2, 0x04, 0x22, 0x22, 0x07, 0x00, -/* 00016DB0 */ 0x00, 0x00, 0x06, 0x00, 0x2F, 0x22, 0x22, 0x19, 0x2F, 0x22, 0x22, 0x19, 0x8D, 0x04, 0x37, 0x24, -/* 00016DC0 */ 0x00, 0x00, 0x4B, 0x24, 0x6B, 0x23, 0x24, 0x08, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x24, 0x5B, 0x01, -/* 00016DD0 */ 0x14, 0x07, 0x00, 0x2F, 0x25, 0x16, 0x10, 0x5B, 0x02, 0x25, 0x07, 0x00, 0xF2, 0x03, 0x23, 0x23, -/* 00016DE0 */ 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x2F, 0x22, 0x22, 0x23, 0x47, 0x14, 0x22, 0x09, 0x60, 0x00, -/* 00016DF0 */ 0x8D, 0x04, 0x37, 0x23, 0x00, 0x00, 0x4B, 0x23, 0x6B, 0x22, 0x23, 0x07, 0x07, 0x04, 0x00, 0x5A, -/* 00016E00 */ 0x00, 0x23, 0x5B, 0x01, 0x14, 0x08, 0x00, 0x5B, 0x02, 0x07, 0x08, 0x00, 0x5B, 0x03, 0x16, 0x08, -/* 00016E10 */ 0x00, 0xF2, 0x04, 0x22, 0x22, 0x07, 0x00, 0x00, 0x00, 0x08, 0x00, 0x2F, 0x22, 0x22, 0x19, 0x8D, -/* 00016E20 */ 0x04, 0x37, 0x24, 0x00, 0x00, 0x4B, 0x24, 0x6B, 0x23, 0x24, 0x08, 0x07, 0x03, 0x00, 0x5A, 0x00, -/* 00016E30 */ 0x24, 0x5B, 0x01, 0x14, 0x09, 0x00, 0x2F, 0x25, 0x16, 0x09, 0x5B, 0x02, 0x25, 0x09, 0x00, 0xF2, -/* 00016E40 */ 0x03, 0x23, 0x23, 0x08, 0x00, 0x00, 0x00, 0x09, 0x00, 0x2F, 0x22, 0x22, 0x23, 0x47, 0x14, 0x22, -/* 00016E50 */ 0x96, 0x22, 0x14, 0x16, 0x03, 0x00, 0x47, 0x17, 0x22, 0x09, 0x12, 0x00, 0x8D, 0x01, 0x07, 0x22, -/* 00016E60 */ 0x09, 0x00, 0x4B, 0x22, 0x96, 0x22, 0x22, 0x17, 0x04, 0x00, 0x75, 0x22, 0x11, 0x09, 0x2F, 0x22, -/* 00016E70 */ 0x16, 0x09, 0x47, 0x1A, 0x22, 0xEB, 0x01, 0xEC, 0x01, 0xA5, 0x22, 0x14, 0x06, 0x01, 0x00, 0x12, -/* 00016E80 */ 0x03, 0x00, 0x1A, 0x22, 0x09, 0x14, 0x00, 0x96, 0x22, 0x14, 0x1A, 0x05, 0x00, 0x14, 0x03, 0x00, -/* 00016E90 */ 0x22, 0x17, 0x09, 0x06, 0x00, 0x28, 0x1A, 0x1A, 0x09, 0xDC, 0xFF, 0xED, 0x01, 0x8D, 0x01, 0x03, -/* 00016EA0 */ 0x22, 0x0A, 0x00, 0x4B, 0x22, 0x96, 0x22, 0x22, 0x17, 0x06, 0x00, 0x47, 0x1B, 0x22, 0x8D, 0x01, -/* 00016EB0 */ 0x05, 0x22, 0x0B, 0x00, 0x4B, 0x22, 0x35, 0x23, 0x1A, 0x16, 0x96, 0x22, 0x22, 0x23, 0x07, 0x00, -/* 00016EC0 */ 0x47, 0x1C, 0x22, 0x9B, 0x1C, 0x11, 0x1B, 0x00, 0x00, 0x47, 0x16, 0x1A, 0x09, 0x09, 0xFE, 0xED, -/* 00016ED0 */ 0x00, 0x75, 0x14, 0x11, 0x0A, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x1C, 0x01, 0x61, 0xFE, 0x86, 0x04, -/* 00016EE0 */ 0xBF, 0xFE, 0xE9, 0x01, 0xFE, 0xF7, 0x01, 0xC1, 0xFE, 0x4C, 0x01, 0xFE, 0x4C, 0x01, 0xFE, 0x86, -/* 00016EF0 */ 0x04, 0xFE, 0x40, 0x02, 0xFE, 0x98, 0xFA, 0x28, 0x26, 0x00, 0x00, 0x00, 0x55, 0x00, 0x74, 0x02, -/* 00016F00 */ 0x39, 0x00, 0x5E, 0x00, 0x07, 0x00, 0xB6, 0x00, 0x57, 0x00, 0x43, 0x05, 0x2B, 0x00, 0x0E, 0x02, -/* 00016F10 */ 0x03, 0x00, 0x27, 0x00, 0x07, 0x00, 0x22, 0x00, 0x0E, 0x00, 0x2A, 0x00, 0x09, 0x00, 0x2A, 0x00, -/* 00016F20 */ 0x07, 0x00, 0x31, 0x00, 0x04, 0x00, 0x29, 0x00, 0x04, 0x00, 0x2B, 0x00, 0x03, 0x00, 0x45, 0x00, -/* 00016F30 */ 0x03, 0x00, 0x1D, 0x00, 0x06, 0x00, 0x25, 0x00, 0x04, 0x00, 0x27, 0x00, 0x03, 0x00, 0x2A, 0x00, -/* 00016F40 */ 0x03, 0x00, 0x1D, 0x00, 0x06, 0x00, 0x25, 0x00, 0x08, 0x00, 0x2B, 0x00, 0x03, 0x00, 0x1D, 0x00, -/* 00016F50 */ 0x03, 0x00, 0x02, 0x01, 0x17, 0x00, 0x58, 0x00, 0x18, 0x00, 0x76, 0x01, 0x16, 0x00, 0x49, 0x00, -/* 00016F60 */ 0x08, 0x00, 0x3B, 0x00, 0x12, 0x00, 0x76, 0x00, 0x67, 0x00, 0xE1, 0x00, 0x60, 0x00, 0xED, 0x00, -/* 00016F70 */ 0x0C, 0x00, 0x38, 0x01, 0x12, 0x00, 0x6F, 0x00, 0x0B, 0x00, 0x2A, 0x00, 0x1C, 0x00, 0x44, 0x00, -/* 00016F80 */ 0x08, 0x00, 0x30, 0x00, 0x11, 0x00, 0x3E, 0x00, 0x15, 0x00, 0x48, 0x00, 0x06, 0x00, 0x36, 0x00, -/* 00016F90 */ 0x08, 0x00, 0x2A, 0x00, 0x06, 0x00, 0x23, 0x00, 0x00, 0x08, 0x71, 0x01, 0x00, 0xA1, 0x6F, 0x01, -/* 00016FA0 */ 0x00, 0xBF, 0x5C, 0x0A, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0xC8, 0x05, 0x43, 0xA2, 0x41, 0xD1, -/* 00016FB0 */ 0x00, 0x5B, 0xFE, 0x53, 0xFE, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x53, 0xFE, 0xFE, -/* 00016FC0 */ 0xF8, 0x04, 0xFE, 0xF8, 0x04, 0x01, 0x08, 0x0B, 0x0F, 0x04, 0x3C, 0x38, 0x05, 0x03, 0x01, 0x06, -/* 00016FD0 */ 0x01, 0x01, 0x01, 0x01, 0x0E, 0x06, 0xFE, 0x4B, 0x04, 0x0B, 0x06, 0xFE, 0x82, 0x04, 0x06, 0xFE, -/* 00016FE0 */ 0x80, 0x04, 0x06, 0xFE, 0x68, 0x04, 0x0C, 0x06, 0xFE, 0x81, 0x04, 0x06, 0xFE, 0x83, 0x04, 0x06, -/* 00016FF0 */ 0xFE, 0x6A, 0x04, 0xEC, 0x4F, 0x0D, 0x8D, 0x01, 0x03, 0x0F, 0x00, 0x00, 0x4B, 0x0F, 0x96, 0x0F, -/* 00017000 */ 0x0F, 0x0C, 0x00, 0x00, 0x47, 0x0D, 0x0F, 0x14, 0x03, 0x00, 0x0C, 0x02, 0x09, 0x81, 0x00, 0x8D, -/* 00017010 */ 0x01, 0x04, 0x0F, 0x01, 0x00, 0x4B, 0x0F, 0x14, 0x2F, 0x00, 0x0F, 0x03, 0x8D, 0x01, 0x04, 0x0F, -/* 00017020 */ 0x01, 0x00, 0x4B, 0x0F, 0xA6, 0x10, 0x14, 0x03, 0x00, 0x0F, 0x10, 0x09, 0x23, 0x00, 0x8D, 0x01, -/* 00017030 */ 0x05, 0x0F, 0x02, 0x00, 0x4B, 0x0F, 0x14, 0x10, 0x00, 0x0F, 0x04, 0x8D, 0x01, 0x05, 0x0F, 0x02, -/* 00017040 */ 0x00, 0x4B, 0x0F, 0x14, 0x03, 0x00, 0x0F, 0x05, 0x09, 0x06, 0x00, 0x47, 0x0C, 0x06, 0x09, 0x3F, -/* 00017050 */ 0x00, 0x8D, 0x01, 0x04, 0x0F, 0x01, 0x00, 0x4B, 0x0F, 0x14, 0x2F, 0x00, 0x0F, 0x07, 0x8D, 0x01, -/* 00017060 */ 0x04, 0x0F, 0x01, 0x00, 0x4B, 0x0F, 0xA6, 0x10, 0x14, 0x03, 0x00, 0x0F, 0x10, 0x09, 0x20, 0x00, -/* 00017070 */ 0x8D, 0x01, 0x05, 0x0F, 0x02, 0x00, 0x4B, 0x0F, 0x14, 0x10, 0x00, 0x0F, 0x08, 0x8D, 0x01, 0x05, -/* 00017080 */ 0x0F, 0x02, 0x00, 0x4B, 0x0F, 0x14, 0x03, 0x00, 0x0F, 0x09, 0x09, 0x03, 0x00, 0x47, 0x0C, 0x0A, -/* 00017090 */ 0x47, 0x0F, 0x0B, 0x8D, 0x05, 0x37, 0x11, 0x03, 0x00, 0x4B, 0x11, 0x6B, 0x10, 0x11, 0x00, 0x07, -/* 000170A0 */ 0x03, 0x00, 0x5A, 0x00, 0x11, 0x8D, 0x02, 0x02, 0x12, 0x04, 0x00, 0x4B, 0x12, 0x96, 0x12, 0x12, -/* 000170B0 */ 0x0C, 0x01, 0x00, 0x5B, 0x01, 0x12, 0x00, 0x00, 0x8D, 0x02, 0x04, 0x12, 0x05, 0x00, 0x4B, 0x12, -/* 000170C0 */ 0x96, 0x12, 0x12, 0x0D, 0x02, 0x00, 0x5B, 0x02, 0x12, 0x00, 0x00, 0xF2, 0x03, 0x10, 0x10, 0x00, -/* 000170D0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x00, 0x0F, 0x10, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, -/* 000170E0 */ 0xFE, 0x29, 0x01, 0xFE, 0x88, 0xFE, 0x08, 0x02, 0x00, 0x00, 0x00, 0x11, 0x00, 0x42, 0x00, 0x08, -/* 000170F0 */ 0x00, 0xA5, 0x02, 0x3C, 0x00, 0x6F, 0x00, 0x06, 0x00, 0x35, 0x00, 0x3C, 0x00, 0x70, 0x00, 0x03, -/* 00017100 */ 0x00, 0x5B, 0x00, 0x4E, 0x00, 0x6C, 0x00, 0x00, 0xBF, 0x5C, 0x0E, 0x01, 0x00, 0x88, 0x01, 0x00, -/* 00017110 */ 0xFE, 0xB8, 0x05, 0x45, 0xA2, 0x41, 0xD1, 0x00, 0x5A, 0xFE, 0xCD, 0xFA, 0xFF, 0x00, 0x10, 0x01, -/* 00017120 */ 0x00, 0x03, 0x03, 0xFE, 0xCD, 0xFA, 0xFE, 0x5B, 0x01, 0xFE, 0x5B, 0x01, 0x01, 0x07, 0x06, 0x0B, -/* 00017130 */ 0x07, 0x1B, 0x18, 0x05, 0x02, 0x01, 0x01, 0x02, 0x0A, 0x01, 0x00, 0x06, 0xFE, 0xAD, 0x03, 0x01, -/* 00017140 */ 0x01, 0x08, 0x65, 0x4F, 0x08, 0x4F, 0x09, 0x96, 0x0B, 0x07, 0x02, 0x00, 0x00, 0x47, 0x08, 0x0B, -/* 00017150 */ 0x8D, 0x04, 0x02, 0x0B, 0x00, 0x00, 0x4B, 0x0B, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x05, 0x8D, 0x01, -/* 00017160 */ 0x02, 0x0C, 0x01, 0x00, 0x5B, 0x01, 0x0C, 0x00, 0x00, 0x5B, 0x02, 0x08, 0x00, 0x00, 0x5B, 0x03, -/* 00017170 */ 0x03, 0x00, 0x00, 0x96, 0x0C, 0x07, 0x04, 0x01, 0x00, 0x5B, 0x04, 0x0C, 0x00, 0x00, 0xA6, 0x0C, -/* 00017180 */ 0x5B, 0x05, 0x0C, 0x00, 0x00, 0xEE, 0x06, 0x0B, 0x0B, 0x00, 0x00, 0x47, 0x09, 0x0B, 0xA6, 0x0B, -/* 00017190 */ 0x15, 0x03, 0x00, 0x09, 0x0B, 0x09, 0x06, 0x00, 0x9B, 0x09, 0x06, 0x08, 0x00, 0x00, 0x47, 0x00, -/* 000171A0 */ 0x06, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x02, 0xFB, 0x06, 0x04, 0x00, 0x00, 0x00, -/* 000171B0 */ 0x09, 0x00, 0x2F, 0x00, 0x3E, 0x00, 0x5F, 0x00, 0x0A, 0x00, 0x33, 0x00, 0x06, 0x00, 0x43, 0x00, -/* 000171C0 */ 0x08, 0x00, 0x21, 0x00, 0x00, 0x3F, 0x5D, 0x08, 0xC1, 0x13, 0x8D, 0x25, 0x00, 0xFE, 0x7E, 0x04, -/* 000171D0 */ 0x18, 0xA0, 0x41, 0xD1, 0x00, 0x4E, 0xFE, 0x42, 0xC7, 0x08, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, -/* 000171E0 */ 0x01, 0xFE, 0x42, 0xC7, 0xFE, 0x09, 0x25, 0xFE, 0x09, 0x25, 0x03, 0xFE, 0x1F, 0x04, 0xFE, 0xF5, -/* 000171F0 */ 0x01, 0xFE, 0x86, 0x03, 0x0C, 0x1A, 0x22, 0x09, 0xE4, 0xDE, 0x02, 0x12, 0x09, 0x0B, 0x0B, 0x0B, -/* 00017200 */ 0x0B, 0x08, 0x1F, 0x20, 0x21, 0x08, 0x06, 0xFE, 0x3D, 0x03, 0x06, 0xFE, 0x20, 0x04, 0x05, 0xFE, -/* 00017210 */ 0x21, 0x04, 0x05, 0xFE, 0x22, 0x04, 0x05, 0xFE, 0x23, 0x04, 0x05, 0xFE, 0x24, 0x04, 0x05, 0xFE, -/* 00017220 */ 0x4A, 0x03, 0x06, 0xFE, 0x3F, 0x03, 0x06, 0xFE, 0x40, 0x03, 0x06, 0xFE, 0x4C, 0x03, 0x06, 0xFE, -/* 00017230 */ 0x42, 0x03, 0x0C, 0x06, 0xFE, 0x43, 0x03, 0x06, 0xFE, 0x44, 0x03, 0x0B, 0x07, 0x06, 0xFE, 0x0B, -/* 00017240 */ 0x04, 0x06, 0xFE, 0x0C, 0x04, 0x06, 0xFE, 0x0D, 0x04, 0x05, 0xFE, 0x25, 0x04, 0x06, 0xFE, 0x26, -/* 00017250 */ 0x04, 0x06, 0xFE, 0x8D, 0x03, 0x06, 0xFE, 0x27, 0x04, 0xFE, 0x12, 0x04, 0x4F, 0x1A, 0x4F, 0x1B, -/* 00017260 */ 0x4F, 0x1C, 0x4F, 0x1D, 0x4F, 0x1E, 0x4F, 0x22, 0x94, 0x02, 0x22, 0x4F, 0x22, 0x94, 0x03, 0x22, -/* 00017270 */ 0x4F, 0x22, 0x94, 0x04, 0x22, 0x8D, 0x02, 0x32, 0x22, 0x00, 0x00, 0x15, 0x03, 0x00, 0x22, 0x03, -/* 00017280 */ 0x09, 0x13, 0x00, 0x8D, 0x02, 0x32, 0x22, 0x00, 0x00, 0x15, 0x03, 0x00, 0x22, 0x04, 0x09, 0x05, -/* 00017290 */ 0x00, 0xA6, 0x00, 0x09, 0xD6, 0x03, 0xD3, 0x00, 0x22, 0x94, 0x02, 0x22, 0x8D, 0x02, 0x03, 0x23, -/* 000172A0 */ 0x01, 0x00, 0x6B, 0x22, 0x23, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x23, 0x8D, 0x02, 0x23, 0x24, -/* 000172B0 */ 0x02, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x05, 0x01, 0x00, 0xD3, 0x01, 0x25, -/* 000172C0 */ 0x5B, 0x02, 0x25, 0x01, 0x00, 0xEE, 0x03, 0x24, 0x24, 0x01, 0x00, 0x5B, 0x01, 0x24, 0x00, 0x00, -/* 000172D0 */ 0x8D, 0x02, 0x36, 0x24, 0x03, 0x00, 0x4B, 0x24, 0x60, 0x24, 0x24, 0x01, 0x5B, 0x02, 0x24, 0x00, -/* 000172E0 */ 0x00, 0xF2, 0x03, 0xFF, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8D, 0x02, 0x32, 0x22, 0x00, -/* 000172F0 */ 0x00, 0x14, 0x03, 0x00, 0x22, 0x04, 0x09, 0x05, 0x00, 0xA6, 0x00, 0x09, 0x6E, 0x03, 0x8D, 0x02, -/* 00017300 */ 0x23, 0x22, 0x02, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x06, 0x02, 0x00, 0xD3, -/* 00017310 */ 0x02, 0x23, 0x5B, 0x02, 0x23, 0x02, 0x00, 0xEE, 0x03, 0x22, 0x22, 0x02, 0x00, 0x47, 0x1A, 0x22, -/* 00017320 */ 0x8D, 0x02, 0x23, 0x22, 0x02, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x07, 0x03, -/* 00017330 */ 0x00, 0xD3, 0x03, 0x23, 0x5B, 0x02, 0x23, 0x03, 0x00, 0xEE, 0x03, 0x22, 0x22, 0x03, 0x00, 0x94, -/* 00017340 */ 0x03, 0x22, 0x8D, 0x02, 0x23, 0x22, 0x02, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, -/* 00017350 */ 0x08, 0x04, 0x00, 0xD3, 0x04, 0x23, 0x5B, 0x02, 0x23, 0x04, 0x00, 0xEE, 0x03, 0x22, 0x22, 0x04, -/* 00017360 */ 0x00, 0x47, 0x1B, 0x22, 0x94, 0x04, 0x09, 0x8D, 0x02, 0x23, 0x22, 0x02, 0x00, 0x07, 0x03, 0x00, -/* 00017370 */ 0x5A, 0x00, 0x02, 0x91, 0x04, 0x23, 0x04, 0x00, 0x5B, 0x01, 0x23, 0x05, 0x00, 0xD3, 0x05, 0x23, -/* 00017380 */ 0x5B, 0x02, 0x23, 0x05, 0x00, 0xEE, 0x03, 0x22, 0x22, 0x05, 0x00, 0x47, 0x1C, 0x22, 0x8D, 0x02, -/* 00017390 */ 0x37, 0x23, 0x05, 0x00, 0x4B, 0x23, 0x6B, 0x22, 0x23, 0x02, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x23, -/* 000173A0 */ 0x5B, 0x01, 0x1C, 0x06, 0x00, 0x8D, 0x01, 0x16, 0x24, 0x06, 0x00, 0x4B, 0x24, 0x5B, 0x02, 0x24, -/* 000173B0 */ 0x06, 0x00, 0xF2, 0x03, 0x22, 0x22, 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, 0x47, 0x1D, 0x22, 0x8D, -/* 000173C0 */ 0x02, 0x37, 0x23, 0x05, 0x00, 0x4B, 0x23, 0x6B, 0x22, 0x23, 0x03, 0x07, 0x04, 0x00, 0x5A, 0x00, -/* 000173D0 */ 0x23, 0x5B, 0x01, 0x1D, 0x07, 0x00, 0x5B, 0x02, 0x0A, 0x07, 0x00, 0xCB, 0x00, 0x00, 0x00, 0x00, -/* 000173E0 */ 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x79, 0x0C, 0x24, 0x04, 0x79, 0x0E, 0x24, 0x05, -/* 000173F0 */ 0x79, 0x0E, 0x24, 0x06, 0x79, 0x11, 0x24, 0x07, 0x5B, 0x03, 0x24, 0x07, 0x00, 0xF2, 0x04, 0xFF, -/* 00017400 */ 0x22, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x8D, 0x02, 0x37, 0x23, 0x05, 0x00, 0x4B, 0x23, 0x6B, -/* 00017410 */ 0x22, 0x23, 0x03, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x23, 0x5B, 0x01, 0x1A, 0x08, 0x00, 0x5B, 0x02, -/* 00017420 */ 0x0C, 0x08, 0x00, 0xCB, 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, -/* 00017430 */ 0x79, 0x1D, 0x24, 0x04, 0x79, 0x11, 0x24, 0x05, 0x79, 0x0E, 0x24, 0x06, 0x79, 0x11, 0x24, 0x07, -/* 00017440 */ 0x5B, 0x03, 0x24, 0x08, 0x00, 0xF2, 0x04, 0xFF, 0x22, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x8D, -/* 00017450 */ 0x02, 0x37, 0x23, 0x05, 0x00, 0x4B, 0x23, 0x6B, 0x22, 0x23, 0x03, 0x07, 0x04, 0x00, 0x5A, 0x00, -/* 00017460 */ 0x23, 0x5B, 0x01, 0x1A, 0x09, 0x00, 0x5B, 0x02, 0x13, 0x09, 0x00, 0xCB, 0x30, 0x00, 0x00, 0x00, -/* 00017470 */ 0x02, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x07, 0x01, 0x00, 0xC2, 0x01, 0x25, 0x1A, 0x0A, -/* 00017480 */ 0x00, 0x79, 0x25, 0x24, 0x04, 0x79, 0x0E, 0x24, 0x05, 0x79, 0x0E, 0x24, 0x06, 0x79, 0x0E, 0x24, -/* 00017490 */ 0x07, 0x5B, 0x03, 0x24, 0x09, 0x00, 0xF2, 0x04, 0xFF, 0x22, 0x03, 0x00, 0x00, 0x00, 0x09, 0x00, -/* 000174A0 */ 0x8D, 0x02, 0x04, 0x22, 0x07, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x60, 0x23, 0x1A, 0x08, -/* 000174B0 */ 0x5B, 0x01, 0x23, 0x0B, 0x00, 0x8D, 0x02, 0x08, 0x23, 0x08, 0x00, 0x60, 0x23, 0x23, 0x09, 0x5B, -/* 000174C0 */ 0x02, 0x23, 0x0B, 0x00, 0xEE, 0x03, 0xFF, 0x22, 0x0B, 0x00, 0x8D, 0x02, 0x37, 0x23, 0x05, 0x00, -/* 000174D0 */ 0x4B, 0x23, 0x6B, 0x22, 0x23, 0x03, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x23, 0x60, 0x24, 0x1A, 0x08, -/* 000174E0 */ 0x5B, 0x01, 0x24, 0x0C, 0x00, 0x5B, 0x02, 0x14, 0x0C, 0x00, 0xCB, 0x48, 0x00, 0x00, 0x00, 0x03, -/* 000174F0 */ 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x79, 0x1A, 0x24, 0x04, 0x79, 0x11, 0x24, 0x05, 0x79, -/* 00017500 */ 0x0E, 0x24, 0x06, 0x79, 0x11, 0x24, 0x07, 0x5B, 0x03, 0x24, 0x0C, 0x00, 0xF2, 0x04, 0xFF, 0x22, -/* 00017510 */ 0x03, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x8D, 0x02, 0x37, 0x23, 0x05, 0x00, 0x4B, 0x23, 0x6B, 0x22, -/* 00017520 */ 0x23, 0x03, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x23, 0x60, 0x24, 0x1A, 0x08, 0x5B, 0x01, 0x24, 0x0D, -/* 00017530 */ 0x00, 0x5B, 0x02, 0x15, 0x0D, 0x00, 0xCB, 0x60, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x24, -/* 00017540 */ 0x00, 0x00, 0x00, 0xD6, 0x06, 0x25, 0x24, 0x79, 0x25, 0x24, 0x04, 0x79, 0x11, 0x24, 0x05, 0x79, -/* 00017550 */ 0x0E, 0x24, 0x06, 0x79, 0x11, 0x24, 0x07, 0x5B, 0x03, 0x24, 0x0D, 0x00, 0xF2, 0x04, 0xFF, 0x22, -/* 00017560 */ 0x03, 0x00, 0x00, 0x00, 0x0D, 0x00, 0xD3, 0x07, 0x22, 0x47, 0x1E, 0x22, 0x8D, 0x02, 0x37, 0x23, -/* 00017570 */ 0x05, 0x00, 0x4B, 0x23, 0x6B, 0x22, 0x23, 0x03, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x23, 0x5B, 0x01, -/* 00017580 */ 0x1E, 0x0E, 0x00, 0x5B, 0x02, 0x0A, 0x0E, 0x00, 0xCB, 0x78, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, -/* 00017590 */ 0x00, 0x24, 0x00, 0x00, 0x00, 0x79, 0x16, 0x24, 0x04, 0x79, 0x0E, 0x24, 0x05, 0x79, 0x0E, 0x24, -/* 000175A0 */ 0x06, 0x79, 0x11, 0x24, 0x07, 0x5B, 0x03, 0x24, 0x0E, 0x00, 0xF2, 0x04, 0xFF, 0x22, 0x03, 0x00, -/* 000175B0 */ 0x00, 0x00, 0x0E, 0x00, 0x8D, 0x02, 0x37, 0x23, 0x05, 0x00, 0x4B, 0x23, 0x6B, 0x22, 0x23, 0x03, -/* 000175C0 */ 0x07, 0x04, 0x00, 0x5A, 0x00, 0x23, 0x60, 0x24, 0x1A, 0x08, 0x5B, 0x01, 0x24, 0x0F, 0x00, 0x5B, -/* 000175D0 */ 0x02, 0x17, 0x0F, 0x00, 0xCB, 0x90, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, -/* 000175E0 */ 0x00, 0x8D, 0x02, 0x23, 0x25, 0x02, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x16, -/* 000175F0 */ 0x10, 0x00, 0x5B, 0x02, 0x1E, 0x10, 0x00, 0xEE, 0x03, 0x25, 0x25, 0x10, 0x00, 0x79, 0x25, 0x24, -/* 00017600 */ 0x0A, 0x79, 0x0E, 0x24, 0x06, 0x79, 0x11, 0x24, 0x07, 0x5B, 0x03, 0x24, 0x0F, 0x00, 0xF2, 0x04, -/* 00017610 */ 0xFF, 0x22, 0x03, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x8D, 0x02, 0x37, 0x23, 0x05, 0x00, 0x4B, 0x23, -/* 00017620 */ 0x6B, 0x22, 0x23, 0x03, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x23, 0x60, 0x24, 0x1A, 0x08, 0x5B, 0x01, -/* 00017630 */ 0x24, 0x11, 0x00, 0x5B, 0x02, 0x19, 0x11, 0x00, 0xCB, 0xA4, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, -/* 00017640 */ 0x00, 0x24, 0x00, 0x00, 0x00, 0x79, 0x1B, 0x24, 0x04, 0x79, 0x0E, 0x24, 0x06, 0x79, 0x11, 0x24, -/* 00017650 */ 0x07, 0x79, 0x11, 0x24, 0x05, 0x5B, 0x03, 0x24, 0x11, 0x00, 0xF2, 0x04, 0xFF, 0x22, 0x03, 0x00, -/* 00017660 */ 0x00, 0x00, 0x11, 0x00, 0x47, 0x00, 0x1A, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x08, 0xBC, -/* 00017670 */ 0x00, 0xA4, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, -/* 00017680 */ 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x90, 0x00, 0x00, -/* 00017690 */ 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, -/* 000176A0 */ 0x00, 0x81, 0x01, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 000176B0 */ 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, -/* 000176C0 */ 0x00, 0x60, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, -/* 000176D0 */ 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x48, 0x00, 0x00, -/* 000176E0 */ 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, -/* 000176F0 */ 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, -/* 00017700 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, -/* 00017710 */ 0x00, 0x81, 0x01, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 00017720 */ 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, -/* 00017730 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, -/* 00017740 */ 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0xFE, 0xEE, 0x01, -/* 00017750 */ 0xFE, 0x06, 0x03, 0x4D, 0xFE, 0x88, 0x01, 0xFE, 0x83, 0x01, 0xFE, 0x82, 0x01, 0xFE, 0x80, 0x01, -/* 00017760 */ 0xFE, 0x81, 0x01, 0xFE, 0x15, 0x01, 0xFE, 0x15, 0x01, 0xFE, 0x84, 0x01, 0xFE, 0x58, 0xC7, 0x18, -/* 00017770 */ 0x19, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x40, 0x00, 0x05, 0x00, 0x1B, 0x00, 0x06, 0x00, 0xD3, 0x09, -/* 00017780 */ 0x4F, 0x00, 0x80, 0x02, 0x0E, 0x00, 0x29, 0x00, 0x05, 0x00, 0x1B, 0x00, 0x22, 0x00, 0xA3, 0x03, -/* 00017790 */ 0x22, 0x00, 0xBA, 0x02, 0x22, 0x00, 0x10, 0x03, 0x03, 0x00, 0x5D, 0x00, 0x27, 0x00, 0x36, 0x01, -/* 000177A0 */ 0x31, 0x00, 0x77, 0x00, 0x48, 0x00, 0xD5, 0x00, 0x48, 0x00, 0xDB, 0x00, 0x51, 0x00, 0xC6, 0x00, -/* 000177B0 */ 0x2A, 0x00, 0x40, 0x00, 0x4C, 0x00, 0xCB, 0x00, 0x50, 0x00, 0xA0, 0x04, 0x06, 0x00, 0x04, 0x02, -/* 000177C0 */ 0x48, 0x00, 0xB7, 0x00, 0x64, 0x00, 0xC6, 0x00, 0x4C, 0x00, 0xCE, 0x00, 0x08, 0x00, 0x19, 0x00, -/* 000177D0 */ 0x00, 0x5B, 0x81, 0x01, 0x00, 0xF8, 0x7F, 0x01, 0x00, 0xD0, 0x7D, 0x01, 0x00, 0x76, 0x7C, 0x01, -/* 000177E0 */ 0x00, 0x1B, 0x7B, 0x01, 0x00, 0x81, 0x7A, 0x01, 0x00, 0xF7, 0x78, 0x01, 0x00, 0xF1, 0x77, 0x01, -/* 000177F0 */ 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x3F, 0x05, 0x1A, 0xA0, 0x41, 0xC1, -/* 00017800 */ 0x00, 0xFE, 0x36, 0x04, 0x56, 0xFE, 0xF4, 0xE7, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, -/* 00017810 */ 0xF4, 0xE7, 0xFE, 0xE8, 0x01, 0xFE, 0xE8, 0x01, 0x01, 0x05, 0x05, 0x08, 0x04, 0x24, 0x23, 0x03, -/* 00017820 */ 0x03, 0x01, 0x04, 0x04, 0x04, 0x04, 0x07, 0x06, 0xFE, 0xF6, 0x03, 0x05, 0xFE, 0x32, 0x04, 0x06, -/* 00017830 */ 0xFE, 0x46, 0x03, 0x96, 0x59, 0x08, 0xB2, 0x05, 0x08, 0x4F, 0x06, 0x2C, 0x08, 0x05, 0x15, 0x03, -/* 00017840 */ 0x00, 0x08, 0x02, 0x09, 0x24, 0x00, 0x8D, 0x03, 0x03, 0x09, 0x00, 0x00, 0x6B, 0x08, 0x09, 0x00, -/* 00017850 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x09, 0x5B, 0x01, 0x03, 0x00, 0x00, 0x5B, 0x02, 0x04, 0x00, 0x00, -/* 00017860 */ 0xF2, 0x03, 0xFF, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8D, 0x03, 0x03, 0x09, 0x00, 0x00, -/* 00017870 */ 0x6B, 0x08, 0x09, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x09, 0x5B, 0x01, 0x05, 0x01, 0x00, 0xF2, -/* 00017880 */ 0x02, 0x08, 0x08, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x06, 0x08, 0xA6, 0x08, 0x14, 0x08, -/* 00017890 */ 0x00, 0x06, 0x08, 0x60, 0x08, 0x06, 0x02, 0x0F, 0x24, 0x00, 0x08, 0x8D, 0x03, 0x03, 0x09, 0x00, -/* 000178A0 */ 0x00, 0x6B, 0x08, 0x09, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x09, 0x5B, 0x01, 0x03, 0x02, 0x00, -/* 000178B0 */ 0x5B, 0x02, 0x04, 0x02, 0x00, 0xF2, 0x03, 0xFF, 0x08, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x60, -/* 000178C0 */ 0x00, 0x06, 0x03, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x8A, 0x02, 0xFE, 0xEF, 0x01, -/* 000178D0 */ 0xFE, 0x30, 0x04, 0xFE, 0x31, 0x04, 0xFE, 0x0E, 0xE8, 0x07, 0x07, 0x00, 0x00, 0x00, 0x0B, 0x00, -/* 000178E0 */ 0x30, 0x00, 0x24, 0x00, 0x6C, 0x00, 0x22, 0x00, 0x41, 0x00, 0x0F, 0x00, 0x5B, 0x00, 0x24, 0x00, -/* 000178F0 */ 0x6C, 0x00, 0x09, 0x00, 0x29, 0x00, 0x00, 0xBF, 0x5C, 0x18, 0xC1, 0x03, 0x88, 0x03, 0x00, 0xFE, -/* 00017900 */ 0x2A, 0x05, 0x13, 0xA0, 0x41, 0xC3, 0x00, 0xFE, 0x0D, 0x04, 0x55, 0xFF, 0x00, 0x00, 0x00, 0x02, -/* 00017910 */ 0xFE, 0x93, 0xE3, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0x93, 0xE3, 0xFE, 0x61, 0x03, -/* 00017920 */ 0xFE, 0x61, 0x03, 0x01, 0x06, 0x11, 0x15, 0x04, 0x38, 0x36, 0x03, 0x04, 0x01, 0x02, 0x03, 0x03, -/* 00017930 */ 0x03, 0x03, 0x14, 0x06, 0xFE, 0xF6, 0x03, 0x05, 0xFE, 0x34, 0x04, 0x06, 0xFE, 0x46, 0x03, 0x06, -/* 00017940 */ 0xFE, 0xF7, 0x03, 0x06, 0xFE, 0x35, 0x04, 0x06, 0xFE, 0x28, 0x04, 0x06, 0xFE, 0x2B, 0x04, 0x06, -/* 00017950 */ 0xFE, 0x2C, 0x04, 0x06, 0xFE, 0xFA, 0x03, 0x06, 0xFE, 0xFB, 0x03, 0x06, 0xFE, 0xFC, 0x03, 0x06, -/* 00017960 */ 0xFE, 0xFD, 0x03, 0x06, 0xFE, 0xFE, 0x03, 0x06, 0xFE, 0x2F, 0x04, 0x08, 0xE6, 0x59, 0x15, 0xB2, -/* 00017970 */ 0x11, 0x15, 0x4F, 0x12, 0x4F, 0x13, 0x2C, 0x15, 0x11, 0x15, 0x03, 0x00, 0x15, 0x02, 0x09, 0x24, -/* 00017980 */ 0x00, 0x8D, 0x03, 0x03, 0x16, 0x00, 0x00, 0x6B, 0x15, 0x16, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, -/* 00017990 */ 0x16, 0x5B, 0x01, 0x03, 0x00, 0x00, 0x5B, 0x02, 0x04, 0x00, 0x00, 0xF2, 0x03, 0xFF, 0x15, 0x00, -/* 000179A0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x8D, 0x03, 0x03, 0x16, 0x00, 0x00, 0x6B, 0x15, 0x16, 0x01, 0x07, -/* 000179B0 */ 0x02, 0x00, 0x5A, 0x00, 0x16, 0x5B, 0x01, 0x11, 0x01, 0x00, 0xF2, 0x02, 0x15, 0x15, 0x01, 0x00, -/* 000179C0 */ 0x00, 0x00, 0x01, 0x00, 0x47, 0x12, 0x15, 0xA6, 0x15, 0x14, 0x08, 0x00, 0x12, 0x15, 0x60, 0x15, -/* 000179D0 */ 0x12, 0x02, 0x0F, 0x24, 0x00, 0x15, 0x8D, 0x03, 0x03, 0x16, 0x00, 0x00, 0x6B, 0x15, 0x16, 0x00, -/* 000179E0 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x16, 0x5B, 0x01, 0x03, 0x02, 0x00, 0x5B, 0x02, 0x04, 0x02, 0x00, -/* 000179F0 */ 0xF2, 0x03, 0xFF, 0x15, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xCD, 0x15, 0x0B, 0x00, 0x00, 0x9F, -/* 00017A00 */ 0x00, 0x05, 0x15, 0x9F, 0x01, 0x06, 0x15, 0x9F, 0x02, 0x07, 0x15, 0x9F, 0x03, 0x08, 0x15, 0x9F, -/* 00017A10 */ 0x04, 0x09, 0x15, 0x9F, 0x05, 0x0A, 0x15, 0x9F, 0x06, 0x0B, 0x15, 0x9F, 0x07, 0x0C, 0x15, 0x9F, -/* 00017A20 */ 0x08, 0x0D, 0x15, 0x9F, 0x09, 0x0E, 0x15, 0x9F, 0x0A, 0x0F, 0x15, 0x47, 0x13, 0x15, 0x8D, 0x02, -/* 00017A30 */ 0x19, 0x15, 0x01, 0x00, 0x4B, 0x15, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x10, 0x5B, 0x01, 0x13, 0x03, -/* 00017A40 */ 0x00, 0x5B, 0x02, 0x12, 0x03, 0x00, 0xEE, 0x03, 0x00, 0x15, 0x03, 0x00, 0x09, 0x02, 0x00, 0xA6, -/* 00017A50 */ 0x00, 0x24, 0x00, 0xFE, 0x8A, 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0x30, 0x04, 0xFE, 0xC0, 0xE3, 0x08, -/* 00017A60 */ 0x09, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x34, 0x00, 0x24, 0x00, 0x7C, 0x00, 0x22, 0x00, 0x45, 0x00, -/* 00017A70 */ 0x0F, 0x00, 0x5F, 0x00, 0x24, 0x00, 0x7D, 0x00, 0x34, 0x00, 0x21, 0x01, 0x23, 0x00, 0x41, 0x00, -/* 00017A80 */ 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x0A, 0x05, 0x6D, 0xA2, 0x41, 0xD1, -/* 00017A90 */ 0x00, 0x54, 0xFE, 0x79, 0xDE, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x02, 0xFE, 0x79, 0xDE, 0xC6, -/* 00017AA0 */ 0xC6, 0x01, 0x06, 0x03, 0x07, 0x07, 0x17, 0x16, 0x03, 0x01, 0x03, 0x01, 0x01, 0x01, 0x01, 0x06, -/* 00017AB0 */ 0x08, 0x55, 0x59, 0x07, 0xB2, 0x05, 0x07, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA6, 0x07, 0x47, 0x04, -/* 00017AC0 */ 0x07, 0x8D, 0x02, 0x17, 0x07, 0x00, 0x00, 0x4B, 0x07, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x02, 0x5B, -/* 00017AD0 */ 0x01, 0x05, 0x00, 0x00, 0x8D, 0x01, 0x04, 0x08, 0x01, 0x00, 0x4B, 0x08, 0x5B, 0x02, 0x08, 0x00, -/* 00017AE0 */ 0x00, 0x8D, 0x03, 0x03, 0x08, 0x02, 0x00, 0x60, 0x08, 0x08, 0x00, 0x5B, 0x03, 0x08, 0x00, 0x00, -/* 00017AF0 */ 0x5B, 0x04, 0x03, 0x00, 0x00, 0x5B, 0x05, 0x04, 0x00, 0x00, 0xEE, 0x06, 0x00, 0x07, 0x00, 0x00, -/* 00017B00 */ 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xDB, 0x01, 0xFE, 0x8C, 0xDE, 0x03, 0x05, 0x00, -/* 00017B10 */ 0x00, 0x00, 0x0A, 0x00, 0x23, 0x00, 0x44, 0x00, 0x8F, 0x00, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, -/* 00017B20 */ 0x88, 0x01, 0x00, 0xFE, 0xF9, 0x04, 0x5D, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x27, 0x04, 0x53, 0xFE, -/* 00017B30 */ 0xFC, 0xDA, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0xFC, 0xDA, 0xFE, 0x7B, 0x02, 0xFE, -/* 00017B40 */ 0x7B, 0x02, 0x01, 0x06, 0x07, 0x0B, 0x06, 0x33, 0x31, 0x03, 0x05, 0x02, 0x05, 0x05, 0x05, 0x05, -/* 00017B50 */ 0x0A, 0x06, 0xFE, 0xF6, 0x03, 0x05, 0xFE, 0x33, 0x04, 0x06, 0xFE, 0x46, 0x03, 0x0B, 0x0C, 0xE2, -/* 00017B60 */ 0x59, 0x0B, 0xB2, 0x08, 0x0B, 0x4F, 0x09, 0x8D, 0x03, 0x24, 0x0C, 0x00, 0x00, 0x6B, 0x0B, 0x0C, -/* 00017B70 */ 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x07, 0x00, 0x00, 0xF2, 0x02, 0x0B, 0x0B, -/* 00017B80 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x07, 0x0B, 0x2C, 0x0B, 0x08, 0x15, 0x03, 0x00, 0x0B, -/* 00017B90 */ 0x02, 0x09, 0x24, 0x00, 0x8D, 0x03, 0x03, 0x0C, 0x01, 0x00, 0x6B, 0x0B, 0x0C, 0x01, 0x07, 0x03, -/* 00017BA0 */ 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x03, 0x01, 0x00, 0x5B, 0x02, 0x04, 0x01, 0x00, 0xF2, 0x03, -/* 00017BB0 */ 0xFF, 0x0B, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x8D, 0x03, 0x03, 0x0C, 0x01, 0x00, 0x6B, 0x0B, -/* 00017BC0 */ 0x0C, 0x02, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x08, 0x02, 0x00, 0xF2, 0x02, 0x0B, -/* 00017BD0 */ 0x0B, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x47, 0x09, 0x0B, 0xA6, 0x0B, 0x14, 0x08, 0x00, 0x09, -/* 00017BE0 */ 0x0B, 0x60, 0x0B, 0x09, 0x03, 0x0F, 0x24, 0x00, 0x0B, 0x8D, 0x03, 0x03, 0x0C, 0x01, 0x00, 0x6B, -/* 00017BF0 */ 0x0B, 0x0C, 0x01, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x03, 0x03, 0x00, 0x5B, 0x02, -/* 00017C00 */ 0x04, 0x03, 0x00, 0xF2, 0x03, 0xFF, 0x0B, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x8D, 0x03, 0x03, -/* 00017C10 */ 0x0C, 0x01, 0x00, 0x6B, 0x0B, 0x0C, 0x04, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x07, -/* 00017C20 */ 0x04, 0x00, 0x5B, 0x02, 0x09, 0x04, 0x00, 0x5B, 0x03, 0x05, 0x04, 0x00, 0x5B, 0x04, 0x06, 0x04, -/* 00017C30 */ 0x00, 0xF2, 0x05, 0x00, 0x0B, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, -/* 00017C40 */ 0x24, 0x00, 0xFE, 0x38, 0x03, 0xFE, 0x8A, 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0x30, 0x04, 0xFE, 0xE2, -/* 00017C50 */ 0x01, 0xFE, 0x24, 0xDB, 0x08, 0x07, 0x00, 0x00, 0x00, 0x22, 0x00, 0x27, 0x00, 0x0B, 0x00, 0x30, -/* 00017C60 */ 0x00, 0x24, 0x00, 0x73, 0x00, 0x22, 0x00, 0x41, 0x00, 0x0F, 0x00, 0x5B, 0x00, 0x24, 0x00, 0x73, -/* 00017C70 */ 0x00, 0x33, 0x00, 0x79, 0x00, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0xEA, -/* 00017C80 */ 0x04, 0x4F, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x26, 0x04, 0x52, 0xFE, 0x34, 0xD8, 0xFF, 0x00, 0x10, -/* 00017C90 */ 0x01, 0x00, 0x02, 0x02, 0xFE, 0x34, 0xD8, 0xFE, 0x67, 0x02, 0xFE, 0x67, 0x02, 0x01, 0x06, 0x06, -/* 00017CA0 */ 0x0A, 0x06, 0x33, 0x31, 0x03, 0x05, 0x02, 0x05, 0x05, 0x05, 0x05, 0x09, 0x06, 0xFE, 0xF6, 0x03, -/* 00017CB0 */ 0x05, 0xFE, 0x32, 0x04, 0x06, 0xFE, 0x46, 0x03, 0x0C, 0xE2, 0x59, 0x0A, 0xB2, 0x07, 0x0A, 0x4F, -/* 00017CC0 */ 0x08, 0x8D, 0x03, 0x24, 0x0B, 0x00, 0x00, 0x6B, 0x0A, 0x0B, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 00017CD0 */ 0x0B, 0x5B, 0x01, 0x06, 0x00, 0x00, 0xF2, 0x02, 0x0A, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 00017CE0 */ 0x47, 0x06, 0x0A, 0x2C, 0x0A, 0x07, 0x15, 0x03, 0x00, 0x0A, 0x02, 0x09, 0x24, 0x00, 0x8D, 0x03, -/* 00017CF0 */ 0x03, 0x0B, 0x01, 0x00, 0x6B, 0x0A, 0x0B, 0x01, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0B, 0x5B, 0x01, -/* 00017D00 */ 0x03, 0x01, 0x00, 0x5B, 0x02, 0x04, 0x01, 0x00, 0xF2, 0x03, 0xFF, 0x0A, 0x01, 0x00, 0x00, 0x00, -/* 00017D10 */ 0x01, 0x00, 0x8D, 0x03, 0x03, 0x0B, 0x01, 0x00, 0x6B, 0x0A, 0x0B, 0x02, 0x07, 0x02, 0x00, 0x5A, -/* 00017D20 */ 0x00, 0x0B, 0x5B, 0x01, 0x07, 0x02, 0x00, 0xF2, 0x02, 0x0A, 0x0A, 0x02, 0x00, 0x00, 0x00, 0x02, -/* 00017D30 */ 0x00, 0x47, 0x08, 0x0A, 0xA6, 0x0A, 0x14, 0x08, 0x00, 0x08, 0x0A, 0x60, 0x0A, 0x08, 0x03, 0x0F, -/* 00017D40 */ 0x24, 0x00, 0x0A, 0x8D, 0x03, 0x03, 0x0B, 0x01, 0x00, 0x6B, 0x0A, 0x0B, 0x01, 0x07, 0x03, 0x00, -/* 00017D50 */ 0x5A, 0x00, 0x0B, 0x5B, 0x01, 0x03, 0x03, 0x00, 0x5B, 0x02, 0x04, 0x03, 0x00, 0xF2, 0x03, 0xFF, -/* 00017D60 */ 0x0A, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x8D, 0x03, 0x03, 0x0B, 0x01, 0x00, 0x6B, 0x0A, 0x0B, -/* 00017D70 */ 0x04, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x0B, 0x5B, 0x01, 0x06, 0x04, 0x00, 0x5B, 0x02, 0x08, 0x04, -/* 00017D80 */ 0x00, 0x5B, 0x03, 0x05, 0x04, 0x00, 0x5B, 0x04, 0x05, 0x04, 0x00, 0xF2, 0x05, 0x00, 0x0A, 0x04, -/* 00017D90 */ 0x00, 0x00, 0x00, 0x04, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x38, 0x03, 0xFE, -/* 00017DA0 */ 0x8A, 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0x30, 0x04, 0xFE, 0xE2, 0x01, 0xFE, 0x55, 0xD8, 0x08, 0x07, -/* 00017DB0 */ 0x00, 0x00, 0x00, 0x22, 0x00, 0x27, 0x00, 0x0B, 0x00, 0x30, 0x00, 0x24, 0x00, 0x6C, 0x00, 0x22, -/* 00017DC0 */ 0x00, 0x41, 0x00, 0x0F, 0x00, 0x5B, 0x00, 0x24, 0x00, 0x6C, 0x00, 0x33, 0x00, 0x7A, 0x00, 0x00, -/* 00017DD0 */ 0x3F, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0xD0, 0x04, 0x44, 0xA2, 0x41, 0xC3, 0x00, -/* 00017DE0 */ 0xFE, 0x46, 0x03, 0x51, 0xFE, 0x86, 0xD4, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x01, 0xFE, 0x86, -/* 00017DF0 */ 0xD4, 0xFE, 0x5B, 0x03, 0xFE, 0x5B, 0x03, 0x0B, 0x04, 0x0B, 0x05, 0x60, 0x59, 0x03, 0x09, 0x05, -/* 00017E00 */ 0x0A, 0x09, 0x0A, 0x0A, 0x0A, 0x08, 0x06, 0xFE, 0x46, 0x03, 0xFE, 0x90, 0x01, 0x59, 0x0B, 0xB2, -/* 00017E10 */ 0x06, 0x0B, 0xBD, 0x07, 0x4F, 0x08, 0x4F, 0x09, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA6, 0x0B, 0x47, -/* 00017E20 */ 0x04, 0x0B, 0x15, 0x05, 0x00, 0x05, 0x02, 0xA6, 0x0B, 0x47, 0x05, 0x0B, 0x4F, 0x08, 0x4F, 0x09, -/* 00017E30 */ 0x69, 0x09, 0x00, 0x00, 0x00, 0x0B, 0x14, 0x0A, 0x00, 0x06, 0x0B, 0xA6, 0x0B, 0x14, 0x03, 0x00, -/* 00017E40 */ 0x06, 0x0B, 0x09, 0x16, 0x00, 0x07, 0x03, 0x00, 0x5B, 0x01, 0x04, 0x00, 0x00, 0x5B, 0x02, 0x05, -/* 00017E50 */ 0x00, 0x00, 0xC2, 0x03, 0x00, 0x07, 0x00, 0x00, 0x09, 0x40, 0x01, 0x8D, 0x03, 0x24, 0x0C, 0x00, -/* 00017E60 */ 0x00, 0x6B, 0x0B, 0x0C, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x06, 0x01, 0x00, -/* 00017E70 */ 0xF2, 0x02, 0x0B, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x08, 0x0B, 0x8D, 0x03, 0x37, -/* 00017E80 */ 0x0C, 0x01, 0x00, 0x4B, 0x0C, 0x6B, 0x0B, 0x0C, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5B, -/* 00017E90 */ 0x01, 0x08, 0x02, 0x00, 0xF2, 0x02, 0x0B, 0x0B, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x0F, 0x1F, -/* 00017EA0 */ 0x00, 0x0B, 0x8D, 0x03, 0x03, 0x0C, 0x02, 0x00, 0x6B, 0x0B, 0x0C, 0x02, 0x07, 0x02, 0x00, 0x5A, -/* 00017EB0 */ 0x00, 0x0C, 0x5B, 0x01, 0x03, 0x03, 0x00, 0xF2, 0x02, 0xFF, 0x0B, 0x02, 0x00, 0x00, 0x00, 0x03, -/* 00017EC0 */ 0x00, 0x8D, 0x03, 0x03, 0x0C, 0x02, 0x00, 0x6B, 0x0B, 0x0C, 0x03, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 00017ED0 */ 0x0C, 0x5B, 0x01, 0x08, 0x04, 0x00, 0xF2, 0x02, 0x0B, 0x0B, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, -/* 00017EE0 */ 0x47, 0x09, 0x0B, 0xA6, 0x0B, 0x14, 0x03, 0x00, 0x09, 0x0B, 0x09, 0x43, 0x00, 0x8D, 0x03, 0x37, -/* 00017EF0 */ 0x0C, 0x01, 0x00, 0x4B, 0x0C, 0x6B, 0x0B, 0x0C, 0x04, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x0C, 0xF2, -/* 00017F00 */ 0x01, 0x0B, 0x0B, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x47, 0x09, 0x0B, 0x8D, 0x03, 0x03, 0x0C, -/* 00017F10 */ 0x02, 0x00, 0x6B, 0x0B, 0x0C, 0x05, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x08, 0x06, -/* 00017F20 */ 0x00, 0x5B, 0x02, 0x09, 0x06, 0x00, 0xF2, 0x03, 0xFF, 0x0B, 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, -/* 00017F30 */ 0x8D, 0x01, 0x02, 0x0B, 0x03, 0x00, 0x4B, 0x0B, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, -/* 00017F40 */ 0x09, 0x07, 0x00, 0x5B, 0x02, 0x04, 0x07, 0x00, 0x5B, 0x03, 0x05, 0x07, 0x00, 0xEE, 0x04, 0xFF, -/* 00017F50 */ 0x0B, 0x07, 0x00, 0x47, 0x0B, 0x09, 0x8D, 0x03, 0x37, 0x0D, 0x01, 0x00, 0x4B, 0x0D, 0x6B, 0x0C, -/* 00017F60 */ 0x0D, 0x06, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0D, 0x8D, 0x01, 0x03, 0x0E, 0x04, 0x00, 0x4B, 0x0E, -/* 00017F70 */ 0x5B, 0x01, 0x0E, 0x08, 0x00, 0x5B, 0x02, 0x08, 0x08, 0x00, 0xF2, 0x03, 0x0C, 0x0C, 0x06, 0x00, -/* 00017F80 */ 0x00, 0x00, 0x08, 0x00, 0x75, 0x0C, 0x0B, 0x07, 0x60, 0x0B, 0x09, 0x08, 0x80, 0x0B, 0x0B, 0xF8, -/* 00017F90 */ 0x00, 0xFA, 0x0B, 0x47, 0x00, 0x08, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x36, 0x03, -/* 00017FA0 */ 0xB0, 0xFE, 0x8E, 0x02, 0xFE, 0xEF, 0x01, 0x61, 0xFE, 0xF0, 0x01, 0x4D, 0xFE, 0x31, 0x04, 0xFE, -/* 00017FB0 */ 0x31, 0x04, 0xAB, 0xFE, 0x9C, 0xD4, 0x10, 0x0B, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0E, -/* 00017FC0 */ 0x00, 0x23, 0x00, 0x15, 0x00, 0x3B, 0x00, 0x16, 0x00, 0x46, 0x00, 0x22, 0x00, 0x32, 0x00, 0x25, -/* 00017FD0 */ 0x00, 0x2C, 0x00, 0x1F, 0x00, 0x83, 0x00, 0x22, 0x00, 0x3E, 0x00, 0x0A, 0x00, 0x32, 0x00, 0x1F, -/* 00017FE0 */ 0x00, 0x2B, 0x00, 0x24, 0x00, 0x48, 0x00, 0x23, 0x00, 0x45, 0x00, 0x35, 0x00, 0x3B, 0x00, 0x0B, -/* 00017FF0 */ 0x00, 0x33, 0x00, 0x08, 0x00, 0x14, 0x00, 0x00, 0xBF, 0x5C, 0x0A, 0xC1, 0x07, 0x88, 0x01, 0x00, -/* 00018000 */ 0xFE, 0xC0, 0x04, 0x5E, 0xA0, 0x41, 0xF1, 0x00, 0x50, 0xFE, 0xDC, 0xD1, 0xFF, 0x00, 0x10, 0x01, -/* 00018010 */ 0x00, 0x01, 0x01, 0xFE, 0xDC, 0xD1, 0xFE, 0xF1, 0x01, 0xFE, 0xF1, 0x01, 0x03, 0x07, 0x0B, 0x10, -/* 00018020 */ 0x06, 0x37, 0x35, 0x03, 0x02, 0x05, 0x05, 0x04, 0x04, 0x04, 0x04, 0x01, 0x0F, 0x07, 0x06, 0xFE, -/* 00018030 */ 0xC3, 0x03, 0x05, 0xFE, 0x21, 0x04, 0x06, 0xFE, 0x20, 0x04, 0x01, 0x00, 0x01, 0x01, 0x08, 0x0C, -/* 00018040 */ 0x0B, 0xEE, 0xAC, 0x0D, 0x59, 0x10, 0xB2, 0x0B, 0x10, 0x4F, 0x0C, 0x4F, 0x0E, 0x2C, 0x10, 0x0B, -/* 00018050 */ 0x15, 0x03, 0x00, 0x10, 0x03, 0x09, 0x33, 0x00, 0x8D, 0x03, 0x0A, 0x10, 0x00, 0x00, 0xE1, 0x10, -/* 00018060 */ 0x0B, 0x10, 0x00, 0x0F, 0x24, 0x00, 0x10, 0x8D, 0x03, 0x03, 0x11, 0x01, 0x00, 0x6B, 0x10, 0x11, -/* 00018070 */ 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x11, 0x5B, 0x01, 0x04, 0x00, 0x00, 0x5B, 0x02, 0x05, 0x00, -/* 00018080 */ 0x00, 0xF2, 0x03, 0xFF, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8D, 0x03, 0x37, 0x11, 0x02, -/* 00018090 */ 0x00, 0x4B, 0x11, 0x6B, 0x10, 0x11, 0x01, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x11, 0xF2, 0x01, 0x10, -/* 000180A0 */ 0x10, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x0C, 0x10, 0x8D, 0x01, 0x02, 0x10, 0x03, 0x00, -/* 000180B0 */ 0x4B, 0x10, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x08, 0x5B, 0x01, 0x0C, 0x02, 0x00, 0x96, 0x11, 0x0D, -/* 000180C0 */ 0x06, 0x00, 0x00, 0x5B, 0x02, 0x11, 0x02, 0x00, 0x96, 0x11, 0x0D, 0x07, 0x01, 0x00, 0x5B, 0x03, -/* 000180D0 */ 0x11, 0x02, 0x00, 0xEE, 0x04, 0xFF, 0x10, 0x02, 0x00, 0x8D, 0x03, 0x24, 0x11, 0x04, 0x00, 0x6B, -/* 000180E0 */ 0x10, 0x11, 0x02, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x11, 0x5B, 0x01, 0x0B, 0x03, 0x00, 0xF2, 0x02, -/* 000180F0 */ 0x10, 0x10, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x47, 0x0E, 0x10, 0x8D, 0x03, 0x03, 0x11, 0x01, -/* 00018100 */ 0x00, 0x6B, 0x10, 0x11, 0x03, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x11, 0x5B, 0x01, 0x0E, 0x04, 0x00, -/* 00018110 */ 0x5B, 0x02, 0x0C, 0x04, 0x00, 0x5B, 0x03, 0x09, 0x04, 0x00, 0x5B, 0x04, 0x0A, 0x04, 0x00, 0xF2, -/* 00018120 */ 0x05, 0x00, 0x10, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, -/* 00018130 */ 0xFE, 0x8A, 0x02, 0x61, 0xFE, 0x38, 0x03, 0xFE, 0xE2, 0x01, 0xFE, 0xF6, 0xD1, 0x07, 0x0B, 0x00, -/* 00018140 */ 0x00, 0x00, 0x1A, 0x00, 0x4D, 0x00, 0x24, 0x00, 0x68, 0x00, 0x1F, 0x00, 0x2C, 0x00, 0x2F, 0x00, -/* 00018150 */ 0x4E, 0x00, 0x22, 0x00, 0x2F, 0x00, 0x33, 0x00, 0x78, 0x00, 0x00, 0xBF, 0x5C, 0x18, 0xC1, 0x03, -/* 00018160 */ 0x88, 0x01, 0x00, 0xFE, 0x83, 0x04, 0x27, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x1F, 0x04, 0x4F, 0xFE, -/* 00018170 */ 0xD2, 0xC7, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, 0xD2, 0xC7, 0xFE, 0xA9, 0x09, 0xFE, -/* 00018180 */ 0xA9, 0x09, 0x01, 0x12, 0x15, 0x23, 0x07, 0xFC, 0xE3, 0x03, 0x15, 0x04, 0x0B, 0x16, 0x16, 0x16, -/* 00018190 */ 0x16, 0x22, 0x08, 0x06, 0xFE, 0x00, 0x04, 0x06, 0xFE, 0xAD, 0x03, 0x05, 0xFE, 0xFF, 0x03, 0x05, -/* 000181A0 */ 0xFE, 0xBC, 0x03, 0x06, 0xFE, 0xB4, 0x03, 0x06, 0xFE, 0x28, 0x04, 0x05, 0xFE, 0x29, 0x04, 0x05, -/* 000181B0 */ 0xFE, 0x2A, 0x04, 0x06, 0xFE, 0x2B, 0x04, 0x01, 0x00, 0x06, 0xFE, 0x2C, 0x04, 0x05, 0xFE, 0x2D, -/* 000181C0 */ 0x04, 0x06, 0xFE, 0x2E, 0x04, 0x06, 0xFE, 0x3F, 0x03, 0x01, 0x03, 0x06, 0xFE, 0x2F, 0x04, 0x06, -/* 000181D0 */ 0xFE, 0xC2, 0x03, 0x0B, 0xFE, 0x0C, 0x04, 0x4F, 0x18, 0x4F, 0x19, 0x4F, 0x1A, 0x4F, 0x1B, 0x4F, -/* 000181E0 */ 0x1C, 0x4F, 0x1D, 0x4F, 0x1E, 0x4F, 0x1F, 0x4F, 0x20, 0x4F, 0x21, 0x8D, 0x02, 0x11, 0x23, 0x00, -/* 000181F0 */ 0x00, 0x4B, 0x23, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x16, 0x00, 0x00, 0xEE, 0x02, -/* 00018200 */ 0x23, 0x23, 0x00, 0x00, 0x47, 0x18, 0x23, 0xA6, 0x23, 0x14, 0x03, 0x00, 0x17, 0x23, 0x09, 0x22, -/* 00018210 */ 0x00, 0x8D, 0x03, 0x37, 0x25, 0x01, 0x00, 0x4B, 0x25, 0x6B, 0x24, 0x25, 0x00, 0x07, 0x01, 0x00, -/* 00018220 */ 0x5A, 0x00, 0x25, 0xF2, 0x01, 0x24, 0x24, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x23, 0x24, -/* 00018230 */ 0x09, 0x22, 0x00, 0x8D, 0x03, 0x24, 0x25, 0x02, 0x00, 0x6B, 0x24, 0x25, 0x01, 0x07, 0x02, 0x00, -/* 00018240 */ 0x5A, 0x00, 0x25, 0x5B, 0x01, 0x17, 0x02, 0x00, 0xF2, 0x02, 0x24, 0x24, 0x01, 0x00, 0x00, 0x00, -/* 00018250 */ 0x02, 0x00, 0x47, 0x23, 0x24, 0x47, 0x17, 0x23, 0x8D, 0x03, 0x37, 0x24, 0x01, 0x00, 0x4B, 0x24, -/* 00018260 */ 0x6B, 0x23, 0x24, 0x02, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x24, 0xF2, 0x01, 0x23, 0x23, 0x02, 0x00, -/* 00018270 */ 0x00, 0x00, 0x03, 0x00, 0x47, 0x19, 0x23, 0x47, 0x23, 0x19, 0x8D, 0x02, 0x02, 0x24, 0x03, 0x00, -/* 00018280 */ 0x4B, 0x24, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x17, 0x04, 0x00, 0x5B, 0x02, 0x03, -/* 00018290 */ 0x04, 0x00, 0x5B, 0x03, 0x04, 0x04, 0x00, 0xCD, 0x25, 0x02, 0x00, 0x00, 0x9F, 0x00, 0x05, 0x25, -/* 000182A0 */ 0x9F, 0x01, 0x06, 0x25, 0x5B, 0x04, 0x25, 0x04, 0x00, 0x5B, 0x05, 0x05, 0x04, 0x00, 0xEE, 0x06, -/* 000182B0 */ 0x24, 0x24, 0x04, 0x00, 0x75, 0x24, 0x23, 0x03, 0x8D, 0x02, 0x0B, 0x23, 0x04, 0x00, 0x4B, 0x23, -/* 000182C0 */ 0x07, 0x05, 0x00, 0x5A, 0x00, 0x02, 0x8D, 0x03, 0x03, 0x24, 0x05, 0x00, 0x60, 0x24, 0x24, 0x04, -/* 000182D0 */ 0x5B, 0x01, 0x24, 0x05, 0x00, 0x5B, 0x02, 0x18, 0x05, 0x00, 0x5B, 0x03, 0x19, 0x05, 0x00, 0xCD, -/* 000182E0 */ 0x24, 0x01, 0x01, 0x00, 0x9F, 0x00, 0x07, 0x24, 0x5B, 0x04, 0x24, 0x05, 0x00, 0xEE, 0x05, 0x23, -/* 000182F0 */ 0x23, 0x05, 0x00, 0x47, 0x1A, 0x23, 0x60, 0x23, 0x1A, 0x05, 0x75, 0x23, 0x15, 0x06, 0x60, 0x23, -/* 00018300 */ 0x1A, 0x07, 0x75, 0x23, 0x15, 0x08, 0x8D, 0x02, 0x02, 0x23, 0x03, 0x00, 0x4B, 0x23, 0x07, 0x06, -/* 00018310 */ 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x17, 0x06, 0x00, 0x5B, 0x02, 0x08, 0x06, 0x00, 0x5B, 0x03, -/* 00018320 */ 0x04, 0x06, 0x00, 0xCD, 0x24, 0x03, 0x02, 0x00, 0x9F, 0x00, 0x09, 0x24, 0x9F, 0x01, 0x0A, 0x24, -/* 00018330 */ 0x9F, 0x02, 0x0B, 0x24, 0x5B, 0x04, 0x24, 0x06, 0x00, 0x5B, 0x05, 0x09, 0x06, 0x00, 0xEE, 0x06, -/* 00018340 */ 0x23, 0x23, 0x06, 0x00, 0x47, 0x1B, 0x23, 0x75, 0x1B, 0x15, 0x09, 0x47, 0x23, 0x15, 0x8D, 0x03, -/* 00018350 */ 0x3D, 0x24, 0x06, 0x00, 0x4B, 0x24, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x8D, 0x03, 0x3B, 0x25, -/* 00018360 */ 0x07, 0x00, 0x4B, 0x25, 0x5B, 0x01, 0x25, 0x07, 0x00, 0x8D, 0x03, 0x37, 0x26, 0x01, 0x00, 0x4B, -/* 00018370 */ 0x26, 0x6B, 0x25, 0x26, 0x0A, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x26, 0x5B, 0x01, 0x1B, 0x08, 0x00, -/* 00018380 */ 0xF2, 0x02, 0x25, 0x25, 0x0A, 0x00, 0x00, 0x00, 0x08, 0x00, 0x5B, 0x02, 0x25, 0x07, 0x00, 0xEE, -/* 00018390 */ 0x03, 0x24, 0x24, 0x07, 0x00, 0x75, 0x24, 0x23, 0x0B, 0x43, 0x23, 0x1B, 0x0B, 0x47, 0x1C, 0x23, -/* 000183A0 */ 0x8D, 0x02, 0x02, 0x23, 0x03, 0x00, 0x4B, 0x23, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, -/* 000183B0 */ 0x17, 0x09, 0x00, 0x5B, 0x02, 0x0B, 0x09, 0x00, 0x5B, 0x03, 0x04, 0x09, 0x00, 0xA6, 0x24, 0x5B, -/* 000183C0 */ 0x04, 0x24, 0x09, 0x00, 0xA6, 0x24, 0x5B, 0x05, 0x24, 0x09, 0x00, 0xEE, 0x06, 0x23, 0x23, 0x09, -/* 000183D0 */ 0x00, 0x47, 0x1D, 0x23, 0xA6, 0x23, 0x15, 0x03, 0x00, 0x1D, 0x23, 0x09, 0x3F, 0x00, 0x8D, 0x02, -/* 000183E0 */ 0x0F, 0x23, 0x08, 0x00, 0x4B, 0x23, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x1D, 0x0A, -/* 000183F0 */ 0x00, 0xEE, 0x02, 0x23, 0x23, 0x0A, 0x00, 0x0F, 0x22, 0x00, 0x23, 0x8D, 0x03, 0x03, 0x24, 0x05, -/* 00018400 */ 0x00, 0x6B, 0x23, 0x24, 0x0C, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x24, 0x5B, 0x01, 0x1D, 0x0B, 0x00, -/* 00018410 */ 0xF2, 0x02, 0xFF, 0x23, 0x0C, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x09, 0x28, 0x00, 0xA6, 0x23, 0x14, -/* 00018420 */ 0x03, 0x00, 0x1D, 0x23, 0x09, 0x1E, 0x00, 0x0E, 0x1A, 0x00, 0x1C, 0x8D, 0x03, 0x03, 0x24, 0x05, -/* 00018430 */ 0x00, 0x6B, 0x23, 0x24, 0x0D, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x24, 0xF2, 0x01, 0xFF, 0x23, 0x0D, -/* 00018440 */ 0x00, 0x00, 0x00, 0x0C, 0x00, 0x47, 0x1E, 0x0C, 0x0E, 0x4A, 0x00, 0x1C, 0x8D, 0x03, 0x37, 0x24, -/* 00018450 */ 0x01, 0x00, 0x4B, 0x24, 0x6B, 0x23, 0x24, 0x0E, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x24, 0x5B, 0x01, -/* 00018460 */ 0x1D, 0x0D, 0x00, 0xF2, 0x02, 0x23, 0x23, 0x0E, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x47, 0x1D, 0x23, -/* 00018470 */ 0x75, 0x1D, 0x15, 0x0F, 0x8D, 0x03, 0x03, 0x24, 0x05, 0x00, 0x6B, 0x23, 0x24, 0x10, 0x07, 0x02, -/* 00018480 */ 0x00, 0x5A, 0x00, 0x24, 0x5B, 0x01, 0x1D, 0x0E, 0x00, 0xF2, 0x02, 0x23, 0x23, 0x10, 0x00, 0x00, -/* 00018490 */ 0x00, 0x0E, 0x00, 0x47, 0x1E, 0x23, 0x8D, 0x02, 0x02, 0x23, 0x03, 0x00, 0x4B, 0x23, 0x07, 0x06, -/* 000184A0 */ 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x17, 0x0F, 0x00, 0x5B, 0x02, 0x0D, 0x0F, 0x00, 0x5B, 0x03, -/* 000184B0 */ 0x04, 0x0F, 0x00, 0xCD, 0x24, 0x03, 0x03, 0x00, 0x9F, 0x00, 0x0E, 0x24, 0x9F, 0x01, 0x0F, 0x24, -/* 000184C0 */ 0x9F, 0x02, 0x10, 0x24, 0x5B, 0x04, 0x24, 0x0F, 0x00, 0x5B, 0x05, 0x0F, 0x0F, 0x00, 0xEE, 0x06, -/* 000184D0 */ 0x23, 0x23, 0x0F, 0x00, 0x47, 0x1F, 0x23, 0x0E, 0x52, 0x00, 0x1C, 0x75, 0x1F, 0x15, 0x11, 0x47, -/* 000184E0 */ 0x23, 0x15, 0x8D, 0x03, 0x3D, 0x24, 0x06, 0x00, 0x4B, 0x24, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, -/* 000184F0 */ 0x8D, 0x03, 0x3C, 0x25, 0x09, 0x00, 0x4B, 0x25, 0x5B, 0x01, 0x25, 0x10, 0x00, 0x8D, 0x03, 0x37, -/* 00018500 */ 0x26, 0x01, 0x00, 0x4B, 0x26, 0x6B, 0x25, 0x26, 0x0A, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x26, 0x5B, -/* 00018510 */ 0x01, 0x1F, 0x11, 0x00, 0xF2, 0x02, 0x25, 0x25, 0x0A, 0x00, 0x00, 0x00, 0x11, 0x00, 0x5B, 0x02, -/* 00018520 */ 0x25, 0x10, 0x00, 0xEE, 0x03, 0x24, 0x24, 0x10, 0x00, 0x75, 0x24, 0x23, 0x12, 0xA6, 0x23, 0x47, -/* 00018530 */ 0x20, 0x23, 0xA6, 0x23, 0x47, 0x21, 0x23, 0x0E, 0x09, 0x00, 0x1C, 0x47, 0x20, 0x1E, 0x47, 0x21, -/* 00018540 */ 0x1E, 0x09, 0x14, 0x00, 0x47, 0x20, 0x0C, 0x14, 0x03, 0x00, 0x1B, 0x0A, 0x09, 0x06, 0x00, 0x47, -/* 00018550 */ 0x21, 0x0C, 0x09, 0x03, 0x00, 0x47, 0x21, 0x11, 0x8D, 0x02, 0x14, 0x23, 0x0A, 0x00, 0x4B, 0x23, -/* 00018560 */ 0x07, 0x05, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x15, 0x12, 0x00, 0x5B, 0x02, 0x17, 0x12, 0x00, -/* 00018570 */ 0x5B, 0x03, 0x20, 0x12, 0x00, 0x5B, 0x04, 0x21, 0x12, 0x00, 0xEE, 0x05, 0xFF, 0x23, 0x12, 0x00, -/* 00018580 */ 0x47, 0x23, 0x15, 0x8D, 0x02, 0x02, 0x24, 0x03, 0x00, 0x4B, 0x24, 0x07, 0x06, 0x00, 0x5A, 0x00, -/* 00018590 */ 0x02, 0x5B, 0x01, 0x17, 0x13, 0x00, 0x5B, 0x02, 0x12, 0x13, 0x00, 0x5B, 0x03, 0x13, 0x13, 0x00, -/* 000185A0 */ 0xA6, 0x25, 0x5B, 0x04, 0x25, 0x13, 0x00, 0x5B, 0x05, 0x14, 0x13, 0x00, 0xEE, 0x06, 0x24, 0x24, -/* 000185B0 */ 0x13, 0x00, 0x75, 0x24, 0x23, 0x13, 0x75, 0x14, 0x15, 0x14, 0x8D, 0x03, 0x03, 0x24, 0x05, 0x00, -/* 000185C0 */ 0x6B, 0x23, 0x24, 0x15, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x24, 0x5B, 0x01, 0x15, 0x14, 0x00, 0xF2, -/* 000185D0 */ 0x02, 0xFF, 0x23, 0x15, 0x00, 0x00, 0x00, 0x14, 0x00, 0x47, 0x00, 0x15, 0x09, 0x02, 0x00, 0xA6, -/* 000185E0 */ 0x00, 0x24, 0x00, 0x61, 0xFE, 0x36, 0x03, 0x61, 0xFE, 0xF8, 0x01, 0xFE, 0xDB, 0x01, 0xFE, 0xF7, -/* 000185F0 */ 0x01, 0xFE, 0xF7, 0x01, 0xFE, 0xB4, 0x03, 0xFE, 0x18, 0x02, 0xFE, 0x28, 0x04, 0xFE, 0x69, 0x01, -/* 00018600 */ 0xFE, 0x12, 0x02, 0xFE, 0x85, 0x02, 0xFE, 0x88, 0x02, 0xFE, 0x69, 0x01, 0xFE, 0x0F, 0x02, 0xFE, -/* 00018610 */ 0xE5, 0x01, 0xFE, 0x10, 0x02, 0xFE, 0x11, 0x02, 0xFE, 0x19, 0x02, 0xFE, 0x30, 0x04, 0xFE, 0xE3, -/* 00018620 */ 0x01, 0xFE, 0x00, 0xC8, 0x28, 0x14, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x46, 0x00, 0x51, 0x00, 0x58, -/* 00018630 */ 0x00, 0x1F, 0x00, 0x24, 0x00, 0x41, 0x00, 0x74, 0x00, 0x3E, 0x00, 0x62, 0x00, 0x08, 0x00, 0x22, -/* 00018640 */ 0x00, 0x08, 0x00, 0x28, 0x00, 0x41, 0x00, 0x70, 0x00, 0x04, 0x00, 0x1E, 0x00, 0x4E, 0x00, 0x51, -/* 00018650 */ 0x00, 0x07, 0x00, 0x37, 0x00, 0x34, 0x00, 0x5B, 0x00, 0x27, 0x00, 0x55, 0x00, 0x22, 0x00, 0x40, -/* 00018660 */ 0x00, 0x0E, 0x00, 0x3D, 0x00, 0x1A, 0x00, 0x40, 0x00, 0x03, 0x00, 0x1D, 0x00, 0x04, 0x00, 0x23, -/* 00018670 */ 0x00, 0x24, 0x00, 0x34, 0x00, 0x04, 0x00, 0x28, 0x00, 0x22, 0x00, 0x48, 0x00, 0x41, 0x00, 0x79, -/* 00018680 */ 0x00, 0x04, 0x00, 0x23, 0x00, 0x04, 0x00, 0x35, 0x00, 0x4E, 0x00, 0x7A, 0x00, 0x05, 0x00, 0x11, -/* 00018690 */ 0x00, 0x05, 0x00, 0x19, 0x00, 0x04, 0x00, 0x23, 0x00, 0x03, 0x00, 0x27, 0x00, 0x06, 0x00, 0x3C, -/* 000186A0 */ 0x00, 0x03, 0x00, 0x21, 0x00, 0x08, 0x00, 0x2F, 0x00, 0x06, 0x00, 0x3E, 0x00, 0x03, 0x00, 0x3E, -/* 000186B0 */ 0x00, 0x28, 0x00, 0x51, 0x00, 0x36, 0x00, 0x5D, 0x00, 0x04, 0x00, 0x7C, 0x00, 0x1F, 0x00, 0x2D, -/* 000186C0 */ 0x00, 0x08, 0x00, 0x13, 0x00, 0x00, 0x3F, 0x5D, 0x08, 0xC1, 0x13, 0x8D, 0x25, 0x00, 0xFE, 0xB6, -/* 000186D0 */ 0x03, 0x16, 0xA0, 0x41, 0xD1, 0x00, 0x46, 0xFE, 0xD8, 0xA4, 0x07, 0xFF, 0x00, 0x10, 0x01, 0x00, -/* 000186E0 */ 0x01, 0x01, 0xFE, 0xD8, 0xA4, 0xFE, 0x12, 0x22, 0xFE, 0x12, 0x22, 0x04, 0xFE, 0x05, 0x04, 0xFE, -/* 000186F0 */ 0x06, 0x04, 0xFE, 0x1E, 0x02, 0xFE, 0x84, 0x03, 0x0B, 0x18, 0x1F, 0x09, 0xD0, 0xCB, 0x02, 0x10, -/* 00018700 */ 0x09, 0x0B, 0x0B, 0x0B, 0x0B, 0x07, 0x1C, 0x1D, 0x1E, 0x08, 0x06, 0xFE, 0x3D, 0x03, 0x06, 0xFE, -/* 00018710 */ 0x07, 0x04, 0x05, 0xFE, 0x08, 0x04, 0x05, 0xFE, 0x09, 0x04, 0x05, 0xFE, 0x0A, 0x04, 0x05, 0xFE, -/* 00018720 */ 0x49, 0x03, 0x06, 0xFE, 0x3F, 0x03, 0x06, 0xFE, 0x40, 0x03, 0x06, 0xFE, 0x4C, 0x03, 0x06, 0xFE, -/* 00018730 */ 0x42, 0x03, 0x0C, 0x06, 0xFE, 0x43, 0x03, 0x06, 0xFE, 0x44, 0x03, 0x0B, 0x07, 0x06, 0xFE, 0x0B, -/* 00018740 */ 0x04, 0x06, 0xFE, 0x0C, 0x04, 0x06, 0xFE, 0x0D, 0x04, 0x05, 0xFE, 0x0E, 0x04, 0x06, 0xFE, 0x0F, -/* 00018750 */ 0x04, 0x06, 0xFE, 0x8D, 0x03, 0xFE, 0xAC, 0x03, 0x4F, 0x18, 0x4F, 0x19, 0x4F, 0x1A, 0x4F, 0x1B, -/* 00018760 */ 0x4F, 0x1F, 0x94, 0x02, 0x1F, 0x4F, 0x1F, 0x94, 0x03, 0x1F, 0x4F, 0x1F, 0x94, 0x04, 0x1F, 0x4F, -/* 00018770 */ 0x1F, 0x94, 0x05, 0x1F, 0x8D, 0x02, 0x32, 0x1F, 0x00, 0x00, 0x15, 0x03, 0x00, 0x1F, 0x03, 0x09, -/* 00018780 */ 0x13, 0x00, 0x8D, 0x02, 0x32, 0x1F, 0x00, 0x00, 0x15, 0x03, 0x00, 0x1F, 0x04, 0x09, 0x05, 0x00, -/* 00018790 */ 0xA6, 0x00, 0x09, 0x6D, 0x03, 0xD3, 0x00, 0x1F, 0x94, 0x02, 0x1F, 0xA6, 0x1F, 0x94, 0x03, 0x1F, -/* 000187A0 */ 0x8D, 0x02, 0x03, 0x20, 0x01, 0x00, 0x6B, 0x1F, 0x20, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x20, -/* 000187B0 */ 0x8D, 0x02, 0x23, 0x21, 0x02, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x05, 0x01, -/* 000187C0 */ 0x00, 0xD3, 0x01, 0x22, 0x5B, 0x02, 0x22, 0x01, 0x00, 0xEE, 0x03, 0x21, 0x21, 0x01, 0x00, 0x5B, -/* 000187D0 */ 0x01, 0x21, 0x00, 0x00, 0x8D, 0x02, 0x36, 0x21, 0x03, 0x00, 0x4B, 0x21, 0x60, 0x21, 0x21, 0x01, -/* 000187E0 */ 0x5B, 0x02, 0x21, 0x00, 0x00, 0xF2, 0x03, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8D, -/* 000187F0 */ 0x02, 0x32, 0x1F, 0x00, 0x00, 0x14, 0x03, 0x00, 0x1F, 0x04, 0x09, 0x05, 0x00, 0xA6, 0x00, 0x09, -/* 00018800 */ 0x00, 0x03, 0x8D, 0x02, 0x23, 0x1F, 0x02, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, -/* 00018810 */ 0x06, 0x02, 0x00, 0xD3, 0x02, 0x20, 0x5B, 0x02, 0x20, 0x02, 0x00, 0xEE, 0x03, 0x1F, 0x1F, 0x02, -/* 00018820 */ 0x00, 0x47, 0x18, 0x1F, 0x8D, 0x02, 0x23, 0x1F, 0x02, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, -/* 00018830 */ 0x5B, 0x01, 0x07, 0x03, 0x00, 0xD3, 0x03, 0x20, 0x5B, 0x02, 0x20, 0x03, 0x00, 0xEE, 0x03, 0x1F, -/* 00018840 */ 0x1F, 0x03, 0x00, 0x94, 0x04, 0x1F, 0x94, 0x05, 0x08, 0x8D, 0x02, 0x23, 0x1F, 0x02, 0x00, 0x07, -/* 00018850 */ 0x03, 0x00, 0x5A, 0x00, 0x02, 0x91, 0x05, 0x20, 0x04, 0x00, 0x5B, 0x01, 0x20, 0x04, 0x00, 0xD3, -/* 00018860 */ 0x04, 0x20, 0x5B, 0x02, 0x20, 0x04, 0x00, 0xEE, 0x03, 0x1F, 0x1F, 0x04, 0x00, 0x47, 0x19, 0x1F, -/* 00018870 */ 0x8D, 0x02, 0x37, 0x20, 0x05, 0x00, 0x4B, 0x20, 0x6B, 0x1F, 0x20, 0x02, 0x07, 0x03, 0x00, 0x5A, -/* 00018880 */ 0x00, 0x20, 0x5B, 0x01, 0x19, 0x05, 0x00, 0x8D, 0x01, 0x16, 0x21, 0x06, 0x00, 0x4B, 0x21, 0x5B, -/* 00018890 */ 0x02, 0x21, 0x05, 0x00, 0xF2, 0x03, 0x1F, 0x1F, 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x47, 0x1A, -/* 000188A0 */ 0x1F, 0x8D, 0x02, 0x37, 0x20, 0x05, 0x00, 0x4B, 0x20, 0x6B, 0x1F, 0x20, 0x03, 0x07, 0x04, 0x00, -/* 000188B0 */ 0x5A, 0x00, 0x20, 0x5B, 0x01, 0x1A, 0x06, 0x00, 0x5B, 0x02, 0x09, 0x06, 0x00, 0xCB, 0x00, 0x00, -/* 000188C0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x79, 0x0B, 0x21, 0x04, 0x79, 0x0D, -/* 000188D0 */ 0x21, 0x05, 0x79, 0x0D, 0x21, 0x06, 0x79, 0x10, 0x21, 0x07, 0x5B, 0x03, 0x21, 0x06, 0x00, 0xF2, -/* 000188E0 */ 0x04, 0xFF, 0x1F, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x8D, 0x02, 0x37, 0x20, 0x05, 0x00, 0x4B, -/* 000188F0 */ 0x20, 0x6B, 0x1F, 0x20, 0x03, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x20, 0x5B, 0x01, 0x18, 0x07, 0x00, -/* 00018900 */ 0x5B, 0x02, 0x0B, 0x07, 0x00, 0xCB, 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x21, 0x00, -/* 00018910 */ 0x00, 0x00, 0x79, 0x1A, 0x21, 0x04, 0x79, 0x10, 0x21, 0x05, 0x79, 0x0D, 0x21, 0x06, 0x79, 0x10, -/* 00018920 */ 0x21, 0x07, 0x5B, 0x03, 0x21, 0x07, 0x00, 0xF2, 0x04, 0xFF, 0x1F, 0x03, 0x00, 0x00, 0x00, 0x07, -/* 00018930 */ 0x00, 0x8D, 0x02, 0x37, 0x20, 0x05, 0x00, 0x4B, 0x20, 0x6B, 0x1F, 0x20, 0x03, 0x07, 0x04, 0x00, -/* 00018940 */ 0x5A, 0x00, 0x20, 0x5B, 0x01, 0x18, 0x08, 0x00, 0x5B, 0x02, 0x12, 0x08, 0x00, 0xCB, 0x30, 0x00, -/* 00018950 */ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x07, 0x01, 0x00, 0xC2, 0x01, 0x22, -/* 00018960 */ 0x18, 0x09, 0x00, 0x79, 0x22, 0x21, 0x04, 0x79, 0x0D, 0x21, 0x05, 0x79, 0x0D, 0x21, 0x06, 0x79, -/* 00018970 */ 0x0D, 0x21, 0x07, 0x5B, 0x03, 0x21, 0x08, 0x00, 0xF2, 0x04, 0xFF, 0x1F, 0x03, 0x00, 0x00, 0x00, -/* 00018980 */ 0x08, 0x00, 0x8D, 0x02, 0x04, 0x1F, 0x07, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x60, 0x20, -/* 00018990 */ 0x18, 0x08, 0x5B, 0x01, 0x20, 0x0A, 0x00, 0x8D, 0x02, 0x08, 0x20, 0x08, 0x00, 0x60, 0x20, 0x20, -/* 000189A0 */ 0x09, 0x5B, 0x02, 0x20, 0x0A, 0x00, 0xEE, 0x03, 0xFF, 0x1F, 0x0A, 0x00, 0x8D, 0x02, 0x37, 0x20, -/* 000189B0 */ 0x05, 0x00, 0x4B, 0x20, 0x6B, 0x1F, 0x20, 0x03, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x20, 0x60, 0x21, -/* 000189C0 */ 0x18, 0x08, 0x5B, 0x01, 0x21, 0x0B, 0x00, 0x5B, 0x02, 0x13, 0x0B, 0x00, 0xCB, 0x48, 0x00, 0x00, -/* 000189D0 */ 0x00, 0x03, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x79, 0x18, 0x21, 0x04, 0x79, 0x10, 0x21, -/* 000189E0 */ 0x05, 0x79, 0x0D, 0x21, 0x06, 0x79, 0x10, 0x21, 0x07, 0x5B, 0x03, 0x21, 0x0B, 0x00, 0xF2, 0x04, -/* 000189F0 */ 0xFF, 0x1F, 0x03, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x8D, 0x02, 0x37, 0x20, 0x05, 0x00, 0x4B, 0x20, -/* 00018A00 */ 0x6B, 0x1F, 0x20, 0x03, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x20, 0x60, 0x21, 0x18, 0x08, 0x5B, 0x01, -/* 00018A10 */ 0x21, 0x0C, 0x00, 0x5B, 0x02, 0x14, 0x0C, 0x00, 0xCB, 0x60, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, -/* 00018A20 */ 0x00, 0x21, 0x00, 0x00, 0x00, 0xD6, 0x05, 0x22, 0x21, 0x79, 0x22, 0x21, 0x04, 0x79, 0x10, 0x21, -/* 00018A30 */ 0x05, 0x79, 0x0D, 0x21, 0x06, 0x79, 0x10, 0x21, 0x07, 0x5B, 0x03, 0x21, 0x0C, 0x00, 0xF2, 0x04, -/* 00018A40 */ 0xFF, 0x1F, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x00, 0xD3, 0x06, 0x1F, 0x47, 0x1B, 0x1F, 0x8D, 0x02, -/* 00018A50 */ 0x37, 0x20, 0x05, 0x00, 0x4B, 0x20, 0x6B, 0x1F, 0x20, 0x03, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x20, -/* 00018A60 */ 0x5B, 0x01, 0x1B, 0x0D, 0x00, 0x5B, 0x02, 0x09, 0x0D, 0x00, 0xCB, 0x78, 0x00, 0x00, 0x00, 0x05, -/* 00018A70 */ 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x79, 0x15, 0x21, 0x04, 0x79, 0x0D, 0x21, 0x05, 0x79, -/* 00018A80 */ 0x0D, 0x21, 0x06, 0x79, 0x10, 0x21, 0x07, 0x5B, 0x03, 0x21, 0x0D, 0x00, 0xF2, 0x04, 0xFF, 0x1F, -/* 00018A90 */ 0x03, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x8D, 0x02, 0x37, 0x20, 0x05, 0x00, 0x4B, 0x20, 0x6B, 0x1F, -/* 00018AA0 */ 0x20, 0x03, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x20, 0x60, 0x21, 0x18, 0x08, 0x5B, 0x01, 0x21, 0x0E, -/* 00018AB0 */ 0x00, 0x5B, 0x02, 0x16, 0x0E, 0x00, 0xCB, 0x90, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x21, -/* 00018AC0 */ 0x00, 0x00, 0x00, 0x8D, 0x02, 0x23, 0x22, 0x02, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5B, -/* 00018AD0 */ 0x01, 0x15, 0x0F, 0x00, 0x5B, 0x02, 0x1B, 0x0F, 0x00, 0xEE, 0x03, 0x22, 0x22, 0x0F, 0x00, 0x79, -/* 00018AE0 */ 0x22, 0x21, 0x0A, 0x79, 0x0D, 0x21, 0x06, 0x79, 0x10, 0x21, 0x07, 0x5B, 0x03, 0x21, 0x0E, 0x00, -/* 00018AF0 */ 0xF2, 0x04, 0xFF, 0x1F, 0x03, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x47, 0x00, 0x18, 0x09, 0x02, 0x00, -/* 00018B00 */ 0xA6, 0x00, 0x24, 0x00, 0x07, 0xA4, 0x00, 0x90, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, -/* 00018B10 */ 0x00, 0x00, 0x00, 0x84, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x78, -/* 00018B20 */ 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, -/* 00018B30 */ 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x03, -/* 00018B40 */ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, -/* 00018B50 */ 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, -/* 00018B60 */ 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, -/* 00018B70 */ 0x01, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, -/* 00018B80 */ 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x18, -/* 00018B90 */ 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, -/* 00018BA0 */ 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, -/* 00018BB0 */ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, -/* 00018BC0 */ 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0xFE, 0xEE, 0x01, 0xFE, 0x07, 0x03, 0x4D, 0xFE, 0x88, -/* 00018BD0 */ 0x01, 0xFE, 0x83, 0x01, 0xFE, 0x82, 0x01, 0xFE, 0x80, 0x01, 0xFE, 0x81, 0x01, 0xFE, 0x15, 0x01, -/* 00018BE0 */ 0xFE, 0x15, 0x01, 0xFE, 0x84, 0x01, 0xFE, 0xEE, 0xA4, 0x17, 0x1C, 0x00, 0x00, 0x00, 0x1C, 0x00, -/* 00018BF0 */ 0x40, 0x00, 0x05, 0x00, 0x1B, 0x00, 0x06, 0x00, 0xC1, 0x06, 0x05, 0x00, 0x73, 0x00, 0x4F, 0x00, -/* 00018C00 */ 0x76, 0x05, 0x0E, 0x00, 0x29, 0x00, 0x05, 0x00, 0x0D, 0x01, 0x22, 0x00, 0xB1, 0x03, 0x22, 0x00, -/* 00018C10 */ 0xB5, 0x02, 0x03, 0x00, 0x55, 0x00, 0x27, 0x00, 0x30, 0x01, 0x31, 0x00, 0x6F, 0x00, 0x48, 0x00, -/* 00018C20 */ 0xD1, 0x00, 0x48, 0x00, 0xD3, 0x00, 0x51, 0x00, 0xBD, 0x00, 0x2A, 0x00, 0x3D, 0x00, 0x4C, 0x00, -/* 00018C30 */ 0xC1, 0x00, 0x50, 0x00, 0x81, 0x04, 0x06, 0x00, 0xF4, 0x01, 0x48, 0x00, 0xB9, 0x00, 0x64, 0x00, -/* 00018C40 */ 0xC4, 0x00, 0x08, 0x00, 0x15, 0x00, 0x00, 0x06, 0x95, 0x01, 0x00, 0xF5, 0x92, 0x01, 0x00, 0xCD, -/* 00018C50 */ 0x90, 0x01, 0x00, 0x6D, 0x8F, 0x01, 0x00, 0xD3, 0x8E, 0x01, 0x00, 0x69, 0x8D, 0x01, 0x00, 0x63, -/* 00018C60 */ 0x8C, 0x01, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x62, 0x04, 0x1B, 0xA0, -/* 00018C70 */ 0x41, 0xC1, 0x00, 0xFE, 0x1E, 0x04, 0x4D, 0xFE, 0x76, 0xC3, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, -/* 00018C80 */ 0x01, 0xFE, 0x76, 0xC3, 0xFE, 0xD7, 0x01, 0xFE, 0xD7, 0x01, 0x01, 0x05, 0x05, 0x08, 0x04, 0x24, -/* 00018C90 */ 0x23, 0x03, 0x03, 0x01, 0x04, 0x04, 0x04, 0x04, 0x07, 0x06, 0xFE, 0xF6, 0x03, 0x05, 0xFE, 0x1C, -/* 00018CA0 */ 0x04, 0x06, 0xFE, 0x45, 0x03, 0x96, 0x59, 0x08, 0xB2, 0x05, 0x08, 0x4F, 0x06, 0x2C, 0x08, 0x05, -/* 00018CB0 */ 0x15, 0x03, 0x00, 0x08, 0x02, 0x09, 0x24, 0x00, 0x8D, 0x03, 0x03, 0x09, 0x00, 0x00, 0x6B, 0x08, -/* 00018CC0 */ 0x09, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x09, 0x5B, 0x01, 0x03, 0x00, 0x00, 0x5B, 0x02, 0x04, -/* 00018CD0 */ 0x00, 0x00, 0xF2, 0x03, 0xFF, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8D, 0x03, 0x03, 0x09, -/* 00018CE0 */ 0x00, 0x00, 0x6B, 0x08, 0x09, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x09, 0x5B, 0x01, 0x05, 0x01, -/* 00018CF0 */ 0x00, 0xF2, 0x02, 0x08, 0x08, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x06, 0x08, 0xA6, 0x08, -/* 00018D00 */ 0x14, 0x08, 0x00, 0x06, 0x08, 0x60, 0x08, 0x06, 0x02, 0x0F, 0x24, 0x00, 0x08, 0x8D, 0x03, 0x03, -/* 00018D10 */ 0x09, 0x00, 0x00, 0x6B, 0x08, 0x09, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x09, 0x5B, 0x01, 0x03, -/* 00018D20 */ 0x02, 0x00, 0x5B, 0x02, 0x04, 0x02, 0x00, 0xF2, 0x03, 0xFF, 0x08, 0x00, 0x00, 0x00, 0x00, 0x02, -/* 00018D30 */ 0x00, 0x60, 0x00, 0x06, 0x03, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x8A, 0x02, 0xFE, -/* 00018D40 */ 0xEF, 0x01, 0xFE, 0x1A, 0x04, 0xFE, 0x1B, 0x04, 0xFE, 0x90, 0xC3, 0x07, 0x07, 0x00, 0x00, 0x00, -/* 00018D50 */ 0x0B, 0x00, 0x30, 0x00, 0x24, 0x00, 0x65, 0x00, 0x22, 0x00, 0x41, 0x00, 0x0F, 0x00, 0x57, 0x00, -/* 00018D60 */ 0x24, 0x00, 0x65, 0x00, 0x09, 0x00, 0x2A, 0x00, 0x00, 0xBF, 0x5C, 0x18, 0xC1, 0x03, 0x88, 0x03, -/* 00018D70 */ 0x00, 0xFE, 0x47, 0x04, 0x13, 0xA0, 0x41, 0xC3, 0x00, 0xFE, 0x0D, 0x04, 0x4C, 0xFF, 0x00, 0x00, -/* 00018D80 */ 0x00, 0x02, 0xFE, 0x2F, 0xBF, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0x2F, 0xBF, 0xFE, -/* 00018D90 */ 0x4A, 0x03, 0xFE, 0x4A, 0x03, 0x01, 0x06, 0x0D, 0x11, 0x04, 0x34, 0x32, 0x03, 0x04, 0x01, 0x02, -/* 00018DA0 */ 0x03, 0x03, 0x03, 0x03, 0x10, 0x06, 0xFE, 0xF6, 0x03, 0x05, 0xFE, 0x1D, 0x04, 0x06, 0xFE, 0x45, -/* 00018DB0 */ 0x03, 0x06, 0xFE, 0xF7, 0x03, 0x06, 0xFE, 0x10, 0x04, 0x06, 0xFE, 0x16, 0x04, 0x06, 0xFE, 0x17, -/* 00018DC0 */ 0x04, 0x06, 0xFE, 0x19, 0x04, 0x06, 0xFE, 0x13, 0x04, 0x06, 0xFE, 0x14, 0x04, 0x08, 0xD6, 0x59, -/* 00018DD0 */ 0x11, 0xB2, 0x0D, 0x11, 0x4F, 0x0E, 0x4F, 0x0F, 0x2C, 0x11, 0x0D, 0x15, 0x03, 0x00, 0x11, 0x02, -/* 00018DE0 */ 0x09, 0x24, 0x00, 0x8D, 0x03, 0x03, 0x12, 0x00, 0x00, 0x6B, 0x11, 0x12, 0x00, 0x07, 0x03, 0x00, -/* 00018DF0 */ 0x5A, 0x00, 0x12, 0x5B, 0x01, 0x03, 0x00, 0x00, 0x5B, 0x02, 0x04, 0x00, 0x00, 0xF2, 0x03, 0xFF, -/* 00018E00 */ 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8D, 0x03, 0x03, 0x12, 0x00, 0x00, 0x6B, 0x11, 0x12, -/* 00018E10 */ 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x12, 0x5B, 0x01, 0x0D, 0x01, 0x00, 0xF2, 0x02, 0x11, 0x11, -/* 00018E20 */ 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x0E, 0x11, 0xA6, 0x11, 0x14, 0x08, 0x00, 0x0E, 0x11, -/* 00018E30 */ 0x60, 0x11, 0x0E, 0x02, 0x0F, 0x24, 0x00, 0x11, 0x8D, 0x03, 0x03, 0x12, 0x00, 0x00, 0x6B, 0x11, -/* 00018E40 */ 0x12, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x12, 0x5B, 0x01, 0x03, 0x02, 0x00, 0x5B, 0x02, 0x04, -/* 00018E50 */ 0x02, 0x00, 0xF2, 0x03, 0xFF, 0x11, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xCD, 0x11, 0x07, 0x00, -/* 00018E60 */ 0x00, 0x9F, 0x00, 0x05, 0x11, 0x9F, 0x01, 0x06, 0x11, 0x9F, 0x02, 0x07, 0x11, 0x9F, 0x03, 0x08, -/* 00018E70 */ 0x11, 0x9F, 0x04, 0x09, 0x11, 0x9F, 0x05, 0x0A, 0x11, 0x9F, 0x06, 0x0B, 0x11, 0x47, 0x0F, 0x11, -/* 00018E80 */ 0x8D, 0x02, 0x19, 0x11, 0x01, 0x00, 0x4B, 0x11, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, -/* 00018E90 */ 0x0F, 0x03, 0x00, 0x5B, 0x02, 0x0E, 0x03, 0x00, 0xEE, 0x03, 0x00, 0x11, 0x03, 0x00, 0x09, 0x02, -/* 00018EA0 */ 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x8A, 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0x1A, 0x04, 0xFE, 0x5C, -/* 00018EB0 */ 0xBF, 0x08, 0x09, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x34, 0x00, 0x24, 0x00, 0x74, 0x00, 0x22, 0x00, -/* 00018EC0 */ 0x45, 0x00, 0x0F, 0x00, 0x5B, 0x00, 0x24, 0x00, 0x75, 0x00, 0x24, 0x00, 0x1E, 0x01, 0x23, 0x00, -/* 00018ED0 */ 0x41, 0x00, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x27, 0x04, 0x65, 0xA2, -/* 00018EE0 */ 0x41, 0xD1, 0x00, 0x4B, 0xFE, 0x41, 0xBA, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x02, 0xFE, 0x41, -/* 00018EF0 */ 0xBA, 0xC8, 0xC8, 0x01, 0x06, 0x03, 0x07, 0x07, 0x17, 0x16, 0x03, 0x01, 0x03, 0x01, 0x01, 0x01, -/* 00018F00 */ 0x01, 0x06, 0x08, 0x55, 0x59, 0x07, 0xB2, 0x05, 0x07, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA6, 0x07, -/* 00018F10 */ 0x47, 0x04, 0x07, 0x8D, 0x02, 0x17, 0x07, 0x00, 0x00, 0x4B, 0x07, 0x07, 0x06, 0x00, 0x5A, 0x00, -/* 00018F20 */ 0x02, 0x5B, 0x01, 0x05, 0x00, 0x00, 0x8D, 0x01, 0x05, 0x08, 0x01, 0x00, 0x4B, 0x08, 0x5B, 0x02, -/* 00018F30 */ 0x08, 0x00, 0x00, 0x8D, 0x03, 0x03, 0x08, 0x02, 0x00, 0x60, 0x08, 0x08, 0x00, 0x5B, 0x03, 0x08, -/* 00018F40 */ 0x00, 0x00, 0x5B, 0x04, 0x03, 0x00, 0x00, 0x5B, 0x05, 0x04, 0x00, 0x00, 0xEE, 0x06, 0x00, 0x07, -/* 00018F50 */ 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xDA, 0x01, 0xFE, 0x54, 0xBA, 0x03, -/* 00018F60 */ 0x05, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x23, 0x00, 0x44, 0x00, 0x91, 0x00, 0x00, 0xBF, 0x5C, 0x08, -/* 00018F70 */ 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x18, 0x04, 0x4D, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x0F, 0x04, -/* 00018F80 */ 0x4A, 0xFE, 0x1F, 0xB7, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x1F, 0xB7, 0xFE, 0x30, -/* 00018F90 */ 0x02, 0xFE, 0x30, 0x02, 0x01, 0x08, 0x07, 0x0C, 0x09, 0x36, 0x35, 0x03, 0x06, 0x02, 0x04, 0x04, -/* 00018FA0 */ 0x04, 0x04, 0x0B, 0x06, 0xFE, 0xF6, 0x03, 0x05, 0xFE, 0x1C, 0x04, 0x06, 0xFE, 0x45, 0x03, 0x08, -/* 00018FB0 */ 0x0C, 0xEE, 0x59, 0x0C, 0xB2, 0x09, 0x0C, 0x4F, 0x0A, 0x2C, 0x0C, 0x09, 0x15, 0x03, 0x00, 0x0C, -/* 00018FC0 */ 0x02, 0x09, 0x24, 0x00, 0x8D, 0x03, 0x03, 0x0D, 0x00, 0x00, 0x6B, 0x0C, 0x0D, 0x00, 0x07, 0x03, -/* 00018FD0 */ 0x00, 0x5A, 0x00, 0x0D, 0x5B, 0x01, 0x03, 0x00, 0x00, 0x5B, 0x02, 0x04, 0x00, 0x00, 0xF2, 0x03, -/* 00018FE0 */ 0xFF, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8D, 0x03, 0x03, 0x0D, 0x00, 0x00, 0x6B, 0x0C, -/* 00018FF0 */ 0x0D, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0D, 0x5B, 0x01, 0x09, 0x01, 0x00, 0xF2, 0x02, 0x0C, -/* 00019000 */ 0x0C, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x0A, 0x0C, 0xA6, 0x0C, 0x14, 0x08, 0x00, 0x0A, -/* 00019010 */ 0x0C, 0x60, 0x0C, 0x0A, 0x02, 0x0F, 0x24, 0x00, 0x0C, 0x8D, 0x03, 0x03, 0x0D, 0x00, 0x00, 0x6B, -/* 00019020 */ 0x0C, 0x0D, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0D, 0x5B, 0x01, 0x03, 0x02, 0x00, 0x5B, 0x02, -/* 00019030 */ 0x04, 0x02, 0x00, 0xF2, 0x03, 0xFF, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x8D, 0x03, 0x03, -/* 00019040 */ 0x0D, 0x00, 0x00, 0x6B, 0x0C, 0x0D, 0x03, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x0D, 0x8D, 0x03, 0x0B, -/* 00019050 */ 0x0E, 0x01, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x05, 0x5B, 0x01, 0x07, 0x04, 0x00, 0xEE, 0x02, -/* 00019060 */ 0x0E, 0x0E, 0x04, 0x00, 0x5B, 0x01, 0x0E, 0x03, 0x00, 0x8D, 0x03, 0x0B, 0x0E, 0x01, 0x00, 0x07, -/* 00019070 */ 0x02, 0x00, 0x5A, 0x00, 0x05, 0x5B, 0x01, 0x08, 0x05, 0x00, 0xEE, 0x02, 0x0E, 0x0E, 0x05, 0x00, -/* 00019080 */ 0x5B, 0x02, 0x0E, 0x03, 0x00, 0x5B, 0x03, 0x0A, 0x03, 0x00, 0x5B, 0x04, 0x06, 0x03, 0x00, 0xF2, -/* 00019090 */ 0x05, 0x00, 0x0C, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, -/* 000190A0 */ 0xFE, 0x8A, 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0x1A, 0x04, 0xFE, 0xEB, 0x01, 0xFE, 0x44, 0xB7, 0x07, -/* 000190B0 */ 0x07, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x30, 0x00, 0x24, 0x00, 0x65, 0x00, 0x22, 0x00, 0x41, 0x00, -/* 000190C0 */ 0x0F, 0x00, 0x57, 0x00, 0x24, 0x00, 0x65, 0x00, 0x61, 0x00, 0x78, 0x00, 0x00, 0x3F, 0x5C, 0x08, -/* 000190D0 */ 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0xFE, 0x03, 0x3C, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x45, 0x03, -/* 000190E0 */ 0x49, 0xFE, 0x5D, 0xB3, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x01, 0xFE, 0x5D, 0xB3, 0xFE, 0x71, -/* 000190F0 */ 0x03, 0xFE, 0x71, 0x03, 0x0B, 0x04, 0x0B, 0x05, 0x60, 0x59, 0x03, 0x09, 0x05, 0x0A, 0x09, 0x0A, -/* 00019100 */ 0x0A, 0x0A, 0x08, 0x06, 0xFE, 0x45, 0x03, 0xFE, 0x90, 0x01, 0x59, 0x0B, 0xB2, 0x06, 0x0B, 0xBD, -/* 00019110 */ 0x07, 0x4F, 0x08, 0x4F, 0x09, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA6, 0x0B, 0x47, 0x04, 0x0B, 0x15, -/* 00019120 */ 0x05, 0x00, 0x05, 0x02, 0xA6, 0x0B, 0x47, 0x05, 0x0B, 0x4F, 0x08, 0x4F, 0x09, 0x69, 0x09, 0x00, -/* 00019130 */ 0x00, 0x00, 0x0B, 0x14, 0x0A, 0x00, 0x06, 0x0B, 0xA6, 0x0B, 0x14, 0x03, 0x00, 0x06, 0x0B, 0x09, -/* 00019140 */ 0x16, 0x00, 0x07, 0x03, 0x00, 0x5B, 0x01, 0x04, 0x00, 0x00, 0x5B, 0x02, 0x05, 0x00, 0x00, 0xC2, -/* 00019150 */ 0x03, 0x00, 0x07, 0x00, 0x00, 0x09, 0x40, 0x01, 0x8D, 0x03, 0x24, 0x0C, 0x00, 0x00, 0x6B, 0x0B, -/* 00019160 */ 0x0C, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x06, 0x01, 0x00, 0xF2, 0x02, 0x0B, -/* 00019170 */ 0x0B, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x08, 0x0B, 0x8D, 0x03, 0x37, 0x0C, 0x01, 0x00, -/* 00019180 */ 0x4B, 0x0C, 0x6B, 0x0B, 0x0C, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x08, 0x02, -/* 00019190 */ 0x00, 0xF2, 0x02, 0x0B, 0x0B, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x0F, 0x1F, 0x00, 0x0B, 0x8D, -/* 000191A0 */ 0x03, 0x03, 0x0C, 0x02, 0x00, 0x6B, 0x0B, 0x0C, 0x02, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5B, -/* 000191B0 */ 0x01, 0x03, 0x03, 0x00, 0xF2, 0x02, 0xFF, 0x0B, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x8D, 0x03, -/* 000191C0 */ 0x03, 0x0C, 0x02, 0x00, 0x6B, 0x0B, 0x0C, 0x03, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, -/* 000191D0 */ 0x08, 0x04, 0x00, 0xF2, 0x02, 0x0B, 0x0B, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x47, 0x09, 0x0B, -/* 000191E0 */ 0xA6, 0x0B, 0x14, 0x03, 0x00, 0x09, 0x0B, 0x09, 0x43, 0x00, 0x8D, 0x03, 0x37, 0x0C, 0x01, 0x00, -/* 000191F0 */ 0x4B, 0x0C, 0x6B, 0x0B, 0x0C, 0x04, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x0C, 0xF2, 0x01, 0x0B, 0x0B, -/* 00019200 */ 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x47, 0x09, 0x0B, 0x8D, 0x03, 0x03, 0x0C, 0x02, 0x00, 0x6B, -/* 00019210 */ 0x0B, 0x0C, 0x05, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x08, 0x06, 0x00, 0x5B, 0x02, -/* 00019220 */ 0x09, 0x06, 0x00, 0xF2, 0x03, 0xFF, 0x0B, 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x8D, 0x01, 0x02, -/* 00019230 */ 0x0B, 0x03, 0x00, 0x4B, 0x0B, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x09, 0x07, 0x00, -/* 00019240 */ 0x5B, 0x02, 0x04, 0x07, 0x00, 0x5B, 0x03, 0x05, 0x07, 0x00, 0xEE, 0x04, 0xFF, 0x0B, 0x07, 0x00, -/* 00019250 */ 0x47, 0x0B, 0x09, 0x8D, 0x03, 0x37, 0x0D, 0x01, 0x00, 0x4B, 0x0D, 0x6B, 0x0C, 0x0D, 0x06, 0x07, -/* 00019260 */ 0x03, 0x00, 0x5A, 0x00, 0x0D, 0x8D, 0x01, 0x04, 0x0E, 0x04, 0x00, 0x4B, 0x0E, 0x5B, 0x01, 0x0E, -/* 00019270 */ 0x08, 0x00, 0x5B, 0x02, 0x08, 0x08, 0x00, 0xF2, 0x03, 0x0C, 0x0C, 0x06, 0x00, 0x00, 0x00, 0x08, -/* 00019280 */ 0x00, 0x75, 0x0C, 0x0B, 0x07, 0x60, 0x0B, 0x09, 0x08, 0x80, 0x0B, 0x0B, 0xF8, 0x00, 0xFA, 0x0B, -/* 00019290 */ 0x47, 0x00, 0x08, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x36, 0x03, 0xB0, 0xFE, 0x8E, -/* 000192A0 */ 0x02, 0xFE, 0xEF, 0x01, 0x61, 0xFE, 0xF0, 0x01, 0x4D, 0xFE, 0x1B, 0x04, 0xFE, 0x1B, 0x04, 0xAB, -/* 000192B0 */ 0xFE, 0x6F, 0xB3, 0x10, 0x0B, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0E, 0x00, 0x23, 0x00, -/* 000192C0 */ 0x15, 0x00, 0x3B, 0x00, 0x16, 0x00, 0x42, 0x00, 0x22, 0x00, 0x2F, 0x00, 0x25, 0x00, 0x2C, 0x00, -/* 000192D0 */ 0x1F, 0x00, 0x7F, 0x00, 0x22, 0x00, 0x3F, 0x00, 0x0A, 0x00, 0x32, 0x00, 0x1F, 0x00, 0x2B, 0x00, -/* 000192E0 */ 0x24, 0x00, 0x48, 0x00, 0x23, 0x00, 0x66, 0x00, 0x35, 0x00, 0x3E, 0x00, 0x0B, 0x00, 0x33, 0x00, -/* 000192F0 */ 0x08, 0x00, 0x14, 0x00, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0xDC, 0x03, -/* 00019300 */ 0x5D, 0xA2, 0x41, 0xD1, 0x00, 0x48, 0xFE, 0xD2, 0xAC, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x02, -/* 00019310 */ 0xFE, 0xD2, 0xAC, 0xFE, 0x87, 0x04, 0xFE, 0x87, 0x04, 0x01, 0x0A, 0x06, 0x0E, 0x06, 0x64, 0x5D, -/* 00019320 */ 0x03, 0x08, 0x05, 0x03, 0x03, 0x03, 0x03, 0x0D, 0x08, 0x07, 0x05, 0xFE, 0x08, 0x04, 0x0B, 0xFE, -/* 00019330 */ 0x88, 0x01, 0x59, 0x0E, 0xB2, 0x09, 0x0E, 0x4F, 0x0A, 0x4F, 0x0B, 0x4F, 0x0C, 0x15, 0x05, 0x00, -/* 00019340 */ 0x07, 0x02, 0xA6, 0x0E, 0x47, 0x07, 0x0E, 0x15, 0x05, 0x00, 0x08, 0x02, 0xA6, 0x0E, 0x47, 0x08, -/* 00019350 */ 0x0E, 0x4F, 0x0A, 0x4F, 0x0B, 0x4F, 0x0C, 0xA6, 0x0E, 0x14, 0x08, 0x00, 0x09, 0x0E, 0x14, 0x03, -/* 00019360 */ 0x00, 0x09, 0x03, 0x09, 0x1F, 0x00, 0x8D, 0x03, 0x03, 0x0F, 0x00, 0x00, 0x6B, 0x0E, 0x0F, 0x00, -/* 00019370 */ 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0F, 0x5B, 0x01, 0x04, 0x00, 0x00, 0xF2, 0x02, 0xFF, 0x0E, 0x00, -/* 00019380 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x8D, 0x03, 0x0B, 0x0E, 0x01, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 00019390 */ 0x02, 0x5B, 0x01, 0x09, 0x01, 0x00, 0xEE, 0x02, 0x0E, 0x0E, 0x01, 0x00, 0x47, 0x0A, 0x0E, 0x8D, -/* 000193A0 */ 0x03, 0x0B, 0x0E, 0x01, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x06, 0x02, 0x00, -/* 000193B0 */ 0xEE, 0x02, 0x0E, 0x0E, 0x02, 0x00, 0x47, 0x0B, 0x0E, 0xA6, 0x0E, 0x47, 0x0C, 0x0E, 0xA6, 0x0E, -/* 000193C0 */ 0x14, 0x03, 0x00, 0x07, 0x0E, 0x09, 0x7B, 0x00, 0xA6, 0x0E, 0x14, 0x03, 0x00, 0x08, 0x0E, 0x09, -/* 000193D0 */ 0x71, 0x00, 0x8D, 0x01, 0x03, 0x0E, 0x02, 0x00, 0x4B, 0x0E, 0xA6, 0x0F, 0x14, 0x03, 0x00, 0x0E, -/* 000193E0 */ 0x0F, 0x09, 0x51, 0x00, 0x8D, 0x03, 0x37, 0x0F, 0x03, 0x00, 0x4B, 0x0F, 0x6B, 0x0E, 0x0F, 0x01, -/* 000193F0 */ 0x07, 0x01, 0x00, 0x5A, 0x00, 0x0F, 0xF2, 0x01, 0x0E, 0x0E, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, -/* 00019400 */ 0x01, 0x34, 0x01, 0x01, 0x03, 0x0E, 0x8D, 0x01, 0x02, 0x0E, 0x04, 0x00, 0x4B, 0x0E, 0x07, 0x04, -/* 00019410 */ 0x00, 0x5A, 0x00, 0x02, 0x8D, 0x01, 0x03, 0x0F, 0x02, 0x00, 0x4B, 0x0F, 0x5B, 0x01, 0x0F, 0x04, -/* 00019420 */ 0x00, 0xA6, 0x0F, 0x5B, 0x02, 0x0F, 0x04, 0x00, 0xA6, 0x0F, 0x5B, 0x03, 0x0F, 0x04, 0x00, 0xEE, -/* 00019430 */ 0x04, 0xFF, 0x0E, 0x04, 0x00, 0x8D, 0x01, 0x03, 0x0E, 0x02, 0x00, 0x4B, 0x0E, 0x47, 0x0C, 0x0E, -/* 00019440 */ 0x09, 0x42, 0x00, 0x8D, 0x03, 0x37, 0x0F, 0x03, 0x00, 0x4B, 0x0F, 0x6B, 0x0E, 0x0F, 0x01, 0x07, -/* 00019450 */ 0x01, 0x00, 0x5A, 0x00, 0x0F, 0xF2, 0x01, 0x0E, 0x0E, 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x47, -/* 00019460 */ 0x0C, 0x0E, 0x8D, 0x01, 0x02, 0x0E, 0x04, 0x00, 0x4B, 0x0E, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, -/* 00019470 */ 0x5B, 0x01, 0x0C, 0x06, 0x00, 0x5B, 0x02, 0x07, 0x06, 0x00, 0x5B, 0x03, 0x08, 0x06, 0x00, 0xEE, -/* 00019480 */ 0x04, 0xFF, 0x0E, 0x06, 0x00, 0x8D, 0x03, 0x03, 0x0F, 0x00, 0x00, 0x6B, 0x0E, 0x0F, 0x02, 0x07, -/* 00019490 */ 0x05, 0x00, 0x5A, 0x00, 0x0F, 0x5B, 0x01, 0x0A, 0x07, 0x00, 0x5B, 0x02, 0x0B, 0x07, 0x00, 0x5B, -/* 000194A0 */ 0x03, 0x0C, 0x07, 0x00, 0x5B, 0x04, 0x05, 0x07, 0x00, 0xF2, 0x05, 0x00, 0x0E, 0x02, 0x00, 0x00, -/* 000194B0 */ 0x00, 0x07, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x91, 0x02, 0x61, 0xFE, 0xEB, -/* 000194C0 */ 0x01, 0xFE, 0xE2, 0xAC, 0x10, 0x0B, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x10, 0x00, 0x23, -/* 000194D0 */ 0x00, 0x0F, 0x00, 0x3B, 0x00, 0x1F, 0x00, 0x61, 0x00, 0x1A, 0x00, 0x2A, 0x00, 0x1A, 0x00, 0xFE, -/* 000194E0 */ 0x00, 0x05, 0x00, 0x1D, 0x00, 0x14, 0x00, 0x46, 0x00, 0x12, 0x00, 0x41, 0x00, 0x22, 0x00, 0x3A, -/* 000194F0 */ 0x00, 0x2F, 0x00, 0x66, 0x00, 0x0E, 0x00, 0x4C, 0x00, 0x1F, 0x00, 0x2A, 0x00, 0x23, 0x00, 0x4E, -/* 00019500 */ 0x00, 0x33, 0x00, 0x72, 0x00, 0x00, 0xBF, 0x5C, 0x18, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0xBB, -/* 00019510 */ 0x03, 0x23, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x05, 0x04, 0x47, 0xFE, 0x64, 0xA5, 0xFF, 0x00, 0x10, -/* 00019520 */ 0x01, 0x00, 0x04, 0x04, 0xFE, 0x64, 0xA5, 0xFE, 0x9B, 0x06, 0xFE, 0x9B, 0x06, 0x01, 0x0B, 0x1E, -/* 00019530 */ 0x26, 0x07, 0xC9, 0xB6, 0x03, 0x0E, 0x05, 0x09, 0x18, 0x18, 0x18, 0x18, 0x25, 0x08, 0x06, 0xFE, -/* 00019540 */ 0x10, 0x04, 0x06, 0xFE, 0xAD, 0x03, 0x06, 0xFE, 0x11, 0x04, 0x06, 0xFE, 0x12, 0x04, 0x06, 0xFE, -/* 00019550 */ 0x00, 0x04, 0x05, 0xFE, 0xBC, 0x03, 0x05, 0xFE, 0xFF, 0x03, 0x06, 0xFE, 0x13, 0x04, 0x06, 0xFE, -/* 00019560 */ 0xC2, 0x03, 0x06, 0xFE, 0x14, 0x04, 0x06, 0xFE, 0x2D, 0x03, 0x06, 0xFE, 0x2E, 0x03, 0x06, 0xFE, -/* 00019570 */ 0x2F, 0x03, 0x06, 0xFE, 0xB0, 0x03, 0x06, 0xFE, 0xB2, 0x03, 0x06, 0xFE, 0xB1, 0x03, 0x07, 0x06, -/* 00019580 */ 0xFE, 0x15, 0x04, 0x06, 0xFE, 0xC1, 0x03, 0x06, 0xFE, 0x16, 0x04, 0x06, 0xFE, 0x28, 0x03, 0x06, -/* 00019590 */ 0xFE, 0x29, 0x03, 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, 0x2B, 0x03, 0x06, 0xFE, 0x17, 0x04, 0x0C, -/* 000195A0 */ 0x0B, 0xFE, 0x35, 0x03, 0x4F, 0x21, 0x4F, 0x22, 0x4F, 0x23, 0x4F, 0x24, 0x8D, 0x02, 0x11, 0x26, -/* 000195B0 */ 0x00, 0x00, 0x4B, 0x26, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x1F, 0x00, 0x00, 0xEE, -/* 000195C0 */ 0x02, 0x26, 0x26, 0x00, 0x00, 0x47, 0x21, 0x26, 0xA6, 0x26, 0x14, 0x03, 0x00, 0x20, 0x26, 0x09, -/* 000195D0 */ 0x22, 0x00, 0x8D, 0x03, 0x37, 0x28, 0x01, 0x00, 0x4B, 0x28, 0x6B, 0x27, 0x28, 0x00, 0x07, 0x01, -/* 000195E0 */ 0x00, 0x5A, 0x00, 0x28, 0xF2, 0x01, 0x27, 0x27, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x26, -/* 000195F0 */ 0x27, 0x09, 0x22, 0x00, 0x8D, 0x03, 0x24, 0x28, 0x02, 0x00, 0x6B, 0x27, 0x28, 0x01, 0x07, 0x02, -/* 00019600 */ 0x00, 0x5A, 0x00, 0x28, 0x5B, 0x01, 0x20, 0x02, 0x00, 0xF2, 0x02, 0x27, 0x27, 0x01, 0x00, 0x00, -/* 00019610 */ 0x00, 0x02, 0x00, 0x47, 0x26, 0x27, 0x47, 0x20, 0x26, 0x47, 0x26, 0x1E, 0x8D, 0x02, 0x02, 0x27, -/* 00019620 */ 0x03, 0x00, 0x4B, 0x27, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x20, 0x03, 0x00, 0x5B, -/* 00019630 */ 0x02, 0x03, 0x03, 0x00, 0x5B, 0x03, 0x04, 0x03, 0x00, 0xCD, 0x28, 0x02, 0x00, 0x00, 0x9F, 0x00, -/* 00019640 */ 0x05, 0x28, 0x9F, 0x01, 0x06, 0x28, 0x5B, 0x04, 0x28, 0x03, 0x00, 0x5B, 0x05, 0x05, 0x03, 0x00, -/* 00019650 */ 0xEE, 0x06, 0x27, 0x27, 0x03, 0x00, 0x75, 0x27, 0x26, 0x02, 0x8D, 0x03, 0x37, 0x27, 0x01, 0x00, -/* 00019660 */ 0x4B, 0x27, 0x6B, 0x26, 0x27, 0x03, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x27, 0xF2, 0x01, 0x26, 0x26, -/* 00019670 */ 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x47, 0x22, 0x26, 0x47, 0x26, 0x22, 0x8D, 0x02, 0x02, 0x27, -/* 00019680 */ 0x03, 0x00, 0x4B, 0x27, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x20, 0x05, 0x00, 0x5B, -/* 00019690 */ 0x02, 0x07, 0x05, 0x00, 0x5B, 0x03, 0x04, 0x05, 0x00, 0xCD, 0x28, 0x02, 0x01, 0x00, 0x9F, 0x00, -/* 000196A0 */ 0x08, 0x28, 0x9F, 0x01, 0x09, 0x28, 0x5B, 0x04, 0x28, 0x05, 0x00, 0x5B, 0x05, 0x09, 0x05, 0x00, -/* 000196B0 */ 0xEE, 0x06, 0x27, 0x27, 0x05, 0x00, 0x75, 0x27, 0x26, 0x04, 0x8D, 0x02, 0x02, 0x26, 0x03, 0x00, -/* 000196C0 */ 0x4B, 0x26, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x20, 0x06, 0x00, 0x5B, 0x02, 0x0A, -/* 000196D0 */ 0x06, 0x00, 0x5B, 0x03, 0x0B, 0x06, 0x00, 0xA6, 0x27, 0x5B, 0x04, 0x27, 0x06, 0x00, 0xA6, 0x27, -/* 000196E0 */ 0x5B, 0x05, 0x27, 0x06, 0x00, 0xEE, 0x06, 0x26, 0x26, 0x06, 0x00, 0x47, 0x23, 0x26, 0xA6, 0x26, -/* 000196F0 */ 0x14, 0x03, 0x00, 0x23, 0x26, 0x09, 0x06, 0x00, 0x47, 0x26, 0x23, 0x09, 0x22, 0x00, 0x8D, 0x03, -/* 00019700 */ 0x24, 0x28, 0x02, 0x00, 0x6B, 0x27, 0x28, 0x05, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x28, 0x5B, 0x01, -/* 00019710 */ 0x23, 0x07, 0x00, 0xF2, 0x02, 0x27, 0x27, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x47, 0x26, 0x27, -/* 00019720 */ 0x75, 0x26, 0x22, 0x06, 0x47, 0x26, 0x22, 0x8D, 0x02, 0x02, 0x27, 0x03, 0x00, 0x4B, 0x27, 0x07, -/* 00019730 */ 0x06, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x20, 0x08, 0x00, 0x5B, 0x02, 0x0C, 0x08, 0x00, 0x5B, -/* 00019740 */ 0x03, 0x04, 0x08, 0x00, 0xCD, 0x28, 0x03, 0x02, 0x00, 0x9F, 0x00, 0x0D, 0x28, 0x9F, 0x01, 0x0E, -/* 00019750 */ 0x28, 0x9F, 0x02, 0x0F, 0x28, 0x5B, 0x04, 0x28, 0x08, 0x00, 0xA6, 0x28, 0x5B, 0x05, 0x28, 0x08, -/* 00019760 */ 0x00, 0xEE, 0x06, 0x27, 0x27, 0x08, 0x00, 0x75, 0x27, 0x26, 0x07, 0x8D, 0x02, 0x0B, 0x26, 0x04, -/* 00019770 */ 0x00, 0x4B, 0x26, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x02, 0x8D, 0x03, 0x03, 0x27, 0x05, 0x00, 0x60, -/* 00019780 */ 0x27, 0x27, 0x08, 0x5B, 0x01, 0x27, 0x09, 0x00, 0x5B, 0x02, 0x21, 0x09, 0x00, 0x5B, 0x03, 0x22, -/* 00019790 */ 0x09, 0x00, 0xCD, 0x27, 0x03, 0x03, 0x00, 0x9F, 0x00, 0x10, 0x27, 0x9F, 0x01, 0x11, 0x27, 0x9F, -/* 000197A0 */ 0x02, 0x12, 0x27, 0x5B, 0x04, 0x27, 0x09, 0x00, 0xEE, 0x05, 0x26, 0x26, 0x09, 0x00, 0x47, 0x24, -/* 000197B0 */ 0x26, 0x60, 0x26, 0x24, 0x09, 0x75, 0x26, 0x1E, 0x0A, 0x60, 0x26, 0x24, 0x0B, 0x14, 0x03, 0x00, -/* 000197C0 */ 0x26, 0x13, 0x09, 0x06, 0x00, 0x47, 0x26, 0x14, 0x09, 0x07, 0x00, 0x60, 0x27, 0x24, 0x0B, 0x47, -/* 000197D0 */ 0x26, 0x27, 0x75, 0x26, 0x1E, 0x0C, 0x60, 0x26, 0x24, 0x0D, 0x43, 0x26, 0x26, 0x15, 0x75, 0x26, -/* 000197E0 */ 0x1E, 0x0E, 0x60, 0x26, 0x24, 0x0F, 0x75, 0x26, 0x1E, 0x10, 0x47, 0x26, 0x1E, 0x8D, 0x03, 0x3D, -/* 000197F0 */ 0x27, 0x06, 0x00, 0x4B, 0x27, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x8D, 0x03, 0x3A, 0x28, 0x07, -/* 00019800 */ 0x00, 0x4B, 0x28, 0x5B, 0x01, 0x28, 0x0A, 0x00, 0x60, 0x28, 0x1E, 0x11, 0x5B, 0x02, 0x28, 0x0A, -/* 00019810 */ 0x00, 0xEE, 0x03, 0x27, 0x27, 0x0A, 0x00, 0x75, 0x27, 0x26, 0x12, 0x47, 0x26, 0x1E, 0x8D, 0x02, -/* 00019820 */ 0x02, 0x27, 0x03, 0x00, 0x4B, 0x27, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x20, 0x0B, -/* 00019830 */ 0x00, 0x5B, 0x02, 0x16, 0x0B, 0x00, 0x5B, 0x03, 0x04, 0x0B, 0x00, 0xCD, 0x28, 0x04, 0x04, 0x00, -/* 00019840 */ 0x9F, 0x00, 0x17, 0x28, 0x9F, 0x01, 0x18, 0x28, 0x9F, 0x02, 0x19, 0x28, 0x9F, 0x03, 0x1A, 0x28, -/* 00019850 */ 0x5B, 0x04, 0x28, 0x0B, 0x00, 0x5B, 0x05, 0x1A, 0x0B, 0x00, 0xEE, 0x06, 0x27, 0x27, 0x0B, 0x00, -/* 00019860 */ 0x75, 0x27, 0x26, 0x13, 0x47, 0x26, 0x1E, 0x8D, 0x03, 0x3D, 0x27, 0x06, 0x00, 0x4B, 0x27, 0x07, -/* 00019870 */ 0x03, 0x00, 0x5A, 0x00, 0x02, 0x8D, 0x03, 0x39, 0x28, 0x08, 0x00, 0x4B, 0x28, 0x5B, 0x01, 0x28, -/* 00019880 */ 0x0C, 0x00, 0x60, 0x28, 0x1E, 0x14, 0x5B, 0x02, 0x28, 0x0C, 0x00, 0xEE, 0x03, 0x27, 0x27, 0x0C, -/* 00019890 */ 0x00, 0x75, 0x27, 0x26, 0x15, 0x47, 0x26, 0x1E, 0x8D, 0x02, 0x02, 0x27, 0x03, 0x00, 0x4B, 0x27, -/* 000198A0 */ 0x07, 0x06, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x20, 0x0D, 0x00, 0x5B, 0x02, 0x1B, 0x0D, 0x00, -/* 000198B0 */ 0x5B, 0x03, 0x0B, 0x0D, 0x00, 0xA6, 0x28, 0x5B, 0x04, 0x28, 0x0D, 0x00, 0x5B, 0x05, 0x1C, 0x0D, -/* 000198C0 */ 0x00, 0xEE, 0x06, 0x27, 0x27, 0x0D, 0x00, 0x75, 0x27, 0x26, 0x16, 0x75, 0x1D, 0x1E, 0x17, 0x47, -/* 000198D0 */ 0x00, 0x1E, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x61, 0xFE, 0x36, 0x03, 0xFE, 0x10, 0x04, -/* 000198E0 */ 0x61, 0xFE, 0x18, 0x04, 0xFE, 0x37, 0x03, 0xFE, 0xB2, 0x03, 0xFE, 0xB1, 0x03, 0xFE, 0xDA, 0x01, -/* 000198F0 */ 0xFE, 0xF7, 0x01, 0xFE, 0xF7, 0x01, 0xFE, 0xB0, 0x03, 0xFE, 0x19, 0x04, 0xFE, 0xB2, 0x03, 0xFE, -/* 00019900 */ 0x20, 0x02, 0xFE, 0xB1, 0x03, 0xFE, 0x14, 0x04, 0xFE, 0x14, 0x04, 0xFE, 0x23, 0x02, 0xFE, 0x21, -/* 00019910 */ 0x02, 0xFE, 0x21, 0x02, 0xFE, 0x22, 0x02, 0xFE, 0x1F, 0x02, 0xFE, 0x1A, 0x04, 0xFE, 0x98, 0xA5, -/* 00019920 */ 0x14, 0x08, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x46, 0x00, 0x51, 0x00, 0x58, 0x00, 0x41, 0x00, 0x12, -/* 00019930 */ 0x01, 0x1F, 0x00, 0x24, 0x00, 0x41, 0x00, 0x6D, 0x00, 0x34, 0x00, 0x55, 0x00, 0x36, 0x00, 0x44, -/* 00019940 */ 0x00, 0x47, 0x00, 0x69, 0x00, 0x46, 0x00, 0x74, 0x00, 0x08, 0x00, 0x28, 0x00, 0x1D, 0x00, 0x43, -/* 00019950 */ 0x00, 0x0C, 0x00, 0x30, 0x00, 0x08, 0x00, 0x27, 0x00, 0x31, 0x00, 0x55, 0x00, 0x49, 0x00, 0x82, -/* 00019960 */ 0x00, 0x31, 0x00, 0x5B, 0x00, 0x36, 0x00, 0x70, 0x00, 0x04, 0x00, 0x32, 0x00, 0x08, 0x00, 0x19, -/* 00019970 */ 0x00, 0x00, 0x3F, 0x5D, 0x08, 0xC1, 0x03, 0x8D, 0x05, 0x00, 0xFE, 0xA5, 0x03, 0x22, 0xA2, 0x41, -/* 00019980 */ 0xC1, 0x00, 0xFE, 0x7B, 0x03, 0x44, 0xFE, 0x58, 0xA2, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, -/* 00019990 */ 0x03, 0xFE, 0x58, 0xA2, 0xFE, 0x32, 0x02, 0xFE, 0x32, 0x02, 0x03, 0xFE, 0x02, 0x04, 0xFE, 0x03, -/* 000199A0 */ 0x04, 0xFE, 0x04, 0x04, 0x09, 0x04, 0x0A, 0x04, 0x26, 0x26, 0x02, 0x03, 0x03, 0x04, 0x04, 0x04, -/* 000199B0 */ 0x04, 0x07, 0x08, 0x09, 0x07, 0x08, 0x9C, 0x94, 0x02, 0x05, 0x94, 0x03, 0x06, 0x94, 0x02, 0x05, -/* 000199C0 */ 0x15, 0x05, 0x00, 0x06, 0x03, 0x01, 0x36, 0x01, 0x03, 0x02, 0x4F, 0x0A, 0x94, 0x04, 0x0A, 0x8D, -/* 000199D0 */ 0x02, 0x37, 0x0B, 0x00, 0x00, 0x4B, 0x0B, 0x6B, 0x0A, 0x0B, 0x00, 0x07, 0x01, 0x00, 0x5A, 0x00, -/* 000199E0 */ 0x0B, 0xF2, 0x01, 0x0A, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x94, 0x04, 0x0A, 0x8D, 0x02, -/* 000199F0 */ 0x37, 0x0B, 0x00, 0x00, 0x4B, 0x0B, 0x6B, 0x0A, 0x0B, 0x01, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0B, -/* 00019A00 */ 0x5B, 0x01, 0x04, 0x01, 0x00, 0xD3, 0x00, 0x0C, 0x5B, 0x02, 0x0C, 0x01, 0x00, 0xF2, 0x03, 0xFF, -/* 00019A10 */ 0x0A, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x8D, 0x02, 0x37, 0x0B, 0x00, 0x00, 0x4B, 0x0B, 0x6B, -/* 00019A20 */ 0x0A, 0x0B, 0x02, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0B, 0x91, 0x04, 0x0C, 0x01, 0x00, 0x5B, 0x01, -/* 00019A30 */ 0x0C, 0x02, 0x00, 0x8D, 0x02, 0x03, 0x0C, 0x02, 0x00, 0x60, 0x0C, 0x0C, 0x03, 0x5B, 0x02, 0x0C, -/* 00019A40 */ 0x02, 0x00, 0xF2, 0x03, 0x00, 0x0A, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x09, 0x02, 0x00, 0xA6, -/* 00019A50 */ 0x00, 0x24, 0x00, 0x61, 0x86, 0xFE, 0x86, 0x01, 0xFE, 0x80, 0x02, 0xFE, 0x77, 0xA2, 0x05, 0x09, -/* 00019A60 */ 0x00, 0x00, 0x00, 0x0F, 0x00, 0x17, 0x00, 0x1F, 0x00, 0x25, 0x00, 0x29, 0x00, 0x94, 0x01, 0x3A, -/* 00019A70 */ 0x00, 0x42, 0x00, 0x00, 0x78, 0x9A, 0x01, 0x00, 0xBF, 0x5C, 0x0E, 0x01, 0x00, 0x88, 0x01, 0x00, -/* 00019A80 */ 0xFE, 0xA7, 0x03, 0x19, 0xA2, 0x41, 0xD1, 0x00, 0x45, 0xFE, 0xC4, 0xA2, 0xFF, 0x00, 0x10, 0x01, -/* 00019A90 */ 0x00, 0x02, 0x02, 0xFE, 0xC4, 0xA2, 0xFE, 0x77, 0x01, 0xFE, 0x77, 0x01, 0x41, 0x04, 0x06, 0x08, -/* 00019AA0 */ 0x04, 0x1F, 0x1F, 0x03, 0x01, 0x01, 0x01, 0x03, 0x07, 0x07, 0x08, 0x0B, 0x06, 0xFE, 0xF5, 0x03, -/* 00019AB0 */ 0x77, 0x8D, 0x01, 0x03, 0x08, 0x00, 0x00, 0x4B, 0x08, 0x15, 0x03, 0x00, 0x08, 0x02, 0x09, 0x33, -/* 00019AC0 */ 0x00, 0x8D, 0x01, 0x03, 0x08, 0x00, 0x00, 0x4B, 0x08, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x03, 0x5B, -/* 00019AD0 */ 0x01, 0x06, 0x00, 0x00, 0x8D, 0x01, 0x04, 0x09, 0x01, 0x00, 0x4B, 0x09, 0x5B, 0x02, 0x09, 0x00, -/* 00019AE0 */ 0x00, 0xEE, 0x03, 0x08, 0x08, 0x00, 0x00, 0x14, 0x03, 0x00, 0x08, 0x04, 0x09, 0x05, 0x00, 0xA6, -/* 00019AF0 */ 0x00, 0x09, 0x32, 0x00, 0x8D, 0x01, 0x02, 0x08, 0x02, 0x00, 0x4B, 0x08, 0x2D, 0x08, 0x08, 0x06, -/* 00019B00 */ 0x15, 0x03, 0x00, 0x08, 0x05, 0x09, 0x1C, 0x00, 0x8D, 0x01, 0x04, 0x08, 0x01, 0x00, 0x4B, 0x08, -/* 00019B10 */ 0x8D, 0x01, 0x02, 0x09, 0x02, 0x00, 0x4B, 0x09, 0x96, 0x09, 0x09, 0x06, 0x00, 0x00, 0x9B, 0x09, -/* 00019B20 */ 0x08, 0x06, 0x00, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xE2, 0xA2, 0x05, 0x00, 0x00, 0x00, 0x00, -/* 00019B30 */ 0x3E, 0x00, 0xB9, 0x00, 0x05, 0x00, 0x23, 0x00, 0x14, 0x00, 0x41, 0x00, 0x1E, 0x00, 0x3B, 0x00, -/* 00019B40 */ 0x00, 0xBF, 0x5C, 0x08, 0x01, 0x00, 0x88, 0x01, 0x00, 0xFE, 0x8B, 0x03, 0x55, 0xA2, 0x41, 0xD1, -/* 00019B50 */ 0x00, 0x43, 0xFE, 0x62, 0x9D, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x62, 0x9D, 0x7F, -/* 00019B60 */ 0x7F, 0x01, 0x05, 0x03, 0x06, 0x05, 0x10, 0x10, 0x03, 0x01, 0x02, 0x05, 0x08, 0x37, 0x59, 0x06, -/* 00019B70 */ 0xB2, 0x04, 0x06, 0x8D, 0x02, 0x18, 0x06, 0x00, 0x00, 0x4B, 0x06, 0x07, 0x04, 0x00, 0x5A, 0x00, -/* 00019B80 */ 0x02, 0x5B, 0x01, 0x04, 0x00, 0x00, 0x8D, 0x01, 0x02, 0x07, 0x01, 0x00, 0x4B, 0x07, 0x5B, 0x02, -/* 00019B90 */ 0x07, 0x00, 0x00, 0x5B, 0x03, 0x03, 0x00, 0x00, 0xEE, 0x04, 0x00, 0x06, 0x00, 0x00, 0x09, 0x02, -/* 00019BA0 */ 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x83, 0x9D, 0x02, 0x05, 0x00, 0x00, 0x00, 0x30, 0x00, 0x5D, -/* 00019BB0 */ 0x00, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x73, 0x03, 0x30, 0xA2, 0x41, -/* 00019BC0 */ 0xC1, 0x00, 0xFE, 0x7A, 0x03, 0x42, 0xFE, 0x9D, 0x97, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, -/* 00019BD0 */ 0xFE, 0x9D, 0x97, 0xFE, 0x8E, 0x01, 0xFE, 0x8E, 0x01, 0x01, 0x07, 0x05, 0x0A, 0x03, 0x26, 0x25, -/* 00019BE0 */ 0x02, 0x04, 0x02, 0x03, 0x03, 0x03, 0x03, 0x09, 0x07, 0x05, 0xFE, 0x3C, 0x03, 0x08, 0xA1, 0x4F, -/* 00019BF0 */ 0x08, 0x14, 0x0A, 0x00, 0x05, 0x02, 0xA6, 0x0A, 0x14, 0x03, 0x00, 0x05, 0x0A, 0x09, 0x1F, 0x00, -/* 00019C00 */ 0x8D, 0x02, 0x03, 0x0B, 0x00, 0x00, 0x6B, 0x0A, 0x0B, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0B, -/* 00019C10 */ 0x5B, 0x01, 0x06, 0x00, 0x00, 0xF2, 0x02, 0xFF, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8D, -/* 00019C20 */ 0x02, 0x03, 0x0B, 0x00, 0x00, 0x6B, 0x0A, 0x0B, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0B, 0x5B, -/* 00019C30 */ 0x01, 0x05, 0x01, 0x00, 0xF2, 0x02, 0x0A, 0x0A, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x08, -/* 00019C40 */ 0x0A, 0x0E, 0x0C, 0x00, 0x08, 0x60, 0x0A, 0x08, 0x02, 0x15, 0x03, 0x00, 0x0A, 0x03, 0x09, 0x1F, -/* 00019C50 */ 0x00, 0x8D, 0x02, 0x03, 0x0B, 0x00, 0x00, 0x6B, 0x0A, 0x0B, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 00019C60 */ 0x0B, 0x5B, 0x01, 0x06, 0x02, 0x00, 0xF2, 0x02, 0xFF, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, -/* 00019C70 */ 0x8D, 0x01, 0x11, 0x0A, 0x01, 0x00, 0x4B, 0x0A, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, -/* 00019C80 */ 0x07, 0x03, 0x00, 0xEE, 0x02, 0x00, 0x0A, 0x03, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, -/* 00019C90 */ 0xFE, 0x8C, 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0xF6, 0x01, 0xFE, 0xCE, 0x97, 0x07, 0x02, 0x00, 0x00, -/* 00019CA0 */ 0x00, 0x0F, 0x00, 0x37, 0x00, 0x1F, 0x00, 0x40, 0x00, 0x22, 0x00, 0x3A, 0x00, 0x10, 0x00, 0x3F, -/* 00019CB0 */ 0x00, 0x1F, 0x00, 0x40, 0x00, 0x1E, 0x00, 0x2C, 0x00, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, -/* 00019CC0 */ 0x01, 0x00, 0xFE, 0x66, 0x03, 0x2F, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x79, 0x03, 0x41, 0xFE, 0x81, -/* 00019CD0 */ 0x95, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x06, 0x06, 0xFE, 0x81, 0x95, 0xFE, 0xEA, 0x01, 0xFE, 0xEA, -/* 00019CE0 */ 0x01, 0x01, 0x09, 0x05, 0x0C, 0x08, 0x2E, 0x2D, 0x02, 0x05, 0x03, 0x03, 0x03, 0x03, 0x03, 0x0B, -/* 00019CF0 */ 0x07, 0x05, 0xFE, 0x3C, 0x03, 0x08, 0xC4, 0x4F, 0x0A, 0x14, 0x0A, 0x00, 0x05, 0x02, 0xA6, 0x0C, -/* 00019D00 */ 0x14, 0x03, 0x00, 0x05, 0x0C, 0x09, 0x1F, 0x00, 0x8D, 0x02, 0x03, 0x0D, 0x00, 0x00, 0x6B, 0x0C, -/* 00019D10 */ 0x0D, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0D, 0x5B, 0x01, 0x06, 0x00, 0x00, 0xF2, 0x02, 0xFF, -/* 00019D20 */ 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8D, 0x02, 0x03, 0x0D, 0x00, 0x00, 0x6B, 0x0C, 0x0D, -/* 00019D30 */ 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0D, 0x5B, 0x01, 0x05, 0x01, 0x00, 0xF2, 0x02, 0x0C, 0x0C, -/* 00019D40 */ 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x0A, 0x0C, 0x0E, 0x0C, 0x00, 0x0A, 0x60, 0x0C, 0x0A, -/* 00019D50 */ 0x02, 0x15, 0x03, 0x00, 0x0C, 0x03, 0x09, 0x1F, 0x00, 0x8D, 0x02, 0x03, 0x0D, 0x00, 0x00, 0x6B, -/* 00019D60 */ 0x0C, 0x0D, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0D, 0x5B, 0x01, 0x06, 0x02, 0x00, 0xF2, 0x02, -/* 00019D70 */ 0xFF, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x8D, 0x01, 0x15, 0x0C, 0x01, 0x00, 0x4B, 0x0C, -/* 00019D80 */ 0x07, 0x04, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x07, 0x03, 0x00, 0x8D, 0x01, 0x11, 0x0D, 0x02, -/* 00019D90 */ 0x00, 0x4B, 0x0D, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x08, 0x04, 0x00, 0xEE, 0x02, -/* 00019DA0 */ 0x0D, 0x0D, 0x04, 0x00, 0x5B, 0x02, 0x0D, 0x03, 0x00, 0x5B, 0x03, 0x09, 0x03, 0x00, 0xEE, 0x04, -/* 00019DB0 */ 0x00, 0x0C, 0x03, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x8C, 0x02, 0xFE, 0xEF, -/* 00019DC0 */ 0x01, 0xFE, 0xF6, 0x01, 0xFE, 0xD7, 0x95, 0x07, 0x02, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x37, 0x00, -/* 00019DD0 */ 0x1F, 0x00, 0x40, 0x00, 0x22, 0x00, 0x3A, 0x00, 0x10, 0x00, 0x3F, 0x00, 0x1F, 0x00, 0x40, 0x00, -/* 00019DE0 */ 0x41, 0x00, 0x63, 0x00, 0x00, 0xBF, 0x7C, 0x19, 0xC3, 0x53, 0xA8, 0x29, 0x00, 0xFE, 0x4B, 0x03, -/* 00019DF0 */ 0x1D, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x77, 0x03, 0x40, 0xFE, 0x0A, 0x90, 0xFF, 0x00, 0x10, 0x01, -/* 00019E00 */ 0x00, 0x04, 0x04, 0xFE, 0x0A, 0x90, 0xFE, 0xE8, 0x03, 0xFE, 0xE8, 0x03, 0x01, 0x0C, 0x0F, 0x16, -/* 00019E10 */ 0x0A, 0x5E, 0x56, 0x1A, 0x02, 0x01, 0x07, 0x01, 0x05, 0x01, 0x07, 0x07, 0x07, 0x07, 0x02, 0x01, -/* 00019E20 */ 0x15, 0x16, 0xC8, 0xFE, 0x41, 0x01, 0x05, 0xFE, 0xFF, 0x03, 0x06, 0xFE, 0x00, 0x04, 0x06, 0xFE, -/* 00019E30 */ 0xAD, 0x03, 0x05, 0xFE, 0xBC, 0x03, 0x08, 0x01, 0x00, 0x01, 0x01, 0x06, 0xFE, 0x44, 0x03, 0x0C, -/* 00019E40 */ 0x06, 0xFE, 0x42, 0x03, 0x07, 0x06, 0xFE, 0x01, 0x04, 0x06, 0xFE, 0x43, 0x03, 0xFE, 0x8F, 0x01, -/* 00019E50 */ 0x4F, 0x12, 0x4F, 0x13, 0x4F, 0x14, 0xA6, 0x17, 0x14, 0x03, 0x00, 0x11, 0x17, 0x09, 0x06, 0x00, -/* 00019E60 */ 0x47, 0x17, 0x02, 0x09, 0x5C, 0x00, 0x8D, 0x01, 0x02, 0x18, 0x00, 0x00, 0x4B, 0x18, 0x07, 0x06, -/* 00019E70 */ 0x00, 0x5A, 0x00, 0x06, 0x8D, 0x02, 0x24, 0x1A, 0x01, 0x00, 0x6B, 0x19, 0x1A, 0x00, 0x07, 0x02, -/* 00019E80 */ 0x00, 0x5A, 0x00, 0x1A, 0x5B, 0x01, 0x11, 0x01, 0x00, 0xF2, 0x02, 0x19, 0x19, 0x00, 0x00, 0x00, -/* 00019E90 */ 0x00, 0x01, 0x00, 0x5B, 0x01, 0x19, 0x00, 0x00, 0x5B, 0x02, 0x03, 0x00, 0x00, 0x5B, 0x03, 0x04, -/* 00019EA0 */ 0x00, 0x00, 0xCD, 0x19, 0x02, 0x00, 0x00, 0x9F, 0x00, 0x02, 0x19, 0x9F, 0x01, 0x05, 0x19, 0x5B, -/* 00019EB0 */ 0x04, 0x19, 0x00, 0x00, 0x5B, 0x05, 0x02, 0x00, 0x00, 0xEE, 0x06, 0x18, 0x18, 0x00, 0x00, 0x47, -/* 00019EC0 */ 0x17, 0x18, 0x47, 0x12, 0x17, 0x14, 0x03, 0x00, 0x12, 0x02, 0x09, 0x24, 0x00, 0x8D, 0x01, 0x13, -/* 00019ED0 */ 0x18, 0x02, 0x00, 0x4B, 0x18, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x06, 0x5B, 0x01, 0x0F, 0x02, 0x00, -/* 00019EE0 */ 0x5B, 0x02, 0x10, 0x02, 0x00, 0xEE, 0x03, 0x18, 0x18, 0x02, 0x00, 0x47, 0x17, 0x18, 0x09, 0x21, -/* 00019EF0 */ 0x00, 0x8D, 0x01, 0x12, 0x18, 0x03, 0x00, 0x4B, 0x18, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x06, 0x5B, -/* 00019F00 */ 0x01, 0x0F, 0x03, 0x00, 0x5B, 0x02, 0x10, 0x03, 0x00, 0xEE, 0x03, 0x18, 0x18, 0x03, 0x00, 0x47, -/* 00019F10 */ 0x17, 0x18, 0x47, 0x13, 0x17, 0x47, 0x14, 0x07, 0xEB, 0x00, 0xEC, 0x00, 0xA5, 0x17, 0x13, 0x01, -/* 00019F20 */ 0x00, 0x00, 0x12, 0x03, 0x00, 0x14, 0x17, 0x09, 0x65, 0x00, 0x8D, 0x02, 0x37, 0x18, 0x04, 0x00, -/* 00019F30 */ 0x4B, 0x18, 0x6B, 0x17, 0x18, 0x02, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x18, 0x5B, 0x01, 0x13, 0x04, -/* 00019F40 */ 0x00, 0x8D, 0x02, 0x24, 0x1A, 0x01, 0x00, 0x6B, 0x19, 0x1A, 0x03, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 00019F50 */ 0x1A, 0x5B, 0x01, 0x14, 0x05, 0x00, 0xF2, 0x02, 0x19, 0x19, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, -/* 00019F60 */ 0x5B, 0x02, 0x19, 0x04, 0x00, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, -/* 00019F70 */ 0x00, 0x00, 0x79, 0x0A, 0x19, 0x04, 0x79, 0x0A, 0x19, 0x05, 0x5B, 0x03, 0x19, 0x04, 0x00, 0xF2, -/* 00019F80 */ 0x04, 0xFF, 0x17, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x28, 0x14, 0x14, 0x09, 0x8B, 0xFF, 0xED, -/* 00019F90 */ 0x00, 0x8D, 0x02, 0x37, 0x18, 0x04, 0x00, 0x4B, 0x18, 0x6B, 0x17, 0x18, 0x02, 0x07, 0x04, 0x00, -/* 00019FA0 */ 0x5A, 0x00, 0x18, 0x5B, 0x01, 0x13, 0x06, 0x00, 0x5B, 0x02, 0x0D, 0x06, 0x00, 0xCB, 0x10, 0x00, -/* 00019FB0 */ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x79, 0x0A, 0x19, 0x05, 0x79, 0x0A, -/* 00019FC0 */ 0x19, 0x04, 0x79, 0x0A, 0x19, 0x06, 0x5B, 0x03, 0x19, 0x06, 0x00, 0xF2, 0x04, 0xFF, 0x17, 0x02, -/* 00019FD0 */ 0x00, 0x00, 0x00, 0x06, 0x00, 0x47, 0x00, 0x13, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x02, -/* 00019FE0 */ 0x24, 0x00, 0x10, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x01, -/* 00019FF0 */ 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, -/* 0001A000 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0xFE, 0x36, -/* 0001A010 */ 0x03, 0xC1, 0xFE, 0x88, 0x01, 0xFE, 0x37, 0x03, 0xFE, 0x81, 0x01, 0xFE, 0x82, 0x01, 0xFE, 0x80, -/* 0001A020 */ 0x01, 0xFE, 0x4C, 0x90, 0x09, 0x06, 0x00, 0x00, 0x00, 0x6F, 0x00, 0xBB, 0x00, 0x50, 0x00, 0xD4, -/* 0001A030 */ 0x00, 0x07, 0x00, 0x0B, 0x00, 0x0E, 0x00, 0x30, 0x00, 0x5F, 0x00, 0xED, 0xFF, 0x08, 0x00, 0x30, -/* 0001A040 */ 0x01, 0x44, 0x00, 0xA1, 0x00, 0x08, 0x00, 0x1D, 0x00, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x13, 0x88, -/* 0001A050 */ 0x21, 0x00, 0xFE, 0x2C, 0x03, 0x28, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x76, 0x03, 0x3F, 0xFE, 0xA1, -/* 0001A060 */ 0x89, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x05, 0x05, 0xFE, 0xA1, 0x89, 0xFE, 0xB9, 0x04, 0xFE, 0xB9, -/* 0001A070 */ 0x04, 0x41, 0x0D, 0x0D, 0x18, 0x07, 0x5B, 0x53, 0x02, 0x06, 0x02, 0x0A, 0x0A, 0x0A, 0x0A, 0x02, -/* 0001A080 */ 0x17, 0x06, 0xFE, 0xFA, 0x03, 0x01, 0x01, 0x01, 0x15, 0x08, 0x06, 0xFE, 0xFB, 0x03, 0x01, 0x00, -/* 0001A090 */ 0x01, 0x14, 0x06, 0xFE, 0xFC, 0x03, 0x06, 0xFE, 0xFD, 0x03, 0x07, 0x06, 0xFE, 0xFE, 0x03, 0xFE, -/* 0001A0A0 */ 0x7E, 0x01, 0x4F, 0x11, 0x4F, 0x12, 0x4F, 0x13, 0x4F, 0x14, 0x4F, 0x15, 0x4F, 0x16, 0x8D, 0x01, -/* 0001A0B0 */ 0x0C, 0x18, 0x00, 0x00, 0x4B, 0x18, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x05, 0x5B, 0x01, 0x0E, 0x00, -/* 0001A0C0 */ 0x00, 0x5B, 0x02, 0x02, 0x00, 0x00, 0x5B, 0x03, 0x03, 0x00, 0x00, 0x5B, 0x04, 0x04, 0x00, 0x00, -/* 0001A0D0 */ 0x5B, 0x05, 0x03, 0x00, 0x00, 0xEE, 0x06, 0x18, 0x18, 0x00, 0x00, 0x47, 0x11, 0x18, 0x8D, 0x01, -/* 0001A0E0 */ 0x0C, 0x18, 0x00, 0x00, 0x4B, 0x18, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x05, 0x5B, 0x01, 0x0E, 0x01, -/* 0001A0F0 */ 0x00, 0x5B, 0x02, 0x06, 0x01, 0x00, 0x5B, 0x03, 0x07, 0x01, 0x00, 0x5B, 0x04, 0x08, 0x01, 0x00, -/* 0001A100 */ 0x5B, 0x05, 0x0F, 0x01, 0x00, 0xEE, 0x06, 0x18, 0x18, 0x01, 0x00, 0x47, 0x12, 0x18, 0x8D, 0x02, -/* 0001A110 */ 0x37, 0x19, 0x01, 0x00, 0x4B, 0x19, 0x6B, 0x18, 0x19, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x19, -/* 0001A120 */ 0x5B, 0x01, 0x12, 0x02, 0x00, 0x5B, 0x02, 0x10, 0x02, 0x00, 0xF2, 0x03, 0x18, 0x18, 0x00, 0x00, -/* 0001A130 */ 0x00, 0x00, 0x02, 0x00, 0x47, 0x13, 0x18, 0x8D, 0x01, 0x0C, 0x18, 0x00, 0x00, 0x4B, 0x18, 0x07, -/* 0001A140 */ 0x06, 0x00, 0x5A, 0x00, 0x05, 0x5B, 0x01, 0x0E, 0x03, 0x00, 0x5B, 0x02, 0x09, 0x03, 0x00, 0x5B, -/* 0001A150 */ 0x03, 0x12, 0x03, 0x00, 0x5B, 0x04, 0x08, 0x03, 0x00, 0x5B, 0x05, 0x13, 0x03, 0x00, 0xEE, 0x06, -/* 0001A160 */ 0x18, 0x18, 0x03, 0x00, 0x47, 0x14, 0x18, 0x75, 0x11, 0x0D, 0x01, 0x75, 0x12, 0x0D, 0x02, 0x75, -/* 0001A170 */ 0x14, 0x0D, 0x03, 0x60, 0x18, 0x0E, 0x04, 0x47, 0x15, 0x18, 0x60, 0x18, 0x0E, 0x05, 0x47, 0x16, -/* 0001A180 */ 0x18, 0xA6, 0x18, 0x15, 0x0A, 0x00, 0x15, 0x18, 0xA6, 0x18, 0x15, 0x03, 0x00, 0x16, 0x18, 0x09, -/* 0001A190 */ 0x8A, 0x00, 0x8D, 0x01, 0x0C, 0x18, 0x00, 0x00, 0x4B, 0x18, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x05, -/* 0001A1A0 */ 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x79, 0x15, 0x19, -/* 0001A1B0 */ 0x06, 0x5B, 0x01, 0x19, 0x04, 0x00, 0x5B, 0x02, 0x0A, 0x04, 0x00, 0x5B, 0x03, 0x03, 0x04, 0x00, -/* 0001A1C0 */ 0x5B, 0x04, 0x04, 0x04, 0x00, 0x5B, 0x05, 0x03, 0x04, 0x00, 0xEE, 0x06, 0x18, 0x18, 0x04, 0x00, -/* 0001A1D0 */ 0x47, 0x15, 0x18, 0x8D, 0x01, 0x0C, 0x18, 0x00, 0x00, 0x4B, 0x18, 0x07, 0x06, 0x00, 0x5A, 0x00, -/* 0001A1E0 */ 0x05, 0xCB, 0x0C, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x79, 0x16, -/* 0001A1F0 */ 0x19, 0x07, 0x5B, 0x01, 0x19, 0x05, 0x00, 0x5B, 0x02, 0x0C, 0x05, 0x00, 0x5B, 0x03, 0x15, 0x05, -/* 0001A200 */ 0x00, 0x5B, 0x04, 0x04, 0x05, 0x00, 0x5B, 0x05, 0x04, 0x05, 0x00, 0xEE, 0x06, 0x18, 0x18, 0x05, -/* 0001A210 */ 0x00, 0x47, 0x16, 0x18, 0x75, 0x15, 0x0D, 0x08, 0x75, 0x16, 0x0D, 0x09, 0xA6, 0x00, 0x24, 0x00, -/* 0001A220 */ 0x02, 0x18, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, -/* 0001A230 */ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, -/* 0001A240 */ 0x02, 0x00, 0x00, 0xEE, 0xFE, 0x16, 0x02, 0xFE, 0x15, 0x02, 0xFE, 0x13, 0x02, 0xFE, 0x17, 0x02, -/* 0001A250 */ 0xFE, 0x14, 0x02, 0xFE, 0x17, 0x02, 0xFE, 0x14, 0x02, 0xFE, 0x17, 0x02, 0xFE, 0x14, 0x02, 0xFE, -/* 0001A260 */ 0xE1, 0x89, 0x0F, 0x0C, 0x00, 0x00, 0x00, 0x30, 0x00, 0x51, 0x00, 0x30, 0x00, 0x5C, 0x00, 0x29, -/* 0001A270 */ 0x00, 0x3C, 0x00, 0x30, 0x00, 0x65, 0x00, 0x04, 0x00, 0x2D, 0x00, 0x04, 0x00, 0x2E, 0x00, 0x04, -/* 0001A280 */ 0x00, 0x2F, 0x00, 0x07, 0x00, 0x35, 0x00, 0x07, 0x00, 0x35, 0x00, 0x11, 0x00, 0xEA, 0x00, 0x41, -/* 0001A290 */ 0x00, 0x6E, 0x00, 0x41, 0x00, 0x72, 0x00, 0x04, 0x00, 0x35, 0x00, 0x06, 0x00, 0x37, 0x00, 0x00, -/* 0001A2A0 */ 0x3F, 0x5D, 0x18, 0xC1, 0x03, 0x8D, 0x05, 0x00, 0xFE, 0x11, 0x03, 0x23, 0xA2, 0x41, 0xC1, 0x00, -/* 0001A2B0 */ 0xFE, 0x74, 0x03, 0x3D, 0xFE, 0x1B, 0x85, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, -/* 0001A2C0 */ 0x1B, 0x85, 0xFE, 0x81, 0x01, 0xFE, 0x81, 0x01, 0x02, 0xFE, 0xF8, 0x03, 0xFE, 0xF9, 0x03, 0x08, -/* 0001A2D0 */ 0x02, 0x07, 0x04, 0x13, 0x13, 0x02, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x04, 0x05, 0x06, -/* 0001A2E0 */ 0x45, 0x94, 0x02, 0x02, 0x4F, 0x07, 0x94, 0x03, 0x07, 0xCD, 0x07, 0x00, 0x00, 0x00, 0x94, 0x03, -/* 0001A2F0 */ 0x07, 0x8D, 0x02, 0x37, 0x08, 0x00, 0x00, 0x4B, 0x08, 0x6B, 0x07, 0x08, 0x00, 0x07, 0x03, 0x00, -/* 0001A300 */ 0x5A, 0x00, 0x08, 0x5B, 0x01, 0x03, 0x00, 0x00, 0xD3, 0x00, 0x09, 0x5B, 0x02, 0x09, 0x00, 0x00, -/* 0001A310 */ 0xF2, 0x03, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x91, 0x03, 0x00, 0x01, 0x00, 0x09, -/* 0001A320 */ 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x86, 0xFE, 0x54, 0x85, 0x04, 0x08, 0x00, 0x00, 0x00, 0x08, -/* 0001A330 */ 0x00, 0x1B, 0x00, 0x29, 0x00, 0x19, 0x01, 0x0A, 0x00, 0x13, 0x00, 0x00, 0x40, 0xA3, 0x01, 0x00, -/* 0001A340 */ 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x13, 0x03, 0x24, 0xA2, 0x41, 0xD1, 0x00, -/* 0001A350 */ 0x3E, 0xFE, 0x8B, 0x85, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x8B, 0x85, 0xF1, 0xF1, -/* 0001A360 */ 0x41, 0x06, 0x03, 0x06, 0x04, 0x21, 0x20, 0x03, 0x03, 0x05, 0x02, 0x02, 0x02, 0x02, 0x05, 0x08, -/* 0001A370 */ 0x82, 0x4F, 0x04, 0x8D, 0x02, 0x0E, 0x06, 0x00, 0x00, 0x4B, 0x06, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 0001A380 */ 0x02, 0x5B, 0x01, 0x03, 0x00, 0x00, 0xEE, 0x02, 0x06, 0x06, 0x00, 0x00, 0x60, 0x06, 0x06, 0x00, -/* 0001A390 */ 0x47, 0x04, 0x06, 0x8D, 0x02, 0x06, 0x06, 0x01, 0x00, 0x4B, 0x06, 0x07, 0x03, 0x00, 0x5A, 0x00, -/* 0001A3A0 */ 0x02, 0x8D, 0x01, 0x02, 0x07, 0x02, 0x00, 0x5B, 0x01, 0x07, 0x01, 0x00, 0x5B, 0x02, 0x04, 0x01, -/* 0001A3B0 */ 0x00, 0xEE, 0x03, 0x06, 0x06, 0x01, 0x00, 0xA6, 0x07, 0x15, 0x03, 0x00, 0x06, 0x07, 0x09, 0x2E, -/* 0001A3C0 */ 0x00, 0x8D, 0x03, 0x37, 0x07, 0x03, 0x00, 0x4B, 0x07, 0x6B, 0x06, 0x07, 0x01, 0x07, 0x03, 0x00, -/* 0001A3D0 */ 0x5A, 0x00, 0x07, 0x8D, 0x01, 0x03, 0x08, 0x04, 0x00, 0x4B, 0x08, 0x5B, 0x01, 0x08, 0x02, 0x00, -/* 0001A3E0 */ 0x5B, 0x02, 0x03, 0x02, 0x00, 0xF2, 0x03, 0xFF, 0x06, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0xA6, -/* 0001A3F0 */ 0x00, 0x24, 0x00, 0xFE, 0x28, 0x03, 0xFE, 0x18, 0x01, 0xFE, 0xAB, 0x85, 0x04, 0x02, 0x00, 0x00, -/* 0001A400 */ 0x00, 0x20, 0x00, 0x42, 0x00, 0x2E, 0x00, 0x60, 0x00, 0x30, 0x00, 0x2E, 0x00, 0x00, 0xBF, 0x7C, -/* 0001A410 */ 0x1B, 0xC3, 0x43, 0xA8, 0x09, 0x00, 0xFE, 0xE3, 0x02, 0x23, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x73, -/* 0001A420 */ 0x03, 0x3C, 0xFE, 0x8C, 0x7E, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x8C, 0x7E, 0xFE, -/* 0001A430 */ 0x12, 0x05, 0xFE, 0x12, 0x05, 0x01, 0x0F, 0x0B, 0x15, 0x04, 0x82, 0x77, 0x56, 0x02, 0x01, 0x02, -/* 0001A440 */ 0x0B, 0x03, 0x04, 0x01, 0x09, 0x09, 0x09, 0x09, 0x02, 0x14, 0x15, 0x95, 0xFE, 0x19, 0x02, 0x06, -/* 0001A450 */ 0xFE, 0xF5, 0x03, 0x06, 0xFE, 0xAD, 0x03, 0x01, 0x00, 0x06, 0xFE, 0xF6, 0x03, 0x07, 0x06, 0xFE, -/* 0001A460 */ 0xF7, 0x03, 0x08, 0x01, 0xFF, 0x01, 0x01, 0xFE, 0x23, 0x02, 0x4F, 0x0C, 0x4F, 0x0D, 0x4F, 0x0E, -/* 0001A470 */ 0x4F, 0x0F, 0x4F, 0x10, 0x4F, 0x11, 0x4F, 0x12, 0x4F, 0x13, 0x2C, 0x17, 0x0B, 0x14, 0x03, 0x00, -/* 0001A480 */ 0x17, 0x02, 0x09, 0x08, 0x00, 0xCD, 0x00, 0x00, 0x00, 0x00, 0x09, 0xFE, 0x01, 0xCD, 0x17, 0x00, -/* 0001A490 */ 0x01, 0x00, 0x47, 0x0C, 0x17, 0x2C, 0x17, 0x0B, 0x14, 0x03, 0x00, 0x17, 0x03, 0x09, 0x0F, 0x00, -/* 0001A4A0 */ 0xCD, 0x18, 0x01, 0x02, 0x00, 0x9F, 0x00, 0x0B, 0x18, 0x47, 0x17, 0x18, 0x09, 0x22, 0x00, 0x8D, -/* 0001A4B0 */ 0x02, 0x24, 0x19, 0x00, 0x00, 0x6B, 0x18, 0x19, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x19, 0x5B, -/* 0001A4C0 */ 0x01, 0x0B, 0x00, 0x00, 0xF2, 0x02, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x17, -/* 0001A4D0 */ 0x18, 0x47, 0x0D, 0x17, 0x8D, 0x02, 0x24, 0x18, 0x00, 0x00, 0x6B, 0x17, 0x18, 0x01, 0x07, 0x02, -/* 0001A4E0 */ 0x00, 0x5A, 0x00, 0x18, 0xA5, 0x19, 0x0D, 0x02, 0x00, 0x00, 0x5B, 0x01, 0x19, 0x01, 0x00, 0xF2, -/* 0001A4F0 */ 0x02, 0x17, 0x17, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x0E, 0x17, 0x47, 0x0F, 0x04, 0xEB, -/* 0001A500 */ 0x00, 0xEC, 0x00, 0x12, 0x03, 0x00, 0x0F, 0x0E, 0x09, 0x76, 0x01, 0x8D, 0x02, 0x24, 0x18, 0x00, -/* 0001A510 */ 0x00, 0x6B, 0x17, 0x18, 0x03, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x18, 0x5B, 0x01, 0x0F, 0x02, 0x00, -/* 0001A520 */ 0xF2, 0x02, 0x17, 0x17, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x47, 0x10, 0x17, 0xB9, 0x17, 0x10, -/* 0001A530 */ 0x0D, 0x00, 0x00, 0x0E, 0x43, 0x01, 0x17, 0x96, 0x17, 0x0D, 0x10, 0x01, 0x00, 0x47, 0x11, 0x17, -/* 0001A540 */ 0x2C, 0x17, 0x11, 0x15, 0x03, 0x00, 0x17, 0x03, 0x09, 0x08, 0x00, 0x2C, 0x17, 0x11, 0x15, 0x08, -/* 0001A550 */ 0x00, 0x17, 0x05, 0x14, 0x03, 0x00, 0x11, 0x06, 0x09, 0x1F, 0x00, 0x8D, 0x02, 0x03, 0x18, 0x01, -/* 0001A560 */ 0x00, 0x6B, 0x17, 0x18, 0x04, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x18, 0x5B, 0x01, 0x07, 0x03, 0x00, -/* 0001A570 */ 0xF2, 0x02, 0xFF, 0x17, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x8D, 0x02, 0x24, 0x18, 0x00, 0x00, -/* 0001A580 */ 0x6B, 0x17, 0x18, 0x03, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x18, 0x5B, 0x01, 0x11, 0x04, 0x00, 0xF2, -/* 0001A590 */ 0x02, 0x17, 0x17, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x47, 0x12, 0x17, 0x8D, 0x01, 0x10, 0x17, -/* 0001A5A0 */ 0x02, 0x00, 0x4B, 0x17, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x08, 0x5B, 0x01, 0x12, 0x05, 0x00, 0xEE, -/* 0001A5B0 */ 0x02, 0x17, 0x17, 0x05, 0x00, 0x0F, 0x1F, 0x00, 0x17, 0x8D, 0x02, 0x03, 0x18, 0x01, 0x00, 0x6B, -/* 0001A5C0 */ 0x17, 0x18, 0x05, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x18, 0x5B, 0x01, 0x12, 0x06, 0x00, 0xF2, 0x02, -/* 0001A5D0 */ 0xFF, 0x17, 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x8D, 0x02, 0x03, 0x18, 0x01, 0x00, 0x6B, 0x17, -/* 0001A5E0 */ 0x18, 0x06, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x18, 0x5B, 0x01, 0x12, 0x07, 0x00, 0xF2, 0x02, 0x17, -/* 0001A5F0 */ 0x17, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x47, 0x13, 0x17, 0xA6, 0x17, 0x14, 0x03, 0x00, 0x13, -/* 0001A600 */ 0x17, 0x09, 0x22, 0x00, 0x8D, 0x02, 0x03, 0x18, 0x01, 0x00, 0x6B, 0x17, 0x18, 0x05, 0x07, 0x02, -/* 0001A610 */ 0x00, 0x5A, 0x00, 0x18, 0x5B, 0x01, 0x12, 0x08, 0x00, 0xF2, 0x02, 0xFF, 0x17, 0x05, 0x00, 0x00, -/* 0001A620 */ 0x00, 0x08, 0x00, 0x09, 0x54, 0x00, 0x8D, 0x02, 0x37, 0x18, 0x03, 0x00, 0x4B, 0x18, 0x6B, 0x17, -/* 0001A630 */ 0x18, 0x07, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x18, 0x5B, 0x01, 0x0C, 0x09, 0x00, 0x5B, 0x02, 0x13, -/* 0001A640 */ 0x09, 0x00, 0xF2, 0x03, 0x17, 0x17, 0x07, 0x00, 0x00, 0x00, 0x09, 0x00, 0x14, 0x03, 0x00, 0x17, -/* 0001A650 */ 0x09, 0x09, 0x26, 0x00, 0x8D, 0x02, 0x37, 0x18, 0x03, 0x00, 0x4B, 0x18, 0x6B, 0x17, 0x18, 0x08, -/* 0001A660 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x18, 0x5B, 0x01, 0x0C, 0x0A, 0x00, 0x5B, 0x02, 0x13, 0x0A, 0x00, -/* 0001A670 */ 0xF2, 0x03, 0xFF, 0x17, 0x08, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x2F, 0x0F, 0x0F, 0x0A, 0x09, 0x80, -/* 0001A680 */ 0xFE, 0xED, 0x00, 0x47, 0x00, 0x0C, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x36, 0x03, -/* 0001A690 */ 0xFE, 0x3A, 0x03, 0xC1, 0xFE, 0x37, 0x03, 0xFE, 0x8B, 0x02, 0xFE, 0x87, 0x02, 0xFE, 0xD8, 0x01, -/* 0001A6A0 */ 0xFE, 0x14, 0x03, 0xFE, 0x18, 0x01, 0xFE, 0xA9, 0x7E, 0x17, 0x10, 0x00, 0x00, 0x00, 0x0B, 0x00, -/* 0001A6B0 */ 0x32, 0x00, 0x08, 0x00, 0x1E, 0x00, 0x08, 0x00, 0x19, 0x00, 0x3F, 0x00, 0x58, 0x00, 0x28, 0x00, -/* 0001A6C0 */ 0x31, 0x00, 0x07, 0x00, 0x1B, 0x00, 0x08, 0x00, 0x17, 0x00, 0x22, 0x00, 0x2D, 0x00, 0x0A, 0x00, -/* 0001A6D0 */ 0x1F, 0x00, 0x09, 0x00, 0x26, 0x00, 0x1B, 0x00, 0x69, 0x00, 0x1F, 0x00, 0x4F, 0x00, 0x22, 0x00, -/* 0001A6E0 */ 0x37, 0x00, 0x1D, 0x00, 0x40, 0x00, 0x1F, 0x00, 0x4B, 0x00, 0x22, 0x00, 0x4D, 0x00, 0x0A, 0x00, -/* 0001A6F0 */ 0x96, 0x00, 0x22, 0x00, 0x3F, 0x00, 0x2E, 0x00, 0x49, 0x00, 0x26, 0x00, 0x4D, 0x00, 0x09, 0x00, -/* 0001A700 */ 0x1B, 0x00, 0x08, 0x00, 0x11, 0x00, 0x00, 0x3F, 0x5C, 0x09, 0xC1, 0x43, 0xA8, 0x05, 0x00, 0xFE, -/* 0001A710 */ 0xC0, 0x02, 0x2B, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x72, 0x03, 0x39, 0xFE, 0xE0, 0x79, 0x02, 0xFF, -/* 0001A720 */ 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0xE0, 0x79, 0xFE, 0x40, 0x03, 0xFE, 0x40, 0x03, 0x0F, -/* 0001A730 */ 0x07, 0x0F, 0x08, 0x5B, 0x52, 0x02, 0x04, 0x07, 0x02, 0x0A, 0x0A, 0x0A, 0x0A, 0x01, 0x0E, 0x0F, -/* 0001A740 */ 0x08, 0x07, 0x0C, 0x06, 0xFE, 0xAF, 0x03, 0x0B, 0xFE, 0x74, 0x01, 0x4F, 0x08, 0x4F, 0x09, 0x4F, -/* 0001A750 */ 0x0A, 0x4F, 0x0B, 0x4F, 0x0C, 0x4F, 0x0D, 0x8D, 0x01, 0x0E, 0x10, 0x00, 0x00, 0x4B, 0x10, 0x07, -/* 0001A760 */ 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x07, 0x00, 0x00, 0xEE, 0x02, 0x10, 0x10, 0x00, 0x00, -/* 0001A770 */ 0x47, 0x08, 0x10, 0x14, 0x03, 0x00, 0x08, 0x03, 0x09, 0x06, 0x00, 0x47, 0x00, 0x04, 0x09, 0x3C, -/* 0001A780 */ 0x01, 0x60, 0x10, 0x08, 0x00, 0x0E, 0x6B, 0x00, 0x10, 0x8D, 0x02, 0x37, 0x11, 0x01, 0x00, 0x4B, -/* 0001A790 */ 0x11, 0x6B, 0x10, 0x11, 0x01, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x11, 0x60, 0x12, 0x08, 0x00, 0x5B, -/* 0001A7A0 */ 0x01, 0x12, 0x01, 0x00, 0x5B, 0x02, 0x05, 0x01, 0x00, 0xF2, 0x03, 0x10, 0x10, 0x01, 0x00, 0x00, -/* 0001A7B0 */ 0x00, 0x01, 0x00, 0x47, 0x09, 0x10, 0x8D, 0x02, 0x37, 0x11, 0x01, 0x00, 0x4B, 0x11, 0x6B, 0x10, -/* 0001A7C0 */ 0x11, 0x02, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x11, 0x5B, 0x01, 0x09, 0x02, 0x00, 0xF2, 0x02, 0x10, -/* 0001A7D0 */ 0x10, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x47, 0x0A, 0x10, 0xA5, 0x10, 0x09, 0x03, 0x00, 0x00, -/* 0001A7E0 */ 0xA5, 0x11, 0x0A, 0x04, 0x01, 0x00, 0x15, 0x03, 0x00, 0x10, 0x11, 0x09, 0x06, 0x00, 0x47, 0x00, -/* 0001A7F0 */ 0x04, 0x09, 0xC9, 0x00, 0x60, 0x10, 0x08, 0x05, 0x0E, 0xB9, 0x00, 0x10, 0x8D, 0x02, 0x37, 0x11, -/* 0001A800 */ 0x01, 0x00, 0x4B, 0x11, 0x6B, 0x10, 0x11, 0x01, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x11, 0x60, 0x12, -/* 0001A810 */ 0x08, 0x05, 0x5B, 0x01, 0x12, 0x03, 0x00, 0x5B, 0x02, 0x05, 0x03, 0x00, 0xF2, 0x03, 0x10, 0x10, -/* 0001A820 */ 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x47, 0x0B, 0x10, 0x8D, 0x02, 0x37, 0x11, 0x01, 0x00, 0x4B, -/* 0001A830 */ 0x11, 0x6B, 0x10, 0x11, 0x06, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x11, 0x8D, 0x02, 0x37, 0x13, 0x01, -/* 0001A840 */ 0x00, 0x4B, 0x13, 0x6B, 0x12, 0x13, 0x07, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x13, 0x5B, 0x01, 0x0B, -/* 0001A850 */ 0x05, 0x00, 0xD3, 0x00, 0x14, 0x5B, 0x02, 0x14, 0x05, 0x00, 0xF2, 0x03, 0x12, 0x12, 0x07, 0x00, -/* 0001A860 */ 0x00, 0x00, 0x05, 0x00, 0x5B, 0x01, 0x12, 0x04, 0x00, 0xD3, 0x01, 0x12, 0x5B, 0x02, 0x12, 0x04, -/* 0001A870 */ 0x00, 0xF2, 0x03, 0x10, 0x10, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x47, 0x0C, 0x10, 0x8D, 0x02, -/* 0001A880 */ 0x37, 0x11, 0x01, 0x00, 0x4B, 0x11, 0x6B, 0x10, 0x11, 0x02, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x11, -/* 0001A890 */ 0x5B, 0x01, 0x0C, 0x06, 0x00, 0xF2, 0x02, 0x10, 0x10, 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, 0x47, -/* 0001A8A0 */ 0x0D, 0x10, 0xA5, 0x10, 0x0C, 0x08, 0x02, 0x00, 0xA5, 0x11, 0x0D, 0x09, 0x03, 0x00, 0x43, 0x00, -/* 0001A8B0 */ 0x10, 0x11, 0x09, 0x08, 0x00, 0x47, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, -/* 0001A8C0 */ 0xF3, 0x03, 0xFE, 0x45, 0x01, 0xFE, 0x1A, 0x03, 0xC1, 0xC1, 0xFE, 0xF4, 0x03, 0xC5, 0x7E, 0xC1, -/* 0001A8D0 */ 0xC1, 0xFE, 0xFC, 0x79, 0x0F, 0x0C, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x2D, 0x00, 0x08, 0x00, 0x23, -/* 0001A8E0 */ 0x00, 0x06, 0x00, 0x45, 0x00, 0x08, 0x00, 0x23, 0x00, 0x2D, 0x00, 0x3C, 0x00, 0x24, 0x00, 0x38, -/* 0001A8F0 */ 0x00, 0x14, 0x00, 0x41, 0x00, 0x06, 0x00, 0x2F, 0x00, 0x08, 0x00, 0x25, 0x00, 0x2D, 0x00, 0x44, -/* 0001A900 */ 0x00, 0x55, 0x00, 0x88, 0x00, 0x24, 0x00, 0x3C, 0x00, 0x13, 0x00, 0x49, 0x00, 0x08, 0x00, 0x11, -/* 0001A910 */ 0x00, 0x00, 0x85, 0xA9, 0x01, 0x00, 0x1A, 0xA9, 0x01, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, -/* 0001A920 */ 0x03, 0x00, 0xFE, 0xD2, 0x02, 0x62, 0xA2, 0x41, 0xD0, 0x00, 0x3B, 0xFE, 0x01, 0x10, 0xFE, 0x57, -/* 0001A930 */ 0x7C, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x57, 0x7C, 0x23, 0x23, 0x01, 0x04, 0x02, -/* 0001A940 */ 0x04, 0x03, 0x0B, 0x0B, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x28, 0x8D, 0x02, 0x37, -/* 0001A950 */ 0x05, 0x00, 0x00, 0x4B, 0x05, 0x6B, 0x04, 0x05, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x05, 0x5B, -/* 0001A960 */ 0x01, 0x02, 0x00, 0x00, 0xF2, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, -/* 0001A970 */ 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x63, 0x01, 0xFE, 0x64, 0x7C, 0x02, 0x00, 0x00, 0x00, 0x00, -/* 0001A980 */ 0x26, 0x00, 0x16, 0x00, 0x00, 0xBF, 0x4C, 0x01, 0xC0, 0x03, 0x80, 0x03, 0x00, 0xFE, 0xD2, 0x02, -/* 0001A990 */ 0x3E, 0xA2, 0x41, 0xD0, 0x00, 0x3A, 0xFE, 0x01, 0x10, 0xFE, 0x33, 0x7C, 0xFF, 0x00, 0x10, 0x01, -/* 0001A9A0 */ 0x00, 0x02, 0x02, 0xFE, 0x33, 0x7C, 0x21, 0x21, 0x01, 0x02, 0x03, 0x04, 0x06, 0x06, 0x02, 0x01, -/* 0001A9B0 */ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x11, 0xA5, 0x04, 0x03, 0x00, 0x00, 0x00, 0x43, 0x00, 0x04, -/* 0001A9C0 */ 0x02, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xC1, 0xFE, 0x40, 0x7C, 0x02, 0x00, 0x00, 0x00, -/* 0001A9D0 */ 0x00, 0x0F, 0x00, 0x14, 0x00, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0xA8, -/* 0001A9E0 */ 0x02, 0x25, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x71, 0x03, 0x38, 0xFE, 0x6F, 0x76, 0xFF, 0x00, 0x10, -/* 0001A9F0 */ 0x01, 0x00, 0x02, 0x02, 0xFE, 0x6F, 0x76, 0xE0, 0xE0, 0x01, 0x05, 0x04, 0x06, 0x04, 0x1D, 0x1C, -/* 0001AA00 */ 0x02, 0x03, 0x04, 0x02, 0x02, 0x02, 0x02, 0x05, 0x08, 0x07, 0x79, 0x8D, 0x02, 0x24, 0x07, 0x00, -/* 0001AA10 */ 0x00, 0x6B, 0x06, 0x07, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x07, 0x5B, 0x01, 0x04, 0x00, 0x00, -/* 0001AA20 */ 0xF2, 0x02, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x04, 0x06, 0x8D, 0x01, 0x0D, -/* 0001AA30 */ 0x06, 0x01, 0x00, 0x4B, 0x06, 0x0F, 0x14, 0x00, 0x06, 0x8D, 0x01, 0x03, 0x06, 0x02, 0x00, 0x4B, -/* 0001AA40 */ 0x06, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x02, 0xEE, 0x01, 0xFF, 0x06, 0x01, 0x00, 0x8D, 0x02, 0x03, -/* 0001AA50 */ 0x07, 0x03, 0x00, 0x6B, 0x06, 0x07, 0x01, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x07, 0x5B, 0x01, 0x04, -/* 0001AA60 */ 0x02, 0x00, 0x8D, 0x01, 0x0D, 0x08, 0x01, 0x00, 0x4B, 0x08, 0x5B, 0x02, 0x08, 0x02, 0x00, 0xF2, -/* 0001AA70 */ 0x03, 0x06, 0x06, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x44, 0x00, 0x06, 0x03, 0x09, 0x02, 0x00, -/* 0001AA80 */ 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x37, 0x03, 0xFE, 0x83, 0x02, 0xFE, 0x89, 0x76, 0x05, 0x00, 0x00, -/* 0001AA90 */ 0x00, 0x00, 0x22, 0x00, 0x29, 0x00, 0x0C, 0x00, 0x25, 0x00, 0x14, 0x00, 0x2F, 0x00, 0x35, 0x00, -/* 0001AAA0 */ 0x48, 0x00, 0x00, 0x3F, 0x5D, 0x08, 0x01, 0x00, 0x8D, 0x05, 0x00, 0xFE, 0x2E, 0x02, 0x1A, 0xA0, -/* 0001AAB0 */ 0x41, 0xD1, 0x00, 0x36, 0xFE, 0x9C, 0x5A, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, -/* 0001AAC0 */ 0x9C, 0x5A, 0xFE, 0xA8, 0x1B, 0xFE, 0xA8, 0x1B, 0x02, 0xFE, 0x83, 0x03, 0xFE, 0xCB, 0x03, 0x1B, -/* 0001AAD0 */ 0x26, 0x3D, 0x04, 0xC7, 0x9C, 0x02, 0x04, 0x02, 0x3A, 0x3B, 0x3C, 0x05, 0xFE, 0xCC, 0x03, 0x05, -/* 0001AAE0 */ 0xFE, 0xCD, 0x03, 0x05, 0xFE, 0xCE, 0x03, 0x06, 0xFE, 0xCF, 0x03, 0x06, 0xFE, 0xD0, 0x03, 0x05, -/* 0001AAF0 */ 0xFE, 0xD1, 0x03, 0x05, 0xFE, 0xD2, 0x03, 0x05, 0xFE, 0xD3, 0x03, 0x05, 0xFE, 0xD4, 0x03, 0x05, -/* 0001AB00 */ 0xFE, 0xD5, 0x03, 0x05, 0xFE, 0xD6, 0x03, 0x05, 0xFE, 0xD7, 0x03, 0x05, 0xFE, 0xD8, 0x03, 0x05, -/* 0001AB10 */ 0xFE, 0xD9, 0x03, 0x05, 0xFE, 0xDA, 0x03, 0x05, 0xFE, 0xDB, 0x03, 0x06, 0xFE, 0x5B, 0x03, 0x05, -/* 0001AB20 */ 0xFE, 0xDC, 0x03, 0x05, 0xFE, 0xDD, 0x03, 0x05, 0xFE, 0xDE, 0x03, 0x05, 0xFE, 0xDF, 0x03, 0x05, -/* 0001AB30 */ 0xFE, 0xE0, 0x03, 0x05, 0xFE, 0xE1, 0x03, 0x05, 0xFE, 0xE2, 0x03, 0x05, 0xFE, 0xE3, 0x03, 0x05, -/* 0001AB40 */ 0xFE, 0xE4, 0x03, 0x05, 0xFE, 0xE5, 0x03, 0x05, 0xFE, 0xE6, 0x03, 0x05, 0xFE, 0xE7, 0x03, 0x05, -/* 0001AB50 */ 0xFE, 0xE8, 0x03, 0x05, 0xFE, 0xE9, 0x03, 0x05, 0xFE, 0xEA, 0x03, 0x05, 0xFE, 0xEB, 0x03, 0x06, -/* 0001AB60 */ 0xFE, 0xEC, 0x03, 0x06, 0xFE, 0xED, 0x03, 0x06, 0xFE, 0xEE, 0x03, 0xFE, 0xEC, 0x02, 0x4F, 0x26, -/* 0001AB70 */ 0x4F, 0x27, 0x4F, 0x28, 0x4F, 0x29, 0x4F, 0x2A, 0x4F, 0x2B, 0x4F, 0x2C, 0x4F, 0x2D, 0x4F, 0x2E, -/* 0001AB80 */ 0x4F, 0x2F, 0x4F, 0x30, 0x4F, 0x31, 0x4F, 0x32, 0x4F, 0x33, 0x4F, 0x34, 0x4F, 0x35, 0x4F, 0x36, -/* 0001AB90 */ 0x4F, 0x37, 0x4F, 0x38, 0x4F, 0x39, 0x4F, 0x3D, 0x94, 0x02, 0x3D, 0x4F, 0x3D, 0x94, 0x03, 0x3D, -/* 0001ABA0 */ 0x47, 0x26, 0x02, 0x47, 0x27, 0x03, 0x47, 0x3D, 0x04, 0x01, 0x04, 0x01, 0x3E, 0x26, 0x2F, 0x3D, -/* 0001ABB0 */ 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, 0x05, 0x01, 0x04, 0x01, 0x3E, 0x27, 0x2F, 0x3D, 0x3D, 0x3E, 0x2F, -/* 0001ABC0 */ 0x3D, 0x3D, 0x06, 0x47, 0x28, 0x3D, 0x47, 0x29, 0x07, 0x2F, 0x3D, 0x08, 0x09, 0x47, 0x2A, 0x3D, -/* 0001ABD0 */ 0x47, 0x3D, 0x0A, 0x01, 0x04, 0x01, 0x3E, 0x29, 0x2F, 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, 0x05, -/* 0001ABE0 */ 0x01, 0x04, 0x01, 0x3E, 0x2A, 0x2F, 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, 0x0B, 0x47, 0x2B, 0x3D, -/* 0001ABF0 */ 0x47, 0x3D, 0x0C, 0x01, 0x04, 0x01, 0x3E, 0x28, 0x2F, 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, 0x0D, -/* 0001AC00 */ 0x47, 0x2C, 0x3D, 0x47, 0x3D, 0x0A, 0x01, 0x04, 0x01, 0x3E, 0x27, 0x2F, 0x3D, 0x3D, 0x3E, 0x2F, -/* 0001AC10 */ 0x3D, 0x3D, 0x0E, 0x47, 0x2D, 0x3D, 0x47, 0x3D, 0x0A, 0x01, 0x04, 0x01, 0x3E, 0x2D, 0x2F, 0x3D, -/* 0001AC20 */ 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, 0x0F, 0x01, 0x04, 0x01, 0x3E, 0x28, 0x2F, 0x3D, 0x3D, 0x3E, 0x2F, -/* 0001AC30 */ 0x3D, 0x3D, 0x10, 0x47, 0x2E, 0x3D, 0x47, 0x3D, 0x0A, 0x01, 0x04, 0x01, 0x3E, 0x28, 0x2F, 0x3D, -/* 0001AC40 */ 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, 0x11, 0x01, 0x04, 0x01, 0x3E, 0x27, 0x2F, 0x3D, 0x3D, 0x3E, 0x2F, -/* 0001AC50 */ 0x3D, 0x3D, 0x12, 0x01, 0x04, 0x01, 0x3E, 0x28, 0x2F, 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, 0x13, -/* 0001AC60 */ 0x47, 0x2F, 0x3D, 0x47, 0x3D, 0x0A, 0x01, 0x04, 0x01, 0x3E, 0x26, 0x2F, 0x3D, 0x3D, 0x3E, 0x2F, -/* 0001AC70 */ 0x3D, 0x3D, 0x14, 0x01, 0x04, 0x01, 0x3E, 0x27, 0x2F, 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, 0x13, -/* 0001AC80 */ 0x47, 0x30, 0x3D, 0x47, 0x3D, 0x0A, 0x01, 0x04, 0x01, 0x3E, 0x26, 0x2F, 0x3D, 0x3D, 0x3E, 0x2F, -/* 0001AC90 */ 0x3D, 0x3D, 0x15, 0x47, 0x31, 0x3D, 0x47, 0x3D, 0x0A, 0x01, 0x04, 0x01, 0x3E, 0x26, 0x2F, 0x3D, -/* 0001ACA0 */ 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, 0x16, 0x01, 0x04, 0x01, 0x3E, 0x26, 0x2F, 0x3D, 0x3D, 0x3E, 0x2F, -/* 0001ACB0 */ 0x3D, 0x3D, 0x17, 0x47, 0x32, 0x3D, 0x47, 0x3E, 0x12, 0x01, 0x04, 0x01, 0x3F, 0x26, 0x2F, 0x3E, -/* 0001ACC0 */ 0x3E, 0x3F, 0x2F, 0x3E, 0x3E, 0x18, 0xFC, 0x3D, 0x0A, 0x3E, 0x05, 0x47, 0x3E, 0x19, 0x01, 0x04, -/* 0001ACD0 */ 0x01, 0x3F, 0x32, 0x2F, 0x3E, 0x3E, 0x3F, 0x2F, 0x3E, 0x3E, 0x1A, 0x47, 0x3F, 0x05, 0x01, 0x04, -/* 0001ACE0 */ 0x01, 0x40, 0x26, 0x2F, 0x3F, 0x3F, 0x40, 0x2F, 0x3F, 0x3F, 0x1B, 0xFE, 0x3D, 0x3E, 0x3F, 0x02, -/* 0001ACF0 */ 0xFD, 0x3D, 0x0B, 0x04, 0x47, 0x33, 0x3D, 0x47, 0x3D, 0x1C, 0x01, 0x04, 0x01, 0x3E, 0x33, 0x2F, -/* 0001AD00 */ 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, 0x0B, 0x47, 0x3E, 0x1D, 0x01, 0x04, 0x01, 0x3F, 0x31, 0x2F, -/* 0001AD10 */ 0x3E, 0x3E, 0x3F, 0x2F, 0x3E, 0x3E, 0x1E, 0x2F, 0x3D, 0x3D, 0x3E, 0x47, 0x3E, 0x1D, 0x01, 0x04, -/* 0001AD20 */ 0x01, 0x3F, 0x30, 0x2F, 0x3E, 0x3E, 0x3F, 0x2F, 0x3E, 0x3E, 0x1E, 0x2F, 0x3D, 0x3D, 0x3E, 0x47, -/* 0001AD30 */ 0x34, 0x3D, 0x47, 0x3D, 0x1F, 0x01, 0x04, 0x01, 0x3E, 0x2F, 0x2F, 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, -/* 0001AD40 */ 0x3D, 0x20, 0x47, 0x3E, 0x1F, 0x01, 0x04, 0x01, 0x3F, 0x2E, 0x2F, 0x3E, 0x3E, 0x3F, 0x2F, 0x3E, -/* 0001AD50 */ 0x3E, 0x20, 0x2F, 0x3D, 0x3D, 0x3E, 0x47, 0x3E, 0x19, 0x01, 0x04, 0x01, 0x3F, 0x2C, 0x2F, 0x3E, -/* 0001AD60 */ 0x3E, 0x3F, 0x2F, 0x3E, 0x3E, 0x21, 0x2F, 0x3D, 0x3D, 0x3E, 0x47, 0x35, 0x3D, 0x47, 0x3D, 0x22, -/* 0001AD70 */ 0x01, 0x04, 0x01, 0x3E, 0x34, 0x2F, 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, 0x22, 0x01, 0x04, 0x01, -/* 0001AD80 */ 0x3E, 0x35, 0x2F, 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, 0x22, 0x47, 0x36, 0x3D, 0x47, 0x3D, 0x0A, -/* 0001AD90 */ 0x01, 0x04, 0x01, 0x3E, 0x36, 0x2F, 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, 0x05, 0x01, 0x04, 0x01, -/* 0001ADA0 */ 0x3E, 0x2C, 0x2F, 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, 0x05, 0x01, 0x04, 0x01, 0x3E, 0x2B, 0x2F, -/* 0001ADB0 */ 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, 0x0B, 0x47, 0x37, 0x3D, 0x8D, 0x02, 0x09, 0x3D, 0x00, 0x00, -/* 0001ADC0 */ 0x07, 0x03, 0x00, 0x47, 0x3E, 0x23, 0x01, 0x04, 0x01, 0x3F, 0x34, 0x2F, 0x3E, 0x3E, 0x3F, 0x2F, -/* 0001ADD0 */ 0x3E, 0x3E, 0x24, 0x5B, 0x01, 0x3E, 0x00, 0x00, 0x5B, 0x02, 0x25, 0x00, 0x00, 0xC2, 0x03, 0x3D, -/* 0001ADE0 */ 0x3D, 0x00, 0x00, 0x47, 0x38, 0x3D, 0x8D, 0x02, 0x09, 0x3D, 0x00, 0x00, 0x07, 0x03, 0x00, 0x47, -/* 0001ADF0 */ 0x3E, 0x23, 0x01, 0x04, 0x01, 0x3F, 0x35, 0x2F, 0x3E, 0x3E, 0x3F, 0x2F, 0x3E, 0x3E, 0x24, 0x5B, -/* 0001AE00 */ 0x01, 0x3E, 0x01, 0x00, 0x5B, 0x02, 0x25, 0x01, 0x00, 0xC2, 0x03, 0x3D, 0x3D, 0x01, 0x00, 0x47, -/* 0001AE10 */ 0x39, 0x3D, 0x8D, 0x02, 0x09, 0x3D, 0x00, 0x00, 0x07, 0x03, 0x00, 0x47, 0x3E, 0x23, 0x01, 0x04, -/* 0001AE20 */ 0x01, 0x3F, 0x37, 0x2F, 0x3E, 0x3E, 0x3F, 0x2F, 0x3E, 0x3E, 0x24, 0x5B, 0x01, 0x3E, 0x02, 0x00, -/* 0001AE30 */ 0x5B, 0x02, 0x25, 0x02, 0x00, 0xC2, 0x03, 0x3D, 0x3D, 0x02, 0x00, 0x94, 0x02, 0x3D, 0x8D, 0x02, -/* 0001AE40 */ 0x02, 0x3D, 0x01, 0x00, 0x07, 0x01, 0x00, 0xC2, 0x01, 0x3D, 0x3D, 0x03, 0x00, 0x94, 0x03, 0x3D, -/* 0001AE50 */ 0xD3, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x68, 0x5F, 0x18, 0x32, 0x00, -/* 0001AE60 */ 0x00, 0x00, 0x03, 0x00, 0x1F, 0x00, 0x03, 0x00, 0x1F, 0x00, 0x20, 0x00, 0x33, 0x00, 0x03, 0x00, -/* 0001AE70 */ 0x77, 0x00, 0x07, 0x00, 0xC0, 0x00, 0x20, 0x00, 0x44, 0x00, 0x13, 0x00, 0x7D, 0x00, 0x13, 0x00, -/* 0001AE80 */ 0x94, 0x00, 0x20, 0x00, 0x83, 0x00, 0x2D, 0x00, 0x83, 0x00, 0x20, 0x00, 0x74, 0x00, 0x13, 0x00, -/* 0001AE90 */ 0x6A, 0x00, 0x20, 0x00, 0x7A, 0x00, 0x41, 0x00, 0xAF, 0x03, 0x3B, 0x00, 0x4C, 0x01, 0x3B, 0x00, -/* 0001AEA0 */ 0x5A, 0x01, 0x20, 0x00, 0x4B, 0x00, 0x2D, 0x00, 0xBA, 0x00, 0x2C, 0x00, 0x74, 0x00, 0x2C, 0x00, -/* 0001AEB0 */ 0x92, 0x00, 0x2C, 0x00, 0x93, 0x00, 0x12, 0x00, 0x34, 0x00, 0x08, 0x00, 0x59, 0x08, 0x00, 0xC3, -/* 0001AEC0 */ 0xAE, 0x01, 0x00, 0xBF, 0x7C, 0x0B, 0xC3, 0x43, 0xA8, 0x09, 0x00, 0xFE, 0x6A, 0x02, 0x0F, 0xA2, -/* 0001AED0 */ 0x41, 0xD1, 0x00, 0x37, 0xFE, 0xF1, 0x6D, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0xF1, -/* 0001AEE0 */ 0x6D, 0xFE, 0x4C, 0x08, 0xFE, 0x4C, 0x08, 0x01, 0x10, 0x0B, 0x13, 0x09, 0x91, 0x86, 0x33, 0x03, -/* 0001AEF0 */ 0x03, 0x0F, 0x07, 0x03, 0x02, 0x11, 0x11, 0x11, 0x11, 0x03, 0x12, 0x13, 0xFE, 0x5A, 0x01, 0xFE, -/* 0001AF00 */ 0x26, 0x02, 0xFE, 0x89, 0x01, 0xFE, 0xB7, 0x01, 0x07, 0x01, 0x01, 0x01, 0x02, 0x06, 0xFE, 0xAF, -/* 0001AF10 */ 0x03, 0x01, 0x03, 0x01, 0x04, 0x01, 0x05, 0x01, 0x00, 0x06, 0xFE, 0xEF, 0x03, 0xFE, 0x56, 0x02, -/* 0001AF20 */ 0x4F, 0x0C, 0x4F, 0x0D, 0x4F, 0x0E, 0x4F, 0x0F, 0x4F, 0x10, 0x4F, 0x11, 0x8D, 0x01, 0x03, 0x17, -/* 0001AF30 */ 0x00, 0x00, 0x4B, 0x17, 0x6B, 0x16, 0x17, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x17, 0x5B, 0x01, -/* 0001AF40 */ 0x0B, 0x00, 0x00, 0xF2, 0x02, 0x16, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x0C, 0x16, -/* 0001AF50 */ 0x0E, 0x06, 0x00, 0x0C, 0x47, 0x00, 0x0C, 0x09, 0x1A, 0x02, 0x8D, 0x03, 0x37, 0x17, 0x01, 0x00, -/* 0001AF60 */ 0x4B, 0x17, 0x6B, 0x16, 0x17, 0x01, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x17, 0x5B, 0x01, 0x0B, 0x01, -/* 0001AF70 */ 0x00, 0x8D, 0x01, 0x02, 0x18, 0x02, 0x00, 0x4B, 0x18, 0x5B, 0x02, 0x18, 0x01, 0x00, 0xF2, 0x03, -/* 0001AF80 */ 0x16, 0x16, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x0D, 0x16, 0x0F, 0x06, 0x00, 0x0D, 0x47, -/* 0001AF90 */ 0x00, 0x02, 0x09, 0xDF, 0x01, 0x8D, 0x03, 0x37, 0x17, 0x01, 0x00, 0x4B, 0x17, 0x6B, 0x16, 0x17, -/* 0001AFA0 */ 0x02, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x17, 0xF2, 0x01, 0x16, 0x16, 0x02, 0x00, 0x00, 0x00, 0x02, -/* 0001AFB0 */ 0x00, 0x47, 0x0E, 0x16, 0x96, 0x16, 0x0D, 0x03, 0x00, 0x00, 0x75, 0x16, 0x0E, 0x03, 0x96, 0x16, -/* 0001AFC0 */ 0x0D, 0x03, 0x01, 0x00, 0x75, 0x16, 0x0E, 0x04, 0x96, 0x16, 0x0D, 0x04, 0x02, 0x00, 0x0E, 0x22, -/* 0001AFD0 */ 0x00, 0x16, 0x96, 0x16, 0x0D, 0x04, 0x03, 0x00, 0x75, 0x16, 0x0E, 0x05, 0x60, 0x17, 0x0E, 0x06, -/* 0001AFE0 */ 0x96, 0x18, 0x0D, 0x04, 0x04, 0x00, 0x2F, 0x18, 0x05, 0x18, 0x2F, 0x16, 0x17, 0x18, 0x75, 0x16, -/* 0001AFF0 */ 0x0E, 0x04, 0xFA, 0x16, 0x96, 0x16, 0x0D, 0x06, 0x05, 0x00, 0x0E, 0x22, 0x00, 0x16, 0x96, 0x16, -/* 0001B000 */ 0x0D, 0x06, 0x06, 0x00, 0x75, 0x16, 0x0E, 0x07, 0x60, 0x17, 0x0E, 0x06, 0x96, 0x18, 0x0D, 0x06, -/* 0001B010 */ 0x07, 0x00, 0x2F, 0x18, 0x05, 0x18, 0x2F, 0x16, 0x17, 0x18, 0x75, 0x16, 0x0E, 0x04, 0xFA, 0x16, -/* 0001B020 */ 0x96, 0x16, 0x0D, 0x07, 0x08, 0x00, 0x0E, 0x0A, 0x00, 0x16, 0x96, 0x16, 0x0D, 0x07, 0x09, 0x00, -/* 0001B030 */ 0x75, 0x16, 0x0E, 0x08, 0x96, 0x16, 0x0D, 0x08, 0x0A, 0x00, 0x0E, 0x08, 0x01, 0x16, 0x96, 0x16, -/* 0001B040 */ 0x0D, 0x08, 0x0B, 0x00, 0x75, 0x16, 0x0E, 0x09, 0x8D, 0x03, 0x37, 0x17, 0x01, 0x00, 0x4B, 0x17, -/* 0001B050 */ 0x6B, 0x16, 0x17, 0x0A, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x17, 0x96, 0x18, 0x0D, 0x08, 0x0C, 0x00, -/* 0001B060 */ 0x5B, 0x01, 0x18, 0x03, 0x00, 0x5B, 0x02, 0x05, 0x03, 0x00, 0xF2, 0x03, 0x16, 0x16, 0x0A, 0x00, -/* 0001B070 */ 0x00, 0x00, 0x03, 0x00, 0x47, 0x0F, 0x16, 0x47, 0x10, 0x09, 0xEB, 0x00, 0xEC, 0x00, 0xA5, 0x16, -/* 0001B080 */ 0x0F, 0x0B, 0x00, 0x00, 0x12, 0x03, 0x00, 0x10, 0x16, 0x09, 0xB8, 0x00, 0x96, 0x16, 0x0F, 0x10, -/* 0001B090 */ 0x0D, 0x00, 0x15, 0x03, 0x00, 0x16, 0x0A, 0x09, 0x03, 0x00, 0x09, 0xA1, 0x00, 0xA6, 0x16, 0x47, -/* 0001B0A0 */ 0x11, 0x16, 0x2F, 0x16, 0x10, 0x03, 0x47, 0x11, 0x16, 0xEB, 0x01, 0xEC, 0x01, 0xA5, 0x16, 0x0F, -/* 0001B0B0 */ 0x0B, 0x01, 0x00, 0x12, 0x03, 0x00, 0x11, 0x16, 0x09, 0x1A, 0x00, 0x96, 0x16, 0x0F, 0x11, 0x0E, -/* 0001B0C0 */ 0x00, 0xA5, 0x16, 0x16, 0x0C, 0x02, 0x00, 0x11, 0x03, 0x00, 0x16, 0x03, 0x09, 0x06, 0x00, 0x28, -/* 0001B0D0 */ 0x11, 0x11, 0x09, 0xD6, 0xFF, 0xED, 0x01, 0x2F, 0x16, 0x10, 0x03, 0x11, 0x03, 0x00, 0x11, 0x16, -/* 0001B0E0 */ 0x09, 0x58, 0x00, 0x47, 0x16, 0x0E, 0x8D, 0x03, 0x37, 0x18, 0x01, 0x00, 0x4B, 0x18, 0x6B, 0x17, -/* 0001B0F0 */ 0x18, 0x0D, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x18, 0x8D, 0x03, 0x37, 0x1A, 0x01, 0x00, 0x4B, 0x1A, -/* 0001B100 */ 0x6B, 0x19, 0x1A, 0x0E, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x1A, 0x5B, 0x01, 0x0F, 0x05, 0x00, 0x5B, -/* 0001B110 */ 0x02, 0x10, 0x05, 0x00, 0x5B, 0x03, 0x11, 0x05, 0x00, 0xF2, 0x04, 0x19, 0x19, 0x0E, 0x00, 0x00, -/* 0001B120 */ 0x00, 0x05, 0x00, 0x5B, 0x01, 0x19, 0x04, 0x00, 0x5B, 0x02, 0x05, 0x04, 0x00, 0xF2, 0x03, 0x17, -/* 0001B130 */ 0x17, 0x0D, 0x00, 0x00, 0x00, 0x04, 0x00, 0x75, 0x17, 0x16, 0x0F, 0x09, 0x06, 0x00, 0x28, 0x10, -/* 0001B140 */ 0x10, 0x09, 0x38, 0xFF, 0xED, 0x00, 0x8D, 0x01, 0x03, 0x17, 0x00, 0x00, 0x4B, 0x17, 0x6B, 0x16, -/* 0001B150 */ 0x17, 0x10, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x17, 0x5B, 0x01, 0x0B, 0x06, 0x00, 0x5B, 0x02, 0x0E, -/* 0001B160 */ 0x06, 0x00, 0xF2, 0x03, 0xFF, 0x16, 0x10, 0x00, 0x00, 0x00, 0x06, 0x00, 0x47, 0x00, 0x0E, 0x09, -/* 0001B170 */ 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x84, 0x01, 0xF1, 0x61, 0xFE, 0xF0, 0x03, 0xFE, 0x28, -/* 0001B180 */ 0x03, 0xFE, 0xF1, 0x03, 0xFE, 0x28, 0x03, 0xFE, 0xF2, 0x03, 0xFE, 0xF3, 0x03, 0xFE, 0xF4, 0x03, -/* 0001B190 */ 0xFE, 0x45, 0x01, 0xC1, 0xC1, 0xBC, 0xFE, 0x3F, 0x01, 0xFE, 0xB6, 0x03, 0xFE, 0x87, 0x01, 0xFE, -/* 0001B1A0 */ 0x12, 0x6E, 0x23, 0x0C, 0x00, 0x00, 0x00, 0x24, 0x00, 0x3C, 0x00, 0x04, 0x00, 0x1E, 0x00, 0x06, -/* 0001B1B0 */ 0x00, 0x2A, 0x00, 0x31, 0x00, 0x39, 0x00, 0x04, 0x00, 0x1E, 0x00, 0x06, 0x00, 0x28, 0x00, 0x1F, -/* 0001B1C0 */ 0x00, 0x24, 0x00, 0x0A, 0x00, 0x25, 0x00, 0x0A, 0x00, 0x21, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x0A, -/* 0001B1D0 */ 0x00, 0x27, 0x00, 0x18, 0x00, 0x37, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x0A, 0x00, 0x27, 0x00, 0x18, -/* 0001B1E0 */ 0x00, 0x37, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x0A, 0x00, 0x34, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x0A, -/* 0001B1F0 */ 0x00, 0x76, 0x00, 0x2F, 0x00, 0x44, 0x00, 0x07, 0x00, 0x0B, 0x00, 0x0E, 0x00, 0x36, 0x00, 0x0E, -/* 0001B200 */ 0x00, 0x39, 0x00, 0x03, 0x00, 0x35, 0x00, 0x05, 0x00, 0x20, 0x00, 0x0B, 0x00, 0x0B, 0x00, 0x22, -/* 0001B210 */ 0x00, 0x3B, 0x00, 0x08, 0x00, 0x3B, 0x01, 0x0C, 0x00, 0xFC, 0x00, 0x58, 0x00, 0xCC, 0x00, 0x03, -/* 0001B220 */ 0x00, 0x0E, 0xFC, 0x08, 0x00, 0x26, 0x04, 0x26, 0x00, 0x33, 0x00, 0x08, 0x00, 0x14, 0x00, 0x00, -/* 0001B230 */ 0xBF, 0x4C, 0x00, 0x00, 0x20, 0x88, 0x01, 0x00, 0xFE, 0x24, 0x02, 0x04, 0xA1, 0x41, 0xC1, 0x00, -/* 0001B240 */ 0xFE, 0x65, 0x03, 0x35, 0xFE, 0x40, 0x59, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0x40, -/* 0001B250 */ 0x59, 0x55, 0x55, 0x41, 0x02, 0x02, 0x03, 0x05, 0x05, 0x02, 0x01, 0x02, 0x0D, 0xE0, 0x03, 0x00, -/* 0001B260 */ 0x01, 0x34, 0x01, 0x01, 0x0D, 0x03, 0xA6, 0x00, 0x24, 0x00, 0x0A, 0xFE, 0xCA, 0x03, 0x01, 0xFE, -/* 0001B270 */ 0x6E, 0x59, 0x02, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x26, 0x00, 0x00, 0xBF, 0x5C, 0x0A, 0xC1, -/* 0001B280 */ 0x03, 0x88, 0x01, 0x00, 0xFE, 0x16, 0x02, 0x1C, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x6E, 0x03, 0x34, -/* 0001B290 */ 0xFE, 0x5D, 0x57, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x06, 0x06, 0xFE, 0x5D, 0x57, 0xFE, 0xC2, 0x01, -/* 0001B2A0 */ 0xFE, 0xC2, 0x01, 0x01, 0x0B, 0x06, 0x0D, 0x08, 0x39, 0x35, 0x02, 0x01, 0x05, 0x04, 0x04, 0x04, -/* 0001B2B0 */ 0x04, 0x04, 0x0C, 0x08, 0x06, 0xFE, 0xC7, 0x03, 0x05, 0xFE, 0xC8, 0x03, 0x06, 0xFE, 0xC9, 0x03, -/* 0001B2C0 */ 0xF4, 0x4F, 0x0B, 0x96, 0x0D, 0x06, 0x07, 0x00, 0x00, 0x47, 0x0B, 0x0D, 0xA6, 0x0D, 0x15, 0x03, -/* 0001B2D0 */ 0x00, 0x0B, 0x0D, 0x09, 0xD5, 0x00, 0x8D, 0x02, 0x24, 0x0E, 0x00, 0x00, 0x6B, 0x0D, 0x0E, 0x00, -/* 0001B2E0 */ 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0E, 0x5B, 0x01, 0x0B, 0x00, 0x00, 0xF2, 0x02, 0x0D, 0x0D, 0x00, -/* 0001B2F0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x0B, 0x0D, 0x8D, 0x02, 0x37, 0x0E, 0x01, 0x00, 0x4B, 0x0E, -/* 0001B300 */ 0x6B, 0x0D, 0x0E, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0E, 0x5B, 0x01, 0x0B, 0x01, 0x00, 0xF2, -/* 0001B310 */ 0x02, 0x0D, 0x0D, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0F, 0x0D, 0x00, 0x0D, 0x12, 0x08, 0x00, -/* 0001B320 */ 0x0B, 0x08, 0x11, 0x03, 0x00, 0x0B, 0x09, 0x09, 0x5D, 0x00, 0x8D, 0x02, 0x03, 0x0E, 0x02, 0x00, -/* 0001B330 */ 0x6B, 0x0D, 0x0E, 0x02, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x0E, 0x8D, 0x02, 0x0B, 0x0F, 0x03, 0x00, -/* 0001B340 */ 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x0B, 0x03, 0x00, 0xEE, 0x02, 0x0F, 0x0F, 0x03, -/* 0001B350 */ 0x00, 0x5B, 0x01, 0x0F, 0x02, 0x00, 0x5B, 0x02, 0x07, 0x02, 0x00, 0x47, 0x0F, 0x03, 0x01, 0x04, -/* 0001B360 */ 0x01, 0x10, 0x08, 0x2F, 0x0F, 0x0F, 0x10, 0x2F, 0x0F, 0x0F, 0x04, 0x01, 0x04, 0x01, 0x10, 0x09, -/* 0001B370 */ 0x2F, 0x0F, 0x0F, 0x10, 0x2F, 0x0F, 0x0F, 0x05, 0x5B, 0x03, 0x0F, 0x02, 0x00, 0xF2, 0x04, 0xFF, -/* 0001B380 */ 0x0D, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x8D, 0x02, 0x37, 0x0E, 0x01, 0x00, 0x4B, 0x0E, 0x6B, -/* 0001B390 */ 0x0D, 0x0E, 0x03, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0E, 0x5B, 0x01, 0x0B, 0x04, 0x00, 0xF2, 0x02, -/* 0001B3A0 */ 0x00, 0x0D, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x09, 0x08, 0x00, 0x47, 0x00, 0x0A, 0x09, 0x02, -/* 0001B3B0 */ 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x38, 0x03, 0xB4, 0xFE, 0x8F, 0x02, 0x23, 0xFE, 0xA0, 0x57, -/* 0001B3C0 */ 0x08, 0x02, 0x00, 0x00, 0x00, 0x09, 0x00, 0x27, 0x00, 0x0A, 0x00, 0x27, 0x00, 0x22, 0x00, 0x2E, -/* 0001B3D0 */ 0x00, 0x32, 0x00, 0x4C, 0x00, 0x5D, 0x00, 0x77, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x08, 0x00, 0x15, -/* 0001B3E0 */ 0x00, 0x00, 0xBF, 0x5C, 0x0A, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0xEB, 0x01, 0x04, 0xA3, 0x41, -/* 0001B3F0 */ 0xC1, 0x00, 0xFE, 0x64, 0x03, 0x33, 0xFE, 0xF2, 0x50, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x06, 0x06, -/* 0001B400 */ 0xFE, 0xF2, 0x50, 0xFE, 0xDD, 0x02, 0xFE, 0xDD, 0x02, 0x01, 0x0C, 0x0A, 0x11, 0x09, 0x53, 0x4C, -/* 0001B410 */ 0x02, 0x01, 0x08, 0x04, 0x06, 0x06, 0x06, 0x06, 0x10, 0x06, 0xFE, 0xC2, 0x03, 0x06, 0xFE, 0xAD, -/* 0001B420 */ 0x03, 0x06, 0xFE, 0xC3, 0x03, 0x01, 0xFF, 0x08, 0x05, 0xFE, 0xC4, 0x03, 0x05, 0xFE, 0xC5, 0x03, -/* 0001B430 */ 0x05, 0xFE, 0xC6, 0x03, 0xFE, 0x68, 0x01, 0x4F, 0x0F, 0x96, 0x11, 0x0A, 0x0B, 0x00, 0x00, 0x47, -/* 0001B440 */ 0x0F, 0x11, 0xA6, 0x11, 0x15, 0x03, 0x00, 0x0F, 0x11, 0x09, 0x49, 0x01, 0x0C, 0x03, 0x00, 0x0C, -/* 0001B450 */ 0x02, 0x09, 0x22, 0x00, 0x8D, 0x02, 0x24, 0x12, 0x00, 0x00, 0x6B, 0x11, 0x12, 0x00, 0x07, 0x02, -/* 0001B460 */ 0x00, 0x5A, 0x00, 0x12, 0x5B, 0x01, 0x0F, 0x00, 0x00, 0xF2, 0x02, 0x11, 0x11, 0x00, 0x00, 0x00, -/* 0001B470 */ 0x00, 0x00, 0x00, 0x47, 0x0F, 0x11, 0x0C, 0x03, 0x00, 0x0C, 0x03, 0x09, 0x22, 0x00, 0x8D, 0x02, -/* 0001B480 */ 0x24, 0x12, 0x00, 0x00, 0x6B, 0x11, 0x12, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x12, 0x5B, 0x01, -/* 0001B490 */ 0x0F, 0x01, 0x00, 0xF2, 0x02, 0x11, 0x11, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x0F, 0x11, -/* 0001B4A0 */ 0x0C, 0x03, 0x00, 0x0C, 0x04, 0x09, 0x22, 0x00, 0x8D, 0x02, 0x24, 0x12, 0x00, 0x00, 0x6B, 0x11, -/* 0001B4B0 */ 0x12, 0x02, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x12, 0x5B, 0x01, 0x0F, 0x02, 0x00, 0xF2, 0x02, 0x11, -/* 0001B4C0 */ 0x11, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x47, 0x0F, 0x11, 0xA6, 0x11, 0x15, 0x03, 0x00, 0x0D, -/* 0001B4D0 */ 0x11, 0x09, 0xBB, 0x00, 0x8D, 0x02, 0x37, 0x12, 0x01, 0x00, 0x4B, 0x12, 0x6B, 0x11, 0x12, 0x03, -/* 0001B4E0 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x12, 0x5B, 0x01, 0x0D, 0x03, 0x00, 0x5B, 0x02, 0x0F, 0x03, 0x00, -/* 0001B4F0 */ 0xF2, 0x03, 0x11, 0x11, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x0C, 0x03, 0x00, 0x11, 0x05, 0x09, -/* 0001B500 */ 0x8D, 0x00, 0x8D, 0x02, 0x03, 0x12, 0x02, 0x00, 0x6B, 0x11, 0x12, 0x04, 0x07, 0x04, 0x00, 0x5A, -/* 0001B510 */ 0x00, 0x12, 0x8D, 0x02, 0x0B, 0x13, 0x03, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x06, 0x5B, 0x01, -/* 0001B520 */ 0x0F, 0x05, 0x00, 0xEE, 0x02, 0x13, 0x13, 0x05, 0x00, 0x5B, 0x01, 0x13, 0x04, 0x00, 0x8D, 0x02, -/* 0001B530 */ 0x0B, 0x13, 0x03, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x06, 0x5B, 0x01, 0x0B, 0x06, 0x00, 0xEE, -/* 0001B540 */ 0x02, 0x13, 0x13, 0x06, 0x00, 0x5B, 0x02, 0x13, 0x04, 0x00, 0x47, 0x13, 0x07, 0x8D, 0x02, 0x37, -/* 0001B550 */ 0x15, 0x01, 0x00, 0x4B, 0x15, 0x6B, 0x14, 0x15, 0x05, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x15, 0x5B, -/* 0001B560 */ 0x01, 0x0D, 0x07, 0x00, 0x5B, 0x02, 0x09, 0x07, 0x00, 0xF2, 0x03, 0x14, 0x14, 0x05, 0x00, 0x00, -/* 0001B570 */ 0x00, 0x07, 0x00, 0x01, 0x04, 0x01, 0x15, 0x14, 0x2F, 0x13, 0x13, 0x15, 0x2F, 0x13, 0x13, 0x08, -/* 0001B580 */ 0x5B, 0x03, 0x13, 0x04, 0x00, 0xF2, 0x04, 0xFF, 0x11, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x47, -/* 0001B590 */ 0x00, 0x0F, 0x09, 0x08, 0x00, 0x47, 0x00, 0x0E, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, -/* 0001B5A0 */ 0x39, 0x03, 0xFE, 0x37, 0x03, 0xFE, 0x38, 0x03, 0xFE, 0x14, 0x03, 0xFE, 0x8F, 0x02, 0xBC, 0xFE, -/* 0001B5B0 */ 0x3A, 0x51, 0x0D, 0x02, 0x00, 0x00, 0x00, 0x09, 0x00, 0x28, 0x00, 0x0A, 0x00, 0x27, 0x00, 0x08, -/* 0001B5C0 */ 0x00, 0x29, 0x00, 0x22, 0x00, 0x45, 0x00, 0x08, 0x00, 0x28, 0x00, 0x22, 0x00, 0x3D, 0x00, 0x08, -/* 0001B5D0 */ 0x00, 0x28, 0x00, 0x22, 0x00, 0x3D, 0x00, 0x38, 0x00, 0x53, 0x00, 0x8D, 0x00, 0x84, 0x00, 0x06, -/* 0001B5E0 */ 0x00, 0x21, 0x00, 0x08, 0x00, 0x15, 0x00, 0x00, 0xBF, 0x5C, 0x28, 0xC1, 0x03, 0x88, 0x03, 0x00, -/* 0001B5F0 */ 0xFE, 0xE0, 0x01, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x3A, 0x03, 0x32, 0xFF, 0x00, 0x00, 0x40, -/* 0001B600 */ 0x02, 0xFE, 0xE5, 0x4F, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0xE5, 0x4F, 0xD8, 0xD8, -/* 0001B610 */ 0x01, 0x09, 0x06, 0x0A, 0x07, 0x2A, 0x25, 0x02, 0x05, 0x01, 0x04, 0x02, 0x02, 0x02, 0x02, 0x09, -/* 0001B620 */ 0x08, 0x01, 0x00, 0x01, 0x02, 0x01, 0x20, 0xB0, 0x8D, 0x02, 0x0A, 0x0A, 0x00, 0x00, 0x07, 0x02, -/* 0001B630 */ 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x06, 0x00, 0x00, 0xEE, 0x02, 0x0A, 0x0A, 0x00, 0x00, 0x47, -/* 0001B640 */ 0x07, 0x0A, 0x47, 0x08, 0x03, 0x8D, 0x02, 0x21, 0x0A, 0x01, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 0001B650 */ 0x02, 0x5B, 0x01, 0x07, 0x01, 0x00, 0xEE, 0x02, 0x0A, 0x0A, 0x01, 0x00, 0x0F, 0x6E, 0x00, 0x0A, -/* 0001B660 */ 0x8D, 0x02, 0x20, 0x0A, 0x02, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x07, 0x02, -/* 0001B670 */ 0x00, 0xEE, 0x02, 0x0A, 0x0A, 0x02, 0x00, 0x0E, 0x53, 0x00, 0x0A, 0x8D, 0x02, 0x37, 0x0B, 0x03, -/* 0001B680 */ 0x00, 0x4B, 0x0B, 0x6B, 0x0A, 0x0B, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0B, 0x47, 0x0C, 0x07, -/* 0001B690 */ 0x8D, 0x02, 0x37, 0x0E, 0x03, 0x00, 0x4B, 0x0E, 0x6B, 0x0D, 0x0E, 0x01, 0x07, 0x03, 0x00, 0x5A, -/* 0001B6A0 */ 0x00, 0x0E, 0x5B, 0x01, 0x04, 0x04, 0x00, 0x5B, 0x02, 0x05, 0x04, 0x00, 0xF2, 0x03, 0x0D, 0x0D, -/* 0001B6B0 */ 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x34, 0x0C, 0x0C, 0x0D, 0x00, 0x00, 0x5B, 0x01, 0x0C, 0x03, -/* 0001B6C0 */ 0x00, 0xF2, 0x02, 0x0A, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x47, 0x08, 0x0A, 0x47, 0x00, -/* 0001B6D0 */ 0x08, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x1B, 0x29, 0xFE, 0xFF, 0x4F, 0x06, 0x00, 0x00, -/* 0001B6E0 */ 0x00, 0x00, 0x1A, 0x00, 0x25, 0x00, 0x03, 0x00, 0x15, 0x00, 0x36, 0x00, 0x34, 0x00, 0x53, 0x00, -/* 0001B6F0 */ 0x3B, 0x00, 0x08, 0x00, 0x14, 0x00, 0x00, 0xBF, 0x5C, 0x08, 0x01, 0x00, 0x88, 0x03, 0x00, 0xFE, -/* 0001B700 */ 0xDC, 0x01, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x39, 0x03, 0x31, 0xFF, 0x00, 0x00, 0x40, 0x02, -/* 0001B710 */ 0xFE, 0x7E, 0x4F, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x7E, 0x4F, 0x5C, 0x5C, 0x01, -/* 0001B720 */ 0x03, 0x03, 0x05, 0x03, 0x10, 0x0E, 0x02, 0x01, 0x01, 0x04, 0x08, 0x33, 0xA6, 0x05, 0x15, 0x03, -/* 0001B730 */ 0x00, 0x03, 0x05, 0x09, 0x1D, 0x00, 0x8D, 0x02, 0x07, 0x05, 0x00, 0x00, 0x07, 0x02, 0x00, 0x5A, -/* 0001B740 */ 0x00, 0x02, 0x5B, 0x01, 0x03, 0x00, 0x00, 0xEE, 0x02, 0x05, 0x05, 0x00, 0x00, 0x47, 0x00, 0x05, -/* 0001B750 */ 0x09, 0x05, 0x00, 0xA6, 0x05, 0x47, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, -/* 0001B760 */ 0xA0, 0x4F, 0x02, 0x00, 0x00, 0x00, 0x00, 0x31, 0x00, 0x39, 0x00, 0x00, 0xBF, 0x5C, 0x08, 0x01, -/* 0001B770 */ 0x00, 0x88, 0x03, 0x00, 0xFE, 0xD8, 0x01, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x38, 0x03, 0x30, -/* 0001B780 */ 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0x26, 0x4F, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, -/* 0001B790 */ 0x26, 0x4F, 0x4D, 0x4D, 0x01, 0x03, 0x03, 0x05, 0x03, 0x10, 0x0E, 0x02, 0x01, 0x01, 0x04, 0x08, -/* 0001B7A0 */ 0x33, 0xA6, 0x05, 0x15, 0x03, 0x00, 0x03, 0x05, 0x09, 0x1D, 0x00, 0x8D, 0x02, 0x0A, 0x05, 0x00, -/* 0001B7B0 */ 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x03, 0x00, 0x00, 0xEE, 0x02, 0x05, 0x05, -/* 0001B7C0 */ 0x00, 0x00, 0x47, 0x00, 0x05, 0x09, 0x05, 0x00, 0xA7, 0x05, 0x47, 0x00, 0x05, 0x09, 0x02, 0x00, -/* 0001B7D0 */ 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x40, 0x4F, 0x02, 0x00, 0x00, 0x00, 0x00, 0x31, 0x00, 0x32, 0x00, -/* 0001B7E0 */ 0x00, 0xBF, 0x5C, 0x08, 0x01, 0x00, 0x88, 0x03, 0x00, 0xFE, 0xD4, 0x01, 0x08, 0xA2, 0x41, 0xC1, -/* 0001B7F0 */ 0x01, 0xFE, 0x37, 0x03, 0x2F, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0xC8, 0x4E, 0xFF, 0x00, 0x10, -/* 0001B800 */ 0x01, 0x00, 0x02, 0x02, 0xFE, 0xC8, 0x4E, 0x53, 0x53, 0x01, 0x03, 0x03, 0x05, 0x03, 0x10, 0x0E, -/* 0001B810 */ 0x02, 0x01, 0x01, 0x04, 0x08, 0x33, 0xA6, 0x05, 0x15, 0x03, 0x00, 0x03, 0x05, 0x09, 0x1D, 0x00, -/* 0001B820 */ 0x8D, 0x02, 0x0B, 0x05, 0x00, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x03, 0x00, -/* 0001B830 */ 0x00, 0xEE, 0x02, 0x05, 0x05, 0x00, 0x00, 0x47, 0x00, 0x05, 0x09, 0x05, 0x00, 0xA6, 0x05, 0x47, -/* 0001B840 */ 0x00, 0x05, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xE2, 0x4E, 0x02, 0x00, 0x00, 0x00, -/* 0001B850 */ 0x00, 0x31, 0x00, 0x38, 0x00, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x03, 0x00, 0xFE, 0xCD, -/* 0001B860 */ 0x01, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x36, 0x03, 0x2E, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, -/* 0001B870 */ 0x12, 0x4E, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x12, 0x4E, 0xAB, 0xAB, 0x01, 0x04, -/* 0001B880 */ 0x04, 0x06, 0x03, 0x17, 0x15, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x05, 0x07, 0x08, 0x55, -/* 0001B890 */ 0x14, 0x03, 0x00, 0x04, 0x02, 0x09, 0x1A, 0x00, 0x8D, 0x02, 0x03, 0x07, 0x00, 0x00, 0x6B, 0x06, -/* 0001B8A0 */ 0x07, 0x00, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x07, 0xF2, 0x01, 0xFF, 0x06, 0x00, 0x00, 0x00, 0x00, -/* 0001B8B0 */ 0x00, 0x00, 0xA6, 0x06, 0x15, 0x03, 0x00, 0x04, 0x06, 0x09, 0x1D, 0x00, 0x8D, 0x02, 0x08, 0x06, -/* 0001B8C0 */ 0x01, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x03, 0x5B, 0x01, 0x04, 0x01, 0x00, 0xEE, 0x02, 0x06, -/* 0001B8D0 */ 0x06, 0x01, 0x00, 0x47, 0x00, 0x06, 0x09, 0x05, 0x00, 0xA6, 0x06, 0x47, 0x00, 0x06, 0x09, 0x02, -/* 0001B8E0 */ 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x89, 0x02, 0xFE, 0x2C, 0x4E, 0x04, 0x00, 0x00, 0x00, 0x00, -/* 0001B8F0 */ 0x08, 0x00, 0x22, 0x00, 0x1A, 0x00, 0x36, 0x00, 0x31, 0x00, 0x38, 0x00, 0x00, 0x3F, 0x5D, 0x09, -/* 0001B900 */ 0xC1, 0x53, 0xAD, 0x25, 0x00, 0xFE, 0x8F, 0x01, 0x1A, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x6D, 0x03, -/* 0001B910 */ 0x2C, 0xFE, 0x67, 0x44, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x05, 0x05, 0xFE, 0x67, 0x44, 0xFE, -/* 0001B920 */ 0x86, 0x09, 0xFE, 0x86, 0x09, 0x05, 0xFE, 0xCA, 0x01, 0xFE, 0xB8, 0x03, 0xFE, 0xB9, 0x03, 0xFE, -/* 0001B930 */ 0xBA, 0x03, 0xFE, 0xBB, 0x03, 0x10, 0x0B, 0x16, 0x05, 0x7B, 0x77, 0x02, 0x01, 0x08, 0x0A, 0x09, -/* 0001B940 */ 0x09, 0x09, 0x09, 0x01, 0x02, 0x13, 0x14, 0x15, 0x16, 0x05, 0xFE, 0xBC, 0x03, 0x08, 0x06, 0xFE, -/* 0001B950 */ 0xBD, 0x03, 0x07, 0x05, 0xFE, 0xBE, 0x03, 0x01, 0x02, 0x05, 0xFE, 0xBF, 0x03, 0x01, 0xFF, 0x01, -/* 0001B960 */ 0x00, 0xFE, 0xF8, 0x01, 0x94, 0x02, 0x0D, 0x4F, 0x0F, 0x4F, 0x10, 0x4F, 0x11, 0x4F, 0x12, 0x4F, -/* 0001B970 */ 0x18, 0x94, 0x03, 0x18, 0x4F, 0x18, 0x94, 0x04, 0x18, 0x4F, 0x18, 0x94, 0x05, 0x18, 0x4F, 0x18, -/* 0001B980 */ 0x94, 0x06, 0x18, 0x91, 0x02, 0x18, 0x00, 0x00, 0x60, 0x18, 0x18, 0x00, 0x47, 0x0F, 0x18, 0xA6, -/* 0001B990 */ 0x18, 0x94, 0x03, 0x18, 0x14, 0x03, 0x00, 0x0F, 0x02, 0x09, 0x24, 0x00, 0x8D, 0x01, 0x08, 0x18, -/* 0001B9A0 */ 0x01, 0x00, 0x4B, 0x18, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x03, 0x5B, 0x01, 0x0B, 0x00, 0x00, 0x5B, -/* 0001B9B0 */ 0x02, 0x0C, 0x00, 0x00, 0xEE, 0x03, 0x18, 0x18, 0x00, 0x00, 0x94, 0x03, 0x18, 0x09, 0x21, 0x00, -/* 0001B9C0 */ 0x8D, 0x01, 0x09, 0x18, 0x02, 0x00, 0x4B, 0x18, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x03, 0x5B, 0x01, -/* 0001B9D0 */ 0x0B, 0x01, 0x00, 0x5B, 0x02, 0x0C, 0x01, 0x00, 0xEE, 0x03, 0x18, 0x18, 0x01, 0x00, 0x94, 0x03, -/* 0001B9E0 */ 0x18, 0x91, 0x03, 0x18, 0x03, 0x00, 0x60, 0x18, 0x18, 0x01, 0x94, 0x04, 0x18, 0x8D, 0x02, 0x35, -/* 0001B9F0 */ 0x18, 0x04, 0x00, 0x4B, 0x18, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x03, 0xCB, 0x00, 0x00, 0x00, 0x00, -/* 0001BA00 */ 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x91, 0x04, 0x1A, 0x05, 0x00, 0x79, 0x1A, 0x19, -/* 0001BA10 */ 0x02, 0x5B, 0x01, 0x19, 0x02, 0x00, 0xEE, 0x02, 0x18, 0x18, 0x02, 0x00, 0x94, 0x05, 0x18, 0x94, -/* 0001BA20 */ 0x06, 0x06, 0x8D, 0x02, 0x37, 0x19, 0x06, 0x00, 0x4B, 0x19, 0x6B, 0x18, 0x19, 0x03, 0x07, 0x03, -/* 0001BA30 */ 0x00, 0x5A, 0x00, 0x19, 0x5B, 0x01, 0x0E, 0x03, 0x00, 0xD3, 0x00, 0x1A, 0x5B, 0x02, 0x1A, 0x03, -/* 0001BA40 */ 0x00, 0xF2, 0x03, 0xFF, 0x18, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x91, 0x06, 0x18, 0x07, 0x00, -/* 0001BA50 */ 0xA5, 0x18, 0x18, 0x04, 0x00, 0x00, 0x11, 0x03, 0x00, 0x18, 0x07, 0x09, 0xE4, 0x00, 0x8D, 0x02, -/* 0001BA60 */ 0x37, 0x19, 0x06, 0x00, 0x4B, 0x19, 0x6B, 0x18, 0x19, 0x05, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x19, -/* 0001BA70 */ 0x91, 0x04, 0x1A, 0x05, 0x00, 0x5B, 0x01, 0x1A, 0x04, 0x00, 0x5B, 0x02, 0x08, 0x04, 0x00, 0xF2, -/* 0001BA80 */ 0x03, 0x18, 0x18, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x47, 0x10, 0x18, 0x14, 0x03, 0x00, 0x10, -/* 0001BA90 */ 0x09, 0x09, 0x16, 0x00, 0x91, 0x04, 0x19, 0x05, 0x00, 0x91, 0x06, 0x1A, 0x07, 0x00, 0x2F, 0x18, -/* 0001BAA0 */ 0x19, 0x1A, 0x94, 0x04, 0x18, 0xFA, 0x18, 0x09, 0x71, 0x00, 0x8D, 0x02, 0x37, 0x19, 0x06, 0x00, -/* 0001BAB0 */ 0x4B, 0x19, 0x6B, 0x18, 0x19, 0x06, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x19, 0x91, 0x04, 0x1A, 0x05, -/* 0001BAC0 */ 0x00, 0x5B, 0x01, 0x1A, 0x05, 0x00, 0x5B, 0x02, 0x0A, 0x05, 0x00, 0x5B, 0x03, 0x10, 0x05, 0x00, -/* 0001BAD0 */ 0xF2, 0x04, 0x18, 0x18, 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, 0x47, 0x11, 0x18, 0x8D, 0x02, 0x37, -/* 0001BAE0 */ 0x19, 0x06, 0x00, 0x4B, 0x19, 0x6B, 0x18, 0x19, 0x06, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x19, 0x91, -/* 0001BAF0 */ 0x04, 0x1A, 0x05, 0x00, 0x5B, 0x01, 0x1A, 0x06, 0x00, 0x5B, 0x02, 0x10, 0x06, 0x00, 0xF2, 0x03, -/* 0001BB00 */ 0x18, 0x18, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x47, 0x12, 0x18, 0x91, 0x06, 0x18, 0x07, 0x00, -/* 0001BB10 */ 0x2F, 0x18, 0x11, 0x18, 0x2F, 0x18, 0x18, 0x12, 0x94, 0x04, 0x18, 0x8D, 0x02, 0x03, 0x19, 0x08, -/* 0001BB20 */ 0x00, 0x6B, 0x18, 0x19, 0x07, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x19, 0x91, 0x04, 0x1A, 0x05, 0x00, -/* 0001BB30 */ 0x5B, 0x01, 0x1A, 0x07, 0x00, 0xF2, 0x02, 0x18, 0x18, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x94, -/* 0001BB40 */ 0x04, 0x18, 0x91, 0x05, 0x18, 0x09, 0x00, 0x91, 0x04, 0x19, 0x05, 0x00, 0x75, 0x19, 0x18, 0x08, -/* 0001BB50 */ 0x91, 0x05, 0x00, 0x09, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x01, 0x0C, 0x00, 0x00, -/* 0001BB60 */ 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBD, 0x03, 0x00, 0x00, 0xFE, -/* 0001BB70 */ 0xC0, 0x03, 0xFE, 0xF7, 0x01, 0xFE, 0xBD, 0x03, 0x86, 0xC1, 0xFE, 0x0E, 0x03, 0xFE, 0x4C, 0x01, -/* 0001BB80 */ 0xFE, 0xD8, 0x01, 0xFE, 0xF7, 0x01, 0xFE, 0xC0, 0x44, 0x14, 0x1F, 0x00, 0x00, 0x00, 0x0C, 0x00, -/* 0001BB90 */ 0x2F, 0x00, 0x05, 0x00, 0x0F, 0x00, 0x08, 0x00, 0x28, 0x00, 0x24, 0x00, 0x55, 0x00, 0x21, 0x00, -/* 0001BBA0 */ 0x4C, 0x00, 0x0C, 0x00, 0x24, 0x00, 0x32, 0x00, 0x3A, 0x00, 0x03, 0x00, 0x27, 0x00, 0x29, 0x00, -/* 0001BBB0 */ 0x37, 0x05, 0x13, 0x00, 0x31, 0x00, 0x2E, 0x00, 0x46, 0x00, 0x08, 0x00, 0x2B, 0x00, 0x16, 0x00, -/* 0001BBC0 */ 0x48, 0x00, 0x33, 0x00, 0x50, 0x00, 0x2E, 0x00, 0x4E, 0x00, 0x10, 0x00, 0x5C, 0x00, 0x27, 0x00, -/* 0001BBD0 */ 0x4D, 0x00, 0x0E, 0x00, 0x25, 0x00, 0x0A, 0x00, 0x13, 0x00, 0x00, 0xDF, 0xBB, 0x01, 0x00, 0xBF, -/* 0001BBE0 */ 0x5C, 0x0E, 0xC1, 0x43, 0xA8, 0x01, 0x00, 0xFE, 0x9B, 0x01, 0x29, 0xA2, 0x41, 0xD1, 0x00, 0x2D, -/* 0001BBF0 */ 0xFE, 0x6D, 0x46, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x6D, 0x46, 0xFE, 0x0A, 0x05, -/* 0001BC00 */ 0xFE, 0x0A, 0x05, 0x41, 0x0B, 0x08, 0x0F, 0x04, 0x6B, 0x60, 0x03, 0x02, 0x01, 0x06, 0x08, 0x04, -/* 0001BC10 */ 0x04, 0x04, 0x04, 0x01, 0x0E, 0x0F, 0x08, 0x01, 0x00, 0x06, 0xFE, 0x5B, 0x03, 0x01, 0xFF, 0x06, -/* 0001BC20 */ 0xFE, 0xAF, 0x03, 0x06, 0xFE, 0xC1, 0x03, 0xFE, 0xB4, 0x01, 0x4F, 0x09, 0x4F, 0x0A, 0x4F, 0x0B, -/* 0001BC30 */ 0x4F, 0x0C, 0x4F, 0x0D, 0x8D, 0x02, 0x07, 0x10, 0x00, 0x00, 0x4B, 0x10, 0x07, 0x03, 0x00, 0x5A, -/* 0001BC40 */ 0x00, 0x02, 0x5B, 0x01, 0x08, 0x00, 0x00, 0x8D, 0x01, 0x04, 0x11, 0x01, 0x00, 0x4B, 0x11, 0x5B, -/* 0001BC50 */ 0x02, 0x11, 0x00, 0x00, 0xEE, 0x03, 0x10, 0x10, 0x00, 0x00, 0x47, 0x09, 0x10, 0x96, 0x10, 0x09, -/* 0001BC60 */ 0x03, 0x00, 0x00, 0x47, 0x0A, 0x10, 0x47, 0x0B, 0x04, 0x8D, 0x01, 0x03, 0x10, 0x02, 0x00, 0x4B, -/* 0001BC70 */ 0x10, 0x60, 0x10, 0x10, 0x00, 0x0E, 0xC4, 0x00, 0x10, 0x8D, 0x02, 0x0A, 0x10, 0x03, 0x00, 0x4B, -/* 0001BC80 */ 0x10, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x8D, 0x01, 0x03, 0x11, 0x02, 0x00, 0x4B, 0x11, 0x60, -/* 0001BC90 */ 0x11, 0x11, 0x01, 0x5B, 0x01, 0x11, 0x01, 0x00, 0x5B, 0x02, 0x08, 0x01, 0x00, 0xEE, 0x03, 0x10, -/* 0001BCA0 */ 0x10, 0x01, 0x00, 0x47, 0x0C, 0x10, 0xA6, 0x10, 0x15, 0x03, 0x00, 0x0C, 0x10, 0x09, 0x8D, 0x00, -/* 0001BCB0 */ 0x15, 0x03, 0x00, 0x0C, 0x04, 0x09, 0x54, 0x00, 0x8D, 0x03, 0x37, 0x11, 0x04, 0x00, 0x4B, 0x11, -/* 0001BCC0 */ 0x6B, 0x10, 0x11, 0x02, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x11, 0x5B, 0x01, 0x09, 0x02, 0x00, 0x5B, -/* 0001BCD0 */ 0x02, 0x0C, 0x02, 0x00, 0xF2, 0x03, 0x10, 0x10, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x15, 0x03, -/* 0001BCE0 */ 0x00, 0x10, 0x05, 0x09, 0x23, 0x00, 0x47, 0x0A, 0x0C, 0x47, 0x10, 0x06, 0x01, 0x04, 0x01, 0x11, -/* 0001BCF0 */ 0x08, 0x2F, 0x10, 0x10, 0x11, 0x2F, 0x10, 0x10, 0x06, 0x01, 0x04, 0x01, 0x11, 0x0A, 0x2F, 0x10, -/* 0001BD00 */ 0x10, 0x11, 0x2F, 0x10, 0x10, 0x04, 0x47, 0x0B, 0x10, 0x09, 0x31, 0x00, 0x8D, 0x03, 0x37, 0x11, -/* 0001BD10 */ 0x04, 0x00, 0x4B, 0x11, 0x6B, 0x10, 0x11, 0x02, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x11, 0x5B, 0x01, -/* 0001BD20 */ 0x09, 0x03, 0x00, 0x5B, 0x02, 0x07, 0x03, 0x00, 0xF2, 0x03, 0x10, 0x10, 0x02, 0x00, 0x00, 0x00, -/* 0001BD30 */ 0x03, 0x00, 0x15, 0x03, 0x00, 0x10, 0x05, 0x09, 0x03, 0x00, 0x47, 0x0A, 0x07, 0x8D, 0x03, 0x37, -/* 0001BD40 */ 0x11, 0x04, 0x00, 0x4B, 0x11, 0x6B, 0x10, 0x11, 0x03, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x11, 0x8D, -/* 0001BD50 */ 0x01, 0x02, 0x12, 0x05, 0x00, 0x5B, 0x01, 0x12, 0x04, 0x00, 0x5B, 0x02, 0x08, 0x04, 0x00, 0xF2, -/* 0001BD60 */ 0x03, 0x10, 0x10, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x0E, 0x4B, 0x00, 0x10, 0x8D, 0x01, 0x02, -/* 0001BD70 */ 0x10, 0x05, 0x00, 0x96, 0x10, 0x10, 0x08, 0x01, 0x00, 0x47, 0x0D, 0x10, 0x8D, 0x03, 0x37, 0x11, -/* 0001BD80 */ 0x04, 0x00, 0x4B, 0x11, 0x6B, 0x10, 0x11, 0x02, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x11, 0x5B, 0x01, -/* 0001BD90 */ 0x09, 0x05, 0x00, 0x5B, 0x02, 0x0D, 0x05, 0x00, 0xF2, 0x03, 0x10, 0x10, 0x02, 0x00, 0x00, 0x00, -/* 0001BDA0 */ 0x05, 0x00, 0x15, 0x03, 0x00, 0x10, 0x05, 0x09, 0x0E, 0x00, 0x15, 0x03, 0x00, 0x0D, 0x0A, 0x09, -/* 0001BDB0 */ 0x06, 0x00, 0x47, 0x0A, 0x0D, 0x47, 0x0B, 0x04, 0x8D, 0x01, 0x05, 0x10, 0x06, 0x00, 0x4B, 0x10, -/* 0001BDC0 */ 0x9B, 0x0A, 0x10, 0x08, 0x00, 0x00, 0x8D, 0x01, 0x06, 0x11, 0x07, 0x00, 0x4B, 0x11, 0x2F, 0x10, -/* 0001BDD0 */ 0x11, 0x0B, 0x01, 0x34, 0x01, 0x01, 0x06, 0x10, 0xFA, 0x10, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xB7, -/* 0001BDE0 */ 0x03, 0xFE, 0xB7, 0x03, 0xFE, 0x14, 0x03, 0xA7, 0xFE, 0x8A, 0x46, 0x15, 0x0A, 0x00, 0x00, 0x00, -/* 0001BDF0 */ 0x29, 0x00, 0x46, 0x00, 0x09, 0x00, 0x2A, 0x00, 0x03, 0x00, 0x31, 0x00, 0x10, 0x00, 0x23, 0x00, -/* 0001BE00 */ 0x2D, 0x00, 0x50, 0x00, 0x0A, 0x00, 0x38, 0x00, 0x08, 0x00, 0x35, 0x00, 0x2E, 0x00, 0x58, 0x00, -/* 0001BE10 */ 0x03, 0x00, 0x34, 0x00, 0x23, 0x00, 0x66, 0x00, 0x2E, 0x00, 0x4C, 0x00, 0x03, 0x00, 0x53, 0x00, -/* 0001BE20 */ 0x30, 0x00, 0x36, 0x00, 0x0F, 0x00, 0x33, 0x00, 0x2E, 0x00, 0x4E, 0x00, 0x08, 0x00, 0x36, 0x00, -/* 0001BE30 */ 0x03, 0x00, 0x2E, 0x00, 0x03, 0x00, 0x64, 0x00, 0x0E, 0x00, 0x21, 0x00, 0x16, 0x00, 0x3A, 0x00, -/* 0001BE40 */ 0x00, 0xBF, 0x7C, 0x09, 0xC3, 0x43, 0xA8, 0x09, 0x00, 0xFE, 0x5E, 0x01, 0x22, 0xA2, 0x41, 0xC1, -/* 0001BE50 */ 0x00, 0xFE, 0x6C, 0x03, 0x2B, 0xFE, 0xFA, 0x3C, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, -/* 0001BE60 */ 0xFA, 0x3C, 0xFE, 0x46, 0x04, 0xFE, 0x46, 0x04, 0x01, 0x11, 0x0B, 0x16, 0x05, 0x6E, 0x5B, 0x23, -/* 0001BE70 */ 0x02, 0x02, 0x05, 0x02, 0x01, 0x05, 0x05, 0x05, 0x05, 0x02, 0x15, 0x16, 0x95, 0xFE, 0x15, 0x01, -/* 0001BE80 */ 0x01, 0x02, 0x06, 0xFE, 0xAF, 0x03, 0x01, 0xFF, 0x01, 0x04, 0x0C, 0x0B, 0x01, 0x01, 0x06, 0xFE, -/* 0001BE90 */ 0x5B, 0x03, 0x01, 0x03, 0xFE, 0xA2, 0x01, 0x4F, 0x0D, 0x4F, 0x0E, 0x4F, 0x0F, 0x4F, 0x10, 0x4F, -/* 0001BEA0 */ 0x11, 0x4F, 0x12, 0x4F, 0x13, 0x4F, 0x14, 0x8D, 0x02, 0x38, 0x19, 0x00, 0x00, 0x4B, 0x19, 0x6B, -/* 0001BEB0 */ 0x18, 0x19, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x19, 0xA5, 0x1A, 0x0C, 0x01, 0x00, 0x00, 0x43, -/* 0001BEC0 */ 0x1A, 0x1A, 0x02, 0x5B, 0x01, 0x1A, 0x00, 0x00, 0xF2, 0x02, 0xFF, 0x18, 0x00, 0x00, 0x00, 0x00, -/* 0001BED0 */ 0x00, 0x00, 0xA5, 0x18, 0x0B, 0x02, 0x01, 0x00, 0x47, 0x0D, 0x18, 0x8D, 0x02, 0x37, 0x19, 0x01, -/* 0001BEE0 */ 0x00, 0x4B, 0x19, 0x6B, 0x18, 0x19, 0x03, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x19, 0x5B, 0x01, 0x0B, -/* 0001BEF0 */ 0x01, 0x00, 0x47, 0x1A, 0x03, 0x01, 0x04, 0x01, 0x1B, 0x0C, 0x2F, 0x1A, 0x1A, 0x1B, 0x2F, 0x1A, -/* 0001BF00 */ 0x1A, 0x03, 0x5B, 0x02, 0x1A, 0x01, 0x00, 0xF2, 0x03, 0x18, 0x18, 0x03, 0x00, 0x00, 0x00, 0x01, -/* 0001BF10 */ 0x00, 0x47, 0x0E, 0x18, 0x15, 0x03, 0x00, 0x0E, 0x04, 0x09, 0xBE, 0x00, 0x2F, 0x18, 0x0E, 0x05, -/* 0001BF20 */ 0x47, 0x0F, 0x18, 0x47, 0x10, 0x0F, 0x47, 0x11, 0x0F, 0x47, 0x12, 0x06, 0xEB, 0x00, 0xEC, 0x00, -/* 0001BF30 */ 0x0F, 0x76, 0x00, 0x12, 0x8D, 0x02, 0x37, 0x19, 0x01, 0x00, 0x4B, 0x19, 0x6B, 0x18, 0x19, 0x03, -/* 0001BF40 */ 0x07, 0x04, 0x00, 0x5A, 0x00, 0x19, 0x5B, 0x01, 0x0B, 0x02, 0x00, 0x5B, 0x02, 0x03, 0x02, 0x00, -/* 0001BF50 */ 0x5B, 0x03, 0x11, 0x02, 0x00, 0xF2, 0x04, 0x18, 0x18, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x47, -/* 0001BF60 */ 0x13, 0x18, 0x14, 0x03, 0x00, 0x13, 0x04, 0x09, 0x0A, 0x00, 0x35, 0x19, 0x0D, 0x11, 0x47, 0x18, -/* 0001BF70 */ 0x19, 0x09, 0x07, 0x00, 0x35, 0x19, 0x13, 0x11, 0x47, 0x18, 0x19, 0x47, 0x14, 0x18, 0x14, 0x03, -/* 0001BF80 */ 0x00, 0x14, 0x02, 0x09, 0x06, 0x00, 0x47, 0x12, 0x07, 0x09, 0x1B, 0x00, 0x14, 0x03, 0x00, 0x13, -/* 0001BF90 */ 0x04, 0x09, 0x09, 0x00, 0x47, 0x10, 0x0D, 0x47, 0x12, 0x07, 0x09, 0x0A, 0x00, 0x47, 0x10, 0x13, -/* 0001BFA0 */ 0x2F, 0x18, 0x13, 0x08, 0x47, 0x11, 0x18, 0x09, 0x84, 0xFF, 0xED, 0x00, 0x8D, 0x02, 0x37, 0x19, -/* 0001BFB0 */ 0x01, 0x00, 0x4B, 0x19, 0x6B, 0x18, 0x19, 0x04, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x19, 0x5B, 0x01, -/* 0001BFC0 */ 0x0B, 0x03, 0x00, 0x5B, 0x02, 0x0F, 0x03, 0x00, 0x5B, 0x03, 0x10, 0x03, 0x00, 0xF2, 0x04, 0x00, -/* 0001BFD0 */ 0x18, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x09, 0x5D, 0x00, 0x8D, 0x02, 0x37, 0x19, 0x01, 0x00, -/* 0001BFE0 */ 0x4B, 0x19, 0x6B, 0x18, 0x19, 0x03, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x19, 0x5B, 0x01, 0x0B, 0x04, -/* 0001BFF0 */ 0x00, 0x47, 0x1A, 0x03, 0x01, 0x04, 0x01, 0x1B, 0x0C, 0x2F, 0x1A, 0x1A, 0x1B, 0x2F, 0x1A, 0x1A, -/* 0001C000 */ 0x09, 0x5B, 0x02, 0x1A, 0x04, 0x00, 0xF2, 0x03, 0x18, 0x18, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, -/* 0001C010 */ 0x47, 0x0E, 0x18, 0x15, 0x03, 0x00, 0x0E, 0x04, 0x09, 0x15, 0x00, 0x2F, 0x18, 0x0E, 0x0A, 0x14, -/* 0001C020 */ 0x03, 0x00, 0x18, 0x0D, 0x09, 0x09, 0x00, 0x47, 0x00, 0x09, 0x09, 0x0A, 0x00, 0x09, 0x05, 0x00, -/* 0001C030 */ 0xA6, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x27, 0x03, 0xC1, 0xC1, 0xFE, 0x0E, -/* 0001C040 */ 0x03, 0xFE, 0x4C, 0x01, 0xFE, 0x1E, 0x3D, 0x18, 0x10, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x28, 0x00, -/* 0001C050 */ 0x09, 0x00, 0x51, 0x00, 0x39, 0x00, 0x3A, 0x00, 0x08, 0x00, 0x1E, 0x00, 0x07, 0x00, 0x23, 0x00, -/* 0001C060 */ 0x03, 0x00, 0x1D, 0x00, 0x03, 0x00, 0x1B, 0x00, 0x07, 0x00, 0x25, 0x00, 0x04, 0x00, 0x19, 0x00, -/* 0001C070 */ 0x2E, 0x00, 0x3E, 0x00, 0x1C, 0x00, 0x39, 0x00, 0x08, 0x00, 0x25, 0x00, 0x06, 0x00, 0x24, 0x00, -/* 0001C080 */ 0x08, 0x00, 0x24, 0x00, 0x03, 0x00, 0x20, 0x00, 0x06, 0x00, 0x3A, 0x00, 0x03, 0x00, 0x1D, 0x00, -/* 0001C090 */ 0x0C, 0x00, 0x38, 0x00, 0x2E, 0x00, 0x75, 0x00, 0x39, 0x00, 0x35, 0x00, 0x14, 0x00, 0x32, 0x00, -/* 0001C0A0 */ 0x09, 0x00, 0x28, 0x00, 0x07, 0x00, 0x20, 0x00, 0x00, 0xBF, 0x7C, 0x0B, 0xC3, 0x43, 0xA8, 0x09, -/* 0001C0B0 */ 0x00, 0xFE, 0x3D, 0x01, 0x1A, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x6A, 0x03, 0x2A, 0xFE, 0x58, 0x38, -/* 0001C0C0 */ 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x58, 0x38, 0xFE, 0x06, 0x03, 0xFE, 0x06, 0x03, -/* 0001C0D0 */ 0x01, 0x0B, 0x06, 0x0D, 0x04, 0x40, 0x3A, 0x29, 0x02, 0x01, 0x02, 0x04, 0x04, 0x01, 0x06, 0x06, -/* 0001C0E0 */ 0x06, 0x06, 0x02, 0x0C, 0x0D, 0x2A, 0xC6, 0x01, 0x00, 0x01, 0x01, 0x08, 0x07, 0xE8, 0x4F, 0x08, -/* 0001C0F0 */ 0x4F, 0x09, 0x4F, 0x0A, 0x4F, 0x0B, 0x8D, 0x02, 0x37, 0x10, 0x00, 0x00, 0x4B, 0x10, 0x6B, 0x0F, -/* 0001C100 */ 0x10, 0x00, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x10, 0xF2, 0x01, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00, -/* 0001C110 */ 0x00, 0x00, 0x47, 0x08, 0x0F, 0x47, 0x09, 0x02, 0xEB, 0x00, 0xEC, 0x00, 0xA5, 0x0F, 0x07, 0x01, -/* 0001C120 */ 0x00, 0x00, 0x12, 0x03, 0x00, 0x09, 0x0F, 0x09, 0x88, 0x00, 0x8D, 0x01, 0x0E, 0x0F, 0x01, 0x00, -/* 0001C130 */ 0x4B, 0x0F, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, 0x96, 0x10, 0x07, 0x09, 0x00, 0x00, 0x5B, 0x01, -/* 0001C140 */ 0x10, 0x01, 0x00, 0xEE, 0x02, 0x0F, 0x0F, 0x01, 0x00, 0x47, 0x0A, 0x0F, 0x14, 0x03, 0x00, 0x0A, -/* 0001C150 */ 0x05, 0x09, 0x03, 0x00, 0x09, 0x55, 0x00, 0x8D, 0x01, 0x06, 0x0F, 0x02, 0x00, 0x4B, 0x0F, 0x07, -/* 0001C160 */ 0x03, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x06, 0x02, 0x00, 0x60, 0x10, 0x0A, 0x02, 0x5B, 0x02, -/* 0001C170 */ 0x10, 0x02, 0x00, 0xEE, 0x03, 0x0F, 0x0F, 0x02, 0x00, 0x47, 0x0B, 0x0F, 0xA6, 0x0F, 0x15, 0x03, -/* 0001C180 */ 0x00, 0x0B, 0x0F, 0x09, 0x26, 0x00, 0x75, 0x0B, 0x08, 0x03, 0x96, 0x0F, 0x07, 0x09, 0x01, 0x00, -/* 0001C190 */ 0x60, 0x10, 0x0A, 0x02, 0x15, 0x03, 0x00, 0x0F, 0x10, 0x09, 0x08, 0x00, 0x60, 0x0F, 0x0A, 0x04, -/* 0001C1A0 */ 0x75, 0x0F, 0x08, 0x05, 0x47, 0x00, 0x08, 0xED, 0x00, 0x09, 0x28, 0x00, 0x28, 0x09, 0x09, 0x09, -/* 0001C1B0 */ 0x68, 0xFF, 0xED, 0x00, 0x8D, 0x01, 0x05, 0x0F, 0x03, 0x00, 0x4B, 0x0F, 0x07, 0x01, 0x00, 0x5A, -/* 0001C1C0 */ 0x00, 0x04, 0xEE, 0x01, 0x0F, 0x0F, 0x03, 0x00, 0x75, 0x0F, 0x08, 0x03, 0x47, 0x00, 0x08, 0x09, -/* 0001C1D0 */ 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x61, 0xC1, 0xFE, 0x28, 0x03, 0xFE, 0xF7, 0x01, 0xFE, 0xB6, -/* 0001C1E0 */ 0x03, 0xFE, 0xB7, 0x03, 0xFE, 0x91, 0x38, 0x10, 0x08, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x28, 0x00, -/* 0001C1F0 */ 0x07, 0x00, 0x0B, 0x00, 0x0E, 0x00, 0x30, 0x00, 0x22, 0x00, 0x45, 0x00, 0x08, 0x00, 0x2E, 0x00, -/* 0001C200 */ 0x03, 0x00, 0x25, 0x00, 0x25, 0x00, 0x60, 0x00, 0x0A, 0x00, 0x35, 0x00, 0x04, 0x00, 0x31, 0x00, -/* 0001C210 */ 0x12, 0x00, 0x46, 0x00, 0x08, 0x00, 0x56, 0x00, 0x08, 0x00, 0xF3, 0xFD, 0x08, 0x00, 0x3D, 0x02, -/* 0001C220 */ 0x18, 0x00, 0x2C, 0x00, 0x08, 0x00, 0x13, 0x00, 0x00, 0xBF, 0x5C, 0x0A, 0xC1, 0x13, 0x88, 0x21, -/* 0001C230 */ 0x00, 0xFE, 0x25, 0x01, 0x1D, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x69, 0x03, 0x29, 0xFE, 0x52, 0x35, -/* 0001C240 */ 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x52, 0x35, 0xFE, 0xA2, 0x01, 0xFE, 0xA2, 0x01, -/* 0001C250 */ 0x01, 0x08, 0x0F, 0x14, 0x04, 0x18, 0x15, 0x02, 0x01, 0x01, 0x01, 0x07, 0x07, 0x07, 0x07, 0x01, -/* 0001C260 */ 0x13, 0x06, 0xFE, 0xB0, 0x03, 0x01, 0x00, 0x06, 0xFE, 0xB1, 0x03, 0x01, 0x01, 0x06, 0xFE, 0xB2, -/* 0001C270 */ 0x03, 0x01, 0x02, 0x06, 0xFE, 0xB3, 0x03, 0x01, 0x03, 0x06, 0xFE, 0xB4, 0x03, 0x01, 0x04, 0x06, -/* 0001C280 */ 0xFE, 0xB5, 0x03, 0x01, 0x05, 0x07, 0x63, 0x4F, 0x11, 0x4F, 0x12, 0xCB, 0x00, 0x00, 0x00, 0x00, -/* 0001C290 */ 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x79, 0x03, 0x14, 0x00, 0x79, 0x05, 0x14, 0x01, -/* 0001C2A0 */ 0x79, 0x07, 0x14, 0x02, 0x79, 0x09, 0x14, 0x03, 0x79, 0x0B, 0x14, 0x04, 0x79, 0x0D, 0x14, 0x05, -/* 0001C2B0 */ 0x47, 0x11, 0x14, 0x8D, 0x02, 0x03, 0x15, 0x00, 0x00, 0x6B, 0x14, 0x15, 0x06, 0x07, 0x03, 0x00, -/* 0001C2C0 */ 0x5A, 0x00, 0x15, 0x96, 0x16, 0x11, 0x0F, 0x00, 0x00, 0x5B, 0x01, 0x16, 0x00, 0x00, 0x5B, 0x02, -/* 0001C2D0 */ 0x10, 0x00, 0x00, 0xF2, 0x03, 0x14, 0x14, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x12, 0x14, -/* 0001C2E0 */ 0x47, 0x00, 0x12, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, -/* 0001C2F0 */ 0x00, 0x03, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB0, 0x03, 0x00, 0x00, 0xB1, 0x03, 0x00, -/* 0001C300 */ 0x00, 0xB2, 0x03, 0x00, 0x00, 0xB3, 0x03, 0x00, 0x00, 0xB4, 0x03, 0x00, 0x00, 0xB5, 0x03, 0x00, -/* 0001C310 */ 0x00, 0xFE, 0xB0, 0x03, 0xFE, 0xB1, 0x03, 0xFE, 0xB2, 0x03, 0xFE, 0xB3, 0x03, 0xFE, 0xB4, 0x03, -/* 0001C320 */ 0xFE, 0xB5, 0x03, 0xFE, 0xEA, 0x01, 0xFE, 0xE6, 0x35, 0x04, 0x04, 0x00, 0x00, 0x00, 0x28, 0x00, -/* 0001C330 */ 0x9F, 0x00, 0x2D, 0x00, 0x54, 0x00, 0x08, 0x00, 0x1A, 0x00, 0x00, 0xBF, 0x7C, 0x0B, 0xC3, 0x43, -/* 0001C340 */ 0xA8, 0x09, 0x00, 0xF7, 0x20, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x68, 0x03, 0x28, 0xFE, 0x88, 0x2E, -/* 0001C350 */ 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x88, 0x2E, 0xFE, 0x55, 0x04, 0xFE, 0x55, 0x04, -/* 0001C360 */ 0x01, 0x0B, 0x09, 0x10, 0x05, 0x41, 0x3A, 0x33, 0x02, 0x01, 0x02, 0x02, 0x01, 0x02, 0x02, 0x02, -/* 0001C370 */ 0x02, 0x02, 0x02, 0x0F, 0x10, 0x1D, 0xD9, 0x4E, 0x76, 0x06, 0xFE, 0xAF, 0x03, 0x0B, 0x08, 0x01, -/* 0001C380 */ 0xFF, 0x01, 0x01, 0x01, 0x00, 0x01, 0x02, 0xDD, 0x4F, 0x0B, 0x4F, 0x0C, 0x4F, 0x0D, 0x4F, 0x0E, -/* 0001C390 */ 0xA6, 0x12, 0x14, 0x03, 0x00, 0x0A, 0x12, 0x09, 0x05, 0x00, 0xA6, 0x00, 0x09, 0xC4, 0x00, 0x47, -/* 0001C3A0 */ 0x0B, 0x0A, 0x47, 0x0C, 0x02, 0xEB, 0x00, 0xEC, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, 0x5B, -/* 0001C3B0 */ 0x01, 0x0B, 0x00, 0x00, 0xEE, 0x02, 0x12, 0x09, 0x00, 0x00, 0x0E, 0x08, 0x00, 0x12, 0x47, 0x00, -/* 0001C3C0 */ 0x0B, 0xED, 0x00, 0x09, 0x9D, 0x00, 0x47, 0x0D, 0x05, 0xA5, 0x12, 0x0B, 0x00, 0x00, 0x00, 0x35, -/* 0001C3D0 */ 0x12, 0x12, 0x06, 0x47, 0x0E, 0x12, 0xEB, 0x01, 0xEC, 0x01, 0x10, 0x03, 0x00, 0x0E, 0x07, 0x09, -/* 0001C3E0 */ 0x1A, 0x00, 0x96, 0x12, 0x0B, 0x0E, 0x00, 0x00, 0x14, 0x03, 0x00, 0x12, 0x0C, 0x09, 0x06, 0x00, -/* 0001C3F0 */ 0x47, 0x0D, 0x0E, 0x09, 0x06, 0x00, 0x29, 0x0E, 0x0E, 0x09, 0xDC, 0xFF, 0xED, 0x01, 0x14, 0x03, -/* 0001C400 */ 0x00, 0x0D, 0x05, 0x09, 0x0A, 0x00, 0xA6, 0x00, 0xED, 0x00, 0x09, 0x56, 0x00, 0x09, 0x1E, 0x00, -/* 0001C410 */ 0x10, 0x03, 0x00, 0x0D, 0x08, 0x09, 0x16, 0x00, 0x35, 0x12, 0x0D, 0x08, 0x96, 0x12, 0x0B, 0x12, -/* 0001C420 */ 0x01, 0x00, 0x14, 0x03, 0x00, 0x12, 0x0C, 0x09, 0x04, 0x00, 0x35, 0x0D, 0x0D, 0x08, 0x8D, 0x02, -/* 0001C430 */ 0x37, 0x13, 0x00, 0x00, 0x4B, 0x13, 0x6B, 0x12, 0x13, 0x01, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x13, -/* 0001C440 */ 0x5B, 0x01, 0x0B, 0x01, 0x00, 0x5B, 0x02, 0x07, 0x01, 0x00, 0x5B, 0x03, 0x0D, 0x01, 0x00, 0xF2, -/* 0001C450 */ 0x04, 0x12, 0x12, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x0B, 0x12, 0x09, 0x48, 0xFF, 0xED, -/* 0001C460 */ 0x00, 0xA6, 0x00, 0x24, 0x00, 0xC1, 0xFE, 0x4C, 0x01, 0xFE, 0xB7, 0x2E, 0x13, 0x08, 0x00, 0x00, -/* 0001C470 */ 0x00, 0x0A, 0x00, 0x28, 0x00, 0x05, 0x00, 0x25, 0x00, 0x03, 0x00, 0x20, 0x00, 0x07, 0x00, 0x37, -/* 0001C480 */ 0x00, 0x15, 0x00, 0x34, 0x00, 0x08, 0x00, 0x2D, 0x00, 0x03, 0x00, 0x1F, 0x00, 0x11, 0x00, 0x1E, -/* 0001C490 */ 0x00, 0x08, 0x00, 0x1F, 0x00, 0x0E, 0x00, 0x33, 0x00, 0x03, 0x00, 0x1D, 0x00, 0x03, 0x00, 0x99, -/* 0001C4A0 */ 0xFF, 0x08, 0x00, 0x9B, 0x00, 0x08, 0x00, 0x22, 0x00, 0x0A, 0x00, 0x25, 0x00, 0x1A, 0x00, 0x9A, -/* 0001C4B0 */ 0x01, 0x04, 0x00, 0x25, 0x00, 0x35, 0x00, 0x3A, 0x00, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, -/* 0001C4C0 */ 0x01, 0x00, 0xEA, 0x1C, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xE6, 0x02, 0x27, 0xFE, 0x6B, 0x2C, 0xFF, -/* 0001C4D0 */ 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x6B, 0x2C, 0x51, 0x51, 0x01, 0x05, 0x02, 0x05, 0x04, -/* 0001C4E0 */ 0x0B, 0x0B, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x2B, 0x8D, 0x02, 0x03, 0x06, 0x00, -/* 0001C4F0 */ 0x00, 0x6B, 0x05, 0x06, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x06, 0x5B, 0x01, 0x03, 0x00, 0x00, -/* 0001C500 */ 0x5B, 0x02, 0x02, 0x00, 0x00, 0xF2, 0x03, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, -/* 0001C510 */ 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xFD, 0x01, 0xFE, 0x88, 0x2C, 0x02, 0x00, 0x00, 0x00, -/* 0001C520 */ 0x00, 0x29, 0x00, 0x33, 0x00, 0x00, 0xBF, 0x4C, 0x00, 0xC0, 0x03, 0x80, 0x01, 0x00, 0xE4, 0x1C, -/* 0001C530 */ 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xE5, 0x02, 0x26, 0xFE, 0xD1, 0x2B, 0xFF, 0x00, 0x10, 0x01, 0x00, -/* 0001C540 */ 0x02, 0x02, 0xFE, 0xD1, 0x2B, 0x7B, 0x7B, 0x41, 0x02, 0x04, 0x05, 0x09, 0x09, 0x02, 0x01, 0x01, -/* 0001C550 */ 0x01, 0x01, 0x04, 0x00, 0x00, 0x00, 0xF9, 0x7F, 0xFD, 0xDF, 0xC1, 0x04, 0x00, 0x00, 0x40, 0xFE, -/* 0001C560 */ 0x7F, 0xFD, 0xDF, 0xC1, 0x1B, 0x60, 0x05, 0x04, 0x00, 0x14, 0x0C, 0x00, 0x05, 0x02, 0x60, 0x05, -/* 0001C570 */ 0x04, 0x00, 0x14, 0x03, 0x00, 0x05, 0x03, 0x09, 0x02, 0x00, 0x23, 0x04, 0xA6, 0x00, 0x24, 0x00, -/* 0001C580 */ 0xFE, 0xFE, 0x00, 0xFE, 0xE9, 0x2B, 0x03, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x4A, 0x00, 0x04, -/* 0001C590 */ 0x00, 0x18, 0x00, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xD2, 0x1D, 0xA0, 0x41, -/* 0001C5A0 */ 0xC1, 0x00, 0xFE, 0x67, 0x03, 0x25, 0xFE, 0x84, 0x29, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, -/* 0001C5B0 */ 0xFE, 0x84, 0x29, 0xFE, 0xC9, 0x01, 0xFE, 0xC9, 0x01, 0x01, 0x04, 0x03, 0x05, 0x02, 0x1A, 0x19, -/* 0001C5C0 */ 0x02, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x04, 0x05, 0xFE, 0xAE, 0x03, 0x66, 0x4F, 0x03, 0x8D, -/* 0001C5D0 */ 0x01, 0x04, 0x05, 0x00, 0x00, 0x4B, 0x05, 0x0E, 0x19, 0x00, 0x05, 0x8D, 0x02, 0x03, 0x05, 0x01, -/* 0001C5E0 */ 0x00, 0x60, 0x05, 0x05, 0x00, 0x0E, 0x0B, 0x00, 0x05, 0x8D, 0x01, 0x04, 0x00, 0x00, 0x00, 0x4B, -/* 0001C5F0 */ 0x00, 0x09, 0x3D, 0x00, 0x8D, 0x02, 0x03, 0x06, 0x01, 0x00, 0x6B, 0x05, 0x06, 0x01, 0x07, 0x01, -/* 0001C600 */ 0x00, 0x5A, 0x00, 0x06, 0xF2, 0x01, 0x05, 0x05, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x03, -/* 0001C610 */ 0x05, 0x0F, 0x09, 0x00, 0x03, 0x01, 0x34, 0x01, 0x01, 0x04, 0x02, 0x09, 0x06, 0x00, 0x01, 0x34, -/* 0001C620 */ 0x01, 0x01, 0x04, 0x03, 0x8D, 0x01, 0x04, 0x00, 0x00, 0x00, 0x4B, 0x00, 0x09, 0x02, 0x00, 0xA6, -/* 0001C630 */ 0x00, 0x24, 0x00, 0xFE, 0x61, 0x03, 0xFE, 0xDF, 0x01, 0xFE, 0x9A, 0x29, 0x08, 0x02, 0x00, 0x00, -/* 0001C640 */ 0x00, 0x1A, 0x00, 0x39, 0x00, 0x0B, 0x00, 0x2B, 0x00, 0x1D, 0x00, 0x34, 0x00, 0x04, 0x00, 0x9C, -/* 0001C650 */ 0x00, 0x09, 0x00, 0x35, 0x00, 0x06, 0x00, 0x2D, 0x00, 0x0D, 0x00, 0x1C, 0x00, 0x00, 0xBF, 0x4C, -/* 0001C660 */ 0x02, 0xC0, 0x03, 0x80, 0x01, 0x00, 0xC1, 0x13, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xFD, 0x02, 0x24, -/* 0001C670 */ 0xFE, 0x00, 0x26, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x00, 0x26, 0xB7, 0xB7, 0x01, -/* 0001C680 */ 0x03, 0x03, 0x05, 0x0C, 0x0C, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0xFE, 0xAD, 0x03, 0x26, -/* 0001C690 */ 0x0E, 0x0B, 0x00, 0x04, 0x2C, 0x05, 0x04, 0x15, 0x03, 0x00, 0x05, 0x02, 0x09, 0x0A, 0x00, 0x60, -/* 0001C6A0 */ 0x00, 0x03, 0x00, 0x09, 0x0E, 0x00, 0x09, 0x09, 0x00, 0x96, 0x00, 0x03, 0x04, 0x00, 0x00, 0x09, -/* 0001C6B0 */ 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x2C, 0x03, 0xFE, 0x25, 0x26, 0x04, 0x00, 0x00, 0x00, -/* 0001C6C0 */ 0x00, 0x0F, 0x00, 0x33, 0x00, 0x0A, 0x00, 0x38, 0x00, 0x0B, 0x00, 0x26, 0x00, 0x00, 0xFF, 0x5C, -/* 0001C6D0 */ 0x08, 0xC1, 0x03, 0x88, 0x03, 0x00, 0xA3, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0xAB, 0x03, 0x23, -/* 0001C6E0 */ 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0x03, 0x21, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, -/* 0001C6F0 */ 0x03, 0x21, 0x68, 0x68, 0x06, 0x01, 0x07, 0x03, 0x06, 0x06, 0x16, 0x12, 0x01, 0x02, 0x02, 0x01, -/* 0001C700 */ 0x01, 0x01, 0x01, 0x05, 0x05, 0xFE, 0xAC, 0x03, 0x53, 0x0E, 0x08, 0x00, 0x03, 0xA6, 0x06, 0x47, -/* 0001C710 */ 0x00, 0x06, 0x09, 0x40, 0x00, 0x8D, 0x01, 0x03, 0x07, 0x00, 0x00, 0x6B, 0x06, 0x07, 0x00, 0x07, -/* 0001C720 */ 0x02, 0x00, 0x5A, 0x00, 0x07, 0x47, 0x08, 0x04, 0x0F, 0x17, 0x00, 0x04, 0x8D, 0x01, 0x0D, 0x09, -/* 0001C730 */ 0x01, 0x00, 0x07, 0x02, 0x00, 0x5B, 0x01, 0x02, 0x01, 0x00, 0xC2, 0x02, 0x09, 0x09, 0x01, 0x00, -/* 0001C740 */ 0x47, 0x08, 0x09, 0x5B, 0x01, 0x08, 0x00, 0x00, 0xF2, 0x02, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, -/* 0001C750 */ 0x00, 0x00, 0x47, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xD6, 0x01, 0xFE, -/* 0001C760 */ 0x17, 0x21, 0x02, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x53, 0x00, 0x00, 0xFF, 0x5C, 0x09, 0xC1, -/* 0001C770 */ 0x03, 0x88, 0x23, 0x00, 0xA2, 0x08, 0xA0, 0x41, 0xE1, 0x01, 0xFE, 0xAA, 0x03, 0x22, 0xFF, 0x00, -/* 0001C780 */ 0x00, 0x40, 0x02, 0xFE, 0x6C, 0x20, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0x6C, 0x20, -/* 0001C790 */ 0x8D, 0x8D, 0x06, 0x02, 0x05, 0x04, 0x06, 0x03, 0x17, 0x15, 0x01, 0x01, 0x02, 0x01, 0x03, 0x03, -/* 0001C7A0 */ 0x03, 0x03, 0x05, 0x07, 0x01, 0x03, 0x5F, 0xAC, 0x04, 0xA5, 0x06, 0x04, 0x00, 0x00, 0x00, 0x14, -/* 0001C7B0 */ 0x03, 0x00, 0x06, 0x03, 0x09, 0x2B, 0x00, 0x8D, 0x01, 0x03, 0x07, 0x00, 0x00, 0x6B, 0x06, 0x07, -/* 0001C7C0 */ 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x07, 0x01, 0x4F, 0x01, 0x08, 0x04, 0x5B, 0x01, 0x08, 0x00, -/* 0001C7D0 */ 0x00, 0xF0, 0x02, 0x06, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x06, 0x09, -/* 0001C7E0 */ 0x1D, 0x00, 0x8D, 0x01, 0x03, 0x07, 0x00, 0x00, 0x6B, 0x06, 0x07, 0x02, 0x07, 0x01, 0x00, 0x5A, -/* 0001C7F0 */ 0x00, 0x07, 0xF2, 0x01, 0x06, 0x06, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x00, 0x06, 0x09, -/* 0001C800 */ 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x01, 0x00, -/* 0001C810 */ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xC1, 0xFE, 0x8F, 0x02, 0xFE, 0x90, 0x02, 0xFE, 0x7B, 0x20, -/* 0001C820 */ 0x02, 0x02, 0x00, 0x00, 0x00, 0x5B, 0x00, 0x7D, 0x00, 0x00, 0xFF, 0x5C, 0x08, 0xC1, 0x03, 0x88, -/* 0001C830 */ 0x03, 0x00, 0x9E, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0xA9, 0x03, 0x21, 0xFF, 0x00, 0x00, 0x40, -/* 0001C840 */ 0x02, 0xFE, 0xD2, 0x1F, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, 0xD2, 0x1F, 0x74, 0x74, -/* 0001C850 */ 0x02, 0x01, 0x06, 0x03, 0x07, 0x06, 0x0E, 0x0E, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x06, -/* 0001C860 */ 0x08, 0x37, 0x8D, 0x01, 0x06, 0x07, 0x00, 0x00, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x02, 0x8D, 0x01, -/* 0001C870 */ 0x03, 0x08, 0x01, 0x00, 0x60, 0x08, 0x08, 0x00, 0x5B, 0x01, 0x08, 0x00, 0x00, 0x5B, 0x02, 0x03, -/* 0001C880 */ 0x00, 0x00, 0x5B, 0x03, 0x04, 0x00, 0x00, 0x5B, 0x04, 0x05, 0x00, 0x00, 0xEE, 0x05, 0x00, 0x07, -/* 0001C890 */ 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x65, 0x02, 0xFE, 0xEC, 0x1F, 0x02, -/* 0001C8A0 */ 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x59, 0x00, 0x00, 0xFF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x03, -/* 0001C8B0 */ 0x00, 0x9D, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0xA8, 0x03, 0x20, 0xFF, 0x00, 0x00, 0x40, 0x02, -/* 0001C8C0 */ 0xFE, 0x62, 0x1F, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x62, 0x1F, 0x66, 0x66, 0x02, -/* 0001C8D0 */ 0x01, 0x05, 0x03, 0x06, 0x05, 0x0D, 0x0D, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x05, 0x08, -/* 0001C8E0 */ 0x32, 0x8D, 0x01, 0x06, 0x06, 0x00, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8D, 0x01, 0x03, -/* 0001C8F0 */ 0x07, 0x01, 0x00, 0x60, 0x07, 0x07, 0x00, 0x5B, 0x01, 0x07, 0x00, 0x00, 0x5B, 0x02, 0x03, 0x00, -/* 0001C900 */ 0x00, 0x5B, 0x03, 0x04, 0x00, 0x00, 0xEE, 0x04, 0x00, 0x06, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, -/* 0001C910 */ 0x00, 0x24, 0x00, 0xFE, 0x66, 0x02, 0xFE, 0x75, 0x1F, 0x02, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, -/* 0001C920 */ 0x52, 0x00, 0x00, 0xFF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x03, 0x00, 0x9B, 0x08, 0xA2, 0x41, 0xC1, -/* 0001C930 */ 0x01, 0xFE, 0xA7, 0x03, 0x1F, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0xFB, 0x1E, 0xFF, 0x00, 0x10, -/* 0001C940 */ 0x01, 0x00, 0x02, 0x02, 0xFE, 0xFB, 0x1E, 0x5C, 0x5C, 0x02, 0x01, 0x04, 0x03, 0x05, 0x04, 0x0C, -/* 0001C950 */ 0x0C, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x04, 0x08, 0x2D, 0x8D, 0x01, 0x06, 0x05, 0x00, -/* 0001C960 */ 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x8D, 0x01, 0x03, 0x06, 0x01, 0x00, 0x60, 0x06, 0x06, -/* 0001C970 */ 0x00, 0x5B, 0x01, 0x06, 0x00, 0x00, 0x5B, 0x02, 0x03, 0x00, 0x00, 0xEE, 0x03, 0x00, 0x05, 0x00, -/* 0001C980 */ 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x63, 0x02, 0xFE, 0x0B, 0x1F, 0x02, 0x00, -/* 0001C990 */ 0x00, 0x00, 0x00, 0x2B, 0x00, 0x4B, 0x00, 0x00, 0xFF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x03, 0x00, -/* 0001C9A0 */ 0x94, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0xA6, 0x03, 0x1E, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, -/* 0001C9B0 */ 0xF1, 0x1D, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0xF1, 0x1D, 0x3E, 0x3E, 0x02, 0x01, -/* 0001C9C0 */ 0x04, 0x03, 0x05, 0x03, 0x0F, 0x0D, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x01, 0x00, -/* 0001C9D0 */ 0x37, 0x14, 0x03, 0x00, 0x03, 0x02, 0x09, 0x06, 0x00, 0x47, 0x00, 0x02, 0x09, 0x22, 0x00, 0x8D, -/* 0001C9E0 */ 0x01, 0x03, 0x06, 0x00, 0x00, 0x6B, 0x05, 0x06, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x06, 0x5B, -/* 0001C9F0 */ 0x01, 0x03, 0x00, 0x00, 0xF2, 0x02, 0x05, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, -/* 0001CA00 */ 0x05, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x7A, 0x02, 0xFE, 0xFC, 0x1D, 0x02, 0x00, -/* 0001CA10 */ 0x00, 0x00, 0x00, 0x35, 0x00, 0x32, 0x00, 0x00, 0xFF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x03, 0x00, -/* 0001CA20 */ 0x90, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0xA5, 0x03, 0x1D, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, -/* 0001CA30 */ 0x04, 0x1D, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x02, 0xFE, 0x04, 0x1D, 0x5C, 0x5C, 0x02, 0x01, -/* 0001CA40 */ 0x05, 0x04, 0x07, 0x04, 0x0D, 0x0C, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x07, 0x08, -/* 0001CA50 */ 0x33, 0x15, 0x03, 0x00, 0x05, 0x03, 0x47, 0x05, 0x02, 0x8D, 0x01, 0x03, 0x08, 0x00, 0x00, 0x6B, -/* 0001CA60 */ 0x07, 0x08, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x08, 0x5B, 0x01, 0x04, 0x00, 0x00, 0x5B, 0x02, -/* 0001CA70 */ 0x05, 0x00, 0x00, 0xF2, 0x03, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, -/* 0001CA80 */ 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x81, 0x02, 0xFE, 0x1B, 0x1D, 0x03, 0x00, 0x00, 0x00, 0x00, 0x08, -/* 0001CA90 */ 0x00, 0x10, 0x00, 0x29, 0x00, 0x34, 0x00, 0x00, 0xFF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x03, 0x00, -/* 0001CAA0 */ 0x8F, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0xA4, 0x03, 0x1C, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, -/* 0001CAB0 */ 0xAC, 0x1C, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x01, 0xFE, 0xAC, 0x1C, 0x4E, 0x4E, 0x02, 0x01, -/* 0001CAC0 */ 0x04, 0x04, 0x06, 0x03, 0x0C, 0x0B, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x05, 0x07, 0x08, -/* 0001CAD0 */ 0x2E, 0x15, 0x03, 0x00, 0x04, 0x03, 0x47, 0x04, 0x02, 0x8D, 0x01, 0x03, 0x07, 0x00, 0x00, 0x6B, -/* 0001CAE0 */ 0x06, 0x07, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x07, 0x5B, 0x01, 0x04, 0x00, 0x00, 0xF2, 0x02, -/* 0001CAF0 */ 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, -/* 0001CB00 */ 0x67, 0x02, 0xFE, 0xB3, 0x1C, 0x03, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x10, 0x00, 0x24, 0x00, -/* 0001CB10 */ 0x36, 0x00, 0x00, 0xFF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x03, 0x00, 0x8A, 0x08, 0xA2, 0x41, 0xC1, -/* 0001CB20 */ 0x01, 0xFE, 0xA3, 0x03, 0x1B, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0xB6, 0x1B, 0xFF, 0x00, 0x10, -/* 0001CB30 */ 0x01, 0x00, 0x04, 0x04, 0xFE, 0xB6, 0x1B, 0xA3, 0xA3, 0x02, 0x41, 0x06, 0x03, 0x07, 0x05, 0x13, -/* 0001CB40 */ 0x13, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x06, 0x07, 0x53, 0x8D, 0x01, 0x37, 0x08, 0x00, -/* 0001CB50 */ 0x00, 0x4B, 0x08, 0x6B, 0x07, 0x08, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x08, 0x5B, 0x01, 0x05, -/* 0001CB60 */ 0x00, 0x00, 0x5B, 0x02, 0x02, 0x00, 0x00, 0xF2, 0x03, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 0001CB70 */ 0x00, 0x8D, 0x01, 0x03, 0x08, 0x01, 0x00, 0x6B, 0x07, 0x08, 0x01, 0x07, 0x04, 0x00, 0x5A, 0x00, -/* 0001CB80 */ 0x08, 0x5B, 0x01, 0x03, 0x01, 0x00, 0x5B, 0x02, 0x04, 0x01, 0x00, 0x5B, 0x03, 0x05, 0x01, 0x00, -/* 0001CB90 */ 0xF2, 0x04, 0xFF, 0x07, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x86, -/* 0001CBA0 */ 0x01, 0xFE, 0x68, 0x02, 0xFE, 0xE2, 0x1B, 0x03, 0x00, 0x00, 0x00, 0x00, 0x26, 0x00, 0x2A, 0x00, -/* 0001CBB0 */ 0x2B, 0x00, 0x4C, 0x00, 0x00, 0xFF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x03, 0x00, 0x88, 0x08, 0xA2, -/* 0001CBC0 */ 0x41, 0xC1, 0x01, 0xFE, 0xA2, 0x03, 0x1A, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0xAD, 0x1A, 0xFF, -/* 0001CBD0 */ 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0xAD, 0x1A, 0x72, 0x72, 0x02, 0x01, 0x05, 0x03, 0x06, -/* 0001CBE0 */ 0x05, 0x0D, 0x0D, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x05, 0x08, 0x32, 0x8D, 0x01, 0x06, -/* 0001CBF0 */ 0x06, 0x00, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8D, 0x01, 0x03, 0x07, 0x01, 0x00, 0x60, -/* 0001CC00 */ 0x07, 0x07, 0x00, 0x5B, 0x01, 0x07, 0x00, 0x00, 0x5B, 0x02, 0x03, 0x00, 0x00, 0x5B, 0x03, 0x04, -/* 0001CC10 */ 0x00, 0x00, 0xEE, 0x04, 0x00, 0x06, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, -/* 0001CC20 */ 0x6B, 0x02, 0xFE, 0xC7, 0x1A, 0x02, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x57, 0x00, 0x00, 0x7F, -/* 0001CC30 */ 0x5D, 0x08, 0xC1, 0x03, 0x8D, 0x07, 0x00, 0x85, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0xA0, 0x03, -/* 0001CC40 */ 0x18, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0x16, 0x1A, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, -/* 0001CC50 */ 0x02, 0xFE, 0x16, 0x1A, 0x53, 0x53, 0x02, 0x01, 0xFE, 0xA1, 0x03, 0x07, 0x02, 0x06, 0x04, 0x0F, -/* 0001CC60 */ 0x0F, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x03, 0x04, 0x05, 0x38, 0x94, 0x02, 0x02, 0x8D, -/* 0001CC70 */ 0x01, 0x37, 0x07, 0x00, 0x00, 0x4B, 0x07, 0x6B, 0x06, 0x07, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, -/* 0001CC80 */ 0x07, 0x91, 0x02, 0x08, 0x01, 0x00, 0x5B, 0x01, 0x08, 0x00, 0x00, 0xD3, 0x00, 0x08, 0x5B, 0x02, -/* 0001CC90 */ 0x08, 0x00, 0x00, 0xF2, 0x03, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, -/* 0001CCA0 */ 0xA6, 0x00, 0x24, 0x00, 0x7E, 0xFE, 0x26, 0x1A, 0x02, 0x03, 0x00, 0x00, 0x00, 0x33, 0x00, 0x42, -/* 0001CCB0 */ 0x00, 0x00, 0xB6, 0xCC, 0x01, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x03, 0x00, 0x85, 0x2F, -/* 0001CCC0 */ 0xA2, 0x41, 0xD0, 0x00, 0x19, 0xFE, 0x01, 0x10, 0xFE, 0x3D, 0x1A, 0xFF, 0x00, 0x10, 0x01, 0x00, -/* 0001CCD0 */ 0x03, 0x03, 0xFE, 0x3D, 0x1A, 0x28, 0x28, 0x01, 0x06, 0x02, 0x05, 0x04, 0x0E, 0x0E, 0x02, 0x01, -/* 0001CCE0 */ 0x02, 0x01, 0x01, 0x01, 0x01, 0x04, 0x37, 0x8D, 0x02, 0x37, 0x06, 0x00, 0x00, 0x4B, 0x06, 0x6B, -/* 0001CCF0 */ 0x05, 0x06, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x06, 0x8D, 0x01, 0x02, 0x07, 0x01, 0x00, 0x5B, -/* 0001CD00 */ 0x01, 0x07, 0x00, 0x00, 0x5B, 0x02, 0x02, 0x00, 0x00, 0xF2, 0x03, 0x05, 0x05, 0x00, 0x00, 0x00, -/* 0001CD10 */ 0x00, 0x00, 0x00, 0x43, 0x00, 0x05, 0x03, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x14, -/* 0001CD20 */ 0x03, 0xFE, 0x47, 0x1A, 0x02, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x1E, 0x00, 0x00, 0xFF, 0x5C, -/* 0001CD30 */ 0x08, 0xC1, 0x03, 0x88, 0x03, 0x00, 0x84, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x9F, 0x03, 0x17, -/* 0001CD40 */ 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0xA3, 0x19, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, -/* 0001CD50 */ 0xA3, 0x19, 0x69, 0x69, 0x02, 0x01, 0x05, 0x03, 0x06, 0x05, 0x0D, 0x0D, 0x01, 0x01, 0x02, 0x01, -/* 0001CD60 */ 0x01, 0x01, 0x01, 0x05, 0x08, 0x32, 0x8D, 0x01, 0x06, 0x06, 0x00, 0x00, 0x07, 0x04, 0x00, 0x5A, -/* 0001CD70 */ 0x00, 0x02, 0x8D, 0x01, 0x03, 0x07, 0x01, 0x00, 0x60, 0x07, 0x07, 0x00, 0x5B, 0x01, 0x07, 0x00, -/* 0001CD80 */ 0x00, 0x5B, 0x02, 0x03, 0x00, 0x00, 0x5B, 0x03, 0x04, 0x00, 0x00, 0xEE, 0x04, 0x00, 0x06, 0x00, -/* 0001CD90 */ 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x5B, 0x02, 0xFE, 0xB9, 0x19, 0x02, 0x00, -/* 0001CDA0 */ 0x00, 0x00, 0x00, 0x30, 0x00, 0x52, 0x00, 0x00, 0xFF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x23, 0x00, -/* 0001CDB0 */ 0x83, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x9E, 0x03, 0x16, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, -/* 0001CDC0 */ 0x2C, 0x19, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x2C, 0x19, 0x6D, 0x6D, 0x02, 0x81, -/* 0001CDD0 */ 0x05, 0x03, 0x06, 0x05, 0x0E, 0x0E, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x05, 0x08, 0x3C, -/* 0001CDE0 */ 0x8D, 0x01, 0x06, 0x06, 0x00, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8D, 0x01, 0x03, 0x07, -/* 0001CDF0 */ 0x01, 0x00, 0x60, 0x07, 0x07, 0x00, 0x5B, 0x01, 0x07, 0x00, 0x00, 0x5B, 0x02, 0x03, 0x00, 0x00, -/* 0001CE00 */ 0x01, 0x4F, 0x01, 0x07, 0x04, 0x5B, 0x03, 0x07, 0x00, 0x00, 0xF0, 0x04, 0x00, 0x06, 0x01, 0x00, -/* 0001CE10 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x01, 0x08, 0x00, 0x00, -/* 0001CE20 */ 0x00, 0x00, 0x00, 0x05, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xFE, 0x5A, 0x02, 0xFE, -/* 0001CE30 */ 0x44, 0x19, 0x02, 0x00, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x54, 0x00, 0x00, 0xFF, 0x5C, 0x08, 0xC1, -/* 0001CE40 */ 0x03, 0x88, 0x03, 0x00, 0x82, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x9D, 0x03, 0x15, 0xFF, 0x00, -/* 0001CE50 */ 0x00, 0x40, 0x02, 0xFE, 0xAF, 0x18, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, 0xAF, 0x18, -/* 0001CE60 */ 0x73, 0x73, 0x02, 0x01, 0x06, 0x03, 0x07, 0x06, 0x0E, 0x0E, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, -/* 0001CE70 */ 0x01, 0x06, 0x08, 0x37, 0x8D, 0x01, 0x06, 0x07, 0x00, 0x00, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x02, -/* 0001CE80 */ 0x8D, 0x01, 0x03, 0x08, 0x01, 0x00, 0x60, 0x08, 0x08, 0x00, 0x5B, 0x01, 0x08, 0x00, 0x00, 0x5B, -/* 0001CE90 */ 0x02, 0x03, 0x00, 0x00, 0x5B, 0x03, 0x04, 0x00, 0x00, 0x5B, 0x04, 0x05, 0x00, 0x00, 0xEE, 0x05, -/* 0001CEA0 */ 0x00, 0x07, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x62, 0x02, 0xFE, 0xCA, -/* 0001CEB0 */ 0x18, 0x02, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x57, 0x00, 0x00, 0xFF, 0x5C, 0x08, 0xC1, 0x03, -/* 0001CEC0 */ 0x88, 0x03, 0x00, 0x81, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x9C, 0x03, 0x14, 0xFF, 0x00, 0x00, -/* 0001CED0 */ 0x40, 0x02, 0xFE, 0x30, 0x18, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, 0x30, 0x18, 0x75, -/* 0001CEE0 */ 0x75, 0x02, 0x01, 0x06, 0x03, 0x07, 0x06, 0x0E, 0x0E, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, -/* 0001CEF0 */ 0x06, 0x08, 0x37, 0x8D, 0x01, 0x06, 0x07, 0x00, 0x00, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x02, 0x8D, -/* 0001CF00 */ 0x01, 0x03, 0x08, 0x01, 0x00, 0x60, 0x08, 0x08, 0x00, 0x5B, 0x01, 0x08, 0x00, 0x00, 0x5B, 0x02, -/* 0001CF10 */ 0x03, 0x00, 0x00, 0x5B, 0x03, 0x04, 0x00, 0x00, 0x5B, 0x04, 0x05, 0x00, 0x00, 0xEE, 0x05, 0x00, -/* 0001CF20 */ 0x07, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x61, 0x02, 0xFE, 0x4C, 0x18, -/* 0001CF30 */ 0x02, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x58, 0x00, 0x00, 0xFF, 0x5C, 0x08, 0xC1, 0x03, 0x88, -/* 0001CF40 */ 0x03, 0x00, 0x80, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x9B, 0x03, 0x13, 0xFF, 0x00, 0x00, 0x40, -/* 0001CF50 */ 0x02, 0xFE, 0xC3, 0x17, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0xC3, 0x17, 0x63, 0x63, -/* 0001CF60 */ 0x02, 0x01, 0x05, 0x03, 0x06, 0x05, 0x0D, 0x0D, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x05, -/* 0001CF70 */ 0x08, 0x32, 0x8D, 0x01, 0x06, 0x06, 0x00, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8D, 0x01, -/* 0001CF80 */ 0x03, 0x07, 0x01, 0x00, 0x60, 0x07, 0x07, 0x00, 0x5B, 0x01, 0x07, 0x00, 0x00, 0x5B, 0x02, 0x03, -/* 0001CF90 */ 0x00, 0x00, 0x5B, 0x03, 0x04, 0x00, 0x00, 0xEE, 0x04, 0x00, 0x06, 0x00, 0x00, 0x09, 0x02, 0x00, -/* 0001CFA0 */ 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x5F, 0x02, 0xFE, 0xD6, 0x17, 0x02, 0x00, 0x00, 0x00, 0x00, 0x30, -/* 0001CFB0 */ 0x00, 0x4F, 0x00, 0x00, 0xFF, 0x5C, 0x08, 0x01, 0x00, 0x88, 0x03, 0x00, 0x7F, 0x08, 0xA2, 0x41, -/* 0001CFC0 */ 0xC1, 0x01, 0xFE, 0x9A, 0x03, 0x12, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0x58, 0x17, 0xFF, 0x00, -/* 0001CFD0 */ 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, 0x58, 0x17, 0x61, 0x61, 0x02, 0x01, 0x06, 0x03, 0x07, 0x06, -/* 0001CFE0 */ 0x0D, 0x0D, 0x01, 0x01, 0x02, 0x06, 0x08, 0x33, 0x8D, 0x01, 0x06, 0x07, 0x00, 0x00, 0x07, 0x05, -/* 0001CFF0 */ 0x00, 0x5A, 0x00, 0x02, 0x8D, 0x01, 0x17, 0x08, 0x01, 0x00, 0x5B, 0x01, 0x08, 0x00, 0x00, 0x5B, -/* 0001D000 */ 0x02, 0x03, 0x00, 0x00, 0x5B, 0x03, 0x04, 0x00, 0x00, 0x5B, 0x04, 0x05, 0x00, 0x00, 0xEE, 0x05, -/* 0001D010 */ 0x00, 0x07, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x78, 0x17, 0x02, 0x00, -/* 0001D020 */ 0x00, 0x00, 0x00, 0x31, 0x00, 0x40, 0x00, 0x00, 0xFF, 0x5C, 0x08, 0x01, 0x00, 0x88, 0x03, 0x00, -/* 0001D030 */ 0x7E, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x99, 0x03, 0x11, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, -/* 0001D040 */ 0x02, 0x17, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x02, 0x17, 0x4C, 0x4C, 0x02, 0x01, -/* 0001D050 */ 0x05, 0x03, 0x06, 0x05, 0x0C, 0x0C, 0x01, 0x01, 0x02, 0x05, 0x08, 0x2E, 0x8D, 0x01, 0x06, 0x06, -/* 0001D060 */ 0x00, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8D, 0x01, 0x19, 0x07, 0x01, 0x00, 0x5B, 0x01, -/* 0001D070 */ 0x07, 0x00, 0x00, 0x5B, 0x02, 0x03, 0x00, 0x00, 0x5B, 0x03, 0x04, 0x00, 0x00, 0xEE, 0x04, 0x00, -/* 0001D080 */ 0x06, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x15, 0x17, 0x02, 0x00, 0x00, -/* 0001D090 */ 0x00, 0x00, 0x2C, 0x00, 0x38, 0x00, 0x00, 0xFF, 0x5C, 0x08, 0x01, 0x00, 0x88, 0x23, 0x00, 0x7D, -/* 0001D0A0 */ 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x98, 0x03, 0x10, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0xA6, -/* 0001D0B0 */ 0x16, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0xA6, 0x16, 0x52, 0x52, 0x02, 0x81, 0x05, -/* 0001D0C0 */ 0x03, 0x06, 0x05, 0x0D, 0x0D, 0x01, 0x01, 0x02, 0x05, 0x08, 0x38, 0x8D, 0x01, 0x06, 0x06, 0x00, -/* 0001D0D0 */ 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8D, 0x01, 0x18, 0x07, 0x01, 0x00, 0x5B, 0x01, 0x07, -/* 0001D0E0 */ 0x00, 0x00, 0x5B, 0x02, 0x03, 0x00, 0x00, 0x01, 0x4F, 0x01, 0x07, 0x04, 0x5B, 0x03, 0x07, 0x00, -/* 0001D0F0 */ 0x00, 0xF0, 0x04, 0x00, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, -/* 0001D100 */ 0x00, 0x24, 0x00, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x01, 0x00, 0x00, 0x00, 0x03, -/* 0001D110 */ 0x00, 0x00, 0x00, 0xFE, 0xBC, 0x16, 0x02, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x3B, 0x00, 0x00, -/* 0001D120 */ 0xFF, 0x5C, 0x08, 0x01, 0x00, 0x88, 0x03, 0x00, 0x7C, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x97, -/* 0001D130 */ 0x03, 0x0F, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0x48, 0x16, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, -/* 0001D140 */ 0x03, 0xFE, 0x48, 0x16, 0x54, 0x54, 0x02, 0x01, 0x05, 0x03, 0x06, 0x05, 0x0C, 0x0C, 0x01, 0x01, -/* 0001D150 */ 0x02, 0x05, 0x08, 0x2E, 0x8D, 0x01, 0x06, 0x06, 0x00, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, -/* 0001D160 */ 0x8D, 0x01, 0x16, 0x07, 0x01, 0x00, 0x5B, 0x01, 0x07, 0x00, 0x00, 0x5B, 0x02, 0x03, 0x00, 0x00, -/* 0001D170 */ 0x5B, 0x03, 0x04, 0x00, 0x00, 0xEE, 0x04, 0x00, 0x06, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, -/* 0001D180 */ 0x24, 0x00, 0xFE, 0x5F, 0x16, 0x02, 0x00, 0x00, 0x00, 0x00, 0x2C, 0x00, 0x3C, 0x00, 0x00, 0xFF, -/* 0001D190 */ 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x03, 0x00, 0x7A, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x96, 0x03, -/* 0001D1A0 */ 0x0E, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0xD5, 0x15, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, -/* 0001D1B0 */ 0xFE, 0xD5, 0x15, 0x68, 0x68, 0x02, 0x01, 0x05, 0x03, 0x06, 0x05, 0x0D, 0x0D, 0x01, 0x01, 0x02, -/* 0001D1C0 */ 0x01, 0x01, 0x01, 0x01, 0x05, 0x08, 0x32, 0x8D, 0x01, 0x06, 0x06, 0x00, 0x00, 0x07, 0x04, 0x00, -/* 0001D1D0 */ 0x5A, 0x00, 0x02, 0x8D, 0x01, 0x03, 0x07, 0x01, 0x00, 0x60, 0x07, 0x07, 0x00, 0x5B, 0x01, 0x07, -/* 0001D1E0 */ 0x00, 0x00, 0x5B, 0x02, 0x03, 0x00, 0x00, 0x5B, 0x03, 0x04, 0x00, 0x00, 0xEE, 0x04, 0x00, 0x06, -/* 0001D1F0 */ 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x73, 0x02, 0xFE, 0xEA, 0x15, 0x02, -/* 0001D200 */ 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x52, 0x00, 0x00, 0xFF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x03, -/* 0001D210 */ 0x00, 0x79, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x95, 0x03, 0x0D, 0xFF, 0x00, 0x00, 0x40, 0x02, -/* 0001D220 */ 0xFE, 0x8D, 0x15, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x8D, 0x15, 0x3E, 0x3E, 0x02, -/* 0001D230 */ 0x01, 0x05, 0x02, 0x05, 0x04, 0x0B, 0x0B, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x2B, -/* 0001D240 */ 0x8D, 0x01, 0x03, 0x06, 0x00, 0x00, 0x6B, 0x05, 0x06, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x06, -/* 0001D250 */ 0x5B, 0x01, 0x02, 0x00, 0x00, 0x5B, 0x02, 0x03, 0x00, 0x00, 0xF2, 0x03, 0x00, 0x05, 0x00, 0x00, -/* 0001D260 */ 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x83, 0x02, 0xFE, 0x9E, -/* 0001D270 */ 0x15, 0x02, 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x2C, 0x00, 0x00, 0xFF, 0x5C, 0x08, 0xC1, 0x03, -/* 0001D280 */ 0x88, 0x03, 0x00, 0x78, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x94, 0x03, 0x0C, 0xFF, 0x00, 0x00, -/* 0001D290 */ 0x40, 0x02, 0xFE, 0x0D, 0x15, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, 0x0D, 0x15, 0x76, -/* 0001D2A0 */ 0x76, 0x02, 0x01, 0x06, 0x03, 0x07, 0x06, 0x0E, 0x0E, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, -/* 0001D2B0 */ 0x06, 0x08, 0x37, 0x8D, 0x01, 0x06, 0x07, 0x00, 0x00, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x02, 0x8D, -/* 0001D2C0 */ 0x01, 0x03, 0x08, 0x01, 0x00, 0x60, 0x08, 0x08, 0x00, 0x5B, 0x01, 0x08, 0x00, 0x00, 0x5B, 0x02, -/* 0001D2D0 */ 0x03, 0x00, 0x00, 0x5B, 0x03, 0x04, 0x00, 0x00, 0x5B, 0x04, 0x05, 0x00, 0x00, 0xEE, 0x05, 0x00, -/* 0001D2E0 */ 0x07, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x71, 0x02, 0xFE, 0x2C, 0x15, -/* 0001D2F0 */ 0x02, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x56, 0x00, 0x00, 0xFF, 0x5C, 0x08, 0xC1, 0x03, 0x88, -/* 0001D300 */ 0x03, 0x00, 0x77, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x93, 0x03, 0x0B, 0xFF, 0x00, 0x00, 0x40, -/* 0001D310 */ 0x02, 0xFE, 0x8B, 0x14, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, 0x8B, 0x14, 0x78, 0x78, -/* 0001D320 */ 0x02, 0x01, 0x06, 0x03, 0x07, 0x06, 0x0E, 0x0E, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x06, -/* 0001D330 */ 0x08, 0x37, 0x8D, 0x01, 0x06, 0x07, 0x00, 0x00, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x02, 0x8D, 0x01, -/* 0001D340 */ 0x03, 0x08, 0x01, 0x00, 0x60, 0x08, 0x08, 0x00, 0x5B, 0x01, 0x08, 0x00, 0x00, 0x5B, 0x02, 0x03, -/* 0001D350 */ 0x00, 0x00, 0x5B, 0x03, 0x04, 0x00, 0x00, 0x5B, 0x04, 0x05, 0x00, 0x00, 0xEE, 0x05, 0x00, 0x07, -/* 0001D360 */ 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x76, 0x02, 0xFE, 0xA8, 0x14, 0x02, -/* 0001D370 */ 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x5A, 0x00, 0x00, 0xFF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x03, -/* 0001D380 */ 0x00, 0x76, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x92, 0x03, 0x0A, 0xFF, 0x00, 0x00, 0x40, 0x02, -/* 0001D390 */ 0xFE, 0x17, 0x14, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x17, 0x14, 0x6A, 0x6A, 0x02, -/* 0001D3A0 */ 0x01, 0x05, 0x03, 0x06, 0x05, 0x0D, 0x0D, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x05, 0x08, -/* 0001D3B0 */ 0x32, 0x8D, 0x01, 0x06, 0x06, 0x00, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8D, 0x01, 0x03, -/* 0001D3C0 */ 0x07, 0x01, 0x00, 0x60, 0x07, 0x07, 0x00, 0x5B, 0x01, 0x07, 0x00, 0x00, 0x5B, 0x02, 0x03, 0x00, -/* 0001D3D0 */ 0x00, 0x5B, 0x03, 0x04, 0x00, 0x00, 0xEE, 0x04, 0x00, 0x06, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, -/* 0001D3E0 */ 0x00, 0x24, 0x00, 0xFE, 0x75, 0x02, 0xFE, 0x2D, 0x14, 0x02, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, -/* 0001D3F0 */ 0x53, 0x00, 0x00, 0xFF, 0x5C, 0x08, 0x01, 0x00, 0x88, 0x03, 0x00, 0x75, 0x08, 0xA2, 0x41, 0xC1, -/* 0001D400 */ 0x01, 0xFE, 0x91, 0x03, 0x09, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0x9C, 0x13, 0xFF, 0x00, 0x10, -/* 0001D410 */ 0x01, 0x00, 0x04, 0x04, 0xFE, 0x9C, 0x13, 0x71, 0x71, 0x02, 0x01, 0x06, 0x03, 0x07, 0x06, 0x0D, -/* 0001D420 */ 0x0D, 0x01, 0x01, 0x02, 0x06, 0x08, 0x33, 0x8D, 0x01, 0x06, 0x07, 0x00, 0x00, 0x07, 0x05, 0x00, -/* 0001D430 */ 0x5A, 0x00, 0x02, 0x8D, 0x01, 0x1D, 0x08, 0x01, 0x00, 0x5B, 0x01, 0x08, 0x00, 0x00, 0x5B, 0x02, -/* 0001D440 */ 0x03, 0x00, 0x00, 0x5B, 0x03, 0x04, 0x00, 0x00, 0x5B, 0x04, 0x05, 0x00, 0x00, 0xEE, 0x05, 0x00, -/* 0001D450 */ 0x07, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xC1, 0x13, 0x02, 0x00, 0x00, -/* 0001D460 */ 0x00, 0x00, 0x31, 0x00, 0x4B, 0x00, 0x00, 0xFF, 0x5C, 0x08, 0x01, 0x00, 0x88, 0x03, 0x00, 0x74, -/* 0001D470 */ 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x90, 0x03, 0x08, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0x45, -/* 0001D480 */ 0x13, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x45, 0x13, 0x4D, 0x4D, 0x02, 0x01, 0x04, -/* 0001D490 */ 0x03, 0x05, 0x04, 0x0B, 0x0B, 0x01, 0x01, 0x02, 0x04, 0x08, 0x29, 0x8D, 0x01, 0x06, 0x05, 0x00, -/* 0001D4A0 */ 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x8D, 0x01, 0x1E, 0x06, 0x01, 0x00, 0x5B, 0x01, 0x06, -/* 0001D4B0 */ 0x00, 0x00, 0x5B, 0x02, 0x03, 0x00, 0x00, 0xEE, 0x03, 0x00, 0x05, 0x00, 0x00, 0x09, 0x02, 0x00, -/* 0001D4C0 */ 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x58, 0x13, 0x02, 0x00, 0x00, 0x00, 0x00, 0x27, 0x00, 0x39, 0x00, -/* 0001D4D0 */ 0x00, 0xFF, 0x5C, 0x08, 0x01, 0x00, 0x88, 0x03, 0x00, 0x73, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, -/* 0001D4E0 */ 0x8F, 0x03, 0x07, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0xEE, 0x12, 0xFF, 0x00, 0x10, 0x01, 0x00, -/* 0001D4F0 */ 0x02, 0x02, 0xFE, 0xEE, 0x12, 0x4D, 0x4D, 0x02, 0x01, 0x04, 0x03, 0x05, 0x04, 0x0B, 0x0B, 0x01, -/* 0001D500 */ 0x01, 0x02, 0x04, 0x08, 0x29, 0x8D, 0x01, 0x06, 0x05, 0x00, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, -/* 0001D510 */ 0x02, 0x8D, 0x01, 0x1F, 0x06, 0x01, 0x00, 0x5B, 0x01, 0x06, 0x00, 0x00, 0x5B, 0x02, 0x03, 0x00, -/* 0001D520 */ 0x00, 0xEE, 0x03, 0x00, 0x05, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x01, -/* 0001D530 */ 0x13, 0x02, 0x00, 0x00, 0x00, 0x00, 0x27, 0x00, 0x39, 0x00, 0x00, 0xBF, 0x5C, 0x08, 0x01, 0x00, -/* 0001D540 */ 0x88, 0x01, 0x00, 0x51, 0x1F, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xDA, 0x02, 0x06, 0xFE, 0x53, 0x0D, -/* 0001D550 */ 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, 0x53, 0x0D, 0x72, 0x72, 0x41, 0x06, 0x04, 0x08, -/* 0001D560 */ 0x09, 0x10, 0x10, 0x01, 0x02, 0x02, 0x07, 0x07, 0x08, 0x41, 0x8D, 0x01, 0x14, 0x08, 0x00, 0x00, -/* 0001D570 */ 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x5B, 0x01, 0x04, 0x00, 0x00, 0x5B, 0x02, 0x05, 0x00, 0x00, -/* 0001D580 */ 0x8D, 0x01, 0x04, 0x09, 0x01, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x03, 0x5B, 0x01, 0x06, 0x01, -/* 0001D590 */ 0x00, 0x5B, 0x02, 0x02, 0x01, 0x00, 0xEE, 0x03, 0x09, 0x09, 0x01, 0x00, 0x5B, 0x03, 0x09, 0x00, -/* 0001D5A0 */ 0x00, 0xEE, 0x04, 0xFF, 0x08, 0x00, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x7E, 0x0D, 0x02, 0x00, -/* 0001D5B0 */ 0x00, 0x00, 0x00, 0x3F, 0x00, 0x46, 0x00, 0x00, 0x3F, 0x5C, 0x08, 0xC1, 0x13, 0x88, 0x25, 0x00, -/* 0001D5C0 */ 0x22, 0x04, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0xD0, 0x02, 0x03, 0xFE, 0xC3, 0x06, 0x02, 0xFF, 0x00, -/* 0001D5D0 */ 0x10, 0x01, 0x00, 0x02, 0x01, 0xFE, 0xC3, 0x06, 0xFE, 0x36, 0x02, 0xFE, 0x36, 0x02, 0x06, 0x09, -/* 0001D5E0 */ 0x0B, 0x05, 0x19, 0x18, 0x01, 0x02, 0x02, 0x05, 0x05, 0x05, 0x05, 0x01, 0x0A, 0x08, 0x01, 0x19, -/* 0001D5F0 */ 0x06, 0xFE, 0x8B, 0x03, 0x06, 0xFE, 0x8C, 0x03, 0x06, 0xFE, 0x8D, 0x03, 0x06, 0xFE, 0x8E, 0x03, -/* 0001D600 */ 0x07, 0x69, 0x15, 0x03, 0x00, 0x09, 0x02, 0x47, 0x09, 0x03, 0x8D, 0x01, 0x35, 0x0B, 0x00, 0x00, -/* 0001D610 */ 0x4B, 0x0B, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 0001D620 */ 0x00, 0x0C, 0x00, 0x00, 0x00, 0x79, 0x09, 0x0C, 0x00, 0x8D, 0x01, 0x37, 0x0E, 0x01, 0x00, 0x4B, -/* 0001D630 */ 0x0E, 0x6B, 0x0D, 0x0E, 0x01, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x0E, 0xF2, 0x01, 0x0D, 0x0D, 0x01, -/* 0001D640 */ 0x00, 0x00, 0x00, 0x01, 0x00, 0x79, 0x0D, 0x0C, 0x02, 0xD6, 0x00, 0x0D, 0x0C, 0x79, 0x0D, 0x0C, -/* 0001D650 */ 0x03, 0xD6, 0x01, 0x0D, 0x0C, 0x79, 0x0D, 0x0C, 0x04, 0x5B, 0x01, 0x0C, 0x00, 0x00, 0xEE, 0x02, -/* 0001D660 */ 0x00, 0x0B, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x01, 0x18, 0x00, 0x00, 0x00, -/* 0001D670 */ 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8B, 0x03, 0x00, 0x00, 0x8C, 0x03, -/* 0001D680 */ 0x00, 0x00, 0x84, 0x01, 0x00, 0x00, 0x87, 0x01, 0x00, 0x00, 0xFE, 0x8B, 0x03, 0x61, 0xFE, 0x8C, -/* 0001D690 */ 0x03, 0xFE, 0x84, 0x01, 0xFE, 0x87, 0x01, 0xFE, 0xD6, 0x06, 0x03, 0x00, 0x00, 0x00, 0x00, 0x08, -/* 0001D6A0 */ 0x00, 0x12, 0x00, 0x5F, 0x00, 0x10, 0x02, 0x00, 0xAA, 0xD7, 0x01, 0x00, 0xB0, 0xD6, 0x01, 0x00, -/* 0001D6B0 */ 0xBF, 0x5C, 0x0F, 0xC1, 0x03, 0x88, 0x03, 0x00, 0x2B, 0x0C, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x8E, -/* 0001D6C0 */ 0x03, 0x05, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0xA6, 0x07, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, -/* 0001D6D0 */ 0x03, 0xFE, 0xA6, 0x07, 0xFE, 0x41, 0x01, 0xFE, 0x41, 0x01, 0x41, 0x07, 0x02, 0x06, 0x03, 0x24, -/* 0001D6E0 */ 0x24, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x07, 0x07, 0x07, 0x07, 0x05, 0x91, 0x59, 0x06, 0xB2, -/* 0001D6F0 */ 0x04, 0x06, 0x8D, 0x01, 0x03, 0x06, 0x00, 0x00, 0x60, 0x06, 0x06, 0x00, 0x0F, 0x05, 0x00, 0x06, -/* 0001D700 */ 0xA6, 0x00, 0x09, 0x77, 0x00, 0x8D, 0x01, 0x37, 0x07, 0x01, 0x00, 0x4B, 0x07, 0x6B, 0x06, 0x07, -/* 0001D710 */ 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x07, 0x60, 0x08, 0x04, 0x02, 0x5B, 0x01, 0x08, 0x00, 0x00, -/* 0001D720 */ 0xF2, 0x02, 0x06, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA5, 0x06, 0x06, 0x03, 0x00, 0x00, -/* 0001D730 */ 0x60, 0x07, 0x04, 0x04, 0x11, 0x03, 0x00, 0x06, 0x07, 0x09, 0x34, 0x00, 0x60, 0x06, 0x04, 0x02, -/* 0001D740 */ 0x96, 0x06, 0x06, 0x02, 0x00, 0x00, 0xA6, 0x07, 0x14, 0x03, 0x00, 0x06, 0x07, 0x09, 0x20, 0x00, -/* 0001D750 */ 0x8D, 0x01, 0x37, 0x07, 0x01, 0x00, 0x4B, 0x07, 0x6B, 0x06, 0x07, 0x05, 0x07, 0x01, 0x00, 0x5A, -/* 0001D760 */ 0x00, 0x07, 0xF2, 0x01, 0x06, 0x06, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x75, 0x06, 0x04, 0x06, -/* 0001D770 */ 0x60, 0x06, 0x04, 0x02, 0x9B, 0x03, 0x06, 0x02, 0x00, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x61, -/* 0001D780 */ 0x03, 0xBF, 0xFE, 0x8C, 0x03, 0xC1, 0xFE, 0x8B, 0x03, 0x61, 0xFE, 0x8C, 0x03, 0xFE, 0xC8, 0x07, -/* 0001D790 */ 0x06, 0x05, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x2F, 0x00, 0x05, 0x00, 0x2B, 0x00, 0x4B, 0x00, 0x61, -/* 0001D7A0 */ 0x00, 0x20, 0x00, 0x3D, 0x00, 0x0C, 0x00, 0x26, 0x00, 0x00, 0xBF, 0x4C, 0x02, 0xC1, 0x03, 0x88, -/* 0001D7B0 */ 0x03, 0x00, 0x27, 0x0C, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x8D, 0x03, 0x04, 0xFF, 0x00, 0x00, 0x40, -/* 0001D7C0 */ 0x02, 0xFE, 0x35, 0x07, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x35, 0x07, 0x62, 0x62, -/* 0001D7D0 */ 0x01, 0x04, 0x02, 0x05, 0x0F, 0x0D, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x04, 0x2F, 0x59, -/* 0001D7E0 */ 0x05, 0xB2, 0x03, 0x05, 0x8D, 0x01, 0x03, 0x05, 0x00, 0x00, 0x60, 0x05, 0x05, 0x00, 0x0E, 0x10, -/* 0001D7F0 */ 0x00, 0x05, 0x60, 0x05, 0x03, 0x01, 0x96, 0x05, 0x05, 0x02, 0x00, 0x00, 0x47, 0x00, 0x05, 0x09, -/* 0001D800 */ 0x05, 0x00, 0xA6, 0x05, 0x47, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x61, -/* 0001D810 */ 0x03, 0xFE, 0x8C, 0x03, 0xFE, 0x50, 0x07, 0x02, 0x05, 0x00, 0x00, 0x00, 0x28, 0x00, 0x46, 0x00, -/* 0001D820 */ 0x00, 0xBF, 0x5C, 0x08, 0x01, 0x00, 0x88, 0x03, 0x00, 0x1C, 0x11, 0xA2, 0x41, 0xC0, 0x00, 0xFE, -/* 0001D830 */ 0xF5, 0x02, 0x02, 0xFE, 0x01, 0x10, 0xFE, 0xC2, 0x04, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x01, -/* 0001D840 */ 0xFE, 0xC2, 0x04, 0x25, 0x25, 0x01, 0x03, 0x04, 0x06, 0x04, 0x0D, 0x0C, 0x01, 0x01, 0x01, 0x05, -/* 0001D850 */ 0x07, 0x08, 0x2D, 0x15, 0x05, 0x00, 0x04, 0x03, 0xCA, 0x06, 0x47, 0x04, 0x06, 0x8D, 0x01, 0x04, -/* 0001D860 */ 0x06, 0x00, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x03, 0x5B, 0x01, 0x04, 0x00, 0x00, 0x5B, 0x02, -/* 0001D870 */ 0x02, 0x00, 0x00, 0xEE, 0x03, 0x00, 0x06, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, -/* 0001D880 */ 0xFE, 0xC3, 0x04, 0x03, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x0D, 0x00, 0x21, 0x00, 0x17, 0x00, -/* 0001D890 */ 0x00, 0x00}; - -} diff --git a/lib/Runtime/Library/InJavascript/Intl.js.bc.64b.h b/lib/Runtime/Library/InJavascript/Intl.js.bc.64b.h deleted file mode 100755 index 73021b61141..00000000000 --- a/lib/Runtime/Library/InJavascript/Intl.js.bc.64b.h +++ /dev/null @@ -1,11419 +0,0 @@ -//------------------------------------------------------------------------------------------------------- -// Copyright (C) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. -//------------------------------------------------------------------------------------------------------- -#if 0 -//------------------------------------------------------------------------------------------------------- -// Copyright (C) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. -//------------------------------------------------------------------------------------------------------- - -"use strict"; -// Core intl lib -(function (EngineInterface, InitType) { - var platform = EngineInterface.Intl; - - // allow unit tests to disable caching behavior for testing convenience but have this always `true` in real scenarios - platform.useCaches = true; - - // determine what backing library we are using - // making these vars in JS allows us to more change how we - // determine the backing library - const isPlatformUsingICU = !platform.winglob; - const isPlatformUsingWinGlob = platform.winglob; - - // constants - const NOT_FOUND = "NOT_FOUND"; - - // Built-Ins - var setPrototype = platform.builtInSetPrototype; - var getArrayLength = platform.builtInGetArrayLength; - var callInstanceFunc = platform.builtInCallInstanceFunction; - - // Helper for our extensive usage of null-prototyped objects - const bare = (obj = {}) => setPrototype(obj, null); - - // REVIEW(jahorto): IntlCache replaces past use of raw objects and JS Maps to cache arbitrary data for a given locale - // We use a raw object rather than a Map because we don't need any features specific to Maps - // If the cache gets too big (arbitrarily, > 25 keys is "too big" by default), we delete the entire internal object and start from scratch - // TODO(jahorto): Experiment with the performance benefit of using an LRU or random-delete cache here. - function IntlCache(n = 25) { - return bare({ - n: n, - _cache: _.create(), - - get(key) { - return platform.useCaches ? this._cache[key] : undefined; - }, - - set(key, value) { - if (!platform.useCaches) { - return; - } - - if (_.keys(this._cache).length > this.n && this._cache[key] === undefined) { - this._cache = _.create(); - } - - this._cache[key] = value; - } - }); - } - - var Boolean = platform.Boolean; - var Object = platform.Object; - var RegExp = platform.RegExp; - var Number = platform.Number; - var String = platform.String; - var Date = platform.Date; - var Error = platform.Error; - - var RaiseAssert = platform.raiseAssert; - - var Math = setPrototype({ - abs: platform.builtInMathAbs, - floor: platform.builtInMathFloor, - max: platform.builtInMathMax, - pow: platform.builtInMathPow - }, null); - - var ObjectGetPrototypeOf = platform.builtInJavascriptObjectEntryGetPrototypeOf; - var ObjectIsExtensible = platform.builtInJavascriptObjectEntryIsExtensible; - var ObjectGetOwnPropertyNames = platform.builtInJavascriptObjectEntryGetOwnPropertyNames; - var ObjectInstanceHasOwnProperty = platform.builtInJavascriptObjectEntryHasOwnProperty; - // Because we don't keep track of the attributes object, and neither does the internals of Object.defineProperty; - // We don't need to restore it's prototype. - var _objectDefineProperty = platform.builtInJavascriptObjectEntryDefineProperty; - var ObjectDefineProperty = function (obj, prop, attributes) { - _objectDefineProperty(obj, prop, setPrototype(attributes, null)); - }; - - var ArrayInstanceForEach = platform.builtInJavascriptArrayEntryForEach; - var ArrayInstanceIndexOf = platform.builtInJavascriptArrayEntryIndexOf; - var ArrayInstancePush = platform.builtInJavascriptArrayEntryPush; - var ArrayInstanceJoin = platform.builtInJavascriptArrayEntryJoin; - - var FunctionInstanceBind = platform.builtInJavascriptFunctionEntryBind; - var DateInstanceGetDate = platform.builtInJavascriptDateEntryGetDate; - var DateNow = platform.builtInJavascriptDateEntryNow; - - var StringInstanceReplace = platform.builtInJavascriptStringEntryReplace; - var StringInstanceToLowerCase = platform.builtInJavascriptStringEntryToLowerCase; - var StringInstanceToUpperCase = platform.builtInJavascriptStringEntryToUpperCase; - - var ObjectPrototype = platform.Object_prototype; - - var isFinite = platform.builtInGlobalObjectEntryIsFinite; - var isNaN = platform.builtInGlobalObjectEntryIsNaN; - - // Keep this "enum" in sync with IntlEngineInterfaceExtensionObject::EntryIntl_RegisterBuiltInFunction - const IntlBuiltInFunctionID = setPrototype({ - MIN: 0, - DateToLocaleString: 0, - DateToLocaleDateString: 1, - DateToLocaleTimeString: 2, - NumberToLocaleString: 3, - StringLocaleCompare: 4, - MAX: 5 - }, null); - - const _ = { - toUpperCase(str) { return callInstanceFunc(StringInstanceToUpperCase, str); }, - toLowerCase(str) { return callInstanceFunc(StringInstanceToLowerCase, str); }, - replace(str, pattern, replacement) { return callInstanceFunc(StringInstanceReplace, str, pattern, replacement); }, - split(str, pattern) { return callInstanceFunc(platform.builtInJavascriptStringEntrySplit, str, pattern); }, - substring(str, start, end) { return callInstanceFunc(platform.builtInJavascriptStringEntrySubstring, str, start, end); }, - stringIndexOf(str, el, from) { return callInstanceFunc(platform.builtInJavascriptStringEntryIndexOf, str, el, from); }, - match(str, re) { return platform.builtInRegexMatch(str, re); }, - repeat(str, count) { return callInstanceFunc(platform.builtInJavascriptStringEntryRepeat, str, count); }, - - forEach(array, func) { return callInstanceFunc(ArrayInstanceForEach, array, func); }, - push(array, ...els) { return callInstanceFunc(ArrayInstancePush, array, ...els); }, - join(array, sep) { return callInstanceFunc(ArrayInstanceJoin, array, sep); }, - arrayIndexOf(array, el, from) { return callInstanceFunc(ArrayInstanceIndexOf, array, el, from); }, - map(array, func) { return callInstanceFunc(platform.builtInJavascriptArrayEntryMap, array, func); }, - reduce(array, func, init) { return callInstanceFunc(platform.builtInJavascriptArrayEntryReduce, array, func, init); }, - slice(array, start, end) { return callInstanceFunc(platform.builtInJavascriptArrayEntrySlice, array, start, end); }, - concat(array, ...els) { return callInstanceFunc(platform.builtInJavascriptArrayEntryConcat, array, ...els); }, - filter(array, func) { return callInstanceFunc(platform.builtInJavascriptArrayEntryFilter, array, func); }, - unique(array) { return _.filter(array, (v, i) => _.arrayIndexOf(array, v) === i); }, - - keys: platform.builtInJavascriptObjectEntryKeys, - hasOwnProperty(o, prop) { return callInstanceFunc(platform.builtInJavascriptObjectEntryHasOwnProperty, o, prop); }, - // If we don't set the descriptor's prototype to null, defining properties with `value`s can fail of Object.prototype.get is defined - defineProperty(o, prop, desc) { - _.setPrototypeOf(desc, null); - platform.builtInJavascriptObjectEntryDefineProperty(o, prop, desc); - }, - isExtensible: platform.builtInJavascriptObjectEntryIsExtensible, - create(proto = null) { return platform.builtInJavascriptObjectCreate(proto); }, - setPrototypeOf(target, proto = null) { return platform.builtInSetPrototype(target, proto); }, - - abs: platform.builtInMathAbs, - // Make _.floor more like ECMA262 #sec-mathematical-operations' floor by normalizing -0 - floor(x) { return x === 0 ? 0 : platform.builtInMathFloor(x) }, - max: platform.builtInMathMax, - pow: platform.builtInMathPow, - - isFinite: platform.builtInGlobalObjectEntryIsFinite, - isNaN: platform.builtInGlobalObjectEntryIsNaN, - - getDate(date) { return callInstanceFunc(platform.builtInJavascriptDateEntryGetDate, date); }, - - bind(func, that) { return callInstanceFunc(platform.builtInJavascriptFunctionEntryBind, func, that); }, - apply(func, that, args) { return callInstanceFunc(platform.builtInJavascriptFunctionEntryApply, func, that, args); }, - }; - - const raise = { - rangeError() { return arguments.length === 3 ? platform.raiseOptionValueOutOfRange_3(...arguments) : platform.raiseOptionValueOutOfRange(); }, - assert(test, err) { return test ? undefined : platform.raiseAssert(err || new Error("Assert failed")); } - }; - - // Keep these "enums" in sync with lib/Runtime/PlatformAgnostic/Intl.h - const CollatorSensitivity = bare({ - base: 0, - accent: 1, - case: 2, - variant: 3, - DEFAULT: 3 - }); - const CollatorCaseFirst = bare({ - upper: 0, - lower: 1, - false: 2, - DEFAULT: 2 - }); - const NumberFormatStyle = bare({ - DEFAULT: 0, // "decimal" is the default - DECIMAL: 0, // Intl.NumberFormat(locale, { style: "decimal" }); // aka in our code as "number" - PERCENT: 1, // Intl.NumberFormat(locale, { style: "percent" }); - CURRENCY: 2, // Intl.NumberFormat(locale, { style: "currency", ... }); - }); - const NumberFormatCurrencyDisplay = bare({ - DEFAULT: 0, // "symbol" is the default - SYMBOL: 0, // Intl.NumberFormat(locale, { style: "currency", currencyDisplay: "symbol" }); // e.g. "$" or "US$" depeding on locale - CODE: 1, // Intl.NumberFormat(locale, { style: "currency", currencyDisplay: "code" }); // e.g. "USD" - NAME: 2, // Intl.NumberFormat(locale, { style: "currency", currencyDisplay: "name" }); // e.g. "US dollar" - }); - - const toEnum = function (enumObject, key) { - if (!key || typeof key !== "string") { - return enumObject.DEFAULT; - } else { - return enumObject[key]; - } - } - - // When this file was originally written, it assumed Windows Globalization semantics. - // Throughout the transition to ICU, we tried to share as much code as possible between WinGlob and ICU. - // However, because ICU has different semantics and our ICU-based implementation tries to match a newer - // version of the Intl spec, we have decided that the code sharing was causing more harm than good. - // Thus, while we support both ICU and WinGlob, we have decided to duplicate a substantial amount of code. - // The indentation of the below if block is intentionally incorrect so as to minimize diff. - if (isPlatformUsingICU) { - - let __defaultLocale = undefined; - const GetDefaultLocale = function () { - if (__defaultLocale && platform.useCaches) { - return __defaultLocale; - } - - const locale = platform.getDefaultLocale(); - if (!locale) { - // if the system locale is undefined/null/empty string, we have to - // do something or else we will crash - __defaultLocale = "en"; - } else { - __defaultLocale = locale; - } - - return __defaultLocale; - }; - - // A helper function that is meant to rethrow SOE and OOM exceptions allowing them to propagate. - var throwExIfOOMOrSOE = function (ex) { - if (ex.number === -2146828260 || ex.number === -2146828281) { - throw ex; - } - }; - - var tagPublicFunction = function (name, f) { - return platform.tagPublicLibraryCode(f, name); - }; - - /** - * Determines the best possible locale available in the system - * - * ECMA-402: #sec-bestavailablelocale - * - * @param {Function} isAvailableLocale A function that takes a locale and returns if the locale is supported - * @param {String} locale the locale (including its fallbacks) that will be searched for - * @returns {String} the given locale or one of its fallbacks, or undefined - */ - const BestAvailableLocale = function (isAvailableLocale, locale) { - if (locale === undefined) { - return undefined; - } - - let candidate = locale; - const hyphen = "-"; - while (true) { - if (isAvailableLocale(candidate)) { - return candidate; - } - - let pos = -1; - for (let i = candidate.length - 1; i >= 0; i--) { - if (candidate[i] === hyphen) { - pos = i; - break; - } - } - - if (pos === -1) { - return undefined; - } else if (pos >= 2 && candidate[pos - 2] === hyphen) { - // This is spec code likely intended to skip over singletons, - // such that if we just searched for "en-a-value", - // pos would initially truncate the candidate to "en-a", which - // is not a valid language tag. - // See https://tools.ietf.org/html/rfc5646#section-4.4.2 - pos -= 2; - } - - candidate = _.substring(candidate, 0, pos); - } - }; - - /** - * Returns an array of acceptable values for a given key in a given locale. It is expected that - * locale is one that has already been validated by platform.is*LocaleAvailable and key is limited - * to the [[RelevantExtensionKeys]] of Collator, NumberFormat, and DateTimeFormat. - * - * ECMA402: #sec-internal-slots ([[SortLocaleData]], [[SearchLocaleData]], and [[LocaleData]]) - * - * @param {String} key a unicode extension key like "co", "ca", etc - * @param {String} locale the locale for which to get the given key's data - * @returns {String[]} - */ - const getKeyLocaleData = function (key, locale) { - // NOTE: keep this enum in sync with `enum class LocaleDataKind` in IntlEngineInterfaceExtensionObject.cpp - const LocaleDataKind = { - co: 0, - kf: 1, - kn: 2, - ca: 3, - nu: 4, - hc: 5, - }; - - const keyLocaleData = platform.getLocaleData(LocaleDataKind[key], locale); - - return keyLocaleData; - }; - - /** - * Determines which locale (or fallback) to use of an array of locales. - * - * ECMA-402: #sec-lookupmatcher - * - * @param {Function} isAvailableLocale A function that takes a locale and returns if the locale is supported - * @param {String[]} requestedLocales An array of requested locales - */ - const LookupMatcher = function (isAvailableLocale, requestedLocales) { - const result = _.create(); - for (let i = 0; i < requestedLocales.length; ++i) { - const parsedLangtag = parseLangtag(requestedLocales[i]); - if (parsedLangtag === null) { - continue; - } - - const availableLocale = BestAvailableLocale(isAvailableLocale, parsedLangtag.base); - if (availableLocale !== undefined) { - result.locale = availableLocale; - if (requestedLocales[i] !== parsedLangtag.base) { - result.extension = parsedLangtag.unicodeExtension; - } - - return result; - } - } - - result.locale = GetDefaultLocale(); - return result; - }; - - const BestFitMatcher = LookupMatcher; - - /** - * Determine a value for a given key in the given extension string - * - * ECMA-402: #sec-unicodeextensionvalue - * - * @param {String} extension the full unicode extension, such as "-u-co-phonebk-kf-true" - * @param {String} key the specific key we are looking for in the extension, such as "co" - */ - const UnicodeExtensionValue = function (extension, key) { - raise.assert(key.length === 2); - const size = extension.length; - - // search for the key-value pair - let pos = _.stringIndexOf(extension, `-${key}-`); - if (pos !== -1) { - const start = pos + 4; - let end = start; - let k = start; - let done = false; - while (!done) { - const e = _.stringIndexOf(extension, "-", k); - const len = e === -1 ? size - k : e - k; - if (len === 2) { - done = true; - } else if (e === -1) { - end = size; - done = true; - } else { - end = e; - k = e + 1; - } - } - - return _.substring(extension, start, end); - } - - // search for the key with no associated value - pos = _.stringIndexOf(extension, `-${key}`); - if (pos !== -1 && pos + 3 === size) { - return ""; - } else { - return undefined; - } - }; - - /** - * Resolves a locale by finding which base locale or fallback is available on the system, - * then determines which provided unicode options are available for that locale. - * - * ECMA-402: #sec-resolvelocale - * - * @param {Function} isAvailableLocale A function that takes a locale and returns if the locale is supported - * @param {String[]} requestedLocales The result of calling CanonicalizeLocaleList on the user-requested locale array - * @param {Object} options An object containing a lookupMatcher value and any value given by the user's option object, - * mapped to the correct unicode extension key - * @param {String[]} relevantExtensionKeys An array of unicode extension keys that we care about for the current lookup - */ - const ResolveLocale = function (isAvailableLocale, requestedLocales, options, relevantExtensionKeys) { - const matcher = options.lookupMatcher; - let r; - if (matcher === "lookup") { - r = LookupMatcher(isAvailableLocale, requestedLocales); - } else { - r = BestFitMatcher(isAvailableLocale, requestedLocales); - } - - let foundLocale = r.locale; - const result = bare({ dataLocale: foundLocale }); - let supportedExtension = "-u"; - _.forEach(relevantExtensionKeys, function (key) { - const keyLocaleData = getKeyLocaleData(key, foundLocale); - let value = keyLocaleData[0]; - let supportedExtensionAddition = ""; - if (r.extension) { - const requestedValue = UnicodeExtensionValue(r.extension, key); - if (requestedValue !== undefined) { - if (requestedValue !== "") { - if (_.arrayIndexOf(keyLocaleData, requestedValue) !== -1) { - value = requestedValue; - supportedExtensionAddition = `-${key}-${value}`; - } - } else if (_.arrayIndexOf(keyLocaleData, "true") !== -1) { - value = "true"; - } - } - } - - if (_.hasOwnProperty(options, key)) { - const optionsValue = options[key]; - if (_.arrayIndexOf(keyLocaleData, optionsValue) !== -1) { - if (optionsValue !== value) { - value = optionsValue; - supportedExtensionAddition = ""; - } - } - } - - result[key] = value; - supportedExtension += supportedExtensionAddition; - }); - - if (supportedExtension.length > 2) { - const privateIndex = _.stringIndexOf(foundLocale, "-x-"); - if (privateIndex === -1) { - foundLocale += supportedExtension; - } else { - const preExtension = _.substring(foundLocale, 0, privateIndex); - const postExtension = _.substring(foundLocale, privateIndex); - foundLocale = preExtension + supportedExtension + postExtension; - } - - foundLocale = platform.normalizeLanguageTag(foundLocale); - } - - result.locale = foundLocale; - return result; - }; - - var Internal = bare({ - ToObject(o) { - if (o === null) { - platform.raiseNeedObject(); - } - return o !== undefined ? Object(o) : undefined; - }, - - ToString(s) { - return s !== undefined ? String(s) : undefined; - }, - - ToNumber(n) { - return n !== undefined ? Number(n) : NaN; - }, - - ToLogicalBoolean(v) { - return v !== undefined ? Boolean(v) : undefined; - }, - - ToUint32(n) { - var num = Number(n), - ret = 0; - if (!isNaN(num) && isFinite(num)) { - ret = _.abs(num % _.pow(2, 32)); - } - return ret; - } - }); - - // Internal ops implemented in JS: - function GetOption(options, property, type, values, fallback) { - let value = options[property]; - - if (value !== undefined) { - if (type == "boolean") { - value = Internal.ToLogicalBoolean(value); - } - - if (type == "string") { - value = Internal.ToString(value); - } - - if (type == "number") { - value = Internal.ToNumber(value); - } - - if (values !== undefined && _.arrayIndexOf(values, value) == -1) { - platform.raiseOptionValueOutOfRange_3(String(value), String(property), `['${_.join(values, "', '")}']`); - } - - return value; - } - - return fallback; - } - - /** - * Extracts the value of the property named property from the provided options object, - * converts it to a Number value, checks whether it is in the allowed range, - * and fills in a fallback value if necessary. - * - * NOTE: this has known differences compared to the spec GetNumberOption in order to - * support more verbose errors. It is more similar to DefaultNumberOption - * - * ECMA402: #sec-defaultnumberoption - * - * @param {Object} options user-provided options object - * @param {String} property the property we are trying to get off of `options` - * @param {Number} minimum minimum allowable value for options[property] - * @param {Number} maximum maximum allowable value for options[property] - * @param {Number} fallback return value if options[property] is undefined or invalid - * @returns {Number} - */ - const GetNumberOption = function (options, property, minimum, maximum, fallback) { - let value = options[property]; - if (value !== undefined) { - value = Internal.ToNumber(value); - if (_.isNaN(value) || value < minimum || value > maximum) { - platform.raiseOptionValueOutOfRange_3(String(value), property, `[${minimum} - ${maximum}]`); - } - return _.floor(value); - } - - return fallback; - }; - - let CURRENCY_CODE_RE; - function InitializeCurrencyRegExp() { - CURRENCY_CODE_RE = /^[A-Z]{3}$/i; - } - - /** - * Returns an object representing the language, script, region, extension, and base of a language tag, - * or null if the language tag isn't valid. - * - * @param {String} langtag a candidate BCP47 langtag - */ - const parseLangtag = (function () { - // Language Tag Syntax as described in RFC 5646 #section-2.1 - // Note: All language tags are comprised only of ASCII characters (makes our job easy here) - // Note: Language tags in canonical form have case conventions, but language tags are case-insensitive for our purposes - - // Note: The ABNF syntax used in RFC 5646 #section-2.1 uses the following numeric quantifier conventions: - // - (Parentheses) are used for grouping - // - PRODUCTION => exactly 1 of PRODUCTION /PRODUCTION/ - // - [PRODUCTION] => 0 or 1 of PRODUCTION /(PRODUCTION)?/ - // - #PRODUCTION => exactly # of PRODUCTION /(PRODUCTION){#}/ - // - a*bPRODUCTION (where a and b are optional) - // - *PRODUCTION => any number of PRODUCTION /(PRODUCTION)*/ - // - 1*PRODUCTION => 1 or more of PRODUCTION /(PRODUCTION)+/ - // - #*PRODUCTION => # or more of PRODUCTION /(PRODUCTION){#,}/ - // - *#PRODUCTION => 0 to # (inclusive) of PRODUCTION /(PRODUCTION){,#}/ or /(PRODUCTION){0,#}/ - // - a*bPRODUCTION => a to b (inclusive) of PRODUCTION /(PRODUCTION){a,b}/ - - const ALPHA = "[A-Z]"; - const DIGIT = "[0-9]"; - const alphanum = `(?:${ALPHA}|${DIGIT})`; - - const regular = "\\b(?:art-lojban|cel-gaulish|no-bok|no-nyn|zh-guoyu|zh-hakka|zh-min|zh-min-nan|zh-xiang)\\b"; - const irregular = "\\b(?:en-GB-oed|i-ami|i-bnn|i-default|i-enochian|i-hak|i-klingon|i-lux|i-mingo" + - "|i-navajo|i-pwn|i-tao|i-tay|i-tsu|sgn-BE-FR|sgn-BE-NL|sgn-CH-DE)\\b"; - const grandfathered = `\\b(?:${regular}|${irregular})\\b`; - - const privateuse = `\\b(?:x(?:-${alphanum}{1,8}\\b)+)\\b`; // privateuse = "x" 1*("-" (1*8alphanum)) - const singleton = `\\b(?:${DIGIT}|[A-WY-Z])\\b`; // singleton ~= alphanum except for 'x' ; (paraphrased) - const extension = `\\b(?:${singleton}(?:-${alphanum}{2,8})+)\\b`; // extension = singleton 1*("-" (2*8alphanum)) - const variant = `\\b(?:${alphanum}{5,8}|${DIGIT}${alphanum}{3})\\b`; // variant = 5*8alphanum / (DIGIT 3alphanum) - const region = `\\b(?:${ALPHA}{2}|${DIGIT}{3})\\b`; // region = 2ALPHA / 3DIGIT - - const script = `\\b(?:${ALPHA}{4})\\b`; // script = 4ALPHA - const extlang = `\\b(?:${ALPHA}{3}\\b(?:-${ALPHA}{3}){0,2})\\b`; // extlang = 3ALPHA *2("-" 3ALPHA) - - const language = '\\b(?:' + // language = - `${ALPHA}{2,3}` + // 2*3ALPHA ; shortest ISO 639 code - `\\b(?:-${extlang})?` + // ["-" extlang] ; sometimes followed by extended language subtags - // `|${ALPHA}{4}` + // / 4ALPHA ; or reserved for future use - // `|${ALPHA}{5,8}` + // / 5*8ALPHA ; or registered language subtag - `|${ALPHA}{4,8}` + // ~/ 4*8ALPHA ; (paraphrased: combined previous two lines) - ')\\b'; - - // Use matching groups only when needed - const LANG_TAG_BASE = `\\b(${language})\\b` + // langtag = language - `\\b(?:-(${script}))?\\b` + // ["-" script] - `\\b(?:-(${region}))?\\b` ; // ["-" region] - const LANG_TAG_EXT = `\\b((?:-${variant})*)\\b` + // *("-" variant) - `\\b((?:-${extension})*)\\b` + // *("-" extension) - `\\b(?:-${privateuse})?\\b` ; // ["-" privateuse] - const langtag = `\\b${LANG_TAG_BASE}\\b${LANG_TAG_EXT}\\b`; - - const LANG_TAG = `\\b(?:${langtag}|${privateuse}|${grandfathered})\\b`; // Language-Tag = ... - - // Use ^ and $ to enforce that the entire input string is a langtag - const LANG_TAG_BASE_RE = new RegExp(`^${LANG_TAG_BASE}$`, 'i'); // [1] language; [2] script; [3] region; - const LANG_TAG_EXT_RE = new RegExp(`^${LANG_TAG_EXT}$`, 'i'); // [1] variants; [2] extensions; - const LANG_TAG_RE = new RegExp(`^${LANG_TAG}$`, 'i'); // [1] language; [2] script; [3] region; [4] variants; [5] extensions; - - const parsedLangtagCache = new IntlCache(); - return function (langtag) { - const cached = parsedLangtagCache.get(langtag); - if (cached) { - return cached; - } - - const parts = _.match(langtag, LANG_TAG_RE); - if (!parts) { - return null; - } - - const ret = _.create(); - ret.language = parts[1]; - ret.base = parts[1]; - if (parts[2]) { - ret.script = parts[2]; - ret.base += "-" + parts[2]; - } - - if (parts[3]) { - ret.region = parts[3]; - ret.base += "-" + parts[3]; - } - - if (parts[4]) { - ret.variants = parts[4]; - } - - if (parts[5]) { - ret.extensions = parts[5]; - - // parse the extension to find the unicode (-u) extension - const extensionParts = _.split(parts[5], "-"); - for (let i = 0; i < extensionParts.length; ++i) { - if (extensionParts[i] !== "u") { - continue; - } - - let k; - for (k = i + 1; k < extensionParts.length && extensionParts[k].length > 1; k++) { - // do nothing, we just want k to equal the index of the next element whose length is 1 - // or to equal the length of extensionParts - // We could have done this with Array.prototype.findIndex too - } - - if (k > i + 1) { - // this creates u-(keys and values)*, which is good enough for the UnicodeExtensionValue, - // which is the only place that this return value is intended to be used - ret.unicodeExtension = _.join(_.slice(extensionParts, i, k), "-"); - } - - // if we have gotten this far, we have found -u-{values}, so we can break - break; - } - } - - parsedLangtagCache.set(langtag, ret); - - return ret; - }; - })(); - - const IsWellFormedCurrencyCode = function (code) { - code = Internal.ToString(code); - - if (!CURRENCY_CODE_RE) { - InitializeCurrencyRegExp(); - } - - return platform.builtInRegexMatch(code, CURRENCY_CODE_RE) !== null; - } - - /** - * Returns true if locale can be generated by RFC5646 section 2.1 and does not contain - * duplicate variant or singleton subtags. - * - * Note that ICU does not implement this correctly for our usage because it is - * extremely permissive about what it will allow -- completely invalid language tags can - * pass through a round of uloc_forLanguageTag/uloc_toLanguageTag or uloc_canonicalize - * even if they are completely bogus. - * - * ECMA402: #sec-isstructurallyvalidlanguagetag - * - * @param {String} locale The locale to check - * @returns {Boolean} - */ - const IsStructurallyValidLanguageTag = function (locale) { - const parsed = parseLangtag(locale); - if (parsed === null) { - return false; - } - - // check duplicate variants - if (parsed.variants) { - const variants = _.split(parsed.variants, "-"); - const uniqueVariants = _.unique(variants); - - if (variants.length !== uniqueVariants.length) { - return false; - } - } - - if (parsed.extensions) { - const extensionParts = _.split(parsed.extensions, "-"); - const singletons = _.map(_.filter(extensionParts, (element) => element.length === 1), (element) => _.toLowerCase(element)); - const uniqueSingletons = _.unique(singletons); - - return singletons.length === uniqueSingletons.length; - } - - return true; - }; - - /** - * Given a locale or list of locales, returns a corresponding list where each locale - * is guaranteed to be "canonical" (proper capitalization, order, etc.). - * - * ECMA402: #sec-canonicalizelocalelist - * - * @param {String|String[]} locales the user-provided locales to be canonicalized - */ - const CanonicalizeLocaleList = function (locales) { - if (typeof locales === "undefined") { - return []; - } - - const seen = []; - const O = typeof locales === "string" ? [locales] : Internal.ToObject(locales); - const len = Internal.ToUint32(O.length); - let k = 0; - - while (k < len) { - const Pk = Internal.ToString(k); - if (Pk in O) { - const kValue = O[Pk]; - if ((typeof kValue !== "string" && typeof kValue !== "object") || kValue === null) { - platform.raiseNeedObjectOrString("locale"); - } - - const tag = Internal.ToString(kValue); - if (!IsStructurallyValidLanguageTag(tag)) { - platform.raiseLocaleNotWellFormed(tag); - } - - const canonicalizedTag = platform.normalizeLanguageTag(tag); - if (canonicalizedTag === undefined) { - // See comment in platform.normalizeLanguageTag about when this happens - platform.raiseLocaleNotWellFormed(tag); - } else if (_.arrayIndexOf(seen, canonicalizedTag) === -1) { - _.push(seen, canonicalizedTag); - } - } - - k += 1; - } - - return seen; - }; - - /** - * Returns the subset of requestedLocales that has a matching locale according to BestAvailableLocale. - * - * ECMA402: #sec-lookupsupportedlocales - * - * @param {Function} isAvailableLocale A function that takes a locale and returns if the locale is supported - * @param {String|String[]} requestedLocales - */ - const LookupSupportedLocales = function (isAvailableLocale, requestedLocales) { - const subset = []; - _.forEach(requestedLocales, function (locale) { - const noExtensionsLocale = parseLangtag(locale).base; - if (BestAvailableLocale(isAvailableLocale, noExtensionsLocale) !== undefined) { - _.push(subset, locale); - } - }); - - return subset; - }; - - const BestFitSupportedLocales = LookupSupportedLocales; - - /** - * Applies digit options used for number formatting onto the given intlObj - * - * This function is used by both NumberFormat and PluralRules, despite being defined - * as a NumberFormat abstract operation - * - * ECMA 402: #sec-setnfdigitoptions - * - * @param {Object} intlObj The state object of either a NumberFormat or PluralRules on which to set the resolved number options - * @param {Object} options The option object to pull min/max sigfigs, fraction digits, and integer digits - * @param {Number} mnfdDefault The default minimumFractionDigits - * @param {Number} mxfdDefault The default maximumFractionDigits - */ - const SetNumberFormatDigitOptions = function (intlObj, options, mnfdDefault, mxfdDefault) { - const mnid = GetNumberOption(options, "minimumIntegerDigits", 1, 21, 1); - const mnfd = GetNumberOption(options, "minimumFractionDigits", 0, 20, mnfdDefault); - const mxfdActualDefault = _.max(mnfd, mxfdDefault); - const mxfd = GetNumberOption(options, "maximumFractionDigits", mnfd, 20, mxfdActualDefault); - intlObj.minimumIntegerDigits = mnid; - intlObj.minimumFractionDigits = mnfd; - intlObj.maximumFractionDigits = mxfd; - - let mnsd = options.minimumSignificantDigits; - let mxsd = options.maximumSignificantDigits; - if (mnsd !== undefined || mxsd !== undefined) { - // don't read options.minimumSignificantDigits below in order to pass - // test262/test/intl402/NumberFormat/significant-digits-options-get-sequence.js - mnsd = GetNumberOption({ minimumSignificantDigits: mnsd }, "minimumSignificantDigits", 1, 21, 1); - mxsd = GetNumberOption({ maximumSignificantDigits: mxsd }, "maximumSignificantDigits", mnsd, 21, 21); - intlObj.minimumSignificantDigits = mnsd; - intlObj.maximumSignificantDigits = mxsd; - } - }; - - /** - * Returns the subset of requestedLocales that has a matching locale, according to - * options.localeMatcher and isAvailableLocale. - * - * ECMA402: #sec-supportedlocales - * - * @param {Function} isAvailableLocale A function that takes a locale and returns if the locale is supported - * @param {String|String[]} requestedLocales - * @param {Object} options - */ - const SupportedLocales = function (isAvailableLocale, requestedLocales, options) { - const matcher = options === undefined - ? "best fit" - : GetOption(Internal.ToObject(options), "localeMatcher", "string", ["best fit", "lookup"], "best fit"); - const supportedLocales = matcher === "best fit" - ? BestFitSupportedLocales(isAvailableLocale, requestedLocales) - : LookupSupportedLocales(isAvailableLocale, requestedLocales); - - for (let i = 0; i < supportedLocales.length; i++) { - _.defineProperty(supportedLocales, Internal.ToString(i), { configurable: false, writable: false }); - } - - // test262 supportedLocalesOf-returned-array-elements-are-frozen.js: - // Property length of object returned by SupportedLocales should not be writable - _.defineProperty(supportedLocales, "length", { - writable: false, - configurable: false, - enumerable: false, - }); - - return supportedLocales; - }; - - // the following two functions exist solely to prevent calling new Intl.{getCanonicalLocales|*.supportedLocalesOf} - // both should be bound to `intlStaticMethodThisArg` which has a hiddenObject with isValid = "Valid" - const intlStaticMethodThisArg = _.create(); - platform.setHiddenObject(intlStaticMethodThisArg, { isValid: "Valid" }); - const supportedLocalesOf_unconstructable = function (that, functionName, isAvailableLocale, requestedLocales, options) { - if (that === null || that === undefined) { - platform.raiseNotAConstructor(functionName); - } - - const hiddenObj = platform.getHiddenObject(that); - if (!hiddenObj || hiddenObj.isValid !== "Valid") { - platform.raiseNotAConstructor(functionName); - } - - return SupportedLocales(isAvailableLocale, CanonicalizeLocaleList(requestedLocales), options); - } - - const getCanonicalLocales_unconstructable = function (that, functionName, locales) { - if (that === null || that === undefined) { - platform.raiseNotAConstructor(functionName); - } - - const hiddenObj = platform.getHiddenObject(that); - if (!hiddenObj || hiddenObj.isValid !== "Valid") { - platform.raiseNotAConstructor(functionName); - } - - return CanonicalizeLocaleList(locales); - } - - // We go through a bit of a circus here to create and bind the getCanonicalLocales function for two reasons: - // 1. We want its name to be "getCanonicalLocales" - // 2. We want to make sure it isnt callable as `new {Intl.}getCanonicalLocales()` - // To accomplish (2), since we cant check CallFlags_New in JS Builtins, the next best thing is to bind the function to a known - // `this` and ensure that that is properly `this` on call (if not, we were called with `new` and should bail). - // However, this makes (1) more difficult, since binding a function changes its name - // When https://github.com/Microsoft/ChakraCore/issues/637 is fixed and we have a way - // to make built-in functions non-constructible, we can (and should) rethink this strategy - // TODO(jahorto): explore making these arrow functions, as suggested in #637, to get non-constructable "for free" - if (InitType === "Intl") { - const getCanonicalLocales_name = "Intl.getCanonicalLocales"; - const getCanonicalLocales_func = tagPublicFunction(getCanonicalLocales_name, function (locales) { - return getCanonicalLocales_unconstructable(this, getCanonicalLocales_name, locales); - }); - const getCanonicalLocales = _.bind(getCanonicalLocales_func, intlStaticMethodThisArg); - _.defineProperty(getCanonicalLocales, 'name', { - value: 'getCanonicalLocales', - writable: false, - enumerable: false, - configurable: true, - }); - _.defineProperty(Intl, "getCanonicalLocales", { - value: getCanonicalLocales, - writable: true, - enumerable: false, - configurable: true - }); - } - - /** - * Creates an object to be returned out of resolvedOptions() methods that avoids being tainted by Object.prototype - * - * @param {String[]} props The list of properties to extract from hiddenObject and add to the final resolved options - * @param {Object} hiddenObject The hiddenObject of the calling constructor that contains values for each prop in props - * @param {Function} func An optional custom function(prop, resolved) run for each prop; it should return true when - * it handles a property itself. If it does not return true, the default logic will be used. - */ - const createResolvedOptions = function (props, hiddenObject, func = null) { - const resolved = _.create(); - _.forEach(props, function (prop) { - if (func !== null && func(prop, resolved) === true) { - // the callback returned true, which means this property was handled and we can go to the next one - return; - } - - if (typeof hiddenObject[prop] !== "undefined") { - resolved[prop] = hiddenObject[prop]; - } - }); - - return _.setPrototypeOf(resolved, platform.Object_prototype); - }; - - // Intl.Collator, String.prototype.localeCompare - const Collator = (function () { - if (InitType !== "Intl" && InitType !== "String") { - return; - } - - const InitializeCollator = function (collator, locales, options) { - const requestedLocales = CanonicalizeLocaleList(locales); - options = options === undefined ? _.create() : Internal.ToObject(options); - - collator.usage = GetOption(options, "usage", "string", ["sort", "search"], "sort"); - // TODO: determine the difference between sort and search locale data - // const collatorLocaleData = collator.usage === "sort" ? localeData : localeData; - - const opt = _.create(); - opt.matcher = GetOption(options, "localeMatcher", "string", ["lookup", "best fit"], "best fit"); - let kn = GetOption(options, "numeric", "boolean", undefined, undefined); - opt.kn = kn === undefined ? kn : Internal.ToString(kn); - opt.kf = GetOption(options, "caseFirst", "string", ["upper", "lower", "false"], undefined); - - const r = ResolveLocale(platform.isCollatorLocaleAvailable, requestedLocales, opt, ["co", "kn", "kf"]); - collator.locale = r.locale; - collator.collation = r.co === null ? "default" : r.co; - collator.numeric = r.kn === "true"; - collator.caseFirst = r.kf; - collator.caseFirstEnum = toEnum(CollatorCaseFirst, collator.caseFirst); - - collator.sensitivity = GetOption(options, "sensitivity", "string", ["base", "accent", "case", "variant"], "variant"); - collator.sensitivityEnum = toEnum(CollatorSensitivity, collator.sensitivity); - - collator.ignorePunctuation = GetOption(options, "ignorePunctuation", "boolean", undefined, false); - - collator.initializedCollator = true; - - return collator; - }; - - let localeCompareStateCache; - // Make arguments undefined to ensure that localeCompare.length === 1 - platform.registerBuiltInFunction(tagPublicFunction("String.prototype.localeCompare", function (that, locales = undefined, options = undefined) { - if (this === undefined || this === null) { - platform.raiseThis_NullOrUndefined("String.prototype.localeCompare"); - } - - const thisStr = String(this); - const thatStr = String(that); - - // Performance optimization to cache the state object and UCollator when the default arguments are provided - // TODO(jahorto): investigate caching when locales and/or options are provided - let stateObject; - if (locales === undefined && options === undefined) { - if (localeCompareStateCache === undefined) { - localeCompareStateCache = _.create(); - InitializeCollator(localeCompareStateCache, undefined, undefined); - } - - stateObject = localeCompareStateCache; - } else { - stateObject = _.create(); - InitializeCollator(stateObject, locales, options); - } - - return platform.localeCompare(thisStr, thatStr, stateObject, /* forStringPrototypeLocaleCompare */ true); - }), IntlBuiltInFunctionID.StringLocaleCompare); - - // If we were only initializing Intl for String.prototype, don't initialize Intl.Collator - if (InitType === "String") { - return; - } - - // using const f = function ... to remain consistent with the rest of the file, - // but the following function expressions get a name themselves to satisfy Intl.Collator.name - // and Intl.Collator.prototype.compare.name - const Collator = tagPublicFunction("Intl.Collator", function Collator(locales = undefined, options = undefined) { - if (this === Intl || this === undefined) { - return new Collator(locales, options); - } - - let obj = Internal.ToObject(this); - if (!_.isExtensible(obj)) { - platform.raiseObjectIsNonExtensible("Collator"); - } - - // Use the hidden object to store data - let hiddenObject = platform.getHiddenObject(obj); - - if (hiddenObject === undefined) { - hiddenObject = _.create(); - platform.setHiddenObject(obj, hiddenObject); - } - - InitializeCollator(hiddenObject, locales, options); - - // Add the bound compare - hiddenObject.boundCompare = _.bind(compare, obj); - delete hiddenObject.boundCompare.name; - return obj; - }); - - const compare = tagPublicFunction("Intl.Collator.prototype.compare", function compare(x, y) { - if (typeof this !== "object") { - platform.raiseNeedObjectOfType("Collator.prototype.compare", "Collator"); - } - - const hiddenObject = platform.getHiddenObject(this); - if (hiddenObject === undefined || !hiddenObject.initializedCollator) { - platform.raiseNeedObjectOfType("Collator.prototype.compare", "Collator"); - } - - return platform.localeCompare(String(x), String(y), hiddenObject, /* forStringPrototypeLocaleCompare */ false); - }); - - // See explanation of `getCanonicalLocales` - const collator_supportedLocalesOf_name = "Intl.Collator.supportedLocalesOf"; - const collator_supportedLocalesOf_func = tagPublicFunction(collator_supportedLocalesOf_name, function (locales, options = undefined) { - return supportedLocalesOf_unconstructable(this, collator_supportedLocalesOf_name, platform.isCollatorLocaleAvailable, locales, options); - }); - const collator_supportedLocalesOf = _.bind(collator_supportedLocalesOf_func, intlStaticMethodThisArg); - _.defineProperty(collator_supportedLocalesOf, "name", { - value: "supportedLocalesOf", - writable: false, - enumerable: false, - configurable: true, - }); - _.defineProperty(Collator, "supportedLocalesOf", { - value: collator_supportedLocalesOf, - writable: true, - enumerable: false, - configurable: true, - }); - - _.defineProperty(Collator, "prototype", { - value: new Collator(), - writable: false, - enumerable: false, - configurable: false - }); - setPrototype(Collator.prototype, Object.prototype); - - _.defineProperty(Collator.prototype, "constructor", { - value: Collator, - writable: true, - enumerable: false, - configurable: true - }); - _.defineProperty(Collator.prototype, "resolvedOptions", { - value: function resolvedOptions() { - if (typeof this !== "object") { - platform.raiseNeedObjectOfType("Collator.prototype.resolvedOptions", "Collator"); - } - const hiddenObject = platform.getHiddenObject(this); - if (hiddenObject === undefined || !hiddenObject.initializedCollator) { - platform.raiseNeedObjectOfType("Collator.prototype.resolvedOptions", "Collator"); - } - - const options = [ - "locale", - "usage", - "sensitivity", - "ignorePunctuation", - "collation", - "numeric", - "caseFirst", - ]; - - return createResolvedOptions(options, hiddenObject); - }, - writable: true, - enumerable: false, - configurable: true - }); - - // test262's test\intl402\Collator\prototype\compare\name.js checks the name of the descriptor's getter function - const getCompare = function () { - if (typeof this !== "object") { - platform.raiseNeedObjectOfType("Collator.prototype.compare", "Collator"); - } - - const hiddenObject = platform.getHiddenObject(this); - if (hiddenObject === undefined || !hiddenObject.initializedCollator) { - platform.raiseNeedObjectOfType("Collator.prototype.compare", "Collator"); - } - - return hiddenObject.boundCompare; - }; - _.defineProperty(getCompare, "name", { - value: "get compare", - writable: false, - enumerable: false, - configurable: true, - }); - _.defineProperty(Collator.prototype, "compare", { - get: tagPublicFunction("get compare", getCompare), - enumerable: false, - configurable: true - }); - - return Collator; - })(); - - // Intl.NumberFormat, Number.prototype.toLocaleString - var NumberFormat = (function () { - if (InitType !== "Intl" && InitType !== "Number") { - return; - } - - const InitializeNumberFormat = function (nf, locales, options) { - const requestedLocales = CanonicalizeLocaleList(locales); - options = options === undefined ? _.create() : Internal.ToObject(options); - - const opt = _.create(); - opt.localeMatcher = GetOption(options, "localeMatcher", "string", ["best fit", "lookup"], "best fit"); - - const r = ResolveLocale(platform.isNFLocaleAvailable, requestedLocales, opt, ["nu"]); - nf.locale = r.locale; - nf.numberingSystem = r.nu; - - const style = GetOption(options, "style", "string", ["decimal", "percent", "currency"], "decimal"); - nf.style = style; - nf.formatterToUse = toEnum(NumberFormatStyle, _.toUpperCase(style)); - const useCurrency = style === "currency"; - - let currency = GetOption(options, "currency", "string", undefined, undefined); - if (currency !== undefined && !IsWellFormedCurrencyCode(currency)) { - platform.raiseInvalidCurrencyCode(currency); - } else if (currency === undefined && useCurrency) { - platform.raiseMissingCurrencyCode(); - } - - let cDigits = 0; - if (useCurrency) { - currency = _.toUpperCase(currency); - nf.currency = currency; - cDigits = platform.currencyDigits(currency); - } - - let currencyDisplay = GetOption(options, "currencyDisplay", "string", ["code", "symbol", "name"], "symbol"); - if (useCurrency) { - nf.currencyDisplay = currencyDisplay - nf.currencyDisplayToUse = toEnum(NumberFormatCurrencyDisplay, _.toUpperCase(currencyDisplay)); - } - - let mnfdDefault, mxfdDefault; - if (useCurrency) { - mnfdDefault = cDigits; - mxfdDefault = cDigits; - } else { - mnfdDefault = 0; - if (style === "percent") { - mxfdDefault = 0; - } else { - mxfdDefault = 3; - } - } - - SetNumberFormatDigitOptions(nf, options, mnfdDefault, mxfdDefault); - - nf.useGrouping = GetOption(options, "useGrouping", "boolean", undefined, true); - - nf.initializedNumberFormat = true; - - // Cache api instance and update numbering system on the object - platform.cacheNumberFormat(nf); - - return nf; - }; - - platform.registerBuiltInFunction(tagPublicFunction("Number.prototype.toLocaleString", function () { - if (typeof this !== "number" && !(this instanceof Number)) { - platform.raiseNeedObjectOfType("Number.prototype.toLocaleString", "Number"); - } - - const stateObject = _.create(); - InitializeNumberFormat(stateObject, arguments[0], arguments[1]); - - const n = Internal.ToNumber(this); - return platform.formatNumber(n, stateObject, /* toParts */ false, /* forNumberPrototypeToLocaleString */ true); - }), IntlBuiltInFunctionID.NumberToLocaleString); - - if (InitType === "Number") { - return; - } - - const NumberFormat = tagPublicFunction("Intl.NumberFormat", function NumberFormat(locales = undefined, options = undefined) { - if (this === Intl || this === undefined) { - return new NumberFormat(locales, options); - } - - const obj = Internal.ToObject(this); - - if (!_.isExtensible(obj)) { - platform.raiseObjectIsNonExtensible("NumberFormat"); - } - - // Use the hidden object to store data - let hiddenObject = platform.getHiddenObject(obj); - if (hiddenObject === undefined) { - hiddenObject = _.create(); - platform.setHiddenObject(obj, hiddenObject); - } - - InitializeNumberFormat(hiddenObject, locales, options); - - hiddenObject.boundFormat = _.bind(format, obj) - delete hiddenObject.boundFormat.name; - - return obj; - }); - - const format = tagPublicFunction("Intl.NumberFormat.prototype.format", function format(n) { - n = Internal.ToNumber(n); - - if (typeof this !== "object") { - platform.raiseNeedObjectOfType("NumberFormat.prototype.format", "NumberFormat"); - } - - const hiddenObject = platform.getHiddenObject(this); - if (hiddenObject === undefined || !hiddenObject.initializedNumberFormat) { - platform.raiseNeedObjectOfType("NumberFormat.prototype.format", "NumberFormat"); - } - - return platform.formatNumber(n, hiddenObject, /* toParts */ false, /* forNumberPrototypeToLocaleString */ false); - }); - - const formatToParts = tagPublicFunction("Intl.NumberFormat.prototype.formatToParts", function formatToParts(n) { - n = Internal.ToNumber(n); - - if (typeof this !== "object") { - platform.raiseNeedObjectOfType("NumberFormat.prototype.formatToParts", "NumberFormat"); - } - - const hiddenObject = platform.getHiddenObject(this); - if (hiddenObject === undefined || !hiddenObject.initializedNumberFormat) { - platform.raiseNeedObjectOfType("NumberFormat.prototype.formatToParts", "NumberFormat"); - } - - return platform.formatNumber(n, hiddenObject, /* toParts */ true, /* forNumberPrototypeToLocaleString */ false); - }); - - // See explanation of `getCanonicalLocales` - const numberFormat_supportedLocalesOf_name = "Intl.NumberFormat.supportedLocalesOf"; - const numberFormat_supportedLocalesOf_func = tagPublicFunction(numberFormat_supportedLocalesOf_name, function (locales, options = undefined) { - return supportedLocalesOf_unconstructable(this, numberFormat_supportedLocalesOf_name, platform.isNFLocaleAvailable, locales, options); - }); - const numberFormat_supportedLocalesOf = _.bind(numberFormat_supportedLocalesOf_func, intlStaticMethodThisArg); - _.defineProperty(numberFormat_supportedLocalesOf, "name", { - value: "supportedLocalesOf", - writable: false, - enumerable: false, - configurable: true, - }); - _.defineProperty(NumberFormat, "supportedLocalesOf", { - value: numberFormat_supportedLocalesOf, - writable: true, - enumerable: false, - configurable: true, - }); - - _.defineProperty(NumberFormat, "prototype", { - value: new NumberFormat(), - writable: false, - enumerable: false, - configurable: false, - }); - setPrototype(NumberFormat.prototype, Object.prototype); - _.defineProperty(NumberFormat.prototype, "constructor", { - value: NumberFormat, - writable: true, - enumerable: false, - configurable: true, - }); - - _.defineProperty(NumberFormat.prototype, "resolvedOptions", { - value: function resolvedOptions() { - if (typeof this !== "object") { - platform.raiseNeedObjectOfType("NumberFormat.prototype.resolvedOptions", "NumberFormat"); - } - const hiddenObject = platform.getHiddenObject(this); - if (hiddenObject === undefined || !hiddenObject.initializedNumberFormat) { - platform.raiseNeedObjectOfType("NumberFormat.prototype.resolvedOptions", "NumberFormat"); - } - - const options = ["locale", "numberingSystem", "style", "currency", "currencyDisplay", "minimumIntegerDigits", - "minimumFractionDigits", "maximumFractionDigits", "minimumSignificantDigits", "maximumSignificantDigits", - "useGrouping"]; - - return createResolvedOptions(options, hiddenObject); - }, - writable: true, - enumerable: false, - configurable: true, - }); - - // test262's test\intl402\NumberFormat\prototype\format\name.js checks the name of the descriptor's getter function - const getFormat = function () { - if (typeof this !== "object") { - platform.raiseNeedObjectOfType("NumberFormat.prototype.format", "NumberFormat"); - } - - const hiddenObject = platform.getHiddenObject(this); - if (hiddenObject === undefined || !hiddenObject.initializedNumberFormat) { - platform.raiseNeedObjectOfType("NumberFormat.prototype.format", "NumberFormat"); - } - - return hiddenObject.boundFormat; - }; - _.defineProperty(getFormat, "name", { - value: "get format", - writable: false, - enumerable: false, - configurable: true, - }); - _.defineProperty(NumberFormat.prototype, "format", { - get: tagPublicFunction("get format", getFormat), - enumerable: false, - configurable: true, - }); - - _.defineProperty(NumberFormat.prototype, "formatToParts", { - value: formatToParts, - enumerable: false, - configurable: true, - writable: true, - }); - - return NumberFormat; - })(); - - // Intl.DateTimeFormat, Date.prototype.toLocaleString, Date.prototype.toLocaleDateString, Date.prototype.toLocaleTimeString - var DateTimeFormat = (function () { - if (InitType !== "Intl" && InitType !== "Date") { - return; - } - - const narrowShortLong = ["narrow", "short", "long"]; - const twoDigitNumeric = ["2-digit", "numeric"]; - const allOptionValues = _.concat(twoDigitNumeric, narrowShortLong); - const dateTimeComponents = [ - ["weekday", narrowShortLong], - ["era", narrowShortLong], - ["year", twoDigitNumeric], - ["month", allOptionValues], // month has every option available to it - ["day", twoDigitNumeric], - ["hour", twoDigitNumeric], - ["minute", twoDigitNumeric], - ["second", twoDigitNumeric], - ["timeZoneName", _.slice(narrowShortLong, 1)] // timeZoneName only allows "short" and "long" - ]; - - /** - * Given a user-provided options object, getPatternForOptions generates a LDML/ICU pattern and then - * sets the pattern and all of the relevant options implemented by the pattern on the provided dtf before returning. - * - * @param {Object} dtf the DateTimeFormat internal object - * @param {Object} options the options object originally given by the user - */ - const getPatternForOptions = (function () { - // symbols come from the Unicode LDML: http://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table - const symbolForOption = { - weekday: "E", - era: "G", - year: "y", - month: "M", - day: "d", - // for hour, we have some special handling - hour: "j", hour12: "h", hour24: "H", - minute: "m", - second: "s", - timeZoneName: "z", - }; - // NOTE - keep this up to date with the map in PlatformAgnostic::Intl::GetDateTimePartKind and the UDateFormatField enum - const optionForSymbol = { - E: "weekday", c: "weekday", e: "weekday", - G: "era", - y: "year", u: "year", U: "year", - M: "month", L: "month", - d: "day", - h: "hour", H: "hour", K: "hour", k: "hour", - m: "minute", - s: "second", - z: "timeZoneName", Z: "timeZoneName", v: "timeZoneName", V: "timeZoneName", O: "timeZoneName", X: "timeZoneName", x: "timeZoneName", - }; - - // lengths here are how many times a symbol is repeated in a skeleton for a given option - // the Intl spec recommends that Intl "short" -> CLDR "abbreviated" and Intl "long" -> CLDR "wide" - const symbolLengthForOption = { - numeric: 1, - "2-digit": 2, - short: 3, - long: 4, - narrow: 5, - }; - const optionForSymbolLength = { - 1: "numeric", - 2: "2-digit", - 3: "short", - 4: "long", - 5: "narrow", - }; - - // for fixing up the hour pattern later - const patternForHourCycle = { - h12: "h", - h23: "H", - h11: "K", - h24: "k", - }; - const hourCycleForPattern = { - h: "h12", - H: "h23", - K: "h11", - k: "h24", - }; - - return function (dtf, options) { - const resolvedOptions = _.reduce(dateTimeComponents, function (resolved, component) { - const prop = component[0]; - const value = GetOption(options, prop, "string", component[1], undefined); - if (value !== undefined) { - resolved[prop] = value; - } - - return resolved; - }, _.create()); - - // Providing undefined for the `values` argument allows { hour12: "asd" } to become hour12 = true, - // which is apparently a feature of the spec, rather than a bug. - const hour12 = GetOption(options, "hour12", "boolean", undefined, undefined); - const hc = dtf.hourCycle; - - // Build up a skeleton by repeating skeleton keys (like "G", "y", etc) for a count corresponding to the intl option value. - const skeleton = _.reduce(_.keys(resolvedOptions), function (skeleton, optionKey) { - let optionValue = resolvedOptions[optionKey]; - if (optionKey === "hour") { - // hour12/hourCycle resolution in the spec has multiple issues: - // hourCycle and -hc can be out of sync: https://github.com/tc39/ecma402/issues/195 - // hour12 has precedence over a more specific option in hourCycle/hc - // hour12 can force a locale that prefers h23 and h12 to use h11 or h24, according to the spec - // We temporarily work around these similarly to firefox and implement custom hourCycle/hour12 resolution. - // TODO(jahorto): follow up with Intl spec about these issues - if (hour12 === true || (hour12 === undefined && (hc === "h11" || hc === "h12"))) { - optionKey = "hour12"; - } else if (hour12 === false || (hour12 === undefined && (hc === "h23" || hc === "h24"))) { - optionKey = "hour24"; - } - } - - return skeleton + _.repeat(symbolForOption[optionKey], symbolLengthForOption[optionValue]); - }, ""); - - let pattern = platform.getPatternForSkeleton(dtf.locale, skeleton); - - // getPatternForSkeleton (udatpg_getBestPattern) can ignore, add, and modify fields compared to the markers we gave in the skeleton. - // Most importantly, udatpg_getBestPattern will determine the most-preferred hour field for a locale and time type (12 or 24). - // Scan the generated pattern to extract the resolved fields, and fix up the hour field if the user requested an explicit hour cycle - let inLiteral = false; - let i = 0; - while (i < pattern.length) { - let cur = pattern[i]; - const isQuote = cur === "'"; - if (inLiteral) { - if (isQuote) { - inLiteral = false; - } - ++i; - continue; - } else if (isQuote) { - inLiteral = true; - ++i; - continue; - } else if (cur === " ") { - ++i; - continue; - } - - // we are not in a format literal, so we are in a symbolic section of the pattern - // now, we can force the correct hour pattern and set the internal slots correctly - if (cur === "h" || cur === "H" || cur === "K" || cur === "k") { - if (hc && hour12 === undefined) { - // if we have found an hour-like symbol and the user wanted a specific hour cycle, - // replace it and all such proceding contiguous symbols with the symbol corresponding - // to the user-requested hour cycle, if they are different - const replacement = patternForHourCycle[hc]; - if (replacement !== cur) { - if (pattern[i + 1] === cur) { - // 2-digit hour - pattern = _.substring(pattern, 0, i) + replacement + replacement + _.substring(pattern, i + 2); - } else { - // numeric hour - pattern = _.substring(pattern, 0, i) + replacement + _.substring(pattern, i + 1); - } - - // we have modified pattern[i] so we need to update cur - cur = pattern[i]; - } - } else { - // if we have found an hour-like symbol and the user didnt request an hour cycle, - // set the internal hourCycle property from the resolved pattern - dtf.hourCycle = hourCycleForPattern[cur]; - } - } - - let k = i + 1; - while (k < pattern.length && pattern[k] === cur) { - ++k; - } - - const resolvedKey = optionForSymbol[cur]; - const resolvedValue = optionForSymbolLength[k - i]; - dtf[resolvedKey] = resolvedValue; - i = k; - } - - dtf.pattern = pattern; - }; - })(); - - /** - * Initializes the dateTimeFormat argument with the given locales and options. - * - * ECMA-402: #sec-initializedatetimeformat - * - * @param {Object} dateTimeFormat the state object representing a DateTimeFormat instance or toLocale*String call - * @param {String|String[]} locales a user-provided list of locales - * @param {Object} options a user-provided options object - */ - const InitializeDateTimeFormat = function (dateTimeFormat, locales, options) { - const requestedLocales = CanonicalizeLocaleList(locales); - options = ToDateTimeOptions(options, "any", "date"); - - const opt = _.create(); - opt.localeMatcher = GetOption(options, "localeMatcher", "string", ["lookup", "best fit"], "best fit"); - // hc is the only option that can be set by -u extension or by options object key - opt.hc = GetOption(options, "hourCycle", "string", ["h11", "h12", "h23", "h24"], undefined); - - const r = ResolveLocale(platform.isDTFLocaleAvailable, requestedLocales, opt, ["nu", "ca", "hc"]); - dateTimeFormat.locale = r.locale; - dateTimeFormat.calendar = r.ca; - dateTimeFormat.hourCycle = r.hc; - dateTimeFormat.numberingSystem = r.nu; - - const localeWithoutSubtags = r.dataLocale; - let tz = options.timeZone; - if (tz === undefined) { - tz = platform.getDefaultTimeZone(); - } else { - tz = Internal.ToString(tz); - } - - // make tz uppercase here, as its easier to do now than in platform (even though the uppercase operation - // is supposed to be done in #sec-isvalidtimezonename) - const canonicalTZ = platform.validateAndCanonicalizeTimeZone(tz); - if (canonicalTZ === undefined || canonicalTZ === "Etc/Unknown") { - raise.rangeError(tz, "timeZone", "IANA Zone or Link name (Area/Location)"); - } else if (canonicalTZ === "Etc/UTC" || canonicalTZ === "Etc/GMT") { - tz = "UTC"; - } else { - tz = canonicalTZ; - } - - dateTimeFormat.timeZone = tz; - - // get the formatMatcher for validation only - GetOption(options, "formatMatcher", "string", ["basic", "best fit"], "best fit"); - - // this call replaces most of the spec code related to hour12/hourCycle and format negotiation/handling - getPatternForOptions(dateTimeFormat, options); - dateTimeFormat.initializedDateTimeFormat = true; - - return dateTimeFormat; - }; - - /** - * Modifies the options argument to have correct default values - * - * ECMA-402: #sec-todatetimeoptions - * - * @param {Object} options user-provided options object passed as second argument to Intl.DateTimeFormat/toLocale*String - * @param {String} required which kind of options must be provided for the call (one of "date", "time", or "any") - * @param {String} defaults which kind of options will be set to a default value (one of "date", "time", or "all") - * @returns {Object} modified options object - */ - const ToDateTimeOptions = function (options, required, defaults) { - options = options === undefined ? null : Internal.ToObject(options); - options = _.create(options); - let needDefaults = true; - if (required === "date" || required === "any") { - _.forEach(["weekday", "year", "month", "day"], function (prop) { - const value = options[prop]; - if (value !== undefined) { - needDefaults = false; - } - }); - } - - if (required === "time" || required === "any") { - _.forEach(["hour", "minute", "second"], function (prop) { - const value = options[prop]; - if (value !== undefined) { - needDefaults = false; - } - }); - } - - if (needDefaults === true && (defaults === "date" || defaults === "all")) { - _.forEach(["year", "month", "day"], function (prop) { - _.defineProperty(options, prop, { - value: "numeric", - writable: true, - enumerable: true, - configurable: true, - }); - }) - } - - if (needDefaults === true && (defaults === "time" || defaults === "all")) { - _.forEach(["hour", "minute", "second"], function (prop) { - _.defineProperty(options, prop, { - value: "numeric", - writable: true, - enumerable: true, - configurable: true, - }); - }) - } - - return options; - }; - - const FormatDateTime = function (dtf, x) { - if (_.isNaN(x) || !_.isFinite(x)) { - platform.raiseInvalidDate(); - } - - return platform.formatDateTime(dtf, x, /* toParts */ false, /* forDatePrototypeToLocaleString */ false); - }; - - const FormatDateTimeToParts = function (dtf, x) { - if (_.isNaN(x) || !_.isFinite(x)) { - platform.raiseInvalidDate(); - } - - return platform.formatDateTime(dtf, x, /* toParts */ true, /* forDatePrototypeToLocaleString */ false); - }; - - // caches for objects constructed with default parameters for each method - const __DateInstanceToLocaleStringDefaultCache = [undefined, undefined, undefined]; - const __DateInstanceToLocaleStringDefaultCacheSlot = bare({ - toLocaleString: 0, - toLocaleDateString: 1, - toLocaleTimeString: 2 - }); - - function DateInstanceToLocaleStringImplementation(name, option1, option2, cacheSlot, locales, options) { - if (typeof this !== 'object' || !(this instanceof Date)) { - platform.raiseNeedObjectOfType(name, "Date"); - } - const value = _.getDate(new Date(this)); - if (_.isNaN(value) || !_.isFinite(value)) { - return "Invalid Date"; - } - - let stateObject = undefined; - if (platform.useCaches && locales === undefined && options === undefined) { - // All default parameters (locales and options): this is the most valuable case to cache. - if (__DateInstanceToLocaleStringDefaultCache[cacheSlot]) { - // retrieve cached value - stateObject = __DateInstanceToLocaleStringDefaultCache[cacheSlot]; - } else { - // populate cache - stateObject = _.create(); - InitializeDateTimeFormat(stateObject, undefined, ToDateTimeOptions(undefined, option1, option2)); - __DateInstanceToLocaleStringDefaultCache[cacheSlot] = stateObject; - } - } - - if (!stateObject) { - stateObject = _.create(); - InitializeDateTimeFormat(stateObject, locales, ToDateTimeOptions(options, option1, option2)); - } - - return platform.formatDateTime(stateObject, Internal.ToNumber(this), /* toParts */ false, /* forDatePrototypeToLocaleString */ true); - } - - // Note: tagPublicFunction (platform.tagPublicLibraryCode) messes with declared name of the FunctionBody so that - // the functions called appear correctly in the debugger and stack traces. Thus, we we cannot call tagPublicFunction in a loop. - // Each entry point needs to have its own unique FunctionBody (which is a function as defined in the source code); - // this is why we have seemingly repeated ourselves below, instead of having one function and calling it multiple times with - // different parameters. - // - // The following invocations of `platform.registerBuiltInFunction(tagPublicFunction(name, entryPoint))` are enclosed in IIFEs. - // The IIFEs are used to group all of the meaningful differences between each entry point into the arguments to the IIFE. - // The exception to this are the different entryPoint names which are only significant for debugging (and cannot be passed in - // as arguments, as the name is intrinsic to the function declaration). - // - // The `date_toLocale*String_entryPoint` function names are placeholder names that will never be seen from user code. - // The function name property and FunctionBody declared name are overwritten by `tagPublicFunction`. - // The fact that they are declared with unique names is helpful for debugging. - // The functions *must not* be declared as anonymous functions (must be declared with a name); - // converting from an unnnamed function to a named function is not readily supported by the platform code and - // this has caused us to hit assertions in debug builds in the past. - // - // See invocations of `tagPublicFunction` on the `supportedLocalesOf` entry points for a similar pattern. - // - // The entryPoint functions will be called as `Date.prototype.toLocale*String` and thus their `this` parameters will be a Date. - // `DateInstanceToLocaleStringImplementation` is not on `Date.prototype`, so we must propagate `this` into the call by using - // `DateInstanceToLocaleStringImplementation.call(this, ...)`. - - (function (name, option1, option2, cacheSlot, platformFunctionID) { - platform.registerBuiltInFunction(tagPublicFunction(name, function date_toLocaleString_entryPoint(locales = undefined, options = undefined) { - return DateInstanceToLocaleStringImplementation.call(this, name, option1, option2, cacheSlot, locales, options); - }), platformFunctionID); - })("Date.prototype.toLocaleString", "any", "all", __DateInstanceToLocaleStringDefaultCacheSlot.toLocaleString, IntlBuiltInFunctionID.DateToLocaleString); - - (function (name, option1, option2, cacheSlot, platformFunctionID) { - platform.registerBuiltInFunction(tagPublicFunction(name, function date_toLocaleDateString_entryPoint(locales = undefined, options = undefined) { - return DateInstanceToLocaleStringImplementation.call(this, name, option1, option2, cacheSlot, locales, options); - }), platformFunctionID); - })("Date.prototype.toLocaleDateString", "date", "date", __DateInstanceToLocaleStringDefaultCacheSlot.toLocaleDateString, IntlBuiltInFunctionID.DateToLocaleDateString); - - (function (name, option1, option2, cacheSlot, platformFunctionID) { - platform.registerBuiltInFunction(tagPublicFunction(name, function date_toLocaleTimeString_entryPoint(locales = undefined, options = undefined) { - return DateInstanceToLocaleStringImplementation.call(this, name, option1, option2, cacheSlot, locales, options); - }), platformFunctionID); - })("Date.prototype.toLocaleTimeString", "time", "time", __DateInstanceToLocaleStringDefaultCacheSlot.toLocaleTimeString, IntlBuiltInFunctionID.DateToLocaleTimeString); - - // if we were only initializing Date, dont bother initializing Intl.DateTimeFormat - if (InitType !== "Intl") { - return; - } - - /** - * The Intl.DateTimeFormat constructor - * - * ECMA-402: #sec-intl.datetimeformat - * - * @param {String|String[]} locales - * @param {Object} options - */ - function DateTimeFormat(locales = undefined, options = undefined) { - if (this === Intl || this === undefined) { - return new DateTimeFormat(locales, options); - } - - const obj = Internal.ToObject(this); - if (!_.isExtensible(obj)) { - platform.raiseObjectIsNonExtensible("DateTimeFormat"); - } - - // Use the hidden object to store data - let hiddenObject = platform.getHiddenObject(obj); - - if (hiddenObject === undefined) { - hiddenObject = _.create(); - platform.setHiddenObject(obj, hiddenObject); - } - - InitializeDateTimeFormat(hiddenObject, locales, options); - - // only format has to be bound and attached to the DateTimeFormat - hiddenObject.boundFormat = _.bind(format, obj); - delete hiddenObject.boundFormat.name; - - return obj; - } - tagPublicFunction("Intl.DateTimeFormat", DateTimeFormat); - - /** - * Asserts that dtf is a valid DateTimeFormat object, or throws a TypeError otherwise. - * - * Returns the hiddenObject for the given dtf. - * - * @param {Object} dtf `this` of a given call to a DateTimeFormat member function - * @param {String} name the name of the function requiring dtf to be a valid DateTimeFormat - * @returns {Object} the hiddenObject for the given dtf - */ - const ensureMember = function (dtf, name) { - if (typeof dtf !== 'object') { - platform.raiseNeedObjectOfType(`Intl.DateTimeFormat.prototype.${name}`, "DateTimeFormat"); - } - let hiddenObject = platform.getHiddenObject(dtf); - if (hiddenObject === undefined || !hiddenObject.initializedDateTimeFormat) { - platform.raiseNeedObjectOfType(`Intl.DateTimeFormat.prototype.${name}`, "DateTimeFormat"); - } - - return hiddenObject; - }; - - /** - * Calls ensureMember on dtf, and then converts the given date to a number. - * - * Returns the hiddenObject for the given dtf and the resolved date. - * - * @param {Object} dtf `this` of a given call to a DateTimeFormat member function - * @param {Object} date the date to be formatted - * @param {String} name the name of the function requiring dtf to be a valid DateTimeFormat - */ - const ensureFormat = function (dtf, date, name) { - const hiddenObject = ensureMember(dtf, name); - - let x; - if (date === undefined) { - x = platform.builtInJavascriptDateEntryNow(); - } else { - x = Internal.ToNumber(date); - } - - // list of arguments for FormatDateTime{ToParts} - return [hiddenObject, x]; - }; - - const format = function (date) { - return _.apply(FormatDateTime, undefined, ensureFormat(this, date, "format")); - }; - tagPublicFunction("Intl.DateTimeFormat.prototype.format", format); - - const formatToParts = function (date) { - return _.apply(FormatDateTimeToParts, undefined, ensureFormat(this, date, "formatToParts")); - }; - tagPublicFunction("Intl.DateTimeFormat.prototype.formatToParts", formatToParts); - - _.defineProperty(DateTimeFormat, "prototype", { - value: new DateTimeFormat(), - writable: false, - enumerable: false, - configurable: false - }); - setPrototype(DateTimeFormat.prototype, Object.prototype); - - _.defineProperty(DateTimeFormat.prototype, "constructor", { - value: DateTimeFormat, - writable: true, - enumerable: false, - configurable: true - }); - - // test262's test\intl402\DateTimeFormat\prototype\format\name.js checks the name of the descriptor's getter function - const getFormat = function () { - const hiddenObject = ensureMember(this, format); - - return hiddenObject.boundFormat; - }; - _.defineProperty(getFormat, "name", { - value: "get format", - writable: false, - enumerable: false, - configurable: true, - }); - _.defineProperty(DateTimeFormat.prototype, "format", { - get: tagPublicFunction("get format", getFormat), - enumerable: false, - configurable: true, - }); - _.defineProperty(DateTimeFormat.prototype, "formatToParts", { - value: formatToParts, - enumerable: false, - configurable: true, - writable: true, - }); - _.defineProperty(DateTimeFormat.prototype, "resolvedOptions", { - value: function resolvedOptions() { - const hiddenObject = ensureMember(this, "resolvedOptions"); - const options = [ - "locale", - "calendar", - "numberingSystem", - "timeZone", - "hourCycle", - "weekday", - "era", - "year", - "month", - "day", - "hour", - "minute", - "second", - "timeZoneName", - ]; - - return createResolvedOptions(options, hiddenObject, function (prop, resolved) { - if (prop === "hourCycle") { - const hc = hiddenObject.hourCycle; - if (hiddenObject.hour !== undefined && hc !== null) { - resolved.hourCycle = hc; - resolved.hour12 = hc === "h11" || hc === "h12"; - } - - return true; - } - }); - }, - writable: true, - enumerable: false, - configurable: true, - }); - - // See explanation of `getCanonicalLocales` - const dateTimeFormat_supportedLocalesOf_name = "Intl.DateTimeFormat.supportedLocalesOf"; - const dateTimeFormat_supportedLocalesOf_func = tagPublicFunction(dateTimeFormat_supportedLocalesOf_name, function (locales, options = undefined) { - return supportedLocalesOf_unconstructable(this, dateTimeFormat_supportedLocalesOf_name, platform.isDTFLocaleAvailable, locales, options); - }); - const dateTimeFormat_supportedLocalesOf = _.bind(dateTimeFormat_supportedLocalesOf_func, intlStaticMethodThisArg); - _.defineProperty(dateTimeFormat_supportedLocalesOf, "name", { - value: "supportedLocalesOf", - writable: false, - enumerable: false, - configurable: true, - }); - _.defineProperty(DateTimeFormat, "supportedLocalesOf", { - value: dateTimeFormat_supportedLocalesOf, - writable: true, - enumerable: false, - configurable: true, - }); - - return DateTimeFormat; - })(); - - const PluralRules = (function() { - if (InitType !== "Intl") { - return; - } - - /** - * Initializes the given pluralRules object - * - * ECMA 402: #sec-initializepluralrules - * - * @param {Object} pluralRules - * @param {String|String[]} locales - * @param {Object} options - */ - const InitializePluralRules = function (pluralRules, locales, options) { - const requestedLocales = CanonicalizeLocaleList(locales); - options = options === undefined ? _.create() : Internal.ToObject(options); - const opt = _.create(); - opt.matcher = GetOption(options, "localeMatcher", "string", ["lookup", "best fit"], "best fit"); - pluralRules.type = GetOption(options, "type", "string", ["cardinal", "ordinal"], "cardinal"); - - SetNumberFormatDigitOptions(pluralRules, options, 0, 3); - - // %PluralRules%.[[RelevantExtensionKeys]] = [] (#sec-intl.pluralrules-internal-slots) - const r = ResolveLocale(platform.isPRLocaleAvailable, requestedLocales, opt, []); - - pluralRules.locale = r.locale; - pluralRules.pluralCategories = platform.pluralRulesKeywords(pluralRules); - - pluralRules.initializedPluralRules = true; - - return pluralRules; - }; - - /** - * Returns a String value representing the plural form of n according to - * the effective locale and the options of pluralRules - * - * ECMA 402: #sec-resolveplural - * - * @param {Object} pluralRules - * @param {Number} n - */ - const ResolvePlural = function (pluralRules, n) { - if (!_.isFinite(n)) { - return "other"; - } - - return platform.pluralRulesSelect(pluralRules, n); - }; - - // params are explicitly `= undefined` to make PluralRules.length === 0 - const PluralRules = function PluralRules(locales = undefined, options = undefined) { - if (new.target === undefined) { - platform.raiseNeedObjectOfType("Intl.PluralRules", "PluralRules"); - } - - const stateObject = _.create(); - platform.setHiddenObject(this, stateObject); - - InitializePluralRules(stateObject, locales, options); - - return this; - }; - tagPublicFunction("Intl.PluralRules", PluralRules); - - // ECMA 402: #sec-intl.pluralrules.prototype - _.defineProperty(PluralRules, "prototype", { - value: {}, - writable: false, - enumerable: false, - configurable: false, - }); - - // See explanation of `getCanonicalLocales` - // ECMA 402: #sec-intl.pluralrules.supportedlocalesof - const pluralRules_supportedLocalesOf_name = "Intl.PluralRules.supportedLocalesOf"; - const pluralRules_supportedLocalesOf_func = tagPublicFunction(pluralRules_supportedLocalesOf_name, function (locales, options = undefined) { - return supportedLocalesOf_unconstructable(this, pluralRules_supportedLocalesOf_name, platform.isPRLocaleAvailable, locales, options); - }); - const pluralRules_supportedLocalesOf = _.bind(pluralRules_supportedLocalesOf_func, intlStaticMethodThisArg); - _.defineProperty(pluralRules_supportedLocalesOf, "name", { - value: "supportedLocalesOf", - writable: false, - enumerable: false, - configurable: true, - }); - _.defineProperty(PluralRules, "supportedLocalesOf", { - value: pluralRules_supportedLocalesOf, - writable: true, - enumerable: false, - configurable: true, - }); - - // ECMA 402: #sec-intl.pluralrules.prototype.select - const select = function select(value) { - const pr = platform.getHiddenObject(this); - if (!pr || !pr.initializedPluralRules) { - platform.raiseNeedObjectOfType("Intl.PluralRules.prototype.select", "PluralRules"); - } - - const n = Internal.ToNumber(value); - return ResolvePlural(pr, n); - }; - tagPublicFunction("Intl.PluralRules.prototype.select", select); - _.defineProperty(PluralRules.prototype, "select", { - value: select, - enumerable: false, - configurable: true, - writable: true, - }); - - const resolvedOptions = function resolvedOptions() { - const pr = platform.getHiddenObject(this); - if (!pr || !pr.initializedPluralRules) { - platform.raiseNeedObjectOfType("Intl.PluralRules.prototype.select", "PluralRules"); - } - - return createResolvedOptions([ - "locale", - "type", - "minimumIntegerDigits", - "minimumFractionDigits", - "maximumFractionDigits", - "minimumSignificantDigits", - "maximumSignificantDigits", - "pluralCategories" - ], pr, (prop, resolved) => { - if (prop === "pluralCategories") { - // https://github.com/tc39/ecma402/issues/224: create a copy of the pluralCategories array - resolved.pluralCategories = _.slice(pr.pluralCategories, 0); - return true; - } - }); - }; - tagPublicFunction("Intl.PluralRules.prototype.resolvedOptions", resolvedOptions); - _.defineProperty(PluralRules.prototype, "resolvedOptions", { - value: resolvedOptions, - enumerable: false, - configurable: true, - writable: true, - }); - - return PluralRules; - })(); - - // Initialize Intl properties only if needed - if (InitType === "Intl") { - _.defineProperty(Intl, "Collator", { value: Collator, writable: true, enumerable: false, configurable: true }); - _.defineProperty(Intl, "NumberFormat", { value: NumberFormat, writable: true, enumerable: false, configurable: true }); - _.defineProperty(Intl, "DateTimeFormat", { value: DateTimeFormat, writable: true, enumerable: false, configurable: true }); - _.defineProperty(Intl, "PluralRules", { value: PluralRules, writable: true, enumerable: false, configurable: true }); - } - - } - /** - * - * - * - * - * - * - * END ICU, BEGIN WINGLOB - * - * - * - * - * - * - */ - else { - - if (platform.localeLookupCache === undefined) { - platform.localeLookupCache = new IntlCache(); - } - if (platform.localeBestFitCache === undefined) { - platform.localeBestFitCache = new IntlCache(); - } - - let __defaultLocale = undefined; - const GetDefaultLocale = function () { - if (__defaultLocale && platform.useCaches) { - return __defaultLocale; - } - - const locale = platform.getDefaultLocale(); - if (!locale) { - // if the system locale is undefined/null/empty string, we have to - // do something or else we will crash - __defaultLocale = "en"; - } else { - __defaultLocale = locale; - } - - return __defaultLocale; - }; - - let CreateDateTimeFormat = function (dateTimeFormat, condition) { - let retVal = platform.createDateTimeFormat(dateTimeFormat, condition); - if (retVal === null) { - // TODO (doilij): remove this fallback when implemented under ICU - dateTimeFormat.__numberingSystem = ""; - dateTimeFormat.__patternStrings = [ - "{month.a}{day.b}{hour.c}{minute.d}{second.e}", - "" // another entry for fun - ] - } - // no return value - }; - - let IsWellFormedLanguageTag = function (langTag) { - let retVal = platform.isWellFormedLanguageTag(langTag); - if (retVal === null) { - if (!LANG_TAG_RE) { - InitializeLangTagREs(); - } - let match = platform.builtInRegexMatch(langTag, LANG_TAG_RE); - return !!match; - } else { - return retVal; - } - }; - - var forEachIfPresent = function (obj, length, func) { - let current = 0; - while (current < length) { - if (current in obj) { - func(obj[current]); - } - current++; - } - }; - - // A helper function that is meant to rethrow SOE and OOM exceptions allowing them to propagate. - var throwExIfOOMOrSOE = function (ex) { - if (ex.number === -2146828260 || ex.number === -2146828281) { - throw ex; - } - }; - - var tagPublicFunction = function (name, f) { - return platform.tagPublicLibraryCode(f, name); - }; - - var resolveLocaleBestFit = function (locale, defaultLocale) { - var resolvedLocale = platform.localeBestFitCache.get(locale); - if (resolvedLocale === undefined) { - resolvedLocale = platform.resolveLocaleBestFit(locale); - if (resolvedLocale === null) { - if (!LANG_TAG_BASE_RE) { - InitializeLangTagREs(); - } - let match = platform.builtInRegexMatch(locale, LANG_TAG_BASE_RE); - resolvedLocale = match[1] + (match[2] ? ('-' + match[2]) : '') + (match[3] ? ('-' + match[3]) : ''); - } - // If resolvedLocale is undefined, cache that we got undefined - // so we don't try to resolve for `locale` in future. - platform.localeBestFitCache.set(locale, resolvedLocale === undefined ? NOT_FOUND : resolvedLocale); - } else if (resolvedLocale === NOT_FOUND) { - resolvedLocale = undefined; - } - - if (defaultLocale === locale) { - return resolvedLocale; - } else if (defaultLocale === resolvedLocale) { - return undefined; - } else { - return resolvedLocale; - } - } - - var resolveLocaleLookup = function (localeWithoutSubtags) { - let resolvedLocale = platform.localeLookupCache.get(localeWithoutSubtags); - if (resolvedLocale === undefined) { - resolvedLocale = platform.resolveLocaleLookup(localeWithoutSubtags); - if (resolvedLocale === null) { - if (!LANG_TAG_BASE_RE) { - InitializeLangTagREs(); - } - let match = platform.builtInRegexMatch(localeWithoutSubtags, LANG_TAG_BASE_RE); - // match: [1] language; [2] script; [3] region (e.g. en-Latn-US) - resolvedLocale = match[1] - + (match[2] ? ('-' + match[2]) : '') - + (match[3] ? ('-' + match[3]) : ''); - } - // If resolvedLocale is undefined, cache that we got undefined - // so we don't try to resolve for `locale` in future. - platform.localeLookupCache.set(localeWithoutSubtags, resolvedLocale === undefined ? NOT_FOUND : resolvedLocale); - } else if (resolvedLocale === NOT_FOUND) { - resolvedLocale = undefined; - } - return resolvedLocale; - } - - var getExtensionSubtags = function (locale) { - if (!LANG_TAG_EXT_RE) { - InitializeLangTagREs(); - } - - const match = platform.builtInRegexMatch(locale, LANG_TAG_EXT_RE); - if (!match) { - return undefined; - } - - // Note: extensions are /((${extension})-)*/ and are made up of \\b(?:${singleton}(?:-${alphanum}{2,8})+)\\b - // where the ${alphanum}{2,8} fields are of the form `${key}-${value}`. - // TODO (doilij): return an array of `${key}-${value}` pairs - - // REVIEW (doilij): leading - might mean we need to filter: // ss.match(rr)[4].split('-').filter((x)=>!!x) - // In that case: - // TODO StringInstanceSplit - // TODO ArrayInstanceFilter - // let extSubtags = ArrayInstanceFilter(extensionsString.split('-'), (x)=>!!x); - const extSubtags = match[0].split('-').filter((x) => !!x); - // REVIEW (doilij): performance (testing for str[0]==='-' and using the string after that or updating the regex might be faster) - - return extSubtags; - } - - var resolveLocaleHelper = function (locale, fitter, extensionFilter, defaultLocale) { - var subTags = platform.getExtensions(locale); - if (subTags === null) { - // platform.getExtensions returns null to indicate fallback to JS implementation - subTags = getExtensionSubtags(locale); - } - - if (subTags) { - callInstanceFunc(ArrayInstanceForEach, subTags, function (subTag) { - locale = callInstanceFunc(StringInstanceReplace, locale, "-" + subTag, ""); - }); - } - - // Instead of using replace, we will match two groups, one capturing, one not. The non capturing group just strips away -u if present. - // We are substituting for the function replace; which will only make a change if /-u$/ was found (-u at the end of the line) - // And because match will return null if we don't match entire sequence, we are using the two groups stated above. - locale = platform.builtInRegexMatch(locale, /(.*?)(?:-u)?$/)[1]; - var resolved = fitter(locale, defaultLocale); - - if (extensionFilter !== undefined) { // Filter to expected sub-tags - var filtered = []; - callInstanceFunc(ArrayInstanceForEach, subTags, (function (subTag) { - var parts = platform.builtInRegexMatch(subTag, /([^-]*)-?(.*)?/); // [0] entire thing; [1] key; [2] value - var key = parts[1]; - if (callInstanceFunc(ArrayInstanceIndexOf, extensionFilter, key) !== -1) { - callInstanceFunc(ArrayInstancePush, filtered, subTag); - } - })); - subTags = filtered; - } - - // As long as we are using the JS version of getExtensions on ICU, "u" will be considered an extension - // of a locale like "de-u-co-phonebk" - // Thus, we can't add the -u- ourselves here - const withoutSubTags = resolved; - if (resolved) { - if (subTags && getArrayLength(subTags) > 0) { - if (isPlatformUsingICU) { - resolved += "-"; - } else { - resolved += "-u-"; - } - } - - resolved += callInstanceFunc(ArrayInstanceJoin, subTags, "-"); - } else { - resolved = undefined; - } - - return setPrototype({ - locale: resolved, - subTags: subTags, - localeWithoutSubtags: withoutSubTags - }, null); - } - - var resolveLocales = function (givenLocales, matcher, extensionFilter, defaultLocaleFunc) { - var fitter = matcher === "lookup" ? resolveLocaleLookup : resolveLocaleBestFit; - var length = getArrayLength(givenLocales); - - var defaultLocale = defaultLocaleFunc(); - - length = length !== undefined ? length : 0; - for (var i = 0; i < length; i++) { - var resolved = resolveLocaleHelper(givenLocales[i], fitter, extensionFilter, defaultLocale); - if (resolved.locale !== undefined) { - return resolved; - } - } - return resolveLocaleHelper(defaultLocale, fitter, undefined, defaultLocale); - } - - // get just the language-script-region from the default locale - let __strippedDefaultLocale = undefined; - var strippedDefaultLocale = function () { - if (__strippedDefaultLocale) { - return __strippedDefaultLocale; - } - - if (isPlatformUsingICU) { - if (!LANG_TAG_BASE_RE) { - InitializeLangTagREs(); - } - - const def = GetDefaultLocale(); - const match = platform.builtInRegexMatch(def, LANG_TAG_BASE_RE); - if (match) { - // strip extensions by matching only the base - __strippedDefaultLocale = match[0]; - } else { - __strippedDefaultLocale = def; - } - } else { - // the only thing to strip off of a WinGlob locale is the collation, - // which comes after the underscore - __strippedDefaultLocale = platform.builtInRegexMatch(GetDefaultLocale(), /([^_]*).*/)[1]; - } - - return __strippedDefaultLocale; - }; - - var Internal = (function () { - return setPrototype({ - ToObject: function (o) { - if (o === null) { - platform.raiseNeedObject(); - } - return o !== undefined ? Object(o) : undefined; - }, - - ToString: function (s) { - return s !== undefined ? String(s) : undefined; - }, - - ToNumber: function (n) { - return n === undefined ? NaN : Number(n); - }, - - ToLogicalBoolean: function (v) { - return v !== undefined ? Boolean(v) : undefined; - }, - - ToUint32: function (n) { - var num = Number(n), - ret = 0; - if (!isNaN(num) && isFinite(num)) { - ret = Math.abs(num % Math.pow(2, 32)); - } - return ret; - }, - - HasProperty: function (o, p) { - // Walk the prototype chain - while (o) { - if (callInstanceFunc(ObjectInstanceHasOwnProperty, o, p)) { - return true; - } - o = ObjectGetPrototypeOf(o); - } - } - }, null) - })(); - - // Internal ops implemented in JS: - function GetOption(options, property, type, values, fallback) { - let value = options[property]; - - if (value !== undefined) { - if (type == "boolean") { - value = Internal.ToLogicalBoolean(value); - } - - if (type == "string") { - value = Internal.ToString(value); - } - - if (type == "number") { - value = Internal.ToNumber(value); - } - - if (values !== undefined && callInstanceFunc(ArrayInstanceIndexOf, values, value) == -1) { - platform.raiseOptionValueOutOfRange_3(String(value), String(property), "['" + callInstanceFunc(ArrayInstanceJoin, values, "', '") + "']"); - } - - return value; - } - - return fallback; - } - - function GetNumberOption(options, property, minimum, maximum, fallback) { - const rawValue = options[property]; - - if (typeof rawValue !== 'undefined') { - const formattedValue = Internal.ToNumber(rawValue); - - if (isNaN(formattedValue) || formattedValue < minimum || formattedValue > maximum) { - platform.raiseOptionValueOutOfRange_3(String(rawValue), String(property), "[" + minimum + " - " + maximum + "]"); - } - - return Math.floor(formattedValue); - } else { - return fallback; - } - } - - let CURRENCY_CODE_RE; - function InitializeCurrencyRegExp() { - CURRENCY_CODE_RE = /^[A-Z]{3}$/i; - } - - let LANG_TAG_BASE_RE; // language[-script[-region]] - let LANG_TAG_EXT_RE; // extension part (variant, extension, privateuse) - let LANG_TAG_RE; // full syntax of language tags (including privateuse and grandfathered) - function InitializeLangTagREs() { - // Language Tag Syntax as described in RFC 5646 #section-2.1 - // Note: All language tags are comprised only of ASCII characters (makes our job easy here) - // Note: Language tags in canonical form have case conventions, but language tags are case-insensitive for our purposes - - // Note: The ABNF syntax used in RFC 5646 #section-2.1 uses the following numeric quantifier conventions: - // - (Parentheses) are used for grouping - // - PRODUCTION => exactly 1 of PRODUCTION /PRODUCTION/ - // - [PRODUCTION] => 0 or 1 of PRODUCTION /(PRODUCTION)?/ - // - #PRODUCTION => exactly # of PRODUCTION /(PRODUCTION){#}/ - // - a*bPRODUCTION (where a and b are optional) - // - *PRODUCTION => any number of PRODUCTION /(PRODUCTION)*/ - // - 1*PRODUCTION => 1 or more of PRODUCTION /(PRODUCTION)+/ - // - #*PRODUCTION => # or more of PRODUCTION /(PRODUCTION){#,}/ - // - *#PRODUCTION => 0 to # (inclusive) of PRODUCTION /(PRODUCTION){,#}/ or /(PRODUCTION){0,#}/ - // - a*bPRODUCTION => a to b (inclusive) of PRODUCTION /(PRODUCTION){a,b}/ - - const ALPHA = "[A-Z]"; - const DIGIT = "[0-9]"; - const alphanum = `(?:${ALPHA}|${DIGIT})`; - - const regular = "\\b(?:art-lojban|cel-gaulish|no-bok|no-nyn|zh-guoyu|zh-hakka|zh-min|zh-min-nan|zh-xiang)\\b"; - const irregular = "\\b(?:en-GB-oed|i-ami|i-bnn|i-default|i-enochian|i-hak|i-klingon|i-lux|i-mingo" + - "|i-navajo|i-pwn|i-tao|i-tay|i-tsu|sgn-BE-FR|sgn-BE-NL|sgn-CH-DE)\\b"; - const grandfathered = `\\b(?:${regular}|${irregular})\\b`; - - const privateuse = `\\b(?:x(?:-${alphanum}{1,8}\\b)+)\\b`; // privateuse = "x" 1*("-" (1*8alphanum)) - const singleton = `\\b(?:${DIGIT}|[A-WY-Z])\\b`; // singleton ~= alphanum except for 'x' ; (paraphrased) - const extension = `\\b(?:${singleton}(?:-${alphanum}{2,8})+)\\b`; // extension = singleton 1*("-" (2*8alphanum)) - const variant = `\\b(?:${alphanum}{5,8}|${DIGIT}${alphanum}{3})\\b`; // variant = 5*8alphanum / (DIGIT 3alphanum) - const region = `\\b(?:${ALPHA}{2}|${DIGIT}{3})\\b`; // region = 2ALPHA / 3DIGIT - - const script = `\\b(?:${ALPHA}{4})\\b`; // script = 4ALPHA - const extlang = `\\b(?:${ALPHA}{3}\\b(?:-${ALPHA}{3}){0,2})\\b`; // extlang = 3ALPHA *2("-" 3ALPHA) - - const language = '\\b(?:' + // language = - `${ALPHA}{2,3}` + // 2*3ALPHA ; shortest ISO 639 code - `\\b(?:-${extlang})?` + // ["-" extlang] ; sometimes followed by extended language subtags - // `|${ALPHA}{4}` + // / 4ALPHA ; or reserved for future use - // `|${ALPHA}{5,8}` + // / 5*8ALPHA ; or registered language subtag - `|${ALPHA}{4,8}` + // ~/ 4*8ALPHA ; (paraphrased: combined previous two lines) - ')\\b'; - - // below: ${language}, ${script}, and ${region} are wrapped in parens because matching groups are useful for replacement - const LANG_TAG_BASE = `\\b(${language})\\b` + // langtag = language - `\\b(?:-(${script}))?\\b` + // ["-" script] - `\\b(?:-(${region}))?\\b` ; // ["-" region] - const LANG_TAG_EXT = `\\b(?:-${variant})*\\b` + // *("-" variant) - `\\b((?:-${extension})*)\\b` + // *("-" extension) - `\\b(?:-${privateuse})?\\b` ; // ["-" privateuse] - const langtag = `\\b${LANG_TAG_BASE}\\b${LANG_TAG_EXT}\\b`; - - const LANG_TAG = `\\b(?:${langtag}|${privateuse}|${grandfathered})\\b`; // Language-Tag = ... - - LANG_TAG_BASE_RE = new RegExp(LANG_TAG_BASE, 'i'); // [1] language; [2] script; [3] region - LANG_TAG_EXT_RE = new RegExp(LANG_TAG_EXT, 'i'); // [1] extensions /((${extension})-)*/ - LANG_TAG_RE = new RegExp(LANG_TAG, 'i'); // [1] language; [2] script; [3] region; [4] extensions - } - - function IsWellFormedCurrencyCode(code) { - code = Internal.ToString(code); - - if (!CURRENCY_CODE_RE) { - InitializeCurrencyRegExp(); - } - - return platform.builtInRegexMatch(code, CURRENCY_CODE_RE) !== null; - } - - // Make sure locales is an array, remove duplicate locales, make sure each locale is valid, and canonicalize each. - function CanonicalizeLocaleList(locales) { - if (typeof locales === 'undefined') { - return []; - } - - if (typeof locales === 'string') { - locales = [locales]; - } - - locales = Internal.ToObject(locales); - const length = Internal.ToUint32(locales.length); - - // TODO: Use sets here to prevent duplicates - let seen = []; - - forEachIfPresent(locales, length, function (locale) { - if ((typeof locale !== 'string' && typeof locale !== 'object') || locale === null) { - platform.raiseNeedObjectOrString("Locale"); - } - - let tag = Internal.ToString(locale); - - if (!IsWellFormedLanguageTag(tag)) { - platform.raiseLocaleNotWellFormed(String(tag)); - } - - tag = platform.normalizeLanguageTag(tag); - - if (tag !== undefined && callInstanceFunc(ArrayInstanceIndexOf, seen, tag) === -1) { - callInstanceFunc(ArrayInstancePush, seen, tag); - } - }); - - return seen; - } - - function LookupSupportedLocales(requestedLocales, fitter, defaultLocale) { - var subset = []; - var count = 0; - callInstanceFunc(ArrayInstanceForEach, requestedLocales, function (locale) { - try { - var resolved = resolveLocaleHelper(locale, fitter, undefined, defaultLocale); - if (resolved.locale) { - ObjectDefineProperty(subset, count, { value: resolved.locale, writable: false, configurable: false, enumerable: true }); - count = count + 1; - } - } catch (ex) { - throwExIfOOMOrSOE(ex); - // Expecting an error (other than OOM or SOE), same as fitter returning undefined - } - }); - ObjectDefineProperty(subset, "length", { value: count, writable: false, configurable: false }); - return subset; - } - - var supportedLocalesOfWrapper = function (that, functionName, locales, options) { - if (that === null || that === undefined) { - platform.raiseNotAConstructor(functionName); - } - - var hiddenObj = platform.getHiddenObject(that); - if (!hiddenObj || hiddenObj.isValid !== "Valid") { - platform.raiseNotAConstructor(functionName); - } - - return supportedLocalesOf(locales, options); - } - - var canonicalizeLocaleListWrapper = function (that, functionName, locales) { - if (that === null || that === undefined) { - platform.raiseNotAConstructor(functionName); - } - - var hiddenObj = platform.getHiddenObject(that); - if (!hiddenObj || hiddenObj.isValid !== "Valid") { - platform.raiseNotAConstructor(functionName); - } - - return CanonicalizeLocaleList(locales); - } - - // Shared among all the constructors - var supportedLocalesOf = function (locales, options) { - var matcher; - locales = CanonicalizeLocaleList(locales); - - if (typeof options !== 'undefined') { - matcher = options.localeMatcher; - - if (typeof matcher !== 'undefined') { - matcher = Internal.ToString(matcher); - - if (matcher !== 'lookup' && matcher !== 'best fit') { - platform.raiseOptionValueOutOfRange_3(String(matcher), "localeMatcher", "['best fit', 'lookup']"); - } - } - } - - if (typeof matcher === 'undefined' || matcher === 'best fit') { - return LookupSupportedLocales(locales, resolveLocaleBestFit, platform.normalizeLanguageTag(strippedDefaultLocale())); - } else { - return LookupSupportedLocales(locales, resolveLocaleLookup, strippedDefaultLocale()); - } - }; - - const intlStaticMethodThisArg = setPrototype({}, null); - platform.setHiddenObject(intlStaticMethodThisArg, setPrototype({ isValid: "Valid" }, null)); - - // We wrap these functions so that we can define the correct name for this function for each Intl constructor, - // which allows us to display the correct error message for each Intl type. - const collator_supportedLocalesOf_name = "Intl.Collator.supportedLocalesOf"; - const collator_supportedLocalesOf = callInstanceFunc(FunctionInstanceBind, tagPublicFunction(collator_supportedLocalesOf_name, - function collator_supportedLocalesOf_dummyName(locales, options = undefined) { - return supportedLocalesOfWrapper(this, collator_supportedLocalesOf_name, locales, options); - }), intlStaticMethodThisArg); - - const numberFormat_supportedLocalesOf_name = "Intl.NumberFormat.supportedLocalesOf"; - const numberFormat_supportedLocalesOf = callInstanceFunc(FunctionInstanceBind, tagPublicFunction(numberFormat_supportedLocalesOf_name, - function numberFormat_supportedLocalesOf_dummyName(locales, options = undefined) { - return supportedLocalesOfWrapper(this, numberFormat_supportedLocalesOf_name, locales, options); - }), intlStaticMethodThisArg); - - const dateTimeFormat_supportedLocalesOf_name = "Intl.DateTimeFormat.supportedLocalesOf"; - const dateTimeFormat_supportedLocalesOf = callInstanceFunc(FunctionInstanceBind, tagPublicFunction(dateTimeFormat_supportedLocalesOf_name, - function dateTimeFormat_supportedLocalesOf_dummyName(locales, options = undefined) { - return supportedLocalesOfWrapper(this, dateTimeFormat_supportedLocalesOf_name, locales, options); - }), intlStaticMethodThisArg); - - const getCanonicalLocales_name = "Intl.getCanonicalLocales"; - const getCanonicalLocales = callInstanceFunc(FunctionInstanceBind, tagPublicFunction(getCanonicalLocales_name, - function getCanonicalLocales_dummyName(locales) { - return canonicalizeLocaleListWrapper(this, getCanonicalLocales_name, locales); - }), intlStaticMethodThisArg); - - // TODO: Bound functions get the "bound" prefix by default, so we need to remove it. - // When https://github.com/Microsoft/ChakraCore/issues/637 is fixed and we have a way - // to make built-in functions non-constructible, we can remove the call to - // Function.prototype.bind (i.e. FunctionInstanceBind) and just rely on tagging instead of setting the "name" manually. - ObjectDefineProperty(collator_supportedLocalesOf, 'name', { value: 'supportedLocalesOf' }); - ObjectDefineProperty(numberFormat_supportedLocalesOf, 'name', { value: 'supportedLocalesOf' }); - ObjectDefineProperty(dateTimeFormat_supportedLocalesOf, 'name', { value: 'supportedLocalesOf' }); - ObjectDefineProperty(getCanonicalLocales, 'name', { value: 'getCanonicalLocales' }); - - // If an empty string is encountered for the value of the property; that means that is by default. - // So in the case of zh-TW; "default" and "stroke" are the same. - // This list was discussed with AnBorod, AnGlass and SureshJa. - var localesAcceptingCollationValues = setPrototype({ - "es-ES": setPrototype({ "trad": "tradnl" }, null), - "lv-LV": setPrototype({ "trad": "tradnl" }, null), - "de-DE": setPrototype({ "phonebk": "phoneb" }, null), - "ja-JP": setPrototype({ "unihan": "radstr" }, null), - // We believe "pronun" means "pronunciation" - "zh-TW": setPrototype({ "phonetic": "pronun", "unihan": "radstr", "stroke": "" }, null), - "zh-HK": setPrototype({ "unihan": "radstr", "stroke": "" }, null), - "zh-MO": setPrototype({ "unihan": "radstr", "stroke": "" }, null), - "zh-CN": setPrototype({ "stroke": "stroke", "pinyin": "" }, null), - "zh-SG": setPrototype({ "stroke": "stroke", "pinyin": "" }, null) - - // The following locales are supported by Windows; however, no BCP47 equivalent collation values were found for these. - // In future releases; this list (plus most of the Collator implementation) will be changed/removed as the platform support is expected to change. - // "hu-HU": ["technl"], - // "ka-GE": ["modern"], - // "x-IV": ["mathan"] - }, null); - - // reverses the keys and values in each locale's sub-object in localesAcceptingCollationValues - // localesAcceptingCollationValues[locale][key] = value -> reverseLocalesAcceptingCollationValues[locale][value] = key - var reverseLocalesAcceptingCollationValues = (function () { - const toReturn = setPrototype({}, null); - callInstanceFunc(ArrayInstanceForEach, ObjectGetOwnPropertyNames(localesAcceptingCollationValues), function (locale) { - const collationValuesForLocale = localesAcceptingCollationValues[locale]; - const reversedCollationValues = setPrototype({}, null); - - callInstanceFunc(ArrayInstanceForEach, ObjectGetOwnPropertyNames(collationValuesForLocale), function (collation) { - const windowsTag = collationValuesForLocale[collation]; - if (windowsTag !== "") { - reversedCollationValues[windowsTag] = collation; - } - }); - - toReturn[locale] = reversedCollationValues; - }); - return toReturn; - }()); - - // mappedDefaultLocale will get the default locale and update any deprecated - // collation/sort order values it may use - let __mappedDefaultLocale = undefined; - var mappedDefaultLocale = function () { - if (__mappedDefaultLocale && platform.useCaches) { - return __mappedDefaultLocale; - } - - let locale = undefined; - let collation = undefined; - if (isPlatformUsingICU) { - // ICU's getDefaultLocale() will return a valid BCP-47/RFC 5646 langtag - locale = GetDefaultLocale(); - const match = platform.builtInRegexMatch(locale, /-u(?:-[^\-][^\-]?-[^\-]+)*-co-([^\-]+).*/); - if (match) { - // if the system default locale had a collation, strip it for now - // we will add the collation back later in this function - collation = match[1]; - locale = callInstanceFunc(StringInstanceReplace, locale, `-co-${collation}`, ""); - } - } else { - // Windows' getDefaultLocale() will return a RFC4646 langtag - const parts = platform.builtInRegexMatch(GetDefaultLocale(), /([^_]*)_?(.+)?/); - locale = parts[1]; - collation = parts[2]; - } - - if (collation === undefined) { - __mappedDefaultLocale = locale; - return __mappedDefaultLocale; - } - - // we stripped the -co-collation or _collation above, so this function adds it back - const createLocaleCollationString = function (finalLocale, finalCollation) { - if (isPlatformUsingICU) { - return `${finalLocale}-co-${finalCollation}`; - } else { - return `${finalLocale}-u-co-${finalCollation}`; - } - }; - - const collationMapForLocale = reverseLocalesAcceptingCollationValues[locale]; - if (collationMapForLocale === undefined) { - // Assume the system wouldn't give us back a bad collation value - __mappedDefaultLocale = createLocaleCollationString(locale, collation); - return __mappedDefaultLocale; - } - - const mappedCollation = collationMapForLocale[collation]; - if (mappedCollation !== undefined) { - __mappedDefaultLocale = createLocaleCollationString(locale, mappedCollation); - } else { - __mappedDefaultLocale = createLocaleCollationString(locale, collation); - } - - return __mappedDefaultLocale; - }; - - // Intl.Collator, String.prototype.localeCompare - var Collator = (function () { - - if (InitType === 'Intl' || InitType === 'String') { - - function InitializeCollator(collator, localeList, options) { - if (typeof collator != "object") { - platform.raiseNeedObject(); - } - - if (callInstanceFunc(ObjectInstanceHasOwnProperty, collator, '__initializedIntlObject') && collator.__initializedIntlObject) { - platform.raiseObjectIsAlreadyInitialized("Collator", "Collator"); - } - - collator.__initializedIntlObject = true; - - // Extract options - if (typeof options === 'undefined') { - options = setPrototype({}, null); - } else { - options = Internal.ToObject(options); - } - - var matcher = GetOption(options, "localeMatcher", "string", ["lookup", "best fit"], "best fit"); - var usage = GetOption(options, "usage", "string", ["sort", "search"], "sort"); - var sensitivity = GetOption(options, "sensitivity", "string", ["base", "accent", "case", "variant"], undefined); - var ignorePunctuation = GetOption(options, "ignorePunctuation", "boolean", undefined, false); - var caseFirst = GetOption(options, "caseFirst", "string", ["upper", "lower", "false"], undefined); - var numeric = GetOption(options, "numeric", "boolean", [true, false], undefined); - - // Deal with the locales and extensions - localeList = CanonicalizeLocaleList(localeList); - var resolvedLocaleInfo = resolveLocales(localeList, matcher, undefined, mappedDefaultLocale); - - var collation = "default"; - var resolvedLocaleLookup = resolveLocaleLookup(resolvedLocaleInfo.localeWithoutSubtags); - var collationAugmentedLocale = resolvedLocaleLookup; - - if (resolvedLocaleInfo.subTags) { - callInstanceFunc(ArrayInstanceForEach, resolvedLocaleInfo.subTags, function (subTag) { - var parts = platform.builtInRegexMatch(subTag, /([^-]*)-?(.*)?/); // [0] entire thing; [1] key; [2] value - var key = parts[1]; - var value = parts[2] === "" ? undefined : parts[2]; - if (key === "kf" && caseFirst === undefined) { - caseFirst = GetOption(setPrototype({ caseFirst: value }, null), "caseFirst", "string", ["upper", "lower", "false"], undefined); - } else if (key === "kn" && numeric === undefined) { - if (value !== undefined) { - numeric = Internal.ToLogicalBoolean(callInstanceFunc(StringInstanceToLowerCase, value) === "true"); - } else { - numeric = true; - } - } else if (key === "co" && value !== undefined && value !== "default" && value !== "search" && value !== "sort" && value !== "standard") { - // Ignore these collation values as they shouldn't have any impact - collation = value; - } - }); - } - if (collation !== "default") { - var accepedCollationForLocale = localesAcceptingCollationValues[collationAugmentedLocale]; - var windowsCollation = ""; - if (accepedCollationForLocale !== undefined && (windowsCollation = accepedCollationForLocale[collation]) !== undefined) { - if (windowsCollation !== "") { - collationAugmentedLocale = collationAugmentedLocale + "_" + windowsCollation; - } - } - else { - collation = "default"; - } - } - - // Correct options if need be. - if (caseFirst === undefined) { - try { - var num = platform.compareString('A', 'a', resolvedLocaleLookup, undefined, undefined, undefined, undefined); - } catch (e) { - // Rethrow OOM or SOE - throwExIfOOMOrSOE(e); - - // Otherwise, Generic message to cover the exception throw from the CompareStringEx api. - // The platform's exception is also generic and in most if not all cases specifies that "a" argument is invalid. - // We have no other information from the platform on the cause of the exception. - platform.raiseOptionValueOutOfRange(); - } - - if (num === 0) { - caseFirst = 'false'; - } else if (num === -1) { - caseFirst = 'upper'; - } else { - caseFirst = 'lower'; - } - } - - if (sensitivity === undefined) { - sensitivity = "variant"; - } - - if (numeric === undefined) { - numeric = false; - } - - // Set the options on the object - collator.__matcher = matcher; - collator.__locale = resolvedLocaleInfo.localeWithoutSubtags; - collator.__localeForCompare = collationAugmentedLocale; - collator.__usage = usage; - collator.__sensitivity = sensitivity; - collator.__ignorePunctuation = ignorePunctuation; - collator.__caseFirst = caseFirst; - collator.__numeric = numeric; - collator.__collation = collation; - collator.__initializedCollator = true; - } - - platform.registerBuiltInFunction(tagPublicFunction("String.prototype.localeCompare", function () { - var that = arguments[0]; - if (this === undefined || this === null) { - platform.raiseThis_NullOrUndefined("String.prototype.localeCompare"); - } - else if (that === null) { - platform.raiseNeedObject(); - } - // ToString must be called on this/that argument before we do any other operation, as other operations in InitializeCollator may also be observable - var thisArg = String(this); - var that = String(that); - var stateObject = setPrototype({}, null); - InitializeCollator(stateObject, arguments[1], arguments[2]); - return Number(platform.compareString( - thisArg, - that, - stateObject.__localeForCompare, - toEnum(CollatorSensitivity, stateObject.__sensitivity), - stateObject.__ignorePunctuation, - stateObject.__numeric, - toEnum(CollatorCaseFirst, stateObject.__caseFirst) - )); - }), IntlBuiltInFunctionID.StringLocaleCompare); - - if (InitType === 'Intl') { - - function Collator(locales = undefined, options = undefined) { - if (this === Intl || this === undefined) { - return new Collator(locales, options); - } - - let obj = Internal.ToObject(this); - if (!ObjectIsExtensible(obj)) { - platform.raiseObjectIsNonExtensible("Collator"); - } - - // Use the hidden object to store data - let hiddenObject = platform.getHiddenObject(obj); - - if (hiddenObject === undefined) { - hiddenObject = setPrototype({}, null); - platform.setHiddenObject(obj, hiddenObject); - } - - InitializeCollator(hiddenObject, locales, options); - - // Add the bound compare - hiddenObject.__boundCompare = callInstanceFunc(FunctionInstanceBind, compare, obj); - delete hiddenObject.__boundCompare.name; - return obj; - } - tagPublicFunction("Intl.Collator", Collator); - - function compare(a, b) { - if (typeof this !== 'object') { - platform.raiseNeedObjectOfType("Collator.prototype.compare", "Collator"); - } - - var hiddenObject = platform.getHiddenObject(this); - if (hiddenObject === undefined || !hiddenObject.__initializedCollator) { - platform.raiseNeedObjectOfType("Collator.prototype.compare", "Collator"); - } - - a = String(a); - b = String(b); - - return Number(platform.compareString( - a, - b, - hiddenObject.__localeForCompare, - toEnum(CollatorSensitivity, hiddenObject.__sensitivity), - hiddenObject.__ignorePunctuation, - hiddenObject.__numeric, - toEnum(CollatorCaseFirst, hiddenObject.__caseFirst) - )); - } - tagPublicFunction("Intl.Collator.prototype.compare", compare); - - ObjectDefineProperty(Collator, 'supportedLocalesOf', { value: collator_supportedLocalesOf, writable: true, configurable: true }); - - ObjectDefineProperty(Collator, 'prototype', { value: new Collator(), writable: false, enumerable: false, configurable: false }); - setPrototype(Collator.prototype, Object.prototype); - - ObjectDefineProperty(Collator.prototype, 'constructor', { value: Collator, writable: true, enumerable: false, configurable: true }); - - ObjectDefineProperty(Collator.prototype, 'resolvedOptions', { - value: function resolvedOptions() { - if (typeof this !== 'object') { - platform.raiseNeedObjectOfType("Collator.prototype.resolvedOptions", "Collator"); - } - var hiddenObject = platform.getHiddenObject(this); - if (hiddenObject === undefined || !hiddenObject.__initializedCollator) { - platform.raiseNeedObjectOfType("Collator.prototype.resolvedOptions", "Collator"); - } - - return { - locale: hiddenObject.__locale, - usage: hiddenObject.__usage, - sensitivity: hiddenObject.__sensitivity, - ignorePunctuation: hiddenObject.__ignorePunctuation, - collation: hiddenObject.__collation, // "co" unicode extension - numeric: hiddenObject.__numeric, // "ka" unicode extension TODO: Determine if this is supported (doesn't have to be) - caseFirst: hiddenObject.__caseFirst // "kf" unicode extension TODO: Determine if this is supported (doesn't have to be) - } - }, writable: true, enumerable: false, configurable: true - }); - - ObjectDefineProperty(Collator.prototype, 'compare', { - get: tagPublicFunction('get compare', function () { - if (typeof this !== 'object') { - platform.raiseNeedObjectOfType("Collator.prototype.compare", "Collator"); - } - - var hiddenObject = platform.getHiddenObject(this); - if (hiddenObject === undefined || !hiddenObject.__initializedCollator) { - platform.raiseNeedObjectOfType("Collator.prototype.compare", "Collator"); - } - - return hiddenObject.__boundCompare; - }), enumerable: false, configurable: true - }); - - return Collator; - } - } - // 'Init.Collator' not defined if reached here. Return 'undefined' - return undefined; - })(); - - // Intl.NumberFormat, Number.prototype.toLocaleString - var NumberFormat = (function () { - if (InitType === 'Intl' || InitType === 'Number') { - function InitializeNumberFormat(numberFormat, localeList, options) { - if (typeof numberFormat != "object") { - platform.raiseNeedObject(); - } - - if (callInstanceFunc(ObjectInstanceHasOwnProperty, numberFormat, '__initializedIntlObject') && numberFormat.__initializedIntlObject) { - platform.raiseObjectIsAlreadyInitialized("NumberFormat", "NumberFormat"); - } - - numberFormat.__initializedIntlObject = true; - - // Extract options - if (typeof options === 'undefined') { - options = setPrototype({}, null); - } else { - options = Internal.ToObject(options); - } - - var matcher = GetOption(options, "localeMatcher", "string", ["lookup", "best fit"], "best fit"); - var style = GetOption(options, "style", "string", ["decimal", "percent", "currency"], "decimal"); - - var formatterToUse = NumberFormatStyle.DECIMAL; // DEFAULT - if (style === 'percent') { - formatterToUse = NumberFormatStyle.PERCENT; - } else if (style === 'currency') { - formatterToUse = NumberFormatStyle.CURRENCY; - } - - var currency = GetOption(options, "currency", "string", undefined, undefined); - var currencyDisplay = GetOption(options, 'currencyDisplay', 'string', ['code', 'symbol', 'name'], 'symbol'); - var currencyDigits = undefined; - - var minimumIntegerDigits = GetNumberOption(options, 'minimumIntegerDigits', 1, 21, 1); - var minimumFractionDigits = undefined; - var maximumFractionDigits = undefined; - var maximumFractionDigitsDefault = undefined; - - var minimumSignificantDigits = options.minimumSignificantDigits; - var maximumSignificantDigits = options.maximumSignificantDigits; - - if (typeof minimumSignificantDigits !== 'undefined' || typeof maximumSignificantDigits !== 'undefined') { - minimumSignificantDigits = GetNumberOption(options, 'minimumSignificantDigits', 1, 21, 1); - maximumSignificantDigits = GetNumberOption(options, 'maximumSignificantDigits', minimumSignificantDigits, 21, 21); - } - - var useGrouping = GetOption(options, 'useGrouping', 'boolean', undefined, true); - - // Deal with the locales and extensions - localeList = CanonicalizeLocaleList(localeList); - var resolvedLocaleInfo = resolveLocales(localeList, matcher, ["nu"], strippedDefaultLocale); - - // Correct the options if necessary - if (typeof currency !== 'undefined' && !IsWellFormedCurrencyCode(currency)) { - platform.raiseInvalidCurrencyCode(String(currency)); - } - - if (style === "currency") { - if (typeof currency === 'undefined') { - platform.raiseMissingCurrencyCode(); - } - currency = callInstanceFunc(StringInstanceToUpperCase, currency); - try { - currencyDigits = platform.currencyDigits(currency); - } catch (e) { - throwExIfOOMOrSOE(e); - platform.raiseInvalidCurrencyCode(String(currency)); - } - minimumFractionDigits = GetNumberOption(options, 'minimumFractionDigits', 0, 20, currencyDigits); - maximumFractionDigitsDefault = Math.max(currencyDigits, minimumFractionDigits); - } else { - currency = undefined; - currencyDisplay = undefined; - minimumFractionDigits = GetNumberOption(options, 'minimumFractionDigits', 0, 20, 0); - if (style === "percent") { - maximumFractionDigitsDefault = Math.max(minimumFractionDigits, 0); - } else { - maximumFractionDigitsDefault = Math.max(minimumFractionDigits, 3) - } - } - - maximumFractionDigits = GetNumberOption(options, 'maximumFractionDigits', minimumFractionDigits, 20, maximumFractionDigitsDefault); - - // Set the options on the object - numberFormat.__localeMatcher = matcher; - numberFormat.__locale = resolvedLocaleInfo.locale; - numberFormat.__style = style; - - if (currency !== undefined) { - numberFormat.__currency = currency; - } - - if (currencyDisplay !== undefined) { - numberFormat.__currencyDisplay = currencyDisplay; - numberFormat.__currencyDisplayToUse = NumberFormatCurrencyDisplay.DEFAULT; - if (currencyDisplay === "symbol") { - numberFormat.__currencyDisplayToUse = NumberFormatCurrencyDisplay.SYMBOL; - } else if (currencyDisplay === "code") { - numberFormat.__currencyDisplayToUse = NumberFormatCurrencyDisplay.CODE; - } else if (currencyDisplay === "name") { - numberFormat.__currencyDisplayToUse = NumberFormatCurrencyDisplay.NAME; - } - } - - numberFormat.__minimumIntegerDigits = minimumIntegerDigits; - numberFormat.__minimumFractionDigits = minimumFractionDigits; - numberFormat.__maximumFractionDigits = maximumFractionDigits; - - if (maximumSignificantDigits !== undefined) { - numberFormat.__minimumSignificantDigits = minimumSignificantDigits; - numberFormat.__maximumSignificantDigits = maximumSignificantDigits; - } - - numberFormat.__formatterToUse = formatterToUse; - numberFormat.__useGrouping = useGrouping; - - try { - // Cache api instance and update numbering system on the object - platform.cacheNumberFormat(numberFormat); - } catch (e) { - throwExIfOOMOrSOE(e); - // Generic message to cover the exception throw from the platform. - // The platform's exception is also generic and in most if not all cases specifies that "a" argument is invalid. - // We have no other information from the platform on the cause of the exception. - platform.raiseOptionValueOutOfRange(); - } - - if (!numberFormat.__numberingSystem) { - numberFormat.__numberingSystem = "latn"; // assume Latin numerals by default - } - - numberFormat.__numberingSystem = callInstanceFunc(StringInstanceToLowerCase, numberFormat.__numberingSystem); - numberFormat.__initializedNumberFormat = true; - } - - platform.registerBuiltInFunction(tagPublicFunction("Number.prototype.toLocaleString", function () { - if ((typeof this) !== 'number' && !(this instanceof Number)) { - platform.raiseNeedObjectOfType("Number.prototype.toLocaleString", "Number"); - } - - var stateObject = setPrototype({}, null); - InitializeNumberFormat(stateObject, arguments[0], arguments[1]); - - var n = Internal.ToNumber(this); - return String(platform.formatNumber(n, stateObject)); - }), IntlBuiltInFunctionID.NumberToLocaleString); - - if (InitType === 'Intl') { - function NumberFormat(locales = undefined, options = undefined) { - if (this === Intl || this === undefined) { - return new NumberFormat(locales, options); - } - - let obj = Internal.ToObject(this); - - if (!ObjectIsExtensible(obj)) { - platform.raiseObjectIsNonExtensible("NumberFormat"); - } - - // Use the hidden object to store data - let hiddenObject = platform.getHiddenObject(obj); - - if (hiddenObject === undefined) { - hiddenObject = setPrototype({}, null); - platform.setHiddenObject(obj, hiddenObject); - } - - InitializeNumberFormat(hiddenObject, locales, options); - - hiddenObject.__boundFormat = callInstanceFunc(FunctionInstanceBind, format, obj) - delete hiddenObject.__boundFormat.name; - - return obj; - } - tagPublicFunction("Intl.NumberFormat", NumberFormat); - - function format(n) { - n = Internal.ToNumber(n); - - if (typeof this !== 'object') { - platform.raiseNeedObjectOfType("NumberFormat.prototype.format", "NumberFormat"); - } - - var hiddenObject = platform.getHiddenObject(this); - if (hiddenObject === undefined || !hiddenObject.__initializedNumberFormat) { - platform.raiseNeedObjectOfType("NumberFormat.prototype.format", "NumberFormat"); - } - - return String(platform.formatNumber(n, hiddenObject)); - } - tagPublicFunction("Intl.NumberFormat.prototype.format", format); - - ObjectDefineProperty(NumberFormat, 'supportedLocalesOf', { value: numberFormat_supportedLocalesOf, writable: true, configurable: true }); - - var options = ['locale', 'numberingSystem', 'style', 'currency', 'currencyDisplay', 'minimumIntegerDigits', - 'minimumFractionDigits', 'maximumFractionDigits', 'minimumSignificantDigits', 'maximumSignificantDigits', - 'useGrouping']; - - ObjectDefineProperty(NumberFormat, 'prototype', { value: new NumberFormat(), writable: false, enumerable: false, configurable: false }); - setPrototype(NumberFormat.prototype, Object.prototype); - ObjectDefineProperty(NumberFormat.prototype, 'constructor', { value: NumberFormat, writable: true, enumerable: false, configurable: true }); - - ObjectDefineProperty(NumberFormat.prototype, 'resolvedOptions', { - value: function resolvedOptions() { - if (typeof this !== 'object') { - platform.raiseNeedObjectOfType("NumberFormat.prototype.resolvedOptions", "NumberFormat"); - } - var hiddenObject = platform.getHiddenObject(this); - if (hiddenObject === undefined || !hiddenObject.__initializedNumberFormat) { - platform.raiseNeedObjectOfType("NumberFormat.prototype.resolvedOptions", "NumberFormat"); - } - - var resolvedOptions = setPrototype({}, null); - - callInstanceFunc(ArrayInstanceForEach, options, function (option) { - if (typeof hiddenObject['__' + option] !== 'undefined') { - resolvedOptions[option] = hiddenObject['__' + option]; - } - }); - - return setPrototype(resolvedOptions, {}); - }, writable: true, enumerable: false, configurable: true - }); - - ObjectDefineProperty(NumberFormat.prototype, 'format', { - get: tagPublicFunction('get format', function () { - if (typeof this !== 'object') { - platform.raiseNeedObjectOfType("NumberFormat.prototype.format", "NumberFormat"); - } - - var hiddenObject = platform.getHiddenObject(this); - if (hiddenObject === undefined || !hiddenObject.__initializedNumberFormat) { - platform.raiseNeedObjectOfType("NumberFormat.prototype.format", "NumberFormat"); - } - - return hiddenObject.__boundFormat; - }), enumerable: false, configurable: true - }); - - return NumberFormat; - } - } - // 'Init.NumberFormat' not defined if reached here. Return 'undefined' - return undefined; - })(); - - // Intl.DateTimeFormat, Date.prototype.toLocaleString, Date.prototype.toLocaleDateString, Date.prototype.toLocaleTimeString - var DateTimeFormat = (function () { - if (InitType === 'Intl' || InitType === 'Date') { - function ToDateTimeOptions(options, required, defaults) { - if (options === undefined) { - options = setPrototype({}, null); - } else { - options = Internal.ToObject(options); - } - - var needDefaults = true; - if (required === "date" || required === "any") { - if (options.weekday !== undefined || options.year !== undefined || options.month !== undefined || options.day !== undefined) { - needDefaults = false; - } - } - if (required === "time" || required === "any") { - if (options.hour !== undefined || options.minute !== undefined || options.second !== undefined) { - needDefaults = false; - } - } - - if (needDefaults && (defaults === "date" || defaults === "all")) { - ObjectDefineProperty(options, "year", { - value: "numeric", writable: true, - enumerable: true, configurable: true - }); - ObjectDefineProperty(options, "month", { - value: "numeric", writable: true, - enumerable: true, configurable: true - }); - ObjectDefineProperty(options, "day", { - value: "numeric", writable: true, - enumerable: true, configurable: true - }); - } - if (needDefaults && (defaults === "time" || defaults === "all")) { - ObjectDefineProperty(options, "hour", { - value: "numeric", writable: true, - enumerable: true, configurable: true - }); - ObjectDefineProperty(options, "minute", { - value: "numeric", writable: true, - enumerable: true, configurable: true - }); - ObjectDefineProperty(options, "second", { - value: "numeric", writable: true, - enumerable: true, configurable: true - }); - } - return options; - } - - // Currently you cannot format date pieces and time pieces together, so this builds up a format template for each separately. - function EcmaOptionsToWindowsTemplate(options) { - var template = []; - - if (options.weekday) { - if (options.weekday === 'narrow' || options.weekday === 'short') { - callInstanceFunc(ArrayInstancePush, template, 'dayofweek.abbreviated'); - } else if (options.weekday === 'long') { - callInstanceFunc(ArrayInstancePush, template, 'dayofweek.full'); - } - } - - // TODO: Era not supported - if (options.year) { - if (options.year === '2-digit') { - callInstanceFunc(ArrayInstancePush, template, 'year.abbreviated'); - } else if (options.year === 'numeric') { - callInstanceFunc(ArrayInstancePush, template, 'year.full'); - } - } - - if (options.month) { - if (options.month === '2-digit' || options.month === 'numeric') { - callInstanceFunc(ArrayInstancePush, template, 'month.numeric') - } else if (options.month === 'short' || options.month === 'narrow') { - callInstanceFunc(ArrayInstancePush, template, 'month.abbreviated'); - } else if (options.month === 'long') { - callInstanceFunc(ArrayInstancePush, template, 'month.full'); - } - } - - if (options.day) { - callInstanceFunc(ArrayInstancePush, template, 'day'); - } - - if (options.timeZoneName) { - if (options.timeZoneName === "short") { - callInstanceFunc(ArrayInstancePush, template, 'timezone.abbreviated'); - } else if (options.timeZoneName === "long") { - callInstanceFunc(ArrayInstancePush, template, 'timezone.full'); - } - } - - callInstanceFunc(ArrayInstanceForEach, ['hour', 'minute', 'second'], function (opt) { - if (options[opt]) { - callInstanceFunc(ArrayInstancePush, template, opt); - } - }); - - // TODO: Timezone Name not supported. - return getArrayLength(template) > 0 ? callInstanceFunc(ArrayInstanceJoin, template, ' ') : undefined; - } - - var WindowsToEcmaCalendarMap = { - 'GregorianCalendar': 'gregory', - 'HebrewCalendar': 'hebrew', - 'HijriCalendar': 'islamic', - 'JapaneseCalendar': 'japanese', - 'JulianCalendar': 'julian', - 'KoreanCalendar': 'korean', - 'UmAlQuraCalendar': 'islamic-civil', - 'ThaiCalendar': 'thai', - 'TaiwanCalendar': 'taiwan' - }; - - function WindowsToEcmaCalendar(calendar) { - if (typeof calendar === 'undefined') { - return ''; - } - - return WindowsToEcmaCalendarMap[calendar] || 'gregory'; - } - - // Certain formats have similar patterns on both ecma and windows; will use helper methods for them - function correctWeekdayEraMonthPattern(patternString, userValue, searchParam) { - // parts[1] is either dayofweek.solo, dayofweek, era or month; parts[2] is either abbreviated or full - var parts = platform.builtInRegexMatch(patternString, RegExp("{(" + searchParam + "(?:\\.solo)?)\\.([a-z]*)(?:\\([0-9]\\))?}")); - // If this happens that means windows removed the specific pattern (which isn't expected; but better be safe) - if (parts === null) { - RaiseAssert(new Error("Error when correcting windows returned weekday/Era/Month pattern; regex returned null. \nInput was: '" + patternString + "'\nRegex: '" + "{(" + searchParam + "(\\.solo)?)\\.([a-z]*)(\\([0-9]\\))?}'")); - return patternString; - } - - if (parts[2] !== "full" && userValue === "long") { - return callInstanceFunc(StringInstanceReplace, patternString, parts[0], "{" + parts[1] + "." + "full" + "}"); - } else if (userValue !== "long") { - return callInstanceFunc(StringInstanceReplace, patternString, parts[0], "{" + parts[1] + "." + (userValue === "short" ? "abbreviated" : "abbreviated(1)") + "}"); - } - return patternString; - } - - function correctDayHourMinuteSecondMonthPattern(patternString, userValue, searchParam) { - // parts[1] is either month, day, hour, minute, or second - // REVIEW (doilij) is it even possible to have a '.solo' (i.e. /(?:\\.solo)?/ ) in the above cases? - var parts = platform.builtInRegexMatch(patternString, RegExp("{(" + searchParam + ")(?:\\.solo)?\\.([a-z]*)(?:\\([0-9]\\))?}")); - if (parts === null) { - RaiseAssert(new Error("Error when correcting windows returned day/hour/minute/second/month pattern; regex returned null. \nInput was: '" + patternString + "'\nRegex: '" + "{(" + searchParam + "(\\.solo)?)\\.([a-z]*)(\\([0-9]\\))?}'")); - return patternString; - } - - // Only correct the 2 digit; unless part[2] isn't integer - if (userValue === "2-digit") { - return callInstanceFunc(StringInstanceReplace, patternString, parts[0], "{" + parts[1] + ".integer(2)}"); - } else if (parts[2] !== "integer") { - return callInstanceFunc(StringInstanceReplace, patternString, parts[0], "{" + parts[1] + ".integer}"); - } - - return patternString; - } - - // Perhaps the level of validation that we have might not be required for this method - function updatePatternStrings(patternString, dateTimeFormat) { - if (dateTimeFormat.__weekday !== undefined) { - patternString = correctWeekdayEraMonthPattern(patternString, dateTimeFormat.__weekday, "dayofweek"); - } - - if (dateTimeFormat.__era !== undefined) { - // This is commented because not all options are supported for locales that do have era; - // In addition, we can't force era to be part of a locale using templates. - // patternString = correctWeekdayEraMonthPattern(patternString, dateTimeFormat.__era, "era", 2); - } - - if (dateTimeFormat.__year === "2-digit") { - var parts = platform.builtInRegexMatch(patternString, /\{year\.[a-z]*(\([0-9]\))?\}/); - if (parts === null) { - RaiseAssert(new Error("Error when correcting windows returned year; regex returned null")); - } else { - patternString = callInstanceFunc(StringInstanceReplace, patternString, parts[0], "{year.abbreviated(2)}"); - } - } else if (dateTimeFormat.__year === "full") { - var parts = platform.builtInRegexMatch(patternString, /\{year\.[a-z]*(\([0-9]\))?\}/); - if (parts === null) { - RaiseAssert(new Error("Error when correcting windows returned year; regex returned null")); - } else { - patternString = callInstanceFunc(StringInstanceReplace, patternString, parts[0], "{year.full}"); - } - } - - // Month partially overlaps with weekday/month; unless it's 2-digit or numeric in which case it overlaps with day/hour/minute/second - if (dateTimeFormat.__month !== undefined && dateTimeFormat.__month !== "2-digit" && dateTimeFormat.__month !== "numeric") { - patternString = correctWeekdayEraMonthPattern(patternString, dateTimeFormat.__month, "month"); - } else if (dateTimeFormat.__month !== undefined) { - patternString = correctDayHourMinuteSecondMonthPattern(patternString, dateTimeFormat.__month, "month"); - } - - if (dateTimeFormat.__day !== undefined) { - patternString = correctDayHourMinuteSecondMonthPattern(patternString, dateTimeFormat.__day, "day"); - } - - if (dateTimeFormat.__hour !== undefined) { - patternString = correctDayHourMinuteSecondMonthPattern(patternString, dateTimeFormat.__hour, "hour"); - } - - if (dateTimeFormat.__minute !== undefined) { - patternString = correctDayHourMinuteSecondMonthPattern(patternString, dateTimeFormat.__minute, "minute"); - } - - if (dateTimeFormat.__second !== undefined) { - patternString = correctDayHourMinuteSecondMonthPattern(patternString, dateTimeFormat.__second, "second"); - } - - if (dateTimeFormat.__timeZoneName !== undefined) { - patternString = correctWeekdayEraMonthPattern(patternString, dateTimeFormat.__timeZoneName, "timezone"); - } - - return patternString; - } - - function InitializeDateTimeFormat(dateTimeFormat, localeList, options) { - if (typeof dateTimeFormat != "object") { - platform.raiseNeedObject(); - } - - if (callInstanceFunc(ObjectInstanceHasOwnProperty, dateTimeFormat, '__initializedIntlObject') && dateTimeFormat.__initializedIntlObject) { - platform.raiseObjectIsAlreadyInitialized("DateTimeFormat", "DateTimeFormat"); - } - - dateTimeFormat.__initializedIntlObject = true; - - // Extract the options - options = ToDateTimeOptions(options, "any", "date"); - - var matcher = GetOption(options, "localeMatcher", "string", ["lookup", "best fit"], "best fit"); - var timeZone = GetOption(options, "timeZone", "string", undefined, undefined); - - if (timeZone !== undefined) { - timeZone = platform.validateAndCanonicalizeTimeZone(timeZone); - } else { - timeZone = platform.getDefaultTimeZone(); - } - - if (timeZone === undefined) { - platform.raiseOptionValueOutOfRange(); - } - - // Format options - var weekday = GetOption(options, "weekday", "string", ['narrow', 'short', 'long'], undefined); - var era = GetOption(options, "era", "string", ['narrow', 'short', 'long'], undefined); - var year = GetOption(options, "year", "string", ['2-digit', 'numeric'], undefined); - var month = GetOption(options, "month", "string", ['2-digit', 'numeric', 'narrow', 'short', 'long'], undefined); - var day = GetOption(options, "day", "string", ['2-digit', 'numeric'], undefined); - var hour = GetOption(options, "hour", "string", ['2-digit', 'numeric'], undefined); - var minute = GetOption(options, "minute", "string", ['2-digit', 'numeric'], undefined); - var second = GetOption(options, "second", "string", ['2-digit', 'numeric'], undefined); - var timeZoneName = GetOption(options, "timeZoneName", "string", ['short', 'long'], undefined); - - var hour12 = hour ? GetOption(options, "hour12", "boolean", undefined, undefined) : undefined; - var formatMatcher = GetOption(options, "formatMatcher", "string", ["basic", "best fit"], "best fit"); - - var windowsClock = hour12 !== undefined ? (hour12 ? "12HourClock" : "24HourClock") : undefined; - - var templateString = EcmaOptionsToWindowsTemplate(setPrototype({ - weekday: weekday, - era: era, - year: year, - month: month, - day: day, - hour: hour, - minute: minute, - second: second, - timeZoneName: timeZoneName - }, null)); - - // Deal with the locale - localeList = CanonicalizeLocaleList(localeList); - var resolvedLocaleInfo = resolveLocales(localeList, matcher, ["nu", "ca"], strippedDefaultLocale); - - // Assign the options - dateTimeFormat.__matcher = matcher; - dateTimeFormat.__timeZone = timeZone; - dateTimeFormat.__locale = resolvedLocaleInfo.locale; - - // Format options - dateTimeFormat.__weekday = weekday; - dateTimeFormat.__era = era; - dateTimeFormat.__year = year; - dateTimeFormat.__month = month; - dateTimeFormat.__day = day; - dateTimeFormat.__hour = hour; - dateTimeFormat.__minute = minute; - dateTimeFormat.__second = second; - dateTimeFormat.__timeZoneName = timeZoneName; - - dateTimeFormat.__hour12 = hour12; - dateTimeFormat.__formatMatcher = formatMatcher; - dateTimeFormat.__windowsClock = windowsClock; - - dateTimeFormat.__templateString = templateString; - - /* - * NOTE: - * Pattern string's are position-sensitive; while templates are not. - * If we specify {hour.integer(2)}:{minute.integer(2)} pattern string; we will always format as HH:mm. - * On the other hand, template strings don't give as fine granularity for options; and the platform decides how long month.abbreviated should be. - * Therefore, we have to create using template strings; and then change the .abbreivated/.integer values to have correct digits count if necessary. - * Thus, this results in this redundant looking code to create dateTimeFormat twice. - */ - var errorThrown = false; - - try { - // Create the DateTimeFormatter to extract pattern strings - CreateDateTimeFormat(dateTimeFormat, false); - } catch (e) { - // Rethrow SOE or OOM - throwExIfOOMOrSOE(e); - - // We won't throw for the first exception, but assume the template strings were rejected. - // Instead, we will try to fall back to default template strings. - var defaultOptions = ToDateTimeOptions(options, "none", "all"); - dateTimeFormat.__templateString = EcmaOptionsToWindowsTemplate(defaultOptions, null); - errorThrown = true; - } - - if (!errorThrown) { - // Update the pattern strings - dateTimeFormat.__templateString = updatePatternStrings(dateTimeFormat.__patternStrings[0], dateTimeFormat); - } - - try { - // Cache the date time formatter - CreateDateTimeFormat(dateTimeFormat, true); - } catch (e) { - // Rethrow SOE or OOM - throwExIfOOMOrSOE(e); - - // Otherwise, Generic message to cover the exception throw from the platform. - // The platform's exception is also generic and in most if not all cases specifies that "a" argument is invalid. - // We have no other information from the platform on the cause of the exception. - platform.raiseOptionValueOutOfRange(); - } - - // Correct the api's updated - dateTimeFormat.__calendar = WindowsToEcmaCalendar(dateTimeFormat.__windowsCalendar); - - dateTimeFormat.__numberingSystem = callInstanceFunc(StringInstanceToLowerCase, dateTimeFormat.__numberingSystem); - if (dateTimeFormat.__hour !== undefined) { - dateTimeFormat.__hour12 = dateTimeFormat.__windowsClock === "12HourClock"; - } - dateTimeFormat.__initializedDateTimeFormat = true; - } - - // caches for objects constructed with default parameters for each method - let __DateInstanceToLocaleStringDefaultCache = [undefined, undefined, undefined]; - const __DateInstanceToLocaleStringDefaultCacheSlot = setPrototype({ - toLocaleString: 0, - toLocaleDateString: 1, - toLocaleTimeString: 2 - }, null); - - function DateInstanceToLocaleStringImplementation(name, option1, option2, cacheSlot, locales, options) { - if (typeof this !== 'object' || !(this instanceof Date)) { - platform.raiseNeedObjectOfType(name, "Date"); - } - let value = callInstanceFunc(DateInstanceGetDate, new Date(this)); - if (isNaN(value) || !isFinite(value)) { - return "Invalid Date"; - } - - let stateObject = undefined; - if (platform.useCaches && locales === undefined && options === undefined) { - // All default parameters (locales and options): this is the most valuable case to cache. - if (__DateInstanceToLocaleStringDefaultCache[cacheSlot]) { - // retrieve cached value - stateObject = __DateInstanceToLocaleStringDefaultCache[cacheSlot]; - } else { - // populate cache - stateObject = setPrototype({}, null); - InitializeDateTimeFormat(stateObject, undefined, ToDateTimeOptions(undefined, option1, option2)); - __DateInstanceToLocaleStringDefaultCache[cacheSlot] = stateObject; - } - } - - if (!stateObject) { - stateObject = setPrototype({}, null); - InitializeDateTimeFormat(stateObject, locales, ToDateTimeOptions(options, option1, option2)); - } - - return String(platform.formatDateTime(Internal.ToNumber(this), stateObject)); - } - - // Note: tagPublicFunction (platform.tagPublicLibraryCode) messes with declared name of the FunctionBody so that - // the functions called appear correctly in the debugger and stack traces. Thus, we we cannot call tagPublicFunction in a loop. - // Each entry point needs to have its own unique FunctionBody (which is a function as defined in the source code); - // this is why we have seemingly repeated ourselves below, instead of having one function and calling it multiple times with - // different parameters. - // - // The following invocations of `platform.registerBuiltInFunction(tagPublicFunction(name, entryPoint))` are enclosed in IIFEs. - // The IIFEs are used to group all of the meaningful differences between each entry point into the arguments to the IIFE. - // The exception to this are the different entryPoint names which are only significant for debugging (and cannot be passed in - // as arguments, as the name is intrinsic to the function declaration). - // - // The `date_toLocale*String_entryPoint` function names are placeholder names that will never be seen from user code. - // The function name property and FunctionBody declared name are overwritten by `tagPublicFunction`. - // The fact that they are declared with unique names is helpful for debugging. - // The functions *must not* be declared as anonymous functions (must be declared with a name); - // converting from an unnnamed function to a named function is not readily supported by the platform code and - // this has caused us to hit assertions in debug builds in the past. - // - // See invocations of `tagPublicFunction` on the `supportedLocalesOf` entry points for a similar pattern. - // - // The entryPoint functions will be called as `Date.prototype.toLocale*String` and thus their `this` parameters will be a Date. - // `DateInstanceToLocaleStringImplementation` is not on `Date.prototype`, so we must propagate `this` into the call by using - // `DateInstanceToLocaleStringImplementation.call(this, ...)`. - - (function (name, option1, option2, cacheSlot, platformFunctionID) { - platform.registerBuiltInFunction(tagPublicFunction(name, function date_toLocaleString_entryPoint(locales = undefined, options = undefined) { - return DateInstanceToLocaleStringImplementation.call(this, name, option1, option2, cacheSlot, locales, options); - }), platformFunctionID); - })("Date.prototype.toLocaleString", "any", "all", __DateInstanceToLocaleStringDefaultCacheSlot.toLocaleString, IntlBuiltInFunctionID.DateToLocaleString); - - (function (name, option1, option2, cacheSlot, platformFunctionID) { - platform.registerBuiltInFunction(tagPublicFunction(name, function date_toLocaleDateString_entryPoint(locales = undefined, options = undefined) { - return DateInstanceToLocaleStringImplementation.call(this, name, option1, option2, cacheSlot, locales, options); - }), platformFunctionID); - })("Date.prototype.toLocaleDateString", "date", "date", __DateInstanceToLocaleStringDefaultCacheSlot.toLocaleDateString, IntlBuiltInFunctionID.DateToLocaleDateString); - - (function (name, option1, option2, cacheSlot, platformFunctionID) { - platform.registerBuiltInFunction(tagPublicFunction(name, function date_toLocaleTimeString_entryPoint(locales = undefined, options = undefined) { - return DateInstanceToLocaleStringImplementation.call(this, name, option1, option2, cacheSlot, locales, options); - }), platformFunctionID); - })("Date.prototype.toLocaleTimeString", "time", "time", __DateInstanceToLocaleStringDefaultCacheSlot.toLocaleTimeString, IntlBuiltInFunctionID.DateToLocaleTimeString); - - if (InitType === 'Intl') { - function DateTimeFormat(locales = undefined, options = undefined) { - if (this === Intl || this === undefined) { - return new DateTimeFormat(locales, options); - } - - let obj = Internal.ToObject(this); - if (!ObjectIsExtensible(obj)) { - platform.raiseObjectIsNonExtensible("DateTimeFormat"); - } - - // Use the hidden object to store data - let hiddenObject = platform.getHiddenObject(obj); - - if (hiddenObject === undefined) { - hiddenObject = setPrototype({}, null); - platform.setHiddenObject(obj, hiddenObject); - } - - InitializeDateTimeFormat(hiddenObject, locales, options); - - hiddenObject.__boundFormat = callInstanceFunc(FunctionInstanceBind, format, obj); - delete hiddenObject.__boundFormat.name; - - return obj; - } - tagPublicFunction("Intl.DateTimeFormat", DateTimeFormat); - - function format(date) { - if (typeof this !== 'object') { - platform.raiseNeedObjectOfType("DateTimeFormat.prototype.format", "DateTimeFormat"); - } - let hiddenObject = platform.getHiddenObject(this); - if (hiddenObject === undefined || !hiddenObject.__initializedDateTimeFormat) { - platform.raiseNeedObjectOfType("DateTimeFormat.prototype.format", "DateTimeFormat"); - } - - if (date !== undefined && (isNaN(date) || !isFinite(date))) { - platform.raiseInvalidDate(); - } - - let dateValue = undefined; - if (date !== undefined) { - dateValue = Internal.ToNumber(date) - } else { - dateValue = DateNow(); - } - - return String(platform.formatDateTime(dateValue, hiddenObject)); - } - tagPublicFunction("Intl.DateTimeFormat.prototype.format", format); - - DateTimeFormat.__relevantExtensionKeys = ['ca', 'nu']; - - ObjectDefineProperty(DateTimeFormat, 'prototype', { value: new DateTimeFormat(), writable: false, enumerable: false, configurable: false }); - setPrototype(DateTimeFormat.prototype, Object.prototype); - ObjectDefineProperty(DateTimeFormat.prototype, 'constructor', { value: DateTimeFormat, writable: true, enumerable: false, configurable: true }); - - ObjectDefineProperty(DateTimeFormat.prototype, 'format', { - get: tagPublicFunction('get format', function () { - if (typeof this !== 'object') { - platform.raiseNeedObjectOfType("DateTimeFormat.prototype.format", "DateTimeFormat"); - } - - var hiddenObject = platform.getHiddenObject(this); - if (hiddenObject === undefined || !hiddenObject.__initializedDateTimeFormat) { - platform.raiseNeedObjectOfType("DateTimeFormat.prototype.format", "DateTimeFormat"); - } - - return hiddenObject.__boundFormat; - }), enumerable: false, configurable: true - }); - - ObjectDefineProperty(DateTimeFormat.prototype, 'resolvedOptions', { - value: function resolvedOptions() { - if (typeof this !== 'object') { - platform.raiseNeedObjectOfType("DateTimeFormat.prototype.resolvedOptions", "DateTimeFormat"); - } - var hiddenObject = platform.getHiddenObject(this); - if (hiddenObject === undefined || !hiddenObject.__initializedDateTimeFormat) { - platform.raiseNeedObjectOfType("DateTimeFormat.prototype.resolvedOptions", "DateTimeFormat"); - } - var temp = setPrototype({ - locale: hiddenObject.__locale, - calendar: hiddenObject.__calendar, // ca unicode extension - numberingSystem: hiddenObject.__numberingSystem, // nu unicode extension - timeZone: hiddenObject.__timeZone, - hour12: hiddenObject.__hour12, - weekday: hiddenObject.__weekday, - era: hiddenObject.__era, - year: hiddenObject.__year, - month: hiddenObject.__month, - day: hiddenObject.__day, - hour: hiddenObject.__hour, - minute: hiddenObject.__minute, - second: hiddenObject.__second, - timeZoneName: hiddenObject.__timeZoneName - }, null) - var options = setPrototype({}, null); - callInstanceFunc(ArrayInstanceForEach, ObjectGetOwnPropertyNames(temp), function (prop) { - if ((temp[prop] !== undefined || prop === 'timeZone') && callInstanceFunc(ObjectInstanceHasOwnProperty, hiddenObject, "__" + prop)) { - options[prop] = temp[prop]; - } - }, hiddenObject); - return setPrototype(options, Object.prototype); - }, writable: true, enumerable: false, configurable: true - }); - - ObjectDefineProperty(DateTimeFormat, 'supportedLocalesOf', { value: dateTimeFormat_supportedLocalesOf, writable: true, configurable: true }); - - return DateTimeFormat; - } - } - // 'Init.DateTimeFormat' not defined if reached here. Return 'undefined' - return undefined; - })(); - - // Initialize Intl properties only if needed - if (InitType === 'Intl') { - ObjectDefineProperty(Intl, "Collator", { value: Collator, writable: true, enumerable: false, configurable: true }); - ObjectDefineProperty(Intl, "NumberFormat", { value: NumberFormat, writable: true, enumerable: false, configurable: true }); - ObjectDefineProperty(Intl, "DateTimeFormat", { value: DateTimeFormat, writable: true, enumerable: false, configurable: true }); - ObjectDefineProperty(Intl, "getCanonicalLocales", { value: getCanonicalLocales, writable: true, enumerable: false, configurable: true }); - } - - } // END WINGLOB -}); - -#endif -namespace Js -{ - const char Library_Bytecode_Intl[] = { -/* 00000000 */ 0x43, 0x68, 0x42, 0x63, 0x86, 0xD8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 00000010 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0xFE, 0xCE, 0x02, 0x00, 0xFF, -/* 00000020 */ 0x2E, 0xC9, 0x02, 0x00, 0xFF, 0x2E, 0xC9, 0x02, 0x00, 0x39, 0x00, 0x00, 0x00, 0x24, 0x4B, 0x00, -/* 00000030 */ 0x00, 0x44, 0x87, 0x00, 0x00, 0x85, 0xD8, 0x01, 0x00, 0xFE, 0x45, 0x02, 0x9A, 0x0B, 0x00, 0x00, -/* 00000040 */ 0x00, 0xB2, 0x0B, 0x00, 0x00, 0x00, 0xC8, 0x0B, 0x00, 0x00, 0x01, 0xDC, 0x0B, 0x00, 0x00, 0x01, -/* 00000050 */ 0xF6, 0x0B, 0x00, 0x00, 0x01, 0x14, 0x0C, 0x00, 0x00, 0x01, 0x36, 0x0C, 0x00, 0x00, 0x01, 0x4E, -/* 00000060 */ 0x0C, 0x00, 0x00, 0x01, 0x78, 0x0C, 0x00, 0x00, 0x01, 0x9E, 0x0C, 0x00, 0x00, 0x01, 0xD2, 0x0C, -/* 00000070 */ 0x00, 0x00, 0x01, 0x0C, 0x0D, 0x00, 0x00, 0x01, 0x38, 0x0D, 0x00, 0x00, 0x01, 0x62, 0x0D, 0x00, -/* 00000080 */ 0x00, 0x01, 0x8C, 0x0D, 0x00, 0x00, 0x01, 0xB6, 0x0D, 0x00, 0x00, 0x01, 0xDA, 0x0D, 0x00, 0x00, -/* 00000090 */ 0x01, 0xFE, 0x0D, 0x00, 0x00, 0x01, 0x28, 0x0E, 0x00, 0x00, 0x01, 0x50, 0x0E, 0x00, 0x00, 0x01, -/* 000000A0 */ 0x60, 0x0E, 0x00, 0x00, 0x01, 0x8C, 0x0E, 0x00, 0x00, 0x01, 0xC0, 0x0E, 0x00, 0x00, 0x01, 0xF4, -/* 000000B0 */ 0x0E, 0x00, 0x00, 0x01, 0x18, 0x0F, 0x00, 0x00, 0x01, 0x3C, 0x0F, 0x00, 0x00, 0x01, 0x4E, 0x0F, -/* 000000C0 */ 0x00, 0x00, 0x01, 0x70, 0x0F, 0x00, 0x00, 0x01, 0x98, 0x0F, 0x00, 0x00, 0x01, 0xC0, 0x0F, 0x00, -/* 000000D0 */ 0x00, 0x01, 0xDE, 0x0F, 0x00, 0x00, 0x01, 0x0A, 0x10, 0x00, 0x00, 0x01, 0x3E, 0x10, 0x00, 0x00, -/* 000000E0 */ 0x01, 0x7A, 0x10, 0x00, 0x00, 0x01, 0xBA, 0x10, 0x00, 0x00, 0x01, 0x08, 0x11, 0x00, 0x00, 0x01, -/* 000000F0 */ 0x30, 0x11, 0x00, 0x00, 0x01, 0x42, 0x11, 0x00, 0x00, 0x01, 0x68, 0x11, 0x00, 0x00, 0x01, 0x7C, -/* 00000100 */ 0x11, 0x00, 0x00, 0x01, 0x86, 0x11, 0x00, 0x00, 0x01, 0xB2, 0x11, 0x00, 0x00, 0x01, 0xB6, 0x11, -/* 00000110 */ 0x00, 0x00, 0x01, 0xC2, 0x11, 0x00, 0x00, 0x01, 0xEA, 0x11, 0x00, 0x00, 0x01, 0x0E, 0x12, 0x00, -/* 00000120 */ 0x00, 0x01, 0x32, 0x12, 0x00, 0x00, 0x01, 0x6A, 0x12, 0x00, 0x00, 0x01, 0x78, 0x12, 0x00, 0x00, -/* 00000130 */ 0x00, 0x80, 0x12, 0x00, 0x00, 0x00, 0x8C, 0x12, 0x00, 0x00, 0x00, 0x94, 0x12, 0x00, 0x00, 0x00, -/* 00000140 */ 0x9C, 0x12, 0x00, 0x00, 0x01, 0xA4, 0x12, 0x00, 0x00, 0x01, 0xCA, 0x12, 0x00, 0x00, 0x01, 0xF8, -/* 00000150 */ 0x12, 0x00, 0x00, 0x01, 0x26, 0x13, 0x00, 0x00, 0x01, 0x50, 0x13, 0x00, 0x00, 0x01, 0x78, 0x13, -/* 00000160 */ 0x00, 0x00, 0x01, 0x80, 0x13, 0x00, 0x00, 0x00, 0x98, 0x13, 0x00, 0x00, 0x00, 0xB0, 0x13, 0x00, -/* 00000170 */ 0x00, 0x00, 0xC0, 0x13, 0x00, 0x00, 0x00, 0xCC, 0x13, 0x00, 0x00, 0x00, 0xE0, 0x13, 0x00, 0x00, -/* 00000180 */ 0x01, 0xFC, 0x13, 0x00, 0x00, 0x00, 0x08, 0x14, 0x00, 0x00, 0x00, 0x16, 0x14, 0x00, 0x00, 0x00, -/* 00000190 */ 0x26, 0x14, 0x00, 0x00, 0x00, 0x30, 0x14, 0x00, 0x00, 0x00, 0x3A, 0x14, 0x00, 0x00, 0x01, 0x54, -/* 000001A0 */ 0x14, 0x00, 0x00, 0x00, 0x5C, 0x14, 0x00, 0x00, 0x00, 0x6A, 0x14, 0x00, 0x00, 0x00, 0x76, 0x14, -/* 000001B0 */ 0x00, 0x00, 0x00, 0x84, 0x14, 0x00, 0x00, 0x00, 0x92, 0x14, 0x00, 0x00, 0x01, 0xA0, 0x14, 0x00, -/* 000001C0 */ 0x00, 0x00, 0xAA, 0x14, 0x00, 0x00, 0x00, 0xC8, 0x14, 0x00, 0x00, 0x00, 0xE6, 0x14, 0x00, 0x00, -/* 000001D0 */ 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x0E, 0x15, 0x00, 0x00, 0x00, 0x2C, 0x15, 0x00, 0x00, 0x00, -/* 000001E0 */ 0x3E, 0x15, 0x00, 0x00, 0x00, 0x4A, 0x15, 0x00, 0x00, 0x00, 0x5A, 0x15, 0x00, 0x00, 0x00, 0x64, -/* 000001F0 */ 0x15, 0x00, 0x00, 0x00, 0x70, 0x15, 0x00, 0x00, 0x01, 0x86, 0x15, 0x00, 0x00, 0x01, 0x94, 0x15, -/* 00000200 */ 0x00, 0x00, 0x01, 0x9E, 0x15, 0x00, 0x00, 0x01, 0xAC, 0x15, 0x00, 0x00, 0x01, 0xB6, 0x15, 0x00, -/* 00000210 */ 0x00, 0x01, 0xC6, 0x15, 0x00, 0x00, 0x01, 0xD6, 0x15, 0x00, 0x00, 0x01, 0xE2, 0x15, 0x00, 0x00, -/* 00000220 */ 0x01, 0xEE, 0x15, 0x00, 0x00, 0x00, 0xFA, 0x15, 0x00, 0x00, 0x01, 0x0A, 0x16, 0x00, 0x00, 0x01, -/* 00000230 */ 0x1A, 0x16, 0x00, 0x00, 0x01, 0x2C, 0x16, 0x00, 0x00, 0x01, 0x3A, 0x16, 0x00, 0x00, 0x01, 0x44, -/* 00000240 */ 0x16, 0x00, 0x00, 0x01, 0x4E, 0x16, 0x00, 0x00, 0x01, 0x60, 0x16, 0x00, 0x00, 0x01, 0x72, 0x16, -/* 00000250 */ 0x00, 0x00, 0x01, 0x84, 0x16, 0x00, 0x00, 0x01, 0xA6, 0x16, 0x00, 0x00, 0x01, 0xB8, 0x16, 0x00, -/* 00000260 */ 0x00, 0x00, 0xC8, 0x16, 0x00, 0x00, 0x00, 0xD4, 0x16, 0x00, 0x00, 0x00, 0xDE, 0x16, 0x00, 0x00, -/* 00000270 */ 0x00, 0x10, 0x17, 0x00, 0x00, 0x00, 0x1A, 0x17, 0x00, 0x00, 0x00, 0x26, 0x17, 0x00, 0x00, 0x00, -/* 00000280 */ 0x4E, 0x17, 0x00, 0x00, 0x00, 0x60, 0x17, 0x00, 0x00, 0x00, 0x76, 0x17, 0x00, 0x00, 0x00, 0x90, -/* 00000290 */ 0x17, 0x00, 0x00, 0x00, 0xA2, 0x17, 0x00, 0x00, 0x00, 0xBC, 0x17, 0x00, 0x00, 0x00, 0xDA, 0x17, -/* 000002A0 */ 0x00, 0x00, 0x00, 0xF2, 0x17, 0x00, 0x00, 0x00, 0x34, 0x18, 0x00, 0x00, 0x00, 0x7E, 0x18, 0x00, -/* 000002B0 */ 0x00, 0x00, 0xCC, 0x18, 0x00, 0x00, 0x00, 0xF2, 0x18, 0x00, 0x00, 0x01, 0xFE, 0x18, 0x00, 0x00, -/* 000002C0 */ 0x01, 0x08, 0x19, 0x00, 0x00, 0x00, 0x16, 0x19, 0x00, 0x00, 0x01, 0x22, 0x19, 0x00, 0x00, 0x01, -/* 000002D0 */ 0x2E, 0x19, 0x00, 0x00, 0x01, 0x3E, 0x19, 0x00, 0x00, 0x00, 0x4C, 0x19, 0x00, 0x00, 0x01, 0x58, -/* 000002E0 */ 0x19, 0x00, 0x00, 0x01, 0x66, 0x19, 0x00, 0x00, 0x00, 0x74, 0x19, 0x00, 0x00, 0x01, 0x80, 0x19, -/* 000002F0 */ 0x00, 0x00, 0x01, 0x92, 0x19, 0x00, 0x00, 0x00, 0xA0, 0x19, 0x00, 0x00, 0x01, 0xAE, 0x19, 0x00, -/* 00000300 */ 0x00, 0x00, 0xB0, 0x19, 0x00, 0x00, 0x01, 0xBC, 0x19, 0x00, 0x00, 0x01, 0xC8, 0x19, 0x00, 0x00, -/* 00000310 */ 0x01, 0xD4, 0x19, 0x00, 0x00, 0x01, 0xE2, 0x19, 0x00, 0x00, 0x01, 0xEE, 0x19, 0x00, 0x00, 0x01, -/* 00000320 */ 0x02, 0x1A, 0x00, 0x00, 0x01, 0x26, 0x1A, 0x00, 0x00, 0x01, 0x4C, 0x1A, 0x00, 0x00, 0x01, 0x60, -/* 00000330 */ 0x1A, 0x00, 0x00, 0x01, 0x92, 0x1A, 0x00, 0x00, 0x01, 0xB2, 0x1A, 0x00, 0x00, 0x01, 0xD4, 0x1A, -/* 00000340 */ 0x00, 0x00, 0x01, 0xFC, 0x1A, 0x00, 0x00, 0x01, 0x1E, 0x1B, 0x00, 0x00, 0x01, 0x3A, 0x1B, 0x00, -/* 00000350 */ 0x00, 0x01, 0x58, 0x1B, 0x00, 0x00, 0x01, 0x84, 0x1B, 0x00, 0x00, 0x01, 0xA0, 0x1B, 0x00, 0x00, -/* 00000360 */ 0x01, 0xC0, 0x1B, 0x00, 0x00, 0x01, 0xE2, 0x1B, 0x00, 0x00, 0x01, 0xFC, 0x1B, 0x00, 0x00, 0x01, -/* 00000370 */ 0x2E, 0x1C, 0x00, 0x00, 0x01, 0x6C, 0x1C, 0x00, 0x00, 0x01, 0x9A, 0x1C, 0x00, 0x00, 0x01, 0xC8, -/* 00000380 */ 0x1C, 0x00, 0x00, 0x01, 0xF8, 0x1C, 0x00, 0x00, 0x01, 0x30, 0x1D, 0x00, 0x00, 0x01, 0x52, 0x1D, -/* 00000390 */ 0x00, 0x00, 0x01, 0x82, 0x1D, 0x00, 0x00, 0x01, 0xC8, 0x1D, 0x00, 0x00, 0x01, 0x10, 0x1E, 0x00, -/* 000003A0 */ 0x00, 0x01, 0x3C, 0x1E, 0x00, 0x00, 0x01, 0x6E, 0x1E, 0x00, 0x00, 0x01, 0x98, 0x1E, 0x00, 0x00, -/* 000003B0 */ 0x01, 0xC2, 0x1E, 0x00, 0x00, 0x01, 0xF2, 0x1E, 0x00, 0x00, 0x01, 0x22, 0x1F, 0x00, 0x00, 0x01, -/* 000003C0 */ 0x44, 0x1F, 0x00, 0x00, 0x01, 0x64, 0x1F, 0x00, 0x00, 0x01, 0x7C, 0x1F, 0x00, 0x00, 0x01, 0xBE, -/* 000003D0 */ 0x1F, 0x00, 0x00, 0x01, 0xF6, 0x1F, 0x00, 0x00, 0x01, 0x40, 0x20, 0x00, 0x00, 0x01, 0x80, 0x20, -/* 000003E0 */ 0x00, 0x00, 0x01, 0xCE, 0x20, 0x00, 0x00, 0x01, 0x12, 0x21, 0x00, 0x00, 0x01, 0x3E, 0x21, 0x00, -/* 000003F0 */ 0x00, 0x01, 0x42, 0x21, 0x00, 0x00, 0x01, 0x50, 0x21, 0x00, 0x00, 0x00, 0x58, 0x21, 0x00, 0x00, -/* 00000400 */ 0x00, 0x60, 0x21, 0x00, 0x00, 0x00, 0x7C, 0x21, 0x00, 0x00, 0x00, 0x98, 0x21, 0x00, 0x00, 0x00, -/* 00000410 */ 0xAC, 0x21, 0x00, 0x00, 0x00, 0xBC, 0x21, 0x00, 0x00, 0x00, 0xD4, 0x21, 0x00, 0x00, 0x00, 0xF4, -/* 00000420 */ 0x21, 0x00, 0x00, 0x00, 0x04, 0x22, 0x00, 0x00, 0x00, 0x16, 0x22, 0x00, 0x00, 0x00, 0x2A, 0x22, -/* 00000430 */ 0x00, 0x00, 0x00, 0x38, 0x22, 0x00, 0x00, 0x00, 0x46, 0x22, 0x00, 0x00, 0x00, 0x64, 0x22, 0x00, -/* 00000440 */ 0x00, 0x00, 0x70, 0x22, 0x00, 0x00, 0x00, 0x82, 0x22, 0x00, 0x00, 0x00, 0x92, 0x22, 0x00, 0x00, -/* 00000450 */ 0x00, 0xA4, 0x22, 0x00, 0x00, 0x00, 0xB6, 0x22, 0x00, 0x00, 0x00, 0xC8, 0x22, 0x00, 0x00, 0x01, -/* 00000460 */ 0xD4, 0x22, 0x00, 0x00, 0x00, 0xF6, 0x22, 0x00, 0x00, 0x00, 0x18, 0x23, 0x00, 0x00, 0x00, 0x2A, -/* 00000470 */ 0x23, 0x00, 0x00, 0x00, 0x4C, 0x23, 0x00, 0x00, 0x00, 0x5C, 0x23, 0x00, 0x00, 0x00, 0x70, 0x23, -/* 00000480 */ 0x00, 0x00, 0x00, 0x7E, 0x23, 0x00, 0x00, 0x00, 0x8E, 0x23, 0x00, 0x00, 0x00, 0xB0, 0x23, 0x00, -/* 00000490 */ 0x00, 0x00, 0xCA, 0x23, 0x00, 0x00, 0x00, 0xE6, 0x23, 0x00, 0x00, 0x00, 0xF4, 0x23, 0x00, 0x00, -/* 000004A0 */ 0x00, 0xFA, 0x23, 0x00, 0x00, 0x00, 0xFE, 0x23, 0x00, 0x00, 0x01, 0x04, 0x24, 0x00, 0x00, 0x01, -/* 000004B0 */ 0x0A, 0x24, 0x00, 0x00, 0x01, 0x10, 0x24, 0x00, 0x00, 0x01, 0x16, 0x24, 0x00, 0x00, 0x01, 0x1C, -/* 000004C0 */ 0x24, 0x00, 0x00, 0x01, 0x22, 0x24, 0x00, 0x00, 0x01, 0x44, 0x24, 0x00, 0x00, 0x01, 0x58, 0x24, -/* 000004D0 */ 0x00, 0x00, 0x01, 0x5C, 0x24, 0x00, 0x00, 0x01, 0x74, 0x24, 0x00, 0x00, 0x01, 0x82, 0x24, 0x00, -/* 000004E0 */ 0x00, 0x01, 0xA8, 0x24, 0x00, 0x00, 0x00, 0xB6, 0x24, 0x00, 0x00, 0x01, 0xCC, 0x24, 0x00, 0x00, -/* 000004F0 */ 0x00, 0xD2, 0x24, 0x00, 0x00, 0x00, 0xDA, 0x24, 0x00, 0x00, 0x01, 0xF6, 0x24, 0x00, 0x00, 0x00, -/* 00000500 */ 0x00, 0x25, 0x00, 0x00, 0x00, 0x10, 0x25, 0x00, 0x00, 0x00, 0x1E, 0x25, 0x00, 0x00, 0x00, 0x24, -/* 00000510 */ 0x25, 0x00, 0x00, 0x00, 0x2A, 0x25, 0x00, 0x00, 0x00, 0x34, 0x25, 0x00, 0x00, 0x00, 0x38, 0x25, -/* 00000520 */ 0x00, 0x00, 0x00, 0x40, 0x25, 0x00, 0x00, 0x00, 0x44, 0x25, 0x00, 0x00, 0x00, 0x5A, 0x25, 0x00, -/* 00000530 */ 0x00, 0x01, 0x80, 0x25, 0x00, 0x00, 0x00, 0x8C, 0x25, 0x00, 0x00, 0x00, 0x98, 0x25, 0x00, 0x00, -/* 00000540 */ 0x00, 0xA0, 0x25, 0x00, 0x00, 0x00, 0xA4, 0x25, 0x00, 0x00, 0x00, 0xA8, 0x25, 0x00, 0x00, 0x00, -/* 00000550 */ 0x5C, 0x26, 0x00, 0x00, 0x00, 0xF8, 0x26, 0x00, 0x00, 0x00, 0x7E, 0x27, 0x00, 0x00, 0x00, 0x8A, -/* 00000560 */ 0x27, 0x00, 0x00, 0x00, 0x92, 0x27, 0x00, 0x00, 0x00, 0xA8, 0x27, 0x00, 0x00, 0x00, 0xC2, 0x27, -/* 00000570 */ 0x00, 0x00, 0x00, 0xDC, 0x27, 0x00, 0x00, 0x00, 0xE6, 0x27, 0x00, 0x00, 0x00, 0xFC, 0x27, 0x00, -/* 00000580 */ 0x00, 0x00, 0x0A, 0x28, 0x00, 0x00, 0x00, 0x18, 0x28, 0x00, 0x00, 0x00, 0x22, 0x28, 0x00, 0x00, -/* 00000590 */ 0x00, 0x30, 0x28, 0x00, 0x00, 0x00, 0x44, 0x28, 0x00, 0x00, 0x00, 0x5E, 0x28, 0x00, 0x00, 0x00, -/* 000005A0 */ 0x6A, 0x28, 0x00, 0x00, 0x00, 0x78, 0x28, 0x00, 0x00, 0x00, 0x7E, 0x28, 0x00, 0x00, 0x00, 0x8A, -/* 000005B0 */ 0x28, 0x00, 0x00, 0x00, 0x92, 0x28, 0x00, 0x00, 0x00, 0xA2, 0x28, 0x00, 0x00, 0x00, 0xAE, 0x28, -/* 000005C0 */ 0x00, 0x00, 0x00, 0xBE, 0x28, 0x00, 0x00, 0x00, 0xCA, 0x28, 0x00, 0x00, 0x00, 0xD4, 0x28, 0x00, -/* 000005D0 */ 0x00, 0x00, 0xDA, 0x28, 0x00, 0x00, 0x00, 0xDE, 0x28, 0x00, 0x00, 0x00, 0xE2, 0x28, 0x00, 0x00, -/* 000005E0 */ 0x00, 0xE6, 0x28, 0x00, 0x00, 0x01, 0xEA, 0x28, 0x00, 0x00, 0x01, 0xFC, 0x28, 0x00, 0x00, 0x01, -/* 000005F0 */ 0x0A, 0x29, 0x00, 0x00, 0x01, 0x18, 0x29, 0x00, 0x00, 0x01, 0x2A, 0x29, 0x00, 0x00, 0x01, 0x40, -/* 00000600 */ 0x29, 0x00, 0x00, 0x00, 0x54, 0x29, 0x00, 0x00, 0x00, 0x62, 0x29, 0x00, 0x00, 0x00, 0x70, 0x29, -/* 00000610 */ 0x00, 0x00, 0x01, 0x94, 0x29, 0x00, 0x00, 0x01, 0xA2, 0x29, 0x00, 0x00, 0x00, 0xCC, 0x29, 0x00, -/* 00000620 */ 0x00, 0x00, 0xF8, 0x29, 0x00, 0x00, 0x00, 0x24, 0x2A, 0x00, 0x00, 0x00, 0x56, 0x2A, 0x00, 0x00, -/* 00000630 */ 0x00, 0x88, 0x2A, 0x00, 0x00, 0x00, 0x9A, 0x2A, 0x00, 0x00, 0x00, 0xB6, 0x2A, 0x00, 0x00, 0x00, -/* 00000640 */ 0xC4, 0x2A, 0x00, 0x00, 0x01, 0xDE, 0x2A, 0x00, 0x00, 0x01, 0xE8, 0x2A, 0x00, 0x00, 0x01, 0xFA, -/* 00000650 */ 0x2A, 0x00, 0x00, 0x01, 0x20, 0x2B, 0x00, 0x00, 0x01, 0x50, 0x2B, 0x00, 0x00, 0x00, 0x5E, 0x2B, -/* 00000660 */ 0x00, 0x00, 0x00, 0x9C, 0x2B, 0x00, 0x00, 0x00, 0xB8, 0x2B, 0x00, 0x00, 0x00, 0xF8, 0x2B, 0x00, -/* 00000670 */ 0x00, 0x00, 0x0C, 0x2C, 0x00, 0x00, 0x00, 0x24, 0x2C, 0x00, 0x00, 0x00, 0x44, 0x2C, 0x00, 0x00, -/* 00000680 */ 0x00, 0x5C, 0x2C, 0x00, 0x00, 0x00, 0x6C, 0x2C, 0x00, 0x00, 0x01, 0x78, 0x2C, 0x00, 0x00, 0x00, -/* 00000690 */ 0x82, 0x2C, 0x00, 0x00, 0x00, 0x90, 0x2C, 0x00, 0x00, 0x00, 0xA0, 0x2C, 0x00, 0x00, 0x01, 0xB4, -/* 000006A0 */ 0x2C, 0x00, 0x00, 0x00, 0xC4, 0x2C, 0x00, 0x00, 0x00, 0xDC, 0x2C, 0x00, 0x00, 0x00, 0x00, 0x2D, -/* 000006B0 */ 0x00, 0x00, 0x01, 0x10, 0x2D, 0x00, 0x00, 0x01, 0x24, 0x2D, 0x00, 0x00, 0x01, 0x4C, 0x2D, 0x00, -/* 000006C0 */ 0x00, 0x01, 0x66, 0x2D, 0x00, 0x00, 0x00, 0x9C, 0x2D, 0x00, 0x00, 0x00, 0xE2, 0x2D, 0x00, 0x00, -/* 000006D0 */ 0x00, 0xF8, 0x2D, 0x00, 0x00, 0x01, 0x26, 0x2E, 0x00, 0x00, 0x00, 0x34, 0x2E, 0x00, 0x00, 0x00, -/* 000006E0 */ 0x74, 0x2E, 0x00, 0x00, 0x00, 0x98, 0x2E, 0x00, 0x00, 0x00, 0xDE, 0x2E, 0x00, 0x00, 0x00, 0x32, -/* 000006F0 */ 0x2F, 0x00, 0x00, 0x00, 0x48, 0x2F, 0x00, 0x00, 0x00, 0x56, 0x2F, 0x00, 0x00, 0x00, 0x72, 0x2F, -/* 00000700 */ 0x00, 0x00, 0x01, 0x7E, 0x2F, 0x00, 0x00, 0x00, 0x8E, 0x2F, 0x00, 0x00, 0x00, 0x9E, 0x2F, 0x00, -/* 00000710 */ 0x00, 0x00, 0xB0, 0x2F, 0x00, 0x00, 0x00, 0xD0, 0x2F, 0x00, 0x00, 0x00, 0xDA, 0x2F, 0x00, 0x00, -/* 00000720 */ 0x00, 0xE8, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x01, 0x30, 0x30, 0x00, 0x00, 0x01, -/* 00000730 */ 0x48, 0x30, 0x00, 0x00, 0x00, 0x84, 0x30, 0x00, 0x00, 0x00, 0xCE, 0x30, 0x00, 0x00, 0x00, 0x1C, -/* 00000740 */ 0x31, 0x00, 0x00, 0x00, 0x3C, 0x31, 0x00, 0x00, 0x00, 0x50, 0x31, 0x00, 0x00, 0x01, 0xA2, 0x31, -/* 00000750 */ 0x00, 0x00, 0x01, 0xC8, 0x31, 0x00, 0x00, 0x01, 0xF2, 0x31, 0x00, 0x00, 0x01, 0x24, 0x32, 0x00, -/* 00000760 */ 0x00, 0x01, 0x48, 0x32, 0x00, 0x00, 0x01, 0x66, 0x32, 0x00, 0x00, 0x01, 0x92, 0x32, 0x00, 0x00, -/* 00000770 */ 0x01, 0xE4, 0x32, 0x00, 0x00, 0x01, 0xFE, 0x32, 0x00, 0x00, 0x01, 0x18, 0x33, 0x00, 0x00, 0x00, -/* 00000780 */ 0x22, 0x33, 0x00, 0x00, 0x01, 0x30, 0x33, 0x00, 0x00, 0x01, 0x3C, 0x33, 0x00, 0x00, 0x01, 0x46, -/* 00000790 */ 0x33, 0x00, 0x00, 0x01, 0x56, 0x33, 0x00, 0x00, 0x00, 0x66, 0x33, 0x00, 0x00, 0x00, 0x6E, 0x33, -/* 000007A0 */ 0x00, 0x00, 0x00, 0x78, 0x33, 0x00, 0x00, 0x00, 0x84, 0x33, 0x00, 0x00, 0x00, 0x8C, 0x33, 0x00, -/* 000007B0 */ 0x00, 0x00, 0x96, 0x33, 0x00, 0x00, 0x00, 0xA4, 0x33, 0x00, 0x00, 0x00, 0xB2, 0x33, 0x00, 0x00, -/* 000007C0 */ 0x00, 0xCC, 0x33, 0x00, 0x00, 0x00, 0xEA, 0x33, 0x00, 0x00, 0x00, 0x10, 0x34, 0x00, 0x00, 0x00, -/* 000007D0 */ 0x36, 0x34, 0x00, 0x00, 0x00, 0x72, 0x34, 0x00, 0x00, 0x00, 0x7A, 0x34, 0x00, 0x00, 0x00, 0x82, -/* 000007E0 */ 0x34, 0x00, 0x00, 0x00, 0xC6, 0x34, 0x00, 0x00, 0x00, 0xD0, 0x34, 0x00, 0x00, 0x00, 0x14, 0x35, -/* 000007F0 */ 0x00, 0x00, 0x00, 0x1E, 0x35, 0x00, 0x00, 0x00, 0x46, 0x35, 0x00, 0x00, 0x00, 0x90, 0x35, 0x00, -/* 00000800 */ 0x00, 0x00, 0xE8, 0x35, 0x00, 0x00, 0x01, 0x08, 0x36, 0x00, 0x00, 0x01, 0x28, 0x36, 0x00, 0x00, -/* 00000810 */ 0x01, 0x54, 0x36, 0x00, 0x00, 0x01, 0x80, 0x36, 0x00, 0x00, 0x01, 0xA8, 0x36, 0x00, 0x00, 0x01, -/* 00000820 */ 0xD0, 0x36, 0x00, 0x00, 0x00, 0xD4, 0x36, 0x00, 0x00, 0x01, 0xD8, 0x36, 0x00, 0x00, 0x01, 0xDC, -/* 00000830 */ 0x36, 0x00, 0x00, 0x01, 0xE0, 0x36, 0x00, 0x00, 0x01, 0xE4, 0x36, 0x00, 0x00, 0x00, 0xE8, 0x36, -/* 00000840 */ 0x00, 0x00, 0x00, 0xF6, 0x36, 0x00, 0x00, 0x01, 0xFA, 0x36, 0x00, 0x00, 0x01, 0x08, 0x37, 0x00, -/* 00000850 */ 0x00, 0x01, 0x0C, 0x37, 0x00, 0x00, 0x01, 0x10, 0x37, 0x00, 0x00, 0x01, 0x14, 0x37, 0x00, 0x00, -/* 00000860 */ 0x01, 0x18, 0x37, 0x00, 0x00, 0x01, 0x1C, 0x37, 0x00, 0x00, 0x01, 0x20, 0x37, 0x00, 0x00, 0x01, -/* 00000870 */ 0x24, 0x37, 0x00, 0x00, 0x01, 0x28, 0x37, 0x00, 0x00, 0x01, 0x2C, 0x37, 0x00, 0x00, 0x01, 0x30, -/* 00000880 */ 0x37, 0x00, 0x00, 0x01, 0x34, 0x37, 0x00, 0x00, 0x01, 0x38, 0x37, 0x00, 0x00, 0x01, 0x3C, 0x37, -/* 00000890 */ 0x00, 0x00, 0x01, 0x40, 0x37, 0x00, 0x00, 0x01, 0x44, 0x37, 0x00, 0x00, 0x01, 0x48, 0x37, 0x00, -/* 000008A0 */ 0x00, 0x01, 0x4C, 0x37, 0x00, 0x00, 0x01, 0x50, 0x37, 0x00, 0x00, 0x01, 0x54, 0x37, 0x00, 0x00, -/* 000008B0 */ 0x01, 0x58, 0x37, 0x00, 0x00, 0x01, 0x5C, 0x37, 0x00, 0x00, 0x01, 0x64, 0x37, 0x00, 0x00, 0x01, -/* 000008C0 */ 0x6C, 0x37, 0x00, 0x00, 0x01, 0x74, 0x37, 0x00, 0x00, 0x01, 0x7C, 0x37, 0x00, 0x00, 0x00, 0x80, -/* 000008D0 */ 0x37, 0x00, 0x00, 0x00, 0x84, 0x37, 0x00, 0x00, 0x01, 0x98, 0x37, 0x00, 0x00, 0x00, 0xB0, 0x37, -/* 000008E0 */ 0x00, 0x00, 0x00, 0xC2, 0x37, 0x00, 0x00, 0x00, 0x10, 0x38, 0x00, 0x00, 0x00, 0x20, 0x38, 0x00, -/* 000008F0 */ 0x00, 0x00, 0x30, 0x38, 0x00, 0x00, 0x00, 0x38, 0x38, 0x00, 0x00, 0x00, 0x54, 0x38, 0x00, 0x00, -/* 00000900 */ 0x00, 0x60, 0x38, 0x00, 0x00, 0x01, 0x94, 0x38, 0x00, 0x00, 0x01, 0xAE, 0x38, 0x00, 0x00, 0x00, -/* 00000910 */ 0xC8, 0x38, 0x00, 0x00, 0x01, 0xD8, 0x38, 0x00, 0x00, 0x01, 0xE8, 0x38, 0x00, 0x00, 0x01, 0xFC, -/* 00000920 */ 0x38, 0x00, 0x00, 0x00, 0x3A, 0x39, 0x00, 0x00, 0x00, 0x80, 0x39, 0x00, 0x00, 0x00, 0xC6, 0x39, -/* 00000930 */ 0x00, 0x00, 0x00, 0x04, 0x3A, 0x00, 0x00, 0x00, 0x16, 0x3A, 0x00, 0x00, 0x01, 0x42, 0x3A, 0x00, -/* 00000940 */ 0x00, 0x01, 0x5E, 0x3A, 0x00, 0x00, 0x01, 0xA6, 0x3A, 0x00, 0x00, 0x00, 0xC8, 0x3A, 0x00, 0x00, -/* 00000950 */ 0x00, 0x10, 0x3B, 0x00, 0x00, 0x00, 0x54, 0x3B, 0x00, 0x00, 0x00, 0x62, 0x3B, 0x00, 0x00, 0x00, -/* 00000960 */ 0xB8, 0x3B, 0x00, 0x00, 0x00, 0xC2, 0x3B, 0x00, 0x00, 0x00, 0xD4, 0x3B, 0x00, 0x00, 0x00, 0xE4, -/* 00000970 */ 0x3B, 0x00, 0x00, 0x01, 0x06, 0x3C, 0x00, 0x00, 0x01, 0x34, 0x3C, 0x00, 0x00, 0x00, 0x40, 0x3C, -/* 00000980 */ 0x00, 0x00, 0x01, 0x46, 0x3C, 0x00, 0x00, 0x00, 0xA0, 0x3C, 0x00, 0x00, 0x00, 0xCA, 0x3C, 0x00, -/* 00000990 */ 0x00, 0x00, 0xF2, 0x3C, 0x00, 0x00, 0x01, 0x04, 0x3D, 0x00, 0x00, 0x01, 0x24, 0x3D, 0x00, 0x00, -/* 000009A0 */ 0x00, 0x2C, 0x3D, 0x00, 0x00, 0x00, 0x3C, 0x3D, 0x00, 0x00, 0x00, 0x66, 0x3D, 0x00, 0x00, 0x00, -/* 000009B0 */ 0x82, 0x3D, 0x00, 0x00, 0x00, 0xA0, 0x3D, 0x00, 0x00, 0x00, 0xB4, 0x3D, 0x00, 0x00, 0x01, 0xCC, -/* 000009C0 */ 0x3D, 0x00, 0x00, 0x00, 0xD6, 0x3D, 0x00, 0x00, 0x01, 0xE0, 0x3D, 0x00, 0x00, 0x00, 0xEE, 0x3D, -/* 000009D0 */ 0x00, 0x00, 0x01, 0xFA, 0x3D, 0x00, 0x00, 0x01, 0x08, 0x3E, 0x00, 0x00, 0x01, 0x24, 0x3E, 0x00, -/* 000009E0 */ 0x00, 0x00, 0x52, 0x3E, 0x00, 0x00, 0x00, 0x9E, 0x3E, 0x00, 0x00, 0x00, 0xF2, 0x3E, 0x00, 0x00, -/* 000009F0 */ 0x00, 0x4A, 0x3F, 0x00, 0x00, 0x00, 0x86, 0x3F, 0x00, 0x00, 0x01, 0x98, 0x3F, 0x00, 0x00, 0x01, -/* 00000A00 */ 0xCA, 0x3F, 0x00, 0x00, 0x01, 0xFA, 0x3F, 0x00, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x00, 0x56, -/* 00000A10 */ 0x40, 0x00, 0x00, 0x00, 0x74, 0x40, 0x00, 0x00, 0x00, 0xAC, 0x40, 0x00, 0x00, 0x00, 0xBA, 0x40, -/* 00000A20 */ 0x00, 0x00, 0x00, 0xEA, 0x40, 0x00, 0x00, 0x00, 0xEE, 0x40, 0x00, 0x00, 0x00, 0xF2, 0x40, 0x00, -/* 00000A30 */ 0x00, 0x01, 0x18, 0x41, 0x00, 0x00, 0x01, 0x28, 0x41, 0x00, 0x00, 0x01, 0x44, 0x41, 0x00, 0x00, -/* 00000A40 */ 0x01, 0x6C, 0x41, 0x00, 0x00, 0x01, 0x84, 0x41, 0x00, 0x00, 0x01, 0x98, 0x41, 0x00, 0x00, 0x00, -/* 00000A50 */ 0xAA, 0x41, 0x00, 0x00, 0x00, 0xB4, 0x41, 0x00, 0x00, 0x01, 0xD4, 0x41, 0x00, 0x00, 0x00, 0xDA, -/* 00000A60 */ 0x41, 0x00, 0x00, 0x01, 0x0C, 0x42, 0x00, 0x00, 0x01, 0x30, 0x42, 0x00, 0x00, 0x00, 0x40, 0x42, -/* 00000A70 */ 0x00, 0x00, 0x01, 0x5E, 0x42, 0x00, 0x00, 0x00, 0x6C, 0x42, 0x00, 0x00, 0x01, 0x88, 0x42, 0x00, -/* 00000A80 */ 0x00, 0x00, 0x98, 0x42, 0x00, 0x00, 0x01, 0xBA, 0x42, 0x00, 0x00, 0x00, 0xCC, 0x42, 0x00, 0x00, -/* 00000A90 */ 0x01, 0xEA, 0x42, 0x00, 0x00, 0x00, 0xF8, 0x42, 0x00, 0x00, 0x01, 0x16, 0x43, 0x00, 0x00, 0x00, -/* 00000AA0 */ 0x24, 0x43, 0x00, 0x00, 0x01, 0x46, 0x43, 0x00, 0x00, 0x00, 0x62, 0x43, 0x00, 0x00, 0x01, 0x7C, -/* 00000AB0 */ 0x43, 0x00, 0x00, 0x00, 0x86, 0x43, 0x00, 0x00, 0x01, 0xA4, 0x43, 0x00, 0x00, 0x00, 0xB2, 0x43, -/* 00000AC0 */ 0x00, 0x00, 0x01, 0xEC, 0x43, 0x00, 0x00, 0x01, 0x18, 0x44, 0x00, 0x00, 0x01, 0x54, 0x44, 0x00, -/* 00000AD0 */ 0x00, 0x01, 0xA2, 0x44, 0x00, 0x00, 0x01, 0xCC, 0x44, 0x00, 0x00, 0x01, 0xDE, 0x44, 0x00, 0x00, -/* 00000AE0 */ 0x00, 0x0A, 0x45, 0x00, 0x00, 0x00, 0x28, 0x45, 0x00, 0x00, 0x00, 0x4A, 0x45, 0x00, 0x00, 0x00, -/* 00000AF0 */ 0x5E, 0x45, 0x00, 0x00, 0x00, 0x7A, 0x45, 0x00, 0x00, 0x00, 0x9E, 0x45, 0x00, 0x00, 0x00, 0xB4, -/* 00000B00 */ 0x45, 0x00, 0x00, 0x00, 0xDE, 0x45, 0x00, 0x00, 0x00, 0xFA, 0x45, 0x00, 0x00, 0x00, 0x00, 0x46, -/* 00000B10 */ 0x00, 0x00, 0x00, 0x4C, 0x46, 0x00, 0x00, 0x00, 0x16, 0x47, 0x00, 0x00, 0x00, 0x2C, 0x47, 0x00, -/* 00000B20 */ 0x00, 0x00, 0x72, 0x47, 0x00, 0x00, 0x00, 0x7C, 0x47, 0x00, 0x00, 0x00, 0x80, 0x47, 0x00, 0x00, -/* 00000B30 */ 0x00, 0x84, 0x47, 0x00, 0x00, 0x00, 0x88, 0x47, 0x00, 0x00, 0x00, 0xA0, 0x47, 0x00, 0x00, 0x00, -/* 00000B40 */ 0xBE, 0x47, 0x00, 0x00, 0x00, 0x0A, 0x48, 0x00, 0x00, 0x00, 0xEA, 0x48, 0x00, 0x00, 0x00, 0x04, -/* 00000B50 */ 0x49, 0x00, 0x00, 0x00, 0x14, 0x49, 0x00, 0x00, 0x00, 0x28, 0x49, 0x00, 0x00, 0x00, 0x3C, 0x49, -/* 00000B60 */ 0x00, 0x00, 0x00, 0xBE, 0x49, 0x00, 0x00, 0x00, 0xEA, 0x49, 0x00, 0x00, 0x00, 0x02, 0x4A, 0x00, -/* 00000B70 */ 0x00, 0x00, 0x14, 0x4A, 0x00, 0x00, 0x00, 0x4E, 0x4A, 0x00, 0x00, 0x00, 0x66, 0x4A, 0x00, 0x00, -/* 00000B80 */ 0x00, 0x7E, 0x4A, 0x00, 0x00, 0x00, 0x88, 0x4A, 0x00, 0x00, 0x00, 0xC8, 0x4A, 0x00, 0x00, 0x01, -/* 00000B90 */ 0xD2, 0x4A, 0x00, 0x00, 0x00, 0x24, 0x4B, 0x00, 0x00, 0x00, 0x47, 0x00, 0x6C, 0x00, 0x6F, 0x00, -/* 00000BA0 */ 0x62, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x20, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x64, 0x00, 0x65, 0x00, -/* 00000BB0 */ 0x00, 0x00, 0x75, 0x00, 0x73, 0x00, 0x65, 0x00, 0x20, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, -/* 00000BC0 */ 0x69, 0x00, 0x63, 0x00, 0x74, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, -/* 00000BD0 */ 0x43, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x00, 0x00, 0x73, 0x00, 0x65, 0x00, -/* 00000BE0 */ 0x74, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, -/* 00000BF0 */ 0x70, 0x00, 0x65, 0x00, 0x00, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x41, 0x00, 0x72, 0x00, -/* 00000C00 */ 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x4C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x74, 0x00, -/* 00000C10 */ 0x68, 0x00, 0x00, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x49, 0x00, 0x6E, 0x00, -/* 00000C20 */ 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, 0x46, 0x00, 0x75, 0x00, -/* 00000C30 */ 0x6E, 0x00, 0x63, 0x00, 0x00, 0x00, 0x52, 0x00, 0x61, 0x00, 0x69, 0x00, 0x73, 0x00, 0x65, 0x00, -/* 00000C40 */ 0x41, 0x00, 0x73, 0x00, 0x73, 0x00, 0x65, 0x00, 0x72, 0x00, 0x74, 0x00, 0x00, 0x00, 0x4F, 0x00, -/* 00000C50 */ 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x47, 0x00, 0x65, 0x00, 0x74, 0x00, -/* 00000C60 */ 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, -/* 00000C70 */ 0x65, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x4F, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, -/* 00000C80 */ 0x63, 0x00, 0x74, 0x00, 0x49, 0x00, 0x73, 0x00, 0x45, 0x00, 0x78, 0x00, 0x74, 0x00, 0x65, 0x00, -/* 00000C90 */ 0x6E, 0x00, 0x73, 0x00, 0x69, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x4F, 0x00, -/* 00000CA0 */ 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x47, 0x00, 0x65, 0x00, 0x74, 0x00, -/* 00000CB0 */ 0x4F, 0x00, 0x77, 0x00, 0x6E, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x65, 0x00, -/* 00000CC0 */ 0x72, 0x00, 0x74, 0x00, 0x79, 0x00, 0x4E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x73, 0x00, -/* 00000CD0 */ 0x00, 0x00, 0x4F, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x49, 0x00, -/* 00000CE0 */ 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, 0x48, 0x00, -/* 00000CF0 */ 0x61, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x77, 0x00, 0x6E, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, -/* 00000D00 */ 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x6F, 0x00, -/* 00000D10 */ 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x44, 0x00, 0x65, 0x00, 0x66, 0x00, -/* 00000D20 */ 0x69, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x65, 0x00, -/* 00000D30 */ 0x72, 0x00, 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x4F, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, -/* 00000D40 */ 0x63, 0x00, 0x74, 0x00, 0x44, 0x00, 0x65, 0x00, 0x66, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x65, 0x00, -/* 00000D50 */ 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x74, 0x00, 0x79, 0x00, -/* 00000D60 */ 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x49, 0x00, 0x6E, 0x00, -/* 00000D70 */ 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, -/* 00000D80 */ 0x72, 0x00, 0x45, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, -/* 00000D90 */ 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, -/* 00000DA0 */ 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x65, 0x00, 0x78, 0x00, -/* 00000DB0 */ 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, -/* 00000DC0 */ 0x49, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, -/* 00000DD0 */ 0x50, 0x00, 0x75, 0x00, 0x73, 0x00, 0x68, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, -/* 00000DE0 */ 0x61, 0x00, 0x79, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, -/* 00000DF0 */ 0x63, 0x00, 0x65, 0x00, 0x4A, 0x00, 0x6F, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x46, 0x00, -/* 00000E00 */ 0x75, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x49, 0x00, -/* 00000E10 */ 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, 0x42, 0x00, -/* 00000E20 */ 0x69, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x00, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, -/* 00000E30 */ 0x49, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, -/* 00000E40 */ 0x47, 0x00, 0x65, 0x00, 0x74, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 00000E50 */ 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x4E, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x00, 0x00, -/* 00000E60 */ 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x49, 0x00, 0x6E, 0x00, -/* 00000E70 */ 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, 0x52, 0x00, 0x65, 0x00, -/* 00000E80 */ 0x70, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x63, 0x00, 0x65, 0x00, 0x00, 0x00, 0x53, 0x00, 0x74, 0x00, -/* 00000E90 */ 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, -/* 00000EA0 */ 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, -/* 00000EB0 */ 0x77, 0x00, 0x65, 0x00, 0x72, 0x00, 0x43, 0x00, 0x61, 0x00, 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 00000EC0 */ 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x49, 0x00, 0x6E, 0x00, -/* 00000ED0 */ 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, 0x54, 0x00, 0x6F, 0x00, -/* 00000EE0 */ 0x55, 0x00, 0x70, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x43, 0x00, 0x61, 0x00, 0x73, 0x00, -/* 00000EF0 */ 0x65, 0x00, 0x00, 0x00, 0x74, 0x00, 0x68, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x45, 0x00, -/* 00000F00 */ 0x78, 0x00, 0x49, 0x00, 0x66, 0x00, 0x4F, 0x00, 0x4F, 0x00, 0x4D, 0x00, 0x4F, 0x00, 0x72, 0x00, -/* 00000F10 */ 0x53, 0x00, 0x4F, 0x00, 0x45, 0x00, 0x00, 0x00, 0x74, 0x00, 0x61, 0x00, 0x67, 0x00, 0x50, 0x00, -/* 00000F20 */ 0x75, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x63, 0x00, 0x46, 0x00, 0x75, 0x00, 0x6E, 0x00, -/* 00000F30 */ 0x63, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, -/* 00000F40 */ 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x66, 0x00, -/* 00000F50 */ 0x6F, 0x00, 0x72, 0x00, 0x45, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x49, 0x00, 0x66, 0x00, -/* 00000F60 */ 0x50, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x00, 0x00, -/* 00000F70 */ 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x45, 0x00, 0x78, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6E, 0x00, -/* 00000F80 */ 0x73, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x53, 0x00, 0x75, 0x00, 0x62, 0x00, 0x74, 0x00, -/* 00000F90 */ 0x61, 0x00, 0x67, 0x00, 0x73, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, -/* 00000FA0 */ 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00000FB0 */ 0x65, 0x00, 0x48, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, -/* 00000FC0 */ 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x4C, 0x00, -/* 00000FD0 */ 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x73, 0x00, -/* 00000FE0 */ 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x70, 0x00, 0x70, 0x00, 0x65, 0x00, 0x64, 0x00, 0x44, 0x00, -/* 00000FF0 */ 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x4C, 0x00, 0x6F, 0x00, -/* 00001000 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, -/* 00001010 */ 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, -/* 00001020 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x57, 0x00, -/* 00001030 */ 0x72, 0x00, 0x61, 0x00, 0x70, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x63, 0x00, -/* 00001040 */ 0x61, 0x00, 0x6E, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00001050 */ 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00001060 */ 0x65, 0x00, 0x4C, 0x00, 0x69, 0x00, 0x73, 0x00, 0x74, 0x00, 0x57, 0x00, 0x72, 0x00, 0x61, 0x00, -/* 00001070 */ 0x70, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, -/* 00001080 */ 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x41, 0x00, 0x63, 0x00, 0x63, 0x00, 0x65, 0x00, -/* 00001090 */ 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, -/* 000010A0 */ 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x56, 0x00, 0x61, 0x00, -/* 000010B0 */ 0x6C, 0x00, 0x75, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, 0x76, 0x00, -/* 000010C0 */ 0x65, 0x00, 0x72, 0x00, 0x73, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, -/* 000010D0 */ 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x41, 0x00, 0x63, 0x00, 0x63, 0x00, 0x65, 0x00, 0x70, 0x00, -/* 000010E0 */ 0x74, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, -/* 000010F0 */ 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x56, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00001100 */ 0x75, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x70, 0x00, 0x70, 0x00, -/* 00001110 */ 0x65, 0x00, 0x64, 0x00, 0x44, 0x00, 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, -/* 00001120 */ 0x74, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 00001130 */ 0x49, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x54, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, -/* 00001140 */ 0x00, 0x00, 0x69, 0x00, 0x73, 0x00, 0x50, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x66, 0x00, -/* 00001150 */ 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x55, 0x00, 0x73, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, -/* 00001160 */ 0x49, 0x00, 0x43, 0x00, 0x55, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x4F, 0x00, 0x54, 0x00, 0x5F, 0x00, -/* 00001170 */ 0x46, 0x00, 0x4F, 0x00, 0x55, 0x00, 0x4E, 0x00, 0x44, 0x00, 0x00, 0x00, 0x62, 0x00, 0x61, 0x00, -/* 00001180 */ 0x72, 0x00, 0x65, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x42, 0x00, -/* 00001190 */ 0x75, 0x00, 0x69, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x46, 0x00, 0x75, 0x00, -/* 000011A0 */ 0x6E, 0x00, 0x63, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x49, 0x00, 0x44, 0x00, -/* 000011B0 */ 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x72, 0x00, 0x61, 0x00, 0x69, 0x00, 0x73, 0x00, 0x65, 0x00, -/* 000011C0 */ 0x00, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, -/* 000011D0 */ 0x72, 0x00, 0x53, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, -/* 000011E0 */ 0x76, 0x00, 0x69, 0x00, 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, -/* 000011F0 */ 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x43, 0x00, 0x61, 0x00, 0x73, 0x00, -/* 00001200 */ 0x65, 0x00, 0x46, 0x00, 0x69, 0x00, 0x72, 0x00, 0x73, 0x00, 0x74, 0x00, 0x00, 0x00, 0x4E, 0x00, -/* 00001210 */ 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, -/* 00001220 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x53, 0x00, 0x74, 0x00, 0x79, 0x00, 0x6C, 0x00, 0x65, 0x00, -/* 00001230 */ 0x00, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, -/* 00001240 */ 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x43, 0x00, 0x75, 0x00, 0x72, 0x00, -/* 00001250 */ 0x72, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x79, 0x00, 0x44, 0x00, 0x69, 0x00, 0x73, 0x00, -/* 00001260 */ 0x70, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x79, 0x00, 0x00, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x45, 0x00, -/* 00001270 */ 0x6E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x00, 0x00, 0x61, 0x00, 0x62, 0x00, 0x73, 0x00, 0x00, 0x00, -/* 00001280 */ 0x66, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x61, 0x00, -/* 00001290 */ 0x78, 0x00, 0x00, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x00, 0x00, 0x4D, 0x00, 0x49, 0x00, -/* 000012A0 */ 0x4E, 0x00, 0x00, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x6F, 0x00, -/* 000012B0 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, -/* 000012C0 */ 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, -/* 000012D0 */ 0x65, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 000012E0 */ 0x65, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, -/* 000012F0 */ 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, -/* 00001300 */ 0x54, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, -/* 00001310 */ 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, -/* 00001320 */ 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, -/* 00001330 */ 0x72, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00001340 */ 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, -/* 00001350 */ 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x4C, 0x00, 0x6F, 0x00, -/* 00001360 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00, -/* 00001370 */ 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, 0x00, 0x00, 0x4D, 0x00, 0x41, 0x00, 0x58, 0x00, 0x00, 0x00, -/* 00001380 */ 0x74, 0x00, 0x6F, 0x00, 0x55, 0x00, 0x70, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x43, 0x00, -/* 00001390 */ 0x61, 0x00, 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, -/* 000013A0 */ 0x77, 0x00, 0x65, 0x00, 0x72, 0x00, 0x43, 0x00, 0x61, 0x00, 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 000013B0 */ 0x72, 0x00, 0x65, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x63, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 000013C0 */ 0x73, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x74, 0x00, 0x00, 0x00, 0x73, 0x00, 0x75, 0x00, -/* 000013D0 */ 0x62, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, -/* 000013E0 */ 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x49, 0x00, 0x6E, 0x00, -/* 000013F0 */ 0x64, 0x00, 0x65, 0x00, 0x78, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x61, 0x00, -/* 00001400 */ 0x74, 0x00, 0x63, 0x00, 0x68, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, 0x70, 0x00, 0x65, 0x00, -/* 00001410 */ 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x45, 0x00, 0x61, 0x00, -/* 00001420 */ 0x63, 0x00, 0x68, 0x00, 0x00, 0x00, 0x70, 0x00, 0x75, 0x00, 0x73, 0x00, 0x68, 0x00, 0x00, 0x00, -/* 00001430 */ 0x6A, 0x00, 0x6F, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x61, 0x00, 0x72, 0x00, 0x72, 0x00, -/* 00001440 */ 0x61, 0x00, 0x79, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x65, 0x00, 0x78, 0x00, 0x4F, 0x00, -/* 00001450 */ 0x66, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x70, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, -/* 00001460 */ 0x64, 0x00, 0x75, 0x00, 0x63, 0x00, 0x65, 0x00, 0x00, 0x00, 0x73, 0x00, 0x6C, 0x00, 0x69, 0x00, -/* 00001470 */ 0x63, 0x00, 0x65, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x61, 0x00, -/* 00001480 */ 0x74, 0x00, 0x00, 0x00, 0x66, 0x00, 0x69, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, -/* 00001490 */ 0x00, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x71, 0x00, 0x75, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 000014A0 */ 0x6B, 0x00, 0x65, 0x00, 0x79, 0x00, 0x73, 0x00, 0x00, 0x00, 0x68, 0x00, 0x61, 0x00, 0x73, 0x00, -/* 000014B0 */ 0x4F, 0x00, 0x77, 0x00, 0x6E, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x65, 0x00, -/* 000014C0 */ 0x72, 0x00, 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x64, 0x00, 0x65, 0x00, 0x66, 0x00, 0x69, 0x00, -/* 000014D0 */ 0x6E, 0x00, 0x65, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, -/* 000014E0 */ 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x69, 0x00, 0x73, 0x00, 0x45, 0x00, 0x78, 0x00, 0x74, 0x00, -/* 000014F0 */ 0x65, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x69, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 00001500 */ 0x63, 0x00, 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, 0x73, 0x00, -/* 00001510 */ 0x65, 0x00, 0x74, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, -/* 00001520 */ 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x69, 0x00, 0x73, 0x00, -/* 00001530 */ 0x46, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, 0x69, 0x00, -/* 00001540 */ 0x73, 0x00, 0x4E, 0x00, 0x61, 0x00, 0x4E, 0x00, 0x00, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, -/* 00001550 */ 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6E, 0x00, -/* 00001560 */ 0x64, 0x00, 0x00, 0x00, 0x61, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x79, 0x00, 0x00, 0x00, -/* 00001570 */ 0x72, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x65, 0x00, 0x45, 0x00, 0x72, 0x00, 0x72, 0x00, -/* 00001580 */ 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x61, 0x00, 0x73, 0x00, 0x73, 0x00, 0x65, 0x00, 0x72, 0x00, -/* 00001590 */ 0x74, 0x00, 0x00, 0x00, 0x62, 0x00, 0x61, 0x00, 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, 0x61, 0x00, -/* 000015A0 */ 0x63, 0x00, 0x63, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x00, 0x00, 0x63, 0x00, 0x61, 0x00, -/* 000015B0 */ 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, 0x76, 0x00, 0x61, 0x00, 0x72, 0x00, 0x69, 0x00, 0x61, 0x00, -/* 000015C0 */ 0x6E, 0x00, 0x74, 0x00, 0x00, 0x00, 0x44, 0x00, 0x45, 0x00, 0x46, 0x00, 0x41, 0x00, 0x55, 0x00, -/* 000015D0 */ 0x4C, 0x00, 0x54, 0x00, 0x00, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, -/* 000015E0 */ 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x66, 0x00, -/* 000015F0 */ 0x61, 0x00, 0x6C, 0x00, 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, 0x44, 0x00, 0x45, 0x00, 0x43, 0x00, -/* 00001600 */ 0x49, 0x00, 0x4D, 0x00, 0x41, 0x00, 0x4C, 0x00, 0x00, 0x00, 0x50, 0x00, 0x45, 0x00, 0x52, 0x00, -/* 00001610 */ 0x43, 0x00, 0x45, 0x00, 0x4E, 0x00, 0x54, 0x00, 0x00, 0x00, 0x43, 0x00, 0x55, 0x00, 0x52, 0x00, -/* 00001620 */ 0x52, 0x00, 0x45, 0x00, 0x4E, 0x00, 0x43, 0x00, 0x59, 0x00, 0x00, 0x00, 0x53, 0x00, 0x59, 0x00, -/* 00001630 */ 0x4D, 0x00, 0x42, 0x00, 0x4F, 0x00, 0x4C, 0x00, 0x00, 0x00, 0x43, 0x00, 0x4F, 0x00, 0x44, 0x00, -/* 00001640 */ 0x45, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x41, 0x00, 0x4D, 0x00, 0x45, 0x00, 0x00, 0x00, 0x54, 0x00, -/* 00001650 */ 0x6F, 0x00, 0x4F, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x00, 0x00, -/* 00001660 */ 0x54, 0x00, 0x6F, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, -/* 00001670 */ 0x00, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, -/* 00001680 */ 0x72, 0x00, 0x00, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x67, 0x00, 0x69, 0x00, -/* 00001690 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x42, 0x00, 0x6F, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x65, 0x00, -/* 000016A0 */ 0x61, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x55, 0x00, 0x69, 0x00, 0x6E, 0x00, -/* 000016B0 */ 0x74, 0x00, 0x33, 0x00, 0x32, 0x00, 0x00, 0x00, 0x69, 0x00, 0x73, 0x00, 0x56, 0x00, 0x61, 0x00, -/* 000016C0 */ 0x6C, 0x00, 0x69, 0x00, 0x64, 0x00, 0x00, 0x00, 0x56, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, -/* 000016D0 */ 0x64, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x49, 0x00, -/* 000016E0 */ 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x43, 0x00, -/* 000016F0 */ 0x61, 0x00, 0x6E, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00001700 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, -/* 00001710 */ 0x6E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x76, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00001720 */ 0x75, 0x00, 0x65, 0x00, 0x00, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x43, 0x00, 0x61, 0x00, -/* 00001730 */ 0x6E, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x4C, 0x00, -/* 00001740 */ 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x77, 0x00, -/* 00001750 */ 0x72, 0x00, 0x69, 0x00, 0x74, 0x00, 0x61, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 00001760 */ 0x65, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x72, 0x00, 0x61, 0x00, 0x62, 0x00, -/* 00001770 */ 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x66, 0x00, 0x69, 0x00, -/* 00001780 */ 0x67, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 00001790 */ 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, -/* 000017A0 */ 0x00, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, -/* 000017B0 */ 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x44, 0x00, 0x61, 0x00, -/* 000017C0 */ 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, -/* 000017D0 */ 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x50, 0x00, 0x6C, 0x00, 0x75, 0x00, -/* 000017E0 */ 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x52, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, -/* 000017F0 */ 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x43, 0x00, 0x6F, 0x00, -/* 00001800 */ 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x2E, 0x00, 0x73, 0x00, -/* 00001810 */ 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, -/* 00001820 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, -/* 00001830 */ 0x66, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x4E, 0x00, -/* 00001840 */ 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, -/* 00001850 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, -/* 00001860 */ 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, -/* 00001870 */ 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x49, 0x00, -/* 00001880 */ 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, -/* 00001890 */ 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, -/* 000018A0 */ 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, -/* 000018B0 */ 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, -/* 000018C0 */ 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x73, 0x00, 0x75, 0x00, -/* 000018D0 */ 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, -/* 000018E0 */ 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, -/* 000018F0 */ 0x00, 0x00, 0x65, 0x00, 0x73, 0x00, 0x2D, 0x00, 0x45, 0x00, 0x53, 0x00, 0x00, 0x00, 0x74, 0x00, -/* 00001900 */ 0x72, 0x00, 0x61, 0x00, 0x64, 0x00, 0x00, 0x00, 0x74, 0x00, 0x72, 0x00, 0x61, 0x00, 0x64, 0x00, -/* 00001910 */ 0x6E, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x2D, 0x00, 0x4C, 0x00, 0x56, 0x00, -/* 00001920 */ 0x00, 0x00, 0x64, 0x00, 0x65, 0x00, 0x2D, 0x00, 0x44, 0x00, 0x45, 0x00, 0x00, 0x00, 0x70, 0x00, -/* 00001930 */ 0x68, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x62, 0x00, 0x6B, 0x00, 0x00, 0x00, 0x70, 0x00, -/* 00001940 */ 0x68, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x62, 0x00, 0x00, 0x00, 0x6A, 0x00, 0x61, 0x00, -/* 00001950 */ 0x2D, 0x00, 0x4A, 0x00, 0x50, 0x00, 0x00, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x68, 0x00, -/* 00001960 */ 0x61, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x72, 0x00, 0x61, 0x00, 0x64, 0x00, 0x73, 0x00, 0x74, 0x00, -/* 00001970 */ 0x72, 0x00, 0x00, 0x00, 0x7A, 0x00, 0x68, 0x00, 0x2D, 0x00, 0x54, 0x00, 0x57, 0x00, 0x00, 0x00, -/* 00001980 */ 0x70, 0x00, 0x68, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x74, 0x00, 0x69, 0x00, 0x63, 0x00, -/* 00001990 */ 0x00, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x00, 0x00, -/* 000019A0 */ 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x6B, 0x00, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 000019B0 */ 0x7A, 0x00, 0x68, 0x00, 0x2D, 0x00, 0x48, 0x00, 0x4B, 0x00, 0x00, 0x00, 0x7A, 0x00, 0x68, 0x00, -/* 000019C0 */ 0x2D, 0x00, 0x4D, 0x00, 0x4F, 0x00, 0x00, 0x00, 0x7A, 0x00, 0x68, 0x00, 0x2D, 0x00, 0x43, 0x00, -/* 000019D0 */ 0x4E, 0x00, 0x00, 0x00, 0x70, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x79, 0x00, 0x69, 0x00, 0x6E, 0x00, -/* 000019E0 */ 0x00, 0x00, 0x7A, 0x00, 0x68, 0x00, 0x2D, 0x00, 0x53, 0x00, 0x47, 0x00, 0x00, 0x00, 0x75, 0x00, -/* 000019F0 */ 0x73, 0x00, 0x65, 0x00, 0x43, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x73, 0x00, -/* 00001A00 */ 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x4C, 0x00, -/* 00001A10 */ 0x6F, 0x00, 0x6F, 0x00, 0x6B, 0x00, 0x75, 0x00, 0x70, 0x00, 0x43, 0x00, 0x61, 0x00, 0x63, 0x00, -/* 00001A20 */ 0x68, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00001A30 */ 0x65, 0x00, 0x42, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x46, 0x00, 0x69, 0x00, 0x74, 0x00, -/* 00001A40 */ 0x43, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x00, 0x00, 0x47, 0x00, 0x65, 0x00, -/* 00001A50 */ 0x74, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, -/* 00001A60 */ 0x49, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, -/* 00001A70 */ 0x7A, 0x00, 0x65, 0x00, 0x43, 0x00, 0x75, 0x00, 0x72, 0x00, 0x72, 0x00, 0x65, 0x00, 0x6E, 0x00, -/* 00001A80 */ 0x63, 0x00, 0x79, 0x00, 0x52, 0x00, 0x65, 0x00, 0x67, 0x00, 0x45, 0x00, 0x78, 0x00, 0x70, 0x00, -/* 00001A90 */ 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x64, 0x00, 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, -/* 00001AA0 */ 0x6C, 0x00, 0x74, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, -/* 00001AB0 */ 0x00, 0x00, 0x47, 0x00, 0x65, 0x00, 0x74, 0x00, 0x44, 0x00, 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, -/* 00001AC0 */ 0x75, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00001AD0 */ 0x65, 0x00, 0x00, 0x00, 0x42, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x41, 0x00, 0x76, 0x00, -/* 00001AE0 */ 0x61, 0x00, 0x69, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x4C, 0x00, -/* 00001AF0 */ 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x67, 0x00, 0x65, 0x00, -/* 00001B00 */ 0x74, 0x00, 0x4B, 0x00, 0x65, 0x00, 0x79, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, -/* 00001B10 */ 0x6C, 0x00, 0x65, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x61, 0x00, 0x00, 0x00, 0x4C, 0x00, -/* 00001B20 */ 0x6F, 0x00, 0x6F, 0x00, 0x6B, 0x00, 0x75, 0x00, 0x70, 0x00, 0x4D, 0x00, 0x61, 0x00, 0x74, 0x00, -/* 00001B30 */ 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x42, 0x00, 0x65, 0x00, 0x73, 0x00, -/* 00001B40 */ 0x74, 0x00, 0x46, 0x00, 0x69, 0x00, 0x74, 0x00, 0x4D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x63, 0x00, -/* 00001B50 */ 0x68, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x55, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x63, 0x00, -/* 00001B60 */ 0x6F, 0x00, 0x64, 0x00, 0x65, 0x00, 0x45, 0x00, 0x78, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6E, 0x00, -/* 00001B70 */ 0x73, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x56, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x75, 0x00, -/* 00001B80 */ 0x65, 0x00, 0x00, 0x00, 0x52, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, -/* 00001B90 */ 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 00001BA0 */ 0x47, 0x00, 0x65, 0x00, 0x74, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, -/* 00001BB0 */ 0x72, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, -/* 00001BC0 */ 0x43, 0x00, 0x55, 0x00, 0x52, 0x00, 0x52, 0x00, 0x45, 0x00, 0x4E, 0x00, 0x43, 0x00, 0x59, 0x00, -/* 00001BD0 */ 0x5F, 0x00, 0x43, 0x00, 0x4F, 0x00, 0x44, 0x00, 0x45, 0x00, 0x5F, 0x00, 0x52, 0x00, 0x45, 0x00, -/* 00001BE0 */ 0x00, 0x00, 0x70, 0x00, 0x61, 0x00, 0x72, 0x00, 0x73, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x61, 0x00, -/* 00001BF0 */ 0x6E, 0x00, 0x67, 0x00, 0x74, 0x00, 0x61, 0x00, 0x67, 0x00, 0x00, 0x00, 0x49, 0x00, 0x73, 0x00, -/* 00001C00 */ 0x57, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, -/* 00001C10 */ 0x65, 0x00, 0x64, 0x00, 0x43, 0x00, 0x75, 0x00, 0x72, 0x00, 0x72, 0x00, 0x65, 0x00, 0x6E, 0x00, -/* 00001C20 */ 0x63, 0x00, 0x79, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x64, 0x00, 0x65, 0x00, 0x00, 0x00, 0x49, 0x00, -/* 00001C30 */ 0x73, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x75, 0x00, 0x63, 0x00, 0x74, 0x00, 0x75, 0x00, -/* 00001C40 */ 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x79, 0x00, 0x56, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00001C50 */ 0x69, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x75, 0x00, 0x61, 0x00, -/* 00001C60 */ 0x67, 0x00, 0x65, 0x00, 0x54, 0x00, 0x61, 0x00, 0x67, 0x00, 0x00, 0x00, 0x43, 0x00, 0x61, 0x00, -/* 00001C70 */ 0x6E, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, -/* 00001C80 */ 0x7A, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, -/* 00001C90 */ 0x4C, 0x00, 0x69, 0x00, 0x73, 0x00, 0x74, 0x00, 0x00, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x6F, 0x00, -/* 00001CA0 */ 0x6B, 0x00, 0x75, 0x00, 0x70, 0x00, 0x53, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, -/* 00001CB0 */ 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, -/* 00001CC0 */ 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x42, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, -/* 00001CD0 */ 0x46, 0x00, 0x69, 0x00, 0x74, 0x00, 0x53, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, -/* 00001CE0 */ 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, -/* 00001CF0 */ 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x53, 0x00, 0x65, 0x00, 0x74, 0x00, 0x4E, 0x00, -/* 00001D00 */ 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, -/* 00001D10 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x44, 0x00, 0x69, 0x00, 0x67, 0x00, 0x69, 0x00, 0x74, 0x00, -/* 00001D20 */ 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x00, 0x00, -/* 00001D30 */ 0x53, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, -/* 00001D40 */ 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, -/* 00001D50 */ 0x00, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x53, 0x00, 0x74, 0x00, 0x61, 0x00, -/* 00001D60 */ 0x74, 0x00, 0x69, 0x00, 0x63, 0x00, 0x4D, 0x00, 0x65, 0x00, 0x74, 0x00, 0x68, 0x00, 0x6F, 0x00, -/* 00001D70 */ 0x64, 0x00, 0x54, 0x00, 0x68, 0x00, 0x69, 0x00, 0x73, 0x00, 0x41, 0x00, 0x72, 0x00, 0x67, 0x00, -/* 00001D80 */ 0x00, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, -/* 00001D90 */ 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, -/* 00001DA0 */ 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x5F, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x6F, 0x00, -/* 00001DB0 */ 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x75, 0x00, 0x63, 0x00, 0x74, 0x00, 0x61, 0x00, -/* 00001DC0 */ 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x43, 0x00, -/* 00001DD0 */ 0x61, 0x00, 0x6E, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00001DE0 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x5F, 0x00, -/* 00001DF0 */ 0x75, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, -/* 00001E00 */ 0x75, 0x00, 0x63, 0x00, 0x74, 0x00, 0x61, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 00001E10 */ 0x63, 0x00, 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x52, 0x00, 0x65, 0x00, -/* 00001E20 */ 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4F, 0x00, 0x70, 0x00, -/* 00001E30 */ 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x00, 0x00, 0x67, 0x00, 0x65, 0x00, -/* 00001E40 */ 0x74, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x63, 0x00, -/* 00001E50 */ 0x61, 0x00, 0x6C, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, -/* 00001E60 */ 0x73, 0x00, 0x5F, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x49, 0x00, -/* 00001E70 */ 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x7A, 0x00, -/* 00001E80 */ 0x65, 0x00, 0x4C, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x54, 0x00, 0x61, 0x00, 0x67, 0x00, -/* 00001E90 */ 0x52, 0x00, 0x45, 0x00, 0x73, 0x00, 0x00, 0x00, 0x43, 0x00, 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, -/* 00001EA0 */ 0x74, 0x00, 0x65, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, -/* 00001EB0 */ 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, -/* 00001EC0 */ 0x00, 0x00, 0x49, 0x00, 0x73, 0x00, 0x57, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x46, 0x00, -/* 00001ED0 */ 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x61, 0x00, 0x6E, 0x00, -/* 00001EE0 */ 0x67, 0x00, 0x75, 0x00, 0x61, 0x00, 0x67, 0x00, 0x65, 0x00, 0x54, 0x00, 0x61, 0x00, 0x67, 0x00, -/* 00001EF0 */ 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x70, 0x00, -/* 00001F00 */ 0x70, 0x00, 0x65, 0x00, 0x64, 0x00, 0x44, 0x00, 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, -/* 00001F10 */ 0x6C, 0x00, 0x74, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, -/* 00001F20 */ 0x00, 0x00, 0x4C, 0x00, 0x41, 0x00, 0x4E, 0x00, 0x47, 0x00, 0x5F, 0x00, 0x54, 0x00, 0x41, 0x00, -/* 00001F30 */ 0x47, 0x00, 0x5F, 0x00, 0x42, 0x00, 0x41, 0x00, 0x53, 0x00, 0x45, 0x00, 0x5F, 0x00, 0x52, 0x00, -/* 00001F40 */ 0x45, 0x00, 0x00, 0x00, 0x4C, 0x00, 0x41, 0x00, 0x4E, 0x00, 0x47, 0x00, 0x5F, 0x00, 0x54, 0x00, -/* 00001F50 */ 0x41, 0x00, 0x47, 0x00, 0x5F, 0x00, 0x45, 0x00, 0x58, 0x00, 0x54, 0x00, 0x5F, 0x00, 0x52, 0x00, -/* 00001F60 */ 0x45, 0x00, 0x00, 0x00, 0x4C, 0x00, 0x41, 0x00, 0x4E, 0x00, 0x47, 0x00, 0x5F, 0x00, 0x54, 0x00, -/* 00001F70 */ 0x41, 0x00, 0x47, 0x00, 0x5F, 0x00, 0x52, 0x00, 0x45, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, -/* 00001F80 */ 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x5F, 0x00, 0x73, 0x00, -/* 00001F90 */ 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, -/* 00001FA0 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, -/* 00001FB0 */ 0x66, 0x00, 0x5F, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x63, 0x00, -/* 00001FC0 */ 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x5F, 0x00, -/* 00001FD0 */ 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, -/* 00001FE0 */ 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, -/* 00001FF0 */ 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, -/* 00002000 */ 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x5F, 0x00, -/* 00002010 */ 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, -/* 00002020 */ 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, -/* 00002030 */ 0x4F, 0x00, 0x66, 0x00, 0x5F, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 00002040 */ 0x6E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, -/* 00002050 */ 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x5F, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, -/* 00002060 */ 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, -/* 00002070 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, -/* 00002080 */ 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, -/* 00002090 */ 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x5F, 0x00, 0x73, 0x00, -/* 000020A0 */ 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, -/* 000020B0 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, -/* 000020C0 */ 0x66, 0x00, 0x5F, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x64, 0x00, -/* 000020D0 */ 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, -/* 000020E0 */ 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x5F, 0x00, 0x73, 0x00, 0x75, 0x00, -/* 000020F0 */ 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, -/* 00002100 */ 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, -/* 00002110 */ 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x70, 0x00, 0x70, 0x00, 0x65, 0x00, -/* 00002120 */ 0x64, 0x00, 0x44, 0x00, 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x74, 0x00, -/* 00002130 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6E, 0x00, -/* 00002140 */ 0x00, 0x00, 0x5F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 00002150 */ 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x00, 0x00, 0x73, 0x00, 0x65, 0x00, 0x74, 0x00, 0x00, 0x00, -/* 00002160 */ 0x5F, 0x00, 0x2E, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x55, 0x00, 0x70, 0x00, 0x70, 0x00, 0x65, 0x00, -/* 00002170 */ 0x72, 0x00, 0x43, 0x00, 0x61, 0x00, 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, -/* 00002180 */ 0x74, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x65, 0x00, 0x72, 0x00, 0x43, 0x00, -/* 00002190 */ 0x61, 0x00, 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x72, 0x00, 0x65, 0x00, -/* 000021A0 */ 0x70, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x63, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, -/* 000021B0 */ 0x73, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x74, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, -/* 000021C0 */ 0x73, 0x00, 0x75, 0x00, 0x62, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, -/* 000021D0 */ 0x67, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, -/* 000021E0 */ 0x6E, 0x00, 0x67, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x65, 0x00, 0x78, 0x00, 0x4F, 0x00, -/* 000021F0 */ 0x66, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x63, 0x00, -/* 00002200 */ 0x68, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x72, 0x00, 0x65, 0x00, 0x70, 0x00, 0x65, 0x00, -/* 00002210 */ 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, -/* 00002220 */ 0x45, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x70, 0x00, -/* 00002230 */ 0x75, 0x00, 0x73, 0x00, 0x68, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x6A, 0x00, 0x6F, 0x00, -/* 00002240 */ 0x69, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x61, 0x00, 0x72, 0x00, 0x72, 0x00, -/* 00002250 */ 0x61, 0x00, 0x79, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x65, 0x00, 0x78, 0x00, 0x4F, 0x00, -/* 00002260 */ 0x66, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x70, 0x00, 0x00, 0x00, -/* 00002270 */ 0x5F, 0x00, 0x2E, 0x00, 0x72, 0x00, 0x65, 0x00, 0x64, 0x00, 0x75, 0x00, 0x63, 0x00, 0x65, 0x00, -/* 00002280 */ 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x63, 0x00, 0x65, 0x00, -/* 00002290 */ 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x61, 0x00, -/* 000022A0 */ 0x74, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x69, 0x00, 0x6C, 0x00, 0x74, 0x00, -/* 000022B0 */ 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x69, 0x00, -/* 000022C0 */ 0x71, 0x00, 0x75, 0x00, 0x65, 0x00, 0x00, 0x00, 0x61, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, -/* 000022D0 */ 0x79, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x68, 0x00, 0x61, 0x00, 0x73, 0x00, 0x4F, 0x00, -/* 000022E0 */ 0x77, 0x00, 0x6E, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, -/* 000022F0 */ 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x64, 0x00, 0x65, 0x00, 0x66, 0x00, -/* 00002300 */ 0x69, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x65, 0x00, -/* 00002310 */ 0x72, 0x00, 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x63, 0x00, 0x72, 0x00, -/* 00002320 */ 0x65, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x73, 0x00, -/* 00002330 */ 0x65, 0x00, 0x74, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, -/* 00002340 */ 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, -/* 00002350 */ 0x66, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, -/* 00002360 */ 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 00002370 */ 0x5F, 0x00, 0x2E, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x00, 0x00, 0x5F, 0x00, -/* 00002380 */ 0x2E, 0x00, 0x61, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x79, 0x00, 0x00, 0x00, 0x72, 0x00, -/* 00002390 */ 0x61, 0x00, 0x69, 0x00, 0x73, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6E, 0x00, -/* 000023A0 */ 0x67, 0x00, 0x65, 0x00, 0x45, 0x00, 0x72, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, -/* 000023B0 */ 0x72, 0x00, 0x61, 0x00, 0x69, 0x00, 0x73, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x61, 0x00, 0x73, 0x00, -/* 000023C0 */ 0x73, 0x00, 0x65, 0x00, 0x72, 0x00, 0x74, 0x00, 0x00, 0x00, 0x41, 0x00, 0x73, 0x00, 0x73, 0x00, -/* 000023D0 */ 0x65, 0x00, 0x72, 0x00, 0x74, 0x00, 0x20, 0x00, 0x66, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6C, 0x00, -/* 000023E0 */ 0x65, 0x00, 0x64, 0x00, 0x00, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, -/* 000023F0 */ 0x67, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x63, 0x00, -/* 00002400 */ 0x6F, 0x00, 0x00, 0x00, 0x6B, 0x00, 0x66, 0x00, 0x00, 0x00, 0x6B, 0x00, 0x6E, 0x00, 0x00, 0x00, -/* 00002410 */ 0x63, 0x00, 0x61, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x00, 0x00, 0x68, 0x00, 0x63, 0x00, -/* 00002420 */ 0x00, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x64, 0x00, 0x65, 0x00, -/* 00002430 */ 0x45, 0x00, 0x78, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x69, 0x00, 0x6F, 0x00, -/* 00002440 */ 0x6E, 0x00, 0x00, 0x00, 0x65, 0x00, 0x78, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x73, 0x00, -/* 00002450 */ 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, 0x66, 0x00, 0x6F, 0x00, -/* 00002460 */ 0x75, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00002470 */ 0x65, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x74, 0x00, -/* 00002480 */ 0x00, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, -/* 00002490 */ 0x65, 0x00, 0x64, 0x00, 0x45, 0x00, 0x78, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x73, 0x00, -/* 000024A0 */ 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x6F, 0x00, 0x6B, 0x00, -/* 000024B0 */ 0x75, 0x00, 0x70, 0x00, 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, 0x61, 0x00, 0x4C, 0x00, -/* 000024C0 */ 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x2D, 0x00, 0x75, 0x00, -/* 000024D0 */ 0x00, 0x00, 0x2D, 0x00, 0x78, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x6F, 0x00, -/* 000024E0 */ 0x6B, 0x00, 0x75, 0x00, 0x70, 0x00, 0x4D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x63, 0x00, 0x68, 0x00, -/* 000024F0 */ 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x74, 0x00, 0x72, 0x00, 0x75, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 00002500 */ 0x62, 0x00, 0x6F, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x00, 0x00, -/* 00002510 */ 0x6E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x5B, 0x00, -/* 00002520 */ 0x27, 0x00, 0x00, 0x00, 0x27, 0x00, 0x5D, 0x00, 0x00, 0x00, 0x27, 0x00, 0x2C, 0x00, 0x20, 0x00, -/* 00002530 */ 0x27, 0x00, 0x00, 0x00, 0x5B, 0x00, 0x00, 0x00, 0x20, 0x00, 0x2D, 0x00, 0x20, 0x00, 0x00, 0x00, -/* 00002540 */ 0x5D, 0x00, 0x00, 0x00, 0x5E, 0x00, 0x5B, 0x00, 0x41, 0x00, 0x2D, 0x00, 0x5A, 0x00, 0x5D, 0x00, -/* 00002550 */ 0x7B, 0x00, 0x33, 0x00, 0x7D, 0x00, 0x24, 0x00, 0x00, 0x00, 0x70, 0x00, 0x61, 0x00, 0x72, 0x00, -/* 00002560 */ 0x73, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x74, 0x00, -/* 00002570 */ 0x61, 0x00, 0x67, 0x00, 0x43, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 00002580 */ 0x5B, 0x00, 0x41, 0x00, 0x2D, 0x00, 0x5A, 0x00, 0x5D, 0x00, 0x00, 0x00, 0x5B, 0x00, 0x30, 0x00, -/* 00002590 */ 0x2D, 0x00, 0x39, 0x00, 0x5D, 0x00, 0x00, 0x00, 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x00, 0x00, -/* 000025A0 */ 0x7C, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x28, 0x00, 0x3F, 0x00, -/* 000025B0 */ 0x3A, 0x00, 0x61, 0x00, 0x72, 0x00, 0x74, 0x00, 0x2D, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x6A, 0x00, -/* 000025C0 */ 0x62, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x7C, 0x00, 0x63, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x2D, 0x00, -/* 000025D0 */ 0x67, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x7C, 0x00, -/* 000025E0 */ 0x6E, 0x00, 0x6F, 0x00, 0x2D, 0x00, 0x62, 0x00, 0x6F, 0x00, 0x6B, 0x00, 0x7C, 0x00, 0x6E, 0x00, -/* 000025F0 */ 0x6F, 0x00, 0x2D, 0x00, 0x6E, 0x00, 0x79, 0x00, 0x6E, 0x00, 0x7C, 0x00, 0x7A, 0x00, 0x68, 0x00, -/* 00002600 */ 0x2D, 0x00, 0x67, 0x00, 0x75, 0x00, 0x6F, 0x00, 0x79, 0x00, 0x75, 0x00, 0x7C, 0x00, 0x7A, 0x00, -/* 00002610 */ 0x68, 0x00, 0x2D, 0x00, 0x68, 0x00, 0x61, 0x00, 0x6B, 0x00, 0x6B, 0x00, 0x61, 0x00, 0x7C, 0x00, -/* 00002620 */ 0x7A, 0x00, 0x68, 0x00, 0x2D, 0x00, 0x6D, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x7C, 0x00, 0x7A, 0x00, -/* 00002630 */ 0x68, 0x00, 0x2D, 0x00, 0x6D, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x2D, 0x00, 0x6E, 0x00, 0x61, 0x00, -/* 00002640 */ 0x6E, 0x00, 0x7C, 0x00, 0x7A, 0x00, 0x68, 0x00, 0x2D, 0x00, 0x78, 0x00, 0x69, 0x00, 0x61, 0x00, -/* 00002650 */ 0x6E, 0x00, 0x67, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x62, 0x00, -/* 00002660 */ 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x2D, 0x00, 0x47, 0x00, 0x42, 0x00, -/* 00002670 */ 0x2D, 0x00, 0x6F, 0x00, 0x65, 0x00, 0x64, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x61, 0x00, -/* 00002680 */ 0x6D, 0x00, 0x69, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x62, 0x00, 0x6E, 0x00, 0x6E, 0x00, -/* 00002690 */ 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x64, 0x00, 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, -/* 000026A0 */ 0x6C, 0x00, 0x74, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x6F, 0x00, -/* 000026B0 */ 0x63, 0x00, 0x68, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, -/* 000026C0 */ 0x68, 0x00, 0x61, 0x00, 0x6B, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x6B, 0x00, 0x6C, 0x00, -/* 000026D0 */ 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, -/* 000026E0 */ 0x6C, 0x00, 0x75, 0x00, 0x78, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x6D, 0x00, 0x69, 0x00, -/* 000026F0 */ 0x6E, 0x00, 0x67, 0x00, 0x6F, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x6E, 0x00, -/* 00002700 */ 0x61, 0x00, 0x76, 0x00, 0x61, 0x00, 0x6A, 0x00, 0x6F, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, -/* 00002710 */ 0x70, 0x00, 0x77, 0x00, 0x6E, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x74, 0x00, 0x61, 0x00, -/* 00002720 */ 0x6F, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x74, 0x00, 0x61, 0x00, 0x79, 0x00, 0x7C, 0x00, -/* 00002730 */ 0x69, 0x00, 0x2D, 0x00, 0x74, 0x00, 0x73, 0x00, 0x75, 0x00, 0x7C, 0x00, 0x73, 0x00, 0x67, 0x00, -/* 00002740 */ 0x6E, 0x00, 0x2D, 0x00, 0x42, 0x00, 0x45, 0x00, 0x2D, 0x00, 0x46, 0x00, 0x52, 0x00, 0x7C, 0x00, -/* 00002750 */ 0x73, 0x00, 0x67, 0x00, 0x6E, 0x00, 0x2D, 0x00, 0x42, 0x00, 0x45, 0x00, 0x2D, 0x00, 0x4E, 0x00, -/* 00002760 */ 0x4C, 0x00, 0x7C, 0x00, 0x73, 0x00, 0x67, 0x00, 0x6E, 0x00, 0x2D, 0x00, 0x43, 0x00, 0x48, 0x00, -/* 00002770 */ 0x2D, 0x00, 0x44, 0x00, 0x45, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x5C, 0x00, -/* 00002780 */ 0x62, 0x00, 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x00, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, -/* 00002790 */ 0x00, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x78, 0x00, 0x28, 0x00, -/* 000027A0 */ 0x3F, 0x00, 0x3A, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x31, 0x00, 0x2C, 0x00, 0x38, 0x00, -/* 000027B0 */ 0x7D, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x29, 0x00, 0x2B, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, -/* 000027C0 */ 0x00, 0x00, 0x7C, 0x00, 0x5B, 0x00, 0x41, 0x00, 0x2D, 0x00, 0x57, 0x00, 0x59, 0x00, 0x2D, 0x00, -/* 000027D0 */ 0x5A, 0x00, 0x5D, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x28, 0x00, 0x3F, 0x00, -/* 000027E0 */ 0x3A, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x32, 0x00, 0x2C, 0x00, 0x38, 0x00, 0x7D, 0x00, -/* 000027F0 */ 0x29, 0x00, 0x2B, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x35, 0x00, -/* 00002800 */ 0x2C, 0x00, 0x38, 0x00, 0x7D, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x33, 0x00, 0x7D, 0x00, -/* 00002810 */ 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x32, 0x00, 0x7D, 0x00, 0x7C, 0x00, -/* 00002820 */ 0x00, 0x00, 0x7B, 0x00, 0x34, 0x00, 0x7D, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, -/* 00002830 */ 0x7B, 0x00, 0x33, 0x00, 0x7D, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, -/* 00002840 */ 0x2D, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x33, 0x00, 0x7D, 0x00, 0x29, 0x00, 0x7B, 0x00, 0x30, 0x00, -/* 00002850 */ 0x2C, 0x00, 0x32, 0x00, 0x7D, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x7B, 0x00, -/* 00002860 */ 0x32, 0x00, 0x2C, 0x00, 0x33, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x28, 0x00, -/* 00002870 */ 0x3F, 0x00, 0x3A, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x7B, 0x00, -/* 00002880 */ 0x34, 0x00, 0x2C, 0x00, 0x38, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x28, 0x00, -/* 00002890 */ 0x00, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x2D, 0x00, 0x28, 0x00, -/* 000028A0 */ 0x00, 0x00, 0x29, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x5C, 0x00, -/* 000028B0 */ 0x62, 0x00, 0x28, 0x00, 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x29, 0x00, -/* 000028C0 */ 0x2A, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x5C, 0x00, -/* 000028D0 */ 0x62, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x5E, 0x00, 0x00, 0x00, 0x24, 0x00, -/* 000028E0 */ 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x6E, 0x00, -/* 000028F0 */ 0x67, 0x00, 0x75, 0x00, 0x61, 0x00, 0x67, 0x00, 0x65, 0x00, 0x00, 0x00, 0x73, 0x00, 0x63, 0x00, -/* 00002900 */ 0x72, 0x00, 0x69, 0x00, 0x70, 0x00, 0x74, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, 0x67, 0x00, -/* 00002910 */ 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x76, 0x00, 0x61, 0x00, 0x72, 0x00, 0x69, 0x00, -/* 00002920 */ 0x61, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x65, 0x00, 0x78, 0x00, 0x74, 0x00, -/* 00002930 */ 0x65, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x00, 0x00, -/* 00002940 */ 0x75, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x65, 0x00, 0x66, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x65, 0x00, -/* 00002950 */ 0x64, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, -/* 00002960 */ 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 00002970 */ 0x69, 0x00, 0x73, 0x00, 0x41, 0x00, 0x76, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6C, 0x00, 0x61, 0x00, -/* 00002980 */ 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00002990 */ 0x65, 0x00, 0x00, 0x00, 0x73, 0x00, 0x75, 0x00, 0x62, 0x00, 0x73, 0x00, 0x65, 0x00, 0x74, 0x00, -/* 000029A0 */ 0x00, 0x00, 0x6D, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x75, 0x00, 0x6D, 0x00, -/* 000029B0 */ 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x65, 0x00, 0x67, 0x00, 0x65, 0x00, 0x72, 0x00, 0x44, 0x00, -/* 000029C0 */ 0x69, 0x00, 0x67, 0x00, 0x69, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x69, 0x00, -/* 000029D0 */ 0x6E, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x46, 0x00, 0x72, 0x00, 0x61, 0x00, -/* 000029E0 */ 0x63, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x44, 0x00, 0x69, 0x00, 0x67, 0x00, -/* 000029F0 */ 0x69, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x78, 0x00, 0x69, 0x00, -/* 00002A00 */ 0x6D, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x46, 0x00, 0x72, 0x00, 0x61, 0x00, 0x63, 0x00, 0x74, 0x00, -/* 00002A10 */ 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x44, 0x00, 0x69, 0x00, 0x67, 0x00, 0x69, 0x00, 0x74, 0x00, -/* 00002A20 */ 0x73, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x75, 0x00, -/* 00002A30 */ 0x6D, 0x00, 0x53, 0x00, 0x69, 0x00, 0x67, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x66, 0x00, 0x69, 0x00, -/* 00002A40 */ 0x63, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x44, 0x00, 0x69, 0x00, 0x67, 0x00, 0x69, 0x00, -/* 00002A50 */ 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x78, 0x00, 0x69, 0x00, 0x6D, 0x00, -/* 00002A60 */ 0x75, 0x00, 0x6D, 0x00, 0x53, 0x00, 0x69, 0x00, 0x67, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x66, 0x00, -/* 00002A70 */ 0x69, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x44, 0x00, 0x69, 0x00, 0x67, 0x00, -/* 00002A80 */ 0x69, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x62, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, -/* 00002A90 */ 0x20, 0x00, 0x66, 0x00, 0x69, 0x00, 0x74, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, -/* 00002AA0 */ 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x4D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x63, 0x00, 0x68, 0x00, -/* 00002AB0 */ 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x74, 0x00, -/* 00002AC0 */ 0x68, 0x00, 0x00, 0x00, 0x68, 0x00, 0x69, 0x00, 0x64, 0x00, 0x64, 0x00, 0x65, 0x00, 0x6E, 0x00, -/* 00002AD0 */ 0x4F, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x00, 0x00, 0x66, 0x00, -/* 00002AE0 */ 0x75, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, -/* 00002AF0 */ 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x64, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x69, 0x00, -/* 00002B00 */ 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x43, 0x00, -/* 00002B10 */ 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, -/* 00002B20 */ 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x43, 0x00, 0x6F, 0x00, -/* 00002B30 */ 0x6D, 0x00, 0x70, 0x00, 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x61, 0x00, -/* 00002B40 */ 0x74, 0x00, 0x65, 0x00, 0x43, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 00002B50 */ 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, 0x53, 0x00, -/* 00002B60 */ 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, -/* 00002B70 */ 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, -/* 00002B80 */ 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x43, 0x00, 0x6F, 0x00, -/* 00002B90 */ 0x6D, 0x00, 0x70, 0x00, 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, -/* 00002BA0 */ 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, -/* 00002BB0 */ 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, -/* 00002BC0 */ 0x2E, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, -/* 00002BD0 */ 0x72, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, -/* 00002BE0 */ 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00, -/* 00002BF0 */ 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, 0x00, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, -/* 00002C00 */ 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, -/* 00002C10 */ 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x75, 0x00, 0x63, 0x00, 0x74, 0x00, 0x6F, 0x00, -/* 00002C20 */ 0x72, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, -/* 00002C30 */ 0x65, 0x00, 0x64, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, -/* 00002C40 */ 0x73, 0x00, 0x00, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x20, 0x00, 0x63, 0x00, 0x6F, 0x00, -/* 00002C50 */ 0x6D, 0x00, 0x70, 0x00, 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, -/* 00002C60 */ 0x6D, 0x00, 0x70, 0x00, 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, 0x00, 0x00, 0x75, 0x00, 0x73, 0x00, -/* 00002C70 */ 0x61, 0x00, 0x67, 0x00, 0x65, 0x00, 0x00, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, -/* 00002C80 */ 0x00, 0x00, 0x73, 0x00, 0x65, 0x00, 0x61, 0x00, 0x72, 0x00, 0x63, 0x00, 0x68, 0x00, 0x00, 0x00, -/* 00002C90 */ 0x6E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x72, 0x00, 0x69, 0x00, 0x63, 0x00, 0x00, 0x00, -/* 00002CA0 */ 0x63, 0x00, 0x61, 0x00, 0x73, 0x00, 0x65, 0x00, 0x46, 0x00, 0x69, 0x00, 0x72, 0x00, 0x73, 0x00, -/* 00002CB0 */ 0x74, 0x00, 0x00, 0x00, 0x64, 0x00, 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, -/* 00002CC0 */ 0x74, 0x00, 0x00, 0x00, 0x73, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x69, 0x00, 0x74, 0x00, -/* 00002CD0 */ 0x69, 0x00, 0x76, 0x00, 0x69, 0x00, 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x69, 0x00, 0x67, 0x00, -/* 00002CE0 */ 0x6E, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x65, 0x00, 0x50, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x63, 0x00, -/* 00002CF0 */ 0x74, 0x00, 0x75, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, -/* 00002D00 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, -/* 00002D10 */ 0x63, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, -/* 00002D20 */ 0x6E, 0x00, 0x00, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, -/* 00002D30 */ 0x6C, 0x00, 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x64, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, -/* 00002D40 */ 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x62, 0x00, 0x6F, 0x00, -/* 00002D50 */ 0x75, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00, 0x61, 0x00, -/* 00002D60 */ 0x72, 0x00, 0x65, 0x00, 0x00, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, -/* 00002D70 */ 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, -/* 00002D80 */ 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x63, 0x00, 0x6F, 0x00, -/* 00002D90 */ 0x6D, 0x00, 0x70, 0x00, 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, 0x00, 0x00, 0x43, 0x00, 0x6F, 0x00, -/* 00002DA0 */ 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x2E, 0x00, 0x70, 0x00, -/* 00002DB0 */ 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, -/* 00002DC0 */ 0x2E, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, -/* 00002DD0 */ 0x64, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, -/* 00002DE0 */ 0x00, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00, -/* 00002DF0 */ 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, -/* 00002E00 */ 0x69, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x4E, 0x00, 0x75, 0x00, -/* 00002E10 */ 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, -/* 00002E20 */ 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, -/* 00002E30 */ 0x72, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, -/* 00002E40 */ 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, -/* 00002E50 */ 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, -/* 00002E60 */ 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, -/* 00002E70 */ 0x67, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x4E, 0x00, -/* 00002E80 */ 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, -/* 00002E90 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, -/* 00002EA0 */ 0x2E, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, -/* 00002EB0 */ 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, -/* 00002EC0 */ 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, -/* 00002ED0 */ 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x49, 0x00, -/* 00002EE0 */ 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, -/* 00002EF0 */ 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, -/* 00002F00 */ 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, -/* 00002F10 */ 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, -/* 00002F20 */ 0x74, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x50, 0x00, 0x61, 0x00, 0x72, 0x00, 0x74, 0x00, 0x73, 0x00, -/* 00002F30 */ 0x00, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x20, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, -/* 00002F40 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, -/* 00002F50 */ 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, -/* 00002F60 */ 0x74, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x50, 0x00, 0x61, 0x00, 0x72, 0x00, 0x74, 0x00, 0x73, 0x00, -/* 00002F70 */ 0x00, 0x00, 0x73, 0x00, 0x74, 0x00, 0x79, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x64, 0x00, -/* 00002F80 */ 0x65, 0x00, 0x63, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x70, 0x00, -/* 00002F90 */ 0x65, 0x00, 0x72, 0x00, 0x63, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x00, 0x00, 0x63, 0x00, -/* 00002FA0 */ 0x75, 0x00, 0x72, 0x00, 0x72, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x79, 0x00, 0x00, 0x00, -/* 00002FB0 */ 0x63, 0x00, 0x75, 0x00, 0x72, 0x00, 0x72, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x79, 0x00, -/* 00002FC0 */ 0x44, 0x00, 0x69, 0x00, 0x73, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x79, 0x00, 0x00, 0x00, -/* 00002FD0 */ 0x63, 0x00, 0x6F, 0x00, 0x64, 0x00, 0x65, 0x00, 0x00, 0x00, 0x73, 0x00, 0x79, 0x00, 0x6D, 0x00, -/* 00002FE0 */ 0x62, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x75, 0x00, 0x73, 0x00, 0x65, 0x00, 0x47, 0x00, -/* 00002FF0 */ 0x72, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x70, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, -/* 00003000 */ 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, -/* 00003010 */ 0x7A, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, -/* 00003020 */ 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, -/* 00003030 */ 0x62, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, -/* 00003040 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, -/* 00003050 */ 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, -/* 00003060 */ 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, -/* 00003070 */ 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, -/* 00003080 */ 0x74, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, -/* 00003090 */ 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, -/* 000030A0 */ 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, -/* 000030B0 */ 0x2E, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x54, 0x00, -/* 000030C0 */ 0x6F, 0x00, 0x50, 0x00, 0x61, 0x00, 0x72, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x4E, 0x00, -/* 000030D0 */ 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, -/* 000030E0 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, -/* 000030F0 */ 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x72, 0x00, 0x65, 0x00, -/* 00003100 */ 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4F, 0x00, 0x70, 0x00, -/* 00003110 */ 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x75, 0x00, -/* 00003120 */ 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x53, 0x00, -/* 00003130 */ 0x79, 0x00, 0x73, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6D, 0x00, 0x00, 0x00, 0x67, 0x00, 0x65, 0x00, -/* 00003140 */ 0x74, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, -/* 00003150 */ 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, -/* 00003160 */ 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, -/* 00003170 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, -/* 00003180 */ 0x6E, 0x00, 0x67, 0x00, 0x49, 0x00, 0x6D, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6D, 0x00, -/* 00003190 */ 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, -/* 000031A0 */ 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, -/* 000031B0 */ 0x65, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x65, 0x00, -/* 000031C0 */ 0x6E, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x50, 0x00, -/* 000031D0 */ 0x61, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x46, 0x00, 0x6F, 0x00, -/* 000031E0 */ 0x72, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, -/* 000031F0 */ 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00003200 */ 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, -/* 00003210 */ 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, -/* 00003220 */ 0x74, 0x00, 0x00, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, -/* 00003230 */ 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, -/* 00003240 */ 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x00, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, -/* 00003250 */ 0x61, 0x00, 0x74, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, -/* 00003260 */ 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, -/* 00003270 */ 0x74, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, -/* 00003280 */ 0x65, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x50, 0x00, 0x61, 0x00, 0x72, 0x00, 0x74, 0x00, 0x73, 0x00, -/* 00003290 */ 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x49, 0x00, -/* 000032A0 */ 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, 0x54, 0x00, -/* 000032B0 */ 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x53, 0x00, -/* 000032C0 */ 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x44, 0x00, 0x65, 0x00, 0x66, 0x00, -/* 000032D0 */ 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x43, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, -/* 000032E0 */ 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x75, 0x00, 0x72, 0x00, 0x65, 0x00, -/* 000032F0 */ 0x4D, 0x00, 0x65, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x65, 0x00, -/* 00003300 */ 0x6E, 0x00, 0x73, 0x00, 0x75, 0x00, 0x72, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, -/* 00003310 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, -/* 00003320 */ 0x00, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x72, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x00, 0x00, -/* 00003330 */ 0x73, 0x00, 0x68, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, -/* 00003340 */ 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, 0x32, 0x00, 0x2D, 0x00, 0x64, 0x00, 0x69, 0x00, 0x67, 0x00, -/* 00003350 */ 0x69, 0x00, 0x74, 0x00, 0x00, 0x00, 0x77, 0x00, 0x65, 0x00, 0x65, 0x00, 0x6B, 0x00, 0x64, 0x00, -/* 00003360 */ 0x61, 0x00, 0x79, 0x00, 0x00, 0x00, 0x65, 0x00, 0x72, 0x00, 0x61, 0x00, 0x00, 0x00, 0x79, 0x00, -/* 00003370 */ 0x65, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x74, 0x00, -/* 00003380 */ 0x68, 0x00, 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, 0x79, 0x00, 0x00, 0x00, 0x68, 0x00, 0x6F, 0x00, -/* 00003390 */ 0x75, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x74, 0x00, -/* 000033A0 */ 0x65, 0x00, 0x00, 0x00, 0x73, 0x00, 0x65, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x64, 0x00, -/* 000033B0 */ 0x00, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x5A, 0x00, 0x6F, 0x00, 0x6E, 0x00, -/* 000033C0 */ 0x65, 0x00, 0x4E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x74, 0x00, 0x6F, 0x00, -/* 000033D0 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, -/* 000033E0 */ 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x4C, 0x00, -/* 000033F0 */ 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, -/* 00003400 */ 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, -/* 00003410 */ 0x74, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, -/* 00003420 */ 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, -/* 00003430 */ 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x2E, 0x00, -/* 00003440 */ 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, -/* 00003450 */ 0x65, 0x00, 0x2E, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, -/* 00003460 */ 0x6C, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, -/* 00003470 */ 0x00, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x79, 0x00, 0x00, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x6C, 0x00, -/* 00003480 */ 0x00, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, -/* 00003490 */ 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, -/* 000034A0 */ 0x74, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, -/* 000034B0 */ 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, -/* 000034C0 */ 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 000034D0 */ 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, -/* 000034E0 */ 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x74, 0x00, -/* 000034F0 */ 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x54, 0x00, -/* 00003500 */ 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, -/* 00003510 */ 0x67, 0x00, 0x00, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x49, 0x00, -/* 00003520 */ 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, -/* 00003530 */ 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, -/* 00003540 */ 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, -/* 00003550 */ 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, -/* 00003560 */ 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, -/* 00003570 */ 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, -/* 00003580 */ 0x2E, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, -/* 00003590 */ 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, -/* 000035A0 */ 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, -/* 000035B0 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, -/* 000035C0 */ 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x6F, 0x00, -/* 000035D0 */ 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x50, 0x00, 0x61, 0x00, -/* 000035E0 */ 0x72, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x73, 0x00, 0x79, 0x00, 0x6D, 0x00, 0x62, 0x00, -/* 000035F0 */ 0x6F, 0x00, 0x6C, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, -/* 00003600 */ 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, -/* 00003610 */ 0x6F, 0x00, 0x6E, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x53, 0x00, 0x79, 0x00, 0x6D, 0x00, -/* 00003620 */ 0x62, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x73, 0x00, 0x79, 0x00, 0x6D, 0x00, 0x62, 0x00, -/* 00003630 */ 0x6F, 0x00, 0x6C, 0x00, 0x4C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x74, 0x00, 0x68, 0x00, -/* 00003640 */ 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, -/* 00003650 */ 0x6E, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, -/* 00003660 */ 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x53, 0x00, 0x79, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x6F, 0x00, -/* 00003670 */ 0x6C, 0x00, 0x4C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x74, 0x00, 0x68, 0x00, 0x00, 0x00, -/* 00003680 */ 0x70, 0x00, 0x61, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x46, 0x00, -/* 00003690 */ 0x6F, 0x00, 0x72, 0x00, 0x48, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x72, 0x00, 0x43, 0x00, 0x79, 0x00, -/* 000036A0 */ 0x63, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x68, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x72, 0x00, -/* 000036B0 */ 0x43, 0x00, 0x79, 0x00, 0x63, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, -/* 000036C0 */ 0x50, 0x00, 0x61, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x00, 0x00, -/* 000036D0 */ 0x45, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x4D, 0x00, 0x00, 0x00, -/* 000036E0 */ 0x64, 0x00, 0x00, 0x00, 0x6A, 0x00, 0x00, 0x00, 0x68, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x72, 0x00, -/* 000036F0 */ 0x31, 0x00, 0x32, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x68, 0x00, 0x6F, 0x00, 0x75, 0x00, -/* 00003700 */ 0x72, 0x00, 0x32, 0x00, 0x34, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x00, 0x00, -/* 00003710 */ 0x73, 0x00, 0x00, 0x00, 0x7A, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 00003720 */ 0x55, 0x00, 0x00, 0x00, 0x4C, 0x00, 0x00, 0x00, 0x4B, 0x00, 0x00, 0x00, 0x6B, 0x00, 0x00, 0x00, -/* 00003730 */ 0x5A, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x4F, 0x00, 0x00, 0x00, -/* 00003740 */ 0x58, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, -/* 00003750 */ 0x33, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x68, 0x00, 0x31, 0x00, -/* 00003760 */ 0x32, 0x00, 0x00, 0x00, 0x68, 0x00, 0x32, 0x00, 0x33, 0x00, 0x00, 0x00, 0x68, 0x00, 0x31, 0x00, -/* 00003770 */ 0x31, 0x00, 0x00, 0x00, 0x68, 0x00, 0x32, 0x00, 0x34, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, -/* 00003780 */ 0x20, 0x00, 0x00, 0x00, 0x68, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x72, 0x00, 0x43, 0x00, 0x79, 0x00, -/* 00003790 */ 0x63, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x45, 0x00, 0x74, 0x00, 0x63, 0x00, 0x2F, 0x00, -/* 000037A0 */ 0x55, 0x00, 0x6E, 0x00, 0x6B, 0x00, 0x6E, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x6E, 0x00, 0x00, 0x00, -/* 000037B0 */ 0x74, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x5A, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x65, 0x00, -/* 000037C0 */ 0x00, 0x00, 0x49, 0x00, 0x41, 0x00, 0x4E, 0x00, 0x41, 0x00, 0x20, 0x00, 0x5A, 0x00, 0x6F, 0x00, -/* 000037D0 */ 0x6E, 0x00, 0x65, 0x00, 0x20, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x20, 0x00, 0x4C, 0x00, 0x69, 0x00, -/* 000037E0 */ 0x6E, 0x00, 0x6B, 0x00, 0x20, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x20, 0x00, -/* 000037F0 */ 0x28, 0x00, 0x41, 0x00, 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, 0x2F, 0x00, 0x4C, 0x00, 0x6F, 0x00, -/* 00003800 */ 0x63, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x29, 0x00, 0x00, 0x00, -/* 00003810 */ 0x45, 0x00, 0x74, 0x00, 0x63, 0x00, 0x2F, 0x00, 0x55, 0x00, 0x54, 0x00, 0x43, 0x00, 0x00, 0x00, -/* 00003820 */ 0x45, 0x00, 0x74, 0x00, 0x63, 0x00, 0x2F, 0x00, 0x47, 0x00, 0x4D, 0x00, 0x54, 0x00, 0x00, 0x00, -/* 00003830 */ 0x55, 0x00, 0x54, 0x00, 0x43, 0x00, 0x00, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, -/* 00003840 */ 0x61, 0x00, 0x74, 0x00, 0x4D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, -/* 00003850 */ 0x72, 0x00, 0x00, 0x00, 0x62, 0x00, 0x61, 0x00, 0x73, 0x00, 0x69, 0x00, 0x63, 0x00, 0x00, 0x00, -/* 00003860 */ 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, -/* 00003870 */ 0x7A, 0x00, 0x65, 0x00, 0x64, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, -/* 00003880 */ 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, -/* 00003890 */ 0x74, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x65, 0x00, 0x64, 0x00, 0x44, 0x00, 0x65, 0x00, -/* 000038A0 */ 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x49, 0x00, -/* 000038B0 */ 0x6E, 0x00, 0x76, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x64, 0x00, 0x20, 0x00, 0x44, 0x00, -/* 000038C0 */ 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, -/* 000038D0 */ 0x6F, 0x00, 0x6E, 0x00, 0x31, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, -/* 000038E0 */ 0x6F, 0x00, 0x6E, 0x00, 0x32, 0x00, 0x00, 0x00, 0x63, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, -/* 000038F0 */ 0x65, 0x00, 0x53, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, -/* 00003900 */ 0x74, 0x00, 0x65, 0x00, 0x5F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, -/* 00003910 */ 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, -/* 00003920 */ 0x67, 0x00, 0x5F, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x72, 0x00, 0x79, 0x00, 0x50, 0x00, -/* 00003930 */ 0x6F, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, -/* 00003940 */ 0x65, 0x00, 0x5F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, -/* 00003950 */ 0x6C, 0x00, 0x65, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, -/* 00003960 */ 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x5F, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, -/* 00003970 */ 0x72, 0x00, 0x79, 0x00, 0x50, 0x00, 0x6F, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x00, 0x00, -/* 00003980 */ 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x5F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x4C, 0x00, -/* 00003990 */ 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, -/* 000039A0 */ 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x5F, 0x00, -/* 000039B0 */ 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x72, 0x00, 0x79, 0x00, 0x50, 0x00, 0x6F, 0x00, 0x69, 0x00, -/* 000039C0 */ 0x6E, 0x00, 0x74, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, -/* 000039D0 */ 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, -/* 000039E0 */ 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, -/* 000039F0 */ 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, -/* 00003A00 */ 0x2E, 0x00, 0x00, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, -/* 00003A10 */ 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, -/* 00003A20 */ 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x50, 0x00, 0x6C, 0x00, 0x75, 0x00, -/* 00003A30 */ 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x52, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, -/* 00003A40 */ 0x00, 0x00, 0x52, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, -/* 00003A50 */ 0x50, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x70, 0x00, -/* 00003A60 */ 0x6C, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x52, 0x00, 0x75, 0x00, 0x6C, 0x00, -/* 00003A70 */ 0x65, 0x00, 0x73, 0x00, 0x5F, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, -/* 00003A80 */ 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, -/* 00003A90 */ 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x5F, 0x00, 0x6E, 0x00, 0x61, 0x00, -/* 00003AA0 */ 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, -/* 00003AB0 */ 0x50, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x52, 0x00, 0x75, 0x00, -/* 00003AC0 */ 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, -/* 00003AD0 */ 0x2E, 0x00, 0x50, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x52, 0x00, -/* 00003AE0 */ 0x75, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, -/* 00003AF0 */ 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, -/* 00003B00 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, -/* 00003B10 */ 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x50, 0x00, 0x6C, 0x00, 0x75, 0x00, -/* 00003B20 */ 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x52, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, -/* 00003B30 */ 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, -/* 00003B40 */ 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x63, 0x00, -/* 00003B50 */ 0x74, 0x00, 0x00, 0x00, 0x73, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, -/* 00003B60 */ 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x50, 0x00, 0x6C, 0x00, -/* 00003B70 */ 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x52, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x65, 0x00, -/* 00003B80 */ 0x73, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, -/* 00003B90 */ 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, -/* 00003BA0 */ 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, -/* 00003BB0 */ 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x00, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, -/* 00003BC0 */ 0x00, 0x00, 0x63, 0x00, 0x61, 0x00, 0x72, 0x00, 0x64, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x61, 0x00, -/* 00003BD0 */ 0x6C, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x64, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x61, 0x00, -/* 00003BE0 */ 0x6C, 0x00, 0x00, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00003BF0 */ 0x43, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x67, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x69, 0x00, -/* 00003C00 */ 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, -/* 00003C10 */ 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x64, 0x00, 0x50, 0x00, 0x6C, 0x00, -/* 00003C20 */ 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x52, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x65, 0x00, -/* 00003C30 */ 0x73, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x68, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, -/* 00003C40 */ 0x70, 0x00, 0x72, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x6D, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x74, 0x00, -/* 00003C50 */ 0x68, 0x00, 0x2E, 0x00, 0x61, 0x00, 0x7D, 0x00, 0x7B, 0x00, 0x64, 0x00, 0x61, 0x00, 0x79, 0x00, -/* 00003C60 */ 0x2E, 0x00, 0x62, 0x00, 0x7D, 0x00, 0x7B, 0x00, 0x68, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x72, 0x00, -/* 00003C70 */ 0x2E, 0x00, 0x63, 0x00, 0x7D, 0x00, 0x7B, 0x00, 0x6D, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x75, 0x00, -/* 00003C80 */ 0x74, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x64, 0x00, 0x7D, 0x00, 0x7B, 0x00, 0x73, 0x00, 0x65, 0x00, -/* 00003C90 */ 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x2E, 0x00, 0x65, 0x00, 0x7D, 0x00, 0x00, 0x00, -/* 00003CA0 */ 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x4C, 0x00, -/* 00003CB0 */ 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x42, 0x00, 0x65, 0x00, 0x73, 0x00, -/* 00003CC0 */ 0x74, 0x00, 0x46, 0x00, 0x69, 0x00, 0x74, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, -/* 00003CD0 */ 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, -/* 00003CE0 */ 0x6C, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x6F, 0x00, 0x6B, 0x00, 0x75, 0x00, 0x70, 0x00, -/* 00003CF0 */ 0x00, 0x00, 0x66, 0x00, 0x69, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x65, 0x00, -/* 00003D00 */ 0x64, 0x00, 0x00, 0x00, 0x65, 0x00, 0x78, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x73, 0x00, -/* 00003D10 */ 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x46, 0x00, 0x69, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x65, 0x00, -/* 00003D20 */ 0x72, 0x00, 0x00, 0x00, 0x2D, 0x00, 0x75, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x73, 0x00, 0x75, 0x00, -/* 00003D30 */ 0x62, 0x00, 0x54, 0x00, 0x61, 0x00, 0x67, 0x00, 0x73, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, -/* 00003D40 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x57, 0x00, 0x69, 0x00, 0x74, 0x00, 0x68, 0x00, -/* 00003D50 */ 0x6F, 0x00, 0x75, 0x00, 0x74, 0x00, 0x53, 0x00, 0x75, 0x00, 0x62, 0x00, 0x74, 0x00, 0x61, 0x00, -/* 00003D60 */ 0x67, 0x00, 0x73, 0x00, 0x00, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x2A, 0x00, 0x3F, 0x00, 0x29, 0x00, -/* 00003D70 */ 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x2D, 0x00, 0x75, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x24, 0x00, -/* 00003D80 */ 0x00, 0x00, 0x28, 0x00, 0x5B, 0x00, 0x5E, 0x00, 0x2D, 0x00, 0x5D, 0x00, 0x2A, 0x00, 0x29, 0x00, -/* 00003D90 */ 0x2D, 0x00, 0x3F, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x2A, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x00, 0x00, -/* 00003DA0 */ 0x28, 0x00, 0x5B, 0x00, 0x5E, 0x00, 0x5F, 0x00, 0x5D, 0x00, 0x2A, 0x00, 0x29, 0x00, 0x2E, 0x00, -/* 00003DB0 */ 0x2A, 0x00, 0x00, 0x00, 0x48, 0x00, 0x61, 0x00, 0x73, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, -/* 00003DC0 */ 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x29, 0x00, 0x2A, 0x00, -/* 00003DD0 */ 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x73, 0x00, 0x65, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x00, 0x00, -/* 00003DE0 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x63, 0x00, -/* 00003DF0 */ 0x6F, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x00, 0x00, 0x66, 0x00, 0x69, 0x00, 0x74, 0x00, -/* 00003E00 */ 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x64, 0x00, 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, -/* 00003E10 */ 0x75, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00003E20 */ 0x65, 0x00, 0x00, 0x00, 0x5B, 0x00, 0x27, 0x00, 0x62, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, -/* 00003E30 */ 0x20, 0x00, 0x66, 0x00, 0x69, 0x00, 0x74, 0x00, 0x27, 0x00, 0x2C, 0x00, 0x20, 0x00, 0x27, 0x00, -/* 00003E40 */ 0x6C, 0x00, 0x6F, 0x00, 0x6F, 0x00, 0x6B, 0x00, 0x75, 0x00, 0x70, 0x00, 0x27, 0x00, 0x5D, 0x00, -/* 00003E50 */ 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, -/* 00003E60 */ 0x72, 0x00, 0x5F, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, -/* 00003E70 */ 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00003E80 */ 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x5F, 0x00, 0x64, 0x00, 0x75, 0x00, 0x6D, 0x00, -/* 00003E90 */ 0x6D, 0x00, 0x79, 0x00, 0x4E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6E, 0x00, -/* 00003EA0 */ 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, -/* 00003EB0 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x5F, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, -/* 00003EC0 */ 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, -/* 00003ED0 */ 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x5F, 0x00, 0x64, 0x00, -/* 00003EE0 */ 0x75, 0x00, 0x6D, 0x00, 0x6D, 0x00, 0x79, 0x00, 0x4E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, -/* 00003EF0 */ 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, -/* 00003F00 */ 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x5F, 0x00, -/* 00003F10 */ 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, -/* 00003F20 */ 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, -/* 00003F30 */ 0x4F, 0x00, 0x66, 0x00, 0x5F, 0x00, 0x64, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x6D, 0x00, 0x79, 0x00, -/* 00003F40 */ 0x4E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, -/* 00003F50 */ 0x43, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x63, 0x00, 0x61, 0x00, -/* 00003F60 */ 0x6C, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, -/* 00003F70 */ 0x5F, 0x00, 0x64, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x6D, 0x00, 0x79, 0x00, 0x4E, 0x00, 0x61, 0x00, -/* 00003F80 */ 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x52, 0x00, 0x65, 0x00, 0x74, 0x00, -/* 00003F90 */ 0x75, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, -/* 00003FA0 */ 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x56, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00003FB0 */ 0x75, 0x00, 0x65, 0x00, 0x73, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x4C, 0x00, 0x6F, 0x00, -/* 00003FC0 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, 0x76, 0x00, -/* 00003FD0 */ 0x65, 0x00, 0x72, 0x00, 0x73, 0x00, 0x65, 0x00, 0x64, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, -/* 00003FE0 */ 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x56, 0x00, 0x61, 0x00, -/* 00003FF0 */ 0x6C, 0x00, 0x75, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x2D, 0x00, 0x63, 0x00, 0x6F, 0x00, -/* 00004000 */ 0x2D, 0x00, 0x00, 0x00, 0x2D, 0x00, 0x75, 0x00, 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x2D, 0x00, -/* 00004010 */ 0x5B, 0x00, 0x5E, 0x00, 0x5C, 0x00, 0x2D, 0x00, 0x5D, 0x00, 0x5B, 0x00, 0x5E, 0x00, 0x5C, 0x00, -/* 00004020 */ 0x2D, 0x00, 0x5D, 0x00, 0x3F, 0x00, 0x2D, 0x00, 0x5B, 0x00, 0x5E, 0x00, 0x5C, 0x00, 0x2D, 0x00, -/* 00004030 */ 0x5D, 0x00, 0x2B, 0x00, 0x29, 0x00, 0x2A, 0x00, 0x2D, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x2D, 0x00, -/* 00004040 */ 0x28, 0x00, 0x5B, 0x00, 0x5E, 0x00, 0x5C, 0x00, 0x2D, 0x00, 0x5D, 0x00, 0x2B, 0x00, 0x29, 0x00, -/* 00004050 */ 0x2E, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x28, 0x00, 0x5B, 0x00, 0x5E, 0x00, 0x5F, 0x00, 0x5D, 0x00, -/* 00004060 */ 0x2A, 0x00, 0x29, 0x00, 0x5F, 0x00, 0x3F, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x2B, 0x00, 0x29, 0x00, -/* 00004070 */ 0x3F, 0x00, 0x00, 0x00, 0x63, 0x00, 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, -/* 00004080 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x43, 0x00, 0x6F, 0x00, -/* 00004090 */ 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x53, 0x00, -/* 000040A0 */ 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, 0x2D, 0x00, 0x75, 0x00, -/* 000040B0 */ 0x2D, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x69, 0x00, -/* 000040C0 */ 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x7A, 0x00, -/* 000040D0 */ 0x65, 0x00, 0x64, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x4F, 0x00, 0x62, 0x00, -/* 000040E0 */ 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x61, 0x00, -/* 000040F0 */ 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00004100 */ 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00, -/* 00004110 */ 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x75, 0x00, 0x73, 0x00, -/* 00004120 */ 0x61, 0x00, 0x67, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x73, 0x00, 0x65, 0x00, -/* 00004130 */ 0x6E, 0x00, 0x73, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x76, 0x00, 0x69, 0x00, 0x74, 0x00, -/* 00004140 */ 0x79, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x69, 0x00, 0x67, 0x00, 0x6E, 0x00, 0x6F, 0x00, -/* 00004150 */ 0x72, 0x00, 0x65, 0x00, 0x50, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x74, 0x00, 0x75, 0x00, -/* 00004160 */ 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, -/* 00004170 */ 0x63, 0x00, 0x61, 0x00, 0x73, 0x00, 0x65, 0x00, 0x46, 0x00, 0x69, 0x00, 0x72, 0x00, 0x73, 0x00, -/* 00004180 */ 0x74, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x65, 0x00, -/* 00004190 */ 0x72, 0x00, 0x69, 0x00, 0x63, 0x00, 0x00, 0x00, 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, -/* 000041A0 */ 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x64, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, -/* 000041B0 */ 0x6E, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, -/* 000041C0 */ 0x6C, 0x00, 0x65, 0x00, 0x4D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, -/* 000041D0 */ 0x72, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x57, 0x00, 0x69, 0x00, 0x6E, 0x00, -/* 000041E0 */ 0x64, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x73, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x45, 0x00, 0x63, 0x00, -/* 000041F0 */ 0x6D, 0x00, 0x61, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, -/* 00004200 */ 0x61, 0x00, 0x72, 0x00, 0x4D, 0x00, 0x61, 0x00, 0x70, 0x00, 0x00, 0x00, 0x47, 0x00, 0x72, 0x00, -/* 00004210 */ 0x65, 0x00, 0x67, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x43, 0x00, -/* 00004220 */ 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, -/* 00004230 */ 0x67, 0x00, 0x72, 0x00, 0x65, 0x00, 0x67, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x79, 0x00, 0x00, 0x00, -/* 00004240 */ 0x48, 0x00, 0x65, 0x00, 0x62, 0x00, 0x72, 0x00, 0x65, 0x00, 0x77, 0x00, 0x43, 0x00, 0x61, 0x00, -/* 00004250 */ 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x68, 0x00, -/* 00004260 */ 0x65, 0x00, 0x62, 0x00, 0x72, 0x00, 0x65, 0x00, 0x77, 0x00, 0x00, 0x00, 0x48, 0x00, 0x69, 0x00, -/* 00004270 */ 0x6A, 0x00, 0x72, 0x00, 0x69, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, -/* 00004280 */ 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x69, 0x00, 0x73, 0x00, 0x6C, 0x00, 0x61, 0x00, -/* 00004290 */ 0x6D, 0x00, 0x69, 0x00, 0x63, 0x00, 0x00, 0x00, 0x4A, 0x00, 0x61, 0x00, 0x70, 0x00, 0x61, 0x00, -/* 000042A0 */ 0x6E, 0x00, 0x65, 0x00, 0x73, 0x00, 0x65, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, -/* 000042B0 */ 0x6E, 0x00, 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6A, 0x00, 0x61, 0x00, 0x70, 0x00, -/* 000042C0 */ 0x61, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, 0x4A, 0x00, 0x75, 0x00, -/* 000042D0 */ 0x6C, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, -/* 000042E0 */ 0x6E, 0x00, 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6A, 0x00, 0x75, 0x00, 0x6C, 0x00, -/* 000042F0 */ 0x69, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x4B, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x65, 0x00, -/* 00004300 */ 0x61, 0x00, 0x6E, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, -/* 00004310 */ 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6B, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, -/* 00004320 */ 0x6E, 0x00, 0x00, 0x00, 0x55, 0x00, 0x6D, 0x00, 0x41, 0x00, 0x6C, 0x00, 0x51, 0x00, 0x75, 0x00, -/* 00004330 */ 0x72, 0x00, 0x61, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, -/* 00004340 */ 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x69, 0x00, 0x73, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x6D, 0x00, -/* 00004350 */ 0x69, 0x00, 0x63, 0x00, 0x2D, 0x00, 0x63, 0x00, 0x69, 0x00, 0x76, 0x00, 0x69, 0x00, 0x6C, 0x00, -/* 00004360 */ 0x00, 0x00, 0x54, 0x00, 0x68, 0x00, 0x61, 0x00, 0x69, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00004370 */ 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x74, 0x00, 0x68, 0x00, -/* 00004380 */ 0x61, 0x00, 0x69, 0x00, 0x00, 0x00, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x77, 0x00, 0x61, 0x00, -/* 00004390 */ 0x6E, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x61, 0x00, -/* 000043A0 */ 0x72, 0x00, 0x00, 0x00, 0x74, 0x00, 0x61, 0x00, 0x69, 0x00, 0x77, 0x00, 0x61, 0x00, 0x6E, 0x00, -/* 000043B0 */ 0x00, 0x00, 0x45, 0x00, 0x63, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, -/* 000043C0 */ 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x57, 0x00, 0x69, 0x00, -/* 000043D0 */ 0x6E, 0x00, 0x64, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x73, 0x00, 0x54, 0x00, 0x65, 0x00, 0x6D, 0x00, -/* 000043E0 */ 0x70, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, 0x57, 0x00, 0x69, 0x00, -/* 000043F0 */ 0x6E, 0x00, 0x64, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x73, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x45, 0x00, -/* 00004400 */ 0x63, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, -/* 00004410 */ 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x72, 0x00, -/* 00004420 */ 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x57, 0x00, 0x65, 0x00, 0x65, 0x00, 0x6B, 0x00, 0x64, 0x00, -/* 00004430 */ 0x61, 0x00, 0x79, 0x00, 0x45, 0x00, 0x72, 0x00, 0x61, 0x00, 0x4D, 0x00, 0x6F, 0x00, 0x6E, 0x00, -/* 00004440 */ 0x74, 0x00, 0x68, 0x00, 0x50, 0x00, 0x61, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, -/* 00004450 */ 0x6E, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x72, 0x00, 0x65, 0x00, 0x63, 0x00, -/* 00004460 */ 0x74, 0x00, 0x44, 0x00, 0x61, 0x00, 0x79, 0x00, 0x48, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x72, 0x00, -/* 00004470 */ 0x4D, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x74, 0x00, 0x65, 0x00, 0x53, 0x00, 0x65, 0x00, -/* 00004480 */ 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x4D, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x74, 0x00, -/* 00004490 */ 0x68, 0x00, 0x50, 0x00, 0x61, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, -/* 000044A0 */ 0x00, 0x00, 0x75, 0x00, 0x70, 0x00, 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x50, 0x00, -/* 000044B0 */ 0x61, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x53, 0x00, 0x74, 0x00, -/* 000044C0 */ 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x73, 0x00, 0x00, 0x00, 0x74, 0x00, 0x65, 0x00, -/* 000044D0 */ 0x6D, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, 0x64, 0x00, -/* 000044E0 */ 0x61, 0x00, 0x79, 0x00, 0x6F, 0x00, 0x66, 0x00, 0x77, 0x00, 0x65, 0x00, 0x65, 0x00, 0x6B, 0x00, -/* 000044F0 */ 0x2E, 0x00, 0x61, 0x00, 0x62, 0x00, 0x62, 0x00, 0x72, 0x00, 0x65, 0x00, 0x76, 0x00, 0x69, 0x00, -/* 00004500 */ 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, 0x79, 0x00, -/* 00004510 */ 0x6F, 0x00, 0x66, 0x00, 0x77, 0x00, 0x65, 0x00, 0x65, 0x00, 0x6B, 0x00, 0x2E, 0x00, 0x66, 0x00, -/* 00004520 */ 0x75, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x79, 0x00, 0x65, 0x00, 0x61, 0x00, 0x72, 0x00, -/* 00004530 */ 0x2E, 0x00, 0x61, 0x00, 0x62, 0x00, 0x62, 0x00, 0x72, 0x00, 0x65, 0x00, 0x76, 0x00, 0x69, 0x00, -/* 00004540 */ 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x00, 0x00, 0x79, 0x00, 0x65, 0x00, 0x61, 0x00, -/* 00004550 */ 0x72, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x6D, 0x00, -/* 00004560 */ 0x6F, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x68, 0x00, 0x2E, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x6D, 0x00, -/* 00004570 */ 0x65, 0x00, 0x72, 0x00, 0x69, 0x00, 0x63, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x6F, 0x00, 0x6E, 0x00, -/* 00004580 */ 0x74, 0x00, 0x68, 0x00, 0x2E, 0x00, 0x61, 0x00, 0x62, 0x00, 0x62, 0x00, 0x72, 0x00, 0x65, 0x00, -/* 00004590 */ 0x76, 0x00, 0x69, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x00, 0x00, 0x6D, 0x00, -/* 000045A0 */ 0x6F, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x68, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x75, 0x00, 0x6C, 0x00, -/* 000045B0 */ 0x6C, 0x00, 0x00, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x7A, 0x00, 0x6F, 0x00, -/* 000045C0 */ 0x6E, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x61, 0x00, 0x62, 0x00, 0x62, 0x00, 0x72, 0x00, 0x65, 0x00, -/* 000045D0 */ 0x76, 0x00, 0x69, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x00, 0x00, 0x74, 0x00, -/* 000045E0 */ 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x7A, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x2E, 0x00, -/* 000045F0 */ 0x66, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x28, 0x00, 0x00, 0x00, -/* 00004600 */ 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x5C, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, -/* 00004610 */ 0x6F, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x2E, 0x00, 0x28, 0x00, 0x5B, 0x00, -/* 00004620 */ 0x61, 0x00, 0x2D, 0x00, 0x7A, 0x00, 0x5D, 0x00, 0x2A, 0x00, 0x29, 0x00, 0x28, 0x00, 0x3F, 0x00, -/* 00004630 */ 0x3A, 0x00, 0x5C, 0x00, 0x28, 0x00, 0x5B, 0x00, 0x30, 0x00, 0x2D, 0x00, 0x39, 0x00, 0x5D, 0x00, -/* 00004640 */ 0x5C, 0x00, 0x29, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x45, 0x00, 0x72, 0x00, -/* 00004650 */ 0x72, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x20, 0x00, 0x77, 0x00, 0x68, 0x00, 0x65, 0x00, 0x6E, 0x00, -/* 00004660 */ 0x20, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x72, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, -/* 00004670 */ 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x20, 0x00, 0x77, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x64, 0x00, -/* 00004680 */ 0x6F, 0x00, 0x77, 0x00, 0x73, 0x00, 0x20, 0x00, 0x72, 0x00, 0x65, 0x00, 0x74, 0x00, 0x75, 0x00, -/* 00004690 */ 0x72, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x64, 0x00, 0x20, 0x00, 0x77, 0x00, 0x65, 0x00, 0x65, 0x00, -/* 000046A0 */ 0x6B, 0x00, 0x64, 0x00, 0x61, 0x00, 0x79, 0x00, 0x2F, 0x00, 0x45, 0x00, 0x72, 0x00, 0x61, 0x00, -/* 000046B0 */ 0x2F, 0x00, 0x4D, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x68, 0x00, 0x20, 0x00, 0x70, 0x00, -/* 000046C0 */ 0x61, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x3B, 0x00, 0x20, 0x00, -/* 000046D0 */ 0x72, 0x00, 0x65, 0x00, 0x67, 0x00, 0x65, 0x00, 0x78, 0x00, 0x20, 0x00, 0x72, 0x00, 0x65, 0x00, -/* 000046E0 */ 0x74, 0x00, 0x75, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x64, 0x00, 0x20, 0x00, 0x6E, 0x00, -/* 000046F0 */ 0x75, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x20, 0x00, 0x0A, 0x00, 0x49, 0x00, 0x6E, 0x00, -/* 00004700 */ 0x70, 0x00, 0x75, 0x00, 0x74, 0x00, 0x20, 0x00, 0x77, 0x00, 0x61, 0x00, 0x73, 0x00, 0x3A, 0x00, -/* 00004710 */ 0x20, 0x00, 0x27, 0x00, 0x00, 0x00, 0x27, 0x00, 0x0A, 0x00, 0x52, 0x00, 0x65, 0x00, 0x67, 0x00, -/* 00004720 */ 0x65, 0x00, 0x78, 0x00, 0x3A, 0x00, 0x20, 0x00, 0x27, 0x00, 0x00, 0x00, 0x28, 0x00, 0x5C, 0x00, -/* 00004730 */ 0x2E, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x29, 0x00, -/* 00004740 */ 0x5C, 0x00, 0x2E, 0x00, 0x28, 0x00, 0x5B, 0x00, 0x61, 0x00, 0x2D, 0x00, 0x7A, 0x00, 0x5D, 0x00, -/* 00004750 */ 0x2A, 0x00, 0x29, 0x00, 0x28, 0x00, 0x5C, 0x00, 0x28, 0x00, 0x5B, 0x00, 0x30, 0x00, 0x2D, 0x00, -/* 00004760 */ 0x39, 0x00, 0x5D, 0x00, 0x5C, 0x00, 0x29, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x7D, 0x00, 0x27, 0x00, -/* 00004770 */ 0x00, 0x00, 0x66, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x00, 0x00, -/* 00004780 */ 0x2E, 0x00, 0x00, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x61, 0x00, 0x62, 0x00, 0x62, 0x00, 0x72, 0x00, -/* 00004790 */ 0x65, 0x00, 0x76, 0x00, 0x69, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x00, 0x00, -/* 000047A0 */ 0x61, 0x00, 0x62, 0x00, 0x62, 0x00, 0x72, 0x00, 0x65, 0x00, 0x76, 0x00, 0x69, 0x00, 0x61, 0x00, -/* 000047B0 */ 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x28, 0x00, 0x31, 0x00, 0x29, 0x00, 0x00, 0x00, 0x29, 0x00, -/* 000047C0 */ 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x5C, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, -/* 000047D0 */ 0x6F, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x5C, 0x00, 0x2E, 0x00, 0x28, 0x00, 0x5B, 0x00, 0x61, 0x00, -/* 000047E0 */ 0x2D, 0x00, 0x7A, 0x00, 0x5D, 0x00, 0x2A, 0x00, 0x29, 0x00, 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, -/* 000047F0 */ 0x5C, 0x00, 0x28, 0x00, 0x5B, 0x00, 0x30, 0x00, 0x2D, 0x00, 0x39, 0x00, 0x5D, 0x00, 0x5C, 0x00, -/* 00004800 */ 0x29, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x45, 0x00, 0x72, 0x00, 0x72, 0x00, -/* 00004810 */ 0x6F, 0x00, 0x72, 0x00, 0x20, 0x00, 0x77, 0x00, 0x68, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x20, 0x00, -/* 00004820 */ 0x63, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x72, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x69, 0x00, -/* 00004830 */ 0x6E, 0x00, 0x67, 0x00, 0x20, 0x00, 0x77, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x6F, 0x00, -/* 00004840 */ 0x77, 0x00, 0x73, 0x00, 0x20, 0x00, 0x72, 0x00, 0x65, 0x00, 0x74, 0x00, 0x75, 0x00, 0x72, 0x00, -/* 00004850 */ 0x6E, 0x00, 0x65, 0x00, 0x64, 0x00, 0x20, 0x00, 0x64, 0x00, 0x61, 0x00, 0x79, 0x00, 0x2F, 0x00, -/* 00004860 */ 0x68, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x72, 0x00, 0x2F, 0x00, 0x6D, 0x00, 0x69, 0x00, 0x6E, 0x00, -/* 00004870 */ 0x75, 0x00, 0x74, 0x00, 0x65, 0x00, 0x2F, 0x00, 0x73, 0x00, 0x65, 0x00, 0x63, 0x00, 0x6F, 0x00, -/* 00004880 */ 0x6E, 0x00, 0x64, 0x00, 0x2F, 0x00, 0x6D, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x68, 0x00, -/* 00004890 */ 0x20, 0x00, 0x70, 0x00, 0x61, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, -/* 000048A0 */ 0x3B, 0x00, 0x20, 0x00, 0x72, 0x00, 0x65, 0x00, 0x67, 0x00, 0x65, 0x00, 0x78, 0x00, 0x20, 0x00, -/* 000048B0 */ 0x72, 0x00, 0x65, 0x00, 0x74, 0x00, 0x75, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x64, 0x00, -/* 000048C0 */ 0x20, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x20, 0x00, 0x0A, 0x00, -/* 000048D0 */ 0x49, 0x00, 0x6E, 0x00, 0x70, 0x00, 0x75, 0x00, 0x74, 0x00, 0x20, 0x00, 0x77, 0x00, 0x61, 0x00, -/* 000048E0 */ 0x73, 0x00, 0x3A, 0x00, 0x20, 0x00, 0x27, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x69, 0x00, 0x6E, 0x00, -/* 000048F0 */ 0x74, 0x00, 0x65, 0x00, 0x67, 0x00, 0x65, 0x00, 0x72, 0x00, 0x28, 0x00, 0x32, 0x00, 0x29, 0x00, -/* 00004900 */ 0x7D, 0x00, 0x00, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x65, 0x00, 0x67, 0x00, 0x65, 0x00, -/* 00004910 */ 0x72, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x65, 0x00, 0x67, 0x00, -/* 00004920 */ 0x65, 0x00, 0x72, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, 0x79, 0x00, 0x6F, 0x00, -/* 00004930 */ 0x66, 0x00, 0x77, 0x00, 0x65, 0x00, 0x65, 0x00, 0x6B, 0x00, 0x00, 0x00, 0x45, 0x00, 0x72, 0x00, -/* 00004940 */ 0x72, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x20, 0x00, 0x77, 0x00, 0x68, 0x00, 0x65, 0x00, 0x6E, 0x00, -/* 00004950 */ 0x20, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x72, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, -/* 00004960 */ 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x20, 0x00, 0x77, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x64, 0x00, -/* 00004970 */ 0x6F, 0x00, 0x77, 0x00, 0x73, 0x00, 0x20, 0x00, 0x72, 0x00, 0x65, 0x00, 0x74, 0x00, 0x75, 0x00, -/* 00004980 */ 0x72, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x64, 0x00, 0x20, 0x00, 0x79, 0x00, 0x65, 0x00, 0x61, 0x00, -/* 00004990 */ 0x72, 0x00, 0x3B, 0x00, 0x20, 0x00, 0x72, 0x00, 0x65, 0x00, 0x67, 0x00, 0x65, 0x00, 0x78, 0x00, -/* 000049A0 */ 0x20, 0x00, 0x72, 0x00, 0x65, 0x00, 0x74, 0x00, 0x75, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x65, 0x00, -/* 000049B0 */ 0x64, 0x00, 0x20, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x7B, 0x00, -/* 000049C0 */ 0x79, 0x00, 0x65, 0x00, 0x61, 0x00, 0x72, 0x00, 0x2E, 0x00, 0x61, 0x00, 0x62, 0x00, 0x62, 0x00, -/* 000049D0 */ 0x72, 0x00, 0x65, 0x00, 0x76, 0x00, 0x69, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, -/* 000049E0 */ 0x28, 0x00, 0x32, 0x00, 0x29, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x79, 0x00, 0x65, 0x00, -/* 000049F0 */ 0x61, 0x00, 0x72, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x7D, 0x00, -/* 00004A00 */ 0x00, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x7A, 0x00, 0x6F, 0x00, 0x6E, 0x00, -/* 00004A10 */ 0x65, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x7B, 0x00, 0x79, 0x00, 0x65, 0x00, 0x61, 0x00, 0x72, 0x00, -/* 00004A20 */ 0x5C, 0x00, 0x2E, 0x00, 0x5B, 0x00, 0x61, 0x00, 0x2D, 0x00, 0x7A, 0x00, 0x5D, 0x00, 0x2A, 0x00, -/* 00004A30 */ 0x28, 0x00, 0x5C, 0x00, 0x28, 0x00, 0x5B, 0x00, 0x30, 0x00, 0x2D, 0x00, 0x39, 0x00, 0x5D, 0x00, -/* 00004A40 */ 0x5C, 0x00, 0x29, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x5C, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x31, 0x00, -/* 00004A50 */ 0x32, 0x00, 0x48, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x72, 0x00, 0x43, 0x00, 0x6C, 0x00, 0x6F, 0x00, -/* 00004A60 */ 0x63, 0x00, 0x6B, 0x00, 0x00, 0x00, 0x32, 0x00, 0x34, 0x00, 0x48, 0x00, 0x6F, 0x00, 0x75, 0x00, -/* 00004A70 */ 0x72, 0x00, 0x43, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x6B, 0x00, 0x00, 0x00, 0x6E, 0x00, -/* 00004A80 */ 0x6F, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x00, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, -/* 00004A90 */ 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, -/* 00004AA0 */ 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, -/* 00004AB0 */ 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, -/* 00004AC0 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6D, 0x00, 0x70, 0x00, -/* 00004AD0 */ 0x00, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, -/* 00004AE0 */ 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, -/* 00004AF0 */ 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, -/* 00004B00 */ 0x65, 0x00, 0x2E, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, -/* 00004B10 */ 0x65, 0x00, 0x64, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, -/* 00004B20 */ 0x73, 0x00, 0x00, 0x00, 0xFE, 0x07, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x6A, 0x00, 0x00, 0x00, 0x9B, -/* 00004B30 */ 0x00, 0x00, 0x00, 0x05, 0x01, 0x00, 0x00, 0x6F, 0x01, 0x00, 0x00, 0x70, 0x01, 0x00, 0x00, 0x7E, -/* 00004B40 */ 0x01, 0x00, 0x00, 0x8F, 0x01, 0x00, 0x00, 0xB7, 0x01, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x00, 0xE1, -/* 00004B50 */ 0x01, 0x00, 0x00, 0x5B, 0x02, 0x00, 0x00, 0x7A, 0x02, 0x00, 0x00, 0x7B, 0x02, 0x00, 0x00, 0xAE, -/* 00004B60 */ 0x02, 0x00, 0x00, 0xED, 0x02, 0x00, 0x00, 0x12, 0x03, 0x00, 0x00, 0x44, 0x03, 0x00, 0x00, 0x79, -/* 00004B70 */ 0x03, 0x00, 0x00, 0x7A, 0x03, 0x00, 0x00, 0x8B, 0x03, 0x00, 0x00, 0xAE, 0x03, 0x00, 0x00, 0xAF, -/* 00004B80 */ 0x03, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0xF5, 0x03, 0x00, 0x00, 0x2E, 0x04, 0x00, 0x00, 0x6F, -/* 00004B90 */ 0x04, 0x00, 0x00, 0x70, 0x04, 0x00, 0x00, 0xB1, 0x04, 0x00, 0x00, 0xE9, 0x04, 0x00, 0x00, 0xEA, -/* 00004BA0 */ 0x04, 0x00, 0x00, 0x64, 0x05, 0x00, 0x00, 0xC5, 0x05, 0x00, 0x00, 0x54, 0x06, 0x00, 0x00, 0xBF, -/* 00004BB0 */ 0x06, 0x00, 0x00, 0xE0, 0x06, 0x00, 0x00, 0xF6, 0x06, 0x00, 0x00, 0x08, 0x07, 0x00, 0x00, 0x28, -/* 00004BC0 */ 0x07, 0x00, 0x00, 0x29, 0x07, 0x00, 0x00, 0x40, 0x07, 0x00, 0x00, 0x8A, 0x07, 0x00, 0x00, 0x99, -/* 00004BD0 */ 0x07, 0x00, 0x00, 0x9A, 0x07, 0x00, 0x00, 0xB8, 0x07, 0x00, 0x00, 0xE3, 0x07, 0x00, 0x00, 0xFF, -/* 00004BE0 */ 0x07, 0x00, 0x00, 0x11, 0x08, 0x00, 0x00, 0x12, 0x08, 0x00, 0x00, 0x6F, 0x08, 0x00, 0x00, 0x9D, -/* 00004BF0 */ 0x08, 0x00, 0x00, 0xAF, 0x08, 0x00, 0x00, 0xB0, 0x08, 0x00, 0x00, 0xDA, 0x08, 0x00, 0x00, 0xE8, -/* 00004C00 */ 0x08, 0x00, 0x00, 0xF4, 0x08, 0x00, 0x00, 0xFA, 0x08, 0x00, 0x00, 0xFB, 0x08, 0x00, 0x00, 0x1F, -/* 00004C10 */ 0x09, 0x00, 0x00, 0x41, 0x09, 0x00, 0x00, 0x63, 0x09, 0x00, 0x00, 0x85, 0x09, 0x00, 0x00, 0xA7, -/* 00004C20 */ 0x09, 0x00, 0x00, 0xC5, 0x09, 0x00, 0x00, 0xE5, 0x09, 0x00, 0x00, 0xE6, 0x09, 0x00, 0x00, 0x12, -/* 00004C30 */ 0x0A, 0x00, 0x00, 0x13, 0x0A, 0x00, 0x00, 0x31, 0x0A, 0x00, 0x00, 0x57, 0x0A, 0x00, 0x00, 0x81, -/* 00004C40 */ 0x0A, 0x00, 0x00, 0xA7, 0x0A, 0x00, 0x00, 0xCC, 0x0A, 0x00, 0x00, 0xDA, 0x0A, 0x00, 0x00, 0xDB, -/* 00004C50 */ 0x0A, 0x00, 0x00, 0x2F, 0x0B, 0x00, 0x00, 0x7F, 0x0B, 0x00, 0x00, 0xDD, 0x0B, 0x00, 0x00, 0x39, -/* 00004C60 */ 0x0C, 0x00, 0x00, 0xAF, 0x0C, 0x00, 0x00, 0xDF, 0x0C, 0x00, 0x00, 0x34, 0x0D, 0x00, 0x00, 0x76, -/* 00004C70 */ 0x0D, 0x00, 0x00, 0xC0, 0x0D, 0x00, 0x00, 0xC7, 0x0D, 0x00, 0x00, 0xC8, 0x0D, 0x00, 0x00, 0x14, -/* 00004C80 */ 0x0E, 0x00, 0x00, 0x60, 0x0E, 0x00, 0x00, 0xA6, 0x0E, 0x00, 0x00, 0xEC, 0x0E, 0x00, 0x00, 0xED, -/* 00004C90 */ 0x0E, 0x00, 0x00, 0x39, 0x0F, 0x00, 0x00, 0x83, 0x0F, 0x00, 0x00, 0xBD, 0x0F, 0x00, 0x00, 0xBE, -/* 00004CA0 */ 0x0F, 0x00, 0x00, 0x0C, 0x10, 0x00, 0x00, 0x62, 0x10, 0x00, 0x00, 0xB8, 0x10, 0x00, 0x00, 0xB9, -/* 00004CB0 */ 0x10, 0x00, 0x00, 0xEE, 0x10, 0x00, 0x00, 0xEF, 0x10, 0x00, 0x00, 0x2D, 0x11, 0x00, 0x00, 0x65, -/* 00004CC0 */ 0x11, 0x00, 0x00, 0x66, 0x11, 0x00, 0x00, 0xD1, 0x11, 0x00, 0x00, 0x02, 0x12, 0x00, 0x00, 0x12, -/* 00004CD0 */ 0x12, 0x00, 0x00, 0x31, 0x12, 0x00, 0x00, 0x54, 0x12, 0x00, 0x00, 0x77, 0x12, 0x00, 0x00, 0x98, -/* 00004CE0 */ 0x12, 0x00, 0x00, 0xB8, 0x12, 0x00, 0x00, 0xC7, 0x12, 0x00, 0x00, 0xD5, 0x12, 0x00, 0x00, 0xD6, -/* 00004CF0 */ 0x12, 0x00, 0x00, 0xE6, 0x12, 0x00, 0x00, 0x3D, 0x13, 0x00, 0x00, 0x94, 0x13, 0x00, 0x00, 0x0F, -/* 00004D00 */ 0x14, 0x00, 0x00, 0x83, 0x14, 0x00, 0x00, 0x05, 0x15, 0x00, 0x00, 0x85, 0x15, 0x00, 0x00, 0xCD, -/* 00004D10 */ 0x15, 0x00, 0x00, 0x3F, 0x16, 0x00, 0x00, 0x40, 0x16, 0x00, 0x00, 0x9E, 0x16, 0x00, 0x00, 0xFA, -/* 00004D20 */ 0x16, 0x00, 0x00, 0x50, 0x17, 0x00, 0x00, 0xBB, 0x17, 0x00, 0x00, 0x28, 0x18, 0x00, 0x00, 0xA7, -/* 00004D30 */ 0x18, 0x00, 0x00, 0x24, 0x19, 0x00, 0x00, 0x9B, 0x19, 0x00, 0x00, 0x0E, 0x1A, 0x00, 0x00, 0x6B, -/* 00004D40 */ 0x1A, 0x00, 0x00, 0x6C, 0x1A, 0x00, 0x00, 0xA5, 0x1A, 0x00, 0x00, 0x21, 0x1B, 0x00, 0x00, 0xAE, -/* 00004D50 */ 0x1B, 0x00, 0x00, 0xD6, 0x1B, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x50, 0x1C, 0x00, 0x00, 0x5B, -/* 00004D60 */ 0x1C, 0x00, 0x00, 0xA4, 0x1C, 0x00, 0x00, 0xFC, 0x1C, 0x00, 0x00, 0x62, 0x1D, 0x00, 0x00, 0x63, -/* 00004D70 */ 0x1D, 0x00, 0x00, 0x89, 0x1D, 0x00, 0x00, 0xE9, 0x1D, 0x00, 0x00, 0x31, 0x1E, 0x00, 0x00, 0x57, -/* 00004D80 */ 0x1E, 0x00, 0x00, 0x7D, 0x1E, 0x00, 0x00, 0x7E, 0x1E, 0x00, 0x00, 0xBB, 0x1E, 0x00, 0x00, 0xF2, -/* 00004D90 */ 0x1E, 0x00, 0x00, 0xF3, 0x1E, 0x00, 0x00, 0x59, 0x1F, 0x00, 0x00, 0x5A, 0x1F, 0x00, 0x00, 0xCA, -/* 00004DA0 */ 0x1F, 0x00, 0x00, 0x48, 0x20, 0x00, 0x00, 0x4F, 0x20, 0x00, 0x00, 0x50, 0x20, 0x00, 0x00, 0x64, -/* 00004DB0 */ 0x20, 0x00, 0x00, 0xFB, 0x20, 0x00, 0x00, 0x6C, 0x21, 0x00, 0x00, 0x73, 0x21, 0x00, 0x00, 0x74, -/* 00004DC0 */ 0x21, 0x00, 0x00, 0xBF, 0x21, 0x00, 0x00, 0xE6, 0x21, 0x00, 0x00, 0xF7, 0x21, 0x00, 0x00, 0x0A, -/* 00004DD0 */ 0x22, 0x00, 0x00, 0x1B, 0x22, 0x00, 0x00, 0x2F, 0x22, 0x00, 0x00, 0x42, 0x22, 0x00, 0x00, 0x4A, -/* 00004DE0 */ 0x22, 0x00, 0x00, 0x6F, 0x22, 0x00, 0x00, 0x81, 0x22, 0x00, 0x00, 0x93, 0x22, 0x00, 0x00, 0xA5, -/* 00004DF0 */ 0x22, 0x00, 0x00, 0xB8, 0x22, 0x00, 0x00, 0xC0, 0x22, 0x00, 0x00, 0xE5, 0x22, 0x00, 0x00, 0x15, -/* 00004E00 */ 0x23, 0x00, 0x00, 0x7C, 0x23, 0x00, 0x00, 0xC4, 0x23, 0x00, 0x00, 0x13, 0x24, 0x00, 0x00, 0x1B, -/* 00004E10 */ 0x24, 0x00, 0x00, 0x4A, 0x24, 0x00, 0x00, 0x79, 0x24, 0x00, 0x00, 0x04, 0x25, 0x00, 0x00, 0x71, -/* 00004E20 */ 0x25, 0x00, 0x00, 0xE4, 0x25, 0x00, 0x00, 0xEC, 0x25, 0x00, 0x00, 0xED, 0x25, 0x00, 0x00, 0x1D, -/* 00004E30 */ 0x26, 0x00, 0x00, 0x4C, 0x26, 0x00, 0x00, 0x73, 0x26, 0x00, 0x00, 0x84, 0x26, 0x00, 0x00, 0xA8, -/* 00004E40 */ 0x26, 0x00, 0x00, 0xB2, 0x26, 0x00, 0x00, 0xB8, 0x26, 0x00, 0x00, 0xB9, 0x26, 0x00, 0x00, 0x13, -/* 00004E50 */ 0x27, 0x00, 0x00, 0x80, 0x27, 0x00, 0x00, 0xEC, 0x27, 0x00, 0x00, 0x54, 0x28, 0x00, 0x00, 0xC3, -/* 00004E60 */ 0x28, 0x00, 0x00, 0x23, 0x29, 0x00, 0x00, 0x41, 0x29, 0x00, 0x00, 0x42, 0x29, 0x00, 0x00, 0x67, -/* 00004E70 */ 0x29, 0x00, 0x00, 0x92, 0x29, 0x00, 0x00, 0xC7, 0x29, 0x00, 0x00, 0xEB, 0x29, 0x00, 0x00, 0xF5, -/* 00004E80 */ 0x29, 0x00, 0x00, 0xF6, 0x29, 0x00, 0x00, 0x2A, 0x2A, 0x00, 0x00, 0x41, 0x2A, 0x00, 0x00, 0x90, -/* 00004E90 */ 0x2A, 0x00, 0x00, 0xC2, 0x2A, 0x00, 0x00, 0xE6, 0x2A, 0x00, 0x00, 0xF7, 0x2A, 0x00, 0x00, 0x1D, -/* 00004EA0 */ 0x2B, 0x00, 0x00, 0x27, 0x2B, 0x00, 0x00, 0x28, 0x2B, 0x00, 0x00, 0x48, 0x2B, 0x00, 0x00, 0x4F, -/* 00004EB0 */ 0x2B, 0x00, 0x00, 0x50, 0x2B, 0x00, 0x00, 0xB5, 0x2B, 0x00, 0x00, 0xE1, 0x2B, 0x00, 0x00, 0x27, -/* 00004EC0 */ 0x2C, 0x00, 0x00, 0x3D, 0x2C, 0x00, 0x00, 0x47, 0x2C, 0x00, 0x00, 0x4E, 0x2C, 0x00, 0x00, 0x4F, -/* 00004ED0 */ 0x2C, 0x00, 0x00, 0x80, 0x2C, 0x00, 0x00, 0xB7, 0x2C, 0x00, 0x00, 0xBE, 0x2C, 0x00, 0x00, 0xBF, -/* 00004EE0 */ 0x2C, 0x00, 0x00, 0xC7, 0x2C, 0x00, 0x00, 0x0A, 0x2D, 0x00, 0x00, 0x11, 0x2D, 0x00, 0x00, 0x3B, -/* 00004EF0 */ 0x2D, 0x00, 0x00, 0x42, 0x2D, 0x00, 0x00, 0xB3, 0x2D, 0x00, 0x00, 0x10, 0x2E, 0x00, 0x00, 0x60, -/* 00004F00 */ 0x2E, 0x00, 0x00, 0x68, 0x2E, 0x00, 0x00, 0xAF, 0x2E, 0x00, 0x00, 0xD3, 0x2E, 0x00, 0x00, 0xF1, -/* 00004F10 */ 0x2E, 0x00, 0x00, 0xFB, 0x2E, 0x00, 0x00, 0xFC, 0x2E, 0x00, 0x00, 0x1C, 0x2F, 0x00, 0x00, 0x38, -/* 00004F20 */ 0x2F, 0x00, 0x00, 0x4F, 0x2F, 0x00, 0x00, 0x7F, 0x2F, 0x00, 0x00, 0xA1, 0x2F, 0x00, 0x00, 0xAF, -/* 00004F30 */ 0x2F, 0x00, 0x00, 0xB0, 0x2F, 0x00, 0x00, 0xCA, 0x2F, 0x00, 0x00, 0x08, 0x30, 0x00, 0x00, 0x37, -/* 00004F40 */ 0x30, 0x00, 0x00, 0x54, 0x30, 0x00, 0x00, 0x6F, 0x30, 0x00, 0x00, 0x81, 0x30, 0x00, 0x00, 0x8F, -/* 00004F50 */ 0x30, 0x00, 0x00, 0x90, 0x30, 0x00, 0x00, 0xAE, 0x30, 0x00, 0x00, 0xD0, 0x30, 0x00, 0x00, 0x14, -/* 00004F60 */ 0x31, 0x00, 0x00, 0x62, 0x31, 0x00, 0x00, 0xA5, 0x31, 0x00, 0x00, 0xF4, 0x31, 0x00, 0x00, 0x24, -/* 00004F70 */ 0x32, 0x00, 0x00, 0x6D, 0x32, 0x00, 0x00, 0x87, 0x32, 0x00, 0x00, 0x95, 0x32, 0x00, 0x00, 0x96, -/* 00004F80 */ 0x32, 0x00, 0x00, 0xCE, 0x32, 0x00, 0x00, 0xD8, 0x32, 0x00, 0x00, 0xDF, 0x32, 0x00, 0x00, 0xE0, -/* 00004F90 */ 0x32, 0x00, 0x00, 0xE8, 0x32, 0x00, 0x00, 0x4C, 0x33, 0x00, 0x00, 0xB3, 0x33, 0x00, 0x00, 0x0A, -/* 00004FA0 */ 0x34, 0x00, 0x00, 0x11, 0x34, 0x00, 0x00, 0x74, 0x34, 0x00, 0x00, 0x7B, 0x34, 0x00, 0x00, 0xC3, -/* 00004FB0 */ 0x34, 0x00, 0x00, 0x12, 0x35, 0x00, 0x00, 0x2D, 0x35, 0x00, 0x00, 0x35, 0x35, 0x00, 0x00, 0x6B, -/* 00004FC0 */ 0x35, 0x00, 0x00, 0xDE, 0x35, 0x00, 0x00, 0xFF, 0x35, 0x00, 0x00, 0x12, 0x36, 0x00, 0x00, 0x25, -/* 00004FD0 */ 0x36, 0x00, 0x00, 0x38, 0x36, 0x00, 0x00, 0x4B, 0x36, 0x00, 0x00, 0x5E, 0x36, 0x00, 0x00, 0x71, -/* 00004FE0 */ 0x36, 0x00, 0x00, 0x7C, 0x36, 0x00, 0x00, 0x7D, 0x36, 0x00, 0x00, 0xD0, 0x36, 0x00, 0x00, 0xD1, -/* 00004FF0 */ 0x36, 0x00, 0x00, 0xEF, 0x36, 0x00, 0x00, 0xF6, 0x36, 0x00, 0x00, 0xF7, 0x36, 0x00, 0x00, 0xFF, -/* 00005000 */ 0x36, 0x00, 0x00, 0x4B, 0x37, 0x00, 0x00, 0x52, 0x37, 0x00, 0x00, 0x76, 0x37, 0x00, 0x00, 0x7D, -/* 00005010 */ 0x37, 0x00, 0x00, 0xEE, 0x37, 0x00, 0x00, 0x36, 0x38, 0x00, 0x00, 0x3E, 0x38, 0x00, 0x00, 0x89, -/* 00005020 */ 0x38, 0x00, 0x00, 0xAC, 0x38, 0x00, 0x00, 0xE8, 0x38, 0x00, 0x00, 0x2D, 0x39, 0x00, 0x00, 0x57, -/* 00005030 */ 0x39, 0x00, 0x00, 0x71, 0x39, 0x00, 0x00, 0x7F, 0x39, 0x00, 0x00, 0x80, 0x39, 0x00, 0x00, 0xE0, -/* 00005040 */ 0x39, 0x00, 0x00, 0x11, 0x3A, 0x00, 0x00, 0x42, 0x3A, 0x00, 0x00, 0x84, 0x3A, 0x00, 0x00, 0xCB, -/* 00005050 */ 0x3A, 0x00, 0x00, 0xDD, 0x3A, 0x00, 0x00, 0xDE, 0x3A, 0x00, 0x00, 0xFD, 0x3A, 0x00, 0x00, 0x0B, -/* 00005060 */ 0x3B, 0x00, 0x00, 0x15, 0x3B, 0x00, 0x00, 0x16, 0x3B, 0x00, 0x00, 0x42, 0x3B, 0x00, 0x00, 0x59, -/* 00005070 */ 0x3B, 0x00, 0x00, 0x60, 0x3B, 0x00, 0x00, 0x61, 0x3B, 0x00, 0x00, 0x8B, 0x3B, 0x00, 0x00, 0x8C, -/* 00005080 */ 0x3B, 0x00, 0x00, 0x94, 0x3B, 0x00, 0x00, 0xDB, 0x3B, 0x00, 0x00, 0xE2, 0x3B, 0x00, 0x00, 0x0E, -/* 00005090 */ 0x3C, 0x00, 0x00, 0x15, 0x3C, 0x00, 0x00, 0x72, 0x3C, 0x00, 0x00, 0xD0, 0x3C, 0x00, 0x00, 0xD8, -/* 000050A0 */ 0x3C, 0x00, 0x00, 0x16, 0x3D, 0x00, 0x00, 0x3E, 0x3D, 0x00, 0x00, 0x65, 0x3D, 0x00, 0x00, 0x66, -/* 000050B0 */ 0x3D, 0x00, 0x00, 0x8F, 0x3D, 0x00, 0x00, 0xC9, 0x3D, 0x00, 0x00, 0xE3, 0x3D, 0x00, 0x00, 0x06, -/* 000050C0 */ 0x3E, 0x00, 0x00, 0x23, 0x3E, 0x00, 0x00, 0x3E, 0x3E, 0x00, 0x00, 0x5C, 0x3E, 0x00, 0x00, 0x78, -/* 000050D0 */ 0x3E, 0x00, 0x00, 0xB6, 0x3E, 0x00, 0x00, 0xEF, 0x3E, 0x00, 0x00, 0x10, 0x3F, 0x00, 0x00, 0x31, -/* 000050E0 */ 0x3F, 0x00, 0x00, 0x58, 0x3F, 0x00, 0x00, 0x78, 0x3F, 0x00, 0x00, 0x99, 0x3F, 0x00, 0x00, 0xB2, -/* 000050F0 */ 0x3F, 0x00, 0x00, 0xCF, 0x3F, 0x00, 0x00, 0xEE, 0x3F, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x0E, -/* 00005100 */ 0x40, 0x00, 0x00, 0x0F, 0x40, 0x00, 0x00, 0x46, 0x40, 0x00, 0x00, 0x50, 0x40, 0x00, 0x00, 0x51, -/* 00005110 */ 0x40, 0x00, 0x00, 0x88, 0x40, 0x00, 0x00, 0xBD, 0x40, 0x00, 0x00, 0xEB, 0x40, 0x00, 0x00, 0x02, -/* 00005120 */ 0x41, 0x00, 0x00, 0x13, 0x41, 0x00, 0x00, 0x31, 0x41, 0x00, 0x00, 0x3B, 0x41, 0x00, 0x00, 0x42, -/* 00005130 */ 0x41, 0x00, 0x00, 0x43, 0x41, 0x00, 0x00, 0x4B, 0x41, 0x00, 0x00, 0xA9, 0x41, 0x00, 0x00, 0xFE, -/* 00005140 */ 0x41, 0x00, 0x00, 0x05, 0x42, 0x00, 0x00, 0x29, 0x42, 0x00, 0x00, 0x30, 0x42, 0x00, 0x00, 0xA1, -/* 00005150 */ 0x42, 0x00, 0x00, 0x1B, 0x43, 0x00, 0x00, 0x96, 0x43, 0x00, 0x00, 0xC9, 0x43, 0x00, 0x00, 0x45, -/* 00005160 */ 0x44, 0x00, 0x00, 0x4D, 0x44, 0x00, 0x00, 0xB8, 0x44, 0x00, 0x00, 0xE7, 0x44, 0x00, 0x00, 0xF6, -/* 00005170 */ 0x44, 0x00, 0x00, 0x1A, 0x45, 0x00, 0x00, 0x5E, 0x45, 0x00, 0x00, 0x6F, 0x45, 0x00, 0x00, 0xB4, -/* 00005180 */ 0x45, 0x00, 0x00, 0xBE, 0x45, 0x00, 0x00, 0xBF, 0x45, 0x00, 0x00, 0xE3, 0x45, 0x00, 0x00, 0x1D, -/* 00005190 */ 0x46, 0x00, 0x00, 0x44, 0x46, 0x00, 0x00, 0x7E, 0x46, 0x00, 0x00, 0xC4, 0x46, 0x00, 0x00, 0xEE, -/* 000051A0 */ 0x46, 0x00, 0x00, 0x1F, 0x47, 0x00, 0x00, 0x3E, 0x47, 0x00, 0x00, 0x8E, 0x47, 0x00, 0x00, 0xC2, -/* 000051B0 */ 0x47, 0x00, 0x00, 0xF3, 0x47, 0x00, 0x00, 0x47, 0x48, 0x00, 0x00, 0x7B, 0x48, 0x00, 0x00, 0xC8, -/* 000051C0 */ 0x48, 0x00, 0x00, 0xE2, 0x48, 0x00, 0x00, 0x31, 0x49, 0x00, 0x00, 0x59, 0x49, 0x00, 0x00, 0x6F, -/* 000051D0 */ 0x49, 0x00, 0x00, 0x81, 0x49, 0x00, 0x00, 0x8F, 0x49, 0x00, 0x00, 0x90, 0x49, 0x00, 0x00, 0xC2, -/* 000051E0 */ 0x49, 0x00, 0x00, 0xF5, 0x49, 0x00, 0x00, 0x3F, 0x4A, 0x00, 0x00, 0x71, 0x4A, 0x00, 0x00, 0x9F, -/* 000051F0 */ 0x4A, 0x00, 0x00, 0xD8, 0x4A, 0x00, 0x00, 0xEE, 0x4A, 0x00, 0x00, 0x00, 0x4B, 0x00, 0x00, 0x0E, -/* 00005200 */ 0x4B, 0x00, 0x00, 0x0F, 0x4B, 0x00, 0x00, 0x30, 0x4B, 0x00, 0x00, 0x6E, 0x4B, 0x00, 0x00, 0x7A, -/* 00005210 */ 0x4B, 0x00, 0x00, 0x7B, 0x4B, 0x00, 0x00, 0xA8, 0x4B, 0x00, 0x00, 0xEE, 0x4B, 0x00, 0x00, 0x15, -/* 00005220 */ 0x4C, 0x00, 0x00, 0x48, 0x4C, 0x00, 0x00, 0x5D, 0x4C, 0x00, 0x00, 0xAD, 0x4C, 0x00, 0x00, 0xFB, -/* 00005230 */ 0x4C, 0x00, 0x00, 0x4C, 0x4D, 0x00, 0x00, 0x5A, 0x4D, 0x00, 0x00, 0x5B, 0x4D, 0x00, 0x00, 0xA1, -/* 00005240 */ 0x4D, 0x00, 0x00, 0xAB, 0x4D, 0x00, 0x00, 0xAC, 0x4D, 0x00, 0x00, 0xD1, 0x4D, 0x00, 0x00, 0xE8, -/* 00005250 */ 0x4D, 0x00, 0x00, 0xEF, 0x4D, 0x00, 0x00, 0xF0, 0x4D, 0x00, 0x00, 0x0A, 0x4E, 0x00, 0x00, 0x20, -/* 00005260 */ 0x4E, 0x00, 0x00, 0x3E, 0x4E, 0x00, 0x00, 0x6A, 0x4E, 0x00, 0x00, 0x78, 0x4E, 0x00, 0x00, 0xB4, -/* 00005270 */ 0x4E, 0x00, 0x00, 0xBF, 0x4E, 0x00, 0x00, 0xC0, 0x4E, 0x00, 0x00, 0xD6, 0x4E, 0x00, 0x00, 0x12, -/* 00005280 */ 0x4F, 0x00, 0x00, 0x1D, 0x4F, 0x00, 0x00, 0x1E, 0x4F, 0x00, 0x00, 0x34, 0x4F, 0x00, 0x00, 0x6A, -/* 00005290 */ 0x4F, 0x00, 0x00, 0x75, 0x4F, 0x00, 0x00, 0x76, 0x4F, 0x00, 0x00, 0x94, 0x4F, 0x00, 0x00, 0xD1, -/* 000052A0 */ 0x4F, 0x00, 0x00, 0xDC, 0x4F, 0x00, 0x00, 0xDD, 0x4F, 0x00, 0x00, 0xF3, 0x4F, 0x00, 0x00, 0x14, -/* 000052B0 */ 0x50, 0x00, 0x00, 0x2D, 0x50, 0x00, 0x00, 0x5D, 0x50, 0x00, 0x00, 0x8E, 0x50, 0x00, 0x00, 0x9C, -/* 000052C0 */ 0x50, 0x00, 0x00, 0xB4, 0x50, 0x00, 0x00, 0xBE, 0x50, 0x00, 0x00, 0xC6, 0x50, 0x00, 0x00, 0xC7, -/* 000052D0 */ 0x50, 0x00, 0x00, 0xEE, 0x50, 0x00, 0x00, 0x32, 0x51, 0x00, 0x00, 0x59, 0x51, 0x00, 0x00, 0x5A, -/* 000052E0 */ 0x51, 0x00, 0x00, 0x7D, 0x51, 0x00, 0x00, 0xA2, 0x51, 0x00, 0x00, 0xDC, 0x51, 0x00, 0x00, 0xEA, -/* 000052F0 */ 0x51, 0x00, 0x00, 0xEB, 0x51, 0x00, 0x00, 0x0F, 0x52, 0x00, 0x00, 0x41, 0x52, 0x00, 0x00, 0x4F, -/* 00005300 */ 0x52, 0x00, 0x00, 0x50, 0x52, 0x00, 0x00, 0x74, 0x52, 0x00, 0x00, 0xA6, 0x52, 0x00, 0x00, 0xB4, -/* 00005310 */ 0x52, 0x00, 0x00, 0xB5, 0x52, 0x00, 0x00, 0x04, 0x53, 0x00, 0x00, 0x7D, 0x53, 0x00, 0x00, 0x8B, -/* 00005320 */ 0x53, 0x00, 0x00, 0x8C, 0x53, 0x00, 0x00, 0xA6, 0x53, 0x00, 0x00, 0xB0, 0x53, 0x00, 0x00, 0xB1, -/* 00005330 */ 0x53, 0x00, 0x00, 0xCA, 0x53, 0x00, 0x00, 0xD0, 0x53, 0x00, 0x00, 0xD1, 0x53, 0x00, 0x00, 0xD9, -/* 00005340 */ 0x53, 0x00, 0x00, 0x34, 0x54, 0x00, 0x00, 0x85, 0x54, 0x00, 0x00, 0xB8, 0x54, 0x00, 0x00, 0xBF, -/* 00005350 */ 0x54, 0x00, 0x00, 0x18, 0x55, 0x00, 0x00, 0x66, 0x55, 0x00, 0x00, 0x6D, 0x55, 0x00, 0x00, 0x96, -/* 00005360 */ 0x55, 0x00, 0x00, 0x9D, 0x55, 0x00, 0x00, 0xD9, 0x55, 0x00, 0x00, 0x2C, 0x56, 0x00, 0x00, 0x79, -/* 00005370 */ 0x56, 0x00, 0x00, 0xC6, 0x56, 0x00, 0x00, 0x20, 0x57, 0x00, 0x00, 0x39, 0x57, 0x00, 0x00, 0x41, -/* 00005380 */ 0x57, 0x00, 0x00, 0x98, 0x57, 0x00, 0x00, 0xBF, 0x57, 0x00, 0x00, 0xE2, 0x57, 0x00, 0x00, 0x10, -/* 00005390 */ 0x58, 0x00, 0x00, 0x58, 0x58, 0x00, 0x00, 0xC5, 0x58, 0x00, 0x00, 0xD3, 0x58, 0x00, 0x00, 0xF6, -/* 000053A0 */ 0x58, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x01, 0x59, 0x00, 0x00, 0x1A, 0x59, 0x00, 0x00, 0x21, -/* 000053B0 */ 0x59, 0x00, 0x00, 0x22, 0x59, 0x00, 0x00, 0x3C, 0x59, 0x00, 0x00, 0x66, 0x59, 0x00, 0x00, 0x90, -/* 000053C0 */ 0x59, 0x00, 0x00, 0x96, 0x59, 0x00, 0x00, 0x97, 0x59, 0x00, 0x00, 0x9F, 0x59, 0x00, 0x00, 0x0A, -/* 000053D0 */ 0x5A, 0x00, 0x00, 0x3A, 0x5A, 0x00, 0x00, 0x41, 0x5A, 0x00, 0x00, 0x7A, 0x5A, 0x00, 0x00, 0x82, -/* 000053E0 */ 0x5A, 0x00, 0x00, 0xAA, 0x5A, 0x00, 0x00, 0xEF, 0x5A, 0x00, 0x00, 0x53, 0x5B, 0x00, 0x00, 0xD3, -/* 000053F0 */ 0x5B, 0x00, 0x00, 0xD4, 0x5B, 0x00, 0x00, 0x46, 0x5C, 0x00, 0x00, 0x77, 0x5C, 0x00, 0x00, 0xC6, -/* 00005400 */ 0x5C, 0x00, 0x00, 0x18, 0x5D, 0x00, 0x00, 0x6C, 0x5D, 0x00, 0x00, 0xA4, 0x5D, 0x00, 0x00, 0xF6, -/* 00005410 */ 0x5D, 0x00, 0x00, 0x48, 0x5E, 0x00, 0x00, 0x9D, 0x5E, 0x00, 0x00, 0x09, 0x5F, 0x00, 0x00, 0x5F, -/* 00005420 */ 0x5F, 0x00, 0x00, 0x60, 0x5F, 0x00, 0x00, 0x7F, 0x5F, 0x00, 0x00, 0x9E, 0x5F, 0x00, 0x00, 0xD0, -/* 00005430 */ 0x5F, 0x00, 0x00, 0xD1, 0x5F, 0x00, 0x00, 0x48, 0x60, 0x00, 0x00, 0xB5, 0x60, 0x00, 0x00, 0x08, -/* 00005440 */ 0x61, 0x00, 0x00, 0x4B, 0x61, 0x00, 0x00, 0x4C, 0x61, 0x00, 0x00, 0xC9, 0x61, 0x00, 0x00, 0x5D, -/* 00005450 */ 0x62, 0x00, 0x00, 0xE0, 0x62, 0x00, 0x00, 0x63, 0x63, 0x00, 0x00, 0xD6, 0x63, 0x00, 0x00, 0xD7, -/* 00005460 */ 0x63, 0x00, 0x00, 0x41, 0x64, 0x00, 0x00, 0xBA, 0x64, 0x00, 0x00, 0xBB, 0x64, 0x00, 0x00, 0x1E, -/* 00005470 */ 0x65, 0x00, 0x00, 0xAD, 0x65, 0x00, 0x00, 0x56, 0x66, 0x00, 0x00, 0xEA, 0x66, 0x00, 0x00, 0x81, -/* 00005480 */ 0x67, 0x00, 0x00, 0x25, 0x68, 0x00, 0x00, 0x39, 0x68, 0x00, 0x00, 0x3A, 0x68, 0x00, 0x00, 0x6A, -/* 00005490 */ 0x68, 0x00, 0x00, 0xD6, 0x68, 0x00, 0x00, 0x46, 0x69, 0x00, 0x00, 0xB6, 0x69, 0x00, 0x00, 0x28, -/* 000054A0 */ 0x6A, 0x00, 0x00, 0x9C, 0x6A, 0x00, 0x00, 0x10, 0x6B, 0x00, 0x00, 0x5A, 0x6B, 0x00, 0x00, 0x5B, -/* 000054B0 */ 0x6B, 0x00, 0x00, 0xC8, 0x6B, 0x00, 0x00, 0xC9, 0x6B, 0x00, 0x00, 0x15, 0x6C, 0x00, 0x00, 0x89, -/* 000054C0 */ 0x6C, 0x00, 0x00, 0x1B, 0x6D, 0x00, 0x00, 0xAD, 0x6D, 0x00, 0x00, 0xAE, 0x6D, 0x00, 0x00, 0xE2, -/* 000054D0 */ 0x6D, 0x00, 0x00, 0x06, 0x6E, 0x00, 0x00, 0x42, 0x6E, 0x00, 0x00, 0x5C, 0x6E, 0x00, 0x00, 0x7B, -/* 000054E0 */ 0x6E, 0x00, 0x00, 0x89, 0x6E, 0x00, 0x00, 0x8A, 0x6E, 0x00, 0x00, 0xC3, 0x6E, 0x00, 0x00, 0xDD, -/* 000054F0 */ 0x6E, 0x00, 0x00, 0xFA, 0x6E, 0x00, 0x00, 0x08, 0x6F, 0x00, 0x00, 0x09, 0x6F, 0x00, 0x00, 0x2D, -/* 00005500 */ 0x6F, 0x00, 0x00, 0x52, 0x6F, 0x00, 0x00, 0x73, 0x6F, 0x00, 0x00, 0x8F, 0x6F, 0x00, 0x00, 0xB6, -/* 00005510 */ 0x6F, 0x00, 0x00, 0xE2, 0x6F, 0x00, 0x00, 0xF0, 0x6F, 0x00, 0x00, 0xF1, 0x6F, 0x00, 0x00, 0x0D, -/* 00005520 */ 0x70, 0x00, 0x00, 0x34, 0x70, 0x00, 0x00, 0x60, 0x70, 0x00, 0x00, 0x6E, 0x70, 0x00, 0x00, 0x6F, -/* 00005530 */ 0x70, 0x00, 0x00, 0x8B, 0x70, 0x00, 0x00, 0xB4, 0x70, 0x00, 0x00, 0xC2, 0x70, 0x00, 0x00, 0xC3, -/* 00005540 */ 0x70, 0x00, 0x00, 0xDF, 0x70, 0x00, 0x00, 0x0A, 0x71, 0x00, 0x00, 0x0B, 0x71, 0x00, 0x00, 0x55, -/* 00005550 */ 0x71, 0x00, 0x00, 0x94, 0x71, 0x00, 0x00, 0xD6, 0x71, 0x00, 0x00, 0x0B, 0x72, 0x00, 0x00, 0x2D, -/* 00005560 */ 0x72, 0x00, 0x00, 0x43, 0x72, 0x00, 0x00, 0x44, 0x72, 0x00, 0x00, 0x5F, 0x72, 0x00, 0x00, 0xC5, -/* 00005570 */ 0x72, 0x00, 0x00, 0x34, 0x73, 0x00, 0x00, 0x78, 0x73, 0x00, 0x00, 0xCE, 0x73, 0x00, 0x00, 0xE4, -/* 00005580 */ 0x73, 0x00, 0x00, 0xE5, 0x73, 0x00, 0x00, 0x0A, 0x74, 0x00, 0x00, 0x7C, 0x74, 0x00, 0x00, 0xDD, -/* 00005590 */ 0x74, 0x00, 0x00, 0x38, 0x75, 0x00, 0x00, 0x4E, 0x75, 0x00, 0x00, 0x4F, 0x75, 0x00, 0x00, 0xAD, -/* 000055A0 */ 0x75, 0x00, 0x00, 0xC8, 0x75, 0x00, 0x00, 0xDA, 0x75, 0x00, 0x00, 0xE8, 0x75, 0x00, 0x00, 0xE9, -/* 000055B0 */ 0x75, 0x00, 0x00, 0x1B, 0x76, 0x00, 0x00, 0x1C, 0x76, 0x00, 0x00, 0x34, 0x76, 0x00, 0x00, 0x3F, -/* 000055C0 */ 0x76, 0x00, 0x00, 0x49, 0x76, 0x00, 0x00, 0x4A, 0x76, 0x00, 0x00, 0x81, 0x76, 0x00, 0x00, 0xA9, -/* 000055D0 */ 0x76, 0x00, 0x00, 0xAA, 0x76, 0x00, 0x00, 0xCB, 0x76, 0x00, 0x00, 0xF3, 0x76, 0x00, 0x00, 0xFD, -/* 000055E0 */ 0x76, 0x00, 0x00, 0xFE, 0x76, 0x00, 0x00, 0x4A, 0x77, 0x00, 0x00, 0x50, 0x77, 0x00, 0x00, 0x51, -/* 000055F0 */ 0x77, 0x00, 0x00, 0x59, 0x77, 0x00, 0x00, 0xB4, 0x77, 0x00, 0x00, 0xE3, 0x77, 0x00, 0x00, 0xEA, -/* 00005600 */ 0x77, 0x00, 0x00, 0x3D, 0x78, 0x00, 0x00, 0x9A, 0x78, 0x00, 0x00, 0xF5, 0x78, 0x00, 0x00, 0x1F, -/* 00005610 */ 0x79, 0x00, 0x00, 0x26, 0x79, 0x00, 0x00, 0x5A, 0x79, 0x00, 0x00, 0x61, 0x79, 0x00, 0x00, 0x93, -/* 00005620 */ 0x79, 0x00, 0x00, 0xAD, 0x79, 0x00, 0x00, 0xB5, 0x79, 0x00, 0x00, 0xF4, 0x79, 0x00, 0x00, 0x21, -/* 00005630 */ 0x7A, 0x00, 0x00, 0x40, 0x7A, 0x00, 0x00, 0x5A, 0x7A, 0x00, 0x00, 0x64, 0x7A, 0x00, 0x00, 0x65, -/* 00005640 */ 0x7A, 0x00, 0x00, 0x89, 0x7A, 0x00, 0x00, 0xA8, 0x7A, 0x00, 0x00, 0xE4, 0x7A, 0x00, 0x00, 0x1B, -/* 00005650 */ 0x7B, 0x00, 0x00, 0x1C, 0x7B, 0x00, 0x00, 0x59, 0x7B, 0x00, 0x00, 0x77, 0x7B, 0x00, 0x00, 0x85, -/* 00005660 */ 0x7B, 0x00, 0x00, 0x8F, 0x7B, 0x00, 0x00, 0x90, 0x7B, 0x00, 0x00, 0xB1, 0x7B, 0x00, 0x00, 0xF5, -/* 00005670 */ 0x7B, 0x00, 0x00, 0x7D, 0x7C, 0x00, 0x00, 0xB8, 0x7C, 0x00, 0x00, 0xB9, 0x7C, 0x00, 0x00, 0xFB, -/* 00005680 */ 0x7C, 0x00, 0x00, 0x05, 0x7D, 0x00, 0x00, 0x06, 0x7D, 0x00, 0x00, 0x1B, 0x7D, 0x00, 0x00, 0x22, -/* 00005690 */ 0x7D, 0x00, 0x00, 0x23, 0x7D, 0x00, 0x00, 0x2B, 0x7D, 0x00, 0x00, 0x84, 0x7D, 0x00, 0x00, 0xD1, -/* 000056A0 */ 0x7D, 0x00, 0x00, 0xD8, 0x7D, 0x00, 0x00, 0x04, 0x7E, 0x00, 0x00, 0x0B, 0x7E, 0x00, 0x00, 0x61, -/* 000056B0 */ 0x7E, 0x00, 0x00, 0x69, 0x7E, 0x00, 0x00, 0xA1, 0x7E, 0x00, 0x00, 0xCF, 0x7E, 0x00, 0x00, 0xE6, -/* 000056C0 */ 0x7E, 0x00, 0x00, 0xF0, 0x7E, 0x00, 0x00, 0xF1, 0x7E, 0x00, 0x00, 0x0A, 0x7F, 0x00, 0x00, 0x62, -/* 000056D0 */ 0x7F, 0x00, 0x00, 0x93, 0x7F, 0x00, 0x00, 0xA6, 0x7F, 0x00, 0x00, 0xA7, 0x7F, 0x00, 0x00, 0xC1, -/* 000056E0 */ 0x7F, 0x00, 0x00, 0xEE, 0x7F, 0x00, 0x00, 0x09, 0x80, 0x00, 0x00, 0x2F, 0x80, 0x00, 0x00, 0x94, -/* 000056F0 */ 0x80, 0x00, 0x00, 0xD4, 0x80, 0x00, 0x00, 0xE6, 0x80, 0x00, 0x00, 0xE7, 0x80, 0x00, 0x00, 0x1E, -/* 00005700 */ 0x81, 0x00, 0x00, 0x5A, 0x81, 0x00, 0x00, 0x96, 0x81, 0x00, 0x00, 0xA8, 0x81, 0x00, 0x00, 0xA9, -/* 00005710 */ 0x81, 0x00, 0x00, 0xF6, 0x81, 0x00, 0x00, 0x2C, 0x82, 0x00, 0x00, 0x88, 0x82, 0x00, 0x00, 0xC4, -/* 00005720 */ 0x82, 0x00, 0x00, 0x10, 0x83, 0x00, 0x00, 0x44, 0x83, 0x00, 0x00, 0x56, 0x83, 0x00, 0x00, 0x64, -/* 00005730 */ 0x83, 0x00, 0x00, 0x65, 0x83, 0x00, 0x00, 0x79, 0x83, 0x00, 0x00, 0x83, 0x83, 0x00, 0x00, 0x84, -/* 00005740 */ 0x83, 0x00, 0x00, 0x99, 0x83, 0x00, 0x00, 0xA0, 0x83, 0x00, 0x00, 0xA1, 0x83, 0x00, 0x00, 0xA9, -/* 00005750 */ 0x83, 0x00, 0x00, 0x14, 0x84, 0x00, 0x00, 0x1B, 0x84, 0x00, 0x00, 0x47, 0x84, 0x00, 0x00, 0x4E, -/* 00005760 */ 0x84, 0x00, 0x00, 0xBF, 0x84, 0x00, 0x00, 0xF0, 0x84, 0x00, 0x00, 0xF8, 0x84, 0x00, 0x00, 0x4C, -/* 00005770 */ 0x85, 0x00, 0x00, 0x67, 0x85, 0x00, 0x00, 0x9F, 0x85, 0x00, 0x00, 0xE1, 0x85, 0x00, 0x00, 0x3D, -/* 00005780 */ 0x86, 0x00, 0x00, 0x65, 0x86, 0x00, 0x00, 0x73, 0x86, 0x00, 0x00, 0x7F, 0x86, 0x00, 0x00, 0x80, -/* 00005790 */ 0x86, 0x00, 0x00, 0x97, 0x86, 0x00, 0x00, 0x9E, 0x86, 0x00, 0x00, 0x9F, 0x86, 0x00, 0x00, 0xDB, -/* 000057A0 */ 0x86, 0x00, 0x00, 0xDC, 0x86, 0x00, 0x00, 0xE4, 0x86, 0x00, 0x00, 0x33, 0x87, 0x00, 0x00, 0x3A, -/* 000057B0 */ 0x87, 0x00, 0x00, 0x93, 0x87, 0x00, 0x00, 0xBF, 0x87, 0x00, 0x00, 0xC6, 0x87, 0x00, 0x00, 0xEE, -/* 000057C0 */ 0x87, 0x00, 0x00, 0xF5, 0x87, 0x00, 0x00, 0x79, 0x88, 0x00, 0x00, 0xE7, 0x88, 0x00, 0x00, 0x2C, -/* 000057D0 */ 0x89, 0x00, 0x00, 0x71, 0x89, 0x00, 0x00, 0x79, 0x89, 0x00, 0x00, 0xD9, 0x89, 0x00, 0x00, 0x2A, -/* 000057E0 */ 0x8A, 0x00, 0x00, 0x86, 0x8A, 0x00, 0x00, 0xC2, 0x8A, 0x00, 0x00, 0x27, 0x8B, 0x00, 0x00, 0x54, -/* 000057F0 */ 0x8B, 0x00, 0x00, 0x82, 0x8B, 0x00, 0x00, 0xB0, 0x8B, 0x00, 0x00, 0xB1, 0x8B, 0x00, 0x00, 0xE6, -/* 00005800 */ 0x8B, 0x00, 0x00, 0x1B, 0x8C, 0x00, 0x00, 0x53, 0x8C, 0x00, 0x00, 0xA5, 0x8C, 0x00, 0x00, 0x01, -/* 00005810 */ 0x8D, 0x00, 0x00, 0x6F, 0x8D, 0x00, 0x00, 0xE1, 0x8D, 0x00, 0x00, 0x16, 0x8E, 0x00, 0x00, 0x4B, -/* 00005820 */ 0x8E, 0x00, 0x00, 0x55, 0x8E, 0x00, 0x00, 0x5C, 0x8E, 0x00, 0x00, 0x5D, 0x8E, 0x00, 0x00, 0x65, -/* 00005830 */ 0x8E, 0x00, 0x00, 0xBC, 0x8E, 0x00, 0x00, 0xF0, 0x8E, 0x00, 0x00, 0xF7, 0x8E, 0x00, 0x00, 0x1D, -/* 00005840 */ 0x8F, 0x00, 0x00, 0x24, 0x8F, 0x00, 0x00, 0x95, 0x8F, 0x00, 0x00, 0xC6, 0x8F, 0x00, 0x00, 0xE5, -/* 00005850 */ 0x8F, 0x00, 0x00, 0xED, 0x8F, 0x00, 0x00, 0x44, 0x90, 0x00, 0x00, 0x72, 0x90, 0x00, 0x00, 0x8B, -/* 00005860 */ 0x90, 0x00, 0x00, 0xFF, 0x90, 0x00, 0x00, 0x37, 0x91, 0x00, 0x00, 0x82, 0x91, 0x00, 0x00, 0xCD, -/* 00005870 */ 0x91, 0x00, 0x00, 0xCE, 0x91, 0x00, 0x00, 0x0A, 0x92, 0x00, 0x00, 0x7A, 0x92, 0x00, 0x00, 0x84, -/* 00005880 */ 0x92, 0x00, 0x00, 0x85, 0x92, 0x00, 0x00, 0xD2, 0x92, 0x00, 0x00, 0x2B, 0x93, 0x00, 0x00, 0x62, -/* 00005890 */ 0x93, 0x00, 0x00, 0x7F, 0x93, 0x00, 0x00, 0xA0, 0x93, 0x00, 0x00, 0xBF, 0x93, 0x00, 0x00, 0xCB, -/* 000058A0 */ 0x93, 0x00, 0x00, 0xCC, 0x93, 0x00, 0x00, 0xED, 0x93, 0x00, 0x00, 0xF4, 0x93, 0x00, 0x00, 0xF5, -/* 000058B0 */ 0x93, 0x00, 0x00, 0x6C, 0x94, 0x00, 0x00, 0xD5, 0x94, 0x00, 0x00, 0x05, 0x95, 0x00, 0x00, 0x52, -/* 000058C0 */ 0x95, 0x00, 0x00, 0xCF, 0x95, 0x00, 0x00, 0x02, 0x96, 0x00, 0x00, 0x3B, 0x96, 0x00, 0x00, 0x45, -/* 000058D0 */ 0x96, 0x00, 0x00, 0x46, 0x96, 0x00, 0x00, 0x80, 0x96, 0x00, 0x00, 0xBB, 0x96, 0x00, 0x00, 0xF4, -/* 000058E0 */ 0x96, 0x00, 0x00, 0xFE, 0x96, 0x00, 0x00, 0xFF, 0x96, 0x00, 0x00, 0x66, 0x97, 0x00, 0x00, 0x6C, -/* 000058F0 */ 0x97, 0x00, 0x00, 0x6D, 0x97, 0x00, 0x00, 0xC6, 0x97, 0x00, 0x00, 0xF9, 0x97, 0x00, 0x00, 0x32, -/* 00005900 */ 0x98, 0x00, 0x00, 0x3C, 0x98, 0x00, 0x00, 0x3D, 0x98, 0x00, 0x00, 0x77, 0x98, 0x00, 0x00, 0xB2, -/* 00005910 */ 0x98, 0x00, 0x00, 0xEB, 0x98, 0x00, 0x00, 0xF5, 0x98, 0x00, 0x00, 0xF6, 0x98, 0x00, 0x00, 0x26, -/* 00005920 */ 0x99, 0x00, 0x00, 0x2C, 0x99, 0x00, 0x00, 0x2D, 0x99, 0x00, 0x00, 0x9E, 0x99, 0x00, 0x00, 0xD5, -/* 00005930 */ 0x99, 0x00, 0x00, 0x2B, 0x9A, 0x00, 0x00, 0xAE, 0x9A, 0x00, 0x00, 0x21, 0x9B, 0x00, 0x00, 0x7A, -/* 00005940 */ 0x9B, 0x00, 0x00, 0xD4, 0x9B, 0x00, 0x00, 0x33, 0x9C, 0x00, 0x00, 0xA9, 0x9C, 0x00, 0x00, 0xC8, -/* 00005950 */ 0x9C, 0x00, 0x00, 0x0D, 0x9D, 0x00, 0x00, 0x77, 0x9D, 0x00, 0x00, 0xD8, 0x9D, 0x00, 0x00, 0xE4, -/* 00005960 */ 0x9D, 0x00, 0x00, 0x43, 0x9E, 0x00, 0x00, 0x7B, 0x9E, 0x00, 0x00, 0xA5, 0x9E, 0x00, 0x00, 0xC2, -/* 00005970 */ 0x9E, 0x00, 0x00, 0xE1, 0x9E, 0x00, 0x00, 0x01, 0x9F, 0x00, 0x00, 0x0D, 0x9F, 0x00, 0x00, 0x45, -/* 00005980 */ 0x9F, 0x00, 0x00, 0x6D, 0x9F, 0x00, 0x00, 0x89, 0x9F, 0x00, 0x00, 0xA8, 0x9F, 0x00, 0x00, 0xC7, -/* 00005990 */ 0x9F, 0x00, 0x00, 0xD3, 0x9F, 0x00, 0x00, 0xD9, 0x9F, 0x00, 0x00, 0xDA, 0x9F, 0x00, 0x00, 0xE2, -/* 000059A0 */ 0x9F, 0x00, 0x00, 0x59, 0xA0, 0x00, 0x00, 0x60, 0xA0, 0x00, 0x00, 0xD9, 0xA0, 0x00, 0x00, 0x55, -/* 000059B0 */ 0xA1, 0x00, 0x00, 0xCD, 0xA1, 0x00, 0x00, 0x2E, 0xA2, 0x00, 0x00, 0x36, 0xA2, 0x00, 0x00, 0x86, -/* 000059C0 */ 0xA2, 0x00, 0x00, 0xAB, 0xA2, 0x00, 0x00, 0xD6, 0xA2, 0x00, 0x00, 0x18, 0xA3, 0x00, 0x00, 0x8B, -/* 000059D0 */ 0xA3, 0x00, 0x00, 0xA3, 0xA3, 0x00, 0x00, 0xB1, 0xA3, 0x00, 0x00, 0xB2, 0xA3, 0x00, 0x00, 0xEF, -/* 000059E0 */ 0xA3, 0x00, 0x00, 0x24, 0xA4, 0x00, 0x00, 0x32, 0xA4, 0x00, 0x00, 0x3E, 0xA4, 0x00, 0x00, 0x3F, -/* 000059F0 */ 0xA4, 0x00, 0x00, 0x85, 0xA4, 0x00, 0x00, 0x8C, 0xA4, 0x00, 0x00, 0x8D, 0xA4, 0x00, 0x00, 0xC2, -/* 00005A00 */ 0xA4, 0x00, 0x00, 0xE6, 0xA4, 0x00, 0x00, 0x22, 0xA5, 0x00, 0x00, 0x36, 0xA5, 0x00, 0x00, 0x40, -/* 00005A10 */ 0xA5, 0x00, 0x00, 0x41, 0xA5, 0x00, 0x00, 0x8C, 0xA5, 0x00, 0x00, 0xD2, 0xA5, 0x00, 0x00, 0x29, -/* 00005A20 */ 0xA6, 0x00, 0x00, 0x2A, 0xA6, 0x00, 0x00, 0x8A, 0xA6, 0x00, 0x00, 0xDC, 0xA6, 0x00, 0x00, 0x3B, -/* 00005A30 */ 0xA7, 0x00, 0x00, 0x3C, 0xA7, 0x00, 0x00, 0x60, 0xA7, 0x00, 0x00, 0xCD, 0xA7, 0x00, 0x00, 0x22, -/* 00005A40 */ 0xA8, 0x00, 0x00, 0x66, 0xA8, 0x00, 0x00, 0xCE, 0xA8, 0x00, 0x00, 0xCF, 0xA8, 0x00, 0x00, 0x43, -/* 00005A50 */ 0xA9, 0x00, 0x00, 0x6B, 0xA9, 0x00, 0x00, 0xAE, 0xA9, 0x00, 0x00, 0xDE, 0xA9, 0x00, 0x00, 0x05, -/* 00005A60 */ 0xAA, 0x00, 0x00, 0x59, 0xAA, 0x00, 0x00, 0x5A, 0xAA, 0x00, 0x00, 0xDC, 0xAA, 0x00, 0x00, 0x36, -/* 00005A70 */ 0xAB, 0x00, 0x00, 0x37, 0xAB, 0x00, 0x00, 0xA6, 0xAB, 0x00, 0x00, 0xA7, 0xAB, 0x00, 0x00, 0xD8, -/* 00005A80 */ 0xAB, 0x00, 0x00, 0xD9, 0xAB, 0x00, 0x00, 0xF6, 0xAB, 0x00, 0x00, 0x01, 0xAC, 0x00, 0x00, 0x02, -/* 00005A90 */ 0xAC, 0x00, 0x00, 0x27, 0xAC, 0x00, 0x00, 0x75, 0xAC, 0x00, 0x00, 0x0E, 0xAD, 0x00, 0x00, 0x45, -/* 00005AA0 */ 0xAD, 0x00, 0x00, 0x9B, 0xAD, 0x00, 0x00, 0xA9, 0xAD, 0x00, 0x00, 0xAA, 0xAD, 0x00, 0x00, 0xD4, -/* 00005AB0 */ 0xAD, 0x00, 0x00, 0xFE, 0xAD, 0x00, 0x00, 0xFF, 0xAD, 0x00, 0x00, 0x77, 0xAE, 0x00, 0x00, 0xD2, -/* 00005AC0 */ 0xAE, 0x00, 0x00, 0xEF, 0xAE, 0x00, 0x00, 0x31, 0xAF, 0x00, 0x00, 0x6E, 0xAF, 0x00, 0x00, 0xA8, -/* 00005AD0 */ 0xAF, 0x00, 0x00, 0xFF, 0xAF, 0x00, 0x00, 0x11, 0xB0, 0x00, 0x00, 0x12, 0xB0, 0x00, 0x00, 0x49, -/* 00005AE0 */ 0xB0, 0x00, 0x00, 0x5E, 0xB0, 0x00, 0x00, 0x88, 0xB0, 0x00, 0x00, 0xCB, 0xB0, 0x00, 0x00, 0xD9, -/* 00005AF0 */ 0xB0, 0x00, 0x00, 0xDA, 0xB0, 0x00, 0x00, 0x50, 0xB1, 0x00, 0x00, 0x88, 0xB1, 0x00, 0x00, 0x89, -/* 00005B00 */ 0xB1, 0x00, 0x00, 0xEB, 0xB1, 0x00, 0x00, 0x10, 0xB2, 0x00, 0x00, 0x24, 0xB2, 0x00, 0x00, 0x2E, -/* 00005B10 */ 0xB2, 0x00, 0x00, 0x2F, 0xB2, 0x00, 0x00, 0x87, 0xB2, 0x00, 0x00, 0xED, 0xB2, 0x00, 0x00, 0x21, -/* 00005B20 */ 0xB3, 0x00, 0x00, 0x9B, 0xB3, 0x00, 0x00, 0xD2, 0xB3, 0x00, 0x00, 0x09, 0xB4, 0x00, 0x00, 0x17, -/* 00005B30 */ 0xB4, 0x00, 0x00, 0x18, 0xB4, 0x00, 0x00, 0x47, 0xB4, 0x00, 0x00, 0x6F, 0xB4, 0x00, 0x00, 0xB0, -/* 00005B40 */ 0xB4, 0x00, 0x00, 0xBE, 0xB4, 0x00, 0x00, 0xBF, 0xB4, 0x00, 0x00, 0xF2, 0xB4, 0x00, 0x00, 0x30, -/* 00005B50 */ 0xB5, 0x00, 0x00, 0x31, 0xB5, 0x00, 0x00, 0x5F, 0xB5, 0x00, 0x00, 0x8A, 0xB5, 0x00, 0x00, 0xC7, -/* 00005B60 */ 0xB5, 0x00, 0x00, 0xD5, 0xB5, 0x00, 0x00, 0xD6, 0xB5, 0x00, 0x00, 0x16, 0xB6, 0x00, 0x00, 0x17, -/* 00005B70 */ 0xB6, 0x00, 0x00, 0x3C, 0xB6, 0x00, 0x00, 0x7A, 0xB6, 0x00, 0x00, 0xAD, 0xB6, 0x00, 0x00, 0xC5, -/* 00005B80 */ 0xB6, 0x00, 0x00, 0xD1, 0xB6, 0x00, 0x00, 0xD2, 0xB6, 0x00, 0x00, 0x38, 0xB7, 0x00, 0x00, 0x64, -/* 00005B90 */ 0xB7, 0x00, 0x00, 0xBE, 0xB7, 0x00, 0x00, 0xCC, 0xB7, 0x00, 0x00, 0xCD, 0xB7, 0x00, 0x00, 0x0E, -/* 00005BA0 */ 0xB8, 0x00, 0x00, 0x61, 0xB8, 0x00, 0x00, 0xBB, 0xB8, 0x00, 0x00, 0xC9, 0xB8, 0x00, 0x00, 0xCA, -/* 00005BB0 */ 0xB8, 0x00, 0x00, 0x46, 0xB9, 0x00, 0x00, 0x52, 0xB9, 0x00, 0x00, 0x53, 0xB9, 0x00, 0x00, 0x87, -/* 00005BC0 */ 0xB9, 0x00, 0x00, 0xDC, 0xB9, 0x00, 0x00, 0x6B, 0xBA, 0x00, 0x00, 0x00, 0xBB, 0x00, 0x00, 0x0C, -/* 00005BD0 */ 0xBB, 0x00, 0x00, 0x7B, 0xBB, 0x00, 0x00, 0xBB, 0xBB, 0x00, 0x00, 0xE4, 0xBB, 0x00, 0x00, 0x01, -/* 00005BE0 */ 0xBC, 0x00, 0x00, 0x20, 0xBC, 0x00, 0x00, 0x40, 0xBC, 0x00, 0x00, 0x4C, 0xBC, 0x00, 0x00, 0x87, -/* 00005BF0 */ 0xBC, 0x00, 0x00, 0xB7, 0xBC, 0x00, 0x00, 0xD3, 0xBC, 0x00, 0x00, 0xF2, 0xBC, 0x00, 0x00, 0x12, -/* 00005C00 */ 0xBD, 0x00, 0x00, 0x1E, 0xBD, 0x00, 0x00, 0x1F, 0xBD, 0x00, 0x00, 0x51, 0xBD, 0x00, 0x00, 0x74, -/* 00005C10 */ 0xBD, 0x00, 0x00, 0x91, 0xBD, 0x00, 0x00, 0xB0, 0xBD, 0x00, 0x00, 0xD0, 0xBD, 0x00, 0x00, 0xDC, -/* 00005C20 */ 0xBD, 0x00, 0x00, 0x18, 0xBE, 0x00, 0x00, 0x19, 0xBE, 0x00, 0x00, 0x57, 0xBE, 0x00, 0x00, 0x74, -/* 00005C30 */ 0xBE, 0x00, 0x00, 0x90, 0xBE, 0x00, 0x00, 0xAF, 0xBE, 0x00, 0x00, 0xCE, 0xBE, 0x00, 0x00, 0xDA, -/* 00005C40 */ 0xBE, 0x00, 0x00, 0x1C, 0xBF, 0x00, 0x00, 0x4C, 0xBF, 0x00, 0x00, 0x7C, 0xBF, 0x00, 0x00, 0xE2, -/* 00005C50 */ 0xBF, 0x00, 0x00, 0xF4, 0xBF, 0x00, 0x00, 0x39, 0xC0, 0x00, 0x00, 0x90, 0xC0, 0x00, 0x00, 0xF6, -/* 00005C60 */ 0xC0, 0x00, 0x00, 0x08, 0xC1, 0x00, 0x00, 0x09, 0xC1, 0x00, 0x00, 0x2B, 0xC1, 0x00, 0x00, 0x49, -/* 00005C70 */ 0xC1, 0x00, 0x00, 0x66, 0xC1, 0x00, 0x00, 0x89, 0xC1, 0x00, 0x00, 0xB2, 0xC1, 0x00, 0x00, 0xD3, -/* 00005C80 */ 0xC1, 0x00, 0x00, 0xF2, 0xC1, 0x00, 0x00, 0x13, 0xC2, 0x00, 0x00, 0x26, 0xC2, 0x00, 0x00, 0x27, -/* 00005C90 */ 0xC2, 0x00, 0x00, 0x6C, 0xC2, 0x00, 0x00, 0x7B, 0xC2, 0x00, 0x00, 0x97, 0xC2, 0x00, 0x00, 0xB6, -/* 00005CA0 */ 0xC2, 0x00, 0x00, 0xD5, 0xC2, 0x00, 0x00, 0xE1, 0xC2, 0x00, 0x00, 0xE2, 0xC2, 0x00, 0x00, 0x5B, -/* 00005CB0 */ 0xC3, 0x00, 0x00, 0x84, 0xC3, 0x00, 0x00, 0xB0, 0xC3, 0x00, 0x00, 0x0A, 0xC4, 0x00, 0x00, 0x18, -/* 00005CC0 */ 0xC4, 0x00, 0x00, 0x19, 0xC4, 0x00, 0x00, 0x5A, 0xC4, 0x00, 0x00, 0xAD, 0xC4, 0x00, 0x00, 0x07, -/* 00005CD0 */ 0xC5, 0x00, 0x00, 0x15, 0xC5, 0x00, 0x00, 0x16, 0xC5, 0x00, 0x00, 0x44, 0xC5, 0x00, 0x00, 0x4F, -/* 00005CE0 */ 0xC5, 0x00, 0x00, 0x7E, 0xC5, 0x00, 0x00, 0xA0, 0xC5, 0x00, 0x00, 0xBD, 0xC5, 0x00, 0x00, 0xDC, -/* 00005CF0 */ 0xC5, 0x00, 0x00, 0xFC, 0xC5, 0x00, 0x00, 0x08, 0xC6, 0x00, 0x00, 0x42, 0xC6, 0x00, 0x00, 0x81, -/* 00005D00 */ 0xC6, 0x00, 0x00, 0xA0, 0xC6, 0x00, 0x00, 0xBF, 0xC6, 0x00, 0x00, 0xCB, 0xC6, 0x00, 0x00, 0xCC, -/* 00005D10 */ 0xC6, 0x00, 0x00, 0xE5, 0xC6, 0x00, 0x00, 0xEF, 0xC6, 0x00, 0x00, 0xF0, 0xC6, 0x00, 0x00, 0x2A, -/* 00005D20 */ 0xC7, 0x00, 0x00, 0x50, 0xC7, 0x00, 0x00, 0x8C, 0xC7, 0x00, 0x00, 0xA0, 0xC7, 0x00, 0x00, 0xAA, -/* 00005D30 */ 0xC7, 0x00, 0x00, 0xAB, 0xC7, 0x00, 0x00, 0xF4, 0xC7, 0x00, 0x00, 0x3A, 0xC8, 0x00, 0x00, 0x91, -/* 00005D40 */ 0xC8, 0x00, 0x00, 0x92, 0xC8, 0x00, 0x00, 0xB6, 0xC8, 0x00, 0x00, 0x29, 0xC9, 0x00, 0x00, 0x2A, -/* 00005D50 */ 0xC9, 0x00, 0x00, 0x8C, 0xC9, 0x00, 0x00, 0xAE, 0xC9, 0x00, 0x00, 0xD5, 0xC9, 0x00, 0x00, 0xD6, -/* 00005D60 */ 0xC9, 0x00, 0x00, 0x46, 0xCA, 0x00, 0x00, 0x64, 0xCA, 0x00, 0x00, 0xB5, 0xCA, 0x00, 0x00, 0xEB, -/* 00005D70 */ 0xCA, 0x00, 0x00, 0xEC, 0xCA, 0x00, 0x00, 0x47, 0xCB, 0x00, 0x00, 0x98, 0xCB, 0x00, 0x00, 0xD5, -/* 00005D80 */ 0xCB, 0x00, 0x00, 0x15, 0xCC, 0x00, 0x00, 0x4A, 0xCC, 0x00, 0x00, 0x58, 0xCC, 0x00, 0x00, 0x59, -/* 00005D90 */ 0xCC, 0x00, 0x00, 0x76, 0xCC, 0x00, 0x00, 0x95, 0xCC, 0x00, 0x00, 0xC9, 0xCC, 0x00, 0x00, 0xF1, -/* 00005DA0 */ 0xCC, 0x00, 0x00, 0x2E, 0xCD, 0x00, 0x00, 0x3C, 0xCD, 0x00, 0x00, 0x3D, 0xCD, 0x00, 0x00, 0xB6, -/* 00005DB0 */ 0xCD, 0x00, 0x00, 0xD5, 0xCD, 0x00, 0x00, 0x0A, 0xCE, 0x00, 0x00, 0x79, 0xCE, 0x00, 0x00, 0x87, -/* 00005DC0 */ 0xCE, 0x00, 0x00, 0x88, 0xCE, 0x00, 0x00, 0xB2, 0xCE, 0x00, 0x00, 0xD1, 0xCE, 0x00, 0x00, 0xF8, -/* 00005DD0 */ 0xCE, 0x00, 0x00, 0x1F, 0xCF, 0x00, 0x00, 0x34, 0xCF, 0x00, 0x00, 0x55, 0xCF, 0x00, 0x00, 0x80, -/* 00005DE0 */ 0xCF, 0x00, 0x00, 0xA5, 0xCF, 0x00, 0x00, 0xBE, 0xCF, 0x00, 0x00, 0xE3, 0xCF, 0x00, 0x00, 0xF5, -/* 00005DF0 */ 0xCF, 0x00, 0x00, 0x03, 0xD0, 0x00, 0x00, 0x04, 0xD0, 0x00, 0x00, 0x54, 0xD0, 0x00, 0x00, 0x55, -/* 00005E00 */ 0xD0, 0x00, 0x00, 0xB1, 0xD0, 0x00, 0x00, 0xB2, 0xD0, 0x00, 0x00, 0xE1, 0xD0, 0x00, 0x00, 0xE2, -/* 00005E10 */ 0xD0, 0x00, 0x00, 0x2E, 0xD1, 0x00, 0x00, 0x5A, 0xD1, 0x00, 0x00, 0x5B, 0xD1, 0x00, 0x00, 0x72, -/* 00005E20 */ 0xD1, 0x00, 0x00, 0x7D, 0xD1, 0x00, 0x00, 0x7E, 0xD1, 0x00, 0x00, 0xEA, 0xD1, 0x00, 0x00, 0x33, -/* 00005E30 */ 0xD2, 0x00, 0x00, 0x90, 0xD2, 0x00, 0x00, 0x9E, 0xD2, 0x00, 0x00, 0x9F, 0xD2, 0x00, 0x00, 0xCB, -/* 00005E40 */ 0xD2, 0x00, 0x00, 0x18, 0xD3, 0x00, 0x00, 0x19, 0xD3, 0x00, 0x00, 0x48, 0xD3, 0x00, 0x00, 0xC4, -/* 00005E50 */ 0xD3, 0x00, 0x00, 0xFD, 0xD3, 0x00, 0x00, 0xFE, 0xD3, 0x00, 0x00, 0x23, 0xD4, 0x00, 0x00, 0x37, -/* 00005E60 */ 0xD4, 0x00, 0x00, 0x41, 0xD4, 0x00, 0x00, 0x42, 0xD4, 0x00, 0x00, 0xC8, 0xD4, 0x00, 0x00, 0xFF, -/* 00005E70 */ 0xD4, 0x00, 0x00, 0x3A, 0xD5, 0x00, 0x00, 0x48, 0xD5, 0x00, 0x00, 0x49, 0xD5, 0x00, 0x00, 0x7A, -/* 00005E80 */ 0xD5, 0x00, 0x00, 0x7B, 0xD5, 0x00, 0x00, 0xA3, 0xD5, 0x00, 0x00, 0xE8, 0xD5, 0x00, 0x00, 0xF6, -/* 00005E90 */ 0xD5, 0x00, 0x00, 0xF7, 0xD5, 0x00, 0x00, 0x2A, 0xD6, 0x00, 0x00, 0x68, 0xD6, 0x00, 0x00, 0x96, -/* 00005EA0 */ 0xD6, 0x00, 0x00, 0xC1, 0xD6, 0x00, 0x00, 0xFE, 0xD6, 0x00, 0x00, 0x0C, 0xD7, 0x00, 0x00, 0x0D, -/* 00005EB0 */ 0xD7, 0x00, 0x00, 0x51, 0xD7, 0x00, 0x00, 0x52, 0xD7, 0x00, 0x00, 0x8D, 0xD7, 0x00, 0x00, 0xBF, -/* 00005EC0 */ 0xD7, 0x00, 0x00, 0xC0, 0xD7, 0x00, 0x00, 0xD8, 0xD7, 0x00, 0x00, 0xE4, 0xD7, 0x00, 0x00, 0xE5, -/* 00005ED0 */ 0xD7, 0x00, 0x00, 0x49, 0xD8, 0x00, 0x00, 0x6F, 0xD8, 0x00, 0x00, 0x70, 0xD8, 0x00, 0x00, 0x9C, -/* 00005EE0 */ 0xD8, 0x00, 0x00, 0xFD, 0xD8, 0x00, 0x00, 0x0B, 0xD9, 0x00, 0x00, 0x0C, 0xD9, 0x00, 0x00, 0x4D, -/* 00005EF0 */ 0xD9, 0x00, 0x00, 0xA4, 0xD9, 0x00, 0x00, 0x05, 0xDA, 0x00, 0x00, 0x13, 0xDA, 0x00, 0x00, 0x14, -/* 00005F00 */ 0xDA, 0x00, 0x00, 0x92, 0xDA, 0x00, 0x00, 0x9E, 0xDA, 0x00, 0x00, 0x9F, 0xDA, 0x00, 0x00, 0x18, -/* 00005F10 */ 0xDB, 0x00, 0x00, 0x3E, 0xDB, 0x00, 0x00, 0x3F, 0xDB, 0x00, 0x00, 0x6B, 0xDB, 0x00, 0x00, 0xD3, -/* 00005F20 */ 0xDB, 0x00, 0x00, 0xE1, 0xDB, 0x00, 0x00, 0xE2, 0xDB, 0x00, 0x00, 0x23, 0xDC, 0x00, 0x00, 0x7A, -/* 00005F30 */ 0xDC, 0x00, 0x00, 0xE2, 0xDC, 0x00, 0x00, 0xF0, 0xDC, 0x00, 0x00, 0xF1, 0xDC, 0x00, 0x00, 0x6E, -/* 00005F40 */ 0xDD, 0x00, 0x00, 0x7A, 0xDD, 0x00, 0x00, 0x7B, 0xDD, 0x00, 0x00, 0xAF, 0xDD, 0x00, 0x00, 0x0C, -/* 00005F50 */ 0xDE, 0x00, 0x00, 0xA3, 0xDE, 0x00, 0x00, 0x36, 0xDF, 0x00, 0x00, 0x42, 0xDF, 0x00, 0x00, 0xB9, -/* 00005F60 */ 0xDF, 0x00, 0x00, 0xFD, 0xDF, 0x00, 0x00, 0x26, 0xE0, 0x00, 0x00, 0x43, 0xE0, 0x00, 0x00, 0x62, -/* 00005F70 */ 0xE0, 0x00, 0x00, 0x82, 0xE0, 0x00, 0x00, 0x8E, 0xE0, 0x00, 0x00, 0xCD, 0xE0, 0x00, 0x00, 0x01, -/* 00005F80 */ 0xE1, 0x00, 0x00, 0x1D, 0xE1, 0x00, 0x00, 0x3C, 0xE1, 0x00, 0x00, 0x5C, 0xE1, 0x00, 0x00, 0x68, -/* 00005F90 */ 0xE1, 0x00, 0x00, 0x69, 0xE1, 0x00, 0x00, 0x9F, 0xE1, 0x00, 0x00, 0xC6, 0xE1, 0x00, 0x00, 0xE3, -/* 00005FA0 */ 0xE1, 0x00, 0x00, 0x02, 0xE2, 0x00, 0x00, 0x23, 0xE2, 0x00, 0x00, 0x2F, 0xE2, 0x00, 0x00, 0x6F, -/* 00005FB0 */ 0xE2, 0x00, 0x00, 0xB1, 0xE2, 0x00, 0x00, 0xD2, 0xE2, 0x00, 0x00, 0xEE, 0xE2, 0x00, 0x00, 0x0D, -/* 00005FC0 */ 0xE3, 0x00, 0x00, 0x2D, 0xE3, 0x00, 0x00, 0x39, 0xE3, 0x00, 0x00, 0x3A, 0xE3, 0x00, 0x00, 0x80, -/* 00005FD0 */ 0xE3, 0x00, 0x00, 0xB0, 0xE3, 0x00, 0x00, 0xE0, 0xE3, 0x00, 0x00, 0x4E, 0xE4, 0x00, 0x00, 0x60, -/* 00005FE0 */ 0xE4, 0x00, 0x00, 0xA5, 0xE4, 0x00, 0x00, 0x00, 0xE5, 0x00, 0x00, 0x6E, 0xE5, 0x00, 0x00, 0x80, -/* 00005FF0 */ 0xE5, 0x00, 0x00, 0x81, 0xE5, 0x00, 0x00, 0xFF, 0xE5, 0x00, 0x00, 0x7D, 0xE6, 0x00, 0x00, 0xA1, -/* 00006000 */ 0xE6, 0x00, 0x00, 0xA2, 0xE6, 0x00, 0x00, 0xE7, 0xE6, 0x00, 0x00, 0xF6, 0xE6, 0x00, 0x00, 0x12, -/* 00006010 */ 0xE7, 0x00, 0x00, 0x31, 0xE7, 0x00, 0x00, 0x51, 0xE7, 0x00, 0x00, 0x5D, 0xE7, 0x00, 0x00, 0x5E, -/* 00006020 */ 0xE7, 0x00, 0x00, 0xDA, 0xE7, 0x00, 0x00, 0x02, 0xE8, 0x00, 0x00, 0x2E, 0xE8, 0x00, 0x00, 0x8F, -/* 00006030 */ 0xE8, 0x00, 0x00, 0x9D, 0xE8, 0x00, 0x00, 0x9E, 0xE8, 0x00, 0x00, 0xDF, 0xE8, 0x00, 0x00, 0x36, -/* 00006040 */ 0xE9, 0x00, 0x00, 0x97, 0xE9, 0x00, 0x00, 0xA5, 0xE9, 0x00, 0x00, 0xA6, 0xE9, 0x00, 0x00, 0xD3, -/* 00006050 */ 0xE9, 0x00, 0x00, 0xDE, 0xE9, 0x00, 0x00, 0x0C, 0xEA, 0x00, 0x00, 0x2D, 0xEA, 0x00, 0x00, 0x4A, -/* 00006060 */ 0xEA, 0x00, 0x00, 0x69, 0xEA, 0x00, 0x00, 0x89, 0xEA, 0x00, 0x00, 0x95, 0xEA, 0x00, 0x00, 0xD2, -/* 00006070 */ 0xEA, 0x00, 0x00, 0x0F, 0xEB, 0x00, 0x00, 0x2E, 0xEB, 0x00, 0x00, 0x4E, 0xEB, 0x00, 0x00, 0x5A, -/* 00006080 */ 0xEB, 0x00, 0x00, 0x5B, 0xEB, 0x00, 0x00, 0x9F, 0xEB, 0x00, 0x00, 0xC1, 0xEB, 0x00, 0x00, 0xE0, -/* 00006090 */ 0xEB, 0x00, 0x00, 0x00, 0xEC, 0x00, 0x00, 0x1C, 0xEC, 0x00, 0x00, 0x28, 0xEC, 0x00, 0x00, 0x29, -/* 000060A0 */ 0xEC, 0x00, 0x00, 0x46, 0xEC, 0x00, 0x00, 0x50, 0xEC, 0x00, 0x00, 0x51, 0xEC, 0x00, 0x00, 0xD1, -/* 000060B0 */ 0xEC, 0x00, 0x00, 0xF9, 0xEC, 0x00, 0x00, 0x33, 0xED, 0x00, 0x00, 0x47, 0xED, 0x00, 0x00, 0x51, -/* 000060C0 */ 0xED, 0x00, 0x00, 0x52, 0xED, 0x00, 0x00, 0x8F, 0xED, 0x00, 0x00, 0xC7, 0xED, 0x00, 0x00, 0x13, -/* 000060D0 */ 0xEE, 0x00, 0x00, 0x38, 0xEE, 0x00, 0x00, 0x62, 0xEE, 0x00, 0x00, 0x88, 0xEE, 0x00, 0x00, 0xAF, -/* 000060E0 */ 0xEE, 0x00, 0x00, 0x01, 0xEF, 0x00, 0x00, 0x27, 0xEF, 0x00, 0x00, 0x4E, 0xEF, 0x00, 0x00, 0x77, -/* 000060F0 */ 0xEF, 0x00, 0x00, 0xA0, 0xEF, 0x00, 0x00, 0x09, 0xF0, 0x00, 0x00, 0x14, 0xF0, 0x00, 0x00, 0x15, -/* 00006100 */ 0xF0, 0x00, 0x00, 0x21, 0xF0, 0x00, 0x00, 0x8D, 0xF0, 0x00, 0x00, 0x0A, 0xF1, 0x00, 0x00, 0x15, -/* 00006110 */ 0xF1, 0x00, 0x00, 0x57, 0xF1, 0x00, 0x00, 0xAA, 0xF1, 0x00, 0x00, 0xB6, 0xF1, 0x00, 0x00, 0xEA, -/* 00006120 */ 0xF1, 0x00, 0x00, 0x69, 0xF2, 0x00, 0x00, 0x8F, 0xF2, 0x00, 0x00, 0xAD, 0xF2, 0x00, 0x00, 0xC7, -/* 00006130 */ 0xF2, 0x00, 0x00, 0xE2, 0xF2, 0x00, 0x00, 0xFE, 0xF2, 0x00, 0x00, 0x18, 0xF3, 0x00, 0x00, 0x53, -/* 00006140 */ 0xF3, 0x00, 0x00, 0x88, 0xF3, 0x00, 0x00, 0xA5, 0xF3, 0x00, 0x00, 0xC2, 0xF3, 0x00, 0x00, 0xE5, -/* 00006150 */ 0xF3, 0x00, 0x00, 0xF4, 0xF3, 0x00, 0x00, 0x79, 0xF4, 0x00, 0x00, 0x9F, 0xF4, 0x00, 0x00, 0xD9, -/* 00006160 */ 0xF4, 0x00, 0x00, 0xF3, 0xF4, 0x00, 0x00, 0x24, 0xF5, 0x00, 0x00, 0x4C, 0xF5, 0x00, 0x00, 0x66, -/* 00006170 */ 0xF5, 0x00, 0x00, 0xA2, 0xF5, 0x00, 0x00, 0xBF, 0xF5, 0x00, 0x00, 0xDC, 0xF5, 0x00, 0x00, 0x71, -/* 00006180 */ 0xF6, 0x00, 0x00, 0x80, 0xF6, 0x00, 0x00, 0x81, 0xF6, 0x00, 0x00, 0xE6, 0xF6, 0x00, 0x00, 0x55, -/* 00006190 */ 0xF7, 0x00, 0x00, 0x81, 0xF7, 0x00, 0x00, 0x9D, 0xF7, 0x00, 0x00, 0xBB, 0xF7, 0x00, 0x00, 0xD5, -/* 000061A0 */ 0xF7, 0x00, 0x00, 0xEE, 0xF7, 0x00, 0x00, 0x09, 0xF8, 0x00, 0x00, 0x18, 0xF8, 0x00, 0x00, 0x44, -/* 000061B0 */ 0xF8, 0x00, 0x00, 0x62, 0xF8, 0x00, 0x00, 0x80, 0xF8, 0x00, 0x00, 0x9C, 0xF8, 0x00, 0x00, 0xB7, -/* 000061C0 */ 0xF8, 0x00, 0x00, 0xD4, 0xF8, 0x00, 0x00, 0xE3, 0xF8, 0x00, 0x00, 0xE4, 0xF8, 0x00, 0x00, 0x18, -/* 000061D0 */ 0xF9, 0x00, 0x00, 0x42, 0xF9, 0x00, 0x00, 0x5C, 0xF9, 0x00, 0x00, 0x76, 0xF9, 0x00, 0x00, 0x90, -/* 000061E0 */ 0xF9, 0x00, 0x00, 0xAA, 0xF9, 0x00, 0x00, 0xB9, 0xF9, 0x00, 0x00, 0xE3, 0xF9, 0x00, 0x00, 0xFD, -/* 000061F0 */ 0xF9, 0x00, 0x00, 0x17, 0xFA, 0x00, 0x00, 0x31, 0xFA, 0x00, 0x00, 0x4B, 0xFA, 0x00, 0x00, 0x5A, -/* 00006200 */ 0xFA, 0x00, 0x00, 0x5B, 0xFA, 0x00, 0x00, 0x88, 0xFA, 0x00, 0x00, 0xEE, 0xFA, 0x00, 0x00, 0x1D, -/* 00006210 */ 0xFB, 0x00, 0x00, 0x7C, 0xFB, 0x00, 0x00, 0xAB, 0xFB, 0x00, 0x00, 0xDB, 0xFB, 0x00, 0x00, 0xF1, -/* 00006220 */ 0xFB, 0x00, 0x00, 0xF2, 0xFB, 0x00, 0x00, 0x17, 0xFC, 0x00, 0x00, 0x37, 0xFC, 0x00, 0x00, 0x38, -/* 00006230 */ 0xFC, 0x00, 0x00, 0xAB, 0xFC, 0x00, 0x00, 0xFC, 0xFC, 0x00, 0x00, 0x5A, 0xFD, 0x00, 0x00, 0x84, -/* 00006240 */ 0xFD, 0x00, 0x00, 0x85, 0xFD, 0x00, 0x00, 0x10, 0xFE, 0x00, 0x00, 0x74, 0xFE, 0x00, 0x00, 0xB6, -/* 00006250 */ 0xFE, 0x00, 0x00, 0xE6, 0xFE, 0x00, 0x00, 0x3E, 0xFF, 0x00, 0x00, 0xAA, 0xFF, 0x00, 0x00, 0x07, -/* 00006260 */ 0x00, 0x01, 0x00, 0x7E, 0x00, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x57, 0x01, 0x01, 0x00, 0xC2, -/* 00006270 */ 0x01, 0x01, 0x00, 0xF4, 0x01, 0x01, 0x00, 0x67, 0x02, 0x01, 0x00, 0x99, 0x02, 0x01, 0x00, 0xB3, -/* 00006280 */ 0x02, 0x01, 0x00, 0xC9, 0x02, 0x01, 0x00, 0xCA, 0x02, 0x01, 0x00, 0x3A, 0x03, 0x01, 0x00, 0x52, -/* 00006290 */ 0x03, 0x01, 0x00, 0x53, 0x03, 0x01, 0x00, 0xA7, 0x03, 0x01, 0x00, 0xA8, 0x03, 0x01, 0x00, 0x3D, -/* 000062A0 */ 0x04, 0x01, 0x00, 0xCC, 0x04, 0x01, 0x00, 0x61, 0x05, 0x01, 0x00, 0x88, 0x05, 0x01, 0x00, 0xA3, -/* 000062B0 */ 0x05, 0x01, 0x00, 0xD0, 0x05, 0x01, 0x00, 0xFA, 0x05, 0x01, 0x00, 0x2B, 0x06, 0x01, 0x00, 0x50, -/* 000062C0 */ 0x06, 0x01, 0x00, 0x77, 0x06, 0x01, 0x00, 0xA6, 0x06, 0x01, 0x00, 0xC0, 0x06, 0x01, 0x00, 0xDD, -/* 000062D0 */ 0x06, 0x01, 0x00, 0xFF, 0x06, 0x01, 0x00, 0x29, 0x07, 0x01, 0x00, 0x53, 0x07, 0x01, 0x00, 0x70, -/* 000062E0 */ 0x07, 0x01, 0x00, 0x92, 0x07, 0x01, 0x00, 0xC0, 0x07, 0x01, 0x00, 0xDD, 0x07, 0x01, 0x00, 0xFF, -/* 000062F0 */ 0x07, 0x01, 0x00, 0x15, 0x08, 0x01, 0x00, 0x16, 0x08, 0x01, 0x00, 0x7C, 0x08, 0x01, 0x00, 0xE3, -/* 00006300 */ 0x08, 0x01, 0x00, 0x37, 0x09, 0x01, 0x00, 0x71, 0x09, 0x01, 0x00, 0xE0, 0x09, 0x01, 0x00, 0x52, -/* 00006310 */ 0x0A, 0x01, 0x00, 0xA9, 0x0A, 0x01, 0x00, 0xF2, 0x0A, 0x01, 0x00, 0x29, 0x0B, 0x01, 0x00, 0x67, -/* 00006320 */ 0x0B, 0x01, 0x00, 0x9B, 0x0B, 0x01, 0x00, 0x1F, 0x0C, 0x01, 0x00, 0x48, 0x0C, 0x01, 0x00, 0x7C, -/* 00006330 */ 0x0C, 0x01, 0x00, 0xF2, 0x0C, 0x01, 0x00, 0x14, 0x0D, 0x01, 0x00, 0x15, 0x0D, 0x01, 0x00, 0x6D, -/* 00006340 */ 0x0D, 0x01, 0x00, 0x9F, 0x0D, 0x01, 0x00, 0xBD, 0x0D, 0x01, 0x00, 0xDE, 0x0D, 0x01, 0x00, 0x4C, -/* 00006350 */ 0x0E, 0x01, 0x00, 0xA9, 0x0E, 0x01, 0x00, 0xEF, 0x0E, 0x01, 0x00, 0x09, 0x0F, 0x01, 0x00, 0x1F, -/* 00006360 */ 0x0F, 0x01, 0x00, 0x20, 0x0F, 0x01, 0x00, 0x43, 0x0F, 0x01, 0x00, 0x8A, 0x0F, 0x01, 0x00, 0xA7, -/* 00006370 */ 0x0F, 0x01, 0x00, 0xBD, 0x0F, 0x01, 0x00, 0xBE, 0x0F, 0x01, 0x00, 0xFC, 0x0F, 0x01, 0x00, 0x44, -/* 00006380 */ 0x10, 0x01, 0x00, 0x7A, 0x10, 0x01, 0x00, 0x95, 0x10, 0x01, 0x00, 0xA7, 0x10, 0x01, 0x00, 0xA8, -/* 00006390 */ 0x10, 0x01, 0x00, 0xCF, 0x10, 0x01, 0x00, 0xDE, 0x10, 0x01, 0x00, 0xEC, 0x10, 0x01, 0x00, 0xED, -/* 000063A0 */ 0x10, 0x01, 0x00, 0xF9, 0x10, 0x01, 0x00, 0x50, 0x11, 0x01, 0x00, 0x5B, 0x11, 0x01, 0x00, 0x8E, -/* 000063B0 */ 0x11, 0x01, 0x00, 0x99, 0x11, 0x01, 0x00, 0x13, 0x12, 0x01, 0x00, 0x5F, 0x12, 0x01, 0x00, 0xA1, -/* 000063C0 */ 0x12, 0x01, 0x00, 0xAD, 0x12, 0x01, 0x00, 0x04, 0x13, 0x01, 0x00, 0x4A, 0x13, 0x01, 0x00, 0x8B, -/* 000063D0 */ 0x13, 0x01, 0x00, 0x8C, 0x13, 0x01, 0x00, 0xB0, 0x13, 0x01, 0x00, 0x23, 0x14, 0x01, 0x00, 0x81, -/* 000063E0 */ 0x14, 0x01, 0x00, 0xEA, 0x14, 0x01, 0x00, 0xEB, 0x14, 0x01, 0x00, 0x5A, 0x15, 0x01, 0x00, 0x88, -/* 000063F0 */ 0x15, 0x01, 0x00, 0xB4, 0x15, 0x01, 0x00, 0xE1, 0x15, 0x01, 0x00, 0x14, 0x16, 0x01, 0x00, 0x15, -/* 00006400 */ 0x16, 0x01, 0x00, 0x4C, 0x16, 0x01, 0x00, 0x73, 0x16, 0x01, 0x00, 0x97, 0x16, 0x01, 0x00, 0xCB, -/* 00006410 */ 0x16, 0x01, 0x00, 0xE0, 0x16, 0x01, 0x00, 0x0C, 0x17, 0x01, 0x00, 0x1A, 0x17, 0x01, 0x00, 0x1B, -/* 00006420 */ 0x17, 0x01, 0x00, 0x90, 0x17, 0x01, 0x00, 0xD3, 0x17, 0x01, 0x00, 0x21, 0x18, 0x01, 0x00, 0x6F, -/* 00006430 */ 0x18, 0x01, 0x00, 0xCB, 0x18, 0x01, 0x00, 0x1C, 0x19, 0x01, 0x00, 0x38, 0x19, 0x01, 0x00, 0x4D, -/* 00006440 */ 0x19, 0x01, 0x00, 0x6F, 0x19, 0x01, 0x00, 0x7D, 0x19, 0x01, 0x00, 0x7E, 0x19, 0x01, 0x00, 0xA8, -/* 00006450 */ 0x19, 0x01, 0x00, 0xA9, 0x19, 0x01, 0x00, 0xE2, 0x19, 0x01, 0x00, 0x40, 0x1A, 0x01, 0x00, 0x41, -/* 00006460 */ 0x1A, 0x01, 0x00, 0xB5, 0x1A, 0x01, 0x00, 0xF0, 0x1A, 0x01, 0x00, 0x2D, 0x1B, 0x01, 0x00, 0x2E, -/* 00006470 */ 0x1B, 0x01, 0x00, 0x51, 0x1B, 0x01, 0x00, 0x5C, 0x1B, 0x01, 0x00, 0x5D, 0x1B, 0x01, 0x00, 0x69, -/* 00006480 */ 0x1B, 0x01, 0x00, 0xB1, 0x1B, 0x01, 0x00, 0xBC, 0x1B, 0x01, 0x00, 0xE8, 0x1B, 0x01, 0x00, 0xF3, -/* 00006490 */ 0x1B, 0x01, 0x00, 0x74, 0x1C, 0x01, 0x00, 0xEE, 0x1C, 0x01, 0x00, 0x69, 0x1D, 0x01, 0x00, 0x9E, -/* 000064A0 */ 0x1D, 0x01, 0x00, 0xAA, 0x1D, 0x01, 0x00, 0xF5, 0x1D, 0x01, 0x00, 0x46, 0x1E, 0x01, 0x00, 0x6F, -/* 000064B0 */ 0x1E, 0x01, 0x00, 0x94, 0x1E, 0x01, 0x00, 0xD1, 0x1E, 0x01, 0x00, 0x22, 0x1F, 0x01, 0x00, 0x53, -/* 000064C0 */ 0x1F, 0x01, 0x00, 0x82, 0x1F, 0x01, 0x00, 0xB0, 0x1F, 0x01, 0x00, 0xC6, 0x1F, 0x01, 0x00, 0xDA, -/* 000064D0 */ 0x1F, 0x01, 0x00, 0xE8, 0x1F, 0x01, 0x00, 0xE9, 0x1F, 0x01, 0x00, 0x26, 0x20, 0x01, 0x00, 0x70, -/* 000064E0 */ 0x20, 0x01, 0x00, 0xA1, 0x20, 0x01, 0x00, 0xD0, 0x20, 0x01, 0x00, 0xFE, 0x20, 0x01, 0x00, 0x14, -/* 000064F0 */ 0x21, 0x01, 0x00, 0x28, 0x21, 0x01, 0x00, 0x36, 0x21, 0x01, 0x00, 0x37, 0x21, 0x01, 0x00, 0x8F, -/* 00006500 */ 0x21, 0x01, 0x00, 0xD5, 0x21, 0x01, 0x00, 0x0B, 0x22, 0x01, 0x00, 0x35, 0x22, 0x01, 0x00, 0x5D, -/* 00006510 */ 0x22, 0x01, 0x00, 0x87, 0x22, 0x01, 0x00, 0xB3, 0x22, 0x01, 0x00, 0xCB, 0x22, 0x01, 0x00, 0xDE, -/* 00006520 */ 0x22, 0x01, 0x00, 0xEC, 0x22, 0x01, 0x00, 0xED, 0x22, 0x01, 0x00, 0x45, 0x23, 0x01, 0x00, 0x8F, -/* 00006530 */ 0x23, 0x01, 0x00, 0xC5, 0x23, 0x01, 0x00, 0xEF, 0x23, 0x01, 0x00, 0x17, 0x24, 0x01, 0x00, 0x41, -/* 00006540 */ 0x24, 0x01, 0x00, 0x6D, 0x24, 0x01, 0x00, 0x85, 0x24, 0x01, 0x00, 0x98, 0x24, 0x01, 0x00, 0xA6, -/* 00006550 */ 0x24, 0x01, 0x00, 0xA7, 0x24, 0x01, 0x00, 0xC3, 0x24, 0x01, 0x00, 0xCE, 0x24, 0x01, 0x00, 0xCF, -/* 00006560 */ 0x24, 0x01, 0x00, 0x02, 0x25, 0x01, 0x00, 0x32, 0x25, 0x01, 0x00, 0x5F, 0x25, 0x01, 0x00, 0x6D, -/* 00006570 */ 0x25, 0x01, 0x00, 0x6E, 0x25, 0x01, 0x00, 0xE3, 0x25, 0x01, 0x00, 0xEE, 0x25, 0x01, 0x00, 0xEF, -/* 00006580 */ 0x25, 0x01, 0x00, 0x29, 0x26, 0x01, 0x00, 0x59, 0x26, 0x01, 0x00, 0x86, 0x26, 0x01, 0x00, 0x94, -/* 00006590 */ 0x26, 0x01, 0x00, 0x95, 0x26, 0x01, 0x00, 0x09, 0x27, 0x01, 0x00, 0x14, 0x27, 0x01, 0x00, 0x15, -/* 000065A0 */ 0x27, 0x01, 0x00, 0x67, 0x27, 0x01, 0x00, 0xC3, 0x27, 0x01, 0x00, 0x07, 0x28, 0x01, 0x00, 0x26, -/* 000065B0 */ 0x28, 0x01, 0x00, 0x49, 0x28, 0x01, 0x00, 0x6B, 0x28, 0x01, 0x00, 0x77, 0x28, 0x01, 0x00, 0x78, -/* 000065C0 */ 0x28, 0x01, 0x00, 0xE9, 0x28, 0x01, 0x00, 0x30, 0x29, 0x01, 0x00, 0x6E, 0x29, 0x01, 0x00, 0x7C, -/* 000065D0 */ 0x29, 0x01, 0x00, 0xB1, 0x29, 0x01, 0x00, 0xE9, 0x29, 0x01, 0x00, 0x10, 0x2A, 0x01, 0x00, 0x1E, -/* 000065E0 */ 0x2A, 0x01, 0x00, 0x1F, 0x2A, 0x01, 0x00, 0x48, 0x2A, 0x01, 0x00, 0xA0, 0x2A, 0x01, 0x00, 0x0A, -/* 000065F0 */ 0x2B, 0x01, 0x00, 0x55, 0x2B, 0x01, 0x00, 0x82, 0x2B, 0x01, 0x00, 0xD9, 0x2B, 0x01, 0x00, 0xF2, -/* 00006600 */ 0x2B, 0x01, 0x00, 0x18, 0x2C, 0x01, 0x00, 0x46, 0x2C, 0x01, 0x00, 0xBC, 0x2C, 0x01, 0x00, 0x13, -/* 00006610 */ 0x2D, 0x01, 0x00, 0x25, 0x2D, 0x01, 0x00, 0x33, 0x2D, 0x01, 0x00, 0x34, 0x2D, 0x01, 0x00, 0x54, -/* 00006620 */ 0x2D, 0x01, 0x00, 0x7E, 0x2D, 0x01, 0x00, 0xEC, 0x2D, 0x01, 0x00, 0xFA, 0x2D, 0x01, 0x00, 0xFB, -/* 00006630 */ 0x2D, 0x01, 0x00, 0x8D, 0x2E, 0x01, 0x00, 0x97, 0x2E, 0x01, 0x00, 0x98, 0x2E, 0x01, 0x00, 0x11, -/* 00006640 */ 0x2F, 0x01, 0x00, 0x99, 0x2F, 0x01, 0x00, 0x14, 0x30, 0x01, 0x00, 0x99, 0x30, 0x01, 0x00, 0xBA, -/* 00006650 */ 0x30, 0x01, 0x00, 0xC5, 0x30, 0x01, 0x00, 0x4C, 0x31, 0x01, 0x00, 0xCE, 0x31, 0x01, 0x00, 0x54, -/* 00006660 */ 0x32, 0x01, 0x00, 0xA4, 0x32, 0x01, 0x00, 0xAF, 0x32, 0x01, 0x00, 0x2D, 0x33, 0x01, 0x00, 0x9A, -/* 00006670 */ 0x33, 0x01, 0x00, 0xF1, 0x33, 0x01, 0x00, 0x58, 0x34, 0x01, 0x00, 0xCE, 0x34, 0x01, 0x00, 0x1B, -/* 00006680 */ 0x35, 0x01, 0x00, 0x26, 0x35, 0x01, 0x00, 0x98, 0x35, 0x01, 0x00, 0xA3, 0x35, 0x01, 0x00, 0x2B, -/* 00006690 */ 0x36, 0x01, 0x00, 0xB0, 0x36, 0x01, 0x00, 0xF7, 0x36, 0x01, 0x00, 0xF8, 0x36, 0x01, 0x00, 0x44, -/* 000066A0 */ 0x37, 0x01, 0x00, 0xDD, 0x37, 0x01, 0x00, 0x5E, 0x38, 0x01, 0x00, 0x83, 0x38, 0x01, 0x00, 0x25, -/* 000066B0 */ 0x39, 0x01, 0x00, 0x26, 0x39, 0x01, 0x00, 0x72, 0x39, 0x01, 0x00, 0x0F, 0x3A, 0x01, 0x00, 0x90, -/* 000066C0 */ 0x3A, 0x01, 0x00, 0xB5, 0x3A, 0x01, 0x00, 0x65, 0x3B, 0x01, 0x00, 0x66, 0x3B, 0x01, 0x00, 0xB2, -/* 000066D0 */ 0x3B, 0x01, 0x00, 0x4F, 0x3C, 0x01, 0x00, 0xD0, 0x3C, 0x01, 0x00, 0xF5, 0x3C, 0x01, 0x00, 0xA5, -/* 000066E0 */ 0x3D, 0x01, 0x00, 0xA6, 0x3D, 0x01, 0x00, 0x01, 0x3E, 0x01, 0x00, 0x24, 0x3E, 0x01, 0x00, 0x38, -/* 000066F0 */ 0x3E, 0x01, 0x00, 0x42, 0x3E, 0x01, 0x00, 0x43, 0x3E, 0x01, 0x00, 0x4F, 0x3E, 0x01, 0x00, 0x7E, -/* 00006700 */ 0x3E, 0x01, 0x00, 0x89, 0x3E, 0x01, 0x00, 0xB7, 0x3E, 0x01, 0x00, 0xC2, 0x3E, 0x01, 0x00, 0xEE, -/* 00006710 */ 0x3E, 0x01, 0x00, 0x11, 0x3F, 0x01, 0x00, 0x1D, 0x3F, 0x01, 0x00, 0x69, 0x3F, 0x01, 0x00, 0xA0, -/* 00006720 */ 0x3F, 0x01, 0x00, 0xDD, 0x3F, 0x01, 0x00, 0xEB, 0x3F, 0x01, 0x00, 0xEC, 0x3F, 0x01, 0x00, 0x1D, -/* 00006730 */ 0x40, 0x01, 0x00, 0x45, 0x40, 0x01, 0x00, 0x8C, 0x40, 0x01, 0x00, 0x9A, 0x40, 0x01, 0x00, 0x9B, -/* 00006740 */ 0x40, 0x01, 0x00, 0xCE, 0x40, 0x01, 0x00, 0x0C, 0x41, 0x01, 0x00, 0x0D, 0x41, 0x01, 0x00, 0x3B, -/* 00006750 */ 0x41, 0x01, 0x00, 0x66, 0x41, 0x01, 0x00, 0xA3, 0x41, 0x01, 0x00, 0xB1, 0x41, 0x01, 0x00, 0xB2, -/* 00006760 */ 0x41, 0x01, 0x00, 0xF8, 0x41, 0x01, 0x00, 0xF9, 0x41, 0x01, 0x00, 0x47, 0x42, 0x01, 0x00, 0x83, -/* 00006770 */ 0x42, 0x01, 0x00, 0xB5, 0x42, 0x01, 0x00, 0xB6, 0x42, 0x01, 0x00, 0xCE, 0x42, 0x01, 0x00, 0xD8, -/* 00006780 */ 0x42, 0x01, 0x00, 0x1A, 0x43, 0x01, 0x00, 0x1B, 0x43, 0x01, 0x00, 0x27, 0x43, 0x01, 0x00, 0x86, -/* 00006790 */ 0x43, 0x01, 0x00, 0x91, 0x43, 0x01, 0x00, 0xC8, 0x43, 0x01, 0x00, 0xD3, 0x43, 0x01, 0x00, 0x2D, -/* 000067A0 */ 0x44, 0x01, 0x00, 0x91, 0x44, 0x01, 0x00, 0xD1, 0x44, 0x01, 0x00, 0xDD, 0x44, 0x01, 0x00, 0x11, -/* 000067B0 */ 0x45, 0x01, 0x00, 0x3C, 0x45, 0x01, 0x00, 0xA7, 0x45, 0x01, 0x00, 0xB5, 0x45, 0x01, 0x00, 0xF3, -/* 000067C0 */ 0x45, 0x01, 0x00, 0x4C, 0x46, 0x01, 0x00, 0xB7, 0x46, 0x01, 0x00, 0xC5, 0x46, 0x01, 0x00, 0xC6, -/* 000067D0 */ 0x46, 0x01, 0x00, 0xE7, 0x46, 0x01, 0x00, 0xF2, 0x46, 0x01, 0x00, 0xF3, 0x46, 0x01, 0x00, 0xFF, -/* 000067E0 */ 0x46, 0x01, 0x00, 0x53, 0x47, 0x01, 0x00, 0x5E, 0x47, 0x01, 0x00, 0xAB, 0x47, 0x01, 0x00, 0xB6, -/* 000067F0 */ 0x47, 0x01, 0x00, 0x10, 0x48, 0x01, 0x00, 0x49, 0x48, 0x01, 0x00, 0xAD, 0x48, 0x01, 0x00, 0xB9, -/* 00006800 */ 0x48, 0x01, 0x00, 0xF3, 0x48, 0x01, 0x00, 0x2D, 0x49, 0x01, 0x00, 0x2E, 0x49, 0x01, 0x00, 0x41, -/* 00006810 */ 0x49, 0x01, 0x00, 0x67, 0x49, 0x01, 0x00, 0xA5, 0x49, 0x01, 0x00, 0xBA, 0x49, 0x01, 0x00, 0xE7, -/* 00006820 */ 0x49, 0x01, 0x00, 0xF5, 0x49, 0x01, 0x00, 0xF6, 0x49, 0x01, 0x00, 0x33, 0x4A, 0x01, 0x00, 0x59, -/* 00006830 */ 0x4A, 0x01, 0x00, 0x64, 0x4A, 0x01, 0x00, 0x65, 0x4A, 0x01, 0x00, 0x8E, 0x4A, 0x01, 0x00, 0xE9, -/* 00006840 */ 0x4A, 0x01, 0x00, 0xF4, 0x4A, 0x01, 0x00, 0x3F, 0x4B, 0x01, 0x00, 0x40, 0x4B, 0x01, 0x00, 0x70, -/* 00006850 */ 0x4B, 0x01, 0x00, 0xD9, 0x4B, 0x01, 0x00, 0xE4, 0x4B, 0x01, 0x00, 0x3D, 0x4C, 0x01, 0x00, 0x3E, -/* 00006860 */ 0x4C, 0x01, 0x00, 0x76, 0x4C, 0x01, 0x00, 0x9F, 0x4C, 0x01, 0x00, 0xBC, 0x4C, 0x01, 0x00, 0xDB, -/* 00006870 */ 0x4C, 0x01, 0x00, 0xFB, 0x4C, 0x01, 0x00, 0x07, 0x4D, 0x01, 0x00, 0x49, 0x4D, 0x01, 0x00, 0x4A, -/* 00006880 */ 0x4D, 0x01, 0x00, 0x8E, 0x4D, 0x01, 0x00, 0xB1, 0x4D, 0x01, 0x00, 0xCD, 0x4D, 0x01, 0x00, 0xEC, -/* 00006890 */ 0x4D, 0x01, 0x00, 0x0B, 0x4E, 0x01, 0x00, 0x17, 0x4E, 0x01, 0x00, 0x18, 0x4E, 0x01, 0x00, 0x96, -/* 000068A0 */ 0x4E, 0x01, 0x00, 0xBE, 0x4E, 0x01, 0x00, 0xFB, 0x4E, 0x01, 0x00, 0xFC, 0x4E, 0x01, 0x00, 0x29, -/* 000068B0 */ 0x4F, 0x01, 0x00, 0x34, 0x4F, 0x01, 0x00, 0x62, 0x4F, 0x01, 0x00, 0x83, 0x4F, 0x01, 0x00, 0xA0, -/* 000068C0 */ 0x4F, 0x01, 0x00, 0xBF, 0x4F, 0x01, 0x00, 0xDF, 0x4F, 0x01, 0x00, 0xEB, 0x4F, 0x01, 0x00, 0x2A, -/* 000068D0 */ 0x50, 0x01, 0x00, 0x67, 0x50, 0x01, 0x00, 0x86, 0x50, 0x01, 0x00, 0xA6, 0x50, 0x01, 0x00, 0xB2, -/* 000068E0 */ 0x50, 0x01, 0x00, 0xF8, 0x50, 0x01, 0x00, 0x1A, 0x51, 0x01, 0x00, 0x39, 0x51, 0x01, 0x00, 0x59, -/* 000068F0 */ 0x51, 0x01, 0x00, 0x75, 0x51, 0x01, 0x00, 0x81, 0x51, 0x01, 0x00, 0xC9, 0x51, 0x01, 0x00, 0xF9, -/* 00006900 */ 0x51, 0x01, 0x00, 0x45, 0x52, 0x01, 0x00, 0x67, 0x52, 0x01, 0x00, 0x85, 0x52, 0x01, 0x00, 0xA5, -/* 00006910 */ 0x52, 0x01, 0x00, 0xCC, 0x52, 0x01, 0x00, 0xEC, 0x52, 0x01, 0x00, 0x0D, 0x53, 0x01, 0x00, 0x2C, -/* 00006920 */ 0x53, 0x01, 0x00, 0x47, 0x53, 0x01, 0x00, 0x63, 0x53, 0x01, 0x00, 0x80, 0x53, 0x01, 0x00, 0x9B, -/* 00006930 */ 0x53, 0x01, 0x00, 0xB7, 0x53, 0x01, 0x00, 0xD5, 0x53, 0x01, 0x00, 0xF3, 0x53, 0x01, 0x00, 0x17, -/* 00006940 */ 0x54, 0x01, 0x00, 0x2A, 0x54, 0x01, 0x00, 0x2B, 0x54, 0x01, 0x00, 0x8B, 0x54, 0x01, 0x00, 0xBB, -/* 00006950 */ 0x54, 0x01, 0x00, 0xF6, 0x54, 0x01, 0x00, 0x44, 0x55, 0x01, 0x00, 0x79, 0x55, 0x01, 0x00, 0xC5, -/* 00006960 */ 0x55, 0x01, 0x00, 0xDF, 0x55, 0x01, 0x00, 0xE0, 0x55, 0x01, 0x00, 0x05, 0x56, 0x01, 0x00, 0x1B, -/* 00006970 */ 0x56, 0x01, 0x00, 0x2F, 0x56, 0x01, 0x00, 0x3E, 0x56, 0x01, 0x00, 0x5A, 0x56, 0x01, 0x00, 0x79, -/* 00006980 */ 0x56, 0x01, 0x00, 0x99, 0x56, 0x01, 0x00, 0xA5, 0x56, 0x01, 0x00, 0xA6, 0x56, 0x01, 0x00, 0xDA, -/* 00006990 */ 0x56, 0x01, 0x00, 0x3B, 0x57, 0x01, 0x00, 0xD6, 0x57, 0x01, 0x00, 0x6C, 0x58, 0x01, 0x00, 0x78, -/* 000069A0 */ 0x58, 0x01, 0x00, 0xF3, 0x58, 0x01, 0x00, 0x39, 0x59, 0x01, 0x00, 0x62, 0x59, 0x01, 0x00, 0x7F, -/* 000069B0 */ 0x59, 0x01, 0x00, 0x9E, 0x59, 0x01, 0x00, 0xBE, 0x59, 0x01, 0x00, 0xCA, 0x59, 0x01, 0x00, 0x0B, -/* 000069C0 */ 0x5A, 0x01, 0x00, 0x41, 0x5A, 0x01, 0x00, 0x5D, 0x5A, 0x01, 0x00, 0x7C, 0x5A, 0x01, 0x00, 0x9C, -/* 000069D0 */ 0x5A, 0x01, 0x00, 0xA8, 0x5A, 0x01, 0x00, 0xA9, 0x5A, 0x01, 0x00, 0xC8, 0x5A, 0x01, 0x00, 0xD2, -/* 000069E0 */ 0x5A, 0x01, 0x00, 0xD3, 0x5A, 0x01, 0x00, 0xF9, 0x5A, 0x01, 0x00, 0x1C, 0x5B, 0x01, 0x00, 0x30, -/* 000069F0 */ 0x5B, 0x01, 0x00, 0x3A, 0x5B, 0x01, 0x00, 0x3B, 0x5B, 0x01, 0x00, 0x47, 0x5B, 0x01, 0x00, 0x7B, -/* 00006A00 */ 0x5B, 0x01, 0x00, 0x86, 0x5B, 0x01, 0x00, 0xB6, 0x5B, 0x01, 0x00, 0xC1, 0x5B, 0x01, 0x00, 0xE8, -/* 00006A10 */ 0x5B, 0x01, 0x00, 0x14, 0x5C, 0x01, 0x00, 0x37, 0x5C, 0x01, 0x00, 0x43, 0x5C, 0x01, 0x00, 0x94, -/* 00006A20 */ 0x5C, 0x01, 0x00, 0xDA, 0x5C, 0x01, 0x00, 0x31, 0x5D, 0x01, 0x00, 0x55, 0x5D, 0x01, 0x00, 0xC2, -/* 00006A30 */ 0x5D, 0x01, 0x00, 0x2C, 0x5E, 0x01, 0x00, 0x2D, 0x5E, 0x01, 0x00, 0x72, 0x5E, 0x01, 0x00, 0x73, -/* 00006A40 */ 0x5E, 0x01, 0x00, 0xD6, 0x5E, 0x01, 0x00, 0x34, 0x5F, 0x01, 0x00, 0x35, 0x5F, 0x01, 0x00, 0x60, -/* 00006A50 */ 0x5F, 0x01, 0x00, 0xB6, 0x5F, 0x01, 0x00, 0xB7, 0x5F, 0x01, 0x00, 0xEE, 0x5F, 0x01, 0x00, 0xEF, -/* 00006A60 */ 0x5F, 0x01, 0x00, 0x0F, 0x60, 0x01, 0x00, 0x1A, 0x60, 0x01, 0x00, 0x1B, 0x60, 0x01, 0x00, 0x27, -/* 00006A70 */ 0x60, 0x01, 0x00, 0x78, 0x60, 0x01, 0x00, 0xB7, 0x60, 0x01, 0x00, 0xC2, 0x60, 0x01, 0x00, 0xEA, -/* 00006A80 */ 0x60, 0x01, 0x00, 0xF5, 0x60, 0x01, 0x00, 0x1C, 0x61, 0x01, 0x00, 0x39, 0x61, 0x01, 0x00, 0x45, -/* 00006A90 */ 0x61, 0x01, 0x00, 0x7F, 0x61, 0x01, 0x00, 0xA1, 0x61, 0x01, 0x00, 0xC1, 0x61, 0x01, 0x00, 0xCF, -/* 00006AA0 */ 0x61, 0x01, 0x00, 0xD0, 0x61, 0x01, 0x00, 0x0F, 0x62, 0x01, 0x00, 0x1A, 0x62, 0x01, 0x00, 0x1B, -/* 00006AB0 */ 0x62, 0x01, 0x00, 0x6B, 0x62, 0x01, 0x00, 0xC8, 0x62, 0x01, 0x00, 0xF4, 0x62, 0x01, 0x00, 0x47, -/* 00006AC0 */ 0x63, 0x01, 0x00, 0x55, 0x63, 0x01, 0x00, 0x56, 0x63, 0x01, 0x00, 0x82, 0x63, 0x01, 0x00, 0xBB, -/* 00006AD0 */ 0x63, 0x01, 0x00, 0xBC, 0x63, 0x01, 0x00, 0xFE, 0x63, 0x01, 0x00, 0xFF, 0x63, 0x01, 0x00, 0x18, -/* 00006AE0 */ 0x64, 0x01, 0x00, 0x23, 0x64, 0x01, 0x00, 0x5F, 0x64, 0x01, 0x00, 0x60, 0x64, 0x01, 0x00, 0x95, -/* 00006AF0 */ 0x64, 0x01, 0x00, 0xCA, 0x64, 0x01, 0x00, 0xE1, 0x64, 0x01, 0x00, 0xFE, 0x64, 0x01, 0x00, 0x1D, -/* 00006B00 */ 0x65, 0x01, 0x00, 0x3E, 0x65, 0x01, 0x00, 0x4A, 0x65, 0x01, 0x00, 0x4B, 0x65, 0x01, 0x00, 0x7F, -/* 00006B10 */ 0x65, 0x01, 0x00, 0xBD, 0x65, 0x01, 0x00, 0x18, 0x66, 0x01, 0x00, 0xAD, 0x66, 0x01, 0x00, 0x3F, -/* 00006B20 */ 0x67, 0x01, 0x00, 0x4B, 0x67, 0x01, 0x00, 0xC0, 0x67, 0x01, 0x00, 0x03, 0x68, 0x01, 0x00, 0x2C, -/* 00006B30 */ 0x68, 0x01, 0x00, 0x49, 0x68, 0x01, 0x00, 0x68, 0x68, 0x01, 0x00, 0x88, 0x68, 0x01, 0x00, 0x94, -/* 00006B40 */ 0x68, 0x01, 0x00, 0xD2, 0x68, 0x01, 0x00, 0x05, 0x69, 0x01, 0x00, 0x21, 0x69, 0x01, 0x00, 0x40, -/* 00006B50 */ 0x69, 0x01, 0x00, 0x60, 0x69, 0x01, 0x00, 0x6C, 0x69, 0x01, 0x00, 0x6D, 0x69, 0x01, 0x00, 0xA9, -/* 00006B60 */ 0x69, 0x01, 0x00, 0xD9, 0x69, 0x01, 0x00, 0x10, 0x6A, 0x01, 0x00, 0x45, 0x6A, 0x01, 0x00, 0xA9, -/* 00006B70 */ 0x6A, 0x01, 0x00, 0xB7, 0x6A, 0x01, 0x00, 0xB8, 0x6A, 0x01, 0x00, 0xE8, 0x6A, 0x01, 0x00, 0x11, -/* 00006B80 */ 0x6B, 0x01, 0x00, 0x1C, 0x6B, 0x01, 0x00, 0x64, 0x6B, 0x01, 0x00, 0xA0, 0x6B, 0x01, 0x00, 0xBB, -/* 00006B90 */ 0x6B, 0x01, 0x00, 0xDA, 0x6B, 0x01, 0x00, 0xFA, 0x6B, 0x01, 0x00, 0x16, 0x6C, 0x01, 0x00, 0x22, -/* 00006BA0 */ 0x6C, 0x01, 0x00, 0x23, 0x6C, 0x01, 0x00, 0x60, 0x6C, 0x01, 0x00, 0x97, 0x6C, 0x01, 0x00, 0xCC, -/* 00006BB0 */ 0x6C, 0x01, 0x00, 0x30, 0x6D, 0x01, 0x00, 0x3E, 0x6D, 0x01, 0x00, 0x3F, 0x6D, 0x01, 0x00, 0x6A, -/* 00006BC0 */ 0x6D, 0x01, 0x00, 0x84, 0x6D, 0x01, 0x00, 0x9C, 0x6D, 0x01, 0x00, 0xC4, 0x6D, 0x01, 0x00, 0xED, -/* 00006BD0 */ 0x6D, 0x01, 0x00, 0x16, 0x6E, 0x01, 0x00, 0x42, 0x6E, 0x01, 0x00, 0x6E, 0x6E, 0x01, 0x00, 0x91, -/* 00006BE0 */ 0x6E, 0x01, 0x00, 0xBA, 0x6E, 0x01, 0x00, 0xED, 0x6E, 0x01, 0x00, 0x5C, 0x6F, 0x01, 0x00, 0xAD, -/* 00006BF0 */ 0x6F, 0x01, 0x00, 0xCE, 0x6F, 0x01, 0x00, 0xE0, 0x6F, 0x01, 0x00, 0xF0, 0x6F, 0x01, 0x00, 0xFB, -/* 00006C00 */ 0x6F, 0x01, 0x00, 0x55, 0x70, 0x01, 0x00, 0x9A, 0x70, 0x01, 0x00, 0xBE, 0x70, 0x01, 0x00, 0xDD, -/* 00006C10 */ 0x70, 0x01, 0x00, 0xFD, 0x70, 0x01, 0x00, 0x19, 0x71, 0x01, 0x00, 0x25, 0x71, 0x01, 0x00, 0x26, -/* 00006C20 */ 0x71, 0x01, 0x00, 0x42, 0x71, 0x01, 0x00, 0x4C, 0x71, 0x01, 0x00, 0x4D, 0x71, 0x01, 0x00, 0x7E, -/* 00006C30 */ 0x71, 0x01, 0x00, 0x9D, 0x71, 0x01, 0x00, 0x2F, 0x72, 0x01, 0x00, 0xC1, 0x72, 0x01, 0x00, 0x53, -/* 00006C40 */ 0x73, 0x01, 0x00, 0xE5, 0x73, 0x01, 0x00, 0xEB, 0x73, 0x01, 0x00, 0xEC, 0x73, 0x01, 0x00, 0xF2, -/* 00006C50 */ 0x73, 0x01, 0x00, 0xFA, 0x73, 0x01, 0x00, 0x01, 0x74, 0x01, 0x00, 0x08, 0x74, 0x01, 0x00, 0x0F, -/* 00006C60 */ 0x74, 0x01, 0x00, 0x16, 0x74, 0x01, 0x00, 0x1D, 0x74, 0x01, 0x00, 0x24, 0x74, 0x01, 0x00, 0x42, -/* 00006C70 */ 0x74, 0x01, 0x00, 0x49, 0x74, 0x01, 0x00, 0x50, 0x74, 0x01, 0x00, 0x57, 0x74, 0x01, 0x00, 0x5E, -/* 00006C80 */ 0x74, 0x01, 0x00, 0x65, 0x74, 0x01, 0x00, 0x6C, 0x74, 0x01, 0x00, 0x74, 0x74, 0x01, 0x00, 0x7F, -/* 00006C90 */ 0x74, 0x01, 0x00, 0x80, 0x74, 0x01, 0x00, 0xB4, 0x74, 0x01, 0x00, 0xEA, 0x74, 0x01, 0x00, 0xF0, -/* 00006CA0 */ 0x74, 0x01, 0x00, 0x25, 0x75, 0x01, 0x00, 0x5C, 0x75, 0x01, 0x00, 0x62, 0x75, 0x01, 0x00, 0x63, -/* 00006CB0 */ 0x75, 0x01, 0x00, 0x88, 0x75, 0x01, 0x00, 0xB3, 0x75, 0x01, 0x00, 0xE8, 0x75, 0x01, 0x00, 0x0C, -/* 00006CC0 */ 0x76, 0x01, 0x00, 0x16, 0x76, 0x01, 0x00, 0x17, 0x76, 0x01, 0x00, 0x4B, 0x76, 0x01, 0x00, 0x62, -/* 00006CD0 */ 0x76, 0x01, 0x00, 0xB1, 0x76, 0x01, 0x00, 0xE3, 0x76, 0x01, 0x00, 0x07, 0x77, 0x01, 0x00, 0x18, -/* 00006CE0 */ 0x77, 0x01, 0x00, 0x3E, 0x77, 0x01, 0x00, 0x48, 0x77, 0x01, 0x00, 0x49, 0x77, 0x01, 0x00, 0x69, -/* 00006CF0 */ 0x77, 0x01, 0x00, 0x70, 0x77, 0x01, 0x00, 0x71, 0x77, 0x01, 0x00, 0xB7, 0x77, 0x01, 0x00, 0x06, -/* 00006D00 */ 0x78, 0x01, 0x00, 0x25, 0x78, 0x01, 0x00, 0x73, 0x78, 0x01, 0x00, 0xA6, 0x78, 0x01, 0x00, 0xD6, -/* 00006D10 */ 0x78, 0x01, 0x00, 0x16, 0x79, 0x01, 0x00, 0x42, 0x79, 0x01, 0x00, 0x50, 0x79, 0x01, 0x00, 0x5A, -/* 00006D20 */ 0x79, 0x01, 0x00, 0x75, 0x79, 0x01, 0x00, 0x7C, 0x79, 0x01, 0x00, 0x7D, 0x79, 0x01, 0x00, 0xB4, -/* 00006D30 */ 0x79, 0x01, 0x00, 0xF4, 0x79, 0x01, 0x00, 0x13, 0x7A, 0x01, 0x00, 0x33, 0x7A, 0x01, 0x00, 0x5B, -/* 00006D40 */ 0x7A, 0x01, 0x00, 0x69, 0x7A, 0x01, 0x00, 0xB3, 0x7A, 0x01, 0x00, 0xCF, 0x7A, 0x01, 0x00, 0xE0, -/* 00006D50 */ 0x7A, 0x01, 0x00, 0xFB, 0x7A, 0x01, 0x00, 0x05, 0x7B, 0x01, 0x00, 0x0C, 0x7B, 0x01, 0x00, 0x0D, -/* 00006D60 */ 0x7B, 0x01, 0x00, 0x47, 0x7B, 0x01, 0x00, 0x60, 0x7B, 0x01, 0x00, 0x83, 0x7B, 0x01, 0x00, 0xA5, -/* 00006D70 */ 0x7B, 0x01, 0x00, 0xC9, 0x7B, 0x01, 0x00, 0xD7, 0x7B, 0x01, 0x00, 0xEE, 0x7B, 0x01, 0x00, 0xF8, -/* 00006D80 */ 0x7B, 0x01, 0x00, 0xFF, 0x7B, 0x01, 0x00, 0x00, 0x7C, 0x01, 0x00, 0x65, 0x7C, 0x01, 0x00, 0x91, -/* 00006D90 */ 0x7C, 0x01, 0x00, 0xD7, 0x7C, 0x01, 0x00, 0xED, 0x7C, 0x01, 0x00, 0xF7, 0x7C, 0x01, 0x00, 0xFE, -/* 00006DA0 */ 0x7C, 0x01, 0x00, 0xFF, 0x7C, 0x01, 0x00, 0x30, 0x7D, 0x01, 0x00, 0x67, 0x7D, 0x01, 0x00, 0x6E, -/* 00006DB0 */ 0x7D, 0x01, 0x00, 0x6F, 0x7D, 0x01, 0x00, 0xB1, 0x7D, 0x01, 0x00, 0xF7, 0x7D, 0x01, 0x00, 0x23, -/* 00006DC0 */ 0x7E, 0x01, 0x00, 0x67, 0x7E, 0x01, 0x00, 0x92, 0x7E, 0x01, 0x00, 0xBB, 0x7E, 0x01, 0x00, 0xE7, -/* 00006DD0 */ 0x7E, 0x01, 0x00, 0xF9, 0x7E, 0x01, 0x00, 0x4B, 0x7F, 0x01, 0x00, 0xC0, 0x7F, 0x01, 0x00, 0xCE, -/* 00006DE0 */ 0x7F, 0x01, 0x00, 0x19, 0x80, 0x01, 0x00, 0x5B, 0x80, 0x01, 0x00, 0xCB, 0x80, 0x01, 0x00, 0xFE, -/* 00006DF0 */ 0x80, 0x01, 0x00, 0x26, 0x81, 0x01, 0x00, 0x30, 0x81, 0x01, 0x00, 0x31, 0x81, 0x01, 0x00, 0x59, -/* 00006E00 */ 0x81, 0x01, 0x00, 0x7C, 0x81, 0x01, 0x00, 0xB3, 0x81, 0x01, 0x00, 0xD1, 0x81, 0x01, 0x00, 0xE2, -/* 00006E10 */ 0x81, 0x01, 0x00, 0x05, 0x82, 0x01, 0x00, 0x0F, 0x82, 0x01, 0x00, 0x15, 0x82, 0x01, 0x00, 0x16, -/* 00006E20 */ 0x82, 0x01, 0x00, 0x56, 0x82, 0x01, 0x00, 0xA9, 0x82, 0x01, 0x00, 0xD5, 0x82, 0x01, 0x00, 0x26, -/* 00006E30 */ 0x83, 0x01, 0x00, 0x51, 0x83, 0x01, 0x00, 0x7A, 0x83, 0x01, 0x00, 0xA6, 0x83, 0x01, 0x00, 0xB8, -/* 00006E40 */ 0x83, 0x01, 0x00, 0x18, 0x84, 0x01, 0x00, 0x69, 0x84, 0x01, 0x00, 0x93, 0x84, 0x01, 0x00, 0xCC, -/* 00006E50 */ 0x84, 0x01, 0x00, 0x06, 0x85, 0x01, 0x00, 0x14, 0x85, 0x01, 0x00, 0x5F, 0x85, 0x01, 0x00, 0xA1, -/* 00006E60 */ 0x85, 0x01, 0x00, 0x1E, 0x86, 0x01, 0x00, 0x51, 0x86, 0x01, 0x00, 0x79, 0x86, 0x01, 0x00, 0x83, -/* 00006E70 */ 0x86, 0x01, 0x00, 0xA2, 0x86, 0x01, 0x00, 0xA8, 0x86, 0x01, 0x00, 0xA9, 0x86, 0x01, 0x00, 0xDB, -/* 00006E80 */ 0x86, 0x01, 0x00, 0xFB, 0x86, 0x01, 0x00, 0x1F, 0x87, 0x01, 0x00, 0x29, 0x87, 0x01, 0x00, 0x2A, -/* 00006E90 */ 0x87, 0x01, 0x00, 0x75, 0x87, 0x01, 0x00, 0x8B, 0x87, 0x01, 0x00, 0xA9, 0x87, 0x01, 0x00, 0xB3, -/* 00006EA0 */ 0x87, 0x01, 0x00, 0xB4, 0x87, 0x01, 0x00, 0x29, 0x88, 0x01, 0x00, 0x79, 0x88, 0x01, 0x00, 0xBE, -/* 00006EB0 */ 0x88, 0x01, 0x00, 0xBF, 0x88, 0x01, 0x00, 0x32, 0x89, 0x01, 0x00, 0x4B, 0x89, 0x01, 0x00, 0x6F, -/* 00006EC0 */ 0x89, 0x01, 0x00, 0x93, 0x89, 0x01, 0x00, 0xEB, 0x89, 0x01, 0x00, 0x2E, 0x8A, 0x01, 0x00, 0xB7, -/* 00006ED0 */ 0x8A, 0x01, 0x00, 0xB8, 0x8A, 0x01, 0x00, 0xD3, 0x8A, 0x01, 0x00, 0xD9, 0x8A, 0x01, 0x00, 0xDA, -/* 00006EE0 */ 0x8A, 0x01, 0x00, 0x34, 0x8B, 0x01, 0x00, 0x6A, 0x8B, 0x01, 0x00, 0x8A, 0x8B, 0x01, 0x00, 0xE7, -/* 00006EF0 */ 0x8B, 0x01, 0x00, 0x1A, 0x8C, 0x01, 0x00, 0x24, 0x8C, 0x01, 0x00, 0x25, 0x8C, 0x01, 0x00, 0x3C, -/* 00006F00 */ 0x8C, 0x01, 0x00, 0x8C, 0x8C, 0x01, 0x00, 0xE8, 0x8C, 0x01, 0x00, 0xF8, 0x8C, 0x01, 0x00, 0x02, -/* 00006F10 */ 0x8D, 0x01, 0x00, 0x03, 0x8D, 0x01, 0x00, 0x92, 0x8D, 0x01, 0x00, 0x18, 0x8E, 0x01, 0x00, 0x93, -/* 00006F20 */ 0x8E, 0x01, 0x00, 0xDC, 0x8E, 0x01, 0x00, 0x12, 0x8F, 0x01, 0x00, 0x13, 0x8F, 0x01, 0x00, 0x5F, -/* 00006F30 */ 0x8F, 0x01, 0x00, 0x7E, 0x8F, 0x01, 0x00, 0xCF, 0x8F, 0x01, 0x00, 0x49, 0x90, 0x01, 0x00, 0x6D, -/* 00006F40 */ 0x90, 0x01, 0x00, 0xC8, 0x90, 0x01, 0x00, 0x13, 0x91, 0x01, 0x00, 0x25, 0x91, 0x01, 0x00, 0x36, -/* 00006F50 */ 0x91, 0x01, 0x00, 0x56, 0x91, 0x01, 0x00, 0x60, 0x91, 0x01, 0x00, 0x61, 0x91, 0x01, 0x00, 0xD0, -/* 00006F60 */ 0x91, 0x01, 0x00, 0xFE, 0x91, 0x01, 0x00, 0x33, 0x92, 0x01, 0x00, 0x5C, 0x92, 0x01, 0x00, 0x74, -/* 00006F70 */ 0x92, 0x01, 0x00, 0xAE, 0x92, 0x01, 0x00, 0xD8, 0x92, 0x01, 0x00, 0xFD, 0x92, 0x01, 0x00, 0x16, -/* 00006F80 */ 0x93, 0x01, 0x00, 0x3D, 0x93, 0x01, 0x00, 0x4F, 0x93, 0x01, 0x00, 0x5D, 0x93, 0x01, 0x00, 0x5E, -/* 00006F90 */ 0x93, 0x01, 0x00, 0xA9, 0x93, 0x01, 0x00, 0xBA, 0x93, 0x01, 0x00, 0xDC, 0x93, 0x01, 0x00, 0xE6, -/* 00006FA0 */ 0x93, 0x01, 0x00, 0xE7, 0x93, 0x01, 0x00, 0x05, 0x94, 0x01, 0x00, 0x23, 0x94, 0x01, 0x00, 0x41, -/* 00006FB0 */ 0x94, 0x01, 0x00, 0x72, 0x94, 0x01, 0x00, 0x84, 0x94, 0x01, 0x00, 0x8A, 0x94, 0x01, 0x00, 0x8B, -/* 00006FC0 */ 0x94, 0x01, 0x00, 0xEB, 0x94, 0x01, 0x00, 0x43, 0x95, 0x01, 0x00, 0x76, 0x95, 0x01, 0x00, 0x77, -/* 00006FD0 */ 0x95, 0x01, 0x00, 0xA8, 0x95, 0x01, 0x00, 0xA9, 0x95, 0x01, 0x00, 0xDD, 0x95, 0x01, 0x00, 0x08, -/* 00006FE0 */ 0x96, 0x01, 0x00, 0x71, 0x96, 0x01, 0x00, 0xA2, 0x96, 0x01, 0x00, 0xC3, 0x96, 0x01, 0x00, 0xD1, -/* 00006FF0 */ 0x96, 0x01, 0x00, 0xDB, 0x96, 0x01, 0x00, 0x30, 0x97, 0x01, 0x00, 0x36, 0x97, 0x01, 0x00, 0x37, -/* 00007000 */ 0x97, 0x01, 0x00, 0x7A, 0x97, 0x01, 0x00, 0xA7, 0x97, 0x01, 0x00, 0xD5, 0x97, 0x01, 0x00, 0xFC, -/* 00007010 */ 0x97, 0x01, 0x00, 0x28, 0x98, 0x01, 0x00, 0x32, 0x98, 0x01, 0x00, 0x33, 0x98, 0x01, 0x00, 0x55, -/* 00007020 */ 0x98, 0x01, 0x00, 0x7A, 0x98, 0x01, 0x00, 0xA2, 0x98, 0x01, 0x00, 0xB0, 0x98, 0x01, 0x00, 0xB1, -/* 00007030 */ 0x98, 0x01, 0x00, 0xDD, 0x98, 0x01, 0x00, 0x2A, 0x99, 0x01, 0x00, 0x43, 0x99, 0x01, 0x00, 0x81, -/* 00007040 */ 0x99, 0x01, 0x00, 0xB5, 0x99, 0x01, 0x00, 0xCA, 0x99, 0x01, 0x00, 0xF9, 0x99, 0x01, 0x00, 0x07, -/* 00007050 */ 0x9A, 0x01, 0x00, 0x18, 0x9A, 0x01, 0x00, 0x69, 0x9A, 0x01, 0x00, 0x99, 0x9A, 0x01, 0x00, 0xFF, -/* 00007060 */ 0x9A, 0x01, 0x00, 0x09, 0x9B, 0x01, 0x00, 0x0A, 0x9B, 0x01, 0x00, 0x32, 0x9B, 0x01, 0x00, 0x39, -/* 00007070 */ 0x9B, 0x01, 0x00, 0x3A, 0x9B, 0x01, 0x00, 0x5C, 0x9B, 0x01, 0x00, 0x7A, 0x9B, 0x01, 0x00, 0x9F, -/* 00007080 */ 0x9B, 0x01, 0x00, 0xC1, 0x9B, 0x01, 0x00, 0xF1, 0x9B, 0x01, 0x00, 0x03, 0x9C, 0x01, 0x00, 0x43, -/* 00007090 */ 0x9C, 0x01, 0x00, 0x52, 0x9C, 0x01, 0x00, 0x53, 0x9C, 0x01, 0x00, 0x78, 0x9C, 0x01, 0x00, 0xB8, -/* 000070A0 */ 0x9C, 0x01, 0x00, 0xC7, 0x9C, 0x01, 0x00, 0xC8, 0x9C, 0x01, 0x00, 0xED, 0x9C, 0x01, 0x00, 0x27, -/* 000070B0 */ 0x9D, 0x01, 0x00, 0x36, 0x9D, 0x01, 0x00, 0x37, 0x9D, 0x01, 0x00, 0x64, 0x9D, 0x01, 0x00, 0xA5, -/* 000070C0 */ 0x9D, 0x01, 0x00, 0xB4, 0x9D, 0x01, 0x00, 0xB5, 0x9D, 0x01, 0x00, 0xDA, 0x9D, 0x01, 0x00, 0xFF, -/* 000070D0 */ 0x9D, 0x01, 0x00, 0x1C, 0x9E, 0x01, 0x00, 0x50, 0x9E, 0x01, 0x00, 0x8B, 0x9E, 0x01, 0x00, 0x9D, -/* 000070E0 */ 0x9E, 0x01, 0x00, 0xB9, 0x9E, 0x01, 0x00, 0xC8, 0x9E, 0x01, 0x00, 0xC9, 0x9E, 0x01, 0x00, 0xF4, -/* 000070F0 */ 0x9E, 0x01, 0x00, 0x20, 0x9F, 0x01, 0x00, 0x3C, 0x9F, 0x01, 0x00, 0x8C, 0x9F, 0x01, 0x00, 0xB1, -/* 00007100 */ 0x9F, 0x01, 0x00, 0xC7, 0x9F, 0x01, 0x00, 0xF8, 0x9F, 0x01, 0x00, 0x0A, 0xA0, 0x01, 0x00, 0x18, -/* 00007110 */ 0xA0, 0x01, 0x00, 0x29, 0xA0, 0x01, 0x00, 0x33, 0xA0, 0x01, 0x00, 0x34, 0xA0, 0x01, 0x00, 0x5B, -/* 00007120 */ 0xA0, 0x01, 0x00, 0x9F, 0xA0, 0x01, 0x00, 0xC6, 0xA0, 0x01, 0x00, 0xC7, 0xA0, 0x01, 0x00, 0xEA, -/* 00007130 */ 0xA0, 0x01, 0x00, 0x0F, 0xA1, 0x01, 0x00, 0x49, 0xA1, 0x01, 0x00, 0x57, 0xA1, 0x01, 0x00, 0x58, -/* 00007140 */ 0xA1, 0x01, 0x00, 0x7C, 0xA1, 0x01, 0x00, 0xAE, 0xA1, 0x01, 0x00, 0xBC, 0xA1, 0x01, 0x00, 0xBD, -/* 00007150 */ 0xA1, 0x01, 0x00, 0xE1, 0xA1, 0x01, 0x00, 0x13, 0xA2, 0x01, 0x00, 0x21, 0xA2, 0x01, 0x00, 0x22, -/* 00007160 */ 0xA2, 0x01, 0x00, 0x89, 0xA2, 0x01, 0x00, 0x24, 0xA3, 0x01, 0x00, 0x32, 0xA3, 0x01, 0x00, 0x33, -/* 00007170 */ 0xA3, 0x01, 0x00, 0x4D, 0xA3, 0x01, 0x00, 0x57, 0xA3, 0x01, 0x00, 0x58, 0xA3, 0x01, 0x00, 0x71, -/* 00007180 */ 0xA3, 0x01, 0x00, 0x77, 0xA3, 0x01, 0x00, 0x78, 0xA3, 0x01, 0x00, 0xC6, 0xA3, 0x01, 0x00, 0xF2, -/* 00007190 */ 0xA3, 0x01, 0x00, 0xF3, 0xA3, 0x01, 0x00, 0x22, 0xA4, 0x01, 0x00, 0x62, 0xA4, 0x01, 0x00, 0x63, -/* 000071A0 */ 0xA4, 0x01, 0x00, 0xC4, 0xA4, 0x01, 0x00, 0x46, 0xA5, 0x01, 0x00, 0x54, 0xA5, 0x01, 0x00, 0x55, -/* 000071B0 */ 0xA5, 0x01, 0x00, 0x84, 0xA5, 0x01, 0x00, 0x95, 0xA5, 0x01, 0x00, 0xB2, 0xA5, 0x01, 0x00, 0xBC, -/* 000071C0 */ 0xA5, 0x01, 0x00, 0xC2, 0xA5, 0x01, 0x00, 0xC3, 0xA5, 0x01, 0x00, 0xDD, 0xA5, 0x01, 0x00, 0x07, -/* 000071D0 */ 0xA6, 0x01, 0x00, 0x31, 0xA6, 0x01, 0x00, 0x37, 0xA6, 0x01, 0x00, 0x38, 0xA6, 0x01, 0x00, 0x70, -/* 000071E0 */ 0xA6, 0x01, 0x00, 0xBC, 0xA6, 0x01, 0x00, 0x1A, 0xA7, 0x01, 0x00, 0x40, 0xA7, 0x01, 0x00, 0x85, -/* 000071F0 */ 0xA7, 0x01, 0x00, 0xE9, 0xA7, 0x01, 0x00, 0x69, 0xA8, 0x01, 0x00, 0x6A, 0xA8, 0x01, 0x00, 0xDC, -/* 00007200 */ 0xA8, 0x01, 0x00, 0x0D, 0xA9, 0x01, 0x00, 0x5C, 0xA9, 0x01, 0x00, 0xAE, 0xA9, 0x01, 0x00, 0x02, -/* 00007210 */ 0xAA, 0x01, 0x00, 0x3A, 0xAA, 0x01, 0x00, 0x8C, 0xAA, 0x01, 0x00, 0xDE, 0xAA, 0x01, 0x00, 0x33, -/* 00007220 */ 0xAB, 0x01, 0x00, 0x9F, 0xAB, 0x01, 0x00, 0xF5, 0xAB, 0x01, 0x00, 0xF6, 0xAB, 0x01, 0x00, 0x15, -/* 00007230 */ 0xAC, 0x01, 0x00, 0x34, 0xAC, 0x01, 0x00, 0x66, 0xAC, 0x01, 0x00, 0x67, 0xAC, 0x01, 0x00, 0xDE, -/* 00007240 */ 0xAC, 0x01, 0x00, 0x4B, 0xAD, 0x01, 0x00, 0x9E, 0xAD, 0x01, 0x00, 0xE1, 0xAD, 0x01, 0x00, 0xE2, -/* 00007250 */ 0xAD, 0x01, 0x00, 0x5F, 0xAE, 0x01, 0x00, 0xF3, 0xAE, 0x01, 0x00, 0x76, 0xAF, 0x01, 0x00, 0xF9, -/* 00007260 */ 0xAF, 0x01, 0x00, 0x6C, 0xB0, 0x01, 0x00, 0x6D, 0xB0, 0x01, 0x00, 0xD7, 0xB0, 0x01, 0x00, 0x50, -/* 00007270 */ 0xB1, 0x01, 0x00, 0x51, 0xB1, 0x01, 0x00, 0xB4, 0xB1, 0x01, 0x00, 0x43, 0xB2, 0x01, 0x00, 0xEC, -/* 00007280 */ 0xB2, 0x01, 0x00, 0x80, 0xB3, 0x01, 0x00, 0x17, 0xB4, 0x01, 0x00, 0xBB, 0xB4, 0x01, 0x00, 0xCF, -/* 00007290 */ 0xB4, 0x01, 0x00, 0xD0, 0xB4, 0x01, 0x00, 0x51, 0xB5, 0x01, 0x00, 0xBD, 0xB5, 0x01, 0x00, 0x2D, -/* 000072A0 */ 0xB6, 0x01, 0x00, 0x9D, 0xB6, 0x01, 0x00, 0x0F, 0xB7, 0x01, 0x00, 0x83, 0xB7, 0x01, 0x00, 0xF7, -/* 000072B0 */ 0xB7, 0x01, 0x00, 0x41, 0xB8, 0x01, 0x00, 0x42, 0xB8, 0x01, 0x00, 0xAF, 0xB8, 0x01, 0x00, 0xB0, -/* 000072C0 */ 0xB8, 0x01, 0x00, 0x16, 0xB9, 0x01, 0x00, 0xA1, 0xB9, 0x01, 0x00, 0x17, 0xBA, 0x01, 0x00, 0x1D, -/* 000072D0 */ 0xBA, 0x01, 0x00, 0x1E, 0xBA, 0x01, 0x00, 0x4C, 0xBA, 0x01, 0x00, 0x74, 0xBA, 0x01, 0x00, 0x75, -/* 000072E0 */ 0xBA, 0x01, 0x00, 0x96, 0xBA, 0x01, 0x00, 0xBE, 0xBA, 0x01, 0x00, 0xC8, 0xBA, 0x01, 0x00, 0xC9, -/* 000072F0 */ 0xBA, 0x01, 0x00, 0x15, 0xBB, 0x01, 0x00, 0x1B, 0xBB, 0x01, 0x00, 0x1C, 0xBB, 0x01, 0x00, 0x93, -/* 00007300 */ 0xBB, 0x01, 0x00, 0xC2, 0xBB, 0x01, 0x00, 0xF0, 0xBB, 0x01, 0x00, 0x07, 0xBC, 0x01, 0x00, 0x11, -/* 00007310 */ 0xBC, 0x01, 0x00, 0x12, 0xBC, 0x01, 0x00, 0x3D, 0xBC, 0x01, 0x00, 0x5E, 0xBC, 0x01, 0x00, 0x68, -/* 00007320 */ 0xBC, 0x01, 0x00, 0x69, 0xBC, 0x01, 0x00, 0x97, 0xBC, 0x01, 0x00, 0xD1, 0xBC, 0x01, 0x00, 0xD2, -/* 00007330 */ 0xBC, 0x01, 0x00, 0x07, 0xBD, 0x01, 0x00, 0x1E, 0xBD, 0x01, 0x00, 0x1F, 0xBD, 0x01, 0x00, 0x5D, -/* 00007340 */ 0xBD, 0x01, 0x00, 0xBE, 0xBD, 0x01, 0x00, 0xFA, 0xBD, 0x01, 0x00, 0x08, 0xBE, 0x01, 0x00, 0x09, -/* 00007350 */ 0xBE, 0x01, 0x00, 0x3A, 0xBE, 0x01, 0x00, 0x3B, 0xBE, 0x01, 0x00, 0x6C, 0xBE, 0x01, 0x00, 0xAC, -/* 00007360 */ 0xBE, 0x01, 0x00, 0xBA, 0xBE, 0x01, 0x00, 0xBB, 0xBE, 0x01, 0x00, 0xF1, 0xBE, 0x01, 0x00, 0xF2, -/* 00007370 */ 0xBE, 0x01, 0x00, 0x53, 0xBF, 0x01, 0x00, 0x93, 0xBF, 0x01, 0x00, 0xA1, 0xBF, 0x01, 0x00, 0xAD, -/* 00007380 */ 0xBF, 0x01, 0x00, 0xAE, 0xBF, 0x01, 0x00, 0xC3, 0xBF, 0x01, 0x00, 0xC9, 0xBF, 0x01, 0x00, 0xCA, -/* 00007390 */ 0xBF, 0x01, 0x00, 0x19, 0xC0, 0x01, 0x00, 0x32, 0xC0, 0x01, 0x00, 0x49, 0xC0, 0x01, 0x00, 0x9E, -/* 000073A0 */ 0xC0, 0x01, 0x00, 0xB0, 0xC0, 0x01, 0x00, 0x0E, 0xC1, 0x01, 0x00, 0x35, 0xC1, 0x01, 0x00, 0xC2, -/* 000073B0 */ 0xC1, 0x01, 0x00, 0xE9, 0xC1, 0x01, 0x00, 0xFB, 0xC1, 0x01, 0x00, 0x16, 0xC2, 0x01, 0x00, 0x3D, -/* 000073C0 */ 0xC2, 0x01, 0x00, 0x9F, 0xC2, 0x01, 0x00, 0xAD, 0xC2, 0x01, 0x00, 0xB9, 0xC2, 0x01, 0x00, 0x21, -/* 000073D0 */ 0xC3, 0x01, 0x00, 0x38, 0xC3, 0x01, 0x00, 0x3E, 0xC3, 0x01, 0x00, 0x3F, 0xC3, 0x01, 0x00, 0x95, -/* 000073E0 */ 0xC3, 0x01, 0x00, 0xC8, 0xC3, 0x01, 0x00, 0x01, 0xC4, 0x01, 0x00, 0x0B, 0xC4, 0x01, 0x00, 0x0C, -/* 000073F0 */ 0xC4, 0x01, 0x00, 0x44, 0xC4, 0x01, 0x00, 0x7F, 0xC4, 0x01, 0x00, 0xB8, 0xC4, 0x01, 0x00, 0xC2, -/* 00007400 */ 0xC4, 0x01, 0x00, 0xC3, 0xC4, 0x01, 0x00, 0xF8, 0xC4, 0x01, 0x00, 0xFE, 0xC4, 0x01, 0x00, 0xFF, -/* 00007410 */ 0xC4, 0x01, 0x00, 0x50, 0xC5, 0x01, 0x00, 0x83, 0xC5, 0x01, 0x00, 0xBC, 0xC5, 0x01, 0x00, 0xC6, -/* 00007420 */ 0xC5, 0x01, 0x00, 0xC7, 0xC5, 0x01, 0x00, 0xFF, 0xC5, 0x01, 0x00, 0x3A, 0xC6, 0x01, 0x00, 0x73, -/* 00007430 */ 0xC6, 0x01, 0x00, 0x7D, 0xC6, 0x01, 0x00, 0x7E, 0xC6, 0x01, 0x00, 0xAE, 0xC6, 0x01, 0x00, 0xB4, -/* 00007440 */ 0xC6, 0x01, 0x00, 0xB5, 0xC6, 0x01, 0x00, 0xDE, 0xC6, 0x01, 0x00, 0x19, 0xC7, 0x01, 0x00, 0x2E, -/* 00007450 */ 0xC7, 0x01, 0x00, 0x61, 0xC7, 0x01, 0x00, 0x62, 0xC7, 0x01, 0x00, 0x90, 0xC7, 0x01, 0x00, 0xBD, -/* 00007460 */ 0xC7, 0x01, 0x00, 0xBE, 0xC7, 0x01, 0x00, 0xF0, 0xC7, 0x01, 0x00, 0x26, 0xC8, 0x01, 0x00, 0x27, -/* 00007470 */ 0xC8, 0x01, 0x00, 0x6D, 0xC8, 0x01, 0x00, 0xE4, 0xC8, 0x01, 0x00, 0xF6, 0xC8, 0x01, 0x00, 0x04, -/* 00007480 */ 0xC9, 0x01, 0x00, 0x0E, 0xC9, 0x01, 0x00, 0x0F, 0xC9, 0x01, 0x00, 0x57, 0xC9, 0x01, 0x00, 0xD9, -/* 00007490 */ 0xC9, 0x01, 0x00, 0xEA, 0xC9, 0x01, 0x00, 0x4C, 0xCA, 0x01, 0x00, 0x56, 0xCA, 0x01, 0x00, 0x5D, -/* 000074A0 */ 0xCA, 0x01, 0x00, 0x5E, 0xCA, 0x01, 0x00, 0x9A, 0xCA, 0x01, 0x00, 0xFB, 0xCA, 0x01, 0x00, 0xFC, -/* 000074B0 */ 0xCA, 0x01, 0x00, 0x6F, 0xCB, 0x01, 0x00, 0xBF, 0xCB, 0x01, 0x00, 0x10, 0xCC, 0x01, 0x00, 0x93, -/* 000074C0 */ 0xCC, 0x01, 0x00, 0xEA, 0xCC, 0x01, 0x00, 0x52, 0xCD, 0x01, 0x00, 0x78, 0xCD, 0x01, 0x00, 0x79, -/* 000074D0 */ 0xCD, 0x01, 0x00, 0xD2, 0xCD, 0x01, 0x00, 0x5D, 0xCE, 0x01, 0x00, 0xB8, 0xCE, 0x01, 0x00, 0x24, -/* 000074E0 */ 0xCF, 0x01, 0x00, 0x4A, 0xCF, 0x01, 0x00, 0x4B, 0xCF, 0x01, 0x00, 0xA8, 0xCF, 0x01, 0x00, 0x37, -/* 000074F0 */ 0xD0, 0x01, 0x00, 0x94, 0xD0, 0x01, 0x00, 0x02, 0xD1, 0x01, 0x00, 0x28, 0xD1, 0x01, 0x00, 0x29, -/* 00007500 */ 0xD1, 0x01, 0x00, 0x6A, 0xD1, 0x01, 0x00, 0xDD, 0xD1, 0x01, 0x00, 0x17, 0xD2, 0x01, 0x00, 0x72, -/* 00007510 */ 0xD2, 0x01, 0x00, 0x98, 0xD2, 0x01, 0x00, 0x99, 0xD2, 0x01, 0x00, 0xF2, 0xD2, 0x01, 0x00, 0x4C, -/* 00007520 */ 0xD3, 0x01, 0x00, 0x9B, 0xD3, 0x01, 0x00, 0x17, 0xD4, 0x01, 0x00, 0x77, 0xD4, 0x01, 0x00, 0xDB, -/* 00007530 */ 0xD4, 0x01, 0x00, 0x41, 0xD5, 0x01, 0x00, 0x9A, 0xD5, 0x01, 0x00, 0x9B, 0xD5, 0x01, 0x00, 0x02, -/* 00007540 */ 0xD6, 0x01, 0x00, 0x47, 0xD6, 0x01, 0x00, 0x8A, 0xD6, 0x01, 0x00, 0xC3, 0xD6, 0x01, 0x00, 0xFE, -/* 00007550 */ 0xD6, 0x01, 0x00, 0x39, 0xD7, 0x01, 0x00, 0x77, 0xD7, 0x01, 0x00, 0xB4, 0xD7, 0x01, 0x00, 0xE9, -/* 00007560 */ 0xD7, 0x01, 0x00, 0x4A, 0xD8, 0x01, 0x00, 0x95, 0xD8, 0x01, 0x00, 0xE0, 0xD8, 0x01, 0x00, 0x2B, -/* 00007570 */ 0xD9, 0x01, 0x00, 0x75, 0xD9, 0x01, 0x00, 0x76, 0xD9, 0x01, 0x00, 0xF5, 0xD9, 0x01, 0x00, 0x90, -/* 00007580 */ 0xDA, 0x01, 0x00, 0xB0, 0xDA, 0x01, 0x00, 0xD0, 0xDA, 0x01, 0x00, 0xEE, 0xDA, 0x01, 0x00, 0xFC, -/* 00007590 */ 0xDA, 0x01, 0x00, 0xFD, 0xDA, 0x01, 0x00, 0x60, 0xDB, 0x01, 0x00, 0xDB, 0xDB, 0x01, 0x00, 0x1B, -/* 000075A0 */ 0xDC, 0x01, 0x00, 0x4C, 0xDC, 0x01, 0x00, 0xCB, 0xDC, 0x01, 0x00, 0x21, 0xDD, 0x01, 0x00, 0x65, -/* 000075B0 */ 0xDD, 0x01, 0x00, 0x66, 0xDD, 0x01, 0x00, 0xE5, 0xDD, 0x01, 0x00, 0x2D, 0xDE, 0x01, 0x00, 0x56, -/* 000075C0 */ 0xDE, 0x01, 0x00, 0x9B, 0xDE, 0x01, 0x00, 0xAD, 0xDE, 0x01, 0x00, 0xBD, 0xDE, 0x01, 0x00, 0xBE, -/* 000075D0 */ 0xDE, 0x01, 0x00, 0xF6, 0xDE, 0x01, 0x00, 0x02, 0xDF, 0x01, 0x00, 0x1B, 0xDF, 0x01, 0x00, 0x25, -/* 000075E0 */ 0xDF, 0x01, 0x00, 0x26, 0xDF, 0x01, 0x00, 0x77, 0xDF, 0x01, 0x00, 0xA5, 0xDF, 0x01, 0x00, 0xD0, -/* 000075F0 */ 0xDF, 0x01, 0x00, 0xFC, 0xDF, 0x01, 0x00, 0x37, 0xE0, 0x01, 0x00, 0x61, 0xE0, 0x01, 0x00, 0x6B, -/* 00007600 */ 0xE0, 0x01, 0x00, 0x6C, 0xE0, 0x01, 0x00, 0x8C, 0xE0, 0x01, 0x00, 0xAF, 0xE0, 0x01, 0x00, 0xD1, -/* 00007610 */ 0xE0, 0x01, 0x00, 0x25, 0xE1, 0x01, 0x00, 0x4E, 0xE1, 0x01, 0x00, 0xB8, 0xE1, 0x01, 0x00, 0xD1, -/* 00007620 */ 0xE1, 0x01, 0x00, 0x23, 0xE2, 0x01, 0x00, 0x6C, 0xE2, 0x01, 0x00, 0x92, 0xE2, 0x01, 0x00, 0xF4, -/* 00007630 */ 0xE2, 0x01, 0x00, 0x02, 0xE3, 0x01, 0x00, 0x13, 0xE3, 0x01, 0x00, 0x5C, 0xE3, 0x01, 0x00, 0xB8, -/* 00007640 */ 0xE3, 0x01, 0x00, 0xD7, 0xE3, 0x01, 0x00, 0xF9, 0xE3, 0x01, 0x00, 0x03, 0xE4, 0x01, 0x00, 0x04, -/* 00007650 */ 0xE4, 0x01, 0x00, 0x2B, 0xE4, 0x01, 0x00, 0x57, 0xE4, 0x01, 0x00, 0x81, 0xE4, 0x01, 0x00, 0x8B, -/* 00007660 */ 0xE4, 0x01, 0x00, 0x8C, 0xE4, 0x01, 0x00, 0xE8, 0xE4, 0x01, 0x00, 0x3D, 0xE5, 0x01, 0x00, 0x63, -/* 00007670 */ 0xE5, 0x01, 0x00, 0xA1, 0xE5, 0x01, 0x00, 0xB6, 0xE5, 0x01, 0x00, 0xF6, 0xE5, 0x01, 0x00, 0x04, -/* 00007680 */ 0xE6, 0x01, 0x00, 0x0F, 0xE6, 0x01, 0x00, 0x10, 0xE6, 0x01, 0x00, 0x66, 0xE6, 0x01, 0x00, 0x99, -/* 00007690 */ 0xE6, 0x01, 0x00, 0xE6, 0xE6, 0x01, 0x00, 0x3A, 0xE7, 0x01, 0x00, 0x64, 0xE7, 0x01, 0x00, 0x6E, -/* 000076A0 */ 0xE7, 0x01, 0x00, 0x6F, 0xE7, 0x01, 0x00, 0xB1, 0xE7, 0x01, 0x00, 0xDE, 0xE7, 0x01, 0x00, 0x38, -/* 000076B0 */ 0xE8, 0x01, 0x00, 0x49, 0xE8, 0x01, 0x00, 0x9D, 0xE8, 0x01, 0x00, 0xA7, 0xE8, 0x01, 0x00, 0xA8, -/* 000076C0 */ 0xE8, 0x01, 0x00, 0xCE, 0xE8, 0x01, 0x00, 0xD5, 0xE8, 0x01, 0x00, 0xD6, 0xE8, 0x01, 0x00, 0x0B, -/* 000076D0 */ 0xE9, 0x01, 0x00, 0x2D, 0xE9, 0x01, 0x00, 0x2E, 0xE9, 0x01, 0x00, 0x6A, 0xE9, 0x01, 0x00, 0x6B, -/* 000076E0 */ 0xE9, 0x01, 0x00, 0xB4, 0xE9, 0x01, 0x00, 0xE7, 0xE9, 0x01, 0x00, 0x17, 0xEA, 0x01, 0x00, 0x29, -/* 000076F0 */ 0xEA, 0x01, 0x00, 0x2A, 0xEA, 0x01, 0x00, 0xB9, 0xEA, 0x01, 0x00, 0x0F, 0xEB, 0x01, 0x00, 0x21, -/* 00007700 */ 0xEB, 0x01, 0x00, 0x22, 0xEB, 0x01, 0x00, 0x5B, 0xEB, 0x01, 0x00, 0x5C, 0xEB, 0x01, 0x00, 0x7F, -/* 00007710 */ 0xEB, 0x01, 0x00, 0xB5, 0xEB, 0x01, 0x00, 0xEB, 0xEB, 0x01, 0x00, 0x04, 0xEC, 0x01, 0x00, 0x3E, -/* 00007720 */ 0xEC, 0x01, 0x00, 0x50, 0xEC, 0x01, 0x00, 0x51, 0xEC, 0x01, 0x00, 0xC2, 0xEC, 0x01, 0x00, 0x21, -/* 00007730 */ 0xED, 0x01, 0x00, 0xA2, 0xED, 0x01, 0x00, 0x10, 0xEE, 0x01, 0x00, 0x83, 0xEE, 0x01, 0x00, 0xE5, -/* 00007740 */ 0xEE, 0x01, 0x00, 0xE6, 0xEE, 0x01, 0x00, 0x1E, 0xEF, 0x01, 0x00, 0x5F, 0xEF, 0x01, 0x00, 0xCD, -/* 00007750 */ 0xEF, 0x01, 0x00, 0xCE, 0xEF, 0x01, 0x00, 0xF9, 0xEF, 0x01, 0x00, 0x62, 0xF0, 0x01, 0x00, 0xA7, -/* 00007760 */ 0xF0, 0x01, 0x00, 0xA8, 0xF0, 0x01, 0x00, 0xDA, 0xF0, 0x01, 0x00, 0x45, 0xF1, 0x01, 0x00, 0xC7, -/* 00007770 */ 0xF1, 0x01, 0x00, 0xF3, 0xF1, 0x01, 0x00, 0x3F, 0xF2, 0x01, 0x00, 0x86, 0xF2, 0x01, 0x00, 0x22, -/* 00007780 */ 0xF3, 0x01, 0x00, 0x6E, 0xF3, 0x01, 0x00, 0xA5, 0xF3, 0x01, 0x00, 0x29, 0xF4, 0x01, 0x00, 0x4E, -/* 00007790 */ 0xF4, 0x01, 0x00, 0x7E, 0xF4, 0x01, 0x00, 0x9C, 0xF4, 0x01, 0x00, 0x3F, 0xF5, 0x01, 0x00, 0x9E, -/* 000077A0 */ 0xF5, 0x01, 0x00, 0xCD, 0xF5, 0x01, 0x00, 0xE7, 0xF5, 0x01, 0x00, 0xFF, 0xF5, 0x01, 0x00, 0x11, -/* 000077B0 */ 0xF6, 0x01, 0x00, 0x40, 0xF6, 0x01, 0x00, 0xAF, 0xF6, 0x01, 0x00, 0xDE, 0xF6, 0x01, 0x00, 0x6C, -/* 000077C0 */ 0xF7, 0x01, 0x00, 0xA3, 0xF7, 0x01, 0x00, 0x0D, 0xF8, 0x01, 0x00, 0x27, 0xF8, 0x01, 0x00, 0x3D, -/* 000077D0 */ 0xF8, 0x01, 0x00, 0x58, 0xF8, 0x01, 0x00, 0x87, 0xF8, 0x01, 0x00, 0x9D, 0xF8, 0x01, 0x00, 0xAF, -/* 000077E0 */ 0xF8, 0x01, 0x00, 0xB0, 0xF8, 0x01, 0x00, 0xDF, 0xF8, 0x01, 0x00, 0x0E, 0xF9, 0x01, 0x00, 0x28, -/* 000077F0 */ 0xF9, 0x01, 0x00, 0xAE, 0xF9, 0x01, 0x00, 0xD0, 0xF9, 0x01, 0x00, 0xFE, 0xF9, 0x01, 0x00, 0x2C, -/* 00007800 */ 0xFA, 0x01, 0x00, 0x2D, 0xFA, 0x01, 0x00, 0x9E, 0xFA, 0x01, 0x00, 0x27, 0xFB, 0x01, 0x00, 0x90, -/* 00007810 */ 0xFB, 0x01, 0x00, 0xCF, 0xFB, 0x01, 0x00, 0xE5, 0xFB, 0x01, 0x00, 0xE6, 0xFB, 0x01, 0x00, 0x0B, -/* 00007820 */ 0xFC, 0x01, 0x00, 0x38, 0xFC, 0x01, 0x00, 0x65, 0xFC, 0x01, 0x00, 0x92, 0xFC, 0x01, 0x00, 0xAF, -/* 00007830 */ 0xFC, 0x01, 0x00, 0xDC, 0xFC, 0x01, 0x00, 0xF2, 0xFC, 0x01, 0x00, 0x04, 0xFD, 0x01, 0x00, 0x05, -/* 00007840 */ 0xFD, 0x01, 0x00, 0x36, 0xFD, 0x01, 0x00, 0x63, 0xFD, 0x01, 0x00, 0x75, 0xFD, 0x01, 0x00, 0x76, -/* 00007850 */ 0xFD, 0x01, 0x00, 0xA3, 0xFD, 0x01, 0x00, 0xC8, 0xFD, 0x01, 0x00, 0xDA, 0xFD, 0x01, 0x00, 0xDB, -/* 00007860 */ 0xFD, 0x01, 0x00, 0x0C, 0xFE, 0x01, 0x00, 0x3A, 0xFE, 0x01, 0x00, 0x87, 0xFE, 0x01, 0x00, 0xCF, -/* 00007870 */ 0xFE, 0x01, 0x00, 0xF9, 0xFE, 0x01, 0x00, 0x2F, 0xFF, 0x01, 0x00, 0x71, 0xFF, 0x01, 0x00, 0xA3, -/* 00007880 */ 0xFF, 0x01, 0x00, 0xD1, 0xFF, 0x01, 0x00, 0x03, 0x00, 0x02, 0x00, 0x3A, 0x00, 0x02, 0x00, 0x48, -/* 00007890 */ 0x00, 0x02, 0x00, 0x49, 0x00, 0x02, 0x00, 0xB8, 0x00, 0x02, 0x00, 0xE1, 0x00, 0x02, 0x00, 0x1C, -/* 000078A0 */ 0x01, 0x02, 0x00, 0x76, 0x01, 0x02, 0x00, 0x88, 0x01, 0x02, 0x00, 0xB2, 0x01, 0x02, 0x00, 0xE2, -/* 000078B0 */ 0x01, 0x02, 0x00, 0xF4, 0x01, 0x02, 0x00, 0x98, 0x02, 0x02, 0x00, 0xC4, 0x02, 0x02, 0x00, 0xED, -/* 000078C0 */ 0x02, 0x02, 0x00, 0x27, 0x03, 0x02, 0x00, 0x74, 0x03, 0x02, 0x00, 0xAA, 0x03, 0x02, 0x00, 0xC7, -/* 000078D0 */ 0x03, 0x02, 0x00, 0xE1, 0x03, 0x02, 0x00, 0x15, 0x04, 0x02, 0x00, 0x61, 0x04, 0x02, 0x00, 0x96, -/* 000078E0 */ 0x04, 0x02, 0x00, 0xC1, 0x04, 0x02, 0x00, 0x08, 0x05, 0x02, 0x00, 0x1C, 0x05, 0x02, 0x00, 0x58, -/* 000078F0 */ 0x05, 0x02, 0x00, 0x59, 0x05, 0x02, 0x00, 0x80, 0x05, 0x02, 0x00, 0x81, 0x05, 0x02, 0x00, 0xCF, -/* 00007900 */ 0x05, 0x02, 0x00, 0x0E, 0x06, 0x02, 0x00, 0x4D, 0x06, 0x02, 0x00, 0x63, 0x06, 0x02, 0x00, 0x64, -/* 00007910 */ 0x06, 0x02, 0x00, 0x9B, 0x06, 0x02, 0x00, 0xCF, 0x06, 0x02, 0x00, 0x18, 0x07, 0x02, 0x00, 0x2E, -/* 00007920 */ 0x07, 0x02, 0x00, 0x2F, 0x07, 0x02, 0x00, 0x6A, 0x07, 0x02, 0x00, 0xB0, 0x07, 0x02, 0x00, 0xB1, -/* 00007930 */ 0x07, 0x02, 0x00, 0xE7, 0x07, 0x02, 0x00, 0x26, 0x08, 0x02, 0x00, 0x6B, 0x08, 0x02, 0x00, 0x81, -/* 00007940 */ 0x08, 0x02, 0x00, 0x82, 0x08, 0x02, 0x00, 0xCA, 0x08, 0x02, 0x00, 0xCB, 0x08, 0x02, 0x00, 0xF8, -/* 00007950 */ 0x08, 0x02, 0x00, 0x60, 0x09, 0x02, 0x00, 0x9D, 0x09, 0x02, 0x00, 0xBD, 0x09, 0x02, 0x00, 0xCF, -/* 00007960 */ 0x09, 0x02, 0x00, 0x0D, 0x0A, 0x02, 0x00, 0x0E, 0x0A, 0x02, 0x00, 0x37, 0x0A, 0x02, 0x00, 0x6B, -/* 00007970 */ 0x0A, 0x02, 0x00, 0xCD, 0x0A, 0x02, 0x00, 0xE3, 0x0A, 0x02, 0x00, 0xE4, 0x0A, 0x02, 0x00, 0x2B, -/* 00007980 */ 0x0B, 0x02, 0x00, 0x88, 0x0B, 0x02, 0x00, 0xEA, 0x0B, 0x02, 0x00, 0x00, 0x0C, 0x02, 0x00, 0x01, -/* 00007990 */ 0x0C, 0x02, 0x00, 0x24, 0x0C, 0x02, 0x00, 0x47, 0x0C, 0x02, 0x00, 0x48, 0x0C, 0x02, 0x00, 0x82, -/* 000079A0 */ 0x0C, 0x02, 0x00, 0x9D, 0x0C, 0x02, 0x00, 0xB8, 0x0C, 0x02, 0x00, 0xF1, 0x0C, 0x02, 0x00, 0x42, -/* 000079B0 */ 0x0D, 0x02, 0x00, 0x7C, 0x0D, 0x02, 0x00, 0xAC, 0x0D, 0x02, 0x00, 0xF8, 0x0D, 0x02, 0x00, 0x10, -/* 000079C0 */ 0x0E, 0x02, 0x00, 0x22, 0x0E, 0x02, 0x00, 0x71, 0x0E, 0x02, 0x00, 0x72, 0x0E, 0x02, 0x00, 0x04, -/* 000079D0 */ 0x0F, 0x02, 0x00, 0x05, 0x0F, 0x02, 0x00, 0x96, 0x0F, 0x02, 0x00, 0xDA, 0x0F, 0x02, 0x00, 0xDB, -/* 000079E0 */ 0x0F, 0x02, 0x00, 0x70, 0x10, 0x02, 0x00, 0x71, 0x10, 0x02, 0x00, 0xBF, 0x10, 0x02, 0x00, 0xF7, -/* 000079F0 */ 0x10, 0x02, 0x00, 0x2F, 0x11, 0x02, 0x00, 0x9D, 0x11, 0x02, 0x00, 0xB7, 0x11, 0x02, 0x00, 0x02, -/* 00007A00 */ 0x12, 0x02, 0x00, 0x63, 0x12, 0x02, 0x00, 0xD1, 0x12, 0x02, 0x00, 0xEB, 0x12, 0x02, 0x00, 0xEC, -/* 00007A10 */ 0x12, 0x02, 0x00, 0x0D, 0x13, 0x02, 0x00, 0x48, 0x13, 0x02, 0x00, 0x81, 0x13, 0x02, 0x00, 0xC6, -/* 00007A20 */ 0x13, 0x02, 0x00, 0x17, 0x14, 0x02, 0x00, 0x72, 0x14, 0x02, 0x00, 0x07, 0x15, 0x02, 0x00, 0x9C, -/* 00007A30 */ 0x15, 0x02, 0x00, 0xB6, 0x15, 0x02, 0x00, 0x03, 0x16, 0x02, 0x00, 0x17, 0x16, 0x02, 0x00, 0x18, -/* 00007A40 */ 0x16, 0x02, 0x00, 0x5E, 0x16, 0x02, 0x00, 0xA6, 0x16, 0x02, 0x00, 0xDE, 0x16, 0x02, 0x00, 0x44, -/* 00007A50 */ 0x17, 0x02, 0x00, 0x5E, 0x17, 0x02, 0x00, 0x5F, 0x17, 0x02, 0x00, 0xAA, 0x17, 0x02, 0x00, 0x0B, -/* 00007A60 */ 0x18, 0x02, 0x00, 0x71, 0x18, 0x02, 0x00, 0x8B, 0x18, 0x02, 0x00, 0x8C, 0x18, 0x02, 0x00, 0xC8, -/* 00007A70 */ 0x18, 0x02, 0x00, 0x06, 0x19, 0x02, 0x00, 0x1A, 0x19, 0x02, 0x00, 0x1B, 0x19, 0x02, 0x00, 0x3C, -/* 00007A80 */ 0x19, 0x02, 0x00, 0x4A, 0x19, 0x02, 0x00, 0x54, 0x19, 0x02, 0x00, 0x9F, 0x19, 0x02, 0x00, 0xB9, -/* 00007A90 */ 0x19, 0x02, 0x00, 0xC3, 0x19, 0x02, 0x00, 0xC4, 0x19, 0x02, 0x00, 0xFE, 0x19, 0x02, 0x00, 0x24, -/* 00007AA0 */ 0x1A, 0x02, 0x00, 0x60, 0x1A, 0x02, 0x00, 0xB1, 0x1A, 0x02, 0x00, 0xE8, 0x1A, 0x02, 0x00, 0x18, -/* 00007AB0 */ 0x1B, 0x02, 0x00, 0x2A, 0x1B, 0x02, 0x00, 0x2B, 0x1B, 0x02, 0x00, 0xC2, 0x1B, 0x02, 0x00, 0x20, -/* 00007AC0 */ 0x1C, 0x02, 0x00, 0x32, 0x1C, 0x02, 0x00, 0x33, 0x1C, 0x02, 0x00, 0x70, 0x1C, 0x02, 0x00, 0x71, -/* 00007AD0 */ 0x1C, 0x02, 0x00, 0x94, 0x1C, 0x02, 0x00, 0xCA, 0x1C, 0x02, 0x00, 0x00, 0x1D, 0x02, 0x00, 0x19, -/* 00007AE0 */ 0x1D, 0x02, 0x00, 0x53, 0x1D, 0x02, 0x00, 0x65, 0x1D, 0x02, 0x00, 0x66, 0x1D, 0x02, 0x00, 0xD7, -/* 00007AF0 */ 0x1D, 0x02, 0x00, 0x49, 0x1E, 0x02, 0x00, 0x4A, 0x1E, 0x02, 0x00, 0x95, 0x1E, 0x02, 0x00, 0xC0, -/* 00007B00 */ 0x1E, 0x02, 0x00, 0x00, 0x1F, 0x02, 0x00, 0x33, 0x1F, 0x02, 0x00, 0x74, 0x1F, 0x02, 0x00, 0x86, -/* 00007B10 */ 0x1F, 0x02, 0x00, 0x87, 0x1F, 0x02, 0x00, 0xE6, 0x1F, 0x02, 0x00, 0x63, 0x20, 0x02, 0x00, 0x93, -/* 00007B20 */ 0x20, 0x02, 0x00, 0x94, 0x20, 0x02, 0x00, 0xFB, 0x20, 0x02, 0x00, 0x32, 0x21, 0x02, 0x00, 0x69, -/* 00007B30 */ 0x21, 0x02, 0x00, 0xA7, 0x21, 0x02, 0x00, 0xA8, 0x21, 0x02, 0x00, 0xF9, 0x21, 0x02, 0x00, 0x4A, -/* 00007B40 */ 0x22, 0x02, 0x00, 0x4B, 0x22, 0x02, 0x00, 0xC5, 0x22, 0x02, 0x00, 0x34, 0x23, 0x02, 0x00, 0xBB, -/* 00007B50 */ 0x23, 0x02, 0x00, 0xCD, 0x23, 0x02, 0x00, 0xCE, 0x23, 0x02, 0x00, 0x2F, 0x24, 0x02, 0x00, 0x30, -/* 00007B60 */ 0x24, 0x02, 0x00, 0x68, 0x24, 0x02, 0x00, 0xA9, 0x24, 0x02, 0x00, 0x16, 0x25, 0x02, 0x00, 0x17, -/* 00007B70 */ 0x25, 0x02, 0x00, 0x4B, 0x25, 0x02, 0x00, 0xA9, 0x25, 0x02, 0x00, 0xF2, 0x25, 0x02, 0x00, 0x04, -/* 00007B80 */ 0x26, 0x02, 0x00, 0x05, 0x26, 0x02, 0x00, 0x31, 0x26, 0x02, 0x00, 0x6C, 0x26, 0x02, 0x00, 0xA9, -/* 00007B90 */ 0x26, 0x02, 0x00, 0xBF, 0x26, 0x02, 0x00, 0x15, 0x27, 0x02, 0x00, 0x2F, 0x27, 0x02, 0x00, 0x7B, -/* 00007BA0 */ 0x27, 0x02, 0x00, 0x9D, 0x27, 0x02, 0x00, 0xCB, 0x27, 0x02, 0x00, 0x18, 0x28, 0x02, 0x00, 0x2E, -/* 00007BB0 */ 0x28, 0x02, 0x00, 0xA4, 0x28, 0x02, 0x00, 0x08, 0x29, 0x02, 0x00, 0x21, 0x29, 0x02, 0x00, 0x4B, -/* 00007BC0 */ 0x29, 0x02, 0x00, 0x7C, 0x29, 0x02, 0x00, 0xE5, 0x29, 0x02, 0x00, 0x14, 0x2A, 0x02, 0x00, 0x6F, -/* 00007BD0 */ 0x2A, 0x02, 0x00, 0x8C, 0x2A, 0x02, 0x00, 0xE6, 0x2A, 0x02, 0x00, 0xFC, 0x2A, 0x02, 0x00, 0x0E, -/* 00007BE0 */ 0x2B, 0x02, 0x00, 0x0F, 0x2B, 0x02, 0x00, 0xA3, 0x2B, 0x02, 0x00, 0xA4, 0x2B, 0x02, 0x00, 0xD5, -/* 00007BF0 */ 0x2B, 0x02, 0x00, 0x0D, 0x2C, 0x02, 0x00, 0x50, 0x2C, 0x02, 0x00, 0x7E, 0x2C, 0x02, 0x00, 0x7F, -/* 00007C00 */ 0x2C, 0x02, 0x00, 0xAD, 0x2C, 0x02, 0x00, 0xE5, 0x2C, 0x02, 0x00, 0xF7, 0x2C, 0x02, 0x00, 0xF8, -/* 00007C10 */ 0x2C, 0x02, 0x00, 0x2D, 0x2D, 0x02, 0x00, 0x73, 0x2D, 0x02, 0x00, 0xD2, 0x2D, 0x02, 0x00, 0x0A, -/* 00007C20 */ 0x2E, 0x02, 0x00, 0x6C, 0x2E, 0x02, 0x00, 0xA9, 0x2E, 0x02, 0x00, 0x09, 0x2F, 0x02, 0x00, 0x46, -/* 00007C30 */ 0x2F, 0x02, 0x00, 0xA6, 0x2F, 0x02, 0x00, 0xBC, 0x2F, 0x02, 0x00, 0xCE, 0x2F, 0x02, 0x00, 0xCF, -/* 00007C40 */ 0x2F, 0x02, 0x00, 0x1B, 0x30, 0x02, 0x00, 0x69, 0x30, 0x02, 0x00, 0xB7, 0x30, 0x02, 0x00, 0xB8, -/* 00007C50 */ 0x30, 0x02, 0x00, 0xF6, 0x30, 0x02, 0x00, 0x4E, 0x31, 0x02, 0x00, 0xA6, 0x31, 0x02, 0x00, 0xB8, -/* 00007C60 */ 0x31, 0x02, 0x00, 0xB9, 0x31, 0x02, 0x00, 0xF9, 0x31, 0x02, 0x00, 0x33, 0x32, 0x02, 0x00, 0x34, -/* 00007C70 */ 0x32, 0x02, 0x00, 0x4A, 0x32, 0x02, 0x00, 0x9E, 0x32, 0x02, 0x00, 0xDC, 0x32, 0x02, 0x00, 0xFA, -/* 00007C80 */ 0x32, 0x02, 0x00, 0x24, 0x33, 0x02, 0x00, 0x7B, 0x33, 0x02, 0x00, 0x00, 0x34, 0x02, 0x00, 0x65, -/* 00007C90 */ 0x34, 0x02, 0x00, 0xA0, 0x34, 0x02, 0x00, 0xB2, 0x34, 0x02, 0x00, 0xB3, 0x34, 0x02, 0x00, 0xEA, -/* 00007CA0 */ 0x34, 0x02, 0x00, 0x4B, 0x35, 0x02, 0x00, 0x5D, 0x35, 0x02, 0x00, 0x5E, 0x35, 0x02, 0x00, 0xDC, -/* 00007CB0 */ 0x35, 0x02, 0x00, 0x1B, 0x36, 0x02, 0x00, 0x29, 0x36, 0x02, 0x00, 0x2A, 0x36, 0x02, 0x00, 0x9A, -/* 00007CC0 */ 0x36, 0x02, 0x00, 0xE9, 0x36, 0x02, 0x00, 0x4A, 0x37, 0x02, 0x00, 0x5C, 0x37, 0x02, 0x00, 0x5D, -/* 00007CD0 */ 0x37, 0x02, 0x00, 0x97, 0x37, 0x02, 0x00, 0xE8, 0x37, 0x02, 0x00, 0xE9, 0x37, 0x02, 0x00, 0x1A, -/* 00007CE0 */ 0x38, 0x02, 0x00, 0x60, 0x38, 0x02, 0x00, 0x9D, 0x38, 0x02, 0x00, 0x9E, 0x38, 0x02, 0x00, 0xC5, -/* 00007CF0 */ 0x38, 0x02, 0x00, 0x17, 0x39, 0x02, 0x00, 0x56, 0x39, 0x02, 0x00, 0x99, 0x39, 0x02, 0x00, 0xAF, -/* 00007D00 */ 0x39, 0x02, 0x00, 0xB0, 0x39, 0x02, 0x00, 0xE7, 0x39, 0x02, 0x00, 0xE8, 0x39, 0x02, 0x00, 0x1C, -/* 00007D10 */ 0x3A, 0x02, 0x00, 0x69, 0x3A, 0x02, 0x00, 0x7F, 0x3A, 0x02, 0x00, 0x80, 0x3A, 0x02, 0x00, 0xBB, -/* 00007D20 */ 0x3A, 0x02, 0x00, 0x01, 0x3B, 0x02, 0x00, 0x02, 0x3B, 0x02, 0x00, 0x38, 0x3B, 0x02, 0x00, 0x77, -/* 00007D30 */ 0x3B, 0x02, 0x00, 0xBC, 0x3B, 0x02, 0x00, 0xD2, 0x3B, 0x02, 0x00, 0xD3, 0x3B, 0x02, 0x00, 0x1F, -/* 00007D40 */ 0x3C, 0x02, 0x00, 0x20, 0x3C, 0x02, 0x00, 0x85, 0x3C, 0x02, 0x00, 0xC1, 0x3C, 0x02, 0x00, 0xC2, -/* 00007D50 */ 0x3C, 0x02, 0x00, 0xE2, 0x3C, 0x02, 0x00, 0xF4, 0x3C, 0x02, 0x00, 0x3A, 0x3D, 0x02, 0x00, 0x3B, -/* 00007D60 */ 0x3D, 0x02, 0x00, 0x60, 0x3D, 0x02, 0x00, 0x8E, 0x3D, 0x02, 0x00, 0x8F, 0x3D, 0x02, 0x00, 0xC3, -/* 00007D70 */ 0x3D, 0x02, 0x00, 0x2C, 0x3E, 0x02, 0x00, 0x42, 0x3E, 0x02, 0x00, 0x43, 0x3E, 0x02, 0x00, 0x8A, -/* 00007D80 */ 0x3E, 0x02, 0x00, 0xEB, 0x3E, 0x02, 0x00, 0x54, 0x3F, 0x02, 0x00, 0x6A, 0x3F, 0x02, 0x00, 0x6B, -/* 00007D90 */ 0x3F, 0x02, 0x00, 0xB6, 0x3F, 0x02, 0x00, 0xC8, 0x3F, 0x02, 0x00, 0x19, 0x40, 0x02, 0x00, 0x1A, -/* 00007DA0 */ 0x40, 0x02, 0x00, 0xB4, 0x40, 0x02, 0x00, 0xB5, 0x40, 0x02, 0x00, 0x31, 0x41, 0x02, 0x00, 0xAF, -/* 00007DB0 */ 0x41, 0x02, 0x00, 0xD3, 0x41, 0x02, 0x00, 0xD4, 0x41, 0x02, 0x00, 0x6D, 0x42, 0x02, 0x00, 0xB5, -/* 00007DC0 */ 0x42, 0x02, 0x00, 0x52, 0x43, 0x02, 0x00, 0x53, 0x43, 0x02, 0x00, 0xA5, 0x43, 0x02, 0x00, 0xDD, -/* 00007DD0 */ 0x43, 0x02, 0x00, 0x15, 0x44, 0x02, 0x00, 0x8B, 0x44, 0x02, 0x00, 0xA5, 0x44, 0x02, 0x00, 0xF0, -/* 00007DE0 */ 0x44, 0x02, 0x00, 0x55, 0x45, 0x02, 0x00, 0xCB, 0x45, 0x02, 0x00, 0xE5, 0x45, 0x02, 0x00, 0xE6, -/* 00007DF0 */ 0x45, 0x02, 0x00, 0x2C, 0x46, 0x02, 0x00, 0x2D, 0x46, 0x02, 0x00, 0x89, 0x46, 0x02, 0x00, 0xDF, -/* 00007E00 */ 0x46, 0x02, 0x00, 0x36, 0x47, 0x02, 0x00, 0x54, 0x47, 0x02, 0x00, 0x70, 0x47, 0x02, 0x00, 0x71, -/* 00007E10 */ 0x47, 0x02, 0x00, 0xB3, 0x47, 0x02, 0x00, 0x00, 0x48, 0x02, 0x00, 0x14, 0x48, 0x02, 0x00, 0x15, -/* 00007E20 */ 0x48, 0x02, 0x00, 0x5E, 0x48, 0x02, 0x00, 0xA5, 0x48, 0x02, 0x00, 0xDD, 0x48, 0x02, 0x00, 0x4A, -/* 00007E30 */ 0x49, 0x02, 0x00, 0x64, 0x49, 0x02, 0x00, 0x65, 0x49, 0x02, 0x00, 0xB0, 0x49, 0x02, 0x00, 0x15, -/* 00007E40 */ 0x4A, 0x02, 0x00, 0x82, 0x4A, 0x02, 0x00, 0x9C, 0x4A, 0x02, 0x00, 0x9D, 0x4A, 0x02, 0x00, 0xD8, -/* 00007E50 */ 0x4A, 0x02, 0x00, 0x16, 0x4B, 0x02, 0x00, 0x2A, 0x4B, 0x02, 0x00, 0x2B, 0x4B, 0x02, 0x00, 0x50, -/* 00007E60 */ 0x4B, 0x02, 0x00, 0x5E, 0x4B, 0x02, 0x00, 0x68, 0x4B, 0x02, 0x00, 0xB7, 0x4B, 0x02, 0x00, 0xD1, -/* 00007E70 */ 0x4B, 0x02, 0x00, 0xDB, 0x4B, 0x02, 0x00, 0xDC, 0x4B, 0x02, 0x00, 0x5C, 0x4C, 0x02, 0x00, 0x84, -/* 00007E80 */ 0x4C, 0x02, 0x00, 0xBE, 0x4C, 0x02, 0x00, 0x04, 0x4D, 0x02, 0x00, 0x31, 0x4D, 0x02, 0x00, 0x67, -/* 00007E90 */ 0x4D, 0x02, 0x00, 0x80, 0x4D, 0x02, 0x00, 0xBA, 0x4D, 0x02, 0x00, 0xCC, 0x4D, 0x02, 0x00, 0xCD, -/* 00007EA0 */ 0x4D, 0x02, 0x00, 0xF6, 0x4D, 0x02, 0x00, 0x37, 0x4E, 0x02, 0x00, 0xCA, 0x4E, 0x02, 0x00, 0xF8, -/* 00007EB0 */ 0x4E, 0x02, 0x00, 0x0E, 0x4F, 0x02, 0x00, 0x20, 0x4F, 0x02, 0x00, 0x61, 0x4F, 0x02, 0x00, 0xD7, -/* 00007EC0 */ 0x4F, 0x02, 0x00, 0x05, 0x50, 0x02, 0x00, 0x1B, 0x50, 0x02, 0x00, 0x2D, 0x50, 0x02, 0x00, 0x2E, -/* 00007ED0 */ 0x50, 0x02, 0x00, 0x81, 0x50, 0x02, 0x00, 0xBD, 0x50, 0x02, 0x00, 0xF7, 0x50, 0x02, 0x00, 0x34, -/* 00007EE0 */ 0x51, 0x02, 0x00, 0x4C, 0x51, 0x02, 0x00, 0x89, 0x51, 0x02, 0x00, 0xC3, 0x51, 0x02, 0x00, 0x00, -/* 00007EF0 */ 0x52, 0x02, 0x00, 0x18, 0x52, 0x02, 0x00, 0x53, 0x52, 0x02, 0x00, 0x8D, 0x52, 0x02, 0x00, 0xCA, -/* 00007F00 */ 0x52, 0x02, 0x00, 0xE2, 0x52, 0x02, 0x00, 0xF4, 0x52, 0x02, 0x00, 0x47, 0x53, 0x02, 0x00, 0x83, -/* 00007F10 */ 0x53, 0x02, 0x00, 0xBD, 0x53, 0x02, 0x00, 0xFA, 0x53, 0x02, 0x00, 0x12, 0x54, 0x02, 0x00, 0x50, -/* 00007F20 */ 0x54, 0x02, 0x00, 0x8A, 0x54, 0x02, 0x00, 0xC7, 0x54, 0x02, 0x00, 0xDF, 0x54, 0x02, 0x00, 0x1D, -/* 00007F30 */ 0x55, 0x02, 0x00, 0x57, 0x55, 0x02, 0x00, 0x94, 0x55, 0x02, 0x00, 0xAC, 0x55, 0x02, 0x00, 0xBE, -/* 00007F40 */ 0x55, 0x02, 0x00, 0xDE, 0x55, 0x02, 0x00, 0xEC, 0x55, 0x02, 0x00, 0xED, 0x55, 0x02, 0x00, 0x77, -/* 00007F50 */ 0x56, 0x02, 0x00, 0xB4, 0x56, 0x02, 0x00, 0xD7, 0x56, 0x02, 0x00, 0xD8, 0x56, 0x02, 0x00, 0xFF, -/* 00007F60 */ 0x56, 0x02, 0x00, 0x56, 0x57, 0x02, 0x00, 0xB6, 0x57, 0x02, 0x00, 0xF3, 0x57, 0x02, 0x00, 0x4C, -/* 00007F70 */ 0x58, 0x02, 0x00, 0x62, 0x58, 0x02, 0x00, 0x74, 0x58, 0x02, 0x00, 0x75, 0x58, 0x02, 0x00, 0xA0, -/* 00007F80 */ 0x58, 0x02, 0x00, 0xC4, 0x58, 0x02, 0x00, 0xFA, 0x58, 0x02, 0x00, 0x55, 0x59, 0x02, 0x00, 0x92, -/* 00007F90 */ 0x59, 0x02, 0x00, 0xE6, 0x59, 0x02, 0x00, 0xFC, 0x59, 0x02, 0x00, 0x0E, 0x5A, 0x02, 0x00, 0x0F, -/* 00007FA0 */ 0x5A, 0x02, 0x00, 0x34, 0x5A, 0x02, 0x00, 0x8A, 0x5A, 0x02, 0x00, 0xE1, 0x5A, 0x02, 0x00, 0x3B, -/* 00007FB0 */ 0x5B, 0x02, 0x00, 0x97, 0x5B, 0x02, 0x00, 0xD2, 0x5B, 0x02, 0x00, 0x27, 0x5C, 0x02, 0x00, 0x3D, -/* 00007FC0 */ 0x5C, 0x02, 0x00, 0x4F, 0x5C, 0x02, 0x00, 0x50, 0x5C, 0x02, 0x00, 0x73, 0x5C, 0x02, 0x00, 0xBD, -/* 00007FD0 */ 0x5C, 0x02, 0x00, 0xCF, 0x5C, 0x02, 0x00, 0xD0, 0x5C, 0x02, 0x00, 0xFC, 0x5C, 0x02, 0x00, 0x38, -/* 00007FE0 */ 0x5D, 0x02, 0x00, 0x97, 0x5D, 0x02, 0x00, 0xD9, 0x5D, 0x02, 0x00, 0x31, 0x5E, 0x02, 0x00, 0x47, -/* 00007FF0 */ 0x5E, 0x02, 0x00, 0x59, 0x5E, 0x02, 0x00, 0x5A, 0x5E, 0x02, 0x00, 0xC0, 0x5E, 0x02, 0x00, 0xE8, -/* 00008000 */ 0x5E, 0x02, 0x00, 0x34, 0x5F, 0x02, 0x00, 0x4A, 0x5F, 0x02, 0x00, 0x5E, 0x5F, 0x02, 0x00, 0x5F, -/* 00008010 */ 0x5F, 0x02, 0x00, 0x95, 0x5F, 0x02, 0x00, 0x0B, 0x60, 0x02, 0x00, 0x19, 0x60, 0x02, 0x00, 0x1A, -/* 00008020 */ 0x60, 0x02, 0x00, 0x47, 0x60, 0x02, 0x00, 0x77, 0x60, 0x02, 0x00, 0xA3, 0x60, 0x02, 0x00, 0xCF, -/* 00008030 */ 0x60, 0x02, 0x00, 0xFF, 0x60, 0x02, 0x00, 0x2B, 0x61, 0x02, 0x00, 0x57, 0x61, 0x02, 0x00, 0x8C, -/* 00008040 */ 0x61, 0x02, 0x00, 0xB4, 0x61, 0x02, 0x00, 0xDF, 0x61, 0x02, 0x00, 0xEE, 0x61, 0x02, 0x00, 0xEF, -/* 00008050 */ 0x61, 0x02, 0x00, 0x26, 0x62, 0x02, 0x00, 0x5D, 0x62, 0x02, 0x00, 0x7C, 0x62, 0x02, 0x00, 0x8E, -/* 00008060 */ 0x62, 0x02, 0x00, 0x8F, 0x62, 0x02, 0x00, 0xD7, 0x62, 0x02, 0x00, 0xE5, 0x62, 0x02, 0x00, 0xE6, -/* 00008070 */ 0x62, 0x02, 0x00, 0x56, 0x63, 0x02, 0x00, 0xB2, 0x63, 0x02, 0x00, 0x28, 0x64, 0x02, 0x00, 0xB9, -/* 00008080 */ 0x64, 0x02, 0x00, 0x37, 0x65, 0x02, 0x00, 0x5D, 0x65, 0x02, 0x00, 0x52, 0x66, 0x02, 0x00, 0x7C, -/* 00008090 */ 0x66, 0x02, 0x00, 0x8E, 0x66, 0x02, 0x00, 0x8F, 0x66, 0x02, 0x00, 0xD2, 0x66, 0x02, 0x00, 0x54, -/* 000080A0 */ 0x67, 0x02, 0x00, 0x87, 0x67, 0x02, 0x00, 0x3D, 0x68, 0x02, 0x00, 0x4F, 0x68, 0x02, 0x00, 0x75, -/* 000080B0 */ 0x68, 0x02, 0x00, 0x83, 0x68, 0x02, 0x00, 0x84, 0x68, 0x02, 0x00, 0xE9, 0x68, 0x02, 0x00, 0x33, -/* 000080C0 */ 0x69, 0x02, 0x00, 0xA7, 0x69, 0x02, 0x00, 0x38, 0x6A, 0x02, 0x00, 0x5E, 0x6A, 0x02, 0x00, 0x5E, -/* 000080D0 */ 0x6B, 0x02, 0x00, 0x88, 0x6B, 0x02, 0x00, 0x9A, 0x6B, 0x02, 0x00, 0x9B, 0x6B, 0x02, 0x00, 0xE5, -/* 000080E0 */ 0x6B, 0x02, 0x00, 0x14, 0x6C, 0x02, 0x00, 0x92, 0x6C, 0x02, 0x00, 0xC7, 0x6C, 0x02, 0x00, 0x42, -/* 000080F0 */ 0x6D, 0x02, 0x00, 0x54, 0x6D, 0x02, 0x00, 0x55, 0x6D, 0x02, 0x00, 0x7B, 0x6D, 0x02, 0x00, 0x89, -/* 00008100 */ 0x6D, 0x02, 0x00, 0x8A, 0x6D, 0x02, 0x00, 0xEC, 0x6D, 0x02, 0x00, 0x37, 0x6E, 0x02, 0x00, 0x75, -/* 00008110 */ 0x6E, 0x02, 0x00, 0xEE, 0x6E, 0x02, 0x00, 0x00, 0x6F, 0x02, 0x00, 0x01, 0x6F, 0x02, 0x00, 0x3B, -/* 00008120 */ 0x6F, 0x02, 0x00, 0xA8, 0x6F, 0x02, 0x00, 0x07, 0x70, 0x02, 0x00, 0x7C, 0x70, 0x02, 0x00, 0x8E, -/* 00008130 */ 0x70, 0x02, 0x00, 0x8F, 0x70, 0x02, 0x00, 0xCA, 0x70, 0x02, 0x00, 0x35, 0x71, 0x02, 0x00, 0x5F, -/* 00008140 */ 0x71, 0x02, 0x00, 0xD3, 0x71, 0x02, 0x00, 0xF0, 0x71, 0x02, 0x00, 0x73, 0x72, 0x02, 0x00, 0x89, -/* 00008150 */ 0x72, 0x02, 0x00, 0xC8, 0x72, 0x02, 0x00, 0x33, 0x73, 0x02, 0x00, 0x5D, 0x73, 0x02, 0x00, 0xD1, -/* 00008160 */ 0x73, 0x02, 0x00, 0xEE, 0x73, 0x02, 0x00, 0x67, 0x74, 0x02, 0x00, 0x7D, 0x74, 0x02, 0x00, 0x8F, -/* 00008170 */ 0x74, 0x02, 0x00, 0x90, 0x74, 0x02, 0x00, 0x25, 0x75, 0x02, 0x00, 0xB1, 0x75, 0x02, 0x00, 0x24, -/* 00008180 */ 0x76, 0x02, 0x00, 0x67, 0x76, 0x02, 0x00, 0xE3, 0x76, 0x02, 0x00, 0xF5, 0x76, 0x02, 0x00, 0xF6, -/* 00008190 */ 0x76, 0x02, 0x00, 0x30, 0x77, 0x02, 0x00, 0xA8, 0x77, 0x02, 0x00, 0xBA, 0x77, 0x02, 0x00, 0xBB, -/* 000081A0 */ 0x77, 0x02, 0x00, 0xF6, 0x77, 0x02, 0x00, 0x70, 0x78, 0x02, 0x00, 0x82, 0x78, 0x02, 0x00, 0x83, -/* 000081B0 */ 0x78, 0x02, 0x00, 0xC0, 0x78, 0x02, 0x00, 0x3E, 0x79, 0x02, 0x00, 0x50, 0x79, 0x02, 0x00, 0x51, -/* 000081C0 */ 0x79, 0x02, 0x00, 0x8E, 0x79, 0x02, 0x00, 0x0C, 0x7A, 0x02, 0x00, 0x1E, 0x7A, 0x02, 0x00, 0x1F, -/* 000081D0 */ 0x7A, 0x02, 0x00, 0x62, 0x7A, 0x02, 0x00, 0xDF, 0x7A, 0x02, 0x00, 0xF1, 0x7A, 0x02, 0x00, 0xF2, -/* 000081E0 */ 0x7A, 0x02, 0x00, 0x18, 0x7B, 0x02, 0x00, 0x26, 0x7B, 0x02, 0x00, 0x27, 0x7B, 0x02, 0x00, 0x7C, -/* 000081F0 */ 0x7B, 0x02, 0x00, 0xB5, 0x7B, 0x02, 0x00, 0xE5, 0x7B, 0x02, 0x00, 0xF7, 0x7B, 0x02, 0x00, 0xF8, -/* 00008200 */ 0x7B, 0x02, 0x00, 0x93, 0x7C, 0x02, 0x00, 0xF5, 0x7C, 0x02, 0x00, 0x07, 0x7D, 0x02, 0x00, 0x08, -/* 00008210 */ 0x7D, 0x02, 0x00, 0x47, 0x7D, 0x02, 0x00, 0x48, 0x7D, 0x02, 0x00, 0x6F, 0x7D, 0x02, 0x00, 0xB4, -/* 00008220 */ 0x7D, 0x02, 0x00, 0xB5, 0x7D, 0x02, 0x00, 0x26, 0x7E, 0x02, 0x00, 0x85, 0x7E, 0x02, 0x00, 0x86, -/* 00008230 */ 0x7E, 0x02, 0x00, 0xB4, 0x7E, 0x02, 0x00, 0x07, 0x7F, 0x02, 0x00, 0x20, 0x7F, 0x02, 0x00, 0x5E, -/* 00008240 */ 0x7F, 0x02, 0x00, 0x70, 0x7F, 0x02, 0x00, 0x71, 0x7F, 0x02, 0x00, 0x9F, 0x7F, 0x02, 0x00, 0xDA, -/* 00008250 */ 0x7F, 0x02, 0x00, 0xEC, 0x7F, 0x02, 0x00, 0xED, 0x7F, 0x02, 0x00, 0x0F, 0x80, 0x02, 0x00, 0x7E, -/* 00008260 */ 0x80, 0x02, 0x00, 0xE5, 0x80, 0x02, 0x00, 0x49, 0x81, 0x02, 0x00, 0xCA, 0x81, 0x02, 0x00, 0x2C, -/* 00008270 */ 0x82, 0x02, 0x00, 0x90, 0x82, 0x02, 0x00, 0xF8, 0x82, 0x02, 0x00, 0x60, 0x83, 0x02, 0x00, 0xCF, -/* 00008280 */ 0x83, 0x02, 0x00, 0xD0, 0x83, 0x02, 0x00, 0x3F, 0x84, 0x02, 0x00, 0xB5, 0x84, 0x02, 0x00, 0xB6, -/* 00008290 */ 0x84, 0x02, 0x00, 0x26, 0x85, 0x02, 0x00, 0x27, 0x85, 0x02, 0x00, 0x78, 0x85, 0x02, 0x00, 0x9E, -/* 000082A0 */ 0x85, 0x02, 0x00, 0xBC, 0x85, 0x02, 0x00, 0xDC, 0x85, 0x02, 0x00, 0xFE, 0x85, 0x02, 0x00, 0x1C, -/* 000082B0 */ 0x86, 0x02, 0x00, 0x3C, 0x86, 0x02, 0x00, 0x60, 0x86, 0x02, 0x00, 0x84, 0x86, 0x02, 0x00, 0xB3, -/* 000082C0 */ 0x86, 0x02, 0x00, 0xCE, 0x86, 0x02, 0x00, 0xCF, 0x86, 0x02, 0x00, 0xF7, 0x86, 0x02, 0x00, 0x38, -/* 000082D0 */ 0x87, 0x02, 0x00, 0xAB, 0x87, 0x02, 0x00, 0xAC, 0x87, 0x02, 0x00, 0xD2, 0x87, 0x02, 0x00, 0x06, -/* 000082E0 */ 0x88, 0x02, 0x00, 0x3C, 0x88, 0x02, 0x00, 0x81, 0x88, 0x02, 0x00, 0x82, 0x88, 0x02, 0x00, 0xA4, -/* 000082F0 */ 0x88, 0x02, 0x00, 0xD8, 0x88, 0x02, 0x00, 0x04, 0x89, 0x02, 0x00, 0x32, 0x89, 0x02, 0x00, 0x62, -/* 00008300 */ 0x89, 0x02, 0x00, 0x8E, 0x89, 0x02, 0x00, 0xBC, 0x89, 0x02, 0x00, 0xEE, 0x89, 0x02, 0x00, 0x20, -/* 00008310 */ 0x8A, 0x02, 0x00, 0x5E, 0x8A, 0x02, 0x00, 0x5F, 0x8A, 0x02, 0x00, 0x91, 0x8A, 0x02, 0x00, 0xD1, -/* 00008320 */ 0x8A, 0x02, 0x00, 0x0F, 0x8B, 0x02, 0x00, 0x10, 0x8B, 0x02, 0x00, 0x52, 0x8B, 0x02, 0x00, 0x53, -/* 00008330 */ 0x8B, 0x02, 0x00, 0x66, 0x8B, 0x02, 0x00, 0x82, 0x8B, 0x02, 0x00, 0xDA, 0x8B, 0x02, 0x00, 0x54, -/* 00008340 */ 0x8C, 0x02, 0x00, 0xF9, 0x8C, 0x02, 0x00, 0xA0, 0x8D, 0x02, 0x00, 0x08, 0x8E, 0x02, 0x00, 0x1F, -/* 00008350 */ 0x8E, 0x02, 0x00, 0x48, 0x8E, 0x02, 0x00, 0x49, 0x8E, 0x02, 0x00, 0x5F, 0x8E, 0x02, 0x00, 0xAE, -/* 00008360 */ 0x8E, 0x02, 0x00, 0xEF, 0x8E, 0x02, 0x00, 0x0D, 0x8F, 0x02, 0x00, 0x37, 0x8F, 0x02, 0x00, 0x61, -/* 00008370 */ 0x8F, 0x02, 0x00, 0x62, 0x8F, 0x02, 0x00, 0xD0, 0x8F, 0x02, 0x00, 0x26, 0x90, 0x02, 0x00, 0x7A, -/* 00008380 */ 0x90, 0x02, 0x00, 0xE4, 0x90, 0x02, 0x00, 0x0C, 0x91, 0x02, 0x00, 0x1E, 0x91, 0x02, 0x00, 0x1F, -/* 00008390 */ 0x91, 0x02, 0x00, 0x43, 0x91, 0x02, 0x00, 0x75, 0x91, 0x02, 0x00, 0xF5, 0x91, 0x02, 0x00, 0x07, -/* 000083A0 */ 0x92, 0x02, 0x00, 0x08, 0x92, 0x02, 0x00, 0x1E, 0x92, 0x02, 0x00, 0x53, 0x92, 0x02, 0x00, 0x93, -/* 000083B0 */ 0x92, 0x02, 0x00, 0xB1, 0x92, 0x02, 0x00, 0xDB, 0x92, 0x02, 0x00, 0x05, 0x93, 0x02, 0x00, 0x06, -/* 000083C0 */ 0x93, 0x02, 0x00, 0x68, 0x93, 0x02, 0x00, 0xED, 0x93, 0x02, 0x00, 0x52, 0x94, 0x02, 0x00, 0x8D, -/* 000083D0 */ 0x94, 0x02, 0x00, 0x9F, 0x94, 0x02, 0x00, 0xA0, 0x94, 0x02, 0x00, 0xCD, 0x94, 0x02, 0x00, 0x32, -/* 000083E0 */ 0x95, 0x02, 0x00, 0x33, 0x95, 0x02, 0x00, 0xB5, 0x95, 0x02, 0x00, 0xF0, 0x95, 0x02, 0x00, 0x4F, -/* 000083F0 */ 0x96, 0x02, 0x00, 0x61, 0x96, 0x02, 0x00, 0xA4, 0x96, 0x02, 0x00, 0xB2, 0x96, 0x02, 0x00, 0xB3, -/* 00008400 */ 0x96, 0x02, 0x00, 0x09, 0x97, 0x02, 0x00, 0x67, 0x97, 0x02, 0x00, 0xB7, 0x97, 0x02, 0x00, 0xDA, -/* 00008410 */ 0x97, 0x02, 0x00, 0x01, 0x98, 0x02, 0x00, 0x27, 0x98, 0x02, 0x00, 0x3D, 0x98, 0x02, 0x00, 0x3E, -/* 00008420 */ 0x98, 0x02, 0x00, 0xB3, 0x98, 0x02, 0x00, 0xFE, 0x98, 0x02, 0x00, 0x40, 0x99, 0x02, 0x00, 0x52, -/* 00008430 */ 0x99, 0x02, 0x00, 0xA5, 0x99, 0x02, 0x00, 0xDD, 0x99, 0x02, 0x00, 0x08, 0x9A, 0x02, 0x00, 0x1A, -/* 00008440 */ 0x9A, 0x02, 0x00, 0x1B, 0x9A, 0x02, 0x00, 0x48, 0x9A, 0x02, 0x00, 0xA4, 0x9A, 0x02, 0x00, 0x12, -/* 00008450 */ 0x9B, 0x02, 0x00, 0x61, 0x9B, 0x02, 0x00, 0x92, 0x9B, 0x02, 0x00, 0xED, 0x9B, 0x02, 0x00, 0x0A, -/* 00008460 */ 0x9C, 0x02, 0x00, 0x34, 0x9C, 0x02, 0x00, 0x72, 0x9C, 0x02, 0x00, 0xEC, 0x9C, 0x02, 0x00, 0x47, -/* 00008470 */ 0x9D, 0x02, 0x00, 0x5D, 0x9D, 0x02, 0x00, 0x6F, 0x9D, 0x02, 0x00, 0x70, 0x9D, 0x02, 0x00, 0x94, -/* 00008480 */ 0x9D, 0x02, 0x00, 0xCE, 0x9D, 0x02, 0x00, 0x40, 0x9E, 0x02, 0x00, 0x52, 0x9E, 0x02, 0x00, 0x53, -/* 00008490 */ 0x9E, 0x02, 0x00, 0xB1, 0x9E, 0x02, 0x00, 0xBF, 0x9E, 0x02, 0x00, 0xC0, 0x9E, 0x02, 0x00, 0x3D, -/* 000084A0 */ 0x9F, 0x02, 0x00, 0xC9, 0x9F, 0x02, 0x00, 0x48, 0xA0, 0x02, 0x00, 0xD1, 0xA0, 0x02, 0x00, 0xF6, -/* 000084B0 */ 0xA0, 0x02, 0x00, 0x05, 0xA1, 0x02, 0x00, 0x90, 0xA1, 0x02, 0x00, 0x16, 0xA2, 0x02, 0x00, 0xA0, -/* 000084C0 */ 0xA2, 0x02, 0x00, 0xF4, 0xA2, 0x02, 0x00, 0x03, 0xA3, 0x02, 0x00, 0x85, 0xA3, 0x02, 0x00, 0xF6, -/* 000084D0 */ 0xA3, 0x02, 0x00, 0x51, 0xA4, 0x02, 0x00, 0xBC, 0xA4, 0x02, 0x00, 0x36, 0xA5, 0x02, 0x00, 0x87, -/* 000084E0 */ 0xA5, 0x02, 0x00, 0x96, 0xA5, 0x02, 0x00, 0x0C, 0xA6, 0x02, 0x00, 0x1B, 0xA6, 0x02, 0x00, 0xA7, -/* 000084F0 */ 0xA6, 0x02, 0x00, 0x30, 0xA7, 0x02, 0x00, 0x7B, 0xA7, 0x02, 0x00, 0x7C, 0xA7, 0x02, 0x00, 0xCC, -/* 00008500 */ 0xA7, 0x02, 0x00, 0x69, 0xA8, 0x02, 0x00, 0xEE, 0xA8, 0x02, 0x00, 0x17, 0xA9, 0x02, 0x00, 0xBD, -/* 00008510 */ 0xA9, 0x02, 0x00, 0xBE, 0xA9, 0x02, 0x00, 0x0E, 0xAA, 0x02, 0x00, 0xAF, 0xAA, 0x02, 0x00, 0x34, -/* 00008520 */ 0xAB, 0x02, 0x00, 0x5D, 0xAB, 0x02, 0x00, 0x11, 0xAC, 0x02, 0x00, 0x12, 0xAC, 0x02, 0x00, 0x62, -/* 00008530 */ 0xAC, 0x02, 0x00, 0x03, 0xAD, 0x02, 0x00, 0x88, 0xAD, 0x02, 0x00, 0xB1, 0xAD, 0x02, 0x00, 0x65, -/* 00008540 */ 0xAE, 0x02, 0x00, 0x66, 0xAE, 0x02, 0x00, 0x8D, 0xAE, 0x02, 0x00, 0xE1, 0xAE, 0x02, 0x00, 0x20, -/* 00008550 */ 0xAF, 0x02, 0x00, 0x65, 0xAF, 0x02, 0x00, 0x7B, 0xAF, 0x02, 0x00, 0x7C, 0xAF, 0x02, 0x00, 0xB3, -/* 00008560 */ 0xAF, 0x02, 0x00, 0xE7, 0xAF, 0x02, 0x00, 0x36, 0xB0, 0x02, 0x00, 0x4C, 0xB0, 0x02, 0x00, 0x4D, -/* 00008570 */ 0xB0, 0x02, 0x00, 0x88, 0xB0, 0x02, 0x00, 0xCE, 0xB0, 0x02, 0x00, 0xCF, 0xB0, 0x02, 0x00, 0x05, -/* 00008580 */ 0xB1, 0x02, 0x00, 0x44, 0xB1, 0x02, 0x00, 0x89, 0xB1, 0x02, 0x00, 0x9F, 0xB1, 0x02, 0x00, 0xA0, -/* 00008590 */ 0xB1, 0x02, 0x00, 0xEE, 0xB1, 0x02, 0x00, 0xEF, 0xB1, 0x02, 0x00, 0x55, 0xB2, 0x02, 0x00, 0x91, -/* 000085A0 */ 0xB2, 0x02, 0x00, 0x92, 0xB2, 0x02, 0x00, 0xB2, 0xB2, 0x02, 0x00, 0xC4, 0xB2, 0x02, 0x00, 0x0E, -/* 000085B0 */ 0xB3, 0x02, 0x00, 0x0F, 0xB3, 0x02, 0x00, 0x37, 0xB3, 0x02, 0x00, 0x6B, 0xB3, 0x02, 0x00, 0xD8, -/* 000085C0 */ 0xB3, 0x02, 0x00, 0xEE, 0xB3, 0x02, 0x00, 0x35, 0xB4, 0x02, 0x00, 0x98, 0xB4, 0x02, 0x00, 0x05, -/* 000085D0 */ 0xB5, 0x02, 0x00, 0x1B, 0xB5, 0x02, 0x00, 0x1C, 0xB5, 0x02, 0x00, 0x6E, 0xB5, 0x02, 0x00, 0xA3, -/* 000085E0 */ 0xB5, 0x02, 0x00, 0xB9, 0xB5, 0x02, 0x00, 0xBA, 0xB5, 0x02, 0x00, 0xE9, 0xB5, 0x02, 0x00, 0x17, -/* 000085F0 */ 0xB6, 0x02, 0x00, 0x53, 0xB6, 0x02, 0x00, 0x70, 0xB6, 0x02, 0x00, 0x9F, 0xB6, 0x02, 0x00, 0xB5, -/* 00008600 */ 0xB6, 0x02, 0x00, 0xB6, 0xB6, 0x02, 0x00, 0x0B, 0xB7, 0x02, 0x00, 0x1D, 0xB7, 0x02, 0x00, 0x70, -/* 00008610 */ 0xB7, 0x02, 0x00, 0x71, 0xB7, 0x02, 0x00, 0xB8, 0xB7, 0x02, 0x00, 0xB9, 0xB7, 0x02, 0x00, 0x56, -/* 00008620 */ 0xB8, 0x02, 0x00, 0xA0, 0xB8, 0x02, 0x00, 0x41, 0xB9, 0x02, 0x00, 0x42, 0xB9, 0x02, 0x00, 0x8D, -/* 00008630 */ 0xB9, 0x02, 0x00, 0xD4, 0xB9, 0x02, 0x00, 0x0C, 0xBA, 0x02, 0x00, 0x7D, 0xBA, 0x02, 0x00, 0x97, -/* 00008640 */ 0xBA, 0x02, 0x00, 0x98, 0xBA, 0x02, 0x00, 0xE3, 0xBA, 0x02, 0x00, 0x4A, 0xBB, 0x02, 0x00, 0xBB, -/* 00008650 */ 0xBB, 0x02, 0x00, 0xD5, 0xBB, 0x02, 0x00, 0xD6, 0xBB, 0x02, 0x00, 0x11, 0xBC, 0x02, 0x00, 0x4F, -/* 00008660 */ 0xBC, 0x02, 0x00, 0x63, 0xBC, 0x02, 0x00, 0x64, 0xBC, 0x02, 0x00, 0xB8, 0xBC, 0x02, 0x00, 0xF0, -/* 00008670 */ 0xBC, 0x02, 0x00, 0x28, 0xBD, 0x02, 0x00, 0xA2, 0xBD, 0x02, 0x00, 0xBC, 0xBD, 0x02, 0x00, 0x07, -/* 00008680 */ 0xBE, 0x02, 0x00, 0x6E, 0xBE, 0x02, 0x00, 0xE8, 0xBE, 0x02, 0x00, 0x02, 0xBF, 0x02, 0x00, 0x34, -/* 00008690 */ 0xBF, 0x02, 0x00, 0x6F, 0xBF, 0x02, 0x00, 0xC6, 0xBF, 0x02, 0x00, 0x2B, 0xC0, 0x02, 0x00, 0x6A, -/* 000086A0 */ 0xC0, 0x02, 0x00, 0xA5, 0xC0, 0x02, 0x00, 0xE2, 0xC0, 0x02, 0x00, 0x17, 0xC1, 0x02, 0x00, 0x4E, -/* 000086B0 */ 0xC1, 0x02, 0x00, 0x87, 0xC1, 0x02, 0x00, 0xBC, 0xC1, 0x02, 0x00, 0xF3, 0xC1, 0x02, 0x00, 0x2E, -/* 000086C0 */ 0xC2, 0x02, 0x00, 0x69, 0xC2, 0x02, 0x00, 0xAF, 0xC2, 0x02, 0x00, 0xD0, 0xC2, 0x02, 0x00, 0x0E, -/* 000086D0 */ 0xC3, 0x02, 0x00, 0x80, 0xC3, 0x02, 0x00, 0x22, 0xC4, 0x02, 0x00, 0x5E, 0xC4, 0x02, 0x00, 0x7C, -/* 000086E0 */ 0xC4, 0x02, 0x00, 0xA6, 0xC4, 0x02, 0x00, 0xEE, 0xC4, 0x02, 0x00, 0x3B, 0xC5, 0x02, 0x00, 0x4F, -/* 000086F0 */ 0xC5, 0x02, 0x00, 0x50, 0xC5, 0x02, 0x00, 0xEE, 0xC5, 0x02, 0x00, 0xEF, 0xC5, 0x02, 0x00, 0x16, -/* 00008700 */ 0xC6, 0x02, 0x00, 0x24, 0xC6, 0x02, 0x00, 0x2E, 0xC6, 0x02, 0x00, 0x7F, 0xC6, 0x02, 0x00, 0x99, -/* 00008710 */ 0xC6, 0x02, 0x00, 0xA3, 0xC6, 0x02, 0x00, 0xA4, 0xC6, 0x02, 0x00, 0xD5, 0xC6, 0x02, 0x00, 0xF4, -/* 00008720 */ 0xC6, 0x02, 0x00, 0x70, 0xC7, 0x02, 0x00, 0xF4, 0xC7, 0x02, 0x00, 0x7C, 0xC8, 0x02, 0x00, 0x0E, -/* 00008730 */ 0xC9, 0x02, 0x00, 0x14, 0xC9, 0x02, 0x00, 0x15, 0xC9, 0x02, 0x00, 0x2A, 0xC9, 0x02, 0x00, 0x2E, -/* 00008740 */ 0xC9, 0x02, 0x00, 0x00, 0xCC, 0xB9, 0x0C, 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0xA8, 0x41, 0xC0, -/* 00008750 */ 0x00, 0xFE, 0xCE, 0x02, 0x00, 0xFE, 0x70, 0x01, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0xFE, 0x70, -/* 00008760 */ 0x01, 0xFF, 0xBE, 0xC7, 0x02, 0x00, 0xFF, 0xBE, 0xC7, 0x02, 0x00, 0x40, 0x01, 0x04, 0x04, 0x05, -/* 00008770 */ 0x05, 0x03, 0x05, 0xFE, 0xCF, 0x02, 0x0A, 0x09, 0xA6, 0x00, 0xD3, 0x00, 0x04, 0xFA, 0x04, 0x24, -/* 00008780 */ 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00, 0x8C, 0x87, 0x00, 0x00, 0xBF, 0x1D, 0x08, 0xC1, -/* 00008790 */ 0x53, 0xAD, 0x25, 0x01, 0x07, 0x01, 0xA2, 0x41, 0xD1, 0x00, 0x01, 0xFE, 0x90, 0x01, 0x5F, 0xFF, -/* 000087A0 */ 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x90, 0x01, 0xFF, 0x9B, 0xC7, 0x02, 0x00, 0xFF, 0x9B, -/* 000087B0 */ 0xC7, 0x02, 0x00, 0x40, 0x3C, 0xFE, 0xD0, 0x02, 0xFE, 0xFF, 0x01, 0xFE, 0xD1, 0x02, 0xFE, 0xD2, -/* 000087C0 */ 0x02, 0xFE, 0xD3, 0x02, 0x51, 0xFE, 0x02, 0x01, 0xFE, 0x28, 0x01, 0xFD, 0xFE, 0x4A, 0x01, 0x63, -/* 000087D0 */ 0x76, 0xFE, 0xD4, 0x02, 0xC7, 0xFE, 0xD5, 0x02, 0xFE, 0xD6, 0x02, 0xFE, 0xD7, 0x02, 0xFE, 0xD8, -/* 000087E0 */ 0x02, 0xFE, 0xD9, 0x02, 0xFE, 0xDA, 0x02, 0xFE, 0xDB, 0x02, 0xFE, 0xDC, 0x02, 0xFE, 0xDD, 0x02, -/* 000087F0 */ 0xFE, 0xDE, 0x02, 0xFE, 0xDF, 0x02, 0xFE, 0xE0, 0x02, 0xFE, 0xE1, 0x02, 0xFE, 0xE2, 0x02, 0xFE, -/* 00008800 */ 0xE3, 0x02, 0xFE, 0xE4, 0x02, 0xB1, 0xB4, 0xFE, 0xE5, 0x02, 0xFE, 0xE6, 0x02, 0xFE, 0xE7, 0x02, -/* 00008810 */ 0xFE, 0xE8, 0x02, 0xFE, 0xDE, 0x01, 0xFE, 0xDD, 0x01, 0xFE, 0xE9, 0x02, 0xFE, 0xEA, 0x02, 0xFE, -/* 00008820 */ 0xEB, 0x02, 0xFE, 0xEC, 0x02, 0xFE, 0xED, 0x02, 0xFE, 0xEE, 0x02, 0xFE, 0xFC, 0x01, 0xFE, 0xEF, -/* 00008830 */ 0x02, 0xFE, 0xF0, 0x02, 0xFE, 0xF1, 0x02, 0xFE, 0xF2, 0x02, 0xFE, 0xF3, 0x02, 0xFE, 0xF4, 0x02, -/* 00008840 */ 0xFE, 0xF5, 0x02, 0xFE, 0xF6, 0x02, 0xFE, 0xF7, 0x02, 0xFE, 0xF8, 0x02, 0xFE, 0xF9, 0x02, 0xFE, -/* 00008850 */ 0xFA, 0x02, 0xFE, 0xFB, 0x02, 0xFE, 0xFC, 0x02, 0xFE, 0xFD, 0x02, 0x20, 0x70, 0x8A, 0x09, 0xFE, -/* 00008860 */ 0x25, 0x04, 0xFE, 0x18, 0x04, 0x3A, 0x16, 0x8F, 0x8E, 0x8F, 0x8F, 0x23, 0x02, 0x87, 0x88, 0x89, -/* 00008870 */ 0x8A, 0x08, 0x0B, 0x06, 0xFE, 0xF4, 0x02, 0x06, 0xFE, 0xFE, 0x02, 0x06, 0xFE, 0xFF, 0x02, 0x06, -/* 00008880 */ 0xFE, 0x00, 0x03, 0x06, 0xFE, 0x01, 0x03, 0x07, 0x06, 0xFE, 0x02, 0x03, 0x01, 0x00, 0x06, 0xFE, -/* 00008890 */ 0x03, 0x03, 0x06, 0xFE, 0x04, 0x03, 0x01, 0x01, 0x06, 0xFE, 0x05, 0x03, 0x01, 0x02, 0x06, 0xFE, -/* 000088A0 */ 0x06, 0x03, 0x01, 0x03, 0x06, 0xFE, 0x07, 0x03, 0x01, 0x04, 0x06, 0xFE, 0x08, 0x03, 0x01, 0x05, -/* 000088B0 */ 0x06, 0xFE, 0x09, 0x03, 0x06, 0xFE, 0x0A, 0x03, 0x06, 0xFE, 0x0B, 0x03, 0x06, 0xFE, 0x0C, 0x03, -/* 000088C0 */ 0x06, 0xFE, 0x0D, 0x03, 0x06, 0xFE, 0x0E, 0x03, 0x06, 0xFE, 0x0F, 0x03, 0x06, 0xFE, 0x10, 0x03, -/* 000088D0 */ 0x06, 0xFE, 0x11, 0x03, 0x06, 0xFE, 0x12, 0x03, 0x06, 0xFE, 0x13, 0x03, 0x06, 0xFE, 0x14, 0x03, -/* 000088E0 */ 0x06, 0xFE, 0x15, 0x03, 0x06, 0xFE, 0x16, 0x03, 0x06, 0xFE, 0x17, 0x03, 0x06, 0xFE, 0x18, 0x03, -/* 000088F0 */ 0x06, 0xFE, 0x19, 0x03, 0x06, 0xFE, 0x1A, 0x03, 0x06, 0xFE, 0x1B, 0x03, 0x06, 0xFE, 0x1C, 0x03, -/* 00008900 */ 0x06, 0xFE, 0x1D, 0x03, 0x06, 0xFE, 0x1E, 0x03, 0x06, 0xFE, 0x1F, 0x03, 0x06, 0xFE, 0x20, 0x03, -/* 00008910 */ 0x06, 0xFE, 0x21, 0x03, 0x06, 0xFE, 0x22, 0x03, 0x06, 0xFE, 0x23, 0x03, 0x06, 0xFE, 0x24, 0x03, -/* 00008920 */ 0x06, 0xFE, 0x25, 0x03, 0x06, 0xFE, 0x26, 0x03, 0x06, 0xFE, 0x27, 0x03, 0x06, 0xFE, 0x28, 0x03, -/* 00008930 */ 0x06, 0xFE, 0x29, 0x03, 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, 0x2B, 0x03, 0x06, 0xFE, 0x2C, 0x03, -/* 00008940 */ 0x06, 0xFE, 0x2D, 0x03, 0x06, 0xFE, 0x2E, 0x03, 0x06, 0xFE, 0x2F, 0x03, 0x06, 0xFE, 0x30, 0x03, -/* 00008950 */ 0x06, 0xFE, 0x31, 0x03, 0x06, 0xFE, 0x32, 0x03, 0x06, 0xFE, 0x33, 0x03, 0x06, 0xFE, 0x34, 0x03, -/* 00008960 */ 0x06, 0xFE, 0x35, 0x03, 0x06, 0xFE, 0x36, 0x03, 0x06, 0xFE, 0x37, 0x03, 0x06, 0xFE, 0x38, 0x03, -/* 00008970 */ 0x06, 0xFE, 0x39, 0x03, 0x06, 0xFE, 0x3A, 0x03, 0x06, 0xFE, 0x3B, 0x03, 0x05, 0xFE, 0x3C, 0x03, -/* 00008980 */ 0x06, 0xFE, 0x3D, 0x03, 0x05, 0xFE, 0x3E, 0x03, 0x06, 0xFE, 0x3F, 0x03, 0x06, 0xFE, 0x40, 0x03, -/* 00008990 */ 0x05, 0xFE, 0x41, 0x03, 0x06, 0xFE, 0x42, 0x03, 0x0C, 0x06, 0xFE, 0x43, 0x03, 0x06, 0xFE, 0x44, -/* 000089A0 */ 0x03, 0x06, 0xFE, 0x45, 0x03, 0x06, 0xFE, 0x46, 0x03, 0x06, 0xFE, 0x47, 0x03, 0x06, 0xFE, 0x48, -/* 000089B0 */ 0x03, 0x05, 0xFE, 0x49, 0x03, 0x05, 0xFE, 0x4A, 0x03, 0x05, 0xFE, 0x4B, 0x03, 0x06, 0xFE, 0x4C, -/* 000089C0 */ 0x03, 0x06, 0xFE, 0x4D, 0x03, 0x06, 0xFE, 0x4E, 0x03, 0x05, 0xFE, 0x4F, 0x03, 0x06, 0xFE, 0x50, -/* 000089D0 */ 0x03, 0x06, 0xFE, 0x51, 0x03, 0x06, 0xFE, 0x52, 0x03, 0x05, 0xFE, 0x53, 0x03, 0x06, 0xFE, 0x54, -/* 000089E0 */ 0x03, 0x06, 0xFE, 0x55, 0x03, 0x05, 0xFE, 0x56, 0x03, 0x06, 0xFE, 0x57, 0x03, 0x06, 0xFE, 0x58, -/* 000089F0 */ 0x03, 0x05, 0xFE, 0x59, 0x03, 0x06, 0xFE, 0x5A, 0x03, 0x06, 0xFE, 0x5B, 0x03, 0x06, 0xFE, 0x5C, -/* 00008A00 */ 0x03, 0x06, 0xFE, 0x5D, 0x03, 0x06, 0xFE, 0x5E, 0x03, 0x06, 0xFE, 0x5F, 0x03, 0x06, 0xFE, 0x60, -/* 00008A10 */ 0x03, 0xFE, 0xB1, 0x12, 0x94, 0x32, 0x71, 0xA6, 0x81, 0xA6, 0x82, 0xA6, 0x86, 0xD3, 0x01, 0x72, -/* 00008A20 */ 0x94, 0x02, 0x72, 0x4F, 0x7C, 0x4F, 0x80, 0x4F, 0x83, 0xA6, 0x73, 0xA6, 0x74, 0x4F, 0x7E, 0x4F, -/* 00008A30 */ 0x7F, 0x4F, 0x84, 0x4F, 0x85, 0xA6, 0x75, 0xA6, 0x76, 0xA6, 0x77, 0xA6, 0x78, 0xA6, 0x79, 0xA6, -/* 00008A40 */ 0x7A, 0xA6, 0x7B, 0x4F, 0x8C, 0x94, 0x33, 0x8C, 0x4F, 0x8C, 0x94, 0x34, 0x8C, 0x4F, 0x8C, 0x94, -/* 00008A50 */ 0x35, 0x8C, 0x4F, 0x8C, 0x94, 0x36, 0x8C, 0x4F, 0x8C, 0x94, 0x37, 0x8C, 0x4F, 0x8C, 0x94, 0x38, -/* 00008A60 */ 0x8C, 0x4F, 0x8C, 0x94, 0x39, 0x8C, 0x4F, 0x8C, 0x94, 0x3A, 0x8C, 0x4F, 0x8C, 0x94, 0x3B, 0x8C, -/* 00008A70 */ 0x4F, 0x8C, 0x94, 0x3C, 0x8C, 0x4F, 0x8C, 0x94, 0x3D, 0x8C, 0x60, 0x8C, 0x70, 0x00, 0x94, 0x03, -/* 00008A80 */ 0x8C, 0x91, 0x03, 0x8C, 0x00, 0x00, 0x75, 0x03, 0x8C, 0x01, 0x91, 0x03, 0x8D, 0x00, 0x00, 0x60, -/* 00008A90 */ 0x8D, 0x8D, 0x02, 0xAA, 0x8C, 0x0F, 0x02, 0x00, 0x8D, 0xA9, 0x8C, 0x94, 0x33, 0x8C, 0x91, 0x03, -/* 00008AA0 */ 0x8C, 0x00, 0x00, 0x60, 0x8C, 0x8C, 0x03, 0x47, 0x7C, 0x8C, 0x94, 0x34, 0x04, 0x91, 0x03, 0x8C, -/* 00008AB0 */ 0x00, 0x00, 0x60, 0x8C, 0x8C, 0x04, 0x94, 0x04, 0x8C, 0x91, 0x03, 0x8C, 0x00, 0x00, 0x60, 0x8C, -/* 00008AC0 */ 0x8C, 0x05, 0x94, 0x05, 0x8C, 0x91, 0x03, 0x8C, 0x00, 0x00, 0x60, 0x8C, 0x8C, 0x06, 0x94, 0x06, -/* 00008AD0 */ 0x8C, 0xD3, 0x00, 0x8C, 0x94, 0x35, 0x8C, 0x91, 0x03, 0x8C, 0x00, 0x00, 0x60, 0x8C, 0x8C, 0x07, -/* 00008AE0 */ 0x94, 0x07, 0x8C, 0x91, 0x03, 0x8C, 0x00, 0x00, 0x60, 0x8C, 0x8C, 0x08, 0x94, 0x08, 0x8C, 0x91, -/* 00008AF0 */ 0x03, 0x8C, 0x00, 0x00, 0x60, 0x8C, 0x8C, 0x09, 0x94, 0x09, 0x8C, 0x91, 0x03, 0x8C, 0x00, 0x00, -/* 00008B00 */ 0x60, 0x8C, 0x8C, 0x0A, 0x94, 0x0A, 0x8C, 0x91, 0x03, 0x8C, 0x00, 0x00, 0x60, 0x8C, 0x8C, 0x0B, -/* 00008B10 */ 0x94, 0x0B, 0x8C, 0x91, 0x03, 0x8C, 0x00, 0x00, 0x60, 0x8C, 0x8C, 0x0C, 0x94, 0x0C, 0x8C, 0x91, -/* 00008B20 */ 0x03, 0x8C, 0x00, 0x00, 0x60, 0x8C, 0x8C, 0x0D, 0x94, 0x0D, 0x8C, 0x91, 0x03, 0x8C, 0x00, 0x00, -/* 00008B30 */ 0x60, 0x8C, 0x8C, 0x0E, 0x94, 0x0E, 0x8C, 0x91, 0x04, 0x8C, 0x01, 0x00, 0x07, 0x03, 0x00, 0x5A, -/* 00008B40 */ 0x00, 0x02, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, 0x91, -/* 00008B50 */ 0x03, 0x8E, 0x00, 0x00, 0x60, 0x8E, 0x8E, 0x0F, 0x79, 0x8E, 0x8D, 0x10, 0x91, 0x03, 0x8E, 0x00, -/* 00008B60 */ 0x00, 0x60, 0x8E, 0x8E, 0x11, 0x79, 0x8E, 0x8D, 0x12, 0x91, 0x03, 0x8E, 0x00, 0x00, 0x60, 0x8E, -/* 00008B70 */ 0x8E, 0x13, 0x79, 0x8E, 0x8D, 0x14, 0x91, 0x03, 0x8E, 0x00, 0x00, 0x60, 0x8E, 0x8E, 0x15, 0x79, -/* 00008B80 */ 0x8E, 0x8D, 0x16, 0x5B, 0x01, 0x8D, 0x00, 0x00, 0x5B, 0x02, 0x09, 0x00, 0x00, 0x02, 0xEE, 0x03, -/* 00008B90 */ 0x8C, 0x00, 0x8C, 0x00, 0x00, 0x00, 0x94, 0x0F, 0x8C, 0x91, 0x03, 0x8C, 0x00, 0x00, 0x60, 0x8C, -/* 00008BA0 */ 0x8C, 0x17, 0x94, 0x10, 0x8C, 0x91, 0x03, 0x8C, 0x00, 0x00, 0x60, 0x8C, 0x8C, 0x18, 0x94, 0x11, -/* 00008BB0 */ 0x8C, 0x91, 0x03, 0x8C, 0x00, 0x00, 0x60, 0x8C, 0x8C, 0x19, 0x94, 0x12, 0x8C, 0x91, 0x03, 0x8C, -/* 00008BC0 */ 0x00, 0x00, 0x60, 0x8C, 0x8C, 0x1A, 0x94, 0x13, 0x8C, 0x91, 0x03, 0x8C, 0x00, 0x00, 0x60, 0x8C, -/* 00008BD0 */ 0x8C, 0x1B, 0x94, 0x14, 0x8C, 0xD3, 0x02, 0x8C, 0x94, 0x15, 0x8C, 0x91, 0x03, 0x8C, 0x00, 0x00, -/* 00008BE0 */ 0x60, 0x8C, 0x8C, 0x1C, 0x94, 0x16, 0x8C, 0x91, 0x03, 0x8C, 0x00, 0x00, 0x60, 0x8C, 0x8C, 0x1D, -/* 00008BF0 */ 0x94, 0x17, 0x8C, 0x91, 0x03, 0x8C, 0x00, 0x00, 0x60, 0x8C, 0x8C, 0x1E, 0x94, 0x18, 0x8C, 0x91, -/* 00008C00 */ 0x03, 0x8C, 0x00, 0x00, 0x60, 0x8C, 0x8C, 0x1F, 0x94, 0x19, 0x8C, 0x91, 0x03, 0x8C, 0x00, 0x00, -/* 00008C10 */ 0x60, 0x8C, 0x8C, 0x20, 0x94, 0x1A, 0x8C, 0x91, 0x03, 0x8C, 0x00, 0x00, 0x60, 0x8C, 0x8C, 0x21, -/* 00008C20 */ 0x94, 0x1B, 0x8C, 0x91, 0x03, 0x8C, 0x00, 0x00, 0x60, 0x8C, 0x8C, 0x22, 0x94, 0x1C, 0x8C, 0x91, -/* 00008C30 */ 0x03, 0x8C, 0x00, 0x00, 0x60, 0x8C, 0x8C, 0x23, 0x94, 0x1D, 0x8C, 0x91, 0x03, 0x8C, 0x00, 0x00, -/* 00008C40 */ 0x60, 0x8C, 0x8C, 0x24, 0x94, 0x1E, 0x8C, 0x91, 0x03, 0x8C, 0x00, 0x00, 0x60, 0x8C, 0x8C, 0x25, -/* 00008C50 */ 0x94, 0x1F, 0x8C, 0x91, 0x03, 0x8C, 0x00, 0x00, 0x60, 0x8C, 0x8C, 0x26, 0x47, 0x7D, 0x8C, 0x91, -/* 00008C60 */ 0x03, 0x8C, 0x00, 0x00, 0x60, 0x8C, 0x8C, 0x27, 0x94, 0x20, 0x8C, 0x91, 0x03, 0x8C, 0x00, 0x00, -/* 00008C70 */ 0x60, 0x8C, 0x8C, 0x28, 0x94, 0x21, 0x8C, 0x91, 0x04, 0x8C, 0x01, 0x00, 0x07, 0x03, 0x00, 0x5A, -/* 00008C80 */ 0x00, 0x02, 0xCB, 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, 0x79, -/* 00008C90 */ 0x0B, 0x8D, 0x29, 0x79, 0x0B, 0x8D, 0x2A, 0x79, 0x0E, 0x8D, 0x2B, 0x79, 0x10, 0x8D, 0x2C, 0x79, -/* 00008CA0 */ 0x12, 0x8D, 0x2D, 0x79, 0x14, 0x8D, 0x2E, 0x79, 0x16, 0x8D, 0x2F, 0x5B, 0x01, 0x8D, 0x01, 0x00, -/* 00008CB0 */ 0x5B, 0x02, 0x09, 0x01, 0x00, 0x02, 0xEE, 0x03, 0x8C, 0x00, 0x8C, 0x00, 0x01, 0x00, 0x94, 0x36, -/* 00008CC0 */ 0x8C, 0xCB, 0x3C, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x00, 0xD6, 0x03, -/* 00008CD0 */ 0x8D, 0x8C, 0x79, 0x8D, 0x8C, 0x30, 0xD6, 0x04, 0x8D, 0x8C, 0x79, 0x8D, 0x8C, 0x31, 0xD6, 0x05, -/* 00008CE0 */ 0x8D, 0x8C, 0x79, 0x8D, 0x8C, 0x32, 0xD6, 0x06, 0x8D, 0x8C, 0x79, 0x8D, 0x8C, 0x33, 0xD6, 0x07, -/* 00008CF0 */ 0x8D, 0x8C, 0x79, 0x8D, 0x8C, 0x34, 0xD6, 0x08, 0x8D, 0x8C, 0x79, 0x8D, 0x8C, 0x35, 0xD6, 0x09, -/* 00008D00 */ 0x8D, 0x8C, 0x79, 0x8D, 0x8C, 0x36, 0xD6, 0x0A, 0x8D, 0x8C, 0x79, 0x8D, 0x8C, 0x37, 0xD6, 0x0B, -/* 00008D10 */ 0x8D, 0x8C, 0x79, 0x8D, 0x8C, 0x38, 0xD6, 0x0C, 0x8D, 0x8C, 0x79, 0x8D, 0x8C, 0x39, 0xD6, 0x0D, -/* 00008D20 */ 0x8D, 0x8C, 0x79, 0x8D, 0x8C, 0x3A, 0xD6, 0x0E, 0x8D, 0x8C, 0x79, 0x8D, 0x8C, 0x3B, 0xD6, 0x0F, -/* 00008D30 */ 0x8D, 0x8C, 0x79, 0x8D, 0x8C, 0x3C, 0xD6, 0x10, 0x8D, 0x8C, 0x79, 0x8D, 0x8C, 0x3D, 0xD6, 0x11, -/* 00008D40 */ 0x8D, 0x8C, 0x79, 0x8D, 0x8C, 0x3E, 0xD6, 0x12, 0x8D, 0x8C, 0x79, 0x8D, 0x8C, 0x3F, 0xD6, 0x13, -/* 00008D50 */ 0x8D, 0x8C, 0x79, 0x8D, 0x8C, 0x40, 0xD6, 0x14, 0x8D, 0x8C, 0x79, 0x8D, 0x8C, 0x41, 0x91, 0x03, -/* 00008D60 */ 0x8D, 0x00, 0x00, 0x60, 0x8D, 0x8D, 0x42, 0x79, 0x8D, 0x8C, 0x43, 0xD6, 0x15, 0x8D, 0x8C, 0x79, -/* 00008D70 */ 0x8D, 0x8C, 0x44, 0xD6, 0x16, 0x8D, 0x8C, 0x79, 0x8D, 0x8C, 0x45, 0x91, 0x03, 0x8D, 0x00, 0x00, -/* 00008D80 */ 0x60, 0x8D, 0x8D, 0x46, 0x79, 0x8D, 0x8C, 0x47, 0xD6, 0x17, 0x8D, 0x8C, 0x79, 0x8D, 0x8C, 0x48, -/* 00008D90 */ 0xD6, 0x18, 0x8D, 0x8C, 0x79, 0x8D, 0x8C, 0x49, 0x91, 0x03, 0x8D, 0x00, 0x00, 0x60, 0x8D, 0x8D, -/* 00008DA0 */ 0x4A, 0x79, 0x8D, 0x8C, 0x4B, 0xD6, 0x19, 0x8D, 0x8C, 0x79, 0x8D, 0x8C, 0x4C, 0x91, 0x03, 0x8D, -/* 00008DB0 */ 0x00, 0x00, 0x60, 0x8D, 0x8D, 0x4D, 0x79, 0x8D, 0x8C, 0x4E, 0x91, 0x03, 0x8D, 0x00, 0x00, 0x60, -/* 00008DC0 */ 0x8D, 0x8D, 0x4F, 0x79, 0x8D, 0x8C, 0x50, 0x91, 0x03, 0x8D, 0x00, 0x00, 0x60, 0x8D, 0x8D, 0x51, -/* 00008DD0 */ 0x79, 0x8D, 0x8C, 0x52, 0x91, 0x03, 0x8D, 0x00, 0x00, 0x60, 0x8D, 0x8D, 0x53, 0x79, 0x8D, 0x8C, -/* 00008DE0 */ 0x54, 0xD6, 0x1A, 0x8D, 0x8C, 0x79, 0x8D, 0x8C, 0x55, 0xD6, 0x1B, 0x8D, 0x8C, 0x79, 0x8D, 0x8C, -/* 00008DF0 */ 0x56, 0xD6, 0x1C, 0x8D, 0x8C, 0x79, 0x8D, 0x8C, 0x57, 0x94, 0x37, 0x8C, 0xCB, 0xC8, 0x00, 0x00, -/* 00008E00 */ 0x00, 0x03, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x00, 0xD6, 0x1D, 0x8D, 0x8C, 0x79, 0x8D, 0x8C, -/* 00008E10 */ 0x58, 0xD6, 0x1E, 0x8D, 0x8C, 0x79, 0x8D, 0x8C, 0x59, 0x94, 0x38, 0x8C, 0x91, 0x35, 0x8C, 0x02, -/* 00008E20 */ 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0xD8, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, -/* 00008E30 */ 0x8D, 0x00, 0x00, 0x00, 0x79, 0x0B, 0x8D, 0x5A, 0x79, 0x0E, 0x8D, 0x5B, 0x79, 0x10, 0x8D, 0x5C, -/* 00008E40 */ 0x79, 0x12, 0x8D, 0x5D, 0x79, 0x12, 0x8D, 0x5E, 0x5B, 0x01, 0x8D, 0x02, 0x00, 0x02, 0xEE, 0x02, -/* 00008E50 */ 0x8C, 0x00, 0x8C, 0x00, 0x02, 0x00, 0x94, 0x39, 0x8C, 0x91, 0x35, 0x8C, 0x02, 0x00, 0x07, 0x02, -/* 00008E60 */ 0x00, 0x5A, 0x00, 0x02, 0xCB, 0xF4, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, -/* 00008E70 */ 0x00, 0x79, 0x0B, 0x8D, 0x5F, 0x79, 0x0E, 0x8D, 0x60, 0x79, 0x10, 0x8D, 0x61, 0x79, 0x10, 0x8D, -/* 00008E80 */ 0x5E, 0x5B, 0x01, 0x8D, 0x03, 0x00, 0x02, 0xEE, 0x02, 0x8C, 0x00, 0x8C, 0x00, 0x03, 0x00, 0x94, -/* 00008E90 */ 0x3A, 0x8C, 0x91, 0x35, 0x8C, 0x02, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0x0C, 0x01, -/* 00008EA0 */ 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, 0x79, 0x0B, 0x8D, 0x5E, 0x79, 0x0B, -/* 00008EB0 */ 0x8D, 0x62, 0x79, 0x0E, 0x8D, 0x63, 0x79, 0x10, 0x8D, 0x64, 0x5B, 0x01, 0x8D, 0x04, 0x00, 0x02, -/* 00008EC0 */ 0xEE, 0x02, 0x8C, 0x00, 0x8C, 0x00, 0x04, 0x00, 0x94, 0x3B, 0x8C, 0x91, 0x35, 0x8C, 0x02, 0x00, -/* 00008ED0 */ 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0x24, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x8D, -/* 00008EE0 */ 0x00, 0x00, 0x00, 0x79, 0x0B, 0x8D, 0x5E, 0x79, 0x0B, 0x8D, 0x65, 0x79, 0x0E, 0x8D, 0x66, 0x79, -/* 00008EF0 */ 0x10, 0x8D, 0x67, 0x5B, 0x01, 0x8D, 0x05, 0x00, 0x02, 0xEE, 0x02, 0x8C, 0x00, 0x8C, 0x00, 0x05, -/* 00008F00 */ 0x00, 0x94, 0x3C, 0x8C, 0xD3, 0x1F, 0x8C, 0x94, 0x3D, 0x8C, 0x91, 0x33, 0x8C, 0x03, 0x00, 0x0E, -/* 00008F10 */ 0x45, 0x05, 0x8C, 0xDE, 0x00, 0x1A, 0x03, 0xB6, 0x8C, 0x00, 0x01, 0x53, 0x01, 0x2D, 0x73, 0x8C, -/* 00008F20 */ 0x93, 0x00, 0x02, 0x73, 0x01, 0x53, 0x01, 0x2F, 0x74, 0x8C, 0x93, 0x00, 0x03, 0x74, 0x4F, 0x8C, -/* 00008F30 */ 0x93, 0x00, 0x04, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x05, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x06, 0x8C, -/* 00008F40 */ 0x4F, 0x8C, 0x93, 0x00, 0x07, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x08, 0x8C, 0x4F, 0x8C, 0x93, 0x00, -/* 00008F50 */ 0x09, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x0A, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x0B, 0x8C, 0x4F, 0x8C, -/* 00008F60 */ 0x93, 0x00, 0x0C, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x0D, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x0E, 0x8C, -/* 00008F70 */ 0x4F, 0x8C, 0x93, 0x00, 0x0F, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x10, 0x8C, 0x4F, 0x8C, 0x93, 0x00, -/* 00008F80 */ 0x11, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x12, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x13, 0x8C, 0x4F, 0x8C, -/* 00008F90 */ 0x93, 0x00, 0x14, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x15, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x16, 0x8C, -/* 00008FA0 */ 0x4F, 0x8C, 0x93, 0x00, 0x17, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x18, 0x8C, 0x4F, 0x8C, 0x93, 0x00, -/* 00008FB0 */ 0x19, 0x8C, 0xA6, 0x8C, 0x93, 0x00, 0x04, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x20, 0x8C, -/* 00008FC0 */ 0x8D, 0x93, 0x00, 0x05, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x21, 0x8C, 0x8D, 0x94, 0x22, -/* 00008FD0 */ 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x22, 0x8C, 0x8D, 0x94, 0x23, 0x8C, 0xB6, 0x8D, 0x00, -/* 00008FE0 */ 0x01, 0x53, 0x01, 0x23, 0x8C, 0x8D, 0x93, 0x00, 0x06, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, -/* 00008FF0 */ 0x24, 0x8C, 0x8D, 0x93, 0x00, 0x07, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x25, 0x8C, 0x8D, -/* 00009000 */ 0x93, 0x00, 0x08, 0x8C, 0x8F, 0x00, 0x08, 0x8C, 0x04, 0x00, 0x93, 0x00, 0x09, 0x8C, 0xB6, 0x8D, -/* 00009010 */ 0x00, 0x01, 0x53, 0x01, 0x26, 0x8C, 0x8D, 0x93, 0x00, 0x0A, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, -/* 00009020 */ 0x01, 0x27, 0x8C, 0x8D, 0x93, 0x00, 0x0B, 0x8C, 0x91, 0x35, 0x8C, 0x02, 0x00, 0x07, 0x02, 0x00, -/* 00009030 */ 0x5A, 0x00, 0x02, 0xCB, 0x3C, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, -/* 00009040 */ 0xB6, 0x8F, 0x00, 0x01, 0x57, 0x01, 0x28, 0x8E, 0x8F, 0x8D, 0x79, 0x8E, 0x8D, 0x68, 0xB6, 0x8F, -/* 00009050 */ 0x00, 0x01, 0x57, 0x01, 0x29, 0x8E, 0x8F, 0x8D, 0x79, 0x8E, 0x8D, 0x69, 0xB6, 0x8F, 0x00, 0x01, -/* 00009060 */ 0x57, 0x01, 0x2A, 0x8E, 0x8F, 0x8D, 0x79, 0x8E, 0x8D, 0x6A, 0xB6, 0x8F, 0x00, 0x01, 0x57, 0x01, -/* 00009070 */ 0x2B, 0x8E, 0x8F, 0x8D, 0x79, 0x8E, 0x8D, 0x6B, 0xB6, 0x8F, 0x00, 0x01, 0x57, 0x01, 0x2C, 0x8E, -/* 00009080 */ 0x8F, 0x8D, 0x79, 0x8E, 0x8D, 0x6C, 0x5B, 0x01, 0x8D, 0x06, 0x00, 0x02, 0xEE, 0x02, 0x8C, 0x00, -/* 00009090 */ 0x8C, 0x00, 0x06, 0x00, 0x94, 0x24, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x2E, 0x8C, 0x8D, -/* 000090A0 */ 0x93, 0x00, 0x0C, 0x8C, 0xA6, 0x8C, 0x93, 0x00, 0x0D, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, -/* 000090B0 */ 0x30, 0x8C, 0x8D, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x02, 0x02, 0xEE, 0x01, 0x8C, 0x00, 0x8C, 0x00, -/* 000090C0 */ 0x07, 0x00, 0x93, 0x00, 0x0E, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x31, 0x8C, 0x8D, 0x93, -/* 000090D0 */ 0x00, 0x0F, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x32, 0x8C, 0x8D, 0x93, 0x00, 0x10, 0x8C, -/* 000090E0 */ 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x33, 0x8C, 0x8D, 0x93, 0x00, 0x11, 0x8C, 0xB6, 0x8D, 0x00, -/* 000090F0 */ 0x01, 0x53, 0x01, 0x34, 0x8C, 0x8D, 0x93, 0x00, 0x12, 0x8C, 0x8F, 0x00, 0x12, 0x8C, 0x05, 0x00, -/* 00009100 */ 0x93, 0x00, 0x13, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x35, 0x8C, 0x8D, 0x93, 0x00, 0x14, -/* 00009110 */ 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x36, 0x8C, 0x8D, 0x93, 0x00, 0x15, 0x8C, 0x91, 0x37, -/* 00009120 */ 0x8D, 0x06, 0x00, 0x6B, 0x8C, 0x8D, 0x6D, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x8D, 0x02, 0xF2, 0x01, -/* 00009130 */ 0x8C, 0x00, 0x8C, 0x00, 0x6D, 0x00, 0x00, 0x00, 0x08, 0x00, 0x93, 0x00, 0x16, 0x8C, 0x91, 0x03, -/* 00009140 */ 0x8D, 0x00, 0x00, 0x6B, 0x8C, 0x8D, 0x6E, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x8D, 0x8F, 0x00, 0x16, -/* 00009150 */ 0x8E, 0x07, 0x00, 0x5B, 0x01, 0x8E, 0x09, 0x00, 0xCB, 0x58, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, -/* 00009160 */ 0x00, 0x8E, 0x00, 0x00, 0x00, 0x79, 0x4A, 0x8E, 0x6F, 0x5B, 0x02, 0x8E, 0x09, 0x00, 0xF2, 0x03, -/* 00009170 */ 0xFF, 0x8C, 0x6E, 0x00, 0x00, 0x00, 0x09, 0x00, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x37, 0x8C, -/* 00009180 */ 0x8D, 0x93, 0x00, 0x17, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x38, 0x8C, 0x8D, 0x93, 0x00, -/* 00009190 */ 0x18, 0x8C, 0x91, 0x32, 0x8C, 0x08, 0x00, 0x14, 0x03, 0x00, 0x8C, 0x4B, 0x09, 0x04, 0x01, 0xDE, -/* 000091A0 */ 0x01, 0x03, 0x05, 0x4F, 0x8C, 0x93, 0x01, 0x02, 0x8C, 0x93, 0x01, 0x02, 0x4C, 0x91, 0x23, 0x8C, -/* 000091B0 */ 0x09, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x8F, 0x01, 0x02, 0x8D, 0x0A, 0x00, 0x5B, 0x01, -/* 000091C0 */ 0x8D, 0x0A, 0x00, 0xB6, 0x8E, 0x00, 0xB5, 0x01, 0x00, 0x00, 0x00, 0x8E, 0x8E, 0x01, 0x53, 0x01, -/* 000091D0 */ 0x39, 0x8D, 0x8E, 0x5B, 0x02, 0x8D, 0x0A, 0x00, 0x02, 0xEE, 0x03, 0x8C, 0x00, 0x8C, 0x00, 0x0A, -/* 000091E0 */ 0x00, 0x47, 0x7E, 0x8C, 0x91, 0x37, 0x8D, 0x06, 0x00, 0x6B, 0x8C, 0x8D, 0x70, 0x07, 0x03, 0x00, -/* 000091F0 */ 0x5A, 0x00, 0x8D, 0x5B, 0x01, 0x7E, 0x0B, 0x00, 0x8F, 0x00, 0x16, 0x8E, 0x07, 0x00, 0x5B, 0x02, -/* 00009200 */ 0x8E, 0x0B, 0x00, 0x02, 0xF2, 0x03, 0x8C, 0x00, 0x8C, 0x00, 0x70, 0x00, 0x00, 0x00, 0x0B, 0x00, -/* 00009210 */ 0x47, 0x7F, 0x8C, 0x91, 0x37, 0x8D, 0x06, 0x00, 0x6B, 0x8C, 0x8D, 0x71, 0x07, 0x04, 0x00, 0x5A, -/* 00009220 */ 0x00, 0x8D, 0x5B, 0x01, 0x7F, 0x0C, 0x00, 0x5B, 0x02, 0x4D, 0x0C, 0x00, 0xCB, 0x64, 0x01, 0x00, -/* 00009230 */ 0x00, 0x0A, 0x00, 0x00, 0x00, 0x8E, 0x00, 0x00, 0x00, 0x79, 0x4F, 0x8E, 0x72, 0x79, 0x51, 0x8E, -/* 00009240 */ 0x73, 0x79, 0x51, 0x8E, 0x74, 0x79, 0x03, 0x8E, 0x75, 0x5B, 0x03, 0x8E, 0x0C, 0x00, 0xF2, 0x04, -/* 00009250 */ 0xFF, 0x8C, 0x71, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x91, 0x37, 0x8D, 0x06, 0x00, 0x6B, 0x8C, 0x8D, -/* 00009260 */ 0x71, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x8D, 0x69, 0x8E, 0x00, 0x00, 0x00, 0x8E, 0x5B, 0x01, 0x8E, -/* 00009270 */ 0x0D, 0x00, 0x5B, 0x02, 0x4F, 0x0D, 0x00, 0xCB, 0x7C, 0x01, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, -/* 00009280 */ 0x8E, 0x00, 0x00, 0x00, 0x79, 0x7F, 0x8E, 0x72, 0x79, 0x03, 0x8E, 0x73, 0x79, 0x51, 0x8E, 0x74, -/* 00009290 */ 0x79, 0x03, 0x8E, 0x75, 0x5B, 0x03, 0x8E, 0x0D, 0x00, 0xF2, 0x04, 0xFF, 0x8C, 0x71, 0x00, 0x00, -/* 000092A0 */ 0x00, 0x0D, 0x00, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x3A, 0x8C, 0x8D, 0x93, 0x00, 0x19, 0x8C, -/* 000092B0 */ 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x3B, 0x8C, 0x8D, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x02, 0x02, -/* 000092C0 */ 0xEE, 0x01, 0x8C, 0x00, 0x8C, 0x00, 0x0E, 0x00, 0x47, 0x80, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, -/* 000092D0 */ 0x01, 0x3C, 0x8C, 0x8D, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x02, 0x02, 0xEE, 0x01, 0x8C, 0x00, 0x8C, -/* 000092E0 */ 0x00, 0x0F, 0x00, 0x47, 0x81, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x3D, 0x8C, 0x8D, 0x07, -/* 000092F0 */ 0x01, 0x00, 0x5A, 0x00, 0x02, 0x02, 0xEE, 0x01, 0x8C, 0x00, 0x8C, 0x00, 0x10, 0x00, 0x47, 0x82, -/* 00009300 */ 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x3E, 0x8C, 0x8D, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x02, -/* 00009310 */ 0x02, 0xEE, 0x01, 0x8C, 0x00, 0x8C, 0x00, 0x11, 0x00, 0x47, 0x83, 0x8C, 0x91, 0x32, 0x8C, 0x08, -/* 00009320 */ 0x00, 0x14, 0x03, 0x00, 0x8C, 0x4B, 0x09, 0x2C, 0x01, 0x91, 0x37, 0x8D, 0x06, 0x00, 0x6B, 0x8C, -/* 00009330 */ 0x8D, 0x71, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x8D, 0x69, 0x8E, 0x00, 0x00, 0x00, 0x8E, 0x5B, 0x01, -/* 00009340 */ 0x8E, 0x12, 0x00, 0x5B, 0x02, 0x54, 0x12, 0x00, 0xCB, 0x94, 0x01, 0x00, 0x00, 0x0C, 0x00, 0x00, -/* 00009350 */ 0x00, 0x8E, 0x00, 0x00, 0x00, 0x79, 0x80, 0x8E, 0x72, 0x79, 0x03, 0x8E, 0x73, 0x79, 0x51, 0x8E, -/* 00009360 */ 0x74, 0x79, 0x03, 0x8E, 0x75, 0x5B, 0x03, 0x8E, 0x12, 0x00, 0xF2, 0x04, 0xFF, 0x8C, 0x71, 0x00, -/* 00009370 */ 0x00, 0x00, 0x12, 0x00, 0x91, 0x37, 0x8D, 0x06, 0x00, 0x6B, 0x8C, 0x8D, 0x71, 0x07, 0x04, 0x00, -/* 00009380 */ 0x5A, 0x00, 0x8D, 0x69, 0x8E, 0x00, 0x00, 0x00, 0x8E, 0x5B, 0x01, 0x8E, 0x13, 0x00, 0x5B, 0x02, -/* 00009390 */ 0x55, 0x13, 0x00, 0xCB, 0xAC, 0x01, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x8E, 0x00, 0x00, 0x00, -/* 000093A0 */ 0x79, 0x81, 0x8E, 0x72, 0x79, 0x03, 0x8E, 0x73, 0x79, 0x51, 0x8E, 0x74, 0x79, 0x03, 0x8E, 0x75, -/* 000093B0 */ 0x5B, 0x03, 0x8E, 0x13, 0x00, 0xF2, 0x04, 0xFF, 0x8C, 0x71, 0x00, 0x00, 0x00, 0x13, 0x00, 0x91, -/* 000093C0 */ 0x37, 0x8D, 0x06, 0x00, 0x6B, 0x8C, 0x8D, 0x71, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x8D, 0x69, 0x8E, -/* 000093D0 */ 0x00, 0x00, 0x00, 0x8E, 0x5B, 0x01, 0x8E, 0x14, 0x00, 0x5B, 0x02, 0x56, 0x14, 0x00, 0xCB, 0xC4, -/* 000093E0 */ 0x01, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x8E, 0x00, 0x00, 0x00, 0x79, 0x82, 0x8E, 0x72, 0x79, -/* 000093F0 */ 0x03, 0x8E, 0x73, 0x79, 0x51, 0x8E, 0x74, 0x79, 0x03, 0x8E, 0x75, 0x5B, 0x03, 0x8E, 0x14, 0x00, -/* 00009400 */ 0xF2, 0x04, 0xFF, 0x8C, 0x71, 0x00, 0x00, 0x00, 0x14, 0x00, 0x91, 0x37, 0x8D, 0x06, 0x00, 0x6B, -/* 00009410 */ 0x8C, 0x8D, 0x71, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x8D, 0x69, 0x8E, 0x00, 0x00, 0x00, 0x8E, 0x5B, -/* 00009420 */ 0x01, 0x8E, 0x15, 0x00, 0x5B, 0x02, 0x57, 0x15, 0x00, 0xCB, 0xDC, 0x01, 0x00, 0x00, 0x0F, 0x00, -/* 00009430 */ 0x00, 0x00, 0x8E, 0x00, 0x00, 0x00, 0x79, 0x83, 0x8E, 0x72, 0x79, 0x03, 0x8E, 0x73, 0x79, 0x51, -/* 00009440 */ 0x8E, 0x74, 0x79, 0x03, 0x8E, 0x75, 0x5B, 0x03, 0x8E, 0x15, 0x00, 0xF2, 0x04, 0xFF, 0x8C, 0x71, -/* 00009450 */ 0x00, 0x00, 0x00, 0x15, 0x00, 0x09, 0x69, 0x08, 0xDE, 0x00, 0x1A, 0x07, 0xB6, 0x8C, 0x00, 0x01, -/* 00009460 */ 0x53, 0x01, 0x4C, 0x75, 0x8C, 0x93, 0x00, 0x02, 0x75, 0x01, 0x53, 0x01, 0x4D, 0x76, 0x8C, 0x93, -/* 00009470 */ 0x00, 0x03, 0x76, 0x01, 0x53, 0x01, 0x4E, 0x77, 0x8C, 0x93, 0x00, 0x04, 0x77, 0x01, 0x53, 0x01, -/* 00009480 */ 0x4F, 0x78, 0x8C, 0x93, 0x00, 0x05, 0x78, 0x01, 0x53, 0x01, 0x50, 0x79, 0x8C, 0x93, 0x00, 0x06, -/* 00009490 */ 0x79, 0x01, 0x53, 0x01, 0x51, 0x7A, 0x8C, 0x93, 0x00, 0x07, 0x7A, 0x01, 0x53, 0x01, 0x52, 0x7B, -/* 000094A0 */ 0x8C, 0x93, 0x00, 0x08, 0x7B, 0x4F, 0x8C, 0x93, 0x00, 0x09, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x0A, -/* 000094B0 */ 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x0B, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x0C, 0x8C, 0x4F, 0x8C, 0x93, -/* 000094C0 */ 0x00, 0x0D, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x0E, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x0F, 0x8C, 0x4F, -/* 000094D0 */ 0x8C, 0x93, 0x00, 0x10, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x11, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x12, -/* 000094E0 */ 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x13, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x14, 0x8C, 0x4F, 0x8C, 0x93, -/* 000094F0 */ 0x00, 0x15, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x16, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x17, 0x8C, 0x4F, -/* 00009500 */ 0x8C, 0x93, 0x00, 0x18, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x19, 0x8C, 0x91, 0x03, 0x8C, 0x00, 0x00, -/* 00009510 */ 0x60, 0x8C, 0x8C, 0x76, 0xA6, 0x8D, 0x14, 0x03, 0x00, 0x8C, 0x8D, 0x09, 0x1A, 0x00, 0x91, 0x03, -/* 00009520 */ 0x8C, 0x00, 0x00, 0x91, 0x02, 0x8D, 0x0B, 0x00, 0x07, 0x01, 0x00, 0x02, 0xC2, 0x01, 0x8D, 0x00, -/* 00009530 */ 0x8D, 0x00, 0x16, 0x00, 0x75, 0x8D, 0x8C, 0x77, 0x91, 0x03, 0x8C, 0x00, 0x00, 0x60, 0x8C, 0x8C, -/* 00009540 */ 0x78, 0xA6, 0x8D, 0x14, 0x03, 0x00, 0x8C, 0x8D, 0x09, 0x1A, 0x00, 0x91, 0x03, 0x8C, 0x00, 0x00, -/* 00009550 */ 0x91, 0x02, 0x8D, 0x0B, 0x00, 0x07, 0x01, 0x00, 0x02, 0xC2, 0x01, 0x8D, 0x00, 0x8D, 0x00, 0x17, -/* 00009560 */ 0x00, 0x75, 0x8D, 0x8C, 0x79, 0xA6, 0x8C, 0x93, 0x00, 0x09, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, -/* 00009570 */ 0x01, 0x3F, 0x8C, 0x8D, 0x93, 0x00, 0x0A, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x40, 0x8C, -/* 00009580 */ 0x8D, 0x93, 0x00, 0x0B, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x41, 0x8C, 0x8D, 0x93, 0x00, -/* 00009590 */ 0x0C, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x42, 0x8C, 0x8D, 0x94, 0x25, 0x8C, 0xB6, 0x8D, -/* 000095A0 */ 0x00, 0x01, 0x53, 0x01, 0x43, 0x8C, 0x8D, 0x94, 0x22, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, -/* 000095B0 */ 0x44, 0x8C, 0x8D, 0x94, 0x23, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x45, 0x8C, 0x8D, 0x94, -/* 000095C0 */ 0x26, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x46, 0x8C, 0x8D, 0x94, 0x27, 0x8C, 0xB6, 0x8D, -/* 000095D0 */ 0x00, 0x01, 0x53, 0x01, 0x47, 0x8C, 0x8D, 0x94, 0x28, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, -/* 000095E0 */ 0x48, 0x8C, 0x8D, 0x94, 0x29, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x49, 0x8C, 0x8D, 0x94, -/* 000095F0 */ 0x2A, 0x8C, 0xA6, 0x8C, 0x93, 0x00, 0x0D, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x4A, 0x8C, -/* 00009600 */ 0x8D, 0x94, 0x2B, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x4B, 0x8C, 0x8D, 0x07, 0x01, 0x00, -/* 00009610 */ 0x5A, 0x00, 0x02, 0x02, 0xEE, 0x01, 0x8C, 0x00, 0x8C, 0x00, 0x18, 0x00, 0x94, 0x24, 0x8C, 0xA6, -/* 00009620 */ 0x8C, 0x93, 0x00, 0x0E, 0x8C, 0xA6, 0x8C, 0x93, 0x00, 0x0F, 0x8C, 0xA6, 0x8C, 0x93, 0x00, 0x10, -/* 00009630 */ 0x8C, 0xA6, 0x8C, 0x93, 0x00, 0x11, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x53, 0x8C, 0x8D, -/* 00009640 */ 0x94, 0x2C, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x54, 0x8C, 0x8D, 0x94, 0x2D, 0x8C, 0xB6, -/* 00009650 */ 0x8D, 0x00, 0x01, 0x53, 0x01, 0x55, 0x8C, 0x8D, 0x94, 0x2E, 0x8C, 0x91, 0x04, 0x8C, 0x01, 0x00, -/* 00009660 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0xCA, 0x8D, 0x5B, 0x01, 0x8D, 0x19, 0x00, 0x5B, 0x02, 0x09, -/* 00009670 */ 0x19, 0x00, 0x02, 0xEE, 0x03, 0x8C, 0x00, 0x8C, 0x00, 0x19, 0x00, 0x47, 0x84, 0x8C, 0x91, 0x03, -/* 00009680 */ 0x8D, 0x00, 0x00, 0x6B, 0x8C, 0x8D, 0x6E, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x8D, 0x5B, 0x01, 0x84, -/* 00009690 */ 0x1A, 0x00, 0x91, 0x04, 0x8E, 0x01, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0xF4, 0x01, -/* 000096A0 */ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x8F, 0x00, 0x00, 0x00, 0x79, 0x4A, 0x8F, 0x7A, 0x5B, 0x01, -/* 000096B0 */ 0x8F, 0x1B, 0x00, 0x5B, 0x02, 0x09, 0x1B, 0x00, 0x02, 0xEE, 0x03, 0x8E, 0x00, 0x8E, 0x00, 0x1B, -/* 000096C0 */ 0x00, 0x5B, 0x02, 0x8E, 0x1A, 0x00, 0xF2, 0x03, 0xFF, 0x8C, 0x6E, 0x00, 0x00, 0x00, 0x1A, 0x00, -/* 000096D0 */ 0x93, 0x00, 0x12, 0x58, 0x91, 0x06, 0x8C, 0x0C, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x91, -/* 000096E0 */ 0x1A, 0x8D, 0x0D, 0x00, 0x5B, 0x01, 0x8D, 0x1C, 0x00, 0x91, 0x23, 0x8D, 0x09, 0x00, 0x07, 0x03, -/* 000096F0 */ 0x00, 0x5A, 0x00, 0x02, 0x8F, 0x00, 0x12, 0x8E, 0x0E, 0x00, 0x5B, 0x01, 0x8E, 0x1D, 0x00, 0xB6, -/* 00009700 */ 0x8F, 0x00, 0x01, 0x53, 0x01, 0x56, 0x8E, 0x8F, 0x5B, 0x02, 0x8E, 0x1D, 0x00, 0x02, 0xEE, 0x03, -/* 00009710 */ 0x8D, 0x00, 0x8D, 0x00, 0x1D, 0x00, 0x5B, 0x02, 0x8D, 0x1C, 0x00, 0x5B, 0x03, 0x84, 0x1C, 0x00, -/* 00009720 */ 0x02, 0xEE, 0x04, 0x8C, 0x00, 0x8C, 0x00, 0x1C, 0x00, 0x93, 0x00, 0x13, 0x8C, 0x93, 0x00, 0x14, -/* 00009730 */ 0x59, 0x91, 0x06, 0x8C, 0x0C, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x91, 0x1A, 0x8D, 0x0D, -/* 00009740 */ 0x00, 0x5B, 0x01, 0x8D, 0x1E, 0x00, 0x91, 0x23, 0x8D, 0x09, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, -/* 00009750 */ 0x02, 0x8F, 0x00, 0x14, 0x8E, 0x0F, 0x00, 0x5B, 0x01, 0x8E, 0x1F, 0x00, 0xB6, 0x8F, 0x00, 0x01, -/* 00009760 */ 0x53, 0x01, 0x57, 0x8E, 0x8F, 0x5B, 0x02, 0x8E, 0x1F, 0x00, 0x02, 0xEE, 0x03, 0x8D, 0x00, 0x8D, -/* 00009770 */ 0x00, 0x1F, 0x00, 0x5B, 0x02, 0x8D, 0x1E, 0x00, 0x5B, 0x03, 0x84, 0x1E, 0x00, 0x02, 0xEE, 0x04, -/* 00009780 */ 0x8C, 0x00, 0x8C, 0x00, 0x1E, 0x00, 0x93, 0x00, 0x15, 0x8C, 0x93, 0x00, 0x16, 0x5A, 0x91, 0x06, -/* 00009790 */ 0x8C, 0x0C, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x91, 0x1A, 0x8D, 0x0D, 0x00, 0x5B, 0x01, -/* 000097A0 */ 0x8D, 0x20, 0x00, 0x91, 0x23, 0x8D, 0x09, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x8F, 0x00, -/* 000097B0 */ 0x16, 0x8E, 0x10, 0x00, 0x5B, 0x01, 0x8E, 0x21, 0x00, 0xB6, 0x8F, 0x00, 0x01, 0x53, 0x01, 0x58, -/* 000097C0 */ 0x8E, 0x8F, 0x5B, 0x02, 0x8E, 0x21, 0x00, 0x02, 0xEE, 0x03, 0x8D, 0x00, 0x8D, 0x00, 0x21, 0x00, -/* 000097D0 */ 0x5B, 0x02, 0x8D, 0x20, 0x00, 0x5B, 0x03, 0x84, 0x20, 0x00, 0x02, 0xEE, 0x04, 0x8C, 0x00, 0x8C, -/* 000097E0 */ 0x00, 0x20, 0x00, 0x93, 0x00, 0x17, 0x8C, 0x93, 0x00, 0x18, 0x4C, 0x91, 0x06, 0x8C, 0x0C, 0x00, -/* 000097F0 */ 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x91, 0x1A, 0x8D, 0x0D, 0x00, 0x5B, 0x01, 0x8D, 0x22, 0x00, -/* 00009800 */ 0x91, 0x23, 0x8D, 0x09, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x8F, 0x00, 0x18, 0x8E, 0x11, -/* 00009810 */ 0x00, 0x5B, 0x01, 0x8E, 0x23, 0x00, 0xB6, 0x8F, 0x00, 0x01, 0x53, 0x01, 0x59, 0x8E, 0x8F, 0x5B, -/* 00009820 */ 0x02, 0x8E, 0x23, 0x00, 0x02, 0xEE, 0x03, 0x8D, 0x00, 0x8D, 0x00, 0x23, 0x00, 0x5B, 0x02, 0x8D, -/* 00009830 */ 0x22, 0x00, 0x5B, 0x03, 0x84, 0x22, 0x00, 0x02, 0xEE, 0x04, 0x8C, 0x00, 0x8C, 0x00, 0x22, 0x00, -/* 00009840 */ 0x47, 0x85, 0x8C, 0x91, 0x15, 0x8C, 0x12, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8F, 0x00, -/* 00009850 */ 0x13, 0x8D, 0x13, 0x00, 0x5B, 0x01, 0x8D, 0x24, 0x00, 0x5B, 0x02, 0x4D, 0x24, 0x00, 0xCB, 0x00, -/* 00009860 */ 0x02, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, 0x79, 0x5B, 0x8D, 0x7B, 0x5B, -/* 00009870 */ 0x03, 0x8D, 0x24, 0x00, 0xEE, 0x04, 0xFF, 0x8C, 0x24, 0x00, 0x91, 0x15, 0x8C, 0x12, 0x00, 0x07, -/* 00009880 */ 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8F, 0x00, 0x15, 0x8D, 0x14, 0x00, 0x5B, 0x01, 0x8D, 0x25, 0x00, -/* 00009890 */ 0x5B, 0x02, 0x4D, 0x25, 0x00, 0xCB, 0x0C, 0x02, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x8D, 0x00, -/* 000098A0 */ 0x00, 0x00, 0x79, 0x5B, 0x8D, 0x7B, 0x5B, 0x03, 0x8D, 0x25, 0x00, 0xEE, 0x04, 0xFF, 0x8C, 0x25, -/* 000098B0 */ 0x00, 0x91, 0x15, 0x8C, 0x12, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8F, 0x00, 0x17, 0x8D, -/* 000098C0 */ 0x15, 0x00, 0x5B, 0x01, 0x8D, 0x26, 0x00, 0x5B, 0x02, 0x4D, 0x26, 0x00, 0xCB, 0x18, 0x02, 0x00, -/* 000098D0 */ 0x00, 0x13, 0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, 0x79, 0x5B, 0x8D, 0x7B, 0x5B, 0x03, 0x8D, -/* 000098E0 */ 0x26, 0x00, 0xEE, 0x04, 0xFF, 0x8C, 0x26, 0x00, 0x91, 0x15, 0x8C, 0x12, 0x00, 0x07, 0x04, 0x00, -/* 000098F0 */ 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x85, 0x27, 0x00, 0x5B, 0x02, 0x4D, 0x27, 0x00, 0xCB, 0x24, 0x02, -/* 00009900 */ 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, 0x79, 0x4F, 0x8D, 0x7B, 0x5B, 0x03, -/* 00009910 */ 0x8D, 0x27, 0x00, 0xEE, 0x04, 0xFF, 0x8C, 0x27, 0x00, 0x91, 0x04, 0x8C, 0x01, 0x00, 0x07, 0x03, -/* 00009920 */ 0x00, 0x5A, 0x00, 0x02, 0xCB, 0x30, 0x02, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, -/* 00009930 */ 0x00, 0x91, 0x04, 0x8E, 0x01, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0x5C, 0x02, 0x00, -/* 00009940 */ 0x00, 0x16, 0x00, 0x00, 0x00, 0x8F, 0x00, 0x00, 0x00, 0x79, 0x5E, 0x8F, 0x7C, 0x5B, 0x01, 0x8F, -/* 00009950 */ 0x29, 0x00, 0x5B, 0x02, 0x09, 0x29, 0x00, 0x02, 0xEE, 0x03, 0x8E, 0x00, 0x8E, 0x00, 0x29, 0x00, -/* 00009960 */ 0x79, 0x8E, 0x8D, 0x7D, 0x91, 0x04, 0x8E, 0x01, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0xCB, -/* 00009970 */ 0x68, 0x02, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x8F, 0x00, 0x00, 0x00, 0x79, 0x5E, 0x8F, 0x7C, -/* 00009980 */ 0x5B, 0x01, 0x8F, 0x2A, 0x00, 0x5B, 0x02, 0x09, 0x2A, 0x00, 0x02, 0xEE, 0x03, 0x8E, 0x00, 0x8E, -/* 00009990 */ 0x00, 0x2A, 0x00, 0x79, 0x8E, 0x8D, 0x7E, 0x91, 0x04, 0x8E, 0x01, 0x00, 0x07, 0x03, 0x00, 0x5A, -/* 000099A0 */ 0x00, 0x02, 0xCB, 0x74, 0x02, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x8F, 0x00, 0x00, 0x00, 0x79, -/* 000099B0 */ 0x62, 0x8F, 0x7F, 0x5B, 0x01, 0x8F, 0x2B, 0x00, 0x5B, 0x02, 0x09, 0x2B, 0x00, 0x02, 0xEE, 0x03, -/* 000099C0 */ 0x8E, 0x00, 0x8E, 0x00, 0x2B, 0x00, 0x79, 0x8E, 0x8D, 0x80, 0x91, 0x04, 0x8E, 0x01, 0x00, 0x07, -/* 000099D0 */ 0x03, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0x80, 0x02, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x8F, 0x00, -/* 000099E0 */ 0x00, 0x00, 0x79, 0x65, 0x8F, 0x81, 0x5B, 0x01, 0x8F, 0x2C, 0x00, 0x5B, 0x02, 0x09, 0x2C, 0x00, -/* 000099F0 */ 0x02, 0xEE, 0x03, 0x8E, 0x00, 0x8E, 0x00, 0x2C, 0x00, 0x79, 0x8E, 0x8D, 0x82, 0x91, 0x04, 0x8E, -/* 00009A00 */ 0x01, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0x8C, 0x02, 0x00, 0x00, 0x1A, 0x00, 0x00, -/* 00009A10 */ 0x00, 0x8F, 0x00, 0x00, 0x00, 0x79, 0x68, 0x8F, 0x83, 0x79, 0x65, 0x8F, 0x81, 0x79, 0x6A, 0x8F, -/* 00009A20 */ 0x84, 0x5B, 0x01, 0x8F, 0x2D, 0x00, 0x5B, 0x02, 0x09, 0x2D, 0x00, 0x02, 0xEE, 0x03, 0x8E, 0x00, -/* 00009A30 */ 0x8E, 0x00, 0x2D, 0x00, 0x79, 0x8E, 0x8D, 0x85, 0x91, 0x04, 0x8E, 0x01, 0x00, 0x07, 0x03, 0x00, -/* 00009A40 */ 0x5A, 0x00, 0x02, 0xCB, 0xA0, 0x02, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00, 0x8F, 0x00, 0x00, 0x00, -/* 00009A50 */ 0x79, 0x65, 0x8F, 0x81, 0x79, 0x6A, 0x8F, 0x84, 0x5B, 0x01, 0x8F, 0x2E, 0x00, 0x5B, 0x02, 0x09, -/* 00009A60 */ 0x2E, 0x00, 0x02, 0xEE, 0x03, 0x8E, 0x00, 0x8E, 0x00, 0x2E, 0x00, 0x79, 0x8E, 0x8D, 0x86, 0x91, -/* 00009A70 */ 0x04, 0x8E, 0x01, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0xB0, 0x02, 0x00, 0x00, 0x1C, -/* 00009A80 */ 0x00, 0x00, 0x00, 0x8F, 0x00, 0x00, 0x00, 0x79, 0x65, 0x8F, 0x81, 0x79, 0x6A, 0x8F, 0x84, 0x5B, -/* 00009A90 */ 0x01, 0x8F, 0x2F, 0x00, 0x5B, 0x02, 0x09, 0x2F, 0x00, 0x02, 0xEE, 0x03, 0x8E, 0x00, 0x8E, 0x00, -/* 00009AA0 */ 0x2F, 0x00, 0x79, 0x8E, 0x8D, 0x87, 0x91, 0x04, 0x8E, 0x01, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, -/* 00009AB0 */ 0x02, 0xCB, 0xC0, 0x02, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0x8F, 0x00, 0x00, 0x00, 0x79, 0x69, -/* 00009AC0 */ 0x8F, 0x84, 0x79, 0x6A, 0x8F, 0x88, 0x5B, 0x01, 0x8F, 0x30, 0x00, 0x5B, 0x02, 0x09, 0x30, 0x00, -/* 00009AD0 */ 0x02, 0xEE, 0x03, 0x8E, 0x00, 0x8E, 0x00, 0x30, 0x00, 0x79, 0x8E, 0x8D, 0x89, 0x91, 0x04, 0x8E, -/* 00009AE0 */ 0x01, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0xD0, 0x02, 0x00, 0x00, 0x1E, 0x00, 0x00, -/* 00009AF0 */ 0x00, 0x8F, 0x00, 0x00, 0x00, 0x79, 0x69, 0x8F, 0x84, 0x79, 0x6A, 0x8F, 0x88, 0x5B, 0x01, 0x8F, -/* 00009B00 */ 0x31, 0x00, 0x5B, 0x02, 0x09, 0x31, 0x00, 0x02, 0xEE, 0x03, 0x8E, 0x00, 0x8E, 0x00, 0x31, 0x00, -/* 00009B10 */ 0x79, 0x8E, 0x8D, 0x8A, 0x5B, 0x01, 0x8D, 0x28, 0x00, 0x5B, 0x02, 0x09, 0x28, 0x00, 0x02, 0xEE, -/* 00009B20 */ 0x03, 0x8C, 0x00, 0x8C, 0x00, 0x28, 0x00, 0x94, 0x2F, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, -/* 00009B30 */ 0x5A, 0x8C, 0x8D, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x02, 0x02, 0xEE, 0x01, 0x8C, 0x00, 0x8C, 0x00, -/* 00009B40 */ 0x32, 0x00, 0x94, 0x30, 0x8C, 0xA6, 0x8C, 0x93, 0x00, 0x19, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, -/* 00009B50 */ 0x01, 0x5B, 0x8C, 0x8D, 0x94, 0x31, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x5C, 0x8C, 0x8D, -/* 00009B60 */ 0x07, 0x01, 0x00, 0x5A, 0x00, 0x02, 0x02, 0xEE, 0x01, 0x8C, 0x00, 0x8C, 0x00, 0x33, 0x00, 0x47, -/* 00009B70 */ 0x86, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x5D, 0x8C, 0x8D, 0x07, 0x01, 0x00, 0x5A, 0x00, -/* 00009B80 */ 0x02, 0x02, 0xEE, 0x01, 0x8C, 0x00, 0x8C, 0x00, 0x34, 0x00, 0x47, 0x81, 0x8C, 0xB6, 0x8D, 0x00, -/* 00009B90 */ 0x01, 0x53, 0x01, 0x5E, 0x8C, 0x8D, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x02, 0x02, 0xEE, 0x01, 0x8C, -/* 00009BA0 */ 0x00, 0x8C, 0x00, 0x35, 0x00, 0x47, 0x82, 0x8C, 0x91, 0x32, 0x8C, 0x08, 0x00, 0x14, 0x03, 0x00, -/* 00009BB0 */ 0x8C, 0x4B, 0x09, 0x0C, 0x01, 0x91, 0x15, 0x8C, 0x12, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, -/* 00009BC0 */ 0x69, 0x8E, 0x00, 0x00, 0x00, 0x8D, 0x5B, 0x01, 0x8D, 0x36, 0x00, 0x5B, 0x02, 0x54, 0x36, 0x00, -/* 00009BD0 */ 0xCB, 0xE0, 0x02, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, 0x79, 0x86, 0x8D, -/* 00009BE0 */ 0x7B, 0x79, 0x03, 0x8D, 0x8B, 0x79, 0x51, 0x8D, 0x8C, 0x79, 0x03, 0x8D, 0x8D, 0x5B, 0x03, 0x8D, -/* 00009BF0 */ 0x36, 0x00, 0xEE, 0x04, 0xFF, 0x8C, 0x36, 0x00, 0x91, 0x15, 0x8C, 0x12, 0x00, 0x07, 0x04, 0x00, -/* 00009C00 */ 0x5A, 0x00, 0x02, 0x69, 0x8E, 0x00, 0x00, 0x00, 0x8D, 0x5B, 0x01, 0x8D, 0x37, 0x00, 0x5B, 0x02, -/* 00009C10 */ 0x55, 0x37, 0x00, 0xCB, 0xF8, 0x02, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, -/* 00009C20 */ 0x79, 0x81, 0x8D, 0x7B, 0x79, 0x03, 0x8D, 0x8B, 0x79, 0x51, 0x8D, 0x8C, 0x79, 0x03, 0x8D, 0x8D, -/* 00009C30 */ 0x5B, 0x03, 0x8D, 0x37, 0x00, 0xEE, 0x04, 0xFF, 0x8C, 0x37, 0x00, 0x91, 0x15, 0x8C, 0x12, 0x00, -/* 00009C40 */ 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x69, 0x8E, 0x00, 0x00, 0x00, 0x8D, 0x5B, 0x01, 0x8D, 0x38, -/* 00009C50 */ 0x00, 0x5B, 0x02, 0x56, 0x38, 0x00, 0xCB, 0x10, 0x03, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x8D, -/* 00009C60 */ 0x00, 0x00, 0x00, 0x79, 0x82, 0x8D, 0x7B, 0x79, 0x03, 0x8D, 0x8B, 0x79, 0x51, 0x8D, 0x8C, 0x79, -/* 00009C70 */ 0x03, 0x8D, 0x8D, 0x5B, 0x03, 0x8D, 0x38, 0x00, 0xEE, 0x04, 0xFF, 0x8C, 0x38, 0x00, 0x91, 0x15, -/* 00009C80 */ 0x8C, 0x12, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x69, 0x8E, 0x00, 0x00, 0x00, 0x8D, 0x5B, -/* 00009C90 */ 0x01, 0x8D, 0x39, 0x00, 0x5B, 0x02, 0x4F, 0x39, 0x00, 0xCB, 0x28, 0x03, 0x00, 0x00, 0x22, 0x00, -/* 00009CA0 */ 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, 0x79, 0x85, 0x8D, 0x7B, 0x79, 0x03, 0x8D, 0x8B, 0x79, 0x51, -/* 00009CB0 */ 0x8D, 0x8C, 0x79, 0x03, 0x8D, 0x8D, 0x5B, 0x03, 0x8D, 0x39, 0x00, 0xEE, 0x04, 0xFF, 0x8C, 0x39, -/* 00009CC0 */ 0x00, 0xA6, 0x00, 0x24, 0x00, 0x23, 0xFE, 0x40, 0x03, 0x00, 0x28, 0x03, 0x00, 0x00, 0x03, 0x04, -/* 00009CD0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, -/* 00009CE0 */ 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x10, 0x03, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, -/* 00009CF0 */ 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, -/* 00009D00 */ 0x00, 0x00, 0xF8, 0x02, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, -/* 00009D10 */ 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0xE0, 0x02, -/* 00009D20 */ 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, -/* 00009D30 */ 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0xD0, 0x02, 0x00, 0x00, 0x03, 0x02, -/* 00009D40 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5A, 0x03, 0x00, 0x00, 0x5F, 0x03, 0x00, 0x00, 0xC0, 0x02, -/* 00009D50 */ 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5A, 0x03, 0x00, 0x00, 0x5F, 0x03, -/* 00009D60 */ 0x00, 0x00, 0xB0, 0x02, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x03, -/* 00009D70 */ 0x00, 0x00, 0x5A, 0x03, 0x00, 0x00, 0xA0, 0x02, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, -/* 00009D80 */ 0x00, 0x00, 0x55, 0x03, 0x00, 0x00, 0x5A, 0x03, 0x00, 0x00, 0x8C, 0x02, 0x00, 0x00, 0x03, 0x03, -/* 00009D90 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x03, 0x00, 0x00, 0x55, 0x03, 0x00, 0x00, 0x5A, 0x03, -/* 00009DA0 */ 0x00, 0x00, 0x80, 0x02, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x03, -/* 00009DB0 */ 0x00, 0x00, 0x74, 0x02, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x03, -/* 00009DC0 */ 0x00, 0x00, 0x68, 0x02, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4E, 0x03, -/* 00009DD0 */ 0x00, 0x00, 0x5C, 0x02, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4E, 0x03, -/* 00009DE0 */ 0x00, 0x00, 0x30, 0x02, 0x00, 0x00, 0x03, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x03, -/* 00009DF0 */ 0x00, 0x00, 0x50, 0x03, 0x00, 0x00, 0x51, 0x03, 0x00, 0x00, 0x54, 0x03, 0x00, 0x00, 0x57, 0x03, -/* 00009E00 */ 0x00, 0x00, 0x5C, 0x03, 0x00, 0x00, 0x5D, 0x03, 0x00, 0x00, 0x5E, 0x03, 0x00, 0x00, 0x60, 0x03, -/* 00009E10 */ 0x00, 0x00, 0x24, 0x02, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, -/* 00009E20 */ 0x00, 0x00, 0x18, 0x02, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, -/* 00009E30 */ 0x00, 0x00, 0x0C, 0x02, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, -/* 00009E40 */ 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, -/* 00009E50 */ 0x00, 0x00, 0xF4, 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0x01, -/* 00009E60 */ 0x00, 0x00, 0xDC, 0x01, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, -/* 00009E70 */ 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0xC4, 0x01, -/* 00009E80 */ 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, -/* 00009E90 */ 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0xAC, 0x01, 0x00, 0x00, 0x03, 0x04, -/* 00009EA0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, -/* 00009EB0 */ 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, -/* 00009EC0 */ 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, -/* 00009ED0 */ 0x00, 0x00, 0x7C, 0x01, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, -/* 00009EE0 */ 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x64, 0x01, -/* 00009EF0 */ 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, -/* 00009F00 */ 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x58, 0x01, 0x00, 0x00, 0x03, 0x01, -/* 00009F10 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0x01, 0x00, 0x00, 0x3C, 0x01, 0x00, 0x00, 0x03, 0x05, -/* 00009F20 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x03, 0x00, 0x00, 0x37, 0x03, 0x00, 0x00, 0x38, 0x03, -/* 00009F30 */ 0x00, 0x00, 0x39, 0x03, 0x00, 0x00, 0x3A, 0x03, 0x00, 0x00, 0x24, 0x01, 0x00, 0x00, 0x03, 0x04, -/* 00009F40 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2C, 0x03, 0x00, 0x00, 0x33, 0x03, 0x00, 0x00, 0x34, 0x03, -/* 00009F50 */ 0x00, 0x00, 0x35, 0x03, 0x00, 0x00, 0x0C, 0x01, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, -/* 00009F60 */ 0x00, 0x00, 0x2C, 0x03, 0x00, 0x00, 0x30, 0x03, 0x00, 0x00, 0x31, 0x03, 0x00, 0x00, 0x32, 0x03, -/* 00009F70 */ 0x00, 0x00, 0xF4, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x03, -/* 00009F80 */ 0x00, 0x00, 0x2E, 0x03, 0x00, 0x00, 0x7B, 0x00, 0x00, 0x00, 0x2C, 0x03, 0x00, 0x00, 0xD8, 0x00, -/* 00009F90 */ 0x00, 0x00, 0x03, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x03, 0x00, 0x00, 0x29, 0x03, -/* 00009FA0 */ 0x00, 0x00, 0x2A, 0x03, 0x00, 0x00, 0x2B, 0x03, 0x00, 0x00, 0x2C, 0x03, 0x00, 0x00, 0xC8, 0x00, -/* 00009FB0 */ 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0x03, 0x00, 0x00, 0x27, 0x03, -/* 00009FC0 */ 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x03, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x69, 0x01, -/* 00009FD0 */ 0x00, 0x00, 0x63, 0x01, 0x00, 0x00, 0x22, 0x01, 0x00, 0x00, 0x45, 0x01, 0x00, 0x00, 0x4C, 0x01, -/* 00009FE0 */ 0x00, 0x00, 0x0E, 0x03, 0x00, 0x00, 0xF1, 0x00, 0x00, 0x00, 0x29, 0x01, 0x00, 0x00, 0x86, 0x00, -/* 00009FF0 */ 0x00, 0x00, 0x18, 0x01, 0x00, 0x00, 0xBC, 0x00, 0x00, 0x00, 0x14, 0x03, 0x00, 0x00, 0xC5, 0x00, -/* 0000A000 */ 0x00, 0x00, 0x1C, 0x01, 0x00, 0x00, 0x3F, 0x01, 0x00, 0x00, 0x5D, 0x00, 0x00, 0x00, 0x7E, 0x00, -/* 0000A010 */ 0x00, 0x00, 0x1A, 0x03, 0x00, 0x00, 0xBF, 0x00, 0x00, 0x00, 0xA7, 0x00, 0x00, 0x00, 0x88, 0x01, -/* 0000A020 */ 0x00, 0x00, 0xB0, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x86, 0x01, 0x00, 0x00, 0x1B, 0x00, -/* 0000A030 */ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xEE, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0xB1, 0x00, -/* 0000A040 */ 0x00, 0x00, 0xB4, 0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, 0x4D, 0x00, 0x00, 0x00, 0x48, 0x00, -/* 0000A050 */ 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, -/* 0000A060 */ 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x04, 0x03, 0x00, 0x00, 0x05, 0x03, 0x00, 0x00, 0x06, 0x03, -/* 0000A070 */ 0x00, 0x00, 0x07, 0x03, 0x00, 0x00, 0x08, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, -/* 0000A080 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xEE, 0x00, -/* 0000A090 */ 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0xAB, 0xFE, 0x61, 0x03, 0xFE, 0xFE, 0x01, 0xFE, 0xFE, 0x01, -/* 0000A0A0 */ 0xFE, 0x81, 0x02, 0xFE, 0x82, 0x02, 0xFE, 0x84, 0x02, 0x51, 0xFE, 0x02, 0x01, 0xFE, 0x28, 0x01, -/* 0000A0B0 */ 0xFD, 0xFE, 0x4A, 0x01, 0x63, 0x76, 0xFE, 0xD6, 0x01, 0xFE, 0x79, 0x02, 0x1B, 0xFE, 0x7A, 0x02, -/* 0000A0C0 */ 0x23, 0xFE, 0x7B, 0x02, 0xEE, 0xFE, 0x7C, 0x02, 0x29, 0xFE, 0x6A, 0x02, 0xFE, 0x6C, 0x02, 0xFE, -/* 0000A0D0 */ 0x69, 0x02, 0xFE, 0x6B, 0x02, 0xFE, 0x68, 0x02, 0xFE, 0x5C, 0x02, 0xFE, 0x5D, 0x02, 0xFE, 0x60, -/* 0000A0E0 */ 0x02, 0xFE, 0x5E, 0x02, 0xFE, 0x66, 0x02, 0xFE, 0x63, 0x02, 0xFE, 0x64, 0x02, 0xFE, 0x74, 0x02, -/* 0000A0F0 */ 0xFE, 0x77, 0x02, 0xFE, 0x78, 0x02, 0xFE, 0x80, 0x02, 0xFE, 0x57, 0x02, 0xFE, 0x58, 0x02, 0xFE, -/* 0000A100 */ 0x02, 0x03, 0xFE, 0x03, 0x03, 0xFE, 0x04, 0x03, 0xFE, 0x05, 0x03, 0xFE, 0x06, 0x03, 0xFE, 0x07, -/* 0000A110 */ 0x03, 0xFE, 0x08, 0x03, 0xFE, 0x69, 0x01, 0xFE, 0x63, 0x01, 0xFE, 0x22, 0x01, 0xFE, 0x45, 0x01, -/* 0000A120 */ 0xFE, 0x4C, 0x01, 0xFE, 0x0E, 0x03, 0xF1, 0xFE, 0x29, 0x01, 0x86, 0xFE, 0x18, 0x01, 0xBC, 0xFE, -/* 0000A130 */ 0x14, 0x03, 0xC5, 0xFE, 0x1C, 0x01, 0xFE, 0x3F, 0x01, 0x5D, 0x7E, 0xFE, 0x1A, 0x03, 0xFE, 0x6D, -/* 0000A140 */ 0x02, 0xBF, 0xA7, 0xFE, 0x88, 0x01, 0xFE, 0x6C, 0x02, 0xB0, 0x61, 0xFE, 0x86, 0x01, 0xFE, 0x79, -/* 0000A150 */ 0x02, 0x1B, 0x23, 0xFE, 0x7B, 0x02, 0xEE, 0xFE, 0x7C, 0x02, 0x29, 0xFE, 0x57, 0x02, 0xB1, 0xFE, -/* 0000A160 */ 0x58, 0x02, 0xB4, 0x8D, 0x4D, 0x48, 0xFE, 0x26, 0x03, 0xFE, 0x27, 0x03, 0xFE, 0x28, 0x03, 0xFE, -/* 0000A170 */ 0x29, 0x03, 0xFE, 0x2A, 0x03, 0xFE, 0x2B, 0x03, 0xFE, 0x2C, 0x03, 0xFE, 0x2D, 0x03, 0xFE, 0x2E, -/* 0000A180 */ 0x03, 0x7B, 0xFE, 0x30, 0x03, 0xFE, 0x31, 0x03, 0xFE, 0x32, 0x03, 0xFE, 0x33, 0x03, 0xFE, 0x34, -/* 0000A190 */ 0x03, 0xFE, 0x35, 0x03, 0xFE, 0x36, 0x03, 0xFE, 0x37, 0x03, 0xFE, 0x38, 0x03, 0xFE, 0x39, 0x03, -/* 0000A1A0 */ 0xFE, 0x3A, 0x03, 0x61, 0xFE, 0xF0, 0x01, 0xFE, 0xF6, 0x01, 0x4D, 0xFE, 0x88, 0x01, 0xFE, 0x83, -/* 0000A1B0 */ 0x01, 0xFE, 0x82, 0x01, 0xFE, 0x80, 0x01, 0xFE, 0x81, 0x01, 0xFE, 0x62, 0x03, 0xFE, 0x62, 0x03, -/* 0000A1C0 */ 0xFE, 0x63, 0x03, 0xFE, 0x63, 0x03, 0xFE, 0xF6, 0x01, 0xFE, 0x83, 0x01, 0xFE, 0x4E, 0x03, 0xFE, -/* 0000A1D0 */ 0x4D, 0x03, 0xFE, 0x50, 0x03, 0xFE, 0x52, 0x03, 0xFE, 0x51, 0x03, 0xFE, 0x55, 0x03, 0xFE, 0x54, -/* 0000A1E0 */ 0x03, 0xFE, 0x58, 0x03, 0xFE, 0x5A, 0x03, 0xFE, 0x57, 0x03, 0xFE, 0x5C, 0x03, 0xFE, 0x5D, 0x03, -/* 0000A1F0 */ 0xFE, 0x5F, 0x03, 0xFE, 0x5E, 0x03, 0xFE, 0x60, 0x03, 0xFE, 0x82, 0x01, 0xFE, 0x80, 0x01, 0xFE, -/* 0000A200 */ 0x81, 0x01, 0xAB, 0x03, 0x03, 0x18, 0x00, 0xFE, 0x64, 0x03, 0x01, 0xFE, 0x65, 0x03, 0x02, 0xFE, -/* 0000A210 */ 0x66, 0x03, 0x03, 0xFE, 0x67, 0x03, 0x04, 0xFE, 0x68, 0x03, 0x05, 0xFE, 0x69, 0x03, 0x06, 0xFE, -/* 0000A220 */ 0x6A, 0x03, 0x07, 0xFE, 0x6B, 0x03, 0x08, 0xFE, 0x6C, 0x03, 0x09, 0xFE, 0x6D, 0x03, 0x0A, 0xFE, -/* 0000A230 */ 0x6E, 0x03, 0x0B, 0xFE, 0x6F, 0x03, 0x0C, 0xFE, 0x70, 0x03, 0x0D, 0xFE, 0x71, 0x03, 0x0E, 0xFE, -/* 0000A240 */ 0x72, 0x03, 0x0F, 0xFE, 0x73, 0x03, 0x10, 0xFE, 0x74, 0x03, 0x11, 0xFE, 0x75, 0x03, 0x12, 0xFE, -/* 0000A250 */ 0x76, 0x03, 0x13, 0xFE, 0x77, 0x03, 0x14, 0xFE, 0x78, 0x03, 0x15, 0xFE, 0x79, 0x03, 0x16, 0xFE, -/* 0000A260 */ 0x7A, 0x03, 0x17, 0xFE, 0x7B, 0x03, 0x05, 0x01, 0x00, 0xFE, 0x7C, 0x03, 0x07, 0x18, 0x00, 0xFE, -/* 0000A270 */ 0x64, 0x03, 0x01, 0xFE, 0x6E, 0x03, 0x02, 0xFE, 0x65, 0x03, 0x03, 0xFE, 0x7D, 0x03, 0x04, 0xFE, -/* 0000A280 */ 0x71, 0x03, 0x05, 0xFE, 0x73, 0x03, 0x06, 0xFE, 0x74, 0x03, 0x07, 0xFE, 0x66, 0x03, 0x08, 0xFE, -/* 0000A290 */ 0x67, 0x03, 0x09, 0xFE, 0x7E, 0x03, 0x0A, 0xFE, 0x7F, 0x03, 0x0B, 0xFE, 0x80, 0x03, 0x0C, 0xFE, -/* 0000A2A0 */ 0x6F, 0x03, 0x0D, 0xFE, 0x81, 0x03, 0x0E, 0xFE, 0x82, 0x03, 0x0F, 0xFE, 0x83, 0x03, 0x10, 0xFE, -/* 0000A2B0 */ 0x84, 0x03, 0x11, 0xFE, 0x85, 0x03, 0x12, 0xFE, 0x86, 0x03, 0x13, 0xFE, 0x87, 0x03, 0x14, 0xFE, -/* 0000A2C0 */ 0x88, 0x03, 0x15, 0xFE, 0x89, 0x03, 0x16, 0xFE, 0x7C, 0x03, 0x17, 0xFE, 0x8A, 0x03, 0xFE, 0xBB, -/* 0000A2D0 */ 0x01, 0x8C, 0x66, 0x00, 0x00, 0x00, 0x07, 0x00, 0xA4, 0x00, 0x09, 0x00, 0xB7, 0x00, 0x14, 0x00, -/* 0000A2E0 */ 0x32, 0x00, 0x0C, 0x00, 0x47, 0x00, 0x03, 0x00, 0x35, 0x00, 0x0C, 0x00, 0x35, 0x00, 0x0C, 0x00, -/* 0000A2F0 */ 0x39, 0x00, 0x0C, 0x00, 0x83, 0x00, 0x06, 0x00, 0x4A, 0x04, 0x0C, 0x00, 0x24, 0x00, 0x0C, 0x00, -/* 0000A300 */ 0x22, 0x00, 0x0C, 0x00, 0x22, 0x00, 0x0C, 0x00, 0x22, 0x00, 0x0C, 0x00, 0x22, 0x00, 0x0C, 0x00, -/* 0000A310 */ 0x1E, 0x00, 0x0C, 0x00, 0x21, 0x00, 0x0C, 0x00, 0x2D, 0x00, 0x62, 0x00, 0xC8, 0x00, 0x0C, 0x00, -/* 0000A320 */ 0x54, 0x00, 0x0C, 0x00, 0x50, 0x00, 0x0C, 0x00, 0x5E, 0x00, 0x0C, 0x00, 0x02, 0x01, 0x0C, 0x00, -/* 0000A330 */ 0x55, 0x00, 0x06, 0x00, 0x94, 0x00, 0x0C, 0x00, 0x4C, 0x00, 0x0C, 0x00, 0x4C, 0x00, 0x0C, 0x00, -/* 0000A340 */ 0x46, 0x00, 0x0C, 0x00, 0x47, 0x00, 0x0C, 0x00, 0x4C, 0x00, 0x0C, 0x00, 0x4A, 0x00, 0x0C, 0x00, -/* 0000A350 */ 0x3B, 0x00, 0x0C, 0x00, 0x4E, 0x00, 0x0C, 0x00, 0x56, 0x00, 0x0C, 0x00, 0x57, 0x00, 0x0C, 0x00, -/* 0000A360 */ 0x36, 0x00, 0x0C, 0x00, 0x3E, 0x00, 0x0C, 0x00, 0xA4, 0x00, 0x4A, 0x00, 0x05, 0x01, 0x3B, 0x01, -/* 0000A370 */ 0x7A, 0x0D, 0x20, 0x00, 0x6F, 0x01, 0x3D, 0x00, 0x8B, 0x00, 0x39, 0x00, 0x76, 0x00, 0x39, 0x00, -/* 0000A380 */ 0x5B, 0x01, 0x39, 0x00, 0xD2, 0x01, 0x06, 0x00, 0x36, 0x03, 0xA8, 0x00, 0x1F, 0x00, 0x06, 0x00, -/* 0000A390 */ 0x25, 0x00, 0x0D, 0x00, 0x4E, 0x02, 0x0C, 0x00, 0x9A, 0x00, 0x0C, 0x00, 0x19, 0x02, 0x0D, 0x00, -/* 0000A3A0 */ 0xCD, 0x06, 0x0D, 0x00, 0x09, 0x03, 0x0D, 0x00, 0x23, 0x03, 0x0A, 0x00, 0x77, 0x01, 0x0D, 0x00, -/* 0000A3B0 */ 0x75, 0x07, 0x0D, 0x00, 0xA3, 0x09, 0x6F, 0x00, 0x51, 0x09, 0x0D, 0x00, 0xE1, 0x01, 0x06, 0x00, -/* 0000A3C0 */ 0x60, 0x01, 0x1C, 0x00, 0xC8, 0x1B, 0x0D, 0x00, 0x6B, 0x03, 0x0D, 0x00, 0xB4, 0x04, 0x0D, 0x00, -/* 0000A3D0 */ 0x8F, 0x06, 0x0D, 0x00, 0xA7, 0x01, 0x0A, 0x00, 0xDA, 0x02, 0x0D, 0x00, 0x74, 0x06, 0x0D, 0x00, -/* 0000A3E0 */ 0xE8, 0x04, 0x20, 0x00, 0x30, 0x00, 0x3A, 0x00, 0x4D, 0x00, 0x0D, 0x00, 0x1B, 0x02, 0x0D, 0x00, -/* 0000A3F0 */ 0x3C, 0x05, 0x17, 0x00, 0x23, 0x00, 0x04, 0x00, 0x45, 0x00, 0x37, 0x00, 0xD7, 0x00, 0x2F, 0x00, -/* 0000A400 */ 0x5F, 0x00, 0x45, 0x00, 0xCA, 0x00, 0x4B, 0x00, 0x25, 0x03, 0x0D, 0x00, 0x8C, 0x02, 0x1B, 0x00, -/* 0000A410 */ 0x68, 0x22, 0x1B, 0x00, 0xA7, 0x25, 0x1B, 0x00, 0x02, 0x6E, 0x1B, 0x00, 0xAB, 0x16, 0x0D, 0x00, -/* 0000A420 */ 0x23, 0x00, 0x4B, 0x00, 0x92, 0x00, 0x4B, 0x00, 0x92, 0x00, 0x4B, 0x00, 0x92, 0x00, 0x01, 0x01, -/* 0000A430 */ 0x29, 0x01, 0x13, 0x00, 0x38, 0x00, 0x1A, 0x00, 0x38, 0x00, 0x13, 0x00, 0x39, 0x00, 0x1A, 0x00, -/* 0000A440 */ 0x3A, 0x00, 0x06, 0x00, 0x25, 0x00, 0x0D, 0x00, 0xE9, 0x01, 0x0D, 0x00, 0x0C, 0x02, 0x0D, 0x00, -/* 0000A450 */ 0x90, 0x01, 0x0C, 0x00, 0x58, 0x01, 0x0C, 0x00, 0x9A, 0x00, 0x0C, 0x00, 0x70, 0x00, 0x0C, 0x00, -/* 0000A460 */ 0xA7, 0x04, 0x0C, 0x00, 0x93, 0x04, 0x0C, 0x00, 0x31, 0x04, 0x0C, 0x00, 0xB1, 0x09, 0x0C, 0x00, -/* 0000A470 */ 0xEF, 0x02, 0x06, 0x00, 0x2D, 0x00, 0x0C, 0x00, 0x93, 0x03, 0x1B, 0x00, 0x89, 0x0A, 0x06, 0x00, -/* 0000A480 */ 0x75, 0x00, 0x06, 0x00, 0x38, 0x00, 0x06, 0x00, 0x4C, 0x00, 0x06, 0x00, 0x83, 0x1C, 0x0C, 0x00, -/* 0000A490 */ 0xC0, 0x01, 0x0C, 0x00, 0xDF, 0x01, 0x0C, 0x00, 0x80, 0x03, 0x23, 0x00, 0x3C, 0x00, 0x52, 0x00, -/* 0000A4A0 */ 0x25, 0x01, 0x04, 0x00, 0x51, 0x00, 0x59, 0x00, 0x69, 0x01, 0x04, 0x00, 0x59, 0x00, 0x59, 0x00, -/* 0000A4B0 */ 0x79, 0x01, 0x04, 0x00, 0x5D, 0x00, 0x59, 0x00, 0x81, 0x01, 0x04, 0x00, 0x41, 0x00, 0x58, 0x00, -/* 0000A4C0 */ 0xAD, 0x02, 0x37, 0x00, 0x60, 0x00, 0x37, 0x00, 0x64, 0x00, 0x37, 0x00, 0x66, 0x00, 0x31, 0x00, -/* 0000A4D0 */ 0x49, 0x01, 0x11, 0x02, 0x51, 0x05, 0x1B, 0x00, 0xCA, 0x03, 0x06, 0x00, 0x2B, 0x00, 0x0C, 0x00, -/* 0000A4E0 */ 0x3B, 0x09, 0x1B, 0x00, 0xF3, 0x30, 0x1B, 0x00, 0x5E, 0x32, 0x1B, 0x00, 0x79, 0x7A, 0x0D, 0x00, -/* 0000A4F0 */ 0x23, 0x00, 0x43, 0x00, 0x7C, 0x00, 0x43, 0x00, 0x84, 0x00, 0x43, 0x00, 0x88, 0x00, 0x45, 0x00, -/* 0000A500 */ 0xA6, 0x00, 0x00, 0x15, 0xD8, 0x01, 0x00, 0xAC, 0xD5, 0x01, 0x00, 0x2F, 0xD5, 0x01, 0x00, 0xC5, -/* 0000A510 */ 0xD4, 0x01, 0x00, 0x5B, 0xD4, 0x01, 0x00, 0xE7, 0xD3, 0x01, 0x00, 0x6D, 0xD3, 0x01, 0x00, 0xEE, -/* 0000A520 */ 0xD2, 0x01, 0x00, 0x6F, 0xD2, 0x01, 0x00, 0xFD, 0xD1, 0x01, 0x00, 0x83, 0xD1, 0x01, 0x00, 0x14, -/* 0000A530 */ 0xD1, 0x01, 0x00, 0x8B, 0xD0, 0x01, 0x00, 0x1C, 0xD0, 0x01, 0x00, 0xA8, 0xCF, 0x01, 0x00, 0x2E, -/* 0000A540 */ 0xCF, 0x01, 0x00, 0xAF, 0xCE, 0x01, 0x00, 0x30, 0xCE, 0x01, 0x00, 0x9C, 0xCD, 0x01, 0x00, 0x22, -/* 0000A550 */ 0xCD, 0x01, 0x00, 0x23, 0xCC, 0x01, 0x00, 0xA9, 0xCB, 0x01, 0x00, 0x07, 0xCB, 0x01, 0x00, 0x8C, -/* 0000A560 */ 0xCA, 0x01, 0x00, 0x0C, 0xCA, 0x01, 0x00, 0x8C, 0xC9, 0x01, 0x00, 0x17, 0xC9, 0x01, 0x00, 0x9D, -/* 0000A570 */ 0xC8, 0x01, 0x00, 0x1E, 0xC8, 0x01, 0x00, 0x60, 0xC7, 0x01, 0x00, 0xC2, 0xC6, 0x01, 0x00, 0x52, -/* 0000A580 */ 0xC6, 0x01, 0x00, 0x88, 0xC5, 0x01, 0x00, 0x22, 0xC5, 0x01, 0x00, 0xB6, 0xC4, 0x01, 0x00, 0x37, -/* 0000A590 */ 0xC3, 0x01, 0x00, 0x25, 0xC2, 0x01, 0x00, 0xA5, 0xC0, 0x01, 0x00, 0x3D, 0xBE, 0x01, 0x00, 0xF9, -/* 0000A5A0 */ 0xB8, 0x01, 0x00, 0x52, 0xB8, 0x01, 0x00, 0xDD, 0xB7, 0x01, 0x00, 0x68, 0xB7, 0x01, 0x00, 0xF3, -/* 0000A5B0 */ 0xB6, 0x01, 0x00, 0xE4, 0xB5, 0x01, 0x00, 0xDE, 0xB3, 0x01, 0x00, 0x78, 0xB2, 0x01, 0x00, 0x2C, -/* 0000A5C0 */ 0xB2, 0x01, 0x00, 0x9D, 0xAA, 0x01, 0x00, 0xD0, 0xA9, 0x01, 0x00, 0x01, 0xA7, 0x01, 0x00, 0x08, -/* 0000A5D0 */ 0xA4, 0x01, 0x00, 0x9A, 0xA2, 0x01, 0x00, 0x44, 0xA0, 0x01, 0x00, 0xDF, 0x9D, 0x01, 0x00, 0xB4, -/* 0000A5E0 */ 0x9C, 0x01, 0x00, 0xAC, 0x9B, 0x01, 0x00, 0x3B, 0x9B, 0x01, 0x00, 0x6C, 0x99, 0x01, 0x00, 0xC0, -/* 0000A5F0 */ 0x86, 0x01, 0x00, 0xBF, 0x71, 0x01, 0x00, 0x39, 0x42, 0x01, 0x00, 0x40, 0x36, 0x01, 0x00, 0x6E, -/* 0000A600 */ 0x35, 0x01, 0x00, 0xB8, 0x34, 0x01, 0x00, 0xAF, 0x33, 0x01, 0x00, 0x14, 0x33, 0x01, 0x00, 0xA6, -/* 0000A610 */ 0x32, 0x01, 0x00, 0x32, 0x32, 0x01, 0x00, 0x0C, 0x30, 0x01, 0x00, 0x15, 0x2E, 0x01, 0x00, 0xA7, -/* 0000A620 */ 0x2C, 0x01, 0x00, 0x55, 0x28, 0x01, 0x00, 0xE4, 0x26, 0x01, 0x00, 0x5C, 0x25, 0x01, 0x00, 0x5F, -/* 0000A630 */ 0x20, 0x01, 0x00, 0x5D, 0x1E, 0x01, 0x00, 0xE8, 0x1C, 0x01, 0x00, 0x96, 0x1C, 0x01, 0x00, 0xD1, -/* 0000A640 */ 0x18, 0x01, 0x00, 0xFE, 0x17, 0x01, 0x00, 0xFD, 0x14, 0x01, 0x00, 0x65, 0x12, 0x01, 0x00, 0x56, -/* 0000A650 */ 0x11, 0x01, 0x00, 0x4A, 0x10, 0x01, 0x00, 0x5A, 0x0E, 0x01, 0x00, 0xCF, 0x0D, 0x01, 0x00, 0x44, -/* 0000A660 */ 0x0D, 0x01, 0x00, 0xB9, 0x0C, 0x01, 0x00, 0x41, 0x0C, 0x01, 0x00, 0x01, 0x0A, 0x01, 0x00, 0x9D, -/* 0000A670 */ 0x06, 0x01, 0x00, 0x52, 0xF0, 0x00, 0x00, 0xF5, 0xD9, 0x00, 0x00, 0x7F, 0xA6, 0x00, 0x00, 0x3F, -/* 0000A680 */ 0x5D, 0x18, 0xC1, 0x53, 0xAD, 0x25, 0x01, 0xFE, 0xD5, 0x0C, 0x1A, 0xA0, 0x41, 0xD1, 0x00, 0xB7, -/* 0000A690 */ 0xFF, 0x76, 0x4C, 0x02, 0x00, 0x0F, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFF, 0x76, 0x4C, -/* 0000A6A0 */ 0x02, 0x00, 0xFE, 0x28, 0x7A, 0xFE, 0x28, 0x7A, 0x01, 0xFE, 0xD5, 0x04, 0x15, 0x36, 0x44, 0x09, -/* 0000A6B0 */ 0xEE, 0xED, 0x02, 0x0E, 0x02, 0x09, 0x19, 0x19, 0x19, 0x19, 0x07, 0x02, 0x41, 0x42, 0x43, 0x44, -/* 0000A6C0 */ 0x08, 0x06, 0xFE, 0x3D, 0x03, 0x06, 0xFE, 0x41, 0x04, 0x06, 0xFE, 0xD6, 0x04, 0x05, 0xFE, 0xD7, -/* 0000A6D0 */ 0x04, 0x06, 0xFE, 0xD8, 0x04, 0x05, 0xFE, 0xD9, 0x04, 0x06, 0xFE, 0xDA, 0x04, 0x05, 0xFE, 0xDB, -/* 0000A6E0 */ 0x04, 0x06, 0xFE, 0xDC, 0x04, 0x05, 0xFE, 0xDD, 0x04, 0x06, 0xFE, 0xDE, 0x04, 0x05, 0xFE, 0xDF, -/* 0000A6F0 */ 0x04, 0x06, 0xFE, 0xE0, 0x04, 0x05, 0xFE, 0xE1, 0x04, 0x06, 0xFE, 0xE2, 0x04, 0x05, 0xFE, 0xE3, -/* 0000A700 */ 0x04, 0x06, 0xFE, 0xE4, 0x04, 0x05, 0xFE, 0xE5, 0x04, 0x06, 0xFE, 0xE6, 0x04, 0x05, 0xFE, 0xE7, -/* 0000A710 */ 0x04, 0x07, 0x06, 0xFE, 0x4F, 0x04, 0x01, 0x00, 0x06, 0xFE, 0x50, 0x04, 0x01, 0x01, 0x06, 0xFE, -/* 0000A720 */ 0x51, 0x04, 0x01, 0x02, 0x05, 0xFE, 0x52, 0x04, 0x05, 0xFE, 0x53, 0x04, 0x06, 0xFE, 0x54, 0x04, -/* 0000A730 */ 0x05, 0xFE, 0x55, 0x04, 0x06, 0xFE, 0x56, 0x04, 0x05, 0xFE, 0x57, 0x04, 0x05, 0xFE, 0x58, 0x04, -/* 0000A740 */ 0x05, 0xFE, 0x59, 0x04, 0x05, 0xFE, 0x5A, 0x04, 0x06, 0xFE, 0xB3, 0x03, 0x06, 0xFE, 0xB4, 0x03, -/* 0000A750 */ 0x06, 0xFE, 0x0B, 0x04, 0x06, 0xFE, 0x40, 0x03, 0x06, 0xFE, 0x42, 0x03, 0x0C, 0x06, 0xFE, 0x43, -/* 0000A760 */ 0x03, 0x06, 0xFE, 0x44, 0x03, 0x06, 0xFE, 0x0C, 0x04, 0x0B, 0x06, 0xFE, 0x26, 0x04, 0x06, 0xFE, -/* 0000A770 */ 0x8D, 0x03, 0x05, 0xFE, 0x25, 0x04, 0x06, 0xFE, 0x0D, 0x04, 0x06, 0xFE, 0x4C, 0x03, 0xFE, 0x4C, -/* 0000A780 */ 0x04, 0x4F, 0x40, 0xA6, 0x36, 0xA6, 0x37, 0xA6, 0x38, 0xA6, 0x39, 0xA6, 0x3A, 0xA6, 0x3B, 0xA6, -/* 0000A790 */ 0x3C, 0xA6, 0x3D, 0xA6, 0x3E, 0xA6, 0x3F, 0x8D, 0x02, 0x32, 0x46, 0x00, 0x00, 0x14, 0x0E, 0x00, -/* 0000A7A0 */ 0x46, 0x03, 0x8D, 0x02, 0x32, 0x46, 0x00, 0x00, 0x14, 0x03, 0x00, 0x46, 0x04, 0x09, 0x14, 0x04, -/* 0000A7B0 */ 0xDE, 0x00, 0x0B, 0x01, 0xB6, 0x46, 0x00, 0x01, 0x53, 0x01, 0x00, 0x36, 0x46, 0x93, 0x00, 0x02, -/* 0000A7C0 */ 0x36, 0x01, 0x53, 0x01, 0x01, 0x37, 0x46, 0x93, 0x00, 0x03, 0x37, 0x01, 0x53, 0x01, 0x02, 0x38, -/* 0000A7D0 */ 0x46, 0x93, 0x00, 0x04, 0x38, 0x01, 0x53, 0x01, 0x03, 0x39, 0x46, 0x93, 0x00, 0x05, 0x39, 0x01, -/* 0000A7E0 */ 0x53, 0x01, 0x04, 0x3A, 0x46, 0x93, 0x00, 0x06, 0x3A, 0x01, 0x53, 0x01, 0x05, 0x3B, 0x46, 0x93, -/* 0000A7F0 */ 0x00, 0x07, 0x3B, 0x01, 0x53, 0x01, 0x06, 0x3C, 0x46, 0x93, 0x00, 0x08, 0x3C, 0x01, 0x53, 0x01, -/* 0000A800 */ 0x07, 0x3D, 0x46, 0x93, 0x00, 0x09, 0x3D, 0x4F, 0x46, 0x93, 0x00, 0x0A, 0x46, 0xCB, 0x00, 0x00, -/* 0000A810 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x79, 0x06, 0x46, 0x00, 0x79, 0x08, -/* 0000A820 */ 0x46, 0x01, 0x79, 0x0A, 0x46, 0x02, 0x79, 0x0C, 0x46, 0x03, 0x79, 0x0E, 0x46, 0x04, 0x79, 0x10, -/* 0000A830 */ 0x46, 0x05, 0x79, 0x12, 0x46, 0x06, 0x79, 0x14, 0x46, 0x07, 0x79, 0x16, 0x46, 0x08, 0x94, 0x02, -/* 0000A840 */ 0x46, 0xCD, 0x46, 0x03, 0x00, 0x00, 0xA6, 0x47, 0x9F, 0x00, 0x47, 0x46, 0xA6, 0x47, 0x9F, 0x01, -/* 0000A850 */ 0x47, 0x46, 0xA6, 0x47, 0x9F, 0x02, 0x47, 0x46, 0x93, 0x00, 0x0A, 0x46, 0x8D, 0x02, 0x04, 0x46, -/* 0000A860 */ 0x01, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0x2C, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, -/* 0000A870 */ 0x00, 0x47, 0x00, 0x00, 0x00, 0x79, 0x19, 0x47, 0x09, 0x79, 0x1B, 0x47, 0x0A, 0x79, 0x1D, 0x47, -/* 0000A880 */ 0x0B, 0x5B, 0x01, 0x47, 0x00, 0x00, 0x5B, 0x02, 0x17, 0x00, 0x00, 0xEE, 0x03, 0x46, 0x46, 0x00, -/* 0000A890 */ 0x00, 0x47, 0x40, 0x46, 0xB6, 0x47, 0x00, 0x01, 0x53, 0x01, 0x08, 0x46, 0x47, 0x07, 0x06, 0x00, -/* 0000A8A0 */ 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x1E, 0x01, 0x00, 0x5B, 0x02, 0x1F, 0x01, 0x00, 0x5B, 0x03, 0x20, -/* 0000A8B0 */ 0x01, 0x00, 0x60, 0x47, 0x40, 0x0C, 0x5B, 0x04, 0x47, 0x01, 0x00, 0x8D, 0x02, 0x36, 0x47, 0x02, -/* 0000A8C0 */ 0x00, 0x4B, 0x47, 0x60, 0x47, 0x47, 0x0D, 0x5B, 0x05, 0x47, 0x01, 0x00, 0xEE, 0x06, 0xFF, 0x46, -/* 0000A8D0 */ 0x01, 0x00, 0xB6, 0x47, 0x00, 0x01, 0x53, 0x01, 0x09, 0x46, 0x47, 0x07, 0x06, 0x00, 0x5A, 0x00, -/* 0000A8E0 */ 0x02, 0x5B, 0x01, 0x21, 0x02, 0x00, 0x5B, 0x02, 0x22, 0x02, 0x00, 0x5B, 0x03, 0x22, 0x02, 0x00, -/* 0000A8F0 */ 0x60, 0x47, 0x40, 0x0E, 0x5B, 0x04, 0x47, 0x02, 0x00, 0x8D, 0x02, 0x36, 0x47, 0x02, 0x00, 0x4B, -/* 0000A900 */ 0x47, 0x60, 0x47, 0x47, 0x0F, 0x5B, 0x05, 0x47, 0x02, 0x00, 0xEE, 0x06, 0xFF, 0x46, 0x02, 0x00, -/* 0000A910 */ 0xB6, 0x47, 0x00, 0x01, 0x53, 0x01, 0x0A, 0x46, 0x47, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x02, 0x5B, -/* 0000A920 */ 0x01, 0x23, 0x03, 0x00, 0x5B, 0x02, 0x24, 0x03, 0x00, 0x5B, 0x03, 0x24, 0x03, 0x00, 0x60, 0x47, -/* 0000A930 */ 0x40, 0x10, 0x5B, 0x04, 0x47, 0x03, 0x00, 0x8D, 0x02, 0x36, 0x47, 0x02, 0x00, 0x4B, 0x47, 0x60, -/* 0000A940 */ 0x47, 0x47, 0x11, 0x5B, 0x05, 0x47, 0x03, 0x00, 0xEE, 0x06, 0xFF, 0x46, 0x03, 0x00, 0x8D, 0x02, -/* 0000A950 */ 0x32, 0x46, 0x00, 0x00, 0x14, 0x03, 0x00, 0x46, 0x03, 0x09, 0x68, 0x02, 0xDE, 0x01, 0x04, 0x03, -/* 0000A960 */ 0xB6, 0x46, 0x00, 0xB5, 0x01, 0x00, 0x00, 0x00, 0x46, 0x46, 0x01, 0x53, 0x01, 0x0B, 0x3E, 0x46, -/* 0000A970 */ 0x93, 0x01, 0x02, 0x3E, 0x01, 0x53, 0x01, 0x0C, 0x3F, 0x46, 0x93, 0x01, 0x03, 0x3F, 0x8D, 0x02, -/* 0000A980 */ 0x23, 0x46, 0x03, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x25, 0x04, 0x00, 0x8F, -/* 0000A990 */ 0x01, 0x02, 0x47, 0x04, 0x00, 0x5B, 0x02, 0x47, 0x04, 0x00, 0xEE, 0x03, 0xFF, 0x46, 0x04, 0x00, -/* 0000A9A0 */ 0x8D, 0x02, 0x23, 0x46, 0x03, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x26, 0x05, -/* 0000A9B0 */ 0x00, 0x8F, 0x01, 0x03, 0x47, 0x05, 0x00, 0x5B, 0x02, 0x47, 0x05, 0x00, 0xEE, 0x03, 0xFF, 0x46, -/* 0000A9C0 */ 0x05, 0x00, 0x8F, 0x01, 0x02, 0x46, 0x04, 0x00, 0xCD, 0x47, 0x02, 0x01, 0x00, 0x9F, 0x00, 0x27, -/* 0000A9D0 */ 0x47, 0x9F, 0x01, 0x28, 0x47, 0x75, 0x47, 0x46, 0x12, 0x8D, 0x02, 0x15, 0x46, 0x06, 0x00, 0x07, -/* 0000A9E0 */ 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8F, 0x01, 0x02, 0x47, 0x04, 0x00, 0x5B, 0x01, 0x47, 0x06, 0x00, -/* 0000A9F0 */ 0x5B, 0x02, 0x29, 0x06, 0x00, 0xCB, 0x40, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, -/* 0000AA00 */ 0x00, 0x00, 0x8F, 0x01, 0x02, 0x48, 0x04, 0x00, 0x07, 0x01, 0x00, 0xC2, 0x01, 0x48, 0x48, 0x07, -/* 0000AA10 */ 0x00, 0x79, 0x48, 0x47, 0x13, 0x79, 0x2C, 0x47, 0x14, 0x79, 0x2C, 0x47, 0x15, 0x79, 0x2C, 0x47, -/* 0000AA20 */ 0x16, 0x5B, 0x03, 0x47, 0x06, 0x00, 0xEE, 0x04, 0xFF, 0x46, 0x06, 0x00, 0x8D, 0x02, 0x04, 0x46, -/* 0000AA30 */ 0x01, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x8F, 0x01, 0x02, 0x47, 0x04, 0x00, 0x60, 0x47, -/* 0000AA40 */ 0x47, 0x17, 0x5B, 0x01, 0x47, 0x08, 0x00, 0x8D, 0x02, 0x08, 0x47, 0x07, 0x00, 0x60, 0x47, 0x47, -/* 0000AA50 */ 0x17, 0x5B, 0x02, 0x47, 0x08, 0x00, 0xEE, 0x03, 0xFF, 0x46, 0x08, 0x00, 0x8D, 0x02, 0x15, 0x46, -/* 0000AA60 */ 0x06, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8F, 0x01, 0x02, 0x47, 0x04, 0x00, 0x60, 0x47, -/* 0000AA70 */ 0x47, 0x17, 0x5B, 0x01, 0x47, 0x09, 0x00, 0x5B, 0x02, 0x2F, 0x09, 0x00, 0xCB, 0x58, 0x00, 0x00, -/* 0000AA80 */ 0x00, 0x03, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0x8F, 0x01, 0x02, 0x48, 0x04, 0x00, 0x79, -/* 0000AA90 */ 0x48, 0x47, 0x13, 0x79, 0x30, 0x47, 0x14, 0x79, 0x2C, 0x47, 0x15, 0x79, 0x30, 0x47, 0x16, 0x5B, -/* 0000AAA0 */ 0x03, 0x47, 0x09, 0x00, 0xEE, 0x04, 0xFF, 0x46, 0x09, 0x00, 0x8D, 0x02, 0x15, 0x46, 0x06, 0x00, -/* 0000AAB0 */ 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8F, 0x01, 0x02, 0x47, 0x04, 0x00, 0x60, 0x47, 0x47, 0x17, -/* 0000AAC0 */ 0x5B, 0x01, 0x47, 0x0A, 0x00, 0x5B, 0x02, 0x31, 0x0A, 0x00, 0xCB, 0x70, 0x00, 0x00, 0x00, 0x04, -/* 0000AAD0 */ 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0x8D, 0x02, 0x23, 0x48, 0x03, 0x00, 0x07, 0x03, 0x00, -/* 0000AAE0 */ 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x33, 0x0B, 0x00, 0xB6, 0x4A, 0x00, 0xB5, 0x01, 0x00, 0x00, 0x00, -/* 0000AAF0 */ 0x4A, 0x4A, 0x01, 0x53, 0x01, 0x0D, 0x49, 0x4A, 0x5B, 0x02, 0x49, 0x0B, 0x00, 0xEE, 0x03, 0x48, -/* 0000AB00 */ 0x48, 0x0B, 0x00, 0x79, 0x48, 0x47, 0x18, 0x79, 0x2C, 0x47, 0x15, 0x79, 0x30, 0x47, 0x16, 0x5B, -/* 0000AB10 */ 0x03, 0x47, 0x0A, 0x00, 0xEE, 0x04, 0xFF, 0x46, 0x0A, 0x00, 0x8D, 0x02, 0x15, 0x46, 0x06, 0x00, -/* 0000AB20 */ 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8F, 0x01, 0x02, 0x47, 0x04, 0x00, 0x60, 0x47, 0x47, 0x17, -/* 0000AB30 */ 0x5B, 0x01, 0x47, 0x0C, 0x00, 0x5B, 0x02, 0x34, 0x0C, 0x00, 0xCB, 0x84, 0x00, 0x00, 0x00, 0x05, -/* 0000AB40 */ 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0xB6, 0x49, 0x00, 0xB5, 0x01, 0x00, 0x00, 0x00, 0x49, -/* 0000AB50 */ 0x49, 0x01, 0x57, 0x01, 0x0E, 0x48, 0x49, 0x47, 0x79, 0x48, 0x47, 0x13, 0x79, 0x30, 0x47, 0x14, -/* 0000AB60 */ 0x79, 0x2C, 0x47, 0x15, 0x79, 0x30, 0x47, 0x16, 0x5B, 0x03, 0x47, 0x0C, 0x00, 0xEE, 0x04, 0xFF, -/* 0000AB70 */ 0x46, 0x0C, 0x00, 0x8D, 0x02, 0x15, 0x46, 0x06, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8F, -/* 0000AB80 */ 0x01, 0x02, 0x47, 0x04, 0x00, 0x5B, 0x01, 0x47, 0x0D, 0x00, 0x5B, 0x02, 0x35, 0x0D, 0x00, 0xCB, -/* 0000AB90 */ 0x9C, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0x8D, 0x01, 0x17, 0x48, -/* 0000ABA0 */ 0x08, 0x00, 0x4B, 0x48, 0x79, 0x48, 0x47, 0x13, 0x79, 0x30, 0x47, 0x14, 0x79, 0x30, 0x47, 0x16, -/* 0000ABB0 */ 0x5B, 0x03, 0x47, 0x0D, 0x00, 0xEE, 0x04, 0xFF, 0x46, 0x0D, 0x00, 0x8F, 0x01, 0x02, 0x00, 0x04, -/* 0000ABC0 */ 0x00, 0x09, 0x07, 0x00, 0xA6, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x07, 0xB0, 0x00, -/* 0000ABD0 */ 0x9C, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, -/* 0000ABE0 */ 0x82, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, -/* 0000ABF0 */ 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, -/* 0000AC00 */ 0x81, 0x01, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 0000AC10 */ 0x84, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, -/* 0000AC20 */ 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, -/* 0000AC30 */ 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, -/* 0000AC40 */ 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, -/* 0000AC50 */ 0x81, 0x01, 0x00, 0x00, 0x2C, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 0000AC60 */ 0x60, 0x01, 0x00, 0x00, 0x5E, 0x01, 0x00, 0x00, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 0000AC70 */ 0x03, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD6, 0x04, 0x00, 0x00, 0xD8, 0x04, 0x00, 0x00, -/* 0000AC80 */ 0xDA, 0x04, 0x00, 0x00, 0xDC, 0x04, 0x00, 0x00, 0xDE, 0x04, 0x00, 0x00, 0xE0, 0x04, 0x00, 0x00, -/* 0000AC90 */ 0xE2, 0x04, 0x00, 0x00, 0xE4, 0x04, 0x00, 0x00, 0xE6, 0x04, 0x00, 0x00, 0xFE, 0xD6, 0x04, 0xFE, -/* 0000ACA0 */ 0xD8, 0x04, 0xFE, 0xDA, 0x04, 0xFE, 0xDC, 0x04, 0xFE, 0xDE, 0x04, 0xFE, 0xE0, 0x04, 0xFE, 0xE2, -/* 0000ACB0 */ 0x04, 0xFE, 0xE4, 0x04, 0xFE, 0xE6, 0x04, 0xFE, 0x60, 0x01, 0xFE, 0x5E, 0x01, 0xFE, 0x61, 0x01, -/* 0000ACC0 */ 0xFE, 0x60, 0x01, 0xFE, 0x03, 0x03, 0xFE, 0x5E, 0x01, 0xFE, 0x04, 0x03, 0xFE, 0x61, 0x01, 0xFE, -/* 0000ACD0 */ 0x05, 0x03, 0xFE, 0xF4, 0x01, 0xFE, 0x83, 0x01, 0xFE, 0x82, 0x01, 0xFE, 0x80, 0x01, 0xFE, 0x81, -/* 0000ACE0 */ 0x01, 0xFE, 0x15, 0x01, 0xFE, 0x84, 0x01, 0x02, 0x01, 0x09, 0x00, 0xFE, 0x3B, 0x04, 0x01, 0xFE, -/* 0000ACF0 */ 0xE8, 0x04, 0x02, 0xFE, 0xE9, 0x04, 0x03, 0xFE, 0xEA, 0x04, 0x04, 0xFE, 0xEB, 0x04, 0x05, 0xFE, -/* 0000AD00 */ 0xEC, 0x04, 0x06, 0xFE, 0x3A, 0x04, 0x07, 0xFE, 0x37, 0x04, 0x08, 0xFE, 0x3E, 0x04, 0x03, 0x02, -/* 0000AD10 */ 0x00, 0xFE, 0x24, 0x02, 0x01, 0xFE, 0xF5, 0x01, 0xFF, 0x8C, 0x4C, 0x02, 0x00, 0x14, 0x16, 0x00, -/* 0000AD20 */ 0x00, 0x00, 0x76, 0x00, 0x9A, 0x13, 0x34, 0x00, 0xEF, 0x36, 0x1B, 0x00, 0x5E, 0x00, 0x38, 0x00, -/* 0000AD30 */ 0x16, 0x10, 0x3E, 0x00, 0x42, 0x02, 0x3E, 0x00, 0x54, 0x02, 0x3E, 0x00, 0x53, 0x02, 0x30, 0x00, -/* 0000AD40 */ 0x62, 0x04, 0x22, 0x00, 0x59, 0x04, 0x22, 0x00, 0x54, 0x00, 0x17, 0x00, 0x48, 0x00, 0x53, 0x00, -/* 0000AD50 */ 0x9D, 0x00, 0x30, 0x00, 0x4A, 0x00, 0x4E, 0x00, 0xA2, 0x00, 0x70, 0x00, 0x22, 0x03, 0x59, 0x00, -/* 0000AD60 */ 0xEC, 0x08, 0x48, 0x00, 0x9F, 0x00, 0x09, 0x00, 0x88, 0x00, 0x07, 0x00, 0x16, 0x00, 0x00, 0xEB, -/* 0000AD70 */ 0xD5, 0x00, 0x00, 0xD2, 0xD0, 0x00, 0x00, 0x4F, 0xD0, 0x00, 0x00, 0x46, 0xCE, 0x00, 0x00, 0x78, -/* 0000AD80 */ 0xCC, 0x00, 0x00, 0x24, 0xC8, 0x00, 0x00, 0x90, 0xBE, 0x00, 0x00, 0xA0, 0xBB, 0x00, 0x00, 0x24, -/* 0000AD90 */ 0xBA, 0x00, 0x00, 0xA8, 0xB8, 0x00, 0x00, 0x2C, 0xB7, 0x00, 0x00, 0x00, 0xB5, 0x00, 0x00, 0xF7, -/* 0000ADA0 */ 0xB2, 0x00, 0x00, 0xF0, 0xB1, 0x00, 0x00, 0xAB, 0xAD, 0x00, 0x00, 0x3F, 0x5D, 0x08, 0xC1, 0x13, -/* 0000ADB0 */ 0x8D, 0x27, 0x00, 0xFE, 0xD1, 0x0E, 0x1B, 0xA0, 0x41, 0xC3, 0x00, 0xFE, 0x0D, 0x04, 0xCA, 0xFF, -/* 0000ADC0 */ 0x00, 0x00, 0x00, 0x02, 0xFF, 0xD3, 0xBC, 0x02, 0x00, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, -/* 0000ADD0 */ 0x01, 0xFF, 0xD3, 0xBC, 0x02, 0x00, 0xFE, 0x30, 0x08, 0xFE, 0x30, 0x08, 0x03, 0xFE, 0x02, 0x04, -/* 0000ADE0 */ 0xFE, 0x11, 0x05, 0xFE, 0xCA, 0x01, 0x07, 0x15, 0x19, 0x09, 0x78, 0x78, 0x05, 0x08, 0x09, 0x20, -/* 0000ADF0 */ 0x20, 0x20, 0x20, 0x01, 0x16, 0x17, 0x18, 0x06, 0xFE, 0xF6, 0x03, 0x05, 0xFE, 0x12, 0x05, 0x06, -/* 0000AE00 */ 0xFE, 0x47, 0x03, 0x06, 0xFE, 0xF7, 0x03, 0x06, 0xFE, 0x99, 0x04, 0x06, 0xFE, 0x35, 0x04, 0x06, -/* 0000AE10 */ 0xFE, 0x88, 0x04, 0x06, 0xFE, 0x68, 0x04, 0x06, 0xFE, 0x46, 0x04, 0x06, 0xFE, 0x47, 0x04, 0x06, -/* 0000AE20 */ 0xFE, 0x48, 0x04, 0x06, 0xFE, 0x49, 0x04, 0x06, 0xFE, 0x4A, 0x04, 0x06, 0xFE, 0x4B, 0x04, 0x06, -/* 0000AE30 */ 0xFE, 0x4C, 0x04, 0x06, 0xFE, 0x4D, 0x04, 0x06, 0xFE, 0x4E, 0x04, 0x07, 0x08, 0xFE, 0x18, 0x02, -/* 0000AE40 */ 0x59, 0x19, 0xB2, 0x15, 0x19, 0x2C, 0x19, 0x15, 0x15, 0x03, 0x00, 0x19, 0x02, 0x09, 0x24, 0x00, -/* 0000AE50 */ 0x8D, 0x05, 0x03, 0x1A, 0x00, 0x00, 0x6B, 0x19, 0x1A, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x1A, -/* 0000AE60 */ 0x5B, 0x01, 0x03, 0x00, 0x00, 0x5B, 0x02, 0x04, 0x00, 0x00, 0xF2, 0x03, 0xFF, 0x19, 0x00, 0x00, -/* 0000AE70 */ 0x00, 0x00, 0x00, 0x00, 0x8D, 0x05, 0x03, 0x1A, 0x00, 0x00, 0x6B, 0x19, 0x1A, 0x01, 0x07, 0x02, -/* 0000AE80 */ 0x00, 0x5A, 0x00, 0x1A, 0x5B, 0x01, 0x15, 0x01, 0x00, 0xF2, 0x02, 0x19, 0x19, 0x01, 0x00, 0x00, -/* 0000AE90 */ 0x00, 0x01, 0x00, 0x94, 0x02, 0x19, 0x91, 0x02, 0x19, 0x01, 0x00, 0xA6, 0x1A, 0x14, 0x0D, 0x00, -/* 0000AEA0 */ 0x19, 0x1A, 0x91, 0x02, 0x19, 0x01, 0x00, 0x60, 0x19, 0x19, 0x02, 0x0F, 0x24, 0x00, 0x19, 0x8D, -/* 0000AEB0 */ 0x05, 0x03, 0x1A, 0x00, 0x00, 0x6B, 0x19, 0x1A, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x1A, 0x5B, -/* 0000AEC0 */ 0x01, 0x03, 0x02, 0x00, 0x5B, 0x02, 0x04, 0x02, 0x00, 0xF2, 0x03, 0xFF, 0x19, 0x00, 0x00, 0x00, -/* 0000AED0 */ 0x00, 0x02, 0x00, 0x8D, 0x05, 0x04, 0x19, 0x02, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x14, 0xCB, -/* 0000AEE0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00, 0x91, 0x02, 0x1B, 0x01, -/* 0000AEF0 */ 0x00, 0x60, 0x1B, 0x1B, 0x03, 0x79, 0x1B, 0x1A, 0x04, 0x91, 0x02, 0x1B, 0x01, 0x00, 0x60, 0x1B, -/* 0000AF00 */ 0x1B, 0x05, 0x79, 0x1B, 0x1A, 0x06, 0x91, 0x02, 0x1B, 0x01, 0x00, 0x60, 0x1B, 0x1B, 0x07, 0x79, -/* 0000AF10 */ 0x1B, 0x1A, 0x08, 0x91, 0x02, 0x1B, 0x01, 0x00, 0x60, 0x1B, 0x1B, 0x09, 0x79, 0x1B, 0x1A, 0x0A, -/* 0000AF20 */ 0x91, 0x02, 0x1B, 0x01, 0x00, 0x60, 0x1B, 0x1B, 0x0B, 0x79, 0x1B, 0x1A, 0x0C, 0x91, 0x02, 0x1B, -/* 0000AF30 */ 0x01, 0x00, 0x60, 0x1B, 0x1B, 0x0D, 0x79, 0x1B, 0x1A, 0x0E, 0x91, 0x02, 0x1B, 0x01, 0x00, 0x60, -/* 0000AF40 */ 0x1B, 0x1B, 0x0F, 0x79, 0x1B, 0x1A, 0x10, 0x91, 0x02, 0x1B, 0x01, 0x00, 0x60, 0x1B, 0x1B, 0x11, -/* 0000AF50 */ 0x79, 0x1B, 0x1A, 0x12, 0x91, 0x02, 0x1B, 0x01, 0x00, 0x60, 0x1B, 0x1B, 0x13, 0x79, 0x1B, 0x1A, -/* 0000AF60 */ 0x14, 0x91, 0x02, 0x1B, 0x01, 0x00, 0x60, 0x1B, 0x1B, 0x15, 0x79, 0x1B, 0x1A, 0x16, 0x91, 0x02, -/* 0000AF70 */ 0x1B, 0x01, 0x00, 0x60, 0x1B, 0x1B, 0x17, 0x79, 0x1B, 0x1A, 0x18, 0x91, 0x02, 0x1B, 0x01, 0x00, -/* 0000AF80 */ 0x60, 0x1B, 0x1B, 0x19, 0x79, 0x1B, 0x1A, 0x1A, 0x91, 0x02, 0x1B, 0x01, 0x00, 0x60, 0x1B, 0x1B, -/* 0000AF90 */ 0x1B, 0x79, 0x1B, 0x1A, 0x1C, 0x91, 0x02, 0x1B, 0x01, 0x00, 0x60, 0x1B, 0x1B, 0x1D, 0x79, 0x1B, -/* 0000AFA0 */ 0x1A, 0x1E, 0x5B, 0x01, 0x1A, 0x03, 0x00, 0x5B, 0x02, 0x13, 0x03, 0x00, 0xEE, 0x03, 0x19, 0x19, -/* 0000AFB0 */ 0x03, 0x00, 0x94, 0x03, 0x19, 0x8D, 0x05, 0x04, 0x19, 0x02, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, -/* 0000AFC0 */ 0x14, 0xCA, 0x1A, 0x5B, 0x01, 0x1A, 0x04, 0x00, 0x5B, 0x02, 0x13, 0x04, 0x00, 0xEE, 0x03, 0x19, -/* 0000AFD0 */ 0x19, 0x04, 0x00, 0x94, 0x04, 0x19, 0x8D, 0x05, 0x06, 0x19, 0x03, 0x00, 0x07, 0x05, 0x00, 0x5A, -/* 0000AFE0 */ 0x00, 0x14, 0x8D, 0x05, 0x16, 0x1A, 0x04, 0x00, 0x5B, 0x01, 0x1A, 0x05, 0x00, 0x8D, 0x05, 0x12, -/* 0000AFF0 */ 0x1A, 0x05, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x14, 0x91, 0x03, 0x1B, 0x06, 0x00, 0x5B, 0x01, -/* 0000B000 */ 0x1B, 0x06, 0x00, 0xEE, 0x02, 0x1A, 0x1A, 0x06, 0x00, 0x5B, 0x02, 0x1A, 0x05, 0x00, 0xD3, 0x00, -/* 0000B010 */ 0x1A, 0x5B, 0x03, 0x1A, 0x05, 0x00, 0x91, 0x02, 0x1A, 0x01, 0x00, 0x5B, 0x04, 0x1A, 0x05, 0x00, -/* 0000B020 */ 0xEE, 0x05, 0xFF, 0x19, 0x05, 0x00, 0x8D, 0x05, 0x04, 0x19, 0x02, 0x00, 0x07, 0x03, 0x00, 0x5A, -/* 0000B030 */ 0x00, 0x14, 0x91, 0x04, 0x1A, 0x07, 0x00, 0x5B, 0x01, 0x1A, 0x07, 0x00, 0x8D, 0x05, 0x08, 0x1A, -/* 0000B040 */ 0x08, 0x00, 0x60, 0x1A, 0x1A, 0x1F, 0x5B, 0x02, 0x1A, 0x07, 0x00, 0xEE, 0x03, 0x00, 0x19, 0x07, -/* 0000B050 */ 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, -/* 0000B060 */ 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0x01, 0x00, 0x00, 0x39, 0x02, 0x00, 0x00, 0x18, -/* 0000B070 */ 0x02, 0x00, 0x00, 0x42, 0x02, 0x00, 0x00, 0x3D, 0x02, 0x00, 0x00, 0x44, 0x02, 0x00, 0x00, 0x3B, -/* 0000B080 */ 0x02, 0x00, 0x00, 0x45, 0x02, 0x00, 0x00, 0x3F, 0x02, 0x00, 0x00, 0x3A, 0x02, 0x00, 0x00, 0x3C, -/* 0000B090 */ 0x02, 0x00, 0x00, 0x3E, 0x02, 0x00, 0x00, 0x41, 0x02, 0x00, 0x00, 0x43, 0x02, 0x00, 0x00, 0xFE, -/* 0000B0A0 */ 0x8A, 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0x2C, 0x02, 0xFE, 0xF3, 0x01, 0xFE, 0xF7, 0x01, 0xFE, 0x26, -/* 0000B0B0 */ 0x02, 0xFE, 0x39, 0x02, 0xFE, 0x0C, 0x02, 0xFE, 0x18, 0x02, 0xFE, 0x33, 0x02, 0xFE, 0x42, 0x02, -/* 0000B0C0 */ 0xFE, 0x2B, 0x02, 0xFE, 0x3D, 0x02, 0xFE, 0x35, 0x02, 0xFE, 0x44, 0x02, 0xFE, 0x28, 0x02, 0xFE, -/* 0000B0D0 */ 0x3B, 0x02, 0xFE, 0x38, 0x02, 0xFE, 0x45, 0x02, 0xFE, 0x2F, 0x02, 0xFE, 0x3F, 0x02, 0xFE, 0x27, -/* 0000B0E0 */ 0x02, 0xFE, 0x3A, 0x02, 0xFE, 0x2A, 0x02, 0xFE, 0x3C, 0x02, 0xFE, 0x2E, 0x02, 0xFE, 0x3E, 0x02, -/* 0000B0F0 */ 0xFE, 0x31, 0x02, 0xFE, 0x41, 0x02, 0xFE, 0x34, 0x02, 0xFE, 0x43, 0x02, 0xFE, 0x15, 0x01, 0xFF, -/* 0000B100 */ 0x08, 0xBD, 0x02, 0x00, 0x0A, 0x05, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3C, 0x00, 0x24, 0x00, 0x90, -/* 0000B110 */ 0x00, 0x22, 0x00, 0x4B, 0x00, 0x19, 0x00, 0x6B, 0x00, 0x24, 0x00, 0x90, 0x00, 0xE2, 0x00, 0xCE, -/* 0000B120 */ 0x03, 0x21, 0x00, 0x3E, 0x00, 0x50, 0x00, 0x98, 0x01, 0x30, 0x00, 0x44, 0x00, 0x00, 0x32, 0xB1, -/* 0000B130 */ 0x00, 0x00, 0xBF, 0x5C, 0x0E, 0x01, 0x00, 0x88, 0x01, 0x00, 0xFE, 0xEA, 0x0E, 0x60, 0xA2, 0x41, -/* 0000B140 */ 0xD1, 0x00, 0xCB, 0xFF, 0x6E, 0xC3, 0x02, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, -/* 0000B150 */ 0x6E, 0xC3, 0x02, 0x00, 0xFE, 0x27, 0x01, 0xFE, 0x27, 0x01, 0x41, 0x04, 0x05, 0x07, 0x05, 0x18, -/* 0000B160 */ 0x18, 0x06, 0x02, 0x01, 0x01, 0x05, 0x06, 0x06, 0xFE, 0x88, 0x04, 0x05, 0xFE, 0xD4, 0x04, 0x08, -/* 0000B170 */ 0x6C, 0x8D, 0x01, 0x03, 0x07, 0x00, 0x00, 0x96, 0x07, 0x07, 0x05, 0x00, 0x00, 0xA6, 0x08, 0x15, -/* 0000B180 */ 0x08, 0x00, 0x07, 0x08, 0x14, 0x03, 0x00, 0x05, 0x02, 0x09, 0x4D, 0x00, 0x8D, 0x06, 0x06, 0x07, -/* 0000B190 */ 0x01, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x04, 0x8D, 0x06, 0x13, 0x08, 0x02, 0x00, 0x5B, 0x01, -/* 0000B1A0 */ 0x08, 0x00, 0x00, 0x8D, 0x01, 0x02, 0x08, 0x03, 0x00, 0x5B, 0x02, 0x08, 0x00, 0x00, 0x2F, 0x08, -/* 0000B1B0 */ 0x03, 0x05, 0x5B, 0x03, 0x08, 0x00, 0x00, 0xEE, 0x04, 0x07, 0x07, 0x00, 0x00, 0x0E, 0x18, 0x00, -/* 0000B1C0 */ 0x07, 0x8D, 0x01, 0x04, 0x07, 0x04, 0x00, 0x8D, 0x01, 0x03, 0x08, 0x00, 0x00, 0x96, 0x08, 0x08, -/* 0000B1D0 */ 0x05, 0x01, 0x00, 0x9B, 0x08, 0x07, 0x05, 0x00, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFF, 0x9C, 0xC3, -/* 0000B1E0 */ 0x02, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0xA6, 0x00, 0x1A, 0x00, 0x52, 0x00, 0x00, -/* 0000B1F0 */ 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0xC2, 0x0E, 0x39, 0xA0, 0x41, 0xD1, 0x00, -/* 0000B200 */ 0xC9, 0xFF, 0xC6, 0xB9, 0x02, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFF, 0xC6, 0xB9, -/* 0000B210 */ 0x02, 0x00, 0xFE, 0x60, 0x02, 0xFE, 0x60, 0x02, 0x01, 0x05, 0x05, 0x08, 0x04, 0x23, 0x22, 0x05, -/* 0000B220 */ 0x03, 0x01, 0x04, 0x04, 0x04, 0x04, 0x07, 0x06, 0xFE, 0xF6, 0x03, 0x05, 0xFE, 0x10, 0x05, 0x06, -/* 0000B230 */ 0xFE, 0x47, 0x03, 0x94, 0x59, 0x08, 0xB2, 0x05, 0x08, 0x2C, 0x08, 0x05, 0x15, 0x03, 0x00, 0x08, -/* 0000B240 */ 0x02, 0x09, 0x24, 0x00, 0x8D, 0x05, 0x03, 0x09, 0x00, 0x00, 0x6B, 0x08, 0x09, 0x00, 0x07, 0x03, -/* 0000B250 */ 0x00, 0x5A, 0x00, 0x09, 0x5B, 0x01, 0x03, 0x00, 0x00, 0x5B, 0x02, 0x04, 0x00, 0x00, 0xF2, 0x03, -/* 0000B260 */ 0xFF, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8D, 0x05, 0x03, 0x09, 0x00, 0x00, 0x6B, 0x08, -/* 0000B270 */ 0x09, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x09, 0x5B, 0x01, 0x05, 0x01, 0x00, 0xF2, 0x02, 0x08, -/* 0000B280 */ 0x08, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x06, 0x08, 0xA6, 0x08, 0x14, 0x08, 0x00, 0x06, -/* 0000B290 */ 0x08, 0x60, 0x08, 0x06, 0x02, 0x0F, 0x24, 0x00, 0x08, 0x8D, 0x05, 0x03, 0x09, 0x00, 0x00, 0x6B, -/* 0000B2A0 */ 0x08, 0x09, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x09, 0x5B, 0x01, 0x03, 0x02, 0x00, 0x5B, 0x02, -/* 0000B2B0 */ 0x04, 0x02, 0x00, 0xF2, 0x03, 0xFF, 0x08, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x60, 0x00, 0x06, -/* 0000B2C0 */ 0x03, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x8A, 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0x2C, -/* 0000B2D0 */ 0x02, 0xFE, 0x25, 0x02, 0xFF, 0xEC, 0xB9, 0x02, 0x00, 0x07, 0x05, 0x00, 0x00, 0x00, 0x0B, 0x00, -/* 0000B2E0 */ 0x3C, 0x00, 0x24, 0x00, 0x88, 0x00, 0x22, 0x00, 0x4B, 0x00, 0x0F, 0x00, 0x6B, 0x00, 0x24, 0x00, -/* 0000B2F0 */ 0x88, 0x00, 0x09, 0x00, 0x37, 0x00, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, -/* 0000B300 */ 0xA3, 0x0E, 0x10, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x26, 0x04, 0xC8, 0xFF, 0x1F, 0xB3, 0x02, 0x00, -/* 0000B310 */ 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0x1F, 0xB3, 0x02, 0x00, 0xFE, 0xFD, 0x03, 0xFE, -/* 0000B320 */ 0xFD, 0x03, 0x01, 0x08, 0x06, 0x0B, 0x07, 0x56, 0x52, 0x05, 0x0A, 0x06, 0x06, 0x06, 0x06, 0x06, -/* 0000B330 */ 0x0A, 0x06, 0xFE, 0xF6, 0x03, 0x05, 0xFE, 0x10, 0x05, 0x06, 0xFE, 0x47, 0x03, 0x08, 0xFE, 0x72, -/* 0000B340 */ 0x01, 0x59, 0x0B, 0xB2, 0x07, 0x0B, 0x4F, 0x08, 0x4F, 0x09, 0x2C, 0x0B, 0x07, 0x15, 0x03, 0x00, -/* 0000B350 */ 0x0B, 0x02, 0x09, 0x24, 0x00, 0x8D, 0x05, 0x03, 0x0C, 0x00, 0x00, 0x6B, 0x0B, 0x0C, 0x00, 0x07, -/* 0000B360 */ 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x03, 0x00, 0x00, 0x5B, 0x02, 0x04, 0x00, 0x00, 0xF2, -/* 0000B370 */ 0x03, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8D, 0x05, 0x03, 0x0C, 0x00, 0x00, 0x6B, -/* 0000B380 */ 0x0B, 0x0C, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x07, 0x01, 0x00, 0xF2, 0x02, -/* 0000B390 */ 0x0B, 0x0B, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x08, 0x0B, 0xA6, 0x0B, 0x14, 0x08, 0x00, -/* 0000B3A0 */ 0x08, 0x0B, 0x60, 0x0B, 0x08, 0x02, 0x0F, 0x24, 0x00, 0x0B, 0x8D, 0x05, 0x03, 0x0C, 0x00, 0x00, -/* 0000B3B0 */ 0x6B, 0x0B, 0x0C, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x03, 0x02, 0x00, 0x5B, -/* 0000B3C0 */ 0x02, 0x04, 0x02, 0x00, 0xF2, 0x03, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xA6, 0x0B, -/* 0000B3D0 */ 0x15, 0x03, 0x00, 0x06, 0x0B, 0x09, 0x50, 0x00, 0x8D, 0x05, 0x21, 0x0B, 0x01, 0x00, 0x07, 0x02, -/* 0000B3E0 */ 0x00, 0x5A, 0x00, 0x05, 0x5B, 0x01, 0x06, 0x03, 0x00, 0xEE, 0x02, 0x0B, 0x0B, 0x03, 0x00, 0x0F, -/* 0000B3F0 */ 0x1B, 0x00, 0x0B, 0x8D, 0x05, 0x20, 0x0B, 0x02, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x05, 0x5B, -/* 0000B400 */ 0x01, 0x06, 0x04, 0x00, 0xEE, 0x02, 0x0B, 0x0B, 0x04, 0x00, 0x0F, 0x1A, 0x00, 0x0B, 0x8D, 0x05, -/* 0000B410 */ 0x03, 0x0C, 0x00, 0x00, 0x6B, 0x0B, 0x0C, 0x03, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x0C, 0xF2, 0x01, -/* 0000B420 */ 0xFF, 0x0B, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0xA6, 0x0B, 0x47, 0x09, 0x0B, 0xA6, 0x0B, 0x15, -/* 0000B430 */ 0x03, 0x00, 0x06, 0x0B, 0x09, 0x25, 0x00, 0x8D, 0x05, 0x24, 0x0C, 0x03, 0x00, 0x6B, 0x0B, 0x0C, -/* 0000B440 */ 0x04, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x06, 0x06, 0x00, 0xF2, 0x02, 0x0B, 0x0B, -/* 0000B450 */ 0x04, 0x00, 0x00, 0x00, 0x06, 0x00, 0x47, 0x09, 0x0B, 0x09, 0x15, 0x00, 0x8D, 0x05, 0x1C, 0x0B, -/* 0000B460 */ 0x04, 0x00, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x05, 0xEE, 0x01, 0x0B, 0x0B, 0x07, 0x00, 0x47, 0x09, -/* 0000B470 */ 0x0B, 0x8D, 0x05, 0x0B, 0x0B, 0x05, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x05, 0x8D, 0x05, 0x03, -/* 0000B480 */ 0x0D, 0x00, 0x00, 0x6B, 0x0C, 0x0D, 0x05, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0D, 0x5B, 0x01, 0x09, -/* 0000B490 */ 0x09, 0x00, 0x5B, 0x02, 0x08, 0x09, 0x00, 0xF2, 0x03, 0x0C, 0x0C, 0x05, 0x00, 0x00, 0x00, 0x09, -/* 0000B4A0 */ 0x00, 0x5B, 0x01, 0x0C, 0x08, 0x00, 0xEE, 0x02, 0x00, 0x0B, 0x08, 0x00, 0x09, 0x02, 0x00, 0xA6, -/* 0000B4B0 */ 0x00, 0x24, 0x00, 0xFE, 0x8A, 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0x2C, 0x02, 0xFE, 0x86, 0x02, 0xFE, -/* 0000B4C0 */ 0x38, 0x03, 0xFE, 0xE6, 0x01, 0xFF, 0x4B, 0xB3, 0x02, 0x00, 0x0D, 0x09, 0x00, 0x00, 0x00, 0x0B, -/* 0000B4D0 */ 0x00, 0x38, 0x00, 0x24, 0x00, 0x7F, 0x00, 0x22, 0x00, 0x47, 0x00, 0x0F, 0x00, 0x67, 0x00, 0x24, -/* 0000B4E0 */ 0x00, 0x80, 0x00, 0x40, 0x00, 0x56, 0x00, 0x1A, 0x00, 0x48, 0x00, 0x05, 0x00, 0x2F, 0x00, 0x0A, -/* 0000B4F0 */ 0x00, 0x32, 0x00, 0x25, 0x00, 0x59, 0x00, 0x15, 0x00, 0x42, 0x00, 0x40, 0x00, 0x51, 0x00, 0x00, -/* 0000B500 */ 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x88, 0x0E, 0x10, 0xA3, 0x41, 0xC1, 0x00, -/* 0000B510 */ 0xFE, 0x47, 0x03, 0xC7, 0xFF, 0x9D, 0xAE, 0x02, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x01, -/* 0000B520 */ 0xFF, 0x9D, 0xAE, 0x02, 0x00, 0xFE, 0x26, 0x04, 0xFE, 0x26, 0x04, 0x01, 0x09, 0x05, 0x0B, 0x05, -/* 0000B530 */ 0x60, 0x59, 0x05, 0x09, 0x09, 0x07, 0x06, 0x07, 0x07, 0x0A, 0x08, 0x06, 0xFE, 0x47, 0x03, 0x07, -/* 0000B540 */ 0xFE, 0x8F, 0x01, 0x59, 0x0B, 0xB2, 0x07, 0x0B, 0x4F, 0x08, 0x4F, 0x09, 0x15, 0x05, 0x00, 0x05, -/* 0000B550 */ 0x02, 0xA6, 0x0B, 0x47, 0x05, 0x0B, 0x15, 0x05, 0x00, 0x06, 0x02, 0xA6, 0x0B, 0x47, 0x06, 0x0B, -/* 0000B560 */ 0x4F, 0x08, 0x4F, 0x09, 0x69, 0x06, 0x00, 0x00, 0x00, 0x0B, 0x14, 0x0A, 0x00, 0x07, 0x0B, 0xA6, -/* 0000B570 */ 0x0B, 0x14, 0x03, 0x00, 0x07, 0x0B, 0x09, 0x1E, 0x00, 0x8D, 0x01, 0x02, 0x0B, 0x00, 0x00, 0x4B, -/* 0000B580 */ 0x0B, 0x07, 0x03, 0x00, 0x5B, 0x01, 0x05, 0x00, 0x00, 0x5B, 0x02, 0x06, 0x00, 0x00, 0xC2, 0x03, -/* 0000B590 */ 0x00, 0x0B, 0x00, 0x00, 0x09, 0x39, 0x01, 0x8D, 0x05, 0x24, 0x0C, 0x01, 0x00, 0x6B, 0x0B, 0x0C, -/* 0000B5A0 */ 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x07, 0x01, 0x00, 0xF2, 0x02, 0x0B, 0x0B, -/* 0000B5B0 */ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x08, 0x0B, 0x8D, 0x05, 0x11, 0x0B, 0x02, 0x00, 0x07, -/* 0000B5C0 */ 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x08, 0x02, 0x00, 0xEE, 0x02, 0x0B, 0x0B, 0x02, 0x00, -/* 0000B5D0 */ 0x0F, 0x1F, 0x00, 0x0B, 0x8D, 0x05, 0x03, 0x0C, 0x03, 0x00, 0x6B, 0x0B, 0x0C, 0x01, 0x07, 0x02, -/* 0000B5E0 */ 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x03, 0x03, 0x00, 0xF2, 0x02, 0xFF, 0x0B, 0x01, 0x00, 0x00, -/* 0000B5F0 */ 0x00, 0x03, 0x00, 0x8D, 0x05, 0x03, 0x0C, 0x03, 0x00, 0x6B, 0x0B, 0x0C, 0x02, 0x07, 0x02, 0x00, -/* 0000B600 */ 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x08, 0x04, 0x00, 0xF2, 0x02, 0x0B, 0x0B, 0x02, 0x00, 0x00, 0x00, -/* 0000B610 */ 0x04, 0x00, 0x47, 0x09, 0x0B, 0xA6, 0x0B, 0x14, 0x03, 0x00, 0x09, 0x0B, 0x09, 0x45, 0x00, 0x8D, -/* 0000B620 */ 0x05, 0x04, 0x0B, 0x04, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0xCA, 0x0C, 0x5B, 0x01, 0x0C, -/* 0000B630 */ 0x05, 0x00, 0x5B, 0x02, 0x04, 0x05, 0x00, 0xEE, 0x03, 0x0B, 0x0B, 0x05, 0x00, 0x47, 0x09, 0x0B, -/* 0000B640 */ 0x8D, 0x05, 0x03, 0x0C, 0x03, 0x00, 0x6B, 0x0B, 0x0C, 0x03, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, -/* 0000B650 */ 0x5B, 0x01, 0x08, 0x06, 0x00, 0x5B, 0x02, 0x09, 0x06, 0x00, 0xF2, 0x03, 0xFF, 0x0B, 0x03, 0x00, -/* 0000B660 */ 0x00, 0x00, 0x06, 0x00, 0x8D, 0x02, 0x08, 0x0B, 0x05, 0x00, 0x4B, 0x0B, 0x07, 0x04, 0x00, 0x5A, -/* 0000B670 */ 0x00, 0x02, 0x5B, 0x01, 0x09, 0x07, 0x00, 0x5B, 0x02, 0x05, 0x07, 0x00, 0x5B, 0x03, 0x06, 0x07, -/* 0000B680 */ 0x00, 0xEE, 0x04, 0xFF, 0x0B, 0x07, 0x00, 0x47, 0x0B, 0x09, 0x8D, 0x05, 0x06, 0x0C, 0x06, 0x00, -/* 0000B690 */ 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8D, 0x05, 0x1A, 0x0D, 0x07, 0x00, 0x5B, 0x01, 0x0D, 0x08, -/* 0000B6A0 */ 0x00, 0x8D, 0x01, 0x03, 0x0D, 0x08, 0x00, 0x4B, 0x0D, 0x5B, 0x02, 0x0D, 0x08, 0x00, 0x5B, 0x03, -/* 0000B6B0 */ 0x08, 0x08, 0x00, 0xEE, 0x04, 0x0C, 0x0C, 0x08, 0x00, 0x75, 0x0C, 0x0B, 0x04, 0x60, 0x0B, 0x09, -/* 0000B6C0 */ 0x05, 0x80, 0x0B, 0x0B, 0xF8, 0x00, 0xFA, 0x0B, 0x47, 0x00, 0x08, 0x09, 0x02, 0x00, 0xA6, 0x00, -/* 0000B6D0 */ 0x24, 0x00, 0xFE, 0x36, 0x03, 0xFE, 0x8E, 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0xF0, 0x01, 0xFE, 0x25, -/* 0000B6E0 */ 0x02, 0xFE, 0x25, 0x02, 0xAB, 0xFF, 0xB5, 0xAE, 0x02, 0x00, 0x10, 0x09, 0x00, 0x00, 0x00, 0x0A, -/* 0000B6F0 */ 0x00, 0x15, 0x00, 0x0E, 0x00, 0x2B, 0x00, 0x15, 0x00, 0x43, 0x00, 0x1E, 0x00, 0x58, 0x00, 0x22, -/* 0000B700 */ 0x00, 0x37, 0x00, 0x1B, 0x00, 0x38, 0x00, 0x1F, 0x00, 0x9D, 0x00, 0x22, 0x00, 0x47, 0x00, 0x0A, -/* 0000B710 */ 0x00, 0x3A, 0x00, 0x21, 0x00, 0x3F, 0x00, 0x24, 0x00, 0x58, 0x00, 0x23, 0x00, 0x4F, 0x00, 0x36, -/* 0000B720 */ 0x00, 0x66, 0x00, 0x0B, 0x00, 0x3D, 0x00, 0x08, 0x00, 0x1C, 0x00, 0x00, 0xBF, 0x5D, 0x08, 0xC1, -/* 0000B730 */ 0x03, 0x8D, 0x05, 0x00, 0xFE, 0x81, 0x0E, 0x0D, 0xA2, 0x41, 0xD1, 0x00, 0xC5, 0xFF, 0x1F, 0xAC, -/* 0000B740 */ 0x02, 0x00, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x06, 0x06, 0xFF, 0x1F, 0xAC, 0x02, 0x00, 0xFE, -/* 0000B750 */ 0x9F, 0x01, 0xFE, 0x9F, 0x01, 0x40, 0x04, 0xF8, 0xFE, 0x92, 0x04, 0xFE, 0x93, 0x04, 0xFE, 0x94, -/* 0000B760 */ 0x04, 0x0C, 0x03, 0x0B, 0x08, 0x16, 0x16, 0x04, 0x02, 0x03, 0x01, 0x01, 0x01, 0x01, 0x08, 0x09, -/* 0000B770 */ 0x0A, 0x08, 0x58, 0x94, 0x02, 0x03, 0x94, 0x03, 0x04, 0x94, 0x04, 0x05, 0x94, 0x05, 0x06, 0x8D, -/* 0000B780 */ 0x04, 0x03, 0x0C, 0x00, 0x00, 0x6B, 0x0B, 0x0C, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x8D, -/* 0000B790 */ 0x04, 0x23, 0x0D, 0x01, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x91, 0x02, 0x0E, 0x02, 0x00, -/* 0000B7A0 */ 0x5B, 0x01, 0x0E, 0x01, 0x00, 0xD3, 0x00, 0x0E, 0x5B, 0x02, 0x0E, 0x01, 0x00, 0xEE, 0x03, 0x0D, -/* 0000B7B0 */ 0x0D, 0x01, 0x00, 0x5B, 0x01, 0x0D, 0x00, 0x00, 0x5B, 0x02, 0x07, 0x00, 0x00, 0xF2, 0x03, 0xFF, -/* 0000B7C0 */ 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xEE, 0x01, 0xFF, 0x72, -/* 0000B7D0 */ 0xAC, 0x02, 0x00, 0x02, 0x0C, 0x00, 0x00, 0x00, 0x4A, 0x00, 0x4B, 0x01, 0x00, 0xE1, 0xB7, 0x00, -/* 0000B7E0 */ 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x82, 0x0E, 0x49, 0xA2, 0x41, 0xC3, -/* 0000B7F0 */ 0x00, 0xFE, 0x97, 0x04, 0xC6, 0xFF, 0xAB, 0xAC, 0x02, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, -/* 0000B800 */ 0x01, 0xFF, 0xAB, 0xAC, 0x02, 0x00, 0xEE, 0xEE, 0x01, 0x07, 0x03, 0x07, 0x09, 0x1D, 0x1B, 0x05, -/* 0000B810 */ 0x01, 0x05, 0x01, 0x01, 0x01, 0x01, 0x06, 0x08, 0x77, 0x59, 0x07, 0xB2, 0x05, 0x07, 0x15, 0x05, -/* 0000B820 */ 0x00, 0x03, 0x02, 0xA6, 0x07, 0x47, 0x03, 0x07, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA6, 0x07, 0x47, -/* 0000B830 */ 0x04, 0x07, 0x8D, 0x02, 0x09, 0x08, 0x00, 0x00, 0x4B, 0x08, 0x6B, 0x07, 0x08, 0x00, 0x07, 0x08, -/* 0000B840 */ 0x00, 0x5A, 0x00, 0x08, 0x5B, 0x01, 0x05, 0x00, 0x00, 0x8D, 0x01, 0x02, 0x09, 0x01, 0x00, 0x5B, -/* 0000B850 */ 0x02, 0x09, 0x00, 0x00, 0x8D, 0x01, 0x03, 0x09, 0x02, 0x00, 0x5B, 0x03, 0x09, 0x00, 0x00, 0x8D, -/* 0000B860 */ 0x01, 0x04, 0x09, 0x03, 0x00, 0x5B, 0x04, 0x09, 0x00, 0x00, 0x8D, 0x01, 0x05, 0x09, 0x04, 0x00, -/* 0000B870 */ 0x5B, 0x05, 0x09, 0x00, 0x00, 0x5B, 0x06, 0x03, 0x00, 0x00, 0x5B, 0x07, 0x04, 0x00, 0x00, 0xF2, -/* 0000B880 */ 0x08, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, -/* 0000B890 */ 0x53, 0xFF, 0xD7, 0xAC, 0x02, 0x00, 0x04, 0x05, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0A, -/* 0000B8A0 */ 0x00, 0x2B, 0x00, 0x5C, 0x00, 0x81, 0x00, 0x00, 0xBF, 0x5D, 0x08, 0xC1, 0x03, 0x8D, 0x05, 0x00, -/* 0000B8B0 */ 0xFE, 0x7B, 0x0E, 0x0D, 0xA2, 0x41, 0xD1, 0x00, 0xC3, 0xFF, 0xCB, 0xA9, 0x02, 0x00, 0x01, 0xFF, -/* 0000B8C0 */ 0x00, 0x10, 0x01, 0x00, 0x06, 0x06, 0xFF, 0xCB, 0xA9, 0x02, 0x00, 0xFE, 0x9F, 0x01, 0xFE, 0x9F, -/* 0000B8D0 */ 0x01, 0x40, 0x04, 0xF8, 0xFE, 0x92, 0x04, 0xFE, 0x93, 0x04, 0xFE, 0x94, 0x04, 0x0C, 0x03, 0x0B, -/* 0000B8E0 */ 0x08, 0x16, 0x16, 0x04, 0x02, 0x03, 0x01, 0x01, 0x01, 0x01, 0x08, 0x09, 0x0A, 0x08, 0x58, 0x94, -/* 0000B8F0 */ 0x02, 0x03, 0x94, 0x03, 0x04, 0x94, 0x04, 0x05, 0x94, 0x05, 0x06, 0x8D, 0x04, 0x03, 0x0C, 0x00, -/* 0000B900 */ 0x00, 0x6B, 0x0B, 0x0C, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x8D, 0x04, 0x23, 0x0D, 0x01, -/* 0000B910 */ 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x91, 0x02, 0x0E, 0x02, 0x00, 0x5B, 0x01, 0x0E, 0x01, -/* 0000B920 */ 0x00, 0xD3, 0x00, 0x0E, 0x5B, 0x02, 0x0E, 0x01, 0x00, 0xEE, 0x03, 0x0D, 0x0D, 0x01, 0x00, 0x5B, -/* 0000B930 */ 0x01, 0x0D, 0x00, 0x00, 0x5B, 0x02, 0x07, 0x00, 0x00, 0xF2, 0x03, 0xFF, 0x0B, 0x00, 0x00, 0x00, -/* 0000B940 */ 0x00, 0x00, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xEE, 0x01, 0xFF, 0x1E, 0xAA, 0x02, 0x00, 0x02, -/* 0000B950 */ 0x0C, 0x00, 0x00, 0x00, 0x4A, 0x00, 0x4B, 0x01, 0x00, 0x5D, 0xB9, 0x00, 0x00, 0xBF, 0x5C, 0x08, -/* 0000B960 */ 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x7C, 0x0E, 0x49, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x96, 0x04, -/* 0000B970 */ 0xC4, 0xFF, 0x57, 0xAA, 0x02, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x01, 0xFF, 0x57, 0xAA, -/* 0000B980 */ 0x02, 0x00, 0xEE, 0xEE, 0x01, 0x07, 0x03, 0x07, 0x09, 0x1D, 0x1B, 0x05, 0x01, 0x05, 0x01, 0x01, -/* 0000B990 */ 0x01, 0x01, 0x06, 0x08, 0x77, 0x59, 0x07, 0xB2, 0x05, 0x07, 0x15, 0x05, 0x00, 0x03, 0x02, 0xA6, -/* 0000B9A0 */ 0x07, 0x47, 0x03, 0x07, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA6, 0x07, 0x47, 0x04, 0x07, 0x8D, 0x02, -/* 0000B9B0 */ 0x09, 0x08, 0x00, 0x00, 0x4B, 0x08, 0x6B, 0x07, 0x08, 0x00, 0x07, 0x08, 0x00, 0x5A, 0x00, 0x08, -/* 0000B9C0 */ 0x5B, 0x01, 0x05, 0x00, 0x00, 0x8D, 0x01, 0x02, 0x09, 0x01, 0x00, 0x5B, 0x02, 0x09, 0x00, 0x00, -/* 0000B9D0 */ 0x8D, 0x01, 0x03, 0x09, 0x02, 0x00, 0x5B, 0x03, 0x09, 0x00, 0x00, 0x8D, 0x01, 0x04, 0x09, 0x03, -/* 0000B9E0 */ 0x00, 0x5B, 0x04, 0x09, 0x00, 0x00, 0x8D, 0x01, 0x05, 0x09, 0x04, 0x00, 0x5B, 0x05, 0x09, 0x00, -/* 0000B9F0 */ 0x00, 0x5B, 0x06, 0x03, 0x00, 0x00, 0x5B, 0x07, 0x04, 0x00, 0x00, 0xF2, 0x08, 0x00, 0x07, 0x00, -/* 0000BA00 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x53, 0xFF, 0x83, 0xAA, -/* 0000BA10 */ 0x02, 0x00, 0x04, 0x05, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0A, 0x00, 0x2B, 0x00, 0x5C, -/* 0000BA20 */ 0x00, 0x81, 0x00, 0x00, 0xBF, 0x5D, 0x08, 0xC1, 0x03, 0x8D, 0x05, 0x00, 0xFE, 0x75, 0x0E, 0x0D, -/* 0000BA30 */ 0xA2, 0x41, 0xD1, 0x00, 0xC1, 0xFF, 0x89, 0xA7, 0x02, 0x00, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, -/* 0000BA40 */ 0x06, 0x06, 0xFF, 0x89, 0xA7, 0x02, 0x00, 0xFE, 0x9B, 0x01, 0xFE, 0x9B, 0x01, 0x40, 0x04, 0xF8, -/* 0000BA50 */ 0xFE, 0x92, 0x04, 0xFE, 0x93, 0x04, 0xFE, 0x94, 0x04, 0x0C, 0x03, 0x0B, 0x08, 0x16, 0x16, 0x04, -/* 0000BA60 */ 0x02, 0x03, 0x01, 0x01, 0x01, 0x01, 0x08, 0x09, 0x0A, 0x08, 0x58, 0x94, 0x02, 0x03, 0x94, 0x03, -/* 0000BA70 */ 0x04, 0x94, 0x04, 0x05, 0x94, 0x05, 0x06, 0x8D, 0x04, 0x03, 0x0C, 0x00, 0x00, 0x6B, 0x0B, 0x0C, -/* 0000BA80 */ 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x8D, 0x04, 0x23, 0x0D, 0x01, 0x00, 0x07, 0x03, 0x00, -/* 0000BA90 */ 0x5A, 0x00, 0x02, 0x91, 0x02, 0x0E, 0x02, 0x00, 0x5B, 0x01, 0x0E, 0x01, 0x00, 0xD3, 0x00, 0x0E, -/* 0000BAA0 */ 0x5B, 0x02, 0x0E, 0x01, 0x00, 0xEE, 0x03, 0x0D, 0x0D, 0x01, 0x00, 0x5B, 0x01, 0x0D, 0x00, 0x00, -/* 0000BAB0 */ 0x5B, 0x02, 0x07, 0x00, 0x00, 0xF2, 0x03, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA6, -/* 0000BAC0 */ 0x00, 0x24, 0x00, 0xFE, 0xEE, 0x01, 0xFF, 0xDC, 0xA7, 0x02, 0x00, 0x02, 0x0C, 0x00, 0x00, 0x00, -/* 0000BAD0 */ 0x4A, 0x00, 0x47, 0x01, 0x00, 0xD9, 0xBA, 0x00, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x01, -/* 0000BAE0 */ 0x00, 0xFE, 0x76, 0x0E, 0x49, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x95, 0x04, 0xC2, 0xFF, 0x15, 0xA8, -/* 0000BAF0 */ 0x02, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x01, 0xFF, 0x15, 0xA8, 0x02, 0x00, 0xEA, 0xEA, -/* 0000BB00 */ 0x01, 0x07, 0x03, 0x07, 0x09, 0x1D, 0x1B, 0x05, 0x01, 0x05, 0x01, 0x01, 0x01, 0x01, 0x06, 0x08, -/* 0000BB10 */ 0x77, 0x59, 0x07, 0xB2, 0x05, 0x07, 0x15, 0x05, 0x00, 0x03, 0x02, 0xA6, 0x07, 0x47, 0x03, 0x07, -/* 0000BB20 */ 0x15, 0x05, 0x00, 0x04, 0x02, 0xA6, 0x07, 0x47, 0x04, 0x07, 0x8D, 0x02, 0x09, 0x08, 0x00, 0x00, -/* 0000BB30 */ 0x4B, 0x08, 0x6B, 0x07, 0x08, 0x00, 0x07, 0x08, 0x00, 0x5A, 0x00, 0x08, 0x5B, 0x01, 0x05, 0x00, -/* 0000BB40 */ 0x00, 0x8D, 0x01, 0x02, 0x09, 0x01, 0x00, 0x5B, 0x02, 0x09, 0x00, 0x00, 0x8D, 0x01, 0x03, 0x09, -/* 0000BB50 */ 0x02, 0x00, 0x5B, 0x03, 0x09, 0x00, 0x00, 0x8D, 0x01, 0x04, 0x09, 0x03, 0x00, 0x5B, 0x04, 0x09, -/* 0000BB60 */ 0x00, 0x00, 0x8D, 0x01, 0x05, 0x09, 0x04, 0x00, 0x5B, 0x05, 0x09, 0x00, 0x00, 0x5B, 0x06, 0x03, -/* 0000BB70 */ 0x00, 0x00, 0x5B, 0x07, 0x04, 0x00, 0x00, 0xF2, 0x08, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 0000BB80 */ 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x53, 0xFF, 0x3D, 0xA8, 0x02, 0x00, 0x04, 0x05, -/* 0000BB90 */ 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0A, 0x00, 0x2B, 0x00, 0x5C, 0x00, 0x81, 0x00, 0x00, -/* 0000BBA0 */ 0xBF, 0x5C, 0x0E, 0xC1, 0x07, 0x88, 0x01, 0x00, 0xFE, 0x3E, 0x0E, 0x0C, 0xA3, 0x41, 0xC1, 0x00, -/* 0000BBB0 */ 0xFE, 0x37, 0x04, 0xC0, 0xFF, 0x4A, 0x98, 0x02, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x07, 0x07, -/* 0000BBC0 */ 0xFF, 0x4A, 0x98, 0x02, 0x00, 0xFE, 0x74, 0x06, 0xFE, 0x74, 0x06, 0x01, 0x0F, 0x07, 0x11, 0x0A, -/* 0000BBD0 */ 0x8A, 0x84, 0x04, 0x02, 0x01, 0x0E, 0x0C, 0x04, 0x04, 0x04, 0x04, 0x01, 0x10, 0x06, 0xFE, 0xF6, -/* 0000BBE0 */ 0x03, 0x06, 0xFE, 0x41, 0x04, 0x08, 0x05, 0xFE, 0x91, 0x04, 0x07, 0xFE, 0x4B, 0x02, 0x59, 0x11, -/* 0000BBF0 */ 0xB2, 0x0D, 0x11, 0x4F, 0x0E, 0x4F, 0x0F, 0x2C, 0x11, 0x0D, 0x15, 0x0F, 0x00, 0x11, 0x02, 0x8D, -/* 0000BC00 */ 0x04, 0x0C, 0x11, 0x00, 0x00, 0xE1, 0x11, 0x0D, 0x11, 0x00, 0x0F, 0x24, 0x00, 0x11, 0x8D, 0x04, -/* 0000BC10 */ 0x03, 0x12, 0x01, 0x00, 0x6B, 0x11, 0x12, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x12, 0x5B, 0x01, -/* 0000BC20 */ 0x07, 0x00, 0x00, 0x5B, 0x02, 0x03, 0x00, 0x00, 0xF2, 0x03, 0xFF, 0x11, 0x00, 0x00, 0x00, 0x00, -/* 0000BC30 */ 0x00, 0x00, 0x8D, 0x04, 0x06, 0x11, 0x02, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x04, 0x8D, 0x04, -/* 0000BC40 */ 0x1B, 0x12, 0x03, 0x00, 0x5B, 0x01, 0x12, 0x01, 0x00, 0x8D, 0x04, 0x0C, 0x12, 0x00, 0x00, 0x07, -/* 0000BC50 */ 0x02, 0x00, 0x5B, 0x01, 0x0D, 0x02, 0x00, 0xC2, 0x02, 0x12, 0x12, 0x02, 0x00, 0x5B, 0x02, 0x12, -/* 0000BC60 */ 0x01, 0x00, 0xEE, 0x03, 0x11, 0x11, 0x01, 0x00, 0x47, 0x0E, 0x11, 0x8D, 0x04, 0x21, 0x11, 0x04, -/* 0000BC70 */ 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x0E, 0x03, 0x00, 0xEE, 0x02, 0x11, 0x11, -/* 0000BC80 */ 0x03, 0x00, 0x0F, 0x1B, 0x00, 0x11, 0x8D, 0x04, 0x20, 0x11, 0x05, 0x00, 0x07, 0x02, 0x00, 0x5A, -/* 0000BC90 */ 0x00, 0x04, 0x5B, 0x01, 0x0E, 0x04, 0x00, 0xEE, 0x02, 0x11, 0x11, 0x04, 0x00, 0x0F, 0x06, 0x00, -/* 0000BCA0 */ 0x11, 0x47, 0x00, 0x05, 0x09, 0x90, 0x01, 0xA6, 0x11, 0x47, 0x0F, 0x11, 0x8D, 0x04, 0x03, 0x11, -/* 0000BCB0 */ 0x01, 0x00, 0x60, 0x11, 0x11, 0x01, 0x0E, 0xB3, 0x00, 0x11, 0xA6, 0x11, 0x14, 0x03, 0x00, 0x0B, -/* 0000BCC0 */ 0x11, 0x09, 0xA9, 0x00, 0xA6, 0x11, 0x14, 0x03, 0x00, 0x0C, 0x11, 0x09, 0x9F, 0x00, 0x8D, 0x01, -/* 0000BCD0 */ 0x0A, 0x11, 0x06, 0x00, 0x4B, 0x11, 0x96, 0x11, 0x11, 0x0A, 0x00, 0x00, 0x0E, 0x14, 0x00, 0x11, -/* 0000BCE0 */ 0x8D, 0x01, 0x0A, 0x11, 0x06, 0x00, 0x4B, 0x11, 0x96, 0x11, 0x11, 0x0A, 0x01, 0x00, 0x47, 0x0F, -/* 0000BCF0 */ 0x11, 0x09, 0x79, 0x00, 0x8D, 0x04, 0x04, 0x11, 0x07, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x04, -/* 0000BD00 */ 0xCA, 0x12, 0x5B, 0x01, 0x12, 0x05, 0x00, 0x5B, 0x02, 0x06, 0x05, 0x00, 0xEE, 0x03, 0x11, 0x11, -/* 0000BD10 */ 0x05, 0x00, 0x47, 0x0F, 0x11, 0x8D, 0x01, 0x08, 0x11, 0x08, 0x00, 0x4B, 0x11, 0x07, 0x04, 0x00, -/* 0000BD20 */ 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x0F, 0x06, 0x00, 0xA6, 0x12, 0x5B, 0x02, 0x12, 0x06, 0x00, 0x8D, -/* 0000BD30 */ 0x01, 0x02, 0x12, 0x09, 0x00, 0x4B, 0x12, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x04, 0xA6, 0x13, 0x5B, -/* 0000BD40 */ 0x01, 0x13, 0x07, 0x00, 0x5B, 0x02, 0x08, 0x07, 0x00, 0x5B, 0x03, 0x09, 0x07, 0x00, 0xEE, 0x04, -/* 0000BD50 */ 0x12, 0x12, 0x07, 0x00, 0x5B, 0x03, 0x12, 0x06, 0x00, 0xEE, 0x04, 0xFF, 0x11, 0x06, 0x00, 0x8D, -/* 0000BD60 */ 0x01, 0x0A, 0x11, 0x06, 0x00, 0x4B, 0x11, 0x9B, 0x0F, 0x11, 0x0A, 0x00, 0x00, 0x0F, 0x67, 0x00, -/* 0000BD70 */ 0x0F, 0x8D, 0x04, 0x04, 0x11, 0x07, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x04, 0xCA, 0x12, 0x5B, -/* 0000BD80 */ 0x01, 0x12, 0x08, 0x00, 0x5B, 0x02, 0x06, 0x08, 0x00, 0xEE, 0x03, 0x11, 0x11, 0x08, 0x00, 0x47, -/* 0000BD90 */ 0x0F, 0x11, 0x8D, 0x01, 0x08, 0x11, 0x08, 0x00, 0x4B, 0x11, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x04, -/* 0000BDA0 */ 0x5B, 0x01, 0x0F, 0x09, 0x00, 0x5B, 0x02, 0x0B, 0x09, 0x00, 0x8D, 0x01, 0x02, 0x12, 0x09, 0x00, -/* 0000BDB0 */ 0x4B, 0x12, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x0C, 0x0A, 0x00, 0x5B, 0x02, 0x08, -/* 0000BDC0 */ 0x0A, 0x00, 0x5B, 0x03, 0x09, 0x0A, 0x00, 0xEE, 0x04, 0x12, 0x12, 0x0A, 0x00, 0x5B, 0x03, 0x12, -/* 0000BDD0 */ 0x09, 0x00, 0xEE, 0x04, 0xFF, 0x11, 0x09, 0x00, 0x8D, 0x04, 0x0B, 0x11, 0x0A, 0x00, 0x07, 0x02, -/* 0000BDE0 */ 0x00, 0x5A, 0x00, 0x04, 0x8D, 0x04, 0x03, 0x13, 0x01, 0x00, 0x6B, 0x12, 0x13, 0x02, 0x07, 0x03, -/* 0000BDF0 */ 0x00, 0x5A, 0x00, 0x13, 0x8D, 0x04, 0x24, 0x15, 0x0B, 0x00, 0x6B, 0x14, 0x15, 0x03, 0x07, 0x02, -/* 0000BE00 */ 0x00, 0x5A, 0x00, 0x15, 0x5B, 0x01, 0x0D, 0x0D, 0x00, 0xF2, 0x02, 0x14, 0x14, 0x03, 0x00, 0x00, -/* 0000BE10 */ 0x00, 0x0D, 0x00, 0x5B, 0x01, 0x14, 0x0C, 0x00, 0x5B, 0x02, 0x0F, 0x0C, 0x00, 0xF2, 0x03, 0x12, -/* 0000BE20 */ 0x12, 0x02, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x5B, 0x01, 0x12, 0x0B, 0x00, 0xEE, 0x02, 0x00, 0x11, -/* 0000BE30 */ 0x0B, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x8A, 0x02, 0xFE, 0x61, 0x03, 0xFE, -/* 0000BE40 */ 0xE6, 0x01, 0xFE, 0x38, 0x03, 0xFF, 0xC3, 0x98, 0x02, 0x00, 0x11, 0x09, 0x00, 0x00, 0x00, 0x17, -/* 0000BE50 */ 0x00, 0x4F, 0x00, 0x24, 0x00, 0x50, 0x00, 0x39, 0x00, 0x53, 0x00, 0x36, 0x00, 0x3C, 0x00, 0x06, -/* 0000BE60 */ 0x00, 0x3A, 0x00, 0x05, 0x00, 0x2D, 0x00, 0x22, 0x00, 0xCE, 0x00, 0x12, 0x00, 0x84, 0x00, 0x14, -/* 0000BE70 */ 0x00, 0xA2, 0x00, 0x21, 0x00, 0x3E, 0x00, 0x4A, 0x00, 0x7A, 0x00, 0x0E, 0x00, 0x7C, 0x00, 0x04, -/* 0000BE80 */ 0x00, 0x28, 0x00, 0x21, 0x00, 0x3A, 0x00, 0x46, 0x00, 0x81, 0x00, 0x5F, 0x00, 0x5A, 0x00, 0x00, -/* 0000BE90 */ 0xBF, 0x5C, 0x1A, 0xC1, 0x53, 0xA8, 0x21, 0x00, 0xFE, 0xB1, 0x0D, 0x0C, 0xB3, 0x41, 0xC1, 0x00, -/* 0000BEA0 */ 0xFE, 0x3A, 0x04, 0xBF, 0xFF, 0x33, 0x7B, 0x02, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, -/* 0000BEB0 */ 0xFF, 0x33, 0x7B, 0x02, 0x00, 0xFE, 0x7E, 0x1B, 0xFE, 0x7E, 0x1B, 0x45, 0x1C, 0x29, 0x41, 0x07, -/* 0000BEC0 */ 0xFE, 0xB3, 0x01, 0xFE, 0x93, 0x01, 0x04, 0x01, 0x22, 0x0C, 0x0F, 0x2A, 0x2A, 0x2A, 0x2A, 0x01, -/* 0000BED0 */ 0x01, 0x40, 0x41, 0x06, 0xFE, 0xF6, 0x03, 0x06, 0xFE, 0xC8, 0x04, 0x08, 0x06, 0xFE, 0x47, 0x03, -/* 0000BEE0 */ 0x0B, 0x05, 0xFE, 0x53, 0x04, 0x06, 0xFE, 0x56, 0x04, 0x06, 0xFE, 0x00, 0x04, 0x06, 0xFE, 0xAD, -/* 0000BEF0 */ 0x03, 0x05, 0xFE, 0xBC, 0x03, 0x05, 0xFE, 0xFF, 0x03, 0x06, 0xFE, 0x88, 0x04, 0x06, 0xFE, 0x46, -/* 0000BF00 */ 0x04, 0x06, 0xFE, 0x42, 0x04, 0x06, 0xFE, 0x43, 0x04, 0x06, 0xFE, 0x44, 0x04, 0x06, 0xFE, 0x47, -/* 0000BF10 */ 0x04, 0x06, 0xFE, 0x48, 0x04, 0x06, 0xFE, 0x45, 0x04, 0x06, 0xFE, 0x13, 0x04, 0x06, 0xFE, 0x49, -/* 0000BF20 */ 0x04, 0x06, 0xFE, 0x4A, 0x04, 0x06, 0xFE, 0x4B, 0x04, 0x06, 0xFE, 0x4C, 0x04, 0x06, 0xFE, 0x4D, -/* 0000BF30 */ 0x04, 0x06, 0xFE, 0x4E, 0x04, 0x06, 0xFE, 0x68, 0x04, 0x06, 0xFE, 0xC2, 0x03, 0x05, 0xFE, 0x8D, -/* 0000BF40 */ 0x04, 0x05, 0xFE, 0x8E, 0x04, 0x05, 0xFE, 0x0D, 0x05, 0x05, 0xFE, 0x0E, 0x05, 0x07, 0x06, 0xFE, -/* 0000BF50 */ 0xB4, 0x03, 0x06, 0xFE, 0xB3, 0x03, 0x0C, 0x05, 0xFE, 0x0F, 0x05, 0x06, 0xFE, 0x54, 0x04, 0x01, -/* 0000BF60 */ 0x00, 0xFE, 0x0C, 0x07, 0xA6, 0x3F, 0x2C, 0x42, 0x29, 0x0D, 0x03, 0x00, 0x42, 0x02, 0x09, 0x1A, -/* 0000BF70 */ 0x00, 0x8D, 0x04, 0x03, 0x43, 0x00, 0x00, 0x6B, 0x42, 0x43, 0x00, 0x07, 0x01, 0x00, 0x5A, 0x00, -/* 0000BF80 */ 0x43, 0xF2, 0x01, 0xFF, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8D, 0x04, 0x06, 0x42, 0x01, -/* 0000BF90 */ 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x04, 0x8D, 0x04, 0x13, 0x43, 0x02, 0x00, 0x5B, 0x01, 0x43, -/* 0000BFA0 */ 0x01, 0x00, 0x5B, 0x02, 0x29, 0x01, 0x00, 0x5B, 0x03, 0x03, 0x01, 0x00, 0xEE, 0x04, 0x42, 0x42, -/* 0000BFB0 */ 0x01, 0x00, 0x0E, 0x2C, 0x00, 0x42, 0x60, 0x42, 0x29, 0x01, 0x0E, 0x24, 0x00, 0x42, 0x8D, 0x04, -/* 0000BFC0 */ 0x03, 0x43, 0x00, 0x00, 0x6B, 0x42, 0x43, 0x02, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x43, 0x5B, 0x01, -/* 0000BFD0 */ 0x05, 0x02, 0x00, 0x5B, 0x02, 0x05, 0x02, 0x00, 0xF2, 0x03, 0xFF, 0x42, 0x02, 0x00, 0x00, 0x00, -/* 0000BFE0 */ 0x02, 0x00, 0x75, 0x06, 0x29, 0x03, 0x8D, 0x01, 0x02, 0x42, 0x03, 0x00, 0x4B, 0x42, 0x07, 0x04, -/* 0000BFF0 */ 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x2B, 0x03, 0x00, 0x5B, 0x02, 0x07, 0x03, 0x00, 0x5B, 0x03, -/* 0000C000 */ 0x08, 0x03, 0x00, 0xEE, 0x04, 0x42, 0x42, 0x03, 0x00, 0x47, 0x2B, 0x42, 0x8D, 0x03, 0x02, 0x42, -/* 0000C010 */ 0x04, 0x00, 0x4B, 0x42, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x2B, 0x04, 0x00, 0x5B, -/* 0000C020 */ 0x02, 0x09, 0x04, 0x00, 0x5B, 0x03, 0x0A, 0x04, 0x00, 0xCD, 0x43, 0x02, 0x00, 0x00, 0x9F, 0x00, -/* 0000C030 */ 0x0B, 0x43, 0x9F, 0x01, 0x0C, 0x43, 0x5B, 0x04, 0x43, 0x04, 0x00, 0x5B, 0x05, 0x0C, 0x04, 0x00, -/* 0000C040 */ 0xEE, 0x06, 0x42, 0x42, 0x04, 0x00, 0x47, 0x2E, 0x42, 0x8D, 0x03, 0x02, 0x42, 0x04, 0x00, 0x4B, -/* 0000C050 */ 0x42, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x2B, 0x05, 0x00, 0x5B, 0x02, 0x0D, 0x05, -/* 0000C060 */ 0x00, 0x5B, 0x03, 0x0A, 0x05, 0x00, 0xA6, 0x43, 0x5B, 0x04, 0x43, 0x05, 0x00, 0xA6, 0x43, 0x5B, -/* 0000C070 */ 0x05, 0x43, 0x05, 0x00, 0xEE, 0x06, 0x42, 0x42, 0x05, 0x00, 0x47, 0x2F, 0x42, 0xA6, 0x42, 0x15, -/* 0000C080 */ 0x03, 0x00, 0x2F, 0x42, 0x09, 0x25, 0x00, 0x8D, 0x04, 0x03, 0x43, 0x00, 0x00, 0x6B, 0x42, 0x43, -/* 0000C090 */ 0x04, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x43, 0x5B, 0x01, 0x2F, 0x06, 0x00, 0xF2, 0x02, 0x42, 0x42, -/* 0000C0A0 */ 0x04, 0x00, 0x00, 0x00, 0x06, 0x00, 0x47, 0x2F, 0x42, 0x09, 0x1D, 0x00, 0x8D, 0x04, 0x03, 0x43, -/* 0000C0B0 */ 0x00, 0x00, 0x6B, 0x42, 0x43, 0x05, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x43, 0xF2, 0x01, 0x42, 0x42, -/* 0000C0C0 */ 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x47, 0x2F, 0x42, 0xA6, 0x42, 0x14, 0x03, 0x00, 0x2F, 0x42, -/* 0000C0D0 */ 0x09, 0x1A, 0x00, 0x8D, 0x04, 0x03, 0x43, 0x00, 0x00, 0x6B, 0x42, 0x43, 0x06, 0x07, 0x01, 0x00, -/* 0000C0E0 */ 0x5A, 0x00, 0x43, 0xF2, 0x01, 0xFF, 0x42, 0x06, 0x00, 0x00, 0x00, 0x08, 0x00, 0x8D, 0x03, 0x02, -/* 0000C0F0 */ 0x42, 0x04, 0x00, 0x4B, 0x42, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x2B, 0x09, 0x00, -/* 0000C100 */ 0x5B, 0x02, 0x0E, 0x09, 0x00, 0x5B, 0x03, 0x0A, 0x09, 0x00, 0xCD, 0x43, 0x03, 0x01, 0x00, 0x9F, -/* 0000C110 */ 0x00, 0x0F, 0x43, 0x9F, 0x01, 0x10, 0x43, 0x9F, 0x02, 0x11, 0x43, 0x5B, 0x04, 0x43, 0x09, 0x00, -/* 0000C120 */ 0xA6, 0x43, 0x5B, 0x05, 0x43, 0x09, 0x00, 0xEE, 0x06, 0x42, 0x42, 0x09, 0x00, 0x47, 0x30, 0x42, -/* 0000C130 */ 0x8D, 0x03, 0x02, 0x42, 0x04, 0x00, 0x4B, 0x42, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, -/* 0000C140 */ 0x2B, 0x0A, 0x00, 0x5B, 0x02, 0x12, 0x0A, 0x00, 0x5B, 0x03, 0x0A, 0x0A, 0x00, 0xCD, 0x43, 0x03, -/* 0000C150 */ 0x02, 0x00, 0x9F, 0x00, 0x0F, 0x43, 0x9F, 0x01, 0x10, 0x43, 0x9F, 0x02, 0x11, 0x43, 0x5B, 0x04, -/* 0000C160 */ 0x43, 0x0A, 0x00, 0xA6, 0x43, 0x5B, 0x05, 0x43, 0x0A, 0x00, 0xEE, 0x06, 0x42, 0x42, 0x0A, 0x00, -/* 0000C170 */ 0x47, 0x31, 0x42, 0x8D, 0x03, 0x02, 0x42, 0x04, 0x00, 0x4B, 0x42, 0x07, 0x06, 0x00, 0x5A, 0x00, -/* 0000C180 */ 0x04, 0x5B, 0x01, 0x2B, 0x0B, 0x00, 0x5B, 0x02, 0x13, 0x0B, 0x00, 0x5B, 0x03, 0x0A, 0x0B, 0x00, -/* 0000C190 */ 0xCD, 0x43, 0x02, 0x03, 0x00, 0x9F, 0x00, 0x14, 0x43, 0x9F, 0x01, 0x15, 0x43, 0x5B, 0x04, 0x43, -/* 0000C1A0 */ 0x0B, 0x00, 0xA6, 0x43, 0x5B, 0x05, 0x43, 0x0B, 0x00, 0xEE, 0x06, 0x42, 0x42, 0x0B, 0x00, 0x47, -/* 0000C1B0 */ 0x32, 0x42, 0x8D, 0x03, 0x02, 0x42, 0x04, 0x00, 0x4B, 0x42, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, -/* 0000C1C0 */ 0x5B, 0x01, 0x2B, 0x0C, 0x00, 0x5B, 0x02, 0x16, 0x0C, 0x00, 0x5B, 0x03, 0x0A, 0x0C, 0x00, 0xCD, -/* 0000C1D0 */ 0x43, 0x05, 0x04, 0x00, 0x9F, 0x00, 0x14, 0x43, 0x9F, 0x01, 0x15, 0x43, 0x9F, 0x02, 0x0F, 0x43, -/* 0000C1E0 */ 0x9F, 0x03, 0x10, 0x43, 0x9F, 0x04, 0x11, 0x43, 0x5B, 0x04, 0x43, 0x0C, 0x00, 0xA6, 0x43, 0x5B, -/* 0000C1F0 */ 0x05, 0x43, 0x0C, 0x00, 0xEE, 0x06, 0x42, 0x42, 0x0C, 0x00, 0x47, 0x33, 0x42, 0x8D, 0x03, 0x02, -/* 0000C200 */ 0x42, 0x04, 0x00, 0x4B, 0x42, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x2B, 0x0D, 0x00, -/* 0000C210 */ 0x5B, 0x02, 0x17, 0x0D, 0x00, 0x5B, 0x03, 0x0A, 0x0D, 0x00, 0xCD, 0x43, 0x02, 0x05, 0x00, 0x9F, -/* 0000C220 */ 0x00, 0x14, 0x43, 0x9F, 0x01, 0x15, 0x43, 0x5B, 0x04, 0x43, 0x0D, 0x00, 0xA6, 0x43, 0x5B, 0x05, -/* 0000C230 */ 0x43, 0x0D, 0x00, 0xEE, 0x06, 0x42, 0x42, 0x0D, 0x00, 0x47, 0x34, 0x42, 0x8D, 0x03, 0x02, 0x42, -/* 0000C240 */ 0x04, 0x00, 0x4B, 0x42, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x2B, 0x0E, 0x00, 0x5B, -/* 0000C250 */ 0x02, 0x18, 0x0E, 0x00, 0x5B, 0x03, 0x0A, 0x0E, 0x00, 0xCD, 0x43, 0x02, 0x06, 0x00, 0x9F, 0x00, -/* 0000C260 */ 0x14, 0x43, 0x9F, 0x01, 0x15, 0x43, 0x5B, 0x04, 0x43, 0x0E, 0x00, 0xA6, 0x43, 0x5B, 0x05, 0x43, -/* 0000C270 */ 0x0E, 0x00, 0xEE, 0x06, 0x42, 0x42, 0x0E, 0x00, 0x47, 0x35, 0x42, 0x8D, 0x03, 0x02, 0x42, 0x04, -/* 0000C280 */ 0x00, 0x4B, 0x42, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x2B, 0x0F, 0x00, 0x5B, 0x02, -/* 0000C290 */ 0x19, 0x0F, 0x00, 0x5B, 0x03, 0x0A, 0x0F, 0x00, 0xCD, 0x43, 0x02, 0x07, 0x00, 0x9F, 0x00, 0x14, -/* 0000C2A0 */ 0x43, 0x9F, 0x01, 0x15, 0x43, 0x5B, 0x04, 0x43, 0x0F, 0x00, 0xA6, 0x43, 0x5B, 0x05, 0x43, 0x0F, -/* 0000C2B0 */ 0x00, 0xEE, 0x06, 0x42, 0x42, 0x0F, 0x00, 0x47, 0x36, 0x42, 0x8D, 0x03, 0x02, 0x42, 0x04, 0x00, -/* 0000C2C0 */ 0x4B, 0x42, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x2B, 0x10, 0x00, 0x5B, 0x02, 0x1A, -/* 0000C2D0 */ 0x10, 0x00, 0x5B, 0x03, 0x0A, 0x10, 0x00, 0xCD, 0x43, 0x02, 0x08, 0x00, 0x9F, 0x00, 0x14, 0x43, -/* 0000C2E0 */ 0x9F, 0x01, 0x15, 0x43, 0x5B, 0x04, 0x43, 0x10, 0x00, 0xA6, 0x43, 0x5B, 0x05, 0x43, 0x10, 0x00, -/* 0000C2F0 */ 0xEE, 0x06, 0x42, 0x42, 0x10, 0x00, 0x47, 0x37, 0x42, 0x8D, 0x03, 0x02, 0x42, 0x04, 0x00, 0x4B, -/* 0000C300 */ 0x42, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x2B, 0x11, 0x00, 0x5B, 0x02, 0x1B, 0x11, -/* 0000C310 */ 0x00, 0x5B, 0x03, 0x0A, 0x11, 0x00, 0xCD, 0x43, 0x02, 0x09, 0x00, 0x9F, 0x00, 0x10, 0x43, 0x9F, -/* 0000C320 */ 0x01, 0x11, 0x43, 0x5B, 0x04, 0x43, 0x11, 0x00, 0xA6, 0x43, 0x5B, 0x05, 0x43, 0x11, 0x00, 0xEE, -/* 0000C330 */ 0x06, 0x42, 0x42, 0x11, 0x00, 0x47, 0x38, 0x42, 0x0E, 0x37, 0x00, 0x35, 0x8D, 0x03, 0x02, 0x43, -/* 0000C340 */ 0x04, 0x00, 0x4B, 0x43, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x2B, 0x12, 0x00, 0x5B, -/* 0000C350 */ 0x02, 0x1C, 0x12, 0x00, 0x5B, 0x03, 0x1D, 0x12, 0x00, 0xA6, 0x44, 0x5B, 0x04, 0x44, 0x12, 0x00, -/* 0000C360 */ 0xA6, 0x44, 0x5B, 0x05, 0x44, 0x12, 0x00, 0xEE, 0x06, 0x43, 0x43, 0x12, 0x00, 0x47, 0x42, 0x43, -/* 0000C370 */ 0x09, 0x05, 0x00, 0xA6, 0x43, 0x47, 0x42, 0x43, 0x47, 0x39, 0x42, 0x8D, 0x03, 0x02, 0x42, 0x04, -/* 0000C380 */ 0x00, 0x4B, 0x42, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x2B, 0x13, 0x00, 0x5B, 0x02, -/* 0000C390 */ 0x1E, 0x13, 0x00, 0x5B, 0x03, 0x0A, 0x13, 0x00, 0xCD, 0x43, 0x02, 0x0A, 0x00, 0x9F, 0x00, 0x1F, -/* 0000C3A0 */ 0x43, 0x9F, 0x01, 0x0C, 0x43, 0x5B, 0x04, 0x43, 0x13, 0x00, 0x5B, 0x05, 0x0C, 0x13, 0x00, 0xEE, -/* 0000C3B0 */ 0x06, 0x42, 0x42, 0x13, 0x00, 0x47, 0x3A, 0x42, 0xA6, 0x42, 0x15, 0x03, 0x00, 0x39, 0x42, 0x09, -/* 0000C3C0 */ 0x13, 0x00, 0x0E, 0x06, 0x00, 0x39, 0x47, 0x43, 0x20, 0x09, 0x03, 0x00, 0x47, 0x43, 0x21, 0x47, -/* 0000C3D0 */ 0x42, 0x43, 0x09, 0x05, 0x00, 0xA6, 0x43, 0x47, 0x42, 0x43, 0x47, 0x3B, 0x42, 0x8D, 0x01, 0x03, -/* 0000C3E0 */ 0x42, 0x05, 0x00, 0x4B, 0x42, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, 0x8D, 0x04, 0x04, 0x43, 0x06, -/* 0000C3F0 */ 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x04, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 0000C400 */ 0x44, 0x00, 0x00, 0x00, 0x79, 0x30, 0x44, 0x07, 0x79, 0x31, 0x44, 0x08, 0x79, 0x32, 0x44, 0x09, -/* 0000C410 */ 0x79, 0x33, 0x44, 0x0A, 0x79, 0x34, 0x44, 0x0B, 0x79, 0x35, 0x44, 0x0C, 0x79, 0x36, 0x44, 0x0D, -/* 0000C420 */ 0x79, 0x37, 0x44, 0x0E, 0x79, 0x38, 0x44, 0x0F, 0x5B, 0x01, 0x44, 0x15, 0x00, 0x5B, 0x02, 0x22, -/* 0000C430 */ 0x15, 0x00, 0xEE, 0x03, 0x43, 0x43, 0x15, 0x00, 0x5B, 0x01, 0x43, 0x14, 0x00, 0xEE, 0x02, 0x42, -/* 0000C440 */ 0x42, 0x14, 0x00, 0x47, 0x3C, 0x42, 0x8D, 0x03, 0x07, 0x42, 0x07, 0x00, 0x4B, 0x42, 0x07, 0x02, -/* 0000C450 */ 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x2A, 0x16, 0x00, 0xEE, 0x02, 0x42, 0x42, 0x16, 0x00, 0x47, -/* 0000C460 */ 0x2A, 0x42, 0x8D, 0x04, 0x2A, 0x42, 0x08, 0x00, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, -/* 0000C470 */ 0x2A, 0x17, 0x00, 0x5B, 0x02, 0x2E, 0x17, 0x00, 0xCD, 0x43, 0x02, 0x0B, 0x00, 0x9F, 0x00, 0x23, -/* 0000C480 */ 0x43, 0x9F, 0x01, 0x24, 0x43, 0x5B, 0x03, 0x43, 0x17, 0x00, 0x8D, 0x04, 0x2B, 0x43, 0x09, 0x00, -/* 0000C490 */ 0x5B, 0x04, 0x43, 0x17, 0x00, 0xEE, 0x05, 0x42, 0x42, 0x17, 0x00, 0x47, 0x3D, 0x42, 0x75, 0x2E, -/* 0000C4A0 */ 0x29, 0x10, 0x75, 0x2F, 0x29, 0x11, 0x60, 0x42, 0x3D, 0x12, 0x75, 0x42, 0x29, 0x13, 0x75, 0x30, -/* 0000C4B0 */ 0x29, 0x14, 0x75, 0x31, 0x29, 0x15, 0x75, 0x32, 0x29, 0x16, 0x75, 0x33, 0x29, 0x17, 0x75, 0x34, -/* 0000C4C0 */ 0x29, 0x18, 0x75, 0x35, 0x29, 0x19, 0x75, 0x36, 0x29, 0x1A, 0x75, 0x37, 0x29, 0x1B, 0x75, 0x38, -/* 0000C4D0 */ 0x29, 0x1C, 0x75, 0x39, 0x29, 0x1D, 0x75, 0x3A, 0x29, 0x1E, 0x75, 0x3B, 0x29, 0x1F, 0x75, 0x3C, -/* 0000C4E0 */ 0x29, 0x20, 0x47, 0x3E, 0x25, 0xE5, 0x22, 0x00, 0x8D, 0x03, 0x0B, 0x42, 0x0A, 0x00, 0x4B, 0x42, -/* 0000C4F0 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x29, 0x18, 0x00, 0x5B, 0x02, 0x25, 0x18, 0x00, -/* 0000C500 */ 0xEE, 0x03, 0xFF, 0x42, 0x18, 0x00, 0xE9, 0x09, 0x69, 0x00, 0xE7, 0x2C, 0x06, 0x8D, 0x04, 0x22, -/* 0000C510 */ 0x42, 0x0B, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x2C, 0x19, 0x00, 0xEE, 0x02, -/* 0000C520 */ 0xFF, 0x42, 0x19, 0x00, 0x8D, 0x01, 0x02, 0x42, 0x03, 0x00, 0x4B, 0x42, 0x07, 0x04, 0x00, 0x5A, -/* 0000C530 */ 0x00, 0x04, 0x5B, 0x01, 0x2B, 0x1A, 0x00, 0x5B, 0x02, 0x26, 0x1A, 0x00, 0x5B, 0x03, 0x27, 0x1A, -/* 0000C540 */ 0x00, 0xEE, 0x04, 0x42, 0x42, 0x1A, 0x00, 0x47, 0x3F, 0x42, 0x47, 0x42, 0x29, 0x8D, 0x01, 0x03, -/* 0000C550 */ 0x43, 0x05, 0x00, 0x4B, 0x43, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x3F, 0x1B, 0x00, -/* 0000C560 */ 0x5B, 0x02, 0x22, 0x1B, 0x00, 0xEE, 0x03, 0x43, 0x43, 0x1B, 0x00, 0x75, 0x43, 0x42, 0x21, 0x47, -/* 0000C570 */ 0x3E, 0x06, 0xE9, 0x0F, 0x2F, 0x00, 0x3E, 0x47, 0x42, 0x29, 0x8D, 0x01, 0x07, 0x43, 0x0C, 0x00, -/* 0000C580 */ 0x4B, 0x43, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x04, 0x60, 0x44, 0x29, 0x22, 0x96, 0x44, 0x44, 0x28, -/* 0000C590 */ 0x00, 0x00, 0x5B, 0x01, 0x44, 0x1C, 0x00, 0x5B, 0x02, 0x29, 0x1C, 0x00, 0xEE, 0x03, 0x43, 0x43, -/* 0000C5A0 */ 0x1C, 0x00, 0x75, 0x43, 0x42, 0x21, 0xE5, 0x22, 0x00, 0x8D, 0x03, 0x0B, 0x42, 0x0A, 0x00, 0x4B, -/* 0000C5B0 */ 0x42, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x29, 0x1D, 0x00, 0x5B, 0x02, 0x06, 0x1D, -/* 0000C5C0 */ 0x00, 0xEE, 0x03, 0xFF, 0x42, 0x1D, 0x00, 0xE9, 0x09, 0x35, 0x00, 0xE7, 0x2D, 0x06, 0x8D, 0x04, -/* 0000C5D0 */ 0x22, 0x42, 0x0B, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x2D, 0x1E, 0x00, 0xEE, -/* 0000C5E0 */ 0x02, 0xFF, 0x42, 0x1E, 0x00, 0x8D, 0x04, 0x03, 0x43, 0x00, 0x00, 0x6B, 0x42, 0x43, 0x06, 0x07, -/* 0000C5F0 */ 0x01, 0x00, 0x5A, 0x00, 0x43, 0xF2, 0x01, 0xFF, 0x42, 0x06, 0x00, 0x00, 0x00, 0x1F, 0x00, 0xE9, -/* 0000C600 */ 0x8D, 0x01, 0x04, 0x42, 0x0D, 0x00, 0x4B, 0x42, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, 0x60, 0x43, -/* 0000C610 */ 0x29, 0x23, 0x5B, 0x01, 0x43, 0x20, 0x00, 0xEE, 0x02, 0x42, 0x42, 0x20, 0x00, 0x75, 0x42, 0x29, -/* 0000C620 */ 0x24, 0x47, 0x42, 0x29, 0x8D, 0x04, 0x06, 0x43, 0x01, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x04, -/* 0000C630 */ 0x8D, 0x04, 0x1E, 0x44, 0x0E, 0x00, 0x5B, 0x01, 0x44, 0x21, 0x00, 0x60, 0x44, 0x29, 0x25, 0x5B, -/* 0000C640 */ 0x02, 0x44, 0x21, 0x00, 0xEE, 0x03, 0x43, 0x43, 0x21, 0x00, 0x75, 0x43, 0x42, 0x26, 0x60, 0x42, -/* 0000C650 */ 0x29, 0x27, 0xA6, 0x43, 0x15, 0x03, 0x00, 0x42, 0x43, 0x09, 0x0C, 0x00, 0x60, 0x42, 0x29, 0x28, -/* 0000C660 */ 0x43, 0x42, 0x42, 0x20, 0x75, 0x42, 0x29, 0x1D, 0x75, 0x06, 0x29, 0x29, 0xA6, 0x00, 0x24, 0x00, -/* 0000C670 */ 0x01, 0x2C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, -/* 0000C680 */ 0x02, 0x00, 0x00, 0x3B, 0x02, 0x00, 0x00, 0x45, 0x02, 0x00, 0x00, 0x3F, 0x02, 0x00, 0x00, 0x3A, -/* 0000C690 */ 0x02, 0x00, 0x00, 0x3C, 0x02, 0x00, 0x00, 0x3E, 0x02, 0x00, 0x00, 0x41, 0x02, 0x00, 0x00, 0x43, -/* 0000C6A0 */ 0x02, 0x00, 0x00, 0xFE, 0x89, 0x02, 0xFE, 0xF2, 0x01, 0xFE, 0x8D, 0x02, 0xFE, 0xF2, 0x01, 0xFE, -/* 0000C6B0 */ 0xE7, 0x01, 0xFE, 0xE8, 0x01, 0xFE, 0x90, 0x02, 0xFE, 0x44, 0x02, 0xFE, 0x3B, 0x02, 0xFE, 0x45, -/* 0000C6C0 */ 0x02, 0xFE, 0x3F, 0x02, 0xFE, 0x3A, 0x02, 0xFE, 0x3C, 0x02, 0xFE, 0x3E, 0x02, 0xFE, 0x41, 0x02, -/* 0000C6D0 */ 0xFE, 0x43, 0x02, 0xFE, 0x2D, 0x02, 0xFE, 0x33, 0x02, 0xFE, 0xF7, 0x01, 0xFE, 0xF3, 0x01, 0xFE, -/* 0000C6E0 */ 0x35, 0x02, 0xFE, 0x28, 0x02, 0xFE, 0x38, 0x02, 0xFE, 0x2F, 0x02, 0xFE, 0x27, 0x02, 0xFE, 0x2A, -/* 0000C6F0 */ 0x02, 0xFE, 0x2E, 0x02, 0xFE, 0x31, 0x02, 0xFE, 0x34, 0x02, 0xFE, 0x2B, 0x02, 0xFE, 0x29, 0x02, -/* 0000C700 */ 0xFE, 0x37, 0x02, 0xFE, 0x0D, 0x02, 0xFE, 0x0D, 0x02, 0xFE, 0x30, 0x02, 0xFE, 0x36, 0x02, 0xFE, -/* 0000C710 */ 0x26, 0x02, 0xFE, 0x0C, 0x02, 0xFE, 0x0C, 0x02, 0xFE, 0x2A, 0x02, 0xFE, 0x37, 0x02, 0xFE, 0x2C, -/* 0000C720 */ 0x02, 0xFF, 0x8C, 0x7B, 0x02, 0x00, 0x3F, 0x02, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3D, 0x00, 0x1A, -/* 0000C730 */ 0x00, 0x3F, 0x00, 0x33, 0x00, 0x9F, 0x00, 0x24, 0x00, 0x71, 0x00, 0x04, 0x00, 0x67, 0x00, 0x26, -/* 0000C740 */ 0x00, 0x46, 0x00, 0x3D, 0x00, 0x71, 0x00, 0x34, 0x00, 0x60, 0x00, 0x0A, 0x00, 0x32, 0x00, 0x25, -/* 0000C750 */ 0x00, 0x6C, 0x00, 0x1D, 0x00, 0x4D, 0x00, 0x0A, 0x00, 0x32, 0x00, 0x1A, 0x00, 0x6C, 0x00, 0x43, -/* 0000C760 */ 0x00, 0x6F, 0x00, 0x43, 0x00, 0x67, 0x00, 0x3F, 0x00, 0x64, 0x00, 0x4B, 0x00, 0x81, 0x00, 0x3F, -/* 0000C770 */ 0x00, 0x62, 0x00, 0x3F, 0x00, 0x64, 0x00, 0x3F, 0x00, 0x68, 0x00, 0x3F, 0x00, 0x68, 0x00, 0x3F, -/* 0000C780 */ 0x00, 0x70, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x3D, 0x00, 0x77, 0x00, 0x25, 0x00, 0x71, 0x00, 0x69, -/* 0000C790 */ 0x00, 0xD0, 0x01, 0x1C, 0x00, 0x41, 0x00, 0x3C, 0x00, 0x9A, 0x00, 0x04, 0x00, 0x34, 0x00, 0x04, -/* 0000C7A0 */ 0x00, 0x36, 0x00, 0x08, 0x00, 0x68, 0x00, 0x04, 0x00, 0x34, 0x00, 0x04, 0x00, 0x2C, 0x00, 0x04, -/* 0000C7B0 */ 0x00, 0x2E, 0x00, 0x04, 0x00, 0x30, 0x00, 0x04, 0x00, 0x2C, 0x00, 0x04, 0x00, 0x2E, 0x00, 0x04, -/* 0000C7C0 */ 0x00, 0x32, 0x00, 0x04, 0x00, 0x32, 0x00, 0x04, 0x00, 0x3F, 0x00, 0x04, 0x00, 0x32, 0x00, 0x04, -/* 0000C7D0 */ 0x00, 0x40, 0x00, 0x04, 0x00, 0x3F, 0x00, 0x04, 0x00, 0x0F, 0x03, 0x06, 0x00, 0x93, 0x00, 0x24, -/* 0000C7E0 */ 0x00, 0x3F, 0x00, 0x01, 0x00, 0x4A, 0x00, 0x17, 0x00, 0xEF, 0x00, 0x26, 0x00, 0x54, 0x00, 0x25, -/* 0000C7F0 */ 0x00, 0x6A, 0x00, 0x04, 0x00, 0x37, 0x00, 0x04, 0x00, 0x5A, 0x00, 0x32, 0x00, 0xDE, 0x00, 0x24, -/* 0000C800 */ 0x00, 0x3E, 0x00, 0x01, 0x00, 0x4A, 0x00, 0x17, 0x00, 0x77, 0x01, 0x1B, 0x00, 0x77, 0x00, 0x21, -/* 0000C810 */ 0x00, 0x66, 0x00, 0x2D, 0x00, 0x82, 0x00, 0x0E, 0x00, 0x3F, 0x00, 0x0C, 0x00, 0x6D, 0x00, 0x06, -/* 0000C820 */ 0x00, 0x3F, 0x00, 0x00, 0xBF, 0x5C, 0x0A, 0xC1, 0x23, 0x88, 0x01, 0x00, 0xFE, 0x78, 0x0D, 0x0C, -/* 0000C830 */ 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0xEC, 0x04, 0xBE, 0xFF, 0xF8, 0x6D, 0x02, 0x00, 0xFF, 0x00, 0x10, -/* 0000C840 */ 0x01, 0x00, 0x03, 0x03, 0xFF, 0xF8, 0x6D, 0x02, 0x00, 0xFE, 0x2D, 0x0D, 0xFE, 0x2D, 0x0D, 0x01, -/* 0000C850 */ 0x07, 0x12, 0x16, 0x06, 0xC8, 0xBB, 0x04, 0x02, 0x10, 0x07, 0x0A, 0x0A, 0x0A, 0x0A, 0x02, 0x15, -/* 0000C860 */ 0x05, 0xFE, 0x07, 0x05, 0x08, 0x06, 0xFE, 0x45, 0x04, 0x07, 0x05, 0xFE, 0x08, 0x05, 0x01, 0x00, -/* 0000C870 */ 0x05, 0xFE, 0x09, 0x05, 0x05, 0xFE, 0xFC, 0x04, 0x05, 0xFE, 0x0A, 0x05, 0x06, 0xFE, 0x13, 0x04, -/* 0000C880 */ 0x06, 0xFE, 0x49, 0x04, 0x06, 0xFE, 0x4A, 0x04, 0x06, 0xFE, 0x4B, 0x04, 0x06, 0xFE, 0x4C, 0x04, -/* 0000C890 */ 0x06, 0xFE, 0x4D, 0x04, 0x05, 0xFE, 0x0B, 0x05, 0xFE, 0x3A, 0x03, 0xA6, 0x14, 0x60, 0x16, 0x13, -/* 0000C8A0 */ 0x00, 0xA6, 0x17, 0x15, 0x03, 0x00, 0x16, 0x17, 0x09, 0x2A, 0x00, 0x8D, 0x01, 0x05, 0x16, 0x00, -/* 0000C8B0 */ 0x00, 0x4B, 0x16, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x5B, 0x01, 0x12, 0x00, 0x00, 0x60, 0x17, -/* 0000C8C0 */ 0x13, 0x00, 0x5B, 0x02, 0x17, 0x00, 0x00, 0x5B, 0x03, 0x02, 0x00, 0x00, 0xEE, 0x04, 0x16, 0x16, -/* 0000C8D0 */ 0x00, 0x00, 0x47, 0x12, 0x16, 0x60, 0x16, 0x13, 0x01, 0xA6, 0x17, 0x15, 0x03, 0x00, 0x16, 0x17, -/* 0000C8E0 */ 0x09, 0x00, 0x00, 0x60, 0x16, 0x13, 0x02, 0x14, 0x03, 0x00, 0x16, 0x04, 0x09, 0x98, 0x00, 0x8D, -/* 0000C8F0 */ 0x04, 0x03, 0x17, 0x01, 0x00, 0x6B, 0x16, 0x17, 0x03, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x17, 0x5B, -/* 0000C900 */ 0x01, 0x12, 0x01, 0x00, 0xE0, 0x18, 0x00, 0x5B, 0x02, 0x18, 0x01, 0x00, 0xF2, 0x03, 0x16, 0x16, -/* 0000C910 */ 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x14, 0x16, 0x14, 0x03, 0x00, 0x14, 0x05, 0x09, 0x2E, -/* 0000C920 */ 0x00, 0x8D, 0x04, 0x0E, 0x16, 0x02, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x03, 0x8D, 0x04, 0x0D, -/* 0000C930 */ 0x17, 0x03, 0x00, 0x07, 0x02, 0x00, 0x5B, 0x01, 0x06, 0x03, 0x00, 0xC2, 0x02, 0x17, 0x17, 0x03, -/* 0000C940 */ 0x00, 0x5B, 0x01, 0x17, 0x02, 0x00, 0xEE, 0x02, 0xFF, 0x16, 0x02, 0x00, 0x09, 0x35, 0x00, 0x8D, -/* 0000C950 */ 0x04, 0x06, 0x16, 0x04, 0x00, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x03, 0x8D, 0x04, 0x1D, 0x17, 0x05, -/* 0000C960 */ 0x00, 0x5B, 0x01, 0x17, 0x04, 0x00, 0x5B, 0x02, 0x12, 0x04, 0x00, 0x96, 0x17, 0x14, 0x07, 0x00, -/* 0000C970 */ 0x00, 0x5B, 0x03, 0x17, 0x04, 0x00, 0x5B, 0x04, 0x08, 0x04, 0x00, 0xEE, 0x05, 0x16, 0x16, 0x04, -/* 0000C980 */ 0x00, 0x47, 0x12, 0x16, 0x09, 0xA1, 0x00, 0x60, 0x16, 0x13, 0x02, 0x14, 0x03, 0x00, 0x16, 0x09, -/* 0000C990 */ 0x09, 0x95, 0x00, 0x8D, 0x04, 0x03, 0x17, 0x01, 0x00, 0x6B, 0x16, 0x17, 0x03, 0x07, 0x03, 0x00, -/* 0000C9A0 */ 0x5A, 0x00, 0x17, 0x5B, 0x01, 0x12, 0x05, 0x00, 0xE0, 0x18, 0x01, 0x5B, 0x02, 0x18, 0x05, 0x00, -/* 0000C9B0 */ 0xF2, 0x03, 0x16, 0x16, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x47, 0x14, 0x16, 0x14, 0x03, 0x00, -/* 0000C9C0 */ 0x14, 0x05, 0x09, 0x2E, 0x00, 0x8D, 0x04, 0x0E, 0x16, 0x02, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 0000C9D0 */ 0x03, 0x8D, 0x04, 0x0D, 0x17, 0x03, 0x00, 0x07, 0x02, 0x00, 0x5B, 0x01, 0x06, 0x07, 0x00, 0xC2, -/* 0000C9E0 */ 0x02, 0x17, 0x17, 0x07, 0x00, 0x5B, 0x01, 0x17, 0x06, 0x00, 0xEE, 0x02, 0xFF, 0x16, 0x06, 0x00, -/* 0000C9F0 */ 0x09, 0x35, 0x00, 0x8D, 0x04, 0x06, 0x16, 0x04, 0x00, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x03, 0x8D, -/* 0000CA00 */ 0x04, 0x1D, 0x17, 0x05, 0x00, 0x5B, 0x01, 0x17, 0x08, 0x00, 0x5B, 0x02, 0x12, 0x08, 0x00, 0x96, -/* 0000CA10 */ 0x17, 0x14, 0x07, 0x01, 0x00, 0x5B, 0x03, 0x17, 0x08, 0x00, 0x5B, 0x04, 0x0A, 0x08, 0x00, 0xEE, -/* 0000CA20 */ 0x05, 0x16, 0x16, 0x08, 0x00, 0x47, 0x12, 0x16, 0x60, 0x16, 0x13, 0x04, 0xA6, 0x17, 0x15, 0x03, -/* 0000CA30 */ 0x00, 0x16, 0x17, 0x09, 0x45, 0x00, 0x60, 0x16, 0x13, 0x04, 0x15, 0x03, 0x00, 0x16, 0x04, 0x09, -/* 0000CA40 */ 0x39, 0x00, 0x60, 0x16, 0x13, 0x04, 0x15, 0x03, 0x00, 0x16, 0x0B, 0x09, 0x2D, 0x00, 0x8D, 0x01, -/* 0000CA50 */ 0x05, 0x16, 0x00, 0x00, 0x4B, 0x16, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x5B, 0x01, 0x12, 0x09, -/* 0000CA60 */ 0x00, 0x60, 0x17, 0x13, 0x04, 0x5B, 0x02, 0x17, 0x09, 0x00, 0x5B, 0x03, 0x0C, 0x09, 0x00, 0xEE, -/* 0000CA70 */ 0x04, 0x16, 0x16, 0x09, 0x00, 0x47, 0x12, 0x16, 0x09, 0x38, 0x00, 0x60, 0x16, 0x13, 0x04, 0xA6, -/* 0000CA80 */ 0x17, 0x15, 0x03, 0x00, 0x16, 0x17, 0x09, 0x2A, 0x00, 0x8D, 0x01, 0x06, 0x16, 0x06, 0x00, 0x4B, -/* 0000CA90 */ 0x16, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x5B, 0x01, 0x12, 0x0A, 0x00, 0x60, 0x17, 0x13, 0x04, -/* 0000CAA0 */ 0x5B, 0x02, 0x17, 0x0A, 0x00, 0x5B, 0x03, 0x0C, 0x0A, 0x00, 0xEE, 0x04, 0x16, 0x16, 0x0A, 0x00, -/* 0000CAB0 */ 0x47, 0x12, 0x16, 0x60, 0x16, 0x13, 0x05, 0xA6, 0x17, 0x15, 0x03, 0x00, 0x16, 0x17, 0x09, 0x2A, -/* 0000CAC0 */ 0x00, 0x8D, 0x01, 0x06, 0x16, 0x06, 0x00, 0x4B, 0x16, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x5B, -/* 0000CAD0 */ 0x01, 0x12, 0x0B, 0x00, 0x60, 0x17, 0x13, 0x05, 0x5B, 0x02, 0x17, 0x0B, 0x00, 0x5B, 0x03, 0x0D, -/* 0000CAE0 */ 0x0B, 0x00, 0xEE, 0x04, 0x16, 0x16, 0x0B, 0x00, 0x47, 0x12, 0x16, 0x60, 0x16, 0x13, 0x06, 0xA6, -/* 0000CAF0 */ 0x17, 0x15, 0x03, 0x00, 0x16, 0x17, 0x09, 0x2A, 0x00, 0x8D, 0x01, 0x06, 0x16, 0x06, 0x00, 0x4B, -/* 0000CB00 */ 0x16, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x5B, 0x01, 0x12, 0x0C, 0x00, 0x60, 0x17, 0x13, 0x06, -/* 0000CB10 */ 0x5B, 0x02, 0x17, 0x0C, 0x00, 0x5B, 0x03, 0x0E, 0x0C, 0x00, 0xEE, 0x04, 0x16, 0x16, 0x0C, 0x00, -/* 0000CB20 */ 0x47, 0x12, 0x16, 0x60, 0x16, 0x13, 0x07, 0xA6, 0x17, 0x15, 0x03, 0x00, 0x16, 0x17, 0x09, 0x2A, -/* 0000CB30 */ 0x00, 0x8D, 0x01, 0x06, 0x16, 0x06, 0x00, 0x4B, 0x16, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x5B, -/* 0000CB40 */ 0x01, 0x12, 0x0D, 0x00, 0x60, 0x17, 0x13, 0x07, 0x5B, 0x02, 0x17, 0x0D, 0x00, 0x5B, 0x03, 0x0F, -/* 0000CB50 */ 0x0D, 0x00, 0xEE, 0x04, 0x16, 0x16, 0x0D, 0x00, 0x47, 0x12, 0x16, 0x60, 0x16, 0x13, 0x08, 0xA6, -/* 0000CB60 */ 0x17, 0x15, 0x03, 0x00, 0x16, 0x17, 0x09, 0x2A, 0x00, 0x8D, 0x01, 0x06, 0x16, 0x06, 0x00, 0x4B, -/* 0000CB70 */ 0x16, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x5B, 0x01, 0x12, 0x0E, 0x00, 0x60, 0x17, 0x13, 0x08, -/* 0000CB80 */ 0x5B, 0x02, 0x17, 0x0E, 0x00, 0x5B, 0x03, 0x10, 0x0E, 0x00, 0xEE, 0x04, 0x16, 0x16, 0x0E, 0x00, -/* 0000CB90 */ 0x47, 0x12, 0x16, 0x60, 0x16, 0x13, 0x09, 0xA6, 0x17, 0x15, 0x03, 0x00, 0x16, 0x17, 0x09, 0x2A, -/* 0000CBA0 */ 0x00, 0x8D, 0x01, 0x05, 0x16, 0x00, 0x00, 0x4B, 0x16, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x5B, -/* 0000CBB0 */ 0x01, 0x12, 0x0F, 0x00, 0x60, 0x17, 0x13, 0x09, 0x5B, 0x02, 0x17, 0x0F, 0x00, 0x5B, 0x03, 0x11, -/* 0000CBC0 */ 0x0F, 0x00, 0xEE, 0x04, 0x16, 0x16, 0x0F, 0x00, 0x47, 0x12, 0x16, 0x47, 0x00, 0x12, 0x09, 0x02, -/* 0000CBD0 */ 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x35, 0x02, 0xFE, 0x28, 0x02, 0xFE, 0x38, 0x02, 0xFE, 0x83, -/* 0000CBE0 */ 0x02, 0xFE, 0x2F, 0x02, 0xFE, 0x27, 0x02, 0xFE, 0x2A, 0x02, 0xFE, 0x2E, 0x02, 0xFE, 0x31, 0x02, -/* 0000CBF0 */ 0xFE, 0x34, 0x02, 0x1C, 0xFE, 0x0C, 0x05, 0x00, 0x1C, 0xFE, 0x0C, 0x05, 0x00, 0xFF, 0x47, 0x6E, -/* 0000CC00 */ 0x02, 0x00, 0x1D, 0x02, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x42, 0x00, 0x2A, 0x00, 0x88, 0x00, 0x0E, -/* 0000CC10 */ 0x00, 0x8E, 0x01, 0x0C, 0x00, 0x3F, 0x00, 0x2A, 0x00, 0x6B, 0x00, 0x08, 0x00, 0x2E, 0x00, 0x2E, -/* 0000CC20 */ 0x00, 0x91, 0x00, 0x38, 0x00, 0x98, 0x00, 0x0C, 0x00, 0x3C, 0x00, 0x2A, 0x00, 0x6B, 0x00, 0x08, -/* 0000CC30 */ 0x00, 0x2E, 0x00, 0x2E, 0x00, 0x91, 0x00, 0x35, 0x00, 0x2F, 0x01, 0x26, 0x00, 0x90, 0x00, 0x2D, -/* 0000CC40 */ 0x00, 0x76, 0x00, 0x0E, 0x00, 0x40, 0x00, 0x2A, 0x00, 0x8B, 0x00, 0x0E, 0x00, 0x3E, 0x00, 0x2A, -/* 0000CC50 */ 0x00, 0x87, 0x00, 0x0E, 0x00, 0x3F, 0x00, 0x2A, 0x00, 0x89, 0x00, 0x0E, 0x00, 0x41, 0x00, 0x2A, -/* 0000CC60 */ 0x00, 0x8D, 0x00, 0x0E, 0x00, 0x41, 0x00, 0x2A, 0x00, 0x8D, 0x00, 0x0E, 0x00, 0x47, 0x00, 0x2A, -/* 0000CC70 */ 0x00, 0x8C, 0x00, 0x08, 0x00, 0x22, 0x00, 0x00, 0xBF, 0x5C, 0x0A, 0xC1, 0x03, 0x88, 0x01, 0x00, -/* 0000CC80 */ 0xFE, 0x64, 0x0D, 0x0C, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0xEB, 0x04, 0xBD, 0xFF, 0x90, 0x68, 0x02, -/* 0000CC90 */ 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFF, 0x90, 0x68, 0x02, 0x00, 0xFE, 0xF8, 0x04, -/* 0000CCA0 */ 0xFE, 0xF8, 0x04, 0x01, 0x09, 0x11, 0x16, 0x07, 0x43, 0x40, 0x04, 0x05, 0x06, 0x06, 0x01, 0x01, -/* 0000CCB0 */ 0x01, 0x01, 0x15, 0x05, 0xFE, 0xF7, 0x04, 0x05, 0xFE, 0x02, 0x05, 0x08, 0x07, 0x05, 0xFE, 0x03, -/* 0000CCC0 */ 0x05, 0x05, 0xFE, 0xFA, 0x04, 0x05, 0xFE, 0xFB, 0x04, 0x06, 0xFE, 0x45, 0x04, 0x01, 0x00, 0x06, -/* 0000CCD0 */ 0xFE, 0xFD, 0x04, 0x01, 0x01, 0x05, 0xFE, 0x04, 0x05, 0x01, 0x02, 0x05, 0xFE, 0x05, 0x05, 0x05, -/* 0000CCE0 */ 0xFE, 0x06, 0x05, 0xFE, 0x2E, 0x01, 0x8D, 0x04, 0x03, 0x17, 0x00, 0x00, 0x6B, 0x16, 0x17, 0x00, -/* 0000CCF0 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x17, 0x5B, 0x01, 0x11, 0x00, 0x00, 0x8D, 0x04, 0x09, 0x18, 0x01, -/* 0000CD00 */ 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, 0xFB, 0x19, 0x02, 0x13, 0x03, 0x5B, 0x01, 0x19, 0x01, -/* 0000CD10 */ 0x00, 0xEE, 0x02, 0x18, 0x18, 0x01, 0x00, 0x5B, 0x02, 0x18, 0x00, 0x00, 0xF2, 0x03, 0x16, 0x16, -/* 0000CD20 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x14, 0x16, 0x14, 0x03, 0x00, 0x14, 0x05, 0x09, 0x40, -/* 0000CD30 */ 0x00, 0x8D, 0x04, 0x0E, 0x16, 0x02, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, 0x8D, 0x04, 0x0D, -/* 0000CD40 */ 0x17, 0x03, 0x00, 0x07, 0x02, 0x00, 0xFC, 0x18, 0x06, 0x11, 0x06, 0xFE, 0x18, 0x07, 0x02, 0x02, -/* 0000CD50 */ 0xFE, 0x18, 0x13, 0x08, 0x04, 0x5B, 0x01, 0x18, 0x03, 0x00, 0xC2, 0x02, 0x17, 0x17, 0x03, 0x00, -/* 0000CD60 */ 0x5B, 0x01, 0x17, 0x02, 0x00, 0xEE, 0x02, 0xFF, 0x16, 0x02, 0x00, 0x47, 0x00, 0x11, 0x09, 0xA1, -/* 0000CD70 */ 0x00, 0x14, 0x03, 0x00, 0x12, 0x09, 0x09, 0x43, 0x00, 0x8D, 0x04, 0x06, 0x16, 0x04, 0x00, 0x07, -/* 0000CD80 */ 0x05, 0x00, 0x5A, 0x00, 0x04, 0x8D, 0x04, 0x1D, 0x17, 0x05, 0x00, 0x5B, 0x01, 0x17, 0x04, 0x00, -/* 0000CD90 */ 0x5B, 0x02, 0x11, 0x04, 0x00, 0x96, 0x17, 0x14, 0x0A, 0x00, 0x00, 0x5B, 0x03, 0x17, 0x04, 0x00, -/* 0000CDA0 */ 0x96, 0x17, 0x14, 0x0C, 0x01, 0x00, 0xFB, 0x17, 0x0B, 0x17, 0x0D, 0x5B, 0x04, 0x17, 0x04, 0x00, -/* 0000CDB0 */ 0xEE, 0x05, 0x00, 0x16, 0x04, 0x00, 0x09, 0x59, 0x00, 0x09, 0x4E, 0x00, 0x96, 0x16, 0x14, 0x0E, -/* 0000CDC0 */ 0x02, 0x00, 0x15, 0x03, 0x00, 0x16, 0x0F, 0x09, 0x40, 0x00, 0x8D, 0x04, 0x06, 0x16, 0x04, 0x00, -/* 0000CDD0 */ 0x07, 0x05, 0x00, 0x5A, 0x00, 0x04, 0x8D, 0x04, 0x1D, 0x17, 0x05, 0x00, 0x5B, 0x01, 0x17, 0x05, -/* 0000CDE0 */ 0x00, 0x5B, 0x02, 0x11, 0x05, 0x00, 0x96, 0x17, 0x14, 0x0A, 0x03, 0x00, 0x5B, 0x03, 0x17, 0x05, -/* 0000CDF0 */ 0x00, 0x96, 0x17, 0x14, 0x0C, 0x04, 0x00, 0xFB, 0x17, 0x0B, 0x17, 0x10, 0x5B, 0x04, 0x17, 0x05, -/* 0000CE00 */ 0x00, 0xEE, 0x05, 0x00, 0x16, 0x05, 0x00, 0x09, 0x08, 0x00, 0x47, 0x00, 0x11, 0x09, 0x02, 0x00, -/* 0000CE10 */ 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x83, 0x02, 0xFF, 0xB7, 0x69, 0x02, 0x00, 0x0A, 0x00, 0x00, 0x00, -/* 0000CE20 */ 0x00, 0x43, 0x00, 0x91, 0x00, 0x08, 0x00, 0x2A, 0x00, 0x3A, 0x00, 0x00, 0x01, 0x06, 0x00, 0x83, -/* 0000CE30 */ 0x00, 0x08, 0x00, 0x33, 0x00, 0x43, 0x00, 0x81, 0x00, 0x0E, 0x00, 0x32, 0x00, 0x40, 0x00, 0x8A, -/* 0000CE40 */ 0x00, 0x08, 0x00, 0x22, 0x00, 0x00, 0xBF, 0x5C, 0x0A, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x53, -/* 0000CE50 */ 0x0D, 0x0C, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0xEA, 0x04, 0xBC, 0xFF, 0x62, 0x63, 0x02, 0x00, 0xFF, -/* 0000CE60 */ 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFF, 0x62, 0x63, 0x02, 0x00, 0xFE, 0x20, 0x05, 0xFE, 0x20, -/* 0000CE70 */ 0x05, 0x01, 0x09, 0x14, 0x19, 0x07, 0x50, 0x4B, 0x04, 0x05, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, -/* 0000CE80 */ 0x18, 0x05, 0xFE, 0xF7, 0x04, 0x05, 0xFE, 0xF8, 0x04, 0x08, 0x07, 0x05, 0xFE, 0xF9, 0x04, 0x05, -/* 0000CE90 */ 0xFE, 0xFA, 0x04, 0x05, 0xFE, 0xFB, 0x04, 0x01, 0x02, 0x05, 0xFE, 0xFC, 0x04, 0x06, 0xFE, 0x44, -/* 0000CEA0 */ 0x04, 0x01, 0x00, 0x06, 0xFE, 0xFD, 0x04, 0x01, 0x01, 0x06, 0xFE, 0xFE, 0x04, 0x06, 0xFE, 0xFF, -/* 0000CEB0 */ 0x04, 0x06, 0xFE, 0x43, 0x04, 0x05, 0xFE, 0x00, 0x05, 0x05, 0xFE, 0x01, 0x05, 0xFE, 0x5D, 0x01, -/* 0000CEC0 */ 0x8D, 0x04, 0x03, 0x1A, 0x00, 0x00, 0x6B, 0x19, 0x1A, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x1A, -/* 0000CED0 */ 0x5B, 0x01, 0x14, 0x00, 0x00, 0x8D, 0x04, 0x09, 0x1B, 0x01, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 0000CEE0 */ 0x04, 0xFB, 0x1C, 0x02, 0x16, 0x03, 0x5B, 0x01, 0x1C, 0x01, 0x00, 0xEE, 0x02, 0x1B, 0x1B, 0x01, -/* 0000CEF0 */ 0x00, 0x5B, 0x02, 0x1B, 0x00, 0x00, 0xF2, 0x03, 0x19, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 0000CF00 */ 0x47, 0x17, 0x19, 0x14, 0x03, 0x00, 0x17, 0x05, 0x09, 0x40, 0x00, 0x8D, 0x04, 0x0E, 0x19, 0x02, -/* 0000CF10 */ 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, 0x8D, 0x04, 0x0D, 0x1A, 0x03, 0x00, 0x07, 0x02, 0x00, -/* 0000CF20 */ 0xFC, 0x1B, 0x06, 0x14, 0x06, 0xFE, 0x1B, 0x07, 0x02, 0x02, 0xFE, 0x1B, 0x16, 0x08, 0x04, 0x5B, -/* 0000CF30 */ 0x01, 0x1B, 0x03, 0x00, 0xC2, 0x02, 0x1A, 0x1A, 0x03, 0x00, 0x5B, 0x01, 0x1A, 0x02, 0x00, 0xEE, -/* 0000CF40 */ 0x02, 0xFF, 0x19, 0x02, 0x00, 0x47, 0x00, 0x14, 0x09, 0xD0, 0x00, 0x96, 0x19, 0x17, 0x09, 0x00, -/* 0000CF50 */ 0x00, 0x15, 0x03, 0x00, 0x19, 0x0A, 0x09, 0x56, 0x00, 0x14, 0x03, 0x00, 0x15, 0x0B, 0x09, 0x4E, -/* 0000CF60 */ 0x00, 0x8D, 0x04, 0x06, 0x19, 0x04, 0x00, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x04, 0x8D, 0x04, 0x1D, -/* 0000CF70 */ 0x1A, 0x05, 0x00, 0x5B, 0x01, 0x1A, 0x04, 0x00, 0x5B, 0x02, 0x14, 0x04, 0x00, 0x96, 0x1A, 0x17, -/* 0000CF80 */ 0x0C, 0x01, 0x00, 0x5B, 0x03, 0x1A, 0x04, 0x00, 0x96, 0x1A, 0x17, 0x0E, 0x02, 0x00, 0x2F, 0x1A, -/* 0000CF90 */ 0x0D, 0x1A, 0x2F, 0x1A, 0x1A, 0x0F, 0x2F, 0x1A, 0x1A, 0x0A, 0x2F, 0x1A, 0x1A, 0x10, 0x5B, 0x04, -/* 0000CFA0 */ 0x1A, 0x04, 0x00, 0xEE, 0x05, 0x00, 0x19, 0x04, 0x00, 0x09, 0x6F, 0x00, 0x09, 0x64, 0x00, 0x15, -/* 0000CFB0 */ 0x03, 0x00, 0x15, 0x0B, 0x09, 0x5C, 0x00, 0x8D, 0x04, 0x06, 0x19, 0x04, 0x00, 0x07, 0x05, 0x00, -/* 0000CFC0 */ 0x5A, 0x00, 0x04, 0x8D, 0x04, 0x1D, 0x1A, 0x05, 0x00, 0x5B, 0x01, 0x1A, 0x05, 0x00, 0x5B, 0x02, -/* 0000CFD0 */ 0x14, 0x05, 0x00, 0x96, 0x1A, 0x17, 0x0C, 0x03, 0x00, 0x5B, 0x03, 0x1A, 0x05, 0x00, 0x96, 0x1A, -/* 0000CFE0 */ 0x17, 0x0E, 0x04, 0x00, 0x2F, 0x1A, 0x0D, 0x1A, 0x2F, 0x1A, 0x1A, 0x0F, 0x14, 0x03, 0x00, 0x15, -/* 0000CFF0 */ 0x11, 0x09, 0x06, 0x00, 0x47, 0x1B, 0x12, 0x09, 0x03, 0x00, 0x47, 0x1B, 0x13, 0x2F, 0x1A, 0x1A, -/* 0000D000 */ 0x1B, 0x2F, 0x1A, 0x1A, 0x10, 0x5B, 0x04, 0x1A, 0x05, 0x00, 0xEE, 0x05, 0x00, 0x19, 0x05, 0x00, -/* 0000D010 */ 0x09, 0x08, 0x00, 0x47, 0x00, 0x14, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x83, 0x02, -/* 0000D020 */ 0xFF, 0x38, 0x64, 0x02, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x43, 0x00, 0x0F, 0x01, 0x08, 0x00, -/* 0000D030 */ 0x2A, 0x00, 0x3A, 0x00, 0xF5, 0x00, 0x06, 0x00, 0x39, 0x00, 0x16, 0x00, 0x47, 0x00, 0x4E, 0x00, -/* 0000D040 */ 0x85, 0x00, 0x08, 0x00, 0x30, 0x00, 0x5C, 0x00, 0xC4, 0x00, 0x08, 0x00, 0x22, 0x00, 0x00, 0xBF, -/* 0000D050 */ 0x4C, 0x02, 0x01, 0x00, 0x88, 0x01, 0x00, 0xFE, 0x4A, 0x0D, 0x0C, 0xA3, 0x41, 0xC1, 0x00, 0xFE, -/* 0000D060 */ 0xE9, 0x04, 0xBB, 0xFF, 0xFB, 0x61, 0x02, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, -/* 0000D070 */ 0xFB, 0x61, 0x02, 0x00, 0xE9, 0xE9, 0x01, 0x03, 0x05, 0x07, 0x0E, 0x0B, 0x04, 0x01, 0x01, 0x06, -/* 0000D080 */ 0x06, 0xFE, 0xF5, 0x03, 0x06, 0xFE, 0x5B, 0x03, 0x05, 0xFE, 0xD7, 0x04, 0x2E, 0x2C, 0x07, 0x05, -/* 0000D090 */ 0x14, 0x03, 0x00, 0x07, 0x02, 0x09, 0x06, 0x00, 0x47, 0x00, 0x03, 0x09, 0x1B, 0x00, 0x8D, 0x02, -/* 0000D0A0 */ 0x02, 0x07, 0x00, 0x00, 0x96, 0x07, 0x07, 0x05, 0x00, 0x00, 0x47, 0x00, 0x07, 0x0F, 0x03, 0x00, -/* 0000D0B0 */ 0x07, 0x47, 0x00, 0x04, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFF, 0x36, 0x62, 0x02, 0x00, -/* 0000D0C0 */ 0x04, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3B, 0x00, 0x06, 0x00, 0x2E, 0x00, 0x1B, 0x00, 0x44, -/* 0000D0D0 */ 0x00, 0x00, 0x3F, 0x5D, 0x18, 0xC1, 0x03, 0x8D, 0x05, 0x00, 0xFE, 0x0A, 0x0D, 0x0C, 0xA3, 0x41, -/* 0000D0E0 */ 0xC1, 0x00, 0xFE, 0xE8, 0x04, 0xB9, 0xFF, 0x83, 0x56, 0x02, 0x00, 0x01, 0xFF, 0x00, 0x10, 0x01, -/* 0000D0F0 */ 0x00, 0x02, 0x02, 0xFF, 0x83, 0x56, 0x02, 0x00, 0xFE, 0x95, 0x09, 0xFE, 0x95, 0x09, 0x02, 0xFE, -/* 0000D100 */ 0xED, 0x04, 0xFE, 0xCA, 0x01, 0x06, 0x17, 0x1B, 0x05, 0xC4, 0xC2, 0x04, 0x0D, 0x02, 0x07, 0x05, -/* 0000D110 */ 0x05, 0x05, 0x05, 0x18, 0x19, 0x1A, 0x06, 0xFE, 0x42, 0x04, 0x06, 0xFE, 0x43, 0x04, 0x05, 0xFE, -/* 0000D120 */ 0xEE, 0x04, 0x08, 0x06, 0xFE, 0x44, 0x04, 0x05, 0xFE, 0xEF, 0x04, 0x06, 0xFE, 0x45, 0x04, 0x05, -/* 0000D130 */ 0xFE, 0xF0, 0x04, 0x06, 0xFE, 0x13, 0x04, 0x05, 0xFE, 0xF1, 0x04, 0x05, 0xFE, 0xF2, 0x04, 0x05, -/* 0000D140 */ 0xFE, 0xF3, 0x04, 0x05, 0xFE, 0xF4, 0x04, 0x06, 0xFE, 0x4A, 0x04, 0x05, 0xFE, 0xF5, 0x04, 0x05, -/* 0000D150 */ 0xFE, 0xF6, 0x04, 0x06, 0xFE, 0x4B, 0x04, 0x06, 0xFE, 0x4C, 0x04, 0x06, 0xFE, 0x4D, 0x04, 0x01, -/* 0000D160 */ 0x00, 0x06, 0xFE, 0x85, 0x04, 0xFE, 0x73, 0x03, 0x94, 0x03, 0x17, 0xCD, 0x1B, 0x00, 0x00, 0x00, -/* 0000D170 */ 0x94, 0x02, 0x1B, 0x91, 0x03, 0x1B, 0x00, 0x00, 0x60, 0x1B, 0x1B, 0x00, 0x0E, 0x8B, 0x00, 0x1B, -/* 0000D180 */ 0x91, 0x03, 0x1B, 0x00, 0x00, 0x60, 0x1B, 0x1B, 0x00, 0x14, 0x11, 0x00, 0x1B, 0x02, 0x91, 0x03, -/* 0000D190 */ 0x1B, 0x00, 0x00, 0x60, 0x1B, 0x1B, 0x00, 0x14, 0x03, 0x00, 0x1B, 0x03, 0x09, 0x2F, 0x00, 0x8D, -/* 0000D1A0 */ 0x04, 0x06, 0x1B, 0x01, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x05, 0x8D, 0x04, 0x18, 0x1C, 0x02, -/* 0000D1B0 */ 0x00, 0x5B, 0x01, 0x1C, 0x00, 0x00, 0x91, 0x02, 0x1C, 0x03, 0x00, 0x5B, 0x02, 0x1C, 0x00, 0x00, -/* 0000D1C0 */ 0x5B, 0x03, 0x04, 0x00, 0x00, 0xEE, 0x04, 0xFF, 0x1B, 0x00, 0x00, 0x09, 0x3D, 0x00, 0x91, 0x03, -/* 0000D1D0 */ 0x1B, 0x00, 0x00, 0x60, 0x1B, 0x1B, 0x00, 0x14, 0x03, 0x00, 0x1B, 0x06, 0x09, 0x2C, 0x00, 0x8D, -/* 0000D1E0 */ 0x04, 0x06, 0x1B, 0x01, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x05, 0x8D, 0x04, 0x18, 0x1C, 0x02, -/* 0000D1F0 */ 0x00, 0x5B, 0x01, 0x1C, 0x01, 0x00, 0x91, 0x02, 0x1C, 0x03, 0x00, 0x5B, 0x02, 0x1C, 0x01, 0x00, -/* 0000D200 */ 0x5B, 0x03, 0x07, 0x01, 0x00, 0xEE, 0x04, 0xFF, 0x1B, 0x01, 0x00, 0x91, 0x03, 0x1B, 0x00, 0x00, -/* 0000D210 */ 0x60, 0x1B, 0x1B, 0x01, 0x0E, 0x7D, 0x00, 0x1B, 0x91, 0x03, 0x1B, 0x00, 0x00, 0x60, 0x1B, 0x1B, -/* 0000D220 */ 0x01, 0x14, 0x03, 0x00, 0x1B, 0x08, 0x09, 0x2F, 0x00, 0x8D, 0x04, 0x06, 0x1B, 0x01, 0x00, 0x07, -/* 0000D230 */ 0x04, 0x00, 0x5A, 0x00, 0x05, 0x8D, 0x04, 0x18, 0x1C, 0x02, 0x00, 0x5B, 0x01, 0x1C, 0x02, 0x00, -/* 0000D240 */ 0x91, 0x02, 0x1C, 0x03, 0x00, 0x5B, 0x02, 0x1C, 0x02, 0x00, 0x5B, 0x03, 0x09, 0x02, 0x00, 0xEE, -/* 0000D250 */ 0x04, 0xFF, 0x1B, 0x02, 0x00, 0x09, 0x3D, 0x00, 0x91, 0x03, 0x1B, 0x00, 0x00, 0x60, 0x1B, 0x1B, -/* 0000D260 */ 0x01, 0x14, 0x03, 0x00, 0x1B, 0x0A, 0x09, 0x2C, 0x00, 0x8D, 0x04, 0x06, 0x1B, 0x01, 0x00, 0x07, -/* 0000D270 */ 0x04, 0x00, 0x5A, 0x00, 0x05, 0x8D, 0x04, 0x18, 0x1C, 0x02, 0x00, 0x5B, 0x01, 0x1C, 0x03, 0x00, -/* 0000D280 */ 0x91, 0x02, 0x1C, 0x03, 0x00, 0x5B, 0x02, 0x1C, 0x03, 0x00, 0x5B, 0x03, 0x0B, 0x03, 0x00, 0xEE, -/* 0000D290 */ 0x04, 0xFF, 0x1B, 0x03, 0x00, 0x91, 0x03, 0x1B, 0x00, 0x00, 0x60, 0x1B, 0x1B, 0x02, 0x0E, 0xD9, -/* 0000D2A0 */ 0x00, 0x1B, 0x91, 0x03, 0x1B, 0x00, 0x00, 0x60, 0x1B, 0x1B, 0x02, 0x14, 0x11, 0x00, 0x1B, 0x08, -/* 0000D2B0 */ 0x91, 0x03, 0x1B, 0x00, 0x00, 0x60, 0x1B, 0x1B, 0x02, 0x14, 0x03, 0x00, 0x1B, 0x0A, 0x09, 0x2F, -/* 0000D2C0 */ 0x00, 0x8D, 0x04, 0x06, 0x1B, 0x01, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x05, 0x8D, 0x04, 0x18, -/* 0000D2D0 */ 0x1C, 0x02, 0x00, 0x5B, 0x01, 0x1C, 0x04, 0x00, 0x91, 0x02, 0x1C, 0x03, 0x00, 0x5B, 0x02, 0x1C, -/* 0000D2E0 */ 0x04, 0x00, 0x5B, 0x03, 0x0C, 0x04, 0x00, 0xEE, 0x04, 0xFF, 0x1B, 0x04, 0x00, 0x09, 0x8B, 0x00, -/* 0000D2F0 */ 0x91, 0x03, 0x1B, 0x00, 0x00, 0x60, 0x1B, 0x1B, 0x02, 0x14, 0x11, 0x00, 0x1B, 0x03, 0x91, 0x03, -/* 0000D300 */ 0x1B, 0x00, 0x00, 0x60, 0x1B, 0x1B, 0x02, 0x14, 0x03, 0x00, 0x1B, 0x02, 0x09, 0x2F, 0x00, 0x8D, -/* 0000D310 */ 0x04, 0x06, 0x1B, 0x01, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x05, 0x8D, 0x04, 0x18, 0x1C, 0x02, -/* 0000D320 */ 0x00, 0x5B, 0x01, 0x1C, 0x05, 0x00, 0x91, 0x02, 0x1C, 0x03, 0x00, 0x5B, 0x02, 0x1C, 0x05, 0x00, -/* 0000D330 */ 0x5B, 0x03, 0x0D, 0x05, 0x00, 0xEE, 0x04, 0xFF, 0x1B, 0x05, 0x00, 0x09, 0x3D, 0x00, 0x91, 0x03, -/* 0000D340 */ 0x1B, 0x00, 0x00, 0x60, 0x1B, 0x1B, 0x02, 0x14, 0x03, 0x00, 0x1B, 0x06, 0x09, 0x2C, 0x00, 0x8D, -/* 0000D350 */ 0x04, 0x06, 0x1B, 0x01, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x05, 0x8D, 0x04, 0x18, 0x1C, 0x02, -/* 0000D360 */ 0x00, 0x5B, 0x01, 0x1C, 0x06, 0x00, 0x91, 0x02, 0x1C, 0x03, 0x00, 0x5B, 0x02, 0x1C, 0x06, 0x00, -/* 0000D370 */ 0x5B, 0x03, 0x0E, 0x06, 0x00, 0xEE, 0x04, 0xFF, 0x1B, 0x06, 0x00, 0x91, 0x03, 0x1B, 0x00, 0x00, -/* 0000D380 */ 0x60, 0x1B, 0x1B, 0x03, 0x0E, 0x2C, 0x00, 0x1B, 0x8D, 0x04, 0x06, 0x1B, 0x01, 0x00, 0x07, 0x04, -/* 0000D390 */ 0x00, 0x5A, 0x00, 0x05, 0x8D, 0x04, 0x18, 0x1C, 0x02, 0x00, 0x5B, 0x01, 0x1C, 0x07, 0x00, 0x91, -/* 0000D3A0 */ 0x02, 0x1C, 0x03, 0x00, 0x5B, 0x02, 0x1C, 0x07, 0x00, 0x5B, 0x03, 0x0F, 0x07, 0x00, 0xEE, 0x04, -/* 0000D3B0 */ 0xFF, 0x1B, 0x07, 0x00, 0x91, 0x03, 0x1B, 0x00, 0x00, 0x60, 0x1B, 0x1B, 0x04, 0x0E, 0x7D, 0x00, -/* 0000D3C0 */ 0x1B, 0x91, 0x03, 0x1B, 0x00, 0x00, 0x60, 0x1B, 0x1B, 0x04, 0x14, 0x03, 0x00, 0x1B, 0x03, 0x09, -/* 0000D3D0 */ 0x2F, 0x00, 0x8D, 0x04, 0x06, 0x1B, 0x01, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x05, 0x8D, 0x04, -/* 0000D3E0 */ 0x18, 0x1C, 0x02, 0x00, 0x5B, 0x01, 0x1C, 0x08, 0x00, 0x91, 0x02, 0x1C, 0x03, 0x00, 0x5B, 0x02, -/* 0000D3F0 */ 0x1C, 0x08, 0x00, 0x5B, 0x03, 0x10, 0x08, 0x00, 0xEE, 0x04, 0xFF, 0x1B, 0x08, 0x00, 0x09, 0x3D, -/* 0000D400 */ 0x00, 0x91, 0x03, 0x1B, 0x00, 0x00, 0x60, 0x1B, 0x1B, 0x04, 0x14, 0x03, 0x00, 0x1B, 0x06, 0x09, -/* 0000D410 */ 0x2C, 0x00, 0x8D, 0x04, 0x06, 0x1B, 0x01, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x05, 0x8D, 0x04, -/* 0000D420 */ 0x18, 0x1C, 0x02, 0x00, 0x5B, 0x01, 0x1C, 0x09, 0x00, 0x91, 0x02, 0x1C, 0x03, 0x00, 0x5B, 0x02, -/* 0000D430 */ 0x1C, 0x09, 0x00, 0x5B, 0x03, 0x11, 0x09, 0x00, 0xEE, 0x04, 0xFF, 0x1B, 0x09, 0x00, 0x8D, 0x04, -/* 0000D440 */ 0x06, 0x1B, 0x01, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x05, 0x8D, 0x04, 0x16, 0x1C, 0x04, 0x00, -/* 0000D450 */ 0x5B, 0x01, 0x1C, 0x0A, 0x00, 0xCD, 0x1C, 0x03, 0x01, 0x00, 0x9F, 0x00, 0x12, 0x1C, 0x9F, 0x01, -/* 0000D460 */ 0x13, 0x1C, 0x9F, 0x02, 0x14, 0x1C, 0x5B, 0x02, 0x1C, 0x0A, 0x00, 0xD3, 0x00, 0x1C, 0x5B, 0x03, -/* 0000D470 */ 0x1C, 0x0A, 0x00, 0xEE, 0x04, 0xFF, 0x1B, 0x0A, 0x00, 0x8D, 0x04, 0x05, 0x1B, 0x05, 0x00, 0x07, -/* 0000D480 */ 0x02, 0x00, 0x5A, 0x00, 0x05, 0x91, 0x02, 0x1C, 0x03, 0x00, 0x5B, 0x01, 0x1C, 0x0B, 0x00, 0xEE, -/* 0000D490 */ 0x02, 0x1B, 0x1B, 0x0B, 0x00, 0x11, 0x03, 0x00, 0x1B, 0x15, 0x09, 0x32, 0x00, 0x8D, 0x04, 0x06, -/* 0000D4A0 */ 0x1B, 0x01, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x05, 0x8D, 0x04, 0x19, 0x1C, 0x06, 0x00, 0x5B, -/* 0000D4B0 */ 0x01, 0x1C, 0x0C, 0x00, 0x91, 0x02, 0x1C, 0x03, 0x00, 0x5B, 0x02, 0x1C, 0x0C, 0x00, 0x5B, 0x03, -/* 0000D4C0 */ 0x16, 0x0C, 0x00, 0xEE, 0x04, 0x1B, 0x1B, 0x0C, 0x00, 0x47, 0x00, 0x1B, 0x09, 0x05, 0x00, 0xA6, -/* 0000D4D0 */ 0x1B, 0x47, 0x00, 0x1B, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x44, 0x02, 0xFE, 0x45, -/* 0000D4E0 */ 0x02, 0xFE, 0x3F, 0x02, 0xFE, 0x3A, 0x02, 0xFE, 0x43, 0x02, 0xFF, 0xC4, 0x56, 0x02, 0x00, 0x1C, -/* 0000D4F0 */ 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x24, 0x00, 0x0D, 0x00, 0x2B, 0x00, 0x1F, 0x00, 0x5B, 0x00, -/* 0000D500 */ 0x2F, 0x00, 0x63, 0x00, 0x11, 0x00, 0x3A, 0x00, 0x2C, 0x00, 0xA5, 0x00, 0x0D, 0x00, 0x28, 0x00, -/* 0000D510 */ 0x11, 0x00, 0x3A, 0x00, 0x2F, 0x00, 0x5E, 0x00, 0x11, 0x00, 0x3A, 0x00, 0x2C, 0x00, 0x75, 0x00, -/* 0000D520 */ 0x0D, 0x00, 0x29, 0x00, 0x1F, 0x00, 0x5A, 0x00, 0x2F, 0x00, 0x5A, 0x00, 0x1F, 0x00, 0x57, 0x00, -/* 0000D530 */ 0x2F, 0x00, 0x5F, 0x00, 0x11, 0x00, 0x38, 0x00, 0x2C, 0x00, 0x76, 0x00, 0x0D, 0x00, 0x27, 0x00, -/* 0000D540 */ 0x2C, 0x00, 0x59, 0x00, 0x0D, 0x00, 0x30, 0x00, 0x11, 0x00, 0x40, 0x00, 0x2F, 0x00, 0x62, 0x00, -/* 0000D550 */ 0x11, 0x00, 0x3F, 0x00, 0x2C, 0x00, 0x79, 0x00, 0x3B, 0x00, 0x3B, 0x01, 0x60, 0x00, 0x72, 0x00, -/* 0000D560 */ 0x00, 0x65, 0xD5, 0x00, 0x00, 0xBF, 0x5C, 0x0A, 0x01, 0x00, 0x88, 0x01, 0x00, 0xFE, 0x34, 0x0D, -/* 0000D570 */ 0x55, 0xA2, 0x41, 0xD1, 0x00, 0xBA, 0xFF, 0xAF, 0x5E, 0x02, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, -/* 0000D580 */ 0x02, 0x02, 0xFF, 0xAF, 0x5E, 0x02, 0x00, 0xAC, 0xAC, 0x41, 0x04, 0x03, 0x05, 0x05, 0x0F, 0x0F, -/* 0000D590 */ 0x05, 0x01, 0x01, 0x04, 0x04, 0x08, 0x41, 0x8D, 0x01, 0x03, 0x05, 0x00, 0x00, 0x96, 0x05, 0x05, -/* 0000D5A0 */ 0x03, 0x00, 0x00, 0x0E, 0x2D, 0x00, 0x05, 0x8D, 0x05, 0x06, 0x05, 0x01, 0x00, 0x07, 0x04, 0x00, -/* 0000D5B0 */ 0x5A, 0x00, 0x02, 0x8D, 0x05, 0x18, 0x06, 0x02, 0x00, 0x5B, 0x01, 0x06, 0x00, 0x00, 0x8D, 0x01, -/* 0000D5C0 */ 0x02, 0x06, 0x03, 0x00, 0x5B, 0x02, 0x06, 0x00, 0x00, 0x5B, 0x03, 0x03, 0x00, 0x00, 0xEE, 0x04, -/* 0000D5D0 */ 0xFF, 0x05, 0x00, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFF, 0xD4, 0x5E, 0x02, 0x00, 0x03, 0x00, 0x00, -/* 0000D5E0 */ 0x00, 0x00, 0x10, 0x00, 0x2C, 0x00, 0x2F, 0x00, 0x5A, 0x00, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x13, -/* 0000D5F0 */ 0x88, 0x21, 0x00, 0xFE, 0xD7, 0x0C, 0x0C, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x3B, 0x04, 0xB8, 0xFF, -/* 0000D600 */ 0xCA, 0x4C, 0x02, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFF, 0xCA, 0x4C, 0x02, 0x00, -/* 0000D610 */ 0xFE, 0x21, 0x09, 0xFE, 0x21, 0x09, 0x01, 0x07, 0x15, 0x1A, 0x05, 0x88, 0x82, 0x04, 0x08, 0x03, -/* 0000D620 */ 0x0C, 0x0C, 0x0C, 0x0C, 0x06, 0x19, 0x07, 0x08, 0x0B, 0x06, 0xFE, 0x56, 0x04, 0x05, 0xFE, 0x53, -/* 0000D630 */ 0x04, 0x0C, 0x05, 0xFE, 0x58, 0x04, 0x06, 0xFE, 0x54, 0x04, 0x06, 0xFE, 0x48, 0x04, 0x06, 0xFE, -/* 0000D640 */ 0x40, 0x03, 0x06, 0xFE, 0x13, 0x04, 0x06, 0xFE, 0x42, 0x03, 0x06, 0xFE, 0x43, 0x03, 0x06, 0xFE, -/* 0000D650 */ 0x44, 0x03, 0x06, 0xFE, 0x49, 0x04, 0x06, 0xFE, 0x4A, 0x04, 0x06, 0xFE, 0x4B, 0x04, 0x06, 0xFE, -/* 0000D660 */ 0x4C, 0x04, 0x06, 0xFE, 0x4D, 0x04, 0xFE, 0x66, 0x02, 0xA6, 0x1A, 0x14, 0x03, 0x00, 0x15, 0x1A, -/* 0000D670 */ 0x09, 0x24, 0x00, 0x8D, 0x04, 0x04, 0x1A, 0x00, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x03, 0xCA, -/* 0000D680 */ 0x1B, 0x5B, 0x01, 0x1B, 0x00, 0x00, 0x5B, 0x02, 0x02, 0x00, 0x00, 0xEE, 0x03, 0x1A, 0x1A, 0x00, -/* 0000D690 */ 0x00, 0x47, 0x15, 0x1A, 0x09, 0x22, 0x00, 0x8D, 0x04, 0x24, 0x1B, 0x01, 0x00, 0x6B, 0x1A, 0x1B, -/* 0000D6A0 */ 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x1B, 0x5B, 0x01, 0x15, 0x01, 0x00, 0xF2, 0x02, 0x1A, 0x1A, -/* 0000D6B0 */ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x15, 0x1A, 0x47, 0x18, 0x04, 0x14, 0x08, 0x00, 0x16, -/* 0000D6C0 */ 0x05, 0x14, 0x03, 0x00, 0x16, 0x06, 0x09, 0x32, 0x00, 0x60, 0x1A, 0x15, 0x01, 0xA6, 0x1B, 0x15, -/* 0000D6D0 */ 0x24, 0x00, 0x1A, 0x1B, 0x60, 0x1A, 0x15, 0x02, 0xA6, 0x1B, 0x15, 0x19, 0x00, 0x1A, 0x1B, 0x60, -/* 0000D6E0 */ 0x1A, 0x15, 0x03, 0xA6, 0x1B, 0x15, 0x0E, 0x00, 0x1A, 0x1B, 0x60, 0x1A, 0x15, 0x04, 0xA6, 0x1B, -/* 0000D6F0 */ 0x15, 0x03, 0x00, 0x1A, 0x1B, 0x09, 0x03, 0x00, 0x47, 0x18, 0x07, 0x14, 0x08, 0x00, 0x16, 0x08, -/* 0000D700 */ 0x14, 0x03, 0x00, 0x16, 0x06, 0x09, 0x27, 0x00, 0x60, 0x1A, 0x15, 0x05, 0xA6, 0x1B, 0x15, 0x19, -/* 0000D710 */ 0x00, 0x1A, 0x1B, 0x60, 0x1A, 0x15, 0x06, 0xA6, 0x1B, 0x15, 0x0E, 0x00, 0x1A, 0x1B, 0x60, 0x1A, -/* 0000D720 */ 0x15, 0x07, 0xA6, 0x1B, 0x15, 0x03, 0x00, 0x1A, 0x1B, 0x09, 0x03, 0x00, 0x47, 0x18, 0x07, 0x0E, -/* 0000D730 */ 0xC7, 0x00, 0x18, 0x14, 0x08, 0x00, 0x17, 0x05, 0x14, 0x03, 0x00, 0x17, 0x09, 0x09, 0xBA, 0x00, -/* 0000D740 */ 0x8D, 0x04, 0x15, 0x1A, 0x02, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x5B, 0x01, 0x15, 0x02, -/* 0000D750 */ 0x00, 0x5B, 0x02, 0x0A, 0x02, 0x00, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, -/* 0000D760 */ 0x00, 0x00, 0x00, 0x79, 0x0C, 0x1B, 0x08, 0x79, 0x04, 0x1B, 0x09, 0x79, 0x04, 0x1B, 0x0A, 0x79, -/* 0000D770 */ 0x04, 0x1B, 0x0B, 0x5B, 0x03, 0x1B, 0x02, 0x00, 0xEE, 0x04, 0xFF, 0x1A, 0x02, 0x00, 0x8D, 0x04, -/* 0000D780 */ 0x15, 0x1A, 0x02, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x5B, 0x01, 0x15, 0x03, 0x00, 0x5B, -/* 0000D790 */ 0x02, 0x10, 0x03, 0x00, 0xCB, 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, -/* 0000D7A0 */ 0x00, 0x79, 0x0C, 0x1B, 0x08, 0x79, 0x04, 0x1B, 0x09, 0x79, 0x04, 0x1B, 0x0A, 0x79, 0x04, 0x1B, -/* 0000D7B0 */ 0x0B, 0x5B, 0x03, 0x1B, 0x03, 0x00, 0xEE, 0x04, 0xFF, 0x1A, 0x03, 0x00, 0x8D, 0x04, 0x15, 0x1A, -/* 0000D7C0 */ 0x02, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x5B, 0x01, 0x15, 0x04, 0x00, 0x5B, 0x02, 0x11, -/* 0000D7D0 */ 0x04, 0x00, 0xCB, 0x30, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00, 0x79, -/* 0000D7E0 */ 0x0C, 0x1B, 0x08, 0x79, 0x04, 0x1B, 0x09, 0x79, 0x04, 0x1B, 0x0A, 0x79, 0x04, 0x1B, 0x0B, 0x5B, -/* 0000D7F0 */ 0x03, 0x1B, 0x04, 0x00, 0xEE, 0x04, 0xFF, 0x1A, 0x04, 0x00, 0x0E, 0xC7, 0x00, 0x18, 0x14, 0x08, -/* 0000D800 */ 0x00, 0x17, 0x08, 0x14, 0x03, 0x00, 0x17, 0x09, 0x09, 0xBA, 0x00, 0x8D, 0x04, 0x15, 0x1A, 0x02, -/* 0000D810 */ 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x5B, 0x01, 0x15, 0x05, 0x00, 0x5B, 0x02, 0x12, 0x05, -/* 0000D820 */ 0x00, 0xCB, 0x48, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00, 0x79, 0x0C, -/* 0000D830 */ 0x1B, 0x08, 0x79, 0x04, 0x1B, 0x09, 0x79, 0x04, 0x1B, 0x0A, 0x79, 0x04, 0x1B, 0x0B, 0x5B, 0x03, -/* 0000D840 */ 0x1B, 0x05, 0x00, 0xEE, 0x04, 0xFF, 0x1A, 0x05, 0x00, 0x8D, 0x04, 0x15, 0x1A, 0x02, 0x00, 0x07, -/* 0000D850 */ 0x04, 0x00, 0x5A, 0x00, 0x03, 0x5B, 0x01, 0x15, 0x06, 0x00, 0x5B, 0x02, 0x13, 0x06, 0x00, 0xCB, -/* 0000D860 */ 0x60, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00, 0x79, 0x0C, 0x1B, 0x08, -/* 0000D870 */ 0x79, 0x04, 0x1B, 0x09, 0x79, 0x04, 0x1B, 0x0A, 0x79, 0x04, 0x1B, 0x0B, 0x5B, 0x03, 0x1B, 0x06, -/* 0000D880 */ 0x00, 0xEE, 0x04, 0xFF, 0x1A, 0x06, 0x00, 0x8D, 0x04, 0x15, 0x1A, 0x02, 0x00, 0x07, 0x04, 0x00, -/* 0000D890 */ 0x5A, 0x00, 0x03, 0x5B, 0x01, 0x15, 0x07, 0x00, 0x5B, 0x02, 0x14, 0x07, 0x00, 0xCB, 0x78, 0x00, -/* 0000D8A0 */ 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00, 0x79, 0x0C, 0x1B, 0x08, 0x79, 0x04, -/* 0000D8B0 */ 0x1B, 0x09, 0x79, 0x04, 0x1B, 0x0A, 0x79, 0x04, 0x1B, 0x0B, 0x5B, 0x03, 0x1B, 0x07, 0x00, 0xEE, -/* 0000D8C0 */ 0x04, 0xFF, 0x1A, 0x07, 0x00, 0x47, 0x00, 0x15, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x06, -/* 0000D8D0 */ 0x90, 0x00, 0x78, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, -/* 0000D8E0 */ 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x60, 0x00, -/* 0000D8F0 */ 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, -/* 0000D900 */ 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x03, 0x04, -/* 0000D910 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, -/* 0000D920 */ 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, -/* 0000D930 */ 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, -/* 0000D940 */ 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, -/* 0000D950 */ 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x00, 0x00, -/* 0000D960 */ 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, -/* 0000D970 */ 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0xFE, 0x36, 0x03, 0xFE, 0x44, 0x02, -/* 0000D980 */ 0xFE, 0x45, 0x02, 0xFE, 0x3F, 0x02, 0xFE, 0x3A, 0x02, 0xFE, 0x3C, 0x02, 0xFE, 0x3E, 0x02, 0xFE, -/* 0000D990 */ 0x41, 0x02, 0xFE, 0x83, 0x01, 0xFE, 0x82, 0x01, 0xFE, 0x80, 0x01, 0xFE, 0x81, 0x01, 0xFF, 0x14, -/* 0000D9A0 */ 0x4D, 0x02, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x31, 0x00, 0x24, 0x00, 0x4F, 0x00, -/* 0000D9B0 */ 0x22, 0x00, 0x49, 0x00, 0x03, 0x00, 0x29, 0x00, 0x0D, 0x00, 0x45, 0x00, 0x2F, 0x00, 0x97, 0x00, -/* 0000D9C0 */ 0x03, 0x00, 0x4E, 0x00, 0x0D, 0x00, 0x45, 0x00, 0x24, 0x00, 0x7A, 0x00, 0x03, 0x00, 0x4F, 0x00, -/* 0000D9D0 */ 0x11, 0x00, 0x57, 0x00, 0x3E, 0x00, 0xCB, 0x00, 0x3E, 0x00, 0xCC, 0x00, 0x3E, 0x00, 0xD8, 0x00, -/* 0000D9E0 */ 0x11, 0x00, 0x57, 0x00, 0x3E, 0x00, 0xCB, 0x00, 0x3E, 0x00, 0xCD, 0x00, 0x3E, 0x00, 0xDB, 0x00, -/* 0000D9F0 */ 0x08, 0x00, 0x1C, 0x00, 0x00, 0x3F, 0x5D, 0x18, 0xC1, 0x53, 0xAD, 0x25, 0x01, 0xFE, 0xDD, 0x0B, -/* 0000DA00 */ 0x18, 0xA0, 0x41, 0xD1, 0x00, 0xAF, 0xFF, 0x16, 0x1A, 0x02, 0x00, 0x06, 0xFF, 0x00, 0x10, 0x01, -/* 0000DA10 */ 0x00, 0x01, 0x01, 0xFF, 0x16, 0x1A, 0x02, 0x00, 0xFE, 0xC0, 0x31, 0xFE, 0xC0, 0x31, 0x01, 0xFE, -/* 0000DA20 */ 0xCA, 0x01, 0x0D, 0x21, 0x27, 0x09, 0xA8, 0xA8, 0x02, 0x0C, 0x01, 0x0A, 0x08, 0x08, 0x08, 0x08, -/* 0000DA30 */ 0x05, 0x02, 0x24, 0x25, 0x26, 0x27, 0x08, 0x06, 0xFE, 0x3D, 0x03, 0x06, 0xFE, 0x20, 0x04, 0x05, -/* 0000DA40 */ 0xFE, 0x21, 0x04, 0x05, 0xFE, 0x22, 0x04, 0x05, 0xFE, 0x23, 0x04, 0x06, 0xFE, 0x4C, 0x03, 0x06, -/* 0000DA50 */ 0xFE, 0x40, 0x03, 0x06, 0xFE, 0x42, 0x03, 0x0B, 0x06, 0xFE, 0x44, 0x03, 0x07, 0x06, 0xFE, 0xF7, -/* 0000DA60 */ 0x03, 0x06, 0xFE, 0x35, 0x04, 0x06, 0xFE, 0x28, 0x04, 0x06, 0xFE, 0x2B, 0x04, 0x06, 0xFE, 0x2C, -/* 0000DA70 */ 0x04, 0x06, 0xFE, 0xFA, 0x03, 0x06, 0xFE, 0xFB, 0x03, 0x06, 0xFE, 0xFC, 0x03, 0x06, 0xFE, 0xFD, -/* 0000DA80 */ 0x03, 0x06, 0xFE, 0xFE, 0x03, 0x06, 0xFE, 0x2F, 0x04, 0x06, 0xFE, 0x0B, 0x04, 0x0C, 0x06, 0xFE, -/* 0000DA90 */ 0x43, 0x03, 0x06, 0xFE, 0x0C, 0x04, 0x06, 0xFE, 0x0D, 0x04, 0x06, 0xFE, 0x26, 0x04, 0x06, 0xFE, -/* 0000DAA0 */ 0x8D, 0x03, 0x05, 0xFE, 0x25, 0x04, 0xFE, 0x21, 0x03, 0xA6, 0x21, 0xA6, 0x22, 0xA6, 0x23, 0x8D, -/* 0000DAB0 */ 0x02, 0x32, 0x29, 0x00, 0x00, 0x14, 0x0E, 0x00, 0x29, 0x03, 0x8D, 0x02, 0x32, 0x29, 0x00, 0x00, -/* 0000DAC0 */ 0x14, 0x03, 0x00, 0x29, 0x04, 0x09, 0xF9, 0x02, 0xDE, 0x00, 0x03, 0x01, 0xB6, 0x29, 0x00, 0x01, -/* 0000DAD0 */ 0x53, 0x01, 0x00, 0x21, 0x29, 0x93, 0x00, 0x02, 0x21, 0x8D, 0x02, 0x03, 0x2A, 0x01, 0x00, 0x6B, -/* 0000DAE0 */ 0x29, 0x2A, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x2A, 0x8D, 0x02, 0x23, 0x2B, 0x02, 0x00, 0x07, -/* 0000DAF0 */ 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x05, 0x01, 0x00, 0xB6, 0x2D, 0x00, 0x01, 0x53, 0x01, -/* 0000DB00 */ 0x01, 0x2C, 0x2D, 0x5B, 0x02, 0x2C, 0x01, 0x00, 0xEE, 0x03, 0x2B, 0x2B, 0x01, 0x00, 0x5B, 0x01, -/* 0000DB10 */ 0x2B, 0x00, 0x00, 0x8D, 0x02, 0x36, 0x2B, 0x03, 0x00, 0x4B, 0x2B, 0x60, 0x2B, 0x2B, 0x01, 0x5B, -/* 0000DB20 */ 0x02, 0x2B, 0x00, 0x00, 0xF2, 0x03, 0xFF, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8D, 0x02, -/* 0000DB30 */ 0x32, 0x29, 0x00, 0x00, 0x14, 0x03, 0x00, 0x29, 0x03, 0x09, 0x85, 0x02, 0xDE, 0x01, 0x04, 0x02, -/* 0000DB40 */ 0xB6, 0x29, 0x00, 0xB5, 0x01, 0x00, 0x00, 0x00, 0x29, 0x29, 0x01, 0x53, 0x01, 0x02, 0x22, 0x29, -/* 0000DB50 */ 0x93, 0x01, 0x02, 0x22, 0x01, 0x53, 0x01, 0x03, 0x23, 0x29, 0x93, 0x01, 0x03, 0x23, 0x8D, 0x02, -/* 0000DB60 */ 0x23, 0x29, 0x02, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x06, 0x02, 0x00, 0x8F, -/* 0000DB70 */ 0x01, 0x02, 0x2A, 0x04, 0x00, 0x5B, 0x02, 0x2A, 0x02, 0x00, 0xEE, 0x03, 0xFF, 0x29, 0x02, 0x00, -/* 0000DB80 */ 0x8D, 0x02, 0x23, 0x29, 0x02, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x07, 0x03, -/* 0000DB90 */ 0x00, 0x8F, 0x01, 0x03, 0x2A, 0x05, 0x00, 0x5B, 0x02, 0x2A, 0x03, 0x00, 0xEE, 0x03, 0xFF, 0x29, -/* 0000DBA0 */ 0x03, 0x00, 0x8D, 0x02, 0x15, 0x29, 0x06, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8F, 0x01, -/* 0000DBB0 */ 0x02, 0x2A, 0x04, 0x00, 0x5B, 0x01, 0x2A, 0x04, 0x00, 0x5B, 0x02, 0x08, 0x04, 0x00, 0xCB, 0x00, -/* 0000DBC0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x8D, 0x01, 0x15, 0x2B, 0x07, -/* 0000DBD0 */ 0x00, 0x4B, 0x2B, 0x79, 0x2B, 0x2A, 0x02, 0x79, 0x0B, 0x2A, 0x03, 0x79, 0x0B, 0x2A, 0x04, 0x5B, -/* 0000DBE0 */ 0x03, 0x2A, 0x04, 0x00, 0xEE, 0x04, 0xFF, 0x29, 0x04, 0x00, 0xCD, 0x29, 0x0B, 0x00, 0x00, 0x9F, -/* 0000DBF0 */ 0x00, 0x0E, 0x29, 0x9F, 0x01, 0x0F, 0x29, 0x9F, 0x02, 0x10, 0x29, 0x9F, 0x03, 0x11, 0x29, 0x9F, -/* 0000DC00 */ 0x04, 0x12, 0x29, 0x9F, 0x05, 0x13, 0x29, 0x9F, 0x06, 0x14, 0x29, 0x9F, 0x07, 0x15, 0x29, 0x9F, -/* 0000DC10 */ 0x08, 0x16, 0x29, 0x9F, 0x09, 0x17, 0x29, 0x9F, 0x0A, 0x18, 0x29, 0x94, 0x02, 0x29, 0x8D, 0x02, -/* 0000DC20 */ 0x15, 0x29, 0x06, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8F, 0x01, 0x02, 0x2A, 0x04, 0x00, -/* 0000DC30 */ 0x5B, 0x01, 0x2A, 0x05, 0x00, 0x5B, 0x02, 0x19, 0x05, 0x00, 0xCB, 0x14, 0x00, 0x00, 0x00, 0x01, -/* 0000DC40 */ 0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x8F, 0x01, 0x02, 0x2B, 0x04, 0x00, 0x07, 0x01, 0x00, -/* 0000DC50 */ 0xC2, 0x01, 0x2B, 0x2B, 0x06, 0x00, 0x79, 0x2B, 0x2A, 0x02, 0x79, 0x1A, 0x2A, 0x03, 0x79, 0x1A, -/* 0000DC60 */ 0x2A, 0x05, 0x79, 0x1A, 0x2A, 0x04, 0x5B, 0x03, 0x2A, 0x05, 0x00, 0xEE, 0x04, 0xFF, 0x29, 0x05, -/* 0000DC70 */ 0x00, 0x8D, 0x02, 0x04, 0x29, 0x08, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x8F, 0x01, 0x02, -/* 0000DC80 */ 0x2A, 0x04, 0x00, 0x60, 0x2A, 0x2A, 0x06, 0x5B, 0x01, 0x2A, 0x07, 0x00, 0x8D, 0x02, 0x08, 0x2A, -/* 0000DC90 */ 0x09, 0x00, 0x60, 0x2A, 0x2A, 0x06, 0x5B, 0x02, 0x2A, 0x07, 0x00, 0xEE, 0x03, 0xFF, 0x29, 0x07, -/* 0000DCA0 */ 0x00, 0x8D, 0x02, 0x15, 0x29, 0x06, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8F, 0x01, 0x02, -/* 0000DCB0 */ 0x2A, 0x04, 0x00, 0x60, 0x2A, 0x2A, 0x06, 0x5B, 0x01, 0x2A, 0x08, 0x00, 0x5B, 0x02, 0x1C, 0x08, -/* 0000DCC0 */ 0x00, 0xCB, 0x2C, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x8F, 0x01, -/* 0000DCD0 */ 0x02, 0x2B, 0x04, 0x00, 0x79, 0x2B, 0x2A, 0x02, 0x79, 0x0B, 0x2A, 0x03, 0x79, 0x1A, 0x2A, 0x05, -/* 0000DCE0 */ 0x79, 0x0B, 0x2A, 0x04, 0x5B, 0x03, 0x2A, 0x08, 0x00, 0xEE, 0x04, 0xFF, 0x29, 0x08, 0x00, 0x8D, -/* 0000DCF0 */ 0x02, 0x15, 0x29, 0x06, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8F, 0x01, 0x02, 0x2A, 0x04, -/* 0000DD00 */ 0x00, 0x60, 0x2A, 0x2A, 0x06, 0x5B, 0x01, 0x2A, 0x09, 0x00, 0x5B, 0x02, 0x1D, 0x09, 0x00, 0xCB, -/* 0000DD10 */ 0x44, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x00, 0xB6, 0x2C, 0x00, 0xB5, -/* 0000DD20 */ 0x01, 0x00, 0x00, 0x00, 0x2C, 0x2C, 0x01, 0x57, 0x01, 0x04, 0x2B, 0x2C, 0x2A, 0x79, 0x2B, 0x2A, -/* 0000DD30 */ 0x02, 0x79, 0x0B, 0x2A, 0x03, 0x79, 0x1A, 0x2A, 0x05, 0x79, 0x0B, 0x2A, 0x04, 0x5B, 0x03, 0x2A, -/* 0000DD40 */ 0x09, 0x00, 0xEE, 0x04, 0xFF, 0x29, 0x09, 0x00, 0x8D, 0x02, 0x15, 0x29, 0x06, 0x00, 0x07, 0x04, -/* 0000DD50 */ 0x00, 0x5A, 0x00, 0x02, 0x8F, 0x01, 0x02, 0x2A, 0x04, 0x00, 0x60, 0x2A, 0x2A, 0x06, 0x5B, 0x01, -/* 0000DD60 */ 0x2A, 0x0A, 0x00, 0x5B, 0x02, 0x1E, 0x0A, 0x00, 0xCB, 0x5C, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, -/* 0000DD70 */ 0x00, 0x2A, 0x00, 0x00, 0x00, 0x8D, 0x02, 0x23, 0x2B, 0x02, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, -/* 0000DD80 */ 0x02, 0x5B, 0x01, 0x20, 0x0B, 0x00, 0xB6, 0x2D, 0x00, 0xB5, 0x01, 0x00, 0x00, 0x00, 0x2D, 0x2D, -/* 0000DD90 */ 0x01, 0x53, 0x01, 0x05, 0x2C, 0x2D, 0x5B, 0x02, 0x2C, 0x0B, 0x00, 0xEE, 0x03, 0x2B, 0x2B, 0x0B, -/* 0000DDA0 */ 0x00, 0x79, 0x2B, 0x2A, 0x07, 0x79, 0x1A, 0x2A, 0x05, 0x79, 0x0B, 0x2A, 0x04, 0x5B, 0x03, 0x2A, -/* 0000DDB0 */ 0x0A, 0x00, 0xEE, 0x04, 0xFF, 0x29, 0x0A, 0x00, 0x8F, 0x01, 0x02, 0x00, 0x04, 0x00, 0x09, 0x07, -/* 0000DDC0 */ 0x00, 0xA6, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x05, 0x70, 0x00, 0x5C, 0x00, 0x00, -/* 0000DDD0 */ 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, -/* 0000DDE0 */ 0x00, 0x81, 0x01, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 0000DDF0 */ 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, -/* 0000DE00 */ 0x00, 0x2C, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, -/* 0000DE10 */ 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x14, 0x00, 0x00, -/* 0000DE20 */ 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, -/* 0000DE30 */ 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, -/* 0000DE40 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, -/* 0000DE50 */ 0x00, 0xFE, 0xEE, 0x01, 0xFE, 0x06, 0x03, 0xFE, 0x83, 0x01, 0xFE, 0x82, 0x01, 0xFE, 0x81, 0x01, -/* 0000DE60 */ 0xFE, 0x80, 0x01, 0xFE, 0x15, 0x01, 0xFE, 0x84, 0x01, 0x02, 0x01, 0x01, 0x00, 0xFE, 0x1F, 0x04, -/* 0000DE70 */ 0x02, 0x02, 0x00, 0xFE, 0x01, 0x02, 0x01, 0xFE, 0xF5, 0x01, 0xFF, 0x2C, 0x1A, 0x02, 0x00, 0x0F, -/* 0000DE80 */ 0x06, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x0A, 0x1C, 0x55, 0x00, 0x74, 0x02, 0x30, 0x00, 0x5A, 0x04, -/* 0000DE90 */ 0x22, 0x00, 0xD4, 0x02, 0x22, 0x00, 0x52, 0x00, 0x48, 0x00, 0x9B, 0x00, 0x34, 0x00, 0x1F, 0x01, -/* 0000DEA0 */ 0x53, 0x00, 0x99, 0x00, 0x30, 0x00, 0x48, 0x00, 0x4E, 0x00, 0x9E, 0x00, 0x59, 0x00, 0xC2, 0x04, -/* 0000DEB0 */ 0x70, 0x00, 0x16, 0x03, 0x09, 0x00, 0x84, 0x00, 0x07, 0x00, 0x16, 0x00, 0x00, 0x04, 0xE7, 0x00, -/* 0000DEC0 */ 0x00, 0x93, 0xE5, 0x00, 0x00, 0x67, 0xE3, 0x00, 0x00, 0xFC, 0xE1, 0x00, 0x00, 0xDC, 0xDF, 0x00, -/* 0000DED0 */ 0x00, 0xD5, 0xDE, 0x00, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0xBF, 0x0C, -/* 0000DEE0 */ 0x39, 0xA0, 0x41, 0xD1, 0x00, 0xB6, 0xFF, 0x97, 0x48, 0x02, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, -/* 0000DEF0 */ 0x01, 0x01, 0xFF, 0x97, 0x48, 0x02, 0x00, 0xFE, 0x56, 0x02, 0xFE, 0x56, 0x02, 0x01, 0x05, 0x05, -/* 0000DF00 */ 0x08, 0x04, 0x23, 0x22, 0x05, 0x03, 0x01, 0x04, 0x04, 0x04, 0x04, 0x07, 0x06, 0xFE, 0xF6, 0x03, -/* 0000DF10 */ 0x05, 0xFE, 0x32, 0x04, 0x06, 0xFE, 0x46, 0x03, 0x94, 0x59, 0x08, 0xB2, 0x05, 0x08, 0x2C, 0x08, -/* 0000DF20 */ 0x05, 0x15, 0x03, 0x00, 0x08, 0x02, 0x09, 0x24, 0x00, 0x8D, 0x05, 0x03, 0x09, 0x00, 0x00, 0x6B, -/* 0000DF30 */ 0x08, 0x09, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x09, 0x5B, 0x01, 0x03, 0x00, 0x00, 0x5B, 0x02, -/* 0000DF40 */ 0x04, 0x00, 0x00, 0xF2, 0x03, 0xFF, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8D, 0x05, 0x03, -/* 0000DF50 */ 0x09, 0x00, 0x00, 0x6B, 0x08, 0x09, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x09, 0x5B, 0x01, 0x05, -/* 0000DF60 */ 0x01, 0x00, 0xF2, 0x02, 0x08, 0x08, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x06, 0x08, 0xA6, -/* 0000DF70 */ 0x08, 0x14, 0x08, 0x00, 0x06, 0x08, 0x60, 0x08, 0x06, 0x02, 0x0F, 0x24, 0x00, 0x08, 0x8D, 0x05, -/* 0000DF80 */ 0x03, 0x09, 0x00, 0x00, 0x6B, 0x08, 0x09, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x09, 0x5B, 0x01, -/* 0000DF90 */ 0x03, 0x02, 0x00, 0x5B, 0x02, 0x04, 0x02, 0x00, 0xF2, 0x03, 0xFF, 0x08, 0x00, 0x00, 0x00, 0x00, -/* 0000DFA0 */ 0x02, 0x00, 0x60, 0x00, 0x06, 0x03, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x8A, 0x02, -/* 0000DFB0 */ 0xFE, 0xEF, 0x01, 0xFE, 0x06, 0x02, 0xFE, 0x25, 0x02, 0xFF, 0xBD, 0x48, 0x02, 0x00, 0x07, 0x05, -/* 0000DFC0 */ 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3C, 0x00, 0x24, 0x00, 0x84, 0x00, 0x22, 0x00, 0x4B, 0x00, 0x0F, -/* 0000DFD0 */ 0x00, 0x69, 0x00, 0x24, 0x00, 0x84, 0x00, 0x09, 0x00, 0x37, 0x00, 0x00, 0x3F, 0x5D, 0x08, 0xC1, -/* 0000DFE0 */ 0x03, 0x8D, 0x07, 0x00, 0xFE, 0xA9, 0x0C, 0x1B, 0xA0, 0x41, 0xC3, 0x00, 0xFE, 0x0D, 0x04, 0xB4, -/* 0000DFF0 */ 0xFF, 0x00, 0x00, 0x00, 0x02, 0xFF, 0xC0, 0x43, 0x02, 0x00, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, -/* 0000E000 */ 0x01, 0x01, 0xFF, 0xC0, 0x43, 0x02, 0x00, 0xFE, 0x08, 0x04, 0xFE, 0x08, 0x04, 0x02, 0xFE, 0x02, -/* 0000E010 */ 0x04, 0xFE, 0xFA, 0x01, 0x06, 0x07, 0x0B, 0x05, 0x3E, 0x3E, 0x05, 0x06, 0x07, 0x03, 0x03, 0x03, -/* 0000E020 */ 0x03, 0x08, 0x09, 0x0A, 0x06, 0xFE, 0xF6, 0x03, 0x05, 0xFE, 0x34, 0x04, 0x06, 0xFE, 0x46, 0x03, -/* 0000E030 */ 0x07, 0x08, 0xFE, 0x0E, 0x01, 0x59, 0x0B, 0xB2, 0x07, 0x0B, 0x2C, 0x0B, 0x07, 0x15, 0x03, 0x00, -/* 0000E040 */ 0x0B, 0x02, 0x09, 0x24, 0x00, 0x8D, 0x05, 0x03, 0x0C, 0x00, 0x00, 0x6B, 0x0B, 0x0C, 0x00, 0x07, -/* 0000E050 */ 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x03, 0x00, 0x00, 0x5B, 0x02, 0x04, 0x00, 0x00, 0xF2, -/* 0000E060 */ 0x03, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8D, 0x05, 0x03, 0x0C, 0x00, 0x00, 0x6B, -/* 0000E070 */ 0x0B, 0x0C, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x07, 0x01, 0x00, 0xF2, 0x02, -/* 0000E080 */ 0x0B, 0x0B, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x94, 0x02, 0x0B, 0x91, 0x02, 0x0B, 0x01, 0x00, -/* 0000E090 */ 0xA6, 0x0C, 0x14, 0x0D, 0x00, 0x0B, 0x0C, 0x91, 0x02, 0x0B, 0x01, 0x00, 0x60, 0x0B, 0x0B, 0x02, -/* 0000E0A0 */ 0x0F, 0x24, 0x00, 0x0B, 0x8D, 0x05, 0x03, 0x0C, 0x00, 0x00, 0x6B, 0x0B, 0x0C, 0x00, 0x07, 0x03, -/* 0000E0B0 */ 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x03, 0x02, 0x00, 0x5B, 0x02, 0x04, 0x02, 0x00, 0xF2, 0x03, -/* 0000E0C0 */ 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x8D, 0x05, 0x04, 0x0B, 0x02, 0x00, 0x07, 0x03, -/* 0000E0D0 */ 0x00, 0x5A, 0x00, 0x06, 0xCA, 0x0C, 0x5B, 0x01, 0x0C, 0x03, 0x00, 0x5B, 0x02, 0x05, 0x03, 0x00, -/* 0000E0E0 */ 0xEE, 0x03, 0x0B, 0x0B, 0x03, 0x00, 0x94, 0x03, 0x0B, 0x8D, 0x05, 0x06, 0x0B, 0x03, 0x00, 0x07, -/* 0000E0F0 */ 0x04, 0x00, 0x5A, 0x00, 0x06, 0x8D, 0x05, 0x16, 0x0C, 0x04, 0x00, 0x5B, 0x01, 0x0C, 0x04, 0x00, -/* 0000E100 */ 0x8D, 0x03, 0x02, 0x0C, 0x05, 0x00, 0x5B, 0x02, 0x0C, 0x04, 0x00, 0xD3, 0x00, 0x0C, 0x5B, 0x03, -/* 0000E110 */ 0x0C, 0x04, 0x00, 0xEE, 0x04, 0xFF, 0x0B, 0x04, 0x00, 0x8D, 0x05, 0x04, 0x0B, 0x02, 0x00, 0x07, -/* 0000E120 */ 0x03, 0x00, 0x5A, 0x00, 0x06, 0x91, 0x03, 0x0C, 0x06, 0x00, 0x5B, 0x01, 0x0C, 0x05, 0x00, 0xCA, -/* 0000E130 */ 0x0C, 0x5B, 0x02, 0x0C, 0x05, 0x00, 0xEE, 0x03, 0x00, 0x0B, 0x05, 0x00, 0x09, 0x02, 0x00, 0xA6, -/* 0000E140 */ 0x00, 0x24, 0x00, 0xFE, 0x8A, 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0x06, 0x02, 0xFF, 0xF5, 0x43, 0x02, -/* 0000E150 */ 0x00, 0x09, 0x05, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3C, 0x00, 0x24, 0x00, 0x8C, 0x00, 0x22, 0x00, -/* 0000E160 */ 0x4B, 0x00, 0x19, 0x00, 0x69, 0x00, 0x24, 0x00, 0x8D, 0x00, 0x21, 0x00, 0x47, 0x00, 0x30, 0x00, -/* 0000E170 */ 0x44, 0x01, 0x28, 0x00, 0x3E, 0x00, 0x00, 0x7B, 0xE1, 0x00, 0x00, 0xBF, 0x4C, 0x06, 0x01, 0x00, -/* 0000E180 */ 0x88, 0x01, 0x00, 0xFE, 0xB4, 0x0C, 0x48, 0xA2, 0x41, 0xD1, 0x00, 0xB5, 0xFF, 0x75, 0x46, 0x02, -/* 0000E190 */ 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0x75, 0x46, 0x02, 0x00, 0xF8, 0xF8, 0x41, -/* 0000E1A0 */ 0x05, 0x04, 0x06, 0x0D, 0x0D, 0x06, 0x01, 0x01, 0x02, 0x05, 0x05, 0xFE, 0xD4, 0x04, 0x06, 0xFE, -/* 0000E1B0 */ 0xF5, 0x03, 0x36, 0x8D, 0x01, 0x02, 0x06, 0x00, 0x00, 0x2F, 0x07, 0x02, 0x04, 0x2D, 0x06, 0x06, -/* 0000E1C0 */ 0x07, 0x15, 0x03, 0x00, 0x06, 0x03, 0x09, 0x1C, 0x00, 0x8D, 0x01, 0x03, 0x06, 0x01, 0x00, 0x8D, -/* 0000E1D0 */ 0x01, 0x02, 0x07, 0x00, 0x00, 0x2F, 0x08, 0x02, 0x04, 0x96, 0x07, 0x07, 0x08, 0x00, 0x00, 0x9B, -/* 0000E1E0 */ 0x07, 0x06, 0x04, 0x00, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFF, 0xA5, 0x46, 0x02, 0x00, 0x03, 0x00, -/* 0000E1F0 */ 0x00, 0x00, 0x00, 0x16, 0x00, 0x5A, 0x00, 0x1E, 0x00, 0x6D, 0x00, 0x00, 0xBF, 0x5C, 0x08, 0xC1, -/* 0000E200 */ 0x03, 0x88, 0x01, 0x00, 0xFE, 0x8E, 0x0C, 0x10, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x26, 0x04, 0xB3, -/* 0000E210 */ 0xFF, 0x4B, 0x3D, 0x02, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0x4B, 0x3D, 0x02, -/* 0000E220 */ 0x00, 0xFE, 0x7C, 0x02, 0xFE, 0x7C, 0x02, 0x01, 0x07, 0x06, 0x0A, 0x07, 0x35, 0x33, 0x05, 0x06, -/* 0000E230 */ 0x03, 0x05, 0x05, 0x05, 0x05, 0x09, 0x06, 0xFE, 0xF6, 0x03, 0x05, 0xFE, 0x32, 0x04, 0x06, 0xFE, -/* 0000E240 */ 0x46, 0x03, 0x08, 0xED, 0x59, 0x0A, 0xB2, 0x07, 0x0A, 0x8D, 0x05, 0x24, 0x0B, 0x00, 0x00, 0x6B, -/* 0000E250 */ 0x0A, 0x0B, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0B, 0x5B, 0x01, 0x06, 0x00, 0x00, 0xF2, 0x02, -/* 0000E260 */ 0x0A, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x06, 0x0A, 0x2C, 0x0A, 0x07, 0x15, 0x03, -/* 0000E270 */ 0x00, 0x0A, 0x02, 0x09, 0x24, 0x00, 0x8D, 0x05, 0x03, 0x0B, 0x01, 0x00, 0x6B, 0x0A, 0x0B, 0x01, -/* 0000E280 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0B, 0x5B, 0x01, 0x03, 0x01, 0x00, 0x5B, 0x02, 0x04, 0x01, 0x00, -/* 0000E290 */ 0xF2, 0x03, 0xFF, 0x0A, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x8D, 0x05, 0x03, 0x0B, 0x01, 0x00, -/* 0000E2A0 */ 0x6B, 0x0A, 0x0B, 0x02, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0B, 0x5B, 0x01, 0x07, 0x02, 0x00, 0xF2, -/* 0000E2B0 */ 0x02, 0x0A, 0x0A, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x47, 0x08, 0x0A, 0xA6, 0x0A, 0x14, 0x08, -/* 0000E2C0 */ 0x00, 0x08, 0x0A, 0x60, 0x0A, 0x08, 0x03, 0x0F, 0x24, 0x00, 0x0A, 0x8D, 0x05, 0x03, 0x0B, 0x01, -/* 0000E2D0 */ 0x00, 0x6B, 0x0A, 0x0B, 0x01, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0B, 0x5B, 0x01, 0x03, 0x03, 0x00, -/* 0000E2E0 */ 0x5B, 0x02, 0x04, 0x03, 0x00, 0xF2, 0x03, 0xFF, 0x0A, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x8D, -/* 0000E2F0 */ 0x05, 0x0B, 0x0A, 0x02, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x05, 0x8D, 0x05, 0x03, 0x0C, 0x01, -/* 0000E300 */ 0x00, 0x6B, 0x0B, 0x0C, 0x04, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x06, 0x05, 0x00, -/* 0000E310 */ 0x5B, 0x02, 0x08, 0x05, 0x00, 0xF2, 0x03, 0x0B, 0x0B, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x5B, -/* 0000E320 */ 0x01, 0x0B, 0x04, 0x00, 0xEE, 0x02, 0x00, 0x0A, 0x04, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, -/* 0000E330 */ 0x00, 0xFE, 0x38, 0x03, 0xFE, 0x8A, 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0x06, 0x02, 0xFE, 0xE2, 0x01, -/* 0000E340 */ 0xFF, 0x74, 0x3D, 0x02, 0x00, 0x08, 0x05, 0x00, 0x00, 0x00, 0x22, 0x00, 0x2F, 0x00, 0x0B, 0x00, -/* 0000E350 */ 0x38, 0x00, 0x24, 0x00, 0x7C, 0x00, 0x22, 0x00, 0x47, 0x00, 0x0F, 0x00, 0x65, 0x00, 0x24, 0x00, -/* 0000E360 */ 0x7C, 0x00, 0x40, 0x00, 0x47, 0x00, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, -/* 0000E370 */ 0x72, 0x0C, 0x10, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x46, 0x03, 0xB2, 0xFF, 0xD5, 0x38, 0x02, 0x00, -/* 0000E380 */ 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x01, 0xFF, 0xD5, 0x38, 0x02, 0x00, 0xFE, 0x1E, 0x04, 0xFE, -/* 0000E390 */ 0x1E, 0x04, 0x01, 0x09, 0x05, 0x0B, 0x05, 0x60, 0x59, 0x05, 0x09, 0x09, 0x07, 0x06, 0x07, 0x07, -/* 0000E3A0 */ 0x0A, 0x08, 0x06, 0xFE, 0x46, 0x03, 0x07, 0xFE, 0x8F, 0x01, 0x59, 0x0B, 0xB2, 0x07, 0x0B, 0x4F, -/* 0000E3B0 */ 0x08, 0x4F, 0x09, 0x15, 0x05, 0x00, 0x05, 0x02, 0xA6, 0x0B, 0x47, 0x05, 0x0B, 0x15, 0x05, 0x00, -/* 0000E3C0 */ 0x06, 0x02, 0xA6, 0x0B, 0x47, 0x06, 0x0B, 0x4F, 0x08, 0x4F, 0x09, 0x69, 0x06, 0x00, 0x00, 0x00, -/* 0000E3D0 */ 0x0B, 0x14, 0x0A, 0x00, 0x07, 0x0B, 0xA6, 0x0B, 0x14, 0x03, 0x00, 0x07, 0x0B, 0x09, 0x1E, 0x00, -/* 0000E3E0 */ 0x8D, 0x01, 0x02, 0x0B, 0x00, 0x00, 0x4B, 0x0B, 0x07, 0x03, 0x00, 0x5B, 0x01, 0x05, 0x00, 0x00, -/* 0000E3F0 */ 0x5B, 0x02, 0x06, 0x00, 0x00, 0xC2, 0x03, 0x00, 0x0B, 0x00, 0x00, 0x09, 0x39, 0x01, 0x8D, 0x05, -/* 0000E400 */ 0x24, 0x0C, 0x01, 0x00, 0x6B, 0x0B, 0x0C, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, -/* 0000E410 */ 0x07, 0x01, 0x00, 0xF2, 0x02, 0x0B, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x08, 0x0B, -/* 0000E420 */ 0x8D, 0x05, 0x11, 0x0B, 0x02, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x08, 0x02, -/* 0000E430 */ 0x00, 0xEE, 0x02, 0x0B, 0x0B, 0x02, 0x00, 0x0F, 0x1F, 0x00, 0x0B, 0x8D, 0x05, 0x03, 0x0C, 0x03, -/* 0000E440 */ 0x00, 0x6B, 0x0B, 0x0C, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x03, 0x03, 0x00, -/* 0000E450 */ 0xF2, 0x02, 0xFF, 0x0B, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x8D, 0x05, 0x03, 0x0C, 0x03, 0x00, -/* 0000E460 */ 0x6B, 0x0B, 0x0C, 0x02, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x08, 0x04, 0x00, 0xF2, -/* 0000E470 */ 0x02, 0x0B, 0x0B, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x47, 0x09, 0x0B, 0xA6, 0x0B, 0x14, 0x03, -/* 0000E480 */ 0x00, 0x09, 0x0B, 0x09, 0x45, 0x00, 0x8D, 0x05, 0x04, 0x0B, 0x04, 0x00, 0x07, 0x03, 0x00, 0x5A, -/* 0000E490 */ 0x00, 0x02, 0xCA, 0x0C, 0x5B, 0x01, 0x0C, 0x05, 0x00, 0x5B, 0x02, 0x04, 0x05, 0x00, 0xEE, 0x03, -/* 0000E4A0 */ 0x0B, 0x0B, 0x05, 0x00, 0x47, 0x09, 0x0B, 0x8D, 0x05, 0x03, 0x0C, 0x03, 0x00, 0x6B, 0x0B, 0x0C, -/* 0000E4B0 */ 0x03, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x08, 0x06, 0x00, 0x5B, 0x02, 0x09, 0x06, -/* 0000E4C0 */ 0x00, 0xF2, 0x03, 0xFF, 0x0B, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x8D, 0x02, 0x02, 0x0B, 0x05, -/* 0000E4D0 */ 0x00, 0x4B, 0x0B, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x09, 0x07, 0x00, 0x5B, 0x02, -/* 0000E4E0 */ 0x05, 0x07, 0x00, 0x5B, 0x03, 0x06, 0x07, 0x00, 0xEE, 0x04, 0xFF, 0x0B, 0x07, 0x00, 0x47, 0x0B, -/* 0000E4F0 */ 0x09, 0x8D, 0x05, 0x06, 0x0C, 0x06, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8D, 0x05, 0x1A, -/* 0000E500 */ 0x0D, 0x07, 0x00, 0x5B, 0x01, 0x0D, 0x08, 0x00, 0x8D, 0x01, 0x03, 0x0D, 0x08, 0x00, 0x4B, 0x0D, -/* 0000E510 */ 0x5B, 0x02, 0x0D, 0x08, 0x00, 0x5B, 0x03, 0x08, 0x08, 0x00, 0xEE, 0x04, 0x0C, 0x0C, 0x08, 0x00, -/* 0000E520 */ 0x75, 0x0C, 0x0B, 0x04, 0x60, 0x0B, 0x09, 0x05, 0x80, 0x0B, 0x0B, 0xF8, 0x00, 0xFA, 0x0B, 0x47, -/* 0000E530 */ 0x00, 0x08, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x36, 0x03, 0xFE, 0x8E, 0x02, 0xFE, -/* 0000E540 */ 0xEF, 0x01, 0xFE, 0xF0, 0x01, 0xFE, 0x25, 0x02, 0xFE, 0x25, 0x02, 0xAB, 0xFF, 0xEB, 0x38, 0x02, -/* 0000E550 */ 0x00, 0x10, 0x09, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0E, 0x00, 0x2B, 0x00, 0x15, 0x00, -/* 0000E560 */ 0x43, 0x00, 0x1E, 0x00, 0x56, 0x00, 0x22, 0x00, 0x38, 0x00, 0x1B, 0x00, 0x38, 0x00, 0x1F, 0x00, -/* 0000E570 */ 0x9B, 0x00, 0x22, 0x00, 0x47, 0x00, 0x0A, 0x00, 0x3A, 0x00, 0x21, 0x00, 0x3F, 0x00, 0x24, 0x00, -/* 0000E580 */ 0x58, 0x00, 0x23, 0x00, 0x4D, 0x00, 0x36, 0x00, 0x65, 0x00, 0x0B, 0x00, 0x3D, 0x00, 0x08, 0x00, -/* 0000E590 */ 0x1C, 0x00, 0x00, 0xBF, 0x5C, 0x0A, 0xC1, 0x07, 0x88, 0x01, 0x00, 0xFE, 0x65, 0x0C, 0x62, 0xA0, -/* 0000E5A0 */ 0x41, 0xF1, 0x00, 0xB1, 0xFF, 0x8C, 0x36, 0x02, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, -/* 0000E5B0 */ 0xFF, 0x8C, 0x36, 0x02, 0x00, 0xFE, 0xE1, 0x01, 0xFE, 0xE1, 0x01, 0x03, 0x08, 0x09, 0x0E, 0x07, -/* 0000E5C0 */ 0x39, 0x37, 0x04, 0x02, 0x06, 0x06, 0x03, 0x03, 0x03, 0x03, 0x01, 0x0D, 0x07, 0x06, 0xFE, 0xC3, -/* 0000E5D0 */ 0x03, 0x05, 0xFE, 0x21, 0x04, 0x06, 0xFE, 0x20, 0x04, 0x08, 0x01, 0x00, 0x01, 0x01, 0xF9, 0xAC, -/* 0000E5E0 */ 0x0B, 0x59, 0x0E, 0xB2, 0x09, 0x0E, 0x2C, 0x0E, 0x09, 0x15, 0x03, 0x00, 0x0E, 0x03, 0x09, 0x33, -/* 0000E5F0 */ 0x00, 0x8D, 0x04, 0x0A, 0x0E, 0x00, 0x00, 0xE1, 0x0E, 0x09, 0x0E, 0x00, 0x0F, 0x24, 0x00, 0x0E, -/* 0000E600 */ 0x8D, 0x04, 0x03, 0x0F, 0x01, 0x00, 0x6B, 0x0E, 0x0F, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0F, -/* 0000E610 */ 0x5B, 0x01, 0x04, 0x00, 0x00, 0x5B, 0x02, 0x05, 0x00, 0x00, 0xF2, 0x03, 0xFF, 0x0E, 0x00, 0x00, -/* 0000E620 */ 0x00, 0x00, 0x00, 0x00, 0x8D, 0x04, 0x04, 0x0E, 0x02, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x06, -/* 0000E630 */ 0xCA, 0x0F, 0x5B, 0x01, 0x0F, 0x01, 0x00, 0x5B, 0x02, 0x02, 0x01, 0x00, 0xEE, 0x03, 0x0E, 0x0E, -/* 0000E640 */ 0x01, 0x00, 0x47, 0x0A, 0x0E, 0x8D, 0x01, 0x02, 0x0E, 0x03, 0x00, 0x4B, 0x0E, 0x07, 0x04, 0x00, -/* 0000E650 */ 0x5A, 0x00, 0x06, 0x5B, 0x01, 0x0A, 0x02, 0x00, 0x96, 0x0F, 0x0B, 0x07, 0x00, 0x00, 0x5B, 0x02, -/* 0000E660 */ 0x0F, 0x02, 0x00, 0x96, 0x0F, 0x0B, 0x08, 0x01, 0x00, 0x5B, 0x03, 0x0F, 0x02, 0x00, 0xEE, 0x04, -/* 0000E670 */ 0xFF, 0x0E, 0x02, 0x00, 0x8D, 0x04, 0x24, 0x0F, 0x04, 0x00, 0x6B, 0x0E, 0x0F, 0x01, 0x07, 0x02, -/* 0000E680 */ 0x00, 0x5A, 0x00, 0x0F, 0x5B, 0x01, 0x09, 0x03, 0x00, 0xF2, 0x02, 0x0E, 0x0E, 0x01, 0x00, 0x00, -/* 0000E690 */ 0x00, 0x03, 0x00, 0x47, 0x0C, 0x0E, 0x8D, 0x04, 0x0B, 0x0E, 0x05, 0x00, 0x07, 0x02, 0x00, 0x5A, -/* 0000E6A0 */ 0x00, 0x06, 0x8D, 0x04, 0x03, 0x10, 0x01, 0x00, 0x6B, 0x0F, 0x10, 0x02, 0x07, 0x03, 0x00, 0x5A, -/* 0000E6B0 */ 0x00, 0x10, 0x5B, 0x01, 0x0C, 0x05, 0x00, 0x5B, 0x02, 0x0A, 0x05, 0x00, 0xF2, 0x03, 0x0F, 0x0F, -/* 0000E6C0 */ 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x5B, 0x01, 0x0F, 0x04, 0x00, 0xEE, 0x02, 0x00, 0x0E, 0x04, -/* 0000E6D0 */ 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x8A, 0x02, 0xFE, 0x38, 0x03, 0xFE, 0xE2, -/* 0000E6E0 */ 0x01, 0xFF, 0xAA, 0x36, 0x02, 0x00, 0x07, 0x07, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x53, 0x00, 0x24, -/* 0000E6F0 */ 0x00, 0x70, 0x00, 0x21, 0x00, 0x3A, 0x00, 0x2F, 0x00, 0x52, 0x00, 0x22, 0x00, 0x31, 0x00, 0x40, -/* 0000E700 */ 0x00, 0x42, 0x00, 0x00, 0xBF, 0x5C, 0x18, 0xC1, 0x43, 0xA8, 0x01, 0x00, 0xFE, 0xDF, 0x0B, 0x0C, -/* 0000E710 */ 0xB3, 0x41, 0xC1, 0x00, 0xFE, 0x1F, 0x04, 0xB0, 0xFF, 0x6C, 0x1A, 0x02, 0x00, 0xFF, 0x00, 0x10, -/* 0000E720 */ 0x01, 0x00, 0x04, 0x04, 0xFF, 0x6C, 0x1A, 0x02, 0x00, 0xFE, 0xBC, 0x1B, 0xFE, 0xBC, 0x1B, 0x45, -/* 0000E730 */ 0x18, 0x23, 0x37, 0x07, 0xFE, 0xA3, 0x01, 0xFE, 0x83, 0x01, 0x04, 0x22, 0x04, 0x12, 0x26, 0x26, -/* 0000E740 */ 0x26, 0x26, 0x01, 0x36, 0x37, 0x06, 0xFE, 0xF6, 0x03, 0x06, 0xFE, 0xC8, 0x04, 0x08, 0x06, 0xFE, -/* 0000E750 */ 0x46, 0x03, 0x0B, 0x06, 0xFE, 0xF5, 0x03, 0x07, 0x06, 0xFE, 0x00, 0x04, 0x06, 0xFE, 0xAD, 0x03, -/* 0000E760 */ 0x05, 0xFE, 0xBC, 0x03, 0x05, 0xFE, 0xFF, 0x03, 0x06, 0xFE, 0x28, 0x04, 0x05, 0xFE, 0x29, 0x04, -/* 0000E770 */ 0x05, 0xFE, 0x2A, 0x04, 0x06, 0xFE, 0x2B, 0x04, 0x06, 0xFE, 0x2C, 0x04, 0x05, 0xFE, 0x2D, 0x04, -/* 0000E780 */ 0x06, 0xFE, 0x2E, 0x04, 0x06, 0xFE, 0x3F, 0x03, 0x06, 0xFE, 0xFA, 0x03, 0x01, 0x01, 0x01, 0x15, -/* 0000E790 */ 0x06, 0xFE, 0xFD, 0x03, 0x06, 0xFE, 0xFE, 0x03, 0x06, 0xFE, 0x2F, 0x04, 0x06, 0xFE, 0xC2, 0x03, -/* 0000E7A0 */ 0x06, 0xFE, 0xB4, 0x03, 0x06, 0xFE, 0xFB, 0x03, 0x01, 0x00, 0x01, 0x14, 0x01, 0x03, 0x06, 0xFE, -/* 0000E7B0 */ 0xFC, 0x03, 0x05, 0xFE, 0xD2, 0x04, 0xFE, 0xE2, 0x06, 0x2C, 0x38, 0x23, 0x0D, 0x03, 0x00, 0x38, -/* 0000E7C0 */ 0x02, 0x09, 0x1A, 0x00, 0x8D, 0x04, 0x03, 0x39, 0x00, 0x00, 0x6B, 0x38, 0x39, 0x00, 0x07, 0x01, -/* 0000E7D0 */ 0x00, 0x5A, 0x00, 0x39, 0xF2, 0x01, 0xFF, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8D, 0x04, -/* 0000E7E0 */ 0x06, 0x38, 0x01, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x04, 0x8D, 0x04, 0x13, 0x39, 0x02, 0x00, -/* 0000E7F0 */ 0x5B, 0x01, 0x39, 0x01, 0x00, 0x5B, 0x02, 0x23, 0x01, 0x00, 0x5B, 0x03, 0x03, 0x01, 0x00, 0xEE, -/* 0000E800 */ 0x04, 0x38, 0x38, 0x01, 0x00, 0x0E, 0x2C, 0x00, 0x38, 0x60, 0x38, 0x23, 0x01, 0x0E, 0x24, 0x00, -/* 0000E810 */ 0x38, 0x8D, 0x04, 0x03, 0x39, 0x00, 0x00, 0x6B, 0x38, 0x39, 0x02, 0x07, 0x03, 0x00, 0x5A, 0x00, -/* 0000E820 */ 0x39, 0x5B, 0x01, 0x05, 0x02, 0x00, 0x5B, 0x02, 0x05, 0x02, 0x00, 0xF2, 0x03, 0xFF, 0x38, 0x02, -/* 0000E830 */ 0x00, 0x00, 0x00, 0x02, 0x00, 0x75, 0x06, 0x23, 0x03, 0x2C, 0x38, 0x25, 0x14, 0x03, 0x00, 0x38, -/* 0000E840 */ 0x07, 0x09, 0x24, 0x00, 0x8D, 0x04, 0x04, 0x38, 0x03, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x04, -/* 0000E850 */ 0xCA, 0x39, 0x5B, 0x01, 0x39, 0x03, 0x00, 0x5B, 0x02, 0x08, 0x03, 0x00, 0xEE, 0x03, 0x38, 0x38, -/* 0000E860 */ 0x03, 0x00, 0x47, 0x25, 0x38, 0x09, 0x22, 0x00, 0x8D, 0x04, 0x24, 0x39, 0x04, 0x00, 0x6B, 0x38, -/* 0000E870 */ 0x39, 0x04, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x39, 0x5B, 0x01, 0x25, 0x04, 0x00, 0xF2, 0x02, 0x38, -/* 0000E880 */ 0x38, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x47, 0x25, 0x38, 0x8D, 0x03, 0x02, 0x38, 0x05, 0x00, -/* 0000E890 */ 0x4B, 0x38, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x25, 0x05, 0x00, 0x5B, 0x02, 0x09, -/* 0000E8A0 */ 0x05, 0x00, 0x5B, 0x03, 0x0A, 0x05, 0x00, 0xCD, 0x39, 0x02, 0x00, 0x00, 0x9F, 0x00, 0x0B, 0x39, -/* 0000E8B0 */ 0x9F, 0x01, 0x0C, 0x39, 0x5B, 0x04, 0x39, 0x05, 0x00, 0x5B, 0x05, 0x0C, 0x05, 0x00, 0xEE, 0x06, -/* 0000E8C0 */ 0x38, 0x38, 0x05, 0x00, 0x47, 0x28, 0x38, 0x8D, 0x03, 0x02, 0x38, 0x05, 0x00, 0x4B, 0x38, 0x07, -/* 0000E8D0 */ 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x25, 0x06, 0x00, 0x5B, 0x02, 0x0D, 0x06, 0x00, 0x5B, -/* 0000E8E0 */ 0x03, 0x0A, 0x06, 0x00, 0xCD, 0x39, 0x03, 0x01, 0x00, 0x9F, 0x00, 0x0E, 0x39, 0x9F, 0x01, 0x0F, -/* 0000E8F0 */ 0x39, 0x9F, 0x02, 0x10, 0x39, 0x5B, 0x04, 0x39, 0x06, 0x00, 0x5B, 0x05, 0x0E, 0x06, 0x00, 0xEE, -/* 0000E900 */ 0x06, 0x38, 0x38, 0x06, 0x00, 0x47, 0x29, 0x38, 0x8D, 0x04, 0x3B, 0x38, 0x06, 0x00, 0x4B, 0x38, -/* 0000E910 */ 0x60, 0x38, 0x38, 0x05, 0x47, 0x2A, 0x38, 0x14, 0x03, 0x00, 0x29, 0x0F, 0x09, 0x12, 0x00, 0x8D, -/* 0000E920 */ 0x04, 0x3B, 0x38, 0x06, 0x00, 0x4B, 0x38, 0x60, 0x38, 0x38, 0x06, 0x47, 0x2A, 0x38, 0x09, 0x17, -/* 0000E930 */ 0x00, 0x14, 0x03, 0x00, 0x29, 0x10, 0x09, 0x0F, 0x00, 0x8D, 0x04, 0x3B, 0x38, 0x06, 0x00, 0x4B, -/* 0000E940 */ 0x38, 0x60, 0x38, 0x38, 0x07, 0x47, 0x2A, 0x38, 0x8D, 0x03, 0x02, 0x38, 0x05, 0x00, 0x4B, 0x38, -/* 0000E950 */ 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x25, 0x07, 0x00, 0x5B, 0x02, 0x10, 0x07, 0x00, -/* 0000E960 */ 0x5B, 0x03, 0x0A, 0x07, 0x00, 0xA6, 0x39, 0x5B, 0x04, 0x39, 0x07, 0x00, 0xA6, 0x39, 0x5B, 0x05, -/* 0000E970 */ 0x39, 0x07, 0x00, 0xEE, 0x06, 0x38, 0x38, 0x07, 0x00, 0x47, 0x2B, 0x38, 0x8D, 0x03, 0x02, 0x38, -/* 0000E980 */ 0x05, 0x00, 0x4B, 0x38, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x25, 0x08, 0x00, 0x5B, -/* 0000E990 */ 0x02, 0x11, 0x08, 0x00, 0x5B, 0x03, 0x0A, 0x08, 0x00, 0xCD, 0x39, 0x03, 0x02, 0x00, 0x9F, 0x00, -/* 0000E9A0 */ 0x12, 0x39, 0x9F, 0x01, 0x13, 0x39, 0x9F, 0x02, 0x14, 0x39, 0x5B, 0x04, 0x39, 0x08, 0x00, 0x5B, -/* 0000E9B0 */ 0x05, 0x13, 0x08, 0x00, 0xEE, 0x06, 0x38, 0x38, 0x08, 0x00, 0x47, 0x2C, 0x38, 0xA6, 0x38, 0x47, -/* 0000E9C0 */ 0x2D, 0x38, 0x8D, 0x03, 0x03, 0x38, 0x07, 0x00, 0x4B, 0x38, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, -/* 0000E9D0 */ 0x5B, 0x01, 0x25, 0x09, 0x00, 0x5B, 0x02, 0x15, 0x09, 0x00, 0x5B, 0x03, 0x16, 0x09, 0x00, 0x5B, -/* 0000E9E0 */ 0x04, 0x17, 0x09, 0x00, 0x5B, 0x05, 0x16, 0x09, 0x00, 0xEE, 0x06, 0x38, 0x38, 0x09, 0x00, 0x47, -/* 0000E9F0 */ 0x2E, 0x38, 0xA6, 0x38, 0x47, 0x2F, 0x38, 0xA6, 0x38, 0x47, 0x30, 0x38, 0xA6, 0x38, 0x47, 0x31, -/* 0000EA00 */ 0x38, 0x60, 0x38, 0x25, 0x08, 0x47, 0x32, 0x38, 0x60, 0x38, 0x25, 0x09, 0x47, 0x33, 0x38, 0x2C, -/* 0000EA10 */ 0x38, 0x32, 0x15, 0x0B, 0x00, 0x38, 0x07, 0x2C, 0x38, 0x33, 0x15, 0x03, 0x00, 0x38, 0x07, 0x09, -/* 0000EA20 */ 0x60, 0x00, 0x8D, 0x03, 0x03, 0x38, 0x07, 0x00, 0x4B, 0x38, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, -/* 0000EA30 */ 0x5B, 0x01, 0x25, 0x0A, 0x00, 0x5B, 0x02, 0x18, 0x0A, 0x00, 0x5B, 0x03, 0x16, 0x0A, 0x00, 0x5B, -/* 0000EA40 */ 0x04, 0x17, 0x0A, 0x00, 0x5B, 0x05, 0x16, 0x0A, 0x00, 0xEE, 0x06, 0x38, 0x38, 0x0A, 0x00, 0x47, -/* 0000EA50 */ 0x32, 0x38, 0x8D, 0x03, 0x03, 0x38, 0x07, 0x00, 0x4B, 0x38, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, -/* 0000EA60 */ 0x5B, 0x01, 0x25, 0x0B, 0x00, 0x5B, 0x02, 0x19, 0x0B, 0x00, 0x5B, 0x03, 0x32, 0x0B, 0x00, 0x5B, -/* 0000EA70 */ 0x04, 0x17, 0x0B, 0x00, 0x5B, 0x05, 0x17, 0x0B, 0x00, 0xEE, 0x06, 0x38, 0x38, 0x0B, 0x00, 0x47, -/* 0000EA80 */ 0x33, 0x38, 0x8D, 0x03, 0x02, 0x38, 0x05, 0x00, 0x4B, 0x38, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, -/* 0000EA90 */ 0x5B, 0x01, 0x25, 0x0C, 0x00, 0x5B, 0x02, 0x1A, 0x0C, 0x00, 0x5B, 0x03, 0x1B, 0x0C, 0x00, 0xA6, -/* 0000EAA0 */ 0x39, 0x5B, 0x04, 0x39, 0x0C, 0x00, 0x5B, 0x05, 0x06, 0x0C, 0x00, 0xEE, 0x06, 0x38, 0x38, 0x0C, -/* 0000EAB0 */ 0x00, 0x47, 0x34, 0x38, 0x8D, 0x03, 0x07, 0x38, 0x08, 0x00, 0x4B, 0x38, 0x07, 0x02, 0x00, 0x5A, -/* 0000EAC0 */ 0x00, 0x04, 0x5B, 0x01, 0x24, 0x0D, 0x00, 0xEE, 0x02, 0x38, 0x38, 0x0D, 0x00, 0x47, 0x24, 0x38, -/* 0000EAD0 */ 0x8D, 0x04, 0x2A, 0x38, 0x09, 0x00, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x24, 0x0E, -/* 0000EAE0 */ 0x00, 0x5B, 0x02, 0x28, 0x0E, 0x00, 0xCD, 0x39, 0x01, 0x03, 0x00, 0x9F, 0x00, 0x1C, 0x39, 0x5B, -/* 0000EAF0 */ 0x03, 0x39, 0x0E, 0x00, 0x8D, 0x04, 0x2B, 0x39, 0x0A, 0x00, 0x5B, 0x04, 0x39, 0x0E, 0x00, 0xEE, -/* 0000EB00 */ 0x05, 0x38, 0x38, 0x0E, 0x00, 0x47, 0x35, 0x38, 0x2C, 0x38, 0x2B, 0x15, 0x03, 0x00, 0x38, 0x07, -/* 0000EB10 */ 0x09, 0x53, 0x00, 0x8D, 0x03, 0x06, 0x38, 0x0B, 0x00, 0x4B, 0x38, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 0000EB20 */ 0x04, 0x5B, 0x01, 0x2B, 0x0F, 0x00, 0xEE, 0x02, 0x38, 0x38, 0x0F, 0x00, 0x0F, 0x36, 0x00, 0x38, -/* 0000EB30 */ 0x8D, 0x04, 0x03, 0x39, 0x00, 0x00, 0x6B, 0x38, 0x39, 0x0A, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x39, -/* 0000EB40 */ 0x8D, 0x04, 0x0B, 0x3A, 0x0C, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x2B, 0x11, -/* 0000EB50 */ 0x00, 0xEE, 0x02, 0x3A, 0x3A, 0x11, 0x00, 0x5B, 0x01, 0x3A, 0x10, 0x00, 0xF2, 0x02, 0xFF, 0x38, -/* 0000EB60 */ 0x0A, 0x00, 0x00, 0x00, 0x10, 0x00, 0x14, 0x03, 0x00, 0x29, 0x10, 0x09, 0x1E, 0x01, 0x2C, 0x38, -/* 0000EB70 */ 0x2B, 0x14, 0x03, 0x00, 0x38, 0x07, 0x09, 0x1A, 0x00, 0x8D, 0x04, 0x03, 0x39, 0x00, 0x00, 0x6B, -/* 0000EB80 */ 0x38, 0x39, 0x0B, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x39, 0xF2, 0x01, 0xFF, 0x38, 0x0B, 0x00, 0x00, -/* 0000EB90 */ 0x00, 0x12, 0x00, 0x8D, 0x04, 0x06, 0x38, 0x01, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x04, 0x8D, -/* 0000EBA0 */ 0x04, 0x1F, 0x39, 0x0D, 0x00, 0x5B, 0x01, 0x39, 0x13, 0x00, 0x5B, 0x02, 0x2B, 0x13, 0x00, 0xEE, -/* 0000EBB0 */ 0x03, 0x38, 0x38, 0x13, 0x00, 0x47, 0x2B, 0x38, 0xE5, 0x26, 0x00, 0x8D, 0x04, 0x03, 0x39, 0x00, -/* 0000EBC0 */ 0x00, 0x6B, 0x38, 0x39, 0x0C, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x39, 0x5B, 0x01, 0x2B, 0x14, 0x00, -/* 0000EBD0 */ 0xF2, 0x02, 0x38, 0x38, 0x0C, 0x00, 0x00, 0x00, 0x14, 0x00, 0x47, 0x2D, 0x38, 0xE9, 0x09, 0x51, -/* 0000EBE0 */ 0x00, 0xE7, 0x26, 0x06, 0x8D, 0x04, 0x22, 0x38, 0x0E, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, -/* 0000EBF0 */ 0x5B, 0x01, 0x26, 0x15, 0x00, 0xEE, 0x02, 0xFF, 0x38, 0x15, 0x00, 0x8D, 0x04, 0x03, 0x39, 0x00, -/* 0000EC00 */ 0x00, 0x6B, 0x38, 0x39, 0x0A, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x39, 0x8D, 0x04, 0x0B, 0x3A, 0x0C, -/* 0000EC10 */ 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x2B, 0x17, 0x00, 0xEE, 0x02, 0x3A, 0x3A, -/* 0000EC20 */ 0x17, 0x00, 0x5B, 0x01, 0x3A, 0x16, 0x00, 0xF2, 0x02, 0xFF, 0x38, 0x0A, 0x00, 0x00, 0x00, 0x16, -/* 0000EC30 */ 0x00, 0xE9, 0x8D, 0x03, 0x03, 0x38, 0x07, 0x00, 0x4B, 0x38, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, -/* 0000EC40 */ 0x5B, 0x01, 0x25, 0x18, 0x00, 0x5B, 0x02, 0x1D, 0x18, 0x00, 0x5B, 0x03, 0x1E, 0x18, 0x00, 0x5B, -/* 0000EC50 */ 0x04, 0x1F, 0x18, 0x00, 0x5B, 0x05, 0x2D, 0x18, 0x00, 0xEE, 0x06, 0x38, 0x38, 0x18, 0x00, 0x47, -/* 0000EC60 */ 0x2F, 0x38, 0x8D, 0x04, 0x0F, 0x39, 0x0F, 0x00, 0x6B, 0x38, 0x39, 0x0D, 0x07, 0x03, 0x00, 0x5A, -/* 0000EC70 */ 0x00, 0x39, 0x5B, 0x01, 0x2D, 0x19, 0x00, 0x5B, 0x02, 0x2F, 0x19, 0x00, 0xF2, 0x03, 0x38, 0x38, -/* 0000EC80 */ 0x0D, 0x00, 0x00, 0x00, 0x19, 0x00, 0x47, 0x31, 0x38, 0x09, 0x93, 0x00, 0xA6, 0x38, 0x47, 0x2B, -/* 0000EC90 */ 0x38, 0xA6, 0x38, 0x47, 0x2C, 0x38, 0x8D, 0x03, 0x03, 0x38, 0x07, 0x00, 0x4B, 0x38, 0x07, 0x06, -/* 0000ECA0 */ 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x25, 0x1A, 0x00, 0x5B, 0x02, 0x1D, 0x1A, 0x00, 0x5B, 0x03, -/* 0000ECB0 */ 0x1E, 0x1A, 0x00, 0x5B, 0x04, 0x1F, 0x1A, 0x00, 0x5B, 0x05, 0x1E, 0x1A, 0x00, 0xEE, 0x06, 0x38, -/* 0000ECC0 */ 0x38, 0x1A, 0x00, 0x47, 0x2F, 0x38, 0x14, 0x03, 0x00, 0x29, 0x0F, 0x09, 0x2A, 0x00, 0x8D, 0x04, -/* 0000ECD0 */ 0x0F, 0x39, 0x0F, 0x00, 0x6B, 0x38, 0x39, 0x0D, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x39, 0x5B, 0x01, -/* 0000ECE0 */ 0x2F, 0x1B, 0x00, 0x5B, 0x02, 0x1E, 0x1B, 0x00, 0xF2, 0x03, 0x38, 0x38, 0x0D, 0x00, 0x00, 0x00, -/* 0000ECF0 */ 0x1B, 0x00, 0x47, 0x31, 0x38, 0x09, 0x27, 0x00, 0x8D, 0x04, 0x0F, 0x39, 0x0F, 0x00, 0x6B, 0x38, -/* 0000ED00 */ 0x39, 0x0D, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x39, 0x5B, 0x01, 0x2F, 0x1C, 0x00, 0x5B, 0x02, 0x20, -/* 0000ED10 */ 0x1C, 0x00, 0xF2, 0x03, 0x38, 0x38, 0x0D, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x47, 0x31, 0x38, 0x8D, -/* 0000ED20 */ 0x03, 0x03, 0x38, 0x07, 0x00, 0x4B, 0x38, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x25, -/* 0000ED30 */ 0x1D, 0x00, 0x5B, 0x02, 0x21, 0x1D, 0x00, 0x5B, 0x03, 0x2F, 0x1D, 0x00, 0x5B, 0x04, 0x1F, 0x1D, -/* 0000ED40 */ 0x00, 0x5B, 0x05, 0x31, 0x1D, 0x00, 0xEE, 0x06, 0x38, 0x38, 0x1D, 0x00, 0x47, 0x30, 0x38, 0x75, -/* 0000ED50 */ 0x28, 0x23, 0x0E, 0x60, 0x38, 0x35, 0x0F, 0x75, 0x38, 0x23, 0x10, 0x75, 0x29, 0x23, 0x11, 0xA6, -/* 0000ED60 */ 0x38, 0x15, 0x03, 0x00, 0x2B, 0x38, 0x09, 0x04, 0x00, 0x75, 0x2B, 0x23, 0x12, 0xA6, 0x38, 0x15, -/* 0000ED70 */ 0x03, 0x00, 0x2C, 0x38, 0x09, 0x62, 0x00, 0x75, 0x2C, 0x23, 0x13, 0x8D, 0x04, 0x3C, 0x38, 0x10, -/* 0000ED80 */ 0x00, 0x4B, 0x38, 0x60, 0x38, 0x38, 0x14, 0x75, 0x38, 0x23, 0x15, 0x14, 0x03, 0x00, 0x2C, 0x13, -/* 0000ED90 */ 0x09, 0x13, 0x00, 0x8D, 0x04, 0x3C, 0x38, 0x10, 0x00, 0x4B, 0x38, 0x60, 0x38, 0x38, 0x16, 0x75, -/* 0000EDA0 */ 0x38, 0x23, 0x15, 0x09, 0x33, 0x00, 0x14, 0x03, 0x00, 0x2C, 0x12, 0x09, 0x13, 0x00, 0x8D, 0x04, -/* 0000EDB0 */ 0x3C, 0x38, 0x10, 0x00, 0x4B, 0x38, 0x60, 0x38, 0x38, 0x17, 0x75, 0x38, 0x23, 0x15, 0x09, 0x18, -/* 0000EDC0 */ 0x00, 0x14, 0x03, 0x00, 0x2C, 0x14, 0x09, 0x10, 0x00, 0x8D, 0x04, 0x3C, 0x38, 0x10, 0x00, 0x4B, -/* 0000EDD0 */ 0x38, 0x60, 0x38, 0x38, 0x18, 0x75, 0x38, 0x23, 0x15, 0x75, 0x2E, 0x23, 0x19, 0x75, 0x2F, 0x23, -/* 0000EDE0 */ 0x1A, 0x75, 0x30, 0x23, 0x1B, 0xA6, 0x38, 0x15, 0x03, 0x00, 0x33, 0x38, 0x09, 0x08, 0x00, 0x75, -/* 0000EDF0 */ 0x32, 0x23, 0x1C, 0x75, 0x33, 0x23, 0x1D, 0x75, 0x2A, 0x23, 0x1E, 0x75, 0x34, 0x23, 0x1F, 0xE5, -/* 0000EE00 */ 0x23, 0x00, 0x8D, 0x04, 0x03, 0x39, 0x00, 0x00, 0x6B, 0x38, 0x39, 0x20, 0x07, 0x02, 0x00, 0x5A, -/* 0000EE10 */ 0x00, 0x39, 0x5B, 0x01, 0x23, 0x1E, 0x00, 0xF2, 0x02, 0xFF, 0x38, 0x20, 0x00, 0x00, 0x00, 0x1E, -/* 0000EE20 */ 0x00, 0xE9, 0x09, 0x35, 0x00, 0xE7, 0x27, 0x06, 0x8D, 0x04, 0x22, 0x38, 0x0E, 0x00, 0x07, 0x02, -/* 0000EE30 */ 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x27, 0x1F, 0x00, 0xEE, 0x02, 0xFF, 0x38, 0x1F, 0x00, 0x8D, -/* 0000EE40 */ 0x04, 0x03, 0x39, 0x00, 0x00, 0x6B, 0x38, 0x39, 0x21, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x39, 0xF2, -/* 0000EE50 */ 0x01, 0xFF, 0x38, 0x21, 0x00, 0x00, 0x00, 0x20, 0x00, 0xE9, 0x60, 0x38, 0x23, 0x22, 0x0F, 0x04, -/* 0000EE60 */ 0x00, 0x38, 0x75, 0x22, 0x23, 0x23, 0x47, 0x38, 0x23, 0x8D, 0x04, 0x06, 0x39, 0x01, 0x00, 0x07, -/* 0000EE70 */ 0x03, 0x00, 0x5A, 0x00, 0x04, 0x8D, 0x04, 0x1E, 0x3A, 0x11, 0x00, 0x5B, 0x01, 0x3A, 0x21, 0x00, -/* 0000EE80 */ 0x60, 0x3A, 0x23, 0x22, 0x5B, 0x02, 0x3A, 0x21, 0x00, 0xEE, 0x03, 0x39, 0x39, 0x21, 0x00, 0x75, -/* 0000EE90 */ 0x39, 0x38, 0x24, 0x75, 0x06, 0x23, 0x25, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x89, 0x02, 0xFE, 0xF2, -/* 0000EEA0 */ 0x01, 0xFE, 0x8D, 0x02, 0xFE, 0xF2, 0x01, 0xFE, 0x36, 0x03, 0xFE, 0x30, 0x03, 0xFE, 0x31, 0x03, -/* 0000EEB0 */ 0xFE, 0x32, 0x03, 0xFE, 0x17, 0x02, 0xFE, 0x14, 0x02, 0xFE, 0x85, 0x02, 0xFE, 0x88, 0x02, 0xFE, -/* 0000EEC0 */ 0xE5, 0x01, 0xEE, 0xFE, 0xD3, 0x04, 0xFE, 0xF7, 0x01, 0xFE, 0xF3, 0x01, 0xFE, 0x32, 0x02, 0xFE, -/* 0000EED0 */ 0x02, 0x02, 0xFE, 0x03, 0x02, 0xFE, 0x2C, 0x03, 0xFE, 0x04, 0x02, 0xFE, 0x33, 0x03, 0xFE, 0x34, -/* 0000EEE0 */ 0x03, 0xFE, 0x35, 0x03, 0xFE, 0x0A, 0x02, 0xFE, 0x09, 0x02, 0xFE, 0x07, 0x02, 0xFE, 0x0B, 0x02, -/* 0000EEF0 */ 0xFE, 0x08, 0x02, 0xFE, 0x05, 0x02, 0xFE, 0x0E, 0x02, 0xFE, 0xE3, 0x01, 0xFE, 0x90, 0x02, 0xFE, -/* 0000EF00 */ 0x0C, 0x02, 0xFE, 0x0C, 0x02, 0xFE, 0x0C, 0x02, 0xFE, 0x06, 0x02, 0xFF, 0xC1, 0x1A, 0x02, 0x00, -/* 0000EF10 */ 0x50, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3B, 0x00, 0x1A, 0x00, 0x3F, 0x00, 0x33, 0x00, 0x9B, -/* 0000EF20 */ 0x00, 0x24, 0x00, 0x6D, 0x00, 0x04, 0x00, 0x61, 0x00, 0x0B, 0x00, 0x3A, 0x00, 0x24, 0x00, 0x4F, -/* 0000EF30 */ 0x00, 0x22, 0x00, 0x49, 0x00, 0x3D, 0x00, 0x71, 0x00, 0x41, 0x00, 0x73, 0x00, 0x0F, 0x00, 0x4B, -/* 0000EF40 */ 0x00, 0x08, 0x00, 0x2F, 0x00, 0x12, 0x00, 0x43, 0x00, 0x08, 0x00, 0x30, 0x00, 0x0F, 0x00, 0x50, -/* 0000EF50 */ 0x00, 0x34, 0x00, 0x5F, 0x00, 0x41, 0x00, 0x7D, 0x00, 0x05, 0x00, 0x31, 0x00, 0x30, 0x00, 0x67, -/* 0000EF60 */ 0x00, 0x05, 0x00, 0x37, 0x00, 0x05, 0x00, 0x37, 0x00, 0x05, 0x00, 0x3F, 0x00, 0x07, 0x00, 0x51, -/* 0000EF70 */ 0x00, 0x07, 0x00, 0x52, 0x00, 0x13, 0x00, 0x7E, 0x00, 0x30, 0x00, 0x6F, 0x00, 0x30, 0x00, 0x96, -/* 0000EF80 */ 0x00, 0x32, 0x00, 0x9A, 0x00, 0x1C, 0x00, 0x41, 0x00, 0x38, 0x00, 0xA2, 0x00, 0x28, 0x00, 0x62, -/* 0000EF90 */ 0x00, 0x36, 0x00, 0x58, 0x00, 0x08, 0x00, 0x30, 0x00, 0x0B, 0x00, 0x3F, 0x00, 0x1A, 0x00, 0x4F, -/* 0000EFA0 */ 0x00, 0x28, 0x00, 0x74, 0x00, 0x28, 0x00, 0x4A, 0x00, 0x01, 0x00, 0x24, 0x00, 0x17, 0x00, 0x2E, -/* 0000EFB0 */ 0x00, 0x37, 0x00, 0x5F, 0x00, 0x30, 0x00, 0x76, 0x00, 0x2A, 0x00, 0x7D, 0x00, 0x05, 0x00, 0x2A, -/* 0000EFC0 */ 0x00, 0x05, 0x00, 0x31, 0x00, 0x30, 0x00, 0x69, 0x00, 0x08, 0x00, 0x33, 0x00, 0x2A, 0x00, 0x78, -/* 0000EFD0 */ 0x00, 0x27, 0x00, 0x7B, 0x00, 0x30, 0x00, 0xC6, 0x00, 0x04, 0x00, 0x38, 0x00, 0x08, 0x00, 0x43, -/* 0000EFE0 */ 0x00, 0x04, 0x00, 0x2F, 0x00, 0x0A, 0x00, 0x32, 0x00, 0x04, 0x00, 0x47, 0x00, 0x0A, 0x00, 0x39, -/* 0000EFF0 */ 0x00, 0x04, 0x00, 0x46, 0x00, 0x10, 0x00, 0x5F, 0x00, 0x08, 0x00, 0x3C, 0x00, 0x13, 0x00, 0x65, -/* 0000F000 */ 0x00, 0x08, 0x00, 0x3A, 0x00, 0x13, 0x00, 0x63, 0x00, 0x08, 0x00, 0x3A, 0x00, 0x10, 0x00, 0x81, -/* 0000F010 */ 0x00, 0x04, 0x00, 0x4C, 0x00, 0x04, 0x00, 0x4E, 0x00, 0x04, 0x00, 0x4F, 0x00, 0x0A, 0x00, 0x42, -/* 0000F020 */ 0x00, 0x04, 0x00, 0x58, 0x00, 0x04, 0x00, 0x67, 0x00, 0x04, 0x00, 0x40, 0x00, 0x07, 0x00, 0xA9, -/* 0000F030 */ 0x00, 0x25, 0x00, 0x3C, 0x00, 0x01, 0x00, 0x20, 0x00, 0x17, 0x00, 0x6B, 0x01, 0x1B, 0x00, 0x4A, -/* 0000F040 */ 0x00, 0x08, 0x00, 0x3B, 0x00, 0x04, 0x00, 0x70, 0x00, 0x2D, 0x00, 0x7E, 0x00, 0x06, 0x00, 0x3B, -/* 0000F050 */ 0x00, 0x00, 0x3F, 0x5C, 0x08, 0xC1, 0x53, 0xA8, 0x25, 0x01, 0xFE, 0xEA, 0x0A, 0x14, 0xA0, 0x41, -/* 0000F060 */ 0xD1, 0x00, 0xA7, 0xFF, 0x1F, 0xE9, 0x01, 0x00, 0x06, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, -/* 0000F070 */ 0xFF, 0x1F, 0xE9, 0x01, 0x00, 0xFE, 0x9F, 0x30, 0xFE, 0x9F, 0x30, 0x0B, 0x16, 0x1A, 0x09, 0x9B, -/* 0000F080 */ 0x9B, 0x02, 0x0C, 0x0A, 0x08, 0x08, 0x08, 0x08, 0x05, 0x02, 0x19, 0x1A, 0x08, 0x06, 0xFE, 0x3D, -/* 0000F090 */ 0x03, 0x06, 0xFE, 0x07, 0x04, 0x05, 0xFE, 0x08, 0x04, 0x05, 0xFE, 0x09, 0x04, 0x05, 0xFE, 0x0A, -/* 0000F0A0 */ 0x04, 0x06, 0xFE, 0x4C, 0x03, 0x06, 0xFE, 0x40, 0x03, 0x06, 0xFE, 0x42, 0x03, 0x0B, 0x06, 0xFE, -/* 0000F0B0 */ 0x44, 0x03, 0x07, 0x06, 0xFE, 0x0B, 0x04, 0x0C, 0x06, 0xFE, 0x43, 0x03, 0x06, 0xFE, 0x0C, 0x04, -/* 0000F0C0 */ 0x06, 0xFE, 0x0D, 0x04, 0x06, 0xFE, 0x0F, 0x04, 0x06, 0xFE, 0x8D, 0x03, 0x05, 0xFE, 0x0E, 0x04, -/* 0000F0D0 */ 0xFE, 0xED, 0x02, 0xA6, 0x16, 0xA6, 0x17, 0xA6, 0x18, 0x8D, 0x02, 0x32, 0x1C, 0x00, 0x00, 0x14, -/* 0000F0E0 */ 0x0E, 0x00, 0x1C, 0x03, 0x8D, 0x02, 0x32, 0x1C, 0x00, 0x00, 0x14, 0x03, 0x00, 0x1C, 0x04, 0x09, -/* 0000F0F0 */ 0xC5, 0x02, 0xDE, 0x00, 0x03, 0x01, 0xB6, 0x1C, 0x00, 0x01, 0x53, 0x01, 0x00, 0x16, 0x1C, 0x93, -/* 0000F100 */ 0x00, 0x02, 0x16, 0x8D, 0x02, 0x03, 0x1D, 0x01, 0x00, 0x6B, 0x1C, 0x1D, 0x00, 0x07, 0x03, 0x00, -/* 0000F110 */ 0x5A, 0x00, 0x1D, 0x8D, 0x02, 0x23, 0x1E, 0x02, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5B, -/* 0000F120 */ 0x01, 0x05, 0x01, 0x00, 0xB6, 0x20, 0x00, 0x01, 0x53, 0x01, 0x01, 0x1F, 0x20, 0x5B, 0x02, 0x1F, -/* 0000F130 */ 0x01, 0x00, 0xEE, 0x03, 0x1E, 0x1E, 0x01, 0x00, 0x5B, 0x01, 0x1E, 0x00, 0x00, 0x8D, 0x02, 0x36, -/* 0000F140 */ 0x1E, 0x03, 0x00, 0x4B, 0x1E, 0x60, 0x1E, 0x1E, 0x01, 0x5B, 0x02, 0x1E, 0x00, 0x00, 0xF2, 0x03, -/* 0000F150 */ 0xFF, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8D, 0x02, 0x32, 0x1C, 0x00, 0x00, 0x14, 0x03, -/* 0000F160 */ 0x00, 0x1C, 0x03, 0x09, 0x51, 0x02, 0xDE, 0x01, 0x04, 0x02, 0xB6, 0x1C, 0x00, 0xB5, 0x01, 0x00, -/* 0000F170 */ 0x00, 0x00, 0x1C, 0x1C, 0x01, 0x53, 0x01, 0x02, 0x17, 0x1C, 0x93, 0x01, 0x02, 0x17, 0x01, 0x53, -/* 0000F180 */ 0x01, 0x03, 0x18, 0x1C, 0x93, 0x01, 0x03, 0x18, 0x8D, 0x02, 0x23, 0x1C, 0x02, 0x00, 0x07, 0x03, -/* 0000F190 */ 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x06, 0x02, 0x00, 0x8F, 0x01, 0x02, 0x1D, 0x04, 0x00, 0x5B, -/* 0000F1A0 */ 0x02, 0x1D, 0x02, 0x00, 0xEE, 0x03, 0xFF, 0x1C, 0x02, 0x00, 0x8D, 0x02, 0x23, 0x1C, 0x02, 0x00, -/* 0000F1B0 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x07, 0x03, 0x00, 0x8F, 0x01, 0x03, 0x1D, 0x05, -/* 0000F1C0 */ 0x00, 0x5B, 0x02, 0x1D, 0x03, 0x00, 0xEE, 0x03, 0xFF, 0x1C, 0x03, 0x00, 0x8D, 0x02, 0x15, 0x1C, -/* 0000F1D0 */ 0x06, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8F, 0x01, 0x02, 0x1D, 0x04, 0x00, 0x5B, 0x01, -/* 0000F1E0 */ 0x1D, 0x04, 0x00, 0x5B, 0x02, 0x08, 0x04, 0x00, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 0000F1F0 */ 0x00, 0x1D, 0x00, 0x00, 0x00, 0x8D, 0x01, 0x13, 0x1E, 0x07, 0x00, 0x4B, 0x1E, 0x79, 0x1E, 0x1D, -/* 0000F200 */ 0x02, 0x79, 0x0B, 0x1D, 0x03, 0x79, 0x0B, 0x1D, 0x04, 0x5B, 0x03, 0x1D, 0x04, 0x00, 0xEE, 0x04, -/* 0000F210 */ 0xFF, 0x1C, 0x04, 0x00, 0x8D, 0x02, 0x15, 0x1C, 0x06, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, -/* 0000F220 */ 0x8F, 0x01, 0x02, 0x1D, 0x04, 0x00, 0x5B, 0x01, 0x1D, 0x05, 0x00, 0x5B, 0x02, 0x0E, 0x05, 0x00, -/* 0000F230 */ 0xCB, 0x14, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0x8F, 0x01, 0x02, -/* 0000F240 */ 0x1E, 0x04, 0x00, 0x07, 0x01, 0x00, 0xC2, 0x01, 0x1E, 0x1E, 0x06, 0x00, 0x79, 0x1E, 0x1D, 0x02, -/* 0000F250 */ 0x79, 0x0F, 0x1D, 0x03, 0x79, 0x0F, 0x1D, 0x05, 0x79, 0x0F, 0x1D, 0x04, 0x5B, 0x03, 0x1D, 0x05, -/* 0000F260 */ 0x00, 0xEE, 0x04, 0xFF, 0x1C, 0x05, 0x00, 0x8D, 0x02, 0x04, 0x1C, 0x08, 0x00, 0x07, 0x03, 0x00, -/* 0000F270 */ 0x5A, 0x00, 0x02, 0x8F, 0x01, 0x02, 0x1D, 0x04, 0x00, 0x60, 0x1D, 0x1D, 0x06, 0x5B, 0x01, 0x1D, -/* 0000F280 */ 0x07, 0x00, 0x8D, 0x02, 0x08, 0x1D, 0x09, 0x00, 0x60, 0x1D, 0x1D, 0x06, 0x5B, 0x02, 0x1D, 0x07, -/* 0000F290 */ 0x00, 0xEE, 0x03, 0xFF, 0x1C, 0x07, 0x00, 0x8D, 0x02, 0x15, 0x1C, 0x06, 0x00, 0x07, 0x04, 0x00, -/* 0000F2A0 */ 0x5A, 0x00, 0x02, 0x8F, 0x01, 0x02, 0x1D, 0x04, 0x00, 0x60, 0x1D, 0x1D, 0x06, 0x5B, 0x01, 0x1D, -/* 0000F2B0 */ 0x08, 0x00, 0x5B, 0x02, 0x11, 0x08, 0x00, 0xCB, 0x2C, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, -/* 0000F2C0 */ 0x1D, 0x00, 0x00, 0x00, 0x8F, 0x01, 0x02, 0x1E, 0x04, 0x00, 0x79, 0x1E, 0x1D, 0x02, 0x79, 0x0B, -/* 0000F2D0 */ 0x1D, 0x03, 0x79, 0x0F, 0x1D, 0x05, 0x79, 0x0B, 0x1D, 0x04, 0x5B, 0x03, 0x1D, 0x08, 0x00, 0xEE, -/* 0000F2E0 */ 0x04, 0xFF, 0x1C, 0x08, 0x00, 0x8D, 0x02, 0x15, 0x1C, 0x06, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, -/* 0000F2F0 */ 0x02, 0x8F, 0x01, 0x02, 0x1D, 0x04, 0x00, 0x60, 0x1D, 0x1D, 0x06, 0x5B, 0x01, 0x1D, 0x09, 0x00, -/* 0000F300 */ 0x5B, 0x02, 0x12, 0x09, 0x00, 0xCB, 0x44, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1D, 0x00, -/* 0000F310 */ 0x00, 0x00, 0xB6, 0x1F, 0x00, 0xB5, 0x01, 0x00, 0x00, 0x00, 0x1F, 0x1F, 0x01, 0x57, 0x01, 0x04, -/* 0000F320 */ 0x1E, 0x1F, 0x1D, 0x79, 0x1E, 0x1D, 0x02, 0x79, 0x0B, 0x1D, 0x03, 0x79, 0x0F, 0x1D, 0x05, 0x79, -/* 0000F330 */ 0x0B, 0x1D, 0x04, 0x5B, 0x03, 0x1D, 0x09, 0x00, 0xEE, 0x04, 0xFF, 0x1C, 0x09, 0x00, 0x8D, 0x02, -/* 0000F340 */ 0x15, 0x1C, 0x06, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8F, 0x01, 0x02, 0x1D, 0x04, 0x00, -/* 0000F350 */ 0x60, 0x1D, 0x1D, 0x06, 0x5B, 0x01, 0x1D, 0x0A, 0x00, 0x5B, 0x02, 0x13, 0x0A, 0x00, 0xCB, 0x5C, -/* 0000F360 */ 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0x8D, 0x02, 0x23, 0x1E, 0x02, -/* 0000F370 */ 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x15, 0x0B, 0x00, 0xB6, 0x20, 0x00, 0xB5, -/* 0000F380 */ 0x01, 0x00, 0x00, 0x00, 0x20, 0x20, 0x01, 0x53, 0x01, 0x05, 0x1F, 0x20, 0x5B, 0x02, 0x1F, 0x0B, -/* 0000F390 */ 0x00, 0xEE, 0x03, 0x1E, 0x1E, 0x0B, 0x00, 0x79, 0x1E, 0x1D, 0x07, 0x79, 0x0F, 0x1D, 0x05, 0x79, -/* 0000F3A0 */ 0x0B, 0x1D, 0x04, 0x5B, 0x03, 0x1D, 0x0A, 0x00, 0xEE, 0x04, 0xFF, 0x1C, 0x0A, 0x00, 0x8F, 0x01, -/* 0000F3B0 */ 0x02, 0x00, 0x04, 0x00, 0x09, 0x07, 0x00, 0xA6, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, -/* 0000F3C0 */ 0x05, 0x70, 0x00, 0x5C, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, -/* 0000F3D0 */ 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x03, -/* 0000F3E0 */ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, -/* 0000F3F0 */ 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x2C, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, -/* 0000F400 */ 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, -/* 0000F410 */ 0x01, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, -/* 0000F420 */ 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x00, -/* 0000F430 */ 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, -/* 0000F440 */ 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0xFE, 0xEE, 0x01, 0xFE, 0x07, 0x03, 0xFE, 0x83, 0x01, -/* 0000F450 */ 0xFE, 0x82, 0x01, 0xFE, 0x81, 0x01, 0xFE, 0x80, 0x01, 0xFE, 0x15, 0x01, 0xFE, 0x84, 0x01, 0x02, -/* 0000F460 */ 0x01, 0x01, 0x00, 0xFE, 0x05, 0x04, 0x02, 0x02, 0x00, 0xFE, 0x1A, 0x02, 0x01, 0xFE, 0x1E, 0x02, -/* 0000F470 */ 0xFF, 0x36, 0xE9, 0x01, 0x00, 0x0E, 0x06, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x1F, 0x17, 0x55, 0x00, -/* 0000F480 */ 0x10, 0x05, 0x30, 0x00, 0x7A, 0x04, 0x22, 0x00, 0x53, 0x04, 0x22, 0x00, 0x50, 0x00, 0x48, 0x00, -/* 0000F490 */ 0x93, 0x00, 0x53, 0x00, 0x91, 0x00, 0x30, 0x00, 0x45, 0x00, 0x4E, 0x00, 0x96, 0x00, 0x59, 0x00, -/* 0000F4A0 */ 0xA7, 0x05, 0x70, 0x00, 0x03, 0x03, 0x09, 0x00, 0x7C, 0x00, 0x07, 0x00, 0x16, 0x00, 0x00, 0xF6, -/* 0000F4B0 */ 0xFD, 0x00, 0x00, 0xC2, 0xFB, 0x00, 0x00, 0x96, 0xF9, 0x00, 0x00, 0x8E, 0xF7, 0x00, 0x00, 0xCE, -/* 0000F4C0 */ 0xF5, 0x00, 0x00, 0xC7, 0xF4, 0x00, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, -/* 0000F4D0 */ 0xC7, 0x0B, 0x3A, 0xA0, 0x41, 0xD1, 0x00, 0xAE, 0xFF, 0x98, 0x16, 0x02, 0x00, 0xFF, 0x00, 0x10, -/* 0000F4E0 */ 0x01, 0x00, 0x01, 0x01, 0xFF, 0x98, 0x16, 0x02, 0x00, 0xFE, 0x45, 0x02, 0xFE, 0x45, 0x02, 0x01, -/* 0000F4F0 */ 0x05, 0x05, 0x08, 0x04, 0x23, 0x22, 0x04, 0x03, 0x01, 0x04, 0x04, 0x04, 0x04, 0x07, 0x06, 0xFE, -/* 0000F500 */ 0xF6, 0x03, 0x05, 0xFE, 0x1C, 0x04, 0x06, 0xFE, 0x45, 0x03, 0x94, 0x59, 0x08, 0xB2, 0x05, 0x08, -/* 0000F510 */ 0x2C, 0x08, 0x05, 0x15, 0x03, 0x00, 0x08, 0x02, 0x09, 0x24, 0x00, 0x8D, 0x04, 0x03, 0x09, 0x00, -/* 0000F520 */ 0x00, 0x6B, 0x08, 0x09, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x09, 0x5B, 0x01, 0x03, 0x00, 0x00, -/* 0000F530 */ 0x5B, 0x02, 0x04, 0x00, 0x00, 0xF2, 0x03, 0xFF, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8D, -/* 0000F540 */ 0x04, 0x03, 0x09, 0x00, 0x00, 0x6B, 0x08, 0x09, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x09, 0x5B, -/* 0000F550 */ 0x01, 0x05, 0x01, 0x00, 0xF2, 0x02, 0x08, 0x08, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x06, -/* 0000F560 */ 0x08, 0xA6, 0x08, 0x14, 0x08, 0x00, 0x06, 0x08, 0x60, 0x08, 0x06, 0x02, 0x0F, 0x24, 0x00, 0x08, -/* 0000F570 */ 0x8D, 0x04, 0x03, 0x09, 0x00, 0x00, 0x6B, 0x08, 0x09, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x09, -/* 0000F580 */ 0x5B, 0x01, 0x03, 0x02, 0x00, 0x5B, 0x02, 0x04, 0x02, 0x00, 0xF2, 0x03, 0xFF, 0x08, 0x00, 0x00, -/* 0000F590 */ 0x00, 0x00, 0x02, 0x00, 0x60, 0x00, 0x06, 0x03, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, -/* 0000F5A0 */ 0x8A, 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0x1D, 0x02, 0xFE, 0x1B, 0x02, 0xFF, 0xBE, 0x16, 0x02, 0x00, -/* 0000F5B0 */ 0x07, 0x05, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3C, 0x00, 0x24, 0x00, 0x7D, 0x00, 0x22, 0x00, 0x4B, -/* 0000F5C0 */ 0x00, 0x0F, 0x00, 0x65, 0x00, 0x24, 0x00, 0x7D, 0x00, 0x09, 0x00, 0x38, 0x00, 0x00, 0xBF, 0x5C, -/* 0000F5D0 */ 0x08, 0xC1, 0x13, 0x88, 0x23, 0x00, 0xFE, 0xB1, 0x0B, 0x1B, 0xA0, 0x41, 0xC3, 0x00, 0xFE, 0x0D, -/* 0000F5E0 */ 0x04, 0xAD, 0xFF, 0x00, 0x00, 0x00, 0x02, 0xFF, 0xDA, 0x10, 0x02, 0x00, 0xFF, 0x00, 0x10, 0x01, -/* 0000F5F0 */ 0x00, 0x01, 0x01, 0xFF, 0xDA, 0x10, 0x02, 0x00, 0xFE, 0xF1, 0x04, 0xFE, 0xF1, 0x04, 0x01, 0x05, -/* 0000F600 */ 0x0D, 0x10, 0x04, 0x31, 0x30, 0x04, 0x03, 0x01, 0x11, 0x11, 0x11, 0x11, 0x01, 0x0F, 0x06, 0xFE, -/* 0000F610 */ 0xF6, 0x03, 0x05, 0xFE, 0x1D, 0x04, 0x06, 0xFE, 0x45, 0x03, 0x06, 0xFE, 0xF7, 0x03, 0x06, 0xFE, -/* 0000F620 */ 0x10, 0x04, 0x06, 0xFE, 0x16, 0x04, 0x06, 0xFE, 0x17, 0x04, 0x06, 0xFE, 0x19, 0x04, 0x06, 0xFE, -/* 0000F630 */ 0x13, 0x04, 0x06, 0xFE, 0x14, 0x04, 0x07, 0xD5, 0x59, 0x10, 0xB2, 0x0D, 0x10, 0x2C, 0x10, 0x0D, -/* 0000F640 */ 0x15, 0x03, 0x00, 0x10, 0x02, 0x09, 0x24, 0x00, 0x8D, 0x04, 0x03, 0x11, 0x00, 0x00, 0x6B, 0x10, -/* 0000F650 */ 0x11, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x11, 0x5B, 0x01, 0x03, 0x00, 0x00, 0x5B, 0x02, 0x04, -/* 0000F660 */ 0x00, 0x00, 0xF2, 0x03, 0xFF, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8D, 0x04, 0x03, 0x11, -/* 0000F670 */ 0x00, 0x00, 0x6B, 0x10, 0x11, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x11, 0x5B, 0x01, 0x0D, 0x01, -/* 0000F680 */ 0x00, 0xF2, 0x02, 0x10, 0x10, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x0E, 0x10, 0xA6, 0x10, -/* 0000F690 */ 0x14, 0x08, 0x00, 0x0E, 0x10, 0x60, 0x10, 0x0E, 0x02, 0x0F, 0x24, 0x00, 0x10, 0x8D, 0x04, 0x03, -/* 0000F6A0 */ 0x11, 0x00, 0x00, 0x6B, 0x10, 0x11, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x11, 0x5B, 0x01, 0x03, -/* 0000F6B0 */ 0x02, 0x00, 0x5B, 0x02, 0x04, 0x02, 0x00, 0xF2, 0x03, 0xFF, 0x10, 0x00, 0x00, 0x00, 0x00, 0x02, -/* 0000F6C0 */ 0x00, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x10, -/* 0000F6D0 */ 0x0E, 0x03, 0x79, 0x10, 0x00, 0x04, 0x60, 0x10, 0x0E, 0x05, 0x79, 0x10, 0x00, 0x06, 0x60, 0x10, -/* 0000F6E0 */ 0x0E, 0x07, 0x79, 0x10, 0x00, 0x08, 0x60, 0x10, 0x0E, 0x09, 0x79, 0x10, 0x00, 0x0A, 0x60, 0x10, -/* 0000F6F0 */ 0x0E, 0x0B, 0x79, 0x10, 0x00, 0x0C, 0x60, 0x10, 0x0E, 0x0D, 0x79, 0x10, 0x00, 0x0E, 0x60, 0x10, -/* 0000F700 */ 0x0E, 0x0F, 0x79, 0x10, 0x00, 0x10, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x01, 0x24, 0x00, -/* 0000F710 */ 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0x01, 0x00, 0x00, -/* 0000F720 */ 0x10, 0x04, 0x00, 0x00, 0x21, 0x02, 0x00, 0x00, 0x1F, 0x02, 0x00, 0x00, 0x19, 0x04, 0x00, 0x00, -/* 0000F730 */ 0x20, 0x02, 0x00, 0x00, 0x14, 0x04, 0x00, 0x00, 0xFE, 0x8A, 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0x1D, -/* 0000F740 */ 0x02, 0xFE, 0xF3, 0x01, 0xFE, 0xF7, 0x01, 0xFE, 0xCC, 0x04, 0xFE, 0x10, 0x04, 0xFE, 0xCD, 0x04, -/* 0000F750 */ 0xFE, 0x21, 0x02, 0xFE, 0xCE, 0x04, 0xFE, 0x1F, 0x02, 0xFE, 0x1C, 0x02, 0xFE, 0x19, 0x04, 0xFE, -/* 0000F760 */ 0xD0, 0x04, 0xFE, 0x20, 0x02, 0xFE, 0xCF, 0x04, 0xFE, 0x14, 0x04, 0xFF, 0x0F, 0x11, 0x02, 0x00, -/* 0000F770 */ 0x07, 0x05, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3C, 0x00, 0x24, 0x00, 0x84, 0x00, 0x22, 0x00, 0x4B, -/* 0000F780 */ 0x00, 0x0F, 0x00, 0x65, 0x00, 0x24, 0x00, 0x85, 0x00, 0x4A, 0x00, 0xC6, 0x02, 0x00, 0xBF, 0x5C, -/* 0000F790 */ 0x08, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x90, 0x0B, 0x10, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x0F, -/* 0000F7A0 */ 0x04, 0xAC, 0xFF, 0x1E, 0x0A, 0x02, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFF, 0x1E, -/* 0000F7B0 */ 0x0A, 0x02, 0x00, 0xFE, 0x03, 0x04, 0xFE, 0x03, 0x04, 0x01, 0x0A, 0x06, 0x0B, 0x10, 0x56, 0x53, -/* 0000F7C0 */ 0x04, 0x09, 0x06, 0x09, 0x09, 0x09, 0x09, 0x0A, 0x06, 0xFE, 0xF6, 0x03, 0x05, 0xFE, 0x1C, 0x04, -/* 0000F7D0 */ 0x06, 0xFE, 0x45, 0x03, 0x08, 0xFE, 0x78, 0x01, 0x59, 0x0B, 0xB2, 0x08, 0x0B, 0x2C, 0x0B, 0x08, -/* 0000F7E0 */ 0x15, 0x03, 0x00, 0x0B, 0x02, 0x09, 0x24, 0x00, 0x8D, 0x04, 0x03, 0x0C, 0x00, 0x00, 0x6B, 0x0B, -/* 0000F7F0 */ 0x0C, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x03, 0x00, 0x00, 0x5B, 0x02, 0x04, -/* 0000F800 */ 0x00, 0x00, 0xF2, 0x03, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8D, 0x04, 0x03, 0x0C, -/* 0000F810 */ 0x00, 0x00, 0x6B, 0x0B, 0x0C, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x08, 0x01, -/* 0000F820 */ 0x00, 0xF2, 0x02, 0x0B, 0x0B, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x09, 0x0B, 0xA6, 0x0B, -/* 0000F830 */ 0x14, 0x08, 0x00, 0x09, 0x0B, 0x60, 0x0B, 0x09, 0x02, 0x0F, 0x24, 0x00, 0x0B, 0x8D, 0x04, 0x03, -/* 0000F840 */ 0x0C, 0x00, 0x00, 0x6B, 0x0B, 0x0C, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x03, -/* 0000F850 */ 0x02, 0x00, 0x5B, 0x02, 0x04, 0x02, 0x00, 0xF2, 0x03, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x02, -/* 0000F860 */ 0x00, 0x8D, 0x04, 0x0B, 0x0B, 0x01, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x05, 0x5B, 0x01, 0x06, -/* 0000F870 */ 0x03, 0x00, 0xEE, 0x02, 0x0B, 0x0B, 0x03, 0x00, 0x47, 0x06, 0x0B, 0x8D, 0x04, 0x0B, 0x0B, 0x01, -/* 0000F880 */ 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x05, 0x5B, 0x01, 0x07, 0x04, 0x00, 0xEE, 0x02, 0x0B, 0x0B, -/* 0000F890 */ 0x04, 0x00, 0x47, 0x07, 0x0B, 0x8D, 0x04, 0x0A, 0x0B, 0x02, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 0000F8A0 */ 0x05, 0x8D, 0x04, 0x03, 0x0D, 0x00, 0x00, 0x6B, 0x0C, 0x0D, 0x03, 0x07, 0x08, 0x00, 0x5A, 0x00, -/* 0000F8B0 */ 0x0D, 0x5B, 0x01, 0x06, 0x06, 0x00, 0x5B, 0x02, 0x07, 0x06, 0x00, 0x60, 0x0E, 0x09, 0x04, 0x5B, -/* 0000F8C0 */ 0x03, 0x0E, 0x06, 0x00, 0x8D, 0x04, 0x3D, 0x0E, 0x03, 0x00, 0x4B, 0x0E, 0x07, 0x03, 0x00, 0x5A, -/* 0000F8D0 */ 0x00, 0x05, 0x8D, 0x04, 0x39, 0x0F, 0x04, 0x00, 0x4B, 0x0F, 0x5B, 0x01, 0x0F, 0x07, 0x00, 0x60, -/* 0000F8E0 */ 0x0F, 0x09, 0x05, 0x5B, 0x02, 0x0F, 0x07, 0x00, 0xEE, 0x03, 0x0E, 0x0E, 0x07, 0x00, 0x5B, 0x04, -/* 0000F8F0 */ 0x0E, 0x06, 0x00, 0x60, 0x0E, 0x09, 0x06, 0x5B, 0x05, 0x0E, 0x06, 0x00, 0x60, 0x0E, 0x09, 0x07, -/* 0000F900 */ 0x5B, 0x06, 0x0E, 0x06, 0x00, 0x8D, 0x04, 0x3D, 0x0E, 0x03, 0x00, 0x4B, 0x0E, 0x07, 0x03, 0x00, -/* 0000F910 */ 0x5A, 0x00, 0x05, 0x8D, 0x04, 0x3A, 0x0F, 0x05, 0x00, 0x4B, 0x0F, 0x5B, 0x01, 0x0F, 0x08, 0x00, -/* 0000F920 */ 0x60, 0x0F, 0x09, 0x08, 0x5B, 0x02, 0x0F, 0x08, 0x00, 0xEE, 0x03, 0x0E, 0x0E, 0x08, 0x00, 0x5B, -/* 0000F930 */ 0x07, 0x0E, 0x06, 0x00, 0xF2, 0x08, 0x0C, 0x0C, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x5B, 0x01, -/* 0000F940 */ 0x0C, 0x05, 0x00, 0xEE, 0x02, 0x00, 0x0B, 0x05, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, -/* 0000F950 */ 0xFE, 0x8A, 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0x1D, 0x02, 0xFE, 0xE1, 0x01, 0xFE, 0xCB, 0x04, 0xFE, -/* 0000F960 */ 0xCD, 0x04, 0xFE, 0xCE, 0x04, 0xFE, 0xD0, 0x04, 0xFE, 0xCF, 0x04, 0xFF, 0x4B, 0x0A, 0x02, 0x00, -/* 0000F970 */ 0x09, 0x05, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x38, 0x00, 0x24, 0x00, 0x75, 0x00, 0x22, 0x00, 0x47, -/* 0000F980 */ 0x00, 0x0F, 0x00, 0x61, 0x00, 0x24, 0x00, 0x75, 0x00, 0x1A, 0x00, 0x23, 0x00, 0x1A, 0x00, 0x24, -/* 0000F990 */ 0x00, 0xB9, 0x00, 0xC4, 0x01, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x75, -/* 0000F9A0 */ 0x0B, 0x10, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x45, 0x03, 0xAB, 0xFF, 0x91, 0x05, 0x02, 0x00, 0xFF, -/* 0000F9B0 */ 0x00, 0x10, 0x01, 0x00, 0x03, 0x01, 0xFF, 0x91, 0x05, 0x02, 0x00, 0xFE, 0x3D, 0x04, 0xFE, 0x3D, -/* 0000F9C0 */ 0x04, 0x01, 0x09, 0x05, 0x0B, 0x05, 0x60, 0x59, 0x04, 0x09, 0x09, 0x07, 0x06, 0x07, 0x07, 0x0A, -/* 0000F9D0 */ 0x08, 0x06, 0xFE, 0x45, 0x03, 0x07, 0xFE, 0x8F, 0x01, 0x59, 0x0B, 0xB2, 0x07, 0x0B, 0x4F, 0x08, -/* 0000F9E0 */ 0x4F, 0x09, 0x15, 0x05, 0x00, 0x05, 0x02, 0xA6, 0x0B, 0x47, 0x05, 0x0B, 0x15, 0x05, 0x00, 0x06, -/* 0000F9F0 */ 0x02, 0xA6, 0x0B, 0x47, 0x06, 0x0B, 0x4F, 0x08, 0x4F, 0x09, 0x69, 0x06, 0x00, 0x00, 0x00, 0x0B, -/* 0000FA00 */ 0x14, 0x0A, 0x00, 0x07, 0x0B, 0xA6, 0x0B, 0x14, 0x03, 0x00, 0x07, 0x0B, 0x09, 0x1E, 0x00, 0x8D, -/* 0000FA10 */ 0x01, 0x02, 0x0B, 0x00, 0x00, 0x4B, 0x0B, 0x07, 0x03, 0x00, 0x5B, 0x01, 0x05, 0x00, 0x00, 0x5B, -/* 0000FA20 */ 0x02, 0x06, 0x00, 0x00, 0xC2, 0x03, 0x00, 0x0B, 0x00, 0x00, 0x09, 0x39, 0x01, 0x8D, 0x04, 0x24, -/* 0000FA30 */ 0x0C, 0x01, 0x00, 0x6B, 0x0B, 0x0C, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x07, -/* 0000FA40 */ 0x01, 0x00, 0xF2, 0x02, 0x0B, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x08, 0x0B, 0x8D, -/* 0000FA50 */ 0x04, 0x11, 0x0B, 0x02, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x08, 0x02, 0x00, -/* 0000FA60 */ 0xEE, 0x02, 0x0B, 0x0B, 0x02, 0x00, 0x0F, 0x1F, 0x00, 0x0B, 0x8D, 0x04, 0x03, 0x0C, 0x03, 0x00, -/* 0000FA70 */ 0x6B, 0x0B, 0x0C, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x03, 0x03, 0x00, 0xF2, -/* 0000FA80 */ 0x02, 0xFF, 0x0B, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x8D, 0x04, 0x03, 0x0C, 0x03, 0x00, 0x6B, -/* 0000FA90 */ 0x0B, 0x0C, 0x02, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x08, 0x04, 0x00, 0xF2, 0x02, -/* 0000FAA0 */ 0x0B, 0x0B, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x47, 0x09, 0x0B, 0xA6, 0x0B, 0x14, 0x03, 0x00, -/* 0000FAB0 */ 0x09, 0x0B, 0x09, 0x45, 0x00, 0x8D, 0x04, 0x04, 0x0B, 0x04, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, -/* 0000FAC0 */ 0x02, 0xCA, 0x0C, 0x5B, 0x01, 0x0C, 0x05, 0x00, 0x5B, 0x02, 0x04, 0x05, 0x00, 0xEE, 0x03, 0x0B, -/* 0000FAD0 */ 0x0B, 0x05, 0x00, 0x47, 0x09, 0x0B, 0x8D, 0x04, 0x03, 0x0C, 0x03, 0x00, 0x6B, 0x0B, 0x0C, 0x03, -/* 0000FAE0 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x08, 0x06, 0x00, 0x5B, 0x02, 0x09, 0x06, 0x00, -/* 0000FAF0 */ 0xF2, 0x03, 0xFF, 0x0B, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x8D, 0x02, 0x02, 0x0B, 0x05, 0x00, -/* 0000FB00 */ 0x4B, 0x0B, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x09, 0x07, 0x00, 0x5B, 0x02, 0x05, -/* 0000FB10 */ 0x07, 0x00, 0x5B, 0x03, 0x06, 0x07, 0x00, 0xEE, 0x04, 0xFF, 0x0B, 0x07, 0x00, 0x47, 0x0B, 0x09, -/* 0000FB20 */ 0x8D, 0x04, 0x06, 0x0C, 0x06, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8D, 0x04, 0x1A, 0x0D, -/* 0000FB30 */ 0x07, 0x00, 0x5B, 0x01, 0x0D, 0x08, 0x00, 0x8D, 0x01, 0x03, 0x0D, 0x08, 0x00, 0x4B, 0x0D, 0x5B, -/* 0000FB40 */ 0x02, 0x0D, 0x08, 0x00, 0x5B, 0x03, 0x08, 0x08, 0x00, 0xEE, 0x04, 0x0C, 0x0C, 0x08, 0x00, 0x75, -/* 0000FB50 */ 0x0C, 0x0B, 0x04, 0x60, 0x0B, 0x09, 0x05, 0x80, 0x0B, 0x0B, 0xF8, 0x00, 0xFA, 0x0B, 0x47, 0x00, -/* 0000FB60 */ 0x08, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x36, 0x03, 0xFE, 0x8E, 0x02, 0xFE, 0xEF, -/* 0000FB70 */ 0x01, 0xFE, 0xF0, 0x01, 0xFE, 0x1B, 0x02, 0xFE, 0x1B, 0x02, 0xAB, 0xFF, 0xA3, 0x05, 0x02, 0x00, -/* 0000FB80 */ 0x10, 0x09, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0E, 0x00, 0x2B, 0x00, 0x15, 0x00, 0x43, -/* 0000FB90 */ 0x00, 0x1E, 0x00, 0x52, 0x00, 0x22, 0x00, 0x37, 0x00, 0x1B, 0x00, 0x38, 0x00, 0x1F, 0x00, 0x97, -/* 0000FBA0 */ 0x00, 0x22, 0x00, 0x47, 0x00, 0x0A, 0x00, 0x3A, 0x00, 0x21, 0x00, 0x3F, 0x00, 0x24, 0x00, 0x58, -/* 0000FBB0 */ 0x00, 0x23, 0x00, 0x76, 0x00, 0x36, 0x00, 0x68, 0x00, 0x0B, 0x00, 0x3D, 0x00, 0x08, 0x00, 0x1C, -/* 0000FBC0 */ 0x00, 0x00, 0xBF, 0x5C, 0x0A, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x5B, 0x0B, 0x61, 0xA0, 0x41, -/* 0000FBD0 */ 0xF1, 0x00, 0xAA, 0xFF, 0xAA, 0x00, 0x02, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFF, -/* 0000FBE0 */ 0xAA, 0x00, 0x02, 0x00, 0xFE, 0x7F, 0x04, 0xFE, 0x7F, 0x04, 0x03, 0x0B, 0x08, 0x0E, 0x10, 0x61, -/* 0000FBF0 */ 0x5D, 0x03, 0x03, 0x0A, 0x08, 0x08, 0x08, 0x08, 0x08, 0x0D, 0x07, 0x01, 0x00, 0x05, 0xFE, 0x08, -/* 0000FC00 */ 0x04, 0x08, 0x01, 0x01, 0x01, 0x02, 0xFE, 0xA2, 0x01, 0xAC, 0x08, 0x59, 0x0E, 0xB2, 0x0A, 0x0E, -/* 0000FC10 */ 0x96, 0x0E, 0x08, 0x03, 0x00, 0x00, 0x47, 0x09, 0x0E, 0xA6, 0x0E, 0x14, 0x08, 0x00, 0x0A, 0x0E, -/* 0000FC20 */ 0x14, 0x03, 0x00, 0x0A, 0x02, 0x09, 0x22, 0x00, 0x8D, 0x03, 0x03, 0x0F, 0x00, 0x00, 0x6B, 0x0E, -/* 0000FC30 */ 0x0F, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0F, 0x5B, 0x01, 0x04, 0x00, 0x00, 0xF2, 0x02, 0xFF, -/* 0000FC40 */ 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x22, 0x00, 0x14, 0x03, 0x00, 0x09, 0x02, 0x09, -/* 0000FC50 */ 0x1A, 0x00, 0x8D, 0x03, 0x03, 0x0F, 0x00, 0x00, 0x6B, 0x0E, 0x0F, 0x01, 0x07, 0x01, 0x00, 0x5A, -/* 0000FC60 */ 0x00, 0x0F, 0xF2, 0x01, 0xFF, 0x0E, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x8D, 0x03, 0x0B, 0x0E, -/* 0000FC70 */ 0x01, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x05, 0x5B, 0x01, 0x0A, 0x02, 0x00, 0xEE, 0x02, 0x0E, -/* 0000FC80 */ 0x0E, 0x02, 0x00, 0x47, 0x0B, 0x0E, 0x8D, 0x03, 0x0B, 0x0E, 0x01, 0x00, 0x07, 0x02, 0x00, 0x5A, -/* 0000FC90 */ 0x00, 0x05, 0x5B, 0x01, 0x09, 0x03, 0x00, 0xEE, 0x02, 0x0E, 0x0E, 0x03, 0x00, 0x47, 0x09, 0x0E, -/* 0000FCA0 */ 0x8D, 0x03, 0x04, 0x0E, 0x02, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x05, 0xCA, 0x0F, 0x5B, 0x01, -/* 0000FCB0 */ 0x0F, 0x04, 0x00, 0x5B, 0x02, 0x02, 0x04, 0x00, 0xEE, 0x03, 0x0E, 0x0E, 0x04, 0x00, 0x47, 0x0C, -/* 0000FCC0 */ 0x0E, 0x8D, 0x01, 0x02, 0x0E, 0x03, 0x00, 0x4B, 0x0E, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x05, 0x5B, -/* 0000FCD0 */ 0x01, 0x0C, 0x05, 0x00, 0x96, 0x0F, 0x08, 0x06, 0x01, 0x00, 0x5B, 0x02, 0x0F, 0x05, 0x00, 0x96, -/* 0000FCE0 */ 0x0F, 0x08, 0x07, 0x02, 0x00, 0x5B, 0x03, 0x0F, 0x05, 0x00, 0xEE, 0x04, 0xFF, 0x0E, 0x05, 0x00, -/* 0000FCF0 */ 0x8D, 0x03, 0x0A, 0x0E, 0x04, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x05, 0x8D, 0x03, 0x03, 0x10, -/* 0000FD00 */ 0x00, 0x00, 0x6B, 0x0F, 0x10, 0x02, 0x07, 0x08, 0x00, 0x5A, 0x00, 0x10, 0x5B, 0x01, 0x0B, 0x07, -/* 0000FD10 */ 0x00, 0x5B, 0x02, 0x09, 0x07, 0x00, 0x60, 0x11, 0x0C, 0x03, 0x5B, 0x03, 0x11, 0x07, 0x00, 0x8D, -/* 0000FD20 */ 0x03, 0x3D, 0x11, 0x05, 0x00, 0x4B, 0x11, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x05, 0x8D, 0x03, 0x39, -/* 0000FD30 */ 0x12, 0x06, 0x00, 0x4B, 0x12, 0x5B, 0x01, 0x12, 0x08, 0x00, 0x60, 0x12, 0x0C, 0x04, 0x5B, 0x02, -/* 0000FD40 */ 0x12, 0x08, 0x00, 0xEE, 0x03, 0x11, 0x11, 0x08, 0x00, 0x5B, 0x04, 0x11, 0x07, 0x00, 0x60, 0x11, -/* 0000FD50 */ 0x0C, 0x05, 0x5B, 0x05, 0x11, 0x07, 0x00, 0x60, 0x11, 0x0C, 0x06, 0x5B, 0x06, 0x11, 0x07, 0x00, -/* 0000FD60 */ 0x8D, 0x03, 0x3D, 0x11, 0x05, 0x00, 0x4B, 0x11, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x05, 0x8D, 0x03, -/* 0000FD70 */ 0x3A, 0x12, 0x07, 0x00, 0x4B, 0x12, 0x5B, 0x01, 0x12, 0x09, 0x00, 0x60, 0x12, 0x0C, 0x07, 0x5B, -/* 0000FD80 */ 0x02, 0x12, 0x09, 0x00, 0xEE, 0x03, 0x11, 0x11, 0x09, 0x00, 0x5B, 0x07, 0x11, 0x07, 0x00, 0xF2, -/* 0000FD90 */ 0x08, 0x0F, 0x0F, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x5B, 0x01, 0x0F, 0x06, 0x00, 0xEE, 0x02, -/* 0000FDA0 */ 0x00, 0x0E, 0x06, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x91, 0x02, 0xFE, 0x89, -/* 0000FDB0 */ 0x02, 0xFE, 0xE1, 0x01, 0xFE, 0xCB, 0x04, 0xFE, 0xCD, 0x04, 0xFE, 0xCE, 0x04, 0xFE, 0xD0, 0x04, -/* 0000FDC0 */ 0xFE, 0xCF, 0x04, 0xFF, 0xC8, 0x00, 0x02, 0x00, 0x0B, 0x07, 0x00, 0x00, 0x00, 0x09, 0x00, 0x29, -/* 0000FDD0 */ 0x00, 0x0F, 0x00, 0x3F, 0x00, 0x22, 0x00, 0x6D, 0x00, 0x08, 0x00, 0x29, 0x00, 0x1A, 0x00, 0xE2, -/* 0000FDE0 */ 0x00, 0x1A, 0x00, 0x2C, 0x00, 0x1A, 0x00, 0x29, 0x00, 0x21, 0x00, 0x3A, 0x00, 0x2F, 0x00, 0x4D, -/* 0000FDF0 */ 0x00, 0xB9, 0x00, 0xA4, 0x01, 0x00, 0xBF, 0x5D, 0x1A, 0xC1, 0x43, 0xAD, 0x05, 0x00, 0xFE, 0xEE, -/* 0000FE00 */ 0x0A, 0x0C, 0xB3, 0x41, 0xC1, 0x00, 0xFE, 0x05, 0x04, 0xA8, 0xFF, 0x77, 0xE9, 0x01, 0x00, 0x01, -/* 0000FE10 */ 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFF, 0x77, 0xE9, 0x01, 0x00, 0xFE, 0xD0, 0x16, 0xFE, -/* 0000FE20 */ 0xD0, 0x16, 0x44, 0x03, 0xFE, 0x14, 0x04, 0xFE, 0x20, 0x02, 0xFE, 0x19, 0x04, 0x15, 0x24, 0x35, -/* 0000FE30 */ 0x09, 0xFE, 0x10, 0x01, 0xFE, 0xFF, 0x00, 0x03, 0x02, 0x12, 0x05, 0x10, 0x13, 0x13, 0x13, 0x13, -/* 0000FE40 */ 0x01, 0x32, 0x33, 0x34, 0x35, 0x06, 0xFE, 0xF6, 0x03, 0x06, 0xFE, 0xC8, 0x04, 0x08, 0x06, 0xFE, -/* 0000FE50 */ 0x45, 0x03, 0x0B, 0x06, 0xFE, 0xF5, 0x03, 0x07, 0x06, 0xFE, 0x00, 0x04, 0x06, 0xFE, 0xAD, 0x03, -/* 0000FE60 */ 0x05, 0xFE, 0xBC, 0x03, 0x05, 0xFE, 0xFF, 0x03, 0x06, 0xFE, 0x10, 0x04, 0x06, 0xFE, 0x11, 0x04, -/* 0000FE70 */ 0x06, 0xFE, 0x12, 0x04, 0x06, 0xFE, 0x16, 0x04, 0x06, 0xFE, 0x28, 0x03, 0x06, 0xFE, 0x29, 0x03, -/* 0000FE80 */ 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, 0x2B, 0x03, 0x06, 0xFE, 0x17, 0x04, 0x06, 0xFE, 0xC2, 0x03, -/* 0000FE90 */ 0x0C, 0x06, 0xFE, 0x14, 0x04, 0x06, 0xFE, 0x2D, 0x03, 0x06, 0xFE, 0x2E, 0x03, 0x06, 0xFE, 0x2F, -/* 0000FEA0 */ 0x03, 0x06, 0xFE, 0x13, 0x04, 0x06, 0xFE, 0x15, 0x04, 0x06, 0xFE, 0x5B, 0x03, 0x06, 0xFE, 0xF7, -/* 0000FEB0 */ 0x02, 0x06, 0xFE, 0xC9, 0x04, 0x06, 0xFE, 0xCA, 0x04, 0x01, 0x00, 0x01, 0xFF, 0xFE, 0x60, 0x04, -/* 0000FEC0 */ 0xA6, 0x2F, 0xA6, 0x30, 0xA6, 0x31, 0x2C, 0x36, 0x24, 0x0D, 0x03, 0x00, 0x36, 0x02, 0x09, 0x1A, -/* 0000FED0 */ 0x00, 0x8D, 0x03, 0x03, 0x37, 0x00, 0x00, 0x6B, 0x36, 0x37, 0x00, 0x07, 0x01, 0x00, 0x5A, 0x00, -/* 0000FEE0 */ 0x37, 0xF2, 0x01, 0xFF, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8D, 0x03, 0x06, 0x36, 0x01, -/* 0000FEF0 */ 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x04, 0x8D, 0x03, 0x13, 0x37, 0x02, 0x00, 0x5B, 0x01, 0x37, -/* 0000FF00 */ 0x01, 0x00, 0x5B, 0x02, 0x24, 0x01, 0x00, 0x5B, 0x03, 0x03, 0x01, 0x00, 0xEE, 0x04, 0x36, 0x36, -/* 0000FF10 */ 0x01, 0x00, 0x0E, 0x2C, 0x00, 0x36, 0x60, 0x36, 0x24, 0x01, 0x0E, 0x24, 0x00, 0x36, 0x8D, 0x03, -/* 0000FF20 */ 0x03, 0x37, 0x00, 0x00, 0x6B, 0x36, 0x37, 0x02, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x37, 0x5B, 0x01, -/* 0000FF30 */ 0x05, 0x02, 0x00, 0x5B, 0x02, 0x05, 0x02, 0x00, 0xF2, 0x03, 0xFF, 0x36, 0x02, 0x00, 0x00, 0x00, -/* 0000FF40 */ 0x02, 0x00, 0x75, 0x06, 0x24, 0x03, 0x2C, 0x36, 0x26, 0x14, 0x03, 0x00, 0x36, 0x07, 0x09, 0x24, -/* 0000FF50 */ 0x00, 0x8D, 0x03, 0x04, 0x36, 0x03, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x04, 0xCA, 0x37, 0x5B, -/* 0000FF60 */ 0x01, 0x37, 0x03, 0x00, 0x5B, 0x02, 0x08, 0x03, 0x00, 0xEE, 0x03, 0x36, 0x36, 0x03, 0x00, 0x47, -/* 0000FF70 */ 0x26, 0x36, 0x09, 0x22, 0x00, 0x8D, 0x03, 0x24, 0x37, 0x04, 0x00, 0x6B, 0x36, 0x37, 0x04, 0x07, -/* 0000FF80 */ 0x02, 0x00, 0x5A, 0x00, 0x37, 0x5B, 0x01, 0x26, 0x04, 0x00, 0xF2, 0x02, 0x36, 0x36, 0x04, 0x00, -/* 0000FF90 */ 0x00, 0x00, 0x04, 0x00, 0x47, 0x26, 0x36, 0x8D, 0x02, 0x02, 0x36, 0x05, 0x00, 0x4B, 0x36, 0x07, -/* 0000FFA0 */ 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x26, 0x05, 0x00, 0x5B, 0x02, 0x09, 0x05, 0x00, 0x5B, -/* 0000FFB0 */ 0x03, 0x0A, 0x05, 0x00, 0xCD, 0x37, 0x02, 0x00, 0x00, 0x9F, 0x00, 0x0B, 0x37, 0x9F, 0x01, 0x0C, -/* 0000FFC0 */ 0x37, 0x5B, 0x04, 0x37, 0x05, 0x00, 0x5B, 0x05, 0x0C, 0x05, 0x00, 0xEE, 0x06, 0x36, 0x36, 0x05, -/* 0000FFD0 */ 0x00, 0x47, 0x28, 0x36, 0x8D, 0x02, 0x02, 0x36, 0x05, 0x00, 0x4B, 0x36, 0x07, 0x06, 0x00, 0x5A, -/* 0000FFE0 */ 0x00, 0x04, 0x5B, 0x01, 0x26, 0x06, 0x00, 0x5B, 0x02, 0x0D, 0x06, 0x00, 0x5B, 0x03, 0x0A, 0x06, -/* 0000FFF0 */ 0x00, 0xCD, 0x37, 0x02, 0x01, 0x00, 0x9F, 0x00, 0x0E, 0x37, 0x9F, 0x01, 0x0F, 0x37, 0x5B, 0x04, -/* 00010000 */ 0x37, 0x06, 0x00, 0x5B, 0x05, 0x0E, 0x06, 0x00, 0xEE, 0x06, 0x36, 0x36, 0x06, 0x00, 0x47, 0x29, -/* 00010010 */ 0x36, 0x8D, 0x02, 0x02, 0x36, 0x05, 0x00, 0x4B, 0x36, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5B, -/* 00010020 */ 0x01, 0x26, 0x07, 0x00, 0x5B, 0x02, 0x10, 0x07, 0x00, 0x5B, 0x03, 0x0A, 0x07, 0x00, 0xCD, 0x37, -/* 00010030 */ 0x04, 0x02, 0x00, 0x9F, 0x00, 0x11, 0x37, 0x9F, 0x01, 0x12, 0x37, 0x9F, 0x02, 0x13, 0x37, 0x9F, -/* 00010040 */ 0x03, 0x14, 0x37, 0x5B, 0x04, 0x37, 0x07, 0x00, 0xA6, 0x37, 0x5B, 0x05, 0x37, 0x07, 0x00, 0xEE, -/* 00010050 */ 0x06, 0x36, 0x36, 0x07, 0x00, 0x47, 0x2A, 0x36, 0x8D, 0x02, 0x02, 0x36, 0x05, 0x00, 0x4B, 0x36, -/* 00010060 */ 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x26, 0x08, 0x00, 0x5B, 0x02, 0x15, 0x08, 0x00, -/* 00010070 */ 0x5B, 0x03, 0x16, 0x08, 0x00, 0xA6, 0x37, 0x5B, 0x04, 0x37, 0x08, 0x00, 0x5B, 0x05, 0x17, 0x08, -/* 00010080 */ 0x00, 0xEE, 0x06, 0x36, 0x36, 0x08, 0x00, 0x47, 0x2B, 0x36, 0x8D, 0x02, 0x02, 0x36, 0x05, 0x00, -/* 00010090 */ 0x4B, 0x36, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x26, 0x09, 0x00, 0x5B, 0x02, 0x18, -/* 000100A0 */ 0x09, 0x00, 0x5B, 0x03, 0x0A, 0x09, 0x00, 0xCD, 0x37, 0x03, 0x03, 0x00, 0x9F, 0x00, 0x19, 0x37, -/* 000100B0 */ 0x9F, 0x01, 0x1A, 0x37, 0x9F, 0x02, 0x1B, 0x37, 0x5B, 0x04, 0x37, 0x09, 0x00, 0xA6, 0x37, 0x5B, -/* 000100C0 */ 0x05, 0x37, 0x09, 0x00, 0xEE, 0x06, 0x36, 0x36, 0x09, 0x00, 0x94, 0x02, 0x36, 0x8D, 0x02, 0x02, -/* 000100D0 */ 0x36, 0x05, 0x00, 0x4B, 0x36, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x26, 0x0A, 0x00, -/* 000100E0 */ 0x5B, 0x02, 0x1C, 0x0A, 0x00, 0x5B, 0x03, 0x16, 0x0A, 0x00, 0xCD, 0x37, 0x02, 0x04, 0x00, 0x9F, -/* 000100F0 */ 0x00, 0x06, 0x37, 0x9F, 0x01, 0x17, 0x37, 0x5B, 0x04, 0x37, 0x0A, 0x00, 0xA6, 0x37, 0x5B, 0x05, -/* 00010100 */ 0x37, 0x0A, 0x00, 0xEE, 0x06, 0x36, 0x36, 0x0A, 0x00, 0x94, 0x03, 0x36, 0x8D, 0x02, 0x07, 0x36, -/* 00010110 */ 0x06, 0x00, 0x4B, 0x36, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x25, 0x0B, 0x00, 0xEE, -/* 00010120 */ 0x02, 0x36, 0x36, 0x0B, 0x00, 0x47, 0x25, 0x36, 0x8D, 0x03, 0x2A, 0x36, 0x07, 0x00, 0x07, 0x05, -/* 00010130 */ 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x25, 0x0C, 0x00, 0x5B, 0x02, 0x28, 0x0C, 0x00, 0xA6, 0x37, -/* 00010140 */ 0x5B, 0x03, 0x37, 0x0C, 0x00, 0x8D, 0x03, 0x31, 0x37, 0x08, 0x00, 0x5B, 0x04, 0x37, 0x0C, 0x00, -/* 00010150 */ 0xEE, 0x05, 0x36, 0x36, 0x0C, 0x00, 0x47, 0x2C, 0x36, 0x94, 0x04, 0x1D, 0x8D, 0x03, 0x27, 0x36, -/* 00010160 */ 0x09, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, 0x60, 0x37, 0x2C, 0x05, 0x5B, 0x01, 0x37, 0x0D, -/* 00010170 */ 0x00, 0xEE, 0x02, 0x36, 0x36, 0x0D, 0x00, 0x47, 0x2D, 0x36, 0x47, 0x2E, 0x2D, 0x60, 0x36, 0x2C, -/* 00010180 */ 0x06, 0x0E, 0x2E, 0x00, 0x36, 0x8D, 0x03, 0x06, 0x36, 0x01, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, -/* 00010190 */ 0x04, 0x8D, 0x03, 0x16, 0x37, 0x0A, 0x00, 0x5B, 0x01, 0x37, 0x0E, 0x00, 0x60, 0x37, 0x2C, 0x06, -/* 000101A0 */ 0x5B, 0x02, 0x37, 0x0E, 0x00, 0xD3, 0x00, 0x37, 0x5B, 0x03, 0x37, 0x0E, 0x00, 0xEE, 0x04, 0xFF, -/* 000101B0 */ 0x36, 0x0E, 0x00, 0x91, 0x04, 0x36, 0x0B, 0x00, 0x15, 0x03, 0x00, 0x36, 0x1D, 0x09, 0x50, 0x00, -/* 000101C0 */ 0x8D, 0x03, 0x2F, 0x36, 0x0C, 0x00, 0x96, 0x36, 0x36, 0x2E, 0x00, 0x00, 0x47, 0x2F, 0x36, 0x47, -/* 000101D0 */ 0x30, 0x1E, 0xA6, 0x36, 0x15, 0x03, 0x00, 0x2F, 0x36, 0x09, 0x31, 0x00, 0x91, 0x04, 0x37, 0x0B, -/* 000101E0 */ 0x00, 0x96, 0x37, 0x2F, 0x37, 0x01, 0x00, 0x47, 0x30, 0x37, 0x47, 0x36, 0x37, 0xA6, 0x37, 0x15, -/* 000101F0 */ 0x03, 0x00, 0x36, 0x37, 0x09, 0x16, 0x00, 0x15, 0x03, 0x00, 0x30, 0x1E, 0x09, 0x0B, 0x00, 0x2F, -/* 00010200 */ 0x36, 0x2E, 0x1F, 0x2F, 0x36, 0x36, 0x30, 0x47, 0x2E, 0x36, 0x09, 0x03, 0x00, 0x94, 0x04, 0x1D, -/* 00010210 */ 0x91, 0x02, 0x36, 0x0D, 0x00, 0xA6, 0x37, 0x14, 0x03, 0x00, 0x36, 0x37, 0x09, 0xA3, 0x00, 0xE5, -/* 00010220 */ 0x4C, 0x00, 0x8D, 0x03, 0x03, 0x37, 0x00, 0x00, 0x6B, 0x36, 0x37, 0x07, 0x07, 0x08, 0x00, 0x5A, -/* 00010230 */ 0x00, 0x37, 0x5B, 0x01, 0x20, 0x0F, 0x00, 0x5B, 0x02, 0x21, 0x0F, 0x00, 0x5B, 0x03, 0x2D, 0x0F, -/* 00010240 */ 0x00, 0xA6, 0x38, 0x5B, 0x04, 0x38, 0x0F, 0x00, 0xA6, 0x38, 0x5B, 0x05, 0x38, 0x0F, 0x00, 0xA6, -/* 00010250 */ 0x38, 0x5B, 0x06, 0x38, 0x0F, 0x00, 0xA6, 0x38, 0x5B, 0x07, 0x38, 0x0F, 0x00, 0xF2, 0x08, 0x36, -/* 00010260 */ 0x36, 0x07, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x47, 0x31, 0x36, 0xE9, 0x09, 0x35, 0x00, 0xE7, 0x27, -/* 00010270 */ 0x06, 0x8D, 0x03, 0x22, 0x36, 0x0E, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x27, -/* 00010280 */ 0x10, 0x00, 0xEE, 0x02, 0xFF, 0x36, 0x10, 0x00, 0x8D, 0x03, 0x03, 0x37, 0x00, 0x00, 0x6B, 0x36, -/* 00010290 */ 0x37, 0x08, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x37, 0xF2, 0x01, 0xFF, 0x36, 0x08, 0x00, 0x00, 0x00, -/* 000102A0 */ 0x11, 0x00, 0xE9, 0x14, 0x03, 0x00, 0x31, 0x22, 0x09, 0x06, 0x00, 0x94, 0x02, 0x1B, 0x09, 0x11, -/* 000102B0 */ 0x00, 0x14, 0x03, 0x00, 0x31, 0x23, 0x09, 0x06, 0x00, 0x94, 0x02, 0x19, 0x09, 0x03, 0x00, 0x94, -/* 000102C0 */ 0x02, 0x1A, 0xA6, 0x36, 0x14, 0x03, 0x00, 0x2A, 0x36, 0x09, 0x03, 0x00, 0x47, 0x2A, 0x14, 0x91, -/* 000102D0 */ 0x03, 0x36, 0x0F, 0x00, 0xA6, 0x37, 0x14, 0x03, 0x00, 0x36, 0x37, 0x09, 0x03, 0x00, 0x94, 0x03, -/* 000102E0 */ 0x17, 0x75, 0x28, 0x24, 0x09, 0x60, 0x36, 0x2C, 0x05, 0x75, 0x36, 0x24, 0x0A, 0x75, 0x2E, 0x24, -/* 000102F0 */ 0x0B, 0x75, 0x29, 0x24, 0x0C, 0x75, 0x2A, 0x24, 0x0D, 0x75, 0x2B, 0x24, 0x0E, 0x91, 0x02, 0x36, -/* 00010300 */ 0x0D, 0x00, 0x75, 0x36, 0x24, 0x0F, 0x91, 0x03, 0x36, 0x0F, 0x00, 0x75, 0x36, 0x24, 0x10, 0x91, -/* 00010310 */ 0x04, 0x36, 0x0B, 0x00, 0x75, 0x36, 0x24, 0x11, 0x75, 0x06, 0x24, 0x12, 0xA6, 0x00, 0x24, 0x00, -/* 00010320 */ 0xFE, 0x89, 0x02, 0xFE, 0xF2, 0x01, 0xFE, 0x8D, 0x02, 0xFE, 0xF2, 0x01, 0xFE, 0x36, 0x03, 0xFE, -/* 00010330 */ 0xF9, 0x01, 0xFE, 0xFB, 0x01, 0xFE, 0xE1, 0x01, 0xFE, 0x90, 0x02, 0xFE, 0x2D, 0x02, 0xFE, 0xF3, -/* 00010340 */ 0x01, 0xFE, 0xCB, 0x04, 0xFE, 0xCC, 0x04, 0xFE, 0xCD, 0x04, 0xFE, 0xCE, 0x04, 0xFE, 0xCF, 0x04, -/* 00010350 */ 0xFE, 0xD0, 0x04, 0xFE, 0x1C, 0x02, 0xFE, 0x1D, 0x02, 0xFF, 0xC4, 0xE9, 0x01, 0x00, 0x35, 0x06, -/* 00010360 */ 0x00, 0x00, 0x00, 0x0B, 0x00, 0x37, 0x00, 0x1A, 0x00, 0x3F, 0x00, 0x33, 0x00, 0x93, 0x00, 0x24, -/* 00010370 */ 0x00, 0x65, 0x00, 0x04, 0x00, 0x5D, 0x00, 0x0B, 0x00, 0x3A, 0x00, 0x24, 0x00, 0x4F, 0x00, 0x22, -/* 00010380 */ 0x00, 0x49, 0x00, 0x3D, 0x00, 0x71, 0x00, 0x3D, 0x00, 0x5F, 0x00, 0x47, 0x00, 0x81, 0x00, 0x32, -/* 00010390 */ 0x00, 0x6E, 0x00, 0x43, 0x00, 0x73, 0x00, 0x3F, 0x00, 0x9B, 0x00, 0x1C, 0x00, 0x41, 0x00, 0x31, -/* 000103A0 */ 0x00, 0x6F, 0x00, 0x03, 0x00, 0x2B, 0x00, 0x1E, 0x00, 0x69, 0x00, 0x03, 0x00, 0x46, 0x00, 0x08, -/* 000103B0 */ 0x00, 0x36, 0x00, 0x2E, 0x00, 0x33, 0x05, 0x0D, 0x00, 0x33, 0x00, 0x0F, 0x00, 0x6F, 0x00, 0x03, -/* 000103C0 */ 0x00, 0x2F, 0x00, 0x25, 0x00, 0x92, 0x00, 0x08, 0x00, 0x3B, 0x00, 0x0E, 0x00, 0xB1, 0x00, 0x03, -/* 000103D0 */ 0x00, 0x7F, 0x00, 0x12, 0x00, 0x51, 0x00, 0x4E, 0x00, 0x84, 0x00, 0x01, 0x00, 0x52, 0x00, 0x17, -/* 000103E0 */ 0x00, 0x92, 0x01, 0x1B, 0x00, 0x52, 0x00, 0x08, 0x00, 0x29, 0x00, 0x06, 0x00, 0x30, 0x00, 0x08, -/* 000103F0 */ 0x00, 0x2A, 0x00, 0x06, 0x00, 0x4A, 0x00, 0x03, 0x00, 0x4E, 0x00, 0x0A, 0x00, 0x35, 0x00, 0x03, -/* 00010400 */ 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x31, 0x00, 0x03, 0x00, 0x65, 0x00, 0x04, 0x00, 0x2E, 0x00, 0x08, -/* 00010410 */ 0x00, 0x4D, 0x00, 0x04, 0x00, 0x48, 0x00, 0x04, 0x00, 0x2A, 0x00, 0x04, 0x00, 0x36, 0x00, 0x04, -/* 00010420 */ 0x00, 0x42, 0x00, 0x09, 0x00, 0x32, 0x00, 0x09, 0x00, 0x2E, 0x00, 0x09, 0x00, 0x32, 0x00, 0x06, -/* 00010430 */ 0x00, 0x33, 0x00, 0x00, 0x38, 0x04, 0x01, 0x00, 0xBF, 0x5C, 0x1A, 0xC1, 0x33, 0x88, 0x21, 0x00, -/* 00010440 */ 0xFE, 0x10, 0x0B, 0x57, 0xA2, 0x41, 0xD1, 0x00, 0xA9, 0xFF, 0x31, 0xF1, 0x01, 0x00, 0xFF, 0x00, -/* 00010450 */ 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0x31, 0xF1, 0x01, 0x00, 0xFE, 0xCB, 0x04, 0xFE, 0xCB, 0x04, -/* 00010460 */ 0x41, 0x09, 0x15, 0x1A, 0x0B, 0x5F, 0x5A, 0x04, 0x03, 0x05, 0x01, 0x08, 0x03, 0x03, 0x03, 0x03, -/* 00010470 */ 0x01, 0x01, 0x19, 0x01, 0x01, 0x01, 0x02, 0x06, 0xFE, 0x5B, 0x03, 0x06, 0xFE, 0xB1, 0x03, 0x06, -/* 00010480 */ 0xFE, 0x14, 0x04, 0x07, 0x08, 0x06, 0xFE, 0xAD, 0x03, 0x06, 0xFE, 0x2D, 0x03, 0x06, 0xFE, 0x2E, -/* 00010490 */ 0x03, 0x06, 0xFE, 0x2F, 0x03, 0x06, 0xFE, 0xB2, 0x03, 0x06, 0xFE, 0xC1, 0x03, 0x0B, 0x06, 0xFE, -/* 000104A0 */ 0xB0, 0x03, 0x06, 0xFE, 0x15, 0x04, 0x06, 0xFE, 0x12, 0x04, 0x06, 0xFE, 0x11, 0x04, 0x05, 0xFE, -/* 000104B0 */ 0xD1, 0x04, 0xFE, 0x90, 0x01, 0x8D, 0x04, 0x03, 0x1B, 0x00, 0x00, 0x6B, 0x1A, 0x1B, 0x00, 0x07, -/* 000104C0 */ 0x03, 0x00, 0x5A, 0x00, 0x1B, 0x5B, 0x01, 0x15, 0x00, 0x00, 0xE0, 0x1C, 0x00, 0x5B, 0x02, 0x1C, -/* 000104D0 */ 0x00, 0x00, 0xF2, 0x03, 0x1A, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x16, 0x1A, 0x96, -/* 000104E0 */ 0x1A, 0x16, 0x02, 0x00, 0x00, 0x47, 0x17, 0x1A, 0x96, 0x1A, 0x16, 0x03, 0x01, 0x00, 0x14, 0x03, -/* 000104F0 */ 0x00, 0x1A, 0x04, 0x09, 0x08, 0x00, 0xA6, 0x1B, 0x47, 0x1A, 0x1B, 0x09, 0x09, 0x00, 0x96, 0x1B, -/* 00010500 */ 0x16, 0x03, 0x02, 0x00, 0x47, 0x1A, 0x1B, 0x47, 0x18, 0x1A, 0x14, 0x03, 0x00, 0x17, 0x05, 0x09, -/* 00010510 */ 0x84, 0x00, 0x8D, 0x01, 0x02, 0x1A, 0x01, 0x00, 0xA6, 0x1B, 0x14, 0x03, 0x00, 0x1A, 0x1B, 0x09, -/* 00010520 */ 0x74, 0x00, 0x8D, 0x03, 0x02, 0x1A, 0x02, 0x00, 0x4B, 0x1A, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x08, -/* 00010530 */ 0x8D, 0x04, 0x04, 0x1B, 0x03, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x08, 0xCB, 0x00, 0x00, 0x00, -/* 00010540 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x79, 0x18, 0x1C, 0x01, 0x5B, 0x01, 0x1C, -/* 00010550 */ 0x02, 0x00, 0x5B, 0x02, 0x07, 0x02, 0x00, 0xEE, 0x03, 0x1B, 0x1B, 0x02, 0x00, 0x5B, 0x01, 0x1B, -/* 00010560 */ 0x01, 0x00, 0x5B, 0x02, 0x06, 0x01, 0x00, 0x5B, 0x03, 0x09, 0x01, 0x00, 0xCD, 0x1B, 0x03, 0x00, -/* 00010570 */ 0x00, 0x9F, 0x00, 0x0A, 0x1B, 0x9F, 0x01, 0x0B, 0x1B, 0x9F, 0x02, 0x0C, 0x1B, 0x5B, 0x04, 0x1B, -/* 00010580 */ 0x01, 0x00, 0xA6, 0x1B, 0x5B, 0x05, 0x1B, 0x01, 0x00, 0xEE, 0x06, 0x1A, 0x1A, 0x01, 0x00, 0x92, -/* 00010590 */ 0x01, 0x02, 0x1A, 0x09, 0xAB, 0x00, 0x14, 0x03, 0x00, 0x17, 0x0D, 0x09, 0x6D, 0x00, 0x8D, 0x01, -/* 000105A0 */ 0x03, 0x1A, 0x04, 0x00, 0xA6, 0x1B, 0x14, 0x03, 0x00, 0x1A, 0x1B, 0x09, 0x5D, 0x00, 0xA6, 0x1A, -/* 000105B0 */ 0x15, 0x03, 0x00, 0x18, 0x1A, 0x09, 0x4C, 0x00, 0x8D, 0x04, 0x24, 0x1B, 0x05, 0x00, 0x6B, 0x1A, -/* 000105C0 */ 0x1B, 0x02, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x1B, 0x8D, 0x04, 0x06, 0x1C, 0x06, 0x00, 0x07, 0x03, -/* 000105D0 */ 0x00, 0x5A, 0x00, 0x08, 0x8D, 0x04, 0x1E, 0x1D, 0x07, 0x00, 0x5B, 0x01, 0x1D, 0x04, 0x00, 0x5B, -/* 000105E0 */ 0x02, 0x18, 0x04, 0x00, 0xEE, 0x03, 0x1C, 0x1C, 0x04, 0x00, 0x43, 0x1C, 0x1C, 0x0E, 0x5B, 0x01, -/* 000105F0 */ 0x1C, 0x03, 0x00, 0xF2, 0x02, 0x1A, 0x1A, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x92, 0x01, 0x03, -/* 00010600 */ 0x1A, 0x09, 0x04, 0x00, 0x92, 0x01, 0x03, 0x0F, 0x09, 0x36, 0x00, 0x14, 0x03, 0x00, 0x17, 0x10, -/* 00010610 */ 0x09, 0x2E, 0x00, 0xA6, 0x1A, 0x15, 0x03, 0x00, 0x18, 0x1A, 0x09, 0x24, 0x00, 0x15, 0x03, 0x00, -/* 00010620 */ 0x18, 0x11, 0x09, 0x1C, 0x00, 0x15, 0x03, 0x00, 0x18, 0x12, 0x09, 0x14, 0x00, 0x15, 0x03, 0x00, -/* 00010630 */ 0x18, 0x13, 0x09, 0x0C, 0x00, 0x15, 0x03, 0x00, 0x18, 0x14, 0x09, 0x04, 0x00, 0x92, 0x01, 0x04, -/* 00010640 */ 0x18, 0xA6, 0x00, 0x24, 0x00, 0x01, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, -/* 00010650 */ 0x00, 0x00, 0x00, 0x00, 0x14, 0x04, 0x00, 0x00, 0xFE, 0x83, 0x02, 0xFE, 0x14, 0x04, 0xFE, 0x39, -/* 00010660 */ 0x03, 0x0E, 0xFE, 0xB2, 0x04, 0x00, 0xFF, 0x5D, 0xF1, 0x01, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, -/* 00010670 */ 0x2A, 0x00, 0x82, 0x00, 0x09, 0x00, 0x2C, 0x00, 0x22, 0x00, 0x4C, 0x00, 0x18, 0x00, 0x4B, 0x00, -/* 00010680 */ 0x74, 0x00, 0x9F, 0x00, 0x18, 0x00, 0x49, 0x00, 0x0A, 0x00, 0x3B, 0x00, 0x4C, 0x00, 0xA9, 0x00, -/* 00010690 */ 0x07, 0x00, 0x4D, 0x00, 0x32, 0x00, 0xFF, 0x00, 0x06, 0x00, 0x41, 0x00, 0x00, 0xBF, 0x5C, 0x0A, -/* 000106A0 */ 0xC1, 0x63, 0xA8, 0x05, 0x00, 0xFE, 0xB2, 0x0A, 0x1E, 0xA0, 0x41, 0xC1, 0x00, 0xFE, 0xF1, 0x02, -/* 000106B0 */ 0xA5, 0xFF, 0xEE, 0xDF, 0x01, 0x00, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFF, 0xEE, -/* 000106C0 */ 0xDF, 0x01, 0x00, 0xFE, 0xE5, 0x08, 0xFE, 0xE5, 0x08, 0x01, 0x0C, 0x07, 0x0F, 0x06, 0x7A, 0x6D, -/* 000106D0 */ 0x02, 0x05, 0x08, 0x07, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x0E, 0x0F, 0x08, 0x01, 0x01, 0x05, -/* 000106E0 */ 0xFE, 0xC3, 0x04, 0x06, 0xFE, 0x5B, 0x03, 0x01, 0x02, 0xFE, 0xE7, 0x01, 0x4F, 0x07, 0x4F, 0x08, -/* 000106F0 */ 0x4F, 0x0B, 0x4F, 0x0C, 0x4F, 0x0D, 0x4F, 0x09, 0x4F, 0x0A, 0x8D, 0x01, 0x19, 0x10, 0x00, 0x00, -/* 00010700 */ 0x4B, 0x10, 0x0E, 0x19, 0x00, 0x10, 0x8D, 0x02, 0x03, 0x10, 0x01, 0x00, 0x60, 0x10, 0x10, 0x00, -/* 00010710 */ 0x0E, 0x0B, 0x00, 0x10, 0x8D, 0x01, 0x19, 0x00, 0x00, 0x00, 0x4B, 0x00, 0x09, 0xB2, 0x01, 0xA6, -/* 00010720 */ 0x10, 0x47, 0x07, 0x10, 0xA6, 0x10, 0x47, 0x08, 0x10, 0x8D, 0x02, 0x33, 0x10, 0x02, 0x00, 0x4B, -/* 00010730 */ 0x10, 0x0E, 0x90, 0x00, 0x10, 0x8D, 0x01, 0x0A, 0x10, 0x03, 0x00, 0x4B, 0x10, 0x07, 0x01, 0x00, -/* 00010740 */ 0x5A, 0x00, 0x02, 0xEE, 0x01, 0x10, 0x10, 0x00, 0x00, 0x47, 0x07, 0x10, 0x8D, 0x02, 0x03, 0x11, -/* 00010750 */ 0x01, 0x00, 0x6B, 0x10, 0x11, 0x01, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x11, 0x5B, 0x01, 0x07, 0x01, -/* 00010760 */ 0x00, 0xE0, 0x12, 0x00, 0x5B, 0x02, 0x12, 0x01, 0x00, 0xF2, 0x03, 0x10, 0x10, 0x01, 0x00, 0x00, -/* 00010770 */ 0x00, 0x01, 0x00, 0x47, 0x09, 0x10, 0x0E, 0x48, 0x00, 0x09, 0x96, 0x10, 0x09, 0x03, 0x00, 0x00, -/* 00010780 */ 0x47, 0x08, 0x10, 0x8D, 0x02, 0x06, 0x10, 0x04, 0x00, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x02, 0x8D, -/* 00010790 */ 0x02, 0x1D, 0x11, 0x05, 0x00, 0x5B, 0x01, 0x11, 0x02, 0x00, 0x5B, 0x02, 0x07, 0x02, 0x00, 0x47, -/* 000107A0 */ 0x11, 0x04, 0x01, 0x04, 0x01, 0x12, 0x08, 0x2F, 0x11, 0x11, 0x12, 0x2F, 0x11, 0x11, 0x05, 0x5B, -/* 000107B0 */ 0x03, 0x11, 0x02, 0x00, 0x5B, 0x04, 0x05, 0x02, 0x00, 0xEE, 0x05, 0x10, 0x10, 0x02, 0x00, 0x47, -/* 000107C0 */ 0x07, 0x10, 0x09, 0x50, 0x00, 0x8D, 0x02, 0x03, 0x11, 0x01, 0x00, 0x6B, 0x10, 0x11, 0x01, 0x07, -/* 000107D0 */ 0x03, 0x00, 0x5A, 0x00, 0x11, 0x8D, 0x01, 0x0A, 0x12, 0x03, 0x00, 0x4B, 0x12, 0x07, 0x01, 0x00, -/* 000107E0 */ 0x5A, 0x00, 0x02, 0xEE, 0x01, 0x12, 0x12, 0x04, 0x00, 0x5B, 0x01, 0x12, 0x03, 0x00, 0xE0, 0x12, -/* 000107F0 */ 0x01, 0x5B, 0x02, 0x12, 0x03, 0x00, 0xF2, 0x03, 0x10, 0x10, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, -/* 00010800 */ 0x47, 0x0A, 0x10, 0x96, 0x10, 0x0A, 0x03, 0x01, 0x00, 0x47, 0x07, 0x10, 0x96, 0x10, 0x0A, 0x06, -/* 00010810 */ 0x02, 0x00, 0x47, 0x08, 0x10, 0xA6, 0x10, 0x14, 0x03, 0x00, 0x08, 0x10, 0x09, 0x11, 0x00, 0x01, -/* 00010820 */ 0x34, 0x01, 0x01, 0x19, 0x07, 0x8D, 0x01, 0x19, 0x00, 0x00, 0x00, 0x4B, 0x00, 0x09, 0xA1, 0x00, -/* 00010830 */ 0xD5, 0x00, 0x10, 0x47, 0x0B, 0x10, 0x8D, 0x02, 0x30, 0x10, 0x06, 0x00, 0x96, 0x10, 0x10, 0x07, -/* 00010840 */ 0x03, 0x00, 0x47, 0x0C, 0x10, 0xA6, 0x10, 0x14, 0x03, 0x00, 0x0C, 0x10, 0x09, 0x27, 0x00, 0x07, -/* 00010850 */ 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x07, 0x05, 0x00, 0x5B, 0x02, 0x08, 0x05, 0x00, 0xEE, -/* 00010860 */ 0x03, 0x10, 0x0B, 0x05, 0x00, 0x01, 0x34, 0x01, 0x01, 0x19, 0x10, 0x8D, 0x01, 0x19, 0x00, 0x00, -/* 00010870 */ 0x00, 0x4B, 0x00, 0x09, 0x5B, 0x00, 0x96, 0x10, 0x0C, 0x08, 0x04, 0x00, 0x47, 0x0D, 0x10, 0xA6, -/* 00010880 */ 0x10, 0x15, 0x03, 0x00, 0x0D, 0x10, 0x09, 0x1F, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5B, -/* 00010890 */ 0x01, 0x07, 0x06, 0x00, 0x5B, 0x02, 0x0D, 0x06, 0x00, 0xEE, 0x03, 0x10, 0x0B, 0x06, 0x00, 0x01, -/* 000108A0 */ 0x34, 0x01, 0x01, 0x19, 0x10, 0x09, 0x1C, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, -/* 000108B0 */ 0x07, 0x07, 0x00, 0x5B, 0x02, 0x08, 0x07, 0x00, 0xEE, 0x03, 0x10, 0x0B, 0x07, 0x00, 0x01, 0x34, -/* 000108C0 */ 0x01, 0x01, 0x19, 0x10, 0x8D, 0x01, 0x19, 0x00, 0x00, 0x00, 0x4B, 0x00, 0x09, 0x02, 0x00, 0xA6, -/* 000108D0 */ 0x00, 0x24, 0x00, 0xFE, 0x61, 0x03, 0xFE, 0x83, 0x02, 0x28, 0xFE, 0xC4, 0x04, 0x00, 0x0E, 0xFE, -/* 000108E0 */ 0xC5, 0x04, 0x00, 0xFF, 0x04, 0xE0, 0x01, 0x00, 0x1B, 0x0E, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x3F, -/* 000108F0 */ 0x00, 0x0B, 0x00, 0x31, 0x00, 0x05, 0x00, 0x20, 0x00, 0x05, 0x00, 0x23, 0x00, 0x0C, 0x00, 0x7A, -/* 00010900 */ 0x00, 0x17, 0x00, 0x29, 0x00, 0x2A, 0x00, 0x6A, 0x00, 0x04, 0x00, 0xB8, 0x00, 0x09, 0x00, 0x26, -/* 00010910 */ 0x00, 0x42, 0x00, 0xC6, 0x00, 0x3E, 0x00, 0x5C, 0x00, 0x09, 0x00, 0x1F, 0x00, 0x09, 0x00, 0x29, -/* 00010920 */ 0x00, 0x0A, 0x00, 0x2B, 0x00, 0x06, 0x00, 0x2C, 0x00, 0x0B, 0x00, 0x8D, 0x00, 0x06, 0x00, 0x28, -/* 00010930 */ 0x01, 0x0F, 0x00, 0x56, 0x00, 0x0A, 0x00, 0x84, 0x00, 0x1C, 0x00, 0x54, 0x00, 0x0B, 0x00, 0x31, -/* 00010940 */ 0x00, 0x09, 0x00, 0x42, 0x00, 0x0A, 0x00, 0x31, 0x00, 0x1F, 0x00, 0x6B, 0x00, 0x1C, 0x00, 0x5B, -/* 00010950 */ 0x00, 0x0D, 0x00, 0x22, 0x00, 0x00, 0x5A, 0x09, 0x01, 0x00, 0xBF, 0x4C, 0x00, 0x01, 0x00, 0x88, -/* 00010960 */ 0x01, 0x00, 0xFE, 0xD0, 0x0A, 0x2C, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xC6, 0x04, 0xA6, 0xFF, 0x14, -/* 00010970 */ 0xE5, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFF, 0x14, 0xE5, 0x01, 0x00, 0xF9, -/* 00010980 */ 0xF9, 0x01, 0x04, 0x05, 0x08, 0x17, 0x15, 0x02, 0x01, 0x07, 0x06, 0xFE, 0x5B, 0x03, 0x05, 0xFE, -/* 00010990 */ 0xC3, 0x04, 0x05, 0xFE, 0xC7, 0x04, 0x53, 0x8D, 0x02, 0x33, 0x08, 0x00, 0x00, 0x4B, 0x08, 0x0E, -/* 000109A0 */ 0x23, 0x00, 0x08, 0x47, 0x00, 0x02, 0x01, 0x04, 0x01, 0x08, 0x05, 0x2F, 0x00, 0x00, 0x08, 0x2F, -/* 000109B0 */ 0x00, 0x00, 0x03, 0x01, 0x04, 0x01, 0x08, 0x06, 0x2F, 0x00, 0x00, 0x08, 0x2F, 0x00, 0x00, 0x02, -/* 000109C0 */ 0x09, 0x25, 0x00, 0x09, 0x20, 0x00, 0x47, 0x00, 0x02, 0x01, 0x04, 0x01, 0x08, 0x05, 0x2F, 0x00, -/* 000109D0 */ 0x00, 0x08, 0x2F, 0x00, 0x00, 0x04, 0x01, 0x04, 0x01, 0x08, 0x06, 0x2F, 0x00, 0x00, 0x08, 0x2F, -/* 000109E0 */ 0x00, 0x00, 0x02, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFF, 0x49, 0xE5, 0x01, 0x00, 0x04, -/* 000109F0 */ 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x2A, 0x00, 0x23, 0x00, 0x53, 0x00, 0x22, 0x00, 0x46, 0x00, -/* 00010A00 */ 0x00, 0x3F, 0x5D, 0x08, 0x01, 0x00, 0x8D, 0x05, 0x00, 0xFE, 0x9D, 0x0A, 0x32, 0xA0, 0x41, 0xD1, -/* 00010A10 */ 0x00, 0xA2, 0xFF, 0x0D, 0xDC, 0x01, 0x00, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFF, -/* 00010A20 */ 0x0D, 0xDC, 0x01, 0x00, 0xFE, 0x13, 0x03, 0xFE, 0x13, 0x03, 0x01, 0xFE, 0xC0, 0x04, 0x06, 0x04, -/* 00010A30 */ 0x07, 0x08, 0x1E, 0x1E, 0x02, 0x03, 0x06, 0x04, 0x05, 0x06, 0x07, 0x08, 0x79, 0x4F, 0x07, 0x94, -/* 00010A40 */ 0x02, 0x07, 0x8D, 0x02, 0x04, 0x07, 0x00, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x03, 0xCA, 0x08, -/* 00010A50 */ 0x5B, 0x01, 0x08, 0x00, 0x00, 0x5B, 0x02, 0x02, 0x00, 0x00, 0xEE, 0x03, 0x07, 0x07, 0x00, 0x00, -/* 00010A60 */ 0x94, 0x02, 0x07, 0x8D, 0x02, 0x06, 0x07, 0x01, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x8D, -/* 00010A70 */ 0x02, 0x16, 0x08, 0x02, 0x00, 0x5B, 0x01, 0x08, 0x01, 0x00, 0x8D, 0x02, 0x12, 0x08, 0x03, 0x00, -/* 00010A80 */ 0x07, 0x02, 0x00, 0x5A, 0x00, 0x03, 0x8D, 0x02, 0x2F, 0x09, 0x04, 0x00, 0x5B, 0x01, 0x09, 0x02, -/* 00010A90 */ 0x00, 0xEE, 0x02, 0x08, 0x08, 0x02, 0x00, 0x5B, 0x02, 0x08, 0x01, 0x00, 0xD3, 0x00, 0x08, 0x5B, -/* 00010AA0 */ 0x03, 0x08, 0x01, 0x00, 0xEE, 0x04, 0xFF, 0x07, 0x01, 0x00, 0x91, 0x02, 0x00, 0x05, 0x00, 0x09, -/* 00010AB0 */ 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFF, 0x23, 0xDC, 0x01, 0x00, 0x04, 0x05, 0x00, 0x00, 0x00, -/* 00010AC0 */ 0x21, 0x00, 0x31, 0x00, 0x47, 0x00, 0xB6, 0x02, 0x0A, 0x00, 0x15, 0x00, 0x00, 0xD1, 0x0A, 0x01, -/* 00010AD0 */ 0x00, 0xBF, 0x5D, 0x0E, 0x01, 0x00, 0x8D, 0x05, 0x00, 0xFE, 0x9F, 0x0A, 0x6B, 0xA2, 0x41, 0xD1, -/* 00010AE0 */ 0x00, 0xA3, 0xFF, 0xB7, 0xDC, 0x01, 0x00, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, -/* 00010AF0 */ 0xB7, 0xDC, 0x01, 0x00, 0xFE, 0x48, 0x02, 0xFE, 0x48, 0x02, 0x40, 0x02, 0xFE, 0xC1, 0x04, 0xFE, -/* 00010B00 */ 0xC2, 0x04, 0x07, 0x04, 0x08, 0x08, 0x25, 0x25, 0x03, 0x01, 0x01, 0x03, 0x08, 0x05, 0x06, 0x07, -/* 00010B10 */ 0x07, 0x08, 0x97, 0x4F, 0x08, 0x94, 0x02, 0x08, 0x4F, 0x08, 0x94, 0x03, 0x08, 0x8D, 0x03, 0x2F, -/* 00010B20 */ 0x08, 0x00, 0x00, 0x96, 0x08, 0x08, 0x04, 0x00, 0x00, 0x94, 0x02, 0x08, 0x8D, 0x03, 0x04, 0x08, -/* 00010B30 */ 0x01, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x03, 0xCA, 0x09, 0x5B, 0x01, 0x09, 0x00, 0x00, 0x5B, -/* 00010B40 */ 0x02, 0x02, 0x00, 0x00, 0xEE, 0x03, 0x08, 0x08, 0x00, 0x00, 0x94, 0x03, 0x08, 0x8D, 0x03, 0x06, -/* 00010B50 */ 0x08, 0x02, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x8D, 0x03, 0x16, 0x09, 0x03, 0x00, 0x5B, -/* 00010B60 */ 0x01, 0x09, 0x01, 0x00, 0x8D, 0x03, 0x12, 0x09, 0x04, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x03, -/* 00010B70 */ 0x91, 0x02, 0x0A, 0x05, 0x00, 0x5B, 0x01, 0x0A, 0x02, 0x00, 0xEE, 0x02, 0x09, 0x09, 0x02, 0x00, -/* 00010B80 */ 0x5B, 0x02, 0x09, 0x01, 0x00, 0xD3, 0x00, 0x09, 0x5B, 0x03, 0x09, 0x01, 0x00, 0xEE, 0x04, 0xFF, -/* 00010B90 */ 0x08, 0x01, 0x00, 0x8D, 0x01, 0x02, 0x08, 0x06, 0x00, 0x4B, 0x08, 0x91, 0x03, 0x09, 0x07, 0x00, -/* 00010BA0 */ 0x9B, 0x09, 0x08, 0x04, 0x00, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFF, 0xD7, 0xDC, 0x01, 0x00, 0x05, -/* 00010BB0 */ 0x0A, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x56, 0x00, 0x21, 0x00, 0x45, 0x00, 0x46, 0x00, 0x58, 0x01, -/* 00010BC0 */ 0x15, 0x00, 0x34, 0x00, 0x00, 0xC9, 0x0B, 0x01, 0x00, 0xBF, 0x4C, 0x06, 0x01, 0x00, 0x88, 0x01, -/* 00010BD0 */ 0x00, 0xFE, 0xA3, 0x0A, 0x68, 0xA2, 0x41, 0xD1, 0x00, 0xA4, 0xFF, 0xCE, 0xDD, 0x01, 0x00, 0xFF, -/* 00010BE0 */ 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0xCE, 0xDD, 0x01, 0x00, 0xEC, 0xEC, 0x41, 0x04, 0x03, -/* 00010BF0 */ 0x06, 0x0D, 0x0C, 0x04, 0x01, 0x01, 0x02, 0x05, 0x06, 0xFE, 0x5B, 0x03, 0x2D, 0x4F, 0x04, 0x8D, -/* 00010C00 */ 0x01, 0x02, 0x06, 0x00, 0x00, 0x4B, 0x06, 0x96, 0x06, 0x06, 0x03, 0x00, 0x00, 0x47, 0x04, 0x06, -/* 00010C10 */ 0x15, 0x03, 0x00, 0x04, 0x02, 0x09, 0x0E, 0x00, 0x8D, 0x01, 0x03, 0x06, 0x01, 0x00, 0x4B, 0x06, -/* 00010C20 */ 0x9B, 0x03, 0x06, 0x04, 0x00, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFF, 0xF5, 0xDD, 0x01, 0x00, 0x04, -/* 00010C30 */ 0x02, 0x00, 0x00, 0x00, 0x11, 0x00, 0x48, 0x00, 0x08, 0x00, 0x2D, 0x00, 0x10, 0x00, 0x4F, 0x00, -/* 00010C40 */ 0x00, 0xBF, 0x5C, 0x08, 0x01, 0x00, 0x88, 0x01, 0x00, 0xFE, 0x78, 0x0A, 0x08, 0xA2, 0x41, 0xC3, -/* 00010C50 */ 0x00, 0xFE, 0xBF, 0x04, 0xA1, 0xFF, 0xE5, 0xD1, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, -/* 00010C60 */ 0x02, 0xFF, 0xE5, 0xD1, 0x01, 0x00, 0x96, 0x96, 0x01, 0x05, 0x03, 0x06, 0x05, 0x0F, 0x0F, 0x02, -/* 00010C70 */ 0x01, 0x02, 0x05, 0x08, 0x35, 0x59, 0x06, 0xB2, 0x04, 0x06, 0x8D, 0x02, 0x2D, 0x06, 0x00, 0x00, -/* 00010C80 */ 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x04, 0x00, 0x00, 0x8D, 0x01, 0x18, 0x07, 0x01, -/* 00010C90 */ 0x00, 0x4B, 0x07, 0x5B, 0x02, 0x07, 0x00, 0x00, 0x5B, 0x03, 0x03, 0x00, 0x00, 0xEE, 0x04, 0x00, -/* 00010CA0 */ 0x06, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFF, 0x23, 0xD2, 0x01, 0x00, 0x02, -/* 00010CB0 */ 0x05, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x57, 0x00, 0x00, 0xBF, 0x5C, 0x08, 0x01, 0x00, 0x88, 0x01, -/* 00010CC0 */ 0x00, 0xFE, 0x72, 0x0A, 0x08, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0xBE, 0x04, 0xA0, 0xFF, 0x3F, 0xD0, -/* 00010CD0 */ 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x02, 0xFF, 0x3F, 0xD0, 0x01, 0x00, 0xCC, 0xCC, -/* 00010CE0 */ 0x01, 0x06, 0x03, 0x07, 0x06, 0x13, 0x12, 0x02, 0x01, 0x02, 0x06, 0x08, 0x44, 0x59, 0x07, 0xB2, -/* 00010CF0 */ 0x05, 0x07, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA6, 0x07, 0x47, 0x04, 0x07, 0x8D, 0x02, 0x2C, 0x07, -/* 00010D00 */ 0x00, 0x00, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x05, 0x00, 0x00, 0x8D, 0x01, 0x16, -/* 00010D10 */ 0x08, 0x01, 0x00, 0x4B, 0x08, 0x5B, 0x02, 0x08, 0x00, 0x00, 0x5B, 0x03, 0x03, 0x00, 0x00, 0x5B, -/* 00010D20 */ 0x04, 0x04, 0x00, 0x00, 0xEE, 0x05, 0x00, 0x07, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, -/* 00010D30 */ 0x00, 0xFF, 0x7D, 0xD0, 0x01, 0x00, 0x03, 0x05, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x23, 0x00, 0x33, -/* 00010D40 */ 0x00, 0x6A, 0x00, 0x00, 0xBF, 0x5C, 0x08, 0x01, 0x00, 0x88, 0x01, 0x00, 0xFE, 0x6C, 0x0A, 0x08, -/* 00010D50 */ 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0xBD, 0x04, 0x9F, 0xFF, 0x65, 0xCE, 0x01, 0x00, 0xFF, 0x00, 0x10, -/* 00010D60 */ 0x01, 0x00, 0x03, 0x02, 0xFF, 0x65, 0xCE, 0x01, 0x00, 0xC8, 0xC8, 0x01, 0x06, 0x03, 0x07, 0x06, -/* 00010D70 */ 0x13, 0x12, 0x02, 0x01, 0x02, 0x06, 0x08, 0x44, 0x59, 0x07, 0xB2, 0x05, 0x07, 0x15, 0x05, 0x00, -/* 00010D80 */ 0x04, 0x02, 0xA6, 0x07, 0x47, 0x04, 0x07, 0x8D, 0x02, 0x2C, 0x07, 0x00, 0x00, 0x07, 0x05, 0x00, -/* 00010D90 */ 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x05, 0x00, 0x00, 0x8D, 0x01, 0x14, 0x08, 0x01, 0x00, 0x4B, 0x08, -/* 00010DA0 */ 0x5B, 0x02, 0x08, 0x00, 0x00, 0x5B, 0x03, 0x03, 0x00, 0x00, 0x5B, 0x04, 0x04, 0x00, 0x00, 0xEE, -/* 00010DB0 */ 0x05, 0x00, 0x07, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFF, 0xA1, 0xCE, 0x01, -/* 00010DC0 */ 0x00, 0x03, 0x05, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x23, 0x00, 0x33, 0x00, 0x68, 0x00, 0x00, 0xBF, -/* 00010DD0 */ 0x5C, 0x08, 0x01, 0x00, 0x88, 0x01, 0x00, 0xFE, 0x66, 0x0A, 0x08, 0xA2, 0x41, 0xC3, 0x00, 0xFE, -/* 00010DE0 */ 0xBC, 0x04, 0x9E, 0xFF, 0x9B, 0xCC, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x02, 0xFF, -/* 00010DF0 */ 0x9B, 0xCC, 0x01, 0x00, 0xC0, 0xC0, 0x01, 0x06, 0x03, 0x07, 0x06, 0x13, 0x12, 0x02, 0x01, 0x02, -/* 00010E00 */ 0x06, 0x08, 0x44, 0x59, 0x07, 0xB2, 0x05, 0x07, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA6, 0x07, 0x47, -/* 00010E10 */ 0x04, 0x07, 0x8D, 0x02, 0x2C, 0x07, 0x00, 0x00, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, -/* 00010E20 */ 0x05, 0x00, 0x00, 0x8D, 0x01, 0x12, 0x08, 0x01, 0x00, 0x4B, 0x08, 0x5B, 0x02, 0x08, 0x00, 0x00, -/* 00010E30 */ 0x5B, 0x03, 0x03, 0x00, 0x00, 0x5B, 0x04, 0x04, 0x00, 0x00, 0xEE, 0x05, 0x00, 0x07, 0x00, 0x00, -/* 00010E40 */ 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFF, 0xD3, 0xCC, 0x01, 0x00, 0x03, 0x05, 0x00, 0x00, -/* 00010E50 */ 0x00, 0x0A, 0x00, 0x23, 0x00, 0x33, 0x00, 0x64, 0x00, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, -/* 00010E60 */ 0x01, 0x00, 0xFE, 0x48, 0x0A, 0x1D, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x4C, 0x03, 0x9D, 0xFF, 0xFB, -/* 00010E70 */ 0xC6, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFF, 0xFB, 0xC6, 0x01, 0x00, 0xFE, -/* 00010E80 */ 0x60, 0x03, 0xFE, 0x60, 0x03, 0x01, 0x08, 0x08, 0x0C, 0x0A, 0x52, 0x4F, 0x02, 0x09, 0x08, 0x04, -/* 00010E90 */ 0x04, 0x04, 0x04, 0x0B, 0x08, 0x06, 0xFE, 0xF5, 0x03, 0x05, 0xFE, 0xBC, 0x03, 0x05, 0xFE, 0xFF, -/* 00010EA0 */ 0x03, 0x06, 0xFE, 0x00, 0x04, 0x05, 0xFE, 0xBB, 0x04, 0xFE, 0x5F, 0x01, 0xA6, 0x0A, 0x8D, 0x01, -/* 00010EB0 */ 0x07, 0x0C, 0x00, 0x00, 0x4B, 0x0C, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x08, 0x00, -/* 00010EC0 */ 0x00, 0xEE, 0x02, 0x0C, 0x0C, 0x00, 0x00, 0x47, 0x08, 0x0C, 0x2C, 0x0C, 0x09, 0x15, 0x03, 0x00, -/* 00010ED0 */ 0x0C, 0x03, 0x09, 0x84, 0x00, 0x60, 0x0C, 0x09, 0x00, 0x47, 0x0A, 0x0C, 0x2C, 0x0C, 0x0A, 0x15, -/* 00010EE0 */ 0x03, 0x00, 0x0C, 0x03, 0x09, 0x72, 0x00, 0x8D, 0x02, 0x24, 0x0D, 0x01, 0x00, 0x6B, 0x0C, 0x0D, -/* 00010EF0 */ 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0D, 0x5B, 0x01, 0x0A, 0x01, 0x00, 0xF2, 0x02, 0x0C, 0x0C, -/* 00010F00 */ 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x0A, 0x0C, 0x15, 0x03, 0x00, 0x0A, 0x04, 0x09, 0x48, -/* 00010F10 */ 0x00, 0x15, 0x03, 0x00, 0x0A, 0x05, 0x09, 0x40, 0x00, 0x8D, 0x02, 0x03, 0x0D, 0x02, 0x00, 0x6B, -/* 00010F20 */ 0x0C, 0x0D, 0x02, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x0D, 0x8D, 0x02, 0x0B, 0x0E, 0x03, 0x00, 0x07, -/* 00010F30 */ 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x0A, 0x03, 0x00, 0xEE, 0x02, 0x0E, 0x0E, 0x03, 0x00, -/* 00010F40 */ 0x5B, 0x01, 0x0E, 0x02, 0x00, 0x5B, 0x02, 0x06, 0x02, 0x00, 0x5B, 0x03, 0x07, 0x02, 0x00, 0xF2, -/* 00010F50 */ 0x04, 0xFF, 0x0C, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x2C, 0x0C, 0x0A, 0x14, 0x08, 0x00, 0x0C, -/* 00010F60 */ 0x03, 0x14, 0x03, 0x00, 0x0A, 0x05, 0x09, 0x60, 0x00, 0x8D, 0x01, 0x08, 0x0C, 0x04, 0x00, 0x4B, -/* 00010F70 */ 0x0C, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x08, 0x04, 0x00, 0x8D, 0x02, 0x26, 0x0D, -/* 00010F80 */ 0x05, 0x00, 0x5B, 0x02, 0x0D, 0x04, 0x00, 0x8D, 0x02, 0x03, 0x0E, 0x02, 0x00, 0x6B, 0x0D, 0x0E, -/* 00010F90 */ 0x03, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0E, 0x8D, 0x02, 0x2B, 0x0F, 0x06, 0x00, 0x07, 0x01, 0x00, -/* 00010FA0 */ 0x5A, 0x00, 0x02, 0xEE, 0x01, 0x0F, 0x0F, 0x06, 0x00, 0x5B, 0x01, 0x0F, 0x05, 0x00, 0xF2, 0x02, -/* 00010FB0 */ 0x0D, 0x0D, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x5B, 0x03, 0x0D, 0x04, 0x00, 0xEE, 0x04, 0x00, -/* 00010FC0 */ 0x0C, 0x04, 0x00, 0x09, 0x43, 0x00, 0x09, 0x3E, 0x00, 0x8D, 0x01, 0x08, 0x0C, 0x04, 0x00, 0x4B, -/* 00010FD0 */ 0x0C, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x08, 0x07, 0x00, 0x8D, 0x02, 0x27, 0x0D, -/* 00010FE0 */ 0x07, 0x00, 0x5B, 0x02, 0x0D, 0x07, 0x00, 0x8D, 0x02, 0x2B, 0x0D, 0x06, 0x00, 0x07, 0x01, 0x00, -/* 00010FF0 */ 0x5A, 0x00, 0x02, 0xEE, 0x01, 0x0D, 0x0D, 0x08, 0x00, 0x5B, 0x03, 0x0D, 0x07, 0x00, 0xEE, 0x04, -/* 00011000 */ 0x00, 0x0C, 0x07, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xF8, 0x01, 0xFE, 0x37, -/* 00011010 */ 0x03, 0xFE, 0x8F, 0x02, 0xFE, 0xD8, 0x01, 0xFF, 0x36, 0xC7, 0x01, 0x00, 0x0B, 0x02, 0x00, 0x00, -/* 00011020 */ 0x00, 0x1C, 0x00, 0x34, 0x00, 0x0B, 0x00, 0x32, 0x00, 0x07, 0x00, 0x2E, 0x00, 0x0B, 0x00, 0x36, -/* 00011030 */ 0x00, 0x22, 0x00, 0x37, 0x00, 0x10, 0x00, 0x4A, 0x00, 0x40, 0x00, 0x96, 0x00, 0x10, 0x00, 0x4C, -/* 00011040 */ 0x00, 0x60, 0x00, 0x93, 0x00, 0x40, 0x00, 0x64, 0x00, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, -/* 00011050 */ 0x01, 0x00, 0xFE, 0x3A, 0x0A, 0x28, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xEE, 0x02, 0x9C, 0xFF, 0x27, -/* 00011060 */ 0xC5, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFF, 0x27, 0xC5, 0x01, 0x00, 0xFE, -/* 00011070 */ 0x8C, 0x01, 0xFE, 0x8C, 0x01, 0x01, 0x07, 0x05, 0x0A, 0x03, 0x25, 0x24, 0x02, 0x04, 0x02, 0x03, -/* 00011080 */ 0x03, 0x03, 0x03, 0x09, 0x07, 0x05, 0xFE, 0x3C, 0x03, 0x08, 0x9F, 0x14, 0x0A, 0x00, 0x05, 0x02, -/* 00011090 */ 0xA6, 0x0A, 0x14, 0x03, 0x00, 0x05, 0x0A, 0x09, 0x1F, 0x00, 0x8D, 0x02, 0x03, 0x0B, 0x00, 0x00, -/* 000110A0 */ 0x6B, 0x0A, 0x0B, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0B, 0x5B, 0x01, 0x06, 0x00, 0x00, 0xF2, -/* 000110B0 */ 0x02, 0xFF, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8D, 0x02, 0x03, 0x0B, 0x00, 0x00, 0x6B, -/* 000110C0 */ 0x0A, 0x0B, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0B, 0x5B, 0x01, 0x05, 0x01, 0x00, 0xF2, 0x02, -/* 000110D0 */ 0x0A, 0x0A, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x08, 0x0A, 0x0E, 0x0C, 0x00, 0x08, 0x60, -/* 000110E0 */ 0x0A, 0x08, 0x02, 0x15, 0x03, 0x00, 0x0A, 0x03, 0x09, 0x1F, 0x00, 0x8D, 0x02, 0x03, 0x0B, 0x00, -/* 000110F0 */ 0x00, 0x6B, 0x0A, 0x0B, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0B, 0x5B, 0x01, 0x06, 0x02, 0x00, -/* 00011100 */ 0xF2, 0x02, 0xFF, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x8D, 0x01, 0x07, 0x0A, 0x01, 0x00, -/* 00011110 */ 0x4B, 0x0A, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x07, 0x03, 0x00, 0xEE, 0x02, 0x00, -/* 00011120 */ 0x0A, 0x03, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x8C, 0x02, 0xFE, 0xEF, 0x01, -/* 00011130 */ 0xFE, 0xF6, 0x01, 0xFF, 0x58, 0xC5, 0x01, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x37, -/* 00011140 */ 0x00, 0x1F, 0x00, 0x40, 0x00, 0x22, 0x00, 0x38, 0x00, 0x10, 0x00, 0x3F, 0x00, 0x1F, 0x00, 0x40, -/* 00011150 */ 0x00, 0x1E, 0x00, 0x2C, 0x00, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x2D, -/* 00011160 */ 0x0A, 0x24, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xED, 0x02, 0x9B, 0xFF, 0x63, 0xC3, 0x01, 0x00, 0xFF, -/* 00011170 */ 0x00, 0x10, 0x01, 0x00, 0x05, 0x05, 0xFF, 0x63, 0xC3, 0x01, 0x00, 0xFE, 0x9A, 0x01, 0xFE, 0x9A, -/* 00011180 */ 0x01, 0x01, 0x08, 0x05, 0x0B, 0x04, 0x25, 0x24, 0x02, 0x04, 0x02, 0x03, 0x03, 0x03, 0x03, 0x0A, -/* 00011190 */ 0x07, 0x05, 0xFE, 0x3C, 0x03, 0x08, 0xA2, 0x14, 0x0A, 0x00, 0x05, 0x02, 0xA6, 0x0B, 0x14, 0x03, -/* 000111A0 */ 0x00, 0x05, 0x0B, 0x09, 0x1F, 0x00, 0x8D, 0x02, 0x03, 0x0C, 0x00, 0x00, 0x6B, 0x0B, 0x0C, 0x00, -/* 000111B0 */ 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x06, 0x00, 0x00, 0xF2, 0x02, 0xFF, 0x0B, 0x00, -/* 000111C0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x8D, 0x02, 0x03, 0x0C, 0x00, 0x00, 0x6B, 0x0B, 0x0C, 0x01, 0x07, -/* 000111D0 */ 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x05, 0x01, 0x00, 0xF2, 0x02, 0x0B, 0x0B, 0x01, 0x00, -/* 000111E0 */ 0x00, 0x00, 0x01, 0x00, 0x47, 0x09, 0x0B, 0x0E, 0x0C, 0x00, 0x09, 0x60, 0x0B, 0x09, 0x02, 0x15, -/* 000111F0 */ 0x03, 0x00, 0x0B, 0x03, 0x09, 0x1F, 0x00, 0x8D, 0x02, 0x03, 0x0C, 0x00, 0x00, 0x6B, 0x0B, 0x0C, -/* 00011200 */ 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x06, 0x02, 0x00, 0xF2, 0x02, 0xFF, 0x0B, -/* 00011210 */ 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x8D, 0x02, 0x2E, 0x0B, 0x01, 0x00, 0x07, 0x03, 0x00, 0x5A, -/* 00011220 */ 0x00, 0x04, 0x5B, 0x01, 0x07, 0x03, 0x00, 0x5B, 0x02, 0x08, 0x03, 0x00, 0xEE, 0x03, 0x00, 0x0B, -/* 00011230 */ 0x03, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x8C, 0x02, 0xFE, 0xEF, 0x01, 0xFE, -/* 00011240 */ 0xF6, 0x01, 0xFF, 0x9D, 0xC3, 0x01, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x37, 0x00, -/* 00011250 */ 0x1F, 0x00, 0x40, 0x00, 0x22, 0x00, 0x38, 0x00, 0x10, 0x00, 0x3F, 0x00, 0x1F, 0x00, 0x40, 0x00, -/* 00011260 */ 0x21, 0x00, 0x31, 0x00, 0x00, 0x3F, 0x5D, 0x18, 0xC1, 0x13, 0x8D, 0x25, 0x00, 0xFE, 0x1A, 0x0A, -/* 00011270 */ 0x04, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x74, 0x03, 0x99, 0xFF, 0xCE, 0xBF, 0x01, 0x00, 0x01, 0xFF, -/* 00011280 */ 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFF, 0xCE, 0xBF, 0x01, 0x00, 0xFE, 0x6F, 0x03, 0xFE, 0x6F, -/* 00011290 */ 0x03, 0x04, 0xFE, 0xF9, 0x03, 0xFE, 0xB8, 0x04, 0xFE, 0xB9, 0x04, 0xFE, 0xBA, 0x04, 0x09, 0x0A, -/* 000112A0 */ 0x10, 0x05, 0x20, 0x20, 0x02, 0x02, 0x01, 0x05, 0x03, 0x03, 0x03, 0x03, 0x01, 0x0D, 0x0E, 0x0F, -/* 000112B0 */ 0x01, 0x00, 0x08, 0x06, 0xFE, 0x01, 0x04, 0x06, 0xFE, 0x40, 0x03, 0x06, 0xFE, 0x42, 0x03, 0x0C, -/* 000112C0 */ 0x06, 0xFE, 0x44, 0x03, 0x07, 0x8B, 0x94, 0x04, 0x0B, 0x94, 0x05, 0x0C, 0xCD, 0x10, 0x00, 0x00, -/* 000112D0 */ 0x00, 0x94, 0x02, 0x10, 0x94, 0x03, 0x02, 0x8D, 0x02, 0x06, 0x10, 0x00, 0x00, 0x07, 0x04, 0x00, -/* 000112E0 */ 0x5A, 0x00, 0x03, 0x8D, 0x02, 0x16, 0x11, 0x01, 0x00, 0x5B, 0x01, 0x11, 0x00, 0x00, 0x5B, 0x02, -/* 000112F0 */ 0x0A, 0x00, 0x00, 0xD3, 0x00, 0x11, 0x5B, 0x03, 0x11, 0x00, 0x00, 0xEE, 0x04, 0xFF, 0x10, 0x00, -/* 00011300 */ 0x00, 0x8D, 0x02, 0x15, 0x10, 0x02, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x91, 0x02, 0x11, -/* 00011310 */ 0x03, 0x00, 0x5B, 0x01, 0x11, 0x01, 0x00, 0x5B, 0x02, 0x04, 0x01, 0x00, 0xCB, 0x00, 0x00, 0x00, -/* 00011320 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x91, 0x03, 0x12, 0x04, 0x00, 0x79, 0x12, -/* 00011330 */ 0x11, 0x00, 0x79, 0x07, 0x11, 0x01, 0x79, 0x07, 0x11, 0x02, 0x5B, 0x03, 0x11, 0x01, 0x00, 0xEE, -/* 00011340 */ 0x04, 0xFF, 0x10, 0x01, 0x00, 0x91, 0x02, 0x00, 0x03, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, -/* 00011350 */ 0x00, 0x01, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 00011360 */ 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0xFE, 0x83, 0x01, 0xFE, -/* 00011370 */ 0x82, 0x01, 0xFE, 0x81, 0x01, 0xFF, 0x21, 0xC0, 0x01, 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 0x08, -/* 00011380 */ 0x00, 0x19, 0x00, 0x03, 0x00, 0x17, 0x00, 0x2A, 0x00, 0x70, 0x02, 0x44, 0x00, 0x68, 0x00, 0x0A, -/* 00011390 */ 0x00, 0x13, 0x00, 0x00, 0x98, 0x13, 0x01, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x53, 0xA8, 0x21, 0x00, -/* 000113A0 */ 0xFE, 0x1D, 0x0A, 0x41, 0xB2, 0x41, 0xD1, 0x00, 0x9A, 0xFF, 0x8A, 0xC0, 0x01, 0x00, 0xFF, 0x00, -/* 000113B0 */ 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0x8A, 0xC0, 0x01, 0x00, 0xFE, 0x2C, 0x02, 0xFE, 0x2C, 0x02, -/* 000113C0 */ 0x45, 0x08, 0x0B, 0x0F, 0x06, 0x2F, 0x2E, 0x03, 0x03, 0x07, 0x05, 0x05, 0x05, 0x05, 0x01, 0x01, -/* 000113D0 */ 0x0E, 0x0F, 0x08, 0x06, 0xFE, 0x40, 0x03, 0x06, 0xFE, 0x42, 0x03, 0x0C, 0x06, 0xFE, 0x44, 0x03, -/* 000113E0 */ 0x06, 0xFE, 0x43, 0x03, 0x0B, 0x07, 0x01, 0x01, 0xC3, 0xA6, 0x0D, 0xE5, 0x9F, 0x00, 0x8D, 0x03, -/* 000113F0 */ 0x29, 0x10, 0x00, 0x00, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x0B, 0x00, 0x00, 0x8D, -/* 00011400 */ 0x01, 0x04, 0x11, 0x01, 0x00, 0x5B, 0x02, 0x11, 0x00, 0x00, 0xA6, 0x11, 0x5B, 0x03, 0x11, 0x00, -/* 00011410 */ 0x00, 0x8D, 0x01, 0x05, 0x11, 0x02, 0x00, 0x5B, 0x04, 0x11, 0x00, 0x00, 0xEE, 0x05, 0x10, 0x10, -/* 00011420 */ 0x00, 0x00, 0x47, 0x0D, 0x10, 0x60, 0x10, 0x0D, 0x00, 0x0E, 0x5C, 0x00, 0x10, 0x8D, 0x03, 0x15, -/* 00011430 */ 0x10, 0x03, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8D, 0x01, 0x02, 0x11, 0x04, 0x00, 0x5B, -/* 00011440 */ 0x01, 0x11, 0x01, 0x00, 0x8D, 0x01, 0x03, 0x11, 0x05, 0x00, 0x5B, 0x02, 0x11, 0x01, 0x00, 0xCB, -/* 00011450 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x60, 0x12, 0x0D, 0x00, -/* 00011460 */ 0x79, 0x12, 0x11, 0x01, 0x79, 0x05, 0x11, 0x02, 0x79, 0x05, 0x11, 0x03, 0x79, 0x08, 0x11, 0x04, -/* 00011470 */ 0x5B, 0x03, 0x11, 0x01, 0x00, 0xEE, 0x04, 0xFF, 0x10, 0x01, 0x00, 0x8D, 0x01, 0x03, 0x10, 0x05, -/* 00011480 */ 0x00, 0x2F, 0x10, 0x10, 0x0A, 0x92, 0x01, 0x03, 0x10, 0xE9, 0x09, 0x1B, 0x00, 0xE7, 0x0C, 0x06, -/* 00011490 */ 0x8D, 0x03, 0x22, 0x10, 0x06, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x0C, 0x02, -/* 000114A0 */ 0x00, 0xEE, 0x02, 0xFF, 0x10, 0x02, 0x00, 0xE9, 0xA6, 0x00, 0x24, 0x00, 0x01, 0x18, 0x00, 0x00, -/* 000114B0 */ 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, -/* 000114C0 */ 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0xFE, 0xF7, 0x01, 0xFE, 0x83, -/* 000114D0 */ 0x01, 0xFE, 0x82, 0x01, 0xFE, 0x81, 0x01, 0xFE, 0x80, 0x01, 0xFF, 0xC0, 0xC0, 0x01, 0x00, 0x07, -/* 000114E0 */ 0x05, 0x00, 0x00, 0x00, 0x37, 0x00, 0x5E, 0x00, 0x08, 0x00, 0x2B, 0x00, 0x4E, 0x00, 0x8D, 0x00, -/* 000114F0 */ 0x14, 0x00, 0x33, 0x00, 0x01, 0x00, 0x1D, 0x00, 0x1A, 0x00, 0x8F, 0x00, 0x00, 0x3F, 0x5D, 0x19, -/* 00011500 */ 0xC1, 0x03, 0x8D, 0x05, 0x00, 0xFE, 0xF6, 0x09, 0x04, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x73, 0x03, -/* 00011510 */ 0x97, 0xFF, 0x97, 0xBB, 0x01, 0x00, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0x97, -/* 00011520 */ 0xBB, 0x01, 0x00, 0xFE, 0x31, 0x04, 0xFE, 0x31, 0x04, 0x01, 0xFE, 0xB6, 0x04, 0x08, 0x05, 0x0A, -/* 00011530 */ 0x05, 0x2C, 0x29, 0x02, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x07, 0x08, 0x09, 0x06, -/* 00011540 */ 0xFE, 0xF5, 0x03, 0x06, 0xFE, 0xAD, 0x03, 0x08, 0xB3, 0x4F, 0x06, 0x4F, 0x0A, 0x94, 0x02, 0x0A, -/* 00011550 */ 0x2C, 0x0A, 0x05, 0x14, 0x03, 0x00, 0x0A, 0x02, 0x09, 0x08, 0x00, 0xCD, 0x00, 0x00, 0x00, 0x00, -/* 00011560 */ 0x09, 0x97, 0x00, 0x2C, 0x0A, 0x05, 0x14, 0x03, 0x00, 0x0A, 0x03, 0x09, 0x0C, 0x00, 0xCD, 0x0A, -/* 00011570 */ 0x01, 0x01, 0x00, 0x9F, 0x00, 0x05, 0x0A, 0x47, 0x05, 0x0A, 0x8D, 0x02, 0x24, 0x0B, 0x00, 0x00, -/* 00011580 */ 0x6B, 0x0A, 0x0B, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0B, 0x5B, 0x01, 0x05, 0x00, 0x00, 0xF2, -/* 00011590 */ 0x02, 0x0A, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x05, 0x0A, 0x8D, 0x02, 0x24, 0x0B, -/* 000115A0 */ 0x00, 0x00, 0x6B, 0x0A, 0x0B, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0B, 0xA5, 0x0C, 0x05, 0x02, -/* 000115B0 */ 0x00, 0x00, 0x5B, 0x01, 0x0C, 0x01, 0x00, 0xF2, 0x02, 0x0A, 0x0A, 0x01, 0x00, 0x00, 0x00, 0x01, -/* 000115C0 */ 0x00, 0x47, 0x06, 0x0A, 0xCD, 0x0A, 0x00, 0x02, 0x00, 0x94, 0x02, 0x0A, 0x8D, 0x02, 0x25, 0x0A, -/* 000115D0 */ 0x01, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x05, 0x02, 0x00, 0x5B, 0x02, 0x06, -/* 000115E0 */ 0x02, 0x00, 0xD3, 0x00, 0x0B, 0x5B, 0x03, 0x0B, 0x02, 0x00, 0xEE, 0x04, 0xFF, 0x0A, 0x02, 0x00, -/* 000115F0 */ 0x91, 0x02, 0x00, 0x02, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x36, 0x03, 0xFE, -/* 00011600 */ 0x3A, 0x03, 0xC1, 0xFF, 0xCA, 0xBB, 0x01, 0x00, 0x0A, 0x07, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x32, -/* 00011610 */ 0x00, 0x08, 0x00, 0x1E, 0x00, 0x0B, 0x00, 0x2F, 0x00, 0x0C, 0x00, 0x28, 0x00, 0x22, 0x00, 0x2E, -/* 00011620 */ 0x00, 0x28, 0x00, 0x70, 0x00, 0x08, 0x00, 0x18, 0x00, 0x24, 0x00, 0x8F, 0x02, 0x0A, 0x00, 0x11, -/* 00011630 */ 0x00, 0x00, 0x36, 0x16, 0x01, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x05, -/* 00011640 */ 0x0A, 0x2A, 0xA2, 0x41, 0xD1, 0x00, 0x98, 0xFF, 0x49, 0xBD, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, -/* 00011650 */ 0x00, 0x02, 0x02, 0xFF, 0x49, 0xBD, 0x01, 0x00, 0xFE, 0x61, 0x02, 0xFE, 0x61, 0x02, 0x41, 0x06, -/* 00011660 */ 0x08, 0x0B, 0x06, 0x4A, 0x48, 0x03, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x0A, 0x06, 0xFE, 0xAD, -/* 00011670 */ 0x03, 0x06, 0xFE, 0xF6, 0x03, 0x07, 0x05, 0xFE, 0xB7, 0x04, 0x08, 0x01, 0xFF, 0xFE, 0x47, 0x01, -/* 00011680 */ 0x4F, 0x09, 0x2C, 0x0B, 0x08, 0x15, 0x03, 0x00, 0x0B, 0x02, 0x09, 0x08, 0x00, 0x2C, 0x0B, 0x08, -/* 00011690 */ 0x15, 0x08, 0x00, 0x0B, 0x03, 0x14, 0x03, 0x00, 0x08, 0x04, 0x09, 0x1F, 0x00, 0x8D, 0x03, 0x03, -/* 000116A0 */ 0x0C, 0x00, 0x00, 0x6B, 0x0B, 0x0C, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x05, -/* 000116B0 */ 0x00, 0x00, 0xF2, 0x02, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8D, 0x03, 0x24, 0x0C, -/* 000116C0 */ 0x01, 0x00, 0x6B, 0x0B, 0x0C, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x08, 0x01, -/* 000116D0 */ 0x00, 0xF2, 0x02, 0x0B, 0x0B, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x09, 0x0B, 0x8D, 0x02, -/* 000116E0 */ 0x0C, 0x0B, 0x02, 0x00, 0x4B, 0x0B, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x06, 0x5B, 0x01, 0x09, 0x02, -/* 000116F0 */ 0x00, 0xEE, 0x02, 0x0B, 0x0B, 0x02, 0x00, 0x0F, 0x36, 0x00, 0x0B, 0x8D, 0x03, 0x03, 0x0C, 0x00, -/* 00011700 */ 0x00, 0x6B, 0x0B, 0x0C, 0x02, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x8D, 0x03, 0x0B, 0x0D, 0x03, -/* 00011710 */ 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x06, 0x5B, 0x01, 0x09, 0x04, 0x00, 0xEE, 0x02, 0x0D, 0x0D, -/* 00011720 */ 0x04, 0x00, 0x5B, 0x01, 0x0D, 0x03, 0x00, 0xF2, 0x02, 0xFF, 0x0B, 0x02, 0x00, 0x00, 0x00, 0x03, -/* 00011730 */ 0x00, 0x8D, 0x03, 0x03, 0x0C, 0x00, 0x00, 0x6B, 0x0B, 0x0C, 0x03, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 00011740 */ 0x0C, 0x5B, 0x01, 0x09, 0x05, 0x00, 0xF2, 0x02, 0x0B, 0x0B, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, -/* 00011750 */ 0x47, 0x09, 0x0B, 0xA6, 0x0B, 0x15, 0x03, 0x00, 0x09, 0x0B, 0x09, 0x66, 0x00, 0x8D, 0x03, 0x06, -/* 00011760 */ 0x0B, 0x04, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x06, 0x8D, 0x03, 0x17, 0x0C, 0x05, 0x00, 0x5B, -/* 00011770 */ 0x01, 0x0C, 0x06, 0x00, 0x8D, 0x01, 0x02, 0x0C, 0x06, 0x00, 0x4B, 0x0C, 0x5B, 0x02, 0x0C, 0x06, -/* 00011780 */ 0x00, 0x5B, 0x03, 0x09, 0x06, 0x00, 0xEE, 0x04, 0x0B, 0x0B, 0x06, 0x00, 0x14, 0x03, 0x00, 0x0B, -/* 00011790 */ 0x07, 0x09, 0x2F, 0x00, 0x8D, 0x03, 0x06, 0x0B, 0x04, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x06, -/* 000117A0 */ 0x8D, 0x03, 0x18, 0x0C, 0x07, 0x00, 0x5B, 0x01, 0x0C, 0x07, 0x00, 0x8D, 0x01, 0x02, 0x0C, 0x06, -/* 000117B0 */ 0x00, 0x4B, 0x0C, 0x5B, 0x02, 0x0C, 0x07, 0x00, 0x5B, 0x03, 0x09, 0x07, 0x00, 0xEE, 0x04, 0xFF, -/* 000117C0 */ 0x0B, 0x07, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x8B, 0x02, 0xFE, 0x37, 0x03, 0xFE, 0x87, 0x02, -/* 000117D0 */ 0xFE, 0xD8, 0x01, 0xFF, 0x69, 0xBD, 0x01, 0x00, 0x09, 0x02, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x65, -/* 000117E0 */ 0x00, 0x1F, 0x00, 0x47, 0x00, 0x22, 0x00, 0x32, 0x00, 0x1D, 0x00, 0x35, 0x00, 0x36, 0x00, 0x4B, -/* 000117F0 */ 0x00, 0x22, 0x00, 0x37, 0x00, 0x41, 0x00, 0x65, 0x00, 0x31, 0x00, 0x46, 0x00, 0x00, 0xBF, 0x5C, -/* 00011800 */ 0x08, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0xEB, 0x09, 0x04, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x71, -/* 00011810 */ 0x03, 0x96, 0xFF, 0x22, 0xBA, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0x22, -/* 00011820 */ 0xBA, 0x01, 0x00, 0xF8, 0xF8, 0x01, 0x05, 0x04, 0x06, 0x04, 0x1D, 0x1C, 0x02, 0x03, 0x04, 0x02, -/* 00011830 */ 0x02, 0x02, 0x02, 0x05, 0x08, 0x07, 0x79, 0x8D, 0x02, 0x24, 0x07, 0x00, 0x00, 0x6B, 0x06, 0x07, -/* 00011840 */ 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x07, 0x5B, 0x01, 0x04, 0x00, 0x00, 0xF2, 0x02, 0x06, 0x06, -/* 00011850 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x04, 0x06, 0x8D, 0x01, 0x0E, 0x06, 0x01, 0x00, 0x4B, -/* 00011860 */ 0x06, 0x0F, 0x14, 0x00, 0x06, 0x8D, 0x01, 0x04, 0x06, 0x02, 0x00, 0x4B, 0x06, 0x07, 0x01, 0x00, -/* 00011870 */ 0x5A, 0x00, 0x02, 0xEE, 0x01, 0xFF, 0x06, 0x01, 0x00, 0x8D, 0x02, 0x03, 0x07, 0x03, 0x00, 0x6B, -/* 00011880 */ 0x06, 0x07, 0x01, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x07, 0x5B, 0x01, 0x04, 0x02, 0x00, 0x8D, 0x01, -/* 00011890 */ 0x0E, 0x08, 0x01, 0x00, 0x4B, 0x08, 0x5B, 0x02, 0x08, 0x02, 0x00, 0xF2, 0x03, 0x06, 0x06, 0x01, -/* 000118A0 */ 0x00, 0x00, 0x00, 0x02, 0x00, 0x44, 0x00, 0x06, 0x03, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, -/* 000118B0 */ 0xFE, 0x37, 0x03, 0xFE, 0x83, 0x02, 0xFF, 0x54, 0xBA, 0x01, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, -/* 000118C0 */ 0x22, 0x00, 0x29, 0x00, 0x0C, 0x00, 0x25, 0x00, 0x14, 0x00, 0x2F, 0x00, 0x35, 0x00, 0x48, 0x00, -/* 000118D0 */ 0x00, 0xBF, 0x5C, 0x08, 0x01, 0x00, 0x88, 0x01, 0x00, 0xFE, 0xB0, 0x09, 0x04, 0xA1, 0x41, 0xC1, -/* 000118E0 */ 0x00, 0xFE, 0x7D, 0x03, 0x95, 0xFF, 0x1E, 0xA7, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, -/* 000118F0 */ 0x01, 0xFF, 0x1E, 0xA7, 0x01, 0x00, 0xFE, 0xFE, 0x12, 0xFE, 0xFE, 0x12, 0x41, 0x16, 0x25, 0x38, -/* 00011900 */ 0x04, 0xB0, 0x8A, 0x02, 0x03, 0x01, 0x37, 0x05, 0xFE, 0xCC, 0x03, 0x05, 0xFE, 0xCD, 0x03, 0x05, -/* 00011910 */ 0xFE, 0xCE, 0x03, 0x06, 0xFE, 0xCF, 0x03, 0x06, 0xFE, 0xD0, 0x03, 0x05, 0xFE, 0xD1, 0x03, 0x05, -/* 00011920 */ 0xFE, 0xD2, 0x03, 0x05, 0xFE, 0xD3, 0x03, 0x05, 0xFE, 0xD4, 0x03, 0x05, 0xFE, 0xD5, 0x03, 0x05, -/* 00011930 */ 0xFE, 0xD6, 0x03, 0x05, 0xFE, 0xD7, 0x03, 0x05, 0xFE, 0xD8, 0x03, 0x05, 0xFE, 0xD9, 0x03, 0x05, -/* 00011940 */ 0xFE, 0xDA, 0x03, 0x05, 0xFE, 0xDB, 0x03, 0x06, 0xFE, 0x5B, 0x03, 0x05, 0xFE, 0xDC, 0x03, 0x05, -/* 00011950 */ 0xFE, 0xDD, 0x03, 0x05, 0xFE, 0xDE, 0x03, 0x05, 0xFE, 0xDF, 0x03, 0x05, 0xFE, 0xE0, 0x03, 0x05, -/* 00011960 */ 0xFE, 0xE1, 0x03, 0x05, 0xFE, 0xE2, 0x03, 0x05, 0xFE, 0xE3, 0x03, 0x05, 0xFE, 0xE4, 0x03, 0x05, -/* 00011970 */ 0xFE, 0xE5, 0x03, 0x05, 0xFE, 0xE6, 0x03, 0x05, 0xFE, 0xE7, 0x03, 0x05, 0xFE, 0xB5, 0x04, 0x05, -/* 00011980 */ 0xFE, 0xE8, 0x03, 0x05, 0xFE, 0xE9, 0x03, 0x05, 0xFE, 0xEA, 0x03, 0x05, 0xFE, 0xEB, 0x03, 0x06, -/* 00011990 */ 0xFE, 0xEE, 0x03, 0xFE, 0xA1, 0x02, 0x4F, 0x25, 0x4F, 0x26, 0x4F, 0x27, 0x4F, 0x28, 0x4F, 0x29, -/* 000119A0 */ 0x4F, 0x2A, 0x4F, 0x2B, 0x4F, 0x2C, 0x4F, 0x2D, 0x4F, 0x2E, 0x4F, 0x2F, 0x4F, 0x30, 0x4F, 0x31, -/* 000119B0 */ 0x4F, 0x32, 0x4F, 0x33, 0x4F, 0x34, 0x4F, 0x35, 0x4F, 0x36, 0x47, 0x25, 0x02, 0x47, 0x26, 0x03, -/* 000119C0 */ 0x47, 0x38, 0x04, 0x01, 0x04, 0x01, 0x39, 0x25, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x05, -/* 000119D0 */ 0x01, 0x04, 0x01, 0x39, 0x26, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x06, 0x47, 0x27, 0x38, -/* 000119E0 */ 0x47, 0x28, 0x07, 0x2F, 0x38, 0x08, 0x09, 0x47, 0x29, 0x38, 0x47, 0x38, 0x0A, 0x01, 0x04, 0x01, -/* 000119F0 */ 0x39, 0x28, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x05, 0x01, 0x04, 0x01, 0x39, 0x29, 0x2F, -/* 00011A00 */ 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x0B, 0x47, 0x2A, 0x38, 0x47, 0x38, 0x0C, 0x01, 0x04, 0x01, -/* 00011A10 */ 0x39, 0x27, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x0D, 0x47, 0x2B, 0x38, 0x47, 0x38, 0x0A, -/* 00011A20 */ 0x01, 0x04, 0x01, 0x39, 0x26, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x0E, 0x47, 0x2C, 0x38, -/* 00011A30 */ 0x47, 0x38, 0x0A, 0x01, 0x04, 0x01, 0x39, 0x2C, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x0F, -/* 00011A40 */ 0x01, 0x04, 0x01, 0x39, 0x27, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x10, 0x47, 0x2D, 0x38, -/* 00011A50 */ 0x47, 0x38, 0x0A, 0x01, 0x04, 0x01, 0x39, 0x27, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x11, -/* 00011A60 */ 0x01, 0x04, 0x01, 0x39, 0x26, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x12, 0x01, 0x04, 0x01, -/* 00011A70 */ 0x39, 0x27, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x13, 0x47, 0x2E, 0x38, 0x47, 0x38, 0x0A, -/* 00011A80 */ 0x01, 0x04, 0x01, 0x39, 0x25, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x14, 0x01, 0x04, 0x01, -/* 00011A90 */ 0x39, 0x26, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x13, 0x47, 0x2F, 0x38, 0x47, 0x38, 0x0A, -/* 00011AA0 */ 0x01, 0x04, 0x01, 0x39, 0x25, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x15, 0x47, 0x30, 0x38, -/* 00011AB0 */ 0x47, 0x38, 0x0A, 0x01, 0x04, 0x01, 0x39, 0x25, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x16, -/* 00011AC0 */ 0x01, 0x04, 0x01, 0x39, 0x25, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x17, 0x47, 0x31, 0x38, -/* 00011AD0 */ 0x47, 0x38, 0x12, 0x01, 0x04, 0x01, 0x39, 0x25, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x18, -/* 00011AE0 */ 0x2F, 0x38, 0x0A, 0x38, 0x47, 0x39, 0x19, 0x01, 0x04, 0x01, 0x3A, 0x31, 0x2F, 0x39, 0x39, 0x3A, -/* 00011AF0 */ 0x2F, 0x39, 0x39, 0x1A, 0x2F, 0x38, 0x38, 0x39, 0x47, 0x39, 0x05, 0x01, 0x04, 0x01, 0x3A, 0x25, -/* 00011B00 */ 0x2F, 0x39, 0x39, 0x3A, 0x2F, 0x39, 0x39, 0x1B, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x0B, -/* 00011B10 */ 0x47, 0x32, 0x38, 0x47, 0x38, 0x1C, 0x01, 0x04, 0x01, 0x39, 0x32, 0x2F, 0x38, 0x38, 0x39, 0x2F, -/* 00011B20 */ 0x38, 0x38, 0x0B, 0x47, 0x39, 0x1D, 0x01, 0x04, 0x01, 0x3A, 0x30, 0x2F, 0x39, 0x39, 0x3A, 0x2F, -/* 00011B30 */ 0x39, 0x39, 0x1E, 0x2F, 0x38, 0x38, 0x39, 0x47, 0x39, 0x1D, 0x01, 0x04, 0x01, 0x3A, 0x2F, 0x2F, -/* 00011B40 */ 0x39, 0x39, 0x3A, 0x2F, 0x39, 0x39, 0x1E, 0x2F, 0x38, 0x38, 0x39, 0x47, 0x33, 0x38, 0x47, 0x38, -/* 00011B50 */ 0x19, 0x01, 0x04, 0x01, 0x39, 0x2E, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x1F, 0x47, 0x39, -/* 00011B60 */ 0x20, 0x01, 0x04, 0x01, 0x3A, 0x2D, 0x2F, 0x39, 0x39, 0x3A, 0x2F, 0x39, 0x39, 0x21, 0x2F, 0x38, -/* 00011B70 */ 0x38, 0x39, 0x47, 0x39, 0x19, 0x01, 0x04, 0x01, 0x3A, 0x2B, 0x2F, 0x39, 0x39, 0x3A, 0x2F, 0x39, -/* 00011B80 */ 0x39, 0x22, 0x2F, 0x38, 0x38, 0x39, 0x47, 0x34, 0x38, 0x47, 0x38, 0x23, 0x01, 0x04, 0x01, 0x39, -/* 00011B90 */ 0x33, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x23, 0x01, 0x04, 0x01, 0x39, 0x34, 0x2F, 0x38, -/* 00011BA0 */ 0x38, 0x39, 0x2F, 0x38, 0x38, 0x23, 0x47, 0x35, 0x38, 0x47, 0x38, 0x0A, 0x01, 0x04, 0x01, 0x39, -/* 00011BB0 */ 0x35, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x05, 0x01, 0x04, 0x01, 0x39, 0x2B, 0x2F, 0x38, -/* 00011BC0 */ 0x38, 0x39, 0x2F, 0x38, 0x38, 0x05, 0x01, 0x04, 0x01, 0x39, 0x2A, 0x2F, 0x38, 0x38, 0x39, 0x2F, -/* 00011BD0 */ 0x38, 0x38, 0x0B, 0x47, 0x36, 0x38, 0x8D, 0x02, 0x09, 0x38, 0x00, 0x00, 0x07, 0x03, 0x00, 0x5B, -/* 00011BE0 */ 0x01, 0x33, 0x00, 0x00, 0x5B, 0x02, 0x24, 0x00, 0x00, 0xC2, 0x03, 0x38, 0x38, 0x00, 0x00, 0x01, -/* 00011BF0 */ 0x34, 0x01, 0x01, 0x0F, 0x38, 0x8D, 0x02, 0x09, 0x38, 0x00, 0x00, 0x07, 0x03, 0x00, 0x5B, 0x01, -/* 00011C00 */ 0x34, 0x01, 0x00, 0x5B, 0x02, 0x24, 0x01, 0x00, 0xC2, 0x03, 0x38, 0x38, 0x01, 0x00, 0x01, 0x34, -/* 00011C10 */ 0x01, 0x01, 0x10, 0x38, 0x8D, 0x02, 0x09, 0x38, 0x00, 0x00, 0x07, 0x03, 0x00, 0x5B, 0x01, 0x36, -/* 00011C20 */ 0x02, 0x00, 0x5B, 0x02, 0x24, 0x02, 0x00, 0xC2, 0x03, 0x38, 0x38, 0x02, 0x00, 0x01, 0x34, 0x01, -/* 00011C30 */ 0x01, 0x11, 0x38, 0xA6, 0x00, 0x24, 0x00, 0xFF, 0xFE, 0xAB, 0x01, 0x00, 0x16, 0x24, 0x00, 0x00, -/* 00011C40 */ 0x00, 0x03, 0x00, 0x1F, 0x00, 0x03, 0x00, 0x1F, 0x00, 0x20, 0x00, 0x33, 0x00, 0x03, 0x00, 0x77, -/* 00011C50 */ 0x00, 0x07, 0x00, 0xC0, 0x00, 0x20, 0x00, 0x44, 0x00, 0x13, 0x00, 0x7D, 0x00, 0x13, 0x00, 0x94, -/* 00011C60 */ 0x00, 0x20, 0x00, 0x83, 0x00, 0x2D, 0x00, 0x83, 0x00, 0x20, 0x00, 0x74, 0x00, 0x13, 0x00, 0x6A, -/* 00011C70 */ 0x00, 0x20, 0x00, 0x7A, 0x00, 0x43, 0x00, 0x00, 0x04, 0x3B, 0x00, 0x4C, 0x01, 0x3B, 0x00, 0x5A, -/* 00011C80 */ 0x01, 0x20, 0x00, 0x4B, 0x00, 0x2D, 0x00, 0x6E, 0x00, 0x1F, 0x00, 0x66, 0x00, 0x1F, 0x00, 0x8B, -/* 00011C90 */ 0x00, 0x21, 0x00, 0x72, 0x00, 0x00, 0xBF, 0x4C, 0x00, 0x00, 0x20, 0x88, 0x01, 0x00, 0xFE, 0xA9, -/* 00011CA0 */ 0x09, 0x04, 0xA1, 0x41, 0xC1, 0x00, 0xFE, 0x65, 0x03, 0x94, 0xFF, 0xE1, 0xA5, 0x01, 0x00, 0xFF, -/* 00011CB0 */ 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFF, 0xE1, 0xA5, 0x01, 0x00, 0x55, 0x55, 0x41, 0x02, 0x02, -/* 00011CC0 */ 0x03, 0x05, 0x05, 0x02, 0x01, 0x02, 0x0D, 0xE0, 0x03, 0x00, 0x01, 0x34, 0x01, 0x01, 0x0E, 0x03, -/* 00011CD0 */ 0xA6, 0x00, 0x24, 0x00, 0x0A, 0xFE, 0xCA, 0x03, 0x01, 0xFF, 0x0F, 0xA6, 0x01, 0x00, 0x02, 0x00, -/* 00011CE0 */ 0x00, 0x00, 0x00, 0x0B, 0x00, 0x26, 0x00, 0x00, 0xBF, 0x5C, 0x0A, 0xC1, 0x43, 0xA8, 0x01, 0x00, -/* 00011CF0 */ 0xFE, 0x98, 0x09, 0x04, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x6E, 0x03, 0x93, 0xFF, 0x7C, 0xA3, 0x01, -/* 00011D00 */ 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x06, 0x06, 0xFF, 0x7C, 0xA3, 0x01, 0x00, 0xFE, 0x45, 0x02, -/* 00011D10 */ 0xFE, 0x45, 0x02, 0x01, 0x0C, 0x07, 0x0F, 0x08, 0x3A, 0x37, 0x02, 0x01, 0x06, 0x05, 0x03, 0x03, -/* 00011D20 */ 0x03, 0x03, 0x01, 0x0E, 0x0F, 0x06, 0xFE, 0xF5, 0x03, 0x08, 0x06, 0xFE, 0xC7, 0x03, 0x05, 0xFE, -/* 00011D30 */ 0xC8, 0x03, 0x06, 0xFE, 0xC9, 0x03, 0xF8, 0x4F, 0x0C, 0x4F, 0x0D, 0x96, 0x10, 0x07, 0x08, 0x00, -/* 00011D40 */ 0x00, 0x47, 0x0C, 0x10, 0x2C, 0x10, 0x0C, 0x15, 0x03, 0x00, 0x10, 0x02, 0x09, 0xD6, 0x00, 0x8D, -/* 00011D50 */ 0x02, 0x24, 0x11, 0x00, 0x00, 0x6B, 0x10, 0x11, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x11, 0x5B, -/* 00011D60 */ 0x01, 0x0C, 0x00, 0x00, 0xF2, 0x02, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x0D, -/* 00011D70 */ 0x10, 0x8D, 0x02, 0x21, 0x10, 0x01, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x03, 0x5B, 0x01, 0x0D, -/* 00011D80 */ 0x01, 0x00, 0xEE, 0x02, 0x10, 0x10, 0x01, 0x00, 0x0F, 0x0D, 0x00, 0x10, 0x12, 0x08, 0x00, 0x0D, -/* 00011D90 */ 0x09, 0x11, 0x03, 0x00, 0x0D, 0x0A, 0x09, 0x67, 0x00, 0x8D, 0x02, 0x03, 0x11, 0x02, 0x00, 0x6B, -/* 00011DA0 */ 0x10, 0x11, 0x01, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x11, 0x8D, 0x02, 0x0B, 0x12, 0x03, 0x00, 0x07, -/* 00011DB0 */ 0x02, 0x00, 0x5A, 0x00, 0x03, 0x5B, 0x01, 0x0C, 0x03, 0x00, 0xEE, 0x02, 0x12, 0x12, 0x03, 0x00, -/* 00011DC0 */ 0x5B, 0x01, 0x12, 0x02, 0x00, 0x8D, 0x02, 0x0B, 0x12, 0x03, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 00011DD0 */ 0x03, 0x5B, 0x01, 0x08, 0x04, 0x00, 0xEE, 0x02, 0x12, 0x12, 0x04, 0x00, 0x5B, 0x02, 0x12, 0x02, -/* 00011DE0 */ 0x00, 0x2F, 0x12, 0x04, 0x09, 0x2F, 0x12, 0x12, 0x05, 0x2F, 0x12, 0x12, 0x0A, 0x2F, 0x12, 0x12, -/* 00011DF0 */ 0x06, 0x5B, 0x03, 0x12, 0x02, 0x00, 0xF2, 0x04, 0xFF, 0x10, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, -/* 00011E00 */ 0x8D, 0x02, 0x0F, 0x11, 0x04, 0x00, 0x6B, 0x10, 0x11, 0x02, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x11, -/* 00011E10 */ 0x5B, 0x01, 0x0D, 0x05, 0x00, 0xF2, 0x02, 0x00, 0x10, 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x09, -/* 00011E20 */ 0x0B, 0x00, 0x09, 0x06, 0x00, 0x47, 0x00, 0x0B, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, -/* 00011E30 */ 0x38, 0x03, 0xFE, 0x8F, 0x02, 0x23, 0xFF, 0xCE, 0xA3, 0x01, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, -/* 00011E40 */ 0x09, 0x00, 0x2D, 0x00, 0x0B, 0x00, 0x33, 0x00, 0x22, 0x00, 0x41, 0x00, 0x28, 0x00, 0x65, 0x00, -/* 00011E50 */ 0x67, 0x00, 0x8D, 0x00, 0x25, 0x00, 0x40, 0x00, 0x08, 0x00, 0x1F, 0x00, 0x00, 0xBF, 0x5C, 0x0A, -/* 00011E60 */ 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x7E, 0x09, 0x04, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x64, 0x03, -/* 00011E70 */ 0x92, 0xFF, 0x5F, 0xA0, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x06, 0x06, 0xFF, 0x5F, 0xA0, -/* 00011E80 */ 0x01, 0x00, 0xFE, 0x17, 0x03, 0xFE, 0x17, 0x03, 0x01, 0x0B, 0x0A, 0x11, 0x0A, 0x51, 0x4B, 0x02, -/* 00011E90 */ 0x01, 0x08, 0x06, 0x04, 0x04, 0x04, 0x04, 0x10, 0x06, 0xFE, 0xC2, 0x03, 0x06, 0xFE, 0xAD, 0x03, -/* 00011EA0 */ 0x06, 0xFE, 0xC3, 0x03, 0x08, 0x01, 0xFF, 0x05, 0xFE, 0xC4, 0x03, 0x05, 0xFE, 0xC6, 0x03, 0x05, -/* 00011EB0 */ 0xFE, 0xC5, 0x03, 0xFE, 0x62, 0x01, 0x4F, 0x0F, 0x96, 0x11, 0x0A, 0x0B, 0x00, 0x00, 0x47, 0x0F, -/* 00011EC0 */ 0x11, 0xA6, 0x11, 0x15, 0x03, 0x00, 0x0F, 0x11, 0x09, 0x43, 0x01, 0x0C, 0x03, 0x00, 0x0C, 0x02, -/* 00011ED0 */ 0x09, 0x22, 0x00, 0x8D, 0x02, 0x24, 0x12, 0x00, 0x00, 0x6B, 0x11, 0x12, 0x00, 0x07, 0x02, 0x00, -/* 00011EE0 */ 0x5A, 0x00, 0x12, 0x5B, 0x01, 0x0F, 0x00, 0x00, 0xF2, 0x02, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, -/* 00011EF0 */ 0x00, 0x00, 0x47, 0x0F, 0x11, 0x0C, 0x03, 0x00, 0x0C, 0x03, 0x09, 0x22, 0x00, 0x8D, 0x02, 0x24, -/* 00011F00 */ 0x12, 0x00, 0x00, 0x6B, 0x11, 0x12, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x12, 0x5B, 0x01, 0x0F, -/* 00011F10 */ 0x01, 0x00, 0xF2, 0x02, 0x11, 0x11, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x0F, 0x11, 0x0C, -/* 00011F20 */ 0x03, 0x00, 0x0C, 0x04, 0x09, 0x22, 0x00, 0x8D, 0x02, 0x24, 0x12, 0x00, 0x00, 0x6B, 0x11, 0x12, -/* 00011F30 */ 0x02, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x12, 0x5B, 0x01, 0x0F, 0x02, 0x00, 0xF2, 0x02, 0x11, 0x11, -/* 00011F40 */ 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x47, 0x0F, 0x11, 0xA6, 0x11, 0x15, 0x03, 0x00, 0x0D, 0x11, -/* 00011F50 */ 0x09, 0xB5, 0x00, 0x8D, 0x02, 0x06, 0x11, 0x01, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x05, 0x8D, -/* 00011F60 */ 0x02, 0x17, 0x12, 0x02, 0x00, 0x5B, 0x01, 0x12, 0x03, 0x00, 0x5B, 0x02, 0x0D, 0x03, 0x00, 0x5B, -/* 00011F70 */ 0x03, 0x0F, 0x03, 0x00, 0xEE, 0x04, 0x11, 0x11, 0x03, 0x00, 0x0C, 0x03, 0x00, 0x11, 0x06, 0x09, -/* 00011F80 */ 0x86, 0x00, 0x8D, 0x02, 0x03, 0x12, 0x03, 0x00, 0x6B, 0x11, 0x12, 0x03, 0x07, 0x04, 0x00, 0x5A, -/* 00011F90 */ 0x00, 0x12, 0x8D, 0x02, 0x0B, 0x13, 0x04, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x05, 0x5B, 0x01, -/* 00011FA0 */ 0x0F, 0x05, 0x00, 0xEE, 0x02, 0x13, 0x13, 0x05, 0x00, 0x5B, 0x01, 0x13, 0x04, 0x00, 0x8D, 0x02, -/* 00011FB0 */ 0x0B, 0x13, 0x04, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x05, 0x5B, 0x01, 0x0B, 0x06, 0x00, 0xEE, -/* 00011FC0 */ 0x02, 0x13, 0x13, 0x06, 0x00, 0x5B, 0x02, 0x13, 0x04, 0x00, 0x8D, 0x02, 0x06, 0x13, 0x01, 0x00, -/* 00011FD0 */ 0x07, 0x04, 0x00, 0x5A, 0x00, 0x05, 0x8D, 0x02, 0x19, 0x14, 0x05, 0x00, 0x5B, 0x01, 0x14, 0x07, -/* 00011FE0 */ 0x00, 0x5B, 0x02, 0x0D, 0x07, 0x00, 0x5B, 0x03, 0x08, 0x07, 0x00, 0xEE, 0x04, 0x13, 0x13, 0x07, -/* 00011FF0 */ 0x00, 0x2F, 0x13, 0x07, 0x13, 0x2F, 0x13, 0x13, 0x09, 0x5B, 0x03, 0x13, 0x04, 0x00, 0xF2, 0x04, -/* 00012000 */ 0xFF, 0x11, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x47, 0x00, 0x0F, 0x09, 0x08, 0x00, 0x47, 0x00, -/* 00012010 */ 0x0E, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x39, 0x03, 0xFE, 0x37, 0x03, 0xFE, 0x38, -/* 00012020 */ 0x03, 0xFE, 0x8F, 0x02, 0xFF, 0xA7, 0xA0, 0x01, 0x00, 0x0D, 0x02, 0x00, 0x00, 0x00, 0x09, 0x00, -/* 00012030 */ 0x28, 0x00, 0x0A, 0x00, 0x27, 0x00, 0x08, 0x00, 0x29, 0x00, 0x22, 0x00, 0x45, 0x00, 0x08, 0x00, -/* 00012040 */ 0x28, 0x00, 0x22, 0x00, 0x3D, 0x00, 0x08, 0x00, 0x28, 0x00, 0x22, 0x00, 0x3D, 0x00, 0x39, 0x00, -/* 00012050 */ 0x6B, 0x00, 0x86, 0x00, 0xA6, 0x00, 0x06, 0x00, 0x21, 0x00, 0x08, 0x00, 0x15, 0x00, 0x00, 0x3F, -/* 00012060 */ 0x5C, 0x08, 0xC1, 0x13, 0x88, 0x25, 0x00, 0xFE, 0x53, 0x09, 0x14, 0xA0, 0x41, 0xD1, 0x00, 0x8B, -/* 00012070 */ 0xFF, 0x4E, 0x9B, 0x01, 0x00, 0x06, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFF, 0x4E, 0x9B, -/* 00012080 */ 0x01, 0x00, 0xFE, 0xE0, 0x04, 0xFE, 0xE0, 0x04, 0x04, 0x0A, 0x0B, 0x04, 0x17, 0x17, 0x02, 0x01, -/* 00012090 */ 0x01, 0x06, 0x06, 0x06, 0x06, 0x01, 0x0A, 0x08, 0x06, 0xFE, 0x36, 0x03, 0x06, 0xFE, 0x37, 0x03, -/* 000120A0 */ 0x06, 0xFE, 0x38, 0x03, 0x06, 0xFE, 0x39, 0x03, 0x06, 0xFE, 0x3A, 0x03, 0x06, 0xFE, 0xB4, 0x04, -/* 000120B0 */ 0x07, 0x60, 0x8D, 0x02, 0x04, 0x0B, 0x00, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0x00, -/* 000120C0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0xD6, 0x00, 0x0D, 0x0C, 0x79, -/* 000120D0 */ 0x0D, 0x0C, 0x00, 0xD6, 0x01, 0x0D, 0x0C, 0x79, 0x0D, 0x0C, 0x01, 0xD6, 0x02, 0x0D, 0x0C, 0x79, -/* 000120E0 */ 0x0D, 0x0C, 0x02, 0xD6, 0x03, 0x0D, 0x0C, 0x79, 0x0D, 0x0C, 0x03, 0xD6, 0x04, 0x0D, 0x0C, 0x79, -/* 000120F0 */ 0x0D, 0x0C, 0x04, 0xD6, 0x05, 0x0D, 0x0C, 0x79, 0x0D, 0x0C, 0x05, 0x5B, 0x01, 0x0C, 0x00, 0x00, -/* 00012100 */ 0x5B, 0x02, 0x09, 0x00, 0x00, 0xEE, 0x03, 0x00, 0x0B, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, -/* 00012110 */ 0x24, 0x00, 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 00012120 */ 0x00, 0x36, 0x03, 0x00, 0x00, 0x37, 0x03, 0x00, 0x00, 0x38, 0x03, 0x00, 0x00, 0x39, 0x03, 0x00, -/* 00012130 */ 0x00, 0x3A, 0x03, 0x00, 0x00, 0xB4, 0x04, 0x00, 0x00, 0xFE, 0x36, 0x03, 0xFE, 0x37, 0x03, 0xFE, -/* 00012140 */ 0x38, 0x03, 0xFE, 0x39, 0x03, 0xFE, 0x3A, 0x03, 0xFE, 0xB4, 0x04, 0xFF, 0x64, 0x9B, 0x01, 0x00, -/* 00012150 */ 0x02, 0x00, 0x00, 0x00, 0x00, 0x5E, 0x00, 0xC9, 0x04, 0x00, 0xAF, 0x24, 0x01, 0x00, 0x34, 0x24, -/* 00012160 */ 0x01, 0x00, 0xB9, 0x23, 0x01, 0x00, 0x3E, 0x23, 0x01, 0x00, 0x2D, 0x22, 0x01, 0x00, 0x72, 0x21, -/* 00012170 */ 0x01, 0x00, 0xBF, 0x7C, 0x08, 0x03, 0x00, 0x88, 0x0B, 0x00, 0xFE, 0x71, 0x09, 0x19, 0xA2, 0x41, -/* 00012180 */ 0xC1, 0x00, 0xFE, 0xB4, 0x04, 0x91, 0xFF, 0x00, 0x00, 0x00, 0x02, 0xFF, 0xE2, 0x9E, 0x01, 0x00, -/* 00012190 */ 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFF, 0xE2, 0x9E, 0x01, 0x00, 0xFE, 0x35, 0x01, 0xFE, -/* 000121A0 */ 0x35, 0x01, 0x01, 0x05, 0x04, 0x07, 0x05, 0x1A, 0x18, 0x17, 0x02, 0x02, 0x03, 0x01, 0x06, 0x00, -/* 000121B0 */ 0x5A, 0x08, 0x0B, 0x5E, 0xEB, 0x00, 0xEC, 0x00, 0x0E, 0x50, 0x00, 0x04, 0x8D, 0x02, 0x06, 0x07, -/* 000121C0 */ 0x00, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8D, 0x02, 0x13, 0x08, 0x01, 0x00, 0x5B, 0x01, -/* 000121D0 */ 0x08, 0x00, 0x00, 0x5B, 0x02, 0x04, 0x00, 0x00, 0x5B, 0x03, 0x05, 0x00, 0x00, 0xEE, 0x04, 0x07, -/* 000121E0 */ 0x07, 0x00, 0x00, 0x0E, 0x08, 0x00, 0x07, 0x47, 0x00, 0x03, 0xED, 0x00, 0x09, 0x21, 0x00, 0x8D, -/* 000121F0 */ 0x02, 0x10, 0x07, 0x02, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x04, 0x01, 0x00, -/* 00012200 */ 0xEE, 0x02, 0x07, 0x07, 0x01, 0x00, 0x47, 0x04, 0x07, 0x09, 0xAA, 0xFF, 0xED, 0x00, 0xA6, 0x00, -/* 00012210 */ 0x24, 0x00, 0xFF, 0x37, 0x9F, 0x01, 0x00, 0x05, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x19, 0x00, -/* 00012220 */ 0x2B, 0x00, 0x54, 0x00, 0x08, 0x00, 0x37, 0x00, 0x21, 0x00, 0x3B, 0x00, 0x00, 0xBF, 0x5C, 0x28, -/* 00012230 */ 0xC1, 0x03, 0x88, 0x03, 0x00, 0xFE, 0x68, 0x09, 0x16, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x3A, 0x03, -/* 00012240 */ 0x90, 0xFF, 0x00, 0x00, 0x00, 0x02, 0xFF, 0xCB, 0x9D, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, -/* 00012250 */ 0x02, 0x02, 0xFF, 0xCB, 0x9D, 0x01, 0x00, 0xFB, 0xFB, 0x01, 0x09, 0x06, 0x0A, 0x07, 0x28, 0x23, -/* 00012260 */ 0x02, 0x05, 0x01, 0x04, 0x02, 0x02, 0x02, 0x02, 0x09, 0x08, 0x01, 0x00, 0x01, 0x02, 0x01, 0x20, -/* 00012270 */ 0xAC, 0x8D, 0x02, 0x0A, 0x0A, 0x00, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x06, -/* 00012280 */ 0x00, 0x00, 0xEE, 0x02, 0x0A, 0x0A, 0x00, 0x00, 0x47, 0x07, 0x0A, 0x47, 0x08, 0x03, 0x8D, 0x02, -/* 00012290 */ 0x21, 0x0A, 0x01, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x07, 0x01, 0x00, 0xEE, -/* 000122A0 */ 0x02, 0x0A, 0x0A, 0x01, 0x00, 0x0F, 0x6A, 0x00, 0x0A, 0x8D, 0x02, 0x20, 0x0A, 0x02, 0x00, 0x07, -/* 000122B0 */ 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x07, 0x02, 0x00, 0xEE, 0x02, 0x0A, 0x0A, 0x02, 0x00, -/* 000122C0 */ 0x0E, 0x4F, 0x00, 0x0A, 0x8D, 0x02, 0x0F, 0x0B, 0x03, 0x00, 0x6B, 0x0A, 0x0B, 0x00, 0x07, 0x02, -/* 000122D0 */ 0x00, 0x5A, 0x00, 0x0B, 0x47, 0x0C, 0x07, 0x8D, 0x02, 0x0F, 0x0E, 0x03, 0x00, 0x6B, 0x0D, 0x0E, -/* 000122E0 */ 0x01, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0E, 0x5B, 0x01, 0x04, 0x04, 0x00, 0x5B, 0x02, 0x05, 0x04, -/* 000122F0 */ 0x00, 0xF2, 0x03, 0x0D, 0x0D, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x34, 0x0C, 0x0C, 0x0D, 0x00, -/* 00012300 */ 0x00, 0x5B, 0x01, 0x0C, 0x03, 0x00, 0xF2, 0x02, 0x0A, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, -/* 00012310 */ 0x47, 0x08, 0x0A, 0x47, 0x00, 0x08, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x1B, 0x29, 0xFF, -/* 00012320 */ 0xEA, 0x9D, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x29, 0x00, 0x03, 0x00, 0x19, -/* 00012330 */ 0x00, 0x36, 0x00, 0x38, 0x00, 0x4F, 0x00, 0x49, 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, 0xBF, 0x5C, -/* 00012340 */ 0x08, 0x01, 0x00, 0x88, 0x03, 0x00, 0xFE, 0x64, 0x09, 0x1E, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x39, -/* 00012350 */ 0x03, 0x8F, 0xFF, 0x00, 0x00, 0x00, 0x02, 0xFF, 0x55, 0x9D, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, -/* 00012360 */ 0x00, 0x02, 0x02, 0xFF, 0x55, 0x9D, 0x01, 0x00, 0x5D, 0x5D, 0x01, 0x03, 0x03, 0x05, 0x03, 0x10, -/* 00012370 */ 0x0E, 0x02, 0x01, 0x01, 0x04, 0x08, 0x33, 0xA6, 0x05, 0x15, 0x03, 0x00, 0x03, 0x05, 0x09, 0x1D, -/* 00012380 */ 0x00, 0x8D, 0x02, 0x07, 0x05, 0x00, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x03, -/* 00012390 */ 0x00, 0x00, 0xEE, 0x02, 0x05, 0x05, 0x00, 0x00, 0x47, 0x00, 0x05, 0x09, 0x05, 0x00, 0xA6, 0x05, -/* 000123A0 */ 0x47, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFF, 0x74, 0x9D, 0x01, 0x00, 0x02, -/* 000123B0 */ 0x00, 0x00, 0x00, 0x00, 0x31, 0x00, 0x3D, 0x00, 0x00, 0xBF, 0x5C, 0x08, 0x01, 0x00, 0x88, 0x03, -/* 000123C0 */ 0x00, 0xFE, 0x60, 0x09, 0x16, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x38, 0x03, 0x8E, 0xFF, 0x00, 0x00, -/* 000123D0 */ 0x00, 0x02, 0xFF, 0xDE, 0x9C, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0xDE, -/* 000123E0 */ 0x9C, 0x01, 0x00, 0x56, 0x56, 0x01, 0x03, 0x03, 0x05, 0x03, 0x10, 0x0E, 0x02, 0x01, 0x01, 0x04, -/* 000123F0 */ 0x08, 0x33, 0xA6, 0x05, 0x14, 0x03, 0x00, 0x03, 0x05, 0x09, 0x08, 0x00, 0xA7, 0x05, 0x47, 0x00, -/* 00012400 */ 0x05, 0x09, 0x1A, 0x00, 0x8D, 0x02, 0x0A, 0x05, 0x00, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, -/* 00012410 */ 0x5B, 0x01, 0x03, 0x00, 0x00, 0xEE, 0x02, 0x05, 0x05, 0x00, 0x00, 0x47, 0x00, 0x05, 0x09, 0x02, -/* 00012420 */ 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFF, 0xFD, 0x9C, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x31, -/* 00012430 */ 0x00, 0x36, 0x00, 0x00, 0xBF, 0x5C, 0x08, 0x01, 0x00, 0x88, 0x03, 0x00, 0xFE, 0x5C, 0x09, 0x16, -/* 00012440 */ 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x37, 0x03, 0x8D, 0xFF, 0x00, 0x00, 0x00, 0x02, 0xFF, 0x69, 0x9C, -/* 00012450 */ 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0x69, 0x9C, 0x01, 0x00, 0x5C, 0x5C, -/* 00012460 */ 0x01, 0x03, 0x03, 0x05, 0x03, 0x10, 0x0E, 0x02, 0x01, 0x01, 0x04, 0x08, 0x33, 0xA6, 0x05, 0x15, -/* 00012470 */ 0x03, 0x00, 0x03, 0x05, 0x09, 0x1D, 0x00, 0x8D, 0x02, 0x0B, 0x05, 0x00, 0x00, 0x07, 0x02, 0x00, -/* 00012480 */ 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x03, 0x00, 0x00, 0xEE, 0x02, 0x05, 0x05, 0x00, 0x00, 0x47, 0x00, -/* 00012490 */ 0x05, 0x09, 0x05, 0x00, 0xA6, 0x05, 0x47, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, -/* 000124A0 */ 0xFF, 0x88, 0x9C, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x31, 0x00, 0x3C, 0x00, 0x00, 0xBF, -/* 000124B0 */ 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x03, 0x00, 0xFE, 0x55, 0x09, 0x16, 0xA2, 0x41, 0xC1, 0x00, 0xFE, -/* 000124C0 */ 0x36, 0x03, 0x8C, 0xFF, 0x00, 0x00, 0x00, 0x02, 0xFF, 0x90, 0x9B, 0x01, 0x00, 0xFF, 0x00, 0x10, -/* 000124D0 */ 0x01, 0x00, 0x02, 0x02, 0xFF, 0x90, 0x9B, 0x01, 0x00, 0xC0, 0xC0, 0x01, 0x04, 0x04, 0x06, 0x03, -/* 000124E0 */ 0x17, 0x15, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x05, 0x07, 0x08, 0x55, 0x14, 0x03, 0x00, -/* 000124F0 */ 0x04, 0x02, 0x09, 0x1A, 0x00, 0x8D, 0x02, 0x03, 0x07, 0x00, 0x00, 0x6B, 0x06, 0x07, 0x00, 0x07, -/* 00012500 */ 0x01, 0x00, 0x5A, 0x00, 0x07, 0xF2, 0x01, 0xFF, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA6, -/* 00012510 */ 0x06, 0x15, 0x03, 0x00, 0x04, 0x06, 0x09, 0x1D, 0x00, 0x8D, 0x02, 0x08, 0x06, 0x01, 0x00, 0x07, -/* 00012520 */ 0x02, 0x00, 0x5A, 0x00, 0x03, 0x5B, 0x01, 0x04, 0x01, 0x00, 0xEE, 0x02, 0x06, 0x06, 0x01, 0x00, -/* 00012530 */ 0x47, 0x00, 0x06, 0x09, 0x05, 0x00, 0xA6, 0x06, 0x47, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA6, 0x00, -/* 00012540 */ 0x24, 0x00, 0xFE, 0x89, 0x02, 0xFF, 0xAF, 0x9B, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x08, -/* 00012550 */ 0x00, 0x26, 0x00, 0x1A, 0x00, 0x3E, 0x00, 0x31, 0x00, 0x3C, 0x00, 0x00, 0xBF, 0x5C, 0x0A, 0xC1, -/* 00012560 */ 0x63, 0xA8, 0x01, 0x00, 0xFE, 0x38, 0x09, 0x20, 0xA0, 0x41, 0xC1, 0x00, 0xFE, 0xEC, 0x02, 0x8A, -/* 00012570 */ 0xFF, 0xC7, 0x97, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFF, 0xC7, 0x97, 0x01, -/* 00012580 */ 0x00, 0xFE, 0x70, 0x03, 0xFE, 0x70, 0x03, 0x01, 0x07, 0x05, 0x08, 0x06, 0x3E, 0x3C, 0x02, 0x02, -/* 00012590 */ 0x05, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x07, 0x08, 0x08, 0x01, 0x00, 0x01, 0x01, 0xFE, -/* 000125A0 */ 0xFF, 0x00, 0x4F, 0x05, 0x4F, 0x06, 0x8D, 0x01, 0x0D, 0x09, 0x00, 0x00, 0x4B, 0x09, 0x0E, 0x0B, -/* 000125B0 */ 0x00, 0x09, 0x8D, 0x01, 0x0D, 0x00, 0x00, 0x00, 0x4B, 0x00, 0x09, 0xE2, 0x00, 0x8D, 0x02, 0x33, -/* 000125C0 */ 0x09, 0x01, 0x00, 0x4B, 0x09, 0x0E, 0x82, 0x00, 0x09, 0x8D, 0x01, 0x0F, 0x09, 0x02, 0x00, 0x4B, -/* 000125D0 */ 0x09, 0x0F, 0x14, 0x00, 0x09, 0x8D, 0x01, 0x05, 0x09, 0x03, 0x00, 0x4B, 0x09, 0x07, 0x01, 0x00, -/* 000125E0 */ 0x5A, 0x00, 0x02, 0xEE, 0x01, 0xFF, 0x09, 0x00, 0x00, 0x8D, 0x01, 0x0A, 0x09, 0x04, 0x00, 0x4B, -/* 000125F0 */ 0x09, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x02, 0xEE, 0x01, 0x09, 0x09, 0x01, 0x00, 0x47, 0x05, 0x09, -/* 00012600 */ 0x8D, 0x02, 0x03, 0x0A, 0x05, 0x00, 0x6B, 0x09, 0x0A, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0A, -/* 00012610 */ 0x5B, 0x01, 0x05, 0x02, 0x00, 0x8D, 0x01, 0x0F, 0x0B, 0x02, 0x00, 0x4B, 0x0B, 0x5B, 0x02, 0x0B, -/* 00012620 */ 0x02, 0x00, 0xF2, 0x03, 0x09, 0x09, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x47, 0x06, 0x09, 0x0E, -/* 00012630 */ 0x0F, 0x00, 0x06, 0x96, 0x09, 0x06, 0x03, 0x00, 0x00, 0x01, 0x34, 0x01, 0x01, 0x0D, 0x09, 0x09, -/* 00012640 */ 0x06, 0x00, 0x01, 0x34, 0x01, 0x01, 0x0D, 0x05, 0x09, 0x47, 0x00, 0x8D, 0x02, 0x03, 0x0A, 0x05, -/* 00012650 */ 0x00, 0x6B, 0x09, 0x0A, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0A, 0x8D, 0x01, 0x0A, 0x0B, 0x04, -/* 00012660 */ 0x00, 0x4B, 0x0B, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x02, 0xEE, 0x01, 0x0B, 0x0B, 0x04, 0x00, 0x5B, -/* 00012670 */ 0x01, 0x0B, 0x03, 0x00, 0xE0, 0x0B, 0x00, 0x5B, 0x02, 0x0B, 0x03, 0x00, 0xF2, 0x03, 0x09, 0x09, -/* 00012680 */ 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x96, 0x09, 0x09, 0x04, 0x01, 0x00, 0x01, 0x34, 0x01, 0x01, -/* 00012690 */ 0x0D, 0x09, 0x8D, 0x01, 0x0D, 0x00, 0x00, 0x00, 0x4B, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, -/* 000126A0 */ 0x00, 0xFE, 0x83, 0x02, 0x09, 0xFE, 0xB3, 0x04, 0x00, 0xFF, 0xDD, 0x97, 0x01, 0x00, 0x0D, 0x04, -/* 000126B0 */ 0x00, 0x00, 0x00, 0x0C, 0x00, 0x2B, 0x00, 0x0B, 0x00, 0x33, 0x00, 0x0C, 0x00, 0x26, 0x00, 0x0C, -/* 000126C0 */ 0x00, 0x29, 0x00, 0x14, 0x00, 0x33, 0x00, 0x17, 0x00, 0x2C, 0x00, 0x2F, 0x00, 0x4D, 0x00, 0x04, -/* 000126D0 */ 0x00, 0x5B, 0x00, 0x0F, 0x00, 0x49, 0x00, 0x09, 0x00, 0xCB, 0x00, 0x47, 0x00, 0x6D, 0x00, 0x0D, -/* 000126E0 */ 0x00, 0x24, 0x00, 0x00, 0xBF, 0x7C, 0x0A, 0xC3, 0x03, 0x88, 0x09, 0x00, 0xFE, 0x26, 0x09, 0x19, -/* 000126F0 */ 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xEB, 0x02, 0x89, 0xFF, 0xA4, 0x94, 0x01, 0x00, 0xFF, 0x00, 0x10, -/* 00012700 */ 0x01, 0x00, 0x05, 0x05, 0xFF, 0xA4, 0x94, 0x01, 0x00, 0xFE, 0x91, 0x02, 0xFE, 0x91, 0x02, 0x01, -/* 00012710 */ 0x0C, 0x06, 0x10, 0x06, 0x41, 0x36, 0x18, 0x02, 0x01, 0x04, 0x04, 0x01, 0x01, 0x01, 0x01, 0x01, -/* 00012720 */ 0x0F, 0x66, 0xBF, 0x05, 0xFE, 0xBC, 0x03, 0x08, 0x01, 0x00, 0x01, 0x01, 0xEE, 0xA6, 0x0D, 0xA6, -/* 00012730 */ 0x0E, 0x14, 0x03, 0x00, 0x07, 0x02, 0x09, 0x0C, 0x00, 0x8D, 0x02, 0x27, 0x11, 0x00, 0x00, 0x47, -/* 00012740 */ 0x10, 0x11, 0x09, 0x09, 0x00, 0x8D, 0x02, 0x26, 0x11, 0x01, 0x00, 0x47, 0x10, 0x11, 0x47, 0x0A, -/* 00012750 */ 0x10, 0x8D, 0x02, 0x05, 0x10, 0x02, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x03, 0x5B, 0x01, 0x06, -/* 00012760 */ 0x00, 0x00, 0xEE, 0x02, 0x10, 0x10, 0x00, 0x00, 0x47, 0x0B, 0x10, 0x07, 0x01, 0x00, 0x5A, 0x00, -/* 00012770 */ 0x03, 0xEE, 0x01, 0x10, 0x09, 0x01, 0x00, 0x47, 0x0C, 0x10, 0xA6, 0x10, 0x15, 0x03, 0x00, 0x0B, -/* 00012780 */ 0x10, 0x09, 0x06, 0x00, 0x47, 0x10, 0x0B, 0x09, 0x03, 0x00, 0x47, 0x10, 0x04, 0x47, 0x0B, 0x10, -/* 00012790 */ 0x47, 0x0D, 0x04, 0xEB, 0x00, 0xEC, 0x00, 0x12, 0x03, 0x00, 0x0D, 0x0B, 0x09, 0x4B, 0x00, 0x8D, -/* 000127A0 */ 0x02, 0x29, 0x10, 0x03, 0x00, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x03, 0x96, 0x11, 0x06, 0x0D, 0x00, -/* 000127B0 */ 0x00, 0x5B, 0x01, 0x11, 0x02, 0x00, 0x5B, 0x02, 0x0A, 0x02, 0x00, 0x5B, 0x03, 0x08, 0x02, 0x00, -/* 000127C0 */ 0x5B, 0x04, 0x0C, 0x02, 0x00, 0xEE, 0x05, 0x10, 0x10, 0x02, 0x00, 0x47, 0x0E, 0x10, 0x60, 0x10, -/* 000127D0 */ 0x0E, 0x00, 0xA6, 0x11, 0x15, 0x03, 0x00, 0x10, 0x11, 0x09, 0x08, 0x00, 0x47, 0x00, 0x0E, 0xED, -/* 000127E0 */ 0x00, 0x09, 0x35, 0x00, 0x28, 0x0D, 0x0D, 0x09, 0xAB, 0xFF, 0xED, 0x00, 0x8D, 0x02, 0x29, 0x10, -/* 000127F0 */ 0x03, 0x00, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x03, 0x5B, 0x01, 0x0C, 0x03, 0x00, 0x5B, 0x02, 0x0A, -/* 00012800 */ 0x03, 0x00, 0xA6, 0x11, 0x5B, 0x03, 0x11, 0x03, 0x00, 0x5B, 0x04, 0x0C, 0x03, 0x00, 0xEE, 0x05, -/* 00012810 */ 0x00, 0x10, 0x03, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xF7, 0x01, 0xFF, 0xF3, -/* 00012820 */ 0x94, 0x01, 0x00, 0x0C, 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x58, 0x00, 0x1A, 0x00, 0x34, 0x00, -/* 00012830 */ 0x0F, 0x00, 0x32, 0x00, 0x16, 0x00, 0x39, 0x00, 0x07, 0x00, 0x0B, 0x00, 0x08, 0x00, 0x1F, 0x00, -/* 00012840 */ 0x2F, 0x00, 0x69, 0x00, 0x0E, 0x00, 0x35, 0x00, 0x08, 0x00, 0x4F, 0xFF, 0x08, 0x00, 0xE2, 0x00, -/* 00012850 */ 0x2D, 0x00, 0x51, 0x00, 0x00, 0x3F, 0x5D, 0x1A, 0xC1, 0x73, 0xAD, 0x25, 0x00, 0xFE, 0xEE, 0x08, -/* 00012860 */ 0x1E, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xEA, 0x02, 0x86, 0xFF, 0xF8, 0x8A, 0x01, 0x00, 0x02, 0xFF, -/* 00012870 */ 0x00, 0x10, 0x01, 0x00, 0x05, 0x05, 0xFF, 0xF8, 0x8A, 0x01, 0x00, 0xFE, 0x91, 0x09, 0xFE, 0x91, -/* 00012880 */ 0x09, 0x03, 0xFE, 0xAC, 0x04, 0xFE, 0xF7, 0x01, 0xFE, 0xAD, 0x04, 0x0E, 0x0B, 0x15, 0x05, 0x6D, -/* 00012890 */ 0x65, 0x02, 0x01, 0x09, 0x01, 0x0B, 0x05, 0x05, 0x05, 0x05, 0x01, 0x01, 0x01, 0x12, 0x13, 0x14, -/* 000128A0 */ 0x15, 0x07, 0x08, 0x01, 0x01, 0x01, 0x00, 0x06, 0xFE, 0xAF, 0x03, 0x05, 0xFE, 0xAE, 0x04, 0x06, -/* 000128B0 */ 0xFE, 0xF7, 0x03, 0x06, 0xFE, 0xAF, 0x04, 0x06, 0xFE, 0xB0, 0x04, 0xFE, 0xD6, 0x01, 0x94, 0x03, -/* 000128C0 */ 0x0B, 0x94, 0x04, 0x0D, 0x4F, 0x11, 0x8D, 0x02, 0x03, 0x17, 0x00, 0x00, 0x6B, 0x16, 0x17, 0x00, -/* 000128D0 */ 0x07, 0x02, 0x00, 0x5A, 0x00, 0x17, 0x91, 0x03, 0x18, 0x01, 0x00, 0x5B, 0x01, 0x18, 0x00, 0x00, -/* 000128E0 */ 0xF2, 0x02, 0x16, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x0F, 0x16, 0x14, 0x03, 0x00, -/* 000128F0 */ 0x0F, 0x02, 0x09, 0x1F, 0x00, 0x8D, 0x02, 0x28, 0x16, 0x02, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 00012900 */ 0x03, 0x91, 0x03, 0x17, 0x01, 0x00, 0x5B, 0x01, 0x17, 0x01, 0x00, 0xEE, 0x02, 0x16, 0x16, 0x01, -/* 00012910 */ 0x00, 0x47, 0x0F, 0x16, 0x0E, 0x2A, 0x00, 0x0F, 0x8D, 0x02, 0x06, 0x16, 0x03, 0x00, 0x07, 0x04, -/* 00012920 */ 0x00, 0x5A, 0x00, 0x03, 0x8D, 0x02, 0x16, 0x17, 0x04, 0x00, 0x5B, 0x01, 0x17, 0x02, 0x00, 0x5B, -/* 00012930 */ 0x02, 0x0F, 0x02, 0x00, 0xD3, 0x00, 0x17, 0x5B, 0x03, 0x17, 0x02, 0x00, 0xEE, 0x04, 0xFF, 0x16, -/* 00012940 */ 0x02, 0x00, 0x8D, 0x02, 0x03, 0x17, 0x00, 0x00, 0x6B, 0x16, 0x17, 0x01, 0x07, 0x03, 0x00, 0x5A, -/* 00012950 */ 0x00, 0x17, 0x91, 0x03, 0x18, 0x01, 0x00, 0x5B, 0x01, 0x18, 0x03, 0x00, 0xE0, 0x18, 0x00, 0x5B, -/* 00012960 */ 0x02, 0x18, 0x03, 0x00, 0xF2, 0x03, 0x16, 0x16, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x96, 0x16, -/* 00012970 */ 0x16, 0x04, 0x00, 0x00, 0x94, 0x03, 0x16, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x03, 0x91, 0x03, 0x16, -/* 00012980 */ 0x01, 0x00, 0x5B, 0x01, 0x16, 0x04, 0x00, 0x5B, 0x02, 0x0E, 0x04, 0x00, 0xEE, 0x03, 0x16, 0x0C, -/* 00012990 */ 0x04, 0x00, 0x47, 0x10, 0x16, 0x91, 0x04, 0x16, 0x05, 0x00, 0xA6, 0x17, 0x15, 0x03, 0x00, 0x16, -/* 000129A0 */ 0x17, 0x09, 0x3A, 0x00, 0xCD, 0x16, 0x00, 0x00, 0x00, 0x94, 0x02, 0x16, 0x8D, 0x02, 0x06, 0x16, -/* 000129B0 */ 0x03, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x8D, 0x02, 0x16, 0x17, 0x04, 0x00, 0x5B, 0x01, -/* 000129C0 */ 0x17, 0x05, 0x00, 0x5B, 0x02, 0x0F, 0x05, 0x00, 0xD3, 0x01, 0x17, 0x5B, 0x03, 0x17, 0x05, 0x00, -/* 000129D0 */ 0xEE, 0x04, 0xFF, 0x16, 0x05, 0x00, 0x91, 0x02, 0x16, 0x06, 0x00, 0x47, 0x0F, 0x16, 0x47, 0x11, -/* 000129E0 */ 0x10, 0x0E, 0x6E, 0x00, 0x10, 0x0E, 0x36, 0x00, 0x0F, 0x8D, 0x02, 0x05, 0x16, 0x07, 0x00, 0x07, -/* 000129F0 */ 0x02, 0x00, 0x5A, 0x00, 0x03, 0x5B, 0x01, 0x0F, 0x06, 0x00, 0xEE, 0x02, 0x16, 0x16, 0x06, 0x00, -/* 00012A00 */ 0x11, 0x03, 0x00, 0x16, 0x05, 0x09, 0x17, 0x00, 0x8D, 0x02, 0x33, 0x16, 0x08, 0x00, 0x4B, 0x16, -/* 00012A10 */ 0x0E, 0x07, 0x00, 0x16, 0x2F, 0x10, 0x10, 0x06, 0x09, 0x04, 0x00, 0x2F, 0x10, 0x10, 0x07, 0x47, -/* 00012A20 */ 0x16, 0x10, 0x8D, 0x02, 0x06, 0x17, 0x03, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x8D, 0x02, -/* 00012A30 */ 0x19, 0x18, 0x09, 0x00, 0x5B, 0x01, 0x18, 0x07, 0x00, 0x5B, 0x02, 0x0F, 0x07, 0x00, 0x5B, 0x03, -/* 00012A40 */ 0x06, 0x07, 0x00, 0xEE, 0x04, 0x17, 0x17, 0x07, 0x00, 0x2F, 0x16, 0x16, 0x17, 0x47, 0x10, 0x16, -/* 00012A50 */ 0x09, 0x05, 0x00, 0xA6, 0x16, 0x47, 0x10, 0x16, 0x8D, 0x02, 0x04, 0x16, 0x0A, 0x00, 0x07, 0x03, -/* 00012A60 */ 0x00, 0x5A, 0x00, 0x03, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, -/* 00012A70 */ 0x00, 0x79, 0x10, 0x17, 0x02, 0x79, 0x0F, 0x17, 0x03, 0x79, 0x11, 0x17, 0x04, 0x5B, 0x01, 0x17, -/* 00012A80 */ 0x08, 0x00, 0x5B, 0x02, 0x02, 0x08, 0x00, 0xEE, 0x03, 0x00, 0x16, 0x08, 0x00, 0x09, 0x02, 0x00, -/* 00012A90 */ 0xA6, 0x00, 0x24, 0x00, 0x01, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, -/* 00012AA0 */ 0x00, 0x00, 0x00, 0xF7, 0x01, 0x00, 0x00, 0xFB, 0x01, 0x00, 0x00, 0xF9, 0x01, 0x00, 0x00, 0xFE, -/* 00012AB0 */ 0xE0, 0x01, 0xFE, 0x83, 0x02, 0xFE, 0xF7, 0x01, 0xFE, 0xFB, 0x01, 0xFE, 0xF9, 0x01, 0x0D, 0xFE, -/* 00012AC0 */ 0xB1, 0x04, 0x00, 0xFF, 0x3C, 0x8B, 0x01, 0x00, 0x15, 0x08, 0x00, 0x00, 0x00, 0x27, 0x00, 0x36, -/* 00012AD0 */ 0x00, 0x08, 0x00, 0x81, 0x00, 0x1F, 0x00, 0x3A, 0x00, 0x04, 0x00, 0x1B, 0x00, 0x2A, 0x00, 0x53, -/* 00012AE0 */ 0x02, 0x35, 0x00, 0x49, 0x00, 0x1E, 0x00, 0x37, 0x00, 0x0F, 0x00, 0x50, 0x00, 0x08, 0x00, 0x1F, -/* 00012AF0 */ 0x00, 0x2A, 0x00, 0xB8, 0x01, 0x08, 0x00, 0xF9, 0x00, 0x03, 0x00, 0x29, 0x00, 0x04, 0x00, 0x1C, -/* 00012B00 */ 0x00, 0x23, 0x00, 0x3E, 0x00, 0x0C, 0x00, 0x2E, 0x00, 0x07, 0x00, 0x3E, 0x00, 0x04, 0x00, 0x40, -/* 00012B10 */ 0x00, 0x34, 0x00, 0x5C, 0x00, 0x05, 0x00, 0x29, 0x00, 0x3A, 0x00, 0x99, 0x00, 0x00, 0x21, 0x2C, -/* 00012B20 */ 0x01, 0x00, 0x26, 0x2B, 0x01, 0x00, 0xBF, 0x5C, 0x0A, 0xC1, 0x23, 0x88, 0x01, 0x00, 0xFE, 0x03, -/* 00012B30 */ 0x09, 0x3D, 0xA2, 0x41, 0xD1, 0x00, 0x88, 0xFF, 0xBB, 0x8F, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, -/* 00012B40 */ 0x00, 0x02, 0x02, 0xFF, 0xBB, 0x8F, 0x01, 0x00, 0xFE, 0x77, 0x01, 0xFE, 0x77, 0x01, 0x41, 0x07, -/* 00012B50 */ 0x05, 0x09, 0x05, 0x22, 0x20, 0x03, 0x01, 0x03, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x08, 0x01, -/* 00012B60 */ 0x01, 0x08, 0x01, 0xFF, 0x99, 0x8D, 0x03, 0x03, 0x0A, 0x00, 0x00, 0x6B, 0x09, 0x0A, 0x00, 0x07, -/* 00012B70 */ 0x03, 0x00, 0x5A, 0x00, 0x0A, 0x5B, 0x01, 0x05, 0x00, 0x00, 0xE0, 0x0B, 0x00, 0x5B, 0x02, 0x0B, -/* 00012B80 */ 0x00, 0x00, 0xF2, 0x03, 0x09, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x06, 0x09, 0x96, -/* 00012B90 */ 0x09, 0x06, 0x02, 0x00, 0x00, 0x47, 0x07, 0x09, 0x8D, 0x03, 0x06, 0x09, 0x01, 0x00, 0x07, 0x04, -/* 00012BA0 */ 0x00, 0x5A, 0x00, 0x03, 0x8D, 0x03, 0x17, 0x0A, 0x02, 0x00, 0x5B, 0x01, 0x0A, 0x01, 0x00, 0x8D, -/* 00012BB0 */ 0x01, 0x04, 0x0A, 0x03, 0x00, 0x5B, 0x02, 0x0A, 0x01, 0x00, 0x5B, 0x03, 0x07, 0x01, 0x00, 0xEE, -/* 00012BC0 */ 0x04, 0x09, 0x09, 0x01, 0x00, 0x15, 0x03, 0x00, 0x09, 0x04, 0x09, 0x2D, 0x00, 0x8D, 0x03, 0x06, -/* 00012BD0 */ 0x09, 0x01, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x8D, 0x03, 0x18, 0x0A, 0x04, 0x00, 0x5B, -/* 00012BE0 */ 0x01, 0x0A, 0x02, 0x00, 0x8D, 0x01, 0x02, 0x0A, 0x05, 0x00, 0x5B, 0x02, 0x0A, 0x02, 0x00, 0x5B, -/* 00012BF0 */ 0x03, 0x05, 0x02, 0x00, 0xEE, 0x04, 0xFF, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x83, -/* 00012C00 */ 0x02, 0x0E, 0xFE, 0xB2, 0x04, 0x00, 0xFF, 0xDF, 0x8F, 0x01, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, -/* 00012C10 */ 0x2A, 0x00, 0x7A, 0x00, 0x09, 0x00, 0x24, 0x00, 0x35, 0x00, 0x5F, 0x00, 0x2F, 0x00, 0x55, 0x00, -/* 00012C20 */ 0x00, 0xBF, 0x5C, 0x08, 0x01, 0x00, 0x88, 0x01, 0x00, 0xFE, 0xF6, 0x08, 0x3C, 0xA2, 0x41, 0xD1, -/* 00012C30 */ 0x00, 0x87, 0xFF, 0x78, 0x8C, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0x78, -/* 00012C40 */ 0x8C, 0x01, 0x00, 0x7D, 0x7D, 0x41, 0x04, 0x05, 0x07, 0x06, 0x0F, 0x0F, 0x03, 0x01, 0x03, 0x06, -/* 00012C50 */ 0x06, 0xFE, 0xAF, 0x03, 0x06, 0xFE, 0x5B, 0x03, 0x08, 0x3E, 0x8D, 0x03, 0x06, 0x07, 0x00, 0x00, -/* 00012C60 */ 0x07, 0x05, 0x00, 0x5A, 0x00, 0x04, 0x8D, 0x03, 0x1D, 0x08, 0x01, 0x00, 0x5B, 0x01, 0x08, 0x00, -/* 00012C70 */ 0x00, 0x8D, 0x01, 0x03, 0x08, 0x02, 0x00, 0x5B, 0x02, 0x08, 0x00, 0x00, 0x2F, 0x08, 0x02, 0x05, -/* 00012C80 */ 0x5B, 0x03, 0x08, 0x00, 0x00, 0x5B, 0x04, 0x03, 0x00, 0x00, 0xEE, 0x05, 0x07, 0x07, 0x00, 0x00, -/* 00012C90 */ 0x92, 0x01, 0x03, 0x07, 0xA6, 0x00, 0x24, 0x00, 0xFF, 0x9C, 0x8C, 0x01, 0x00, 0x02, 0x00, 0x00, -/* 00012CA0 */ 0x00, 0x00, 0x3C, 0x00, 0x58, 0x00, 0x00, 0x3F, 0x5C, 0x0A, 0xC1, 0x03, 0x88, 0x05, 0x00, 0xFE, -/* 00012CB0 */ 0xD5, 0x08, 0x1E, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xE9, 0x02, 0x84, 0xFF, 0xC7, 0x86, 0x01, 0x00, -/* 00012CC0 */ 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0xC7, 0x86, 0x01, 0x00, 0xFE, 0x11, 0x04, -/* 00012CD0 */ 0xFE, 0x11, 0x04, 0x07, 0x05, 0x09, 0x04, 0x29, 0x26, 0x02, 0x01, 0x04, 0x03, 0x03, 0x03, 0x03, -/* 00012CE0 */ 0x03, 0x08, 0x08, 0x01, 0x00, 0x06, 0xFE, 0xAF, 0x03, 0xA4, 0x4F, 0x06, 0x4F, 0x07, 0x8D, 0x01, -/* 00012CF0 */ 0x10, 0x09, 0x00, 0x00, 0x4B, 0x09, 0x0F, 0x14, 0x00, 0x09, 0x8D, 0x01, 0x05, 0x09, 0x01, 0x00, -/* 00012D00 */ 0x4B, 0x09, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x02, 0xEE, 0x01, 0xFF, 0x09, 0x00, 0x00, 0x8D, 0x02, -/* 00012D10 */ 0x03, 0x0A, 0x02, 0x00, 0x6B, 0x09, 0x0A, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0A, 0x5B, 0x01, -/* 00012D20 */ 0x05, 0x01, 0x00, 0x8D, 0x01, 0x10, 0x0B, 0x00, 0x00, 0x4B, 0x0B, 0x5B, 0x02, 0x0B, 0x01, 0x00, -/* 00012D30 */ 0xF2, 0x03, 0x09, 0x09, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x06, 0x09, 0x0F, 0x05, 0x00, -/* 00012D40 */ 0x06, 0xA6, 0x00, 0x09, 0x46, 0x00, 0x96, 0x0B, 0x06, 0x03, 0x00, 0x00, 0x6B, 0x0A, 0x0B, 0x01, -/* 00012D50 */ 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0B, 0x5B, 0x01, 0x04, 0x02, 0x00, 0xF2, 0x02, 0x0A, 0x0A, 0x01, -/* 00012D60 */ 0x00, 0x00, 0x00, 0x02, 0x00, 0x6B, 0x09, 0x0A, 0x02, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0A, 0xD3, -/* 00012D70 */ 0x00, 0x0B, 0x5B, 0x01, 0x0B, 0x03, 0x00, 0xF2, 0x02, 0x09, 0x09, 0x02, 0x00, 0x00, 0x00, 0x03, -/* 00012D80 */ 0x00, 0x47, 0x07, 0x09, 0x47, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x83, -/* 00012D90 */ 0x02, 0xFE, 0x45, 0x01, 0x7E, 0xFF, 0xE3, 0x86, 0x01, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x0C, -/* 00012DA0 */ 0x00, 0x24, 0x00, 0x14, 0x00, 0x2B, 0x00, 0x2F, 0x00, 0x4B, 0x00, 0x04, 0x00, 0x1A, 0x00, 0x05, -/* 00012DB0 */ 0x00, 0x5C, 0x02, 0x3E, 0x00, 0xCD, 0x00, 0x08, 0x00, 0x17, 0x00, 0x00, 0xC0, 0x2D, 0x01, 0x00, -/* 00012DC0 */ 0xBF, 0x4C, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0xFE, 0xE8, 0x08, 0x36, 0xA2, 0x41, 0xD0, 0x00, -/* 00012DD0 */ 0x85, 0xFE, 0x01, 0x10, 0xFF, 0x21, 0x8A, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, -/* 00012DE0 */ 0xFF, 0x21, 0x8A, 0x01, 0x00, 0x0A, 0x0A, 0x01, 0x02, 0x02, 0x03, 0x0A, 0x0A, 0x02, 0x17, 0xAA, -/* 00012DF0 */ 0x03, 0x0F, 0x02, 0x00, 0x02, 0xA9, 0x03, 0xAA, 0x00, 0x0F, 0x02, 0x00, 0x03, 0xA9, 0x00, 0x09, -/* 00012E00 */ 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFF, 0x28, 0x8A, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -/* 00012E10 */ 0x15, 0x00, 0x03, 0x00, 0x00, 0xBF, 0x5C, 0x0A, 0xC1, 0x43, 0xA8, 0x01, 0x00, 0xFE, 0xBE, 0x08, -/* 00012E20 */ 0x1E, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xAB, 0x04, 0x83, 0xFF, 0x34, 0x82, 0x01, 0x00, 0xFF, 0x00, -/* 00012E30 */ 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0x34, 0x82, 0x01, 0x00, 0xFE, 0x73, 0x04, 0xFE, 0x73, 0x04, -/* 00012E40 */ 0x01, 0x09, 0x09, 0x0D, 0x04, 0x56, 0x4A, 0x02, 0x05, 0x05, 0x04, 0x05, 0x05, 0x05, 0x05, 0x01, -/* 00012E50 */ 0x0C, 0x0D, 0x07, 0x08, 0x01, 0x01, 0x01, 0x02, 0x06, 0xFE, 0xAF, 0x03, 0x06, 0xFE, 0x5B, 0x03, -/* 00012E60 */ 0x01, 0x03, 0xFE, 0x5D, 0x01, 0x4F, 0x0A, 0x4F, 0x0B, 0x8D, 0x02, 0x03, 0x0F, 0x00, 0x00, 0x60, -/* 00012E70 */ 0x0F, 0x0F, 0x00, 0x6B, 0x0E, 0x0F, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0F, 0x5B, 0x01, 0x09, -/* 00012E80 */ 0x00, 0x00, 0xF2, 0x02, 0x0E, 0x0E, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x0A, 0x0E, 0xA6, -/* 00012E90 */ 0x0E, 0x14, 0x03, 0x00, 0x0A, 0x0E, 0x09, 0x0A, 0x01, 0x8D, 0x02, 0x03, 0x0F, 0x00, 0x00, 0x6B, -/* 00012EA0 */ 0x0E, 0x0F, 0x02, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0F, 0x5B, 0x01, 0x09, 0x01, 0x00, 0xF2, 0x02, -/* 00012EB0 */ 0x0E, 0x0E, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x0A, 0x0E, 0x14, 0x03, 0x00, 0x0A, 0x02, -/* 00012EC0 */ 0x09, 0x9A, 0x00, 0x8D, 0x01, 0x0F, 0x0E, 0x01, 0x00, 0x4B, 0x0E, 0x0F, 0x14, 0x00, 0x0E, 0x8D, -/* 00012ED0 */ 0x01, 0x05, 0x0E, 0x02, 0x00, 0x4B, 0x0E, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x03, 0xEE, 0x01, 0xFF, -/* 00012EE0 */ 0x0E, 0x02, 0x00, 0x8D, 0x02, 0x03, 0x0F, 0x00, 0x00, 0x6B, 0x0E, 0x0F, 0x03, 0x07, 0x03, 0x00, -/* 00012EF0 */ 0x5A, 0x00, 0x0F, 0x5B, 0x01, 0x09, 0x03, 0x00, 0x8D, 0x01, 0x0F, 0x10, 0x01, 0x00, 0x4B, 0x10, -/* 00012F00 */ 0x5B, 0x02, 0x10, 0x03, 0x00, 0xF2, 0x03, 0x0E, 0x0E, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x47, -/* 00012F10 */ 0x0B, 0x0E, 0x96, 0x0E, 0x0B, 0x04, 0x00, 0x00, 0x96, 0x0F, 0x0B, 0x05, 0x01, 0x00, 0x0E, 0x10, -/* 00012F20 */ 0x00, 0x0F, 0x96, 0x10, 0x0B, 0x05, 0x02, 0x00, 0x2F, 0x10, 0x06, 0x10, 0x47, 0x0F, 0x10, 0x09, -/* 00012F30 */ 0x03, 0x00, 0x47, 0x0F, 0x07, 0x2F, 0x0E, 0x0E, 0x0F, 0x96, 0x0F, 0x0B, 0x08, 0x03, 0x00, 0x0E, -/* 00012F40 */ 0x10, 0x00, 0x0F, 0x96, 0x10, 0x0B, 0x08, 0x04, 0x00, 0x2F, 0x10, 0x06, 0x10, 0x47, 0x0F, 0x10, -/* 00012F50 */ 0x09, 0x03, 0x00, 0x47, 0x0F, 0x07, 0x2F, 0x0E, 0x0E, 0x0F, 0x47, 0x0A, 0x0E, 0x8D, 0x02, 0x03, -/* 00012F60 */ 0x0F, 0x00, 0x00, 0x60, 0x0F, 0x0F, 0x00, 0x6B, 0x0E, 0x0F, 0x04, 0x07, 0x03, 0x00, 0x5A, 0x00, -/* 00012F70 */ 0x0F, 0x5B, 0x01, 0x09, 0x04, 0x00, 0xA6, 0x10, 0x14, 0x03, 0x00, 0x0A, 0x10, 0x09, 0x0E, 0x00, -/* 00012F80 */ 0x8D, 0x02, 0x34, 0x11, 0x03, 0x00, 0x4B, 0x11, 0x47, 0x10, 0x11, 0x09, 0x03, 0x00, 0x47, 0x10, -/* 00012F90 */ 0x0A, 0x5B, 0x02, 0x10, 0x04, 0x00, 0xF2, 0x03, 0xFF, 0x0E, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, -/* 00012FA0 */ 0x09, 0x15, 0x00, 0x8D, 0x02, 0x34, 0x0E, 0x03, 0x00, 0x4B, 0x0E, 0x14, 0x03, 0x00, 0x0A, 0x0E, -/* 00012FB0 */ 0x09, 0x05, 0x00, 0xA6, 0x0E, 0x47, 0x0A, 0x0E, 0x47, 0x00, 0x0A, 0x09, 0x02, 0x00, 0xA6, 0x00, -/* 00012FC0 */ 0x24, 0x00, 0xFE, 0x62, 0x03, 0xFE, 0x84, 0x01, 0xFE, 0xDD, 0x01, 0xFE, 0x83, 0x02, 0xFE, 0x87, -/* 00012FD0 */ 0x01, 0xFF, 0x5E, 0x82, 0x01, 0x00, 0x0D, 0x04, 0x00, 0x00, 0x00, 0x26, 0x00, 0x53, 0x00, 0x0A, -/* 00012FE0 */ 0x00, 0x30, 0x00, 0x22, 0x00, 0x51, 0x00, 0x08, 0x00, 0x2F, 0x00, 0x0C, 0x00, 0x2D, 0x00, 0x14, -/* 00012FF0 */ 0x00, 0x3A, 0x00, 0x2F, 0x00, 0xB1, 0x00, 0x4B, 0x00, 0x34, 0x01, 0x46, 0x00, 0x80, 0x00, 0x10, -/* 00013000 */ 0x00, 0x30, 0x00, 0x05, 0x00, 0x2E, 0x00, 0x08, 0x00, 0x1B, 0x00, 0x00, 0xBF, 0x5C, 0x0A, 0xC1, -/* 00013010 */ 0x43, 0xA8, 0x01, 0x00, 0xFE, 0xA3, 0x08, 0x1F, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xAA, 0x04, 0x82, -/* 00013020 */ 0xFF, 0x8E, 0x7D, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFF, 0x8E, 0x7D, 0x01, -/* 00013030 */ 0x00, 0xFE, 0x86, 0x04, 0xFE, 0x86, 0x04, 0x01, 0x0A, 0x09, 0x0E, 0x04, 0x5F, 0x52, 0x02, 0x05, -/* 00013040 */ 0x05, 0x04, 0x05, 0x05, 0x05, 0x05, 0x01, 0x0D, 0x0E, 0x07, 0x08, 0x01, 0x01, 0x01, 0x02, 0x06, -/* 00013050 */ 0xFE, 0xAF, 0x03, 0x06, 0xFE, 0x5B, 0x03, 0x01, 0x03, 0xFE, 0x7C, 0x01, 0x4F, 0x0C, 0x8D, 0x02, -/* 00013060 */ 0x03, 0x10, 0x00, 0x00, 0x60, 0x10, 0x10, 0x00, 0x6B, 0x0F, 0x10, 0x01, 0x07, 0x02, 0x00, 0x5A, -/* 00013070 */ 0x00, 0x10, 0x5B, 0x01, 0x09, 0x00, 0x00, 0xF2, 0x02, 0x0F, 0x0F, 0x01, 0x00, 0x00, 0x00, 0x00, -/* 00013080 */ 0x00, 0x47, 0x0B, 0x0F, 0xA6, 0x0F, 0x14, 0x03, 0x00, 0x0B, 0x0F, 0x09, 0x0A, 0x01, 0x8D, 0x02, -/* 00013090 */ 0x03, 0x10, 0x00, 0x00, 0x6B, 0x0F, 0x10, 0x02, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x10, 0x5B, 0x01, -/* 000130A0 */ 0x09, 0x01, 0x00, 0xF2, 0x02, 0x0F, 0x0F, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x0B, 0x0F, -/* 000130B0 */ 0x14, 0x03, 0x00, 0x0B, 0x02, 0x09, 0x9A, 0x00, 0x8D, 0x01, 0x0F, 0x0F, 0x01, 0x00, 0x4B, 0x0F, -/* 000130C0 */ 0x0F, 0x14, 0x00, 0x0F, 0x8D, 0x01, 0x05, 0x0F, 0x02, 0x00, 0x4B, 0x0F, 0x07, 0x01, 0x00, 0x5A, -/* 000130D0 */ 0x00, 0x03, 0xEE, 0x01, 0xFF, 0x0F, 0x02, 0x00, 0x8D, 0x02, 0x03, 0x10, 0x00, 0x00, 0x6B, 0x0F, -/* 000130E0 */ 0x10, 0x03, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x10, 0x5B, 0x01, 0x09, 0x03, 0x00, 0x8D, 0x01, 0x0F, -/* 000130F0 */ 0x11, 0x01, 0x00, 0x4B, 0x11, 0x5B, 0x02, 0x11, 0x03, 0x00, 0xF2, 0x03, 0x0F, 0x0F, 0x03, 0x00, -/* 00013100 */ 0x00, 0x00, 0x03, 0x00, 0x47, 0x0C, 0x0F, 0x96, 0x0F, 0x0C, 0x04, 0x00, 0x00, 0x96, 0x10, 0x0C, -/* 00013110 */ 0x05, 0x01, 0x00, 0x0E, 0x10, 0x00, 0x10, 0x96, 0x11, 0x0C, 0x05, 0x02, 0x00, 0x2F, 0x11, 0x06, -/* 00013120 */ 0x11, 0x47, 0x10, 0x11, 0x09, 0x03, 0x00, 0x47, 0x10, 0x07, 0x2F, 0x0F, 0x0F, 0x10, 0x96, 0x10, -/* 00013130 */ 0x0C, 0x08, 0x03, 0x00, 0x0E, 0x10, 0x00, 0x10, 0x96, 0x11, 0x0C, 0x08, 0x04, 0x00, 0x2F, 0x11, -/* 00013140 */ 0x06, 0x11, 0x47, 0x10, 0x11, 0x09, 0x03, 0x00, 0x47, 0x10, 0x07, 0x2F, 0x0F, 0x0F, 0x10, 0x47, -/* 00013150 */ 0x0B, 0x0F, 0x8D, 0x02, 0x03, 0x10, 0x00, 0x00, 0x60, 0x10, 0x10, 0x00, 0x6B, 0x0F, 0x10, 0x04, -/* 00013160 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x10, 0x5B, 0x01, 0x09, 0x04, 0x00, 0xA6, 0x11, 0x14, 0x03, 0x00, -/* 00013170 */ 0x0B, 0x11, 0x09, 0x0E, 0x00, 0x8D, 0x02, 0x34, 0x12, 0x03, 0x00, 0x4B, 0x12, 0x47, 0x11, 0x12, -/* 00013180 */ 0x09, 0x03, 0x00, 0x47, 0x11, 0x0B, 0x5B, 0x02, 0x11, 0x04, 0x00, 0xF2, 0x03, 0xFF, 0x0F, 0x04, -/* 00013190 */ 0x00, 0x00, 0x00, 0x04, 0x00, 0x09, 0x15, 0x00, 0x8D, 0x02, 0x34, 0x0F, 0x03, 0x00, 0x4B, 0x0F, -/* 000131A0 */ 0x14, 0x03, 0x00, 0x0B, 0x0F, 0x09, 0x05, 0x00, 0xA6, 0x0F, 0x47, 0x0B, 0x0F, 0x14, 0x03, 0x00, -/* 000131B0 */ 0x0A, 0x09, 0x09, 0x09, 0x00, 0x47, 0x00, 0x0B, 0x09, 0x1B, 0x00, 0x09, 0x16, 0x00, 0x14, 0x03, -/* 000131C0 */ 0x00, 0x0A, 0x0B, 0x09, 0x08, 0x00, 0xA6, 0x00, 0x09, 0x0B, 0x00, 0x09, 0x06, 0x00, 0x47, 0x00, -/* 000131D0 */ 0x0B, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x63, 0x03, 0xFE, 0x84, 0x01, 0xFE, 0xDE, -/* 000131E0 */ 0x01, 0xFE, 0x83, 0x02, 0xFE, 0x87, 0x01, 0xFF, 0xB9, 0x7D, 0x01, 0x00, 0x11, 0x02, 0x00, 0x00, -/* 000131F0 */ 0x00, 0x26, 0x00, 0x46, 0x00, 0x0A, 0x00, 0x30, 0x00, 0x22, 0x00, 0x44, 0x00, 0x08, 0x00, 0x2F, -/* 00013200 */ 0x00, 0x0C, 0x00, 0x2D, 0x00, 0x14, 0x00, 0x3A, 0x00, 0x2F, 0x00, 0x52, 0x00, 0x4B, 0x00, 0x0C, -/* 00013210 */ 0x01, 0x46, 0x00, 0x73, 0x00, 0x10, 0x00, 0x30, 0x00, 0x05, 0x00, 0x2F, 0x00, 0x08, 0x00, 0x2C, -/* 00013220 */ 0x00, 0x09, 0x00, 0x26, 0x00, 0x08, 0x00, 0x34, 0x00, 0x08, 0x00, 0x2F, 0x00, 0x08, 0x00, 0x25, -/* 00013230 */ 0x00, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x9F, 0x08, 0x1C, 0xA2, 0x41, -/* 00013240 */ 0xC1, 0x00, 0xFE, 0xE6, 0x02, 0x81, 0xFF, 0x1B, 0x7D, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, -/* 00013250 */ 0x03, 0x03, 0xFF, 0x1B, 0x7D, 0x01, 0x00, 0x51, 0x51, 0x01, 0x05, 0x02, 0x05, 0x04, 0x0B, 0x0B, -/* 00013260 */ 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x2B, 0x8D, 0x02, 0x03, 0x06, 0x00, 0x00, 0x6B, -/* 00013270 */ 0x05, 0x06, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x06, 0x5B, 0x01, 0x03, 0x00, 0x00, 0x5B, 0x02, -/* 00013280 */ 0x02, 0x00, 0x00, 0xF2, 0x03, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, -/* 00013290 */ 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xFD, 0x01, 0xFF, 0x38, 0x7D, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, -/* 000132A0 */ 0x00, 0x29, 0x00, 0x33, 0x00, 0x00, 0xBF, 0x4C, 0x00, 0xC0, 0x03, 0x80, 0x01, 0x00, 0xFE, 0x99, -/* 000132B0 */ 0x08, 0x1C, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xE5, 0x02, 0x80, 0xFF, 0x81, 0x7C, 0x01, 0x00, 0xFF, -/* 000132C0 */ 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0x81, 0x7C, 0x01, 0x00, 0x7B, 0x7B, 0x41, 0x02, 0x04, -/* 000132D0 */ 0x05, 0x09, 0x09, 0x02, 0x01, 0x01, 0x01, 0x01, 0x03, 0x1C, 0x00, 0x0A, 0x80, 0x03, 0x07, 0x00, -/* 000132E0 */ 0x0A, 0x80, 0x1B, 0x60, 0x05, 0x04, 0x00, 0x14, 0x0C, 0x00, 0x05, 0x02, 0x60, 0x05, 0x04, 0x00, -/* 000132F0 */ 0x14, 0x03, 0x00, 0x05, 0x03, 0x09, 0x02, 0x00, 0x23, 0x04, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xFE, -/* 00013300 */ 0x00, 0xFF, 0x99, 0x7C, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x4A, 0x00, 0x04, -/* 00013310 */ 0x00, 0x18, 0x00, 0x00, 0xBF, 0x7C, 0x0A, 0x02, 0x00, 0x80, 0x09, 0x00, 0xFE, 0x8E, 0x08, 0x1B, -/* 00013320 */ 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xE8, 0x02, 0x7F, 0xFF, 0x28, 0x7B, 0x01, 0x00, 0xFF, 0x00, 0x10, -/* 00013330 */ 0x01, 0x00, 0x04, 0x04, 0xFF, 0x28, 0x7B, 0x01, 0x00, 0xD5, 0xD5, 0x41, 0x06, 0x05, 0x09, 0x03, -/* 00013340 */ 0x14, 0x12, 0x0F, 0x02, 0x02, 0x01, 0x01, 0x05, 0x3D, 0x01, 0x00, 0x08, 0x01, 0x01, 0x41, 0x4F, -/* 00013350 */ 0x08, 0x47, 0x08, 0x02, 0xEB, 0x00, 0xEC, 0x00, 0x12, 0x03, 0x00, 0x08, 0x06, 0x09, 0x2A, 0x00, -/* 00013360 */ 0xB9, 0x09, 0x08, 0x05, 0x00, 0x00, 0x0E, 0x1A, 0x00, 0x09, 0x47, 0x09, 0x07, 0x07, 0x02, 0x00, -/* 00013370 */ 0x5A, 0x00, 0x03, 0x96, 0x0A, 0x05, 0x08, 0x01, 0x00, 0x5B, 0x01, 0x0A, 0x00, 0x00, 0xEE, 0x02, -/* 00013380 */ 0xFF, 0x09, 0x00, 0x00, 0x28, 0x08, 0x08, 0x09, 0xCC, 0xFF, 0xED, 0x00, 0xA6, 0x00, 0x24, 0x00, -/* 00013390 */ 0xFF, 0x4F, 0x7B, 0x01, 0x00, 0x06, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x20, 0x00, 0x08, 0x00, -/* 000133A0 */ 0x20, 0x00, 0x0A, 0x00, 0x26, 0x00, 0x1A, 0x00, 0x2E, 0x00, 0x0A, 0x00, 0x19, 0x00, 0x00, 0xBF, -/* 000133B0 */ 0x5C, 0x08, 0xC1, 0x43, 0xA8, 0x01, 0x00, 0xFE, 0x81, 0x08, 0x22, 0xA2, 0x41, 0xC1, 0x00, 0xFE, -/* 000133C0 */ 0x7F, 0x03, 0x7E, 0xFF, 0x9F, 0x79, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, -/* 000133D0 */ 0x9F, 0x79, 0x01, 0x00, 0xFE, 0x6B, 0x01, 0xFE, 0x6B, 0x01, 0x01, 0x08, 0x04, 0x08, 0x04, 0x2A, -/* 000133E0 */ 0x27, 0x02, 0x03, 0x03, 0x02, 0x02, 0x02, 0x02, 0x01, 0x07, 0x08, 0x07, 0x08, 0x9D, 0x4F, 0x05, -/* 000133F0 */ 0x4F, 0x06, 0x8D, 0x02, 0x03, 0x0A, 0x00, 0x00, 0x6B, 0x09, 0x0A, 0x00, 0x07, 0x02, 0x00, 0x5A, -/* 00013400 */ 0x00, 0x0A, 0x5B, 0x01, 0x04, 0x00, 0x00, 0xF2, 0x02, 0x09, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 00013410 */ 0x00, 0x47, 0x05, 0x09, 0x14, 0x03, 0x00, 0x05, 0x02, 0x09, 0x65, 0x00, 0x8D, 0x01, 0x11, 0x09, -/* 00013420 */ 0x01, 0x00, 0x4B, 0x09, 0x0F, 0x14, 0x00, 0x09, 0x8D, 0x01, 0x05, 0x09, 0x02, 0x00, 0x4B, 0x09, -/* 00013430 */ 0x07, 0x01, 0x00, 0x5A, 0x00, 0x03, 0xEE, 0x01, 0xFF, 0x09, 0x01, 0x00, 0x8D, 0x02, 0x03, 0x0A, -/* 00013440 */ 0x00, 0x00, 0x6B, 0x09, 0x0A, 0x01, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0A, 0x5B, 0x01, 0x04, 0x02, -/* 00013450 */ 0x00, 0x8D, 0x01, 0x11, 0x0B, 0x01, 0x00, 0x4B, 0x0B, 0x5B, 0x02, 0x0B, 0x02, 0x00, 0xF2, 0x03, -/* 00013460 */ 0x09, 0x09, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x47, 0x06, 0x09, 0xAA, 0x09, 0x0F, 0x02, 0x00, -/* 00013470 */ 0x06, 0xA9, 0x09, 0xAA, 0x00, 0x0F, 0x02, 0x00, 0x09, 0xA9, 0x00, 0x09, 0x0B, 0x00, 0x09, 0x06, -/* 00013480 */ 0x00, 0x47, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xD7, 0x01, 0xFE, 0x83, -/* 00013490 */ 0x02, 0xFF, 0xBC, 0x79, 0x01, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x22, 0x00, 0x40, 0x00, 0x08, -/* 000134A0 */ 0x00, 0x23, 0x00, 0x0C, 0x00, 0x24, 0x00, 0x14, 0x00, 0x32, 0x00, 0x2F, 0x00, 0x4A, 0x00, 0x16, -/* 000134B0 */ 0x00, 0x2D, 0x00, 0x08, 0x00, 0x1D, 0x00, 0x00, 0xBF, 0x5C, 0x18, 0xC1, 0x03, 0x88, 0x01, 0x00, -/* 000134C0 */ 0xFE, 0x74, 0x08, 0x1F, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x7E, 0x03, 0x7D, 0xFF, 0x90, 0x77, 0x01, -/* 000134D0 */ 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFF, 0x90, 0x77, 0x01, 0x00, 0xFE, 0xEA, 0x01, -/* 000134E0 */ 0xFE, 0xEA, 0x01, 0x41, 0x06, 0x05, 0x09, 0x04, 0x14, 0x12, 0x02, 0x01, 0x01, 0x01, 0x03, 0x03, -/* 000134F0 */ 0x03, 0x03, 0x08, 0x07, 0x06, 0xFE, 0x5B, 0x03, 0x05, 0xFE, 0xA9, 0x04, 0x4D, 0x4F, 0x07, 0x8D, -/* 00013500 */ 0x02, 0x03, 0x0A, 0x00, 0x00, 0x6B, 0x09, 0x0A, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0A, 0x5B, -/* 00013510 */ 0x01, 0x05, 0x00, 0x00, 0x5B, 0x02, 0x06, 0x00, 0x00, 0xF2, 0x03, 0x09, 0x09, 0x00, 0x00, 0x00, -/* 00013520 */ 0x00, 0x00, 0x00, 0x47, 0x07, 0x09, 0x14, 0x03, 0x00, 0x07, 0x02, 0x09, 0x18, 0x00, 0x75, 0x03, -/* 00013530 */ 0x05, 0x01, 0x47, 0x09, 0x05, 0xCD, 0x0A, 0x02, 0x00, 0x00, 0x9F, 0x00, 0x04, 0x0A, 0x9F, 0x01, -/* 00013540 */ 0x03, 0x0A, 0x75, 0x0A, 0x09, 0x02, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xE4, 0x01, 0xFE, 0x0C, 0x02, -/* 00013550 */ 0xFE, 0x30, 0x02, 0xFF, 0xBF, 0x77, 0x01, 0x00, 0x05, 0x02, 0x00, 0x00, 0x00, 0x27, 0x00, 0x4F, -/* 00013560 */ 0x00, 0x08, 0x00, 0x71, 0x00, 0x04, 0x00, 0x33, 0x00, 0x16, 0x00, 0xC7, 0x00, 0x00, 0xBF, 0x5C, -/* 00013570 */ 0x08, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x63, 0x08, 0x1D, 0xA0, 0x41, 0xC1, 0x00, 0xFE, 0x67, -/* 00013580 */ 0x03, 0x7C, 0xFF, 0xA5, 0x75, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFF, 0xA5, -/* 00013590 */ 0x75, 0x01, 0x00, 0xFE, 0xC9, 0x01, 0xFE, 0xC9, 0x01, 0x01, 0x04, 0x03, 0x05, 0x02, 0x1A, 0x19, -/* 000135A0 */ 0x02, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x04, 0x05, 0xFE, 0xAE, 0x03, 0x66, 0x4F, 0x03, 0x8D, -/* 000135B0 */ 0x01, 0x09, 0x05, 0x00, 0x00, 0x4B, 0x05, 0x0E, 0x19, 0x00, 0x05, 0x8D, 0x02, 0x03, 0x05, 0x01, -/* 000135C0 */ 0x00, 0x60, 0x05, 0x05, 0x00, 0x0E, 0x0B, 0x00, 0x05, 0x8D, 0x01, 0x09, 0x00, 0x00, 0x00, 0x4B, -/* 000135D0 */ 0x00, 0x09, 0x3D, 0x00, 0x8D, 0x02, 0x03, 0x06, 0x01, 0x00, 0x6B, 0x05, 0x06, 0x01, 0x07, 0x01, -/* 000135E0 */ 0x00, 0x5A, 0x00, 0x06, 0xF2, 0x01, 0x05, 0x05, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x03, -/* 000135F0 */ 0x05, 0x0F, 0x09, 0x00, 0x03, 0x01, 0x34, 0x01, 0x01, 0x09, 0x02, 0x09, 0x06, 0x00, 0x01, 0x34, -/* 00013600 */ 0x01, 0x01, 0x09, 0x03, 0x8D, 0x01, 0x09, 0x00, 0x00, 0x00, 0x4B, 0x00, 0x09, 0x02, 0x00, 0xA6, -/* 00013610 */ 0x00, 0x24, 0x00, 0xFE, 0x61, 0x03, 0xFE, 0xDF, 0x01, 0xFF, 0xBB, 0x75, 0x01, 0x00, 0x08, 0x02, -/* 00013620 */ 0x00, 0x00, 0x00, 0x1A, 0x00, 0x39, 0x00, 0x0B, 0x00, 0x2B, 0x00, 0x1D, 0x00, 0x34, 0x00, 0x04, -/* 00013630 */ 0x00, 0x9C, 0x00, 0x09, 0x00, 0x35, 0x00, 0x06, 0x00, 0x2D, 0x00, 0x0D, 0x00, 0x1C, 0x00, 0x00, -/* 00013640 */ 0x3F, 0x5D, 0x08, 0xC1, 0x13, 0x8D, 0x25, 0x00, 0xFE, 0xAF, 0x07, 0x19, 0xA0, 0x41, 0xD1, 0x00, -/* 00013650 */ 0x74, 0xFF, 0xEC, 0x5A, 0x01, 0x00, 0x06, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFF, 0xEC, -/* 00013660 */ 0x5A, 0x01, 0x00, 0xFE, 0x5B, 0x16, 0xFE, 0x5B, 0x16, 0x03, 0xFE, 0x9A, 0x04, 0xFE, 0x9B, 0x04, -/* 00013670 */ 0xFE, 0x9C, 0x04, 0x0C, 0x14, 0x1C, 0x05, 0x8F, 0x89, 0x02, 0x0A, 0x05, 0x07, 0x07, 0x07, 0x07, -/* 00013680 */ 0x05, 0x19, 0x1A, 0x1B, 0x06, 0xFE, 0x3D, 0x03, 0x05, 0xFE, 0x9D, 0x04, 0x08, 0x06, 0xFE, 0x0B, -/* 00013690 */ 0x04, 0x06, 0xFE, 0x40, 0x03, 0x07, 0x06, 0xFE, 0x42, 0x03, 0x0C, 0x06, 0xFE, 0x43, 0x03, 0x06, -/* 000136A0 */ 0xFE, 0x44, 0x03, 0x05, 0xFE, 0x9E, 0x04, 0x06, 0xFE, 0x3F, 0x03, 0x06, 0xFE, 0x4C, 0x03, 0x0B, -/* 000136B0 */ 0x05, 0xFE, 0x9F, 0x04, 0x06, 0xFE, 0xA0, 0x04, 0x05, 0xFE, 0xA1, 0x04, 0x06, 0xFE, 0x0D, 0x04, -/* 000136C0 */ 0xFE, 0x75, 0x02, 0x4F, 0x14, 0x4F, 0x15, 0x4F, 0x16, 0x4F, 0x17, 0x4F, 0x18, 0x4F, 0x1C, 0x94, -/* 000136D0 */ 0x02, 0x1C, 0x4F, 0x1C, 0x94, 0x03, 0x1C, 0x4F, 0x1C, 0x94, 0x04, 0x1C, 0x8D, 0x02, 0x32, 0x1C, -/* 000136E0 */ 0x00, 0x00, 0x15, 0x03, 0x00, 0x1C, 0x02, 0x09, 0x05, 0x00, 0xA6, 0x00, 0x09, 0x47, 0x02, 0xD3, -/* 000136F0 */ 0x00, 0x1C, 0x94, 0x02, 0x1C, 0xD3, 0x01, 0x1C, 0x94, 0x03, 0x1C, 0xD3, 0x02, 0x1C, 0x47, 0x14, -/* 00013700 */ 0x1C, 0x8D, 0x02, 0x23, 0x1C, 0x01, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x03, -/* 00013710 */ 0x00, 0x00, 0x5B, 0x02, 0x14, 0x00, 0x00, 0xEE, 0x03, 0xFF, 0x1C, 0x00, 0x00, 0x8D, 0x02, 0x37, -/* 00013720 */ 0x1D, 0x02, 0x00, 0x4B, 0x1D, 0x6B, 0x1C, 0x1D, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x1D, 0x5B, -/* 00013730 */ 0x01, 0x14, 0x01, 0x00, 0x5B, 0x02, 0x05, 0x01, 0x00, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 00013740 */ 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0xCA, 0x1F, 0x79, 0x1F, 0x1E, 0x01, 0x79, 0x09, 0x1E, 0x02, -/* 00013750 */ 0x79, 0x09, 0x1E, 0x03, 0x79, 0x09, 0x1E, 0x04, 0x5B, 0x03, 0x1E, 0x01, 0x00, 0xF2, 0x04, 0xFF, -/* 00013760 */ 0x1C, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x94, 0x04, 0x0C, 0x8D, 0x02, 0x23, 0x1C, 0x01, 0x00, -/* 00013770 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x04, 0x91, 0x04, 0x1D, 0x03, 0x00, 0x5B, 0x01, 0x1D, 0x02, 0x00, -/* 00013780 */ 0xD3, 0x03, 0x1D, 0x5B, 0x02, 0x1D, 0x02, 0x00, 0xEE, 0x03, 0x1C, 0x1C, 0x02, 0x00, 0x47, 0x15, -/* 00013790 */ 0x1C, 0x8D, 0x02, 0x37, 0x1D, 0x02, 0x00, 0x4B, 0x1D, 0x6B, 0x1C, 0x1D, 0x05, 0x07, 0x03, 0x00, -/* 000137A0 */ 0x5A, 0x00, 0x1D, 0x5B, 0x01, 0x15, 0x03, 0x00, 0x8D, 0x01, 0x16, 0x1E, 0x04, 0x00, 0x4B, 0x1E, -/* 000137B0 */ 0x5B, 0x02, 0x1E, 0x03, 0x00, 0xF2, 0x03, 0x1C, 0x1C, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x47, -/* 000137C0 */ 0x16, 0x1C, 0x8D, 0x02, 0x37, 0x1D, 0x02, 0x00, 0x4B, 0x1D, 0x6B, 0x1C, 0x1D, 0x00, 0x07, 0x04, -/* 000137D0 */ 0x00, 0x5A, 0x00, 0x1D, 0x5B, 0x01, 0x16, 0x04, 0x00, 0x5B, 0x02, 0x0D, 0x04, 0x00, 0xCB, 0x18, -/* 000137E0 */ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x79, 0x0E, 0x1E, 0x01, 0x79, -/* 000137F0 */ 0x09, 0x1E, 0x02, 0x79, 0x09, 0x1E, 0x03, 0x79, 0x0F, 0x1E, 0x04, 0x5B, 0x03, 0x1E, 0x04, 0x00, -/* 00013800 */ 0xF2, 0x04, 0xFF, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x8D, 0x02, 0x37, 0x1D, 0x02, 0x00, -/* 00013810 */ 0x4B, 0x1D, 0x6B, 0x1C, 0x1D, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x1D, 0x5B, 0x01, 0x14, 0x05, -/* 00013820 */ 0x00, 0x5B, 0x02, 0x0E, 0x05, 0x00, 0xCB, 0x30, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1E, -/* 00013830 */ 0x00, 0x00, 0x00, 0x79, 0x16, 0x1E, 0x01, 0x79, 0x0F, 0x1E, 0x02, 0x79, 0x09, 0x1E, 0x03, 0x79, -/* 00013840 */ 0x0F, 0x1E, 0x04, 0x5B, 0x03, 0x1E, 0x05, 0x00, 0xF2, 0x04, 0xFF, 0x1C, 0x00, 0x00, 0x00, 0x00, -/* 00013850 */ 0x05, 0x00, 0xD3, 0x04, 0x1C, 0x47, 0x17, 0x1C, 0x8D, 0x02, 0x23, 0x1C, 0x01, 0x00, 0x07, 0x03, -/* 00013860 */ 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x10, 0x06, 0x00, 0x5B, 0x02, 0x17, 0x06, 0x00, 0xEE, 0x03, -/* 00013870 */ 0xFF, 0x1C, 0x06, 0x00, 0x8D, 0x02, 0x37, 0x1D, 0x02, 0x00, 0x4B, 0x1D, 0x6B, 0x1C, 0x1D, 0x00, -/* 00013880 */ 0x07, 0x04, 0x00, 0x5A, 0x00, 0x1D, 0x60, 0x1E, 0x14, 0x06, 0x5B, 0x01, 0x1E, 0x07, 0x00, 0x5B, -/* 00013890 */ 0x02, 0x11, 0x07, 0x00, 0xCB, 0x48, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, -/* 000138A0 */ 0x00, 0x79, 0x17, 0x1E, 0x01, 0x79, 0x09, 0x1E, 0x03, 0x79, 0x0F, 0x1E, 0x04, 0x79, 0x0F, 0x1E, -/* 000138B0 */ 0x02, 0x5B, 0x03, 0x1E, 0x07, 0x00, 0xF2, 0x04, 0xFF, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, -/* 000138C0 */ 0xD3, 0x05, 0x1C, 0x47, 0x18, 0x1C, 0x8D, 0x02, 0x23, 0x1C, 0x01, 0x00, 0x07, 0x03, 0x00, 0x5A, -/* 000138D0 */ 0x00, 0x04, 0x5B, 0x01, 0x12, 0x08, 0x00, 0x5B, 0x02, 0x18, 0x08, 0x00, 0xEE, 0x03, 0xFF, 0x1C, -/* 000138E0 */ 0x08, 0x00, 0x8D, 0x02, 0x37, 0x1D, 0x02, 0x00, 0x4B, 0x1D, 0x6B, 0x1C, 0x1D, 0x00, 0x07, 0x04, -/* 000138F0 */ 0x00, 0x5A, 0x00, 0x1D, 0x60, 0x1E, 0x14, 0x06, 0x5B, 0x01, 0x1E, 0x09, 0x00, 0x5B, 0x02, 0x13, -/* 00013900 */ 0x09, 0x00, 0xCB, 0x60, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x79, -/* 00013910 */ 0x18, 0x1E, 0x01, 0x79, 0x09, 0x1E, 0x03, 0x79, 0x0F, 0x1E, 0x04, 0x79, 0x0F, 0x1E, 0x02, 0x5B, -/* 00013920 */ 0x03, 0x1E, 0x09, 0x00, 0xF2, 0x04, 0xFF, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x47, 0x00, -/* 00013930 */ 0x14, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x05, 0x78, 0x00, 0x60, 0x00, 0x00, 0x00, 0x03, -/* 00013940 */ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, -/* 00013950 */ 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, -/* 00013960 */ 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x82, -/* 00013970 */ 0x01, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, -/* 00013980 */ 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x18, -/* 00013990 */ 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, -/* 000139A0 */ 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, -/* 000139B0 */ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, -/* 000139C0 */ 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0xFE, 0x88, 0x01, 0xFE, 0x83, 0x01, 0xFE, 0x82, 0x01, -/* 000139D0 */ 0xFE, 0x80, 0x01, 0xFE, 0x81, 0x01, 0x4D, 0xFE, 0x15, 0x01, 0xFF, 0x01, 0x5B, 0x01, 0x00, 0x14, -/* 000139E0 */ 0x19, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x27, 0x00, 0x05, 0x00, 0x23, 0x01, 0x06, 0x00, 0x02, 0x05, -/* 000139F0 */ 0x06, 0x00, 0x26, 0x01, 0x06, 0x00, 0xB8, 0x01, 0x1C, 0x00, 0x72, 0x00, 0x4A, 0x00, 0x28, 0x01, -/* 00013A00 */ 0x03, 0x00, 0x5B, 0x00, 0x27, 0x00, 0x33, 0x01, 0x31, 0x00, 0x75, 0x00, 0x48, 0x00, 0xD4, 0x00, -/* 00013A10 */ 0x48, 0x00, 0x15, 0x01, 0x06, 0x00, 0x73, 0x01, 0x1C, 0x00, 0x48, 0x00, 0x4C, 0x00, 0xBF, 0x00, -/* 00013A20 */ 0x06, 0x00, 0xD8, 0x03, 0x1C, 0x00, 0x5A, 0x00, 0x4C, 0x00, 0xD1, 0x00, 0x08, 0x00, 0x18, 0x00, -/* 00013A30 */ 0x00, 0xD8, 0x3F, 0x01, 0x00, 0x2C, 0x3F, 0x01, 0x00, 0xF7, 0x3D, 0x01, 0x00, 0x57, 0x3D, 0x01, -/* 00013A40 */ 0x00, 0x46, 0x3C, 0x01, 0x00, 0x49, 0x3A, 0x01, 0x00, 0x3F, 0x5D, 0x18, 0xC1, 0x03, 0x8D, 0x05, -/* 00013A50 */ 0x00, 0xFE, 0x1F, 0x08, 0x20, 0xA0, 0x41, 0xC3, 0x00, 0xFE, 0x0D, 0x04, 0x7A, 0xFF, 0x43, 0x6C, -/* 00013A60 */ 0x01, 0x00, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFF, 0x43, 0x6C, 0x01, 0x00, 0xFE, -/* 00013A70 */ 0xB6, 0x03, 0xFE, 0xB6, 0x03, 0x01, 0xFE, 0xA8, 0x04, 0x06, 0x0D, 0x11, 0x05, 0x2E, 0x2E, 0x03, -/* 00013A80 */ 0x03, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x0E, 0x0F, 0x10, 0x05, 0xFE, 0x9F, 0x04, 0x06, 0xFE, -/* 00013A90 */ 0x48, 0x03, 0x06, 0xFE, 0xF7, 0x03, 0x06, 0xFE, 0xA2, 0x04, 0x06, 0xFE, 0xFA, 0x03, 0x06, 0xFE, -/* 00013AA0 */ 0xFB, 0x03, 0x06, 0xFE, 0xFC, 0x03, 0x06, 0xFE, 0xFD, 0x03, 0x06, 0xFE, 0xFE, 0x03, 0x06, 0xFE, -/* 00013AB0 */ 0xA5, 0x04, 0x08, 0xBD, 0x59, 0x11, 0xB2, 0x0D, 0x11, 0x4F, 0x11, 0x94, 0x02, 0x11, 0x8D, 0x03, -/* 00013AC0 */ 0x03, 0x12, 0x00, 0x00, 0x6B, 0x11, 0x12, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x12, 0x5B, 0x01, -/* 00013AD0 */ 0x0D, 0x00, 0x00, 0xF2, 0x02, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x94, 0x02, 0x11, -/* 00013AE0 */ 0x91, 0x02, 0x11, 0x01, 0x00, 0x0E, 0x0D, 0x00, 0x11, 0x91, 0x02, 0x11, 0x01, 0x00, 0x60, 0x11, -/* 00013AF0 */ 0x11, 0x01, 0x0F, 0x24, 0x00, 0x11, 0x8D, 0x03, 0x03, 0x12, 0x00, 0x00, 0x6B, 0x11, 0x12, 0x02, -/* 00013B00 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x12, 0x5B, 0x01, 0x02, 0x01, 0x00, 0x5B, 0x02, 0x03, 0x01, 0x00, -/* 00013B10 */ 0xF2, 0x03, 0xFF, 0x11, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x8D, 0x02, 0x19, 0x11, 0x02, 0x00, -/* 00013B20 */ 0x4B, 0x11, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x0C, 0xCD, 0x12, 0x08, 0x00, 0x00, 0x9F, 0x00, 0x04, -/* 00013B30 */ 0x12, 0x9F, 0x01, 0x05, 0x12, 0x9F, 0x02, 0x06, 0x12, 0x9F, 0x03, 0x07, 0x12, 0x9F, 0x04, 0x08, -/* 00013B40 */ 0x12, 0x9F, 0x05, 0x09, 0x12, 0x9F, 0x06, 0x0A, 0x12, 0x9F, 0x07, 0x0B, 0x12, 0x5B, 0x01, 0x12, -/* 00013B50 */ 0x02, 0x00, 0x91, 0x02, 0x12, 0x01, 0x00, 0x5B, 0x02, 0x12, 0x02, 0x00, 0xD3, 0x00, 0x12, 0x5B, -/* 00013B60 */ 0x03, 0x12, 0x02, 0x00, 0xEE, 0x04, 0x00, 0x11, 0x02, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, -/* 00013B70 */ 0x00, 0xFE, 0xEF, 0x01, 0xFE, 0xA6, 0x04, 0xFE, 0x8A, 0x02, 0xFF, 0x6C, 0x6C, 0x01, 0x00, 0x05, -/* 00013B80 */ 0x0A, 0x00, 0x00, 0x00, 0x22, 0x00, 0x37, 0x00, 0x16, 0x00, 0x39, 0x00, 0x24, 0x00, 0x6F, 0x00, -/* 00013B90 */ 0x55, 0x00, 0xAD, 0x02, 0x00, 0x99, 0x3B, 0x01, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x03, -/* 00013BA0 */ 0x00, 0xFE, 0x2E, 0x08, 0x13, 0xA2, 0x41, 0xD0, 0x00, 0x7B, 0xFE, 0x01, 0x10, 0xFF, 0xA4, 0x6E, -/* 00013BB0 */ 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFF, 0xA4, 0x6E, 0x01, 0x00, 0xFE, 0x49, -/* 00013BC0 */ 0x01, 0xFE, 0x49, 0x01, 0x01, 0x07, 0x05, 0x08, 0x04, 0x14, 0x12, 0x04, 0x01, 0x02, 0x03, 0x03, -/* 00013BD0 */ 0x03, 0x03, 0x07, 0x06, 0xFE, 0xA5, 0x04, 0x01, 0x00, 0x0B, 0x4B, 0x14, 0x03, 0x00, 0x05, 0x02, -/* 00013BE0 */ 0x09, 0x3F, 0x00, 0x47, 0x08, 0x06, 0x8D, 0x04, 0x37, 0x0A, 0x00, 0x00, 0x4B, 0x0A, 0x6B, 0x09, -/* 00013BF0 */ 0x0A, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0A, 0x8D, 0x01, 0x02, 0x0B, 0x01, 0x00, 0x4B, 0x0B, -/* 00013C00 */ 0x60, 0x0B, 0x0B, 0x01, 0x5B, 0x01, 0x0B, 0x00, 0x00, 0x5B, 0x02, 0x03, 0x00, 0x00, 0xF2, 0x03, -/* 00013C10 */ 0x09, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x09, 0x08, 0x02, 0x47, 0x00, 0x04, 0x09, -/* 00013C20 */ 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x3F, 0x01, 0xFE, 0xA5, 0x04, 0xFE, 0xA5, 0x04, 0xFF, -/* 00013C30 */ 0xCA, 0x6E, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0xA6, 0x00, 0x39, 0x00, 0x51, -/* 00013C40 */ 0x00, 0x08, 0x00, 0x2B, 0x00, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x0E, -/* 00013C50 */ 0x08, 0x17, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0xA0, 0x04, 0x79, 0xFF, 0xC0, 0x69, 0x01, 0x00, 0xFF, -/* 00013C60 */ 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0xC0, 0x69, 0x01, 0x00, 0xFE, 0x5A, 0x01, 0xFE, 0x5A, -/* 00013C70 */ 0x01, 0x01, 0x07, 0x05, 0x0A, 0x04, 0x27, 0x25, 0x03, 0x04, 0x03, 0x04, 0x04, 0x04, 0x04, 0x09, -/* 00013C80 */ 0x05, 0xFE, 0x9F, 0x04, 0x06, 0xFE, 0x48, 0x03, 0x08, 0xA2, 0x59, 0x0A, 0xB2, 0x06, 0x0A, 0x4F, -/* 00013C90 */ 0x07, 0x4F, 0x08, 0x8D, 0x03, 0x03, 0x0B, 0x00, 0x00, 0x6B, 0x0A, 0x0B, 0x00, 0x07, 0x02, 0x00, -/* 00013CA0 */ 0x5A, 0x00, 0x0B, 0x5B, 0x01, 0x06, 0x00, 0x00, 0xF2, 0x02, 0x0A, 0x0A, 0x00, 0x00, 0x00, 0x00, -/* 00013CB0 */ 0x00, 0x00, 0x47, 0x07, 0x0A, 0x0E, 0x08, 0x00, 0x07, 0x60, 0x0A, 0x07, 0x01, 0x0F, 0x24, 0x00, -/* 00013CC0 */ 0x0A, 0x8D, 0x03, 0x03, 0x0B, 0x00, 0x00, 0x6B, 0x0A, 0x0B, 0x02, 0x07, 0x03, 0x00, 0x5A, 0x00, -/* 00013CD0 */ 0x0B, 0x5B, 0x01, 0x02, 0x01, 0x00, 0x5B, 0x02, 0x03, 0x01, 0x00, 0xF2, 0x03, 0xFF, 0x0A, 0x02, -/* 00013CE0 */ 0x00, 0x00, 0x00, 0x01, 0x00, 0x8D, 0x03, 0x24, 0x0B, 0x01, 0x00, 0x6B, 0x0A, 0x0B, 0x03, 0x07, -/* 00013CF0 */ 0x02, 0x00, 0x5A, 0x00, 0x0B, 0x5B, 0x01, 0x05, 0x02, 0x00, 0xF2, 0x02, 0x0A, 0x0A, 0x03, 0x00, -/* 00013D00 */ 0x00, 0x00, 0x02, 0x00, 0x47, 0x08, 0x0A, 0x8D, 0x01, 0x03, 0x0A, 0x02, 0x00, 0x4B, 0x0A, 0x07, -/* 00013D10 */ 0x03, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x07, 0x03, 0x00, 0x5B, 0x02, 0x08, 0x03, 0x00, 0xEE, -/* 00013D20 */ 0x03, 0x00, 0x0A, 0x03, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xEF, 0x01, 0xFE, -/* 00013D30 */ 0xA6, 0x04, 0xFE, 0x8A, 0x02, 0xFE, 0x38, 0x03, 0xFF, 0xE5, 0x69, 0x01, 0x00, 0x06, 0x09, 0x00, -/* 00013D40 */ 0x00, 0x00, 0x22, 0x00, 0x37, 0x00, 0x0C, 0x00, 0x39, 0x00, 0x24, 0x00, 0x6F, 0x00, 0x22, 0x00, -/* 00013D50 */ 0x30, 0x00, 0x23, 0x00, 0x25, 0x00, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, -/* 00013D60 */ 0xFC, 0x07, 0x6B, 0xA2, 0x41, 0xD1, 0x00, 0x78, 0xFF, 0x83, 0x66, 0x01, 0x00, 0xFF, 0x00, 0x10, -/* 00013D70 */ 0x01, 0x00, 0x03, 0x02, 0xFF, 0x83, 0x66, 0x01, 0x00, 0xC5, 0xC5, 0x01, 0x06, 0x03, 0x07, 0x07, -/* 00013D80 */ 0x17, 0x16, 0x03, 0x01, 0x03, 0x01, 0x01, 0x01, 0x01, 0x06, 0x08, 0x55, 0x59, 0x07, 0xB2, 0x05, -/* 00013D90 */ 0x07, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA6, 0x07, 0x47, 0x04, 0x07, 0x8D, 0x02, 0x17, 0x07, 0x00, -/* 00013DA0 */ 0x00, 0x4B, 0x07, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x05, 0x00, 0x00, 0x8D, 0x01, -/* 00013DB0 */ 0x04, 0x08, 0x01, 0x00, 0x4B, 0x08, 0x5B, 0x02, 0x08, 0x00, 0x00, 0x8D, 0x03, 0x03, 0x08, 0x02, -/* 00013DC0 */ 0x00, 0x60, 0x08, 0x08, 0x00, 0x5B, 0x03, 0x08, 0x00, 0x00, 0x5B, 0x04, 0x03, 0x00, 0x00, 0x5B, -/* 00013DD0 */ 0x05, 0x04, 0x00, 0x00, 0xEE, 0x06, 0x00, 0x07, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, -/* 00013DE0 */ 0x00, 0xFE, 0xDC, 0x01, 0xFF, 0x96, 0x66, 0x01, 0x00, 0x03, 0x05, 0x00, 0x00, 0x00, 0x0A, 0x00, -/* 00013DF0 */ 0x23, 0x00, 0x44, 0x00, 0x8E, 0x00, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, -/* 00013E00 */ 0xE3, 0x07, 0x1C, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x48, 0x03, 0x77, 0xFF, 0x87, 0x62, 0x01, 0x00, -/* 00013E10 */ 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x01, 0xFF, 0x87, 0x62, 0x01, 0x00, 0xFE, 0x9A, 0x01, 0xFE, -/* 00013E20 */ 0x9A, 0x01, 0x01, 0x08, 0x05, 0x0B, 0x05, 0x30, 0x2C, 0x03, 0x04, 0x03, 0x03, 0x03, 0x03, 0x03, -/* 00013E30 */ 0x0A, 0x08, 0x05, 0xFE, 0x9D, 0x04, 0x06, 0xFE, 0x48, 0x03, 0xBF, 0x01, 0x4D, 0x01, 0x07, 0x59, -/* 00013E40 */ 0x0B, 0xB2, 0x09, 0x0B, 0x4F, 0x08, 0x15, 0x05, 0x00, 0x05, 0x02, 0xA6, 0x0B, 0x47, 0x05, 0x0B, -/* 00013E50 */ 0x15, 0x05, 0x00, 0x06, 0x02, 0xA6, 0x0B, 0x47, 0x06, 0x0B, 0x4F, 0x08, 0xA6, 0x0B, 0x14, 0x03, -/* 00013E60 */ 0x00, 0x07, 0x0B, 0x09, 0x24, 0x00, 0x8D, 0x03, 0x03, 0x0C, 0x00, 0x00, 0x6B, 0x0B, 0x0C, 0x00, -/* 00013E70 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x03, 0x00, 0x00, 0x5B, 0x02, 0x04, 0x00, 0x00, -/* 00013E80 */ 0xF2, 0x03, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8D, 0x03, 0x37, 0x0C, 0x01, 0x00, -/* 00013E90 */ 0x4B, 0x0C, 0x6B, 0x0B, 0x0C, 0x01, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x0C, 0xF2, 0x01, 0x0B, 0x0B, -/* 00013EA0 */ 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x08, 0x0B, 0x8D, 0x03, 0x03, 0x0C, 0x00, 0x00, 0x6B, -/* 00013EB0 */ 0x0B, 0x0C, 0x02, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x09, 0x02, 0x00, 0x5B, 0x02, -/* 00013EC0 */ 0x08, 0x02, 0x00, 0xF2, 0x03, 0xFF, 0x0B, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x8D, 0x01, 0x02, -/* 00013ED0 */ 0x0B, 0x02, 0x00, 0x4B, 0x0B, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x08, 0x03, 0x00, -/* 00013EE0 */ 0x5B, 0x02, 0x05, 0x03, 0x00, 0x5B, 0x03, 0x06, 0x03, 0x00, 0xEE, 0x04, 0xFF, 0x0B, 0x03, 0x00, -/* 00013EF0 */ 0x47, 0x00, 0x09, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x8A, 0x02, 0x61, 0xFE, 0xF0, -/* 00013F00 */ 0x01, 0xFF, 0x9C, 0x62, 0x01, 0x00, 0x09, 0x0B, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0C, -/* 00013F10 */ 0x00, 0x23, 0x00, 0x0A, 0x00, 0x30, 0x00, 0x24, 0x00, 0x5E, 0x00, 0x1F, 0x00, 0x2C, 0x00, 0x24, -/* 00013F20 */ 0x00, 0x3A, 0x00, 0x23, 0x00, 0x43, 0x00, 0x08, 0x00, 0x15, 0x00, 0x00, 0xBF, 0x5C, 0x08, 0xC1, -/* 00013F30 */ 0x03, 0x88, 0x01, 0x00, 0xFE, 0xDA, 0x07, 0x1E, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x9B, 0x04, 0x76, -/* 00013F40 */ 0xFF, 0x63, 0x61, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFF, 0x63, 0x61, 0x01, -/* 00013F50 */ 0x00, 0xB5, 0xB5, 0x01, 0x05, 0x03, 0x06, 0x04, 0x15, 0x14, 0x03, 0x02, 0x02, 0x02, 0x02, 0x02, -/* 00013F60 */ 0x02, 0x05, 0x05, 0xFE, 0xA7, 0x04, 0x56, 0x8D, 0x03, 0x37, 0x07, 0x00, 0x00, 0x4B, 0x07, 0x6B, -/* 00013F70 */ 0x06, 0x07, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x07, 0x5B, 0x01, 0x04, 0x00, 0x00, 0xF2, 0x02, -/* 00013F80 */ 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x06, 0x00, 0x06, 0x47, 0x00, 0x02, 0x09, -/* 00013F90 */ 0x29, 0x00, 0x8D, 0x03, 0x03, 0x07, 0x01, 0x00, 0x6B, 0x06, 0x07, 0x01, 0x07, 0x03, 0x00, 0x5A, -/* 00013FA0 */ 0x00, 0x07, 0x5B, 0x01, 0x03, 0x01, 0x00, 0x5B, 0x02, 0x04, 0x01, 0x00, 0xF2, 0x03, 0x00, 0x06, -/* 00013FB0 */ 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xB1, 0xFE, 0xEC, -/* 00013FC0 */ 0x01, 0xFF, 0x8B, 0x61, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x25, 0x00, 0x26, 0x00, 0x06, -/* 00013FD0 */ 0x00, 0x2B, 0x00, 0x29, 0x00, 0x3B, 0x00, 0x00, 0xBF, 0x5C, 0x18, 0xC1, 0x03, 0x88, 0x01, 0x00, -/* 00013FE0 */ 0xFE, 0xBD, 0x07, 0x26, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x9A, 0x04, 0x75, 0xFF, 0x69, 0x5C, 0x01, -/* 00013FF0 */ 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFF, 0x69, 0x5C, 0x01, 0x00, 0xFE, 0xAF, 0x03, -/* 00014000 */ 0xFE, 0xAF, 0x03, 0x01, 0x0A, 0x0D, 0x14, 0x07, 0x67, 0x5E, 0x03, 0x09, 0x03, 0x07, 0x0B, 0x0B, -/* 00014010 */ 0x0B, 0x0B, 0x13, 0x08, 0x06, 0xFE, 0x00, 0x04, 0x06, 0xFE, 0xAD, 0x03, 0x05, 0xFE, 0xBC, 0x03, -/* 00014020 */ 0x05, 0xFE, 0xFF, 0x03, 0x06, 0xFE, 0xA2, 0x04, 0x05, 0xFE, 0xA3, 0x04, 0x05, 0xFE, 0xA4, 0x04, -/* 00014030 */ 0x01, 0x00, 0x01, 0x03, 0x0B, 0xFE, 0xAF, 0x01, 0x4F, 0x10, 0x4F, 0x11, 0x4F, 0x12, 0x8D, 0x02, -/* 00014040 */ 0x11, 0x14, 0x00, 0x00, 0x4B, 0x14, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x0E, 0x00, -/* 00014050 */ 0x00, 0xEE, 0x02, 0x14, 0x14, 0x00, 0x00, 0x47, 0x10, 0x14, 0xA6, 0x14, 0x14, 0x03, 0x00, 0x0F, -/* 00014060 */ 0x14, 0x09, 0x22, 0x00, 0x8D, 0x03, 0x37, 0x16, 0x01, 0x00, 0x4B, 0x16, 0x6B, 0x15, 0x16, 0x00, -/* 00014070 */ 0x07, 0x01, 0x00, 0x5A, 0x00, 0x16, 0xF2, 0x01, 0x15, 0x15, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, -/* 00014080 */ 0x47, 0x14, 0x15, 0x09, 0x22, 0x00, 0x8D, 0x03, 0x24, 0x16, 0x02, 0x00, 0x6B, 0x15, 0x16, 0x01, -/* 00014090 */ 0x07, 0x02, 0x00, 0x5A, 0x00, 0x16, 0x5B, 0x01, 0x0F, 0x02, 0x00, 0xF2, 0x02, 0x15, 0x15, 0x01, -/* 000140A0 */ 0x00, 0x00, 0x00, 0x02, 0x00, 0x47, 0x14, 0x15, 0x47, 0x0F, 0x14, 0x8D, 0x03, 0x37, 0x15, 0x01, -/* 000140B0 */ 0x00, 0x4B, 0x15, 0x6B, 0x14, 0x15, 0x02, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x15, 0xF2, 0x01, 0x14, -/* 000140C0 */ 0x14, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x47, 0x11, 0x14, 0x47, 0x14, 0x11, 0x8D, 0x02, 0x02, -/* 000140D0 */ 0x15, 0x03, 0x00, 0x4B, 0x15, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x0F, 0x04, 0x00, -/* 000140E0 */ 0x5B, 0x02, 0x03, 0x04, 0x00, 0x5B, 0x03, 0x04, 0x04, 0x00, 0xCD, 0x16, 0x02, 0x00, 0x00, 0x9F, -/* 000140F0 */ 0x00, 0x05, 0x16, 0x9F, 0x01, 0x06, 0x16, 0x5B, 0x04, 0x16, 0x04, 0x00, 0x5B, 0x05, 0x06, 0x04, -/* 00014100 */ 0x00, 0xEE, 0x06, 0x15, 0x15, 0x04, 0x00, 0x75, 0x15, 0x14, 0x03, 0x47, 0x14, 0x0D, 0x8D, 0x02, -/* 00014110 */ 0x02, 0x15, 0x03, 0x00, 0x4B, 0x15, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x0F, 0x05, -/* 00014120 */ 0x00, 0x5B, 0x02, 0x07, 0x05, 0x00, 0x5B, 0x03, 0x04, 0x05, 0x00, 0xCD, 0x16, 0x02, 0x01, 0x00, -/* 00014130 */ 0x9F, 0x00, 0x08, 0x16, 0x9F, 0x01, 0x09, 0x16, 0x5B, 0x04, 0x16, 0x05, 0x00, 0x5B, 0x05, 0x08, -/* 00014140 */ 0x05, 0x00, 0xEE, 0x06, 0x15, 0x15, 0x05, 0x00, 0x75, 0x15, 0x14, 0x04, 0x8D, 0x02, 0x14, 0x14, -/* 00014150 */ 0x04, 0x00, 0x4B, 0x14, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x0D, 0x06, 0x00, 0x5B, -/* 00014160 */ 0x02, 0x0F, 0x06, 0x00, 0x5B, 0x03, 0x0A, 0x06, 0x00, 0x5B, 0x04, 0x0B, 0x06, 0x00, 0xEE, 0x05, -/* 00014170 */ 0xFF, 0x14, 0x06, 0x00, 0x8D, 0x02, 0x0B, 0x14, 0x05, 0x00, 0x4B, 0x14, 0x07, 0x05, 0x00, 0x5A, -/* 00014180 */ 0x00, 0x02, 0x8D, 0x03, 0x03, 0x15, 0x06, 0x00, 0x60, 0x15, 0x15, 0x05, 0x5B, 0x01, 0x15, 0x07, -/* 00014190 */ 0x00, 0x5B, 0x02, 0x10, 0x07, 0x00, 0x5B, 0x03, 0x11, 0x07, 0x00, 0xCD, 0x15, 0x00, 0x02, 0x00, -/* 000141A0 */ 0x5B, 0x04, 0x15, 0x07, 0x00, 0xEE, 0x05, 0x14, 0x14, 0x07, 0x00, 0x47, 0x12, 0x14, 0x60, 0x14, -/* 000141B0 */ 0x12, 0x06, 0x75, 0x14, 0x0D, 0x07, 0x8D, 0x03, 0x03, 0x15, 0x06, 0x00, 0x6B, 0x14, 0x15, 0x08, -/* 000141C0 */ 0x07, 0x02, 0x00, 0x5A, 0x00, 0x15, 0x5B, 0x01, 0x0D, 0x08, 0x00, 0xF2, 0x02, 0x14, 0x14, 0x08, -/* 000141D0 */ 0x00, 0x00, 0x00, 0x08, 0x00, 0x75, 0x14, 0x0D, 0x09, 0x75, 0x0C, 0x0D, 0x0A, 0x47, 0x00, 0x0D, -/* 000141E0 */ 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x61, 0xFE, 0x36, 0x03, 0x61, 0xFE, 0x18, 0x04, 0xE6, -/* 000141F0 */ 0xFE, 0xDC, 0x01, 0xFE, 0xF7, 0x01, 0xFE, 0xF7, 0x01, 0xFE, 0xED, 0x01, 0xFE, 0xA5, 0x04, 0xFE, -/* 00014200 */ 0xA6, 0x04, 0xFF, 0xA0, 0x5C, 0x01, 0x00, 0x0C, 0x06, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x46, 0x00, -/* 00014210 */ 0x51, 0x00, 0x57, 0x00, 0x1F, 0x00, 0x24, 0x00, 0x41, 0x00, 0x6D, 0x00, 0x41, 0x00, 0x6B, 0x00, -/* 00014220 */ 0x28, 0x00, 0xA9, 0x00, 0x3A, 0x00, 0x5F, 0x00, 0x08, 0x00, 0x2B, 0x00, 0x23, 0x00, 0x57, 0x00, -/* 00014230 */ 0x04, 0x00, 0x38, 0x00, 0x08, 0x00, 0x1C, 0x00, 0x00, 0x3F, 0x5D, 0x18, 0xC1, 0x13, 0x8D, 0x25, -/* 00014240 */ 0x00, 0xFE, 0x62, 0x05, 0x1A, 0xA0, 0x41, 0xD1, 0x00, 0x57, 0xFE, 0xEB, 0xEC, 0x11, 0xFF, 0x00, -/* 00014250 */ 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0xEB, 0xEC, 0xFE, 0xE2, 0x6D, 0xFE, 0xE2, 0x6D, 0x0D, 0xFE, -/* 00014260 */ 0x37, 0x04, 0xFE, 0x24, 0x02, 0xFE, 0x38, 0x04, 0xFE, 0x39, 0x04, 0xFE, 0x3A, 0x04, 0xFE, 0x3B, -/* 00014270 */ 0x04, 0xFE, 0x3C, 0x04, 0xFE, 0x3D, 0x04, 0xFE, 0x3E, 0x04, 0xFE, 0x3F, 0x04, 0xFE, 0x40, 0x04, -/* 00014280 */ 0xFE, 0xF5, 0x01, 0xFE, 0x88, 0x03, 0x11, 0x34, 0x41, 0x09, 0xFE, 0x7C, 0x01, 0xFE, 0x74, 0x01, -/* 00014290 */ 0x02, 0x17, 0x0D, 0x0B, 0x14, 0x14, 0x14, 0x14, 0x09, 0x3E, 0x3F, 0x40, 0x08, 0x06, 0xFE, 0x3D, -/* 000142A0 */ 0x03, 0x06, 0xFE, 0x41, 0x04, 0x06, 0xFE, 0x42, 0x04, 0x06, 0xFE, 0x43, 0x04, 0x06, 0xFE, 0x44, -/* 000142B0 */ 0x04, 0x06, 0xFE, 0x45, 0x04, 0x06, 0xFE, 0x13, 0x04, 0x06, 0xFE, 0x46, 0x04, 0x06, 0xFE, 0x47, -/* 000142C0 */ 0x04, 0x06, 0xFE, 0x48, 0x04, 0x06, 0xFE, 0x49, 0x04, 0x06, 0xFE, 0x4A, 0x04, 0x06, 0xFE, 0x4B, -/* 000142D0 */ 0x04, 0x06, 0xFE, 0x4C, 0x04, 0x06, 0xFE, 0x4D, 0x04, 0x06, 0xFE, 0x4E, 0x04, 0x01, 0x01, 0x06, -/* 000142E0 */ 0xFE, 0x4F, 0x04, 0x01, 0x00, 0x06, 0xFE, 0x50, 0x04, 0x06, 0xFE, 0x51, 0x04, 0x01, 0x02, 0x07, -/* 000142F0 */ 0x05, 0xFE, 0x52, 0x04, 0x05, 0xFE, 0x53, 0x04, 0x06, 0xFE, 0x54, 0x04, 0x05, 0xFE, 0x55, 0x04, -/* 00014300 */ 0x06, 0xFE, 0x56, 0x04, 0x05, 0xFE, 0x57, 0x04, 0x05, 0xFE, 0x58, 0x04, 0x05, 0xFE, 0x59, 0x04, -/* 00014310 */ 0x05, 0xFE, 0x5A, 0x04, 0x05, 0xFE, 0x5B, 0x04, 0x06, 0xFE, 0x0B, 0x04, 0x06, 0xFE, 0x40, 0x03, -/* 00014320 */ 0x06, 0xFE, 0x42, 0x03, 0x0C, 0x06, 0xFE, 0x43, 0x03, 0x06, 0xFE, 0x44, 0x03, 0x06, 0xFE, 0x0C, -/* 00014330 */ 0x04, 0x0B, 0x06, 0xFE, 0x3F, 0x03, 0x05, 0xFE, 0x25, 0x04, 0x06, 0xFE, 0x26, 0x04, 0x06, 0xFE, -/* 00014340 */ 0x8D, 0x03, 0x06, 0xFE, 0x27, 0x04, 0x06, 0xFE, 0x0D, 0x04, 0x05, 0xFE, 0x4B, 0x03, 0x06, 0xFE, -/* 00014350 */ 0x4C, 0x03, 0xFE, 0x6B, 0x06, 0xD3, 0x05, 0x34, 0x94, 0x02, 0x34, 0xD3, 0x09, 0x35, 0x94, 0x03, -/* 00014360 */ 0x35, 0x4F, 0x36, 0x4F, 0x37, 0x4F, 0x38, 0x4F, 0x39, 0x4F, 0x3A, 0x4F, 0x3B, 0x4F, 0x3C, 0x4F, -/* 00014370 */ 0x3D, 0x4F, 0x41, 0x94, 0x04, 0x41, 0x4F, 0x41, 0x94, 0x05, 0x41, 0x4F, 0x41, 0x94, 0x06, 0x41, -/* 00014380 */ 0x4F, 0x41, 0x94, 0x07, 0x41, 0x4F, 0x41, 0x94, 0x08, 0x41, 0x4F, 0x41, 0x94, 0x09, 0x41, 0x4F, -/* 00014390 */ 0x41, 0x94, 0x0A, 0x41, 0x4F, 0x41, 0x94, 0x0B, 0x41, 0x4F, 0x41, 0x94, 0x0C, 0x41, 0x4F, 0x41, -/* 000143A0 */ 0x94, 0x0D, 0x41, 0x4F, 0x41, 0x94, 0x0E, 0x41, 0x8D, 0x02, 0x32, 0x41, 0x00, 0x00, 0x15, 0x03, -/* 000143B0 */ 0x00, 0x41, 0x03, 0x09, 0x13, 0x00, 0x8D, 0x02, 0x32, 0x41, 0x00, 0x00, 0x15, 0x03, 0x00, 0x41, -/* 000143C0 */ 0x04, 0x09, 0x05, 0x00, 0xA6, 0x00, 0x09, 0xF5, 0x05, 0xCD, 0x41, 0x03, 0x00, 0x00, 0x9F, 0x00, -/* 000143D0 */ 0x05, 0x41, 0x9F, 0x01, 0x06, 0x41, 0x9F, 0x02, 0x07, 0x41, 0x47, 0x36, 0x41, 0xCD, 0x41, 0x02, -/* 000143E0 */ 0x01, 0x00, 0x9F, 0x00, 0x08, 0x41, 0x9F, 0x01, 0x09, 0x41, 0x47, 0x37, 0x41, 0x8D, 0x02, 0x37, -/* 000143F0 */ 0x42, 0x01, 0x00, 0x4B, 0x42, 0x6B, 0x41, 0x42, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x42, 0x5B, -/* 00014400 */ 0x01, 0x37, 0x00, 0x00, 0x5B, 0x02, 0x36, 0x00, 0x00, 0xF2, 0x03, 0x41, 0x41, 0x00, 0x00, 0x00, -/* 00014410 */ 0x00, 0x00, 0x00, 0x47, 0x38, 0x41, 0xCD, 0x41, 0x09, 0x02, 0x00, 0xCD, 0x42, 0x02, 0x03, 0x00, -/* 00014420 */ 0x9F, 0x00, 0x0A, 0x42, 0x9F, 0x01, 0x36, 0x42, 0x9F, 0x00, 0x42, 0x41, 0xCD, 0x42, 0x02, 0x04, -/* 00014430 */ 0x00, 0x9F, 0x00, 0x0B, 0x42, 0x9F, 0x01, 0x36, 0x42, 0x9F, 0x01, 0x42, 0x41, 0xCD, 0x42, 0x02, -/* 00014440 */ 0x05, 0x00, 0x9F, 0x00, 0x0C, 0x42, 0x9F, 0x01, 0x37, 0x42, 0x9F, 0x02, 0x42, 0x41, 0xCD, 0x42, -/* 00014450 */ 0x02, 0x06, 0x00, 0x9F, 0x00, 0x0D, 0x42, 0x9F, 0x01, 0x38, 0x42, 0x9F, 0x03, 0x42, 0x41, 0xCD, -/* 00014460 */ 0x42, 0x02, 0x07, 0x00, 0x9F, 0x00, 0x0E, 0x42, 0x9F, 0x01, 0x37, 0x42, 0x9F, 0x04, 0x42, 0x41, -/* 00014470 */ 0xCD, 0x42, 0x02, 0x08, 0x00, 0x9F, 0x00, 0x0F, 0x42, 0x9F, 0x01, 0x37, 0x42, 0x9F, 0x05, 0x42, -/* 00014480 */ 0x41, 0xCD, 0x42, 0x02, 0x09, 0x00, 0x9F, 0x00, 0x10, 0x42, 0x9F, 0x01, 0x37, 0x42, 0x9F, 0x06, -/* 00014490 */ 0x42, 0x41, 0xCD, 0x42, 0x02, 0x0A, 0x00, 0x9F, 0x00, 0x11, 0x42, 0x9F, 0x01, 0x37, 0x42, 0x9F, -/* 000144A0 */ 0x07, 0x42, 0x41, 0xCD, 0x42, 0x02, 0x0B, 0x00, 0x9F, 0x00, 0x12, 0x42, 0x8D, 0x02, 0x37, 0x44, -/* 000144B0 */ 0x01, 0x00, 0x4B, 0x44, 0x6B, 0x43, 0x44, 0x01, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x44, 0x5B, 0x01, -/* 000144C0 */ 0x36, 0x01, 0x00, 0x5B, 0x02, 0x13, 0x01, 0x00, 0xF2, 0x03, 0x43, 0x43, 0x01, 0x00, 0x00, 0x00, -/* 000144D0 */ 0x01, 0x00, 0x9F, 0x01, 0x43, 0x42, 0x9F, 0x08, 0x42, 0x41, 0x94, 0x04, 0x41, 0xD3, 0x00, 0x41, -/* 000144E0 */ 0x07, 0x01, 0x00, 0x5A, 0x00, 0x02, 0xEE, 0x01, 0x41, 0x41, 0x02, 0x00, 0x94, 0x05, 0x41, 0xD3, -/* 000144F0 */ 0x01, 0x41, 0x94, 0x06, 0x41, 0xD3, 0x02, 0x41, 0x94, 0x07, 0x41, 0xD3, 0x03, 0x41, 0x94, 0x08, -/* 00014500 */ 0x41, 0xD3, 0x04, 0x41, 0x94, 0x09, 0x41, 0xCD, 0x41, 0x03, 0x0C, 0x00, 0xA6, 0x42, 0x9F, 0x00, -/* 00014510 */ 0x42, 0x41, 0xA6, 0x42, 0x9F, 0x01, 0x42, 0x41, 0xA6, 0x42, 0x9F, 0x02, 0x42, 0x41, 0x94, 0x0A, -/* 00014520 */ 0x41, 0x8D, 0x02, 0x35, 0x41, 0x02, 0x00, 0x4B, 0x41, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0xCB, -/* 00014530 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x79, 0x15, 0x42, 0x02, -/* 00014540 */ 0x79, 0x13, 0x42, 0x03, 0x79, 0x18, 0x42, 0x04, 0x5B, 0x01, 0x42, 0x03, 0x00, 0xEE, 0x02, 0x41, -/* 00014550 */ 0x41, 0x03, 0x00, 0x47, 0x39, 0x41, 0xD3, 0x06, 0x41, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x02, 0x5B, -/* 00014560 */ 0x01, 0x1A, 0x04, 0x00, 0x5B, 0x02, 0x1B, 0x04, 0x00, 0x5B, 0x03, 0x1C, 0x04, 0x00, 0x60, 0x42, -/* 00014570 */ 0x39, 0x05, 0x5B, 0x04, 0x42, 0x04, 0x00, 0x8D, 0x02, 0x36, 0x42, 0x03, 0x00, 0x4B, 0x42, 0x60, -/* 00014580 */ 0x42, 0x42, 0x06, 0x5B, 0x05, 0x42, 0x04, 0x00, 0xEE, 0x06, 0xFF, 0x41, 0x04, 0x00, 0xD3, 0x07, -/* 00014590 */ 0x41, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x1D, 0x05, 0x00, 0x5B, 0x02, 0x1E, 0x05, -/* 000145A0 */ 0x00, 0x5B, 0x03, 0x1E, 0x05, 0x00, 0x60, 0x42, 0x39, 0x07, 0x5B, 0x04, 0x42, 0x05, 0x00, 0x8D, -/* 000145B0 */ 0x02, 0x36, 0x42, 0x03, 0x00, 0x4B, 0x42, 0x60, 0x42, 0x42, 0x08, 0x5B, 0x05, 0x42, 0x05, 0x00, -/* 000145C0 */ 0xEE, 0x06, 0xFF, 0x41, 0x05, 0x00, 0xD3, 0x08, 0x41, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x02, 0x5B, -/* 000145D0 */ 0x01, 0x1F, 0x06, 0x00, 0x5B, 0x02, 0x20, 0x06, 0x00, 0x5B, 0x03, 0x20, 0x06, 0x00, 0x60, 0x42, -/* 000145E0 */ 0x39, 0x09, 0x5B, 0x04, 0x42, 0x06, 0x00, 0x8D, 0x02, 0x36, 0x42, 0x03, 0x00, 0x4B, 0x42, 0x60, -/* 000145F0 */ 0x42, 0x42, 0x0A, 0x5B, 0x05, 0x42, 0x06, 0x00, 0xEE, 0x06, 0xFF, 0x41, 0x06, 0x00, 0x8D, 0x02, -/* 00014600 */ 0x32, 0x41, 0x00, 0x00, 0x15, 0x03, 0x00, 0x41, 0x03, 0x09, 0x05, 0x00, 0xA6, 0x00, 0x09, 0xAD, -/* 00014610 */ 0x03, 0x8D, 0x02, 0x23, 0x41, 0x04, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x21, -/* 00014620 */ 0x07, 0x00, 0x91, 0x03, 0x42, 0x05, 0x00, 0x5B, 0x02, 0x42, 0x07, 0x00, 0xEE, 0x03, 0xFF, 0x41, -/* 00014630 */ 0x07, 0x00, 0xD3, 0x0A, 0x41, 0x94, 0x0B, 0x41, 0xD3, 0x0B, 0x41, 0x94, 0x0C, 0x41, 0xD3, 0x0C, -/* 00014640 */ 0x41, 0x94, 0x0D, 0x41, 0x8D, 0x02, 0x23, 0x41, 0x04, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, -/* 00014650 */ 0x5B, 0x01, 0x22, 0x08, 0x00, 0x91, 0x0D, 0x42, 0x06, 0x00, 0x5B, 0x02, 0x42, 0x08, 0x00, 0xEE, -/* 00014660 */ 0x03, 0xFF, 0x41, 0x08, 0x00, 0xD3, 0x0D, 0x41, 0x47, 0x3A, 0x41, 0x8D, 0x02, 0x23, 0x41, 0x04, -/* 00014670 */ 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x23, 0x09, 0x00, 0x5B, 0x02, 0x3A, 0x09, -/* 00014680 */ 0x00, 0xEE, 0x03, 0xFF, 0x41, 0x09, 0x00, 0x8D, 0x02, 0x37, 0x42, 0x01, 0x00, 0x4B, 0x42, 0x6B, -/* 00014690 */ 0x41, 0x42, 0x0B, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x42, 0x91, 0x03, 0x43, 0x05, 0x00, 0x5B, 0x01, -/* 000146A0 */ 0x43, 0x0A, 0x00, 0x5B, 0x02, 0x24, 0x0A, 0x00, 0xCB, 0x14, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, -/* 000146B0 */ 0x00, 0x43, 0x00, 0x00, 0x00, 0x91, 0x03, 0x44, 0x05, 0x00, 0x07, 0x01, 0x00, 0xC2, 0x01, 0x44, -/* 000146C0 */ 0x44, 0x0B, 0x00, 0x79, 0x44, 0x43, 0x0C, 0x79, 0x27, 0x43, 0x0D, 0x79, 0x27, 0x43, 0x0E, 0x79, -/* 000146D0 */ 0x27, 0x43, 0x0F, 0x5B, 0x03, 0x43, 0x0A, 0x00, 0xF2, 0x04, 0xFF, 0x41, 0x0B, 0x00, 0x00, 0x00, -/* 000146E0 */ 0x0A, 0x00, 0x8D, 0x02, 0x04, 0x41, 0x07, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x91, 0x03, -/* 000146F0 */ 0x42, 0x05, 0x00, 0x60, 0x42, 0x42, 0x10, 0x5B, 0x01, 0x42, 0x0C, 0x00, 0x8D, 0x02, 0x08, 0x42, -/* 00014700 */ 0x08, 0x00, 0x60, 0x42, 0x42, 0x10, 0x5B, 0x02, 0x42, 0x0C, 0x00, 0xEE, 0x03, 0xFF, 0x41, 0x0C, -/* 00014710 */ 0x00, 0x8D, 0x02, 0x37, 0x42, 0x01, 0x00, 0x4B, 0x42, 0x6B, 0x41, 0x42, 0x0B, 0x07, 0x04, 0x00, -/* 00014720 */ 0x5A, 0x00, 0x42, 0x91, 0x03, 0x43, 0x05, 0x00, 0x60, 0x43, 0x43, 0x11, 0x5B, 0x01, 0x43, 0x0D, -/* 00014730 */ 0x00, 0x5B, 0x02, 0x2A, 0x0D, 0x00, 0xCB, 0x2C, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x43, -/* 00014740 */ 0x00, 0x00, 0x00, 0x91, 0x03, 0x44, 0x05, 0x00, 0x79, 0x44, 0x43, 0x0C, 0x79, 0x2B, 0x43, 0x0D, -/* 00014750 */ 0x79, 0x27, 0x43, 0x0E, 0x79, 0x2B, 0x43, 0x0F, 0x5B, 0x03, 0x43, 0x0D, 0x00, 0xF2, 0x04, 0xFF, -/* 00014760 */ 0x41, 0x0B, 0x00, 0x00, 0x00, 0x0D, 0x00, 0xD3, 0x0E, 0x41, 0x47, 0x3B, 0x41, 0x8D, 0x02, 0x37, -/* 00014770 */ 0x42, 0x01, 0x00, 0x4B, 0x42, 0x6B, 0x41, 0x42, 0x0B, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x42, 0x5B, -/* 00014780 */ 0x01, 0x3B, 0x0E, 0x00, 0x5B, 0x02, 0x2C, 0x0E, 0x00, 0xCB, 0x44, 0x00, 0x00, 0x00, 0x03, 0x00, -/* 00014790 */ 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x79, 0x2D, 0x43, 0x0C, 0x79, 0x27, 0x43, 0x0D, 0x79, 0x27, -/* 000147A0 */ 0x43, 0x0E, 0x79, 0x2B, 0x43, 0x0F, 0x5B, 0x03, 0x43, 0x0E, 0x00, 0xF2, 0x04, 0xFF, 0x41, 0x0B, -/* 000147B0 */ 0x00, 0x00, 0x00, 0x0E, 0x00, 0x8D, 0x02, 0x37, 0x42, 0x01, 0x00, 0x4B, 0x42, 0x6B, 0x41, 0x42, -/* 000147C0 */ 0x0B, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x42, 0x91, 0x03, 0x43, 0x05, 0x00, 0x60, 0x43, 0x43, 0x11, -/* 000147D0 */ 0x5B, 0x01, 0x43, 0x0F, 0x00, 0x5B, 0x02, 0x2E, 0x0F, 0x00, 0xCB, 0x5C, 0x00, 0x00, 0x00, 0x04, -/* 000147E0 */ 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x8D, 0x02, 0x23, 0x44, 0x04, 0x00, 0x07, 0x03, 0x00, -/* 000147F0 */ 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x2D, 0x10, 0x00, 0x5B, 0x02, 0x3B, 0x10, 0x00, 0xEE, 0x03, 0x44, -/* 00014800 */ 0x44, 0x10, 0x00, 0x79, 0x44, 0x43, 0x12, 0x79, 0x27, 0x43, 0x0E, 0x79, 0x2B, 0x43, 0x0F, 0x5B, -/* 00014810 */ 0x03, 0x43, 0x0F, 0x00, 0xF2, 0x04, 0xFF, 0x41, 0x0B, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x8D, 0x02, -/* 00014820 */ 0x37, 0x42, 0x01, 0x00, 0x4B, 0x42, 0x6B, 0x41, 0x42, 0x0B, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x42, -/* 00014830 */ 0x91, 0x03, 0x43, 0x05, 0x00, 0x60, 0x43, 0x43, 0x11, 0x5B, 0x01, 0x43, 0x11, 0x00, 0x5B, 0x02, -/* 00014840 */ 0x30, 0x11, 0x00, 0xCB, 0x70, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, -/* 00014850 */ 0x79, 0x3A, 0x43, 0x0C, 0x79, 0x27, 0x43, 0x0E, 0x79, 0x2B, 0x43, 0x0F, 0x79, 0x2B, 0x43, 0x0D, -/* 00014860 */ 0x5B, 0x03, 0x43, 0x11, 0x00, 0xF2, 0x04, 0xFF, 0x41, 0x0B, 0x00, 0x00, 0x00, 0x11, 0x00, 0x8D, -/* 00014870 */ 0x02, 0x37, 0x42, 0x01, 0x00, 0x4B, 0x42, 0x6B, 0x41, 0x42, 0x0B, 0x07, 0x04, 0x00, 0x5A, 0x00, -/* 00014880 */ 0x42, 0x91, 0x03, 0x43, 0x05, 0x00, 0x60, 0x43, 0x43, 0x11, 0x5B, 0x01, 0x43, 0x12, 0x00, 0x5B, -/* 00014890 */ 0x02, 0x31, 0x12, 0x00, 0xCB, 0x88, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, -/* 000148A0 */ 0x00, 0xD6, 0x0F, 0x44, 0x43, 0x79, 0x44, 0x43, 0x0C, 0x79, 0x2B, 0x43, 0x0D, 0x79, 0x27, 0x43, -/* 000148B0 */ 0x0E, 0x79, 0x2B, 0x43, 0x0F, 0x5B, 0x03, 0x43, 0x12, 0x00, 0xF2, 0x04, 0xFF, 0x41, 0x0B, 0x00, -/* 000148C0 */ 0x00, 0x00, 0x12, 0x00, 0x94, 0x0E, 0x32, 0x8D, 0x02, 0x23, 0x41, 0x04, 0x00, 0x07, 0x03, 0x00, -/* 000148D0 */ 0x5A, 0x00, 0x02, 0x91, 0x0E, 0x42, 0x09, 0x00, 0x5B, 0x01, 0x42, 0x13, 0x00, 0xD3, 0x10, 0x42, -/* 000148E0 */ 0x5B, 0x02, 0x42, 0x13, 0x00, 0xEE, 0x03, 0x41, 0x41, 0x13, 0x00, 0x47, 0x3C, 0x41, 0x8D, 0x02, -/* 000148F0 */ 0x37, 0x42, 0x01, 0x00, 0x4B, 0x42, 0x6B, 0x41, 0x42, 0x13, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x42, -/* 00014900 */ 0x5B, 0x01, 0x3C, 0x14, 0x00, 0x8D, 0x01, 0x16, 0x43, 0x0A, 0x00, 0x4B, 0x43, 0x5B, 0x02, 0x43, -/* 00014910 */ 0x14, 0x00, 0xF2, 0x03, 0x41, 0x41, 0x13, 0x00, 0x00, 0x00, 0x14, 0x00, 0x47, 0x3D, 0x41, 0x8D, -/* 00014920 */ 0x02, 0x37, 0x42, 0x01, 0x00, 0x4B, 0x42, 0x6B, 0x41, 0x42, 0x0B, 0x07, 0x04, 0x00, 0x5A, 0x00, -/* 00014930 */ 0x42, 0x5B, 0x01, 0x3D, 0x15, 0x00, 0x5B, 0x02, 0x2C, 0x15, 0x00, 0xCB, 0xA0, 0x00, 0x00, 0x00, -/* 00014940 */ 0x07, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x79, 0x33, 0x43, 0x0C, 0x79, 0x27, 0x43, 0x0D, -/* 00014950 */ 0x79, 0x27, 0x43, 0x0E, 0x79, 0x2B, 0x43, 0x0F, 0x5B, 0x03, 0x43, 0x15, 0x00, 0xF2, 0x04, 0xFF, -/* 00014960 */ 0x41, 0x0B, 0x00, 0x00, 0x00, 0x15, 0x00, 0x8D, 0x02, 0x37, 0x42, 0x01, 0x00, 0x4B, 0x42, 0x6B, -/* 00014970 */ 0x41, 0x42, 0x0B, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x42, 0x91, 0x03, 0x43, 0x05, 0x00, 0x5B, 0x01, -/* 00014980 */ 0x43, 0x16, 0x00, 0x5B, 0x02, 0x33, 0x16, 0x00, 0xCB, 0xB8, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, -/* 00014990 */ 0x00, 0x43, 0x00, 0x00, 0x00, 0x79, 0x3D, 0x43, 0x0C, 0x79, 0x2B, 0x43, 0x0D, 0x79, 0x27, 0x43, -/* 000149A0 */ 0x0E, 0x79, 0x2B, 0x43, 0x0F, 0x5B, 0x03, 0x43, 0x16, 0x00, 0xF2, 0x04, 0xFF, 0x41, 0x0B, 0x00, -/* 000149B0 */ 0x00, 0x00, 0x16, 0x00, 0x91, 0x03, 0x00, 0x05, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, -/* 000149C0 */ 0x09, 0xD0, 0x00, 0xB8, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, -/* 000149D0 */ 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0xA0, -/* 000149E0 */ 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, -/* 000149F0 */ 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x03, -/* 00014A00 */ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, -/* 00014A10 */ 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, -/* 00014A20 */ 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x82, -/* 00014A30 */ 0x01, 0x00, 0x00, 0x5C, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, -/* 00014A40 */ 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x03, -/* 00014A50 */ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, -/* 00014A60 */ 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x2C, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, -/* 00014A70 */ 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, -/* 00014A80 */ 0x01, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, -/* 00014A90 */ 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x00, -/* 00014AA0 */ 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x5E, -/* 00014AB0 */ 0x01, 0x00, 0x00, 0x61, 0x01, 0x00, 0x00, 0x5D, 0xFE, 0x3F, 0x01, 0xFE, 0x60, 0x01, 0xFE, 0x5E, -/* 00014AC0 */ 0x01, 0xFE, 0x61, 0x01, 0xFE, 0x60, 0x01, 0xFE, 0x03, 0x03, 0xFE, 0x5E, 0x01, 0xFE, 0x04, 0x03, -/* 00014AD0 */ 0xFE, 0x61, 0x01, 0xFE, 0x05, 0x03, 0xFE, 0x88, 0x01, 0xFE, 0x83, 0x01, 0xFE, 0x82, 0x01, 0xFE, -/* 00014AE0 */ 0x80, 0x01, 0xFE, 0x81, 0x01, 0xFE, 0x15, 0x01, 0xFE, 0x15, 0x01, 0xFE, 0x84, 0x01, 0x4D, 0xFE, -/* 00014AF0 */ 0x01, 0xED, 0x28, 0x53, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x3E, 0x00, 0x05, 0x00, 0x1B, 0x00, 0x14, -/* 00014B00 */ 0x00, 0x3D, 0x00, 0x10, 0x00, 0x38, 0x00, 0x29, 0x00, 0x4C, 0x00, 0xC7, 0x00, 0xA3, 0x03, 0x12, -/* 00014B10 */ 0x00, 0xF7, 0x20, 0x06, 0x00, 0xFD, 0x0A, 0x06, 0x00, 0x25, 0x07, 0x06, 0x00, 0x20, 0x01, 0x06, -/* 00014B20 */ 0x00, 0x78, 0x01, 0x1A, 0x00, 0x5C, 0x00, 0x35, 0x00, 0x36, 0x0F, 0x38, 0x00, 0x2E, 0x02, 0x38, -/* 00014B30 */ 0x00, 0x40, 0x02, 0x38, 0x00, 0x9A, 0x02, 0x0E, 0x00, 0x27, 0x00, 0x05, 0x00, 0xB0, 0x04, 0x21, -/* 00014B40 */ 0x00, 0x05, 0x02, 0x06, 0x00, 0xDC, 0x03, 0x06, 0x00, 0xAC, 0x01, 0x06, 0x00, 0x8F, 0x00, 0x21, -/* 00014B50 */ 0x00, 0x4C, 0x00, 0x06, 0x00, 0xA4, 0x00, 0x1C, 0x00, 0x5A, 0x00, 0x5B, 0x00, 0xC9, 0x00, 0x2F, -/* 00014B60 */ 0x00, 0x43, 0x00, 0x56, 0x00, 0x4C, 0x01, 0x06, 0x00, 0x9E, 0x00, 0x48, 0x00, 0xB7, 0x00, 0x69, -/* 00014B70 */ 0x00, 0xC7, 0x00, 0x51, 0x00, 0xCF, 0x00, 0x55, 0x00, 0x59, 0x05, 0x03, 0x00, 0x61, 0x00, 0x27, -/* 00014B80 */ 0x00, 0x3D, 0x01, 0x31, 0x00, 0x7B, 0x00, 0x48, 0x00, 0xD7, 0x00, 0x4D, 0x00, 0xDF, 0x00, 0x0A, -/* 00014B90 */ 0x00, 0x1B, 0x00, 0x00, 0xF0, 0x66, 0x01, 0x00, 0x13, 0x63, 0x01, 0x00, 0xFF, 0x5D, 0x01, 0x00, -/* 00014BA0 */ 0x0B, 0x5D, 0x01, 0x00, 0x1A, 0x5C, 0x01, 0x00, 0x23, 0x59, 0x01, 0x00, 0xA9, 0x57, 0x01, 0x00, -/* 00014BB0 */ 0x2F, 0x56, 0x01, 0x00, 0xB5, 0x54, 0x01, 0x00, 0x82, 0x52, 0x01, 0x00, 0x5B, 0x51, 0x01, 0x00, -/* 00014BC0 */ 0x6B, 0x50, 0x01, 0x00, 0xBB, 0x4F, 0x01, 0x00, 0x0B, 0x4F, 0x01, 0x00, 0x82, 0x4E, 0x01, 0x00, -/* 00014BD0 */ 0x78, 0x4C, 0x01, 0x00, 0xD8, 0x4B, 0x01, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x01, 0x00, -/* 00014BE0 */ 0xFE, 0x9B, 0x07, 0x71, 0xA2, 0x41, 0xD1, 0x00, 0x73, 0xFF, 0xAC, 0x57, 0x01, 0x00, 0xFF, 0x00, -/* 00014BF0 */ 0x10, 0x01, 0x00, 0x03, 0x02, 0xFF, 0xAC, 0x57, 0x01, 0x00, 0xC9, 0xC9, 0x01, 0x06, 0x03, 0x07, -/* 00014C00 */ 0x07, 0x17, 0x16, 0x03, 0x01, 0x03, 0x01, 0x01, 0x01, 0x01, 0x06, 0x08, 0x55, 0x59, 0x07, 0xB2, -/* 00014C10 */ 0x05, 0x07, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA6, 0x07, 0x47, 0x04, 0x07, 0x8D, 0x02, 0x17, 0x07, -/* 00014C20 */ 0x00, 0x00, 0x4B, 0x07, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x05, 0x00, 0x00, 0x8D, -/* 00014C30 */ 0x01, 0x0E, 0x08, 0x01, 0x00, 0x4B, 0x08, 0x5B, 0x02, 0x08, 0x00, 0x00, 0x8D, 0x03, 0x03, 0x08, -/* 00014C40 */ 0x02, 0x00, 0x60, 0x08, 0x08, 0x00, 0x5B, 0x03, 0x08, 0x00, 0x00, 0x5B, 0x04, 0x03, 0x00, 0x00, -/* 00014C50 */ 0x5B, 0x05, 0x04, 0x00, 0x00, 0xEE, 0x06, 0x00, 0x07, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, -/* 00014C60 */ 0x24, 0x00, 0xFE, 0xD9, 0x01, 0xFF, 0xBF, 0x57, 0x01, 0x00, 0x03, 0x05, 0x00, 0x00, 0x00, 0x0A, -/* 00014C70 */ 0x00, 0x23, 0x00, 0x44, 0x00, 0x92, 0x00, 0x00, 0x3F, 0x5D, 0x18, 0x01, 0x00, 0x8D, 0x07, 0x00, -/* 00014C80 */ 0xFE, 0x75, 0x07, 0x13, 0xA0, 0x41, 0xC3, 0x00, 0xFE, 0x0D, 0x04, 0x71, 0xFF, 0x00, 0x00, 0x00, -/* 00014C90 */ 0x02, 0xFF, 0xDC, 0x51, 0x01, 0x00, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFF, 0xDC, -/* 00014CA0 */ 0x51, 0x01, 0x00, 0xFE, 0x60, 0x04, 0xFE, 0x60, 0x04, 0x01, 0xFE, 0x02, 0x04, 0x07, 0x12, 0x17, -/* 00014CB0 */ 0x05, 0x2B, 0x2A, 0x03, 0x02, 0x01, 0x03, 0x14, 0x15, 0x16, 0x06, 0xFE, 0x0D, 0x04, 0x08, 0x06, -/* 00014CC0 */ 0xFE, 0xF7, 0x03, 0x06, 0xFE, 0x99, 0x04, 0x06, 0xFE, 0x35, 0x04, 0x06, 0xFE, 0x88, 0x04, 0x06, -/* 00014CD0 */ 0xFE, 0x86, 0x04, 0x06, 0xFE, 0x46, 0x04, 0x06, 0xFE, 0x47, 0x04, 0x06, 0xFE, 0x48, 0x04, 0x06, -/* 00014CE0 */ 0xFE, 0x49, 0x04, 0x06, 0xFE, 0x4A, 0x04, 0x06, 0xFE, 0x4B, 0x04, 0x06, 0xFE, 0x4C, 0x04, 0x06, -/* 00014CF0 */ 0xFE, 0x4D, 0x04, 0x06, 0xFE, 0x4E, 0x04, 0x9F, 0x59, 0x17, 0xB2, 0x12, 0x17, 0x4F, 0x13, 0x4F, -/* 00014D00 */ 0x17, 0x94, 0x02, 0x17, 0x8D, 0x01, 0x0B, 0x17, 0x00, 0x00, 0x4B, 0x17, 0x07, 0x03, 0x00, 0x5A, -/* 00014D10 */ 0x00, 0x03, 0x5B, 0x01, 0x12, 0x00, 0x00, 0x5B, 0x02, 0x02, 0x00, 0x00, 0xEE, 0x03, 0x17, 0x17, -/* 00014D20 */ 0x00, 0x00, 0x94, 0x02, 0x17, 0xCD, 0x17, 0x0E, 0x00, 0x00, 0x9F, 0x00, 0x04, 0x17, 0x9F, 0x01, -/* 00014D30 */ 0x05, 0x17, 0x9F, 0x02, 0x06, 0x17, 0x9F, 0x03, 0x07, 0x17, 0x9F, 0x04, 0x08, 0x17, 0x9F, 0x05, -/* 00014D40 */ 0x09, 0x17, 0x9F, 0x06, 0x0A, 0x17, 0x9F, 0x07, 0x0B, 0x17, 0x9F, 0x08, 0x0C, 0x17, 0x9F, 0x09, -/* 00014D50 */ 0x0D, 0x17, 0x9F, 0x0A, 0x0E, 0x17, 0x9F, 0x0B, 0x0F, 0x17, 0x9F, 0x0C, 0x10, 0x17, 0x9F, 0x0D, -/* 00014D60 */ 0x11, 0x17, 0x47, 0x13, 0x17, 0x8D, 0x02, 0x19, 0x17, 0x01, 0x00, 0x4B, 0x17, 0x07, 0x04, 0x00, -/* 00014D70 */ 0x5A, 0x00, 0x03, 0x5B, 0x01, 0x13, 0x01, 0x00, 0x91, 0x02, 0x18, 0x02, 0x00, 0x5B, 0x02, 0x18, -/* 00014D80 */ 0x01, 0x00, 0xD3, 0x00, 0x18, 0x5B, 0x03, 0x18, 0x01, 0x00, 0xEE, 0x04, 0x00, 0x17, 0x01, 0x00, -/* 00014D90 */ 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFF, 0x09, 0x52, 0x01, 0x00, 0x04, 0x0C, 0x00, 0x00, -/* 00014DA0 */ 0x00, 0x21, 0x00, 0x4C, 0x00, 0x40, 0x00, 0xE6, 0x01, 0x30, 0x00, 0x00, 0x02, 0x00, 0xB2, 0x4D, -/* 00014DB0 */ 0x01, 0x00, 0xBF, 0x4C, 0x00, 0xC1, 0x43, 0xA8, 0x01, 0x00, 0xFE, 0x88, 0x07, 0x44, 0xA2, 0x41, -/* 00014DC0 */ 0xD1, 0x00, 0x72, 0xFF, 0x6F, 0x54, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFF, -/* 00014DD0 */ 0x6F, 0x54, 0x01, 0x00, 0xFE, 0xBD, 0x01, 0xFE, 0xBD, 0x01, 0x01, 0x07, 0x07, 0x0B, 0x1B, 0x17, -/* 00014DE0 */ 0x04, 0x01, 0x04, 0x04, 0x04, 0x04, 0x01, 0x0A, 0x0B, 0x06, 0xFE, 0x86, 0x04, 0x07, 0x06, 0xFE, -/* 00014DF0 */ 0x82, 0x04, 0x06, 0xFE, 0x80, 0x04, 0x0B, 0x5B, 0x4F, 0x09, 0x14, 0x03, 0x00, 0x07, 0x02, 0x09, -/* 00014E00 */ 0x4D, 0x00, 0x8D, 0x01, 0x02, 0x0C, 0x00, 0x00, 0x4B, 0x0C, 0x60, 0x0C, 0x0C, 0x00, 0x47, 0x09, -/* 00014E10 */ 0x0C, 0x8D, 0x01, 0x02, 0x0C, 0x00, 0x00, 0x4B, 0x0C, 0x60, 0x0C, 0x0C, 0x01, 0xA6, 0x0D, 0x15, -/* 00014E20 */ 0x03, 0x00, 0x0C, 0x0D, 0x09, 0x22, 0x00, 0x15, 0x03, 0x00, 0x09, 0x03, 0x09, 0x1A, 0x00, 0x75, -/* 00014E30 */ 0x09, 0x08, 0x02, 0x43, 0x0D, 0x09, 0x04, 0x47, 0x0C, 0x0D, 0x0F, 0x07, 0x00, 0x0D, 0x43, 0x0D, -/* 00014E40 */ 0x09, 0x05, 0x47, 0x0C, 0x0D, 0x75, 0x0C, 0x08, 0x03, 0x47, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA6, -/* 00014E50 */ 0x00, 0x24, 0x00, 0xFE, 0x86, 0x04, 0xFE, 0x3C, 0x02, 0xFE, 0x86, 0x04, 0xFE, 0x3D, 0x02, 0xFF, -/* 00014E60 */ 0x9F, 0x54, 0x01, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x34, 0x00, 0x0F, 0x00, 0x3B, -/* 00014E70 */ 0x00, 0x1E, 0x00, 0x52, 0x00, 0x04, 0x00, 0x35, 0x00, 0x16, 0x00, 0x63, 0x00, 0x08, 0x00, 0x33, -/* 00014E80 */ 0x00, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x5E, 0x07, 0x1A, 0xA0, 0x41, -/* 00014E90 */ 0xC1, 0x00, 0xFE, 0x36, 0x04, 0x70, 0xFF, 0xB0, 0x4E, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, -/* 00014EA0 */ 0x01, 0x01, 0xFF, 0xB0, 0x4E, 0x01, 0x00, 0x82, 0x82, 0x01, 0x05, 0x03, 0x06, 0x04, 0x12, 0x11, -/* 00014EB0 */ 0x03, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x05, 0x08, 0x3B, 0x59, 0x06, 0xB2, 0x03, 0x06, 0x4F, -/* 00014EC0 */ 0x04, 0x8D, 0x01, 0x0B, 0x06, 0x00, 0x00, 0x4B, 0x06, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5B, -/* 00014ED0 */ 0x01, 0x03, 0x00, 0x00, 0x8D, 0x01, 0x0D, 0x07, 0x01, 0x00, 0x4B, 0x07, 0x5B, 0x02, 0x07, 0x00, -/* 00014EE0 */ 0x00, 0xEE, 0x03, 0x06, 0x06, 0x00, 0x00, 0x47, 0x04, 0x06, 0x60, 0x00, 0x04, 0x00, 0x09, 0x02, -/* 00014EF0 */ 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x31, 0x04, 0xFF, 0xCA, 0x4E, 0x01, 0x00, 0x03, 0x07, 0x00, -/* 00014F00 */ 0x00, 0x00, 0x29, 0x00, 0x3E, 0x00, 0x09, 0x00, 0x29, 0x00, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, -/* 00014F10 */ 0x88, 0x01, 0x00, 0xFE, 0x49, 0x07, 0x1E, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x27, 0x04, 0x6F, 0xFF, -/* 00014F20 */ 0x5E, 0x4B, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0x5E, 0x4B, 0x01, 0x00, -/* 00014F30 */ 0x84, 0x84, 0x01, 0x06, 0x04, 0x07, 0x0A, 0x1A, 0x1A, 0x03, 0x02, 0x03, 0x01, 0x01, 0x01, 0x01, -/* 00014F40 */ 0x06, 0x06, 0xFE, 0x27, 0x04, 0x08, 0x64, 0x59, 0x07, 0xB2, 0x05, 0x07, 0x8D, 0x03, 0x37, 0x08, -/* 00014F50 */ 0x00, 0x00, 0x4B, 0x08, 0x6B, 0x07, 0x08, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x08, 0x8D, 0x01, -/* 00014F60 */ 0x09, 0x09, 0x01, 0x00, 0x4B, 0x09, 0x5B, 0x01, 0x09, 0x00, 0x00, 0xA6, 0x09, 0x5B, 0x02, 0x09, -/* 00014F70 */ 0x00, 0x00, 0x8D, 0x01, 0x0C, 0x09, 0x02, 0x00, 0x4B, 0x09, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, -/* 00014F80 */ 0x5B, 0x01, 0x05, 0x01, 0x00, 0x5B, 0x02, 0x04, 0x01, 0x00, 0x5B, 0x03, 0x02, 0x01, 0x00, 0xEE, -/* 00014F90 */ 0x04, 0x09, 0x09, 0x01, 0x00, 0x5B, 0x03, 0x09, 0x00, 0x00, 0xF2, 0x04, 0x00, 0x07, 0x00, 0x00, -/* 00014FA0 */ 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x48, 0xFF, 0x7C, 0x4B, 0x01, -/* 00014FB0 */ 0x00, 0x02, 0x05, 0x00, 0x00, 0x00, 0x5D, 0x00, 0x65, 0x00, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, -/* 00014FC0 */ 0x88, 0x01, 0x00, 0xFE, 0x44, 0x07, 0x17, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x26, 0x04, 0x6E, 0xFF, -/* 00014FD0 */ 0x7C, 0x4A, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0x7C, 0x4A, 0x01, 0x00, -/* 00014FE0 */ 0x76, 0x76, 0x01, 0x06, 0x04, 0x07, 0x0A, 0x1A, 0x1A, 0x03, 0x02, 0x03, 0x01, 0x01, 0x01, 0x01, -/* 00014FF0 */ 0x06, 0x06, 0xFE, 0x26, 0x04, 0x08, 0x64, 0x59, 0x07, 0xB2, 0x05, 0x07, 0x8D, 0x03, 0x37, 0x08, -/* 00015000 */ 0x00, 0x00, 0x4B, 0x08, 0x6B, 0x07, 0x08, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x08, 0x8D, 0x01, -/* 00015010 */ 0x08, 0x09, 0x01, 0x00, 0x4B, 0x09, 0x5B, 0x01, 0x09, 0x00, 0x00, 0xA6, 0x09, 0x5B, 0x02, 0x09, -/* 00015020 */ 0x00, 0x00, 0x8D, 0x01, 0x0C, 0x09, 0x02, 0x00, 0x4B, 0x09, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, -/* 00015030 */ 0x5B, 0x01, 0x05, 0x01, 0x00, 0x5B, 0x02, 0x04, 0x01, 0x00, 0x5B, 0x03, 0x02, 0x01, 0x00, 0xEE, -/* 00015040 */ 0x04, 0x09, 0x09, 0x01, 0x00, 0x5B, 0x03, 0x09, 0x00, 0x00, 0xF2, 0x04, 0x00, 0x07, 0x00, 0x00, -/* 00015050 */ 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x48, 0xFF, 0x9A, 0x4A, 0x01, -/* 00015060 */ 0x00, 0x02, 0x05, 0x00, 0x00, 0x00, 0x5D, 0x00, 0x57, 0x00, 0x00, 0xBF, 0x5C, 0x18, 0xC1, 0x03, -/* 00015070 */ 0x88, 0x01, 0x00, 0xFE, 0x36, 0x07, 0x1D, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x40, 0x04, 0x6D, 0xFF, -/* 00015080 */ 0xD6, 0x48, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFF, 0xD6, 0x48, 0x01, 0x00, -/* 00015090 */ 0xFE, 0x8C, 0x01, 0xFE, 0x8C, 0x01, 0x01, 0x08, 0x03, 0x09, 0x04, 0x24, 0x20, 0x03, 0x03, 0x01, -/* 000150A0 */ 0x03, 0x02, 0x02, 0x02, 0x02, 0x08, 0x08, 0x8A, 0x4F, 0x06, 0x4F, 0x07, 0x8D, 0x01, 0x0B, 0x09, -/* 000150B0 */ 0x00, 0x00, 0x4B, 0x09, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x03, 0x00, 0x00, 0x5B, -/* 000150C0 */ 0x02, 0x05, 0x00, 0x00, 0xEE, 0x03, 0x09, 0x09, 0x00, 0x00, 0x47, 0x06, 0x09, 0xA6, 0x09, 0x47, -/* 000150D0 */ 0x07, 0x09, 0xA6, 0x09, 0x14, 0x03, 0x00, 0x04, 0x09, 0x09, 0x20, 0x00, 0x8D, 0x03, 0x03, 0x0A, -/* 000150E0 */ 0x01, 0x00, 0x6B, 0x09, 0x0A, 0x00, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x0A, 0xF2, 0x01, 0x09, 0x09, -/* 000150F0 */ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x07, 0x09, 0x09, 0x22, 0x00, 0x8D, 0x03, 0x24, 0x0A, -/* 00015100 */ 0x02, 0x00, 0x6B, 0x09, 0x0A, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0A, 0x5B, 0x01, 0x04, 0x02, -/* 00015110 */ 0x00, 0xF2, 0x02, 0x09, 0x09, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x47, 0x07, 0x09, 0xCD, 0x00, -/* 00015120 */ 0x02, 0x00, 0x00, 0x9F, 0x00, 0x06, 0x00, 0x9F, 0x01, 0x07, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, -/* 00015130 */ 0x24, 0x00, 0xFE, 0x64, 0x02, 0xFE, 0x38, 0x03, 0xFF, 0xFF, 0x48, 0x01, 0x00, 0x07, 0x04, 0x00, -/* 00015140 */ 0x00, 0x00, 0x21, 0x00, 0x3B, 0x00, 0x05, 0x00, 0x13, 0x00, 0x0A, 0x00, 0x2A, 0x00, 0x20, 0x00, -/* 00015150 */ 0x53, 0x00, 0x22, 0x00, 0x75, 0x00, 0x12, 0x00, 0x22, 0x00, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, -/* 00015160 */ 0x88, 0x01, 0x00, 0xFE, 0x21, 0x07, 0x1D, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x3F, 0x04, 0x6C, 0xFF, -/* 00015170 */ 0xFA, 0x44, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFF, 0xFA, 0x44, 0x01, 0x00, -/* 00015180 */ 0xFE, 0xF6, 0x01, 0xFE, 0xF6, 0x01, 0x01, 0x08, 0x06, 0x0A, 0x04, 0x2A, 0x26, 0x03, 0x03, 0x01, -/* 00015190 */ 0x03, 0x03, 0x03, 0x03, 0x09, 0x06, 0xFE, 0xF6, 0x03, 0x05, 0xFE, 0x98, 0x04, 0x06, 0xFE, 0x5B, -/* 000151A0 */ 0x03, 0x06, 0xFE, 0x47, 0x03, 0xB0, 0x4F, 0x08, 0x2C, 0x0A, 0x06, 0x15, 0x03, 0x00, 0x0A, 0x02, -/* 000151B0 */ 0x09, 0x34, 0x00, 0x8D, 0x03, 0x03, 0x0B, 0x00, 0x00, 0x6B, 0x0A, 0x0B, 0x00, 0x07, 0x03, 0x00, -/* 000151C0 */ 0x5A, 0x00, 0x0B, 0x47, 0x0C, 0x03, 0x01, 0x04, 0x01, 0x0D, 0x07, 0x2F, 0x0C, 0x0C, 0x0D, 0x2F, -/* 000151D0 */ 0x0C, 0x0C, 0x04, 0x5B, 0x01, 0x0C, 0x00, 0x00, 0x5B, 0x02, 0x05, 0x00, 0x00, 0xF2, 0x03, 0xFF, -/* 000151E0 */ 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8D, 0x03, 0x03, 0x0B, 0x00, 0x00, 0x6B, 0x0A, 0x0B, -/* 000151F0 */ 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0B, 0x5B, 0x01, 0x06, 0x01, 0x00, 0xF2, 0x02, 0x0A, 0x0A, -/* 00015200 */ 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x08, 0x0A, 0xA6, 0x0A, 0x14, 0x08, 0x00, 0x08, 0x0A, -/* 00015210 */ 0x60, 0x0A, 0x08, 0x02, 0x0F, 0x34, 0x00, 0x0A, 0x8D, 0x03, 0x03, 0x0B, 0x00, 0x00, 0x6B, 0x0A, -/* 00015220 */ 0x0B, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0B, 0x47, 0x0C, 0x03, 0x01, 0x04, 0x01, 0x0D, 0x07, -/* 00015230 */ 0x2F, 0x0C, 0x0C, 0x0D, 0x2F, 0x0C, 0x0C, 0x04, 0x5B, 0x01, 0x0C, 0x02, 0x00, 0x5B, 0x02, 0x05, -/* 00015240 */ 0x02, 0x00, 0xF2, 0x03, 0xFF, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x47, 0x00, 0x08, 0x09, -/* 00015250 */ 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x8A, 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0x8F, 0x04, 0xFF, -/* 00015260 */ 0x1D, 0x45, 0x01, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x2F, 0x00, 0x34, 0x00, 0x75, -/* 00015270 */ 0x00, 0x22, 0x00, 0x3E, 0x00, 0x0F, 0x00, 0x5D, 0x00, 0x34, 0x00, 0x76, 0x00, 0x08, 0x00, 0x1D, -/* 00015280 */ 0x00, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0xFC, 0x06, 0x08, 0xA3, 0x41, -/* 00015290 */ 0xC1, 0x00, 0xFE, 0x47, 0x03, 0x6B, 0xFF, 0x25, 0x3F, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, -/* 000152A0 */ 0x03, 0x01, 0xFF, 0x25, 0x3F, 0x01, 0x00, 0xFE, 0xB2, 0x03, 0xFE, 0xB2, 0x03, 0x01, 0x0A, 0x04, -/* 000152B0 */ 0x0A, 0x05, 0x60, 0x59, 0x03, 0x09, 0x06, 0x0A, 0x09, 0x0A, 0x0A, 0x09, 0x08, 0x06, 0xFE, 0x47, -/* 000152C0 */ 0x03, 0xFE, 0x94, 0x01, 0x59, 0x0A, 0xB2, 0x06, 0x0A, 0x4F, 0x07, 0x4F, 0x08, 0x15, 0x05, 0x00, -/* 000152D0 */ 0x04, 0x02, 0xA6, 0x0A, 0x47, 0x04, 0x0A, 0x15, 0x05, 0x00, 0x05, 0x02, 0xA6, 0x0A, 0x47, 0x05, -/* 000152E0 */ 0x0A, 0x4F, 0x07, 0x4F, 0x08, 0x69, 0x09, 0x00, 0x00, 0x00, 0x0A, 0x14, 0x0A, 0x00, 0x06, 0x0A, -/* 000152F0 */ 0xA6, 0x0A, 0x14, 0x03, 0x00, 0x06, 0x0A, 0x09, 0x1C, 0x00, 0x8D, 0x01, 0x03, 0x0A, 0x00, 0x00, -/* 00015300 */ 0x07, 0x03, 0x00, 0x5B, 0x01, 0x04, 0x00, 0x00, 0x5B, 0x02, 0x05, 0x00, 0x00, 0xC2, 0x03, 0x00, -/* 00015310 */ 0x0A, 0x00, 0x00, 0x09, 0x40, 0x01, 0x8D, 0x03, 0x24, 0x0B, 0x01, 0x00, 0x6B, 0x0A, 0x0B, 0x00, -/* 00015320 */ 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0B, 0x5B, 0x01, 0x06, 0x01, 0x00, 0xF2, 0x02, 0x0A, 0x0A, 0x00, -/* 00015330 */ 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x07, 0x0A, 0x8D, 0x03, 0x37, 0x0B, 0x02, 0x00, 0x4B, 0x0B, -/* 00015340 */ 0x6B, 0x0A, 0x0B, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0B, 0x5B, 0x01, 0x07, 0x02, 0x00, 0xF2, -/* 00015350 */ 0x02, 0x0A, 0x0A, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x0F, 0x1F, 0x00, 0x0A, 0x8D, 0x03, 0x03, -/* 00015360 */ 0x0B, 0x03, 0x00, 0x6B, 0x0A, 0x0B, 0x02, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0B, 0x5B, 0x01, 0x03, -/* 00015370 */ 0x03, 0x00, 0xF2, 0x02, 0xFF, 0x0A, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x8D, 0x03, 0x03, 0x0B, -/* 00015380 */ 0x03, 0x00, 0x6B, 0x0A, 0x0B, 0x03, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0B, 0x5B, 0x01, 0x07, 0x04, -/* 00015390 */ 0x00, 0xF2, 0x02, 0x0A, 0x0A, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x47, 0x08, 0x0A, 0xA6, 0x0A, -/* 000153A0 */ 0x14, 0x03, 0x00, 0x08, 0x0A, 0x09, 0x43, 0x00, 0x8D, 0x03, 0x37, 0x0B, 0x02, 0x00, 0x4B, 0x0B, -/* 000153B0 */ 0x6B, 0x0A, 0x0B, 0x04, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x0B, 0xF2, 0x01, 0x0A, 0x0A, 0x04, 0x00, -/* 000153C0 */ 0x00, 0x00, 0x05, 0x00, 0x47, 0x08, 0x0A, 0x8D, 0x03, 0x03, 0x0B, 0x03, 0x00, 0x6B, 0x0A, 0x0B, -/* 000153D0 */ 0x05, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0B, 0x5B, 0x01, 0x07, 0x06, 0x00, 0x5B, 0x02, 0x08, 0x06, -/* 000153E0 */ 0x00, 0xF2, 0x03, 0xFF, 0x0A, 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x8D, 0x01, 0x06, 0x0A, 0x04, -/* 000153F0 */ 0x00, 0x4B, 0x0A, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x08, 0x07, 0x00, 0x5B, 0x02, -/* 00015400 */ 0x04, 0x07, 0x00, 0x5B, 0x03, 0x05, 0x07, 0x00, 0xEE, 0x04, 0xFF, 0x0A, 0x07, 0x00, 0x47, 0x0A, -/* 00015410 */ 0x08, 0x8D, 0x03, 0x37, 0x0C, 0x02, 0x00, 0x4B, 0x0C, 0x6B, 0x0B, 0x0C, 0x06, 0x07, 0x03, 0x00, -/* 00015420 */ 0x5A, 0x00, 0x0C, 0x8D, 0x01, 0x0D, 0x0D, 0x05, 0x00, 0x4B, 0x0D, 0x5B, 0x01, 0x0D, 0x08, 0x00, -/* 00015430 */ 0x5B, 0x02, 0x07, 0x08, 0x00, 0xF2, 0x03, 0x0B, 0x0B, 0x06, 0x00, 0x00, 0x00, 0x08, 0x00, 0x75, -/* 00015440 */ 0x0B, 0x0A, 0x07, 0x60, 0x0A, 0x08, 0x08, 0x80, 0x0A, 0x0A, 0xF8, 0x00, 0xFA, 0x0A, 0x47, 0x00, -/* 00015450 */ 0x07, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x36, 0x03, 0xB0, 0xFE, 0x8E, 0x02, 0xFE, -/* 00015460 */ 0xEF, 0x01, 0x61, 0xFE, 0xF0, 0x01, 0x4D, 0xFE, 0x31, 0x04, 0xFE, 0x31, 0x04, 0xAB, 0xFF, 0x3D, -/* 00015470 */ 0x3F, 0x01, 0x00, 0x10, 0x09, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0E, 0x00, 0x23, 0x00, -/* 00015480 */ 0x15, 0x00, 0x3B, 0x00, 0x1C, 0x00, 0x48, 0x00, 0x22, 0x00, 0x31, 0x00, 0x25, 0x00, 0x2C, 0x00, -/* 00015490 */ 0x1F, 0x00, 0x85, 0x00, 0x22, 0x00, 0x3F, 0x00, 0x0A, 0x00, 0x32, 0x00, 0x1F, 0x00, 0x2B, 0x00, -/* 000154A0 */ 0x24, 0x00, 0x48, 0x00, 0x23, 0x00, 0x95, 0x00, 0x35, 0x00, 0x3C, 0x00, 0x0B, 0x00, 0x33, 0x00, -/* 000154B0 */ 0x08, 0x00, 0x14, 0x00, 0x00, 0xBF, 0x5D, 0x08, 0xC1, 0x03, 0x8D, 0x05, 0x00, 0xFE, 0xE9, 0x06, -/* 000154C0 */ 0x09, 0xA2, 0x41, 0xD1, 0x00, 0x69, 0xFF, 0x6F, 0x3B, 0x01, 0x00, 0x01, 0xFF, 0x00, 0x10, 0x01, -/* 000154D0 */ 0x00, 0x06, 0x06, 0xFF, 0x6F, 0x3B, 0x01, 0x00, 0xFE, 0x8F, 0x01, 0xFE, 0x8F, 0x01, 0x40, 0x04, -/* 000154E0 */ 0xF8, 0xFE, 0x92, 0x04, 0xFE, 0x93, 0x04, 0xFE, 0x94, 0x04, 0x0C, 0x03, 0x0B, 0x08, 0x16, 0x16, -/* 000154F0 */ 0x03, 0x02, 0x03, 0x01, 0x01, 0x01, 0x01, 0x08, 0x09, 0x0A, 0x08, 0x58, 0x94, 0x02, 0x03, 0x94, -/* 00015500 */ 0x03, 0x04, 0x94, 0x04, 0x05, 0x94, 0x05, 0x06, 0x8D, 0x03, 0x03, 0x0C, 0x00, 0x00, 0x6B, 0x0B, -/* 00015510 */ 0x0C, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x8D, 0x03, 0x23, 0x0D, 0x01, 0x00, 0x07, 0x03, -/* 00015520 */ 0x00, 0x5A, 0x00, 0x02, 0x91, 0x02, 0x0E, 0x02, 0x00, 0x5B, 0x01, 0x0E, 0x01, 0x00, 0xD3, 0x00, -/* 00015530 */ 0x0E, 0x5B, 0x02, 0x0E, 0x01, 0x00, 0xEE, 0x03, 0x0D, 0x0D, 0x01, 0x00, 0x5B, 0x01, 0x0D, 0x00, -/* 00015540 */ 0x00, 0x5B, 0x02, 0x07, 0x00, 0x00, 0xF2, 0x03, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 00015550 */ 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xEE, 0x01, 0xFF, 0xBE, 0x3B, 0x01, 0x00, 0x02, 0x0C, 0x00, 0x00, -/* 00015560 */ 0x00, 0x4A, 0x00, 0x3F, 0x01, 0x00, 0x6A, 0x55, 0x01, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, -/* 00015570 */ 0x01, 0x00, 0xFE, 0xEA, 0x06, 0x45, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x97, 0x04, 0x6A, 0xFF, 0xF7, -/* 00015580 */ 0x3B, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x01, 0xFF, 0xF7, 0x3B, 0x01, 0x00, 0xE6, -/* 00015590 */ 0xE6, 0x01, 0x07, 0x03, 0x07, 0x09, 0x1C, 0x1A, 0x04, 0x01, 0x05, 0x01, 0x01, 0x01, 0x01, 0x06, -/* 000155A0 */ 0x08, 0x75, 0x59, 0x07, 0xB2, 0x05, 0x07, 0x15, 0x05, 0x00, 0x03, 0x02, 0xA6, 0x07, 0x47, 0x03, -/* 000155B0 */ 0x07, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA6, 0x07, 0x47, 0x04, 0x07, 0x8D, 0x02, 0x02, 0x08, 0x00, -/* 000155C0 */ 0x00, 0x6B, 0x07, 0x08, 0x00, 0x07, 0x08, 0x00, 0x5A, 0x00, 0x08, 0x5B, 0x01, 0x05, 0x00, 0x00, -/* 000155D0 */ 0x8D, 0x01, 0x02, 0x09, 0x01, 0x00, 0x5B, 0x02, 0x09, 0x00, 0x00, 0x8D, 0x01, 0x03, 0x09, 0x02, -/* 000155E0 */ 0x00, 0x5B, 0x03, 0x09, 0x00, 0x00, 0x8D, 0x01, 0x04, 0x09, 0x03, 0x00, 0x5B, 0x04, 0x09, 0x00, -/* 000155F0 */ 0x00, 0x8D, 0x01, 0x05, 0x09, 0x04, 0x00, 0x5B, 0x05, 0x09, 0x00, 0x00, 0x5B, 0x06, 0x03, 0x00, -/* 00015600 */ 0x00, 0x5B, 0x07, 0x04, 0x00, 0x00, 0xF2, 0x08, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 00015610 */ 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x53, 0xFF, 0x23, 0x3C, 0x01, 0x00, 0x04, 0x05, 0x00, -/* 00015620 */ 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0A, 0x00, 0x27, 0x00, 0x5A, 0x00, 0x7D, 0x00, 0x00, 0xBF, -/* 00015630 */ 0x5D, 0x08, 0xC1, 0x03, 0x8D, 0x05, 0x00, 0xFE, 0xE3, 0x06, 0x09, 0xA2, 0x41, 0xD1, 0x00, 0x67, -/* 00015640 */ 0xFF, 0x2F, 0x39, 0x01, 0x00, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x06, 0x06, 0xFF, 0x2F, 0x39, -/* 00015650 */ 0x01, 0x00, 0xFE, 0x8F, 0x01, 0xFE, 0x8F, 0x01, 0x40, 0x04, 0xF8, 0xFE, 0x92, 0x04, 0xFE, 0x93, -/* 00015660 */ 0x04, 0xFE, 0x94, 0x04, 0x0C, 0x03, 0x0B, 0x08, 0x16, 0x16, 0x03, 0x02, 0x03, 0x01, 0x01, 0x01, -/* 00015670 */ 0x01, 0x08, 0x09, 0x0A, 0x08, 0x58, 0x94, 0x02, 0x03, 0x94, 0x03, 0x04, 0x94, 0x04, 0x05, 0x94, -/* 00015680 */ 0x05, 0x06, 0x8D, 0x03, 0x03, 0x0C, 0x00, 0x00, 0x6B, 0x0B, 0x0C, 0x00, 0x07, 0x03, 0x00, 0x5A, -/* 00015690 */ 0x00, 0x0C, 0x8D, 0x03, 0x23, 0x0D, 0x01, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x91, 0x02, -/* 000156A0 */ 0x0E, 0x02, 0x00, 0x5B, 0x01, 0x0E, 0x01, 0x00, 0xD3, 0x00, 0x0E, 0x5B, 0x02, 0x0E, 0x01, 0x00, -/* 000156B0 */ 0xEE, 0x03, 0x0D, 0x0D, 0x01, 0x00, 0x5B, 0x01, 0x0D, 0x00, 0x00, 0x5B, 0x02, 0x07, 0x00, 0x00, -/* 000156C0 */ 0xF2, 0x03, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xEE, -/* 000156D0 */ 0x01, 0xFF, 0x7E, 0x39, 0x01, 0x00, 0x02, 0x0C, 0x00, 0x00, 0x00, 0x4A, 0x00, 0x3F, 0x01, 0x00, -/* 000156E0 */ 0xE4, 0x56, 0x01, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0xE4, 0x06, 0x45, -/* 000156F0 */ 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x96, 0x04, 0x68, 0xFF, 0xB7, 0x39, 0x01, 0x00, 0xFF, 0x00, 0x10, -/* 00015700 */ 0x01, 0x00, 0x03, 0x01, 0xFF, 0xB7, 0x39, 0x01, 0x00, 0xE6, 0xE6, 0x01, 0x07, 0x03, 0x07, 0x09, -/* 00015710 */ 0x1C, 0x1A, 0x04, 0x01, 0x05, 0x01, 0x01, 0x01, 0x01, 0x06, 0x08, 0x75, 0x59, 0x07, 0xB2, 0x05, -/* 00015720 */ 0x07, 0x15, 0x05, 0x00, 0x03, 0x02, 0xA6, 0x07, 0x47, 0x03, 0x07, 0x15, 0x05, 0x00, 0x04, 0x02, -/* 00015730 */ 0xA6, 0x07, 0x47, 0x04, 0x07, 0x8D, 0x02, 0x02, 0x08, 0x00, 0x00, 0x6B, 0x07, 0x08, 0x00, 0x07, -/* 00015740 */ 0x08, 0x00, 0x5A, 0x00, 0x08, 0x5B, 0x01, 0x05, 0x00, 0x00, 0x8D, 0x01, 0x02, 0x09, 0x01, 0x00, -/* 00015750 */ 0x5B, 0x02, 0x09, 0x00, 0x00, 0x8D, 0x01, 0x03, 0x09, 0x02, 0x00, 0x5B, 0x03, 0x09, 0x00, 0x00, -/* 00015760 */ 0x8D, 0x01, 0x04, 0x09, 0x03, 0x00, 0x5B, 0x04, 0x09, 0x00, 0x00, 0x8D, 0x01, 0x05, 0x09, 0x04, -/* 00015770 */ 0x00, 0x5B, 0x05, 0x09, 0x00, 0x00, 0x5B, 0x06, 0x03, 0x00, 0x00, 0x5B, 0x07, 0x04, 0x00, 0x00, -/* 00015780 */ 0xF2, 0x08, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, -/* 00015790 */ 0x00, 0x53, 0xFF, 0xE3, 0x39, 0x01, 0x00, 0x04, 0x05, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, -/* 000157A0 */ 0x0A, 0x00, 0x27, 0x00, 0x5A, 0x00, 0x7D, 0x00, 0x00, 0xBF, 0x5D, 0x08, 0xC1, 0x03, 0x8D, 0x05, -/* 000157B0 */ 0x00, 0xFE, 0xDD, 0x06, 0x09, 0xA2, 0x41, 0xD1, 0x00, 0x65, 0xFF, 0x01, 0x37, 0x01, 0x00, 0x01, -/* 000157C0 */ 0xFF, 0x00, 0x10, 0x01, 0x00, 0x06, 0x06, 0xFF, 0x01, 0x37, 0x01, 0x00, 0xFE, 0x8B, 0x01, 0xFE, -/* 000157D0 */ 0x8B, 0x01, 0x40, 0x04, 0xF8, 0xFE, 0x92, 0x04, 0xFE, 0x93, 0x04, 0xFE, 0x94, 0x04, 0x0C, 0x03, -/* 000157E0 */ 0x0B, 0x08, 0x16, 0x16, 0x03, 0x02, 0x03, 0x01, 0x01, 0x01, 0x01, 0x08, 0x09, 0x0A, 0x08, 0x58, -/* 000157F0 */ 0x94, 0x02, 0x03, 0x94, 0x03, 0x04, 0x94, 0x04, 0x05, 0x94, 0x05, 0x06, 0x8D, 0x03, 0x03, 0x0C, -/* 00015800 */ 0x00, 0x00, 0x6B, 0x0B, 0x0C, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x8D, 0x03, 0x23, 0x0D, -/* 00015810 */ 0x01, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x91, 0x02, 0x0E, 0x02, 0x00, 0x5B, 0x01, 0x0E, -/* 00015820 */ 0x01, 0x00, 0xD3, 0x00, 0x0E, 0x5B, 0x02, 0x0E, 0x01, 0x00, 0xEE, 0x03, 0x0D, 0x0D, 0x01, 0x00, -/* 00015830 */ 0x5B, 0x01, 0x0D, 0x00, 0x00, 0x5B, 0x02, 0x07, 0x00, 0x00, 0xF2, 0x03, 0xFF, 0x0B, 0x00, 0x00, -/* 00015840 */ 0x00, 0x00, 0x00, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xEE, 0x01, 0xFF, 0x50, 0x37, 0x01, 0x00, -/* 00015850 */ 0x02, 0x0C, 0x00, 0x00, 0x00, 0x4A, 0x00, 0x3B, 0x01, 0x00, 0x5E, 0x58, 0x01, 0x00, 0xBF, 0x5C, -/* 00015860 */ 0x08, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0xDE, 0x06, 0x45, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x95, -/* 00015870 */ 0x04, 0x66, 0xFF, 0x89, 0x37, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x01, 0xFF, 0x89, -/* 00015880 */ 0x37, 0x01, 0x00, 0xE2, 0xE2, 0x01, 0x07, 0x03, 0x07, 0x09, 0x1C, 0x1A, 0x04, 0x01, 0x05, 0x01, -/* 00015890 */ 0x01, 0x01, 0x01, 0x06, 0x08, 0x75, 0x59, 0x07, 0xB2, 0x05, 0x07, 0x15, 0x05, 0x00, 0x03, 0x02, -/* 000158A0 */ 0xA6, 0x07, 0x47, 0x03, 0x07, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA6, 0x07, 0x47, 0x04, 0x07, 0x8D, -/* 000158B0 */ 0x02, 0x02, 0x08, 0x00, 0x00, 0x6B, 0x07, 0x08, 0x00, 0x07, 0x08, 0x00, 0x5A, 0x00, 0x08, 0x5B, -/* 000158C0 */ 0x01, 0x05, 0x00, 0x00, 0x8D, 0x01, 0x02, 0x09, 0x01, 0x00, 0x5B, 0x02, 0x09, 0x00, 0x00, 0x8D, -/* 000158D0 */ 0x01, 0x03, 0x09, 0x02, 0x00, 0x5B, 0x03, 0x09, 0x00, 0x00, 0x8D, 0x01, 0x04, 0x09, 0x03, 0x00, -/* 000158E0 */ 0x5B, 0x04, 0x09, 0x00, 0x00, 0x8D, 0x01, 0x05, 0x09, 0x04, 0x00, 0x5B, 0x05, 0x09, 0x00, 0x00, -/* 000158F0 */ 0x5B, 0x06, 0x03, 0x00, 0x00, 0x5B, 0x07, 0x04, 0x00, 0x00, 0xF2, 0x08, 0x00, 0x07, 0x00, 0x00, -/* 00015900 */ 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x53, 0xFF, 0xB1, 0x37, 0x01, -/* 00015910 */ 0x00, 0x04, 0x05, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0A, 0x00, 0x27, 0x00, 0x5A, 0x00, -/* 00015920 */ 0x7D, 0x00, 0x00, 0xBF, 0x5C, 0x0E, 0xC1, 0x07, 0x88, 0x01, 0x00, 0xFE, 0xA6, 0x06, 0x08, 0xA3, -/* 00015930 */ 0x41, 0xC1, 0x00, 0xFE, 0x37, 0x04, 0x64, 0xFF, 0x80, 0x28, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, -/* 00015940 */ 0x00, 0x07, 0x07, 0xFF, 0x80, 0x28, 0x01, 0x00, 0xFE, 0x16, 0x06, 0xFE, 0x16, 0x06, 0x01, 0x0E, -/* 00015950 */ 0x08, 0x12, 0x0A, 0x89, 0x83, 0x03, 0x02, 0x01, 0x0D, 0x07, 0x08, 0x08, 0x08, 0x08, 0x01, 0x11, -/* 00015960 */ 0x06, 0xFE, 0xF6, 0x03, 0x06, 0xFE, 0x41, 0x04, 0x05, 0xFE, 0x91, 0x04, 0x08, 0x0C, 0x0B, 0xFE, -/* 00015970 */ 0x4D, 0x02, 0x59, 0x12, 0xB2, 0x0E, 0x12, 0x4F, 0x0F, 0x4F, 0x10, 0x2C, 0x12, 0x0E, 0x15, 0x0F, -/* 00015980 */ 0x00, 0x12, 0x02, 0x8D, 0x03, 0x0C, 0x12, 0x00, 0x00, 0xE1, 0x12, 0x0E, 0x12, 0x00, 0x0F, 0x24, -/* 00015990 */ 0x00, 0x12, 0x8D, 0x03, 0x03, 0x13, 0x01, 0x00, 0x6B, 0x12, 0x13, 0x00, 0x07, 0x03, 0x00, 0x5A, -/* 000159A0 */ 0x00, 0x13, 0x5B, 0x01, 0x08, 0x00, 0x00, 0x5B, 0x02, 0x03, 0x00, 0x00, 0xF2, 0x03, 0xFF, 0x12, -/* 000159B0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8D, 0x03, 0x37, 0x13, 0x02, 0x00, 0x4B, 0x13, 0x6B, 0x12, -/* 000159C0 */ 0x13, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x13, 0x8D, 0x03, 0x0C, 0x14, 0x00, 0x00, 0x07, 0x02, -/* 000159D0 */ 0x00, 0x5B, 0x01, 0x0E, 0x02, 0x00, 0xC2, 0x02, 0x14, 0x14, 0x02, 0x00, 0x5B, 0x01, 0x14, 0x01, -/* 000159E0 */ 0x00, 0xF2, 0x02, 0x12, 0x12, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x0F, 0x12, 0x8D, 0x03, -/* 000159F0 */ 0x37, 0x13, 0x02, 0x00, 0x4B, 0x13, 0x6B, 0x12, 0x13, 0x02, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x13, -/* 00015A00 */ 0x5B, 0x01, 0x0F, 0x03, 0x00, 0xF2, 0x02, 0x12, 0x12, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x0F, -/* 00015A10 */ 0x25, 0x00, 0x12, 0x8D, 0x03, 0x37, 0x13, 0x02, 0x00, 0x4B, 0x13, 0x6B, 0x12, 0x13, 0x03, 0x07, -/* 00015A20 */ 0x02, 0x00, 0x5A, 0x00, 0x13, 0x5B, 0x01, 0x0F, 0x04, 0x00, 0xF2, 0x02, 0x12, 0x12, 0x03, 0x00, -/* 00015A30 */ 0x00, 0x00, 0x04, 0x00, 0x0F, 0x06, 0x00, 0x12, 0x47, 0x00, 0x04, 0x09, 0x7F, 0x01, 0xA6, 0x12, -/* 00015A40 */ 0x47, 0x10, 0x12, 0x8D, 0x03, 0x03, 0x12, 0x01, 0x00, 0x60, 0x12, 0x12, 0x04, 0x0E, 0xB1, 0x00, -/* 00015A50 */ 0x12, 0xA6, 0x12, 0x14, 0x03, 0x00, 0x0C, 0x12, 0x09, 0xA7, 0x00, 0xA6, 0x12, 0x14, 0x03, 0x00, -/* 00015A60 */ 0x0D, 0x12, 0x09, 0x9D, 0x00, 0x8D, 0x01, 0x0A, 0x12, 0x03, 0x00, 0x4B, 0x12, 0x96, 0x12, 0x12, -/* 00015A70 */ 0x0B, 0x00, 0x00, 0x0E, 0x14, 0x00, 0x12, 0x8D, 0x01, 0x0A, 0x12, 0x03, 0x00, 0x4B, 0x12, 0x96, -/* 00015A80 */ 0x12, 0x12, 0x0B, 0x01, 0x00, 0x47, 0x10, 0x12, 0x09, 0x77, 0x00, 0x8D, 0x03, 0x37, 0x13, 0x02, -/* 00015A90 */ 0x00, 0x4B, 0x13, 0x6B, 0x12, 0x13, 0x05, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x13, 0xF2, 0x01, 0x12, -/* 00015AA0 */ 0x12, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x47, 0x10, 0x12, 0x8D, 0x01, 0x06, 0x12, 0x04, 0x00, -/* 00015AB0 */ 0x4B, 0x12, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x05, 0x5B, 0x01, 0x10, 0x06, 0x00, 0xA6, 0x13, 0x5B, -/* 00015AC0 */ 0x02, 0x13, 0x06, 0x00, 0x8D, 0x01, 0x07, 0x13, 0x05, 0x00, 0x4B, 0x13, 0x07, 0x04, 0x00, 0x5A, -/* 00015AD0 */ 0x00, 0x05, 0xA6, 0x14, 0x5B, 0x01, 0x14, 0x07, 0x00, 0x5B, 0x02, 0x09, 0x07, 0x00, 0x5B, 0x03, -/* 00015AE0 */ 0x0A, 0x07, 0x00, 0xEE, 0x04, 0x13, 0x13, 0x07, 0x00, 0x5B, 0x03, 0x13, 0x06, 0x00, 0xEE, 0x04, -/* 00015AF0 */ 0xFF, 0x12, 0x06, 0x00, 0x8D, 0x01, 0x0A, 0x12, 0x03, 0x00, 0x4B, 0x12, 0x9B, 0x10, 0x12, 0x0B, -/* 00015B00 */ 0x00, 0x00, 0x0F, 0x65, 0x00, 0x10, 0x8D, 0x03, 0x37, 0x13, 0x02, 0x00, 0x4B, 0x13, 0x6B, 0x12, -/* 00015B10 */ 0x13, 0x05, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x13, 0xF2, 0x01, 0x12, 0x12, 0x05, 0x00, 0x00, 0x00, -/* 00015B20 */ 0x08, 0x00, 0x47, 0x10, 0x12, 0x8D, 0x01, 0x06, 0x12, 0x04, 0x00, 0x4B, 0x12, 0x07, 0x04, 0x00, -/* 00015B30 */ 0x5A, 0x00, 0x05, 0x5B, 0x01, 0x10, 0x09, 0x00, 0x5B, 0x02, 0x0C, 0x09, 0x00, 0x8D, 0x01, 0x07, -/* 00015B40 */ 0x13, 0x05, 0x00, 0x4B, 0x13, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x05, 0x5B, 0x01, 0x0D, 0x0A, 0x00, -/* 00015B50 */ 0x5B, 0x02, 0x09, 0x0A, 0x00, 0x5B, 0x03, 0x0A, 0x0A, 0x00, 0xEE, 0x04, 0x13, 0x13, 0x0A, 0x00, -/* 00015B60 */ 0x5B, 0x03, 0x13, 0x09, 0x00, 0xEE, 0x04, 0xFF, 0x12, 0x09, 0x00, 0x8D, 0x03, 0x03, 0x13, 0x01, -/* 00015B70 */ 0x00, 0x6B, 0x12, 0x13, 0x06, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x13, 0x5B, 0x01, 0x10, 0x0B, 0x00, -/* 00015B80 */ 0x8D, 0x03, 0x24, 0x15, 0x06, 0x00, 0x6B, 0x14, 0x15, 0x07, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x15, -/* 00015B90 */ 0x5B, 0x01, 0x0E, 0x0C, 0x00, 0xF2, 0x02, 0x14, 0x14, 0x07, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x5B, -/* 00015BA0 */ 0x02, 0x14, 0x0B, 0x00, 0x5B, 0x03, 0x06, 0x0B, 0x00, 0x5B, 0x04, 0x07, 0x0B, 0x00, 0xF2, 0x05, -/* 00015BB0 */ 0x00, 0x12, 0x06, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, -/* 00015BC0 */ 0x8A, 0x02, 0x8D, 0xB4, 0xB1, 0xFE, 0x61, 0x03, 0x61, 0xFE, 0xE6, 0x01, 0xFE, 0x38, 0x03, 0xFF, -/* 00015BD0 */ 0xF5, 0x28, 0x01, 0x00, 0x11, 0x09, 0x00, 0x00, 0x00, 0x17, 0x00, 0x4B, 0x00, 0x24, 0x00, 0x48, -/* 00015BE0 */ 0x00, 0x38, 0x00, 0x35, 0x00, 0x4A, 0x00, 0x3C, 0x00, 0x06, 0x00, 0x32, 0x00, 0x05, 0x00, 0x29, -/* 00015BF0 */ 0x00, 0x22, 0x00, 0xC6, 0x00, 0x12, 0x00, 0x7C, 0x00, 0x14, 0x00, 0x96, 0x00, 0x1F, 0x00, 0x2E, -/* 00015C00 */ 0x00, 0x4A, 0x00, 0x76, 0x00, 0x0E, 0x00, 0x70, 0x00, 0x04, 0x00, 0x24, 0x00, 0x1F, 0x00, 0x2A, -/* 00015C10 */ 0x00, 0x46, 0x00, 0x79, 0x00, 0x52, 0x00, 0x8E, 0x00, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, -/* 00015C20 */ 0x01, 0x00, 0xFE, 0x96, 0x06, 0x26, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x3D, 0x04, 0x63, 0xFF, 0x15, -/* 00015C30 */ 0x26, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFF, 0x15, 0x26, 0x01, 0x00, 0xFD, -/* 00015C40 */ 0xFD, 0x01, 0x05, 0x04, 0x07, 0x06, 0x22, 0x22, 0x03, 0x04, 0x02, 0x04, 0x04, 0x04, 0x04, 0x06, -/* 00015C50 */ 0x0B, 0x0C, 0x99, 0x8D, 0x03, 0x37, 0x08, 0x00, 0x00, 0x4B, 0x08, 0x6B, 0x07, 0x08, 0x00, 0x07, -/* 00015C60 */ 0x02, 0x00, 0x5A, 0x00, 0x08, 0x5B, 0x01, 0x05, 0x00, 0x00, 0xF2, 0x02, 0x07, 0x07, 0x00, 0x00, -/* 00015C70 */ 0x00, 0x00, 0x00, 0x00, 0x0F, 0x25, 0x00, 0x07, 0x8D, 0x03, 0x37, 0x08, 0x00, 0x00, 0x4B, 0x08, -/* 00015C80 */ 0x6B, 0x07, 0x08, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x08, 0x5B, 0x01, 0x05, 0x01, 0x00, 0xF2, -/* 00015C90 */ 0x02, 0x07, 0x07, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0F, 0x1A, 0x00, 0x07, 0x8D, 0x03, 0x03, -/* 00015CA0 */ 0x08, 0x01, 0x00, 0x6B, 0x07, 0x08, 0x02, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x08, 0xF2, 0x01, 0xFF, -/* 00015CB0 */ 0x07, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x8D, 0x03, 0x03, 0x08, 0x01, 0x00, 0x6B, 0x07, 0x08, -/* 00015CC0 */ 0x03, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x08, 0x5B, 0x01, 0x04, 0x03, 0x00, 0x5B, 0x02, 0x05, 0x03, -/* 00015CD0 */ 0x00, 0x5B, 0x03, 0x02, 0x03, 0x00, 0x5B, 0x04, 0x03, 0x03, 0x00, 0xF2, 0x05, 0x00, 0x07, 0x03, -/* 00015CE0 */ 0x00, 0x00, 0x00, 0x03, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xB4, 0xB1, 0xFE, 0x86, -/* 00015CF0 */ 0x02, 0xFE, 0xE6, 0x01, 0xFF, 0x35, 0x26, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x4A, 0x00, -/* 00015D00 */ 0x34, 0x00, 0x1A, 0x00, 0x38, 0x00, 0x33, 0x00, 0x70, 0x00, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, -/* 00015D10 */ 0x88, 0x01, 0x00, 0xFE, 0x8E, 0x06, 0x1F, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x3C, 0x04, 0x62, 0xFF, -/* 00015D20 */ 0xEE, 0x24, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFF, 0xEE, 0x24, 0x01, 0x00, -/* 00015D30 */ 0xFE, 0xFE, 0x00, 0xFE, 0xFE, 0x00, 0x01, 0x05, 0x03, 0x06, 0x06, 0x22, 0x22, 0x03, 0x04, 0x02, -/* 00015D40 */ 0x04, 0x04, 0x04, 0x04, 0x05, 0x0C, 0x99, 0x8D, 0x03, 0x37, 0x07, 0x00, 0x00, 0x4B, 0x07, 0x6B, -/* 00015D50 */ 0x06, 0x07, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x07, 0x5B, 0x01, 0x04, 0x00, 0x00, 0xF2, 0x02, -/* 00015D60 */ 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x25, 0x00, 0x06, 0x8D, 0x03, 0x37, 0x07, -/* 00015D70 */ 0x00, 0x00, 0x4B, 0x07, 0x6B, 0x06, 0x07, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x07, 0x5B, 0x01, -/* 00015D80 */ 0x04, 0x01, 0x00, 0xF2, 0x02, 0x06, 0x06, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0F, 0x1A, 0x00, -/* 00015D90 */ 0x06, 0x8D, 0x03, 0x03, 0x07, 0x01, 0x00, 0x6B, 0x06, 0x07, 0x02, 0x07, 0x01, 0x00, 0x5A, 0x00, -/* 00015DA0 */ 0x07, 0xF2, 0x01, 0xFF, 0x06, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x8D, 0x03, 0x03, 0x07, 0x01, -/* 00015DB0 */ 0x00, 0x6B, 0x06, 0x07, 0x03, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x07, 0x5B, 0x01, 0x03, 0x03, 0x00, -/* 00015DC0 */ 0x5B, 0x02, 0x04, 0x03, 0x00, 0x5B, 0x03, 0x02, 0x03, 0x00, 0x5B, 0x04, 0x02, 0x03, 0x00, 0xF2, -/* 00015DD0 */ 0x05, 0x00, 0x06, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, -/* 00015DE0 */ 0xB4, 0xB1, 0xFE, 0x86, 0x02, 0xFE, 0xE6, 0x01, 0xFF, 0x0E, 0x25, 0x01, 0x00, 0x04, 0x00, 0x00, -/* 00015DF0 */ 0x00, 0x00, 0x4A, 0x00, 0x34, 0x00, 0x1A, 0x00, 0x38, 0x00, 0x33, 0x00, 0x71, 0x00, 0x00, 0x3F, -/* 00015E00 */ 0x5D, 0x18, 0xC1, 0x43, 0xAD, 0x05, 0x00, 0xFE, 0x5F, 0x06, 0x22, 0xA2, 0x41, 0xC1, 0x00, 0xFE, -/* 00015E10 */ 0x3B, 0x04, 0x5D, 0xFF, 0xCC, 0x1D, 0x01, 0x00, 0x04, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, -/* 00015E20 */ 0xFF, 0xCC, 0x1D, 0x01, 0x00, 0xFE, 0x00, 0x07, 0xFE, 0x00, 0x07, 0x02, 0xFE, 0xCA, 0x01, 0xFE, -/* 00015E30 */ 0x90, 0x04, 0x0B, 0x0F, 0x15, 0x04, 0x68, 0x66, 0x03, 0x06, 0x04, 0x04, 0x03, 0x03, 0x03, 0x03, -/* 00015E40 */ 0x01, 0x12, 0x13, 0x14, 0x15, 0x07, 0x0B, 0x06, 0xFE, 0x56, 0x04, 0x05, 0xFE, 0x53, 0x04, 0x06, -/* 00015E50 */ 0xFE, 0x46, 0x04, 0x06, 0xFE, 0x48, 0x04, 0x06, 0xFE, 0x49, 0x04, 0x06, 0xFE, 0x4A, 0x04, 0x05, -/* 00015E60 */ 0xFE, 0x58, 0x04, 0x06, 0xFE, 0x4B, 0x04, 0x06, 0xFE, 0x4C, 0x04, 0x06, 0xFE, 0x4D, 0x04, 0x06, -/* 00015E70 */ 0xFE, 0x54, 0x04, 0xFE, 0xB9, 0x01, 0x94, 0x02, 0x0F, 0x4F, 0x16, 0x94, 0x03, 0x16, 0x91, 0x02, -/* 00015E80 */ 0x16, 0x00, 0x00, 0xA6, 0x17, 0x14, 0x03, 0x00, 0x16, 0x17, 0x09, 0x06, 0x00, 0x47, 0x16, 0x02, -/* 00015E90 */ 0x09, 0x27, 0x00, 0x8D, 0x03, 0x24, 0x18, 0x01, 0x00, 0x6B, 0x17, 0x18, 0x00, 0x07, 0x02, 0x00, -/* 00015EA0 */ 0x5A, 0x00, 0x18, 0x91, 0x02, 0x19, 0x00, 0x00, 0x5B, 0x01, 0x19, 0x00, 0x00, 0xF2, 0x02, 0x17, -/* 00015EB0 */ 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x16, 0x17, 0x94, 0x02, 0x16, 0x8D, 0x03, 0x37, -/* 00015EC0 */ 0x17, 0x02, 0x00, 0x4B, 0x17, 0x6B, 0x16, 0x17, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x17, 0x91, -/* 00015ED0 */ 0x02, 0x18, 0x00, 0x00, 0x5B, 0x01, 0x18, 0x01, 0x00, 0xF2, 0x02, 0x16, 0x16, 0x01, 0x00, 0x00, -/* 00015EE0 */ 0x00, 0x01, 0x00, 0x94, 0x02, 0x16, 0x94, 0x03, 0x03, 0x14, 0x08, 0x00, 0x10, 0x04, 0x14, 0x03, -/* 00015EF0 */ 0x00, 0x10, 0x05, 0x09, 0x3E, 0x00, 0x8D, 0x03, 0x37, 0x17, 0x02, 0x00, 0x4B, 0x17, 0x6B, 0x16, -/* 00015F00 */ 0x17, 0x02, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x17, 0xCD, 0x18, 0x04, 0x00, 0x00, 0x9F, 0x00, 0x06, -/* 00015F10 */ 0x18, 0x9F, 0x01, 0x07, 0x18, 0x9F, 0x02, 0x08, 0x18, 0x9F, 0x03, 0x09, 0x18, 0x5B, 0x01, 0x18, -/* 00015F20 */ 0x02, 0x00, 0xD3, 0x00, 0x18, 0x5B, 0x02, 0x18, 0x02, 0x00, 0xF2, 0x03, 0xFF, 0x16, 0x02, 0x00, -/* 00015F30 */ 0x00, 0x00, 0x02, 0x00, 0x14, 0x08, 0x00, 0x10, 0x0A, 0x14, 0x03, 0x00, 0x10, 0x05, 0x09, 0x3A, -/* 00015F40 */ 0x00, 0x8D, 0x03, 0x37, 0x17, 0x02, 0x00, 0x4B, 0x17, 0x6B, 0x16, 0x17, 0x02, 0x07, 0x03, 0x00, -/* 00015F50 */ 0x5A, 0x00, 0x17, 0xCD, 0x18, 0x03, 0x01, 0x00, 0x9F, 0x00, 0x0B, 0x18, 0x9F, 0x01, 0x0C, 0x18, -/* 00015F60 */ 0x9F, 0x02, 0x0D, 0x18, 0x5B, 0x01, 0x18, 0x03, 0x00, 0xD3, 0x01, 0x18, 0x5B, 0x02, 0x18, 0x03, -/* 00015F70 */ 0x00, 0xF2, 0x03, 0xFF, 0x16, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x91, 0x03, 0x16, 0x03, 0x00, -/* 00015F80 */ 0x14, 0x03, 0x00, 0x16, 0x03, 0x09, 0x47, 0x00, 0x14, 0x08, 0x00, 0x11, 0x04, 0x14, 0x03, 0x00, -/* 00015F90 */ 0x11, 0x0E, 0x09, 0x3A, 0x00, 0x8D, 0x03, 0x37, 0x17, 0x02, 0x00, 0x4B, 0x17, 0x6B, 0x16, 0x17, -/* 00015FA0 */ 0x02, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x17, 0xCD, 0x18, 0x03, 0x02, 0x00, 0x9F, 0x00, 0x07, 0x18, -/* 00015FB0 */ 0x9F, 0x01, 0x08, 0x18, 0x9F, 0x02, 0x09, 0x18, 0x5B, 0x01, 0x18, 0x04, 0x00, 0xD3, 0x02, 0x18, -/* 00015FC0 */ 0x5B, 0x02, 0x18, 0x04, 0x00, 0xF2, 0x03, 0xFF, 0x16, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x91, -/* 00015FD0 */ 0x03, 0x16, 0x03, 0x00, 0x14, 0x03, 0x00, 0x16, 0x03, 0x09, 0x47, 0x00, 0x14, 0x08, 0x00, 0x11, -/* 00015FE0 */ 0x0A, 0x14, 0x03, 0x00, 0x11, 0x0E, 0x09, 0x3A, 0x00, 0x8D, 0x03, 0x37, 0x17, 0x02, 0x00, 0x4B, -/* 00015FF0 */ 0x17, 0x6B, 0x16, 0x17, 0x02, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x17, 0xCD, 0x18, 0x03, 0x03, 0x00, -/* 00016000 */ 0x9F, 0x00, 0x0B, 0x18, 0x9F, 0x01, 0x0C, 0x18, 0x9F, 0x02, 0x0D, 0x18, 0x5B, 0x01, 0x18, 0x05, -/* 00016010 */ 0x00, 0xD3, 0x03, 0x18, 0x5B, 0x02, 0x18, 0x05, 0x00, 0xF2, 0x03, 0xFF, 0x16, 0x02, 0x00, 0x00, -/* 00016020 */ 0x00, 0x05, 0x00, 0x91, 0x02, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, -/* 00016030 */ 0x36, 0x03, 0x61, 0x86, 0xFF, 0x01, 0x1E, 0x01, 0x00, 0x0D, 0x08, 0x00, 0x00, 0x00, 0x3F, 0x00, -/* 00016040 */ 0x51, 0x00, 0x29, 0x00, 0x29, 0x00, 0x03, 0x00, 0x25, 0x00, 0x0D, 0x00, 0x41, 0x00, 0x3E, 0x00, -/* 00016050 */ 0x14, 0x01, 0x0D, 0x00, 0x41, 0x00, 0x3A, 0x00, 0x0D, 0x01, 0x1A, 0x00, 0x5C, 0x00, 0x3A, 0x00, -/* 00016060 */ 0x5A, 0x01, 0x1A, 0x00, 0x5C, 0x00, 0x3A, 0x00, 0x5E, 0x01, 0x0A, 0x00, 0x18, 0x00, 0x00, 0xA7, -/* 00016070 */ 0x62, 0x01, 0x00, 0x3B, 0x62, 0x01, 0x00, 0x5D, 0x61, 0x01, 0x00, 0x7F, 0x60, 0x01, 0x00, 0xBF, -/* 00016080 */ 0x5C, 0x08, 0xC1, 0x13, 0x88, 0x21, 0x00, 0xFE, 0x81, 0x06, 0x38, 0xA2, 0x41, 0xD1, 0x00, 0x61, -/* 00016090 */ 0xFF, 0x7D, 0x23, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0x7D, 0x23, 0x01, -/* 000160A0 */ 0x00, 0xFE, 0x19, 0x01, 0xFE, 0x19, 0x01, 0x41, 0x05, 0x09, 0x0B, 0x05, 0x12, 0x12, 0x04, 0x01, -/* 000160B0 */ 0x02, 0x05, 0x05, 0x05, 0x05, 0x01, 0x0A, 0x06, 0xFE, 0x40, 0x03, 0x06, 0xFE, 0x13, 0x04, 0x06, -/* 000160C0 */ 0xFE, 0x42, 0x03, 0x0B, 0x06, 0xFE, 0x43, 0x03, 0x06, 0xFE, 0x44, 0x03, 0x07, 0x52, 0x8D, 0x04, -/* 000160D0 */ 0x37, 0x0C, 0x00, 0x00, 0x4B, 0x0C, 0x6B, 0x0B, 0x0C, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x0C, -/* 000160E0 */ 0x8D, 0x01, 0x02, 0x0D, 0x01, 0x00, 0x5B, 0x01, 0x0D, 0x00, 0x00, 0x5B, 0x02, 0x09, 0x00, 0x00, -/* 000160F0 */ 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x79, 0x03, 0x0D, -/* 00016100 */ 0x01, 0x79, 0x05, 0x0D, 0x02, 0x79, 0x05, 0x0D, 0x03, 0x79, 0x05, 0x0D, 0x04, 0x5B, 0x03, 0x0D, -/* 00016110 */ 0x00, 0x00, 0xF2, 0x04, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA6, 0x00, 0x24, 0x00, -/* 00016120 */ 0x01, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, -/* 00016130 */ 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0xFE, -/* 00016140 */ 0x88, 0x01, 0xFE, 0x83, 0x01, 0xFE, 0x82, 0x01, 0xFE, 0x80, 0x01, 0xFE, 0x81, 0x01, 0xFF, 0xA3, -/* 00016150 */ 0x23, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0xF2, 0x00, 0x00, 0xBF, 0x5C, 0x08, -/* 00016160 */ 0xC1, 0x13, 0x88, 0x21, 0x00, 0xFE, 0x76, 0x06, 0x34, 0xA2, 0x41, 0xD1, 0x00, 0x60, 0xFF, 0xC3, -/* 00016170 */ 0x21, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0xC3, 0x21, 0x01, 0x00, 0xFE, -/* 00016180 */ 0x19, 0x01, 0xFE, 0x19, 0x01, 0x41, 0x05, 0x09, 0x0B, 0x05, 0x12, 0x12, 0x04, 0x01, 0x02, 0x05, -/* 00016190 */ 0x05, 0x05, 0x05, 0x01, 0x0A, 0x06, 0xFE, 0x40, 0x03, 0x06, 0xFE, 0x13, 0x04, 0x06, 0xFE, 0x42, -/* 000161A0 */ 0x03, 0x0B, 0x06, 0xFE, 0x43, 0x03, 0x06, 0xFE, 0x44, 0x03, 0x07, 0x52, 0x8D, 0x04, 0x37, 0x0C, -/* 000161B0 */ 0x00, 0x00, 0x4B, 0x0C, 0x6B, 0x0B, 0x0C, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x0C, 0x8D, 0x01, -/* 000161C0 */ 0x02, 0x0D, 0x01, 0x00, 0x5B, 0x01, 0x0D, 0x00, 0x00, 0x5B, 0x02, 0x09, 0x00, 0x00, 0xCB, 0x00, -/* 000161D0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x79, 0x03, 0x0D, 0x01, 0x79, -/* 000161E0 */ 0x05, 0x0D, 0x02, 0x79, 0x05, 0x0D, 0x03, 0x79, 0x05, 0x0D, 0x04, 0x5B, 0x03, 0x0D, 0x00, 0x00, -/* 000161F0 */ 0xF2, 0x04, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x01, 0x18, -/* 00016200 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, -/* 00016210 */ 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0xFE, 0x88, 0x01, -/* 00016220 */ 0xFE, 0x83, 0x01, 0xFE, 0x82, 0x01, 0xFE, 0x80, 0x01, 0xFE, 0x81, 0x01, 0xFF, 0xE9, 0x21, 0x01, -/* 00016230 */ 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0xF2, 0x00, 0x00, 0xBF, 0x4C, 0x02, 0x01, 0x00, -/* 00016240 */ 0x88, 0x01, 0x00, 0xFE, 0x6D, 0x06, 0x38, 0xA2, 0x41, 0xD1, 0x00, 0x5F, 0xFF, 0x5E, 0x20, 0x01, -/* 00016250 */ 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0x5E, 0x20, 0x01, 0x00, 0xC7, 0xC7, 0x41, -/* 00016260 */ 0x04, 0x03, 0x06, 0x0B, 0x0A, 0x04, 0x01, 0x01, 0x05, 0x0C, 0x25, 0x4F, 0x04, 0x8D, 0x01, 0x02, -/* 00016270 */ 0x06, 0x00, 0x00, 0x96, 0x06, 0x06, 0x03, 0x00, 0x00, 0x47, 0x04, 0x06, 0xA6, 0x06, 0x15, 0x03, -/* 00016280 */ 0x00, 0x04, 0x06, 0x09, 0x06, 0x00, 0x01, 0x34, 0x01, 0x01, 0x03, 0x02, 0xA6, 0x00, 0x24, 0x00, -/* 00016290 */ 0xFF, 0x84, 0x20, 0x01, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x31, 0x00, 0x0A, 0x00, -/* 000162A0 */ 0x33, 0x00, 0x08, 0x00, 0x3C, 0x00, 0x00, 0xBF, 0x4C, 0x02, 0x01, 0x00, 0x88, 0x01, 0x00, 0xFE, -/* 000162B0 */ 0x64, 0x06, 0x3F, 0xA2, 0x41, 0xD1, 0x00, 0x5E, 0xFF, 0x10, 0x1F, 0x01, 0x00, 0xFF, 0x00, 0x10, -/* 000162C0 */ 0x01, 0x00, 0x02, 0x02, 0xFF, 0x10, 0x1F, 0x01, 0x00, 0xC7, 0xC7, 0x41, 0x04, 0x03, 0x06, 0x0B, -/* 000162D0 */ 0x0A, 0x04, 0x01, 0x01, 0x05, 0x0C, 0x25, 0x4F, 0x04, 0x8D, 0x01, 0x02, 0x06, 0x00, 0x00, 0x96, -/* 000162E0 */ 0x06, 0x06, 0x03, 0x00, 0x00, 0x47, 0x04, 0x06, 0xA6, 0x06, 0x15, 0x03, 0x00, 0x04, 0x06, 0x09, -/* 000162F0 */ 0x06, 0x00, 0x01, 0x34, 0x01, 0x01, 0x03, 0x02, 0xA6, 0x00, 0x24, 0x00, 0xFF, 0x36, 0x1F, 0x01, -/* 00016300 */ 0x00, 0x04, 0x02, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x31, 0x00, 0x0A, 0x00, 0x33, 0x00, 0x08, 0x00, -/* 00016310 */ 0x3C, 0x00, 0x00, 0xBF, 0x5C, 0x18, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x27, 0x06, 0x29, 0xA2, -/* 00016320 */ 0x41, 0xC1, 0x00, 0xFE, 0x3A, 0x04, 0x5C, 0xFF, 0xD6, 0x12, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, -/* 00016330 */ 0x00, 0x04, 0x04, 0xFF, 0xD6, 0x12, 0x01, 0x00, 0xFE, 0x84, 0x08, 0xFE, 0x84, 0x08, 0x01, 0x0D, -/* 00016340 */ 0x1A, 0x24, 0x07, 0xA1, 0x93, 0x03, 0x0C, 0x04, 0x09, 0x14, 0x14, 0x14, 0x14, 0x23, 0x08, 0x05, -/* 00016350 */ 0xFE, 0x53, 0x04, 0x06, 0xFE, 0x56, 0x04, 0x06, 0xFE, 0x00, 0x04, 0x06, 0xFE, 0xAD, 0x03, 0x05, -/* 00016360 */ 0xFE, 0xBC, 0x03, 0x05, 0xFE, 0xFF, 0x03, 0x06, 0xFE, 0x86, 0x04, 0x06, 0xFE, 0x82, 0x04, 0x06, -/* 00016370 */ 0xFE, 0x80, 0x04, 0x06, 0xFE, 0x81, 0x04, 0x06, 0xFE, 0x83, 0x04, 0x06, 0xFE, 0xB4, 0x03, 0x06, -/* 00016380 */ 0xFE, 0xB3, 0x03, 0x06, 0xFE, 0xB5, 0x03, 0x05, 0xFE, 0x87, 0x04, 0x06, 0xFE, 0x88, 0x04, 0x05, -/* 00016390 */ 0xFE, 0x89, 0x04, 0x05, 0xFE, 0x8A, 0x04, 0x05, 0xFE, 0x8B, 0x04, 0x06, 0xFE, 0x8C, 0x04, 0x05, -/* 000163A0 */ 0xFE, 0x8D, 0x04, 0x05, 0xFE, 0x8E, 0x04, 0x0B, 0xFE, 0x98, 0x02, 0x4F, 0x1D, 0x4F, 0x1E, 0x4F, -/* 000163B0 */ 0x1F, 0x4F, 0x20, 0x4F, 0x21, 0x4F, 0x22, 0x8D, 0x02, 0x11, 0x24, 0x00, 0x00, 0x4B, 0x24, 0x07, -/* 000163C0 */ 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x1B, 0x00, 0x00, 0xEE, 0x02, 0x24, 0x24, 0x00, 0x00, -/* 000163D0 */ 0x47, 0x1D, 0x24, 0x8D, 0x01, 0x07, 0x24, 0x01, 0x00, 0x4B, 0x24, 0x07, 0x04, 0x00, 0x5A, 0x00, -/* 000163E0 */ 0x02, 0x5B, 0x01, 0x1C, 0x01, 0x00, 0x5B, 0x02, 0x03, 0x01, 0x00, 0x5B, 0x03, 0x04, 0x01, 0x00, -/* 000163F0 */ 0xEE, 0x04, 0x24, 0x24, 0x01, 0x00, 0x47, 0x1C, 0x24, 0x8D, 0x03, 0x37, 0x25, 0x02, 0x00, 0x4B, -/* 00016400 */ 0x25, 0x6B, 0x24, 0x25, 0x00, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x25, 0xF2, 0x01, 0x24, 0x24, 0x00, -/* 00016410 */ 0x00, 0x00, 0x00, 0x02, 0x00, 0x47, 0x1E, 0x24, 0x47, 0x24, 0x1E, 0x8D, 0x02, 0x02, 0x25, 0x03, -/* 00016420 */ 0x00, 0x4B, 0x25, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x1C, 0x03, 0x00, 0x5B, 0x02, -/* 00016430 */ 0x05, 0x03, 0x00, 0x5B, 0x03, 0x06, 0x03, 0x00, 0xCD, 0x26, 0x02, 0x00, 0x00, 0x9F, 0x00, 0x07, -/* 00016440 */ 0x26, 0x9F, 0x01, 0x08, 0x26, 0x5B, 0x04, 0x26, 0x03, 0x00, 0x5B, 0x05, 0x08, 0x03, 0x00, 0xEE, -/* 00016450 */ 0x06, 0x25, 0x25, 0x03, 0x00, 0x75, 0x25, 0x24, 0x01, 0x47, 0x24, 0x1E, 0x8D, 0x02, 0x02, 0x25, -/* 00016460 */ 0x03, 0x00, 0x4B, 0x25, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x1C, 0x04, 0x00, 0x5B, -/* 00016470 */ 0x02, 0x09, 0x04, 0x00, 0x5B, 0x03, 0x06, 0x04, 0x00, 0xCD, 0x26, 0x04, 0x01, 0x00, 0x9F, 0x00, -/* 00016480 */ 0x0A, 0x26, 0x9F, 0x01, 0x0B, 0x26, 0x9F, 0x02, 0x0C, 0x26, 0x9F, 0x03, 0x0D, 0x26, 0x5B, 0x04, -/* 00016490 */ 0x26, 0x04, 0x00, 0xA6, 0x26, 0x5B, 0x05, 0x26, 0x04, 0x00, 0xEE, 0x06, 0x25, 0x25, 0x04, 0x00, -/* 000164A0 */ 0x75, 0x25, 0x24, 0x02, 0x8D, 0x02, 0x0B, 0x24, 0x04, 0x00, 0x4B, 0x24, 0x07, 0x05, 0x00, 0x5A, -/* 000164B0 */ 0x00, 0x02, 0x8D, 0x03, 0x03, 0x25, 0x05, 0x00, 0x60, 0x25, 0x25, 0x03, 0x5B, 0x01, 0x25, 0x05, -/* 000164C0 */ 0x00, 0x5B, 0x02, 0x1D, 0x05, 0x00, 0x5B, 0x03, 0x1E, 0x05, 0x00, 0xCD, 0x25, 0x03, 0x02, 0x00, -/* 000164D0 */ 0x9F, 0x00, 0x0E, 0x25, 0x9F, 0x01, 0x0F, 0x25, 0x9F, 0x02, 0x10, 0x25, 0x5B, 0x04, 0x25, 0x05, -/* 000164E0 */ 0x00, 0xEE, 0x05, 0x24, 0x24, 0x05, 0x00, 0x47, 0x1F, 0x24, 0x60, 0x24, 0x1F, 0x04, 0x75, 0x24, -/* 000164F0 */ 0x1A, 0x05, 0x60, 0x24, 0x1F, 0x06, 0x75, 0x24, 0x1A, 0x07, 0x60, 0x24, 0x1F, 0x08, 0x75, 0x24, -/* 00016500 */ 0x1A, 0x09, 0x60, 0x24, 0x1F, 0x0A, 0x75, 0x24, 0x1A, 0x0B, 0x60, 0x24, 0x1F, 0x0C, 0x47, 0x20, -/* 00016510 */ 0x24, 0x60, 0x24, 0x1C, 0x0D, 0x47, 0x21, 0x24, 0xA6, 0x24, 0x14, 0x03, 0x00, 0x21, 0x24, 0x09, -/* 00016520 */ 0x20, 0x00, 0x8D, 0x03, 0x03, 0x25, 0x05, 0x00, 0x6B, 0x24, 0x25, 0x0E, 0x07, 0x01, 0x00, 0x5A, -/* 00016530 */ 0x00, 0x25, 0xF2, 0x01, 0x24, 0x24, 0x0E, 0x00, 0x00, 0x00, 0x06, 0x00, 0x47, 0x21, 0x24, 0x09, -/* 00016540 */ 0x22, 0x00, 0x8D, 0x03, 0x24, 0x25, 0x06, 0x00, 0x6B, 0x24, 0x25, 0x0F, 0x07, 0x02, 0x00, 0x5A, -/* 00016550 */ 0x00, 0x25, 0x5B, 0x01, 0x21, 0x07, 0x00, 0xF2, 0x02, 0x24, 0x24, 0x0F, 0x00, 0x00, 0x00, 0x07, -/* 00016560 */ 0x00, 0x47, 0x21, 0x24, 0x8D, 0x03, 0x03, 0x25, 0x05, 0x00, 0x6B, 0x24, 0x25, 0x10, 0x07, 0x02, -/* 00016570 */ 0x00, 0x5A, 0x00, 0x25, 0x5B, 0x01, 0x21, 0x08, 0x00, 0xF2, 0x02, 0x24, 0x24, 0x10, 0x00, 0x00, -/* 00016580 */ 0x00, 0x08, 0x00, 0x47, 0x22, 0x24, 0xA6, 0x24, 0x14, 0x08, 0x00, 0x22, 0x24, 0x14, 0x03, 0x00, -/* 00016590 */ 0x22, 0x11, 0x09, 0x2E, 0x00, 0x8D, 0x03, 0x38, 0x25, 0x07, 0x00, 0x4B, 0x25, 0x6B, 0x24, 0x25, -/* 000165A0 */ 0x11, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x25, 0x5B, 0x01, 0x21, 0x09, 0x00, 0x5B, 0x02, 0x12, 0x09, -/* 000165B0 */ 0x00, 0x5B, 0x03, 0x13, 0x09, 0x00, 0xF2, 0x04, 0xFF, 0x24, 0x11, 0x00, 0x00, 0x00, 0x09, 0x00, -/* 000165C0 */ 0x09, 0x16, 0x00, 0x14, 0x08, 0x00, 0x22, 0x14, 0x14, 0x03, 0x00, 0x22, 0x15, 0x09, 0x06, 0x00, -/* 000165D0 */ 0x47, 0x21, 0x16, 0x09, 0x03, 0x00, 0x47, 0x21, 0x22, 0x75, 0x21, 0x1A, 0x12, 0x8D, 0x02, 0x02, -/* 000165E0 */ 0x24, 0x03, 0x00, 0x4B, 0x24, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x1C, 0x0A, 0x00, -/* 000165F0 */ 0x5B, 0x02, 0x17, 0x0A, 0x00, 0x5B, 0x03, 0x06, 0x0A, 0x00, 0xCD, 0x25, 0x02, 0x03, 0x00, 0x9F, -/* 00016600 */ 0x00, 0x18, 0x25, 0x9F, 0x01, 0x08, 0x25, 0x5B, 0x04, 0x25, 0x0A, 0x00, 0x5B, 0x05, 0x08, 0x0A, -/* 00016610 */ 0x00, 0xEE, 0x06, 0xFF, 0x24, 0x0A, 0x00, 0x8D, 0x01, 0x05, 0x24, 0x08, 0x00, 0x4B, 0x24, 0x07, -/* 00016620 */ 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x1A, 0x0B, 0x00, 0x5B, 0x02, 0x1C, 0x0B, 0x00, 0xEE, -/* 00016630 */ 0x03, 0xFF, 0x24, 0x0B, 0x00, 0x75, 0x19, 0x1A, 0x13, 0x47, 0x00, 0x1A, 0x09, 0x02, 0x00, 0xA6, -/* 00016640 */ 0x00, 0x24, 0x00, 0x61, 0xFE, 0xF8, 0x01, 0xFE, 0xB5, 0x03, 0xFE, 0xD9, 0x01, 0xFE, 0xF7, 0x01, -/* 00016650 */ 0xFE, 0xF7, 0x01, 0xFE, 0xB3, 0x03, 0xFE, 0x39, 0x02, 0xFE, 0xB5, 0x03, 0xFE, 0x86, 0x04, 0xFE, -/* 00016660 */ 0xB4, 0x03, 0xFE, 0x18, 0x02, 0xFE, 0xBD, 0x03, 0xFE, 0x42, 0x02, 0xFE, 0xE8, 0x01, 0xFE, 0x37, -/* 00016670 */ 0x03, 0xFE, 0xE7, 0x01, 0xFE, 0x26, 0x03, 0xFE, 0x42, 0x02, 0xFE, 0x8F, 0x04, 0xFF, 0x10, 0x13, -/* 00016680 */ 0x01, 0x00, 0x1B, 0x0C, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x46, 0x00, 0x26, 0x00, 0x42, 0x00, 0x1F, -/* 00016690 */ 0x00, 0x24, 0x00, 0x41, 0x00, 0xD1, 0x00, 0x4B, 0x00, 0x6A, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x08, -/* 000166A0 */ 0x00, 0x2E, 0x00, 0x08, 0x00, 0x2C, 0x00, 0x08, 0x00, 0x2D, 0x00, 0x08, 0x00, 0x34, 0x00, 0x07, -/* 000166B0 */ 0x00, 0x37, 0x00, 0x07, 0x00, 0x27, 0x00, 0x0A, 0x00, 0x28, 0x00, 0x20, 0x00, 0x49, 0x00, 0x22, -/* 000166C0 */ 0x00, 0xEF, 0x00, 0x22, 0x00, 0x4E, 0x00, 0x0F, 0x00, 0x52, 0x00, 0x2E, 0x00, 0x5F, 0x00, 0x0D, -/* 000166D0 */ 0x00, 0x4E, 0x00, 0x06, 0x00, 0x31, 0x00, 0x03, 0x00, 0x2D, 0x00, 0x04, 0x00, 0x64, 0x00, 0x3A, -/* 000166E0 */ 0x00, 0xD3, 0x00, 0x1E, 0x00, 0x3B, 0x00, 0x04, 0x00, 0x3E, 0x00, 0x08, 0x00, 0x1F, 0x00, 0x00, -/* 000166F0 */ 0x3F, 0x4D, 0x00, 0xC0, 0x13, 0x8D, 0x25, 0x00, 0xFE, 0x7D, 0x05, 0x26, 0xA0, 0x41, 0xD1, 0x00, -/* 00016700 */ 0x58, 0xFE, 0xDC, 0xF1, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0xDC, 0xF1, 0xFE, -/* 00016710 */ 0x0B, 0x1F, 0xFE, 0x0B, 0x1F, 0x06, 0xFE, 0x5C, 0x04, 0xFE, 0x5D, 0x04, 0xFE, 0x5E, 0x04, 0xFE, -/* 00016720 */ 0x5F, 0x04, 0xFE, 0x60, 0x04, 0xFE, 0x61, 0x04, 0x04, 0x39, 0x3C, 0x51, 0x51, 0x03, 0x30, 0x30, -/* 00016730 */ 0x30, 0x30, 0x05, 0x39, 0x3A, 0x3B, 0x06, 0xFE, 0x46, 0x04, 0x06, 0xFE, 0x62, 0x04, 0x06, 0xFE, -/* 00016740 */ 0x47, 0x04, 0x06, 0xFE, 0x63, 0x04, 0x06, 0xFE, 0x48, 0x04, 0x06, 0xFE, 0x64, 0x04, 0x06, 0xFE, -/* 00016750 */ 0x49, 0x04, 0x06, 0xFE, 0x65, 0x04, 0x06, 0xFE, 0x4A, 0x04, 0x06, 0xFE, 0x66, 0x04, 0x06, 0xFE, -/* 00016760 */ 0x4B, 0x04, 0x06, 0xFE, 0x67, 0x04, 0x06, 0xFE, 0x68, 0x04, 0x06, 0xFE, 0x69, 0x04, 0x06, 0xFE, -/* 00016770 */ 0x6A, 0x04, 0x06, 0xFE, 0x6B, 0x04, 0x06, 0xFE, 0x4C, 0x04, 0x06, 0xFE, 0x6C, 0x04, 0x06, 0xFE, -/* 00016780 */ 0x4D, 0x04, 0x06, 0xFE, 0x6D, 0x04, 0x06, 0xFE, 0x4E, 0x04, 0x06, 0xFE, 0x6E, 0x04, 0x07, 0x06, -/* 00016790 */ 0xFE, 0x6F, 0x04, 0x06, 0xFE, 0x70, 0x04, 0x06, 0xFE, 0xEF, 0x03, 0x06, 0xFE, 0x71, 0x04, 0x06, -/* 000167A0 */ 0xFE, 0x72, 0x04, 0x06, 0xFE, 0x73, 0x04, 0x06, 0xFE, 0x74, 0x04, 0x06, 0xFE, 0x75, 0x04, 0x06, -/* 000167B0 */ 0xFE, 0x76, 0x04, 0x06, 0xFE, 0x77, 0x04, 0x06, 0xFE, 0x78, 0x04, 0x06, 0xFE, 0x79, 0x04, 0x06, -/* 000167C0 */ 0xFE, 0x7A, 0x04, 0x06, 0xFE, 0x13, 0x04, 0x01, 0x01, 0x06, 0xFE, 0x45, 0x04, 0x01, 0x02, 0x06, -/* 000167D0 */ 0xFE, 0x43, 0x04, 0x01, 0x03, 0x06, 0xFE, 0x44, 0x04, 0x01, 0x04, 0x06, 0xFE, 0x42, 0x04, 0x01, -/* 000167E0 */ 0x05, 0x06, 0xFE, 0x7B, 0x04, 0x06, 0xFE, 0x7C, 0x04, 0x06, 0xFE, 0x7D, 0x04, 0x06, 0xFE, 0x7E, -/* 000167F0 */ 0x04, 0x06, 0xFE, 0x7F, 0x04, 0x06, 0xFE, 0x80, 0x04, 0x06, 0xFE, 0x81, 0x04, 0x06, 0xFE, 0x82, -/* 00016800 */ 0x04, 0x06, 0xFE, 0x83, 0x04, 0xFE, 0x4D, 0x01, 0x4F, 0x3C, 0x94, 0x02, 0x3C, 0x4F, 0x3C, 0x94, -/* 00016810 */ 0x03, 0x3C, 0x4F, 0x3C, 0x94, 0x04, 0x3C, 0x4F, 0x3C, 0x94, 0x05, 0x3C, 0x4F, 0x3C, 0x94, 0x06, -/* 00016820 */ 0x3C, 0x4F, 0x3C, 0x94, 0x07, 0x3C, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, -/* 00016830 */ 0x00, 0x00, 0x00, 0x79, 0x03, 0x3C, 0x00, 0x79, 0x05, 0x3C, 0x01, 0x79, 0x07, 0x3C, 0x02, 0x79, -/* 00016840 */ 0x09, 0x3C, 0x03, 0x79, 0x0B, 0x3C, 0x04, 0x79, 0x0D, 0x3C, 0x05, 0x79, 0x0F, 0x3C, 0x06, 0x79, -/* 00016850 */ 0x11, 0x3C, 0x07, 0x79, 0x13, 0x3C, 0x08, 0x79, 0x15, 0x3C, 0x09, 0x79, 0x17, 0x3C, 0x0A, 0x94, -/* 00016860 */ 0x02, 0x3C, 0xCB, 0x34, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x79, -/* 00016870 */ 0x02, 0x3C, 0x0B, 0x79, 0x02, 0x3C, 0x0C, 0x79, 0x02, 0x3C, 0x0D, 0x79, 0x04, 0x3C, 0x0E, 0x79, -/* 00016880 */ 0x06, 0x3C, 0x0F, 0x79, 0x06, 0x3C, 0x10, 0x79, 0x06, 0x3C, 0x11, 0x79, 0x08, 0x3C, 0x12, 0x79, -/* 00016890 */ 0x08, 0x3C, 0x13, 0x79, 0x0A, 0x3C, 0x14, 0x79, 0x0C, 0x3C, 0x15, 0x79, 0x0C, 0x3C, 0x16, 0x79, -/* 000168A0 */ 0x0C, 0x3C, 0x17, 0x79, 0x0C, 0x3C, 0x18, 0x79, 0x12, 0x3C, 0x19, 0x79, 0x14, 0x3C, 0x1A, 0x79, -/* 000168B0 */ 0x16, 0x3C, 0x1B, 0x79, 0x16, 0x3C, 0x1C, 0x79, 0x16, 0x3C, 0x1D, 0x79, 0x16, 0x3C, 0x1E, 0x79, -/* 000168C0 */ 0x16, 0x3C, 0x1F, 0x79, 0x16, 0x3C, 0x20, 0x79, 0x16, 0x3C, 0x21, 0x94, 0x03, 0x3C, 0xCB, 0x98, -/* 000168D0 */ 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x79, 0x27, 0x3C, 0x22, 0x79, -/* 000168E0 */ 0x29, 0x3C, 0x23, 0x79, 0x2B, 0x3C, 0x24, 0x79, 0x2D, 0x3C, 0x25, 0x79, 0x2F, 0x3C, 0x26, 0x94, -/* 000168F0 */ 0x04, 0x3C, 0xCA, 0x3C, 0x79, 0x26, 0x3C, 0x27, 0x79, 0x28, 0x3C, 0x28, 0x79, 0x2A, 0x3C, 0x29, -/* 00016900 */ 0x79, 0x2C, 0x3C, 0x2A, 0x79, 0x2E, 0x3C, 0x2B, 0x94, 0x05, 0x3C, 0xCB, 0xB4, 0x00, 0x00, 0x00, -/* 00016910 */ 0x03, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x79, 0x0F, 0x3C, 0x2C, 0x79, 0x11, 0x3C, 0x2D, -/* 00016920 */ 0x79, 0x1E, 0x3C, 0x2E, 0x79, 0x1F, 0x3C, 0x2F, 0x94, 0x06, 0x3C, 0xCB, 0xCC, 0x00, 0x00, 0x00, -/* 00016930 */ 0x04, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x79, 0x35, 0x3C, 0x15, 0x79, 0x36, 0x3C, 0x16, -/* 00016940 */ 0x79, 0x37, 0x3C, 0x17, 0x79, 0x38, 0x3C, 0x18, 0x94, 0x07, 0x3C, 0xD3, 0x00, 0x00, 0x09, 0x02, -/* 00016950 */ 0x00, 0xA6, 0x00, 0x24, 0x00, 0x05, 0xE4, 0x00, 0xCC, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, -/* 00016960 */ 0x00, 0x00, 0x00, 0x00, 0x69, 0x04, 0x00, 0x00, 0x6B, 0x04, 0x00, 0x00, 0x73, 0x04, 0x00, 0x00, -/* 00016970 */ 0x74, 0x04, 0x00, 0x00, 0xB4, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 00016980 */ 0x80, 0x04, 0x00, 0x00, 0x81, 0x04, 0x00, 0x00, 0x82, 0x04, 0x00, 0x00, 0x83, 0x04, 0x00, 0x00, -/* 00016990 */ 0x98, 0x00, 0x00, 0x00, 0x03, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x02, 0x00, 0x00, -/* 000169A0 */ 0x45, 0x04, 0x00, 0x00, 0x43, 0x04, 0x00, 0x00, 0x44, 0x04, 0x00, 0x00, 0x42, 0x04, 0x00, 0x00, -/* 000169B0 */ 0x34, 0x00, 0x00, 0x00, 0x03, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x00, 0x00, -/* 000169C0 */ 0x6F, 0x04, 0x00, 0x00, 0x70, 0x04, 0x00, 0x00, 0x63, 0x04, 0x00, 0x00, 0x64, 0x04, 0x00, 0x00, -/* 000169D0 */ 0xEF, 0x03, 0x00, 0x00, 0x71, 0x04, 0x00, 0x00, 0x65, 0x04, 0x00, 0x00, 0x72, 0x04, 0x00, 0x00, -/* 000169E0 */ 0x66, 0x04, 0x00, 0x00, 0x69, 0x04, 0x00, 0x00, 0x6B, 0x04, 0x00, 0x00, 0x73, 0x04, 0x00, 0x00, -/* 000169F0 */ 0x74, 0x04, 0x00, 0x00, 0x6C, 0x04, 0x00, 0x00, 0x6D, 0x04, 0x00, 0x00, 0x6E, 0x04, 0x00, 0x00, -/* 00016A00 */ 0x75, 0x04, 0x00, 0x00, 0x76, 0x04, 0x00, 0x00, 0x77, 0x04, 0x00, 0x00, 0x78, 0x04, 0x00, 0x00, -/* 00016A10 */ 0x79, 0x04, 0x00, 0x00, 0x7A, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0B, 0x00, 0x00, -/* 00016A20 */ 0x00, 0x00, 0x00, 0x00, 0x44, 0x02, 0x00, 0x00, 0x3B, 0x02, 0x00, 0x00, 0x45, 0x02, 0x00, 0x00, -/* 00016A30 */ 0x3F, 0x02, 0x00, 0x00, 0x3A, 0x02, 0x00, 0x00, 0x3C, 0x02, 0x00, 0x00, 0x3D, 0x02, 0x00, 0x00, -/* 00016A40 */ 0x6A, 0x04, 0x00, 0x00, 0x3E, 0x02, 0x00, 0x00, 0x41, 0x02, 0x00, 0x00, 0x43, 0x02, 0x00, 0x00, -/* 00016A50 */ 0xFE, 0x44, 0x02, 0xFE, 0x3B, 0x02, 0xFE, 0x45, 0x02, 0xFE, 0x3F, 0x02, 0xFE, 0x3A, 0x02, 0xFE, -/* 00016A60 */ 0x3C, 0x02, 0xFE, 0x3D, 0x02, 0xFE, 0x6A, 0x04, 0xFE, 0x3E, 0x02, 0xFE, 0x41, 0x02, 0xFE, 0x43, -/* 00016A70 */ 0x02, 0x6D, 0xFE, 0x6F, 0x04, 0xFE, 0x70, 0x04, 0xFE, 0x63, 0x04, 0xFE, 0x64, 0x04, 0xFE, 0xEF, -/* 00016A80 */ 0x03, 0xFE, 0x71, 0x04, 0xFE, 0x65, 0x04, 0xFE, 0x72, 0x04, 0xFE, 0x66, 0x04, 0xFE, 0x69, 0x04, -/* 00016A90 */ 0xFE, 0x6B, 0x04, 0xFE, 0x73, 0x04, 0xFE, 0x74, 0x04, 0xFE, 0x6C, 0x04, 0xFE, 0x6D, 0x04, 0xFE, -/* 00016AA0 */ 0x6E, 0x04, 0xFE, 0x75, 0x04, 0xFE, 0x76, 0x04, 0xFE, 0x77, 0x04, 0xFE, 0x78, 0x04, 0xFE, 0x79, -/* 00016AB0 */ 0x04, 0xFE, 0x7A, 0x04, 0xFE, 0x20, 0x02, 0xFE, 0x45, 0x04, 0xFE, 0x43, 0x04, 0xFE, 0x44, 0x04, -/* 00016AC0 */ 0xFE, 0x42, 0x04, 0xFE, 0x7B, 0x04, 0xFE, 0x7C, 0x04, 0xFE, 0x7D, 0x04, 0xFE, 0x7E, 0x04, 0xFE, -/* 00016AD0 */ 0x7F, 0x04, 0xFE, 0x80, 0x04, 0xFE, 0x81, 0x04, 0xFE, 0x82, 0x04, 0xFE, 0x83, 0x04, 0xFE, 0x75, -/* 00016AE0 */ 0xF2, 0x08, 0x1E, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x10, 0x02, 0x6C, 0x00, 0xDC, 0x02, 0x24, 0x00, -/* 00016AF0 */ 0xC3, 0x00, 0x19, 0x00, 0x00, 0x01, 0x20, 0x00, 0xA1, 0x00, 0x20, 0x00, 0xA2, 0x00, 0x08, 0x00, -/* 00016B00 */ 0x7F, 0x16, 0x00, 0x07, 0x6B, 0x01, 0x00, 0xBF, 0x7D, 0x0F, 0xC3, 0x43, 0xAD, 0x0D, 0x00, 0xFE, -/* 00016B10 */ 0xB7, 0x05, 0x13, 0xA2, 0x41, 0xD1, 0x00, 0x59, 0xFE, 0x6E, 0xFA, 0x02, 0xFF, 0x00, 0x10, 0x01, -/* 00016B20 */ 0x00, 0x03, 0x03, 0xFE, 0x6E, 0xFA, 0xFE, 0x6E, 0x16, 0xFE, 0x6E, 0x16, 0x40, 0x04, 0xFE, 0xCA, -/* 00016B30 */ 0x01, 0xFE, 0xFA, 0x01, 0xFE, 0x3D, 0x02, 0xFE, 0xB5, 0x03, 0x16, 0x11, 0x20, 0x08, 0xD1, 0xC1, -/* 00016B40 */ 0x7B, 0x04, 0x02, 0x08, 0x01, 0x0A, 0x0C, 0x02, 0x0B, 0x0B, 0x0B, 0x0B, 0x02, 0x1D, 0x1E, 0x1F, -/* 00016B50 */ 0x20, 0xFE, 0x43, 0x01, 0xFE, 0x3E, 0x03, 0xFE, 0xE2, 0x02, 0xFE, 0x0A, 0x03, 0x06, 0xFE, 0x68, -/* 00016B60 */ 0x04, 0x06, 0xFE, 0xC2, 0x03, 0x08, 0x06, 0xFE, 0x5B, 0x03, 0x0C, 0x01, 0x00, 0x06, 0xFE, 0x84, -/* 00016B70 */ 0x04, 0x01, 0x01, 0x0B, 0x06, 0xFE, 0x85, 0x04, 0x06, 0xFE, 0x69, 0x04, 0x06, 0xFE, 0x6B, 0x04, -/* 00016B80 */ 0x06, 0xFE, 0x73, 0x04, 0x06, 0xFE, 0x74, 0x04, 0x01, 0x02, 0xFE, 0x46, 0x03, 0x94, 0x02, 0x12, -/* 00016B90 */ 0x4F, 0x13, 0x4F, 0x14, 0x4F, 0x15, 0x4F, 0x16, 0x4F, 0x17, 0x4F, 0x18, 0x4F, 0x1A, 0x4F, 0x1B, -/* 00016BA0 */ 0x4F, 0x1C, 0x4F, 0x19, 0x4F, 0x22, 0x94, 0x03, 0x22, 0x4F, 0x22, 0x94, 0x04, 0x22, 0x4F, 0x22, -/* 00016BB0 */ 0x94, 0x05, 0x22, 0x8D, 0x04, 0x37, 0x23, 0x00, 0x00, 0x4B, 0x23, 0x6B, 0x22, 0x23, 0x00, 0x07, -/* 00016BC0 */ 0x04, 0x00, 0x5A, 0x00, 0x23, 0x8D, 0x02, 0x04, 0x24, 0x01, 0x00, 0x4B, 0x24, 0x5B, 0x01, 0x24, -/* 00016BD0 */ 0x00, 0x00, 0xD3, 0x00, 0x24, 0x5B, 0x02, 0x24, 0x00, 0x00, 0x8D, 0x04, 0x37, 0x25, 0x00, 0x00, -/* 00016BE0 */ 0x4B, 0x25, 0x6B, 0x24, 0x25, 0x01, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x25, 0xF2, 0x01, 0x24, 0x24, -/* 00016BF0 */ 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x5B, 0x03, 0x24, 0x00, 0x00, 0xF2, 0x04, 0x22, 0x22, 0x00, -/* 00016C00 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x94, 0x03, 0x22, 0x8D, 0x03, 0x02, 0x22, 0x02, 0x00, 0x4B, 0x22, -/* 00016C10 */ 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x91, 0x02, 0x23, 0x03, 0x00, 0x5B, 0x01, 0x23, 0x02, 0x00, -/* 00016C20 */ 0x5B, 0x02, 0x02, 0x02, 0x00, 0x5B, 0x03, 0x03, 0x02, 0x00, 0xA6, 0x23, 0x5B, 0x04, 0x23, 0x02, -/* 00016C30 */ 0x00, 0xA6, 0x23, 0x5B, 0x05, 0x23, 0x02, 0x00, 0xEE, 0x06, 0x22, 0x22, 0x02, 0x00, 0x94, 0x04, -/* 00016C40 */ 0x22, 0x60, 0x22, 0x11, 0x02, 0x94, 0x05, 0x22, 0x8D, 0x04, 0x37, 0x23, 0x00, 0x00, 0x4B, 0x23, -/* 00016C50 */ 0x6B, 0x22, 0x23, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x23, 0x8D, 0x04, 0x37, 0x25, 0x00, 0x00, -/* 00016C60 */ 0x4B, 0x25, 0x6B, 0x24, 0x25, 0x03, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x25, 0x91, 0x03, 0x26, 0x04, -/* 00016C70 */ 0x00, 0x5B, 0x01, 0x26, 0x04, 0x00, 0xF2, 0x02, 0x24, 0x24, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, -/* 00016C80 */ 0x5B, 0x01, 0x24, 0x03, 0x00, 0xD3, 0x01, 0x24, 0x5B, 0x02, 0x24, 0x03, 0x00, 0x5B, 0x03, 0x05, -/* 00016C90 */ 0x03, 0x00, 0xF2, 0x04, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x47, 0x13, 0x22, 0x8D, -/* 00016CA0 */ 0x04, 0x03, 0x23, 0x05, 0x00, 0x6B, 0x22, 0x23, 0x04, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x23, 0x60, -/* 00016CB0 */ 0x24, 0x11, 0x05, 0x5B, 0x01, 0x24, 0x05, 0x00, 0x5B, 0x02, 0x13, 0x05, 0x00, 0xF2, 0x03, 0x22, -/* 00016CC0 */ 0x22, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x47, 0x14, 0x22, 0x47, 0x15, 0x06, 0x47, 0x16, 0x07, -/* 00016CD0 */ 0xEB, 0x00, 0xEC, 0x00, 0xA5, 0x22, 0x14, 0x06, 0x00, 0x00, 0x12, 0x03, 0x00, 0x16, 0x22, 0x09, -/* 00016CE0 */ 0xE7, 0x01, 0x96, 0x22, 0x14, 0x16, 0x00, 0x00, 0x47, 0x17, 0x22, 0x43, 0x22, 0x17, 0x08, 0x47, -/* 00016CF0 */ 0x18, 0x22, 0x0E, 0x10, 0x00, 0x15, 0x0E, 0x03, 0x00, 0x18, 0x47, 0x15, 0x06, 0x28, 0x16, 0x16, -/* 00016D00 */ 0x09, 0xC3, 0x01, 0x09, 0x1E, 0x00, 0x0E, 0x0C, 0x00, 0x18, 0x47, 0x15, 0x0A, 0x28, 0x16, 0x16, -/* 00016D10 */ 0x09, 0xB3, 0x01, 0x09, 0x0E, 0x00, 0x14, 0x03, 0x00, 0x17, 0x0B, 0x09, 0x06, 0x00, 0x28, 0x16, -/* 00016D20 */ 0x16, 0x09, 0xA2, 0x01, 0x14, 0x12, 0x00, 0x17, 0x0C, 0x14, 0x0D, 0x00, 0x17, 0x0D, 0x14, 0x08, -/* 00016D30 */ 0x00, 0x17, 0x0E, 0x14, 0x03, 0x00, 0x17, 0x0F, 0x09, 0x2D, 0x01, 0x91, 0x05, 0x22, 0x06, 0x00, -/* 00016D40 */ 0x0E, 0x12, 0x01, 0x22, 0x91, 0x04, 0x22, 0x07, 0x00, 0xA6, 0x23, 0x14, 0x03, 0x00, 0x22, 0x23, -/* 00016D50 */ 0x09, 0x03, 0x01, 0x8D, 0x01, 0x06, 0x22, 0x08, 0x00, 0x4B, 0x22, 0x91, 0x05, 0x23, 0x06, 0x00, -/* 00016D60 */ 0x96, 0x22, 0x22, 0x23, 0x01, 0x00, 0x47, 0x19, 0x22, 0x15, 0x03, 0x00, 0x19, 0x17, 0x09, 0xE2, -/* 00016D70 */ 0x00, 0x2F, 0x22, 0x16, 0x09, 0x96, 0x22, 0x14, 0x22, 0x02, 0x00, 0x14, 0x03, 0x00, 0x22, 0x17, -/* 00016D80 */ 0x09, 0x67, 0x00, 0x8D, 0x04, 0x37, 0x23, 0x00, 0x00, 0x4B, 0x23, 0x6B, 0x22, 0x23, 0x07, 0x07, -/* 00016D90 */ 0x04, 0x00, 0x5A, 0x00, 0x23, 0x5B, 0x01, 0x14, 0x06, 0x00, 0x5B, 0x02, 0x07, 0x06, 0x00, 0x5B, -/* 00016DA0 */ 0x03, 0x16, 0x06, 0x00, 0xF2, 0x04, 0x22, 0x22, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x2F, 0x22, -/* 00016DB0 */ 0x22, 0x19, 0x2F, 0x22, 0x22, 0x19, 0x8D, 0x04, 0x37, 0x24, 0x00, 0x00, 0x4B, 0x24, 0x6B, 0x23, -/* 00016DC0 */ 0x24, 0x08, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x24, 0x5B, 0x01, 0x14, 0x07, 0x00, 0x2F, 0x25, 0x16, -/* 00016DD0 */ 0x10, 0x5B, 0x02, 0x25, 0x07, 0x00, 0xF2, 0x03, 0x23, 0x23, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, -/* 00016DE0 */ 0x2F, 0x22, 0x22, 0x23, 0x47, 0x14, 0x22, 0x09, 0x60, 0x00, 0x8D, 0x04, 0x37, 0x23, 0x00, 0x00, -/* 00016DF0 */ 0x4B, 0x23, 0x6B, 0x22, 0x23, 0x07, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x23, 0x5B, 0x01, 0x14, 0x08, -/* 00016E00 */ 0x00, 0x5B, 0x02, 0x07, 0x08, 0x00, 0x5B, 0x03, 0x16, 0x08, 0x00, 0xF2, 0x04, 0x22, 0x22, 0x07, -/* 00016E10 */ 0x00, 0x00, 0x00, 0x08, 0x00, 0x2F, 0x22, 0x22, 0x19, 0x8D, 0x04, 0x37, 0x24, 0x00, 0x00, 0x4B, -/* 00016E20 */ 0x24, 0x6B, 0x23, 0x24, 0x08, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x24, 0x5B, 0x01, 0x14, 0x09, 0x00, -/* 00016E30 */ 0x2F, 0x25, 0x16, 0x09, 0x5B, 0x02, 0x25, 0x09, 0x00, 0xF2, 0x03, 0x23, 0x23, 0x08, 0x00, 0x00, -/* 00016E40 */ 0x00, 0x09, 0x00, 0x2F, 0x22, 0x22, 0x23, 0x47, 0x14, 0x22, 0x96, 0x22, 0x14, 0x16, 0x03, 0x00, -/* 00016E50 */ 0x47, 0x17, 0x22, 0x09, 0x12, 0x00, 0x8D, 0x01, 0x07, 0x22, 0x09, 0x00, 0x4B, 0x22, 0x96, 0x22, -/* 00016E60 */ 0x22, 0x17, 0x04, 0x00, 0x75, 0x22, 0x11, 0x09, 0x2F, 0x22, 0x16, 0x09, 0x47, 0x1A, 0x22, 0xEB, -/* 00016E70 */ 0x01, 0xEC, 0x01, 0xA5, 0x22, 0x14, 0x06, 0x01, 0x00, 0x12, 0x03, 0x00, 0x1A, 0x22, 0x09, 0x14, -/* 00016E80 */ 0x00, 0x96, 0x22, 0x14, 0x1A, 0x05, 0x00, 0x14, 0x03, 0x00, 0x22, 0x17, 0x09, 0x06, 0x00, 0x28, -/* 00016E90 */ 0x1A, 0x1A, 0x09, 0xDC, 0xFF, 0xED, 0x01, 0x8D, 0x01, 0x03, 0x22, 0x0A, 0x00, 0x4B, 0x22, 0x96, -/* 00016EA0 */ 0x22, 0x22, 0x17, 0x06, 0x00, 0x47, 0x1B, 0x22, 0x8D, 0x01, 0x05, 0x22, 0x0B, 0x00, 0x4B, 0x22, -/* 00016EB0 */ 0x35, 0x23, 0x1A, 0x16, 0x96, 0x22, 0x22, 0x23, 0x07, 0x00, 0x47, 0x1C, 0x22, 0x9B, 0x1C, 0x11, -/* 00016EC0 */ 0x1B, 0x00, 0x00, 0x47, 0x16, 0x1A, 0x09, 0x09, 0xFE, 0xED, 0x00, 0x75, 0x14, 0x11, 0x0A, 0xA6, -/* 00016ED0 */ 0x00, 0x24, 0x00, 0xFE, 0x1C, 0x01, 0x61, 0xFE, 0x86, 0x04, 0xBF, 0xFE, 0xE9, 0x01, 0xFE, 0xF7, -/* 00016EE0 */ 0x01, 0xC1, 0xFE, 0x4C, 0x01, 0xFE, 0x4C, 0x01, 0xFE, 0x86, 0x04, 0xFE, 0x40, 0x02, 0xFE, 0x98, -/* 00016EF0 */ 0xFA, 0x28, 0x26, 0x00, 0x00, 0x00, 0x55, 0x00, 0x74, 0x02, 0x39, 0x00, 0x5E, 0x00, 0x07, 0x00, -/* 00016F00 */ 0xB6, 0x00, 0x57, 0x00, 0x43, 0x05, 0x2B, 0x00, 0x0E, 0x02, 0x03, 0x00, 0x27, 0x00, 0x07, 0x00, -/* 00016F10 */ 0x22, 0x00, 0x0E, 0x00, 0x2A, 0x00, 0x09, 0x00, 0x2A, 0x00, 0x07, 0x00, 0x31, 0x00, 0x04, 0x00, -/* 00016F20 */ 0x29, 0x00, 0x04, 0x00, 0x2B, 0x00, 0x03, 0x00, 0x45, 0x00, 0x03, 0x00, 0x1D, 0x00, 0x06, 0x00, -/* 00016F30 */ 0x25, 0x00, 0x04, 0x00, 0x27, 0x00, 0x03, 0x00, 0x2A, 0x00, 0x03, 0x00, 0x1D, 0x00, 0x06, 0x00, -/* 00016F40 */ 0x25, 0x00, 0x08, 0x00, 0x2B, 0x00, 0x03, 0x00, 0x1D, 0x00, 0x03, 0x00, 0x02, 0x01, 0x17, 0x00, -/* 00016F50 */ 0x58, 0x00, 0x18, 0x00, 0x76, 0x01, 0x16, 0x00, 0x49, 0x00, 0x08, 0x00, 0x3B, 0x00, 0x12, 0x00, -/* 00016F60 */ 0x76, 0x00, 0x67, 0x00, 0xE1, 0x00, 0x60, 0x00, 0xED, 0x00, 0x0C, 0x00, 0x38, 0x01, 0x12, 0x00, -/* 00016F70 */ 0x6F, 0x00, 0x0B, 0x00, 0x2A, 0x00, 0x1C, 0x00, 0x44, 0x00, 0x08, 0x00, 0x30, 0x00, 0x11, 0x00, -/* 00016F80 */ 0x3E, 0x00, 0x15, 0x00, 0x48, 0x00, 0x06, 0x00, 0x36, 0x00, 0x08, 0x00, 0x2A, 0x00, 0x06, 0x00, -/* 00016F90 */ 0x23, 0x00, 0x00, 0x02, 0x71, 0x01, 0x00, 0x9B, 0x6F, 0x01, 0x00, 0xBF, 0x5C, 0x0A, 0xC1, 0x03, -/* 00016FA0 */ 0x88, 0x01, 0x00, 0xFE, 0xC8, 0x05, 0x43, 0xA2, 0x41, 0xD1, 0x00, 0x5B, 0xFE, 0x53, 0xFE, 0xFF, -/* 00016FB0 */ 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x53, 0xFE, 0xFE, 0xF8, 0x04, 0xFE, 0xF8, 0x04, 0x01, -/* 00016FC0 */ 0x08, 0x0B, 0x0F, 0x04, 0x3C, 0x38, 0x05, 0x03, 0x01, 0x06, 0x01, 0x01, 0x01, 0x01, 0x0E, 0x06, -/* 00016FD0 */ 0xFE, 0x4B, 0x04, 0x0B, 0x06, 0xFE, 0x82, 0x04, 0x06, 0xFE, 0x80, 0x04, 0x06, 0xFE, 0x68, 0x04, -/* 00016FE0 */ 0x0C, 0x06, 0xFE, 0x81, 0x04, 0x06, 0xFE, 0x83, 0x04, 0x06, 0xFE, 0x6A, 0x04, 0xEC, 0x4F, 0x0D, -/* 00016FF0 */ 0x8D, 0x01, 0x03, 0x0F, 0x00, 0x00, 0x4B, 0x0F, 0x96, 0x0F, 0x0F, 0x0C, 0x00, 0x00, 0x47, 0x0D, -/* 00017000 */ 0x0F, 0x14, 0x03, 0x00, 0x0C, 0x02, 0x09, 0x81, 0x00, 0x8D, 0x01, 0x04, 0x0F, 0x01, 0x00, 0x4B, -/* 00017010 */ 0x0F, 0x14, 0x2F, 0x00, 0x0F, 0x03, 0x8D, 0x01, 0x04, 0x0F, 0x01, 0x00, 0x4B, 0x0F, 0xA6, 0x10, -/* 00017020 */ 0x14, 0x03, 0x00, 0x0F, 0x10, 0x09, 0x23, 0x00, 0x8D, 0x01, 0x05, 0x0F, 0x02, 0x00, 0x4B, 0x0F, -/* 00017030 */ 0x14, 0x10, 0x00, 0x0F, 0x04, 0x8D, 0x01, 0x05, 0x0F, 0x02, 0x00, 0x4B, 0x0F, 0x14, 0x03, 0x00, -/* 00017040 */ 0x0F, 0x05, 0x09, 0x06, 0x00, 0x47, 0x0C, 0x06, 0x09, 0x3F, 0x00, 0x8D, 0x01, 0x04, 0x0F, 0x01, -/* 00017050 */ 0x00, 0x4B, 0x0F, 0x14, 0x2F, 0x00, 0x0F, 0x07, 0x8D, 0x01, 0x04, 0x0F, 0x01, 0x00, 0x4B, 0x0F, -/* 00017060 */ 0xA6, 0x10, 0x14, 0x03, 0x00, 0x0F, 0x10, 0x09, 0x20, 0x00, 0x8D, 0x01, 0x05, 0x0F, 0x02, 0x00, -/* 00017070 */ 0x4B, 0x0F, 0x14, 0x10, 0x00, 0x0F, 0x08, 0x8D, 0x01, 0x05, 0x0F, 0x02, 0x00, 0x4B, 0x0F, 0x14, -/* 00017080 */ 0x03, 0x00, 0x0F, 0x09, 0x09, 0x03, 0x00, 0x47, 0x0C, 0x0A, 0x47, 0x0F, 0x0B, 0x8D, 0x05, 0x37, -/* 00017090 */ 0x11, 0x03, 0x00, 0x4B, 0x11, 0x6B, 0x10, 0x11, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x11, 0x8D, -/* 000170A0 */ 0x02, 0x02, 0x12, 0x04, 0x00, 0x4B, 0x12, 0x96, 0x12, 0x12, 0x0C, 0x01, 0x00, 0x5B, 0x01, 0x12, -/* 000170B0 */ 0x00, 0x00, 0x8D, 0x02, 0x04, 0x12, 0x05, 0x00, 0x4B, 0x12, 0x96, 0x12, 0x12, 0x0D, 0x02, 0x00, -/* 000170C0 */ 0x5B, 0x02, 0x12, 0x00, 0x00, 0xF2, 0x03, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2F, -/* 000170D0 */ 0x00, 0x0F, 0x10, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x29, 0x01, 0xFE, 0x88, 0xFE, -/* 000170E0 */ 0x08, 0x02, 0x00, 0x00, 0x00, 0x11, 0x00, 0x42, 0x00, 0x08, 0x00, 0xA5, 0x02, 0x3C, 0x00, 0x6F, -/* 000170F0 */ 0x00, 0x06, 0x00, 0x35, 0x00, 0x3C, 0x00, 0x70, 0x00, 0x03, 0x00, 0x5B, 0x00, 0x4E, 0x00, 0x6C, -/* 00017100 */ 0x00, 0x00, 0xBF, 0x5C, 0x0E, 0x01, 0x00, 0x88, 0x01, 0x00, 0xFE, 0xB8, 0x05, 0x45, 0xA2, 0x41, -/* 00017110 */ 0xD1, 0x00, 0x5A, 0xFE, 0xCD, 0xFA, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0xCD, 0xFA, -/* 00017120 */ 0xFE, 0x5B, 0x01, 0xFE, 0x5B, 0x01, 0x01, 0x07, 0x06, 0x0B, 0x07, 0x1B, 0x18, 0x05, 0x02, 0x01, -/* 00017130 */ 0x01, 0x02, 0x0A, 0x01, 0x00, 0x06, 0xFE, 0xAD, 0x03, 0x01, 0x01, 0x08, 0x65, 0x4F, 0x08, 0x4F, -/* 00017140 */ 0x09, 0x96, 0x0B, 0x07, 0x02, 0x00, 0x00, 0x47, 0x08, 0x0B, 0x8D, 0x04, 0x02, 0x0B, 0x00, 0x00, -/* 00017150 */ 0x4B, 0x0B, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x05, 0x8D, 0x01, 0x02, 0x0C, 0x01, 0x00, 0x5B, 0x01, -/* 00017160 */ 0x0C, 0x00, 0x00, 0x5B, 0x02, 0x08, 0x00, 0x00, 0x5B, 0x03, 0x03, 0x00, 0x00, 0x96, 0x0C, 0x07, -/* 00017170 */ 0x04, 0x01, 0x00, 0x5B, 0x04, 0x0C, 0x00, 0x00, 0xA6, 0x0C, 0x5B, 0x05, 0x0C, 0x00, 0x00, 0xEE, -/* 00017180 */ 0x06, 0x0B, 0x0B, 0x00, 0x00, 0x47, 0x09, 0x0B, 0xA6, 0x0B, 0x15, 0x03, 0x00, 0x09, 0x0B, 0x09, -/* 00017190 */ 0x06, 0x00, 0x9B, 0x09, 0x06, 0x08, 0x00, 0x00, 0x47, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA6, 0x00, -/* 000171A0 */ 0x24, 0x00, 0xFE, 0x02, 0xFB, 0x06, 0x04, 0x00, 0x00, 0x00, 0x09, 0x00, 0x2F, 0x00, 0x3E, 0x00, -/* 000171B0 */ 0x5F, 0x00, 0x0A, 0x00, 0x33, 0x00, 0x06, 0x00, 0x43, 0x00, 0x08, 0x00, 0x21, 0x00, 0x00, 0x3F, -/* 000171C0 */ 0x5D, 0x08, 0xC1, 0x13, 0x8D, 0x25, 0x00, 0xFE, 0x7E, 0x04, 0x18, 0xA0, 0x41, 0xD1, 0x00, 0x4E, -/* 000171D0 */ 0xFE, 0x42, 0xC7, 0x08, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0x42, 0xC7, 0xFE, 0x09, -/* 000171E0 */ 0x25, 0xFE, 0x09, 0x25, 0x03, 0xFE, 0x1F, 0x04, 0xFE, 0xF5, 0x01, 0xFE, 0x86, 0x03, 0x0C, 0x1A, -/* 000171F0 */ 0x22, 0x09, 0xE4, 0xDE, 0x02, 0x12, 0x09, 0x0B, 0x0B, 0x0B, 0x0B, 0x08, 0x1F, 0x20, 0x21, 0x08, -/* 00017200 */ 0x06, 0xFE, 0x3D, 0x03, 0x06, 0xFE, 0x20, 0x04, 0x05, 0xFE, 0x21, 0x04, 0x05, 0xFE, 0x22, 0x04, -/* 00017210 */ 0x05, 0xFE, 0x23, 0x04, 0x05, 0xFE, 0x24, 0x04, 0x05, 0xFE, 0x4A, 0x03, 0x06, 0xFE, 0x3F, 0x03, -/* 00017220 */ 0x06, 0xFE, 0x40, 0x03, 0x06, 0xFE, 0x4C, 0x03, 0x06, 0xFE, 0x42, 0x03, 0x0C, 0x06, 0xFE, 0x43, -/* 00017230 */ 0x03, 0x06, 0xFE, 0x44, 0x03, 0x0B, 0x07, 0x06, 0xFE, 0x0B, 0x04, 0x06, 0xFE, 0x0C, 0x04, 0x06, -/* 00017240 */ 0xFE, 0x0D, 0x04, 0x05, 0xFE, 0x25, 0x04, 0x06, 0xFE, 0x26, 0x04, 0x06, 0xFE, 0x8D, 0x03, 0x06, -/* 00017250 */ 0xFE, 0x27, 0x04, 0xFE, 0x12, 0x04, 0x4F, 0x1A, 0x4F, 0x1B, 0x4F, 0x1C, 0x4F, 0x1D, 0x4F, 0x1E, -/* 00017260 */ 0x4F, 0x22, 0x94, 0x02, 0x22, 0x4F, 0x22, 0x94, 0x03, 0x22, 0x4F, 0x22, 0x94, 0x04, 0x22, 0x8D, -/* 00017270 */ 0x02, 0x32, 0x22, 0x00, 0x00, 0x15, 0x03, 0x00, 0x22, 0x03, 0x09, 0x13, 0x00, 0x8D, 0x02, 0x32, -/* 00017280 */ 0x22, 0x00, 0x00, 0x15, 0x03, 0x00, 0x22, 0x04, 0x09, 0x05, 0x00, 0xA6, 0x00, 0x09, 0xD6, 0x03, -/* 00017290 */ 0xD3, 0x00, 0x22, 0x94, 0x02, 0x22, 0x8D, 0x02, 0x03, 0x23, 0x01, 0x00, 0x6B, 0x22, 0x23, 0x00, -/* 000172A0 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x23, 0x8D, 0x02, 0x23, 0x24, 0x02, 0x00, 0x07, 0x03, 0x00, 0x5A, -/* 000172B0 */ 0x00, 0x02, 0x5B, 0x01, 0x05, 0x01, 0x00, 0xD3, 0x01, 0x25, 0x5B, 0x02, 0x25, 0x01, 0x00, 0xEE, -/* 000172C0 */ 0x03, 0x24, 0x24, 0x01, 0x00, 0x5B, 0x01, 0x24, 0x00, 0x00, 0x8D, 0x02, 0x36, 0x24, 0x03, 0x00, -/* 000172D0 */ 0x4B, 0x24, 0x60, 0x24, 0x24, 0x01, 0x5B, 0x02, 0x24, 0x00, 0x00, 0xF2, 0x03, 0xFF, 0x22, 0x00, -/* 000172E0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x8D, 0x02, 0x32, 0x22, 0x00, 0x00, 0x14, 0x03, 0x00, 0x22, 0x04, -/* 000172F0 */ 0x09, 0x05, 0x00, 0xA6, 0x00, 0x09, 0x6E, 0x03, 0x8D, 0x02, 0x23, 0x22, 0x02, 0x00, 0x07, 0x03, -/* 00017300 */ 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x06, 0x02, 0x00, 0xD3, 0x02, 0x23, 0x5B, 0x02, 0x23, 0x02, -/* 00017310 */ 0x00, 0xEE, 0x03, 0x22, 0x22, 0x02, 0x00, 0x47, 0x1A, 0x22, 0x8D, 0x02, 0x23, 0x22, 0x02, 0x00, -/* 00017320 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x07, 0x03, 0x00, 0xD3, 0x03, 0x23, 0x5B, 0x02, -/* 00017330 */ 0x23, 0x03, 0x00, 0xEE, 0x03, 0x22, 0x22, 0x03, 0x00, 0x94, 0x03, 0x22, 0x8D, 0x02, 0x23, 0x22, -/* 00017340 */ 0x02, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x08, 0x04, 0x00, 0xD3, 0x04, 0x23, -/* 00017350 */ 0x5B, 0x02, 0x23, 0x04, 0x00, 0xEE, 0x03, 0x22, 0x22, 0x04, 0x00, 0x47, 0x1B, 0x22, 0x94, 0x04, -/* 00017360 */ 0x09, 0x8D, 0x02, 0x23, 0x22, 0x02, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x91, 0x04, 0x23, -/* 00017370 */ 0x04, 0x00, 0x5B, 0x01, 0x23, 0x05, 0x00, 0xD3, 0x05, 0x23, 0x5B, 0x02, 0x23, 0x05, 0x00, 0xEE, -/* 00017380 */ 0x03, 0x22, 0x22, 0x05, 0x00, 0x47, 0x1C, 0x22, 0x8D, 0x02, 0x37, 0x23, 0x05, 0x00, 0x4B, 0x23, -/* 00017390 */ 0x6B, 0x22, 0x23, 0x02, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x23, 0x5B, 0x01, 0x1C, 0x06, 0x00, 0x8D, -/* 000173A0 */ 0x01, 0x16, 0x24, 0x06, 0x00, 0x4B, 0x24, 0x5B, 0x02, 0x24, 0x06, 0x00, 0xF2, 0x03, 0x22, 0x22, -/* 000173B0 */ 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, 0x47, 0x1D, 0x22, 0x8D, 0x02, 0x37, 0x23, 0x05, 0x00, 0x4B, -/* 000173C0 */ 0x23, 0x6B, 0x22, 0x23, 0x03, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x23, 0x5B, 0x01, 0x1D, 0x07, 0x00, -/* 000173D0 */ 0x5B, 0x02, 0x0A, 0x07, 0x00, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, -/* 000173E0 */ 0x00, 0x00, 0x79, 0x0C, 0x24, 0x04, 0x79, 0x0E, 0x24, 0x05, 0x79, 0x0E, 0x24, 0x06, 0x79, 0x11, -/* 000173F0 */ 0x24, 0x07, 0x5B, 0x03, 0x24, 0x07, 0x00, 0xF2, 0x04, 0xFF, 0x22, 0x03, 0x00, 0x00, 0x00, 0x07, -/* 00017400 */ 0x00, 0x8D, 0x02, 0x37, 0x23, 0x05, 0x00, 0x4B, 0x23, 0x6B, 0x22, 0x23, 0x03, 0x07, 0x04, 0x00, -/* 00017410 */ 0x5A, 0x00, 0x23, 0x5B, 0x01, 0x1A, 0x08, 0x00, 0x5B, 0x02, 0x0C, 0x08, 0x00, 0xCB, 0x18, 0x00, -/* 00017420 */ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x79, 0x1D, 0x24, 0x04, 0x79, 0x11, -/* 00017430 */ 0x24, 0x05, 0x79, 0x0E, 0x24, 0x06, 0x79, 0x11, 0x24, 0x07, 0x5B, 0x03, 0x24, 0x08, 0x00, 0xF2, -/* 00017440 */ 0x04, 0xFF, 0x22, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x8D, 0x02, 0x37, 0x23, 0x05, 0x00, 0x4B, -/* 00017450 */ 0x23, 0x6B, 0x22, 0x23, 0x03, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x23, 0x5B, 0x01, 0x1A, 0x09, 0x00, -/* 00017460 */ 0x5B, 0x02, 0x13, 0x09, 0x00, 0xCB, 0x30, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x24, 0x00, -/* 00017470 */ 0x00, 0x00, 0x07, 0x01, 0x00, 0xC2, 0x01, 0x25, 0x1A, 0x0A, 0x00, 0x79, 0x25, 0x24, 0x04, 0x79, -/* 00017480 */ 0x0E, 0x24, 0x05, 0x79, 0x0E, 0x24, 0x06, 0x79, 0x0E, 0x24, 0x07, 0x5B, 0x03, 0x24, 0x09, 0x00, -/* 00017490 */ 0xF2, 0x04, 0xFF, 0x22, 0x03, 0x00, 0x00, 0x00, 0x09, 0x00, 0x8D, 0x02, 0x04, 0x22, 0x07, 0x00, -/* 000174A0 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x60, 0x23, 0x1A, 0x08, 0x5B, 0x01, 0x23, 0x0B, 0x00, 0x8D, -/* 000174B0 */ 0x02, 0x08, 0x23, 0x08, 0x00, 0x60, 0x23, 0x23, 0x09, 0x5B, 0x02, 0x23, 0x0B, 0x00, 0xEE, 0x03, -/* 000174C0 */ 0xFF, 0x22, 0x0B, 0x00, 0x8D, 0x02, 0x37, 0x23, 0x05, 0x00, 0x4B, 0x23, 0x6B, 0x22, 0x23, 0x03, -/* 000174D0 */ 0x07, 0x04, 0x00, 0x5A, 0x00, 0x23, 0x60, 0x24, 0x1A, 0x08, 0x5B, 0x01, 0x24, 0x0C, 0x00, 0x5B, -/* 000174E0 */ 0x02, 0x14, 0x0C, 0x00, 0xCB, 0x48, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, -/* 000174F0 */ 0x00, 0x79, 0x1A, 0x24, 0x04, 0x79, 0x11, 0x24, 0x05, 0x79, 0x0E, 0x24, 0x06, 0x79, 0x11, 0x24, -/* 00017500 */ 0x07, 0x5B, 0x03, 0x24, 0x0C, 0x00, 0xF2, 0x04, 0xFF, 0x22, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x00, -/* 00017510 */ 0x8D, 0x02, 0x37, 0x23, 0x05, 0x00, 0x4B, 0x23, 0x6B, 0x22, 0x23, 0x03, 0x07, 0x04, 0x00, 0x5A, -/* 00017520 */ 0x00, 0x23, 0x60, 0x24, 0x1A, 0x08, 0x5B, 0x01, 0x24, 0x0D, 0x00, 0x5B, 0x02, 0x15, 0x0D, 0x00, -/* 00017530 */ 0xCB, 0x60, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0xD6, 0x06, 0x25, -/* 00017540 */ 0x24, 0x79, 0x25, 0x24, 0x04, 0x79, 0x11, 0x24, 0x05, 0x79, 0x0E, 0x24, 0x06, 0x79, 0x11, 0x24, -/* 00017550 */ 0x07, 0x5B, 0x03, 0x24, 0x0D, 0x00, 0xF2, 0x04, 0xFF, 0x22, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x00, -/* 00017560 */ 0xD3, 0x07, 0x22, 0x47, 0x1E, 0x22, 0x8D, 0x02, 0x37, 0x23, 0x05, 0x00, 0x4B, 0x23, 0x6B, 0x22, -/* 00017570 */ 0x23, 0x03, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x23, 0x5B, 0x01, 0x1E, 0x0E, 0x00, 0x5B, 0x02, 0x0A, -/* 00017580 */ 0x0E, 0x00, 0xCB, 0x78, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x79, -/* 00017590 */ 0x16, 0x24, 0x04, 0x79, 0x0E, 0x24, 0x05, 0x79, 0x0E, 0x24, 0x06, 0x79, 0x11, 0x24, 0x07, 0x5B, -/* 000175A0 */ 0x03, 0x24, 0x0E, 0x00, 0xF2, 0x04, 0xFF, 0x22, 0x03, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x8D, 0x02, -/* 000175B0 */ 0x37, 0x23, 0x05, 0x00, 0x4B, 0x23, 0x6B, 0x22, 0x23, 0x03, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x23, -/* 000175C0 */ 0x60, 0x24, 0x1A, 0x08, 0x5B, 0x01, 0x24, 0x0F, 0x00, 0x5B, 0x02, 0x17, 0x0F, 0x00, 0xCB, 0x90, -/* 000175D0 */ 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x8D, 0x02, 0x23, 0x25, 0x02, -/* 000175E0 */ 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x16, 0x10, 0x00, 0x5B, 0x02, 0x1E, 0x10, -/* 000175F0 */ 0x00, 0xEE, 0x03, 0x25, 0x25, 0x10, 0x00, 0x79, 0x25, 0x24, 0x0A, 0x79, 0x0E, 0x24, 0x06, 0x79, -/* 00017600 */ 0x11, 0x24, 0x07, 0x5B, 0x03, 0x24, 0x0F, 0x00, 0xF2, 0x04, 0xFF, 0x22, 0x03, 0x00, 0x00, 0x00, -/* 00017610 */ 0x0F, 0x00, 0x8D, 0x02, 0x37, 0x23, 0x05, 0x00, 0x4B, 0x23, 0x6B, 0x22, 0x23, 0x03, 0x07, 0x04, -/* 00017620 */ 0x00, 0x5A, 0x00, 0x23, 0x60, 0x24, 0x1A, 0x08, 0x5B, 0x01, 0x24, 0x11, 0x00, 0x5B, 0x02, 0x19, -/* 00017630 */ 0x11, 0x00, 0xCB, 0xA4, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x79, -/* 00017640 */ 0x1B, 0x24, 0x04, 0x79, 0x0E, 0x24, 0x06, 0x79, 0x11, 0x24, 0x07, 0x79, 0x11, 0x24, 0x05, 0x5B, -/* 00017650 */ 0x03, 0x24, 0x11, 0x00, 0xF2, 0x04, 0xFF, 0x22, 0x03, 0x00, 0x00, 0x00, 0x11, 0x00, 0x47, 0x00, -/* 00017660 */ 0x1A, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x08, 0xBC, 0x00, 0xA4, 0x00, 0x00, 0x00, 0x03, -/* 00017670 */ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, -/* 00017680 */ 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, -/* 00017690 */ 0x00, 0x00, 0x00, 0x84, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x78, -/* 000176A0 */ 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, -/* 000176B0 */ 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x03, -/* 000176C0 */ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, -/* 000176D0 */ 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, -/* 000176E0 */ 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, -/* 000176F0 */ 0x01, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, -/* 00017700 */ 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x18, -/* 00017710 */ 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, -/* 00017720 */ 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, -/* 00017730 */ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, -/* 00017740 */ 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0xFE, 0xEE, 0x01, 0xFE, 0x06, 0x03, 0x4D, 0xFE, 0x88, -/* 00017750 */ 0x01, 0xFE, 0x83, 0x01, 0xFE, 0x82, 0x01, 0xFE, 0x80, 0x01, 0xFE, 0x81, 0x01, 0xFE, 0x15, 0x01, -/* 00017760 */ 0xFE, 0x15, 0x01, 0xFE, 0x84, 0x01, 0xFE, 0x58, 0xC7, 0x18, 0x19, 0x00, 0x00, 0x00, 0x1C, 0x00, -/* 00017770 */ 0x40, 0x00, 0x05, 0x00, 0x1B, 0x00, 0x06, 0x00, 0xD3, 0x09, 0x4F, 0x00, 0x80, 0x02, 0x0E, 0x00, -/* 00017780 */ 0x29, 0x00, 0x05, 0x00, 0x1B, 0x00, 0x22, 0x00, 0xA3, 0x03, 0x22, 0x00, 0xBA, 0x02, 0x22, 0x00, -/* 00017790 */ 0x10, 0x03, 0x03, 0x00, 0x5D, 0x00, 0x27, 0x00, 0x36, 0x01, 0x31, 0x00, 0x77, 0x00, 0x48, 0x00, -/* 000177A0 */ 0xD5, 0x00, 0x48, 0x00, 0xDB, 0x00, 0x51, 0x00, 0xC6, 0x00, 0x2A, 0x00, 0x40, 0x00, 0x4C, 0x00, -/* 000177B0 */ 0xCB, 0x00, 0x50, 0x00, 0xA0, 0x04, 0x06, 0x00, 0x04, 0x02, 0x48, 0x00, 0xB7, 0x00, 0x64, 0x00, -/* 000177C0 */ 0xC6, 0x00, 0x4C, 0x00, 0xCE, 0x00, 0x08, 0x00, 0x19, 0x00, 0x00, 0x55, 0x81, 0x01, 0x00, 0xF2, -/* 000177D0 */ 0x7F, 0x01, 0x00, 0xCA, 0x7D, 0x01, 0x00, 0x70, 0x7C, 0x01, 0x00, 0x15, 0x7B, 0x01, 0x00, 0x7B, -/* 000177E0 */ 0x7A, 0x01, 0x00, 0xF1, 0x78, 0x01, 0x00, 0xEB, 0x77, 0x01, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, -/* 000177F0 */ 0x88, 0x01, 0x00, 0xFE, 0x3F, 0x05, 0x1A, 0xA0, 0x41, 0xC1, 0x00, 0xFE, 0x36, 0x04, 0x56, 0xFE, -/* 00017800 */ 0xF4, 0xE7, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0xF4, 0xE7, 0xFE, 0xE8, 0x01, 0xFE, -/* 00017810 */ 0xE8, 0x01, 0x01, 0x05, 0x05, 0x08, 0x04, 0x24, 0x23, 0x03, 0x03, 0x01, 0x04, 0x04, 0x04, 0x04, -/* 00017820 */ 0x07, 0x06, 0xFE, 0xF6, 0x03, 0x05, 0xFE, 0x32, 0x04, 0x06, 0xFE, 0x46, 0x03, 0x96, 0x59, 0x08, -/* 00017830 */ 0xB2, 0x05, 0x08, 0x4F, 0x06, 0x2C, 0x08, 0x05, 0x15, 0x03, 0x00, 0x08, 0x02, 0x09, 0x24, 0x00, -/* 00017840 */ 0x8D, 0x03, 0x03, 0x09, 0x00, 0x00, 0x6B, 0x08, 0x09, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x09, -/* 00017850 */ 0x5B, 0x01, 0x03, 0x00, 0x00, 0x5B, 0x02, 0x04, 0x00, 0x00, 0xF2, 0x03, 0xFF, 0x08, 0x00, 0x00, -/* 00017860 */ 0x00, 0x00, 0x00, 0x00, 0x8D, 0x03, 0x03, 0x09, 0x00, 0x00, 0x6B, 0x08, 0x09, 0x01, 0x07, 0x02, -/* 00017870 */ 0x00, 0x5A, 0x00, 0x09, 0x5B, 0x01, 0x05, 0x01, 0x00, 0xF2, 0x02, 0x08, 0x08, 0x01, 0x00, 0x00, -/* 00017880 */ 0x00, 0x01, 0x00, 0x47, 0x06, 0x08, 0xA6, 0x08, 0x14, 0x08, 0x00, 0x06, 0x08, 0x60, 0x08, 0x06, -/* 00017890 */ 0x02, 0x0F, 0x24, 0x00, 0x08, 0x8D, 0x03, 0x03, 0x09, 0x00, 0x00, 0x6B, 0x08, 0x09, 0x00, 0x07, -/* 000178A0 */ 0x03, 0x00, 0x5A, 0x00, 0x09, 0x5B, 0x01, 0x03, 0x02, 0x00, 0x5B, 0x02, 0x04, 0x02, 0x00, 0xF2, -/* 000178B0 */ 0x03, 0xFF, 0x08, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x60, 0x00, 0x06, 0x03, 0x09, 0x02, 0x00, -/* 000178C0 */ 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x8A, 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0x30, 0x04, 0xFE, 0x31, 0x04, -/* 000178D0 */ 0xFE, 0x0E, 0xE8, 0x07, 0x07, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x30, 0x00, 0x24, 0x00, 0x6C, 0x00, -/* 000178E0 */ 0x22, 0x00, 0x41, 0x00, 0x0F, 0x00, 0x5B, 0x00, 0x24, 0x00, 0x6C, 0x00, 0x09, 0x00, 0x29, 0x00, -/* 000178F0 */ 0x00, 0xBF, 0x5C, 0x18, 0xC1, 0x03, 0x88, 0x03, 0x00, 0xFE, 0x2A, 0x05, 0x13, 0xA0, 0x41, 0xC3, -/* 00017900 */ 0x00, 0xFE, 0x0D, 0x04, 0x55, 0xFF, 0x00, 0x00, 0x00, 0x02, 0xFE, 0x93, 0xE3, 0xFF, 0x00, 0x10, -/* 00017910 */ 0x01, 0x00, 0x01, 0x01, 0xFE, 0x93, 0xE3, 0xFE, 0x61, 0x03, 0xFE, 0x61, 0x03, 0x01, 0x06, 0x11, -/* 00017920 */ 0x15, 0x04, 0x38, 0x36, 0x03, 0x04, 0x01, 0x02, 0x03, 0x03, 0x03, 0x03, 0x14, 0x06, 0xFE, 0xF6, -/* 00017930 */ 0x03, 0x05, 0xFE, 0x34, 0x04, 0x06, 0xFE, 0x46, 0x03, 0x06, 0xFE, 0xF7, 0x03, 0x06, 0xFE, 0x35, -/* 00017940 */ 0x04, 0x06, 0xFE, 0x28, 0x04, 0x06, 0xFE, 0x2B, 0x04, 0x06, 0xFE, 0x2C, 0x04, 0x06, 0xFE, 0xFA, -/* 00017950 */ 0x03, 0x06, 0xFE, 0xFB, 0x03, 0x06, 0xFE, 0xFC, 0x03, 0x06, 0xFE, 0xFD, 0x03, 0x06, 0xFE, 0xFE, -/* 00017960 */ 0x03, 0x06, 0xFE, 0x2F, 0x04, 0x08, 0xE6, 0x59, 0x15, 0xB2, 0x11, 0x15, 0x4F, 0x12, 0x4F, 0x13, -/* 00017970 */ 0x2C, 0x15, 0x11, 0x15, 0x03, 0x00, 0x15, 0x02, 0x09, 0x24, 0x00, 0x8D, 0x03, 0x03, 0x16, 0x00, -/* 00017980 */ 0x00, 0x6B, 0x15, 0x16, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x16, 0x5B, 0x01, 0x03, 0x00, 0x00, -/* 00017990 */ 0x5B, 0x02, 0x04, 0x00, 0x00, 0xF2, 0x03, 0xFF, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8D, -/* 000179A0 */ 0x03, 0x03, 0x16, 0x00, 0x00, 0x6B, 0x15, 0x16, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x16, 0x5B, -/* 000179B0 */ 0x01, 0x11, 0x01, 0x00, 0xF2, 0x02, 0x15, 0x15, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x12, -/* 000179C0 */ 0x15, 0xA6, 0x15, 0x14, 0x08, 0x00, 0x12, 0x15, 0x60, 0x15, 0x12, 0x02, 0x0F, 0x24, 0x00, 0x15, -/* 000179D0 */ 0x8D, 0x03, 0x03, 0x16, 0x00, 0x00, 0x6B, 0x15, 0x16, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x16, -/* 000179E0 */ 0x5B, 0x01, 0x03, 0x02, 0x00, 0x5B, 0x02, 0x04, 0x02, 0x00, 0xF2, 0x03, 0xFF, 0x15, 0x00, 0x00, -/* 000179F0 */ 0x00, 0x00, 0x02, 0x00, 0xCD, 0x15, 0x0B, 0x00, 0x00, 0x9F, 0x00, 0x05, 0x15, 0x9F, 0x01, 0x06, -/* 00017A00 */ 0x15, 0x9F, 0x02, 0x07, 0x15, 0x9F, 0x03, 0x08, 0x15, 0x9F, 0x04, 0x09, 0x15, 0x9F, 0x05, 0x0A, -/* 00017A10 */ 0x15, 0x9F, 0x06, 0x0B, 0x15, 0x9F, 0x07, 0x0C, 0x15, 0x9F, 0x08, 0x0D, 0x15, 0x9F, 0x09, 0x0E, -/* 00017A20 */ 0x15, 0x9F, 0x0A, 0x0F, 0x15, 0x47, 0x13, 0x15, 0x8D, 0x02, 0x19, 0x15, 0x01, 0x00, 0x4B, 0x15, -/* 00017A30 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x10, 0x5B, 0x01, 0x13, 0x03, 0x00, 0x5B, 0x02, 0x12, 0x03, 0x00, -/* 00017A40 */ 0xEE, 0x03, 0x00, 0x15, 0x03, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x8A, 0x02, -/* 00017A50 */ 0xFE, 0xEF, 0x01, 0xFE, 0x30, 0x04, 0xFE, 0xC0, 0xE3, 0x08, 0x09, 0x00, 0x00, 0x00, 0x0B, 0x00, -/* 00017A60 */ 0x34, 0x00, 0x24, 0x00, 0x7C, 0x00, 0x22, 0x00, 0x45, 0x00, 0x0F, 0x00, 0x5F, 0x00, 0x24, 0x00, -/* 00017A70 */ 0x7D, 0x00, 0x34, 0x00, 0x21, 0x01, 0x23, 0x00, 0x41, 0x00, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, -/* 00017A80 */ 0x88, 0x01, 0x00, 0xFE, 0x0A, 0x05, 0x6D, 0xA2, 0x41, 0xD1, 0x00, 0x54, 0xFE, 0x79, 0xDE, 0xFF, -/* 00017A90 */ 0x00, 0x10, 0x01, 0x00, 0x03, 0x02, 0xFE, 0x79, 0xDE, 0xC6, 0xC6, 0x01, 0x06, 0x03, 0x07, 0x07, -/* 00017AA0 */ 0x17, 0x16, 0x03, 0x01, 0x03, 0x01, 0x01, 0x01, 0x01, 0x06, 0x08, 0x55, 0x59, 0x07, 0xB2, 0x05, -/* 00017AB0 */ 0x07, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA6, 0x07, 0x47, 0x04, 0x07, 0x8D, 0x02, 0x17, 0x07, 0x00, -/* 00017AC0 */ 0x00, 0x4B, 0x07, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x05, 0x00, 0x00, 0x8D, 0x01, -/* 00017AD0 */ 0x04, 0x08, 0x01, 0x00, 0x4B, 0x08, 0x5B, 0x02, 0x08, 0x00, 0x00, 0x8D, 0x03, 0x03, 0x08, 0x02, -/* 00017AE0 */ 0x00, 0x60, 0x08, 0x08, 0x00, 0x5B, 0x03, 0x08, 0x00, 0x00, 0x5B, 0x04, 0x03, 0x00, 0x00, 0x5B, -/* 00017AF0 */ 0x05, 0x04, 0x00, 0x00, 0xEE, 0x06, 0x00, 0x07, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, -/* 00017B00 */ 0x00, 0xFE, 0xDB, 0x01, 0xFE, 0x8C, 0xDE, 0x03, 0x05, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x23, 0x00, -/* 00017B10 */ 0x44, 0x00, 0x8F, 0x00, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0xF9, 0x04, -/* 00017B20 */ 0x5D, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x27, 0x04, 0x53, 0xFE, 0xFC, 0xDA, 0xFF, 0x00, 0x10, 0x01, -/* 00017B30 */ 0x00, 0x02, 0x02, 0xFE, 0xFC, 0xDA, 0xFE, 0x7B, 0x02, 0xFE, 0x7B, 0x02, 0x01, 0x06, 0x07, 0x0B, -/* 00017B40 */ 0x06, 0x33, 0x31, 0x03, 0x05, 0x02, 0x05, 0x05, 0x05, 0x05, 0x0A, 0x06, 0xFE, 0xF6, 0x03, 0x05, -/* 00017B50 */ 0xFE, 0x33, 0x04, 0x06, 0xFE, 0x46, 0x03, 0x0B, 0x0C, 0xE2, 0x59, 0x0B, 0xB2, 0x08, 0x0B, 0x4F, -/* 00017B60 */ 0x09, 0x8D, 0x03, 0x24, 0x0C, 0x00, 0x00, 0x6B, 0x0B, 0x0C, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 00017B70 */ 0x0C, 0x5B, 0x01, 0x07, 0x00, 0x00, 0xF2, 0x02, 0x0B, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 00017B80 */ 0x47, 0x07, 0x0B, 0x2C, 0x0B, 0x08, 0x15, 0x03, 0x00, 0x0B, 0x02, 0x09, 0x24, 0x00, 0x8D, 0x03, -/* 00017B90 */ 0x03, 0x0C, 0x01, 0x00, 0x6B, 0x0B, 0x0C, 0x01, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, -/* 00017BA0 */ 0x03, 0x01, 0x00, 0x5B, 0x02, 0x04, 0x01, 0x00, 0xF2, 0x03, 0xFF, 0x0B, 0x01, 0x00, 0x00, 0x00, -/* 00017BB0 */ 0x01, 0x00, 0x8D, 0x03, 0x03, 0x0C, 0x01, 0x00, 0x6B, 0x0B, 0x0C, 0x02, 0x07, 0x02, 0x00, 0x5A, -/* 00017BC0 */ 0x00, 0x0C, 0x5B, 0x01, 0x08, 0x02, 0x00, 0xF2, 0x02, 0x0B, 0x0B, 0x02, 0x00, 0x00, 0x00, 0x02, -/* 00017BD0 */ 0x00, 0x47, 0x09, 0x0B, 0xA6, 0x0B, 0x14, 0x08, 0x00, 0x09, 0x0B, 0x60, 0x0B, 0x09, 0x03, 0x0F, -/* 00017BE0 */ 0x24, 0x00, 0x0B, 0x8D, 0x03, 0x03, 0x0C, 0x01, 0x00, 0x6B, 0x0B, 0x0C, 0x01, 0x07, 0x03, 0x00, -/* 00017BF0 */ 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x03, 0x03, 0x00, 0x5B, 0x02, 0x04, 0x03, 0x00, 0xF2, 0x03, 0xFF, -/* 00017C00 */ 0x0B, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x8D, 0x03, 0x03, 0x0C, 0x01, 0x00, 0x6B, 0x0B, 0x0C, -/* 00017C10 */ 0x04, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x07, 0x04, 0x00, 0x5B, 0x02, 0x09, 0x04, -/* 00017C20 */ 0x00, 0x5B, 0x03, 0x05, 0x04, 0x00, 0x5B, 0x04, 0x06, 0x04, 0x00, 0xF2, 0x05, 0x00, 0x0B, 0x04, -/* 00017C30 */ 0x00, 0x00, 0x00, 0x04, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x38, 0x03, 0xFE, -/* 00017C40 */ 0x8A, 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0x30, 0x04, 0xFE, 0xE2, 0x01, 0xFE, 0x24, 0xDB, 0x08, 0x07, -/* 00017C50 */ 0x00, 0x00, 0x00, 0x22, 0x00, 0x27, 0x00, 0x0B, 0x00, 0x30, 0x00, 0x24, 0x00, 0x73, 0x00, 0x22, -/* 00017C60 */ 0x00, 0x41, 0x00, 0x0F, 0x00, 0x5B, 0x00, 0x24, 0x00, 0x73, 0x00, 0x33, 0x00, 0x79, 0x00, 0x00, -/* 00017C70 */ 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0xEA, 0x04, 0x4F, 0xA2, 0x41, 0xC3, 0x00, -/* 00017C80 */ 0xFE, 0x26, 0x04, 0x52, 0xFE, 0x34, 0xD8, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x34, -/* 00017C90 */ 0xD8, 0xFE, 0x67, 0x02, 0xFE, 0x67, 0x02, 0x01, 0x06, 0x06, 0x0A, 0x06, 0x33, 0x31, 0x03, 0x05, -/* 00017CA0 */ 0x02, 0x05, 0x05, 0x05, 0x05, 0x09, 0x06, 0xFE, 0xF6, 0x03, 0x05, 0xFE, 0x32, 0x04, 0x06, 0xFE, -/* 00017CB0 */ 0x46, 0x03, 0x0C, 0xE2, 0x59, 0x0A, 0xB2, 0x07, 0x0A, 0x4F, 0x08, 0x8D, 0x03, 0x24, 0x0B, 0x00, -/* 00017CC0 */ 0x00, 0x6B, 0x0A, 0x0B, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0B, 0x5B, 0x01, 0x06, 0x00, 0x00, -/* 00017CD0 */ 0xF2, 0x02, 0x0A, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x06, 0x0A, 0x2C, 0x0A, 0x07, -/* 00017CE0 */ 0x15, 0x03, 0x00, 0x0A, 0x02, 0x09, 0x24, 0x00, 0x8D, 0x03, 0x03, 0x0B, 0x01, 0x00, 0x6B, 0x0A, -/* 00017CF0 */ 0x0B, 0x01, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0B, 0x5B, 0x01, 0x03, 0x01, 0x00, 0x5B, 0x02, 0x04, -/* 00017D00 */ 0x01, 0x00, 0xF2, 0x03, 0xFF, 0x0A, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x8D, 0x03, 0x03, 0x0B, -/* 00017D10 */ 0x01, 0x00, 0x6B, 0x0A, 0x0B, 0x02, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0B, 0x5B, 0x01, 0x07, 0x02, -/* 00017D20 */ 0x00, 0xF2, 0x02, 0x0A, 0x0A, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x47, 0x08, 0x0A, 0xA6, 0x0A, -/* 00017D30 */ 0x14, 0x08, 0x00, 0x08, 0x0A, 0x60, 0x0A, 0x08, 0x03, 0x0F, 0x24, 0x00, 0x0A, 0x8D, 0x03, 0x03, -/* 00017D40 */ 0x0B, 0x01, 0x00, 0x6B, 0x0A, 0x0B, 0x01, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0B, 0x5B, 0x01, 0x03, -/* 00017D50 */ 0x03, 0x00, 0x5B, 0x02, 0x04, 0x03, 0x00, 0xF2, 0x03, 0xFF, 0x0A, 0x01, 0x00, 0x00, 0x00, 0x03, -/* 00017D60 */ 0x00, 0x8D, 0x03, 0x03, 0x0B, 0x01, 0x00, 0x6B, 0x0A, 0x0B, 0x04, 0x07, 0x05, 0x00, 0x5A, 0x00, -/* 00017D70 */ 0x0B, 0x5B, 0x01, 0x06, 0x04, 0x00, 0x5B, 0x02, 0x08, 0x04, 0x00, 0x5B, 0x03, 0x05, 0x04, 0x00, -/* 00017D80 */ 0x5B, 0x04, 0x05, 0x04, 0x00, 0xF2, 0x05, 0x00, 0x0A, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x09, -/* 00017D90 */ 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x38, 0x03, 0xFE, 0x8A, 0x02, 0xFE, 0xEF, 0x01, 0xFE, -/* 00017DA0 */ 0x30, 0x04, 0xFE, 0xE2, 0x01, 0xFE, 0x55, 0xD8, 0x08, 0x07, 0x00, 0x00, 0x00, 0x22, 0x00, 0x27, -/* 00017DB0 */ 0x00, 0x0B, 0x00, 0x30, 0x00, 0x24, 0x00, 0x6C, 0x00, 0x22, 0x00, 0x41, 0x00, 0x0F, 0x00, 0x5B, -/* 00017DC0 */ 0x00, 0x24, 0x00, 0x6C, 0x00, 0x33, 0x00, 0x7A, 0x00, 0x00, 0x3F, 0x5C, 0x08, 0xC1, 0x03, 0x88, -/* 00017DD0 */ 0x01, 0x00, 0xFE, 0xD0, 0x04, 0x44, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x46, 0x03, 0x51, 0xFE, 0x86, -/* 00017DE0 */ 0xD4, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x01, 0xFE, 0x86, 0xD4, 0xFE, 0x5B, 0x03, 0xFE, 0x5B, -/* 00017DF0 */ 0x03, 0x0B, 0x04, 0x0B, 0x05, 0x60, 0x59, 0x03, 0x09, 0x05, 0x0A, 0x09, 0x0A, 0x0A, 0x0A, 0x08, -/* 00017E00 */ 0x06, 0xFE, 0x46, 0x03, 0xFE, 0x90, 0x01, 0x59, 0x0B, 0xB2, 0x06, 0x0B, 0xBD, 0x07, 0x4F, 0x08, -/* 00017E10 */ 0x4F, 0x09, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA6, 0x0B, 0x47, 0x04, 0x0B, 0x15, 0x05, 0x00, 0x05, -/* 00017E20 */ 0x02, 0xA6, 0x0B, 0x47, 0x05, 0x0B, 0x4F, 0x08, 0x4F, 0x09, 0x69, 0x09, 0x00, 0x00, 0x00, 0x0B, -/* 00017E30 */ 0x14, 0x0A, 0x00, 0x06, 0x0B, 0xA6, 0x0B, 0x14, 0x03, 0x00, 0x06, 0x0B, 0x09, 0x16, 0x00, 0x07, -/* 00017E40 */ 0x03, 0x00, 0x5B, 0x01, 0x04, 0x00, 0x00, 0x5B, 0x02, 0x05, 0x00, 0x00, 0xC2, 0x03, 0x00, 0x07, -/* 00017E50 */ 0x00, 0x00, 0x09, 0x40, 0x01, 0x8D, 0x03, 0x24, 0x0C, 0x00, 0x00, 0x6B, 0x0B, 0x0C, 0x00, 0x07, -/* 00017E60 */ 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x06, 0x01, 0x00, 0xF2, 0x02, 0x0B, 0x0B, 0x00, 0x00, -/* 00017E70 */ 0x00, 0x00, 0x01, 0x00, 0x47, 0x08, 0x0B, 0x8D, 0x03, 0x37, 0x0C, 0x01, 0x00, 0x4B, 0x0C, 0x6B, -/* 00017E80 */ 0x0B, 0x0C, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x08, 0x02, 0x00, 0xF2, 0x02, -/* 00017E90 */ 0x0B, 0x0B, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x0F, 0x1F, 0x00, 0x0B, 0x8D, 0x03, 0x03, 0x0C, -/* 00017EA0 */ 0x02, 0x00, 0x6B, 0x0B, 0x0C, 0x02, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x03, 0x03, -/* 00017EB0 */ 0x00, 0xF2, 0x02, 0xFF, 0x0B, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x8D, 0x03, 0x03, 0x0C, 0x02, -/* 00017EC0 */ 0x00, 0x6B, 0x0B, 0x0C, 0x03, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x08, 0x04, 0x00, -/* 00017ED0 */ 0xF2, 0x02, 0x0B, 0x0B, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x47, 0x09, 0x0B, 0xA6, 0x0B, 0x14, -/* 00017EE0 */ 0x03, 0x00, 0x09, 0x0B, 0x09, 0x43, 0x00, 0x8D, 0x03, 0x37, 0x0C, 0x01, 0x00, 0x4B, 0x0C, 0x6B, -/* 00017EF0 */ 0x0B, 0x0C, 0x04, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x0C, 0xF2, 0x01, 0x0B, 0x0B, 0x04, 0x00, 0x00, -/* 00017F00 */ 0x00, 0x05, 0x00, 0x47, 0x09, 0x0B, 0x8D, 0x03, 0x03, 0x0C, 0x02, 0x00, 0x6B, 0x0B, 0x0C, 0x05, -/* 00017F10 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x08, 0x06, 0x00, 0x5B, 0x02, 0x09, 0x06, 0x00, -/* 00017F20 */ 0xF2, 0x03, 0xFF, 0x0B, 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x8D, 0x01, 0x02, 0x0B, 0x03, 0x00, -/* 00017F30 */ 0x4B, 0x0B, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x09, 0x07, 0x00, 0x5B, 0x02, 0x04, -/* 00017F40 */ 0x07, 0x00, 0x5B, 0x03, 0x05, 0x07, 0x00, 0xEE, 0x04, 0xFF, 0x0B, 0x07, 0x00, 0x47, 0x0B, 0x09, -/* 00017F50 */ 0x8D, 0x03, 0x37, 0x0D, 0x01, 0x00, 0x4B, 0x0D, 0x6B, 0x0C, 0x0D, 0x06, 0x07, 0x03, 0x00, 0x5A, -/* 00017F60 */ 0x00, 0x0D, 0x8D, 0x01, 0x03, 0x0E, 0x04, 0x00, 0x4B, 0x0E, 0x5B, 0x01, 0x0E, 0x08, 0x00, 0x5B, -/* 00017F70 */ 0x02, 0x08, 0x08, 0x00, 0xF2, 0x03, 0x0C, 0x0C, 0x06, 0x00, 0x00, 0x00, 0x08, 0x00, 0x75, 0x0C, -/* 00017F80 */ 0x0B, 0x07, 0x60, 0x0B, 0x09, 0x08, 0x80, 0x0B, 0x0B, 0xF8, 0x00, 0xFA, 0x0B, 0x47, 0x00, 0x08, -/* 00017F90 */ 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x36, 0x03, 0xB0, 0xFE, 0x8E, 0x02, 0xFE, 0xEF, -/* 00017FA0 */ 0x01, 0x61, 0xFE, 0xF0, 0x01, 0x4D, 0xFE, 0x31, 0x04, 0xFE, 0x31, 0x04, 0xAB, 0xFE, 0x9C, 0xD4, -/* 00017FB0 */ 0x10, 0x0B, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0E, 0x00, 0x23, 0x00, 0x15, 0x00, 0x3B, -/* 00017FC0 */ 0x00, 0x16, 0x00, 0x46, 0x00, 0x22, 0x00, 0x32, 0x00, 0x25, 0x00, 0x2C, 0x00, 0x1F, 0x00, 0x83, -/* 00017FD0 */ 0x00, 0x22, 0x00, 0x3E, 0x00, 0x0A, 0x00, 0x32, 0x00, 0x1F, 0x00, 0x2B, 0x00, 0x24, 0x00, 0x48, -/* 00017FE0 */ 0x00, 0x23, 0x00, 0x45, 0x00, 0x35, 0x00, 0x3B, 0x00, 0x0B, 0x00, 0x33, 0x00, 0x08, 0x00, 0x14, -/* 00017FF0 */ 0x00, 0x00, 0xBF, 0x5C, 0x0A, 0xC1, 0x07, 0x88, 0x01, 0x00, 0xFE, 0xC0, 0x04, 0x5E, 0xA0, 0x41, -/* 00018000 */ 0xF1, 0x00, 0x50, 0xFE, 0xDC, 0xD1, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0xDC, 0xD1, -/* 00018010 */ 0xFE, 0xF1, 0x01, 0xFE, 0xF1, 0x01, 0x03, 0x07, 0x0B, 0x10, 0x06, 0x37, 0x35, 0x03, 0x02, 0x05, -/* 00018020 */ 0x05, 0x04, 0x04, 0x04, 0x04, 0x01, 0x0F, 0x07, 0x06, 0xFE, 0xC3, 0x03, 0x05, 0xFE, 0x21, 0x04, -/* 00018030 */ 0x06, 0xFE, 0x20, 0x04, 0x01, 0x00, 0x01, 0x01, 0x08, 0x0C, 0x0B, 0xEE, 0xAC, 0x0D, 0x59, 0x10, -/* 00018040 */ 0xB2, 0x0B, 0x10, 0x4F, 0x0C, 0x4F, 0x0E, 0x2C, 0x10, 0x0B, 0x15, 0x03, 0x00, 0x10, 0x03, 0x09, -/* 00018050 */ 0x33, 0x00, 0x8D, 0x03, 0x0A, 0x10, 0x00, 0x00, 0xE1, 0x10, 0x0B, 0x10, 0x00, 0x0F, 0x24, 0x00, -/* 00018060 */ 0x10, 0x8D, 0x03, 0x03, 0x11, 0x01, 0x00, 0x6B, 0x10, 0x11, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, -/* 00018070 */ 0x11, 0x5B, 0x01, 0x04, 0x00, 0x00, 0x5B, 0x02, 0x05, 0x00, 0x00, 0xF2, 0x03, 0xFF, 0x10, 0x00, -/* 00018080 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x8D, 0x03, 0x37, 0x11, 0x02, 0x00, 0x4B, 0x11, 0x6B, 0x10, 0x11, -/* 00018090 */ 0x01, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x11, 0xF2, 0x01, 0x10, 0x10, 0x01, 0x00, 0x00, 0x00, 0x01, -/* 000180A0 */ 0x00, 0x47, 0x0C, 0x10, 0x8D, 0x01, 0x02, 0x10, 0x03, 0x00, 0x4B, 0x10, 0x07, 0x04, 0x00, 0x5A, -/* 000180B0 */ 0x00, 0x08, 0x5B, 0x01, 0x0C, 0x02, 0x00, 0x96, 0x11, 0x0D, 0x06, 0x00, 0x00, 0x5B, 0x02, 0x11, -/* 000180C0 */ 0x02, 0x00, 0x96, 0x11, 0x0D, 0x07, 0x01, 0x00, 0x5B, 0x03, 0x11, 0x02, 0x00, 0xEE, 0x04, 0xFF, -/* 000180D0 */ 0x10, 0x02, 0x00, 0x8D, 0x03, 0x24, 0x11, 0x04, 0x00, 0x6B, 0x10, 0x11, 0x02, 0x07, 0x02, 0x00, -/* 000180E0 */ 0x5A, 0x00, 0x11, 0x5B, 0x01, 0x0B, 0x03, 0x00, 0xF2, 0x02, 0x10, 0x10, 0x02, 0x00, 0x00, 0x00, -/* 000180F0 */ 0x03, 0x00, 0x47, 0x0E, 0x10, 0x8D, 0x03, 0x03, 0x11, 0x01, 0x00, 0x6B, 0x10, 0x11, 0x03, 0x07, -/* 00018100 */ 0x05, 0x00, 0x5A, 0x00, 0x11, 0x5B, 0x01, 0x0E, 0x04, 0x00, 0x5B, 0x02, 0x0C, 0x04, 0x00, 0x5B, -/* 00018110 */ 0x03, 0x09, 0x04, 0x00, 0x5B, 0x04, 0x0A, 0x04, 0x00, 0xF2, 0x05, 0x00, 0x10, 0x03, 0x00, 0x00, -/* 00018120 */ 0x00, 0x04, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x8A, 0x02, 0x61, 0xFE, 0x38, -/* 00018130 */ 0x03, 0xFE, 0xE2, 0x01, 0xFE, 0xF6, 0xD1, 0x07, 0x0B, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x4D, 0x00, -/* 00018140 */ 0x24, 0x00, 0x68, 0x00, 0x1F, 0x00, 0x2C, 0x00, 0x2F, 0x00, 0x4E, 0x00, 0x22, 0x00, 0x2F, 0x00, -/* 00018150 */ 0x33, 0x00, 0x78, 0x00, 0x00, 0xBF, 0x5C, 0x18, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x83, 0x04, -/* 00018160 */ 0x27, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x1F, 0x04, 0x4F, 0xFE, 0xD2, 0xC7, 0xFF, 0x00, 0x10, 0x01, -/* 00018170 */ 0x00, 0x04, 0x04, 0xFE, 0xD2, 0xC7, 0xFE, 0xA9, 0x09, 0xFE, 0xA9, 0x09, 0x01, 0x12, 0x15, 0x23, -/* 00018180 */ 0x07, 0xFC, 0xE3, 0x03, 0x15, 0x04, 0x0B, 0x16, 0x16, 0x16, 0x16, 0x22, 0x08, 0x06, 0xFE, 0x00, -/* 00018190 */ 0x04, 0x06, 0xFE, 0xAD, 0x03, 0x05, 0xFE, 0xFF, 0x03, 0x05, 0xFE, 0xBC, 0x03, 0x06, 0xFE, 0xB4, -/* 000181A0 */ 0x03, 0x06, 0xFE, 0x28, 0x04, 0x05, 0xFE, 0x29, 0x04, 0x05, 0xFE, 0x2A, 0x04, 0x06, 0xFE, 0x2B, -/* 000181B0 */ 0x04, 0x01, 0x00, 0x06, 0xFE, 0x2C, 0x04, 0x05, 0xFE, 0x2D, 0x04, 0x06, 0xFE, 0x2E, 0x04, 0x06, -/* 000181C0 */ 0xFE, 0x3F, 0x03, 0x01, 0x03, 0x06, 0xFE, 0x2F, 0x04, 0x06, 0xFE, 0xC2, 0x03, 0x0B, 0xFE, 0x0C, -/* 000181D0 */ 0x04, 0x4F, 0x18, 0x4F, 0x19, 0x4F, 0x1A, 0x4F, 0x1B, 0x4F, 0x1C, 0x4F, 0x1D, 0x4F, 0x1E, 0x4F, -/* 000181E0 */ 0x1F, 0x4F, 0x20, 0x4F, 0x21, 0x8D, 0x02, 0x11, 0x23, 0x00, 0x00, 0x4B, 0x23, 0x07, 0x02, 0x00, -/* 000181F0 */ 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x16, 0x00, 0x00, 0xEE, 0x02, 0x23, 0x23, 0x00, 0x00, 0x47, 0x18, -/* 00018200 */ 0x23, 0xA6, 0x23, 0x14, 0x03, 0x00, 0x17, 0x23, 0x09, 0x22, 0x00, 0x8D, 0x03, 0x37, 0x25, 0x01, -/* 00018210 */ 0x00, 0x4B, 0x25, 0x6B, 0x24, 0x25, 0x00, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x25, 0xF2, 0x01, 0x24, -/* 00018220 */ 0x24, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x23, 0x24, 0x09, 0x22, 0x00, 0x8D, 0x03, 0x24, -/* 00018230 */ 0x25, 0x02, 0x00, 0x6B, 0x24, 0x25, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x25, 0x5B, 0x01, 0x17, -/* 00018240 */ 0x02, 0x00, 0xF2, 0x02, 0x24, 0x24, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x47, 0x23, 0x24, 0x47, -/* 00018250 */ 0x17, 0x23, 0x8D, 0x03, 0x37, 0x24, 0x01, 0x00, 0x4B, 0x24, 0x6B, 0x23, 0x24, 0x02, 0x07, 0x01, -/* 00018260 */ 0x00, 0x5A, 0x00, 0x24, 0xF2, 0x01, 0x23, 0x23, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x47, 0x19, -/* 00018270 */ 0x23, 0x47, 0x23, 0x19, 0x8D, 0x02, 0x02, 0x24, 0x03, 0x00, 0x4B, 0x24, 0x07, 0x06, 0x00, 0x5A, -/* 00018280 */ 0x00, 0x02, 0x5B, 0x01, 0x17, 0x04, 0x00, 0x5B, 0x02, 0x03, 0x04, 0x00, 0x5B, 0x03, 0x04, 0x04, -/* 00018290 */ 0x00, 0xCD, 0x25, 0x02, 0x00, 0x00, 0x9F, 0x00, 0x05, 0x25, 0x9F, 0x01, 0x06, 0x25, 0x5B, 0x04, -/* 000182A0 */ 0x25, 0x04, 0x00, 0x5B, 0x05, 0x05, 0x04, 0x00, 0xEE, 0x06, 0x24, 0x24, 0x04, 0x00, 0x75, 0x24, -/* 000182B0 */ 0x23, 0x03, 0x8D, 0x02, 0x0B, 0x23, 0x04, 0x00, 0x4B, 0x23, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x02, -/* 000182C0 */ 0x8D, 0x03, 0x03, 0x24, 0x05, 0x00, 0x60, 0x24, 0x24, 0x04, 0x5B, 0x01, 0x24, 0x05, 0x00, 0x5B, -/* 000182D0 */ 0x02, 0x18, 0x05, 0x00, 0x5B, 0x03, 0x19, 0x05, 0x00, 0xCD, 0x24, 0x01, 0x01, 0x00, 0x9F, 0x00, -/* 000182E0 */ 0x07, 0x24, 0x5B, 0x04, 0x24, 0x05, 0x00, 0xEE, 0x05, 0x23, 0x23, 0x05, 0x00, 0x47, 0x1A, 0x23, -/* 000182F0 */ 0x60, 0x23, 0x1A, 0x05, 0x75, 0x23, 0x15, 0x06, 0x60, 0x23, 0x1A, 0x07, 0x75, 0x23, 0x15, 0x08, -/* 00018300 */ 0x8D, 0x02, 0x02, 0x23, 0x03, 0x00, 0x4B, 0x23, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, -/* 00018310 */ 0x17, 0x06, 0x00, 0x5B, 0x02, 0x08, 0x06, 0x00, 0x5B, 0x03, 0x04, 0x06, 0x00, 0xCD, 0x24, 0x03, -/* 00018320 */ 0x02, 0x00, 0x9F, 0x00, 0x09, 0x24, 0x9F, 0x01, 0x0A, 0x24, 0x9F, 0x02, 0x0B, 0x24, 0x5B, 0x04, -/* 00018330 */ 0x24, 0x06, 0x00, 0x5B, 0x05, 0x09, 0x06, 0x00, 0xEE, 0x06, 0x23, 0x23, 0x06, 0x00, 0x47, 0x1B, -/* 00018340 */ 0x23, 0x75, 0x1B, 0x15, 0x09, 0x47, 0x23, 0x15, 0x8D, 0x03, 0x3D, 0x24, 0x06, 0x00, 0x4B, 0x24, -/* 00018350 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x8D, 0x03, 0x3B, 0x25, 0x07, 0x00, 0x4B, 0x25, 0x5B, 0x01, -/* 00018360 */ 0x25, 0x07, 0x00, 0x8D, 0x03, 0x37, 0x26, 0x01, 0x00, 0x4B, 0x26, 0x6B, 0x25, 0x26, 0x0A, 0x07, -/* 00018370 */ 0x02, 0x00, 0x5A, 0x00, 0x26, 0x5B, 0x01, 0x1B, 0x08, 0x00, 0xF2, 0x02, 0x25, 0x25, 0x0A, 0x00, -/* 00018380 */ 0x00, 0x00, 0x08, 0x00, 0x5B, 0x02, 0x25, 0x07, 0x00, 0xEE, 0x03, 0x24, 0x24, 0x07, 0x00, 0x75, -/* 00018390 */ 0x24, 0x23, 0x0B, 0x43, 0x23, 0x1B, 0x0B, 0x47, 0x1C, 0x23, 0x8D, 0x02, 0x02, 0x23, 0x03, 0x00, -/* 000183A0 */ 0x4B, 0x23, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x17, 0x09, 0x00, 0x5B, 0x02, 0x0B, -/* 000183B0 */ 0x09, 0x00, 0x5B, 0x03, 0x04, 0x09, 0x00, 0xA6, 0x24, 0x5B, 0x04, 0x24, 0x09, 0x00, 0xA6, 0x24, -/* 000183C0 */ 0x5B, 0x05, 0x24, 0x09, 0x00, 0xEE, 0x06, 0x23, 0x23, 0x09, 0x00, 0x47, 0x1D, 0x23, 0xA6, 0x23, -/* 000183D0 */ 0x15, 0x03, 0x00, 0x1D, 0x23, 0x09, 0x3F, 0x00, 0x8D, 0x02, 0x0F, 0x23, 0x08, 0x00, 0x4B, 0x23, -/* 000183E0 */ 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x1D, 0x0A, 0x00, 0xEE, 0x02, 0x23, 0x23, 0x0A, -/* 000183F0 */ 0x00, 0x0F, 0x22, 0x00, 0x23, 0x8D, 0x03, 0x03, 0x24, 0x05, 0x00, 0x6B, 0x23, 0x24, 0x0C, 0x07, -/* 00018400 */ 0x02, 0x00, 0x5A, 0x00, 0x24, 0x5B, 0x01, 0x1D, 0x0B, 0x00, 0xF2, 0x02, 0xFF, 0x23, 0x0C, 0x00, -/* 00018410 */ 0x00, 0x00, 0x0B, 0x00, 0x09, 0x28, 0x00, 0xA6, 0x23, 0x14, 0x03, 0x00, 0x1D, 0x23, 0x09, 0x1E, -/* 00018420 */ 0x00, 0x0E, 0x1A, 0x00, 0x1C, 0x8D, 0x03, 0x03, 0x24, 0x05, 0x00, 0x6B, 0x23, 0x24, 0x0D, 0x07, -/* 00018430 */ 0x01, 0x00, 0x5A, 0x00, 0x24, 0xF2, 0x01, 0xFF, 0x23, 0x0D, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x47, -/* 00018440 */ 0x1E, 0x0C, 0x0E, 0x4A, 0x00, 0x1C, 0x8D, 0x03, 0x37, 0x24, 0x01, 0x00, 0x4B, 0x24, 0x6B, 0x23, -/* 00018450 */ 0x24, 0x0E, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x24, 0x5B, 0x01, 0x1D, 0x0D, 0x00, 0xF2, 0x02, 0x23, -/* 00018460 */ 0x23, 0x0E, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x47, 0x1D, 0x23, 0x75, 0x1D, 0x15, 0x0F, 0x8D, 0x03, -/* 00018470 */ 0x03, 0x24, 0x05, 0x00, 0x6B, 0x23, 0x24, 0x10, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x24, 0x5B, 0x01, -/* 00018480 */ 0x1D, 0x0E, 0x00, 0xF2, 0x02, 0x23, 0x23, 0x10, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x47, 0x1E, 0x23, -/* 00018490 */ 0x8D, 0x02, 0x02, 0x23, 0x03, 0x00, 0x4B, 0x23, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, -/* 000184A0 */ 0x17, 0x0F, 0x00, 0x5B, 0x02, 0x0D, 0x0F, 0x00, 0x5B, 0x03, 0x04, 0x0F, 0x00, 0xCD, 0x24, 0x03, -/* 000184B0 */ 0x03, 0x00, 0x9F, 0x00, 0x0E, 0x24, 0x9F, 0x01, 0x0F, 0x24, 0x9F, 0x02, 0x10, 0x24, 0x5B, 0x04, -/* 000184C0 */ 0x24, 0x0F, 0x00, 0x5B, 0x05, 0x0F, 0x0F, 0x00, 0xEE, 0x06, 0x23, 0x23, 0x0F, 0x00, 0x47, 0x1F, -/* 000184D0 */ 0x23, 0x0E, 0x52, 0x00, 0x1C, 0x75, 0x1F, 0x15, 0x11, 0x47, 0x23, 0x15, 0x8D, 0x03, 0x3D, 0x24, -/* 000184E0 */ 0x06, 0x00, 0x4B, 0x24, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x8D, 0x03, 0x3C, 0x25, 0x09, 0x00, -/* 000184F0 */ 0x4B, 0x25, 0x5B, 0x01, 0x25, 0x10, 0x00, 0x8D, 0x03, 0x37, 0x26, 0x01, 0x00, 0x4B, 0x26, 0x6B, -/* 00018500 */ 0x25, 0x26, 0x0A, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x26, 0x5B, 0x01, 0x1F, 0x11, 0x00, 0xF2, 0x02, -/* 00018510 */ 0x25, 0x25, 0x0A, 0x00, 0x00, 0x00, 0x11, 0x00, 0x5B, 0x02, 0x25, 0x10, 0x00, 0xEE, 0x03, 0x24, -/* 00018520 */ 0x24, 0x10, 0x00, 0x75, 0x24, 0x23, 0x12, 0xA6, 0x23, 0x47, 0x20, 0x23, 0xA6, 0x23, 0x47, 0x21, -/* 00018530 */ 0x23, 0x0E, 0x09, 0x00, 0x1C, 0x47, 0x20, 0x1E, 0x47, 0x21, 0x1E, 0x09, 0x14, 0x00, 0x47, 0x20, -/* 00018540 */ 0x0C, 0x14, 0x03, 0x00, 0x1B, 0x0A, 0x09, 0x06, 0x00, 0x47, 0x21, 0x0C, 0x09, 0x03, 0x00, 0x47, -/* 00018550 */ 0x21, 0x11, 0x8D, 0x02, 0x14, 0x23, 0x0A, 0x00, 0x4B, 0x23, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x02, -/* 00018560 */ 0x5B, 0x01, 0x15, 0x12, 0x00, 0x5B, 0x02, 0x17, 0x12, 0x00, 0x5B, 0x03, 0x20, 0x12, 0x00, 0x5B, -/* 00018570 */ 0x04, 0x21, 0x12, 0x00, 0xEE, 0x05, 0xFF, 0x23, 0x12, 0x00, 0x47, 0x23, 0x15, 0x8D, 0x02, 0x02, -/* 00018580 */ 0x24, 0x03, 0x00, 0x4B, 0x24, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x17, 0x13, 0x00, -/* 00018590 */ 0x5B, 0x02, 0x12, 0x13, 0x00, 0x5B, 0x03, 0x13, 0x13, 0x00, 0xA6, 0x25, 0x5B, 0x04, 0x25, 0x13, -/* 000185A0 */ 0x00, 0x5B, 0x05, 0x14, 0x13, 0x00, 0xEE, 0x06, 0x24, 0x24, 0x13, 0x00, 0x75, 0x24, 0x23, 0x13, -/* 000185B0 */ 0x75, 0x14, 0x15, 0x14, 0x8D, 0x03, 0x03, 0x24, 0x05, 0x00, 0x6B, 0x23, 0x24, 0x15, 0x07, 0x02, -/* 000185C0 */ 0x00, 0x5A, 0x00, 0x24, 0x5B, 0x01, 0x15, 0x14, 0x00, 0xF2, 0x02, 0xFF, 0x23, 0x15, 0x00, 0x00, -/* 000185D0 */ 0x00, 0x14, 0x00, 0x47, 0x00, 0x15, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x61, 0xFE, 0x36, -/* 000185E0 */ 0x03, 0x61, 0xFE, 0xF8, 0x01, 0xFE, 0xDB, 0x01, 0xFE, 0xF7, 0x01, 0xFE, 0xF7, 0x01, 0xFE, 0xB4, -/* 000185F0 */ 0x03, 0xFE, 0x18, 0x02, 0xFE, 0x28, 0x04, 0xFE, 0x69, 0x01, 0xFE, 0x12, 0x02, 0xFE, 0x85, 0x02, -/* 00018600 */ 0xFE, 0x88, 0x02, 0xFE, 0x69, 0x01, 0xFE, 0x0F, 0x02, 0xFE, 0xE5, 0x01, 0xFE, 0x10, 0x02, 0xFE, -/* 00018610 */ 0x11, 0x02, 0xFE, 0x19, 0x02, 0xFE, 0x30, 0x04, 0xFE, 0xE3, 0x01, 0xFE, 0x00, 0xC8, 0x28, 0x14, -/* 00018620 */ 0x00, 0x00, 0x00, 0x1C, 0x00, 0x46, 0x00, 0x51, 0x00, 0x58, 0x00, 0x1F, 0x00, 0x24, 0x00, 0x41, -/* 00018630 */ 0x00, 0x74, 0x00, 0x3E, 0x00, 0x62, 0x00, 0x08, 0x00, 0x22, 0x00, 0x08, 0x00, 0x28, 0x00, 0x41, -/* 00018640 */ 0x00, 0x70, 0x00, 0x04, 0x00, 0x1E, 0x00, 0x4E, 0x00, 0x51, 0x00, 0x07, 0x00, 0x37, 0x00, 0x34, -/* 00018650 */ 0x00, 0x5B, 0x00, 0x27, 0x00, 0x55, 0x00, 0x22, 0x00, 0x40, 0x00, 0x0E, 0x00, 0x3D, 0x00, 0x1A, -/* 00018660 */ 0x00, 0x40, 0x00, 0x03, 0x00, 0x1D, 0x00, 0x04, 0x00, 0x23, 0x00, 0x24, 0x00, 0x34, 0x00, 0x04, -/* 00018670 */ 0x00, 0x28, 0x00, 0x22, 0x00, 0x48, 0x00, 0x41, 0x00, 0x79, 0x00, 0x04, 0x00, 0x23, 0x00, 0x04, -/* 00018680 */ 0x00, 0x35, 0x00, 0x4E, 0x00, 0x7A, 0x00, 0x05, 0x00, 0x11, 0x00, 0x05, 0x00, 0x19, 0x00, 0x04, -/* 00018690 */ 0x00, 0x23, 0x00, 0x03, 0x00, 0x27, 0x00, 0x06, 0x00, 0x3C, 0x00, 0x03, 0x00, 0x21, 0x00, 0x08, -/* 000186A0 */ 0x00, 0x2F, 0x00, 0x06, 0x00, 0x3E, 0x00, 0x03, 0x00, 0x3E, 0x00, 0x28, 0x00, 0x51, 0x00, 0x36, -/* 000186B0 */ 0x00, 0x5D, 0x00, 0x04, 0x00, 0x7C, 0x00, 0x1F, 0x00, 0x2D, 0x00, 0x08, 0x00, 0x13, 0x00, 0x00, -/* 000186C0 */ 0x3F, 0x5D, 0x08, 0xC1, 0x13, 0x8D, 0x25, 0x00, 0xFE, 0xB6, 0x03, 0x16, 0xA0, 0x41, 0xD1, 0x00, -/* 000186D0 */ 0x46, 0xFE, 0xD8, 0xA4, 0x07, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0xD8, 0xA4, 0xFE, -/* 000186E0 */ 0x12, 0x22, 0xFE, 0x12, 0x22, 0x04, 0xFE, 0x05, 0x04, 0xFE, 0x06, 0x04, 0xFE, 0x1E, 0x02, 0xFE, -/* 000186F0 */ 0x84, 0x03, 0x0B, 0x18, 0x1F, 0x09, 0xD0, 0xCB, 0x02, 0x10, 0x09, 0x0B, 0x0B, 0x0B, 0x0B, 0x07, -/* 00018700 */ 0x1C, 0x1D, 0x1E, 0x08, 0x06, 0xFE, 0x3D, 0x03, 0x06, 0xFE, 0x07, 0x04, 0x05, 0xFE, 0x08, 0x04, -/* 00018710 */ 0x05, 0xFE, 0x09, 0x04, 0x05, 0xFE, 0x0A, 0x04, 0x05, 0xFE, 0x49, 0x03, 0x06, 0xFE, 0x3F, 0x03, -/* 00018720 */ 0x06, 0xFE, 0x40, 0x03, 0x06, 0xFE, 0x4C, 0x03, 0x06, 0xFE, 0x42, 0x03, 0x0C, 0x06, 0xFE, 0x43, -/* 00018730 */ 0x03, 0x06, 0xFE, 0x44, 0x03, 0x0B, 0x07, 0x06, 0xFE, 0x0B, 0x04, 0x06, 0xFE, 0x0C, 0x04, 0x06, -/* 00018740 */ 0xFE, 0x0D, 0x04, 0x05, 0xFE, 0x0E, 0x04, 0x06, 0xFE, 0x0F, 0x04, 0x06, 0xFE, 0x8D, 0x03, 0xFE, -/* 00018750 */ 0xAC, 0x03, 0x4F, 0x18, 0x4F, 0x19, 0x4F, 0x1A, 0x4F, 0x1B, 0x4F, 0x1F, 0x94, 0x02, 0x1F, 0x4F, -/* 00018760 */ 0x1F, 0x94, 0x03, 0x1F, 0x4F, 0x1F, 0x94, 0x04, 0x1F, 0x4F, 0x1F, 0x94, 0x05, 0x1F, 0x8D, 0x02, -/* 00018770 */ 0x32, 0x1F, 0x00, 0x00, 0x15, 0x03, 0x00, 0x1F, 0x03, 0x09, 0x13, 0x00, 0x8D, 0x02, 0x32, 0x1F, -/* 00018780 */ 0x00, 0x00, 0x15, 0x03, 0x00, 0x1F, 0x04, 0x09, 0x05, 0x00, 0xA6, 0x00, 0x09, 0x6D, 0x03, 0xD3, -/* 00018790 */ 0x00, 0x1F, 0x94, 0x02, 0x1F, 0xA6, 0x1F, 0x94, 0x03, 0x1F, 0x8D, 0x02, 0x03, 0x20, 0x01, 0x00, -/* 000187A0 */ 0x6B, 0x1F, 0x20, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x20, 0x8D, 0x02, 0x23, 0x21, 0x02, 0x00, -/* 000187B0 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x05, 0x01, 0x00, 0xD3, 0x01, 0x22, 0x5B, 0x02, -/* 000187C0 */ 0x22, 0x01, 0x00, 0xEE, 0x03, 0x21, 0x21, 0x01, 0x00, 0x5B, 0x01, 0x21, 0x00, 0x00, 0x8D, 0x02, -/* 000187D0 */ 0x36, 0x21, 0x03, 0x00, 0x4B, 0x21, 0x60, 0x21, 0x21, 0x01, 0x5B, 0x02, 0x21, 0x00, 0x00, 0xF2, -/* 000187E0 */ 0x03, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8D, 0x02, 0x32, 0x1F, 0x00, 0x00, 0x14, -/* 000187F0 */ 0x03, 0x00, 0x1F, 0x04, 0x09, 0x05, 0x00, 0xA6, 0x00, 0x09, 0x00, 0x03, 0x8D, 0x02, 0x23, 0x1F, -/* 00018800 */ 0x02, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x06, 0x02, 0x00, 0xD3, 0x02, 0x20, -/* 00018810 */ 0x5B, 0x02, 0x20, 0x02, 0x00, 0xEE, 0x03, 0x1F, 0x1F, 0x02, 0x00, 0x47, 0x18, 0x1F, 0x8D, 0x02, -/* 00018820 */ 0x23, 0x1F, 0x02, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x07, 0x03, 0x00, 0xD3, -/* 00018830 */ 0x03, 0x20, 0x5B, 0x02, 0x20, 0x03, 0x00, 0xEE, 0x03, 0x1F, 0x1F, 0x03, 0x00, 0x94, 0x04, 0x1F, -/* 00018840 */ 0x94, 0x05, 0x08, 0x8D, 0x02, 0x23, 0x1F, 0x02, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x91, -/* 00018850 */ 0x05, 0x20, 0x04, 0x00, 0x5B, 0x01, 0x20, 0x04, 0x00, 0xD3, 0x04, 0x20, 0x5B, 0x02, 0x20, 0x04, -/* 00018860 */ 0x00, 0xEE, 0x03, 0x1F, 0x1F, 0x04, 0x00, 0x47, 0x19, 0x1F, 0x8D, 0x02, 0x37, 0x20, 0x05, 0x00, -/* 00018870 */ 0x4B, 0x20, 0x6B, 0x1F, 0x20, 0x02, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x20, 0x5B, 0x01, 0x19, 0x05, -/* 00018880 */ 0x00, 0x8D, 0x01, 0x16, 0x21, 0x06, 0x00, 0x4B, 0x21, 0x5B, 0x02, 0x21, 0x05, 0x00, 0xF2, 0x03, -/* 00018890 */ 0x1F, 0x1F, 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x47, 0x1A, 0x1F, 0x8D, 0x02, 0x37, 0x20, 0x05, -/* 000188A0 */ 0x00, 0x4B, 0x20, 0x6B, 0x1F, 0x20, 0x03, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x20, 0x5B, 0x01, 0x1A, -/* 000188B0 */ 0x06, 0x00, 0x5B, 0x02, 0x09, 0x06, 0x00, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 000188C0 */ 0x21, 0x00, 0x00, 0x00, 0x79, 0x0B, 0x21, 0x04, 0x79, 0x0D, 0x21, 0x05, 0x79, 0x0D, 0x21, 0x06, -/* 000188D0 */ 0x79, 0x10, 0x21, 0x07, 0x5B, 0x03, 0x21, 0x06, 0x00, 0xF2, 0x04, 0xFF, 0x1F, 0x03, 0x00, 0x00, -/* 000188E0 */ 0x00, 0x06, 0x00, 0x8D, 0x02, 0x37, 0x20, 0x05, 0x00, 0x4B, 0x20, 0x6B, 0x1F, 0x20, 0x03, 0x07, -/* 000188F0 */ 0x04, 0x00, 0x5A, 0x00, 0x20, 0x5B, 0x01, 0x18, 0x07, 0x00, 0x5B, 0x02, 0x0B, 0x07, 0x00, 0xCB, -/* 00018900 */ 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x79, 0x1A, 0x21, 0x04, -/* 00018910 */ 0x79, 0x10, 0x21, 0x05, 0x79, 0x0D, 0x21, 0x06, 0x79, 0x10, 0x21, 0x07, 0x5B, 0x03, 0x21, 0x07, -/* 00018920 */ 0x00, 0xF2, 0x04, 0xFF, 0x1F, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x8D, 0x02, 0x37, 0x20, 0x05, -/* 00018930 */ 0x00, 0x4B, 0x20, 0x6B, 0x1F, 0x20, 0x03, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x20, 0x5B, 0x01, 0x18, -/* 00018940 */ 0x08, 0x00, 0x5B, 0x02, 0x12, 0x08, 0x00, 0xCB, 0x30, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, -/* 00018950 */ 0x21, 0x00, 0x00, 0x00, 0x07, 0x01, 0x00, 0xC2, 0x01, 0x22, 0x18, 0x09, 0x00, 0x79, 0x22, 0x21, -/* 00018960 */ 0x04, 0x79, 0x0D, 0x21, 0x05, 0x79, 0x0D, 0x21, 0x06, 0x79, 0x0D, 0x21, 0x07, 0x5B, 0x03, 0x21, -/* 00018970 */ 0x08, 0x00, 0xF2, 0x04, 0xFF, 0x1F, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x8D, 0x02, 0x04, 0x1F, -/* 00018980 */ 0x07, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x60, 0x20, 0x18, 0x08, 0x5B, 0x01, 0x20, 0x0A, -/* 00018990 */ 0x00, 0x8D, 0x02, 0x08, 0x20, 0x08, 0x00, 0x60, 0x20, 0x20, 0x09, 0x5B, 0x02, 0x20, 0x0A, 0x00, -/* 000189A0 */ 0xEE, 0x03, 0xFF, 0x1F, 0x0A, 0x00, 0x8D, 0x02, 0x37, 0x20, 0x05, 0x00, 0x4B, 0x20, 0x6B, 0x1F, -/* 000189B0 */ 0x20, 0x03, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x20, 0x60, 0x21, 0x18, 0x08, 0x5B, 0x01, 0x21, 0x0B, -/* 000189C0 */ 0x00, 0x5B, 0x02, 0x13, 0x0B, 0x00, 0xCB, 0x48, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x21, -/* 000189D0 */ 0x00, 0x00, 0x00, 0x79, 0x18, 0x21, 0x04, 0x79, 0x10, 0x21, 0x05, 0x79, 0x0D, 0x21, 0x06, 0x79, -/* 000189E0 */ 0x10, 0x21, 0x07, 0x5B, 0x03, 0x21, 0x0B, 0x00, 0xF2, 0x04, 0xFF, 0x1F, 0x03, 0x00, 0x00, 0x00, -/* 000189F0 */ 0x0B, 0x00, 0x8D, 0x02, 0x37, 0x20, 0x05, 0x00, 0x4B, 0x20, 0x6B, 0x1F, 0x20, 0x03, 0x07, 0x04, -/* 00018A00 */ 0x00, 0x5A, 0x00, 0x20, 0x60, 0x21, 0x18, 0x08, 0x5B, 0x01, 0x21, 0x0C, 0x00, 0x5B, 0x02, 0x14, -/* 00018A10 */ 0x0C, 0x00, 0xCB, 0x60, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0xD6, -/* 00018A20 */ 0x05, 0x22, 0x21, 0x79, 0x22, 0x21, 0x04, 0x79, 0x10, 0x21, 0x05, 0x79, 0x0D, 0x21, 0x06, 0x79, -/* 00018A30 */ 0x10, 0x21, 0x07, 0x5B, 0x03, 0x21, 0x0C, 0x00, 0xF2, 0x04, 0xFF, 0x1F, 0x03, 0x00, 0x00, 0x00, -/* 00018A40 */ 0x0C, 0x00, 0xD3, 0x06, 0x1F, 0x47, 0x1B, 0x1F, 0x8D, 0x02, 0x37, 0x20, 0x05, 0x00, 0x4B, 0x20, -/* 00018A50 */ 0x6B, 0x1F, 0x20, 0x03, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x20, 0x5B, 0x01, 0x1B, 0x0D, 0x00, 0x5B, -/* 00018A60 */ 0x02, 0x09, 0x0D, 0x00, 0xCB, 0x78, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, -/* 00018A70 */ 0x00, 0x79, 0x15, 0x21, 0x04, 0x79, 0x0D, 0x21, 0x05, 0x79, 0x0D, 0x21, 0x06, 0x79, 0x10, 0x21, -/* 00018A80 */ 0x07, 0x5B, 0x03, 0x21, 0x0D, 0x00, 0xF2, 0x04, 0xFF, 0x1F, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x00, -/* 00018A90 */ 0x8D, 0x02, 0x37, 0x20, 0x05, 0x00, 0x4B, 0x20, 0x6B, 0x1F, 0x20, 0x03, 0x07, 0x04, 0x00, 0x5A, -/* 00018AA0 */ 0x00, 0x20, 0x60, 0x21, 0x18, 0x08, 0x5B, 0x01, 0x21, 0x0E, 0x00, 0x5B, 0x02, 0x16, 0x0E, 0x00, -/* 00018AB0 */ 0xCB, 0x90, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x8D, 0x02, 0x23, -/* 00018AC0 */ 0x22, 0x02, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x15, 0x0F, 0x00, 0x5B, 0x02, -/* 00018AD0 */ 0x1B, 0x0F, 0x00, 0xEE, 0x03, 0x22, 0x22, 0x0F, 0x00, 0x79, 0x22, 0x21, 0x0A, 0x79, 0x0D, 0x21, -/* 00018AE0 */ 0x06, 0x79, 0x10, 0x21, 0x07, 0x5B, 0x03, 0x21, 0x0E, 0x00, 0xF2, 0x04, 0xFF, 0x1F, 0x03, 0x00, -/* 00018AF0 */ 0x00, 0x00, 0x0E, 0x00, 0x47, 0x00, 0x18, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x07, 0xA4, -/* 00018B00 */ 0x00, 0x90, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, 0x01, 0x00, -/* 00018B10 */ 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, -/* 00018B20 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, -/* 00018B30 */ 0x00, 0x81, 0x01, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 00018B40 */ 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, -/* 00018B50 */ 0x00, 0x48, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, -/* 00018B60 */ 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x30, 0x00, 0x00, -/* 00018B70 */ 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, -/* 00018B80 */ 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, -/* 00018B90 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, -/* 00018BA0 */ 0x00, 0x81, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 00018BB0 */ 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, -/* 00018BC0 */ 0x00, 0xFE, 0xEE, 0x01, 0xFE, 0x07, 0x03, 0x4D, 0xFE, 0x88, 0x01, 0xFE, 0x83, 0x01, 0xFE, 0x82, -/* 00018BD0 */ 0x01, 0xFE, 0x80, 0x01, 0xFE, 0x81, 0x01, 0xFE, 0x15, 0x01, 0xFE, 0x15, 0x01, 0xFE, 0x84, 0x01, -/* 00018BE0 */ 0xFE, 0xEE, 0xA4, 0x17, 0x1C, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x40, 0x00, 0x05, 0x00, 0x1B, 0x00, -/* 00018BF0 */ 0x06, 0x00, 0xC1, 0x06, 0x05, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x76, 0x05, 0x0E, 0x00, 0x29, 0x00, -/* 00018C00 */ 0x05, 0x00, 0x0D, 0x01, 0x22, 0x00, 0xB1, 0x03, 0x22, 0x00, 0xB5, 0x02, 0x03, 0x00, 0x55, 0x00, -/* 00018C10 */ 0x27, 0x00, 0x30, 0x01, 0x31, 0x00, 0x6F, 0x00, 0x48, 0x00, 0xD1, 0x00, 0x48, 0x00, 0xD3, 0x00, -/* 00018C20 */ 0x51, 0x00, 0xBD, 0x00, 0x2A, 0x00, 0x3D, 0x00, 0x4C, 0x00, 0xC1, 0x00, 0x50, 0x00, 0x81, 0x04, -/* 00018C30 */ 0x06, 0x00, 0xF4, 0x01, 0x48, 0x00, 0xB9, 0x00, 0x64, 0x00, 0xC4, 0x00, 0x08, 0x00, 0x15, 0x00, -/* 00018C40 */ 0x00, 0x00, 0x95, 0x01, 0x00, 0xEF, 0x92, 0x01, 0x00, 0xC7, 0x90, 0x01, 0x00, 0x67, 0x8F, 0x01, -/* 00018C50 */ 0x00, 0xCD, 0x8E, 0x01, 0x00, 0x63, 0x8D, 0x01, 0x00, 0x5D, 0x8C, 0x01, 0x00, 0xBF, 0x5C, 0x08, -/* 00018C60 */ 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x62, 0x04, 0x1B, 0xA0, 0x41, 0xC1, 0x00, 0xFE, 0x1E, 0x04, -/* 00018C70 */ 0x4D, 0xFE, 0x76, 0xC3, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0x76, 0xC3, 0xFE, 0xD7, -/* 00018C80 */ 0x01, 0xFE, 0xD7, 0x01, 0x01, 0x05, 0x05, 0x08, 0x04, 0x24, 0x23, 0x03, 0x03, 0x01, 0x04, 0x04, -/* 00018C90 */ 0x04, 0x04, 0x07, 0x06, 0xFE, 0xF6, 0x03, 0x05, 0xFE, 0x1C, 0x04, 0x06, 0xFE, 0x45, 0x03, 0x96, -/* 00018CA0 */ 0x59, 0x08, 0xB2, 0x05, 0x08, 0x4F, 0x06, 0x2C, 0x08, 0x05, 0x15, 0x03, 0x00, 0x08, 0x02, 0x09, -/* 00018CB0 */ 0x24, 0x00, 0x8D, 0x03, 0x03, 0x09, 0x00, 0x00, 0x6B, 0x08, 0x09, 0x00, 0x07, 0x03, 0x00, 0x5A, -/* 00018CC0 */ 0x00, 0x09, 0x5B, 0x01, 0x03, 0x00, 0x00, 0x5B, 0x02, 0x04, 0x00, 0x00, 0xF2, 0x03, 0xFF, 0x08, -/* 00018CD0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8D, 0x03, 0x03, 0x09, 0x00, 0x00, 0x6B, 0x08, 0x09, 0x01, -/* 00018CE0 */ 0x07, 0x02, 0x00, 0x5A, 0x00, 0x09, 0x5B, 0x01, 0x05, 0x01, 0x00, 0xF2, 0x02, 0x08, 0x08, 0x01, -/* 00018CF0 */ 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x06, 0x08, 0xA6, 0x08, 0x14, 0x08, 0x00, 0x06, 0x08, 0x60, -/* 00018D00 */ 0x08, 0x06, 0x02, 0x0F, 0x24, 0x00, 0x08, 0x8D, 0x03, 0x03, 0x09, 0x00, 0x00, 0x6B, 0x08, 0x09, -/* 00018D10 */ 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x09, 0x5B, 0x01, 0x03, 0x02, 0x00, 0x5B, 0x02, 0x04, 0x02, -/* 00018D20 */ 0x00, 0xF2, 0x03, 0xFF, 0x08, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x60, 0x00, 0x06, 0x03, 0x09, -/* 00018D30 */ 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x8A, 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0x1A, 0x04, 0xFE, -/* 00018D40 */ 0x1B, 0x04, 0xFE, 0x90, 0xC3, 0x07, 0x07, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x30, 0x00, 0x24, 0x00, -/* 00018D50 */ 0x65, 0x00, 0x22, 0x00, 0x41, 0x00, 0x0F, 0x00, 0x57, 0x00, 0x24, 0x00, 0x65, 0x00, 0x09, 0x00, -/* 00018D60 */ 0x2A, 0x00, 0x00, 0xBF, 0x5C, 0x18, 0xC1, 0x03, 0x88, 0x03, 0x00, 0xFE, 0x47, 0x04, 0x13, 0xA0, -/* 00018D70 */ 0x41, 0xC3, 0x00, 0xFE, 0x0D, 0x04, 0x4C, 0xFF, 0x00, 0x00, 0x00, 0x02, 0xFE, 0x2F, 0xBF, 0xFF, -/* 00018D80 */ 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0x2F, 0xBF, 0xFE, 0x4A, 0x03, 0xFE, 0x4A, 0x03, 0x01, -/* 00018D90 */ 0x06, 0x0D, 0x11, 0x04, 0x34, 0x32, 0x03, 0x04, 0x01, 0x02, 0x03, 0x03, 0x03, 0x03, 0x10, 0x06, -/* 00018DA0 */ 0xFE, 0xF6, 0x03, 0x05, 0xFE, 0x1D, 0x04, 0x06, 0xFE, 0x45, 0x03, 0x06, 0xFE, 0xF7, 0x03, 0x06, -/* 00018DB0 */ 0xFE, 0x10, 0x04, 0x06, 0xFE, 0x16, 0x04, 0x06, 0xFE, 0x17, 0x04, 0x06, 0xFE, 0x19, 0x04, 0x06, -/* 00018DC0 */ 0xFE, 0x13, 0x04, 0x06, 0xFE, 0x14, 0x04, 0x08, 0xD6, 0x59, 0x11, 0xB2, 0x0D, 0x11, 0x4F, 0x0E, -/* 00018DD0 */ 0x4F, 0x0F, 0x2C, 0x11, 0x0D, 0x15, 0x03, 0x00, 0x11, 0x02, 0x09, 0x24, 0x00, 0x8D, 0x03, 0x03, -/* 00018DE0 */ 0x12, 0x00, 0x00, 0x6B, 0x11, 0x12, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x12, 0x5B, 0x01, 0x03, -/* 00018DF0 */ 0x00, 0x00, 0x5B, 0x02, 0x04, 0x00, 0x00, 0xF2, 0x03, 0xFF, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 00018E00 */ 0x00, 0x8D, 0x03, 0x03, 0x12, 0x00, 0x00, 0x6B, 0x11, 0x12, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 00018E10 */ 0x12, 0x5B, 0x01, 0x0D, 0x01, 0x00, 0xF2, 0x02, 0x11, 0x11, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, -/* 00018E20 */ 0x47, 0x0E, 0x11, 0xA6, 0x11, 0x14, 0x08, 0x00, 0x0E, 0x11, 0x60, 0x11, 0x0E, 0x02, 0x0F, 0x24, -/* 00018E30 */ 0x00, 0x11, 0x8D, 0x03, 0x03, 0x12, 0x00, 0x00, 0x6B, 0x11, 0x12, 0x00, 0x07, 0x03, 0x00, 0x5A, -/* 00018E40 */ 0x00, 0x12, 0x5B, 0x01, 0x03, 0x02, 0x00, 0x5B, 0x02, 0x04, 0x02, 0x00, 0xF2, 0x03, 0xFF, 0x11, -/* 00018E50 */ 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xCD, 0x11, 0x07, 0x00, 0x00, 0x9F, 0x00, 0x05, 0x11, 0x9F, -/* 00018E60 */ 0x01, 0x06, 0x11, 0x9F, 0x02, 0x07, 0x11, 0x9F, 0x03, 0x08, 0x11, 0x9F, 0x04, 0x09, 0x11, 0x9F, -/* 00018E70 */ 0x05, 0x0A, 0x11, 0x9F, 0x06, 0x0B, 0x11, 0x47, 0x0F, 0x11, 0x8D, 0x02, 0x19, 0x11, 0x01, 0x00, -/* 00018E80 */ 0x4B, 0x11, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x0F, 0x03, 0x00, 0x5B, 0x02, 0x0E, -/* 00018E90 */ 0x03, 0x00, 0xEE, 0x03, 0x00, 0x11, 0x03, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, -/* 00018EA0 */ 0x8A, 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0x1A, 0x04, 0xFE, 0x5C, 0xBF, 0x08, 0x09, 0x00, 0x00, 0x00, -/* 00018EB0 */ 0x0B, 0x00, 0x34, 0x00, 0x24, 0x00, 0x74, 0x00, 0x22, 0x00, 0x45, 0x00, 0x0F, 0x00, 0x5B, 0x00, -/* 00018EC0 */ 0x24, 0x00, 0x75, 0x00, 0x24, 0x00, 0x1E, 0x01, 0x23, 0x00, 0x41, 0x00, 0x00, 0xBF, 0x5C, 0x08, -/* 00018ED0 */ 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x27, 0x04, 0x65, 0xA2, 0x41, 0xD1, 0x00, 0x4B, 0xFE, 0x41, -/* 00018EE0 */ 0xBA, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x02, 0xFE, 0x41, 0xBA, 0xC8, 0xC8, 0x01, 0x06, 0x03, -/* 00018EF0 */ 0x07, 0x07, 0x17, 0x16, 0x03, 0x01, 0x03, 0x01, 0x01, 0x01, 0x01, 0x06, 0x08, 0x55, 0x59, 0x07, -/* 00018F00 */ 0xB2, 0x05, 0x07, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA6, 0x07, 0x47, 0x04, 0x07, 0x8D, 0x02, 0x17, -/* 00018F10 */ 0x07, 0x00, 0x00, 0x4B, 0x07, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x05, 0x00, 0x00, -/* 00018F20 */ 0x8D, 0x01, 0x05, 0x08, 0x01, 0x00, 0x4B, 0x08, 0x5B, 0x02, 0x08, 0x00, 0x00, 0x8D, 0x03, 0x03, -/* 00018F30 */ 0x08, 0x02, 0x00, 0x60, 0x08, 0x08, 0x00, 0x5B, 0x03, 0x08, 0x00, 0x00, 0x5B, 0x04, 0x03, 0x00, -/* 00018F40 */ 0x00, 0x5B, 0x05, 0x04, 0x00, 0x00, 0xEE, 0x06, 0x00, 0x07, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, -/* 00018F50 */ 0x00, 0x24, 0x00, 0xFE, 0xDA, 0x01, 0xFE, 0x54, 0xBA, 0x03, 0x05, 0x00, 0x00, 0x00, 0x0A, 0x00, -/* 00018F60 */ 0x23, 0x00, 0x44, 0x00, 0x91, 0x00, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, -/* 00018F70 */ 0x18, 0x04, 0x4D, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x0F, 0x04, 0x4A, 0xFE, 0x1F, 0xB7, 0xFF, 0x00, -/* 00018F80 */ 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x1F, 0xB7, 0xFE, 0x30, 0x02, 0xFE, 0x30, 0x02, 0x01, 0x08, -/* 00018F90 */ 0x07, 0x0C, 0x09, 0x36, 0x35, 0x03, 0x06, 0x02, 0x04, 0x04, 0x04, 0x04, 0x0B, 0x06, 0xFE, 0xF6, -/* 00018FA0 */ 0x03, 0x05, 0xFE, 0x1C, 0x04, 0x06, 0xFE, 0x45, 0x03, 0x08, 0x0C, 0xEE, 0x59, 0x0C, 0xB2, 0x09, -/* 00018FB0 */ 0x0C, 0x4F, 0x0A, 0x2C, 0x0C, 0x09, 0x15, 0x03, 0x00, 0x0C, 0x02, 0x09, 0x24, 0x00, 0x8D, 0x03, -/* 00018FC0 */ 0x03, 0x0D, 0x00, 0x00, 0x6B, 0x0C, 0x0D, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0D, 0x5B, 0x01, -/* 00018FD0 */ 0x03, 0x00, 0x00, 0x5B, 0x02, 0x04, 0x00, 0x00, 0xF2, 0x03, 0xFF, 0x0C, 0x00, 0x00, 0x00, 0x00, -/* 00018FE0 */ 0x00, 0x00, 0x8D, 0x03, 0x03, 0x0D, 0x00, 0x00, 0x6B, 0x0C, 0x0D, 0x01, 0x07, 0x02, 0x00, 0x5A, -/* 00018FF0 */ 0x00, 0x0D, 0x5B, 0x01, 0x09, 0x01, 0x00, 0xF2, 0x02, 0x0C, 0x0C, 0x01, 0x00, 0x00, 0x00, 0x01, -/* 00019000 */ 0x00, 0x47, 0x0A, 0x0C, 0xA6, 0x0C, 0x14, 0x08, 0x00, 0x0A, 0x0C, 0x60, 0x0C, 0x0A, 0x02, 0x0F, -/* 00019010 */ 0x24, 0x00, 0x0C, 0x8D, 0x03, 0x03, 0x0D, 0x00, 0x00, 0x6B, 0x0C, 0x0D, 0x00, 0x07, 0x03, 0x00, -/* 00019020 */ 0x5A, 0x00, 0x0D, 0x5B, 0x01, 0x03, 0x02, 0x00, 0x5B, 0x02, 0x04, 0x02, 0x00, 0xF2, 0x03, 0xFF, -/* 00019030 */ 0x0C, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x8D, 0x03, 0x03, 0x0D, 0x00, 0x00, 0x6B, 0x0C, 0x0D, -/* 00019040 */ 0x03, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x0D, 0x8D, 0x03, 0x0B, 0x0E, 0x01, 0x00, 0x07, 0x02, 0x00, -/* 00019050 */ 0x5A, 0x00, 0x05, 0x5B, 0x01, 0x07, 0x04, 0x00, 0xEE, 0x02, 0x0E, 0x0E, 0x04, 0x00, 0x5B, 0x01, -/* 00019060 */ 0x0E, 0x03, 0x00, 0x8D, 0x03, 0x0B, 0x0E, 0x01, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x05, 0x5B, -/* 00019070 */ 0x01, 0x08, 0x05, 0x00, 0xEE, 0x02, 0x0E, 0x0E, 0x05, 0x00, 0x5B, 0x02, 0x0E, 0x03, 0x00, 0x5B, -/* 00019080 */ 0x03, 0x0A, 0x03, 0x00, 0x5B, 0x04, 0x06, 0x03, 0x00, 0xF2, 0x05, 0x00, 0x0C, 0x03, 0x00, 0x00, -/* 00019090 */ 0x00, 0x03, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x8A, 0x02, 0xFE, 0xEF, 0x01, -/* 000190A0 */ 0xFE, 0x1A, 0x04, 0xFE, 0xEB, 0x01, 0xFE, 0x44, 0xB7, 0x07, 0x07, 0x00, 0x00, 0x00, 0x0B, 0x00, -/* 000190B0 */ 0x30, 0x00, 0x24, 0x00, 0x65, 0x00, 0x22, 0x00, 0x41, 0x00, 0x0F, 0x00, 0x57, 0x00, 0x24, 0x00, -/* 000190C0 */ 0x65, 0x00, 0x61, 0x00, 0x78, 0x00, 0x00, 0x3F, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, -/* 000190D0 */ 0xFE, 0x03, 0x3C, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x45, 0x03, 0x49, 0xFE, 0x5D, 0xB3, 0xFF, 0x00, -/* 000190E0 */ 0x10, 0x01, 0x00, 0x03, 0x01, 0xFE, 0x5D, 0xB3, 0xFE, 0x71, 0x03, 0xFE, 0x71, 0x03, 0x0B, 0x04, -/* 000190F0 */ 0x0B, 0x05, 0x60, 0x59, 0x03, 0x09, 0x05, 0x0A, 0x09, 0x0A, 0x0A, 0x0A, 0x08, 0x06, 0xFE, 0x45, -/* 00019100 */ 0x03, 0xFE, 0x90, 0x01, 0x59, 0x0B, 0xB2, 0x06, 0x0B, 0xBD, 0x07, 0x4F, 0x08, 0x4F, 0x09, 0x15, -/* 00019110 */ 0x05, 0x00, 0x04, 0x02, 0xA6, 0x0B, 0x47, 0x04, 0x0B, 0x15, 0x05, 0x00, 0x05, 0x02, 0xA6, 0x0B, -/* 00019120 */ 0x47, 0x05, 0x0B, 0x4F, 0x08, 0x4F, 0x09, 0x69, 0x09, 0x00, 0x00, 0x00, 0x0B, 0x14, 0x0A, 0x00, -/* 00019130 */ 0x06, 0x0B, 0xA6, 0x0B, 0x14, 0x03, 0x00, 0x06, 0x0B, 0x09, 0x16, 0x00, 0x07, 0x03, 0x00, 0x5B, -/* 00019140 */ 0x01, 0x04, 0x00, 0x00, 0x5B, 0x02, 0x05, 0x00, 0x00, 0xC2, 0x03, 0x00, 0x07, 0x00, 0x00, 0x09, -/* 00019150 */ 0x40, 0x01, 0x8D, 0x03, 0x24, 0x0C, 0x00, 0x00, 0x6B, 0x0B, 0x0C, 0x00, 0x07, 0x02, 0x00, 0x5A, -/* 00019160 */ 0x00, 0x0C, 0x5B, 0x01, 0x06, 0x01, 0x00, 0xF2, 0x02, 0x0B, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x01, -/* 00019170 */ 0x00, 0x47, 0x08, 0x0B, 0x8D, 0x03, 0x37, 0x0C, 0x01, 0x00, 0x4B, 0x0C, 0x6B, 0x0B, 0x0C, 0x01, -/* 00019180 */ 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x08, 0x02, 0x00, 0xF2, 0x02, 0x0B, 0x0B, 0x01, -/* 00019190 */ 0x00, 0x00, 0x00, 0x02, 0x00, 0x0F, 0x1F, 0x00, 0x0B, 0x8D, 0x03, 0x03, 0x0C, 0x02, 0x00, 0x6B, -/* 000191A0 */ 0x0B, 0x0C, 0x02, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x03, 0x03, 0x00, 0xF2, 0x02, -/* 000191B0 */ 0xFF, 0x0B, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x8D, 0x03, 0x03, 0x0C, 0x02, 0x00, 0x6B, 0x0B, -/* 000191C0 */ 0x0C, 0x03, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x08, 0x04, 0x00, 0xF2, 0x02, 0x0B, -/* 000191D0 */ 0x0B, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x47, 0x09, 0x0B, 0xA6, 0x0B, 0x14, 0x03, 0x00, 0x09, -/* 000191E0 */ 0x0B, 0x09, 0x43, 0x00, 0x8D, 0x03, 0x37, 0x0C, 0x01, 0x00, 0x4B, 0x0C, 0x6B, 0x0B, 0x0C, 0x04, -/* 000191F0 */ 0x07, 0x01, 0x00, 0x5A, 0x00, 0x0C, 0xF2, 0x01, 0x0B, 0x0B, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, -/* 00019200 */ 0x47, 0x09, 0x0B, 0x8D, 0x03, 0x03, 0x0C, 0x02, 0x00, 0x6B, 0x0B, 0x0C, 0x05, 0x07, 0x03, 0x00, -/* 00019210 */ 0x5A, 0x00, 0x0C, 0x5B, 0x01, 0x08, 0x06, 0x00, 0x5B, 0x02, 0x09, 0x06, 0x00, 0xF2, 0x03, 0xFF, -/* 00019220 */ 0x0B, 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x8D, 0x01, 0x02, 0x0B, 0x03, 0x00, 0x4B, 0x0B, 0x07, -/* 00019230 */ 0x04, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x09, 0x07, 0x00, 0x5B, 0x02, 0x04, 0x07, 0x00, 0x5B, -/* 00019240 */ 0x03, 0x05, 0x07, 0x00, 0xEE, 0x04, 0xFF, 0x0B, 0x07, 0x00, 0x47, 0x0B, 0x09, 0x8D, 0x03, 0x37, -/* 00019250 */ 0x0D, 0x01, 0x00, 0x4B, 0x0D, 0x6B, 0x0C, 0x0D, 0x06, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0D, 0x8D, -/* 00019260 */ 0x01, 0x04, 0x0E, 0x04, 0x00, 0x4B, 0x0E, 0x5B, 0x01, 0x0E, 0x08, 0x00, 0x5B, 0x02, 0x08, 0x08, -/* 00019270 */ 0x00, 0xF2, 0x03, 0x0C, 0x0C, 0x06, 0x00, 0x00, 0x00, 0x08, 0x00, 0x75, 0x0C, 0x0B, 0x07, 0x60, -/* 00019280 */ 0x0B, 0x09, 0x08, 0x80, 0x0B, 0x0B, 0xF8, 0x00, 0xFA, 0x0B, 0x47, 0x00, 0x08, 0x09, 0x02, 0x00, -/* 00019290 */ 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x36, 0x03, 0xB0, 0xFE, 0x8E, 0x02, 0xFE, 0xEF, 0x01, 0x61, 0xFE, -/* 000192A0 */ 0xF0, 0x01, 0x4D, 0xFE, 0x1B, 0x04, 0xFE, 0x1B, 0x04, 0xAB, 0xFE, 0x6F, 0xB3, 0x10, 0x0B, 0x00, -/* 000192B0 */ 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0E, 0x00, 0x23, 0x00, 0x15, 0x00, 0x3B, 0x00, 0x16, 0x00, -/* 000192C0 */ 0x42, 0x00, 0x22, 0x00, 0x2F, 0x00, 0x25, 0x00, 0x2C, 0x00, 0x1F, 0x00, 0x7F, 0x00, 0x22, 0x00, -/* 000192D0 */ 0x3F, 0x00, 0x0A, 0x00, 0x32, 0x00, 0x1F, 0x00, 0x2B, 0x00, 0x24, 0x00, 0x48, 0x00, 0x23, 0x00, -/* 000192E0 */ 0x66, 0x00, 0x35, 0x00, 0x3E, 0x00, 0x0B, 0x00, 0x33, 0x00, 0x08, 0x00, 0x14, 0x00, 0x00, 0xBF, -/* 000192F0 */ 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0xDC, 0x03, 0x5D, 0xA2, 0x41, 0xD1, 0x00, 0x48, -/* 00019300 */ 0xFE, 0xD2, 0xAC, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x02, 0xFE, 0xD2, 0xAC, 0xFE, 0x87, 0x04, -/* 00019310 */ 0xFE, 0x87, 0x04, 0x01, 0x0A, 0x06, 0x0E, 0x06, 0x64, 0x5D, 0x03, 0x08, 0x05, 0x03, 0x03, 0x03, -/* 00019320 */ 0x03, 0x0D, 0x08, 0x07, 0x05, 0xFE, 0x08, 0x04, 0x0B, 0xFE, 0x88, 0x01, 0x59, 0x0E, 0xB2, 0x09, -/* 00019330 */ 0x0E, 0x4F, 0x0A, 0x4F, 0x0B, 0x4F, 0x0C, 0x15, 0x05, 0x00, 0x07, 0x02, 0xA6, 0x0E, 0x47, 0x07, -/* 00019340 */ 0x0E, 0x15, 0x05, 0x00, 0x08, 0x02, 0xA6, 0x0E, 0x47, 0x08, 0x0E, 0x4F, 0x0A, 0x4F, 0x0B, 0x4F, -/* 00019350 */ 0x0C, 0xA6, 0x0E, 0x14, 0x08, 0x00, 0x09, 0x0E, 0x14, 0x03, 0x00, 0x09, 0x03, 0x09, 0x1F, 0x00, -/* 00019360 */ 0x8D, 0x03, 0x03, 0x0F, 0x00, 0x00, 0x6B, 0x0E, 0x0F, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0F, -/* 00019370 */ 0x5B, 0x01, 0x04, 0x00, 0x00, 0xF2, 0x02, 0xFF, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8D, -/* 00019380 */ 0x03, 0x0B, 0x0E, 0x01, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x09, 0x01, 0x00, -/* 00019390 */ 0xEE, 0x02, 0x0E, 0x0E, 0x01, 0x00, 0x47, 0x0A, 0x0E, 0x8D, 0x03, 0x0B, 0x0E, 0x01, 0x00, 0x07, -/* 000193A0 */ 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x06, 0x02, 0x00, 0xEE, 0x02, 0x0E, 0x0E, 0x02, 0x00, -/* 000193B0 */ 0x47, 0x0B, 0x0E, 0xA6, 0x0E, 0x47, 0x0C, 0x0E, 0xA6, 0x0E, 0x14, 0x03, 0x00, 0x07, 0x0E, 0x09, -/* 000193C0 */ 0x7B, 0x00, 0xA6, 0x0E, 0x14, 0x03, 0x00, 0x08, 0x0E, 0x09, 0x71, 0x00, 0x8D, 0x01, 0x03, 0x0E, -/* 000193D0 */ 0x02, 0x00, 0x4B, 0x0E, 0xA6, 0x0F, 0x14, 0x03, 0x00, 0x0E, 0x0F, 0x09, 0x51, 0x00, 0x8D, 0x03, -/* 000193E0 */ 0x37, 0x0F, 0x03, 0x00, 0x4B, 0x0F, 0x6B, 0x0E, 0x0F, 0x01, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x0F, -/* 000193F0 */ 0xF2, 0x01, 0x0E, 0x0E, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x01, 0x34, 0x01, 0x01, 0x03, 0x0E, -/* 00019400 */ 0x8D, 0x01, 0x02, 0x0E, 0x04, 0x00, 0x4B, 0x0E, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8D, 0x01, -/* 00019410 */ 0x03, 0x0F, 0x02, 0x00, 0x4B, 0x0F, 0x5B, 0x01, 0x0F, 0x04, 0x00, 0xA6, 0x0F, 0x5B, 0x02, 0x0F, -/* 00019420 */ 0x04, 0x00, 0xA6, 0x0F, 0x5B, 0x03, 0x0F, 0x04, 0x00, 0xEE, 0x04, 0xFF, 0x0E, 0x04, 0x00, 0x8D, -/* 00019430 */ 0x01, 0x03, 0x0E, 0x02, 0x00, 0x4B, 0x0E, 0x47, 0x0C, 0x0E, 0x09, 0x42, 0x00, 0x8D, 0x03, 0x37, -/* 00019440 */ 0x0F, 0x03, 0x00, 0x4B, 0x0F, 0x6B, 0x0E, 0x0F, 0x01, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x0F, 0xF2, -/* 00019450 */ 0x01, 0x0E, 0x0E, 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x47, 0x0C, 0x0E, 0x8D, 0x01, 0x02, 0x0E, -/* 00019460 */ 0x04, 0x00, 0x4B, 0x0E, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x0C, 0x06, 0x00, 0x5B, -/* 00019470 */ 0x02, 0x07, 0x06, 0x00, 0x5B, 0x03, 0x08, 0x06, 0x00, 0xEE, 0x04, 0xFF, 0x0E, 0x06, 0x00, 0x8D, -/* 00019480 */ 0x03, 0x03, 0x0F, 0x00, 0x00, 0x6B, 0x0E, 0x0F, 0x02, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x0F, 0x5B, -/* 00019490 */ 0x01, 0x0A, 0x07, 0x00, 0x5B, 0x02, 0x0B, 0x07, 0x00, 0x5B, 0x03, 0x0C, 0x07, 0x00, 0x5B, 0x04, -/* 000194A0 */ 0x05, 0x07, 0x00, 0xF2, 0x05, 0x00, 0x0E, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x09, 0x02, 0x00, -/* 000194B0 */ 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x91, 0x02, 0x61, 0xFE, 0xEB, 0x01, 0xFE, 0xE2, 0xAC, 0x10, 0x0B, -/* 000194C0 */ 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x10, 0x00, 0x23, 0x00, 0x0F, 0x00, 0x3B, 0x00, 0x1F, -/* 000194D0 */ 0x00, 0x61, 0x00, 0x1A, 0x00, 0x2A, 0x00, 0x1A, 0x00, 0xFE, 0x00, 0x05, 0x00, 0x1D, 0x00, 0x14, -/* 000194E0 */ 0x00, 0x46, 0x00, 0x12, 0x00, 0x41, 0x00, 0x22, 0x00, 0x3A, 0x00, 0x2F, 0x00, 0x66, 0x00, 0x0E, -/* 000194F0 */ 0x00, 0x4C, 0x00, 0x1F, 0x00, 0x2A, 0x00, 0x23, 0x00, 0x4E, 0x00, 0x33, 0x00, 0x72, 0x00, 0x00, -/* 00019500 */ 0xBF, 0x5C, 0x18, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0xBB, 0x03, 0x23, 0xA2, 0x41, 0xC1, 0x00, -/* 00019510 */ 0xFE, 0x05, 0x04, 0x47, 0xFE, 0x64, 0xA5, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, 0x64, -/* 00019520 */ 0xA5, 0xFE, 0x9B, 0x06, 0xFE, 0x9B, 0x06, 0x01, 0x0B, 0x1E, 0x26, 0x07, 0xC9, 0xB6, 0x03, 0x0E, -/* 00019530 */ 0x05, 0x09, 0x18, 0x18, 0x18, 0x18, 0x25, 0x08, 0x06, 0xFE, 0x10, 0x04, 0x06, 0xFE, 0xAD, 0x03, -/* 00019540 */ 0x06, 0xFE, 0x11, 0x04, 0x06, 0xFE, 0x12, 0x04, 0x06, 0xFE, 0x00, 0x04, 0x05, 0xFE, 0xBC, 0x03, -/* 00019550 */ 0x05, 0xFE, 0xFF, 0x03, 0x06, 0xFE, 0x13, 0x04, 0x06, 0xFE, 0xC2, 0x03, 0x06, 0xFE, 0x14, 0x04, -/* 00019560 */ 0x06, 0xFE, 0x2D, 0x03, 0x06, 0xFE, 0x2E, 0x03, 0x06, 0xFE, 0x2F, 0x03, 0x06, 0xFE, 0xB0, 0x03, -/* 00019570 */ 0x06, 0xFE, 0xB2, 0x03, 0x06, 0xFE, 0xB1, 0x03, 0x07, 0x06, 0xFE, 0x15, 0x04, 0x06, 0xFE, 0xC1, -/* 00019580 */ 0x03, 0x06, 0xFE, 0x16, 0x04, 0x06, 0xFE, 0x28, 0x03, 0x06, 0xFE, 0x29, 0x03, 0x06, 0xFE, 0x2A, -/* 00019590 */ 0x03, 0x06, 0xFE, 0x2B, 0x03, 0x06, 0xFE, 0x17, 0x04, 0x0C, 0x0B, 0xFE, 0x35, 0x03, 0x4F, 0x21, -/* 000195A0 */ 0x4F, 0x22, 0x4F, 0x23, 0x4F, 0x24, 0x8D, 0x02, 0x11, 0x26, 0x00, 0x00, 0x4B, 0x26, 0x07, 0x02, -/* 000195B0 */ 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x1F, 0x00, 0x00, 0xEE, 0x02, 0x26, 0x26, 0x00, 0x00, 0x47, -/* 000195C0 */ 0x21, 0x26, 0xA6, 0x26, 0x14, 0x03, 0x00, 0x20, 0x26, 0x09, 0x22, 0x00, 0x8D, 0x03, 0x37, 0x28, -/* 000195D0 */ 0x01, 0x00, 0x4B, 0x28, 0x6B, 0x27, 0x28, 0x00, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x28, 0xF2, 0x01, -/* 000195E0 */ 0x27, 0x27, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x26, 0x27, 0x09, 0x22, 0x00, 0x8D, 0x03, -/* 000195F0 */ 0x24, 0x28, 0x02, 0x00, 0x6B, 0x27, 0x28, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x28, 0x5B, 0x01, -/* 00019600 */ 0x20, 0x02, 0x00, 0xF2, 0x02, 0x27, 0x27, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x47, 0x26, 0x27, -/* 00019610 */ 0x47, 0x20, 0x26, 0x47, 0x26, 0x1E, 0x8D, 0x02, 0x02, 0x27, 0x03, 0x00, 0x4B, 0x27, 0x07, 0x06, -/* 00019620 */ 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x20, 0x03, 0x00, 0x5B, 0x02, 0x03, 0x03, 0x00, 0x5B, 0x03, -/* 00019630 */ 0x04, 0x03, 0x00, 0xCD, 0x28, 0x02, 0x00, 0x00, 0x9F, 0x00, 0x05, 0x28, 0x9F, 0x01, 0x06, 0x28, -/* 00019640 */ 0x5B, 0x04, 0x28, 0x03, 0x00, 0x5B, 0x05, 0x05, 0x03, 0x00, 0xEE, 0x06, 0x27, 0x27, 0x03, 0x00, -/* 00019650 */ 0x75, 0x27, 0x26, 0x02, 0x8D, 0x03, 0x37, 0x27, 0x01, 0x00, 0x4B, 0x27, 0x6B, 0x26, 0x27, 0x03, -/* 00019660 */ 0x07, 0x01, 0x00, 0x5A, 0x00, 0x27, 0xF2, 0x01, 0x26, 0x26, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, -/* 00019670 */ 0x47, 0x22, 0x26, 0x47, 0x26, 0x22, 0x8D, 0x02, 0x02, 0x27, 0x03, 0x00, 0x4B, 0x27, 0x07, 0x06, -/* 00019680 */ 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x20, 0x05, 0x00, 0x5B, 0x02, 0x07, 0x05, 0x00, 0x5B, 0x03, -/* 00019690 */ 0x04, 0x05, 0x00, 0xCD, 0x28, 0x02, 0x01, 0x00, 0x9F, 0x00, 0x08, 0x28, 0x9F, 0x01, 0x09, 0x28, -/* 000196A0 */ 0x5B, 0x04, 0x28, 0x05, 0x00, 0x5B, 0x05, 0x09, 0x05, 0x00, 0xEE, 0x06, 0x27, 0x27, 0x05, 0x00, -/* 000196B0 */ 0x75, 0x27, 0x26, 0x04, 0x8D, 0x02, 0x02, 0x26, 0x03, 0x00, 0x4B, 0x26, 0x07, 0x06, 0x00, 0x5A, -/* 000196C0 */ 0x00, 0x02, 0x5B, 0x01, 0x20, 0x06, 0x00, 0x5B, 0x02, 0x0A, 0x06, 0x00, 0x5B, 0x03, 0x0B, 0x06, -/* 000196D0 */ 0x00, 0xA6, 0x27, 0x5B, 0x04, 0x27, 0x06, 0x00, 0xA6, 0x27, 0x5B, 0x05, 0x27, 0x06, 0x00, 0xEE, -/* 000196E0 */ 0x06, 0x26, 0x26, 0x06, 0x00, 0x47, 0x23, 0x26, 0xA6, 0x26, 0x14, 0x03, 0x00, 0x23, 0x26, 0x09, -/* 000196F0 */ 0x06, 0x00, 0x47, 0x26, 0x23, 0x09, 0x22, 0x00, 0x8D, 0x03, 0x24, 0x28, 0x02, 0x00, 0x6B, 0x27, -/* 00019700 */ 0x28, 0x05, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x28, 0x5B, 0x01, 0x23, 0x07, 0x00, 0xF2, 0x02, 0x27, -/* 00019710 */ 0x27, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x47, 0x26, 0x27, 0x75, 0x26, 0x22, 0x06, 0x47, 0x26, -/* 00019720 */ 0x22, 0x8D, 0x02, 0x02, 0x27, 0x03, 0x00, 0x4B, 0x27, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x02, 0x5B, -/* 00019730 */ 0x01, 0x20, 0x08, 0x00, 0x5B, 0x02, 0x0C, 0x08, 0x00, 0x5B, 0x03, 0x04, 0x08, 0x00, 0xCD, 0x28, -/* 00019740 */ 0x03, 0x02, 0x00, 0x9F, 0x00, 0x0D, 0x28, 0x9F, 0x01, 0x0E, 0x28, 0x9F, 0x02, 0x0F, 0x28, 0x5B, -/* 00019750 */ 0x04, 0x28, 0x08, 0x00, 0xA6, 0x28, 0x5B, 0x05, 0x28, 0x08, 0x00, 0xEE, 0x06, 0x27, 0x27, 0x08, -/* 00019760 */ 0x00, 0x75, 0x27, 0x26, 0x07, 0x8D, 0x02, 0x0B, 0x26, 0x04, 0x00, 0x4B, 0x26, 0x07, 0x05, 0x00, -/* 00019770 */ 0x5A, 0x00, 0x02, 0x8D, 0x03, 0x03, 0x27, 0x05, 0x00, 0x60, 0x27, 0x27, 0x08, 0x5B, 0x01, 0x27, -/* 00019780 */ 0x09, 0x00, 0x5B, 0x02, 0x21, 0x09, 0x00, 0x5B, 0x03, 0x22, 0x09, 0x00, 0xCD, 0x27, 0x03, 0x03, -/* 00019790 */ 0x00, 0x9F, 0x00, 0x10, 0x27, 0x9F, 0x01, 0x11, 0x27, 0x9F, 0x02, 0x12, 0x27, 0x5B, 0x04, 0x27, -/* 000197A0 */ 0x09, 0x00, 0xEE, 0x05, 0x26, 0x26, 0x09, 0x00, 0x47, 0x24, 0x26, 0x60, 0x26, 0x24, 0x09, 0x75, -/* 000197B0 */ 0x26, 0x1E, 0x0A, 0x60, 0x26, 0x24, 0x0B, 0x14, 0x03, 0x00, 0x26, 0x13, 0x09, 0x06, 0x00, 0x47, -/* 000197C0 */ 0x26, 0x14, 0x09, 0x07, 0x00, 0x60, 0x27, 0x24, 0x0B, 0x47, 0x26, 0x27, 0x75, 0x26, 0x1E, 0x0C, -/* 000197D0 */ 0x60, 0x26, 0x24, 0x0D, 0x43, 0x26, 0x26, 0x15, 0x75, 0x26, 0x1E, 0x0E, 0x60, 0x26, 0x24, 0x0F, -/* 000197E0 */ 0x75, 0x26, 0x1E, 0x10, 0x47, 0x26, 0x1E, 0x8D, 0x03, 0x3D, 0x27, 0x06, 0x00, 0x4B, 0x27, 0x07, -/* 000197F0 */ 0x03, 0x00, 0x5A, 0x00, 0x02, 0x8D, 0x03, 0x3A, 0x28, 0x07, 0x00, 0x4B, 0x28, 0x5B, 0x01, 0x28, -/* 00019800 */ 0x0A, 0x00, 0x60, 0x28, 0x1E, 0x11, 0x5B, 0x02, 0x28, 0x0A, 0x00, 0xEE, 0x03, 0x27, 0x27, 0x0A, -/* 00019810 */ 0x00, 0x75, 0x27, 0x26, 0x12, 0x47, 0x26, 0x1E, 0x8D, 0x02, 0x02, 0x27, 0x03, 0x00, 0x4B, 0x27, -/* 00019820 */ 0x07, 0x06, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x20, 0x0B, 0x00, 0x5B, 0x02, 0x16, 0x0B, 0x00, -/* 00019830 */ 0x5B, 0x03, 0x04, 0x0B, 0x00, 0xCD, 0x28, 0x04, 0x04, 0x00, 0x9F, 0x00, 0x17, 0x28, 0x9F, 0x01, -/* 00019840 */ 0x18, 0x28, 0x9F, 0x02, 0x19, 0x28, 0x9F, 0x03, 0x1A, 0x28, 0x5B, 0x04, 0x28, 0x0B, 0x00, 0x5B, -/* 00019850 */ 0x05, 0x1A, 0x0B, 0x00, 0xEE, 0x06, 0x27, 0x27, 0x0B, 0x00, 0x75, 0x27, 0x26, 0x13, 0x47, 0x26, -/* 00019860 */ 0x1E, 0x8D, 0x03, 0x3D, 0x27, 0x06, 0x00, 0x4B, 0x27, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x8D, -/* 00019870 */ 0x03, 0x39, 0x28, 0x08, 0x00, 0x4B, 0x28, 0x5B, 0x01, 0x28, 0x0C, 0x00, 0x60, 0x28, 0x1E, 0x14, -/* 00019880 */ 0x5B, 0x02, 0x28, 0x0C, 0x00, 0xEE, 0x03, 0x27, 0x27, 0x0C, 0x00, 0x75, 0x27, 0x26, 0x15, 0x47, -/* 00019890 */ 0x26, 0x1E, 0x8D, 0x02, 0x02, 0x27, 0x03, 0x00, 0x4B, 0x27, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x02, -/* 000198A0 */ 0x5B, 0x01, 0x20, 0x0D, 0x00, 0x5B, 0x02, 0x1B, 0x0D, 0x00, 0x5B, 0x03, 0x0B, 0x0D, 0x00, 0xA6, -/* 000198B0 */ 0x28, 0x5B, 0x04, 0x28, 0x0D, 0x00, 0x5B, 0x05, 0x1C, 0x0D, 0x00, 0xEE, 0x06, 0x27, 0x27, 0x0D, -/* 000198C0 */ 0x00, 0x75, 0x27, 0x26, 0x16, 0x75, 0x1D, 0x1E, 0x17, 0x47, 0x00, 0x1E, 0x09, 0x02, 0x00, 0xA6, -/* 000198D0 */ 0x00, 0x24, 0x00, 0x61, 0xFE, 0x36, 0x03, 0xFE, 0x10, 0x04, 0x61, 0xFE, 0x18, 0x04, 0xFE, 0x37, -/* 000198E0 */ 0x03, 0xFE, 0xB2, 0x03, 0xFE, 0xB1, 0x03, 0xFE, 0xDA, 0x01, 0xFE, 0xF7, 0x01, 0xFE, 0xF7, 0x01, -/* 000198F0 */ 0xFE, 0xB0, 0x03, 0xFE, 0x19, 0x04, 0xFE, 0xB2, 0x03, 0xFE, 0x20, 0x02, 0xFE, 0xB1, 0x03, 0xFE, -/* 00019900 */ 0x14, 0x04, 0xFE, 0x14, 0x04, 0xFE, 0x23, 0x02, 0xFE, 0x21, 0x02, 0xFE, 0x21, 0x02, 0xFE, 0x22, -/* 00019910 */ 0x02, 0xFE, 0x1F, 0x02, 0xFE, 0x1A, 0x04, 0xFE, 0x98, 0xA5, 0x14, 0x08, 0x00, 0x00, 0x00, 0x1C, -/* 00019920 */ 0x00, 0x46, 0x00, 0x51, 0x00, 0x58, 0x00, 0x41, 0x00, 0x12, 0x01, 0x1F, 0x00, 0x24, 0x00, 0x41, -/* 00019930 */ 0x00, 0x6D, 0x00, 0x34, 0x00, 0x55, 0x00, 0x36, 0x00, 0x44, 0x00, 0x47, 0x00, 0x69, 0x00, 0x46, -/* 00019940 */ 0x00, 0x74, 0x00, 0x08, 0x00, 0x28, 0x00, 0x1D, 0x00, 0x43, 0x00, 0x0C, 0x00, 0x30, 0x00, 0x08, -/* 00019950 */ 0x00, 0x27, 0x00, 0x31, 0x00, 0x55, 0x00, 0x49, 0x00, 0x82, 0x00, 0x31, 0x00, 0x5B, 0x00, 0x36, -/* 00019960 */ 0x00, 0x70, 0x00, 0x04, 0x00, 0x32, 0x00, 0x08, 0x00, 0x19, 0x00, 0x00, 0x3F, 0x5D, 0x08, 0xC1, -/* 00019970 */ 0x03, 0x8D, 0x05, 0x00, 0xFE, 0xA5, 0x03, 0x22, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x7B, 0x03, 0x44, -/* 00019980 */ 0xFE, 0x58, 0xA2, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x03, 0xFE, 0x58, 0xA2, 0xFE, 0x32, -/* 00019990 */ 0x02, 0xFE, 0x32, 0x02, 0x03, 0xFE, 0x02, 0x04, 0xFE, 0x03, 0x04, 0xFE, 0x04, 0x04, 0x09, 0x04, -/* 000199A0 */ 0x0A, 0x04, 0x26, 0x26, 0x02, 0x03, 0x03, 0x04, 0x04, 0x04, 0x04, 0x07, 0x08, 0x09, 0x07, 0x08, -/* 000199B0 */ 0x9C, 0x94, 0x02, 0x05, 0x94, 0x03, 0x06, 0x94, 0x02, 0x05, 0x15, 0x05, 0x00, 0x06, 0x03, 0x01, -/* 000199C0 */ 0x36, 0x01, 0x03, 0x02, 0x4F, 0x0A, 0x94, 0x04, 0x0A, 0x8D, 0x02, 0x37, 0x0B, 0x00, 0x00, 0x4B, -/* 000199D0 */ 0x0B, 0x6B, 0x0A, 0x0B, 0x00, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x0B, 0xF2, 0x01, 0x0A, 0x0A, 0x00, -/* 000199E0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x94, 0x04, 0x0A, 0x8D, 0x02, 0x37, 0x0B, 0x00, 0x00, 0x4B, 0x0B, -/* 000199F0 */ 0x6B, 0x0A, 0x0B, 0x01, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0B, 0x5B, 0x01, 0x04, 0x01, 0x00, 0xD3, -/* 00019A00 */ 0x00, 0x0C, 0x5B, 0x02, 0x0C, 0x01, 0x00, 0xF2, 0x03, 0xFF, 0x0A, 0x01, 0x00, 0x00, 0x00, 0x01, -/* 00019A10 */ 0x00, 0x8D, 0x02, 0x37, 0x0B, 0x00, 0x00, 0x4B, 0x0B, 0x6B, 0x0A, 0x0B, 0x02, 0x07, 0x03, 0x00, -/* 00019A20 */ 0x5A, 0x00, 0x0B, 0x91, 0x04, 0x0C, 0x01, 0x00, 0x5B, 0x01, 0x0C, 0x02, 0x00, 0x8D, 0x02, 0x03, -/* 00019A30 */ 0x0C, 0x02, 0x00, 0x60, 0x0C, 0x0C, 0x03, 0x5B, 0x02, 0x0C, 0x02, 0x00, 0xF2, 0x03, 0x00, 0x0A, -/* 00019A40 */ 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x61, 0x86, 0xFE, -/* 00019A50 */ 0x86, 0x01, 0xFE, 0x80, 0x02, 0xFE, 0x77, 0xA2, 0x05, 0x09, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x17, -/* 00019A60 */ 0x00, 0x1F, 0x00, 0x25, 0x00, 0x29, 0x00, 0x94, 0x01, 0x3A, 0x00, 0x42, 0x00, 0x00, 0x72, 0x9A, -/* 00019A70 */ 0x01, 0x00, 0xBF, 0x5C, 0x0E, 0x01, 0x00, 0x88, 0x01, 0x00, 0xFE, 0xA7, 0x03, 0x19, 0xA2, 0x41, -/* 00019A80 */ 0xD1, 0x00, 0x45, 0xFE, 0xC4, 0xA2, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0xC4, 0xA2, -/* 00019A90 */ 0xFE, 0x77, 0x01, 0xFE, 0x77, 0x01, 0x41, 0x04, 0x06, 0x08, 0x04, 0x1F, 0x1F, 0x03, 0x01, 0x01, -/* 00019AA0 */ 0x01, 0x03, 0x07, 0x07, 0x08, 0x0B, 0x06, 0xFE, 0xF5, 0x03, 0x77, 0x8D, 0x01, 0x03, 0x08, 0x00, -/* 00019AB0 */ 0x00, 0x4B, 0x08, 0x15, 0x03, 0x00, 0x08, 0x02, 0x09, 0x33, 0x00, 0x8D, 0x01, 0x03, 0x08, 0x00, -/* 00019AC0 */ 0x00, 0x4B, 0x08, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x03, 0x5B, 0x01, 0x06, 0x00, 0x00, 0x8D, 0x01, -/* 00019AD0 */ 0x04, 0x09, 0x01, 0x00, 0x4B, 0x09, 0x5B, 0x02, 0x09, 0x00, 0x00, 0xEE, 0x03, 0x08, 0x08, 0x00, -/* 00019AE0 */ 0x00, 0x14, 0x03, 0x00, 0x08, 0x04, 0x09, 0x05, 0x00, 0xA6, 0x00, 0x09, 0x32, 0x00, 0x8D, 0x01, -/* 00019AF0 */ 0x02, 0x08, 0x02, 0x00, 0x4B, 0x08, 0x2D, 0x08, 0x08, 0x06, 0x15, 0x03, 0x00, 0x08, 0x05, 0x09, -/* 00019B00 */ 0x1C, 0x00, 0x8D, 0x01, 0x04, 0x08, 0x01, 0x00, 0x4B, 0x08, 0x8D, 0x01, 0x02, 0x09, 0x02, 0x00, -/* 00019B10 */ 0x4B, 0x09, 0x96, 0x09, 0x09, 0x06, 0x00, 0x00, 0x9B, 0x09, 0x08, 0x06, 0x00, 0x00, 0xA6, 0x00, -/* 00019B20 */ 0x24, 0x00, 0xFE, 0xE2, 0xA2, 0x05, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0xB9, 0x00, 0x05, 0x00, -/* 00019B30 */ 0x23, 0x00, 0x14, 0x00, 0x41, 0x00, 0x1E, 0x00, 0x3B, 0x00, 0x00, 0xBF, 0x5C, 0x08, 0x01, 0x00, -/* 00019B40 */ 0x88, 0x01, 0x00, 0xFE, 0x8B, 0x03, 0x55, 0xA2, 0x41, 0xD1, 0x00, 0x43, 0xFE, 0x62, 0x9D, 0xFF, -/* 00019B50 */ 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x62, 0x9D, 0x7F, 0x7F, 0x01, 0x05, 0x03, 0x06, 0x05, -/* 00019B60 */ 0x10, 0x10, 0x03, 0x01, 0x02, 0x05, 0x08, 0x37, 0x59, 0x06, 0xB2, 0x04, 0x06, 0x8D, 0x02, 0x18, -/* 00019B70 */ 0x06, 0x00, 0x00, 0x4B, 0x06, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x04, 0x00, 0x00, -/* 00019B80 */ 0x8D, 0x01, 0x02, 0x07, 0x01, 0x00, 0x4B, 0x07, 0x5B, 0x02, 0x07, 0x00, 0x00, 0x5B, 0x03, 0x03, -/* 00019B90 */ 0x00, 0x00, 0xEE, 0x04, 0x00, 0x06, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, -/* 00019BA0 */ 0x83, 0x9D, 0x02, 0x05, 0x00, 0x00, 0x00, 0x30, 0x00, 0x5D, 0x00, 0x00, 0xBF, 0x5C, 0x08, 0xC1, -/* 00019BB0 */ 0x03, 0x88, 0x01, 0x00, 0xFE, 0x73, 0x03, 0x30, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x7A, 0x03, 0x42, -/* 00019BC0 */ 0xFE, 0x9D, 0x97, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, 0x9D, 0x97, 0xFE, 0x8E, 0x01, -/* 00019BD0 */ 0xFE, 0x8E, 0x01, 0x01, 0x07, 0x05, 0x0A, 0x03, 0x26, 0x25, 0x02, 0x04, 0x02, 0x03, 0x03, 0x03, -/* 00019BE0 */ 0x03, 0x09, 0x07, 0x05, 0xFE, 0x3C, 0x03, 0x08, 0xA1, 0x4F, 0x08, 0x14, 0x0A, 0x00, 0x05, 0x02, -/* 00019BF0 */ 0xA6, 0x0A, 0x14, 0x03, 0x00, 0x05, 0x0A, 0x09, 0x1F, 0x00, 0x8D, 0x02, 0x03, 0x0B, 0x00, 0x00, -/* 00019C00 */ 0x6B, 0x0A, 0x0B, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0B, 0x5B, 0x01, 0x06, 0x00, 0x00, 0xF2, -/* 00019C10 */ 0x02, 0xFF, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8D, 0x02, 0x03, 0x0B, 0x00, 0x00, 0x6B, -/* 00019C20 */ 0x0A, 0x0B, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0B, 0x5B, 0x01, 0x05, 0x01, 0x00, 0xF2, 0x02, -/* 00019C30 */ 0x0A, 0x0A, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x08, 0x0A, 0x0E, 0x0C, 0x00, 0x08, 0x60, -/* 00019C40 */ 0x0A, 0x08, 0x02, 0x15, 0x03, 0x00, 0x0A, 0x03, 0x09, 0x1F, 0x00, 0x8D, 0x02, 0x03, 0x0B, 0x00, -/* 00019C50 */ 0x00, 0x6B, 0x0A, 0x0B, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0B, 0x5B, 0x01, 0x06, 0x02, 0x00, -/* 00019C60 */ 0xF2, 0x02, 0xFF, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x8D, 0x01, 0x11, 0x0A, 0x01, 0x00, -/* 00019C70 */ 0x4B, 0x0A, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x07, 0x03, 0x00, 0xEE, 0x02, 0x00, -/* 00019C80 */ 0x0A, 0x03, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x8C, 0x02, 0xFE, 0xEF, 0x01, -/* 00019C90 */ 0xFE, 0xF6, 0x01, 0xFE, 0xCE, 0x97, 0x07, 0x02, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x37, 0x00, 0x1F, -/* 00019CA0 */ 0x00, 0x40, 0x00, 0x22, 0x00, 0x3A, 0x00, 0x10, 0x00, 0x3F, 0x00, 0x1F, 0x00, 0x40, 0x00, 0x1E, -/* 00019CB0 */ 0x00, 0x2C, 0x00, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x66, 0x03, 0x2F, -/* 00019CC0 */ 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x79, 0x03, 0x41, 0xFE, 0x81, 0x95, 0xFF, 0x00, 0x10, 0x01, 0x00, -/* 00019CD0 */ 0x06, 0x06, 0xFE, 0x81, 0x95, 0xFE, 0xEA, 0x01, 0xFE, 0xEA, 0x01, 0x01, 0x09, 0x05, 0x0C, 0x08, -/* 00019CE0 */ 0x2E, 0x2D, 0x02, 0x05, 0x03, 0x03, 0x03, 0x03, 0x03, 0x0B, 0x07, 0x05, 0xFE, 0x3C, 0x03, 0x08, -/* 00019CF0 */ 0xC4, 0x4F, 0x0A, 0x14, 0x0A, 0x00, 0x05, 0x02, 0xA6, 0x0C, 0x14, 0x03, 0x00, 0x05, 0x0C, 0x09, -/* 00019D00 */ 0x1F, 0x00, 0x8D, 0x02, 0x03, 0x0D, 0x00, 0x00, 0x6B, 0x0C, 0x0D, 0x00, 0x07, 0x02, 0x00, 0x5A, -/* 00019D10 */ 0x00, 0x0D, 0x5B, 0x01, 0x06, 0x00, 0x00, 0xF2, 0x02, 0xFF, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 00019D20 */ 0x00, 0x8D, 0x02, 0x03, 0x0D, 0x00, 0x00, 0x6B, 0x0C, 0x0D, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 00019D30 */ 0x0D, 0x5B, 0x01, 0x05, 0x01, 0x00, 0xF2, 0x02, 0x0C, 0x0C, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, -/* 00019D40 */ 0x47, 0x0A, 0x0C, 0x0E, 0x0C, 0x00, 0x0A, 0x60, 0x0C, 0x0A, 0x02, 0x15, 0x03, 0x00, 0x0C, 0x03, -/* 00019D50 */ 0x09, 0x1F, 0x00, 0x8D, 0x02, 0x03, 0x0D, 0x00, 0x00, 0x6B, 0x0C, 0x0D, 0x00, 0x07, 0x02, 0x00, -/* 00019D60 */ 0x5A, 0x00, 0x0D, 0x5B, 0x01, 0x06, 0x02, 0x00, 0xF2, 0x02, 0xFF, 0x0C, 0x00, 0x00, 0x00, 0x00, -/* 00019D70 */ 0x02, 0x00, 0x8D, 0x01, 0x15, 0x0C, 0x01, 0x00, 0x4B, 0x0C, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x04, -/* 00019D80 */ 0x5B, 0x01, 0x07, 0x03, 0x00, 0x8D, 0x01, 0x11, 0x0D, 0x02, 0x00, 0x4B, 0x0D, 0x07, 0x02, 0x00, -/* 00019D90 */ 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x08, 0x04, 0x00, 0xEE, 0x02, 0x0D, 0x0D, 0x04, 0x00, 0x5B, 0x02, -/* 00019DA0 */ 0x0D, 0x03, 0x00, 0x5B, 0x03, 0x09, 0x03, 0x00, 0xEE, 0x04, 0x00, 0x0C, 0x03, 0x00, 0x09, 0x02, -/* 00019DB0 */ 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x8C, 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0xF6, 0x01, 0xFE, 0xD7, -/* 00019DC0 */ 0x95, 0x07, 0x02, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x37, 0x00, 0x1F, 0x00, 0x40, 0x00, 0x22, 0x00, -/* 00019DD0 */ 0x3A, 0x00, 0x10, 0x00, 0x3F, 0x00, 0x1F, 0x00, 0x40, 0x00, 0x41, 0x00, 0x63, 0x00, 0x00, 0xBF, -/* 00019DE0 */ 0x7C, 0x19, 0xC3, 0x53, 0xA8, 0x29, 0x00, 0xFE, 0x4B, 0x03, 0x1D, 0xA2, 0x41, 0xC1, 0x00, 0xFE, -/* 00019DF0 */ 0x77, 0x03, 0x40, 0xFE, 0x0A, 0x90, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, 0x0A, 0x90, -/* 00019E00 */ 0xFE, 0xE8, 0x03, 0xFE, 0xE8, 0x03, 0x01, 0x0C, 0x0F, 0x16, 0x0A, 0x5E, 0x56, 0x1A, 0x02, 0x01, -/* 00019E10 */ 0x07, 0x01, 0x05, 0x01, 0x07, 0x07, 0x07, 0x07, 0x02, 0x01, 0x15, 0x16, 0xC8, 0xFE, 0x41, 0x01, -/* 00019E20 */ 0x05, 0xFE, 0xFF, 0x03, 0x06, 0xFE, 0x00, 0x04, 0x06, 0xFE, 0xAD, 0x03, 0x05, 0xFE, 0xBC, 0x03, -/* 00019E30 */ 0x08, 0x01, 0x00, 0x01, 0x01, 0x06, 0xFE, 0x44, 0x03, 0x0C, 0x06, 0xFE, 0x42, 0x03, 0x07, 0x06, -/* 00019E40 */ 0xFE, 0x01, 0x04, 0x06, 0xFE, 0x43, 0x03, 0xFE, 0x8F, 0x01, 0x4F, 0x12, 0x4F, 0x13, 0x4F, 0x14, -/* 00019E50 */ 0xA6, 0x17, 0x14, 0x03, 0x00, 0x11, 0x17, 0x09, 0x06, 0x00, 0x47, 0x17, 0x02, 0x09, 0x5C, 0x00, -/* 00019E60 */ 0x8D, 0x01, 0x02, 0x18, 0x00, 0x00, 0x4B, 0x18, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x06, 0x8D, 0x02, -/* 00019E70 */ 0x24, 0x1A, 0x01, 0x00, 0x6B, 0x19, 0x1A, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x1A, 0x5B, 0x01, -/* 00019E80 */ 0x11, 0x01, 0x00, 0xF2, 0x02, 0x19, 0x19, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x5B, 0x01, 0x19, -/* 00019E90 */ 0x00, 0x00, 0x5B, 0x02, 0x03, 0x00, 0x00, 0x5B, 0x03, 0x04, 0x00, 0x00, 0xCD, 0x19, 0x02, 0x00, -/* 00019EA0 */ 0x00, 0x9F, 0x00, 0x02, 0x19, 0x9F, 0x01, 0x05, 0x19, 0x5B, 0x04, 0x19, 0x00, 0x00, 0x5B, 0x05, -/* 00019EB0 */ 0x02, 0x00, 0x00, 0xEE, 0x06, 0x18, 0x18, 0x00, 0x00, 0x47, 0x17, 0x18, 0x47, 0x12, 0x17, 0x14, -/* 00019EC0 */ 0x03, 0x00, 0x12, 0x02, 0x09, 0x24, 0x00, 0x8D, 0x01, 0x13, 0x18, 0x02, 0x00, 0x4B, 0x18, 0x07, -/* 00019ED0 */ 0x03, 0x00, 0x5A, 0x00, 0x06, 0x5B, 0x01, 0x0F, 0x02, 0x00, 0x5B, 0x02, 0x10, 0x02, 0x00, 0xEE, -/* 00019EE0 */ 0x03, 0x18, 0x18, 0x02, 0x00, 0x47, 0x17, 0x18, 0x09, 0x21, 0x00, 0x8D, 0x01, 0x12, 0x18, 0x03, -/* 00019EF0 */ 0x00, 0x4B, 0x18, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x06, 0x5B, 0x01, 0x0F, 0x03, 0x00, 0x5B, 0x02, -/* 00019F00 */ 0x10, 0x03, 0x00, 0xEE, 0x03, 0x18, 0x18, 0x03, 0x00, 0x47, 0x17, 0x18, 0x47, 0x13, 0x17, 0x47, -/* 00019F10 */ 0x14, 0x07, 0xEB, 0x00, 0xEC, 0x00, 0xA5, 0x17, 0x13, 0x01, 0x00, 0x00, 0x12, 0x03, 0x00, 0x14, -/* 00019F20 */ 0x17, 0x09, 0x65, 0x00, 0x8D, 0x02, 0x37, 0x18, 0x04, 0x00, 0x4B, 0x18, 0x6B, 0x17, 0x18, 0x02, -/* 00019F30 */ 0x07, 0x04, 0x00, 0x5A, 0x00, 0x18, 0x5B, 0x01, 0x13, 0x04, 0x00, 0x8D, 0x02, 0x24, 0x1A, 0x01, -/* 00019F40 */ 0x00, 0x6B, 0x19, 0x1A, 0x03, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x1A, 0x5B, 0x01, 0x14, 0x05, 0x00, -/* 00019F50 */ 0xF2, 0x02, 0x19, 0x19, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x5B, 0x02, 0x19, 0x04, 0x00, 0xCB, -/* 00019F60 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x79, 0x0A, 0x19, 0x04, -/* 00019F70 */ 0x79, 0x0A, 0x19, 0x05, 0x5B, 0x03, 0x19, 0x04, 0x00, 0xF2, 0x04, 0xFF, 0x17, 0x02, 0x00, 0x00, -/* 00019F80 */ 0x00, 0x04, 0x00, 0x28, 0x14, 0x14, 0x09, 0x8B, 0xFF, 0xED, 0x00, 0x8D, 0x02, 0x37, 0x18, 0x04, -/* 00019F90 */ 0x00, 0x4B, 0x18, 0x6B, 0x17, 0x18, 0x02, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x18, 0x5B, 0x01, 0x13, -/* 00019FA0 */ 0x06, 0x00, 0x5B, 0x02, 0x0D, 0x06, 0x00, 0xCB, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, -/* 00019FB0 */ 0x19, 0x00, 0x00, 0x00, 0x79, 0x0A, 0x19, 0x05, 0x79, 0x0A, 0x19, 0x04, 0x79, 0x0A, 0x19, 0x06, -/* 00019FC0 */ 0x5B, 0x03, 0x19, 0x06, 0x00, 0xF2, 0x04, 0xFF, 0x17, 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, 0x47, -/* 00019FD0 */ 0x00, 0x13, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x02, 0x24, 0x00, 0x10, 0x00, 0x00, 0x00, -/* 00019FE0 */ 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, -/* 00019FF0 */ 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 0001A000 */ 0x81, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0xFE, 0x36, 0x03, 0xC1, 0xFE, 0x88, 0x01, 0xFE, -/* 0001A010 */ 0x37, 0x03, 0xFE, 0x81, 0x01, 0xFE, 0x82, 0x01, 0xFE, 0x80, 0x01, 0xFE, 0x4C, 0x90, 0x09, 0x06, -/* 0001A020 */ 0x00, 0x00, 0x00, 0x6F, 0x00, 0xBB, 0x00, 0x50, 0x00, 0xD4, 0x00, 0x07, 0x00, 0x0B, 0x00, 0x0E, -/* 0001A030 */ 0x00, 0x30, 0x00, 0x5F, 0x00, 0xED, 0xFF, 0x08, 0x00, 0x30, 0x01, 0x44, 0x00, 0xA1, 0x00, 0x08, -/* 0001A040 */ 0x00, 0x1D, 0x00, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x13, 0x88, 0x21, 0x00, 0xFE, 0x2C, 0x03, 0x28, -/* 0001A050 */ 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x76, 0x03, 0x3F, 0xFE, 0xA1, 0x89, 0xFF, 0x00, 0x10, 0x01, 0x00, -/* 0001A060 */ 0x05, 0x05, 0xFE, 0xA1, 0x89, 0xFE, 0xB9, 0x04, 0xFE, 0xB9, 0x04, 0x41, 0x0D, 0x0D, 0x18, 0x07, -/* 0001A070 */ 0x5B, 0x53, 0x02, 0x06, 0x02, 0x0A, 0x0A, 0x0A, 0x0A, 0x02, 0x17, 0x06, 0xFE, 0xFA, 0x03, 0x01, -/* 0001A080 */ 0x01, 0x01, 0x15, 0x08, 0x06, 0xFE, 0xFB, 0x03, 0x01, 0x00, 0x01, 0x14, 0x06, 0xFE, 0xFC, 0x03, -/* 0001A090 */ 0x06, 0xFE, 0xFD, 0x03, 0x07, 0x06, 0xFE, 0xFE, 0x03, 0xFE, 0x7E, 0x01, 0x4F, 0x11, 0x4F, 0x12, -/* 0001A0A0 */ 0x4F, 0x13, 0x4F, 0x14, 0x4F, 0x15, 0x4F, 0x16, 0x8D, 0x01, 0x0C, 0x18, 0x00, 0x00, 0x4B, 0x18, -/* 0001A0B0 */ 0x07, 0x06, 0x00, 0x5A, 0x00, 0x05, 0x5B, 0x01, 0x0E, 0x00, 0x00, 0x5B, 0x02, 0x02, 0x00, 0x00, -/* 0001A0C0 */ 0x5B, 0x03, 0x03, 0x00, 0x00, 0x5B, 0x04, 0x04, 0x00, 0x00, 0x5B, 0x05, 0x03, 0x00, 0x00, 0xEE, -/* 0001A0D0 */ 0x06, 0x18, 0x18, 0x00, 0x00, 0x47, 0x11, 0x18, 0x8D, 0x01, 0x0C, 0x18, 0x00, 0x00, 0x4B, 0x18, -/* 0001A0E0 */ 0x07, 0x06, 0x00, 0x5A, 0x00, 0x05, 0x5B, 0x01, 0x0E, 0x01, 0x00, 0x5B, 0x02, 0x06, 0x01, 0x00, -/* 0001A0F0 */ 0x5B, 0x03, 0x07, 0x01, 0x00, 0x5B, 0x04, 0x08, 0x01, 0x00, 0x5B, 0x05, 0x0F, 0x01, 0x00, 0xEE, -/* 0001A100 */ 0x06, 0x18, 0x18, 0x01, 0x00, 0x47, 0x12, 0x18, 0x8D, 0x02, 0x37, 0x19, 0x01, 0x00, 0x4B, 0x19, -/* 0001A110 */ 0x6B, 0x18, 0x19, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x19, 0x5B, 0x01, 0x12, 0x02, 0x00, 0x5B, -/* 0001A120 */ 0x02, 0x10, 0x02, 0x00, 0xF2, 0x03, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x47, 0x13, -/* 0001A130 */ 0x18, 0x8D, 0x01, 0x0C, 0x18, 0x00, 0x00, 0x4B, 0x18, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x05, 0x5B, -/* 0001A140 */ 0x01, 0x0E, 0x03, 0x00, 0x5B, 0x02, 0x09, 0x03, 0x00, 0x5B, 0x03, 0x12, 0x03, 0x00, 0x5B, 0x04, -/* 0001A150 */ 0x08, 0x03, 0x00, 0x5B, 0x05, 0x13, 0x03, 0x00, 0xEE, 0x06, 0x18, 0x18, 0x03, 0x00, 0x47, 0x14, -/* 0001A160 */ 0x18, 0x75, 0x11, 0x0D, 0x01, 0x75, 0x12, 0x0D, 0x02, 0x75, 0x14, 0x0D, 0x03, 0x60, 0x18, 0x0E, -/* 0001A170 */ 0x04, 0x47, 0x15, 0x18, 0x60, 0x18, 0x0E, 0x05, 0x47, 0x16, 0x18, 0xA6, 0x18, 0x15, 0x0A, 0x00, -/* 0001A180 */ 0x15, 0x18, 0xA6, 0x18, 0x15, 0x03, 0x00, 0x16, 0x18, 0x09, 0x8A, 0x00, 0x8D, 0x01, 0x0C, 0x18, -/* 0001A190 */ 0x00, 0x00, 0x4B, 0x18, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x05, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 0001A1A0 */ 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x79, 0x15, 0x19, 0x06, 0x5B, 0x01, 0x19, 0x04, 0x00, -/* 0001A1B0 */ 0x5B, 0x02, 0x0A, 0x04, 0x00, 0x5B, 0x03, 0x03, 0x04, 0x00, 0x5B, 0x04, 0x04, 0x04, 0x00, 0x5B, -/* 0001A1C0 */ 0x05, 0x03, 0x04, 0x00, 0xEE, 0x06, 0x18, 0x18, 0x04, 0x00, 0x47, 0x15, 0x18, 0x8D, 0x01, 0x0C, -/* 0001A1D0 */ 0x18, 0x00, 0x00, 0x4B, 0x18, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x05, 0xCB, 0x0C, 0x00, 0x00, 0x00, -/* 0001A1E0 */ 0x01, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x79, 0x16, 0x19, 0x07, 0x5B, 0x01, 0x19, 0x05, -/* 0001A1F0 */ 0x00, 0x5B, 0x02, 0x0C, 0x05, 0x00, 0x5B, 0x03, 0x15, 0x05, 0x00, 0x5B, 0x04, 0x04, 0x05, 0x00, -/* 0001A200 */ 0x5B, 0x05, 0x04, 0x05, 0x00, 0xEE, 0x06, 0x18, 0x18, 0x05, 0x00, 0x47, 0x16, 0x18, 0x75, 0x15, -/* 0001A210 */ 0x0D, 0x08, 0x75, 0x16, 0x0D, 0x09, 0xA6, 0x00, 0x24, 0x00, 0x02, 0x18, 0x00, 0x0C, 0x00, 0x00, -/* 0001A220 */ 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 0001A230 */ 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x02, 0x00, 0x00, 0xEE, 0xFE, 0x16, -/* 0001A240 */ 0x02, 0xFE, 0x15, 0x02, 0xFE, 0x13, 0x02, 0xFE, 0x17, 0x02, 0xFE, 0x14, 0x02, 0xFE, 0x17, 0x02, -/* 0001A250 */ 0xFE, 0x14, 0x02, 0xFE, 0x17, 0x02, 0xFE, 0x14, 0x02, 0xFE, 0xE1, 0x89, 0x0F, 0x0C, 0x00, 0x00, -/* 0001A260 */ 0x00, 0x30, 0x00, 0x51, 0x00, 0x30, 0x00, 0x5C, 0x00, 0x29, 0x00, 0x3C, 0x00, 0x30, 0x00, 0x65, -/* 0001A270 */ 0x00, 0x04, 0x00, 0x2D, 0x00, 0x04, 0x00, 0x2E, 0x00, 0x04, 0x00, 0x2F, 0x00, 0x07, 0x00, 0x35, -/* 0001A280 */ 0x00, 0x07, 0x00, 0x35, 0x00, 0x11, 0x00, 0xEA, 0x00, 0x41, 0x00, 0x6E, 0x00, 0x41, 0x00, 0x72, -/* 0001A290 */ 0x00, 0x04, 0x00, 0x35, 0x00, 0x06, 0x00, 0x37, 0x00, 0x00, 0x3F, 0x5D, 0x18, 0xC1, 0x03, 0x8D, -/* 0001A2A0 */ 0x05, 0x00, 0xFE, 0x11, 0x03, 0x23, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x74, 0x03, 0x3D, 0xFE, 0x1B, -/* 0001A2B0 */ 0x85, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x1B, 0x85, 0xFE, 0x81, 0x01, 0xFE, -/* 0001A2C0 */ 0x81, 0x01, 0x02, 0xFE, 0xF8, 0x03, 0xFE, 0xF9, 0x03, 0x08, 0x02, 0x07, 0x04, 0x13, 0x13, 0x02, -/* 0001A2D0 */ 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x04, 0x05, 0x06, 0x45, 0x94, 0x02, 0x02, 0x4F, 0x07, -/* 0001A2E0 */ 0x94, 0x03, 0x07, 0xCD, 0x07, 0x00, 0x00, 0x00, 0x94, 0x03, 0x07, 0x8D, 0x02, 0x37, 0x08, 0x00, -/* 0001A2F0 */ 0x00, 0x4B, 0x08, 0x6B, 0x07, 0x08, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x08, 0x5B, 0x01, 0x03, -/* 0001A300 */ 0x00, 0x00, 0xD3, 0x00, 0x09, 0x5B, 0x02, 0x09, 0x00, 0x00, 0xF2, 0x03, 0xFF, 0x07, 0x00, 0x00, -/* 0001A310 */ 0x00, 0x00, 0x00, 0x00, 0x91, 0x03, 0x00, 0x01, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, -/* 0001A320 */ 0x86, 0xFE, 0x54, 0x85, 0x04, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x1B, 0x00, 0x29, 0x00, 0x19, -/* 0001A330 */ 0x01, 0x0A, 0x00, 0x13, 0x00, 0x00, 0x3A, 0xA3, 0x01, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, -/* 0001A340 */ 0x01, 0x00, 0xFE, 0x13, 0x03, 0x24, 0xA2, 0x41, 0xD1, 0x00, 0x3E, 0xFE, 0x8B, 0x85, 0xFF, 0x00, -/* 0001A350 */ 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x8B, 0x85, 0xF1, 0xF1, 0x41, 0x06, 0x03, 0x06, 0x04, 0x21, -/* 0001A360 */ 0x20, 0x03, 0x03, 0x05, 0x02, 0x02, 0x02, 0x02, 0x05, 0x08, 0x82, 0x4F, 0x04, 0x8D, 0x02, 0x0E, -/* 0001A370 */ 0x06, 0x00, 0x00, 0x4B, 0x06, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x03, 0x00, 0x00, -/* 0001A380 */ 0xEE, 0x02, 0x06, 0x06, 0x00, 0x00, 0x60, 0x06, 0x06, 0x00, 0x47, 0x04, 0x06, 0x8D, 0x02, 0x06, -/* 0001A390 */ 0x06, 0x01, 0x00, 0x4B, 0x06, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x8D, 0x01, 0x02, 0x07, 0x02, -/* 0001A3A0 */ 0x00, 0x5B, 0x01, 0x07, 0x01, 0x00, 0x5B, 0x02, 0x04, 0x01, 0x00, 0xEE, 0x03, 0x06, 0x06, 0x01, -/* 0001A3B0 */ 0x00, 0xA6, 0x07, 0x15, 0x03, 0x00, 0x06, 0x07, 0x09, 0x2E, 0x00, 0x8D, 0x03, 0x37, 0x07, 0x03, -/* 0001A3C0 */ 0x00, 0x4B, 0x07, 0x6B, 0x06, 0x07, 0x01, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x07, 0x8D, 0x01, 0x03, -/* 0001A3D0 */ 0x08, 0x04, 0x00, 0x4B, 0x08, 0x5B, 0x01, 0x08, 0x02, 0x00, 0x5B, 0x02, 0x03, 0x02, 0x00, 0xF2, -/* 0001A3E0 */ 0x03, 0xFF, 0x06, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x28, 0x03, -/* 0001A3F0 */ 0xFE, 0x18, 0x01, 0xFE, 0xAB, 0x85, 0x04, 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x42, 0x00, 0x2E, -/* 0001A400 */ 0x00, 0x60, 0x00, 0x30, 0x00, 0x2E, 0x00, 0x00, 0xBF, 0x7C, 0x1B, 0xC3, 0x43, 0xA8, 0x09, 0x00, -/* 0001A410 */ 0xFE, 0xE3, 0x02, 0x23, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x73, 0x03, 0x3C, 0xFE, 0x8C, 0x7E, 0xFF, -/* 0001A420 */ 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x8C, 0x7E, 0xFE, 0x12, 0x05, 0xFE, 0x12, 0x05, 0x01, -/* 0001A430 */ 0x0F, 0x0B, 0x15, 0x04, 0x82, 0x77, 0x56, 0x02, 0x01, 0x02, 0x0B, 0x03, 0x04, 0x01, 0x09, 0x09, -/* 0001A440 */ 0x09, 0x09, 0x02, 0x14, 0x15, 0x95, 0xFE, 0x19, 0x02, 0x06, 0xFE, 0xF5, 0x03, 0x06, 0xFE, 0xAD, -/* 0001A450 */ 0x03, 0x01, 0x00, 0x06, 0xFE, 0xF6, 0x03, 0x07, 0x06, 0xFE, 0xF7, 0x03, 0x08, 0x01, 0xFF, 0x01, -/* 0001A460 */ 0x01, 0xFE, 0x23, 0x02, 0x4F, 0x0C, 0x4F, 0x0D, 0x4F, 0x0E, 0x4F, 0x0F, 0x4F, 0x10, 0x4F, 0x11, -/* 0001A470 */ 0x4F, 0x12, 0x4F, 0x13, 0x2C, 0x17, 0x0B, 0x14, 0x03, 0x00, 0x17, 0x02, 0x09, 0x08, 0x00, 0xCD, -/* 0001A480 */ 0x00, 0x00, 0x00, 0x00, 0x09, 0xFE, 0x01, 0xCD, 0x17, 0x00, 0x01, 0x00, 0x47, 0x0C, 0x17, 0x2C, -/* 0001A490 */ 0x17, 0x0B, 0x14, 0x03, 0x00, 0x17, 0x03, 0x09, 0x0F, 0x00, 0xCD, 0x18, 0x01, 0x02, 0x00, 0x9F, -/* 0001A4A0 */ 0x00, 0x0B, 0x18, 0x47, 0x17, 0x18, 0x09, 0x22, 0x00, 0x8D, 0x02, 0x24, 0x19, 0x00, 0x00, 0x6B, -/* 0001A4B0 */ 0x18, 0x19, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x19, 0x5B, 0x01, 0x0B, 0x00, 0x00, 0xF2, 0x02, -/* 0001A4C0 */ 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x17, 0x18, 0x47, 0x0D, 0x17, 0x8D, 0x02, -/* 0001A4D0 */ 0x24, 0x18, 0x00, 0x00, 0x6B, 0x17, 0x18, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x18, 0xA5, 0x19, -/* 0001A4E0 */ 0x0D, 0x02, 0x00, 0x00, 0x5B, 0x01, 0x19, 0x01, 0x00, 0xF2, 0x02, 0x17, 0x17, 0x01, 0x00, 0x00, -/* 0001A4F0 */ 0x00, 0x01, 0x00, 0x47, 0x0E, 0x17, 0x47, 0x0F, 0x04, 0xEB, 0x00, 0xEC, 0x00, 0x12, 0x03, 0x00, -/* 0001A500 */ 0x0F, 0x0E, 0x09, 0x76, 0x01, 0x8D, 0x02, 0x24, 0x18, 0x00, 0x00, 0x6B, 0x17, 0x18, 0x03, 0x07, -/* 0001A510 */ 0x02, 0x00, 0x5A, 0x00, 0x18, 0x5B, 0x01, 0x0F, 0x02, 0x00, 0xF2, 0x02, 0x17, 0x17, 0x03, 0x00, -/* 0001A520 */ 0x00, 0x00, 0x02, 0x00, 0x47, 0x10, 0x17, 0xB9, 0x17, 0x10, 0x0D, 0x00, 0x00, 0x0E, 0x43, 0x01, -/* 0001A530 */ 0x17, 0x96, 0x17, 0x0D, 0x10, 0x01, 0x00, 0x47, 0x11, 0x17, 0x2C, 0x17, 0x11, 0x15, 0x03, 0x00, -/* 0001A540 */ 0x17, 0x03, 0x09, 0x08, 0x00, 0x2C, 0x17, 0x11, 0x15, 0x08, 0x00, 0x17, 0x05, 0x14, 0x03, 0x00, -/* 0001A550 */ 0x11, 0x06, 0x09, 0x1F, 0x00, 0x8D, 0x02, 0x03, 0x18, 0x01, 0x00, 0x6B, 0x17, 0x18, 0x04, 0x07, -/* 0001A560 */ 0x02, 0x00, 0x5A, 0x00, 0x18, 0x5B, 0x01, 0x07, 0x03, 0x00, 0xF2, 0x02, 0xFF, 0x17, 0x04, 0x00, -/* 0001A570 */ 0x00, 0x00, 0x03, 0x00, 0x8D, 0x02, 0x24, 0x18, 0x00, 0x00, 0x6B, 0x17, 0x18, 0x03, 0x07, 0x02, -/* 0001A580 */ 0x00, 0x5A, 0x00, 0x18, 0x5B, 0x01, 0x11, 0x04, 0x00, 0xF2, 0x02, 0x17, 0x17, 0x03, 0x00, 0x00, -/* 0001A590 */ 0x00, 0x04, 0x00, 0x47, 0x12, 0x17, 0x8D, 0x01, 0x10, 0x17, 0x02, 0x00, 0x4B, 0x17, 0x07, 0x02, -/* 0001A5A0 */ 0x00, 0x5A, 0x00, 0x08, 0x5B, 0x01, 0x12, 0x05, 0x00, 0xEE, 0x02, 0x17, 0x17, 0x05, 0x00, 0x0F, -/* 0001A5B0 */ 0x1F, 0x00, 0x17, 0x8D, 0x02, 0x03, 0x18, 0x01, 0x00, 0x6B, 0x17, 0x18, 0x05, 0x07, 0x02, 0x00, -/* 0001A5C0 */ 0x5A, 0x00, 0x18, 0x5B, 0x01, 0x12, 0x06, 0x00, 0xF2, 0x02, 0xFF, 0x17, 0x05, 0x00, 0x00, 0x00, -/* 0001A5D0 */ 0x06, 0x00, 0x8D, 0x02, 0x03, 0x18, 0x01, 0x00, 0x6B, 0x17, 0x18, 0x06, 0x07, 0x02, 0x00, 0x5A, -/* 0001A5E0 */ 0x00, 0x18, 0x5B, 0x01, 0x12, 0x07, 0x00, 0xF2, 0x02, 0x17, 0x17, 0x06, 0x00, 0x00, 0x00, 0x07, -/* 0001A5F0 */ 0x00, 0x47, 0x13, 0x17, 0xA6, 0x17, 0x14, 0x03, 0x00, 0x13, 0x17, 0x09, 0x22, 0x00, 0x8D, 0x02, -/* 0001A600 */ 0x03, 0x18, 0x01, 0x00, 0x6B, 0x17, 0x18, 0x05, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x18, 0x5B, 0x01, -/* 0001A610 */ 0x12, 0x08, 0x00, 0xF2, 0x02, 0xFF, 0x17, 0x05, 0x00, 0x00, 0x00, 0x08, 0x00, 0x09, 0x54, 0x00, -/* 0001A620 */ 0x8D, 0x02, 0x37, 0x18, 0x03, 0x00, 0x4B, 0x18, 0x6B, 0x17, 0x18, 0x07, 0x07, 0x03, 0x00, 0x5A, -/* 0001A630 */ 0x00, 0x18, 0x5B, 0x01, 0x0C, 0x09, 0x00, 0x5B, 0x02, 0x13, 0x09, 0x00, 0xF2, 0x03, 0x17, 0x17, -/* 0001A640 */ 0x07, 0x00, 0x00, 0x00, 0x09, 0x00, 0x14, 0x03, 0x00, 0x17, 0x09, 0x09, 0x26, 0x00, 0x8D, 0x02, -/* 0001A650 */ 0x37, 0x18, 0x03, 0x00, 0x4B, 0x18, 0x6B, 0x17, 0x18, 0x08, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x18, -/* 0001A660 */ 0x5B, 0x01, 0x0C, 0x0A, 0x00, 0x5B, 0x02, 0x13, 0x0A, 0x00, 0xF2, 0x03, 0xFF, 0x17, 0x08, 0x00, -/* 0001A670 */ 0x00, 0x00, 0x0A, 0x00, 0x2F, 0x0F, 0x0F, 0x0A, 0x09, 0x80, 0xFE, 0xED, 0x00, 0x47, 0x00, 0x0C, -/* 0001A680 */ 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x36, 0x03, 0xFE, 0x3A, 0x03, 0xC1, 0xFE, 0x37, -/* 0001A690 */ 0x03, 0xFE, 0x8B, 0x02, 0xFE, 0x87, 0x02, 0xFE, 0xD8, 0x01, 0xFE, 0x14, 0x03, 0xFE, 0x18, 0x01, -/* 0001A6A0 */ 0xFE, 0xA9, 0x7E, 0x17, 0x10, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x32, 0x00, 0x08, 0x00, 0x1E, 0x00, -/* 0001A6B0 */ 0x08, 0x00, 0x19, 0x00, 0x3F, 0x00, 0x58, 0x00, 0x28, 0x00, 0x31, 0x00, 0x07, 0x00, 0x1B, 0x00, -/* 0001A6C0 */ 0x08, 0x00, 0x17, 0x00, 0x22, 0x00, 0x2D, 0x00, 0x0A, 0x00, 0x1F, 0x00, 0x09, 0x00, 0x26, 0x00, -/* 0001A6D0 */ 0x1B, 0x00, 0x69, 0x00, 0x1F, 0x00, 0x4F, 0x00, 0x22, 0x00, 0x37, 0x00, 0x1D, 0x00, 0x40, 0x00, -/* 0001A6E0 */ 0x1F, 0x00, 0x4B, 0x00, 0x22, 0x00, 0x4D, 0x00, 0x0A, 0x00, 0x96, 0x00, 0x22, 0x00, 0x3F, 0x00, -/* 0001A6F0 */ 0x2E, 0x00, 0x49, 0x00, 0x26, 0x00, 0x4D, 0x00, 0x09, 0x00, 0x1B, 0x00, 0x08, 0x00, 0x11, 0x00, -/* 0001A700 */ 0x00, 0x3F, 0x5C, 0x09, 0xC1, 0x43, 0xA8, 0x05, 0x00, 0xFE, 0xC0, 0x02, 0x2B, 0xA2, 0x41, 0xC1, -/* 0001A710 */ 0x00, 0xFE, 0x72, 0x03, 0x39, 0xFE, 0xE0, 0x79, 0x02, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, -/* 0001A720 */ 0xFE, 0xE0, 0x79, 0xFE, 0x40, 0x03, 0xFE, 0x40, 0x03, 0x0F, 0x07, 0x0F, 0x08, 0x5B, 0x52, 0x02, -/* 0001A730 */ 0x04, 0x07, 0x02, 0x0A, 0x0A, 0x0A, 0x0A, 0x01, 0x0E, 0x0F, 0x08, 0x07, 0x0C, 0x06, 0xFE, 0xAF, -/* 0001A740 */ 0x03, 0x0B, 0xFE, 0x74, 0x01, 0x4F, 0x08, 0x4F, 0x09, 0x4F, 0x0A, 0x4F, 0x0B, 0x4F, 0x0C, 0x4F, -/* 0001A750 */ 0x0D, 0x8D, 0x01, 0x0E, 0x10, 0x00, 0x00, 0x4B, 0x10, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5B, -/* 0001A760 */ 0x01, 0x07, 0x00, 0x00, 0xEE, 0x02, 0x10, 0x10, 0x00, 0x00, 0x47, 0x08, 0x10, 0x14, 0x03, 0x00, -/* 0001A770 */ 0x08, 0x03, 0x09, 0x06, 0x00, 0x47, 0x00, 0x04, 0x09, 0x3C, 0x01, 0x60, 0x10, 0x08, 0x00, 0x0E, -/* 0001A780 */ 0x6B, 0x00, 0x10, 0x8D, 0x02, 0x37, 0x11, 0x01, 0x00, 0x4B, 0x11, 0x6B, 0x10, 0x11, 0x01, 0x07, -/* 0001A790 */ 0x03, 0x00, 0x5A, 0x00, 0x11, 0x60, 0x12, 0x08, 0x00, 0x5B, 0x01, 0x12, 0x01, 0x00, 0x5B, 0x02, -/* 0001A7A0 */ 0x05, 0x01, 0x00, 0xF2, 0x03, 0x10, 0x10, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x09, 0x10, -/* 0001A7B0 */ 0x8D, 0x02, 0x37, 0x11, 0x01, 0x00, 0x4B, 0x11, 0x6B, 0x10, 0x11, 0x02, 0x07, 0x02, 0x00, 0x5A, -/* 0001A7C0 */ 0x00, 0x11, 0x5B, 0x01, 0x09, 0x02, 0x00, 0xF2, 0x02, 0x10, 0x10, 0x02, 0x00, 0x00, 0x00, 0x02, -/* 0001A7D0 */ 0x00, 0x47, 0x0A, 0x10, 0xA5, 0x10, 0x09, 0x03, 0x00, 0x00, 0xA5, 0x11, 0x0A, 0x04, 0x01, 0x00, -/* 0001A7E0 */ 0x15, 0x03, 0x00, 0x10, 0x11, 0x09, 0x06, 0x00, 0x47, 0x00, 0x04, 0x09, 0xC9, 0x00, 0x60, 0x10, -/* 0001A7F0 */ 0x08, 0x05, 0x0E, 0xB9, 0x00, 0x10, 0x8D, 0x02, 0x37, 0x11, 0x01, 0x00, 0x4B, 0x11, 0x6B, 0x10, -/* 0001A800 */ 0x11, 0x01, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x11, 0x60, 0x12, 0x08, 0x05, 0x5B, 0x01, 0x12, 0x03, -/* 0001A810 */ 0x00, 0x5B, 0x02, 0x05, 0x03, 0x00, 0xF2, 0x03, 0x10, 0x10, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, -/* 0001A820 */ 0x47, 0x0B, 0x10, 0x8D, 0x02, 0x37, 0x11, 0x01, 0x00, 0x4B, 0x11, 0x6B, 0x10, 0x11, 0x06, 0x07, -/* 0001A830 */ 0x03, 0x00, 0x5A, 0x00, 0x11, 0x8D, 0x02, 0x37, 0x13, 0x01, 0x00, 0x4B, 0x13, 0x6B, 0x12, 0x13, -/* 0001A840 */ 0x07, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x13, 0x5B, 0x01, 0x0B, 0x05, 0x00, 0xD3, 0x00, 0x14, 0x5B, -/* 0001A850 */ 0x02, 0x14, 0x05, 0x00, 0xF2, 0x03, 0x12, 0x12, 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, 0x5B, 0x01, -/* 0001A860 */ 0x12, 0x04, 0x00, 0xD3, 0x01, 0x12, 0x5B, 0x02, 0x12, 0x04, 0x00, 0xF2, 0x03, 0x10, 0x10, 0x06, -/* 0001A870 */ 0x00, 0x00, 0x00, 0x04, 0x00, 0x47, 0x0C, 0x10, 0x8D, 0x02, 0x37, 0x11, 0x01, 0x00, 0x4B, 0x11, -/* 0001A880 */ 0x6B, 0x10, 0x11, 0x02, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x11, 0x5B, 0x01, 0x0C, 0x06, 0x00, 0xF2, -/* 0001A890 */ 0x02, 0x10, 0x10, 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, 0x47, 0x0D, 0x10, 0xA5, 0x10, 0x0C, 0x08, -/* 0001A8A0 */ 0x02, 0x00, 0xA5, 0x11, 0x0D, 0x09, 0x03, 0x00, 0x43, 0x00, 0x10, 0x11, 0x09, 0x08, 0x00, 0x47, -/* 0001A8B0 */ 0x00, 0x06, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xF3, 0x03, 0xFE, 0x45, 0x01, 0xFE, -/* 0001A8C0 */ 0x1A, 0x03, 0xC1, 0xC1, 0xFE, 0xF4, 0x03, 0xC5, 0x7E, 0xC1, 0xC1, 0xFE, 0xFC, 0x79, 0x0F, 0x0C, -/* 0001A8D0 */ 0x00, 0x00, 0x00, 0x1C, 0x00, 0x2D, 0x00, 0x08, 0x00, 0x23, 0x00, 0x06, 0x00, 0x45, 0x00, 0x08, -/* 0001A8E0 */ 0x00, 0x23, 0x00, 0x2D, 0x00, 0x3C, 0x00, 0x24, 0x00, 0x38, 0x00, 0x14, 0x00, 0x41, 0x00, 0x06, -/* 0001A8F0 */ 0x00, 0x2F, 0x00, 0x08, 0x00, 0x25, 0x00, 0x2D, 0x00, 0x44, 0x00, 0x55, 0x00, 0x88, 0x00, 0x24, -/* 0001A900 */ 0x00, 0x3C, 0x00, 0x13, 0x00, 0x49, 0x00, 0x08, 0x00, 0x11, 0x00, 0x00, 0x7F, 0xA9, 0x01, 0x00, -/* 0001A910 */ 0x14, 0xA9, 0x01, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x03, 0x00, 0xFE, 0xD2, 0x02, 0x62, -/* 0001A920 */ 0xA2, 0x41, 0xD0, 0x00, 0x3B, 0xFE, 0x01, 0x10, 0xFE, 0x57, 0x7C, 0xFF, 0x00, 0x10, 0x01, 0x00, -/* 0001A930 */ 0x02, 0x02, 0xFE, 0x57, 0x7C, 0x23, 0x23, 0x01, 0x04, 0x02, 0x04, 0x03, 0x0B, 0x0B, 0x02, 0x01, -/* 0001A940 */ 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x28, 0x8D, 0x02, 0x37, 0x05, 0x00, 0x00, 0x4B, 0x05, 0x6B, -/* 0001A950 */ 0x04, 0x05, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x05, 0x5B, 0x01, 0x02, 0x00, 0x00, 0xF2, 0x02, -/* 0001A960 */ 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, -/* 0001A970 */ 0x63, 0x01, 0xFE, 0x64, 0x7C, 0x02, 0x00, 0x00, 0x00, 0x00, 0x26, 0x00, 0x16, 0x00, 0x00, 0xBF, -/* 0001A980 */ 0x4C, 0x01, 0xC0, 0x03, 0x80, 0x03, 0x00, 0xFE, 0xD2, 0x02, 0x3E, 0xA2, 0x41, 0xD0, 0x00, 0x3A, -/* 0001A990 */ 0xFE, 0x01, 0x10, 0xFE, 0x33, 0x7C, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x33, 0x7C, -/* 0001A9A0 */ 0x21, 0x21, 0x01, 0x02, 0x03, 0x04, 0x06, 0x06, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -/* 0001A9B0 */ 0x11, 0xA5, 0x04, 0x03, 0x00, 0x00, 0x00, 0x43, 0x00, 0x04, 0x02, 0x09, 0x02, 0x00, 0xA6, 0x00, -/* 0001A9C0 */ 0x24, 0x00, 0xC1, 0xFE, 0x40, 0x7C, 0x02, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x14, 0x00, 0x00, -/* 0001A9D0 */ 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0xA8, 0x02, 0x25, 0xA2, 0x41, 0xC1, 0x00, -/* 0001A9E0 */ 0xFE, 0x71, 0x03, 0x38, 0xFE, 0x6F, 0x76, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x6F, -/* 0001A9F0 */ 0x76, 0xE0, 0xE0, 0x01, 0x05, 0x04, 0x06, 0x04, 0x1D, 0x1C, 0x02, 0x03, 0x04, 0x02, 0x02, 0x02, -/* 0001AA00 */ 0x02, 0x05, 0x08, 0x07, 0x79, 0x8D, 0x02, 0x24, 0x07, 0x00, 0x00, 0x6B, 0x06, 0x07, 0x00, 0x07, -/* 0001AA10 */ 0x02, 0x00, 0x5A, 0x00, 0x07, 0x5B, 0x01, 0x04, 0x00, 0x00, 0xF2, 0x02, 0x06, 0x06, 0x00, 0x00, -/* 0001AA20 */ 0x00, 0x00, 0x00, 0x00, 0x47, 0x04, 0x06, 0x8D, 0x01, 0x0D, 0x06, 0x01, 0x00, 0x4B, 0x06, 0x0F, -/* 0001AA30 */ 0x14, 0x00, 0x06, 0x8D, 0x01, 0x03, 0x06, 0x02, 0x00, 0x4B, 0x06, 0x07, 0x01, 0x00, 0x5A, 0x00, -/* 0001AA40 */ 0x02, 0xEE, 0x01, 0xFF, 0x06, 0x01, 0x00, 0x8D, 0x02, 0x03, 0x07, 0x03, 0x00, 0x6B, 0x06, 0x07, -/* 0001AA50 */ 0x01, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x07, 0x5B, 0x01, 0x04, 0x02, 0x00, 0x8D, 0x01, 0x0D, 0x08, -/* 0001AA60 */ 0x01, 0x00, 0x4B, 0x08, 0x5B, 0x02, 0x08, 0x02, 0x00, 0xF2, 0x03, 0x06, 0x06, 0x01, 0x00, 0x00, -/* 0001AA70 */ 0x00, 0x02, 0x00, 0x44, 0x00, 0x06, 0x03, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x37, -/* 0001AA80 */ 0x03, 0xFE, 0x83, 0x02, 0xFE, 0x89, 0x76, 0x05, 0x00, 0x00, 0x00, 0x00, 0x22, 0x00, 0x29, 0x00, -/* 0001AA90 */ 0x0C, 0x00, 0x25, 0x00, 0x14, 0x00, 0x2F, 0x00, 0x35, 0x00, 0x48, 0x00, 0x00, 0x3F, 0x5D, 0x08, -/* 0001AAA0 */ 0x01, 0x00, 0x8D, 0x05, 0x00, 0xFE, 0x2E, 0x02, 0x1A, 0xA0, 0x41, 0xD1, 0x00, 0x36, 0xFE, 0x9C, -/* 0001AAB0 */ 0x5A, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0x9C, 0x5A, 0xFE, 0xA8, 0x1B, 0xFE, -/* 0001AAC0 */ 0xA8, 0x1B, 0x02, 0xFE, 0x83, 0x03, 0xFE, 0xCB, 0x03, 0x1A, 0x26, 0x3D, 0x04, 0xC8, 0x9D, 0x02, -/* 0001AAD0 */ 0x04, 0x02, 0x3A, 0x3B, 0x3C, 0x05, 0xFE, 0xCC, 0x03, 0x05, 0xFE, 0xCD, 0x03, 0x05, 0xFE, 0xCE, -/* 0001AAE0 */ 0x03, 0x06, 0xFE, 0xCF, 0x03, 0x06, 0xFE, 0xD0, 0x03, 0x05, 0xFE, 0xD1, 0x03, 0x05, 0xFE, 0xD2, -/* 0001AAF0 */ 0x03, 0x05, 0xFE, 0xD3, 0x03, 0x05, 0xFE, 0xD4, 0x03, 0x05, 0xFE, 0xD5, 0x03, 0x05, 0xFE, 0xD6, -/* 0001AB00 */ 0x03, 0x05, 0xFE, 0xD7, 0x03, 0x05, 0xFE, 0xD8, 0x03, 0x05, 0xFE, 0xD9, 0x03, 0x05, 0xFE, 0xDA, -/* 0001AB10 */ 0x03, 0x05, 0xFE, 0xDB, 0x03, 0x06, 0xFE, 0x5B, 0x03, 0x05, 0xFE, 0xDC, 0x03, 0x05, 0xFE, 0xDD, -/* 0001AB20 */ 0x03, 0x05, 0xFE, 0xDE, 0x03, 0x05, 0xFE, 0xDF, 0x03, 0x05, 0xFE, 0xE0, 0x03, 0x05, 0xFE, 0xE1, -/* 0001AB30 */ 0x03, 0x05, 0xFE, 0xE2, 0x03, 0x05, 0xFE, 0xE3, 0x03, 0x05, 0xFE, 0xE4, 0x03, 0x05, 0xFE, 0xE5, -/* 0001AB40 */ 0x03, 0x05, 0xFE, 0xE6, 0x03, 0x05, 0xFE, 0xE7, 0x03, 0x05, 0xFE, 0xE8, 0x03, 0x05, 0xFE, 0xE9, -/* 0001AB50 */ 0x03, 0x05, 0xFE, 0xEA, 0x03, 0x05, 0xFE, 0xEB, 0x03, 0x06, 0xFE, 0xEC, 0x03, 0x06, 0xFE, 0xED, -/* 0001AB60 */ 0x03, 0x06, 0xFE, 0xEE, 0x03, 0xFE, 0xEE, 0x02, 0x4F, 0x26, 0x4F, 0x27, 0x4F, 0x28, 0x4F, 0x29, -/* 0001AB70 */ 0x4F, 0x2A, 0x4F, 0x2B, 0x4F, 0x2C, 0x4F, 0x2D, 0x4F, 0x2E, 0x4F, 0x2F, 0x4F, 0x30, 0x4F, 0x31, -/* 0001AB80 */ 0x4F, 0x32, 0x4F, 0x33, 0x4F, 0x34, 0x4F, 0x35, 0x4F, 0x36, 0x4F, 0x37, 0x4F, 0x38, 0x4F, 0x39, -/* 0001AB90 */ 0x4F, 0x3D, 0x94, 0x02, 0x3D, 0x4F, 0x3D, 0x94, 0x03, 0x3D, 0x47, 0x26, 0x02, 0x47, 0x27, 0x03, -/* 0001ABA0 */ 0x47, 0x3D, 0x04, 0x01, 0x04, 0x01, 0x3E, 0x26, 0x2F, 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, 0x05, -/* 0001ABB0 */ 0x01, 0x04, 0x01, 0x3E, 0x27, 0x2F, 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, 0x06, 0x47, 0x28, 0x3D, -/* 0001ABC0 */ 0x47, 0x29, 0x07, 0x2F, 0x3D, 0x08, 0x09, 0x47, 0x2A, 0x3D, 0x47, 0x3D, 0x0A, 0x01, 0x04, 0x01, -/* 0001ABD0 */ 0x3E, 0x29, 0x2F, 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, 0x05, 0x01, 0x04, 0x01, 0x3E, 0x2A, 0x2F, -/* 0001ABE0 */ 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, 0x0B, 0x47, 0x2B, 0x3D, 0x47, 0x3D, 0x0C, 0x01, 0x04, 0x01, -/* 0001ABF0 */ 0x3E, 0x28, 0x2F, 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, 0x0D, 0x47, 0x2C, 0x3D, 0x47, 0x3D, 0x0A, -/* 0001AC00 */ 0x01, 0x04, 0x01, 0x3E, 0x27, 0x2F, 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, 0x0E, 0x47, 0x2D, 0x3D, -/* 0001AC10 */ 0x47, 0x3D, 0x0A, 0x01, 0x04, 0x01, 0x3E, 0x2D, 0x2F, 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, 0x0F, -/* 0001AC20 */ 0x01, 0x04, 0x01, 0x3E, 0x28, 0x2F, 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, 0x10, 0x47, 0x2E, 0x3D, -/* 0001AC30 */ 0x47, 0x3D, 0x0A, 0x01, 0x04, 0x01, 0x3E, 0x28, 0x2F, 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, 0x11, -/* 0001AC40 */ 0x01, 0x04, 0x01, 0x3E, 0x27, 0x2F, 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, 0x12, 0x01, 0x04, 0x01, -/* 0001AC50 */ 0x3E, 0x28, 0x2F, 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, 0x13, 0x47, 0x2F, 0x3D, 0x47, 0x3D, 0x0A, -/* 0001AC60 */ 0x01, 0x04, 0x01, 0x3E, 0x26, 0x2F, 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, 0x14, 0x01, 0x04, 0x01, -/* 0001AC70 */ 0x3E, 0x27, 0x2F, 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, 0x13, 0x47, 0x30, 0x3D, 0x47, 0x3D, 0x0A, -/* 0001AC80 */ 0x01, 0x04, 0x01, 0x3E, 0x26, 0x2F, 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, 0x15, 0x47, 0x31, 0x3D, -/* 0001AC90 */ 0x47, 0x3D, 0x0A, 0x01, 0x04, 0x01, 0x3E, 0x26, 0x2F, 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, 0x16, -/* 0001ACA0 */ 0x01, 0x04, 0x01, 0x3E, 0x26, 0x2F, 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, 0x17, 0x47, 0x32, 0x3D, -/* 0001ACB0 */ 0x47, 0x3D, 0x12, 0x01, 0x04, 0x01, 0x3E, 0x26, 0x2F, 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, 0x18, -/* 0001ACC0 */ 0x2F, 0x3D, 0x0A, 0x3D, 0x47, 0x3E, 0x19, 0x01, 0x04, 0x01, 0x3F, 0x32, 0x2F, 0x3E, 0x3E, 0x3F, -/* 0001ACD0 */ 0x2F, 0x3E, 0x3E, 0x1A, 0x2F, 0x3D, 0x3D, 0x3E, 0x47, 0x3E, 0x05, 0x01, 0x04, 0x01, 0x3F, 0x26, -/* 0001ACE0 */ 0x2F, 0x3E, 0x3E, 0x3F, 0x2F, 0x3E, 0x3E, 0x1B, 0x2F, 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, 0x0B, -/* 0001ACF0 */ 0x47, 0x33, 0x3D, 0x47, 0x3D, 0x1C, 0x01, 0x04, 0x01, 0x3E, 0x33, 0x2F, 0x3D, 0x3D, 0x3E, 0x2F, -/* 0001AD00 */ 0x3D, 0x3D, 0x0B, 0x47, 0x3E, 0x1D, 0x01, 0x04, 0x01, 0x3F, 0x31, 0x2F, 0x3E, 0x3E, 0x3F, 0x2F, -/* 0001AD10 */ 0x3E, 0x3E, 0x1E, 0x2F, 0x3D, 0x3D, 0x3E, 0x47, 0x3E, 0x1D, 0x01, 0x04, 0x01, 0x3F, 0x30, 0x2F, -/* 0001AD20 */ 0x3E, 0x3E, 0x3F, 0x2F, 0x3E, 0x3E, 0x1E, 0x2F, 0x3D, 0x3D, 0x3E, 0x47, 0x34, 0x3D, 0x47, 0x3D, -/* 0001AD30 */ 0x1F, 0x01, 0x04, 0x01, 0x3E, 0x2F, 0x2F, 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, 0x20, 0x47, 0x3E, -/* 0001AD40 */ 0x1F, 0x01, 0x04, 0x01, 0x3F, 0x2E, 0x2F, 0x3E, 0x3E, 0x3F, 0x2F, 0x3E, 0x3E, 0x20, 0x2F, 0x3D, -/* 0001AD50 */ 0x3D, 0x3E, 0x47, 0x3E, 0x19, 0x01, 0x04, 0x01, 0x3F, 0x2C, 0x2F, 0x3E, 0x3E, 0x3F, 0x2F, 0x3E, -/* 0001AD60 */ 0x3E, 0x21, 0x2F, 0x3D, 0x3D, 0x3E, 0x47, 0x35, 0x3D, 0x47, 0x3D, 0x22, 0x01, 0x04, 0x01, 0x3E, -/* 0001AD70 */ 0x34, 0x2F, 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, 0x22, 0x01, 0x04, 0x01, 0x3E, 0x35, 0x2F, 0x3D, -/* 0001AD80 */ 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, 0x22, 0x47, 0x36, 0x3D, 0x47, 0x3D, 0x0A, 0x01, 0x04, 0x01, 0x3E, -/* 0001AD90 */ 0x36, 0x2F, 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, 0x05, 0x01, 0x04, 0x01, 0x3E, 0x2C, 0x2F, 0x3D, -/* 0001ADA0 */ 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, 0x05, 0x01, 0x04, 0x01, 0x3E, 0x2B, 0x2F, 0x3D, 0x3D, 0x3E, 0x2F, -/* 0001ADB0 */ 0x3D, 0x3D, 0x0B, 0x47, 0x37, 0x3D, 0x8D, 0x02, 0x09, 0x3D, 0x00, 0x00, 0x07, 0x03, 0x00, 0x47, -/* 0001ADC0 */ 0x3E, 0x23, 0x01, 0x04, 0x01, 0x3F, 0x34, 0x2F, 0x3E, 0x3E, 0x3F, 0x2F, 0x3E, 0x3E, 0x24, 0x5B, -/* 0001ADD0 */ 0x01, 0x3E, 0x00, 0x00, 0x5B, 0x02, 0x25, 0x00, 0x00, 0xC2, 0x03, 0x3D, 0x3D, 0x00, 0x00, 0x47, -/* 0001ADE0 */ 0x38, 0x3D, 0x8D, 0x02, 0x09, 0x3D, 0x00, 0x00, 0x07, 0x03, 0x00, 0x47, 0x3E, 0x23, 0x01, 0x04, -/* 0001ADF0 */ 0x01, 0x3F, 0x35, 0x2F, 0x3E, 0x3E, 0x3F, 0x2F, 0x3E, 0x3E, 0x24, 0x5B, 0x01, 0x3E, 0x01, 0x00, -/* 0001AE00 */ 0x5B, 0x02, 0x25, 0x01, 0x00, 0xC2, 0x03, 0x3D, 0x3D, 0x01, 0x00, 0x47, 0x39, 0x3D, 0x8D, 0x02, -/* 0001AE10 */ 0x09, 0x3D, 0x00, 0x00, 0x07, 0x03, 0x00, 0x47, 0x3E, 0x23, 0x01, 0x04, 0x01, 0x3F, 0x37, 0x2F, -/* 0001AE20 */ 0x3E, 0x3E, 0x3F, 0x2F, 0x3E, 0x3E, 0x24, 0x5B, 0x01, 0x3E, 0x02, 0x00, 0x5B, 0x02, 0x25, 0x02, -/* 0001AE30 */ 0x00, 0xC2, 0x03, 0x3D, 0x3D, 0x02, 0x00, 0x94, 0x02, 0x3D, 0x8D, 0x02, 0x02, 0x3D, 0x01, 0x00, -/* 0001AE40 */ 0x07, 0x01, 0x00, 0xC2, 0x01, 0x3D, 0x3D, 0x03, 0x00, 0x94, 0x03, 0x3D, 0xD3, 0x00, 0x00, 0x09, -/* 0001AE50 */ 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x68, 0x5F, 0x18, 0x32, 0x00, 0x00, 0x00, 0x03, 0x00, -/* 0001AE60 */ 0x1F, 0x00, 0x03, 0x00, 0x1F, 0x00, 0x20, 0x00, 0x33, 0x00, 0x03, 0x00, 0x77, 0x00, 0x07, 0x00, -/* 0001AE70 */ 0xC0, 0x00, 0x20, 0x00, 0x44, 0x00, 0x13, 0x00, 0x7D, 0x00, 0x13, 0x00, 0x94, 0x00, 0x20, 0x00, -/* 0001AE80 */ 0x83, 0x00, 0x2D, 0x00, 0x83, 0x00, 0x20, 0x00, 0x74, 0x00, 0x13, 0x00, 0x6A, 0x00, 0x20, 0x00, -/* 0001AE90 */ 0x7A, 0x00, 0x43, 0x00, 0xAF, 0x03, 0x3B, 0x00, 0x4C, 0x01, 0x3B, 0x00, 0x5A, 0x01, 0x20, 0x00, -/* 0001AEA0 */ 0x4B, 0x00, 0x2D, 0x00, 0xBA, 0x00, 0x2C, 0x00, 0x74, 0x00, 0x2C, 0x00, 0x92, 0x00, 0x2C, 0x00, -/* 0001AEB0 */ 0x93, 0x00, 0x12, 0x00, 0x34, 0x00, 0x08, 0x00, 0x59, 0x08, 0x00, 0xBF, 0xAE, 0x01, 0x00, 0xBF, -/* 0001AEC0 */ 0x7C, 0x0B, 0xC3, 0x43, 0xA8, 0x09, 0x00, 0xFE, 0x6A, 0x02, 0x0F, 0xA2, 0x41, 0xD1, 0x00, 0x37, -/* 0001AED0 */ 0xFE, 0xF1, 0x6D, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0xF1, 0x6D, 0xFE, 0x4C, 0x08, -/* 0001AEE0 */ 0xFE, 0x4C, 0x08, 0x01, 0x10, 0x0B, 0x13, 0x09, 0x91, 0x86, 0x33, 0x03, 0x03, 0x0F, 0x07, 0x03, -/* 0001AEF0 */ 0x02, 0x11, 0x11, 0x11, 0x11, 0x03, 0x12, 0x13, 0xFE, 0x5A, 0x01, 0xFE, 0x26, 0x02, 0xFE, 0x89, -/* 0001AF00 */ 0x01, 0xFE, 0xB7, 0x01, 0x07, 0x01, 0x01, 0x01, 0x02, 0x06, 0xFE, 0xAF, 0x03, 0x01, 0x03, 0x01, -/* 0001AF10 */ 0x04, 0x01, 0x05, 0x01, 0x00, 0x06, 0xFE, 0xEF, 0x03, 0xFE, 0x56, 0x02, 0x4F, 0x0C, 0x4F, 0x0D, -/* 0001AF20 */ 0x4F, 0x0E, 0x4F, 0x0F, 0x4F, 0x10, 0x4F, 0x11, 0x8D, 0x01, 0x03, 0x17, 0x00, 0x00, 0x4B, 0x17, -/* 0001AF30 */ 0x6B, 0x16, 0x17, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x17, 0x5B, 0x01, 0x0B, 0x00, 0x00, 0xF2, -/* 0001AF40 */ 0x02, 0x16, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x0C, 0x16, 0x0E, 0x06, 0x00, 0x0C, -/* 0001AF50 */ 0x47, 0x00, 0x0C, 0x09, 0x1A, 0x02, 0x8D, 0x03, 0x37, 0x17, 0x01, 0x00, 0x4B, 0x17, 0x6B, 0x16, -/* 0001AF60 */ 0x17, 0x01, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x17, 0x5B, 0x01, 0x0B, 0x01, 0x00, 0x8D, 0x01, 0x02, -/* 0001AF70 */ 0x18, 0x02, 0x00, 0x4B, 0x18, 0x5B, 0x02, 0x18, 0x01, 0x00, 0xF2, 0x03, 0x16, 0x16, 0x01, 0x00, -/* 0001AF80 */ 0x00, 0x00, 0x01, 0x00, 0x47, 0x0D, 0x16, 0x0F, 0x06, 0x00, 0x0D, 0x47, 0x00, 0x02, 0x09, 0xDF, -/* 0001AF90 */ 0x01, 0x8D, 0x03, 0x37, 0x17, 0x01, 0x00, 0x4B, 0x17, 0x6B, 0x16, 0x17, 0x02, 0x07, 0x01, 0x00, -/* 0001AFA0 */ 0x5A, 0x00, 0x17, 0xF2, 0x01, 0x16, 0x16, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x47, 0x0E, 0x16, -/* 0001AFB0 */ 0x96, 0x16, 0x0D, 0x03, 0x00, 0x00, 0x75, 0x16, 0x0E, 0x03, 0x96, 0x16, 0x0D, 0x03, 0x01, 0x00, -/* 0001AFC0 */ 0x75, 0x16, 0x0E, 0x04, 0x96, 0x16, 0x0D, 0x04, 0x02, 0x00, 0x0E, 0x22, 0x00, 0x16, 0x96, 0x16, -/* 0001AFD0 */ 0x0D, 0x04, 0x03, 0x00, 0x75, 0x16, 0x0E, 0x05, 0x60, 0x17, 0x0E, 0x06, 0x96, 0x18, 0x0D, 0x04, -/* 0001AFE0 */ 0x04, 0x00, 0x2F, 0x18, 0x05, 0x18, 0x2F, 0x16, 0x17, 0x18, 0x75, 0x16, 0x0E, 0x04, 0xFA, 0x16, -/* 0001AFF0 */ 0x96, 0x16, 0x0D, 0x06, 0x05, 0x00, 0x0E, 0x22, 0x00, 0x16, 0x96, 0x16, 0x0D, 0x06, 0x06, 0x00, -/* 0001B000 */ 0x75, 0x16, 0x0E, 0x07, 0x60, 0x17, 0x0E, 0x06, 0x96, 0x18, 0x0D, 0x06, 0x07, 0x00, 0x2F, 0x18, -/* 0001B010 */ 0x05, 0x18, 0x2F, 0x16, 0x17, 0x18, 0x75, 0x16, 0x0E, 0x04, 0xFA, 0x16, 0x96, 0x16, 0x0D, 0x07, -/* 0001B020 */ 0x08, 0x00, 0x0E, 0x0A, 0x00, 0x16, 0x96, 0x16, 0x0D, 0x07, 0x09, 0x00, 0x75, 0x16, 0x0E, 0x08, -/* 0001B030 */ 0x96, 0x16, 0x0D, 0x08, 0x0A, 0x00, 0x0E, 0x08, 0x01, 0x16, 0x96, 0x16, 0x0D, 0x08, 0x0B, 0x00, -/* 0001B040 */ 0x75, 0x16, 0x0E, 0x09, 0x8D, 0x03, 0x37, 0x17, 0x01, 0x00, 0x4B, 0x17, 0x6B, 0x16, 0x17, 0x0A, -/* 0001B050 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x17, 0x96, 0x18, 0x0D, 0x08, 0x0C, 0x00, 0x5B, 0x01, 0x18, 0x03, -/* 0001B060 */ 0x00, 0x5B, 0x02, 0x05, 0x03, 0x00, 0xF2, 0x03, 0x16, 0x16, 0x0A, 0x00, 0x00, 0x00, 0x03, 0x00, -/* 0001B070 */ 0x47, 0x0F, 0x16, 0x47, 0x10, 0x09, 0xEB, 0x00, 0xEC, 0x00, 0xA5, 0x16, 0x0F, 0x0B, 0x00, 0x00, -/* 0001B080 */ 0x12, 0x03, 0x00, 0x10, 0x16, 0x09, 0xB8, 0x00, 0x96, 0x16, 0x0F, 0x10, 0x0D, 0x00, 0x15, 0x03, -/* 0001B090 */ 0x00, 0x16, 0x0A, 0x09, 0x03, 0x00, 0x09, 0xA1, 0x00, 0xA6, 0x16, 0x47, 0x11, 0x16, 0x2F, 0x16, -/* 0001B0A0 */ 0x10, 0x03, 0x47, 0x11, 0x16, 0xEB, 0x01, 0xEC, 0x01, 0xA5, 0x16, 0x0F, 0x0B, 0x01, 0x00, 0x12, -/* 0001B0B0 */ 0x03, 0x00, 0x11, 0x16, 0x09, 0x1A, 0x00, 0x96, 0x16, 0x0F, 0x11, 0x0E, 0x00, 0xA5, 0x16, 0x16, -/* 0001B0C0 */ 0x0C, 0x02, 0x00, 0x11, 0x03, 0x00, 0x16, 0x03, 0x09, 0x06, 0x00, 0x28, 0x11, 0x11, 0x09, 0xD6, -/* 0001B0D0 */ 0xFF, 0xED, 0x01, 0x2F, 0x16, 0x10, 0x03, 0x11, 0x03, 0x00, 0x11, 0x16, 0x09, 0x58, 0x00, 0x47, -/* 0001B0E0 */ 0x16, 0x0E, 0x8D, 0x03, 0x37, 0x18, 0x01, 0x00, 0x4B, 0x18, 0x6B, 0x17, 0x18, 0x0D, 0x07, 0x03, -/* 0001B0F0 */ 0x00, 0x5A, 0x00, 0x18, 0x8D, 0x03, 0x37, 0x1A, 0x01, 0x00, 0x4B, 0x1A, 0x6B, 0x19, 0x1A, 0x0E, -/* 0001B100 */ 0x07, 0x04, 0x00, 0x5A, 0x00, 0x1A, 0x5B, 0x01, 0x0F, 0x05, 0x00, 0x5B, 0x02, 0x10, 0x05, 0x00, -/* 0001B110 */ 0x5B, 0x03, 0x11, 0x05, 0x00, 0xF2, 0x04, 0x19, 0x19, 0x0E, 0x00, 0x00, 0x00, 0x05, 0x00, 0x5B, -/* 0001B120 */ 0x01, 0x19, 0x04, 0x00, 0x5B, 0x02, 0x05, 0x04, 0x00, 0xF2, 0x03, 0x17, 0x17, 0x0D, 0x00, 0x00, -/* 0001B130 */ 0x00, 0x04, 0x00, 0x75, 0x17, 0x16, 0x0F, 0x09, 0x06, 0x00, 0x28, 0x10, 0x10, 0x09, 0x38, 0xFF, -/* 0001B140 */ 0xED, 0x00, 0x8D, 0x01, 0x03, 0x17, 0x00, 0x00, 0x4B, 0x17, 0x6B, 0x16, 0x17, 0x10, 0x07, 0x03, -/* 0001B150 */ 0x00, 0x5A, 0x00, 0x17, 0x5B, 0x01, 0x0B, 0x06, 0x00, 0x5B, 0x02, 0x0E, 0x06, 0x00, 0xF2, 0x03, -/* 0001B160 */ 0xFF, 0x16, 0x10, 0x00, 0x00, 0x00, 0x06, 0x00, 0x47, 0x00, 0x0E, 0x09, 0x02, 0x00, 0xA6, 0x00, -/* 0001B170 */ 0x24, 0x00, 0xFE, 0x84, 0x01, 0xF1, 0x61, 0xFE, 0xF0, 0x03, 0xFE, 0x28, 0x03, 0xFE, 0xF1, 0x03, -/* 0001B180 */ 0xFE, 0x28, 0x03, 0xFE, 0xF2, 0x03, 0xFE, 0xF3, 0x03, 0xFE, 0xF4, 0x03, 0xFE, 0x45, 0x01, 0xC1, -/* 0001B190 */ 0xC1, 0xBC, 0xFE, 0x3F, 0x01, 0xFE, 0xB6, 0x03, 0xFE, 0x87, 0x01, 0xFE, 0x12, 0x6E, 0x23, 0x0C, -/* 0001B1A0 */ 0x00, 0x00, 0x00, 0x24, 0x00, 0x3C, 0x00, 0x04, 0x00, 0x1E, 0x00, 0x06, 0x00, 0x2A, 0x00, 0x31, -/* 0001B1B0 */ 0x00, 0x39, 0x00, 0x04, 0x00, 0x1E, 0x00, 0x06, 0x00, 0x28, 0x00, 0x1F, 0x00, 0x24, 0x00, 0x0A, -/* 0001B1C0 */ 0x00, 0x25, 0x00, 0x0A, 0x00, 0x21, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x0A, 0x00, 0x27, 0x00, 0x18, -/* 0001B1D0 */ 0x00, 0x37, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x0A, 0x00, 0x27, 0x00, 0x18, 0x00, 0x37, 0x00, 0x0A, -/* 0001B1E0 */ 0x00, 0x20, 0x00, 0x0A, 0x00, 0x34, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x0A, 0x00, 0x76, 0x00, 0x2F, -/* 0001B1F0 */ 0x00, 0x44, 0x00, 0x07, 0x00, 0x0B, 0x00, 0x0E, 0x00, 0x36, 0x00, 0x0E, 0x00, 0x39, 0x00, 0x03, -/* 0001B200 */ 0x00, 0x35, 0x00, 0x05, 0x00, 0x20, 0x00, 0x0B, 0x00, 0x0B, 0x00, 0x22, 0x00, 0x3B, 0x00, 0x08, -/* 0001B210 */ 0x00, 0x3B, 0x01, 0x0C, 0x00, 0xFC, 0x00, 0x58, 0x00, 0xCC, 0x00, 0x03, 0x00, 0x0E, 0xFC, 0x08, -/* 0001B220 */ 0x00, 0x26, 0x04, 0x26, 0x00, 0x33, 0x00, 0x08, 0x00, 0x14, 0x00, 0x00, 0xBF, 0x4C, 0x00, 0x00, -/* 0001B230 */ 0x20, 0x88, 0x01, 0x00, 0xFE, 0x24, 0x02, 0x04, 0xA1, 0x41, 0xC1, 0x00, 0xFE, 0x65, 0x03, 0x35, -/* 0001B240 */ 0xFE, 0x40, 0x59, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0x40, 0x59, 0x55, 0x55, 0x41, -/* 0001B250 */ 0x02, 0x02, 0x03, 0x05, 0x05, 0x02, 0x01, 0x02, 0x0D, 0xE0, 0x03, 0x00, 0x01, 0x34, 0x01, 0x01, -/* 0001B260 */ 0x0D, 0x03, 0xA6, 0x00, 0x24, 0x00, 0x0A, 0xFE, 0xCA, 0x03, 0x01, 0xFE, 0x6E, 0x59, 0x02, 0x00, -/* 0001B270 */ 0x00, 0x00, 0x00, 0x0B, 0x00, 0x26, 0x00, 0x00, 0xBF, 0x5C, 0x0A, 0xC1, 0x03, 0x88, 0x01, 0x00, -/* 0001B280 */ 0xFE, 0x16, 0x02, 0x1C, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x6E, 0x03, 0x34, 0xFE, 0x5D, 0x57, 0xFF, -/* 0001B290 */ 0x00, 0x10, 0x01, 0x00, 0x06, 0x06, 0xFE, 0x5D, 0x57, 0xFE, 0xC2, 0x01, 0xFE, 0xC2, 0x01, 0x01, -/* 0001B2A0 */ 0x0B, 0x06, 0x0D, 0x08, 0x39, 0x35, 0x02, 0x01, 0x05, 0x04, 0x04, 0x04, 0x04, 0x04, 0x0C, 0x08, -/* 0001B2B0 */ 0x06, 0xFE, 0xC7, 0x03, 0x05, 0xFE, 0xC8, 0x03, 0x06, 0xFE, 0xC9, 0x03, 0xF4, 0x4F, 0x0B, 0x96, -/* 0001B2C0 */ 0x0D, 0x06, 0x07, 0x00, 0x00, 0x47, 0x0B, 0x0D, 0xA6, 0x0D, 0x15, 0x03, 0x00, 0x0B, 0x0D, 0x09, -/* 0001B2D0 */ 0xD5, 0x00, 0x8D, 0x02, 0x24, 0x0E, 0x00, 0x00, 0x6B, 0x0D, 0x0E, 0x00, 0x07, 0x02, 0x00, 0x5A, -/* 0001B2E0 */ 0x00, 0x0E, 0x5B, 0x01, 0x0B, 0x00, 0x00, 0xF2, 0x02, 0x0D, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 0001B2F0 */ 0x00, 0x47, 0x0B, 0x0D, 0x8D, 0x02, 0x37, 0x0E, 0x01, 0x00, 0x4B, 0x0E, 0x6B, 0x0D, 0x0E, 0x01, -/* 0001B300 */ 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0E, 0x5B, 0x01, 0x0B, 0x01, 0x00, 0xF2, 0x02, 0x0D, 0x0D, 0x01, -/* 0001B310 */ 0x00, 0x00, 0x00, 0x01, 0x00, 0x0F, 0x0D, 0x00, 0x0D, 0x12, 0x08, 0x00, 0x0B, 0x08, 0x11, 0x03, -/* 0001B320 */ 0x00, 0x0B, 0x09, 0x09, 0x5D, 0x00, 0x8D, 0x02, 0x03, 0x0E, 0x02, 0x00, 0x6B, 0x0D, 0x0E, 0x02, -/* 0001B330 */ 0x07, 0x04, 0x00, 0x5A, 0x00, 0x0E, 0x8D, 0x02, 0x0B, 0x0F, 0x03, 0x00, 0x07, 0x02, 0x00, 0x5A, -/* 0001B340 */ 0x00, 0x02, 0x5B, 0x01, 0x0B, 0x03, 0x00, 0xEE, 0x02, 0x0F, 0x0F, 0x03, 0x00, 0x5B, 0x01, 0x0F, -/* 0001B350 */ 0x02, 0x00, 0x5B, 0x02, 0x07, 0x02, 0x00, 0x47, 0x0F, 0x03, 0x01, 0x04, 0x01, 0x10, 0x08, 0x2F, -/* 0001B360 */ 0x0F, 0x0F, 0x10, 0x2F, 0x0F, 0x0F, 0x04, 0x01, 0x04, 0x01, 0x10, 0x09, 0x2F, 0x0F, 0x0F, 0x10, -/* 0001B370 */ 0x2F, 0x0F, 0x0F, 0x05, 0x5B, 0x03, 0x0F, 0x02, 0x00, 0xF2, 0x04, 0xFF, 0x0D, 0x02, 0x00, 0x00, -/* 0001B380 */ 0x00, 0x02, 0x00, 0x8D, 0x02, 0x37, 0x0E, 0x01, 0x00, 0x4B, 0x0E, 0x6B, 0x0D, 0x0E, 0x03, 0x07, -/* 0001B390 */ 0x02, 0x00, 0x5A, 0x00, 0x0E, 0x5B, 0x01, 0x0B, 0x04, 0x00, 0xF2, 0x02, 0x00, 0x0D, 0x03, 0x00, -/* 0001B3A0 */ 0x00, 0x00, 0x04, 0x00, 0x09, 0x08, 0x00, 0x47, 0x00, 0x0A, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, -/* 0001B3B0 */ 0x00, 0xFE, 0x38, 0x03, 0xB4, 0xFE, 0x8F, 0x02, 0x23, 0xFE, 0xA0, 0x57, 0x08, 0x02, 0x00, 0x00, -/* 0001B3C0 */ 0x00, 0x09, 0x00, 0x27, 0x00, 0x0A, 0x00, 0x27, 0x00, 0x22, 0x00, 0x2E, 0x00, 0x32, 0x00, 0x4C, -/* 0001B3D0 */ 0x00, 0x5D, 0x00, 0x77, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x08, 0x00, 0x15, 0x00, 0x00, 0xBF, 0x5C, -/* 0001B3E0 */ 0x0A, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0xEB, 0x01, 0x04, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x64, -/* 0001B3F0 */ 0x03, 0x33, 0xFE, 0xF2, 0x50, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x06, 0x06, 0xFE, 0xF2, 0x50, 0xFE, -/* 0001B400 */ 0xDD, 0x02, 0xFE, 0xDD, 0x02, 0x01, 0x0C, 0x0A, 0x11, 0x09, 0x53, 0x4C, 0x02, 0x01, 0x08, 0x04, -/* 0001B410 */ 0x06, 0x06, 0x06, 0x06, 0x10, 0x06, 0xFE, 0xC2, 0x03, 0x06, 0xFE, 0xAD, 0x03, 0x06, 0xFE, 0xC3, -/* 0001B420 */ 0x03, 0x01, 0xFF, 0x08, 0x05, 0xFE, 0xC4, 0x03, 0x05, 0xFE, 0xC5, 0x03, 0x05, 0xFE, 0xC6, 0x03, -/* 0001B430 */ 0xFE, 0x68, 0x01, 0x4F, 0x0F, 0x96, 0x11, 0x0A, 0x0B, 0x00, 0x00, 0x47, 0x0F, 0x11, 0xA6, 0x11, -/* 0001B440 */ 0x15, 0x03, 0x00, 0x0F, 0x11, 0x09, 0x49, 0x01, 0x0C, 0x03, 0x00, 0x0C, 0x02, 0x09, 0x22, 0x00, -/* 0001B450 */ 0x8D, 0x02, 0x24, 0x12, 0x00, 0x00, 0x6B, 0x11, 0x12, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x12, -/* 0001B460 */ 0x5B, 0x01, 0x0F, 0x00, 0x00, 0xF2, 0x02, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, -/* 0001B470 */ 0x0F, 0x11, 0x0C, 0x03, 0x00, 0x0C, 0x03, 0x09, 0x22, 0x00, 0x8D, 0x02, 0x24, 0x12, 0x00, 0x00, -/* 0001B480 */ 0x6B, 0x11, 0x12, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x12, 0x5B, 0x01, 0x0F, 0x01, 0x00, 0xF2, -/* 0001B490 */ 0x02, 0x11, 0x11, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x0F, 0x11, 0x0C, 0x03, 0x00, 0x0C, -/* 0001B4A0 */ 0x04, 0x09, 0x22, 0x00, 0x8D, 0x02, 0x24, 0x12, 0x00, 0x00, 0x6B, 0x11, 0x12, 0x02, 0x07, 0x02, -/* 0001B4B0 */ 0x00, 0x5A, 0x00, 0x12, 0x5B, 0x01, 0x0F, 0x02, 0x00, 0xF2, 0x02, 0x11, 0x11, 0x02, 0x00, 0x00, -/* 0001B4C0 */ 0x00, 0x02, 0x00, 0x47, 0x0F, 0x11, 0xA6, 0x11, 0x15, 0x03, 0x00, 0x0D, 0x11, 0x09, 0xBB, 0x00, -/* 0001B4D0 */ 0x8D, 0x02, 0x37, 0x12, 0x01, 0x00, 0x4B, 0x12, 0x6B, 0x11, 0x12, 0x03, 0x07, 0x03, 0x00, 0x5A, -/* 0001B4E0 */ 0x00, 0x12, 0x5B, 0x01, 0x0D, 0x03, 0x00, 0x5B, 0x02, 0x0F, 0x03, 0x00, 0xF2, 0x03, 0x11, 0x11, -/* 0001B4F0 */ 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x0C, 0x03, 0x00, 0x11, 0x05, 0x09, 0x8D, 0x00, 0x8D, 0x02, -/* 0001B500 */ 0x03, 0x12, 0x02, 0x00, 0x6B, 0x11, 0x12, 0x04, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x12, 0x8D, 0x02, -/* 0001B510 */ 0x0B, 0x13, 0x03, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x06, 0x5B, 0x01, 0x0F, 0x05, 0x00, 0xEE, -/* 0001B520 */ 0x02, 0x13, 0x13, 0x05, 0x00, 0x5B, 0x01, 0x13, 0x04, 0x00, 0x8D, 0x02, 0x0B, 0x13, 0x03, 0x00, -/* 0001B530 */ 0x07, 0x02, 0x00, 0x5A, 0x00, 0x06, 0x5B, 0x01, 0x0B, 0x06, 0x00, 0xEE, 0x02, 0x13, 0x13, 0x06, -/* 0001B540 */ 0x00, 0x5B, 0x02, 0x13, 0x04, 0x00, 0x47, 0x13, 0x07, 0x8D, 0x02, 0x37, 0x15, 0x01, 0x00, 0x4B, -/* 0001B550 */ 0x15, 0x6B, 0x14, 0x15, 0x05, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x15, 0x5B, 0x01, 0x0D, 0x07, 0x00, -/* 0001B560 */ 0x5B, 0x02, 0x09, 0x07, 0x00, 0xF2, 0x03, 0x14, 0x14, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x01, -/* 0001B570 */ 0x04, 0x01, 0x15, 0x14, 0x2F, 0x13, 0x13, 0x15, 0x2F, 0x13, 0x13, 0x08, 0x5B, 0x03, 0x13, 0x04, -/* 0001B580 */ 0x00, 0xF2, 0x04, 0xFF, 0x11, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x47, 0x00, 0x0F, 0x09, 0x08, -/* 0001B590 */ 0x00, 0x47, 0x00, 0x0E, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x39, 0x03, 0xFE, 0x37, -/* 0001B5A0 */ 0x03, 0xFE, 0x38, 0x03, 0xFE, 0x14, 0x03, 0xFE, 0x8F, 0x02, 0xBC, 0xFE, 0x3A, 0x51, 0x0D, 0x02, -/* 0001B5B0 */ 0x00, 0x00, 0x00, 0x09, 0x00, 0x28, 0x00, 0x0A, 0x00, 0x27, 0x00, 0x08, 0x00, 0x29, 0x00, 0x22, -/* 0001B5C0 */ 0x00, 0x45, 0x00, 0x08, 0x00, 0x28, 0x00, 0x22, 0x00, 0x3D, 0x00, 0x08, 0x00, 0x28, 0x00, 0x22, -/* 0001B5D0 */ 0x00, 0x3D, 0x00, 0x38, 0x00, 0x53, 0x00, 0x8D, 0x00, 0x84, 0x00, 0x06, 0x00, 0x21, 0x00, 0x08, -/* 0001B5E0 */ 0x00, 0x15, 0x00, 0x00, 0xBF, 0x5C, 0x28, 0xC1, 0x03, 0x88, 0x03, 0x00, 0xFE, 0xE0, 0x01, 0x08, -/* 0001B5F0 */ 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x3A, 0x03, 0x32, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0xE5, 0x4F, -/* 0001B600 */ 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0xE5, 0x4F, 0xD8, 0xD8, 0x01, 0x09, 0x06, 0x0A, -/* 0001B610 */ 0x07, 0x2A, 0x25, 0x02, 0x05, 0x01, 0x04, 0x02, 0x02, 0x02, 0x02, 0x09, 0x08, 0x01, 0x00, 0x01, -/* 0001B620 */ 0x02, 0x01, 0x20, 0xB0, 0x8D, 0x02, 0x0A, 0x0A, 0x00, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, -/* 0001B630 */ 0x5B, 0x01, 0x06, 0x00, 0x00, 0xEE, 0x02, 0x0A, 0x0A, 0x00, 0x00, 0x47, 0x07, 0x0A, 0x47, 0x08, -/* 0001B640 */ 0x03, 0x8D, 0x02, 0x21, 0x0A, 0x01, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x07, -/* 0001B650 */ 0x01, 0x00, 0xEE, 0x02, 0x0A, 0x0A, 0x01, 0x00, 0x0F, 0x6E, 0x00, 0x0A, 0x8D, 0x02, 0x20, 0x0A, -/* 0001B660 */ 0x02, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x07, 0x02, 0x00, 0xEE, 0x02, 0x0A, -/* 0001B670 */ 0x0A, 0x02, 0x00, 0x0E, 0x53, 0x00, 0x0A, 0x8D, 0x02, 0x37, 0x0B, 0x03, 0x00, 0x4B, 0x0B, 0x6B, -/* 0001B680 */ 0x0A, 0x0B, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0B, 0x47, 0x0C, 0x07, 0x8D, 0x02, 0x37, 0x0E, -/* 0001B690 */ 0x03, 0x00, 0x4B, 0x0E, 0x6B, 0x0D, 0x0E, 0x01, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0E, 0x5B, 0x01, -/* 0001B6A0 */ 0x04, 0x04, 0x00, 0x5B, 0x02, 0x05, 0x04, 0x00, 0xF2, 0x03, 0x0D, 0x0D, 0x01, 0x00, 0x00, 0x00, -/* 0001B6B0 */ 0x04, 0x00, 0x34, 0x0C, 0x0C, 0x0D, 0x00, 0x00, 0x5B, 0x01, 0x0C, 0x03, 0x00, 0xF2, 0x02, 0x0A, -/* 0001B6C0 */ 0x0A, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x47, 0x08, 0x0A, 0x47, 0x00, 0x08, 0x09, 0x02, 0x00, -/* 0001B6D0 */ 0xA6, 0x00, 0x24, 0x00, 0x1B, 0x29, 0xFE, 0xFF, 0x4F, 0x06, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, -/* 0001B6E0 */ 0x25, 0x00, 0x03, 0x00, 0x15, 0x00, 0x36, 0x00, 0x34, 0x00, 0x53, 0x00, 0x3B, 0x00, 0x08, 0x00, -/* 0001B6F0 */ 0x14, 0x00, 0x00, 0xBF, 0x5C, 0x08, 0x01, 0x00, 0x88, 0x03, 0x00, 0xFE, 0xDC, 0x01, 0x08, 0xA2, -/* 0001B700 */ 0x41, 0xC1, 0x01, 0xFE, 0x39, 0x03, 0x31, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0x7E, 0x4F, 0xFF, -/* 0001B710 */ 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x7E, 0x4F, 0x5C, 0x5C, 0x01, 0x03, 0x03, 0x05, 0x03, -/* 0001B720 */ 0x10, 0x0E, 0x02, 0x01, 0x01, 0x04, 0x08, 0x33, 0xA6, 0x05, 0x15, 0x03, 0x00, 0x03, 0x05, 0x09, -/* 0001B730 */ 0x1D, 0x00, 0x8D, 0x02, 0x07, 0x05, 0x00, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, -/* 0001B740 */ 0x03, 0x00, 0x00, 0xEE, 0x02, 0x05, 0x05, 0x00, 0x00, 0x47, 0x00, 0x05, 0x09, 0x05, 0x00, 0xA6, -/* 0001B750 */ 0x05, 0x47, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xA0, 0x4F, 0x02, 0x00, -/* 0001B760 */ 0x00, 0x00, 0x00, 0x31, 0x00, 0x39, 0x00, 0x00, 0xBF, 0x5C, 0x08, 0x01, 0x00, 0x88, 0x03, 0x00, -/* 0001B770 */ 0xFE, 0xD8, 0x01, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x38, 0x03, 0x30, 0xFF, 0x00, 0x00, 0x40, -/* 0001B780 */ 0x02, 0xFE, 0x26, 0x4F, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x26, 0x4F, 0x4D, 0x4D, -/* 0001B790 */ 0x01, 0x03, 0x03, 0x05, 0x03, 0x10, 0x0E, 0x02, 0x01, 0x01, 0x04, 0x08, 0x33, 0xA6, 0x05, 0x15, -/* 0001B7A0 */ 0x03, 0x00, 0x03, 0x05, 0x09, 0x1D, 0x00, 0x8D, 0x02, 0x0A, 0x05, 0x00, 0x00, 0x07, 0x02, 0x00, -/* 0001B7B0 */ 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x03, 0x00, 0x00, 0xEE, 0x02, 0x05, 0x05, 0x00, 0x00, 0x47, 0x00, -/* 0001B7C0 */ 0x05, 0x09, 0x05, 0x00, 0xA7, 0x05, 0x47, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, -/* 0001B7D0 */ 0xFE, 0x40, 0x4F, 0x02, 0x00, 0x00, 0x00, 0x00, 0x31, 0x00, 0x32, 0x00, 0x00, 0xBF, 0x5C, 0x08, -/* 0001B7E0 */ 0x01, 0x00, 0x88, 0x03, 0x00, 0xFE, 0xD4, 0x01, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x37, 0x03, -/* 0001B7F0 */ 0x2F, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0xC8, 0x4E, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, -/* 0001B800 */ 0xFE, 0xC8, 0x4E, 0x53, 0x53, 0x01, 0x03, 0x03, 0x05, 0x03, 0x10, 0x0E, 0x02, 0x01, 0x01, 0x04, -/* 0001B810 */ 0x08, 0x33, 0xA6, 0x05, 0x15, 0x03, 0x00, 0x03, 0x05, 0x09, 0x1D, 0x00, 0x8D, 0x02, 0x0B, 0x05, -/* 0001B820 */ 0x00, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x03, 0x00, 0x00, 0xEE, 0x02, 0x05, -/* 0001B830 */ 0x05, 0x00, 0x00, 0x47, 0x00, 0x05, 0x09, 0x05, 0x00, 0xA6, 0x05, 0x47, 0x00, 0x05, 0x09, 0x02, -/* 0001B840 */ 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xE2, 0x4E, 0x02, 0x00, 0x00, 0x00, 0x00, 0x31, 0x00, 0x38, -/* 0001B850 */ 0x00, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x03, 0x00, 0xFE, 0xCD, 0x01, 0x08, 0xA2, 0x41, -/* 0001B860 */ 0xC1, 0x01, 0xFE, 0x36, 0x03, 0x2E, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0x12, 0x4E, 0xFF, 0x00, -/* 0001B870 */ 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x12, 0x4E, 0xAB, 0xAB, 0x01, 0x04, 0x04, 0x06, 0x03, 0x17, -/* 0001B880 */ 0x15, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x05, 0x07, 0x08, 0x55, 0x14, 0x03, 0x00, 0x04, -/* 0001B890 */ 0x02, 0x09, 0x1A, 0x00, 0x8D, 0x02, 0x03, 0x07, 0x00, 0x00, 0x6B, 0x06, 0x07, 0x00, 0x07, 0x01, -/* 0001B8A0 */ 0x00, 0x5A, 0x00, 0x07, 0xF2, 0x01, 0xFF, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA6, 0x06, -/* 0001B8B0 */ 0x15, 0x03, 0x00, 0x04, 0x06, 0x09, 0x1D, 0x00, 0x8D, 0x02, 0x08, 0x06, 0x01, 0x00, 0x07, 0x02, -/* 0001B8C0 */ 0x00, 0x5A, 0x00, 0x03, 0x5B, 0x01, 0x04, 0x01, 0x00, 0xEE, 0x02, 0x06, 0x06, 0x01, 0x00, 0x47, -/* 0001B8D0 */ 0x00, 0x06, 0x09, 0x05, 0x00, 0xA6, 0x06, 0x47, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, -/* 0001B8E0 */ 0x00, 0xFE, 0x89, 0x02, 0xFE, 0x2C, 0x4E, 0x04, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x22, 0x00, -/* 0001B8F0 */ 0x1A, 0x00, 0x36, 0x00, 0x31, 0x00, 0x38, 0x00, 0x00, 0x3F, 0x5D, 0x09, 0xC1, 0x53, 0xAD, 0x25, -/* 0001B900 */ 0x00, 0xFE, 0x8F, 0x01, 0x1A, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x6D, 0x03, 0x2C, 0xFE, 0x67, 0x44, -/* 0001B910 */ 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x05, 0x05, 0xFE, 0x67, 0x44, 0xFE, 0x86, 0x09, 0xFE, 0x86, -/* 0001B920 */ 0x09, 0x05, 0xFE, 0xCA, 0x01, 0xFE, 0xB8, 0x03, 0xFE, 0xB9, 0x03, 0xFE, 0xBA, 0x03, 0xFE, 0xBB, -/* 0001B930 */ 0x03, 0x10, 0x0B, 0x16, 0x05, 0x7B, 0x77, 0x02, 0x01, 0x08, 0x0A, 0x09, 0x09, 0x09, 0x09, 0x01, -/* 0001B940 */ 0x02, 0x13, 0x14, 0x15, 0x16, 0x05, 0xFE, 0xBC, 0x03, 0x08, 0x06, 0xFE, 0xBD, 0x03, 0x07, 0x05, -/* 0001B950 */ 0xFE, 0xBE, 0x03, 0x01, 0x02, 0x05, 0xFE, 0xBF, 0x03, 0x01, 0xFF, 0x01, 0x00, 0xFE, 0xF8, 0x01, -/* 0001B960 */ 0x94, 0x02, 0x0D, 0x4F, 0x0F, 0x4F, 0x10, 0x4F, 0x11, 0x4F, 0x12, 0x4F, 0x18, 0x94, 0x03, 0x18, -/* 0001B970 */ 0x4F, 0x18, 0x94, 0x04, 0x18, 0x4F, 0x18, 0x94, 0x05, 0x18, 0x4F, 0x18, 0x94, 0x06, 0x18, 0x91, -/* 0001B980 */ 0x02, 0x18, 0x00, 0x00, 0x60, 0x18, 0x18, 0x00, 0x47, 0x0F, 0x18, 0xA6, 0x18, 0x94, 0x03, 0x18, -/* 0001B990 */ 0x14, 0x03, 0x00, 0x0F, 0x02, 0x09, 0x24, 0x00, 0x8D, 0x01, 0x08, 0x18, 0x01, 0x00, 0x4B, 0x18, -/* 0001B9A0 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x03, 0x5B, 0x01, 0x0B, 0x00, 0x00, 0x5B, 0x02, 0x0C, 0x00, 0x00, -/* 0001B9B0 */ 0xEE, 0x03, 0x18, 0x18, 0x00, 0x00, 0x94, 0x03, 0x18, 0x09, 0x21, 0x00, 0x8D, 0x01, 0x09, 0x18, -/* 0001B9C0 */ 0x02, 0x00, 0x4B, 0x18, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x03, 0x5B, 0x01, 0x0B, 0x01, 0x00, 0x5B, -/* 0001B9D0 */ 0x02, 0x0C, 0x01, 0x00, 0xEE, 0x03, 0x18, 0x18, 0x01, 0x00, 0x94, 0x03, 0x18, 0x91, 0x03, 0x18, -/* 0001B9E0 */ 0x03, 0x00, 0x60, 0x18, 0x18, 0x01, 0x94, 0x04, 0x18, 0x8D, 0x02, 0x35, 0x18, 0x04, 0x00, 0x4B, -/* 0001B9F0 */ 0x18, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x03, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 0001BA00 */ 0x19, 0x00, 0x00, 0x00, 0x91, 0x04, 0x1A, 0x05, 0x00, 0x79, 0x1A, 0x19, 0x02, 0x5B, 0x01, 0x19, -/* 0001BA10 */ 0x02, 0x00, 0xEE, 0x02, 0x18, 0x18, 0x02, 0x00, 0x94, 0x05, 0x18, 0x94, 0x06, 0x06, 0x8D, 0x02, -/* 0001BA20 */ 0x37, 0x19, 0x06, 0x00, 0x4B, 0x19, 0x6B, 0x18, 0x19, 0x03, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x19, -/* 0001BA30 */ 0x5B, 0x01, 0x0E, 0x03, 0x00, 0xD3, 0x00, 0x1A, 0x5B, 0x02, 0x1A, 0x03, 0x00, 0xF2, 0x03, 0xFF, -/* 0001BA40 */ 0x18, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x91, 0x06, 0x18, 0x07, 0x00, 0xA5, 0x18, 0x18, 0x04, -/* 0001BA50 */ 0x00, 0x00, 0x11, 0x03, 0x00, 0x18, 0x07, 0x09, 0xE4, 0x00, 0x8D, 0x02, 0x37, 0x19, 0x06, 0x00, -/* 0001BA60 */ 0x4B, 0x19, 0x6B, 0x18, 0x19, 0x05, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x19, 0x91, 0x04, 0x1A, 0x05, -/* 0001BA70 */ 0x00, 0x5B, 0x01, 0x1A, 0x04, 0x00, 0x5B, 0x02, 0x08, 0x04, 0x00, 0xF2, 0x03, 0x18, 0x18, 0x05, -/* 0001BA80 */ 0x00, 0x00, 0x00, 0x04, 0x00, 0x47, 0x10, 0x18, 0x14, 0x03, 0x00, 0x10, 0x09, 0x09, 0x16, 0x00, -/* 0001BA90 */ 0x91, 0x04, 0x19, 0x05, 0x00, 0x91, 0x06, 0x1A, 0x07, 0x00, 0x2F, 0x18, 0x19, 0x1A, 0x94, 0x04, -/* 0001BAA0 */ 0x18, 0xFA, 0x18, 0x09, 0x71, 0x00, 0x8D, 0x02, 0x37, 0x19, 0x06, 0x00, 0x4B, 0x19, 0x6B, 0x18, -/* 0001BAB0 */ 0x19, 0x06, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x19, 0x91, 0x04, 0x1A, 0x05, 0x00, 0x5B, 0x01, 0x1A, -/* 0001BAC0 */ 0x05, 0x00, 0x5B, 0x02, 0x0A, 0x05, 0x00, 0x5B, 0x03, 0x10, 0x05, 0x00, 0xF2, 0x04, 0x18, 0x18, -/* 0001BAD0 */ 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, 0x47, 0x11, 0x18, 0x8D, 0x02, 0x37, 0x19, 0x06, 0x00, 0x4B, -/* 0001BAE0 */ 0x19, 0x6B, 0x18, 0x19, 0x06, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x19, 0x91, 0x04, 0x1A, 0x05, 0x00, -/* 0001BAF0 */ 0x5B, 0x01, 0x1A, 0x06, 0x00, 0x5B, 0x02, 0x10, 0x06, 0x00, 0xF2, 0x03, 0x18, 0x18, 0x06, 0x00, -/* 0001BB00 */ 0x00, 0x00, 0x06, 0x00, 0x47, 0x12, 0x18, 0x91, 0x06, 0x18, 0x07, 0x00, 0x2F, 0x18, 0x11, 0x18, -/* 0001BB10 */ 0x2F, 0x18, 0x18, 0x12, 0x94, 0x04, 0x18, 0x8D, 0x02, 0x03, 0x19, 0x08, 0x00, 0x6B, 0x18, 0x19, -/* 0001BB20 */ 0x07, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x19, 0x91, 0x04, 0x1A, 0x05, 0x00, 0x5B, 0x01, 0x1A, 0x07, -/* 0001BB30 */ 0x00, 0xF2, 0x02, 0x18, 0x18, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x94, 0x04, 0x18, 0x91, 0x05, -/* 0001BB40 */ 0x18, 0x09, 0x00, 0x91, 0x04, 0x19, 0x05, 0x00, 0x75, 0x19, 0x18, 0x08, 0x91, 0x05, 0x00, 0x09, -/* 0001BB50 */ 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x01, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, -/* 0001BB60 */ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBD, 0x03, 0x00, 0x00, 0xFE, 0xC0, 0x03, 0xFE, 0xF7, -/* 0001BB70 */ 0x01, 0xFE, 0xBD, 0x03, 0x86, 0xC1, 0xFE, 0x0E, 0x03, 0xFE, 0x4C, 0x01, 0xFE, 0xD8, 0x01, 0xFE, -/* 0001BB80 */ 0xF7, 0x01, 0xFE, 0xC0, 0x44, 0x14, 0x1F, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x2F, 0x00, 0x05, 0x00, -/* 0001BB90 */ 0x0F, 0x00, 0x08, 0x00, 0x28, 0x00, 0x24, 0x00, 0x55, 0x00, 0x21, 0x00, 0x4C, 0x00, 0x0C, 0x00, -/* 0001BBA0 */ 0x24, 0x00, 0x32, 0x00, 0x3A, 0x00, 0x03, 0x00, 0x27, 0x00, 0x29, 0x00, 0x37, 0x05, 0x13, 0x00, -/* 0001BBB0 */ 0x31, 0x00, 0x2E, 0x00, 0x46, 0x00, 0x08, 0x00, 0x2B, 0x00, 0x16, 0x00, 0x48, 0x00, 0x33, 0x00, -/* 0001BBC0 */ 0x50, 0x00, 0x2E, 0x00, 0x4E, 0x00, 0x10, 0x00, 0x5C, 0x00, 0x27, 0x00, 0x4D, 0x00, 0x0E, 0x00, -/* 0001BBD0 */ 0x25, 0x00, 0x0A, 0x00, 0x13, 0x00, 0x00, 0xDB, 0xBB, 0x01, 0x00, 0xBF, 0x5C, 0x0E, 0xC1, 0x43, -/* 0001BBE0 */ 0xA8, 0x01, 0x00, 0xFE, 0x9B, 0x01, 0x29, 0xA2, 0x41, 0xD1, 0x00, 0x2D, 0xFE, 0x6D, 0x46, 0xFF, -/* 0001BBF0 */ 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x6D, 0x46, 0xFE, 0x0A, 0x05, 0xFE, 0x0A, 0x05, 0x41, -/* 0001BC00 */ 0x0B, 0x08, 0x0F, 0x04, 0x6B, 0x60, 0x03, 0x02, 0x01, 0x06, 0x08, 0x04, 0x04, 0x04, 0x04, 0x01, -/* 0001BC10 */ 0x0E, 0x0F, 0x08, 0x01, 0x00, 0x06, 0xFE, 0x5B, 0x03, 0x01, 0xFF, 0x06, 0xFE, 0xAF, 0x03, 0x06, -/* 0001BC20 */ 0xFE, 0xC1, 0x03, 0xFE, 0xB4, 0x01, 0x4F, 0x09, 0x4F, 0x0A, 0x4F, 0x0B, 0x4F, 0x0C, 0x4F, 0x0D, -/* 0001BC30 */ 0x8D, 0x02, 0x07, 0x10, 0x00, 0x00, 0x4B, 0x10, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, -/* 0001BC40 */ 0x08, 0x00, 0x00, 0x8D, 0x01, 0x04, 0x11, 0x01, 0x00, 0x4B, 0x11, 0x5B, 0x02, 0x11, 0x00, 0x00, -/* 0001BC50 */ 0xEE, 0x03, 0x10, 0x10, 0x00, 0x00, 0x47, 0x09, 0x10, 0x96, 0x10, 0x09, 0x03, 0x00, 0x00, 0x47, -/* 0001BC60 */ 0x0A, 0x10, 0x47, 0x0B, 0x04, 0x8D, 0x01, 0x03, 0x10, 0x02, 0x00, 0x4B, 0x10, 0x60, 0x10, 0x10, -/* 0001BC70 */ 0x00, 0x0E, 0xC4, 0x00, 0x10, 0x8D, 0x02, 0x0A, 0x10, 0x03, 0x00, 0x4B, 0x10, 0x07, 0x03, 0x00, -/* 0001BC80 */ 0x5A, 0x00, 0x02, 0x8D, 0x01, 0x03, 0x11, 0x02, 0x00, 0x4B, 0x11, 0x60, 0x11, 0x11, 0x01, 0x5B, -/* 0001BC90 */ 0x01, 0x11, 0x01, 0x00, 0x5B, 0x02, 0x08, 0x01, 0x00, 0xEE, 0x03, 0x10, 0x10, 0x01, 0x00, 0x47, -/* 0001BCA0 */ 0x0C, 0x10, 0xA6, 0x10, 0x15, 0x03, 0x00, 0x0C, 0x10, 0x09, 0x8D, 0x00, 0x15, 0x03, 0x00, 0x0C, -/* 0001BCB0 */ 0x04, 0x09, 0x54, 0x00, 0x8D, 0x03, 0x37, 0x11, 0x04, 0x00, 0x4B, 0x11, 0x6B, 0x10, 0x11, 0x02, -/* 0001BCC0 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x11, 0x5B, 0x01, 0x09, 0x02, 0x00, 0x5B, 0x02, 0x0C, 0x02, 0x00, -/* 0001BCD0 */ 0xF2, 0x03, 0x10, 0x10, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x15, 0x03, 0x00, 0x10, 0x05, 0x09, -/* 0001BCE0 */ 0x23, 0x00, 0x47, 0x0A, 0x0C, 0x47, 0x10, 0x06, 0x01, 0x04, 0x01, 0x11, 0x08, 0x2F, 0x10, 0x10, -/* 0001BCF0 */ 0x11, 0x2F, 0x10, 0x10, 0x06, 0x01, 0x04, 0x01, 0x11, 0x0A, 0x2F, 0x10, 0x10, 0x11, 0x2F, 0x10, -/* 0001BD00 */ 0x10, 0x04, 0x47, 0x0B, 0x10, 0x09, 0x31, 0x00, 0x8D, 0x03, 0x37, 0x11, 0x04, 0x00, 0x4B, 0x11, -/* 0001BD10 */ 0x6B, 0x10, 0x11, 0x02, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x11, 0x5B, 0x01, 0x09, 0x03, 0x00, 0x5B, -/* 0001BD20 */ 0x02, 0x07, 0x03, 0x00, 0xF2, 0x03, 0x10, 0x10, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x15, 0x03, -/* 0001BD30 */ 0x00, 0x10, 0x05, 0x09, 0x03, 0x00, 0x47, 0x0A, 0x07, 0x8D, 0x03, 0x37, 0x11, 0x04, 0x00, 0x4B, -/* 0001BD40 */ 0x11, 0x6B, 0x10, 0x11, 0x03, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x11, 0x8D, 0x01, 0x02, 0x12, 0x05, -/* 0001BD50 */ 0x00, 0x5B, 0x01, 0x12, 0x04, 0x00, 0x5B, 0x02, 0x08, 0x04, 0x00, 0xF2, 0x03, 0x10, 0x10, 0x03, -/* 0001BD60 */ 0x00, 0x00, 0x00, 0x04, 0x00, 0x0E, 0x4B, 0x00, 0x10, 0x8D, 0x01, 0x02, 0x10, 0x05, 0x00, 0x96, -/* 0001BD70 */ 0x10, 0x10, 0x08, 0x01, 0x00, 0x47, 0x0D, 0x10, 0x8D, 0x03, 0x37, 0x11, 0x04, 0x00, 0x4B, 0x11, -/* 0001BD80 */ 0x6B, 0x10, 0x11, 0x02, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x11, 0x5B, 0x01, 0x09, 0x05, 0x00, 0x5B, -/* 0001BD90 */ 0x02, 0x0D, 0x05, 0x00, 0xF2, 0x03, 0x10, 0x10, 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x15, 0x03, -/* 0001BDA0 */ 0x00, 0x10, 0x05, 0x09, 0x0E, 0x00, 0x15, 0x03, 0x00, 0x0D, 0x0A, 0x09, 0x06, 0x00, 0x47, 0x0A, -/* 0001BDB0 */ 0x0D, 0x47, 0x0B, 0x04, 0x8D, 0x01, 0x05, 0x10, 0x06, 0x00, 0x4B, 0x10, 0x9B, 0x0A, 0x10, 0x08, -/* 0001BDC0 */ 0x00, 0x00, 0x8D, 0x01, 0x06, 0x11, 0x07, 0x00, 0x4B, 0x11, 0x2F, 0x10, 0x11, 0x0B, 0x01, 0x34, -/* 0001BDD0 */ 0x01, 0x01, 0x06, 0x10, 0xFA, 0x10, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xB7, 0x03, 0xFE, 0xB7, 0x03, -/* 0001BDE0 */ 0xFE, 0x14, 0x03, 0xA7, 0xFE, 0x8A, 0x46, 0x15, 0x0A, 0x00, 0x00, 0x00, 0x29, 0x00, 0x46, 0x00, -/* 0001BDF0 */ 0x09, 0x00, 0x2A, 0x00, 0x03, 0x00, 0x31, 0x00, 0x10, 0x00, 0x23, 0x00, 0x2D, 0x00, 0x50, 0x00, -/* 0001BE00 */ 0x0A, 0x00, 0x38, 0x00, 0x08, 0x00, 0x35, 0x00, 0x2E, 0x00, 0x58, 0x00, 0x03, 0x00, 0x34, 0x00, -/* 0001BE10 */ 0x23, 0x00, 0x66, 0x00, 0x2E, 0x00, 0x4C, 0x00, 0x03, 0x00, 0x53, 0x00, 0x30, 0x00, 0x36, 0x00, -/* 0001BE20 */ 0x0F, 0x00, 0x33, 0x00, 0x2E, 0x00, 0x4E, 0x00, 0x08, 0x00, 0x36, 0x00, 0x03, 0x00, 0x2E, 0x00, -/* 0001BE30 */ 0x03, 0x00, 0x64, 0x00, 0x0E, 0x00, 0x21, 0x00, 0x16, 0x00, 0x3A, 0x00, 0x00, 0xBF, 0x7C, 0x09, -/* 0001BE40 */ 0xC3, 0x43, 0xA8, 0x09, 0x00, 0xFE, 0x5E, 0x01, 0x22, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x6C, 0x03, -/* 0001BE50 */ 0x2B, 0xFE, 0xFA, 0x3C, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0xFA, 0x3C, 0xFE, 0x46, -/* 0001BE60 */ 0x04, 0xFE, 0x46, 0x04, 0x01, 0x11, 0x0B, 0x16, 0x05, 0x6E, 0x5B, 0x23, 0x02, 0x02, 0x05, 0x02, -/* 0001BE70 */ 0x01, 0x05, 0x05, 0x05, 0x05, 0x02, 0x15, 0x16, 0x95, 0xFE, 0x15, 0x01, 0x01, 0x02, 0x06, 0xFE, -/* 0001BE80 */ 0xAF, 0x03, 0x01, 0xFF, 0x01, 0x04, 0x0C, 0x0B, 0x01, 0x01, 0x06, 0xFE, 0x5B, 0x03, 0x01, 0x03, -/* 0001BE90 */ 0xFE, 0xA2, 0x01, 0x4F, 0x0D, 0x4F, 0x0E, 0x4F, 0x0F, 0x4F, 0x10, 0x4F, 0x11, 0x4F, 0x12, 0x4F, -/* 0001BEA0 */ 0x13, 0x4F, 0x14, 0x8D, 0x02, 0x38, 0x19, 0x00, 0x00, 0x4B, 0x19, 0x6B, 0x18, 0x19, 0x00, 0x07, -/* 0001BEB0 */ 0x02, 0x00, 0x5A, 0x00, 0x19, 0xA5, 0x1A, 0x0C, 0x01, 0x00, 0x00, 0x43, 0x1A, 0x1A, 0x02, 0x5B, -/* 0001BEC0 */ 0x01, 0x1A, 0x00, 0x00, 0xF2, 0x02, 0xFF, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA5, 0x18, -/* 0001BED0 */ 0x0B, 0x02, 0x01, 0x00, 0x47, 0x0D, 0x18, 0x8D, 0x02, 0x37, 0x19, 0x01, 0x00, 0x4B, 0x19, 0x6B, -/* 0001BEE0 */ 0x18, 0x19, 0x03, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x19, 0x5B, 0x01, 0x0B, 0x01, 0x00, 0x47, 0x1A, -/* 0001BEF0 */ 0x03, 0x01, 0x04, 0x01, 0x1B, 0x0C, 0x2F, 0x1A, 0x1A, 0x1B, 0x2F, 0x1A, 0x1A, 0x03, 0x5B, 0x02, -/* 0001BF00 */ 0x1A, 0x01, 0x00, 0xF2, 0x03, 0x18, 0x18, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x0E, 0x18, -/* 0001BF10 */ 0x15, 0x03, 0x00, 0x0E, 0x04, 0x09, 0xBE, 0x00, 0x2F, 0x18, 0x0E, 0x05, 0x47, 0x0F, 0x18, 0x47, -/* 0001BF20 */ 0x10, 0x0F, 0x47, 0x11, 0x0F, 0x47, 0x12, 0x06, 0xEB, 0x00, 0xEC, 0x00, 0x0F, 0x76, 0x00, 0x12, -/* 0001BF30 */ 0x8D, 0x02, 0x37, 0x19, 0x01, 0x00, 0x4B, 0x19, 0x6B, 0x18, 0x19, 0x03, 0x07, 0x04, 0x00, 0x5A, -/* 0001BF40 */ 0x00, 0x19, 0x5B, 0x01, 0x0B, 0x02, 0x00, 0x5B, 0x02, 0x03, 0x02, 0x00, 0x5B, 0x03, 0x11, 0x02, -/* 0001BF50 */ 0x00, 0xF2, 0x04, 0x18, 0x18, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x47, 0x13, 0x18, 0x14, 0x03, -/* 0001BF60 */ 0x00, 0x13, 0x04, 0x09, 0x0A, 0x00, 0x35, 0x19, 0x0D, 0x11, 0x47, 0x18, 0x19, 0x09, 0x07, 0x00, -/* 0001BF70 */ 0x35, 0x19, 0x13, 0x11, 0x47, 0x18, 0x19, 0x47, 0x14, 0x18, 0x14, 0x03, 0x00, 0x14, 0x02, 0x09, -/* 0001BF80 */ 0x06, 0x00, 0x47, 0x12, 0x07, 0x09, 0x1B, 0x00, 0x14, 0x03, 0x00, 0x13, 0x04, 0x09, 0x09, 0x00, -/* 0001BF90 */ 0x47, 0x10, 0x0D, 0x47, 0x12, 0x07, 0x09, 0x0A, 0x00, 0x47, 0x10, 0x13, 0x2F, 0x18, 0x13, 0x08, -/* 0001BFA0 */ 0x47, 0x11, 0x18, 0x09, 0x84, 0xFF, 0xED, 0x00, 0x8D, 0x02, 0x37, 0x19, 0x01, 0x00, 0x4B, 0x19, -/* 0001BFB0 */ 0x6B, 0x18, 0x19, 0x04, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x19, 0x5B, 0x01, 0x0B, 0x03, 0x00, 0x5B, -/* 0001BFC0 */ 0x02, 0x0F, 0x03, 0x00, 0x5B, 0x03, 0x10, 0x03, 0x00, 0xF2, 0x04, 0x00, 0x18, 0x04, 0x00, 0x00, -/* 0001BFD0 */ 0x00, 0x03, 0x00, 0x09, 0x5D, 0x00, 0x8D, 0x02, 0x37, 0x19, 0x01, 0x00, 0x4B, 0x19, 0x6B, 0x18, -/* 0001BFE0 */ 0x19, 0x03, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x19, 0x5B, 0x01, 0x0B, 0x04, 0x00, 0x47, 0x1A, 0x03, -/* 0001BFF0 */ 0x01, 0x04, 0x01, 0x1B, 0x0C, 0x2F, 0x1A, 0x1A, 0x1B, 0x2F, 0x1A, 0x1A, 0x09, 0x5B, 0x02, 0x1A, -/* 0001C000 */ 0x04, 0x00, 0xF2, 0x03, 0x18, 0x18, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x47, 0x0E, 0x18, 0x15, -/* 0001C010 */ 0x03, 0x00, 0x0E, 0x04, 0x09, 0x15, 0x00, 0x2F, 0x18, 0x0E, 0x0A, 0x14, 0x03, 0x00, 0x18, 0x0D, -/* 0001C020 */ 0x09, 0x09, 0x00, 0x47, 0x00, 0x09, 0x09, 0x0A, 0x00, 0x09, 0x05, 0x00, 0xA6, 0x00, 0x09, 0x02, -/* 0001C030 */ 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x27, 0x03, 0xC1, 0xC1, 0xFE, 0x0E, 0x03, 0xFE, 0x4C, 0x01, -/* 0001C040 */ 0xFE, 0x1E, 0x3D, 0x18, 0x10, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x28, 0x00, 0x09, 0x00, 0x51, 0x00, -/* 0001C050 */ 0x39, 0x00, 0x3A, 0x00, 0x08, 0x00, 0x1E, 0x00, 0x07, 0x00, 0x23, 0x00, 0x03, 0x00, 0x1D, 0x00, -/* 0001C060 */ 0x03, 0x00, 0x1B, 0x00, 0x07, 0x00, 0x25, 0x00, 0x04, 0x00, 0x19, 0x00, 0x2E, 0x00, 0x3E, 0x00, -/* 0001C070 */ 0x1C, 0x00, 0x39, 0x00, 0x08, 0x00, 0x25, 0x00, 0x06, 0x00, 0x24, 0x00, 0x08, 0x00, 0x24, 0x00, -/* 0001C080 */ 0x03, 0x00, 0x20, 0x00, 0x06, 0x00, 0x3A, 0x00, 0x03, 0x00, 0x1D, 0x00, 0x0C, 0x00, 0x38, 0x00, -/* 0001C090 */ 0x2E, 0x00, 0x75, 0x00, 0x39, 0x00, 0x35, 0x00, 0x14, 0x00, 0x32, 0x00, 0x09, 0x00, 0x28, 0x00, -/* 0001C0A0 */ 0x07, 0x00, 0x20, 0x00, 0x00, 0xBF, 0x7C, 0x0B, 0xC3, 0x43, 0xA8, 0x09, 0x00, 0xFE, 0x3D, 0x01, -/* 0001C0B0 */ 0x1A, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x6A, 0x03, 0x2A, 0xFE, 0x58, 0x38, 0xFF, 0x00, 0x10, 0x01, -/* 0001C0C0 */ 0x00, 0x03, 0x03, 0xFE, 0x58, 0x38, 0xFE, 0x06, 0x03, 0xFE, 0x06, 0x03, 0x01, 0x0B, 0x06, 0x0D, -/* 0001C0D0 */ 0x04, 0x40, 0x3A, 0x29, 0x02, 0x01, 0x02, 0x04, 0x04, 0x01, 0x06, 0x06, 0x06, 0x06, 0x02, 0x0C, -/* 0001C0E0 */ 0x0D, 0x2A, 0xC6, 0x01, 0x00, 0x01, 0x01, 0x08, 0x07, 0xE8, 0x4F, 0x08, 0x4F, 0x09, 0x4F, 0x0A, -/* 0001C0F0 */ 0x4F, 0x0B, 0x8D, 0x02, 0x37, 0x10, 0x00, 0x00, 0x4B, 0x10, 0x6B, 0x0F, 0x10, 0x00, 0x07, 0x01, -/* 0001C100 */ 0x00, 0x5A, 0x00, 0x10, 0xF2, 0x01, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x08, -/* 0001C110 */ 0x0F, 0x47, 0x09, 0x02, 0xEB, 0x00, 0xEC, 0x00, 0xA5, 0x0F, 0x07, 0x01, 0x00, 0x00, 0x12, 0x03, -/* 0001C120 */ 0x00, 0x09, 0x0F, 0x09, 0x88, 0x00, 0x8D, 0x01, 0x0E, 0x0F, 0x01, 0x00, 0x4B, 0x0F, 0x07, 0x02, -/* 0001C130 */ 0x00, 0x5A, 0x00, 0x04, 0x96, 0x10, 0x07, 0x09, 0x00, 0x00, 0x5B, 0x01, 0x10, 0x01, 0x00, 0xEE, -/* 0001C140 */ 0x02, 0x0F, 0x0F, 0x01, 0x00, 0x47, 0x0A, 0x0F, 0x14, 0x03, 0x00, 0x0A, 0x05, 0x09, 0x03, 0x00, -/* 0001C150 */ 0x09, 0x55, 0x00, 0x8D, 0x01, 0x06, 0x0F, 0x02, 0x00, 0x4B, 0x0F, 0x07, 0x03, 0x00, 0x5A, 0x00, -/* 0001C160 */ 0x04, 0x5B, 0x01, 0x06, 0x02, 0x00, 0x60, 0x10, 0x0A, 0x02, 0x5B, 0x02, 0x10, 0x02, 0x00, 0xEE, -/* 0001C170 */ 0x03, 0x0F, 0x0F, 0x02, 0x00, 0x47, 0x0B, 0x0F, 0xA6, 0x0F, 0x15, 0x03, 0x00, 0x0B, 0x0F, 0x09, -/* 0001C180 */ 0x26, 0x00, 0x75, 0x0B, 0x08, 0x03, 0x96, 0x0F, 0x07, 0x09, 0x01, 0x00, 0x60, 0x10, 0x0A, 0x02, -/* 0001C190 */ 0x15, 0x03, 0x00, 0x0F, 0x10, 0x09, 0x08, 0x00, 0x60, 0x0F, 0x0A, 0x04, 0x75, 0x0F, 0x08, 0x05, -/* 0001C1A0 */ 0x47, 0x00, 0x08, 0xED, 0x00, 0x09, 0x28, 0x00, 0x28, 0x09, 0x09, 0x09, 0x68, 0xFF, 0xED, 0x00, -/* 0001C1B0 */ 0x8D, 0x01, 0x05, 0x0F, 0x03, 0x00, 0x4B, 0x0F, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x04, 0xEE, 0x01, -/* 0001C1C0 */ 0x0F, 0x0F, 0x03, 0x00, 0x75, 0x0F, 0x08, 0x03, 0x47, 0x00, 0x08, 0x09, 0x02, 0x00, 0xA6, 0x00, -/* 0001C1D0 */ 0x24, 0x00, 0x61, 0xC1, 0xFE, 0x28, 0x03, 0xFE, 0xF7, 0x01, 0xFE, 0xB6, 0x03, 0xFE, 0xB7, 0x03, -/* 0001C1E0 */ 0xFE, 0x91, 0x38, 0x10, 0x08, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x28, 0x00, 0x07, 0x00, 0x0B, 0x00, -/* 0001C1F0 */ 0x0E, 0x00, 0x30, 0x00, 0x22, 0x00, 0x45, 0x00, 0x08, 0x00, 0x2E, 0x00, 0x03, 0x00, 0x25, 0x00, -/* 0001C200 */ 0x25, 0x00, 0x60, 0x00, 0x0A, 0x00, 0x35, 0x00, 0x04, 0x00, 0x31, 0x00, 0x12, 0x00, 0x46, 0x00, -/* 0001C210 */ 0x08, 0x00, 0x56, 0x00, 0x08, 0x00, 0xF3, 0xFD, 0x08, 0x00, 0x3D, 0x02, 0x18, 0x00, 0x2C, 0x00, -/* 0001C220 */ 0x08, 0x00, 0x13, 0x00, 0x00, 0xBF, 0x5C, 0x0A, 0xC1, 0x13, 0x88, 0x21, 0x00, 0xFE, 0x25, 0x01, -/* 0001C230 */ 0x1D, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x69, 0x03, 0x29, 0xFE, 0x52, 0x35, 0xFF, 0x00, 0x10, 0x01, -/* 0001C240 */ 0x00, 0x03, 0x03, 0xFE, 0x52, 0x35, 0xFE, 0xA2, 0x01, 0xFE, 0xA2, 0x01, 0x01, 0x08, 0x0F, 0x14, -/* 0001C250 */ 0x04, 0x18, 0x15, 0x02, 0x01, 0x01, 0x01, 0x07, 0x07, 0x07, 0x07, 0x01, 0x13, 0x06, 0xFE, 0xB0, -/* 0001C260 */ 0x03, 0x01, 0x00, 0x06, 0xFE, 0xB1, 0x03, 0x01, 0x01, 0x06, 0xFE, 0xB2, 0x03, 0x01, 0x02, 0x06, -/* 0001C270 */ 0xFE, 0xB3, 0x03, 0x01, 0x03, 0x06, 0xFE, 0xB4, 0x03, 0x01, 0x04, 0x06, 0xFE, 0xB5, 0x03, 0x01, -/* 0001C280 */ 0x05, 0x07, 0x63, 0x4F, 0x11, 0x4F, 0x12, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 0001C290 */ 0x14, 0x00, 0x00, 0x00, 0x79, 0x03, 0x14, 0x00, 0x79, 0x05, 0x14, 0x01, 0x79, 0x07, 0x14, 0x02, -/* 0001C2A0 */ 0x79, 0x09, 0x14, 0x03, 0x79, 0x0B, 0x14, 0x04, 0x79, 0x0D, 0x14, 0x05, 0x47, 0x11, 0x14, 0x8D, -/* 0001C2B0 */ 0x02, 0x03, 0x15, 0x00, 0x00, 0x6B, 0x14, 0x15, 0x06, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x15, 0x96, -/* 0001C2C0 */ 0x16, 0x11, 0x0F, 0x00, 0x00, 0x5B, 0x01, 0x16, 0x00, 0x00, 0x5B, 0x02, 0x10, 0x00, 0x00, 0xF2, -/* 0001C2D0 */ 0x03, 0x14, 0x14, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x12, 0x14, 0x47, 0x00, 0x12, 0x09, -/* 0001C2E0 */ 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x06, 0x00, -/* 0001C2F0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0xB0, 0x03, 0x00, 0x00, 0xB1, 0x03, 0x00, 0x00, 0xB2, 0x03, 0x00, -/* 0001C300 */ 0x00, 0xB3, 0x03, 0x00, 0x00, 0xB4, 0x03, 0x00, 0x00, 0xB5, 0x03, 0x00, 0x00, 0xFE, 0xB0, 0x03, -/* 0001C310 */ 0xFE, 0xB1, 0x03, 0xFE, 0xB2, 0x03, 0xFE, 0xB3, 0x03, 0xFE, 0xB4, 0x03, 0xFE, 0xB5, 0x03, 0xFE, -/* 0001C320 */ 0xEA, 0x01, 0xFE, 0xE6, 0x35, 0x04, 0x04, 0x00, 0x00, 0x00, 0x28, 0x00, 0x9F, 0x00, 0x2D, 0x00, -/* 0001C330 */ 0x54, 0x00, 0x08, 0x00, 0x1A, 0x00, 0x00, 0xBF, 0x7C, 0x0B, 0xC3, 0x43, 0xA8, 0x09, 0x00, 0xF7, -/* 0001C340 */ 0x20, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x68, 0x03, 0x28, 0xFE, 0x88, 0x2E, 0xFF, 0x00, 0x10, 0x01, -/* 0001C350 */ 0x00, 0x03, 0x03, 0xFE, 0x88, 0x2E, 0xFE, 0x55, 0x04, 0xFE, 0x55, 0x04, 0x01, 0x0B, 0x09, 0x10, -/* 0001C360 */ 0x05, 0x41, 0x3A, 0x33, 0x02, 0x01, 0x02, 0x02, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x0F, -/* 0001C370 */ 0x10, 0x1D, 0xD9, 0x4E, 0x76, 0x06, 0xFE, 0xAF, 0x03, 0x0B, 0x08, 0x01, 0xFF, 0x01, 0x01, 0x01, -/* 0001C380 */ 0x00, 0x01, 0x02, 0xDD, 0x4F, 0x0B, 0x4F, 0x0C, 0x4F, 0x0D, 0x4F, 0x0E, 0xA6, 0x12, 0x14, 0x03, -/* 0001C390 */ 0x00, 0x0A, 0x12, 0x09, 0x05, 0x00, 0xA6, 0x00, 0x09, 0xC4, 0x00, 0x47, 0x0B, 0x0A, 0x47, 0x0C, -/* 0001C3A0 */ 0x02, 0xEB, 0x00, 0xEC, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, 0x5B, 0x01, 0x0B, 0x00, 0x00, -/* 0001C3B0 */ 0xEE, 0x02, 0x12, 0x09, 0x00, 0x00, 0x0E, 0x08, 0x00, 0x12, 0x47, 0x00, 0x0B, 0xED, 0x00, 0x09, -/* 0001C3C0 */ 0x9D, 0x00, 0x47, 0x0D, 0x05, 0xA5, 0x12, 0x0B, 0x00, 0x00, 0x00, 0x35, 0x12, 0x12, 0x06, 0x47, -/* 0001C3D0 */ 0x0E, 0x12, 0xEB, 0x01, 0xEC, 0x01, 0x10, 0x03, 0x00, 0x0E, 0x07, 0x09, 0x1A, 0x00, 0x96, 0x12, -/* 0001C3E0 */ 0x0B, 0x0E, 0x00, 0x00, 0x14, 0x03, 0x00, 0x12, 0x0C, 0x09, 0x06, 0x00, 0x47, 0x0D, 0x0E, 0x09, -/* 0001C3F0 */ 0x06, 0x00, 0x29, 0x0E, 0x0E, 0x09, 0xDC, 0xFF, 0xED, 0x01, 0x14, 0x03, 0x00, 0x0D, 0x05, 0x09, -/* 0001C400 */ 0x0A, 0x00, 0xA6, 0x00, 0xED, 0x00, 0x09, 0x56, 0x00, 0x09, 0x1E, 0x00, 0x10, 0x03, 0x00, 0x0D, -/* 0001C410 */ 0x08, 0x09, 0x16, 0x00, 0x35, 0x12, 0x0D, 0x08, 0x96, 0x12, 0x0B, 0x12, 0x01, 0x00, 0x14, 0x03, -/* 0001C420 */ 0x00, 0x12, 0x0C, 0x09, 0x04, 0x00, 0x35, 0x0D, 0x0D, 0x08, 0x8D, 0x02, 0x37, 0x13, 0x00, 0x00, -/* 0001C430 */ 0x4B, 0x13, 0x6B, 0x12, 0x13, 0x01, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x13, 0x5B, 0x01, 0x0B, 0x01, -/* 0001C440 */ 0x00, 0x5B, 0x02, 0x07, 0x01, 0x00, 0x5B, 0x03, 0x0D, 0x01, 0x00, 0xF2, 0x04, 0x12, 0x12, 0x01, -/* 0001C450 */ 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x0B, 0x12, 0x09, 0x48, 0xFF, 0xED, 0x00, 0xA6, 0x00, 0x24, -/* 0001C460 */ 0x00, 0xC1, 0xFE, 0x4C, 0x01, 0xFE, 0xB7, 0x2E, 0x13, 0x08, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x28, -/* 0001C470 */ 0x00, 0x05, 0x00, 0x25, 0x00, 0x03, 0x00, 0x20, 0x00, 0x07, 0x00, 0x37, 0x00, 0x15, 0x00, 0x34, -/* 0001C480 */ 0x00, 0x08, 0x00, 0x2D, 0x00, 0x03, 0x00, 0x1F, 0x00, 0x11, 0x00, 0x1E, 0x00, 0x08, 0x00, 0x1F, -/* 0001C490 */ 0x00, 0x0E, 0x00, 0x33, 0x00, 0x03, 0x00, 0x1D, 0x00, 0x03, 0x00, 0x99, 0xFF, 0x08, 0x00, 0x9B, -/* 0001C4A0 */ 0x00, 0x08, 0x00, 0x22, 0x00, 0x0A, 0x00, 0x25, 0x00, 0x1A, 0x00, 0x9A, 0x01, 0x04, 0x00, 0x25, -/* 0001C4B0 */ 0x00, 0x35, 0x00, 0x3A, 0x00, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xEA, 0x1C, -/* 0001C4C0 */ 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xE6, 0x02, 0x27, 0xFE, 0x6B, 0x2C, 0xFF, 0x00, 0x10, 0x01, 0x00, -/* 0001C4D0 */ 0x03, 0x03, 0xFE, 0x6B, 0x2C, 0x51, 0x51, 0x01, 0x05, 0x02, 0x05, 0x04, 0x0B, 0x0B, 0x02, 0x01, -/* 0001C4E0 */ 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x2B, 0x8D, 0x02, 0x03, 0x06, 0x00, 0x00, 0x6B, 0x05, 0x06, -/* 0001C4F0 */ 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x06, 0x5B, 0x01, 0x03, 0x00, 0x00, 0x5B, 0x02, 0x02, 0x00, -/* 0001C500 */ 0x00, 0xF2, 0x03, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, -/* 0001C510 */ 0x24, 0x00, 0xFE, 0xFD, 0x01, 0xFE, 0x88, 0x2C, 0x02, 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x33, -/* 0001C520 */ 0x00, 0x00, 0xBF, 0x4C, 0x00, 0xC0, 0x03, 0x80, 0x01, 0x00, 0xE4, 0x1C, 0xA2, 0x41, 0xC1, 0x00, -/* 0001C530 */ 0xFE, 0xE5, 0x02, 0x26, 0xFE, 0xD1, 0x2B, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0xD1, -/* 0001C540 */ 0x2B, 0x7B, 0x7B, 0x41, 0x02, 0x04, 0x05, 0x09, 0x09, 0x02, 0x01, 0x01, 0x01, 0x01, 0x03, 0x1C, -/* 0001C550 */ 0x00, 0x0A, 0x80, 0x03, 0x07, 0x00, 0x0A, 0x80, 0x1B, 0x60, 0x05, 0x04, 0x00, 0x14, 0x0C, 0x00, -/* 0001C560 */ 0x05, 0x02, 0x60, 0x05, 0x04, 0x00, 0x14, 0x03, 0x00, 0x05, 0x03, 0x09, 0x02, 0x00, 0x23, 0x04, -/* 0001C570 */ 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xFE, 0x00, 0xFE, 0xE9, 0x2B, 0x03, 0x00, 0x00, 0x00, 0x00, 0x15, -/* 0001C580 */ 0x00, 0x4A, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x01, 0x00, -/* 0001C590 */ 0xD2, 0x1D, 0xA0, 0x41, 0xC1, 0x00, 0xFE, 0x67, 0x03, 0x25, 0xFE, 0x84, 0x29, 0xFF, 0x00, 0x10, -/* 0001C5A0 */ 0x01, 0x00, 0x01, 0x01, 0xFE, 0x84, 0x29, 0xFE, 0xC9, 0x01, 0xFE, 0xC9, 0x01, 0x01, 0x04, 0x03, -/* 0001C5B0 */ 0x05, 0x02, 0x1A, 0x19, 0x02, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x04, 0x05, 0xFE, 0xAE, 0x03, -/* 0001C5C0 */ 0x66, 0x4F, 0x03, 0x8D, 0x01, 0x04, 0x05, 0x00, 0x00, 0x4B, 0x05, 0x0E, 0x19, 0x00, 0x05, 0x8D, -/* 0001C5D0 */ 0x02, 0x03, 0x05, 0x01, 0x00, 0x60, 0x05, 0x05, 0x00, 0x0E, 0x0B, 0x00, 0x05, 0x8D, 0x01, 0x04, -/* 0001C5E0 */ 0x00, 0x00, 0x00, 0x4B, 0x00, 0x09, 0x3D, 0x00, 0x8D, 0x02, 0x03, 0x06, 0x01, 0x00, 0x6B, 0x05, -/* 0001C5F0 */ 0x06, 0x01, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x06, 0xF2, 0x01, 0x05, 0x05, 0x01, 0x00, 0x00, 0x00, -/* 0001C600 */ 0x00, 0x00, 0x47, 0x03, 0x05, 0x0F, 0x09, 0x00, 0x03, 0x01, 0x34, 0x01, 0x01, 0x04, 0x02, 0x09, -/* 0001C610 */ 0x06, 0x00, 0x01, 0x34, 0x01, 0x01, 0x04, 0x03, 0x8D, 0x01, 0x04, 0x00, 0x00, 0x00, 0x4B, 0x00, -/* 0001C620 */ 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x61, 0x03, 0xFE, 0xDF, 0x01, 0xFE, 0x9A, 0x29, -/* 0001C630 */ 0x08, 0x02, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x39, 0x00, 0x0B, 0x00, 0x2B, 0x00, 0x1D, 0x00, 0x34, -/* 0001C640 */ 0x00, 0x04, 0x00, 0x9C, 0x00, 0x09, 0x00, 0x35, 0x00, 0x06, 0x00, 0x2D, 0x00, 0x0D, 0x00, 0x1C, -/* 0001C650 */ 0x00, 0x00, 0xBF, 0x4C, 0x02, 0xC0, 0x03, 0x80, 0x01, 0x00, 0xC1, 0x13, 0xA2, 0x41, 0xC1, 0x00, -/* 0001C660 */ 0xFE, 0xFD, 0x02, 0x24, 0xFE, 0x00, 0x26, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x00, -/* 0001C670 */ 0x26, 0xB7, 0xB7, 0x01, 0x03, 0x03, 0x05, 0x0C, 0x0C, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, -/* 0001C680 */ 0xFE, 0xAD, 0x03, 0x26, 0x0E, 0x0B, 0x00, 0x04, 0x2C, 0x05, 0x04, 0x15, 0x03, 0x00, 0x05, 0x02, -/* 0001C690 */ 0x09, 0x0A, 0x00, 0x60, 0x00, 0x03, 0x00, 0x09, 0x0E, 0x00, 0x09, 0x09, 0x00, 0x96, 0x00, 0x03, -/* 0001C6A0 */ 0x04, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x2C, 0x03, 0xFE, 0x25, 0x26, -/* 0001C6B0 */ 0x04, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x33, 0x00, 0x0A, 0x00, 0x38, 0x00, 0x0B, 0x00, 0x26, -/* 0001C6C0 */ 0x00, 0x00, 0xFF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x03, 0x00, 0xA3, 0x08, 0xA2, 0x41, 0xC1, 0x01, -/* 0001C6D0 */ 0xFE, 0xAB, 0x03, 0x23, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0x03, 0x21, 0xFF, 0x00, 0x10, 0x01, -/* 0001C6E0 */ 0x00, 0x03, 0x03, 0xFE, 0x03, 0x21, 0x68, 0x68, 0x06, 0x01, 0x07, 0x03, 0x06, 0x06, 0x16, 0x12, -/* 0001C6F0 */ 0x01, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x05, 0x05, 0xFE, 0xAC, 0x03, 0x53, 0x0E, 0x08, 0x00, -/* 0001C700 */ 0x03, 0xA6, 0x06, 0x47, 0x00, 0x06, 0x09, 0x40, 0x00, 0x8D, 0x01, 0x03, 0x07, 0x00, 0x00, 0x6B, -/* 0001C710 */ 0x06, 0x07, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x07, 0x47, 0x08, 0x04, 0x0F, 0x17, 0x00, 0x04, -/* 0001C720 */ 0x8D, 0x01, 0x0D, 0x09, 0x01, 0x00, 0x07, 0x02, 0x00, 0x5B, 0x01, 0x02, 0x01, 0x00, 0xC2, 0x02, -/* 0001C730 */ 0x09, 0x09, 0x01, 0x00, 0x47, 0x08, 0x09, 0x5B, 0x01, 0x08, 0x00, 0x00, 0xF2, 0x02, 0x06, 0x06, -/* 0001C740 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, -/* 0001C750 */ 0xFE, 0xD6, 0x01, 0xFE, 0x17, 0x21, 0x02, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x53, 0x00, 0x00, -/* 0001C760 */ 0xFF, 0x5C, 0x09, 0xC1, 0x03, 0x88, 0x23, 0x00, 0xA2, 0x08, 0xA0, 0x41, 0xE1, 0x01, 0xFE, 0xAA, -/* 0001C770 */ 0x03, 0x22, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0x6C, 0x20, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, -/* 0001C780 */ 0x01, 0xFE, 0x6C, 0x20, 0x8D, 0x8D, 0x06, 0x02, 0x05, 0x04, 0x06, 0x03, 0x17, 0x15, 0x01, 0x01, -/* 0001C790 */ 0x02, 0x01, 0x03, 0x03, 0x03, 0x03, 0x05, 0x07, 0x01, 0x03, 0x5F, 0xAC, 0x04, 0xA5, 0x06, 0x04, -/* 0001C7A0 */ 0x00, 0x00, 0x00, 0x14, 0x03, 0x00, 0x06, 0x03, 0x09, 0x2B, 0x00, 0x8D, 0x01, 0x03, 0x07, 0x00, -/* 0001C7B0 */ 0x00, 0x6B, 0x06, 0x07, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x07, 0x01, 0x4F, 0x01, 0x08, 0x04, -/* 0001C7C0 */ 0x5B, 0x01, 0x08, 0x00, 0x00, 0xF0, 0x02, 0x06, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 0001C7D0 */ 0x47, 0x00, 0x06, 0x09, 0x1D, 0x00, 0x8D, 0x01, 0x03, 0x07, 0x00, 0x00, 0x6B, 0x06, 0x07, 0x02, -/* 0001C7E0 */ 0x07, 0x01, 0x00, 0x5A, 0x00, 0x07, 0xF2, 0x01, 0x06, 0x06, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, -/* 0001C7F0 */ 0x47, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, -/* 0001C800 */ 0x00, 0x05, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xC1, 0xFE, 0x8F, 0x02, 0xFE, 0x90, -/* 0001C810 */ 0x02, 0xFE, 0x7B, 0x20, 0x02, 0x02, 0x00, 0x00, 0x00, 0x5B, 0x00, 0x7D, 0x00, 0x00, 0xFF, 0x5C, -/* 0001C820 */ 0x08, 0xC1, 0x03, 0x88, 0x03, 0x00, 0x9E, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0xA9, 0x03, 0x21, -/* 0001C830 */ 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0xD2, 0x1F, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, -/* 0001C840 */ 0xD2, 0x1F, 0x74, 0x74, 0x02, 0x01, 0x06, 0x03, 0x07, 0x06, 0x0E, 0x0E, 0x01, 0x01, 0x02, 0x01, -/* 0001C850 */ 0x01, 0x01, 0x01, 0x06, 0x08, 0x37, 0x8D, 0x01, 0x06, 0x07, 0x00, 0x00, 0x07, 0x05, 0x00, 0x5A, -/* 0001C860 */ 0x00, 0x02, 0x8D, 0x01, 0x03, 0x08, 0x01, 0x00, 0x60, 0x08, 0x08, 0x00, 0x5B, 0x01, 0x08, 0x00, -/* 0001C870 */ 0x00, 0x5B, 0x02, 0x03, 0x00, 0x00, 0x5B, 0x03, 0x04, 0x00, 0x00, 0x5B, 0x04, 0x05, 0x00, 0x00, -/* 0001C880 */ 0xEE, 0x05, 0x00, 0x07, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x65, 0x02, -/* 0001C890 */ 0xFE, 0xEC, 0x1F, 0x02, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x59, 0x00, 0x00, 0xFF, 0x5C, 0x08, -/* 0001C8A0 */ 0xC1, 0x03, 0x88, 0x03, 0x00, 0x9D, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0xA8, 0x03, 0x20, 0xFF, -/* 0001C8B0 */ 0x00, 0x00, 0x40, 0x02, 0xFE, 0x62, 0x1F, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x62, -/* 0001C8C0 */ 0x1F, 0x66, 0x66, 0x02, 0x01, 0x05, 0x03, 0x06, 0x05, 0x0D, 0x0D, 0x01, 0x01, 0x02, 0x01, 0x01, -/* 0001C8D0 */ 0x01, 0x01, 0x05, 0x08, 0x32, 0x8D, 0x01, 0x06, 0x06, 0x00, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, -/* 0001C8E0 */ 0x02, 0x8D, 0x01, 0x03, 0x07, 0x01, 0x00, 0x60, 0x07, 0x07, 0x00, 0x5B, 0x01, 0x07, 0x00, 0x00, -/* 0001C8F0 */ 0x5B, 0x02, 0x03, 0x00, 0x00, 0x5B, 0x03, 0x04, 0x00, 0x00, 0xEE, 0x04, 0x00, 0x06, 0x00, 0x00, -/* 0001C900 */ 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x66, 0x02, 0xFE, 0x75, 0x1F, 0x02, 0x00, 0x00, -/* 0001C910 */ 0x00, 0x00, 0x30, 0x00, 0x52, 0x00, 0x00, 0xFF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x03, 0x00, 0x9B, -/* 0001C920 */ 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0xA7, 0x03, 0x1F, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0xFB, -/* 0001C930 */ 0x1E, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0xFB, 0x1E, 0x5C, 0x5C, 0x02, 0x01, 0x04, -/* 0001C940 */ 0x03, 0x05, 0x04, 0x0C, 0x0C, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x04, 0x08, 0x2D, 0x8D, -/* 0001C950 */ 0x01, 0x06, 0x05, 0x00, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x8D, 0x01, 0x03, 0x06, 0x01, -/* 0001C960 */ 0x00, 0x60, 0x06, 0x06, 0x00, 0x5B, 0x01, 0x06, 0x00, 0x00, 0x5B, 0x02, 0x03, 0x00, 0x00, 0xEE, -/* 0001C970 */ 0x03, 0x00, 0x05, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x63, 0x02, 0xFE, -/* 0001C980 */ 0x0B, 0x1F, 0x02, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x4B, 0x00, 0x00, 0xFF, 0x5C, 0x08, 0xC1, -/* 0001C990 */ 0x03, 0x88, 0x03, 0x00, 0x94, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0xA6, 0x03, 0x1E, 0xFF, 0x00, -/* 0001C9A0 */ 0x00, 0x40, 0x02, 0xFE, 0xF1, 0x1D, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0xF1, 0x1D, -/* 0001C9B0 */ 0x3E, 0x3E, 0x02, 0x01, 0x04, 0x03, 0x05, 0x03, 0x0F, 0x0D, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -/* 0001C9C0 */ 0x01, 0x04, 0x01, 0x00, 0x37, 0x14, 0x03, 0x00, 0x03, 0x02, 0x09, 0x06, 0x00, 0x47, 0x00, 0x02, -/* 0001C9D0 */ 0x09, 0x22, 0x00, 0x8D, 0x01, 0x03, 0x06, 0x00, 0x00, 0x6B, 0x05, 0x06, 0x00, 0x07, 0x02, 0x00, -/* 0001C9E0 */ 0x5A, 0x00, 0x06, 0x5B, 0x01, 0x03, 0x00, 0x00, 0xF2, 0x02, 0x05, 0x05, 0x00, 0x00, 0x00, 0x00, -/* 0001C9F0 */ 0x00, 0x00, 0x47, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x7A, 0x02, 0xFE, -/* 0001CA00 */ 0xFC, 0x1D, 0x02, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x32, 0x00, 0x00, 0xFF, 0x5C, 0x08, 0xC1, -/* 0001CA10 */ 0x03, 0x88, 0x03, 0x00, 0x90, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0xA5, 0x03, 0x1D, 0xFF, 0x00, -/* 0001CA20 */ 0x00, 0x40, 0x02, 0xFE, 0x04, 0x1D, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x02, 0xFE, 0x04, 0x1D, -/* 0001CA30 */ 0x5C, 0x5C, 0x02, 0x01, 0x05, 0x04, 0x07, 0x04, 0x0D, 0x0C, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -/* 0001CA40 */ 0x01, 0x06, 0x07, 0x08, 0x33, 0x15, 0x03, 0x00, 0x05, 0x03, 0x47, 0x05, 0x02, 0x8D, 0x01, 0x03, -/* 0001CA50 */ 0x08, 0x00, 0x00, 0x6B, 0x07, 0x08, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x08, 0x5B, 0x01, 0x04, -/* 0001CA60 */ 0x00, 0x00, 0x5B, 0x02, 0x05, 0x00, 0x00, 0xF2, 0x03, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 0001CA70 */ 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x81, 0x02, 0xFE, 0x1B, 0x1D, 0x03, 0x00, -/* 0001CA80 */ 0x00, 0x00, 0x00, 0x08, 0x00, 0x10, 0x00, 0x29, 0x00, 0x34, 0x00, 0x00, 0xFF, 0x5C, 0x08, 0xC1, -/* 0001CA90 */ 0x03, 0x88, 0x03, 0x00, 0x8F, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0xA4, 0x03, 0x1C, 0xFF, 0x00, -/* 0001CAA0 */ 0x00, 0x40, 0x02, 0xFE, 0xAC, 0x1C, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x01, 0xFE, 0xAC, 0x1C, -/* 0001CAB0 */ 0x4E, 0x4E, 0x02, 0x01, 0x04, 0x04, 0x06, 0x03, 0x0C, 0x0B, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -/* 0001CAC0 */ 0x01, 0x05, 0x07, 0x08, 0x2E, 0x15, 0x03, 0x00, 0x04, 0x03, 0x47, 0x04, 0x02, 0x8D, 0x01, 0x03, -/* 0001CAD0 */ 0x07, 0x00, 0x00, 0x6B, 0x06, 0x07, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x07, 0x5B, 0x01, 0x04, -/* 0001CAE0 */ 0x00, 0x00, 0xF2, 0x02, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, -/* 0001CAF0 */ 0x00, 0x24, 0x00, 0xFE, 0x67, 0x02, 0xFE, 0xB3, 0x1C, 0x03, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, -/* 0001CB00 */ 0x10, 0x00, 0x24, 0x00, 0x36, 0x00, 0x00, 0xFF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x03, 0x00, 0x8A, -/* 0001CB10 */ 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0xA3, 0x03, 0x1B, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0xB6, -/* 0001CB20 */ 0x1B, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, 0xB6, 0x1B, 0xA3, 0xA3, 0x02, 0x41, 0x06, -/* 0001CB30 */ 0x03, 0x07, 0x05, 0x13, 0x13, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x06, 0x07, 0x53, 0x8D, -/* 0001CB40 */ 0x01, 0x37, 0x08, 0x00, 0x00, 0x4B, 0x08, 0x6B, 0x07, 0x08, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, -/* 0001CB50 */ 0x08, 0x5B, 0x01, 0x05, 0x00, 0x00, 0x5B, 0x02, 0x02, 0x00, 0x00, 0xF2, 0x03, 0xFF, 0x07, 0x00, -/* 0001CB60 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x8D, 0x01, 0x03, 0x08, 0x01, 0x00, 0x6B, 0x07, 0x08, 0x01, 0x07, -/* 0001CB70 */ 0x04, 0x00, 0x5A, 0x00, 0x08, 0x5B, 0x01, 0x03, 0x01, 0x00, 0x5B, 0x02, 0x04, 0x01, 0x00, 0x5B, -/* 0001CB80 */ 0x03, 0x05, 0x01, 0x00, 0xF2, 0x04, 0xFF, 0x07, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0xA6, 0x00, -/* 0001CB90 */ 0x24, 0x00, 0xFE, 0x86, 0x01, 0xFE, 0x68, 0x02, 0xFE, 0xE2, 0x1B, 0x03, 0x00, 0x00, 0x00, 0x00, -/* 0001CBA0 */ 0x26, 0x00, 0x2A, 0x00, 0x2B, 0x00, 0x4C, 0x00, 0x00, 0xFF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x03, -/* 0001CBB0 */ 0x00, 0x88, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0xA2, 0x03, 0x1A, 0xFF, 0x00, 0x00, 0x40, 0x02, -/* 0001CBC0 */ 0xFE, 0xAD, 0x1A, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0xAD, 0x1A, 0x72, 0x72, 0x02, -/* 0001CBD0 */ 0x01, 0x05, 0x03, 0x06, 0x05, 0x0D, 0x0D, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x05, 0x08, -/* 0001CBE0 */ 0x32, 0x8D, 0x01, 0x06, 0x06, 0x00, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8D, 0x01, 0x03, -/* 0001CBF0 */ 0x07, 0x01, 0x00, 0x60, 0x07, 0x07, 0x00, 0x5B, 0x01, 0x07, 0x00, 0x00, 0x5B, 0x02, 0x03, 0x00, -/* 0001CC00 */ 0x00, 0x5B, 0x03, 0x04, 0x00, 0x00, 0xEE, 0x04, 0x00, 0x06, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, -/* 0001CC10 */ 0x00, 0x24, 0x00, 0xFE, 0x6B, 0x02, 0xFE, 0xC7, 0x1A, 0x02, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, -/* 0001CC20 */ 0x57, 0x00, 0x00, 0x7F, 0x5D, 0x08, 0xC1, 0x03, 0x8D, 0x07, 0x00, 0x85, 0x08, 0xA2, 0x41, 0xC1, -/* 0001CC30 */ 0x01, 0xFE, 0xA0, 0x03, 0x18, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0x16, 0x1A, 0x01, 0xFF, 0x00, -/* 0001CC40 */ 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x16, 0x1A, 0x53, 0x53, 0x02, 0x01, 0xFE, 0xA1, 0x03, 0x07, -/* 0001CC50 */ 0x02, 0x06, 0x04, 0x0F, 0x0F, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x03, 0x04, 0x05, 0x38, -/* 0001CC60 */ 0x94, 0x02, 0x02, 0x8D, 0x01, 0x37, 0x07, 0x00, 0x00, 0x4B, 0x07, 0x6B, 0x06, 0x07, 0x00, 0x07, -/* 0001CC70 */ 0x03, 0x00, 0x5A, 0x00, 0x07, 0x91, 0x02, 0x08, 0x01, 0x00, 0x5B, 0x01, 0x08, 0x00, 0x00, 0xD3, -/* 0001CC80 */ 0x00, 0x08, 0x5B, 0x02, 0x08, 0x00, 0x00, 0xF2, 0x03, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 0001CC90 */ 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x7E, 0xFE, 0x26, 0x1A, 0x02, 0x03, 0x00, 0x00, -/* 0001CCA0 */ 0x00, 0x33, 0x00, 0x42, 0x00, 0x00, 0xAA, 0xCC, 0x01, 0x00, 0xBF, 0x5C, 0x08, 0xC1, 0x03, 0x88, -/* 0001CCB0 */ 0x03, 0x00, 0x85, 0x2F, 0xA2, 0x41, 0xD0, 0x00, 0x19, 0xFE, 0x01, 0x10, 0xFE, 0x3D, 0x1A, 0xFF, -/* 0001CCC0 */ 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x3D, 0x1A, 0x28, 0x28, 0x01, 0x06, 0x02, 0x05, 0x04, -/* 0001CCD0 */ 0x0E, 0x0E, 0x02, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x04, 0x37, 0x8D, 0x02, 0x37, 0x06, 0x00, -/* 0001CCE0 */ 0x00, 0x4B, 0x06, 0x6B, 0x05, 0x06, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x06, 0x8D, 0x01, 0x02, -/* 0001CCF0 */ 0x07, 0x01, 0x00, 0x5B, 0x01, 0x07, 0x00, 0x00, 0x5B, 0x02, 0x02, 0x00, 0x00, 0xF2, 0x03, 0x05, -/* 0001CD00 */ 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x00, 0x05, 0x03, 0x09, 0x02, 0x00, 0xA6, 0x00, -/* 0001CD10 */ 0x24, 0x00, 0xFE, 0x14, 0x03, 0xFE, 0x47, 0x1A, 0x02, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x1E, -/* 0001CD20 */ 0x00, 0x00, 0xFF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x03, 0x00, 0x84, 0x08, 0xA2, 0x41, 0xC1, 0x01, -/* 0001CD30 */ 0xFE, 0x9F, 0x03, 0x17, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0xA3, 0x19, 0xFF, 0x00, 0x10, 0x01, -/* 0001CD40 */ 0x00, 0x03, 0x03, 0xFE, 0xA3, 0x19, 0x69, 0x69, 0x02, 0x01, 0x05, 0x03, 0x06, 0x05, 0x0D, 0x0D, -/* 0001CD50 */ 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x05, 0x08, 0x32, 0x8D, 0x01, 0x06, 0x06, 0x00, 0x00, -/* 0001CD60 */ 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8D, 0x01, 0x03, 0x07, 0x01, 0x00, 0x60, 0x07, 0x07, 0x00, -/* 0001CD70 */ 0x5B, 0x01, 0x07, 0x00, 0x00, 0x5B, 0x02, 0x03, 0x00, 0x00, 0x5B, 0x03, 0x04, 0x00, 0x00, 0xEE, -/* 0001CD80 */ 0x04, 0x00, 0x06, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x5B, 0x02, 0xFE, -/* 0001CD90 */ 0xB9, 0x19, 0x02, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x52, 0x00, 0x00, 0xFF, 0x5C, 0x08, 0xC1, -/* 0001CDA0 */ 0x03, 0x88, 0x23, 0x00, 0x83, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x9E, 0x03, 0x16, 0xFF, 0x00, -/* 0001CDB0 */ 0x00, 0x40, 0x02, 0xFE, 0x2C, 0x19, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x2C, 0x19, -/* 0001CDC0 */ 0x6D, 0x6D, 0x02, 0x81, 0x05, 0x03, 0x06, 0x05, 0x0E, 0x0E, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, -/* 0001CDD0 */ 0x01, 0x05, 0x08, 0x3C, 0x8D, 0x01, 0x06, 0x06, 0x00, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, -/* 0001CDE0 */ 0x8D, 0x01, 0x03, 0x07, 0x01, 0x00, 0x60, 0x07, 0x07, 0x00, 0x5B, 0x01, 0x07, 0x00, 0x00, 0x5B, -/* 0001CDF0 */ 0x02, 0x03, 0x00, 0x00, 0x01, 0x4F, 0x01, 0x07, 0x04, 0x5B, 0x03, 0x07, 0x00, 0x00, 0xF0, 0x04, -/* 0001CE00 */ 0x00, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, -/* 0001CE10 */ 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, -/* 0001CE20 */ 0xFE, 0x5A, 0x02, 0xFE, 0x44, 0x19, 0x02, 0x00, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x54, 0x00, 0x00, -/* 0001CE30 */ 0xFF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x03, 0x00, 0x82, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x9D, -/* 0001CE40 */ 0x03, 0x15, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0xAF, 0x18, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, -/* 0001CE50 */ 0x04, 0xFE, 0xAF, 0x18, 0x73, 0x73, 0x02, 0x01, 0x06, 0x03, 0x07, 0x06, 0x0E, 0x0E, 0x01, 0x01, -/* 0001CE60 */ 0x02, 0x01, 0x01, 0x01, 0x01, 0x06, 0x08, 0x37, 0x8D, 0x01, 0x06, 0x07, 0x00, 0x00, 0x07, 0x05, -/* 0001CE70 */ 0x00, 0x5A, 0x00, 0x02, 0x8D, 0x01, 0x03, 0x08, 0x01, 0x00, 0x60, 0x08, 0x08, 0x00, 0x5B, 0x01, -/* 0001CE80 */ 0x08, 0x00, 0x00, 0x5B, 0x02, 0x03, 0x00, 0x00, 0x5B, 0x03, 0x04, 0x00, 0x00, 0x5B, 0x04, 0x05, -/* 0001CE90 */ 0x00, 0x00, 0xEE, 0x05, 0x00, 0x07, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, -/* 0001CEA0 */ 0x62, 0x02, 0xFE, 0xCA, 0x18, 0x02, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x57, 0x00, 0x00, 0xFF, -/* 0001CEB0 */ 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x03, 0x00, 0x81, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x9C, 0x03, -/* 0001CEC0 */ 0x14, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0x30, 0x18, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, -/* 0001CED0 */ 0xFE, 0x30, 0x18, 0x75, 0x75, 0x02, 0x01, 0x06, 0x03, 0x07, 0x06, 0x0E, 0x0E, 0x01, 0x01, 0x02, -/* 0001CEE0 */ 0x01, 0x01, 0x01, 0x01, 0x06, 0x08, 0x37, 0x8D, 0x01, 0x06, 0x07, 0x00, 0x00, 0x07, 0x05, 0x00, -/* 0001CEF0 */ 0x5A, 0x00, 0x02, 0x8D, 0x01, 0x03, 0x08, 0x01, 0x00, 0x60, 0x08, 0x08, 0x00, 0x5B, 0x01, 0x08, -/* 0001CF00 */ 0x00, 0x00, 0x5B, 0x02, 0x03, 0x00, 0x00, 0x5B, 0x03, 0x04, 0x00, 0x00, 0x5B, 0x04, 0x05, 0x00, -/* 0001CF10 */ 0x00, 0xEE, 0x05, 0x00, 0x07, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x61, -/* 0001CF20 */ 0x02, 0xFE, 0x4C, 0x18, 0x02, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x58, 0x00, 0x00, 0xFF, 0x5C, -/* 0001CF30 */ 0x08, 0xC1, 0x03, 0x88, 0x03, 0x00, 0x80, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x9B, 0x03, 0x13, -/* 0001CF40 */ 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0xC3, 0x17, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, -/* 0001CF50 */ 0xC3, 0x17, 0x63, 0x63, 0x02, 0x01, 0x05, 0x03, 0x06, 0x05, 0x0D, 0x0D, 0x01, 0x01, 0x02, 0x01, -/* 0001CF60 */ 0x01, 0x01, 0x01, 0x05, 0x08, 0x32, 0x8D, 0x01, 0x06, 0x06, 0x00, 0x00, 0x07, 0x04, 0x00, 0x5A, -/* 0001CF70 */ 0x00, 0x02, 0x8D, 0x01, 0x03, 0x07, 0x01, 0x00, 0x60, 0x07, 0x07, 0x00, 0x5B, 0x01, 0x07, 0x00, -/* 0001CF80 */ 0x00, 0x5B, 0x02, 0x03, 0x00, 0x00, 0x5B, 0x03, 0x04, 0x00, 0x00, 0xEE, 0x04, 0x00, 0x06, 0x00, -/* 0001CF90 */ 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x5F, 0x02, 0xFE, 0xD6, 0x17, 0x02, 0x00, -/* 0001CFA0 */ 0x00, 0x00, 0x00, 0x30, 0x00, 0x4F, 0x00, 0x00, 0xFF, 0x5C, 0x08, 0x01, 0x00, 0x88, 0x03, 0x00, -/* 0001CFB0 */ 0x7F, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x9A, 0x03, 0x12, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, -/* 0001CFC0 */ 0x58, 0x17, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, 0x58, 0x17, 0x61, 0x61, 0x02, 0x01, -/* 0001CFD0 */ 0x06, 0x03, 0x07, 0x06, 0x0D, 0x0D, 0x01, 0x01, 0x02, 0x06, 0x08, 0x33, 0x8D, 0x01, 0x06, 0x07, -/* 0001CFE0 */ 0x00, 0x00, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x02, 0x8D, 0x01, 0x17, 0x08, 0x01, 0x00, 0x5B, 0x01, -/* 0001CFF0 */ 0x08, 0x00, 0x00, 0x5B, 0x02, 0x03, 0x00, 0x00, 0x5B, 0x03, 0x04, 0x00, 0x00, 0x5B, 0x04, 0x05, -/* 0001D000 */ 0x00, 0x00, 0xEE, 0x05, 0x00, 0x07, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, -/* 0001D010 */ 0x78, 0x17, 0x02, 0x00, 0x00, 0x00, 0x00, 0x31, 0x00, 0x40, 0x00, 0x00, 0xFF, 0x5C, 0x08, 0x01, -/* 0001D020 */ 0x00, 0x88, 0x03, 0x00, 0x7E, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x99, 0x03, 0x11, 0xFF, 0x00, -/* 0001D030 */ 0x00, 0x40, 0x02, 0xFE, 0x02, 0x17, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x02, 0x17, -/* 0001D040 */ 0x4C, 0x4C, 0x02, 0x01, 0x05, 0x03, 0x06, 0x05, 0x0C, 0x0C, 0x01, 0x01, 0x02, 0x05, 0x08, 0x2E, -/* 0001D050 */ 0x8D, 0x01, 0x06, 0x06, 0x00, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8D, 0x01, 0x19, 0x07, -/* 0001D060 */ 0x01, 0x00, 0x5B, 0x01, 0x07, 0x00, 0x00, 0x5B, 0x02, 0x03, 0x00, 0x00, 0x5B, 0x03, 0x04, 0x00, -/* 0001D070 */ 0x00, 0xEE, 0x04, 0x00, 0x06, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x15, -/* 0001D080 */ 0x17, 0x02, 0x00, 0x00, 0x00, 0x00, 0x2C, 0x00, 0x38, 0x00, 0x00, 0xFF, 0x5C, 0x08, 0x01, 0x00, -/* 0001D090 */ 0x88, 0x23, 0x00, 0x7D, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x98, 0x03, 0x10, 0xFF, 0x00, 0x00, -/* 0001D0A0 */ 0x40, 0x02, 0xFE, 0xA6, 0x16, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0xA6, 0x16, 0x52, -/* 0001D0B0 */ 0x52, 0x02, 0x81, 0x05, 0x03, 0x06, 0x05, 0x0D, 0x0D, 0x01, 0x01, 0x02, 0x05, 0x08, 0x38, 0x8D, -/* 0001D0C0 */ 0x01, 0x06, 0x06, 0x00, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8D, 0x01, 0x18, 0x07, 0x01, -/* 0001D0D0 */ 0x00, 0x5B, 0x01, 0x07, 0x00, 0x00, 0x5B, 0x02, 0x03, 0x00, 0x00, 0x01, 0x4F, 0x01, 0x07, 0x04, -/* 0001D0E0 */ 0x5B, 0x03, 0x07, 0x00, 0x00, 0xF0, 0x04, 0x00, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 0001D0F0 */ 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x01, -/* 0001D100 */ 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xFE, 0xBC, 0x16, 0x02, 0x00, 0x00, 0x00, 0x00, 0x36, -/* 0001D110 */ 0x00, 0x3B, 0x00, 0x00, 0xFF, 0x5C, 0x08, 0x01, 0x00, 0x88, 0x03, 0x00, 0x7C, 0x08, 0xA2, 0x41, -/* 0001D120 */ 0xC1, 0x01, 0xFE, 0x97, 0x03, 0x0F, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0x48, 0x16, 0xFF, 0x00, -/* 0001D130 */ 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x48, 0x16, 0x54, 0x54, 0x02, 0x01, 0x05, 0x03, 0x06, 0x05, -/* 0001D140 */ 0x0C, 0x0C, 0x01, 0x01, 0x02, 0x05, 0x08, 0x2E, 0x8D, 0x01, 0x06, 0x06, 0x00, 0x00, 0x07, 0x04, -/* 0001D150 */ 0x00, 0x5A, 0x00, 0x02, 0x8D, 0x01, 0x16, 0x07, 0x01, 0x00, 0x5B, 0x01, 0x07, 0x00, 0x00, 0x5B, -/* 0001D160 */ 0x02, 0x03, 0x00, 0x00, 0x5B, 0x03, 0x04, 0x00, 0x00, 0xEE, 0x04, 0x00, 0x06, 0x00, 0x00, 0x09, -/* 0001D170 */ 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x5F, 0x16, 0x02, 0x00, 0x00, 0x00, 0x00, 0x2C, 0x00, -/* 0001D180 */ 0x3C, 0x00, 0x00, 0xFF, 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x03, 0x00, 0x7A, 0x08, 0xA2, 0x41, 0xC1, -/* 0001D190 */ 0x01, 0xFE, 0x96, 0x03, 0x0E, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0xD5, 0x15, 0xFF, 0x00, 0x10, -/* 0001D1A0 */ 0x01, 0x00, 0x03, 0x03, 0xFE, 0xD5, 0x15, 0x68, 0x68, 0x02, 0x01, 0x05, 0x03, 0x06, 0x05, 0x0D, -/* 0001D1B0 */ 0x0D, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x05, 0x08, 0x32, 0x8D, 0x01, 0x06, 0x06, 0x00, -/* 0001D1C0 */ 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8D, 0x01, 0x03, 0x07, 0x01, 0x00, 0x60, 0x07, 0x07, -/* 0001D1D0 */ 0x00, 0x5B, 0x01, 0x07, 0x00, 0x00, 0x5B, 0x02, 0x03, 0x00, 0x00, 0x5B, 0x03, 0x04, 0x00, 0x00, -/* 0001D1E0 */ 0xEE, 0x04, 0x00, 0x06, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x73, 0x02, -/* 0001D1F0 */ 0xFE, 0xEA, 0x15, 0x02, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x52, 0x00, 0x00, 0xFF, 0x5C, 0x08, -/* 0001D200 */ 0xC1, 0x03, 0x88, 0x03, 0x00, 0x79, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x95, 0x03, 0x0D, 0xFF, -/* 0001D210 */ 0x00, 0x00, 0x40, 0x02, 0xFE, 0x8D, 0x15, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x8D, -/* 0001D220 */ 0x15, 0x3E, 0x3E, 0x02, 0x01, 0x05, 0x02, 0x05, 0x04, 0x0B, 0x0B, 0x01, 0x01, 0x01, 0x01, 0x01, -/* 0001D230 */ 0x01, 0x01, 0x04, 0x2B, 0x8D, 0x01, 0x03, 0x06, 0x00, 0x00, 0x6B, 0x05, 0x06, 0x00, 0x07, 0x03, -/* 0001D240 */ 0x00, 0x5A, 0x00, 0x06, 0x5B, 0x01, 0x02, 0x00, 0x00, 0x5B, 0x02, 0x03, 0x00, 0x00, 0xF2, 0x03, -/* 0001D250 */ 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, -/* 0001D260 */ 0x83, 0x02, 0xFE, 0x9E, 0x15, 0x02, 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x2C, 0x00, 0x00, 0xFF, -/* 0001D270 */ 0x5C, 0x08, 0xC1, 0x03, 0x88, 0x03, 0x00, 0x78, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x94, 0x03, -/* 0001D280 */ 0x0C, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0x0D, 0x15, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, -/* 0001D290 */ 0xFE, 0x0D, 0x15, 0x76, 0x76, 0x02, 0x01, 0x06, 0x03, 0x07, 0x06, 0x0E, 0x0E, 0x01, 0x01, 0x02, -/* 0001D2A0 */ 0x01, 0x01, 0x01, 0x01, 0x06, 0x08, 0x37, 0x8D, 0x01, 0x06, 0x07, 0x00, 0x00, 0x07, 0x05, 0x00, -/* 0001D2B0 */ 0x5A, 0x00, 0x02, 0x8D, 0x01, 0x03, 0x08, 0x01, 0x00, 0x60, 0x08, 0x08, 0x00, 0x5B, 0x01, 0x08, -/* 0001D2C0 */ 0x00, 0x00, 0x5B, 0x02, 0x03, 0x00, 0x00, 0x5B, 0x03, 0x04, 0x00, 0x00, 0x5B, 0x04, 0x05, 0x00, -/* 0001D2D0 */ 0x00, 0xEE, 0x05, 0x00, 0x07, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x71, -/* 0001D2E0 */ 0x02, 0xFE, 0x2C, 0x15, 0x02, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x56, 0x00, 0x00, 0xFF, 0x5C, -/* 0001D2F0 */ 0x08, 0xC1, 0x03, 0x88, 0x03, 0x00, 0x77, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x93, 0x03, 0x0B, -/* 0001D300 */ 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0x8B, 0x14, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, -/* 0001D310 */ 0x8B, 0x14, 0x78, 0x78, 0x02, 0x01, 0x06, 0x03, 0x07, 0x06, 0x0E, 0x0E, 0x01, 0x01, 0x02, 0x01, -/* 0001D320 */ 0x01, 0x01, 0x01, 0x06, 0x08, 0x37, 0x8D, 0x01, 0x06, 0x07, 0x00, 0x00, 0x07, 0x05, 0x00, 0x5A, -/* 0001D330 */ 0x00, 0x02, 0x8D, 0x01, 0x03, 0x08, 0x01, 0x00, 0x60, 0x08, 0x08, 0x00, 0x5B, 0x01, 0x08, 0x00, -/* 0001D340 */ 0x00, 0x5B, 0x02, 0x03, 0x00, 0x00, 0x5B, 0x03, 0x04, 0x00, 0x00, 0x5B, 0x04, 0x05, 0x00, 0x00, -/* 0001D350 */ 0xEE, 0x05, 0x00, 0x07, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x76, 0x02, -/* 0001D360 */ 0xFE, 0xA8, 0x14, 0x02, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x5A, 0x00, 0x00, 0xFF, 0x5C, 0x08, -/* 0001D370 */ 0xC1, 0x03, 0x88, 0x03, 0x00, 0x76, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x92, 0x03, 0x0A, 0xFF, -/* 0001D380 */ 0x00, 0x00, 0x40, 0x02, 0xFE, 0x17, 0x14, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x17, -/* 0001D390 */ 0x14, 0x6A, 0x6A, 0x02, 0x01, 0x05, 0x03, 0x06, 0x05, 0x0D, 0x0D, 0x01, 0x01, 0x02, 0x01, 0x01, -/* 0001D3A0 */ 0x01, 0x01, 0x05, 0x08, 0x32, 0x8D, 0x01, 0x06, 0x06, 0x00, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, -/* 0001D3B0 */ 0x02, 0x8D, 0x01, 0x03, 0x07, 0x01, 0x00, 0x60, 0x07, 0x07, 0x00, 0x5B, 0x01, 0x07, 0x00, 0x00, -/* 0001D3C0 */ 0x5B, 0x02, 0x03, 0x00, 0x00, 0x5B, 0x03, 0x04, 0x00, 0x00, 0xEE, 0x04, 0x00, 0x06, 0x00, 0x00, -/* 0001D3D0 */ 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x75, 0x02, 0xFE, 0x2D, 0x14, 0x02, 0x00, 0x00, -/* 0001D3E0 */ 0x00, 0x00, 0x30, 0x00, 0x53, 0x00, 0x00, 0xFF, 0x5C, 0x08, 0x01, 0x00, 0x88, 0x03, 0x00, 0x75, -/* 0001D3F0 */ 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x91, 0x03, 0x09, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0x9C, -/* 0001D400 */ 0x13, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, 0x9C, 0x13, 0x71, 0x71, 0x02, 0x01, 0x06, -/* 0001D410 */ 0x03, 0x07, 0x06, 0x0D, 0x0D, 0x01, 0x01, 0x02, 0x06, 0x08, 0x33, 0x8D, 0x01, 0x06, 0x07, 0x00, -/* 0001D420 */ 0x00, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x02, 0x8D, 0x01, 0x1D, 0x08, 0x01, 0x00, 0x5B, 0x01, 0x08, -/* 0001D430 */ 0x00, 0x00, 0x5B, 0x02, 0x03, 0x00, 0x00, 0x5B, 0x03, 0x04, 0x00, 0x00, 0x5B, 0x04, 0x05, 0x00, -/* 0001D440 */ 0x00, 0xEE, 0x05, 0x00, 0x07, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xC1, -/* 0001D450 */ 0x13, 0x02, 0x00, 0x00, 0x00, 0x00, 0x31, 0x00, 0x4B, 0x00, 0x00, 0xFF, 0x5C, 0x08, 0x01, 0x00, -/* 0001D460 */ 0x88, 0x03, 0x00, 0x74, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x90, 0x03, 0x08, 0xFF, 0x00, 0x00, -/* 0001D470 */ 0x40, 0x02, 0xFE, 0x45, 0x13, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x45, 0x13, 0x4D, -/* 0001D480 */ 0x4D, 0x02, 0x01, 0x04, 0x03, 0x05, 0x04, 0x0B, 0x0B, 0x01, 0x01, 0x02, 0x04, 0x08, 0x29, 0x8D, -/* 0001D490 */ 0x01, 0x06, 0x05, 0x00, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x8D, 0x01, 0x1E, 0x06, 0x01, -/* 0001D4A0 */ 0x00, 0x5B, 0x01, 0x06, 0x00, 0x00, 0x5B, 0x02, 0x03, 0x00, 0x00, 0xEE, 0x03, 0x00, 0x05, 0x00, -/* 0001D4B0 */ 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x58, 0x13, 0x02, 0x00, 0x00, 0x00, 0x00, -/* 0001D4C0 */ 0x27, 0x00, 0x39, 0x00, 0x00, 0xFF, 0x5C, 0x08, 0x01, 0x00, 0x88, 0x03, 0x00, 0x73, 0x08, 0xA2, -/* 0001D4D0 */ 0x41, 0xC1, 0x01, 0xFE, 0x8F, 0x03, 0x07, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0xEE, 0x12, 0xFF, -/* 0001D4E0 */ 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0xEE, 0x12, 0x4D, 0x4D, 0x02, 0x01, 0x04, 0x03, 0x05, -/* 0001D4F0 */ 0x04, 0x0B, 0x0B, 0x01, 0x01, 0x02, 0x04, 0x08, 0x29, 0x8D, 0x01, 0x06, 0x05, 0x00, 0x00, 0x07, -/* 0001D500 */ 0x03, 0x00, 0x5A, 0x00, 0x02, 0x8D, 0x01, 0x1F, 0x06, 0x01, 0x00, 0x5B, 0x01, 0x06, 0x00, 0x00, -/* 0001D510 */ 0x5B, 0x02, 0x03, 0x00, 0x00, 0xEE, 0x03, 0x00, 0x05, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, -/* 0001D520 */ 0x24, 0x00, 0xFE, 0x01, 0x13, 0x02, 0x00, 0x00, 0x00, 0x00, 0x27, 0x00, 0x39, 0x00, 0x00, 0xBF, -/* 0001D530 */ 0x5C, 0x08, 0x01, 0x00, 0x88, 0x01, 0x00, 0x51, 0x1F, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xDA, 0x02, -/* 0001D540 */ 0x06, 0xFE, 0x53, 0x0D, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, 0x53, 0x0D, 0x72, 0x72, -/* 0001D550 */ 0x41, 0x06, 0x04, 0x08, 0x09, 0x10, 0x10, 0x01, 0x02, 0x02, 0x07, 0x07, 0x08, 0x41, 0x8D, 0x01, -/* 0001D560 */ 0x14, 0x08, 0x00, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x5B, 0x01, 0x04, 0x00, 0x00, 0x5B, -/* 0001D570 */ 0x02, 0x05, 0x00, 0x00, 0x8D, 0x01, 0x04, 0x09, 0x01, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x03, -/* 0001D580 */ 0x5B, 0x01, 0x06, 0x01, 0x00, 0x5B, 0x02, 0x02, 0x01, 0x00, 0xEE, 0x03, 0x09, 0x09, 0x01, 0x00, -/* 0001D590 */ 0x5B, 0x03, 0x09, 0x00, 0x00, 0xEE, 0x04, 0xFF, 0x08, 0x00, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, -/* 0001D5A0 */ 0x7E, 0x0D, 0x02, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x46, 0x00, 0x00, 0x3F, 0x5C, 0x08, 0xC1, -/* 0001D5B0 */ 0x13, 0x88, 0x25, 0x00, 0x22, 0x04, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0xD0, 0x02, 0x03, 0xFE, 0xC3, -/* 0001D5C0 */ 0x06, 0x02, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x01, 0xFE, 0xC3, 0x06, 0xFE, 0x36, 0x02, 0xFE, -/* 0001D5D0 */ 0x36, 0x02, 0x06, 0x09, 0x0B, 0x05, 0x19, 0x18, 0x01, 0x02, 0x02, 0x05, 0x05, 0x05, 0x05, 0x01, -/* 0001D5E0 */ 0x0A, 0x08, 0x01, 0x19, 0x06, 0xFE, 0x8B, 0x03, 0x06, 0xFE, 0x8C, 0x03, 0x06, 0xFE, 0x8D, 0x03, -/* 0001D5F0 */ 0x06, 0xFE, 0x8E, 0x03, 0x07, 0x69, 0x15, 0x03, 0x00, 0x09, 0x02, 0x47, 0x09, 0x03, 0x8D, 0x01, -/* 0001D600 */ 0x35, 0x0B, 0x00, 0x00, 0x4B, 0x0B, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0x00, 0x00, 0x00, -/* 0001D610 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x79, 0x09, 0x0C, 0x00, 0x8D, 0x01, 0x37, -/* 0001D620 */ 0x0E, 0x01, 0x00, 0x4B, 0x0E, 0x6B, 0x0D, 0x0E, 0x01, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x0E, 0xF2, -/* 0001D630 */ 0x01, 0x0D, 0x0D, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x79, 0x0D, 0x0C, 0x02, 0xD6, 0x00, 0x0D, -/* 0001D640 */ 0x0C, 0x79, 0x0D, 0x0C, 0x03, 0xD6, 0x01, 0x0D, 0x0C, 0x79, 0x0D, 0x0C, 0x04, 0x5B, 0x01, 0x0C, -/* 0001D650 */ 0x00, 0x00, 0xEE, 0x02, 0x00, 0x0B, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x01, -/* 0001D660 */ 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8B, 0x03, -/* 0001D670 */ 0x00, 0x00, 0x8C, 0x03, 0x00, 0x00, 0x84, 0x01, 0x00, 0x00, 0x87, 0x01, 0x00, 0x00, 0xFE, 0x8B, -/* 0001D680 */ 0x03, 0x61, 0xFE, 0x8C, 0x03, 0xFE, 0x84, 0x01, 0xFE, 0x87, 0x01, 0xFE, 0xD6, 0x06, 0x03, 0x00, -/* 0001D690 */ 0x00, 0x00, 0x00, 0x08, 0x00, 0x12, 0x00, 0x5F, 0x00, 0x10, 0x02, 0x00, 0x9E, 0xD7, 0x01, 0x00, -/* 0001D6A0 */ 0xA4, 0xD6, 0x01, 0x00, 0xBF, 0x5C, 0x0F, 0xC1, 0x03, 0x88, 0x03, 0x00, 0x2B, 0x0C, 0xA2, 0x41, -/* 0001D6B0 */ 0xC1, 0x01, 0xFE, 0x8E, 0x03, 0x05, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0xA6, 0x07, 0xFF, 0x00, -/* 0001D6C0 */ 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0xA6, 0x07, 0xFE, 0x41, 0x01, 0xFE, 0x41, 0x01, 0x41, 0x07, -/* 0001D6D0 */ 0x02, 0x06, 0x03, 0x24, 0x24, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x07, 0x07, 0x07, 0x07, 0x05, -/* 0001D6E0 */ 0x91, 0x59, 0x06, 0xB2, 0x04, 0x06, 0x8D, 0x01, 0x03, 0x06, 0x00, 0x00, 0x60, 0x06, 0x06, 0x00, -/* 0001D6F0 */ 0x0F, 0x05, 0x00, 0x06, 0xA6, 0x00, 0x09, 0x77, 0x00, 0x8D, 0x01, 0x37, 0x07, 0x01, 0x00, 0x4B, -/* 0001D700 */ 0x07, 0x6B, 0x06, 0x07, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x07, 0x60, 0x08, 0x04, 0x02, 0x5B, -/* 0001D710 */ 0x01, 0x08, 0x00, 0x00, 0xF2, 0x02, 0x06, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA5, 0x06, -/* 0001D720 */ 0x06, 0x03, 0x00, 0x00, 0x60, 0x07, 0x04, 0x04, 0x11, 0x03, 0x00, 0x06, 0x07, 0x09, 0x34, 0x00, -/* 0001D730 */ 0x60, 0x06, 0x04, 0x02, 0x96, 0x06, 0x06, 0x02, 0x00, 0x00, 0xA6, 0x07, 0x14, 0x03, 0x00, 0x06, -/* 0001D740 */ 0x07, 0x09, 0x20, 0x00, 0x8D, 0x01, 0x37, 0x07, 0x01, 0x00, 0x4B, 0x07, 0x6B, 0x06, 0x07, 0x05, -/* 0001D750 */ 0x07, 0x01, 0x00, 0x5A, 0x00, 0x07, 0xF2, 0x01, 0x06, 0x06, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, -/* 0001D760 */ 0x75, 0x06, 0x04, 0x06, 0x60, 0x06, 0x04, 0x02, 0x9B, 0x03, 0x06, 0x02, 0x00, 0x00, 0xA6, 0x00, -/* 0001D770 */ 0x24, 0x00, 0xFE, 0x61, 0x03, 0xBF, 0xFE, 0x8C, 0x03, 0xC1, 0xFE, 0x8B, 0x03, 0x61, 0xFE, 0x8C, -/* 0001D780 */ 0x03, 0xFE, 0xC8, 0x07, 0x06, 0x05, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x2F, 0x00, 0x05, 0x00, 0x2B, -/* 0001D790 */ 0x00, 0x4B, 0x00, 0x61, 0x00, 0x20, 0x00, 0x3D, 0x00, 0x0C, 0x00, 0x26, 0x00, 0x00, 0xBF, 0x4C, -/* 0001D7A0 */ 0x02, 0xC1, 0x03, 0x88, 0x03, 0x00, 0x27, 0x0C, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x8D, 0x03, 0x04, -/* 0001D7B0 */ 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0x35, 0x07, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, -/* 0001D7C0 */ 0x35, 0x07, 0x62, 0x62, 0x01, 0x04, 0x02, 0x05, 0x0F, 0x0D, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, -/* 0001D7D0 */ 0x02, 0x04, 0x2F, 0x59, 0x05, 0xB2, 0x03, 0x05, 0x8D, 0x01, 0x03, 0x05, 0x00, 0x00, 0x60, 0x05, -/* 0001D7E0 */ 0x05, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x60, 0x05, 0x03, 0x01, 0x96, 0x05, 0x05, 0x02, 0x00, 0x00, -/* 0001D7F0 */ 0x47, 0x00, 0x05, 0x09, 0x05, 0x00, 0xA6, 0x05, 0x47, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA6, 0x00, -/* 0001D800 */ 0x24, 0x00, 0xFE, 0x61, 0x03, 0xFE, 0x8C, 0x03, 0xFE, 0x50, 0x07, 0x02, 0x05, 0x00, 0x00, 0x00, -/* 0001D810 */ 0x28, 0x00, 0x46, 0x00, 0x00, 0xBF, 0x5C, 0x08, 0x01, 0x00, 0x88, 0x03, 0x00, 0x1C, 0x11, 0xA2, -/* 0001D820 */ 0x41, 0xC0, 0x00, 0xFE, 0xF5, 0x02, 0x02, 0xFE, 0x01, 0x10, 0xFE, 0xC2, 0x04, 0xFF, 0x00, 0x10, -/* 0001D830 */ 0x01, 0x00, 0x02, 0x01, 0xFE, 0xC2, 0x04, 0x25, 0x25, 0x01, 0x03, 0x04, 0x06, 0x04, 0x0D, 0x0C, -/* 0001D840 */ 0x01, 0x01, 0x01, 0x05, 0x07, 0x08, 0x2D, 0x15, 0x05, 0x00, 0x04, 0x03, 0xCA, 0x06, 0x47, 0x04, -/* 0001D850 */ 0x06, 0x8D, 0x01, 0x04, 0x06, 0x00, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x03, 0x5B, 0x01, 0x04, -/* 0001D860 */ 0x00, 0x00, 0x5B, 0x02, 0x02, 0x00, 0x00, 0xEE, 0x03, 0x00, 0x06, 0x00, 0x00, 0x09, 0x02, 0x00, -/* 0001D870 */ 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xC3, 0x04, 0x03, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x0D, 0x00, -/* 0001D880 */ 0x21, 0x00, 0x17, 0x00, 0x00, 0x00}; - -} diff --git a/lib/Runtime/Library/InJavascript/Intl.js.nojit.bc.32b.h b/lib/Runtime/Library/InJavascript/Intl.js.nojit.bc.32b.h deleted file mode 100755 index 3130497b015..00000000000 --- a/lib/Runtime/Library/InJavascript/Intl.js.nojit.bc.32b.h +++ /dev/null @@ -1,10740 +0,0 @@ -//------------------------------------------------------------------------------------------------------- -// Copyright (C) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. -//------------------------------------------------------------------------------------------------------- -#if 0 -//------------------------------------------------------------------------------------------------------- -// Copyright (C) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. -//------------------------------------------------------------------------------------------------------- - -"use strict"; -// Core intl lib -(function (EngineInterface, InitType) { - var platform = EngineInterface.Intl; - - // allow unit tests to disable caching behavior for testing convenience but have this always `true` in real scenarios - platform.useCaches = true; - - // determine what backing library we are using - // making these vars in JS allows us to more change how we - // determine the backing library - const isPlatformUsingICU = !platform.winglob; - const isPlatformUsingWinGlob = platform.winglob; - - // constants - const NOT_FOUND = "NOT_FOUND"; - - // Built-Ins - var setPrototype = platform.builtInSetPrototype; - var getArrayLength = platform.builtInGetArrayLength; - var callInstanceFunc = platform.builtInCallInstanceFunction; - - // Helper for our extensive usage of null-prototyped objects - const bare = (obj = {}) => setPrototype(obj, null); - - // REVIEW(jahorto): IntlCache replaces past use of raw objects and JS Maps to cache arbitrary data for a given locale - // We use a raw object rather than a Map because we don't need any features specific to Maps - // If the cache gets too big (arbitrarily, > 25 keys is "too big" by default), we delete the entire internal object and start from scratch - // TODO(jahorto): Experiment with the performance benefit of using an LRU or random-delete cache here. - function IntlCache(n = 25) { - return bare({ - n: n, - _cache: _.create(), - - get(key) { - return platform.useCaches ? this._cache[key] : undefined; - }, - - set(key, value) { - if (!platform.useCaches) { - return; - } - - if (_.keys(this._cache).length > this.n && this._cache[key] === undefined) { - this._cache = _.create(); - } - - this._cache[key] = value; - } - }); - } - - var Boolean = platform.Boolean; - var Object = platform.Object; - var RegExp = platform.RegExp; - var Number = platform.Number; - var String = platform.String; - var Date = platform.Date; - var Error = platform.Error; - - var RaiseAssert = platform.raiseAssert; - - var Math = setPrototype({ - abs: platform.builtInMathAbs, - floor: platform.builtInMathFloor, - max: platform.builtInMathMax, - pow: platform.builtInMathPow - }, null); - - var ObjectGetPrototypeOf = platform.builtInJavascriptObjectEntryGetPrototypeOf; - var ObjectIsExtensible = platform.builtInJavascriptObjectEntryIsExtensible; - var ObjectGetOwnPropertyNames = platform.builtInJavascriptObjectEntryGetOwnPropertyNames; - var ObjectInstanceHasOwnProperty = platform.builtInJavascriptObjectEntryHasOwnProperty; - // Because we don't keep track of the attributes object, and neither does the internals of Object.defineProperty; - // We don't need to restore it's prototype. - var _objectDefineProperty = platform.builtInJavascriptObjectEntryDefineProperty; - var ObjectDefineProperty = function (obj, prop, attributes) { - _objectDefineProperty(obj, prop, setPrototype(attributes, null)); - }; - - var ArrayInstanceForEach = platform.builtInJavascriptArrayEntryForEach; - var ArrayInstanceIndexOf = platform.builtInJavascriptArrayEntryIndexOf; - var ArrayInstancePush = platform.builtInJavascriptArrayEntryPush; - var ArrayInstanceJoin = platform.builtInJavascriptArrayEntryJoin; - - var FunctionInstanceBind = platform.builtInJavascriptFunctionEntryBind; - var DateInstanceGetDate = platform.builtInJavascriptDateEntryGetDate; - var DateNow = platform.builtInJavascriptDateEntryNow; - - var StringInstanceReplace = platform.builtInJavascriptStringEntryReplace; - var StringInstanceToLowerCase = platform.builtInJavascriptStringEntryToLowerCase; - var StringInstanceToUpperCase = platform.builtInJavascriptStringEntryToUpperCase; - - var ObjectPrototype = platform.Object_prototype; - - var isFinite = platform.builtInGlobalObjectEntryIsFinite; - var isNaN = platform.builtInGlobalObjectEntryIsNaN; - - // Keep this "enum" in sync with IntlEngineInterfaceExtensionObject::EntryIntl_RegisterBuiltInFunction - const IntlBuiltInFunctionID = setPrototype({ - MIN: 0, - DateToLocaleString: 0, - DateToLocaleDateString: 1, - DateToLocaleTimeString: 2, - NumberToLocaleString: 3, - StringLocaleCompare: 4, - MAX: 5 - }, null); - - const _ = { - toUpperCase(str) { return callInstanceFunc(StringInstanceToUpperCase, str); }, - toLowerCase(str) { return callInstanceFunc(StringInstanceToLowerCase, str); }, - replace(str, pattern, replacement) { return callInstanceFunc(StringInstanceReplace, str, pattern, replacement); }, - split(str, pattern) { return callInstanceFunc(platform.builtInJavascriptStringEntrySplit, str, pattern); }, - substring(str, start, end) { return callInstanceFunc(platform.builtInJavascriptStringEntrySubstring, str, start, end); }, - stringIndexOf(str, el, from) { return callInstanceFunc(platform.builtInJavascriptStringEntryIndexOf, str, el, from); }, - match(str, re) { return platform.builtInRegexMatch(str, re); }, - repeat(str, count) { return callInstanceFunc(platform.builtInJavascriptStringEntryRepeat, str, count); }, - - forEach(array, func) { return callInstanceFunc(ArrayInstanceForEach, array, func); }, - push(array, ...els) { return callInstanceFunc(ArrayInstancePush, array, ...els); }, - join(array, sep) { return callInstanceFunc(ArrayInstanceJoin, array, sep); }, - arrayIndexOf(array, el, from) { return callInstanceFunc(ArrayInstanceIndexOf, array, el, from); }, - map(array, func) { return callInstanceFunc(platform.builtInJavascriptArrayEntryMap, array, func); }, - reduce(array, func, init) { return callInstanceFunc(platform.builtInJavascriptArrayEntryReduce, array, func, init); }, - slice(array, start, end) { return callInstanceFunc(platform.builtInJavascriptArrayEntrySlice, array, start, end); }, - concat(array, ...els) { return callInstanceFunc(platform.builtInJavascriptArrayEntryConcat, array, ...els); }, - filter(array, func) { return callInstanceFunc(platform.builtInJavascriptArrayEntryFilter, array, func); }, - unique(array) { return _.filter(array, (v, i) => _.arrayIndexOf(array, v) === i); }, - - keys: platform.builtInJavascriptObjectEntryKeys, - hasOwnProperty(o, prop) { return callInstanceFunc(platform.builtInJavascriptObjectEntryHasOwnProperty, o, prop); }, - // If we don't set the descriptor's prototype to null, defining properties with `value`s can fail of Object.prototype.get is defined - defineProperty(o, prop, desc) { - _.setPrototypeOf(desc, null); - platform.builtInJavascriptObjectEntryDefineProperty(o, prop, desc); - }, - isExtensible: platform.builtInJavascriptObjectEntryIsExtensible, - create(proto = null) { return platform.builtInJavascriptObjectCreate(proto); }, - setPrototypeOf(target, proto = null) { return platform.builtInSetPrototype(target, proto); }, - - abs: platform.builtInMathAbs, - // Make _.floor more like ECMA262 #sec-mathematical-operations' floor by normalizing -0 - floor(x) { return x === 0 ? 0 : platform.builtInMathFloor(x) }, - max: platform.builtInMathMax, - pow: platform.builtInMathPow, - - isFinite: platform.builtInGlobalObjectEntryIsFinite, - isNaN: platform.builtInGlobalObjectEntryIsNaN, - - getDate(date) { return callInstanceFunc(platform.builtInJavascriptDateEntryGetDate, date); }, - - bind(func, that) { return callInstanceFunc(platform.builtInJavascriptFunctionEntryBind, func, that); }, - apply(func, that, args) { return callInstanceFunc(platform.builtInJavascriptFunctionEntryApply, func, that, args); }, - }; - - const raise = { - rangeError() { return arguments.length === 3 ? platform.raiseOptionValueOutOfRange_3(...arguments) : platform.raiseOptionValueOutOfRange(); }, - assert(test, err) { return test ? undefined : platform.raiseAssert(err || new Error("Assert failed")); } - }; - - // Keep these "enums" in sync with lib/Runtime/PlatformAgnostic/Intl.h - const CollatorSensitivity = bare({ - base: 0, - accent: 1, - case: 2, - variant: 3, - DEFAULT: 3 - }); - const CollatorCaseFirst = bare({ - upper: 0, - lower: 1, - false: 2, - DEFAULT: 2 - }); - const NumberFormatStyle = bare({ - DEFAULT: 0, // "decimal" is the default - DECIMAL: 0, // Intl.NumberFormat(locale, { style: "decimal" }); // aka in our code as "number" - PERCENT: 1, // Intl.NumberFormat(locale, { style: "percent" }); - CURRENCY: 2, // Intl.NumberFormat(locale, { style: "currency", ... }); - }); - const NumberFormatCurrencyDisplay = bare({ - DEFAULT: 0, // "symbol" is the default - SYMBOL: 0, // Intl.NumberFormat(locale, { style: "currency", currencyDisplay: "symbol" }); // e.g. "$" or "US$" depeding on locale - CODE: 1, // Intl.NumberFormat(locale, { style: "currency", currencyDisplay: "code" }); // e.g. "USD" - NAME: 2, // Intl.NumberFormat(locale, { style: "currency", currencyDisplay: "name" }); // e.g. "US dollar" - }); - - const toEnum = function (enumObject, key) { - if (!key || typeof key !== "string") { - return enumObject.DEFAULT; - } else { - return enumObject[key]; - } - } - - // When this file was originally written, it assumed Windows Globalization semantics. - // Throughout the transition to ICU, we tried to share as much code as possible between WinGlob and ICU. - // However, because ICU has different semantics and our ICU-based implementation tries to match a newer - // version of the Intl spec, we have decided that the code sharing was causing more harm than good. - // Thus, while we support both ICU and WinGlob, we have decided to duplicate a substantial amount of code. - // The indentation of the below if block is intentionally incorrect so as to minimize diff. - if (isPlatformUsingICU) { - - let __defaultLocale = undefined; - const GetDefaultLocale = function () { - if (__defaultLocale && platform.useCaches) { - return __defaultLocale; - } - - const locale = platform.getDefaultLocale(); - if (!locale) { - // if the system locale is undefined/null/empty string, we have to - // do something or else we will crash - __defaultLocale = "en"; - } else { - __defaultLocale = locale; - } - - return __defaultLocale; - }; - - // A helper function that is meant to rethrow SOE and OOM exceptions allowing them to propagate. - var throwExIfOOMOrSOE = function (ex) { - if (ex.number === -2146828260 || ex.number === -2146828281) { - throw ex; - } - }; - - var tagPublicFunction = function (name, f) { - return platform.tagPublicLibraryCode(f, name); - }; - - /** - * Determines the best possible locale available in the system - * - * ECMA-402: #sec-bestavailablelocale - * - * @param {Function} isAvailableLocale A function that takes a locale and returns if the locale is supported - * @param {String} locale the locale (including its fallbacks) that will be searched for - * @returns {String} the given locale or one of its fallbacks, or undefined - */ - const BestAvailableLocale = function (isAvailableLocale, locale) { - if (locale === undefined) { - return undefined; - } - - let candidate = locale; - const hyphen = "-"; - while (true) { - if (isAvailableLocale(candidate)) { - return candidate; - } - - let pos = -1; - for (let i = candidate.length - 1; i >= 0; i--) { - if (candidate[i] === hyphen) { - pos = i; - break; - } - } - - if (pos === -1) { - return undefined; - } else if (pos >= 2 && candidate[pos - 2] === hyphen) { - // This is spec code likely intended to skip over singletons, - // such that if we just searched for "en-a-value", - // pos would initially truncate the candidate to "en-a", which - // is not a valid language tag. - // See https://tools.ietf.org/html/rfc5646#section-4.4.2 - pos -= 2; - } - - candidate = _.substring(candidate, 0, pos); - } - }; - - /** - * Returns an array of acceptable values for a given key in a given locale. It is expected that - * locale is one that has already been validated by platform.is*LocaleAvailable and key is limited - * to the [[RelevantExtensionKeys]] of Collator, NumberFormat, and DateTimeFormat. - * - * ECMA402: #sec-internal-slots ([[SortLocaleData]], [[SearchLocaleData]], and [[LocaleData]]) - * - * @param {String} key a unicode extension key like "co", "ca", etc - * @param {String} locale the locale for which to get the given key's data - * @returns {String[]} - */ - const getKeyLocaleData = function (key, locale) { - // NOTE: keep this enum in sync with `enum class LocaleDataKind` in IntlEngineInterfaceExtensionObject.cpp - const LocaleDataKind = { - co: 0, - kf: 1, - kn: 2, - ca: 3, - nu: 4, - hc: 5, - }; - - const keyLocaleData = platform.getLocaleData(LocaleDataKind[key], locale); - - return keyLocaleData; - }; - - /** - * Determines which locale (or fallback) to use of an array of locales. - * - * ECMA-402: #sec-lookupmatcher - * - * @param {Function} isAvailableLocale A function that takes a locale and returns if the locale is supported - * @param {String[]} requestedLocales An array of requested locales - */ - const LookupMatcher = function (isAvailableLocale, requestedLocales) { - const result = _.create(); - for (let i = 0; i < requestedLocales.length; ++i) { - const parsedLangtag = parseLangtag(requestedLocales[i]); - if (parsedLangtag === null) { - continue; - } - - const availableLocale = BestAvailableLocale(isAvailableLocale, parsedLangtag.base); - if (availableLocale !== undefined) { - result.locale = availableLocale; - if (requestedLocales[i] !== parsedLangtag.base) { - result.extension = parsedLangtag.unicodeExtension; - } - - return result; - } - } - - result.locale = GetDefaultLocale(); - return result; - }; - - const BestFitMatcher = LookupMatcher; - - /** - * Determine a value for a given key in the given extension string - * - * ECMA-402: #sec-unicodeextensionvalue - * - * @param {String} extension the full unicode extension, such as "-u-co-phonebk-kf-true" - * @param {String} key the specific key we are looking for in the extension, such as "co" - */ - const UnicodeExtensionValue = function (extension, key) { - raise.assert(key.length === 2); - const size = extension.length; - - // search for the key-value pair - let pos = _.stringIndexOf(extension, `-${key}-`); - if (pos !== -1) { - const start = pos + 4; - let end = start; - let k = start; - let done = false; - while (!done) { - const e = _.stringIndexOf(extension, "-", k); - const len = e === -1 ? size - k : e - k; - if (len === 2) { - done = true; - } else if (e === -1) { - end = size; - done = true; - } else { - end = e; - k = e + 1; - } - } - - return _.substring(extension, start, end); - } - - // search for the key with no associated value - pos = _.stringIndexOf(extension, `-${key}`); - if (pos !== -1 && pos + 3 === size) { - return ""; - } else { - return undefined; - } - }; - - /** - * Resolves a locale by finding which base locale or fallback is available on the system, - * then determines which provided unicode options are available for that locale. - * - * ECMA-402: #sec-resolvelocale - * - * @param {Function} isAvailableLocale A function that takes a locale and returns if the locale is supported - * @param {String[]} requestedLocales The result of calling CanonicalizeLocaleList on the user-requested locale array - * @param {Object} options An object containing a lookupMatcher value and any value given by the user's option object, - * mapped to the correct unicode extension key - * @param {String[]} relevantExtensionKeys An array of unicode extension keys that we care about for the current lookup - */ - const ResolveLocale = function (isAvailableLocale, requestedLocales, options, relevantExtensionKeys) { - const matcher = options.lookupMatcher; - let r; - if (matcher === "lookup") { - r = LookupMatcher(isAvailableLocale, requestedLocales); - } else { - r = BestFitMatcher(isAvailableLocale, requestedLocales); - } - - let foundLocale = r.locale; - const result = bare({ dataLocale: foundLocale }); - let supportedExtension = "-u"; - _.forEach(relevantExtensionKeys, function (key) { - const keyLocaleData = getKeyLocaleData(key, foundLocale); - let value = keyLocaleData[0]; - let supportedExtensionAddition = ""; - if (r.extension) { - const requestedValue = UnicodeExtensionValue(r.extension, key); - if (requestedValue !== undefined) { - if (requestedValue !== "") { - if (_.arrayIndexOf(keyLocaleData, requestedValue) !== -1) { - value = requestedValue; - supportedExtensionAddition = `-${key}-${value}`; - } - } else if (_.arrayIndexOf(keyLocaleData, "true") !== -1) { - value = "true"; - } - } - } - - if (_.hasOwnProperty(options, key)) { - const optionsValue = options[key]; - if (_.arrayIndexOf(keyLocaleData, optionsValue) !== -1) { - if (optionsValue !== value) { - value = optionsValue; - supportedExtensionAddition = ""; - } - } - } - - result[key] = value; - supportedExtension += supportedExtensionAddition; - }); - - if (supportedExtension.length > 2) { - const privateIndex = _.stringIndexOf(foundLocale, "-x-"); - if (privateIndex === -1) { - foundLocale += supportedExtension; - } else { - const preExtension = _.substring(foundLocale, 0, privateIndex); - const postExtension = _.substring(foundLocale, privateIndex); - foundLocale = preExtension + supportedExtension + postExtension; - } - - foundLocale = platform.normalizeLanguageTag(foundLocale); - } - - result.locale = foundLocale; - return result; - }; - - var Internal = bare({ - ToObject(o) { - if (o === null) { - platform.raiseNeedObject(); - } - return o !== undefined ? Object(o) : undefined; - }, - - ToString(s) { - return s !== undefined ? String(s) : undefined; - }, - - ToNumber(n) { - return n !== undefined ? Number(n) : NaN; - }, - - ToLogicalBoolean(v) { - return v !== undefined ? Boolean(v) : undefined; - }, - - ToUint32(n) { - var num = Number(n), - ret = 0; - if (!isNaN(num) && isFinite(num)) { - ret = _.abs(num % _.pow(2, 32)); - } - return ret; - } - }); - - // Internal ops implemented in JS: - function GetOption(options, property, type, values, fallback) { - let value = options[property]; - - if (value !== undefined) { - if (type == "boolean") { - value = Internal.ToLogicalBoolean(value); - } - - if (type == "string") { - value = Internal.ToString(value); - } - - if (type == "number") { - value = Internal.ToNumber(value); - } - - if (values !== undefined && _.arrayIndexOf(values, value) == -1) { - platform.raiseOptionValueOutOfRange_3(String(value), String(property), `['${_.join(values, "', '")}']`); - } - - return value; - } - - return fallback; - } - - /** - * Extracts the value of the property named property from the provided options object, - * converts it to a Number value, checks whether it is in the allowed range, - * and fills in a fallback value if necessary. - * - * NOTE: this has known differences compared to the spec GetNumberOption in order to - * support more verbose errors. It is more similar to DefaultNumberOption - * - * ECMA402: #sec-defaultnumberoption - * - * @param {Object} options user-provided options object - * @param {String} property the property we are trying to get off of `options` - * @param {Number} minimum minimum allowable value for options[property] - * @param {Number} maximum maximum allowable value for options[property] - * @param {Number} fallback return value if options[property] is undefined or invalid - * @returns {Number} - */ - const GetNumberOption = function (options, property, minimum, maximum, fallback) { - let value = options[property]; - if (value !== undefined) { - value = Internal.ToNumber(value); - if (_.isNaN(value) || value < minimum || value > maximum) { - platform.raiseOptionValueOutOfRange_3(String(value), property, `[${minimum} - ${maximum}]`); - } - return _.floor(value); - } - - return fallback; - }; - - let CURRENCY_CODE_RE; - function InitializeCurrencyRegExp() { - CURRENCY_CODE_RE = /^[A-Z]{3}$/i; - } - - /** - * Returns an object representing the language, script, region, extension, and base of a language tag, - * or null if the language tag isn't valid. - * - * @param {String} langtag a candidate BCP47 langtag - */ - const parseLangtag = (function () { - // Language Tag Syntax as described in RFC 5646 #section-2.1 - // Note: All language tags are comprised only of ASCII characters (makes our job easy here) - // Note: Language tags in canonical form have case conventions, but language tags are case-insensitive for our purposes - - // Note: The ABNF syntax used in RFC 5646 #section-2.1 uses the following numeric quantifier conventions: - // - (Parentheses) are used for grouping - // - PRODUCTION => exactly 1 of PRODUCTION /PRODUCTION/ - // - [PRODUCTION] => 0 or 1 of PRODUCTION /(PRODUCTION)?/ - // - #PRODUCTION => exactly # of PRODUCTION /(PRODUCTION){#}/ - // - a*bPRODUCTION (where a and b are optional) - // - *PRODUCTION => any number of PRODUCTION /(PRODUCTION)*/ - // - 1*PRODUCTION => 1 or more of PRODUCTION /(PRODUCTION)+/ - // - #*PRODUCTION => # or more of PRODUCTION /(PRODUCTION){#,}/ - // - *#PRODUCTION => 0 to # (inclusive) of PRODUCTION /(PRODUCTION){,#}/ or /(PRODUCTION){0,#}/ - // - a*bPRODUCTION => a to b (inclusive) of PRODUCTION /(PRODUCTION){a,b}/ - - const ALPHA = "[A-Z]"; - const DIGIT = "[0-9]"; - const alphanum = `(?:${ALPHA}|${DIGIT})`; - - const regular = "\\b(?:art-lojban|cel-gaulish|no-bok|no-nyn|zh-guoyu|zh-hakka|zh-min|zh-min-nan|zh-xiang)\\b"; - const irregular = "\\b(?:en-GB-oed|i-ami|i-bnn|i-default|i-enochian|i-hak|i-klingon|i-lux|i-mingo" + - "|i-navajo|i-pwn|i-tao|i-tay|i-tsu|sgn-BE-FR|sgn-BE-NL|sgn-CH-DE)\\b"; - const grandfathered = `\\b(?:${regular}|${irregular})\\b`; - - const privateuse = `\\b(?:x(?:-${alphanum}{1,8}\\b)+)\\b`; // privateuse = "x" 1*("-" (1*8alphanum)) - const singleton = `\\b(?:${DIGIT}|[A-WY-Z])\\b`; // singleton ~= alphanum except for 'x' ; (paraphrased) - const extension = `\\b(?:${singleton}(?:-${alphanum}{2,8})+)\\b`; // extension = singleton 1*("-" (2*8alphanum)) - const variant = `\\b(?:${alphanum}{5,8}|${DIGIT}${alphanum}{3})\\b`; // variant = 5*8alphanum / (DIGIT 3alphanum) - const region = `\\b(?:${ALPHA}{2}|${DIGIT}{3})\\b`; // region = 2ALPHA / 3DIGIT - - const script = `\\b(?:${ALPHA}{4})\\b`; // script = 4ALPHA - const extlang = `\\b(?:${ALPHA}{3}\\b(?:-${ALPHA}{3}){0,2})\\b`; // extlang = 3ALPHA *2("-" 3ALPHA) - - const language = '\\b(?:' + // language = - `${ALPHA}{2,3}` + // 2*3ALPHA ; shortest ISO 639 code - `\\b(?:-${extlang})?` + // ["-" extlang] ; sometimes followed by extended language subtags - // `|${ALPHA}{4}` + // / 4ALPHA ; or reserved for future use - // `|${ALPHA}{5,8}` + // / 5*8ALPHA ; or registered language subtag - `|${ALPHA}{4,8}` + // ~/ 4*8ALPHA ; (paraphrased: combined previous two lines) - ')\\b'; - - // Use matching groups only when needed - const LANG_TAG_BASE = `\\b(${language})\\b` + // langtag = language - `\\b(?:-(${script}))?\\b` + // ["-" script] - `\\b(?:-(${region}))?\\b` ; // ["-" region] - const LANG_TAG_EXT = `\\b((?:-${variant})*)\\b` + // *("-" variant) - `\\b((?:-${extension})*)\\b` + // *("-" extension) - `\\b(?:-${privateuse})?\\b` ; // ["-" privateuse] - const langtag = `\\b${LANG_TAG_BASE}\\b${LANG_TAG_EXT}\\b`; - - const LANG_TAG = `\\b(?:${langtag}|${privateuse}|${grandfathered})\\b`; // Language-Tag = ... - - // Use ^ and $ to enforce that the entire input string is a langtag - const LANG_TAG_BASE_RE = new RegExp(`^${LANG_TAG_BASE}$`, 'i'); // [1] language; [2] script; [3] region; - const LANG_TAG_EXT_RE = new RegExp(`^${LANG_TAG_EXT}$`, 'i'); // [1] variants; [2] extensions; - const LANG_TAG_RE = new RegExp(`^${LANG_TAG}$`, 'i'); // [1] language; [2] script; [3] region; [4] variants; [5] extensions; - - const parsedLangtagCache = new IntlCache(); - return function (langtag) { - const cached = parsedLangtagCache.get(langtag); - if (cached) { - return cached; - } - - const parts = _.match(langtag, LANG_TAG_RE); - if (!parts) { - return null; - } - - const ret = _.create(); - ret.language = parts[1]; - ret.base = parts[1]; - if (parts[2]) { - ret.script = parts[2]; - ret.base += "-" + parts[2]; - } - - if (parts[3]) { - ret.region = parts[3]; - ret.base += "-" + parts[3]; - } - - if (parts[4]) { - ret.variants = parts[4]; - } - - if (parts[5]) { - ret.extensions = parts[5]; - - // parse the extension to find the unicode (-u) extension - const extensionParts = _.split(parts[5], "-"); - for (let i = 0; i < extensionParts.length; ++i) { - if (extensionParts[i] !== "u") { - continue; - } - - let k; - for (k = i + 1; k < extensionParts.length && extensionParts[k].length > 1; k++) { - // do nothing, we just want k to equal the index of the next element whose length is 1 - // or to equal the length of extensionParts - // We could have done this with Array.prototype.findIndex too - } - - if (k > i + 1) { - // this creates u-(keys and values)*, which is good enough for the UnicodeExtensionValue, - // which is the only place that this return value is intended to be used - ret.unicodeExtension = _.join(_.slice(extensionParts, i, k), "-"); - } - - // if we have gotten this far, we have found -u-{values}, so we can break - break; - } - } - - parsedLangtagCache.set(langtag, ret); - - return ret; - }; - })(); - - const IsWellFormedCurrencyCode = function (code) { - code = Internal.ToString(code); - - if (!CURRENCY_CODE_RE) { - InitializeCurrencyRegExp(); - } - - return platform.builtInRegexMatch(code, CURRENCY_CODE_RE) !== null; - } - - /** - * Returns true if locale can be generated by RFC5646 section 2.1 and does not contain - * duplicate variant or singleton subtags. - * - * Note that ICU does not implement this correctly for our usage because it is - * extremely permissive about what it will allow -- completely invalid language tags can - * pass through a round of uloc_forLanguageTag/uloc_toLanguageTag or uloc_canonicalize - * even if they are completely bogus. - * - * ECMA402: #sec-isstructurallyvalidlanguagetag - * - * @param {String} locale The locale to check - * @returns {Boolean} - */ - const IsStructurallyValidLanguageTag = function (locale) { - const parsed = parseLangtag(locale); - if (parsed === null) { - return false; - } - - // check duplicate variants - if (parsed.variants) { - const variants = _.split(parsed.variants, "-"); - const uniqueVariants = _.unique(variants); - - if (variants.length !== uniqueVariants.length) { - return false; - } - } - - if (parsed.extensions) { - const extensionParts = _.split(parsed.extensions, "-"); - const singletons = _.map(_.filter(extensionParts, (element) => element.length === 1), (element) => _.toLowerCase(element)); - const uniqueSingletons = _.unique(singletons); - - return singletons.length === uniqueSingletons.length; - } - - return true; - }; - - /** - * Given a locale or list of locales, returns a corresponding list where each locale - * is guaranteed to be "canonical" (proper capitalization, order, etc.). - * - * ECMA402: #sec-canonicalizelocalelist - * - * @param {String|String[]} locales the user-provided locales to be canonicalized - */ - const CanonicalizeLocaleList = function (locales) { - if (typeof locales === "undefined") { - return []; - } - - const seen = []; - const O = typeof locales === "string" ? [locales] : Internal.ToObject(locales); - const len = Internal.ToUint32(O.length); - let k = 0; - - while (k < len) { - const Pk = Internal.ToString(k); - if (Pk in O) { - const kValue = O[Pk]; - if ((typeof kValue !== "string" && typeof kValue !== "object") || kValue === null) { - platform.raiseNeedObjectOrString("locale"); - } - - const tag = Internal.ToString(kValue); - if (!IsStructurallyValidLanguageTag(tag)) { - platform.raiseLocaleNotWellFormed(tag); - } - - const canonicalizedTag = platform.normalizeLanguageTag(tag); - if (canonicalizedTag === undefined) { - // See comment in platform.normalizeLanguageTag about when this happens - platform.raiseLocaleNotWellFormed(tag); - } else if (_.arrayIndexOf(seen, canonicalizedTag) === -1) { - _.push(seen, canonicalizedTag); - } - } - - k += 1; - } - - return seen; - }; - - /** - * Returns the subset of requestedLocales that has a matching locale according to BestAvailableLocale. - * - * ECMA402: #sec-lookupsupportedlocales - * - * @param {Function} isAvailableLocale A function that takes a locale and returns if the locale is supported - * @param {String|String[]} requestedLocales - */ - const LookupSupportedLocales = function (isAvailableLocale, requestedLocales) { - const subset = []; - _.forEach(requestedLocales, function (locale) { - const noExtensionsLocale = parseLangtag(locale).base; - if (BestAvailableLocale(isAvailableLocale, noExtensionsLocale) !== undefined) { - _.push(subset, locale); - } - }); - - return subset; - }; - - const BestFitSupportedLocales = LookupSupportedLocales; - - /** - * Applies digit options used for number formatting onto the given intlObj - * - * This function is used by both NumberFormat and PluralRules, despite being defined - * as a NumberFormat abstract operation - * - * ECMA 402: #sec-setnfdigitoptions - * - * @param {Object} intlObj The state object of either a NumberFormat or PluralRules on which to set the resolved number options - * @param {Object} options The option object to pull min/max sigfigs, fraction digits, and integer digits - * @param {Number} mnfdDefault The default minimumFractionDigits - * @param {Number} mxfdDefault The default maximumFractionDigits - */ - const SetNumberFormatDigitOptions = function (intlObj, options, mnfdDefault, mxfdDefault) { - const mnid = GetNumberOption(options, "minimumIntegerDigits", 1, 21, 1); - const mnfd = GetNumberOption(options, "minimumFractionDigits", 0, 20, mnfdDefault); - const mxfdActualDefault = _.max(mnfd, mxfdDefault); - const mxfd = GetNumberOption(options, "maximumFractionDigits", mnfd, 20, mxfdActualDefault); - intlObj.minimumIntegerDigits = mnid; - intlObj.minimumFractionDigits = mnfd; - intlObj.maximumFractionDigits = mxfd; - - let mnsd = options.minimumSignificantDigits; - let mxsd = options.maximumSignificantDigits; - if (mnsd !== undefined || mxsd !== undefined) { - // don't read options.minimumSignificantDigits below in order to pass - // test262/test/intl402/NumberFormat/significant-digits-options-get-sequence.js - mnsd = GetNumberOption({ minimumSignificantDigits: mnsd }, "minimumSignificantDigits", 1, 21, 1); - mxsd = GetNumberOption({ maximumSignificantDigits: mxsd }, "maximumSignificantDigits", mnsd, 21, 21); - intlObj.minimumSignificantDigits = mnsd; - intlObj.maximumSignificantDigits = mxsd; - } - }; - - /** - * Returns the subset of requestedLocales that has a matching locale, according to - * options.localeMatcher and isAvailableLocale. - * - * ECMA402: #sec-supportedlocales - * - * @param {Function} isAvailableLocale A function that takes a locale and returns if the locale is supported - * @param {String|String[]} requestedLocales - * @param {Object} options - */ - const SupportedLocales = function (isAvailableLocale, requestedLocales, options) { - const matcher = options === undefined - ? "best fit" - : GetOption(Internal.ToObject(options), "localeMatcher", "string", ["best fit", "lookup"], "best fit"); - const supportedLocales = matcher === "best fit" - ? BestFitSupportedLocales(isAvailableLocale, requestedLocales) - : LookupSupportedLocales(isAvailableLocale, requestedLocales); - - for (let i = 0; i < supportedLocales.length; i++) { - _.defineProperty(supportedLocales, Internal.ToString(i), { configurable: false, writable: false }); - } - - // test262 supportedLocalesOf-returned-array-elements-are-frozen.js: - // Property length of object returned by SupportedLocales should not be writable - _.defineProperty(supportedLocales, "length", { - writable: false, - configurable: false, - enumerable: false, - }); - - return supportedLocales; - }; - - // the following two functions exist solely to prevent calling new Intl.{getCanonicalLocales|*.supportedLocalesOf} - // both should be bound to `intlStaticMethodThisArg` which has a hiddenObject with isValid = "Valid" - const intlStaticMethodThisArg = _.create(); - platform.setHiddenObject(intlStaticMethodThisArg, { isValid: "Valid" }); - const supportedLocalesOf_unconstructable = function (that, functionName, isAvailableLocale, requestedLocales, options) { - if (that === null || that === undefined) { - platform.raiseNotAConstructor(functionName); - } - - const hiddenObj = platform.getHiddenObject(that); - if (!hiddenObj || hiddenObj.isValid !== "Valid") { - platform.raiseNotAConstructor(functionName); - } - - return SupportedLocales(isAvailableLocale, CanonicalizeLocaleList(requestedLocales), options); - } - - const getCanonicalLocales_unconstructable = function (that, functionName, locales) { - if (that === null || that === undefined) { - platform.raiseNotAConstructor(functionName); - } - - const hiddenObj = platform.getHiddenObject(that); - if (!hiddenObj || hiddenObj.isValid !== "Valid") { - platform.raiseNotAConstructor(functionName); - } - - return CanonicalizeLocaleList(locales); - } - - // We go through a bit of a circus here to create and bind the getCanonicalLocales function for two reasons: - // 1. We want its name to be "getCanonicalLocales" - // 2. We want to make sure it isnt callable as `new {Intl.}getCanonicalLocales()` - // To accomplish (2), since we cant check CallFlags_New in JS Builtins, the next best thing is to bind the function to a known - // `this` and ensure that that is properly `this` on call (if not, we were called with `new` and should bail). - // However, this makes (1) more difficult, since binding a function changes its name - // When https://github.com/Microsoft/ChakraCore/issues/637 is fixed and we have a way - // to make built-in functions non-constructible, we can (and should) rethink this strategy - // TODO(jahorto): explore making these arrow functions, as suggested in #637, to get non-constructable "for free" - if (InitType === "Intl") { - const getCanonicalLocales_name = "Intl.getCanonicalLocales"; - const getCanonicalLocales_func = tagPublicFunction(getCanonicalLocales_name, function (locales) { - return getCanonicalLocales_unconstructable(this, getCanonicalLocales_name, locales); - }); - const getCanonicalLocales = _.bind(getCanonicalLocales_func, intlStaticMethodThisArg); - _.defineProperty(getCanonicalLocales, 'name', { - value: 'getCanonicalLocales', - writable: false, - enumerable: false, - configurable: true, - }); - _.defineProperty(Intl, "getCanonicalLocales", { - value: getCanonicalLocales, - writable: true, - enumerable: false, - configurable: true - }); - } - - /** - * Creates an object to be returned out of resolvedOptions() methods that avoids being tainted by Object.prototype - * - * @param {String[]} props The list of properties to extract from hiddenObject and add to the final resolved options - * @param {Object} hiddenObject The hiddenObject of the calling constructor that contains values for each prop in props - * @param {Function} func An optional custom function(prop, resolved) run for each prop; it should return true when - * it handles a property itself. If it does not return true, the default logic will be used. - */ - const createResolvedOptions = function (props, hiddenObject, func = null) { - const resolved = _.create(); - _.forEach(props, function (prop) { - if (func !== null && func(prop, resolved) === true) { - // the callback returned true, which means this property was handled and we can go to the next one - return; - } - - if (typeof hiddenObject[prop] !== "undefined") { - resolved[prop] = hiddenObject[prop]; - } - }); - - return _.setPrototypeOf(resolved, platform.Object_prototype); - }; - - // Intl.Collator, String.prototype.localeCompare - const Collator = (function () { - if (InitType !== "Intl" && InitType !== "String") { - return; - } - - const InitializeCollator = function (collator, locales, options) { - const requestedLocales = CanonicalizeLocaleList(locales); - options = options === undefined ? _.create() : Internal.ToObject(options); - - collator.usage = GetOption(options, "usage", "string", ["sort", "search"], "sort"); - // TODO: determine the difference between sort and search locale data - // const collatorLocaleData = collator.usage === "sort" ? localeData : localeData; - - const opt = _.create(); - opt.matcher = GetOption(options, "localeMatcher", "string", ["lookup", "best fit"], "best fit"); - let kn = GetOption(options, "numeric", "boolean", undefined, undefined); - opt.kn = kn === undefined ? kn : Internal.ToString(kn); - opt.kf = GetOption(options, "caseFirst", "string", ["upper", "lower", "false"], undefined); - - const r = ResolveLocale(platform.isCollatorLocaleAvailable, requestedLocales, opt, ["co", "kn", "kf"]); - collator.locale = r.locale; - collator.collation = r.co === null ? "default" : r.co; - collator.numeric = r.kn === "true"; - collator.caseFirst = r.kf; - collator.caseFirstEnum = toEnum(CollatorCaseFirst, collator.caseFirst); - - collator.sensitivity = GetOption(options, "sensitivity", "string", ["base", "accent", "case", "variant"], "variant"); - collator.sensitivityEnum = toEnum(CollatorSensitivity, collator.sensitivity); - - collator.ignorePunctuation = GetOption(options, "ignorePunctuation", "boolean", undefined, false); - - collator.initializedCollator = true; - - return collator; - }; - - let localeCompareStateCache; - // Make arguments undefined to ensure that localeCompare.length === 1 - platform.registerBuiltInFunction(tagPublicFunction("String.prototype.localeCompare", function (that, locales = undefined, options = undefined) { - if (this === undefined || this === null) { - platform.raiseThis_NullOrUndefined("String.prototype.localeCompare"); - } - - const thisStr = String(this); - const thatStr = String(that); - - // Performance optimization to cache the state object and UCollator when the default arguments are provided - // TODO(jahorto): investigate caching when locales and/or options are provided - let stateObject; - if (locales === undefined && options === undefined) { - if (localeCompareStateCache === undefined) { - localeCompareStateCache = _.create(); - InitializeCollator(localeCompareStateCache, undefined, undefined); - } - - stateObject = localeCompareStateCache; - } else { - stateObject = _.create(); - InitializeCollator(stateObject, locales, options); - } - - return platform.localeCompare(thisStr, thatStr, stateObject, /* forStringPrototypeLocaleCompare */ true); - }), IntlBuiltInFunctionID.StringLocaleCompare); - - // If we were only initializing Intl for String.prototype, don't initialize Intl.Collator - if (InitType === "String") { - return; - } - - // using const f = function ... to remain consistent with the rest of the file, - // but the following function expressions get a name themselves to satisfy Intl.Collator.name - // and Intl.Collator.prototype.compare.name - const Collator = tagPublicFunction("Intl.Collator", function Collator(locales = undefined, options = undefined) { - if (this === Intl || this === undefined) { - return new Collator(locales, options); - } - - let obj = Internal.ToObject(this); - if (!_.isExtensible(obj)) { - platform.raiseObjectIsNonExtensible("Collator"); - } - - // Use the hidden object to store data - let hiddenObject = platform.getHiddenObject(obj); - - if (hiddenObject === undefined) { - hiddenObject = _.create(); - platform.setHiddenObject(obj, hiddenObject); - } - - InitializeCollator(hiddenObject, locales, options); - - // Add the bound compare - hiddenObject.boundCompare = _.bind(compare, obj); - delete hiddenObject.boundCompare.name; - return obj; - }); - - const compare = tagPublicFunction("Intl.Collator.prototype.compare", function compare(x, y) { - if (typeof this !== "object") { - platform.raiseNeedObjectOfType("Collator.prototype.compare", "Collator"); - } - - const hiddenObject = platform.getHiddenObject(this); - if (hiddenObject === undefined || !hiddenObject.initializedCollator) { - platform.raiseNeedObjectOfType("Collator.prototype.compare", "Collator"); - } - - return platform.localeCompare(String(x), String(y), hiddenObject, /* forStringPrototypeLocaleCompare */ false); - }); - - // See explanation of `getCanonicalLocales` - const collator_supportedLocalesOf_name = "Intl.Collator.supportedLocalesOf"; - const collator_supportedLocalesOf_func = tagPublicFunction(collator_supportedLocalesOf_name, function (locales, options = undefined) { - return supportedLocalesOf_unconstructable(this, collator_supportedLocalesOf_name, platform.isCollatorLocaleAvailable, locales, options); - }); - const collator_supportedLocalesOf = _.bind(collator_supportedLocalesOf_func, intlStaticMethodThisArg); - _.defineProperty(collator_supportedLocalesOf, "name", { - value: "supportedLocalesOf", - writable: false, - enumerable: false, - configurable: true, - }); - _.defineProperty(Collator, "supportedLocalesOf", { - value: collator_supportedLocalesOf, - writable: true, - enumerable: false, - configurable: true, - }); - - _.defineProperty(Collator, "prototype", { - value: new Collator(), - writable: false, - enumerable: false, - configurable: false - }); - setPrototype(Collator.prototype, Object.prototype); - - _.defineProperty(Collator.prototype, "constructor", { - value: Collator, - writable: true, - enumerable: false, - configurable: true - }); - _.defineProperty(Collator.prototype, "resolvedOptions", { - value: function resolvedOptions() { - if (typeof this !== "object") { - platform.raiseNeedObjectOfType("Collator.prototype.resolvedOptions", "Collator"); - } - const hiddenObject = platform.getHiddenObject(this); - if (hiddenObject === undefined || !hiddenObject.initializedCollator) { - platform.raiseNeedObjectOfType("Collator.prototype.resolvedOptions", "Collator"); - } - - const options = [ - "locale", - "usage", - "sensitivity", - "ignorePunctuation", - "collation", - "numeric", - "caseFirst", - ]; - - return createResolvedOptions(options, hiddenObject); - }, - writable: true, - enumerable: false, - configurable: true - }); - - // test262's test\intl402\Collator\prototype\compare\name.js checks the name of the descriptor's getter function - const getCompare = function () { - if (typeof this !== "object") { - platform.raiseNeedObjectOfType("Collator.prototype.compare", "Collator"); - } - - const hiddenObject = platform.getHiddenObject(this); - if (hiddenObject === undefined || !hiddenObject.initializedCollator) { - platform.raiseNeedObjectOfType("Collator.prototype.compare", "Collator"); - } - - return hiddenObject.boundCompare; - }; - _.defineProperty(getCompare, "name", { - value: "get compare", - writable: false, - enumerable: false, - configurable: true, - }); - _.defineProperty(Collator.prototype, "compare", { - get: tagPublicFunction("get compare", getCompare), - enumerable: false, - configurable: true - }); - - return Collator; - })(); - - // Intl.NumberFormat, Number.prototype.toLocaleString - var NumberFormat = (function () { - if (InitType !== "Intl" && InitType !== "Number") { - return; - } - - const InitializeNumberFormat = function (nf, locales, options) { - const requestedLocales = CanonicalizeLocaleList(locales); - options = options === undefined ? _.create() : Internal.ToObject(options); - - const opt = _.create(); - opt.localeMatcher = GetOption(options, "localeMatcher", "string", ["best fit", "lookup"], "best fit"); - - const r = ResolveLocale(platform.isNFLocaleAvailable, requestedLocales, opt, ["nu"]); - nf.locale = r.locale; - nf.numberingSystem = r.nu; - - const style = GetOption(options, "style", "string", ["decimal", "percent", "currency"], "decimal"); - nf.style = style; - nf.formatterToUse = toEnum(NumberFormatStyle, _.toUpperCase(style)); - const useCurrency = style === "currency"; - - let currency = GetOption(options, "currency", "string", undefined, undefined); - if (currency !== undefined && !IsWellFormedCurrencyCode(currency)) { - platform.raiseInvalidCurrencyCode(currency); - } else if (currency === undefined && useCurrency) { - platform.raiseMissingCurrencyCode(); - } - - let cDigits = 0; - if (useCurrency) { - currency = _.toUpperCase(currency); - nf.currency = currency; - cDigits = platform.currencyDigits(currency); - } - - let currencyDisplay = GetOption(options, "currencyDisplay", "string", ["code", "symbol", "name"], "symbol"); - if (useCurrency) { - nf.currencyDisplay = currencyDisplay - nf.currencyDisplayToUse = toEnum(NumberFormatCurrencyDisplay, _.toUpperCase(currencyDisplay)); - } - - let mnfdDefault, mxfdDefault; - if (useCurrency) { - mnfdDefault = cDigits; - mxfdDefault = cDigits; - } else { - mnfdDefault = 0; - if (style === "percent") { - mxfdDefault = 0; - } else { - mxfdDefault = 3; - } - } - - SetNumberFormatDigitOptions(nf, options, mnfdDefault, mxfdDefault); - - nf.useGrouping = GetOption(options, "useGrouping", "boolean", undefined, true); - - nf.initializedNumberFormat = true; - - // Cache api instance and update numbering system on the object - platform.cacheNumberFormat(nf); - - return nf; - }; - - platform.registerBuiltInFunction(tagPublicFunction("Number.prototype.toLocaleString", function () { - if (typeof this !== "number" && !(this instanceof Number)) { - platform.raiseNeedObjectOfType("Number.prototype.toLocaleString", "Number"); - } - - const stateObject = _.create(); - InitializeNumberFormat(stateObject, arguments[0], arguments[1]); - - const n = Internal.ToNumber(this); - return platform.formatNumber(n, stateObject, /* toParts */ false, /* forNumberPrototypeToLocaleString */ true); - }), IntlBuiltInFunctionID.NumberToLocaleString); - - if (InitType === "Number") { - return; - } - - const NumberFormat = tagPublicFunction("Intl.NumberFormat", function NumberFormat(locales = undefined, options = undefined) { - if (this === Intl || this === undefined) { - return new NumberFormat(locales, options); - } - - const obj = Internal.ToObject(this); - - if (!_.isExtensible(obj)) { - platform.raiseObjectIsNonExtensible("NumberFormat"); - } - - // Use the hidden object to store data - let hiddenObject = platform.getHiddenObject(obj); - if (hiddenObject === undefined) { - hiddenObject = _.create(); - platform.setHiddenObject(obj, hiddenObject); - } - - InitializeNumberFormat(hiddenObject, locales, options); - - hiddenObject.boundFormat = _.bind(format, obj) - delete hiddenObject.boundFormat.name; - - return obj; - }); - - const format = tagPublicFunction("Intl.NumberFormat.prototype.format", function format(n) { - n = Internal.ToNumber(n); - - if (typeof this !== "object") { - platform.raiseNeedObjectOfType("NumberFormat.prototype.format", "NumberFormat"); - } - - const hiddenObject = platform.getHiddenObject(this); - if (hiddenObject === undefined || !hiddenObject.initializedNumberFormat) { - platform.raiseNeedObjectOfType("NumberFormat.prototype.format", "NumberFormat"); - } - - return platform.formatNumber(n, hiddenObject, /* toParts */ false, /* forNumberPrototypeToLocaleString */ false); - }); - - const formatToParts = tagPublicFunction("Intl.NumberFormat.prototype.formatToParts", function formatToParts(n) { - n = Internal.ToNumber(n); - - if (typeof this !== "object") { - platform.raiseNeedObjectOfType("NumberFormat.prototype.formatToParts", "NumberFormat"); - } - - const hiddenObject = platform.getHiddenObject(this); - if (hiddenObject === undefined || !hiddenObject.initializedNumberFormat) { - platform.raiseNeedObjectOfType("NumberFormat.prototype.formatToParts", "NumberFormat"); - } - - return platform.formatNumber(n, hiddenObject, /* toParts */ true, /* forNumberPrototypeToLocaleString */ false); - }); - - // See explanation of `getCanonicalLocales` - const numberFormat_supportedLocalesOf_name = "Intl.NumberFormat.supportedLocalesOf"; - const numberFormat_supportedLocalesOf_func = tagPublicFunction(numberFormat_supportedLocalesOf_name, function (locales, options = undefined) { - return supportedLocalesOf_unconstructable(this, numberFormat_supportedLocalesOf_name, platform.isNFLocaleAvailable, locales, options); - }); - const numberFormat_supportedLocalesOf = _.bind(numberFormat_supportedLocalesOf_func, intlStaticMethodThisArg); - _.defineProperty(numberFormat_supportedLocalesOf, "name", { - value: "supportedLocalesOf", - writable: false, - enumerable: false, - configurable: true, - }); - _.defineProperty(NumberFormat, "supportedLocalesOf", { - value: numberFormat_supportedLocalesOf, - writable: true, - enumerable: false, - configurable: true, - }); - - _.defineProperty(NumberFormat, "prototype", { - value: new NumberFormat(), - writable: false, - enumerable: false, - configurable: false, - }); - setPrototype(NumberFormat.prototype, Object.prototype); - _.defineProperty(NumberFormat.prototype, "constructor", { - value: NumberFormat, - writable: true, - enumerable: false, - configurable: true, - }); - - _.defineProperty(NumberFormat.prototype, "resolvedOptions", { - value: function resolvedOptions() { - if (typeof this !== "object") { - platform.raiseNeedObjectOfType("NumberFormat.prototype.resolvedOptions", "NumberFormat"); - } - const hiddenObject = platform.getHiddenObject(this); - if (hiddenObject === undefined || !hiddenObject.initializedNumberFormat) { - platform.raiseNeedObjectOfType("NumberFormat.prototype.resolvedOptions", "NumberFormat"); - } - - const options = ["locale", "numberingSystem", "style", "currency", "currencyDisplay", "minimumIntegerDigits", - "minimumFractionDigits", "maximumFractionDigits", "minimumSignificantDigits", "maximumSignificantDigits", - "useGrouping"]; - - return createResolvedOptions(options, hiddenObject); - }, - writable: true, - enumerable: false, - configurable: true, - }); - - // test262's test\intl402\NumberFormat\prototype\format\name.js checks the name of the descriptor's getter function - const getFormat = function () { - if (typeof this !== "object") { - platform.raiseNeedObjectOfType("NumberFormat.prototype.format", "NumberFormat"); - } - - const hiddenObject = platform.getHiddenObject(this); - if (hiddenObject === undefined || !hiddenObject.initializedNumberFormat) { - platform.raiseNeedObjectOfType("NumberFormat.prototype.format", "NumberFormat"); - } - - return hiddenObject.boundFormat; - }; - _.defineProperty(getFormat, "name", { - value: "get format", - writable: false, - enumerable: false, - configurable: true, - }); - _.defineProperty(NumberFormat.prototype, "format", { - get: tagPublicFunction("get format", getFormat), - enumerable: false, - configurable: true, - }); - - _.defineProperty(NumberFormat.prototype, "formatToParts", { - value: formatToParts, - enumerable: false, - configurable: true, - writable: true, - }); - - return NumberFormat; - })(); - - // Intl.DateTimeFormat, Date.prototype.toLocaleString, Date.prototype.toLocaleDateString, Date.prototype.toLocaleTimeString - var DateTimeFormat = (function () { - if (InitType !== "Intl" && InitType !== "Date") { - return; - } - - const narrowShortLong = ["narrow", "short", "long"]; - const twoDigitNumeric = ["2-digit", "numeric"]; - const allOptionValues = _.concat(twoDigitNumeric, narrowShortLong); - const dateTimeComponents = [ - ["weekday", narrowShortLong], - ["era", narrowShortLong], - ["year", twoDigitNumeric], - ["month", allOptionValues], // month has every option available to it - ["day", twoDigitNumeric], - ["hour", twoDigitNumeric], - ["minute", twoDigitNumeric], - ["second", twoDigitNumeric], - ["timeZoneName", _.slice(narrowShortLong, 1)] // timeZoneName only allows "short" and "long" - ]; - - /** - * Given a user-provided options object, getPatternForOptions generates a LDML/ICU pattern and then - * sets the pattern and all of the relevant options implemented by the pattern on the provided dtf before returning. - * - * @param {Object} dtf the DateTimeFormat internal object - * @param {Object} options the options object originally given by the user - */ - const getPatternForOptions = (function () { - // symbols come from the Unicode LDML: http://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table - const symbolForOption = { - weekday: "E", - era: "G", - year: "y", - month: "M", - day: "d", - // for hour, we have some special handling - hour: "j", hour12: "h", hour24: "H", - minute: "m", - second: "s", - timeZoneName: "z", - }; - // NOTE - keep this up to date with the map in PlatformAgnostic::Intl::GetDateTimePartKind and the UDateFormatField enum - const optionForSymbol = { - E: "weekday", c: "weekday", e: "weekday", - G: "era", - y: "year", u: "year", U: "year", - M: "month", L: "month", - d: "day", - h: "hour", H: "hour", K: "hour", k: "hour", - m: "minute", - s: "second", - z: "timeZoneName", Z: "timeZoneName", v: "timeZoneName", V: "timeZoneName", O: "timeZoneName", X: "timeZoneName", x: "timeZoneName", - }; - - // lengths here are how many times a symbol is repeated in a skeleton for a given option - // the Intl spec recommends that Intl "short" -> CLDR "abbreviated" and Intl "long" -> CLDR "wide" - const symbolLengthForOption = { - numeric: 1, - "2-digit": 2, - short: 3, - long: 4, - narrow: 5, - }; - const optionForSymbolLength = { - 1: "numeric", - 2: "2-digit", - 3: "short", - 4: "long", - 5: "narrow", - }; - - // for fixing up the hour pattern later - const patternForHourCycle = { - h12: "h", - h23: "H", - h11: "K", - h24: "k", - }; - const hourCycleForPattern = { - h: "h12", - H: "h23", - K: "h11", - k: "h24", - }; - - return function (dtf, options) { - const resolvedOptions = _.reduce(dateTimeComponents, function (resolved, component) { - const prop = component[0]; - const value = GetOption(options, prop, "string", component[1], undefined); - if (value !== undefined) { - resolved[prop] = value; - } - - return resolved; - }, _.create()); - - // Providing undefined for the `values` argument allows { hour12: "asd" } to become hour12 = true, - // which is apparently a feature of the spec, rather than a bug. - const hour12 = GetOption(options, "hour12", "boolean", undefined, undefined); - const hc = dtf.hourCycle; - - // Build up a skeleton by repeating skeleton keys (like "G", "y", etc) for a count corresponding to the intl option value. - const skeleton = _.reduce(_.keys(resolvedOptions), function (skeleton, optionKey) { - let optionValue = resolvedOptions[optionKey]; - if (optionKey === "hour") { - // hour12/hourCycle resolution in the spec has multiple issues: - // hourCycle and -hc can be out of sync: https://github.com/tc39/ecma402/issues/195 - // hour12 has precedence over a more specific option in hourCycle/hc - // hour12 can force a locale that prefers h23 and h12 to use h11 or h24, according to the spec - // We temporarily work around these similarly to firefox and implement custom hourCycle/hour12 resolution. - // TODO(jahorto): follow up with Intl spec about these issues - if (hour12 === true || (hour12 === undefined && (hc === "h11" || hc === "h12"))) { - optionKey = "hour12"; - } else if (hour12 === false || (hour12 === undefined && (hc === "h23" || hc === "h24"))) { - optionKey = "hour24"; - } - } - - return skeleton + _.repeat(symbolForOption[optionKey], symbolLengthForOption[optionValue]); - }, ""); - - let pattern = platform.getPatternForSkeleton(dtf.locale, skeleton); - - // getPatternForSkeleton (udatpg_getBestPattern) can ignore, add, and modify fields compared to the markers we gave in the skeleton. - // Most importantly, udatpg_getBestPattern will determine the most-preferred hour field for a locale and time type (12 or 24). - // Scan the generated pattern to extract the resolved fields, and fix up the hour field if the user requested an explicit hour cycle - let inLiteral = false; - let i = 0; - while (i < pattern.length) { - let cur = pattern[i]; - const isQuote = cur === "'"; - if (inLiteral) { - if (isQuote) { - inLiteral = false; - } - ++i; - continue; - } else if (isQuote) { - inLiteral = true; - ++i; - continue; - } else if (cur === " ") { - ++i; - continue; - } - - // we are not in a format literal, so we are in a symbolic section of the pattern - // now, we can force the correct hour pattern and set the internal slots correctly - if (cur === "h" || cur === "H" || cur === "K" || cur === "k") { - if (hc && hour12 === undefined) { - // if we have found an hour-like symbol and the user wanted a specific hour cycle, - // replace it and all such proceding contiguous symbols with the symbol corresponding - // to the user-requested hour cycle, if they are different - const replacement = patternForHourCycle[hc]; - if (replacement !== cur) { - if (pattern[i + 1] === cur) { - // 2-digit hour - pattern = _.substring(pattern, 0, i) + replacement + replacement + _.substring(pattern, i + 2); - } else { - // numeric hour - pattern = _.substring(pattern, 0, i) + replacement + _.substring(pattern, i + 1); - } - - // we have modified pattern[i] so we need to update cur - cur = pattern[i]; - } - } else { - // if we have found an hour-like symbol and the user didnt request an hour cycle, - // set the internal hourCycle property from the resolved pattern - dtf.hourCycle = hourCycleForPattern[cur]; - } - } - - let k = i + 1; - while (k < pattern.length && pattern[k] === cur) { - ++k; - } - - const resolvedKey = optionForSymbol[cur]; - const resolvedValue = optionForSymbolLength[k - i]; - dtf[resolvedKey] = resolvedValue; - i = k; - } - - dtf.pattern = pattern; - }; - })(); - - /** - * Initializes the dateTimeFormat argument with the given locales and options. - * - * ECMA-402: #sec-initializedatetimeformat - * - * @param {Object} dateTimeFormat the state object representing a DateTimeFormat instance or toLocale*String call - * @param {String|String[]} locales a user-provided list of locales - * @param {Object} options a user-provided options object - */ - const InitializeDateTimeFormat = function (dateTimeFormat, locales, options) { - const requestedLocales = CanonicalizeLocaleList(locales); - options = ToDateTimeOptions(options, "any", "date"); - - const opt = _.create(); - opt.localeMatcher = GetOption(options, "localeMatcher", "string", ["lookup", "best fit"], "best fit"); - // hc is the only option that can be set by -u extension or by options object key - opt.hc = GetOption(options, "hourCycle", "string", ["h11", "h12", "h23", "h24"], undefined); - - const r = ResolveLocale(platform.isDTFLocaleAvailable, requestedLocales, opt, ["nu", "ca", "hc"]); - dateTimeFormat.locale = r.locale; - dateTimeFormat.calendar = r.ca; - dateTimeFormat.hourCycle = r.hc; - dateTimeFormat.numberingSystem = r.nu; - - const localeWithoutSubtags = r.dataLocale; - let tz = options.timeZone; - if (tz === undefined) { - tz = platform.getDefaultTimeZone(); - } else { - tz = Internal.ToString(tz); - } - - // make tz uppercase here, as its easier to do now than in platform (even though the uppercase operation - // is supposed to be done in #sec-isvalidtimezonename) - const canonicalTZ = platform.validateAndCanonicalizeTimeZone(tz); - if (canonicalTZ === undefined || canonicalTZ === "Etc/Unknown") { - raise.rangeError(tz, "timeZone", "IANA Zone or Link name (Area/Location)"); - } else if (canonicalTZ === "Etc/UTC" || canonicalTZ === "Etc/GMT") { - tz = "UTC"; - } else { - tz = canonicalTZ; - } - - dateTimeFormat.timeZone = tz; - - // get the formatMatcher for validation only - GetOption(options, "formatMatcher", "string", ["basic", "best fit"], "best fit"); - - // this call replaces most of the spec code related to hour12/hourCycle and format negotiation/handling - getPatternForOptions(dateTimeFormat, options); - dateTimeFormat.initializedDateTimeFormat = true; - - return dateTimeFormat; - }; - - /** - * Modifies the options argument to have correct default values - * - * ECMA-402: #sec-todatetimeoptions - * - * @param {Object} options user-provided options object passed as second argument to Intl.DateTimeFormat/toLocale*String - * @param {String} required which kind of options must be provided for the call (one of "date", "time", or "any") - * @param {String} defaults which kind of options will be set to a default value (one of "date", "time", or "all") - * @returns {Object} modified options object - */ - const ToDateTimeOptions = function (options, required, defaults) { - options = options === undefined ? null : Internal.ToObject(options); - options = _.create(options); - let needDefaults = true; - if (required === "date" || required === "any") { - _.forEach(["weekday", "year", "month", "day"], function (prop) { - const value = options[prop]; - if (value !== undefined) { - needDefaults = false; - } - }); - } - - if (required === "time" || required === "any") { - _.forEach(["hour", "minute", "second"], function (prop) { - const value = options[prop]; - if (value !== undefined) { - needDefaults = false; - } - }); - } - - if (needDefaults === true && (defaults === "date" || defaults === "all")) { - _.forEach(["year", "month", "day"], function (prop) { - _.defineProperty(options, prop, { - value: "numeric", - writable: true, - enumerable: true, - configurable: true, - }); - }) - } - - if (needDefaults === true && (defaults === "time" || defaults === "all")) { - _.forEach(["hour", "minute", "second"], function (prop) { - _.defineProperty(options, prop, { - value: "numeric", - writable: true, - enumerable: true, - configurable: true, - }); - }) - } - - return options; - }; - - const FormatDateTime = function (dtf, x) { - if (_.isNaN(x) || !_.isFinite(x)) { - platform.raiseInvalidDate(); - } - - return platform.formatDateTime(dtf, x, /* toParts */ false, /* forDatePrototypeToLocaleString */ false); - }; - - const FormatDateTimeToParts = function (dtf, x) { - if (_.isNaN(x) || !_.isFinite(x)) { - platform.raiseInvalidDate(); - } - - return platform.formatDateTime(dtf, x, /* toParts */ true, /* forDatePrototypeToLocaleString */ false); - }; - - // caches for objects constructed with default parameters for each method - const __DateInstanceToLocaleStringDefaultCache = [undefined, undefined, undefined]; - const __DateInstanceToLocaleStringDefaultCacheSlot = bare({ - toLocaleString: 0, - toLocaleDateString: 1, - toLocaleTimeString: 2 - }); - - function DateInstanceToLocaleStringImplementation(name, option1, option2, cacheSlot, locales, options) { - if (typeof this !== 'object' || !(this instanceof Date)) { - platform.raiseNeedObjectOfType(name, "Date"); - } - const value = _.getDate(new Date(this)); - if (_.isNaN(value) || !_.isFinite(value)) { - return "Invalid Date"; - } - - let stateObject = undefined; - if (platform.useCaches && locales === undefined && options === undefined) { - // All default parameters (locales and options): this is the most valuable case to cache. - if (__DateInstanceToLocaleStringDefaultCache[cacheSlot]) { - // retrieve cached value - stateObject = __DateInstanceToLocaleStringDefaultCache[cacheSlot]; - } else { - // populate cache - stateObject = _.create(); - InitializeDateTimeFormat(stateObject, undefined, ToDateTimeOptions(undefined, option1, option2)); - __DateInstanceToLocaleStringDefaultCache[cacheSlot] = stateObject; - } - } - - if (!stateObject) { - stateObject = _.create(); - InitializeDateTimeFormat(stateObject, locales, ToDateTimeOptions(options, option1, option2)); - } - - return platform.formatDateTime(stateObject, Internal.ToNumber(this), /* toParts */ false, /* forDatePrototypeToLocaleString */ true); - } - - // Note: tagPublicFunction (platform.tagPublicLibraryCode) messes with declared name of the FunctionBody so that - // the functions called appear correctly in the debugger and stack traces. Thus, we we cannot call tagPublicFunction in a loop. - // Each entry point needs to have its own unique FunctionBody (which is a function as defined in the source code); - // this is why we have seemingly repeated ourselves below, instead of having one function and calling it multiple times with - // different parameters. - // - // The following invocations of `platform.registerBuiltInFunction(tagPublicFunction(name, entryPoint))` are enclosed in IIFEs. - // The IIFEs are used to group all of the meaningful differences between each entry point into the arguments to the IIFE. - // The exception to this are the different entryPoint names which are only significant for debugging (and cannot be passed in - // as arguments, as the name is intrinsic to the function declaration). - // - // The `date_toLocale*String_entryPoint` function names are placeholder names that will never be seen from user code. - // The function name property and FunctionBody declared name are overwritten by `tagPublicFunction`. - // The fact that they are declared with unique names is helpful for debugging. - // The functions *must not* be declared as anonymous functions (must be declared with a name); - // converting from an unnnamed function to a named function is not readily supported by the platform code and - // this has caused us to hit assertions in debug builds in the past. - // - // See invocations of `tagPublicFunction` on the `supportedLocalesOf` entry points for a similar pattern. - // - // The entryPoint functions will be called as `Date.prototype.toLocale*String` and thus their `this` parameters will be a Date. - // `DateInstanceToLocaleStringImplementation` is not on `Date.prototype`, so we must propagate `this` into the call by using - // `DateInstanceToLocaleStringImplementation.call(this, ...)`. - - (function (name, option1, option2, cacheSlot, platformFunctionID) { - platform.registerBuiltInFunction(tagPublicFunction(name, function date_toLocaleString_entryPoint(locales = undefined, options = undefined) { - return DateInstanceToLocaleStringImplementation.call(this, name, option1, option2, cacheSlot, locales, options); - }), platformFunctionID); - })("Date.prototype.toLocaleString", "any", "all", __DateInstanceToLocaleStringDefaultCacheSlot.toLocaleString, IntlBuiltInFunctionID.DateToLocaleString); - - (function (name, option1, option2, cacheSlot, platformFunctionID) { - platform.registerBuiltInFunction(tagPublicFunction(name, function date_toLocaleDateString_entryPoint(locales = undefined, options = undefined) { - return DateInstanceToLocaleStringImplementation.call(this, name, option1, option2, cacheSlot, locales, options); - }), platformFunctionID); - })("Date.prototype.toLocaleDateString", "date", "date", __DateInstanceToLocaleStringDefaultCacheSlot.toLocaleDateString, IntlBuiltInFunctionID.DateToLocaleDateString); - - (function (name, option1, option2, cacheSlot, platformFunctionID) { - platform.registerBuiltInFunction(tagPublicFunction(name, function date_toLocaleTimeString_entryPoint(locales = undefined, options = undefined) { - return DateInstanceToLocaleStringImplementation.call(this, name, option1, option2, cacheSlot, locales, options); - }), platformFunctionID); - })("Date.prototype.toLocaleTimeString", "time", "time", __DateInstanceToLocaleStringDefaultCacheSlot.toLocaleTimeString, IntlBuiltInFunctionID.DateToLocaleTimeString); - - // if we were only initializing Date, dont bother initializing Intl.DateTimeFormat - if (InitType !== "Intl") { - return; - } - - /** - * The Intl.DateTimeFormat constructor - * - * ECMA-402: #sec-intl.datetimeformat - * - * @param {String|String[]} locales - * @param {Object} options - */ - function DateTimeFormat(locales = undefined, options = undefined) { - if (this === Intl || this === undefined) { - return new DateTimeFormat(locales, options); - } - - const obj = Internal.ToObject(this); - if (!_.isExtensible(obj)) { - platform.raiseObjectIsNonExtensible("DateTimeFormat"); - } - - // Use the hidden object to store data - let hiddenObject = platform.getHiddenObject(obj); - - if (hiddenObject === undefined) { - hiddenObject = _.create(); - platform.setHiddenObject(obj, hiddenObject); - } - - InitializeDateTimeFormat(hiddenObject, locales, options); - - // only format has to be bound and attached to the DateTimeFormat - hiddenObject.boundFormat = _.bind(format, obj); - delete hiddenObject.boundFormat.name; - - return obj; - } - tagPublicFunction("Intl.DateTimeFormat", DateTimeFormat); - - /** - * Asserts that dtf is a valid DateTimeFormat object, or throws a TypeError otherwise. - * - * Returns the hiddenObject for the given dtf. - * - * @param {Object} dtf `this` of a given call to a DateTimeFormat member function - * @param {String} name the name of the function requiring dtf to be a valid DateTimeFormat - * @returns {Object} the hiddenObject for the given dtf - */ - const ensureMember = function (dtf, name) { - if (typeof dtf !== 'object') { - platform.raiseNeedObjectOfType(`Intl.DateTimeFormat.prototype.${name}`, "DateTimeFormat"); - } - let hiddenObject = platform.getHiddenObject(dtf); - if (hiddenObject === undefined || !hiddenObject.initializedDateTimeFormat) { - platform.raiseNeedObjectOfType(`Intl.DateTimeFormat.prototype.${name}`, "DateTimeFormat"); - } - - return hiddenObject; - }; - - /** - * Calls ensureMember on dtf, and then converts the given date to a number. - * - * Returns the hiddenObject for the given dtf and the resolved date. - * - * @param {Object} dtf `this` of a given call to a DateTimeFormat member function - * @param {Object} date the date to be formatted - * @param {String} name the name of the function requiring dtf to be a valid DateTimeFormat - */ - const ensureFormat = function (dtf, date, name) { - const hiddenObject = ensureMember(dtf, name); - - let x; - if (date === undefined) { - x = platform.builtInJavascriptDateEntryNow(); - } else { - x = Internal.ToNumber(date); - } - - // list of arguments for FormatDateTime{ToParts} - return [hiddenObject, x]; - }; - - const format = function (date) { - return _.apply(FormatDateTime, undefined, ensureFormat(this, date, "format")); - }; - tagPublicFunction("Intl.DateTimeFormat.prototype.format", format); - - const formatToParts = function (date) { - return _.apply(FormatDateTimeToParts, undefined, ensureFormat(this, date, "formatToParts")); - }; - tagPublicFunction("Intl.DateTimeFormat.prototype.formatToParts", formatToParts); - - _.defineProperty(DateTimeFormat, "prototype", { - value: new DateTimeFormat(), - writable: false, - enumerable: false, - configurable: false - }); - setPrototype(DateTimeFormat.prototype, Object.prototype); - - _.defineProperty(DateTimeFormat.prototype, "constructor", { - value: DateTimeFormat, - writable: true, - enumerable: false, - configurable: true - }); - - // test262's test\intl402\DateTimeFormat\prototype\format\name.js checks the name of the descriptor's getter function - const getFormat = function () { - const hiddenObject = ensureMember(this, format); - - return hiddenObject.boundFormat; - }; - _.defineProperty(getFormat, "name", { - value: "get format", - writable: false, - enumerable: false, - configurable: true, - }); - _.defineProperty(DateTimeFormat.prototype, "format", { - get: tagPublicFunction("get format", getFormat), - enumerable: false, - configurable: true, - }); - _.defineProperty(DateTimeFormat.prototype, "formatToParts", { - value: formatToParts, - enumerable: false, - configurable: true, - writable: true, - }); - _.defineProperty(DateTimeFormat.prototype, "resolvedOptions", { - value: function resolvedOptions() { - const hiddenObject = ensureMember(this, "resolvedOptions"); - const options = [ - "locale", - "calendar", - "numberingSystem", - "timeZone", - "hourCycle", - "weekday", - "era", - "year", - "month", - "day", - "hour", - "minute", - "second", - "timeZoneName", - ]; - - return createResolvedOptions(options, hiddenObject, function (prop, resolved) { - if (prop === "hourCycle") { - const hc = hiddenObject.hourCycle; - if (hiddenObject.hour !== undefined && hc !== null) { - resolved.hourCycle = hc; - resolved.hour12 = hc === "h11" || hc === "h12"; - } - - return true; - } - }); - }, - writable: true, - enumerable: false, - configurable: true, - }); - - // See explanation of `getCanonicalLocales` - const dateTimeFormat_supportedLocalesOf_name = "Intl.DateTimeFormat.supportedLocalesOf"; - const dateTimeFormat_supportedLocalesOf_func = tagPublicFunction(dateTimeFormat_supportedLocalesOf_name, function (locales, options = undefined) { - return supportedLocalesOf_unconstructable(this, dateTimeFormat_supportedLocalesOf_name, platform.isDTFLocaleAvailable, locales, options); - }); - const dateTimeFormat_supportedLocalesOf = _.bind(dateTimeFormat_supportedLocalesOf_func, intlStaticMethodThisArg); - _.defineProperty(dateTimeFormat_supportedLocalesOf, "name", { - value: "supportedLocalesOf", - writable: false, - enumerable: false, - configurable: true, - }); - _.defineProperty(DateTimeFormat, "supportedLocalesOf", { - value: dateTimeFormat_supportedLocalesOf, - writable: true, - enumerable: false, - configurable: true, - }); - - return DateTimeFormat; - })(); - - const PluralRules = (function() { - if (InitType !== "Intl") { - return; - } - - /** - * Initializes the given pluralRules object - * - * ECMA 402: #sec-initializepluralrules - * - * @param {Object} pluralRules - * @param {String|String[]} locales - * @param {Object} options - */ - const InitializePluralRules = function (pluralRules, locales, options) { - const requestedLocales = CanonicalizeLocaleList(locales); - options = options === undefined ? _.create() : Internal.ToObject(options); - const opt = _.create(); - opt.matcher = GetOption(options, "localeMatcher", "string", ["lookup", "best fit"], "best fit"); - pluralRules.type = GetOption(options, "type", "string", ["cardinal", "ordinal"], "cardinal"); - - SetNumberFormatDigitOptions(pluralRules, options, 0, 3); - - // %PluralRules%.[[RelevantExtensionKeys]] = [] (#sec-intl.pluralrules-internal-slots) - const r = ResolveLocale(platform.isPRLocaleAvailable, requestedLocales, opt, []); - - pluralRules.locale = r.locale; - pluralRules.pluralCategories = platform.pluralRulesKeywords(pluralRules); - - pluralRules.initializedPluralRules = true; - - return pluralRules; - }; - - /** - * Returns a String value representing the plural form of n according to - * the effective locale and the options of pluralRules - * - * ECMA 402: #sec-resolveplural - * - * @param {Object} pluralRules - * @param {Number} n - */ - const ResolvePlural = function (pluralRules, n) { - if (!_.isFinite(n)) { - return "other"; - } - - return platform.pluralRulesSelect(pluralRules, n); - }; - - // params are explicitly `= undefined` to make PluralRules.length === 0 - const PluralRules = function PluralRules(locales = undefined, options = undefined) { - if (new.target === undefined) { - platform.raiseNeedObjectOfType("Intl.PluralRules", "PluralRules"); - } - - const stateObject = _.create(); - platform.setHiddenObject(this, stateObject); - - InitializePluralRules(stateObject, locales, options); - - return this; - }; - tagPublicFunction("Intl.PluralRules", PluralRules); - - // ECMA 402: #sec-intl.pluralrules.prototype - _.defineProperty(PluralRules, "prototype", { - value: {}, - writable: false, - enumerable: false, - configurable: false, - }); - - // See explanation of `getCanonicalLocales` - // ECMA 402: #sec-intl.pluralrules.supportedlocalesof - const pluralRules_supportedLocalesOf_name = "Intl.PluralRules.supportedLocalesOf"; - const pluralRules_supportedLocalesOf_func = tagPublicFunction(pluralRules_supportedLocalesOf_name, function (locales, options = undefined) { - return supportedLocalesOf_unconstructable(this, pluralRules_supportedLocalesOf_name, platform.isPRLocaleAvailable, locales, options); - }); - const pluralRules_supportedLocalesOf = _.bind(pluralRules_supportedLocalesOf_func, intlStaticMethodThisArg); - _.defineProperty(pluralRules_supportedLocalesOf, "name", { - value: "supportedLocalesOf", - writable: false, - enumerable: false, - configurable: true, - }); - _.defineProperty(PluralRules, "supportedLocalesOf", { - value: pluralRules_supportedLocalesOf, - writable: true, - enumerable: false, - configurable: true, - }); - - // ECMA 402: #sec-intl.pluralrules.prototype.select - const select = function select(value) { - const pr = platform.getHiddenObject(this); - if (!pr || !pr.initializedPluralRules) { - platform.raiseNeedObjectOfType("Intl.PluralRules.prototype.select", "PluralRules"); - } - - const n = Internal.ToNumber(value); - return ResolvePlural(pr, n); - }; - tagPublicFunction("Intl.PluralRules.prototype.select", select); - _.defineProperty(PluralRules.prototype, "select", { - value: select, - enumerable: false, - configurable: true, - writable: true, - }); - - const resolvedOptions = function resolvedOptions() { - const pr = platform.getHiddenObject(this); - if (!pr || !pr.initializedPluralRules) { - platform.raiseNeedObjectOfType("Intl.PluralRules.prototype.select", "PluralRules"); - } - - return createResolvedOptions([ - "locale", - "type", - "minimumIntegerDigits", - "minimumFractionDigits", - "maximumFractionDigits", - "minimumSignificantDigits", - "maximumSignificantDigits", - "pluralCategories" - ], pr, (prop, resolved) => { - if (prop === "pluralCategories") { - // https://github.com/tc39/ecma402/issues/224: create a copy of the pluralCategories array - resolved.pluralCategories = _.slice(pr.pluralCategories, 0); - return true; - } - }); - }; - tagPublicFunction("Intl.PluralRules.prototype.resolvedOptions", resolvedOptions); - _.defineProperty(PluralRules.prototype, "resolvedOptions", { - value: resolvedOptions, - enumerable: false, - configurable: true, - writable: true, - }); - - return PluralRules; - })(); - - // Initialize Intl properties only if needed - if (InitType === "Intl") { - _.defineProperty(Intl, "Collator", { value: Collator, writable: true, enumerable: false, configurable: true }); - _.defineProperty(Intl, "NumberFormat", { value: NumberFormat, writable: true, enumerable: false, configurable: true }); - _.defineProperty(Intl, "DateTimeFormat", { value: DateTimeFormat, writable: true, enumerable: false, configurable: true }); - _.defineProperty(Intl, "PluralRules", { value: PluralRules, writable: true, enumerable: false, configurable: true }); - } - - } - /** - * - * - * - * - * - * - * END ICU, BEGIN WINGLOB - * - * - * - * - * - * - */ - else { - - if (platform.localeLookupCache === undefined) { - platform.localeLookupCache = new IntlCache(); - } - if (platform.localeBestFitCache === undefined) { - platform.localeBestFitCache = new IntlCache(); - } - - let __defaultLocale = undefined; - const GetDefaultLocale = function () { - if (__defaultLocale && platform.useCaches) { - return __defaultLocale; - } - - const locale = platform.getDefaultLocale(); - if (!locale) { - // if the system locale is undefined/null/empty string, we have to - // do something or else we will crash - __defaultLocale = "en"; - } else { - __defaultLocale = locale; - } - - return __defaultLocale; - }; - - let CreateDateTimeFormat = function (dateTimeFormat, condition) { - let retVal = platform.createDateTimeFormat(dateTimeFormat, condition); - if (retVal === null) { - // TODO (doilij): remove this fallback when implemented under ICU - dateTimeFormat.__numberingSystem = ""; - dateTimeFormat.__patternStrings = [ - "{month.a}{day.b}{hour.c}{minute.d}{second.e}", - "" // another entry for fun - ] - } - // no return value - }; - - let IsWellFormedLanguageTag = function (langTag) { - let retVal = platform.isWellFormedLanguageTag(langTag); - if (retVal === null) { - if (!LANG_TAG_RE) { - InitializeLangTagREs(); - } - let match = platform.builtInRegexMatch(langTag, LANG_TAG_RE); - return !!match; - } else { - return retVal; - } - }; - - var forEachIfPresent = function (obj, length, func) { - let current = 0; - while (current < length) { - if (current in obj) { - func(obj[current]); - } - current++; - } - }; - - // A helper function that is meant to rethrow SOE and OOM exceptions allowing them to propagate. - var throwExIfOOMOrSOE = function (ex) { - if (ex.number === -2146828260 || ex.number === -2146828281) { - throw ex; - } - }; - - var tagPublicFunction = function (name, f) { - return platform.tagPublicLibraryCode(f, name); - }; - - var resolveLocaleBestFit = function (locale, defaultLocale) { - var resolvedLocale = platform.localeBestFitCache.get(locale); - if (resolvedLocale === undefined) { - resolvedLocale = platform.resolveLocaleBestFit(locale); - if (resolvedLocale === null) { - if (!LANG_TAG_BASE_RE) { - InitializeLangTagREs(); - } - let match = platform.builtInRegexMatch(locale, LANG_TAG_BASE_RE); - resolvedLocale = match[1] + (match[2] ? ('-' + match[2]) : '') + (match[3] ? ('-' + match[3]) : ''); - } - // If resolvedLocale is undefined, cache that we got undefined - // so we don't try to resolve for `locale` in future. - platform.localeBestFitCache.set(locale, resolvedLocale === undefined ? NOT_FOUND : resolvedLocale); - } else if (resolvedLocale === NOT_FOUND) { - resolvedLocale = undefined; - } - - if (defaultLocale === locale) { - return resolvedLocale; - } else if (defaultLocale === resolvedLocale) { - return undefined; - } else { - return resolvedLocale; - } - } - - var resolveLocaleLookup = function (localeWithoutSubtags) { - let resolvedLocale = platform.localeLookupCache.get(localeWithoutSubtags); - if (resolvedLocale === undefined) { - resolvedLocale = platform.resolveLocaleLookup(localeWithoutSubtags); - if (resolvedLocale === null) { - if (!LANG_TAG_BASE_RE) { - InitializeLangTagREs(); - } - let match = platform.builtInRegexMatch(localeWithoutSubtags, LANG_TAG_BASE_RE); - // match: [1] language; [2] script; [3] region (e.g. en-Latn-US) - resolvedLocale = match[1] - + (match[2] ? ('-' + match[2]) : '') - + (match[3] ? ('-' + match[3]) : ''); - } - // If resolvedLocale is undefined, cache that we got undefined - // so we don't try to resolve for `locale` in future. - platform.localeLookupCache.set(localeWithoutSubtags, resolvedLocale === undefined ? NOT_FOUND : resolvedLocale); - } else if (resolvedLocale === NOT_FOUND) { - resolvedLocale = undefined; - } - return resolvedLocale; - } - - var getExtensionSubtags = function (locale) { - if (!LANG_TAG_EXT_RE) { - InitializeLangTagREs(); - } - - const match = platform.builtInRegexMatch(locale, LANG_TAG_EXT_RE); - if (!match) { - return undefined; - } - - // Note: extensions are /((${extension})-)*/ and are made up of \\b(?:${singleton}(?:-${alphanum}{2,8})+)\\b - // where the ${alphanum}{2,8} fields are of the form `${key}-${value}`. - // TODO (doilij): return an array of `${key}-${value}` pairs - - // REVIEW (doilij): leading - might mean we need to filter: // ss.match(rr)[4].split('-').filter((x)=>!!x) - // In that case: - // TODO StringInstanceSplit - // TODO ArrayInstanceFilter - // let extSubtags = ArrayInstanceFilter(extensionsString.split('-'), (x)=>!!x); - const extSubtags = match[0].split('-').filter((x) => !!x); - // REVIEW (doilij): performance (testing for str[0]==='-' and using the string after that or updating the regex might be faster) - - return extSubtags; - } - - var resolveLocaleHelper = function (locale, fitter, extensionFilter, defaultLocale) { - var subTags = platform.getExtensions(locale); - if (subTags === null) { - // platform.getExtensions returns null to indicate fallback to JS implementation - subTags = getExtensionSubtags(locale); - } - - if (subTags) { - callInstanceFunc(ArrayInstanceForEach, subTags, function (subTag) { - locale = callInstanceFunc(StringInstanceReplace, locale, "-" + subTag, ""); - }); - } - - // Instead of using replace, we will match two groups, one capturing, one not. The non capturing group just strips away -u if present. - // We are substituting for the function replace; which will only make a change if /-u$/ was found (-u at the end of the line) - // And because match will return null if we don't match entire sequence, we are using the two groups stated above. - locale = platform.builtInRegexMatch(locale, /(.*?)(?:-u)?$/)[1]; - var resolved = fitter(locale, defaultLocale); - - if (extensionFilter !== undefined) { // Filter to expected sub-tags - var filtered = []; - callInstanceFunc(ArrayInstanceForEach, subTags, (function (subTag) { - var parts = platform.builtInRegexMatch(subTag, /([^-]*)-?(.*)?/); // [0] entire thing; [1] key; [2] value - var key = parts[1]; - if (callInstanceFunc(ArrayInstanceIndexOf, extensionFilter, key) !== -1) { - callInstanceFunc(ArrayInstancePush, filtered, subTag); - } - })); - subTags = filtered; - } - - // As long as we are using the JS version of getExtensions on ICU, "u" will be considered an extension - // of a locale like "de-u-co-phonebk" - // Thus, we can't add the -u- ourselves here - const withoutSubTags = resolved; - if (resolved) { - if (subTags && getArrayLength(subTags) > 0) { - if (isPlatformUsingICU) { - resolved += "-"; - } else { - resolved += "-u-"; - } - } - - resolved += callInstanceFunc(ArrayInstanceJoin, subTags, "-"); - } else { - resolved = undefined; - } - - return setPrototype({ - locale: resolved, - subTags: subTags, - localeWithoutSubtags: withoutSubTags - }, null); - } - - var resolveLocales = function (givenLocales, matcher, extensionFilter, defaultLocaleFunc) { - var fitter = matcher === "lookup" ? resolveLocaleLookup : resolveLocaleBestFit; - var length = getArrayLength(givenLocales); - - var defaultLocale = defaultLocaleFunc(); - - length = length !== undefined ? length : 0; - for (var i = 0; i < length; i++) { - var resolved = resolveLocaleHelper(givenLocales[i], fitter, extensionFilter, defaultLocale); - if (resolved.locale !== undefined) { - return resolved; - } - } - return resolveLocaleHelper(defaultLocale, fitter, undefined, defaultLocale); - } - - // get just the language-script-region from the default locale - let __strippedDefaultLocale = undefined; - var strippedDefaultLocale = function () { - if (__strippedDefaultLocale) { - return __strippedDefaultLocale; - } - - if (isPlatformUsingICU) { - if (!LANG_TAG_BASE_RE) { - InitializeLangTagREs(); - } - - const def = GetDefaultLocale(); - const match = platform.builtInRegexMatch(def, LANG_TAG_BASE_RE); - if (match) { - // strip extensions by matching only the base - __strippedDefaultLocale = match[0]; - } else { - __strippedDefaultLocale = def; - } - } else { - // the only thing to strip off of a WinGlob locale is the collation, - // which comes after the underscore - __strippedDefaultLocale = platform.builtInRegexMatch(GetDefaultLocale(), /([^_]*).*/)[1]; - } - - return __strippedDefaultLocale; - }; - - var Internal = (function () { - return setPrototype({ - ToObject: function (o) { - if (o === null) { - platform.raiseNeedObject(); - } - return o !== undefined ? Object(o) : undefined; - }, - - ToString: function (s) { - return s !== undefined ? String(s) : undefined; - }, - - ToNumber: function (n) { - return n === undefined ? NaN : Number(n); - }, - - ToLogicalBoolean: function (v) { - return v !== undefined ? Boolean(v) : undefined; - }, - - ToUint32: function (n) { - var num = Number(n), - ret = 0; - if (!isNaN(num) && isFinite(num)) { - ret = Math.abs(num % Math.pow(2, 32)); - } - return ret; - }, - - HasProperty: function (o, p) { - // Walk the prototype chain - while (o) { - if (callInstanceFunc(ObjectInstanceHasOwnProperty, o, p)) { - return true; - } - o = ObjectGetPrototypeOf(o); - } - } - }, null) - })(); - - // Internal ops implemented in JS: - function GetOption(options, property, type, values, fallback) { - let value = options[property]; - - if (value !== undefined) { - if (type == "boolean") { - value = Internal.ToLogicalBoolean(value); - } - - if (type == "string") { - value = Internal.ToString(value); - } - - if (type == "number") { - value = Internal.ToNumber(value); - } - - if (values !== undefined && callInstanceFunc(ArrayInstanceIndexOf, values, value) == -1) { - platform.raiseOptionValueOutOfRange_3(String(value), String(property), "['" + callInstanceFunc(ArrayInstanceJoin, values, "', '") + "']"); - } - - return value; - } - - return fallback; - } - - function GetNumberOption(options, property, minimum, maximum, fallback) { - const rawValue = options[property]; - - if (typeof rawValue !== 'undefined') { - const formattedValue = Internal.ToNumber(rawValue); - - if (isNaN(formattedValue) || formattedValue < minimum || formattedValue > maximum) { - platform.raiseOptionValueOutOfRange_3(String(rawValue), String(property), "[" + minimum + " - " + maximum + "]"); - } - - return Math.floor(formattedValue); - } else { - return fallback; - } - } - - let CURRENCY_CODE_RE; - function InitializeCurrencyRegExp() { - CURRENCY_CODE_RE = /^[A-Z]{3}$/i; - } - - let LANG_TAG_BASE_RE; // language[-script[-region]] - let LANG_TAG_EXT_RE; // extension part (variant, extension, privateuse) - let LANG_TAG_RE; // full syntax of language tags (including privateuse and grandfathered) - function InitializeLangTagREs() { - // Language Tag Syntax as described in RFC 5646 #section-2.1 - // Note: All language tags are comprised only of ASCII characters (makes our job easy here) - // Note: Language tags in canonical form have case conventions, but language tags are case-insensitive for our purposes - - // Note: The ABNF syntax used in RFC 5646 #section-2.1 uses the following numeric quantifier conventions: - // - (Parentheses) are used for grouping - // - PRODUCTION => exactly 1 of PRODUCTION /PRODUCTION/ - // - [PRODUCTION] => 0 or 1 of PRODUCTION /(PRODUCTION)?/ - // - #PRODUCTION => exactly # of PRODUCTION /(PRODUCTION){#}/ - // - a*bPRODUCTION (where a and b are optional) - // - *PRODUCTION => any number of PRODUCTION /(PRODUCTION)*/ - // - 1*PRODUCTION => 1 or more of PRODUCTION /(PRODUCTION)+/ - // - #*PRODUCTION => # or more of PRODUCTION /(PRODUCTION){#,}/ - // - *#PRODUCTION => 0 to # (inclusive) of PRODUCTION /(PRODUCTION){,#}/ or /(PRODUCTION){0,#}/ - // - a*bPRODUCTION => a to b (inclusive) of PRODUCTION /(PRODUCTION){a,b}/ - - const ALPHA = "[A-Z]"; - const DIGIT = "[0-9]"; - const alphanum = `(?:${ALPHA}|${DIGIT})`; - - const regular = "\\b(?:art-lojban|cel-gaulish|no-bok|no-nyn|zh-guoyu|zh-hakka|zh-min|zh-min-nan|zh-xiang)\\b"; - const irregular = "\\b(?:en-GB-oed|i-ami|i-bnn|i-default|i-enochian|i-hak|i-klingon|i-lux|i-mingo" + - "|i-navajo|i-pwn|i-tao|i-tay|i-tsu|sgn-BE-FR|sgn-BE-NL|sgn-CH-DE)\\b"; - const grandfathered = `\\b(?:${regular}|${irregular})\\b`; - - const privateuse = `\\b(?:x(?:-${alphanum}{1,8}\\b)+)\\b`; // privateuse = "x" 1*("-" (1*8alphanum)) - const singleton = `\\b(?:${DIGIT}|[A-WY-Z])\\b`; // singleton ~= alphanum except for 'x' ; (paraphrased) - const extension = `\\b(?:${singleton}(?:-${alphanum}{2,8})+)\\b`; // extension = singleton 1*("-" (2*8alphanum)) - const variant = `\\b(?:${alphanum}{5,8}|${DIGIT}${alphanum}{3})\\b`; // variant = 5*8alphanum / (DIGIT 3alphanum) - const region = `\\b(?:${ALPHA}{2}|${DIGIT}{3})\\b`; // region = 2ALPHA / 3DIGIT - - const script = `\\b(?:${ALPHA}{4})\\b`; // script = 4ALPHA - const extlang = `\\b(?:${ALPHA}{3}\\b(?:-${ALPHA}{3}){0,2})\\b`; // extlang = 3ALPHA *2("-" 3ALPHA) - - const language = '\\b(?:' + // language = - `${ALPHA}{2,3}` + // 2*3ALPHA ; shortest ISO 639 code - `\\b(?:-${extlang})?` + // ["-" extlang] ; sometimes followed by extended language subtags - // `|${ALPHA}{4}` + // / 4ALPHA ; or reserved for future use - // `|${ALPHA}{5,8}` + // / 5*8ALPHA ; or registered language subtag - `|${ALPHA}{4,8}` + // ~/ 4*8ALPHA ; (paraphrased: combined previous two lines) - ')\\b'; - - // below: ${language}, ${script}, and ${region} are wrapped in parens because matching groups are useful for replacement - const LANG_TAG_BASE = `\\b(${language})\\b` + // langtag = language - `\\b(?:-(${script}))?\\b` + // ["-" script] - `\\b(?:-(${region}))?\\b` ; // ["-" region] - const LANG_TAG_EXT = `\\b(?:-${variant})*\\b` + // *("-" variant) - `\\b((?:-${extension})*)\\b` + // *("-" extension) - `\\b(?:-${privateuse})?\\b` ; // ["-" privateuse] - const langtag = `\\b${LANG_TAG_BASE}\\b${LANG_TAG_EXT}\\b`; - - const LANG_TAG = `\\b(?:${langtag}|${privateuse}|${grandfathered})\\b`; // Language-Tag = ... - - LANG_TAG_BASE_RE = new RegExp(LANG_TAG_BASE, 'i'); // [1] language; [2] script; [3] region - LANG_TAG_EXT_RE = new RegExp(LANG_TAG_EXT, 'i'); // [1] extensions /((${extension})-)*/ - LANG_TAG_RE = new RegExp(LANG_TAG, 'i'); // [1] language; [2] script; [3] region; [4] extensions - } - - function IsWellFormedCurrencyCode(code) { - code = Internal.ToString(code); - - if (!CURRENCY_CODE_RE) { - InitializeCurrencyRegExp(); - } - - return platform.builtInRegexMatch(code, CURRENCY_CODE_RE) !== null; - } - - // Make sure locales is an array, remove duplicate locales, make sure each locale is valid, and canonicalize each. - function CanonicalizeLocaleList(locales) { - if (typeof locales === 'undefined') { - return []; - } - - if (typeof locales === 'string') { - locales = [locales]; - } - - locales = Internal.ToObject(locales); - const length = Internal.ToUint32(locales.length); - - // TODO: Use sets here to prevent duplicates - let seen = []; - - forEachIfPresent(locales, length, function (locale) { - if ((typeof locale !== 'string' && typeof locale !== 'object') || locale === null) { - platform.raiseNeedObjectOrString("Locale"); - } - - let tag = Internal.ToString(locale); - - if (!IsWellFormedLanguageTag(tag)) { - platform.raiseLocaleNotWellFormed(String(tag)); - } - - tag = platform.normalizeLanguageTag(tag); - - if (tag !== undefined && callInstanceFunc(ArrayInstanceIndexOf, seen, tag) === -1) { - callInstanceFunc(ArrayInstancePush, seen, tag); - } - }); - - return seen; - } - - function LookupSupportedLocales(requestedLocales, fitter, defaultLocale) { - var subset = []; - var count = 0; - callInstanceFunc(ArrayInstanceForEach, requestedLocales, function (locale) { - try { - var resolved = resolveLocaleHelper(locale, fitter, undefined, defaultLocale); - if (resolved.locale) { - ObjectDefineProperty(subset, count, { value: resolved.locale, writable: false, configurable: false, enumerable: true }); - count = count + 1; - } - } catch (ex) { - throwExIfOOMOrSOE(ex); - // Expecting an error (other than OOM or SOE), same as fitter returning undefined - } - }); - ObjectDefineProperty(subset, "length", { value: count, writable: false, configurable: false }); - return subset; - } - - var supportedLocalesOfWrapper = function (that, functionName, locales, options) { - if (that === null || that === undefined) { - platform.raiseNotAConstructor(functionName); - } - - var hiddenObj = platform.getHiddenObject(that); - if (!hiddenObj || hiddenObj.isValid !== "Valid") { - platform.raiseNotAConstructor(functionName); - } - - return supportedLocalesOf(locales, options); - } - - var canonicalizeLocaleListWrapper = function (that, functionName, locales) { - if (that === null || that === undefined) { - platform.raiseNotAConstructor(functionName); - } - - var hiddenObj = platform.getHiddenObject(that); - if (!hiddenObj || hiddenObj.isValid !== "Valid") { - platform.raiseNotAConstructor(functionName); - } - - return CanonicalizeLocaleList(locales); - } - - // Shared among all the constructors - var supportedLocalesOf = function (locales, options) { - var matcher; - locales = CanonicalizeLocaleList(locales); - - if (typeof options !== 'undefined') { - matcher = options.localeMatcher; - - if (typeof matcher !== 'undefined') { - matcher = Internal.ToString(matcher); - - if (matcher !== 'lookup' && matcher !== 'best fit') { - platform.raiseOptionValueOutOfRange_3(String(matcher), "localeMatcher", "['best fit', 'lookup']"); - } - } - } - - if (typeof matcher === 'undefined' || matcher === 'best fit') { - return LookupSupportedLocales(locales, resolveLocaleBestFit, platform.normalizeLanguageTag(strippedDefaultLocale())); - } else { - return LookupSupportedLocales(locales, resolveLocaleLookup, strippedDefaultLocale()); - } - }; - - const intlStaticMethodThisArg = setPrototype({}, null); - platform.setHiddenObject(intlStaticMethodThisArg, setPrototype({ isValid: "Valid" }, null)); - - // We wrap these functions so that we can define the correct name for this function for each Intl constructor, - // which allows us to display the correct error message for each Intl type. - const collator_supportedLocalesOf_name = "Intl.Collator.supportedLocalesOf"; - const collator_supportedLocalesOf = callInstanceFunc(FunctionInstanceBind, tagPublicFunction(collator_supportedLocalesOf_name, - function collator_supportedLocalesOf_dummyName(locales, options = undefined) { - return supportedLocalesOfWrapper(this, collator_supportedLocalesOf_name, locales, options); - }), intlStaticMethodThisArg); - - const numberFormat_supportedLocalesOf_name = "Intl.NumberFormat.supportedLocalesOf"; - const numberFormat_supportedLocalesOf = callInstanceFunc(FunctionInstanceBind, tagPublicFunction(numberFormat_supportedLocalesOf_name, - function numberFormat_supportedLocalesOf_dummyName(locales, options = undefined) { - return supportedLocalesOfWrapper(this, numberFormat_supportedLocalesOf_name, locales, options); - }), intlStaticMethodThisArg); - - const dateTimeFormat_supportedLocalesOf_name = "Intl.DateTimeFormat.supportedLocalesOf"; - const dateTimeFormat_supportedLocalesOf = callInstanceFunc(FunctionInstanceBind, tagPublicFunction(dateTimeFormat_supportedLocalesOf_name, - function dateTimeFormat_supportedLocalesOf_dummyName(locales, options = undefined) { - return supportedLocalesOfWrapper(this, dateTimeFormat_supportedLocalesOf_name, locales, options); - }), intlStaticMethodThisArg); - - const getCanonicalLocales_name = "Intl.getCanonicalLocales"; - const getCanonicalLocales = callInstanceFunc(FunctionInstanceBind, tagPublicFunction(getCanonicalLocales_name, - function getCanonicalLocales_dummyName(locales) { - return canonicalizeLocaleListWrapper(this, getCanonicalLocales_name, locales); - }), intlStaticMethodThisArg); - - // TODO: Bound functions get the "bound" prefix by default, so we need to remove it. - // When https://github.com/Microsoft/ChakraCore/issues/637 is fixed and we have a way - // to make built-in functions non-constructible, we can remove the call to - // Function.prototype.bind (i.e. FunctionInstanceBind) and just rely on tagging instead of setting the "name" manually. - ObjectDefineProperty(collator_supportedLocalesOf, 'name', { value: 'supportedLocalesOf' }); - ObjectDefineProperty(numberFormat_supportedLocalesOf, 'name', { value: 'supportedLocalesOf' }); - ObjectDefineProperty(dateTimeFormat_supportedLocalesOf, 'name', { value: 'supportedLocalesOf' }); - ObjectDefineProperty(getCanonicalLocales, 'name', { value: 'getCanonicalLocales' }); - - // If an empty string is encountered for the value of the property; that means that is by default. - // So in the case of zh-TW; "default" and "stroke" are the same. - // This list was discussed with AnBorod, AnGlass and SureshJa. - var localesAcceptingCollationValues = setPrototype({ - "es-ES": setPrototype({ "trad": "tradnl" }, null), - "lv-LV": setPrototype({ "trad": "tradnl" }, null), - "de-DE": setPrototype({ "phonebk": "phoneb" }, null), - "ja-JP": setPrototype({ "unihan": "radstr" }, null), - // We believe "pronun" means "pronunciation" - "zh-TW": setPrototype({ "phonetic": "pronun", "unihan": "radstr", "stroke": "" }, null), - "zh-HK": setPrototype({ "unihan": "radstr", "stroke": "" }, null), - "zh-MO": setPrototype({ "unihan": "radstr", "stroke": "" }, null), - "zh-CN": setPrototype({ "stroke": "stroke", "pinyin": "" }, null), - "zh-SG": setPrototype({ "stroke": "stroke", "pinyin": "" }, null) - - // The following locales are supported by Windows; however, no BCP47 equivalent collation values were found for these. - // In future releases; this list (plus most of the Collator implementation) will be changed/removed as the platform support is expected to change. - // "hu-HU": ["technl"], - // "ka-GE": ["modern"], - // "x-IV": ["mathan"] - }, null); - - // reverses the keys and values in each locale's sub-object in localesAcceptingCollationValues - // localesAcceptingCollationValues[locale][key] = value -> reverseLocalesAcceptingCollationValues[locale][value] = key - var reverseLocalesAcceptingCollationValues = (function () { - const toReturn = setPrototype({}, null); - callInstanceFunc(ArrayInstanceForEach, ObjectGetOwnPropertyNames(localesAcceptingCollationValues), function (locale) { - const collationValuesForLocale = localesAcceptingCollationValues[locale]; - const reversedCollationValues = setPrototype({}, null); - - callInstanceFunc(ArrayInstanceForEach, ObjectGetOwnPropertyNames(collationValuesForLocale), function (collation) { - const windowsTag = collationValuesForLocale[collation]; - if (windowsTag !== "") { - reversedCollationValues[windowsTag] = collation; - } - }); - - toReturn[locale] = reversedCollationValues; - }); - return toReturn; - }()); - - // mappedDefaultLocale will get the default locale and update any deprecated - // collation/sort order values it may use - let __mappedDefaultLocale = undefined; - var mappedDefaultLocale = function () { - if (__mappedDefaultLocale && platform.useCaches) { - return __mappedDefaultLocale; - } - - let locale = undefined; - let collation = undefined; - if (isPlatformUsingICU) { - // ICU's getDefaultLocale() will return a valid BCP-47/RFC 5646 langtag - locale = GetDefaultLocale(); - const match = platform.builtInRegexMatch(locale, /-u(?:-[^\-][^\-]?-[^\-]+)*-co-([^\-]+).*/); - if (match) { - // if the system default locale had a collation, strip it for now - // we will add the collation back later in this function - collation = match[1]; - locale = callInstanceFunc(StringInstanceReplace, locale, `-co-${collation}`, ""); - } - } else { - // Windows' getDefaultLocale() will return a RFC4646 langtag - const parts = platform.builtInRegexMatch(GetDefaultLocale(), /([^_]*)_?(.+)?/); - locale = parts[1]; - collation = parts[2]; - } - - if (collation === undefined) { - __mappedDefaultLocale = locale; - return __mappedDefaultLocale; - } - - // we stripped the -co-collation or _collation above, so this function adds it back - const createLocaleCollationString = function (finalLocale, finalCollation) { - if (isPlatformUsingICU) { - return `${finalLocale}-co-${finalCollation}`; - } else { - return `${finalLocale}-u-co-${finalCollation}`; - } - }; - - const collationMapForLocale = reverseLocalesAcceptingCollationValues[locale]; - if (collationMapForLocale === undefined) { - // Assume the system wouldn't give us back a bad collation value - __mappedDefaultLocale = createLocaleCollationString(locale, collation); - return __mappedDefaultLocale; - } - - const mappedCollation = collationMapForLocale[collation]; - if (mappedCollation !== undefined) { - __mappedDefaultLocale = createLocaleCollationString(locale, mappedCollation); - } else { - __mappedDefaultLocale = createLocaleCollationString(locale, collation); - } - - return __mappedDefaultLocale; - }; - - // Intl.Collator, String.prototype.localeCompare - var Collator = (function () { - - if (InitType === 'Intl' || InitType === 'String') { - - function InitializeCollator(collator, localeList, options) { - if (typeof collator != "object") { - platform.raiseNeedObject(); - } - - if (callInstanceFunc(ObjectInstanceHasOwnProperty, collator, '__initializedIntlObject') && collator.__initializedIntlObject) { - platform.raiseObjectIsAlreadyInitialized("Collator", "Collator"); - } - - collator.__initializedIntlObject = true; - - // Extract options - if (typeof options === 'undefined') { - options = setPrototype({}, null); - } else { - options = Internal.ToObject(options); - } - - var matcher = GetOption(options, "localeMatcher", "string", ["lookup", "best fit"], "best fit"); - var usage = GetOption(options, "usage", "string", ["sort", "search"], "sort"); - var sensitivity = GetOption(options, "sensitivity", "string", ["base", "accent", "case", "variant"], undefined); - var ignorePunctuation = GetOption(options, "ignorePunctuation", "boolean", undefined, false); - var caseFirst = GetOption(options, "caseFirst", "string", ["upper", "lower", "false"], undefined); - var numeric = GetOption(options, "numeric", "boolean", [true, false], undefined); - - // Deal with the locales and extensions - localeList = CanonicalizeLocaleList(localeList); - var resolvedLocaleInfo = resolveLocales(localeList, matcher, undefined, mappedDefaultLocale); - - var collation = "default"; - var resolvedLocaleLookup = resolveLocaleLookup(resolvedLocaleInfo.localeWithoutSubtags); - var collationAugmentedLocale = resolvedLocaleLookup; - - if (resolvedLocaleInfo.subTags) { - callInstanceFunc(ArrayInstanceForEach, resolvedLocaleInfo.subTags, function (subTag) { - var parts = platform.builtInRegexMatch(subTag, /([^-]*)-?(.*)?/); // [0] entire thing; [1] key; [2] value - var key = parts[1]; - var value = parts[2] === "" ? undefined : parts[2]; - if (key === "kf" && caseFirst === undefined) { - caseFirst = GetOption(setPrototype({ caseFirst: value }, null), "caseFirst", "string", ["upper", "lower", "false"], undefined); - } else if (key === "kn" && numeric === undefined) { - if (value !== undefined) { - numeric = Internal.ToLogicalBoolean(callInstanceFunc(StringInstanceToLowerCase, value) === "true"); - } else { - numeric = true; - } - } else if (key === "co" && value !== undefined && value !== "default" && value !== "search" && value !== "sort" && value !== "standard") { - // Ignore these collation values as they shouldn't have any impact - collation = value; - } - }); - } - if (collation !== "default") { - var accepedCollationForLocale = localesAcceptingCollationValues[collationAugmentedLocale]; - var windowsCollation = ""; - if (accepedCollationForLocale !== undefined && (windowsCollation = accepedCollationForLocale[collation]) !== undefined) { - if (windowsCollation !== "") { - collationAugmentedLocale = collationAugmentedLocale + "_" + windowsCollation; - } - } - else { - collation = "default"; - } - } - - // Correct options if need be. - if (caseFirst === undefined) { - try { - var num = platform.compareString('A', 'a', resolvedLocaleLookup, undefined, undefined, undefined, undefined); - } catch (e) { - // Rethrow OOM or SOE - throwExIfOOMOrSOE(e); - - // Otherwise, Generic message to cover the exception throw from the CompareStringEx api. - // The platform's exception is also generic and in most if not all cases specifies that "a" argument is invalid. - // We have no other information from the platform on the cause of the exception. - platform.raiseOptionValueOutOfRange(); - } - - if (num === 0) { - caseFirst = 'false'; - } else if (num === -1) { - caseFirst = 'upper'; - } else { - caseFirst = 'lower'; - } - } - - if (sensitivity === undefined) { - sensitivity = "variant"; - } - - if (numeric === undefined) { - numeric = false; - } - - // Set the options on the object - collator.__matcher = matcher; - collator.__locale = resolvedLocaleInfo.localeWithoutSubtags; - collator.__localeForCompare = collationAugmentedLocale; - collator.__usage = usage; - collator.__sensitivity = sensitivity; - collator.__ignorePunctuation = ignorePunctuation; - collator.__caseFirst = caseFirst; - collator.__numeric = numeric; - collator.__collation = collation; - collator.__initializedCollator = true; - } - - platform.registerBuiltInFunction(tagPublicFunction("String.prototype.localeCompare", function () { - var that = arguments[0]; - if (this === undefined || this === null) { - platform.raiseThis_NullOrUndefined("String.prototype.localeCompare"); - } - else if (that === null) { - platform.raiseNeedObject(); - } - // ToString must be called on this/that argument before we do any other operation, as other operations in InitializeCollator may also be observable - var thisArg = String(this); - var that = String(that); - var stateObject = setPrototype({}, null); - InitializeCollator(stateObject, arguments[1], arguments[2]); - return Number(platform.compareString( - thisArg, - that, - stateObject.__localeForCompare, - toEnum(CollatorSensitivity, stateObject.__sensitivity), - stateObject.__ignorePunctuation, - stateObject.__numeric, - toEnum(CollatorCaseFirst, stateObject.__caseFirst) - )); - }), IntlBuiltInFunctionID.StringLocaleCompare); - - if (InitType === 'Intl') { - - function Collator(locales = undefined, options = undefined) { - if (this === Intl || this === undefined) { - return new Collator(locales, options); - } - - let obj = Internal.ToObject(this); - if (!ObjectIsExtensible(obj)) { - platform.raiseObjectIsNonExtensible("Collator"); - } - - // Use the hidden object to store data - let hiddenObject = platform.getHiddenObject(obj); - - if (hiddenObject === undefined) { - hiddenObject = setPrototype({}, null); - platform.setHiddenObject(obj, hiddenObject); - } - - InitializeCollator(hiddenObject, locales, options); - - // Add the bound compare - hiddenObject.__boundCompare = callInstanceFunc(FunctionInstanceBind, compare, obj); - delete hiddenObject.__boundCompare.name; - return obj; - } - tagPublicFunction("Intl.Collator", Collator); - - function compare(a, b) { - if (typeof this !== 'object') { - platform.raiseNeedObjectOfType("Collator.prototype.compare", "Collator"); - } - - var hiddenObject = platform.getHiddenObject(this); - if (hiddenObject === undefined || !hiddenObject.__initializedCollator) { - platform.raiseNeedObjectOfType("Collator.prototype.compare", "Collator"); - } - - a = String(a); - b = String(b); - - return Number(platform.compareString( - a, - b, - hiddenObject.__localeForCompare, - toEnum(CollatorSensitivity, hiddenObject.__sensitivity), - hiddenObject.__ignorePunctuation, - hiddenObject.__numeric, - toEnum(CollatorCaseFirst, hiddenObject.__caseFirst) - )); - } - tagPublicFunction("Intl.Collator.prototype.compare", compare); - - ObjectDefineProperty(Collator, 'supportedLocalesOf', { value: collator_supportedLocalesOf, writable: true, configurable: true }); - - ObjectDefineProperty(Collator, 'prototype', { value: new Collator(), writable: false, enumerable: false, configurable: false }); - setPrototype(Collator.prototype, Object.prototype); - - ObjectDefineProperty(Collator.prototype, 'constructor', { value: Collator, writable: true, enumerable: false, configurable: true }); - - ObjectDefineProperty(Collator.prototype, 'resolvedOptions', { - value: function resolvedOptions() { - if (typeof this !== 'object') { - platform.raiseNeedObjectOfType("Collator.prototype.resolvedOptions", "Collator"); - } - var hiddenObject = platform.getHiddenObject(this); - if (hiddenObject === undefined || !hiddenObject.__initializedCollator) { - platform.raiseNeedObjectOfType("Collator.prototype.resolvedOptions", "Collator"); - } - - return { - locale: hiddenObject.__locale, - usage: hiddenObject.__usage, - sensitivity: hiddenObject.__sensitivity, - ignorePunctuation: hiddenObject.__ignorePunctuation, - collation: hiddenObject.__collation, // "co" unicode extension - numeric: hiddenObject.__numeric, // "ka" unicode extension TODO: Determine if this is supported (doesn't have to be) - caseFirst: hiddenObject.__caseFirst // "kf" unicode extension TODO: Determine if this is supported (doesn't have to be) - } - }, writable: true, enumerable: false, configurable: true - }); - - ObjectDefineProperty(Collator.prototype, 'compare', { - get: tagPublicFunction('get compare', function () { - if (typeof this !== 'object') { - platform.raiseNeedObjectOfType("Collator.prototype.compare", "Collator"); - } - - var hiddenObject = platform.getHiddenObject(this); - if (hiddenObject === undefined || !hiddenObject.__initializedCollator) { - platform.raiseNeedObjectOfType("Collator.prototype.compare", "Collator"); - } - - return hiddenObject.__boundCompare; - }), enumerable: false, configurable: true - }); - - return Collator; - } - } - // 'Init.Collator' not defined if reached here. Return 'undefined' - return undefined; - })(); - - // Intl.NumberFormat, Number.prototype.toLocaleString - var NumberFormat = (function () { - if (InitType === 'Intl' || InitType === 'Number') { - function InitializeNumberFormat(numberFormat, localeList, options) { - if (typeof numberFormat != "object") { - platform.raiseNeedObject(); - } - - if (callInstanceFunc(ObjectInstanceHasOwnProperty, numberFormat, '__initializedIntlObject') && numberFormat.__initializedIntlObject) { - platform.raiseObjectIsAlreadyInitialized("NumberFormat", "NumberFormat"); - } - - numberFormat.__initializedIntlObject = true; - - // Extract options - if (typeof options === 'undefined') { - options = setPrototype({}, null); - } else { - options = Internal.ToObject(options); - } - - var matcher = GetOption(options, "localeMatcher", "string", ["lookup", "best fit"], "best fit"); - var style = GetOption(options, "style", "string", ["decimal", "percent", "currency"], "decimal"); - - var formatterToUse = NumberFormatStyle.DECIMAL; // DEFAULT - if (style === 'percent') { - formatterToUse = NumberFormatStyle.PERCENT; - } else if (style === 'currency') { - formatterToUse = NumberFormatStyle.CURRENCY; - } - - var currency = GetOption(options, "currency", "string", undefined, undefined); - var currencyDisplay = GetOption(options, 'currencyDisplay', 'string', ['code', 'symbol', 'name'], 'symbol'); - var currencyDigits = undefined; - - var minimumIntegerDigits = GetNumberOption(options, 'minimumIntegerDigits', 1, 21, 1); - var minimumFractionDigits = undefined; - var maximumFractionDigits = undefined; - var maximumFractionDigitsDefault = undefined; - - var minimumSignificantDigits = options.minimumSignificantDigits; - var maximumSignificantDigits = options.maximumSignificantDigits; - - if (typeof minimumSignificantDigits !== 'undefined' || typeof maximumSignificantDigits !== 'undefined') { - minimumSignificantDigits = GetNumberOption(options, 'minimumSignificantDigits', 1, 21, 1); - maximumSignificantDigits = GetNumberOption(options, 'maximumSignificantDigits', minimumSignificantDigits, 21, 21); - } - - var useGrouping = GetOption(options, 'useGrouping', 'boolean', undefined, true); - - // Deal with the locales and extensions - localeList = CanonicalizeLocaleList(localeList); - var resolvedLocaleInfo = resolveLocales(localeList, matcher, ["nu"], strippedDefaultLocale); - - // Correct the options if necessary - if (typeof currency !== 'undefined' && !IsWellFormedCurrencyCode(currency)) { - platform.raiseInvalidCurrencyCode(String(currency)); - } - - if (style === "currency") { - if (typeof currency === 'undefined') { - platform.raiseMissingCurrencyCode(); - } - currency = callInstanceFunc(StringInstanceToUpperCase, currency); - try { - currencyDigits = platform.currencyDigits(currency); - } catch (e) { - throwExIfOOMOrSOE(e); - platform.raiseInvalidCurrencyCode(String(currency)); - } - minimumFractionDigits = GetNumberOption(options, 'minimumFractionDigits', 0, 20, currencyDigits); - maximumFractionDigitsDefault = Math.max(currencyDigits, minimumFractionDigits); - } else { - currency = undefined; - currencyDisplay = undefined; - minimumFractionDigits = GetNumberOption(options, 'minimumFractionDigits', 0, 20, 0); - if (style === "percent") { - maximumFractionDigitsDefault = Math.max(minimumFractionDigits, 0); - } else { - maximumFractionDigitsDefault = Math.max(minimumFractionDigits, 3) - } - } - - maximumFractionDigits = GetNumberOption(options, 'maximumFractionDigits', minimumFractionDigits, 20, maximumFractionDigitsDefault); - - // Set the options on the object - numberFormat.__localeMatcher = matcher; - numberFormat.__locale = resolvedLocaleInfo.locale; - numberFormat.__style = style; - - if (currency !== undefined) { - numberFormat.__currency = currency; - } - - if (currencyDisplay !== undefined) { - numberFormat.__currencyDisplay = currencyDisplay; - numberFormat.__currencyDisplayToUse = NumberFormatCurrencyDisplay.DEFAULT; - if (currencyDisplay === "symbol") { - numberFormat.__currencyDisplayToUse = NumberFormatCurrencyDisplay.SYMBOL; - } else if (currencyDisplay === "code") { - numberFormat.__currencyDisplayToUse = NumberFormatCurrencyDisplay.CODE; - } else if (currencyDisplay === "name") { - numberFormat.__currencyDisplayToUse = NumberFormatCurrencyDisplay.NAME; - } - } - - numberFormat.__minimumIntegerDigits = minimumIntegerDigits; - numberFormat.__minimumFractionDigits = minimumFractionDigits; - numberFormat.__maximumFractionDigits = maximumFractionDigits; - - if (maximumSignificantDigits !== undefined) { - numberFormat.__minimumSignificantDigits = minimumSignificantDigits; - numberFormat.__maximumSignificantDigits = maximumSignificantDigits; - } - - numberFormat.__formatterToUse = formatterToUse; - numberFormat.__useGrouping = useGrouping; - - try { - // Cache api instance and update numbering system on the object - platform.cacheNumberFormat(numberFormat); - } catch (e) { - throwExIfOOMOrSOE(e); - // Generic message to cover the exception throw from the platform. - // The platform's exception is also generic and in most if not all cases specifies that "a" argument is invalid. - // We have no other information from the platform on the cause of the exception. - platform.raiseOptionValueOutOfRange(); - } - - if (!numberFormat.__numberingSystem) { - numberFormat.__numberingSystem = "latn"; // assume Latin numerals by default - } - - numberFormat.__numberingSystem = callInstanceFunc(StringInstanceToLowerCase, numberFormat.__numberingSystem); - numberFormat.__initializedNumberFormat = true; - } - - platform.registerBuiltInFunction(tagPublicFunction("Number.prototype.toLocaleString", function () { - if ((typeof this) !== 'number' && !(this instanceof Number)) { - platform.raiseNeedObjectOfType("Number.prototype.toLocaleString", "Number"); - } - - var stateObject = setPrototype({}, null); - InitializeNumberFormat(stateObject, arguments[0], arguments[1]); - - var n = Internal.ToNumber(this); - return String(platform.formatNumber(n, stateObject)); - }), IntlBuiltInFunctionID.NumberToLocaleString); - - if (InitType === 'Intl') { - function NumberFormat(locales = undefined, options = undefined) { - if (this === Intl || this === undefined) { - return new NumberFormat(locales, options); - } - - let obj = Internal.ToObject(this); - - if (!ObjectIsExtensible(obj)) { - platform.raiseObjectIsNonExtensible("NumberFormat"); - } - - // Use the hidden object to store data - let hiddenObject = platform.getHiddenObject(obj); - - if (hiddenObject === undefined) { - hiddenObject = setPrototype({}, null); - platform.setHiddenObject(obj, hiddenObject); - } - - InitializeNumberFormat(hiddenObject, locales, options); - - hiddenObject.__boundFormat = callInstanceFunc(FunctionInstanceBind, format, obj) - delete hiddenObject.__boundFormat.name; - - return obj; - } - tagPublicFunction("Intl.NumberFormat", NumberFormat); - - function format(n) { - n = Internal.ToNumber(n); - - if (typeof this !== 'object') { - platform.raiseNeedObjectOfType("NumberFormat.prototype.format", "NumberFormat"); - } - - var hiddenObject = platform.getHiddenObject(this); - if (hiddenObject === undefined || !hiddenObject.__initializedNumberFormat) { - platform.raiseNeedObjectOfType("NumberFormat.prototype.format", "NumberFormat"); - } - - return String(platform.formatNumber(n, hiddenObject)); - } - tagPublicFunction("Intl.NumberFormat.prototype.format", format); - - ObjectDefineProperty(NumberFormat, 'supportedLocalesOf', { value: numberFormat_supportedLocalesOf, writable: true, configurable: true }); - - var options = ['locale', 'numberingSystem', 'style', 'currency', 'currencyDisplay', 'minimumIntegerDigits', - 'minimumFractionDigits', 'maximumFractionDigits', 'minimumSignificantDigits', 'maximumSignificantDigits', - 'useGrouping']; - - ObjectDefineProperty(NumberFormat, 'prototype', { value: new NumberFormat(), writable: false, enumerable: false, configurable: false }); - setPrototype(NumberFormat.prototype, Object.prototype); - ObjectDefineProperty(NumberFormat.prototype, 'constructor', { value: NumberFormat, writable: true, enumerable: false, configurable: true }); - - ObjectDefineProperty(NumberFormat.prototype, 'resolvedOptions', { - value: function resolvedOptions() { - if (typeof this !== 'object') { - platform.raiseNeedObjectOfType("NumberFormat.prototype.resolvedOptions", "NumberFormat"); - } - var hiddenObject = platform.getHiddenObject(this); - if (hiddenObject === undefined || !hiddenObject.__initializedNumberFormat) { - platform.raiseNeedObjectOfType("NumberFormat.prototype.resolvedOptions", "NumberFormat"); - } - - var resolvedOptions = setPrototype({}, null); - - callInstanceFunc(ArrayInstanceForEach, options, function (option) { - if (typeof hiddenObject['__' + option] !== 'undefined') { - resolvedOptions[option] = hiddenObject['__' + option]; - } - }); - - return setPrototype(resolvedOptions, {}); - }, writable: true, enumerable: false, configurable: true - }); - - ObjectDefineProperty(NumberFormat.prototype, 'format', { - get: tagPublicFunction('get format', function () { - if (typeof this !== 'object') { - platform.raiseNeedObjectOfType("NumberFormat.prototype.format", "NumberFormat"); - } - - var hiddenObject = platform.getHiddenObject(this); - if (hiddenObject === undefined || !hiddenObject.__initializedNumberFormat) { - platform.raiseNeedObjectOfType("NumberFormat.prototype.format", "NumberFormat"); - } - - return hiddenObject.__boundFormat; - }), enumerable: false, configurable: true - }); - - return NumberFormat; - } - } - // 'Init.NumberFormat' not defined if reached here. Return 'undefined' - return undefined; - })(); - - // Intl.DateTimeFormat, Date.prototype.toLocaleString, Date.prototype.toLocaleDateString, Date.prototype.toLocaleTimeString - var DateTimeFormat = (function () { - if (InitType === 'Intl' || InitType === 'Date') { - function ToDateTimeOptions(options, required, defaults) { - if (options === undefined) { - options = setPrototype({}, null); - } else { - options = Internal.ToObject(options); - } - - var needDefaults = true; - if (required === "date" || required === "any") { - if (options.weekday !== undefined || options.year !== undefined || options.month !== undefined || options.day !== undefined) { - needDefaults = false; - } - } - if (required === "time" || required === "any") { - if (options.hour !== undefined || options.minute !== undefined || options.second !== undefined) { - needDefaults = false; - } - } - - if (needDefaults && (defaults === "date" || defaults === "all")) { - ObjectDefineProperty(options, "year", { - value: "numeric", writable: true, - enumerable: true, configurable: true - }); - ObjectDefineProperty(options, "month", { - value: "numeric", writable: true, - enumerable: true, configurable: true - }); - ObjectDefineProperty(options, "day", { - value: "numeric", writable: true, - enumerable: true, configurable: true - }); - } - if (needDefaults && (defaults === "time" || defaults === "all")) { - ObjectDefineProperty(options, "hour", { - value: "numeric", writable: true, - enumerable: true, configurable: true - }); - ObjectDefineProperty(options, "minute", { - value: "numeric", writable: true, - enumerable: true, configurable: true - }); - ObjectDefineProperty(options, "second", { - value: "numeric", writable: true, - enumerable: true, configurable: true - }); - } - return options; - } - - // Currently you cannot format date pieces and time pieces together, so this builds up a format template for each separately. - function EcmaOptionsToWindowsTemplate(options) { - var template = []; - - if (options.weekday) { - if (options.weekday === 'narrow' || options.weekday === 'short') { - callInstanceFunc(ArrayInstancePush, template, 'dayofweek.abbreviated'); - } else if (options.weekday === 'long') { - callInstanceFunc(ArrayInstancePush, template, 'dayofweek.full'); - } - } - - // TODO: Era not supported - if (options.year) { - if (options.year === '2-digit') { - callInstanceFunc(ArrayInstancePush, template, 'year.abbreviated'); - } else if (options.year === 'numeric') { - callInstanceFunc(ArrayInstancePush, template, 'year.full'); - } - } - - if (options.month) { - if (options.month === '2-digit' || options.month === 'numeric') { - callInstanceFunc(ArrayInstancePush, template, 'month.numeric') - } else if (options.month === 'short' || options.month === 'narrow') { - callInstanceFunc(ArrayInstancePush, template, 'month.abbreviated'); - } else if (options.month === 'long') { - callInstanceFunc(ArrayInstancePush, template, 'month.full'); - } - } - - if (options.day) { - callInstanceFunc(ArrayInstancePush, template, 'day'); - } - - if (options.timeZoneName) { - if (options.timeZoneName === "short") { - callInstanceFunc(ArrayInstancePush, template, 'timezone.abbreviated'); - } else if (options.timeZoneName === "long") { - callInstanceFunc(ArrayInstancePush, template, 'timezone.full'); - } - } - - callInstanceFunc(ArrayInstanceForEach, ['hour', 'minute', 'second'], function (opt) { - if (options[opt]) { - callInstanceFunc(ArrayInstancePush, template, opt); - } - }); - - // TODO: Timezone Name not supported. - return getArrayLength(template) > 0 ? callInstanceFunc(ArrayInstanceJoin, template, ' ') : undefined; - } - - var WindowsToEcmaCalendarMap = { - 'GregorianCalendar': 'gregory', - 'HebrewCalendar': 'hebrew', - 'HijriCalendar': 'islamic', - 'JapaneseCalendar': 'japanese', - 'JulianCalendar': 'julian', - 'KoreanCalendar': 'korean', - 'UmAlQuraCalendar': 'islamic-civil', - 'ThaiCalendar': 'thai', - 'TaiwanCalendar': 'taiwan' - }; - - function WindowsToEcmaCalendar(calendar) { - if (typeof calendar === 'undefined') { - return ''; - } - - return WindowsToEcmaCalendarMap[calendar] || 'gregory'; - } - - // Certain formats have similar patterns on both ecma and windows; will use helper methods for them - function correctWeekdayEraMonthPattern(patternString, userValue, searchParam) { - // parts[1] is either dayofweek.solo, dayofweek, era or month; parts[2] is either abbreviated or full - var parts = platform.builtInRegexMatch(patternString, RegExp("{(" + searchParam + "(?:\\.solo)?)\\.([a-z]*)(?:\\([0-9]\\))?}")); - // If this happens that means windows removed the specific pattern (which isn't expected; but better be safe) - if (parts === null) { - RaiseAssert(new Error("Error when correcting windows returned weekday/Era/Month pattern; regex returned null. \nInput was: '" + patternString + "'\nRegex: '" + "{(" + searchParam + "(\\.solo)?)\\.([a-z]*)(\\([0-9]\\))?}'")); - return patternString; - } - - if (parts[2] !== "full" && userValue === "long") { - return callInstanceFunc(StringInstanceReplace, patternString, parts[0], "{" + parts[1] + "." + "full" + "}"); - } else if (userValue !== "long") { - return callInstanceFunc(StringInstanceReplace, patternString, parts[0], "{" + parts[1] + "." + (userValue === "short" ? "abbreviated" : "abbreviated(1)") + "}"); - } - return patternString; - } - - function correctDayHourMinuteSecondMonthPattern(patternString, userValue, searchParam) { - // parts[1] is either month, day, hour, minute, or second - // REVIEW (doilij) is it even possible to have a '.solo' (i.e. /(?:\\.solo)?/ ) in the above cases? - var parts = platform.builtInRegexMatch(patternString, RegExp("{(" + searchParam + ")(?:\\.solo)?\\.([a-z]*)(?:\\([0-9]\\))?}")); - if (parts === null) { - RaiseAssert(new Error("Error when correcting windows returned day/hour/minute/second/month pattern; regex returned null. \nInput was: '" + patternString + "'\nRegex: '" + "{(" + searchParam + "(\\.solo)?)\\.([a-z]*)(\\([0-9]\\))?}'")); - return patternString; - } - - // Only correct the 2 digit; unless part[2] isn't integer - if (userValue === "2-digit") { - return callInstanceFunc(StringInstanceReplace, patternString, parts[0], "{" + parts[1] + ".integer(2)}"); - } else if (parts[2] !== "integer") { - return callInstanceFunc(StringInstanceReplace, patternString, parts[0], "{" + parts[1] + ".integer}"); - } - - return patternString; - } - - // Perhaps the level of validation that we have might not be required for this method - function updatePatternStrings(patternString, dateTimeFormat) { - if (dateTimeFormat.__weekday !== undefined) { - patternString = correctWeekdayEraMonthPattern(patternString, dateTimeFormat.__weekday, "dayofweek"); - } - - if (dateTimeFormat.__era !== undefined) { - // This is commented because not all options are supported for locales that do have era; - // In addition, we can't force era to be part of a locale using templates. - // patternString = correctWeekdayEraMonthPattern(patternString, dateTimeFormat.__era, "era", 2); - } - - if (dateTimeFormat.__year === "2-digit") { - var parts = platform.builtInRegexMatch(patternString, /\{year\.[a-z]*(\([0-9]\))?\}/); - if (parts === null) { - RaiseAssert(new Error("Error when correcting windows returned year; regex returned null")); - } else { - patternString = callInstanceFunc(StringInstanceReplace, patternString, parts[0], "{year.abbreviated(2)}"); - } - } else if (dateTimeFormat.__year === "full") { - var parts = platform.builtInRegexMatch(patternString, /\{year\.[a-z]*(\([0-9]\))?\}/); - if (parts === null) { - RaiseAssert(new Error("Error when correcting windows returned year; regex returned null")); - } else { - patternString = callInstanceFunc(StringInstanceReplace, patternString, parts[0], "{year.full}"); - } - } - - // Month partially overlaps with weekday/month; unless it's 2-digit or numeric in which case it overlaps with day/hour/minute/second - if (dateTimeFormat.__month !== undefined && dateTimeFormat.__month !== "2-digit" && dateTimeFormat.__month !== "numeric") { - patternString = correctWeekdayEraMonthPattern(patternString, dateTimeFormat.__month, "month"); - } else if (dateTimeFormat.__month !== undefined) { - patternString = correctDayHourMinuteSecondMonthPattern(patternString, dateTimeFormat.__month, "month"); - } - - if (dateTimeFormat.__day !== undefined) { - patternString = correctDayHourMinuteSecondMonthPattern(patternString, dateTimeFormat.__day, "day"); - } - - if (dateTimeFormat.__hour !== undefined) { - patternString = correctDayHourMinuteSecondMonthPattern(patternString, dateTimeFormat.__hour, "hour"); - } - - if (dateTimeFormat.__minute !== undefined) { - patternString = correctDayHourMinuteSecondMonthPattern(patternString, dateTimeFormat.__minute, "minute"); - } - - if (dateTimeFormat.__second !== undefined) { - patternString = correctDayHourMinuteSecondMonthPattern(patternString, dateTimeFormat.__second, "second"); - } - - if (dateTimeFormat.__timeZoneName !== undefined) { - patternString = correctWeekdayEraMonthPattern(patternString, dateTimeFormat.__timeZoneName, "timezone"); - } - - return patternString; - } - - function InitializeDateTimeFormat(dateTimeFormat, localeList, options) { - if (typeof dateTimeFormat != "object") { - platform.raiseNeedObject(); - } - - if (callInstanceFunc(ObjectInstanceHasOwnProperty, dateTimeFormat, '__initializedIntlObject') && dateTimeFormat.__initializedIntlObject) { - platform.raiseObjectIsAlreadyInitialized("DateTimeFormat", "DateTimeFormat"); - } - - dateTimeFormat.__initializedIntlObject = true; - - // Extract the options - options = ToDateTimeOptions(options, "any", "date"); - - var matcher = GetOption(options, "localeMatcher", "string", ["lookup", "best fit"], "best fit"); - var timeZone = GetOption(options, "timeZone", "string", undefined, undefined); - - if (timeZone !== undefined) { - timeZone = platform.validateAndCanonicalizeTimeZone(timeZone); - } else { - timeZone = platform.getDefaultTimeZone(); - } - - if (timeZone === undefined) { - platform.raiseOptionValueOutOfRange(); - } - - // Format options - var weekday = GetOption(options, "weekday", "string", ['narrow', 'short', 'long'], undefined); - var era = GetOption(options, "era", "string", ['narrow', 'short', 'long'], undefined); - var year = GetOption(options, "year", "string", ['2-digit', 'numeric'], undefined); - var month = GetOption(options, "month", "string", ['2-digit', 'numeric', 'narrow', 'short', 'long'], undefined); - var day = GetOption(options, "day", "string", ['2-digit', 'numeric'], undefined); - var hour = GetOption(options, "hour", "string", ['2-digit', 'numeric'], undefined); - var minute = GetOption(options, "minute", "string", ['2-digit', 'numeric'], undefined); - var second = GetOption(options, "second", "string", ['2-digit', 'numeric'], undefined); - var timeZoneName = GetOption(options, "timeZoneName", "string", ['short', 'long'], undefined); - - var hour12 = hour ? GetOption(options, "hour12", "boolean", undefined, undefined) : undefined; - var formatMatcher = GetOption(options, "formatMatcher", "string", ["basic", "best fit"], "best fit"); - - var windowsClock = hour12 !== undefined ? (hour12 ? "12HourClock" : "24HourClock") : undefined; - - var templateString = EcmaOptionsToWindowsTemplate(setPrototype({ - weekday: weekday, - era: era, - year: year, - month: month, - day: day, - hour: hour, - minute: minute, - second: second, - timeZoneName: timeZoneName - }, null)); - - // Deal with the locale - localeList = CanonicalizeLocaleList(localeList); - var resolvedLocaleInfo = resolveLocales(localeList, matcher, ["nu", "ca"], strippedDefaultLocale); - - // Assign the options - dateTimeFormat.__matcher = matcher; - dateTimeFormat.__timeZone = timeZone; - dateTimeFormat.__locale = resolvedLocaleInfo.locale; - - // Format options - dateTimeFormat.__weekday = weekday; - dateTimeFormat.__era = era; - dateTimeFormat.__year = year; - dateTimeFormat.__month = month; - dateTimeFormat.__day = day; - dateTimeFormat.__hour = hour; - dateTimeFormat.__minute = minute; - dateTimeFormat.__second = second; - dateTimeFormat.__timeZoneName = timeZoneName; - - dateTimeFormat.__hour12 = hour12; - dateTimeFormat.__formatMatcher = formatMatcher; - dateTimeFormat.__windowsClock = windowsClock; - - dateTimeFormat.__templateString = templateString; - - /* - * NOTE: - * Pattern string's are position-sensitive; while templates are not. - * If we specify {hour.integer(2)}:{minute.integer(2)} pattern string; we will always format as HH:mm. - * On the other hand, template strings don't give as fine granularity for options; and the platform decides how long month.abbreviated should be. - * Therefore, we have to create using template strings; and then change the .abbreivated/.integer values to have correct digits count if necessary. - * Thus, this results in this redundant looking code to create dateTimeFormat twice. - */ - var errorThrown = false; - - try { - // Create the DateTimeFormatter to extract pattern strings - CreateDateTimeFormat(dateTimeFormat, false); - } catch (e) { - // Rethrow SOE or OOM - throwExIfOOMOrSOE(e); - - // We won't throw for the first exception, but assume the template strings were rejected. - // Instead, we will try to fall back to default template strings. - var defaultOptions = ToDateTimeOptions(options, "none", "all"); - dateTimeFormat.__templateString = EcmaOptionsToWindowsTemplate(defaultOptions, null); - errorThrown = true; - } - - if (!errorThrown) { - // Update the pattern strings - dateTimeFormat.__templateString = updatePatternStrings(dateTimeFormat.__patternStrings[0], dateTimeFormat); - } - - try { - // Cache the date time formatter - CreateDateTimeFormat(dateTimeFormat, true); - } catch (e) { - // Rethrow SOE or OOM - throwExIfOOMOrSOE(e); - - // Otherwise, Generic message to cover the exception throw from the platform. - // The platform's exception is also generic and in most if not all cases specifies that "a" argument is invalid. - // We have no other information from the platform on the cause of the exception. - platform.raiseOptionValueOutOfRange(); - } - - // Correct the api's updated - dateTimeFormat.__calendar = WindowsToEcmaCalendar(dateTimeFormat.__windowsCalendar); - - dateTimeFormat.__numberingSystem = callInstanceFunc(StringInstanceToLowerCase, dateTimeFormat.__numberingSystem); - if (dateTimeFormat.__hour !== undefined) { - dateTimeFormat.__hour12 = dateTimeFormat.__windowsClock === "12HourClock"; - } - dateTimeFormat.__initializedDateTimeFormat = true; - } - - // caches for objects constructed with default parameters for each method - let __DateInstanceToLocaleStringDefaultCache = [undefined, undefined, undefined]; - const __DateInstanceToLocaleStringDefaultCacheSlot = setPrototype({ - toLocaleString: 0, - toLocaleDateString: 1, - toLocaleTimeString: 2 - }, null); - - function DateInstanceToLocaleStringImplementation(name, option1, option2, cacheSlot, locales, options) { - if (typeof this !== 'object' || !(this instanceof Date)) { - platform.raiseNeedObjectOfType(name, "Date"); - } - let value = callInstanceFunc(DateInstanceGetDate, new Date(this)); - if (isNaN(value) || !isFinite(value)) { - return "Invalid Date"; - } - - let stateObject = undefined; - if (platform.useCaches && locales === undefined && options === undefined) { - // All default parameters (locales and options): this is the most valuable case to cache. - if (__DateInstanceToLocaleStringDefaultCache[cacheSlot]) { - // retrieve cached value - stateObject = __DateInstanceToLocaleStringDefaultCache[cacheSlot]; - } else { - // populate cache - stateObject = setPrototype({}, null); - InitializeDateTimeFormat(stateObject, undefined, ToDateTimeOptions(undefined, option1, option2)); - __DateInstanceToLocaleStringDefaultCache[cacheSlot] = stateObject; - } - } - - if (!stateObject) { - stateObject = setPrototype({}, null); - InitializeDateTimeFormat(stateObject, locales, ToDateTimeOptions(options, option1, option2)); - } - - return String(platform.formatDateTime(Internal.ToNumber(this), stateObject)); - } - - // Note: tagPublicFunction (platform.tagPublicLibraryCode) messes with declared name of the FunctionBody so that - // the functions called appear correctly in the debugger and stack traces. Thus, we we cannot call tagPublicFunction in a loop. - // Each entry point needs to have its own unique FunctionBody (which is a function as defined in the source code); - // this is why we have seemingly repeated ourselves below, instead of having one function and calling it multiple times with - // different parameters. - // - // The following invocations of `platform.registerBuiltInFunction(tagPublicFunction(name, entryPoint))` are enclosed in IIFEs. - // The IIFEs are used to group all of the meaningful differences between each entry point into the arguments to the IIFE. - // The exception to this are the different entryPoint names which are only significant for debugging (and cannot be passed in - // as arguments, as the name is intrinsic to the function declaration). - // - // The `date_toLocale*String_entryPoint` function names are placeholder names that will never be seen from user code. - // The function name property and FunctionBody declared name are overwritten by `tagPublicFunction`. - // The fact that they are declared with unique names is helpful for debugging. - // The functions *must not* be declared as anonymous functions (must be declared with a name); - // converting from an unnnamed function to a named function is not readily supported by the platform code and - // this has caused us to hit assertions in debug builds in the past. - // - // See invocations of `tagPublicFunction` on the `supportedLocalesOf` entry points for a similar pattern. - // - // The entryPoint functions will be called as `Date.prototype.toLocale*String` and thus their `this` parameters will be a Date. - // `DateInstanceToLocaleStringImplementation` is not on `Date.prototype`, so we must propagate `this` into the call by using - // `DateInstanceToLocaleStringImplementation.call(this, ...)`. - - (function (name, option1, option2, cacheSlot, platformFunctionID) { - platform.registerBuiltInFunction(tagPublicFunction(name, function date_toLocaleString_entryPoint(locales = undefined, options = undefined) { - return DateInstanceToLocaleStringImplementation.call(this, name, option1, option2, cacheSlot, locales, options); - }), platformFunctionID); - })("Date.prototype.toLocaleString", "any", "all", __DateInstanceToLocaleStringDefaultCacheSlot.toLocaleString, IntlBuiltInFunctionID.DateToLocaleString); - - (function (name, option1, option2, cacheSlot, platformFunctionID) { - platform.registerBuiltInFunction(tagPublicFunction(name, function date_toLocaleDateString_entryPoint(locales = undefined, options = undefined) { - return DateInstanceToLocaleStringImplementation.call(this, name, option1, option2, cacheSlot, locales, options); - }), platformFunctionID); - })("Date.prototype.toLocaleDateString", "date", "date", __DateInstanceToLocaleStringDefaultCacheSlot.toLocaleDateString, IntlBuiltInFunctionID.DateToLocaleDateString); - - (function (name, option1, option2, cacheSlot, platformFunctionID) { - platform.registerBuiltInFunction(tagPublicFunction(name, function date_toLocaleTimeString_entryPoint(locales = undefined, options = undefined) { - return DateInstanceToLocaleStringImplementation.call(this, name, option1, option2, cacheSlot, locales, options); - }), platformFunctionID); - })("Date.prototype.toLocaleTimeString", "time", "time", __DateInstanceToLocaleStringDefaultCacheSlot.toLocaleTimeString, IntlBuiltInFunctionID.DateToLocaleTimeString); - - if (InitType === 'Intl') { - function DateTimeFormat(locales = undefined, options = undefined) { - if (this === Intl || this === undefined) { - return new DateTimeFormat(locales, options); - } - - let obj = Internal.ToObject(this); - if (!ObjectIsExtensible(obj)) { - platform.raiseObjectIsNonExtensible("DateTimeFormat"); - } - - // Use the hidden object to store data - let hiddenObject = platform.getHiddenObject(obj); - - if (hiddenObject === undefined) { - hiddenObject = setPrototype({}, null); - platform.setHiddenObject(obj, hiddenObject); - } - - InitializeDateTimeFormat(hiddenObject, locales, options); - - hiddenObject.__boundFormat = callInstanceFunc(FunctionInstanceBind, format, obj); - delete hiddenObject.__boundFormat.name; - - return obj; - } - tagPublicFunction("Intl.DateTimeFormat", DateTimeFormat); - - function format(date) { - if (typeof this !== 'object') { - platform.raiseNeedObjectOfType("DateTimeFormat.prototype.format", "DateTimeFormat"); - } - let hiddenObject = platform.getHiddenObject(this); - if (hiddenObject === undefined || !hiddenObject.__initializedDateTimeFormat) { - platform.raiseNeedObjectOfType("DateTimeFormat.prototype.format", "DateTimeFormat"); - } - - if (date !== undefined && (isNaN(date) || !isFinite(date))) { - platform.raiseInvalidDate(); - } - - let dateValue = undefined; - if (date !== undefined) { - dateValue = Internal.ToNumber(date) - } else { - dateValue = DateNow(); - } - - return String(platform.formatDateTime(dateValue, hiddenObject)); - } - tagPublicFunction("Intl.DateTimeFormat.prototype.format", format); - - DateTimeFormat.__relevantExtensionKeys = ['ca', 'nu']; - - ObjectDefineProperty(DateTimeFormat, 'prototype', { value: new DateTimeFormat(), writable: false, enumerable: false, configurable: false }); - setPrototype(DateTimeFormat.prototype, Object.prototype); - ObjectDefineProperty(DateTimeFormat.prototype, 'constructor', { value: DateTimeFormat, writable: true, enumerable: false, configurable: true }); - - ObjectDefineProperty(DateTimeFormat.prototype, 'format', { - get: tagPublicFunction('get format', function () { - if (typeof this !== 'object') { - platform.raiseNeedObjectOfType("DateTimeFormat.prototype.format", "DateTimeFormat"); - } - - var hiddenObject = platform.getHiddenObject(this); - if (hiddenObject === undefined || !hiddenObject.__initializedDateTimeFormat) { - platform.raiseNeedObjectOfType("DateTimeFormat.prototype.format", "DateTimeFormat"); - } - - return hiddenObject.__boundFormat; - }), enumerable: false, configurable: true - }); - - ObjectDefineProperty(DateTimeFormat.prototype, 'resolvedOptions', { - value: function resolvedOptions() { - if (typeof this !== 'object') { - platform.raiseNeedObjectOfType("DateTimeFormat.prototype.resolvedOptions", "DateTimeFormat"); - } - var hiddenObject = platform.getHiddenObject(this); - if (hiddenObject === undefined || !hiddenObject.__initializedDateTimeFormat) { - platform.raiseNeedObjectOfType("DateTimeFormat.prototype.resolvedOptions", "DateTimeFormat"); - } - var temp = setPrototype({ - locale: hiddenObject.__locale, - calendar: hiddenObject.__calendar, // ca unicode extension - numberingSystem: hiddenObject.__numberingSystem, // nu unicode extension - timeZone: hiddenObject.__timeZone, - hour12: hiddenObject.__hour12, - weekday: hiddenObject.__weekday, - era: hiddenObject.__era, - year: hiddenObject.__year, - month: hiddenObject.__month, - day: hiddenObject.__day, - hour: hiddenObject.__hour, - minute: hiddenObject.__minute, - second: hiddenObject.__second, - timeZoneName: hiddenObject.__timeZoneName - }, null) - var options = setPrototype({}, null); - callInstanceFunc(ArrayInstanceForEach, ObjectGetOwnPropertyNames(temp), function (prop) { - if ((temp[prop] !== undefined || prop === 'timeZone') && callInstanceFunc(ObjectInstanceHasOwnProperty, hiddenObject, "__" + prop)) { - options[prop] = temp[prop]; - } - }, hiddenObject); - return setPrototype(options, Object.prototype); - }, writable: true, enumerable: false, configurable: true - }); - - ObjectDefineProperty(DateTimeFormat, 'supportedLocalesOf', { value: dateTimeFormat_supportedLocalesOf, writable: true, configurable: true }); - - return DateTimeFormat; - } - } - // 'Init.DateTimeFormat' not defined if reached here. Return 'undefined' - return undefined; - })(); - - // Initialize Intl properties only if needed - if (InitType === 'Intl') { - ObjectDefineProperty(Intl, "Collator", { value: Collator, writable: true, enumerable: false, configurable: true }); - ObjectDefineProperty(Intl, "NumberFormat", { value: NumberFormat, writable: true, enumerable: false, configurable: true }); - ObjectDefineProperty(Intl, "DateTimeFormat", { value: DateTimeFormat, writable: true, enumerable: false, configurable: true }); - ObjectDefineProperty(Intl, "getCanonicalLocales", { value: getCanonicalLocales, writable: true, enumerable: false, configurable: true }); - } - - } // END WINGLOB -}); - -#endif -namespace Js -{ - const char Library_Bytecode_Intl[] = { -/* 00000000 */ 0x43, 0x68, 0x42, 0x63, 0x15, 0xAE, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 00000010 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0xFE, 0xCE, 0x02, 0x00, 0xFF, -/* 00000020 */ 0x2E, 0xC9, 0x02, 0x00, 0xFF, 0x2E, 0xC9, 0x02, 0x00, 0x39, 0x00, 0x00, 0x00, 0x24, 0x4B, 0x00, -/* 00000030 */ 0x00, 0x44, 0x87, 0x00, 0x00, 0x14, 0xAE, 0x01, 0x00, 0xFE, 0x45, 0x02, 0x9A, 0x0B, 0x00, 0x00, -/* 00000040 */ 0x00, 0xB2, 0x0B, 0x00, 0x00, 0x00, 0xC8, 0x0B, 0x00, 0x00, 0x01, 0xDC, 0x0B, 0x00, 0x00, 0x01, -/* 00000050 */ 0xF6, 0x0B, 0x00, 0x00, 0x01, 0x14, 0x0C, 0x00, 0x00, 0x01, 0x36, 0x0C, 0x00, 0x00, 0x01, 0x4E, -/* 00000060 */ 0x0C, 0x00, 0x00, 0x01, 0x78, 0x0C, 0x00, 0x00, 0x01, 0x9E, 0x0C, 0x00, 0x00, 0x01, 0xD2, 0x0C, -/* 00000070 */ 0x00, 0x00, 0x01, 0x0C, 0x0D, 0x00, 0x00, 0x01, 0x38, 0x0D, 0x00, 0x00, 0x01, 0x62, 0x0D, 0x00, -/* 00000080 */ 0x00, 0x01, 0x8C, 0x0D, 0x00, 0x00, 0x01, 0xB6, 0x0D, 0x00, 0x00, 0x01, 0xDA, 0x0D, 0x00, 0x00, -/* 00000090 */ 0x01, 0xFE, 0x0D, 0x00, 0x00, 0x01, 0x28, 0x0E, 0x00, 0x00, 0x01, 0x50, 0x0E, 0x00, 0x00, 0x01, -/* 000000A0 */ 0x60, 0x0E, 0x00, 0x00, 0x01, 0x8C, 0x0E, 0x00, 0x00, 0x01, 0xC0, 0x0E, 0x00, 0x00, 0x01, 0xF4, -/* 000000B0 */ 0x0E, 0x00, 0x00, 0x01, 0x18, 0x0F, 0x00, 0x00, 0x01, 0x3C, 0x0F, 0x00, 0x00, 0x01, 0x4E, 0x0F, -/* 000000C0 */ 0x00, 0x00, 0x01, 0x70, 0x0F, 0x00, 0x00, 0x01, 0x98, 0x0F, 0x00, 0x00, 0x01, 0xC0, 0x0F, 0x00, -/* 000000D0 */ 0x00, 0x01, 0xDE, 0x0F, 0x00, 0x00, 0x01, 0x0A, 0x10, 0x00, 0x00, 0x01, 0x3E, 0x10, 0x00, 0x00, -/* 000000E0 */ 0x01, 0x7A, 0x10, 0x00, 0x00, 0x01, 0xBA, 0x10, 0x00, 0x00, 0x01, 0x08, 0x11, 0x00, 0x00, 0x01, -/* 000000F0 */ 0x30, 0x11, 0x00, 0x00, 0x01, 0x42, 0x11, 0x00, 0x00, 0x01, 0x68, 0x11, 0x00, 0x00, 0x01, 0x7C, -/* 00000100 */ 0x11, 0x00, 0x00, 0x01, 0x86, 0x11, 0x00, 0x00, 0x01, 0xB2, 0x11, 0x00, 0x00, 0x01, 0xB6, 0x11, -/* 00000110 */ 0x00, 0x00, 0x01, 0xC2, 0x11, 0x00, 0x00, 0x01, 0xEA, 0x11, 0x00, 0x00, 0x01, 0x0E, 0x12, 0x00, -/* 00000120 */ 0x00, 0x01, 0x32, 0x12, 0x00, 0x00, 0x01, 0x6A, 0x12, 0x00, 0x00, 0x01, 0x78, 0x12, 0x00, 0x00, -/* 00000130 */ 0x00, 0x80, 0x12, 0x00, 0x00, 0x00, 0x8C, 0x12, 0x00, 0x00, 0x00, 0x94, 0x12, 0x00, 0x00, 0x00, -/* 00000140 */ 0x9C, 0x12, 0x00, 0x00, 0x01, 0xA4, 0x12, 0x00, 0x00, 0x01, 0xCA, 0x12, 0x00, 0x00, 0x01, 0xF8, -/* 00000150 */ 0x12, 0x00, 0x00, 0x01, 0x26, 0x13, 0x00, 0x00, 0x01, 0x50, 0x13, 0x00, 0x00, 0x01, 0x78, 0x13, -/* 00000160 */ 0x00, 0x00, 0x01, 0x80, 0x13, 0x00, 0x00, 0x00, 0x98, 0x13, 0x00, 0x00, 0x00, 0xB0, 0x13, 0x00, -/* 00000170 */ 0x00, 0x00, 0xC0, 0x13, 0x00, 0x00, 0x00, 0xCC, 0x13, 0x00, 0x00, 0x00, 0xE0, 0x13, 0x00, 0x00, -/* 00000180 */ 0x01, 0xFC, 0x13, 0x00, 0x00, 0x00, 0x08, 0x14, 0x00, 0x00, 0x00, 0x16, 0x14, 0x00, 0x00, 0x00, -/* 00000190 */ 0x26, 0x14, 0x00, 0x00, 0x00, 0x30, 0x14, 0x00, 0x00, 0x00, 0x3A, 0x14, 0x00, 0x00, 0x01, 0x54, -/* 000001A0 */ 0x14, 0x00, 0x00, 0x00, 0x5C, 0x14, 0x00, 0x00, 0x00, 0x6A, 0x14, 0x00, 0x00, 0x00, 0x76, 0x14, -/* 000001B0 */ 0x00, 0x00, 0x00, 0x84, 0x14, 0x00, 0x00, 0x00, 0x92, 0x14, 0x00, 0x00, 0x01, 0xA0, 0x14, 0x00, -/* 000001C0 */ 0x00, 0x00, 0xAA, 0x14, 0x00, 0x00, 0x00, 0xC8, 0x14, 0x00, 0x00, 0x00, 0xE6, 0x14, 0x00, 0x00, -/* 000001D0 */ 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x0E, 0x15, 0x00, 0x00, 0x00, 0x2C, 0x15, 0x00, 0x00, 0x00, -/* 000001E0 */ 0x3E, 0x15, 0x00, 0x00, 0x00, 0x4A, 0x15, 0x00, 0x00, 0x00, 0x5A, 0x15, 0x00, 0x00, 0x00, 0x64, -/* 000001F0 */ 0x15, 0x00, 0x00, 0x00, 0x70, 0x15, 0x00, 0x00, 0x01, 0x86, 0x15, 0x00, 0x00, 0x01, 0x94, 0x15, -/* 00000200 */ 0x00, 0x00, 0x01, 0x9E, 0x15, 0x00, 0x00, 0x01, 0xAC, 0x15, 0x00, 0x00, 0x01, 0xB6, 0x15, 0x00, -/* 00000210 */ 0x00, 0x01, 0xC6, 0x15, 0x00, 0x00, 0x01, 0xD6, 0x15, 0x00, 0x00, 0x01, 0xE2, 0x15, 0x00, 0x00, -/* 00000220 */ 0x01, 0xEE, 0x15, 0x00, 0x00, 0x00, 0xFA, 0x15, 0x00, 0x00, 0x01, 0x0A, 0x16, 0x00, 0x00, 0x01, -/* 00000230 */ 0x1A, 0x16, 0x00, 0x00, 0x01, 0x2C, 0x16, 0x00, 0x00, 0x01, 0x3A, 0x16, 0x00, 0x00, 0x01, 0x44, -/* 00000240 */ 0x16, 0x00, 0x00, 0x01, 0x4E, 0x16, 0x00, 0x00, 0x01, 0x60, 0x16, 0x00, 0x00, 0x01, 0x72, 0x16, -/* 00000250 */ 0x00, 0x00, 0x01, 0x84, 0x16, 0x00, 0x00, 0x01, 0xA6, 0x16, 0x00, 0x00, 0x01, 0xB8, 0x16, 0x00, -/* 00000260 */ 0x00, 0x00, 0xC8, 0x16, 0x00, 0x00, 0x00, 0xD4, 0x16, 0x00, 0x00, 0x00, 0xDE, 0x16, 0x00, 0x00, -/* 00000270 */ 0x00, 0x10, 0x17, 0x00, 0x00, 0x00, 0x1A, 0x17, 0x00, 0x00, 0x00, 0x26, 0x17, 0x00, 0x00, 0x00, -/* 00000280 */ 0x4E, 0x17, 0x00, 0x00, 0x00, 0x60, 0x17, 0x00, 0x00, 0x00, 0x76, 0x17, 0x00, 0x00, 0x00, 0x90, -/* 00000290 */ 0x17, 0x00, 0x00, 0x00, 0xA2, 0x17, 0x00, 0x00, 0x00, 0xBC, 0x17, 0x00, 0x00, 0x00, 0xDA, 0x17, -/* 000002A0 */ 0x00, 0x00, 0x00, 0xF2, 0x17, 0x00, 0x00, 0x00, 0x34, 0x18, 0x00, 0x00, 0x00, 0x7E, 0x18, 0x00, -/* 000002B0 */ 0x00, 0x00, 0xCC, 0x18, 0x00, 0x00, 0x00, 0xF2, 0x18, 0x00, 0x00, 0x01, 0xFE, 0x18, 0x00, 0x00, -/* 000002C0 */ 0x01, 0x08, 0x19, 0x00, 0x00, 0x00, 0x16, 0x19, 0x00, 0x00, 0x01, 0x22, 0x19, 0x00, 0x00, 0x01, -/* 000002D0 */ 0x2E, 0x19, 0x00, 0x00, 0x01, 0x3E, 0x19, 0x00, 0x00, 0x00, 0x4C, 0x19, 0x00, 0x00, 0x01, 0x58, -/* 000002E0 */ 0x19, 0x00, 0x00, 0x01, 0x66, 0x19, 0x00, 0x00, 0x00, 0x74, 0x19, 0x00, 0x00, 0x01, 0x80, 0x19, -/* 000002F0 */ 0x00, 0x00, 0x01, 0x92, 0x19, 0x00, 0x00, 0x00, 0xA0, 0x19, 0x00, 0x00, 0x01, 0xAE, 0x19, 0x00, -/* 00000300 */ 0x00, 0x00, 0xB0, 0x19, 0x00, 0x00, 0x01, 0xBC, 0x19, 0x00, 0x00, 0x01, 0xC8, 0x19, 0x00, 0x00, -/* 00000310 */ 0x01, 0xD4, 0x19, 0x00, 0x00, 0x01, 0xE2, 0x19, 0x00, 0x00, 0x01, 0xEE, 0x19, 0x00, 0x00, 0x01, -/* 00000320 */ 0x02, 0x1A, 0x00, 0x00, 0x01, 0x26, 0x1A, 0x00, 0x00, 0x01, 0x4C, 0x1A, 0x00, 0x00, 0x01, 0x60, -/* 00000330 */ 0x1A, 0x00, 0x00, 0x01, 0x92, 0x1A, 0x00, 0x00, 0x01, 0xB2, 0x1A, 0x00, 0x00, 0x01, 0xD4, 0x1A, -/* 00000340 */ 0x00, 0x00, 0x01, 0xFC, 0x1A, 0x00, 0x00, 0x01, 0x1E, 0x1B, 0x00, 0x00, 0x01, 0x3A, 0x1B, 0x00, -/* 00000350 */ 0x00, 0x01, 0x58, 0x1B, 0x00, 0x00, 0x01, 0x84, 0x1B, 0x00, 0x00, 0x01, 0xA0, 0x1B, 0x00, 0x00, -/* 00000360 */ 0x01, 0xC0, 0x1B, 0x00, 0x00, 0x01, 0xE2, 0x1B, 0x00, 0x00, 0x01, 0xFC, 0x1B, 0x00, 0x00, 0x01, -/* 00000370 */ 0x2E, 0x1C, 0x00, 0x00, 0x01, 0x6C, 0x1C, 0x00, 0x00, 0x01, 0x9A, 0x1C, 0x00, 0x00, 0x01, 0xC8, -/* 00000380 */ 0x1C, 0x00, 0x00, 0x01, 0xF8, 0x1C, 0x00, 0x00, 0x01, 0x30, 0x1D, 0x00, 0x00, 0x01, 0x52, 0x1D, -/* 00000390 */ 0x00, 0x00, 0x01, 0x82, 0x1D, 0x00, 0x00, 0x01, 0xC8, 0x1D, 0x00, 0x00, 0x01, 0x10, 0x1E, 0x00, -/* 000003A0 */ 0x00, 0x01, 0x3C, 0x1E, 0x00, 0x00, 0x01, 0x6E, 0x1E, 0x00, 0x00, 0x01, 0x98, 0x1E, 0x00, 0x00, -/* 000003B0 */ 0x01, 0xC2, 0x1E, 0x00, 0x00, 0x01, 0xF2, 0x1E, 0x00, 0x00, 0x01, 0x22, 0x1F, 0x00, 0x00, 0x01, -/* 000003C0 */ 0x44, 0x1F, 0x00, 0x00, 0x01, 0x64, 0x1F, 0x00, 0x00, 0x01, 0x7C, 0x1F, 0x00, 0x00, 0x01, 0xBE, -/* 000003D0 */ 0x1F, 0x00, 0x00, 0x01, 0xF6, 0x1F, 0x00, 0x00, 0x01, 0x40, 0x20, 0x00, 0x00, 0x01, 0x80, 0x20, -/* 000003E0 */ 0x00, 0x00, 0x01, 0xCE, 0x20, 0x00, 0x00, 0x01, 0x12, 0x21, 0x00, 0x00, 0x01, 0x3E, 0x21, 0x00, -/* 000003F0 */ 0x00, 0x01, 0x42, 0x21, 0x00, 0x00, 0x01, 0x50, 0x21, 0x00, 0x00, 0x00, 0x58, 0x21, 0x00, 0x00, -/* 00000400 */ 0x00, 0x60, 0x21, 0x00, 0x00, 0x00, 0x7C, 0x21, 0x00, 0x00, 0x00, 0x98, 0x21, 0x00, 0x00, 0x00, -/* 00000410 */ 0xAC, 0x21, 0x00, 0x00, 0x00, 0xBC, 0x21, 0x00, 0x00, 0x00, 0xD4, 0x21, 0x00, 0x00, 0x00, 0xF4, -/* 00000420 */ 0x21, 0x00, 0x00, 0x00, 0x04, 0x22, 0x00, 0x00, 0x00, 0x16, 0x22, 0x00, 0x00, 0x00, 0x2A, 0x22, -/* 00000430 */ 0x00, 0x00, 0x00, 0x38, 0x22, 0x00, 0x00, 0x00, 0x46, 0x22, 0x00, 0x00, 0x00, 0x64, 0x22, 0x00, -/* 00000440 */ 0x00, 0x00, 0x70, 0x22, 0x00, 0x00, 0x00, 0x82, 0x22, 0x00, 0x00, 0x00, 0x92, 0x22, 0x00, 0x00, -/* 00000450 */ 0x00, 0xA4, 0x22, 0x00, 0x00, 0x00, 0xB6, 0x22, 0x00, 0x00, 0x00, 0xC8, 0x22, 0x00, 0x00, 0x01, -/* 00000460 */ 0xD4, 0x22, 0x00, 0x00, 0x00, 0xF6, 0x22, 0x00, 0x00, 0x00, 0x18, 0x23, 0x00, 0x00, 0x00, 0x2A, -/* 00000470 */ 0x23, 0x00, 0x00, 0x00, 0x4C, 0x23, 0x00, 0x00, 0x00, 0x5C, 0x23, 0x00, 0x00, 0x00, 0x70, 0x23, -/* 00000480 */ 0x00, 0x00, 0x00, 0x7E, 0x23, 0x00, 0x00, 0x00, 0x8E, 0x23, 0x00, 0x00, 0x00, 0xB0, 0x23, 0x00, -/* 00000490 */ 0x00, 0x00, 0xCA, 0x23, 0x00, 0x00, 0x00, 0xE6, 0x23, 0x00, 0x00, 0x00, 0xF4, 0x23, 0x00, 0x00, -/* 000004A0 */ 0x00, 0xFA, 0x23, 0x00, 0x00, 0x00, 0xFE, 0x23, 0x00, 0x00, 0x01, 0x04, 0x24, 0x00, 0x00, 0x01, -/* 000004B0 */ 0x0A, 0x24, 0x00, 0x00, 0x01, 0x10, 0x24, 0x00, 0x00, 0x01, 0x16, 0x24, 0x00, 0x00, 0x01, 0x1C, -/* 000004C0 */ 0x24, 0x00, 0x00, 0x01, 0x22, 0x24, 0x00, 0x00, 0x01, 0x44, 0x24, 0x00, 0x00, 0x01, 0x58, 0x24, -/* 000004D0 */ 0x00, 0x00, 0x01, 0x5C, 0x24, 0x00, 0x00, 0x01, 0x74, 0x24, 0x00, 0x00, 0x01, 0x82, 0x24, 0x00, -/* 000004E0 */ 0x00, 0x01, 0xA8, 0x24, 0x00, 0x00, 0x00, 0xB6, 0x24, 0x00, 0x00, 0x01, 0xCC, 0x24, 0x00, 0x00, -/* 000004F0 */ 0x00, 0xD2, 0x24, 0x00, 0x00, 0x00, 0xDA, 0x24, 0x00, 0x00, 0x01, 0xF6, 0x24, 0x00, 0x00, 0x00, -/* 00000500 */ 0x00, 0x25, 0x00, 0x00, 0x00, 0x10, 0x25, 0x00, 0x00, 0x00, 0x1E, 0x25, 0x00, 0x00, 0x00, 0x24, -/* 00000510 */ 0x25, 0x00, 0x00, 0x00, 0x2A, 0x25, 0x00, 0x00, 0x00, 0x34, 0x25, 0x00, 0x00, 0x00, 0x38, 0x25, -/* 00000520 */ 0x00, 0x00, 0x00, 0x40, 0x25, 0x00, 0x00, 0x00, 0x44, 0x25, 0x00, 0x00, 0x00, 0x5A, 0x25, 0x00, -/* 00000530 */ 0x00, 0x01, 0x80, 0x25, 0x00, 0x00, 0x00, 0x8C, 0x25, 0x00, 0x00, 0x00, 0x98, 0x25, 0x00, 0x00, -/* 00000540 */ 0x00, 0xA0, 0x25, 0x00, 0x00, 0x00, 0xA4, 0x25, 0x00, 0x00, 0x00, 0xA8, 0x25, 0x00, 0x00, 0x00, -/* 00000550 */ 0x5C, 0x26, 0x00, 0x00, 0x00, 0xF8, 0x26, 0x00, 0x00, 0x00, 0x7E, 0x27, 0x00, 0x00, 0x00, 0x8A, -/* 00000560 */ 0x27, 0x00, 0x00, 0x00, 0x92, 0x27, 0x00, 0x00, 0x00, 0xA8, 0x27, 0x00, 0x00, 0x00, 0xC2, 0x27, -/* 00000570 */ 0x00, 0x00, 0x00, 0xDC, 0x27, 0x00, 0x00, 0x00, 0xE6, 0x27, 0x00, 0x00, 0x00, 0xFC, 0x27, 0x00, -/* 00000580 */ 0x00, 0x00, 0x0A, 0x28, 0x00, 0x00, 0x00, 0x18, 0x28, 0x00, 0x00, 0x00, 0x22, 0x28, 0x00, 0x00, -/* 00000590 */ 0x00, 0x30, 0x28, 0x00, 0x00, 0x00, 0x44, 0x28, 0x00, 0x00, 0x00, 0x5E, 0x28, 0x00, 0x00, 0x00, -/* 000005A0 */ 0x6A, 0x28, 0x00, 0x00, 0x00, 0x78, 0x28, 0x00, 0x00, 0x00, 0x7E, 0x28, 0x00, 0x00, 0x00, 0x8A, -/* 000005B0 */ 0x28, 0x00, 0x00, 0x00, 0x92, 0x28, 0x00, 0x00, 0x00, 0xA2, 0x28, 0x00, 0x00, 0x00, 0xAE, 0x28, -/* 000005C0 */ 0x00, 0x00, 0x00, 0xBE, 0x28, 0x00, 0x00, 0x00, 0xCA, 0x28, 0x00, 0x00, 0x00, 0xD4, 0x28, 0x00, -/* 000005D0 */ 0x00, 0x00, 0xDA, 0x28, 0x00, 0x00, 0x00, 0xDE, 0x28, 0x00, 0x00, 0x00, 0xE2, 0x28, 0x00, 0x00, -/* 000005E0 */ 0x00, 0xE6, 0x28, 0x00, 0x00, 0x01, 0xEA, 0x28, 0x00, 0x00, 0x01, 0xFC, 0x28, 0x00, 0x00, 0x01, -/* 000005F0 */ 0x0A, 0x29, 0x00, 0x00, 0x01, 0x18, 0x29, 0x00, 0x00, 0x01, 0x2A, 0x29, 0x00, 0x00, 0x01, 0x40, -/* 00000600 */ 0x29, 0x00, 0x00, 0x00, 0x54, 0x29, 0x00, 0x00, 0x00, 0x62, 0x29, 0x00, 0x00, 0x00, 0x70, 0x29, -/* 00000610 */ 0x00, 0x00, 0x01, 0x94, 0x29, 0x00, 0x00, 0x01, 0xA2, 0x29, 0x00, 0x00, 0x00, 0xCC, 0x29, 0x00, -/* 00000620 */ 0x00, 0x00, 0xF8, 0x29, 0x00, 0x00, 0x00, 0x24, 0x2A, 0x00, 0x00, 0x00, 0x56, 0x2A, 0x00, 0x00, -/* 00000630 */ 0x00, 0x88, 0x2A, 0x00, 0x00, 0x00, 0x9A, 0x2A, 0x00, 0x00, 0x00, 0xB6, 0x2A, 0x00, 0x00, 0x00, -/* 00000640 */ 0xC4, 0x2A, 0x00, 0x00, 0x01, 0xDE, 0x2A, 0x00, 0x00, 0x01, 0xE8, 0x2A, 0x00, 0x00, 0x01, 0xFA, -/* 00000650 */ 0x2A, 0x00, 0x00, 0x01, 0x20, 0x2B, 0x00, 0x00, 0x01, 0x50, 0x2B, 0x00, 0x00, 0x00, 0x5E, 0x2B, -/* 00000660 */ 0x00, 0x00, 0x00, 0x9C, 0x2B, 0x00, 0x00, 0x00, 0xB8, 0x2B, 0x00, 0x00, 0x00, 0xF8, 0x2B, 0x00, -/* 00000670 */ 0x00, 0x00, 0x0C, 0x2C, 0x00, 0x00, 0x00, 0x24, 0x2C, 0x00, 0x00, 0x00, 0x44, 0x2C, 0x00, 0x00, -/* 00000680 */ 0x00, 0x5C, 0x2C, 0x00, 0x00, 0x00, 0x6C, 0x2C, 0x00, 0x00, 0x01, 0x78, 0x2C, 0x00, 0x00, 0x00, -/* 00000690 */ 0x82, 0x2C, 0x00, 0x00, 0x00, 0x90, 0x2C, 0x00, 0x00, 0x00, 0xA0, 0x2C, 0x00, 0x00, 0x01, 0xB4, -/* 000006A0 */ 0x2C, 0x00, 0x00, 0x00, 0xC4, 0x2C, 0x00, 0x00, 0x00, 0xDC, 0x2C, 0x00, 0x00, 0x00, 0x00, 0x2D, -/* 000006B0 */ 0x00, 0x00, 0x01, 0x10, 0x2D, 0x00, 0x00, 0x01, 0x24, 0x2D, 0x00, 0x00, 0x01, 0x4C, 0x2D, 0x00, -/* 000006C0 */ 0x00, 0x01, 0x66, 0x2D, 0x00, 0x00, 0x00, 0x9C, 0x2D, 0x00, 0x00, 0x00, 0xE2, 0x2D, 0x00, 0x00, -/* 000006D0 */ 0x00, 0xF8, 0x2D, 0x00, 0x00, 0x01, 0x26, 0x2E, 0x00, 0x00, 0x00, 0x34, 0x2E, 0x00, 0x00, 0x00, -/* 000006E0 */ 0x74, 0x2E, 0x00, 0x00, 0x00, 0x98, 0x2E, 0x00, 0x00, 0x00, 0xDE, 0x2E, 0x00, 0x00, 0x00, 0x32, -/* 000006F0 */ 0x2F, 0x00, 0x00, 0x00, 0x48, 0x2F, 0x00, 0x00, 0x00, 0x56, 0x2F, 0x00, 0x00, 0x00, 0x72, 0x2F, -/* 00000700 */ 0x00, 0x00, 0x01, 0x7E, 0x2F, 0x00, 0x00, 0x00, 0x8E, 0x2F, 0x00, 0x00, 0x00, 0x9E, 0x2F, 0x00, -/* 00000710 */ 0x00, 0x00, 0xB0, 0x2F, 0x00, 0x00, 0x00, 0xD0, 0x2F, 0x00, 0x00, 0x00, 0xDA, 0x2F, 0x00, 0x00, -/* 00000720 */ 0x00, 0xE8, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x01, 0x30, 0x30, 0x00, 0x00, 0x01, -/* 00000730 */ 0x48, 0x30, 0x00, 0x00, 0x00, 0x84, 0x30, 0x00, 0x00, 0x00, 0xCE, 0x30, 0x00, 0x00, 0x00, 0x1C, -/* 00000740 */ 0x31, 0x00, 0x00, 0x00, 0x3C, 0x31, 0x00, 0x00, 0x00, 0x50, 0x31, 0x00, 0x00, 0x01, 0xA2, 0x31, -/* 00000750 */ 0x00, 0x00, 0x01, 0xC8, 0x31, 0x00, 0x00, 0x01, 0xF2, 0x31, 0x00, 0x00, 0x01, 0x24, 0x32, 0x00, -/* 00000760 */ 0x00, 0x01, 0x48, 0x32, 0x00, 0x00, 0x01, 0x66, 0x32, 0x00, 0x00, 0x01, 0x92, 0x32, 0x00, 0x00, -/* 00000770 */ 0x01, 0xE4, 0x32, 0x00, 0x00, 0x01, 0xFE, 0x32, 0x00, 0x00, 0x01, 0x18, 0x33, 0x00, 0x00, 0x00, -/* 00000780 */ 0x22, 0x33, 0x00, 0x00, 0x01, 0x30, 0x33, 0x00, 0x00, 0x01, 0x3C, 0x33, 0x00, 0x00, 0x01, 0x46, -/* 00000790 */ 0x33, 0x00, 0x00, 0x01, 0x56, 0x33, 0x00, 0x00, 0x00, 0x66, 0x33, 0x00, 0x00, 0x00, 0x6E, 0x33, -/* 000007A0 */ 0x00, 0x00, 0x00, 0x78, 0x33, 0x00, 0x00, 0x00, 0x84, 0x33, 0x00, 0x00, 0x00, 0x8C, 0x33, 0x00, -/* 000007B0 */ 0x00, 0x00, 0x96, 0x33, 0x00, 0x00, 0x00, 0xA4, 0x33, 0x00, 0x00, 0x00, 0xB2, 0x33, 0x00, 0x00, -/* 000007C0 */ 0x00, 0xCC, 0x33, 0x00, 0x00, 0x00, 0xEA, 0x33, 0x00, 0x00, 0x00, 0x10, 0x34, 0x00, 0x00, 0x00, -/* 000007D0 */ 0x36, 0x34, 0x00, 0x00, 0x00, 0x72, 0x34, 0x00, 0x00, 0x00, 0x7A, 0x34, 0x00, 0x00, 0x00, 0x82, -/* 000007E0 */ 0x34, 0x00, 0x00, 0x00, 0xC6, 0x34, 0x00, 0x00, 0x00, 0xD0, 0x34, 0x00, 0x00, 0x00, 0x14, 0x35, -/* 000007F0 */ 0x00, 0x00, 0x00, 0x1E, 0x35, 0x00, 0x00, 0x00, 0x46, 0x35, 0x00, 0x00, 0x00, 0x90, 0x35, 0x00, -/* 00000800 */ 0x00, 0x00, 0xE8, 0x35, 0x00, 0x00, 0x01, 0x08, 0x36, 0x00, 0x00, 0x01, 0x28, 0x36, 0x00, 0x00, -/* 00000810 */ 0x01, 0x54, 0x36, 0x00, 0x00, 0x01, 0x80, 0x36, 0x00, 0x00, 0x01, 0xA8, 0x36, 0x00, 0x00, 0x01, -/* 00000820 */ 0xD0, 0x36, 0x00, 0x00, 0x00, 0xD4, 0x36, 0x00, 0x00, 0x01, 0xD8, 0x36, 0x00, 0x00, 0x01, 0xDC, -/* 00000830 */ 0x36, 0x00, 0x00, 0x01, 0xE0, 0x36, 0x00, 0x00, 0x01, 0xE4, 0x36, 0x00, 0x00, 0x00, 0xE8, 0x36, -/* 00000840 */ 0x00, 0x00, 0x00, 0xF6, 0x36, 0x00, 0x00, 0x01, 0xFA, 0x36, 0x00, 0x00, 0x01, 0x08, 0x37, 0x00, -/* 00000850 */ 0x00, 0x01, 0x0C, 0x37, 0x00, 0x00, 0x01, 0x10, 0x37, 0x00, 0x00, 0x01, 0x14, 0x37, 0x00, 0x00, -/* 00000860 */ 0x01, 0x18, 0x37, 0x00, 0x00, 0x01, 0x1C, 0x37, 0x00, 0x00, 0x01, 0x20, 0x37, 0x00, 0x00, 0x01, -/* 00000870 */ 0x24, 0x37, 0x00, 0x00, 0x01, 0x28, 0x37, 0x00, 0x00, 0x01, 0x2C, 0x37, 0x00, 0x00, 0x01, 0x30, -/* 00000880 */ 0x37, 0x00, 0x00, 0x01, 0x34, 0x37, 0x00, 0x00, 0x01, 0x38, 0x37, 0x00, 0x00, 0x01, 0x3C, 0x37, -/* 00000890 */ 0x00, 0x00, 0x01, 0x40, 0x37, 0x00, 0x00, 0x01, 0x44, 0x37, 0x00, 0x00, 0x01, 0x48, 0x37, 0x00, -/* 000008A0 */ 0x00, 0x01, 0x4C, 0x37, 0x00, 0x00, 0x01, 0x50, 0x37, 0x00, 0x00, 0x01, 0x54, 0x37, 0x00, 0x00, -/* 000008B0 */ 0x01, 0x58, 0x37, 0x00, 0x00, 0x01, 0x5C, 0x37, 0x00, 0x00, 0x01, 0x64, 0x37, 0x00, 0x00, 0x01, -/* 000008C0 */ 0x6C, 0x37, 0x00, 0x00, 0x01, 0x74, 0x37, 0x00, 0x00, 0x01, 0x7C, 0x37, 0x00, 0x00, 0x00, 0x80, -/* 000008D0 */ 0x37, 0x00, 0x00, 0x00, 0x84, 0x37, 0x00, 0x00, 0x01, 0x98, 0x37, 0x00, 0x00, 0x00, 0xB0, 0x37, -/* 000008E0 */ 0x00, 0x00, 0x00, 0xC2, 0x37, 0x00, 0x00, 0x00, 0x10, 0x38, 0x00, 0x00, 0x00, 0x20, 0x38, 0x00, -/* 000008F0 */ 0x00, 0x00, 0x30, 0x38, 0x00, 0x00, 0x00, 0x38, 0x38, 0x00, 0x00, 0x00, 0x54, 0x38, 0x00, 0x00, -/* 00000900 */ 0x00, 0x60, 0x38, 0x00, 0x00, 0x01, 0x94, 0x38, 0x00, 0x00, 0x01, 0xAE, 0x38, 0x00, 0x00, 0x00, -/* 00000910 */ 0xC8, 0x38, 0x00, 0x00, 0x01, 0xD8, 0x38, 0x00, 0x00, 0x01, 0xE8, 0x38, 0x00, 0x00, 0x01, 0xFC, -/* 00000920 */ 0x38, 0x00, 0x00, 0x00, 0x3A, 0x39, 0x00, 0x00, 0x00, 0x80, 0x39, 0x00, 0x00, 0x00, 0xC6, 0x39, -/* 00000930 */ 0x00, 0x00, 0x00, 0x04, 0x3A, 0x00, 0x00, 0x00, 0x16, 0x3A, 0x00, 0x00, 0x01, 0x42, 0x3A, 0x00, -/* 00000940 */ 0x00, 0x01, 0x5E, 0x3A, 0x00, 0x00, 0x01, 0xA6, 0x3A, 0x00, 0x00, 0x00, 0xC8, 0x3A, 0x00, 0x00, -/* 00000950 */ 0x00, 0x10, 0x3B, 0x00, 0x00, 0x00, 0x54, 0x3B, 0x00, 0x00, 0x00, 0x62, 0x3B, 0x00, 0x00, 0x00, -/* 00000960 */ 0xB8, 0x3B, 0x00, 0x00, 0x00, 0xC2, 0x3B, 0x00, 0x00, 0x00, 0xD4, 0x3B, 0x00, 0x00, 0x00, 0xE4, -/* 00000970 */ 0x3B, 0x00, 0x00, 0x01, 0x06, 0x3C, 0x00, 0x00, 0x01, 0x34, 0x3C, 0x00, 0x00, 0x00, 0x40, 0x3C, -/* 00000980 */ 0x00, 0x00, 0x01, 0x46, 0x3C, 0x00, 0x00, 0x00, 0xA0, 0x3C, 0x00, 0x00, 0x00, 0xCA, 0x3C, 0x00, -/* 00000990 */ 0x00, 0x00, 0xF2, 0x3C, 0x00, 0x00, 0x01, 0x04, 0x3D, 0x00, 0x00, 0x01, 0x24, 0x3D, 0x00, 0x00, -/* 000009A0 */ 0x00, 0x2C, 0x3D, 0x00, 0x00, 0x00, 0x3C, 0x3D, 0x00, 0x00, 0x00, 0x66, 0x3D, 0x00, 0x00, 0x00, -/* 000009B0 */ 0x82, 0x3D, 0x00, 0x00, 0x00, 0xA0, 0x3D, 0x00, 0x00, 0x00, 0xB4, 0x3D, 0x00, 0x00, 0x01, 0xCC, -/* 000009C0 */ 0x3D, 0x00, 0x00, 0x00, 0xD6, 0x3D, 0x00, 0x00, 0x01, 0xE0, 0x3D, 0x00, 0x00, 0x00, 0xEE, 0x3D, -/* 000009D0 */ 0x00, 0x00, 0x01, 0xFA, 0x3D, 0x00, 0x00, 0x01, 0x08, 0x3E, 0x00, 0x00, 0x01, 0x24, 0x3E, 0x00, -/* 000009E0 */ 0x00, 0x00, 0x52, 0x3E, 0x00, 0x00, 0x00, 0x9E, 0x3E, 0x00, 0x00, 0x00, 0xF2, 0x3E, 0x00, 0x00, -/* 000009F0 */ 0x00, 0x4A, 0x3F, 0x00, 0x00, 0x00, 0x86, 0x3F, 0x00, 0x00, 0x01, 0x98, 0x3F, 0x00, 0x00, 0x01, -/* 00000A00 */ 0xCA, 0x3F, 0x00, 0x00, 0x01, 0xFA, 0x3F, 0x00, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x00, 0x56, -/* 00000A10 */ 0x40, 0x00, 0x00, 0x00, 0x74, 0x40, 0x00, 0x00, 0x00, 0xAC, 0x40, 0x00, 0x00, 0x00, 0xBA, 0x40, -/* 00000A20 */ 0x00, 0x00, 0x00, 0xEA, 0x40, 0x00, 0x00, 0x00, 0xEE, 0x40, 0x00, 0x00, 0x00, 0xF2, 0x40, 0x00, -/* 00000A30 */ 0x00, 0x01, 0x18, 0x41, 0x00, 0x00, 0x01, 0x28, 0x41, 0x00, 0x00, 0x01, 0x44, 0x41, 0x00, 0x00, -/* 00000A40 */ 0x01, 0x6C, 0x41, 0x00, 0x00, 0x01, 0x84, 0x41, 0x00, 0x00, 0x01, 0x98, 0x41, 0x00, 0x00, 0x00, -/* 00000A50 */ 0xAA, 0x41, 0x00, 0x00, 0x00, 0xB4, 0x41, 0x00, 0x00, 0x01, 0xD4, 0x41, 0x00, 0x00, 0x00, 0xDA, -/* 00000A60 */ 0x41, 0x00, 0x00, 0x01, 0x0C, 0x42, 0x00, 0x00, 0x01, 0x30, 0x42, 0x00, 0x00, 0x00, 0x40, 0x42, -/* 00000A70 */ 0x00, 0x00, 0x01, 0x5E, 0x42, 0x00, 0x00, 0x00, 0x6C, 0x42, 0x00, 0x00, 0x01, 0x88, 0x42, 0x00, -/* 00000A80 */ 0x00, 0x00, 0x98, 0x42, 0x00, 0x00, 0x01, 0xBA, 0x42, 0x00, 0x00, 0x00, 0xCC, 0x42, 0x00, 0x00, -/* 00000A90 */ 0x01, 0xEA, 0x42, 0x00, 0x00, 0x00, 0xF8, 0x42, 0x00, 0x00, 0x01, 0x16, 0x43, 0x00, 0x00, 0x00, -/* 00000AA0 */ 0x24, 0x43, 0x00, 0x00, 0x01, 0x46, 0x43, 0x00, 0x00, 0x00, 0x62, 0x43, 0x00, 0x00, 0x01, 0x7C, -/* 00000AB0 */ 0x43, 0x00, 0x00, 0x00, 0x86, 0x43, 0x00, 0x00, 0x01, 0xA4, 0x43, 0x00, 0x00, 0x00, 0xB2, 0x43, -/* 00000AC0 */ 0x00, 0x00, 0x01, 0xEC, 0x43, 0x00, 0x00, 0x01, 0x18, 0x44, 0x00, 0x00, 0x01, 0x54, 0x44, 0x00, -/* 00000AD0 */ 0x00, 0x01, 0xA2, 0x44, 0x00, 0x00, 0x01, 0xCC, 0x44, 0x00, 0x00, 0x01, 0xDE, 0x44, 0x00, 0x00, -/* 00000AE0 */ 0x00, 0x0A, 0x45, 0x00, 0x00, 0x00, 0x28, 0x45, 0x00, 0x00, 0x00, 0x4A, 0x45, 0x00, 0x00, 0x00, -/* 00000AF0 */ 0x5E, 0x45, 0x00, 0x00, 0x00, 0x7A, 0x45, 0x00, 0x00, 0x00, 0x9E, 0x45, 0x00, 0x00, 0x00, 0xB4, -/* 00000B00 */ 0x45, 0x00, 0x00, 0x00, 0xDE, 0x45, 0x00, 0x00, 0x00, 0xFA, 0x45, 0x00, 0x00, 0x00, 0x00, 0x46, -/* 00000B10 */ 0x00, 0x00, 0x00, 0x4C, 0x46, 0x00, 0x00, 0x00, 0x16, 0x47, 0x00, 0x00, 0x00, 0x2C, 0x47, 0x00, -/* 00000B20 */ 0x00, 0x00, 0x72, 0x47, 0x00, 0x00, 0x00, 0x7C, 0x47, 0x00, 0x00, 0x00, 0x80, 0x47, 0x00, 0x00, -/* 00000B30 */ 0x00, 0x84, 0x47, 0x00, 0x00, 0x00, 0x88, 0x47, 0x00, 0x00, 0x00, 0xA0, 0x47, 0x00, 0x00, 0x00, -/* 00000B40 */ 0xBE, 0x47, 0x00, 0x00, 0x00, 0x0A, 0x48, 0x00, 0x00, 0x00, 0xEA, 0x48, 0x00, 0x00, 0x00, 0x04, -/* 00000B50 */ 0x49, 0x00, 0x00, 0x00, 0x14, 0x49, 0x00, 0x00, 0x00, 0x28, 0x49, 0x00, 0x00, 0x00, 0x3C, 0x49, -/* 00000B60 */ 0x00, 0x00, 0x00, 0xBE, 0x49, 0x00, 0x00, 0x00, 0xEA, 0x49, 0x00, 0x00, 0x00, 0x02, 0x4A, 0x00, -/* 00000B70 */ 0x00, 0x00, 0x14, 0x4A, 0x00, 0x00, 0x00, 0x4E, 0x4A, 0x00, 0x00, 0x00, 0x66, 0x4A, 0x00, 0x00, -/* 00000B80 */ 0x00, 0x7E, 0x4A, 0x00, 0x00, 0x00, 0x88, 0x4A, 0x00, 0x00, 0x00, 0xC8, 0x4A, 0x00, 0x00, 0x01, -/* 00000B90 */ 0xD2, 0x4A, 0x00, 0x00, 0x00, 0x24, 0x4B, 0x00, 0x00, 0x00, 0x47, 0x00, 0x6C, 0x00, 0x6F, 0x00, -/* 00000BA0 */ 0x62, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x20, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x64, 0x00, 0x65, 0x00, -/* 00000BB0 */ 0x00, 0x00, 0x75, 0x00, 0x73, 0x00, 0x65, 0x00, 0x20, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, -/* 00000BC0 */ 0x69, 0x00, 0x63, 0x00, 0x74, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, -/* 00000BD0 */ 0x43, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x00, 0x00, 0x73, 0x00, 0x65, 0x00, -/* 00000BE0 */ 0x74, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, -/* 00000BF0 */ 0x70, 0x00, 0x65, 0x00, 0x00, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x41, 0x00, 0x72, 0x00, -/* 00000C00 */ 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x4C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x74, 0x00, -/* 00000C10 */ 0x68, 0x00, 0x00, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x49, 0x00, 0x6E, 0x00, -/* 00000C20 */ 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, 0x46, 0x00, 0x75, 0x00, -/* 00000C30 */ 0x6E, 0x00, 0x63, 0x00, 0x00, 0x00, 0x52, 0x00, 0x61, 0x00, 0x69, 0x00, 0x73, 0x00, 0x65, 0x00, -/* 00000C40 */ 0x41, 0x00, 0x73, 0x00, 0x73, 0x00, 0x65, 0x00, 0x72, 0x00, 0x74, 0x00, 0x00, 0x00, 0x4F, 0x00, -/* 00000C50 */ 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x47, 0x00, 0x65, 0x00, 0x74, 0x00, -/* 00000C60 */ 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, -/* 00000C70 */ 0x65, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x4F, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, -/* 00000C80 */ 0x63, 0x00, 0x74, 0x00, 0x49, 0x00, 0x73, 0x00, 0x45, 0x00, 0x78, 0x00, 0x74, 0x00, 0x65, 0x00, -/* 00000C90 */ 0x6E, 0x00, 0x73, 0x00, 0x69, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x4F, 0x00, -/* 00000CA0 */ 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x47, 0x00, 0x65, 0x00, 0x74, 0x00, -/* 00000CB0 */ 0x4F, 0x00, 0x77, 0x00, 0x6E, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x65, 0x00, -/* 00000CC0 */ 0x72, 0x00, 0x74, 0x00, 0x79, 0x00, 0x4E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x73, 0x00, -/* 00000CD0 */ 0x00, 0x00, 0x4F, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x49, 0x00, -/* 00000CE0 */ 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, 0x48, 0x00, -/* 00000CF0 */ 0x61, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x77, 0x00, 0x6E, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, -/* 00000D00 */ 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x6F, 0x00, -/* 00000D10 */ 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x44, 0x00, 0x65, 0x00, 0x66, 0x00, -/* 00000D20 */ 0x69, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x65, 0x00, -/* 00000D30 */ 0x72, 0x00, 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x4F, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, -/* 00000D40 */ 0x63, 0x00, 0x74, 0x00, 0x44, 0x00, 0x65, 0x00, 0x66, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x65, 0x00, -/* 00000D50 */ 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x74, 0x00, 0x79, 0x00, -/* 00000D60 */ 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x49, 0x00, 0x6E, 0x00, -/* 00000D70 */ 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, -/* 00000D80 */ 0x72, 0x00, 0x45, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, -/* 00000D90 */ 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, -/* 00000DA0 */ 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x65, 0x00, 0x78, 0x00, -/* 00000DB0 */ 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, -/* 00000DC0 */ 0x49, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, -/* 00000DD0 */ 0x50, 0x00, 0x75, 0x00, 0x73, 0x00, 0x68, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, -/* 00000DE0 */ 0x61, 0x00, 0x79, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, -/* 00000DF0 */ 0x63, 0x00, 0x65, 0x00, 0x4A, 0x00, 0x6F, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x46, 0x00, -/* 00000E00 */ 0x75, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x49, 0x00, -/* 00000E10 */ 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, 0x42, 0x00, -/* 00000E20 */ 0x69, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x00, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, -/* 00000E30 */ 0x49, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, -/* 00000E40 */ 0x47, 0x00, 0x65, 0x00, 0x74, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 00000E50 */ 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x4E, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x00, 0x00, -/* 00000E60 */ 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x49, 0x00, 0x6E, 0x00, -/* 00000E70 */ 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, 0x52, 0x00, 0x65, 0x00, -/* 00000E80 */ 0x70, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x63, 0x00, 0x65, 0x00, 0x00, 0x00, 0x53, 0x00, 0x74, 0x00, -/* 00000E90 */ 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, -/* 00000EA0 */ 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, -/* 00000EB0 */ 0x77, 0x00, 0x65, 0x00, 0x72, 0x00, 0x43, 0x00, 0x61, 0x00, 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 00000EC0 */ 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x49, 0x00, 0x6E, 0x00, -/* 00000ED0 */ 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, 0x54, 0x00, 0x6F, 0x00, -/* 00000EE0 */ 0x55, 0x00, 0x70, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x43, 0x00, 0x61, 0x00, 0x73, 0x00, -/* 00000EF0 */ 0x65, 0x00, 0x00, 0x00, 0x74, 0x00, 0x68, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x45, 0x00, -/* 00000F00 */ 0x78, 0x00, 0x49, 0x00, 0x66, 0x00, 0x4F, 0x00, 0x4F, 0x00, 0x4D, 0x00, 0x4F, 0x00, 0x72, 0x00, -/* 00000F10 */ 0x53, 0x00, 0x4F, 0x00, 0x45, 0x00, 0x00, 0x00, 0x74, 0x00, 0x61, 0x00, 0x67, 0x00, 0x50, 0x00, -/* 00000F20 */ 0x75, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x63, 0x00, 0x46, 0x00, 0x75, 0x00, 0x6E, 0x00, -/* 00000F30 */ 0x63, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, -/* 00000F40 */ 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x66, 0x00, -/* 00000F50 */ 0x6F, 0x00, 0x72, 0x00, 0x45, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x49, 0x00, 0x66, 0x00, -/* 00000F60 */ 0x50, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x00, 0x00, -/* 00000F70 */ 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x45, 0x00, 0x78, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6E, 0x00, -/* 00000F80 */ 0x73, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x53, 0x00, 0x75, 0x00, 0x62, 0x00, 0x74, 0x00, -/* 00000F90 */ 0x61, 0x00, 0x67, 0x00, 0x73, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, -/* 00000FA0 */ 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00000FB0 */ 0x65, 0x00, 0x48, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, -/* 00000FC0 */ 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x4C, 0x00, -/* 00000FD0 */ 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x73, 0x00, -/* 00000FE0 */ 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x70, 0x00, 0x70, 0x00, 0x65, 0x00, 0x64, 0x00, 0x44, 0x00, -/* 00000FF0 */ 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x4C, 0x00, 0x6F, 0x00, -/* 00001000 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, -/* 00001010 */ 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, -/* 00001020 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x57, 0x00, -/* 00001030 */ 0x72, 0x00, 0x61, 0x00, 0x70, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x63, 0x00, -/* 00001040 */ 0x61, 0x00, 0x6E, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00001050 */ 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00001060 */ 0x65, 0x00, 0x4C, 0x00, 0x69, 0x00, 0x73, 0x00, 0x74, 0x00, 0x57, 0x00, 0x72, 0x00, 0x61, 0x00, -/* 00001070 */ 0x70, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, -/* 00001080 */ 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x41, 0x00, 0x63, 0x00, 0x63, 0x00, 0x65, 0x00, -/* 00001090 */ 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, -/* 000010A0 */ 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x56, 0x00, 0x61, 0x00, -/* 000010B0 */ 0x6C, 0x00, 0x75, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, 0x76, 0x00, -/* 000010C0 */ 0x65, 0x00, 0x72, 0x00, 0x73, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, -/* 000010D0 */ 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x41, 0x00, 0x63, 0x00, 0x63, 0x00, 0x65, 0x00, 0x70, 0x00, -/* 000010E0 */ 0x74, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, -/* 000010F0 */ 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x56, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00001100 */ 0x75, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x70, 0x00, 0x70, 0x00, -/* 00001110 */ 0x65, 0x00, 0x64, 0x00, 0x44, 0x00, 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, -/* 00001120 */ 0x74, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 00001130 */ 0x49, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x54, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, -/* 00001140 */ 0x00, 0x00, 0x69, 0x00, 0x73, 0x00, 0x50, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x66, 0x00, -/* 00001150 */ 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x55, 0x00, 0x73, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, -/* 00001160 */ 0x49, 0x00, 0x43, 0x00, 0x55, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x4F, 0x00, 0x54, 0x00, 0x5F, 0x00, -/* 00001170 */ 0x46, 0x00, 0x4F, 0x00, 0x55, 0x00, 0x4E, 0x00, 0x44, 0x00, 0x00, 0x00, 0x62, 0x00, 0x61, 0x00, -/* 00001180 */ 0x72, 0x00, 0x65, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x42, 0x00, -/* 00001190 */ 0x75, 0x00, 0x69, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x46, 0x00, 0x75, 0x00, -/* 000011A0 */ 0x6E, 0x00, 0x63, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x49, 0x00, 0x44, 0x00, -/* 000011B0 */ 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x72, 0x00, 0x61, 0x00, 0x69, 0x00, 0x73, 0x00, 0x65, 0x00, -/* 000011C0 */ 0x00, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, -/* 000011D0 */ 0x72, 0x00, 0x53, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, -/* 000011E0 */ 0x76, 0x00, 0x69, 0x00, 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, -/* 000011F0 */ 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x43, 0x00, 0x61, 0x00, 0x73, 0x00, -/* 00001200 */ 0x65, 0x00, 0x46, 0x00, 0x69, 0x00, 0x72, 0x00, 0x73, 0x00, 0x74, 0x00, 0x00, 0x00, 0x4E, 0x00, -/* 00001210 */ 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, -/* 00001220 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x53, 0x00, 0x74, 0x00, 0x79, 0x00, 0x6C, 0x00, 0x65, 0x00, -/* 00001230 */ 0x00, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, -/* 00001240 */ 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x43, 0x00, 0x75, 0x00, 0x72, 0x00, -/* 00001250 */ 0x72, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x79, 0x00, 0x44, 0x00, 0x69, 0x00, 0x73, 0x00, -/* 00001260 */ 0x70, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x79, 0x00, 0x00, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x45, 0x00, -/* 00001270 */ 0x6E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x00, 0x00, 0x61, 0x00, 0x62, 0x00, 0x73, 0x00, 0x00, 0x00, -/* 00001280 */ 0x66, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x61, 0x00, -/* 00001290 */ 0x78, 0x00, 0x00, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x00, 0x00, 0x4D, 0x00, 0x49, 0x00, -/* 000012A0 */ 0x4E, 0x00, 0x00, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x6F, 0x00, -/* 000012B0 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, -/* 000012C0 */ 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, -/* 000012D0 */ 0x65, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 000012E0 */ 0x65, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, -/* 000012F0 */ 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, -/* 00001300 */ 0x54, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, -/* 00001310 */ 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, -/* 00001320 */ 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, -/* 00001330 */ 0x72, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00001340 */ 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, -/* 00001350 */ 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x4C, 0x00, 0x6F, 0x00, -/* 00001360 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00, -/* 00001370 */ 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, 0x00, 0x00, 0x4D, 0x00, 0x41, 0x00, 0x58, 0x00, 0x00, 0x00, -/* 00001380 */ 0x74, 0x00, 0x6F, 0x00, 0x55, 0x00, 0x70, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x43, 0x00, -/* 00001390 */ 0x61, 0x00, 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, -/* 000013A0 */ 0x77, 0x00, 0x65, 0x00, 0x72, 0x00, 0x43, 0x00, 0x61, 0x00, 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 000013B0 */ 0x72, 0x00, 0x65, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x63, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 000013C0 */ 0x73, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x74, 0x00, 0x00, 0x00, 0x73, 0x00, 0x75, 0x00, -/* 000013D0 */ 0x62, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, -/* 000013E0 */ 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x49, 0x00, 0x6E, 0x00, -/* 000013F0 */ 0x64, 0x00, 0x65, 0x00, 0x78, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x61, 0x00, -/* 00001400 */ 0x74, 0x00, 0x63, 0x00, 0x68, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, 0x70, 0x00, 0x65, 0x00, -/* 00001410 */ 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x45, 0x00, 0x61, 0x00, -/* 00001420 */ 0x63, 0x00, 0x68, 0x00, 0x00, 0x00, 0x70, 0x00, 0x75, 0x00, 0x73, 0x00, 0x68, 0x00, 0x00, 0x00, -/* 00001430 */ 0x6A, 0x00, 0x6F, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x61, 0x00, 0x72, 0x00, 0x72, 0x00, -/* 00001440 */ 0x61, 0x00, 0x79, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x65, 0x00, 0x78, 0x00, 0x4F, 0x00, -/* 00001450 */ 0x66, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x70, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, -/* 00001460 */ 0x64, 0x00, 0x75, 0x00, 0x63, 0x00, 0x65, 0x00, 0x00, 0x00, 0x73, 0x00, 0x6C, 0x00, 0x69, 0x00, -/* 00001470 */ 0x63, 0x00, 0x65, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x61, 0x00, -/* 00001480 */ 0x74, 0x00, 0x00, 0x00, 0x66, 0x00, 0x69, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, -/* 00001490 */ 0x00, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x71, 0x00, 0x75, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 000014A0 */ 0x6B, 0x00, 0x65, 0x00, 0x79, 0x00, 0x73, 0x00, 0x00, 0x00, 0x68, 0x00, 0x61, 0x00, 0x73, 0x00, -/* 000014B0 */ 0x4F, 0x00, 0x77, 0x00, 0x6E, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x65, 0x00, -/* 000014C0 */ 0x72, 0x00, 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x64, 0x00, 0x65, 0x00, 0x66, 0x00, 0x69, 0x00, -/* 000014D0 */ 0x6E, 0x00, 0x65, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, -/* 000014E0 */ 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x69, 0x00, 0x73, 0x00, 0x45, 0x00, 0x78, 0x00, 0x74, 0x00, -/* 000014F0 */ 0x65, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x69, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 00001500 */ 0x63, 0x00, 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, 0x73, 0x00, -/* 00001510 */ 0x65, 0x00, 0x74, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, -/* 00001520 */ 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x69, 0x00, 0x73, 0x00, -/* 00001530 */ 0x46, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, 0x69, 0x00, -/* 00001540 */ 0x73, 0x00, 0x4E, 0x00, 0x61, 0x00, 0x4E, 0x00, 0x00, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, -/* 00001550 */ 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6E, 0x00, -/* 00001560 */ 0x64, 0x00, 0x00, 0x00, 0x61, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x79, 0x00, 0x00, 0x00, -/* 00001570 */ 0x72, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x65, 0x00, 0x45, 0x00, 0x72, 0x00, 0x72, 0x00, -/* 00001580 */ 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x61, 0x00, 0x73, 0x00, 0x73, 0x00, 0x65, 0x00, 0x72, 0x00, -/* 00001590 */ 0x74, 0x00, 0x00, 0x00, 0x62, 0x00, 0x61, 0x00, 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, 0x61, 0x00, -/* 000015A0 */ 0x63, 0x00, 0x63, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x00, 0x00, 0x63, 0x00, 0x61, 0x00, -/* 000015B0 */ 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, 0x76, 0x00, 0x61, 0x00, 0x72, 0x00, 0x69, 0x00, 0x61, 0x00, -/* 000015C0 */ 0x6E, 0x00, 0x74, 0x00, 0x00, 0x00, 0x44, 0x00, 0x45, 0x00, 0x46, 0x00, 0x41, 0x00, 0x55, 0x00, -/* 000015D0 */ 0x4C, 0x00, 0x54, 0x00, 0x00, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, -/* 000015E0 */ 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x66, 0x00, -/* 000015F0 */ 0x61, 0x00, 0x6C, 0x00, 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, 0x44, 0x00, 0x45, 0x00, 0x43, 0x00, -/* 00001600 */ 0x49, 0x00, 0x4D, 0x00, 0x41, 0x00, 0x4C, 0x00, 0x00, 0x00, 0x50, 0x00, 0x45, 0x00, 0x52, 0x00, -/* 00001610 */ 0x43, 0x00, 0x45, 0x00, 0x4E, 0x00, 0x54, 0x00, 0x00, 0x00, 0x43, 0x00, 0x55, 0x00, 0x52, 0x00, -/* 00001620 */ 0x52, 0x00, 0x45, 0x00, 0x4E, 0x00, 0x43, 0x00, 0x59, 0x00, 0x00, 0x00, 0x53, 0x00, 0x59, 0x00, -/* 00001630 */ 0x4D, 0x00, 0x42, 0x00, 0x4F, 0x00, 0x4C, 0x00, 0x00, 0x00, 0x43, 0x00, 0x4F, 0x00, 0x44, 0x00, -/* 00001640 */ 0x45, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x41, 0x00, 0x4D, 0x00, 0x45, 0x00, 0x00, 0x00, 0x54, 0x00, -/* 00001650 */ 0x6F, 0x00, 0x4F, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x00, 0x00, -/* 00001660 */ 0x54, 0x00, 0x6F, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, -/* 00001670 */ 0x00, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, -/* 00001680 */ 0x72, 0x00, 0x00, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x67, 0x00, 0x69, 0x00, -/* 00001690 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x42, 0x00, 0x6F, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x65, 0x00, -/* 000016A0 */ 0x61, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x55, 0x00, 0x69, 0x00, 0x6E, 0x00, -/* 000016B0 */ 0x74, 0x00, 0x33, 0x00, 0x32, 0x00, 0x00, 0x00, 0x69, 0x00, 0x73, 0x00, 0x56, 0x00, 0x61, 0x00, -/* 000016C0 */ 0x6C, 0x00, 0x69, 0x00, 0x64, 0x00, 0x00, 0x00, 0x56, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, -/* 000016D0 */ 0x64, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x49, 0x00, -/* 000016E0 */ 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x43, 0x00, -/* 000016F0 */ 0x61, 0x00, 0x6E, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00001700 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, -/* 00001710 */ 0x6E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x76, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00001720 */ 0x75, 0x00, 0x65, 0x00, 0x00, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x43, 0x00, 0x61, 0x00, -/* 00001730 */ 0x6E, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x4C, 0x00, -/* 00001740 */ 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x77, 0x00, -/* 00001750 */ 0x72, 0x00, 0x69, 0x00, 0x74, 0x00, 0x61, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 00001760 */ 0x65, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x72, 0x00, 0x61, 0x00, 0x62, 0x00, -/* 00001770 */ 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x66, 0x00, 0x69, 0x00, -/* 00001780 */ 0x67, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 00001790 */ 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, -/* 000017A0 */ 0x00, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, -/* 000017B0 */ 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x44, 0x00, 0x61, 0x00, -/* 000017C0 */ 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, -/* 000017D0 */ 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x50, 0x00, 0x6C, 0x00, 0x75, 0x00, -/* 000017E0 */ 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x52, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, -/* 000017F0 */ 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x43, 0x00, 0x6F, 0x00, -/* 00001800 */ 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x2E, 0x00, 0x73, 0x00, -/* 00001810 */ 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, -/* 00001820 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, -/* 00001830 */ 0x66, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x4E, 0x00, -/* 00001840 */ 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, -/* 00001850 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, -/* 00001860 */ 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, -/* 00001870 */ 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x49, 0x00, -/* 00001880 */ 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, -/* 00001890 */ 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, -/* 000018A0 */ 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, -/* 000018B0 */ 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, -/* 000018C0 */ 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x73, 0x00, 0x75, 0x00, -/* 000018D0 */ 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, -/* 000018E0 */ 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, -/* 000018F0 */ 0x00, 0x00, 0x65, 0x00, 0x73, 0x00, 0x2D, 0x00, 0x45, 0x00, 0x53, 0x00, 0x00, 0x00, 0x74, 0x00, -/* 00001900 */ 0x72, 0x00, 0x61, 0x00, 0x64, 0x00, 0x00, 0x00, 0x74, 0x00, 0x72, 0x00, 0x61, 0x00, 0x64, 0x00, -/* 00001910 */ 0x6E, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x2D, 0x00, 0x4C, 0x00, 0x56, 0x00, -/* 00001920 */ 0x00, 0x00, 0x64, 0x00, 0x65, 0x00, 0x2D, 0x00, 0x44, 0x00, 0x45, 0x00, 0x00, 0x00, 0x70, 0x00, -/* 00001930 */ 0x68, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x62, 0x00, 0x6B, 0x00, 0x00, 0x00, 0x70, 0x00, -/* 00001940 */ 0x68, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x62, 0x00, 0x00, 0x00, 0x6A, 0x00, 0x61, 0x00, -/* 00001950 */ 0x2D, 0x00, 0x4A, 0x00, 0x50, 0x00, 0x00, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x68, 0x00, -/* 00001960 */ 0x61, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x72, 0x00, 0x61, 0x00, 0x64, 0x00, 0x73, 0x00, 0x74, 0x00, -/* 00001970 */ 0x72, 0x00, 0x00, 0x00, 0x7A, 0x00, 0x68, 0x00, 0x2D, 0x00, 0x54, 0x00, 0x57, 0x00, 0x00, 0x00, -/* 00001980 */ 0x70, 0x00, 0x68, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x74, 0x00, 0x69, 0x00, 0x63, 0x00, -/* 00001990 */ 0x00, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x00, 0x00, -/* 000019A0 */ 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x6B, 0x00, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 000019B0 */ 0x7A, 0x00, 0x68, 0x00, 0x2D, 0x00, 0x48, 0x00, 0x4B, 0x00, 0x00, 0x00, 0x7A, 0x00, 0x68, 0x00, -/* 000019C0 */ 0x2D, 0x00, 0x4D, 0x00, 0x4F, 0x00, 0x00, 0x00, 0x7A, 0x00, 0x68, 0x00, 0x2D, 0x00, 0x43, 0x00, -/* 000019D0 */ 0x4E, 0x00, 0x00, 0x00, 0x70, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x79, 0x00, 0x69, 0x00, 0x6E, 0x00, -/* 000019E0 */ 0x00, 0x00, 0x7A, 0x00, 0x68, 0x00, 0x2D, 0x00, 0x53, 0x00, 0x47, 0x00, 0x00, 0x00, 0x75, 0x00, -/* 000019F0 */ 0x73, 0x00, 0x65, 0x00, 0x43, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x73, 0x00, -/* 00001A00 */ 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x4C, 0x00, -/* 00001A10 */ 0x6F, 0x00, 0x6F, 0x00, 0x6B, 0x00, 0x75, 0x00, 0x70, 0x00, 0x43, 0x00, 0x61, 0x00, 0x63, 0x00, -/* 00001A20 */ 0x68, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00001A30 */ 0x65, 0x00, 0x42, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x46, 0x00, 0x69, 0x00, 0x74, 0x00, -/* 00001A40 */ 0x43, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x00, 0x00, 0x47, 0x00, 0x65, 0x00, -/* 00001A50 */ 0x74, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, -/* 00001A60 */ 0x49, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, -/* 00001A70 */ 0x7A, 0x00, 0x65, 0x00, 0x43, 0x00, 0x75, 0x00, 0x72, 0x00, 0x72, 0x00, 0x65, 0x00, 0x6E, 0x00, -/* 00001A80 */ 0x63, 0x00, 0x79, 0x00, 0x52, 0x00, 0x65, 0x00, 0x67, 0x00, 0x45, 0x00, 0x78, 0x00, 0x70, 0x00, -/* 00001A90 */ 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x64, 0x00, 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, -/* 00001AA0 */ 0x6C, 0x00, 0x74, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, -/* 00001AB0 */ 0x00, 0x00, 0x47, 0x00, 0x65, 0x00, 0x74, 0x00, 0x44, 0x00, 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, -/* 00001AC0 */ 0x75, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00001AD0 */ 0x65, 0x00, 0x00, 0x00, 0x42, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x41, 0x00, 0x76, 0x00, -/* 00001AE0 */ 0x61, 0x00, 0x69, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x4C, 0x00, -/* 00001AF0 */ 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x67, 0x00, 0x65, 0x00, -/* 00001B00 */ 0x74, 0x00, 0x4B, 0x00, 0x65, 0x00, 0x79, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, -/* 00001B10 */ 0x6C, 0x00, 0x65, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x61, 0x00, 0x00, 0x00, 0x4C, 0x00, -/* 00001B20 */ 0x6F, 0x00, 0x6F, 0x00, 0x6B, 0x00, 0x75, 0x00, 0x70, 0x00, 0x4D, 0x00, 0x61, 0x00, 0x74, 0x00, -/* 00001B30 */ 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x42, 0x00, 0x65, 0x00, 0x73, 0x00, -/* 00001B40 */ 0x74, 0x00, 0x46, 0x00, 0x69, 0x00, 0x74, 0x00, 0x4D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x63, 0x00, -/* 00001B50 */ 0x68, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x55, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x63, 0x00, -/* 00001B60 */ 0x6F, 0x00, 0x64, 0x00, 0x65, 0x00, 0x45, 0x00, 0x78, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6E, 0x00, -/* 00001B70 */ 0x73, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x56, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x75, 0x00, -/* 00001B80 */ 0x65, 0x00, 0x00, 0x00, 0x52, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, -/* 00001B90 */ 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 00001BA0 */ 0x47, 0x00, 0x65, 0x00, 0x74, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, -/* 00001BB0 */ 0x72, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, -/* 00001BC0 */ 0x43, 0x00, 0x55, 0x00, 0x52, 0x00, 0x52, 0x00, 0x45, 0x00, 0x4E, 0x00, 0x43, 0x00, 0x59, 0x00, -/* 00001BD0 */ 0x5F, 0x00, 0x43, 0x00, 0x4F, 0x00, 0x44, 0x00, 0x45, 0x00, 0x5F, 0x00, 0x52, 0x00, 0x45, 0x00, -/* 00001BE0 */ 0x00, 0x00, 0x70, 0x00, 0x61, 0x00, 0x72, 0x00, 0x73, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x61, 0x00, -/* 00001BF0 */ 0x6E, 0x00, 0x67, 0x00, 0x74, 0x00, 0x61, 0x00, 0x67, 0x00, 0x00, 0x00, 0x49, 0x00, 0x73, 0x00, -/* 00001C00 */ 0x57, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, -/* 00001C10 */ 0x65, 0x00, 0x64, 0x00, 0x43, 0x00, 0x75, 0x00, 0x72, 0x00, 0x72, 0x00, 0x65, 0x00, 0x6E, 0x00, -/* 00001C20 */ 0x63, 0x00, 0x79, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x64, 0x00, 0x65, 0x00, 0x00, 0x00, 0x49, 0x00, -/* 00001C30 */ 0x73, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x75, 0x00, 0x63, 0x00, 0x74, 0x00, 0x75, 0x00, -/* 00001C40 */ 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x79, 0x00, 0x56, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00001C50 */ 0x69, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x75, 0x00, 0x61, 0x00, -/* 00001C60 */ 0x67, 0x00, 0x65, 0x00, 0x54, 0x00, 0x61, 0x00, 0x67, 0x00, 0x00, 0x00, 0x43, 0x00, 0x61, 0x00, -/* 00001C70 */ 0x6E, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, -/* 00001C80 */ 0x7A, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, -/* 00001C90 */ 0x4C, 0x00, 0x69, 0x00, 0x73, 0x00, 0x74, 0x00, 0x00, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x6F, 0x00, -/* 00001CA0 */ 0x6B, 0x00, 0x75, 0x00, 0x70, 0x00, 0x53, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, -/* 00001CB0 */ 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, -/* 00001CC0 */ 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x42, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, -/* 00001CD0 */ 0x46, 0x00, 0x69, 0x00, 0x74, 0x00, 0x53, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, -/* 00001CE0 */ 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, -/* 00001CF0 */ 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x53, 0x00, 0x65, 0x00, 0x74, 0x00, 0x4E, 0x00, -/* 00001D00 */ 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, -/* 00001D10 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x44, 0x00, 0x69, 0x00, 0x67, 0x00, 0x69, 0x00, 0x74, 0x00, -/* 00001D20 */ 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x00, 0x00, -/* 00001D30 */ 0x53, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, -/* 00001D40 */ 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, -/* 00001D50 */ 0x00, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x53, 0x00, 0x74, 0x00, 0x61, 0x00, -/* 00001D60 */ 0x74, 0x00, 0x69, 0x00, 0x63, 0x00, 0x4D, 0x00, 0x65, 0x00, 0x74, 0x00, 0x68, 0x00, 0x6F, 0x00, -/* 00001D70 */ 0x64, 0x00, 0x54, 0x00, 0x68, 0x00, 0x69, 0x00, 0x73, 0x00, 0x41, 0x00, 0x72, 0x00, 0x67, 0x00, -/* 00001D80 */ 0x00, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, -/* 00001D90 */ 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, -/* 00001DA0 */ 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x5F, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x6F, 0x00, -/* 00001DB0 */ 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x75, 0x00, 0x63, 0x00, 0x74, 0x00, 0x61, 0x00, -/* 00001DC0 */ 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x43, 0x00, -/* 00001DD0 */ 0x61, 0x00, 0x6E, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00001DE0 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x5F, 0x00, -/* 00001DF0 */ 0x75, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, -/* 00001E00 */ 0x75, 0x00, 0x63, 0x00, 0x74, 0x00, 0x61, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 00001E10 */ 0x63, 0x00, 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x52, 0x00, 0x65, 0x00, -/* 00001E20 */ 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4F, 0x00, 0x70, 0x00, -/* 00001E30 */ 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x00, 0x00, 0x67, 0x00, 0x65, 0x00, -/* 00001E40 */ 0x74, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x63, 0x00, -/* 00001E50 */ 0x61, 0x00, 0x6C, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, -/* 00001E60 */ 0x73, 0x00, 0x5F, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x49, 0x00, -/* 00001E70 */ 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x7A, 0x00, -/* 00001E80 */ 0x65, 0x00, 0x4C, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x54, 0x00, 0x61, 0x00, 0x67, 0x00, -/* 00001E90 */ 0x52, 0x00, 0x45, 0x00, 0x73, 0x00, 0x00, 0x00, 0x43, 0x00, 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, -/* 00001EA0 */ 0x74, 0x00, 0x65, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, -/* 00001EB0 */ 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, -/* 00001EC0 */ 0x00, 0x00, 0x49, 0x00, 0x73, 0x00, 0x57, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x46, 0x00, -/* 00001ED0 */ 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x61, 0x00, 0x6E, 0x00, -/* 00001EE0 */ 0x67, 0x00, 0x75, 0x00, 0x61, 0x00, 0x67, 0x00, 0x65, 0x00, 0x54, 0x00, 0x61, 0x00, 0x67, 0x00, -/* 00001EF0 */ 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x70, 0x00, -/* 00001F00 */ 0x70, 0x00, 0x65, 0x00, 0x64, 0x00, 0x44, 0x00, 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, -/* 00001F10 */ 0x6C, 0x00, 0x74, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, -/* 00001F20 */ 0x00, 0x00, 0x4C, 0x00, 0x41, 0x00, 0x4E, 0x00, 0x47, 0x00, 0x5F, 0x00, 0x54, 0x00, 0x41, 0x00, -/* 00001F30 */ 0x47, 0x00, 0x5F, 0x00, 0x42, 0x00, 0x41, 0x00, 0x53, 0x00, 0x45, 0x00, 0x5F, 0x00, 0x52, 0x00, -/* 00001F40 */ 0x45, 0x00, 0x00, 0x00, 0x4C, 0x00, 0x41, 0x00, 0x4E, 0x00, 0x47, 0x00, 0x5F, 0x00, 0x54, 0x00, -/* 00001F50 */ 0x41, 0x00, 0x47, 0x00, 0x5F, 0x00, 0x45, 0x00, 0x58, 0x00, 0x54, 0x00, 0x5F, 0x00, 0x52, 0x00, -/* 00001F60 */ 0x45, 0x00, 0x00, 0x00, 0x4C, 0x00, 0x41, 0x00, 0x4E, 0x00, 0x47, 0x00, 0x5F, 0x00, 0x54, 0x00, -/* 00001F70 */ 0x41, 0x00, 0x47, 0x00, 0x5F, 0x00, 0x52, 0x00, 0x45, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, -/* 00001F80 */ 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x5F, 0x00, 0x73, 0x00, -/* 00001F90 */ 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, -/* 00001FA0 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, -/* 00001FB0 */ 0x66, 0x00, 0x5F, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x63, 0x00, -/* 00001FC0 */ 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x5F, 0x00, -/* 00001FD0 */ 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, -/* 00001FE0 */ 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, -/* 00001FF0 */ 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, -/* 00002000 */ 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x5F, 0x00, -/* 00002010 */ 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, -/* 00002020 */ 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, -/* 00002030 */ 0x4F, 0x00, 0x66, 0x00, 0x5F, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 00002040 */ 0x6E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, -/* 00002050 */ 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x5F, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, -/* 00002060 */ 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, -/* 00002070 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, -/* 00002080 */ 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, -/* 00002090 */ 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x5F, 0x00, 0x73, 0x00, -/* 000020A0 */ 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, -/* 000020B0 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, -/* 000020C0 */ 0x66, 0x00, 0x5F, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x64, 0x00, -/* 000020D0 */ 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, -/* 000020E0 */ 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x5F, 0x00, 0x73, 0x00, 0x75, 0x00, -/* 000020F0 */ 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, -/* 00002100 */ 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, -/* 00002110 */ 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x70, 0x00, 0x70, 0x00, 0x65, 0x00, -/* 00002120 */ 0x64, 0x00, 0x44, 0x00, 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x74, 0x00, -/* 00002130 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6E, 0x00, -/* 00002140 */ 0x00, 0x00, 0x5F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 00002150 */ 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x00, 0x00, 0x73, 0x00, 0x65, 0x00, 0x74, 0x00, 0x00, 0x00, -/* 00002160 */ 0x5F, 0x00, 0x2E, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x55, 0x00, 0x70, 0x00, 0x70, 0x00, 0x65, 0x00, -/* 00002170 */ 0x72, 0x00, 0x43, 0x00, 0x61, 0x00, 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, -/* 00002180 */ 0x74, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x65, 0x00, 0x72, 0x00, 0x43, 0x00, -/* 00002190 */ 0x61, 0x00, 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x72, 0x00, 0x65, 0x00, -/* 000021A0 */ 0x70, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x63, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, -/* 000021B0 */ 0x73, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x74, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, -/* 000021C0 */ 0x73, 0x00, 0x75, 0x00, 0x62, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, -/* 000021D0 */ 0x67, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, -/* 000021E0 */ 0x6E, 0x00, 0x67, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x65, 0x00, 0x78, 0x00, 0x4F, 0x00, -/* 000021F0 */ 0x66, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x63, 0x00, -/* 00002200 */ 0x68, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x72, 0x00, 0x65, 0x00, 0x70, 0x00, 0x65, 0x00, -/* 00002210 */ 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, -/* 00002220 */ 0x45, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x70, 0x00, -/* 00002230 */ 0x75, 0x00, 0x73, 0x00, 0x68, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x6A, 0x00, 0x6F, 0x00, -/* 00002240 */ 0x69, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x61, 0x00, 0x72, 0x00, 0x72, 0x00, -/* 00002250 */ 0x61, 0x00, 0x79, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x65, 0x00, 0x78, 0x00, 0x4F, 0x00, -/* 00002260 */ 0x66, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x70, 0x00, 0x00, 0x00, -/* 00002270 */ 0x5F, 0x00, 0x2E, 0x00, 0x72, 0x00, 0x65, 0x00, 0x64, 0x00, 0x75, 0x00, 0x63, 0x00, 0x65, 0x00, -/* 00002280 */ 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x63, 0x00, 0x65, 0x00, -/* 00002290 */ 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x61, 0x00, -/* 000022A0 */ 0x74, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x69, 0x00, 0x6C, 0x00, 0x74, 0x00, -/* 000022B0 */ 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x69, 0x00, -/* 000022C0 */ 0x71, 0x00, 0x75, 0x00, 0x65, 0x00, 0x00, 0x00, 0x61, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, -/* 000022D0 */ 0x79, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x68, 0x00, 0x61, 0x00, 0x73, 0x00, 0x4F, 0x00, -/* 000022E0 */ 0x77, 0x00, 0x6E, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, -/* 000022F0 */ 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x64, 0x00, 0x65, 0x00, 0x66, 0x00, -/* 00002300 */ 0x69, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x65, 0x00, -/* 00002310 */ 0x72, 0x00, 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x63, 0x00, 0x72, 0x00, -/* 00002320 */ 0x65, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x73, 0x00, -/* 00002330 */ 0x65, 0x00, 0x74, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, -/* 00002340 */ 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, -/* 00002350 */ 0x66, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, -/* 00002360 */ 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 00002370 */ 0x5F, 0x00, 0x2E, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x00, 0x00, 0x5F, 0x00, -/* 00002380 */ 0x2E, 0x00, 0x61, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x79, 0x00, 0x00, 0x00, 0x72, 0x00, -/* 00002390 */ 0x61, 0x00, 0x69, 0x00, 0x73, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6E, 0x00, -/* 000023A0 */ 0x67, 0x00, 0x65, 0x00, 0x45, 0x00, 0x72, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, -/* 000023B0 */ 0x72, 0x00, 0x61, 0x00, 0x69, 0x00, 0x73, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x61, 0x00, 0x73, 0x00, -/* 000023C0 */ 0x73, 0x00, 0x65, 0x00, 0x72, 0x00, 0x74, 0x00, 0x00, 0x00, 0x41, 0x00, 0x73, 0x00, 0x73, 0x00, -/* 000023D0 */ 0x65, 0x00, 0x72, 0x00, 0x74, 0x00, 0x20, 0x00, 0x66, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6C, 0x00, -/* 000023E0 */ 0x65, 0x00, 0x64, 0x00, 0x00, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, -/* 000023F0 */ 0x67, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x63, 0x00, -/* 00002400 */ 0x6F, 0x00, 0x00, 0x00, 0x6B, 0x00, 0x66, 0x00, 0x00, 0x00, 0x6B, 0x00, 0x6E, 0x00, 0x00, 0x00, -/* 00002410 */ 0x63, 0x00, 0x61, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x00, 0x00, 0x68, 0x00, 0x63, 0x00, -/* 00002420 */ 0x00, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x64, 0x00, 0x65, 0x00, -/* 00002430 */ 0x45, 0x00, 0x78, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x69, 0x00, 0x6F, 0x00, -/* 00002440 */ 0x6E, 0x00, 0x00, 0x00, 0x65, 0x00, 0x78, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x73, 0x00, -/* 00002450 */ 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, 0x66, 0x00, 0x6F, 0x00, -/* 00002460 */ 0x75, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00002470 */ 0x65, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x74, 0x00, -/* 00002480 */ 0x00, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, -/* 00002490 */ 0x65, 0x00, 0x64, 0x00, 0x45, 0x00, 0x78, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x73, 0x00, -/* 000024A0 */ 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x6F, 0x00, 0x6B, 0x00, -/* 000024B0 */ 0x75, 0x00, 0x70, 0x00, 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, 0x61, 0x00, 0x4C, 0x00, -/* 000024C0 */ 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x2D, 0x00, 0x75, 0x00, -/* 000024D0 */ 0x00, 0x00, 0x2D, 0x00, 0x78, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x6F, 0x00, -/* 000024E0 */ 0x6B, 0x00, 0x75, 0x00, 0x70, 0x00, 0x4D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x63, 0x00, 0x68, 0x00, -/* 000024F0 */ 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x74, 0x00, 0x72, 0x00, 0x75, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 00002500 */ 0x62, 0x00, 0x6F, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x00, 0x00, -/* 00002510 */ 0x6E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x5B, 0x00, -/* 00002520 */ 0x27, 0x00, 0x00, 0x00, 0x27, 0x00, 0x5D, 0x00, 0x00, 0x00, 0x27, 0x00, 0x2C, 0x00, 0x20, 0x00, -/* 00002530 */ 0x27, 0x00, 0x00, 0x00, 0x5B, 0x00, 0x00, 0x00, 0x20, 0x00, 0x2D, 0x00, 0x20, 0x00, 0x00, 0x00, -/* 00002540 */ 0x5D, 0x00, 0x00, 0x00, 0x5E, 0x00, 0x5B, 0x00, 0x41, 0x00, 0x2D, 0x00, 0x5A, 0x00, 0x5D, 0x00, -/* 00002550 */ 0x7B, 0x00, 0x33, 0x00, 0x7D, 0x00, 0x24, 0x00, 0x00, 0x00, 0x70, 0x00, 0x61, 0x00, 0x72, 0x00, -/* 00002560 */ 0x73, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x74, 0x00, -/* 00002570 */ 0x61, 0x00, 0x67, 0x00, 0x43, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 00002580 */ 0x5B, 0x00, 0x41, 0x00, 0x2D, 0x00, 0x5A, 0x00, 0x5D, 0x00, 0x00, 0x00, 0x5B, 0x00, 0x30, 0x00, -/* 00002590 */ 0x2D, 0x00, 0x39, 0x00, 0x5D, 0x00, 0x00, 0x00, 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x00, 0x00, -/* 000025A0 */ 0x7C, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x28, 0x00, 0x3F, 0x00, -/* 000025B0 */ 0x3A, 0x00, 0x61, 0x00, 0x72, 0x00, 0x74, 0x00, 0x2D, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x6A, 0x00, -/* 000025C0 */ 0x62, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x7C, 0x00, 0x63, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x2D, 0x00, -/* 000025D0 */ 0x67, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x7C, 0x00, -/* 000025E0 */ 0x6E, 0x00, 0x6F, 0x00, 0x2D, 0x00, 0x62, 0x00, 0x6F, 0x00, 0x6B, 0x00, 0x7C, 0x00, 0x6E, 0x00, -/* 000025F0 */ 0x6F, 0x00, 0x2D, 0x00, 0x6E, 0x00, 0x79, 0x00, 0x6E, 0x00, 0x7C, 0x00, 0x7A, 0x00, 0x68, 0x00, -/* 00002600 */ 0x2D, 0x00, 0x67, 0x00, 0x75, 0x00, 0x6F, 0x00, 0x79, 0x00, 0x75, 0x00, 0x7C, 0x00, 0x7A, 0x00, -/* 00002610 */ 0x68, 0x00, 0x2D, 0x00, 0x68, 0x00, 0x61, 0x00, 0x6B, 0x00, 0x6B, 0x00, 0x61, 0x00, 0x7C, 0x00, -/* 00002620 */ 0x7A, 0x00, 0x68, 0x00, 0x2D, 0x00, 0x6D, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x7C, 0x00, 0x7A, 0x00, -/* 00002630 */ 0x68, 0x00, 0x2D, 0x00, 0x6D, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x2D, 0x00, 0x6E, 0x00, 0x61, 0x00, -/* 00002640 */ 0x6E, 0x00, 0x7C, 0x00, 0x7A, 0x00, 0x68, 0x00, 0x2D, 0x00, 0x78, 0x00, 0x69, 0x00, 0x61, 0x00, -/* 00002650 */ 0x6E, 0x00, 0x67, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x62, 0x00, -/* 00002660 */ 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x2D, 0x00, 0x47, 0x00, 0x42, 0x00, -/* 00002670 */ 0x2D, 0x00, 0x6F, 0x00, 0x65, 0x00, 0x64, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x61, 0x00, -/* 00002680 */ 0x6D, 0x00, 0x69, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x62, 0x00, 0x6E, 0x00, 0x6E, 0x00, -/* 00002690 */ 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x64, 0x00, 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, -/* 000026A0 */ 0x6C, 0x00, 0x74, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x6F, 0x00, -/* 000026B0 */ 0x63, 0x00, 0x68, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, -/* 000026C0 */ 0x68, 0x00, 0x61, 0x00, 0x6B, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x6B, 0x00, 0x6C, 0x00, -/* 000026D0 */ 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, -/* 000026E0 */ 0x6C, 0x00, 0x75, 0x00, 0x78, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x6D, 0x00, 0x69, 0x00, -/* 000026F0 */ 0x6E, 0x00, 0x67, 0x00, 0x6F, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x6E, 0x00, -/* 00002700 */ 0x61, 0x00, 0x76, 0x00, 0x61, 0x00, 0x6A, 0x00, 0x6F, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, -/* 00002710 */ 0x70, 0x00, 0x77, 0x00, 0x6E, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x74, 0x00, 0x61, 0x00, -/* 00002720 */ 0x6F, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x74, 0x00, 0x61, 0x00, 0x79, 0x00, 0x7C, 0x00, -/* 00002730 */ 0x69, 0x00, 0x2D, 0x00, 0x74, 0x00, 0x73, 0x00, 0x75, 0x00, 0x7C, 0x00, 0x73, 0x00, 0x67, 0x00, -/* 00002740 */ 0x6E, 0x00, 0x2D, 0x00, 0x42, 0x00, 0x45, 0x00, 0x2D, 0x00, 0x46, 0x00, 0x52, 0x00, 0x7C, 0x00, -/* 00002750 */ 0x73, 0x00, 0x67, 0x00, 0x6E, 0x00, 0x2D, 0x00, 0x42, 0x00, 0x45, 0x00, 0x2D, 0x00, 0x4E, 0x00, -/* 00002760 */ 0x4C, 0x00, 0x7C, 0x00, 0x73, 0x00, 0x67, 0x00, 0x6E, 0x00, 0x2D, 0x00, 0x43, 0x00, 0x48, 0x00, -/* 00002770 */ 0x2D, 0x00, 0x44, 0x00, 0x45, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x5C, 0x00, -/* 00002780 */ 0x62, 0x00, 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x00, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, -/* 00002790 */ 0x00, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x78, 0x00, 0x28, 0x00, -/* 000027A0 */ 0x3F, 0x00, 0x3A, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x31, 0x00, 0x2C, 0x00, 0x38, 0x00, -/* 000027B0 */ 0x7D, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x29, 0x00, 0x2B, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, -/* 000027C0 */ 0x00, 0x00, 0x7C, 0x00, 0x5B, 0x00, 0x41, 0x00, 0x2D, 0x00, 0x57, 0x00, 0x59, 0x00, 0x2D, 0x00, -/* 000027D0 */ 0x5A, 0x00, 0x5D, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x28, 0x00, 0x3F, 0x00, -/* 000027E0 */ 0x3A, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x32, 0x00, 0x2C, 0x00, 0x38, 0x00, 0x7D, 0x00, -/* 000027F0 */ 0x29, 0x00, 0x2B, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x35, 0x00, -/* 00002800 */ 0x2C, 0x00, 0x38, 0x00, 0x7D, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x33, 0x00, 0x7D, 0x00, -/* 00002810 */ 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x32, 0x00, 0x7D, 0x00, 0x7C, 0x00, -/* 00002820 */ 0x00, 0x00, 0x7B, 0x00, 0x34, 0x00, 0x7D, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, -/* 00002830 */ 0x7B, 0x00, 0x33, 0x00, 0x7D, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, -/* 00002840 */ 0x2D, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x33, 0x00, 0x7D, 0x00, 0x29, 0x00, 0x7B, 0x00, 0x30, 0x00, -/* 00002850 */ 0x2C, 0x00, 0x32, 0x00, 0x7D, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x7B, 0x00, -/* 00002860 */ 0x32, 0x00, 0x2C, 0x00, 0x33, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x28, 0x00, -/* 00002870 */ 0x3F, 0x00, 0x3A, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x7B, 0x00, -/* 00002880 */ 0x34, 0x00, 0x2C, 0x00, 0x38, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x28, 0x00, -/* 00002890 */ 0x00, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x2D, 0x00, 0x28, 0x00, -/* 000028A0 */ 0x00, 0x00, 0x29, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x5C, 0x00, -/* 000028B0 */ 0x62, 0x00, 0x28, 0x00, 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x29, 0x00, -/* 000028C0 */ 0x2A, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x5C, 0x00, -/* 000028D0 */ 0x62, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x5E, 0x00, 0x00, 0x00, 0x24, 0x00, -/* 000028E0 */ 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x6E, 0x00, -/* 000028F0 */ 0x67, 0x00, 0x75, 0x00, 0x61, 0x00, 0x67, 0x00, 0x65, 0x00, 0x00, 0x00, 0x73, 0x00, 0x63, 0x00, -/* 00002900 */ 0x72, 0x00, 0x69, 0x00, 0x70, 0x00, 0x74, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, 0x67, 0x00, -/* 00002910 */ 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x76, 0x00, 0x61, 0x00, 0x72, 0x00, 0x69, 0x00, -/* 00002920 */ 0x61, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x65, 0x00, 0x78, 0x00, 0x74, 0x00, -/* 00002930 */ 0x65, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x00, 0x00, -/* 00002940 */ 0x75, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x65, 0x00, 0x66, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x65, 0x00, -/* 00002950 */ 0x64, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, -/* 00002960 */ 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 00002970 */ 0x69, 0x00, 0x73, 0x00, 0x41, 0x00, 0x76, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6C, 0x00, 0x61, 0x00, -/* 00002980 */ 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00002990 */ 0x65, 0x00, 0x00, 0x00, 0x73, 0x00, 0x75, 0x00, 0x62, 0x00, 0x73, 0x00, 0x65, 0x00, 0x74, 0x00, -/* 000029A0 */ 0x00, 0x00, 0x6D, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x75, 0x00, 0x6D, 0x00, -/* 000029B0 */ 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x65, 0x00, 0x67, 0x00, 0x65, 0x00, 0x72, 0x00, 0x44, 0x00, -/* 000029C0 */ 0x69, 0x00, 0x67, 0x00, 0x69, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x69, 0x00, -/* 000029D0 */ 0x6E, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x46, 0x00, 0x72, 0x00, 0x61, 0x00, -/* 000029E0 */ 0x63, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x44, 0x00, 0x69, 0x00, 0x67, 0x00, -/* 000029F0 */ 0x69, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x78, 0x00, 0x69, 0x00, -/* 00002A00 */ 0x6D, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x46, 0x00, 0x72, 0x00, 0x61, 0x00, 0x63, 0x00, 0x74, 0x00, -/* 00002A10 */ 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x44, 0x00, 0x69, 0x00, 0x67, 0x00, 0x69, 0x00, 0x74, 0x00, -/* 00002A20 */ 0x73, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x75, 0x00, -/* 00002A30 */ 0x6D, 0x00, 0x53, 0x00, 0x69, 0x00, 0x67, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x66, 0x00, 0x69, 0x00, -/* 00002A40 */ 0x63, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x44, 0x00, 0x69, 0x00, 0x67, 0x00, 0x69, 0x00, -/* 00002A50 */ 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x78, 0x00, 0x69, 0x00, 0x6D, 0x00, -/* 00002A60 */ 0x75, 0x00, 0x6D, 0x00, 0x53, 0x00, 0x69, 0x00, 0x67, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x66, 0x00, -/* 00002A70 */ 0x69, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x44, 0x00, 0x69, 0x00, 0x67, 0x00, -/* 00002A80 */ 0x69, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x62, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, -/* 00002A90 */ 0x20, 0x00, 0x66, 0x00, 0x69, 0x00, 0x74, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, -/* 00002AA0 */ 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x4D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x63, 0x00, 0x68, 0x00, -/* 00002AB0 */ 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x74, 0x00, -/* 00002AC0 */ 0x68, 0x00, 0x00, 0x00, 0x68, 0x00, 0x69, 0x00, 0x64, 0x00, 0x64, 0x00, 0x65, 0x00, 0x6E, 0x00, -/* 00002AD0 */ 0x4F, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x00, 0x00, 0x66, 0x00, -/* 00002AE0 */ 0x75, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, -/* 00002AF0 */ 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x64, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x69, 0x00, -/* 00002B00 */ 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x43, 0x00, -/* 00002B10 */ 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, -/* 00002B20 */ 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x43, 0x00, 0x6F, 0x00, -/* 00002B30 */ 0x6D, 0x00, 0x70, 0x00, 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x61, 0x00, -/* 00002B40 */ 0x74, 0x00, 0x65, 0x00, 0x43, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 00002B50 */ 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, 0x53, 0x00, -/* 00002B60 */ 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, -/* 00002B70 */ 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, -/* 00002B80 */ 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x43, 0x00, 0x6F, 0x00, -/* 00002B90 */ 0x6D, 0x00, 0x70, 0x00, 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, -/* 00002BA0 */ 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, -/* 00002BB0 */ 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, -/* 00002BC0 */ 0x2E, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, -/* 00002BD0 */ 0x72, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, -/* 00002BE0 */ 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00, -/* 00002BF0 */ 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, 0x00, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, -/* 00002C00 */ 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, -/* 00002C10 */ 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x75, 0x00, 0x63, 0x00, 0x74, 0x00, 0x6F, 0x00, -/* 00002C20 */ 0x72, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, -/* 00002C30 */ 0x65, 0x00, 0x64, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, -/* 00002C40 */ 0x73, 0x00, 0x00, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x20, 0x00, 0x63, 0x00, 0x6F, 0x00, -/* 00002C50 */ 0x6D, 0x00, 0x70, 0x00, 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, -/* 00002C60 */ 0x6D, 0x00, 0x70, 0x00, 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, 0x00, 0x00, 0x75, 0x00, 0x73, 0x00, -/* 00002C70 */ 0x61, 0x00, 0x67, 0x00, 0x65, 0x00, 0x00, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, -/* 00002C80 */ 0x00, 0x00, 0x73, 0x00, 0x65, 0x00, 0x61, 0x00, 0x72, 0x00, 0x63, 0x00, 0x68, 0x00, 0x00, 0x00, -/* 00002C90 */ 0x6E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x72, 0x00, 0x69, 0x00, 0x63, 0x00, 0x00, 0x00, -/* 00002CA0 */ 0x63, 0x00, 0x61, 0x00, 0x73, 0x00, 0x65, 0x00, 0x46, 0x00, 0x69, 0x00, 0x72, 0x00, 0x73, 0x00, -/* 00002CB0 */ 0x74, 0x00, 0x00, 0x00, 0x64, 0x00, 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, -/* 00002CC0 */ 0x74, 0x00, 0x00, 0x00, 0x73, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x69, 0x00, 0x74, 0x00, -/* 00002CD0 */ 0x69, 0x00, 0x76, 0x00, 0x69, 0x00, 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x69, 0x00, 0x67, 0x00, -/* 00002CE0 */ 0x6E, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x65, 0x00, 0x50, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x63, 0x00, -/* 00002CF0 */ 0x74, 0x00, 0x75, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, -/* 00002D00 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, -/* 00002D10 */ 0x63, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, -/* 00002D20 */ 0x6E, 0x00, 0x00, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, -/* 00002D30 */ 0x6C, 0x00, 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x64, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, -/* 00002D40 */ 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x62, 0x00, 0x6F, 0x00, -/* 00002D50 */ 0x75, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00, 0x61, 0x00, -/* 00002D60 */ 0x72, 0x00, 0x65, 0x00, 0x00, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, -/* 00002D70 */ 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, -/* 00002D80 */ 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x63, 0x00, 0x6F, 0x00, -/* 00002D90 */ 0x6D, 0x00, 0x70, 0x00, 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, 0x00, 0x00, 0x43, 0x00, 0x6F, 0x00, -/* 00002DA0 */ 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x2E, 0x00, 0x70, 0x00, -/* 00002DB0 */ 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, -/* 00002DC0 */ 0x2E, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, -/* 00002DD0 */ 0x64, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, -/* 00002DE0 */ 0x00, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00, -/* 00002DF0 */ 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, -/* 00002E00 */ 0x69, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x4E, 0x00, 0x75, 0x00, -/* 00002E10 */ 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, -/* 00002E20 */ 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, -/* 00002E30 */ 0x72, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, -/* 00002E40 */ 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, -/* 00002E50 */ 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, -/* 00002E60 */ 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, -/* 00002E70 */ 0x67, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x4E, 0x00, -/* 00002E80 */ 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, -/* 00002E90 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, -/* 00002EA0 */ 0x2E, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, -/* 00002EB0 */ 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, -/* 00002EC0 */ 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, -/* 00002ED0 */ 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x49, 0x00, -/* 00002EE0 */ 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, -/* 00002EF0 */ 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, -/* 00002F00 */ 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, -/* 00002F10 */ 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, -/* 00002F20 */ 0x74, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x50, 0x00, 0x61, 0x00, 0x72, 0x00, 0x74, 0x00, 0x73, 0x00, -/* 00002F30 */ 0x00, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x20, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, -/* 00002F40 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, -/* 00002F50 */ 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, -/* 00002F60 */ 0x74, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x50, 0x00, 0x61, 0x00, 0x72, 0x00, 0x74, 0x00, 0x73, 0x00, -/* 00002F70 */ 0x00, 0x00, 0x73, 0x00, 0x74, 0x00, 0x79, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x64, 0x00, -/* 00002F80 */ 0x65, 0x00, 0x63, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x70, 0x00, -/* 00002F90 */ 0x65, 0x00, 0x72, 0x00, 0x63, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x00, 0x00, 0x63, 0x00, -/* 00002FA0 */ 0x75, 0x00, 0x72, 0x00, 0x72, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x79, 0x00, 0x00, 0x00, -/* 00002FB0 */ 0x63, 0x00, 0x75, 0x00, 0x72, 0x00, 0x72, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x79, 0x00, -/* 00002FC0 */ 0x44, 0x00, 0x69, 0x00, 0x73, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x79, 0x00, 0x00, 0x00, -/* 00002FD0 */ 0x63, 0x00, 0x6F, 0x00, 0x64, 0x00, 0x65, 0x00, 0x00, 0x00, 0x73, 0x00, 0x79, 0x00, 0x6D, 0x00, -/* 00002FE0 */ 0x62, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x75, 0x00, 0x73, 0x00, 0x65, 0x00, 0x47, 0x00, -/* 00002FF0 */ 0x72, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x70, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, -/* 00003000 */ 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, -/* 00003010 */ 0x7A, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, -/* 00003020 */ 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, -/* 00003030 */ 0x62, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, -/* 00003040 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, -/* 00003050 */ 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, -/* 00003060 */ 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, -/* 00003070 */ 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, -/* 00003080 */ 0x74, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, -/* 00003090 */ 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, -/* 000030A0 */ 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, -/* 000030B0 */ 0x2E, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x54, 0x00, -/* 000030C0 */ 0x6F, 0x00, 0x50, 0x00, 0x61, 0x00, 0x72, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x4E, 0x00, -/* 000030D0 */ 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, -/* 000030E0 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, -/* 000030F0 */ 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x72, 0x00, 0x65, 0x00, -/* 00003100 */ 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4F, 0x00, 0x70, 0x00, -/* 00003110 */ 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x75, 0x00, -/* 00003120 */ 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x53, 0x00, -/* 00003130 */ 0x79, 0x00, 0x73, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6D, 0x00, 0x00, 0x00, 0x67, 0x00, 0x65, 0x00, -/* 00003140 */ 0x74, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, -/* 00003150 */ 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, -/* 00003160 */ 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, -/* 00003170 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, -/* 00003180 */ 0x6E, 0x00, 0x67, 0x00, 0x49, 0x00, 0x6D, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6D, 0x00, -/* 00003190 */ 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, -/* 000031A0 */ 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, -/* 000031B0 */ 0x65, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x65, 0x00, -/* 000031C0 */ 0x6E, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x50, 0x00, -/* 000031D0 */ 0x61, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x46, 0x00, 0x6F, 0x00, -/* 000031E0 */ 0x72, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, -/* 000031F0 */ 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00003200 */ 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, -/* 00003210 */ 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, -/* 00003220 */ 0x74, 0x00, 0x00, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, -/* 00003230 */ 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, -/* 00003240 */ 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x00, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, -/* 00003250 */ 0x61, 0x00, 0x74, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, -/* 00003260 */ 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, -/* 00003270 */ 0x74, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, -/* 00003280 */ 0x65, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x50, 0x00, 0x61, 0x00, 0x72, 0x00, 0x74, 0x00, 0x73, 0x00, -/* 00003290 */ 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x49, 0x00, -/* 000032A0 */ 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, 0x54, 0x00, -/* 000032B0 */ 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x53, 0x00, -/* 000032C0 */ 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x44, 0x00, 0x65, 0x00, 0x66, 0x00, -/* 000032D0 */ 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x43, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, -/* 000032E0 */ 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x75, 0x00, 0x72, 0x00, 0x65, 0x00, -/* 000032F0 */ 0x4D, 0x00, 0x65, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x65, 0x00, -/* 00003300 */ 0x6E, 0x00, 0x73, 0x00, 0x75, 0x00, 0x72, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, -/* 00003310 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, -/* 00003320 */ 0x00, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x72, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x00, 0x00, -/* 00003330 */ 0x73, 0x00, 0x68, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, -/* 00003340 */ 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, 0x32, 0x00, 0x2D, 0x00, 0x64, 0x00, 0x69, 0x00, 0x67, 0x00, -/* 00003350 */ 0x69, 0x00, 0x74, 0x00, 0x00, 0x00, 0x77, 0x00, 0x65, 0x00, 0x65, 0x00, 0x6B, 0x00, 0x64, 0x00, -/* 00003360 */ 0x61, 0x00, 0x79, 0x00, 0x00, 0x00, 0x65, 0x00, 0x72, 0x00, 0x61, 0x00, 0x00, 0x00, 0x79, 0x00, -/* 00003370 */ 0x65, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x74, 0x00, -/* 00003380 */ 0x68, 0x00, 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, 0x79, 0x00, 0x00, 0x00, 0x68, 0x00, 0x6F, 0x00, -/* 00003390 */ 0x75, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x74, 0x00, -/* 000033A0 */ 0x65, 0x00, 0x00, 0x00, 0x73, 0x00, 0x65, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x64, 0x00, -/* 000033B0 */ 0x00, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x5A, 0x00, 0x6F, 0x00, 0x6E, 0x00, -/* 000033C0 */ 0x65, 0x00, 0x4E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x74, 0x00, 0x6F, 0x00, -/* 000033D0 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, -/* 000033E0 */ 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x4C, 0x00, -/* 000033F0 */ 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, -/* 00003400 */ 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, -/* 00003410 */ 0x74, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, -/* 00003420 */ 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, -/* 00003430 */ 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x2E, 0x00, -/* 00003440 */ 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, -/* 00003450 */ 0x65, 0x00, 0x2E, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, -/* 00003460 */ 0x6C, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, -/* 00003470 */ 0x00, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x79, 0x00, 0x00, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x6C, 0x00, -/* 00003480 */ 0x00, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, -/* 00003490 */ 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, -/* 000034A0 */ 0x74, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, -/* 000034B0 */ 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, -/* 000034C0 */ 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 000034D0 */ 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, -/* 000034E0 */ 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x74, 0x00, -/* 000034F0 */ 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x54, 0x00, -/* 00003500 */ 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, -/* 00003510 */ 0x67, 0x00, 0x00, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x49, 0x00, -/* 00003520 */ 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, -/* 00003530 */ 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, -/* 00003540 */ 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, -/* 00003550 */ 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, -/* 00003560 */ 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, -/* 00003570 */ 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, -/* 00003580 */ 0x2E, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, -/* 00003590 */ 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, -/* 000035A0 */ 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, -/* 000035B0 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, -/* 000035C0 */ 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x6F, 0x00, -/* 000035D0 */ 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x50, 0x00, 0x61, 0x00, -/* 000035E0 */ 0x72, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x73, 0x00, 0x79, 0x00, 0x6D, 0x00, 0x62, 0x00, -/* 000035F0 */ 0x6F, 0x00, 0x6C, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, -/* 00003600 */ 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, -/* 00003610 */ 0x6F, 0x00, 0x6E, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x53, 0x00, 0x79, 0x00, 0x6D, 0x00, -/* 00003620 */ 0x62, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x73, 0x00, 0x79, 0x00, 0x6D, 0x00, 0x62, 0x00, -/* 00003630 */ 0x6F, 0x00, 0x6C, 0x00, 0x4C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x74, 0x00, 0x68, 0x00, -/* 00003640 */ 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, -/* 00003650 */ 0x6E, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, -/* 00003660 */ 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x53, 0x00, 0x79, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x6F, 0x00, -/* 00003670 */ 0x6C, 0x00, 0x4C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x74, 0x00, 0x68, 0x00, 0x00, 0x00, -/* 00003680 */ 0x70, 0x00, 0x61, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x46, 0x00, -/* 00003690 */ 0x6F, 0x00, 0x72, 0x00, 0x48, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x72, 0x00, 0x43, 0x00, 0x79, 0x00, -/* 000036A0 */ 0x63, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x68, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x72, 0x00, -/* 000036B0 */ 0x43, 0x00, 0x79, 0x00, 0x63, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, -/* 000036C0 */ 0x50, 0x00, 0x61, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x00, 0x00, -/* 000036D0 */ 0x45, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x4D, 0x00, 0x00, 0x00, -/* 000036E0 */ 0x64, 0x00, 0x00, 0x00, 0x6A, 0x00, 0x00, 0x00, 0x68, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x72, 0x00, -/* 000036F0 */ 0x31, 0x00, 0x32, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x68, 0x00, 0x6F, 0x00, 0x75, 0x00, -/* 00003700 */ 0x72, 0x00, 0x32, 0x00, 0x34, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x00, 0x00, -/* 00003710 */ 0x73, 0x00, 0x00, 0x00, 0x7A, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 00003720 */ 0x55, 0x00, 0x00, 0x00, 0x4C, 0x00, 0x00, 0x00, 0x4B, 0x00, 0x00, 0x00, 0x6B, 0x00, 0x00, 0x00, -/* 00003730 */ 0x5A, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x4F, 0x00, 0x00, 0x00, -/* 00003740 */ 0x58, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, -/* 00003750 */ 0x33, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x68, 0x00, 0x31, 0x00, -/* 00003760 */ 0x32, 0x00, 0x00, 0x00, 0x68, 0x00, 0x32, 0x00, 0x33, 0x00, 0x00, 0x00, 0x68, 0x00, 0x31, 0x00, -/* 00003770 */ 0x31, 0x00, 0x00, 0x00, 0x68, 0x00, 0x32, 0x00, 0x34, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, -/* 00003780 */ 0x20, 0x00, 0x00, 0x00, 0x68, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x72, 0x00, 0x43, 0x00, 0x79, 0x00, -/* 00003790 */ 0x63, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x45, 0x00, 0x74, 0x00, 0x63, 0x00, 0x2F, 0x00, -/* 000037A0 */ 0x55, 0x00, 0x6E, 0x00, 0x6B, 0x00, 0x6E, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x6E, 0x00, 0x00, 0x00, -/* 000037B0 */ 0x74, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x5A, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x65, 0x00, -/* 000037C0 */ 0x00, 0x00, 0x49, 0x00, 0x41, 0x00, 0x4E, 0x00, 0x41, 0x00, 0x20, 0x00, 0x5A, 0x00, 0x6F, 0x00, -/* 000037D0 */ 0x6E, 0x00, 0x65, 0x00, 0x20, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x20, 0x00, 0x4C, 0x00, 0x69, 0x00, -/* 000037E0 */ 0x6E, 0x00, 0x6B, 0x00, 0x20, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x20, 0x00, -/* 000037F0 */ 0x28, 0x00, 0x41, 0x00, 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, 0x2F, 0x00, 0x4C, 0x00, 0x6F, 0x00, -/* 00003800 */ 0x63, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x29, 0x00, 0x00, 0x00, -/* 00003810 */ 0x45, 0x00, 0x74, 0x00, 0x63, 0x00, 0x2F, 0x00, 0x55, 0x00, 0x54, 0x00, 0x43, 0x00, 0x00, 0x00, -/* 00003820 */ 0x45, 0x00, 0x74, 0x00, 0x63, 0x00, 0x2F, 0x00, 0x47, 0x00, 0x4D, 0x00, 0x54, 0x00, 0x00, 0x00, -/* 00003830 */ 0x55, 0x00, 0x54, 0x00, 0x43, 0x00, 0x00, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, -/* 00003840 */ 0x61, 0x00, 0x74, 0x00, 0x4D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, -/* 00003850 */ 0x72, 0x00, 0x00, 0x00, 0x62, 0x00, 0x61, 0x00, 0x73, 0x00, 0x69, 0x00, 0x63, 0x00, 0x00, 0x00, -/* 00003860 */ 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, -/* 00003870 */ 0x7A, 0x00, 0x65, 0x00, 0x64, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, -/* 00003880 */ 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, -/* 00003890 */ 0x74, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x65, 0x00, 0x64, 0x00, 0x44, 0x00, 0x65, 0x00, -/* 000038A0 */ 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x49, 0x00, -/* 000038B0 */ 0x6E, 0x00, 0x76, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x64, 0x00, 0x20, 0x00, 0x44, 0x00, -/* 000038C0 */ 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, -/* 000038D0 */ 0x6F, 0x00, 0x6E, 0x00, 0x31, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, -/* 000038E0 */ 0x6F, 0x00, 0x6E, 0x00, 0x32, 0x00, 0x00, 0x00, 0x63, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, -/* 000038F0 */ 0x65, 0x00, 0x53, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, -/* 00003900 */ 0x74, 0x00, 0x65, 0x00, 0x5F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, -/* 00003910 */ 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, -/* 00003920 */ 0x67, 0x00, 0x5F, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x72, 0x00, 0x79, 0x00, 0x50, 0x00, -/* 00003930 */ 0x6F, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, -/* 00003940 */ 0x65, 0x00, 0x5F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, -/* 00003950 */ 0x6C, 0x00, 0x65, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, -/* 00003960 */ 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x5F, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, -/* 00003970 */ 0x72, 0x00, 0x79, 0x00, 0x50, 0x00, 0x6F, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x00, 0x00, -/* 00003980 */ 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x5F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x4C, 0x00, -/* 00003990 */ 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, -/* 000039A0 */ 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x5F, 0x00, -/* 000039B0 */ 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x72, 0x00, 0x79, 0x00, 0x50, 0x00, 0x6F, 0x00, 0x69, 0x00, -/* 000039C0 */ 0x6E, 0x00, 0x74, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, -/* 000039D0 */ 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, -/* 000039E0 */ 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, -/* 000039F0 */ 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, -/* 00003A00 */ 0x2E, 0x00, 0x00, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, -/* 00003A10 */ 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, -/* 00003A20 */ 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x50, 0x00, 0x6C, 0x00, 0x75, 0x00, -/* 00003A30 */ 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x52, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, -/* 00003A40 */ 0x00, 0x00, 0x52, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, -/* 00003A50 */ 0x50, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x70, 0x00, -/* 00003A60 */ 0x6C, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x52, 0x00, 0x75, 0x00, 0x6C, 0x00, -/* 00003A70 */ 0x65, 0x00, 0x73, 0x00, 0x5F, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, -/* 00003A80 */ 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, -/* 00003A90 */ 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x5F, 0x00, 0x6E, 0x00, 0x61, 0x00, -/* 00003AA0 */ 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, -/* 00003AB0 */ 0x50, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x52, 0x00, 0x75, 0x00, -/* 00003AC0 */ 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, -/* 00003AD0 */ 0x2E, 0x00, 0x50, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x52, 0x00, -/* 00003AE0 */ 0x75, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, -/* 00003AF0 */ 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, -/* 00003B00 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, -/* 00003B10 */ 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x50, 0x00, 0x6C, 0x00, 0x75, 0x00, -/* 00003B20 */ 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x52, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, -/* 00003B30 */ 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, -/* 00003B40 */ 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x63, 0x00, -/* 00003B50 */ 0x74, 0x00, 0x00, 0x00, 0x73, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, -/* 00003B60 */ 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x50, 0x00, 0x6C, 0x00, -/* 00003B70 */ 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x52, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x65, 0x00, -/* 00003B80 */ 0x73, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, -/* 00003B90 */ 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, -/* 00003BA0 */ 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, -/* 00003BB0 */ 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x00, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, -/* 00003BC0 */ 0x00, 0x00, 0x63, 0x00, 0x61, 0x00, 0x72, 0x00, 0x64, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x61, 0x00, -/* 00003BD0 */ 0x6C, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x64, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x61, 0x00, -/* 00003BE0 */ 0x6C, 0x00, 0x00, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00003BF0 */ 0x43, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x67, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x69, 0x00, -/* 00003C00 */ 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, -/* 00003C10 */ 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x64, 0x00, 0x50, 0x00, 0x6C, 0x00, -/* 00003C20 */ 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x52, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x65, 0x00, -/* 00003C30 */ 0x73, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x68, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, -/* 00003C40 */ 0x70, 0x00, 0x72, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x6D, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x74, 0x00, -/* 00003C50 */ 0x68, 0x00, 0x2E, 0x00, 0x61, 0x00, 0x7D, 0x00, 0x7B, 0x00, 0x64, 0x00, 0x61, 0x00, 0x79, 0x00, -/* 00003C60 */ 0x2E, 0x00, 0x62, 0x00, 0x7D, 0x00, 0x7B, 0x00, 0x68, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x72, 0x00, -/* 00003C70 */ 0x2E, 0x00, 0x63, 0x00, 0x7D, 0x00, 0x7B, 0x00, 0x6D, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x75, 0x00, -/* 00003C80 */ 0x74, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x64, 0x00, 0x7D, 0x00, 0x7B, 0x00, 0x73, 0x00, 0x65, 0x00, -/* 00003C90 */ 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x2E, 0x00, 0x65, 0x00, 0x7D, 0x00, 0x00, 0x00, -/* 00003CA0 */ 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x4C, 0x00, -/* 00003CB0 */ 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x42, 0x00, 0x65, 0x00, 0x73, 0x00, -/* 00003CC0 */ 0x74, 0x00, 0x46, 0x00, 0x69, 0x00, 0x74, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, -/* 00003CD0 */ 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, -/* 00003CE0 */ 0x6C, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x6F, 0x00, 0x6B, 0x00, 0x75, 0x00, 0x70, 0x00, -/* 00003CF0 */ 0x00, 0x00, 0x66, 0x00, 0x69, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x65, 0x00, -/* 00003D00 */ 0x64, 0x00, 0x00, 0x00, 0x65, 0x00, 0x78, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x73, 0x00, -/* 00003D10 */ 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x46, 0x00, 0x69, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x65, 0x00, -/* 00003D20 */ 0x72, 0x00, 0x00, 0x00, 0x2D, 0x00, 0x75, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x73, 0x00, 0x75, 0x00, -/* 00003D30 */ 0x62, 0x00, 0x54, 0x00, 0x61, 0x00, 0x67, 0x00, 0x73, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, -/* 00003D40 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x57, 0x00, 0x69, 0x00, 0x74, 0x00, 0x68, 0x00, -/* 00003D50 */ 0x6F, 0x00, 0x75, 0x00, 0x74, 0x00, 0x53, 0x00, 0x75, 0x00, 0x62, 0x00, 0x74, 0x00, 0x61, 0x00, -/* 00003D60 */ 0x67, 0x00, 0x73, 0x00, 0x00, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x2A, 0x00, 0x3F, 0x00, 0x29, 0x00, -/* 00003D70 */ 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x2D, 0x00, 0x75, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x24, 0x00, -/* 00003D80 */ 0x00, 0x00, 0x28, 0x00, 0x5B, 0x00, 0x5E, 0x00, 0x2D, 0x00, 0x5D, 0x00, 0x2A, 0x00, 0x29, 0x00, -/* 00003D90 */ 0x2D, 0x00, 0x3F, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x2A, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x00, 0x00, -/* 00003DA0 */ 0x28, 0x00, 0x5B, 0x00, 0x5E, 0x00, 0x5F, 0x00, 0x5D, 0x00, 0x2A, 0x00, 0x29, 0x00, 0x2E, 0x00, -/* 00003DB0 */ 0x2A, 0x00, 0x00, 0x00, 0x48, 0x00, 0x61, 0x00, 0x73, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, -/* 00003DC0 */ 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x29, 0x00, 0x2A, 0x00, -/* 00003DD0 */ 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x73, 0x00, 0x65, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x00, 0x00, -/* 00003DE0 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x63, 0x00, -/* 00003DF0 */ 0x6F, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x00, 0x00, 0x66, 0x00, 0x69, 0x00, 0x74, 0x00, -/* 00003E00 */ 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x64, 0x00, 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, -/* 00003E10 */ 0x75, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00003E20 */ 0x65, 0x00, 0x00, 0x00, 0x5B, 0x00, 0x27, 0x00, 0x62, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, -/* 00003E30 */ 0x20, 0x00, 0x66, 0x00, 0x69, 0x00, 0x74, 0x00, 0x27, 0x00, 0x2C, 0x00, 0x20, 0x00, 0x27, 0x00, -/* 00003E40 */ 0x6C, 0x00, 0x6F, 0x00, 0x6F, 0x00, 0x6B, 0x00, 0x75, 0x00, 0x70, 0x00, 0x27, 0x00, 0x5D, 0x00, -/* 00003E50 */ 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, -/* 00003E60 */ 0x72, 0x00, 0x5F, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, -/* 00003E70 */ 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00003E80 */ 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x5F, 0x00, 0x64, 0x00, 0x75, 0x00, 0x6D, 0x00, -/* 00003E90 */ 0x6D, 0x00, 0x79, 0x00, 0x4E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6E, 0x00, -/* 00003EA0 */ 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, -/* 00003EB0 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x5F, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, -/* 00003EC0 */ 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, -/* 00003ED0 */ 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x5F, 0x00, 0x64, 0x00, -/* 00003EE0 */ 0x75, 0x00, 0x6D, 0x00, 0x6D, 0x00, 0x79, 0x00, 0x4E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, -/* 00003EF0 */ 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, -/* 00003F00 */ 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x5F, 0x00, -/* 00003F10 */ 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, -/* 00003F20 */ 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, -/* 00003F30 */ 0x4F, 0x00, 0x66, 0x00, 0x5F, 0x00, 0x64, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x6D, 0x00, 0x79, 0x00, -/* 00003F40 */ 0x4E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, -/* 00003F50 */ 0x43, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x63, 0x00, 0x61, 0x00, -/* 00003F60 */ 0x6C, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, -/* 00003F70 */ 0x5F, 0x00, 0x64, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x6D, 0x00, 0x79, 0x00, 0x4E, 0x00, 0x61, 0x00, -/* 00003F80 */ 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x52, 0x00, 0x65, 0x00, 0x74, 0x00, -/* 00003F90 */ 0x75, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, -/* 00003FA0 */ 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x56, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00003FB0 */ 0x75, 0x00, 0x65, 0x00, 0x73, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x4C, 0x00, 0x6F, 0x00, -/* 00003FC0 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, 0x76, 0x00, -/* 00003FD0 */ 0x65, 0x00, 0x72, 0x00, 0x73, 0x00, 0x65, 0x00, 0x64, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, -/* 00003FE0 */ 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x56, 0x00, 0x61, 0x00, -/* 00003FF0 */ 0x6C, 0x00, 0x75, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x2D, 0x00, 0x63, 0x00, 0x6F, 0x00, -/* 00004000 */ 0x2D, 0x00, 0x00, 0x00, 0x2D, 0x00, 0x75, 0x00, 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x2D, 0x00, -/* 00004010 */ 0x5B, 0x00, 0x5E, 0x00, 0x5C, 0x00, 0x2D, 0x00, 0x5D, 0x00, 0x5B, 0x00, 0x5E, 0x00, 0x5C, 0x00, -/* 00004020 */ 0x2D, 0x00, 0x5D, 0x00, 0x3F, 0x00, 0x2D, 0x00, 0x5B, 0x00, 0x5E, 0x00, 0x5C, 0x00, 0x2D, 0x00, -/* 00004030 */ 0x5D, 0x00, 0x2B, 0x00, 0x29, 0x00, 0x2A, 0x00, 0x2D, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x2D, 0x00, -/* 00004040 */ 0x28, 0x00, 0x5B, 0x00, 0x5E, 0x00, 0x5C, 0x00, 0x2D, 0x00, 0x5D, 0x00, 0x2B, 0x00, 0x29, 0x00, -/* 00004050 */ 0x2E, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x28, 0x00, 0x5B, 0x00, 0x5E, 0x00, 0x5F, 0x00, 0x5D, 0x00, -/* 00004060 */ 0x2A, 0x00, 0x29, 0x00, 0x5F, 0x00, 0x3F, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x2B, 0x00, 0x29, 0x00, -/* 00004070 */ 0x3F, 0x00, 0x00, 0x00, 0x63, 0x00, 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, -/* 00004080 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x43, 0x00, 0x6F, 0x00, -/* 00004090 */ 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x53, 0x00, -/* 000040A0 */ 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, 0x2D, 0x00, 0x75, 0x00, -/* 000040B0 */ 0x2D, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x69, 0x00, -/* 000040C0 */ 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x7A, 0x00, -/* 000040D0 */ 0x65, 0x00, 0x64, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x4F, 0x00, 0x62, 0x00, -/* 000040E0 */ 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x61, 0x00, -/* 000040F0 */ 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00004100 */ 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00, -/* 00004110 */ 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x75, 0x00, 0x73, 0x00, -/* 00004120 */ 0x61, 0x00, 0x67, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x73, 0x00, 0x65, 0x00, -/* 00004130 */ 0x6E, 0x00, 0x73, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x76, 0x00, 0x69, 0x00, 0x74, 0x00, -/* 00004140 */ 0x79, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x69, 0x00, 0x67, 0x00, 0x6E, 0x00, 0x6F, 0x00, -/* 00004150 */ 0x72, 0x00, 0x65, 0x00, 0x50, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x74, 0x00, 0x75, 0x00, -/* 00004160 */ 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, -/* 00004170 */ 0x63, 0x00, 0x61, 0x00, 0x73, 0x00, 0x65, 0x00, 0x46, 0x00, 0x69, 0x00, 0x72, 0x00, 0x73, 0x00, -/* 00004180 */ 0x74, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x65, 0x00, -/* 00004190 */ 0x72, 0x00, 0x69, 0x00, 0x63, 0x00, 0x00, 0x00, 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, -/* 000041A0 */ 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x64, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, -/* 000041B0 */ 0x6E, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, -/* 000041C0 */ 0x6C, 0x00, 0x65, 0x00, 0x4D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, -/* 000041D0 */ 0x72, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x57, 0x00, 0x69, 0x00, 0x6E, 0x00, -/* 000041E0 */ 0x64, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x73, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x45, 0x00, 0x63, 0x00, -/* 000041F0 */ 0x6D, 0x00, 0x61, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, -/* 00004200 */ 0x61, 0x00, 0x72, 0x00, 0x4D, 0x00, 0x61, 0x00, 0x70, 0x00, 0x00, 0x00, 0x47, 0x00, 0x72, 0x00, -/* 00004210 */ 0x65, 0x00, 0x67, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x43, 0x00, -/* 00004220 */ 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, -/* 00004230 */ 0x67, 0x00, 0x72, 0x00, 0x65, 0x00, 0x67, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x79, 0x00, 0x00, 0x00, -/* 00004240 */ 0x48, 0x00, 0x65, 0x00, 0x62, 0x00, 0x72, 0x00, 0x65, 0x00, 0x77, 0x00, 0x43, 0x00, 0x61, 0x00, -/* 00004250 */ 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x68, 0x00, -/* 00004260 */ 0x65, 0x00, 0x62, 0x00, 0x72, 0x00, 0x65, 0x00, 0x77, 0x00, 0x00, 0x00, 0x48, 0x00, 0x69, 0x00, -/* 00004270 */ 0x6A, 0x00, 0x72, 0x00, 0x69, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, -/* 00004280 */ 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x69, 0x00, 0x73, 0x00, 0x6C, 0x00, 0x61, 0x00, -/* 00004290 */ 0x6D, 0x00, 0x69, 0x00, 0x63, 0x00, 0x00, 0x00, 0x4A, 0x00, 0x61, 0x00, 0x70, 0x00, 0x61, 0x00, -/* 000042A0 */ 0x6E, 0x00, 0x65, 0x00, 0x73, 0x00, 0x65, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, -/* 000042B0 */ 0x6E, 0x00, 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6A, 0x00, 0x61, 0x00, 0x70, 0x00, -/* 000042C0 */ 0x61, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, 0x4A, 0x00, 0x75, 0x00, -/* 000042D0 */ 0x6C, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, -/* 000042E0 */ 0x6E, 0x00, 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6A, 0x00, 0x75, 0x00, 0x6C, 0x00, -/* 000042F0 */ 0x69, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x4B, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x65, 0x00, -/* 00004300 */ 0x61, 0x00, 0x6E, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, -/* 00004310 */ 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6B, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, -/* 00004320 */ 0x6E, 0x00, 0x00, 0x00, 0x55, 0x00, 0x6D, 0x00, 0x41, 0x00, 0x6C, 0x00, 0x51, 0x00, 0x75, 0x00, -/* 00004330 */ 0x72, 0x00, 0x61, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, -/* 00004340 */ 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x69, 0x00, 0x73, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x6D, 0x00, -/* 00004350 */ 0x69, 0x00, 0x63, 0x00, 0x2D, 0x00, 0x63, 0x00, 0x69, 0x00, 0x76, 0x00, 0x69, 0x00, 0x6C, 0x00, -/* 00004360 */ 0x00, 0x00, 0x54, 0x00, 0x68, 0x00, 0x61, 0x00, 0x69, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00004370 */ 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x74, 0x00, 0x68, 0x00, -/* 00004380 */ 0x61, 0x00, 0x69, 0x00, 0x00, 0x00, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x77, 0x00, 0x61, 0x00, -/* 00004390 */ 0x6E, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x61, 0x00, -/* 000043A0 */ 0x72, 0x00, 0x00, 0x00, 0x74, 0x00, 0x61, 0x00, 0x69, 0x00, 0x77, 0x00, 0x61, 0x00, 0x6E, 0x00, -/* 000043B0 */ 0x00, 0x00, 0x45, 0x00, 0x63, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, -/* 000043C0 */ 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x57, 0x00, 0x69, 0x00, -/* 000043D0 */ 0x6E, 0x00, 0x64, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x73, 0x00, 0x54, 0x00, 0x65, 0x00, 0x6D, 0x00, -/* 000043E0 */ 0x70, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, 0x57, 0x00, 0x69, 0x00, -/* 000043F0 */ 0x6E, 0x00, 0x64, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x73, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x45, 0x00, -/* 00004400 */ 0x63, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, -/* 00004410 */ 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x72, 0x00, -/* 00004420 */ 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x57, 0x00, 0x65, 0x00, 0x65, 0x00, 0x6B, 0x00, 0x64, 0x00, -/* 00004430 */ 0x61, 0x00, 0x79, 0x00, 0x45, 0x00, 0x72, 0x00, 0x61, 0x00, 0x4D, 0x00, 0x6F, 0x00, 0x6E, 0x00, -/* 00004440 */ 0x74, 0x00, 0x68, 0x00, 0x50, 0x00, 0x61, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, -/* 00004450 */ 0x6E, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x72, 0x00, 0x65, 0x00, 0x63, 0x00, -/* 00004460 */ 0x74, 0x00, 0x44, 0x00, 0x61, 0x00, 0x79, 0x00, 0x48, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x72, 0x00, -/* 00004470 */ 0x4D, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x74, 0x00, 0x65, 0x00, 0x53, 0x00, 0x65, 0x00, -/* 00004480 */ 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x4D, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x74, 0x00, -/* 00004490 */ 0x68, 0x00, 0x50, 0x00, 0x61, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, -/* 000044A0 */ 0x00, 0x00, 0x75, 0x00, 0x70, 0x00, 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x50, 0x00, -/* 000044B0 */ 0x61, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x53, 0x00, 0x74, 0x00, -/* 000044C0 */ 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x73, 0x00, 0x00, 0x00, 0x74, 0x00, 0x65, 0x00, -/* 000044D0 */ 0x6D, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, 0x64, 0x00, -/* 000044E0 */ 0x61, 0x00, 0x79, 0x00, 0x6F, 0x00, 0x66, 0x00, 0x77, 0x00, 0x65, 0x00, 0x65, 0x00, 0x6B, 0x00, -/* 000044F0 */ 0x2E, 0x00, 0x61, 0x00, 0x62, 0x00, 0x62, 0x00, 0x72, 0x00, 0x65, 0x00, 0x76, 0x00, 0x69, 0x00, -/* 00004500 */ 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, 0x79, 0x00, -/* 00004510 */ 0x6F, 0x00, 0x66, 0x00, 0x77, 0x00, 0x65, 0x00, 0x65, 0x00, 0x6B, 0x00, 0x2E, 0x00, 0x66, 0x00, -/* 00004520 */ 0x75, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x79, 0x00, 0x65, 0x00, 0x61, 0x00, 0x72, 0x00, -/* 00004530 */ 0x2E, 0x00, 0x61, 0x00, 0x62, 0x00, 0x62, 0x00, 0x72, 0x00, 0x65, 0x00, 0x76, 0x00, 0x69, 0x00, -/* 00004540 */ 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x00, 0x00, 0x79, 0x00, 0x65, 0x00, 0x61, 0x00, -/* 00004550 */ 0x72, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x6D, 0x00, -/* 00004560 */ 0x6F, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x68, 0x00, 0x2E, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x6D, 0x00, -/* 00004570 */ 0x65, 0x00, 0x72, 0x00, 0x69, 0x00, 0x63, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x6F, 0x00, 0x6E, 0x00, -/* 00004580 */ 0x74, 0x00, 0x68, 0x00, 0x2E, 0x00, 0x61, 0x00, 0x62, 0x00, 0x62, 0x00, 0x72, 0x00, 0x65, 0x00, -/* 00004590 */ 0x76, 0x00, 0x69, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x00, 0x00, 0x6D, 0x00, -/* 000045A0 */ 0x6F, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x68, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x75, 0x00, 0x6C, 0x00, -/* 000045B0 */ 0x6C, 0x00, 0x00, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x7A, 0x00, 0x6F, 0x00, -/* 000045C0 */ 0x6E, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x61, 0x00, 0x62, 0x00, 0x62, 0x00, 0x72, 0x00, 0x65, 0x00, -/* 000045D0 */ 0x76, 0x00, 0x69, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x00, 0x00, 0x74, 0x00, -/* 000045E0 */ 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x7A, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x2E, 0x00, -/* 000045F0 */ 0x66, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x28, 0x00, 0x00, 0x00, -/* 00004600 */ 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x5C, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, -/* 00004610 */ 0x6F, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x2E, 0x00, 0x28, 0x00, 0x5B, 0x00, -/* 00004620 */ 0x61, 0x00, 0x2D, 0x00, 0x7A, 0x00, 0x5D, 0x00, 0x2A, 0x00, 0x29, 0x00, 0x28, 0x00, 0x3F, 0x00, -/* 00004630 */ 0x3A, 0x00, 0x5C, 0x00, 0x28, 0x00, 0x5B, 0x00, 0x30, 0x00, 0x2D, 0x00, 0x39, 0x00, 0x5D, 0x00, -/* 00004640 */ 0x5C, 0x00, 0x29, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x45, 0x00, 0x72, 0x00, -/* 00004650 */ 0x72, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x20, 0x00, 0x77, 0x00, 0x68, 0x00, 0x65, 0x00, 0x6E, 0x00, -/* 00004660 */ 0x20, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x72, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, -/* 00004670 */ 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x20, 0x00, 0x77, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x64, 0x00, -/* 00004680 */ 0x6F, 0x00, 0x77, 0x00, 0x73, 0x00, 0x20, 0x00, 0x72, 0x00, 0x65, 0x00, 0x74, 0x00, 0x75, 0x00, -/* 00004690 */ 0x72, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x64, 0x00, 0x20, 0x00, 0x77, 0x00, 0x65, 0x00, 0x65, 0x00, -/* 000046A0 */ 0x6B, 0x00, 0x64, 0x00, 0x61, 0x00, 0x79, 0x00, 0x2F, 0x00, 0x45, 0x00, 0x72, 0x00, 0x61, 0x00, -/* 000046B0 */ 0x2F, 0x00, 0x4D, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x68, 0x00, 0x20, 0x00, 0x70, 0x00, -/* 000046C0 */ 0x61, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x3B, 0x00, 0x20, 0x00, -/* 000046D0 */ 0x72, 0x00, 0x65, 0x00, 0x67, 0x00, 0x65, 0x00, 0x78, 0x00, 0x20, 0x00, 0x72, 0x00, 0x65, 0x00, -/* 000046E0 */ 0x74, 0x00, 0x75, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x64, 0x00, 0x20, 0x00, 0x6E, 0x00, -/* 000046F0 */ 0x75, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x20, 0x00, 0x0A, 0x00, 0x49, 0x00, 0x6E, 0x00, -/* 00004700 */ 0x70, 0x00, 0x75, 0x00, 0x74, 0x00, 0x20, 0x00, 0x77, 0x00, 0x61, 0x00, 0x73, 0x00, 0x3A, 0x00, -/* 00004710 */ 0x20, 0x00, 0x27, 0x00, 0x00, 0x00, 0x27, 0x00, 0x0A, 0x00, 0x52, 0x00, 0x65, 0x00, 0x67, 0x00, -/* 00004720 */ 0x65, 0x00, 0x78, 0x00, 0x3A, 0x00, 0x20, 0x00, 0x27, 0x00, 0x00, 0x00, 0x28, 0x00, 0x5C, 0x00, -/* 00004730 */ 0x2E, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x29, 0x00, -/* 00004740 */ 0x5C, 0x00, 0x2E, 0x00, 0x28, 0x00, 0x5B, 0x00, 0x61, 0x00, 0x2D, 0x00, 0x7A, 0x00, 0x5D, 0x00, -/* 00004750 */ 0x2A, 0x00, 0x29, 0x00, 0x28, 0x00, 0x5C, 0x00, 0x28, 0x00, 0x5B, 0x00, 0x30, 0x00, 0x2D, 0x00, -/* 00004760 */ 0x39, 0x00, 0x5D, 0x00, 0x5C, 0x00, 0x29, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x7D, 0x00, 0x27, 0x00, -/* 00004770 */ 0x00, 0x00, 0x66, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x00, 0x00, -/* 00004780 */ 0x2E, 0x00, 0x00, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x61, 0x00, 0x62, 0x00, 0x62, 0x00, 0x72, 0x00, -/* 00004790 */ 0x65, 0x00, 0x76, 0x00, 0x69, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x00, 0x00, -/* 000047A0 */ 0x61, 0x00, 0x62, 0x00, 0x62, 0x00, 0x72, 0x00, 0x65, 0x00, 0x76, 0x00, 0x69, 0x00, 0x61, 0x00, -/* 000047B0 */ 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x28, 0x00, 0x31, 0x00, 0x29, 0x00, 0x00, 0x00, 0x29, 0x00, -/* 000047C0 */ 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x5C, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, -/* 000047D0 */ 0x6F, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x5C, 0x00, 0x2E, 0x00, 0x28, 0x00, 0x5B, 0x00, 0x61, 0x00, -/* 000047E0 */ 0x2D, 0x00, 0x7A, 0x00, 0x5D, 0x00, 0x2A, 0x00, 0x29, 0x00, 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, -/* 000047F0 */ 0x5C, 0x00, 0x28, 0x00, 0x5B, 0x00, 0x30, 0x00, 0x2D, 0x00, 0x39, 0x00, 0x5D, 0x00, 0x5C, 0x00, -/* 00004800 */ 0x29, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x45, 0x00, 0x72, 0x00, 0x72, 0x00, -/* 00004810 */ 0x6F, 0x00, 0x72, 0x00, 0x20, 0x00, 0x77, 0x00, 0x68, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x20, 0x00, -/* 00004820 */ 0x63, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x72, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x69, 0x00, -/* 00004830 */ 0x6E, 0x00, 0x67, 0x00, 0x20, 0x00, 0x77, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x6F, 0x00, -/* 00004840 */ 0x77, 0x00, 0x73, 0x00, 0x20, 0x00, 0x72, 0x00, 0x65, 0x00, 0x74, 0x00, 0x75, 0x00, 0x72, 0x00, -/* 00004850 */ 0x6E, 0x00, 0x65, 0x00, 0x64, 0x00, 0x20, 0x00, 0x64, 0x00, 0x61, 0x00, 0x79, 0x00, 0x2F, 0x00, -/* 00004860 */ 0x68, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x72, 0x00, 0x2F, 0x00, 0x6D, 0x00, 0x69, 0x00, 0x6E, 0x00, -/* 00004870 */ 0x75, 0x00, 0x74, 0x00, 0x65, 0x00, 0x2F, 0x00, 0x73, 0x00, 0x65, 0x00, 0x63, 0x00, 0x6F, 0x00, -/* 00004880 */ 0x6E, 0x00, 0x64, 0x00, 0x2F, 0x00, 0x6D, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x68, 0x00, -/* 00004890 */ 0x20, 0x00, 0x70, 0x00, 0x61, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, -/* 000048A0 */ 0x3B, 0x00, 0x20, 0x00, 0x72, 0x00, 0x65, 0x00, 0x67, 0x00, 0x65, 0x00, 0x78, 0x00, 0x20, 0x00, -/* 000048B0 */ 0x72, 0x00, 0x65, 0x00, 0x74, 0x00, 0x75, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x64, 0x00, -/* 000048C0 */ 0x20, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x20, 0x00, 0x0A, 0x00, -/* 000048D0 */ 0x49, 0x00, 0x6E, 0x00, 0x70, 0x00, 0x75, 0x00, 0x74, 0x00, 0x20, 0x00, 0x77, 0x00, 0x61, 0x00, -/* 000048E0 */ 0x73, 0x00, 0x3A, 0x00, 0x20, 0x00, 0x27, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x69, 0x00, 0x6E, 0x00, -/* 000048F0 */ 0x74, 0x00, 0x65, 0x00, 0x67, 0x00, 0x65, 0x00, 0x72, 0x00, 0x28, 0x00, 0x32, 0x00, 0x29, 0x00, -/* 00004900 */ 0x7D, 0x00, 0x00, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x65, 0x00, 0x67, 0x00, 0x65, 0x00, -/* 00004910 */ 0x72, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x65, 0x00, 0x67, 0x00, -/* 00004920 */ 0x65, 0x00, 0x72, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, 0x79, 0x00, 0x6F, 0x00, -/* 00004930 */ 0x66, 0x00, 0x77, 0x00, 0x65, 0x00, 0x65, 0x00, 0x6B, 0x00, 0x00, 0x00, 0x45, 0x00, 0x72, 0x00, -/* 00004940 */ 0x72, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x20, 0x00, 0x77, 0x00, 0x68, 0x00, 0x65, 0x00, 0x6E, 0x00, -/* 00004950 */ 0x20, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x72, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, -/* 00004960 */ 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x20, 0x00, 0x77, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x64, 0x00, -/* 00004970 */ 0x6F, 0x00, 0x77, 0x00, 0x73, 0x00, 0x20, 0x00, 0x72, 0x00, 0x65, 0x00, 0x74, 0x00, 0x75, 0x00, -/* 00004980 */ 0x72, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x64, 0x00, 0x20, 0x00, 0x79, 0x00, 0x65, 0x00, 0x61, 0x00, -/* 00004990 */ 0x72, 0x00, 0x3B, 0x00, 0x20, 0x00, 0x72, 0x00, 0x65, 0x00, 0x67, 0x00, 0x65, 0x00, 0x78, 0x00, -/* 000049A0 */ 0x20, 0x00, 0x72, 0x00, 0x65, 0x00, 0x74, 0x00, 0x75, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x65, 0x00, -/* 000049B0 */ 0x64, 0x00, 0x20, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x7B, 0x00, -/* 000049C0 */ 0x79, 0x00, 0x65, 0x00, 0x61, 0x00, 0x72, 0x00, 0x2E, 0x00, 0x61, 0x00, 0x62, 0x00, 0x62, 0x00, -/* 000049D0 */ 0x72, 0x00, 0x65, 0x00, 0x76, 0x00, 0x69, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, -/* 000049E0 */ 0x28, 0x00, 0x32, 0x00, 0x29, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x79, 0x00, 0x65, 0x00, -/* 000049F0 */ 0x61, 0x00, 0x72, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x7D, 0x00, -/* 00004A00 */ 0x00, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x7A, 0x00, 0x6F, 0x00, 0x6E, 0x00, -/* 00004A10 */ 0x65, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x7B, 0x00, 0x79, 0x00, 0x65, 0x00, 0x61, 0x00, 0x72, 0x00, -/* 00004A20 */ 0x5C, 0x00, 0x2E, 0x00, 0x5B, 0x00, 0x61, 0x00, 0x2D, 0x00, 0x7A, 0x00, 0x5D, 0x00, 0x2A, 0x00, -/* 00004A30 */ 0x28, 0x00, 0x5C, 0x00, 0x28, 0x00, 0x5B, 0x00, 0x30, 0x00, 0x2D, 0x00, 0x39, 0x00, 0x5D, 0x00, -/* 00004A40 */ 0x5C, 0x00, 0x29, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x5C, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x31, 0x00, -/* 00004A50 */ 0x32, 0x00, 0x48, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x72, 0x00, 0x43, 0x00, 0x6C, 0x00, 0x6F, 0x00, -/* 00004A60 */ 0x63, 0x00, 0x6B, 0x00, 0x00, 0x00, 0x32, 0x00, 0x34, 0x00, 0x48, 0x00, 0x6F, 0x00, 0x75, 0x00, -/* 00004A70 */ 0x72, 0x00, 0x43, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x6B, 0x00, 0x00, 0x00, 0x6E, 0x00, -/* 00004A80 */ 0x6F, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x00, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, -/* 00004A90 */ 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, -/* 00004AA0 */ 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, -/* 00004AB0 */ 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, -/* 00004AC0 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6D, 0x00, 0x70, 0x00, -/* 00004AD0 */ 0x00, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, -/* 00004AE0 */ 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, -/* 00004AF0 */ 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, -/* 00004B00 */ 0x65, 0x00, 0x2E, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, -/* 00004B10 */ 0x65, 0x00, 0x64, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, -/* 00004B20 */ 0x73, 0x00, 0x00, 0x00, 0xFE, 0x07, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x6A, 0x00, 0x00, 0x00, 0x9B, -/* 00004B30 */ 0x00, 0x00, 0x00, 0x05, 0x01, 0x00, 0x00, 0x6F, 0x01, 0x00, 0x00, 0x70, 0x01, 0x00, 0x00, 0x7E, -/* 00004B40 */ 0x01, 0x00, 0x00, 0x8F, 0x01, 0x00, 0x00, 0xB7, 0x01, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x00, 0xE1, -/* 00004B50 */ 0x01, 0x00, 0x00, 0x5B, 0x02, 0x00, 0x00, 0x7A, 0x02, 0x00, 0x00, 0x7B, 0x02, 0x00, 0x00, 0xAE, -/* 00004B60 */ 0x02, 0x00, 0x00, 0xED, 0x02, 0x00, 0x00, 0x12, 0x03, 0x00, 0x00, 0x44, 0x03, 0x00, 0x00, 0x79, -/* 00004B70 */ 0x03, 0x00, 0x00, 0x7A, 0x03, 0x00, 0x00, 0x8B, 0x03, 0x00, 0x00, 0xAE, 0x03, 0x00, 0x00, 0xAF, -/* 00004B80 */ 0x03, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0xF5, 0x03, 0x00, 0x00, 0x2E, 0x04, 0x00, 0x00, 0x6F, -/* 00004B90 */ 0x04, 0x00, 0x00, 0x70, 0x04, 0x00, 0x00, 0xB1, 0x04, 0x00, 0x00, 0xE9, 0x04, 0x00, 0x00, 0xEA, -/* 00004BA0 */ 0x04, 0x00, 0x00, 0x64, 0x05, 0x00, 0x00, 0xC5, 0x05, 0x00, 0x00, 0x54, 0x06, 0x00, 0x00, 0xBF, -/* 00004BB0 */ 0x06, 0x00, 0x00, 0xE0, 0x06, 0x00, 0x00, 0xF6, 0x06, 0x00, 0x00, 0x08, 0x07, 0x00, 0x00, 0x28, -/* 00004BC0 */ 0x07, 0x00, 0x00, 0x29, 0x07, 0x00, 0x00, 0x40, 0x07, 0x00, 0x00, 0x8A, 0x07, 0x00, 0x00, 0x99, -/* 00004BD0 */ 0x07, 0x00, 0x00, 0x9A, 0x07, 0x00, 0x00, 0xB8, 0x07, 0x00, 0x00, 0xE3, 0x07, 0x00, 0x00, 0xFF, -/* 00004BE0 */ 0x07, 0x00, 0x00, 0x11, 0x08, 0x00, 0x00, 0x12, 0x08, 0x00, 0x00, 0x6F, 0x08, 0x00, 0x00, 0x9D, -/* 00004BF0 */ 0x08, 0x00, 0x00, 0xAF, 0x08, 0x00, 0x00, 0xB0, 0x08, 0x00, 0x00, 0xDA, 0x08, 0x00, 0x00, 0xE8, -/* 00004C00 */ 0x08, 0x00, 0x00, 0xF4, 0x08, 0x00, 0x00, 0xFA, 0x08, 0x00, 0x00, 0xFB, 0x08, 0x00, 0x00, 0x1F, -/* 00004C10 */ 0x09, 0x00, 0x00, 0x41, 0x09, 0x00, 0x00, 0x63, 0x09, 0x00, 0x00, 0x85, 0x09, 0x00, 0x00, 0xA7, -/* 00004C20 */ 0x09, 0x00, 0x00, 0xC5, 0x09, 0x00, 0x00, 0xE5, 0x09, 0x00, 0x00, 0xE6, 0x09, 0x00, 0x00, 0x12, -/* 00004C30 */ 0x0A, 0x00, 0x00, 0x13, 0x0A, 0x00, 0x00, 0x31, 0x0A, 0x00, 0x00, 0x57, 0x0A, 0x00, 0x00, 0x81, -/* 00004C40 */ 0x0A, 0x00, 0x00, 0xA7, 0x0A, 0x00, 0x00, 0xCC, 0x0A, 0x00, 0x00, 0xDA, 0x0A, 0x00, 0x00, 0xDB, -/* 00004C50 */ 0x0A, 0x00, 0x00, 0x2F, 0x0B, 0x00, 0x00, 0x7F, 0x0B, 0x00, 0x00, 0xDD, 0x0B, 0x00, 0x00, 0x39, -/* 00004C60 */ 0x0C, 0x00, 0x00, 0xAF, 0x0C, 0x00, 0x00, 0xDF, 0x0C, 0x00, 0x00, 0x34, 0x0D, 0x00, 0x00, 0x76, -/* 00004C70 */ 0x0D, 0x00, 0x00, 0xC0, 0x0D, 0x00, 0x00, 0xC7, 0x0D, 0x00, 0x00, 0xC8, 0x0D, 0x00, 0x00, 0x14, -/* 00004C80 */ 0x0E, 0x00, 0x00, 0x60, 0x0E, 0x00, 0x00, 0xA6, 0x0E, 0x00, 0x00, 0xEC, 0x0E, 0x00, 0x00, 0xED, -/* 00004C90 */ 0x0E, 0x00, 0x00, 0x39, 0x0F, 0x00, 0x00, 0x83, 0x0F, 0x00, 0x00, 0xBD, 0x0F, 0x00, 0x00, 0xBE, -/* 00004CA0 */ 0x0F, 0x00, 0x00, 0x0C, 0x10, 0x00, 0x00, 0x62, 0x10, 0x00, 0x00, 0xB8, 0x10, 0x00, 0x00, 0xB9, -/* 00004CB0 */ 0x10, 0x00, 0x00, 0xEE, 0x10, 0x00, 0x00, 0xEF, 0x10, 0x00, 0x00, 0x2D, 0x11, 0x00, 0x00, 0x65, -/* 00004CC0 */ 0x11, 0x00, 0x00, 0x66, 0x11, 0x00, 0x00, 0xD1, 0x11, 0x00, 0x00, 0x02, 0x12, 0x00, 0x00, 0x12, -/* 00004CD0 */ 0x12, 0x00, 0x00, 0x31, 0x12, 0x00, 0x00, 0x54, 0x12, 0x00, 0x00, 0x77, 0x12, 0x00, 0x00, 0x98, -/* 00004CE0 */ 0x12, 0x00, 0x00, 0xB8, 0x12, 0x00, 0x00, 0xC7, 0x12, 0x00, 0x00, 0xD5, 0x12, 0x00, 0x00, 0xD6, -/* 00004CF0 */ 0x12, 0x00, 0x00, 0xE6, 0x12, 0x00, 0x00, 0x3D, 0x13, 0x00, 0x00, 0x94, 0x13, 0x00, 0x00, 0x0F, -/* 00004D00 */ 0x14, 0x00, 0x00, 0x83, 0x14, 0x00, 0x00, 0x05, 0x15, 0x00, 0x00, 0x85, 0x15, 0x00, 0x00, 0xCD, -/* 00004D10 */ 0x15, 0x00, 0x00, 0x3F, 0x16, 0x00, 0x00, 0x40, 0x16, 0x00, 0x00, 0x9E, 0x16, 0x00, 0x00, 0xFA, -/* 00004D20 */ 0x16, 0x00, 0x00, 0x50, 0x17, 0x00, 0x00, 0xBB, 0x17, 0x00, 0x00, 0x28, 0x18, 0x00, 0x00, 0xA7, -/* 00004D30 */ 0x18, 0x00, 0x00, 0x24, 0x19, 0x00, 0x00, 0x9B, 0x19, 0x00, 0x00, 0x0E, 0x1A, 0x00, 0x00, 0x6B, -/* 00004D40 */ 0x1A, 0x00, 0x00, 0x6C, 0x1A, 0x00, 0x00, 0xA5, 0x1A, 0x00, 0x00, 0x21, 0x1B, 0x00, 0x00, 0xAE, -/* 00004D50 */ 0x1B, 0x00, 0x00, 0xD6, 0x1B, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x50, 0x1C, 0x00, 0x00, 0x5B, -/* 00004D60 */ 0x1C, 0x00, 0x00, 0xA4, 0x1C, 0x00, 0x00, 0xFC, 0x1C, 0x00, 0x00, 0x62, 0x1D, 0x00, 0x00, 0x63, -/* 00004D70 */ 0x1D, 0x00, 0x00, 0x89, 0x1D, 0x00, 0x00, 0xE9, 0x1D, 0x00, 0x00, 0x31, 0x1E, 0x00, 0x00, 0x57, -/* 00004D80 */ 0x1E, 0x00, 0x00, 0x7D, 0x1E, 0x00, 0x00, 0x7E, 0x1E, 0x00, 0x00, 0xBB, 0x1E, 0x00, 0x00, 0xF2, -/* 00004D90 */ 0x1E, 0x00, 0x00, 0xF3, 0x1E, 0x00, 0x00, 0x59, 0x1F, 0x00, 0x00, 0x5A, 0x1F, 0x00, 0x00, 0xCA, -/* 00004DA0 */ 0x1F, 0x00, 0x00, 0x48, 0x20, 0x00, 0x00, 0x4F, 0x20, 0x00, 0x00, 0x50, 0x20, 0x00, 0x00, 0x64, -/* 00004DB0 */ 0x20, 0x00, 0x00, 0xFB, 0x20, 0x00, 0x00, 0x6C, 0x21, 0x00, 0x00, 0x73, 0x21, 0x00, 0x00, 0x74, -/* 00004DC0 */ 0x21, 0x00, 0x00, 0xBF, 0x21, 0x00, 0x00, 0xE6, 0x21, 0x00, 0x00, 0xF7, 0x21, 0x00, 0x00, 0x0A, -/* 00004DD0 */ 0x22, 0x00, 0x00, 0x1B, 0x22, 0x00, 0x00, 0x2F, 0x22, 0x00, 0x00, 0x42, 0x22, 0x00, 0x00, 0x4A, -/* 00004DE0 */ 0x22, 0x00, 0x00, 0x6F, 0x22, 0x00, 0x00, 0x81, 0x22, 0x00, 0x00, 0x93, 0x22, 0x00, 0x00, 0xA5, -/* 00004DF0 */ 0x22, 0x00, 0x00, 0xB8, 0x22, 0x00, 0x00, 0xC0, 0x22, 0x00, 0x00, 0xE5, 0x22, 0x00, 0x00, 0x15, -/* 00004E00 */ 0x23, 0x00, 0x00, 0x7C, 0x23, 0x00, 0x00, 0xC4, 0x23, 0x00, 0x00, 0x13, 0x24, 0x00, 0x00, 0x1B, -/* 00004E10 */ 0x24, 0x00, 0x00, 0x4A, 0x24, 0x00, 0x00, 0x79, 0x24, 0x00, 0x00, 0x04, 0x25, 0x00, 0x00, 0x71, -/* 00004E20 */ 0x25, 0x00, 0x00, 0xE4, 0x25, 0x00, 0x00, 0xEC, 0x25, 0x00, 0x00, 0xED, 0x25, 0x00, 0x00, 0x1D, -/* 00004E30 */ 0x26, 0x00, 0x00, 0x4C, 0x26, 0x00, 0x00, 0x73, 0x26, 0x00, 0x00, 0x84, 0x26, 0x00, 0x00, 0xA8, -/* 00004E40 */ 0x26, 0x00, 0x00, 0xB2, 0x26, 0x00, 0x00, 0xB8, 0x26, 0x00, 0x00, 0xB9, 0x26, 0x00, 0x00, 0x13, -/* 00004E50 */ 0x27, 0x00, 0x00, 0x80, 0x27, 0x00, 0x00, 0xEC, 0x27, 0x00, 0x00, 0x54, 0x28, 0x00, 0x00, 0xC3, -/* 00004E60 */ 0x28, 0x00, 0x00, 0x23, 0x29, 0x00, 0x00, 0x41, 0x29, 0x00, 0x00, 0x42, 0x29, 0x00, 0x00, 0x67, -/* 00004E70 */ 0x29, 0x00, 0x00, 0x92, 0x29, 0x00, 0x00, 0xC7, 0x29, 0x00, 0x00, 0xEB, 0x29, 0x00, 0x00, 0xF5, -/* 00004E80 */ 0x29, 0x00, 0x00, 0xF6, 0x29, 0x00, 0x00, 0x2A, 0x2A, 0x00, 0x00, 0x41, 0x2A, 0x00, 0x00, 0x90, -/* 00004E90 */ 0x2A, 0x00, 0x00, 0xC2, 0x2A, 0x00, 0x00, 0xE6, 0x2A, 0x00, 0x00, 0xF7, 0x2A, 0x00, 0x00, 0x1D, -/* 00004EA0 */ 0x2B, 0x00, 0x00, 0x27, 0x2B, 0x00, 0x00, 0x28, 0x2B, 0x00, 0x00, 0x48, 0x2B, 0x00, 0x00, 0x4F, -/* 00004EB0 */ 0x2B, 0x00, 0x00, 0x50, 0x2B, 0x00, 0x00, 0xB5, 0x2B, 0x00, 0x00, 0xE1, 0x2B, 0x00, 0x00, 0x27, -/* 00004EC0 */ 0x2C, 0x00, 0x00, 0x3D, 0x2C, 0x00, 0x00, 0x47, 0x2C, 0x00, 0x00, 0x4E, 0x2C, 0x00, 0x00, 0x4F, -/* 00004ED0 */ 0x2C, 0x00, 0x00, 0x80, 0x2C, 0x00, 0x00, 0xB7, 0x2C, 0x00, 0x00, 0xBE, 0x2C, 0x00, 0x00, 0xBF, -/* 00004EE0 */ 0x2C, 0x00, 0x00, 0xC7, 0x2C, 0x00, 0x00, 0x0A, 0x2D, 0x00, 0x00, 0x11, 0x2D, 0x00, 0x00, 0x3B, -/* 00004EF0 */ 0x2D, 0x00, 0x00, 0x42, 0x2D, 0x00, 0x00, 0xB3, 0x2D, 0x00, 0x00, 0x10, 0x2E, 0x00, 0x00, 0x60, -/* 00004F00 */ 0x2E, 0x00, 0x00, 0x68, 0x2E, 0x00, 0x00, 0xAF, 0x2E, 0x00, 0x00, 0xD3, 0x2E, 0x00, 0x00, 0xF1, -/* 00004F10 */ 0x2E, 0x00, 0x00, 0xFB, 0x2E, 0x00, 0x00, 0xFC, 0x2E, 0x00, 0x00, 0x1C, 0x2F, 0x00, 0x00, 0x38, -/* 00004F20 */ 0x2F, 0x00, 0x00, 0x4F, 0x2F, 0x00, 0x00, 0x7F, 0x2F, 0x00, 0x00, 0xA1, 0x2F, 0x00, 0x00, 0xAF, -/* 00004F30 */ 0x2F, 0x00, 0x00, 0xB0, 0x2F, 0x00, 0x00, 0xCA, 0x2F, 0x00, 0x00, 0x08, 0x30, 0x00, 0x00, 0x37, -/* 00004F40 */ 0x30, 0x00, 0x00, 0x54, 0x30, 0x00, 0x00, 0x6F, 0x30, 0x00, 0x00, 0x81, 0x30, 0x00, 0x00, 0x8F, -/* 00004F50 */ 0x30, 0x00, 0x00, 0x90, 0x30, 0x00, 0x00, 0xAE, 0x30, 0x00, 0x00, 0xD0, 0x30, 0x00, 0x00, 0x14, -/* 00004F60 */ 0x31, 0x00, 0x00, 0x62, 0x31, 0x00, 0x00, 0xA5, 0x31, 0x00, 0x00, 0xF4, 0x31, 0x00, 0x00, 0x24, -/* 00004F70 */ 0x32, 0x00, 0x00, 0x6D, 0x32, 0x00, 0x00, 0x87, 0x32, 0x00, 0x00, 0x95, 0x32, 0x00, 0x00, 0x96, -/* 00004F80 */ 0x32, 0x00, 0x00, 0xCE, 0x32, 0x00, 0x00, 0xD8, 0x32, 0x00, 0x00, 0xDF, 0x32, 0x00, 0x00, 0xE0, -/* 00004F90 */ 0x32, 0x00, 0x00, 0xE8, 0x32, 0x00, 0x00, 0x4C, 0x33, 0x00, 0x00, 0xB3, 0x33, 0x00, 0x00, 0x0A, -/* 00004FA0 */ 0x34, 0x00, 0x00, 0x11, 0x34, 0x00, 0x00, 0x74, 0x34, 0x00, 0x00, 0x7B, 0x34, 0x00, 0x00, 0xC3, -/* 00004FB0 */ 0x34, 0x00, 0x00, 0x12, 0x35, 0x00, 0x00, 0x2D, 0x35, 0x00, 0x00, 0x35, 0x35, 0x00, 0x00, 0x6B, -/* 00004FC0 */ 0x35, 0x00, 0x00, 0xDE, 0x35, 0x00, 0x00, 0xFF, 0x35, 0x00, 0x00, 0x12, 0x36, 0x00, 0x00, 0x25, -/* 00004FD0 */ 0x36, 0x00, 0x00, 0x38, 0x36, 0x00, 0x00, 0x4B, 0x36, 0x00, 0x00, 0x5E, 0x36, 0x00, 0x00, 0x71, -/* 00004FE0 */ 0x36, 0x00, 0x00, 0x7C, 0x36, 0x00, 0x00, 0x7D, 0x36, 0x00, 0x00, 0xD0, 0x36, 0x00, 0x00, 0xD1, -/* 00004FF0 */ 0x36, 0x00, 0x00, 0xEF, 0x36, 0x00, 0x00, 0xF6, 0x36, 0x00, 0x00, 0xF7, 0x36, 0x00, 0x00, 0xFF, -/* 00005000 */ 0x36, 0x00, 0x00, 0x4B, 0x37, 0x00, 0x00, 0x52, 0x37, 0x00, 0x00, 0x76, 0x37, 0x00, 0x00, 0x7D, -/* 00005010 */ 0x37, 0x00, 0x00, 0xEE, 0x37, 0x00, 0x00, 0x36, 0x38, 0x00, 0x00, 0x3E, 0x38, 0x00, 0x00, 0x89, -/* 00005020 */ 0x38, 0x00, 0x00, 0xAC, 0x38, 0x00, 0x00, 0xE8, 0x38, 0x00, 0x00, 0x2D, 0x39, 0x00, 0x00, 0x57, -/* 00005030 */ 0x39, 0x00, 0x00, 0x71, 0x39, 0x00, 0x00, 0x7F, 0x39, 0x00, 0x00, 0x80, 0x39, 0x00, 0x00, 0xE0, -/* 00005040 */ 0x39, 0x00, 0x00, 0x11, 0x3A, 0x00, 0x00, 0x42, 0x3A, 0x00, 0x00, 0x84, 0x3A, 0x00, 0x00, 0xCB, -/* 00005050 */ 0x3A, 0x00, 0x00, 0xDD, 0x3A, 0x00, 0x00, 0xDE, 0x3A, 0x00, 0x00, 0xFD, 0x3A, 0x00, 0x00, 0x0B, -/* 00005060 */ 0x3B, 0x00, 0x00, 0x15, 0x3B, 0x00, 0x00, 0x16, 0x3B, 0x00, 0x00, 0x42, 0x3B, 0x00, 0x00, 0x59, -/* 00005070 */ 0x3B, 0x00, 0x00, 0x60, 0x3B, 0x00, 0x00, 0x61, 0x3B, 0x00, 0x00, 0x8B, 0x3B, 0x00, 0x00, 0x8C, -/* 00005080 */ 0x3B, 0x00, 0x00, 0x94, 0x3B, 0x00, 0x00, 0xDB, 0x3B, 0x00, 0x00, 0xE2, 0x3B, 0x00, 0x00, 0x0E, -/* 00005090 */ 0x3C, 0x00, 0x00, 0x15, 0x3C, 0x00, 0x00, 0x72, 0x3C, 0x00, 0x00, 0xD0, 0x3C, 0x00, 0x00, 0xD8, -/* 000050A0 */ 0x3C, 0x00, 0x00, 0x16, 0x3D, 0x00, 0x00, 0x3E, 0x3D, 0x00, 0x00, 0x65, 0x3D, 0x00, 0x00, 0x66, -/* 000050B0 */ 0x3D, 0x00, 0x00, 0x8F, 0x3D, 0x00, 0x00, 0xC9, 0x3D, 0x00, 0x00, 0xE3, 0x3D, 0x00, 0x00, 0x06, -/* 000050C0 */ 0x3E, 0x00, 0x00, 0x23, 0x3E, 0x00, 0x00, 0x3E, 0x3E, 0x00, 0x00, 0x5C, 0x3E, 0x00, 0x00, 0x78, -/* 000050D0 */ 0x3E, 0x00, 0x00, 0xB6, 0x3E, 0x00, 0x00, 0xEF, 0x3E, 0x00, 0x00, 0x10, 0x3F, 0x00, 0x00, 0x31, -/* 000050E0 */ 0x3F, 0x00, 0x00, 0x58, 0x3F, 0x00, 0x00, 0x78, 0x3F, 0x00, 0x00, 0x99, 0x3F, 0x00, 0x00, 0xB2, -/* 000050F0 */ 0x3F, 0x00, 0x00, 0xCF, 0x3F, 0x00, 0x00, 0xEE, 0x3F, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x0E, -/* 00005100 */ 0x40, 0x00, 0x00, 0x0F, 0x40, 0x00, 0x00, 0x46, 0x40, 0x00, 0x00, 0x50, 0x40, 0x00, 0x00, 0x51, -/* 00005110 */ 0x40, 0x00, 0x00, 0x88, 0x40, 0x00, 0x00, 0xBD, 0x40, 0x00, 0x00, 0xEB, 0x40, 0x00, 0x00, 0x02, -/* 00005120 */ 0x41, 0x00, 0x00, 0x13, 0x41, 0x00, 0x00, 0x31, 0x41, 0x00, 0x00, 0x3B, 0x41, 0x00, 0x00, 0x42, -/* 00005130 */ 0x41, 0x00, 0x00, 0x43, 0x41, 0x00, 0x00, 0x4B, 0x41, 0x00, 0x00, 0xA9, 0x41, 0x00, 0x00, 0xFE, -/* 00005140 */ 0x41, 0x00, 0x00, 0x05, 0x42, 0x00, 0x00, 0x29, 0x42, 0x00, 0x00, 0x30, 0x42, 0x00, 0x00, 0xA1, -/* 00005150 */ 0x42, 0x00, 0x00, 0x1B, 0x43, 0x00, 0x00, 0x96, 0x43, 0x00, 0x00, 0xC9, 0x43, 0x00, 0x00, 0x45, -/* 00005160 */ 0x44, 0x00, 0x00, 0x4D, 0x44, 0x00, 0x00, 0xB8, 0x44, 0x00, 0x00, 0xE7, 0x44, 0x00, 0x00, 0xF6, -/* 00005170 */ 0x44, 0x00, 0x00, 0x1A, 0x45, 0x00, 0x00, 0x5E, 0x45, 0x00, 0x00, 0x6F, 0x45, 0x00, 0x00, 0xB4, -/* 00005180 */ 0x45, 0x00, 0x00, 0xBE, 0x45, 0x00, 0x00, 0xBF, 0x45, 0x00, 0x00, 0xE3, 0x45, 0x00, 0x00, 0x1D, -/* 00005190 */ 0x46, 0x00, 0x00, 0x44, 0x46, 0x00, 0x00, 0x7E, 0x46, 0x00, 0x00, 0xC4, 0x46, 0x00, 0x00, 0xEE, -/* 000051A0 */ 0x46, 0x00, 0x00, 0x1F, 0x47, 0x00, 0x00, 0x3E, 0x47, 0x00, 0x00, 0x8E, 0x47, 0x00, 0x00, 0xC2, -/* 000051B0 */ 0x47, 0x00, 0x00, 0xF3, 0x47, 0x00, 0x00, 0x47, 0x48, 0x00, 0x00, 0x7B, 0x48, 0x00, 0x00, 0xC8, -/* 000051C0 */ 0x48, 0x00, 0x00, 0xE2, 0x48, 0x00, 0x00, 0x31, 0x49, 0x00, 0x00, 0x59, 0x49, 0x00, 0x00, 0x6F, -/* 000051D0 */ 0x49, 0x00, 0x00, 0x81, 0x49, 0x00, 0x00, 0x8F, 0x49, 0x00, 0x00, 0x90, 0x49, 0x00, 0x00, 0xC2, -/* 000051E0 */ 0x49, 0x00, 0x00, 0xF5, 0x49, 0x00, 0x00, 0x3F, 0x4A, 0x00, 0x00, 0x71, 0x4A, 0x00, 0x00, 0x9F, -/* 000051F0 */ 0x4A, 0x00, 0x00, 0xD8, 0x4A, 0x00, 0x00, 0xEE, 0x4A, 0x00, 0x00, 0x00, 0x4B, 0x00, 0x00, 0x0E, -/* 00005200 */ 0x4B, 0x00, 0x00, 0x0F, 0x4B, 0x00, 0x00, 0x30, 0x4B, 0x00, 0x00, 0x6E, 0x4B, 0x00, 0x00, 0x7A, -/* 00005210 */ 0x4B, 0x00, 0x00, 0x7B, 0x4B, 0x00, 0x00, 0xA8, 0x4B, 0x00, 0x00, 0xEE, 0x4B, 0x00, 0x00, 0x15, -/* 00005220 */ 0x4C, 0x00, 0x00, 0x48, 0x4C, 0x00, 0x00, 0x5D, 0x4C, 0x00, 0x00, 0xAD, 0x4C, 0x00, 0x00, 0xFB, -/* 00005230 */ 0x4C, 0x00, 0x00, 0x4C, 0x4D, 0x00, 0x00, 0x5A, 0x4D, 0x00, 0x00, 0x5B, 0x4D, 0x00, 0x00, 0xA1, -/* 00005240 */ 0x4D, 0x00, 0x00, 0xAB, 0x4D, 0x00, 0x00, 0xAC, 0x4D, 0x00, 0x00, 0xD1, 0x4D, 0x00, 0x00, 0xE8, -/* 00005250 */ 0x4D, 0x00, 0x00, 0xEF, 0x4D, 0x00, 0x00, 0xF0, 0x4D, 0x00, 0x00, 0x0A, 0x4E, 0x00, 0x00, 0x20, -/* 00005260 */ 0x4E, 0x00, 0x00, 0x3E, 0x4E, 0x00, 0x00, 0x6A, 0x4E, 0x00, 0x00, 0x78, 0x4E, 0x00, 0x00, 0xB4, -/* 00005270 */ 0x4E, 0x00, 0x00, 0xBF, 0x4E, 0x00, 0x00, 0xC0, 0x4E, 0x00, 0x00, 0xD6, 0x4E, 0x00, 0x00, 0x12, -/* 00005280 */ 0x4F, 0x00, 0x00, 0x1D, 0x4F, 0x00, 0x00, 0x1E, 0x4F, 0x00, 0x00, 0x34, 0x4F, 0x00, 0x00, 0x6A, -/* 00005290 */ 0x4F, 0x00, 0x00, 0x75, 0x4F, 0x00, 0x00, 0x76, 0x4F, 0x00, 0x00, 0x94, 0x4F, 0x00, 0x00, 0xD1, -/* 000052A0 */ 0x4F, 0x00, 0x00, 0xDC, 0x4F, 0x00, 0x00, 0xDD, 0x4F, 0x00, 0x00, 0xF3, 0x4F, 0x00, 0x00, 0x14, -/* 000052B0 */ 0x50, 0x00, 0x00, 0x2D, 0x50, 0x00, 0x00, 0x5D, 0x50, 0x00, 0x00, 0x8E, 0x50, 0x00, 0x00, 0x9C, -/* 000052C0 */ 0x50, 0x00, 0x00, 0xB4, 0x50, 0x00, 0x00, 0xBE, 0x50, 0x00, 0x00, 0xC6, 0x50, 0x00, 0x00, 0xC7, -/* 000052D0 */ 0x50, 0x00, 0x00, 0xEE, 0x50, 0x00, 0x00, 0x32, 0x51, 0x00, 0x00, 0x59, 0x51, 0x00, 0x00, 0x5A, -/* 000052E0 */ 0x51, 0x00, 0x00, 0x7D, 0x51, 0x00, 0x00, 0xA2, 0x51, 0x00, 0x00, 0xDC, 0x51, 0x00, 0x00, 0xEA, -/* 000052F0 */ 0x51, 0x00, 0x00, 0xEB, 0x51, 0x00, 0x00, 0x0F, 0x52, 0x00, 0x00, 0x41, 0x52, 0x00, 0x00, 0x4F, -/* 00005300 */ 0x52, 0x00, 0x00, 0x50, 0x52, 0x00, 0x00, 0x74, 0x52, 0x00, 0x00, 0xA6, 0x52, 0x00, 0x00, 0xB4, -/* 00005310 */ 0x52, 0x00, 0x00, 0xB5, 0x52, 0x00, 0x00, 0x04, 0x53, 0x00, 0x00, 0x7D, 0x53, 0x00, 0x00, 0x8B, -/* 00005320 */ 0x53, 0x00, 0x00, 0x8C, 0x53, 0x00, 0x00, 0xA6, 0x53, 0x00, 0x00, 0xB0, 0x53, 0x00, 0x00, 0xB1, -/* 00005330 */ 0x53, 0x00, 0x00, 0xCA, 0x53, 0x00, 0x00, 0xD0, 0x53, 0x00, 0x00, 0xD1, 0x53, 0x00, 0x00, 0xD9, -/* 00005340 */ 0x53, 0x00, 0x00, 0x34, 0x54, 0x00, 0x00, 0x85, 0x54, 0x00, 0x00, 0xB8, 0x54, 0x00, 0x00, 0xBF, -/* 00005350 */ 0x54, 0x00, 0x00, 0x18, 0x55, 0x00, 0x00, 0x66, 0x55, 0x00, 0x00, 0x6D, 0x55, 0x00, 0x00, 0x96, -/* 00005360 */ 0x55, 0x00, 0x00, 0x9D, 0x55, 0x00, 0x00, 0xD9, 0x55, 0x00, 0x00, 0x2C, 0x56, 0x00, 0x00, 0x79, -/* 00005370 */ 0x56, 0x00, 0x00, 0xC6, 0x56, 0x00, 0x00, 0x20, 0x57, 0x00, 0x00, 0x39, 0x57, 0x00, 0x00, 0x41, -/* 00005380 */ 0x57, 0x00, 0x00, 0x98, 0x57, 0x00, 0x00, 0xBF, 0x57, 0x00, 0x00, 0xE2, 0x57, 0x00, 0x00, 0x10, -/* 00005390 */ 0x58, 0x00, 0x00, 0x58, 0x58, 0x00, 0x00, 0xC5, 0x58, 0x00, 0x00, 0xD3, 0x58, 0x00, 0x00, 0xF6, -/* 000053A0 */ 0x58, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x01, 0x59, 0x00, 0x00, 0x1A, 0x59, 0x00, 0x00, 0x21, -/* 000053B0 */ 0x59, 0x00, 0x00, 0x22, 0x59, 0x00, 0x00, 0x3C, 0x59, 0x00, 0x00, 0x66, 0x59, 0x00, 0x00, 0x90, -/* 000053C0 */ 0x59, 0x00, 0x00, 0x96, 0x59, 0x00, 0x00, 0x97, 0x59, 0x00, 0x00, 0x9F, 0x59, 0x00, 0x00, 0x0A, -/* 000053D0 */ 0x5A, 0x00, 0x00, 0x3A, 0x5A, 0x00, 0x00, 0x41, 0x5A, 0x00, 0x00, 0x7A, 0x5A, 0x00, 0x00, 0x82, -/* 000053E0 */ 0x5A, 0x00, 0x00, 0xAA, 0x5A, 0x00, 0x00, 0xEF, 0x5A, 0x00, 0x00, 0x53, 0x5B, 0x00, 0x00, 0xD3, -/* 000053F0 */ 0x5B, 0x00, 0x00, 0xD4, 0x5B, 0x00, 0x00, 0x46, 0x5C, 0x00, 0x00, 0x77, 0x5C, 0x00, 0x00, 0xC6, -/* 00005400 */ 0x5C, 0x00, 0x00, 0x18, 0x5D, 0x00, 0x00, 0x6C, 0x5D, 0x00, 0x00, 0xA4, 0x5D, 0x00, 0x00, 0xF6, -/* 00005410 */ 0x5D, 0x00, 0x00, 0x48, 0x5E, 0x00, 0x00, 0x9D, 0x5E, 0x00, 0x00, 0x09, 0x5F, 0x00, 0x00, 0x5F, -/* 00005420 */ 0x5F, 0x00, 0x00, 0x60, 0x5F, 0x00, 0x00, 0x7F, 0x5F, 0x00, 0x00, 0x9E, 0x5F, 0x00, 0x00, 0xD0, -/* 00005430 */ 0x5F, 0x00, 0x00, 0xD1, 0x5F, 0x00, 0x00, 0x48, 0x60, 0x00, 0x00, 0xB5, 0x60, 0x00, 0x00, 0x08, -/* 00005440 */ 0x61, 0x00, 0x00, 0x4B, 0x61, 0x00, 0x00, 0x4C, 0x61, 0x00, 0x00, 0xC9, 0x61, 0x00, 0x00, 0x5D, -/* 00005450 */ 0x62, 0x00, 0x00, 0xE0, 0x62, 0x00, 0x00, 0x63, 0x63, 0x00, 0x00, 0xD6, 0x63, 0x00, 0x00, 0xD7, -/* 00005460 */ 0x63, 0x00, 0x00, 0x41, 0x64, 0x00, 0x00, 0xBA, 0x64, 0x00, 0x00, 0xBB, 0x64, 0x00, 0x00, 0x1E, -/* 00005470 */ 0x65, 0x00, 0x00, 0xAD, 0x65, 0x00, 0x00, 0x56, 0x66, 0x00, 0x00, 0xEA, 0x66, 0x00, 0x00, 0x81, -/* 00005480 */ 0x67, 0x00, 0x00, 0x25, 0x68, 0x00, 0x00, 0x39, 0x68, 0x00, 0x00, 0x3A, 0x68, 0x00, 0x00, 0x6A, -/* 00005490 */ 0x68, 0x00, 0x00, 0xD6, 0x68, 0x00, 0x00, 0x46, 0x69, 0x00, 0x00, 0xB6, 0x69, 0x00, 0x00, 0x28, -/* 000054A0 */ 0x6A, 0x00, 0x00, 0x9C, 0x6A, 0x00, 0x00, 0x10, 0x6B, 0x00, 0x00, 0x5A, 0x6B, 0x00, 0x00, 0x5B, -/* 000054B0 */ 0x6B, 0x00, 0x00, 0xC8, 0x6B, 0x00, 0x00, 0xC9, 0x6B, 0x00, 0x00, 0x15, 0x6C, 0x00, 0x00, 0x89, -/* 000054C0 */ 0x6C, 0x00, 0x00, 0x1B, 0x6D, 0x00, 0x00, 0xAD, 0x6D, 0x00, 0x00, 0xAE, 0x6D, 0x00, 0x00, 0xE2, -/* 000054D0 */ 0x6D, 0x00, 0x00, 0x06, 0x6E, 0x00, 0x00, 0x42, 0x6E, 0x00, 0x00, 0x5C, 0x6E, 0x00, 0x00, 0x7B, -/* 000054E0 */ 0x6E, 0x00, 0x00, 0x89, 0x6E, 0x00, 0x00, 0x8A, 0x6E, 0x00, 0x00, 0xC3, 0x6E, 0x00, 0x00, 0xDD, -/* 000054F0 */ 0x6E, 0x00, 0x00, 0xFA, 0x6E, 0x00, 0x00, 0x08, 0x6F, 0x00, 0x00, 0x09, 0x6F, 0x00, 0x00, 0x2D, -/* 00005500 */ 0x6F, 0x00, 0x00, 0x52, 0x6F, 0x00, 0x00, 0x73, 0x6F, 0x00, 0x00, 0x8F, 0x6F, 0x00, 0x00, 0xB6, -/* 00005510 */ 0x6F, 0x00, 0x00, 0xE2, 0x6F, 0x00, 0x00, 0xF0, 0x6F, 0x00, 0x00, 0xF1, 0x6F, 0x00, 0x00, 0x0D, -/* 00005520 */ 0x70, 0x00, 0x00, 0x34, 0x70, 0x00, 0x00, 0x60, 0x70, 0x00, 0x00, 0x6E, 0x70, 0x00, 0x00, 0x6F, -/* 00005530 */ 0x70, 0x00, 0x00, 0x8B, 0x70, 0x00, 0x00, 0xB4, 0x70, 0x00, 0x00, 0xC2, 0x70, 0x00, 0x00, 0xC3, -/* 00005540 */ 0x70, 0x00, 0x00, 0xDF, 0x70, 0x00, 0x00, 0x0A, 0x71, 0x00, 0x00, 0x0B, 0x71, 0x00, 0x00, 0x55, -/* 00005550 */ 0x71, 0x00, 0x00, 0x94, 0x71, 0x00, 0x00, 0xD6, 0x71, 0x00, 0x00, 0x0B, 0x72, 0x00, 0x00, 0x2D, -/* 00005560 */ 0x72, 0x00, 0x00, 0x43, 0x72, 0x00, 0x00, 0x44, 0x72, 0x00, 0x00, 0x5F, 0x72, 0x00, 0x00, 0xC5, -/* 00005570 */ 0x72, 0x00, 0x00, 0x34, 0x73, 0x00, 0x00, 0x78, 0x73, 0x00, 0x00, 0xCE, 0x73, 0x00, 0x00, 0xE4, -/* 00005580 */ 0x73, 0x00, 0x00, 0xE5, 0x73, 0x00, 0x00, 0x0A, 0x74, 0x00, 0x00, 0x7C, 0x74, 0x00, 0x00, 0xDD, -/* 00005590 */ 0x74, 0x00, 0x00, 0x38, 0x75, 0x00, 0x00, 0x4E, 0x75, 0x00, 0x00, 0x4F, 0x75, 0x00, 0x00, 0xAD, -/* 000055A0 */ 0x75, 0x00, 0x00, 0xC8, 0x75, 0x00, 0x00, 0xDA, 0x75, 0x00, 0x00, 0xE8, 0x75, 0x00, 0x00, 0xE9, -/* 000055B0 */ 0x75, 0x00, 0x00, 0x1B, 0x76, 0x00, 0x00, 0x1C, 0x76, 0x00, 0x00, 0x34, 0x76, 0x00, 0x00, 0x3F, -/* 000055C0 */ 0x76, 0x00, 0x00, 0x49, 0x76, 0x00, 0x00, 0x4A, 0x76, 0x00, 0x00, 0x81, 0x76, 0x00, 0x00, 0xA9, -/* 000055D0 */ 0x76, 0x00, 0x00, 0xAA, 0x76, 0x00, 0x00, 0xCB, 0x76, 0x00, 0x00, 0xF3, 0x76, 0x00, 0x00, 0xFD, -/* 000055E0 */ 0x76, 0x00, 0x00, 0xFE, 0x76, 0x00, 0x00, 0x4A, 0x77, 0x00, 0x00, 0x50, 0x77, 0x00, 0x00, 0x51, -/* 000055F0 */ 0x77, 0x00, 0x00, 0x59, 0x77, 0x00, 0x00, 0xB4, 0x77, 0x00, 0x00, 0xE3, 0x77, 0x00, 0x00, 0xEA, -/* 00005600 */ 0x77, 0x00, 0x00, 0x3D, 0x78, 0x00, 0x00, 0x9A, 0x78, 0x00, 0x00, 0xF5, 0x78, 0x00, 0x00, 0x1F, -/* 00005610 */ 0x79, 0x00, 0x00, 0x26, 0x79, 0x00, 0x00, 0x5A, 0x79, 0x00, 0x00, 0x61, 0x79, 0x00, 0x00, 0x93, -/* 00005620 */ 0x79, 0x00, 0x00, 0xAD, 0x79, 0x00, 0x00, 0xB5, 0x79, 0x00, 0x00, 0xF4, 0x79, 0x00, 0x00, 0x21, -/* 00005630 */ 0x7A, 0x00, 0x00, 0x40, 0x7A, 0x00, 0x00, 0x5A, 0x7A, 0x00, 0x00, 0x64, 0x7A, 0x00, 0x00, 0x65, -/* 00005640 */ 0x7A, 0x00, 0x00, 0x89, 0x7A, 0x00, 0x00, 0xA8, 0x7A, 0x00, 0x00, 0xE4, 0x7A, 0x00, 0x00, 0x1B, -/* 00005650 */ 0x7B, 0x00, 0x00, 0x1C, 0x7B, 0x00, 0x00, 0x59, 0x7B, 0x00, 0x00, 0x77, 0x7B, 0x00, 0x00, 0x85, -/* 00005660 */ 0x7B, 0x00, 0x00, 0x8F, 0x7B, 0x00, 0x00, 0x90, 0x7B, 0x00, 0x00, 0xB1, 0x7B, 0x00, 0x00, 0xF5, -/* 00005670 */ 0x7B, 0x00, 0x00, 0x7D, 0x7C, 0x00, 0x00, 0xB8, 0x7C, 0x00, 0x00, 0xB9, 0x7C, 0x00, 0x00, 0xFB, -/* 00005680 */ 0x7C, 0x00, 0x00, 0x05, 0x7D, 0x00, 0x00, 0x06, 0x7D, 0x00, 0x00, 0x1B, 0x7D, 0x00, 0x00, 0x22, -/* 00005690 */ 0x7D, 0x00, 0x00, 0x23, 0x7D, 0x00, 0x00, 0x2B, 0x7D, 0x00, 0x00, 0x84, 0x7D, 0x00, 0x00, 0xD1, -/* 000056A0 */ 0x7D, 0x00, 0x00, 0xD8, 0x7D, 0x00, 0x00, 0x04, 0x7E, 0x00, 0x00, 0x0B, 0x7E, 0x00, 0x00, 0x61, -/* 000056B0 */ 0x7E, 0x00, 0x00, 0x69, 0x7E, 0x00, 0x00, 0xA1, 0x7E, 0x00, 0x00, 0xCF, 0x7E, 0x00, 0x00, 0xE6, -/* 000056C0 */ 0x7E, 0x00, 0x00, 0xF0, 0x7E, 0x00, 0x00, 0xF1, 0x7E, 0x00, 0x00, 0x0A, 0x7F, 0x00, 0x00, 0x62, -/* 000056D0 */ 0x7F, 0x00, 0x00, 0x93, 0x7F, 0x00, 0x00, 0xA6, 0x7F, 0x00, 0x00, 0xA7, 0x7F, 0x00, 0x00, 0xC1, -/* 000056E0 */ 0x7F, 0x00, 0x00, 0xEE, 0x7F, 0x00, 0x00, 0x09, 0x80, 0x00, 0x00, 0x2F, 0x80, 0x00, 0x00, 0x94, -/* 000056F0 */ 0x80, 0x00, 0x00, 0xD4, 0x80, 0x00, 0x00, 0xE6, 0x80, 0x00, 0x00, 0xE7, 0x80, 0x00, 0x00, 0x1E, -/* 00005700 */ 0x81, 0x00, 0x00, 0x5A, 0x81, 0x00, 0x00, 0x96, 0x81, 0x00, 0x00, 0xA8, 0x81, 0x00, 0x00, 0xA9, -/* 00005710 */ 0x81, 0x00, 0x00, 0xF6, 0x81, 0x00, 0x00, 0x2C, 0x82, 0x00, 0x00, 0x88, 0x82, 0x00, 0x00, 0xC4, -/* 00005720 */ 0x82, 0x00, 0x00, 0x10, 0x83, 0x00, 0x00, 0x44, 0x83, 0x00, 0x00, 0x56, 0x83, 0x00, 0x00, 0x64, -/* 00005730 */ 0x83, 0x00, 0x00, 0x65, 0x83, 0x00, 0x00, 0x79, 0x83, 0x00, 0x00, 0x83, 0x83, 0x00, 0x00, 0x84, -/* 00005740 */ 0x83, 0x00, 0x00, 0x99, 0x83, 0x00, 0x00, 0xA0, 0x83, 0x00, 0x00, 0xA1, 0x83, 0x00, 0x00, 0xA9, -/* 00005750 */ 0x83, 0x00, 0x00, 0x14, 0x84, 0x00, 0x00, 0x1B, 0x84, 0x00, 0x00, 0x47, 0x84, 0x00, 0x00, 0x4E, -/* 00005760 */ 0x84, 0x00, 0x00, 0xBF, 0x84, 0x00, 0x00, 0xF0, 0x84, 0x00, 0x00, 0xF8, 0x84, 0x00, 0x00, 0x4C, -/* 00005770 */ 0x85, 0x00, 0x00, 0x67, 0x85, 0x00, 0x00, 0x9F, 0x85, 0x00, 0x00, 0xE1, 0x85, 0x00, 0x00, 0x3D, -/* 00005780 */ 0x86, 0x00, 0x00, 0x65, 0x86, 0x00, 0x00, 0x73, 0x86, 0x00, 0x00, 0x7F, 0x86, 0x00, 0x00, 0x80, -/* 00005790 */ 0x86, 0x00, 0x00, 0x97, 0x86, 0x00, 0x00, 0x9E, 0x86, 0x00, 0x00, 0x9F, 0x86, 0x00, 0x00, 0xDB, -/* 000057A0 */ 0x86, 0x00, 0x00, 0xDC, 0x86, 0x00, 0x00, 0xE4, 0x86, 0x00, 0x00, 0x33, 0x87, 0x00, 0x00, 0x3A, -/* 000057B0 */ 0x87, 0x00, 0x00, 0x93, 0x87, 0x00, 0x00, 0xBF, 0x87, 0x00, 0x00, 0xC6, 0x87, 0x00, 0x00, 0xEE, -/* 000057C0 */ 0x87, 0x00, 0x00, 0xF5, 0x87, 0x00, 0x00, 0x79, 0x88, 0x00, 0x00, 0xE7, 0x88, 0x00, 0x00, 0x2C, -/* 000057D0 */ 0x89, 0x00, 0x00, 0x71, 0x89, 0x00, 0x00, 0x79, 0x89, 0x00, 0x00, 0xD9, 0x89, 0x00, 0x00, 0x2A, -/* 000057E0 */ 0x8A, 0x00, 0x00, 0x86, 0x8A, 0x00, 0x00, 0xC2, 0x8A, 0x00, 0x00, 0x27, 0x8B, 0x00, 0x00, 0x54, -/* 000057F0 */ 0x8B, 0x00, 0x00, 0x82, 0x8B, 0x00, 0x00, 0xB0, 0x8B, 0x00, 0x00, 0xB1, 0x8B, 0x00, 0x00, 0xE6, -/* 00005800 */ 0x8B, 0x00, 0x00, 0x1B, 0x8C, 0x00, 0x00, 0x53, 0x8C, 0x00, 0x00, 0xA5, 0x8C, 0x00, 0x00, 0x01, -/* 00005810 */ 0x8D, 0x00, 0x00, 0x6F, 0x8D, 0x00, 0x00, 0xE1, 0x8D, 0x00, 0x00, 0x16, 0x8E, 0x00, 0x00, 0x4B, -/* 00005820 */ 0x8E, 0x00, 0x00, 0x55, 0x8E, 0x00, 0x00, 0x5C, 0x8E, 0x00, 0x00, 0x5D, 0x8E, 0x00, 0x00, 0x65, -/* 00005830 */ 0x8E, 0x00, 0x00, 0xBC, 0x8E, 0x00, 0x00, 0xF0, 0x8E, 0x00, 0x00, 0xF7, 0x8E, 0x00, 0x00, 0x1D, -/* 00005840 */ 0x8F, 0x00, 0x00, 0x24, 0x8F, 0x00, 0x00, 0x95, 0x8F, 0x00, 0x00, 0xC6, 0x8F, 0x00, 0x00, 0xE5, -/* 00005850 */ 0x8F, 0x00, 0x00, 0xED, 0x8F, 0x00, 0x00, 0x44, 0x90, 0x00, 0x00, 0x72, 0x90, 0x00, 0x00, 0x8B, -/* 00005860 */ 0x90, 0x00, 0x00, 0xFF, 0x90, 0x00, 0x00, 0x37, 0x91, 0x00, 0x00, 0x82, 0x91, 0x00, 0x00, 0xCD, -/* 00005870 */ 0x91, 0x00, 0x00, 0xCE, 0x91, 0x00, 0x00, 0x0A, 0x92, 0x00, 0x00, 0x7A, 0x92, 0x00, 0x00, 0x84, -/* 00005880 */ 0x92, 0x00, 0x00, 0x85, 0x92, 0x00, 0x00, 0xD2, 0x92, 0x00, 0x00, 0x2B, 0x93, 0x00, 0x00, 0x62, -/* 00005890 */ 0x93, 0x00, 0x00, 0x7F, 0x93, 0x00, 0x00, 0xA0, 0x93, 0x00, 0x00, 0xBF, 0x93, 0x00, 0x00, 0xCB, -/* 000058A0 */ 0x93, 0x00, 0x00, 0xCC, 0x93, 0x00, 0x00, 0xED, 0x93, 0x00, 0x00, 0xF4, 0x93, 0x00, 0x00, 0xF5, -/* 000058B0 */ 0x93, 0x00, 0x00, 0x6C, 0x94, 0x00, 0x00, 0xD5, 0x94, 0x00, 0x00, 0x05, 0x95, 0x00, 0x00, 0x52, -/* 000058C0 */ 0x95, 0x00, 0x00, 0xCF, 0x95, 0x00, 0x00, 0x02, 0x96, 0x00, 0x00, 0x3B, 0x96, 0x00, 0x00, 0x45, -/* 000058D0 */ 0x96, 0x00, 0x00, 0x46, 0x96, 0x00, 0x00, 0x80, 0x96, 0x00, 0x00, 0xBB, 0x96, 0x00, 0x00, 0xF4, -/* 000058E0 */ 0x96, 0x00, 0x00, 0xFE, 0x96, 0x00, 0x00, 0xFF, 0x96, 0x00, 0x00, 0x66, 0x97, 0x00, 0x00, 0x6C, -/* 000058F0 */ 0x97, 0x00, 0x00, 0x6D, 0x97, 0x00, 0x00, 0xC6, 0x97, 0x00, 0x00, 0xF9, 0x97, 0x00, 0x00, 0x32, -/* 00005900 */ 0x98, 0x00, 0x00, 0x3C, 0x98, 0x00, 0x00, 0x3D, 0x98, 0x00, 0x00, 0x77, 0x98, 0x00, 0x00, 0xB2, -/* 00005910 */ 0x98, 0x00, 0x00, 0xEB, 0x98, 0x00, 0x00, 0xF5, 0x98, 0x00, 0x00, 0xF6, 0x98, 0x00, 0x00, 0x26, -/* 00005920 */ 0x99, 0x00, 0x00, 0x2C, 0x99, 0x00, 0x00, 0x2D, 0x99, 0x00, 0x00, 0x9E, 0x99, 0x00, 0x00, 0xD5, -/* 00005930 */ 0x99, 0x00, 0x00, 0x2B, 0x9A, 0x00, 0x00, 0xAE, 0x9A, 0x00, 0x00, 0x21, 0x9B, 0x00, 0x00, 0x7A, -/* 00005940 */ 0x9B, 0x00, 0x00, 0xD4, 0x9B, 0x00, 0x00, 0x33, 0x9C, 0x00, 0x00, 0xA9, 0x9C, 0x00, 0x00, 0xC8, -/* 00005950 */ 0x9C, 0x00, 0x00, 0x0D, 0x9D, 0x00, 0x00, 0x77, 0x9D, 0x00, 0x00, 0xD8, 0x9D, 0x00, 0x00, 0xE4, -/* 00005960 */ 0x9D, 0x00, 0x00, 0x43, 0x9E, 0x00, 0x00, 0x7B, 0x9E, 0x00, 0x00, 0xA5, 0x9E, 0x00, 0x00, 0xC2, -/* 00005970 */ 0x9E, 0x00, 0x00, 0xE1, 0x9E, 0x00, 0x00, 0x01, 0x9F, 0x00, 0x00, 0x0D, 0x9F, 0x00, 0x00, 0x45, -/* 00005980 */ 0x9F, 0x00, 0x00, 0x6D, 0x9F, 0x00, 0x00, 0x89, 0x9F, 0x00, 0x00, 0xA8, 0x9F, 0x00, 0x00, 0xC7, -/* 00005990 */ 0x9F, 0x00, 0x00, 0xD3, 0x9F, 0x00, 0x00, 0xD9, 0x9F, 0x00, 0x00, 0xDA, 0x9F, 0x00, 0x00, 0xE2, -/* 000059A0 */ 0x9F, 0x00, 0x00, 0x59, 0xA0, 0x00, 0x00, 0x60, 0xA0, 0x00, 0x00, 0xD9, 0xA0, 0x00, 0x00, 0x55, -/* 000059B0 */ 0xA1, 0x00, 0x00, 0xCD, 0xA1, 0x00, 0x00, 0x2E, 0xA2, 0x00, 0x00, 0x36, 0xA2, 0x00, 0x00, 0x86, -/* 000059C0 */ 0xA2, 0x00, 0x00, 0xAB, 0xA2, 0x00, 0x00, 0xD6, 0xA2, 0x00, 0x00, 0x18, 0xA3, 0x00, 0x00, 0x8B, -/* 000059D0 */ 0xA3, 0x00, 0x00, 0xA3, 0xA3, 0x00, 0x00, 0xB1, 0xA3, 0x00, 0x00, 0xB2, 0xA3, 0x00, 0x00, 0xEF, -/* 000059E0 */ 0xA3, 0x00, 0x00, 0x24, 0xA4, 0x00, 0x00, 0x32, 0xA4, 0x00, 0x00, 0x3E, 0xA4, 0x00, 0x00, 0x3F, -/* 000059F0 */ 0xA4, 0x00, 0x00, 0x85, 0xA4, 0x00, 0x00, 0x8C, 0xA4, 0x00, 0x00, 0x8D, 0xA4, 0x00, 0x00, 0xC2, -/* 00005A00 */ 0xA4, 0x00, 0x00, 0xE6, 0xA4, 0x00, 0x00, 0x22, 0xA5, 0x00, 0x00, 0x36, 0xA5, 0x00, 0x00, 0x40, -/* 00005A10 */ 0xA5, 0x00, 0x00, 0x41, 0xA5, 0x00, 0x00, 0x8C, 0xA5, 0x00, 0x00, 0xD2, 0xA5, 0x00, 0x00, 0x29, -/* 00005A20 */ 0xA6, 0x00, 0x00, 0x2A, 0xA6, 0x00, 0x00, 0x8A, 0xA6, 0x00, 0x00, 0xDC, 0xA6, 0x00, 0x00, 0x3B, -/* 00005A30 */ 0xA7, 0x00, 0x00, 0x3C, 0xA7, 0x00, 0x00, 0x60, 0xA7, 0x00, 0x00, 0xCD, 0xA7, 0x00, 0x00, 0x22, -/* 00005A40 */ 0xA8, 0x00, 0x00, 0x66, 0xA8, 0x00, 0x00, 0xCE, 0xA8, 0x00, 0x00, 0xCF, 0xA8, 0x00, 0x00, 0x43, -/* 00005A50 */ 0xA9, 0x00, 0x00, 0x6B, 0xA9, 0x00, 0x00, 0xAE, 0xA9, 0x00, 0x00, 0xDE, 0xA9, 0x00, 0x00, 0x05, -/* 00005A60 */ 0xAA, 0x00, 0x00, 0x59, 0xAA, 0x00, 0x00, 0x5A, 0xAA, 0x00, 0x00, 0xDC, 0xAA, 0x00, 0x00, 0x36, -/* 00005A70 */ 0xAB, 0x00, 0x00, 0x37, 0xAB, 0x00, 0x00, 0xA6, 0xAB, 0x00, 0x00, 0xA7, 0xAB, 0x00, 0x00, 0xD8, -/* 00005A80 */ 0xAB, 0x00, 0x00, 0xD9, 0xAB, 0x00, 0x00, 0xF6, 0xAB, 0x00, 0x00, 0x01, 0xAC, 0x00, 0x00, 0x02, -/* 00005A90 */ 0xAC, 0x00, 0x00, 0x27, 0xAC, 0x00, 0x00, 0x75, 0xAC, 0x00, 0x00, 0x0E, 0xAD, 0x00, 0x00, 0x45, -/* 00005AA0 */ 0xAD, 0x00, 0x00, 0x9B, 0xAD, 0x00, 0x00, 0xA9, 0xAD, 0x00, 0x00, 0xAA, 0xAD, 0x00, 0x00, 0xD4, -/* 00005AB0 */ 0xAD, 0x00, 0x00, 0xFE, 0xAD, 0x00, 0x00, 0xFF, 0xAD, 0x00, 0x00, 0x77, 0xAE, 0x00, 0x00, 0xD2, -/* 00005AC0 */ 0xAE, 0x00, 0x00, 0xEF, 0xAE, 0x00, 0x00, 0x31, 0xAF, 0x00, 0x00, 0x6E, 0xAF, 0x00, 0x00, 0xA8, -/* 00005AD0 */ 0xAF, 0x00, 0x00, 0xFF, 0xAF, 0x00, 0x00, 0x11, 0xB0, 0x00, 0x00, 0x12, 0xB0, 0x00, 0x00, 0x49, -/* 00005AE0 */ 0xB0, 0x00, 0x00, 0x5E, 0xB0, 0x00, 0x00, 0x88, 0xB0, 0x00, 0x00, 0xCB, 0xB0, 0x00, 0x00, 0xD9, -/* 00005AF0 */ 0xB0, 0x00, 0x00, 0xDA, 0xB0, 0x00, 0x00, 0x50, 0xB1, 0x00, 0x00, 0x88, 0xB1, 0x00, 0x00, 0x89, -/* 00005B00 */ 0xB1, 0x00, 0x00, 0xEB, 0xB1, 0x00, 0x00, 0x10, 0xB2, 0x00, 0x00, 0x24, 0xB2, 0x00, 0x00, 0x2E, -/* 00005B10 */ 0xB2, 0x00, 0x00, 0x2F, 0xB2, 0x00, 0x00, 0x87, 0xB2, 0x00, 0x00, 0xED, 0xB2, 0x00, 0x00, 0x21, -/* 00005B20 */ 0xB3, 0x00, 0x00, 0x9B, 0xB3, 0x00, 0x00, 0xD2, 0xB3, 0x00, 0x00, 0x09, 0xB4, 0x00, 0x00, 0x17, -/* 00005B30 */ 0xB4, 0x00, 0x00, 0x18, 0xB4, 0x00, 0x00, 0x47, 0xB4, 0x00, 0x00, 0x6F, 0xB4, 0x00, 0x00, 0xB0, -/* 00005B40 */ 0xB4, 0x00, 0x00, 0xBE, 0xB4, 0x00, 0x00, 0xBF, 0xB4, 0x00, 0x00, 0xF2, 0xB4, 0x00, 0x00, 0x30, -/* 00005B50 */ 0xB5, 0x00, 0x00, 0x31, 0xB5, 0x00, 0x00, 0x5F, 0xB5, 0x00, 0x00, 0x8A, 0xB5, 0x00, 0x00, 0xC7, -/* 00005B60 */ 0xB5, 0x00, 0x00, 0xD5, 0xB5, 0x00, 0x00, 0xD6, 0xB5, 0x00, 0x00, 0x16, 0xB6, 0x00, 0x00, 0x17, -/* 00005B70 */ 0xB6, 0x00, 0x00, 0x3C, 0xB6, 0x00, 0x00, 0x7A, 0xB6, 0x00, 0x00, 0xAD, 0xB6, 0x00, 0x00, 0xC5, -/* 00005B80 */ 0xB6, 0x00, 0x00, 0xD1, 0xB6, 0x00, 0x00, 0xD2, 0xB6, 0x00, 0x00, 0x38, 0xB7, 0x00, 0x00, 0x64, -/* 00005B90 */ 0xB7, 0x00, 0x00, 0xBE, 0xB7, 0x00, 0x00, 0xCC, 0xB7, 0x00, 0x00, 0xCD, 0xB7, 0x00, 0x00, 0x0E, -/* 00005BA0 */ 0xB8, 0x00, 0x00, 0x61, 0xB8, 0x00, 0x00, 0xBB, 0xB8, 0x00, 0x00, 0xC9, 0xB8, 0x00, 0x00, 0xCA, -/* 00005BB0 */ 0xB8, 0x00, 0x00, 0x46, 0xB9, 0x00, 0x00, 0x52, 0xB9, 0x00, 0x00, 0x53, 0xB9, 0x00, 0x00, 0x87, -/* 00005BC0 */ 0xB9, 0x00, 0x00, 0xDC, 0xB9, 0x00, 0x00, 0x6B, 0xBA, 0x00, 0x00, 0x00, 0xBB, 0x00, 0x00, 0x0C, -/* 00005BD0 */ 0xBB, 0x00, 0x00, 0x7B, 0xBB, 0x00, 0x00, 0xBB, 0xBB, 0x00, 0x00, 0xE4, 0xBB, 0x00, 0x00, 0x01, -/* 00005BE0 */ 0xBC, 0x00, 0x00, 0x20, 0xBC, 0x00, 0x00, 0x40, 0xBC, 0x00, 0x00, 0x4C, 0xBC, 0x00, 0x00, 0x87, -/* 00005BF0 */ 0xBC, 0x00, 0x00, 0xB7, 0xBC, 0x00, 0x00, 0xD3, 0xBC, 0x00, 0x00, 0xF2, 0xBC, 0x00, 0x00, 0x12, -/* 00005C00 */ 0xBD, 0x00, 0x00, 0x1E, 0xBD, 0x00, 0x00, 0x1F, 0xBD, 0x00, 0x00, 0x51, 0xBD, 0x00, 0x00, 0x74, -/* 00005C10 */ 0xBD, 0x00, 0x00, 0x91, 0xBD, 0x00, 0x00, 0xB0, 0xBD, 0x00, 0x00, 0xD0, 0xBD, 0x00, 0x00, 0xDC, -/* 00005C20 */ 0xBD, 0x00, 0x00, 0x18, 0xBE, 0x00, 0x00, 0x19, 0xBE, 0x00, 0x00, 0x57, 0xBE, 0x00, 0x00, 0x74, -/* 00005C30 */ 0xBE, 0x00, 0x00, 0x90, 0xBE, 0x00, 0x00, 0xAF, 0xBE, 0x00, 0x00, 0xCE, 0xBE, 0x00, 0x00, 0xDA, -/* 00005C40 */ 0xBE, 0x00, 0x00, 0x1C, 0xBF, 0x00, 0x00, 0x4C, 0xBF, 0x00, 0x00, 0x7C, 0xBF, 0x00, 0x00, 0xE2, -/* 00005C50 */ 0xBF, 0x00, 0x00, 0xF4, 0xBF, 0x00, 0x00, 0x39, 0xC0, 0x00, 0x00, 0x90, 0xC0, 0x00, 0x00, 0xF6, -/* 00005C60 */ 0xC0, 0x00, 0x00, 0x08, 0xC1, 0x00, 0x00, 0x09, 0xC1, 0x00, 0x00, 0x2B, 0xC1, 0x00, 0x00, 0x49, -/* 00005C70 */ 0xC1, 0x00, 0x00, 0x66, 0xC1, 0x00, 0x00, 0x89, 0xC1, 0x00, 0x00, 0xB2, 0xC1, 0x00, 0x00, 0xD3, -/* 00005C80 */ 0xC1, 0x00, 0x00, 0xF2, 0xC1, 0x00, 0x00, 0x13, 0xC2, 0x00, 0x00, 0x26, 0xC2, 0x00, 0x00, 0x27, -/* 00005C90 */ 0xC2, 0x00, 0x00, 0x6C, 0xC2, 0x00, 0x00, 0x7B, 0xC2, 0x00, 0x00, 0x97, 0xC2, 0x00, 0x00, 0xB6, -/* 00005CA0 */ 0xC2, 0x00, 0x00, 0xD5, 0xC2, 0x00, 0x00, 0xE1, 0xC2, 0x00, 0x00, 0xE2, 0xC2, 0x00, 0x00, 0x5B, -/* 00005CB0 */ 0xC3, 0x00, 0x00, 0x84, 0xC3, 0x00, 0x00, 0xB0, 0xC3, 0x00, 0x00, 0x0A, 0xC4, 0x00, 0x00, 0x18, -/* 00005CC0 */ 0xC4, 0x00, 0x00, 0x19, 0xC4, 0x00, 0x00, 0x5A, 0xC4, 0x00, 0x00, 0xAD, 0xC4, 0x00, 0x00, 0x07, -/* 00005CD0 */ 0xC5, 0x00, 0x00, 0x15, 0xC5, 0x00, 0x00, 0x16, 0xC5, 0x00, 0x00, 0x44, 0xC5, 0x00, 0x00, 0x4F, -/* 00005CE0 */ 0xC5, 0x00, 0x00, 0x7E, 0xC5, 0x00, 0x00, 0xA0, 0xC5, 0x00, 0x00, 0xBD, 0xC5, 0x00, 0x00, 0xDC, -/* 00005CF0 */ 0xC5, 0x00, 0x00, 0xFC, 0xC5, 0x00, 0x00, 0x08, 0xC6, 0x00, 0x00, 0x42, 0xC6, 0x00, 0x00, 0x81, -/* 00005D00 */ 0xC6, 0x00, 0x00, 0xA0, 0xC6, 0x00, 0x00, 0xBF, 0xC6, 0x00, 0x00, 0xCB, 0xC6, 0x00, 0x00, 0xCC, -/* 00005D10 */ 0xC6, 0x00, 0x00, 0xE5, 0xC6, 0x00, 0x00, 0xEF, 0xC6, 0x00, 0x00, 0xF0, 0xC6, 0x00, 0x00, 0x2A, -/* 00005D20 */ 0xC7, 0x00, 0x00, 0x50, 0xC7, 0x00, 0x00, 0x8C, 0xC7, 0x00, 0x00, 0xA0, 0xC7, 0x00, 0x00, 0xAA, -/* 00005D30 */ 0xC7, 0x00, 0x00, 0xAB, 0xC7, 0x00, 0x00, 0xF4, 0xC7, 0x00, 0x00, 0x3A, 0xC8, 0x00, 0x00, 0x91, -/* 00005D40 */ 0xC8, 0x00, 0x00, 0x92, 0xC8, 0x00, 0x00, 0xB6, 0xC8, 0x00, 0x00, 0x29, 0xC9, 0x00, 0x00, 0x2A, -/* 00005D50 */ 0xC9, 0x00, 0x00, 0x8C, 0xC9, 0x00, 0x00, 0xAE, 0xC9, 0x00, 0x00, 0xD5, 0xC9, 0x00, 0x00, 0xD6, -/* 00005D60 */ 0xC9, 0x00, 0x00, 0x46, 0xCA, 0x00, 0x00, 0x64, 0xCA, 0x00, 0x00, 0xB5, 0xCA, 0x00, 0x00, 0xEB, -/* 00005D70 */ 0xCA, 0x00, 0x00, 0xEC, 0xCA, 0x00, 0x00, 0x47, 0xCB, 0x00, 0x00, 0x98, 0xCB, 0x00, 0x00, 0xD5, -/* 00005D80 */ 0xCB, 0x00, 0x00, 0x15, 0xCC, 0x00, 0x00, 0x4A, 0xCC, 0x00, 0x00, 0x58, 0xCC, 0x00, 0x00, 0x59, -/* 00005D90 */ 0xCC, 0x00, 0x00, 0x76, 0xCC, 0x00, 0x00, 0x95, 0xCC, 0x00, 0x00, 0xC9, 0xCC, 0x00, 0x00, 0xF1, -/* 00005DA0 */ 0xCC, 0x00, 0x00, 0x2E, 0xCD, 0x00, 0x00, 0x3C, 0xCD, 0x00, 0x00, 0x3D, 0xCD, 0x00, 0x00, 0xB6, -/* 00005DB0 */ 0xCD, 0x00, 0x00, 0xD5, 0xCD, 0x00, 0x00, 0x0A, 0xCE, 0x00, 0x00, 0x79, 0xCE, 0x00, 0x00, 0x87, -/* 00005DC0 */ 0xCE, 0x00, 0x00, 0x88, 0xCE, 0x00, 0x00, 0xB2, 0xCE, 0x00, 0x00, 0xD1, 0xCE, 0x00, 0x00, 0xF8, -/* 00005DD0 */ 0xCE, 0x00, 0x00, 0x1F, 0xCF, 0x00, 0x00, 0x34, 0xCF, 0x00, 0x00, 0x55, 0xCF, 0x00, 0x00, 0x80, -/* 00005DE0 */ 0xCF, 0x00, 0x00, 0xA5, 0xCF, 0x00, 0x00, 0xBE, 0xCF, 0x00, 0x00, 0xE3, 0xCF, 0x00, 0x00, 0xF5, -/* 00005DF0 */ 0xCF, 0x00, 0x00, 0x03, 0xD0, 0x00, 0x00, 0x04, 0xD0, 0x00, 0x00, 0x54, 0xD0, 0x00, 0x00, 0x55, -/* 00005E00 */ 0xD0, 0x00, 0x00, 0xB1, 0xD0, 0x00, 0x00, 0xB2, 0xD0, 0x00, 0x00, 0xE1, 0xD0, 0x00, 0x00, 0xE2, -/* 00005E10 */ 0xD0, 0x00, 0x00, 0x2E, 0xD1, 0x00, 0x00, 0x5A, 0xD1, 0x00, 0x00, 0x5B, 0xD1, 0x00, 0x00, 0x72, -/* 00005E20 */ 0xD1, 0x00, 0x00, 0x7D, 0xD1, 0x00, 0x00, 0x7E, 0xD1, 0x00, 0x00, 0xEA, 0xD1, 0x00, 0x00, 0x33, -/* 00005E30 */ 0xD2, 0x00, 0x00, 0x90, 0xD2, 0x00, 0x00, 0x9E, 0xD2, 0x00, 0x00, 0x9F, 0xD2, 0x00, 0x00, 0xCB, -/* 00005E40 */ 0xD2, 0x00, 0x00, 0x18, 0xD3, 0x00, 0x00, 0x19, 0xD3, 0x00, 0x00, 0x48, 0xD3, 0x00, 0x00, 0xC4, -/* 00005E50 */ 0xD3, 0x00, 0x00, 0xFD, 0xD3, 0x00, 0x00, 0xFE, 0xD3, 0x00, 0x00, 0x23, 0xD4, 0x00, 0x00, 0x37, -/* 00005E60 */ 0xD4, 0x00, 0x00, 0x41, 0xD4, 0x00, 0x00, 0x42, 0xD4, 0x00, 0x00, 0xC8, 0xD4, 0x00, 0x00, 0xFF, -/* 00005E70 */ 0xD4, 0x00, 0x00, 0x3A, 0xD5, 0x00, 0x00, 0x48, 0xD5, 0x00, 0x00, 0x49, 0xD5, 0x00, 0x00, 0x7A, -/* 00005E80 */ 0xD5, 0x00, 0x00, 0x7B, 0xD5, 0x00, 0x00, 0xA3, 0xD5, 0x00, 0x00, 0xE8, 0xD5, 0x00, 0x00, 0xF6, -/* 00005E90 */ 0xD5, 0x00, 0x00, 0xF7, 0xD5, 0x00, 0x00, 0x2A, 0xD6, 0x00, 0x00, 0x68, 0xD6, 0x00, 0x00, 0x96, -/* 00005EA0 */ 0xD6, 0x00, 0x00, 0xC1, 0xD6, 0x00, 0x00, 0xFE, 0xD6, 0x00, 0x00, 0x0C, 0xD7, 0x00, 0x00, 0x0D, -/* 00005EB0 */ 0xD7, 0x00, 0x00, 0x51, 0xD7, 0x00, 0x00, 0x52, 0xD7, 0x00, 0x00, 0x8D, 0xD7, 0x00, 0x00, 0xBF, -/* 00005EC0 */ 0xD7, 0x00, 0x00, 0xC0, 0xD7, 0x00, 0x00, 0xD8, 0xD7, 0x00, 0x00, 0xE4, 0xD7, 0x00, 0x00, 0xE5, -/* 00005ED0 */ 0xD7, 0x00, 0x00, 0x49, 0xD8, 0x00, 0x00, 0x6F, 0xD8, 0x00, 0x00, 0x70, 0xD8, 0x00, 0x00, 0x9C, -/* 00005EE0 */ 0xD8, 0x00, 0x00, 0xFD, 0xD8, 0x00, 0x00, 0x0B, 0xD9, 0x00, 0x00, 0x0C, 0xD9, 0x00, 0x00, 0x4D, -/* 00005EF0 */ 0xD9, 0x00, 0x00, 0xA4, 0xD9, 0x00, 0x00, 0x05, 0xDA, 0x00, 0x00, 0x13, 0xDA, 0x00, 0x00, 0x14, -/* 00005F00 */ 0xDA, 0x00, 0x00, 0x92, 0xDA, 0x00, 0x00, 0x9E, 0xDA, 0x00, 0x00, 0x9F, 0xDA, 0x00, 0x00, 0x18, -/* 00005F10 */ 0xDB, 0x00, 0x00, 0x3E, 0xDB, 0x00, 0x00, 0x3F, 0xDB, 0x00, 0x00, 0x6B, 0xDB, 0x00, 0x00, 0xD3, -/* 00005F20 */ 0xDB, 0x00, 0x00, 0xE1, 0xDB, 0x00, 0x00, 0xE2, 0xDB, 0x00, 0x00, 0x23, 0xDC, 0x00, 0x00, 0x7A, -/* 00005F30 */ 0xDC, 0x00, 0x00, 0xE2, 0xDC, 0x00, 0x00, 0xF0, 0xDC, 0x00, 0x00, 0xF1, 0xDC, 0x00, 0x00, 0x6E, -/* 00005F40 */ 0xDD, 0x00, 0x00, 0x7A, 0xDD, 0x00, 0x00, 0x7B, 0xDD, 0x00, 0x00, 0xAF, 0xDD, 0x00, 0x00, 0x0C, -/* 00005F50 */ 0xDE, 0x00, 0x00, 0xA3, 0xDE, 0x00, 0x00, 0x36, 0xDF, 0x00, 0x00, 0x42, 0xDF, 0x00, 0x00, 0xB9, -/* 00005F60 */ 0xDF, 0x00, 0x00, 0xFD, 0xDF, 0x00, 0x00, 0x26, 0xE0, 0x00, 0x00, 0x43, 0xE0, 0x00, 0x00, 0x62, -/* 00005F70 */ 0xE0, 0x00, 0x00, 0x82, 0xE0, 0x00, 0x00, 0x8E, 0xE0, 0x00, 0x00, 0xCD, 0xE0, 0x00, 0x00, 0x01, -/* 00005F80 */ 0xE1, 0x00, 0x00, 0x1D, 0xE1, 0x00, 0x00, 0x3C, 0xE1, 0x00, 0x00, 0x5C, 0xE1, 0x00, 0x00, 0x68, -/* 00005F90 */ 0xE1, 0x00, 0x00, 0x69, 0xE1, 0x00, 0x00, 0x9F, 0xE1, 0x00, 0x00, 0xC6, 0xE1, 0x00, 0x00, 0xE3, -/* 00005FA0 */ 0xE1, 0x00, 0x00, 0x02, 0xE2, 0x00, 0x00, 0x23, 0xE2, 0x00, 0x00, 0x2F, 0xE2, 0x00, 0x00, 0x6F, -/* 00005FB0 */ 0xE2, 0x00, 0x00, 0xB1, 0xE2, 0x00, 0x00, 0xD2, 0xE2, 0x00, 0x00, 0xEE, 0xE2, 0x00, 0x00, 0x0D, -/* 00005FC0 */ 0xE3, 0x00, 0x00, 0x2D, 0xE3, 0x00, 0x00, 0x39, 0xE3, 0x00, 0x00, 0x3A, 0xE3, 0x00, 0x00, 0x80, -/* 00005FD0 */ 0xE3, 0x00, 0x00, 0xB0, 0xE3, 0x00, 0x00, 0xE0, 0xE3, 0x00, 0x00, 0x4E, 0xE4, 0x00, 0x00, 0x60, -/* 00005FE0 */ 0xE4, 0x00, 0x00, 0xA5, 0xE4, 0x00, 0x00, 0x00, 0xE5, 0x00, 0x00, 0x6E, 0xE5, 0x00, 0x00, 0x80, -/* 00005FF0 */ 0xE5, 0x00, 0x00, 0x81, 0xE5, 0x00, 0x00, 0xFF, 0xE5, 0x00, 0x00, 0x7D, 0xE6, 0x00, 0x00, 0xA1, -/* 00006000 */ 0xE6, 0x00, 0x00, 0xA2, 0xE6, 0x00, 0x00, 0xE7, 0xE6, 0x00, 0x00, 0xF6, 0xE6, 0x00, 0x00, 0x12, -/* 00006010 */ 0xE7, 0x00, 0x00, 0x31, 0xE7, 0x00, 0x00, 0x51, 0xE7, 0x00, 0x00, 0x5D, 0xE7, 0x00, 0x00, 0x5E, -/* 00006020 */ 0xE7, 0x00, 0x00, 0xDA, 0xE7, 0x00, 0x00, 0x02, 0xE8, 0x00, 0x00, 0x2E, 0xE8, 0x00, 0x00, 0x8F, -/* 00006030 */ 0xE8, 0x00, 0x00, 0x9D, 0xE8, 0x00, 0x00, 0x9E, 0xE8, 0x00, 0x00, 0xDF, 0xE8, 0x00, 0x00, 0x36, -/* 00006040 */ 0xE9, 0x00, 0x00, 0x97, 0xE9, 0x00, 0x00, 0xA5, 0xE9, 0x00, 0x00, 0xA6, 0xE9, 0x00, 0x00, 0xD3, -/* 00006050 */ 0xE9, 0x00, 0x00, 0xDE, 0xE9, 0x00, 0x00, 0x0C, 0xEA, 0x00, 0x00, 0x2D, 0xEA, 0x00, 0x00, 0x4A, -/* 00006060 */ 0xEA, 0x00, 0x00, 0x69, 0xEA, 0x00, 0x00, 0x89, 0xEA, 0x00, 0x00, 0x95, 0xEA, 0x00, 0x00, 0xD2, -/* 00006070 */ 0xEA, 0x00, 0x00, 0x0F, 0xEB, 0x00, 0x00, 0x2E, 0xEB, 0x00, 0x00, 0x4E, 0xEB, 0x00, 0x00, 0x5A, -/* 00006080 */ 0xEB, 0x00, 0x00, 0x5B, 0xEB, 0x00, 0x00, 0x9F, 0xEB, 0x00, 0x00, 0xC1, 0xEB, 0x00, 0x00, 0xE0, -/* 00006090 */ 0xEB, 0x00, 0x00, 0x00, 0xEC, 0x00, 0x00, 0x1C, 0xEC, 0x00, 0x00, 0x28, 0xEC, 0x00, 0x00, 0x29, -/* 000060A0 */ 0xEC, 0x00, 0x00, 0x46, 0xEC, 0x00, 0x00, 0x50, 0xEC, 0x00, 0x00, 0x51, 0xEC, 0x00, 0x00, 0xD1, -/* 000060B0 */ 0xEC, 0x00, 0x00, 0xF9, 0xEC, 0x00, 0x00, 0x33, 0xED, 0x00, 0x00, 0x47, 0xED, 0x00, 0x00, 0x51, -/* 000060C0 */ 0xED, 0x00, 0x00, 0x52, 0xED, 0x00, 0x00, 0x8F, 0xED, 0x00, 0x00, 0xC7, 0xED, 0x00, 0x00, 0x13, -/* 000060D0 */ 0xEE, 0x00, 0x00, 0x38, 0xEE, 0x00, 0x00, 0x62, 0xEE, 0x00, 0x00, 0x88, 0xEE, 0x00, 0x00, 0xAF, -/* 000060E0 */ 0xEE, 0x00, 0x00, 0x01, 0xEF, 0x00, 0x00, 0x27, 0xEF, 0x00, 0x00, 0x4E, 0xEF, 0x00, 0x00, 0x77, -/* 000060F0 */ 0xEF, 0x00, 0x00, 0xA0, 0xEF, 0x00, 0x00, 0x09, 0xF0, 0x00, 0x00, 0x14, 0xF0, 0x00, 0x00, 0x15, -/* 00006100 */ 0xF0, 0x00, 0x00, 0x21, 0xF0, 0x00, 0x00, 0x8D, 0xF0, 0x00, 0x00, 0x0A, 0xF1, 0x00, 0x00, 0x15, -/* 00006110 */ 0xF1, 0x00, 0x00, 0x57, 0xF1, 0x00, 0x00, 0xAA, 0xF1, 0x00, 0x00, 0xB6, 0xF1, 0x00, 0x00, 0xEA, -/* 00006120 */ 0xF1, 0x00, 0x00, 0x69, 0xF2, 0x00, 0x00, 0x8F, 0xF2, 0x00, 0x00, 0xAD, 0xF2, 0x00, 0x00, 0xC7, -/* 00006130 */ 0xF2, 0x00, 0x00, 0xE2, 0xF2, 0x00, 0x00, 0xFE, 0xF2, 0x00, 0x00, 0x18, 0xF3, 0x00, 0x00, 0x53, -/* 00006140 */ 0xF3, 0x00, 0x00, 0x88, 0xF3, 0x00, 0x00, 0xA5, 0xF3, 0x00, 0x00, 0xC2, 0xF3, 0x00, 0x00, 0xE5, -/* 00006150 */ 0xF3, 0x00, 0x00, 0xF4, 0xF3, 0x00, 0x00, 0x79, 0xF4, 0x00, 0x00, 0x9F, 0xF4, 0x00, 0x00, 0xD9, -/* 00006160 */ 0xF4, 0x00, 0x00, 0xF3, 0xF4, 0x00, 0x00, 0x24, 0xF5, 0x00, 0x00, 0x4C, 0xF5, 0x00, 0x00, 0x66, -/* 00006170 */ 0xF5, 0x00, 0x00, 0xA2, 0xF5, 0x00, 0x00, 0xBF, 0xF5, 0x00, 0x00, 0xDC, 0xF5, 0x00, 0x00, 0x71, -/* 00006180 */ 0xF6, 0x00, 0x00, 0x80, 0xF6, 0x00, 0x00, 0x81, 0xF6, 0x00, 0x00, 0xE6, 0xF6, 0x00, 0x00, 0x55, -/* 00006190 */ 0xF7, 0x00, 0x00, 0x81, 0xF7, 0x00, 0x00, 0x9D, 0xF7, 0x00, 0x00, 0xBB, 0xF7, 0x00, 0x00, 0xD5, -/* 000061A0 */ 0xF7, 0x00, 0x00, 0xEE, 0xF7, 0x00, 0x00, 0x09, 0xF8, 0x00, 0x00, 0x18, 0xF8, 0x00, 0x00, 0x44, -/* 000061B0 */ 0xF8, 0x00, 0x00, 0x62, 0xF8, 0x00, 0x00, 0x80, 0xF8, 0x00, 0x00, 0x9C, 0xF8, 0x00, 0x00, 0xB7, -/* 000061C0 */ 0xF8, 0x00, 0x00, 0xD4, 0xF8, 0x00, 0x00, 0xE3, 0xF8, 0x00, 0x00, 0xE4, 0xF8, 0x00, 0x00, 0x18, -/* 000061D0 */ 0xF9, 0x00, 0x00, 0x42, 0xF9, 0x00, 0x00, 0x5C, 0xF9, 0x00, 0x00, 0x76, 0xF9, 0x00, 0x00, 0x90, -/* 000061E0 */ 0xF9, 0x00, 0x00, 0xAA, 0xF9, 0x00, 0x00, 0xB9, 0xF9, 0x00, 0x00, 0xE3, 0xF9, 0x00, 0x00, 0xFD, -/* 000061F0 */ 0xF9, 0x00, 0x00, 0x17, 0xFA, 0x00, 0x00, 0x31, 0xFA, 0x00, 0x00, 0x4B, 0xFA, 0x00, 0x00, 0x5A, -/* 00006200 */ 0xFA, 0x00, 0x00, 0x5B, 0xFA, 0x00, 0x00, 0x88, 0xFA, 0x00, 0x00, 0xEE, 0xFA, 0x00, 0x00, 0x1D, -/* 00006210 */ 0xFB, 0x00, 0x00, 0x7C, 0xFB, 0x00, 0x00, 0xAB, 0xFB, 0x00, 0x00, 0xDB, 0xFB, 0x00, 0x00, 0xF1, -/* 00006220 */ 0xFB, 0x00, 0x00, 0xF2, 0xFB, 0x00, 0x00, 0x17, 0xFC, 0x00, 0x00, 0x37, 0xFC, 0x00, 0x00, 0x38, -/* 00006230 */ 0xFC, 0x00, 0x00, 0xAB, 0xFC, 0x00, 0x00, 0xFC, 0xFC, 0x00, 0x00, 0x5A, 0xFD, 0x00, 0x00, 0x84, -/* 00006240 */ 0xFD, 0x00, 0x00, 0x85, 0xFD, 0x00, 0x00, 0x10, 0xFE, 0x00, 0x00, 0x74, 0xFE, 0x00, 0x00, 0xB6, -/* 00006250 */ 0xFE, 0x00, 0x00, 0xE6, 0xFE, 0x00, 0x00, 0x3E, 0xFF, 0x00, 0x00, 0xAA, 0xFF, 0x00, 0x00, 0x07, -/* 00006260 */ 0x00, 0x01, 0x00, 0x7E, 0x00, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x57, 0x01, 0x01, 0x00, 0xC2, -/* 00006270 */ 0x01, 0x01, 0x00, 0xF4, 0x01, 0x01, 0x00, 0x67, 0x02, 0x01, 0x00, 0x99, 0x02, 0x01, 0x00, 0xB3, -/* 00006280 */ 0x02, 0x01, 0x00, 0xC9, 0x02, 0x01, 0x00, 0xCA, 0x02, 0x01, 0x00, 0x3A, 0x03, 0x01, 0x00, 0x52, -/* 00006290 */ 0x03, 0x01, 0x00, 0x53, 0x03, 0x01, 0x00, 0xA7, 0x03, 0x01, 0x00, 0xA8, 0x03, 0x01, 0x00, 0x3D, -/* 000062A0 */ 0x04, 0x01, 0x00, 0xCC, 0x04, 0x01, 0x00, 0x61, 0x05, 0x01, 0x00, 0x88, 0x05, 0x01, 0x00, 0xA3, -/* 000062B0 */ 0x05, 0x01, 0x00, 0xD0, 0x05, 0x01, 0x00, 0xFA, 0x05, 0x01, 0x00, 0x2B, 0x06, 0x01, 0x00, 0x50, -/* 000062C0 */ 0x06, 0x01, 0x00, 0x77, 0x06, 0x01, 0x00, 0xA6, 0x06, 0x01, 0x00, 0xC0, 0x06, 0x01, 0x00, 0xDD, -/* 000062D0 */ 0x06, 0x01, 0x00, 0xFF, 0x06, 0x01, 0x00, 0x29, 0x07, 0x01, 0x00, 0x53, 0x07, 0x01, 0x00, 0x70, -/* 000062E0 */ 0x07, 0x01, 0x00, 0x92, 0x07, 0x01, 0x00, 0xC0, 0x07, 0x01, 0x00, 0xDD, 0x07, 0x01, 0x00, 0xFF, -/* 000062F0 */ 0x07, 0x01, 0x00, 0x15, 0x08, 0x01, 0x00, 0x16, 0x08, 0x01, 0x00, 0x7C, 0x08, 0x01, 0x00, 0xE3, -/* 00006300 */ 0x08, 0x01, 0x00, 0x37, 0x09, 0x01, 0x00, 0x71, 0x09, 0x01, 0x00, 0xE0, 0x09, 0x01, 0x00, 0x52, -/* 00006310 */ 0x0A, 0x01, 0x00, 0xA9, 0x0A, 0x01, 0x00, 0xF2, 0x0A, 0x01, 0x00, 0x29, 0x0B, 0x01, 0x00, 0x67, -/* 00006320 */ 0x0B, 0x01, 0x00, 0x9B, 0x0B, 0x01, 0x00, 0x1F, 0x0C, 0x01, 0x00, 0x48, 0x0C, 0x01, 0x00, 0x7C, -/* 00006330 */ 0x0C, 0x01, 0x00, 0xF2, 0x0C, 0x01, 0x00, 0x14, 0x0D, 0x01, 0x00, 0x15, 0x0D, 0x01, 0x00, 0x6D, -/* 00006340 */ 0x0D, 0x01, 0x00, 0x9F, 0x0D, 0x01, 0x00, 0xBD, 0x0D, 0x01, 0x00, 0xDE, 0x0D, 0x01, 0x00, 0x4C, -/* 00006350 */ 0x0E, 0x01, 0x00, 0xA9, 0x0E, 0x01, 0x00, 0xEF, 0x0E, 0x01, 0x00, 0x09, 0x0F, 0x01, 0x00, 0x1F, -/* 00006360 */ 0x0F, 0x01, 0x00, 0x20, 0x0F, 0x01, 0x00, 0x43, 0x0F, 0x01, 0x00, 0x8A, 0x0F, 0x01, 0x00, 0xA7, -/* 00006370 */ 0x0F, 0x01, 0x00, 0xBD, 0x0F, 0x01, 0x00, 0xBE, 0x0F, 0x01, 0x00, 0xFC, 0x0F, 0x01, 0x00, 0x44, -/* 00006380 */ 0x10, 0x01, 0x00, 0x7A, 0x10, 0x01, 0x00, 0x95, 0x10, 0x01, 0x00, 0xA7, 0x10, 0x01, 0x00, 0xA8, -/* 00006390 */ 0x10, 0x01, 0x00, 0xCF, 0x10, 0x01, 0x00, 0xDE, 0x10, 0x01, 0x00, 0xEC, 0x10, 0x01, 0x00, 0xED, -/* 000063A0 */ 0x10, 0x01, 0x00, 0xF9, 0x10, 0x01, 0x00, 0x50, 0x11, 0x01, 0x00, 0x5B, 0x11, 0x01, 0x00, 0x8E, -/* 000063B0 */ 0x11, 0x01, 0x00, 0x99, 0x11, 0x01, 0x00, 0x13, 0x12, 0x01, 0x00, 0x5F, 0x12, 0x01, 0x00, 0xA1, -/* 000063C0 */ 0x12, 0x01, 0x00, 0xAD, 0x12, 0x01, 0x00, 0x04, 0x13, 0x01, 0x00, 0x4A, 0x13, 0x01, 0x00, 0x8B, -/* 000063D0 */ 0x13, 0x01, 0x00, 0x8C, 0x13, 0x01, 0x00, 0xB0, 0x13, 0x01, 0x00, 0x23, 0x14, 0x01, 0x00, 0x81, -/* 000063E0 */ 0x14, 0x01, 0x00, 0xEA, 0x14, 0x01, 0x00, 0xEB, 0x14, 0x01, 0x00, 0x5A, 0x15, 0x01, 0x00, 0x88, -/* 000063F0 */ 0x15, 0x01, 0x00, 0xB4, 0x15, 0x01, 0x00, 0xE1, 0x15, 0x01, 0x00, 0x14, 0x16, 0x01, 0x00, 0x15, -/* 00006400 */ 0x16, 0x01, 0x00, 0x4C, 0x16, 0x01, 0x00, 0x73, 0x16, 0x01, 0x00, 0x97, 0x16, 0x01, 0x00, 0xCB, -/* 00006410 */ 0x16, 0x01, 0x00, 0xE0, 0x16, 0x01, 0x00, 0x0C, 0x17, 0x01, 0x00, 0x1A, 0x17, 0x01, 0x00, 0x1B, -/* 00006420 */ 0x17, 0x01, 0x00, 0x90, 0x17, 0x01, 0x00, 0xD3, 0x17, 0x01, 0x00, 0x21, 0x18, 0x01, 0x00, 0x6F, -/* 00006430 */ 0x18, 0x01, 0x00, 0xCB, 0x18, 0x01, 0x00, 0x1C, 0x19, 0x01, 0x00, 0x38, 0x19, 0x01, 0x00, 0x4D, -/* 00006440 */ 0x19, 0x01, 0x00, 0x6F, 0x19, 0x01, 0x00, 0x7D, 0x19, 0x01, 0x00, 0x7E, 0x19, 0x01, 0x00, 0xA8, -/* 00006450 */ 0x19, 0x01, 0x00, 0xA9, 0x19, 0x01, 0x00, 0xE2, 0x19, 0x01, 0x00, 0x40, 0x1A, 0x01, 0x00, 0x41, -/* 00006460 */ 0x1A, 0x01, 0x00, 0xB5, 0x1A, 0x01, 0x00, 0xF0, 0x1A, 0x01, 0x00, 0x2D, 0x1B, 0x01, 0x00, 0x2E, -/* 00006470 */ 0x1B, 0x01, 0x00, 0x51, 0x1B, 0x01, 0x00, 0x5C, 0x1B, 0x01, 0x00, 0x5D, 0x1B, 0x01, 0x00, 0x69, -/* 00006480 */ 0x1B, 0x01, 0x00, 0xB1, 0x1B, 0x01, 0x00, 0xBC, 0x1B, 0x01, 0x00, 0xE8, 0x1B, 0x01, 0x00, 0xF3, -/* 00006490 */ 0x1B, 0x01, 0x00, 0x74, 0x1C, 0x01, 0x00, 0xEE, 0x1C, 0x01, 0x00, 0x69, 0x1D, 0x01, 0x00, 0x9E, -/* 000064A0 */ 0x1D, 0x01, 0x00, 0xAA, 0x1D, 0x01, 0x00, 0xF5, 0x1D, 0x01, 0x00, 0x46, 0x1E, 0x01, 0x00, 0x6F, -/* 000064B0 */ 0x1E, 0x01, 0x00, 0x94, 0x1E, 0x01, 0x00, 0xD1, 0x1E, 0x01, 0x00, 0x22, 0x1F, 0x01, 0x00, 0x53, -/* 000064C0 */ 0x1F, 0x01, 0x00, 0x82, 0x1F, 0x01, 0x00, 0xB0, 0x1F, 0x01, 0x00, 0xC6, 0x1F, 0x01, 0x00, 0xDA, -/* 000064D0 */ 0x1F, 0x01, 0x00, 0xE8, 0x1F, 0x01, 0x00, 0xE9, 0x1F, 0x01, 0x00, 0x26, 0x20, 0x01, 0x00, 0x70, -/* 000064E0 */ 0x20, 0x01, 0x00, 0xA1, 0x20, 0x01, 0x00, 0xD0, 0x20, 0x01, 0x00, 0xFE, 0x20, 0x01, 0x00, 0x14, -/* 000064F0 */ 0x21, 0x01, 0x00, 0x28, 0x21, 0x01, 0x00, 0x36, 0x21, 0x01, 0x00, 0x37, 0x21, 0x01, 0x00, 0x8F, -/* 00006500 */ 0x21, 0x01, 0x00, 0xD5, 0x21, 0x01, 0x00, 0x0B, 0x22, 0x01, 0x00, 0x35, 0x22, 0x01, 0x00, 0x5D, -/* 00006510 */ 0x22, 0x01, 0x00, 0x87, 0x22, 0x01, 0x00, 0xB3, 0x22, 0x01, 0x00, 0xCB, 0x22, 0x01, 0x00, 0xDE, -/* 00006520 */ 0x22, 0x01, 0x00, 0xEC, 0x22, 0x01, 0x00, 0xED, 0x22, 0x01, 0x00, 0x45, 0x23, 0x01, 0x00, 0x8F, -/* 00006530 */ 0x23, 0x01, 0x00, 0xC5, 0x23, 0x01, 0x00, 0xEF, 0x23, 0x01, 0x00, 0x17, 0x24, 0x01, 0x00, 0x41, -/* 00006540 */ 0x24, 0x01, 0x00, 0x6D, 0x24, 0x01, 0x00, 0x85, 0x24, 0x01, 0x00, 0x98, 0x24, 0x01, 0x00, 0xA6, -/* 00006550 */ 0x24, 0x01, 0x00, 0xA7, 0x24, 0x01, 0x00, 0xC3, 0x24, 0x01, 0x00, 0xCE, 0x24, 0x01, 0x00, 0xCF, -/* 00006560 */ 0x24, 0x01, 0x00, 0x02, 0x25, 0x01, 0x00, 0x32, 0x25, 0x01, 0x00, 0x5F, 0x25, 0x01, 0x00, 0x6D, -/* 00006570 */ 0x25, 0x01, 0x00, 0x6E, 0x25, 0x01, 0x00, 0xE3, 0x25, 0x01, 0x00, 0xEE, 0x25, 0x01, 0x00, 0xEF, -/* 00006580 */ 0x25, 0x01, 0x00, 0x29, 0x26, 0x01, 0x00, 0x59, 0x26, 0x01, 0x00, 0x86, 0x26, 0x01, 0x00, 0x94, -/* 00006590 */ 0x26, 0x01, 0x00, 0x95, 0x26, 0x01, 0x00, 0x09, 0x27, 0x01, 0x00, 0x14, 0x27, 0x01, 0x00, 0x15, -/* 000065A0 */ 0x27, 0x01, 0x00, 0x67, 0x27, 0x01, 0x00, 0xC3, 0x27, 0x01, 0x00, 0x07, 0x28, 0x01, 0x00, 0x26, -/* 000065B0 */ 0x28, 0x01, 0x00, 0x49, 0x28, 0x01, 0x00, 0x6B, 0x28, 0x01, 0x00, 0x77, 0x28, 0x01, 0x00, 0x78, -/* 000065C0 */ 0x28, 0x01, 0x00, 0xE9, 0x28, 0x01, 0x00, 0x30, 0x29, 0x01, 0x00, 0x6E, 0x29, 0x01, 0x00, 0x7C, -/* 000065D0 */ 0x29, 0x01, 0x00, 0xB1, 0x29, 0x01, 0x00, 0xE9, 0x29, 0x01, 0x00, 0x10, 0x2A, 0x01, 0x00, 0x1E, -/* 000065E0 */ 0x2A, 0x01, 0x00, 0x1F, 0x2A, 0x01, 0x00, 0x48, 0x2A, 0x01, 0x00, 0xA0, 0x2A, 0x01, 0x00, 0x0A, -/* 000065F0 */ 0x2B, 0x01, 0x00, 0x55, 0x2B, 0x01, 0x00, 0x82, 0x2B, 0x01, 0x00, 0xD9, 0x2B, 0x01, 0x00, 0xF2, -/* 00006600 */ 0x2B, 0x01, 0x00, 0x18, 0x2C, 0x01, 0x00, 0x46, 0x2C, 0x01, 0x00, 0xBC, 0x2C, 0x01, 0x00, 0x13, -/* 00006610 */ 0x2D, 0x01, 0x00, 0x25, 0x2D, 0x01, 0x00, 0x33, 0x2D, 0x01, 0x00, 0x34, 0x2D, 0x01, 0x00, 0x54, -/* 00006620 */ 0x2D, 0x01, 0x00, 0x7E, 0x2D, 0x01, 0x00, 0xEC, 0x2D, 0x01, 0x00, 0xFA, 0x2D, 0x01, 0x00, 0xFB, -/* 00006630 */ 0x2D, 0x01, 0x00, 0x8D, 0x2E, 0x01, 0x00, 0x97, 0x2E, 0x01, 0x00, 0x98, 0x2E, 0x01, 0x00, 0x11, -/* 00006640 */ 0x2F, 0x01, 0x00, 0x99, 0x2F, 0x01, 0x00, 0x14, 0x30, 0x01, 0x00, 0x99, 0x30, 0x01, 0x00, 0xBA, -/* 00006650 */ 0x30, 0x01, 0x00, 0xC5, 0x30, 0x01, 0x00, 0x4C, 0x31, 0x01, 0x00, 0xCE, 0x31, 0x01, 0x00, 0x54, -/* 00006660 */ 0x32, 0x01, 0x00, 0xA4, 0x32, 0x01, 0x00, 0xAF, 0x32, 0x01, 0x00, 0x2D, 0x33, 0x01, 0x00, 0x9A, -/* 00006670 */ 0x33, 0x01, 0x00, 0xF1, 0x33, 0x01, 0x00, 0x58, 0x34, 0x01, 0x00, 0xCE, 0x34, 0x01, 0x00, 0x1B, -/* 00006680 */ 0x35, 0x01, 0x00, 0x26, 0x35, 0x01, 0x00, 0x98, 0x35, 0x01, 0x00, 0xA3, 0x35, 0x01, 0x00, 0x2B, -/* 00006690 */ 0x36, 0x01, 0x00, 0xB0, 0x36, 0x01, 0x00, 0xF7, 0x36, 0x01, 0x00, 0xF8, 0x36, 0x01, 0x00, 0x44, -/* 000066A0 */ 0x37, 0x01, 0x00, 0xDD, 0x37, 0x01, 0x00, 0x5E, 0x38, 0x01, 0x00, 0x83, 0x38, 0x01, 0x00, 0x25, -/* 000066B0 */ 0x39, 0x01, 0x00, 0x26, 0x39, 0x01, 0x00, 0x72, 0x39, 0x01, 0x00, 0x0F, 0x3A, 0x01, 0x00, 0x90, -/* 000066C0 */ 0x3A, 0x01, 0x00, 0xB5, 0x3A, 0x01, 0x00, 0x65, 0x3B, 0x01, 0x00, 0x66, 0x3B, 0x01, 0x00, 0xB2, -/* 000066D0 */ 0x3B, 0x01, 0x00, 0x4F, 0x3C, 0x01, 0x00, 0xD0, 0x3C, 0x01, 0x00, 0xF5, 0x3C, 0x01, 0x00, 0xA5, -/* 000066E0 */ 0x3D, 0x01, 0x00, 0xA6, 0x3D, 0x01, 0x00, 0x01, 0x3E, 0x01, 0x00, 0x24, 0x3E, 0x01, 0x00, 0x38, -/* 000066F0 */ 0x3E, 0x01, 0x00, 0x42, 0x3E, 0x01, 0x00, 0x43, 0x3E, 0x01, 0x00, 0x4F, 0x3E, 0x01, 0x00, 0x7E, -/* 00006700 */ 0x3E, 0x01, 0x00, 0x89, 0x3E, 0x01, 0x00, 0xB7, 0x3E, 0x01, 0x00, 0xC2, 0x3E, 0x01, 0x00, 0xEE, -/* 00006710 */ 0x3E, 0x01, 0x00, 0x11, 0x3F, 0x01, 0x00, 0x1D, 0x3F, 0x01, 0x00, 0x69, 0x3F, 0x01, 0x00, 0xA0, -/* 00006720 */ 0x3F, 0x01, 0x00, 0xDD, 0x3F, 0x01, 0x00, 0xEB, 0x3F, 0x01, 0x00, 0xEC, 0x3F, 0x01, 0x00, 0x1D, -/* 00006730 */ 0x40, 0x01, 0x00, 0x45, 0x40, 0x01, 0x00, 0x8C, 0x40, 0x01, 0x00, 0x9A, 0x40, 0x01, 0x00, 0x9B, -/* 00006740 */ 0x40, 0x01, 0x00, 0xCE, 0x40, 0x01, 0x00, 0x0C, 0x41, 0x01, 0x00, 0x0D, 0x41, 0x01, 0x00, 0x3B, -/* 00006750 */ 0x41, 0x01, 0x00, 0x66, 0x41, 0x01, 0x00, 0xA3, 0x41, 0x01, 0x00, 0xB1, 0x41, 0x01, 0x00, 0xB2, -/* 00006760 */ 0x41, 0x01, 0x00, 0xF8, 0x41, 0x01, 0x00, 0xF9, 0x41, 0x01, 0x00, 0x47, 0x42, 0x01, 0x00, 0x83, -/* 00006770 */ 0x42, 0x01, 0x00, 0xB5, 0x42, 0x01, 0x00, 0xB6, 0x42, 0x01, 0x00, 0xCE, 0x42, 0x01, 0x00, 0xD8, -/* 00006780 */ 0x42, 0x01, 0x00, 0x1A, 0x43, 0x01, 0x00, 0x1B, 0x43, 0x01, 0x00, 0x27, 0x43, 0x01, 0x00, 0x86, -/* 00006790 */ 0x43, 0x01, 0x00, 0x91, 0x43, 0x01, 0x00, 0xC8, 0x43, 0x01, 0x00, 0xD3, 0x43, 0x01, 0x00, 0x2D, -/* 000067A0 */ 0x44, 0x01, 0x00, 0x91, 0x44, 0x01, 0x00, 0xD1, 0x44, 0x01, 0x00, 0xDD, 0x44, 0x01, 0x00, 0x11, -/* 000067B0 */ 0x45, 0x01, 0x00, 0x3C, 0x45, 0x01, 0x00, 0xA7, 0x45, 0x01, 0x00, 0xB5, 0x45, 0x01, 0x00, 0xF3, -/* 000067C0 */ 0x45, 0x01, 0x00, 0x4C, 0x46, 0x01, 0x00, 0xB7, 0x46, 0x01, 0x00, 0xC5, 0x46, 0x01, 0x00, 0xC6, -/* 000067D0 */ 0x46, 0x01, 0x00, 0xE7, 0x46, 0x01, 0x00, 0xF2, 0x46, 0x01, 0x00, 0xF3, 0x46, 0x01, 0x00, 0xFF, -/* 000067E0 */ 0x46, 0x01, 0x00, 0x53, 0x47, 0x01, 0x00, 0x5E, 0x47, 0x01, 0x00, 0xAB, 0x47, 0x01, 0x00, 0xB6, -/* 000067F0 */ 0x47, 0x01, 0x00, 0x10, 0x48, 0x01, 0x00, 0x49, 0x48, 0x01, 0x00, 0xAD, 0x48, 0x01, 0x00, 0xB9, -/* 00006800 */ 0x48, 0x01, 0x00, 0xF3, 0x48, 0x01, 0x00, 0x2D, 0x49, 0x01, 0x00, 0x2E, 0x49, 0x01, 0x00, 0x41, -/* 00006810 */ 0x49, 0x01, 0x00, 0x67, 0x49, 0x01, 0x00, 0xA5, 0x49, 0x01, 0x00, 0xBA, 0x49, 0x01, 0x00, 0xE7, -/* 00006820 */ 0x49, 0x01, 0x00, 0xF5, 0x49, 0x01, 0x00, 0xF6, 0x49, 0x01, 0x00, 0x33, 0x4A, 0x01, 0x00, 0x59, -/* 00006830 */ 0x4A, 0x01, 0x00, 0x64, 0x4A, 0x01, 0x00, 0x65, 0x4A, 0x01, 0x00, 0x8E, 0x4A, 0x01, 0x00, 0xE9, -/* 00006840 */ 0x4A, 0x01, 0x00, 0xF4, 0x4A, 0x01, 0x00, 0x3F, 0x4B, 0x01, 0x00, 0x40, 0x4B, 0x01, 0x00, 0x70, -/* 00006850 */ 0x4B, 0x01, 0x00, 0xD9, 0x4B, 0x01, 0x00, 0xE4, 0x4B, 0x01, 0x00, 0x3D, 0x4C, 0x01, 0x00, 0x3E, -/* 00006860 */ 0x4C, 0x01, 0x00, 0x76, 0x4C, 0x01, 0x00, 0x9F, 0x4C, 0x01, 0x00, 0xBC, 0x4C, 0x01, 0x00, 0xDB, -/* 00006870 */ 0x4C, 0x01, 0x00, 0xFB, 0x4C, 0x01, 0x00, 0x07, 0x4D, 0x01, 0x00, 0x49, 0x4D, 0x01, 0x00, 0x4A, -/* 00006880 */ 0x4D, 0x01, 0x00, 0x8E, 0x4D, 0x01, 0x00, 0xB1, 0x4D, 0x01, 0x00, 0xCD, 0x4D, 0x01, 0x00, 0xEC, -/* 00006890 */ 0x4D, 0x01, 0x00, 0x0B, 0x4E, 0x01, 0x00, 0x17, 0x4E, 0x01, 0x00, 0x18, 0x4E, 0x01, 0x00, 0x96, -/* 000068A0 */ 0x4E, 0x01, 0x00, 0xBE, 0x4E, 0x01, 0x00, 0xFB, 0x4E, 0x01, 0x00, 0xFC, 0x4E, 0x01, 0x00, 0x29, -/* 000068B0 */ 0x4F, 0x01, 0x00, 0x34, 0x4F, 0x01, 0x00, 0x62, 0x4F, 0x01, 0x00, 0x83, 0x4F, 0x01, 0x00, 0xA0, -/* 000068C0 */ 0x4F, 0x01, 0x00, 0xBF, 0x4F, 0x01, 0x00, 0xDF, 0x4F, 0x01, 0x00, 0xEB, 0x4F, 0x01, 0x00, 0x2A, -/* 000068D0 */ 0x50, 0x01, 0x00, 0x67, 0x50, 0x01, 0x00, 0x86, 0x50, 0x01, 0x00, 0xA6, 0x50, 0x01, 0x00, 0xB2, -/* 000068E0 */ 0x50, 0x01, 0x00, 0xF8, 0x50, 0x01, 0x00, 0x1A, 0x51, 0x01, 0x00, 0x39, 0x51, 0x01, 0x00, 0x59, -/* 000068F0 */ 0x51, 0x01, 0x00, 0x75, 0x51, 0x01, 0x00, 0x81, 0x51, 0x01, 0x00, 0xC9, 0x51, 0x01, 0x00, 0xF9, -/* 00006900 */ 0x51, 0x01, 0x00, 0x45, 0x52, 0x01, 0x00, 0x67, 0x52, 0x01, 0x00, 0x85, 0x52, 0x01, 0x00, 0xA5, -/* 00006910 */ 0x52, 0x01, 0x00, 0xCC, 0x52, 0x01, 0x00, 0xEC, 0x52, 0x01, 0x00, 0x0D, 0x53, 0x01, 0x00, 0x2C, -/* 00006920 */ 0x53, 0x01, 0x00, 0x47, 0x53, 0x01, 0x00, 0x63, 0x53, 0x01, 0x00, 0x80, 0x53, 0x01, 0x00, 0x9B, -/* 00006930 */ 0x53, 0x01, 0x00, 0xB7, 0x53, 0x01, 0x00, 0xD5, 0x53, 0x01, 0x00, 0xF3, 0x53, 0x01, 0x00, 0x17, -/* 00006940 */ 0x54, 0x01, 0x00, 0x2A, 0x54, 0x01, 0x00, 0x2B, 0x54, 0x01, 0x00, 0x8B, 0x54, 0x01, 0x00, 0xBB, -/* 00006950 */ 0x54, 0x01, 0x00, 0xF6, 0x54, 0x01, 0x00, 0x44, 0x55, 0x01, 0x00, 0x79, 0x55, 0x01, 0x00, 0xC5, -/* 00006960 */ 0x55, 0x01, 0x00, 0xDF, 0x55, 0x01, 0x00, 0xE0, 0x55, 0x01, 0x00, 0x05, 0x56, 0x01, 0x00, 0x1B, -/* 00006970 */ 0x56, 0x01, 0x00, 0x2F, 0x56, 0x01, 0x00, 0x3E, 0x56, 0x01, 0x00, 0x5A, 0x56, 0x01, 0x00, 0x79, -/* 00006980 */ 0x56, 0x01, 0x00, 0x99, 0x56, 0x01, 0x00, 0xA5, 0x56, 0x01, 0x00, 0xA6, 0x56, 0x01, 0x00, 0xDA, -/* 00006990 */ 0x56, 0x01, 0x00, 0x3B, 0x57, 0x01, 0x00, 0xD6, 0x57, 0x01, 0x00, 0x6C, 0x58, 0x01, 0x00, 0x78, -/* 000069A0 */ 0x58, 0x01, 0x00, 0xF3, 0x58, 0x01, 0x00, 0x39, 0x59, 0x01, 0x00, 0x62, 0x59, 0x01, 0x00, 0x7F, -/* 000069B0 */ 0x59, 0x01, 0x00, 0x9E, 0x59, 0x01, 0x00, 0xBE, 0x59, 0x01, 0x00, 0xCA, 0x59, 0x01, 0x00, 0x0B, -/* 000069C0 */ 0x5A, 0x01, 0x00, 0x41, 0x5A, 0x01, 0x00, 0x5D, 0x5A, 0x01, 0x00, 0x7C, 0x5A, 0x01, 0x00, 0x9C, -/* 000069D0 */ 0x5A, 0x01, 0x00, 0xA8, 0x5A, 0x01, 0x00, 0xA9, 0x5A, 0x01, 0x00, 0xC8, 0x5A, 0x01, 0x00, 0xD2, -/* 000069E0 */ 0x5A, 0x01, 0x00, 0xD3, 0x5A, 0x01, 0x00, 0xF9, 0x5A, 0x01, 0x00, 0x1C, 0x5B, 0x01, 0x00, 0x30, -/* 000069F0 */ 0x5B, 0x01, 0x00, 0x3A, 0x5B, 0x01, 0x00, 0x3B, 0x5B, 0x01, 0x00, 0x47, 0x5B, 0x01, 0x00, 0x7B, -/* 00006A00 */ 0x5B, 0x01, 0x00, 0x86, 0x5B, 0x01, 0x00, 0xB6, 0x5B, 0x01, 0x00, 0xC1, 0x5B, 0x01, 0x00, 0xE8, -/* 00006A10 */ 0x5B, 0x01, 0x00, 0x14, 0x5C, 0x01, 0x00, 0x37, 0x5C, 0x01, 0x00, 0x43, 0x5C, 0x01, 0x00, 0x94, -/* 00006A20 */ 0x5C, 0x01, 0x00, 0xDA, 0x5C, 0x01, 0x00, 0x31, 0x5D, 0x01, 0x00, 0x55, 0x5D, 0x01, 0x00, 0xC2, -/* 00006A30 */ 0x5D, 0x01, 0x00, 0x2C, 0x5E, 0x01, 0x00, 0x2D, 0x5E, 0x01, 0x00, 0x72, 0x5E, 0x01, 0x00, 0x73, -/* 00006A40 */ 0x5E, 0x01, 0x00, 0xD6, 0x5E, 0x01, 0x00, 0x34, 0x5F, 0x01, 0x00, 0x35, 0x5F, 0x01, 0x00, 0x60, -/* 00006A50 */ 0x5F, 0x01, 0x00, 0xB6, 0x5F, 0x01, 0x00, 0xB7, 0x5F, 0x01, 0x00, 0xEE, 0x5F, 0x01, 0x00, 0xEF, -/* 00006A60 */ 0x5F, 0x01, 0x00, 0x0F, 0x60, 0x01, 0x00, 0x1A, 0x60, 0x01, 0x00, 0x1B, 0x60, 0x01, 0x00, 0x27, -/* 00006A70 */ 0x60, 0x01, 0x00, 0x78, 0x60, 0x01, 0x00, 0xB7, 0x60, 0x01, 0x00, 0xC2, 0x60, 0x01, 0x00, 0xEA, -/* 00006A80 */ 0x60, 0x01, 0x00, 0xF5, 0x60, 0x01, 0x00, 0x1C, 0x61, 0x01, 0x00, 0x39, 0x61, 0x01, 0x00, 0x45, -/* 00006A90 */ 0x61, 0x01, 0x00, 0x7F, 0x61, 0x01, 0x00, 0xA1, 0x61, 0x01, 0x00, 0xC1, 0x61, 0x01, 0x00, 0xCF, -/* 00006AA0 */ 0x61, 0x01, 0x00, 0xD0, 0x61, 0x01, 0x00, 0x0F, 0x62, 0x01, 0x00, 0x1A, 0x62, 0x01, 0x00, 0x1B, -/* 00006AB0 */ 0x62, 0x01, 0x00, 0x6B, 0x62, 0x01, 0x00, 0xC8, 0x62, 0x01, 0x00, 0xF4, 0x62, 0x01, 0x00, 0x47, -/* 00006AC0 */ 0x63, 0x01, 0x00, 0x55, 0x63, 0x01, 0x00, 0x56, 0x63, 0x01, 0x00, 0x82, 0x63, 0x01, 0x00, 0xBB, -/* 00006AD0 */ 0x63, 0x01, 0x00, 0xBC, 0x63, 0x01, 0x00, 0xFE, 0x63, 0x01, 0x00, 0xFF, 0x63, 0x01, 0x00, 0x18, -/* 00006AE0 */ 0x64, 0x01, 0x00, 0x23, 0x64, 0x01, 0x00, 0x5F, 0x64, 0x01, 0x00, 0x60, 0x64, 0x01, 0x00, 0x95, -/* 00006AF0 */ 0x64, 0x01, 0x00, 0xCA, 0x64, 0x01, 0x00, 0xE1, 0x64, 0x01, 0x00, 0xFE, 0x64, 0x01, 0x00, 0x1D, -/* 00006B00 */ 0x65, 0x01, 0x00, 0x3E, 0x65, 0x01, 0x00, 0x4A, 0x65, 0x01, 0x00, 0x4B, 0x65, 0x01, 0x00, 0x7F, -/* 00006B10 */ 0x65, 0x01, 0x00, 0xBD, 0x65, 0x01, 0x00, 0x18, 0x66, 0x01, 0x00, 0xAD, 0x66, 0x01, 0x00, 0x3F, -/* 00006B20 */ 0x67, 0x01, 0x00, 0x4B, 0x67, 0x01, 0x00, 0xC0, 0x67, 0x01, 0x00, 0x03, 0x68, 0x01, 0x00, 0x2C, -/* 00006B30 */ 0x68, 0x01, 0x00, 0x49, 0x68, 0x01, 0x00, 0x68, 0x68, 0x01, 0x00, 0x88, 0x68, 0x01, 0x00, 0x94, -/* 00006B40 */ 0x68, 0x01, 0x00, 0xD2, 0x68, 0x01, 0x00, 0x05, 0x69, 0x01, 0x00, 0x21, 0x69, 0x01, 0x00, 0x40, -/* 00006B50 */ 0x69, 0x01, 0x00, 0x60, 0x69, 0x01, 0x00, 0x6C, 0x69, 0x01, 0x00, 0x6D, 0x69, 0x01, 0x00, 0xA9, -/* 00006B60 */ 0x69, 0x01, 0x00, 0xD9, 0x69, 0x01, 0x00, 0x10, 0x6A, 0x01, 0x00, 0x45, 0x6A, 0x01, 0x00, 0xA9, -/* 00006B70 */ 0x6A, 0x01, 0x00, 0xB7, 0x6A, 0x01, 0x00, 0xB8, 0x6A, 0x01, 0x00, 0xE8, 0x6A, 0x01, 0x00, 0x11, -/* 00006B80 */ 0x6B, 0x01, 0x00, 0x1C, 0x6B, 0x01, 0x00, 0x64, 0x6B, 0x01, 0x00, 0xA0, 0x6B, 0x01, 0x00, 0xBB, -/* 00006B90 */ 0x6B, 0x01, 0x00, 0xDA, 0x6B, 0x01, 0x00, 0xFA, 0x6B, 0x01, 0x00, 0x16, 0x6C, 0x01, 0x00, 0x22, -/* 00006BA0 */ 0x6C, 0x01, 0x00, 0x23, 0x6C, 0x01, 0x00, 0x60, 0x6C, 0x01, 0x00, 0x97, 0x6C, 0x01, 0x00, 0xCC, -/* 00006BB0 */ 0x6C, 0x01, 0x00, 0x30, 0x6D, 0x01, 0x00, 0x3E, 0x6D, 0x01, 0x00, 0x3F, 0x6D, 0x01, 0x00, 0x6A, -/* 00006BC0 */ 0x6D, 0x01, 0x00, 0x84, 0x6D, 0x01, 0x00, 0x9C, 0x6D, 0x01, 0x00, 0xC4, 0x6D, 0x01, 0x00, 0xED, -/* 00006BD0 */ 0x6D, 0x01, 0x00, 0x16, 0x6E, 0x01, 0x00, 0x42, 0x6E, 0x01, 0x00, 0x6E, 0x6E, 0x01, 0x00, 0x91, -/* 00006BE0 */ 0x6E, 0x01, 0x00, 0xBA, 0x6E, 0x01, 0x00, 0xED, 0x6E, 0x01, 0x00, 0x5C, 0x6F, 0x01, 0x00, 0xAD, -/* 00006BF0 */ 0x6F, 0x01, 0x00, 0xCE, 0x6F, 0x01, 0x00, 0xE0, 0x6F, 0x01, 0x00, 0xF0, 0x6F, 0x01, 0x00, 0xFB, -/* 00006C00 */ 0x6F, 0x01, 0x00, 0x55, 0x70, 0x01, 0x00, 0x9A, 0x70, 0x01, 0x00, 0xBE, 0x70, 0x01, 0x00, 0xDD, -/* 00006C10 */ 0x70, 0x01, 0x00, 0xFD, 0x70, 0x01, 0x00, 0x19, 0x71, 0x01, 0x00, 0x25, 0x71, 0x01, 0x00, 0x26, -/* 00006C20 */ 0x71, 0x01, 0x00, 0x42, 0x71, 0x01, 0x00, 0x4C, 0x71, 0x01, 0x00, 0x4D, 0x71, 0x01, 0x00, 0x7E, -/* 00006C30 */ 0x71, 0x01, 0x00, 0x9D, 0x71, 0x01, 0x00, 0x2F, 0x72, 0x01, 0x00, 0xC1, 0x72, 0x01, 0x00, 0x53, -/* 00006C40 */ 0x73, 0x01, 0x00, 0xE5, 0x73, 0x01, 0x00, 0xEB, 0x73, 0x01, 0x00, 0xEC, 0x73, 0x01, 0x00, 0xF2, -/* 00006C50 */ 0x73, 0x01, 0x00, 0xFA, 0x73, 0x01, 0x00, 0x01, 0x74, 0x01, 0x00, 0x08, 0x74, 0x01, 0x00, 0x0F, -/* 00006C60 */ 0x74, 0x01, 0x00, 0x16, 0x74, 0x01, 0x00, 0x1D, 0x74, 0x01, 0x00, 0x24, 0x74, 0x01, 0x00, 0x42, -/* 00006C70 */ 0x74, 0x01, 0x00, 0x49, 0x74, 0x01, 0x00, 0x50, 0x74, 0x01, 0x00, 0x57, 0x74, 0x01, 0x00, 0x5E, -/* 00006C80 */ 0x74, 0x01, 0x00, 0x65, 0x74, 0x01, 0x00, 0x6C, 0x74, 0x01, 0x00, 0x74, 0x74, 0x01, 0x00, 0x7F, -/* 00006C90 */ 0x74, 0x01, 0x00, 0x80, 0x74, 0x01, 0x00, 0xB4, 0x74, 0x01, 0x00, 0xEA, 0x74, 0x01, 0x00, 0xF0, -/* 00006CA0 */ 0x74, 0x01, 0x00, 0x25, 0x75, 0x01, 0x00, 0x5C, 0x75, 0x01, 0x00, 0x62, 0x75, 0x01, 0x00, 0x63, -/* 00006CB0 */ 0x75, 0x01, 0x00, 0x88, 0x75, 0x01, 0x00, 0xB3, 0x75, 0x01, 0x00, 0xE8, 0x75, 0x01, 0x00, 0x0C, -/* 00006CC0 */ 0x76, 0x01, 0x00, 0x16, 0x76, 0x01, 0x00, 0x17, 0x76, 0x01, 0x00, 0x4B, 0x76, 0x01, 0x00, 0x62, -/* 00006CD0 */ 0x76, 0x01, 0x00, 0xB1, 0x76, 0x01, 0x00, 0xE3, 0x76, 0x01, 0x00, 0x07, 0x77, 0x01, 0x00, 0x18, -/* 00006CE0 */ 0x77, 0x01, 0x00, 0x3E, 0x77, 0x01, 0x00, 0x48, 0x77, 0x01, 0x00, 0x49, 0x77, 0x01, 0x00, 0x69, -/* 00006CF0 */ 0x77, 0x01, 0x00, 0x70, 0x77, 0x01, 0x00, 0x71, 0x77, 0x01, 0x00, 0xB7, 0x77, 0x01, 0x00, 0x06, -/* 00006D00 */ 0x78, 0x01, 0x00, 0x25, 0x78, 0x01, 0x00, 0x73, 0x78, 0x01, 0x00, 0xA6, 0x78, 0x01, 0x00, 0xD6, -/* 00006D10 */ 0x78, 0x01, 0x00, 0x16, 0x79, 0x01, 0x00, 0x42, 0x79, 0x01, 0x00, 0x50, 0x79, 0x01, 0x00, 0x5A, -/* 00006D20 */ 0x79, 0x01, 0x00, 0x75, 0x79, 0x01, 0x00, 0x7C, 0x79, 0x01, 0x00, 0x7D, 0x79, 0x01, 0x00, 0xB4, -/* 00006D30 */ 0x79, 0x01, 0x00, 0xF4, 0x79, 0x01, 0x00, 0x13, 0x7A, 0x01, 0x00, 0x33, 0x7A, 0x01, 0x00, 0x5B, -/* 00006D40 */ 0x7A, 0x01, 0x00, 0x69, 0x7A, 0x01, 0x00, 0xB3, 0x7A, 0x01, 0x00, 0xCF, 0x7A, 0x01, 0x00, 0xE0, -/* 00006D50 */ 0x7A, 0x01, 0x00, 0xFB, 0x7A, 0x01, 0x00, 0x05, 0x7B, 0x01, 0x00, 0x0C, 0x7B, 0x01, 0x00, 0x0D, -/* 00006D60 */ 0x7B, 0x01, 0x00, 0x47, 0x7B, 0x01, 0x00, 0x60, 0x7B, 0x01, 0x00, 0x83, 0x7B, 0x01, 0x00, 0xA5, -/* 00006D70 */ 0x7B, 0x01, 0x00, 0xC9, 0x7B, 0x01, 0x00, 0xD7, 0x7B, 0x01, 0x00, 0xEE, 0x7B, 0x01, 0x00, 0xF8, -/* 00006D80 */ 0x7B, 0x01, 0x00, 0xFF, 0x7B, 0x01, 0x00, 0x00, 0x7C, 0x01, 0x00, 0x65, 0x7C, 0x01, 0x00, 0x91, -/* 00006D90 */ 0x7C, 0x01, 0x00, 0xD7, 0x7C, 0x01, 0x00, 0xED, 0x7C, 0x01, 0x00, 0xF7, 0x7C, 0x01, 0x00, 0xFE, -/* 00006DA0 */ 0x7C, 0x01, 0x00, 0xFF, 0x7C, 0x01, 0x00, 0x30, 0x7D, 0x01, 0x00, 0x67, 0x7D, 0x01, 0x00, 0x6E, -/* 00006DB0 */ 0x7D, 0x01, 0x00, 0x6F, 0x7D, 0x01, 0x00, 0xB1, 0x7D, 0x01, 0x00, 0xF7, 0x7D, 0x01, 0x00, 0x23, -/* 00006DC0 */ 0x7E, 0x01, 0x00, 0x67, 0x7E, 0x01, 0x00, 0x92, 0x7E, 0x01, 0x00, 0xBB, 0x7E, 0x01, 0x00, 0xE7, -/* 00006DD0 */ 0x7E, 0x01, 0x00, 0xF9, 0x7E, 0x01, 0x00, 0x4B, 0x7F, 0x01, 0x00, 0xC0, 0x7F, 0x01, 0x00, 0xCE, -/* 00006DE0 */ 0x7F, 0x01, 0x00, 0x19, 0x80, 0x01, 0x00, 0x5B, 0x80, 0x01, 0x00, 0xCB, 0x80, 0x01, 0x00, 0xFE, -/* 00006DF0 */ 0x80, 0x01, 0x00, 0x26, 0x81, 0x01, 0x00, 0x30, 0x81, 0x01, 0x00, 0x31, 0x81, 0x01, 0x00, 0x59, -/* 00006E00 */ 0x81, 0x01, 0x00, 0x7C, 0x81, 0x01, 0x00, 0xB3, 0x81, 0x01, 0x00, 0xD1, 0x81, 0x01, 0x00, 0xE2, -/* 00006E10 */ 0x81, 0x01, 0x00, 0x05, 0x82, 0x01, 0x00, 0x0F, 0x82, 0x01, 0x00, 0x15, 0x82, 0x01, 0x00, 0x16, -/* 00006E20 */ 0x82, 0x01, 0x00, 0x56, 0x82, 0x01, 0x00, 0xA9, 0x82, 0x01, 0x00, 0xD5, 0x82, 0x01, 0x00, 0x26, -/* 00006E30 */ 0x83, 0x01, 0x00, 0x51, 0x83, 0x01, 0x00, 0x7A, 0x83, 0x01, 0x00, 0xA6, 0x83, 0x01, 0x00, 0xB8, -/* 00006E40 */ 0x83, 0x01, 0x00, 0x18, 0x84, 0x01, 0x00, 0x69, 0x84, 0x01, 0x00, 0x93, 0x84, 0x01, 0x00, 0xCC, -/* 00006E50 */ 0x84, 0x01, 0x00, 0x06, 0x85, 0x01, 0x00, 0x14, 0x85, 0x01, 0x00, 0x5F, 0x85, 0x01, 0x00, 0xA1, -/* 00006E60 */ 0x85, 0x01, 0x00, 0x1E, 0x86, 0x01, 0x00, 0x51, 0x86, 0x01, 0x00, 0x79, 0x86, 0x01, 0x00, 0x83, -/* 00006E70 */ 0x86, 0x01, 0x00, 0xA2, 0x86, 0x01, 0x00, 0xA8, 0x86, 0x01, 0x00, 0xA9, 0x86, 0x01, 0x00, 0xDB, -/* 00006E80 */ 0x86, 0x01, 0x00, 0xFB, 0x86, 0x01, 0x00, 0x1F, 0x87, 0x01, 0x00, 0x29, 0x87, 0x01, 0x00, 0x2A, -/* 00006E90 */ 0x87, 0x01, 0x00, 0x75, 0x87, 0x01, 0x00, 0x8B, 0x87, 0x01, 0x00, 0xA9, 0x87, 0x01, 0x00, 0xB3, -/* 00006EA0 */ 0x87, 0x01, 0x00, 0xB4, 0x87, 0x01, 0x00, 0x29, 0x88, 0x01, 0x00, 0x79, 0x88, 0x01, 0x00, 0xBE, -/* 00006EB0 */ 0x88, 0x01, 0x00, 0xBF, 0x88, 0x01, 0x00, 0x32, 0x89, 0x01, 0x00, 0x4B, 0x89, 0x01, 0x00, 0x6F, -/* 00006EC0 */ 0x89, 0x01, 0x00, 0x93, 0x89, 0x01, 0x00, 0xEB, 0x89, 0x01, 0x00, 0x2E, 0x8A, 0x01, 0x00, 0xB7, -/* 00006ED0 */ 0x8A, 0x01, 0x00, 0xB8, 0x8A, 0x01, 0x00, 0xD3, 0x8A, 0x01, 0x00, 0xD9, 0x8A, 0x01, 0x00, 0xDA, -/* 00006EE0 */ 0x8A, 0x01, 0x00, 0x34, 0x8B, 0x01, 0x00, 0x6A, 0x8B, 0x01, 0x00, 0x8A, 0x8B, 0x01, 0x00, 0xE7, -/* 00006EF0 */ 0x8B, 0x01, 0x00, 0x1A, 0x8C, 0x01, 0x00, 0x24, 0x8C, 0x01, 0x00, 0x25, 0x8C, 0x01, 0x00, 0x3C, -/* 00006F00 */ 0x8C, 0x01, 0x00, 0x8C, 0x8C, 0x01, 0x00, 0xE8, 0x8C, 0x01, 0x00, 0xF8, 0x8C, 0x01, 0x00, 0x02, -/* 00006F10 */ 0x8D, 0x01, 0x00, 0x03, 0x8D, 0x01, 0x00, 0x92, 0x8D, 0x01, 0x00, 0x18, 0x8E, 0x01, 0x00, 0x93, -/* 00006F20 */ 0x8E, 0x01, 0x00, 0xDC, 0x8E, 0x01, 0x00, 0x12, 0x8F, 0x01, 0x00, 0x13, 0x8F, 0x01, 0x00, 0x5F, -/* 00006F30 */ 0x8F, 0x01, 0x00, 0x7E, 0x8F, 0x01, 0x00, 0xCF, 0x8F, 0x01, 0x00, 0x49, 0x90, 0x01, 0x00, 0x6D, -/* 00006F40 */ 0x90, 0x01, 0x00, 0xC8, 0x90, 0x01, 0x00, 0x13, 0x91, 0x01, 0x00, 0x25, 0x91, 0x01, 0x00, 0x36, -/* 00006F50 */ 0x91, 0x01, 0x00, 0x56, 0x91, 0x01, 0x00, 0x60, 0x91, 0x01, 0x00, 0x61, 0x91, 0x01, 0x00, 0xD0, -/* 00006F60 */ 0x91, 0x01, 0x00, 0xFE, 0x91, 0x01, 0x00, 0x33, 0x92, 0x01, 0x00, 0x5C, 0x92, 0x01, 0x00, 0x74, -/* 00006F70 */ 0x92, 0x01, 0x00, 0xAE, 0x92, 0x01, 0x00, 0xD8, 0x92, 0x01, 0x00, 0xFD, 0x92, 0x01, 0x00, 0x16, -/* 00006F80 */ 0x93, 0x01, 0x00, 0x3D, 0x93, 0x01, 0x00, 0x4F, 0x93, 0x01, 0x00, 0x5D, 0x93, 0x01, 0x00, 0x5E, -/* 00006F90 */ 0x93, 0x01, 0x00, 0xA9, 0x93, 0x01, 0x00, 0xBA, 0x93, 0x01, 0x00, 0xDC, 0x93, 0x01, 0x00, 0xE6, -/* 00006FA0 */ 0x93, 0x01, 0x00, 0xE7, 0x93, 0x01, 0x00, 0x05, 0x94, 0x01, 0x00, 0x23, 0x94, 0x01, 0x00, 0x41, -/* 00006FB0 */ 0x94, 0x01, 0x00, 0x72, 0x94, 0x01, 0x00, 0x84, 0x94, 0x01, 0x00, 0x8A, 0x94, 0x01, 0x00, 0x8B, -/* 00006FC0 */ 0x94, 0x01, 0x00, 0xEB, 0x94, 0x01, 0x00, 0x43, 0x95, 0x01, 0x00, 0x76, 0x95, 0x01, 0x00, 0x77, -/* 00006FD0 */ 0x95, 0x01, 0x00, 0xA8, 0x95, 0x01, 0x00, 0xA9, 0x95, 0x01, 0x00, 0xDD, 0x95, 0x01, 0x00, 0x08, -/* 00006FE0 */ 0x96, 0x01, 0x00, 0x71, 0x96, 0x01, 0x00, 0xA2, 0x96, 0x01, 0x00, 0xC3, 0x96, 0x01, 0x00, 0xD1, -/* 00006FF0 */ 0x96, 0x01, 0x00, 0xDB, 0x96, 0x01, 0x00, 0x30, 0x97, 0x01, 0x00, 0x36, 0x97, 0x01, 0x00, 0x37, -/* 00007000 */ 0x97, 0x01, 0x00, 0x7A, 0x97, 0x01, 0x00, 0xA7, 0x97, 0x01, 0x00, 0xD5, 0x97, 0x01, 0x00, 0xFC, -/* 00007010 */ 0x97, 0x01, 0x00, 0x28, 0x98, 0x01, 0x00, 0x32, 0x98, 0x01, 0x00, 0x33, 0x98, 0x01, 0x00, 0x55, -/* 00007020 */ 0x98, 0x01, 0x00, 0x7A, 0x98, 0x01, 0x00, 0xA2, 0x98, 0x01, 0x00, 0xB0, 0x98, 0x01, 0x00, 0xB1, -/* 00007030 */ 0x98, 0x01, 0x00, 0xDD, 0x98, 0x01, 0x00, 0x2A, 0x99, 0x01, 0x00, 0x43, 0x99, 0x01, 0x00, 0x81, -/* 00007040 */ 0x99, 0x01, 0x00, 0xB5, 0x99, 0x01, 0x00, 0xCA, 0x99, 0x01, 0x00, 0xF9, 0x99, 0x01, 0x00, 0x07, -/* 00007050 */ 0x9A, 0x01, 0x00, 0x18, 0x9A, 0x01, 0x00, 0x69, 0x9A, 0x01, 0x00, 0x99, 0x9A, 0x01, 0x00, 0xFF, -/* 00007060 */ 0x9A, 0x01, 0x00, 0x09, 0x9B, 0x01, 0x00, 0x0A, 0x9B, 0x01, 0x00, 0x32, 0x9B, 0x01, 0x00, 0x39, -/* 00007070 */ 0x9B, 0x01, 0x00, 0x3A, 0x9B, 0x01, 0x00, 0x5C, 0x9B, 0x01, 0x00, 0x7A, 0x9B, 0x01, 0x00, 0x9F, -/* 00007080 */ 0x9B, 0x01, 0x00, 0xC1, 0x9B, 0x01, 0x00, 0xF1, 0x9B, 0x01, 0x00, 0x03, 0x9C, 0x01, 0x00, 0x43, -/* 00007090 */ 0x9C, 0x01, 0x00, 0x52, 0x9C, 0x01, 0x00, 0x53, 0x9C, 0x01, 0x00, 0x78, 0x9C, 0x01, 0x00, 0xB8, -/* 000070A0 */ 0x9C, 0x01, 0x00, 0xC7, 0x9C, 0x01, 0x00, 0xC8, 0x9C, 0x01, 0x00, 0xED, 0x9C, 0x01, 0x00, 0x27, -/* 000070B0 */ 0x9D, 0x01, 0x00, 0x36, 0x9D, 0x01, 0x00, 0x37, 0x9D, 0x01, 0x00, 0x64, 0x9D, 0x01, 0x00, 0xA5, -/* 000070C0 */ 0x9D, 0x01, 0x00, 0xB4, 0x9D, 0x01, 0x00, 0xB5, 0x9D, 0x01, 0x00, 0xDA, 0x9D, 0x01, 0x00, 0xFF, -/* 000070D0 */ 0x9D, 0x01, 0x00, 0x1C, 0x9E, 0x01, 0x00, 0x50, 0x9E, 0x01, 0x00, 0x8B, 0x9E, 0x01, 0x00, 0x9D, -/* 000070E0 */ 0x9E, 0x01, 0x00, 0xB9, 0x9E, 0x01, 0x00, 0xC8, 0x9E, 0x01, 0x00, 0xC9, 0x9E, 0x01, 0x00, 0xF4, -/* 000070F0 */ 0x9E, 0x01, 0x00, 0x20, 0x9F, 0x01, 0x00, 0x3C, 0x9F, 0x01, 0x00, 0x8C, 0x9F, 0x01, 0x00, 0xB1, -/* 00007100 */ 0x9F, 0x01, 0x00, 0xC7, 0x9F, 0x01, 0x00, 0xF8, 0x9F, 0x01, 0x00, 0x0A, 0xA0, 0x01, 0x00, 0x18, -/* 00007110 */ 0xA0, 0x01, 0x00, 0x29, 0xA0, 0x01, 0x00, 0x33, 0xA0, 0x01, 0x00, 0x34, 0xA0, 0x01, 0x00, 0x5B, -/* 00007120 */ 0xA0, 0x01, 0x00, 0x9F, 0xA0, 0x01, 0x00, 0xC6, 0xA0, 0x01, 0x00, 0xC7, 0xA0, 0x01, 0x00, 0xEA, -/* 00007130 */ 0xA0, 0x01, 0x00, 0x0F, 0xA1, 0x01, 0x00, 0x49, 0xA1, 0x01, 0x00, 0x57, 0xA1, 0x01, 0x00, 0x58, -/* 00007140 */ 0xA1, 0x01, 0x00, 0x7C, 0xA1, 0x01, 0x00, 0xAE, 0xA1, 0x01, 0x00, 0xBC, 0xA1, 0x01, 0x00, 0xBD, -/* 00007150 */ 0xA1, 0x01, 0x00, 0xE1, 0xA1, 0x01, 0x00, 0x13, 0xA2, 0x01, 0x00, 0x21, 0xA2, 0x01, 0x00, 0x22, -/* 00007160 */ 0xA2, 0x01, 0x00, 0x89, 0xA2, 0x01, 0x00, 0x24, 0xA3, 0x01, 0x00, 0x32, 0xA3, 0x01, 0x00, 0x33, -/* 00007170 */ 0xA3, 0x01, 0x00, 0x4D, 0xA3, 0x01, 0x00, 0x57, 0xA3, 0x01, 0x00, 0x58, 0xA3, 0x01, 0x00, 0x71, -/* 00007180 */ 0xA3, 0x01, 0x00, 0x77, 0xA3, 0x01, 0x00, 0x78, 0xA3, 0x01, 0x00, 0xC6, 0xA3, 0x01, 0x00, 0xF2, -/* 00007190 */ 0xA3, 0x01, 0x00, 0xF3, 0xA3, 0x01, 0x00, 0x22, 0xA4, 0x01, 0x00, 0x62, 0xA4, 0x01, 0x00, 0x63, -/* 000071A0 */ 0xA4, 0x01, 0x00, 0xC4, 0xA4, 0x01, 0x00, 0x46, 0xA5, 0x01, 0x00, 0x54, 0xA5, 0x01, 0x00, 0x55, -/* 000071B0 */ 0xA5, 0x01, 0x00, 0x84, 0xA5, 0x01, 0x00, 0x95, 0xA5, 0x01, 0x00, 0xB2, 0xA5, 0x01, 0x00, 0xBC, -/* 000071C0 */ 0xA5, 0x01, 0x00, 0xC2, 0xA5, 0x01, 0x00, 0xC3, 0xA5, 0x01, 0x00, 0xDD, 0xA5, 0x01, 0x00, 0x07, -/* 000071D0 */ 0xA6, 0x01, 0x00, 0x31, 0xA6, 0x01, 0x00, 0x37, 0xA6, 0x01, 0x00, 0x38, 0xA6, 0x01, 0x00, 0x70, -/* 000071E0 */ 0xA6, 0x01, 0x00, 0xBC, 0xA6, 0x01, 0x00, 0x1A, 0xA7, 0x01, 0x00, 0x40, 0xA7, 0x01, 0x00, 0x85, -/* 000071F0 */ 0xA7, 0x01, 0x00, 0xE9, 0xA7, 0x01, 0x00, 0x69, 0xA8, 0x01, 0x00, 0x6A, 0xA8, 0x01, 0x00, 0xDC, -/* 00007200 */ 0xA8, 0x01, 0x00, 0x0D, 0xA9, 0x01, 0x00, 0x5C, 0xA9, 0x01, 0x00, 0xAE, 0xA9, 0x01, 0x00, 0x02, -/* 00007210 */ 0xAA, 0x01, 0x00, 0x3A, 0xAA, 0x01, 0x00, 0x8C, 0xAA, 0x01, 0x00, 0xDE, 0xAA, 0x01, 0x00, 0x33, -/* 00007220 */ 0xAB, 0x01, 0x00, 0x9F, 0xAB, 0x01, 0x00, 0xF5, 0xAB, 0x01, 0x00, 0xF6, 0xAB, 0x01, 0x00, 0x15, -/* 00007230 */ 0xAC, 0x01, 0x00, 0x34, 0xAC, 0x01, 0x00, 0x66, 0xAC, 0x01, 0x00, 0x67, 0xAC, 0x01, 0x00, 0xDE, -/* 00007240 */ 0xAC, 0x01, 0x00, 0x4B, 0xAD, 0x01, 0x00, 0x9E, 0xAD, 0x01, 0x00, 0xE1, 0xAD, 0x01, 0x00, 0xE2, -/* 00007250 */ 0xAD, 0x01, 0x00, 0x5F, 0xAE, 0x01, 0x00, 0xF3, 0xAE, 0x01, 0x00, 0x76, 0xAF, 0x01, 0x00, 0xF9, -/* 00007260 */ 0xAF, 0x01, 0x00, 0x6C, 0xB0, 0x01, 0x00, 0x6D, 0xB0, 0x01, 0x00, 0xD7, 0xB0, 0x01, 0x00, 0x50, -/* 00007270 */ 0xB1, 0x01, 0x00, 0x51, 0xB1, 0x01, 0x00, 0xB4, 0xB1, 0x01, 0x00, 0x43, 0xB2, 0x01, 0x00, 0xEC, -/* 00007280 */ 0xB2, 0x01, 0x00, 0x80, 0xB3, 0x01, 0x00, 0x17, 0xB4, 0x01, 0x00, 0xBB, 0xB4, 0x01, 0x00, 0xCF, -/* 00007290 */ 0xB4, 0x01, 0x00, 0xD0, 0xB4, 0x01, 0x00, 0x51, 0xB5, 0x01, 0x00, 0xBD, 0xB5, 0x01, 0x00, 0x2D, -/* 000072A0 */ 0xB6, 0x01, 0x00, 0x9D, 0xB6, 0x01, 0x00, 0x0F, 0xB7, 0x01, 0x00, 0x83, 0xB7, 0x01, 0x00, 0xF7, -/* 000072B0 */ 0xB7, 0x01, 0x00, 0x41, 0xB8, 0x01, 0x00, 0x42, 0xB8, 0x01, 0x00, 0xAF, 0xB8, 0x01, 0x00, 0xB0, -/* 000072C0 */ 0xB8, 0x01, 0x00, 0x16, 0xB9, 0x01, 0x00, 0xA1, 0xB9, 0x01, 0x00, 0x17, 0xBA, 0x01, 0x00, 0x1D, -/* 000072D0 */ 0xBA, 0x01, 0x00, 0x1E, 0xBA, 0x01, 0x00, 0x4C, 0xBA, 0x01, 0x00, 0x74, 0xBA, 0x01, 0x00, 0x75, -/* 000072E0 */ 0xBA, 0x01, 0x00, 0x96, 0xBA, 0x01, 0x00, 0xBE, 0xBA, 0x01, 0x00, 0xC8, 0xBA, 0x01, 0x00, 0xC9, -/* 000072F0 */ 0xBA, 0x01, 0x00, 0x15, 0xBB, 0x01, 0x00, 0x1B, 0xBB, 0x01, 0x00, 0x1C, 0xBB, 0x01, 0x00, 0x93, -/* 00007300 */ 0xBB, 0x01, 0x00, 0xC2, 0xBB, 0x01, 0x00, 0xF0, 0xBB, 0x01, 0x00, 0x07, 0xBC, 0x01, 0x00, 0x11, -/* 00007310 */ 0xBC, 0x01, 0x00, 0x12, 0xBC, 0x01, 0x00, 0x3D, 0xBC, 0x01, 0x00, 0x5E, 0xBC, 0x01, 0x00, 0x68, -/* 00007320 */ 0xBC, 0x01, 0x00, 0x69, 0xBC, 0x01, 0x00, 0x97, 0xBC, 0x01, 0x00, 0xD1, 0xBC, 0x01, 0x00, 0xD2, -/* 00007330 */ 0xBC, 0x01, 0x00, 0x07, 0xBD, 0x01, 0x00, 0x1E, 0xBD, 0x01, 0x00, 0x1F, 0xBD, 0x01, 0x00, 0x5D, -/* 00007340 */ 0xBD, 0x01, 0x00, 0xBE, 0xBD, 0x01, 0x00, 0xFA, 0xBD, 0x01, 0x00, 0x08, 0xBE, 0x01, 0x00, 0x09, -/* 00007350 */ 0xBE, 0x01, 0x00, 0x3A, 0xBE, 0x01, 0x00, 0x3B, 0xBE, 0x01, 0x00, 0x6C, 0xBE, 0x01, 0x00, 0xAC, -/* 00007360 */ 0xBE, 0x01, 0x00, 0xBA, 0xBE, 0x01, 0x00, 0xBB, 0xBE, 0x01, 0x00, 0xF1, 0xBE, 0x01, 0x00, 0xF2, -/* 00007370 */ 0xBE, 0x01, 0x00, 0x53, 0xBF, 0x01, 0x00, 0x93, 0xBF, 0x01, 0x00, 0xA1, 0xBF, 0x01, 0x00, 0xAD, -/* 00007380 */ 0xBF, 0x01, 0x00, 0xAE, 0xBF, 0x01, 0x00, 0xC3, 0xBF, 0x01, 0x00, 0xC9, 0xBF, 0x01, 0x00, 0xCA, -/* 00007390 */ 0xBF, 0x01, 0x00, 0x19, 0xC0, 0x01, 0x00, 0x32, 0xC0, 0x01, 0x00, 0x49, 0xC0, 0x01, 0x00, 0x9E, -/* 000073A0 */ 0xC0, 0x01, 0x00, 0xB0, 0xC0, 0x01, 0x00, 0x0E, 0xC1, 0x01, 0x00, 0x35, 0xC1, 0x01, 0x00, 0xC2, -/* 000073B0 */ 0xC1, 0x01, 0x00, 0xE9, 0xC1, 0x01, 0x00, 0xFB, 0xC1, 0x01, 0x00, 0x16, 0xC2, 0x01, 0x00, 0x3D, -/* 000073C0 */ 0xC2, 0x01, 0x00, 0x9F, 0xC2, 0x01, 0x00, 0xAD, 0xC2, 0x01, 0x00, 0xB9, 0xC2, 0x01, 0x00, 0x21, -/* 000073D0 */ 0xC3, 0x01, 0x00, 0x38, 0xC3, 0x01, 0x00, 0x3E, 0xC3, 0x01, 0x00, 0x3F, 0xC3, 0x01, 0x00, 0x95, -/* 000073E0 */ 0xC3, 0x01, 0x00, 0xC8, 0xC3, 0x01, 0x00, 0x01, 0xC4, 0x01, 0x00, 0x0B, 0xC4, 0x01, 0x00, 0x0C, -/* 000073F0 */ 0xC4, 0x01, 0x00, 0x44, 0xC4, 0x01, 0x00, 0x7F, 0xC4, 0x01, 0x00, 0xB8, 0xC4, 0x01, 0x00, 0xC2, -/* 00007400 */ 0xC4, 0x01, 0x00, 0xC3, 0xC4, 0x01, 0x00, 0xF8, 0xC4, 0x01, 0x00, 0xFE, 0xC4, 0x01, 0x00, 0xFF, -/* 00007410 */ 0xC4, 0x01, 0x00, 0x50, 0xC5, 0x01, 0x00, 0x83, 0xC5, 0x01, 0x00, 0xBC, 0xC5, 0x01, 0x00, 0xC6, -/* 00007420 */ 0xC5, 0x01, 0x00, 0xC7, 0xC5, 0x01, 0x00, 0xFF, 0xC5, 0x01, 0x00, 0x3A, 0xC6, 0x01, 0x00, 0x73, -/* 00007430 */ 0xC6, 0x01, 0x00, 0x7D, 0xC6, 0x01, 0x00, 0x7E, 0xC6, 0x01, 0x00, 0xAE, 0xC6, 0x01, 0x00, 0xB4, -/* 00007440 */ 0xC6, 0x01, 0x00, 0xB5, 0xC6, 0x01, 0x00, 0xDE, 0xC6, 0x01, 0x00, 0x19, 0xC7, 0x01, 0x00, 0x2E, -/* 00007450 */ 0xC7, 0x01, 0x00, 0x61, 0xC7, 0x01, 0x00, 0x62, 0xC7, 0x01, 0x00, 0x90, 0xC7, 0x01, 0x00, 0xBD, -/* 00007460 */ 0xC7, 0x01, 0x00, 0xBE, 0xC7, 0x01, 0x00, 0xF0, 0xC7, 0x01, 0x00, 0x26, 0xC8, 0x01, 0x00, 0x27, -/* 00007470 */ 0xC8, 0x01, 0x00, 0x6D, 0xC8, 0x01, 0x00, 0xE4, 0xC8, 0x01, 0x00, 0xF6, 0xC8, 0x01, 0x00, 0x04, -/* 00007480 */ 0xC9, 0x01, 0x00, 0x0E, 0xC9, 0x01, 0x00, 0x0F, 0xC9, 0x01, 0x00, 0x57, 0xC9, 0x01, 0x00, 0xD9, -/* 00007490 */ 0xC9, 0x01, 0x00, 0xEA, 0xC9, 0x01, 0x00, 0x4C, 0xCA, 0x01, 0x00, 0x56, 0xCA, 0x01, 0x00, 0x5D, -/* 000074A0 */ 0xCA, 0x01, 0x00, 0x5E, 0xCA, 0x01, 0x00, 0x9A, 0xCA, 0x01, 0x00, 0xFB, 0xCA, 0x01, 0x00, 0xFC, -/* 000074B0 */ 0xCA, 0x01, 0x00, 0x6F, 0xCB, 0x01, 0x00, 0xBF, 0xCB, 0x01, 0x00, 0x10, 0xCC, 0x01, 0x00, 0x93, -/* 000074C0 */ 0xCC, 0x01, 0x00, 0xEA, 0xCC, 0x01, 0x00, 0x52, 0xCD, 0x01, 0x00, 0x78, 0xCD, 0x01, 0x00, 0x79, -/* 000074D0 */ 0xCD, 0x01, 0x00, 0xD2, 0xCD, 0x01, 0x00, 0x5D, 0xCE, 0x01, 0x00, 0xB8, 0xCE, 0x01, 0x00, 0x24, -/* 000074E0 */ 0xCF, 0x01, 0x00, 0x4A, 0xCF, 0x01, 0x00, 0x4B, 0xCF, 0x01, 0x00, 0xA8, 0xCF, 0x01, 0x00, 0x37, -/* 000074F0 */ 0xD0, 0x01, 0x00, 0x94, 0xD0, 0x01, 0x00, 0x02, 0xD1, 0x01, 0x00, 0x28, 0xD1, 0x01, 0x00, 0x29, -/* 00007500 */ 0xD1, 0x01, 0x00, 0x6A, 0xD1, 0x01, 0x00, 0xDD, 0xD1, 0x01, 0x00, 0x17, 0xD2, 0x01, 0x00, 0x72, -/* 00007510 */ 0xD2, 0x01, 0x00, 0x98, 0xD2, 0x01, 0x00, 0x99, 0xD2, 0x01, 0x00, 0xF2, 0xD2, 0x01, 0x00, 0x4C, -/* 00007520 */ 0xD3, 0x01, 0x00, 0x9B, 0xD3, 0x01, 0x00, 0x17, 0xD4, 0x01, 0x00, 0x77, 0xD4, 0x01, 0x00, 0xDB, -/* 00007530 */ 0xD4, 0x01, 0x00, 0x41, 0xD5, 0x01, 0x00, 0x9A, 0xD5, 0x01, 0x00, 0x9B, 0xD5, 0x01, 0x00, 0x02, -/* 00007540 */ 0xD6, 0x01, 0x00, 0x47, 0xD6, 0x01, 0x00, 0x8A, 0xD6, 0x01, 0x00, 0xC3, 0xD6, 0x01, 0x00, 0xFE, -/* 00007550 */ 0xD6, 0x01, 0x00, 0x39, 0xD7, 0x01, 0x00, 0x77, 0xD7, 0x01, 0x00, 0xB4, 0xD7, 0x01, 0x00, 0xE9, -/* 00007560 */ 0xD7, 0x01, 0x00, 0x4A, 0xD8, 0x01, 0x00, 0x95, 0xD8, 0x01, 0x00, 0xE0, 0xD8, 0x01, 0x00, 0x2B, -/* 00007570 */ 0xD9, 0x01, 0x00, 0x75, 0xD9, 0x01, 0x00, 0x76, 0xD9, 0x01, 0x00, 0xF5, 0xD9, 0x01, 0x00, 0x90, -/* 00007580 */ 0xDA, 0x01, 0x00, 0xB0, 0xDA, 0x01, 0x00, 0xD0, 0xDA, 0x01, 0x00, 0xEE, 0xDA, 0x01, 0x00, 0xFC, -/* 00007590 */ 0xDA, 0x01, 0x00, 0xFD, 0xDA, 0x01, 0x00, 0x60, 0xDB, 0x01, 0x00, 0xDB, 0xDB, 0x01, 0x00, 0x1B, -/* 000075A0 */ 0xDC, 0x01, 0x00, 0x4C, 0xDC, 0x01, 0x00, 0xCB, 0xDC, 0x01, 0x00, 0x21, 0xDD, 0x01, 0x00, 0x65, -/* 000075B0 */ 0xDD, 0x01, 0x00, 0x66, 0xDD, 0x01, 0x00, 0xE5, 0xDD, 0x01, 0x00, 0x2D, 0xDE, 0x01, 0x00, 0x56, -/* 000075C0 */ 0xDE, 0x01, 0x00, 0x9B, 0xDE, 0x01, 0x00, 0xAD, 0xDE, 0x01, 0x00, 0xBD, 0xDE, 0x01, 0x00, 0xBE, -/* 000075D0 */ 0xDE, 0x01, 0x00, 0xF6, 0xDE, 0x01, 0x00, 0x02, 0xDF, 0x01, 0x00, 0x1B, 0xDF, 0x01, 0x00, 0x25, -/* 000075E0 */ 0xDF, 0x01, 0x00, 0x26, 0xDF, 0x01, 0x00, 0x77, 0xDF, 0x01, 0x00, 0xA5, 0xDF, 0x01, 0x00, 0xD0, -/* 000075F0 */ 0xDF, 0x01, 0x00, 0xFC, 0xDF, 0x01, 0x00, 0x37, 0xE0, 0x01, 0x00, 0x61, 0xE0, 0x01, 0x00, 0x6B, -/* 00007600 */ 0xE0, 0x01, 0x00, 0x6C, 0xE0, 0x01, 0x00, 0x8C, 0xE0, 0x01, 0x00, 0xAF, 0xE0, 0x01, 0x00, 0xD1, -/* 00007610 */ 0xE0, 0x01, 0x00, 0x25, 0xE1, 0x01, 0x00, 0x4E, 0xE1, 0x01, 0x00, 0xB8, 0xE1, 0x01, 0x00, 0xD1, -/* 00007620 */ 0xE1, 0x01, 0x00, 0x23, 0xE2, 0x01, 0x00, 0x6C, 0xE2, 0x01, 0x00, 0x92, 0xE2, 0x01, 0x00, 0xF4, -/* 00007630 */ 0xE2, 0x01, 0x00, 0x02, 0xE3, 0x01, 0x00, 0x13, 0xE3, 0x01, 0x00, 0x5C, 0xE3, 0x01, 0x00, 0xB8, -/* 00007640 */ 0xE3, 0x01, 0x00, 0xD7, 0xE3, 0x01, 0x00, 0xF9, 0xE3, 0x01, 0x00, 0x03, 0xE4, 0x01, 0x00, 0x04, -/* 00007650 */ 0xE4, 0x01, 0x00, 0x2B, 0xE4, 0x01, 0x00, 0x57, 0xE4, 0x01, 0x00, 0x81, 0xE4, 0x01, 0x00, 0x8B, -/* 00007660 */ 0xE4, 0x01, 0x00, 0x8C, 0xE4, 0x01, 0x00, 0xE8, 0xE4, 0x01, 0x00, 0x3D, 0xE5, 0x01, 0x00, 0x63, -/* 00007670 */ 0xE5, 0x01, 0x00, 0xA1, 0xE5, 0x01, 0x00, 0xB6, 0xE5, 0x01, 0x00, 0xF6, 0xE5, 0x01, 0x00, 0x04, -/* 00007680 */ 0xE6, 0x01, 0x00, 0x0F, 0xE6, 0x01, 0x00, 0x10, 0xE6, 0x01, 0x00, 0x66, 0xE6, 0x01, 0x00, 0x99, -/* 00007690 */ 0xE6, 0x01, 0x00, 0xE6, 0xE6, 0x01, 0x00, 0x3A, 0xE7, 0x01, 0x00, 0x64, 0xE7, 0x01, 0x00, 0x6E, -/* 000076A0 */ 0xE7, 0x01, 0x00, 0x6F, 0xE7, 0x01, 0x00, 0xB1, 0xE7, 0x01, 0x00, 0xDE, 0xE7, 0x01, 0x00, 0x38, -/* 000076B0 */ 0xE8, 0x01, 0x00, 0x49, 0xE8, 0x01, 0x00, 0x9D, 0xE8, 0x01, 0x00, 0xA7, 0xE8, 0x01, 0x00, 0xA8, -/* 000076C0 */ 0xE8, 0x01, 0x00, 0xCE, 0xE8, 0x01, 0x00, 0xD5, 0xE8, 0x01, 0x00, 0xD6, 0xE8, 0x01, 0x00, 0x0B, -/* 000076D0 */ 0xE9, 0x01, 0x00, 0x2D, 0xE9, 0x01, 0x00, 0x2E, 0xE9, 0x01, 0x00, 0x6A, 0xE9, 0x01, 0x00, 0x6B, -/* 000076E0 */ 0xE9, 0x01, 0x00, 0xB4, 0xE9, 0x01, 0x00, 0xE7, 0xE9, 0x01, 0x00, 0x17, 0xEA, 0x01, 0x00, 0x29, -/* 000076F0 */ 0xEA, 0x01, 0x00, 0x2A, 0xEA, 0x01, 0x00, 0xB9, 0xEA, 0x01, 0x00, 0x0F, 0xEB, 0x01, 0x00, 0x21, -/* 00007700 */ 0xEB, 0x01, 0x00, 0x22, 0xEB, 0x01, 0x00, 0x5B, 0xEB, 0x01, 0x00, 0x5C, 0xEB, 0x01, 0x00, 0x7F, -/* 00007710 */ 0xEB, 0x01, 0x00, 0xB5, 0xEB, 0x01, 0x00, 0xEB, 0xEB, 0x01, 0x00, 0x04, 0xEC, 0x01, 0x00, 0x3E, -/* 00007720 */ 0xEC, 0x01, 0x00, 0x50, 0xEC, 0x01, 0x00, 0x51, 0xEC, 0x01, 0x00, 0xC2, 0xEC, 0x01, 0x00, 0x21, -/* 00007730 */ 0xED, 0x01, 0x00, 0xA2, 0xED, 0x01, 0x00, 0x10, 0xEE, 0x01, 0x00, 0x83, 0xEE, 0x01, 0x00, 0xE5, -/* 00007740 */ 0xEE, 0x01, 0x00, 0xE6, 0xEE, 0x01, 0x00, 0x1E, 0xEF, 0x01, 0x00, 0x5F, 0xEF, 0x01, 0x00, 0xCD, -/* 00007750 */ 0xEF, 0x01, 0x00, 0xCE, 0xEF, 0x01, 0x00, 0xF9, 0xEF, 0x01, 0x00, 0x62, 0xF0, 0x01, 0x00, 0xA7, -/* 00007760 */ 0xF0, 0x01, 0x00, 0xA8, 0xF0, 0x01, 0x00, 0xDA, 0xF0, 0x01, 0x00, 0x45, 0xF1, 0x01, 0x00, 0xC7, -/* 00007770 */ 0xF1, 0x01, 0x00, 0xF3, 0xF1, 0x01, 0x00, 0x3F, 0xF2, 0x01, 0x00, 0x86, 0xF2, 0x01, 0x00, 0x22, -/* 00007780 */ 0xF3, 0x01, 0x00, 0x6E, 0xF3, 0x01, 0x00, 0xA5, 0xF3, 0x01, 0x00, 0x29, 0xF4, 0x01, 0x00, 0x4E, -/* 00007790 */ 0xF4, 0x01, 0x00, 0x7E, 0xF4, 0x01, 0x00, 0x9C, 0xF4, 0x01, 0x00, 0x3F, 0xF5, 0x01, 0x00, 0x9E, -/* 000077A0 */ 0xF5, 0x01, 0x00, 0xCD, 0xF5, 0x01, 0x00, 0xE7, 0xF5, 0x01, 0x00, 0xFF, 0xF5, 0x01, 0x00, 0x11, -/* 000077B0 */ 0xF6, 0x01, 0x00, 0x40, 0xF6, 0x01, 0x00, 0xAF, 0xF6, 0x01, 0x00, 0xDE, 0xF6, 0x01, 0x00, 0x6C, -/* 000077C0 */ 0xF7, 0x01, 0x00, 0xA3, 0xF7, 0x01, 0x00, 0x0D, 0xF8, 0x01, 0x00, 0x27, 0xF8, 0x01, 0x00, 0x3D, -/* 000077D0 */ 0xF8, 0x01, 0x00, 0x58, 0xF8, 0x01, 0x00, 0x87, 0xF8, 0x01, 0x00, 0x9D, 0xF8, 0x01, 0x00, 0xAF, -/* 000077E0 */ 0xF8, 0x01, 0x00, 0xB0, 0xF8, 0x01, 0x00, 0xDF, 0xF8, 0x01, 0x00, 0x0E, 0xF9, 0x01, 0x00, 0x28, -/* 000077F0 */ 0xF9, 0x01, 0x00, 0xAE, 0xF9, 0x01, 0x00, 0xD0, 0xF9, 0x01, 0x00, 0xFE, 0xF9, 0x01, 0x00, 0x2C, -/* 00007800 */ 0xFA, 0x01, 0x00, 0x2D, 0xFA, 0x01, 0x00, 0x9E, 0xFA, 0x01, 0x00, 0x27, 0xFB, 0x01, 0x00, 0x90, -/* 00007810 */ 0xFB, 0x01, 0x00, 0xCF, 0xFB, 0x01, 0x00, 0xE5, 0xFB, 0x01, 0x00, 0xE6, 0xFB, 0x01, 0x00, 0x0B, -/* 00007820 */ 0xFC, 0x01, 0x00, 0x38, 0xFC, 0x01, 0x00, 0x65, 0xFC, 0x01, 0x00, 0x92, 0xFC, 0x01, 0x00, 0xAF, -/* 00007830 */ 0xFC, 0x01, 0x00, 0xDC, 0xFC, 0x01, 0x00, 0xF2, 0xFC, 0x01, 0x00, 0x04, 0xFD, 0x01, 0x00, 0x05, -/* 00007840 */ 0xFD, 0x01, 0x00, 0x36, 0xFD, 0x01, 0x00, 0x63, 0xFD, 0x01, 0x00, 0x75, 0xFD, 0x01, 0x00, 0x76, -/* 00007850 */ 0xFD, 0x01, 0x00, 0xA3, 0xFD, 0x01, 0x00, 0xC8, 0xFD, 0x01, 0x00, 0xDA, 0xFD, 0x01, 0x00, 0xDB, -/* 00007860 */ 0xFD, 0x01, 0x00, 0x0C, 0xFE, 0x01, 0x00, 0x3A, 0xFE, 0x01, 0x00, 0x87, 0xFE, 0x01, 0x00, 0xCF, -/* 00007870 */ 0xFE, 0x01, 0x00, 0xF9, 0xFE, 0x01, 0x00, 0x2F, 0xFF, 0x01, 0x00, 0x71, 0xFF, 0x01, 0x00, 0xA3, -/* 00007880 */ 0xFF, 0x01, 0x00, 0xD1, 0xFF, 0x01, 0x00, 0x03, 0x00, 0x02, 0x00, 0x3A, 0x00, 0x02, 0x00, 0x48, -/* 00007890 */ 0x00, 0x02, 0x00, 0x49, 0x00, 0x02, 0x00, 0xB8, 0x00, 0x02, 0x00, 0xE1, 0x00, 0x02, 0x00, 0x1C, -/* 000078A0 */ 0x01, 0x02, 0x00, 0x76, 0x01, 0x02, 0x00, 0x88, 0x01, 0x02, 0x00, 0xB2, 0x01, 0x02, 0x00, 0xE2, -/* 000078B0 */ 0x01, 0x02, 0x00, 0xF4, 0x01, 0x02, 0x00, 0x98, 0x02, 0x02, 0x00, 0xC4, 0x02, 0x02, 0x00, 0xED, -/* 000078C0 */ 0x02, 0x02, 0x00, 0x27, 0x03, 0x02, 0x00, 0x74, 0x03, 0x02, 0x00, 0xAA, 0x03, 0x02, 0x00, 0xC7, -/* 000078D0 */ 0x03, 0x02, 0x00, 0xE1, 0x03, 0x02, 0x00, 0x15, 0x04, 0x02, 0x00, 0x61, 0x04, 0x02, 0x00, 0x96, -/* 000078E0 */ 0x04, 0x02, 0x00, 0xC1, 0x04, 0x02, 0x00, 0x08, 0x05, 0x02, 0x00, 0x1C, 0x05, 0x02, 0x00, 0x58, -/* 000078F0 */ 0x05, 0x02, 0x00, 0x59, 0x05, 0x02, 0x00, 0x80, 0x05, 0x02, 0x00, 0x81, 0x05, 0x02, 0x00, 0xCF, -/* 00007900 */ 0x05, 0x02, 0x00, 0x0E, 0x06, 0x02, 0x00, 0x4D, 0x06, 0x02, 0x00, 0x63, 0x06, 0x02, 0x00, 0x64, -/* 00007910 */ 0x06, 0x02, 0x00, 0x9B, 0x06, 0x02, 0x00, 0xCF, 0x06, 0x02, 0x00, 0x18, 0x07, 0x02, 0x00, 0x2E, -/* 00007920 */ 0x07, 0x02, 0x00, 0x2F, 0x07, 0x02, 0x00, 0x6A, 0x07, 0x02, 0x00, 0xB0, 0x07, 0x02, 0x00, 0xB1, -/* 00007930 */ 0x07, 0x02, 0x00, 0xE7, 0x07, 0x02, 0x00, 0x26, 0x08, 0x02, 0x00, 0x6B, 0x08, 0x02, 0x00, 0x81, -/* 00007940 */ 0x08, 0x02, 0x00, 0x82, 0x08, 0x02, 0x00, 0xCA, 0x08, 0x02, 0x00, 0xCB, 0x08, 0x02, 0x00, 0xF8, -/* 00007950 */ 0x08, 0x02, 0x00, 0x60, 0x09, 0x02, 0x00, 0x9D, 0x09, 0x02, 0x00, 0xBD, 0x09, 0x02, 0x00, 0xCF, -/* 00007960 */ 0x09, 0x02, 0x00, 0x0D, 0x0A, 0x02, 0x00, 0x0E, 0x0A, 0x02, 0x00, 0x37, 0x0A, 0x02, 0x00, 0x6B, -/* 00007970 */ 0x0A, 0x02, 0x00, 0xCD, 0x0A, 0x02, 0x00, 0xE3, 0x0A, 0x02, 0x00, 0xE4, 0x0A, 0x02, 0x00, 0x2B, -/* 00007980 */ 0x0B, 0x02, 0x00, 0x88, 0x0B, 0x02, 0x00, 0xEA, 0x0B, 0x02, 0x00, 0x00, 0x0C, 0x02, 0x00, 0x01, -/* 00007990 */ 0x0C, 0x02, 0x00, 0x24, 0x0C, 0x02, 0x00, 0x47, 0x0C, 0x02, 0x00, 0x48, 0x0C, 0x02, 0x00, 0x82, -/* 000079A0 */ 0x0C, 0x02, 0x00, 0x9D, 0x0C, 0x02, 0x00, 0xB8, 0x0C, 0x02, 0x00, 0xF1, 0x0C, 0x02, 0x00, 0x42, -/* 000079B0 */ 0x0D, 0x02, 0x00, 0x7C, 0x0D, 0x02, 0x00, 0xAC, 0x0D, 0x02, 0x00, 0xF8, 0x0D, 0x02, 0x00, 0x10, -/* 000079C0 */ 0x0E, 0x02, 0x00, 0x22, 0x0E, 0x02, 0x00, 0x71, 0x0E, 0x02, 0x00, 0x72, 0x0E, 0x02, 0x00, 0x04, -/* 000079D0 */ 0x0F, 0x02, 0x00, 0x05, 0x0F, 0x02, 0x00, 0x96, 0x0F, 0x02, 0x00, 0xDA, 0x0F, 0x02, 0x00, 0xDB, -/* 000079E0 */ 0x0F, 0x02, 0x00, 0x70, 0x10, 0x02, 0x00, 0x71, 0x10, 0x02, 0x00, 0xBF, 0x10, 0x02, 0x00, 0xF7, -/* 000079F0 */ 0x10, 0x02, 0x00, 0x2F, 0x11, 0x02, 0x00, 0x9D, 0x11, 0x02, 0x00, 0xB7, 0x11, 0x02, 0x00, 0x02, -/* 00007A00 */ 0x12, 0x02, 0x00, 0x63, 0x12, 0x02, 0x00, 0xD1, 0x12, 0x02, 0x00, 0xEB, 0x12, 0x02, 0x00, 0xEC, -/* 00007A10 */ 0x12, 0x02, 0x00, 0x0D, 0x13, 0x02, 0x00, 0x48, 0x13, 0x02, 0x00, 0x81, 0x13, 0x02, 0x00, 0xC6, -/* 00007A20 */ 0x13, 0x02, 0x00, 0x17, 0x14, 0x02, 0x00, 0x72, 0x14, 0x02, 0x00, 0x07, 0x15, 0x02, 0x00, 0x9C, -/* 00007A30 */ 0x15, 0x02, 0x00, 0xB6, 0x15, 0x02, 0x00, 0x03, 0x16, 0x02, 0x00, 0x17, 0x16, 0x02, 0x00, 0x18, -/* 00007A40 */ 0x16, 0x02, 0x00, 0x5E, 0x16, 0x02, 0x00, 0xA6, 0x16, 0x02, 0x00, 0xDE, 0x16, 0x02, 0x00, 0x44, -/* 00007A50 */ 0x17, 0x02, 0x00, 0x5E, 0x17, 0x02, 0x00, 0x5F, 0x17, 0x02, 0x00, 0xAA, 0x17, 0x02, 0x00, 0x0B, -/* 00007A60 */ 0x18, 0x02, 0x00, 0x71, 0x18, 0x02, 0x00, 0x8B, 0x18, 0x02, 0x00, 0x8C, 0x18, 0x02, 0x00, 0xC8, -/* 00007A70 */ 0x18, 0x02, 0x00, 0x06, 0x19, 0x02, 0x00, 0x1A, 0x19, 0x02, 0x00, 0x1B, 0x19, 0x02, 0x00, 0x3C, -/* 00007A80 */ 0x19, 0x02, 0x00, 0x4A, 0x19, 0x02, 0x00, 0x54, 0x19, 0x02, 0x00, 0x9F, 0x19, 0x02, 0x00, 0xB9, -/* 00007A90 */ 0x19, 0x02, 0x00, 0xC3, 0x19, 0x02, 0x00, 0xC4, 0x19, 0x02, 0x00, 0xFE, 0x19, 0x02, 0x00, 0x24, -/* 00007AA0 */ 0x1A, 0x02, 0x00, 0x60, 0x1A, 0x02, 0x00, 0xB1, 0x1A, 0x02, 0x00, 0xE8, 0x1A, 0x02, 0x00, 0x18, -/* 00007AB0 */ 0x1B, 0x02, 0x00, 0x2A, 0x1B, 0x02, 0x00, 0x2B, 0x1B, 0x02, 0x00, 0xC2, 0x1B, 0x02, 0x00, 0x20, -/* 00007AC0 */ 0x1C, 0x02, 0x00, 0x32, 0x1C, 0x02, 0x00, 0x33, 0x1C, 0x02, 0x00, 0x70, 0x1C, 0x02, 0x00, 0x71, -/* 00007AD0 */ 0x1C, 0x02, 0x00, 0x94, 0x1C, 0x02, 0x00, 0xCA, 0x1C, 0x02, 0x00, 0x00, 0x1D, 0x02, 0x00, 0x19, -/* 00007AE0 */ 0x1D, 0x02, 0x00, 0x53, 0x1D, 0x02, 0x00, 0x65, 0x1D, 0x02, 0x00, 0x66, 0x1D, 0x02, 0x00, 0xD7, -/* 00007AF0 */ 0x1D, 0x02, 0x00, 0x49, 0x1E, 0x02, 0x00, 0x4A, 0x1E, 0x02, 0x00, 0x95, 0x1E, 0x02, 0x00, 0xC0, -/* 00007B00 */ 0x1E, 0x02, 0x00, 0x00, 0x1F, 0x02, 0x00, 0x33, 0x1F, 0x02, 0x00, 0x74, 0x1F, 0x02, 0x00, 0x86, -/* 00007B10 */ 0x1F, 0x02, 0x00, 0x87, 0x1F, 0x02, 0x00, 0xE6, 0x1F, 0x02, 0x00, 0x63, 0x20, 0x02, 0x00, 0x93, -/* 00007B20 */ 0x20, 0x02, 0x00, 0x94, 0x20, 0x02, 0x00, 0xFB, 0x20, 0x02, 0x00, 0x32, 0x21, 0x02, 0x00, 0x69, -/* 00007B30 */ 0x21, 0x02, 0x00, 0xA7, 0x21, 0x02, 0x00, 0xA8, 0x21, 0x02, 0x00, 0xF9, 0x21, 0x02, 0x00, 0x4A, -/* 00007B40 */ 0x22, 0x02, 0x00, 0x4B, 0x22, 0x02, 0x00, 0xC5, 0x22, 0x02, 0x00, 0x34, 0x23, 0x02, 0x00, 0xBB, -/* 00007B50 */ 0x23, 0x02, 0x00, 0xCD, 0x23, 0x02, 0x00, 0xCE, 0x23, 0x02, 0x00, 0x2F, 0x24, 0x02, 0x00, 0x30, -/* 00007B60 */ 0x24, 0x02, 0x00, 0x68, 0x24, 0x02, 0x00, 0xA9, 0x24, 0x02, 0x00, 0x16, 0x25, 0x02, 0x00, 0x17, -/* 00007B70 */ 0x25, 0x02, 0x00, 0x4B, 0x25, 0x02, 0x00, 0xA9, 0x25, 0x02, 0x00, 0xF2, 0x25, 0x02, 0x00, 0x04, -/* 00007B80 */ 0x26, 0x02, 0x00, 0x05, 0x26, 0x02, 0x00, 0x31, 0x26, 0x02, 0x00, 0x6C, 0x26, 0x02, 0x00, 0xA9, -/* 00007B90 */ 0x26, 0x02, 0x00, 0xBF, 0x26, 0x02, 0x00, 0x15, 0x27, 0x02, 0x00, 0x2F, 0x27, 0x02, 0x00, 0x7B, -/* 00007BA0 */ 0x27, 0x02, 0x00, 0x9D, 0x27, 0x02, 0x00, 0xCB, 0x27, 0x02, 0x00, 0x18, 0x28, 0x02, 0x00, 0x2E, -/* 00007BB0 */ 0x28, 0x02, 0x00, 0xA4, 0x28, 0x02, 0x00, 0x08, 0x29, 0x02, 0x00, 0x21, 0x29, 0x02, 0x00, 0x4B, -/* 00007BC0 */ 0x29, 0x02, 0x00, 0x7C, 0x29, 0x02, 0x00, 0xE5, 0x29, 0x02, 0x00, 0x14, 0x2A, 0x02, 0x00, 0x6F, -/* 00007BD0 */ 0x2A, 0x02, 0x00, 0x8C, 0x2A, 0x02, 0x00, 0xE6, 0x2A, 0x02, 0x00, 0xFC, 0x2A, 0x02, 0x00, 0x0E, -/* 00007BE0 */ 0x2B, 0x02, 0x00, 0x0F, 0x2B, 0x02, 0x00, 0xA3, 0x2B, 0x02, 0x00, 0xA4, 0x2B, 0x02, 0x00, 0xD5, -/* 00007BF0 */ 0x2B, 0x02, 0x00, 0x0D, 0x2C, 0x02, 0x00, 0x50, 0x2C, 0x02, 0x00, 0x7E, 0x2C, 0x02, 0x00, 0x7F, -/* 00007C00 */ 0x2C, 0x02, 0x00, 0xAD, 0x2C, 0x02, 0x00, 0xE5, 0x2C, 0x02, 0x00, 0xF7, 0x2C, 0x02, 0x00, 0xF8, -/* 00007C10 */ 0x2C, 0x02, 0x00, 0x2D, 0x2D, 0x02, 0x00, 0x73, 0x2D, 0x02, 0x00, 0xD2, 0x2D, 0x02, 0x00, 0x0A, -/* 00007C20 */ 0x2E, 0x02, 0x00, 0x6C, 0x2E, 0x02, 0x00, 0xA9, 0x2E, 0x02, 0x00, 0x09, 0x2F, 0x02, 0x00, 0x46, -/* 00007C30 */ 0x2F, 0x02, 0x00, 0xA6, 0x2F, 0x02, 0x00, 0xBC, 0x2F, 0x02, 0x00, 0xCE, 0x2F, 0x02, 0x00, 0xCF, -/* 00007C40 */ 0x2F, 0x02, 0x00, 0x1B, 0x30, 0x02, 0x00, 0x69, 0x30, 0x02, 0x00, 0xB7, 0x30, 0x02, 0x00, 0xB8, -/* 00007C50 */ 0x30, 0x02, 0x00, 0xF6, 0x30, 0x02, 0x00, 0x4E, 0x31, 0x02, 0x00, 0xA6, 0x31, 0x02, 0x00, 0xB8, -/* 00007C60 */ 0x31, 0x02, 0x00, 0xB9, 0x31, 0x02, 0x00, 0xF9, 0x31, 0x02, 0x00, 0x33, 0x32, 0x02, 0x00, 0x34, -/* 00007C70 */ 0x32, 0x02, 0x00, 0x4A, 0x32, 0x02, 0x00, 0x9E, 0x32, 0x02, 0x00, 0xDC, 0x32, 0x02, 0x00, 0xFA, -/* 00007C80 */ 0x32, 0x02, 0x00, 0x24, 0x33, 0x02, 0x00, 0x7B, 0x33, 0x02, 0x00, 0x00, 0x34, 0x02, 0x00, 0x65, -/* 00007C90 */ 0x34, 0x02, 0x00, 0xA0, 0x34, 0x02, 0x00, 0xB2, 0x34, 0x02, 0x00, 0xB3, 0x34, 0x02, 0x00, 0xEA, -/* 00007CA0 */ 0x34, 0x02, 0x00, 0x4B, 0x35, 0x02, 0x00, 0x5D, 0x35, 0x02, 0x00, 0x5E, 0x35, 0x02, 0x00, 0xDC, -/* 00007CB0 */ 0x35, 0x02, 0x00, 0x1B, 0x36, 0x02, 0x00, 0x29, 0x36, 0x02, 0x00, 0x2A, 0x36, 0x02, 0x00, 0x9A, -/* 00007CC0 */ 0x36, 0x02, 0x00, 0xE9, 0x36, 0x02, 0x00, 0x4A, 0x37, 0x02, 0x00, 0x5C, 0x37, 0x02, 0x00, 0x5D, -/* 00007CD0 */ 0x37, 0x02, 0x00, 0x97, 0x37, 0x02, 0x00, 0xE8, 0x37, 0x02, 0x00, 0xE9, 0x37, 0x02, 0x00, 0x1A, -/* 00007CE0 */ 0x38, 0x02, 0x00, 0x60, 0x38, 0x02, 0x00, 0x9D, 0x38, 0x02, 0x00, 0x9E, 0x38, 0x02, 0x00, 0xC5, -/* 00007CF0 */ 0x38, 0x02, 0x00, 0x17, 0x39, 0x02, 0x00, 0x56, 0x39, 0x02, 0x00, 0x99, 0x39, 0x02, 0x00, 0xAF, -/* 00007D00 */ 0x39, 0x02, 0x00, 0xB0, 0x39, 0x02, 0x00, 0xE7, 0x39, 0x02, 0x00, 0xE8, 0x39, 0x02, 0x00, 0x1C, -/* 00007D10 */ 0x3A, 0x02, 0x00, 0x69, 0x3A, 0x02, 0x00, 0x7F, 0x3A, 0x02, 0x00, 0x80, 0x3A, 0x02, 0x00, 0xBB, -/* 00007D20 */ 0x3A, 0x02, 0x00, 0x01, 0x3B, 0x02, 0x00, 0x02, 0x3B, 0x02, 0x00, 0x38, 0x3B, 0x02, 0x00, 0x77, -/* 00007D30 */ 0x3B, 0x02, 0x00, 0xBC, 0x3B, 0x02, 0x00, 0xD2, 0x3B, 0x02, 0x00, 0xD3, 0x3B, 0x02, 0x00, 0x1F, -/* 00007D40 */ 0x3C, 0x02, 0x00, 0x20, 0x3C, 0x02, 0x00, 0x85, 0x3C, 0x02, 0x00, 0xC1, 0x3C, 0x02, 0x00, 0xC2, -/* 00007D50 */ 0x3C, 0x02, 0x00, 0xE2, 0x3C, 0x02, 0x00, 0xF4, 0x3C, 0x02, 0x00, 0x3A, 0x3D, 0x02, 0x00, 0x3B, -/* 00007D60 */ 0x3D, 0x02, 0x00, 0x60, 0x3D, 0x02, 0x00, 0x8E, 0x3D, 0x02, 0x00, 0x8F, 0x3D, 0x02, 0x00, 0xC3, -/* 00007D70 */ 0x3D, 0x02, 0x00, 0x2C, 0x3E, 0x02, 0x00, 0x42, 0x3E, 0x02, 0x00, 0x43, 0x3E, 0x02, 0x00, 0x8A, -/* 00007D80 */ 0x3E, 0x02, 0x00, 0xEB, 0x3E, 0x02, 0x00, 0x54, 0x3F, 0x02, 0x00, 0x6A, 0x3F, 0x02, 0x00, 0x6B, -/* 00007D90 */ 0x3F, 0x02, 0x00, 0xB6, 0x3F, 0x02, 0x00, 0xC8, 0x3F, 0x02, 0x00, 0x19, 0x40, 0x02, 0x00, 0x1A, -/* 00007DA0 */ 0x40, 0x02, 0x00, 0xB4, 0x40, 0x02, 0x00, 0xB5, 0x40, 0x02, 0x00, 0x31, 0x41, 0x02, 0x00, 0xAF, -/* 00007DB0 */ 0x41, 0x02, 0x00, 0xD3, 0x41, 0x02, 0x00, 0xD4, 0x41, 0x02, 0x00, 0x6D, 0x42, 0x02, 0x00, 0xB5, -/* 00007DC0 */ 0x42, 0x02, 0x00, 0x52, 0x43, 0x02, 0x00, 0x53, 0x43, 0x02, 0x00, 0xA5, 0x43, 0x02, 0x00, 0xDD, -/* 00007DD0 */ 0x43, 0x02, 0x00, 0x15, 0x44, 0x02, 0x00, 0x8B, 0x44, 0x02, 0x00, 0xA5, 0x44, 0x02, 0x00, 0xF0, -/* 00007DE0 */ 0x44, 0x02, 0x00, 0x55, 0x45, 0x02, 0x00, 0xCB, 0x45, 0x02, 0x00, 0xE5, 0x45, 0x02, 0x00, 0xE6, -/* 00007DF0 */ 0x45, 0x02, 0x00, 0x2C, 0x46, 0x02, 0x00, 0x2D, 0x46, 0x02, 0x00, 0x89, 0x46, 0x02, 0x00, 0xDF, -/* 00007E00 */ 0x46, 0x02, 0x00, 0x36, 0x47, 0x02, 0x00, 0x54, 0x47, 0x02, 0x00, 0x70, 0x47, 0x02, 0x00, 0x71, -/* 00007E10 */ 0x47, 0x02, 0x00, 0xB3, 0x47, 0x02, 0x00, 0x00, 0x48, 0x02, 0x00, 0x14, 0x48, 0x02, 0x00, 0x15, -/* 00007E20 */ 0x48, 0x02, 0x00, 0x5E, 0x48, 0x02, 0x00, 0xA5, 0x48, 0x02, 0x00, 0xDD, 0x48, 0x02, 0x00, 0x4A, -/* 00007E30 */ 0x49, 0x02, 0x00, 0x64, 0x49, 0x02, 0x00, 0x65, 0x49, 0x02, 0x00, 0xB0, 0x49, 0x02, 0x00, 0x15, -/* 00007E40 */ 0x4A, 0x02, 0x00, 0x82, 0x4A, 0x02, 0x00, 0x9C, 0x4A, 0x02, 0x00, 0x9D, 0x4A, 0x02, 0x00, 0xD8, -/* 00007E50 */ 0x4A, 0x02, 0x00, 0x16, 0x4B, 0x02, 0x00, 0x2A, 0x4B, 0x02, 0x00, 0x2B, 0x4B, 0x02, 0x00, 0x50, -/* 00007E60 */ 0x4B, 0x02, 0x00, 0x5E, 0x4B, 0x02, 0x00, 0x68, 0x4B, 0x02, 0x00, 0xB7, 0x4B, 0x02, 0x00, 0xD1, -/* 00007E70 */ 0x4B, 0x02, 0x00, 0xDB, 0x4B, 0x02, 0x00, 0xDC, 0x4B, 0x02, 0x00, 0x5C, 0x4C, 0x02, 0x00, 0x84, -/* 00007E80 */ 0x4C, 0x02, 0x00, 0xBE, 0x4C, 0x02, 0x00, 0x04, 0x4D, 0x02, 0x00, 0x31, 0x4D, 0x02, 0x00, 0x67, -/* 00007E90 */ 0x4D, 0x02, 0x00, 0x80, 0x4D, 0x02, 0x00, 0xBA, 0x4D, 0x02, 0x00, 0xCC, 0x4D, 0x02, 0x00, 0xCD, -/* 00007EA0 */ 0x4D, 0x02, 0x00, 0xF6, 0x4D, 0x02, 0x00, 0x37, 0x4E, 0x02, 0x00, 0xCA, 0x4E, 0x02, 0x00, 0xF8, -/* 00007EB0 */ 0x4E, 0x02, 0x00, 0x0E, 0x4F, 0x02, 0x00, 0x20, 0x4F, 0x02, 0x00, 0x61, 0x4F, 0x02, 0x00, 0xD7, -/* 00007EC0 */ 0x4F, 0x02, 0x00, 0x05, 0x50, 0x02, 0x00, 0x1B, 0x50, 0x02, 0x00, 0x2D, 0x50, 0x02, 0x00, 0x2E, -/* 00007ED0 */ 0x50, 0x02, 0x00, 0x81, 0x50, 0x02, 0x00, 0xBD, 0x50, 0x02, 0x00, 0xF7, 0x50, 0x02, 0x00, 0x34, -/* 00007EE0 */ 0x51, 0x02, 0x00, 0x4C, 0x51, 0x02, 0x00, 0x89, 0x51, 0x02, 0x00, 0xC3, 0x51, 0x02, 0x00, 0x00, -/* 00007EF0 */ 0x52, 0x02, 0x00, 0x18, 0x52, 0x02, 0x00, 0x53, 0x52, 0x02, 0x00, 0x8D, 0x52, 0x02, 0x00, 0xCA, -/* 00007F00 */ 0x52, 0x02, 0x00, 0xE2, 0x52, 0x02, 0x00, 0xF4, 0x52, 0x02, 0x00, 0x47, 0x53, 0x02, 0x00, 0x83, -/* 00007F10 */ 0x53, 0x02, 0x00, 0xBD, 0x53, 0x02, 0x00, 0xFA, 0x53, 0x02, 0x00, 0x12, 0x54, 0x02, 0x00, 0x50, -/* 00007F20 */ 0x54, 0x02, 0x00, 0x8A, 0x54, 0x02, 0x00, 0xC7, 0x54, 0x02, 0x00, 0xDF, 0x54, 0x02, 0x00, 0x1D, -/* 00007F30 */ 0x55, 0x02, 0x00, 0x57, 0x55, 0x02, 0x00, 0x94, 0x55, 0x02, 0x00, 0xAC, 0x55, 0x02, 0x00, 0xBE, -/* 00007F40 */ 0x55, 0x02, 0x00, 0xDE, 0x55, 0x02, 0x00, 0xEC, 0x55, 0x02, 0x00, 0xED, 0x55, 0x02, 0x00, 0x77, -/* 00007F50 */ 0x56, 0x02, 0x00, 0xB4, 0x56, 0x02, 0x00, 0xD7, 0x56, 0x02, 0x00, 0xD8, 0x56, 0x02, 0x00, 0xFF, -/* 00007F60 */ 0x56, 0x02, 0x00, 0x56, 0x57, 0x02, 0x00, 0xB6, 0x57, 0x02, 0x00, 0xF3, 0x57, 0x02, 0x00, 0x4C, -/* 00007F70 */ 0x58, 0x02, 0x00, 0x62, 0x58, 0x02, 0x00, 0x74, 0x58, 0x02, 0x00, 0x75, 0x58, 0x02, 0x00, 0xA0, -/* 00007F80 */ 0x58, 0x02, 0x00, 0xC4, 0x58, 0x02, 0x00, 0xFA, 0x58, 0x02, 0x00, 0x55, 0x59, 0x02, 0x00, 0x92, -/* 00007F90 */ 0x59, 0x02, 0x00, 0xE6, 0x59, 0x02, 0x00, 0xFC, 0x59, 0x02, 0x00, 0x0E, 0x5A, 0x02, 0x00, 0x0F, -/* 00007FA0 */ 0x5A, 0x02, 0x00, 0x34, 0x5A, 0x02, 0x00, 0x8A, 0x5A, 0x02, 0x00, 0xE1, 0x5A, 0x02, 0x00, 0x3B, -/* 00007FB0 */ 0x5B, 0x02, 0x00, 0x97, 0x5B, 0x02, 0x00, 0xD2, 0x5B, 0x02, 0x00, 0x27, 0x5C, 0x02, 0x00, 0x3D, -/* 00007FC0 */ 0x5C, 0x02, 0x00, 0x4F, 0x5C, 0x02, 0x00, 0x50, 0x5C, 0x02, 0x00, 0x73, 0x5C, 0x02, 0x00, 0xBD, -/* 00007FD0 */ 0x5C, 0x02, 0x00, 0xCF, 0x5C, 0x02, 0x00, 0xD0, 0x5C, 0x02, 0x00, 0xFC, 0x5C, 0x02, 0x00, 0x38, -/* 00007FE0 */ 0x5D, 0x02, 0x00, 0x97, 0x5D, 0x02, 0x00, 0xD9, 0x5D, 0x02, 0x00, 0x31, 0x5E, 0x02, 0x00, 0x47, -/* 00007FF0 */ 0x5E, 0x02, 0x00, 0x59, 0x5E, 0x02, 0x00, 0x5A, 0x5E, 0x02, 0x00, 0xC0, 0x5E, 0x02, 0x00, 0xE8, -/* 00008000 */ 0x5E, 0x02, 0x00, 0x34, 0x5F, 0x02, 0x00, 0x4A, 0x5F, 0x02, 0x00, 0x5E, 0x5F, 0x02, 0x00, 0x5F, -/* 00008010 */ 0x5F, 0x02, 0x00, 0x95, 0x5F, 0x02, 0x00, 0x0B, 0x60, 0x02, 0x00, 0x19, 0x60, 0x02, 0x00, 0x1A, -/* 00008020 */ 0x60, 0x02, 0x00, 0x47, 0x60, 0x02, 0x00, 0x77, 0x60, 0x02, 0x00, 0xA3, 0x60, 0x02, 0x00, 0xCF, -/* 00008030 */ 0x60, 0x02, 0x00, 0xFF, 0x60, 0x02, 0x00, 0x2B, 0x61, 0x02, 0x00, 0x57, 0x61, 0x02, 0x00, 0x8C, -/* 00008040 */ 0x61, 0x02, 0x00, 0xB4, 0x61, 0x02, 0x00, 0xDF, 0x61, 0x02, 0x00, 0xEE, 0x61, 0x02, 0x00, 0xEF, -/* 00008050 */ 0x61, 0x02, 0x00, 0x26, 0x62, 0x02, 0x00, 0x5D, 0x62, 0x02, 0x00, 0x7C, 0x62, 0x02, 0x00, 0x8E, -/* 00008060 */ 0x62, 0x02, 0x00, 0x8F, 0x62, 0x02, 0x00, 0xD7, 0x62, 0x02, 0x00, 0xE5, 0x62, 0x02, 0x00, 0xE6, -/* 00008070 */ 0x62, 0x02, 0x00, 0x56, 0x63, 0x02, 0x00, 0xB2, 0x63, 0x02, 0x00, 0x28, 0x64, 0x02, 0x00, 0xB9, -/* 00008080 */ 0x64, 0x02, 0x00, 0x37, 0x65, 0x02, 0x00, 0x5D, 0x65, 0x02, 0x00, 0x52, 0x66, 0x02, 0x00, 0x7C, -/* 00008090 */ 0x66, 0x02, 0x00, 0x8E, 0x66, 0x02, 0x00, 0x8F, 0x66, 0x02, 0x00, 0xD2, 0x66, 0x02, 0x00, 0x54, -/* 000080A0 */ 0x67, 0x02, 0x00, 0x87, 0x67, 0x02, 0x00, 0x3D, 0x68, 0x02, 0x00, 0x4F, 0x68, 0x02, 0x00, 0x75, -/* 000080B0 */ 0x68, 0x02, 0x00, 0x83, 0x68, 0x02, 0x00, 0x84, 0x68, 0x02, 0x00, 0xE9, 0x68, 0x02, 0x00, 0x33, -/* 000080C0 */ 0x69, 0x02, 0x00, 0xA7, 0x69, 0x02, 0x00, 0x38, 0x6A, 0x02, 0x00, 0x5E, 0x6A, 0x02, 0x00, 0x5E, -/* 000080D0 */ 0x6B, 0x02, 0x00, 0x88, 0x6B, 0x02, 0x00, 0x9A, 0x6B, 0x02, 0x00, 0x9B, 0x6B, 0x02, 0x00, 0xE5, -/* 000080E0 */ 0x6B, 0x02, 0x00, 0x14, 0x6C, 0x02, 0x00, 0x92, 0x6C, 0x02, 0x00, 0xC7, 0x6C, 0x02, 0x00, 0x42, -/* 000080F0 */ 0x6D, 0x02, 0x00, 0x54, 0x6D, 0x02, 0x00, 0x55, 0x6D, 0x02, 0x00, 0x7B, 0x6D, 0x02, 0x00, 0x89, -/* 00008100 */ 0x6D, 0x02, 0x00, 0x8A, 0x6D, 0x02, 0x00, 0xEC, 0x6D, 0x02, 0x00, 0x37, 0x6E, 0x02, 0x00, 0x75, -/* 00008110 */ 0x6E, 0x02, 0x00, 0xEE, 0x6E, 0x02, 0x00, 0x00, 0x6F, 0x02, 0x00, 0x01, 0x6F, 0x02, 0x00, 0x3B, -/* 00008120 */ 0x6F, 0x02, 0x00, 0xA8, 0x6F, 0x02, 0x00, 0x07, 0x70, 0x02, 0x00, 0x7C, 0x70, 0x02, 0x00, 0x8E, -/* 00008130 */ 0x70, 0x02, 0x00, 0x8F, 0x70, 0x02, 0x00, 0xCA, 0x70, 0x02, 0x00, 0x35, 0x71, 0x02, 0x00, 0x5F, -/* 00008140 */ 0x71, 0x02, 0x00, 0xD3, 0x71, 0x02, 0x00, 0xF0, 0x71, 0x02, 0x00, 0x73, 0x72, 0x02, 0x00, 0x89, -/* 00008150 */ 0x72, 0x02, 0x00, 0xC8, 0x72, 0x02, 0x00, 0x33, 0x73, 0x02, 0x00, 0x5D, 0x73, 0x02, 0x00, 0xD1, -/* 00008160 */ 0x73, 0x02, 0x00, 0xEE, 0x73, 0x02, 0x00, 0x67, 0x74, 0x02, 0x00, 0x7D, 0x74, 0x02, 0x00, 0x8F, -/* 00008170 */ 0x74, 0x02, 0x00, 0x90, 0x74, 0x02, 0x00, 0x25, 0x75, 0x02, 0x00, 0xB1, 0x75, 0x02, 0x00, 0x24, -/* 00008180 */ 0x76, 0x02, 0x00, 0x67, 0x76, 0x02, 0x00, 0xE3, 0x76, 0x02, 0x00, 0xF5, 0x76, 0x02, 0x00, 0xF6, -/* 00008190 */ 0x76, 0x02, 0x00, 0x30, 0x77, 0x02, 0x00, 0xA8, 0x77, 0x02, 0x00, 0xBA, 0x77, 0x02, 0x00, 0xBB, -/* 000081A0 */ 0x77, 0x02, 0x00, 0xF6, 0x77, 0x02, 0x00, 0x70, 0x78, 0x02, 0x00, 0x82, 0x78, 0x02, 0x00, 0x83, -/* 000081B0 */ 0x78, 0x02, 0x00, 0xC0, 0x78, 0x02, 0x00, 0x3E, 0x79, 0x02, 0x00, 0x50, 0x79, 0x02, 0x00, 0x51, -/* 000081C0 */ 0x79, 0x02, 0x00, 0x8E, 0x79, 0x02, 0x00, 0x0C, 0x7A, 0x02, 0x00, 0x1E, 0x7A, 0x02, 0x00, 0x1F, -/* 000081D0 */ 0x7A, 0x02, 0x00, 0x62, 0x7A, 0x02, 0x00, 0xDF, 0x7A, 0x02, 0x00, 0xF1, 0x7A, 0x02, 0x00, 0xF2, -/* 000081E0 */ 0x7A, 0x02, 0x00, 0x18, 0x7B, 0x02, 0x00, 0x26, 0x7B, 0x02, 0x00, 0x27, 0x7B, 0x02, 0x00, 0x7C, -/* 000081F0 */ 0x7B, 0x02, 0x00, 0xB5, 0x7B, 0x02, 0x00, 0xE5, 0x7B, 0x02, 0x00, 0xF7, 0x7B, 0x02, 0x00, 0xF8, -/* 00008200 */ 0x7B, 0x02, 0x00, 0x93, 0x7C, 0x02, 0x00, 0xF5, 0x7C, 0x02, 0x00, 0x07, 0x7D, 0x02, 0x00, 0x08, -/* 00008210 */ 0x7D, 0x02, 0x00, 0x47, 0x7D, 0x02, 0x00, 0x48, 0x7D, 0x02, 0x00, 0x6F, 0x7D, 0x02, 0x00, 0xB4, -/* 00008220 */ 0x7D, 0x02, 0x00, 0xB5, 0x7D, 0x02, 0x00, 0x26, 0x7E, 0x02, 0x00, 0x85, 0x7E, 0x02, 0x00, 0x86, -/* 00008230 */ 0x7E, 0x02, 0x00, 0xB4, 0x7E, 0x02, 0x00, 0x07, 0x7F, 0x02, 0x00, 0x20, 0x7F, 0x02, 0x00, 0x5E, -/* 00008240 */ 0x7F, 0x02, 0x00, 0x70, 0x7F, 0x02, 0x00, 0x71, 0x7F, 0x02, 0x00, 0x9F, 0x7F, 0x02, 0x00, 0xDA, -/* 00008250 */ 0x7F, 0x02, 0x00, 0xEC, 0x7F, 0x02, 0x00, 0xED, 0x7F, 0x02, 0x00, 0x0F, 0x80, 0x02, 0x00, 0x7E, -/* 00008260 */ 0x80, 0x02, 0x00, 0xE5, 0x80, 0x02, 0x00, 0x49, 0x81, 0x02, 0x00, 0xCA, 0x81, 0x02, 0x00, 0x2C, -/* 00008270 */ 0x82, 0x02, 0x00, 0x90, 0x82, 0x02, 0x00, 0xF8, 0x82, 0x02, 0x00, 0x60, 0x83, 0x02, 0x00, 0xCF, -/* 00008280 */ 0x83, 0x02, 0x00, 0xD0, 0x83, 0x02, 0x00, 0x3F, 0x84, 0x02, 0x00, 0xB5, 0x84, 0x02, 0x00, 0xB6, -/* 00008290 */ 0x84, 0x02, 0x00, 0x26, 0x85, 0x02, 0x00, 0x27, 0x85, 0x02, 0x00, 0x78, 0x85, 0x02, 0x00, 0x9E, -/* 000082A0 */ 0x85, 0x02, 0x00, 0xBC, 0x85, 0x02, 0x00, 0xDC, 0x85, 0x02, 0x00, 0xFE, 0x85, 0x02, 0x00, 0x1C, -/* 000082B0 */ 0x86, 0x02, 0x00, 0x3C, 0x86, 0x02, 0x00, 0x60, 0x86, 0x02, 0x00, 0x84, 0x86, 0x02, 0x00, 0xB3, -/* 000082C0 */ 0x86, 0x02, 0x00, 0xCE, 0x86, 0x02, 0x00, 0xCF, 0x86, 0x02, 0x00, 0xF7, 0x86, 0x02, 0x00, 0x38, -/* 000082D0 */ 0x87, 0x02, 0x00, 0xAB, 0x87, 0x02, 0x00, 0xAC, 0x87, 0x02, 0x00, 0xD2, 0x87, 0x02, 0x00, 0x06, -/* 000082E0 */ 0x88, 0x02, 0x00, 0x3C, 0x88, 0x02, 0x00, 0x81, 0x88, 0x02, 0x00, 0x82, 0x88, 0x02, 0x00, 0xA4, -/* 000082F0 */ 0x88, 0x02, 0x00, 0xD8, 0x88, 0x02, 0x00, 0x04, 0x89, 0x02, 0x00, 0x32, 0x89, 0x02, 0x00, 0x62, -/* 00008300 */ 0x89, 0x02, 0x00, 0x8E, 0x89, 0x02, 0x00, 0xBC, 0x89, 0x02, 0x00, 0xEE, 0x89, 0x02, 0x00, 0x20, -/* 00008310 */ 0x8A, 0x02, 0x00, 0x5E, 0x8A, 0x02, 0x00, 0x5F, 0x8A, 0x02, 0x00, 0x91, 0x8A, 0x02, 0x00, 0xD1, -/* 00008320 */ 0x8A, 0x02, 0x00, 0x0F, 0x8B, 0x02, 0x00, 0x10, 0x8B, 0x02, 0x00, 0x52, 0x8B, 0x02, 0x00, 0x53, -/* 00008330 */ 0x8B, 0x02, 0x00, 0x66, 0x8B, 0x02, 0x00, 0x82, 0x8B, 0x02, 0x00, 0xDA, 0x8B, 0x02, 0x00, 0x54, -/* 00008340 */ 0x8C, 0x02, 0x00, 0xF9, 0x8C, 0x02, 0x00, 0xA0, 0x8D, 0x02, 0x00, 0x08, 0x8E, 0x02, 0x00, 0x1F, -/* 00008350 */ 0x8E, 0x02, 0x00, 0x48, 0x8E, 0x02, 0x00, 0x49, 0x8E, 0x02, 0x00, 0x5F, 0x8E, 0x02, 0x00, 0xAE, -/* 00008360 */ 0x8E, 0x02, 0x00, 0xEF, 0x8E, 0x02, 0x00, 0x0D, 0x8F, 0x02, 0x00, 0x37, 0x8F, 0x02, 0x00, 0x61, -/* 00008370 */ 0x8F, 0x02, 0x00, 0x62, 0x8F, 0x02, 0x00, 0xD0, 0x8F, 0x02, 0x00, 0x26, 0x90, 0x02, 0x00, 0x7A, -/* 00008380 */ 0x90, 0x02, 0x00, 0xE4, 0x90, 0x02, 0x00, 0x0C, 0x91, 0x02, 0x00, 0x1E, 0x91, 0x02, 0x00, 0x1F, -/* 00008390 */ 0x91, 0x02, 0x00, 0x43, 0x91, 0x02, 0x00, 0x75, 0x91, 0x02, 0x00, 0xF5, 0x91, 0x02, 0x00, 0x07, -/* 000083A0 */ 0x92, 0x02, 0x00, 0x08, 0x92, 0x02, 0x00, 0x1E, 0x92, 0x02, 0x00, 0x53, 0x92, 0x02, 0x00, 0x93, -/* 000083B0 */ 0x92, 0x02, 0x00, 0xB1, 0x92, 0x02, 0x00, 0xDB, 0x92, 0x02, 0x00, 0x05, 0x93, 0x02, 0x00, 0x06, -/* 000083C0 */ 0x93, 0x02, 0x00, 0x68, 0x93, 0x02, 0x00, 0xED, 0x93, 0x02, 0x00, 0x52, 0x94, 0x02, 0x00, 0x8D, -/* 000083D0 */ 0x94, 0x02, 0x00, 0x9F, 0x94, 0x02, 0x00, 0xA0, 0x94, 0x02, 0x00, 0xCD, 0x94, 0x02, 0x00, 0x32, -/* 000083E0 */ 0x95, 0x02, 0x00, 0x33, 0x95, 0x02, 0x00, 0xB5, 0x95, 0x02, 0x00, 0xF0, 0x95, 0x02, 0x00, 0x4F, -/* 000083F0 */ 0x96, 0x02, 0x00, 0x61, 0x96, 0x02, 0x00, 0xA4, 0x96, 0x02, 0x00, 0xB2, 0x96, 0x02, 0x00, 0xB3, -/* 00008400 */ 0x96, 0x02, 0x00, 0x09, 0x97, 0x02, 0x00, 0x67, 0x97, 0x02, 0x00, 0xB7, 0x97, 0x02, 0x00, 0xDA, -/* 00008410 */ 0x97, 0x02, 0x00, 0x01, 0x98, 0x02, 0x00, 0x27, 0x98, 0x02, 0x00, 0x3D, 0x98, 0x02, 0x00, 0x3E, -/* 00008420 */ 0x98, 0x02, 0x00, 0xB3, 0x98, 0x02, 0x00, 0xFE, 0x98, 0x02, 0x00, 0x40, 0x99, 0x02, 0x00, 0x52, -/* 00008430 */ 0x99, 0x02, 0x00, 0xA5, 0x99, 0x02, 0x00, 0xDD, 0x99, 0x02, 0x00, 0x08, 0x9A, 0x02, 0x00, 0x1A, -/* 00008440 */ 0x9A, 0x02, 0x00, 0x1B, 0x9A, 0x02, 0x00, 0x48, 0x9A, 0x02, 0x00, 0xA4, 0x9A, 0x02, 0x00, 0x12, -/* 00008450 */ 0x9B, 0x02, 0x00, 0x61, 0x9B, 0x02, 0x00, 0x92, 0x9B, 0x02, 0x00, 0xED, 0x9B, 0x02, 0x00, 0x0A, -/* 00008460 */ 0x9C, 0x02, 0x00, 0x34, 0x9C, 0x02, 0x00, 0x72, 0x9C, 0x02, 0x00, 0xEC, 0x9C, 0x02, 0x00, 0x47, -/* 00008470 */ 0x9D, 0x02, 0x00, 0x5D, 0x9D, 0x02, 0x00, 0x6F, 0x9D, 0x02, 0x00, 0x70, 0x9D, 0x02, 0x00, 0x94, -/* 00008480 */ 0x9D, 0x02, 0x00, 0xCE, 0x9D, 0x02, 0x00, 0x40, 0x9E, 0x02, 0x00, 0x52, 0x9E, 0x02, 0x00, 0x53, -/* 00008490 */ 0x9E, 0x02, 0x00, 0xB1, 0x9E, 0x02, 0x00, 0xBF, 0x9E, 0x02, 0x00, 0xC0, 0x9E, 0x02, 0x00, 0x3D, -/* 000084A0 */ 0x9F, 0x02, 0x00, 0xC9, 0x9F, 0x02, 0x00, 0x48, 0xA0, 0x02, 0x00, 0xD1, 0xA0, 0x02, 0x00, 0xF6, -/* 000084B0 */ 0xA0, 0x02, 0x00, 0x05, 0xA1, 0x02, 0x00, 0x90, 0xA1, 0x02, 0x00, 0x16, 0xA2, 0x02, 0x00, 0xA0, -/* 000084C0 */ 0xA2, 0x02, 0x00, 0xF4, 0xA2, 0x02, 0x00, 0x03, 0xA3, 0x02, 0x00, 0x85, 0xA3, 0x02, 0x00, 0xF6, -/* 000084D0 */ 0xA3, 0x02, 0x00, 0x51, 0xA4, 0x02, 0x00, 0xBC, 0xA4, 0x02, 0x00, 0x36, 0xA5, 0x02, 0x00, 0x87, -/* 000084E0 */ 0xA5, 0x02, 0x00, 0x96, 0xA5, 0x02, 0x00, 0x0C, 0xA6, 0x02, 0x00, 0x1B, 0xA6, 0x02, 0x00, 0xA7, -/* 000084F0 */ 0xA6, 0x02, 0x00, 0x30, 0xA7, 0x02, 0x00, 0x7B, 0xA7, 0x02, 0x00, 0x7C, 0xA7, 0x02, 0x00, 0xCC, -/* 00008500 */ 0xA7, 0x02, 0x00, 0x69, 0xA8, 0x02, 0x00, 0xEE, 0xA8, 0x02, 0x00, 0x17, 0xA9, 0x02, 0x00, 0xBD, -/* 00008510 */ 0xA9, 0x02, 0x00, 0xBE, 0xA9, 0x02, 0x00, 0x0E, 0xAA, 0x02, 0x00, 0xAF, 0xAA, 0x02, 0x00, 0x34, -/* 00008520 */ 0xAB, 0x02, 0x00, 0x5D, 0xAB, 0x02, 0x00, 0x11, 0xAC, 0x02, 0x00, 0x12, 0xAC, 0x02, 0x00, 0x62, -/* 00008530 */ 0xAC, 0x02, 0x00, 0x03, 0xAD, 0x02, 0x00, 0x88, 0xAD, 0x02, 0x00, 0xB1, 0xAD, 0x02, 0x00, 0x65, -/* 00008540 */ 0xAE, 0x02, 0x00, 0x66, 0xAE, 0x02, 0x00, 0x8D, 0xAE, 0x02, 0x00, 0xE1, 0xAE, 0x02, 0x00, 0x20, -/* 00008550 */ 0xAF, 0x02, 0x00, 0x65, 0xAF, 0x02, 0x00, 0x7B, 0xAF, 0x02, 0x00, 0x7C, 0xAF, 0x02, 0x00, 0xB3, -/* 00008560 */ 0xAF, 0x02, 0x00, 0xE7, 0xAF, 0x02, 0x00, 0x36, 0xB0, 0x02, 0x00, 0x4C, 0xB0, 0x02, 0x00, 0x4D, -/* 00008570 */ 0xB0, 0x02, 0x00, 0x88, 0xB0, 0x02, 0x00, 0xCE, 0xB0, 0x02, 0x00, 0xCF, 0xB0, 0x02, 0x00, 0x05, -/* 00008580 */ 0xB1, 0x02, 0x00, 0x44, 0xB1, 0x02, 0x00, 0x89, 0xB1, 0x02, 0x00, 0x9F, 0xB1, 0x02, 0x00, 0xA0, -/* 00008590 */ 0xB1, 0x02, 0x00, 0xEE, 0xB1, 0x02, 0x00, 0xEF, 0xB1, 0x02, 0x00, 0x55, 0xB2, 0x02, 0x00, 0x91, -/* 000085A0 */ 0xB2, 0x02, 0x00, 0x92, 0xB2, 0x02, 0x00, 0xB2, 0xB2, 0x02, 0x00, 0xC4, 0xB2, 0x02, 0x00, 0x0E, -/* 000085B0 */ 0xB3, 0x02, 0x00, 0x0F, 0xB3, 0x02, 0x00, 0x37, 0xB3, 0x02, 0x00, 0x6B, 0xB3, 0x02, 0x00, 0xD8, -/* 000085C0 */ 0xB3, 0x02, 0x00, 0xEE, 0xB3, 0x02, 0x00, 0x35, 0xB4, 0x02, 0x00, 0x98, 0xB4, 0x02, 0x00, 0x05, -/* 000085D0 */ 0xB5, 0x02, 0x00, 0x1B, 0xB5, 0x02, 0x00, 0x1C, 0xB5, 0x02, 0x00, 0x6E, 0xB5, 0x02, 0x00, 0xA3, -/* 000085E0 */ 0xB5, 0x02, 0x00, 0xB9, 0xB5, 0x02, 0x00, 0xBA, 0xB5, 0x02, 0x00, 0xE9, 0xB5, 0x02, 0x00, 0x17, -/* 000085F0 */ 0xB6, 0x02, 0x00, 0x53, 0xB6, 0x02, 0x00, 0x70, 0xB6, 0x02, 0x00, 0x9F, 0xB6, 0x02, 0x00, 0xB5, -/* 00008600 */ 0xB6, 0x02, 0x00, 0xB6, 0xB6, 0x02, 0x00, 0x0B, 0xB7, 0x02, 0x00, 0x1D, 0xB7, 0x02, 0x00, 0x70, -/* 00008610 */ 0xB7, 0x02, 0x00, 0x71, 0xB7, 0x02, 0x00, 0xB8, 0xB7, 0x02, 0x00, 0xB9, 0xB7, 0x02, 0x00, 0x56, -/* 00008620 */ 0xB8, 0x02, 0x00, 0xA0, 0xB8, 0x02, 0x00, 0x41, 0xB9, 0x02, 0x00, 0x42, 0xB9, 0x02, 0x00, 0x8D, -/* 00008630 */ 0xB9, 0x02, 0x00, 0xD4, 0xB9, 0x02, 0x00, 0x0C, 0xBA, 0x02, 0x00, 0x7D, 0xBA, 0x02, 0x00, 0x97, -/* 00008640 */ 0xBA, 0x02, 0x00, 0x98, 0xBA, 0x02, 0x00, 0xE3, 0xBA, 0x02, 0x00, 0x4A, 0xBB, 0x02, 0x00, 0xBB, -/* 00008650 */ 0xBB, 0x02, 0x00, 0xD5, 0xBB, 0x02, 0x00, 0xD6, 0xBB, 0x02, 0x00, 0x11, 0xBC, 0x02, 0x00, 0x4F, -/* 00008660 */ 0xBC, 0x02, 0x00, 0x63, 0xBC, 0x02, 0x00, 0x64, 0xBC, 0x02, 0x00, 0xB8, 0xBC, 0x02, 0x00, 0xF0, -/* 00008670 */ 0xBC, 0x02, 0x00, 0x28, 0xBD, 0x02, 0x00, 0xA2, 0xBD, 0x02, 0x00, 0xBC, 0xBD, 0x02, 0x00, 0x07, -/* 00008680 */ 0xBE, 0x02, 0x00, 0x6E, 0xBE, 0x02, 0x00, 0xE8, 0xBE, 0x02, 0x00, 0x02, 0xBF, 0x02, 0x00, 0x34, -/* 00008690 */ 0xBF, 0x02, 0x00, 0x6F, 0xBF, 0x02, 0x00, 0xC6, 0xBF, 0x02, 0x00, 0x2B, 0xC0, 0x02, 0x00, 0x6A, -/* 000086A0 */ 0xC0, 0x02, 0x00, 0xA5, 0xC0, 0x02, 0x00, 0xE2, 0xC0, 0x02, 0x00, 0x17, 0xC1, 0x02, 0x00, 0x4E, -/* 000086B0 */ 0xC1, 0x02, 0x00, 0x87, 0xC1, 0x02, 0x00, 0xBC, 0xC1, 0x02, 0x00, 0xF3, 0xC1, 0x02, 0x00, 0x2E, -/* 000086C0 */ 0xC2, 0x02, 0x00, 0x69, 0xC2, 0x02, 0x00, 0xAF, 0xC2, 0x02, 0x00, 0xD0, 0xC2, 0x02, 0x00, 0x0E, -/* 000086D0 */ 0xC3, 0x02, 0x00, 0x80, 0xC3, 0x02, 0x00, 0x22, 0xC4, 0x02, 0x00, 0x5E, 0xC4, 0x02, 0x00, 0x7C, -/* 000086E0 */ 0xC4, 0x02, 0x00, 0xA6, 0xC4, 0x02, 0x00, 0xEE, 0xC4, 0x02, 0x00, 0x3B, 0xC5, 0x02, 0x00, 0x4F, -/* 000086F0 */ 0xC5, 0x02, 0x00, 0x50, 0xC5, 0x02, 0x00, 0xEE, 0xC5, 0x02, 0x00, 0xEF, 0xC5, 0x02, 0x00, 0x16, -/* 00008700 */ 0xC6, 0x02, 0x00, 0x24, 0xC6, 0x02, 0x00, 0x2E, 0xC6, 0x02, 0x00, 0x7F, 0xC6, 0x02, 0x00, 0x99, -/* 00008710 */ 0xC6, 0x02, 0x00, 0xA3, 0xC6, 0x02, 0x00, 0xA4, 0xC6, 0x02, 0x00, 0xD5, 0xC6, 0x02, 0x00, 0xF4, -/* 00008720 */ 0xC6, 0x02, 0x00, 0x70, 0xC7, 0x02, 0x00, 0xF4, 0xC7, 0x02, 0x00, 0x7C, 0xC8, 0x02, 0x00, 0x0E, -/* 00008730 */ 0xC9, 0x02, 0x00, 0x14, 0xC9, 0x02, 0x00, 0x15, 0xC9, 0x02, 0x00, 0x2A, 0xC9, 0x02, 0x00, 0x2E, -/* 00008740 */ 0xC9, 0x02, 0x00, 0x00, 0xCC, 0xB9, 0x0C, 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0xA8, 0x41, 0xC0, -/* 00008750 */ 0x00, 0xFE, 0xCE, 0x02, 0x00, 0xFE, 0x70, 0x01, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0xFE, 0x70, -/* 00008760 */ 0x01, 0xFF, 0xBE, 0xC7, 0x02, 0x00, 0xFF, 0xBE, 0xC7, 0x02, 0x00, 0x40, 0x01, 0x04, 0x04, 0x05, -/* 00008770 */ 0x05, 0x03, 0x05, 0xFE, 0xCF, 0x02, 0x0A, 0x09, 0xA6, 0x00, 0xD3, 0x00, 0x04, 0xFA, 0x04, 0x24, -/* 00008780 */ 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00, 0x8C, 0x87, 0x00, 0x00, 0xBF, 0x1D, 0x00, 0xC1, -/* 00008790 */ 0x53, 0xAD, 0x25, 0x01, 0x07, 0x01, 0xA2, 0x41, 0xD1, 0x00, 0x01, 0xFE, 0x90, 0x01, 0x5F, 0xFF, -/* 000087A0 */ 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x90, 0x01, 0xFF, 0x9B, 0xC7, 0x02, 0x00, 0xFF, 0x9B, -/* 000087B0 */ 0xC7, 0x02, 0x00, 0x40, 0x3C, 0xFE, 0xD0, 0x02, 0xFE, 0xFF, 0x01, 0xFE, 0xD1, 0x02, 0xFE, 0xD2, -/* 000087C0 */ 0x02, 0xFE, 0xD3, 0x02, 0x51, 0xFE, 0x02, 0x01, 0xFE, 0x28, 0x01, 0xFD, 0xFE, 0x4A, 0x01, 0x63, -/* 000087D0 */ 0x76, 0xFE, 0xD4, 0x02, 0xC7, 0xFE, 0xD5, 0x02, 0xFE, 0xD6, 0x02, 0xFE, 0xD7, 0x02, 0xFE, 0xD8, -/* 000087E0 */ 0x02, 0xFE, 0xD9, 0x02, 0xFE, 0xDA, 0x02, 0xFE, 0xDB, 0x02, 0xFE, 0xDC, 0x02, 0xFE, 0xDD, 0x02, -/* 000087F0 */ 0xFE, 0xDE, 0x02, 0xFE, 0xDF, 0x02, 0xFE, 0xE0, 0x02, 0xFE, 0xE1, 0x02, 0xFE, 0xE2, 0x02, 0xFE, -/* 00008800 */ 0xE3, 0x02, 0xFE, 0xE4, 0x02, 0xB1, 0xB4, 0xFE, 0xE5, 0x02, 0xFE, 0xE6, 0x02, 0xFE, 0xE7, 0x02, -/* 00008810 */ 0xFE, 0xE8, 0x02, 0xFE, 0xDE, 0x01, 0xFE, 0xDD, 0x01, 0xFE, 0xE9, 0x02, 0xFE, 0xEA, 0x02, 0xFE, -/* 00008820 */ 0xEB, 0x02, 0xFE, 0xEC, 0x02, 0xFE, 0xED, 0x02, 0xFE, 0xEE, 0x02, 0xFE, 0xFC, 0x01, 0xFE, 0xEF, -/* 00008830 */ 0x02, 0xFE, 0xF0, 0x02, 0xFE, 0xF1, 0x02, 0xFE, 0xF2, 0x02, 0xFE, 0xF3, 0x02, 0xFE, 0xF4, 0x02, -/* 00008840 */ 0xFE, 0xF5, 0x02, 0xFE, 0xF6, 0x02, 0xFE, 0xF7, 0x02, 0xFE, 0xF8, 0x02, 0xFE, 0xF9, 0x02, 0xFE, -/* 00008850 */ 0xFA, 0x02, 0xFE, 0xFB, 0x02, 0xFE, 0xFC, 0x02, 0xFE, 0xFD, 0x02, 0x20, 0x70, 0x8A, 0x09, 0xFE, -/* 00008860 */ 0x25, 0x04, 0xFE, 0x18, 0x04, 0x16, 0x8F, 0x8E, 0x8F, 0x8F, 0x23, 0x02, 0x87, 0x88, 0x89, 0x8A, -/* 00008870 */ 0x08, 0x0B, 0x06, 0xFE, 0xF4, 0x02, 0x06, 0xFE, 0xFE, 0x02, 0x06, 0xFE, 0xFF, 0x02, 0x06, 0xFE, -/* 00008880 */ 0x00, 0x03, 0x06, 0xFE, 0x01, 0x03, 0x07, 0x06, 0xFE, 0x02, 0x03, 0x01, 0x00, 0x06, 0xFE, 0x03, -/* 00008890 */ 0x03, 0x06, 0xFE, 0x04, 0x03, 0x01, 0x01, 0x06, 0xFE, 0x05, 0x03, 0x01, 0x02, 0x06, 0xFE, 0x06, -/* 000088A0 */ 0x03, 0x01, 0x03, 0x06, 0xFE, 0x07, 0x03, 0x01, 0x04, 0x06, 0xFE, 0x08, 0x03, 0x01, 0x05, 0x06, -/* 000088B0 */ 0xFE, 0x09, 0x03, 0x06, 0xFE, 0x0A, 0x03, 0x06, 0xFE, 0x0B, 0x03, 0x06, 0xFE, 0x0C, 0x03, 0x06, -/* 000088C0 */ 0xFE, 0x0D, 0x03, 0x06, 0xFE, 0x0E, 0x03, 0x06, 0xFE, 0x0F, 0x03, 0x06, 0xFE, 0x10, 0x03, 0x06, -/* 000088D0 */ 0xFE, 0x11, 0x03, 0x06, 0xFE, 0x12, 0x03, 0x06, 0xFE, 0x13, 0x03, 0x06, 0xFE, 0x14, 0x03, 0x06, -/* 000088E0 */ 0xFE, 0x15, 0x03, 0x06, 0xFE, 0x16, 0x03, 0x06, 0xFE, 0x17, 0x03, 0x06, 0xFE, 0x18, 0x03, 0x06, -/* 000088F0 */ 0xFE, 0x19, 0x03, 0x06, 0xFE, 0x1A, 0x03, 0x06, 0xFE, 0x1B, 0x03, 0x06, 0xFE, 0x1C, 0x03, 0x06, -/* 00008900 */ 0xFE, 0x1D, 0x03, 0x06, 0xFE, 0x1E, 0x03, 0x06, 0xFE, 0x1F, 0x03, 0x06, 0xFE, 0x20, 0x03, 0x06, -/* 00008910 */ 0xFE, 0x21, 0x03, 0x06, 0xFE, 0x22, 0x03, 0x06, 0xFE, 0x23, 0x03, 0x06, 0xFE, 0x24, 0x03, 0x06, -/* 00008920 */ 0xFE, 0x25, 0x03, 0x06, 0xFE, 0x26, 0x03, 0x06, 0xFE, 0x27, 0x03, 0x06, 0xFE, 0x28, 0x03, 0x06, -/* 00008930 */ 0xFE, 0x29, 0x03, 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, 0x2B, 0x03, 0x06, 0xFE, 0x2C, 0x03, 0x06, -/* 00008940 */ 0xFE, 0x2D, 0x03, 0x06, 0xFE, 0x2E, 0x03, 0x06, 0xFE, 0x2F, 0x03, 0x06, 0xFE, 0x30, 0x03, 0x06, -/* 00008950 */ 0xFE, 0x31, 0x03, 0x06, 0xFE, 0x32, 0x03, 0x06, 0xFE, 0x33, 0x03, 0x06, 0xFE, 0x34, 0x03, 0x06, -/* 00008960 */ 0xFE, 0x35, 0x03, 0x06, 0xFE, 0x36, 0x03, 0x06, 0xFE, 0x37, 0x03, 0x06, 0xFE, 0x38, 0x03, 0x06, -/* 00008970 */ 0xFE, 0x39, 0x03, 0x06, 0xFE, 0x3A, 0x03, 0x06, 0xFE, 0x3B, 0x03, 0x05, 0xFE, 0x3C, 0x03, 0x06, -/* 00008980 */ 0xFE, 0x3D, 0x03, 0x05, 0xFE, 0x3E, 0x03, 0x06, 0xFE, 0x3F, 0x03, 0x06, 0xFE, 0x40, 0x03, 0x05, -/* 00008990 */ 0xFE, 0x41, 0x03, 0x06, 0xFE, 0x42, 0x03, 0x0C, 0x06, 0xFE, 0x43, 0x03, 0x06, 0xFE, 0x44, 0x03, -/* 000089A0 */ 0x06, 0xFE, 0x45, 0x03, 0x06, 0xFE, 0x46, 0x03, 0x06, 0xFE, 0x47, 0x03, 0x06, 0xFE, 0x48, 0x03, -/* 000089B0 */ 0x05, 0xFE, 0x49, 0x03, 0x05, 0xFE, 0x4A, 0x03, 0x05, 0xFE, 0x4B, 0x03, 0x06, 0xFE, 0x4C, 0x03, -/* 000089C0 */ 0x06, 0xFE, 0x4D, 0x03, 0x06, 0xFE, 0x4E, 0x03, 0x05, 0xFE, 0x4F, 0x03, 0x06, 0xFE, 0x50, 0x03, -/* 000089D0 */ 0x06, 0xFE, 0x51, 0x03, 0x06, 0xFE, 0x52, 0x03, 0x05, 0xFE, 0x53, 0x03, 0x06, 0xFE, 0x54, 0x03, -/* 000089E0 */ 0x06, 0xFE, 0x55, 0x03, 0x05, 0xFE, 0x56, 0x03, 0x06, 0xFE, 0x57, 0x03, 0x06, 0xFE, 0x58, 0x03, -/* 000089F0 */ 0x05, 0xFE, 0x59, 0x03, 0x06, 0xFE, 0x5A, 0x03, 0x06, 0xFE, 0x5B, 0x03, 0x06, 0xFE, 0x5C, 0x03, -/* 00008A00 */ 0x06, 0xFE, 0x5D, 0x03, 0x06, 0xFE, 0x5E, 0x03, 0x06, 0xFE, 0x5F, 0x03, 0x06, 0xFE, 0x60, 0x03, -/* 00008A10 */ 0xFE, 0x61, 0x10, 0x94, 0x32, 0x71, 0xA6, 0x81, 0xA6, 0x82, 0xA6, 0x86, 0xD3, 0x01, 0x72, 0x94, -/* 00008A20 */ 0x02, 0x72, 0x4F, 0x7C, 0x4F, 0x80, 0x4F, 0x83, 0xA6, 0x73, 0xA6, 0x74, 0x4F, 0x7E, 0x4F, 0x7F, -/* 00008A30 */ 0x4F, 0x84, 0x4F, 0x85, 0xA6, 0x75, 0xA6, 0x76, 0xA6, 0x77, 0xA6, 0x78, 0xA6, 0x79, 0xA6, 0x7A, -/* 00008A40 */ 0xA6, 0x7B, 0x4F, 0x8C, 0x94, 0x33, 0x8C, 0x4F, 0x8C, 0x94, 0x34, 0x8C, 0x4F, 0x8C, 0x94, 0x35, -/* 00008A50 */ 0x8C, 0x4F, 0x8C, 0x94, 0x36, 0x8C, 0x4F, 0x8C, 0x94, 0x37, 0x8C, 0x4F, 0x8C, 0x94, 0x38, 0x8C, -/* 00008A60 */ 0x4F, 0x8C, 0x94, 0x39, 0x8C, 0x4F, 0x8C, 0x94, 0x3A, 0x8C, 0x4F, 0x8C, 0x94, 0x3B, 0x8C, 0x4F, -/* 00008A70 */ 0x8C, 0x94, 0x3C, 0x8C, 0x4F, 0x8C, 0x94, 0x3D, 0x8C, 0x5F, 0x8C, 0x70, 0x00, 0x94, 0x03, 0x8C, -/* 00008A80 */ 0x90, 0x03, 0x8C, 0x74, 0x03, 0x8C, 0x01, 0x90, 0x03, 0x8D, 0x5F, 0x8D, 0x8D, 0x02, 0xAA, 0x8C, -/* 00008A90 */ 0x0F, 0x02, 0x00, 0x8D, 0xA9, 0x8C, 0x94, 0x33, 0x8C, 0x90, 0x03, 0x8C, 0x5F, 0x8C, 0x8C, 0x03, -/* 00008AA0 */ 0x47, 0x7C, 0x8C, 0x94, 0x34, 0x04, 0x90, 0x03, 0x8C, 0x5F, 0x8C, 0x8C, 0x04, 0x94, 0x04, 0x8C, -/* 00008AB0 */ 0x90, 0x03, 0x8C, 0x5F, 0x8C, 0x8C, 0x05, 0x94, 0x05, 0x8C, 0x90, 0x03, 0x8C, 0x5F, 0x8C, 0x8C, -/* 00008AC0 */ 0x06, 0x94, 0x06, 0x8C, 0xD3, 0x00, 0x8C, 0x94, 0x35, 0x8C, 0x90, 0x03, 0x8C, 0x5F, 0x8C, 0x8C, -/* 00008AD0 */ 0x07, 0x94, 0x07, 0x8C, 0x90, 0x03, 0x8C, 0x5F, 0x8C, 0x8C, 0x08, 0x94, 0x08, 0x8C, 0x90, 0x03, -/* 00008AE0 */ 0x8C, 0x5F, 0x8C, 0x8C, 0x09, 0x94, 0x09, 0x8C, 0x90, 0x03, 0x8C, 0x5F, 0x8C, 0x8C, 0x0A, 0x94, -/* 00008AF0 */ 0x0A, 0x8C, 0x90, 0x03, 0x8C, 0x5F, 0x8C, 0x8C, 0x0B, 0x94, 0x0B, 0x8C, 0x90, 0x03, 0x8C, 0x5F, -/* 00008B00 */ 0x8C, 0x8C, 0x0C, 0x94, 0x0C, 0x8C, 0x90, 0x03, 0x8C, 0x5F, 0x8C, 0x8C, 0x0D, 0x94, 0x0D, 0x8C, -/* 00008B10 */ 0x90, 0x03, 0x8C, 0x5F, 0x8C, 0x8C, 0x0E, 0x94, 0x0E, 0x8C, 0x90, 0x04, 0x8C, 0x07, 0x03, 0x00, -/* 00008B20 */ 0x5A, 0x00, 0x02, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, -/* 00008B30 */ 0x90, 0x03, 0x8E, 0x5F, 0x8E, 0x8E, 0x0F, 0x78, 0x8E, 0x8D, 0x10, 0x90, 0x03, 0x8E, 0x5F, 0x8E, -/* 00008B40 */ 0x8E, 0x11, 0x78, 0x8E, 0x8D, 0x12, 0x90, 0x03, 0x8E, 0x5F, 0x8E, 0x8E, 0x13, 0x78, 0x8E, 0x8D, -/* 00008B50 */ 0x14, 0x90, 0x03, 0x8E, 0x5F, 0x8E, 0x8E, 0x15, 0x78, 0x8E, 0x8D, 0x16, 0x5A, 0x01, 0x8D, 0x5A, -/* 00008B60 */ 0x02, 0x09, 0x02, 0x1F, 0x03, 0x8C, 0x00, 0x8C, 0x00, 0x94, 0x0F, 0x8C, 0x90, 0x03, 0x8C, 0x5F, -/* 00008B70 */ 0x8C, 0x8C, 0x17, 0x94, 0x10, 0x8C, 0x90, 0x03, 0x8C, 0x5F, 0x8C, 0x8C, 0x18, 0x94, 0x11, 0x8C, -/* 00008B80 */ 0x90, 0x03, 0x8C, 0x5F, 0x8C, 0x8C, 0x19, 0x94, 0x12, 0x8C, 0x90, 0x03, 0x8C, 0x5F, 0x8C, 0x8C, -/* 00008B90 */ 0x1A, 0x94, 0x13, 0x8C, 0x90, 0x03, 0x8C, 0x5F, 0x8C, 0x8C, 0x1B, 0x94, 0x14, 0x8C, 0xD3, 0x02, -/* 00008BA0 */ 0x8C, 0x94, 0x15, 0x8C, 0x90, 0x03, 0x8C, 0x5F, 0x8C, 0x8C, 0x1C, 0x94, 0x16, 0x8C, 0x90, 0x03, -/* 00008BB0 */ 0x8C, 0x5F, 0x8C, 0x8C, 0x1D, 0x94, 0x17, 0x8C, 0x90, 0x03, 0x8C, 0x5F, 0x8C, 0x8C, 0x1E, 0x94, -/* 00008BC0 */ 0x18, 0x8C, 0x90, 0x03, 0x8C, 0x5F, 0x8C, 0x8C, 0x1F, 0x94, 0x19, 0x8C, 0x90, 0x03, 0x8C, 0x5F, -/* 00008BD0 */ 0x8C, 0x8C, 0x20, 0x94, 0x1A, 0x8C, 0x90, 0x03, 0x8C, 0x5F, 0x8C, 0x8C, 0x21, 0x94, 0x1B, 0x8C, -/* 00008BE0 */ 0x90, 0x03, 0x8C, 0x5F, 0x8C, 0x8C, 0x22, 0x94, 0x1C, 0x8C, 0x90, 0x03, 0x8C, 0x5F, 0x8C, 0x8C, -/* 00008BF0 */ 0x23, 0x94, 0x1D, 0x8C, 0x90, 0x03, 0x8C, 0x5F, 0x8C, 0x8C, 0x24, 0x94, 0x1E, 0x8C, 0x90, 0x03, -/* 00008C00 */ 0x8C, 0x5F, 0x8C, 0x8C, 0x25, 0x94, 0x1F, 0x8C, 0x90, 0x03, 0x8C, 0x5F, 0x8C, 0x8C, 0x26, 0x47, -/* 00008C10 */ 0x7D, 0x8C, 0x90, 0x03, 0x8C, 0x5F, 0x8C, 0x8C, 0x27, 0x94, 0x20, 0x8C, 0x90, 0x03, 0x8C, 0x5F, -/* 00008C20 */ 0x8C, 0x8C, 0x28, 0x94, 0x21, 0x8C, 0x90, 0x04, 0x8C, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0xCB, -/* 00008C30 */ 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, 0x78, 0x0B, 0x8D, 0x29, -/* 00008C40 */ 0x78, 0x0B, 0x8D, 0x2A, 0x78, 0x0E, 0x8D, 0x2B, 0x78, 0x10, 0x8D, 0x2C, 0x78, 0x12, 0x8D, 0x2D, -/* 00008C50 */ 0x78, 0x14, 0x8D, 0x2E, 0x78, 0x16, 0x8D, 0x2F, 0x5A, 0x01, 0x8D, 0x5A, 0x02, 0x09, 0x02, 0x1F, -/* 00008C60 */ 0x03, 0x8C, 0x00, 0x8C, 0x00, 0x94, 0x36, 0x8C, 0xCB, 0x3C, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, -/* 00008C70 */ 0x00, 0x8C, 0x00, 0x00, 0x00, 0xD6, 0x03, 0x8D, 0x8C, 0x78, 0x8D, 0x8C, 0x30, 0xD6, 0x04, 0x8D, -/* 00008C80 */ 0x8C, 0x78, 0x8D, 0x8C, 0x31, 0xD6, 0x05, 0x8D, 0x8C, 0x78, 0x8D, 0x8C, 0x32, 0xD6, 0x06, 0x8D, -/* 00008C90 */ 0x8C, 0x78, 0x8D, 0x8C, 0x33, 0xD6, 0x07, 0x8D, 0x8C, 0x78, 0x8D, 0x8C, 0x34, 0xD6, 0x08, 0x8D, -/* 00008CA0 */ 0x8C, 0x78, 0x8D, 0x8C, 0x35, 0xD6, 0x09, 0x8D, 0x8C, 0x78, 0x8D, 0x8C, 0x36, 0xD6, 0x0A, 0x8D, -/* 00008CB0 */ 0x8C, 0x78, 0x8D, 0x8C, 0x37, 0xD6, 0x0B, 0x8D, 0x8C, 0x78, 0x8D, 0x8C, 0x38, 0xD6, 0x0C, 0x8D, -/* 00008CC0 */ 0x8C, 0x78, 0x8D, 0x8C, 0x39, 0xD6, 0x0D, 0x8D, 0x8C, 0x78, 0x8D, 0x8C, 0x3A, 0xD6, 0x0E, 0x8D, -/* 00008CD0 */ 0x8C, 0x78, 0x8D, 0x8C, 0x3B, 0xD6, 0x0F, 0x8D, 0x8C, 0x78, 0x8D, 0x8C, 0x3C, 0xD6, 0x10, 0x8D, -/* 00008CE0 */ 0x8C, 0x78, 0x8D, 0x8C, 0x3D, 0xD6, 0x11, 0x8D, 0x8C, 0x78, 0x8D, 0x8C, 0x3E, 0xD6, 0x12, 0x8D, -/* 00008CF0 */ 0x8C, 0x78, 0x8D, 0x8C, 0x3F, 0xD6, 0x13, 0x8D, 0x8C, 0x78, 0x8D, 0x8C, 0x40, 0xD6, 0x14, 0x8D, -/* 00008D00 */ 0x8C, 0x78, 0x8D, 0x8C, 0x41, 0x90, 0x03, 0x8D, 0x5F, 0x8D, 0x8D, 0x42, 0x78, 0x8D, 0x8C, 0x43, -/* 00008D10 */ 0xD6, 0x15, 0x8D, 0x8C, 0x78, 0x8D, 0x8C, 0x44, 0xD6, 0x16, 0x8D, 0x8C, 0x78, 0x8D, 0x8C, 0x45, -/* 00008D20 */ 0x90, 0x03, 0x8D, 0x5F, 0x8D, 0x8D, 0x46, 0x78, 0x8D, 0x8C, 0x47, 0xD6, 0x17, 0x8D, 0x8C, 0x78, -/* 00008D30 */ 0x8D, 0x8C, 0x48, 0xD6, 0x18, 0x8D, 0x8C, 0x78, 0x8D, 0x8C, 0x49, 0x90, 0x03, 0x8D, 0x5F, 0x8D, -/* 00008D40 */ 0x8D, 0x4A, 0x78, 0x8D, 0x8C, 0x4B, 0xD6, 0x19, 0x8D, 0x8C, 0x78, 0x8D, 0x8C, 0x4C, 0x90, 0x03, -/* 00008D50 */ 0x8D, 0x5F, 0x8D, 0x8D, 0x4D, 0x78, 0x8D, 0x8C, 0x4E, 0x90, 0x03, 0x8D, 0x5F, 0x8D, 0x8D, 0x4F, -/* 00008D60 */ 0x78, 0x8D, 0x8C, 0x50, 0x90, 0x03, 0x8D, 0x5F, 0x8D, 0x8D, 0x51, 0x78, 0x8D, 0x8C, 0x52, 0x90, -/* 00008D70 */ 0x03, 0x8D, 0x5F, 0x8D, 0x8D, 0x53, 0x78, 0x8D, 0x8C, 0x54, 0xD6, 0x1A, 0x8D, 0x8C, 0x78, 0x8D, -/* 00008D80 */ 0x8C, 0x55, 0xD6, 0x1B, 0x8D, 0x8C, 0x78, 0x8D, 0x8C, 0x56, 0xD6, 0x1C, 0x8D, 0x8C, 0x78, 0x8D, -/* 00008D90 */ 0x8C, 0x57, 0x94, 0x37, 0x8C, 0xCB, 0xC8, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x8C, 0x00, -/* 00008DA0 */ 0x00, 0x00, 0xD6, 0x1D, 0x8D, 0x8C, 0x78, 0x8D, 0x8C, 0x58, 0xD6, 0x1E, 0x8D, 0x8C, 0x78, 0x8D, -/* 00008DB0 */ 0x8C, 0x59, 0x94, 0x38, 0x8C, 0x90, 0x35, 0x8C, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0xD8, -/* 00008DC0 */ 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, 0x78, 0x0B, 0x8D, 0x5A, 0x78, -/* 00008DD0 */ 0x0E, 0x8D, 0x5B, 0x78, 0x10, 0x8D, 0x5C, 0x78, 0x12, 0x8D, 0x5D, 0x78, 0x12, 0x8D, 0x5E, 0x5A, -/* 00008DE0 */ 0x01, 0x8D, 0x02, 0x1F, 0x02, 0x8C, 0x00, 0x8C, 0x00, 0x94, 0x39, 0x8C, 0x90, 0x35, 0x8C, 0x07, -/* 00008DF0 */ 0x02, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0xF4, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x8D, 0x00, -/* 00008E00 */ 0x00, 0x00, 0x78, 0x0B, 0x8D, 0x5F, 0x78, 0x0E, 0x8D, 0x60, 0x78, 0x10, 0x8D, 0x61, 0x78, 0x10, -/* 00008E10 */ 0x8D, 0x5E, 0x5A, 0x01, 0x8D, 0x02, 0x1F, 0x02, 0x8C, 0x00, 0x8C, 0x00, 0x94, 0x3A, 0x8C, 0x90, -/* 00008E20 */ 0x35, 0x8C, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0x0C, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, -/* 00008E30 */ 0x00, 0x8D, 0x00, 0x00, 0x00, 0x78, 0x0B, 0x8D, 0x5E, 0x78, 0x0B, 0x8D, 0x62, 0x78, 0x0E, 0x8D, -/* 00008E40 */ 0x63, 0x78, 0x10, 0x8D, 0x64, 0x5A, 0x01, 0x8D, 0x02, 0x1F, 0x02, 0x8C, 0x00, 0x8C, 0x00, 0x94, -/* 00008E50 */ 0x3B, 0x8C, 0x90, 0x35, 0x8C, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0x24, 0x01, 0x00, 0x00, -/* 00008E60 */ 0x07, 0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, 0x78, 0x0B, 0x8D, 0x5E, 0x78, 0x0B, 0x8D, 0x65, -/* 00008E70 */ 0x78, 0x0E, 0x8D, 0x66, 0x78, 0x10, 0x8D, 0x67, 0x5A, 0x01, 0x8D, 0x02, 0x1F, 0x02, 0x8C, 0x00, -/* 00008E80 */ 0x8C, 0x00, 0x94, 0x3C, 0x8C, 0xD3, 0x1F, 0x8C, 0x94, 0x3D, 0x8C, 0x90, 0x33, 0x8C, 0x0E, 0xAB, -/* 00008E90 */ 0x04, 0x8C, 0xDE, 0x00, 0x1A, 0x03, 0xB6, 0x8C, 0x00, 0x01, 0x53, 0x01, 0x2D, 0x73, 0x8C, 0x93, -/* 00008EA0 */ 0x00, 0x02, 0x73, 0x01, 0x53, 0x01, 0x2F, 0x74, 0x8C, 0x93, 0x00, 0x03, 0x74, 0x4F, 0x8C, 0x93, -/* 00008EB0 */ 0x00, 0x04, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x05, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x06, 0x8C, 0x4F, -/* 00008EC0 */ 0x8C, 0x93, 0x00, 0x07, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x08, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x09, -/* 00008ED0 */ 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x0A, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x0B, 0x8C, 0x4F, 0x8C, 0x93, -/* 00008EE0 */ 0x00, 0x0C, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x0D, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x0E, 0x8C, 0x4F, -/* 00008EF0 */ 0x8C, 0x93, 0x00, 0x0F, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x10, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x11, -/* 00008F00 */ 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x12, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x13, 0x8C, 0x4F, 0x8C, 0x93, -/* 00008F10 */ 0x00, 0x14, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x15, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x16, 0x8C, 0x4F, -/* 00008F20 */ 0x8C, 0x93, 0x00, 0x17, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x18, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x19, -/* 00008F30 */ 0x8C, 0xA6, 0x8C, 0x93, 0x00, 0x04, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x20, 0x8C, 0x8D, -/* 00008F40 */ 0x93, 0x00, 0x05, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x21, 0x8C, 0x8D, 0x94, 0x22, 0x8C, -/* 00008F50 */ 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x22, 0x8C, 0x8D, 0x94, 0x23, 0x8C, 0xB6, 0x8D, 0x00, 0x01, -/* 00008F60 */ 0x53, 0x01, 0x23, 0x8C, 0x8D, 0x93, 0x00, 0x06, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x24, -/* 00008F70 */ 0x8C, 0x8D, 0x93, 0x00, 0x07, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x25, 0x8C, 0x8D, 0x93, -/* 00008F80 */ 0x00, 0x08, 0x8C, 0x8E, 0x00, 0x08, 0x8C, 0x93, 0x00, 0x09, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, -/* 00008F90 */ 0x01, 0x26, 0x8C, 0x8D, 0x93, 0x00, 0x0A, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x27, 0x8C, -/* 00008FA0 */ 0x8D, 0x93, 0x00, 0x0B, 0x8C, 0x90, 0x35, 0x8C, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0x3C, -/* 00008FB0 */ 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, 0xB6, 0x8F, 0x00, 0x01, 0x57, -/* 00008FC0 */ 0x01, 0x28, 0x8E, 0x8F, 0x8D, 0x78, 0x8E, 0x8D, 0x68, 0xB6, 0x8F, 0x00, 0x01, 0x57, 0x01, 0x29, -/* 00008FD0 */ 0x8E, 0x8F, 0x8D, 0x78, 0x8E, 0x8D, 0x69, 0xB6, 0x8F, 0x00, 0x01, 0x57, 0x01, 0x2A, 0x8E, 0x8F, -/* 00008FE0 */ 0x8D, 0x78, 0x8E, 0x8D, 0x6A, 0xB6, 0x8F, 0x00, 0x01, 0x57, 0x01, 0x2B, 0x8E, 0x8F, 0x8D, 0x78, -/* 00008FF0 */ 0x8E, 0x8D, 0x6B, 0xB6, 0x8F, 0x00, 0x01, 0x57, 0x01, 0x2C, 0x8E, 0x8F, 0x8D, 0x78, 0x8E, 0x8D, -/* 00009000 */ 0x6C, 0x5A, 0x01, 0x8D, 0x02, 0x1F, 0x02, 0x8C, 0x00, 0x8C, 0x00, 0x94, 0x24, 0x8C, 0xB6, 0x8D, -/* 00009010 */ 0x00, 0x01, 0x53, 0x01, 0x2E, 0x8C, 0x8D, 0x93, 0x00, 0x0C, 0x8C, 0xA6, 0x8C, 0x93, 0x00, 0x0D, -/* 00009020 */ 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x30, 0x8C, 0x8D, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x02, -/* 00009030 */ 0x02, 0x1F, 0x01, 0x8C, 0x00, 0x8C, 0x00, 0x93, 0x00, 0x0E, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, -/* 00009040 */ 0x01, 0x31, 0x8C, 0x8D, 0x93, 0x00, 0x0F, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x32, 0x8C, -/* 00009050 */ 0x8D, 0x93, 0x00, 0x10, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x33, 0x8C, 0x8D, 0x93, 0x00, -/* 00009060 */ 0x11, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x34, 0x8C, 0x8D, 0x93, 0x00, 0x12, 0x8C, 0x8E, -/* 00009070 */ 0x00, 0x12, 0x8C, 0x93, 0x00, 0x13, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x35, 0x8C, 0x8D, -/* 00009080 */ 0x93, 0x00, 0x14, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x36, 0x8C, 0x8D, 0x93, 0x00, 0x15, -/* 00009090 */ 0x8C, 0x90, 0x37, 0x8D, 0x6A, 0x8C, 0x8D, 0x6D, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x8D, 0x02, 0x1F, -/* 000090A0 */ 0x01, 0x8C, 0x00, 0x8C, 0x00, 0x93, 0x00, 0x16, 0x8C, 0x90, 0x03, 0x8D, 0x6A, 0x8C, 0x8D, 0x6E, -/* 000090B0 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x8D, 0x8E, 0x00, 0x16, 0x8E, 0x5A, 0x01, 0x8E, 0xCB, 0x58, 0x01, -/* 000090C0 */ 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x8E, 0x00, 0x00, 0x00, 0x78, 0x4A, 0x8E, 0x6F, 0x5A, 0x02, -/* 000090D0 */ 0x8E, 0x1F, 0x03, 0xFF, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x37, 0x8C, 0x8D, 0x93, 0x00, -/* 000090E0 */ 0x17, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x38, 0x8C, 0x8D, 0x93, 0x00, 0x18, 0x8C, 0x90, -/* 000090F0 */ 0x32, 0x8C, 0x14, 0x03, 0x00, 0x8C, 0x4B, 0x09, 0xD0, 0x00, 0xDE, 0x01, 0x03, 0x05, 0x4F, 0x8C, -/* 00009100 */ 0x93, 0x01, 0x02, 0x8C, 0x93, 0x01, 0x02, 0x4C, 0x90, 0x23, 0x8C, 0x07, 0x03, 0x00, 0x5A, 0x00, -/* 00009110 */ 0x02, 0x8E, 0x01, 0x02, 0x8D, 0x5A, 0x01, 0x8D, 0xB6, 0x8E, 0x00, 0xB5, 0x01, 0x00, 0x00, 0x00, -/* 00009120 */ 0x8E, 0x8E, 0x01, 0x53, 0x01, 0x39, 0x8D, 0x8E, 0x5A, 0x02, 0x8D, 0x02, 0x1F, 0x03, 0x8C, 0x00, -/* 00009130 */ 0x8C, 0x00, 0x47, 0x7E, 0x8C, 0x90, 0x37, 0x8D, 0x6A, 0x8C, 0x8D, 0x70, 0x07, 0x03, 0x00, 0x5A, -/* 00009140 */ 0x00, 0x8D, 0x5A, 0x01, 0x7E, 0x8E, 0x00, 0x16, 0x8E, 0x5A, 0x02, 0x8E, 0x02, 0x1F, 0x03, 0x8C, -/* 00009150 */ 0x00, 0x8C, 0x00, 0x47, 0x7F, 0x8C, 0x90, 0x37, 0x8D, 0x6A, 0x8C, 0x8D, 0x71, 0x07, 0x04, 0x00, -/* 00009160 */ 0x5A, 0x00, 0x8D, 0x5A, 0x01, 0x7F, 0x5A, 0x02, 0x4D, 0xCB, 0x64, 0x01, 0x00, 0x00, 0x0A, 0x00, -/* 00009170 */ 0x00, 0x00, 0x8E, 0x00, 0x00, 0x00, 0x78, 0x4F, 0x8E, 0x72, 0x78, 0x51, 0x8E, 0x73, 0x78, 0x51, -/* 00009180 */ 0x8E, 0x74, 0x78, 0x03, 0x8E, 0x75, 0x5A, 0x03, 0x8E, 0x1F, 0x04, 0xFF, 0x8C, 0x90, 0x37, 0x8D, -/* 00009190 */ 0x6A, 0x8C, 0x8D, 0x71, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x8D, 0x68, 0x8E, 0x00, 0x00, 0x00, 0x8E, -/* 000091A0 */ 0x5A, 0x01, 0x8E, 0x5A, 0x02, 0x4F, 0xCB, 0x7C, 0x01, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x8E, -/* 000091B0 */ 0x00, 0x00, 0x00, 0x78, 0x7F, 0x8E, 0x72, 0x78, 0x03, 0x8E, 0x73, 0x78, 0x51, 0x8E, 0x74, 0x78, -/* 000091C0 */ 0x03, 0x8E, 0x75, 0x5A, 0x03, 0x8E, 0x1F, 0x04, 0xFF, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, -/* 000091D0 */ 0x3A, 0x8C, 0x8D, 0x93, 0x00, 0x19, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x3B, 0x8C, 0x8D, -/* 000091E0 */ 0x07, 0x01, 0x00, 0x5A, 0x00, 0x02, 0x02, 0x1F, 0x01, 0x8C, 0x00, 0x8C, 0x00, 0x47, 0x80, 0x8C, -/* 000091F0 */ 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x3C, 0x8C, 0x8D, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x02, 0x02, -/* 00009200 */ 0x1F, 0x01, 0x8C, 0x00, 0x8C, 0x00, 0x47, 0x81, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x3D, -/* 00009210 */ 0x8C, 0x8D, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x02, 0x02, 0x1F, 0x01, 0x8C, 0x00, 0x8C, 0x00, 0x47, -/* 00009220 */ 0x82, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x3E, 0x8C, 0x8D, 0x07, 0x01, 0x00, 0x5A, 0x00, -/* 00009230 */ 0x02, 0x02, 0x1F, 0x01, 0x8C, 0x00, 0x8C, 0x00, 0x47, 0x83, 0x8C, 0x90, 0x32, 0x8C, 0x14, 0x03, -/* 00009240 */ 0x00, 0x8C, 0x4B, 0x09, 0xF4, 0x00, 0x90, 0x37, 0x8D, 0x6A, 0x8C, 0x8D, 0x71, 0x07, 0x04, 0x00, -/* 00009250 */ 0x5A, 0x00, 0x8D, 0x68, 0x8E, 0x00, 0x00, 0x00, 0x8E, 0x5A, 0x01, 0x8E, 0x5A, 0x02, 0x54, 0xCB, -/* 00009260 */ 0x94, 0x01, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x8E, 0x00, 0x00, 0x00, 0x78, 0x80, 0x8E, 0x72, -/* 00009270 */ 0x78, 0x03, 0x8E, 0x73, 0x78, 0x51, 0x8E, 0x74, 0x78, 0x03, 0x8E, 0x75, 0x5A, 0x03, 0x8E, 0x1F, -/* 00009280 */ 0x04, 0xFF, 0x8C, 0x90, 0x37, 0x8D, 0x6A, 0x8C, 0x8D, 0x71, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x8D, -/* 00009290 */ 0x68, 0x8E, 0x00, 0x00, 0x00, 0x8E, 0x5A, 0x01, 0x8E, 0x5A, 0x02, 0x55, 0xCB, 0xAC, 0x01, 0x00, -/* 000092A0 */ 0x00, 0x0D, 0x00, 0x00, 0x00, 0x8E, 0x00, 0x00, 0x00, 0x78, 0x81, 0x8E, 0x72, 0x78, 0x03, 0x8E, -/* 000092B0 */ 0x73, 0x78, 0x51, 0x8E, 0x74, 0x78, 0x03, 0x8E, 0x75, 0x5A, 0x03, 0x8E, 0x1F, 0x04, 0xFF, 0x8C, -/* 000092C0 */ 0x90, 0x37, 0x8D, 0x6A, 0x8C, 0x8D, 0x71, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x8D, 0x68, 0x8E, 0x00, -/* 000092D0 */ 0x00, 0x00, 0x8E, 0x5A, 0x01, 0x8E, 0x5A, 0x02, 0x56, 0xCB, 0xC4, 0x01, 0x00, 0x00, 0x0E, 0x00, -/* 000092E0 */ 0x00, 0x00, 0x8E, 0x00, 0x00, 0x00, 0x78, 0x82, 0x8E, 0x72, 0x78, 0x03, 0x8E, 0x73, 0x78, 0x51, -/* 000092F0 */ 0x8E, 0x74, 0x78, 0x03, 0x8E, 0x75, 0x5A, 0x03, 0x8E, 0x1F, 0x04, 0xFF, 0x8C, 0x90, 0x37, 0x8D, -/* 00009300 */ 0x6A, 0x8C, 0x8D, 0x71, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x8D, 0x68, 0x8E, 0x00, 0x00, 0x00, 0x8E, -/* 00009310 */ 0x5A, 0x01, 0x8E, 0x5A, 0x02, 0x57, 0xCB, 0xDC, 0x01, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x8E, -/* 00009320 */ 0x00, 0x00, 0x00, 0x78, 0x83, 0x8E, 0x72, 0x78, 0x03, 0x8E, 0x73, 0x78, 0x51, 0x8E, 0x74, 0x78, -/* 00009330 */ 0x03, 0x8E, 0x75, 0x5A, 0x03, 0x8E, 0x1F, 0x04, 0xFF, 0x8C, 0x09, 0x33, 0x07, 0xDE, 0x00, 0x1A, -/* 00009340 */ 0x07, 0xB6, 0x8C, 0x00, 0x01, 0x53, 0x01, 0x4C, 0x75, 0x8C, 0x93, 0x00, 0x02, 0x75, 0x01, 0x53, -/* 00009350 */ 0x01, 0x4D, 0x76, 0x8C, 0x93, 0x00, 0x03, 0x76, 0x01, 0x53, 0x01, 0x4E, 0x77, 0x8C, 0x93, 0x00, -/* 00009360 */ 0x04, 0x77, 0x01, 0x53, 0x01, 0x4F, 0x78, 0x8C, 0x93, 0x00, 0x05, 0x78, 0x01, 0x53, 0x01, 0x50, -/* 00009370 */ 0x79, 0x8C, 0x93, 0x00, 0x06, 0x79, 0x01, 0x53, 0x01, 0x51, 0x7A, 0x8C, 0x93, 0x00, 0x07, 0x7A, -/* 00009380 */ 0x01, 0x53, 0x01, 0x52, 0x7B, 0x8C, 0x93, 0x00, 0x08, 0x7B, 0x4F, 0x8C, 0x93, 0x00, 0x09, 0x8C, -/* 00009390 */ 0x4F, 0x8C, 0x93, 0x00, 0x0A, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x0B, 0x8C, 0x4F, 0x8C, 0x93, 0x00, -/* 000093A0 */ 0x0C, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x0D, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x0E, 0x8C, 0x4F, 0x8C, -/* 000093B0 */ 0x93, 0x00, 0x0F, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x10, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x11, 0x8C, -/* 000093C0 */ 0x4F, 0x8C, 0x93, 0x00, 0x12, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x13, 0x8C, 0x4F, 0x8C, 0x93, 0x00, -/* 000093D0 */ 0x14, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x15, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x16, 0x8C, 0x4F, 0x8C, -/* 000093E0 */ 0x93, 0x00, 0x17, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x18, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x19, 0x8C, -/* 000093F0 */ 0x90, 0x03, 0x8C, 0x5F, 0x8C, 0x8C, 0x76, 0xA6, 0x8D, 0x14, 0x03, 0x00, 0x8C, 0x8D, 0x09, 0x14, -/* 00009400 */ 0x00, 0x90, 0x03, 0x8C, 0x90, 0x02, 0x8D, 0x07, 0x01, 0x00, 0x02, 0xC1, 0x01, 0x8D, 0x00, 0x8D, -/* 00009410 */ 0x00, 0x74, 0x8D, 0x8C, 0x77, 0x90, 0x03, 0x8C, 0x5F, 0x8C, 0x8C, 0x78, 0xA6, 0x8D, 0x14, 0x03, -/* 00009420 */ 0x00, 0x8C, 0x8D, 0x09, 0x14, 0x00, 0x90, 0x03, 0x8C, 0x90, 0x02, 0x8D, 0x07, 0x01, 0x00, 0x02, -/* 00009430 */ 0xC1, 0x01, 0x8D, 0x00, 0x8D, 0x00, 0x74, 0x8D, 0x8C, 0x79, 0xA6, 0x8C, 0x93, 0x00, 0x09, 0x8C, -/* 00009440 */ 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x3F, 0x8C, 0x8D, 0x93, 0x00, 0x0A, 0x8C, 0xB6, 0x8D, 0x00, -/* 00009450 */ 0x01, 0x53, 0x01, 0x40, 0x8C, 0x8D, 0x93, 0x00, 0x0B, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, -/* 00009460 */ 0x41, 0x8C, 0x8D, 0x93, 0x00, 0x0C, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x42, 0x8C, 0x8D, -/* 00009470 */ 0x94, 0x25, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x43, 0x8C, 0x8D, 0x94, 0x22, 0x8C, 0xB6, -/* 00009480 */ 0x8D, 0x00, 0x01, 0x53, 0x01, 0x44, 0x8C, 0x8D, 0x94, 0x23, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, -/* 00009490 */ 0x01, 0x45, 0x8C, 0x8D, 0x94, 0x26, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x46, 0x8C, 0x8D, -/* 000094A0 */ 0x94, 0x27, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x47, 0x8C, 0x8D, 0x94, 0x28, 0x8C, 0xB6, -/* 000094B0 */ 0x8D, 0x00, 0x01, 0x53, 0x01, 0x48, 0x8C, 0x8D, 0x94, 0x29, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, -/* 000094C0 */ 0x01, 0x49, 0x8C, 0x8D, 0x94, 0x2A, 0x8C, 0xA6, 0x8C, 0x93, 0x00, 0x0D, 0x8C, 0xB6, 0x8D, 0x00, -/* 000094D0 */ 0x01, 0x53, 0x01, 0x4A, 0x8C, 0x8D, 0x94, 0x2B, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x4B, -/* 000094E0 */ 0x8C, 0x8D, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x02, 0x02, 0x1F, 0x01, 0x8C, 0x00, 0x8C, 0x00, 0x94, -/* 000094F0 */ 0x24, 0x8C, 0xA6, 0x8C, 0x93, 0x00, 0x0E, 0x8C, 0xA6, 0x8C, 0x93, 0x00, 0x0F, 0x8C, 0xA6, 0x8C, -/* 00009500 */ 0x93, 0x00, 0x10, 0x8C, 0xA6, 0x8C, 0x93, 0x00, 0x11, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, -/* 00009510 */ 0x53, 0x8C, 0x8D, 0x94, 0x2C, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x54, 0x8C, 0x8D, 0x94, -/* 00009520 */ 0x2D, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x55, 0x8C, 0x8D, 0x94, 0x2E, 0x8C, 0x90, 0x04, -/* 00009530 */ 0x8C, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0xCA, 0x8D, 0x5A, 0x01, 0x8D, 0x5A, 0x02, 0x09, 0x02, -/* 00009540 */ 0x1F, 0x03, 0x8C, 0x00, 0x8C, 0x00, 0x47, 0x84, 0x8C, 0x90, 0x03, 0x8D, 0x6A, 0x8C, 0x8D, 0x6E, -/* 00009550 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x8D, 0x5A, 0x01, 0x84, 0x90, 0x04, 0x8E, 0x07, 0x03, 0x00, 0x5A, -/* 00009560 */ 0x00, 0x02, 0xCB, 0xF4, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x8F, 0x00, 0x00, 0x00, 0x78, -/* 00009570 */ 0x4A, 0x8F, 0x7A, 0x5A, 0x01, 0x8F, 0x5A, 0x02, 0x09, 0x02, 0x1F, 0x03, 0x8E, 0x00, 0x8E, 0x00, -/* 00009580 */ 0x5A, 0x02, 0x8E, 0x1F, 0x03, 0xFF, 0x8C, 0x93, 0x00, 0x12, 0x58, 0x90, 0x06, 0x8C, 0x07, 0x04, -/* 00009590 */ 0x00, 0x5A, 0x00, 0x02, 0x90, 0x1A, 0x8D, 0x5A, 0x01, 0x8D, 0x90, 0x23, 0x8D, 0x07, 0x03, 0x00, -/* 000095A0 */ 0x5A, 0x00, 0x02, 0x8E, 0x00, 0x12, 0x8E, 0x5A, 0x01, 0x8E, 0xB6, 0x8F, 0x00, 0x01, 0x53, 0x01, -/* 000095B0 */ 0x56, 0x8E, 0x8F, 0x5A, 0x02, 0x8E, 0x02, 0x1F, 0x03, 0x8D, 0x00, 0x8D, 0x00, 0x5A, 0x02, 0x8D, -/* 000095C0 */ 0x5A, 0x03, 0x84, 0x02, 0x1F, 0x04, 0x8C, 0x00, 0x8C, 0x00, 0x93, 0x00, 0x13, 0x8C, 0x93, 0x00, -/* 000095D0 */ 0x14, 0x59, 0x90, 0x06, 0x8C, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x90, 0x1A, 0x8D, 0x5A, 0x01, -/* 000095E0 */ 0x8D, 0x90, 0x23, 0x8D, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x8E, 0x00, 0x14, 0x8E, 0x5A, 0x01, -/* 000095F0 */ 0x8E, 0xB6, 0x8F, 0x00, 0x01, 0x53, 0x01, 0x57, 0x8E, 0x8F, 0x5A, 0x02, 0x8E, 0x02, 0x1F, 0x03, -/* 00009600 */ 0x8D, 0x00, 0x8D, 0x00, 0x5A, 0x02, 0x8D, 0x5A, 0x03, 0x84, 0x02, 0x1F, 0x04, 0x8C, 0x00, 0x8C, -/* 00009610 */ 0x00, 0x93, 0x00, 0x15, 0x8C, 0x93, 0x00, 0x16, 0x5A, 0x90, 0x06, 0x8C, 0x07, 0x04, 0x00, 0x5A, -/* 00009620 */ 0x00, 0x02, 0x90, 0x1A, 0x8D, 0x5A, 0x01, 0x8D, 0x90, 0x23, 0x8D, 0x07, 0x03, 0x00, 0x5A, 0x00, -/* 00009630 */ 0x02, 0x8E, 0x00, 0x16, 0x8E, 0x5A, 0x01, 0x8E, 0xB6, 0x8F, 0x00, 0x01, 0x53, 0x01, 0x58, 0x8E, -/* 00009640 */ 0x8F, 0x5A, 0x02, 0x8E, 0x02, 0x1F, 0x03, 0x8D, 0x00, 0x8D, 0x00, 0x5A, 0x02, 0x8D, 0x5A, 0x03, -/* 00009650 */ 0x84, 0x02, 0x1F, 0x04, 0x8C, 0x00, 0x8C, 0x00, 0x93, 0x00, 0x17, 0x8C, 0x93, 0x00, 0x18, 0x4C, -/* 00009660 */ 0x90, 0x06, 0x8C, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x90, 0x1A, 0x8D, 0x5A, 0x01, 0x8D, 0x90, -/* 00009670 */ 0x23, 0x8D, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x8E, 0x00, 0x18, 0x8E, 0x5A, 0x01, 0x8E, 0xB6, -/* 00009680 */ 0x8F, 0x00, 0x01, 0x53, 0x01, 0x59, 0x8E, 0x8F, 0x5A, 0x02, 0x8E, 0x02, 0x1F, 0x03, 0x8D, 0x00, -/* 00009690 */ 0x8D, 0x00, 0x5A, 0x02, 0x8D, 0x5A, 0x03, 0x84, 0x02, 0x1F, 0x04, 0x8C, 0x00, 0x8C, 0x00, 0x47, -/* 000096A0 */ 0x85, 0x8C, 0x90, 0x15, 0x8C, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8E, 0x00, 0x13, 0x8D, 0x5A, -/* 000096B0 */ 0x01, 0x8D, 0x5A, 0x02, 0x4D, 0xCB, 0x00, 0x02, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x8D, 0x00, -/* 000096C0 */ 0x00, 0x00, 0x78, 0x5B, 0x8D, 0x7B, 0x5A, 0x03, 0x8D, 0x1F, 0x04, 0xFF, 0x8C, 0x90, 0x15, 0x8C, -/* 000096D0 */ 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8E, 0x00, 0x15, 0x8D, 0x5A, 0x01, 0x8D, 0x5A, 0x02, 0x4D, -/* 000096E0 */ 0xCB, 0x0C, 0x02, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, 0x78, 0x5B, 0x8D, -/* 000096F0 */ 0x7B, 0x5A, 0x03, 0x8D, 0x1F, 0x04, 0xFF, 0x8C, 0x90, 0x15, 0x8C, 0x07, 0x04, 0x00, 0x5A, 0x00, -/* 00009700 */ 0x02, 0x8E, 0x00, 0x17, 0x8D, 0x5A, 0x01, 0x8D, 0x5A, 0x02, 0x4D, 0xCB, 0x18, 0x02, 0x00, 0x00, -/* 00009710 */ 0x13, 0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, 0x78, 0x5B, 0x8D, 0x7B, 0x5A, 0x03, 0x8D, 0x1F, -/* 00009720 */ 0x04, 0xFF, 0x8C, 0x90, 0x15, 0x8C, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x85, 0x5A, -/* 00009730 */ 0x02, 0x4D, 0xCB, 0x24, 0x02, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, 0x78, -/* 00009740 */ 0x4F, 0x8D, 0x7B, 0x5A, 0x03, 0x8D, 0x1F, 0x04, 0xFF, 0x8C, 0x90, 0x04, 0x8C, 0x07, 0x03, 0x00, -/* 00009750 */ 0x5A, 0x00, 0x02, 0xCB, 0x30, 0x02, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, -/* 00009760 */ 0x90, 0x04, 0x8E, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0x5C, 0x02, 0x00, 0x00, 0x16, 0x00, -/* 00009770 */ 0x00, 0x00, 0x8F, 0x00, 0x00, 0x00, 0x78, 0x5E, 0x8F, 0x7C, 0x5A, 0x01, 0x8F, 0x5A, 0x02, 0x09, -/* 00009780 */ 0x02, 0x1F, 0x03, 0x8E, 0x00, 0x8E, 0x00, 0x78, 0x8E, 0x8D, 0x7D, 0x90, 0x04, 0x8E, 0x07, 0x03, -/* 00009790 */ 0x00, 0x5A, 0x00, 0x02, 0xCB, 0x68, 0x02, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x8F, 0x00, 0x00, -/* 000097A0 */ 0x00, 0x78, 0x5E, 0x8F, 0x7C, 0x5A, 0x01, 0x8F, 0x5A, 0x02, 0x09, 0x02, 0x1F, 0x03, 0x8E, 0x00, -/* 000097B0 */ 0x8E, 0x00, 0x78, 0x8E, 0x8D, 0x7E, 0x90, 0x04, 0x8E, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0xCB, -/* 000097C0 */ 0x74, 0x02, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x8F, 0x00, 0x00, 0x00, 0x78, 0x62, 0x8F, 0x7F, -/* 000097D0 */ 0x5A, 0x01, 0x8F, 0x5A, 0x02, 0x09, 0x02, 0x1F, 0x03, 0x8E, 0x00, 0x8E, 0x00, 0x78, 0x8E, 0x8D, -/* 000097E0 */ 0x80, 0x90, 0x04, 0x8E, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0x80, 0x02, 0x00, 0x00, 0x19, -/* 000097F0 */ 0x00, 0x00, 0x00, 0x8F, 0x00, 0x00, 0x00, 0x78, 0x65, 0x8F, 0x81, 0x5A, 0x01, 0x8F, 0x5A, 0x02, -/* 00009800 */ 0x09, 0x02, 0x1F, 0x03, 0x8E, 0x00, 0x8E, 0x00, 0x78, 0x8E, 0x8D, 0x82, 0x90, 0x04, 0x8E, 0x07, -/* 00009810 */ 0x03, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0x8C, 0x02, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00, 0x8F, 0x00, -/* 00009820 */ 0x00, 0x00, 0x78, 0x68, 0x8F, 0x83, 0x78, 0x65, 0x8F, 0x81, 0x78, 0x6A, 0x8F, 0x84, 0x5A, 0x01, -/* 00009830 */ 0x8F, 0x5A, 0x02, 0x09, 0x02, 0x1F, 0x03, 0x8E, 0x00, 0x8E, 0x00, 0x78, 0x8E, 0x8D, 0x85, 0x90, -/* 00009840 */ 0x04, 0x8E, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0xA0, 0x02, 0x00, 0x00, 0x1B, 0x00, 0x00, -/* 00009850 */ 0x00, 0x8F, 0x00, 0x00, 0x00, 0x78, 0x65, 0x8F, 0x81, 0x78, 0x6A, 0x8F, 0x84, 0x5A, 0x01, 0x8F, -/* 00009860 */ 0x5A, 0x02, 0x09, 0x02, 0x1F, 0x03, 0x8E, 0x00, 0x8E, 0x00, 0x78, 0x8E, 0x8D, 0x86, 0x90, 0x04, -/* 00009870 */ 0x8E, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0xB0, 0x02, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, -/* 00009880 */ 0x8F, 0x00, 0x00, 0x00, 0x78, 0x65, 0x8F, 0x81, 0x78, 0x6A, 0x8F, 0x84, 0x5A, 0x01, 0x8F, 0x5A, -/* 00009890 */ 0x02, 0x09, 0x02, 0x1F, 0x03, 0x8E, 0x00, 0x8E, 0x00, 0x78, 0x8E, 0x8D, 0x87, 0x90, 0x04, 0x8E, -/* 000098A0 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0xC0, 0x02, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0x8F, -/* 000098B0 */ 0x00, 0x00, 0x00, 0x78, 0x69, 0x8F, 0x84, 0x78, 0x6A, 0x8F, 0x88, 0x5A, 0x01, 0x8F, 0x5A, 0x02, -/* 000098C0 */ 0x09, 0x02, 0x1F, 0x03, 0x8E, 0x00, 0x8E, 0x00, 0x78, 0x8E, 0x8D, 0x89, 0x90, 0x04, 0x8E, 0x07, -/* 000098D0 */ 0x03, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0xD0, 0x02, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x8F, 0x00, -/* 000098E0 */ 0x00, 0x00, 0x78, 0x69, 0x8F, 0x84, 0x78, 0x6A, 0x8F, 0x88, 0x5A, 0x01, 0x8F, 0x5A, 0x02, 0x09, -/* 000098F0 */ 0x02, 0x1F, 0x03, 0x8E, 0x00, 0x8E, 0x00, 0x78, 0x8E, 0x8D, 0x8A, 0x5A, 0x01, 0x8D, 0x5A, 0x02, -/* 00009900 */ 0x09, 0x02, 0x1F, 0x03, 0x8C, 0x00, 0x8C, 0x00, 0x94, 0x2F, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, -/* 00009910 */ 0x01, 0x5A, 0x8C, 0x8D, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x02, 0x02, 0x1F, 0x01, 0x8C, 0x00, 0x8C, -/* 00009920 */ 0x00, 0x94, 0x30, 0x8C, 0xA6, 0x8C, 0x93, 0x00, 0x19, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, -/* 00009930 */ 0x5B, 0x8C, 0x8D, 0x94, 0x31, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x5C, 0x8C, 0x8D, 0x07, -/* 00009940 */ 0x01, 0x00, 0x5A, 0x00, 0x02, 0x02, 0x1F, 0x01, 0x8C, 0x00, 0x8C, 0x00, 0x47, 0x86, 0x8C, 0xB6, -/* 00009950 */ 0x8D, 0x00, 0x01, 0x53, 0x01, 0x5D, 0x8C, 0x8D, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x02, 0x02, 0x1F, -/* 00009960 */ 0x01, 0x8C, 0x00, 0x8C, 0x00, 0x47, 0x81, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x5E, 0x8C, -/* 00009970 */ 0x8D, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x02, 0x02, 0x1F, 0x01, 0x8C, 0x00, 0x8C, 0x00, 0x47, 0x82, -/* 00009980 */ 0x8C, 0x90, 0x32, 0x8C, 0x14, 0x03, 0x00, 0x8C, 0x4B, 0x09, 0xE4, 0x00, 0x90, 0x15, 0x8C, 0x07, -/* 00009990 */ 0x04, 0x00, 0x5A, 0x00, 0x02, 0x68, 0x8E, 0x00, 0x00, 0x00, 0x8D, 0x5A, 0x01, 0x8D, 0x5A, 0x02, -/* 000099A0 */ 0x54, 0xCB, 0xE0, 0x02, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, 0x78, 0x86, -/* 000099B0 */ 0x8D, 0x7B, 0x78, 0x03, 0x8D, 0x8B, 0x78, 0x51, 0x8D, 0x8C, 0x78, 0x03, 0x8D, 0x8D, 0x5A, 0x03, -/* 000099C0 */ 0x8D, 0x1F, 0x04, 0xFF, 0x8C, 0x90, 0x15, 0x8C, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x68, 0x8E, -/* 000099D0 */ 0x00, 0x00, 0x00, 0x8D, 0x5A, 0x01, 0x8D, 0x5A, 0x02, 0x55, 0xCB, 0xF8, 0x02, 0x00, 0x00, 0x20, -/* 000099E0 */ 0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, 0x78, 0x81, 0x8D, 0x7B, 0x78, 0x03, 0x8D, 0x8B, 0x78, -/* 000099F0 */ 0x51, 0x8D, 0x8C, 0x78, 0x03, 0x8D, 0x8D, 0x5A, 0x03, 0x8D, 0x1F, 0x04, 0xFF, 0x8C, 0x90, 0x15, -/* 00009A00 */ 0x8C, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x68, 0x8E, 0x00, 0x00, 0x00, 0x8D, 0x5A, 0x01, 0x8D, -/* 00009A10 */ 0x5A, 0x02, 0x56, 0xCB, 0x10, 0x03, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, -/* 00009A20 */ 0x78, 0x82, 0x8D, 0x7B, 0x78, 0x03, 0x8D, 0x8B, 0x78, 0x51, 0x8D, 0x8C, 0x78, 0x03, 0x8D, 0x8D, -/* 00009A30 */ 0x5A, 0x03, 0x8D, 0x1F, 0x04, 0xFF, 0x8C, 0x90, 0x15, 0x8C, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, -/* 00009A40 */ 0x68, 0x8E, 0x00, 0x00, 0x00, 0x8D, 0x5A, 0x01, 0x8D, 0x5A, 0x02, 0x4F, 0xCB, 0x28, 0x03, 0x00, -/* 00009A50 */ 0x00, 0x22, 0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, 0x78, 0x85, 0x8D, 0x7B, 0x78, 0x03, 0x8D, -/* 00009A60 */ 0x8B, 0x78, 0x51, 0x8D, 0x8C, 0x78, 0x03, 0x8D, 0x8D, 0x5A, 0x03, 0x8D, 0x1F, 0x04, 0xFF, 0x8C, -/* 00009A70 */ 0xA6, 0x00, 0x24, 0x00, 0x23, 0xFE, 0x40, 0x03, 0x00, 0x28, 0x03, 0x00, 0x00, 0x03, 0x04, 0x00, -/* 00009A80 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, -/* 00009A90 */ 0x00, 0x81, 0x01, 0x00, 0x00, 0x10, 0x03, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 00009AA0 */ 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, -/* 00009AB0 */ 0x00, 0xF8, 0x02, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, -/* 00009AC0 */ 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0xE0, 0x02, 0x00, -/* 00009AD0 */ 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, -/* 00009AE0 */ 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0xD0, 0x02, 0x00, 0x00, 0x03, 0x02, 0x00, -/* 00009AF0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x5A, 0x03, 0x00, 0x00, 0x5F, 0x03, 0x00, 0x00, 0xC0, 0x02, 0x00, -/* 00009B00 */ 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5A, 0x03, 0x00, 0x00, 0x5F, 0x03, 0x00, -/* 00009B10 */ 0x00, 0xB0, 0x02, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x03, 0x00, -/* 00009B20 */ 0x00, 0x5A, 0x03, 0x00, 0x00, 0xA0, 0x02, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 00009B30 */ 0x00, 0x55, 0x03, 0x00, 0x00, 0x5A, 0x03, 0x00, 0x00, 0x8C, 0x02, 0x00, 0x00, 0x03, 0x03, 0x00, -/* 00009B40 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x03, 0x00, 0x00, 0x55, 0x03, 0x00, 0x00, 0x5A, 0x03, 0x00, -/* 00009B50 */ 0x00, 0x80, 0x02, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x03, 0x00, -/* 00009B60 */ 0x00, 0x74, 0x02, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x03, 0x00, -/* 00009B70 */ 0x00, 0x68, 0x02, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4E, 0x03, 0x00, -/* 00009B80 */ 0x00, 0x5C, 0x02, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4E, 0x03, 0x00, -/* 00009B90 */ 0x00, 0x30, 0x02, 0x00, 0x00, 0x03, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x03, 0x00, -/* 00009BA0 */ 0x00, 0x50, 0x03, 0x00, 0x00, 0x51, 0x03, 0x00, 0x00, 0x54, 0x03, 0x00, 0x00, 0x57, 0x03, 0x00, -/* 00009BB0 */ 0x00, 0x5C, 0x03, 0x00, 0x00, 0x5D, 0x03, 0x00, 0x00, 0x5E, 0x03, 0x00, 0x00, 0x60, 0x03, 0x00, -/* 00009BC0 */ 0x00, 0x24, 0x02, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, -/* 00009BD0 */ 0x00, 0x18, 0x02, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, -/* 00009BE0 */ 0x00, 0x0C, 0x02, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, -/* 00009BF0 */ 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, -/* 00009C00 */ 0x00, 0xF4, 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0x01, 0x00, -/* 00009C10 */ 0x00, 0xDC, 0x01, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, -/* 00009C20 */ 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0xC4, 0x01, 0x00, -/* 00009C30 */ 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, -/* 00009C40 */ 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0xAC, 0x01, 0x00, 0x00, 0x03, 0x04, 0x00, -/* 00009C50 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, -/* 00009C60 */ 0x00, 0x81, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 00009C70 */ 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, -/* 00009C80 */ 0x00, 0x7C, 0x01, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, -/* 00009C90 */ 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x64, 0x01, 0x00, -/* 00009CA0 */ 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, -/* 00009CB0 */ 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x58, 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, -/* 00009CC0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0x01, 0x00, 0x00, 0x3C, 0x01, 0x00, 0x00, 0x03, 0x05, 0x00, -/* 00009CD0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x03, 0x00, 0x00, 0x37, 0x03, 0x00, 0x00, 0x38, 0x03, 0x00, -/* 00009CE0 */ 0x00, 0x39, 0x03, 0x00, 0x00, 0x3A, 0x03, 0x00, 0x00, 0x24, 0x01, 0x00, 0x00, 0x03, 0x04, 0x00, -/* 00009CF0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x2C, 0x03, 0x00, 0x00, 0x33, 0x03, 0x00, 0x00, 0x34, 0x03, 0x00, -/* 00009D00 */ 0x00, 0x35, 0x03, 0x00, 0x00, 0x0C, 0x01, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 00009D10 */ 0x00, 0x2C, 0x03, 0x00, 0x00, 0x30, 0x03, 0x00, 0x00, 0x31, 0x03, 0x00, 0x00, 0x32, 0x03, 0x00, -/* 00009D20 */ 0x00, 0xF4, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x03, 0x00, -/* 00009D30 */ 0x00, 0x2E, 0x03, 0x00, 0x00, 0x7B, 0x00, 0x00, 0x00, 0x2C, 0x03, 0x00, 0x00, 0xD8, 0x00, 0x00, -/* 00009D40 */ 0x00, 0x03, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x03, 0x00, 0x00, 0x29, 0x03, 0x00, -/* 00009D50 */ 0x00, 0x2A, 0x03, 0x00, 0x00, 0x2B, 0x03, 0x00, 0x00, 0x2C, 0x03, 0x00, 0x00, 0xC8, 0x00, 0x00, -/* 00009D60 */ 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0x03, 0x00, 0x00, 0x27, 0x03, 0x00, -/* 00009D70 */ 0x00, 0x3C, 0x00, 0x00, 0x00, 0x03, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x69, 0x01, 0x00, -/* 00009D80 */ 0x00, 0x63, 0x01, 0x00, 0x00, 0x22, 0x01, 0x00, 0x00, 0x45, 0x01, 0x00, 0x00, 0x4C, 0x01, 0x00, -/* 00009D90 */ 0x00, 0x0E, 0x03, 0x00, 0x00, 0xF1, 0x00, 0x00, 0x00, 0x29, 0x01, 0x00, 0x00, 0x86, 0x00, 0x00, -/* 00009DA0 */ 0x00, 0x18, 0x01, 0x00, 0x00, 0xBC, 0x00, 0x00, 0x00, 0x14, 0x03, 0x00, 0x00, 0xC5, 0x00, 0x00, -/* 00009DB0 */ 0x00, 0x1C, 0x01, 0x00, 0x00, 0x3F, 0x01, 0x00, 0x00, 0x5D, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, -/* 00009DC0 */ 0x00, 0x1A, 0x03, 0x00, 0x00, 0xBF, 0x00, 0x00, 0x00, 0xA7, 0x00, 0x00, 0x00, 0x88, 0x01, 0x00, -/* 00009DD0 */ 0x00, 0xB0, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x86, 0x01, 0x00, 0x00, 0x1B, 0x00, 0x00, -/* 00009DE0 */ 0x00, 0x23, 0x00, 0x00, 0x00, 0xEE, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0xB1, 0x00, 0x00, -/* 00009DF0 */ 0x00, 0xB4, 0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, 0x4D, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, -/* 00009E00 */ 0x00, 0x18, 0x00, 0x00, 0x00, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0x00, -/* 00009E10 */ 0x00, 0x03, 0x03, 0x00, 0x00, 0x04, 0x03, 0x00, 0x00, 0x05, 0x03, 0x00, 0x00, 0x06, 0x03, 0x00, -/* 00009E20 */ 0x00, 0x07, 0x03, 0x00, 0x00, 0x08, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, -/* 00009E30 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xEE, 0x00, 0x00, -/* 00009E40 */ 0x00, 0x29, 0x00, 0x00, 0x00, 0xAB, 0xFE, 0x61, 0x03, 0xFE, 0xFE, 0x01, 0xFE, 0xFE, 0x01, 0xFE, -/* 00009E50 */ 0x81, 0x02, 0xFE, 0x82, 0x02, 0xFE, 0x84, 0x02, 0x51, 0xFE, 0x02, 0x01, 0xFE, 0x28, 0x01, 0xFD, -/* 00009E60 */ 0xFE, 0x4A, 0x01, 0x63, 0x76, 0xFE, 0xD6, 0x01, 0xFE, 0x79, 0x02, 0x1B, 0xFE, 0x7A, 0x02, 0x23, -/* 00009E70 */ 0xFE, 0x7B, 0x02, 0xEE, 0xFE, 0x7C, 0x02, 0x29, 0xFE, 0x6A, 0x02, 0xFE, 0x6C, 0x02, 0xFE, 0x69, -/* 00009E80 */ 0x02, 0xFE, 0x6B, 0x02, 0xFE, 0x68, 0x02, 0xFE, 0x5C, 0x02, 0xFE, 0x5D, 0x02, 0xFE, 0x60, 0x02, -/* 00009E90 */ 0xFE, 0x5E, 0x02, 0xFE, 0x66, 0x02, 0xFE, 0x63, 0x02, 0xFE, 0x64, 0x02, 0xFE, 0x74, 0x02, 0xFE, -/* 00009EA0 */ 0x77, 0x02, 0xFE, 0x78, 0x02, 0xFE, 0x80, 0x02, 0xFE, 0x57, 0x02, 0xFE, 0x58, 0x02, 0xFE, 0x02, -/* 00009EB0 */ 0x03, 0xFE, 0x03, 0x03, 0xFE, 0x04, 0x03, 0xFE, 0x05, 0x03, 0xFE, 0x06, 0x03, 0xFE, 0x07, 0x03, -/* 00009EC0 */ 0xFE, 0x08, 0x03, 0xFE, 0x69, 0x01, 0xFE, 0x63, 0x01, 0xFE, 0x22, 0x01, 0xFE, 0x45, 0x01, 0xFE, -/* 00009ED0 */ 0x4C, 0x01, 0xFE, 0x0E, 0x03, 0xF1, 0xFE, 0x29, 0x01, 0x86, 0xFE, 0x18, 0x01, 0xBC, 0xFE, 0x14, -/* 00009EE0 */ 0x03, 0xC5, 0xFE, 0x1C, 0x01, 0xFE, 0x3F, 0x01, 0x5D, 0x7E, 0xFE, 0x1A, 0x03, 0xFE, 0x6D, 0x02, -/* 00009EF0 */ 0xBF, 0xA7, 0xFE, 0x88, 0x01, 0xFE, 0x6C, 0x02, 0xB0, 0x61, 0xFE, 0x86, 0x01, 0xFE, 0x79, 0x02, -/* 00009F00 */ 0x1B, 0x23, 0xFE, 0x7B, 0x02, 0xEE, 0xFE, 0x7C, 0x02, 0x29, 0xFE, 0x57, 0x02, 0xB1, 0xFE, 0x58, -/* 00009F10 */ 0x02, 0xB4, 0x8D, 0x4D, 0x48, 0xFE, 0x26, 0x03, 0xFE, 0x27, 0x03, 0xFE, 0x28, 0x03, 0xFE, 0x29, -/* 00009F20 */ 0x03, 0xFE, 0x2A, 0x03, 0xFE, 0x2B, 0x03, 0xFE, 0x2C, 0x03, 0xFE, 0x2D, 0x03, 0xFE, 0x2E, 0x03, -/* 00009F30 */ 0x7B, 0xFE, 0x30, 0x03, 0xFE, 0x31, 0x03, 0xFE, 0x32, 0x03, 0xFE, 0x33, 0x03, 0xFE, 0x34, 0x03, -/* 00009F40 */ 0xFE, 0x35, 0x03, 0xFE, 0x36, 0x03, 0xFE, 0x37, 0x03, 0xFE, 0x38, 0x03, 0xFE, 0x39, 0x03, 0xFE, -/* 00009F50 */ 0x3A, 0x03, 0x61, 0xFE, 0xF0, 0x01, 0xFE, 0xF6, 0x01, 0x4D, 0xFE, 0x88, 0x01, 0xFE, 0x83, 0x01, -/* 00009F60 */ 0xFE, 0x82, 0x01, 0xFE, 0x80, 0x01, 0xFE, 0x81, 0x01, 0xFE, 0x62, 0x03, 0xFE, 0x62, 0x03, 0xFE, -/* 00009F70 */ 0x63, 0x03, 0xFE, 0x63, 0x03, 0xFE, 0xF6, 0x01, 0xFE, 0x83, 0x01, 0xFE, 0x4E, 0x03, 0xFE, 0x4D, -/* 00009F80 */ 0x03, 0xFE, 0x50, 0x03, 0xFE, 0x52, 0x03, 0xFE, 0x51, 0x03, 0xFE, 0x55, 0x03, 0xFE, 0x54, 0x03, -/* 00009F90 */ 0xFE, 0x58, 0x03, 0xFE, 0x5A, 0x03, 0xFE, 0x57, 0x03, 0xFE, 0x5C, 0x03, 0xFE, 0x5D, 0x03, 0xFE, -/* 00009FA0 */ 0x5F, 0x03, 0xFE, 0x5E, 0x03, 0xFE, 0x60, 0x03, 0xFE, 0x82, 0x01, 0xFE, 0x80, 0x01, 0xFE, 0x81, -/* 00009FB0 */ 0x01, 0xAB, 0x03, 0x03, 0x18, 0x00, 0xFE, 0x64, 0x03, 0x01, 0xFE, 0x65, 0x03, 0x02, 0xFE, 0x66, -/* 00009FC0 */ 0x03, 0x03, 0xFE, 0x67, 0x03, 0x04, 0xFE, 0x68, 0x03, 0x05, 0xFE, 0x69, 0x03, 0x06, 0xFE, 0x6A, -/* 00009FD0 */ 0x03, 0x07, 0xFE, 0x6B, 0x03, 0x08, 0xFE, 0x6C, 0x03, 0x09, 0xFE, 0x6D, 0x03, 0x0A, 0xFE, 0x6E, -/* 00009FE0 */ 0x03, 0x0B, 0xFE, 0x6F, 0x03, 0x0C, 0xFE, 0x70, 0x03, 0x0D, 0xFE, 0x71, 0x03, 0x0E, 0xFE, 0x72, -/* 00009FF0 */ 0x03, 0x0F, 0xFE, 0x73, 0x03, 0x10, 0xFE, 0x74, 0x03, 0x11, 0xFE, 0x75, 0x03, 0x12, 0xFE, 0x76, -/* 0000A000 */ 0x03, 0x13, 0xFE, 0x77, 0x03, 0x14, 0xFE, 0x78, 0x03, 0x15, 0xFE, 0x79, 0x03, 0x16, 0xFE, 0x7A, -/* 0000A010 */ 0x03, 0x17, 0xFE, 0x7B, 0x03, 0x05, 0x01, 0x00, 0xFE, 0x7C, 0x03, 0x07, 0x18, 0x00, 0xFE, 0x64, -/* 0000A020 */ 0x03, 0x01, 0xFE, 0x6E, 0x03, 0x02, 0xFE, 0x65, 0x03, 0x03, 0xFE, 0x7D, 0x03, 0x04, 0xFE, 0x71, -/* 0000A030 */ 0x03, 0x05, 0xFE, 0x73, 0x03, 0x06, 0xFE, 0x74, 0x03, 0x07, 0xFE, 0x66, 0x03, 0x08, 0xFE, 0x67, -/* 0000A040 */ 0x03, 0x09, 0xFE, 0x7E, 0x03, 0x0A, 0xFE, 0x7F, 0x03, 0x0B, 0xFE, 0x80, 0x03, 0x0C, 0xFE, 0x6F, -/* 0000A050 */ 0x03, 0x0D, 0xFE, 0x81, 0x03, 0x0E, 0xFE, 0x82, 0x03, 0x0F, 0xFE, 0x83, 0x03, 0x10, 0xFE, 0x84, -/* 0000A060 */ 0x03, 0x11, 0xFE, 0x85, 0x03, 0x12, 0xFE, 0x86, 0x03, 0x13, 0xFE, 0x87, 0x03, 0x14, 0xFE, 0x88, -/* 0000A070 */ 0x03, 0x15, 0xFE, 0x89, 0x03, 0x16, 0xFE, 0x7C, 0x03, 0x17, 0xFE, 0x8A, 0x03, 0xFE, 0xBB, 0x01, -/* 0000A080 */ 0x8C, 0x66, 0x00, 0x00, 0x00, 0x07, 0x00, 0xA4, 0x00, 0x07, 0x00, 0xB7, 0x00, 0x12, 0x00, 0x32, -/* 0000A090 */ 0x00, 0x0A, 0x00, 0x47, 0x00, 0x03, 0x00, 0x35, 0x00, 0x0A, 0x00, 0x35, 0x00, 0x0A, 0x00, 0x39, -/* 0000A0A0 */ 0x00, 0x0A, 0x00, 0x83, 0x00, 0x06, 0x00, 0x4A, 0x04, 0x0A, 0x00, 0x24, 0x00, 0x0A, 0x00, 0x22, -/* 0000A0B0 */ 0x00, 0x0A, 0x00, 0x22, 0x00, 0x0A, 0x00, 0x22, 0x00, 0x0A, 0x00, 0x22, 0x00, 0x0A, 0x00, 0x1E, -/* 0000A0C0 */ 0x00, 0x0A, 0x00, 0x21, 0x00, 0x0A, 0x00, 0x2D, 0x00, 0x52, 0x00, 0xC8, 0x00, 0x0A, 0x00, 0x54, -/* 0000A0D0 */ 0x00, 0x0A, 0x00, 0x50, 0x00, 0x0A, 0x00, 0x5E, 0x00, 0x0A, 0x00, 0x02, 0x01, 0x0A, 0x00, 0x55, -/* 0000A0E0 */ 0x00, 0x06, 0x00, 0x94, 0x00, 0x0A, 0x00, 0x4C, 0x00, 0x0A, 0x00, 0x4C, 0x00, 0x0A, 0x00, 0x46, -/* 0000A0F0 */ 0x00, 0x0A, 0x00, 0x47, 0x00, 0x0A, 0x00, 0x4C, 0x00, 0x0A, 0x00, 0x4A, 0x00, 0x0A, 0x00, 0x3B, -/* 0000A100 */ 0x00, 0x0A, 0x00, 0x4E, 0x00, 0x0A, 0x00, 0x56, 0x00, 0x0A, 0x00, 0x57, 0x00, 0x0A, 0x00, 0x36, -/* 0000A110 */ 0x00, 0x0A, 0x00, 0x3E, 0x00, 0x0A, 0x00, 0xA4, 0x00, 0x42, 0x00, 0x05, 0x01, 0x2D, 0x01, 0x7A, -/* 0000A120 */ 0x0D, 0x20, 0x00, 0x6F, 0x01, 0x37, 0x00, 0x8B, 0x00, 0x33, 0x00, 0x76, 0x00, 0x33, 0x00, 0x5B, -/* 0000A130 */ 0x01, 0x33, 0x00, 0xD2, 0x01, 0x06, 0x00, 0x36, 0x03, 0xA6, 0x00, 0x1F, 0x00, 0x06, 0x00, 0x25, -/* 0000A140 */ 0x00, 0x0D, 0x00, 0x4E, 0x02, 0x0C, 0x00, 0x9A, 0x00, 0x0C, 0x00, 0x19, 0x02, 0x0D, 0x00, 0xCD, -/* 0000A150 */ 0x06, 0x0D, 0x00, 0x09, 0x03, 0x0D, 0x00, 0x23, 0x03, 0x08, 0x00, 0x77, 0x01, 0x0D, 0x00, 0x75, -/* 0000A160 */ 0x07, 0x0D, 0x00, 0xA3, 0x09, 0x69, 0x00, 0x51, 0x09, 0x0D, 0x00, 0xE1, 0x01, 0x06, 0x00, 0x60, -/* 0000A170 */ 0x01, 0x1A, 0x00, 0xC8, 0x1B, 0x0D, 0x00, 0x6B, 0x03, 0x0D, 0x00, 0xB4, 0x04, 0x0D, 0x00, 0x8F, -/* 0000A180 */ 0x06, 0x0D, 0x00, 0xA7, 0x01, 0x08, 0x00, 0xDA, 0x02, 0x0D, 0x00, 0x74, 0x06, 0x0D, 0x00, 0xE8, -/* 0000A190 */ 0x04, 0x18, 0x00, 0x30, 0x00, 0x2C, 0x00, 0x4D, 0x00, 0x0D, 0x00, 0x1B, 0x02, 0x0D, 0x00, 0x3C, -/* 0000A1A0 */ 0x05, 0x15, 0x00, 0x23, 0x00, 0x04, 0x00, 0x45, 0x00, 0x2D, 0x00, 0xD7, 0x00, 0x21, 0x00, 0x5F, -/* 0000A1B0 */ 0x00, 0x37, 0x00, 0xCA, 0x00, 0x3D, 0x00, 0x25, 0x03, 0x0D, 0x00, 0x8C, 0x02, 0x19, 0x00, 0x68, -/* 0000A1C0 */ 0x22, 0x19, 0x00, 0xA7, 0x25, 0x19, 0x00, 0x02, 0x6E, 0x19, 0x00, 0xAB, 0x16, 0x0B, 0x00, 0x23, -/* 0000A1D0 */ 0x00, 0x3D, 0x00, 0x92, 0x00, 0x3D, 0x00, 0x92, 0x00, 0x3D, 0x00, 0x92, 0x00, 0xF3, 0x00, 0x29, -/* 0000A1E0 */ 0x01, 0x11, 0x00, 0x38, 0x00, 0x14, 0x00, 0x38, 0x00, 0x11, 0x00, 0x39, 0x00, 0x14, 0x00, 0x3A, -/* 0000A1F0 */ 0x00, 0x06, 0x00, 0x25, 0x00, 0x0D, 0x00, 0xE9, 0x01, 0x0D, 0x00, 0x0C, 0x02, 0x0D, 0x00, 0x90, -/* 0000A200 */ 0x01, 0x0C, 0x00, 0x58, 0x01, 0x0C, 0x00, 0x9A, 0x00, 0x0C, 0x00, 0x70, 0x00, 0x0C, 0x00, 0xA7, -/* 0000A210 */ 0x04, 0x0C, 0x00, 0x93, 0x04, 0x0C, 0x00, 0x31, 0x04, 0x0C, 0x00, 0xB1, 0x09, 0x0C, 0x00, 0xEF, -/* 0000A220 */ 0x02, 0x06, 0x00, 0x2D, 0x00, 0x0C, 0x00, 0x93, 0x03, 0x19, 0x00, 0x89, 0x0A, 0x06, 0x00, 0x75, -/* 0000A230 */ 0x00, 0x06, 0x00, 0x38, 0x00, 0x06, 0x00, 0x4C, 0x00, 0x06, 0x00, 0x83, 0x1C, 0x0C, 0x00, 0xC0, -/* 0000A240 */ 0x01, 0x0C, 0x00, 0xDF, 0x01, 0x0C, 0x00, 0x80, 0x03, 0x1B, 0x00, 0x3C, 0x00, 0x3E, 0x00, 0x25, -/* 0000A250 */ 0x01, 0x04, 0x00, 0x51, 0x00, 0x43, 0x00, 0x69, 0x01, 0x04, 0x00, 0x59, 0x00, 0x43, 0x00, 0x79, -/* 0000A260 */ 0x01, 0x04, 0x00, 0x5D, 0x00, 0x43, 0x00, 0x81, 0x01, 0x04, 0x00, 0x41, 0x00, 0x42, 0x00, 0xAD, -/* 0000A270 */ 0x02, 0x2B, 0x00, 0x60, 0x00, 0x2B, 0x00, 0x64, 0x00, 0x2B, 0x00, 0x66, 0x00, 0x27, 0x00, 0x49, -/* 0000A280 */ 0x01, 0xC1, 0x01, 0x51, 0x05, 0x19, 0x00, 0xCA, 0x03, 0x06, 0x00, 0x2B, 0x00, 0x0C, 0x00, 0x3B, -/* 0000A290 */ 0x09, 0x19, 0x00, 0xF3, 0x30, 0x19, 0x00, 0x5E, 0x32, 0x19, 0x00, 0x79, 0x7A, 0x0B, 0x00, 0x23, -/* 0000A2A0 */ 0x00, 0x39, 0x00, 0x7C, 0x00, 0x39, 0x00, 0x84, 0x00, 0x39, 0x00, 0x88, 0x00, 0x3B, 0x00, 0xA6, -/* 0000A2B0 */ 0x00, 0x00, 0xAD, 0xAD, 0x01, 0x00, 0x76, 0xAB, 0x01, 0x00, 0x0C, 0xAB, 0x01, 0x00, 0xAD, 0xAA, -/* 0000A2C0 */ 0x01, 0x00, 0x4E, 0xAA, 0x01, 0x00, 0xE9, 0xA9, 0x01, 0x00, 0x7C, 0xA9, 0x01, 0x00, 0x0C, 0xA9, -/* 0000A2D0 */ 0x01, 0x00, 0x9C, 0xA8, 0x01, 0x00, 0x37, 0xA8, 0x01, 0x00, 0xCA, 0xA7, 0x01, 0x00, 0x68, 0xA7, -/* 0000A2E0 */ 0x01, 0x00, 0xEC, 0xA6, 0x01, 0x00, 0x8A, 0xA6, 0x01, 0x00, 0x25, 0xA6, 0x01, 0x00, 0xB8, 0xA5, -/* 0000A2F0 */ 0x01, 0x00, 0x48, 0xA5, 0x01, 0x00, 0xD8, 0xA4, 0x01, 0x00, 0x51, 0xA4, 0x01, 0x00, 0xE4, 0xA3, -/* 0000A300 */ 0x01, 0x00, 0x03, 0xA3, 0x01, 0x00, 0x96, 0xA2, 0x01, 0x00, 0x0F, 0xA2, 0x01, 0x00, 0x9F, 0xA1, -/* 0000A310 */ 0x01, 0x00, 0x2C, 0xA1, 0x01, 0x00, 0xB7, 0xA0, 0x01, 0x00, 0x4D, 0xA0, 0x01, 0x00, 0xE0, 0x9F, -/* 0000A320 */ 0x01, 0x00, 0x70, 0x9F, 0x01, 0x00, 0xC4, 0x9E, 0x01, 0x00, 0x37, 0x9E, 0x01, 0x00, 0xCA, 0x9D, -/* 0000A330 */ 0x01, 0x00, 0x11, 0x9D, 0x01, 0x00, 0xA3, 0x9C, 0x01, 0x00, 0x44, 0x9C, 0x01, 0x00, 0xEC, 0x9A, -/* 0000A340 */ 0x01, 0x00, 0xEA, 0x99, 0x01, 0x00, 0x93, 0x98, 0x01, 0x00, 0x75, 0x96, 0x01, 0x00, 0xFA, 0x91, -/* 0000A350 */ 0x01, 0x00, 0x62, 0x91, 0x01, 0x00, 0xF4, 0x90, 0x01, 0x00, 0x86, 0x90, 0x01, 0x00, 0x18, 0x90, -/* 0000A360 */ 0x01, 0x00, 0x35, 0x8F, 0x01, 0x00, 0x83, 0x8D, 0x01, 0x00, 0x53, 0x8C, 0x01, 0x00, 0x07, 0x8C, -/* 0000A370 */ 0x01, 0x00, 0x18, 0x85, 0x01, 0x00, 0x6A, 0x84, 0x01, 0x00, 0xFD, 0x81, 0x01, 0x00, 0x83, 0x7F, -/* 0000A380 */ 0x01, 0x00, 0x46, 0x7E, 0x01, 0x00, 0x43, 0x7C, 0x01, 0x00, 0x39, 0x7A, 0x01, 0x00, 0x3D, 0x79, -/* 0000A390 */ 0x01, 0x00, 0x5A, 0x78, 0x01, 0x00, 0xF6, 0x77, 0x01, 0x00, 0x65, 0x76, 0x01, 0x00, 0x6F, 0x66, -/* 0000A3A0 */ 0x01, 0x00, 0xA0, 0x54, 0x01, 0x00, 0xFA, 0x2A, 0x01, 0x00, 0x99, 0x20, 0x01, 0x00, 0xD8, 0x1F, -/* 0000A3B0 */ 0x01, 0x00, 0x32, 0x1F, 0x01, 0x00, 0x48, 0x1E, 0x01, 0x00, 0xB8, 0x1D, 0x01, 0x00, 0x42, 0x1D, -/* 0000A3C0 */ 0x01, 0x00, 0xDB, 0x1C, 0x01, 0x00, 0xF9, 0x1A, 0x01, 0x00, 0x46, 0x19, 0x01, 0x00, 0x00, 0x18, -/* 0000A3D0 */ 0x01, 0x00, 0x54, 0x14, 0x01, 0x00, 0x11, 0x13, 0x01, 0x00, 0xC1, 0x11, 0x01, 0x00, 0x36, 0x0D, -/* 0000A3E0 */ 0x01, 0x00, 0x88, 0x0B, 0x01, 0x00, 0x4B, 0x0A, 0x01, 0x00, 0xF9, 0x09, 0x01, 0x00, 0x4F, 0x06, -/* 0000A3F0 */ 0x01, 0x00, 0x9B, 0x05, 0x01, 0x00, 0x18, 0x03, 0x01, 0x00, 0xC7, 0x00, 0x01, 0x00, 0xDF, 0xFF, -/* 0000A400 */ 0x00, 0x00, 0xF8, 0xFE, 0x00, 0x00, 0x57, 0xFD, 0x00, 0x00, 0xDB, 0xFC, 0x00, 0x00, 0x5F, 0xFC, -/* 0000A410 */ 0x00, 0x00, 0xE3, 0xFB, 0x00, 0x00, 0x78, 0xFB, 0x00, 0x00, 0x8A, 0xF9, 0x00, 0x00, 0x84, 0xF6, -/* 0000A420 */ 0x00, 0x00, 0x60, 0xE3, 0x00, 0x00, 0x69, 0xD0, 0x00, 0x00, 0x2E, 0xA4, 0x00, 0x00, 0x3F, 0x5D, -/* 0000A430 */ 0x00, 0xC1, 0x53, 0xAD, 0x25, 0x01, 0xFE, 0xD5, 0x0C, 0x1A, 0xA0, 0x41, 0xD1, 0x00, 0xB7, 0xFF, -/* 0000A440 */ 0x76, 0x4C, 0x02, 0x00, 0x0F, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFF, 0x76, 0x4C, 0x02, -/* 0000A450 */ 0x00, 0xFE, 0x28, 0x7A, 0xFE, 0x28, 0x7A, 0x01, 0xFE, 0xD5, 0x04, 0x15, 0x36, 0x44, 0x09, 0xEE, -/* 0000A460 */ 0xED, 0x02, 0x09, 0x19, 0x19, 0x19, 0x19, 0x07, 0x02, 0x41, 0x42, 0x43, 0x44, 0x08, 0x06, 0xFE, -/* 0000A470 */ 0x3D, 0x03, 0x06, 0xFE, 0x41, 0x04, 0x06, 0xFE, 0xD6, 0x04, 0x05, 0xFE, 0xD7, 0x04, 0x06, 0xFE, -/* 0000A480 */ 0xD8, 0x04, 0x05, 0xFE, 0xD9, 0x04, 0x06, 0xFE, 0xDA, 0x04, 0x05, 0xFE, 0xDB, 0x04, 0x06, 0xFE, -/* 0000A490 */ 0xDC, 0x04, 0x05, 0xFE, 0xDD, 0x04, 0x06, 0xFE, 0xDE, 0x04, 0x05, 0xFE, 0xDF, 0x04, 0x06, 0xFE, -/* 0000A4A0 */ 0xE0, 0x04, 0x05, 0xFE, 0xE1, 0x04, 0x06, 0xFE, 0xE2, 0x04, 0x05, 0xFE, 0xE3, 0x04, 0x06, 0xFE, -/* 0000A4B0 */ 0xE4, 0x04, 0x05, 0xFE, 0xE5, 0x04, 0x06, 0xFE, 0xE6, 0x04, 0x05, 0xFE, 0xE7, 0x04, 0x07, 0x06, -/* 0000A4C0 */ 0xFE, 0x4F, 0x04, 0x01, 0x00, 0x06, 0xFE, 0x50, 0x04, 0x01, 0x01, 0x06, 0xFE, 0x51, 0x04, 0x01, -/* 0000A4D0 */ 0x02, 0x05, 0xFE, 0x52, 0x04, 0x05, 0xFE, 0x53, 0x04, 0x06, 0xFE, 0x54, 0x04, 0x05, 0xFE, 0x55, -/* 0000A4E0 */ 0x04, 0x06, 0xFE, 0x56, 0x04, 0x05, 0xFE, 0x57, 0x04, 0x05, 0xFE, 0x58, 0x04, 0x05, 0xFE, 0x59, -/* 0000A4F0 */ 0x04, 0x05, 0xFE, 0x5A, 0x04, 0x06, 0xFE, 0xB3, 0x03, 0x06, 0xFE, 0xB4, 0x03, 0x06, 0xFE, 0x0B, -/* 0000A500 */ 0x04, 0x06, 0xFE, 0x40, 0x03, 0x06, 0xFE, 0x42, 0x03, 0x0C, 0x06, 0xFE, 0x43, 0x03, 0x06, 0xFE, -/* 0000A510 */ 0x44, 0x03, 0x06, 0xFE, 0x0C, 0x04, 0x0B, 0x06, 0xFE, 0x26, 0x04, 0x06, 0xFE, 0x8D, 0x03, 0x05, -/* 0000A520 */ 0xFE, 0x25, 0x04, 0x06, 0xFE, 0x0D, 0x04, 0x06, 0xFE, 0x4C, 0x03, 0xFE, 0xA0, 0x03, 0x4F, 0x40, -/* 0000A530 */ 0xA6, 0x36, 0xA6, 0x37, 0xA6, 0x38, 0xA6, 0x39, 0xA6, 0x3A, 0xA6, 0x3B, 0xA6, 0x3C, 0xA6, 0x3D, -/* 0000A540 */ 0xA6, 0x3E, 0xA6, 0x3F, 0x8C, 0x02, 0x32, 0x46, 0x14, 0x0C, 0x00, 0x46, 0x03, 0x8C, 0x02, 0x32, -/* 0000A550 */ 0x46, 0x14, 0x03, 0x00, 0x46, 0x04, 0x09, 0x6C, 0x03, 0xDE, 0x00, 0x0B, 0x01, 0xB6, 0x46, 0x00, -/* 0000A560 */ 0x01, 0x53, 0x01, 0x00, 0x36, 0x46, 0x93, 0x00, 0x02, 0x36, 0x01, 0x53, 0x01, 0x01, 0x37, 0x46, -/* 0000A570 */ 0x93, 0x00, 0x03, 0x37, 0x01, 0x53, 0x01, 0x02, 0x38, 0x46, 0x93, 0x00, 0x04, 0x38, 0x01, 0x53, -/* 0000A580 */ 0x01, 0x03, 0x39, 0x46, 0x93, 0x00, 0x05, 0x39, 0x01, 0x53, 0x01, 0x04, 0x3A, 0x46, 0x93, 0x00, -/* 0000A590 */ 0x06, 0x3A, 0x01, 0x53, 0x01, 0x05, 0x3B, 0x46, 0x93, 0x00, 0x07, 0x3B, 0x01, 0x53, 0x01, 0x06, -/* 0000A5A0 */ 0x3C, 0x46, 0x93, 0x00, 0x08, 0x3C, 0x01, 0x53, 0x01, 0x07, 0x3D, 0x46, 0x93, 0x00, 0x09, 0x3D, -/* 0000A5B0 */ 0x4F, 0x46, 0x93, 0x00, 0x0A, 0x46, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, -/* 0000A5C0 */ 0x00, 0x00, 0x00, 0x78, 0x06, 0x46, 0x00, 0x78, 0x08, 0x46, 0x01, 0x78, 0x0A, 0x46, 0x02, 0x78, -/* 0000A5D0 */ 0x0C, 0x46, 0x03, 0x78, 0x0E, 0x46, 0x04, 0x78, 0x10, 0x46, 0x05, 0x78, 0x12, 0x46, 0x06, 0x78, -/* 0000A5E0 */ 0x14, 0x46, 0x07, 0x78, 0x16, 0x46, 0x08, 0x94, 0x02, 0x46, 0xCC, 0x46, 0x03, 0xA6, 0x47, 0x9F, -/* 0000A5F0 */ 0x00, 0x47, 0x46, 0xA6, 0x47, 0x9F, 0x01, 0x47, 0x46, 0xA6, 0x47, 0x9F, 0x02, 0x47, 0x46, 0x93, -/* 0000A600 */ 0x00, 0x0A, 0x46, 0x8C, 0x02, 0x04, 0x46, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0x2C, 0x00, -/* 0000A610 */ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0x78, 0x19, 0x47, 0x09, 0x78, 0x1B, -/* 0000A620 */ 0x47, 0x0A, 0x78, 0x1D, 0x47, 0x0B, 0x5A, 0x01, 0x47, 0x5A, 0x02, 0x17, 0x1F, 0x03, 0x46, 0x46, -/* 0000A630 */ 0x47, 0x40, 0x46, 0xB6, 0x47, 0x00, 0x01, 0x53, 0x01, 0x08, 0x46, 0x47, 0x07, 0x06, 0x00, 0x5A, -/* 0000A640 */ 0x00, 0x02, 0x5A, 0x01, 0x1E, 0x5A, 0x02, 0x1F, 0x5A, 0x03, 0x20, 0x5F, 0x47, 0x40, 0x0C, 0x5A, -/* 0000A650 */ 0x04, 0x47, 0x8C, 0x02, 0x36, 0x47, 0x4B, 0x47, 0x5F, 0x47, 0x47, 0x0D, 0x5A, 0x05, 0x47, 0x1F, -/* 0000A660 */ 0x06, 0xFF, 0x46, 0xB6, 0x47, 0x00, 0x01, 0x53, 0x01, 0x09, 0x46, 0x47, 0x07, 0x06, 0x00, 0x5A, -/* 0000A670 */ 0x00, 0x02, 0x5A, 0x01, 0x21, 0x5A, 0x02, 0x22, 0x5A, 0x03, 0x22, 0x5F, 0x47, 0x40, 0x0E, 0x5A, -/* 0000A680 */ 0x04, 0x47, 0x8C, 0x02, 0x36, 0x47, 0x4B, 0x47, 0x5F, 0x47, 0x47, 0x0F, 0x5A, 0x05, 0x47, 0x1F, -/* 0000A690 */ 0x06, 0xFF, 0x46, 0xB6, 0x47, 0x00, 0x01, 0x53, 0x01, 0x0A, 0x46, 0x47, 0x07, 0x06, 0x00, 0x5A, -/* 0000A6A0 */ 0x00, 0x02, 0x5A, 0x01, 0x23, 0x5A, 0x02, 0x24, 0x5A, 0x03, 0x24, 0x5F, 0x47, 0x40, 0x10, 0x5A, -/* 0000A6B0 */ 0x04, 0x47, 0x8C, 0x02, 0x36, 0x47, 0x4B, 0x47, 0x5F, 0x47, 0x47, 0x11, 0x5A, 0x05, 0x47, 0x1F, -/* 0000A6C0 */ 0x06, 0xFF, 0x46, 0x8C, 0x02, 0x32, 0x46, 0x14, 0x03, 0x00, 0x46, 0x03, 0x09, 0xF6, 0x01, 0xDE, -/* 0000A6D0 */ 0x01, 0x04, 0x03, 0xB6, 0x46, 0x00, 0xB5, 0x01, 0x00, 0x00, 0x00, 0x46, 0x46, 0x01, 0x53, 0x01, -/* 0000A6E0 */ 0x0B, 0x3E, 0x46, 0x93, 0x01, 0x02, 0x3E, 0x01, 0x53, 0x01, 0x0C, 0x3F, 0x46, 0x93, 0x01, 0x03, -/* 0000A6F0 */ 0x3F, 0x8C, 0x02, 0x23, 0x46, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x25, 0x8E, 0x01, -/* 0000A700 */ 0x02, 0x47, 0x5A, 0x02, 0x47, 0x1F, 0x03, 0xFF, 0x46, 0x8C, 0x02, 0x23, 0x46, 0x07, 0x03, 0x00, -/* 0000A710 */ 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x26, 0x8E, 0x01, 0x03, 0x47, 0x5A, 0x02, 0x47, 0x1F, 0x03, 0xFF, -/* 0000A720 */ 0x46, 0x8E, 0x01, 0x02, 0x46, 0xCC, 0x47, 0x02, 0x9F, 0x00, 0x27, 0x47, 0x9F, 0x01, 0x28, 0x47, -/* 0000A730 */ 0x74, 0x47, 0x46, 0x12, 0x8C, 0x02, 0x15, 0x46, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8E, 0x01, -/* 0000A740 */ 0x02, 0x47, 0x5A, 0x01, 0x47, 0x5A, 0x02, 0x29, 0xCB, 0x40, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, -/* 0000A750 */ 0x00, 0x47, 0x00, 0x00, 0x00, 0x8E, 0x01, 0x02, 0x48, 0x07, 0x01, 0x00, 0xC1, 0x01, 0x48, 0x48, -/* 0000A760 */ 0x78, 0x48, 0x47, 0x13, 0x78, 0x2C, 0x47, 0x14, 0x78, 0x2C, 0x47, 0x15, 0x78, 0x2C, 0x47, 0x16, -/* 0000A770 */ 0x5A, 0x03, 0x47, 0x1F, 0x04, 0xFF, 0x46, 0x8C, 0x02, 0x04, 0x46, 0x07, 0x03, 0x00, 0x5A, 0x00, -/* 0000A780 */ 0x02, 0x8E, 0x01, 0x02, 0x47, 0x5F, 0x47, 0x47, 0x17, 0x5A, 0x01, 0x47, 0x8C, 0x02, 0x08, 0x47, -/* 0000A790 */ 0x5F, 0x47, 0x47, 0x17, 0x5A, 0x02, 0x47, 0x1F, 0x03, 0xFF, 0x46, 0x8C, 0x02, 0x15, 0x46, 0x07, -/* 0000A7A0 */ 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8E, 0x01, 0x02, 0x47, 0x5F, 0x47, 0x47, 0x17, 0x5A, 0x01, 0x47, -/* 0000A7B0 */ 0x5A, 0x02, 0x2F, 0xCB, 0x58, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, -/* 0000A7C0 */ 0x8E, 0x01, 0x02, 0x48, 0x78, 0x48, 0x47, 0x13, 0x78, 0x30, 0x47, 0x14, 0x78, 0x2C, 0x47, 0x15, -/* 0000A7D0 */ 0x78, 0x30, 0x47, 0x16, 0x5A, 0x03, 0x47, 0x1F, 0x04, 0xFF, 0x46, 0x8C, 0x02, 0x15, 0x46, 0x07, -/* 0000A7E0 */ 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8E, 0x01, 0x02, 0x47, 0x5F, 0x47, 0x47, 0x17, 0x5A, 0x01, 0x47, -/* 0000A7F0 */ 0x5A, 0x02, 0x31, 0xCB, 0x70, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, -/* 0000A800 */ 0x8C, 0x02, 0x23, 0x48, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x33, 0xB6, 0x4A, 0x00, -/* 0000A810 */ 0xB5, 0x01, 0x00, 0x00, 0x00, 0x4A, 0x4A, 0x01, 0x53, 0x01, 0x0D, 0x49, 0x4A, 0x5A, 0x02, 0x49, -/* 0000A820 */ 0x1F, 0x03, 0x48, 0x48, 0x78, 0x48, 0x47, 0x18, 0x78, 0x2C, 0x47, 0x15, 0x78, 0x30, 0x47, 0x16, -/* 0000A830 */ 0x5A, 0x03, 0x47, 0x1F, 0x04, 0xFF, 0x46, 0x8C, 0x02, 0x15, 0x46, 0x07, 0x04, 0x00, 0x5A, 0x00, -/* 0000A840 */ 0x02, 0x8E, 0x01, 0x02, 0x47, 0x5F, 0x47, 0x47, 0x17, 0x5A, 0x01, 0x47, 0x5A, 0x02, 0x34, 0xCB, -/* 0000A850 */ 0x84, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0xB6, 0x49, 0x00, 0xB5, -/* 0000A860 */ 0x01, 0x00, 0x00, 0x00, 0x49, 0x49, 0x01, 0x57, 0x01, 0x0E, 0x48, 0x49, 0x47, 0x78, 0x48, 0x47, -/* 0000A870 */ 0x13, 0x78, 0x30, 0x47, 0x14, 0x78, 0x2C, 0x47, 0x15, 0x78, 0x30, 0x47, 0x16, 0x5A, 0x03, 0x47, -/* 0000A880 */ 0x1F, 0x04, 0xFF, 0x46, 0x8C, 0x02, 0x15, 0x46, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8E, 0x01, -/* 0000A890 */ 0x02, 0x47, 0x5A, 0x01, 0x47, 0x5A, 0x02, 0x35, 0xCB, 0x9C, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, -/* 0000A8A0 */ 0x00, 0x47, 0x00, 0x00, 0x00, 0x8C, 0x01, 0x17, 0x48, 0x4B, 0x48, 0x78, 0x48, 0x47, 0x13, 0x78, -/* 0000A8B0 */ 0x30, 0x47, 0x14, 0x78, 0x30, 0x47, 0x16, 0x5A, 0x03, 0x47, 0x1F, 0x04, 0xFF, 0x46, 0x8E, 0x01, -/* 0000A8C0 */ 0x02, 0x00, 0x09, 0x07, 0x00, 0xA6, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x07, 0xB0, -/* 0000A8D0 */ 0x00, 0x9C, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, -/* 0000A8E0 */ 0x00, 0x82, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, -/* 0000A8F0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, -/* 0000A900 */ 0x00, 0x81, 0x01, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 0000A910 */ 0x00, 0x84, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x58, 0x00, 0x00, -/* 0000A920 */ 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, -/* 0000A930 */ 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, -/* 0000A940 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, -/* 0000A950 */ 0x00, 0x81, 0x01, 0x00, 0x00, 0x2C, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 0000A960 */ 0x00, 0x60, 0x01, 0x00, 0x00, 0x5E, 0x01, 0x00, 0x00, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 0000A970 */ 0x00, 0x03, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD6, 0x04, 0x00, 0x00, 0xD8, 0x04, 0x00, -/* 0000A980 */ 0x00, 0xDA, 0x04, 0x00, 0x00, 0xDC, 0x04, 0x00, 0x00, 0xDE, 0x04, 0x00, 0x00, 0xE0, 0x04, 0x00, -/* 0000A990 */ 0x00, 0xE2, 0x04, 0x00, 0x00, 0xE4, 0x04, 0x00, 0x00, 0xE6, 0x04, 0x00, 0x00, 0xFE, 0xD6, 0x04, -/* 0000A9A0 */ 0xFE, 0xD8, 0x04, 0xFE, 0xDA, 0x04, 0xFE, 0xDC, 0x04, 0xFE, 0xDE, 0x04, 0xFE, 0xE0, 0x04, 0xFE, -/* 0000A9B0 */ 0xE2, 0x04, 0xFE, 0xE4, 0x04, 0xFE, 0xE6, 0x04, 0xFE, 0x60, 0x01, 0xFE, 0x5E, 0x01, 0xFE, 0x61, -/* 0000A9C0 */ 0x01, 0xFE, 0x60, 0x01, 0xFE, 0x03, 0x03, 0xFE, 0x5E, 0x01, 0xFE, 0x04, 0x03, 0xFE, 0x61, 0x01, -/* 0000A9D0 */ 0xFE, 0x05, 0x03, 0xFE, 0xF4, 0x01, 0xFE, 0x83, 0x01, 0xFE, 0x82, 0x01, 0xFE, 0x80, 0x01, 0xFE, -/* 0000A9E0 */ 0x81, 0x01, 0xFE, 0x15, 0x01, 0xFE, 0x84, 0x01, 0x02, 0x01, 0x09, 0x00, 0xFE, 0x3B, 0x04, 0x01, -/* 0000A9F0 */ 0xFE, 0xE8, 0x04, 0x02, 0xFE, 0xE9, 0x04, 0x03, 0xFE, 0xEA, 0x04, 0x04, 0xFE, 0xEB, 0x04, 0x05, -/* 0000AA00 */ 0xFE, 0xEC, 0x04, 0x06, 0xFE, 0x3A, 0x04, 0x07, 0xFE, 0x37, 0x04, 0x08, 0xFE, 0x3E, 0x04, 0x03, -/* 0000AA10 */ 0x02, 0x00, 0xFE, 0x24, 0x02, 0x01, 0xFE, 0xF5, 0x01, 0xFF, 0x8C, 0x4C, 0x02, 0x00, 0x14, 0x16, -/* 0000AA20 */ 0x00, 0x00, 0x00, 0x72, 0x00, 0x9A, 0x13, 0x34, 0x00, 0xEF, 0x36, 0x19, 0x00, 0x5E, 0x00, 0x30, -/* 0000AA30 */ 0x00, 0x16, 0x10, 0x30, 0x00, 0x42, 0x02, 0x30, 0x00, 0x54, 0x02, 0x30, 0x00, 0x53, 0x02, 0x2E, -/* 0000AA40 */ 0x00, 0x62, 0x04, 0x18, 0x00, 0x59, 0x04, 0x18, 0x00, 0x54, 0x00, 0x13, 0x00, 0x48, 0x00, 0x43, -/* 0000AA50 */ 0x00, 0x9D, 0x00, 0x24, 0x00, 0x4A, 0x00, 0x40, 0x00, 0xA2, 0x00, 0x5C, 0x00, 0x22, 0x03, 0x4D, -/* 0000AA60 */ 0x00, 0xEC, 0x08, 0x3A, 0x00, 0x9F, 0x00, 0x07, 0x00, 0x88, 0x00, 0x07, 0x00, 0x16, 0x00, 0x00, -/* 0000AA70 */ 0xAE, 0xCC, 0x00, 0x00, 0x7F, 0xC8, 0x00, 0x00, 0x01, 0xC8, 0x00, 0x00, 0x3E, 0xC6, 0x00, 0x00, -/* 0000AA80 */ 0xB8, 0xC4, 0x00, 0x00, 0x06, 0xC1, 0x00, 0x00, 0xF9, 0xB8, 0x00, 0x00, 0x98, 0xB6, 0x00, 0x00, -/* 0000AA90 */ 0x52, 0xB5, 0x00, 0x00, 0x0C, 0xB4, 0x00, 0x00, 0xC6, 0xB2, 0x00, 0x00, 0xF3, 0xB0, 0x00, 0x00, -/* 0000AAA0 */ 0x41, 0xAF, 0x00, 0x00, 0x5D, 0xAE, 0x00, 0x00, 0xAC, 0xAA, 0x00, 0x00, 0x3F, 0x5D, 0x00, 0xC1, -/* 0000AAB0 */ 0x13, 0x8D, 0x27, 0x00, 0xFE, 0xD1, 0x0E, 0x1B, 0xA0, 0x41, 0xC3, 0x00, 0xFE, 0x0D, 0x04, 0xCA, -/* 0000AAC0 */ 0xFF, 0x00, 0x00, 0x00, 0x02, 0xFF, 0xD3, 0xBC, 0x02, 0x00, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, -/* 0000AAD0 */ 0x01, 0x01, 0xFF, 0xD3, 0xBC, 0x02, 0x00, 0xFE, 0x30, 0x08, 0xFE, 0x30, 0x08, 0x03, 0xFE, 0x02, -/* 0000AAE0 */ 0x04, 0xFE, 0x11, 0x05, 0xFE, 0xCA, 0x01, 0x07, 0x15, 0x19, 0x09, 0x78, 0x78, 0x05, 0x09, 0x20, -/* 0000AAF0 */ 0x20, 0x20, 0x20, 0x01, 0x16, 0x17, 0x18, 0x06, 0xFE, 0xF6, 0x03, 0x05, 0xFE, 0x12, 0x05, 0x06, -/* 0000AB00 */ 0xFE, 0x47, 0x03, 0x06, 0xFE, 0xF7, 0x03, 0x06, 0xFE, 0x99, 0x04, 0x06, 0xFE, 0x35, 0x04, 0x06, -/* 0000AB10 */ 0xFE, 0x88, 0x04, 0x06, 0xFE, 0x68, 0x04, 0x06, 0xFE, 0x46, 0x04, 0x06, 0xFE, 0x47, 0x04, 0x06, -/* 0000AB20 */ 0xFE, 0x48, 0x04, 0x06, 0xFE, 0x49, 0x04, 0x06, 0xFE, 0x4A, 0x04, 0x06, 0xFE, 0x4B, 0x04, 0x06, -/* 0000AB30 */ 0xFE, 0x4C, 0x04, 0x06, 0xFE, 0x4D, 0x04, 0x06, 0xFE, 0x4E, 0x04, 0x07, 0x08, 0xFE, 0xA2, 0x01, -/* 0000AB40 */ 0x59, 0x19, 0xB1, 0x15, 0x19, 0x2C, 0x19, 0x15, 0x15, 0x03, 0x00, 0x19, 0x02, 0x09, 0x18, 0x00, -/* 0000AB50 */ 0x8C, 0x05, 0x03, 0x1A, 0x6A, 0x19, 0x1A, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x1A, 0x5A, 0x01, -/* 0000AB60 */ 0x03, 0x5A, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x19, 0x8C, 0x05, 0x03, 0x1A, 0x6A, 0x19, 0x1A, 0x01, -/* 0000AB70 */ 0x07, 0x02, 0x00, 0x5A, 0x00, 0x1A, 0x5A, 0x01, 0x15, 0x1F, 0x02, 0x19, 0x19, 0x94, 0x02, 0x19, -/* 0000AB80 */ 0x90, 0x02, 0x19, 0xA6, 0x1A, 0x14, 0x0B, 0x00, 0x19, 0x1A, 0x90, 0x02, 0x19, 0x5F, 0x19, 0x19, -/* 0000AB90 */ 0x02, 0x0F, 0x18, 0x00, 0x19, 0x8C, 0x05, 0x03, 0x1A, 0x6A, 0x19, 0x1A, 0x00, 0x07, 0x03, 0x00, -/* 0000ABA0 */ 0x5A, 0x00, 0x1A, 0x5A, 0x01, 0x03, 0x5A, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x19, 0x8C, 0x05, 0x04, -/* 0000ABB0 */ 0x19, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x14, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 0000ABC0 */ 0x1A, 0x00, 0x00, 0x00, 0x90, 0x02, 0x1B, 0x5F, 0x1B, 0x1B, 0x03, 0x78, 0x1B, 0x1A, 0x04, 0x90, -/* 0000ABD0 */ 0x02, 0x1B, 0x5F, 0x1B, 0x1B, 0x05, 0x78, 0x1B, 0x1A, 0x06, 0x90, 0x02, 0x1B, 0x5F, 0x1B, 0x1B, -/* 0000ABE0 */ 0x07, 0x78, 0x1B, 0x1A, 0x08, 0x90, 0x02, 0x1B, 0x5F, 0x1B, 0x1B, 0x09, 0x78, 0x1B, 0x1A, 0x0A, -/* 0000ABF0 */ 0x90, 0x02, 0x1B, 0x5F, 0x1B, 0x1B, 0x0B, 0x78, 0x1B, 0x1A, 0x0C, 0x90, 0x02, 0x1B, 0x5F, 0x1B, -/* 0000AC00 */ 0x1B, 0x0D, 0x78, 0x1B, 0x1A, 0x0E, 0x90, 0x02, 0x1B, 0x5F, 0x1B, 0x1B, 0x0F, 0x78, 0x1B, 0x1A, -/* 0000AC10 */ 0x10, 0x90, 0x02, 0x1B, 0x5F, 0x1B, 0x1B, 0x11, 0x78, 0x1B, 0x1A, 0x12, 0x90, 0x02, 0x1B, 0x5F, -/* 0000AC20 */ 0x1B, 0x1B, 0x13, 0x78, 0x1B, 0x1A, 0x14, 0x90, 0x02, 0x1B, 0x5F, 0x1B, 0x1B, 0x15, 0x78, 0x1B, -/* 0000AC30 */ 0x1A, 0x16, 0x90, 0x02, 0x1B, 0x5F, 0x1B, 0x1B, 0x17, 0x78, 0x1B, 0x1A, 0x18, 0x90, 0x02, 0x1B, -/* 0000AC40 */ 0x5F, 0x1B, 0x1B, 0x19, 0x78, 0x1B, 0x1A, 0x1A, 0x90, 0x02, 0x1B, 0x5F, 0x1B, 0x1B, 0x1B, 0x78, -/* 0000AC50 */ 0x1B, 0x1A, 0x1C, 0x90, 0x02, 0x1B, 0x5F, 0x1B, 0x1B, 0x1D, 0x78, 0x1B, 0x1A, 0x1E, 0x5A, 0x01, -/* 0000AC60 */ 0x1A, 0x5A, 0x02, 0x13, 0x1F, 0x03, 0x19, 0x19, 0x94, 0x03, 0x19, 0x8C, 0x05, 0x04, 0x19, 0x07, -/* 0000AC70 */ 0x03, 0x00, 0x5A, 0x00, 0x14, 0xCA, 0x1A, 0x5A, 0x01, 0x1A, 0x5A, 0x02, 0x13, 0x1F, 0x03, 0x19, -/* 0000AC80 */ 0x19, 0x94, 0x04, 0x19, 0x8C, 0x05, 0x06, 0x19, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x14, 0x8C, 0x05, -/* 0000AC90 */ 0x16, 0x1A, 0x5A, 0x01, 0x1A, 0x8C, 0x05, 0x12, 0x1A, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x14, 0x90, -/* 0000ACA0 */ 0x03, 0x1B, 0x5A, 0x01, 0x1B, 0x1F, 0x02, 0x1A, 0x1A, 0x5A, 0x02, 0x1A, 0xD3, 0x00, 0x1A, 0x5A, -/* 0000ACB0 */ 0x03, 0x1A, 0x90, 0x02, 0x1A, 0x5A, 0x04, 0x1A, 0x1F, 0x05, 0xFF, 0x19, 0x8C, 0x05, 0x04, 0x19, -/* 0000ACC0 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x14, 0x90, 0x04, 0x1A, 0x5A, 0x01, 0x1A, 0x8C, 0x05, 0x08, 0x1A, -/* 0000ACD0 */ 0x5F, 0x1A, 0x1A, 0x1F, 0x5A, 0x02, 0x1A, 0x1F, 0x03, 0x00, 0x19, 0x09, 0x02, 0x00, 0xA6, 0x00, -/* 0000ACE0 */ 0x24, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 0000ACF0 */ 0x00, 0xF7, 0x01, 0x00, 0x00, 0x39, 0x02, 0x00, 0x00, 0x18, 0x02, 0x00, 0x00, 0x42, 0x02, 0x00, -/* 0000AD00 */ 0x00, 0x3D, 0x02, 0x00, 0x00, 0x44, 0x02, 0x00, 0x00, 0x3B, 0x02, 0x00, 0x00, 0x45, 0x02, 0x00, -/* 0000AD10 */ 0x00, 0x3F, 0x02, 0x00, 0x00, 0x3A, 0x02, 0x00, 0x00, 0x3C, 0x02, 0x00, 0x00, 0x3E, 0x02, 0x00, -/* 0000AD20 */ 0x00, 0x41, 0x02, 0x00, 0x00, 0x43, 0x02, 0x00, 0x00, 0xFE, 0x8A, 0x02, 0xFE, 0xEF, 0x01, 0xFE, -/* 0000AD30 */ 0x2C, 0x02, 0xFE, 0xF3, 0x01, 0xFE, 0xF7, 0x01, 0xFE, 0x26, 0x02, 0xFE, 0x39, 0x02, 0xFE, 0x0C, -/* 0000AD40 */ 0x02, 0xFE, 0x18, 0x02, 0xFE, 0x33, 0x02, 0xFE, 0x42, 0x02, 0xFE, 0x2B, 0x02, 0xFE, 0x3D, 0x02, -/* 0000AD50 */ 0xFE, 0x35, 0x02, 0xFE, 0x44, 0x02, 0xFE, 0x28, 0x02, 0xFE, 0x3B, 0x02, 0xFE, 0x38, 0x02, 0xFE, -/* 0000AD60 */ 0x45, 0x02, 0xFE, 0x2F, 0x02, 0xFE, 0x3F, 0x02, 0xFE, 0x27, 0x02, 0xFE, 0x3A, 0x02, 0xFE, 0x2A, -/* 0000AD70 */ 0x02, 0xFE, 0x3C, 0x02, 0xFE, 0x2E, 0x02, 0xFE, 0x3E, 0x02, 0xFE, 0x31, 0x02, 0xFE, 0x41, 0x02, -/* 0000AD80 */ 0xFE, 0x34, 0x02, 0xFE, 0x43, 0x02, 0xFE, 0x15, 0x01, 0xFF, 0x08, 0xBD, 0x02, 0x00, 0x0A, 0x05, -/* 0000AD90 */ 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3C, 0x00, 0x18, 0x00, 0x90, 0x00, 0x18, 0x00, 0x4B, 0x00, 0x15, -/* 0000ADA0 */ 0x00, 0x6B, 0x00, 0x18, 0x00, 0x90, 0x00, 0xBE, 0x00, 0xCE, 0x03, 0x19, 0x00, 0x3E, 0x00, 0x38, -/* 0000ADB0 */ 0x00, 0x98, 0x01, 0x24, 0x00, 0x44, 0x00, 0x00, 0xBC, 0xAD, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0x01, -/* 0000ADC0 */ 0x00, 0x88, 0x01, 0x00, 0xFE, 0xEA, 0x0E, 0x60, 0xA2, 0x41, 0xD1, 0x00, 0xCB, 0xFF, 0x6E, 0xC3, -/* 0000ADD0 */ 0x02, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0x6E, 0xC3, 0x02, 0x00, 0xFE, 0x27, -/* 0000ADE0 */ 0x01, 0xFE, 0x27, 0x01, 0x41, 0x04, 0x05, 0x07, 0x05, 0x18, 0x18, 0x06, 0x05, 0x06, 0x06, 0xFE, -/* 0000ADF0 */ 0x88, 0x04, 0x05, 0xFE, 0xD4, 0x04, 0x08, 0x52, 0x8C, 0x01, 0x03, 0x07, 0x95, 0x07, 0x07, 0x05, -/* 0000AE00 */ 0xA6, 0x08, 0x15, 0x08, 0x00, 0x07, 0x08, 0x14, 0x03, 0x00, 0x05, 0x02, 0x09, 0x37, 0x00, 0x8C, -/* 0000AE10 */ 0x06, 0x06, 0x07, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x04, 0x8C, 0x06, 0x13, 0x08, 0x5A, 0x01, 0x08, -/* 0000AE20 */ 0x8C, 0x01, 0x02, 0x08, 0x5A, 0x02, 0x08, 0x2F, 0x08, 0x03, 0x05, 0x5A, 0x03, 0x08, 0x1F, 0x04, -/* 0000AE30 */ 0x07, 0x07, 0x0E, 0x10, 0x00, 0x07, 0x8C, 0x01, 0x04, 0x07, 0x8C, 0x01, 0x03, 0x08, 0x95, 0x08, -/* 0000AE40 */ 0x08, 0x05, 0x9A, 0x08, 0x07, 0x05, 0xA6, 0x00, 0x24, 0x00, 0xFF, 0x9C, 0xC3, 0x02, 0x00, 0x03, -/* 0000AE50 */ 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0xA6, 0x00, 0x12, 0x00, 0x52, 0x00, 0x00, 0xBF, 0x5C, 0x00, -/* 0000AE60 */ 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0xC2, 0x0E, 0x39, 0xA0, 0x41, 0xD1, 0x00, 0xC9, 0xFF, 0xC6, -/* 0000AE70 */ 0xB9, 0x02, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFF, 0xC6, 0xB9, 0x02, 0x00, 0xFE, -/* 0000AE80 */ 0x60, 0x02, 0xFE, 0x60, 0x02, 0x01, 0x05, 0x05, 0x08, 0x04, 0x23, 0x22, 0x05, 0x01, 0x04, 0x04, -/* 0000AE90 */ 0x04, 0x04, 0x07, 0x06, 0xFE, 0xF6, 0x03, 0x05, 0xFE, 0x10, 0x05, 0x06, 0xFE, 0x47, 0x03, 0x72, -/* 0000AEA0 */ 0x59, 0x08, 0xB1, 0x05, 0x08, 0x2C, 0x08, 0x05, 0x15, 0x03, 0x00, 0x08, 0x02, 0x09, 0x18, 0x00, -/* 0000AEB0 */ 0x8C, 0x05, 0x03, 0x09, 0x6A, 0x08, 0x09, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x09, 0x5A, 0x01, -/* 0000AEC0 */ 0x03, 0x5A, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x08, 0x8C, 0x05, 0x03, 0x09, 0x6A, 0x08, 0x09, 0x01, -/* 0000AED0 */ 0x07, 0x02, 0x00, 0x5A, 0x00, 0x09, 0x5A, 0x01, 0x05, 0x1F, 0x02, 0x08, 0x08, 0x47, 0x06, 0x08, -/* 0000AEE0 */ 0xA6, 0x08, 0x14, 0x08, 0x00, 0x06, 0x08, 0x5F, 0x08, 0x06, 0x02, 0x0F, 0x18, 0x00, 0x08, 0x8C, -/* 0000AEF0 */ 0x05, 0x03, 0x09, 0x6A, 0x08, 0x09, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x09, 0x5A, 0x01, 0x03, -/* 0000AF00 */ 0x5A, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x08, 0x5F, 0x00, 0x06, 0x03, 0x09, 0x02, 0x00, 0xA6, 0x00, -/* 0000AF10 */ 0x24, 0x00, 0xFE, 0x8A, 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0x2C, 0x02, 0xFE, 0x25, 0x02, 0xFF, 0xEC, -/* 0000AF20 */ 0xB9, 0x02, 0x00, 0x07, 0x05, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3C, 0x00, 0x18, 0x00, 0x88, 0x00, -/* 0000AF30 */ 0x18, 0x00, 0x4B, 0x00, 0x0F, 0x00, 0x6B, 0x00, 0x18, 0x00, 0x88, 0x00, 0x09, 0x00, 0x37, 0x00, -/* 0000AF40 */ 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0xA3, 0x0E, 0x10, 0xA3, 0x41, 0xC1, -/* 0000AF50 */ 0x00, 0xFE, 0x26, 0x04, 0xC8, 0xFF, 0x1F, 0xB3, 0x02, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, -/* 0000AF60 */ 0x02, 0xFF, 0x1F, 0xB3, 0x02, 0x00, 0xFE, 0xFD, 0x03, 0xFE, 0xFD, 0x03, 0x01, 0x08, 0x06, 0x0B, -/* 0000AF70 */ 0x07, 0x56, 0x52, 0x05, 0x06, 0x06, 0x06, 0x06, 0x06, 0x0A, 0x06, 0xFE, 0xF6, 0x03, 0x05, 0xFE, -/* 0000AF80 */ 0x10, 0x05, 0x06, 0xFE, 0x47, 0x03, 0x08, 0xFE, 0x1C, 0x01, 0x59, 0x0B, 0xB1, 0x07, 0x0B, 0x4F, -/* 0000AF90 */ 0x08, 0x4F, 0x09, 0x2C, 0x0B, 0x07, 0x15, 0x03, 0x00, 0x0B, 0x02, 0x09, 0x18, 0x00, 0x8C, 0x05, -/* 0000AFA0 */ 0x03, 0x0C, 0x6A, 0x0B, 0x0C, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x5A, 0x01, 0x03, 0x5A, -/* 0000AFB0 */ 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x0B, 0x8C, 0x05, 0x03, 0x0C, 0x6A, 0x0B, 0x0C, 0x01, 0x07, 0x02, -/* 0000AFC0 */ 0x00, 0x5A, 0x00, 0x0C, 0x5A, 0x01, 0x07, 0x1F, 0x02, 0x0B, 0x0B, 0x47, 0x08, 0x0B, 0xA6, 0x0B, -/* 0000AFD0 */ 0x14, 0x08, 0x00, 0x08, 0x0B, 0x5F, 0x0B, 0x08, 0x02, 0x0F, 0x18, 0x00, 0x0B, 0x8C, 0x05, 0x03, -/* 0000AFE0 */ 0x0C, 0x6A, 0x0B, 0x0C, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x5A, 0x01, 0x03, 0x5A, 0x02, -/* 0000AFF0 */ 0x04, 0x1F, 0x03, 0xFF, 0x0B, 0xA6, 0x0B, 0x15, 0x03, 0x00, 0x06, 0x0B, 0x09, 0x3C, 0x00, 0x8C, -/* 0000B000 */ 0x05, 0x21, 0x0B, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x05, 0x5A, 0x01, 0x06, 0x1F, 0x02, 0x0B, 0x0B, -/* 0000B010 */ 0x0F, 0x15, 0x00, 0x0B, 0x8C, 0x05, 0x20, 0x0B, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x05, 0x5A, 0x01, -/* 0000B020 */ 0x06, 0x1F, 0x02, 0x0B, 0x0B, 0x0F, 0x12, 0x00, 0x0B, 0x8C, 0x05, 0x03, 0x0C, 0x6A, 0x0B, 0x0C, -/* 0000B030 */ 0x03, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x0C, 0x1F, 0x01, 0xFF, 0x0B, 0xA6, 0x0B, 0x47, 0x09, 0x0B, -/* 0000B040 */ 0xA6, 0x0B, 0x15, 0x03, 0x00, 0x06, 0x0B, 0x09, 0x1B, 0x00, 0x8C, 0x05, 0x24, 0x0C, 0x6A, 0x0B, -/* 0000B050 */ 0x0C, 0x04, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5A, 0x01, 0x06, 0x1F, 0x02, 0x0B, 0x0B, 0x47, -/* 0000B060 */ 0x09, 0x0B, 0x09, 0x11, 0x00, 0x8C, 0x05, 0x1C, 0x0B, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x05, 0x1F, -/* 0000B070 */ 0x01, 0x0B, 0x0B, 0x47, 0x09, 0x0B, 0x8C, 0x05, 0x0B, 0x0B, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x05, -/* 0000B080 */ 0x8C, 0x05, 0x03, 0x0D, 0x6A, 0x0C, 0x0D, 0x05, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0D, 0x5A, 0x01, -/* 0000B090 */ 0x09, 0x5A, 0x02, 0x08, 0x1F, 0x03, 0x0C, 0x0C, 0x5A, 0x01, 0x0C, 0x1F, 0x02, 0x00, 0x0B, 0x09, -/* 0000B0A0 */ 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x8A, 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0x2C, 0x02, 0xFE, -/* 0000B0B0 */ 0x86, 0x02, 0xFE, 0x38, 0x03, 0xFE, 0xE6, 0x01, 0xFF, 0x4B, 0xB3, 0x02, 0x00, 0x0D, 0x09, 0x00, -/* 0000B0C0 */ 0x00, 0x00, 0x0B, 0x00, 0x38, 0x00, 0x18, 0x00, 0x7F, 0x00, 0x18, 0x00, 0x47, 0x00, 0x0F, 0x00, -/* 0000B0D0 */ 0x67, 0x00, 0x18, 0x00, 0x80, 0x00, 0x34, 0x00, 0x56, 0x00, 0x12, 0x00, 0x48, 0x00, 0x05, 0x00, -/* 0000B0E0 */ 0x2F, 0x00, 0x0A, 0x00, 0x32, 0x00, 0x1B, 0x00, 0x59, 0x00, 0x11, 0x00, 0x42, 0x00, 0x2E, 0x00, -/* 0000B0F0 */ 0x51, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x88, 0x0E, 0x10, 0xA3, -/* 0000B100 */ 0x41, 0xC1, 0x00, 0xFE, 0x47, 0x03, 0xC7, 0xFF, 0x9D, 0xAE, 0x02, 0x00, 0xFF, 0x00, 0x10, 0x01, -/* 0000B110 */ 0x00, 0x03, 0x01, 0xFF, 0x9D, 0xAE, 0x02, 0x00, 0xFE, 0x26, 0x04, 0xFE, 0x26, 0x04, 0x01, 0x09, -/* 0000B120 */ 0x05, 0x0B, 0x05, 0x60, 0x59, 0x05, 0x09, 0x07, 0x06, 0x07, 0x07, 0x0A, 0x08, 0x06, 0xFE, 0x47, -/* 0000B130 */ 0x03, 0x07, 0xFE, 0x37, 0x01, 0x59, 0x0B, 0xB1, 0x07, 0x0B, 0x4F, 0x08, 0x4F, 0x09, 0x15, 0x05, -/* 0000B140 */ 0x00, 0x05, 0x02, 0xA6, 0x0B, 0x47, 0x05, 0x0B, 0x15, 0x05, 0x00, 0x06, 0x02, 0xA6, 0x0B, 0x47, -/* 0000B150 */ 0x06, 0x0B, 0x4F, 0x08, 0x4F, 0x09, 0x68, 0x06, 0x00, 0x00, 0x00, 0x0B, 0x14, 0x0A, 0x00, 0x07, -/* 0000B160 */ 0x0B, 0xA6, 0x0B, 0x14, 0x03, 0x00, 0x07, 0x0B, 0x09, 0x16, 0x00, 0x8C, 0x01, 0x02, 0x0B, 0x4B, -/* 0000B170 */ 0x0B, 0x07, 0x03, 0x00, 0x5A, 0x01, 0x05, 0x5A, 0x02, 0x06, 0xC1, 0x03, 0x00, 0x0B, 0x09, 0xE9, -/* 0000B180 */ 0x00, 0x8C, 0x05, 0x24, 0x0C, 0x6A, 0x0B, 0x0C, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5A, -/* 0000B190 */ 0x01, 0x07, 0x1F, 0x02, 0x0B, 0x0B, 0x47, 0x08, 0x0B, 0x8C, 0x05, 0x11, 0x0B, 0x07, 0x02, 0x00, -/* 0000B1A0 */ 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x08, 0x1F, 0x02, 0x0B, 0x0B, 0x0F, 0x15, 0x00, 0x0B, 0x8C, 0x05, -/* 0000B1B0 */ 0x03, 0x0C, 0x6A, 0x0B, 0x0C, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5A, 0x01, 0x03, 0x1F, -/* 0000B1C0 */ 0x02, 0xFF, 0x0B, 0x8C, 0x05, 0x03, 0x0C, 0x6A, 0x0B, 0x0C, 0x02, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 0000B1D0 */ 0x0C, 0x5A, 0x01, 0x08, 0x1F, 0x02, 0x0B, 0x0B, 0x47, 0x09, 0x0B, 0xA6, 0x0B, 0x14, 0x03, 0x00, -/* 0000B1E0 */ 0x09, 0x0B, 0x09, 0x31, 0x00, 0x8C, 0x05, 0x04, 0x0B, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0xCA, -/* 0000B1F0 */ 0x0C, 0x5A, 0x01, 0x0C, 0x5A, 0x02, 0x04, 0x1F, 0x03, 0x0B, 0x0B, 0x47, 0x09, 0x0B, 0x8C, 0x05, -/* 0000B200 */ 0x03, 0x0C, 0x6A, 0x0B, 0x0C, 0x03, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x5A, 0x01, 0x08, 0x5A, -/* 0000B210 */ 0x02, 0x09, 0x1F, 0x03, 0xFF, 0x0B, 0x8C, 0x02, 0x08, 0x0B, 0x4B, 0x0B, 0x07, 0x04, 0x00, 0x5A, -/* 0000B220 */ 0x00, 0x02, 0x5A, 0x01, 0x09, 0x5A, 0x02, 0x05, 0x5A, 0x03, 0x06, 0x1F, 0x04, 0xFF, 0x0B, 0x47, -/* 0000B230 */ 0x0B, 0x09, 0x8C, 0x05, 0x06, 0x0C, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8C, 0x05, 0x1A, 0x0D, -/* 0000B240 */ 0x5A, 0x01, 0x0D, 0x8C, 0x01, 0x03, 0x0D, 0x4B, 0x0D, 0x5A, 0x02, 0x0D, 0x5A, 0x03, 0x08, 0x1F, -/* 0000B250 */ 0x04, 0x0C, 0x0C, 0x74, 0x0C, 0x0B, 0x04, 0x5F, 0x0B, 0x09, 0x05, 0x80, 0x0B, 0x0B, 0xF8, 0x00, -/* 0000B260 */ 0xFA, 0x0B, 0x47, 0x00, 0x08, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x36, 0x03, 0xFE, -/* 0000B270 */ 0x8E, 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0xF0, 0x01, 0xFE, 0x25, 0x02, 0xFE, 0x25, 0x02, 0xAB, 0xFF, -/* 0000B280 */ 0xB5, 0xAE, 0x02, 0x00, 0x10, 0x09, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0E, 0x00, 0x2B, -/* 0000B290 */ 0x00, 0x15, 0x00, 0x43, 0x00, 0x16, 0x00, 0x58, 0x00, 0x18, 0x00, 0x37, 0x00, 0x15, 0x00, 0x38, -/* 0000B2A0 */ 0x00, 0x15, 0x00, 0x9D, 0x00, 0x18, 0x00, 0x47, 0x00, 0x0A, 0x00, 0x3A, 0x00, 0x19, 0x00, 0x3F, -/* 0000B2B0 */ 0x00, 0x18, 0x00, 0x58, 0x00, 0x19, 0x00, 0x4F, 0x00, 0x28, 0x00, 0x66, 0x00, 0x0B, 0x00, 0x3D, -/* 0000B2C0 */ 0x00, 0x08, 0x00, 0x1C, 0x00, 0x00, 0xBF, 0x5D, 0x00, 0xC1, 0x03, 0x8D, 0x05, 0x00, 0xFE, 0x81, -/* 0000B2D0 */ 0x0E, 0x0D, 0xA2, 0x41, 0xD1, 0x00, 0xC5, 0xFF, 0x1F, 0xAC, 0x02, 0x00, 0x01, 0xFF, 0x00, 0x10, -/* 0000B2E0 */ 0x01, 0x00, 0x06, 0x06, 0xFF, 0x1F, 0xAC, 0x02, 0x00, 0xFE, 0x9F, 0x01, 0xFE, 0x9F, 0x01, 0x40, -/* 0000B2F0 */ 0x04, 0xF8, 0xFE, 0x92, 0x04, 0xFE, 0x93, 0x04, 0xFE, 0x94, 0x04, 0x0C, 0x03, 0x0B, 0x08, 0x16, -/* 0000B300 */ 0x16, 0x04, 0x03, 0x01, 0x01, 0x01, 0x01, 0x08, 0x09, 0x0A, 0x08, 0x42, 0x94, 0x02, 0x03, 0x94, -/* 0000B310 */ 0x03, 0x04, 0x94, 0x04, 0x05, 0x94, 0x05, 0x06, 0x8C, 0x04, 0x03, 0x0C, 0x6A, 0x0B, 0x0C, 0x00, -/* 0000B320 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x8C, 0x04, 0x23, 0x0D, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, -/* 0000B330 */ 0x90, 0x02, 0x0E, 0x5A, 0x01, 0x0E, 0xD3, 0x00, 0x0E, 0x5A, 0x02, 0x0E, 0x1F, 0x03, 0x0D, 0x0D, -/* 0000B340 */ 0x5A, 0x01, 0x0D, 0x5A, 0x02, 0x07, 0x1F, 0x03, 0xFF, 0x0B, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xEE, -/* 0000B350 */ 0x01, 0xFF, 0x72, 0xAC, 0x02, 0x00, 0x02, 0x0C, 0x00, 0x00, 0x00, 0x34, 0x00, 0x4B, 0x01, 0x00, -/* 0000B360 */ 0x64, 0xB3, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x82, 0x0E, 0x49, -/* 0000B370 */ 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x97, 0x04, 0xC6, 0xFF, 0xAB, 0xAC, 0x02, 0x00, 0xFF, 0x00, 0x10, -/* 0000B380 */ 0x01, 0x00, 0x03, 0x01, 0xFF, 0xAB, 0xAC, 0x02, 0x00, 0xEE, 0xEE, 0x01, 0x07, 0x03, 0x07, 0x09, -/* 0000B390 */ 0x1D, 0x1B, 0x05, 0x05, 0x01, 0x01, 0x01, 0x01, 0x06, 0x08, 0x59, 0x59, 0x07, 0xB1, 0x05, 0x07, -/* 0000B3A0 */ 0x15, 0x05, 0x00, 0x03, 0x02, 0xA6, 0x07, 0x47, 0x03, 0x07, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA6, -/* 0000B3B0 */ 0x07, 0x47, 0x04, 0x07, 0x8C, 0x02, 0x09, 0x08, 0x4B, 0x08, 0x6A, 0x07, 0x08, 0x00, 0x07, 0x08, -/* 0000B3C0 */ 0x00, 0x5A, 0x00, 0x08, 0x5A, 0x01, 0x05, 0x8C, 0x01, 0x02, 0x09, 0x5A, 0x02, 0x09, 0x8C, 0x01, -/* 0000B3D0 */ 0x03, 0x09, 0x5A, 0x03, 0x09, 0x8C, 0x01, 0x04, 0x09, 0x5A, 0x04, 0x09, 0x8C, 0x01, 0x05, 0x09, -/* 0000B3E0 */ 0x5A, 0x05, 0x09, 0x5A, 0x06, 0x03, 0x5A, 0x07, 0x04, 0x1F, 0x08, 0x00, 0x07, 0x09, 0x02, 0x00, -/* 0000B3F0 */ 0xA6, 0x00, 0x24, 0x00, 0x53, 0xFF, 0xD7, 0xAC, 0x02, 0x00, 0x04, 0x05, 0x00, 0x00, 0x00, 0x0A, -/* 0000B400 */ 0x00, 0x15, 0x00, 0x0A, 0x00, 0x2B, 0x00, 0x3E, 0x00, 0x81, 0x00, 0x00, 0xBF, 0x5D, 0x00, 0xC1, -/* 0000B410 */ 0x03, 0x8D, 0x05, 0x00, 0xFE, 0x7B, 0x0E, 0x0D, 0xA2, 0x41, 0xD1, 0x00, 0xC3, 0xFF, 0xCB, 0xA9, -/* 0000B420 */ 0x02, 0x00, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x06, 0x06, 0xFF, 0xCB, 0xA9, 0x02, 0x00, 0xFE, -/* 0000B430 */ 0x9F, 0x01, 0xFE, 0x9F, 0x01, 0x40, 0x04, 0xF8, 0xFE, 0x92, 0x04, 0xFE, 0x93, 0x04, 0xFE, 0x94, -/* 0000B440 */ 0x04, 0x0C, 0x03, 0x0B, 0x08, 0x16, 0x16, 0x04, 0x03, 0x01, 0x01, 0x01, 0x01, 0x08, 0x09, 0x0A, -/* 0000B450 */ 0x08, 0x42, 0x94, 0x02, 0x03, 0x94, 0x03, 0x04, 0x94, 0x04, 0x05, 0x94, 0x05, 0x06, 0x8C, 0x04, -/* 0000B460 */ 0x03, 0x0C, 0x6A, 0x0B, 0x0C, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x8C, 0x04, 0x23, 0x0D, -/* 0000B470 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x90, 0x02, 0x0E, 0x5A, 0x01, 0x0E, 0xD3, 0x00, 0x0E, 0x5A, -/* 0000B480 */ 0x02, 0x0E, 0x1F, 0x03, 0x0D, 0x0D, 0x5A, 0x01, 0x0D, 0x5A, 0x02, 0x07, 0x1F, 0x03, 0xFF, 0x0B, -/* 0000B490 */ 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xEE, 0x01, 0xFF, 0x1E, 0xAA, 0x02, 0x00, 0x02, 0x0C, 0x00, 0x00, -/* 0000B4A0 */ 0x00, 0x34, 0x00, 0x4B, 0x01, 0x00, 0xAA, 0xB4, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, -/* 0000B4B0 */ 0x01, 0x00, 0xFE, 0x7C, 0x0E, 0x49, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x96, 0x04, 0xC4, 0xFF, 0x57, -/* 0000B4C0 */ 0xAA, 0x02, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x01, 0xFF, 0x57, 0xAA, 0x02, 0x00, 0xEE, -/* 0000B4D0 */ 0xEE, 0x01, 0x07, 0x03, 0x07, 0x09, 0x1D, 0x1B, 0x05, 0x05, 0x01, 0x01, 0x01, 0x01, 0x06, 0x08, -/* 0000B4E0 */ 0x59, 0x59, 0x07, 0xB1, 0x05, 0x07, 0x15, 0x05, 0x00, 0x03, 0x02, 0xA6, 0x07, 0x47, 0x03, 0x07, -/* 0000B4F0 */ 0x15, 0x05, 0x00, 0x04, 0x02, 0xA6, 0x07, 0x47, 0x04, 0x07, 0x8C, 0x02, 0x09, 0x08, 0x4B, 0x08, -/* 0000B500 */ 0x6A, 0x07, 0x08, 0x00, 0x07, 0x08, 0x00, 0x5A, 0x00, 0x08, 0x5A, 0x01, 0x05, 0x8C, 0x01, 0x02, -/* 0000B510 */ 0x09, 0x5A, 0x02, 0x09, 0x8C, 0x01, 0x03, 0x09, 0x5A, 0x03, 0x09, 0x8C, 0x01, 0x04, 0x09, 0x5A, -/* 0000B520 */ 0x04, 0x09, 0x8C, 0x01, 0x05, 0x09, 0x5A, 0x05, 0x09, 0x5A, 0x06, 0x03, 0x5A, 0x07, 0x04, 0x1F, -/* 0000B530 */ 0x08, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x53, 0xFF, 0x83, 0xAA, 0x02, 0x00, -/* 0000B540 */ 0x04, 0x05, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0A, 0x00, 0x2B, 0x00, 0x3E, 0x00, 0x81, -/* 0000B550 */ 0x00, 0x00, 0xBF, 0x5D, 0x00, 0xC1, 0x03, 0x8D, 0x05, 0x00, 0xFE, 0x75, 0x0E, 0x0D, 0xA2, 0x41, -/* 0000B560 */ 0xD1, 0x00, 0xC1, 0xFF, 0x89, 0xA7, 0x02, 0x00, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x06, 0x06, -/* 0000B570 */ 0xFF, 0x89, 0xA7, 0x02, 0x00, 0xFE, 0x9B, 0x01, 0xFE, 0x9B, 0x01, 0x40, 0x04, 0xF8, 0xFE, 0x92, -/* 0000B580 */ 0x04, 0xFE, 0x93, 0x04, 0xFE, 0x94, 0x04, 0x0C, 0x03, 0x0B, 0x08, 0x16, 0x16, 0x04, 0x03, 0x01, -/* 0000B590 */ 0x01, 0x01, 0x01, 0x08, 0x09, 0x0A, 0x08, 0x42, 0x94, 0x02, 0x03, 0x94, 0x03, 0x04, 0x94, 0x04, -/* 0000B5A0 */ 0x05, 0x94, 0x05, 0x06, 0x8C, 0x04, 0x03, 0x0C, 0x6A, 0x0B, 0x0C, 0x00, 0x07, 0x03, 0x00, 0x5A, -/* 0000B5B0 */ 0x00, 0x0C, 0x8C, 0x04, 0x23, 0x0D, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x90, 0x02, 0x0E, 0x5A, -/* 0000B5C0 */ 0x01, 0x0E, 0xD3, 0x00, 0x0E, 0x5A, 0x02, 0x0E, 0x1F, 0x03, 0x0D, 0x0D, 0x5A, 0x01, 0x0D, 0x5A, -/* 0000B5D0 */ 0x02, 0x07, 0x1F, 0x03, 0xFF, 0x0B, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xEE, 0x01, 0xFF, 0xDC, 0xA7, -/* 0000B5E0 */ 0x02, 0x00, 0x02, 0x0C, 0x00, 0x00, 0x00, 0x34, 0x00, 0x47, 0x01, 0x00, 0xF0, 0xB5, 0x00, 0x00, -/* 0000B5F0 */ 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x76, 0x0E, 0x49, 0xA2, 0x41, 0xC3, 0x00, -/* 0000B600 */ 0xFE, 0x95, 0x04, 0xC2, 0xFF, 0x15, 0xA8, 0x02, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x01, -/* 0000B610 */ 0xFF, 0x15, 0xA8, 0x02, 0x00, 0xEA, 0xEA, 0x01, 0x07, 0x03, 0x07, 0x09, 0x1D, 0x1B, 0x05, 0x05, -/* 0000B620 */ 0x01, 0x01, 0x01, 0x01, 0x06, 0x08, 0x59, 0x59, 0x07, 0xB1, 0x05, 0x07, 0x15, 0x05, 0x00, 0x03, -/* 0000B630 */ 0x02, 0xA6, 0x07, 0x47, 0x03, 0x07, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA6, 0x07, 0x47, 0x04, 0x07, -/* 0000B640 */ 0x8C, 0x02, 0x09, 0x08, 0x4B, 0x08, 0x6A, 0x07, 0x08, 0x00, 0x07, 0x08, 0x00, 0x5A, 0x00, 0x08, -/* 0000B650 */ 0x5A, 0x01, 0x05, 0x8C, 0x01, 0x02, 0x09, 0x5A, 0x02, 0x09, 0x8C, 0x01, 0x03, 0x09, 0x5A, 0x03, -/* 0000B660 */ 0x09, 0x8C, 0x01, 0x04, 0x09, 0x5A, 0x04, 0x09, 0x8C, 0x01, 0x05, 0x09, 0x5A, 0x05, 0x09, 0x5A, -/* 0000B670 */ 0x06, 0x03, 0x5A, 0x07, 0x04, 0x1F, 0x08, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, -/* 0000B680 */ 0x53, 0xFF, 0x3D, 0xA8, 0x02, 0x00, 0x04, 0x05, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0A, -/* 0000B690 */ 0x00, 0x2B, 0x00, 0x3E, 0x00, 0x81, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x07, 0x88, 0x01, 0x00, -/* 0000B6A0 */ 0xFE, 0x3E, 0x0E, 0x0C, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x37, 0x04, 0xC0, 0xFF, 0x4A, 0x98, 0x02, -/* 0000B6B0 */ 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x07, 0x07, 0xFF, 0x4A, 0x98, 0x02, 0x00, 0xFE, 0x74, 0x06, -/* 0000B6C0 */ 0xFE, 0x74, 0x06, 0x01, 0x0F, 0x07, 0x11, 0x0A, 0x8A, 0x84, 0x04, 0x0C, 0x04, 0x04, 0x04, 0x04, -/* 0000B6D0 */ 0x01, 0x10, 0x06, 0xFE, 0xF6, 0x03, 0x06, 0xFE, 0x41, 0x04, 0x08, 0x05, 0xFE, 0x91, 0x04, 0x07, -/* 0000B6E0 */ 0xFE, 0xBF, 0x01, 0x59, 0x11, 0xB1, 0x0D, 0x11, 0x4F, 0x0E, 0x4F, 0x0F, 0x2C, 0x11, 0x0D, 0x15, -/* 0000B6F0 */ 0x0D, 0x00, 0x11, 0x02, 0x8C, 0x04, 0x0C, 0x11, 0xE1, 0x11, 0x0D, 0x11, 0x00, 0x0F, 0x18, 0x00, -/* 0000B700 */ 0x11, 0x8C, 0x04, 0x03, 0x12, 0x6A, 0x11, 0x12, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x12, 0x5A, -/* 0000B710 */ 0x01, 0x07, 0x5A, 0x02, 0x03, 0x1F, 0x03, 0xFF, 0x11, 0x8C, 0x04, 0x06, 0x11, 0x07, 0x03, 0x00, -/* 0000B720 */ 0x5A, 0x00, 0x04, 0x8C, 0x04, 0x1B, 0x12, 0x5A, 0x01, 0x12, 0x8C, 0x04, 0x0C, 0x12, 0x07, 0x02, -/* 0000B730 */ 0x00, 0x5A, 0x01, 0x0D, 0xC1, 0x02, 0x12, 0x12, 0x5A, 0x02, 0x12, 0x1F, 0x03, 0x11, 0x11, 0x47, -/* 0000B740 */ 0x0E, 0x11, 0x8C, 0x04, 0x21, 0x11, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x0E, 0x1F, -/* 0000B750 */ 0x02, 0x11, 0x11, 0x0F, 0x15, 0x00, 0x11, 0x8C, 0x04, 0x20, 0x11, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 0000B760 */ 0x04, 0x5A, 0x01, 0x0E, 0x1F, 0x02, 0x11, 0x11, 0x0F, 0x06, 0x00, 0x11, 0x47, 0x00, 0x05, 0x09, -/* 0000B770 */ 0x2E, 0x01, 0xA6, 0x11, 0x47, 0x0F, 0x11, 0x8C, 0x04, 0x03, 0x11, 0x5F, 0x11, 0x11, 0x01, 0x0E, -/* 0000B780 */ 0x8B, 0x00, 0x11, 0xA6, 0x11, 0x14, 0x03, 0x00, 0x0B, 0x11, 0x09, 0x81, 0x00, 0xA6, 0x11, 0x14, -/* 0000B790 */ 0x03, 0x00, 0x0C, 0x11, 0x09, 0x77, 0x00, 0x8C, 0x01, 0x0A, 0x11, 0x4B, 0x11, 0x95, 0x11, 0x11, -/* 0000B7A0 */ 0x0A, 0x0E, 0x10, 0x00, 0x11, 0x8C, 0x01, 0x0A, 0x11, 0x4B, 0x11, 0x95, 0x11, 0x11, 0x0A, 0x47, -/* 0000B7B0 */ 0x0F, 0x11, 0x09, 0x59, 0x00, 0x8C, 0x04, 0x04, 0x11, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x04, 0xCA, -/* 0000B7C0 */ 0x12, 0x5A, 0x01, 0x12, 0x5A, 0x02, 0x06, 0x1F, 0x03, 0x11, 0x11, 0x47, 0x0F, 0x11, 0x8C, 0x01, -/* 0000B7D0 */ 0x08, 0x11, 0x4B, 0x11, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x0F, 0xA6, 0x12, 0x5A, -/* 0000B7E0 */ 0x02, 0x12, 0x8C, 0x01, 0x02, 0x12, 0x4B, 0x12, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x04, 0xA6, 0x13, -/* 0000B7F0 */ 0x5A, 0x01, 0x13, 0x5A, 0x02, 0x08, 0x5A, 0x03, 0x09, 0x1F, 0x04, 0x12, 0x12, 0x5A, 0x03, 0x12, -/* 0000B800 */ 0x1F, 0x04, 0xFF, 0x11, 0x8C, 0x01, 0x0A, 0x11, 0x4B, 0x11, 0x9A, 0x0F, 0x11, 0x0A, 0x0F, 0x4B, -/* 0000B810 */ 0x00, 0x0F, 0x8C, 0x04, 0x04, 0x11, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x04, 0xCA, 0x12, 0x5A, 0x01, -/* 0000B820 */ 0x12, 0x5A, 0x02, 0x06, 0x1F, 0x03, 0x11, 0x11, 0x47, 0x0F, 0x11, 0x8C, 0x01, 0x08, 0x11, 0x4B, -/* 0000B830 */ 0x11, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x0F, 0x5A, 0x02, 0x0B, 0x8C, 0x01, 0x02, -/* 0000B840 */ 0x12, 0x4B, 0x12, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x0C, 0x5A, 0x02, 0x08, 0x5A, -/* 0000B850 */ 0x03, 0x09, 0x1F, 0x04, 0x12, 0x12, 0x5A, 0x03, 0x12, 0x1F, 0x04, 0xFF, 0x11, 0x8C, 0x04, 0x0B, -/* 0000B860 */ 0x11, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, 0x8C, 0x04, 0x03, 0x13, 0x6A, 0x12, 0x13, 0x02, 0x07, -/* 0000B870 */ 0x03, 0x00, 0x5A, 0x00, 0x13, 0x8C, 0x04, 0x24, 0x15, 0x6A, 0x14, 0x15, 0x03, 0x07, 0x02, 0x00, -/* 0000B880 */ 0x5A, 0x00, 0x15, 0x5A, 0x01, 0x0D, 0x1F, 0x02, 0x14, 0x14, 0x5A, 0x01, 0x14, 0x5A, 0x02, 0x0F, -/* 0000B890 */ 0x1F, 0x03, 0x12, 0x12, 0x5A, 0x01, 0x12, 0x1F, 0x02, 0x00, 0x11, 0x09, 0x02, 0x00, 0xA6, 0x00, -/* 0000B8A0 */ 0x24, 0x00, 0xFE, 0x8A, 0x02, 0xFE, 0x61, 0x03, 0xFE, 0xE6, 0x01, 0xFE, 0x38, 0x03, 0xFF, 0xC3, -/* 0000B8B0 */ 0x98, 0x02, 0x00, 0x11, 0x09, 0x00, 0x00, 0x00, 0x15, 0x00, 0x4F, 0x00, 0x18, 0x00, 0x50, 0x00, -/* 0000B8C0 */ 0x29, 0x00, 0x53, 0x00, 0x2A, 0x00, 0x3C, 0x00, 0x06, 0x00, 0x3A, 0x00, 0x05, 0x00, 0x2D, 0x00, -/* 0000B8D0 */ 0x20, 0x00, 0xCE, 0x00, 0x0E, 0x00, 0x84, 0x00, 0x10, 0x00, 0xA2, 0x00, 0x19, 0x00, 0x3E, 0x00, -/* 0000B8E0 */ 0x36, 0x00, 0x7A, 0x00, 0x0A, 0x00, 0x7C, 0x00, 0x04, 0x00, 0x28, 0x00, 0x19, 0x00, 0x3A, 0x00, -/* 0000B8F0 */ 0x32, 0x00, 0x81, 0x00, 0x43, 0x00, 0x5A, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x53, 0xA8, 0x21, -/* 0000B900 */ 0x00, 0xFE, 0xB1, 0x0D, 0x0C, 0xB3, 0x41, 0xC1, 0x00, 0xFE, 0x3A, 0x04, 0xBF, 0xFF, 0x33, 0x7B, -/* 0000B910 */ 0x02, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFF, 0x33, 0x7B, 0x02, 0x00, 0xFE, 0x7E, -/* 0000B920 */ 0x1B, 0xFE, 0x7E, 0x1B, 0x45, 0x1C, 0x29, 0x41, 0x07, 0xFE, 0xB3, 0x01, 0xFE, 0x93, 0x01, 0x04, -/* 0000B930 */ 0x0F, 0x2A, 0x2A, 0x2A, 0x2A, 0x01, 0x01, 0x40, 0x41, 0x06, 0xFE, 0xF6, 0x03, 0x06, 0xFE, 0xC8, -/* 0000B940 */ 0x04, 0x08, 0x06, 0xFE, 0x47, 0x03, 0x0B, 0x05, 0xFE, 0x53, 0x04, 0x06, 0xFE, 0x56, 0x04, 0x06, -/* 0000B950 */ 0xFE, 0x00, 0x04, 0x06, 0xFE, 0xAD, 0x03, 0x05, 0xFE, 0xBC, 0x03, 0x05, 0xFE, 0xFF, 0x03, 0x06, -/* 0000B960 */ 0xFE, 0x88, 0x04, 0x06, 0xFE, 0x46, 0x04, 0x06, 0xFE, 0x42, 0x04, 0x06, 0xFE, 0x43, 0x04, 0x06, -/* 0000B970 */ 0xFE, 0x44, 0x04, 0x06, 0xFE, 0x47, 0x04, 0x06, 0xFE, 0x48, 0x04, 0x06, 0xFE, 0x45, 0x04, 0x06, -/* 0000B980 */ 0xFE, 0x13, 0x04, 0x06, 0xFE, 0x49, 0x04, 0x06, 0xFE, 0x4A, 0x04, 0x06, 0xFE, 0x4B, 0x04, 0x06, -/* 0000B990 */ 0xFE, 0x4C, 0x04, 0x06, 0xFE, 0x4D, 0x04, 0x06, 0xFE, 0x4E, 0x04, 0x06, 0xFE, 0x68, 0x04, 0x06, -/* 0000B9A0 */ 0xFE, 0xC2, 0x03, 0x05, 0xFE, 0x8D, 0x04, 0x05, 0xFE, 0x8E, 0x04, 0x05, 0xFE, 0x0D, 0x05, 0x05, -/* 0000B9B0 */ 0xFE, 0x0E, 0x05, 0x07, 0x06, 0xFE, 0xB4, 0x03, 0x06, 0xFE, 0xB3, 0x03, 0x0C, 0x05, 0xFE, 0x0F, -/* 0000B9C0 */ 0x05, 0x06, 0xFE, 0x54, 0x04, 0x01, 0x00, 0xFE, 0x88, 0x05, 0xA6, 0x3F, 0x2C, 0x42, 0x29, 0x0D, -/* 0000B9D0 */ 0x03, 0x00, 0x42, 0x02, 0x09, 0x12, 0x00, 0x8C, 0x04, 0x03, 0x43, 0x6A, 0x42, 0x43, 0x00, 0x07, -/* 0000B9E0 */ 0x01, 0x00, 0x5A, 0x00, 0x43, 0x1F, 0x01, 0xFF, 0x42, 0x8C, 0x04, 0x06, 0x42, 0x07, 0x04, 0x00, -/* 0000B9F0 */ 0x5A, 0x00, 0x04, 0x8C, 0x04, 0x13, 0x43, 0x5A, 0x01, 0x43, 0x5A, 0x02, 0x29, 0x5A, 0x03, 0x03, -/* 0000BA00 */ 0x1F, 0x04, 0x42, 0x42, 0x0E, 0x20, 0x00, 0x42, 0x5F, 0x42, 0x29, 0x01, 0x0E, 0x18, 0x00, 0x42, -/* 0000BA10 */ 0x8C, 0x04, 0x03, 0x43, 0x6A, 0x42, 0x43, 0x02, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x43, 0x5A, 0x01, -/* 0000BA20 */ 0x05, 0x5A, 0x02, 0x05, 0x1F, 0x03, 0xFF, 0x42, 0x74, 0x06, 0x29, 0x03, 0x8C, 0x01, 0x02, 0x42, -/* 0000BA30 */ 0x4B, 0x42, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x2B, 0x5A, 0x02, 0x07, 0x5A, 0x03, -/* 0000BA40 */ 0x08, 0x1F, 0x04, 0x42, 0x42, 0x47, 0x2B, 0x42, 0x8C, 0x03, 0x02, 0x42, 0x4B, 0x42, 0x07, 0x06, -/* 0000BA50 */ 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x2B, 0x5A, 0x02, 0x09, 0x5A, 0x03, 0x0A, 0xCC, 0x43, 0x02, -/* 0000BA60 */ 0x9F, 0x00, 0x0B, 0x43, 0x9F, 0x01, 0x0C, 0x43, 0x5A, 0x04, 0x43, 0x5A, 0x05, 0x0C, 0x1F, 0x06, -/* 0000BA70 */ 0x42, 0x42, 0x47, 0x2E, 0x42, 0x8C, 0x03, 0x02, 0x42, 0x4B, 0x42, 0x07, 0x06, 0x00, 0x5A, 0x00, -/* 0000BA80 */ 0x04, 0x5A, 0x01, 0x2B, 0x5A, 0x02, 0x0D, 0x5A, 0x03, 0x0A, 0xA6, 0x43, 0x5A, 0x04, 0x43, 0xA6, -/* 0000BA90 */ 0x43, 0x5A, 0x05, 0x43, 0x1F, 0x06, 0x42, 0x42, 0x47, 0x2F, 0x42, 0xA6, 0x42, 0x15, 0x03, 0x00, -/* 0000BAA0 */ 0x2F, 0x42, 0x09, 0x1B, 0x00, 0x8C, 0x04, 0x03, 0x43, 0x6A, 0x42, 0x43, 0x04, 0x07, 0x02, 0x00, -/* 0000BAB0 */ 0x5A, 0x00, 0x43, 0x5A, 0x01, 0x2F, 0x1F, 0x02, 0x42, 0x42, 0x47, 0x2F, 0x42, 0x09, 0x15, 0x00, -/* 0000BAC0 */ 0x8C, 0x04, 0x03, 0x43, 0x6A, 0x42, 0x43, 0x05, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x43, 0x1F, 0x01, -/* 0000BAD0 */ 0x42, 0x42, 0x47, 0x2F, 0x42, 0xA6, 0x42, 0x14, 0x03, 0x00, 0x2F, 0x42, 0x09, 0x12, 0x00, 0x8C, -/* 0000BAE0 */ 0x04, 0x03, 0x43, 0x6A, 0x42, 0x43, 0x06, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x43, 0x1F, 0x01, 0xFF, -/* 0000BAF0 */ 0x42, 0x8C, 0x03, 0x02, 0x42, 0x4B, 0x42, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x2B, -/* 0000BB00 */ 0x5A, 0x02, 0x0E, 0x5A, 0x03, 0x0A, 0xCC, 0x43, 0x03, 0x9F, 0x00, 0x0F, 0x43, 0x9F, 0x01, 0x10, -/* 0000BB10 */ 0x43, 0x9F, 0x02, 0x11, 0x43, 0x5A, 0x04, 0x43, 0xA6, 0x43, 0x5A, 0x05, 0x43, 0x1F, 0x06, 0x42, -/* 0000BB20 */ 0x42, 0x47, 0x30, 0x42, 0x8C, 0x03, 0x02, 0x42, 0x4B, 0x42, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, -/* 0000BB30 */ 0x5A, 0x01, 0x2B, 0x5A, 0x02, 0x12, 0x5A, 0x03, 0x0A, 0xCC, 0x43, 0x03, 0x9F, 0x00, 0x0F, 0x43, -/* 0000BB40 */ 0x9F, 0x01, 0x10, 0x43, 0x9F, 0x02, 0x11, 0x43, 0x5A, 0x04, 0x43, 0xA6, 0x43, 0x5A, 0x05, 0x43, -/* 0000BB50 */ 0x1F, 0x06, 0x42, 0x42, 0x47, 0x31, 0x42, 0x8C, 0x03, 0x02, 0x42, 0x4B, 0x42, 0x07, 0x06, 0x00, -/* 0000BB60 */ 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x2B, 0x5A, 0x02, 0x13, 0x5A, 0x03, 0x0A, 0xCC, 0x43, 0x02, 0x9F, -/* 0000BB70 */ 0x00, 0x14, 0x43, 0x9F, 0x01, 0x15, 0x43, 0x5A, 0x04, 0x43, 0xA6, 0x43, 0x5A, 0x05, 0x43, 0x1F, -/* 0000BB80 */ 0x06, 0x42, 0x42, 0x47, 0x32, 0x42, 0x8C, 0x03, 0x02, 0x42, 0x4B, 0x42, 0x07, 0x06, 0x00, 0x5A, -/* 0000BB90 */ 0x00, 0x04, 0x5A, 0x01, 0x2B, 0x5A, 0x02, 0x16, 0x5A, 0x03, 0x0A, 0xCC, 0x43, 0x05, 0x9F, 0x00, -/* 0000BBA0 */ 0x14, 0x43, 0x9F, 0x01, 0x15, 0x43, 0x9F, 0x02, 0x0F, 0x43, 0x9F, 0x03, 0x10, 0x43, 0x9F, 0x04, -/* 0000BBB0 */ 0x11, 0x43, 0x5A, 0x04, 0x43, 0xA6, 0x43, 0x5A, 0x05, 0x43, 0x1F, 0x06, 0x42, 0x42, 0x47, 0x33, -/* 0000BBC0 */ 0x42, 0x8C, 0x03, 0x02, 0x42, 0x4B, 0x42, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x2B, -/* 0000BBD0 */ 0x5A, 0x02, 0x17, 0x5A, 0x03, 0x0A, 0xCC, 0x43, 0x02, 0x9F, 0x00, 0x14, 0x43, 0x9F, 0x01, 0x15, -/* 0000BBE0 */ 0x43, 0x5A, 0x04, 0x43, 0xA6, 0x43, 0x5A, 0x05, 0x43, 0x1F, 0x06, 0x42, 0x42, 0x47, 0x34, 0x42, -/* 0000BBF0 */ 0x8C, 0x03, 0x02, 0x42, 0x4B, 0x42, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x2B, 0x5A, -/* 0000BC00 */ 0x02, 0x18, 0x5A, 0x03, 0x0A, 0xCC, 0x43, 0x02, 0x9F, 0x00, 0x14, 0x43, 0x9F, 0x01, 0x15, 0x43, -/* 0000BC10 */ 0x5A, 0x04, 0x43, 0xA6, 0x43, 0x5A, 0x05, 0x43, 0x1F, 0x06, 0x42, 0x42, 0x47, 0x35, 0x42, 0x8C, -/* 0000BC20 */ 0x03, 0x02, 0x42, 0x4B, 0x42, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x2B, 0x5A, 0x02, -/* 0000BC30 */ 0x19, 0x5A, 0x03, 0x0A, 0xCC, 0x43, 0x02, 0x9F, 0x00, 0x14, 0x43, 0x9F, 0x01, 0x15, 0x43, 0x5A, -/* 0000BC40 */ 0x04, 0x43, 0xA6, 0x43, 0x5A, 0x05, 0x43, 0x1F, 0x06, 0x42, 0x42, 0x47, 0x36, 0x42, 0x8C, 0x03, -/* 0000BC50 */ 0x02, 0x42, 0x4B, 0x42, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x2B, 0x5A, 0x02, 0x1A, -/* 0000BC60 */ 0x5A, 0x03, 0x0A, 0xCC, 0x43, 0x02, 0x9F, 0x00, 0x14, 0x43, 0x9F, 0x01, 0x15, 0x43, 0x5A, 0x04, -/* 0000BC70 */ 0x43, 0xA6, 0x43, 0x5A, 0x05, 0x43, 0x1F, 0x06, 0x42, 0x42, 0x47, 0x37, 0x42, 0x8C, 0x03, 0x02, -/* 0000BC80 */ 0x42, 0x4B, 0x42, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x2B, 0x5A, 0x02, 0x1B, 0x5A, -/* 0000BC90 */ 0x03, 0x0A, 0xCC, 0x43, 0x02, 0x9F, 0x00, 0x10, 0x43, 0x9F, 0x01, 0x11, 0x43, 0x5A, 0x04, 0x43, -/* 0000BCA0 */ 0xA6, 0x43, 0x5A, 0x05, 0x43, 0x1F, 0x06, 0x42, 0x42, 0x47, 0x38, 0x42, 0x0E, 0x29, 0x00, 0x35, -/* 0000BCB0 */ 0x8C, 0x03, 0x02, 0x43, 0x4B, 0x43, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x2B, 0x5A, -/* 0000BCC0 */ 0x02, 0x1C, 0x5A, 0x03, 0x1D, 0xA6, 0x44, 0x5A, 0x04, 0x44, 0xA6, 0x44, 0x5A, 0x05, 0x44, 0x1F, -/* 0000BCD0 */ 0x06, 0x43, 0x43, 0x47, 0x42, 0x43, 0x09, 0x05, 0x00, 0xA6, 0x43, 0x47, 0x42, 0x43, 0x47, 0x39, -/* 0000BCE0 */ 0x42, 0x8C, 0x03, 0x02, 0x42, 0x4B, 0x42, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x2B, -/* 0000BCF0 */ 0x5A, 0x02, 0x1E, 0x5A, 0x03, 0x0A, 0xCC, 0x43, 0x02, 0x9F, 0x00, 0x1F, 0x43, 0x9F, 0x01, 0x0C, -/* 0000BD00 */ 0x43, 0x5A, 0x04, 0x43, 0x5A, 0x05, 0x0C, 0x1F, 0x06, 0x42, 0x42, 0x47, 0x3A, 0x42, 0xA6, 0x42, -/* 0000BD10 */ 0x15, 0x03, 0x00, 0x39, 0x42, 0x09, 0x13, 0x00, 0x0E, 0x06, 0x00, 0x39, 0x47, 0x43, 0x20, 0x09, -/* 0000BD20 */ 0x03, 0x00, 0x47, 0x43, 0x21, 0x47, 0x42, 0x43, 0x09, 0x05, 0x00, 0xA6, 0x43, 0x47, 0x42, 0x43, -/* 0000BD30 */ 0x47, 0x3B, 0x42, 0x8C, 0x01, 0x03, 0x42, 0x4B, 0x42, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, 0x8C, -/* 0000BD40 */ 0x04, 0x04, 0x43, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x04, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 0000BD50 */ 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x78, 0x30, 0x44, 0x07, 0x78, 0x31, 0x44, 0x08, 0x78, 0x32, -/* 0000BD60 */ 0x44, 0x09, 0x78, 0x33, 0x44, 0x0A, 0x78, 0x34, 0x44, 0x0B, 0x78, 0x35, 0x44, 0x0C, 0x78, 0x36, -/* 0000BD70 */ 0x44, 0x0D, 0x78, 0x37, 0x44, 0x0E, 0x78, 0x38, 0x44, 0x0F, 0x5A, 0x01, 0x44, 0x5A, 0x02, 0x22, -/* 0000BD80 */ 0x1F, 0x03, 0x43, 0x43, 0x5A, 0x01, 0x43, 0x1F, 0x02, 0x42, 0x42, 0x47, 0x3C, 0x42, 0x8C, 0x03, -/* 0000BD90 */ 0x07, 0x42, 0x4B, 0x42, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x2A, 0x1F, 0x02, 0x42, -/* 0000BDA0 */ 0x42, 0x47, 0x2A, 0x42, 0x8C, 0x04, 0x2A, 0x42, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, -/* 0000BDB0 */ 0x2A, 0x5A, 0x02, 0x2E, 0xCC, 0x43, 0x02, 0x9F, 0x00, 0x23, 0x43, 0x9F, 0x01, 0x24, 0x43, 0x5A, -/* 0000BDC0 */ 0x03, 0x43, 0x8C, 0x04, 0x2B, 0x43, 0x5A, 0x04, 0x43, 0x1F, 0x05, 0x42, 0x42, 0x47, 0x3D, 0x42, -/* 0000BDD0 */ 0x74, 0x2E, 0x29, 0x10, 0x74, 0x2F, 0x29, 0x11, 0x5F, 0x42, 0x3D, 0x12, 0x74, 0x42, 0x29, 0x13, -/* 0000BDE0 */ 0x74, 0x30, 0x29, 0x14, 0x74, 0x31, 0x29, 0x15, 0x74, 0x32, 0x29, 0x16, 0x74, 0x33, 0x29, 0x17, -/* 0000BDF0 */ 0x74, 0x34, 0x29, 0x18, 0x74, 0x35, 0x29, 0x19, 0x74, 0x36, 0x29, 0x1A, 0x74, 0x37, 0x29, 0x1B, -/* 0000BE00 */ 0x74, 0x38, 0x29, 0x1C, 0x74, 0x39, 0x29, 0x1D, 0x74, 0x3A, 0x29, 0x1E, 0x74, 0x3B, 0x29, 0x1F, -/* 0000BE10 */ 0x74, 0x3C, 0x29, 0x20, 0x47, 0x3E, 0x25, 0xE5, 0x1A, 0x00, 0x8C, 0x03, 0x0B, 0x42, 0x4B, 0x42, -/* 0000BE20 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x29, 0x5A, 0x02, 0x25, 0x1F, 0x03, 0xFF, 0x42, -/* 0000BE30 */ 0xE9, 0x09, 0x51, 0x00, 0xE7, 0x2C, 0x06, 0x8C, 0x04, 0x22, 0x42, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 0000BE40 */ 0x04, 0x5A, 0x01, 0x2C, 0x1F, 0x02, 0xFF, 0x42, 0x8C, 0x01, 0x02, 0x42, 0x4B, 0x42, 0x07, 0x04, -/* 0000BE50 */ 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x2B, 0x5A, 0x02, 0x26, 0x5A, 0x03, 0x27, 0x1F, 0x04, 0x42, -/* 0000BE60 */ 0x42, 0x47, 0x3F, 0x42, 0x47, 0x42, 0x29, 0x8C, 0x01, 0x03, 0x43, 0x4B, 0x43, 0x07, 0x03, 0x00, -/* 0000BE70 */ 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x3F, 0x5A, 0x02, 0x22, 0x1F, 0x03, 0x43, 0x43, 0x74, 0x43, 0x42, -/* 0000BE80 */ 0x21, 0x47, 0x3E, 0x06, 0xE9, 0x0F, 0x25, 0x00, 0x3E, 0x47, 0x42, 0x29, 0x8C, 0x01, 0x07, 0x43, -/* 0000BE90 */ 0x4B, 0x43, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x04, 0x5F, 0x44, 0x29, 0x22, 0x95, 0x44, 0x44, 0x28, -/* 0000BEA0 */ 0x5A, 0x01, 0x44, 0x5A, 0x02, 0x29, 0x1F, 0x03, 0x43, 0x43, 0x74, 0x43, 0x42, 0x21, 0xE5, 0x1A, -/* 0000BEB0 */ 0x00, 0x8C, 0x03, 0x0B, 0x42, 0x4B, 0x42, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x29, -/* 0000BEC0 */ 0x5A, 0x02, 0x06, 0x1F, 0x03, 0xFF, 0x42, 0xE9, 0x09, 0x27, 0x00, 0xE7, 0x2D, 0x06, 0x8C, 0x04, -/* 0000BED0 */ 0x22, 0x42, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x2D, 0x1F, 0x02, 0xFF, 0x42, 0x8C, -/* 0000BEE0 */ 0x04, 0x03, 0x43, 0x6A, 0x42, 0x43, 0x06, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x43, 0x1F, 0x01, 0xFF, -/* 0000BEF0 */ 0x42, 0xE9, 0x8C, 0x01, 0x04, 0x42, 0x4B, 0x42, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, 0x5F, 0x43, -/* 0000BF00 */ 0x29, 0x23, 0x5A, 0x01, 0x43, 0x1F, 0x02, 0x42, 0x42, 0x74, 0x42, 0x29, 0x24, 0x47, 0x42, 0x29, -/* 0000BF10 */ 0x8C, 0x04, 0x06, 0x43, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x04, 0x8C, 0x04, 0x1E, 0x44, 0x5A, 0x01, -/* 0000BF20 */ 0x44, 0x5F, 0x44, 0x29, 0x25, 0x5A, 0x02, 0x44, 0x1F, 0x03, 0x43, 0x43, 0x74, 0x43, 0x42, 0x26, -/* 0000BF30 */ 0x5F, 0x42, 0x29, 0x27, 0xA6, 0x43, 0x15, 0x03, 0x00, 0x42, 0x43, 0x09, 0x0C, 0x00, 0x5F, 0x42, -/* 0000BF40 */ 0x29, 0x28, 0x43, 0x42, 0x42, 0x20, 0x74, 0x42, 0x29, 0x1D, 0x74, 0x06, 0x29, 0x29, 0xA6, 0x00, -/* 0000BF50 */ 0x24, 0x00, 0x01, 0x2C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 0000BF60 */ 0x00, 0x44, 0x02, 0x00, 0x00, 0x3B, 0x02, 0x00, 0x00, 0x45, 0x02, 0x00, 0x00, 0x3F, 0x02, 0x00, -/* 0000BF70 */ 0x00, 0x3A, 0x02, 0x00, 0x00, 0x3C, 0x02, 0x00, 0x00, 0x3E, 0x02, 0x00, 0x00, 0x41, 0x02, 0x00, -/* 0000BF80 */ 0x00, 0x43, 0x02, 0x00, 0x00, 0xFE, 0x89, 0x02, 0xFE, 0xF2, 0x01, 0xFE, 0x8D, 0x02, 0xFE, 0xF2, -/* 0000BF90 */ 0x01, 0xFE, 0xE7, 0x01, 0xFE, 0xE8, 0x01, 0xFE, 0x90, 0x02, 0xFE, 0x44, 0x02, 0xFE, 0x3B, 0x02, -/* 0000BFA0 */ 0xFE, 0x45, 0x02, 0xFE, 0x3F, 0x02, 0xFE, 0x3A, 0x02, 0xFE, 0x3C, 0x02, 0xFE, 0x3E, 0x02, 0xFE, -/* 0000BFB0 */ 0x41, 0x02, 0xFE, 0x43, 0x02, 0xFE, 0x2D, 0x02, 0xFE, 0x33, 0x02, 0xFE, 0xF7, 0x01, 0xFE, 0xF3, -/* 0000BFC0 */ 0x01, 0xFE, 0x35, 0x02, 0xFE, 0x28, 0x02, 0xFE, 0x38, 0x02, 0xFE, 0x2F, 0x02, 0xFE, 0x27, 0x02, -/* 0000BFD0 */ 0xFE, 0x2A, 0x02, 0xFE, 0x2E, 0x02, 0xFE, 0x31, 0x02, 0xFE, 0x34, 0x02, 0xFE, 0x2B, 0x02, 0xFE, -/* 0000BFE0 */ 0x29, 0x02, 0xFE, 0x37, 0x02, 0xFE, 0x0D, 0x02, 0xFE, 0x0D, 0x02, 0xFE, 0x30, 0x02, 0xFE, 0x36, -/* 0000BFF0 */ 0x02, 0xFE, 0x26, 0x02, 0xFE, 0x0C, 0x02, 0xFE, 0x0C, 0x02, 0xFE, 0x2A, 0x02, 0xFE, 0x37, 0x02, -/* 0000C000 */ 0xFE, 0x2C, 0x02, 0xFF, 0x8C, 0x7B, 0x02, 0x00, 0x3F, 0x02, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3D, -/* 0000C010 */ 0x00, 0x12, 0x00, 0x3F, 0x00, 0x27, 0x00, 0x9F, 0x00, 0x18, 0x00, 0x71, 0x00, 0x04, 0x00, 0x67, -/* 0000C020 */ 0x00, 0x1C, 0x00, 0x46, 0x00, 0x2D, 0x00, 0x71, 0x00, 0x26, 0x00, 0x60, 0x00, 0x0A, 0x00, 0x32, -/* 0000C030 */ 0x00, 0x1B, 0x00, 0x6C, 0x00, 0x15, 0x00, 0x4D, 0x00, 0x0A, 0x00, 0x32, 0x00, 0x12, 0x00, 0x6C, -/* 0000C040 */ 0x00, 0x33, 0x00, 0x6F, 0x00, 0x33, 0x00, 0x67, 0x00, 0x2F, 0x00, 0x64, 0x00, 0x3B, 0x00, 0x81, -/* 0000C050 */ 0x00, 0x2F, 0x00, 0x62, 0x00, 0x2F, 0x00, 0x64, 0x00, 0x2F, 0x00, 0x68, 0x00, 0x2F, 0x00, 0x68, -/* 0000C060 */ 0x00, 0x2F, 0x00, 0x70, 0x00, 0x35, 0x00, 0x6F, 0x00, 0x2D, 0x00, 0x77, 0x00, 0x25, 0x00, 0x71, -/* 0000C070 */ 0x00, 0x5B, 0x00, 0xD0, 0x01, 0x16, 0x00, 0x41, 0x00, 0x2C, 0x00, 0x9A, 0x00, 0x04, 0x00, 0x34, -/* 0000C080 */ 0x00, 0x04, 0x00, 0x36, 0x00, 0x08, 0x00, 0x68, 0x00, 0x04, 0x00, 0x34, 0x00, 0x04, 0x00, 0x2C, -/* 0000C090 */ 0x00, 0x04, 0x00, 0x2E, 0x00, 0x04, 0x00, 0x30, 0x00, 0x04, 0x00, 0x2C, 0x00, 0x04, 0x00, 0x2E, -/* 0000C0A0 */ 0x00, 0x04, 0x00, 0x32, 0x00, 0x04, 0x00, 0x32, 0x00, 0x04, 0x00, 0x3F, 0x00, 0x04, 0x00, 0x32, -/* 0000C0B0 */ 0x00, 0x04, 0x00, 0x40, 0x00, 0x04, 0x00, 0x3F, 0x00, 0x04, 0x00, 0x0F, 0x03, 0x06, 0x00, 0x93, -/* 0000C0C0 */ 0x00, 0x1C, 0x00, 0x3F, 0x00, 0x01, 0x00, 0x4A, 0x00, 0x11, 0x00, 0xEF, 0x00, 0x1C, 0x00, 0x54, -/* 0000C0D0 */ 0x00, 0x1D, 0x00, 0x6A, 0x00, 0x04, 0x00, 0x37, 0x00, 0x04, 0x00, 0x5A, 0x00, 0x28, 0x00, 0xDE, -/* 0000C0E0 */ 0x00, 0x1C, 0x00, 0x3E, 0x00, 0x01, 0x00, 0x4A, 0x00, 0x11, 0x00, 0x77, 0x01, 0x13, 0x00, 0x77, -/* 0000C0F0 */ 0x00, 0x1B, 0x00, 0x66, 0x00, 0x23, 0x00, 0x82, 0x00, 0x0E, 0x00, 0x3F, 0x00, 0x0C, 0x00, 0x6D, -/* 0000C100 */ 0x00, 0x06, 0x00, 0x3F, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x23, 0x88, 0x01, 0x00, 0xFE, 0x78, -/* 0000C110 */ 0x0D, 0x0C, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0xEC, 0x04, 0xBE, 0xFF, 0xF8, 0x6D, 0x02, 0x00, 0xFF, -/* 0000C120 */ 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFF, 0xF8, 0x6D, 0x02, 0x00, 0xFE, 0x2D, 0x0D, 0xFE, 0x2D, -/* 0000C130 */ 0x0D, 0x01, 0x07, 0x12, 0x16, 0x06, 0xC8, 0xBB, 0x04, 0x07, 0x0A, 0x0A, 0x0A, 0x0A, 0x02, 0x15, -/* 0000C140 */ 0x05, 0xFE, 0x07, 0x05, 0x08, 0x06, 0xFE, 0x45, 0x04, 0x07, 0x05, 0xFE, 0x08, 0x05, 0x01, 0x00, -/* 0000C150 */ 0x05, 0xFE, 0x09, 0x05, 0x05, 0xFE, 0xFC, 0x04, 0x05, 0xFE, 0x0A, 0x05, 0x06, 0xFE, 0x13, 0x04, -/* 0000C160 */ 0x06, 0xFE, 0x49, 0x04, 0x06, 0xFE, 0x4A, 0x04, 0x06, 0xFE, 0x4B, 0x04, 0x06, 0xFE, 0x4C, 0x04, -/* 0000C170 */ 0x06, 0xFE, 0x4D, 0x04, 0x05, 0xFE, 0x0B, 0x05, 0xFE, 0x9A, 0x02, 0xA6, 0x14, 0x5F, 0x16, 0x13, -/* 0000C180 */ 0x00, 0xA6, 0x17, 0x15, 0x03, 0x00, 0x16, 0x17, 0x09, 0x20, 0x00, 0x8C, 0x01, 0x05, 0x16, 0x4B, -/* 0000C190 */ 0x16, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x5A, 0x01, 0x12, 0x5F, 0x17, 0x13, 0x00, 0x5A, 0x02, -/* 0000C1A0 */ 0x17, 0x5A, 0x03, 0x02, 0x1F, 0x04, 0x16, 0x16, 0x47, 0x12, 0x16, 0x5F, 0x16, 0x13, 0x01, 0xA6, -/* 0000C1B0 */ 0x17, 0x15, 0x03, 0x00, 0x16, 0x17, 0x09, 0x00, 0x00, 0x5F, 0x16, 0x13, 0x02, 0x14, 0x03, 0x00, -/* 0000C1C0 */ 0x16, 0x04, 0x09, 0x70, 0x00, 0x8C, 0x04, 0x03, 0x17, 0x6A, 0x16, 0x17, 0x03, 0x07, 0x03, 0x00, -/* 0000C1D0 */ 0x5A, 0x00, 0x17, 0x5A, 0x01, 0x12, 0xE0, 0x18, 0x00, 0x5A, 0x02, 0x18, 0x1F, 0x03, 0x16, 0x16, -/* 0000C1E0 */ 0x47, 0x14, 0x16, 0x14, 0x03, 0x00, 0x14, 0x05, 0x09, 0x22, 0x00, 0x8C, 0x04, 0x0E, 0x16, 0x07, -/* 0000C1F0 */ 0x02, 0x00, 0x5A, 0x00, 0x03, 0x8C, 0x04, 0x0D, 0x17, 0x07, 0x02, 0x00, 0x5A, 0x01, 0x06, 0xC1, -/* 0000C200 */ 0x02, 0x17, 0x17, 0x5A, 0x01, 0x17, 0x1F, 0x02, 0xFF, 0x16, 0x09, 0x25, 0x00, 0x8C, 0x04, 0x06, -/* 0000C210 */ 0x16, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x03, 0x8C, 0x04, 0x1D, 0x17, 0x5A, 0x01, 0x17, 0x5A, 0x02, -/* 0000C220 */ 0x12, 0x95, 0x17, 0x14, 0x07, 0x5A, 0x03, 0x17, 0x5A, 0x04, 0x08, 0x1F, 0x05, 0x16, 0x16, 0x47, -/* 0000C230 */ 0x12, 0x16, 0x09, 0x79, 0x00, 0x5F, 0x16, 0x13, 0x02, 0x14, 0x03, 0x00, 0x16, 0x09, 0x09, 0x6D, -/* 0000C240 */ 0x00, 0x8C, 0x04, 0x03, 0x17, 0x6A, 0x16, 0x17, 0x03, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x17, 0x5A, -/* 0000C250 */ 0x01, 0x12, 0xE0, 0x18, 0x01, 0x5A, 0x02, 0x18, 0x1F, 0x03, 0x16, 0x16, 0x47, 0x14, 0x16, 0x14, -/* 0000C260 */ 0x03, 0x00, 0x14, 0x05, 0x09, 0x22, 0x00, 0x8C, 0x04, 0x0E, 0x16, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 0000C270 */ 0x03, 0x8C, 0x04, 0x0D, 0x17, 0x07, 0x02, 0x00, 0x5A, 0x01, 0x06, 0xC1, 0x02, 0x17, 0x17, 0x5A, -/* 0000C280 */ 0x01, 0x17, 0x1F, 0x02, 0xFF, 0x16, 0x09, 0x25, 0x00, 0x8C, 0x04, 0x06, 0x16, 0x07, 0x05, 0x00, -/* 0000C290 */ 0x5A, 0x00, 0x03, 0x8C, 0x04, 0x1D, 0x17, 0x5A, 0x01, 0x17, 0x5A, 0x02, 0x12, 0x95, 0x17, 0x14, -/* 0000C2A0 */ 0x07, 0x5A, 0x03, 0x17, 0x5A, 0x04, 0x0A, 0x1F, 0x05, 0x16, 0x16, 0x47, 0x12, 0x16, 0x5F, 0x16, -/* 0000C2B0 */ 0x13, 0x04, 0xA6, 0x17, 0x15, 0x03, 0x00, 0x16, 0x17, 0x09, 0x3B, 0x00, 0x5F, 0x16, 0x13, 0x04, -/* 0000C2C0 */ 0x15, 0x03, 0x00, 0x16, 0x04, 0x09, 0x2F, 0x00, 0x5F, 0x16, 0x13, 0x04, 0x15, 0x03, 0x00, 0x16, -/* 0000C2D0 */ 0x0B, 0x09, 0x23, 0x00, 0x8C, 0x01, 0x05, 0x16, 0x4B, 0x16, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, -/* 0000C2E0 */ 0x5A, 0x01, 0x12, 0x5F, 0x17, 0x13, 0x04, 0x5A, 0x02, 0x17, 0x5A, 0x03, 0x0C, 0x1F, 0x04, 0x16, -/* 0000C2F0 */ 0x16, 0x47, 0x12, 0x16, 0x09, 0x2E, 0x00, 0x5F, 0x16, 0x13, 0x04, 0xA6, 0x17, 0x15, 0x03, 0x00, -/* 0000C300 */ 0x16, 0x17, 0x09, 0x20, 0x00, 0x8C, 0x01, 0x06, 0x16, 0x4B, 0x16, 0x07, 0x04, 0x00, 0x5A, 0x00, -/* 0000C310 */ 0x03, 0x5A, 0x01, 0x12, 0x5F, 0x17, 0x13, 0x04, 0x5A, 0x02, 0x17, 0x5A, 0x03, 0x0C, 0x1F, 0x04, -/* 0000C320 */ 0x16, 0x16, 0x47, 0x12, 0x16, 0x5F, 0x16, 0x13, 0x05, 0xA6, 0x17, 0x15, 0x03, 0x00, 0x16, 0x17, -/* 0000C330 */ 0x09, 0x20, 0x00, 0x8C, 0x01, 0x06, 0x16, 0x4B, 0x16, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x5A, -/* 0000C340 */ 0x01, 0x12, 0x5F, 0x17, 0x13, 0x05, 0x5A, 0x02, 0x17, 0x5A, 0x03, 0x0D, 0x1F, 0x04, 0x16, 0x16, -/* 0000C350 */ 0x47, 0x12, 0x16, 0x5F, 0x16, 0x13, 0x06, 0xA6, 0x17, 0x15, 0x03, 0x00, 0x16, 0x17, 0x09, 0x20, -/* 0000C360 */ 0x00, 0x8C, 0x01, 0x06, 0x16, 0x4B, 0x16, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x5A, 0x01, 0x12, -/* 0000C370 */ 0x5F, 0x17, 0x13, 0x06, 0x5A, 0x02, 0x17, 0x5A, 0x03, 0x0E, 0x1F, 0x04, 0x16, 0x16, 0x47, 0x12, -/* 0000C380 */ 0x16, 0x5F, 0x16, 0x13, 0x07, 0xA6, 0x17, 0x15, 0x03, 0x00, 0x16, 0x17, 0x09, 0x20, 0x00, 0x8C, -/* 0000C390 */ 0x01, 0x06, 0x16, 0x4B, 0x16, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x5A, 0x01, 0x12, 0x5F, 0x17, -/* 0000C3A0 */ 0x13, 0x07, 0x5A, 0x02, 0x17, 0x5A, 0x03, 0x0F, 0x1F, 0x04, 0x16, 0x16, 0x47, 0x12, 0x16, 0x5F, -/* 0000C3B0 */ 0x16, 0x13, 0x08, 0xA6, 0x17, 0x15, 0x03, 0x00, 0x16, 0x17, 0x09, 0x20, 0x00, 0x8C, 0x01, 0x06, -/* 0000C3C0 */ 0x16, 0x4B, 0x16, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x5A, 0x01, 0x12, 0x5F, 0x17, 0x13, 0x08, -/* 0000C3D0 */ 0x5A, 0x02, 0x17, 0x5A, 0x03, 0x10, 0x1F, 0x04, 0x16, 0x16, 0x47, 0x12, 0x16, 0x5F, 0x16, 0x13, -/* 0000C3E0 */ 0x09, 0xA6, 0x17, 0x15, 0x03, 0x00, 0x16, 0x17, 0x09, 0x20, 0x00, 0x8C, 0x01, 0x05, 0x16, 0x4B, -/* 0000C3F0 */ 0x16, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x5A, 0x01, 0x12, 0x5F, 0x17, 0x13, 0x09, 0x5A, 0x02, -/* 0000C400 */ 0x17, 0x5A, 0x03, 0x11, 0x1F, 0x04, 0x16, 0x16, 0x47, 0x12, 0x16, 0x47, 0x00, 0x12, 0x09, 0x02, -/* 0000C410 */ 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x35, 0x02, 0xFE, 0x28, 0x02, 0xFE, 0x38, 0x02, 0xFE, 0x83, -/* 0000C420 */ 0x02, 0xFE, 0x2F, 0x02, 0xFE, 0x27, 0x02, 0xFE, 0x2A, 0x02, 0xFE, 0x2E, 0x02, 0xFE, 0x31, 0x02, -/* 0000C430 */ 0xFE, 0x34, 0x02, 0x1C, 0xFE, 0x0C, 0x05, 0x00, 0x1C, 0xFE, 0x0C, 0x05, 0x00, 0xFF, 0x47, 0x6E, -/* 0000C440 */ 0x02, 0x00, 0x1D, 0x02, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x42, 0x00, 0x20, 0x00, 0x88, 0x00, 0x0E, -/* 0000C450 */ 0x00, 0x8E, 0x01, 0x0C, 0x00, 0x3F, 0x00, 0x1E, 0x00, 0x6B, 0x00, 0x08, 0x00, 0x2E, 0x00, 0x22, -/* 0000C460 */ 0x00, 0x91, 0x00, 0x28, 0x00, 0x98, 0x00, 0x0C, 0x00, 0x3C, 0x00, 0x1E, 0x00, 0x6B, 0x00, 0x08, -/* 0000C470 */ 0x00, 0x2E, 0x00, 0x22, 0x00, 0x91, 0x00, 0x25, 0x00, 0x2F, 0x01, 0x26, 0x00, 0x90, 0x00, 0x23, -/* 0000C480 */ 0x00, 0x76, 0x00, 0x0E, 0x00, 0x40, 0x00, 0x20, 0x00, 0x8B, 0x00, 0x0E, 0x00, 0x3E, 0x00, 0x20, -/* 0000C490 */ 0x00, 0x87, 0x00, 0x0E, 0x00, 0x3F, 0x00, 0x20, 0x00, 0x89, 0x00, 0x0E, 0x00, 0x41, 0x00, 0x20, -/* 0000C4A0 */ 0x00, 0x8D, 0x00, 0x0E, 0x00, 0x41, 0x00, 0x20, 0x00, 0x8D, 0x00, 0x0E, 0x00, 0x47, 0x00, 0x20, -/* 0000C4B0 */ 0x00, 0x8C, 0x00, 0x08, 0x00, 0x22, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, -/* 0000C4C0 */ 0xFE, 0x64, 0x0D, 0x0C, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0xEB, 0x04, 0xBD, 0xFF, 0x90, 0x68, 0x02, -/* 0000C4D0 */ 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFF, 0x90, 0x68, 0x02, 0x00, 0xFE, 0xF8, 0x04, -/* 0000C4E0 */ 0xFE, 0xF8, 0x04, 0x01, 0x09, 0x11, 0x16, 0x07, 0x43, 0x40, 0x04, 0x06, 0x01, 0x01, 0x01, 0x01, -/* 0000C4F0 */ 0x15, 0x05, 0xFE, 0xF7, 0x04, 0x05, 0xFE, 0x02, 0x05, 0x08, 0x07, 0x05, 0xFE, 0x03, 0x05, 0x05, -/* 0000C500 */ 0xFE, 0xFA, 0x04, 0x05, 0xFE, 0xFB, 0x04, 0x06, 0xFE, 0x45, 0x04, 0x01, 0x00, 0x06, 0xFE, 0xFD, -/* 0000C510 */ 0x04, 0x01, 0x01, 0x05, 0xFE, 0x04, 0x05, 0x01, 0x02, 0x05, 0xFE, 0x05, 0x05, 0x05, 0xFE, 0x06, -/* 0000C520 */ 0x05, 0xEA, 0x8C, 0x04, 0x03, 0x17, 0x6A, 0x16, 0x17, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x17, -/* 0000C530 */ 0x5A, 0x01, 0x11, 0x8C, 0x04, 0x09, 0x18, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, 0xFB, 0x19, 0x02, -/* 0000C540 */ 0x13, 0x03, 0x5A, 0x01, 0x19, 0x1F, 0x02, 0x18, 0x18, 0x5A, 0x02, 0x18, 0x1F, 0x03, 0x16, 0x16, -/* 0000C550 */ 0x47, 0x14, 0x16, 0x14, 0x03, 0x00, 0x14, 0x05, 0x09, 0x34, 0x00, 0x8C, 0x04, 0x0E, 0x16, 0x07, -/* 0000C560 */ 0x02, 0x00, 0x5A, 0x00, 0x04, 0x8C, 0x04, 0x0D, 0x17, 0x07, 0x02, 0x00, 0xFC, 0x18, 0x06, 0x11, -/* 0000C570 */ 0x06, 0xFE, 0x18, 0x07, 0x02, 0x02, 0xFE, 0x18, 0x13, 0x08, 0x04, 0x5A, 0x01, 0x18, 0xC1, 0x02, -/* 0000C580 */ 0x17, 0x17, 0x5A, 0x01, 0x17, 0x1F, 0x02, 0xFF, 0x16, 0x47, 0x00, 0x11, 0x09, 0x7B, 0x00, 0x14, -/* 0000C590 */ 0x03, 0x00, 0x12, 0x09, 0x09, 0x31, 0x00, 0x8C, 0x04, 0x06, 0x16, 0x07, 0x05, 0x00, 0x5A, 0x00, -/* 0000C5A0 */ 0x04, 0x8C, 0x04, 0x1D, 0x17, 0x5A, 0x01, 0x17, 0x5A, 0x02, 0x11, 0x95, 0x17, 0x14, 0x0A, 0x5A, -/* 0000C5B0 */ 0x03, 0x17, 0x95, 0x17, 0x14, 0x0C, 0xFB, 0x17, 0x0B, 0x17, 0x0D, 0x5A, 0x04, 0x17, 0x1F, 0x05, -/* 0000C5C0 */ 0x00, 0x16, 0x09, 0x45, 0x00, 0x09, 0x3A, 0x00, 0x95, 0x16, 0x14, 0x0E, 0x15, 0x03, 0x00, 0x16, -/* 0000C5D0 */ 0x0F, 0x09, 0x2E, 0x00, 0x8C, 0x04, 0x06, 0x16, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x04, 0x8C, 0x04, -/* 0000C5E0 */ 0x1D, 0x17, 0x5A, 0x01, 0x17, 0x5A, 0x02, 0x11, 0x95, 0x17, 0x14, 0x0A, 0x5A, 0x03, 0x17, 0x95, -/* 0000C5F0 */ 0x17, 0x14, 0x0C, 0xFB, 0x17, 0x0B, 0x17, 0x10, 0x5A, 0x04, 0x17, 0x1F, 0x05, 0x00, 0x16, 0x09, -/* 0000C600 */ 0x08, 0x00, 0x47, 0x00, 0x11, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x83, 0x02, 0xFF, -/* 0000C610 */ 0xB7, 0x69, 0x02, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x31, 0x00, 0x91, 0x00, 0x08, 0x00, 0x2A, -/* 0000C620 */ 0x00, 0x2E, 0x00, 0x00, 0x01, 0x06, 0x00, 0x83, 0x00, 0x08, 0x00, 0x33, 0x00, 0x31, 0x00, 0x81, -/* 0000C630 */ 0x00, 0x0C, 0x00, 0x32, 0x00, 0x2E, 0x00, 0x8A, 0x00, 0x08, 0x00, 0x22, 0x00, 0x00, 0xBF, 0x5C, -/* 0000C640 */ 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x53, 0x0D, 0x0C, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0xEA, -/* 0000C650 */ 0x04, 0xBC, 0xFF, 0x62, 0x63, 0x02, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFF, 0x62, -/* 0000C660 */ 0x63, 0x02, 0x00, 0xFE, 0x20, 0x05, 0xFE, 0x20, 0x05, 0x01, 0x09, 0x14, 0x19, 0x07, 0x50, 0x4B, -/* 0000C670 */ 0x04, 0x06, 0x01, 0x01, 0x01, 0x01, 0x18, 0x05, 0xFE, 0xF7, 0x04, 0x05, 0xFE, 0xF8, 0x04, 0x08, -/* 0000C680 */ 0x07, 0x05, 0xFE, 0xF9, 0x04, 0x05, 0xFE, 0xFA, 0x04, 0x05, 0xFE, 0xFB, 0x04, 0x01, 0x02, 0x05, -/* 0000C690 */ 0xFE, 0xFC, 0x04, 0x06, 0xFE, 0x44, 0x04, 0x01, 0x00, 0x06, 0xFE, 0xFD, 0x04, 0x01, 0x01, 0x06, -/* 0000C6A0 */ 0xFE, 0xFE, 0x04, 0x06, 0xFE, 0xFF, 0x04, 0x06, 0xFE, 0x43, 0x04, 0x05, 0xFE, 0x00, 0x05, 0x05, -/* 0000C6B0 */ 0xFE, 0x01, 0x05, 0xFE, 0x19, 0x01, 0x8C, 0x04, 0x03, 0x1A, 0x6A, 0x19, 0x1A, 0x00, 0x07, 0x03, -/* 0000C6C0 */ 0x00, 0x5A, 0x00, 0x1A, 0x5A, 0x01, 0x14, 0x8C, 0x04, 0x09, 0x1B, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 0000C6D0 */ 0x04, 0xFB, 0x1C, 0x02, 0x16, 0x03, 0x5A, 0x01, 0x1C, 0x1F, 0x02, 0x1B, 0x1B, 0x5A, 0x02, 0x1B, -/* 0000C6E0 */ 0x1F, 0x03, 0x19, 0x19, 0x47, 0x17, 0x19, 0x14, 0x03, 0x00, 0x17, 0x05, 0x09, 0x34, 0x00, 0x8C, -/* 0000C6F0 */ 0x04, 0x0E, 0x19, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, 0x8C, 0x04, 0x0D, 0x1A, 0x07, 0x02, 0x00, -/* 0000C700 */ 0xFC, 0x1B, 0x06, 0x14, 0x06, 0xFE, 0x1B, 0x07, 0x02, 0x02, 0xFE, 0x1B, 0x16, 0x08, 0x04, 0x5A, -/* 0000C710 */ 0x01, 0x1B, 0xC1, 0x02, 0x1A, 0x1A, 0x5A, 0x01, 0x1A, 0x1F, 0x02, 0xFF, 0x19, 0x47, 0x00, 0x14, -/* 0000C720 */ 0x09, 0xAA, 0x00, 0x95, 0x19, 0x17, 0x09, 0x15, 0x03, 0x00, 0x19, 0x0A, 0x09, 0x44, 0x00, 0x14, -/* 0000C730 */ 0x03, 0x00, 0x15, 0x0B, 0x09, 0x3C, 0x00, 0x8C, 0x04, 0x06, 0x19, 0x07, 0x05, 0x00, 0x5A, 0x00, -/* 0000C740 */ 0x04, 0x8C, 0x04, 0x1D, 0x1A, 0x5A, 0x01, 0x1A, 0x5A, 0x02, 0x14, 0x95, 0x1A, 0x17, 0x0C, 0x5A, -/* 0000C750 */ 0x03, 0x1A, 0x95, 0x1A, 0x17, 0x0E, 0x2F, 0x1A, 0x0D, 0x1A, 0x2F, 0x1A, 0x1A, 0x0F, 0x2F, 0x1A, -/* 0000C760 */ 0x1A, 0x0A, 0x2F, 0x1A, 0x1A, 0x10, 0x5A, 0x04, 0x1A, 0x1F, 0x05, 0x00, 0x19, 0x09, 0x5D, 0x00, -/* 0000C770 */ 0x09, 0x52, 0x00, 0x15, 0x03, 0x00, 0x15, 0x0B, 0x09, 0x4A, 0x00, 0x8C, 0x04, 0x06, 0x19, 0x07, -/* 0000C780 */ 0x05, 0x00, 0x5A, 0x00, 0x04, 0x8C, 0x04, 0x1D, 0x1A, 0x5A, 0x01, 0x1A, 0x5A, 0x02, 0x14, 0x95, -/* 0000C790 */ 0x1A, 0x17, 0x0C, 0x5A, 0x03, 0x1A, 0x95, 0x1A, 0x17, 0x0E, 0x2F, 0x1A, 0x0D, 0x1A, 0x2F, 0x1A, -/* 0000C7A0 */ 0x1A, 0x0F, 0x14, 0x03, 0x00, 0x15, 0x11, 0x09, 0x06, 0x00, 0x47, 0x1B, 0x12, 0x09, 0x03, 0x00, -/* 0000C7B0 */ 0x47, 0x1B, 0x13, 0x2F, 0x1A, 0x1A, 0x1B, 0x2F, 0x1A, 0x1A, 0x10, 0x5A, 0x04, 0x1A, 0x1F, 0x05, -/* 0000C7C0 */ 0x00, 0x19, 0x09, 0x08, 0x00, 0x47, 0x00, 0x14, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, -/* 0000C7D0 */ 0x83, 0x02, 0xFF, 0x38, 0x64, 0x02, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x31, 0x00, 0x0F, 0x01, -/* 0000C7E0 */ 0x08, 0x00, 0x2A, 0x00, 0x2E, 0x00, 0xF5, 0x00, 0x06, 0x00, 0x39, 0x00, 0x14, 0x00, 0x47, 0x00, -/* 0000C7F0 */ 0x3C, 0x00, 0x85, 0x00, 0x08, 0x00, 0x30, 0x00, 0x4A, 0x00, 0xC4, 0x00, 0x08, 0x00, 0x22, 0x00, -/* 0000C800 */ 0x00, 0xBF, 0x4C, 0x00, 0x01, 0x00, 0x88, 0x01, 0x00, 0xFE, 0x4A, 0x0D, 0x0C, 0xA3, 0x41, 0xC1, -/* 0000C810 */ 0x00, 0xFE, 0xE9, 0x04, 0xBB, 0xFF, 0xFB, 0x61, 0x02, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, -/* 0000C820 */ 0x02, 0xFF, 0xFB, 0x61, 0x02, 0x00, 0xE9, 0xE9, 0x01, 0x03, 0x05, 0x07, 0x0E, 0x0B, 0x04, 0x01, -/* 0000C830 */ 0x06, 0x06, 0xFE, 0xF5, 0x03, 0x06, 0xFE, 0x5B, 0x03, 0x05, 0xFE, 0xD7, 0x04, 0x2A, 0x2C, 0x07, -/* 0000C840 */ 0x05, 0x14, 0x03, 0x00, 0x07, 0x02, 0x09, 0x06, 0x00, 0x47, 0x00, 0x03, 0x09, 0x17, 0x00, 0x8C, -/* 0000C850 */ 0x02, 0x02, 0x07, 0x95, 0x07, 0x07, 0x05, 0x47, 0x00, 0x07, 0x0F, 0x03, 0x00, 0x07, 0x47, 0x00, -/* 0000C860 */ 0x04, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFF, 0x36, 0x62, 0x02, 0x00, 0x04, 0x00, 0x00, -/* 0000C870 */ 0x00, 0x00, 0x0B, 0x00, 0x3B, 0x00, 0x06, 0x00, 0x2E, 0x00, 0x17, 0x00, 0x44, 0x00, 0x00, 0x3F, -/* 0000C880 */ 0x5D, 0x00, 0xC1, 0x03, 0x8D, 0x05, 0x00, 0xFE, 0x0A, 0x0D, 0x0C, 0xA3, 0x41, 0xC1, 0x00, 0xFE, -/* 0000C890 */ 0xE8, 0x04, 0xB9, 0xFF, 0x83, 0x56, 0x02, 0x00, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, -/* 0000C8A0 */ 0xFF, 0x83, 0x56, 0x02, 0x00, 0xFE, 0x95, 0x09, 0xFE, 0x95, 0x09, 0x02, 0xFE, 0xED, 0x04, 0xFE, -/* 0000C8B0 */ 0xCA, 0x01, 0x06, 0x17, 0x1B, 0x05, 0xC4, 0xC2, 0x04, 0x07, 0x05, 0x05, 0x05, 0x05, 0x18, 0x19, -/* 0000C8C0 */ 0x1A, 0x06, 0xFE, 0x42, 0x04, 0x06, 0xFE, 0x43, 0x04, 0x05, 0xFE, 0xEE, 0x04, 0x08, 0x06, 0xFE, -/* 0000C8D0 */ 0x44, 0x04, 0x05, 0xFE, 0xEF, 0x04, 0x06, 0xFE, 0x45, 0x04, 0x05, 0xFE, 0xF0, 0x04, 0x06, 0xFE, -/* 0000C8E0 */ 0x13, 0x04, 0x05, 0xFE, 0xF1, 0x04, 0x05, 0xFE, 0xF2, 0x04, 0x05, 0xFE, 0xF3, 0x04, 0x05, 0xFE, -/* 0000C8F0 */ 0xF4, 0x04, 0x06, 0xFE, 0x4A, 0x04, 0x05, 0xFE, 0xF5, 0x04, 0x05, 0xFE, 0xF6, 0x04, 0x06, 0xFE, -/* 0000C900 */ 0x4B, 0x04, 0x06, 0xFE, 0x4C, 0x04, 0x06, 0xFE, 0x4D, 0x04, 0x01, 0x00, 0x06, 0xFE, 0x85, 0x04, -/* 0000C910 */ 0xFE, 0x9F, 0x02, 0x94, 0x03, 0x17, 0xCC, 0x1B, 0x00, 0x94, 0x02, 0x1B, 0x90, 0x03, 0x1B, 0x5F, -/* 0000C920 */ 0x1B, 0x1B, 0x00, 0x0E, 0x69, 0x00, 0x1B, 0x90, 0x03, 0x1B, 0x5F, 0x1B, 0x1B, 0x00, 0x14, 0x0F, -/* 0000C930 */ 0x00, 0x1B, 0x02, 0x90, 0x03, 0x1B, 0x5F, 0x1B, 0x1B, 0x00, 0x14, 0x03, 0x00, 0x1B, 0x03, 0x09, -/* 0000C940 */ 0x21, 0x00, 0x8C, 0x04, 0x06, 0x1B, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x05, 0x8C, 0x04, 0x18, 0x1C, -/* 0000C950 */ 0x5A, 0x01, 0x1C, 0x90, 0x02, 0x1C, 0x5A, 0x02, 0x1C, 0x5A, 0x03, 0x04, 0x1F, 0x04, 0xFF, 0x1B, -/* 0000C960 */ 0x09, 0x2D, 0x00, 0x90, 0x03, 0x1B, 0x5F, 0x1B, 0x1B, 0x00, 0x14, 0x03, 0x00, 0x1B, 0x06, 0x09, -/* 0000C970 */ 0x1E, 0x00, 0x8C, 0x04, 0x06, 0x1B, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x05, 0x8C, 0x04, 0x18, 0x1C, -/* 0000C980 */ 0x5A, 0x01, 0x1C, 0x90, 0x02, 0x1C, 0x5A, 0x02, 0x1C, 0x5A, 0x03, 0x07, 0x1F, 0x04, 0xFF, 0x1B, -/* 0000C990 */ 0x90, 0x03, 0x1B, 0x5F, 0x1B, 0x1B, 0x01, 0x0E, 0x5D, 0x00, 0x1B, 0x90, 0x03, 0x1B, 0x5F, 0x1B, -/* 0000C9A0 */ 0x1B, 0x01, 0x14, 0x03, 0x00, 0x1B, 0x08, 0x09, 0x21, 0x00, 0x8C, 0x04, 0x06, 0x1B, 0x07, 0x04, -/* 0000C9B0 */ 0x00, 0x5A, 0x00, 0x05, 0x8C, 0x04, 0x18, 0x1C, 0x5A, 0x01, 0x1C, 0x90, 0x02, 0x1C, 0x5A, 0x02, -/* 0000C9C0 */ 0x1C, 0x5A, 0x03, 0x09, 0x1F, 0x04, 0xFF, 0x1B, 0x09, 0x2D, 0x00, 0x90, 0x03, 0x1B, 0x5F, 0x1B, -/* 0000C9D0 */ 0x1B, 0x01, 0x14, 0x03, 0x00, 0x1B, 0x0A, 0x09, 0x1E, 0x00, 0x8C, 0x04, 0x06, 0x1B, 0x07, 0x04, -/* 0000C9E0 */ 0x00, 0x5A, 0x00, 0x05, 0x8C, 0x04, 0x18, 0x1C, 0x5A, 0x01, 0x1C, 0x90, 0x02, 0x1C, 0x5A, 0x02, -/* 0000C9F0 */ 0x1C, 0x5A, 0x03, 0x0B, 0x1F, 0x04, 0xFF, 0x1B, 0x90, 0x03, 0x1B, 0x5F, 0x1B, 0x1B, 0x02, 0x0E, -/* 0000CA00 */ 0xA5, 0x00, 0x1B, 0x90, 0x03, 0x1B, 0x5F, 0x1B, 0x1B, 0x02, 0x14, 0x0F, 0x00, 0x1B, 0x08, 0x90, -/* 0000CA10 */ 0x03, 0x1B, 0x5F, 0x1B, 0x1B, 0x02, 0x14, 0x03, 0x00, 0x1B, 0x0A, 0x09, 0x21, 0x00, 0x8C, 0x04, -/* 0000CA20 */ 0x06, 0x1B, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x05, 0x8C, 0x04, 0x18, 0x1C, 0x5A, 0x01, 0x1C, 0x90, -/* 0000CA30 */ 0x02, 0x1C, 0x5A, 0x02, 0x1C, 0x5A, 0x03, 0x0C, 0x1F, 0x04, 0xFF, 0x1B, 0x09, 0x69, 0x00, 0x90, -/* 0000CA40 */ 0x03, 0x1B, 0x5F, 0x1B, 0x1B, 0x02, 0x14, 0x0F, 0x00, 0x1B, 0x03, 0x90, 0x03, 0x1B, 0x5F, 0x1B, -/* 0000CA50 */ 0x1B, 0x02, 0x14, 0x03, 0x00, 0x1B, 0x02, 0x09, 0x21, 0x00, 0x8C, 0x04, 0x06, 0x1B, 0x07, 0x04, -/* 0000CA60 */ 0x00, 0x5A, 0x00, 0x05, 0x8C, 0x04, 0x18, 0x1C, 0x5A, 0x01, 0x1C, 0x90, 0x02, 0x1C, 0x5A, 0x02, -/* 0000CA70 */ 0x1C, 0x5A, 0x03, 0x0D, 0x1F, 0x04, 0xFF, 0x1B, 0x09, 0x2D, 0x00, 0x90, 0x03, 0x1B, 0x5F, 0x1B, -/* 0000CA80 */ 0x1B, 0x02, 0x14, 0x03, 0x00, 0x1B, 0x06, 0x09, 0x1E, 0x00, 0x8C, 0x04, 0x06, 0x1B, 0x07, 0x04, -/* 0000CA90 */ 0x00, 0x5A, 0x00, 0x05, 0x8C, 0x04, 0x18, 0x1C, 0x5A, 0x01, 0x1C, 0x90, 0x02, 0x1C, 0x5A, 0x02, -/* 0000CAA0 */ 0x1C, 0x5A, 0x03, 0x0E, 0x1F, 0x04, 0xFF, 0x1B, 0x90, 0x03, 0x1B, 0x5F, 0x1B, 0x1B, 0x03, 0x0E, -/* 0000CAB0 */ 0x1E, 0x00, 0x1B, 0x8C, 0x04, 0x06, 0x1B, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x05, 0x8C, 0x04, 0x18, -/* 0000CAC0 */ 0x1C, 0x5A, 0x01, 0x1C, 0x90, 0x02, 0x1C, 0x5A, 0x02, 0x1C, 0x5A, 0x03, 0x0F, 0x1F, 0x04, 0xFF, -/* 0000CAD0 */ 0x1B, 0x90, 0x03, 0x1B, 0x5F, 0x1B, 0x1B, 0x04, 0x0E, 0x5D, 0x00, 0x1B, 0x90, 0x03, 0x1B, 0x5F, -/* 0000CAE0 */ 0x1B, 0x1B, 0x04, 0x14, 0x03, 0x00, 0x1B, 0x03, 0x09, 0x21, 0x00, 0x8C, 0x04, 0x06, 0x1B, 0x07, -/* 0000CAF0 */ 0x04, 0x00, 0x5A, 0x00, 0x05, 0x8C, 0x04, 0x18, 0x1C, 0x5A, 0x01, 0x1C, 0x90, 0x02, 0x1C, 0x5A, -/* 0000CB00 */ 0x02, 0x1C, 0x5A, 0x03, 0x10, 0x1F, 0x04, 0xFF, 0x1B, 0x09, 0x2D, 0x00, 0x90, 0x03, 0x1B, 0x5F, -/* 0000CB10 */ 0x1B, 0x1B, 0x04, 0x14, 0x03, 0x00, 0x1B, 0x06, 0x09, 0x1E, 0x00, 0x8C, 0x04, 0x06, 0x1B, 0x07, -/* 0000CB20 */ 0x04, 0x00, 0x5A, 0x00, 0x05, 0x8C, 0x04, 0x18, 0x1C, 0x5A, 0x01, 0x1C, 0x90, 0x02, 0x1C, 0x5A, -/* 0000CB30 */ 0x02, 0x1C, 0x5A, 0x03, 0x11, 0x1F, 0x04, 0xFF, 0x1B, 0x8C, 0x04, 0x06, 0x1B, 0x07, 0x04, 0x00, -/* 0000CB40 */ 0x5A, 0x00, 0x05, 0x8C, 0x04, 0x16, 0x1C, 0x5A, 0x01, 0x1C, 0xCC, 0x1C, 0x03, 0x9F, 0x00, 0x12, -/* 0000CB50 */ 0x1C, 0x9F, 0x01, 0x13, 0x1C, 0x9F, 0x02, 0x14, 0x1C, 0x5A, 0x02, 0x1C, 0xD3, 0x00, 0x1C, 0x5A, -/* 0000CB60 */ 0x03, 0x1C, 0x1F, 0x04, 0xFF, 0x1B, 0x8C, 0x04, 0x05, 0x1B, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x05, -/* 0000CB70 */ 0x90, 0x02, 0x1C, 0x5A, 0x01, 0x1C, 0x1F, 0x02, 0x1B, 0x1B, 0x11, 0x03, 0x00, 0x1B, 0x15, 0x09, -/* 0000CB80 */ 0x24, 0x00, 0x8C, 0x04, 0x06, 0x1B, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x05, 0x8C, 0x04, 0x19, 0x1C, -/* 0000CB90 */ 0x5A, 0x01, 0x1C, 0x90, 0x02, 0x1C, 0x5A, 0x02, 0x1C, 0x5A, 0x03, 0x16, 0x1F, 0x04, 0x1B, 0x1B, -/* 0000CBA0 */ 0x47, 0x00, 0x1B, 0x09, 0x05, 0x00, 0xA6, 0x1B, 0x47, 0x00, 0x1B, 0x09, 0x02, 0x00, 0xA6, 0x00, -/* 0000CBB0 */ 0x24, 0x00, 0xFE, 0x44, 0x02, 0xFE, 0x45, 0x02, 0xFE, 0x3F, 0x02, 0xFE, 0x3A, 0x02, 0xFE, 0x43, -/* 0000CBC0 */ 0x02, 0xFF, 0xC4, 0x56, 0x02, 0x00, 0x1C, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x24, 0x00, 0x0B, -/* 0000CBD0 */ 0x00, 0x2B, 0x00, 0x1B, 0x00, 0x5B, 0x00, 0x21, 0x00, 0x63, 0x00, 0x0F, 0x00, 0x3A, 0x00, 0x1E, -/* 0000CBE0 */ 0x00, 0xA5, 0x00, 0x0B, 0x00, 0x28, 0x00, 0x0F, 0x00, 0x3A, 0x00, 0x21, 0x00, 0x5E, 0x00, 0x0F, -/* 0000CBF0 */ 0x00, 0x3A, 0x00, 0x1E, 0x00, 0x75, 0x00, 0x0B, 0x00, 0x29, 0x00, 0x1B, 0x00, 0x5A, 0x00, 0x21, -/* 0000CC00 */ 0x00, 0x5A, 0x00, 0x1B, 0x00, 0x57, 0x00, 0x21, 0x00, 0x5F, 0x00, 0x0F, 0x00, 0x38, 0x00, 0x1E, -/* 0000CC10 */ 0x00, 0x76, 0x00, 0x0B, 0x00, 0x27, 0x00, 0x1E, 0x00, 0x59, 0x00, 0x0B, 0x00, 0x30, 0x00, 0x0F, -/* 0000CC20 */ 0x00, 0x40, 0x00, 0x21, 0x00, 0x62, 0x00, 0x0F, 0x00, 0x3F, 0x00, 0x1E, 0x00, 0x79, 0x00, 0x2D, -/* 0000CC30 */ 0x00, 0x3B, 0x01, 0x4A, 0x00, 0x72, 0x00, 0x00, 0x3C, 0xCC, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0x01, -/* 0000CC40 */ 0x00, 0x88, 0x01, 0x00, 0xFE, 0x34, 0x0D, 0x55, 0xA2, 0x41, 0xD1, 0x00, 0xBA, 0xFF, 0xAF, 0x5E, -/* 0000CC50 */ 0x02, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0xAF, 0x5E, 0x02, 0x00, 0xAC, 0xAC, -/* 0000CC60 */ 0x41, 0x04, 0x03, 0x05, 0x05, 0x0F, 0x0F, 0x05, 0x04, 0x04, 0x08, 0x2F, 0x8C, 0x01, 0x03, 0x05, -/* 0000CC70 */ 0x95, 0x05, 0x05, 0x03, 0x0E, 0x1F, 0x00, 0x05, 0x8C, 0x05, 0x06, 0x05, 0x07, 0x04, 0x00, 0x5A, -/* 0000CC80 */ 0x00, 0x02, 0x8C, 0x05, 0x18, 0x06, 0x5A, 0x01, 0x06, 0x8C, 0x01, 0x02, 0x06, 0x5A, 0x02, 0x06, -/* 0000CC90 */ 0x5A, 0x03, 0x03, 0x1F, 0x04, 0xFF, 0x05, 0xA6, 0x00, 0x24, 0x00, 0xFF, 0xD4, 0x5E, 0x02, 0x00, -/* 0000CCA0 */ 0x03, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x2C, 0x00, 0x21, 0x00, 0x5A, 0x00, 0x00, 0xBF, 0x5C, -/* 0000CCB0 */ 0x00, 0xC1, 0x13, 0x88, 0x21, 0x00, 0xFE, 0xD7, 0x0C, 0x0C, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x3B, -/* 0000CCC0 */ 0x04, 0xB8, 0xFF, 0xCA, 0x4C, 0x02, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFF, 0xCA, -/* 0000CCD0 */ 0x4C, 0x02, 0x00, 0xFE, 0x21, 0x09, 0xFE, 0x21, 0x09, 0x01, 0x07, 0x15, 0x1A, 0x05, 0x88, 0x82, -/* 0000CCE0 */ 0x04, 0x03, 0x0C, 0x0C, 0x0C, 0x0C, 0x06, 0x19, 0x07, 0x08, 0x0B, 0x06, 0xFE, 0x56, 0x04, 0x05, -/* 0000CCF0 */ 0xFE, 0x53, 0x04, 0x0C, 0x05, 0xFE, 0x58, 0x04, 0x06, 0xFE, 0x54, 0x04, 0x06, 0xFE, 0x48, 0x04, -/* 0000CD00 */ 0x06, 0xFE, 0x40, 0x03, 0x06, 0xFE, 0x13, 0x04, 0x06, 0xFE, 0x42, 0x03, 0x06, 0xFE, 0x43, 0x03, -/* 0000CD10 */ 0x06, 0xFE, 0x44, 0x03, 0x06, 0xFE, 0x49, 0x04, 0x06, 0xFE, 0x4A, 0x04, 0x06, 0xFE, 0x4B, 0x04, -/* 0000CD20 */ 0x06, 0xFE, 0x4C, 0x04, 0x06, 0xFE, 0x4D, 0x04, 0xFE, 0x18, 0x02, 0xA6, 0x1A, 0x14, 0x03, 0x00, -/* 0000CD30 */ 0x15, 0x1A, 0x09, 0x1C, 0x00, 0x8C, 0x04, 0x04, 0x1A, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x03, 0xCA, -/* 0000CD40 */ 0x1B, 0x5A, 0x01, 0x1B, 0x5A, 0x02, 0x02, 0x1F, 0x03, 0x1A, 0x1A, 0x47, 0x15, 0x1A, 0x09, 0x18, -/* 0000CD50 */ 0x00, 0x8C, 0x04, 0x24, 0x1B, 0x6A, 0x1A, 0x1B, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x1B, 0x5A, -/* 0000CD60 */ 0x01, 0x15, 0x1F, 0x02, 0x1A, 0x1A, 0x47, 0x15, 0x1A, 0x47, 0x18, 0x04, 0x14, 0x08, 0x00, 0x16, -/* 0000CD70 */ 0x05, 0x14, 0x03, 0x00, 0x16, 0x06, 0x09, 0x32, 0x00, 0x5F, 0x1A, 0x15, 0x01, 0xA6, 0x1B, 0x15, -/* 0000CD80 */ 0x24, 0x00, 0x1A, 0x1B, 0x5F, 0x1A, 0x15, 0x02, 0xA6, 0x1B, 0x15, 0x19, 0x00, 0x1A, 0x1B, 0x5F, -/* 0000CD90 */ 0x1A, 0x15, 0x03, 0xA6, 0x1B, 0x15, 0x0E, 0x00, 0x1A, 0x1B, 0x5F, 0x1A, 0x15, 0x04, 0xA6, 0x1B, -/* 0000CDA0 */ 0x15, 0x03, 0x00, 0x1A, 0x1B, 0x09, 0x03, 0x00, 0x47, 0x18, 0x07, 0x14, 0x08, 0x00, 0x16, 0x08, -/* 0000CDB0 */ 0x14, 0x03, 0x00, 0x16, 0x06, 0x09, 0x27, 0x00, 0x5F, 0x1A, 0x15, 0x05, 0xA6, 0x1B, 0x15, 0x19, -/* 0000CDC0 */ 0x00, 0x1A, 0x1B, 0x5F, 0x1A, 0x15, 0x06, 0xA6, 0x1B, 0x15, 0x0E, 0x00, 0x1A, 0x1B, 0x5F, 0x1A, -/* 0000CDD0 */ 0x15, 0x07, 0xA6, 0x1B, 0x15, 0x03, 0x00, 0x1A, 0x1B, 0x09, 0x03, 0x00, 0x47, 0x18, 0x07, 0x0E, -/* 0000CDE0 */ 0xA9, 0x00, 0x18, 0x14, 0x08, 0x00, 0x17, 0x05, 0x14, 0x03, 0x00, 0x17, 0x09, 0x09, 0x9C, 0x00, -/* 0000CDF0 */ 0x8C, 0x04, 0x15, 0x1A, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x5A, 0x01, 0x15, 0x5A, 0x02, 0x0A, -/* 0000CE00 */ 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00, 0x78, 0x0C, 0x1B, -/* 0000CE10 */ 0x08, 0x78, 0x04, 0x1B, 0x09, 0x78, 0x04, 0x1B, 0x0A, 0x78, 0x04, 0x1B, 0x0B, 0x5A, 0x03, 0x1B, -/* 0000CE20 */ 0x1F, 0x04, 0xFF, 0x1A, 0x8C, 0x04, 0x15, 0x1A, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x5A, 0x01, -/* 0000CE30 */ 0x15, 0x5A, 0x02, 0x10, 0xCB, 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, -/* 0000CE40 */ 0x00, 0x78, 0x0C, 0x1B, 0x08, 0x78, 0x04, 0x1B, 0x09, 0x78, 0x04, 0x1B, 0x0A, 0x78, 0x04, 0x1B, -/* 0000CE50 */ 0x0B, 0x5A, 0x03, 0x1B, 0x1F, 0x04, 0xFF, 0x1A, 0x8C, 0x04, 0x15, 0x1A, 0x07, 0x04, 0x00, 0x5A, -/* 0000CE60 */ 0x00, 0x03, 0x5A, 0x01, 0x15, 0x5A, 0x02, 0x11, 0xCB, 0x30, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, -/* 0000CE70 */ 0x00, 0x1B, 0x00, 0x00, 0x00, 0x78, 0x0C, 0x1B, 0x08, 0x78, 0x04, 0x1B, 0x09, 0x78, 0x04, 0x1B, -/* 0000CE80 */ 0x0A, 0x78, 0x04, 0x1B, 0x0B, 0x5A, 0x03, 0x1B, 0x1F, 0x04, 0xFF, 0x1A, 0x0E, 0xA9, 0x00, 0x18, -/* 0000CE90 */ 0x14, 0x08, 0x00, 0x17, 0x08, 0x14, 0x03, 0x00, 0x17, 0x09, 0x09, 0x9C, 0x00, 0x8C, 0x04, 0x15, -/* 0000CEA0 */ 0x1A, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x5A, 0x01, 0x15, 0x5A, 0x02, 0x12, 0xCB, 0x48, 0x00, -/* 0000CEB0 */ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00, 0x78, 0x0C, 0x1B, 0x08, 0x78, 0x04, -/* 0000CEC0 */ 0x1B, 0x09, 0x78, 0x04, 0x1B, 0x0A, 0x78, 0x04, 0x1B, 0x0B, 0x5A, 0x03, 0x1B, 0x1F, 0x04, 0xFF, -/* 0000CED0 */ 0x1A, 0x8C, 0x04, 0x15, 0x1A, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x5A, 0x01, 0x15, 0x5A, 0x02, -/* 0000CEE0 */ 0x13, 0xCB, 0x60, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00, 0x78, 0x0C, -/* 0000CEF0 */ 0x1B, 0x08, 0x78, 0x04, 0x1B, 0x09, 0x78, 0x04, 0x1B, 0x0A, 0x78, 0x04, 0x1B, 0x0B, 0x5A, 0x03, -/* 0000CF00 */ 0x1B, 0x1F, 0x04, 0xFF, 0x1A, 0x8C, 0x04, 0x15, 0x1A, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x5A, -/* 0000CF10 */ 0x01, 0x15, 0x5A, 0x02, 0x14, 0xCB, 0x78, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x1B, 0x00, -/* 0000CF20 */ 0x00, 0x00, 0x78, 0x0C, 0x1B, 0x08, 0x78, 0x04, 0x1B, 0x09, 0x78, 0x04, 0x1B, 0x0A, 0x78, 0x04, -/* 0000CF30 */ 0x1B, 0x0B, 0x5A, 0x03, 0x1B, 0x1F, 0x04, 0xFF, 0x1A, 0x47, 0x00, 0x15, 0x09, 0x02, 0x00, 0xA6, -/* 0000CF40 */ 0x00, 0x24, 0x00, 0x06, 0x90, 0x00, 0x78, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, -/* 0000CF50 */ 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, -/* 0000CF60 */ 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, -/* 0000CF70 */ 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x48, 0x00, -/* 0000CF80 */ 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, -/* 0000CF90 */ 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x03, 0x04, -/* 0000CFA0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, -/* 0000CFB0 */ 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, -/* 0000CFC0 */ 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, -/* 0000CFD0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, -/* 0000CFE0 */ 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0xFE, 0x36, -/* 0000CFF0 */ 0x03, 0xFE, 0x44, 0x02, 0xFE, 0x45, 0x02, 0xFE, 0x3F, 0x02, 0xFE, 0x3A, 0x02, 0xFE, 0x3C, 0x02, -/* 0000D000 */ 0xFE, 0x3E, 0x02, 0xFE, 0x41, 0x02, 0xFE, 0x83, 0x01, 0xFE, 0x82, 0x01, 0xFE, 0x80, 0x01, 0xFE, -/* 0000D010 */ 0x81, 0x01, 0xFF, 0x14, 0x4D, 0x02, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x31, 0x00, -/* 0000D020 */ 0x1C, 0x00, 0x4F, 0x00, 0x18, 0x00, 0x49, 0x00, 0x03, 0x00, 0x29, 0x00, 0x0D, 0x00, 0x45, 0x00, -/* 0000D030 */ 0x2F, 0x00, 0x97, 0x00, 0x03, 0x00, 0x4E, 0x00, 0x0D, 0x00, 0x45, 0x00, 0x24, 0x00, 0x7A, 0x00, -/* 0000D040 */ 0x03, 0x00, 0x4F, 0x00, 0x11, 0x00, 0x57, 0x00, 0x34, 0x00, 0xCB, 0x00, 0x34, 0x00, 0xCC, 0x00, -/* 0000D050 */ 0x34, 0x00, 0xD8, 0x00, 0x11, 0x00, 0x57, 0x00, 0x34, 0x00, 0xCB, 0x00, 0x34, 0x00, 0xCD, 0x00, -/* 0000D060 */ 0x34, 0x00, 0xDB, 0x00, 0x08, 0x00, 0x1C, 0x00, 0x00, 0x3F, 0x5D, 0x00, 0xC1, 0x53, 0xAD, 0x25, -/* 0000D070 */ 0x01, 0xFE, 0xDD, 0x0B, 0x18, 0xA0, 0x41, 0xD1, 0x00, 0xAF, 0xFF, 0x16, 0x1A, 0x02, 0x00, 0x06, -/* 0000D080 */ 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFF, 0x16, 0x1A, 0x02, 0x00, 0xFE, 0xC0, 0x31, 0xFE, -/* 0000D090 */ 0xC0, 0x31, 0x01, 0xFE, 0xCA, 0x01, 0x0D, 0x21, 0x27, 0x09, 0xA8, 0xA8, 0x02, 0x0A, 0x08, 0x08, -/* 0000D0A0 */ 0x08, 0x08, 0x05, 0x02, 0x24, 0x25, 0x26, 0x27, 0x08, 0x06, 0xFE, 0x3D, 0x03, 0x06, 0xFE, 0x20, -/* 0000D0B0 */ 0x04, 0x05, 0xFE, 0x21, 0x04, 0x05, 0xFE, 0x22, 0x04, 0x05, 0xFE, 0x23, 0x04, 0x06, 0xFE, 0x4C, -/* 0000D0C0 */ 0x03, 0x06, 0xFE, 0x40, 0x03, 0x06, 0xFE, 0x42, 0x03, 0x0B, 0x06, 0xFE, 0x44, 0x03, 0x07, 0x06, -/* 0000D0D0 */ 0xFE, 0xF7, 0x03, 0x06, 0xFE, 0x35, 0x04, 0x06, 0xFE, 0x28, 0x04, 0x06, 0xFE, 0x2B, 0x04, 0x06, -/* 0000D0E0 */ 0xFE, 0x2C, 0x04, 0x06, 0xFE, 0xFA, 0x03, 0x06, 0xFE, 0xFB, 0x03, 0x06, 0xFE, 0xFC, 0x03, 0x06, -/* 0000D0F0 */ 0xFE, 0xFD, 0x03, 0x06, 0xFE, 0xFE, 0x03, 0x06, 0xFE, 0x2F, 0x04, 0x06, 0xFE, 0x0B, 0x04, 0x0C, -/* 0000D100 */ 0x06, 0xFE, 0x43, 0x03, 0x06, 0xFE, 0x0C, 0x04, 0x06, 0xFE, 0x0D, 0x04, 0x06, 0xFE, 0x26, 0x04, -/* 0000D110 */ 0x06, 0xFE, 0x8D, 0x03, 0x05, 0xFE, 0x25, 0x04, 0xFE, 0x95, 0x02, 0xA6, 0x21, 0xA6, 0x22, 0xA6, -/* 0000D120 */ 0x23, 0x8C, 0x02, 0x32, 0x29, 0x14, 0x0C, 0x00, 0x29, 0x03, 0x8C, 0x02, 0x32, 0x29, 0x14, 0x03, -/* 0000D130 */ 0x00, 0x29, 0x04, 0x09, 0x71, 0x02, 0xDE, 0x00, 0x03, 0x01, 0xB6, 0x29, 0x00, 0x01, 0x53, 0x01, -/* 0000D140 */ 0x00, 0x21, 0x29, 0x93, 0x00, 0x02, 0x21, 0x8C, 0x02, 0x03, 0x2A, 0x6A, 0x29, 0x2A, 0x00, 0x07, -/* 0000D150 */ 0x03, 0x00, 0x5A, 0x00, 0x2A, 0x8C, 0x02, 0x23, 0x2B, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5A, -/* 0000D160 */ 0x01, 0x05, 0xB6, 0x2D, 0x00, 0x01, 0x53, 0x01, 0x01, 0x2C, 0x2D, 0x5A, 0x02, 0x2C, 0x1F, 0x03, -/* 0000D170 */ 0x2B, 0x2B, 0x5A, 0x01, 0x2B, 0x8C, 0x02, 0x36, 0x2B, 0x4B, 0x2B, 0x5F, 0x2B, 0x2B, 0x01, 0x5A, -/* 0000D180 */ 0x02, 0x2B, 0x1F, 0x03, 0xFF, 0x29, 0x8C, 0x02, 0x32, 0x29, 0x14, 0x03, 0x00, 0x29, 0x03, 0x09, -/* 0000D190 */ 0x15, 0x02, 0xDE, 0x01, 0x04, 0x02, 0xB6, 0x29, 0x00, 0xB5, 0x01, 0x00, 0x00, 0x00, 0x29, 0x29, -/* 0000D1A0 */ 0x01, 0x53, 0x01, 0x02, 0x22, 0x29, 0x93, 0x01, 0x02, 0x22, 0x01, 0x53, 0x01, 0x03, 0x23, 0x29, -/* 0000D1B0 */ 0x93, 0x01, 0x03, 0x23, 0x8C, 0x02, 0x23, 0x29, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, -/* 0000D1C0 */ 0x06, 0x8E, 0x01, 0x02, 0x2A, 0x5A, 0x02, 0x2A, 0x1F, 0x03, 0xFF, 0x29, 0x8C, 0x02, 0x23, 0x29, -/* 0000D1D0 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x07, 0x8E, 0x01, 0x03, 0x2A, 0x5A, 0x02, 0x2A, -/* 0000D1E0 */ 0x1F, 0x03, 0xFF, 0x29, 0x8C, 0x02, 0x15, 0x29, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8E, 0x01, -/* 0000D1F0 */ 0x02, 0x2A, 0x5A, 0x01, 0x2A, 0x5A, 0x02, 0x08, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 0000D200 */ 0x00, 0x2A, 0x00, 0x00, 0x00, 0x8C, 0x01, 0x15, 0x2B, 0x4B, 0x2B, 0x78, 0x2B, 0x2A, 0x02, 0x78, -/* 0000D210 */ 0x0B, 0x2A, 0x03, 0x78, 0x0B, 0x2A, 0x04, 0x5A, 0x03, 0x2A, 0x1F, 0x04, 0xFF, 0x29, 0xCC, 0x29, -/* 0000D220 */ 0x0B, 0x9F, 0x00, 0x0E, 0x29, 0x9F, 0x01, 0x0F, 0x29, 0x9F, 0x02, 0x10, 0x29, 0x9F, 0x03, 0x11, -/* 0000D230 */ 0x29, 0x9F, 0x04, 0x12, 0x29, 0x9F, 0x05, 0x13, 0x29, 0x9F, 0x06, 0x14, 0x29, 0x9F, 0x07, 0x15, -/* 0000D240 */ 0x29, 0x9F, 0x08, 0x16, 0x29, 0x9F, 0x09, 0x17, 0x29, 0x9F, 0x0A, 0x18, 0x29, 0x94, 0x02, 0x29, -/* 0000D250 */ 0x8C, 0x02, 0x15, 0x29, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8E, 0x01, 0x02, 0x2A, 0x5A, 0x01, -/* 0000D260 */ 0x2A, 0x5A, 0x02, 0x19, 0xCB, 0x14, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, -/* 0000D270 */ 0x00, 0x8E, 0x01, 0x02, 0x2B, 0x07, 0x01, 0x00, 0xC1, 0x01, 0x2B, 0x2B, 0x78, 0x2B, 0x2A, 0x02, -/* 0000D280 */ 0x78, 0x1A, 0x2A, 0x03, 0x78, 0x1A, 0x2A, 0x05, 0x78, 0x1A, 0x2A, 0x04, 0x5A, 0x03, 0x2A, 0x1F, -/* 0000D290 */ 0x04, 0xFF, 0x29, 0x8C, 0x02, 0x04, 0x29, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x8E, 0x01, 0x02, -/* 0000D2A0 */ 0x2A, 0x5F, 0x2A, 0x2A, 0x06, 0x5A, 0x01, 0x2A, 0x8C, 0x02, 0x08, 0x2A, 0x5F, 0x2A, 0x2A, 0x06, -/* 0000D2B0 */ 0x5A, 0x02, 0x2A, 0x1F, 0x03, 0xFF, 0x29, 0x8C, 0x02, 0x15, 0x29, 0x07, 0x04, 0x00, 0x5A, 0x00, -/* 0000D2C0 */ 0x02, 0x8E, 0x01, 0x02, 0x2A, 0x5F, 0x2A, 0x2A, 0x06, 0x5A, 0x01, 0x2A, 0x5A, 0x02, 0x1C, 0xCB, -/* 0000D2D0 */ 0x2C, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x8E, 0x01, 0x02, 0x2B, -/* 0000D2E0 */ 0x78, 0x2B, 0x2A, 0x02, 0x78, 0x0B, 0x2A, 0x03, 0x78, 0x1A, 0x2A, 0x05, 0x78, 0x0B, 0x2A, 0x04, -/* 0000D2F0 */ 0x5A, 0x03, 0x2A, 0x1F, 0x04, 0xFF, 0x29, 0x8C, 0x02, 0x15, 0x29, 0x07, 0x04, 0x00, 0x5A, 0x00, -/* 0000D300 */ 0x02, 0x8E, 0x01, 0x02, 0x2A, 0x5F, 0x2A, 0x2A, 0x06, 0x5A, 0x01, 0x2A, 0x5A, 0x02, 0x1D, 0xCB, -/* 0000D310 */ 0x44, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x00, 0xB6, 0x2C, 0x00, 0xB5, -/* 0000D320 */ 0x01, 0x00, 0x00, 0x00, 0x2C, 0x2C, 0x01, 0x57, 0x01, 0x04, 0x2B, 0x2C, 0x2A, 0x78, 0x2B, 0x2A, -/* 0000D330 */ 0x02, 0x78, 0x0B, 0x2A, 0x03, 0x78, 0x1A, 0x2A, 0x05, 0x78, 0x0B, 0x2A, 0x04, 0x5A, 0x03, 0x2A, -/* 0000D340 */ 0x1F, 0x04, 0xFF, 0x29, 0x8C, 0x02, 0x15, 0x29, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8E, 0x01, -/* 0000D350 */ 0x02, 0x2A, 0x5F, 0x2A, 0x2A, 0x06, 0x5A, 0x01, 0x2A, 0x5A, 0x02, 0x1E, 0xCB, 0x5C, 0x00, 0x00, -/* 0000D360 */ 0x00, 0x04, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x8C, 0x02, 0x23, 0x2B, 0x07, 0x03, 0x00, -/* 0000D370 */ 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x20, 0xB6, 0x2D, 0x00, 0xB5, 0x01, 0x00, 0x00, 0x00, 0x2D, 0x2D, -/* 0000D380 */ 0x01, 0x53, 0x01, 0x05, 0x2C, 0x2D, 0x5A, 0x02, 0x2C, 0x1F, 0x03, 0x2B, 0x2B, 0x78, 0x2B, 0x2A, -/* 0000D390 */ 0x07, 0x78, 0x1A, 0x2A, 0x05, 0x78, 0x0B, 0x2A, 0x04, 0x5A, 0x03, 0x2A, 0x1F, 0x04, 0xFF, 0x29, -/* 0000D3A0 */ 0x8E, 0x01, 0x02, 0x00, 0x09, 0x07, 0x00, 0xA6, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, -/* 0000D3B0 */ 0x05, 0x70, 0x00, 0x5C, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, -/* 0000D3C0 */ 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x03, -/* 0000D3D0 */ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, -/* 0000D3E0 */ 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x2C, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, -/* 0000D3F0 */ 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, -/* 0000D400 */ 0x01, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, -/* 0000D410 */ 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x00, -/* 0000D420 */ 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, -/* 0000D430 */ 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0xFE, 0xEE, 0x01, 0xFE, 0x06, 0x03, 0xFE, 0x83, 0x01, -/* 0000D440 */ 0xFE, 0x82, 0x01, 0xFE, 0x81, 0x01, 0xFE, 0x80, 0x01, 0xFE, 0x15, 0x01, 0xFE, 0x84, 0x01, 0x02, -/* 0000D450 */ 0x01, 0x01, 0x00, 0xFE, 0x1F, 0x04, 0x02, 0x02, 0x00, 0xFE, 0x01, 0x02, 0x01, 0xFE, 0xF5, 0x01, -/* 0000D460 */ 0xFF, 0x2C, 0x1A, 0x02, 0x00, 0x0F, 0x06, 0x00, 0x00, 0x00, 0x26, 0x00, 0x0A, 0x1C, 0x3F, 0x00, -/* 0000D470 */ 0x74, 0x02, 0x2E, 0x00, 0x5A, 0x04, 0x18, 0x00, 0xD4, 0x02, 0x18, 0x00, 0x52, 0x00, 0x3A, 0x00, -/* 0000D480 */ 0x9B, 0x00, 0x32, 0x00, 0x1F, 0x01, 0x43, 0x00, 0x99, 0x00, 0x24, 0x00, 0x48, 0x00, 0x40, 0x00, -/* 0000D490 */ 0x9E, 0x00, 0x4D, 0x00, 0xC2, 0x04, 0x5C, 0x00, 0x16, 0x03, 0x07, 0x00, 0x84, 0x00, 0x07, 0x00, -/* 0000D4A0 */ 0x16, 0x00, 0x00, 0x98, 0xDB, 0x00, 0x00, 0x69, 0xDA, 0x00, 0x00, 0x96, 0xD8, 0x00, 0x00, 0x6A, -/* 0000D4B0 */ 0xD7, 0x00, 0x00, 0x9F, 0xD5, 0x00, 0x00, 0xBB, 0xD4, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, -/* 0000D4C0 */ 0x88, 0x01, 0x00, 0xFE, 0xBF, 0x0C, 0x39, 0xA0, 0x41, 0xD1, 0x00, 0xB6, 0xFF, 0x97, 0x48, 0x02, -/* 0000D4D0 */ 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFF, 0x97, 0x48, 0x02, 0x00, 0xFE, 0x56, 0x02, -/* 0000D4E0 */ 0xFE, 0x56, 0x02, 0x01, 0x05, 0x05, 0x08, 0x04, 0x23, 0x22, 0x05, 0x01, 0x04, 0x04, 0x04, 0x04, -/* 0000D4F0 */ 0x07, 0x06, 0xFE, 0xF6, 0x03, 0x05, 0xFE, 0x32, 0x04, 0x06, 0xFE, 0x46, 0x03, 0x72, 0x59, 0x08, -/* 0000D500 */ 0xB1, 0x05, 0x08, 0x2C, 0x08, 0x05, 0x15, 0x03, 0x00, 0x08, 0x02, 0x09, 0x18, 0x00, 0x8C, 0x05, -/* 0000D510 */ 0x03, 0x09, 0x6A, 0x08, 0x09, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x09, 0x5A, 0x01, 0x03, 0x5A, -/* 0000D520 */ 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x08, 0x8C, 0x05, 0x03, 0x09, 0x6A, 0x08, 0x09, 0x01, 0x07, 0x02, -/* 0000D530 */ 0x00, 0x5A, 0x00, 0x09, 0x5A, 0x01, 0x05, 0x1F, 0x02, 0x08, 0x08, 0x47, 0x06, 0x08, 0xA6, 0x08, -/* 0000D540 */ 0x14, 0x08, 0x00, 0x06, 0x08, 0x5F, 0x08, 0x06, 0x02, 0x0F, 0x18, 0x00, 0x08, 0x8C, 0x05, 0x03, -/* 0000D550 */ 0x09, 0x6A, 0x08, 0x09, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x09, 0x5A, 0x01, 0x03, 0x5A, 0x02, -/* 0000D560 */ 0x04, 0x1F, 0x03, 0xFF, 0x08, 0x5F, 0x00, 0x06, 0x03, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, -/* 0000D570 */ 0xFE, 0x8A, 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0x06, 0x02, 0xFE, 0x25, 0x02, 0xFF, 0xBD, 0x48, 0x02, -/* 0000D580 */ 0x00, 0x07, 0x05, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3C, 0x00, 0x18, 0x00, 0x84, 0x00, 0x18, 0x00, -/* 0000D590 */ 0x4B, 0x00, 0x0F, 0x00, 0x69, 0x00, 0x18, 0x00, 0x84, 0x00, 0x09, 0x00, 0x37, 0x00, 0x00, 0x3F, -/* 0000D5A0 */ 0x5D, 0x00, 0xC1, 0x03, 0x8D, 0x07, 0x00, 0xFE, 0xA9, 0x0C, 0x1B, 0xA0, 0x41, 0xC3, 0x00, 0xFE, -/* 0000D5B0 */ 0x0D, 0x04, 0xB4, 0xFF, 0x00, 0x00, 0x00, 0x02, 0xFF, 0xC0, 0x43, 0x02, 0x00, 0x01, 0xFF, 0x00, -/* 0000D5C0 */ 0x10, 0x01, 0x00, 0x01, 0x01, 0xFF, 0xC0, 0x43, 0x02, 0x00, 0xFE, 0x08, 0x04, 0xFE, 0x08, 0x04, -/* 0000D5D0 */ 0x02, 0xFE, 0x02, 0x04, 0xFE, 0xFA, 0x01, 0x06, 0x07, 0x0B, 0x05, 0x3E, 0x3E, 0x05, 0x07, 0x03, -/* 0000D5E0 */ 0x03, 0x03, 0x03, 0x08, 0x09, 0x0A, 0x06, 0xFE, 0xF6, 0x03, 0x05, 0xFE, 0x34, 0x04, 0x06, 0xFE, -/* 0000D5F0 */ 0x46, 0x03, 0x07, 0x08, 0xC8, 0x59, 0x0B, 0xB1, 0x07, 0x0B, 0x2C, 0x0B, 0x07, 0x15, 0x03, 0x00, -/* 0000D600 */ 0x0B, 0x02, 0x09, 0x18, 0x00, 0x8C, 0x05, 0x03, 0x0C, 0x6A, 0x0B, 0x0C, 0x00, 0x07, 0x03, 0x00, -/* 0000D610 */ 0x5A, 0x00, 0x0C, 0x5A, 0x01, 0x03, 0x5A, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x0B, 0x8C, 0x05, 0x03, -/* 0000D620 */ 0x0C, 0x6A, 0x0B, 0x0C, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5A, 0x01, 0x07, 0x1F, 0x02, -/* 0000D630 */ 0x0B, 0x0B, 0x94, 0x02, 0x0B, 0x90, 0x02, 0x0B, 0xA6, 0x0C, 0x14, 0x0B, 0x00, 0x0B, 0x0C, 0x90, -/* 0000D640 */ 0x02, 0x0B, 0x5F, 0x0B, 0x0B, 0x02, 0x0F, 0x18, 0x00, 0x0B, 0x8C, 0x05, 0x03, 0x0C, 0x6A, 0x0B, -/* 0000D650 */ 0x0C, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x5A, 0x01, 0x03, 0x5A, 0x02, 0x04, 0x1F, 0x03, -/* 0000D660 */ 0xFF, 0x0B, 0x8C, 0x05, 0x04, 0x0B, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x06, 0xCA, 0x0C, 0x5A, 0x01, -/* 0000D670 */ 0x0C, 0x5A, 0x02, 0x05, 0x1F, 0x03, 0x0B, 0x0B, 0x94, 0x03, 0x0B, 0x8C, 0x05, 0x06, 0x0B, 0x07, -/* 0000D680 */ 0x04, 0x00, 0x5A, 0x00, 0x06, 0x8C, 0x05, 0x16, 0x0C, 0x5A, 0x01, 0x0C, 0x8C, 0x03, 0x02, 0x0C, -/* 0000D690 */ 0x5A, 0x02, 0x0C, 0xD3, 0x00, 0x0C, 0x5A, 0x03, 0x0C, 0x1F, 0x04, 0xFF, 0x0B, 0x8C, 0x05, 0x04, -/* 0000D6A0 */ 0x0B, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x06, 0x90, 0x03, 0x0C, 0x5A, 0x01, 0x0C, 0xCA, 0x0C, 0x5A, -/* 0000D6B0 */ 0x02, 0x0C, 0x1F, 0x03, 0x00, 0x0B, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x8A, 0x02, -/* 0000D6C0 */ 0xFE, 0xEF, 0x01, 0xFE, 0x06, 0x02, 0xFF, 0xF5, 0x43, 0x02, 0x00, 0x09, 0x05, 0x00, 0x00, 0x00, -/* 0000D6D0 */ 0x0B, 0x00, 0x3C, 0x00, 0x18, 0x00, 0x8C, 0x00, 0x18, 0x00, 0x4B, 0x00, 0x15, 0x00, 0x69, 0x00, -/* 0000D6E0 */ 0x18, 0x00, 0x8D, 0x00, 0x19, 0x00, 0x47, 0x00, 0x22, 0x00, 0x44, 0x01, 0x1E, 0x00, 0x3E, 0x00, -/* 0000D6F0 */ 0x00, 0xF5, 0xD6, 0x00, 0x00, 0xBF, 0x4C, 0x00, 0x01, 0x00, 0x88, 0x01, 0x00, 0xFE, 0xB4, 0x0C, -/* 0000D700 */ 0x48, 0xA2, 0x41, 0xD1, 0x00, 0xB5, 0xFF, 0x75, 0x46, 0x02, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, -/* 0000D710 */ 0x02, 0x02, 0xFF, 0x75, 0x46, 0x02, 0x00, 0xF8, 0xF8, 0x41, 0x05, 0x04, 0x06, 0x0D, 0x0D, 0x06, -/* 0000D720 */ 0x02, 0x05, 0x05, 0xFE, 0xD4, 0x04, 0x06, 0xFE, 0xF5, 0x03, 0x2C, 0x8C, 0x01, 0x02, 0x06, 0x2F, -/* 0000D730 */ 0x07, 0x02, 0x04, 0x2D, 0x06, 0x06, 0x07, 0x15, 0x03, 0x00, 0x06, 0x03, 0x09, 0x14, 0x00, 0x8C, -/* 0000D740 */ 0x01, 0x03, 0x06, 0x8C, 0x01, 0x02, 0x07, 0x2F, 0x08, 0x02, 0x04, 0x95, 0x07, 0x07, 0x08, 0x9A, -/* 0000D750 */ 0x07, 0x06, 0x04, 0xA6, 0x00, 0x24, 0x00, 0xFF, 0xA5, 0x46, 0x02, 0x00, 0x03, 0x00, 0x00, 0x00, -/* 0000D760 */ 0x00, 0x14, 0x00, 0x5A, 0x00, 0x16, 0x00, 0x6D, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, -/* 0000D770 */ 0x01, 0x00, 0xFE, 0x8E, 0x0C, 0x10, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x26, 0x04, 0xB3, 0xFF, 0x4B, -/* 0000D780 */ 0x3D, 0x02, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0x4B, 0x3D, 0x02, 0x00, 0xFE, -/* 0000D790 */ 0x7C, 0x02, 0xFE, 0x7C, 0x02, 0x01, 0x07, 0x06, 0x0A, 0x07, 0x35, 0x33, 0x05, 0x03, 0x05, 0x05, -/* 0000D7A0 */ 0x05, 0x05, 0x09, 0x06, 0xFE, 0xF6, 0x03, 0x05, 0xFE, 0x32, 0x04, 0x06, 0xFE, 0x46, 0x03, 0x08, -/* 0000D7B0 */ 0xAF, 0x59, 0x0A, 0xB1, 0x07, 0x0A, 0x8C, 0x05, 0x24, 0x0B, 0x6A, 0x0A, 0x0B, 0x00, 0x07, 0x02, -/* 0000D7C0 */ 0x00, 0x5A, 0x00, 0x0B, 0x5A, 0x01, 0x06, 0x1F, 0x02, 0x0A, 0x0A, 0x47, 0x06, 0x0A, 0x2C, 0x0A, -/* 0000D7D0 */ 0x07, 0x15, 0x03, 0x00, 0x0A, 0x02, 0x09, 0x18, 0x00, 0x8C, 0x05, 0x03, 0x0B, 0x6A, 0x0A, 0x0B, -/* 0000D7E0 */ 0x01, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0B, 0x5A, 0x01, 0x03, 0x5A, 0x02, 0x04, 0x1F, 0x03, 0xFF, -/* 0000D7F0 */ 0x0A, 0x8C, 0x05, 0x03, 0x0B, 0x6A, 0x0A, 0x0B, 0x02, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0B, 0x5A, -/* 0000D800 */ 0x01, 0x07, 0x1F, 0x02, 0x0A, 0x0A, 0x47, 0x08, 0x0A, 0xA6, 0x0A, 0x14, 0x08, 0x00, 0x08, 0x0A, -/* 0000D810 */ 0x5F, 0x0A, 0x08, 0x03, 0x0F, 0x18, 0x00, 0x0A, 0x8C, 0x05, 0x03, 0x0B, 0x6A, 0x0A, 0x0B, 0x01, -/* 0000D820 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0B, 0x5A, 0x01, 0x03, 0x5A, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x0A, -/* 0000D830 */ 0x8C, 0x05, 0x0B, 0x0A, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x05, 0x8C, 0x05, 0x03, 0x0C, 0x6A, 0x0B, -/* 0000D840 */ 0x0C, 0x04, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x5A, 0x01, 0x06, 0x5A, 0x02, 0x08, 0x1F, 0x03, -/* 0000D850 */ 0x0B, 0x0B, 0x5A, 0x01, 0x0B, 0x1F, 0x02, 0x00, 0x0A, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, -/* 0000D860 */ 0xFE, 0x38, 0x03, 0xFE, 0x8A, 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0x06, 0x02, 0xFE, 0xE2, 0x01, 0xFF, -/* 0000D870 */ 0x74, 0x3D, 0x02, 0x00, 0x08, 0x05, 0x00, 0x00, 0x00, 0x18, 0x00, 0x2F, 0x00, 0x0B, 0x00, 0x38, -/* 0000D880 */ 0x00, 0x18, 0x00, 0x7C, 0x00, 0x18, 0x00, 0x47, 0x00, 0x0F, 0x00, 0x65, 0x00, 0x18, 0x00, 0x7C, -/* 0000D890 */ 0x00, 0x2E, 0x00, 0x47, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x72, -/* 0000D8A0 */ 0x0C, 0x10, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x46, 0x03, 0xB2, 0xFF, 0xD5, 0x38, 0x02, 0x00, 0xFF, -/* 0000D8B0 */ 0x00, 0x10, 0x01, 0x00, 0x03, 0x01, 0xFF, 0xD5, 0x38, 0x02, 0x00, 0xFE, 0x1E, 0x04, 0xFE, 0x1E, -/* 0000D8C0 */ 0x04, 0x01, 0x09, 0x05, 0x0B, 0x05, 0x60, 0x59, 0x05, 0x09, 0x07, 0x06, 0x07, 0x07, 0x0A, 0x08, -/* 0000D8D0 */ 0x06, 0xFE, 0x46, 0x03, 0x07, 0xFE, 0x37, 0x01, 0x59, 0x0B, 0xB1, 0x07, 0x0B, 0x4F, 0x08, 0x4F, -/* 0000D8E0 */ 0x09, 0x15, 0x05, 0x00, 0x05, 0x02, 0xA6, 0x0B, 0x47, 0x05, 0x0B, 0x15, 0x05, 0x00, 0x06, 0x02, -/* 0000D8F0 */ 0xA6, 0x0B, 0x47, 0x06, 0x0B, 0x4F, 0x08, 0x4F, 0x09, 0x68, 0x06, 0x00, 0x00, 0x00, 0x0B, 0x14, -/* 0000D900 */ 0x0A, 0x00, 0x07, 0x0B, 0xA6, 0x0B, 0x14, 0x03, 0x00, 0x07, 0x0B, 0x09, 0x16, 0x00, 0x8C, 0x01, -/* 0000D910 */ 0x02, 0x0B, 0x4B, 0x0B, 0x07, 0x03, 0x00, 0x5A, 0x01, 0x05, 0x5A, 0x02, 0x06, 0xC1, 0x03, 0x00, -/* 0000D920 */ 0x0B, 0x09, 0xE9, 0x00, 0x8C, 0x05, 0x24, 0x0C, 0x6A, 0x0B, 0x0C, 0x00, 0x07, 0x02, 0x00, 0x5A, -/* 0000D930 */ 0x00, 0x0C, 0x5A, 0x01, 0x07, 0x1F, 0x02, 0x0B, 0x0B, 0x47, 0x08, 0x0B, 0x8C, 0x05, 0x11, 0x0B, -/* 0000D940 */ 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x08, 0x1F, 0x02, 0x0B, 0x0B, 0x0F, 0x15, 0x00, -/* 0000D950 */ 0x0B, 0x8C, 0x05, 0x03, 0x0C, 0x6A, 0x0B, 0x0C, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5A, -/* 0000D960 */ 0x01, 0x03, 0x1F, 0x02, 0xFF, 0x0B, 0x8C, 0x05, 0x03, 0x0C, 0x6A, 0x0B, 0x0C, 0x02, 0x07, 0x02, -/* 0000D970 */ 0x00, 0x5A, 0x00, 0x0C, 0x5A, 0x01, 0x08, 0x1F, 0x02, 0x0B, 0x0B, 0x47, 0x09, 0x0B, 0xA6, 0x0B, -/* 0000D980 */ 0x14, 0x03, 0x00, 0x09, 0x0B, 0x09, 0x31, 0x00, 0x8C, 0x05, 0x04, 0x0B, 0x07, 0x03, 0x00, 0x5A, -/* 0000D990 */ 0x00, 0x02, 0xCA, 0x0C, 0x5A, 0x01, 0x0C, 0x5A, 0x02, 0x04, 0x1F, 0x03, 0x0B, 0x0B, 0x47, 0x09, -/* 0000D9A0 */ 0x0B, 0x8C, 0x05, 0x03, 0x0C, 0x6A, 0x0B, 0x0C, 0x03, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x5A, -/* 0000D9B0 */ 0x01, 0x08, 0x5A, 0x02, 0x09, 0x1F, 0x03, 0xFF, 0x0B, 0x8C, 0x02, 0x02, 0x0B, 0x4B, 0x0B, 0x07, -/* 0000D9C0 */ 0x04, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x09, 0x5A, 0x02, 0x05, 0x5A, 0x03, 0x06, 0x1F, 0x04, -/* 0000D9D0 */ 0xFF, 0x0B, 0x47, 0x0B, 0x09, 0x8C, 0x05, 0x06, 0x0C, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8C, -/* 0000D9E0 */ 0x05, 0x1A, 0x0D, 0x5A, 0x01, 0x0D, 0x8C, 0x01, 0x03, 0x0D, 0x4B, 0x0D, 0x5A, 0x02, 0x0D, 0x5A, -/* 0000D9F0 */ 0x03, 0x08, 0x1F, 0x04, 0x0C, 0x0C, 0x74, 0x0C, 0x0B, 0x04, 0x5F, 0x0B, 0x09, 0x05, 0x80, 0x0B, -/* 0000DA00 */ 0x0B, 0xF8, 0x00, 0xFA, 0x0B, 0x47, 0x00, 0x08, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, -/* 0000DA10 */ 0x36, 0x03, 0xFE, 0x8E, 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0xF0, 0x01, 0xFE, 0x25, 0x02, 0xFE, 0x25, -/* 0000DA20 */ 0x02, 0xAB, 0xFF, 0xEB, 0x38, 0x02, 0x00, 0x10, 0x09, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, -/* 0000DA30 */ 0x0E, 0x00, 0x2B, 0x00, 0x15, 0x00, 0x43, 0x00, 0x16, 0x00, 0x56, 0x00, 0x18, 0x00, 0x38, 0x00, -/* 0000DA40 */ 0x15, 0x00, 0x38, 0x00, 0x15, 0x00, 0x9B, 0x00, 0x18, 0x00, 0x47, 0x00, 0x0A, 0x00, 0x3A, 0x00, -/* 0000DA50 */ 0x19, 0x00, 0x3F, 0x00, 0x18, 0x00, 0x58, 0x00, 0x19, 0x00, 0x4D, 0x00, 0x28, 0x00, 0x65, 0x00, -/* 0000DA60 */ 0x0B, 0x00, 0x3D, 0x00, 0x08, 0x00, 0x1C, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x07, 0x88, 0x01, -/* 0000DA70 */ 0x00, 0xFE, 0x65, 0x0C, 0x62, 0xA0, 0x41, 0xF1, 0x00, 0xB1, 0xFF, 0x8C, 0x36, 0x02, 0x00, 0xFF, -/* 0000DA80 */ 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFF, 0x8C, 0x36, 0x02, 0x00, 0xFE, 0xE1, 0x01, 0xFE, 0xE1, -/* 0000DA90 */ 0x01, 0x03, 0x08, 0x09, 0x0E, 0x07, 0x39, 0x37, 0x04, 0x06, 0x03, 0x03, 0x03, 0x03, 0x01, 0x0D, -/* 0000DAA0 */ 0x07, 0x06, 0xFE, 0xC3, 0x03, 0x05, 0xFE, 0x21, 0x04, 0x06, 0xFE, 0x20, 0x04, 0x08, 0x01, 0x00, -/* 0000DAB0 */ 0x01, 0x01, 0xB9, 0xAC, 0x0B, 0x59, 0x0E, 0xB1, 0x09, 0x0E, 0x2C, 0x0E, 0x09, 0x15, 0x03, 0x00, -/* 0000DAC0 */ 0x0E, 0x03, 0x09, 0x25, 0x00, 0x8C, 0x04, 0x0A, 0x0E, 0xE1, 0x0E, 0x09, 0x0E, 0x00, 0x0F, 0x18, -/* 0000DAD0 */ 0x00, 0x0E, 0x8C, 0x04, 0x03, 0x0F, 0x6A, 0x0E, 0x0F, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0F, -/* 0000DAE0 */ 0x5A, 0x01, 0x04, 0x5A, 0x02, 0x05, 0x1F, 0x03, 0xFF, 0x0E, 0x8C, 0x04, 0x04, 0x0E, 0x07, 0x03, -/* 0000DAF0 */ 0x00, 0x5A, 0x00, 0x06, 0xCA, 0x0F, 0x5A, 0x01, 0x0F, 0x5A, 0x02, 0x02, 0x1F, 0x03, 0x0E, 0x0E, -/* 0000DB00 */ 0x47, 0x0A, 0x0E, 0x8C, 0x01, 0x02, 0x0E, 0x4B, 0x0E, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x06, 0x5A, -/* 0000DB10 */ 0x01, 0x0A, 0x95, 0x0F, 0x0B, 0x07, 0x5A, 0x02, 0x0F, 0x95, 0x0F, 0x0B, 0x08, 0x5A, 0x03, 0x0F, -/* 0000DB20 */ 0x1F, 0x04, 0xFF, 0x0E, 0x8C, 0x04, 0x24, 0x0F, 0x6A, 0x0E, 0x0F, 0x01, 0x07, 0x02, 0x00, 0x5A, -/* 0000DB30 */ 0x00, 0x0F, 0x5A, 0x01, 0x09, 0x1F, 0x02, 0x0E, 0x0E, 0x47, 0x0C, 0x0E, 0x8C, 0x04, 0x0B, 0x0E, -/* 0000DB40 */ 0x07, 0x02, 0x00, 0x5A, 0x00, 0x06, 0x8C, 0x04, 0x03, 0x10, 0x6A, 0x0F, 0x10, 0x02, 0x07, 0x03, -/* 0000DB50 */ 0x00, 0x5A, 0x00, 0x10, 0x5A, 0x01, 0x0C, 0x5A, 0x02, 0x0A, 0x1F, 0x03, 0x0F, 0x0F, 0x5A, 0x01, -/* 0000DB60 */ 0x0F, 0x1F, 0x02, 0x00, 0x0E, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x8A, 0x02, 0xFE, -/* 0000DB70 */ 0x38, 0x03, 0xFE, 0xE2, 0x01, 0xFF, 0xAA, 0x36, 0x02, 0x00, 0x07, 0x07, 0x00, 0x00, 0x00, 0x18, -/* 0000DB80 */ 0x00, 0x53, 0x00, 0x18, 0x00, 0x70, 0x00, 0x19, 0x00, 0x3A, 0x00, 0x21, 0x00, 0x52, 0x00, 0x18, -/* 0000DB90 */ 0x00, 0x31, 0x00, 0x2E, 0x00, 0x42, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x43, 0xA8, 0x01, 0x00, -/* 0000DBA0 */ 0xFE, 0xDF, 0x0B, 0x0C, 0xB3, 0x41, 0xC1, 0x00, 0xFE, 0x1F, 0x04, 0xB0, 0xFF, 0x6C, 0x1A, 0x02, -/* 0000DBB0 */ 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFF, 0x6C, 0x1A, 0x02, 0x00, 0xFE, 0xBC, 0x1B, -/* 0000DBC0 */ 0xFE, 0xBC, 0x1B, 0x45, 0x18, 0x23, 0x37, 0x07, 0xFE, 0xA3, 0x01, 0xFE, 0x83, 0x01, 0x04, 0x12, -/* 0000DBD0 */ 0x26, 0x26, 0x26, 0x26, 0x01, 0x36, 0x37, 0x06, 0xFE, 0xF6, 0x03, 0x06, 0xFE, 0xC8, 0x04, 0x08, -/* 0000DBE0 */ 0x06, 0xFE, 0x46, 0x03, 0x0B, 0x06, 0xFE, 0xF5, 0x03, 0x07, 0x06, 0xFE, 0x00, 0x04, 0x06, 0xFE, -/* 0000DBF0 */ 0xAD, 0x03, 0x05, 0xFE, 0xBC, 0x03, 0x05, 0xFE, 0xFF, 0x03, 0x06, 0xFE, 0x28, 0x04, 0x05, 0xFE, -/* 0000DC00 */ 0x29, 0x04, 0x05, 0xFE, 0x2A, 0x04, 0x06, 0xFE, 0x2B, 0x04, 0x06, 0xFE, 0x2C, 0x04, 0x05, 0xFE, -/* 0000DC10 */ 0x2D, 0x04, 0x06, 0xFE, 0x2E, 0x04, 0x06, 0xFE, 0x3F, 0x03, 0x06, 0xFE, 0xFA, 0x03, 0x01, 0x01, -/* 0000DC20 */ 0x01, 0x15, 0x06, 0xFE, 0xFD, 0x03, 0x06, 0xFE, 0xFE, 0x03, 0x06, 0xFE, 0x2F, 0x04, 0x06, 0xFE, -/* 0000DC30 */ 0xC2, 0x03, 0x06, 0xFE, 0xB4, 0x03, 0x06, 0xFE, 0xFB, 0x03, 0x01, 0x00, 0x01, 0x14, 0x01, 0x03, -/* 0000DC40 */ 0x06, 0xFE, 0xFC, 0x03, 0x05, 0xFE, 0xD2, 0x04, 0xFE, 0x5E, 0x05, 0x2C, 0x38, 0x23, 0x0D, 0x03, -/* 0000DC50 */ 0x00, 0x38, 0x02, 0x09, 0x12, 0x00, 0x8C, 0x04, 0x03, 0x39, 0x6A, 0x38, 0x39, 0x00, 0x07, 0x01, -/* 0000DC60 */ 0x00, 0x5A, 0x00, 0x39, 0x1F, 0x01, 0xFF, 0x38, 0x8C, 0x04, 0x06, 0x38, 0x07, 0x04, 0x00, 0x5A, -/* 0000DC70 */ 0x00, 0x04, 0x8C, 0x04, 0x13, 0x39, 0x5A, 0x01, 0x39, 0x5A, 0x02, 0x23, 0x5A, 0x03, 0x03, 0x1F, -/* 0000DC80 */ 0x04, 0x38, 0x38, 0x0E, 0x20, 0x00, 0x38, 0x5F, 0x38, 0x23, 0x01, 0x0E, 0x18, 0x00, 0x38, 0x8C, -/* 0000DC90 */ 0x04, 0x03, 0x39, 0x6A, 0x38, 0x39, 0x02, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x39, 0x5A, 0x01, 0x05, -/* 0000DCA0 */ 0x5A, 0x02, 0x05, 0x1F, 0x03, 0xFF, 0x38, 0x74, 0x06, 0x23, 0x03, 0x2C, 0x38, 0x25, 0x14, 0x03, -/* 0000DCB0 */ 0x00, 0x38, 0x07, 0x09, 0x1C, 0x00, 0x8C, 0x04, 0x04, 0x38, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x04, -/* 0000DCC0 */ 0xCA, 0x39, 0x5A, 0x01, 0x39, 0x5A, 0x02, 0x08, 0x1F, 0x03, 0x38, 0x38, 0x47, 0x25, 0x38, 0x09, -/* 0000DCD0 */ 0x18, 0x00, 0x8C, 0x04, 0x24, 0x39, 0x6A, 0x38, 0x39, 0x04, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x39, -/* 0000DCE0 */ 0x5A, 0x01, 0x25, 0x1F, 0x02, 0x38, 0x38, 0x47, 0x25, 0x38, 0x8C, 0x03, 0x02, 0x38, 0x4B, 0x38, -/* 0000DCF0 */ 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x25, 0x5A, 0x02, 0x09, 0x5A, 0x03, 0x0A, 0xCC, -/* 0000DD00 */ 0x39, 0x02, 0x9F, 0x00, 0x0B, 0x39, 0x9F, 0x01, 0x0C, 0x39, 0x5A, 0x04, 0x39, 0x5A, 0x05, 0x0C, -/* 0000DD10 */ 0x1F, 0x06, 0x38, 0x38, 0x47, 0x28, 0x38, 0x8C, 0x03, 0x02, 0x38, 0x4B, 0x38, 0x07, 0x06, 0x00, -/* 0000DD20 */ 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x25, 0x5A, 0x02, 0x0D, 0x5A, 0x03, 0x0A, 0xCC, 0x39, 0x03, 0x9F, -/* 0000DD30 */ 0x00, 0x0E, 0x39, 0x9F, 0x01, 0x0F, 0x39, 0x9F, 0x02, 0x10, 0x39, 0x5A, 0x04, 0x39, 0x5A, 0x05, -/* 0000DD40 */ 0x0E, 0x1F, 0x06, 0x38, 0x38, 0x47, 0x29, 0x38, 0x8C, 0x04, 0x3B, 0x38, 0x4B, 0x38, 0x5F, 0x38, -/* 0000DD50 */ 0x38, 0x05, 0x47, 0x2A, 0x38, 0x14, 0x03, 0x00, 0x29, 0x0F, 0x09, 0x10, 0x00, 0x8C, 0x04, 0x3B, -/* 0000DD60 */ 0x38, 0x4B, 0x38, 0x5F, 0x38, 0x38, 0x06, 0x47, 0x2A, 0x38, 0x09, 0x15, 0x00, 0x14, 0x03, 0x00, -/* 0000DD70 */ 0x29, 0x10, 0x09, 0x0D, 0x00, 0x8C, 0x04, 0x3B, 0x38, 0x4B, 0x38, 0x5F, 0x38, 0x38, 0x07, 0x47, -/* 0000DD80 */ 0x2A, 0x38, 0x8C, 0x03, 0x02, 0x38, 0x4B, 0x38, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, -/* 0000DD90 */ 0x25, 0x5A, 0x02, 0x10, 0x5A, 0x03, 0x0A, 0xA6, 0x39, 0x5A, 0x04, 0x39, 0xA6, 0x39, 0x5A, 0x05, -/* 0000DDA0 */ 0x39, 0x1F, 0x06, 0x38, 0x38, 0x47, 0x2B, 0x38, 0x8C, 0x03, 0x02, 0x38, 0x4B, 0x38, 0x07, 0x06, -/* 0000DDB0 */ 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x25, 0x5A, 0x02, 0x11, 0x5A, 0x03, 0x0A, 0xCC, 0x39, 0x03, -/* 0000DDC0 */ 0x9F, 0x00, 0x12, 0x39, 0x9F, 0x01, 0x13, 0x39, 0x9F, 0x02, 0x14, 0x39, 0x5A, 0x04, 0x39, 0x5A, -/* 0000DDD0 */ 0x05, 0x13, 0x1F, 0x06, 0x38, 0x38, 0x47, 0x2C, 0x38, 0xA6, 0x38, 0x47, 0x2D, 0x38, 0x8C, 0x03, -/* 0000DDE0 */ 0x03, 0x38, 0x4B, 0x38, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x25, 0x5A, 0x02, 0x15, -/* 0000DDF0 */ 0x5A, 0x03, 0x16, 0x5A, 0x04, 0x17, 0x5A, 0x05, 0x16, 0x1F, 0x06, 0x38, 0x38, 0x47, 0x2E, 0x38, -/* 0000DE00 */ 0xA6, 0x38, 0x47, 0x2F, 0x38, 0xA6, 0x38, 0x47, 0x30, 0x38, 0xA6, 0x38, 0x47, 0x31, 0x38, 0x5F, -/* 0000DE10 */ 0x38, 0x25, 0x08, 0x47, 0x32, 0x38, 0x5F, 0x38, 0x25, 0x09, 0x47, 0x33, 0x38, 0x2C, 0x38, 0x32, -/* 0000DE20 */ 0x15, 0x0B, 0x00, 0x38, 0x07, 0x2C, 0x38, 0x33, 0x15, 0x03, 0x00, 0x38, 0x07, 0x09, 0x44, 0x00, -/* 0000DE30 */ 0x8C, 0x03, 0x03, 0x38, 0x4B, 0x38, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x25, 0x5A, -/* 0000DE40 */ 0x02, 0x18, 0x5A, 0x03, 0x16, 0x5A, 0x04, 0x17, 0x5A, 0x05, 0x16, 0x1F, 0x06, 0x38, 0x38, 0x47, -/* 0000DE50 */ 0x32, 0x38, 0x8C, 0x03, 0x03, 0x38, 0x4B, 0x38, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, -/* 0000DE60 */ 0x25, 0x5A, 0x02, 0x19, 0x5A, 0x03, 0x32, 0x5A, 0x04, 0x17, 0x5A, 0x05, 0x17, 0x1F, 0x06, 0x38, -/* 0000DE70 */ 0x38, 0x47, 0x33, 0x38, 0x8C, 0x03, 0x02, 0x38, 0x4B, 0x38, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, -/* 0000DE80 */ 0x5A, 0x01, 0x25, 0x5A, 0x02, 0x1A, 0x5A, 0x03, 0x1B, 0xA6, 0x39, 0x5A, 0x04, 0x39, 0x5A, 0x05, -/* 0000DE90 */ 0x06, 0x1F, 0x06, 0x38, 0x38, 0x47, 0x34, 0x38, 0x8C, 0x03, 0x07, 0x38, 0x4B, 0x38, 0x07, 0x02, -/* 0000DEA0 */ 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x24, 0x1F, 0x02, 0x38, 0x38, 0x47, 0x24, 0x38, 0x8C, 0x04, -/* 0000DEB0 */ 0x2A, 0x38, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x24, 0x5A, 0x02, 0x28, 0xCC, 0x39, -/* 0000DEC0 */ 0x01, 0x9F, 0x00, 0x1C, 0x39, 0x5A, 0x03, 0x39, 0x8C, 0x04, 0x2B, 0x39, 0x5A, 0x04, 0x39, 0x1F, -/* 0000DED0 */ 0x05, 0x38, 0x38, 0x47, 0x35, 0x38, 0x2C, 0x38, 0x2B, 0x15, 0x03, 0x00, 0x38, 0x07, 0x09, 0x3D, -/* 0000DEE0 */ 0x00, 0x8C, 0x03, 0x06, 0x38, 0x4B, 0x38, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x2B, -/* 0000DEF0 */ 0x1F, 0x02, 0x38, 0x38, 0x0F, 0x26, 0x00, 0x38, 0x8C, 0x04, 0x03, 0x39, 0x6A, 0x38, 0x39, 0x0A, -/* 0000DF00 */ 0x07, 0x02, 0x00, 0x5A, 0x00, 0x39, 0x8C, 0x04, 0x0B, 0x3A, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, -/* 0000DF10 */ 0x5A, 0x01, 0x2B, 0x1F, 0x02, 0x3A, 0x3A, 0x5A, 0x01, 0x3A, 0x1F, 0x02, 0xFF, 0x38, 0x14, 0x03, -/* 0000DF20 */ 0x00, 0x29, 0x10, 0x09, 0xD2, 0x00, 0x2C, 0x38, 0x2B, 0x14, 0x03, 0x00, 0x38, 0x07, 0x09, 0x12, -/* 0000DF30 */ 0x00, 0x8C, 0x04, 0x03, 0x39, 0x6A, 0x38, 0x39, 0x0B, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x39, 0x1F, -/* 0000DF40 */ 0x01, 0xFF, 0x38, 0x8C, 0x04, 0x06, 0x38, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x04, 0x8C, 0x04, 0x1F, -/* 0000DF50 */ 0x39, 0x5A, 0x01, 0x39, 0x5A, 0x02, 0x2B, 0x1F, 0x03, 0x38, 0x38, 0x47, 0x2B, 0x38, 0xE5, 0x1C, -/* 0000DF60 */ 0x00, 0x8C, 0x04, 0x03, 0x39, 0x6A, 0x38, 0x39, 0x0C, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x39, 0x5A, -/* 0000DF70 */ 0x01, 0x2B, 0x1F, 0x02, 0x38, 0x38, 0x47, 0x2D, 0x38, 0xE9, 0x09, 0x3B, 0x00, 0xE7, 0x26, 0x06, -/* 0000DF80 */ 0x8C, 0x04, 0x22, 0x38, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x26, 0x1F, 0x02, 0xFF, -/* 0000DF90 */ 0x38, 0x8C, 0x04, 0x03, 0x39, 0x6A, 0x38, 0x39, 0x0A, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x39, 0x8C, -/* 0000DFA0 */ 0x04, 0x0B, 0x3A, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x2B, 0x1F, 0x02, 0x3A, 0x3A, -/* 0000DFB0 */ 0x5A, 0x01, 0x3A, 0x1F, 0x02, 0xFF, 0x38, 0xE9, 0x8C, 0x03, 0x03, 0x38, 0x4B, 0x38, 0x07, 0x06, -/* 0000DFC0 */ 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x25, 0x5A, 0x02, 0x1D, 0x5A, 0x03, 0x1E, 0x5A, 0x04, 0x1F, -/* 0000DFD0 */ 0x5A, 0x05, 0x2D, 0x1F, 0x06, 0x38, 0x38, 0x47, 0x2F, 0x38, 0x8C, 0x04, 0x0F, 0x39, 0x6A, 0x38, -/* 0000DFE0 */ 0x39, 0x0D, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x39, 0x5A, 0x01, 0x2D, 0x5A, 0x02, 0x2F, 0x1F, 0x03, -/* 0000DFF0 */ 0x38, 0x38, 0x47, 0x31, 0x38, 0x09, 0x6D, 0x00, 0xA6, 0x38, 0x47, 0x2B, 0x38, 0xA6, 0x38, 0x47, -/* 0000E000 */ 0x2C, 0x38, 0x8C, 0x03, 0x03, 0x38, 0x4B, 0x38, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, -/* 0000E010 */ 0x25, 0x5A, 0x02, 0x1D, 0x5A, 0x03, 0x1E, 0x5A, 0x04, 0x1F, 0x5A, 0x05, 0x1E, 0x1F, 0x06, 0x38, -/* 0000E020 */ 0x38, 0x47, 0x2F, 0x38, 0x14, 0x03, 0x00, 0x29, 0x0F, 0x09, 0x1E, 0x00, 0x8C, 0x04, 0x0F, 0x39, -/* 0000E030 */ 0x6A, 0x38, 0x39, 0x0D, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x39, 0x5A, 0x01, 0x2F, 0x5A, 0x02, 0x1E, -/* 0000E040 */ 0x1F, 0x03, 0x38, 0x38, 0x47, 0x31, 0x38, 0x09, 0x1B, 0x00, 0x8C, 0x04, 0x0F, 0x39, 0x6A, 0x38, -/* 0000E050 */ 0x39, 0x0D, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x39, 0x5A, 0x01, 0x2F, 0x5A, 0x02, 0x20, 0x1F, 0x03, -/* 0000E060 */ 0x38, 0x38, 0x47, 0x31, 0x38, 0x8C, 0x03, 0x03, 0x38, 0x4B, 0x38, 0x07, 0x06, 0x00, 0x5A, 0x00, -/* 0000E070 */ 0x04, 0x5A, 0x01, 0x25, 0x5A, 0x02, 0x21, 0x5A, 0x03, 0x2F, 0x5A, 0x04, 0x1F, 0x5A, 0x05, 0x31, -/* 0000E080 */ 0x1F, 0x06, 0x38, 0x38, 0x47, 0x30, 0x38, 0x74, 0x28, 0x23, 0x0E, 0x5F, 0x38, 0x35, 0x0F, 0x74, -/* 0000E090 */ 0x38, 0x23, 0x10, 0x74, 0x29, 0x23, 0x11, 0xA6, 0x38, 0x15, 0x03, 0x00, 0x2B, 0x38, 0x09, 0x04, -/* 0000E0A0 */ 0x00, 0x74, 0x2B, 0x23, 0x12, 0xA6, 0x38, 0x15, 0x03, 0x00, 0x2C, 0x38, 0x09, 0x5A, 0x00, 0x74, -/* 0000E0B0 */ 0x2C, 0x23, 0x13, 0x8C, 0x04, 0x3C, 0x38, 0x4B, 0x38, 0x5F, 0x38, 0x38, 0x14, 0x74, 0x38, 0x23, -/* 0000E0C0 */ 0x15, 0x14, 0x03, 0x00, 0x2C, 0x13, 0x09, 0x11, 0x00, 0x8C, 0x04, 0x3C, 0x38, 0x4B, 0x38, 0x5F, -/* 0000E0D0 */ 0x38, 0x38, 0x16, 0x74, 0x38, 0x23, 0x15, 0x09, 0x2F, 0x00, 0x14, 0x03, 0x00, 0x2C, 0x12, 0x09, -/* 0000E0E0 */ 0x11, 0x00, 0x8C, 0x04, 0x3C, 0x38, 0x4B, 0x38, 0x5F, 0x38, 0x38, 0x17, 0x74, 0x38, 0x23, 0x15, -/* 0000E0F0 */ 0x09, 0x16, 0x00, 0x14, 0x03, 0x00, 0x2C, 0x14, 0x09, 0x0E, 0x00, 0x8C, 0x04, 0x3C, 0x38, 0x4B, -/* 0000E100 */ 0x38, 0x5F, 0x38, 0x38, 0x18, 0x74, 0x38, 0x23, 0x15, 0x74, 0x2E, 0x23, 0x19, 0x74, 0x2F, 0x23, -/* 0000E110 */ 0x1A, 0x74, 0x30, 0x23, 0x1B, 0xA6, 0x38, 0x15, 0x03, 0x00, 0x33, 0x38, 0x09, 0x08, 0x00, 0x74, -/* 0000E120 */ 0x32, 0x23, 0x1C, 0x74, 0x33, 0x23, 0x1D, 0x74, 0x2A, 0x23, 0x1E, 0x74, 0x34, 0x23, 0x1F, 0xE5, -/* 0000E130 */ 0x19, 0x00, 0x8C, 0x04, 0x03, 0x39, 0x6A, 0x38, 0x39, 0x20, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x39, -/* 0000E140 */ 0x5A, 0x01, 0x23, 0x1F, 0x02, 0xFF, 0x38, 0xE9, 0x09, 0x27, 0x00, 0xE7, 0x27, 0x06, 0x8C, 0x04, -/* 0000E150 */ 0x22, 0x38, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x27, 0x1F, 0x02, 0xFF, 0x38, 0x8C, -/* 0000E160 */ 0x04, 0x03, 0x39, 0x6A, 0x38, 0x39, 0x21, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x39, 0x1F, 0x01, 0xFF, -/* 0000E170 */ 0x38, 0xE9, 0x5F, 0x38, 0x23, 0x22, 0x0F, 0x04, 0x00, 0x38, 0x74, 0x22, 0x23, 0x23, 0x47, 0x38, -/* 0000E180 */ 0x23, 0x8C, 0x04, 0x06, 0x39, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x04, 0x8C, 0x04, 0x1E, 0x3A, 0x5A, -/* 0000E190 */ 0x01, 0x3A, 0x5F, 0x3A, 0x23, 0x22, 0x5A, 0x02, 0x3A, 0x1F, 0x03, 0x39, 0x39, 0x74, 0x39, 0x38, -/* 0000E1A0 */ 0x24, 0x74, 0x06, 0x23, 0x25, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x89, 0x02, 0xFE, 0xF2, 0x01, 0xFE, -/* 0000E1B0 */ 0x8D, 0x02, 0xFE, 0xF2, 0x01, 0xFE, 0x36, 0x03, 0xFE, 0x30, 0x03, 0xFE, 0x31, 0x03, 0xFE, 0x32, -/* 0000E1C0 */ 0x03, 0xFE, 0x17, 0x02, 0xFE, 0x14, 0x02, 0xFE, 0x85, 0x02, 0xFE, 0x88, 0x02, 0xFE, 0xE5, 0x01, -/* 0000E1D0 */ 0xEE, 0xFE, 0xD3, 0x04, 0xFE, 0xF7, 0x01, 0xFE, 0xF3, 0x01, 0xFE, 0x32, 0x02, 0xFE, 0x02, 0x02, -/* 0000E1E0 */ 0xFE, 0x03, 0x02, 0xFE, 0x2C, 0x03, 0xFE, 0x04, 0x02, 0xFE, 0x33, 0x03, 0xFE, 0x34, 0x03, 0xFE, -/* 0000E1F0 */ 0x35, 0x03, 0xFE, 0x0A, 0x02, 0xFE, 0x09, 0x02, 0xFE, 0x07, 0x02, 0xFE, 0x0B, 0x02, 0xFE, 0x08, -/* 0000E200 */ 0x02, 0xFE, 0x05, 0x02, 0xFE, 0x0E, 0x02, 0xFE, 0xE3, 0x01, 0xFE, 0x90, 0x02, 0xFE, 0x0C, 0x02, -/* 0000E210 */ 0xFE, 0x0C, 0x02, 0xFE, 0x0C, 0x02, 0xFE, 0x06, 0x02, 0xFF, 0xC1, 0x1A, 0x02, 0x00, 0x50, 0x00, -/* 0000E220 */ 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3B, 0x00, 0x12, 0x00, 0x3F, 0x00, 0x27, 0x00, 0x9B, 0x00, 0x18, -/* 0000E230 */ 0x00, 0x6D, 0x00, 0x04, 0x00, 0x61, 0x00, 0x0B, 0x00, 0x3A, 0x00, 0x1C, 0x00, 0x4F, 0x00, 0x18, -/* 0000E240 */ 0x00, 0x49, 0x00, 0x2D, 0x00, 0x71, 0x00, 0x31, 0x00, 0x73, 0x00, 0x0D, 0x00, 0x4B, 0x00, 0x08, -/* 0000E250 */ 0x00, 0x2F, 0x00, 0x10, 0x00, 0x43, 0x00, 0x08, 0x00, 0x30, 0x00, 0x0D, 0x00, 0x50, 0x00, 0x26, -/* 0000E260 */ 0x00, 0x5F, 0x00, 0x31, 0x00, 0x7D, 0x00, 0x05, 0x00, 0x31, 0x00, 0x22, 0x00, 0x67, 0x00, 0x05, -/* 0000E270 */ 0x00, 0x37, 0x00, 0x05, 0x00, 0x37, 0x00, 0x05, 0x00, 0x3F, 0x00, 0x07, 0x00, 0x51, 0x00, 0x07, -/* 0000E280 */ 0x00, 0x52, 0x00, 0x13, 0x00, 0x7E, 0x00, 0x22, 0x00, 0x6F, 0x00, 0x22, 0x00, 0x96, 0x00, 0x24, -/* 0000E290 */ 0x00, 0x9A, 0x00, 0x16, 0x00, 0x41, 0x00, 0x28, 0x00, 0xA2, 0x00, 0x22, 0x00, 0x62, 0x00, 0x26, -/* 0000E2A0 */ 0x00, 0x58, 0x00, 0x08, 0x00, 0x30, 0x00, 0x0B, 0x00, 0x3F, 0x00, 0x12, 0x00, 0x4F, 0x00, 0x1E, -/* 0000E2B0 */ 0x00, 0x74, 0x00, 0x1E, 0x00, 0x4A, 0x00, 0x01, 0x00, 0x24, 0x00, 0x11, 0x00, 0x2E, 0x00, 0x27, -/* 0000E2C0 */ 0x00, 0x5F, 0x00, 0x22, 0x00, 0x76, 0x00, 0x1E, 0x00, 0x7D, 0x00, 0x05, 0x00, 0x2A, 0x00, 0x05, -/* 0000E2D0 */ 0x00, 0x31, 0x00, 0x22, 0x00, 0x69, 0x00, 0x08, 0x00, 0x33, 0x00, 0x1E, 0x00, 0x78, 0x00, 0x1B, -/* 0000E2E0 */ 0x00, 0x7B, 0x00, 0x22, 0x00, 0xC6, 0x00, 0x04, 0x00, 0x38, 0x00, 0x08, 0x00, 0x43, 0x00, 0x04, -/* 0000E2F0 */ 0x00, 0x2F, 0x00, 0x0A, 0x00, 0x32, 0x00, 0x04, 0x00, 0x47, 0x00, 0x0A, 0x00, 0x39, 0x00, 0x04, -/* 0000E300 */ 0x00, 0x46, 0x00, 0x0E, 0x00, 0x5F, 0x00, 0x08, 0x00, 0x3C, 0x00, 0x11, 0x00, 0x65, 0x00, 0x08, -/* 0000E310 */ 0x00, 0x3A, 0x00, 0x11, 0x00, 0x63, 0x00, 0x08, 0x00, 0x3A, 0x00, 0x0E, 0x00, 0x81, 0x00, 0x04, -/* 0000E320 */ 0x00, 0x4C, 0x00, 0x04, 0x00, 0x4E, 0x00, 0x04, 0x00, 0x4F, 0x00, 0x0A, 0x00, 0x42, 0x00, 0x04, -/* 0000E330 */ 0x00, 0x58, 0x00, 0x04, 0x00, 0x67, 0x00, 0x04, 0x00, 0x40, 0x00, 0x07, 0x00, 0xA9, 0x00, 0x1B, -/* 0000E340 */ 0x00, 0x3C, 0x00, 0x01, 0x00, 0x20, 0x00, 0x11, 0x00, 0x6B, 0x01, 0x13, 0x00, 0x4A, 0x00, 0x08, -/* 0000E350 */ 0x00, 0x3B, 0x00, 0x04, 0x00, 0x70, 0x00, 0x23, 0x00, 0x7E, 0x00, 0x06, 0x00, 0x3B, 0x00, 0x00, -/* 0000E360 */ 0x3F, 0x5C, 0x00, 0xC1, 0x53, 0xA8, 0x25, 0x01, 0xFE, 0xEA, 0x0A, 0x14, 0xA0, 0x41, 0xD1, 0x00, -/* 0000E370 */ 0xA7, 0xFF, 0x1F, 0xE9, 0x01, 0x00, 0x06, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFF, 0x1F, -/* 0000E380 */ 0xE9, 0x01, 0x00, 0xFE, 0x9F, 0x30, 0xFE, 0x9F, 0x30, 0x0B, 0x16, 0x1A, 0x09, 0x9B, 0x9B, 0x02, -/* 0000E390 */ 0x0A, 0x08, 0x08, 0x08, 0x08, 0x05, 0x02, 0x19, 0x1A, 0x08, 0x06, 0xFE, 0x3D, 0x03, 0x06, 0xFE, -/* 0000E3A0 */ 0x07, 0x04, 0x05, 0xFE, 0x08, 0x04, 0x05, 0xFE, 0x09, 0x04, 0x05, 0xFE, 0x0A, 0x04, 0x06, 0xFE, -/* 0000E3B0 */ 0x4C, 0x03, 0x06, 0xFE, 0x40, 0x03, 0x06, 0xFE, 0x42, 0x03, 0x0B, 0x06, 0xFE, 0x44, 0x03, 0x07, -/* 0000E3C0 */ 0x06, 0xFE, 0x0B, 0x04, 0x0C, 0x06, 0xFE, 0x43, 0x03, 0x06, 0xFE, 0x0C, 0x04, 0x06, 0xFE, 0x0D, -/* 0000E3D0 */ 0x04, 0x06, 0xFE, 0x0F, 0x04, 0x06, 0xFE, 0x8D, 0x03, 0x05, 0xFE, 0x0E, 0x04, 0xFE, 0x63, 0x02, -/* 0000E3E0 */ 0xA6, 0x16, 0xA6, 0x17, 0xA6, 0x18, 0x8C, 0x02, 0x32, 0x1C, 0x14, 0x0C, 0x00, 0x1C, 0x03, 0x8C, -/* 0000E3F0 */ 0x02, 0x32, 0x1C, 0x14, 0x03, 0x00, 0x1C, 0x04, 0x09, 0x3F, 0x02, 0xDE, 0x00, 0x03, 0x01, 0xB6, -/* 0000E400 */ 0x1C, 0x00, 0x01, 0x53, 0x01, 0x00, 0x16, 0x1C, 0x93, 0x00, 0x02, 0x16, 0x8C, 0x02, 0x03, 0x1D, -/* 0000E410 */ 0x6A, 0x1C, 0x1D, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x1D, 0x8C, 0x02, 0x23, 0x1E, 0x07, 0x03, -/* 0000E420 */ 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x05, 0xB6, 0x20, 0x00, 0x01, 0x53, 0x01, 0x01, 0x1F, 0x20, -/* 0000E430 */ 0x5A, 0x02, 0x1F, 0x1F, 0x03, 0x1E, 0x1E, 0x5A, 0x01, 0x1E, 0x8C, 0x02, 0x36, 0x1E, 0x4B, 0x1E, -/* 0000E440 */ 0x5F, 0x1E, 0x1E, 0x01, 0x5A, 0x02, 0x1E, 0x1F, 0x03, 0xFF, 0x1C, 0x8C, 0x02, 0x32, 0x1C, 0x14, -/* 0000E450 */ 0x03, 0x00, 0x1C, 0x03, 0x09, 0xE3, 0x01, 0xDE, 0x01, 0x04, 0x02, 0xB6, 0x1C, 0x00, 0xB5, 0x01, -/* 0000E460 */ 0x00, 0x00, 0x00, 0x1C, 0x1C, 0x01, 0x53, 0x01, 0x02, 0x17, 0x1C, 0x93, 0x01, 0x02, 0x17, 0x01, -/* 0000E470 */ 0x53, 0x01, 0x03, 0x18, 0x1C, 0x93, 0x01, 0x03, 0x18, 0x8C, 0x02, 0x23, 0x1C, 0x07, 0x03, 0x00, -/* 0000E480 */ 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x06, 0x8E, 0x01, 0x02, 0x1D, 0x5A, 0x02, 0x1D, 0x1F, 0x03, 0xFF, -/* 0000E490 */ 0x1C, 0x8C, 0x02, 0x23, 0x1C, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x07, 0x8E, 0x01, -/* 0000E4A0 */ 0x03, 0x1D, 0x5A, 0x02, 0x1D, 0x1F, 0x03, 0xFF, 0x1C, 0x8C, 0x02, 0x15, 0x1C, 0x07, 0x04, 0x00, -/* 0000E4B0 */ 0x5A, 0x00, 0x02, 0x8E, 0x01, 0x02, 0x1D, 0x5A, 0x01, 0x1D, 0x5A, 0x02, 0x08, 0xCB, 0x00, 0x00, -/* 0000E4C0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0x8C, 0x01, 0x13, 0x1E, 0x4B, 0x1E, -/* 0000E4D0 */ 0x78, 0x1E, 0x1D, 0x02, 0x78, 0x0B, 0x1D, 0x03, 0x78, 0x0B, 0x1D, 0x04, 0x5A, 0x03, 0x1D, 0x1F, -/* 0000E4E0 */ 0x04, 0xFF, 0x1C, 0x8C, 0x02, 0x15, 0x1C, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8E, 0x01, 0x02, -/* 0000E4F0 */ 0x1D, 0x5A, 0x01, 0x1D, 0x5A, 0x02, 0x0E, 0xCB, 0x14, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, -/* 0000E500 */ 0x1D, 0x00, 0x00, 0x00, 0x8E, 0x01, 0x02, 0x1E, 0x07, 0x01, 0x00, 0xC1, 0x01, 0x1E, 0x1E, 0x78, -/* 0000E510 */ 0x1E, 0x1D, 0x02, 0x78, 0x0F, 0x1D, 0x03, 0x78, 0x0F, 0x1D, 0x05, 0x78, 0x0F, 0x1D, 0x04, 0x5A, -/* 0000E520 */ 0x03, 0x1D, 0x1F, 0x04, 0xFF, 0x1C, 0x8C, 0x02, 0x04, 0x1C, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, -/* 0000E530 */ 0x8E, 0x01, 0x02, 0x1D, 0x5F, 0x1D, 0x1D, 0x06, 0x5A, 0x01, 0x1D, 0x8C, 0x02, 0x08, 0x1D, 0x5F, -/* 0000E540 */ 0x1D, 0x1D, 0x06, 0x5A, 0x02, 0x1D, 0x1F, 0x03, 0xFF, 0x1C, 0x8C, 0x02, 0x15, 0x1C, 0x07, 0x04, -/* 0000E550 */ 0x00, 0x5A, 0x00, 0x02, 0x8E, 0x01, 0x02, 0x1D, 0x5F, 0x1D, 0x1D, 0x06, 0x5A, 0x01, 0x1D, 0x5A, -/* 0000E560 */ 0x02, 0x11, 0xCB, 0x2C, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0x8E, -/* 0000E570 */ 0x01, 0x02, 0x1E, 0x78, 0x1E, 0x1D, 0x02, 0x78, 0x0B, 0x1D, 0x03, 0x78, 0x0F, 0x1D, 0x05, 0x78, -/* 0000E580 */ 0x0B, 0x1D, 0x04, 0x5A, 0x03, 0x1D, 0x1F, 0x04, 0xFF, 0x1C, 0x8C, 0x02, 0x15, 0x1C, 0x07, 0x04, -/* 0000E590 */ 0x00, 0x5A, 0x00, 0x02, 0x8E, 0x01, 0x02, 0x1D, 0x5F, 0x1D, 0x1D, 0x06, 0x5A, 0x01, 0x1D, 0x5A, -/* 0000E5A0 */ 0x02, 0x12, 0xCB, 0x44, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0xB6, -/* 0000E5B0 */ 0x1F, 0x00, 0xB5, 0x01, 0x00, 0x00, 0x00, 0x1F, 0x1F, 0x01, 0x57, 0x01, 0x04, 0x1E, 0x1F, 0x1D, -/* 0000E5C0 */ 0x78, 0x1E, 0x1D, 0x02, 0x78, 0x0B, 0x1D, 0x03, 0x78, 0x0F, 0x1D, 0x05, 0x78, 0x0B, 0x1D, 0x04, -/* 0000E5D0 */ 0x5A, 0x03, 0x1D, 0x1F, 0x04, 0xFF, 0x1C, 0x8C, 0x02, 0x15, 0x1C, 0x07, 0x04, 0x00, 0x5A, 0x00, -/* 0000E5E0 */ 0x02, 0x8E, 0x01, 0x02, 0x1D, 0x5F, 0x1D, 0x1D, 0x06, 0x5A, 0x01, 0x1D, 0x5A, 0x02, 0x13, 0xCB, -/* 0000E5F0 */ 0x5C, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0x8C, 0x02, 0x23, 0x1E, -/* 0000E600 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x15, 0xB6, 0x20, 0x00, 0xB5, 0x01, 0x00, 0x00, -/* 0000E610 */ 0x00, 0x20, 0x20, 0x01, 0x53, 0x01, 0x05, 0x1F, 0x20, 0x5A, 0x02, 0x1F, 0x1F, 0x03, 0x1E, 0x1E, -/* 0000E620 */ 0x78, 0x1E, 0x1D, 0x07, 0x78, 0x0F, 0x1D, 0x05, 0x78, 0x0B, 0x1D, 0x04, 0x5A, 0x03, 0x1D, 0x1F, -/* 0000E630 */ 0x04, 0xFF, 0x1C, 0x8E, 0x01, 0x02, 0x00, 0x09, 0x07, 0x00, 0xA6, 0x00, 0x09, 0x02, 0x00, 0xA6, -/* 0000E640 */ 0x00, 0x24, 0x00, 0x05, 0x70, 0x00, 0x5C, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, -/* 0000E650 */ 0x00, 0x00, 0x84, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x44, 0x00, -/* 0000E660 */ 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, -/* 0000E670 */ 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x2C, 0x00, 0x00, 0x00, 0x03, 0x04, -/* 0000E680 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, -/* 0000E690 */ 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, -/* 0000E6A0 */ 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, -/* 0000E6B0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, -/* 0000E6C0 */ 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0xFE, 0xEE, 0x01, 0xFE, 0x07, 0x03, -/* 0000E6D0 */ 0xFE, 0x83, 0x01, 0xFE, 0x82, 0x01, 0xFE, 0x81, 0x01, 0xFE, 0x80, 0x01, 0xFE, 0x15, 0x01, 0xFE, -/* 0000E6E0 */ 0x84, 0x01, 0x02, 0x01, 0x01, 0x00, 0xFE, 0x05, 0x04, 0x02, 0x02, 0x00, 0xFE, 0x1A, 0x02, 0x01, -/* 0000E6F0 */ 0xFE, 0x1E, 0x02, 0xFF, 0x36, 0xE9, 0x01, 0x00, 0x0E, 0x06, 0x00, 0x00, 0x00, 0x26, 0x00, 0x1F, -/* 0000E700 */ 0x17, 0x3F, 0x00, 0x10, 0x05, 0x2E, 0x00, 0x7A, 0x04, 0x18, 0x00, 0x53, 0x04, 0x18, 0x00, 0x50, -/* 0000E710 */ 0x00, 0x3A, 0x00, 0x93, 0x00, 0x43, 0x00, 0x91, 0x00, 0x24, 0x00, 0x45, 0x00, 0x40, 0x00, 0x96, -/* 0000E720 */ 0x00, 0x4D, 0x00, 0xA7, 0x05, 0x5C, 0x00, 0x03, 0x03, 0x07, 0x00, 0x7C, 0x00, 0x07, 0x00, 0x16, -/* 0000E730 */ 0x00, 0x00, 0x13, 0xEF, 0x00, 0x00, 0x47, 0xED, 0x00, 0x00, 0x74, 0xEB, 0x00, 0x00, 0xCB, 0xE9, -/* 0000E740 */ 0x00, 0x00, 0x2E, 0xE8, 0x00, 0x00, 0x4A, 0xE7, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, -/* 0000E750 */ 0x01, 0x00, 0xFE, 0xC7, 0x0B, 0x3A, 0xA0, 0x41, 0xD1, 0x00, 0xAE, 0xFF, 0x98, 0x16, 0x02, 0x00, -/* 0000E760 */ 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFF, 0x98, 0x16, 0x02, 0x00, 0xFE, 0x45, 0x02, 0xFE, -/* 0000E770 */ 0x45, 0x02, 0x01, 0x05, 0x05, 0x08, 0x04, 0x23, 0x22, 0x04, 0x01, 0x04, 0x04, 0x04, 0x04, 0x07, -/* 0000E780 */ 0x06, 0xFE, 0xF6, 0x03, 0x05, 0xFE, 0x1C, 0x04, 0x06, 0xFE, 0x45, 0x03, 0x72, 0x59, 0x08, 0xB1, -/* 0000E790 */ 0x05, 0x08, 0x2C, 0x08, 0x05, 0x15, 0x03, 0x00, 0x08, 0x02, 0x09, 0x18, 0x00, 0x8C, 0x04, 0x03, -/* 0000E7A0 */ 0x09, 0x6A, 0x08, 0x09, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x09, 0x5A, 0x01, 0x03, 0x5A, 0x02, -/* 0000E7B0 */ 0x04, 0x1F, 0x03, 0xFF, 0x08, 0x8C, 0x04, 0x03, 0x09, 0x6A, 0x08, 0x09, 0x01, 0x07, 0x02, 0x00, -/* 0000E7C0 */ 0x5A, 0x00, 0x09, 0x5A, 0x01, 0x05, 0x1F, 0x02, 0x08, 0x08, 0x47, 0x06, 0x08, 0xA6, 0x08, 0x14, -/* 0000E7D0 */ 0x08, 0x00, 0x06, 0x08, 0x5F, 0x08, 0x06, 0x02, 0x0F, 0x18, 0x00, 0x08, 0x8C, 0x04, 0x03, 0x09, -/* 0000E7E0 */ 0x6A, 0x08, 0x09, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x09, 0x5A, 0x01, 0x03, 0x5A, 0x02, 0x04, -/* 0000E7F0 */ 0x1F, 0x03, 0xFF, 0x08, 0x5F, 0x00, 0x06, 0x03, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, -/* 0000E800 */ 0x8A, 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0x1D, 0x02, 0xFE, 0x1B, 0x02, 0xFF, 0xBE, 0x16, 0x02, 0x00, -/* 0000E810 */ 0x07, 0x05, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3C, 0x00, 0x18, 0x00, 0x7D, 0x00, 0x18, 0x00, 0x4B, -/* 0000E820 */ 0x00, 0x0F, 0x00, 0x65, 0x00, 0x18, 0x00, 0x7D, 0x00, 0x09, 0x00, 0x38, 0x00, 0x00, 0xBF, 0x5C, -/* 0000E830 */ 0x00, 0xC1, 0x13, 0x88, 0x23, 0x00, 0xFE, 0xB1, 0x0B, 0x1B, 0xA0, 0x41, 0xC3, 0x00, 0xFE, 0x0D, -/* 0000E840 */ 0x04, 0xAD, 0xFF, 0x00, 0x00, 0x00, 0x02, 0xFF, 0xDA, 0x10, 0x02, 0x00, 0xFF, 0x00, 0x10, 0x01, -/* 0000E850 */ 0x00, 0x01, 0x01, 0xFF, 0xDA, 0x10, 0x02, 0x00, 0xFE, 0xF1, 0x04, 0xFE, 0xF1, 0x04, 0x01, 0x05, -/* 0000E860 */ 0x0D, 0x10, 0x04, 0x31, 0x30, 0x04, 0x01, 0x11, 0x11, 0x11, 0x11, 0x01, 0x0F, 0x06, 0xFE, 0xF6, -/* 0000E870 */ 0x03, 0x05, 0xFE, 0x1D, 0x04, 0x06, 0xFE, 0x45, 0x03, 0x06, 0xFE, 0xF7, 0x03, 0x06, 0xFE, 0x10, -/* 0000E880 */ 0x04, 0x06, 0xFE, 0x16, 0x04, 0x06, 0xFE, 0x17, 0x04, 0x06, 0xFE, 0x19, 0x04, 0x06, 0xFE, 0x13, -/* 0000E890 */ 0x04, 0x06, 0xFE, 0x14, 0x04, 0x07, 0xB3, 0x59, 0x10, 0xB1, 0x0D, 0x10, 0x2C, 0x10, 0x0D, 0x15, -/* 0000E8A0 */ 0x03, 0x00, 0x10, 0x02, 0x09, 0x18, 0x00, 0x8C, 0x04, 0x03, 0x11, 0x6A, 0x10, 0x11, 0x00, 0x07, -/* 0000E8B0 */ 0x03, 0x00, 0x5A, 0x00, 0x11, 0x5A, 0x01, 0x03, 0x5A, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x10, 0x8C, -/* 0000E8C0 */ 0x04, 0x03, 0x11, 0x6A, 0x10, 0x11, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x11, 0x5A, 0x01, 0x0D, -/* 0000E8D0 */ 0x1F, 0x02, 0x10, 0x10, 0x47, 0x0E, 0x10, 0xA6, 0x10, 0x14, 0x08, 0x00, 0x0E, 0x10, 0x5F, 0x10, -/* 0000E8E0 */ 0x0E, 0x02, 0x0F, 0x18, 0x00, 0x10, 0x8C, 0x04, 0x03, 0x11, 0x6A, 0x10, 0x11, 0x00, 0x07, 0x03, -/* 0000E8F0 */ 0x00, 0x5A, 0x00, 0x11, 0x5A, 0x01, 0x03, 0x5A, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x10, 0xCB, 0x00, -/* 0000E900 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x10, 0x0E, 0x03, 0x78, -/* 0000E910 */ 0x10, 0x00, 0x04, 0x5F, 0x10, 0x0E, 0x05, 0x78, 0x10, 0x00, 0x06, 0x5F, 0x10, 0x0E, 0x07, 0x78, -/* 0000E920 */ 0x10, 0x00, 0x08, 0x5F, 0x10, 0x0E, 0x09, 0x78, 0x10, 0x00, 0x0A, 0x5F, 0x10, 0x0E, 0x0B, 0x78, -/* 0000E930 */ 0x10, 0x00, 0x0C, 0x5F, 0x10, 0x0E, 0x0D, 0x78, 0x10, 0x00, 0x0E, 0x5F, 0x10, 0x0E, 0x0F, 0x78, -/* 0000E940 */ 0x10, 0x00, 0x10, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x01, 0x24, 0x00, 0x00, 0x00, 0x00, -/* 0000E950 */ 0x00, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0x01, 0x00, 0x00, 0x10, 0x04, 0x00, -/* 0000E960 */ 0x00, 0x21, 0x02, 0x00, 0x00, 0x1F, 0x02, 0x00, 0x00, 0x19, 0x04, 0x00, 0x00, 0x20, 0x02, 0x00, -/* 0000E970 */ 0x00, 0x14, 0x04, 0x00, 0x00, 0xFE, 0x8A, 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0x1D, 0x02, 0xFE, 0xF3, -/* 0000E980 */ 0x01, 0xFE, 0xF7, 0x01, 0xFE, 0xCC, 0x04, 0xFE, 0x10, 0x04, 0xFE, 0xCD, 0x04, 0xFE, 0x21, 0x02, -/* 0000E990 */ 0xFE, 0xCE, 0x04, 0xFE, 0x1F, 0x02, 0xFE, 0x1C, 0x02, 0xFE, 0x19, 0x04, 0xFE, 0xD0, 0x04, 0xFE, -/* 0000E9A0 */ 0x20, 0x02, 0xFE, 0xCF, 0x04, 0xFE, 0x14, 0x04, 0xFF, 0x0F, 0x11, 0x02, 0x00, 0x07, 0x05, 0x00, -/* 0000E9B0 */ 0x00, 0x00, 0x0B, 0x00, 0x3C, 0x00, 0x18, 0x00, 0x84, 0x00, 0x18, 0x00, 0x4B, 0x00, 0x0F, 0x00, -/* 0000E9C0 */ 0x65, 0x00, 0x18, 0x00, 0x85, 0x00, 0x4A, 0x00, 0xC6, 0x02, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, -/* 0000E9D0 */ 0x88, 0x01, 0x00, 0xFE, 0x90, 0x0B, 0x10, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x0F, 0x04, 0xAC, 0xFF, -/* 0000E9E0 */ 0x1E, 0x0A, 0x02, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFF, 0x1E, 0x0A, 0x02, 0x00, -/* 0000E9F0 */ 0xFE, 0x03, 0x04, 0xFE, 0x03, 0x04, 0x01, 0x0A, 0x06, 0x0B, 0x10, 0x56, 0x53, 0x04, 0x06, 0x09, -/* 0000EA00 */ 0x09, 0x09, 0x09, 0x0A, 0x06, 0xFE, 0xF6, 0x03, 0x05, 0xFE, 0x1C, 0x04, 0x06, 0xFE, 0x45, 0x03, -/* 0000EA10 */ 0x08, 0xFE, 0x1A, 0x01, 0x59, 0x0B, 0xB1, 0x08, 0x0B, 0x2C, 0x0B, 0x08, 0x15, 0x03, 0x00, 0x0B, -/* 0000EA20 */ 0x02, 0x09, 0x18, 0x00, 0x8C, 0x04, 0x03, 0x0C, 0x6A, 0x0B, 0x0C, 0x00, 0x07, 0x03, 0x00, 0x5A, -/* 0000EA30 */ 0x00, 0x0C, 0x5A, 0x01, 0x03, 0x5A, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x0B, 0x8C, 0x04, 0x03, 0x0C, -/* 0000EA40 */ 0x6A, 0x0B, 0x0C, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5A, 0x01, 0x08, 0x1F, 0x02, 0x0B, -/* 0000EA50 */ 0x0B, 0x47, 0x09, 0x0B, 0xA6, 0x0B, 0x14, 0x08, 0x00, 0x09, 0x0B, 0x5F, 0x0B, 0x09, 0x02, 0x0F, -/* 0000EA60 */ 0x18, 0x00, 0x0B, 0x8C, 0x04, 0x03, 0x0C, 0x6A, 0x0B, 0x0C, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, -/* 0000EA70 */ 0x0C, 0x5A, 0x01, 0x03, 0x5A, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x0B, 0x8C, 0x04, 0x0B, 0x0B, 0x07, -/* 0000EA80 */ 0x02, 0x00, 0x5A, 0x00, 0x05, 0x5A, 0x01, 0x06, 0x1F, 0x02, 0x0B, 0x0B, 0x47, 0x06, 0x0B, 0x8C, -/* 0000EA90 */ 0x04, 0x0B, 0x0B, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x05, 0x5A, 0x01, 0x07, 0x1F, 0x02, 0x0B, 0x0B, -/* 0000EAA0 */ 0x47, 0x07, 0x0B, 0x8C, 0x04, 0x0A, 0x0B, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x05, 0x8C, 0x04, 0x03, -/* 0000EAB0 */ 0x0D, 0x6A, 0x0C, 0x0D, 0x03, 0x07, 0x08, 0x00, 0x5A, 0x00, 0x0D, 0x5A, 0x01, 0x06, 0x5A, 0x02, -/* 0000EAC0 */ 0x07, 0x5F, 0x0E, 0x09, 0x04, 0x5A, 0x03, 0x0E, 0x8C, 0x04, 0x3D, 0x0E, 0x4B, 0x0E, 0x07, 0x03, -/* 0000EAD0 */ 0x00, 0x5A, 0x00, 0x05, 0x8C, 0x04, 0x39, 0x0F, 0x4B, 0x0F, 0x5A, 0x01, 0x0F, 0x5F, 0x0F, 0x09, -/* 0000EAE0 */ 0x05, 0x5A, 0x02, 0x0F, 0x1F, 0x03, 0x0E, 0x0E, 0x5A, 0x04, 0x0E, 0x5F, 0x0E, 0x09, 0x06, 0x5A, -/* 0000EAF0 */ 0x05, 0x0E, 0x5F, 0x0E, 0x09, 0x07, 0x5A, 0x06, 0x0E, 0x8C, 0x04, 0x3D, 0x0E, 0x4B, 0x0E, 0x07, -/* 0000EB00 */ 0x03, 0x00, 0x5A, 0x00, 0x05, 0x8C, 0x04, 0x3A, 0x0F, 0x4B, 0x0F, 0x5A, 0x01, 0x0F, 0x5F, 0x0F, -/* 0000EB10 */ 0x09, 0x08, 0x5A, 0x02, 0x0F, 0x1F, 0x03, 0x0E, 0x0E, 0x5A, 0x07, 0x0E, 0x1F, 0x08, 0x0C, 0x0C, -/* 0000EB20 */ 0x5A, 0x01, 0x0C, 0x1F, 0x02, 0x00, 0x0B, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x8A, -/* 0000EB30 */ 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0x1D, 0x02, 0xFE, 0xE1, 0x01, 0xFE, 0xCB, 0x04, 0xFE, 0xCD, 0x04, -/* 0000EB40 */ 0xFE, 0xCE, 0x04, 0xFE, 0xD0, 0x04, 0xFE, 0xCF, 0x04, 0xFF, 0x4B, 0x0A, 0x02, 0x00, 0x09, 0x05, -/* 0000EB50 */ 0x00, 0x00, 0x00, 0x0B, 0x00, 0x38, 0x00, 0x18, 0x00, 0x75, 0x00, 0x18, 0x00, 0x47, 0x00, 0x0F, -/* 0000EB60 */ 0x00, 0x61, 0x00, 0x18, 0x00, 0x75, 0x00, 0x14, 0x00, 0x23, 0x00, 0x14, 0x00, 0x24, 0x00, 0x89, -/* 0000EB70 */ 0x00, 0xC4, 0x01, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x75, 0x0B, 0x10, -/* 0000EB80 */ 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x45, 0x03, 0xAB, 0xFF, 0x91, 0x05, 0x02, 0x00, 0xFF, 0x00, 0x10, -/* 0000EB90 */ 0x01, 0x00, 0x03, 0x01, 0xFF, 0x91, 0x05, 0x02, 0x00, 0xFE, 0x3D, 0x04, 0xFE, 0x3D, 0x04, 0x01, -/* 0000EBA0 */ 0x09, 0x05, 0x0B, 0x05, 0x60, 0x59, 0x04, 0x09, 0x07, 0x06, 0x07, 0x07, 0x0A, 0x08, 0x06, 0xFE, -/* 0000EBB0 */ 0x45, 0x03, 0x07, 0xFE, 0x37, 0x01, 0x59, 0x0B, 0xB1, 0x07, 0x0B, 0x4F, 0x08, 0x4F, 0x09, 0x15, -/* 0000EBC0 */ 0x05, 0x00, 0x05, 0x02, 0xA6, 0x0B, 0x47, 0x05, 0x0B, 0x15, 0x05, 0x00, 0x06, 0x02, 0xA6, 0x0B, -/* 0000EBD0 */ 0x47, 0x06, 0x0B, 0x4F, 0x08, 0x4F, 0x09, 0x68, 0x06, 0x00, 0x00, 0x00, 0x0B, 0x14, 0x0A, 0x00, -/* 0000EBE0 */ 0x07, 0x0B, 0xA6, 0x0B, 0x14, 0x03, 0x00, 0x07, 0x0B, 0x09, 0x16, 0x00, 0x8C, 0x01, 0x02, 0x0B, -/* 0000EBF0 */ 0x4B, 0x0B, 0x07, 0x03, 0x00, 0x5A, 0x01, 0x05, 0x5A, 0x02, 0x06, 0xC1, 0x03, 0x00, 0x0B, 0x09, -/* 0000EC00 */ 0xE9, 0x00, 0x8C, 0x04, 0x24, 0x0C, 0x6A, 0x0B, 0x0C, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, -/* 0000EC10 */ 0x5A, 0x01, 0x07, 0x1F, 0x02, 0x0B, 0x0B, 0x47, 0x08, 0x0B, 0x8C, 0x04, 0x11, 0x0B, 0x07, 0x02, -/* 0000EC20 */ 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x08, 0x1F, 0x02, 0x0B, 0x0B, 0x0F, 0x15, 0x00, 0x0B, 0x8C, -/* 0000EC30 */ 0x04, 0x03, 0x0C, 0x6A, 0x0B, 0x0C, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5A, 0x01, 0x03, -/* 0000EC40 */ 0x1F, 0x02, 0xFF, 0x0B, 0x8C, 0x04, 0x03, 0x0C, 0x6A, 0x0B, 0x0C, 0x02, 0x07, 0x02, 0x00, 0x5A, -/* 0000EC50 */ 0x00, 0x0C, 0x5A, 0x01, 0x08, 0x1F, 0x02, 0x0B, 0x0B, 0x47, 0x09, 0x0B, 0xA6, 0x0B, 0x14, 0x03, -/* 0000EC60 */ 0x00, 0x09, 0x0B, 0x09, 0x31, 0x00, 0x8C, 0x04, 0x04, 0x0B, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, -/* 0000EC70 */ 0xCA, 0x0C, 0x5A, 0x01, 0x0C, 0x5A, 0x02, 0x04, 0x1F, 0x03, 0x0B, 0x0B, 0x47, 0x09, 0x0B, 0x8C, -/* 0000EC80 */ 0x04, 0x03, 0x0C, 0x6A, 0x0B, 0x0C, 0x03, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x5A, 0x01, 0x08, -/* 0000EC90 */ 0x5A, 0x02, 0x09, 0x1F, 0x03, 0xFF, 0x0B, 0x8C, 0x02, 0x02, 0x0B, 0x4B, 0x0B, 0x07, 0x04, 0x00, -/* 0000ECA0 */ 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x09, 0x5A, 0x02, 0x05, 0x5A, 0x03, 0x06, 0x1F, 0x04, 0xFF, 0x0B, -/* 0000ECB0 */ 0x47, 0x0B, 0x09, 0x8C, 0x04, 0x06, 0x0C, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8C, 0x04, 0x1A, -/* 0000ECC0 */ 0x0D, 0x5A, 0x01, 0x0D, 0x8C, 0x01, 0x03, 0x0D, 0x4B, 0x0D, 0x5A, 0x02, 0x0D, 0x5A, 0x03, 0x08, -/* 0000ECD0 */ 0x1F, 0x04, 0x0C, 0x0C, 0x74, 0x0C, 0x0B, 0x04, 0x5F, 0x0B, 0x09, 0x05, 0x80, 0x0B, 0x0B, 0xF8, -/* 0000ECE0 */ 0x00, 0xFA, 0x0B, 0x47, 0x00, 0x08, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x36, 0x03, -/* 0000ECF0 */ 0xFE, 0x8E, 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0xF0, 0x01, 0xFE, 0x1B, 0x02, 0xFE, 0x1B, 0x02, 0xAB, -/* 0000ED00 */ 0xFF, 0xA3, 0x05, 0x02, 0x00, 0x10, 0x09, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0E, 0x00, -/* 0000ED10 */ 0x2B, 0x00, 0x15, 0x00, 0x43, 0x00, 0x16, 0x00, 0x52, 0x00, 0x18, 0x00, 0x37, 0x00, 0x15, 0x00, -/* 0000ED20 */ 0x38, 0x00, 0x15, 0x00, 0x97, 0x00, 0x18, 0x00, 0x47, 0x00, 0x0A, 0x00, 0x3A, 0x00, 0x19, 0x00, -/* 0000ED30 */ 0x3F, 0x00, 0x18, 0x00, 0x58, 0x00, 0x19, 0x00, 0x76, 0x00, 0x28, 0x00, 0x68, 0x00, 0x0B, 0x00, -/* 0000ED40 */ 0x3D, 0x00, 0x08, 0x00, 0x1C, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, -/* 0000ED50 */ 0x5B, 0x0B, 0x61, 0xA0, 0x41, 0xF1, 0x00, 0xAA, 0xFF, 0xAA, 0x00, 0x02, 0x00, 0xFF, 0x00, 0x10, -/* 0000ED60 */ 0x01, 0x00, 0x01, 0x01, 0xFF, 0xAA, 0x00, 0x02, 0x00, 0xFE, 0x7F, 0x04, 0xFE, 0x7F, 0x04, 0x03, -/* 0000ED70 */ 0x0B, 0x08, 0x0E, 0x10, 0x61, 0x5D, 0x03, 0x08, 0x08, 0x08, 0x08, 0x08, 0x0D, 0x07, 0x01, 0x00, -/* 0000ED80 */ 0x05, 0xFE, 0x08, 0x04, 0x08, 0x01, 0x01, 0x01, 0x02, 0xFE, 0x3C, 0x01, 0xAC, 0x08, 0x59, 0x0E, -/* 0000ED90 */ 0xB1, 0x0A, 0x0E, 0x95, 0x0E, 0x08, 0x03, 0x47, 0x09, 0x0E, 0xA6, 0x0E, 0x14, 0x08, 0x00, 0x0A, -/* 0000EDA0 */ 0x0E, 0x14, 0x03, 0x00, 0x0A, 0x02, 0x09, 0x18, 0x00, 0x8C, 0x03, 0x03, 0x0F, 0x6A, 0x0E, 0x0F, -/* 0000EDB0 */ 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0F, 0x5A, 0x01, 0x04, 0x1F, 0x02, 0xFF, 0x0E, 0x09, 0x1A, -/* 0000EDC0 */ 0x00, 0x14, 0x03, 0x00, 0x09, 0x02, 0x09, 0x12, 0x00, 0x8C, 0x03, 0x03, 0x0F, 0x6A, 0x0E, 0x0F, -/* 0000EDD0 */ 0x01, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x0F, 0x1F, 0x01, 0xFF, 0x0E, 0x8C, 0x03, 0x0B, 0x0E, 0x07, -/* 0000EDE0 */ 0x02, 0x00, 0x5A, 0x00, 0x05, 0x5A, 0x01, 0x0A, 0x1F, 0x02, 0x0E, 0x0E, 0x47, 0x0B, 0x0E, 0x8C, -/* 0000EDF0 */ 0x03, 0x0B, 0x0E, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x05, 0x5A, 0x01, 0x09, 0x1F, 0x02, 0x0E, 0x0E, -/* 0000EE00 */ 0x47, 0x09, 0x0E, 0x8C, 0x03, 0x04, 0x0E, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x05, 0xCA, 0x0F, 0x5A, -/* 0000EE10 */ 0x01, 0x0F, 0x5A, 0x02, 0x02, 0x1F, 0x03, 0x0E, 0x0E, 0x47, 0x0C, 0x0E, 0x8C, 0x01, 0x02, 0x0E, -/* 0000EE20 */ 0x4B, 0x0E, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x05, 0x5A, 0x01, 0x0C, 0x95, 0x0F, 0x08, 0x06, 0x5A, -/* 0000EE30 */ 0x02, 0x0F, 0x95, 0x0F, 0x08, 0x07, 0x5A, 0x03, 0x0F, 0x1F, 0x04, 0xFF, 0x0E, 0x8C, 0x03, 0x0A, -/* 0000EE40 */ 0x0E, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x05, 0x8C, 0x03, 0x03, 0x10, 0x6A, 0x0F, 0x10, 0x02, 0x07, -/* 0000EE50 */ 0x08, 0x00, 0x5A, 0x00, 0x10, 0x5A, 0x01, 0x0B, 0x5A, 0x02, 0x09, 0x5F, 0x11, 0x0C, 0x03, 0x5A, -/* 0000EE60 */ 0x03, 0x11, 0x8C, 0x03, 0x3D, 0x11, 0x4B, 0x11, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x05, 0x8C, 0x03, -/* 0000EE70 */ 0x39, 0x12, 0x4B, 0x12, 0x5A, 0x01, 0x12, 0x5F, 0x12, 0x0C, 0x04, 0x5A, 0x02, 0x12, 0x1F, 0x03, -/* 0000EE80 */ 0x11, 0x11, 0x5A, 0x04, 0x11, 0x5F, 0x11, 0x0C, 0x05, 0x5A, 0x05, 0x11, 0x5F, 0x11, 0x0C, 0x06, -/* 0000EE90 */ 0x5A, 0x06, 0x11, 0x8C, 0x03, 0x3D, 0x11, 0x4B, 0x11, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x05, 0x8C, -/* 0000EEA0 */ 0x03, 0x3A, 0x12, 0x4B, 0x12, 0x5A, 0x01, 0x12, 0x5F, 0x12, 0x0C, 0x07, 0x5A, 0x02, 0x12, 0x1F, -/* 0000EEB0 */ 0x03, 0x11, 0x11, 0x5A, 0x07, 0x11, 0x1F, 0x08, 0x0F, 0x0F, 0x5A, 0x01, 0x0F, 0x1F, 0x02, 0x00, -/* 0000EEC0 */ 0x0E, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x91, 0x02, 0xFE, 0x89, 0x02, 0xFE, 0xE1, -/* 0000EED0 */ 0x01, 0xFE, 0xCB, 0x04, 0xFE, 0xCD, 0x04, 0xFE, 0xCE, 0x04, 0xFE, 0xD0, 0x04, 0xFE, 0xCF, 0x04, -/* 0000EEE0 */ 0xFF, 0xC8, 0x00, 0x02, 0x00, 0x0B, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x29, 0x00, 0x0F, 0x00, -/* 0000EEF0 */ 0x3F, 0x00, 0x18, 0x00, 0x6D, 0x00, 0x08, 0x00, 0x29, 0x00, 0x12, 0x00, 0xE2, 0x00, 0x14, 0x00, -/* 0000EF00 */ 0x2C, 0x00, 0x14, 0x00, 0x29, 0x00, 0x19, 0x00, 0x3A, 0x00, 0x21, 0x00, 0x4D, 0x00, 0x89, 0x00, -/* 0000EF10 */ 0xA4, 0x01, 0x00, 0xBF, 0x5D, 0x00, 0xC1, 0x43, 0xAD, 0x05, 0x00, 0xFE, 0xEE, 0x0A, 0x0C, 0xB3, -/* 0000EF20 */ 0x41, 0xC1, 0x00, 0xFE, 0x05, 0x04, 0xA8, 0xFF, 0x77, 0xE9, 0x01, 0x00, 0x01, 0xFF, 0x00, 0x10, -/* 0000EF30 */ 0x01, 0x00, 0x04, 0x04, 0xFF, 0x77, 0xE9, 0x01, 0x00, 0xFE, 0xD0, 0x16, 0xFE, 0xD0, 0x16, 0x44, -/* 0000EF40 */ 0x03, 0xFE, 0x14, 0x04, 0xFE, 0x20, 0x02, 0xFE, 0x19, 0x04, 0x15, 0x24, 0x35, 0x09, 0xFE, 0x10, -/* 0000EF50 */ 0x01, 0xFE, 0xFF, 0x00, 0x03, 0x10, 0x13, 0x13, 0x13, 0x13, 0x01, 0x32, 0x33, 0x34, 0x35, 0x06, -/* 0000EF60 */ 0xFE, 0xF6, 0x03, 0x06, 0xFE, 0xC8, 0x04, 0x08, 0x06, 0xFE, 0x45, 0x03, 0x0B, 0x06, 0xFE, 0xF5, -/* 0000EF70 */ 0x03, 0x07, 0x06, 0xFE, 0x00, 0x04, 0x06, 0xFE, 0xAD, 0x03, 0x05, 0xFE, 0xBC, 0x03, 0x05, 0xFE, -/* 0000EF80 */ 0xFF, 0x03, 0x06, 0xFE, 0x10, 0x04, 0x06, 0xFE, 0x11, 0x04, 0x06, 0xFE, 0x12, 0x04, 0x06, 0xFE, -/* 0000EF90 */ 0x16, 0x04, 0x06, 0xFE, 0x28, 0x03, 0x06, 0xFE, 0x29, 0x03, 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, -/* 0000EFA0 */ 0x2B, 0x03, 0x06, 0xFE, 0x17, 0x04, 0x06, 0xFE, 0xC2, 0x03, 0x0C, 0x06, 0xFE, 0x14, 0x04, 0x06, -/* 0000EFB0 */ 0xFE, 0x2D, 0x03, 0x06, 0xFE, 0x2E, 0x03, 0x06, 0xFE, 0x2F, 0x03, 0x06, 0xFE, 0x13, 0x04, 0x06, -/* 0000EFC0 */ 0xFE, 0x15, 0x04, 0x06, 0xFE, 0x5B, 0x03, 0x06, 0xFE, 0xF7, 0x02, 0x06, 0xFE, 0xC9, 0x04, 0x06, -/* 0000EFD0 */ 0xFE, 0xCA, 0x04, 0x01, 0x00, 0x01, 0xFF, 0xFE, 0x72, 0x03, 0xA6, 0x2F, 0xA6, 0x30, 0xA6, 0x31, -/* 0000EFE0 */ 0x2C, 0x36, 0x24, 0x0D, 0x03, 0x00, 0x36, 0x02, 0x09, 0x12, 0x00, 0x8C, 0x03, 0x03, 0x37, 0x6A, -/* 0000EFF0 */ 0x36, 0x37, 0x00, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x37, 0x1F, 0x01, 0xFF, 0x36, 0x8C, 0x03, 0x06, -/* 0000F000 */ 0x36, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x04, 0x8C, 0x03, 0x13, 0x37, 0x5A, 0x01, 0x37, 0x5A, 0x02, -/* 0000F010 */ 0x24, 0x5A, 0x03, 0x03, 0x1F, 0x04, 0x36, 0x36, 0x0E, 0x20, 0x00, 0x36, 0x5F, 0x36, 0x24, 0x01, -/* 0000F020 */ 0x0E, 0x18, 0x00, 0x36, 0x8C, 0x03, 0x03, 0x37, 0x6A, 0x36, 0x37, 0x02, 0x07, 0x03, 0x00, 0x5A, -/* 0000F030 */ 0x00, 0x37, 0x5A, 0x01, 0x05, 0x5A, 0x02, 0x05, 0x1F, 0x03, 0xFF, 0x36, 0x74, 0x06, 0x24, 0x03, -/* 0000F040 */ 0x2C, 0x36, 0x26, 0x14, 0x03, 0x00, 0x36, 0x07, 0x09, 0x1C, 0x00, 0x8C, 0x03, 0x04, 0x36, 0x07, -/* 0000F050 */ 0x03, 0x00, 0x5A, 0x00, 0x04, 0xCA, 0x37, 0x5A, 0x01, 0x37, 0x5A, 0x02, 0x08, 0x1F, 0x03, 0x36, -/* 0000F060 */ 0x36, 0x47, 0x26, 0x36, 0x09, 0x18, 0x00, 0x8C, 0x03, 0x24, 0x37, 0x6A, 0x36, 0x37, 0x04, 0x07, -/* 0000F070 */ 0x02, 0x00, 0x5A, 0x00, 0x37, 0x5A, 0x01, 0x26, 0x1F, 0x02, 0x36, 0x36, 0x47, 0x26, 0x36, 0x8C, -/* 0000F080 */ 0x02, 0x02, 0x36, 0x4B, 0x36, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x26, 0x5A, 0x02, -/* 0000F090 */ 0x09, 0x5A, 0x03, 0x0A, 0xCC, 0x37, 0x02, 0x9F, 0x00, 0x0B, 0x37, 0x9F, 0x01, 0x0C, 0x37, 0x5A, -/* 0000F0A0 */ 0x04, 0x37, 0x5A, 0x05, 0x0C, 0x1F, 0x06, 0x36, 0x36, 0x47, 0x28, 0x36, 0x8C, 0x02, 0x02, 0x36, -/* 0000F0B0 */ 0x4B, 0x36, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x26, 0x5A, 0x02, 0x0D, 0x5A, 0x03, -/* 0000F0C0 */ 0x0A, 0xCC, 0x37, 0x02, 0x9F, 0x00, 0x0E, 0x37, 0x9F, 0x01, 0x0F, 0x37, 0x5A, 0x04, 0x37, 0x5A, -/* 0000F0D0 */ 0x05, 0x0E, 0x1F, 0x06, 0x36, 0x36, 0x47, 0x29, 0x36, 0x8C, 0x02, 0x02, 0x36, 0x4B, 0x36, 0x07, -/* 0000F0E0 */ 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x26, 0x5A, 0x02, 0x10, 0x5A, 0x03, 0x0A, 0xCC, 0x37, -/* 0000F0F0 */ 0x04, 0x9F, 0x00, 0x11, 0x37, 0x9F, 0x01, 0x12, 0x37, 0x9F, 0x02, 0x13, 0x37, 0x9F, 0x03, 0x14, -/* 0000F100 */ 0x37, 0x5A, 0x04, 0x37, 0xA6, 0x37, 0x5A, 0x05, 0x37, 0x1F, 0x06, 0x36, 0x36, 0x47, 0x2A, 0x36, -/* 0000F110 */ 0x8C, 0x02, 0x02, 0x36, 0x4B, 0x36, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x26, 0x5A, -/* 0000F120 */ 0x02, 0x15, 0x5A, 0x03, 0x16, 0xA6, 0x37, 0x5A, 0x04, 0x37, 0x5A, 0x05, 0x17, 0x1F, 0x06, 0x36, -/* 0000F130 */ 0x36, 0x47, 0x2B, 0x36, 0x8C, 0x02, 0x02, 0x36, 0x4B, 0x36, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, -/* 0000F140 */ 0x5A, 0x01, 0x26, 0x5A, 0x02, 0x18, 0x5A, 0x03, 0x0A, 0xCC, 0x37, 0x03, 0x9F, 0x00, 0x19, 0x37, -/* 0000F150 */ 0x9F, 0x01, 0x1A, 0x37, 0x9F, 0x02, 0x1B, 0x37, 0x5A, 0x04, 0x37, 0xA6, 0x37, 0x5A, 0x05, 0x37, -/* 0000F160 */ 0x1F, 0x06, 0x36, 0x36, 0x94, 0x02, 0x36, 0x8C, 0x02, 0x02, 0x36, 0x4B, 0x36, 0x07, 0x06, 0x00, -/* 0000F170 */ 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x26, 0x5A, 0x02, 0x1C, 0x5A, 0x03, 0x16, 0xCC, 0x37, 0x02, 0x9F, -/* 0000F180 */ 0x00, 0x06, 0x37, 0x9F, 0x01, 0x17, 0x37, 0x5A, 0x04, 0x37, 0xA6, 0x37, 0x5A, 0x05, 0x37, 0x1F, -/* 0000F190 */ 0x06, 0x36, 0x36, 0x94, 0x03, 0x36, 0x8C, 0x02, 0x07, 0x36, 0x4B, 0x36, 0x07, 0x02, 0x00, 0x5A, -/* 0000F1A0 */ 0x00, 0x04, 0x5A, 0x01, 0x25, 0x1F, 0x02, 0x36, 0x36, 0x47, 0x25, 0x36, 0x8C, 0x03, 0x2A, 0x36, -/* 0000F1B0 */ 0x07, 0x05, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x25, 0x5A, 0x02, 0x28, 0xA6, 0x37, 0x5A, 0x03, -/* 0000F1C0 */ 0x37, 0x8C, 0x03, 0x31, 0x37, 0x5A, 0x04, 0x37, 0x1F, 0x05, 0x36, 0x36, 0x47, 0x2C, 0x36, 0x94, -/* 0000F1D0 */ 0x04, 0x1D, 0x8C, 0x03, 0x27, 0x36, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, 0x5F, 0x37, 0x2C, 0x05, -/* 0000F1E0 */ 0x5A, 0x01, 0x37, 0x1F, 0x02, 0x36, 0x36, 0x47, 0x2D, 0x36, 0x47, 0x2E, 0x2D, 0x5F, 0x36, 0x2C, -/* 0000F1F0 */ 0x06, 0x0E, 0x22, 0x00, 0x36, 0x8C, 0x03, 0x06, 0x36, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x04, 0x8C, -/* 0000F200 */ 0x03, 0x16, 0x37, 0x5A, 0x01, 0x37, 0x5F, 0x37, 0x2C, 0x06, 0x5A, 0x02, 0x37, 0xD3, 0x00, 0x37, -/* 0000F210 */ 0x5A, 0x03, 0x37, 0x1F, 0x04, 0xFF, 0x36, 0x90, 0x04, 0x36, 0x15, 0x03, 0x00, 0x36, 0x1D, 0x09, -/* 0000F220 */ 0x48, 0x00, 0x8C, 0x03, 0x2F, 0x36, 0x95, 0x36, 0x36, 0x2E, 0x47, 0x2F, 0x36, 0x47, 0x30, 0x1E, -/* 0000F230 */ 0xA6, 0x36, 0x15, 0x03, 0x00, 0x2F, 0x36, 0x09, 0x2D, 0x00, 0x90, 0x04, 0x37, 0x95, 0x37, 0x2F, -/* 0000F240 */ 0x37, 0x47, 0x30, 0x37, 0x47, 0x36, 0x37, 0xA6, 0x37, 0x15, 0x03, 0x00, 0x36, 0x37, 0x09, 0x16, -/* 0000F250 */ 0x00, 0x15, 0x03, 0x00, 0x30, 0x1E, 0x09, 0x0B, 0x00, 0x2F, 0x36, 0x2E, 0x1F, 0x2F, 0x36, 0x36, -/* 0000F260 */ 0x30, 0x47, 0x2E, 0x36, 0x09, 0x03, 0x00, 0x94, 0x04, 0x1D, 0x90, 0x02, 0x36, 0xA6, 0x37, 0x14, -/* 0000F270 */ 0x03, 0x00, 0x36, 0x37, 0x09, 0x7F, 0x00, 0xE5, 0x36, 0x00, 0x8C, 0x03, 0x03, 0x37, 0x6A, 0x36, -/* 0000F280 */ 0x37, 0x07, 0x07, 0x08, 0x00, 0x5A, 0x00, 0x37, 0x5A, 0x01, 0x20, 0x5A, 0x02, 0x21, 0x5A, 0x03, -/* 0000F290 */ 0x2D, 0xA6, 0x38, 0x5A, 0x04, 0x38, 0xA6, 0x38, 0x5A, 0x05, 0x38, 0xA6, 0x38, 0x5A, 0x06, 0x38, -/* 0000F2A0 */ 0xA6, 0x38, 0x5A, 0x07, 0x38, 0x1F, 0x08, 0x36, 0x36, 0x47, 0x31, 0x36, 0xE9, 0x09, 0x27, 0x00, -/* 0000F2B0 */ 0xE7, 0x27, 0x06, 0x8C, 0x03, 0x22, 0x36, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x27, -/* 0000F2C0 */ 0x1F, 0x02, 0xFF, 0x36, 0x8C, 0x03, 0x03, 0x37, 0x6A, 0x36, 0x37, 0x08, 0x07, 0x01, 0x00, 0x5A, -/* 0000F2D0 */ 0x00, 0x37, 0x1F, 0x01, 0xFF, 0x36, 0xE9, 0x14, 0x03, 0x00, 0x31, 0x22, 0x09, 0x06, 0x00, 0x94, -/* 0000F2E0 */ 0x02, 0x1B, 0x09, 0x11, 0x00, 0x14, 0x03, 0x00, 0x31, 0x23, 0x09, 0x06, 0x00, 0x94, 0x02, 0x19, -/* 0000F2F0 */ 0x09, 0x03, 0x00, 0x94, 0x02, 0x1A, 0xA6, 0x36, 0x14, 0x03, 0x00, 0x2A, 0x36, 0x09, 0x03, 0x00, -/* 0000F300 */ 0x47, 0x2A, 0x14, 0x90, 0x03, 0x36, 0xA6, 0x37, 0x14, 0x03, 0x00, 0x36, 0x37, 0x09, 0x03, 0x00, -/* 0000F310 */ 0x94, 0x03, 0x17, 0x74, 0x28, 0x24, 0x09, 0x5F, 0x36, 0x2C, 0x05, 0x74, 0x36, 0x24, 0x0A, 0x74, -/* 0000F320 */ 0x2E, 0x24, 0x0B, 0x74, 0x29, 0x24, 0x0C, 0x74, 0x2A, 0x24, 0x0D, 0x74, 0x2B, 0x24, 0x0E, 0x90, -/* 0000F330 */ 0x02, 0x36, 0x74, 0x36, 0x24, 0x0F, 0x90, 0x03, 0x36, 0x74, 0x36, 0x24, 0x10, 0x90, 0x04, 0x36, -/* 0000F340 */ 0x74, 0x36, 0x24, 0x11, 0x74, 0x06, 0x24, 0x12, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x89, 0x02, 0xFE, -/* 0000F350 */ 0xF2, 0x01, 0xFE, 0x8D, 0x02, 0xFE, 0xF2, 0x01, 0xFE, 0x36, 0x03, 0xFE, 0xF9, 0x01, 0xFE, 0xFB, -/* 0000F360 */ 0x01, 0xFE, 0xE1, 0x01, 0xFE, 0x90, 0x02, 0xFE, 0x2D, 0x02, 0xFE, 0xF3, 0x01, 0xFE, 0xCB, 0x04, -/* 0000F370 */ 0xFE, 0xCC, 0x04, 0xFE, 0xCD, 0x04, 0xFE, 0xCE, 0x04, 0xFE, 0xCF, 0x04, 0xFE, 0xD0, 0x04, 0xFE, -/* 0000F380 */ 0x1C, 0x02, 0xFE, 0x1D, 0x02, 0xFF, 0xC4, 0xE9, 0x01, 0x00, 0x35, 0x06, 0x00, 0x00, 0x00, 0x0B, -/* 0000F390 */ 0x00, 0x37, 0x00, 0x12, 0x00, 0x3F, 0x00, 0x27, 0x00, 0x93, 0x00, 0x18, 0x00, 0x65, 0x00, 0x04, -/* 0000F3A0 */ 0x00, 0x5D, 0x00, 0x0B, 0x00, 0x3A, 0x00, 0x1C, 0x00, 0x4F, 0x00, 0x18, 0x00, 0x49, 0x00, 0x2D, -/* 0000F3B0 */ 0x00, 0x71, 0x00, 0x2D, 0x00, 0x5F, 0x00, 0x37, 0x00, 0x81, 0x00, 0x24, 0x00, 0x6E, 0x00, 0x33, -/* 0000F3C0 */ 0x00, 0x73, 0x00, 0x2F, 0x00, 0x9B, 0x00, 0x16, 0x00, 0x41, 0x00, 0x23, 0x00, 0x6F, 0x00, 0x03, -/* 0000F3D0 */ 0x00, 0x2B, 0x00, 0x18, 0x00, 0x69, 0x00, 0x03, 0x00, 0x46, 0x00, 0x08, 0x00, 0x36, 0x00, 0x22, -/* 0000F3E0 */ 0x00, 0x33, 0x05, 0x0B, 0x00, 0x33, 0x00, 0x0B, 0x00, 0x6F, 0x00, 0x03, 0x00, 0x2F, 0x00, 0x21, -/* 0000F3F0 */ 0x00, 0x92, 0x00, 0x08, 0x00, 0x3B, 0x00, 0x0E, 0x00, 0xB1, 0x00, 0x03, 0x00, 0x7F, 0x00, 0x10, -/* 0000F400 */ 0x00, 0x51, 0x00, 0x38, 0x00, 0x84, 0x00, 0x01, 0x00, 0x52, 0x00, 0x11, 0x00, 0x92, 0x01, 0x13, -/* 0000F410 */ 0x00, 0x52, 0x00, 0x08, 0x00, 0x29, 0x00, 0x06, 0x00, 0x30, 0x00, 0x08, 0x00, 0x2A, 0x00, 0x06, -/* 0000F420 */ 0x00, 0x4A, 0x00, 0x03, 0x00, 0x4E, 0x00, 0x0A, 0x00, 0x35, 0x00, 0x03, 0x00, 0x3C, 0x00, 0x0D, -/* 0000F430 */ 0x00, 0x31, 0x00, 0x03, 0x00, 0x65, 0x00, 0x04, 0x00, 0x2E, 0x00, 0x08, 0x00, 0x4D, 0x00, 0x04, -/* 0000F440 */ 0x00, 0x48, 0x00, 0x04, 0x00, 0x2A, 0x00, 0x04, 0x00, 0x36, 0x00, 0x04, 0x00, 0x42, 0x00, 0x07, -/* 0000F450 */ 0x00, 0x32, 0x00, 0x07, 0x00, 0x2E, 0x00, 0x07, 0x00, 0x32, 0x00, 0x06, 0x00, 0x33, 0x00, 0x00, -/* 0000F460 */ 0x64, 0xF4, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x33, 0x88, 0x21, 0x00, 0xFE, 0x10, 0x0B, 0x57, -/* 0000F470 */ 0xA2, 0x41, 0xD1, 0x00, 0xA9, 0xFF, 0x31, 0xF1, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, -/* 0000F480 */ 0x02, 0xFF, 0x31, 0xF1, 0x01, 0x00, 0xFE, 0xCB, 0x04, 0xFE, 0xCB, 0x04, 0x41, 0x09, 0x15, 0x1A, -/* 0000F490 */ 0x0B, 0x5F, 0x5A, 0x04, 0x08, 0x03, 0x03, 0x03, 0x03, 0x01, 0x01, 0x19, 0x01, 0x01, 0x01, 0x02, -/* 0000F4A0 */ 0x06, 0xFE, 0x5B, 0x03, 0x06, 0xFE, 0xB1, 0x03, 0x06, 0xFE, 0x14, 0x04, 0x07, 0x08, 0x06, 0xFE, -/* 0000F4B0 */ 0xAD, 0x03, 0x06, 0xFE, 0x2D, 0x03, 0x06, 0xFE, 0x2E, 0x03, 0x06, 0xFE, 0x2F, 0x03, 0x06, 0xFE, -/* 0000F4C0 */ 0xB2, 0x03, 0x06, 0xFE, 0xC1, 0x03, 0x0B, 0x06, 0xFE, 0xB0, 0x03, 0x06, 0xFE, 0x15, 0x04, 0x06, -/* 0000F4D0 */ 0xFE, 0x12, 0x04, 0x06, 0xFE, 0x11, 0x04, 0x05, 0xFE, 0xD1, 0x04, 0xFE, 0x4E, 0x01, 0x8C, 0x04, -/* 0000F4E0 */ 0x03, 0x1B, 0x6A, 0x1A, 0x1B, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x1B, 0x5A, 0x01, 0x15, 0xE0, -/* 0000F4F0 */ 0x1C, 0x00, 0x5A, 0x02, 0x1C, 0x1F, 0x03, 0x1A, 0x1A, 0x47, 0x16, 0x1A, 0x95, 0x1A, 0x16, 0x02, -/* 0000F500 */ 0x47, 0x17, 0x1A, 0x95, 0x1A, 0x16, 0x03, 0x14, 0x03, 0x00, 0x1A, 0x04, 0x09, 0x08, 0x00, 0xA6, -/* 0000F510 */ 0x1B, 0x47, 0x1A, 0x1B, 0x09, 0x07, 0x00, 0x95, 0x1B, 0x16, 0x03, 0x47, 0x1A, 0x1B, 0x47, 0x18, -/* 0000F520 */ 0x1A, 0x14, 0x03, 0x00, 0x17, 0x05, 0x09, 0x6A, 0x00, 0x8C, 0x01, 0x02, 0x1A, 0xA6, 0x1B, 0x14, -/* 0000F530 */ 0x03, 0x00, 0x1A, 0x1B, 0x09, 0x5C, 0x00, 0x8C, 0x03, 0x02, 0x1A, 0x4B, 0x1A, 0x07, 0x06, 0x00, -/* 0000F540 */ 0x5A, 0x00, 0x08, 0x8C, 0x04, 0x04, 0x1B, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x08, 0xCB, 0x00, 0x00, -/* 0000F550 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x78, 0x18, 0x1C, 0x01, 0x5A, 0x01, -/* 0000F560 */ 0x1C, 0x5A, 0x02, 0x07, 0x1F, 0x03, 0x1B, 0x1B, 0x5A, 0x01, 0x1B, 0x5A, 0x02, 0x06, 0x5A, 0x03, -/* 0000F570 */ 0x09, 0xCC, 0x1B, 0x03, 0x9F, 0x00, 0x0A, 0x1B, 0x9F, 0x01, 0x0B, 0x1B, 0x9F, 0x02, 0x0C, 0x1B, -/* 0000F580 */ 0x5A, 0x04, 0x1B, 0xA6, 0x1B, 0x5A, 0x05, 0x1B, 0x1F, 0x06, 0x1A, 0x1A, 0x92, 0x01, 0x02, 0x1A, -/* 0000F590 */ 0x09, 0x95, 0x00, 0x14, 0x03, 0x00, 0x17, 0x0D, 0x09, 0x57, 0x00, 0x8C, 0x01, 0x03, 0x1A, 0xA6, -/* 0000F5A0 */ 0x1B, 0x14, 0x03, 0x00, 0x1A, 0x1B, 0x09, 0x49, 0x00, 0xA6, 0x1A, 0x15, 0x03, 0x00, 0x18, 0x1A, -/* 0000F5B0 */ 0x09, 0x38, 0x00, 0x8C, 0x04, 0x24, 0x1B, 0x6A, 0x1A, 0x1B, 0x02, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 0000F5C0 */ 0x1B, 0x8C, 0x04, 0x06, 0x1C, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x08, 0x8C, 0x04, 0x1E, 0x1D, 0x5A, -/* 0000F5D0 */ 0x01, 0x1D, 0x5A, 0x02, 0x18, 0x1F, 0x03, 0x1C, 0x1C, 0x43, 0x1C, 0x1C, 0x0E, 0x5A, 0x01, 0x1C, -/* 0000F5E0 */ 0x1F, 0x02, 0x1A, 0x1A, 0x92, 0x01, 0x03, 0x1A, 0x09, 0x04, 0x00, 0x92, 0x01, 0x03, 0x0F, 0x09, -/* 0000F5F0 */ 0x36, 0x00, 0x14, 0x03, 0x00, 0x17, 0x10, 0x09, 0x2E, 0x00, 0xA6, 0x1A, 0x15, 0x03, 0x00, 0x18, -/* 0000F600 */ 0x1A, 0x09, 0x24, 0x00, 0x15, 0x03, 0x00, 0x18, 0x11, 0x09, 0x1C, 0x00, 0x15, 0x03, 0x00, 0x18, -/* 0000F610 */ 0x12, 0x09, 0x14, 0x00, 0x15, 0x03, 0x00, 0x18, 0x13, 0x09, 0x0C, 0x00, 0x15, 0x03, 0x00, 0x18, -/* 0000F620 */ 0x14, 0x09, 0x04, 0x00, 0x92, 0x01, 0x04, 0x18, 0xA6, 0x00, 0x24, 0x00, 0x01, 0x0C, 0x00, 0x00, -/* 0000F630 */ 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x04, 0x00, 0x00, 0xFE, -/* 0000F640 */ 0x83, 0x02, 0xFE, 0x14, 0x04, 0xFE, 0x39, 0x03, 0x0E, 0xFE, 0xB2, 0x04, 0x00, 0xFF, 0x5D, 0xF1, -/* 0000F650 */ 0x01, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x82, 0x00, 0x07, 0x00, 0x2C, 0x00, 0x1E, -/* 0000F660 */ 0x00, 0x4C, 0x00, 0x16, 0x00, 0x4B, 0x00, 0x5C, 0x00, 0x9F, 0x00, 0x16, 0x00, 0x49, 0x00, 0x0A, -/* 0000F670 */ 0x00, 0x3B, 0x00, 0x38, 0x00, 0xA9, 0x00, 0x07, 0x00, 0x4D, 0x00, 0x32, 0x00, 0xFF, 0x00, 0x06, -/* 0000F680 */ 0x00, 0x41, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x63, 0xA8, 0x05, 0x00, 0xFE, 0xB2, 0x0A, 0x1E, -/* 0000F690 */ 0xA0, 0x41, 0xC1, 0x00, 0xFE, 0xF1, 0x02, 0xA5, 0xFF, 0xEE, 0xDF, 0x01, 0x00, 0x01, 0xFF, 0x00, -/* 0000F6A0 */ 0x10, 0x01, 0x00, 0x01, 0x01, 0xFF, 0xEE, 0xDF, 0x01, 0x00, 0xFE, 0xE5, 0x08, 0xFE, 0xE5, 0x08, -/* 0000F6B0 */ 0x01, 0x0C, 0x07, 0x0F, 0x06, 0x7A, 0x6D, 0x02, 0x07, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x0E, -/* 0000F6C0 */ 0x0F, 0x08, 0x01, 0x01, 0x05, 0xFE, 0xC3, 0x04, 0x06, 0xFE, 0x5B, 0x03, 0x01, 0x02, 0xFE, 0x8D, -/* 0000F6D0 */ 0x01, 0x4F, 0x07, 0x4F, 0x08, 0x4F, 0x0B, 0x4F, 0x0C, 0x4F, 0x0D, 0x4F, 0x09, 0x4F, 0x0A, 0x8C, -/* 0000F6E0 */ 0x01, 0x19, 0x10, 0x4B, 0x10, 0x0E, 0x15, 0x00, 0x10, 0x8C, 0x02, 0x03, 0x10, 0x5F, 0x10, 0x10, -/* 0000F6F0 */ 0x00, 0x0E, 0x09, 0x00, 0x10, 0x8C, 0x01, 0x19, 0x00, 0x4B, 0x00, 0x09, 0x5E, 0x01, 0xA6, 0x10, -/* 0000F700 */ 0x47, 0x07, 0x10, 0xA6, 0x10, 0x47, 0x08, 0x10, 0x8C, 0x02, 0x33, 0x10, 0x4B, 0x10, 0x0E, 0x70, -/* 0000F710 */ 0x00, 0x10, 0x8C, 0x01, 0x0A, 0x10, 0x4B, 0x10, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x02, 0x1F, 0x01, -/* 0000F720 */ 0x10, 0x10, 0x47, 0x07, 0x10, 0x8C, 0x02, 0x03, 0x11, 0x6A, 0x10, 0x11, 0x01, 0x07, 0x03, 0x00, -/* 0000F730 */ 0x5A, 0x00, 0x11, 0x5A, 0x01, 0x07, 0xE0, 0x12, 0x00, 0x5A, 0x02, 0x12, 0x1F, 0x03, 0x10, 0x10, -/* 0000F740 */ 0x47, 0x09, 0x10, 0x0E, 0x38, 0x00, 0x09, 0x95, 0x10, 0x09, 0x03, 0x47, 0x08, 0x10, 0x8C, 0x02, -/* 0000F750 */ 0x06, 0x10, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x02, 0x8C, 0x02, 0x1D, 0x11, 0x5A, 0x01, 0x11, 0x5A, -/* 0000F760 */ 0x02, 0x07, 0x47, 0x11, 0x04, 0x01, 0x04, 0x01, 0x12, 0x08, 0x2F, 0x11, 0x11, 0x12, 0x2F, 0x11, -/* 0000F770 */ 0x11, 0x05, 0x5A, 0x03, 0x11, 0x5A, 0x04, 0x05, 0x1F, 0x05, 0x10, 0x10, 0x47, 0x07, 0x10, 0x09, -/* 0000F780 */ 0x3C, 0x00, 0x8C, 0x02, 0x03, 0x11, 0x6A, 0x10, 0x11, 0x01, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x11, -/* 0000F790 */ 0x8C, 0x01, 0x0A, 0x12, 0x4B, 0x12, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x02, 0x1F, 0x01, 0x12, 0x12, -/* 0000F7A0 */ 0x5A, 0x01, 0x12, 0xE0, 0x12, 0x01, 0x5A, 0x02, 0x12, 0x1F, 0x03, 0x10, 0x10, 0x47, 0x0A, 0x10, -/* 0000F7B0 */ 0x95, 0x10, 0x0A, 0x03, 0x47, 0x07, 0x10, 0x95, 0x10, 0x0A, 0x06, 0x47, 0x08, 0x10, 0xA6, 0x10, -/* 0000F7C0 */ 0x14, 0x03, 0x00, 0x08, 0x10, 0x09, 0x0F, 0x00, 0x01, 0x34, 0x01, 0x01, 0x19, 0x07, 0x8C, 0x01, -/* 0000F7D0 */ 0x19, 0x00, 0x4B, 0x00, 0x09, 0x85, 0x00, 0xD5, 0x00, 0x10, 0x47, 0x0B, 0x10, 0x8C, 0x02, 0x30, -/* 0000F7E0 */ 0x10, 0x95, 0x10, 0x10, 0x07, 0x47, 0x0C, 0x10, 0xA6, 0x10, 0x14, 0x03, 0x00, 0x0C, 0x10, 0x09, -/* 0000F7F0 */ 0x1F, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x07, 0x5A, 0x02, 0x08, 0x1F, 0x03, -/* 0000F800 */ 0x10, 0x0B, 0x01, 0x34, 0x01, 0x01, 0x19, 0x10, 0x8C, 0x01, 0x19, 0x00, 0x4B, 0x00, 0x09, 0x4B, -/* 0000F810 */ 0x00, 0x95, 0x10, 0x0C, 0x08, 0x47, 0x0D, 0x10, 0xA6, 0x10, 0x15, 0x03, 0x00, 0x0D, 0x10, 0x09, -/* 0000F820 */ 0x19, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x07, 0x5A, 0x02, 0x0D, 0x1F, 0x03, -/* 0000F830 */ 0x10, 0x0B, 0x01, 0x34, 0x01, 0x01, 0x19, 0x10, 0x09, 0x16, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, -/* 0000F840 */ 0x02, 0x5A, 0x01, 0x07, 0x5A, 0x02, 0x08, 0x1F, 0x03, 0x10, 0x0B, 0x01, 0x34, 0x01, 0x01, 0x19, -/* 0000F850 */ 0x10, 0x8C, 0x01, 0x19, 0x00, 0x4B, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x61, -/* 0000F860 */ 0x03, 0xFE, 0x83, 0x02, 0x28, 0xFE, 0xC4, 0x04, 0x00, 0x0E, 0xFE, 0xC5, 0x04, 0x00, 0xFF, 0x04, -/* 0000F870 */ 0xE0, 0x01, 0x00, 0x1B, 0x0E, 0x00, 0x00, 0x00, 0x16, 0x00, 0x3F, 0x00, 0x09, 0x00, 0x31, 0x00, -/* 0000F880 */ 0x05, 0x00, 0x20, 0x00, 0x05, 0x00, 0x23, 0x00, 0x0A, 0x00, 0x7A, 0x00, 0x13, 0x00, 0x29, 0x00, -/* 0000F890 */ 0x1E, 0x00, 0x6A, 0x00, 0x04, 0x00, 0xB8, 0x00, 0x07, 0x00, 0x26, 0x00, 0x34, 0x00, 0xC6, 0x00, -/* 0000F8A0 */ 0x2E, 0x00, 0x5C, 0x00, 0x07, 0x00, 0x1F, 0x00, 0x07, 0x00, 0x29, 0x00, 0x0A, 0x00, 0x2B, 0x00, -/* 0000F8B0 */ 0x06, 0x00, 0x2C, 0x00, 0x09, 0x00, 0x8D, 0x00, 0x06, 0x00, 0x28, 0x01, 0x0B, 0x00, 0x56, 0x00, -/* 0000F8C0 */ 0x0A, 0x00, 0x84, 0x00, 0x16, 0x00, 0x54, 0x00, 0x09, 0x00, 0x31, 0x00, 0x07, 0x00, 0x42, 0x00, -/* 0000F8D0 */ 0x0A, 0x00, 0x31, 0x00, 0x19, 0x00, 0x6B, 0x00, 0x16, 0x00, 0x5B, 0x00, 0x0B, 0x00, 0x22, 0x00, -/* 0000F8E0 */ 0x00, 0xE5, 0xF8, 0x00, 0x00, 0xBF, 0x4C, 0x00, 0x01, 0x00, 0x88, 0x01, 0x00, 0xFE, 0xD0, 0x0A, -/* 0000F8F0 */ 0x2C, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xC6, 0x04, 0xA6, 0xFF, 0x14, 0xE5, 0x01, 0x00, 0xFF, 0x00, -/* 0000F900 */ 0x10, 0x01, 0x00, 0x03, 0x03, 0xFF, 0x14, 0xE5, 0x01, 0x00, 0xF9, 0xF9, 0x01, 0x04, 0x05, 0x08, -/* 0000F910 */ 0x17, 0x15, 0x02, 0x01, 0x07, 0x06, 0xFE, 0x5B, 0x03, 0x05, 0xFE, 0xC3, 0x04, 0x05, 0xFE, 0xC7, -/* 0000F920 */ 0x04, 0x51, 0x8C, 0x02, 0x33, 0x08, 0x4B, 0x08, 0x0E, 0x23, 0x00, 0x08, 0x47, 0x00, 0x02, 0x01, -/* 0000F930 */ 0x04, 0x01, 0x08, 0x05, 0x2F, 0x00, 0x00, 0x08, 0x2F, 0x00, 0x00, 0x03, 0x01, 0x04, 0x01, 0x08, -/* 0000F940 */ 0x06, 0x2F, 0x00, 0x00, 0x08, 0x2F, 0x00, 0x00, 0x02, 0x09, 0x25, 0x00, 0x09, 0x20, 0x00, 0x47, -/* 0000F950 */ 0x00, 0x02, 0x01, 0x04, 0x01, 0x08, 0x05, 0x2F, 0x00, 0x00, 0x08, 0x2F, 0x00, 0x00, 0x04, 0x01, -/* 0000F960 */ 0x04, 0x01, 0x08, 0x06, 0x2F, 0x00, 0x00, 0x08, 0x2F, 0x00, 0x00, 0x02, 0x09, 0x02, 0x00, 0xA6, -/* 0000F970 */ 0x00, 0x24, 0x00, 0xFF, 0x49, 0xE5, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x2A, -/* 0000F980 */ 0x00, 0x23, 0x00, 0x53, 0x00, 0x22, 0x00, 0x46, 0x00, 0x00, 0x3F, 0x5D, 0x00, 0x01, 0x00, 0x8D, -/* 0000F990 */ 0x05, 0x00, 0xFE, 0x9D, 0x0A, 0x32, 0xA0, 0x41, 0xD1, 0x00, 0xA2, 0xFF, 0x0D, 0xDC, 0x01, 0x00, -/* 0000F9A0 */ 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFF, 0x0D, 0xDC, 0x01, 0x00, 0xFE, 0x13, 0x03, -/* 0000F9B0 */ 0xFE, 0x13, 0x03, 0x01, 0xFE, 0xC0, 0x04, 0x06, 0x04, 0x07, 0x08, 0x1E, 0x1E, 0x02, 0x06, 0x04, -/* 0000F9C0 */ 0x05, 0x06, 0x07, 0x08, 0x5B, 0x4F, 0x07, 0x94, 0x02, 0x07, 0x8C, 0x02, 0x04, 0x07, 0x07, 0x03, -/* 0000F9D0 */ 0x00, 0x5A, 0x00, 0x03, 0xCA, 0x08, 0x5A, 0x01, 0x08, 0x5A, 0x02, 0x02, 0x1F, 0x03, 0x07, 0x07, -/* 0000F9E0 */ 0x94, 0x02, 0x07, 0x8C, 0x02, 0x06, 0x07, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x8C, 0x02, 0x16, -/* 0000F9F0 */ 0x08, 0x5A, 0x01, 0x08, 0x8C, 0x02, 0x12, 0x08, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x03, 0x8C, 0x02, -/* 0000FA00 */ 0x2F, 0x09, 0x5A, 0x01, 0x09, 0x1F, 0x02, 0x08, 0x08, 0x5A, 0x02, 0x08, 0xD3, 0x00, 0x08, 0x5A, -/* 0000FA10 */ 0x03, 0x08, 0x1F, 0x04, 0xFF, 0x07, 0x90, 0x02, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, -/* 0000FA20 */ 0xFF, 0x23, 0xDC, 0x01, 0x00, 0x04, 0x05, 0x00, 0x00, 0x00, 0x19, 0x00, 0x31, 0x00, 0x33, 0x00, -/* 0000FA30 */ 0xB6, 0x02, 0x08, 0x00, 0x15, 0x00, 0x00, 0x3B, 0xFA, 0x00, 0x00, 0xBF, 0x5D, 0x00, 0x01, 0x00, -/* 0000FA40 */ 0x8D, 0x05, 0x00, 0xFE, 0x9F, 0x0A, 0x6B, 0xA2, 0x41, 0xD1, 0x00, 0xA3, 0xFF, 0xB7, 0xDC, 0x01, -/* 0000FA50 */ 0x00, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0xB7, 0xDC, 0x01, 0x00, 0xFE, 0x48, -/* 0000FA60 */ 0x02, 0xFE, 0x48, 0x02, 0x40, 0x02, 0xFE, 0xC1, 0x04, 0xFE, 0xC2, 0x04, 0x07, 0x04, 0x08, 0x08, -/* 0000FA70 */ 0x25, 0x25, 0x03, 0x08, 0x05, 0x06, 0x07, 0x07, 0x08, 0x71, 0x4F, 0x08, 0x94, 0x02, 0x08, 0x4F, -/* 0000FA80 */ 0x08, 0x94, 0x03, 0x08, 0x8C, 0x03, 0x2F, 0x08, 0x95, 0x08, 0x08, 0x04, 0x94, 0x02, 0x08, 0x8C, -/* 0000FA90 */ 0x03, 0x04, 0x08, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x03, 0xCA, 0x09, 0x5A, 0x01, 0x09, 0x5A, 0x02, -/* 0000FAA0 */ 0x02, 0x1F, 0x03, 0x08, 0x08, 0x94, 0x03, 0x08, 0x8C, 0x03, 0x06, 0x08, 0x07, 0x04, 0x00, 0x5A, -/* 0000FAB0 */ 0x00, 0x03, 0x8C, 0x03, 0x16, 0x09, 0x5A, 0x01, 0x09, 0x8C, 0x03, 0x12, 0x09, 0x07, 0x02, 0x00, -/* 0000FAC0 */ 0x5A, 0x00, 0x03, 0x90, 0x02, 0x0A, 0x5A, 0x01, 0x0A, 0x1F, 0x02, 0x09, 0x09, 0x5A, 0x02, 0x09, -/* 0000FAD0 */ 0xD3, 0x00, 0x09, 0x5A, 0x03, 0x09, 0x1F, 0x04, 0xFF, 0x08, 0x8C, 0x01, 0x02, 0x08, 0x4B, 0x08, -/* 0000FAE0 */ 0x90, 0x03, 0x09, 0x9A, 0x09, 0x08, 0x04, 0xA6, 0x00, 0x24, 0x00, 0xFF, 0xD7, 0xDC, 0x01, 0x00, -/* 0000FAF0 */ 0x05, 0x0A, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x56, 0x00, 0x19, 0x00, 0x45, 0x00, 0x32, 0x00, 0x58, -/* 0000FB00 */ 0x01, 0x0F, 0x00, 0x34, 0x00, 0x00, 0x0A, 0xFB, 0x00, 0x00, 0xBF, 0x4C, 0x00, 0x01, 0x00, 0x88, -/* 0000FB10 */ 0x01, 0x00, 0xFE, 0xA3, 0x0A, 0x68, 0xA2, 0x41, 0xD1, 0x00, 0xA4, 0xFF, 0xCE, 0xDD, 0x01, 0x00, -/* 0000FB20 */ 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0xCE, 0xDD, 0x01, 0x00, 0xEC, 0xEC, 0x41, 0x04, -/* 0000FB30 */ 0x03, 0x06, 0x0D, 0x0C, 0x04, 0x02, 0x05, 0x06, 0xFE, 0x5B, 0x03, 0x25, 0x4F, 0x04, 0x8C, 0x01, -/* 0000FB40 */ 0x02, 0x06, 0x4B, 0x06, 0x95, 0x06, 0x06, 0x03, 0x47, 0x04, 0x06, 0x15, 0x03, 0x00, 0x04, 0x02, -/* 0000FB50 */ 0x09, 0x0A, 0x00, 0x8C, 0x01, 0x03, 0x06, 0x4B, 0x06, 0x9A, 0x03, 0x06, 0x04, 0xA6, 0x00, 0x24, -/* 0000FB60 */ 0x00, 0xFF, 0xF5, 0xDD, 0x01, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x48, 0x00, 0x08, -/* 0000FB70 */ 0x00, 0x2D, 0x00, 0x0C, 0x00, 0x4F, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0x01, 0x00, 0x88, 0x01, 0x00, -/* 0000FB80 */ 0xFE, 0x78, 0x0A, 0x08, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0xBF, 0x04, 0xA1, 0xFF, 0xE5, 0xD1, 0x01, -/* 0000FB90 */ 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0xE5, 0xD1, 0x01, 0x00, 0x96, 0x96, 0x01, -/* 0000FBA0 */ 0x05, 0x03, 0x06, 0x05, 0x0F, 0x0F, 0x02, 0x02, 0x05, 0x08, 0x29, 0x59, 0x06, 0xB1, 0x04, 0x06, -/* 0000FBB0 */ 0x8C, 0x02, 0x2D, 0x06, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x04, 0x8C, 0x01, 0x18, -/* 0000FBC0 */ 0x07, 0x4B, 0x07, 0x5A, 0x02, 0x07, 0x5A, 0x03, 0x03, 0x1F, 0x04, 0x00, 0x06, 0x09, 0x02, 0x00, -/* 0000FBD0 */ 0xA6, 0x00, 0x24, 0x00, 0xFF, 0x23, 0xD2, 0x01, 0x00, 0x02, 0x05, 0x00, 0x00, 0x00, 0x22, 0x00, -/* 0000FBE0 */ 0x57, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0x01, 0x00, 0x88, 0x01, 0x00, 0xFE, 0x72, 0x0A, 0x08, 0xA2, -/* 0000FBF0 */ 0x41, 0xC3, 0x00, 0xFE, 0xBE, 0x04, 0xA0, 0xFF, 0x3F, 0xD0, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, -/* 0000FC00 */ 0x00, 0x03, 0x02, 0xFF, 0x3F, 0xD0, 0x01, 0x00, 0xCC, 0xCC, 0x01, 0x06, 0x03, 0x07, 0x06, 0x13, -/* 0000FC10 */ 0x12, 0x02, 0x02, 0x06, 0x08, 0x36, 0x59, 0x07, 0xB1, 0x05, 0x07, 0x15, 0x05, 0x00, 0x04, 0x02, -/* 0000FC20 */ 0xA6, 0x07, 0x47, 0x04, 0x07, 0x8C, 0x02, 0x2C, 0x07, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x02, 0x5A, -/* 0000FC30 */ 0x01, 0x05, 0x8C, 0x01, 0x16, 0x08, 0x4B, 0x08, 0x5A, 0x02, 0x08, 0x5A, 0x03, 0x03, 0x5A, 0x04, -/* 0000FC40 */ 0x04, 0x1F, 0x05, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFF, 0x7D, 0xD0, 0x01, -/* 0000FC50 */ 0x00, 0x03, 0x05, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x23, 0x00, 0x25, 0x00, 0x6A, 0x00, 0x00, 0xBF, -/* 0000FC60 */ 0x5C, 0x00, 0x01, 0x00, 0x88, 0x01, 0x00, 0xFE, 0x6C, 0x0A, 0x08, 0xA2, 0x41, 0xC3, 0x00, 0xFE, -/* 0000FC70 */ 0xBD, 0x04, 0x9F, 0xFF, 0x65, 0xCE, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x02, 0xFF, -/* 0000FC80 */ 0x65, 0xCE, 0x01, 0x00, 0xC8, 0xC8, 0x01, 0x06, 0x03, 0x07, 0x06, 0x13, 0x12, 0x02, 0x02, 0x06, -/* 0000FC90 */ 0x08, 0x36, 0x59, 0x07, 0xB1, 0x05, 0x07, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA6, 0x07, 0x47, 0x04, -/* 0000FCA0 */ 0x07, 0x8C, 0x02, 0x2C, 0x07, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x05, 0x8C, 0x01, -/* 0000FCB0 */ 0x14, 0x08, 0x4B, 0x08, 0x5A, 0x02, 0x08, 0x5A, 0x03, 0x03, 0x5A, 0x04, 0x04, 0x1F, 0x05, 0x00, -/* 0000FCC0 */ 0x07, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFF, 0xA1, 0xCE, 0x01, 0x00, 0x03, 0x05, 0x00, -/* 0000FCD0 */ 0x00, 0x00, 0x0A, 0x00, 0x23, 0x00, 0x25, 0x00, 0x68, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0x01, 0x00, -/* 0000FCE0 */ 0x88, 0x01, 0x00, 0xFE, 0x66, 0x0A, 0x08, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0xBC, 0x04, 0x9E, 0xFF, -/* 0000FCF0 */ 0x9B, 0xCC, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x02, 0xFF, 0x9B, 0xCC, 0x01, 0x00, -/* 0000FD00 */ 0xC0, 0xC0, 0x01, 0x06, 0x03, 0x07, 0x06, 0x13, 0x12, 0x02, 0x02, 0x06, 0x08, 0x36, 0x59, 0x07, -/* 0000FD10 */ 0xB1, 0x05, 0x07, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA6, 0x07, 0x47, 0x04, 0x07, 0x8C, 0x02, 0x2C, -/* 0000FD20 */ 0x07, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x05, 0x8C, 0x01, 0x12, 0x08, 0x4B, 0x08, -/* 0000FD30 */ 0x5A, 0x02, 0x08, 0x5A, 0x03, 0x03, 0x5A, 0x04, 0x04, 0x1F, 0x05, 0x00, 0x07, 0x09, 0x02, 0x00, -/* 0000FD40 */ 0xA6, 0x00, 0x24, 0x00, 0xFF, 0xD3, 0xCC, 0x01, 0x00, 0x03, 0x05, 0x00, 0x00, 0x00, 0x0A, 0x00, -/* 0000FD50 */ 0x23, 0x00, 0x25, 0x00, 0x64, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, -/* 0000FD60 */ 0x48, 0x0A, 0x1D, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x4C, 0x03, 0x9D, 0xFF, 0xFB, 0xC6, 0x01, 0x00, -/* 0000FD70 */ 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFF, 0xFB, 0xC6, 0x01, 0x00, 0xFE, 0x60, 0x03, 0xFE, -/* 0000FD80 */ 0x60, 0x03, 0x01, 0x08, 0x08, 0x0C, 0x0A, 0x52, 0x4F, 0x02, 0x08, 0x04, 0x04, 0x04, 0x04, 0x0B, -/* 0000FD90 */ 0x08, 0x06, 0xFE, 0xF5, 0x03, 0x05, 0xFE, 0xBC, 0x03, 0x05, 0xFE, 0xFF, 0x03, 0x06, 0xFE, 0x00, -/* 0000FDA0 */ 0x04, 0x05, 0xFE, 0xBB, 0x04, 0xFE, 0x11, 0x01, 0xA6, 0x0A, 0x8C, 0x01, 0x07, 0x0C, 0x4B, 0x0C, -/* 0000FDB0 */ 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x08, 0x1F, 0x02, 0x0C, 0x0C, 0x47, 0x08, 0x0C, -/* 0000FDC0 */ 0x2C, 0x0C, 0x09, 0x15, 0x03, 0x00, 0x0C, 0x03, 0x09, 0x66, 0x00, 0x5F, 0x0C, 0x09, 0x00, 0x47, -/* 0000FDD0 */ 0x0A, 0x0C, 0x2C, 0x0C, 0x0A, 0x15, 0x03, 0x00, 0x0C, 0x03, 0x09, 0x54, 0x00, 0x8C, 0x02, 0x24, -/* 0000FDE0 */ 0x0D, 0x6A, 0x0C, 0x0D, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0D, 0x5A, 0x01, 0x0A, 0x1F, 0x02, -/* 0000FDF0 */ 0x0C, 0x0C, 0x47, 0x0A, 0x0C, 0x15, 0x03, 0x00, 0x0A, 0x04, 0x09, 0x34, 0x00, 0x15, 0x03, 0x00, -/* 0000FE00 */ 0x0A, 0x05, 0x09, 0x2C, 0x00, 0x8C, 0x02, 0x03, 0x0D, 0x6A, 0x0C, 0x0D, 0x02, 0x07, 0x04, 0x00, -/* 0000FE10 */ 0x5A, 0x00, 0x0D, 0x8C, 0x02, 0x0B, 0x0E, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x0A, -/* 0000FE20 */ 0x1F, 0x02, 0x0E, 0x0E, 0x5A, 0x01, 0x0E, 0x5A, 0x02, 0x06, 0x5A, 0x03, 0x07, 0x1F, 0x04, 0xFF, -/* 0000FE30 */ 0x0C, 0x2C, 0x0C, 0x0A, 0x14, 0x08, 0x00, 0x0C, 0x03, 0x14, 0x03, 0x00, 0x0A, 0x05, 0x09, 0x46, -/* 0000FE40 */ 0x00, 0x8C, 0x01, 0x08, 0x0C, 0x4B, 0x0C, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x08, -/* 0000FE50 */ 0x8C, 0x02, 0x26, 0x0D, 0x5A, 0x02, 0x0D, 0x8C, 0x02, 0x03, 0x0E, 0x6A, 0x0D, 0x0E, 0x03, 0x07, -/* 0000FE60 */ 0x02, 0x00, 0x5A, 0x00, 0x0E, 0x8C, 0x02, 0x2B, 0x0F, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x02, 0x1F, -/* 0000FE70 */ 0x01, 0x0F, 0x0F, 0x5A, 0x01, 0x0F, 0x1F, 0x02, 0x0D, 0x0D, 0x5A, 0x03, 0x0D, 0x1F, 0x04, 0x00, -/* 0000FE80 */ 0x0C, 0x09, 0x33, 0x00, 0x09, 0x2E, 0x00, 0x8C, 0x01, 0x08, 0x0C, 0x4B, 0x0C, 0x07, 0x04, 0x00, -/* 0000FE90 */ 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x08, 0x8C, 0x02, 0x27, 0x0D, 0x5A, 0x02, 0x0D, 0x8C, 0x02, 0x2B, -/* 0000FEA0 */ 0x0D, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x02, 0x1F, 0x01, 0x0D, 0x0D, 0x5A, 0x03, 0x0D, 0x1F, 0x04, -/* 0000FEB0 */ 0x00, 0x0C, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xF8, 0x01, 0xFE, 0x37, 0x03, 0xFE, -/* 0000FEC0 */ 0x8F, 0x02, 0xFE, 0xD8, 0x01, 0xFF, 0x36, 0xC7, 0x01, 0x00, 0x0B, 0x02, 0x00, 0x00, 0x00, 0x16, -/* 0000FED0 */ 0x00, 0x34, 0x00, 0x0B, 0x00, 0x32, 0x00, 0x07, 0x00, 0x2E, 0x00, 0x0B, 0x00, 0x36, 0x00, 0x18, -/* 0000FEE0 */ 0x00, 0x37, 0x00, 0x10, 0x00, 0x4A, 0x00, 0x2C, 0x00, 0x96, 0x00, 0x10, 0x00, 0x4C, 0x00, 0x46, -/* 0000FEF0 */ 0x00, 0x93, 0x00, 0x30, 0x00, 0x64, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, -/* 0000FF00 */ 0xFE, 0x3A, 0x0A, 0x28, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xEE, 0x02, 0x9C, 0xFF, 0x27, 0xC5, 0x01, -/* 0000FF10 */ 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFF, 0x27, 0xC5, 0x01, 0x00, 0xFE, 0x8C, 0x01, -/* 0000FF20 */ 0xFE, 0x8C, 0x01, 0x01, 0x07, 0x05, 0x0A, 0x03, 0x25, 0x24, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, -/* 0000FF30 */ 0x09, 0x07, 0x05, 0xFE, 0x3C, 0x03, 0x08, 0x7B, 0x14, 0x0A, 0x00, 0x05, 0x02, 0xA6, 0x0A, 0x14, -/* 0000FF40 */ 0x03, 0x00, 0x05, 0x0A, 0x09, 0x15, 0x00, 0x8C, 0x02, 0x03, 0x0B, 0x6A, 0x0A, 0x0B, 0x00, 0x07, -/* 0000FF50 */ 0x02, 0x00, 0x5A, 0x00, 0x0B, 0x5A, 0x01, 0x06, 0x1F, 0x02, 0xFF, 0x0A, 0x8C, 0x02, 0x03, 0x0B, -/* 0000FF60 */ 0x6A, 0x0A, 0x0B, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0B, 0x5A, 0x01, 0x05, 0x1F, 0x02, 0x0A, -/* 0000FF70 */ 0x0A, 0x47, 0x08, 0x0A, 0x0E, 0x0C, 0x00, 0x08, 0x5F, 0x0A, 0x08, 0x02, 0x15, 0x03, 0x00, 0x0A, -/* 0000FF80 */ 0x03, 0x09, 0x15, 0x00, 0x8C, 0x02, 0x03, 0x0B, 0x6A, 0x0A, 0x0B, 0x00, 0x07, 0x02, 0x00, 0x5A, -/* 0000FF90 */ 0x00, 0x0B, 0x5A, 0x01, 0x06, 0x1F, 0x02, 0xFF, 0x0A, 0x8C, 0x01, 0x07, 0x0A, 0x4B, 0x0A, 0x07, -/* 0000FFA0 */ 0x02, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x07, 0x1F, 0x02, 0x00, 0x0A, 0x09, 0x02, 0x00, 0xA6, -/* 0000FFB0 */ 0x00, 0x24, 0x00, 0xFE, 0x8C, 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0xF6, 0x01, 0xFF, 0x58, 0xC5, 0x01, -/* 0000FFC0 */ 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x37, 0x00, 0x15, 0x00, 0x40, 0x00, 0x18, 0x00, -/* 0000FFD0 */ 0x38, 0x00, 0x10, 0x00, 0x3F, 0x00, 0x15, 0x00, 0x40, 0x00, 0x18, 0x00, 0x2C, 0x00, 0x00, 0xBF, -/* 0000FFE0 */ 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x2D, 0x0A, 0x24, 0xA2, 0x41, 0xC1, 0x00, 0xFE, -/* 0000FFF0 */ 0xED, 0x02, 0x9B, 0xFF, 0x63, 0xC3, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x05, 0x05, 0xFF, -/* 00010000 */ 0x63, 0xC3, 0x01, 0x00, 0xFE, 0x9A, 0x01, 0xFE, 0x9A, 0x01, 0x01, 0x08, 0x05, 0x0B, 0x04, 0x25, -/* 00010010 */ 0x24, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x0A, 0x07, 0x05, 0xFE, 0x3C, 0x03, 0x08, 0x7C, 0x14, -/* 00010020 */ 0x0A, 0x00, 0x05, 0x02, 0xA6, 0x0B, 0x14, 0x03, 0x00, 0x05, 0x0B, 0x09, 0x15, 0x00, 0x8C, 0x02, -/* 00010030 */ 0x03, 0x0C, 0x6A, 0x0B, 0x0C, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5A, 0x01, 0x06, 0x1F, -/* 00010040 */ 0x02, 0xFF, 0x0B, 0x8C, 0x02, 0x03, 0x0C, 0x6A, 0x0B, 0x0C, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 00010050 */ 0x0C, 0x5A, 0x01, 0x05, 0x1F, 0x02, 0x0B, 0x0B, 0x47, 0x09, 0x0B, 0x0E, 0x0C, 0x00, 0x09, 0x5F, -/* 00010060 */ 0x0B, 0x09, 0x02, 0x15, 0x03, 0x00, 0x0B, 0x03, 0x09, 0x15, 0x00, 0x8C, 0x02, 0x03, 0x0C, 0x6A, -/* 00010070 */ 0x0B, 0x0C, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5A, 0x01, 0x06, 0x1F, 0x02, 0xFF, 0x0B, -/* 00010080 */ 0x8C, 0x02, 0x2E, 0x0B, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x07, 0x5A, 0x02, 0x08, -/* 00010090 */ 0x1F, 0x03, 0x00, 0x0B, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x8C, 0x02, 0xFE, 0xEF, -/* 000100A0 */ 0x01, 0xFE, 0xF6, 0x01, 0xFF, 0x9D, 0xC3, 0x01, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, -/* 000100B0 */ 0x37, 0x00, 0x15, 0x00, 0x40, 0x00, 0x18, 0x00, 0x38, 0x00, 0x10, 0x00, 0x3F, 0x00, 0x15, 0x00, -/* 000100C0 */ 0x40, 0x00, 0x19, 0x00, 0x31, 0x00, 0x00, 0x3F, 0x5D, 0x00, 0xC1, 0x13, 0x8D, 0x25, 0x00, 0xFE, -/* 000100D0 */ 0x1A, 0x0A, 0x04, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x74, 0x03, 0x99, 0xFF, 0xCE, 0xBF, 0x01, 0x00, -/* 000100E0 */ 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFF, 0xCE, 0xBF, 0x01, 0x00, 0xFE, 0x6F, 0x03, -/* 000100F0 */ 0xFE, 0x6F, 0x03, 0x04, 0xFE, 0xF9, 0x03, 0xFE, 0xB8, 0x04, 0xFE, 0xB9, 0x04, 0xFE, 0xBA, 0x04, -/* 00010100 */ 0x09, 0x0A, 0x10, 0x05, 0x20, 0x20, 0x02, 0x05, 0x03, 0x03, 0x03, 0x03, 0x01, 0x0D, 0x0E, 0x0F, -/* 00010110 */ 0x01, 0x00, 0x08, 0x06, 0xFE, 0x01, 0x04, 0x06, 0xFE, 0x40, 0x03, 0x06, 0xFE, 0x42, 0x03, 0x0C, -/* 00010120 */ 0x06, 0xFE, 0x44, 0x03, 0x07, 0x6D, 0x94, 0x04, 0x0B, 0x94, 0x05, 0x0C, 0xCC, 0x10, 0x00, 0x94, -/* 00010130 */ 0x02, 0x10, 0x94, 0x03, 0x02, 0x8C, 0x02, 0x06, 0x10, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x8C, -/* 00010140 */ 0x02, 0x16, 0x11, 0x5A, 0x01, 0x11, 0x5A, 0x02, 0x0A, 0xD3, 0x00, 0x11, 0x5A, 0x03, 0x11, 0x1F, -/* 00010150 */ 0x04, 0xFF, 0x10, 0x8C, 0x02, 0x15, 0x10, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x90, 0x02, 0x11, -/* 00010160 */ 0x5A, 0x01, 0x11, 0x5A, 0x02, 0x04, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, -/* 00010170 */ 0x00, 0x00, 0x00, 0x90, 0x03, 0x12, 0x78, 0x12, 0x11, 0x00, 0x78, 0x07, 0x11, 0x01, 0x78, 0x07, -/* 00010180 */ 0x11, 0x02, 0x5A, 0x03, 0x11, 0x1F, 0x04, 0xFF, 0x10, 0x90, 0x02, 0x00, 0x09, 0x02, 0x00, 0xA6, -/* 00010190 */ 0x00, 0x24, 0x00, 0x01, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, -/* 000101A0 */ 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0xFE, 0x83, -/* 000101B0 */ 0x01, 0xFE, 0x82, 0x01, 0xFE, 0x81, 0x01, 0xFF, 0x21, 0xC0, 0x01, 0x00, 0x06, 0x06, 0x00, 0x00, -/* 000101C0 */ 0x00, 0x06, 0x00, 0x19, 0x00, 0x03, 0x00, 0x17, 0x00, 0x1E, 0x00, 0x70, 0x02, 0x36, 0x00, 0x68, -/* 000101D0 */ 0x00, 0x08, 0x00, 0x13, 0x00, 0x00, 0xDA, 0x01, 0x01, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x53, 0xA8, -/* 000101E0 */ 0x21, 0x00, 0xFE, 0x1D, 0x0A, 0x41, 0xB2, 0x41, 0xD1, 0x00, 0x9A, 0xFF, 0x8A, 0xC0, 0x01, 0x00, -/* 000101F0 */ 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0x8A, 0xC0, 0x01, 0x00, 0xFE, 0x2C, 0x02, 0xFE, -/* 00010200 */ 0x2C, 0x02, 0x45, 0x08, 0x0B, 0x0F, 0x06, 0x2F, 0x2E, 0x03, 0x07, 0x05, 0x05, 0x05, 0x05, 0x01, -/* 00010210 */ 0x01, 0x0E, 0x0F, 0x08, 0x06, 0xFE, 0x40, 0x03, 0x06, 0xFE, 0x42, 0x03, 0x0C, 0x06, 0xFE, 0x44, -/* 00010220 */ 0x03, 0x06, 0xFE, 0x43, 0x03, 0x0B, 0x07, 0x01, 0x01, 0x9D, 0xA6, 0x0D, 0xE5, 0x7F, 0x00, 0x8C, -/* 00010230 */ 0x03, 0x29, 0x10, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x0B, 0x8C, 0x01, 0x04, 0x11, -/* 00010240 */ 0x5A, 0x02, 0x11, 0xA6, 0x11, 0x5A, 0x03, 0x11, 0x8C, 0x01, 0x05, 0x11, 0x5A, 0x04, 0x11, 0x1F, -/* 00010250 */ 0x05, 0x10, 0x10, 0x47, 0x0D, 0x10, 0x5F, 0x10, 0x0D, 0x00, 0x0E, 0x4C, 0x00, 0x10, 0x8C, 0x03, -/* 00010260 */ 0x15, 0x10, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8C, 0x01, 0x02, 0x11, 0x5A, 0x01, 0x11, 0x8C, -/* 00010270 */ 0x01, 0x03, 0x11, 0x5A, 0x02, 0x11, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, -/* 00010280 */ 0x00, 0x00, 0x00, 0x5F, 0x12, 0x0D, 0x00, 0x78, 0x12, 0x11, 0x01, 0x78, 0x05, 0x11, 0x02, 0x78, -/* 00010290 */ 0x05, 0x11, 0x03, 0x78, 0x08, 0x11, 0x04, 0x5A, 0x03, 0x11, 0x1F, 0x04, 0xFF, 0x10, 0x8C, 0x01, -/* 000102A0 */ 0x03, 0x10, 0x2F, 0x10, 0x10, 0x0A, 0x92, 0x01, 0x03, 0x10, 0xE9, 0x09, 0x15, 0x00, 0xE7, 0x0C, -/* 000102B0 */ 0x06, 0x8C, 0x03, 0x22, 0x10, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x0C, 0x1F, 0x02, -/* 000102C0 */ 0xFF, 0x10, 0xE9, 0xA6, 0x00, 0x24, 0x00, 0x01, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, -/* 000102D0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x81, 0x01, -/* 000102E0 */ 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0xFE, 0xF7, 0x01, 0xFE, 0x83, 0x01, 0xFE, 0x82, 0x01, 0xFE, -/* 000102F0 */ 0x81, 0x01, 0xFE, 0x80, 0x01, 0xFF, 0xC0, 0xC0, 0x01, 0x00, 0x07, 0x05, 0x00, 0x00, 0x00, 0x27, -/* 00010300 */ 0x00, 0x5E, 0x00, 0x08, 0x00, 0x2B, 0x00, 0x40, 0x00, 0x8D, 0x00, 0x12, 0x00, 0x33, 0x00, 0x01, -/* 00010310 */ 0x00, 0x1D, 0x00, 0x14, 0x00, 0x8F, 0x00, 0x00, 0x3F, 0x5D, 0x00, 0xC1, 0x03, 0x8D, 0x05, 0x00, -/* 00010320 */ 0xFE, 0xF6, 0x09, 0x04, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x73, 0x03, 0x97, 0xFF, 0x97, 0xBB, 0x01, -/* 00010330 */ 0x00, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0x97, 0xBB, 0x01, 0x00, 0xFE, 0x31, -/* 00010340 */ 0x04, 0xFE, 0x31, 0x04, 0x01, 0xFE, 0xB6, 0x04, 0x08, 0x05, 0x0A, 0x05, 0x2C, 0x29, 0x02, 0x03, -/* 00010350 */ 0x03, 0x03, 0x03, 0x03, 0x07, 0x08, 0x09, 0x06, 0xFE, 0xF5, 0x03, 0x06, 0xFE, 0xAD, 0x03, 0x08, -/* 00010360 */ 0x8B, 0x4F, 0x06, 0x4F, 0x0A, 0x94, 0x02, 0x0A, 0x2C, 0x0A, 0x05, 0x14, 0x03, 0x00, 0x0A, 0x02, -/* 00010370 */ 0x09, 0x06, 0x00, 0xCC, 0x00, 0x00, 0x09, 0x71, 0x00, 0x2C, 0x0A, 0x05, 0x14, 0x03, 0x00, 0x0A, -/* 00010380 */ 0x03, 0x09, 0x0A, 0x00, 0xCC, 0x0A, 0x01, 0x9F, 0x00, 0x05, 0x0A, 0x47, 0x05, 0x0A, 0x8C, 0x02, -/* 00010390 */ 0x24, 0x0B, 0x6A, 0x0A, 0x0B, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0B, 0x5A, 0x01, 0x05, 0x1F, -/* 000103A0 */ 0x02, 0x0A, 0x0A, 0x47, 0x05, 0x0A, 0x8C, 0x02, 0x24, 0x0B, 0x6A, 0x0A, 0x0B, 0x01, 0x07, 0x02, -/* 000103B0 */ 0x00, 0x5A, 0x00, 0x0B, 0xA4, 0x0C, 0x05, 0x02, 0x5A, 0x01, 0x0C, 0x1F, 0x02, 0x0A, 0x0A, 0x47, -/* 000103C0 */ 0x06, 0x0A, 0xCC, 0x0A, 0x00, 0x94, 0x02, 0x0A, 0x8C, 0x02, 0x25, 0x0A, 0x07, 0x04, 0x00, 0x5A, -/* 000103D0 */ 0x00, 0x04, 0x5A, 0x01, 0x05, 0x5A, 0x02, 0x06, 0xD3, 0x00, 0x0B, 0x5A, 0x03, 0x0B, 0x1F, 0x04, -/* 000103E0 */ 0xFF, 0x0A, 0x90, 0x02, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x36, 0x03, 0xFE, -/* 000103F0 */ 0x3A, 0x03, 0xC1, 0xFF, 0xCA, 0xBB, 0x01, 0x00, 0x0A, 0x07, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x32, -/* 00010400 */ 0x00, 0x06, 0x00, 0x1E, 0x00, 0x0B, 0x00, 0x2F, 0x00, 0x0A, 0x00, 0x28, 0x00, 0x18, 0x00, 0x2E, -/* 00010410 */ 0x00, 0x1C, 0x00, 0x70, 0x00, 0x06, 0x00, 0x18, 0x00, 0x1A, 0x00, 0x8F, 0x02, 0x08, 0x00, 0x11, -/* 00010420 */ 0x00, 0x00, 0x26, 0x04, 0x01, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x05, -/* 00010430 */ 0x0A, 0x2A, 0xA2, 0x41, 0xD1, 0x00, 0x98, 0xFF, 0x49, 0xBD, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, -/* 00010440 */ 0x00, 0x02, 0x02, 0xFF, 0x49, 0xBD, 0x01, 0x00, 0xFE, 0x61, 0x02, 0xFE, 0x61, 0x02, 0x41, 0x06, -/* 00010450 */ 0x08, 0x0B, 0x06, 0x4A, 0x48, 0x03, 0x08, 0x04, 0x04, 0x04, 0x04, 0x0A, 0x06, 0xFE, 0xAD, 0x03, -/* 00010460 */ 0x06, 0xFE, 0xF6, 0x03, 0x07, 0x05, 0xFE, 0xB7, 0x04, 0x08, 0x01, 0xFF, 0xF7, 0x4F, 0x09, 0x2C, -/* 00010470 */ 0x0B, 0x08, 0x15, 0x03, 0x00, 0x0B, 0x02, 0x09, 0x08, 0x00, 0x2C, 0x0B, 0x08, 0x15, 0x08, 0x00, -/* 00010480 */ 0x0B, 0x03, 0x14, 0x03, 0x00, 0x08, 0x04, 0x09, 0x15, 0x00, 0x8C, 0x03, 0x03, 0x0C, 0x6A, 0x0B, -/* 00010490 */ 0x0C, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5A, 0x01, 0x05, 0x1F, 0x02, 0xFF, 0x0B, 0x8C, -/* 000104A0 */ 0x03, 0x24, 0x0C, 0x6A, 0x0B, 0x0C, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5A, 0x01, 0x08, -/* 000104B0 */ 0x1F, 0x02, 0x0B, 0x0B, 0x47, 0x09, 0x0B, 0x8C, 0x02, 0x0C, 0x0B, 0x4B, 0x0B, 0x07, 0x02, 0x00, -/* 000104C0 */ 0x5A, 0x00, 0x06, 0x5A, 0x01, 0x09, 0x1F, 0x02, 0x0B, 0x0B, 0x0F, 0x26, 0x00, 0x0B, 0x8C, 0x03, -/* 000104D0 */ 0x03, 0x0C, 0x6A, 0x0B, 0x0C, 0x02, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x8C, 0x03, 0x0B, 0x0D, -/* 000104E0 */ 0x07, 0x02, 0x00, 0x5A, 0x00, 0x06, 0x5A, 0x01, 0x09, 0x1F, 0x02, 0x0D, 0x0D, 0x5A, 0x01, 0x0D, -/* 000104F0 */ 0x1F, 0x02, 0xFF, 0x0B, 0x8C, 0x03, 0x03, 0x0C, 0x6A, 0x0B, 0x0C, 0x03, 0x07, 0x02, 0x00, 0x5A, -/* 00010500 */ 0x00, 0x0C, 0x5A, 0x01, 0x09, 0x1F, 0x02, 0x0B, 0x0B, 0x47, 0x09, 0x0B, 0xA6, 0x0B, 0x15, 0x03, -/* 00010510 */ 0x00, 0x09, 0x0B, 0x09, 0x4A, 0x00, 0x8C, 0x03, 0x06, 0x0B, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x06, -/* 00010520 */ 0x8C, 0x03, 0x17, 0x0C, 0x5A, 0x01, 0x0C, 0x8C, 0x01, 0x02, 0x0C, 0x4B, 0x0C, 0x5A, 0x02, 0x0C, -/* 00010530 */ 0x5A, 0x03, 0x09, 0x1F, 0x04, 0x0B, 0x0B, 0x14, 0x03, 0x00, 0x0B, 0x07, 0x09, 0x21, 0x00, 0x8C, -/* 00010540 */ 0x03, 0x06, 0x0B, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x06, 0x8C, 0x03, 0x18, 0x0C, 0x5A, 0x01, 0x0C, -/* 00010550 */ 0x8C, 0x01, 0x02, 0x0C, 0x4B, 0x0C, 0x5A, 0x02, 0x0C, 0x5A, 0x03, 0x09, 0x1F, 0x04, 0xFF, 0x0B, -/* 00010560 */ 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x8B, 0x02, 0xFE, 0x37, 0x03, 0xFE, 0x87, 0x02, 0xFE, 0xD8, 0x01, -/* 00010570 */ 0xFF, 0x69, 0xBD, 0x01, 0x00, 0x09, 0x02, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x65, 0x00, 0x15, 0x00, -/* 00010580 */ 0x47, 0x00, 0x18, 0x00, 0x32, 0x00, 0x17, 0x00, 0x35, 0x00, 0x26, 0x00, 0x4B, 0x00, 0x18, 0x00, -/* 00010590 */ 0x37, 0x00, 0x33, 0x00, 0x65, 0x00, 0x23, 0x00, 0x46, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, -/* 000105A0 */ 0x88, 0x01, 0x00, 0xFE, 0xEB, 0x09, 0x04, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x71, 0x03, 0x96, 0xFF, -/* 000105B0 */ 0x22, 0xBA, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0x22, 0xBA, 0x01, 0x00, -/* 000105C0 */ 0xF8, 0xF8, 0x01, 0x05, 0x04, 0x06, 0x04, 0x1D, 0x1C, 0x02, 0x04, 0x02, 0x02, 0x02, 0x02, 0x05, -/* 000105D0 */ 0x08, 0x07, 0x5B, 0x8C, 0x02, 0x24, 0x07, 0x6A, 0x06, 0x07, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 000105E0 */ 0x07, 0x5A, 0x01, 0x04, 0x1F, 0x02, 0x06, 0x06, 0x47, 0x04, 0x06, 0x8C, 0x01, 0x0E, 0x06, 0x4B, -/* 000105F0 */ 0x06, 0x0F, 0x10, 0x00, 0x06, 0x8C, 0x01, 0x04, 0x06, 0x4B, 0x06, 0x07, 0x01, 0x00, 0x5A, 0x00, -/* 00010600 */ 0x02, 0x1F, 0x01, 0xFF, 0x06, 0x8C, 0x02, 0x03, 0x07, 0x6A, 0x06, 0x07, 0x01, 0x07, 0x03, 0x00, -/* 00010610 */ 0x5A, 0x00, 0x07, 0x5A, 0x01, 0x04, 0x8C, 0x01, 0x0E, 0x08, 0x4B, 0x08, 0x5A, 0x02, 0x08, 0x1F, -/* 00010620 */ 0x03, 0x06, 0x06, 0x44, 0x00, 0x06, 0x03, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x37, -/* 00010630 */ 0x03, 0xFE, 0x83, 0x02, 0xFF, 0x54, 0xBA, 0x01, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, -/* 00010640 */ 0x29, 0x00, 0x0A, 0x00, 0x25, 0x00, 0x10, 0x00, 0x2F, 0x00, 0x27, 0x00, 0x48, 0x00, 0x00, 0xBF, -/* 00010650 */ 0x5C, 0x00, 0x01, 0x00, 0x88, 0x01, 0x00, 0xFE, 0xB0, 0x09, 0x04, 0xA1, 0x41, 0xC1, 0x00, 0xFE, -/* 00010660 */ 0x7D, 0x03, 0x95, 0xFF, 0x1E, 0xA7, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFF, -/* 00010670 */ 0x1E, 0xA7, 0x01, 0x00, 0xFE, 0xFE, 0x12, 0xFE, 0xFE, 0x12, 0x41, 0x17, 0x25, 0x38, 0x04, 0xAF, -/* 00010680 */ 0x89, 0x02, 0x01, 0x37, 0x05, 0xFE, 0xCC, 0x03, 0x05, 0xFE, 0xCD, 0x03, 0x05, 0xFE, 0xCE, 0x03, -/* 00010690 */ 0x06, 0xFE, 0xCF, 0x03, 0x06, 0xFE, 0xD0, 0x03, 0x05, 0xFE, 0xD1, 0x03, 0x05, 0xFE, 0xD2, 0x03, -/* 000106A0 */ 0x05, 0xFE, 0xD3, 0x03, 0x05, 0xFE, 0xD4, 0x03, 0x05, 0xFE, 0xD5, 0x03, 0x05, 0xFE, 0xD6, 0x03, -/* 000106B0 */ 0x05, 0xFE, 0xD7, 0x03, 0x05, 0xFE, 0xD8, 0x03, 0x05, 0xFE, 0xD9, 0x03, 0x05, 0xFE, 0xDA, 0x03, -/* 000106C0 */ 0x05, 0xFE, 0xDB, 0x03, 0x06, 0xFE, 0x5B, 0x03, 0x05, 0xFE, 0xDC, 0x03, 0x05, 0xFE, 0xDD, 0x03, -/* 000106D0 */ 0x05, 0xFE, 0xDE, 0x03, 0x05, 0xFE, 0xDF, 0x03, 0x05, 0xFE, 0xE0, 0x03, 0x05, 0xFE, 0xE1, 0x03, -/* 000106E0 */ 0x05, 0xFE, 0xE2, 0x03, 0x05, 0xFE, 0xE3, 0x03, 0x05, 0xFE, 0xE4, 0x03, 0x05, 0xFE, 0xE5, 0x03, -/* 000106F0 */ 0x05, 0xFE, 0xE6, 0x03, 0x05, 0xFE, 0xE7, 0x03, 0x05, 0xFE, 0xB5, 0x04, 0x05, 0xFE, 0xE8, 0x03, -/* 00010700 */ 0x05, 0xFE, 0xE9, 0x03, 0x05, 0xFE, 0xEA, 0x03, 0x05, 0xFE, 0xEB, 0x03, 0x06, 0xFE, 0xEE, 0x03, -/* 00010710 */ 0xFE, 0x87, 0x02, 0x4F, 0x25, 0x4F, 0x26, 0x4F, 0x27, 0x4F, 0x28, 0x4F, 0x29, 0x4F, 0x2A, 0x4F, -/* 00010720 */ 0x2B, 0x4F, 0x2C, 0x4F, 0x2D, 0x4F, 0x2E, 0x4F, 0x2F, 0x4F, 0x30, 0x4F, 0x31, 0x4F, 0x32, 0x4F, -/* 00010730 */ 0x33, 0x4F, 0x34, 0x4F, 0x35, 0x4F, 0x36, 0x47, 0x25, 0x02, 0x47, 0x26, 0x03, 0x47, 0x38, 0x04, -/* 00010740 */ 0x01, 0x04, 0x01, 0x39, 0x25, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x05, 0x01, 0x04, 0x01, -/* 00010750 */ 0x39, 0x26, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x06, 0x47, 0x27, 0x38, 0x47, 0x28, 0x07, -/* 00010760 */ 0x2F, 0x38, 0x08, 0x09, 0x47, 0x29, 0x38, 0x47, 0x38, 0x0A, 0x01, 0x04, 0x01, 0x39, 0x28, 0x2F, -/* 00010770 */ 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x05, 0x01, 0x04, 0x01, 0x39, 0x29, 0x2F, 0x38, 0x38, 0x39, -/* 00010780 */ 0x2F, 0x38, 0x38, 0x0B, 0x47, 0x2A, 0x38, 0x47, 0x38, 0x0C, 0x01, 0x04, 0x01, 0x39, 0x27, 0x2F, -/* 00010790 */ 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x0D, 0x47, 0x2B, 0x38, 0x47, 0x38, 0x0A, 0x01, 0x04, 0x01, -/* 000107A0 */ 0x39, 0x26, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x0E, 0x47, 0x2C, 0x38, 0x47, 0x38, 0x0A, -/* 000107B0 */ 0x01, 0x04, 0x01, 0x39, 0x2C, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x0F, 0x01, 0x04, 0x01, -/* 000107C0 */ 0x39, 0x27, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x10, 0x47, 0x2D, 0x38, 0x47, 0x38, 0x0A, -/* 000107D0 */ 0x01, 0x04, 0x01, 0x39, 0x27, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x11, 0x01, 0x04, 0x01, -/* 000107E0 */ 0x39, 0x26, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x12, 0x01, 0x04, 0x01, 0x39, 0x27, 0x2F, -/* 000107F0 */ 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x13, 0x47, 0x2E, 0x38, 0x47, 0x38, 0x0A, 0x01, 0x04, 0x01, -/* 00010800 */ 0x39, 0x25, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x14, 0x01, 0x04, 0x01, 0x39, 0x26, 0x2F, -/* 00010810 */ 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x13, 0x47, 0x2F, 0x38, 0x47, 0x38, 0x0A, 0x01, 0x04, 0x01, -/* 00010820 */ 0x39, 0x25, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x15, 0x47, 0x30, 0x38, 0x47, 0x38, 0x0A, -/* 00010830 */ 0x01, 0x04, 0x01, 0x39, 0x25, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x16, 0x01, 0x04, 0x01, -/* 00010840 */ 0x39, 0x25, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x17, 0x47, 0x31, 0x38, 0x47, 0x39, 0x12, -/* 00010850 */ 0x01, 0x04, 0x01, 0x3A, 0x25, 0x2F, 0x39, 0x39, 0x3A, 0x2F, 0x39, 0x39, 0x18, 0xFC, 0x38, 0x0A, -/* 00010860 */ 0x39, 0x05, 0x47, 0x39, 0x19, 0x01, 0x04, 0x01, 0x3A, 0x31, 0x2F, 0x39, 0x39, 0x3A, 0x2F, 0x39, -/* 00010870 */ 0x39, 0x1A, 0x47, 0x3A, 0x05, 0x01, 0x04, 0x01, 0x3B, 0x25, 0x2F, 0x3A, 0x3A, 0x3B, 0x2F, 0x3A, -/* 00010880 */ 0x3A, 0x1B, 0xFE, 0x38, 0x39, 0x3A, 0x02, 0xFD, 0x38, 0x0B, 0x04, 0x47, 0x32, 0x38, 0x47, 0x38, -/* 00010890 */ 0x1C, 0x01, 0x04, 0x01, 0x39, 0x32, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x0B, 0x47, 0x39, -/* 000108A0 */ 0x1D, 0x01, 0x04, 0x01, 0x3A, 0x30, 0x2F, 0x39, 0x39, 0x3A, 0x2F, 0x39, 0x39, 0x1E, 0x2F, 0x38, -/* 000108B0 */ 0x38, 0x39, 0x47, 0x39, 0x1D, 0x01, 0x04, 0x01, 0x3A, 0x2F, 0x2F, 0x39, 0x39, 0x3A, 0x2F, 0x39, -/* 000108C0 */ 0x39, 0x1E, 0x2F, 0x38, 0x38, 0x39, 0x47, 0x33, 0x38, 0x47, 0x38, 0x19, 0x01, 0x04, 0x01, 0x39, -/* 000108D0 */ 0x2E, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x1F, 0x47, 0x39, 0x20, 0x01, 0x04, 0x01, 0x3A, -/* 000108E0 */ 0x2D, 0x2F, 0x39, 0x39, 0x3A, 0x2F, 0x39, 0x39, 0x21, 0x2F, 0x38, 0x38, 0x39, 0x47, 0x39, 0x19, -/* 000108F0 */ 0x01, 0x04, 0x01, 0x3A, 0x2B, 0x2F, 0x39, 0x39, 0x3A, 0x2F, 0x39, 0x39, 0x22, 0x2F, 0x38, 0x38, -/* 00010900 */ 0x39, 0x47, 0x34, 0x38, 0x47, 0x38, 0x23, 0x01, 0x04, 0x01, 0x39, 0x33, 0x2F, 0x38, 0x38, 0x39, -/* 00010910 */ 0x2F, 0x38, 0x38, 0x23, 0x01, 0x04, 0x01, 0x39, 0x34, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, -/* 00010920 */ 0x23, 0x47, 0x35, 0x38, 0x47, 0x38, 0x0A, 0x01, 0x04, 0x01, 0x39, 0x35, 0x2F, 0x38, 0x38, 0x39, -/* 00010930 */ 0x2F, 0x38, 0x38, 0x05, 0x01, 0x04, 0x01, 0x39, 0x2B, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, -/* 00010940 */ 0x05, 0x01, 0x04, 0x01, 0x39, 0x2A, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x0B, 0x47, 0x36, -/* 00010950 */ 0x38, 0x8C, 0x02, 0x09, 0x38, 0x07, 0x03, 0x00, 0x5A, 0x01, 0x33, 0x5A, 0x02, 0x24, 0xC1, 0x03, -/* 00010960 */ 0x38, 0x38, 0x01, 0x34, 0x01, 0x01, 0x0F, 0x38, 0x8C, 0x02, 0x09, 0x38, 0x07, 0x03, 0x00, 0x5A, -/* 00010970 */ 0x01, 0x34, 0x5A, 0x02, 0x24, 0xC1, 0x03, 0x38, 0x38, 0x01, 0x34, 0x01, 0x01, 0x10, 0x38, 0x8C, -/* 00010980 */ 0x02, 0x09, 0x38, 0x07, 0x03, 0x00, 0x5A, 0x01, 0x36, 0x5A, 0x02, 0x24, 0xC1, 0x03, 0x38, 0x38, -/* 00010990 */ 0x01, 0x34, 0x01, 0x01, 0x11, 0x38, 0xA6, 0x00, 0x24, 0x00, 0xFF, 0xFE, 0xAB, 0x01, 0x00, 0x16, -/* 000109A0 */ 0x24, 0x00, 0x00, 0x00, 0x03, 0x00, 0x1F, 0x00, 0x03, 0x00, 0x1F, 0x00, 0x20, 0x00, 0x33, 0x00, -/* 000109B0 */ 0x03, 0x00, 0x77, 0x00, 0x07, 0x00, 0xC0, 0x00, 0x20, 0x00, 0x44, 0x00, 0x13, 0x00, 0x7D, 0x00, -/* 000109C0 */ 0x13, 0x00, 0x94, 0x00, 0x20, 0x00, 0x83, 0x00, 0x2D, 0x00, 0x83, 0x00, 0x20, 0x00, 0x74, 0x00, -/* 000109D0 */ 0x13, 0x00, 0x6A, 0x00, 0x20, 0x00, 0x7A, 0x00, 0x41, 0x00, 0x00, 0x04, 0x3B, 0x00, 0x4C, 0x01, -/* 000109E0 */ 0x3B, 0x00, 0x5A, 0x01, 0x20, 0x00, 0x4B, 0x00, 0x2D, 0x00, 0x6E, 0x00, 0x17, 0x00, 0x66, 0x00, -/* 000109F0 */ 0x17, 0x00, 0x8B, 0x00, 0x19, 0x00, 0x72, 0x00, 0x00, 0xBF, 0x4C, 0x00, 0x00, 0x20, 0x88, 0x01, -/* 00010A00 */ 0x00, 0xFE, 0xA9, 0x09, 0x04, 0xA1, 0x41, 0xC1, 0x00, 0xFE, 0x65, 0x03, 0x94, 0xFF, 0xE1, 0xA5, -/* 00010A10 */ 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFF, 0xE1, 0xA5, 0x01, 0x00, 0x55, 0x55, -/* 00010A20 */ 0x41, 0x02, 0x02, 0x03, 0x05, 0x05, 0x02, 0x01, 0x02, 0x0D, 0xE0, 0x03, 0x00, 0x01, 0x34, 0x01, -/* 00010A30 */ 0x01, 0x0E, 0x03, 0xA6, 0x00, 0x24, 0x00, 0x0A, 0xFE, 0xCA, 0x03, 0x01, 0xFF, 0x0F, 0xA6, 0x01, -/* 00010A40 */ 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x26, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x43, -/* 00010A50 */ 0xA8, 0x01, 0x00, 0xFE, 0x98, 0x09, 0x04, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x6E, 0x03, 0x93, 0xFF, -/* 00010A60 */ 0x7C, 0xA3, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x06, 0x06, 0xFF, 0x7C, 0xA3, 0x01, 0x00, -/* 00010A70 */ 0xFE, 0x45, 0x02, 0xFE, 0x45, 0x02, 0x01, 0x0C, 0x07, 0x0F, 0x08, 0x3A, 0x37, 0x02, 0x05, 0x03, -/* 00010A80 */ 0x03, 0x03, 0x03, 0x01, 0x0E, 0x0F, 0x06, 0xFE, 0xF5, 0x03, 0x08, 0x06, 0xFE, 0xC7, 0x03, 0x05, -/* 00010A90 */ 0xFE, 0xC8, 0x03, 0x06, 0xFE, 0xC9, 0x03, 0xC2, 0x4F, 0x0C, 0x4F, 0x0D, 0x95, 0x10, 0x07, 0x08, -/* 00010AA0 */ 0x47, 0x0C, 0x10, 0x2C, 0x10, 0x0C, 0x15, 0x03, 0x00, 0x10, 0x02, 0x09, 0xA2, 0x00, 0x8C, 0x02, -/* 00010AB0 */ 0x24, 0x11, 0x6A, 0x10, 0x11, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x11, 0x5A, 0x01, 0x0C, 0x1F, -/* 00010AC0 */ 0x02, 0x10, 0x10, 0x47, 0x0D, 0x10, 0x8C, 0x02, 0x21, 0x10, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x03, -/* 00010AD0 */ 0x5A, 0x01, 0x0D, 0x1F, 0x02, 0x10, 0x10, 0x0F, 0x0D, 0x00, 0x10, 0x12, 0x08, 0x00, 0x0D, 0x09, -/* 00010AE0 */ 0x11, 0x03, 0x00, 0x0D, 0x0A, 0x09, 0x4D, 0x00, 0x8C, 0x02, 0x03, 0x11, 0x6A, 0x10, 0x11, 0x01, -/* 00010AF0 */ 0x07, 0x04, 0x00, 0x5A, 0x00, 0x11, 0x8C, 0x02, 0x0B, 0x12, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x03, -/* 00010B00 */ 0x5A, 0x01, 0x0C, 0x1F, 0x02, 0x12, 0x12, 0x5A, 0x01, 0x12, 0x8C, 0x02, 0x0B, 0x12, 0x07, 0x02, -/* 00010B10 */ 0x00, 0x5A, 0x00, 0x03, 0x5A, 0x01, 0x08, 0x1F, 0x02, 0x12, 0x12, 0x5A, 0x02, 0x12, 0x2F, 0x12, -/* 00010B20 */ 0x04, 0x09, 0x2F, 0x12, 0x12, 0x05, 0x2F, 0x12, 0x12, 0x0A, 0x2F, 0x12, 0x12, 0x06, 0x5A, 0x03, -/* 00010B30 */ 0x12, 0x1F, 0x04, 0xFF, 0x10, 0x8C, 0x02, 0x0F, 0x11, 0x6A, 0x10, 0x11, 0x02, 0x07, 0x02, 0x00, -/* 00010B40 */ 0x5A, 0x00, 0x11, 0x5A, 0x01, 0x0D, 0x1F, 0x02, 0x00, 0x10, 0x09, 0x0B, 0x00, 0x09, 0x06, 0x00, -/* 00010B50 */ 0x47, 0x00, 0x0B, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x38, 0x03, 0xFE, 0x8F, 0x02, -/* 00010B60 */ 0x23, 0xFF, 0xCE, 0xA3, 0x01, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x2D, 0x00, 0x0B, -/* 00010B70 */ 0x00, 0x33, 0x00, 0x18, 0x00, 0x41, 0x00, 0x22, 0x00, 0x65, 0x00, 0x4D, 0x00, 0x8D, 0x00, 0x1B, -/* 00010B80 */ 0x00, 0x40, 0x00, 0x08, 0x00, 0x1F, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, -/* 00010B90 */ 0xFE, 0x7E, 0x09, 0x04, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x64, 0x03, 0x92, 0xFF, 0x5F, 0xA0, 0x01, -/* 00010BA0 */ 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x06, 0x06, 0xFF, 0x5F, 0xA0, 0x01, 0x00, 0xFE, 0x17, 0x03, -/* 00010BB0 */ 0xFE, 0x17, 0x03, 0x01, 0x0B, 0x0A, 0x11, 0x0A, 0x51, 0x4B, 0x02, 0x06, 0x04, 0x04, 0x04, 0x04, -/* 00010BC0 */ 0x10, 0x06, 0xFE, 0xC2, 0x03, 0x06, 0xFE, 0xAD, 0x03, 0x06, 0xFE, 0xC3, 0x03, 0x08, 0x01, 0xFF, -/* 00010BD0 */ 0x05, 0xFE, 0xC4, 0x03, 0x05, 0xFE, 0xC6, 0x03, 0x05, 0xFE, 0xC5, 0x03, 0xFE, 0x10, 0x01, 0x4F, -/* 00010BE0 */ 0x0F, 0x95, 0x11, 0x0A, 0x0B, 0x47, 0x0F, 0x11, 0xA6, 0x11, 0x15, 0x03, 0x00, 0x0F, 0x11, 0x09, -/* 00010BF0 */ 0xF3, 0x00, 0x0C, 0x03, 0x00, 0x0C, 0x02, 0x09, 0x18, 0x00, 0x8C, 0x02, 0x24, 0x12, 0x6A, 0x11, -/* 00010C00 */ 0x12, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x12, 0x5A, 0x01, 0x0F, 0x1F, 0x02, 0x11, 0x11, 0x47, -/* 00010C10 */ 0x0F, 0x11, 0x0C, 0x03, 0x00, 0x0C, 0x03, 0x09, 0x18, 0x00, 0x8C, 0x02, 0x24, 0x12, 0x6A, 0x11, -/* 00010C20 */ 0x12, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x12, 0x5A, 0x01, 0x0F, 0x1F, 0x02, 0x11, 0x11, 0x47, -/* 00010C30 */ 0x0F, 0x11, 0x0C, 0x03, 0x00, 0x0C, 0x04, 0x09, 0x18, 0x00, 0x8C, 0x02, 0x24, 0x12, 0x6A, 0x11, -/* 00010C40 */ 0x12, 0x02, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x12, 0x5A, 0x01, 0x0F, 0x1F, 0x02, 0x11, 0x11, 0x47, -/* 00010C50 */ 0x0F, 0x11, 0xA6, 0x11, 0x15, 0x03, 0x00, 0x0D, 0x11, 0x09, 0x83, 0x00, 0x8C, 0x02, 0x06, 0x11, -/* 00010C60 */ 0x07, 0x04, 0x00, 0x5A, 0x00, 0x05, 0x8C, 0x02, 0x17, 0x12, 0x5A, 0x01, 0x12, 0x5A, 0x02, 0x0D, -/* 00010C70 */ 0x5A, 0x03, 0x0F, 0x1F, 0x04, 0x11, 0x11, 0x0C, 0x03, 0x00, 0x11, 0x06, 0x09, 0x60, 0x00, 0x8C, -/* 00010C80 */ 0x02, 0x03, 0x12, 0x6A, 0x11, 0x12, 0x03, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x12, 0x8C, 0x02, 0x0B, -/* 00010C90 */ 0x13, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x05, 0x5A, 0x01, 0x0F, 0x1F, 0x02, 0x13, 0x13, 0x5A, 0x01, -/* 00010CA0 */ 0x13, 0x8C, 0x02, 0x0B, 0x13, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x05, 0x5A, 0x01, 0x0B, 0x1F, 0x02, -/* 00010CB0 */ 0x13, 0x13, 0x5A, 0x02, 0x13, 0x8C, 0x02, 0x06, 0x13, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x05, 0x8C, -/* 00010CC0 */ 0x02, 0x19, 0x14, 0x5A, 0x01, 0x14, 0x5A, 0x02, 0x0D, 0x5A, 0x03, 0x08, 0x1F, 0x04, 0x13, 0x13, -/* 00010CD0 */ 0x2F, 0x13, 0x07, 0x13, 0x2F, 0x13, 0x13, 0x09, 0x5A, 0x03, 0x13, 0x1F, 0x04, 0xFF, 0x11, 0x47, -/* 00010CE0 */ 0x00, 0x0F, 0x09, 0x08, 0x00, 0x47, 0x00, 0x0E, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, -/* 00010CF0 */ 0x39, 0x03, 0xFE, 0x37, 0x03, 0xFE, 0x38, 0x03, 0xFE, 0x8F, 0x02, 0xFF, 0xA7, 0xA0, 0x01, 0x00, -/* 00010D00 */ 0x0D, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x28, 0x00, 0x0A, 0x00, 0x27, 0x00, 0x08, 0x00, 0x29, -/* 00010D10 */ 0x00, 0x18, 0x00, 0x45, 0x00, 0x08, 0x00, 0x28, 0x00, 0x18, 0x00, 0x3D, 0x00, 0x08, 0x00, 0x28, -/* 00010D20 */ 0x00, 0x18, 0x00, 0x3D, 0x00, 0x2D, 0x00, 0x6B, 0x00, 0x60, 0x00, 0xA6, 0x00, 0x06, 0x00, 0x21, -/* 00010D30 */ 0x00, 0x08, 0x00, 0x15, 0x00, 0x00, 0x3F, 0x5C, 0x00, 0xC1, 0x13, 0x88, 0x25, 0x00, 0xFE, 0x53, -/* 00010D40 */ 0x09, 0x14, 0xA0, 0x41, 0xD1, 0x00, 0x8B, 0xFF, 0x4E, 0x9B, 0x01, 0x00, 0x06, 0xFF, 0x00, 0x10, -/* 00010D50 */ 0x01, 0x00, 0x01, 0x01, 0xFF, 0x4E, 0x9B, 0x01, 0x00, 0xFE, 0xE0, 0x04, 0xFE, 0xE0, 0x04, 0x04, -/* 00010D60 */ 0x0A, 0x0B, 0x04, 0x17, 0x17, 0x02, 0x01, 0x06, 0x06, 0x06, 0x06, 0x01, 0x0A, 0x08, 0x06, 0xFE, -/* 00010D70 */ 0x36, 0x03, 0x06, 0xFE, 0x37, 0x03, 0x06, 0xFE, 0x38, 0x03, 0x06, 0xFE, 0x39, 0x03, 0x06, 0xFE, -/* 00010D80 */ 0x3A, 0x03, 0x06, 0xFE, 0xB4, 0x04, 0x07, 0x58, 0x8C, 0x02, 0x04, 0x0B, 0x07, 0x03, 0x00, 0x5A, -/* 00010D90 */ 0x00, 0x02, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0xD6, -/* 00010DA0 */ 0x00, 0x0D, 0x0C, 0x78, 0x0D, 0x0C, 0x00, 0xD6, 0x01, 0x0D, 0x0C, 0x78, 0x0D, 0x0C, 0x01, 0xD6, -/* 00010DB0 */ 0x02, 0x0D, 0x0C, 0x78, 0x0D, 0x0C, 0x02, 0xD6, 0x03, 0x0D, 0x0C, 0x78, 0x0D, 0x0C, 0x03, 0xD6, -/* 00010DC0 */ 0x04, 0x0D, 0x0C, 0x78, 0x0D, 0x0C, 0x04, 0xD6, 0x05, 0x0D, 0x0C, 0x78, 0x0D, 0x0C, 0x05, 0x5A, -/* 00010DD0 */ 0x01, 0x0C, 0x5A, 0x02, 0x09, 0x1F, 0x03, 0x00, 0x0B, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, -/* 00010DE0 */ 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, -/* 00010DF0 */ 0x03, 0x00, 0x00, 0x37, 0x03, 0x00, 0x00, 0x38, 0x03, 0x00, 0x00, 0x39, 0x03, 0x00, 0x00, 0x3A, -/* 00010E00 */ 0x03, 0x00, 0x00, 0xB4, 0x04, 0x00, 0x00, 0xFE, 0x36, 0x03, 0xFE, 0x37, 0x03, 0xFE, 0x38, 0x03, -/* 00010E10 */ 0xFE, 0x39, 0x03, 0xFE, 0x3A, 0x03, 0xFE, 0xB4, 0x04, 0xFF, 0x64, 0x9B, 0x01, 0x00, 0x02, 0x00, -/* 00010E20 */ 0x00, 0x00, 0x00, 0x56, 0x00, 0xC9, 0x04, 0x00, 0x23, 0x11, 0x01, 0x00, 0xAF, 0x10, 0x01, 0x00, -/* 00010E30 */ 0x3B, 0x10, 0x01, 0x00, 0xC7, 0x0F, 0x01, 0x00, 0xE2, 0x0E, 0x01, 0x00, 0x40, 0x0E, 0x01, 0x00, -/* 00010E40 */ 0xBF, 0x7C, 0x00, 0x03, 0x00, 0x88, 0x0B, 0x00, 0xFE, 0x71, 0x09, 0x19, 0xA2, 0x41, 0xC1, 0x00, -/* 00010E50 */ 0xFE, 0xB4, 0x04, 0x91, 0xFF, 0x00, 0x00, 0x00, 0x02, 0xFF, 0xE2, 0x9E, 0x01, 0x00, 0xFF, 0x00, -/* 00010E60 */ 0x10, 0x01, 0x00, 0x03, 0x03, 0xFF, 0xE2, 0x9E, 0x01, 0x00, 0xFE, 0x35, 0x01, 0xFE, 0x35, 0x01, -/* 00010E70 */ 0x01, 0x05, 0x04, 0x07, 0x05, 0x17, 0x15, 0x14, 0x02, 0x03, 0x01, 0x06, 0x00, 0x42, 0x08, 0x0B, -/* 00010E80 */ 0x46, 0xEA, 0x00, 0x0E, 0x3C, 0x00, 0x04, 0x8C, 0x02, 0x06, 0x07, 0x07, 0x04, 0x00, 0x5A, 0x00, -/* 00010E90 */ 0x02, 0x8C, 0x02, 0x13, 0x08, 0x5A, 0x01, 0x08, 0x5A, 0x02, 0x04, 0x5A, 0x03, 0x05, 0x1F, 0x04, -/* 00010EA0 */ 0x07, 0x07, 0x0E, 0x06, 0x00, 0x07, 0x47, 0x00, 0x03, 0x09, 0x19, 0x00, 0x8C, 0x02, 0x10, 0x07, -/* 00010EB0 */ 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x04, 0x1F, 0x02, 0x07, 0x07, 0x47, 0x04, 0x07, -/* 00010EC0 */ 0x09, 0xBE, 0xFF, 0xA6, 0x00, 0x24, 0x00, 0xFF, 0x37, 0x9F, 0x01, 0x00, 0x05, 0x02, 0x00, 0x00, -/* 00010ED0 */ 0x00, 0x04, 0x00, 0x19, 0x00, 0x1F, 0x00, 0x54, 0x00, 0x06, 0x00, 0x37, 0x00, 0x19, 0x00, 0x3B, -/* 00010EE0 */ 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x03, 0x00, 0xFE, 0x68, 0x09, 0x16, 0xA2, 0x41, -/* 00010EF0 */ 0xC1, 0x00, 0xFE, 0x3A, 0x03, 0x90, 0xFF, 0x00, 0x00, 0x00, 0x02, 0xFF, 0xCB, 0x9D, 0x01, 0x00, -/* 00010F00 */ 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0xCB, 0x9D, 0x01, 0x00, 0xFB, 0xFB, 0x01, 0x09, -/* 00010F10 */ 0x06, 0x0A, 0x07, 0x28, 0x23, 0x02, 0x04, 0x02, 0x02, 0x02, 0x02, 0x09, 0x08, 0x01, 0x00, 0x01, -/* 00010F20 */ 0x02, 0x01, 0x20, 0x82, 0x8C, 0x02, 0x0A, 0x0A, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, -/* 00010F30 */ 0x06, 0x1F, 0x02, 0x0A, 0x0A, 0x47, 0x07, 0x0A, 0x47, 0x08, 0x03, 0x8C, 0x02, 0x21, 0x0A, 0x07, -/* 00010F40 */ 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x07, 0x1F, 0x02, 0x0A, 0x0A, 0x0F, 0x4C, 0x00, 0x0A, -/* 00010F50 */ 0x8C, 0x02, 0x20, 0x0A, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x07, 0x1F, 0x02, 0x0A, -/* 00010F60 */ 0x0A, 0x0E, 0x37, 0x00, 0x0A, 0x8C, 0x02, 0x0F, 0x0B, 0x6A, 0x0A, 0x0B, 0x00, 0x07, 0x02, 0x00, -/* 00010F70 */ 0x5A, 0x00, 0x0B, 0x47, 0x0C, 0x07, 0x8C, 0x02, 0x0F, 0x0E, 0x6A, 0x0D, 0x0E, 0x01, 0x07, 0x03, -/* 00010F80 */ 0x00, 0x5A, 0x00, 0x0E, 0x5A, 0x01, 0x04, 0x5A, 0x02, 0x05, 0x1F, 0x03, 0x0D, 0x0D, 0x33, 0x0C, -/* 00010F90 */ 0x0C, 0x0D, 0x5A, 0x01, 0x0C, 0x1F, 0x02, 0x0A, 0x0A, 0x47, 0x08, 0x0A, 0x47, 0x00, 0x08, 0x09, -/* 00010FA0 */ 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x1B, 0x29, 0xFF, 0xEA, 0x9D, 0x01, 0x00, 0x06, 0x00, 0x00, -/* 00010FB0 */ 0x00, 0x00, 0x14, 0x00, 0x29, 0x00, 0x03, 0x00, 0x19, 0x00, 0x2A, 0x00, 0x38, 0x00, 0x37, 0x00, -/* 00010FC0 */ 0x49, 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0x01, 0x00, 0x88, 0x03, 0x00, 0xFE, -/* 00010FD0 */ 0x64, 0x09, 0x1E, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x39, 0x03, 0x8F, 0xFF, 0x00, 0x00, 0x00, 0x02, -/* 00010FE0 */ 0xFF, 0x55, 0x9D, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0x55, 0x9D, 0x01, -/* 00010FF0 */ 0x00, 0x5D, 0x5D, 0x01, 0x03, 0x03, 0x05, 0x03, 0x10, 0x0E, 0x02, 0x01, 0x04, 0x08, 0x2D, 0xA6, -/* 00011000 */ 0x05, 0x15, 0x03, 0x00, 0x03, 0x05, 0x09, 0x17, 0x00, 0x8C, 0x02, 0x07, 0x05, 0x07, 0x02, 0x00, -/* 00011010 */ 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x03, 0x1F, 0x02, 0x05, 0x05, 0x47, 0x00, 0x05, 0x09, 0x05, 0x00, -/* 00011020 */ 0xA6, 0x05, 0x47, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFF, 0x74, 0x9D, 0x01, -/* 00011030 */ 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x3D, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0x01, 0x00, -/* 00011040 */ 0x88, 0x03, 0x00, 0xFE, 0x60, 0x09, 0x16, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x38, 0x03, 0x8E, 0xFF, -/* 00011050 */ 0x00, 0x00, 0x00, 0x02, 0xFF, 0xDE, 0x9C, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, -/* 00011060 */ 0xFF, 0xDE, 0x9C, 0x01, 0x00, 0x56, 0x56, 0x01, 0x03, 0x03, 0x05, 0x03, 0x10, 0x0E, 0x02, 0x01, -/* 00011070 */ 0x04, 0x08, 0x2D, 0xA6, 0x05, 0x14, 0x03, 0x00, 0x03, 0x05, 0x09, 0x08, 0x00, 0xA7, 0x05, 0x47, -/* 00011080 */ 0x00, 0x05, 0x09, 0x14, 0x00, 0x8C, 0x02, 0x0A, 0x05, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5A, -/* 00011090 */ 0x01, 0x03, 0x1F, 0x02, 0x05, 0x05, 0x47, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, -/* 000110A0 */ 0xFF, 0xFD, 0x9C, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x36, 0x00, 0x00, 0xBF, -/* 000110B0 */ 0x5C, 0x00, 0x01, 0x00, 0x88, 0x03, 0x00, 0xFE, 0x5C, 0x09, 0x16, 0xA2, 0x41, 0xC1, 0x00, 0xFE, -/* 000110C0 */ 0x37, 0x03, 0x8D, 0xFF, 0x00, 0x00, 0x00, 0x02, 0xFF, 0x69, 0x9C, 0x01, 0x00, 0xFF, 0x00, 0x10, -/* 000110D0 */ 0x01, 0x00, 0x02, 0x02, 0xFF, 0x69, 0x9C, 0x01, 0x00, 0x5C, 0x5C, 0x01, 0x03, 0x03, 0x05, 0x03, -/* 000110E0 */ 0x10, 0x0E, 0x02, 0x01, 0x04, 0x08, 0x2D, 0xA6, 0x05, 0x15, 0x03, 0x00, 0x03, 0x05, 0x09, 0x17, -/* 000110F0 */ 0x00, 0x8C, 0x02, 0x0B, 0x05, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x03, 0x1F, 0x02, -/* 00011100 */ 0x05, 0x05, 0x47, 0x00, 0x05, 0x09, 0x05, 0x00, 0xA6, 0x05, 0x47, 0x00, 0x05, 0x09, 0x02, 0x00, -/* 00011110 */ 0xA6, 0x00, 0x24, 0x00, 0xFF, 0x88, 0x9C, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x00, -/* 00011120 */ 0x3C, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x03, 0x00, 0xFE, 0x55, 0x09, 0x16, 0xA2, -/* 00011130 */ 0x41, 0xC1, 0x00, 0xFE, 0x36, 0x03, 0x8C, 0xFF, 0x00, 0x00, 0x00, 0x02, 0xFF, 0x90, 0x9B, 0x01, -/* 00011140 */ 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0x90, 0x9B, 0x01, 0x00, 0xC0, 0xC0, 0x01, -/* 00011150 */ 0x04, 0x04, 0x06, 0x03, 0x17, 0x15, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x05, 0x07, 0x08, 0x47, -/* 00011160 */ 0x14, 0x03, 0x00, 0x04, 0x02, 0x09, 0x12, 0x00, 0x8C, 0x02, 0x03, 0x07, 0x6A, 0x06, 0x07, 0x00, -/* 00011170 */ 0x07, 0x01, 0x00, 0x5A, 0x00, 0x07, 0x1F, 0x01, 0xFF, 0x06, 0xA6, 0x06, 0x15, 0x03, 0x00, 0x04, -/* 00011180 */ 0x06, 0x09, 0x17, 0x00, 0x8C, 0x02, 0x08, 0x06, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x03, 0x5A, 0x01, -/* 00011190 */ 0x04, 0x1F, 0x02, 0x06, 0x06, 0x47, 0x00, 0x06, 0x09, 0x05, 0x00, 0xA6, 0x06, 0x47, 0x00, 0x06, -/* 000111A0 */ 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x89, 0x02, 0xFF, 0xAF, 0x9B, 0x01, 0x00, 0x04, -/* 000111B0 */ 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x26, 0x00, 0x12, 0x00, 0x3E, 0x00, 0x2B, 0x00, 0x3C, 0x00, -/* 000111C0 */ 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x63, 0xA8, 0x01, 0x00, 0xFE, 0x38, 0x09, 0x20, 0xA0, 0x41, 0xC1, -/* 000111D0 */ 0x00, 0xFE, 0xEC, 0x02, 0x8A, 0xFF, 0xC7, 0x97, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, -/* 000111E0 */ 0x01, 0xFF, 0xC7, 0x97, 0x01, 0x00, 0xFE, 0x70, 0x03, 0xFE, 0x70, 0x03, 0x01, 0x07, 0x05, 0x08, -/* 000111F0 */ 0x06, 0x3E, 0x3C, 0x02, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x07, 0x08, 0x08, 0x01, 0x00, -/* 00011200 */ 0x01, 0x01, 0xCB, 0x4F, 0x05, 0x4F, 0x06, 0x8C, 0x01, 0x0D, 0x09, 0x4B, 0x09, 0x0E, 0x09, 0x00, -/* 00011210 */ 0x09, 0x8C, 0x01, 0x0D, 0x00, 0x4B, 0x00, 0x09, 0xB2, 0x00, 0x8C, 0x02, 0x33, 0x09, 0x4B, 0x09, -/* 00011220 */ 0x0E, 0x68, 0x00, 0x09, 0x8C, 0x01, 0x0F, 0x09, 0x4B, 0x09, 0x0F, 0x10, 0x00, 0x09, 0x8C, 0x01, -/* 00011230 */ 0x05, 0x09, 0x4B, 0x09, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x02, 0x1F, 0x01, 0xFF, 0x09, 0x8C, 0x01, -/* 00011240 */ 0x0A, 0x09, 0x4B, 0x09, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x02, 0x1F, 0x01, 0x09, 0x09, 0x47, 0x05, -/* 00011250 */ 0x09, 0x8C, 0x02, 0x03, 0x0A, 0x6A, 0x09, 0x0A, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0A, 0x5A, -/* 00011260 */ 0x01, 0x05, 0x8C, 0x01, 0x0F, 0x0B, 0x4B, 0x0B, 0x5A, 0x02, 0x0B, 0x1F, 0x03, 0x09, 0x09, 0x47, -/* 00011270 */ 0x06, 0x09, 0x0E, 0x0D, 0x00, 0x06, 0x95, 0x09, 0x06, 0x03, 0x01, 0x34, 0x01, 0x01, 0x0D, 0x09, -/* 00011280 */ 0x09, 0x06, 0x00, 0x01, 0x34, 0x01, 0x01, 0x0D, 0x05, 0x09, 0x35, 0x00, 0x8C, 0x02, 0x03, 0x0A, -/* 00011290 */ 0x6A, 0x09, 0x0A, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0A, 0x8C, 0x01, 0x0A, 0x0B, 0x4B, 0x0B, -/* 000112A0 */ 0x07, 0x01, 0x00, 0x5A, 0x00, 0x02, 0x1F, 0x01, 0x0B, 0x0B, 0x5A, 0x01, 0x0B, 0xE0, 0x0B, 0x00, -/* 000112B0 */ 0x5A, 0x02, 0x0B, 0x1F, 0x03, 0x09, 0x09, 0x95, 0x09, 0x09, 0x04, 0x01, 0x34, 0x01, 0x01, 0x0D, -/* 000112C0 */ 0x09, 0x8C, 0x01, 0x0D, 0x00, 0x4B, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x83, -/* 000112D0 */ 0x02, 0x09, 0xFE, 0xB3, 0x04, 0x00, 0xFF, 0xDD, 0x97, 0x01, 0x00, 0x0D, 0x04, 0x00, 0x00, 0x00, -/* 000112E0 */ 0x0A, 0x00, 0x2B, 0x00, 0x09, 0x00, 0x33, 0x00, 0x0A, 0x00, 0x26, 0x00, 0x0A, 0x00, 0x29, 0x00, -/* 000112F0 */ 0x10, 0x00, 0x33, 0x00, 0x13, 0x00, 0x2C, 0x00, 0x21, 0x00, 0x4D, 0x00, 0x04, 0x00, 0x5B, 0x00, -/* 00011300 */ 0x0D, 0x00, 0x49, 0x00, 0x09, 0x00, 0xCB, 0x00, 0x35, 0x00, 0x6D, 0x00, 0x0B, 0x00, 0x24, 0x00, -/* 00011310 */ 0x00, 0xBF, 0x7C, 0x00, 0xC3, 0x03, 0x88, 0x09, 0x00, 0xFE, 0x26, 0x09, 0x19, 0xA2, 0x41, 0xC1, -/* 00011320 */ 0x00, 0xFE, 0xEB, 0x02, 0x89, 0xFF, 0xA4, 0x94, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x05, -/* 00011330 */ 0x05, 0xFF, 0xA4, 0x94, 0x01, 0x00, 0xFE, 0x91, 0x02, 0xFE, 0x91, 0x02, 0x01, 0x0C, 0x06, 0x10, -/* 00011340 */ 0x06, 0x3E, 0x33, 0x15, 0x02, 0x04, 0x01, 0x01, 0x01, 0x01, 0x01, 0x0F, 0x5A, 0x9F, 0x05, 0xFE, -/* 00011350 */ 0xBC, 0x03, 0x08, 0x01, 0x00, 0x01, 0x01, 0xC2, 0xA6, 0x0D, 0xA6, 0x0E, 0x14, 0x03, 0x00, 0x07, -/* 00011360 */ 0x02, 0x09, 0x0A, 0x00, 0x8C, 0x02, 0x27, 0x11, 0x47, 0x10, 0x11, 0x09, 0x07, 0x00, 0x8C, 0x02, -/* 00011370 */ 0x26, 0x11, 0x47, 0x10, 0x11, 0x47, 0x0A, 0x10, 0x8C, 0x02, 0x05, 0x10, 0x07, 0x02, 0x00, 0x5A, -/* 00011380 */ 0x00, 0x03, 0x5A, 0x01, 0x06, 0x1F, 0x02, 0x10, 0x10, 0x47, 0x0B, 0x10, 0x07, 0x01, 0x00, 0x5A, -/* 00011390 */ 0x00, 0x03, 0x1F, 0x01, 0x10, 0x09, 0x47, 0x0C, 0x10, 0xA6, 0x10, 0x15, 0x03, 0x00, 0x0B, 0x10, -/* 000113A0 */ 0x09, 0x06, 0x00, 0x47, 0x10, 0x0B, 0x09, 0x03, 0x00, 0x47, 0x10, 0x04, 0x47, 0x0B, 0x10, 0x47, -/* 000113B0 */ 0x0D, 0x04, 0xEA, 0x00, 0x12, 0x03, 0x00, 0x0D, 0x0B, 0x09, 0x3B, 0x00, 0x8C, 0x02, 0x29, 0x10, -/* 000113C0 */ 0x07, 0x05, 0x00, 0x5A, 0x00, 0x03, 0x95, 0x11, 0x06, 0x0D, 0x5A, 0x01, 0x11, 0x5A, 0x02, 0x0A, -/* 000113D0 */ 0x5A, 0x03, 0x08, 0x5A, 0x04, 0x0C, 0x1F, 0x05, 0x10, 0x10, 0x47, 0x0E, 0x10, 0x5F, 0x10, 0x0E, -/* 000113E0 */ 0x00, 0xA6, 0x11, 0x15, 0x03, 0x00, 0x10, 0x11, 0x09, 0x06, 0x00, 0x47, 0x00, 0x0E, 0x09, 0x27, -/* 000113F0 */ 0x00, 0x28, 0x0D, 0x0D, 0x09, 0xBB, 0xFF, 0x8C, 0x02, 0x29, 0x10, 0x07, 0x05, 0x00, 0x5A, 0x00, -/* 00011400 */ 0x03, 0x5A, 0x01, 0x0C, 0x5A, 0x02, 0x0A, 0xA6, 0x11, 0x5A, 0x03, 0x11, 0x5A, 0x04, 0x0C, 0x1F, -/* 00011410 */ 0x05, 0x00, 0x10, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xF7, 0x01, 0xFF, 0xF3, 0x94, -/* 00011420 */ 0x01, 0x00, 0x0C, 0x04, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x58, 0x00, 0x14, 0x00, 0x34, 0x00, 0x0D, -/* 00011430 */ 0x00, 0x32, 0x00, 0x16, 0x00, 0x39, 0x00, 0x05, 0x00, 0x0B, 0x00, 0x08, 0x00, 0x1F, 0x00, 0x21, -/* 00011440 */ 0x00, 0x69, 0x00, 0x0E, 0x00, 0x35, 0x00, 0x06, 0x00, 0x4F, 0xFF, 0x06, 0x00, 0xE2, 0x00, 0x21, -/* 00011450 */ 0x00, 0x51, 0x00, 0x00, 0x3F, 0x5D, 0x00, 0xC1, 0x73, 0xAD, 0x25, 0x00, 0xFE, 0xEE, 0x08, 0x1E, -/* 00011460 */ 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xEA, 0x02, 0x86, 0xFF, 0xF8, 0x8A, 0x01, 0x00, 0x02, 0xFF, 0x00, -/* 00011470 */ 0x10, 0x01, 0x00, 0x05, 0x05, 0xFF, 0xF8, 0x8A, 0x01, 0x00, 0xFE, 0x91, 0x09, 0xFE, 0x91, 0x09, -/* 00011480 */ 0x03, 0xFE, 0xAC, 0x04, 0xFE, 0xF7, 0x01, 0xFE, 0xAD, 0x04, 0x0E, 0x0B, 0x15, 0x05, 0x6D, 0x65, -/* 00011490 */ 0x02, 0x0B, 0x05, 0x05, 0x05, 0x05, 0x01, 0x01, 0x01, 0x12, 0x13, 0x14, 0x15, 0x07, 0x08, 0x01, -/* 000114A0 */ 0x01, 0x01, 0x00, 0x06, 0xFE, 0xAF, 0x03, 0x05, 0xFE, 0xAE, 0x04, 0x06, 0xFE, 0xF7, 0x03, 0x06, -/* 000114B0 */ 0xFE, 0xAF, 0x04, 0x06, 0xFE, 0xB0, 0x04, 0xFE, 0x70, 0x01, 0x94, 0x03, 0x0B, 0x94, 0x04, 0x0D, -/* 000114C0 */ 0x4F, 0x11, 0x8C, 0x02, 0x03, 0x17, 0x6A, 0x16, 0x17, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x17, -/* 000114D0 */ 0x90, 0x03, 0x18, 0x5A, 0x01, 0x18, 0x1F, 0x02, 0x16, 0x16, 0x47, 0x0F, 0x16, 0x14, 0x03, 0x00, -/* 000114E0 */ 0x0F, 0x02, 0x09, 0x17, 0x00, 0x8C, 0x02, 0x28, 0x16, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x03, 0x90, -/* 000114F0 */ 0x03, 0x17, 0x5A, 0x01, 0x17, 0x1F, 0x02, 0x16, 0x16, 0x47, 0x0F, 0x16, 0x0E, 0x1E, 0x00, 0x0F, -/* 00011500 */ 0x8C, 0x02, 0x06, 0x16, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x8C, 0x02, 0x16, 0x17, 0x5A, 0x01, -/* 00011510 */ 0x17, 0x5A, 0x02, 0x0F, 0xD3, 0x00, 0x17, 0x5A, 0x03, 0x17, 0x1F, 0x04, 0xFF, 0x16, 0x8C, 0x02, -/* 00011520 */ 0x03, 0x17, 0x6A, 0x16, 0x17, 0x01, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x17, 0x90, 0x03, 0x18, 0x5A, -/* 00011530 */ 0x01, 0x18, 0xE0, 0x18, 0x00, 0x5A, 0x02, 0x18, 0x1F, 0x03, 0x16, 0x16, 0x95, 0x16, 0x16, 0x04, -/* 00011540 */ 0x94, 0x03, 0x16, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x03, 0x90, 0x03, 0x16, 0x5A, 0x01, 0x16, 0x5A, -/* 00011550 */ 0x02, 0x0E, 0x1F, 0x03, 0x16, 0x0C, 0x47, 0x10, 0x16, 0x90, 0x04, 0x16, 0xA6, 0x17, 0x15, 0x03, -/* 00011560 */ 0x00, 0x16, 0x17, 0x09, 0x2A, 0x00, 0xCC, 0x16, 0x00, 0x94, 0x02, 0x16, 0x8C, 0x02, 0x06, 0x16, -/* 00011570 */ 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x8C, 0x02, 0x16, 0x17, 0x5A, 0x01, 0x17, 0x5A, 0x02, 0x0F, -/* 00011580 */ 0xD3, 0x01, 0x17, 0x5A, 0x03, 0x17, 0x1F, 0x04, 0xFF, 0x16, 0x90, 0x02, 0x16, 0x47, 0x0F, 0x16, -/* 00011590 */ 0x47, 0x11, 0x10, 0x0E, 0x5A, 0x00, 0x10, 0x0E, 0x2E, 0x00, 0x0F, 0x8C, 0x02, 0x05, 0x16, 0x07, -/* 000115A0 */ 0x02, 0x00, 0x5A, 0x00, 0x03, 0x5A, 0x01, 0x0F, 0x1F, 0x02, 0x16, 0x16, 0x11, 0x03, 0x00, 0x16, -/* 000115B0 */ 0x05, 0x09, 0x15, 0x00, 0x8C, 0x02, 0x33, 0x16, 0x4B, 0x16, 0x0E, 0x07, 0x00, 0x16, 0x2F, 0x10, -/* 000115C0 */ 0x10, 0x06, 0x09, 0x04, 0x00, 0x2F, 0x10, 0x10, 0x07, 0x47, 0x16, 0x10, 0x8C, 0x02, 0x06, 0x17, -/* 000115D0 */ 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x8C, 0x02, 0x19, 0x18, 0x5A, 0x01, 0x18, 0x5A, 0x02, 0x0F, -/* 000115E0 */ 0x5A, 0x03, 0x06, 0x1F, 0x04, 0x17, 0x17, 0x2F, 0x16, 0x16, 0x17, 0x47, 0x10, 0x16, 0x09, 0x05, -/* 000115F0 */ 0x00, 0xA6, 0x16, 0x47, 0x10, 0x16, 0x8C, 0x02, 0x04, 0x16, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x03, -/* 00011600 */ 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x78, 0x10, 0x17, -/* 00011610 */ 0x02, 0x78, 0x0F, 0x17, 0x03, 0x78, 0x11, 0x17, 0x04, 0x5A, 0x01, 0x17, 0x5A, 0x02, 0x02, 0x1F, -/* 00011620 */ 0x03, 0x00, 0x16, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x01, 0x14, 0x00, 0x00, 0x00, 0x00, -/* 00011630 */ 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0x01, 0x00, 0x00, 0xFB, 0x01, 0x00, -/* 00011640 */ 0x00, 0xF9, 0x01, 0x00, 0x00, 0xFE, 0xE0, 0x01, 0xFE, 0x83, 0x02, 0xFE, 0xF7, 0x01, 0xFE, 0xFB, -/* 00011650 */ 0x01, 0xFE, 0xF9, 0x01, 0x0D, 0xFE, 0xB1, 0x04, 0x00, 0xFF, 0x3C, 0x8B, 0x01, 0x00, 0x15, 0x08, -/* 00011660 */ 0x00, 0x00, 0x00, 0x1B, 0x00, 0x36, 0x00, 0x08, 0x00, 0x81, 0x00, 0x17, 0x00, 0x3A, 0x00, 0x04, -/* 00011670 */ 0x00, 0x1B, 0x00, 0x1E, 0x00, 0x53, 0x02, 0x25, 0x00, 0x49, 0x00, 0x16, 0x00, 0x37, 0x00, 0x0D, -/* 00011680 */ 0x00, 0x50, 0x00, 0x06, 0x00, 0x1F, 0x00, 0x1E, 0x00, 0xB8, 0x01, 0x06, 0x00, 0xF9, 0x00, 0x03, -/* 00011690 */ 0x00, 0x29, 0x00, 0x04, 0x00, 0x1C, 0x00, 0x1D, 0x00, 0x3E, 0x00, 0x0A, 0x00, 0x2E, 0x00, 0x07, -/* 000116A0 */ 0x00, 0x3E, 0x00, 0x04, 0x00, 0x40, 0x00, 0x28, 0x00, 0x5C, 0x00, 0x05, 0x00, 0x29, 0x00, 0x32, -/* 000116B0 */ 0x00, 0x99, 0x00, 0x00, 0x8B, 0x17, 0x01, 0x00, 0xBC, 0x16, 0x01, 0x00, 0xBF, 0x5C, 0x00, 0xC1, -/* 000116C0 */ 0x23, 0x88, 0x01, 0x00, 0xFE, 0x03, 0x09, 0x3D, 0xA2, 0x41, 0xD1, 0x00, 0x88, 0xFF, 0xBB, 0x8F, -/* 000116D0 */ 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0xBB, 0x8F, 0x01, 0x00, 0xFE, 0x77, -/* 000116E0 */ 0x01, 0xFE, 0x77, 0x01, 0x41, 0x07, 0x05, 0x09, 0x05, 0x22, 0x20, 0x03, 0x06, 0x01, 0x01, 0x01, -/* 000116F0 */ 0x01, 0x01, 0x08, 0x01, 0x01, 0x08, 0x01, 0xFF, 0x6F, 0x8C, 0x03, 0x03, 0x0A, 0x6A, 0x09, 0x0A, -/* 00011700 */ 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0A, 0x5A, 0x01, 0x05, 0xE0, 0x0B, 0x00, 0x5A, 0x02, 0x0B, -/* 00011710 */ 0x1F, 0x03, 0x09, 0x09, 0x47, 0x06, 0x09, 0x95, 0x09, 0x06, 0x02, 0x47, 0x07, 0x09, 0x8C, 0x03, -/* 00011720 */ 0x06, 0x09, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x8C, 0x03, 0x17, 0x0A, 0x5A, 0x01, 0x0A, 0x8C, -/* 00011730 */ 0x01, 0x04, 0x0A, 0x5A, 0x02, 0x0A, 0x5A, 0x03, 0x07, 0x1F, 0x04, 0x09, 0x09, 0x15, 0x03, 0x00, -/* 00011740 */ 0x09, 0x04, 0x09, 0x1F, 0x00, 0x8C, 0x03, 0x06, 0x09, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x8C, -/* 00011750 */ 0x03, 0x18, 0x0A, 0x5A, 0x01, 0x0A, 0x8C, 0x01, 0x02, 0x0A, 0x5A, 0x02, 0x0A, 0x5A, 0x03, 0x05, -/* 00011760 */ 0x1F, 0x04, 0xFF, 0x09, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x83, 0x02, 0x0E, 0xFE, 0xB2, 0x04, 0x00, -/* 00011770 */ 0xFF, 0xDF, 0x8F, 0x01, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x7A, 0x00, 0x07, 0x00, -/* 00011780 */ 0x24, 0x00, 0x27, 0x00, 0x5F, 0x00, 0x21, 0x00, 0x55, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0x01, 0x00, -/* 00011790 */ 0x88, 0x01, 0x00, 0xFE, 0xF6, 0x08, 0x3C, 0xA2, 0x41, 0xD1, 0x00, 0x87, 0xFF, 0x78, 0x8C, 0x01, -/* 000117A0 */ 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0x78, 0x8C, 0x01, 0x00, 0x7D, 0x7D, 0x41, -/* 000117B0 */ 0x04, 0x05, 0x07, 0x06, 0x0F, 0x0F, 0x03, 0x03, 0x06, 0x06, 0xFE, 0xAF, 0x03, 0x06, 0xFE, 0x5B, -/* 000117C0 */ 0x03, 0x08, 0x2E, 0x8C, 0x03, 0x06, 0x07, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x04, 0x8C, 0x03, 0x1D, -/* 000117D0 */ 0x08, 0x5A, 0x01, 0x08, 0x8C, 0x01, 0x03, 0x08, 0x5A, 0x02, 0x08, 0x2F, 0x08, 0x02, 0x05, 0x5A, -/* 000117E0 */ 0x03, 0x08, 0x5A, 0x04, 0x03, 0x1F, 0x05, 0x07, 0x07, 0x92, 0x01, 0x03, 0x07, 0xA6, 0x00, 0x24, -/* 000117F0 */ 0x00, 0xFF, 0x9C, 0x8C, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x2C, 0x00, 0x58, 0x00, 0x00, -/* 00011800 */ 0x3F, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x05, 0x00, 0xFE, 0xD5, 0x08, 0x1E, 0xA2, 0x41, 0xC1, 0x00, -/* 00011810 */ 0xFE, 0xE9, 0x02, 0x84, 0xFF, 0xC7, 0x86, 0x01, 0x00, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, -/* 00011820 */ 0x02, 0xFF, 0xC7, 0x86, 0x01, 0x00, 0xFE, 0x11, 0x04, 0xFE, 0x11, 0x04, 0x07, 0x05, 0x09, 0x04, -/* 00011830 */ 0x29, 0x26, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x08, 0x08, 0x01, 0x00, 0x06, 0xFE, 0xAF, 0x03, -/* 00011840 */ 0x7E, 0x4F, 0x06, 0x4F, 0x07, 0x8C, 0x01, 0x10, 0x09, 0x4B, 0x09, 0x0F, 0x10, 0x00, 0x09, 0x8C, -/* 00011850 */ 0x01, 0x05, 0x09, 0x4B, 0x09, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x02, 0x1F, 0x01, 0xFF, 0x09, 0x8C, -/* 00011860 */ 0x02, 0x03, 0x0A, 0x6A, 0x09, 0x0A, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0A, 0x5A, 0x01, 0x05, -/* 00011870 */ 0x8C, 0x01, 0x10, 0x0B, 0x4B, 0x0B, 0x5A, 0x02, 0x0B, 0x1F, 0x03, 0x09, 0x09, 0x47, 0x06, 0x09, -/* 00011880 */ 0x0F, 0x05, 0x00, 0x06, 0xA6, 0x00, 0x09, 0x34, 0x00, 0x95, 0x0B, 0x06, 0x03, 0x6A, 0x0A, 0x0B, -/* 00011890 */ 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0B, 0x5A, 0x01, 0x04, 0x1F, 0x02, 0x0A, 0x0A, 0x6A, 0x09, -/* 000118A0 */ 0x0A, 0x02, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0A, 0xD3, 0x00, 0x0B, 0x5A, 0x01, 0x0B, 0x1F, 0x02, -/* 000118B0 */ 0x09, 0x09, 0x47, 0x07, 0x09, 0x47, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, -/* 000118C0 */ 0x83, 0x02, 0xFE, 0x45, 0x01, 0x7E, 0xFF, 0xE3, 0x86, 0x01, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, -/* 000118D0 */ 0x0A, 0x00, 0x24, 0x00, 0x10, 0x00, 0x2B, 0x00, 0x21, 0x00, 0x4B, 0x00, 0x04, 0x00, 0x1A, 0x00, -/* 000118E0 */ 0x05, 0x00, 0x5C, 0x02, 0x2C, 0x00, 0xCD, 0x00, 0x08, 0x00, 0x17, 0x00, 0x00, 0xF1, 0x18, 0x01, -/* 000118F0 */ 0x00, 0xBF, 0x4C, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0xFE, 0xE8, 0x08, 0x36, 0xA2, 0x41, 0xD0, -/* 00011900 */ 0x00, 0x85, 0xFE, 0x01, 0x10, 0xFF, 0x21, 0x8A, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, -/* 00011910 */ 0x02, 0xFF, 0x21, 0x8A, 0x01, 0x00, 0x0A, 0x0A, 0x01, 0x02, 0x02, 0x03, 0x0A, 0x0A, 0x02, 0x17, -/* 00011920 */ 0xAA, 0x03, 0x0F, 0x02, 0x00, 0x02, 0xA9, 0x03, 0xAA, 0x00, 0x0F, 0x02, 0x00, 0x03, 0xA9, 0x00, -/* 00011930 */ 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFF, 0x28, 0x8A, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, -/* 00011940 */ 0x00, 0x15, 0x00, 0x03, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x43, 0xA8, 0x01, 0x00, 0xFE, 0xBE, -/* 00011950 */ 0x08, 0x1E, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xAB, 0x04, 0x83, 0xFF, 0x34, 0x82, 0x01, 0x00, 0xFF, -/* 00011960 */ 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0x34, 0x82, 0x01, 0x00, 0xFE, 0x73, 0x04, 0xFE, 0x73, -/* 00011970 */ 0x04, 0x01, 0x09, 0x09, 0x0D, 0x04, 0x56, 0x4A, 0x02, 0x04, 0x05, 0x05, 0x05, 0x05, 0x01, 0x0C, -/* 00011980 */ 0x0D, 0x07, 0x08, 0x01, 0x01, 0x01, 0x02, 0x06, 0xFE, 0xAF, 0x03, 0x06, 0xFE, 0x5B, 0x03, 0x01, -/* 00011990 */ 0x03, 0xFE, 0x1B, 0x01, 0x4F, 0x0A, 0x4F, 0x0B, 0x8C, 0x02, 0x03, 0x0F, 0x5F, 0x0F, 0x0F, 0x00, -/* 000119A0 */ 0x6A, 0x0E, 0x0F, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0F, 0x5A, 0x01, 0x09, 0x1F, 0x02, 0x0E, -/* 000119B0 */ 0x0E, 0x47, 0x0A, 0x0E, 0xA6, 0x0E, 0x14, 0x03, 0x00, 0x0A, 0x0E, 0x09, 0xD4, 0x00, 0x8C, 0x02, -/* 000119C0 */ 0x03, 0x0F, 0x6A, 0x0E, 0x0F, 0x02, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0F, 0x5A, 0x01, 0x09, 0x1F, -/* 000119D0 */ 0x02, 0x0E, 0x0E, 0x47, 0x0A, 0x0E, 0x14, 0x03, 0x00, 0x0A, 0x02, 0x09, 0x7C, 0x00, 0x8C, 0x01, -/* 000119E0 */ 0x0F, 0x0E, 0x4B, 0x0E, 0x0F, 0x10, 0x00, 0x0E, 0x8C, 0x01, 0x05, 0x0E, 0x4B, 0x0E, 0x07, 0x01, -/* 000119F0 */ 0x00, 0x5A, 0x00, 0x03, 0x1F, 0x01, 0xFF, 0x0E, 0x8C, 0x02, 0x03, 0x0F, 0x6A, 0x0E, 0x0F, 0x03, -/* 00011A00 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0F, 0x5A, 0x01, 0x09, 0x8C, 0x01, 0x0F, 0x10, 0x4B, 0x10, 0x5A, -/* 00011A10 */ 0x02, 0x10, 0x1F, 0x03, 0x0E, 0x0E, 0x47, 0x0B, 0x0E, 0x95, 0x0E, 0x0B, 0x04, 0x95, 0x0F, 0x0B, -/* 00011A20 */ 0x05, 0x0E, 0x0E, 0x00, 0x0F, 0x95, 0x10, 0x0B, 0x05, 0x2F, 0x10, 0x06, 0x10, 0x47, 0x0F, 0x10, -/* 00011A30 */ 0x09, 0x03, 0x00, 0x47, 0x0F, 0x07, 0x2F, 0x0E, 0x0E, 0x0F, 0x95, 0x0F, 0x0B, 0x08, 0x0E, 0x0E, -/* 00011A40 */ 0x00, 0x0F, 0x95, 0x10, 0x0B, 0x08, 0x2F, 0x10, 0x06, 0x10, 0x47, 0x0F, 0x10, 0x09, 0x03, 0x00, -/* 00011A50 */ 0x47, 0x0F, 0x07, 0x2F, 0x0E, 0x0E, 0x0F, 0x47, 0x0A, 0x0E, 0x8C, 0x02, 0x03, 0x0F, 0x5F, 0x0F, -/* 00011A60 */ 0x0F, 0x00, 0x6A, 0x0E, 0x0F, 0x04, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0F, 0x5A, 0x01, 0x09, 0xA6, -/* 00011A70 */ 0x10, 0x14, 0x03, 0x00, 0x0A, 0x10, 0x09, 0x0C, 0x00, 0x8C, 0x02, 0x34, 0x11, 0x4B, 0x11, 0x47, -/* 00011A80 */ 0x10, 0x11, 0x09, 0x03, 0x00, 0x47, 0x10, 0x0A, 0x5A, 0x02, 0x10, 0x1F, 0x03, 0xFF, 0x0E, 0x09, -/* 00011A90 */ 0x13, 0x00, 0x8C, 0x02, 0x34, 0x0E, 0x4B, 0x0E, 0x14, 0x03, 0x00, 0x0A, 0x0E, 0x09, 0x05, 0x00, -/* 00011AA0 */ 0xA6, 0x0E, 0x47, 0x0A, 0x0E, 0x47, 0x00, 0x0A, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, -/* 00011AB0 */ 0x62, 0x03, 0xFE, 0x84, 0x01, 0xFE, 0xDD, 0x01, 0xFE, 0x83, 0x02, 0xFE, 0x87, 0x01, 0xFF, 0x5E, -/* 00011AC0 */ 0x82, 0x01, 0x00, 0x0D, 0x04, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x53, 0x00, 0x0A, 0x00, 0x30, 0x00, -/* 00011AD0 */ 0x18, 0x00, 0x51, 0x00, 0x08, 0x00, 0x2F, 0x00, 0x0A, 0x00, 0x2D, 0x00, 0x10, 0x00, 0x3A, 0x00, -/* 00011AE0 */ 0x21, 0x00, 0xB1, 0x00, 0x41, 0x00, 0x34, 0x01, 0x38, 0x00, 0x80, 0x00, 0x0E, 0x00, 0x30, 0x00, -/* 00011AF0 */ 0x05, 0x00, 0x2E, 0x00, 0x08, 0x00, 0x1B, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x43, 0xA8, 0x01, -/* 00011B00 */ 0x00, 0xFE, 0xA3, 0x08, 0x1F, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xAA, 0x04, 0x82, 0xFF, 0x8E, 0x7D, -/* 00011B10 */ 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFF, 0x8E, 0x7D, 0x01, 0x00, 0xFE, 0x86, -/* 00011B20 */ 0x04, 0xFE, 0x86, 0x04, 0x01, 0x0A, 0x09, 0x0E, 0x04, 0x5F, 0x52, 0x02, 0x04, 0x05, 0x05, 0x05, -/* 00011B30 */ 0x05, 0x01, 0x0D, 0x0E, 0x07, 0x08, 0x01, 0x01, 0x01, 0x02, 0x06, 0xFE, 0xAF, 0x03, 0x06, 0xFE, -/* 00011B40 */ 0x5B, 0x03, 0x01, 0x03, 0xFE, 0x3A, 0x01, 0x4F, 0x0C, 0x8C, 0x02, 0x03, 0x10, 0x5F, 0x10, 0x10, -/* 00011B50 */ 0x00, 0x6A, 0x0F, 0x10, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x10, 0x5A, 0x01, 0x09, 0x1F, 0x02, -/* 00011B60 */ 0x0F, 0x0F, 0x47, 0x0B, 0x0F, 0xA6, 0x0F, 0x14, 0x03, 0x00, 0x0B, 0x0F, 0x09, 0xD4, 0x00, 0x8C, -/* 00011B70 */ 0x02, 0x03, 0x10, 0x6A, 0x0F, 0x10, 0x02, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x10, 0x5A, 0x01, 0x09, -/* 00011B80 */ 0x1F, 0x02, 0x0F, 0x0F, 0x47, 0x0B, 0x0F, 0x14, 0x03, 0x00, 0x0B, 0x02, 0x09, 0x7C, 0x00, 0x8C, -/* 00011B90 */ 0x01, 0x0F, 0x0F, 0x4B, 0x0F, 0x0F, 0x10, 0x00, 0x0F, 0x8C, 0x01, 0x05, 0x0F, 0x4B, 0x0F, 0x07, -/* 00011BA0 */ 0x01, 0x00, 0x5A, 0x00, 0x03, 0x1F, 0x01, 0xFF, 0x0F, 0x8C, 0x02, 0x03, 0x10, 0x6A, 0x0F, 0x10, -/* 00011BB0 */ 0x03, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x10, 0x5A, 0x01, 0x09, 0x8C, 0x01, 0x0F, 0x11, 0x4B, 0x11, -/* 00011BC0 */ 0x5A, 0x02, 0x11, 0x1F, 0x03, 0x0F, 0x0F, 0x47, 0x0C, 0x0F, 0x95, 0x0F, 0x0C, 0x04, 0x95, 0x10, -/* 00011BD0 */ 0x0C, 0x05, 0x0E, 0x0E, 0x00, 0x10, 0x95, 0x11, 0x0C, 0x05, 0x2F, 0x11, 0x06, 0x11, 0x47, 0x10, -/* 00011BE0 */ 0x11, 0x09, 0x03, 0x00, 0x47, 0x10, 0x07, 0x2F, 0x0F, 0x0F, 0x10, 0x95, 0x10, 0x0C, 0x08, 0x0E, -/* 00011BF0 */ 0x0E, 0x00, 0x10, 0x95, 0x11, 0x0C, 0x08, 0x2F, 0x11, 0x06, 0x11, 0x47, 0x10, 0x11, 0x09, 0x03, -/* 00011C00 */ 0x00, 0x47, 0x10, 0x07, 0x2F, 0x0F, 0x0F, 0x10, 0x47, 0x0B, 0x0F, 0x8C, 0x02, 0x03, 0x10, 0x5F, -/* 00011C10 */ 0x10, 0x10, 0x00, 0x6A, 0x0F, 0x10, 0x04, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x10, 0x5A, 0x01, 0x09, -/* 00011C20 */ 0xA6, 0x11, 0x14, 0x03, 0x00, 0x0B, 0x11, 0x09, 0x0C, 0x00, 0x8C, 0x02, 0x34, 0x12, 0x4B, 0x12, -/* 00011C30 */ 0x47, 0x11, 0x12, 0x09, 0x03, 0x00, 0x47, 0x11, 0x0B, 0x5A, 0x02, 0x11, 0x1F, 0x03, 0xFF, 0x0F, -/* 00011C40 */ 0x09, 0x13, 0x00, 0x8C, 0x02, 0x34, 0x0F, 0x4B, 0x0F, 0x14, 0x03, 0x00, 0x0B, 0x0F, 0x09, 0x05, -/* 00011C50 */ 0x00, 0xA6, 0x0F, 0x47, 0x0B, 0x0F, 0x14, 0x03, 0x00, 0x0A, 0x09, 0x09, 0x09, 0x00, 0x47, 0x00, -/* 00011C60 */ 0x0B, 0x09, 0x1B, 0x00, 0x09, 0x16, 0x00, 0x14, 0x03, 0x00, 0x0A, 0x0B, 0x09, 0x08, 0x00, 0xA6, -/* 00011C70 */ 0x00, 0x09, 0x0B, 0x00, 0x09, 0x06, 0x00, 0x47, 0x00, 0x0B, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, -/* 00011C80 */ 0x00, 0xFE, 0x63, 0x03, 0xFE, 0x84, 0x01, 0xFE, 0xDE, 0x01, 0xFE, 0x83, 0x02, 0xFE, 0x87, 0x01, -/* 00011C90 */ 0xFF, 0xB9, 0x7D, 0x01, 0x00, 0x11, 0x02, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x46, 0x00, 0x0A, 0x00, -/* 00011CA0 */ 0x30, 0x00, 0x18, 0x00, 0x44, 0x00, 0x08, 0x00, 0x2F, 0x00, 0x0A, 0x00, 0x2D, 0x00, 0x10, 0x00, -/* 00011CB0 */ 0x3A, 0x00, 0x21, 0x00, 0x52, 0x00, 0x41, 0x00, 0x0C, 0x01, 0x38, 0x00, 0x73, 0x00, 0x0E, 0x00, -/* 00011CC0 */ 0x30, 0x00, 0x05, 0x00, 0x2F, 0x00, 0x08, 0x00, 0x2C, 0x00, 0x09, 0x00, 0x26, 0x00, 0x08, 0x00, -/* 00011CD0 */ 0x34, 0x00, 0x08, 0x00, 0x2F, 0x00, 0x08, 0x00, 0x25, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, -/* 00011CE0 */ 0x88, 0x01, 0x00, 0xFE, 0x9F, 0x08, 0x1C, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xE6, 0x02, 0x81, 0xFF, -/* 00011CF0 */ 0x1B, 0x7D, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFF, 0x1B, 0x7D, 0x01, 0x00, -/* 00011D00 */ 0x51, 0x51, 0x01, 0x05, 0x02, 0x05, 0x04, 0x0B, 0x0B, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, -/* 00011D10 */ 0x1F, 0x8C, 0x02, 0x03, 0x06, 0x6A, 0x05, 0x06, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x06, 0x5A, -/* 00011D20 */ 0x01, 0x03, 0x5A, 0x02, 0x02, 0x1F, 0x03, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, -/* 00011D30 */ 0xFE, 0xFD, 0x01, 0xFF, 0x38, 0x7D, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x33, -/* 00011D40 */ 0x00, 0x00, 0xBF, 0x4C, 0x00, 0xC0, 0x03, 0x80, 0x01, 0x00, 0xFE, 0x99, 0x08, 0x1C, 0xA2, 0x41, -/* 00011D50 */ 0xC1, 0x00, 0xFE, 0xE5, 0x02, 0x80, 0xFF, 0x81, 0x7C, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, -/* 00011D60 */ 0x02, 0x02, 0xFF, 0x81, 0x7C, 0x01, 0x00, 0x7B, 0x7B, 0x41, 0x02, 0x04, 0x05, 0x09, 0x09, 0x02, -/* 00011D70 */ 0x01, 0x01, 0x01, 0x01, 0x04, 0x00, 0x00, 0x00, 0xF9, 0x7F, 0xFD, 0xDF, 0xC1, 0x04, 0x00, 0x00, -/* 00011D80 */ 0x40, 0xFE, 0x7F, 0xFD, 0xDF, 0xC1, 0x1B, 0x5F, 0x05, 0x04, 0x00, 0x14, 0x0C, 0x00, 0x05, 0x02, -/* 00011D90 */ 0x5F, 0x05, 0x04, 0x00, 0x14, 0x03, 0x00, 0x05, 0x03, 0x09, 0x02, 0x00, 0x23, 0x04, 0xA6, 0x00, -/* 00011DA0 */ 0x24, 0x00, 0xFE, 0xFE, 0x00, 0xFF, 0x99, 0x7C, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x15, -/* 00011DB0 */ 0x00, 0x4A, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0xBF, 0x7C, 0x02, 0x02, 0x00, 0x80, 0x09, 0x00, -/* 00011DC0 */ 0xFE, 0x8E, 0x08, 0x1B, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xE8, 0x02, 0x7F, 0xFF, 0x28, 0x7B, 0x01, -/* 00011DD0 */ 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFF, 0x28, 0x7B, 0x01, 0x00, 0xD5, 0xD5, 0x41, -/* 00011DE0 */ 0x06, 0x05, 0x09, 0x03, 0x12, 0x10, 0x0D, 0x02, 0x01, 0x01, 0x05, 0x33, 0x01, 0x00, 0x08, 0x01, -/* 00011DF0 */ 0x01, 0x37, 0x4F, 0x08, 0x47, 0x08, 0x02, 0xEA, 0x00, 0x12, 0x03, 0x00, 0x08, 0x06, 0x09, 0x24, -/* 00011E00 */ 0x00, 0xB9, 0x09, 0x08, 0x05, 0x00, 0x00, 0x0E, 0x14, 0x00, 0x09, 0x47, 0x09, 0x07, 0x07, 0x02, -/* 00011E10 */ 0x00, 0x5A, 0x00, 0x03, 0x95, 0x0A, 0x05, 0x08, 0x5A, 0x01, 0x0A, 0x1F, 0x02, 0xFF, 0x09, 0x28, -/* 00011E20 */ 0x08, 0x08, 0x09, 0xD2, 0xFF, 0xA6, 0x00, 0x24, 0x00, 0xFF, 0x4F, 0x7B, 0x01, 0x00, 0x06, 0x02, -/* 00011E30 */ 0x00, 0x00, 0x00, 0x05, 0x00, 0x20, 0x00, 0x08, 0x00, 0x20, 0x00, 0x0A, 0x00, 0x26, 0x00, 0x14, -/* 00011E40 */ 0x00, 0x2E, 0x00, 0x08, 0x00, 0x19, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x43, 0xA8, 0x01, 0x00, -/* 00011E50 */ 0xFE, 0x81, 0x08, 0x22, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x7F, 0x03, 0x7E, 0xFF, 0x9F, 0x79, 0x01, -/* 00011E60 */ 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0x9F, 0x79, 0x01, 0x00, 0xFE, 0x6B, 0x01, -/* 00011E70 */ 0xFE, 0x6B, 0x01, 0x01, 0x08, 0x04, 0x08, 0x04, 0x2A, 0x27, 0x02, 0x03, 0x02, 0x02, 0x02, 0x02, -/* 00011E80 */ 0x01, 0x07, 0x08, 0x07, 0x08, 0x7F, 0x4F, 0x05, 0x4F, 0x06, 0x8C, 0x02, 0x03, 0x0A, 0x6A, 0x09, -/* 00011E90 */ 0x0A, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0A, 0x5A, 0x01, 0x04, 0x1F, 0x02, 0x09, 0x09, 0x47, -/* 00011EA0 */ 0x05, 0x09, 0x14, 0x03, 0x00, 0x05, 0x02, 0x09, 0x51, 0x00, 0x8C, 0x01, 0x11, 0x09, 0x4B, 0x09, -/* 00011EB0 */ 0x0F, 0x10, 0x00, 0x09, 0x8C, 0x01, 0x05, 0x09, 0x4B, 0x09, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x03, -/* 00011EC0 */ 0x1F, 0x01, 0xFF, 0x09, 0x8C, 0x02, 0x03, 0x0A, 0x6A, 0x09, 0x0A, 0x01, 0x07, 0x03, 0x00, 0x5A, -/* 00011ED0 */ 0x00, 0x0A, 0x5A, 0x01, 0x04, 0x8C, 0x01, 0x11, 0x0B, 0x4B, 0x0B, 0x5A, 0x02, 0x0B, 0x1F, 0x03, -/* 00011EE0 */ 0x09, 0x09, 0x47, 0x06, 0x09, 0xAA, 0x09, 0x0F, 0x02, 0x00, 0x06, 0xA9, 0x09, 0xAA, 0x00, 0x0F, -/* 00011EF0 */ 0x02, 0x00, 0x09, 0xA9, 0x00, 0x09, 0x0B, 0x00, 0x09, 0x06, 0x00, 0x47, 0x00, 0x05, 0x09, 0x02, -/* 00011F00 */ 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xD7, 0x01, 0xFE, 0x83, 0x02, 0xFF, 0xBC, 0x79, 0x01, 0x00, -/* 00011F10 */ 0x08, 0x04, 0x00, 0x00, 0x00, 0x18, 0x00, 0x40, 0x00, 0x08, 0x00, 0x23, 0x00, 0x0A, 0x00, 0x24, -/* 00011F20 */ 0x00, 0x10, 0x00, 0x32, 0x00, 0x21, 0x00, 0x4A, 0x00, 0x16, 0x00, 0x2D, 0x00, 0x08, 0x00, 0x1D, -/* 00011F30 */ 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x74, 0x08, 0x1F, 0xA2, 0x41, -/* 00011F40 */ 0xC1, 0x00, 0xFE, 0x7E, 0x03, 0x7D, 0xFF, 0x90, 0x77, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, -/* 00011F50 */ 0x03, 0x03, 0xFF, 0x90, 0x77, 0x01, 0x00, 0xFE, 0xEA, 0x01, 0xFE, 0xEA, 0x01, 0x41, 0x06, 0x05, -/* 00011F60 */ 0x09, 0x04, 0x14, 0x12, 0x02, 0x01, 0x03, 0x03, 0x03, 0x03, 0x08, 0x07, 0x06, 0xFE, 0x5B, 0x03, -/* 00011F70 */ 0x05, 0xFE, 0xA9, 0x04, 0x3F, 0x4F, 0x07, 0x8C, 0x02, 0x03, 0x0A, 0x6A, 0x09, 0x0A, 0x00, 0x07, -/* 00011F80 */ 0x03, 0x00, 0x5A, 0x00, 0x0A, 0x5A, 0x01, 0x05, 0x5A, 0x02, 0x06, 0x1F, 0x03, 0x09, 0x09, 0x47, -/* 00011F90 */ 0x07, 0x09, 0x14, 0x03, 0x00, 0x07, 0x02, 0x09, 0x16, 0x00, 0x74, 0x03, 0x05, 0x01, 0x47, 0x09, -/* 00011FA0 */ 0x05, 0xCC, 0x0A, 0x02, 0x9F, 0x00, 0x04, 0x0A, 0x9F, 0x01, 0x03, 0x0A, 0x74, 0x0A, 0x09, 0x02, -/* 00011FB0 */ 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xE4, 0x01, 0xFE, 0x0C, 0x02, 0xFE, 0x30, 0x02, 0xFF, 0xBF, 0x77, -/* 00011FC0 */ 0x01, 0x00, 0x05, 0x02, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x4F, 0x00, 0x08, 0x00, 0x71, 0x00, 0x04, -/* 00011FD0 */ 0x00, 0x33, 0x00, 0x14, 0x00, 0xC7, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, -/* 00011FE0 */ 0xFE, 0x63, 0x08, 0x1D, 0xA0, 0x41, 0xC1, 0x00, 0xFE, 0x67, 0x03, 0x7C, 0xFF, 0xA5, 0x75, 0x01, -/* 00011FF0 */ 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFF, 0xA5, 0x75, 0x01, 0x00, 0xFE, 0xC9, 0x01, -/* 00012000 */ 0xFE, 0xC9, 0x01, 0x01, 0x04, 0x03, 0x05, 0x02, 0x1A, 0x19, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, -/* 00012010 */ 0x04, 0x05, 0xFE, 0xAE, 0x03, 0x56, 0x4F, 0x03, 0x8C, 0x01, 0x09, 0x05, 0x4B, 0x05, 0x0E, 0x15, -/* 00012020 */ 0x00, 0x05, 0x8C, 0x02, 0x03, 0x05, 0x5F, 0x05, 0x05, 0x00, 0x0E, 0x09, 0x00, 0x05, 0x8C, 0x01, -/* 00012030 */ 0x09, 0x00, 0x4B, 0x00, 0x09, 0x33, 0x00, 0x8C, 0x02, 0x03, 0x06, 0x6A, 0x05, 0x06, 0x01, 0x07, -/* 00012040 */ 0x01, 0x00, 0x5A, 0x00, 0x06, 0x1F, 0x01, 0x05, 0x05, 0x47, 0x03, 0x05, 0x0F, 0x09, 0x00, 0x03, -/* 00012050 */ 0x01, 0x34, 0x01, 0x01, 0x09, 0x02, 0x09, 0x06, 0x00, 0x01, 0x34, 0x01, 0x01, 0x09, 0x03, 0x8C, -/* 00012060 */ 0x01, 0x09, 0x00, 0x4B, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x61, 0x03, 0xFE, -/* 00012070 */ 0xDF, 0x01, 0xFF, 0xBB, 0x75, 0x01, 0x00, 0x08, 0x02, 0x00, 0x00, 0x00, 0x16, 0x00, 0x39, 0x00, -/* 00012080 */ 0x09, 0x00, 0x2B, 0x00, 0x15, 0x00, 0x34, 0x00, 0x04, 0x00, 0x9C, 0x00, 0x09, 0x00, 0x35, 0x00, -/* 00012090 */ 0x06, 0x00, 0x2D, 0x00, 0x0B, 0x00, 0x1C, 0x00, 0x00, 0x3F, 0x5D, 0x00, 0xC1, 0x13, 0x8D, 0x25, -/* 000120A0 */ 0x00, 0xFE, 0xAF, 0x07, 0x19, 0xA0, 0x41, 0xD1, 0x00, 0x74, 0xFF, 0xEC, 0x5A, 0x01, 0x00, 0x06, -/* 000120B0 */ 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFF, 0xEC, 0x5A, 0x01, 0x00, 0xFE, 0x5B, 0x16, 0xFE, -/* 000120C0 */ 0x5B, 0x16, 0x03, 0xFE, 0x9A, 0x04, 0xFE, 0x9B, 0x04, 0xFE, 0x9C, 0x04, 0x0C, 0x14, 0x1C, 0x05, -/* 000120D0 */ 0x8F, 0x89, 0x02, 0x05, 0x07, 0x07, 0x07, 0x07, 0x05, 0x19, 0x1A, 0x1B, 0x06, 0xFE, 0x3D, 0x03, -/* 000120E0 */ 0x05, 0xFE, 0x9D, 0x04, 0x08, 0x06, 0xFE, 0x0B, 0x04, 0x06, 0xFE, 0x40, 0x03, 0x07, 0x06, 0xFE, -/* 000120F0 */ 0x42, 0x03, 0x0C, 0x06, 0xFE, 0x43, 0x03, 0x06, 0xFE, 0x44, 0x03, 0x05, 0xFE, 0x9E, 0x04, 0x06, -/* 00012100 */ 0xFE, 0x3F, 0x03, 0x06, 0xFE, 0x4C, 0x03, 0x0B, 0x05, 0xFE, 0x9F, 0x04, 0x06, 0xFE, 0xA0, 0x04, -/* 00012110 */ 0x05, 0xFE, 0xA1, 0x04, 0x06, 0xFE, 0x0D, 0x04, 0xFE, 0xFD, 0x01, 0x4F, 0x14, 0x4F, 0x15, 0x4F, -/* 00012120 */ 0x16, 0x4F, 0x17, 0x4F, 0x18, 0x4F, 0x1C, 0x94, 0x02, 0x1C, 0x4F, 0x1C, 0x94, 0x03, 0x1C, 0x4F, -/* 00012130 */ 0x1C, 0x94, 0x04, 0x1C, 0x8C, 0x02, 0x32, 0x1C, 0x15, 0x03, 0x00, 0x1C, 0x02, 0x09, 0x05, 0x00, -/* 00012140 */ 0xA6, 0x00, 0x09, 0xD1, 0x01, 0xD3, 0x00, 0x1C, 0x94, 0x02, 0x1C, 0xD3, 0x01, 0x1C, 0x94, 0x03, -/* 00012150 */ 0x1C, 0xD3, 0x02, 0x1C, 0x47, 0x14, 0x1C, 0x8C, 0x02, 0x23, 0x1C, 0x07, 0x03, 0x00, 0x5A, 0x00, -/* 00012160 */ 0x04, 0x5A, 0x01, 0x03, 0x5A, 0x02, 0x14, 0x1F, 0x03, 0xFF, 0x1C, 0x8C, 0x02, 0x37, 0x1D, 0x4B, -/* 00012170 */ 0x1D, 0x6A, 0x1C, 0x1D, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x1D, 0x5A, 0x01, 0x14, 0x5A, 0x02, -/* 00012180 */ 0x05, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0xCA, 0x1F, -/* 00012190 */ 0x78, 0x1F, 0x1E, 0x01, 0x78, 0x09, 0x1E, 0x02, 0x78, 0x09, 0x1E, 0x03, 0x78, 0x09, 0x1E, 0x04, -/* 000121A0 */ 0x5A, 0x03, 0x1E, 0x1F, 0x04, 0xFF, 0x1C, 0x94, 0x04, 0x0C, 0x8C, 0x02, 0x23, 0x1C, 0x07, 0x03, -/* 000121B0 */ 0x00, 0x5A, 0x00, 0x04, 0x90, 0x04, 0x1D, 0x5A, 0x01, 0x1D, 0xD3, 0x03, 0x1D, 0x5A, 0x02, 0x1D, -/* 000121C0 */ 0x1F, 0x03, 0x1C, 0x1C, 0x47, 0x15, 0x1C, 0x8C, 0x02, 0x37, 0x1D, 0x4B, 0x1D, 0x6A, 0x1C, 0x1D, -/* 000121D0 */ 0x05, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x1D, 0x5A, 0x01, 0x15, 0x8C, 0x01, 0x16, 0x1E, 0x4B, 0x1E, -/* 000121E0 */ 0x5A, 0x02, 0x1E, 0x1F, 0x03, 0x1C, 0x1C, 0x47, 0x16, 0x1C, 0x8C, 0x02, 0x37, 0x1D, 0x4B, 0x1D, -/* 000121F0 */ 0x6A, 0x1C, 0x1D, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x1D, 0x5A, 0x01, 0x16, 0x5A, 0x02, 0x0D, -/* 00012200 */ 0xCB, 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x78, 0x0E, 0x1E, -/* 00012210 */ 0x01, 0x78, 0x09, 0x1E, 0x02, 0x78, 0x09, 0x1E, 0x03, 0x78, 0x0F, 0x1E, 0x04, 0x5A, 0x03, 0x1E, -/* 00012220 */ 0x1F, 0x04, 0xFF, 0x1C, 0x8C, 0x02, 0x37, 0x1D, 0x4B, 0x1D, 0x6A, 0x1C, 0x1D, 0x00, 0x07, 0x04, -/* 00012230 */ 0x00, 0x5A, 0x00, 0x1D, 0x5A, 0x01, 0x14, 0x5A, 0x02, 0x0E, 0xCB, 0x30, 0x00, 0x00, 0x00, 0x02, -/* 00012240 */ 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x78, 0x16, 0x1E, 0x01, 0x78, 0x0F, 0x1E, 0x02, 0x78, -/* 00012250 */ 0x09, 0x1E, 0x03, 0x78, 0x0F, 0x1E, 0x04, 0x5A, 0x03, 0x1E, 0x1F, 0x04, 0xFF, 0x1C, 0xD3, 0x04, -/* 00012260 */ 0x1C, 0x47, 0x17, 0x1C, 0x8C, 0x02, 0x23, 0x1C, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, -/* 00012270 */ 0x10, 0x5A, 0x02, 0x17, 0x1F, 0x03, 0xFF, 0x1C, 0x8C, 0x02, 0x37, 0x1D, 0x4B, 0x1D, 0x6A, 0x1C, -/* 00012280 */ 0x1D, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x1D, 0x5F, 0x1E, 0x14, 0x06, 0x5A, 0x01, 0x1E, 0x5A, -/* 00012290 */ 0x02, 0x11, 0xCB, 0x48, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x78, -/* 000122A0 */ 0x17, 0x1E, 0x01, 0x78, 0x09, 0x1E, 0x03, 0x78, 0x0F, 0x1E, 0x04, 0x78, 0x0F, 0x1E, 0x02, 0x5A, -/* 000122B0 */ 0x03, 0x1E, 0x1F, 0x04, 0xFF, 0x1C, 0xD3, 0x05, 0x1C, 0x47, 0x18, 0x1C, 0x8C, 0x02, 0x23, 0x1C, -/* 000122C0 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x12, 0x5A, 0x02, 0x18, 0x1F, 0x03, 0xFF, 0x1C, -/* 000122D0 */ 0x8C, 0x02, 0x37, 0x1D, 0x4B, 0x1D, 0x6A, 0x1C, 0x1D, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x1D, -/* 000122E0 */ 0x5F, 0x1E, 0x14, 0x06, 0x5A, 0x01, 0x1E, 0x5A, 0x02, 0x13, 0xCB, 0x60, 0x00, 0x00, 0x00, 0x04, -/* 000122F0 */ 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x78, 0x18, 0x1E, 0x01, 0x78, 0x09, 0x1E, 0x03, 0x78, -/* 00012300 */ 0x0F, 0x1E, 0x04, 0x78, 0x0F, 0x1E, 0x02, 0x5A, 0x03, 0x1E, 0x1F, 0x04, 0xFF, 0x1C, 0x47, 0x00, -/* 00012310 */ 0x14, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x05, 0x78, 0x00, 0x60, 0x00, 0x00, 0x00, 0x03, -/* 00012320 */ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, -/* 00012330 */ 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, -/* 00012340 */ 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x82, -/* 00012350 */ 0x01, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, -/* 00012360 */ 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x18, -/* 00012370 */ 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, -/* 00012380 */ 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, -/* 00012390 */ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, -/* 000123A0 */ 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0xFE, 0x88, 0x01, 0xFE, 0x83, 0x01, 0xFE, 0x82, 0x01, -/* 000123B0 */ 0xFE, 0x80, 0x01, 0xFE, 0x81, 0x01, 0x4D, 0xFE, 0x15, 0x01, 0xFF, 0x01, 0x5B, 0x01, 0x00, 0x14, -/* 000123C0 */ 0x19, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x27, 0x00, 0x05, 0x00, 0x23, 0x01, 0x06, 0x00, 0x02, 0x05, -/* 000123D0 */ 0x06, 0x00, 0x26, 0x01, 0x06, 0x00, 0xB8, 0x01, 0x14, 0x00, 0x72, 0x00, 0x3C, 0x00, 0x28, 0x01, -/* 000123E0 */ 0x03, 0x00, 0x5B, 0x00, 0x1D, 0x00, 0x33, 0x01, 0x23, 0x00, 0x75, 0x00, 0x3A, 0x00, 0xD4, 0x00, -/* 000123F0 */ 0x3A, 0x00, 0x15, 0x01, 0x06, 0x00, 0x73, 0x01, 0x14, 0x00, 0x48, 0x00, 0x3E, 0x00, 0xBF, 0x00, -/* 00012400 */ 0x06, 0x00, 0xD8, 0x03, 0x14, 0x00, 0x5A, 0x00, 0x3E, 0x00, 0xD1, 0x00, 0x08, 0x00, 0x18, 0x00, -/* 00012410 */ 0x00, 0x01, 0x29, 0x01, 0x00, 0x6C, 0x28, 0x01, 0x00, 0x62, 0x27, 0x01, 0x00, 0xD5, 0x26, 0x01, -/* 00012420 */ 0x00, 0xED, 0x25, 0x01, 0x00, 0x29, 0x24, 0x01, 0x00, 0x3F, 0x5D, 0x00, 0xC1, 0x03, 0x8D, 0x05, -/* 00012430 */ 0x00, 0xFE, 0x1F, 0x08, 0x20, 0xA0, 0x41, 0xC3, 0x00, 0xFE, 0x0D, 0x04, 0x7A, 0xFF, 0x43, 0x6C, -/* 00012440 */ 0x01, 0x00, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFF, 0x43, 0x6C, 0x01, 0x00, 0xFE, -/* 00012450 */ 0xB6, 0x03, 0xFE, 0xB6, 0x03, 0x01, 0xFE, 0xA8, 0x04, 0x06, 0x0D, 0x11, 0x05, 0x2E, 0x2E, 0x03, -/* 00012460 */ 0x03, 0x03, 0x03, 0x03, 0x03, 0x0E, 0x0F, 0x10, 0x05, 0xFE, 0x9F, 0x04, 0x06, 0xFE, 0x48, 0x03, -/* 00012470 */ 0x06, 0xFE, 0xF7, 0x03, 0x06, 0xFE, 0xA2, 0x04, 0x06, 0xFE, 0xFA, 0x03, 0x06, 0xFE, 0xFB, 0x03, -/* 00012480 */ 0x06, 0xFE, 0xFC, 0x03, 0x06, 0xFE, 0xFD, 0x03, 0x06, 0xFE, 0xFE, 0x03, 0x06, 0xFE, 0xA5, 0x04, -/* 00012490 */ 0x08, 0x95, 0x59, 0x11, 0xB1, 0x0D, 0x11, 0x4F, 0x11, 0x94, 0x02, 0x11, 0x8C, 0x03, 0x03, 0x12, -/* 000124A0 */ 0x6A, 0x11, 0x12, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x12, 0x5A, 0x01, 0x0D, 0x1F, 0x02, 0x11, -/* 000124B0 */ 0x11, 0x94, 0x02, 0x11, 0x90, 0x02, 0x11, 0x0E, 0x0B, 0x00, 0x11, 0x90, 0x02, 0x11, 0x5F, 0x11, -/* 000124C0 */ 0x11, 0x01, 0x0F, 0x18, 0x00, 0x11, 0x8C, 0x03, 0x03, 0x12, 0x6A, 0x11, 0x12, 0x02, 0x07, 0x03, -/* 000124D0 */ 0x00, 0x5A, 0x00, 0x12, 0x5A, 0x01, 0x02, 0x5A, 0x02, 0x03, 0x1F, 0x03, 0xFF, 0x11, 0x8C, 0x02, -/* 000124E0 */ 0x19, 0x11, 0x4B, 0x11, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x0C, 0xCC, 0x12, 0x08, 0x9F, 0x00, 0x04, -/* 000124F0 */ 0x12, 0x9F, 0x01, 0x05, 0x12, 0x9F, 0x02, 0x06, 0x12, 0x9F, 0x03, 0x07, 0x12, 0x9F, 0x04, 0x08, -/* 00012500 */ 0x12, 0x9F, 0x05, 0x09, 0x12, 0x9F, 0x06, 0x0A, 0x12, 0x9F, 0x07, 0x0B, 0x12, 0x5A, 0x01, 0x12, -/* 00012510 */ 0x90, 0x02, 0x12, 0x5A, 0x02, 0x12, 0xD3, 0x00, 0x12, 0x5A, 0x03, 0x12, 0x1F, 0x04, 0x00, 0x11, -/* 00012520 */ 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xEF, 0x01, 0xFE, 0xA6, 0x04, 0xFE, 0x8A, 0x02, -/* 00012530 */ 0xFF, 0x6C, 0x6C, 0x01, 0x00, 0x05, 0x0A, 0x00, 0x00, 0x00, 0x18, 0x00, 0x37, 0x00, 0x12, 0x00, -/* 00012540 */ 0x39, 0x00, 0x18, 0x00, 0x6F, 0x00, 0x47, 0x00, 0xAD, 0x02, 0x00, 0x4F, 0x25, 0x01, 0x00, 0xBF, -/* 00012550 */ 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x03, 0x00, 0xFE, 0x2E, 0x08, 0x13, 0xA2, 0x41, 0xD0, 0x00, 0x7B, -/* 00012560 */ 0xFE, 0x01, 0x10, 0xFF, 0xA4, 0x6E, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFF, -/* 00012570 */ 0xA4, 0x6E, 0x01, 0x00, 0xFE, 0x49, 0x01, 0xFE, 0x49, 0x01, 0x01, 0x07, 0x05, 0x08, 0x04, 0x14, -/* 00012580 */ 0x12, 0x04, 0x02, 0x03, 0x03, 0x03, 0x03, 0x07, 0x06, 0xFE, 0xA5, 0x04, 0x01, 0x00, 0x0B, 0x3D, -/* 00012590 */ 0x14, 0x03, 0x00, 0x05, 0x02, 0x09, 0x31, 0x00, 0x47, 0x08, 0x06, 0x8C, 0x04, 0x37, 0x0A, 0x4B, -/* 000125A0 */ 0x0A, 0x6A, 0x09, 0x0A, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0A, 0x8C, 0x01, 0x02, 0x0B, 0x4B, -/* 000125B0 */ 0x0B, 0x5F, 0x0B, 0x0B, 0x01, 0x5A, 0x01, 0x0B, 0x5A, 0x02, 0x03, 0x1F, 0x03, 0x09, 0x09, 0x74, -/* 000125C0 */ 0x09, 0x08, 0x02, 0x47, 0x00, 0x04, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x3F, 0x01, -/* 000125D0 */ 0xFE, 0xA5, 0x04, 0xFE, 0xA5, 0x04, 0xFF, 0xCA, 0x6E, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -/* 000125E0 */ 0x08, 0x00, 0xA6, 0x00, 0x2B, 0x00, 0x51, 0x00, 0x08, 0x00, 0x2B, 0x00, 0x00, 0xBF, 0x5C, 0x00, -/* 000125F0 */ 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x0E, 0x08, 0x17, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0xA0, 0x04, -/* 00012600 */ 0x79, 0xFF, 0xC0, 0x69, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0xC0, 0x69, -/* 00012610 */ 0x01, 0x00, 0xFE, 0x5A, 0x01, 0xFE, 0x5A, 0x01, 0x01, 0x07, 0x05, 0x0A, 0x04, 0x27, 0x25, 0x03, -/* 00012620 */ 0x03, 0x04, 0x04, 0x04, 0x04, 0x09, 0x05, 0xFE, 0x9F, 0x04, 0x06, 0xFE, 0x48, 0x03, 0x08, 0x7A, -/* 00012630 */ 0x59, 0x0A, 0xB1, 0x06, 0x0A, 0x4F, 0x07, 0x4F, 0x08, 0x8C, 0x03, 0x03, 0x0B, 0x6A, 0x0A, 0x0B, -/* 00012640 */ 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0B, 0x5A, 0x01, 0x06, 0x1F, 0x02, 0x0A, 0x0A, 0x47, 0x07, -/* 00012650 */ 0x0A, 0x0E, 0x08, 0x00, 0x07, 0x5F, 0x0A, 0x07, 0x01, 0x0F, 0x18, 0x00, 0x0A, 0x8C, 0x03, 0x03, -/* 00012660 */ 0x0B, 0x6A, 0x0A, 0x0B, 0x02, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0B, 0x5A, 0x01, 0x02, 0x5A, 0x02, -/* 00012670 */ 0x03, 0x1F, 0x03, 0xFF, 0x0A, 0x8C, 0x03, 0x24, 0x0B, 0x6A, 0x0A, 0x0B, 0x03, 0x07, 0x02, 0x00, -/* 00012680 */ 0x5A, 0x00, 0x0B, 0x5A, 0x01, 0x05, 0x1F, 0x02, 0x0A, 0x0A, 0x47, 0x08, 0x0A, 0x8C, 0x01, 0x03, -/* 00012690 */ 0x0A, 0x4B, 0x0A, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x07, 0x5A, 0x02, 0x08, 0x1F, -/* 000126A0 */ 0x03, 0x00, 0x0A, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xEF, 0x01, 0xFE, 0xA6, 0x04, -/* 000126B0 */ 0xFE, 0x8A, 0x02, 0xFE, 0x38, 0x03, 0xFF, 0xE5, 0x69, 0x01, 0x00, 0x06, 0x09, 0x00, 0x00, 0x00, -/* 000126C0 */ 0x18, 0x00, 0x37, 0x00, 0x0C, 0x00, 0x39, 0x00, 0x18, 0x00, 0x6F, 0x00, 0x18, 0x00, 0x30, 0x00, -/* 000126D0 */ 0x1B, 0x00, 0x25, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0xFC, 0x07, -/* 000126E0 */ 0x6B, 0xA2, 0x41, 0xD1, 0x00, 0x78, 0xFF, 0x83, 0x66, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, -/* 000126F0 */ 0x03, 0x02, 0xFF, 0x83, 0x66, 0x01, 0x00, 0xC5, 0xC5, 0x01, 0x06, 0x03, 0x07, 0x07, 0x17, 0x16, -/* 00012700 */ 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x06, 0x08, 0x43, 0x59, 0x07, 0xB1, 0x05, 0x07, 0x15, 0x05, -/* 00012710 */ 0x00, 0x04, 0x02, 0xA6, 0x07, 0x47, 0x04, 0x07, 0x8C, 0x02, 0x17, 0x07, 0x4B, 0x07, 0x07, 0x06, -/* 00012720 */ 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x05, 0x8C, 0x01, 0x04, 0x08, 0x4B, 0x08, 0x5A, 0x02, 0x08, -/* 00012730 */ 0x8C, 0x03, 0x03, 0x08, 0x5F, 0x08, 0x08, 0x00, 0x5A, 0x03, 0x08, 0x5A, 0x04, 0x03, 0x5A, 0x05, -/* 00012740 */ 0x04, 0x1F, 0x06, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xDC, 0x01, 0xFF, -/* 00012750 */ 0x96, 0x66, 0x01, 0x00, 0x03, 0x05, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x23, 0x00, 0x32, 0x00, 0x8E, -/* 00012760 */ 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0xE3, 0x07, 0x1C, 0xA2, 0x41, -/* 00012770 */ 0xC3, 0x00, 0xFE, 0x48, 0x03, 0x77, 0xFF, 0x87, 0x62, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, -/* 00012780 */ 0x03, 0x01, 0xFF, 0x87, 0x62, 0x01, 0x00, 0xFE, 0x9A, 0x01, 0xFE, 0x9A, 0x01, 0x01, 0x08, 0x05, -/* 00012790 */ 0x0B, 0x05, 0x30, 0x2C, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x0A, 0x08, 0x05, 0xFE, 0x9D, 0x04, -/* 000127A0 */ 0x06, 0xFE, 0x48, 0x03, 0x95, 0x01, 0x4D, 0x01, 0x07, 0x59, 0x0B, 0xB1, 0x09, 0x0B, 0x4F, 0x08, -/* 000127B0 */ 0x15, 0x05, 0x00, 0x05, 0x02, 0xA6, 0x0B, 0x47, 0x05, 0x0B, 0x15, 0x05, 0x00, 0x06, 0x02, 0xA6, -/* 000127C0 */ 0x0B, 0x47, 0x06, 0x0B, 0x4F, 0x08, 0xA6, 0x0B, 0x14, 0x03, 0x00, 0x07, 0x0B, 0x09, 0x18, 0x00, -/* 000127D0 */ 0x8C, 0x03, 0x03, 0x0C, 0x6A, 0x0B, 0x0C, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x5A, 0x01, -/* 000127E0 */ 0x03, 0x5A, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x0B, 0x8C, 0x03, 0x37, 0x0C, 0x4B, 0x0C, 0x6A, 0x0B, -/* 000127F0 */ 0x0C, 0x01, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x0C, 0x1F, 0x01, 0x0B, 0x0B, 0x47, 0x08, 0x0B, 0x8C, -/* 00012800 */ 0x03, 0x03, 0x0C, 0x6A, 0x0B, 0x0C, 0x02, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x5A, 0x01, 0x09, -/* 00012810 */ 0x5A, 0x02, 0x08, 0x1F, 0x03, 0xFF, 0x0B, 0x8C, 0x01, 0x02, 0x0B, 0x4B, 0x0B, 0x07, 0x04, 0x00, -/* 00012820 */ 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x08, 0x5A, 0x02, 0x05, 0x5A, 0x03, 0x06, 0x1F, 0x04, 0xFF, 0x0B, -/* 00012830 */ 0x47, 0x00, 0x09, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x8A, 0x02, 0x61, 0xFE, 0xF0, -/* 00012840 */ 0x01, 0xFF, 0x9C, 0x62, 0x01, 0x00, 0x09, 0x0B, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0C, -/* 00012850 */ 0x00, 0x23, 0x00, 0x0A, 0x00, 0x30, 0x00, 0x18, 0x00, 0x5E, 0x00, 0x17, 0x00, 0x2C, 0x00, 0x18, -/* 00012860 */ 0x00, 0x3A, 0x00, 0x19, 0x00, 0x43, 0x00, 0x08, 0x00, 0x15, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, -/* 00012870 */ 0x03, 0x88, 0x01, 0x00, 0xFE, 0xDA, 0x07, 0x1E, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x9B, 0x04, 0x76, -/* 00012880 */ 0xFF, 0x63, 0x61, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFF, 0x63, 0x61, 0x01, -/* 00012890 */ 0x00, 0xB5, 0xB5, 0x01, 0x05, 0x03, 0x06, 0x04, 0x15, 0x14, 0x03, 0x02, 0x02, 0x02, 0x02, 0x02, -/* 000128A0 */ 0x05, 0x05, 0xFE, 0xA7, 0x04, 0x40, 0x8C, 0x03, 0x37, 0x07, 0x4B, 0x07, 0x6A, 0x06, 0x07, 0x00, -/* 000128B0 */ 0x07, 0x02, 0x00, 0x5A, 0x00, 0x07, 0x5A, 0x01, 0x04, 0x1F, 0x02, 0x06, 0x06, 0x0F, 0x06, 0x00, -/* 000128C0 */ 0x06, 0x47, 0x00, 0x02, 0x09, 0x1D, 0x00, 0x8C, 0x03, 0x03, 0x07, 0x6A, 0x06, 0x07, 0x01, 0x07, -/* 000128D0 */ 0x03, 0x00, 0x5A, 0x00, 0x07, 0x5A, 0x01, 0x03, 0x5A, 0x02, 0x04, 0x1F, 0x03, 0x00, 0x06, 0x09, -/* 000128E0 */ 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xB1, 0xFE, 0xEC, 0x01, 0xFF, 0x8B, 0x61, 0x01, 0x00, 0x04, -/* 000128F0 */ 0x00, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x26, 0x00, 0x06, 0x00, 0x2B, 0x00, 0x1D, 0x00, 0x3B, 0x00, -/* 00012900 */ 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0xBD, 0x07, 0x26, 0xA2, 0x41, 0xC1, -/* 00012910 */ 0x00, 0xFE, 0x9A, 0x04, 0x75, 0xFF, 0x69, 0x5C, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, -/* 00012920 */ 0x04, 0xFF, 0x69, 0x5C, 0x01, 0x00, 0xFE, 0xAF, 0x03, 0xFE, 0xAF, 0x03, 0x01, 0x0A, 0x0D, 0x14, -/* 00012930 */ 0x07, 0x67, 0x5E, 0x03, 0x07, 0x0B, 0x0B, 0x0B, 0x0B, 0x13, 0x08, 0x06, 0xFE, 0x00, 0x04, 0x06, -/* 00012940 */ 0xFE, 0xAD, 0x03, 0x05, 0xFE, 0xBC, 0x03, 0x05, 0xFE, 0xFF, 0x03, 0x06, 0xFE, 0xA2, 0x04, 0x05, -/* 00012950 */ 0xFE, 0xA3, 0x04, 0x05, 0xFE, 0xA4, 0x04, 0x01, 0x00, 0x01, 0x03, 0x0B, 0xFE, 0x49, 0x01, 0x4F, -/* 00012960 */ 0x10, 0x4F, 0x11, 0x4F, 0x12, 0x8C, 0x02, 0x11, 0x14, 0x4B, 0x14, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 00012970 */ 0x02, 0x5A, 0x01, 0x0E, 0x1F, 0x02, 0x14, 0x14, 0x47, 0x10, 0x14, 0xA6, 0x14, 0x14, 0x03, 0x00, -/* 00012980 */ 0x0F, 0x14, 0x09, 0x1A, 0x00, 0x8C, 0x03, 0x37, 0x16, 0x4B, 0x16, 0x6A, 0x15, 0x16, 0x00, 0x07, -/* 00012990 */ 0x01, 0x00, 0x5A, 0x00, 0x16, 0x1F, 0x01, 0x15, 0x15, 0x47, 0x14, 0x15, 0x09, 0x18, 0x00, 0x8C, -/* 000129A0 */ 0x03, 0x24, 0x16, 0x6A, 0x15, 0x16, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x16, 0x5A, 0x01, 0x0F, -/* 000129B0 */ 0x1F, 0x02, 0x15, 0x15, 0x47, 0x14, 0x15, 0x47, 0x0F, 0x14, 0x8C, 0x03, 0x37, 0x15, 0x4B, 0x15, -/* 000129C0 */ 0x6A, 0x14, 0x15, 0x02, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x15, 0x1F, 0x01, 0x14, 0x14, 0x47, 0x11, -/* 000129D0 */ 0x14, 0x47, 0x14, 0x11, 0x8C, 0x02, 0x02, 0x15, 0x4B, 0x15, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x02, -/* 000129E0 */ 0x5A, 0x01, 0x0F, 0x5A, 0x02, 0x03, 0x5A, 0x03, 0x04, 0xCC, 0x16, 0x02, 0x9F, 0x00, 0x05, 0x16, -/* 000129F0 */ 0x9F, 0x01, 0x06, 0x16, 0x5A, 0x04, 0x16, 0x5A, 0x05, 0x06, 0x1F, 0x06, 0x15, 0x15, 0x74, 0x15, -/* 00012A00 */ 0x14, 0x03, 0x47, 0x14, 0x0D, 0x8C, 0x02, 0x02, 0x15, 0x4B, 0x15, 0x07, 0x06, 0x00, 0x5A, 0x00, -/* 00012A10 */ 0x02, 0x5A, 0x01, 0x0F, 0x5A, 0x02, 0x07, 0x5A, 0x03, 0x04, 0xCC, 0x16, 0x02, 0x9F, 0x00, 0x08, -/* 00012A20 */ 0x16, 0x9F, 0x01, 0x09, 0x16, 0x5A, 0x04, 0x16, 0x5A, 0x05, 0x08, 0x1F, 0x06, 0x15, 0x15, 0x74, -/* 00012A30 */ 0x15, 0x14, 0x04, 0x8C, 0x02, 0x14, 0x14, 0x4B, 0x14, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x02, 0x5A, -/* 00012A40 */ 0x01, 0x0D, 0x5A, 0x02, 0x0F, 0x5A, 0x03, 0x0A, 0x5A, 0x04, 0x0B, 0x1F, 0x05, 0xFF, 0x14, 0x8C, -/* 00012A50 */ 0x02, 0x0B, 0x14, 0x4B, 0x14, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x02, 0x8C, 0x03, 0x03, 0x15, 0x5F, -/* 00012A60 */ 0x15, 0x15, 0x05, 0x5A, 0x01, 0x15, 0x5A, 0x02, 0x10, 0x5A, 0x03, 0x11, 0xCC, 0x15, 0x00, 0x5A, -/* 00012A70 */ 0x04, 0x15, 0x1F, 0x05, 0x14, 0x14, 0x47, 0x12, 0x14, 0x5F, 0x14, 0x12, 0x06, 0x74, 0x14, 0x0D, -/* 00012A80 */ 0x07, 0x8C, 0x03, 0x03, 0x15, 0x6A, 0x14, 0x15, 0x08, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x15, 0x5A, -/* 00012A90 */ 0x01, 0x0D, 0x1F, 0x02, 0x14, 0x14, 0x74, 0x14, 0x0D, 0x09, 0x74, 0x0C, 0x0D, 0x0A, 0x47, 0x00, -/* 00012AA0 */ 0x0D, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x61, 0xFE, 0x36, 0x03, 0x61, 0xFE, 0x18, 0x04, -/* 00012AB0 */ 0xE6, 0xFE, 0xDC, 0x01, 0xFE, 0xF7, 0x01, 0xFE, 0xF7, 0x01, 0xFE, 0xED, 0x01, 0xFE, 0xA5, 0x04, -/* 00012AC0 */ 0xFE, 0xA6, 0x04, 0xFF, 0xA0, 0x5C, 0x01, 0x00, 0x0C, 0x06, 0x00, 0x00, 0x00, 0x16, 0x00, 0x46, -/* 00012AD0 */ 0x00, 0x3F, 0x00, 0x57, 0x00, 0x17, 0x00, 0x24, 0x00, 0x31, 0x00, 0x6D, 0x00, 0x31, 0x00, 0x6B, -/* 00012AE0 */ 0x00, 0x1C, 0x00, 0xA9, 0x00, 0x2A, 0x00, 0x5F, 0x00, 0x08, 0x00, 0x2B, 0x00, 0x19, 0x00, 0x57, -/* 00012AF0 */ 0x00, 0x04, 0x00, 0x38, 0x00, 0x08, 0x00, 0x1C, 0x00, 0x00, 0x3F, 0x5D, 0x00, 0xC1, 0x13, 0x8D, -/* 00012B00 */ 0x25, 0x00, 0xFE, 0x62, 0x05, 0x1A, 0xA0, 0x41, 0xD1, 0x00, 0x57, 0xFE, 0xEB, 0xEC, 0x11, 0xFF, -/* 00012B10 */ 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0xEB, 0xEC, 0xFE, 0xE2, 0x6D, 0xFE, 0xE2, 0x6D, 0x0D, -/* 00012B20 */ 0xFE, 0x37, 0x04, 0xFE, 0x24, 0x02, 0xFE, 0x38, 0x04, 0xFE, 0x39, 0x04, 0xFE, 0x3A, 0x04, 0xFE, -/* 00012B30 */ 0x3B, 0x04, 0xFE, 0x3C, 0x04, 0xFE, 0x3D, 0x04, 0xFE, 0x3E, 0x04, 0xFE, 0x3F, 0x04, 0xFE, 0x40, -/* 00012B40 */ 0x04, 0xFE, 0xF5, 0x01, 0xFE, 0x88, 0x03, 0x11, 0x34, 0x41, 0x09, 0xFE, 0x7C, 0x01, 0xFE, 0x74, -/* 00012B50 */ 0x01, 0x02, 0x0B, 0x14, 0x14, 0x14, 0x14, 0x09, 0x3E, 0x3F, 0x40, 0x08, 0x06, 0xFE, 0x3D, 0x03, -/* 00012B60 */ 0x06, 0xFE, 0x41, 0x04, 0x06, 0xFE, 0x42, 0x04, 0x06, 0xFE, 0x43, 0x04, 0x06, 0xFE, 0x44, 0x04, -/* 00012B70 */ 0x06, 0xFE, 0x45, 0x04, 0x06, 0xFE, 0x13, 0x04, 0x06, 0xFE, 0x46, 0x04, 0x06, 0xFE, 0x47, 0x04, -/* 00012B80 */ 0x06, 0xFE, 0x48, 0x04, 0x06, 0xFE, 0x49, 0x04, 0x06, 0xFE, 0x4A, 0x04, 0x06, 0xFE, 0x4B, 0x04, -/* 00012B90 */ 0x06, 0xFE, 0x4C, 0x04, 0x06, 0xFE, 0x4D, 0x04, 0x06, 0xFE, 0x4E, 0x04, 0x01, 0x01, 0x06, 0xFE, -/* 00012BA0 */ 0x4F, 0x04, 0x01, 0x00, 0x06, 0xFE, 0x50, 0x04, 0x06, 0xFE, 0x51, 0x04, 0x01, 0x02, 0x07, 0x05, -/* 00012BB0 */ 0xFE, 0x52, 0x04, 0x05, 0xFE, 0x53, 0x04, 0x06, 0xFE, 0x54, 0x04, 0x05, 0xFE, 0x55, 0x04, 0x06, -/* 00012BC0 */ 0xFE, 0x56, 0x04, 0x05, 0xFE, 0x57, 0x04, 0x05, 0xFE, 0x58, 0x04, 0x05, 0xFE, 0x59, 0x04, 0x05, -/* 00012BD0 */ 0xFE, 0x5A, 0x04, 0x05, 0xFE, 0x5B, 0x04, 0x06, 0xFE, 0x0B, 0x04, 0x06, 0xFE, 0x40, 0x03, 0x06, -/* 00012BE0 */ 0xFE, 0x42, 0x03, 0x0C, 0x06, 0xFE, 0x43, 0x03, 0x06, 0xFE, 0x44, 0x03, 0x06, 0xFE, 0x0C, 0x04, -/* 00012BF0 */ 0x0B, 0x06, 0xFE, 0x3F, 0x03, 0x05, 0xFE, 0x25, 0x04, 0x06, 0xFE, 0x26, 0x04, 0x06, 0xFE, 0x8D, -/* 00012C00 */ 0x03, 0x06, 0xFE, 0x27, 0x04, 0x06, 0xFE, 0x0D, 0x04, 0x05, 0xFE, 0x4B, 0x03, 0x06, 0xFE, 0x4C, -/* 00012C10 */ 0x03, 0xFE, 0x35, 0x05, 0xD3, 0x05, 0x34, 0x94, 0x02, 0x34, 0xD3, 0x09, 0x35, 0x94, 0x03, 0x35, -/* 00012C20 */ 0x4F, 0x36, 0x4F, 0x37, 0x4F, 0x38, 0x4F, 0x39, 0x4F, 0x3A, 0x4F, 0x3B, 0x4F, 0x3C, 0x4F, 0x3D, -/* 00012C30 */ 0x4F, 0x41, 0x94, 0x04, 0x41, 0x4F, 0x41, 0x94, 0x05, 0x41, 0x4F, 0x41, 0x94, 0x06, 0x41, 0x4F, -/* 00012C40 */ 0x41, 0x94, 0x07, 0x41, 0x4F, 0x41, 0x94, 0x08, 0x41, 0x4F, 0x41, 0x94, 0x09, 0x41, 0x4F, 0x41, -/* 00012C50 */ 0x94, 0x0A, 0x41, 0x4F, 0x41, 0x94, 0x0B, 0x41, 0x4F, 0x41, 0x94, 0x0C, 0x41, 0x4F, 0x41, 0x94, -/* 00012C60 */ 0x0D, 0x41, 0x4F, 0x41, 0x94, 0x0E, 0x41, 0x8C, 0x02, 0x32, 0x41, 0x15, 0x03, 0x00, 0x41, 0x03, -/* 00012C70 */ 0x09, 0x11, 0x00, 0x8C, 0x02, 0x32, 0x41, 0x15, 0x03, 0x00, 0x41, 0x04, 0x09, 0x05, 0x00, 0xA6, -/* 00012C80 */ 0x00, 0x09, 0xC3, 0x04, 0xCC, 0x41, 0x03, 0x9F, 0x00, 0x05, 0x41, 0x9F, 0x01, 0x06, 0x41, 0x9F, -/* 00012C90 */ 0x02, 0x07, 0x41, 0x47, 0x36, 0x41, 0xCC, 0x41, 0x02, 0x9F, 0x00, 0x08, 0x41, 0x9F, 0x01, 0x09, -/* 00012CA0 */ 0x41, 0x47, 0x37, 0x41, 0x8C, 0x02, 0x37, 0x42, 0x4B, 0x42, 0x6A, 0x41, 0x42, 0x00, 0x07, 0x03, -/* 00012CB0 */ 0x00, 0x5A, 0x00, 0x42, 0x5A, 0x01, 0x37, 0x5A, 0x02, 0x36, 0x1F, 0x03, 0x41, 0x41, 0x47, 0x38, -/* 00012CC0 */ 0x41, 0xCC, 0x41, 0x09, 0xCC, 0x42, 0x02, 0x9F, 0x00, 0x0A, 0x42, 0x9F, 0x01, 0x36, 0x42, 0x9F, -/* 00012CD0 */ 0x00, 0x42, 0x41, 0xCC, 0x42, 0x02, 0x9F, 0x00, 0x0B, 0x42, 0x9F, 0x01, 0x36, 0x42, 0x9F, 0x01, -/* 00012CE0 */ 0x42, 0x41, 0xCC, 0x42, 0x02, 0x9F, 0x00, 0x0C, 0x42, 0x9F, 0x01, 0x37, 0x42, 0x9F, 0x02, 0x42, -/* 00012CF0 */ 0x41, 0xCC, 0x42, 0x02, 0x9F, 0x00, 0x0D, 0x42, 0x9F, 0x01, 0x38, 0x42, 0x9F, 0x03, 0x42, 0x41, -/* 00012D00 */ 0xCC, 0x42, 0x02, 0x9F, 0x00, 0x0E, 0x42, 0x9F, 0x01, 0x37, 0x42, 0x9F, 0x04, 0x42, 0x41, 0xCC, -/* 00012D10 */ 0x42, 0x02, 0x9F, 0x00, 0x0F, 0x42, 0x9F, 0x01, 0x37, 0x42, 0x9F, 0x05, 0x42, 0x41, 0xCC, 0x42, -/* 00012D20 */ 0x02, 0x9F, 0x00, 0x10, 0x42, 0x9F, 0x01, 0x37, 0x42, 0x9F, 0x06, 0x42, 0x41, 0xCC, 0x42, 0x02, -/* 00012D30 */ 0x9F, 0x00, 0x11, 0x42, 0x9F, 0x01, 0x37, 0x42, 0x9F, 0x07, 0x42, 0x41, 0xCC, 0x42, 0x02, 0x9F, -/* 00012D40 */ 0x00, 0x12, 0x42, 0x8C, 0x02, 0x37, 0x44, 0x4B, 0x44, 0x6A, 0x43, 0x44, 0x01, 0x07, 0x03, 0x00, -/* 00012D50 */ 0x5A, 0x00, 0x44, 0x5A, 0x01, 0x36, 0x5A, 0x02, 0x13, 0x1F, 0x03, 0x43, 0x43, 0x9F, 0x01, 0x43, -/* 00012D60 */ 0x42, 0x9F, 0x08, 0x42, 0x41, 0x94, 0x04, 0x41, 0xD3, 0x00, 0x41, 0x07, 0x01, 0x00, 0x5A, 0x00, -/* 00012D70 */ 0x02, 0x1F, 0x01, 0x41, 0x41, 0x94, 0x05, 0x41, 0xD3, 0x01, 0x41, 0x94, 0x06, 0x41, 0xD3, 0x02, -/* 00012D80 */ 0x41, 0x94, 0x07, 0x41, 0xD3, 0x03, 0x41, 0x94, 0x08, 0x41, 0xD3, 0x04, 0x41, 0x94, 0x09, 0x41, -/* 00012D90 */ 0xCC, 0x41, 0x03, 0xA6, 0x42, 0x9F, 0x00, 0x42, 0x41, 0xA6, 0x42, 0x9F, 0x01, 0x42, 0x41, 0xA6, -/* 00012DA0 */ 0x42, 0x9F, 0x02, 0x42, 0x41, 0x94, 0x0A, 0x41, 0x8C, 0x02, 0x35, 0x41, 0x4B, 0x41, 0x07, 0x02, -/* 00012DB0 */ 0x00, 0x5A, 0x00, 0x02, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, -/* 00012DC0 */ 0x00, 0x78, 0x15, 0x42, 0x02, 0x78, 0x13, 0x42, 0x03, 0x78, 0x18, 0x42, 0x04, 0x5A, 0x01, 0x42, -/* 00012DD0 */ 0x1F, 0x02, 0x41, 0x41, 0x47, 0x39, 0x41, 0xD3, 0x06, 0x41, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x02, -/* 00012DE0 */ 0x5A, 0x01, 0x1A, 0x5A, 0x02, 0x1B, 0x5A, 0x03, 0x1C, 0x5F, 0x42, 0x39, 0x05, 0x5A, 0x04, 0x42, -/* 00012DF0 */ 0x8C, 0x02, 0x36, 0x42, 0x4B, 0x42, 0x5F, 0x42, 0x42, 0x06, 0x5A, 0x05, 0x42, 0x1F, 0x06, 0xFF, -/* 00012E00 */ 0x41, 0xD3, 0x07, 0x41, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x1D, 0x5A, 0x02, 0x1E, -/* 00012E10 */ 0x5A, 0x03, 0x1E, 0x5F, 0x42, 0x39, 0x07, 0x5A, 0x04, 0x42, 0x8C, 0x02, 0x36, 0x42, 0x4B, 0x42, -/* 00012E20 */ 0x5F, 0x42, 0x42, 0x08, 0x5A, 0x05, 0x42, 0x1F, 0x06, 0xFF, 0x41, 0xD3, 0x08, 0x41, 0x07, 0x06, -/* 00012E30 */ 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x1F, 0x5A, 0x02, 0x20, 0x5A, 0x03, 0x20, 0x5F, 0x42, 0x39, -/* 00012E40 */ 0x09, 0x5A, 0x04, 0x42, 0x8C, 0x02, 0x36, 0x42, 0x4B, 0x42, 0x5F, 0x42, 0x42, 0x0A, 0x5A, 0x05, -/* 00012E50 */ 0x42, 0x1F, 0x06, 0xFF, 0x41, 0x8C, 0x02, 0x32, 0x41, 0x15, 0x03, 0x00, 0x41, 0x03, 0x09, 0x05, -/* 00012E60 */ 0x00, 0xA6, 0x00, 0x09, 0xE1, 0x02, 0x8C, 0x02, 0x23, 0x41, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, -/* 00012E70 */ 0x5A, 0x01, 0x21, 0x90, 0x03, 0x42, 0x5A, 0x02, 0x42, 0x1F, 0x03, 0xFF, 0x41, 0xD3, 0x0A, 0x41, -/* 00012E80 */ 0x94, 0x0B, 0x41, 0xD3, 0x0B, 0x41, 0x94, 0x0C, 0x41, 0xD3, 0x0C, 0x41, 0x94, 0x0D, 0x41, 0x8C, -/* 00012E90 */ 0x02, 0x23, 0x41, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x22, 0x90, 0x0D, 0x42, 0x5A, -/* 00012EA0 */ 0x02, 0x42, 0x1F, 0x03, 0xFF, 0x41, 0xD3, 0x0D, 0x41, 0x47, 0x3A, 0x41, 0x8C, 0x02, 0x23, 0x41, -/* 00012EB0 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x23, 0x5A, 0x02, 0x3A, 0x1F, 0x03, 0xFF, 0x41, -/* 00012EC0 */ 0x8C, 0x02, 0x37, 0x42, 0x4B, 0x42, 0x6A, 0x41, 0x42, 0x0B, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x42, -/* 00012ED0 */ 0x90, 0x03, 0x43, 0x5A, 0x01, 0x43, 0x5A, 0x02, 0x24, 0xCB, 0x14, 0x00, 0x00, 0x00, 0x01, 0x00, -/* 00012EE0 */ 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x90, 0x03, 0x44, 0x07, 0x01, 0x00, 0xC1, 0x01, 0x44, 0x44, -/* 00012EF0 */ 0x78, 0x44, 0x43, 0x0C, 0x78, 0x27, 0x43, 0x0D, 0x78, 0x27, 0x43, 0x0E, 0x78, 0x27, 0x43, 0x0F, -/* 00012F00 */ 0x5A, 0x03, 0x43, 0x1F, 0x04, 0xFF, 0x41, 0x8C, 0x02, 0x04, 0x41, 0x07, 0x03, 0x00, 0x5A, 0x00, -/* 00012F10 */ 0x02, 0x90, 0x03, 0x42, 0x5F, 0x42, 0x42, 0x10, 0x5A, 0x01, 0x42, 0x8C, 0x02, 0x08, 0x42, 0x5F, -/* 00012F20 */ 0x42, 0x42, 0x10, 0x5A, 0x02, 0x42, 0x1F, 0x03, 0xFF, 0x41, 0x8C, 0x02, 0x37, 0x42, 0x4B, 0x42, -/* 00012F30 */ 0x6A, 0x41, 0x42, 0x0B, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x42, 0x90, 0x03, 0x43, 0x5F, 0x43, 0x43, -/* 00012F40 */ 0x11, 0x5A, 0x01, 0x43, 0x5A, 0x02, 0x2A, 0xCB, 0x2C, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, -/* 00012F50 */ 0x43, 0x00, 0x00, 0x00, 0x90, 0x03, 0x44, 0x78, 0x44, 0x43, 0x0C, 0x78, 0x2B, 0x43, 0x0D, 0x78, -/* 00012F60 */ 0x27, 0x43, 0x0E, 0x78, 0x2B, 0x43, 0x0F, 0x5A, 0x03, 0x43, 0x1F, 0x04, 0xFF, 0x41, 0xD3, 0x0E, -/* 00012F70 */ 0x41, 0x47, 0x3B, 0x41, 0x8C, 0x02, 0x37, 0x42, 0x4B, 0x42, 0x6A, 0x41, 0x42, 0x0B, 0x07, 0x04, -/* 00012F80 */ 0x00, 0x5A, 0x00, 0x42, 0x5A, 0x01, 0x3B, 0x5A, 0x02, 0x2C, 0xCB, 0x44, 0x00, 0x00, 0x00, 0x03, -/* 00012F90 */ 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x78, 0x2D, 0x43, 0x0C, 0x78, 0x27, 0x43, 0x0D, 0x78, -/* 00012FA0 */ 0x27, 0x43, 0x0E, 0x78, 0x2B, 0x43, 0x0F, 0x5A, 0x03, 0x43, 0x1F, 0x04, 0xFF, 0x41, 0x8C, 0x02, -/* 00012FB0 */ 0x37, 0x42, 0x4B, 0x42, 0x6A, 0x41, 0x42, 0x0B, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x42, 0x90, 0x03, -/* 00012FC0 */ 0x43, 0x5F, 0x43, 0x43, 0x11, 0x5A, 0x01, 0x43, 0x5A, 0x02, 0x2E, 0xCB, 0x5C, 0x00, 0x00, 0x00, -/* 00012FD0 */ 0x04, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x8C, 0x02, 0x23, 0x44, 0x07, 0x03, 0x00, 0x5A, -/* 00012FE0 */ 0x00, 0x02, 0x5A, 0x01, 0x2D, 0x5A, 0x02, 0x3B, 0x1F, 0x03, 0x44, 0x44, 0x78, 0x44, 0x43, 0x12, -/* 00012FF0 */ 0x78, 0x27, 0x43, 0x0E, 0x78, 0x2B, 0x43, 0x0F, 0x5A, 0x03, 0x43, 0x1F, 0x04, 0xFF, 0x41, 0x8C, -/* 00013000 */ 0x02, 0x37, 0x42, 0x4B, 0x42, 0x6A, 0x41, 0x42, 0x0B, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x42, 0x90, -/* 00013010 */ 0x03, 0x43, 0x5F, 0x43, 0x43, 0x11, 0x5A, 0x01, 0x43, 0x5A, 0x02, 0x30, 0xCB, 0x70, 0x00, 0x00, -/* 00013020 */ 0x00, 0x05, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x78, 0x3A, 0x43, 0x0C, 0x78, 0x27, 0x43, -/* 00013030 */ 0x0E, 0x78, 0x2B, 0x43, 0x0F, 0x78, 0x2B, 0x43, 0x0D, 0x5A, 0x03, 0x43, 0x1F, 0x04, 0xFF, 0x41, -/* 00013040 */ 0x8C, 0x02, 0x37, 0x42, 0x4B, 0x42, 0x6A, 0x41, 0x42, 0x0B, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x42, -/* 00013050 */ 0x90, 0x03, 0x43, 0x5F, 0x43, 0x43, 0x11, 0x5A, 0x01, 0x43, 0x5A, 0x02, 0x31, 0xCB, 0x88, 0x00, -/* 00013060 */ 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0xD6, 0x0F, 0x44, 0x43, 0x78, 0x44, -/* 00013070 */ 0x43, 0x0C, 0x78, 0x2B, 0x43, 0x0D, 0x78, 0x27, 0x43, 0x0E, 0x78, 0x2B, 0x43, 0x0F, 0x5A, 0x03, -/* 00013080 */ 0x43, 0x1F, 0x04, 0xFF, 0x41, 0x94, 0x0E, 0x32, 0x8C, 0x02, 0x23, 0x41, 0x07, 0x03, 0x00, 0x5A, -/* 00013090 */ 0x00, 0x02, 0x90, 0x0E, 0x42, 0x5A, 0x01, 0x42, 0xD3, 0x10, 0x42, 0x5A, 0x02, 0x42, 0x1F, 0x03, -/* 000130A0 */ 0x41, 0x41, 0x47, 0x3C, 0x41, 0x8C, 0x02, 0x37, 0x42, 0x4B, 0x42, 0x6A, 0x41, 0x42, 0x13, 0x07, -/* 000130B0 */ 0x03, 0x00, 0x5A, 0x00, 0x42, 0x5A, 0x01, 0x3C, 0x8C, 0x01, 0x16, 0x43, 0x4B, 0x43, 0x5A, 0x02, -/* 000130C0 */ 0x43, 0x1F, 0x03, 0x41, 0x41, 0x47, 0x3D, 0x41, 0x8C, 0x02, 0x37, 0x42, 0x4B, 0x42, 0x6A, 0x41, -/* 000130D0 */ 0x42, 0x0B, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x42, 0x5A, 0x01, 0x3D, 0x5A, 0x02, 0x2C, 0xCB, 0xA0, -/* 000130E0 */ 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x78, 0x33, 0x43, 0x0C, 0x78, -/* 000130F0 */ 0x27, 0x43, 0x0D, 0x78, 0x27, 0x43, 0x0E, 0x78, 0x2B, 0x43, 0x0F, 0x5A, 0x03, 0x43, 0x1F, 0x04, -/* 00013100 */ 0xFF, 0x41, 0x8C, 0x02, 0x37, 0x42, 0x4B, 0x42, 0x6A, 0x41, 0x42, 0x0B, 0x07, 0x04, 0x00, 0x5A, -/* 00013110 */ 0x00, 0x42, 0x90, 0x03, 0x43, 0x5A, 0x01, 0x43, 0x5A, 0x02, 0x33, 0xCB, 0xB8, 0x00, 0x00, 0x00, -/* 00013120 */ 0x08, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x78, 0x3D, 0x43, 0x0C, 0x78, 0x2B, 0x43, 0x0D, -/* 00013130 */ 0x78, 0x27, 0x43, 0x0E, 0x78, 0x2B, 0x43, 0x0F, 0x5A, 0x03, 0x43, 0x1F, 0x04, 0xFF, 0x41, 0x90, -/* 00013140 */ 0x03, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x09, 0xD0, 0x00, 0xB8, 0x00, 0x00, 0x00, -/* 00013150 */ 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, -/* 00013160 */ 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, -/* 00013170 */ 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, -/* 00013180 */ 0x81, 0x01, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 00013190 */ 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, -/* 000131A0 */ 0x70, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, -/* 000131B0 */ 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x5C, 0x00, 0x00, 0x00, -/* 000131C0 */ 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, -/* 000131D0 */ 0x81, 0x01, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 000131E0 */ 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, -/* 000131F0 */ 0x2C, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, -/* 00013200 */ 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, -/* 00013210 */ 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, -/* 00013220 */ 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, -/* 00013230 */ 0x00, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x5E, 0x01, 0x00, 0x00, 0x61, 0x01, 0x00, 0x00, -/* 00013240 */ 0x5D, 0xFE, 0x3F, 0x01, 0xFE, 0x60, 0x01, 0xFE, 0x5E, 0x01, 0xFE, 0x61, 0x01, 0xFE, 0x60, 0x01, -/* 00013250 */ 0xFE, 0x03, 0x03, 0xFE, 0x5E, 0x01, 0xFE, 0x04, 0x03, 0xFE, 0x61, 0x01, 0xFE, 0x05, 0x03, 0xFE, -/* 00013260 */ 0x88, 0x01, 0xFE, 0x83, 0x01, 0xFE, 0x82, 0x01, 0xFE, 0x80, 0x01, 0xFE, 0x81, 0x01, 0xFE, 0x15, -/* 00013270 */ 0x01, 0xFE, 0x15, 0x01, 0xFE, 0x84, 0x01, 0x4D, 0xFE, 0x01, 0xED, 0x28, 0x53, 0x00, 0x00, 0x00, -/* 00013280 */ 0x18, 0x00, 0x3E, 0x00, 0x05, 0x00, 0x1B, 0x00, 0x12, 0x00, 0x3D, 0x00, 0x0E, 0x00, 0x38, 0x00, -/* 00013290 */ 0x1D, 0x00, 0x4C, 0x00, 0xA7, 0x00, 0xA3, 0x03, 0x10, 0x00, 0xF7, 0x20, 0x06, 0x00, 0xFD, 0x0A, -/* 000132A0 */ 0x06, 0x00, 0x25, 0x07, 0x06, 0x00, 0x20, 0x01, 0x06, 0x00, 0x78, 0x01, 0x18, 0x00, 0x5C, 0x00, -/* 000132B0 */ 0x2F, 0x00, 0x36, 0x0F, 0x2A, 0x00, 0x2E, 0x02, 0x2A, 0x00, 0x40, 0x02, 0x2A, 0x00, 0x9A, 0x02, -/* 000132C0 */ 0x0C, 0x00, 0x27, 0x00, 0x05, 0x00, 0xB0, 0x04, 0x17, 0x00, 0x05, 0x02, 0x06, 0x00, 0xDC, 0x03, -/* 000132D0 */ 0x06, 0x00, 0xAC, 0x01, 0x06, 0x00, 0x8F, 0x00, 0x17, 0x00, 0x4C, 0x00, 0x06, 0x00, 0xA4, 0x00, -/* 000132E0 */ 0x14, 0x00, 0x5A, 0x00, 0x47, 0x00, 0xC9, 0x00, 0x23, 0x00, 0x43, 0x00, 0x44, 0x00, 0x4C, 0x01, -/* 000132F0 */ 0x06, 0x00, 0x9E, 0x00, 0x3A, 0x00, 0xB7, 0x00, 0x51, 0x00, 0xC7, 0x00, 0x41, 0x00, 0xCF, 0x00, -/* 00013300 */ 0x45, 0x00, 0x59, 0x05, 0x03, 0x00, 0x61, 0x00, 0x1D, 0x00, 0x3D, 0x01, 0x23, 0x00, 0x7B, 0x00, -/* 00013310 */ 0x3A, 0x00, 0xD7, 0x00, 0x3D, 0x00, 0xDF, 0x00, 0x08, 0x00, 0x1B, 0x00, 0x00, 0xC8, 0x4A, 0x01, -/* 00013320 */ 0x00, 0x77, 0x47, 0x01, 0x00, 0xE9, 0x42, 0x01, 0x00, 0x22, 0x42, 0x01, 0x00, 0x5E, 0x41, 0x01, -/* 00013330 */ 0x00, 0xFC, 0x3E, 0x01, 0x00, 0xB8, 0x3D, 0x01, 0x00, 0x74, 0x3C, 0x01, 0x00, 0x30, 0x3B, 0x01, -/* 00013340 */ 0x00, 0x5A, 0x39, 0x01, 0x00, 0x56, 0x38, 0x01, 0x00, 0x84, 0x37, 0x01, 0x00, 0xEF, 0x36, 0x01, -/* 00013350 */ 0x00, 0x5A, 0x36, 0x01, 0x00, 0xDC, 0x35, 0x01, 0x00, 0xEE, 0x33, 0x01, 0x00, 0x61, 0x33, 0x01, -/* 00013360 */ 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x9B, 0x07, 0x71, 0xA2, 0x41, 0xD1, -/* 00013370 */ 0x00, 0x73, 0xFF, 0xAC, 0x57, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x02, 0xFF, 0xAC, -/* 00013380 */ 0x57, 0x01, 0x00, 0xC9, 0xC9, 0x01, 0x06, 0x03, 0x07, 0x07, 0x17, 0x16, 0x03, 0x03, 0x01, 0x01, -/* 00013390 */ 0x01, 0x01, 0x06, 0x08, 0x43, 0x59, 0x07, 0xB1, 0x05, 0x07, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA6, -/* 000133A0 */ 0x07, 0x47, 0x04, 0x07, 0x8C, 0x02, 0x17, 0x07, 0x4B, 0x07, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x02, -/* 000133B0 */ 0x5A, 0x01, 0x05, 0x8C, 0x01, 0x0E, 0x08, 0x4B, 0x08, 0x5A, 0x02, 0x08, 0x8C, 0x03, 0x03, 0x08, -/* 000133C0 */ 0x5F, 0x08, 0x08, 0x00, 0x5A, 0x03, 0x08, 0x5A, 0x04, 0x03, 0x5A, 0x05, 0x04, 0x1F, 0x06, 0x00, -/* 000133D0 */ 0x07, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xD9, 0x01, 0xFF, 0xBF, 0x57, 0x01, 0x00, -/* 000133E0 */ 0x03, 0x05, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x23, 0x00, 0x32, 0x00, 0x92, 0x00, 0x00, 0x3F, 0x5D, -/* 000133F0 */ 0x00, 0x01, 0x00, 0x8D, 0x07, 0x00, 0xFE, 0x75, 0x07, 0x13, 0xA0, 0x41, 0xC3, 0x00, 0xFE, 0x0D, -/* 00013400 */ 0x04, 0x71, 0xFF, 0x00, 0x00, 0x00, 0x02, 0xFF, 0xDC, 0x51, 0x01, 0x00, 0x01, 0xFF, 0x00, 0x10, -/* 00013410 */ 0x01, 0x00, 0x01, 0x01, 0xFF, 0xDC, 0x51, 0x01, 0x00, 0xFE, 0x60, 0x04, 0xFE, 0x60, 0x04, 0x01, -/* 00013420 */ 0xFE, 0x02, 0x04, 0x07, 0x12, 0x17, 0x05, 0x2B, 0x2A, 0x03, 0x03, 0x14, 0x15, 0x16, 0x06, 0xFE, -/* 00013430 */ 0x0D, 0x04, 0x08, 0x06, 0xFE, 0xF7, 0x03, 0x06, 0xFE, 0x99, 0x04, 0x06, 0xFE, 0x35, 0x04, 0x06, -/* 00013440 */ 0xFE, 0x88, 0x04, 0x06, 0xFE, 0x86, 0x04, 0x06, 0xFE, 0x46, 0x04, 0x06, 0xFE, 0x47, 0x04, 0x06, -/* 00013450 */ 0xFE, 0x48, 0x04, 0x06, 0xFE, 0x49, 0x04, 0x06, 0xFE, 0x4A, 0x04, 0x06, 0xFE, 0x4B, 0x04, 0x06, -/* 00013460 */ 0xFE, 0x4C, 0x04, 0x06, 0xFE, 0x4D, 0x04, 0x06, 0xFE, 0x4E, 0x04, 0x89, 0x59, 0x17, 0xB1, 0x12, -/* 00013470 */ 0x17, 0x4F, 0x13, 0x4F, 0x17, 0x94, 0x02, 0x17, 0x8C, 0x01, 0x0B, 0x17, 0x4B, 0x17, 0x07, 0x03, -/* 00013480 */ 0x00, 0x5A, 0x00, 0x03, 0x5A, 0x01, 0x12, 0x5A, 0x02, 0x02, 0x1F, 0x03, 0x17, 0x17, 0x94, 0x02, -/* 00013490 */ 0x17, 0xCC, 0x17, 0x0E, 0x9F, 0x00, 0x04, 0x17, 0x9F, 0x01, 0x05, 0x17, 0x9F, 0x02, 0x06, 0x17, -/* 000134A0 */ 0x9F, 0x03, 0x07, 0x17, 0x9F, 0x04, 0x08, 0x17, 0x9F, 0x05, 0x09, 0x17, 0x9F, 0x06, 0x0A, 0x17, -/* 000134B0 */ 0x9F, 0x07, 0x0B, 0x17, 0x9F, 0x08, 0x0C, 0x17, 0x9F, 0x09, 0x0D, 0x17, 0x9F, 0x0A, 0x0E, 0x17, -/* 000134C0 */ 0x9F, 0x0B, 0x0F, 0x17, 0x9F, 0x0C, 0x10, 0x17, 0x9F, 0x0D, 0x11, 0x17, 0x47, 0x13, 0x17, 0x8C, -/* 000134D0 */ 0x02, 0x19, 0x17, 0x4B, 0x17, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x5A, 0x01, 0x13, 0x90, 0x02, -/* 000134E0 */ 0x18, 0x5A, 0x02, 0x18, 0xD3, 0x00, 0x18, 0x5A, 0x03, 0x18, 0x1F, 0x04, 0x00, 0x17, 0x09, 0x02, -/* 000134F0 */ 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFF, 0x09, 0x52, 0x01, 0x00, 0x04, 0x0C, 0x00, 0x00, 0x00, 0x19, -/* 00013500 */ 0x00, 0x4C, 0x00, 0x3E, 0x00, 0xE6, 0x01, 0x24, 0x00, 0x00, 0x02, 0x00, 0x10, 0x35, 0x01, 0x00, -/* 00013510 */ 0xBF, 0x4C, 0x00, 0xC1, 0x43, 0xA8, 0x01, 0x00, 0xFE, 0x88, 0x07, 0x44, 0xA2, 0x41, 0xD1, 0x00, -/* 00013520 */ 0x72, 0xFF, 0x6F, 0x54, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFF, 0x6F, 0x54, -/* 00013530 */ 0x01, 0x00, 0xFE, 0xBD, 0x01, 0xFE, 0xBD, 0x01, 0x01, 0x07, 0x07, 0x0B, 0x1B, 0x17, 0x04, 0x01, -/* 00013540 */ 0x04, 0x04, 0x04, 0x04, 0x01, 0x0A, 0x0B, 0x06, 0xFE, 0x86, 0x04, 0x07, 0x06, 0xFE, 0x82, 0x04, -/* 00013550 */ 0x06, 0xFE, 0x80, 0x04, 0x0B, 0x57, 0x4F, 0x09, 0x14, 0x03, 0x00, 0x07, 0x02, 0x09, 0x49, 0x00, -/* 00013560 */ 0x8C, 0x01, 0x02, 0x0C, 0x4B, 0x0C, 0x5F, 0x0C, 0x0C, 0x00, 0x47, 0x09, 0x0C, 0x8C, 0x01, 0x02, -/* 00013570 */ 0x0C, 0x4B, 0x0C, 0x5F, 0x0C, 0x0C, 0x01, 0xA6, 0x0D, 0x15, 0x03, 0x00, 0x0C, 0x0D, 0x09, 0x22, -/* 00013580 */ 0x00, 0x15, 0x03, 0x00, 0x09, 0x03, 0x09, 0x1A, 0x00, 0x74, 0x09, 0x08, 0x02, 0x43, 0x0D, 0x09, -/* 00013590 */ 0x04, 0x47, 0x0C, 0x0D, 0x0F, 0x07, 0x00, 0x0D, 0x43, 0x0D, 0x09, 0x05, 0x47, 0x0C, 0x0D, 0x74, -/* 000135A0 */ 0x0C, 0x08, 0x03, 0x47, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x86, 0x04, -/* 000135B0 */ 0xFE, 0x3C, 0x02, 0xFE, 0x86, 0x04, 0xFE, 0x3D, 0x02, 0xFF, 0x9F, 0x54, 0x01, 0x00, 0x07, 0x02, -/* 000135C0 */ 0x00, 0x00, 0x00, 0x08, 0x00, 0x34, 0x00, 0x0D, 0x00, 0x3B, 0x00, 0x1C, 0x00, 0x52, 0x00, 0x04, -/* 000135D0 */ 0x00, 0x35, 0x00, 0x16, 0x00, 0x63, 0x00, 0x08, 0x00, 0x33, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, -/* 000135E0 */ 0x03, 0x88, 0x01, 0x00, 0xFE, 0x5E, 0x07, 0x1A, 0xA0, 0x41, 0xC1, 0x00, 0xFE, 0x36, 0x04, 0x70, -/* 000135F0 */ 0xFF, 0xB0, 0x4E, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFF, 0xB0, 0x4E, 0x01, -/* 00013600 */ 0x00, 0x82, 0x82, 0x01, 0x05, 0x03, 0x06, 0x04, 0x12, 0x11, 0x03, 0x02, 0x01, 0x01, 0x01, 0x01, -/* 00013610 */ 0x05, 0x08, 0x31, 0x59, 0x06, 0xB1, 0x03, 0x06, 0x4F, 0x04, 0x8C, 0x01, 0x0B, 0x06, 0x4B, 0x06, -/* 00013620 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x03, 0x8C, 0x01, 0x0D, 0x07, 0x4B, 0x07, 0x5A, -/* 00013630 */ 0x02, 0x07, 0x1F, 0x03, 0x06, 0x06, 0x47, 0x04, 0x06, 0x5F, 0x00, 0x04, 0x00, 0x09, 0x02, 0x00, -/* 00013640 */ 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x31, 0x04, 0xFF, 0xCA, 0x4E, 0x01, 0x00, 0x03, 0x07, 0x00, 0x00, -/* 00013650 */ 0x00, 0x1F, 0x00, 0x3E, 0x00, 0x09, 0x00, 0x29, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, -/* 00013660 */ 0x01, 0x00, 0xFE, 0x49, 0x07, 0x1E, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x27, 0x04, 0x6F, 0xFF, 0x5E, -/* 00013670 */ 0x4B, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0x5E, 0x4B, 0x01, 0x00, 0x84, -/* 00013680 */ 0x84, 0x01, 0x06, 0x04, 0x07, 0x0A, 0x1A, 0x1A, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, -/* 00013690 */ 0xFE, 0x27, 0x04, 0x08, 0x4A, 0x59, 0x07, 0xB1, 0x05, 0x07, 0x8C, 0x03, 0x37, 0x08, 0x4B, 0x08, -/* 000136A0 */ 0x6A, 0x07, 0x08, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x08, 0x8C, 0x01, 0x09, 0x09, 0x4B, 0x09, -/* 000136B0 */ 0x5A, 0x01, 0x09, 0xA6, 0x09, 0x5A, 0x02, 0x09, 0x8C, 0x01, 0x0C, 0x09, 0x4B, 0x09, 0x07, 0x04, -/* 000136C0 */ 0x00, 0x5A, 0x00, 0x03, 0x5A, 0x01, 0x05, 0x5A, 0x02, 0x04, 0x5A, 0x03, 0x02, 0x1F, 0x04, 0x09, -/* 000136D0 */ 0x09, 0x5A, 0x03, 0x09, 0x1F, 0x04, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x48, -/* 000136E0 */ 0xFF, 0x7C, 0x4B, 0x01, 0x00, 0x02, 0x05, 0x00, 0x00, 0x00, 0x43, 0x00, 0x65, 0x00, 0x00, 0xBF, -/* 000136F0 */ 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x44, 0x07, 0x17, 0xA2, 0x41, 0xC1, 0x00, 0xFE, -/* 00013700 */ 0x26, 0x04, 0x6E, 0xFF, 0x7C, 0x4A, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, -/* 00013710 */ 0x7C, 0x4A, 0x01, 0x00, 0x76, 0x76, 0x01, 0x06, 0x04, 0x07, 0x0A, 0x1A, 0x1A, 0x03, 0x03, 0x01, -/* 00013720 */ 0x01, 0x01, 0x01, 0x06, 0x06, 0xFE, 0x26, 0x04, 0x08, 0x4A, 0x59, 0x07, 0xB1, 0x05, 0x07, 0x8C, -/* 00013730 */ 0x03, 0x37, 0x08, 0x4B, 0x08, 0x6A, 0x07, 0x08, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x08, 0x8C, -/* 00013740 */ 0x01, 0x08, 0x09, 0x4B, 0x09, 0x5A, 0x01, 0x09, 0xA6, 0x09, 0x5A, 0x02, 0x09, 0x8C, 0x01, 0x0C, -/* 00013750 */ 0x09, 0x4B, 0x09, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x5A, 0x01, 0x05, 0x5A, 0x02, 0x04, 0x5A, -/* 00013760 */ 0x03, 0x02, 0x1F, 0x04, 0x09, 0x09, 0x5A, 0x03, 0x09, 0x1F, 0x04, 0x00, 0x07, 0x09, 0x02, 0x00, -/* 00013770 */ 0xA6, 0x00, 0x24, 0x00, 0x48, 0xFF, 0x9A, 0x4A, 0x01, 0x00, 0x02, 0x05, 0x00, 0x00, 0x00, 0x43, -/* 00013780 */ 0x00, 0x57, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x36, 0x07, 0x1D, -/* 00013790 */ 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x40, 0x04, 0x6D, 0xFF, 0xD6, 0x48, 0x01, 0x00, 0xFF, 0x00, 0x10, -/* 000137A0 */ 0x01, 0x00, 0x04, 0x04, 0xFF, 0xD6, 0x48, 0x01, 0x00, 0xFE, 0x8C, 0x01, 0xFE, 0x8C, 0x01, 0x01, -/* 000137B0 */ 0x08, 0x03, 0x09, 0x04, 0x24, 0x20, 0x03, 0x03, 0x02, 0x02, 0x02, 0x02, 0x08, 0x08, 0x6E, 0x4F, -/* 000137C0 */ 0x06, 0x4F, 0x07, 0x8C, 0x01, 0x0B, 0x09, 0x4B, 0x09, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5A, -/* 000137D0 */ 0x01, 0x03, 0x5A, 0x02, 0x05, 0x1F, 0x03, 0x09, 0x09, 0x47, 0x06, 0x09, 0xA6, 0x09, 0x47, 0x07, -/* 000137E0 */ 0x09, 0xA6, 0x09, 0x14, 0x03, 0x00, 0x04, 0x09, 0x09, 0x18, 0x00, 0x8C, 0x03, 0x03, 0x0A, 0x6A, -/* 000137F0 */ 0x09, 0x0A, 0x00, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x0A, 0x1F, 0x01, 0x09, 0x09, 0x47, 0x07, 0x09, -/* 00013800 */ 0x09, 0x18, 0x00, 0x8C, 0x03, 0x24, 0x0A, 0x6A, 0x09, 0x0A, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 00013810 */ 0x0A, 0x5A, 0x01, 0x04, 0x1F, 0x02, 0x09, 0x09, 0x47, 0x07, 0x09, 0xCC, 0x00, 0x02, 0x9F, 0x00, -/* 00013820 */ 0x06, 0x00, 0x9F, 0x01, 0x07, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x64, 0x02, -/* 00013830 */ 0xFE, 0x38, 0x03, 0xFF, 0xFF, 0x48, 0x01, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00, 0x19, 0x00, 0x3B, -/* 00013840 */ 0x00, 0x05, 0x00, 0x13, 0x00, 0x0A, 0x00, 0x2A, 0x00, 0x18, 0x00, 0x53, 0x00, 0x18, 0x00, 0x75, -/* 00013850 */ 0x00, 0x10, 0x00, 0x22, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x21, -/* 00013860 */ 0x07, 0x1D, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x3F, 0x04, 0x6C, 0xFF, 0xFA, 0x44, 0x01, 0x00, 0xFF, -/* 00013870 */ 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFF, 0xFA, 0x44, 0x01, 0x00, 0xFE, 0xF6, 0x01, 0xFE, 0xF6, -/* 00013880 */ 0x01, 0x01, 0x08, 0x06, 0x0A, 0x04, 0x2A, 0x26, 0x03, 0x01, 0x03, 0x03, 0x03, 0x03, 0x09, 0x06, -/* 00013890 */ 0xFE, 0xF6, 0x03, 0x05, 0xFE, 0x98, 0x04, 0x06, 0xFE, 0x5B, 0x03, 0x06, 0xFE, 0x47, 0x03, 0x8E, -/* 000138A0 */ 0x4F, 0x08, 0x2C, 0x0A, 0x06, 0x15, 0x03, 0x00, 0x0A, 0x02, 0x09, 0x28, 0x00, 0x8C, 0x03, 0x03, -/* 000138B0 */ 0x0B, 0x6A, 0x0A, 0x0B, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0B, 0x47, 0x0C, 0x03, 0x01, 0x04, -/* 000138C0 */ 0x01, 0x0D, 0x07, 0x2F, 0x0C, 0x0C, 0x0D, 0x2F, 0x0C, 0x0C, 0x04, 0x5A, 0x01, 0x0C, 0x5A, 0x02, -/* 000138D0 */ 0x05, 0x1F, 0x03, 0xFF, 0x0A, 0x8C, 0x03, 0x03, 0x0B, 0x6A, 0x0A, 0x0B, 0x01, 0x07, 0x02, 0x00, -/* 000138E0 */ 0x5A, 0x00, 0x0B, 0x5A, 0x01, 0x06, 0x1F, 0x02, 0x0A, 0x0A, 0x47, 0x08, 0x0A, 0xA6, 0x0A, 0x14, -/* 000138F0 */ 0x08, 0x00, 0x08, 0x0A, 0x5F, 0x0A, 0x08, 0x02, 0x0F, 0x28, 0x00, 0x0A, 0x8C, 0x03, 0x03, 0x0B, -/* 00013900 */ 0x6A, 0x0A, 0x0B, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0B, 0x47, 0x0C, 0x03, 0x01, 0x04, 0x01, -/* 00013910 */ 0x0D, 0x07, 0x2F, 0x0C, 0x0C, 0x0D, 0x2F, 0x0C, 0x0C, 0x04, 0x5A, 0x01, 0x0C, 0x5A, 0x02, 0x05, -/* 00013920 */ 0x1F, 0x03, 0xFF, 0x0A, 0x47, 0x00, 0x08, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x8A, -/* 00013930 */ 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0x8F, 0x04, 0xFF, 0x1D, 0x45, 0x01, 0x00, 0x07, 0x02, 0x00, 0x00, -/* 00013940 */ 0x00, 0x0B, 0x00, 0x2F, 0x00, 0x28, 0x00, 0x75, 0x00, 0x18, 0x00, 0x3E, 0x00, 0x0F, 0x00, 0x5D, -/* 00013950 */ 0x00, 0x28, 0x00, 0x76, 0x00, 0x08, 0x00, 0x1D, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, -/* 00013960 */ 0x01, 0x00, 0xFE, 0xFC, 0x06, 0x08, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x47, 0x03, 0x6B, 0xFF, 0x25, -/* 00013970 */ 0x3F, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x01, 0xFF, 0x25, 0x3F, 0x01, 0x00, 0xFE, -/* 00013980 */ 0xB2, 0x03, 0xFE, 0xB2, 0x03, 0x01, 0x0A, 0x04, 0x0A, 0x05, 0x60, 0x59, 0x03, 0x06, 0x0A, 0x09, -/* 00013990 */ 0x0A, 0x0A, 0x09, 0x08, 0x06, 0xFE, 0x47, 0x03, 0xFE, 0x38, 0x01, 0x59, 0x0A, 0xB1, 0x06, 0x0A, -/* 000139A0 */ 0x4F, 0x07, 0x4F, 0x08, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA6, 0x0A, 0x47, 0x04, 0x0A, 0x15, 0x05, -/* 000139B0 */ 0x00, 0x05, 0x02, 0xA6, 0x0A, 0x47, 0x05, 0x0A, 0x4F, 0x07, 0x4F, 0x08, 0x68, 0x09, 0x00, 0x00, -/* 000139C0 */ 0x00, 0x0A, 0x14, 0x0A, 0x00, 0x06, 0x0A, 0xA6, 0x0A, 0x14, 0x03, 0x00, 0x06, 0x0A, 0x09, 0x14, -/* 000139D0 */ 0x00, 0x8C, 0x01, 0x03, 0x0A, 0x07, 0x03, 0x00, 0x5A, 0x01, 0x04, 0x5A, 0x02, 0x05, 0xC1, 0x03, -/* 000139E0 */ 0x00, 0x0A, 0x09, 0xEC, 0x00, 0x8C, 0x03, 0x24, 0x0B, 0x6A, 0x0A, 0x0B, 0x00, 0x07, 0x02, 0x00, -/* 000139F0 */ 0x5A, 0x00, 0x0B, 0x5A, 0x01, 0x06, 0x1F, 0x02, 0x0A, 0x0A, 0x47, 0x07, 0x0A, 0x8C, 0x03, 0x37, -/* 00013A00 */ 0x0B, 0x4B, 0x0B, 0x6A, 0x0A, 0x0B, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0B, 0x5A, 0x01, 0x07, -/* 00013A10 */ 0x1F, 0x02, 0x0A, 0x0A, 0x0F, 0x15, 0x00, 0x0A, 0x8C, 0x03, 0x03, 0x0B, 0x6A, 0x0A, 0x0B, 0x02, -/* 00013A20 */ 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0B, 0x5A, 0x01, 0x03, 0x1F, 0x02, 0xFF, 0x0A, 0x8C, 0x03, 0x03, -/* 00013A30 */ 0x0B, 0x6A, 0x0A, 0x0B, 0x03, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0B, 0x5A, 0x01, 0x07, 0x1F, 0x02, -/* 00013A40 */ 0x0A, 0x0A, 0x47, 0x08, 0x0A, 0xA6, 0x0A, 0x14, 0x03, 0x00, 0x08, 0x0A, 0x09, 0x2F, 0x00, 0x8C, -/* 00013A50 */ 0x03, 0x37, 0x0B, 0x4B, 0x0B, 0x6A, 0x0A, 0x0B, 0x04, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x0B, 0x1F, -/* 00013A60 */ 0x01, 0x0A, 0x0A, 0x47, 0x08, 0x0A, 0x8C, 0x03, 0x03, 0x0B, 0x6A, 0x0A, 0x0B, 0x05, 0x07, 0x03, -/* 00013A70 */ 0x00, 0x5A, 0x00, 0x0B, 0x5A, 0x01, 0x07, 0x5A, 0x02, 0x08, 0x1F, 0x03, 0xFF, 0x0A, 0x8C, 0x01, -/* 00013A80 */ 0x06, 0x0A, 0x4B, 0x0A, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x08, 0x5A, 0x02, 0x04, -/* 00013A90 */ 0x5A, 0x03, 0x05, 0x1F, 0x04, 0xFF, 0x0A, 0x47, 0x0A, 0x08, 0x8C, 0x03, 0x37, 0x0C, 0x4B, 0x0C, -/* 00013AA0 */ 0x6A, 0x0B, 0x0C, 0x06, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x8C, 0x01, 0x0D, 0x0D, 0x4B, 0x0D, -/* 00013AB0 */ 0x5A, 0x01, 0x0D, 0x5A, 0x02, 0x07, 0x1F, 0x03, 0x0B, 0x0B, 0x74, 0x0B, 0x0A, 0x07, 0x5F, 0x0A, -/* 00013AC0 */ 0x08, 0x08, 0x80, 0x0A, 0x0A, 0xF8, 0x00, 0xFA, 0x0A, 0x47, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA6, -/* 00013AD0 */ 0x00, 0x24, 0x00, 0xFE, 0x36, 0x03, 0xB0, 0xFE, 0x8E, 0x02, 0xFE, 0xEF, 0x01, 0x61, 0xFE, 0xF0, -/* 00013AE0 */ 0x01, 0x4D, 0xFE, 0x31, 0x04, 0xFE, 0x31, 0x04, 0xAB, 0xFF, 0x3D, 0x3F, 0x01, 0x00, 0x10, 0x09, -/* 00013AF0 */ 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0E, 0x00, 0x23, 0x00, 0x15, 0x00, 0x3B, 0x00, 0x14, -/* 00013B00 */ 0x00, 0x48, 0x00, 0x18, 0x00, 0x31, 0x00, 0x1B, 0x00, 0x2C, 0x00, 0x15, 0x00, 0x85, 0x00, 0x18, -/* 00013B10 */ 0x00, 0x3F, 0x00, 0x0A, 0x00, 0x32, 0x00, 0x17, 0x00, 0x2B, 0x00, 0x18, 0x00, 0x48, 0x00, 0x19, -/* 00013B20 */ 0x00, 0x95, 0x00, 0x27, 0x00, 0x3C, 0x00, 0x0B, 0x00, 0x33, 0x00, 0x08, 0x00, 0x14, 0x00, 0x00, -/* 00013B30 */ 0xBF, 0x5D, 0x00, 0xC1, 0x03, 0x8D, 0x05, 0x00, 0xFE, 0xE9, 0x06, 0x09, 0xA2, 0x41, 0xD1, 0x00, -/* 00013B40 */ 0x69, 0xFF, 0x6F, 0x3B, 0x01, 0x00, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x06, 0x06, 0xFF, 0x6F, -/* 00013B50 */ 0x3B, 0x01, 0x00, 0xFE, 0x8F, 0x01, 0xFE, 0x8F, 0x01, 0x40, 0x04, 0xF8, 0xFE, 0x92, 0x04, 0xFE, -/* 00013B60 */ 0x93, 0x04, 0xFE, 0x94, 0x04, 0x0C, 0x03, 0x0B, 0x08, 0x16, 0x16, 0x03, 0x03, 0x01, 0x01, 0x01, -/* 00013B70 */ 0x01, 0x08, 0x09, 0x0A, 0x08, 0x42, 0x94, 0x02, 0x03, 0x94, 0x03, 0x04, 0x94, 0x04, 0x05, 0x94, -/* 00013B80 */ 0x05, 0x06, 0x8C, 0x03, 0x03, 0x0C, 0x6A, 0x0B, 0x0C, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, -/* 00013B90 */ 0x8C, 0x03, 0x23, 0x0D, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x90, 0x02, 0x0E, 0x5A, 0x01, 0x0E, -/* 00013BA0 */ 0xD3, 0x00, 0x0E, 0x5A, 0x02, 0x0E, 0x1F, 0x03, 0x0D, 0x0D, 0x5A, 0x01, 0x0D, 0x5A, 0x02, 0x07, -/* 00013BB0 */ 0x1F, 0x03, 0xFF, 0x0B, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xEE, 0x01, 0xFF, 0xBE, 0x3B, 0x01, 0x00, -/* 00013BC0 */ 0x02, 0x0C, 0x00, 0x00, 0x00, 0x34, 0x00, 0x3F, 0x01, 0x00, 0xCE, 0x3B, 0x01, 0x00, 0xBF, 0x5C, -/* 00013BD0 */ 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0xEA, 0x06, 0x45, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x97, -/* 00013BE0 */ 0x04, 0x6A, 0xFF, 0xF7, 0x3B, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x01, 0xFF, 0xF7, -/* 00013BF0 */ 0x3B, 0x01, 0x00, 0xE6, 0xE6, 0x01, 0x07, 0x03, 0x07, 0x09, 0x1C, 0x1A, 0x04, 0x05, 0x01, 0x01, -/* 00013C00 */ 0x01, 0x01, 0x06, 0x08, 0x57, 0x59, 0x07, 0xB1, 0x05, 0x07, 0x15, 0x05, 0x00, 0x03, 0x02, 0xA6, -/* 00013C10 */ 0x07, 0x47, 0x03, 0x07, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA6, 0x07, 0x47, 0x04, 0x07, 0x8C, 0x02, -/* 00013C20 */ 0x02, 0x08, 0x6A, 0x07, 0x08, 0x00, 0x07, 0x08, 0x00, 0x5A, 0x00, 0x08, 0x5A, 0x01, 0x05, 0x8C, -/* 00013C30 */ 0x01, 0x02, 0x09, 0x5A, 0x02, 0x09, 0x8C, 0x01, 0x03, 0x09, 0x5A, 0x03, 0x09, 0x8C, 0x01, 0x04, -/* 00013C40 */ 0x09, 0x5A, 0x04, 0x09, 0x8C, 0x01, 0x05, 0x09, 0x5A, 0x05, 0x09, 0x5A, 0x06, 0x03, 0x5A, 0x07, -/* 00013C50 */ 0x04, 0x1F, 0x08, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x53, 0xFF, 0x23, 0x3C, -/* 00013C60 */ 0x01, 0x00, 0x04, 0x05, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0A, 0x00, 0x27, 0x00, 0x3C, -/* 00013C70 */ 0x00, 0x7D, 0x00, 0x00, 0xBF, 0x5D, 0x00, 0xC1, 0x03, 0x8D, 0x05, 0x00, 0xFE, 0xE3, 0x06, 0x09, -/* 00013C80 */ 0xA2, 0x41, 0xD1, 0x00, 0x67, 0xFF, 0x2F, 0x39, 0x01, 0x00, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, -/* 00013C90 */ 0x06, 0x06, 0xFF, 0x2F, 0x39, 0x01, 0x00, 0xFE, 0x8F, 0x01, 0xFE, 0x8F, 0x01, 0x40, 0x04, 0xF8, -/* 00013CA0 */ 0xFE, 0x92, 0x04, 0xFE, 0x93, 0x04, 0xFE, 0x94, 0x04, 0x0C, 0x03, 0x0B, 0x08, 0x16, 0x16, 0x03, -/* 00013CB0 */ 0x03, 0x01, 0x01, 0x01, 0x01, 0x08, 0x09, 0x0A, 0x08, 0x42, 0x94, 0x02, 0x03, 0x94, 0x03, 0x04, -/* 00013CC0 */ 0x94, 0x04, 0x05, 0x94, 0x05, 0x06, 0x8C, 0x03, 0x03, 0x0C, 0x6A, 0x0B, 0x0C, 0x00, 0x07, 0x03, -/* 00013CD0 */ 0x00, 0x5A, 0x00, 0x0C, 0x8C, 0x03, 0x23, 0x0D, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x90, 0x02, -/* 00013CE0 */ 0x0E, 0x5A, 0x01, 0x0E, 0xD3, 0x00, 0x0E, 0x5A, 0x02, 0x0E, 0x1F, 0x03, 0x0D, 0x0D, 0x5A, 0x01, -/* 00013CF0 */ 0x0D, 0x5A, 0x02, 0x07, 0x1F, 0x03, 0xFF, 0x0B, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xEE, 0x01, 0xFF, -/* 00013D00 */ 0x7E, 0x39, 0x01, 0x00, 0x02, 0x0C, 0x00, 0x00, 0x00, 0x34, 0x00, 0x3F, 0x01, 0x00, 0x12, 0x3D, -/* 00013D10 */ 0x01, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0xE4, 0x06, 0x45, 0xA2, 0x41, -/* 00013D20 */ 0xC3, 0x00, 0xFE, 0x96, 0x04, 0x68, 0xFF, 0xB7, 0x39, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, -/* 00013D30 */ 0x03, 0x01, 0xFF, 0xB7, 0x39, 0x01, 0x00, 0xE6, 0xE6, 0x01, 0x07, 0x03, 0x07, 0x09, 0x1C, 0x1A, -/* 00013D40 */ 0x04, 0x05, 0x01, 0x01, 0x01, 0x01, 0x06, 0x08, 0x57, 0x59, 0x07, 0xB1, 0x05, 0x07, 0x15, 0x05, -/* 00013D50 */ 0x00, 0x03, 0x02, 0xA6, 0x07, 0x47, 0x03, 0x07, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA6, 0x07, 0x47, -/* 00013D60 */ 0x04, 0x07, 0x8C, 0x02, 0x02, 0x08, 0x6A, 0x07, 0x08, 0x00, 0x07, 0x08, 0x00, 0x5A, 0x00, 0x08, -/* 00013D70 */ 0x5A, 0x01, 0x05, 0x8C, 0x01, 0x02, 0x09, 0x5A, 0x02, 0x09, 0x8C, 0x01, 0x03, 0x09, 0x5A, 0x03, -/* 00013D80 */ 0x09, 0x8C, 0x01, 0x04, 0x09, 0x5A, 0x04, 0x09, 0x8C, 0x01, 0x05, 0x09, 0x5A, 0x05, 0x09, 0x5A, -/* 00013D90 */ 0x06, 0x03, 0x5A, 0x07, 0x04, 0x1F, 0x08, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, -/* 00013DA0 */ 0x53, 0xFF, 0xE3, 0x39, 0x01, 0x00, 0x04, 0x05, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0A, -/* 00013DB0 */ 0x00, 0x27, 0x00, 0x3C, 0x00, 0x7D, 0x00, 0x00, 0xBF, 0x5D, 0x00, 0xC1, 0x03, 0x8D, 0x05, 0x00, -/* 00013DC0 */ 0xFE, 0xDD, 0x06, 0x09, 0xA2, 0x41, 0xD1, 0x00, 0x65, 0xFF, 0x01, 0x37, 0x01, 0x00, 0x01, 0xFF, -/* 00013DD0 */ 0x00, 0x10, 0x01, 0x00, 0x06, 0x06, 0xFF, 0x01, 0x37, 0x01, 0x00, 0xFE, 0x8B, 0x01, 0xFE, 0x8B, -/* 00013DE0 */ 0x01, 0x40, 0x04, 0xF8, 0xFE, 0x92, 0x04, 0xFE, 0x93, 0x04, 0xFE, 0x94, 0x04, 0x0C, 0x03, 0x0B, -/* 00013DF0 */ 0x08, 0x16, 0x16, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x08, 0x09, 0x0A, 0x08, 0x42, 0x94, 0x02, -/* 00013E00 */ 0x03, 0x94, 0x03, 0x04, 0x94, 0x04, 0x05, 0x94, 0x05, 0x06, 0x8C, 0x03, 0x03, 0x0C, 0x6A, 0x0B, -/* 00013E10 */ 0x0C, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x8C, 0x03, 0x23, 0x0D, 0x07, 0x03, 0x00, 0x5A, -/* 00013E20 */ 0x00, 0x02, 0x90, 0x02, 0x0E, 0x5A, 0x01, 0x0E, 0xD3, 0x00, 0x0E, 0x5A, 0x02, 0x0E, 0x1F, 0x03, -/* 00013E30 */ 0x0D, 0x0D, 0x5A, 0x01, 0x0D, 0x5A, 0x02, 0x07, 0x1F, 0x03, 0xFF, 0x0B, 0xA6, 0x00, 0x24, 0x00, -/* 00013E40 */ 0xFE, 0xEE, 0x01, 0xFF, 0x50, 0x37, 0x01, 0x00, 0x02, 0x0C, 0x00, 0x00, 0x00, 0x34, 0x00, 0x3B, -/* 00013E50 */ 0x01, 0x00, 0x56, 0x3E, 0x01, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0xDE, -/* 00013E60 */ 0x06, 0x45, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x95, 0x04, 0x66, 0xFF, 0x89, 0x37, 0x01, 0x00, 0xFF, -/* 00013E70 */ 0x00, 0x10, 0x01, 0x00, 0x03, 0x01, 0xFF, 0x89, 0x37, 0x01, 0x00, 0xE2, 0xE2, 0x01, 0x07, 0x03, -/* 00013E80 */ 0x07, 0x09, 0x1C, 0x1A, 0x04, 0x05, 0x01, 0x01, 0x01, 0x01, 0x06, 0x08, 0x57, 0x59, 0x07, 0xB1, -/* 00013E90 */ 0x05, 0x07, 0x15, 0x05, 0x00, 0x03, 0x02, 0xA6, 0x07, 0x47, 0x03, 0x07, 0x15, 0x05, 0x00, 0x04, -/* 00013EA0 */ 0x02, 0xA6, 0x07, 0x47, 0x04, 0x07, 0x8C, 0x02, 0x02, 0x08, 0x6A, 0x07, 0x08, 0x00, 0x07, 0x08, -/* 00013EB0 */ 0x00, 0x5A, 0x00, 0x08, 0x5A, 0x01, 0x05, 0x8C, 0x01, 0x02, 0x09, 0x5A, 0x02, 0x09, 0x8C, 0x01, -/* 00013EC0 */ 0x03, 0x09, 0x5A, 0x03, 0x09, 0x8C, 0x01, 0x04, 0x09, 0x5A, 0x04, 0x09, 0x8C, 0x01, 0x05, 0x09, -/* 00013ED0 */ 0x5A, 0x05, 0x09, 0x5A, 0x06, 0x03, 0x5A, 0x07, 0x04, 0x1F, 0x08, 0x00, 0x07, 0x09, 0x02, 0x00, -/* 00013EE0 */ 0xA6, 0x00, 0x24, 0x00, 0x53, 0xFF, 0xB1, 0x37, 0x01, 0x00, 0x04, 0x05, 0x00, 0x00, 0x00, 0x0A, -/* 00013EF0 */ 0x00, 0x15, 0x00, 0x0A, 0x00, 0x27, 0x00, 0x3C, 0x00, 0x7D, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, -/* 00013F00 */ 0x07, 0x88, 0x01, 0x00, 0xFE, 0xA6, 0x06, 0x08, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x37, 0x04, 0x64, -/* 00013F10 */ 0xFF, 0x80, 0x28, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x07, 0x07, 0xFF, 0x80, 0x28, 0x01, -/* 00013F20 */ 0x00, 0xFE, 0x16, 0x06, 0xFE, 0x16, 0x06, 0x01, 0x0E, 0x08, 0x12, 0x0A, 0x89, 0x83, 0x03, 0x07, -/* 00013F30 */ 0x08, 0x08, 0x08, 0x08, 0x01, 0x11, 0x06, 0xFE, 0xF6, 0x03, 0x06, 0xFE, 0x41, 0x04, 0x05, 0xFE, -/* 00013F40 */ 0x91, 0x04, 0x08, 0x0C, 0x0B, 0xFE, 0xBB, 0x01, 0x59, 0x12, 0xB1, 0x0E, 0x12, 0x4F, 0x0F, 0x4F, -/* 00013F50 */ 0x10, 0x2C, 0x12, 0x0E, 0x15, 0x0D, 0x00, 0x12, 0x02, 0x8C, 0x03, 0x0C, 0x12, 0xE1, 0x12, 0x0E, -/* 00013F60 */ 0x12, 0x00, 0x0F, 0x18, 0x00, 0x12, 0x8C, 0x03, 0x03, 0x13, 0x6A, 0x12, 0x13, 0x00, 0x07, 0x03, -/* 00013F70 */ 0x00, 0x5A, 0x00, 0x13, 0x5A, 0x01, 0x08, 0x5A, 0x02, 0x03, 0x1F, 0x03, 0xFF, 0x12, 0x8C, 0x03, -/* 00013F80 */ 0x37, 0x13, 0x4B, 0x13, 0x6A, 0x12, 0x13, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x13, 0x8C, 0x03, -/* 00013F90 */ 0x0C, 0x14, 0x07, 0x02, 0x00, 0x5A, 0x01, 0x0E, 0xC1, 0x02, 0x14, 0x14, 0x5A, 0x01, 0x14, 0x1F, -/* 00013FA0 */ 0x02, 0x12, 0x12, 0x47, 0x0F, 0x12, 0x8C, 0x03, 0x37, 0x13, 0x4B, 0x13, 0x6A, 0x12, 0x13, 0x02, -/* 00013FB0 */ 0x07, 0x02, 0x00, 0x5A, 0x00, 0x13, 0x5A, 0x01, 0x0F, 0x1F, 0x02, 0x12, 0x12, 0x0F, 0x1B, 0x00, -/* 00013FC0 */ 0x12, 0x8C, 0x03, 0x37, 0x13, 0x4B, 0x13, 0x6A, 0x12, 0x13, 0x03, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 00013FD0 */ 0x13, 0x5A, 0x01, 0x0F, 0x1F, 0x02, 0x12, 0x12, 0x0F, 0x06, 0x00, 0x12, 0x47, 0x00, 0x04, 0x09, -/* 00013FE0 */ 0x1F, 0x01, 0xA6, 0x12, 0x47, 0x10, 0x12, 0x8C, 0x03, 0x03, 0x12, 0x5F, 0x12, 0x12, 0x04, 0x0E, -/* 00013FF0 */ 0x89, 0x00, 0x12, 0xA6, 0x12, 0x14, 0x03, 0x00, 0x0C, 0x12, 0x09, 0x7F, 0x00, 0xA6, 0x12, 0x14, -/* 00014000 */ 0x03, 0x00, 0x0D, 0x12, 0x09, 0x75, 0x00, 0x8C, 0x01, 0x0A, 0x12, 0x4B, 0x12, 0x95, 0x12, 0x12, -/* 00014010 */ 0x0B, 0x0E, 0x10, 0x00, 0x12, 0x8C, 0x01, 0x0A, 0x12, 0x4B, 0x12, 0x95, 0x12, 0x12, 0x0B, 0x47, -/* 00014020 */ 0x10, 0x12, 0x09, 0x57, 0x00, 0x8C, 0x03, 0x37, 0x13, 0x4B, 0x13, 0x6A, 0x12, 0x13, 0x05, 0x07, -/* 00014030 */ 0x01, 0x00, 0x5A, 0x00, 0x13, 0x1F, 0x01, 0x12, 0x12, 0x47, 0x10, 0x12, 0x8C, 0x01, 0x06, 0x12, -/* 00014040 */ 0x4B, 0x12, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x05, 0x5A, 0x01, 0x10, 0xA6, 0x13, 0x5A, 0x02, 0x13, -/* 00014050 */ 0x8C, 0x01, 0x07, 0x13, 0x4B, 0x13, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x05, 0xA6, 0x14, 0x5A, 0x01, -/* 00014060 */ 0x14, 0x5A, 0x02, 0x09, 0x5A, 0x03, 0x0A, 0x1F, 0x04, 0x13, 0x13, 0x5A, 0x03, 0x13, 0x1F, 0x04, -/* 00014070 */ 0xFF, 0x12, 0x8C, 0x01, 0x0A, 0x12, 0x4B, 0x12, 0x9A, 0x10, 0x12, 0x0B, 0x0F, 0x49, 0x00, 0x10, -/* 00014080 */ 0x8C, 0x03, 0x37, 0x13, 0x4B, 0x13, 0x6A, 0x12, 0x13, 0x05, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x13, -/* 00014090 */ 0x1F, 0x01, 0x12, 0x12, 0x47, 0x10, 0x12, 0x8C, 0x01, 0x06, 0x12, 0x4B, 0x12, 0x07, 0x04, 0x00, -/* 000140A0 */ 0x5A, 0x00, 0x05, 0x5A, 0x01, 0x10, 0x5A, 0x02, 0x0C, 0x8C, 0x01, 0x07, 0x13, 0x4B, 0x13, 0x07, -/* 000140B0 */ 0x04, 0x00, 0x5A, 0x00, 0x05, 0x5A, 0x01, 0x0D, 0x5A, 0x02, 0x09, 0x5A, 0x03, 0x0A, 0x1F, 0x04, -/* 000140C0 */ 0x13, 0x13, 0x5A, 0x03, 0x13, 0x1F, 0x04, 0xFF, 0x12, 0x8C, 0x03, 0x03, 0x13, 0x6A, 0x12, 0x13, -/* 000140D0 */ 0x06, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x13, 0x5A, 0x01, 0x10, 0x8C, 0x03, 0x24, 0x15, 0x6A, 0x14, -/* 000140E0 */ 0x15, 0x07, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x15, 0x5A, 0x01, 0x0E, 0x1F, 0x02, 0x14, 0x14, 0x5A, -/* 000140F0 */ 0x02, 0x14, 0x5A, 0x03, 0x06, 0x5A, 0x04, 0x07, 0x1F, 0x05, 0x00, 0x12, 0x09, 0x02, 0x00, 0xA6, -/* 00014100 */ 0x00, 0x24, 0x00, 0xFE, 0x8A, 0x02, 0x8D, 0xB4, 0xB1, 0xFE, 0x61, 0x03, 0x61, 0xFE, 0xE6, 0x01, -/* 00014110 */ 0xFE, 0x38, 0x03, 0xFF, 0xF5, 0x28, 0x01, 0x00, 0x11, 0x09, 0x00, 0x00, 0x00, 0x15, 0x00, 0x4B, -/* 00014120 */ 0x00, 0x18, 0x00, 0x48, 0x00, 0x28, 0x00, 0x35, 0x00, 0x36, 0x00, 0x3C, 0x00, 0x06, 0x00, 0x32, -/* 00014130 */ 0x00, 0x05, 0x00, 0x29, 0x00, 0x20, 0x00, 0xC6, 0x00, 0x0E, 0x00, 0x7C, 0x00, 0x10, 0x00, 0x96, -/* 00014140 */ 0x00, 0x17, 0x00, 0x2E, 0x00, 0x36, 0x00, 0x76, 0x00, 0x0A, 0x00, 0x70, 0x00, 0x04, 0x00, 0x24, -/* 00014150 */ 0x00, 0x17, 0x00, 0x2A, 0x00, 0x32, 0x00, 0x79, 0x00, 0x38, 0x00, 0x8E, 0x00, 0x00, 0xBF, 0x5C, -/* 00014160 */ 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x96, 0x06, 0x26, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x3D, -/* 00014170 */ 0x04, 0x63, 0xFF, 0x15, 0x26, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFF, 0x15, -/* 00014180 */ 0x26, 0x01, 0x00, 0xFD, 0xFD, 0x01, 0x05, 0x04, 0x07, 0x06, 0x22, 0x22, 0x03, 0x02, 0x04, 0x04, -/* 00014190 */ 0x04, 0x04, 0x06, 0x0B, 0x0C, 0x6D, 0x8C, 0x03, 0x37, 0x08, 0x4B, 0x08, 0x6A, 0x07, 0x08, 0x00, -/* 000141A0 */ 0x07, 0x02, 0x00, 0x5A, 0x00, 0x08, 0x5A, 0x01, 0x05, 0x1F, 0x02, 0x07, 0x07, 0x0F, 0x1B, 0x00, -/* 000141B0 */ 0x07, 0x8C, 0x03, 0x37, 0x08, 0x4B, 0x08, 0x6A, 0x07, 0x08, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 000141C0 */ 0x08, 0x5A, 0x01, 0x05, 0x1F, 0x02, 0x07, 0x07, 0x0F, 0x12, 0x00, 0x07, 0x8C, 0x03, 0x03, 0x08, -/* 000141D0 */ 0x6A, 0x07, 0x08, 0x02, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x08, 0x1F, 0x01, 0xFF, 0x07, 0x8C, 0x03, -/* 000141E0 */ 0x03, 0x08, 0x6A, 0x07, 0x08, 0x03, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x08, 0x5A, 0x01, 0x04, 0x5A, -/* 000141F0 */ 0x02, 0x05, 0x5A, 0x03, 0x02, 0x5A, 0x04, 0x03, 0x1F, 0x05, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA6, -/* 00014200 */ 0x00, 0x24, 0x00, 0xB4, 0xB1, 0xFE, 0x86, 0x02, 0xFE, 0xE6, 0x01, 0xFF, 0x35, 0x26, 0x01, 0x00, -/* 00014210 */ 0x04, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x34, 0x00, 0x12, 0x00, 0x38, 0x00, 0x23, 0x00, 0x70, -/* 00014220 */ 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x8E, 0x06, 0x1F, 0xA2, 0x41, -/* 00014230 */ 0xC1, 0x00, 0xFE, 0x3C, 0x04, 0x62, 0xFF, 0xEE, 0x24, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, -/* 00014240 */ 0x03, 0x03, 0xFF, 0xEE, 0x24, 0x01, 0x00, 0xFE, 0xFE, 0x00, 0xFE, 0xFE, 0x00, 0x01, 0x05, 0x03, -/* 00014250 */ 0x06, 0x06, 0x22, 0x22, 0x03, 0x02, 0x04, 0x04, 0x04, 0x04, 0x05, 0x0C, 0x6D, 0x8C, 0x03, 0x37, -/* 00014260 */ 0x07, 0x4B, 0x07, 0x6A, 0x06, 0x07, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x07, 0x5A, 0x01, 0x04, -/* 00014270 */ 0x1F, 0x02, 0x06, 0x06, 0x0F, 0x1B, 0x00, 0x06, 0x8C, 0x03, 0x37, 0x07, 0x4B, 0x07, 0x6A, 0x06, -/* 00014280 */ 0x07, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x07, 0x5A, 0x01, 0x04, 0x1F, 0x02, 0x06, 0x06, 0x0F, -/* 00014290 */ 0x12, 0x00, 0x06, 0x8C, 0x03, 0x03, 0x07, 0x6A, 0x06, 0x07, 0x02, 0x07, 0x01, 0x00, 0x5A, 0x00, -/* 000142A0 */ 0x07, 0x1F, 0x01, 0xFF, 0x06, 0x8C, 0x03, 0x03, 0x07, 0x6A, 0x06, 0x07, 0x03, 0x07, 0x05, 0x00, -/* 000142B0 */ 0x5A, 0x00, 0x07, 0x5A, 0x01, 0x03, 0x5A, 0x02, 0x04, 0x5A, 0x03, 0x02, 0x5A, 0x04, 0x02, 0x1F, -/* 000142C0 */ 0x05, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xB4, 0xB1, 0xFE, 0x86, 0x02, 0xFE, -/* 000142D0 */ 0xE6, 0x01, 0xFF, 0x0E, 0x25, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x34, 0x00, -/* 000142E0 */ 0x12, 0x00, 0x38, 0x00, 0x23, 0x00, 0x71, 0x00, 0x00, 0x3F, 0x5D, 0x00, 0xC1, 0x43, 0xAD, 0x05, -/* 000142F0 */ 0x00, 0xFE, 0x5F, 0x06, 0x22, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x3B, 0x04, 0x5D, 0xFF, 0xCC, 0x1D, -/* 00014300 */ 0x01, 0x00, 0x04, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFF, 0xCC, 0x1D, 0x01, 0x00, 0xFE, -/* 00014310 */ 0x00, 0x07, 0xFE, 0x00, 0x07, 0x02, 0xFE, 0xCA, 0x01, 0xFE, 0x90, 0x04, 0x0B, 0x0F, 0x15, 0x04, -/* 00014320 */ 0x68, 0x66, 0x03, 0x04, 0x03, 0x03, 0x03, 0x03, 0x01, 0x12, 0x13, 0x14, 0x15, 0x07, 0x0B, 0x06, -/* 00014330 */ 0xFE, 0x56, 0x04, 0x05, 0xFE, 0x53, 0x04, 0x06, 0xFE, 0x46, 0x04, 0x06, 0xFE, 0x48, 0x04, 0x06, -/* 00014340 */ 0xFE, 0x49, 0x04, 0x06, 0xFE, 0x4A, 0x04, 0x05, 0xFE, 0x58, 0x04, 0x06, 0xFE, 0x4B, 0x04, 0x06, -/* 00014350 */ 0xFE, 0x4C, 0x04, 0x06, 0xFE, 0x4D, 0x04, 0x06, 0xFE, 0x54, 0x04, 0xFE, 0x61, 0x01, 0x94, 0x02, -/* 00014360 */ 0x0F, 0x4F, 0x16, 0x94, 0x03, 0x16, 0x90, 0x02, 0x16, 0xA6, 0x17, 0x14, 0x03, 0x00, 0x16, 0x17, -/* 00014370 */ 0x09, 0x06, 0x00, 0x47, 0x16, 0x02, 0x09, 0x1B, 0x00, 0x8C, 0x03, 0x24, 0x18, 0x6A, 0x17, 0x18, -/* 00014380 */ 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x18, 0x90, 0x02, 0x19, 0x5A, 0x01, 0x19, 0x1F, 0x02, 0x17, -/* 00014390 */ 0x17, 0x47, 0x16, 0x17, 0x94, 0x02, 0x16, 0x8C, 0x03, 0x37, 0x17, 0x4B, 0x17, 0x6A, 0x16, 0x17, -/* 000143A0 */ 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x17, 0x90, 0x02, 0x18, 0x5A, 0x01, 0x18, 0x1F, 0x02, 0x16, -/* 000143B0 */ 0x16, 0x94, 0x02, 0x16, 0x94, 0x03, 0x03, 0x14, 0x08, 0x00, 0x10, 0x04, 0x14, 0x03, 0x00, 0x10, -/* 000143C0 */ 0x05, 0x09, 0x30, 0x00, 0x8C, 0x03, 0x37, 0x17, 0x4B, 0x17, 0x6A, 0x16, 0x17, 0x02, 0x07, 0x03, -/* 000143D0 */ 0x00, 0x5A, 0x00, 0x17, 0xCC, 0x18, 0x04, 0x9F, 0x00, 0x06, 0x18, 0x9F, 0x01, 0x07, 0x18, 0x9F, -/* 000143E0 */ 0x02, 0x08, 0x18, 0x9F, 0x03, 0x09, 0x18, 0x5A, 0x01, 0x18, 0xD3, 0x00, 0x18, 0x5A, 0x02, 0x18, -/* 000143F0 */ 0x1F, 0x03, 0xFF, 0x16, 0x14, 0x08, 0x00, 0x10, 0x0A, 0x14, 0x03, 0x00, 0x10, 0x05, 0x09, 0x2C, -/* 00014400 */ 0x00, 0x8C, 0x03, 0x37, 0x17, 0x4B, 0x17, 0x6A, 0x16, 0x17, 0x02, 0x07, 0x03, 0x00, 0x5A, 0x00, -/* 00014410 */ 0x17, 0xCC, 0x18, 0x03, 0x9F, 0x00, 0x0B, 0x18, 0x9F, 0x01, 0x0C, 0x18, 0x9F, 0x02, 0x0D, 0x18, -/* 00014420 */ 0x5A, 0x01, 0x18, 0xD3, 0x01, 0x18, 0x5A, 0x02, 0x18, 0x1F, 0x03, 0xFF, 0x16, 0x90, 0x03, 0x16, -/* 00014430 */ 0x14, 0x03, 0x00, 0x16, 0x03, 0x09, 0x39, 0x00, 0x14, 0x08, 0x00, 0x11, 0x04, 0x14, 0x03, 0x00, -/* 00014440 */ 0x11, 0x0E, 0x09, 0x2C, 0x00, 0x8C, 0x03, 0x37, 0x17, 0x4B, 0x17, 0x6A, 0x16, 0x17, 0x02, 0x07, -/* 00014450 */ 0x03, 0x00, 0x5A, 0x00, 0x17, 0xCC, 0x18, 0x03, 0x9F, 0x00, 0x07, 0x18, 0x9F, 0x01, 0x08, 0x18, -/* 00014460 */ 0x9F, 0x02, 0x09, 0x18, 0x5A, 0x01, 0x18, 0xD3, 0x02, 0x18, 0x5A, 0x02, 0x18, 0x1F, 0x03, 0xFF, -/* 00014470 */ 0x16, 0x90, 0x03, 0x16, 0x14, 0x03, 0x00, 0x16, 0x03, 0x09, 0x39, 0x00, 0x14, 0x08, 0x00, 0x11, -/* 00014480 */ 0x0A, 0x14, 0x03, 0x00, 0x11, 0x0E, 0x09, 0x2C, 0x00, 0x8C, 0x03, 0x37, 0x17, 0x4B, 0x17, 0x6A, -/* 00014490 */ 0x16, 0x17, 0x02, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x17, 0xCC, 0x18, 0x03, 0x9F, 0x00, 0x0B, 0x18, -/* 000144A0 */ 0x9F, 0x01, 0x0C, 0x18, 0x9F, 0x02, 0x0D, 0x18, 0x5A, 0x01, 0x18, 0xD3, 0x03, 0x18, 0x5A, 0x02, -/* 000144B0 */ 0x18, 0x1F, 0x03, 0xFF, 0x16, 0x90, 0x02, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, -/* 000144C0 */ 0x36, 0x03, 0x61, 0x86, 0xFF, 0x01, 0x1E, 0x01, 0x00, 0x0D, 0x08, 0x00, 0x00, 0x00, 0x31, 0x00, -/* 000144D0 */ 0x51, 0x00, 0x1D, 0x00, 0x29, 0x00, 0x03, 0x00, 0x25, 0x00, 0x0D, 0x00, 0x41, 0x00, 0x30, 0x00, -/* 000144E0 */ 0x14, 0x01, 0x0D, 0x00, 0x41, 0x00, 0x2C, 0x00, 0x0D, 0x01, 0x18, 0x00, 0x5C, 0x00, 0x2C, 0x00, -/* 000144F0 */ 0x5A, 0x01, 0x18, 0x00, 0x5C, 0x00, 0x2C, 0x00, 0x5E, 0x01, 0x08, 0x00, 0x18, 0x00, 0x00, 0x10, -/* 00014500 */ 0x47, 0x01, 0x00, 0xA9, 0x46, 0x01, 0x00, 0xDC, 0x45, 0x01, 0x00, 0x0F, 0x45, 0x01, 0x00, 0xBF, -/* 00014510 */ 0x5C, 0x00, 0xC1, 0x13, 0x88, 0x21, 0x00, 0xFE, 0x81, 0x06, 0x38, 0xA2, 0x41, 0xD1, 0x00, 0x61, -/* 00014520 */ 0xFF, 0x7D, 0x23, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0x7D, 0x23, 0x01, -/* 00014530 */ 0x00, 0xFE, 0x19, 0x01, 0xFE, 0x19, 0x01, 0x41, 0x05, 0x09, 0x0B, 0x05, 0x12, 0x12, 0x04, 0x02, -/* 00014540 */ 0x05, 0x05, 0x05, 0x05, 0x01, 0x0A, 0x06, 0xFE, 0x40, 0x03, 0x06, 0xFE, 0x13, 0x04, 0x06, 0xFE, -/* 00014550 */ 0x42, 0x03, 0x0B, 0x06, 0xFE, 0x43, 0x03, 0x06, 0xFE, 0x44, 0x03, 0x07, 0x42, 0x8C, 0x04, 0x37, -/* 00014560 */ 0x0C, 0x4B, 0x0C, 0x6A, 0x0B, 0x0C, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x0C, 0x8C, 0x01, 0x02, -/* 00014570 */ 0x0D, 0x5A, 0x01, 0x0D, 0x5A, 0x02, 0x09, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 00014580 */ 0x0D, 0x00, 0x00, 0x00, 0x78, 0x03, 0x0D, 0x01, 0x78, 0x05, 0x0D, 0x02, 0x78, 0x05, 0x0D, 0x03, -/* 00014590 */ 0x78, 0x05, 0x0D, 0x04, 0x5A, 0x03, 0x0D, 0x1F, 0x04, 0xFF, 0x0B, 0xA6, 0x00, 0x24, 0x00, 0x01, -/* 000145A0 */ 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, -/* 000145B0 */ 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0xFE, 0x88, -/* 000145C0 */ 0x01, 0xFE, 0x83, 0x01, 0xFE, 0x82, 0x01, 0xFE, 0x80, 0x01, 0xFE, 0x81, 0x01, 0xFF, 0xA3, 0x23, -/* 000145D0 */ 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0xF2, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, -/* 000145E0 */ 0x13, 0x88, 0x21, 0x00, 0xFE, 0x76, 0x06, 0x34, 0xA2, 0x41, 0xD1, 0x00, 0x60, 0xFF, 0xC3, 0x21, -/* 000145F0 */ 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0xC3, 0x21, 0x01, 0x00, 0xFE, 0x19, -/* 00014600 */ 0x01, 0xFE, 0x19, 0x01, 0x41, 0x05, 0x09, 0x0B, 0x05, 0x12, 0x12, 0x04, 0x02, 0x05, 0x05, 0x05, -/* 00014610 */ 0x05, 0x01, 0x0A, 0x06, 0xFE, 0x40, 0x03, 0x06, 0xFE, 0x13, 0x04, 0x06, 0xFE, 0x42, 0x03, 0x0B, -/* 00014620 */ 0x06, 0xFE, 0x43, 0x03, 0x06, 0xFE, 0x44, 0x03, 0x07, 0x42, 0x8C, 0x04, 0x37, 0x0C, 0x4B, 0x0C, -/* 00014630 */ 0x6A, 0x0B, 0x0C, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x0C, 0x8C, 0x01, 0x02, 0x0D, 0x5A, 0x01, -/* 00014640 */ 0x0D, 0x5A, 0x02, 0x09, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, -/* 00014650 */ 0x00, 0x78, 0x03, 0x0D, 0x01, 0x78, 0x05, 0x0D, 0x02, 0x78, 0x05, 0x0D, 0x03, 0x78, 0x05, 0x0D, -/* 00014660 */ 0x04, 0x5A, 0x03, 0x0D, 0x1F, 0x04, 0xFF, 0x0B, 0xA6, 0x00, 0x24, 0x00, 0x01, 0x18, 0x00, 0x00, -/* 00014670 */ 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, -/* 00014680 */ 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0xFE, 0x88, 0x01, 0xFE, 0x83, -/* 00014690 */ 0x01, 0xFE, 0x82, 0x01, 0xFE, 0x80, 0x01, 0xFE, 0x81, 0x01, 0xFF, 0xE9, 0x21, 0x01, 0x00, 0x02, -/* 000146A0 */ 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0xF2, 0x00, 0x00, 0xBF, 0x4C, 0x00, 0x01, 0x00, 0x88, 0x01, -/* 000146B0 */ 0x00, 0xFE, 0x6D, 0x06, 0x38, 0xA2, 0x41, 0xD1, 0x00, 0x5F, 0xFF, 0x5E, 0x20, 0x01, 0x00, 0xFF, -/* 000146C0 */ 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0x5E, 0x20, 0x01, 0x00, 0xC7, 0xC7, 0x41, 0x04, 0x03, -/* 000146D0 */ 0x06, 0x0B, 0x0A, 0x04, 0x01, 0x05, 0x0C, 0x21, 0x4F, 0x04, 0x8C, 0x01, 0x02, 0x06, 0x95, 0x06, -/* 000146E0 */ 0x06, 0x03, 0x47, 0x04, 0x06, 0xA6, 0x06, 0x15, 0x03, 0x00, 0x04, 0x06, 0x09, 0x06, 0x00, 0x01, -/* 000146F0 */ 0x34, 0x01, 0x01, 0x03, 0x02, 0xA6, 0x00, 0x24, 0x00, 0xFF, 0x84, 0x20, 0x01, 0x00, 0x04, 0x02, -/* 00014700 */ 0x00, 0x00, 0x00, 0x0B, 0x00, 0x31, 0x00, 0x0A, 0x00, 0x33, 0x00, 0x08, 0x00, 0x3C, 0x00, 0x00, -/* 00014710 */ 0xBF, 0x4C, 0x00, 0x01, 0x00, 0x88, 0x01, 0x00, 0xFE, 0x64, 0x06, 0x3F, 0xA2, 0x41, 0xD1, 0x00, -/* 00014720 */ 0x5E, 0xFF, 0x10, 0x1F, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0x10, 0x1F, -/* 00014730 */ 0x01, 0x00, 0xC7, 0xC7, 0x41, 0x04, 0x03, 0x06, 0x0B, 0x0A, 0x04, 0x01, 0x05, 0x0C, 0x21, 0x4F, -/* 00014740 */ 0x04, 0x8C, 0x01, 0x02, 0x06, 0x95, 0x06, 0x06, 0x03, 0x47, 0x04, 0x06, 0xA6, 0x06, 0x15, 0x03, -/* 00014750 */ 0x00, 0x04, 0x06, 0x09, 0x06, 0x00, 0x01, 0x34, 0x01, 0x01, 0x03, 0x02, 0xA6, 0x00, 0x24, 0x00, -/* 00014760 */ 0xFF, 0x36, 0x1F, 0x01, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x31, 0x00, 0x0A, 0x00, -/* 00014770 */ 0x33, 0x00, 0x08, 0x00, 0x3C, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, -/* 00014780 */ 0x27, 0x06, 0x29, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x3A, 0x04, 0x5C, 0xFF, 0xD6, 0x12, 0x01, 0x00, -/* 00014790 */ 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFF, 0xD6, 0x12, 0x01, 0x00, 0xFE, 0x84, 0x08, 0xFE, -/* 000147A0 */ 0x84, 0x08, 0x01, 0x0D, 0x1A, 0x24, 0x07, 0xA1, 0x93, 0x03, 0x09, 0x14, 0x14, 0x14, 0x14, 0x23, -/* 000147B0 */ 0x08, 0x05, 0xFE, 0x53, 0x04, 0x06, 0xFE, 0x56, 0x04, 0x06, 0xFE, 0x00, 0x04, 0x06, 0xFE, 0xAD, -/* 000147C0 */ 0x03, 0x05, 0xFE, 0xBC, 0x03, 0x05, 0xFE, 0xFF, 0x03, 0x06, 0xFE, 0x86, 0x04, 0x06, 0xFE, 0x82, -/* 000147D0 */ 0x04, 0x06, 0xFE, 0x80, 0x04, 0x06, 0xFE, 0x81, 0x04, 0x06, 0xFE, 0x83, 0x04, 0x06, 0xFE, 0xB4, -/* 000147E0 */ 0x03, 0x06, 0xFE, 0xB3, 0x03, 0x06, 0xFE, 0xB5, 0x03, 0x05, 0xFE, 0x87, 0x04, 0x06, 0xFE, 0x88, -/* 000147F0 */ 0x04, 0x05, 0xFE, 0x89, 0x04, 0x05, 0xFE, 0x8A, 0x04, 0x05, 0xFE, 0x8B, 0x04, 0x06, 0xFE, 0x8C, -/* 00014800 */ 0x04, 0x05, 0xFE, 0x8D, 0x04, 0x05, 0xFE, 0x8E, 0x04, 0x0B, 0xFE, 0x0E, 0x02, 0x4F, 0x1D, 0x4F, -/* 00014810 */ 0x1E, 0x4F, 0x1F, 0x4F, 0x20, 0x4F, 0x21, 0x4F, 0x22, 0x8C, 0x02, 0x11, 0x24, 0x4B, 0x24, 0x07, -/* 00014820 */ 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x1B, 0x1F, 0x02, 0x24, 0x24, 0x47, 0x1D, 0x24, 0x8C, -/* 00014830 */ 0x01, 0x07, 0x24, 0x4B, 0x24, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x1C, 0x5A, 0x02, -/* 00014840 */ 0x03, 0x5A, 0x03, 0x04, 0x1F, 0x04, 0x24, 0x24, 0x47, 0x1C, 0x24, 0x8C, 0x03, 0x37, 0x25, 0x4B, -/* 00014850 */ 0x25, 0x6A, 0x24, 0x25, 0x00, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x25, 0x1F, 0x01, 0x24, 0x24, 0x47, -/* 00014860 */ 0x1E, 0x24, 0x47, 0x24, 0x1E, 0x8C, 0x02, 0x02, 0x25, 0x4B, 0x25, 0x07, 0x06, 0x00, 0x5A, 0x00, -/* 00014870 */ 0x02, 0x5A, 0x01, 0x1C, 0x5A, 0x02, 0x05, 0x5A, 0x03, 0x06, 0xCC, 0x26, 0x02, 0x9F, 0x00, 0x07, -/* 00014880 */ 0x26, 0x9F, 0x01, 0x08, 0x26, 0x5A, 0x04, 0x26, 0x5A, 0x05, 0x08, 0x1F, 0x06, 0x25, 0x25, 0x74, -/* 00014890 */ 0x25, 0x24, 0x01, 0x47, 0x24, 0x1E, 0x8C, 0x02, 0x02, 0x25, 0x4B, 0x25, 0x07, 0x06, 0x00, 0x5A, -/* 000148A0 */ 0x00, 0x02, 0x5A, 0x01, 0x1C, 0x5A, 0x02, 0x09, 0x5A, 0x03, 0x06, 0xCC, 0x26, 0x04, 0x9F, 0x00, -/* 000148B0 */ 0x0A, 0x26, 0x9F, 0x01, 0x0B, 0x26, 0x9F, 0x02, 0x0C, 0x26, 0x9F, 0x03, 0x0D, 0x26, 0x5A, 0x04, -/* 000148C0 */ 0x26, 0xA6, 0x26, 0x5A, 0x05, 0x26, 0x1F, 0x06, 0x25, 0x25, 0x74, 0x25, 0x24, 0x02, 0x8C, 0x02, -/* 000148D0 */ 0x0B, 0x24, 0x4B, 0x24, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x02, 0x8C, 0x03, 0x03, 0x25, 0x5F, 0x25, -/* 000148E0 */ 0x25, 0x03, 0x5A, 0x01, 0x25, 0x5A, 0x02, 0x1D, 0x5A, 0x03, 0x1E, 0xCC, 0x25, 0x03, 0x9F, 0x00, -/* 000148F0 */ 0x0E, 0x25, 0x9F, 0x01, 0x0F, 0x25, 0x9F, 0x02, 0x10, 0x25, 0x5A, 0x04, 0x25, 0x1F, 0x05, 0x24, -/* 00014900 */ 0x24, 0x47, 0x1F, 0x24, 0x5F, 0x24, 0x1F, 0x04, 0x74, 0x24, 0x1A, 0x05, 0x5F, 0x24, 0x1F, 0x06, -/* 00014910 */ 0x74, 0x24, 0x1A, 0x07, 0x5F, 0x24, 0x1F, 0x08, 0x74, 0x24, 0x1A, 0x09, 0x5F, 0x24, 0x1F, 0x0A, -/* 00014920 */ 0x74, 0x24, 0x1A, 0x0B, 0x5F, 0x24, 0x1F, 0x0C, 0x47, 0x20, 0x24, 0x5F, 0x24, 0x1C, 0x0D, 0x47, -/* 00014930 */ 0x21, 0x24, 0xA6, 0x24, 0x14, 0x03, 0x00, 0x21, 0x24, 0x09, 0x18, 0x00, 0x8C, 0x03, 0x03, 0x25, -/* 00014940 */ 0x6A, 0x24, 0x25, 0x0E, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x25, 0x1F, 0x01, 0x24, 0x24, 0x47, 0x21, -/* 00014950 */ 0x24, 0x09, 0x18, 0x00, 0x8C, 0x03, 0x24, 0x25, 0x6A, 0x24, 0x25, 0x0F, 0x07, 0x02, 0x00, 0x5A, -/* 00014960 */ 0x00, 0x25, 0x5A, 0x01, 0x21, 0x1F, 0x02, 0x24, 0x24, 0x47, 0x21, 0x24, 0x8C, 0x03, 0x03, 0x25, -/* 00014970 */ 0x6A, 0x24, 0x25, 0x10, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x25, 0x5A, 0x01, 0x21, 0x1F, 0x02, 0x24, -/* 00014980 */ 0x24, 0x47, 0x22, 0x24, 0xA6, 0x24, 0x14, 0x08, 0x00, 0x22, 0x24, 0x14, 0x03, 0x00, 0x22, 0x11, -/* 00014990 */ 0x09, 0x20, 0x00, 0x8C, 0x03, 0x38, 0x25, 0x4B, 0x25, 0x6A, 0x24, 0x25, 0x11, 0x07, 0x04, 0x00, -/* 000149A0 */ 0x5A, 0x00, 0x25, 0x5A, 0x01, 0x21, 0x5A, 0x02, 0x12, 0x5A, 0x03, 0x13, 0x1F, 0x04, 0xFF, 0x24, -/* 000149B0 */ 0x09, 0x16, 0x00, 0x14, 0x08, 0x00, 0x22, 0x14, 0x14, 0x03, 0x00, 0x22, 0x15, 0x09, 0x06, 0x00, -/* 000149C0 */ 0x47, 0x21, 0x16, 0x09, 0x03, 0x00, 0x47, 0x21, 0x22, 0x74, 0x21, 0x1A, 0x12, 0x8C, 0x02, 0x02, -/* 000149D0 */ 0x24, 0x4B, 0x24, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x1C, 0x5A, 0x02, 0x17, 0x5A, -/* 000149E0 */ 0x03, 0x06, 0xCC, 0x25, 0x02, 0x9F, 0x00, 0x18, 0x25, 0x9F, 0x01, 0x08, 0x25, 0x5A, 0x04, 0x25, -/* 000149F0 */ 0x5A, 0x05, 0x08, 0x1F, 0x06, 0xFF, 0x24, 0x8C, 0x01, 0x05, 0x24, 0x4B, 0x24, 0x07, 0x03, 0x00, -/* 00014A00 */ 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x1A, 0x5A, 0x02, 0x1C, 0x1F, 0x03, 0xFF, 0x24, 0x74, 0x19, 0x1A, -/* 00014A10 */ 0x13, 0x47, 0x00, 0x1A, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x61, 0xFE, 0xF8, 0x01, 0xFE, -/* 00014A20 */ 0xB5, 0x03, 0xFE, 0xD9, 0x01, 0xFE, 0xF7, 0x01, 0xFE, 0xF7, 0x01, 0xFE, 0xB3, 0x03, 0xFE, 0x39, -/* 00014A30 */ 0x02, 0xFE, 0xB5, 0x03, 0xFE, 0x86, 0x04, 0xFE, 0xB4, 0x03, 0xFE, 0x18, 0x02, 0xFE, 0xBD, 0x03, -/* 00014A40 */ 0xFE, 0x42, 0x02, 0xFE, 0xE8, 0x01, 0xFE, 0x37, 0x03, 0xFE, 0xE7, 0x01, 0xFE, 0x26, 0x03, 0xFE, -/* 00014A50 */ 0x42, 0x02, 0xFE, 0x8F, 0x04, 0xFF, 0x10, 0x13, 0x01, 0x00, 0x1B, 0x0C, 0x00, 0x00, 0x00, 0x16, -/* 00014A60 */ 0x00, 0x46, 0x00, 0x1C, 0x00, 0x42, 0x00, 0x17, 0x00, 0x24, 0x00, 0x31, 0x00, 0xD1, 0x00, 0x3B, -/* 00014A70 */ 0x00, 0x6A, 0x00, 0x36, 0x00, 0x6F, 0x00, 0x08, 0x00, 0x2E, 0x00, 0x08, 0x00, 0x2C, 0x00, 0x08, -/* 00014A80 */ 0x00, 0x2D, 0x00, 0x08, 0x00, 0x34, 0x00, 0x07, 0x00, 0x37, 0x00, 0x07, 0x00, 0x27, 0x00, 0x0A, -/* 00014A90 */ 0x00, 0x28, 0x00, 0x18, 0x00, 0x49, 0x00, 0x18, 0x00, 0xEF, 0x00, 0x18, 0x00, 0x4E, 0x00, 0x0F, -/* 00014AA0 */ 0x00, 0x52, 0x00, 0x20, 0x00, 0x5F, 0x00, 0x0D, 0x00, 0x4E, 0x00, 0x06, 0x00, 0x31, 0x00, 0x03, -/* 00014AB0 */ 0x00, 0x2D, 0x00, 0x04, 0x00, 0x64, 0x00, 0x2A, 0x00, 0xD3, 0x00, 0x16, 0x00, 0x3B, 0x00, 0x04, -/* 00014AC0 */ 0x00, 0x3E, 0x00, 0x08, 0x00, 0x1F, 0x00, 0x00, 0x3F, 0x4D, 0x00, 0xC0, 0x13, 0x8D, 0x25, 0x00, -/* 00014AD0 */ 0xFE, 0x7D, 0x05, 0x26, 0xA0, 0x41, 0xD1, 0x00, 0x58, 0xFE, 0xDC, 0xF1, 0x01, 0xFF, 0x00, 0x10, -/* 00014AE0 */ 0x01, 0x00, 0x01, 0x01, 0xFE, 0xDC, 0xF1, 0xFE, 0x0B, 0x1F, 0xFE, 0x0B, 0x1F, 0x06, 0xFE, 0x5C, -/* 00014AF0 */ 0x04, 0xFE, 0x5D, 0x04, 0xFE, 0x5E, 0x04, 0xFE, 0x5F, 0x04, 0xFE, 0x60, 0x04, 0xFE, 0x61, 0x04, -/* 00014B00 */ 0x04, 0x39, 0x3C, 0x51, 0x51, 0x03, 0x30, 0x30, 0x30, 0x30, 0x05, 0x39, 0x3A, 0x3B, 0x06, 0xFE, -/* 00014B10 */ 0x46, 0x04, 0x06, 0xFE, 0x62, 0x04, 0x06, 0xFE, 0x47, 0x04, 0x06, 0xFE, 0x63, 0x04, 0x06, 0xFE, -/* 00014B20 */ 0x48, 0x04, 0x06, 0xFE, 0x64, 0x04, 0x06, 0xFE, 0x49, 0x04, 0x06, 0xFE, 0x65, 0x04, 0x06, 0xFE, -/* 00014B30 */ 0x4A, 0x04, 0x06, 0xFE, 0x66, 0x04, 0x06, 0xFE, 0x4B, 0x04, 0x06, 0xFE, 0x67, 0x04, 0x06, 0xFE, -/* 00014B40 */ 0x68, 0x04, 0x06, 0xFE, 0x69, 0x04, 0x06, 0xFE, 0x6A, 0x04, 0x06, 0xFE, 0x6B, 0x04, 0x06, 0xFE, -/* 00014B50 */ 0x4C, 0x04, 0x06, 0xFE, 0x6C, 0x04, 0x06, 0xFE, 0x4D, 0x04, 0x06, 0xFE, 0x6D, 0x04, 0x06, 0xFE, -/* 00014B60 */ 0x4E, 0x04, 0x06, 0xFE, 0x6E, 0x04, 0x07, 0x06, 0xFE, 0x6F, 0x04, 0x06, 0xFE, 0x70, 0x04, 0x06, -/* 00014B70 */ 0xFE, 0xEF, 0x03, 0x06, 0xFE, 0x71, 0x04, 0x06, 0xFE, 0x72, 0x04, 0x06, 0xFE, 0x73, 0x04, 0x06, -/* 00014B80 */ 0xFE, 0x74, 0x04, 0x06, 0xFE, 0x75, 0x04, 0x06, 0xFE, 0x76, 0x04, 0x06, 0xFE, 0x77, 0x04, 0x06, -/* 00014B90 */ 0xFE, 0x78, 0x04, 0x06, 0xFE, 0x79, 0x04, 0x06, 0xFE, 0x7A, 0x04, 0x06, 0xFE, 0x13, 0x04, 0x01, -/* 00014BA0 */ 0x01, 0x06, 0xFE, 0x45, 0x04, 0x01, 0x02, 0x06, 0xFE, 0x43, 0x04, 0x01, 0x03, 0x06, 0xFE, 0x44, -/* 00014BB0 */ 0x04, 0x01, 0x04, 0x06, 0xFE, 0x42, 0x04, 0x01, 0x05, 0x06, 0xFE, 0x7B, 0x04, 0x06, 0xFE, 0x7C, -/* 00014BC0 */ 0x04, 0x06, 0xFE, 0x7D, 0x04, 0x06, 0xFE, 0x7E, 0x04, 0x06, 0xFE, 0x7F, 0x04, 0x06, 0xFE, 0x80, -/* 00014BD0 */ 0x04, 0x06, 0xFE, 0x81, 0x04, 0x06, 0xFE, 0x82, 0x04, 0x06, 0xFE, 0x83, 0x04, 0xFE, 0x4D, 0x01, -/* 00014BE0 */ 0x4F, 0x3C, 0x94, 0x02, 0x3C, 0x4F, 0x3C, 0x94, 0x03, 0x3C, 0x4F, 0x3C, 0x94, 0x04, 0x3C, 0x4F, -/* 00014BF0 */ 0x3C, 0x94, 0x05, 0x3C, 0x4F, 0x3C, 0x94, 0x06, 0x3C, 0x4F, 0x3C, 0x94, 0x07, 0x3C, 0xCB, 0x00, -/* 00014C00 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x78, 0x03, 0x3C, 0x00, 0x78, -/* 00014C10 */ 0x05, 0x3C, 0x01, 0x78, 0x07, 0x3C, 0x02, 0x78, 0x09, 0x3C, 0x03, 0x78, 0x0B, 0x3C, 0x04, 0x78, -/* 00014C20 */ 0x0D, 0x3C, 0x05, 0x78, 0x0F, 0x3C, 0x06, 0x78, 0x11, 0x3C, 0x07, 0x78, 0x13, 0x3C, 0x08, 0x78, -/* 00014C30 */ 0x15, 0x3C, 0x09, 0x78, 0x17, 0x3C, 0x0A, 0x94, 0x02, 0x3C, 0xCB, 0x34, 0x00, 0x00, 0x00, 0x01, -/* 00014C40 */ 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x78, 0x02, 0x3C, 0x0B, 0x78, 0x02, 0x3C, 0x0C, 0x78, -/* 00014C50 */ 0x02, 0x3C, 0x0D, 0x78, 0x04, 0x3C, 0x0E, 0x78, 0x06, 0x3C, 0x0F, 0x78, 0x06, 0x3C, 0x10, 0x78, -/* 00014C60 */ 0x06, 0x3C, 0x11, 0x78, 0x08, 0x3C, 0x12, 0x78, 0x08, 0x3C, 0x13, 0x78, 0x0A, 0x3C, 0x14, 0x78, -/* 00014C70 */ 0x0C, 0x3C, 0x15, 0x78, 0x0C, 0x3C, 0x16, 0x78, 0x0C, 0x3C, 0x17, 0x78, 0x0C, 0x3C, 0x18, 0x78, -/* 00014C80 */ 0x12, 0x3C, 0x19, 0x78, 0x14, 0x3C, 0x1A, 0x78, 0x16, 0x3C, 0x1B, 0x78, 0x16, 0x3C, 0x1C, 0x78, -/* 00014C90 */ 0x16, 0x3C, 0x1D, 0x78, 0x16, 0x3C, 0x1E, 0x78, 0x16, 0x3C, 0x1F, 0x78, 0x16, 0x3C, 0x20, 0x78, -/* 00014CA0 */ 0x16, 0x3C, 0x21, 0x94, 0x03, 0x3C, 0xCB, 0x98, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x3C, -/* 00014CB0 */ 0x00, 0x00, 0x00, 0x78, 0x27, 0x3C, 0x22, 0x78, 0x29, 0x3C, 0x23, 0x78, 0x2B, 0x3C, 0x24, 0x78, -/* 00014CC0 */ 0x2D, 0x3C, 0x25, 0x78, 0x2F, 0x3C, 0x26, 0x94, 0x04, 0x3C, 0xCA, 0x3C, 0x78, 0x26, 0x3C, 0x27, -/* 00014CD0 */ 0x78, 0x28, 0x3C, 0x28, 0x78, 0x2A, 0x3C, 0x29, 0x78, 0x2C, 0x3C, 0x2A, 0x78, 0x2E, 0x3C, 0x2B, -/* 00014CE0 */ 0x94, 0x05, 0x3C, 0xCB, 0xB4, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, -/* 00014CF0 */ 0x78, 0x0F, 0x3C, 0x2C, 0x78, 0x11, 0x3C, 0x2D, 0x78, 0x1E, 0x3C, 0x2E, 0x78, 0x1F, 0x3C, 0x2F, -/* 00014D00 */ 0x94, 0x06, 0x3C, 0xCB, 0xCC, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, -/* 00014D10 */ 0x78, 0x35, 0x3C, 0x15, 0x78, 0x36, 0x3C, 0x16, 0x78, 0x37, 0x3C, 0x17, 0x78, 0x38, 0x3C, 0x18, -/* 00014D20 */ 0x94, 0x07, 0x3C, 0xD3, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x05, 0xE4, 0x00, -/* 00014D30 */ 0xCC, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x69, 0x04, 0x00, 0x00, -/* 00014D40 */ 0x6B, 0x04, 0x00, 0x00, 0x73, 0x04, 0x00, 0x00, 0x74, 0x04, 0x00, 0x00, 0xB4, 0x00, 0x00, 0x00, -/* 00014D50 */ 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x81, 0x04, 0x00, 0x00, -/* 00014D60 */ 0x82, 0x04, 0x00, 0x00, 0x83, 0x04, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x03, 0x05, 0x00, 0x00, -/* 00014D70 */ 0x00, 0x00, 0x00, 0x00, 0x20, 0x02, 0x00, 0x00, 0x45, 0x04, 0x00, 0x00, 0x43, 0x04, 0x00, 0x00, -/* 00014D80 */ 0x44, 0x04, 0x00, 0x00, 0x42, 0x04, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x03, 0x17, 0x00, 0x00, -/* 00014D90 */ 0x00, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x00, 0x00, 0x6F, 0x04, 0x00, 0x00, 0x70, 0x04, 0x00, 0x00, -/* 00014DA0 */ 0x63, 0x04, 0x00, 0x00, 0x64, 0x04, 0x00, 0x00, 0xEF, 0x03, 0x00, 0x00, 0x71, 0x04, 0x00, 0x00, -/* 00014DB0 */ 0x65, 0x04, 0x00, 0x00, 0x72, 0x04, 0x00, 0x00, 0x66, 0x04, 0x00, 0x00, 0x69, 0x04, 0x00, 0x00, -/* 00014DC0 */ 0x6B, 0x04, 0x00, 0x00, 0x73, 0x04, 0x00, 0x00, 0x74, 0x04, 0x00, 0x00, 0x6C, 0x04, 0x00, 0x00, -/* 00014DD0 */ 0x6D, 0x04, 0x00, 0x00, 0x6E, 0x04, 0x00, 0x00, 0x75, 0x04, 0x00, 0x00, 0x76, 0x04, 0x00, 0x00, -/* 00014DE0 */ 0x77, 0x04, 0x00, 0x00, 0x78, 0x04, 0x00, 0x00, 0x79, 0x04, 0x00, 0x00, 0x7A, 0x04, 0x00, 0x00, -/* 00014DF0 */ 0x00, 0x00, 0x00, 0x00, 0x03, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x02, 0x00, 0x00, -/* 00014E00 */ 0x3B, 0x02, 0x00, 0x00, 0x45, 0x02, 0x00, 0x00, 0x3F, 0x02, 0x00, 0x00, 0x3A, 0x02, 0x00, 0x00, -/* 00014E10 */ 0x3C, 0x02, 0x00, 0x00, 0x3D, 0x02, 0x00, 0x00, 0x6A, 0x04, 0x00, 0x00, 0x3E, 0x02, 0x00, 0x00, -/* 00014E20 */ 0x41, 0x02, 0x00, 0x00, 0x43, 0x02, 0x00, 0x00, 0xFE, 0x44, 0x02, 0xFE, 0x3B, 0x02, 0xFE, 0x45, -/* 00014E30 */ 0x02, 0xFE, 0x3F, 0x02, 0xFE, 0x3A, 0x02, 0xFE, 0x3C, 0x02, 0xFE, 0x3D, 0x02, 0xFE, 0x6A, 0x04, -/* 00014E40 */ 0xFE, 0x3E, 0x02, 0xFE, 0x41, 0x02, 0xFE, 0x43, 0x02, 0x6D, 0xFE, 0x6F, 0x04, 0xFE, 0x70, 0x04, -/* 00014E50 */ 0xFE, 0x63, 0x04, 0xFE, 0x64, 0x04, 0xFE, 0xEF, 0x03, 0xFE, 0x71, 0x04, 0xFE, 0x65, 0x04, 0xFE, -/* 00014E60 */ 0x72, 0x04, 0xFE, 0x66, 0x04, 0xFE, 0x69, 0x04, 0xFE, 0x6B, 0x04, 0xFE, 0x73, 0x04, 0xFE, 0x74, -/* 00014E70 */ 0x04, 0xFE, 0x6C, 0x04, 0xFE, 0x6D, 0x04, 0xFE, 0x6E, 0x04, 0xFE, 0x75, 0x04, 0xFE, 0x76, 0x04, -/* 00014E80 */ 0xFE, 0x77, 0x04, 0xFE, 0x78, 0x04, 0xFE, 0x79, 0x04, 0xFE, 0x7A, 0x04, 0xFE, 0x20, 0x02, 0xFE, -/* 00014E90 */ 0x45, 0x04, 0xFE, 0x43, 0x04, 0xFE, 0x44, 0x04, 0xFE, 0x42, 0x04, 0xFE, 0x7B, 0x04, 0xFE, 0x7C, -/* 00014EA0 */ 0x04, 0xFE, 0x7D, 0x04, 0xFE, 0x7E, 0x04, 0xFE, 0x7F, 0x04, 0xFE, 0x80, 0x04, 0xFE, 0x81, 0x04, -/* 00014EB0 */ 0xFE, 0x82, 0x04, 0xFE, 0x83, 0x04, 0xFE, 0x75, 0xF2, 0x08, 0x1E, 0x00, 0x00, 0x00, 0x3C, 0x00, -/* 00014EC0 */ 0x10, 0x02, 0x6C, 0x00, 0xDC, 0x02, 0x24, 0x00, 0xC3, 0x00, 0x19, 0x00, 0x00, 0x01, 0x20, 0x00, -/* 00014ED0 */ 0xA1, 0x00, 0x20, 0x00, 0xA2, 0x00, 0x08, 0x00, 0x7F, 0x16, 0x00, 0xDF, 0x4E, 0x01, 0x00, 0xBF, -/* 00014EE0 */ 0x7D, 0x00, 0xC3, 0x43, 0xAD, 0x0D, 0x00, 0xFE, 0xB7, 0x05, 0x13, 0xA2, 0x41, 0xD1, 0x00, 0x59, -/* 00014EF0 */ 0xFE, 0x6E, 0xFA, 0x02, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x6E, 0xFA, 0xFE, 0x6E, -/* 00014F00 */ 0x16, 0xFE, 0x6E, 0x16, 0x40, 0x04, 0xFE, 0xCA, 0x01, 0xFE, 0xFA, 0x01, 0xFE, 0x3D, 0x02, 0xFE, -/* 00014F10 */ 0xB5, 0x03, 0x16, 0x11, 0x20, 0x08, 0xCD, 0xBD, 0x77, 0x04, 0x0C, 0x02, 0x0B, 0x0B, 0x0B, 0x0B, -/* 00014F20 */ 0x02, 0x1D, 0x1E, 0x1F, 0x20, 0xF5, 0xFE, 0x90, 0x02, 0xFE, 0x48, 0x02, 0xFE, 0x68, 0x02, 0x06, -/* 00014F30 */ 0xFE, 0x68, 0x04, 0x06, 0xFE, 0xC2, 0x03, 0x08, 0x06, 0xFE, 0x5B, 0x03, 0x0C, 0x01, 0x00, 0x06, -/* 00014F40 */ 0xFE, 0x84, 0x04, 0x01, 0x01, 0x0B, 0x06, 0xFE, 0x85, 0x04, 0x06, 0xFE, 0x69, 0x04, 0x06, 0xFE, -/* 00014F50 */ 0x6B, 0x04, 0x06, 0xFE, 0x73, 0x04, 0x06, 0xFE, 0x74, 0x04, 0x01, 0x02, 0xFE, 0x98, 0x02, 0x94, -/* 00014F60 */ 0x02, 0x12, 0x4F, 0x13, 0x4F, 0x14, 0x4F, 0x15, 0x4F, 0x16, 0x4F, 0x17, 0x4F, 0x18, 0x4F, 0x1A, -/* 00014F70 */ 0x4F, 0x1B, 0x4F, 0x1C, 0x4F, 0x19, 0x4F, 0x22, 0x94, 0x03, 0x22, 0x4F, 0x22, 0x94, 0x04, 0x22, -/* 00014F80 */ 0x4F, 0x22, 0x94, 0x05, 0x22, 0x8C, 0x04, 0x37, 0x23, 0x4B, 0x23, 0x6A, 0x22, 0x23, 0x00, 0x07, -/* 00014F90 */ 0x04, 0x00, 0x5A, 0x00, 0x23, 0x8C, 0x02, 0x04, 0x24, 0x4B, 0x24, 0x5A, 0x01, 0x24, 0xD3, 0x00, -/* 00014FA0 */ 0x24, 0x5A, 0x02, 0x24, 0x8C, 0x04, 0x37, 0x25, 0x4B, 0x25, 0x6A, 0x24, 0x25, 0x01, 0x07, 0x01, -/* 00014FB0 */ 0x00, 0x5A, 0x00, 0x25, 0x1F, 0x01, 0x24, 0x24, 0x5A, 0x03, 0x24, 0x1F, 0x04, 0x22, 0x22, 0x94, -/* 00014FC0 */ 0x03, 0x22, 0x8C, 0x03, 0x02, 0x22, 0x4B, 0x22, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x90, 0x02, -/* 00014FD0 */ 0x23, 0x5A, 0x01, 0x23, 0x5A, 0x02, 0x02, 0x5A, 0x03, 0x03, 0xA6, 0x23, 0x5A, 0x04, 0x23, 0xA6, -/* 00014FE0 */ 0x23, 0x5A, 0x05, 0x23, 0x1F, 0x06, 0x22, 0x22, 0x94, 0x04, 0x22, 0x5F, 0x22, 0x11, 0x02, 0x94, -/* 00014FF0 */ 0x05, 0x22, 0x8C, 0x04, 0x37, 0x23, 0x4B, 0x23, 0x6A, 0x22, 0x23, 0x00, 0x07, 0x04, 0x00, 0x5A, -/* 00015000 */ 0x00, 0x23, 0x8C, 0x04, 0x37, 0x25, 0x4B, 0x25, 0x6A, 0x24, 0x25, 0x03, 0x07, 0x02, 0x00, 0x5A, -/* 00015010 */ 0x00, 0x25, 0x90, 0x03, 0x26, 0x5A, 0x01, 0x26, 0x1F, 0x02, 0x24, 0x24, 0x5A, 0x01, 0x24, 0xD3, -/* 00015020 */ 0x01, 0x24, 0x5A, 0x02, 0x24, 0x5A, 0x03, 0x05, 0x1F, 0x04, 0x22, 0x22, 0x47, 0x13, 0x22, 0x8C, -/* 00015030 */ 0x04, 0x03, 0x23, 0x6A, 0x22, 0x23, 0x04, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x23, 0x5F, 0x24, 0x11, -/* 00015040 */ 0x05, 0x5A, 0x01, 0x24, 0x5A, 0x02, 0x13, 0x1F, 0x03, 0x22, 0x22, 0x47, 0x14, 0x22, 0x47, 0x15, -/* 00015050 */ 0x06, 0x47, 0x16, 0x07, 0xEA, 0x00, 0xA4, 0x22, 0x14, 0x06, 0x12, 0x03, 0x00, 0x16, 0x22, 0x09, -/* 00015060 */ 0x8D, 0x01, 0x95, 0x22, 0x14, 0x16, 0x47, 0x17, 0x22, 0x43, 0x22, 0x17, 0x08, 0x47, 0x18, 0x22, -/* 00015070 */ 0x0E, 0x10, 0x00, 0x15, 0x0E, 0x03, 0x00, 0x18, 0x47, 0x15, 0x06, 0x28, 0x16, 0x16, 0x09, 0x6B, -/* 00015080 */ 0x01, 0x09, 0x1E, 0x00, 0x0E, 0x0C, 0x00, 0x18, 0x47, 0x15, 0x0A, 0x28, 0x16, 0x16, 0x09, 0x5B, -/* 00015090 */ 0x01, 0x09, 0x0E, 0x00, 0x14, 0x03, 0x00, 0x17, 0x0B, 0x09, 0x06, 0x00, 0x28, 0x16, 0x16, 0x09, -/* 000150A0 */ 0x4A, 0x01, 0x14, 0x12, 0x00, 0x17, 0x0C, 0x14, 0x0D, 0x00, 0x17, 0x0D, 0x14, 0x08, 0x00, 0x17, -/* 000150B0 */ 0x0E, 0x14, 0x03, 0x00, 0x17, 0x0F, 0x09, 0xE7, 0x00, 0x90, 0x05, 0x22, 0x0E, 0xD2, 0x00, 0x22, -/* 000150C0 */ 0x90, 0x04, 0x22, 0xA6, 0x23, 0x14, 0x03, 0x00, 0x22, 0x23, 0x09, 0xC5, 0x00, 0x8C, 0x01, 0x06, -/* 000150D0 */ 0x22, 0x4B, 0x22, 0x90, 0x05, 0x23, 0x95, 0x22, 0x22, 0x23, 0x47, 0x19, 0x22, 0x15, 0x03, 0x00, -/* 000150E0 */ 0x19, 0x17, 0x09, 0xAA, 0x00, 0x2F, 0x22, 0x16, 0x09, 0x95, 0x22, 0x14, 0x22, 0x14, 0x03, 0x00, -/* 000150F0 */ 0x22, 0x17, 0x09, 0x4D, 0x00, 0x8C, 0x04, 0x37, 0x23, 0x4B, 0x23, 0x6A, 0x22, 0x23, 0x07, 0x07, -/* 00015100 */ 0x04, 0x00, 0x5A, 0x00, 0x23, 0x5A, 0x01, 0x14, 0x5A, 0x02, 0x07, 0x5A, 0x03, 0x16, 0x1F, 0x04, -/* 00015110 */ 0x22, 0x22, 0x2F, 0x22, 0x22, 0x19, 0x2F, 0x22, 0x22, 0x19, 0x8C, 0x04, 0x37, 0x24, 0x4B, 0x24, -/* 00015120 */ 0x6A, 0x23, 0x24, 0x08, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x24, 0x5A, 0x01, 0x14, 0x2F, 0x25, 0x16, -/* 00015130 */ 0x10, 0x5A, 0x02, 0x25, 0x1F, 0x03, 0x23, 0x23, 0x2F, 0x22, 0x22, 0x23, 0x47, 0x14, 0x22, 0x09, -/* 00015140 */ 0x46, 0x00, 0x8C, 0x04, 0x37, 0x23, 0x4B, 0x23, 0x6A, 0x22, 0x23, 0x07, 0x07, 0x04, 0x00, 0x5A, -/* 00015150 */ 0x00, 0x23, 0x5A, 0x01, 0x14, 0x5A, 0x02, 0x07, 0x5A, 0x03, 0x16, 0x1F, 0x04, 0x22, 0x22, 0x2F, -/* 00015160 */ 0x22, 0x22, 0x19, 0x8C, 0x04, 0x37, 0x24, 0x4B, 0x24, 0x6A, 0x23, 0x24, 0x08, 0x07, 0x03, 0x00, -/* 00015170 */ 0x5A, 0x00, 0x24, 0x5A, 0x01, 0x14, 0x2F, 0x25, 0x16, 0x09, 0x5A, 0x02, 0x25, 0x1F, 0x03, 0x23, -/* 00015180 */ 0x23, 0x2F, 0x22, 0x22, 0x23, 0x47, 0x14, 0x22, 0x95, 0x22, 0x14, 0x16, 0x47, 0x17, 0x22, 0x09, -/* 00015190 */ 0x0E, 0x00, 0x8C, 0x01, 0x07, 0x22, 0x4B, 0x22, 0x95, 0x22, 0x22, 0x17, 0x74, 0x22, 0x11, 0x09, -/* 000151A0 */ 0x2F, 0x22, 0x16, 0x09, 0x47, 0x1A, 0x22, 0xEA, 0x01, 0xA4, 0x22, 0x14, 0x06, 0x12, 0x03, 0x00, -/* 000151B0 */ 0x1A, 0x22, 0x09, 0x12, 0x00, 0x95, 0x22, 0x14, 0x1A, 0x14, 0x03, 0x00, 0x22, 0x17, 0x09, 0x06, -/* 000151C0 */ 0x00, 0x28, 0x1A, 0x1A, 0x09, 0xE0, 0xFF, 0x8C, 0x01, 0x03, 0x22, 0x4B, 0x22, 0x95, 0x22, 0x22, -/* 000151D0 */ 0x17, 0x47, 0x1B, 0x22, 0x8C, 0x01, 0x05, 0x22, 0x4B, 0x22, 0x35, 0x23, 0x1A, 0x16, 0x95, 0x22, -/* 000151E0 */ 0x22, 0x23, 0x47, 0x1C, 0x22, 0x9A, 0x1C, 0x11, 0x1B, 0x47, 0x16, 0x1A, 0x09, 0x65, 0xFE, 0x74, -/* 000151F0 */ 0x14, 0x11, 0x0A, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x1C, 0x01, 0x61, 0xFE, 0x86, 0x04, 0xBF, 0xFE, -/* 00015200 */ 0xE9, 0x01, 0xFE, 0xF7, 0x01, 0xC1, 0xFE, 0x4C, 0x01, 0xFE, 0x4C, 0x01, 0xFE, 0x86, 0x04, 0xFE, -/* 00015210 */ 0x40, 0x02, 0xFE, 0x98, 0xFA, 0x28, 0x26, 0x00, 0x00, 0x00, 0x3D, 0x00, 0x74, 0x02, 0x29, 0x00, -/* 00015220 */ 0x5E, 0x00, 0x07, 0x00, 0xB6, 0x00, 0x3D, 0x00, 0x43, 0x05, 0x1F, 0x00, 0x0E, 0x02, 0x03, 0x00, -/* 00015230 */ 0x27, 0x00, 0x05, 0x00, 0x22, 0x00, 0x0C, 0x00, 0x2A, 0x00, 0x07, 0x00, 0x2A, 0x00, 0x07, 0x00, -/* 00015240 */ 0x31, 0x00, 0x04, 0x00, 0x29, 0x00, 0x04, 0x00, 0x2B, 0x00, 0x03, 0x00, 0x45, 0x00, 0x03, 0x00, -/* 00015250 */ 0x1D, 0x00, 0x06, 0x00, 0x25, 0x00, 0x04, 0x00, 0x27, 0x00, 0x03, 0x00, 0x2A, 0x00, 0x03, 0x00, -/* 00015260 */ 0x1D, 0x00, 0x06, 0x00, 0x25, 0x00, 0x08, 0x00, 0x2B, 0x00, 0x03, 0x00, 0x1D, 0x00, 0x03, 0x00, -/* 00015270 */ 0x02, 0x01, 0x17, 0x00, 0x58, 0x00, 0x14, 0x00, 0x76, 0x01, 0x10, 0x00, 0x49, 0x00, 0x08, 0x00, -/* 00015280 */ 0x3B, 0x00, 0x10, 0x00, 0x76, 0x00, 0x4D, 0x00, 0xE1, 0x00, 0x46, 0x00, 0xED, 0x00, 0x0A, 0x00, -/* 00015290 */ 0x38, 0x01, 0x0E, 0x00, 0x6F, 0x00, 0x09, 0x00, 0x2A, 0x00, 0x18, 0x00, 0x44, 0x00, 0x06, 0x00, -/* 000152A0 */ 0x30, 0x00, 0x0D, 0x00, 0x3E, 0x00, 0x11, 0x00, 0x48, 0x00, 0x04, 0x00, 0x36, 0x00, 0x06, 0x00, -/* 000152B0 */ 0x2A, 0x00, 0x06, 0x00, 0x23, 0x00, 0x00, 0xFC, 0x53, 0x01, 0x00, 0xBF, 0x52, 0x01, 0x00, 0xBF, -/* 000152C0 */ 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0xC8, 0x05, 0x43, 0xA2, 0x41, 0xD1, 0x00, 0x5B, -/* 000152D0 */ 0xFE, 0x53, 0xFE, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x53, 0xFE, 0xFE, 0xF8, 0x04, -/* 000152E0 */ 0xFE, 0xF8, 0x04, 0x01, 0x08, 0x0B, 0x0F, 0x04, 0x3C, 0x38, 0x05, 0x06, 0x01, 0x01, 0x01, 0x01, -/* 000152F0 */ 0x0E, 0x06, 0xFE, 0x4B, 0x04, 0x0B, 0x06, 0xFE, 0x82, 0x04, 0x06, 0xFE, 0x80, 0x04, 0x06, 0xFE, -/* 00015300 */ 0x68, 0x04, 0x0C, 0x06, 0xFE, 0x81, 0x04, 0x06, 0xFE, 0x83, 0x04, 0x06, 0xFE, 0x6A, 0x04, 0xC4, -/* 00015310 */ 0x4F, 0x0D, 0x8C, 0x01, 0x03, 0x0F, 0x4B, 0x0F, 0x95, 0x0F, 0x0F, 0x0C, 0x47, 0x0D, 0x0F, 0x14, -/* 00015320 */ 0x03, 0x00, 0x0C, 0x02, 0x09, 0x71, 0x00, 0x8C, 0x01, 0x04, 0x0F, 0x4B, 0x0F, 0x14, 0x29, 0x00, -/* 00015330 */ 0x0F, 0x03, 0x8C, 0x01, 0x04, 0x0F, 0x4B, 0x0F, 0xA6, 0x10, 0x14, 0x03, 0x00, 0x0F, 0x10, 0x09, -/* 00015340 */ 0x1F, 0x00, 0x8C, 0x01, 0x05, 0x0F, 0x4B, 0x0F, 0x14, 0x0E, 0x00, 0x0F, 0x04, 0x8C, 0x01, 0x05, -/* 00015350 */ 0x0F, 0x4B, 0x0F, 0x14, 0x03, 0x00, 0x0F, 0x05, 0x09, 0x06, 0x00, 0x47, 0x0C, 0x06, 0x09, 0x37, -/* 00015360 */ 0x00, 0x8C, 0x01, 0x04, 0x0F, 0x4B, 0x0F, 0x14, 0x29, 0x00, 0x0F, 0x07, 0x8C, 0x01, 0x04, 0x0F, -/* 00015370 */ 0x4B, 0x0F, 0xA6, 0x10, 0x14, 0x03, 0x00, 0x0F, 0x10, 0x09, 0x1C, 0x00, 0x8C, 0x01, 0x05, 0x0F, -/* 00015380 */ 0x4B, 0x0F, 0x14, 0x0E, 0x00, 0x0F, 0x08, 0x8C, 0x01, 0x05, 0x0F, 0x4B, 0x0F, 0x14, 0x03, 0x00, -/* 00015390 */ 0x0F, 0x09, 0x09, 0x03, 0x00, 0x47, 0x0C, 0x0A, 0x47, 0x0F, 0x0B, 0x8C, 0x05, 0x37, 0x11, 0x4B, -/* 000153A0 */ 0x11, 0x6A, 0x10, 0x11, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x11, 0x8C, 0x02, 0x02, 0x12, 0x4B, -/* 000153B0 */ 0x12, 0x95, 0x12, 0x12, 0x0C, 0x5A, 0x01, 0x12, 0x8C, 0x02, 0x04, 0x12, 0x4B, 0x12, 0x95, 0x12, -/* 000153C0 */ 0x12, 0x0D, 0x5A, 0x02, 0x12, 0x1F, 0x03, 0x10, 0x10, 0x2F, 0x00, 0x0F, 0x10, 0x09, 0x02, 0x00, -/* 000153D0 */ 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x29, 0x01, 0xFE, 0x88, 0xFE, 0x08, 0x02, 0x00, 0x00, 0x00, 0x0D, -/* 000153E0 */ 0x00, 0x42, 0x00, 0x08, 0x00, 0xA5, 0x02, 0x34, 0x00, 0x6F, 0x00, 0x06, 0x00, 0x35, 0x00, 0x34, -/* 000153F0 */ 0x00, 0x70, 0x00, 0x03, 0x00, 0x5B, 0x00, 0x3A, 0x00, 0x6C, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0x01, -/* 00015400 */ 0x00, 0x88, 0x01, 0x00, 0xFE, 0xB8, 0x05, 0x45, 0xA2, 0x41, 0xD1, 0x00, 0x5A, 0xFE, 0xCD, 0xFA, -/* 00015410 */ 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0xCD, 0xFA, 0xFE, 0x5B, 0x01, 0xFE, 0x5B, 0x01, -/* 00015420 */ 0x01, 0x07, 0x06, 0x0B, 0x07, 0x1B, 0x18, 0x05, 0x02, 0x0A, 0x01, 0x00, 0x06, 0xFE, 0xAD, 0x03, -/* 00015430 */ 0x01, 0x01, 0x08, 0x4F, 0x4F, 0x08, 0x4F, 0x09, 0x95, 0x0B, 0x07, 0x02, 0x47, 0x08, 0x0B, 0x8C, -/* 00015440 */ 0x04, 0x02, 0x0B, 0x4B, 0x0B, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x05, 0x8C, 0x01, 0x02, 0x0C, 0x5A, -/* 00015450 */ 0x01, 0x0C, 0x5A, 0x02, 0x08, 0x5A, 0x03, 0x03, 0x95, 0x0C, 0x07, 0x04, 0x5A, 0x04, 0x0C, 0xA6, -/* 00015460 */ 0x0C, 0x5A, 0x05, 0x0C, 0x1F, 0x06, 0x0B, 0x0B, 0x47, 0x09, 0x0B, 0xA6, 0x0B, 0x15, 0x03, 0x00, -/* 00015470 */ 0x09, 0x0B, 0x09, 0x04, 0x00, 0x9A, 0x09, 0x06, 0x08, 0x47, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA6, -/* 00015480 */ 0x00, 0x24, 0x00, 0xFE, 0x02, 0xFB, 0x06, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x2F, 0x00, 0x2C, -/* 00015490 */ 0x00, 0x5F, 0x00, 0x0A, 0x00, 0x33, 0x00, 0x04, 0x00, 0x43, 0x00, 0x08, 0x00, 0x21, 0x00, 0x00, -/* 000154A0 */ 0x3F, 0x5D, 0x00, 0xC1, 0x13, 0x8D, 0x25, 0x00, 0xFE, 0x7E, 0x04, 0x18, 0xA0, 0x41, 0xD1, 0x00, -/* 000154B0 */ 0x4E, 0xFE, 0x42, 0xC7, 0x08, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0x42, 0xC7, 0xFE, -/* 000154C0 */ 0x09, 0x25, 0xFE, 0x09, 0x25, 0x03, 0xFE, 0x1F, 0x04, 0xFE, 0xF5, 0x01, 0xFE, 0x86, 0x03, 0x0C, -/* 000154D0 */ 0x1A, 0x22, 0x09, 0xE4, 0xDE, 0x02, 0x09, 0x0B, 0x0B, 0x0B, 0x0B, 0x08, 0x1F, 0x20, 0x21, 0x08, -/* 000154E0 */ 0x06, 0xFE, 0x3D, 0x03, 0x06, 0xFE, 0x20, 0x04, 0x05, 0xFE, 0x21, 0x04, 0x05, 0xFE, 0x22, 0x04, -/* 000154F0 */ 0x05, 0xFE, 0x23, 0x04, 0x05, 0xFE, 0x24, 0x04, 0x05, 0xFE, 0x4A, 0x03, 0x06, 0xFE, 0x3F, 0x03, -/* 00015500 */ 0x06, 0xFE, 0x40, 0x03, 0x06, 0xFE, 0x4C, 0x03, 0x06, 0xFE, 0x42, 0x03, 0x0C, 0x06, 0xFE, 0x43, -/* 00015510 */ 0x03, 0x06, 0xFE, 0x44, 0x03, 0x0B, 0x07, 0x06, 0xFE, 0x0B, 0x04, 0x06, 0xFE, 0x0C, 0x04, 0x06, -/* 00015520 */ 0xFE, 0x0D, 0x04, 0x05, 0xFE, 0x25, 0x04, 0x06, 0xFE, 0x26, 0x04, 0x06, 0xFE, 0x8D, 0x03, 0x06, -/* 00015530 */ 0xFE, 0x27, 0x04, 0xFE, 0x42, 0x03, 0x4F, 0x1A, 0x4F, 0x1B, 0x4F, 0x1C, 0x4F, 0x1D, 0x4F, 0x1E, -/* 00015540 */ 0x4F, 0x22, 0x94, 0x02, 0x22, 0x4F, 0x22, 0x94, 0x03, 0x22, 0x4F, 0x22, 0x94, 0x04, 0x22, 0x8C, -/* 00015550 */ 0x02, 0x32, 0x22, 0x15, 0x03, 0x00, 0x22, 0x03, 0x09, 0x11, 0x00, 0x8C, 0x02, 0x32, 0x22, 0x15, -/* 00015560 */ 0x03, 0x00, 0x22, 0x04, 0x09, 0x05, 0x00, 0xA6, 0x00, 0x09, 0x0A, 0x03, 0xD3, 0x00, 0x22, 0x94, -/* 00015570 */ 0x02, 0x22, 0x8C, 0x02, 0x03, 0x23, 0x6A, 0x22, 0x23, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x23, -/* 00015580 */ 0x8C, 0x02, 0x23, 0x24, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x05, 0xD3, 0x01, 0x25, -/* 00015590 */ 0x5A, 0x02, 0x25, 0x1F, 0x03, 0x24, 0x24, 0x5A, 0x01, 0x24, 0x8C, 0x02, 0x36, 0x24, 0x4B, 0x24, -/* 000155A0 */ 0x5F, 0x24, 0x24, 0x01, 0x5A, 0x02, 0x24, 0x1F, 0x03, 0xFF, 0x22, 0x8C, 0x02, 0x32, 0x22, 0x14, -/* 000155B0 */ 0x03, 0x00, 0x22, 0x04, 0x09, 0x05, 0x00, 0xA6, 0x00, 0x09, 0xBA, 0x02, 0x8C, 0x02, 0x23, 0x22, -/* 000155C0 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x06, 0xD3, 0x02, 0x23, 0x5A, 0x02, 0x23, 0x1F, -/* 000155D0 */ 0x03, 0x22, 0x22, 0x47, 0x1A, 0x22, 0x8C, 0x02, 0x23, 0x22, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, -/* 000155E0 */ 0x5A, 0x01, 0x07, 0xD3, 0x03, 0x23, 0x5A, 0x02, 0x23, 0x1F, 0x03, 0x22, 0x22, 0x94, 0x03, 0x22, -/* 000155F0 */ 0x8C, 0x02, 0x23, 0x22, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x08, 0xD3, 0x04, 0x23, -/* 00015600 */ 0x5A, 0x02, 0x23, 0x1F, 0x03, 0x22, 0x22, 0x47, 0x1B, 0x22, 0x94, 0x04, 0x09, 0x8C, 0x02, 0x23, -/* 00015610 */ 0x22, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x90, 0x04, 0x23, 0x5A, 0x01, 0x23, 0xD3, 0x05, 0x23, -/* 00015620 */ 0x5A, 0x02, 0x23, 0x1F, 0x03, 0x22, 0x22, 0x47, 0x1C, 0x22, 0x8C, 0x02, 0x37, 0x23, 0x4B, 0x23, -/* 00015630 */ 0x6A, 0x22, 0x23, 0x02, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x23, 0x5A, 0x01, 0x1C, 0x8C, 0x01, 0x16, -/* 00015640 */ 0x24, 0x4B, 0x24, 0x5A, 0x02, 0x24, 0x1F, 0x03, 0x22, 0x22, 0x47, 0x1D, 0x22, 0x8C, 0x02, 0x37, -/* 00015650 */ 0x23, 0x4B, 0x23, 0x6A, 0x22, 0x23, 0x03, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x23, 0x5A, 0x01, 0x1D, -/* 00015660 */ 0x5A, 0x02, 0x0A, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, -/* 00015670 */ 0x78, 0x0C, 0x24, 0x04, 0x78, 0x0E, 0x24, 0x05, 0x78, 0x0E, 0x24, 0x06, 0x78, 0x11, 0x24, 0x07, -/* 00015680 */ 0x5A, 0x03, 0x24, 0x1F, 0x04, 0xFF, 0x22, 0x8C, 0x02, 0x37, 0x23, 0x4B, 0x23, 0x6A, 0x22, 0x23, -/* 00015690 */ 0x03, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x23, 0x5A, 0x01, 0x1A, 0x5A, 0x02, 0x0C, 0xCB, 0x18, 0x00, -/* 000156A0 */ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x78, 0x1D, 0x24, 0x04, 0x78, 0x11, -/* 000156B0 */ 0x24, 0x05, 0x78, 0x0E, 0x24, 0x06, 0x78, 0x11, 0x24, 0x07, 0x5A, 0x03, 0x24, 0x1F, 0x04, 0xFF, -/* 000156C0 */ 0x22, 0x8C, 0x02, 0x37, 0x23, 0x4B, 0x23, 0x6A, 0x22, 0x23, 0x03, 0x07, 0x04, 0x00, 0x5A, 0x00, -/* 000156D0 */ 0x23, 0x5A, 0x01, 0x1A, 0x5A, 0x02, 0x13, 0xCB, 0x30, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, -/* 000156E0 */ 0x24, 0x00, 0x00, 0x00, 0x07, 0x01, 0x00, 0xC1, 0x01, 0x25, 0x1A, 0x78, 0x25, 0x24, 0x04, 0x78, -/* 000156F0 */ 0x0E, 0x24, 0x05, 0x78, 0x0E, 0x24, 0x06, 0x78, 0x0E, 0x24, 0x07, 0x5A, 0x03, 0x24, 0x1F, 0x04, -/* 00015700 */ 0xFF, 0x22, 0x8C, 0x02, 0x04, 0x22, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5F, 0x23, 0x1A, 0x08, -/* 00015710 */ 0x5A, 0x01, 0x23, 0x8C, 0x02, 0x08, 0x23, 0x5F, 0x23, 0x23, 0x09, 0x5A, 0x02, 0x23, 0x1F, 0x03, -/* 00015720 */ 0xFF, 0x22, 0x8C, 0x02, 0x37, 0x23, 0x4B, 0x23, 0x6A, 0x22, 0x23, 0x03, 0x07, 0x04, 0x00, 0x5A, -/* 00015730 */ 0x00, 0x23, 0x5F, 0x24, 0x1A, 0x08, 0x5A, 0x01, 0x24, 0x5A, 0x02, 0x14, 0xCB, 0x48, 0x00, 0x00, -/* 00015740 */ 0x00, 0x03, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x78, 0x1A, 0x24, 0x04, 0x78, 0x11, 0x24, -/* 00015750 */ 0x05, 0x78, 0x0E, 0x24, 0x06, 0x78, 0x11, 0x24, 0x07, 0x5A, 0x03, 0x24, 0x1F, 0x04, 0xFF, 0x22, -/* 00015760 */ 0x8C, 0x02, 0x37, 0x23, 0x4B, 0x23, 0x6A, 0x22, 0x23, 0x03, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x23, -/* 00015770 */ 0x5F, 0x24, 0x1A, 0x08, 0x5A, 0x01, 0x24, 0x5A, 0x02, 0x15, 0xCB, 0x60, 0x00, 0x00, 0x00, 0x04, -/* 00015780 */ 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0xD6, 0x06, 0x25, 0x24, 0x78, 0x25, 0x24, 0x04, 0x78, -/* 00015790 */ 0x11, 0x24, 0x05, 0x78, 0x0E, 0x24, 0x06, 0x78, 0x11, 0x24, 0x07, 0x5A, 0x03, 0x24, 0x1F, 0x04, -/* 000157A0 */ 0xFF, 0x22, 0xD3, 0x07, 0x22, 0x47, 0x1E, 0x22, 0x8C, 0x02, 0x37, 0x23, 0x4B, 0x23, 0x6A, 0x22, -/* 000157B0 */ 0x23, 0x03, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x23, 0x5A, 0x01, 0x1E, 0x5A, 0x02, 0x0A, 0xCB, 0x78, -/* 000157C0 */ 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x78, 0x16, 0x24, 0x04, 0x78, -/* 000157D0 */ 0x0E, 0x24, 0x05, 0x78, 0x0E, 0x24, 0x06, 0x78, 0x11, 0x24, 0x07, 0x5A, 0x03, 0x24, 0x1F, 0x04, -/* 000157E0 */ 0xFF, 0x22, 0x8C, 0x02, 0x37, 0x23, 0x4B, 0x23, 0x6A, 0x22, 0x23, 0x03, 0x07, 0x04, 0x00, 0x5A, -/* 000157F0 */ 0x00, 0x23, 0x5F, 0x24, 0x1A, 0x08, 0x5A, 0x01, 0x24, 0x5A, 0x02, 0x17, 0xCB, 0x90, 0x00, 0x00, -/* 00015800 */ 0x00, 0x06, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x8C, 0x02, 0x23, 0x25, 0x07, 0x03, 0x00, -/* 00015810 */ 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x16, 0x5A, 0x02, 0x1E, 0x1F, 0x03, 0x25, 0x25, 0x78, 0x25, 0x24, -/* 00015820 */ 0x0A, 0x78, 0x0E, 0x24, 0x06, 0x78, 0x11, 0x24, 0x07, 0x5A, 0x03, 0x24, 0x1F, 0x04, 0xFF, 0x22, -/* 00015830 */ 0x8C, 0x02, 0x37, 0x23, 0x4B, 0x23, 0x6A, 0x22, 0x23, 0x03, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x23, -/* 00015840 */ 0x5F, 0x24, 0x1A, 0x08, 0x5A, 0x01, 0x24, 0x5A, 0x02, 0x19, 0xCB, 0xA4, 0x00, 0x00, 0x00, 0x07, -/* 00015850 */ 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x78, 0x1B, 0x24, 0x04, 0x78, 0x0E, 0x24, 0x06, 0x78, -/* 00015860 */ 0x11, 0x24, 0x07, 0x78, 0x11, 0x24, 0x05, 0x5A, 0x03, 0x24, 0x1F, 0x04, 0xFF, 0x22, 0x47, 0x00, -/* 00015870 */ 0x1A, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x08, 0xBC, 0x00, 0xA4, 0x00, 0x00, 0x00, 0x03, -/* 00015880 */ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, -/* 00015890 */ 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, -/* 000158A0 */ 0x00, 0x00, 0x00, 0x84, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x78, -/* 000158B0 */ 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, -/* 000158C0 */ 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x03, -/* 000158D0 */ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, -/* 000158E0 */ 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, -/* 000158F0 */ 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, -/* 00015900 */ 0x01, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, -/* 00015910 */ 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x18, -/* 00015920 */ 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, -/* 00015930 */ 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, -/* 00015940 */ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, -/* 00015950 */ 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0xFE, 0xEE, 0x01, 0xFE, 0x06, 0x03, 0x4D, 0xFE, 0x88, -/* 00015960 */ 0x01, 0xFE, 0x83, 0x01, 0xFE, 0x82, 0x01, 0xFE, 0x80, 0x01, 0xFE, 0x81, 0x01, 0xFE, 0x15, 0x01, -/* 00015970 */ 0xFE, 0x15, 0x01, 0xFE, 0x84, 0x01, 0xFE, 0x58, 0xC7, 0x18, 0x19, 0x00, 0x00, 0x00, 0x18, 0x00, -/* 00015980 */ 0x40, 0x00, 0x05, 0x00, 0x1B, 0x00, 0x06, 0x00, 0xD3, 0x09, 0x39, 0x00, 0x80, 0x02, 0x0C, 0x00, -/* 00015990 */ 0x29, 0x00, 0x05, 0x00, 0x1B, 0x00, 0x1A, 0x00, 0xA3, 0x03, 0x1A, 0x00, 0xBA, 0x02, 0x1A, 0x00, -/* 000159A0 */ 0x10, 0x03, 0x03, 0x00, 0x5D, 0x00, 0x1D, 0x00, 0x36, 0x01, 0x23, 0x00, 0x77, 0x00, 0x3A, 0x00, -/* 000159B0 */ 0xD5, 0x00, 0x3A, 0x00, 0xDB, 0x00, 0x41, 0x00, 0xC6, 0x00, 0x20, 0x00, 0x40, 0x00, 0x3E, 0x00, -/* 000159C0 */ 0xCB, 0x00, 0x42, 0x00, 0xA0, 0x04, 0x06, 0x00, 0x04, 0x02, 0x3A, 0x00, 0xB7, 0x00, 0x4E, 0x00, -/* 000159D0 */ 0xC6, 0x00, 0x3E, 0x00, 0xCE, 0x00, 0x08, 0x00, 0x19, 0x00, 0x00, 0xEC, 0x61, 0x01, 0x00, 0xC9, -/* 000159E0 */ 0x60, 0x01, 0x00, 0xFC, 0x5E, 0x01, 0x00, 0xDF, 0x5D, 0x01, 0x00, 0xC1, 0x5C, 0x01, 0x00, 0x3A, -/* 000159F0 */ 0x5C, 0x01, 0x00, 0xDE, 0x5A, 0x01, 0x00, 0xFB, 0x59, 0x01, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, -/* 00015A00 */ 0x88, 0x01, 0x00, 0xFE, 0x3F, 0x05, 0x1A, 0xA0, 0x41, 0xC1, 0x00, 0xFE, 0x36, 0x04, 0x56, 0xFE, -/* 00015A10 */ 0xF4, 0xE7, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0xF4, 0xE7, 0xFE, 0xE8, 0x01, 0xFE, -/* 00015A20 */ 0xE8, 0x01, 0x01, 0x05, 0x05, 0x08, 0x04, 0x24, 0x23, 0x03, 0x01, 0x04, 0x04, 0x04, 0x04, 0x07, -/* 00015A30 */ 0x06, 0xFE, 0xF6, 0x03, 0x05, 0xFE, 0x32, 0x04, 0x06, 0xFE, 0x46, 0x03, 0x74, 0x59, 0x08, 0xB1, -/* 00015A40 */ 0x05, 0x08, 0x4F, 0x06, 0x2C, 0x08, 0x05, 0x15, 0x03, 0x00, 0x08, 0x02, 0x09, 0x18, 0x00, 0x8C, -/* 00015A50 */ 0x03, 0x03, 0x09, 0x6A, 0x08, 0x09, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x09, 0x5A, 0x01, 0x03, -/* 00015A60 */ 0x5A, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x08, 0x8C, 0x03, 0x03, 0x09, 0x6A, 0x08, 0x09, 0x01, 0x07, -/* 00015A70 */ 0x02, 0x00, 0x5A, 0x00, 0x09, 0x5A, 0x01, 0x05, 0x1F, 0x02, 0x08, 0x08, 0x47, 0x06, 0x08, 0xA6, -/* 00015A80 */ 0x08, 0x14, 0x08, 0x00, 0x06, 0x08, 0x5F, 0x08, 0x06, 0x02, 0x0F, 0x18, 0x00, 0x08, 0x8C, 0x03, -/* 00015A90 */ 0x03, 0x09, 0x6A, 0x08, 0x09, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x09, 0x5A, 0x01, 0x03, 0x5A, -/* 00015AA0 */ 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x08, 0x5F, 0x00, 0x06, 0x03, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, -/* 00015AB0 */ 0x00, 0xFE, 0x8A, 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0x30, 0x04, 0xFE, 0x31, 0x04, 0xFE, 0x0E, 0xE8, -/* 00015AC0 */ 0x07, 0x07, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x30, 0x00, 0x18, 0x00, 0x6C, 0x00, 0x18, 0x00, 0x41, -/* 00015AD0 */ 0x00, 0x0F, 0x00, 0x5B, 0x00, 0x18, 0x00, 0x6C, 0x00, 0x09, 0x00, 0x29, 0x00, 0x00, 0xBF, 0x5C, -/* 00015AE0 */ 0x00, 0xC1, 0x03, 0x88, 0x03, 0x00, 0xFE, 0x2A, 0x05, 0x13, 0xA0, 0x41, 0xC3, 0x00, 0xFE, 0x0D, -/* 00015AF0 */ 0x04, 0x55, 0xFF, 0x00, 0x00, 0x00, 0x02, 0xFE, 0x93, 0xE3, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, -/* 00015B00 */ 0x01, 0xFE, 0x93, 0xE3, 0xFE, 0x61, 0x03, 0xFE, 0x61, 0x03, 0x01, 0x06, 0x11, 0x15, 0x04, 0x38, -/* 00015B10 */ 0x36, 0x03, 0x02, 0x03, 0x03, 0x03, 0x03, 0x14, 0x06, 0xFE, 0xF6, 0x03, 0x05, 0xFE, 0x34, 0x04, -/* 00015B20 */ 0x06, 0xFE, 0x46, 0x03, 0x06, 0xFE, 0xF7, 0x03, 0x06, 0xFE, 0x35, 0x04, 0x06, 0xFE, 0x28, 0x04, -/* 00015B30 */ 0x06, 0xFE, 0x2B, 0x04, 0x06, 0xFE, 0x2C, 0x04, 0x06, 0xFE, 0xFA, 0x03, 0x06, 0xFE, 0xFB, 0x03, -/* 00015B40 */ 0x06, 0xFE, 0xFC, 0x03, 0x06, 0xFE, 0xFD, 0x03, 0x06, 0xFE, 0xFE, 0x03, 0x06, 0xFE, 0x2F, 0x04, -/* 00015B50 */ 0x08, 0xBA, 0x59, 0x15, 0xB1, 0x11, 0x15, 0x4F, 0x12, 0x4F, 0x13, 0x2C, 0x15, 0x11, 0x15, 0x03, -/* 00015B60 */ 0x00, 0x15, 0x02, 0x09, 0x18, 0x00, 0x8C, 0x03, 0x03, 0x16, 0x6A, 0x15, 0x16, 0x00, 0x07, 0x03, -/* 00015B70 */ 0x00, 0x5A, 0x00, 0x16, 0x5A, 0x01, 0x03, 0x5A, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x15, 0x8C, 0x03, -/* 00015B80 */ 0x03, 0x16, 0x6A, 0x15, 0x16, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x16, 0x5A, 0x01, 0x11, 0x1F, -/* 00015B90 */ 0x02, 0x15, 0x15, 0x47, 0x12, 0x15, 0xA6, 0x15, 0x14, 0x08, 0x00, 0x12, 0x15, 0x5F, 0x15, 0x12, -/* 00015BA0 */ 0x02, 0x0F, 0x18, 0x00, 0x15, 0x8C, 0x03, 0x03, 0x16, 0x6A, 0x15, 0x16, 0x00, 0x07, 0x03, 0x00, -/* 00015BB0 */ 0x5A, 0x00, 0x16, 0x5A, 0x01, 0x03, 0x5A, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x15, 0xCC, 0x15, 0x0B, -/* 00015BC0 */ 0x9F, 0x00, 0x05, 0x15, 0x9F, 0x01, 0x06, 0x15, 0x9F, 0x02, 0x07, 0x15, 0x9F, 0x03, 0x08, 0x15, -/* 00015BD0 */ 0x9F, 0x04, 0x09, 0x15, 0x9F, 0x05, 0x0A, 0x15, 0x9F, 0x06, 0x0B, 0x15, 0x9F, 0x07, 0x0C, 0x15, -/* 00015BE0 */ 0x9F, 0x08, 0x0D, 0x15, 0x9F, 0x09, 0x0E, 0x15, 0x9F, 0x0A, 0x0F, 0x15, 0x47, 0x13, 0x15, 0x8C, -/* 00015BF0 */ 0x02, 0x19, 0x15, 0x4B, 0x15, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x10, 0x5A, 0x01, 0x13, 0x5A, 0x02, -/* 00015C00 */ 0x12, 0x1F, 0x03, 0x00, 0x15, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x8A, 0x02, 0xFE, -/* 00015C10 */ 0xEF, 0x01, 0xFE, 0x30, 0x04, 0xFE, 0xC0, 0xE3, 0x08, 0x09, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x34, -/* 00015C20 */ 0x00, 0x18, 0x00, 0x7C, 0x00, 0x18, 0x00, 0x45, 0x00, 0x0F, 0x00, 0x5F, 0x00, 0x18, 0x00, 0x7D, -/* 00015C30 */ 0x00, 0x32, 0x00, 0x21, 0x01, 0x1B, 0x00, 0x41, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, -/* 00015C40 */ 0x01, 0x00, 0xFE, 0x0A, 0x05, 0x6D, 0xA2, 0x41, 0xD1, 0x00, 0x54, 0xFE, 0x79, 0xDE, 0xFF, 0x00, -/* 00015C50 */ 0x10, 0x01, 0x00, 0x03, 0x02, 0xFE, 0x79, 0xDE, 0xC6, 0xC6, 0x01, 0x06, 0x03, 0x07, 0x07, 0x17, -/* 00015C60 */ 0x16, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x06, 0x08, 0x43, 0x59, 0x07, 0xB1, 0x05, 0x07, 0x15, -/* 00015C70 */ 0x05, 0x00, 0x04, 0x02, 0xA6, 0x07, 0x47, 0x04, 0x07, 0x8C, 0x02, 0x17, 0x07, 0x4B, 0x07, 0x07, -/* 00015C80 */ 0x06, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x05, 0x8C, 0x01, 0x04, 0x08, 0x4B, 0x08, 0x5A, 0x02, -/* 00015C90 */ 0x08, 0x8C, 0x03, 0x03, 0x08, 0x5F, 0x08, 0x08, 0x00, 0x5A, 0x03, 0x08, 0x5A, 0x04, 0x03, 0x5A, -/* 00015CA0 */ 0x05, 0x04, 0x1F, 0x06, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xDB, 0x01, -/* 00015CB0 */ 0xFE, 0x8C, 0xDE, 0x03, 0x05, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x23, 0x00, 0x32, 0x00, 0x8F, 0x00, -/* 00015CC0 */ 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0xF9, 0x04, 0x5D, 0xA2, 0x41, 0xC3, -/* 00015CD0 */ 0x00, 0xFE, 0x27, 0x04, 0x53, 0xFE, 0xFC, 0xDA, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, -/* 00015CE0 */ 0xFC, 0xDA, 0xFE, 0x7B, 0x02, 0xFE, 0x7B, 0x02, 0x01, 0x06, 0x07, 0x0B, 0x06, 0x33, 0x31, 0x03, -/* 00015CF0 */ 0x02, 0x05, 0x05, 0x05, 0x05, 0x0A, 0x06, 0xFE, 0xF6, 0x03, 0x05, 0xFE, 0x33, 0x04, 0x06, 0xFE, -/* 00015D00 */ 0x46, 0x03, 0x0B, 0x0C, 0xA6, 0x59, 0x0B, 0xB1, 0x08, 0x0B, 0x4F, 0x09, 0x8C, 0x03, 0x24, 0x0C, -/* 00015D10 */ 0x6A, 0x0B, 0x0C, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5A, 0x01, 0x07, 0x1F, 0x02, 0x0B, -/* 00015D20 */ 0x0B, 0x47, 0x07, 0x0B, 0x2C, 0x0B, 0x08, 0x15, 0x03, 0x00, 0x0B, 0x02, 0x09, 0x18, 0x00, 0x8C, -/* 00015D30 */ 0x03, 0x03, 0x0C, 0x6A, 0x0B, 0x0C, 0x01, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x5A, 0x01, 0x03, -/* 00015D40 */ 0x5A, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x0B, 0x8C, 0x03, 0x03, 0x0C, 0x6A, 0x0B, 0x0C, 0x02, 0x07, -/* 00015D50 */ 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5A, 0x01, 0x08, 0x1F, 0x02, 0x0B, 0x0B, 0x47, 0x09, 0x0B, 0xA6, -/* 00015D60 */ 0x0B, 0x14, 0x08, 0x00, 0x09, 0x0B, 0x5F, 0x0B, 0x09, 0x03, 0x0F, 0x18, 0x00, 0x0B, 0x8C, 0x03, -/* 00015D70 */ 0x03, 0x0C, 0x6A, 0x0B, 0x0C, 0x01, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x5A, 0x01, 0x03, 0x5A, -/* 00015D80 */ 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x0B, 0x8C, 0x03, 0x03, 0x0C, 0x6A, 0x0B, 0x0C, 0x04, 0x07, 0x05, -/* 00015D90 */ 0x00, 0x5A, 0x00, 0x0C, 0x5A, 0x01, 0x07, 0x5A, 0x02, 0x09, 0x5A, 0x03, 0x05, 0x5A, 0x04, 0x06, -/* 00015DA0 */ 0x1F, 0x05, 0x00, 0x0B, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x38, 0x03, 0xFE, 0x8A, -/* 00015DB0 */ 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0x30, 0x04, 0xFE, 0xE2, 0x01, 0xFE, 0x24, 0xDB, 0x08, 0x07, 0x00, -/* 00015DC0 */ 0x00, 0x00, 0x18, 0x00, 0x27, 0x00, 0x0B, 0x00, 0x30, 0x00, 0x18, 0x00, 0x73, 0x00, 0x18, 0x00, -/* 00015DD0 */ 0x41, 0x00, 0x0F, 0x00, 0x5B, 0x00, 0x18, 0x00, 0x73, 0x00, 0x23, 0x00, 0x79, 0x00, 0x00, 0xBF, -/* 00015DE0 */ 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0xEA, 0x04, 0x4F, 0xA2, 0x41, 0xC3, 0x00, 0xFE, -/* 00015DF0 */ 0x26, 0x04, 0x52, 0xFE, 0x34, 0xD8, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x34, 0xD8, -/* 00015E00 */ 0xFE, 0x67, 0x02, 0xFE, 0x67, 0x02, 0x01, 0x06, 0x06, 0x0A, 0x06, 0x33, 0x31, 0x03, 0x02, 0x05, -/* 00015E10 */ 0x05, 0x05, 0x05, 0x09, 0x06, 0xFE, 0xF6, 0x03, 0x05, 0xFE, 0x32, 0x04, 0x06, 0xFE, 0x46, 0x03, -/* 00015E20 */ 0x0C, 0xA6, 0x59, 0x0A, 0xB1, 0x07, 0x0A, 0x4F, 0x08, 0x8C, 0x03, 0x24, 0x0B, 0x6A, 0x0A, 0x0B, -/* 00015E30 */ 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0B, 0x5A, 0x01, 0x06, 0x1F, 0x02, 0x0A, 0x0A, 0x47, 0x06, -/* 00015E40 */ 0x0A, 0x2C, 0x0A, 0x07, 0x15, 0x03, 0x00, 0x0A, 0x02, 0x09, 0x18, 0x00, 0x8C, 0x03, 0x03, 0x0B, -/* 00015E50 */ 0x6A, 0x0A, 0x0B, 0x01, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0B, 0x5A, 0x01, 0x03, 0x5A, 0x02, 0x04, -/* 00015E60 */ 0x1F, 0x03, 0xFF, 0x0A, 0x8C, 0x03, 0x03, 0x0B, 0x6A, 0x0A, 0x0B, 0x02, 0x07, 0x02, 0x00, 0x5A, -/* 00015E70 */ 0x00, 0x0B, 0x5A, 0x01, 0x07, 0x1F, 0x02, 0x0A, 0x0A, 0x47, 0x08, 0x0A, 0xA6, 0x0A, 0x14, 0x08, -/* 00015E80 */ 0x00, 0x08, 0x0A, 0x5F, 0x0A, 0x08, 0x03, 0x0F, 0x18, 0x00, 0x0A, 0x8C, 0x03, 0x03, 0x0B, 0x6A, -/* 00015E90 */ 0x0A, 0x0B, 0x01, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0B, 0x5A, 0x01, 0x03, 0x5A, 0x02, 0x04, 0x1F, -/* 00015EA0 */ 0x03, 0xFF, 0x0A, 0x8C, 0x03, 0x03, 0x0B, 0x6A, 0x0A, 0x0B, 0x04, 0x07, 0x05, 0x00, 0x5A, 0x00, -/* 00015EB0 */ 0x0B, 0x5A, 0x01, 0x06, 0x5A, 0x02, 0x08, 0x5A, 0x03, 0x05, 0x5A, 0x04, 0x05, 0x1F, 0x05, 0x00, -/* 00015EC0 */ 0x0A, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x38, 0x03, 0xFE, 0x8A, 0x02, 0xFE, 0xEF, -/* 00015ED0 */ 0x01, 0xFE, 0x30, 0x04, 0xFE, 0xE2, 0x01, 0xFE, 0x55, 0xD8, 0x08, 0x07, 0x00, 0x00, 0x00, 0x18, -/* 00015EE0 */ 0x00, 0x27, 0x00, 0x0B, 0x00, 0x30, 0x00, 0x18, 0x00, 0x6C, 0x00, 0x18, 0x00, 0x41, 0x00, 0x0F, -/* 00015EF0 */ 0x00, 0x5B, 0x00, 0x18, 0x00, 0x6C, 0x00, 0x23, 0x00, 0x7A, 0x00, 0x00, 0x3F, 0x5C, 0x00, 0xC1, -/* 00015F00 */ 0x03, 0x88, 0x01, 0x00, 0xFE, 0xD0, 0x04, 0x44, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x46, 0x03, 0x51, -/* 00015F10 */ 0xFE, 0x86, 0xD4, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x01, 0xFE, 0x86, 0xD4, 0xFE, 0x5B, 0x03, -/* 00015F20 */ 0xFE, 0x5B, 0x03, 0x0B, 0x04, 0x0B, 0x05, 0x60, 0x59, 0x03, 0x05, 0x0A, 0x09, 0x0A, 0x0A, 0x0A, -/* 00015F30 */ 0x08, 0x06, 0xFE, 0x46, 0x03, 0xFE, 0x36, 0x01, 0x59, 0x0B, 0xB1, 0x06, 0x0B, 0xBD, 0x07, 0x4F, -/* 00015F40 */ 0x08, 0x4F, 0x09, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA6, 0x0B, 0x47, 0x04, 0x0B, 0x15, 0x05, 0x00, -/* 00015F50 */ 0x05, 0x02, 0xA6, 0x0B, 0x47, 0x05, 0x0B, 0x4F, 0x08, 0x4F, 0x09, 0x68, 0x09, 0x00, 0x00, 0x00, -/* 00015F60 */ 0x0B, 0x14, 0x0A, 0x00, 0x06, 0x0B, 0xA6, 0x0B, 0x14, 0x03, 0x00, 0x06, 0x0B, 0x09, 0x10, 0x00, -/* 00015F70 */ 0x07, 0x03, 0x00, 0x5A, 0x01, 0x04, 0x5A, 0x02, 0x05, 0xC1, 0x03, 0x00, 0x07, 0x09, 0xEC, 0x00, -/* 00015F80 */ 0x8C, 0x03, 0x24, 0x0C, 0x6A, 0x0B, 0x0C, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5A, 0x01, -/* 00015F90 */ 0x06, 0x1F, 0x02, 0x0B, 0x0B, 0x47, 0x08, 0x0B, 0x8C, 0x03, 0x37, 0x0C, 0x4B, 0x0C, 0x6A, 0x0B, -/* 00015FA0 */ 0x0C, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5A, 0x01, 0x08, 0x1F, 0x02, 0x0B, 0x0B, 0x0F, -/* 00015FB0 */ 0x15, 0x00, 0x0B, 0x8C, 0x03, 0x03, 0x0C, 0x6A, 0x0B, 0x0C, 0x02, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 00015FC0 */ 0x0C, 0x5A, 0x01, 0x03, 0x1F, 0x02, 0xFF, 0x0B, 0x8C, 0x03, 0x03, 0x0C, 0x6A, 0x0B, 0x0C, 0x03, -/* 00015FD0 */ 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5A, 0x01, 0x08, 0x1F, 0x02, 0x0B, 0x0B, 0x47, 0x09, 0x0B, -/* 00015FE0 */ 0xA6, 0x0B, 0x14, 0x03, 0x00, 0x09, 0x0B, 0x09, 0x2F, 0x00, 0x8C, 0x03, 0x37, 0x0C, 0x4B, 0x0C, -/* 00015FF0 */ 0x6A, 0x0B, 0x0C, 0x04, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x0C, 0x1F, 0x01, 0x0B, 0x0B, 0x47, 0x09, -/* 00016000 */ 0x0B, 0x8C, 0x03, 0x03, 0x0C, 0x6A, 0x0B, 0x0C, 0x05, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x5A, -/* 00016010 */ 0x01, 0x08, 0x5A, 0x02, 0x09, 0x1F, 0x03, 0xFF, 0x0B, 0x8C, 0x01, 0x02, 0x0B, 0x4B, 0x0B, 0x07, -/* 00016020 */ 0x04, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x09, 0x5A, 0x02, 0x04, 0x5A, 0x03, 0x05, 0x1F, 0x04, -/* 00016030 */ 0xFF, 0x0B, 0x47, 0x0B, 0x09, 0x8C, 0x03, 0x37, 0x0D, 0x4B, 0x0D, 0x6A, 0x0C, 0x0D, 0x06, 0x07, -/* 00016040 */ 0x03, 0x00, 0x5A, 0x00, 0x0D, 0x8C, 0x01, 0x03, 0x0E, 0x4B, 0x0E, 0x5A, 0x01, 0x0E, 0x5A, 0x02, -/* 00016050 */ 0x08, 0x1F, 0x03, 0x0C, 0x0C, 0x74, 0x0C, 0x0B, 0x07, 0x5F, 0x0B, 0x09, 0x08, 0x80, 0x0B, 0x0B, -/* 00016060 */ 0xF8, 0x00, 0xFA, 0x0B, 0x47, 0x00, 0x08, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x36, -/* 00016070 */ 0x03, 0xB0, 0xFE, 0x8E, 0x02, 0xFE, 0xEF, 0x01, 0x61, 0xFE, 0xF0, 0x01, 0x4D, 0xFE, 0x31, 0x04, -/* 00016080 */ 0xFE, 0x31, 0x04, 0xAB, 0xFE, 0x9C, 0xD4, 0x10, 0x0B, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, -/* 00016090 */ 0x0E, 0x00, 0x23, 0x00, 0x15, 0x00, 0x3B, 0x00, 0x10, 0x00, 0x46, 0x00, 0x18, 0x00, 0x32, 0x00, -/* 000160A0 */ 0x1B, 0x00, 0x2C, 0x00, 0x15, 0x00, 0x83, 0x00, 0x18, 0x00, 0x3E, 0x00, 0x0A, 0x00, 0x32, 0x00, -/* 000160B0 */ 0x17, 0x00, 0x2B, 0x00, 0x18, 0x00, 0x48, 0x00, 0x19, 0x00, 0x45, 0x00, 0x27, 0x00, 0x3B, 0x00, -/* 000160C0 */ 0x0B, 0x00, 0x33, 0x00, 0x08, 0x00, 0x14, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x07, 0x88, 0x01, -/* 000160D0 */ 0x00, 0xFE, 0xC0, 0x04, 0x5E, 0xA0, 0x41, 0xF1, 0x00, 0x50, 0xFE, 0xDC, 0xD1, 0xFF, 0x00, 0x10, -/* 000160E0 */ 0x01, 0x00, 0x01, 0x01, 0xFE, 0xDC, 0xD1, 0xFE, 0xF1, 0x01, 0xFE, 0xF1, 0x01, 0x03, 0x07, 0x0B, -/* 000160F0 */ 0x10, 0x06, 0x37, 0x35, 0x03, 0x05, 0x04, 0x04, 0x04, 0x04, 0x01, 0x0F, 0x07, 0x06, 0xFE, 0xC3, -/* 00016100 */ 0x03, 0x05, 0xFE, 0x21, 0x04, 0x06, 0xFE, 0x20, 0x04, 0x01, 0x00, 0x01, 0x01, 0x08, 0x0C, 0x0B, -/* 00016110 */ 0xB0, 0xAC, 0x0D, 0x59, 0x10, 0xB1, 0x0B, 0x10, 0x4F, 0x0C, 0x4F, 0x0E, 0x2C, 0x10, 0x0B, 0x15, -/* 00016120 */ 0x03, 0x00, 0x10, 0x03, 0x09, 0x25, 0x00, 0x8C, 0x03, 0x0A, 0x10, 0xE1, 0x10, 0x0B, 0x10, 0x00, -/* 00016130 */ 0x0F, 0x18, 0x00, 0x10, 0x8C, 0x03, 0x03, 0x11, 0x6A, 0x10, 0x11, 0x00, 0x07, 0x03, 0x00, 0x5A, -/* 00016140 */ 0x00, 0x11, 0x5A, 0x01, 0x04, 0x5A, 0x02, 0x05, 0x1F, 0x03, 0xFF, 0x10, 0x8C, 0x03, 0x37, 0x11, -/* 00016150 */ 0x4B, 0x11, 0x6A, 0x10, 0x11, 0x01, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x11, 0x1F, 0x01, 0x10, 0x10, -/* 00016160 */ 0x47, 0x0C, 0x10, 0x8C, 0x01, 0x02, 0x10, 0x4B, 0x10, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x08, 0x5A, -/* 00016170 */ 0x01, 0x0C, 0x95, 0x11, 0x0D, 0x06, 0x5A, 0x02, 0x11, 0x95, 0x11, 0x0D, 0x07, 0x5A, 0x03, 0x11, -/* 00016180 */ 0x1F, 0x04, 0xFF, 0x10, 0x8C, 0x03, 0x24, 0x11, 0x6A, 0x10, 0x11, 0x02, 0x07, 0x02, 0x00, 0x5A, -/* 00016190 */ 0x00, 0x11, 0x5A, 0x01, 0x0B, 0x1F, 0x02, 0x10, 0x10, 0x47, 0x0E, 0x10, 0x8C, 0x03, 0x03, 0x11, -/* 000161A0 */ 0x6A, 0x10, 0x11, 0x03, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x11, 0x5A, 0x01, 0x0E, 0x5A, 0x02, 0x0C, -/* 000161B0 */ 0x5A, 0x03, 0x09, 0x5A, 0x04, 0x0A, 0x1F, 0x05, 0x00, 0x10, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, -/* 000161C0 */ 0x00, 0xFE, 0x8A, 0x02, 0x61, 0xFE, 0x38, 0x03, 0xFE, 0xE2, 0x01, 0xFE, 0xF6, 0xD1, 0x07, 0x0B, -/* 000161D0 */ 0x00, 0x00, 0x00, 0x18, 0x00, 0x4D, 0x00, 0x18, 0x00, 0x68, 0x00, 0x17, 0x00, 0x2C, 0x00, 0x21, -/* 000161E0 */ 0x00, 0x4E, 0x00, 0x18, 0x00, 0x2F, 0x00, 0x23, 0x00, 0x78, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, -/* 000161F0 */ 0x03, 0x88, 0x01, 0x00, 0xFE, 0x83, 0x04, 0x27, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x1F, 0x04, 0x4F, -/* 00016200 */ 0xFE, 0xD2, 0xC7, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, 0xD2, 0xC7, 0xFE, 0xA9, 0x09, -/* 00016210 */ 0xFE, 0xA9, 0x09, 0x01, 0x12, 0x15, 0x23, 0x07, 0xFC, 0xE3, 0x03, 0x0B, 0x16, 0x16, 0x16, 0x16, -/* 00016220 */ 0x22, 0x08, 0x06, 0xFE, 0x00, 0x04, 0x06, 0xFE, 0xAD, 0x03, 0x05, 0xFE, 0xFF, 0x03, 0x05, 0xFE, -/* 00016230 */ 0xBC, 0x03, 0x06, 0xFE, 0xB4, 0x03, 0x06, 0xFE, 0x28, 0x04, 0x05, 0xFE, 0x29, 0x04, 0x05, 0xFE, -/* 00016240 */ 0x2A, 0x04, 0x06, 0xFE, 0x2B, 0x04, 0x01, 0x00, 0x06, 0xFE, 0x2C, 0x04, 0x05, 0xFE, 0x2D, 0x04, -/* 00016250 */ 0x06, 0xFE, 0x2E, 0x04, 0x06, 0xFE, 0x3F, 0x03, 0x01, 0x03, 0x06, 0xFE, 0x2F, 0x04, 0x06, 0xFE, -/* 00016260 */ 0xC2, 0x03, 0x0B, 0xFE, 0x26, 0x03, 0x4F, 0x18, 0x4F, 0x19, 0x4F, 0x1A, 0x4F, 0x1B, 0x4F, 0x1C, -/* 00016270 */ 0x4F, 0x1D, 0x4F, 0x1E, 0x4F, 0x1F, 0x4F, 0x20, 0x4F, 0x21, 0x8C, 0x02, 0x11, 0x23, 0x4B, 0x23, -/* 00016280 */ 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x16, 0x1F, 0x02, 0x23, 0x23, 0x47, 0x18, 0x23, -/* 00016290 */ 0xA6, 0x23, 0x14, 0x03, 0x00, 0x17, 0x23, 0x09, 0x1A, 0x00, 0x8C, 0x03, 0x37, 0x25, 0x4B, 0x25, -/* 000162A0 */ 0x6A, 0x24, 0x25, 0x00, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x25, 0x1F, 0x01, 0x24, 0x24, 0x47, 0x23, -/* 000162B0 */ 0x24, 0x09, 0x18, 0x00, 0x8C, 0x03, 0x24, 0x25, 0x6A, 0x24, 0x25, 0x01, 0x07, 0x02, 0x00, 0x5A, -/* 000162C0 */ 0x00, 0x25, 0x5A, 0x01, 0x17, 0x1F, 0x02, 0x24, 0x24, 0x47, 0x23, 0x24, 0x47, 0x17, 0x23, 0x8C, -/* 000162D0 */ 0x03, 0x37, 0x24, 0x4B, 0x24, 0x6A, 0x23, 0x24, 0x02, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x24, 0x1F, -/* 000162E0 */ 0x01, 0x23, 0x23, 0x47, 0x19, 0x23, 0x47, 0x23, 0x19, 0x8C, 0x02, 0x02, 0x24, 0x4B, 0x24, 0x07, -/* 000162F0 */ 0x06, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x17, 0x5A, 0x02, 0x03, 0x5A, 0x03, 0x04, 0xCC, 0x25, -/* 00016300 */ 0x02, 0x9F, 0x00, 0x05, 0x25, 0x9F, 0x01, 0x06, 0x25, 0x5A, 0x04, 0x25, 0x5A, 0x05, 0x05, 0x1F, -/* 00016310 */ 0x06, 0x24, 0x24, 0x74, 0x24, 0x23, 0x03, 0x8C, 0x02, 0x0B, 0x23, 0x4B, 0x23, 0x07, 0x05, 0x00, -/* 00016320 */ 0x5A, 0x00, 0x02, 0x8C, 0x03, 0x03, 0x24, 0x5F, 0x24, 0x24, 0x04, 0x5A, 0x01, 0x24, 0x5A, 0x02, -/* 00016330 */ 0x18, 0x5A, 0x03, 0x19, 0xCC, 0x24, 0x01, 0x9F, 0x00, 0x07, 0x24, 0x5A, 0x04, 0x24, 0x1F, 0x05, -/* 00016340 */ 0x23, 0x23, 0x47, 0x1A, 0x23, 0x5F, 0x23, 0x1A, 0x05, 0x74, 0x23, 0x15, 0x06, 0x5F, 0x23, 0x1A, -/* 00016350 */ 0x07, 0x74, 0x23, 0x15, 0x08, 0x8C, 0x02, 0x02, 0x23, 0x4B, 0x23, 0x07, 0x06, 0x00, 0x5A, 0x00, -/* 00016360 */ 0x02, 0x5A, 0x01, 0x17, 0x5A, 0x02, 0x08, 0x5A, 0x03, 0x04, 0xCC, 0x24, 0x03, 0x9F, 0x00, 0x09, -/* 00016370 */ 0x24, 0x9F, 0x01, 0x0A, 0x24, 0x9F, 0x02, 0x0B, 0x24, 0x5A, 0x04, 0x24, 0x5A, 0x05, 0x09, 0x1F, -/* 00016380 */ 0x06, 0x23, 0x23, 0x47, 0x1B, 0x23, 0x74, 0x1B, 0x15, 0x09, 0x47, 0x23, 0x15, 0x8C, 0x03, 0x3D, -/* 00016390 */ 0x24, 0x4B, 0x24, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x8C, 0x03, 0x3B, 0x25, 0x4B, 0x25, 0x5A, -/* 000163A0 */ 0x01, 0x25, 0x8C, 0x03, 0x37, 0x26, 0x4B, 0x26, 0x6A, 0x25, 0x26, 0x0A, 0x07, 0x02, 0x00, 0x5A, -/* 000163B0 */ 0x00, 0x26, 0x5A, 0x01, 0x1B, 0x1F, 0x02, 0x25, 0x25, 0x5A, 0x02, 0x25, 0x1F, 0x03, 0x24, 0x24, -/* 000163C0 */ 0x74, 0x24, 0x23, 0x0B, 0x43, 0x23, 0x1B, 0x0B, 0x47, 0x1C, 0x23, 0x8C, 0x02, 0x02, 0x23, 0x4B, -/* 000163D0 */ 0x23, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x17, 0x5A, 0x02, 0x0B, 0x5A, 0x03, 0x04, -/* 000163E0 */ 0xA6, 0x24, 0x5A, 0x04, 0x24, 0xA6, 0x24, 0x5A, 0x05, 0x24, 0x1F, 0x06, 0x23, 0x23, 0x47, 0x1D, -/* 000163F0 */ 0x23, 0xA6, 0x23, 0x15, 0x03, 0x00, 0x1D, 0x23, 0x09, 0x2F, 0x00, 0x8C, 0x02, 0x0F, 0x23, 0x4B, -/* 00016400 */ 0x23, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x1D, 0x1F, 0x02, 0x23, 0x23, 0x0F, 0x18, -/* 00016410 */ 0x00, 0x23, 0x8C, 0x03, 0x03, 0x24, 0x6A, 0x23, 0x24, 0x0C, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x24, -/* 00016420 */ 0x5A, 0x01, 0x1D, 0x1F, 0x02, 0xFF, 0x23, 0x09, 0x20, 0x00, 0xA6, 0x23, 0x14, 0x03, 0x00, 0x1D, -/* 00016430 */ 0x23, 0x09, 0x16, 0x00, 0x0E, 0x12, 0x00, 0x1C, 0x8C, 0x03, 0x03, 0x24, 0x6A, 0x23, 0x24, 0x0D, -/* 00016440 */ 0x07, 0x01, 0x00, 0x5A, 0x00, 0x24, 0x1F, 0x01, 0xFF, 0x23, 0x47, 0x1E, 0x0C, 0x0E, 0x36, 0x00, -/* 00016450 */ 0x1C, 0x8C, 0x03, 0x37, 0x24, 0x4B, 0x24, 0x6A, 0x23, 0x24, 0x0E, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 00016460 */ 0x24, 0x5A, 0x01, 0x1D, 0x1F, 0x02, 0x23, 0x23, 0x47, 0x1D, 0x23, 0x74, 0x1D, 0x15, 0x0F, 0x8C, -/* 00016470 */ 0x03, 0x03, 0x24, 0x6A, 0x23, 0x24, 0x10, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x24, 0x5A, 0x01, 0x1D, -/* 00016480 */ 0x1F, 0x02, 0x23, 0x23, 0x47, 0x1E, 0x23, 0x8C, 0x02, 0x02, 0x23, 0x4B, 0x23, 0x07, 0x06, 0x00, -/* 00016490 */ 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x17, 0x5A, 0x02, 0x0D, 0x5A, 0x03, 0x04, 0xCC, 0x24, 0x03, 0x9F, -/* 000164A0 */ 0x00, 0x0E, 0x24, 0x9F, 0x01, 0x0F, 0x24, 0x9F, 0x02, 0x10, 0x24, 0x5A, 0x04, 0x24, 0x5A, 0x05, -/* 000164B0 */ 0x0F, 0x1F, 0x06, 0x23, 0x23, 0x47, 0x1F, 0x23, 0x0E, 0x3E, 0x00, 0x1C, 0x74, 0x1F, 0x15, 0x11, -/* 000164C0 */ 0x47, 0x23, 0x15, 0x8C, 0x03, 0x3D, 0x24, 0x4B, 0x24, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x8C, -/* 000164D0 */ 0x03, 0x3C, 0x25, 0x4B, 0x25, 0x5A, 0x01, 0x25, 0x8C, 0x03, 0x37, 0x26, 0x4B, 0x26, 0x6A, 0x25, -/* 000164E0 */ 0x26, 0x0A, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x26, 0x5A, 0x01, 0x1F, 0x1F, 0x02, 0x25, 0x25, 0x5A, -/* 000164F0 */ 0x02, 0x25, 0x1F, 0x03, 0x24, 0x24, 0x74, 0x24, 0x23, 0x12, 0xA6, 0x23, 0x47, 0x20, 0x23, 0xA6, -/* 00016500 */ 0x23, 0x47, 0x21, 0x23, 0x0E, 0x09, 0x00, 0x1C, 0x47, 0x20, 0x1E, 0x47, 0x21, 0x1E, 0x09, 0x14, -/* 00016510 */ 0x00, 0x47, 0x20, 0x0C, 0x14, 0x03, 0x00, 0x1B, 0x0A, 0x09, 0x06, 0x00, 0x47, 0x21, 0x0C, 0x09, -/* 00016520 */ 0x03, 0x00, 0x47, 0x21, 0x11, 0x8C, 0x02, 0x14, 0x23, 0x4B, 0x23, 0x07, 0x05, 0x00, 0x5A, 0x00, -/* 00016530 */ 0x02, 0x5A, 0x01, 0x15, 0x5A, 0x02, 0x17, 0x5A, 0x03, 0x20, 0x5A, 0x04, 0x21, 0x1F, 0x05, 0xFF, -/* 00016540 */ 0x23, 0x47, 0x23, 0x15, 0x8C, 0x02, 0x02, 0x24, 0x4B, 0x24, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x02, -/* 00016550 */ 0x5A, 0x01, 0x17, 0x5A, 0x02, 0x12, 0x5A, 0x03, 0x13, 0xA6, 0x25, 0x5A, 0x04, 0x25, 0x5A, 0x05, -/* 00016560 */ 0x14, 0x1F, 0x06, 0x24, 0x24, 0x74, 0x24, 0x23, 0x13, 0x74, 0x14, 0x15, 0x14, 0x8C, 0x03, 0x03, -/* 00016570 */ 0x24, 0x6A, 0x23, 0x24, 0x15, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x24, 0x5A, 0x01, 0x15, 0x1F, 0x02, -/* 00016580 */ 0xFF, 0x23, 0x47, 0x00, 0x15, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x61, 0xFE, 0x36, 0x03, -/* 00016590 */ 0x61, 0xFE, 0xF8, 0x01, 0xFE, 0xDB, 0x01, 0xFE, 0xF7, 0x01, 0xFE, 0xF7, 0x01, 0xFE, 0xB4, 0x03, -/* 000165A0 */ 0xFE, 0x18, 0x02, 0xFE, 0x28, 0x04, 0xFE, 0x69, 0x01, 0xFE, 0x12, 0x02, 0xFE, 0x85, 0x02, 0xFE, -/* 000165B0 */ 0x88, 0x02, 0xFE, 0x69, 0x01, 0xFE, 0x0F, 0x02, 0xFE, 0xE5, 0x01, 0xFE, 0x10, 0x02, 0xFE, 0x11, -/* 000165C0 */ 0x02, 0xFE, 0x19, 0x02, 0xFE, 0x30, 0x04, 0xFE, 0xE3, 0x01, 0xFE, 0x00, 0xC8, 0x28, 0x14, 0x00, -/* 000165D0 */ 0x00, 0x00, 0x16, 0x00, 0x46, 0x00, 0x3F, 0x00, 0x58, 0x00, 0x17, 0x00, 0x24, 0x00, 0x31, 0x00, -/* 000165E0 */ 0x74, 0x00, 0x2E, 0x00, 0x62, 0x00, 0x08, 0x00, 0x22, 0x00, 0x08, 0x00, 0x28, 0x00, 0x31, 0x00, -/* 000165F0 */ 0x70, 0x00, 0x04, 0x00, 0x1E, 0x00, 0x3A, 0x00, 0x51, 0x00, 0x07, 0x00, 0x37, 0x00, 0x26, 0x00, -/* 00016600 */ 0x5B, 0x00, 0x21, 0x00, 0x55, 0x00, 0x18, 0x00, 0x40, 0x00, 0x0E, 0x00, 0x3D, 0x00, 0x12, 0x00, -/* 00016610 */ 0x40, 0x00, 0x03, 0x00, 0x1D, 0x00, 0x04, 0x00, 0x23, 0x00, 0x1A, 0x00, 0x34, 0x00, 0x04, 0x00, -/* 00016620 */ 0x28, 0x00, 0x18, 0x00, 0x48, 0x00, 0x31, 0x00, 0x79, 0x00, 0x04, 0x00, 0x23, 0x00, 0x04, 0x00, -/* 00016630 */ 0x35, 0x00, 0x3A, 0x00, 0x7A, 0x00, 0x05, 0x00, 0x11, 0x00, 0x05, 0x00, 0x19, 0x00, 0x04, 0x00, -/* 00016640 */ 0x23, 0x00, 0x03, 0x00, 0x27, 0x00, 0x06, 0x00, 0x3C, 0x00, 0x03, 0x00, 0x21, 0x00, 0x08, 0x00, -/* 00016650 */ 0x2F, 0x00, 0x06, 0x00, 0x3E, 0x00, 0x03, 0x00, 0x3E, 0x00, 0x1C, 0x00, 0x51, 0x00, 0x28, 0x00, -/* 00016660 */ 0x5D, 0x00, 0x04, 0x00, 0x7C, 0x00, 0x15, 0x00, 0x2D, 0x00, 0x08, 0x00, 0x13, 0x00, 0x00, 0x3F, -/* 00016670 */ 0x5D, 0x00, 0xC1, 0x13, 0x8D, 0x25, 0x00, 0xFE, 0xB6, 0x03, 0x16, 0xA0, 0x41, 0xD1, 0x00, 0x46, -/* 00016680 */ 0xFE, 0xD8, 0xA4, 0x07, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0xD8, 0xA4, 0xFE, 0x12, -/* 00016690 */ 0x22, 0xFE, 0x12, 0x22, 0x04, 0xFE, 0x05, 0x04, 0xFE, 0x06, 0x04, 0xFE, 0x1E, 0x02, 0xFE, 0x84, -/* 000166A0 */ 0x03, 0x0B, 0x18, 0x1F, 0x09, 0xD0, 0xCB, 0x02, 0x09, 0x0B, 0x0B, 0x0B, 0x0B, 0x07, 0x1C, 0x1D, -/* 000166B0 */ 0x1E, 0x08, 0x06, 0xFE, 0x3D, 0x03, 0x06, 0xFE, 0x07, 0x04, 0x05, 0xFE, 0x08, 0x04, 0x05, 0xFE, -/* 000166C0 */ 0x09, 0x04, 0x05, 0xFE, 0x0A, 0x04, 0x05, 0xFE, 0x49, 0x03, 0x06, 0xFE, 0x3F, 0x03, 0x06, 0xFE, -/* 000166D0 */ 0x40, 0x03, 0x06, 0xFE, 0x4C, 0x03, 0x06, 0xFE, 0x42, 0x03, 0x0C, 0x06, 0xFE, 0x43, 0x03, 0x06, -/* 000166E0 */ 0xFE, 0x44, 0x03, 0x0B, 0x07, 0x06, 0xFE, 0x0B, 0x04, 0x06, 0xFE, 0x0C, 0x04, 0x06, 0xFE, 0x0D, -/* 000166F0 */ 0x04, 0x05, 0xFE, 0x0E, 0x04, 0x06, 0xFE, 0x0F, 0x04, 0x06, 0xFE, 0x8D, 0x03, 0xFE, 0xF2, 0x02, -/* 00016700 */ 0x4F, 0x18, 0x4F, 0x19, 0x4F, 0x1A, 0x4F, 0x1B, 0x4F, 0x1F, 0x94, 0x02, 0x1F, 0x4F, 0x1F, 0x94, -/* 00016710 */ 0x03, 0x1F, 0x4F, 0x1F, 0x94, 0x04, 0x1F, 0x4F, 0x1F, 0x94, 0x05, 0x1F, 0x8C, 0x02, 0x32, 0x1F, -/* 00016720 */ 0x15, 0x03, 0x00, 0x1F, 0x03, 0x09, 0x11, 0x00, 0x8C, 0x02, 0x32, 0x1F, 0x15, 0x03, 0x00, 0x1F, -/* 00016730 */ 0x04, 0x09, 0x05, 0x00, 0xA6, 0x00, 0x09, 0xB7, 0x02, 0xD3, 0x00, 0x1F, 0x94, 0x02, 0x1F, 0xA6, -/* 00016740 */ 0x1F, 0x94, 0x03, 0x1F, 0x8C, 0x02, 0x03, 0x20, 0x6A, 0x1F, 0x20, 0x00, 0x07, 0x03, 0x00, 0x5A, -/* 00016750 */ 0x00, 0x20, 0x8C, 0x02, 0x23, 0x21, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x05, 0xD3, -/* 00016760 */ 0x01, 0x22, 0x5A, 0x02, 0x22, 0x1F, 0x03, 0x21, 0x21, 0x5A, 0x01, 0x21, 0x8C, 0x02, 0x36, 0x21, -/* 00016770 */ 0x4B, 0x21, 0x5F, 0x21, 0x21, 0x01, 0x5A, 0x02, 0x21, 0x1F, 0x03, 0xFF, 0x1F, 0x8C, 0x02, 0x32, -/* 00016780 */ 0x1F, 0x14, 0x03, 0x00, 0x1F, 0x04, 0x09, 0x05, 0x00, 0xA6, 0x00, 0x09, 0x62, 0x02, 0x8C, 0x02, -/* 00016790 */ 0x23, 0x1F, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x06, 0xD3, 0x02, 0x20, 0x5A, 0x02, -/* 000167A0 */ 0x20, 0x1F, 0x03, 0x1F, 0x1F, 0x47, 0x18, 0x1F, 0x8C, 0x02, 0x23, 0x1F, 0x07, 0x03, 0x00, 0x5A, -/* 000167B0 */ 0x00, 0x02, 0x5A, 0x01, 0x07, 0xD3, 0x03, 0x20, 0x5A, 0x02, 0x20, 0x1F, 0x03, 0x1F, 0x1F, 0x94, -/* 000167C0 */ 0x04, 0x1F, 0x94, 0x05, 0x08, 0x8C, 0x02, 0x23, 0x1F, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x90, -/* 000167D0 */ 0x05, 0x20, 0x5A, 0x01, 0x20, 0xD3, 0x04, 0x20, 0x5A, 0x02, 0x20, 0x1F, 0x03, 0x1F, 0x1F, 0x47, -/* 000167E0 */ 0x19, 0x1F, 0x8C, 0x02, 0x37, 0x20, 0x4B, 0x20, 0x6A, 0x1F, 0x20, 0x02, 0x07, 0x03, 0x00, 0x5A, -/* 000167F0 */ 0x00, 0x20, 0x5A, 0x01, 0x19, 0x8C, 0x01, 0x16, 0x21, 0x4B, 0x21, 0x5A, 0x02, 0x21, 0x1F, 0x03, -/* 00016800 */ 0x1F, 0x1F, 0x47, 0x1A, 0x1F, 0x8C, 0x02, 0x37, 0x20, 0x4B, 0x20, 0x6A, 0x1F, 0x20, 0x03, 0x07, -/* 00016810 */ 0x04, 0x00, 0x5A, 0x00, 0x20, 0x5A, 0x01, 0x1A, 0x5A, 0x02, 0x09, 0xCB, 0x00, 0x00, 0x00, 0x00, -/* 00016820 */ 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x78, 0x0B, 0x21, 0x04, 0x78, 0x0D, 0x21, 0x05, -/* 00016830 */ 0x78, 0x0D, 0x21, 0x06, 0x78, 0x10, 0x21, 0x07, 0x5A, 0x03, 0x21, 0x1F, 0x04, 0xFF, 0x1F, 0x8C, -/* 00016840 */ 0x02, 0x37, 0x20, 0x4B, 0x20, 0x6A, 0x1F, 0x20, 0x03, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x20, 0x5A, -/* 00016850 */ 0x01, 0x18, 0x5A, 0x02, 0x0B, 0xCB, 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x21, 0x00, -/* 00016860 */ 0x00, 0x00, 0x78, 0x1A, 0x21, 0x04, 0x78, 0x10, 0x21, 0x05, 0x78, 0x0D, 0x21, 0x06, 0x78, 0x10, -/* 00016870 */ 0x21, 0x07, 0x5A, 0x03, 0x21, 0x1F, 0x04, 0xFF, 0x1F, 0x8C, 0x02, 0x37, 0x20, 0x4B, 0x20, 0x6A, -/* 00016880 */ 0x1F, 0x20, 0x03, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x20, 0x5A, 0x01, 0x18, 0x5A, 0x02, 0x12, 0xCB, -/* 00016890 */ 0x30, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x07, 0x01, 0x00, 0xC1, -/* 000168A0 */ 0x01, 0x22, 0x18, 0x78, 0x22, 0x21, 0x04, 0x78, 0x0D, 0x21, 0x05, 0x78, 0x0D, 0x21, 0x06, 0x78, -/* 000168B0 */ 0x0D, 0x21, 0x07, 0x5A, 0x03, 0x21, 0x1F, 0x04, 0xFF, 0x1F, 0x8C, 0x02, 0x04, 0x1F, 0x07, 0x03, -/* 000168C0 */ 0x00, 0x5A, 0x00, 0x02, 0x5F, 0x20, 0x18, 0x08, 0x5A, 0x01, 0x20, 0x8C, 0x02, 0x08, 0x20, 0x5F, -/* 000168D0 */ 0x20, 0x20, 0x09, 0x5A, 0x02, 0x20, 0x1F, 0x03, 0xFF, 0x1F, 0x8C, 0x02, 0x37, 0x20, 0x4B, 0x20, -/* 000168E0 */ 0x6A, 0x1F, 0x20, 0x03, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x20, 0x5F, 0x21, 0x18, 0x08, 0x5A, 0x01, -/* 000168F0 */ 0x21, 0x5A, 0x02, 0x13, 0xCB, 0x48, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, -/* 00016900 */ 0x00, 0x78, 0x18, 0x21, 0x04, 0x78, 0x10, 0x21, 0x05, 0x78, 0x0D, 0x21, 0x06, 0x78, 0x10, 0x21, -/* 00016910 */ 0x07, 0x5A, 0x03, 0x21, 0x1F, 0x04, 0xFF, 0x1F, 0x8C, 0x02, 0x37, 0x20, 0x4B, 0x20, 0x6A, 0x1F, -/* 00016920 */ 0x20, 0x03, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x20, 0x5F, 0x21, 0x18, 0x08, 0x5A, 0x01, 0x21, 0x5A, -/* 00016930 */ 0x02, 0x14, 0xCB, 0x60, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0xD6, -/* 00016940 */ 0x05, 0x22, 0x21, 0x78, 0x22, 0x21, 0x04, 0x78, 0x10, 0x21, 0x05, 0x78, 0x0D, 0x21, 0x06, 0x78, -/* 00016950 */ 0x10, 0x21, 0x07, 0x5A, 0x03, 0x21, 0x1F, 0x04, 0xFF, 0x1F, 0xD3, 0x06, 0x1F, 0x47, 0x1B, 0x1F, -/* 00016960 */ 0x8C, 0x02, 0x37, 0x20, 0x4B, 0x20, 0x6A, 0x1F, 0x20, 0x03, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x20, -/* 00016970 */ 0x5A, 0x01, 0x1B, 0x5A, 0x02, 0x09, 0xCB, 0x78, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x21, -/* 00016980 */ 0x00, 0x00, 0x00, 0x78, 0x15, 0x21, 0x04, 0x78, 0x0D, 0x21, 0x05, 0x78, 0x0D, 0x21, 0x06, 0x78, -/* 00016990 */ 0x10, 0x21, 0x07, 0x5A, 0x03, 0x21, 0x1F, 0x04, 0xFF, 0x1F, 0x8C, 0x02, 0x37, 0x20, 0x4B, 0x20, -/* 000169A0 */ 0x6A, 0x1F, 0x20, 0x03, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x20, 0x5F, 0x21, 0x18, 0x08, 0x5A, 0x01, -/* 000169B0 */ 0x21, 0x5A, 0x02, 0x16, 0xCB, 0x90, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, -/* 000169C0 */ 0x00, 0x8C, 0x02, 0x23, 0x22, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x15, 0x5A, 0x02, -/* 000169D0 */ 0x1B, 0x1F, 0x03, 0x22, 0x22, 0x78, 0x22, 0x21, 0x0A, 0x78, 0x0D, 0x21, 0x06, 0x78, 0x10, 0x21, -/* 000169E0 */ 0x07, 0x5A, 0x03, 0x21, 0x1F, 0x04, 0xFF, 0x1F, 0x47, 0x00, 0x18, 0x09, 0x02, 0x00, 0xA6, 0x00, -/* 000169F0 */ 0x24, 0x00, 0x07, 0xA4, 0x00, 0x90, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 00016A00 */ 0x00, 0x84, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x78, 0x00, 0x00, -/* 00016A10 */ 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, -/* 00016A20 */ 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, -/* 00016A30 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, -/* 00016A40 */ 0x00, 0x81, 0x01, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 00016A50 */ 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, -/* 00016A60 */ 0x00, 0x30, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, -/* 00016A70 */ 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x18, 0x00, 0x00, -/* 00016A80 */ 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, -/* 00016A90 */ 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, -/* 00016AA0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, -/* 00016AB0 */ 0x00, 0x81, 0x01, 0x00, 0x00, 0xFE, 0xEE, 0x01, 0xFE, 0x07, 0x03, 0x4D, 0xFE, 0x88, 0x01, 0xFE, -/* 00016AC0 */ 0x83, 0x01, 0xFE, 0x82, 0x01, 0xFE, 0x80, 0x01, 0xFE, 0x81, 0x01, 0xFE, 0x15, 0x01, 0xFE, 0x15, -/* 00016AD0 */ 0x01, 0xFE, 0x84, 0x01, 0xFE, 0xEE, 0xA4, 0x17, 0x1C, 0x00, 0x00, 0x00, 0x18, 0x00, 0x40, 0x00, -/* 00016AE0 */ 0x05, 0x00, 0x1B, 0x00, 0x06, 0x00, 0xC1, 0x06, 0x05, 0x00, 0x73, 0x00, 0x39, 0x00, 0x76, 0x05, -/* 00016AF0 */ 0x0C, 0x00, 0x29, 0x00, 0x05, 0x00, 0x0D, 0x01, 0x1A, 0x00, 0xB1, 0x03, 0x1A, 0x00, 0xB5, 0x02, -/* 00016B00 */ 0x03, 0x00, 0x55, 0x00, 0x1D, 0x00, 0x30, 0x01, 0x23, 0x00, 0x6F, 0x00, 0x3A, 0x00, 0xD1, 0x00, -/* 00016B10 */ 0x3A, 0x00, 0xD3, 0x00, 0x41, 0x00, 0xBD, 0x00, 0x20, 0x00, 0x3D, 0x00, 0x3E, 0x00, 0xC1, 0x00, -/* 00016B20 */ 0x42, 0x00, 0x81, 0x04, 0x06, 0x00, 0xF4, 0x01, 0x3A, 0x00, 0xB9, 0x00, 0x4E, 0x00, 0xC4, 0x00, -/* 00016B30 */ 0x08, 0x00, 0x15, 0x00, 0x00, 0xA5, 0x72, 0x01, 0x00, 0xE5, 0x70, 0x01, 0x00, 0x18, 0x6F, 0x01, -/* 00016B40 */ 0x00, 0xF7, 0x6D, 0x01, 0x00, 0x70, 0x6D, 0x01, 0x00, 0x34, 0x6C, 0x01, 0x00, 0x51, 0x6B, 0x01, -/* 00016B50 */ 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x62, 0x04, 0x1B, 0xA0, 0x41, 0xC1, -/* 00016B60 */ 0x00, 0xFE, 0x1E, 0x04, 0x4D, 0xFE, 0x76, 0xC3, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, -/* 00016B70 */ 0x76, 0xC3, 0xFE, 0xD7, 0x01, 0xFE, 0xD7, 0x01, 0x01, 0x05, 0x05, 0x08, 0x04, 0x24, 0x23, 0x03, -/* 00016B80 */ 0x01, 0x04, 0x04, 0x04, 0x04, 0x07, 0x06, 0xFE, 0xF6, 0x03, 0x05, 0xFE, 0x1C, 0x04, 0x06, 0xFE, -/* 00016B90 */ 0x45, 0x03, 0x74, 0x59, 0x08, 0xB1, 0x05, 0x08, 0x4F, 0x06, 0x2C, 0x08, 0x05, 0x15, 0x03, 0x00, -/* 00016BA0 */ 0x08, 0x02, 0x09, 0x18, 0x00, 0x8C, 0x03, 0x03, 0x09, 0x6A, 0x08, 0x09, 0x00, 0x07, 0x03, 0x00, -/* 00016BB0 */ 0x5A, 0x00, 0x09, 0x5A, 0x01, 0x03, 0x5A, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x08, 0x8C, 0x03, 0x03, -/* 00016BC0 */ 0x09, 0x6A, 0x08, 0x09, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x09, 0x5A, 0x01, 0x05, 0x1F, 0x02, -/* 00016BD0 */ 0x08, 0x08, 0x47, 0x06, 0x08, 0xA6, 0x08, 0x14, 0x08, 0x00, 0x06, 0x08, 0x5F, 0x08, 0x06, 0x02, -/* 00016BE0 */ 0x0F, 0x18, 0x00, 0x08, 0x8C, 0x03, 0x03, 0x09, 0x6A, 0x08, 0x09, 0x00, 0x07, 0x03, 0x00, 0x5A, -/* 00016BF0 */ 0x00, 0x09, 0x5A, 0x01, 0x03, 0x5A, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x08, 0x5F, 0x00, 0x06, 0x03, -/* 00016C00 */ 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x8A, 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0x1A, 0x04, -/* 00016C10 */ 0xFE, 0x1B, 0x04, 0xFE, 0x90, 0xC3, 0x07, 0x07, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x30, 0x00, 0x18, -/* 00016C20 */ 0x00, 0x65, 0x00, 0x18, 0x00, 0x41, 0x00, 0x0F, 0x00, 0x57, 0x00, 0x18, 0x00, 0x65, 0x00, 0x09, -/* 00016C30 */ 0x00, 0x2A, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x03, 0x00, 0xFE, 0x47, 0x04, 0x13, -/* 00016C40 */ 0xA0, 0x41, 0xC3, 0x00, 0xFE, 0x0D, 0x04, 0x4C, 0xFF, 0x00, 0x00, 0x00, 0x02, 0xFE, 0x2F, 0xBF, -/* 00016C50 */ 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0x2F, 0xBF, 0xFE, 0x4A, 0x03, 0xFE, 0x4A, 0x03, -/* 00016C60 */ 0x01, 0x06, 0x0D, 0x11, 0x04, 0x34, 0x32, 0x03, 0x02, 0x03, 0x03, 0x03, 0x03, 0x10, 0x06, 0xFE, -/* 00016C70 */ 0xF6, 0x03, 0x05, 0xFE, 0x1D, 0x04, 0x06, 0xFE, 0x45, 0x03, 0x06, 0xFE, 0xF7, 0x03, 0x06, 0xFE, -/* 00016C80 */ 0x10, 0x04, 0x06, 0xFE, 0x16, 0x04, 0x06, 0xFE, 0x17, 0x04, 0x06, 0xFE, 0x19, 0x04, 0x06, 0xFE, -/* 00016C90 */ 0x13, 0x04, 0x06, 0xFE, 0x14, 0x04, 0x08, 0xAA, 0x59, 0x11, 0xB1, 0x0D, 0x11, 0x4F, 0x0E, 0x4F, -/* 00016CA0 */ 0x0F, 0x2C, 0x11, 0x0D, 0x15, 0x03, 0x00, 0x11, 0x02, 0x09, 0x18, 0x00, 0x8C, 0x03, 0x03, 0x12, -/* 00016CB0 */ 0x6A, 0x11, 0x12, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x12, 0x5A, 0x01, 0x03, 0x5A, 0x02, 0x04, -/* 00016CC0 */ 0x1F, 0x03, 0xFF, 0x11, 0x8C, 0x03, 0x03, 0x12, 0x6A, 0x11, 0x12, 0x01, 0x07, 0x02, 0x00, 0x5A, -/* 00016CD0 */ 0x00, 0x12, 0x5A, 0x01, 0x0D, 0x1F, 0x02, 0x11, 0x11, 0x47, 0x0E, 0x11, 0xA6, 0x11, 0x14, 0x08, -/* 00016CE0 */ 0x00, 0x0E, 0x11, 0x5F, 0x11, 0x0E, 0x02, 0x0F, 0x18, 0x00, 0x11, 0x8C, 0x03, 0x03, 0x12, 0x6A, -/* 00016CF0 */ 0x11, 0x12, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x12, 0x5A, 0x01, 0x03, 0x5A, 0x02, 0x04, 0x1F, -/* 00016D00 */ 0x03, 0xFF, 0x11, 0xCC, 0x11, 0x07, 0x9F, 0x00, 0x05, 0x11, 0x9F, 0x01, 0x06, 0x11, 0x9F, 0x02, -/* 00016D10 */ 0x07, 0x11, 0x9F, 0x03, 0x08, 0x11, 0x9F, 0x04, 0x09, 0x11, 0x9F, 0x05, 0x0A, 0x11, 0x9F, 0x06, -/* 00016D20 */ 0x0B, 0x11, 0x47, 0x0F, 0x11, 0x8C, 0x02, 0x19, 0x11, 0x4B, 0x11, 0x07, 0x03, 0x00, 0x5A, 0x00, -/* 00016D30 */ 0x0C, 0x5A, 0x01, 0x0F, 0x5A, 0x02, 0x0E, 0x1F, 0x03, 0x00, 0x11, 0x09, 0x02, 0x00, 0xA6, 0x00, -/* 00016D40 */ 0x24, 0x00, 0xFE, 0x8A, 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0x1A, 0x04, 0xFE, 0x5C, 0xBF, 0x08, 0x09, -/* 00016D50 */ 0x00, 0x00, 0x00, 0x0B, 0x00, 0x34, 0x00, 0x18, 0x00, 0x74, 0x00, 0x18, 0x00, 0x45, 0x00, 0x0F, -/* 00016D60 */ 0x00, 0x5B, 0x00, 0x18, 0x00, 0x75, 0x00, 0x22, 0x00, 0x1E, 0x01, 0x1B, 0x00, 0x41, 0x00, 0x00, -/* 00016D70 */ 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x27, 0x04, 0x65, 0xA2, 0x41, 0xD1, 0x00, -/* 00016D80 */ 0x4B, 0xFE, 0x41, 0xBA, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x02, 0xFE, 0x41, 0xBA, 0xC8, 0xC8, -/* 00016D90 */ 0x01, 0x06, 0x03, 0x07, 0x07, 0x17, 0x16, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x06, 0x08, 0x43, -/* 00016DA0 */ 0x59, 0x07, 0xB1, 0x05, 0x07, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA6, 0x07, 0x47, 0x04, 0x07, 0x8C, -/* 00016DB0 */ 0x02, 0x17, 0x07, 0x4B, 0x07, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x05, 0x8C, 0x01, -/* 00016DC0 */ 0x05, 0x08, 0x4B, 0x08, 0x5A, 0x02, 0x08, 0x8C, 0x03, 0x03, 0x08, 0x5F, 0x08, 0x08, 0x00, 0x5A, -/* 00016DD0 */ 0x03, 0x08, 0x5A, 0x04, 0x03, 0x5A, 0x05, 0x04, 0x1F, 0x06, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA6, -/* 00016DE0 */ 0x00, 0x24, 0x00, 0xFE, 0xDA, 0x01, 0xFE, 0x54, 0xBA, 0x03, 0x05, 0x00, 0x00, 0x00, 0x0A, 0x00, -/* 00016DF0 */ 0x23, 0x00, 0x32, 0x00, 0x91, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, -/* 00016E00 */ 0x18, 0x04, 0x4D, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x0F, 0x04, 0x4A, 0xFE, 0x1F, 0xB7, 0xFF, 0x00, -/* 00016E10 */ 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x1F, 0xB7, 0xFE, 0x30, 0x02, 0xFE, 0x30, 0x02, 0x01, 0x08, -/* 00016E20 */ 0x07, 0x0C, 0x09, 0x36, 0x35, 0x03, 0x02, 0x04, 0x04, 0x04, 0x04, 0x0B, 0x06, 0xFE, 0xF6, 0x03, -/* 00016E30 */ 0x05, 0xFE, 0x1C, 0x04, 0x06, 0xFE, 0x45, 0x03, 0x08, 0x0C, 0xB0, 0x59, 0x0C, 0xB1, 0x09, 0x0C, -/* 00016E40 */ 0x4F, 0x0A, 0x2C, 0x0C, 0x09, 0x15, 0x03, 0x00, 0x0C, 0x02, 0x09, 0x18, 0x00, 0x8C, 0x03, 0x03, -/* 00016E50 */ 0x0D, 0x6A, 0x0C, 0x0D, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0D, 0x5A, 0x01, 0x03, 0x5A, 0x02, -/* 00016E60 */ 0x04, 0x1F, 0x03, 0xFF, 0x0C, 0x8C, 0x03, 0x03, 0x0D, 0x6A, 0x0C, 0x0D, 0x01, 0x07, 0x02, 0x00, -/* 00016E70 */ 0x5A, 0x00, 0x0D, 0x5A, 0x01, 0x09, 0x1F, 0x02, 0x0C, 0x0C, 0x47, 0x0A, 0x0C, 0xA6, 0x0C, 0x14, -/* 00016E80 */ 0x08, 0x00, 0x0A, 0x0C, 0x5F, 0x0C, 0x0A, 0x02, 0x0F, 0x18, 0x00, 0x0C, 0x8C, 0x03, 0x03, 0x0D, -/* 00016E90 */ 0x6A, 0x0C, 0x0D, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0D, 0x5A, 0x01, 0x03, 0x5A, 0x02, 0x04, -/* 00016EA0 */ 0x1F, 0x03, 0xFF, 0x0C, 0x8C, 0x03, 0x03, 0x0D, 0x6A, 0x0C, 0x0D, 0x03, 0x07, 0x05, 0x00, 0x5A, -/* 00016EB0 */ 0x00, 0x0D, 0x8C, 0x03, 0x0B, 0x0E, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x05, 0x5A, 0x01, 0x07, 0x1F, -/* 00016EC0 */ 0x02, 0x0E, 0x0E, 0x5A, 0x01, 0x0E, 0x8C, 0x03, 0x0B, 0x0E, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x05, -/* 00016ED0 */ 0x5A, 0x01, 0x08, 0x1F, 0x02, 0x0E, 0x0E, 0x5A, 0x02, 0x0E, 0x5A, 0x03, 0x0A, 0x5A, 0x04, 0x06, -/* 00016EE0 */ 0x1F, 0x05, 0x00, 0x0C, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x8A, 0x02, 0xFE, 0xEF, -/* 00016EF0 */ 0x01, 0xFE, 0x1A, 0x04, 0xFE, 0xEB, 0x01, 0xFE, 0x44, 0xB7, 0x07, 0x07, 0x00, 0x00, 0x00, 0x0B, -/* 00016F00 */ 0x00, 0x30, 0x00, 0x18, 0x00, 0x65, 0x00, 0x18, 0x00, 0x41, 0x00, 0x0F, 0x00, 0x57, 0x00, 0x18, -/* 00016F10 */ 0x00, 0x65, 0x00, 0x45, 0x00, 0x78, 0x00, 0x00, 0x3F, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, -/* 00016F20 */ 0xFE, 0xFE, 0x03, 0x3C, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x45, 0x03, 0x49, 0xFE, 0x5D, 0xB3, 0xFF, -/* 00016F30 */ 0x00, 0x10, 0x01, 0x00, 0x03, 0x01, 0xFE, 0x5D, 0xB3, 0xFE, 0x71, 0x03, 0xFE, 0x71, 0x03, 0x0B, -/* 00016F40 */ 0x04, 0x0B, 0x05, 0x60, 0x59, 0x03, 0x05, 0x0A, 0x09, 0x0A, 0x0A, 0x0A, 0x08, 0x06, 0xFE, 0x45, -/* 00016F50 */ 0x03, 0xFE, 0x36, 0x01, 0x59, 0x0B, 0xB1, 0x06, 0x0B, 0xBD, 0x07, 0x4F, 0x08, 0x4F, 0x09, 0x15, -/* 00016F60 */ 0x05, 0x00, 0x04, 0x02, 0xA6, 0x0B, 0x47, 0x04, 0x0B, 0x15, 0x05, 0x00, 0x05, 0x02, 0xA6, 0x0B, -/* 00016F70 */ 0x47, 0x05, 0x0B, 0x4F, 0x08, 0x4F, 0x09, 0x68, 0x09, 0x00, 0x00, 0x00, 0x0B, 0x14, 0x0A, 0x00, -/* 00016F80 */ 0x06, 0x0B, 0xA6, 0x0B, 0x14, 0x03, 0x00, 0x06, 0x0B, 0x09, 0x10, 0x00, 0x07, 0x03, 0x00, 0x5A, -/* 00016F90 */ 0x01, 0x04, 0x5A, 0x02, 0x05, 0xC1, 0x03, 0x00, 0x07, 0x09, 0xEC, 0x00, 0x8C, 0x03, 0x24, 0x0C, -/* 00016FA0 */ 0x6A, 0x0B, 0x0C, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5A, 0x01, 0x06, 0x1F, 0x02, 0x0B, -/* 00016FB0 */ 0x0B, 0x47, 0x08, 0x0B, 0x8C, 0x03, 0x37, 0x0C, 0x4B, 0x0C, 0x6A, 0x0B, 0x0C, 0x01, 0x07, 0x02, -/* 00016FC0 */ 0x00, 0x5A, 0x00, 0x0C, 0x5A, 0x01, 0x08, 0x1F, 0x02, 0x0B, 0x0B, 0x0F, 0x15, 0x00, 0x0B, 0x8C, -/* 00016FD0 */ 0x03, 0x03, 0x0C, 0x6A, 0x0B, 0x0C, 0x02, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5A, 0x01, 0x03, -/* 00016FE0 */ 0x1F, 0x02, 0xFF, 0x0B, 0x8C, 0x03, 0x03, 0x0C, 0x6A, 0x0B, 0x0C, 0x03, 0x07, 0x02, 0x00, 0x5A, -/* 00016FF0 */ 0x00, 0x0C, 0x5A, 0x01, 0x08, 0x1F, 0x02, 0x0B, 0x0B, 0x47, 0x09, 0x0B, 0xA6, 0x0B, 0x14, 0x03, -/* 00017000 */ 0x00, 0x09, 0x0B, 0x09, 0x2F, 0x00, 0x8C, 0x03, 0x37, 0x0C, 0x4B, 0x0C, 0x6A, 0x0B, 0x0C, 0x04, -/* 00017010 */ 0x07, 0x01, 0x00, 0x5A, 0x00, 0x0C, 0x1F, 0x01, 0x0B, 0x0B, 0x47, 0x09, 0x0B, 0x8C, 0x03, 0x03, -/* 00017020 */ 0x0C, 0x6A, 0x0B, 0x0C, 0x05, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x5A, 0x01, 0x08, 0x5A, 0x02, -/* 00017030 */ 0x09, 0x1F, 0x03, 0xFF, 0x0B, 0x8C, 0x01, 0x02, 0x0B, 0x4B, 0x0B, 0x07, 0x04, 0x00, 0x5A, 0x00, -/* 00017040 */ 0x02, 0x5A, 0x01, 0x09, 0x5A, 0x02, 0x04, 0x5A, 0x03, 0x05, 0x1F, 0x04, 0xFF, 0x0B, 0x47, 0x0B, -/* 00017050 */ 0x09, 0x8C, 0x03, 0x37, 0x0D, 0x4B, 0x0D, 0x6A, 0x0C, 0x0D, 0x06, 0x07, 0x03, 0x00, 0x5A, 0x00, -/* 00017060 */ 0x0D, 0x8C, 0x01, 0x04, 0x0E, 0x4B, 0x0E, 0x5A, 0x01, 0x0E, 0x5A, 0x02, 0x08, 0x1F, 0x03, 0x0C, -/* 00017070 */ 0x0C, 0x74, 0x0C, 0x0B, 0x07, 0x5F, 0x0B, 0x09, 0x08, 0x80, 0x0B, 0x0B, 0xF8, 0x00, 0xFA, 0x0B, -/* 00017080 */ 0x47, 0x00, 0x08, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x36, 0x03, 0xB0, 0xFE, 0x8E, -/* 00017090 */ 0x02, 0xFE, 0xEF, 0x01, 0x61, 0xFE, 0xF0, 0x01, 0x4D, 0xFE, 0x1B, 0x04, 0xFE, 0x1B, 0x04, 0xAB, -/* 000170A0 */ 0xFE, 0x6F, 0xB3, 0x10, 0x0B, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0E, 0x00, 0x23, 0x00, -/* 000170B0 */ 0x15, 0x00, 0x3B, 0x00, 0x10, 0x00, 0x42, 0x00, 0x18, 0x00, 0x2F, 0x00, 0x1B, 0x00, 0x2C, 0x00, -/* 000170C0 */ 0x15, 0x00, 0x7F, 0x00, 0x18, 0x00, 0x3F, 0x00, 0x0A, 0x00, 0x32, 0x00, 0x17, 0x00, 0x2B, 0x00, -/* 000170D0 */ 0x18, 0x00, 0x48, 0x00, 0x19, 0x00, 0x66, 0x00, 0x27, 0x00, 0x3E, 0x00, 0x0B, 0x00, 0x33, 0x00, -/* 000170E0 */ 0x08, 0x00, 0x14, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0xDC, 0x03, -/* 000170F0 */ 0x5D, 0xA2, 0x41, 0xD1, 0x00, 0x48, 0xFE, 0xD2, 0xAC, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x02, -/* 00017100 */ 0xFE, 0xD2, 0xAC, 0xFE, 0x87, 0x04, 0xFE, 0x87, 0x04, 0x01, 0x0A, 0x06, 0x0E, 0x06, 0x64, 0x5D, -/* 00017110 */ 0x03, 0x05, 0x03, 0x03, 0x03, 0x03, 0x0D, 0x08, 0x07, 0x05, 0xFE, 0x08, 0x04, 0x0B, 0xFE, 0x38, -/* 00017120 */ 0x01, 0x59, 0x0E, 0xB1, 0x09, 0x0E, 0x4F, 0x0A, 0x4F, 0x0B, 0x4F, 0x0C, 0x15, 0x05, 0x00, 0x07, -/* 00017130 */ 0x02, 0xA6, 0x0E, 0x47, 0x07, 0x0E, 0x15, 0x05, 0x00, 0x08, 0x02, 0xA6, 0x0E, 0x47, 0x08, 0x0E, -/* 00017140 */ 0x4F, 0x0A, 0x4F, 0x0B, 0x4F, 0x0C, 0xA6, 0x0E, 0x14, 0x08, 0x00, 0x09, 0x0E, 0x14, 0x03, 0x00, -/* 00017150 */ 0x09, 0x03, 0x09, 0x15, 0x00, 0x8C, 0x03, 0x03, 0x0F, 0x6A, 0x0E, 0x0F, 0x00, 0x07, 0x02, 0x00, -/* 00017160 */ 0x5A, 0x00, 0x0F, 0x5A, 0x01, 0x04, 0x1F, 0x02, 0xFF, 0x0E, 0x8C, 0x03, 0x0B, 0x0E, 0x07, 0x02, -/* 00017170 */ 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x09, 0x1F, 0x02, 0x0E, 0x0E, 0x47, 0x0A, 0x0E, 0x8C, 0x03, -/* 00017180 */ 0x0B, 0x0E, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x06, 0x1F, 0x02, 0x0E, 0x0E, 0x47, -/* 00017190 */ 0x0B, 0x0E, 0xA6, 0x0E, 0x47, 0x0C, 0x0E, 0xA6, 0x0E, 0x14, 0x03, 0x00, 0x07, 0x0E, 0x09, 0x63, -/* 000171A0 */ 0x00, 0xA6, 0x0E, 0x14, 0x03, 0x00, 0x08, 0x0E, 0x09, 0x59, 0x00, 0x8C, 0x01, 0x03, 0x0E, 0x4B, -/* 000171B0 */ 0x0E, 0xA6, 0x0F, 0x14, 0x03, 0x00, 0x0E, 0x0F, 0x09, 0x3D, 0x00, 0x8C, 0x03, 0x37, 0x0F, 0x4B, -/* 000171C0 */ 0x0F, 0x6A, 0x0E, 0x0F, 0x01, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x0F, 0x1F, 0x01, 0x0E, 0x0E, 0x01, -/* 000171D0 */ 0x34, 0x01, 0x01, 0x03, 0x0E, 0x8C, 0x01, 0x02, 0x0E, 0x4B, 0x0E, 0x07, 0x04, 0x00, 0x5A, 0x00, -/* 000171E0 */ 0x02, 0x8C, 0x01, 0x03, 0x0F, 0x4B, 0x0F, 0x5A, 0x01, 0x0F, 0xA6, 0x0F, 0x5A, 0x02, 0x0F, 0xA6, -/* 000171F0 */ 0x0F, 0x5A, 0x03, 0x0F, 0x1F, 0x04, 0xFF, 0x0E, 0x8C, 0x01, 0x03, 0x0E, 0x4B, 0x0E, 0x47, 0x0C, -/* 00017200 */ 0x0E, 0x09, 0x30, 0x00, 0x8C, 0x03, 0x37, 0x0F, 0x4B, 0x0F, 0x6A, 0x0E, 0x0F, 0x01, 0x07, 0x01, -/* 00017210 */ 0x00, 0x5A, 0x00, 0x0F, 0x1F, 0x01, 0x0E, 0x0E, 0x47, 0x0C, 0x0E, 0x8C, 0x01, 0x02, 0x0E, 0x4B, -/* 00017220 */ 0x0E, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x0C, 0x5A, 0x02, 0x07, 0x5A, 0x03, 0x08, -/* 00017230 */ 0x1F, 0x04, 0xFF, 0x0E, 0x8C, 0x03, 0x03, 0x0F, 0x6A, 0x0E, 0x0F, 0x02, 0x07, 0x05, 0x00, 0x5A, -/* 00017240 */ 0x00, 0x0F, 0x5A, 0x01, 0x0A, 0x5A, 0x02, 0x0B, 0x5A, 0x03, 0x0C, 0x5A, 0x04, 0x05, 0x1F, 0x05, -/* 00017250 */ 0x00, 0x0E, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x91, 0x02, 0x61, 0xFE, 0xEB, 0x01, -/* 00017260 */ 0xFE, 0xE2, 0xAC, 0x10, 0x0B, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x10, 0x00, 0x23, 0x00, -/* 00017270 */ 0x0F, 0x00, 0x3B, 0x00, 0x15, 0x00, 0x61, 0x00, 0x14, 0x00, 0x2A, 0x00, 0x14, 0x00, 0xFE, 0x00, -/* 00017280 */ 0x05, 0x00, 0x1D, 0x00, 0x14, 0x00, 0x46, 0x00, 0x10, 0x00, 0x41, 0x00, 0x1A, 0x00, 0x3A, 0x00, -/* 00017290 */ 0x23, 0x00, 0x66, 0x00, 0x0C, 0x00, 0x4C, 0x00, 0x17, 0x00, 0x2A, 0x00, 0x19, 0x00, 0x4E, 0x00, -/* 000172A0 */ 0x23, 0x00, 0x72, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0xBB, 0x03, -/* 000172B0 */ 0x23, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x05, 0x04, 0x47, 0xFE, 0x64, 0xA5, 0xFF, 0x00, 0x10, 0x01, -/* 000172C0 */ 0x00, 0x04, 0x04, 0xFE, 0x64, 0xA5, 0xFE, 0x9B, 0x06, 0xFE, 0x9B, 0x06, 0x01, 0x0B, 0x1E, 0x26, -/* 000172D0 */ 0x07, 0xC9, 0xB6, 0x03, 0x09, 0x18, 0x18, 0x18, 0x18, 0x25, 0x08, 0x06, 0xFE, 0x10, 0x04, 0x06, -/* 000172E0 */ 0xFE, 0xAD, 0x03, 0x06, 0xFE, 0x11, 0x04, 0x06, 0xFE, 0x12, 0x04, 0x06, 0xFE, 0x00, 0x04, 0x05, -/* 000172F0 */ 0xFE, 0xBC, 0x03, 0x05, 0xFE, 0xFF, 0x03, 0x06, 0xFE, 0x13, 0x04, 0x06, 0xFE, 0xC2, 0x03, 0x06, -/* 00017300 */ 0xFE, 0x14, 0x04, 0x06, 0xFE, 0x2D, 0x03, 0x06, 0xFE, 0x2E, 0x03, 0x06, 0xFE, 0x2F, 0x03, 0x06, -/* 00017310 */ 0xFE, 0xB0, 0x03, 0x06, 0xFE, 0xB2, 0x03, 0x06, 0xFE, 0xB1, 0x03, 0x07, 0x06, 0xFE, 0x15, 0x04, -/* 00017320 */ 0x06, 0xFE, 0xC1, 0x03, 0x06, 0xFE, 0x16, 0x04, 0x06, 0xFE, 0x28, 0x03, 0x06, 0xFE, 0x29, 0x03, -/* 00017330 */ 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, 0x2B, 0x03, 0x06, 0xFE, 0x17, 0x04, 0x0C, 0x0B, 0xFE, 0x8B, -/* 00017340 */ 0x02, 0x4F, 0x21, 0x4F, 0x22, 0x4F, 0x23, 0x4F, 0x24, 0x8C, 0x02, 0x11, 0x26, 0x4B, 0x26, 0x07, -/* 00017350 */ 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x1F, 0x1F, 0x02, 0x26, 0x26, 0x47, 0x21, 0x26, 0xA6, -/* 00017360 */ 0x26, 0x14, 0x03, 0x00, 0x20, 0x26, 0x09, 0x1A, 0x00, 0x8C, 0x03, 0x37, 0x28, 0x4B, 0x28, 0x6A, -/* 00017370 */ 0x27, 0x28, 0x00, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x28, 0x1F, 0x01, 0x27, 0x27, 0x47, 0x26, 0x27, -/* 00017380 */ 0x09, 0x18, 0x00, 0x8C, 0x03, 0x24, 0x28, 0x6A, 0x27, 0x28, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 00017390 */ 0x28, 0x5A, 0x01, 0x20, 0x1F, 0x02, 0x27, 0x27, 0x47, 0x26, 0x27, 0x47, 0x20, 0x26, 0x47, 0x26, -/* 000173A0 */ 0x1E, 0x8C, 0x02, 0x02, 0x27, 0x4B, 0x27, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x20, -/* 000173B0 */ 0x5A, 0x02, 0x03, 0x5A, 0x03, 0x04, 0xCC, 0x28, 0x02, 0x9F, 0x00, 0x05, 0x28, 0x9F, 0x01, 0x06, -/* 000173C0 */ 0x28, 0x5A, 0x04, 0x28, 0x5A, 0x05, 0x05, 0x1F, 0x06, 0x27, 0x27, 0x74, 0x27, 0x26, 0x02, 0x8C, -/* 000173D0 */ 0x03, 0x37, 0x27, 0x4B, 0x27, 0x6A, 0x26, 0x27, 0x03, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x27, 0x1F, -/* 000173E0 */ 0x01, 0x26, 0x26, 0x47, 0x22, 0x26, 0x47, 0x26, 0x22, 0x8C, 0x02, 0x02, 0x27, 0x4B, 0x27, 0x07, -/* 000173F0 */ 0x06, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x20, 0x5A, 0x02, 0x07, 0x5A, 0x03, 0x04, 0xCC, 0x28, -/* 00017400 */ 0x02, 0x9F, 0x00, 0x08, 0x28, 0x9F, 0x01, 0x09, 0x28, 0x5A, 0x04, 0x28, 0x5A, 0x05, 0x09, 0x1F, -/* 00017410 */ 0x06, 0x27, 0x27, 0x74, 0x27, 0x26, 0x04, 0x8C, 0x02, 0x02, 0x26, 0x4B, 0x26, 0x07, 0x06, 0x00, -/* 00017420 */ 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x20, 0x5A, 0x02, 0x0A, 0x5A, 0x03, 0x0B, 0xA6, 0x27, 0x5A, 0x04, -/* 00017430 */ 0x27, 0xA6, 0x27, 0x5A, 0x05, 0x27, 0x1F, 0x06, 0x26, 0x26, 0x47, 0x23, 0x26, 0xA6, 0x26, 0x14, -/* 00017440 */ 0x03, 0x00, 0x23, 0x26, 0x09, 0x06, 0x00, 0x47, 0x26, 0x23, 0x09, 0x18, 0x00, 0x8C, 0x03, 0x24, -/* 00017450 */ 0x28, 0x6A, 0x27, 0x28, 0x05, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x28, 0x5A, 0x01, 0x23, 0x1F, 0x02, -/* 00017460 */ 0x27, 0x27, 0x47, 0x26, 0x27, 0x74, 0x26, 0x22, 0x06, 0x47, 0x26, 0x22, 0x8C, 0x02, 0x02, 0x27, -/* 00017470 */ 0x4B, 0x27, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x20, 0x5A, 0x02, 0x0C, 0x5A, 0x03, -/* 00017480 */ 0x04, 0xCC, 0x28, 0x03, 0x9F, 0x00, 0x0D, 0x28, 0x9F, 0x01, 0x0E, 0x28, 0x9F, 0x02, 0x0F, 0x28, -/* 00017490 */ 0x5A, 0x04, 0x28, 0xA6, 0x28, 0x5A, 0x05, 0x28, 0x1F, 0x06, 0x27, 0x27, 0x74, 0x27, 0x26, 0x07, -/* 000174A0 */ 0x8C, 0x02, 0x0B, 0x26, 0x4B, 0x26, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x02, 0x8C, 0x03, 0x03, 0x27, -/* 000174B0 */ 0x5F, 0x27, 0x27, 0x08, 0x5A, 0x01, 0x27, 0x5A, 0x02, 0x21, 0x5A, 0x03, 0x22, 0xCC, 0x27, 0x03, -/* 000174C0 */ 0x9F, 0x00, 0x10, 0x27, 0x9F, 0x01, 0x11, 0x27, 0x9F, 0x02, 0x12, 0x27, 0x5A, 0x04, 0x27, 0x1F, -/* 000174D0 */ 0x05, 0x26, 0x26, 0x47, 0x24, 0x26, 0x5F, 0x26, 0x24, 0x09, 0x74, 0x26, 0x1E, 0x0A, 0x5F, 0x26, -/* 000174E0 */ 0x24, 0x0B, 0x14, 0x03, 0x00, 0x26, 0x13, 0x09, 0x06, 0x00, 0x47, 0x26, 0x14, 0x09, 0x07, 0x00, -/* 000174F0 */ 0x5F, 0x27, 0x24, 0x0B, 0x47, 0x26, 0x27, 0x74, 0x26, 0x1E, 0x0C, 0x5F, 0x26, 0x24, 0x0D, 0x43, -/* 00017500 */ 0x26, 0x26, 0x15, 0x74, 0x26, 0x1E, 0x0E, 0x5F, 0x26, 0x24, 0x0F, 0x74, 0x26, 0x1E, 0x10, 0x47, -/* 00017510 */ 0x26, 0x1E, 0x8C, 0x03, 0x3D, 0x27, 0x4B, 0x27, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x8C, 0x03, -/* 00017520 */ 0x3A, 0x28, 0x4B, 0x28, 0x5A, 0x01, 0x28, 0x5F, 0x28, 0x1E, 0x11, 0x5A, 0x02, 0x28, 0x1F, 0x03, -/* 00017530 */ 0x27, 0x27, 0x74, 0x27, 0x26, 0x12, 0x47, 0x26, 0x1E, 0x8C, 0x02, 0x02, 0x27, 0x4B, 0x27, 0x07, -/* 00017540 */ 0x06, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x20, 0x5A, 0x02, 0x16, 0x5A, 0x03, 0x04, 0xCC, 0x28, -/* 00017550 */ 0x04, 0x9F, 0x00, 0x17, 0x28, 0x9F, 0x01, 0x18, 0x28, 0x9F, 0x02, 0x19, 0x28, 0x9F, 0x03, 0x1A, -/* 00017560 */ 0x28, 0x5A, 0x04, 0x28, 0x5A, 0x05, 0x1A, 0x1F, 0x06, 0x27, 0x27, 0x74, 0x27, 0x26, 0x13, 0x47, -/* 00017570 */ 0x26, 0x1E, 0x8C, 0x03, 0x3D, 0x27, 0x4B, 0x27, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x8C, 0x03, -/* 00017580 */ 0x39, 0x28, 0x4B, 0x28, 0x5A, 0x01, 0x28, 0x5F, 0x28, 0x1E, 0x14, 0x5A, 0x02, 0x28, 0x1F, 0x03, -/* 00017590 */ 0x27, 0x27, 0x74, 0x27, 0x26, 0x15, 0x47, 0x26, 0x1E, 0x8C, 0x02, 0x02, 0x27, 0x4B, 0x27, 0x07, -/* 000175A0 */ 0x06, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x20, 0x5A, 0x02, 0x1B, 0x5A, 0x03, 0x0B, 0xA6, 0x28, -/* 000175B0 */ 0x5A, 0x04, 0x28, 0x5A, 0x05, 0x1C, 0x1F, 0x06, 0x27, 0x27, 0x74, 0x27, 0x26, 0x16, 0x74, 0x1D, -/* 000175C0 */ 0x1E, 0x17, 0x47, 0x00, 0x1E, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x61, 0xFE, 0x36, 0x03, -/* 000175D0 */ 0xFE, 0x10, 0x04, 0x61, 0xFE, 0x18, 0x04, 0xFE, 0x37, 0x03, 0xFE, 0xB2, 0x03, 0xFE, 0xB1, 0x03, -/* 000175E0 */ 0xFE, 0xDA, 0x01, 0xFE, 0xF7, 0x01, 0xFE, 0xF7, 0x01, 0xFE, 0xB0, 0x03, 0xFE, 0x19, 0x04, 0xFE, -/* 000175F0 */ 0xB2, 0x03, 0xFE, 0x20, 0x02, 0xFE, 0xB1, 0x03, 0xFE, 0x14, 0x04, 0xFE, 0x14, 0x04, 0xFE, 0x23, -/* 00017600 */ 0x02, 0xFE, 0x21, 0x02, 0xFE, 0x21, 0x02, 0xFE, 0x22, 0x02, 0xFE, 0x1F, 0x02, 0xFE, 0x1A, 0x04, -/* 00017610 */ 0xFE, 0x98, 0xA5, 0x14, 0x08, 0x00, 0x00, 0x00, 0x16, 0x00, 0x46, 0x00, 0x3F, 0x00, 0x58, 0x00, -/* 00017620 */ 0x31, 0x00, 0x12, 0x01, 0x17, 0x00, 0x24, 0x00, 0x31, 0x00, 0x6D, 0x00, 0x26, 0x00, 0x55, 0x00, -/* 00017630 */ 0x2C, 0x00, 0x44, 0x00, 0x37, 0x00, 0x69, 0x00, 0x36, 0x00, 0x74, 0x00, 0x08, 0x00, 0x28, 0x00, -/* 00017640 */ 0x1D, 0x00, 0x43, 0x00, 0x0C, 0x00, 0x30, 0x00, 0x08, 0x00, 0x27, 0x00, 0x27, 0x00, 0x55, 0x00, -/* 00017650 */ 0x39, 0x00, 0x82, 0x00, 0x27, 0x00, 0x5B, 0x00, 0x28, 0x00, 0x70, 0x00, 0x04, 0x00, 0x32, 0x00, -/* 00017660 */ 0x08, 0x00, 0x19, 0x00, 0x00, 0x3F, 0x5D, 0x00, 0xC1, 0x03, 0x8D, 0x05, 0x00, 0xFE, 0xA5, 0x03, -/* 00017670 */ 0x22, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x7B, 0x03, 0x44, 0xFE, 0x58, 0xA2, 0x01, 0xFF, 0x00, 0x10, -/* 00017680 */ 0x01, 0x00, 0x04, 0x03, 0xFE, 0x58, 0xA2, 0xFE, 0x32, 0x02, 0xFE, 0x32, 0x02, 0x03, 0xFE, 0x02, -/* 00017690 */ 0x04, 0xFE, 0x03, 0x04, 0xFE, 0x04, 0x04, 0x09, 0x04, 0x0A, 0x04, 0x26, 0x26, 0x02, 0x03, 0x04, -/* 000176A0 */ 0x04, 0x04, 0x04, 0x07, 0x08, 0x09, 0x07, 0x08, 0x78, 0x94, 0x02, 0x05, 0x94, 0x03, 0x06, 0x94, -/* 000176B0 */ 0x02, 0x05, 0x15, 0x05, 0x00, 0x06, 0x03, 0x01, 0x36, 0x01, 0x03, 0x02, 0x4F, 0x0A, 0x94, 0x04, -/* 000176C0 */ 0x0A, 0x8C, 0x02, 0x37, 0x0B, 0x4B, 0x0B, 0x6A, 0x0A, 0x0B, 0x00, 0x07, 0x01, 0x00, 0x5A, 0x00, -/* 000176D0 */ 0x0B, 0x1F, 0x01, 0x0A, 0x0A, 0x94, 0x04, 0x0A, 0x8C, 0x02, 0x37, 0x0B, 0x4B, 0x0B, 0x6A, 0x0A, -/* 000176E0 */ 0x0B, 0x01, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0B, 0x5A, 0x01, 0x04, 0xD3, 0x00, 0x0C, 0x5A, 0x02, -/* 000176F0 */ 0x0C, 0x1F, 0x03, 0xFF, 0x0A, 0x8C, 0x02, 0x37, 0x0B, 0x4B, 0x0B, 0x6A, 0x0A, 0x0B, 0x02, 0x07, -/* 00017700 */ 0x03, 0x00, 0x5A, 0x00, 0x0B, 0x90, 0x04, 0x0C, 0x5A, 0x01, 0x0C, 0x8C, 0x02, 0x03, 0x0C, 0x5F, -/* 00017710 */ 0x0C, 0x0C, 0x03, 0x5A, 0x02, 0x0C, 0x1F, 0x03, 0x00, 0x0A, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, -/* 00017720 */ 0x00, 0x61, 0x86, 0xFE, 0x86, 0x01, 0xFE, 0x80, 0x02, 0xFE, 0x77, 0xA2, 0x05, 0x09, 0x00, 0x00, -/* 00017730 */ 0x00, 0x0F, 0x00, 0x17, 0x00, 0x17, 0x00, 0x25, 0x00, 0x1D, 0x00, 0x94, 0x01, 0x2A, 0x00, 0x42, -/* 00017740 */ 0x00, 0x00, 0x46, 0x77, 0x01, 0x00, 0xBF, 0x5C, 0x00, 0x01, 0x00, 0x88, 0x01, 0x00, 0xFE, 0xA7, -/* 00017750 */ 0x03, 0x19, 0xA2, 0x41, 0xD1, 0x00, 0x45, 0xFE, 0xC4, 0xA2, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, -/* 00017760 */ 0x02, 0xFE, 0xC4, 0xA2, 0xFE, 0x77, 0x01, 0xFE, 0x77, 0x01, 0x41, 0x04, 0x06, 0x08, 0x04, 0x1F, -/* 00017770 */ 0x1F, 0x03, 0x03, 0x07, 0x07, 0x08, 0x0B, 0x06, 0xFE, 0xF5, 0x03, 0x61, 0x8C, 0x01, 0x03, 0x08, -/* 00017780 */ 0x4B, 0x08, 0x15, 0x03, 0x00, 0x08, 0x02, 0x09, 0x29, 0x00, 0x8C, 0x01, 0x03, 0x08, 0x4B, 0x08, -/* 00017790 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x03, 0x5A, 0x01, 0x06, 0x8C, 0x01, 0x04, 0x09, 0x4B, 0x09, 0x5A, -/* 000177A0 */ 0x02, 0x09, 0x1F, 0x03, 0x08, 0x08, 0x14, 0x03, 0x00, 0x08, 0x04, 0x09, 0x05, 0x00, 0xA6, 0x00, -/* 000177B0 */ 0x09, 0x28, 0x00, 0x8C, 0x01, 0x02, 0x08, 0x4B, 0x08, 0x2D, 0x08, 0x08, 0x06, 0x15, 0x03, 0x00, -/* 000177C0 */ 0x08, 0x05, 0x09, 0x14, 0x00, 0x8C, 0x01, 0x04, 0x08, 0x4B, 0x08, 0x8C, 0x01, 0x02, 0x09, 0x4B, -/* 000177D0 */ 0x09, 0x95, 0x09, 0x09, 0x06, 0x9A, 0x09, 0x08, 0x06, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xE2, 0xA2, -/* 000177E0 */ 0x05, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0xB9, 0x00, 0x05, 0x00, 0x23, 0x00, 0x12, 0x00, 0x41, -/* 000177F0 */ 0x00, 0x16, 0x00, 0x3B, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0x01, 0x00, 0x88, 0x01, 0x00, 0xFE, 0x8B, -/* 00017800 */ 0x03, 0x55, 0xA2, 0x41, 0xD1, 0x00, 0x43, 0xFE, 0x62, 0x9D, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, -/* 00017810 */ 0x02, 0xFE, 0x62, 0x9D, 0x7F, 0x7F, 0x01, 0x05, 0x03, 0x06, 0x05, 0x10, 0x10, 0x03, 0x02, 0x05, -/* 00017820 */ 0x08, 0x2B, 0x59, 0x06, 0xB1, 0x04, 0x06, 0x8C, 0x02, 0x18, 0x06, 0x4B, 0x06, 0x07, 0x04, 0x00, -/* 00017830 */ 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x04, 0x8C, 0x01, 0x02, 0x07, 0x4B, 0x07, 0x5A, 0x02, 0x07, 0x5A, -/* 00017840 */ 0x03, 0x03, 0x1F, 0x04, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x83, 0x9D, -/* 00017850 */ 0x02, 0x05, 0x00, 0x00, 0x00, 0x24, 0x00, 0x5D, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, -/* 00017860 */ 0x01, 0x00, 0xFE, 0x73, 0x03, 0x30, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x7A, 0x03, 0x42, 0xFE, 0x9D, -/* 00017870 */ 0x97, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, 0x9D, 0x97, 0xFE, 0x8E, 0x01, 0xFE, 0x8E, -/* 00017880 */ 0x01, 0x01, 0x07, 0x05, 0x0A, 0x03, 0x26, 0x25, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x09, 0x07, -/* 00017890 */ 0x05, 0xFE, 0x3C, 0x03, 0x08, 0x7D, 0x4F, 0x08, 0x14, 0x0A, 0x00, 0x05, 0x02, 0xA6, 0x0A, 0x14, -/* 000178A0 */ 0x03, 0x00, 0x05, 0x0A, 0x09, 0x15, 0x00, 0x8C, 0x02, 0x03, 0x0B, 0x6A, 0x0A, 0x0B, 0x00, 0x07, -/* 000178B0 */ 0x02, 0x00, 0x5A, 0x00, 0x0B, 0x5A, 0x01, 0x06, 0x1F, 0x02, 0xFF, 0x0A, 0x8C, 0x02, 0x03, 0x0B, -/* 000178C0 */ 0x6A, 0x0A, 0x0B, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0B, 0x5A, 0x01, 0x05, 0x1F, 0x02, 0x0A, -/* 000178D0 */ 0x0A, 0x47, 0x08, 0x0A, 0x0E, 0x0C, 0x00, 0x08, 0x5F, 0x0A, 0x08, 0x02, 0x15, 0x03, 0x00, 0x0A, -/* 000178E0 */ 0x03, 0x09, 0x15, 0x00, 0x8C, 0x02, 0x03, 0x0B, 0x6A, 0x0A, 0x0B, 0x00, 0x07, 0x02, 0x00, 0x5A, -/* 000178F0 */ 0x00, 0x0B, 0x5A, 0x01, 0x06, 0x1F, 0x02, 0xFF, 0x0A, 0x8C, 0x01, 0x11, 0x0A, 0x4B, 0x0A, 0x07, -/* 00017900 */ 0x02, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x07, 0x1F, 0x02, 0x00, 0x0A, 0x09, 0x02, 0x00, 0xA6, -/* 00017910 */ 0x00, 0x24, 0x00, 0xFE, 0x8C, 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0xF6, 0x01, 0xFE, 0xCE, 0x97, 0x07, -/* 00017920 */ 0x02, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x37, 0x00, 0x15, 0x00, 0x40, 0x00, 0x18, 0x00, 0x3A, 0x00, -/* 00017930 */ 0x10, 0x00, 0x3F, 0x00, 0x15, 0x00, 0x40, 0x00, 0x18, 0x00, 0x2C, 0x00, 0x00, 0xBF, 0x5C, 0x00, -/* 00017940 */ 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x66, 0x03, 0x2F, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x79, 0x03, -/* 00017950 */ 0x41, 0xFE, 0x81, 0x95, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x06, 0x06, 0xFE, 0x81, 0x95, 0xFE, 0xEA, -/* 00017960 */ 0x01, 0xFE, 0xEA, 0x01, 0x01, 0x09, 0x05, 0x0C, 0x08, 0x2E, 0x2D, 0x02, 0x03, 0x03, 0x03, 0x03, -/* 00017970 */ 0x03, 0x0B, 0x07, 0x05, 0xFE, 0x3C, 0x03, 0x08, 0x96, 0x4F, 0x0A, 0x14, 0x0A, 0x00, 0x05, 0x02, -/* 00017980 */ 0xA6, 0x0C, 0x14, 0x03, 0x00, 0x05, 0x0C, 0x09, 0x15, 0x00, 0x8C, 0x02, 0x03, 0x0D, 0x6A, 0x0C, -/* 00017990 */ 0x0D, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0D, 0x5A, 0x01, 0x06, 0x1F, 0x02, 0xFF, 0x0C, 0x8C, -/* 000179A0 */ 0x02, 0x03, 0x0D, 0x6A, 0x0C, 0x0D, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0D, 0x5A, 0x01, 0x05, -/* 000179B0 */ 0x1F, 0x02, 0x0C, 0x0C, 0x47, 0x0A, 0x0C, 0x0E, 0x0C, 0x00, 0x0A, 0x5F, 0x0C, 0x0A, 0x02, 0x15, -/* 000179C0 */ 0x03, 0x00, 0x0C, 0x03, 0x09, 0x15, 0x00, 0x8C, 0x02, 0x03, 0x0D, 0x6A, 0x0C, 0x0D, 0x00, 0x07, -/* 000179D0 */ 0x02, 0x00, 0x5A, 0x00, 0x0D, 0x5A, 0x01, 0x06, 0x1F, 0x02, 0xFF, 0x0C, 0x8C, 0x01, 0x15, 0x0C, -/* 000179E0 */ 0x4B, 0x0C, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x07, 0x8C, 0x01, 0x11, 0x0D, 0x4B, -/* 000179F0 */ 0x0D, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x08, 0x1F, 0x02, 0x0D, 0x0D, 0x5A, 0x02, -/* 00017A00 */ 0x0D, 0x5A, 0x03, 0x09, 0x1F, 0x04, 0x00, 0x0C, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, -/* 00017A10 */ 0x8C, 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0xF6, 0x01, 0xFE, 0xD7, 0x95, 0x07, 0x02, 0x00, 0x00, 0x00, -/* 00017A20 */ 0x0F, 0x00, 0x37, 0x00, 0x15, 0x00, 0x40, 0x00, 0x18, 0x00, 0x3A, 0x00, 0x10, 0x00, 0x3F, 0x00, -/* 00017A30 */ 0x15, 0x00, 0x40, 0x00, 0x31, 0x00, 0x63, 0x00, 0x00, 0xBF, 0x7C, 0x00, 0xC3, 0x53, 0xA8, 0x29, -/* 00017A40 */ 0x00, 0xFE, 0x4B, 0x03, 0x1D, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x77, 0x03, 0x40, 0xFE, 0x0A, 0x90, -/* 00017A50 */ 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, 0x0A, 0x90, 0xFE, 0xE8, 0x03, 0xFE, 0xE8, 0x03, -/* 00017A60 */ 0x01, 0x0C, 0x0F, 0x16, 0x0A, 0x5C, 0x54, 0x18, 0x02, 0x05, 0x01, 0x07, 0x07, 0x07, 0x07, 0x02, -/* 00017A70 */ 0x01, 0x15, 0x16, 0x9E, 0xF9, 0x05, 0xFE, 0xFF, 0x03, 0x06, 0xFE, 0x00, 0x04, 0x06, 0xFE, 0xAD, -/* 00017A80 */ 0x03, 0x05, 0xFE, 0xBC, 0x03, 0x08, 0x01, 0x00, 0x01, 0x01, 0x06, 0xFE, 0x44, 0x03, 0x0C, 0x06, -/* 00017A90 */ 0xFE, 0x42, 0x03, 0x07, 0x06, 0xFE, 0x01, 0x04, 0x06, 0xFE, 0x43, 0x03, 0xFE, 0x39, 0x01, 0x4F, -/* 00017AA0 */ 0x12, 0x4F, 0x13, 0x4F, 0x14, 0xA6, 0x17, 0x14, 0x03, 0x00, 0x11, 0x17, 0x09, 0x06, 0x00, 0x47, -/* 00017AB0 */ 0x17, 0x02, 0x09, 0x42, 0x00, 0x8C, 0x01, 0x02, 0x18, 0x4B, 0x18, 0x07, 0x06, 0x00, 0x5A, 0x00, -/* 00017AC0 */ 0x06, 0x8C, 0x02, 0x24, 0x1A, 0x6A, 0x19, 0x1A, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x1A, 0x5A, -/* 00017AD0 */ 0x01, 0x11, 0x1F, 0x02, 0x19, 0x19, 0x5A, 0x01, 0x19, 0x5A, 0x02, 0x03, 0x5A, 0x03, 0x04, 0xCC, -/* 00017AE0 */ 0x19, 0x02, 0x9F, 0x00, 0x02, 0x19, 0x9F, 0x01, 0x05, 0x19, 0x5A, 0x04, 0x19, 0x5A, 0x05, 0x02, -/* 00017AF0 */ 0x1F, 0x06, 0x18, 0x18, 0x47, 0x17, 0x18, 0x47, 0x12, 0x17, 0x14, 0x03, 0x00, 0x12, 0x02, 0x09, -/* 00017B00 */ 0x1C, 0x00, 0x8C, 0x01, 0x13, 0x18, 0x4B, 0x18, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x06, 0x5A, 0x01, -/* 00017B10 */ 0x0F, 0x5A, 0x02, 0x10, 0x1F, 0x03, 0x18, 0x18, 0x47, 0x17, 0x18, 0x09, 0x19, 0x00, 0x8C, 0x01, -/* 00017B20 */ 0x12, 0x18, 0x4B, 0x18, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x06, 0x5A, 0x01, 0x0F, 0x5A, 0x02, 0x10, -/* 00017B30 */ 0x1F, 0x03, 0x18, 0x18, 0x47, 0x17, 0x18, 0x47, 0x13, 0x17, 0x47, 0x14, 0x07, 0xEA, 0x00, 0xA4, -/* 00017B40 */ 0x17, 0x13, 0x01, 0x12, 0x03, 0x00, 0x14, 0x17, 0x09, 0x4D, 0x00, 0x8C, 0x02, 0x37, 0x18, 0x4B, -/* 00017B50 */ 0x18, 0x6A, 0x17, 0x18, 0x02, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x18, 0x5A, 0x01, 0x13, 0x8C, 0x02, -/* 00017B60 */ 0x24, 0x1A, 0x6A, 0x19, 0x1A, 0x03, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x1A, 0x5A, 0x01, 0x14, 0x1F, -/* 00017B70 */ 0x02, 0x19, 0x19, 0x5A, 0x02, 0x19, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, -/* 00017B80 */ 0x00, 0x00, 0x00, 0x78, 0x0A, 0x19, 0x04, 0x78, 0x0A, 0x19, 0x05, 0x5A, 0x03, 0x19, 0x1F, 0x04, -/* 00017B90 */ 0xFF, 0x17, 0x28, 0x14, 0x14, 0x09, 0xA5, 0xFF, 0x8C, 0x02, 0x37, 0x18, 0x4B, 0x18, 0x6A, 0x17, -/* 00017BA0 */ 0x18, 0x02, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x18, 0x5A, 0x01, 0x13, 0x5A, 0x02, 0x0D, 0xCB, 0x10, -/* 00017BB0 */ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x78, 0x0A, 0x19, 0x05, 0x78, -/* 00017BC0 */ 0x0A, 0x19, 0x04, 0x78, 0x0A, 0x19, 0x06, 0x5A, 0x03, 0x19, 0x1F, 0x04, 0xFF, 0x17, 0x47, 0x00, -/* 00017BD0 */ 0x13, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x02, 0x24, 0x00, 0x10, 0x00, 0x00, 0x00, 0x03, -/* 00017BE0 */ 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x80, -/* 00017BF0 */ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, -/* 00017C00 */ 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0xFE, 0x36, 0x03, 0xC1, 0xFE, 0x88, 0x01, 0xFE, 0x37, -/* 00017C10 */ 0x03, 0xFE, 0x81, 0x01, 0xFE, 0x82, 0x01, 0xFE, 0x80, 0x01, 0xFE, 0x4C, 0x90, 0x09, 0x06, 0x00, -/* 00017C20 */ 0x00, 0x00, 0x55, 0x00, 0xBB, 0x00, 0x40, 0x00, 0xD4, 0x00, 0x05, 0x00, 0x0B, 0x00, 0x0C, 0x00, -/* 00017C30 */ 0x30, 0x00, 0x47, 0x00, 0xED, 0xFF, 0x06, 0x00, 0x30, 0x01, 0x36, 0x00, 0xA1, 0x00, 0x08, 0x00, -/* 00017C40 */ 0x1D, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x13, 0x88, 0x21, 0x00, 0xFE, 0x2C, 0x03, 0x28, 0xA2, -/* 00017C50 */ 0x41, 0xC1, 0x00, 0xFE, 0x76, 0x03, 0x3F, 0xFE, 0xA1, 0x89, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x05, -/* 00017C60 */ 0x05, 0xFE, 0xA1, 0x89, 0xFE, 0xB9, 0x04, 0xFE, 0xB9, 0x04, 0x41, 0x0D, 0x0D, 0x18, 0x07, 0x5B, -/* 00017C70 */ 0x53, 0x02, 0x02, 0x0A, 0x0A, 0x0A, 0x0A, 0x02, 0x17, 0x06, 0xFE, 0xFA, 0x03, 0x01, 0x01, 0x01, -/* 00017C80 */ 0x15, 0x08, 0x06, 0xFE, 0xFB, 0x03, 0x01, 0x00, 0x01, 0x14, 0x06, 0xFE, 0xFC, 0x03, 0x06, 0xFE, -/* 00017C90 */ 0xFD, 0x03, 0x07, 0x06, 0xFE, 0xFE, 0x03, 0xFE, 0x2C, 0x01, 0x4F, 0x11, 0x4F, 0x12, 0x4F, 0x13, -/* 00017CA0 */ 0x4F, 0x14, 0x4F, 0x15, 0x4F, 0x16, 0x8C, 0x01, 0x0C, 0x18, 0x4B, 0x18, 0x07, 0x06, 0x00, 0x5A, -/* 00017CB0 */ 0x00, 0x05, 0x5A, 0x01, 0x0E, 0x5A, 0x02, 0x02, 0x5A, 0x03, 0x03, 0x5A, 0x04, 0x04, 0x5A, 0x05, -/* 00017CC0 */ 0x03, 0x1F, 0x06, 0x18, 0x18, 0x47, 0x11, 0x18, 0x8C, 0x01, 0x0C, 0x18, 0x4B, 0x18, 0x07, 0x06, -/* 00017CD0 */ 0x00, 0x5A, 0x00, 0x05, 0x5A, 0x01, 0x0E, 0x5A, 0x02, 0x06, 0x5A, 0x03, 0x07, 0x5A, 0x04, 0x08, -/* 00017CE0 */ 0x5A, 0x05, 0x0F, 0x1F, 0x06, 0x18, 0x18, 0x47, 0x12, 0x18, 0x8C, 0x02, 0x37, 0x19, 0x4B, 0x19, -/* 00017CF0 */ 0x6A, 0x18, 0x19, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x19, 0x5A, 0x01, 0x12, 0x5A, 0x02, 0x10, -/* 00017D00 */ 0x1F, 0x03, 0x18, 0x18, 0x47, 0x13, 0x18, 0x8C, 0x01, 0x0C, 0x18, 0x4B, 0x18, 0x07, 0x06, 0x00, -/* 00017D10 */ 0x5A, 0x00, 0x05, 0x5A, 0x01, 0x0E, 0x5A, 0x02, 0x09, 0x5A, 0x03, 0x12, 0x5A, 0x04, 0x08, 0x5A, -/* 00017D20 */ 0x05, 0x13, 0x1F, 0x06, 0x18, 0x18, 0x47, 0x14, 0x18, 0x74, 0x11, 0x0D, 0x01, 0x74, 0x12, 0x0D, -/* 00017D30 */ 0x02, 0x74, 0x14, 0x0D, 0x03, 0x5F, 0x18, 0x0E, 0x04, 0x47, 0x15, 0x18, 0x5F, 0x18, 0x0E, 0x05, -/* 00017D40 */ 0x47, 0x16, 0x18, 0xA6, 0x18, 0x15, 0x0A, 0x00, 0x15, 0x18, 0xA6, 0x18, 0x15, 0x03, 0x00, 0x16, -/* 00017D50 */ 0x18, 0x09, 0x6E, 0x00, 0x8C, 0x01, 0x0C, 0x18, 0x4B, 0x18, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x05, -/* 00017D60 */ 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x78, 0x15, 0x19, -/* 00017D70 */ 0x06, 0x5A, 0x01, 0x19, 0x5A, 0x02, 0x0A, 0x5A, 0x03, 0x03, 0x5A, 0x04, 0x04, 0x5A, 0x05, 0x03, -/* 00017D80 */ 0x1F, 0x06, 0x18, 0x18, 0x47, 0x15, 0x18, 0x8C, 0x01, 0x0C, 0x18, 0x4B, 0x18, 0x07, 0x06, 0x00, -/* 00017D90 */ 0x5A, 0x00, 0x05, 0xCB, 0x0C, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, -/* 00017DA0 */ 0x78, 0x16, 0x19, 0x07, 0x5A, 0x01, 0x19, 0x5A, 0x02, 0x0C, 0x5A, 0x03, 0x15, 0x5A, 0x04, 0x04, -/* 00017DB0 */ 0x5A, 0x05, 0x04, 0x1F, 0x06, 0x18, 0x18, 0x47, 0x16, 0x18, 0x74, 0x15, 0x0D, 0x08, 0x74, 0x16, -/* 00017DC0 */ 0x0D, 0x09, 0xA6, 0x00, 0x24, 0x00, 0x02, 0x18, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, -/* 00017DD0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, -/* 00017DE0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x02, 0x00, 0x00, 0xEE, 0xFE, 0x16, 0x02, 0xFE, 0x15, 0x02, -/* 00017DF0 */ 0xFE, 0x13, 0x02, 0xFE, 0x17, 0x02, 0xFE, 0x14, 0x02, 0xFE, 0x17, 0x02, 0xFE, 0x14, 0x02, 0xFE, -/* 00017E00 */ 0x17, 0x02, 0xFE, 0x14, 0x02, 0xFE, 0xE1, 0x89, 0x0F, 0x0C, 0x00, 0x00, 0x00, 0x22, 0x00, 0x51, -/* 00017E10 */ 0x00, 0x22, 0x00, 0x5C, 0x00, 0x1D, 0x00, 0x3C, 0x00, 0x22, 0x00, 0x65, 0x00, 0x04, 0x00, 0x2D, -/* 00017E20 */ 0x00, 0x04, 0x00, 0x2E, 0x00, 0x04, 0x00, 0x2F, 0x00, 0x07, 0x00, 0x35, 0x00, 0x07, 0x00, 0x35, -/* 00017E30 */ 0x00, 0x11, 0x00, 0xEA, 0x00, 0x33, 0x00, 0x6E, 0x00, 0x33, 0x00, 0x72, 0x00, 0x04, 0x00, 0x35, -/* 00017E40 */ 0x00, 0x06, 0x00, 0x37, 0x00, 0x00, 0x3F, 0x5D, 0x00, 0xC1, 0x03, 0x8D, 0x05, 0x00, 0xFE, 0x11, -/* 00017E50 */ 0x03, 0x23, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x74, 0x03, 0x3D, 0xFE, 0x1B, 0x85, 0x01, 0xFF, 0x00, -/* 00017E60 */ 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x1B, 0x85, 0xFE, 0x81, 0x01, 0xFE, 0x81, 0x01, 0x02, 0xFE, -/* 00017E70 */ 0xF8, 0x03, 0xFE, 0xF9, 0x03, 0x08, 0x02, 0x07, 0x04, 0x13, 0x13, 0x02, 0x02, 0x01, 0x01, 0x01, -/* 00017E80 */ 0x01, 0x04, 0x05, 0x06, 0x35, 0x94, 0x02, 0x02, 0x4F, 0x07, 0x94, 0x03, 0x07, 0xCC, 0x07, 0x00, -/* 00017E90 */ 0x94, 0x03, 0x07, 0x8C, 0x02, 0x37, 0x08, 0x4B, 0x08, 0x6A, 0x07, 0x08, 0x00, 0x07, 0x03, 0x00, -/* 00017EA0 */ 0x5A, 0x00, 0x08, 0x5A, 0x01, 0x03, 0xD3, 0x00, 0x09, 0x5A, 0x02, 0x09, 0x1F, 0x03, 0xFF, 0x07, -/* 00017EB0 */ 0x90, 0x03, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x86, 0xFE, 0x54, 0x85, 0x04, 0x08, -/* 00017EC0 */ 0x00, 0x00, 0x00, 0x06, 0x00, 0x1B, 0x00, 0x1D, 0x00, 0x19, 0x01, 0x08, 0x00, 0x13, 0x00, 0x00, -/* 00017ED0 */ 0xD4, 0x7E, 0x01, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x13, 0x03, 0x24, -/* 00017EE0 */ 0xA2, 0x41, 0xD1, 0x00, 0x3E, 0xFE, 0x8B, 0x85, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, -/* 00017EF0 */ 0x8B, 0x85, 0xF1, 0xF1, 0x41, 0x06, 0x03, 0x06, 0x04, 0x21, 0x20, 0x03, 0x05, 0x02, 0x02, 0x02, -/* 00017F00 */ 0x02, 0x05, 0x08, 0x64, 0x4F, 0x04, 0x8C, 0x02, 0x0E, 0x06, 0x4B, 0x06, 0x07, 0x02, 0x00, 0x5A, -/* 00017F10 */ 0x00, 0x02, 0x5A, 0x01, 0x03, 0x1F, 0x02, 0x06, 0x06, 0x5F, 0x06, 0x06, 0x00, 0x47, 0x04, 0x06, -/* 00017F20 */ 0x8C, 0x02, 0x06, 0x06, 0x4B, 0x06, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x8C, 0x01, 0x02, 0x07, -/* 00017F30 */ 0x5A, 0x01, 0x07, 0x5A, 0x02, 0x04, 0x1F, 0x03, 0x06, 0x06, 0xA6, 0x07, 0x15, 0x03, 0x00, 0x06, -/* 00017F40 */ 0x07, 0x09, 0x20, 0x00, 0x8C, 0x03, 0x37, 0x07, 0x4B, 0x07, 0x6A, 0x06, 0x07, 0x01, 0x07, 0x03, -/* 00017F50 */ 0x00, 0x5A, 0x00, 0x07, 0x8C, 0x01, 0x03, 0x08, 0x4B, 0x08, 0x5A, 0x01, 0x08, 0x5A, 0x02, 0x03, -/* 00017F60 */ 0x1F, 0x03, 0xFF, 0x06, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x28, 0x03, 0xFE, 0x18, 0x01, 0xFE, 0xAB, -/* 00017F70 */ 0x85, 0x04, 0x02, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x42, 0x00, 0x24, 0x00, 0x60, 0x00, 0x22, 0x00, -/* 00017F80 */ 0x2E, 0x00, 0x00, 0xBF, 0x7C, 0x02, 0xC3, 0x43, 0xA8, 0x09, 0x00, 0xFE, 0xE3, 0x02, 0x23, 0xA2, -/* 00017F90 */ 0x41, 0xC1, 0x00, 0xFE, 0x73, 0x03, 0x3C, 0xFE, 0x8C, 0x7E, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, -/* 00017FA0 */ 0x02, 0xFE, 0x8C, 0x7E, 0xFE, 0x12, 0x05, 0xFE, 0x12, 0x05, 0x01, 0x0F, 0x0B, 0x15, 0x04, 0x80, -/* 00017FB0 */ 0x75, 0x54, 0x02, 0x01, 0x04, 0x01, 0x09, 0x09, 0x09, 0x09, 0x02, 0x14, 0x15, 0x79, 0xFE, 0x9D, -/* 00017FC0 */ 0x01, 0x06, 0xFE, 0xF5, 0x03, 0x06, 0xFE, 0xAD, 0x03, 0x01, 0x00, 0x06, 0xFE, 0xF6, 0x03, 0x07, -/* 00017FD0 */ 0x06, 0xFE, 0xF7, 0x03, 0x08, 0x01, 0xFF, 0x01, 0x01, 0xFE, 0xA7, 0x01, 0x4F, 0x0C, 0x4F, 0x0D, -/* 00017FE0 */ 0x4F, 0x0E, 0x4F, 0x0F, 0x4F, 0x10, 0x4F, 0x11, 0x4F, 0x12, 0x4F, 0x13, 0x2C, 0x17, 0x0B, 0x14, -/* 00017FF0 */ 0x03, 0x00, 0x17, 0x02, 0x09, 0x06, 0x00, 0xCC, 0x00, 0x00, 0x09, 0x84, 0x01, 0xCC, 0x17, 0x00, -/* 00018000 */ 0x47, 0x0C, 0x17, 0x2C, 0x17, 0x0B, 0x14, 0x03, 0x00, 0x17, 0x03, 0x09, 0x0D, 0x00, 0xCC, 0x18, -/* 00018010 */ 0x01, 0x9F, 0x00, 0x0B, 0x18, 0x47, 0x17, 0x18, 0x09, 0x18, 0x00, 0x8C, 0x02, 0x24, 0x19, 0x6A, -/* 00018020 */ 0x18, 0x19, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x19, 0x5A, 0x01, 0x0B, 0x1F, 0x02, 0x18, 0x18, -/* 00018030 */ 0x47, 0x17, 0x18, 0x47, 0x0D, 0x17, 0x8C, 0x02, 0x24, 0x18, 0x6A, 0x17, 0x18, 0x01, 0x07, 0x02, -/* 00018040 */ 0x00, 0x5A, 0x00, 0x18, 0xA4, 0x19, 0x0D, 0x02, 0x5A, 0x01, 0x19, 0x1F, 0x02, 0x17, 0x17, 0x47, -/* 00018050 */ 0x0E, 0x17, 0x47, 0x0F, 0x04, 0xEA, 0x00, 0x12, 0x03, 0x00, 0x0F, 0x0E, 0x09, 0x1A, 0x01, 0x8C, -/* 00018060 */ 0x02, 0x24, 0x18, 0x6A, 0x17, 0x18, 0x03, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x18, 0x5A, 0x01, 0x0F, -/* 00018070 */ 0x1F, 0x02, 0x17, 0x17, 0x47, 0x10, 0x17, 0xB9, 0x17, 0x10, 0x0D, 0x00, 0x00, 0x0E, 0xF1, 0x00, -/* 00018080 */ 0x17, 0x95, 0x17, 0x0D, 0x10, 0x47, 0x11, 0x17, 0x2C, 0x17, 0x11, 0x15, 0x03, 0x00, 0x17, 0x03, -/* 00018090 */ 0x09, 0x08, 0x00, 0x2C, 0x17, 0x11, 0x15, 0x08, 0x00, 0x17, 0x05, 0x14, 0x03, 0x00, 0x11, 0x06, -/* 000180A0 */ 0x09, 0x15, 0x00, 0x8C, 0x02, 0x03, 0x18, 0x6A, 0x17, 0x18, 0x04, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 000180B0 */ 0x18, 0x5A, 0x01, 0x07, 0x1F, 0x02, 0xFF, 0x17, 0x8C, 0x02, 0x24, 0x18, 0x6A, 0x17, 0x18, 0x03, -/* 000180C0 */ 0x07, 0x02, 0x00, 0x5A, 0x00, 0x18, 0x5A, 0x01, 0x11, 0x1F, 0x02, 0x17, 0x17, 0x47, 0x12, 0x17, -/* 000180D0 */ 0x8C, 0x01, 0x10, 0x17, 0x4B, 0x17, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x08, 0x5A, 0x01, 0x12, 0x1F, -/* 000180E0 */ 0x02, 0x17, 0x17, 0x0F, 0x15, 0x00, 0x17, 0x8C, 0x02, 0x03, 0x18, 0x6A, 0x17, 0x18, 0x05, 0x07, -/* 000180F0 */ 0x02, 0x00, 0x5A, 0x00, 0x18, 0x5A, 0x01, 0x12, 0x1F, 0x02, 0xFF, 0x17, 0x8C, 0x02, 0x03, 0x18, -/* 00018100 */ 0x6A, 0x17, 0x18, 0x06, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x18, 0x5A, 0x01, 0x12, 0x1F, 0x02, 0x17, -/* 00018110 */ 0x17, 0x47, 0x13, 0x17, 0xA6, 0x17, 0x14, 0x03, 0x00, 0x13, 0x17, 0x09, 0x18, 0x00, 0x8C, 0x02, -/* 00018120 */ 0x03, 0x18, 0x6A, 0x17, 0x18, 0x05, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x18, 0x5A, 0x01, 0x12, 0x1F, -/* 00018130 */ 0x02, 0xFF, 0x17, 0x09, 0x3C, 0x00, 0x8C, 0x02, 0x37, 0x18, 0x4B, 0x18, 0x6A, 0x17, 0x18, 0x07, -/* 00018140 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x18, 0x5A, 0x01, 0x0C, 0x5A, 0x02, 0x13, 0x1F, 0x03, 0x17, 0x17, -/* 00018150 */ 0x14, 0x03, 0x00, 0x17, 0x09, 0x09, 0x1A, 0x00, 0x8C, 0x02, 0x37, 0x18, 0x4B, 0x18, 0x6A, 0x17, -/* 00018160 */ 0x18, 0x08, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x18, 0x5A, 0x01, 0x0C, 0x5A, 0x02, 0x13, 0x1F, 0x03, -/* 00018170 */ 0xFF, 0x17, 0x2F, 0x0F, 0x0F, 0x0A, 0x09, 0xDC, 0xFE, 0x47, 0x00, 0x0C, 0x09, 0x02, 0x00, 0xA6, -/* 00018180 */ 0x00, 0x24, 0x00, 0xFE, 0x36, 0x03, 0xFE, 0x3A, 0x03, 0xC1, 0xFE, 0x37, 0x03, 0xFE, 0x8B, 0x02, -/* 00018190 */ 0xFE, 0x87, 0x02, 0xFE, 0xD8, 0x01, 0xFE, 0x14, 0x03, 0xFE, 0x18, 0x01, 0xFE, 0xA9, 0x7E, 0x17, -/* 000181A0 */ 0x10, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x32, 0x00, 0x06, 0x00, 0x1E, 0x00, 0x06, 0x00, 0x19, 0x00, -/* 000181B0 */ 0x33, 0x00, 0x58, 0x00, 0x1C, 0x00, 0x31, 0x00, 0x05, 0x00, 0x1B, 0x00, 0x08, 0x00, 0x17, 0x00, -/* 000181C0 */ 0x18, 0x00, 0x2D, 0x00, 0x0A, 0x00, 0x1F, 0x00, 0x07, 0x00, 0x26, 0x00, 0x1B, 0x00, 0x69, 0x00, -/* 000181D0 */ 0x15, 0x00, 0x4F, 0x00, 0x18, 0x00, 0x37, 0x00, 0x17, 0x00, 0x40, 0x00, 0x15, 0x00, 0x4B, 0x00, -/* 000181E0 */ 0x18, 0x00, 0x4D, 0x00, 0x0A, 0x00, 0x96, 0x00, 0x18, 0x00, 0x3F, 0x00, 0x22, 0x00, 0x49, 0x00, -/* 000181F0 */ 0x1A, 0x00, 0x4D, 0x00, 0x07, 0x00, 0x1B, 0x00, 0x08, 0x00, 0x11, 0x00, 0x00, 0x3F, 0x5C, 0x00, -/* 00018200 */ 0xC1, 0x43, 0xA8, 0x05, 0x00, 0xFE, 0xC0, 0x02, 0x2B, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x72, 0x03, -/* 00018210 */ 0x39, 0xFE, 0xE0, 0x79, 0x02, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0xE0, 0x79, 0xFE, -/* 00018220 */ 0x40, 0x03, 0xFE, 0x40, 0x03, 0x0F, 0x07, 0x0F, 0x08, 0x5B, 0x52, 0x02, 0x02, 0x0A, 0x0A, 0x0A, -/* 00018230 */ 0x0A, 0x01, 0x0E, 0x0F, 0x08, 0x07, 0x0C, 0x06, 0xFE, 0xAF, 0x03, 0x0B, 0xFE, 0x22, 0x01, 0x4F, -/* 00018240 */ 0x08, 0x4F, 0x09, 0x4F, 0x0A, 0x4F, 0x0B, 0x4F, 0x0C, 0x4F, 0x0D, 0x8C, 0x01, 0x0E, 0x10, 0x4B, -/* 00018250 */ 0x10, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x07, 0x1F, 0x02, 0x10, 0x10, 0x47, 0x08, -/* 00018260 */ 0x10, 0x14, 0x03, 0x00, 0x08, 0x03, 0x09, 0x06, 0x00, 0x47, 0x00, 0x04, 0x09, 0xF0, 0x00, 0x5F, -/* 00018270 */ 0x10, 0x08, 0x00, 0x0E, 0x51, 0x00, 0x10, 0x8C, 0x02, 0x37, 0x11, 0x4B, 0x11, 0x6A, 0x10, 0x11, -/* 00018280 */ 0x01, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x11, 0x5F, 0x12, 0x08, 0x00, 0x5A, 0x01, 0x12, 0x5A, 0x02, -/* 00018290 */ 0x05, 0x1F, 0x03, 0x10, 0x10, 0x47, 0x09, 0x10, 0x8C, 0x02, 0x37, 0x11, 0x4B, 0x11, 0x6A, 0x10, -/* 000182A0 */ 0x11, 0x02, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x11, 0x5A, 0x01, 0x09, 0x1F, 0x02, 0x10, 0x10, 0x47, -/* 000182B0 */ 0x0A, 0x10, 0xA4, 0x10, 0x09, 0x03, 0xA4, 0x11, 0x0A, 0x04, 0x15, 0x03, 0x00, 0x10, 0x11, 0x09, -/* 000182C0 */ 0x06, 0x00, 0x47, 0x00, 0x04, 0x09, 0x97, 0x00, 0x5F, 0x10, 0x08, 0x05, 0x0E, 0x87, 0x00, 0x10, -/* 000182D0 */ 0x8C, 0x02, 0x37, 0x11, 0x4B, 0x11, 0x6A, 0x10, 0x11, 0x01, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x11, -/* 000182E0 */ 0x5F, 0x12, 0x08, 0x05, 0x5A, 0x01, 0x12, 0x5A, 0x02, 0x05, 0x1F, 0x03, 0x10, 0x10, 0x47, 0x0B, -/* 000182F0 */ 0x10, 0x8C, 0x02, 0x37, 0x11, 0x4B, 0x11, 0x6A, 0x10, 0x11, 0x06, 0x07, 0x03, 0x00, 0x5A, 0x00, -/* 00018300 */ 0x11, 0x8C, 0x02, 0x37, 0x13, 0x4B, 0x13, 0x6A, 0x12, 0x13, 0x07, 0x07, 0x03, 0x00, 0x5A, 0x00, -/* 00018310 */ 0x13, 0x5A, 0x01, 0x0B, 0xD3, 0x00, 0x14, 0x5A, 0x02, 0x14, 0x1F, 0x03, 0x12, 0x12, 0x5A, 0x01, -/* 00018320 */ 0x12, 0xD3, 0x01, 0x12, 0x5A, 0x02, 0x12, 0x1F, 0x03, 0x10, 0x10, 0x47, 0x0C, 0x10, 0x8C, 0x02, -/* 00018330 */ 0x37, 0x11, 0x4B, 0x11, 0x6A, 0x10, 0x11, 0x02, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x11, 0x5A, 0x01, -/* 00018340 */ 0x0C, 0x1F, 0x02, 0x10, 0x10, 0x47, 0x0D, 0x10, 0xA4, 0x10, 0x0C, 0x08, 0xA4, 0x11, 0x0D, 0x09, -/* 00018350 */ 0x43, 0x00, 0x10, 0x11, 0x09, 0x08, 0x00, 0x47, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, -/* 00018360 */ 0x00, 0xFE, 0xF3, 0x03, 0xFE, 0x45, 0x01, 0xFE, 0x1A, 0x03, 0xC1, 0xC1, 0xFE, 0xF4, 0x03, 0xC5, -/* 00018370 */ 0x7E, 0xC1, 0xC1, 0xFE, 0xFC, 0x79, 0x0F, 0x0C, 0x00, 0x00, 0x00, 0x16, 0x00, 0x2D, 0x00, 0x08, -/* 00018380 */ 0x00, 0x23, 0x00, 0x06, 0x00, 0x45, 0x00, 0x08, 0x00, 0x23, 0x00, 0x21, 0x00, 0x3C, 0x00, 0x1A, -/* 00018390 */ 0x00, 0x38, 0x00, 0x10, 0x00, 0x41, 0x00, 0x06, 0x00, 0x2F, 0x00, 0x08, 0x00, 0x25, 0x00, 0x21, -/* 000183A0 */ 0x00, 0x44, 0x00, 0x3D, 0x00, 0x88, 0x00, 0x1A, 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x49, 0x00, 0x08, -/* 000183B0 */ 0x00, 0x11, 0x00, 0x00, 0x1C, 0x84, 0x01, 0x00, 0xBC, 0x83, 0x01, 0x00, 0xBF, 0x5C, 0x00, 0xC1, -/* 000183C0 */ 0x03, 0x88, 0x03, 0x00, 0xFE, 0xD2, 0x02, 0x62, 0xA2, 0x41, 0xD0, 0x00, 0x3B, 0xFE, 0x01, 0x10, -/* 000183D0 */ 0xFE, 0x57, 0x7C, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x57, 0x7C, 0x23, 0x23, 0x01, -/* 000183E0 */ 0x04, 0x02, 0x04, 0x03, 0x0B, 0x0B, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x1E, 0x8C, 0x02, -/* 000183F0 */ 0x37, 0x05, 0x4B, 0x05, 0x6A, 0x04, 0x05, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x05, 0x5A, 0x01, -/* 00018400 */ 0x02, 0x1F, 0x02, 0x00, 0x04, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x63, 0x01, 0xFE, -/* 00018410 */ 0x64, 0x7C, 0x02, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x16, 0x00, 0x00, 0xBF, 0x4C, 0x00, 0xC0, -/* 00018420 */ 0x03, 0x80, 0x03, 0x00, 0xFE, 0xD2, 0x02, 0x3E, 0xA2, 0x41, 0xD0, 0x00, 0x3A, 0xFE, 0x01, 0x10, -/* 00018430 */ 0xFE, 0x33, 0x7C, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x33, 0x7C, 0x21, 0x21, 0x01, -/* 00018440 */ 0x02, 0x03, 0x04, 0x06, 0x06, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x0F, 0xA4, 0x04, 0x03, -/* 00018450 */ 0x00, 0x43, 0x00, 0x04, 0x02, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xC1, 0xFE, 0x40, 0x7C, -/* 00018460 */ 0x02, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x14, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, -/* 00018470 */ 0x01, 0x00, 0xFE, 0xA8, 0x02, 0x25, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x71, 0x03, 0x38, 0xFE, 0x6F, -/* 00018480 */ 0x76, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x6F, 0x76, 0xE0, 0xE0, 0x01, 0x05, 0x04, -/* 00018490 */ 0x06, 0x04, 0x1D, 0x1C, 0x02, 0x04, 0x02, 0x02, 0x02, 0x02, 0x05, 0x08, 0x07, 0x5B, 0x8C, 0x02, -/* 000184A0 */ 0x24, 0x07, 0x6A, 0x06, 0x07, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x07, 0x5A, 0x01, 0x04, 0x1F, -/* 000184B0 */ 0x02, 0x06, 0x06, 0x47, 0x04, 0x06, 0x8C, 0x01, 0x0D, 0x06, 0x4B, 0x06, 0x0F, 0x10, 0x00, 0x06, -/* 000184C0 */ 0x8C, 0x01, 0x03, 0x06, 0x4B, 0x06, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x02, 0x1F, 0x01, 0xFF, 0x06, -/* 000184D0 */ 0x8C, 0x02, 0x03, 0x07, 0x6A, 0x06, 0x07, 0x01, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x07, 0x5A, 0x01, -/* 000184E0 */ 0x04, 0x8C, 0x01, 0x0D, 0x08, 0x4B, 0x08, 0x5A, 0x02, 0x08, 0x1F, 0x03, 0x06, 0x06, 0x44, 0x00, -/* 000184F0 */ 0x06, 0x03, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x37, 0x03, 0xFE, 0x83, 0x02, 0xFE, -/* 00018500 */ 0x89, 0x76, 0x05, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x29, 0x00, 0x0A, 0x00, 0x25, 0x00, 0x10, -/* 00018510 */ 0x00, 0x2F, 0x00, 0x27, 0x00, 0x48, 0x00, 0x00, 0x3F, 0x5D, 0x00, 0x01, 0x00, 0x8D, 0x05, 0x00, -/* 00018520 */ 0xFE, 0x2E, 0x02, 0x1A, 0xA0, 0x41, 0xD1, 0x00, 0x36, 0xFE, 0x9C, 0x5A, 0x01, 0xFF, 0x00, 0x10, -/* 00018530 */ 0x01, 0x00, 0x01, 0x01, 0xFE, 0x9C, 0x5A, 0xFE, 0xA8, 0x1B, 0xFE, 0xA8, 0x1B, 0x02, 0xFE, 0x83, -/* 00018540 */ 0x03, 0xFE, 0xCB, 0x03, 0x1B, 0x26, 0x3D, 0x04, 0xC7, 0x9C, 0x02, 0x02, 0x3A, 0x3B, 0x3C, 0x05, -/* 00018550 */ 0xFE, 0xCC, 0x03, 0x05, 0xFE, 0xCD, 0x03, 0x05, 0xFE, 0xCE, 0x03, 0x06, 0xFE, 0xCF, 0x03, 0x06, -/* 00018560 */ 0xFE, 0xD0, 0x03, 0x05, 0xFE, 0xD1, 0x03, 0x05, 0xFE, 0xD2, 0x03, 0x05, 0xFE, 0xD3, 0x03, 0x05, -/* 00018570 */ 0xFE, 0xD4, 0x03, 0x05, 0xFE, 0xD5, 0x03, 0x05, 0xFE, 0xD6, 0x03, 0x05, 0xFE, 0xD7, 0x03, 0x05, -/* 00018580 */ 0xFE, 0xD8, 0x03, 0x05, 0xFE, 0xD9, 0x03, 0x05, 0xFE, 0xDA, 0x03, 0x05, 0xFE, 0xDB, 0x03, 0x06, -/* 00018590 */ 0xFE, 0x5B, 0x03, 0x05, 0xFE, 0xDC, 0x03, 0x05, 0xFE, 0xDD, 0x03, 0x05, 0xFE, 0xDE, 0x03, 0x05, -/* 000185A0 */ 0xFE, 0xDF, 0x03, 0x05, 0xFE, 0xE0, 0x03, 0x05, 0xFE, 0xE1, 0x03, 0x05, 0xFE, 0xE2, 0x03, 0x05, -/* 000185B0 */ 0xFE, 0xE3, 0x03, 0x05, 0xFE, 0xE4, 0x03, 0x05, 0xFE, 0xE5, 0x03, 0x05, 0xFE, 0xE6, 0x03, 0x05, -/* 000185C0 */ 0xFE, 0xE7, 0x03, 0x05, 0xFE, 0xE8, 0x03, 0x05, 0xFE, 0xE9, 0x03, 0x05, 0xFE, 0xEA, 0x03, 0x05, -/* 000185D0 */ 0xFE, 0xEB, 0x03, 0x06, 0xFE, 0xEC, 0x03, 0x06, 0xFE, 0xED, 0x03, 0x06, 0xFE, 0xEE, 0x03, 0xFE, -/* 000185E0 */ 0xD0, 0x02, 0x4F, 0x26, 0x4F, 0x27, 0x4F, 0x28, 0x4F, 0x29, 0x4F, 0x2A, 0x4F, 0x2B, 0x4F, 0x2C, -/* 000185F0 */ 0x4F, 0x2D, 0x4F, 0x2E, 0x4F, 0x2F, 0x4F, 0x30, 0x4F, 0x31, 0x4F, 0x32, 0x4F, 0x33, 0x4F, 0x34, -/* 00018600 */ 0x4F, 0x35, 0x4F, 0x36, 0x4F, 0x37, 0x4F, 0x38, 0x4F, 0x39, 0x4F, 0x3D, 0x94, 0x02, 0x3D, 0x4F, -/* 00018610 */ 0x3D, 0x94, 0x03, 0x3D, 0x47, 0x26, 0x02, 0x47, 0x27, 0x03, 0x47, 0x3D, 0x04, 0x01, 0x04, 0x01, -/* 00018620 */ 0x3E, 0x26, 0x2F, 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, 0x05, 0x01, 0x04, 0x01, 0x3E, 0x27, 0x2F, -/* 00018630 */ 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, 0x06, 0x47, 0x28, 0x3D, 0x47, 0x29, 0x07, 0x2F, 0x3D, 0x08, -/* 00018640 */ 0x09, 0x47, 0x2A, 0x3D, 0x47, 0x3D, 0x0A, 0x01, 0x04, 0x01, 0x3E, 0x29, 0x2F, 0x3D, 0x3D, 0x3E, -/* 00018650 */ 0x2F, 0x3D, 0x3D, 0x05, 0x01, 0x04, 0x01, 0x3E, 0x2A, 0x2F, 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, -/* 00018660 */ 0x0B, 0x47, 0x2B, 0x3D, 0x47, 0x3D, 0x0C, 0x01, 0x04, 0x01, 0x3E, 0x28, 0x2F, 0x3D, 0x3D, 0x3E, -/* 00018670 */ 0x2F, 0x3D, 0x3D, 0x0D, 0x47, 0x2C, 0x3D, 0x47, 0x3D, 0x0A, 0x01, 0x04, 0x01, 0x3E, 0x27, 0x2F, -/* 00018680 */ 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, 0x0E, 0x47, 0x2D, 0x3D, 0x47, 0x3D, 0x0A, 0x01, 0x04, 0x01, -/* 00018690 */ 0x3E, 0x2D, 0x2F, 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, 0x0F, 0x01, 0x04, 0x01, 0x3E, 0x28, 0x2F, -/* 000186A0 */ 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, 0x10, 0x47, 0x2E, 0x3D, 0x47, 0x3D, 0x0A, 0x01, 0x04, 0x01, -/* 000186B0 */ 0x3E, 0x28, 0x2F, 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, 0x11, 0x01, 0x04, 0x01, 0x3E, 0x27, 0x2F, -/* 000186C0 */ 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, 0x12, 0x01, 0x04, 0x01, 0x3E, 0x28, 0x2F, 0x3D, 0x3D, 0x3E, -/* 000186D0 */ 0x2F, 0x3D, 0x3D, 0x13, 0x47, 0x2F, 0x3D, 0x47, 0x3D, 0x0A, 0x01, 0x04, 0x01, 0x3E, 0x26, 0x2F, -/* 000186E0 */ 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, 0x14, 0x01, 0x04, 0x01, 0x3E, 0x27, 0x2F, 0x3D, 0x3D, 0x3E, -/* 000186F0 */ 0x2F, 0x3D, 0x3D, 0x13, 0x47, 0x30, 0x3D, 0x47, 0x3D, 0x0A, 0x01, 0x04, 0x01, 0x3E, 0x26, 0x2F, -/* 00018700 */ 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, 0x15, 0x47, 0x31, 0x3D, 0x47, 0x3D, 0x0A, 0x01, 0x04, 0x01, -/* 00018710 */ 0x3E, 0x26, 0x2F, 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, 0x16, 0x01, 0x04, 0x01, 0x3E, 0x26, 0x2F, -/* 00018720 */ 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, 0x17, 0x47, 0x32, 0x3D, 0x47, 0x3E, 0x12, 0x01, 0x04, 0x01, -/* 00018730 */ 0x3F, 0x26, 0x2F, 0x3E, 0x3E, 0x3F, 0x2F, 0x3E, 0x3E, 0x18, 0xFC, 0x3D, 0x0A, 0x3E, 0x05, 0x47, -/* 00018740 */ 0x3E, 0x19, 0x01, 0x04, 0x01, 0x3F, 0x32, 0x2F, 0x3E, 0x3E, 0x3F, 0x2F, 0x3E, 0x3E, 0x1A, 0x47, -/* 00018750 */ 0x3F, 0x05, 0x01, 0x04, 0x01, 0x40, 0x26, 0x2F, 0x3F, 0x3F, 0x40, 0x2F, 0x3F, 0x3F, 0x1B, 0xFE, -/* 00018760 */ 0x3D, 0x3E, 0x3F, 0x02, 0xFD, 0x3D, 0x0B, 0x04, 0x47, 0x33, 0x3D, 0x47, 0x3D, 0x1C, 0x01, 0x04, -/* 00018770 */ 0x01, 0x3E, 0x33, 0x2F, 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, 0x0B, 0x47, 0x3E, 0x1D, 0x01, 0x04, -/* 00018780 */ 0x01, 0x3F, 0x31, 0x2F, 0x3E, 0x3E, 0x3F, 0x2F, 0x3E, 0x3E, 0x1E, 0x2F, 0x3D, 0x3D, 0x3E, 0x47, -/* 00018790 */ 0x3E, 0x1D, 0x01, 0x04, 0x01, 0x3F, 0x30, 0x2F, 0x3E, 0x3E, 0x3F, 0x2F, 0x3E, 0x3E, 0x1E, 0x2F, -/* 000187A0 */ 0x3D, 0x3D, 0x3E, 0x47, 0x34, 0x3D, 0x47, 0x3D, 0x1F, 0x01, 0x04, 0x01, 0x3E, 0x2F, 0x2F, 0x3D, -/* 000187B0 */ 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, 0x20, 0x47, 0x3E, 0x1F, 0x01, 0x04, 0x01, 0x3F, 0x2E, 0x2F, 0x3E, -/* 000187C0 */ 0x3E, 0x3F, 0x2F, 0x3E, 0x3E, 0x20, 0x2F, 0x3D, 0x3D, 0x3E, 0x47, 0x3E, 0x19, 0x01, 0x04, 0x01, -/* 000187D0 */ 0x3F, 0x2C, 0x2F, 0x3E, 0x3E, 0x3F, 0x2F, 0x3E, 0x3E, 0x21, 0x2F, 0x3D, 0x3D, 0x3E, 0x47, 0x35, -/* 000187E0 */ 0x3D, 0x47, 0x3D, 0x22, 0x01, 0x04, 0x01, 0x3E, 0x34, 0x2F, 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, -/* 000187F0 */ 0x22, 0x01, 0x04, 0x01, 0x3E, 0x35, 0x2F, 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, 0x22, 0x47, 0x36, -/* 00018800 */ 0x3D, 0x47, 0x3D, 0x0A, 0x01, 0x04, 0x01, 0x3E, 0x36, 0x2F, 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, -/* 00018810 */ 0x05, 0x01, 0x04, 0x01, 0x3E, 0x2C, 0x2F, 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, 0x05, 0x01, 0x04, -/* 00018820 */ 0x01, 0x3E, 0x2B, 0x2F, 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, 0x0B, 0x47, 0x37, 0x3D, 0x8C, 0x02, -/* 00018830 */ 0x09, 0x3D, 0x07, 0x03, 0x00, 0x47, 0x3E, 0x23, 0x01, 0x04, 0x01, 0x3F, 0x34, 0x2F, 0x3E, 0x3E, -/* 00018840 */ 0x3F, 0x2F, 0x3E, 0x3E, 0x24, 0x5A, 0x01, 0x3E, 0x5A, 0x02, 0x25, 0xC1, 0x03, 0x3D, 0x3D, 0x47, -/* 00018850 */ 0x38, 0x3D, 0x8C, 0x02, 0x09, 0x3D, 0x07, 0x03, 0x00, 0x47, 0x3E, 0x23, 0x01, 0x04, 0x01, 0x3F, -/* 00018860 */ 0x35, 0x2F, 0x3E, 0x3E, 0x3F, 0x2F, 0x3E, 0x3E, 0x24, 0x5A, 0x01, 0x3E, 0x5A, 0x02, 0x25, 0xC1, -/* 00018870 */ 0x03, 0x3D, 0x3D, 0x47, 0x39, 0x3D, 0x8C, 0x02, 0x09, 0x3D, 0x07, 0x03, 0x00, 0x47, 0x3E, 0x23, -/* 00018880 */ 0x01, 0x04, 0x01, 0x3F, 0x37, 0x2F, 0x3E, 0x3E, 0x3F, 0x2F, 0x3E, 0x3E, 0x24, 0x5A, 0x01, 0x3E, -/* 00018890 */ 0x5A, 0x02, 0x25, 0xC1, 0x03, 0x3D, 0x3D, 0x94, 0x02, 0x3D, 0x8C, 0x02, 0x02, 0x3D, 0x07, 0x01, -/* 000188A0 */ 0x00, 0xC1, 0x01, 0x3D, 0x3D, 0x94, 0x03, 0x3D, 0xD3, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, -/* 000188B0 */ 0x24, 0x00, 0xFE, 0x68, 0x5F, 0x18, 0x32, 0x00, 0x00, 0x00, 0x03, 0x00, 0x1F, 0x00, 0x03, 0x00, -/* 000188C0 */ 0x1F, 0x00, 0x20, 0x00, 0x33, 0x00, 0x03, 0x00, 0x77, 0x00, 0x07, 0x00, 0xC0, 0x00, 0x20, 0x00, -/* 000188D0 */ 0x44, 0x00, 0x13, 0x00, 0x7D, 0x00, 0x13, 0x00, 0x94, 0x00, 0x20, 0x00, 0x83, 0x00, 0x2D, 0x00, -/* 000188E0 */ 0x83, 0x00, 0x20, 0x00, 0x74, 0x00, 0x13, 0x00, 0x6A, 0x00, 0x20, 0x00, 0x7A, 0x00, 0x41, 0x00, -/* 000188F0 */ 0xAF, 0x03, 0x3B, 0x00, 0x4C, 0x01, 0x3B, 0x00, 0x5A, 0x01, 0x20, 0x00, 0x4B, 0x00, 0x2D, 0x00, -/* 00018900 */ 0xBA, 0x00, 0x24, 0x00, 0x74, 0x00, 0x24, 0x00, 0x92, 0x00, 0x24, 0x00, 0x93, 0x00, 0x0E, 0x00, -/* 00018910 */ 0x34, 0x00, 0x08, 0x00, 0x59, 0x08, 0x00, 0x1B, 0x89, 0x01, 0x00, 0xBF, 0x7C, 0x00, 0xC3, 0x43, -/* 00018920 */ 0xA8, 0x09, 0x00, 0xFE, 0x6A, 0x02, 0x0F, 0xA2, 0x41, 0xD1, 0x00, 0x37, 0xFE, 0xF1, 0x6D, 0xFF, -/* 00018930 */ 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0xF1, 0x6D, 0xFE, 0x4C, 0x08, 0xFE, 0x4C, 0x08, 0x01, -/* 00018940 */ 0x10, 0x0B, 0x13, 0x09, 0x8D, 0x82, 0x2F, 0x03, 0x03, 0x02, 0x11, 0x11, 0x11, 0x11, 0x03, 0x12, -/* 00018950 */ 0x13, 0xFE, 0x14, 0x01, 0xFE, 0xB4, 0x01, 0xFE, 0x3D, 0x01, 0xFE, 0x61, 0x01, 0x07, 0x01, 0x01, -/* 00018960 */ 0x01, 0x02, 0x06, 0xFE, 0xAF, 0x03, 0x01, 0x03, 0x01, 0x04, 0x01, 0x05, 0x01, 0x00, 0x06, 0xFE, -/* 00018970 */ 0xEF, 0x03, 0xFE, 0xD8, 0x01, 0x4F, 0x0C, 0x4F, 0x0D, 0x4F, 0x0E, 0x4F, 0x0F, 0x4F, 0x10, 0x4F, -/* 00018980 */ 0x11, 0x8C, 0x01, 0x03, 0x17, 0x4B, 0x17, 0x6A, 0x16, 0x17, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 00018990 */ 0x17, 0x5A, 0x01, 0x0B, 0x1F, 0x02, 0x16, 0x16, 0x47, 0x0C, 0x16, 0x0E, 0x06, 0x00, 0x0C, 0x47, -/* 000189A0 */ 0x00, 0x0C, 0x09, 0xA6, 0x01, 0x8C, 0x03, 0x37, 0x17, 0x4B, 0x17, 0x6A, 0x16, 0x17, 0x01, 0x07, -/* 000189B0 */ 0x03, 0x00, 0x5A, 0x00, 0x17, 0x5A, 0x01, 0x0B, 0x8C, 0x01, 0x02, 0x18, 0x4B, 0x18, 0x5A, 0x02, -/* 000189C0 */ 0x18, 0x1F, 0x03, 0x16, 0x16, 0x47, 0x0D, 0x16, 0x0F, 0x06, 0x00, 0x0D, 0x47, 0x00, 0x02, 0x09, -/* 000189D0 */ 0x79, 0x01, 0x8C, 0x03, 0x37, 0x17, 0x4B, 0x17, 0x6A, 0x16, 0x17, 0x02, 0x07, 0x01, 0x00, 0x5A, -/* 000189E0 */ 0x00, 0x17, 0x1F, 0x01, 0x16, 0x16, 0x47, 0x0E, 0x16, 0x95, 0x16, 0x0D, 0x03, 0x74, 0x16, 0x0E, -/* 000189F0 */ 0x03, 0x95, 0x16, 0x0D, 0x03, 0x74, 0x16, 0x0E, 0x04, 0x95, 0x16, 0x0D, 0x04, 0x0E, 0x1E, 0x00, -/* 00018A00 */ 0x16, 0x95, 0x16, 0x0D, 0x04, 0x74, 0x16, 0x0E, 0x05, 0x5F, 0x17, 0x0E, 0x06, 0x95, 0x18, 0x0D, -/* 00018A10 */ 0x04, 0x2F, 0x18, 0x05, 0x18, 0x2F, 0x16, 0x17, 0x18, 0x74, 0x16, 0x0E, 0x04, 0xFA, 0x16, 0x95, -/* 00018A20 */ 0x16, 0x0D, 0x06, 0x0E, 0x1E, 0x00, 0x16, 0x95, 0x16, 0x0D, 0x06, 0x74, 0x16, 0x0E, 0x07, 0x5F, -/* 00018A30 */ 0x17, 0x0E, 0x06, 0x95, 0x18, 0x0D, 0x06, 0x2F, 0x18, 0x05, 0x18, 0x2F, 0x16, 0x17, 0x18, 0x74, -/* 00018A40 */ 0x16, 0x0E, 0x04, 0xFA, 0x16, 0x95, 0x16, 0x0D, 0x07, 0x0E, 0x08, 0x00, 0x16, 0x95, 0x16, 0x0D, -/* 00018A50 */ 0x07, 0x74, 0x16, 0x0E, 0x08, 0x95, 0x16, 0x0D, 0x08, 0x0E, 0xCC, 0x00, 0x16, 0x95, 0x16, 0x0D, -/* 00018A60 */ 0x08, 0x74, 0x16, 0x0E, 0x09, 0x8C, 0x03, 0x37, 0x17, 0x4B, 0x17, 0x6A, 0x16, 0x17, 0x0A, 0x07, -/* 00018A70 */ 0x03, 0x00, 0x5A, 0x00, 0x17, 0x95, 0x18, 0x0D, 0x08, 0x5A, 0x01, 0x18, 0x5A, 0x02, 0x05, 0x1F, -/* 00018A80 */ 0x03, 0x16, 0x16, 0x47, 0x0F, 0x16, 0x47, 0x10, 0x09, 0xEA, 0x00, 0xA4, 0x16, 0x0F, 0x0B, 0x12, -/* 00018A90 */ 0x03, 0x00, 0x10, 0x16, 0x09, 0x92, 0x00, 0x95, 0x16, 0x0F, 0x10, 0x15, 0x03, 0x00, 0x16, 0x0A, -/* 00018AA0 */ 0x09, 0x03, 0x00, 0x09, 0x7D, 0x00, 0xA6, 0x16, 0x47, 0x11, 0x16, 0x2F, 0x16, 0x10, 0x03, 0x47, -/* 00018AB0 */ 0x11, 0x16, 0xEA, 0x01, 0xA4, 0x16, 0x0F, 0x0B, 0x12, 0x03, 0x00, 0x11, 0x16, 0x09, 0x16, 0x00, -/* 00018AC0 */ 0x95, 0x16, 0x0F, 0x11, 0xA4, 0x16, 0x16, 0x0C, 0x11, 0x03, 0x00, 0x16, 0x03, 0x09, 0x06, 0x00, -/* 00018AD0 */ 0x28, 0x11, 0x11, 0x09, 0xDC, 0xFF, 0x2F, 0x16, 0x10, 0x03, 0x11, 0x03, 0x00, 0x11, 0x16, 0x09, -/* 00018AE0 */ 0x3E, 0x00, 0x47, 0x16, 0x0E, 0x8C, 0x03, 0x37, 0x18, 0x4B, 0x18, 0x6A, 0x17, 0x18, 0x0D, 0x07, -/* 00018AF0 */ 0x03, 0x00, 0x5A, 0x00, 0x18, 0x8C, 0x03, 0x37, 0x1A, 0x4B, 0x1A, 0x6A, 0x19, 0x1A, 0x0E, 0x07, -/* 00018B00 */ 0x04, 0x00, 0x5A, 0x00, 0x1A, 0x5A, 0x01, 0x0F, 0x5A, 0x02, 0x10, 0x5A, 0x03, 0x11, 0x1F, 0x04, -/* 00018B10 */ 0x19, 0x19, 0x5A, 0x01, 0x19, 0x5A, 0x02, 0x05, 0x1F, 0x03, 0x17, 0x17, 0x74, 0x17, 0x16, 0x0F, -/* 00018B20 */ 0x09, 0x06, 0x00, 0x28, 0x10, 0x10, 0x09, 0x60, 0xFF, 0x8C, 0x01, 0x03, 0x17, 0x4B, 0x17, 0x6A, -/* 00018B30 */ 0x16, 0x17, 0x10, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x17, 0x5A, 0x01, 0x0B, 0x5A, 0x02, 0x0E, 0x1F, -/* 00018B40 */ 0x03, 0xFF, 0x16, 0x47, 0x00, 0x0E, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x84, 0x01, -/* 00018B50 */ 0xF1, 0x61, 0xFE, 0xF0, 0x03, 0xFE, 0x28, 0x03, 0xFE, 0xF1, 0x03, 0xFE, 0x28, 0x03, 0xFE, 0xF2, -/* 00018B60 */ 0x03, 0xFE, 0xF3, 0x03, 0xFE, 0xF4, 0x03, 0xFE, 0x45, 0x01, 0xC1, 0xC1, 0xBC, 0xFE, 0x3F, 0x01, -/* 00018B70 */ 0xFE, 0xB6, 0x03, 0xFE, 0x87, 0x01, 0xFE, 0x12, 0x6E, 0x23, 0x0C, 0x00, 0x00, 0x00, 0x1A, 0x00, -/* 00018B80 */ 0x3C, 0x00, 0x04, 0x00, 0x1E, 0x00, 0x06, 0x00, 0x2A, 0x00, 0x23, 0x00, 0x39, 0x00, 0x04, 0x00, -/* 00018B90 */ 0x1E, 0x00, 0x06, 0x00, 0x28, 0x00, 0x17, 0x00, 0x24, 0x00, 0x08, 0x00, 0x25, 0x00, 0x08, 0x00, -/* 00018BA0 */ 0x21, 0x00, 0x08, 0x00, 0x20, 0x00, 0x08, 0x00, 0x27, 0x00, 0x16, 0x00, 0x37, 0x00, 0x08, 0x00, -/* 00018BB0 */ 0x20, 0x00, 0x08, 0x00, 0x27, 0x00, 0x16, 0x00, 0x37, 0x00, 0x08, 0x00, 0x20, 0x00, 0x08, 0x00, -/* 00018BC0 */ 0x34, 0x00, 0x08, 0x00, 0x20, 0x00, 0x08, 0x00, 0x76, 0x00, 0x21, 0x00, 0x44, 0x00, 0x05, 0x00, -/* 00018BD0 */ 0x0B, 0x00, 0x0C, 0x00, 0x36, 0x00, 0x0C, 0x00, 0x39, 0x00, 0x03, 0x00, 0x35, 0x00, 0x05, 0x00, -/* 00018BE0 */ 0x20, 0x00, 0x09, 0x00, 0x0B, 0x00, 0x1C, 0x00, 0x3B, 0x00, 0x06, 0x00, 0x3B, 0x01, 0x0C, 0x00, -/* 00018BF0 */ 0xFC, 0x00, 0x3E, 0x00, 0xCC, 0x00, 0x03, 0x00, 0x0E, 0xFC, 0x06, 0x00, 0x26, 0x04, 0x1A, 0x00, -/* 00018C00 */ 0x33, 0x00, 0x08, 0x00, 0x14, 0x00, 0x00, 0xBF, 0x4C, 0x00, 0x00, 0x20, 0x88, 0x01, 0x00, 0xFE, -/* 00018C10 */ 0x24, 0x02, 0x04, 0xA1, 0x41, 0xC1, 0x00, 0xFE, 0x65, 0x03, 0x35, 0xFE, 0x40, 0x59, 0xFF, 0x00, -/* 00018C20 */ 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0x40, 0x59, 0x55, 0x55, 0x41, 0x02, 0x02, 0x03, 0x05, 0x05, -/* 00018C30 */ 0x02, 0x01, 0x02, 0x0D, 0xE0, 0x03, 0x00, 0x01, 0x34, 0x01, 0x01, 0x0D, 0x03, 0xA6, 0x00, 0x24, -/* 00018C40 */ 0x00, 0x0A, 0xFE, 0xCA, 0x03, 0x01, 0xFE, 0x6E, 0x59, 0x02, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x00, -/* 00018C50 */ 0x26, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x16, 0x02, 0x1C, 0xA2, -/* 00018C60 */ 0x41, 0xC1, 0x00, 0xFE, 0x6E, 0x03, 0x34, 0xFE, 0x5D, 0x57, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x06, -/* 00018C70 */ 0x06, 0xFE, 0x5D, 0x57, 0xFE, 0xC2, 0x01, 0xFE, 0xC2, 0x01, 0x01, 0x0B, 0x06, 0x0D, 0x08, 0x39, -/* 00018C80 */ 0x35, 0x02, 0x04, 0x04, 0x04, 0x04, 0x04, 0x0C, 0x08, 0x06, 0xFE, 0xC7, 0x03, 0x05, 0xFE, 0xC8, -/* 00018C90 */ 0x03, 0x06, 0xFE, 0xC9, 0x03, 0xC0, 0x4F, 0x0B, 0x95, 0x0D, 0x06, 0x07, 0x47, 0x0B, 0x0D, 0xA6, -/* 00018CA0 */ 0x0D, 0x15, 0x03, 0x00, 0x0B, 0x0D, 0x09, 0xA3, 0x00, 0x8C, 0x02, 0x24, 0x0E, 0x6A, 0x0D, 0x0E, -/* 00018CB0 */ 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0E, 0x5A, 0x01, 0x0B, 0x1F, 0x02, 0x0D, 0x0D, 0x47, 0x0B, -/* 00018CC0 */ 0x0D, 0x8C, 0x02, 0x37, 0x0E, 0x4B, 0x0E, 0x6A, 0x0D, 0x0E, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 00018CD0 */ 0x0E, 0x5A, 0x01, 0x0B, 0x1F, 0x02, 0x0D, 0x0D, 0x0F, 0x0D, 0x00, 0x0D, 0x12, 0x08, 0x00, 0x0B, -/* 00018CE0 */ 0x08, 0x11, 0x03, 0x00, 0x0B, 0x09, 0x09, 0x49, 0x00, 0x8C, 0x02, 0x03, 0x0E, 0x6A, 0x0D, 0x0E, -/* 00018CF0 */ 0x02, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x0E, 0x8C, 0x02, 0x0B, 0x0F, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 00018D00 */ 0x02, 0x5A, 0x01, 0x0B, 0x1F, 0x02, 0x0F, 0x0F, 0x5A, 0x01, 0x0F, 0x5A, 0x02, 0x07, 0x47, 0x0F, -/* 00018D10 */ 0x03, 0x01, 0x04, 0x01, 0x10, 0x08, 0x2F, 0x0F, 0x0F, 0x10, 0x2F, 0x0F, 0x0F, 0x04, 0x01, 0x04, -/* 00018D20 */ 0x01, 0x10, 0x09, 0x2F, 0x0F, 0x0F, 0x10, 0x2F, 0x0F, 0x0F, 0x05, 0x5A, 0x03, 0x0F, 0x1F, 0x04, -/* 00018D30 */ 0xFF, 0x0D, 0x8C, 0x02, 0x37, 0x0E, 0x4B, 0x0E, 0x6A, 0x0D, 0x0E, 0x03, 0x07, 0x02, 0x00, 0x5A, -/* 00018D40 */ 0x00, 0x0E, 0x5A, 0x01, 0x0B, 0x1F, 0x02, 0x00, 0x0D, 0x09, 0x08, 0x00, 0x47, 0x00, 0x0A, 0x09, -/* 00018D50 */ 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x38, 0x03, 0xB4, 0xFE, 0x8F, 0x02, 0x23, 0xFE, 0xA0, -/* 00018D60 */ 0x57, 0x08, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x27, 0x00, 0x0A, 0x00, 0x27, 0x00, 0x18, 0x00, -/* 00018D70 */ 0x2E, 0x00, 0x28, 0x00, 0x4C, 0x00, 0x49, 0x00, 0x77, 0x00, 0x1A, 0x00, 0x2A, 0x00, 0x08, 0x00, -/* 00018D80 */ 0x15, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0xEB, 0x01, 0x04, 0xA3, -/* 00018D90 */ 0x41, 0xC1, 0x00, 0xFE, 0x64, 0x03, 0x33, 0xFE, 0xF2, 0x50, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x06, -/* 00018DA0 */ 0x06, 0xFE, 0xF2, 0x50, 0xFE, 0xDD, 0x02, 0xFE, 0xDD, 0x02, 0x01, 0x0C, 0x0A, 0x11, 0x09, 0x53, -/* 00018DB0 */ 0x4C, 0x02, 0x04, 0x06, 0x06, 0x06, 0x06, 0x10, 0x06, 0xFE, 0xC2, 0x03, 0x06, 0xFE, 0xAD, 0x03, -/* 00018DC0 */ 0x06, 0xFE, 0xC3, 0x03, 0x01, 0xFF, 0x08, 0x05, 0xFE, 0xC4, 0x03, 0x05, 0xFE, 0xC5, 0x03, 0x05, -/* 00018DD0 */ 0xFE, 0xC6, 0x03, 0xFE, 0x16, 0x01, 0x4F, 0x0F, 0x95, 0x11, 0x0A, 0x0B, 0x47, 0x0F, 0x11, 0xA6, -/* 00018DE0 */ 0x11, 0x15, 0x03, 0x00, 0x0F, 0x11, 0x09, 0xF9, 0x00, 0x0C, 0x03, 0x00, 0x0C, 0x02, 0x09, 0x18, -/* 00018DF0 */ 0x00, 0x8C, 0x02, 0x24, 0x12, 0x6A, 0x11, 0x12, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x12, 0x5A, -/* 00018E00 */ 0x01, 0x0F, 0x1F, 0x02, 0x11, 0x11, 0x47, 0x0F, 0x11, 0x0C, 0x03, 0x00, 0x0C, 0x03, 0x09, 0x18, -/* 00018E10 */ 0x00, 0x8C, 0x02, 0x24, 0x12, 0x6A, 0x11, 0x12, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x12, 0x5A, -/* 00018E20 */ 0x01, 0x0F, 0x1F, 0x02, 0x11, 0x11, 0x47, 0x0F, 0x11, 0x0C, 0x03, 0x00, 0x0C, 0x04, 0x09, 0x18, -/* 00018E30 */ 0x00, 0x8C, 0x02, 0x24, 0x12, 0x6A, 0x11, 0x12, 0x02, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x12, 0x5A, -/* 00018E40 */ 0x01, 0x0F, 0x1F, 0x02, 0x11, 0x11, 0x47, 0x0F, 0x11, 0xA6, 0x11, 0x15, 0x03, 0x00, 0x0D, 0x11, -/* 00018E50 */ 0x09, 0x89, 0x00, 0x8C, 0x02, 0x37, 0x12, 0x4B, 0x12, 0x6A, 0x11, 0x12, 0x03, 0x07, 0x03, 0x00, -/* 00018E60 */ 0x5A, 0x00, 0x12, 0x5A, 0x01, 0x0D, 0x5A, 0x02, 0x0F, 0x1F, 0x03, 0x11, 0x11, 0x0C, 0x03, 0x00, -/* 00018E70 */ 0x11, 0x05, 0x09, 0x67, 0x00, 0x8C, 0x02, 0x03, 0x12, 0x6A, 0x11, 0x12, 0x04, 0x07, 0x04, 0x00, -/* 00018E80 */ 0x5A, 0x00, 0x12, 0x8C, 0x02, 0x0B, 0x13, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x06, 0x5A, 0x01, 0x0F, -/* 00018E90 */ 0x1F, 0x02, 0x13, 0x13, 0x5A, 0x01, 0x13, 0x8C, 0x02, 0x0B, 0x13, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 00018EA0 */ 0x06, 0x5A, 0x01, 0x0B, 0x1F, 0x02, 0x13, 0x13, 0x5A, 0x02, 0x13, 0x47, 0x13, 0x07, 0x8C, 0x02, -/* 00018EB0 */ 0x37, 0x15, 0x4B, 0x15, 0x6A, 0x14, 0x15, 0x05, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x15, 0x5A, 0x01, -/* 00018EC0 */ 0x0D, 0x5A, 0x02, 0x09, 0x1F, 0x03, 0x14, 0x14, 0x01, 0x04, 0x01, 0x15, 0x14, 0x2F, 0x13, 0x13, -/* 00018ED0 */ 0x15, 0x2F, 0x13, 0x13, 0x08, 0x5A, 0x03, 0x13, 0x1F, 0x04, 0xFF, 0x11, 0x47, 0x00, 0x0F, 0x09, -/* 00018EE0 */ 0x08, 0x00, 0x47, 0x00, 0x0E, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x39, 0x03, 0xFE, -/* 00018EF0 */ 0x37, 0x03, 0xFE, 0x38, 0x03, 0xFE, 0x14, 0x03, 0xFE, 0x8F, 0x02, 0xBC, 0xFE, 0x3A, 0x51, 0x0D, -/* 00018F00 */ 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x28, 0x00, 0x0A, 0x00, 0x27, 0x00, 0x08, 0x00, 0x29, 0x00, -/* 00018F10 */ 0x18, 0x00, 0x45, 0x00, 0x08, 0x00, 0x28, 0x00, 0x18, 0x00, 0x3D, 0x00, 0x08, 0x00, 0x28, 0x00, -/* 00018F20 */ 0x18, 0x00, 0x3D, 0x00, 0x2C, 0x00, 0x53, 0x00, 0x67, 0x00, 0x84, 0x00, 0x06, 0x00, 0x21, 0x00, -/* 00018F30 */ 0x08, 0x00, 0x15, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x03, 0x00, 0xFE, 0xE0, 0x01, -/* 00018F40 */ 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x3A, 0x03, 0x32, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0xE5, -/* 00018F50 */ 0x4F, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0xE5, 0x4F, 0xD8, 0xD8, 0x01, 0x09, 0x06, -/* 00018F60 */ 0x0A, 0x07, 0x2A, 0x25, 0x02, 0x04, 0x02, 0x02, 0x02, 0x02, 0x09, 0x08, 0x01, 0x00, 0x01, 0x02, -/* 00018F70 */ 0x01, 0x20, 0x86, 0x8C, 0x02, 0x0A, 0x0A, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x06, -/* 00018F80 */ 0x1F, 0x02, 0x0A, 0x0A, 0x47, 0x07, 0x0A, 0x47, 0x08, 0x03, 0x8C, 0x02, 0x21, 0x0A, 0x07, 0x02, -/* 00018F90 */ 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x07, 0x1F, 0x02, 0x0A, 0x0A, 0x0F, 0x50, 0x00, 0x0A, 0x8C, -/* 00018FA0 */ 0x02, 0x20, 0x0A, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x07, 0x1F, 0x02, 0x0A, 0x0A, -/* 00018FB0 */ 0x0E, 0x3B, 0x00, 0x0A, 0x8C, 0x02, 0x37, 0x0B, 0x4B, 0x0B, 0x6A, 0x0A, 0x0B, 0x00, 0x07, 0x02, -/* 00018FC0 */ 0x00, 0x5A, 0x00, 0x0B, 0x47, 0x0C, 0x07, 0x8C, 0x02, 0x37, 0x0E, 0x4B, 0x0E, 0x6A, 0x0D, 0x0E, -/* 00018FD0 */ 0x01, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0E, 0x5A, 0x01, 0x04, 0x5A, 0x02, 0x05, 0x1F, 0x03, 0x0D, -/* 00018FE0 */ 0x0D, 0x33, 0x0C, 0x0C, 0x0D, 0x5A, 0x01, 0x0C, 0x1F, 0x02, 0x0A, 0x0A, 0x47, 0x08, 0x0A, 0x47, -/* 00018FF0 */ 0x00, 0x08, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x1B, 0x29, 0xFE, 0xFF, 0x4F, 0x06, 0x00, -/* 00019000 */ 0x00, 0x00, 0x00, 0x14, 0x00, 0x25, 0x00, 0x03, 0x00, 0x15, 0x00, 0x2A, 0x00, 0x34, 0x00, 0x3B, -/* 00019010 */ 0x00, 0x3B, 0x00, 0x08, 0x00, 0x14, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0x01, 0x00, 0x88, 0x03, 0x00, -/* 00019020 */ 0xFE, 0xDC, 0x01, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x39, 0x03, 0x31, 0xFF, 0x00, 0x00, 0x40, -/* 00019030 */ 0x02, 0xFE, 0x7E, 0x4F, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x7E, 0x4F, 0x5C, 0x5C, -/* 00019040 */ 0x01, 0x03, 0x03, 0x05, 0x03, 0x10, 0x0E, 0x02, 0x01, 0x04, 0x08, 0x2D, 0xA6, 0x05, 0x15, 0x03, -/* 00019050 */ 0x00, 0x03, 0x05, 0x09, 0x17, 0x00, 0x8C, 0x02, 0x07, 0x05, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, -/* 00019060 */ 0x5A, 0x01, 0x03, 0x1F, 0x02, 0x05, 0x05, 0x47, 0x00, 0x05, 0x09, 0x05, 0x00, 0xA6, 0x05, 0x47, -/* 00019070 */ 0x00, 0x05, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xA0, 0x4F, 0x02, 0x00, 0x00, 0x00, -/* 00019080 */ 0x00, 0x2B, 0x00, 0x39, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0x01, 0x00, 0x88, 0x03, 0x00, 0xFE, 0xD8, -/* 00019090 */ 0x01, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x38, 0x03, 0x30, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, -/* 000190A0 */ 0x26, 0x4F, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x26, 0x4F, 0x4D, 0x4D, 0x01, 0x03, -/* 000190B0 */ 0x03, 0x05, 0x03, 0x10, 0x0E, 0x02, 0x01, 0x04, 0x08, 0x2D, 0xA6, 0x05, 0x15, 0x03, 0x00, 0x03, -/* 000190C0 */ 0x05, 0x09, 0x17, 0x00, 0x8C, 0x02, 0x0A, 0x05, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, -/* 000190D0 */ 0x03, 0x1F, 0x02, 0x05, 0x05, 0x47, 0x00, 0x05, 0x09, 0x05, 0x00, 0xA7, 0x05, 0x47, 0x00, 0x05, -/* 000190E0 */ 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x40, 0x4F, 0x02, 0x00, 0x00, 0x00, 0x00, 0x2B, -/* 000190F0 */ 0x00, 0x32, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0x01, 0x00, 0x88, 0x03, 0x00, 0xFE, 0xD4, 0x01, 0x08, -/* 00019100 */ 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x37, 0x03, 0x2F, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0xC8, 0x4E, -/* 00019110 */ 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0xC8, 0x4E, 0x53, 0x53, 0x01, 0x03, 0x03, 0x05, -/* 00019120 */ 0x03, 0x10, 0x0E, 0x02, 0x01, 0x04, 0x08, 0x2D, 0xA6, 0x05, 0x15, 0x03, 0x00, 0x03, 0x05, 0x09, -/* 00019130 */ 0x17, 0x00, 0x8C, 0x02, 0x0B, 0x05, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x03, 0x1F, -/* 00019140 */ 0x02, 0x05, 0x05, 0x47, 0x00, 0x05, 0x09, 0x05, 0x00, 0xA6, 0x05, 0x47, 0x00, 0x05, 0x09, 0x02, -/* 00019150 */ 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xE2, 0x4E, 0x02, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x38, -/* 00019160 */ 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x03, 0x00, 0xFE, 0xCD, 0x01, 0x08, 0xA2, 0x41, -/* 00019170 */ 0xC1, 0x01, 0xFE, 0x36, 0x03, 0x2E, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0x12, 0x4E, 0xFF, 0x00, -/* 00019180 */ 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x12, 0x4E, 0xAB, 0xAB, 0x01, 0x04, 0x04, 0x06, 0x03, 0x17, -/* 00019190 */ 0x15, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x05, 0x07, 0x08, 0x47, 0x14, 0x03, 0x00, 0x04, 0x02, -/* 000191A0 */ 0x09, 0x12, 0x00, 0x8C, 0x02, 0x03, 0x07, 0x6A, 0x06, 0x07, 0x00, 0x07, 0x01, 0x00, 0x5A, 0x00, -/* 000191B0 */ 0x07, 0x1F, 0x01, 0xFF, 0x06, 0xA6, 0x06, 0x15, 0x03, 0x00, 0x04, 0x06, 0x09, 0x17, 0x00, 0x8C, -/* 000191C0 */ 0x02, 0x08, 0x06, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x03, 0x5A, 0x01, 0x04, 0x1F, 0x02, 0x06, 0x06, -/* 000191D0 */ 0x47, 0x00, 0x06, 0x09, 0x05, 0x00, 0xA6, 0x06, 0x47, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA6, 0x00, -/* 000191E0 */ 0x24, 0x00, 0xFE, 0x89, 0x02, 0xFE, 0x2C, 0x4E, 0x04, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x22, -/* 000191F0 */ 0x00, 0x12, 0x00, 0x36, 0x00, 0x2B, 0x00, 0x38, 0x00, 0x00, 0x3F, 0x5D, 0x00, 0xC1, 0x53, 0xAD, -/* 00019200 */ 0x25, 0x00, 0xFE, 0x8F, 0x01, 0x1A, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x6D, 0x03, 0x2C, 0xFE, 0x67, -/* 00019210 */ 0x44, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x05, 0x05, 0xFE, 0x67, 0x44, 0xFE, 0x86, 0x09, 0xFE, -/* 00019220 */ 0x86, 0x09, 0x05, 0xFE, 0xCA, 0x01, 0xFE, 0xB8, 0x03, 0xFE, 0xB9, 0x03, 0xFE, 0xBA, 0x03, 0xFE, -/* 00019230 */ 0xBB, 0x03, 0x10, 0x0B, 0x16, 0x05, 0x7B, 0x77, 0x02, 0x0A, 0x09, 0x09, 0x09, 0x09, 0x01, 0x02, -/* 00019240 */ 0x13, 0x14, 0x15, 0x16, 0x05, 0xFE, 0xBC, 0x03, 0x08, 0x06, 0xFE, 0xBD, 0x03, 0x07, 0x05, 0xFE, -/* 00019250 */ 0xBE, 0x03, 0x01, 0x02, 0x05, 0xFE, 0xBF, 0x03, 0x01, 0xFF, 0x01, 0x00, 0xFE, 0x88, 0x01, 0x94, -/* 00019260 */ 0x02, 0x0D, 0x4F, 0x0F, 0x4F, 0x10, 0x4F, 0x11, 0x4F, 0x12, 0x4F, 0x18, 0x94, 0x03, 0x18, 0x4F, -/* 00019270 */ 0x18, 0x94, 0x04, 0x18, 0x4F, 0x18, 0x94, 0x05, 0x18, 0x4F, 0x18, 0x94, 0x06, 0x18, 0x90, 0x02, -/* 00019280 */ 0x18, 0x5F, 0x18, 0x18, 0x00, 0x47, 0x0F, 0x18, 0xA6, 0x18, 0x94, 0x03, 0x18, 0x14, 0x03, 0x00, -/* 00019290 */ 0x0F, 0x02, 0x09, 0x1C, 0x00, 0x8C, 0x01, 0x08, 0x18, 0x4B, 0x18, 0x07, 0x03, 0x00, 0x5A, 0x00, -/* 000192A0 */ 0x03, 0x5A, 0x01, 0x0B, 0x5A, 0x02, 0x0C, 0x1F, 0x03, 0x18, 0x18, 0x94, 0x03, 0x18, 0x09, 0x19, -/* 000192B0 */ 0x00, 0x8C, 0x01, 0x09, 0x18, 0x4B, 0x18, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x03, 0x5A, 0x01, 0x0B, -/* 000192C0 */ 0x5A, 0x02, 0x0C, 0x1F, 0x03, 0x18, 0x18, 0x94, 0x03, 0x18, 0x90, 0x03, 0x18, 0x5F, 0x18, 0x18, -/* 000192D0 */ 0x01, 0x94, 0x04, 0x18, 0x8C, 0x02, 0x35, 0x18, 0x4B, 0x18, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x03, -/* 000192E0 */ 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x90, 0x04, 0x1A, -/* 000192F0 */ 0x78, 0x1A, 0x19, 0x02, 0x5A, 0x01, 0x19, 0x1F, 0x02, 0x18, 0x18, 0x94, 0x05, 0x18, 0x94, 0x06, -/* 00019300 */ 0x06, 0x8C, 0x02, 0x37, 0x19, 0x4B, 0x19, 0x6A, 0x18, 0x19, 0x03, 0x07, 0x03, 0x00, 0x5A, 0x00, -/* 00019310 */ 0x19, 0x5A, 0x01, 0x0E, 0xD3, 0x00, 0x1A, 0x5A, 0x02, 0x1A, 0x1F, 0x03, 0xFF, 0x18, 0x90, 0x06, -/* 00019320 */ 0x18, 0xA4, 0x18, 0x18, 0x04, 0x11, 0x03, 0x00, 0x18, 0x07, 0x09, 0xA6, 0x00, 0x8C, 0x02, 0x37, -/* 00019330 */ 0x19, 0x4B, 0x19, 0x6A, 0x18, 0x19, 0x05, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x19, 0x90, 0x04, 0x1A, -/* 00019340 */ 0x5A, 0x01, 0x1A, 0x5A, 0x02, 0x08, 0x1F, 0x03, 0x18, 0x18, 0x47, 0x10, 0x18, 0x14, 0x03, 0x00, -/* 00019350 */ 0x10, 0x09, 0x09, 0x12, 0x00, 0x90, 0x04, 0x19, 0x90, 0x06, 0x1A, 0x2F, 0x18, 0x19, 0x1A, 0x94, -/* 00019360 */ 0x04, 0x18, 0xFA, 0x18, 0x09, 0x51, 0x00, 0x8C, 0x02, 0x37, 0x19, 0x4B, 0x19, 0x6A, 0x18, 0x19, -/* 00019370 */ 0x06, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x19, 0x90, 0x04, 0x1A, 0x5A, 0x01, 0x1A, 0x5A, 0x02, 0x0A, -/* 00019380 */ 0x5A, 0x03, 0x10, 0x1F, 0x04, 0x18, 0x18, 0x47, 0x11, 0x18, 0x8C, 0x02, 0x37, 0x19, 0x4B, 0x19, -/* 00019390 */ 0x6A, 0x18, 0x19, 0x06, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x19, 0x90, 0x04, 0x1A, 0x5A, 0x01, 0x1A, -/* 000193A0 */ 0x5A, 0x02, 0x10, 0x1F, 0x03, 0x18, 0x18, 0x47, 0x12, 0x18, 0x90, 0x06, 0x18, 0x2F, 0x18, 0x11, -/* 000193B0 */ 0x18, 0x2F, 0x18, 0x18, 0x12, 0x94, 0x04, 0x18, 0x8C, 0x02, 0x03, 0x19, 0x6A, 0x18, 0x19, 0x07, -/* 000193C0 */ 0x07, 0x02, 0x00, 0x5A, 0x00, 0x19, 0x90, 0x04, 0x1A, 0x5A, 0x01, 0x1A, 0x1F, 0x02, 0x18, 0x18, -/* 000193D0 */ 0x94, 0x04, 0x18, 0x90, 0x05, 0x18, 0x90, 0x04, 0x19, 0x74, 0x19, 0x18, 0x08, 0x90, 0x05, 0x00, -/* 000193E0 */ 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x01, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x01, -/* 000193F0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBD, 0x03, 0x00, 0x00, 0xFE, 0xC0, 0x03, 0xFE, 0xF7, 0x01, -/* 00019400 */ 0xFE, 0xBD, 0x03, 0x86, 0xC1, 0xFE, 0x0E, 0x03, 0xFE, 0x4C, 0x01, 0xFE, 0xD8, 0x01, 0xFE, 0xF7, -/* 00019410 */ 0x01, 0xFE, 0xC0, 0x44, 0x14, 0x1F, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x2F, 0x00, 0x05, 0x00, 0x0F, -/* 00019420 */ 0x00, 0x08, 0x00, 0x28, 0x00, 0x1C, 0x00, 0x55, 0x00, 0x19, 0x00, 0x4C, 0x00, 0x0A, 0x00, 0x24, -/* 00019430 */ 0x00, 0x2A, 0x00, 0x3A, 0x00, 0x03, 0x00, 0x27, 0x00, 0x1D, 0x00, 0x37, 0x05, 0x0F, 0x00, 0x31, -/* 00019440 */ 0x00, 0x20, 0x00, 0x46, 0x00, 0x08, 0x00, 0x2B, 0x00, 0x12, 0x00, 0x48, 0x00, 0x23, 0x00, 0x50, -/* 00019450 */ 0x00, 0x20, 0x00, 0x4E, 0x00, 0x0E, 0x00, 0x5C, 0x00, 0x1B, 0x00, 0x4D, 0x00, 0x0A, 0x00, 0x25, -/* 00019460 */ 0x00, 0x08, 0x00, 0x13, 0x00, 0x00, 0x6A, 0x94, 0x01, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x43, 0xA8, -/* 00019470 */ 0x01, 0x00, 0xFE, 0x9B, 0x01, 0x29, 0xA2, 0x41, 0xD1, 0x00, 0x2D, 0xFE, 0x6D, 0x46, 0xFF, 0x00, -/* 00019480 */ 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x6D, 0x46, 0xFE, 0x0A, 0x05, 0xFE, 0x0A, 0x05, 0x41, 0x0B, -/* 00019490 */ 0x08, 0x0F, 0x04, 0x6B, 0x60, 0x03, 0x08, 0x04, 0x04, 0x04, 0x04, 0x01, 0x0E, 0x0F, 0x08, 0x01, -/* 000194A0 */ 0x00, 0x06, 0xFE, 0x5B, 0x03, 0x01, 0xFF, 0x06, 0xFE, 0xAF, 0x03, 0x06, 0xFE, 0xC1, 0x03, 0xFE, -/* 000194B0 */ 0x60, 0x01, 0x4F, 0x09, 0x4F, 0x0A, 0x4F, 0x0B, 0x4F, 0x0C, 0x4F, 0x0D, 0x8C, 0x02, 0x07, 0x10, -/* 000194C0 */ 0x4B, 0x10, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x08, 0x8C, 0x01, 0x04, 0x11, 0x4B, -/* 000194D0 */ 0x11, 0x5A, 0x02, 0x11, 0x1F, 0x03, 0x10, 0x10, 0x47, 0x09, 0x10, 0x95, 0x10, 0x09, 0x03, 0x47, -/* 000194E0 */ 0x0A, 0x10, 0x47, 0x0B, 0x04, 0x8C, 0x01, 0x03, 0x10, 0x4B, 0x10, 0x5F, 0x10, 0x10, 0x00, 0x0E, -/* 000194F0 */ 0xA2, 0x00, 0x10, 0x8C, 0x02, 0x0A, 0x10, 0x4B, 0x10, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x8C, -/* 00019500 */ 0x01, 0x03, 0x11, 0x4B, 0x11, 0x5F, 0x11, 0x11, 0x01, 0x5A, 0x01, 0x11, 0x5A, 0x02, 0x08, 0x1F, -/* 00019510 */ 0x03, 0x10, 0x10, 0x47, 0x0C, 0x10, 0xA6, 0x10, 0x15, 0x03, 0x00, 0x0C, 0x10, 0x09, 0x75, 0x00, -/* 00019520 */ 0x15, 0x03, 0x00, 0x0C, 0x04, 0x09, 0x48, 0x00, 0x8C, 0x03, 0x37, 0x11, 0x4B, 0x11, 0x6A, 0x10, -/* 00019530 */ 0x11, 0x02, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x11, 0x5A, 0x01, 0x09, 0x5A, 0x02, 0x0C, 0x1F, 0x03, -/* 00019540 */ 0x10, 0x10, 0x15, 0x03, 0x00, 0x10, 0x05, 0x09, 0x23, 0x00, 0x47, 0x0A, 0x0C, 0x47, 0x10, 0x06, -/* 00019550 */ 0x01, 0x04, 0x01, 0x11, 0x08, 0x2F, 0x10, 0x10, 0x11, 0x2F, 0x10, 0x10, 0x06, 0x01, 0x04, 0x01, -/* 00019560 */ 0x11, 0x0A, 0x2F, 0x10, 0x10, 0x11, 0x2F, 0x10, 0x10, 0x04, 0x47, 0x0B, 0x10, 0x09, 0x25, 0x00, -/* 00019570 */ 0x8C, 0x03, 0x37, 0x11, 0x4B, 0x11, 0x6A, 0x10, 0x11, 0x02, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x11, -/* 00019580 */ 0x5A, 0x01, 0x09, 0x5A, 0x02, 0x07, 0x1F, 0x03, 0x10, 0x10, 0x15, 0x03, 0x00, 0x10, 0x05, 0x09, -/* 00019590 */ 0x03, 0x00, 0x47, 0x0A, 0x07, 0x8C, 0x03, 0x37, 0x11, 0x4B, 0x11, 0x6A, 0x10, 0x11, 0x03, 0x07, -/* 000195A0 */ 0x03, 0x00, 0x5A, 0x00, 0x11, 0x8C, 0x01, 0x02, 0x12, 0x5A, 0x01, 0x12, 0x5A, 0x02, 0x08, 0x1F, -/* 000195B0 */ 0x03, 0x10, 0x10, 0x0E, 0x3B, 0x00, 0x10, 0x8C, 0x01, 0x02, 0x10, 0x95, 0x10, 0x10, 0x08, 0x47, -/* 000195C0 */ 0x0D, 0x10, 0x8C, 0x03, 0x37, 0x11, 0x4B, 0x11, 0x6A, 0x10, 0x11, 0x02, 0x07, 0x03, 0x00, 0x5A, -/* 000195D0 */ 0x00, 0x11, 0x5A, 0x01, 0x09, 0x5A, 0x02, 0x0D, 0x1F, 0x03, 0x10, 0x10, 0x15, 0x03, 0x00, 0x10, -/* 000195E0 */ 0x05, 0x09, 0x0E, 0x00, 0x15, 0x03, 0x00, 0x0D, 0x0A, 0x09, 0x06, 0x00, 0x47, 0x0A, 0x0D, 0x47, -/* 000195F0 */ 0x0B, 0x04, 0x8C, 0x01, 0x05, 0x10, 0x4B, 0x10, 0x9A, 0x0A, 0x10, 0x08, 0x8C, 0x01, 0x06, 0x11, -/* 00019600 */ 0x4B, 0x11, 0x2F, 0x10, 0x11, 0x0B, 0x01, 0x34, 0x01, 0x01, 0x06, 0x10, 0xFA, 0x10, 0xA6, 0x00, -/* 00019610 */ 0x24, 0x00, 0xFE, 0xB7, 0x03, 0xFE, 0xB7, 0x03, 0xFE, 0x14, 0x03, 0xA7, 0xFE, 0x8A, 0x46, 0x15, -/* 00019620 */ 0x0A, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x46, 0x00, 0x07, 0x00, 0x2A, 0x00, 0x03, 0x00, 0x31, 0x00, -/* 00019630 */ 0x0E, 0x00, 0x23, 0x00, 0x23, 0x00, 0x50, 0x00, 0x0A, 0x00, 0x38, 0x00, 0x08, 0x00, 0x35, 0x00, -/* 00019640 */ 0x22, 0x00, 0x58, 0x00, 0x03, 0x00, 0x34, 0x00, 0x23, 0x00, 0x66, 0x00, 0x22, 0x00, 0x4C, 0x00, -/* 00019650 */ 0x03, 0x00, 0x53, 0x00, 0x22, 0x00, 0x36, 0x00, 0x0B, 0x00, 0x33, 0x00, 0x22, 0x00, 0x4E, 0x00, -/* 00019660 */ 0x08, 0x00, 0x36, 0x00, 0x03, 0x00, 0x2E, 0x00, 0x03, 0x00, 0x64, 0x00, 0x0A, 0x00, 0x21, 0x00, -/* 00019670 */ 0x14, 0x00, 0x3A, 0x00, 0x00, 0xBF, 0x7C, 0x00, 0xC3, 0x43, 0xA8, 0x09, 0x00, 0xFE, 0x5E, 0x01, -/* 00019680 */ 0x22, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x6C, 0x03, 0x2B, 0xFE, 0xFA, 0x3C, 0xFF, 0x00, 0x10, 0x01, -/* 00019690 */ 0x00, 0x03, 0x03, 0xFE, 0xFA, 0x3C, 0xFE, 0x46, 0x04, 0xFE, 0x46, 0x04, 0x01, 0x11, 0x0B, 0x16, -/* 000196A0 */ 0x05, 0x6C, 0x59, 0x21, 0x02, 0x02, 0x01, 0x05, 0x05, 0x05, 0x05, 0x02, 0x15, 0x16, 0x7B, 0xE9, -/* 000196B0 */ 0x01, 0x02, 0x06, 0xFE, 0xAF, 0x03, 0x01, 0xFF, 0x01, 0x04, 0x0C, 0x0B, 0x01, 0x01, 0x06, 0xFE, -/* 000196C0 */ 0x5B, 0x03, 0x01, 0x03, 0xFE, 0x5C, 0x01, 0x4F, 0x0D, 0x4F, 0x0E, 0x4F, 0x0F, 0x4F, 0x10, 0x4F, -/* 000196D0 */ 0x11, 0x4F, 0x12, 0x4F, 0x13, 0x4F, 0x14, 0x8C, 0x02, 0x38, 0x19, 0x4B, 0x19, 0x6A, 0x18, 0x19, -/* 000196E0 */ 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x19, 0xA4, 0x1A, 0x0C, 0x01, 0x43, 0x1A, 0x1A, 0x02, 0x5A, -/* 000196F0 */ 0x01, 0x1A, 0x1F, 0x02, 0xFF, 0x18, 0xA4, 0x18, 0x0B, 0x02, 0x47, 0x0D, 0x18, 0x8C, 0x02, 0x37, -/* 00019700 */ 0x19, 0x4B, 0x19, 0x6A, 0x18, 0x19, 0x03, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x19, 0x5A, 0x01, 0x0B, -/* 00019710 */ 0x47, 0x1A, 0x03, 0x01, 0x04, 0x01, 0x1B, 0x0C, 0x2F, 0x1A, 0x1A, 0x1B, 0x2F, 0x1A, 0x1A, 0x03, -/* 00019720 */ 0x5A, 0x02, 0x1A, 0x1F, 0x03, 0x18, 0x18, 0x47, 0x0E, 0x18, 0x15, 0x03, 0x00, 0x0E, 0x04, 0x09, -/* 00019730 */ 0x9E, 0x00, 0x2F, 0x18, 0x0E, 0x05, 0x47, 0x0F, 0x18, 0x47, 0x10, 0x0F, 0x47, 0x11, 0x0F, 0x47, -/* 00019740 */ 0x12, 0x06, 0xEA, 0x00, 0x0F, 0x68, 0x00, 0x12, 0x8C, 0x02, 0x37, 0x19, 0x4B, 0x19, 0x6A, 0x18, -/* 00019750 */ 0x19, 0x03, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x19, 0x5A, 0x01, 0x0B, 0x5A, 0x02, 0x03, 0x5A, 0x03, -/* 00019760 */ 0x11, 0x1F, 0x04, 0x18, 0x18, 0x47, 0x13, 0x18, 0x14, 0x03, 0x00, 0x13, 0x04, 0x09, 0x0A, 0x00, -/* 00019770 */ 0x35, 0x19, 0x0D, 0x11, 0x47, 0x18, 0x19, 0x09, 0x07, 0x00, 0x35, 0x19, 0x13, 0x11, 0x47, 0x18, -/* 00019780 */ 0x19, 0x47, 0x14, 0x18, 0x14, 0x03, 0x00, 0x14, 0x02, 0x09, 0x06, 0x00, 0x47, 0x12, 0x07, 0x09, -/* 00019790 */ 0x1B, 0x00, 0x14, 0x03, 0x00, 0x13, 0x04, 0x09, 0x09, 0x00, 0x47, 0x10, 0x0D, 0x47, 0x12, 0x07, -/* 000197A0 */ 0x09, 0x0A, 0x00, 0x47, 0x10, 0x13, 0x2F, 0x18, 0x13, 0x08, 0x47, 0x11, 0x18, 0x09, 0x92, 0xFF, -/* 000197B0 */ 0x8C, 0x02, 0x37, 0x19, 0x4B, 0x19, 0x6A, 0x18, 0x19, 0x04, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x19, -/* 000197C0 */ 0x5A, 0x01, 0x0B, 0x5A, 0x02, 0x0F, 0x5A, 0x03, 0x10, 0x1F, 0x04, 0x00, 0x18, 0x09, 0x51, 0x00, -/* 000197D0 */ 0x8C, 0x02, 0x37, 0x19, 0x4B, 0x19, 0x6A, 0x18, 0x19, 0x03, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x19, -/* 000197E0 */ 0x5A, 0x01, 0x0B, 0x47, 0x1A, 0x03, 0x01, 0x04, 0x01, 0x1B, 0x0C, 0x2F, 0x1A, 0x1A, 0x1B, 0x2F, -/* 000197F0 */ 0x1A, 0x1A, 0x09, 0x5A, 0x02, 0x1A, 0x1F, 0x03, 0x18, 0x18, 0x47, 0x0E, 0x18, 0x15, 0x03, 0x00, -/* 00019800 */ 0x0E, 0x04, 0x09, 0x15, 0x00, 0x2F, 0x18, 0x0E, 0x0A, 0x14, 0x03, 0x00, 0x18, 0x0D, 0x09, 0x09, -/* 00019810 */ 0x00, 0x47, 0x00, 0x09, 0x09, 0x0A, 0x00, 0x09, 0x05, 0x00, 0xA6, 0x00, 0x09, 0x02, 0x00, 0xA6, -/* 00019820 */ 0x00, 0x24, 0x00, 0xFE, 0x27, 0x03, 0xC1, 0xC1, 0xFE, 0x0E, 0x03, 0xFE, 0x4C, 0x01, 0xFE, 0x1E, -/* 00019830 */ 0x3D, 0x18, 0x10, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x28, 0x00, 0x07, 0x00, 0x51, 0x00, 0x2D, 0x00, -/* 00019840 */ 0x3A, 0x00, 0x08, 0x00, 0x1E, 0x00, 0x07, 0x00, 0x23, 0x00, 0x03, 0x00, 0x1D, 0x00, 0x03, 0x00, -/* 00019850 */ 0x1B, 0x00, 0x05, 0x00, 0x25, 0x00, 0x04, 0x00, 0x19, 0x00, 0x20, 0x00, 0x3E, 0x00, 0x1C, 0x00, -/* 00019860 */ 0x39, 0x00, 0x08, 0x00, 0x25, 0x00, 0x06, 0x00, 0x24, 0x00, 0x08, 0x00, 0x24, 0x00, 0x03, 0x00, -/* 00019870 */ 0x20, 0x00, 0x06, 0x00, 0x3A, 0x00, 0x03, 0x00, 0x1D, 0x00, 0x0A, 0x00, 0x38, 0x00, 0x20, 0x00, -/* 00019880 */ 0x75, 0x00, 0x2D, 0x00, 0x35, 0x00, 0x14, 0x00, 0x32, 0x00, 0x09, 0x00, 0x28, 0x00, 0x07, 0x00, -/* 00019890 */ 0x20, 0x00, 0x00, 0xBF, 0x7C, 0x00, 0xC3, 0x43, 0xA8, 0x09, 0x00, 0xFE, 0x3D, 0x01, 0x1A, 0xA2, -/* 000198A0 */ 0x41, 0xC1, 0x00, 0xFE, 0x6A, 0x03, 0x2A, 0xFE, 0x58, 0x38, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, -/* 000198B0 */ 0x03, 0xFE, 0x58, 0x38, 0xFE, 0x06, 0x03, 0xFE, 0x06, 0x03, 0x01, 0x0B, 0x06, 0x0D, 0x04, 0x3D, -/* 000198C0 */ 0x37, 0x26, 0x02, 0x04, 0x01, 0x06, 0x06, 0x06, 0x06, 0x02, 0x0C, 0x0D, 0x22, 0xA4, 0x01, 0x00, -/* 000198D0 */ 0x01, 0x01, 0x08, 0x07, 0xC2, 0x4F, 0x08, 0x4F, 0x09, 0x4F, 0x0A, 0x4F, 0x0B, 0x8C, 0x02, 0x37, -/* 000198E0 */ 0x10, 0x4B, 0x10, 0x6A, 0x0F, 0x10, 0x00, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x10, 0x1F, 0x01, 0x0F, -/* 000198F0 */ 0x0F, 0x47, 0x08, 0x0F, 0x47, 0x09, 0x02, 0xEA, 0x00, 0xA4, 0x0F, 0x07, 0x01, 0x12, 0x03, 0x00, -/* 00019900 */ 0x09, 0x0F, 0x09, 0x74, 0x00, 0x8C, 0x01, 0x0E, 0x0F, 0x4B, 0x0F, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 00019910 */ 0x04, 0x95, 0x10, 0x07, 0x09, 0x5A, 0x01, 0x10, 0x1F, 0x02, 0x0F, 0x0F, 0x47, 0x0A, 0x0F, 0x14, -/* 00019920 */ 0x03, 0x00, 0x0A, 0x05, 0x09, 0x03, 0x00, 0x09, 0x49, 0x00, 0x8C, 0x01, 0x06, 0x0F, 0x4B, 0x0F, -/* 00019930 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x06, 0x5F, 0x10, 0x0A, 0x02, 0x5A, 0x02, 0x10, -/* 00019940 */ 0x1F, 0x03, 0x0F, 0x0F, 0x47, 0x0B, 0x0F, 0xA6, 0x0F, 0x15, 0x03, 0x00, 0x0B, 0x0F, 0x09, 0x22, -/* 00019950 */ 0x00, 0x74, 0x0B, 0x08, 0x03, 0x95, 0x0F, 0x07, 0x09, 0x5F, 0x10, 0x0A, 0x02, 0x15, 0x03, 0x00, -/* 00019960 */ 0x0F, 0x10, 0x09, 0x08, 0x00, 0x5F, 0x0F, 0x0A, 0x04, 0x74, 0x0F, 0x08, 0x05, 0x47, 0x00, 0x08, -/* 00019970 */ 0x09, 0x22, 0x00, 0x28, 0x09, 0x09, 0x09, 0x7E, 0xFF, 0x8C, 0x01, 0x05, 0x0F, 0x4B, 0x0F, 0x07, -/* 00019980 */ 0x01, 0x00, 0x5A, 0x00, 0x04, 0x1F, 0x01, 0x0F, 0x0F, 0x74, 0x0F, 0x08, 0x03, 0x47, 0x00, 0x08, -/* 00019990 */ 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x61, 0xC1, 0xFE, 0x28, 0x03, 0xFE, 0xF7, 0x01, 0xFE, -/* 000199A0 */ 0xB6, 0x03, 0xFE, 0xB7, 0x03, 0xFE, 0x91, 0x38, 0x10, 0x08, 0x00, 0x00, 0x00, 0x17, 0x00, 0x28, -/* 000199B0 */ 0x00, 0x05, 0x00, 0x0B, 0x00, 0x0C, 0x00, 0x30, 0x00, 0x1A, 0x00, 0x45, 0x00, 0x08, 0x00, 0x2E, -/* 000199C0 */ 0x00, 0x03, 0x00, 0x25, 0x00, 0x1D, 0x00, 0x60, 0x00, 0x0A, 0x00, 0x35, 0x00, 0x04, 0x00, 0x31, -/* 000199D0 */ 0x00, 0x10, 0x00, 0x46, 0x00, 0x08, 0x00, 0x56, 0x00, 0x06, 0x00, 0xF3, 0xFD, 0x06, 0x00, 0x3D, -/* 000199E0 */ 0x02, 0x14, 0x00, 0x2C, 0x00, 0x08, 0x00, 0x13, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x13, 0x88, -/* 000199F0 */ 0x21, 0x00, 0xFE, 0x25, 0x01, 0x1D, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x69, 0x03, 0x29, 0xFE, 0x52, -/* 00019A00 */ 0x35, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x52, 0x35, 0xFE, 0xA2, 0x01, 0xFE, 0xA2, -/* 00019A10 */ 0x01, 0x01, 0x08, 0x0F, 0x14, 0x04, 0x18, 0x15, 0x02, 0x01, 0x07, 0x07, 0x07, 0x07, 0x01, 0x13, -/* 00019A20 */ 0x06, 0xFE, 0xB0, 0x03, 0x01, 0x00, 0x06, 0xFE, 0xB1, 0x03, 0x01, 0x01, 0x06, 0xFE, 0xB2, 0x03, -/* 00019A30 */ 0x01, 0x02, 0x06, 0xFE, 0xB3, 0x03, 0x01, 0x03, 0x06, 0xFE, 0xB4, 0x03, 0x01, 0x04, 0x06, 0xFE, -/* 00019A40 */ 0xB5, 0x03, 0x01, 0x05, 0x07, 0x55, 0x4F, 0x11, 0x4F, 0x12, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 00019A50 */ 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x78, 0x03, 0x14, 0x00, 0x78, 0x05, 0x14, 0x01, 0x78, -/* 00019A60 */ 0x07, 0x14, 0x02, 0x78, 0x09, 0x14, 0x03, 0x78, 0x0B, 0x14, 0x04, 0x78, 0x0D, 0x14, 0x05, 0x47, -/* 00019A70 */ 0x11, 0x14, 0x8C, 0x02, 0x03, 0x15, 0x6A, 0x14, 0x15, 0x06, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x15, -/* 00019A80 */ 0x95, 0x16, 0x11, 0x0F, 0x5A, 0x01, 0x16, 0x5A, 0x02, 0x10, 0x1F, 0x03, 0x14, 0x14, 0x47, 0x12, -/* 00019A90 */ 0x14, 0x47, 0x00, 0x12, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x01, 0x20, 0x00, 0x00, 0x00, -/* 00019AA0 */ 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB0, 0x03, 0x00, 0x00, 0xB1, 0x03, -/* 00019AB0 */ 0x00, 0x00, 0xB2, 0x03, 0x00, 0x00, 0xB3, 0x03, 0x00, 0x00, 0xB4, 0x03, 0x00, 0x00, 0xB5, 0x03, -/* 00019AC0 */ 0x00, 0x00, 0xFE, 0xB0, 0x03, 0xFE, 0xB1, 0x03, 0xFE, 0xB2, 0x03, 0xFE, 0xB3, 0x03, 0xFE, 0xB4, -/* 00019AD0 */ 0x03, 0xFE, 0xB5, 0x03, 0xFE, 0xEA, 0x01, 0xFE, 0xE6, 0x35, 0x04, 0x04, 0x00, 0x00, 0x00, 0x28, -/* 00019AE0 */ 0x00, 0x9F, 0x00, 0x1F, 0x00, 0x54, 0x00, 0x08, 0x00, 0x1A, 0x00, 0x00, 0xBF, 0x7C, 0x00, 0xC3, -/* 00019AF0 */ 0x43, 0xA8, 0x09, 0x00, 0xF7, 0x20, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x68, 0x03, 0x28, 0xFE, 0x88, -/* 00019B00 */ 0x2E, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x88, 0x2E, 0xFE, 0x55, 0x04, 0xFE, 0x55, -/* 00019B10 */ 0x04, 0x01, 0x0B, 0x09, 0x10, 0x05, 0x3B, 0x34, 0x2D, 0x02, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, -/* 00019B20 */ 0x02, 0x0F, 0x10, 0x1D, 0xB5, 0x44, 0x66, 0x06, 0xFE, 0xAF, 0x03, 0x0B, 0x08, 0x01, 0xFF, 0x01, -/* 00019B30 */ 0x01, 0x01, 0x00, 0x01, 0x02, 0xB9, 0x4F, 0x0B, 0x4F, 0x0C, 0x4F, 0x0D, 0x4F, 0x0E, 0xA6, 0x12, -/* 00019B40 */ 0x14, 0x03, 0x00, 0x0A, 0x12, 0x09, 0x05, 0x00, 0xA6, 0x00, 0x09, 0xA0, 0x00, 0x47, 0x0B, 0x0A, -/* 00019B50 */ 0x47, 0x0C, 0x02, 0xEA, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x0B, 0x1F, 0x02, -/* 00019B60 */ 0x12, 0x09, 0x0E, 0x06, 0x00, 0x12, 0x47, 0x00, 0x0B, 0x09, 0x81, 0x00, 0x47, 0x0D, 0x05, 0xA4, -/* 00019B70 */ 0x12, 0x0B, 0x00, 0x35, 0x12, 0x12, 0x06, 0x47, 0x0E, 0x12, 0xEA, 0x01, 0x10, 0x03, 0x00, 0x0E, -/* 00019B80 */ 0x07, 0x09, 0x18, 0x00, 0x95, 0x12, 0x0B, 0x0E, 0x14, 0x03, 0x00, 0x12, 0x0C, 0x09, 0x06, 0x00, -/* 00019B90 */ 0x47, 0x0D, 0x0E, 0x09, 0x06, 0x00, 0x29, 0x0E, 0x0E, 0x09, 0xDE, 0xFF, 0x14, 0x03, 0x00, 0x0D, -/* 00019BA0 */ 0x05, 0x09, 0x08, 0x00, 0xA6, 0x00, 0x09, 0x44, 0x00, 0x09, 0x1C, 0x00, 0x10, 0x03, 0x00, 0x0D, -/* 00019BB0 */ 0x08, 0x09, 0x14, 0x00, 0x35, 0x12, 0x0D, 0x08, 0x95, 0x12, 0x0B, 0x12, 0x14, 0x03, 0x00, 0x12, -/* 00019BC0 */ 0x0C, 0x09, 0x04, 0x00, 0x35, 0x0D, 0x0D, 0x08, 0x8C, 0x02, 0x37, 0x13, 0x4B, 0x13, 0x6A, 0x12, -/* 00019BD0 */ 0x13, 0x01, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x13, 0x5A, 0x01, 0x0B, 0x5A, 0x02, 0x07, 0x5A, 0x03, -/* 00019BE0 */ 0x0D, 0x1F, 0x04, 0x12, 0x12, 0x47, 0x0B, 0x12, 0x09, 0x68, 0xFF, 0xA6, 0x00, 0x24, 0x00, 0xC1, -/* 00019BF0 */ 0xFE, 0x4C, 0x01, 0xFE, 0xB7, 0x2E, 0x13, 0x08, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x28, 0x00, 0x05, -/* 00019C00 */ 0x00, 0x25, 0x00, 0x03, 0x00, 0x20, 0x00, 0x05, 0x00, 0x37, 0x00, 0x11, 0x00, 0x34, 0x00, 0x06, -/* 00019C10 */ 0x00, 0x2D, 0x00, 0x03, 0x00, 0x1F, 0x00, 0x0D, 0x00, 0x1E, 0x00, 0x08, 0x00, 0x1F, 0x00, 0x0C, -/* 00019C20 */ 0x00, 0x33, 0x00, 0x03, 0x00, 0x1D, 0x00, 0x03, 0x00, 0x99, 0xFF, 0x06, 0x00, 0x9B, 0x00, 0x08, -/* 00019C30 */ 0x00, 0x22, 0x00, 0x08, 0x00, 0x25, 0x00, 0x18, 0x00, 0x9A, 0x01, 0x04, 0x00, 0x25, 0x00, 0x25, -/* 00019C40 */ 0x00, 0x3A, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xEA, 0x1C, 0xA2, 0x41, -/* 00019C50 */ 0xC1, 0x00, 0xFE, 0xE6, 0x02, 0x27, 0xFE, 0x6B, 0x2C, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, -/* 00019C60 */ 0xFE, 0x6B, 0x2C, 0x51, 0x51, 0x01, 0x05, 0x02, 0x05, 0x04, 0x0B, 0x0B, 0x02, 0x01, 0x01, 0x01, -/* 00019C70 */ 0x01, 0x01, 0x04, 0x1F, 0x8C, 0x02, 0x03, 0x06, 0x6A, 0x05, 0x06, 0x00, 0x07, 0x03, 0x00, 0x5A, -/* 00019C80 */ 0x00, 0x06, 0x5A, 0x01, 0x03, 0x5A, 0x02, 0x02, 0x1F, 0x03, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA6, -/* 00019C90 */ 0x00, 0x24, 0x00, 0xFE, 0xFD, 0x01, 0xFE, 0x88, 0x2C, 0x02, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x00, -/* 00019CA0 */ 0x33, 0x00, 0x00, 0xBF, 0x4C, 0x00, 0xC0, 0x03, 0x80, 0x01, 0x00, 0xE4, 0x1C, 0xA2, 0x41, 0xC1, -/* 00019CB0 */ 0x00, 0xFE, 0xE5, 0x02, 0x26, 0xFE, 0xD1, 0x2B, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, -/* 00019CC0 */ 0xD1, 0x2B, 0x7B, 0x7B, 0x41, 0x02, 0x04, 0x05, 0x09, 0x09, 0x02, 0x01, 0x01, 0x01, 0x01, 0x04, -/* 00019CD0 */ 0x00, 0x00, 0x00, 0xF9, 0x7F, 0xFD, 0xDF, 0xC1, 0x04, 0x00, 0x00, 0x40, 0xFE, 0x7F, 0xFD, 0xDF, -/* 00019CE0 */ 0xC1, 0x1B, 0x5F, 0x05, 0x04, 0x00, 0x14, 0x0C, 0x00, 0x05, 0x02, 0x5F, 0x05, 0x04, 0x00, 0x14, -/* 00019CF0 */ 0x03, 0x00, 0x05, 0x03, 0x09, 0x02, 0x00, 0x23, 0x04, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xFE, 0x00, -/* 00019D00 */ 0xFE, 0xE9, 0x2B, 0x03, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x4A, 0x00, 0x04, 0x00, 0x18, 0x00, -/* 00019D10 */ 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xD2, 0x1D, 0xA0, 0x41, 0xC1, 0x00, 0xFE, -/* 00019D20 */ 0x67, 0x03, 0x25, 0xFE, 0x84, 0x29, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0x84, 0x29, -/* 00019D30 */ 0xFE, 0xC9, 0x01, 0xFE, 0xC9, 0x01, 0x01, 0x04, 0x03, 0x05, 0x02, 0x1A, 0x19, 0x02, 0x02, 0x02, -/* 00019D40 */ 0x02, 0x02, 0x02, 0x04, 0x05, 0xFE, 0xAE, 0x03, 0x56, 0x4F, 0x03, 0x8C, 0x01, 0x04, 0x05, 0x4B, -/* 00019D50 */ 0x05, 0x0E, 0x15, 0x00, 0x05, 0x8C, 0x02, 0x03, 0x05, 0x5F, 0x05, 0x05, 0x00, 0x0E, 0x09, 0x00, -/* 00019D60 */ 0x05, 0x8C, 0x01, 0x04, 0x00, 0x4B, 0x00, 0x09, 0x33, 0x00, 0x8C, 0x02, 0x03, 0x06, 0x6A, 0x05, -/* 00019D70 */ 0x06, 0x01, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x06, 0x1F, 0x01, 0x05, 0x05, 0x47, 0x03, 0x05, 0x0F, -/* 00019D80 */ 0x09, 0x00, 0x03, 0x01, 0x34, 0x01, 0x01, 0x04, 0x02, 0x09, 0x06, 0x00, 0x01, 0x34, 0x01, 0x01, -/* 00019D90 */ 0x04, 0x03, 0x8C, 0x01, 0x04, 0x00, 0x4B, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, -/* 00019DA0 */ 0x61, 0x03, 0xFE, 0xDF, 0x01, 0xFE, 0x9A, 0x29, 0x08, 0x02, 0x00, 0x00, 0x00, 0x16, 0x00, 0x39, -/* 00019DB0 */ 0x00, 0x09, 0x00, 0x2B, 0x00, 0x15, 0x00, 0x34, 0x00, 0x04, 0x00, 0x9C, 0x00, 0x09, 0x00, 0x35, -/* 00019DC0 */ 0x00, 0x06, 0x00, 0x2D, 0x00, 0x0B, 0x00, 0x1C, 0x00, 0x00, 0xBF, 0x4C, 0x00, 0xC0, 0x03, 0x80, -/* 00019DD0 */ 0x01, 0x00, 0xC1, 0x13, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xFD, 0x02, 0x24, 0xFE, 0x00, 0x26, 0xFF, -/* 00019DE0 */ 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x00, 0x26, 0xB7, 0xB7, 0x01, 0x03, 0x03, 0x05, 0x0C, -/* 00019DF0 */ 0x0C, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0xFE, 0xAD, 0x03, 0x24, 0x0E, 0x0B, 0x00, 0x04, 0x2C, -/* 00019E00 */ 0x05, 0x04, 0x15, 0x03, 0x00, 0x05, 0x02, 0x09, 0x0A, 0x00, 0x5F, 0x00, 0x03, 0x00, 0x09, 0x0C, -/* 00019E10 */ 0x00, 0x09, 0x07, 0x00, 0x95, 0x00, 0x03, 0x04, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, -/* 00019E20 */ 0x2C, 0x03, 0xFE, 0x25, 0x26, 0x04, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x33, 0x00, 0x0A, 0x00, -/* 00019E30 */ 0x38, 0x00, 0x09, 0x00, 0x26, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x03, 0x00, 0xA3, -/* 00019E40 */ 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0xAB, 0x03, 0x23, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0x03, -/* 00019E50 */ 0x21, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x03, 0x21, 0x68, 0x68, 0x06, 0x01, 0x07, -/* 00019E60 */ 0x03, 0x06, 0x06, 0x16, 0x12, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x05, 0x05, 0xFE, 0xAC, 0x03, -/* 00019E70 */ 0x43, 0x0E, 0x08, 0x00, 0x03, 0xA6, 0x06, 0x47, 0x00, 0x06, 0x09, 0x30, 0x00, 0x8C, 0x01, 0x03, -/* 00019E80 */ 0x07, 0x6A, 0x06, 0x07, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x07, 0x47, 0x08, 0x04, 0x0F, 0x11, -/* 00019E90 */ 0x00, 0x04, 0x8C, 0x01, 0x0D, 0x09, 0x07, 0x02, 0x00, 0x5A, 0x01, 0x02, 0xC1, 0x02, 0x09, 0x09, -/* 00019EA0 */ 0x47, 0x08, 0x09, 0x5A, 0x01, 0x08, 0x1F, 0x02, 0x06, 0x06, 0x47, 0x00, 0x06, 0x09, 0x02, 0x00, -/* 00019EB0 */ 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xD6, 0x01, 0xFE, 0x17, 0x21, 0x02, 0x00, 0x00, 0x00, 0x00, 0x41, -/* 00019EC0 */ 0x00, 0x53, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x23, 0x00, 0xA2, 0x08, 0xA0, 0x41, -/* 00019ED0 */ 0xE1, 0x01, 0xFE, 0xAA, 0x03, 0x22, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0x6C, 0x20, 0xFF, 0x00, -/* 00019EE0 */ 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0x6C, 0x20, 0x8D, 0x8D, 0x06, 0x02, 0x05, 0x04, 0x06, 0x03, -/* 00019EF0 */ 0x17, 0x15, 0x01, 0x01, 0x03, 0x03, 0x03, 0x03, 0x05, 0x07, 0x01, 0x03, 0x4F, 0xAC, 0x04, 0xA4, -/* 00019F00 */ 0x06, 0x04, 0x00, 0x14, 0x03, 0x00, 0x06, 0x03, 0x09, 0x25, 0x00, 0x8C, 0x01, 0x03, 0x07, 0x6A, -/* 00019F10 */ 0x06, 0x07, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x07, 0x01, 0x4F, 0x01, 0x08, 0x04, 0x5A, 0x01, -/* 00019F20 */ 0x08, 0x21, 0x02, 0x06, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x06, 0x09, 0x15, 0x00, -/* 00019F30 */ 0x8C, 0x01, 0x03, 0x07, 0x6A, 0x06, 0x07, 0x02, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x07, 0x1F, 0x01, -/* 00019F40 */ 0x06, 0x06, 0x47, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x01, 0x08, 0x00, 0x00, -/* 00019F50 */ 0x00, 0x00, 0x00, 0x05, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xC1, 0xFE, 0x8F, 0x02, -/* 00019F60 */ 0xFE, 0x90, 0x02, 0xFE, 0x7B, 0x20, 0x02, 0x02, 0x00, 0x00, 0x00, 0x4B, 0x00, 0x7D, 0x00, 0x00, -/* 00019F70 */ 0xFF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x03, 0x00, 0x9E, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0xA9, -/* 00019F80 */ 0x03, 0x21, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0xD2, 0x1F, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, -/* 00019F90 */ 0x04, 0xFE, 0xD2, 0x1F, 0x74, 0x74, 0x02, 0x01, 0x06, 0x03, 0x07, 0x06, 0x0E, 0x0E, 0x01, 0x02, -/* 00019FA0 */ 0x01, 0x01, 0x01, 0x01, 0x06, 0x08, 0x29, 0x8C, 0x01, 0x06, 0x07, 0x07, 0x05, 0x00, 0x5A, 0x00, -/* 00019FB0 */ 0x02, 0x8C, 0x01, 0x03, 0x08, 0x5F, 0x08, 0x08, 0x00, 0x5A, 0x01, 0x08, 0x5A, 0x02, 0x03, 0x5A, -/* 00019FC0 */ 0x03, 0x04, 0x5A, 0x04, 0x05, 0x1F, 0x05, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, -/* 00019FD0 */ 0xFE, 0x65, 0x02, 0xFE, 0xEC, 0x1F, 0x02, 0x00, 0x00, 0x00, 0x00, 0x27, 0x00, 0x59, 0x00, 0x00, -/* 00019FE0 */ 0xFF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x03, 0x00, 0x9D, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0xA8, -/* 00019FF0 */ 0x03, 0x20, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0x62, 0x1F, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, -/* 0001A000 */ 0x03, 0xFE, 0x62, 0x1F, 0x66, 0x66, 0x02, 0x01, 0x05, 0x03, 0x06, 0x05, 0x0D, 0x0D, 0x01, 0x02, -/* 0001A010 */ 0x01, 0x01, 0x01, 0x01, 0x05, 0x08, 0x26, 0x8C, 0x01, 0x06, 0x06, 0x07, 0x04, 0x00, 0x5A, 0x00, -/* 0001A020 */ 0x02, 0x8C, 0x01, 0x03, 0x07, 0x5F, 0x07, 0x07, 0x00, 0x5A, 0x01, 0x07, 0x5A, 0x02, 0x03, 0x5A, -/* 0001A030 */ 0x03, 0x04, 0x1F, 0x04, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x66, 0x02, -/* 0001A040 */ 0xFE, 0x75, 0x1F, 0x02, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x52, 0x00, 0x00, 0xFF, 0x5C, 0x00, -/* 0001A050 */ 0xC1, 0x03, 0x88, 0x03, 0x00, 0x9B, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0xA7, 0x03, 0x1F, 0xFF, -/* 0001A060 */ 0x00, 0x00, 0x40, 0x02, 0xFE, 0xFB, 0x1E, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0xFB, -/* 0001A070 */ 0x1E, 0x5C, 0x5C, 0x02, 0x01, 0x04, 0x03, 0x05, 0x04, 0x0C, 0x0C, 0x01, 0x02, 0x01, 0x01, 0x01, -/* 0001A080 */ 0x01, 0x04, 0x08, 0x23, 0x8C, 0x01, 0x06, 0x05, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x8C, 0x01, -/* 0001A090 */ 0x03, 0x06, 0x5F, 0x06, 0x06, 0x00, 0x5A, 0x01, 0x06, 0x5A, 0x02, 0x03, 0x1F, 0x03, 0x00, 0x05, -/* 0001A0A0 */ 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x63, 0x02, 0xFE, 0x0B, 0x1F, 0x02, 0x00, 0x00, -/* 0001A0B0 */ 0x00, 0x00, 0x21, 0x00, 0x4B, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x03, 0x00, 0x94, -/* 0001A0C0 */ 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0xA6, 0x03, 0x1E, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0xF1, -/* 0001A0D0 */ 0x1D, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0xF1, 0x1D, 0x3E, 0x3E, 0x02, 0x01, 0x04, -/* 0001A0E0 */ 0x03, 0x05, 0x03, 0x0F, 0x0D, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x01, 0x00, 0x2D, 0x14, -/* 0001A0F0 */ 0x03, 0x00, 0x03, 0x02, 0x09, 0x06, 0x00, 0x47, 0x00, 0x02, 0x09, 0x18, 0x00, 0x8C, 0x01, 0x03, -/* 0001A100 */ 0x06, 0x6A, 0x05, 0x06, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x06, 0x5A, 0x01, 0x03, 0x1F, 0x02, -/* 0001A110 */ 0x05, 0x05, 0x47, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x7A, 0x02, 0xFE, -/* 0001A120 */ 0xFC, 0x1D, 0x02, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x32, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0xC1, -/* 0001A130 */ 0x03, 0x88, 0x03, 0x00, 0x90, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0xA5, 0x03, 0x1D, 0xFF, 0x00, -/* 0001A140 */ 0x00, 0x40, 0x02, 0xFE, 0x04, 0x1D, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x02, 0xFE, 0x04, 0x1D, -/* 0001A150 */ 0x5C, 0x5C, 0x02, 0x01, 0x05, 0x04, 0x07, 0x04, 0x0D, 0x0C, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -/* 0001A160 */ 0x06, 0x07, 0x08, 0x27, 0x15, 0x03, 0x00, 0x05, 0x03, 0x47, 0x05, 0x02, 0x8C, 0x01, 0x03, 0x08, -/* 0001A170 */ 0x6A, 0x07, 0x08, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x08, 0x5A, 0x01, 0x04, 0x5A, 0x02, 0x05, -/* 0001A180 */ 0x1F, 0x03, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x81, 0x02, 0xFE, 0x1B, -/* 0001A190 */ 0x1D, 0x03, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x10, 0x00, 0x1D, 0x00, 0x34, 0x00, 0x00, 0xFF, -/* 0001A1A0 */ 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x03, 0x00, 0x8F, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0xA4, 0x03, -/* 0001A1B0 */ 0x1C, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0xAC, 0x1C, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x01, -/* 0001A1C0 */ 0xFE, 0xAC, 0x1C, 0x4E, 0x4E, 0x02, 0x01, 0x04, 0x04, 0x06, 0x03, 0x0C, 0x0B, 0x01, 0x01, 0x01, -/* 0001A1D0 */ 0x01, 0x01, 0x01, 0x05, 0x07, 0x08, 0x24, 0x15, 0x03, 0x00, 0x04, 0x03, 0x47, 0x04, 0x02, 0x8C, -/* 0001A1E0 */ 0x01, 0x03, 0x07, 0x6A, 0x06, 0x07, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x07, 0x5A, 0x01, 0x04, -/* 0001A1F0 */ 0x1F, 0x02, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x67, 0x02, 0xFE, 0xB3, -/* 0001A200 */ 0x1C, 0x03, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x10, 0x00, 0x1A, 0x00, 0x36, 0x00, 0x00, 0xFF, -/* 0001A210 */ 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x03, 0x00, 0x8A, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0xA3, 0x03, -/* 0001A220 */ 0x1B, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0xB6, 0x1B, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, -/* 0001A230 */ 0xFE, 0xB6, 0x1B, 0xA3, 0xA3, 0x02, 0x41, 0x06, 0x03, 0x07, 0x05, 0x13, 0x13, 0x01, 0x02, 0x02, -/* 0001A240 */ 0x02, 0x02, 0x02, 0x06, 0x07, 0x39, 0x8C, 0x01, 0x37, 0x08, 0x4B, 0x08, 0x6A, 0x07, 0x08, 0x00, -/* 0001A250 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x08, 0x5A, 0x01, 0x05, 0x5A, 0x02, 0x02, 0x1F, 0x03, 0xFF, 0x07, -/* 0001A260 */ 0x8C, 0x01, 0x03, 0x08, 0x6A, 0x07, 0x08, 0x01, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x08, 0x5A, 0x01, -/* 0001A270 */ 0x03, 0x5A, 0x02, 0x04, 0x5A, 0x03, 0x05, 0x1F, 0x04, 0xFF, 0x07, 0xA6, 0x00, 0x24, 0x00, 0xFE, -/* 0001A280 */ 0x86, 0x01, 0xFE, 0x68, 0x02, 0xFE, 0xE2, 0x1B, 0x03, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x2A, -/* 0001A290 */ 0x00, 0x1D, 0x00, 0x4C, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x03, 0x00, 0x88, 0x08, -/* 0001A2A0 */ 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0xA2, 0x03, 0x1A, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0xAD, 0x1A, -/* 0001A2B0 */ 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0xAD, 0x1A, 0x72, 0x72, 0x02, 0x01, 0x05, 0x03, -/* 0001A2C0 */ 0x06, 0x05, 0x0D, 0x0D, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x05, 0x08, 0x26, 0x8C, 0x01, 0x06, -/* 0001A2D0 */ 0x06, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8C, 0x01, 0x03, 0x07, 0x5F, 0x07, 0x07, 0x00, 0x5A, -/* 0001A2E0 */ 0x01, 0x07, 0x5A, 0x02, 0x03, 0x5A, 0x03, 0x04, 0x1F, 0x04, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA6, -/* 0001A2F0 */ 0x00, 0x24, 0x00, 0xFE, 0x6B, 0x02, 0xFE, 0xC7, 0x1A, 0x02, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, -/* 0001A300 */ 0x57, 0x00, 0x00, 0x7F, 0x5D, 0x00, 0xC1, 0x03, 0x8D, 0x07, 0x00, 0x85, 0x08, 0xA2, 0x41, 0xC1, -/* 0001A310 */ 0x01, 0xFE, 0xA0, 0x03, 0x18, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0x16, 0x1A, 0x01, 0xFF, 0x00, -/* 0001A320 */ 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x16, 0x1A, 0x53, 0x53, 0x02, 0x01, 0xFE, 0xA1, 0x03, 0x07, -/* 0001A330 */ 0x02, 0x06, 0x04, 0x0F, 0x0F, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x03, 0x04, 0x05, 0x2A, 0x94, -/* 0001A340 */ 0x02, 0x02, 0x8C, 0x01, 0x37, 0x07, 0x4B, 0x07, 0x6A, 0x06, 0x07, 0x00, 0x07, 0x03, 0x00, 0x5A, -/* 0001A350 */ 0x00, 0x07, 0x90, 0x02, 0x08, 0x5A, 0x01, 0x08, 0xD3, 0x00, 0x08, 0x5A, 0x02, 0x08, 0x1F, 0x03, -/* 0001A360 */ 0x00, 0x06, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x7E, 0xFE, 0x26, 0x1A, 0x02, 0x03, 0x00, -/* 0001A370 */ 0x00, 0x00, 0x25, 0x00, 0x42, 0x00, 0x00, 0x7B, 0xA3, 0x01, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, -/* 0001A380 */ 0x88, 0x03, 0x00, 0x85, 0x2F, 0xA2, 0x41, 0xD0, 0x00, 0x19, 0xFE, 0x01, 0x10, 0xFE, 0x3D, 0x1A, -/* 0001A390 */ 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x3D, 0x1A, 0x28, 0x28, 0x01, 0x06, 0x02, 0x05, -/* 0001A3A0 */ 0x04, 0x0E, 0x0E, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x04, 0x29, 0x8C, 0x02, 0x37, 0x06, 0x4B, -/* 0001A3B0 */ 0x06, 0x6A, 0x05, 0x06, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x06, 0x8C, 0x01, 0x02, 0x07, 0x5A, -/* 0001A3C0 */ 0x01, 0x07, 0x5A, 0x02, 0x02, 0x1F, 0x03, 0x05, 0x05, 0x43, 0x00, 0x05, 0x03, 0x09, 0x02, 0x00, -/* 0001A3D0 */ 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x14, 0x03, 0xFE, 0x47, 0x1A, 0x02, 0x00, 0x00, 0x00, 0x00, 0x27, -/* 0001A3E0 */ 0x00, 0x1E, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x03, 0x00, 0x84, 0x08, 0xA2, 0x41, -/* 0001A3F0 */ 0xC1, 0x01, 0xFE, 0x9F, 0x03, 0x17, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0xA3, 0x19, 0xFF, 0x00, -/* 0001A400 */ 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0xA3, 0x19, 0x69, 0x69, 0x02, 0x01, 0x05, 0x03, 0x06, 0x05, -/* 0001A410 */ 0x0D, 0x0D, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x05, 0x08, 0x26, 0x8C, 0x01, 0x06, 0x06, 0x07, -/* 0001A420 */ 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8C, 0x01, 0x03, 0x07, 0x5F, 0x07, 0x07, 0x00, 0x5A, 0x01, 0x07, -/* 0001A430 */ 0x5A, 0x02, 0x03, 0x5A, 0x03, 0x04, 0x1F, 0x04, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, -/* 0001A440 */ 0x00, 0xFE, 0x5B, 0x02, 0xFE, 0xB9, 0x19, 0x02, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x52, 0x00, -/* 0001A450 */ 0x00, 0xFF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x23, 0x00, 0x83, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, -/* 0001A460 */ 0x9E, 0x03, 0x16, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0x2C, 0x19, 0xFF, 0x00, 0x10, 0x01, 0x00, -/* 0001A470 */ 0x02, 0x02, 0xFE, 0x2C, 0x19, 0x6D, 0x6D, 0x02, 0x81, 0x05, 0x03, 0x06, 0x05, 0x0E, 0x0E, 0x01, -/* 0001A480 */ 0x02, 0x01, 0x01, 0x01, 0x01, 0x05, 0x08, 0x30, 0x8C, 0x01, 0x06, 0x06, 0x07, 0x04, 0x00, 0x5A, -/* 0001A490 */ 0x00, 0x02, 0x8C, 0x01, 0x03, 0x07, 0x5F, 0x07, 0x07, 0x00, 0x5A, 0x01, 0x07, 0x5A, 0x02, 0x03, -/* 0001A4A0 */ 0x01, 0x4F, 0x01, 0x07, 0x04, 0x5A, 0x03, 0x07, 0x21, 0x04, 0x00, 0x06, 0x01, 0x00, 0x00, 0x00, -/* 0001A4B0 */ 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, -/* 0001A4C0 */ 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xFE, 0x5A, 0x02, 0xFE, 0x44, 0x19, 0x02, 0x00, -/* 0001A4D0 */ 0x00, 0x00, 0x00, 0x2E, 0x00, 0x54, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x03, 0x00, -/* 0001A4E0 */ 0x82, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x9D, 0x03, 0x15, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, -/* 0001A4F0 */ 0xAF, 0x18, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, 0xAF, 0x18, 0x73, 0x73, 0x02, 0x01, -/* 0001A500 */ 0x06, 0x03, 0x07, 0x06, 0x0E, 0x0E, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x06, 0x08, 0x29, 0x8C, -/* 0001A510 */ 0x01, 0x06, 0x07, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x02, 0x8C, 0x01, 0x03, 0x08, 0x5F, 0x08, 0x08, -/* 0001A520 */ 0x00, 0x5A, 0x01, 0x08, 0x5A, 0x02, 0x03, 0x5A, 0x03, 0x04, 0x5A, 0x04, 0x05, 0x1F, 0x05, 0x00, -/* 0001A530 */ 0x07, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x62, 0x02, 0xFE, 0xCA, 0x18, 0x02, 0x00, -/* 0001A540 */ 0x00, 0x00, 0x00, 0x27, 0x00, 0x57, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x03, 0x00, -/* 0001A550 */ 0x81, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x9C, 0x03, 0x14, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, -/* 0001A560 */ 0x30, 0x18, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, 0x30, 0x18, 0x75, 0x75, 0x02, 0x01, -/* 0001A570 */ 0x06, 0x03, 0x07, 0x06, 0x0E, 0x0E, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x06, 0x08, 0x29, 0x8C, -/* 0001A580 */ 0x01, 0x06, 0x07, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x02, 0x8C, 0x01, 0x03, 0x08, 0x5F, 0x08, 0x08, -/* 0001A590 */ 0x00, 0x5A, 0x01, 0x08, 0x5A, 0x02, 0x03, 0x5A, 0x03, 0x04, 0x5A, 0x04, 0x05, 0x1F, 0x05, 0x00, -/* 0001A5A0 */ 0x07, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x61, 0x02, 0xFE, 0x4C, 0x18, 0x02, 0x00, -/* 0001A5B0 */ 0x00, 0x00, 0x00, 0x27, 0x00, 0x58, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x03, 0x00, -/* 0001A5C0 */ 0x80, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x9B, 0x03, 0x13, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, -/* 0001A5D0 */ 0xC3, 0x17, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0xC3, 0x17, 0x63, 0x63, 0x02, 0x01, -/* 0001A5E0 */ 0x05, 0x03, 0x06, 0x05, 0x0D, 0x0D, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x05, 0x08, 0x26, 0x8C, -/* 0001A5F0 */ 0x01, 0x06, 0x06, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8C, 0x01, 0x03, 0x07, 0x5F, 0x07, 0x07, -/* 0001A600 */ 0x00, 0x5A, 0x01, 0x07, 0x5A, 0x02, 0x03, 0x5A, 0x03, 0x04, 0x1F, 0x04, 0x00, 0x06, 0x09, 0x02, -/* 0001A610 */ 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x5F, 0x02, 0xFE, 0xD6, 0x17, 0x02, 0x00, 0x00, 0x00, 0x00, -/* 0001A620 */ 0x24, 0x00, 0x4F, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0x01, 0x00, 0x88, 0x03, 0x00, 0x7F, 0x08, 0xA2, -/* 0001A630 */ 0x41, 0xC1, 0x01, 0xFE, 0x9A, 0x03, 0x12, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0x58, 0x17, 0xFF, -/* 0001A640 */ 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, 0x58, 0x17, 0x61, 0x61, 0x02, 0x01, 0x06, 0x03, 0x07, -/* 0001A650 */ 0x06, 0x0D, 0x0D, 0x01, 0x02, 0x06, 0x08, 0x25, 0x8C, 0x01, 0x06, 0x07, 0x07, 0x05, 0x00, 0x5A, -/* 0001A660 */ 0x00, 0x02, 0x8C, 0x01, 0x17, 0x08, 0x5A, 0x01, 0x08, 0x5A, 0x02, 0x03, 0x5A, 0x03, 0x04, 0x5A, -/* 0001A670 */ 0x04, 0x05, 0x1F, 0x05, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x78, 0x17, -/* 0001A680 */ 0x02, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x40, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0x01, 0x00, 0x88, -/* 0001A690 */ 0x03, 0x00, 0x7E, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x99, 0x03, 0x11, 0xFF, 0x00, 0x00, 0x40, -/* 0001A6A0 */ 0x02, 0xFE, 0x02, 0x17, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x02, 0x17, 0x4C, 0x4C, -/* 0001A6B0 */ 0x02, 0x01, 0x05, 0x03, 0x06, 0x05, 0x0C, 0x0C, 0x01, 0x02, 0x05, 0x08, 0x22, 0x8C, 0x01, 0x06, -/* 0001A6C0 */ 0x06, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8C, 0x01, 0x19, 0x07, 0x5A, 0x01, 0x07, 0x5A, 0x02, -/* 0001A6D0 */ 0x03, 0x5A, 0x03, 0x04, 0x1F, 0x04, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, -/* 0001A6E0 */ 0x15, 0x17, 0x02, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x38, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0x01, -/* 0001A6F0 */ 0x00, 0x88, 0x23, 0x00, 0x7D, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x98, 0x03, 0x10, 0xFF, 0x00, -/* 0001A700 */ 0x00, 0x40, 0x02, 0xFE, 0xA6, 0x16, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0xA6, 0x16, -/* 0001A710 */ 0x52, 0x52, 0x02, 0x81, 0x05, 0x03, 0x06, 0x05, 0x0D, 0x0D, 0x01, 0x02, 0x05, 0x08, 0x2C, 0x8C, -/* 0001A720 */ 0x01, 0x06, 0x06, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8C, 0x01, 0x18, 0x07, 0x5A, 0x01, 0x07, -/* 0001A730 */ 0x5A, 0x02, 0x03, 0x01, 0x4F, 0x01, 0x07, 0x04, 0x5A, 0x03, 0x07, 0x21, 0x04, 0x00, 0x06, 0x01, -/* 0001A740 */ 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x01, 0x08, 0x00, 0x00, 0x00, -/* 0001A750 */ 0x00, 0x00, 0x05, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xFE, 0xBC, 0x16, 0x02, 0x00, -/* 0001A760 */ 0x00, 0x00, 0x00, 0x2A, 0x00, 0x3B, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0x01, 0x00, 0x88, 0x03, 0x00, -/* 0001A770 */ 0x7C, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x97, 0x03, 0x0F, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, -/* 0001A780 */ 0x48, 0x16, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x48, 0x16, 0x54, 0x54, 0x02, 0x01, -/* 0001A790 */ 0x05, 0x03, 0x06, 0x05, 0x0C, 0x0C, 0x01, 0x02, 0x05, 0x08, 0x22, 0x8C, 0x01, 0x06, 0x06, 0x07, -/* 0001A7A0 */ 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8C, 0x01, 0x16, 0x07, 0x5A, 0x01, 0x07, 0x5A, 0x02, 0x03, 0x5A, -/* 0001A7B0 */ 0x03, 0x04, 0x1F, 0x04, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x5F, 0x16, -/* 0001A7C0 */ 0x02, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x3C, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0xC1, 0x03, 0x88, -/* 0001A7D0 */ 0x03, 0x00, 0x7A, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x96, 0x03, 0x0E, 0xFF, 0x00, 0x00, 0x40, -/* 0001A7E0 */ 0x02, 0xFE, 0xD5, 0x15, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0xD5, 0x15, 0x68, 0x68, -/* 0001A7F0 */ 0x02, 0x01, 0x05, 0x03, 0x06, 0x05, 0x0D, 0x0D, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x05, 0x08, -/* 0001A800 */ 0x26, 0x8C, 0x01, 0x06, 0x06, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8C, 0x01, 0x03, 0x07, 0x5F, -/* 0001A810 */ 0x07, 0x07, 0x00, 0x5A, 0x01, 0x07, 0x5A, 0x02, 0x03, 0x5A, 0x03, 0x04, 0x1F, 0x04, 0x00, 0x06, -/* 0001A820 */ 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x73, 0x02, 0xFE, 0xEA, 0x15, 0x02, 0x00, 0x00, -/* 0001A830 */ 0x00, 0x00, 0x24, 0x00, 0x52, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x03, 0x00, 0x79, -/* 0001A840 */ 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x95, 0x03, 0x0D, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0x8D, -/* 0001A850 */ 0x15, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x8D, 0x15, 0x3E, 0x3E, 0x02, 0x01, 0x05, -/* 0001A860 */ 0x02, 0x05, 0x04, 0x0B, 0x0B, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x1F, 0x8C, 0x01, 0x03, -/* 0001A870 */ 0x06, 0x6A, 0x05, 0x06, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x06, 0x5A, 0x01, 0x02, 0x5A, 0x02, -/* 0001A880 */ 0x03, 0x1F, 0x03, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x83, 0x02, 0xFE, -/* 0001A890 */ 0x9E, 0x15, 0x02, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x2C, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0xC1, -/* 0001A8A0 */ 0x03, 0x88, 0x03, 0x00, 0x78, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x94, 0x03, 0x0C, 0xFF, 0x00, -/* 0001A8B0 */ 0x00, 0x40, 0x02, 0xFE, 0x0D, 0x15, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, 0x0D, 0x15, -/* 0001A8C0 */ 0x76, 0x76, 0x02, 0x01, 0x06, 0x03, 0x07, 0x06, 0x0E, 0x0E, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, -/* 0001A8D0 */ 0x06, 0x08, 0x29, 0x8C, 0x01, 0x06, 0x07, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x02, 0x8C, 0x01, 0x03, -/* 0001A8E0 */ 0x08, 0x5F, 0x08, 0x08, 0x00, 0x5A, 0x01, 0x08, 0x5A, 0x02, 0x03, 0x5A, 0x03, 0x04, 0x5A, 0x04, -/* 0001A8F0 */ 0x05, 0x1F, 0x05, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x71, 0x02, 0xFE, -/* 0001A900 */ 0x2C, 0x15, 0x02, 0x00, 0x00, 0x00, 0x00, 0x27, 0x00, 0x56, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0xC1, -/* 0001A910 */ 0x03, 0x88, 0x03, 0x00, 0x77, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x93, 0x03, 0x0B, 0xFF, 0x00, -/* 0001A920 */ 0x00, 0x40, 0x02, 0xFE, 0x8B, 0x14, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, 0x8B, 0x14, -/* 0001A930 */ 0x78, 0x78, 0x02, 0x01, 0x06, 0x03, 0x07, 0x06, 0x0E, 0x0E, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, -/* 0001A940 */ 0x06, 0x08, 0x29, 0x8C, 0x01, 0x06, 0x07, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x02, 0x8C, 0x01, 0x03, -/* 0001A950 */ 0x08, 0x5F, 0x08, 0x08, 0x00, 0x5A, 0x01, 0x08, 0x5A, 0x02, 0x03, 0x5A, 0x03, 0x04, 0x5A, 0x04, -/* 0001A960 */ 0x05, 0x1F, 0x05, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x76, 0x02, 0xFE, -/* 0001A970 */ 0xA8, 0x14, 0x02, 0x00, 0x00, 0x00, 0x00, 0x27, 0x00, 0x5A, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0xC1, -/* 0001A980 */ 0x03, 0x88, 0x03, 0x00, 0x76, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x92, 0x03, 0x0A, 0xFF, 0x00, -/* 0001A990 */ 0x00, 0x40, 0x02, 0xFE, 0x17, 0x14, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x17, 0x14, -/* 0001A9A0 */ 0x6A, 0x6A, 0x02, 0x01, 0x05, 0x03, 0x06, 0x05, 0x0D, 0x0D, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, -/* 0001A9B0 */ 0x05, 0x08, 0x26, 0x8C, 0x01, 0x06, 0x06, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8C, 0x01, 0x03, -/* 0001A9C0 */ 0x07, 0x5F, 0x07, 0x07, 0x00, 0x5A, 0x01, 0x07, 0x5A, 0x02, 0x03, 0x5A, 0x03, 0x04, 0x1F, 0x04, -/* 0001A9D0 */ 0x00, 0x06, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x75, 0x02, 0xFE, 0x2D, 0x14, 0x02, -/* 0001A9E0 */ 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x53, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0x01, 0x00, 0x88, 0x03, -/* 0001A9F0 */ 0x00, 0x75, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x91, 0x03, 0x09, 0xFF, 0x00, 0x00, 0x40, 0x02, -/* 0001AA00 */ 0xFE, 0x9C, 0x13, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, 0x9C, 0x13, 0x71, 0x71, 0x02, -/* 0001AA10 */ 0x01, 0x06, 0x03, 0x07, 0x06, 0x0D, 0x0D, 0x01, 0x02, 0x06, 0x08, 0x25, 0x8C, 0x01, 0x06, 0x07, -/* 0001AA20 */ 0x07, 0x05, 0x00, 0x5A, 0x00, 0x02, 0x8C, 0x01, 0x1D, 0x08, 0x5A, 0x01, 0x08, 0x5A, 0x02, 0x03, -/* 0001AA30 */ 0x5A, 0x03, 0x04, 0x5A, 0x04, 0x05, 0x1F, 0x05, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, -/* 0001AA40 */ 0x00, 0xFE, 0xC1, 0x13, 0x02, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x4B, 0x00, 0x00, 0xFF, 0x5C, -/* 0001AA50 */ 0x00, 0x01, 0x00, 0x88, 0x03, 0x00, 0x74, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x90, 0x03, 0x08, -/* 0001AA60 */ 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0x45, 0x13, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, -/* 0001AA70 */ 0x45, 0x13, 0x4D, 0x4D, 0x02, 0x01, 0x04, 0x03, 0x05, 0x04, 0x0B, 0x0B, 0x01, 0x02, 0x04, 0x08, -/* 0001AA80 */ 0x1F, 0x8C, 0x01, 0x06, 0x05, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x8C, 0x01, 0x1E, 0x06, 0x5A, -/* 0001AA90 */ 0x01, 0x06, 0x5A, 0x02, 0x03, 0x1F, 0x03, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, -/* 0001AAA0 */ 0xFE, 0x58, 0x13, 0x02, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x39, 0x00, 0x00, 0xFF, 0x5C, 0x00, -/* 0001AAB0 */ 0x01, 0x00, 0x88, 0x03, 0x00, 0x73, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x8F, 0x03, 0x07, 0xFF, -/* 0001AAC0 */ 0x00, 0x00, 0x40, 0x02, 0xFE, 0xEE, 0x12, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0xEE, -/* 0001AAD0 */ 0x12, 0x4D, 0x4D, 0x02, 0x01, 0x04, 0x03, 0x05, 0x04, 0x0B, 0x0B, 0x01, 0x02, 0x04, 0x08, 0x1F, -/* 0001AAE0 */ 0x8C, 0x01, 0x06, 0x05, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x8C, 0x01, 0x1F, 0x06, 0x5A, 0x01, -/* 0001AAF0 */ 0x06, 0x5A, 0x02, 0x03, 0x1F, 0x03, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, -/* 0001AB00 */ 0x01, 0x13, 0x02, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x39, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0x01, -/* 0001AB10 */ 0x00, 0x88, 0x01, 0x00, 0x51, 0x1F, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xDA, 0x02, 0x06, 0xFE, 0x53, -/* 0001AB20 */ 0x0D, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, 0x53, 0x0D, 0x72, 0x72, 0x41, 0x06, 0x04, -/* 0001AB30 */ 0x08, 0x09, 0x10, 0x10, 0x01, 0x02, 0x07, 0x07, 0x08, 0x2F, 0x8C, 0x01, 0x14, 0x08, 0x07, 0x04, -/* 0001AB40 */ 0x00, 0x5A, 0x00, 0x03, 0x5A, 0x01, 0x04, 0x5A, 0x02, 0x05, 0x8C, 0x01, 0x04, 0x09, 0x07, 0x03, -/* 0001AB50 */ 0x00, 0x5A, 0x00, 0x03, 0x5A, 0x01, 0x06, 0x5A, 0x02, 0x02, 0x1F, 0x03, 0x09, 0x09, 0x5A, 0x03, -/* 0001AB60 */ 0x09, 0x1F, 0x04, 0xFF, 0x08, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x7E, 0x0D, 0x02, 0x00, 0x00, 0x00, -/* 0001AB70 */ 0x00, 0x2D, 0x00, 0x46, 0x00, 0x00, 0x3F, 0x5C, 0x00, 0xC1, 0x13, 0x88, 0x25, 0x00, 0x22, 0x04, -/* 0001AB80 */ 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0xD0, 0x02, 0x03, 0xFE, 0xC3, 0x06, 0x02, 0xFF, 0x00, 0x10, 0x01, -/* 0001AB90 */ 0x00, 0x02, 0x01, 0xFE, 0xC3, 0x06, 0xFE, 0x36, 0x02, 0xFE, 0x36, 0x02, 0x06, 0x09, 0x0B, 0x05, -/* 0001ABA0 */ 0x19, 0x18, 0x01, 0x02, 0x05, 0x05, 0x05, 0x05, 0x01, 0x0A, 0x08, 0x01, 0x19, 0x06, 0xFE, 0x8B, -/* 0001ABB0 */ 0x03, 0x06, 0xFE, 0x8C, 0x03, 0x06, 0xFE, 0x8D, 0x03, 0x06, 0xFE, 0x8E, 0x03, 0x07, 0x5B, 0x15, -/* 0001ABC0 */ 0x03, 0x00, 0x09, 0x02, 0x47, 0x09, 0x03, 0x8C, 0x01, 0x35, 0x0B, 0x4B, 0x0B, 0x07, 0x02, 0x00, -/* 0001ABD0 */ 0x5A, 0x00, 0x02, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, -/* 0001ABE0 */ 0x78, 0x09, 0x0C, 0x00, 0x8C, 0x01, 0x37, 0x0E, 0x4B, 0x0E, 0x6A, 0x0D, 0x0E, 0x01, 0x07, 0x01, -/* 0001ABF0 */ 0x00, 0x5A, 0x00, 0x0E, 0x1F, 0x01, 0x0D, 0x0D, 0x78, 0x0D, 0x0C, 0x02, 0xD6, 0x00, 0x0D, 0x0C, -/* 0001AC00 */ 0x78, 0x0D, 0x0C, 0x03, 0xD6, 0x01, 0x0D, 0x0C, 0x78, 0x0D, 0x0C, 0x04, 0x5A, 0x01, 0x0C, 0x1F, -/* 0001AC10 */ 0x02, 0x00, 0x0B, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x01, 0x18, 0x00, 0x00, 0x00, 0x00, -/* 0001AC20 */ 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8B, 0x03, 0x00, 0x00, 0x8C, 0x03, 0x00, -/* 0001AC30 */ 0x00, 0x84, 0x01, 0x00, 0x00, 0x87, 0x01, 0x00, 0x00, 0xFE, 0x8B, 0x03, 0x61, 0xFE, 0x8C, 0x03, -/* 0001AC40 */ 0xFE, 0x84, 0x01, 0xFE, 0x87, 0x01, 0xFE, 0xD6, 0x06, 0x03, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, -/* 0001AC50 */ 0x12, 0x00, 0x51, 0x00, 0x10, 0x02, 0x00, 0x3B, 0xAD, 0x01, 0x00, 0x5F, 0xAC, 0x01, 0x00, 0xBF, -/* 0001AC60 */ 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x03, 0x00, 0x2B, 0x0C, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x8E, 0x03, -/* 0001AC70 */ 0x05, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0xA6, 0x07, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, -/* 0001AC80 */ 0xFE, 0xA6, 0x07, 0xFE, 0x41, 0x01, 0xFE, 0x41, 0x01, 0x41, 0x07, 0x02, 0x06, 0x03, 0x24, 0x24, -/* 0001AC90 */ 0x01, 0x02, 0x07, 0x07, 0x07, 0x07, 0x05, 0x77, 0x59, 0x06, 0xB1, 0x04, 0x06, 0x8C, 0x01, 0x03, -/* 0001ACA0 */ 0x06, 0x5F, 0x06, 0x06, 0x00, 0x0F, 0x05, 0x00, 0x06, 0xA6, 0x00, 0x09, 0x5F, 0x00, 0x8C, 0x01, -/* 0001ACB0 */ 0x37, 0x07, 0x4B, 0x07, 0x6A, 0x06, 0x07, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x07, 0x5F, 0x08, -/* 0001ACC0 */ 0x04, 0x02, 0x5A, 0x01, 0x08, 0x1F, 0x02, 0x06, 0x06, 0xA4, 0x06, 0x06, 0x03, 0x5F, 0x07, 0x04, -/* 0001ACD0 */ 0x04, 0x11, 0x03, 0x00, 0x06, 0x07, 0x09, 0x2A, 0x00, 0x5F, 0x06, 0x04, 0x02, 0x95, 0x06, 0x06, -/* 0001ACE0 */ 0x02, 0xA6, 0x07, 0x14, 0x03, 0x00, 0x06, 0x07, 0x09, 0x18, 0x00, 0x8C, 0x01, 0x37, 0x07, 0x4B, -/* 0001ACF0 */ 0x07, 0x6A, 0x06, 0x07, 0x05, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x07, 0x1F, 0x01, 0x06, 0x06, 0x74, -/* 0001AD00 */ 0x06, 0x04, 0x06, 0x5F, 0x06, 0x04, 0x02, 0x9A, 0x03, 0x06, 0x02, 0xA6, 0x00, 0x24, 0x00, 0xFE, -/* 0001AD10 */ 0x61, 0x03, 0xBF, 0xFE, 0x8C, 0x03, 0xC1, 0xFE, 0x8B, 0x03, 0x61, 0xFE, 0x8C, 0x03, 0xFE, 0xC8, -/* 0001AD20 */ 0x07, 0x06, 0x05, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x2F, 0x00, 0x05, 0x00, 0x2B, 0x00, 0x3D, 0x00, -/* 0001AD30 */ 0x61, 0x00, 0x18, 0x00, 0x3D, 0x00, 0x0A, 0x00, 0x26, 0x00, 0x00, 0xBF, 0x4C, 0x00, 0xC1, 0x03, -/* 0001AD40 */ 0x88, 0x03, 0x00, 0x27, 0x0C, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x8D, 0x03, 0x04, 0xFF, 0x00, 0x00, -/* 0001AD50 */ 0x40, 0x02, 0xFE, 0x35, 0x07, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x35, 0x07, 0x62, -/* 0001AD60 */ 0x62, 0x01, 0x04, 0x02, 0x05, 0x0F, 0x0D, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x04, 0x2B, 0x59, -/* 0001AD70 */ 0x05, 0xB1, 0x03, 0x05, 0x8C, 0x01, 0x03, 0x05, 0x5F, 0x05, 0x05, 0x00, 0x0E, 0x0E, 0x00, 0x05, -/* 0001AD80 */ 0x5F, 0x05, 0x03, 0x01, 0x95, 0x05, 0x05, 0x02, 0x47, 0x00, 0x05, 0x09, 0x05, 0x00, 0xA6, 0x05, -/* 0001AD90 */ 0x47, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x61, 0x03, 0xFE, 0x8C, 0x03, -/* 0001ADA0 */ 0xFE, 0x50, 0x07, 0x02, 0x05, 0x00, 0x00, 0x00, 0x24, 0x00, 0x46, 0x00, 0x00, 0xBF, 0x5C, 0x00, -/* 0001ADB0 */ 0x01, 0x00, 0x88, 0x03, 0x00, 0x1C, 0x11, 0xA2, 0x41, 0xC0, 0x00, 0xFE, 0xF5, 0x02, 0x02, 0xFE, -/* 0001ADC0 */ 0x01, 0x10, 0xFE, 0xC2, 0x04, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x01, 0xFE, 0xC2, 0x04, 0x25, -/* 0001ADD0 */ 0x25, 0x01, 0x03, 0x04, 0x06, 0x04, 0x0D, 0x0C, 0x01, 0x01, 0x05, 0x07, 0x08, 0x25, 0x15, 0x05, -/* 0001ADE0 */ 0x00, 0x04, 0x03, 0xCA, 0x06, 0x47, 0x04, 0x06, 0x8C, 0x01, 0x04, 0x06, 0x07, 0x03, 0x00, 0x5A, -/* 0001ADF0 */ 0x00, 0x03, 0x5A, 0x01, 0x04, 0x5A, 0x02, 0x02, 0x1F, 0x03, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA6, -/* 0001AE00 */ 0x00, 0x24, 0x00, 0xFE, 0xC3, 0x04, 0x03, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x0D, 0x00, 0x19, -/* 0001AE10 */ 0x00, 0x17, 0x00, 0x00, 0x00}; - -} diff --git a/lib/Runtime/Library/InJavascript/Intl.js.nojit.bc.64b.h b/lib/Runtime/Library/InJavascript/Intl.js.nojit.bc.64b.h deleted file mode 100755 index 2f77c0ed608..00000000000 --- a/lib/Runtime/Library/InJavascript/Intl.js.nojit.bc.64b.h +++ /dev/null @@ -1,10739 +0,0 @@ -//------------------------------------------------------------------------------------------------------- -// Copyright (C) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. -//------------------------------------------------------------------------------------------------------- -#if 0 -//------------------------------------------------------------------------------------------------------- -// Copyright (C) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. -//------------------------------------------------------------------------------------------------------- - -"use strict"; -// Core intl lib -(function (EngineInterface, InitType) { - var platform = EngineInterface.Intl; - - // allow unit tests to disable caching behavior for testing convenience but have this always `true` in real scenarios - platform.useCaches = true; - - // determine what backing library we are using - // making these vars in JS allows us to more change how we - // determine the backing library - const isPlatformUsingICU = !platform.winglob; - const isPlatformUsingWinGlob = platform.winglob; - - // constants - const NOT_FOUND = "NOT_FOUND"; - - // Built-Ins - var setPrototype = platform.builtInSetPrototype; - var getArrayLength = platform.builtInGetArrayLength; - var callInstanceFunc = platform.builtInCallInstanceFunction; - - // Helper for our extensive usage of null-prototyped objects - const bare = (obj = {}) => setPrototype(obj, null); - - // REVIEW(jahorto): IntlCache replaces past use of raw objects and JS Maps to cache arbitrary data for a given locale - // We use a raw object rather than a Map because we don't need any features specific to Maps - // If the cache gets too big (arbitrarily, > 25 keys is "too big" by default), we delete the entire internal object and start from scratch - // TODO(jahorto): Experiment with the performance benefit of using an LRU or random-delete cache here. - function IntlCache(n = 25) { - return bare({ - n: n, - _cache: _.create(), - - get(key) { - return platform.useCaches ? this._cache[key] : undefined; - }, - - set(key, value) { - if (!platform.useCaches) { - return; - } - - if (_.keys(this._cache).length > this.n && this._cache[key] === undefined) { - this._cache = _.create(); - } - - this._cache[key] = value; - } - }); - } - - var Boolean = platform.Boolean; - var Object = platform.Object; - var RegExp = platform.RegExp; - var Number = platform.Number; - var String = platform.String; - var Date = platform.Date; - var Error = platform.Error; - - var RaiseAssert = platform.raiseAssert; - - var Math = setPrototype({ - abs: platform.builtInMathAbs, - floor: platform.builtInMathFloor, - max: platform.builtInMathMax, - pow: platform.builtInMathPow - }, null); - - var ObjectGetPrototypeOf = platform.builtInJavascriptObjectEntryGetPrototypeOf; - var ObjectIsExtensible = platform.builtInJavascriptObjectEntryIsExtensible; - var ObjectGetOwnPropertyNames = platform.builtInJavascriptObjectEntryGetOwnPropertyNames; - var ObjectInstanceHasOwnProperty = platform.builtInJavascriptObjectEntryHasOwnProperty; - // Because we don't keep track of the attributes object, and neither does the internals of Object.defineProperty; - // We don't need to restore it's prototype. - var _objectDefineProperty = platform.builtInJavascriptObjectEntryDefineProperty; - var ObjectDefineProperty = function (obj, prop, attributes) { - _objectDefineProperty(obj, prop, setPrototype(attributes, null)); - }; - - var ArrayInstanceForEach = platform.builtInJavascriptArrayEntryForEach; - var ArrayInstanceIndexOf = platform.builtInJavascriptArrayEntryIndexOf; - var ArrayInstancePush = platform.builtInJavascriptArrayEntryPush; - var ArrayInstanceJoin = platform.builtInJavascriptArrayEntryJoin; - - var FunctionInstanceBind = platform.builtInJavascriptFunctionEntryBind; - var DateInstanceGetDate = platform.builtInJavascriptDateEntryGetDate; - var DateNow = platform.builtInJavascriptDateEntryNow; - - var StringInstanceReplace = platform.builtInJavascriptStringEntryReplace; - var StringInstanceToLowerCase = platform.builtInJavascriptStringEntryToLowerCase; - var StringInstanceToUpperCase = platform.builtInJavascriptStringEntryToUpperCase; - - var ObjectPrototype = platform.Object_prototype; - - var isFinite = platform.builtInGlobalObjectEntryIsFinite; - var isNaN = platform.builtInGlobalObjectEntryIsNaN; - - // Keep this "enum" in sync with IntlEngineInterfaceExtensionObject::EntryIntl_RegisterBuiltInFunction - const IntlBuiltInFunctionID = setPrototype({ - MIN: 0, - DateToLocaleString: 0, - DateToLocaleDateString: 1, - DateToLocaleTimeString: 2, - NumberToLocaleString: 3, - StringLocaleCompare: 4, - MAX: 5 - }, null); - - const _ = { - toUpperCase(str) { return callInstanceFunc(StringInstanceToUpperCase, str); }, - toLowerCase(str) { return callInstanceFunc(StringInstanceToLowerCase, str); }, - replace(str, pattern, replacement) { return callInstanceFunc(StringInstanceReplace, str, pattern, replacement); }, - split(str, pattern) { return callInstanceFunc(platform.builtInJavascriptStringEntrySplit, str, pattern); }, - substring(str, start, end) { return callInstanceFunc(platform.builtInJavascriptStringEntrySubstring, str, start, end); }, - stringIndexOf(str, el, from) { return callInstanceFunc(platform.builtInJavascriptStringEntryIndexOf, str, el, from); }, - match(str, re) { return platform.builtInRegexMatch(str, re); }, - repeat(str, count) { return callInstanceFunc(platform.builtInJavascriptStringEntryRepeat, str, count); }, - - forEach(array, func) { return callInstanceFunc(ArrayInstanceForEach, array, func); }, - push(array, ...els) { return callInstanceFunc(ArrayInstancePush, array, ...els); }, - join(array, sep) { return callInstanceFunc(ArrayInstanceJoin, array, sep); }, - arrayIndexOf(array, el, from) { return callInstanceFunc(ArrayInstanceIndexOf, array, el, from); }, - map(array, func) { return callInstanceFunc(platform.builtInJavascriptArrayEntryMap, array, func); }, - reduce(array, func, init) { return callInstanceFunc(platform.builtInJavascriptArrayEntryReduce, array, func, init); }, - slice(array, start, end) { return callInstanceFunc(platform.builtInJavascriptArrayEntrySlice, array, start, end); }, - concat(array, ...els) { return callInstanceFunc(platform.builtInJavascriptArrayEntryConcat, array, ...els); }, - filter(array, func) { return callInstanceFunc(platform.builtInJavascriptArrayEntryFilter, array, func); }, - unique(array) { return _.filter(array, (v, i) => _.arrayIndexOf(array, v) === i); }, - - keys: platform.builtInJavascriptObjectEntryKeys, - hasOwnProperty(o, prop) { return callInstanceFunc(platform.builtInJavascriptObjectEntryHasOwnProperty, o, prop); }, - // If we don't set the descriptor's prototype to null, defining properties with `value`s can fail of Object.prototype.get is defined - defineProperty(o, prop, desc) { - _.setPrototypeOf(desc, null); - platform.builtInJavascriptObjectEntryDefineProperty(o, prop, desc); - }, - isExtensible: platform.builtInJavascriptObjectEntryIsExtensible, - create(proto = null) { return platform.builtInJavascriptObjectCreate(proto); }, - setPrototypeOf(target, proto = null) { return platform.builtInSetPrototype(target, proto); }, - - abs: platform.builtInMathAbs, - // Make _.floor more like ECMA262 #sec-mathematical-operations' floor by normalizing -0 - floor(x) { return x === 0 ? 0 : platform.builtInMathFloor(x) }, - max: platform.builtInMathMax, - pow: platform.builtInMathPow, - - isFinite: platform.builtInGlobalObjectEntryIsFinite, - isNaN: platform.builtInGlobalObjectEntryIsNaN, - - getDate(date) { return callInstanceFunc(platform.builtInJavascriptDateEntryGetDate, date); }, - - bind(func, that) { return callInstanceFunc(platform.builtInJavascriptFunctionEntryBind, func, that); }, - apply(func, that, args) { return callInstanceFunc(platform.builtInJavascriptFunctionEntryApply, func, that, args); }, - }; - - const raise = { - rangeError() { return arguments.length === 3 ? platform.raiseOptionValueOutOfRange_3(...arguments) : platform.raiseOptionValueOutOfRange(); }, - assert(test, err) { return test ? undefined : platform.raiseAssert(err || new Error("Assert failed")); } - }; - - // Keep these "enums" in sync with lib/Runtime/PlatformAgnostic/Intl.h - const CollatorSensitivity = bare({ - base: 0, - accent: 1, - case: 2, - variant: 3, - DEFAULT: 3 - }); - const CollatorCaseFirst = bare({ - upper: 0, - lower: 1, - false: 2, - DEFAULT: 2 - }); - const NumberFormatStyle = bare({ - DEFAULT: 0, // "decimal" is the default - DECIMAL: 0, // Intl.NumberFormat(locale, { style: "decimal" }); // aka in our code as "number" - PERCENT: 1, // Intl.NumberFormat(locale, { style: "percent" }); - CURRENCY: 2, // Intl.NumberFormat(locale, { style: "currency", ... }); - }); - const NumberFormatCurrencyDisplay = bare({ - DEFAULT: 0, // "symbol" is the default - SYMBOL: 0, // Intl.NumberFormat(locale, { style: "currency", currencyDisplay: "symbol" }); // e.g. "$" or "US$" depeding on locale - CODE: 1, // Intl.NumberFormat(locale, { style: "currency", currencyDisplay: "code" }); // e.g. "USD" - NAME: 2, // Intl.NumberFormat(locale, { style: "currency", currencyDisplay: "name" }); // e.g. "US dollar" - }); - - const toEnum = function (enumObject, key) { - if (!key || typeof key !== "string") { - return enumObject.DEFAULT; - } else { - return enumObject[key]; - } - } - - // When this file was originally written, it assumed Windows Globalization semantics. - // Throughout the transition to ICU, we tried to share as much code as possible between WinGlob and ICU. - // However, because ICU has different semantics and our ICU-based implementation tries to match a newer - // version of the Intl spec, we have decided that the code sharing was causing more harm than good. - // Thus, while we support both ICU and WinGlob, we have decided to duplicate a substantial amount of code. - // The indentation of the below if block is intentionally incorrect so as to minimize diff. - if (isPlatformUsingICU) { - - let __defaultLocale = undefined; - const GetDefaultLocale = function () { - if (__defaultLocale && platform.useCaches) { - return __defaultLocale; - } - - const locale = platform.getDefaultLocale(); - if (!locale) { - // if the system locale is undefined/null/empty string, we have to - // do something or else we will crash - __defaultLocale = "en"; - } else { - __defaultLocale = locale; - } - - return __defaultLocale; - }; - - // A helper function that is meant to rethrow SOE and OOM exceptions allowing them to propagate. - var throwExIfOOMOrSOE = function (ex) { - if (ex.number === -2146828260 || ex.number === -2146828281) { - throw ex; - } - }; - - var tagPublicFunction = function (name, f) { - return platform.tagPublicLibraryCode(f, name); - }; - - /** - * Determines the best possible locale available in the system - * - * ECMA-402: #sec-bestavailablelocale - * - * @param {Function} isAvailableLocale A function that takes a locale and returns if the locale is supported - * @param {String} locale the locale (including its fallbacks) that will be searched for - * @returns {String} the given locale or one of its fallbacks, or undefined - */ - const BestAvailableLocale = function (isAvailableLocale, locale) { - if (locale === undefined) { - return undefined; - } - - let candidate = locale; - const hyphen = "-"; - while (true) { - if (isAvailableLocale(candidate)) { - return candidate; - } - - let pos = -1; - for (let i = candidate.length - 1; i >= 0; i--) { - if (candidate[i] === hyphen) { - pos = i; - break; - } - } - - if (pos === -1) { - return undefined; - } else if (pos >= 2 && candidate[pos - 2] === hyphen) { - // This is spec code likely intended to skip over singletons, - // such that if we just searched for "en-a-value", - // pos would initially truncate the candidate to "en-a", which - // is not a valid language tag. - // See https://tools.ietf.org/html/rfc5646#section-4.4.2 - pos -= 2; - } - - candidate = _.substring(candidate, 0, pos); - } - }; - - /** - * Returns an array of acceptable values for a given key in a given locale. It is expected that - * locale is one that has already been validated by platform.is*LocaleAvailable and key is limited - * to the [[RelevantExtensionKeys]] of Collator, NumberFormat, and DateTimeFormat. - * - * ECMA402: #sec-internal-slots ([[SortLocaleData]], [[SearchLocaleData]], and [[LocaleData]]) - * - * @param {String} key a unicode extension key like "co", "ca", etc - * @param {String} locale the locale for which to get the given key's data - * @returns {String[]} - */ - const getKeyLocaleData = function (key, locale) { - // NOTE: keep this enum in sync with `enum class LocaleDataKind` in IntlEngineInterfaceExtensionObject.cpp - const LocaleDataKind = { - co: 0, - kf: 1, - kn: 2, - ca: 3, - nu: 4, - hc: 5, - }; - - const keyLocaleData = platform.getLocaleData(LocaleDataKind[key], locale); - - return keyLocaleData; - }; - - /** - * Determines which locale (or fallback) to use of an array of locales. - * - * ECMA-402: #sec-lookupmatcher - * - * @param {Function} isAvailableLocale A function that takes a locale and returns if the locale is supported - * @param {String[]} requestedLocales An array of requested locales - */ - const LookupMatcher = function (isAvailableLocale, requestedLocales) { - const result = _.create(); - for (let i = 0; i < requestedLocales.length; ++i) { - const parsedLangtag = parseLangtag(requestedLocales[i]); - if (parsedLangtag === null) { - continue; - } - - const availableLocale = BestAvailableLocale(isAvailableLocale, parsedLangtag.base); - if (availableLocale !== undefined) { - result.locale = availableLocale; - if (requestedLocales[i] !== parsedLangtag.base) { - result.extension = parsedLangtag.unicodeExtension; - } - - return result; - } - } - - result.locale = GetDefaultLocale(); - return result; - }; - - const BestFitMatcher = LookupMatcher; - - /** - * Determine a value for a given key in the given extension string - * - * ECMA-402: #sec-unicodeextensionvalue - * - * @param {String} extension the full unicode extension, such as "-u-co-phonebk-kf-true" - * @param {String} key the specific key we are looking for in the extension, such as "co" - */ - const UnicodeExtensionValue = function (extension, key) { - raise.assert(key.length === 2); - const size = extension.length; - - // search for the key-value pair - let pos = _.stringIndexOf(extension, `-${key}-`); - if (pos !== -1) { - const start = pos + 4; - let end = start; - let k = start; - let done = false; - while (!done) { - const e = _.stringIndexOf(extension, "-", k); - const len = e === -1 ? size - k : e - k; - if (len === 2) { - done = true; - } else if (e === -1) { - end = size; - done = true; - } else { - end = e; - k = e + 1; - } - } - - return _.substring(extension, start, end); - } - - // search for the key with no associated value - pos = _.stringIndexOf(extension, `-${key}`); - if (pos !== -1 && pos + 3 === size) { - return ""; - } else { - return undefined; - } - }; - - /** - * Resolves a locale by finding which base locale or fallback is available on the system, - * then determines which provided unicode options are available for that locale. - * - * ECMA-402: #sec-resolvelocale - * - * @param {Function} isAvailableLocale A function that takes a locale and returns if the locale is supported - * @param {String[]} requestedLocales The result of calling CanonicalizeLocaleList on the user-requested locale array - * @param {Object} options An object containing a lookupMatcher value and any value given by the user's option object, - * mapped to the correct unicode extension key - * @param {String[]} relevantExtensionKeys An array of unicode extension keys that we care about for the current lookup - */ - const ResolveLocale = function (isAvailableLocale, requestedLocales, options, relevantExtensionKeys) { - const matcher = options.lookupMatcher; - let r; - if (matcher === "lookup") { - r = LookupMatcher(isAvailableLocale, requestedLocales); - } else { - r = BestFitMatcher(isAvailableLocale, requestedLocales); - } - - let foundLocale = r.locale; - const result = bare({ dataLocale: foundLocale }); - let supportedExtension = "-u"; - _.forEach(relevantExtensionKeys, function (key) { - const keyLocaleData = getKeyLocaleData(key, foundLocale); - let value = keyLocaleData[0]; - let supportedExtensionAddition = ""; - if (r.extension) { - const requestedValue = UnicodeExtensionValue(r.extension, key); - if (requestedValue !== undefined) { - if (requestedValue !== "") { - if (_.arrayIndexOf(keyLocaleData, requestedValue) !== -1) { - value = requestedValue; - supportedExtensionAddition = `-${key}-${value}`; - } - } else if (_.arrayIndexOf(keyLocaleData, "true") !== -1) { - value = "true"; - } - } - } - - if (_.hasOwnProperty(options, key)) { - const optionsValue = options[key]; - if (_.arrayIndexOf(keyLocaleData, optionsValue) !== -1) { - if (optionsValue !== value) { - value = optionsValue; - supportedExtensionAddition = ""; - } - } - } - - result[key] = value; - supportedExtension += supportedExtensionAddition; - }); - - if (supportedExtension.length > 2) { - const privateIndex = _.stringIndexOf(foundLocale, "-x-"); - if (privateIndex === -1) { - foundLocale += supportedExtension; - } else { - const preExtension = _.substring(foundLocale, 0, privateIndex); - const postExtension = _.substring(foundLocale, privateIndex); - foundLocale = preExtension + supportedExtension + postExtension; - } - - foundLocale = platform.normalizeLanguageTag(foundLocale); - } - - result.locale = foundLocale; - return result; - }; - - var Internal = bare({ - ToObject(o) { - if (o === null) { - platform.raiseNeedObject(); - } - return o !== undefined ? Object(o) : undefined; - }, - - ToString(s) { - return s !== undefined ? String(s) : undefined; - }, - - ToNumber(n) { - return n !== undefined ? Number(n) : NaN; - }, - - ToLogicalBoolean(v) { - return v !== undefined ? Boolean(v) : undefined; - }, - - ToUint32(n) { - var num = Number(n), - ret = 0; - if (!isNaN(num) && isFinite(num)) { - ret = _.abs(num % _.pow(2, 32)); - } - return ret; - } - }); - - // Internal ops implemented in JS: - function GetOption(options, property, type, values, fallback) { - let value = options[property]; - - if (value !== undefined) { - if (type == "boolean") { - value = Internal.ToLogicalBoolean(value); - } - - if (type == "string") { - value = Internal.ToString(value); - } - - if (type == "number") { - value = Internal.ToNumber(value); - } - - if (values !== undefined && _.arrayIndexOf(values, value) == -1) { - platform.raiseOptionValueOutOfRange_3(String(value), String(property), `['${_.join(values, "', '")}']`); - } - - return value; - } - - return fallback; - } - - /** - * Extracts the value of the property named property from the provided options object, - * converts it to a Number value, checks whether it is in the allowed range, - * and fills in a fallback value if necessary. - * - * NOTE: this has known differences compared to the spec GetNumberOption in order to - * support more verbose errors. It is more similar to DefaultNumberOption - * - * ECMA402: #sec-defaultnumberoption - * - * @param {Object} options user-provided options object - * @param {String} property the property we are trying to get off of `options` - * @param {Number} minimum minimum allowable value for options[property] - * @param {Number} maximum maximum allowable value for options[property] - * @param {Number} fallback return value if options[property] is undefined or invalid - * @returns {Number} - */ - const GetNumberOption = function (options, property, minimum, maximum, fallback) { - let value = options[property]; - if (value !== undefined) { - value = Internal.ToNumber(value); - if (_.isNaN(value) || value < minimum || value > maximum) { - platform.raiseOptionValueOutOfRange_3(String(value), property, `[${minimum} - ${maximum}]`); - } - return _.floor(value); - } - - return fallback; - }; - - let CURRENCY_CODE_RE; - function InitializeCurrencyRegExp() { - CURRENCY_CODE_RE = /^[A-Z]{3}$/i; - } - - /** - * Returns an object representing the language, script, region, extension, and base of a language tag, - * or null if the language tag isn't valid. - * - * @param {String} langtag a candidate BCP47 langtag - */ - const parseLangtag = (function () { - // Language Tag Syntax as described in RFC 5646 #section-2.1 - // Note: All language tags are comprised only of ASCII characters (makes our job easy here) - // Note: Language tags in canonical form have case conventions, but language tags are case-insensitive for our purposes - - // Note: The ABNF syntax used in RFC 5646 #section-2.1 uses the following numeric quantifier conventions: - // - (Parentheses) are used for grouping - // - PRODUCTION => exactly 1 of PRODUCTION /PRODUCTION/ - // - [PRODUCTION] => 0 or 1 of PRODUCTION /(PRODUCTION)?/ - // - #PRODUCTION => exactly # of PRODUCTION /(PRODUCTION){#}/ - // - a*bPRODUCTION (where a and b are optional) - // - *PRODUCTION => any number of PRODUCTION /(PRODUCTION)*/ - // - 1*PRODUCTION => 1 or more of PRODUCTION /(PRODUCTION)+/ - // - #*PRODUCTION => # or more of PRODUCTION /(PRODUCTION){#,}/ - // - *#PRODUCTION => 0 to # (inclusive) of PRODUCTION /(PRODUCTION){,#}/ or /(PRODUCTION){0,#}/ - // - a*bPRODUCTION => a to b (inclusive) of PRODUCTION /(PRODUCTION){a,b}/ - - const ALPHA = "[A-Z]"; - const DIGIT = "[0-9]"; - const alphanum = `(?:${ALPHA}|${DIGIT})`; - - const regular = "\\b(?:art-lojban|cel-gaulish|no-bok|no-nyn|zh-guoyu|zh-hakka|zh-min|zh-min-nan|zh-xiang)\\b"; - const irregular = "\\b(?:en-GB-oed|i-ami|i-bnn|i-default|i-enochian|i-hak|i-klingon|i-lux|i-mingo" + - "|i-navajo|i-pwn|i-tao|i-tay|i-tsu|sgn-BE-FR|sgn-BE-NL|sgn-CH-DE)\\b"; - const grandfathered = `\\b(?:${regular}|${irregular})\\b`; - - const privateuse = `\\b(?:x(?:-${alphanum}{1,8}\\b)+)\\b`; // privateuse = "x" 1*("-" (1*8alphanum)) - const singleton = `\\b(?:${DIGIT}|[A-WY-Z])\\b`; // singleton ~= alphanum except for 'x' ; (paraphrased) - const extension = `\\b(?:${singleton}(?:-${alphanum}{2,8})+)\\b`; // extension = singleton 1*("-" (2*8alphanum)) - const variant = `\\b(?:${alphanum}{5,8}|${DIGIT}${alphanum}{3})\\b`; // variant = 5*8alphanum / (DIGIT 3alphanum) - const region = `\\b(?:${ALPHA}{2}|${DIGIT}{3})\\b`; // region = 2ALPHA / 3DIGIT - - const script = `\\b(?:${ALPHA}{4})\\b`; // script = 4ALPHA - const extlang = `\\b(?:${ALPHA}{3}\\b(?:-${ALPHA}{3}){0,2})\\b`; // extlang = 3ALPHA *2("-" 3ALPHA) - - const language = '\\b(?:' + // language = - `${ALPHA}{2,3}` + // 2*3ALPHA ; shortest ISO 639 code - `\\b(?:-${extlang})?` + // ["-" extlang] ; sometimes followed by extended language subtags - // `|${ALPHA}{4}` + // / 4ALPHA ; or reserved for future use - // `|${ALPHA}{5,8}` + // / 5*8ALPHA ; or registered language subtag - `|${ALPHA}{4,8}` + // ~/ 4*8ALPHA ; (paraphrased: combined previous two lines) - ')\\b'; - - // Use matching groups only when needed - const LANG_TAG_BASE = `\\b(${language})\\b` + // langtag = language - `\\b(?:-(${script}))?\\b` + // ["-" script] - `\\b(?:-(${region}))?\\b` ; // ["-" region] - const LANG_TAG_EXT = `\\b((?:-${variant})*)\\b` + // *("-" variant) - `\\b((?:-${extension})*)\\b` + // *("-" extension) - `\\b(?:-${privateuse})?\\b` ; // ["-" privateuse] - const langtag = `\\b${LANG_TAG_BASE}\\b${LANG_TAG_EXT}\\b`; - - const LANG_TAG = `\\b(?:${langtag}|${privateuse}|${grandfathered})\\b`; // Language-Tag = ... - - // Use ^ and $ to enforce that the entire input string is a langtag - const LANG_TAG_BASE_RE = new RegExp(`^${LANG_TAG_BASE}$`, 'i'); // [1] language; [2] script; [3] region; - const LANG_TAG_EXT_RE = new RegExp(`^${LANG_TAG_EXT}$`, 'i'); // [1] variants; [2] extensions; - const LANG_TAG_RE = new RegExp(`^${LANG_TAG}$`, 'i'); // [1] language; [2] script; [3] region; [4] variants; [5] extensions; - - const parsedLangtagCache = new IntlCache(); - return function (langtag) { - const cached = parsedLangtagCache.get(langtag); - if (cached) { - return cached; - } - - const parts = _.match(langtag, LANG_TAG_RE); - if (!parts) { - return null; - } - - const ret = _.create(); - ret.language = parts[1]; - ret.base = parts[1]; - if (parts[2]) { - ret.script = parts[2]; - ret.base += "-" + parts[2]; - } - - if (parts[3]) { - ret.region = parts[3]; - ret.base += "-" + parts[3]; - } - - if (parts[4]) { - ret.variants = parts[4]; - } - - if (parts[5]) { - ret.extensions = parts[5]; - - // parse the extension to find the unicode (-u) extension - const extensionParts = _.split(parts[5], "-"); - for (let i = 0; i < extensionParts.length; ++i) { - if (extensionParts[i] !== "u") { - continue; - } - - let k; - for (k = i + 1; k < extensionParts.length && extensionParts[k].length > 1; k++) { - // do nothing, we just want k to equal the index of the next element whose length is 1 - // or to equal the length of extensionParts - // We could have done this with Array.prototype.findIndex too - } - - if (k > i + 1) { - // this creates u-(keys and values)*, which is good enough for the UnicodeExtensionValue, - // which is the only place that this return value is intended to be used - ret.unicodeExtension = _.join(_.slice(extensionParts, i, k), "-"); - } - - // if we have gotten this far, we have found -u-{values}, so we can break - break; - } - } - - parsedLangtagCache.set(langtag, ret); - - return ret; - }; - })(); - - const IsWellFormedCurrencyCode = function (code) { - code = Internal.ToString(code); - - if (!CURRENCY_CODE_RE) { - InitializeCurrencyRegExp(); - } - - return platform.builtInRegexMatch(code, CURRENCY_CODE_RE) !== null; - } - - /** - * Returns true if locale can be generated by RFC5646 section 2.1 and does not contain - * duplicate variant or singleton subtags. - * - * Note that ICU does not implement this correctly for our usage because it is - * extremely permissive about what it will allow -- completely invalid language tags can - * pass through a round of uloc_forLanguageTag/uloc_toLanguageTag or uloc_canonicalize - * even if they are completely bogus. - * - * ECMA402: #sec-isstructurallyvalidlanguagetag - * - * @param {String} locale The locale to check - * @returns {Boolean} - */ - const IsStructurallyValidLanguageTag = function (locale) { - const parsed = parseLangtag(locale); - if (parsed === null) { - return false; - } - - // check duplicate variants - if (parsed.variants) { - const variants = _.split(parsed.variants, "-"); - const uniqueVariants = _.unique(variants); - - if (variants.length !== uniqueVariants.length) { - return false; - } - } - - if (parsed.extensions) { - const extensionParts = _.split(parsed.extensions, "-"); - const singletons = _.map(_.filter(extensionParts, (element) => element.length === 1), (element) => _.toLowerCase(element)); - const uniqueSingletons = _.unique(singletons); - - return singletons.length === uniqueSingletons.length; - } - - return true; - }; - - /** - * Given a locale or list of locales, returns a corresponding list where each locale - * is guaranteed to be "canonical" (proper capitalization, order, etc.). - * - * ECMA402: #sec-canonicalizelocalelist - * - * @param {String|String[]} locales the user-provided locales to be canonicalized - */ - const CanonicalizeLocaleList = function (locales) { - if (typeof locales === "undefined") { - return []; - } - - const seen = []; - const O = typeof locales === "string" ? [locales] : Internal.ToObject(locales); - const len = Internal.ToUint32(O.length); - let k = 0; - - while (k < len) { - const Pk = Internal.ToString(k); - if (Pk in O) { - const kValue = O[Pk]; - if ((typeof kValue !== "string" && typeof kValue !== "object") || kValue === null) { - platform.raiseNeedObjectOrString("locale"); - } - - const tag = Internal.ToString(kValue); - if (!IsStructurallyValidLanguageTag(tag)) { - platform.raiseLocaleNotWellFormed(tag); - } - - const canonicalizedTag = platform.normalizeLanguageTag(tag); - if (canonicalizedTag === undefined) { - // See comment in platform.normalizeLanguageTag about when this happens - platform.raiseLocaleNotWellFormed(tag); - } else if (_.arrayIndexOf(seen, canonicalizedTag) === -1) { - _.push(seen, canonicalizedTag); - } - } - - k += 1; - } - - return seen; - }; - - /** - * Returns the subset of requestedLocales that has a matching locale according to BestAvailableLocale. - * - * ECMA402: #sec-lookupsupportedlocales - * - * @param {Function} isAvailableLocale A function that takes a locale and returns if the locale is supported - * @param {String|String[]} requestedLocales - */ - const LookupSupportedLocales = function (isAvailableLocale, requestedLocales) { - const subset = []; - _.forEach(requestedLocales, function (locale) { - const noExtensionsLocale = parseLangtag(locale).base; - if (BestAvailableLocale(isAvailableLocale, noExtensionsLocale) !== undefined) { - _.push(subset, locale); - } - }); - - return subset; - }; - - const BestFitSupportedLocales = LookupSupportedLocales; - - /** - * Applies digit options used for number formatting onto the given intlObj - * - * This function is used by both NumberFormat and PluralRules, despite being defined - * as a NumberFormat abstract operation - * - * ECMA 402: #sec-setnfdigitoptions - * - * @param {Object} intlObj The state object of either a NumberFormat or PluralRules on which to set the resolved number options - * @param {Object} options The option object to pull min/max sigfigs, fraction digits, and integer digits - * @param {Number} mnfdDefault The default minimumFractionDigits - * @param {Number} mxfdDefault The default maximumFractionDigits - */ - const SetNumberFormatDigitOptions = function (intlObj, options, mnfdDefault, mxfdDefault) { - const mnid = GetNumberOption(options, "minimumIntegerDigits", 1, 21, 1); - const mnfd = GetNumberOption(options, "minimumFractionDigits", 0, 20, mnfdDefault); - const mxfdActualDefault = _.max(mnfd, mxfdDefault); - const mxfd = GetNumberOption(options, "maximumFractionDigits", mnfd, 20, mxfdActualDefault); - intlObj.minimumIntegerDigits = mnid; - intlObj.minimumFractionDigits = mnfd; - intlObj.maximumFractionDigits = mxfd; - - let mnsd = options.minimumSignificantDigits; - let mxsd = options.maximumSignificantDigits; - if (mnsd !== undefined || mxsd !== undefined) { - // don't read options.minimumSignificantDigits below in order to pass - // test262/test/intl402/NumberFormat/significant-digits-options-get-sequence.js - mnsd = GetNumberOption({ minimumSignificantDigits: mnsd }, "minimumSignificantDigits", 1, 21, 1); - mxsd = GetNumberOption({ maximumSignificantDigits: mxsd }, "maximumSignificantDigits", mnsd, 21, 21); - intlObj.minimumSignificantDigits = mnsd; - intlObj.maximumSignificantDigits = mxsd; - } - }; - - /** - * Returns the subset of requestedLocales that has a matching locale, according to - * options.localeMatcher and isAvailableLocale. - * - * ECMA402: #sec-supportedlocales - * - * @param {Function} isAvailableLocale A function that takes a locale and returns if the locale is supported - * @param {String|String[]} requestedLocales - * @param {Object} options - */ - const SupportedLocales = function (isAvailableLocale, requestedLocales, options) { - const matcher = options === undefined - ? "best fit" - : GetOption(Internal.ToObject(options), "localeMatcher", "string", ["best fit", "lookup"], "best fit"); - const supportedLocales = matcher === "best fit" - ? BestFitSupportedLocales(isAvailableLocale, requestedLocales) - : LookupSupportedLocales(isAvailableLocale, requestedLocales); - - for (let i = 0; i < supportedLocales.length; i++) { - _.defineProperty(supportedLocales, Internal.ToString(i), { configurable: false, writable: false }); - } - - // test262 supportedLocalesOf-returned-array-elements-are-frozen.js: - // Property length of object returned by SupportedLocales should not be writable - _.defineProperty(supportedLocales, "length", { - writable: false, - configurable: false, - enumerable: false, - }); - - return supportedLocales; - }; - - // the following two functions exist solely to prevent calling new Intl.{getCanonicalLocales|*.supportedLocalesOf} - // both should be bound to `intlStaticMethodThisArg` which has a hiddenObject with isValid = "Valid" - const intlStaticMethodThisArg = _.create(); - platform.setHiddenObject(intlStaticMethodThisArg, { isValid: "Valid" }); - const supportedLocalesOf_unconstructable = function (that, functionName, isAvailableLocale, requestedLocales, options) { - if (that === null || that === undefined) { - platform.raiseNotAConstructor(functionName); - } - - const hiddenObj = platform.getHiddenObject(that); - if (!hiddenObj || hiddenObj.isValid !== "Valid") { - platform.raiseNotAConstructor(functionName); - } - - return SupportedLocales(isAvailableLocale, CanonicalizeLocaleList(requestedLocales), options); - } - - const getCanonicalLocales_unconstructable = function (that, functionName, locales) { - if (that === null || that === undefined) { - platform.raiseNotAConstructor(functionName); - } - - const hiddenObj = platform.getHiddenObject(that); - if (!hiddenObj || hiddenObj.isValid !== "Valid") { - platform.raiseNotAConstructor(functionName); - } - - return CanonicalizeLocaleList(locales); - } - - // We go through a bit of a circus here to create and bind the getCanonicalLocales function for two reasons: - // 1. We want its name to be "getCanonicalLocales" - // 2. We want to make sure it isnt callable as `new {Intl.}getCanonicalLocales()` - // To accomplish (2), since we cant check CallFlags_New in JS Builtins, the next best thing is to bind the function to a known - // `this` and ensure that that is properly `this` on call (if not, we were called with `new` and should bail). - // However, this makes (1) more difficult, since binding a function changes its name - // When https://github.com/Microsoft/ChakraCore/issues/637 is fixed and we have a way - // to make built-in functions non-constructible, we can (and should) rethink this strategy - // TODO(jahorto): explore making these arrow functions, as suggested in #637, to get non-constructable "for free" - if (InitType === "Intl") { - const getCanonicalLocales_name = "Intl.getCanonicalLocales"; - const getCanonicalLocales_func = tagPublicFunction(getCanonicalLocales_name, function (locales) { - return getCanonicalLocales_unconstructable(this, getCanonicalLocales_name, locales); - }); - const getCanonicalLocales = _.bind(getCanonicalLocales_func, intlStaticMethodThisArg); - _.defineProperty(getCanonicalLocales, 'name', { - value: 'getCanonicalLocales', - writable: false, - enumerable: false, - configurable: true, - }); - _.defineProperty(Intl, "getCanonicalLocales", { - value: getCanonicalLocales, - writable: true, - enumerable: false, - configurable: true - }); - } - - /** - * Creates an object to be returned out of resolvedOptions() methods that avoids being tainted by Object.prototype - * - * @param {String[]} props The list of properties to extract from hiddenObject and add to the final resolved options - * @param {Object} hiddenObject The hiddenObject of the calling constructor that contains values for each prop in props - * @param {Function} func An optional custom function(prop, resolved) run for each prop; it should return true when - * it handles a property itself. If it does not return true, the default logic will be used. - */ - const createResolvedOptions = function (props, hiddenObject, func = null) { - const resolved = _.create(); - _.forEach(props, function (prop) { - if (func !== null && func(prop, resolved) === true) { - // the callback returned true, which means this property was handled and we can go to the next one - return; - } - - if (typeof hiddenObject[prop] !== "undefined") { - resolved[prop] = hiddenObject[prop]; - } - }); - - return _.setPrototypeOf(resolved, platform.Object_prototype); - }; - - // Intl.Collator, String.prototype.localeCompare - const Collator = (function () { - if (InitType !== "Intl" && InitType !== "String") { - return; - } - - const InitializeCollator = function (collator, locales, options) { - const requestedLocales = CanonicalizeLocaleList(locales); - options = options === undefined ? _.create() : Internal.ToObject(options); - - collator.usage = GetOption(options, "usage", "string", ["sort", "search"], "sort"); - // TODO: determine the difference between sort and search locale data - // const collatorLocaleData = collator.usage === "sort" ? localeData : localeData; - - const opt = _.create(); - opt.matcher = GetOption(options, "localeMatcher", "string", ["lookup", "best fit"], "best fit"); - let kn = GetOption(options, "numeric", "boolean", undefined, undefined); - opt.kn = kn === undefined ? kn : Internal.ToString(kn); - opt.kf = GetOption(options, "caseFirst", "string", ["upper", "lower", "false"], undefined); - - const r = ResolveLocale(platform.isCollatorLocaleAvailable, requestedLocales, opt, ["co", "kn", "kf"]); - collator.locale = r.locale; - collator.collation = r.co === null ? "default" : r.co; - collator.numeric = r.kn === "true"; - collator.caseFirst = r.kf; - collator.caseFirstEnum = toEnum(CollatorCaseFirst, collator.caseFirst); - - collator.sensitivity = GetOption(options, "sensitivity", "string", ["base", "accent", "case", "variant"], "variant"); - collator.sensitivityEnum = toEnum(CollatorSensitivity, collator.sensitivity); - - collator.ignorePunctuation = GetOption(options, "ignorePunctuation", "boolean", undefined, false); - - collator.initializedCollator = true; - - return collator; - }; - - let localeCompareStateCache; - // Make arguments undefined to ensure that localeCompare.length === 1 - platform.registerBuiltInFunction(tagPublicFunction("String.prototype.localeCompare", function (that, locales = undefined, options = undefined) { - if (this === undefined || this === null) { - platform.raiseThis_NullOrUndefined("String.prototype.localeCompare"); - } - - const thisStr = String(this); - const thatStr = String(that); - - // Performance optimization to cache the state object and UCollator when the default arguments are provided - // TODO(jahorto): investigate caching when locales and/or options are provided - let stateObject; - if (locales === undefined && options === undefined) { - if (localeCompareStateCache === undefined) { - localeCompareStateCache = _.create(); - InitializeCollator(localeCompareStateCache, undefined, undefined); - } - - stateObject = localeCompareStateCache; - } else { - stateObject = _.create(); - InitializeCollator(stateObject, locales, options); - } - - return platform.localeCompare(thisStr, thatStr, stateObject, /* forStringPrototypeLocaleCompare */ true); - }), IntlBuiltInFunctionID.StringLocaleCompare); - - // If we were only initializing Intl for String.prototype, don't initialize Intl.Collator - if (InitType === "String") { - return; - } - - // using const f = function ... to remain consistent with the rest of the file, - // but the following function expressions get a name themselves to satisfy Intl.Collator.name - // and Intl.Collator.prototype.compare.name - const Collator = tagPublicFunction("Intl.Collator", function Collator(locales = undefined, options = undefined) { - if (this === Intl || this === undefined) { - return new Collator(locales, options); - } - - let obj = Internal.ToObject(this); - if (!_.isExtensible(obj)) { - platform.raiseObjectIsNonExtensible("Collator"); - } - - // Use the hidden object to store data - let hiddenObject = platform.getHiddenObject(obj); - - if (hiddenObject === undefined) { - hiddenObject = _.create(); - platform.setHiddenObject(obj, hiddenObject); - } - - InitializeCollator(hiddenObject, locales, options); - - // Add the bound compare - hiddenObject.boundCompare = _.bind(compare, obj); - delete hiddenObject.boundCompare.name; - return obj; - }); - - const compare = tagPublicFunction("Intl.Collator.prototype.compare", function compare(x, y) { - if (typeof this !== "object") { - platform.raiseNeedObjectOfType("Collator.prototype.compare", "Collator"); - } - - const hiddenObject = platform.getHiddenObject(this); - if (hiddenObject === undefined || !hiddenObject.initializedCollator) { - platform.raiseNeedObjectOfType("Collator.prototype.compare", "Collator"); - } - - return platform.localeCompare(String(x), String(y), hiddenObject, /* forStringPrototypeLocaleCompare */ false); - }); - - // See explanation of `getCanonicalLocales` - const collator_supportedLocalesOf_name = "Intl.Collator.supportedLocalesOf"; - const collator_supportedLocalesOf_func = tagPublicFunction(collator_supportedLocalesOf_name, function (locales, options = undefined) { - return supportedLocalesOf_unconstructable(this, collator_supportedLocalesOf_name, platform.isCollatorLocaleAvailable, locales, options); - }); - const collator_supportedLocalesOf = _.bind(collator_supportedLocalesOf_func, intlStaticMethodThisArg); - _.defineProperty(collator_supportedLocalesOf, "name", { - value: "supportedLocalesOf", - writable: false, - enumerable: false, - configurable: true, - }); - _.defineProperty(Collator, "supportedLocalesOf", { - value: collator_supportedLocalesOf, - writable: true, - enumerable: false, - configurable: true, - }); - - _.defineProperty(Collator, "prototype", { - value: new Collator(), - writable: false, - enumerable: false, - configurable: false - }); - setPrototype(Collator.prototype, Object.prototype); - - _.defineProperty(Collator.prototype, "constructor", { - value: Collator, - writable: true, - enumerable: false, - configurable: true - }); - _.defineProperty(Collator.prototype, "resolvedOptions", { - value: function resolvedOptions() { - if (typeof this !== "object") { - platform.raiseNeedObjectOfType("Collator.prototype.resolvedOptions", "Collator"); - } - const hiddenObject = platform.getHiddenObject(this); - if (hiddenObject === undefined || !hiddenObject.initializedCollator) { - platform.raiseNeedObjectOfType("Collator.prototype.resolvedOptions", "Collator"); - } - - const options = [ - "locale", - "usage", - "sensitivity", - "ignorePunctuation", - "collation", - "numeric", - "caseFirst", - ]; - - return createResolvedOptions(options, hiddenObject); - }, - writable: true, - enumerable: false, - configurable: true - }); - - // test262's test\intl402\Collator\prototype\compare\name.js checks the name of the descriptor's getter function - const getCompare = function () { - if (typeof this !== "object") { - platform.raiseNeedObjectOfType("Collator.prototype.compare", "Collator"); - } - - const hiddenObject = platform.getHiddenObject(this); - if (hiddenObject === undefined || !hiddenObject.initializedCollator) { - platform.raiseNeedObjectOfType("Collator.prototype.compare", "Collator"); - } - - return hiddenObject.boundCompare; - }; - _.defineProperty(getCompare, "name", { - value: "get compare", - writable: false, - enumerable: false, - configurable: true, - }); - _.defineProperty(Collator.prototype, "compare", { - get: tagPublicFunction("get compare", getCompare), - enumerable: false, - configurable: true - }); - - return Collator; - })(); - - // Intl.NumberFormat, Number.prototype.toLocaleString - var NumberFormat = (function () { - if (InitType !== "Intl" && InitType !== "Number") { - return; - } - - const InitializeNumberFormat = function (nf, locales, options) { - const requestedLocales = CanonicalizeLocaleList(locales); - options = options === undefined ? _.create() : Internal.ToObject(options); - - const opt = _.create(); - opt.localeMatcher = GetOption(options, "localeMatcher", "string", ["best fit", "lookup"], "best fit"); - - const r = ResolveLocale(platform.isNFLocaleAvailable, requestedLocales, opt, ["nu"]); - nf.locale = r.locale; - nf.numberingSystem = r.nu; - - const style = GetOption(options, "style", "string", ["decimal", "percent", "currency"], "decimal"); - nf.style = style; - nf.formatterToUse = toEnum(NumberFormatStyle, _.toUpperCase(style)); - const useCurrency = style === "currency"; - - let currency = GetOption(options, "currency", "string", undefined, undefined); - if (currency !== undefined && !IsWellFormedCurrencyCode(currency)) { - platform.raiseInvalidCurrencyCode(currency); - } else if (currency === undefined && useCurrency) { - platform.raiseMissingCurrencyCode(); - } - - let cDigits = 0; - if (useCurrency) { - currency = _.toUpperCase(currency); - nf.currency = currency; - cDigits = platform.currencyDigits(currency); - } - - let currencyDisplay = GetOption(options, "currencyDisplay", "string", ["code", "symbol", "name"], "symbol"); - if (useCurrency) { - nf.currencyDisplay = currencyDisplay - nf.currencyDisplayToUse = toEnum(NumberFormatCurrencyDisplay, _.toUpperCase(currencyDisplay)); - } - - let mnfdDefault, mxfdDefault; - if (useCurrency) { - mnfdDefault = cDigits; - mxfdDefault = cDigits; - } else { - mnfdDefault = 0; - if (style === "percent") { - mxfdDefault = 0; - } else { - mxfdDefault = 3; - } - } - - SetNumberFormatDigitOptions(nf, options, mnfdDefault, mxfdDefault); - - nf.useGrouping = GetOption(options, "useGrouping", "boolean", undefined, true); - - nf.initializedNumberFormat = true; - - // Cache api instance and update numbering system on the object - platform.cacheNumberFormat(nf); - - return nf; - }; - - platform.registerBuiltInFunction(tagPublicFunction("Number.prototype.toLocaleString", function () { - if (typeof this !== "number" && !(this instanceof Number)) { - platform.raiseNeedObjectOfType("Number.prototype.toLocaleString", "Number"); - } - - const stateObject = _.create(); - InitializeNumberFormat(stateObject, arguments[0], arguments[1]); - - const n = Internal.ToNumber(this); - return platform.formatNumber(n, stateObject, /* toParts */ false, /* forNumberPrototypeToLocaleString */ true); - }), IntlBuiltInFunctionID.NumberToLocaleString); - - if (InitType === "Number") { - return; - } - - const NumberFormat = tagPublicFunction("Intl.NumberFormat", function NumberFormat(locales = undefined, options = undefined) { - if (this === Intl || this === undefined) { - return new NumberFormat(locales, options); - } - - const obj = Internal.ToObject(this); - - if (!_.isExtensible(obj)) { - platform.raiseObjectIsNonExtensible("NumberFormat"); - } - - // Use the hidden object to store data - let hiddenObject = platform.getHiddenObject(obj); - if (hiddenObject === undefined) { - hiddenObject = _.create(); - platform.setHiddenObject(obj, hiddenObject); - } - - InitializeNumberFormat(hiddenObject, locales, options); - - hiddenObject.boundFormat = _.bind(format, obj) - delete hiddenObject.boundFormat.name; - - return obj; - }); - - const format = tagPublicFunction("Intl.NumberFormat.prototype.format", function format(n) { - n = Internal.ToNumber(n); - - if (typeof this !== "object") { - platform.raiseNeedObjectOfType("NumberFormat.prototype.format", "NumberFormat"); - } - - const hiddenObject = platform.getHiddenObject(this); - if (hiddenObject === undefined || !hiddenObject.initializedNumberFormat) { - platform.raiseNeedObjectOfType("NumberFormat.prototype.format", "NumberFormat"); - } - - return platform.formatNumber(n, hiddenObject, /* toParts */ false, /* forNumberPrototypeToLocaleString */ false); - }); - - const formatToParts = tagPublicFunction("Intl.NumberFormat.prototype.formatToParts", function formatToParts(n) { - n = Internal.ToNumber(n); - - if (typeof this !== "object") { - platform.raiseNeedObjectOfType("NumberFormat.prototype.formatToParts", "NumberFormat"); - } - - const hiddenObject = platform.getHiddenObject(this); - if (hiddenObject === undefined || !hiddenObject.initializedNumberFormat) { - platform.raiseNeedObjectOfType("NumberFormat.prototype.formatToParts", "NumberFormat"); - } - - return platform.formatNumber(n, hiddenObject, /* toParts */ true, /* forNumberPrototypeToLocaleString */ false); - }); - - // See explanation of `getCanonicalLocales` - const numberFormat_supportedLocalesOf_name = "Intl.NumberFormat.supportedLocalesOf"; - const numberFormat_supportedLocalesOf_func = tagPublicFunction(numberFormat_supportedLocalesOf_name, function (locales, options = undefined) { - return supportedLocalesOf_unconstructable(this, numberFormat_supportedLocalesOf_name, platform.isNFLocaleAvailable, locales, options); - }); - const numberFormat_supportedLocalesOf = _.bind(numberFormat_supportedLocalesOf_func, intlStaticMethodThisArg); - _.defineProperty(numberFormat_supportedLocalesOf, "name", { - value: "supportedLocalesOf", - writable: false, - enumerable: false, - configurable: true, - }); - _.defineProperty(NumberFormat, "supportedLocalesOf", { - value: numberFormat_supportedLocalesOf, - writable: true, - enumerable: false, - configurable: true, - }); - - _.defineProperty(NumberFormat, "prototype", { - value: new NumberFormat(), - writable: false, - enumerable: false, - configurable: false, - }); - setPrototype(NumberFormat.prototype, Object.prototype); - _.defineProperty(NumberFormat.prototype, "constructor", { - value: NumberFormat, - writable: true, - enumerable: false, - configurable: true, - }); - - _.defineProperty(NumberFormat.prototype, "resolvedOptions", { - value: function resolvedOptions() { - if (typeof this !== "object") { - platform.raiseNeedObjectOfType("NumberFormat.prototype.resolvedOptions", "NumberFormat"); - } - const hiddenObject = platform.getHiddenObject(this); - if (hiddenObject === undefined || !hiddenObject.initializedNumberFormat) { - platform.raiseNeedObjectOfType("NumberFormat.prototype.resolvedOptions", "NumberFormat"); - } - - const options = ["locale", "numberingSystem", "style", "currency", "currencyDisplay", "minimumIntegerDigits", - "minimumFractionDigits", "maximumFractionDigits", "minimumSignificantDigits", "maximumSignificantDigits", - "useGrouping"]; - - return createResolvedOptions(options, hiddenObject); - }, - writable: true, - enumerable: false, - configurable: true, - }); - - // test262's test\intl402\NumberFormat\prototype\format\name.js checks the name of the descriptor's getter function - const getFormat = function () { - if (typeof this !== "object") { - platform.raiseNeedObjectOfType("NumberFormat.prototype.format", "NumberFormat"); - } - - const hiddenObject = platform.getHiddenObject(this); - if (hiddenObject === undefined || !hiddenObject.initializedNumberFormat) { - platform.raiseNeedObjectOfType("NumberFormat.prototype.format", "NumberFormat"); - } - - return hiddenObject.boundFormat; - }; - _.defineProperty(getFormat, "name", { - value: "get format", - writable: false, - enumerable: false, - configurable: true, - }); - _.defineProperty(NumberFormat.prototype, "format", { - get: tagPublicFunction("get format", getFormat), - enumerable: false, - configurable: true, - }); - - _.defineProperty(NumberFormat.prototype, "formatToParts", { - value: formatToParts, - enumerable: false, - configurable: true, - writable: true, - }); - - return NumberFormat; - })(); - - // Intl.DateTimeFormat, Date.prototype.toLocaleString, Date.prototype.toLocaleDateString, Date.prototype.toLocaleTimeString - var DateTimeFormat = (function () { - if (InitType !== "Intl" && InitType !== "Date") { - return; - } - - const narrowShortLong = ["narrow", "short", "long"]; - const twoDigitNumeric = ["2-digit", "numeric"]; - const allOptionValues = _.concat(twoDigitNumeric, narrowShortLong); - const dateTimeComponents = [ - ["weekday", narrowShortLong], - ["era", narrowShortLong], - ["year", twoDigitNumeric], - ["month", allOptionValues], // month has every option available to it - ["day", twoDigitNumeric], - ["hour", twoDigitNumeric], - ["minute", twoDigitNumeric], - ["second", twoDigitNumeric], - ["timeZoneName", _.slice(narrowShortLong, 1)] // timeZoneName only allows "short" and "long" - ]; - - /** - * Given a user-provided options object, getPatternForOptions generates a LDML/ICU pattern and then - * sets the pattern and all of the relevant options implemented by the pattern on the provided dtf before returning. - * - * @param {Object} dtf the DateTimeFormat internal object - * @param {Object} options the options object originally given by the user - */ - const getPatternForOptions = (function () { - // symbols come from the Unicode LDML: http://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table - const symbolForOption = { - weekday: "E", - era: "G", - year: "y", - month: "M", - day: "d", - // for hour, we have some special handling - hour: "j", hour12: "h", hour24: "H", - minute: "m", - second: "s", - timeZoneName: "z", - }; - // NOTE - keep this up to date with the map in PlatformAgnostic::Intl::GetDateTimePartKind and the UDateFormatField enum - const optionForSymbol = { - E: "weekday", c: "weekday", e: "weekday", - G: "era", - y: "year", u: "year", U: "year", - M: "month", L: "month", - d: "day", - h: "hour", H: "hour", K: "hour", k: "hour", - m: "minute", - s: "second", - z: "timeZoneName", Z: "timeZoneName", v: "timeZoneName", V: "timeZoneName", O: "timeZoneName", X: "timeZoneName", x: "timeZoneName", - }; - - // lengths here are how many times a symbol is repeated in a skeleton for a given option - // the Intl spec recommends that Intl "short" -> CLDR "abbreviated" and Intl "long" -> CLDR "wide" - const symbolLengthForOption = { - numeric: 1, - "2-digit": 2, - short: 3, - long: 4, - narrow: 5, - }; - const optionForSymbolLength = { - 1: "numeric", - 2: "2-digit", - 3: "short", - 4: "long", - 5: "narrow", - }; - - // for fixing up the hour pattern later - const patternForHourCycle = { - h12: "h", - h23: "H", - h11: "K", - h24: "k", - }; - const hourCycleForPattern = { - h: "h12", - H: "h23", - K: "h11", - k: "h24", - }; - - return function (dtf, options) { - const resolvedOptions = _.reduce(dateTimeComponents, function (resolved, component) { - const prop = component[0]; - const value = GetOption(options, prop, "string", component[1], undefined); - if (value !== undefined) { - resolved[prop] = value; - } - - return resolved; - }, _.create()); - - // Providing undefined for the `values` argument allows { hour12: "asd" } to become hour12 = true, - // which is apparently a feature of the spec, rather than a bug. - const hour12 = GetOption(options, "hour12", "boolean", undefined, undefined); - const hc = dtf.hourCycle; - - // Build up a skeleton by repeating skeleton keys (like "G", "y", etc) for a count corresponding to the intl option value. - const skeleton = _.reduce(_.keys(resolvedOptions), function (skeleton, optionKey) { - let optionValue = resolvedOptions[optionKey]; - if (optionKey === "hour") { - // hour12/hourCycle resolution in the spec has multiple issues: - // hourCycle and -hc can be out of sync: https://github.com/tc39/ecma402/issues/195 - // hour12 has precedence over a more specific option in hourCycle/hc - // hour12 can force a locale that prefers h23 and h12 to use h11 or h24, according to the spec - // We temporarily work around these similarly to firefox and implement custom hourCycle/hour12 resolution. - // TODO(jahorto): follow up with Intl spec about these issues - if (hour12 === true || (hour12 === undefined && (hc === "h11" || hc === "h12"))) { - optionKey = "hour12"; - } else if (hour12 === false || (hour12 === undefined && (hc === "h23" || hc === "h24"))) { - optionKey = "hour24"; - } - } - - return skeleton + _.repeat(symbolForOption[optionKey], symbolLengthForOption[optionValue]); - }, ""); - - let pattern = platform.getPatternForSkeleton(dtf.locale, skeleton); - - // getPatternForSkeleton (udatpg_getBestPattern) can ignore, add, and modify fields compared to the markers we gave in the skeleton. - // Most importantly, udatpg_getBestPattern will determine the most-preferred hour field for a locale and time type (12 or 24). - // Scan the generated pattern to extract the resolved fields, and fix up the hour field if the user requested an explicit hour cycle - let inLiteral = false; - let i = 0; - while (i < pattern.length) { - let cur = pattern[i]; - const isQuote = cur === "'"; - if (inLiteral) { - if (isQuote) { - inLiteral = false; - } - ++i; - continue; - } else if (isQuote) { - inLiteral = true; - ++i; - continue; - } else if (cur === " ") { - ++i; - continue; - } - - // we are not in a format literal, so we are in a symbolic section of the pattern - // now, we can force the correct hour pattern and set the internal slots correctly - if (cur === "h" || cur === "H" || cur === "K" || cur === "k") { - if (hc && hour12 === undefined) { - // if we have found an hour-like symbol and the user wanted a specific hour cycle, - // replace it and all such proceding contiguous symbols with the symbol corresponding - // to the user-requested hour cycle, if they are different - const replacement = patternForHourCycle[hc]; - if (replacement !== cur) { - if (pattern[i + 1] === cur) { - // 2-digit hour - pattern = _.substring(pattern, 0, i) + replacement + replacement + _.substring(pattern, i + 2); - } else { - // numeric hour - pattern = _.substring(pattern, 0, i) + replacement + _.substring(pattern, i + 1); - } - - // we have modified pattern[i] so we need to update cur - cur = pattern[i]; - } - } else { - // if we have found an hour-like symbol and the user didnt request an hour cycle, - // set the internal hourCycle property from the resolved pattern - dtf.hourCycle = hourCycleForPattern[cur]; - } - } - - let k = i + 1; - while (k < pattern.length && pattern[k] === cur) { - ++k; - } - - const resolvedKey = optionForSymbol[cur]; - const resolvedValue = optionForSymbolLength[k - i]; - dtf[resolvedKey] = resolvedValue; - i = k; - } - - dtf.pattern = pattern; - }; - })(); - - /** - * Initializes the dateTimeFormat argument with the given locales and options. - * - * ECMA-402: #sec-initializedatetimeformat - * - * @param {Object} dateTimeFormat the state object representing a DateTimeFormat instance or toLocale*String call - * @param {String|String[]} locales a user-provided list of locales - * @param {Object} options a user-provided options object - */ - const InitializeDateTimeFormat = function (dateTimeFormat, locales, options) { - const requestedLocales = CanonicalizeLocaleList(locales); - options = ToDateTimeOptions(options, "any", "date"); - - const opt = _.create(); - opt.localeMatcher = GetOption(options, "localeMatcher", "string", ["lookup", "best fit"], "best fit"); - // hc is the only option that can be set by -u extension or by options object key - opt.hc = GetOption(options, "hourCycle", "string", ["h11", "h12", "h23", "h24"], undefined); - - const r = ResolveLocale(platform.isDTFLocaleAvailable, requestedLocales, opt, ["nu", "ca", "hc"]); - dateTimeFormat.locale = r.locale; - dateTimeFormat.calendar = r.ca; - dateTimeFormat.hourCycle = r.hc; - dateTimeFormat.numberingSystem = r.nu; - - const localeWithoutSubtags = r.dataLocale; - let tz = options.timeZone; - if (tz === undefined) { - tz = platform.getDefaultTimeZone(); - } else { - tz = Internal.ToString(tz); - } - - // make tz uppercase here, as its easier to do now than in platform (even though the uppercase operation - // is supposed to be done in #sec-isvalidtimezonename) - const canonicalTZ = platform.validateAndCanonicalizeTimeZone(tz); - if (canonicalTZ === undefined || canonicalTZ === "Etc/Unknown") { - raise.rangeError(tz, "timeZone", "IANA Zone or Link name (Area/Location)"); - } else if (canonicalTZ === "Etc/UTC" || canonicalTZ === "Etc/GMT") { - tz = "UTC"; - } else { - tz = canonicalTZ; - } - - dateTimeFormat.timeZone = tz; - - // get the formatMatcher for validation only - GetOption(options, "formatMatcher", "string", ["basic", "best fit"], "best fit"); - - // this call replaces most of the spec code related to hour12/hourCycle and format negotiation/handling - getPatternForOptions(dateTimeFormat, options); - dateTimeFormat.initializedDateTimeFormat = true; - - return dateTimeFormat; - }; - - /** - * Modifies the options argument to have correct default values - * - * ECMA-402: #sec-todatetimeoptions - * - * @param {Object} options user-provided options object passed as second argument to Intl.DateTimeFormat/toLocale*String - * @param {String} required which kind of options must be provided for the call (one of "date", "time", or "any") - * @param {String} defaults which kind of options will be set to a default value (one of "date", "time", or "all") - * @returns {Object} modified options object - */ - const ToDateTimeOptions = function (options, required, defaults) { - options = options === undefined ? null : Internal.ToObject(options); - options = _.create(options); - let needDefaults = true; - if (required === "date" || required === "any") { - _.forEach(["weekday", "year", "month", "day"], function (prop) { - const value = options[prop]; - if (value !== undefined) { - needDefaults = false; - } - }); - } - - if (required === "time" || required === "any") { - _.forEach(["hour", "minute", "second"], function (prop) { - const value = options[prop]; - if (value !== undefined) { - needDefaults = false; - } - }); - } - - if (needDefaults === true && (defaults === "date" || defaults === "all")) { - _.forEach(["year", "month", "day"], function (prop) { - _.defineProperty(options, prop, { - value: "numeric", - writable: true, - enumerable: true, - configurable: true, - }); - }) - } - - if (needDefaults === true && (defaults === "time" || defaults === "all")) { - _.forEach(["hour", "minute", "second"], function (prop) { - _.defineProperty(options, prop, { - value: "numeric", - writable: true, - enumerable: true, - configurable: true, - }); - }) - } - - return options; - }; - - const FormatDateTime = function (dtf, x) { - if (_.isNaN(x) || !_.isFinite(x)) { - platform.raiseInvalidDate(); - } - - return platform.formatDateTime(dtf, x, /* toParts */ false, /* forDatePrototypeToLocaleString */ false); - }; - - const FormatDateTimeToParts = function (dtf, x) { - if (_.isNaN(x) || !_.isFinite(x)) { - platform.raiseInvalidDate(); - } - - return platform.formatDateTime(dtf, x, /* toParts */ true, /* forDatePrototypeToLocaleString */ false); - }; - - // caches for objects constructed with default parameters for each method - const __DateInstanceToLocaleStringDefaultCache = [undefined, undefined, undefined]; - const __DateInstanceToLocaleStringDefaultCacheSlot = bare({ - toLocaleString: 0, - toLocaleDateString: 1, - toLocaleTimeString: 2 - }); - - function DateInstanceToLocaleStringImplementation(name, option1, option2, cacheSlot, locales, options) { - if (typeof this !== 'object' || !(this instanceof Date)) { - platform.raiseNeedObjectOfType(name, "Date"); - } - const value = _.getDate(new Date(this)); - if (_.isNaN(value) || !_.isFinite(value)) { - return "Invalid Date"; - } - - let stateObject = undefined; - if (platform.useCaches && locales === undefined && options === undefined) { - // All default parameters (locales and options): this is the most valuable case to cache. - if (__DateInstanceToLocaleStringDefaultCache[cacheSlot]) { - // retrieve cached value - stateObject = __DateInstanceToLocaleStringDefaultCache[cacheSlot]; - } else { - // populate cache - stateObject = _.create(); - InitializeDateTimeFormat(stateObject, undefined, ToDateTimeOptions(undefined, option1, option2)); - __DateInstanceToLocaleStringDefaultCache[cacheSlot] = stateObject; - } - } - - if (!stateObject) { - stateObject = _.create(); - InitializeDateTimeFormat(stateObject, locales, ToDateTimeOptions(options, option1, option2)); - } - - return platform.formatDateTime(stateObject, Internal.ToNumber(this), /* toParts */ false, /* forDatePrototypeToLocaleString */ true); - } - - // Note: tagPublicFunction (platform.tagPublicLibraryCode) messes with declared name of the FunctionBody so that - // the functions called appear correctly in the debugger and stack traces. Thus, we we cannot call tagPublicFunction in a loop. - // Each entry point needs to have its own unique FunctionBody (which is a function as defined in the source code); - // this is why we have seemingly repeated ourselves below, instead of having one function and calling it multiple times with - // different parameters. - // - // The following invocations of `platform.registerBuiltInFunction(tagPublicFunction(name, entryPoint))` are enclosed in IIFEs. - // The IIFEs are used to group all of the meaningful differences between each entry point into the arguments to the IIFE. - // The exception to this are the different entryPoint names which are only significant for debugging (and cannot be passed in - // as arguments, as the name is intrinsic to the function declaration). - // - // The `date_toLocale*String_entryPoint` function names are placeholder names that will never be seen from user code. - // The function name property and FunctionBody declared name are overwritten by `tagPublicFunction`. - // The fact that they are declared with unique names is helpful for debugging. - // The functions *must not* be declared as anonymous functions (must be declared with a name); - // converting from an unnnamed function to a named function is not readily supported by the platform code and - // this has caused us to hit assertions in debug builds in the past. - // - // See invocations of `tagPublicFunction` on the `supportedLocalesOf` entry points for a similar pattern. - // - // The entryPoint functions will be called as `Date.prototype.toLocale*String` and thus their `this` parameters will be a Date. - // `DateInstanceToLocaleStringImplementation` is not on `Date.prototype`, so we must propagate `this` into the call by using - // `DateInstanceToLocaleStringImplementation.call(this, ...)`. - - (function (name, option1, option2, cacheSlot, platformFunctionID) { - platform.registerBuiltInFunction(tagPublicFunction(name, function date_toLocaleString_entryPoint(locales = undefined, options = undefined) { - return DateInstanceToLocaleStringImplementation.call(this, name, option1, option2, cacheSlot, locales, options); - }), platformFunctionID); - })("Date.prototype.toLocaleString", "any", "all", __DateInstanceToLocaleStringDefaultCacheSlot.toLocaleString, IntlBuiltInFunctionID.DateToLocaleString); - - (function (name, option1, option2, cacheSlot, platformFunctionID) { - platform.registerBuiltInFunction(tagPublicFunction(name, function date_toLocaleDateString_entryPoint(locales = undefined, options = undefined) { - return DateInstanceToLocaleStringImplementation.call(this, name, option1, option2, cacheSlot, locales, options); - }), platformFunctionID); - })("Date.prototype.toLocaleDateString", "date", "date", __DateInstanceToLocaleStringDefaultCacheSlot.toLocaleDateString, IntlBuiltInFunctionID.DateToLocaleDateString); - - (function (name, option1, option2, cacheSlot, platformFunctionID) { - platform.registerBuiltInFunction(tagPublicFunction(name, function date_toLocaleTimeString_entryPoint(locales = undefined, options = undefined) { - return DateInstanceToLocaleStringImplementation.call(this, name, option1, option2, cacheSlot, locales, options); - }), platformFunctionID); - })("Date.prototype.toLocaleTimeString", "time", "time", __DateInstanceToLocaleStringDefaultCacheSlot.toLocaleTimeString, IntlBuiltInFunctionID.DateToLocaleTimeString); - - // if we were only initializing Date, dont bother initializing Intl.DateTimeFormat - if (InitType !== "Intl") { - return; - } - - /** - * The Intl.DateTimeFormat constructor - * - * ECMA-402: #sec-intl.datetimeformat - * - * @param {String|String[]} locales - * @param {Object} options - */ - function DateTimeFormat(locales = undefined, options = undefined) { - if (this === Intl || this === undefined) { - return new DateTimeFormat(locales, options); - } - - const obj = Internal.ToObject(this); - if (!_.isExtensible(obj)) { - platform.raiseObjectIsNonExtensible("DateTimeFormat"); - } - - // Use the hidden object to store data - let hiddenObject = platform.getHiddenObject(obj); - - if (hiddenObject === undefined) { - hiddenObject = _.create(); - platform.setHiddenObject(obj, hiddenObject); - } - - InitializeDateTimeFormat(hiddenObject, locales, options); - - // only format has to be bound and attached to the DateTimeFormat - hiddenObject.boundFormat = _.bind(format, obj); - delete hiddenObject.boundFormat.name; - - return obj; - } - tagPublicFunction("Intl.DateTimeFormat", DateTimeFormat); - - /** - * Asserts that dtf is a valid DateTimeFormat object, or throws a TypeError otherwise. - * - * Returns the hiddenObject for the given dtf. - * - * @param {Object} dtf `this` of a given call to a DateTimeFormat member function - * @param {String} name the name of the function requiring dtf to be a valid DateTimeFormat - * @returns {Object} the hiddenObject for the given dtf - */ - const ensureMember = function (dtf, name) { - if (typeof dtf !== 'object') { - platform.raiseNeedObjectOfType(`Intl.DateTimeFormat.prototype.${name}`, "DateTimeFormat"); - } - let hiddenObject = platform.getHiddenObject(dtf); - if (hiddenObject === undefined || !hiddenObject.initializedDateTimeFormat) { - platform.raiseNeedObjectOfType(`Intl.DateTimeFormat.prototype.${name}`, "DateTimeFormat"); - } - - return hiddenObject; - }; - - /** - * Calls ensureMember on dtf, and then converts the given date to a number. - * - * Returns the hiddenObject for the given dtf and the resolved date. - * - * @param {Object} dtf `this` of a given call to a DateTimeFormat member function - * @param {Object} date the date to be formatted - * @param {String} name the name of the function requiring dtf to be a valid DateTimeFormat - */ - const ensureFormat = function (dtf, date, name) { - const hiddenObject = ensureMember(dtf, name); - - let x; - if (date === undefined) { - x = platform.builtInJavascriptDateEntryNow(); - } else { - x = Internal.ToNumber(date); - } - - // list of arguments for FormatDateTime{ToParts} - return [hiddenObject, x]; - }; - - const format = function (date) { - return _.apply(FormatDateTime, undefined, ensureFormat(this, date, "format")); - }; - tagPublicFunction("Intl.DateTimeFormat.prototype.format", format); - - const formatToParts = function (date) { - return _.apply(FormatDateTimeToParts, undefined, ensureFormat(this, date, "formatToParts")); - }; - tagPublicFunction("Intl.DateTimeFormat.prototype.formatToParts", formatToParts); - - _.defineProperty(DateTimeFormat, "prototype", { - value: new DateTimeFormat(), - writable: false, - enumerable: false, - configurable: false - }); - setPrototype(DateTimeFormat.prototype, Object.prototype); - - _.defineProperty(DateTimeFormat.prototype, "constructor", { - value: DateTimeFormat, - writable: true, - enumerable: false, - configurable: true - }); - - // test262's test\intl402\DateTimeFormat\prototype\format\name.js checks the name of the descriptor's getter function - const getFormat = function () { - const hiddenObject = ensureMember(this, format); - - return hiddenObject.boundFormat; - }; - _.defineProperty(getFormat, "name", { - value: "get format", - writable: false, - enumerable: false, - configurable: true, - }); - _.defineProperty(DateTimeFormat.prototype, "format", { - get: tagPublicFunction("get format", getFormat), - enumerable: false, - configurable: true, - }); - _.defineProperty(DateTimeFormat.prototype, "formatToParts", { - value: formatToParts, - enumerable: false, - configurable: true, - writable: true, - }); - _.defineProperty(DateTimeFormat.prototype, "resolvedOptions", { - value: function resolvedOptions() { - const hiddenObject = ensureMember(this, "resolvedOptions"); - const options = [ - "locale", - "calendar", - "numberingSystem", - "timeZone", - "hourCycle", - "weekday", - "era", - "year", - "month", - "day", - "hour", - "minute", - "second", - "timeZoneName", - ]; - - return createResolvedOptions(options, hiddenObject, function (prop, resolved) { - if (prop === "hourCycle") { - const hc = hiddenObject.hourCycle; - if (hiddenObject.hour !== undefined && hc !== null) { - resolved.hourCycle = hc; - resolved.hour12 = hc === "h11" || hc === "h12"; - } - - return true; - } - }); - }, - writable: true, - enumerable: false, - configurable: true, - }); - - // See explanation of `getCanonicalLocales` - const dateTimeFormat_supportedLocalesOf_name = "Intl.DateTimeFormat.supportedLocalesOf"; - const dateTimeFormat_supportedLocalesOf_func = tagPublicFunction(dateTimeFormat_supportedLocalesOf_name, function (locales, options = undefined) { - return supportedLocalesOf_unconstructable(this, dateTimeFormat_supportedLocalesOf_name, platform.isDTFLocaleAvailable, locales, options); - }); - const dateTimeFormat_supportedLocalesOf = _.bind(dateTimeFormat_supportedLocalesOf_func, intlStaticMethodThisArg); - _.defineProperty(dateTimeFormat_supportedLocalesOf, "name", { - value: "supportedLocalesOf", - writable: false, - enumerable: false, - configurable: true, - }); - _.defineProperty(DateTimeFormat, "supportedLocalesOf", { - value: dateTimeFormat_supportedLocalesOf, - writable: true, - enumerable: false, - configurable: true, - }); - - return DateTimeFormat; - })(); - - const PluralRules = (function() { - if (InitType !== "Intl") { - return; - } - - /** - * Initializes the given pluralRules object - * - * ECMA 402: #sec-initializepluralrules - * - * @param {Object} pluralRules - * @param {String|String[]} locales - * @param {Object} options - */ - const InitializePluralRules = function (pluralRules, locales, options) { - const requestedLocales = CanonicalizeLocaleList(locales); - options = options === undefined ? _.create() : Internal.ToObject(options); - const opt = _.create(); - opt.matcher = GetOption(options, "localeMatcher", "string", ["lookup", "best fit"], "best fit"); - pluralRules.type = GetOption(options, "type", "string", ["cardinal", "ordinal"], "cardinal"); - - SetNumberFormatDigitOptions(pluralRules, options, 0, 3); - - // %PluralRules%.[[RelevantExtensionKeys]] = [] (#sec-intl.pluralrules-internal-slots) - const r = ResolveLocale(platform.isPRLocaleAvailable, requestedLocales, opt, []); - - pluralRules.locale = r.locale; - pluralRules.pluralCategories = platform.pluralRulesKeywords(pluralRules); - - pluralRules.initializedPluralRules = true; - - return pluralRules; - }; - - /** - * Returns a String value representing the plural form of n according to - * the effective locale and the options of pluralRules - * - * ECMA 402: #sec-resolveplural - * - * @param {Object} pluralRules - * @param {Number} n - */ - const ResolvePlural = function (pluralRules, n) { - if (!_.isFinite(n)) { - return "other"; - } - - return platform.pluralRulesSelect(pluralRules, n); - }; - - // params are explicitly `= undefined` to make PluralRules.length === 0 - const PluralRules = function PluralRules(locales = undefined, options = undefined) { - if (new.target === undefined) { - platform.raiseNeedObjectOfType("Intl.PluralRules", "PluralRules"); - } - - const stateObject = _.create(); - platform.setHiddenObject(this, stateObject); - - InitializePluralRules(stateObject, locales, options); - - return this; - }; - tagPublicFunction("Intl.PluralRules", PluralRules); - - // ECMA 402: #sec-intl.pluralrules.prototype - _.defineProperty(PluralRules, "prototype", { - value: {}, - writable: false, - enumerable: false, - configurable: false, - }); - - // See explanation of `getCanonicalLocales` - // ECMA 402: #sec-intl.pluralrules.supportedlocalesof - const pluralRules_supportedLocalesOf_name = "Intl.PluralRules.supportedLocalesOf"; - const pluralRules_supportedLocalesOf_func = tagPublicFunction(pluralRules_supportedLocalesOf_name, function (locales, options = undefined) { - return supportedLocalesOf_unconstructable(this, pluralRules_supportedLocalesOf_name, platform.isPRLocaleAvailable, locales, options); - }); - const pluralRules_supportedLocalesOf = _.bind(pluralRules_supportedLocalesOf_func, intlStaticMethodThisArg); - _.defineProperty(pluralRules_supportedLocalesOf, "name", { - value: "supportedLocalesOf", - writable: false, - enumerable: false, - configurable: true, - }); - _.defineProperty(PluralRules, "supportedLocalesOf", { - value: pluralRules_supportedLocalesOf, - writable: true, - enumerable: false, - configurable: true, - }); - - // ECMA 402: #sec-intl.pluralrules.prototype.select - const select = function select(value) { - const pr = platform.getHiddenObject(this); - if (!pr || !pr.initializedPluralRules) { - platform.raiseNeedObjectOfType("Intl.PluralRules.prototype.select", "PluralRules"); - } - - const n = Internal.ToNumber(value); - return ResolvePlural(pr, n); - }; - tagPublicFunction("Intl.PluralRules.prototype.select", select); - _.defineProperty(PluralRules.prototype, "select", { - value: select, - enumerable: false, - configurable: true, - writable: true, - }); - - const resolvedOptions = function resolvedOptions() { - const pr = platform.getHiddenObject(this); - if (!pr || !pr.initializedPluralRules) { - platform.raiseNeedObjectOfType("Intl.PluralRules.prototype.select", "PluralRules"); - } - - return createResolvedOptions([ - "locale", - "type", - "minimumIntegerDigits", - "minimumFractionDigits", - "maximumFractionDigits", - "minimumSignificantDigits", - "maximumSignificantDigits", - "pluralCategories" - ], pr, (prop, resolved) => { - if (prop === "pluralCategories") { - // https://github.com/tc39/ecma402/issues/224: create a copy of the pluralCategories array - resolved.pluralCategories = _.slice(pr.pluralCategories, 0); - return true; - } - }); - }; - tagPublicFunction("Intl.PluralRules.prototype.resolvedOptions", resolvedOptions); - _.defineProperty(PluralRules.prototype, "resolvedOptions", { - value: resolvedOptions, - enumerable: false, - configurable: true, - writable: true, - }); - - return PluralRules; - })(); - - // Initialize Intl properties only if needed - if (InitType === "Intl") { - _.defineProperty(Intl, "Collator", { value: Collator, writable: true, enumerable: false, configurable: true }); - _.defineProperty(Intl, "NumberFormat", { value: NumberFormat, writable: true, enumerable: false, configurable: true }); - _.defineProperty(Intl, "DateTimeFormat", { value: DateTimeFormat, writable: true, enumerable: false, configurable: true }); - _.defineProperty(Intl, "PluralRules", { value: PluralRules, writable: true, enumerable: false, configurable: true }); - } - - } - /** - * - * - * - * - * - * - * END ICU, BEGIN WINGLOB - * - * - * - * - * - * - */ - else { - - if (platform.localeLookupCache === undefined) { - platform.localeLookupCache = new IntlCache(); - } - if (platform.localeBestFitCache === undefined) { - platform.localeBestFitCache = new IntlCache(); - } - - let __defaultLocale = undefined; - const GetDefaultLocale = function () { - if (__defaultLocale && platform.useCaches) { - return __defaultLocale; - } - - const locale = platform.getDefaultLocale(); - if (!locale) { - // if the system locale is undefined/null/empty string, we have to - // do something or else we will crash - __defaultLocale = "en"; - } else { - __defaultLocale = locale; - } - - return __defaultLocale; - }; - - let CreateDateTimeFormat = function (dateTimeFormat, condition) { - let retVal = platform.createDateTimeFormat(dateTimeFormat, condition); - if (retVal === null) { - // TODO (doilij): remove this fallback when implemented under ICU - dateTimeFormat.__numberingSystem = ""; - dateTimeFormat.__patternStrings = [ - "{month.a}{day.b}{hour.c}{minute.d}{second.e}", - "" // another entry for fun - ] - } - // no return value - }; - - let IsWellFormedLanguageTag = function (langTag) { - let retVal = platform.isWellFormedLanguageTag(langTag); - if (retVal === null) { - if (!LANG_TAG_RE) { - InitializeLangTagREs(); - } - let match = platform.builtInRegexMatch(langTag, LANG_TAG_RE); - return !!match; - } else { - return retVal; - } - }; - - var forEachIfPresent = function (obj, length, func) { - let current = 0; - while (current < length) { - if (current in obj) { - func(obj[current]); - } - current++; - } - }; - - // A helper function that is meant to rethrow SOE and OOM exceptions allowing them to propagate. - var throwExIfOOMOrSOE = function (ex) { - if (ex.number === -2146828260 || ex.number === -2146828281) { - throw ex; - } - }; - - var tagPublicFunction = function (name, f) { - return platform.tagPublicLibraryCode(f, name); - }; - - var resolveLocaleBestFit = function (locale, defaultLocale) { - var resolvedLocale = platform.localeBestFitCache.get(locale); - if (resolvedLocale === undefined) { - resolvedLocale = platform.resolveLocaleBestFit(locale); - if (resolvedLocale === null) { - if (!LANG_TAG_BASE_RE) { - InitializeLangTagREs(); - } - let match = platform.builtInRegexMatch(locale, LANG_TAG_BASE_RE); - resolvedLocale = match[1] + (match[2] ? ('-' + match[2]) : '') + (match[3] ? ('-' + match[3]) : ''); - } - // If resolvedLocale is undefined, cache that we got undefined - // so we don't try to resolve for `locale` in future. - platform.localeBestFitCache.set(locale, resolvedLocale === undefined ? NOT_FOUND : resolvedLocale); - } else if (resolvedLocale === NOT_FOUND) { - resolvedLocale = undefined; - } - - if (defaultLocale === locale) { - return resolvedLocale; - } else if (defaultLocale === resolvedLocale) { - return undefined; - } else { - return resolvedLocale; - } - } - - var resolveLocaleLookup = function (localeWithoutSubtags) { - let resolvedLocale = platform.localeLookupCache.get(localeWithoutSubtags); - if (resolvedLocale === undefined) { - resolvedLocale = platform.resolveLocaleLookup(localeWithoutSubtags); - if (resolvedLocale === null) { - if (!LANG_TAG_BASE_RE) { - InitializeLangTagREs(); - } - let match = platform.builtInRegexMatch(localeWithoutSubtags, LANG_TAG_BASE_RE); - // match: [1] language; [2] script; [3] region (e.g. en-Latn-US) - resolvedLocale = match[1] - + (match[2] ? ('-' + match[2]) : '') - + (match[3] ? ('-' + match[3]) : ''); - } - // If resolvedLocale is undefined, cache that we got undefined - // so we don't try to resolve for `locale` in future. - platform.localeLookupCache.set(localeWithoutSubtags, resolvedLocale === undefined ? NOT_FOUND : resolvedLocale); - } else if (resolvedLocale === NOT_FOUND) { - resolvedLocale = undefined; - } - return resolvedLocale; - } - - var getExtensionSubtags = function (locale) { - if (!LANG_TAG_EXT_RE) { - InitializeLangTagREs(); - } - - const match = platform.builtInRegexMatch(locale, LANG_TAG_EXT_RE); - if (!match) { - return undefined; - } - - // Note: extensions are /((${extension})-)*/ and are made up of \\b(?:${singleton}(?:-${alphanum}{2,8})+)\\b - // where the ${alphanum}{2,8} fields are of the form `${key}-${value}`. - // TODO (doilij): return an array of `${key}-${value}` pairs - - // REVIEW (doilij): leading - might mean we need to filter: // ss.match(rr)[4].split('-').filter((x)=>!!x) - // In that case: - // TODO StringInstanceSplit - // TODO ArrayInstanceFilter - // let extSubtags = ArrayInstanceFilter(extensionsString.split('-'), (x)=>!!x); - const extSubtags = match[0].split('-').filter((x) => !!x); - // REVIEW (doilij): performance (testing for str[0]==='-' and using the string after that or updating the regex might be faster) - - return extSubtags; - } - - var resolveLocaleHelper = function (locale, fitter, extensionFilter, defaultLocale) { - var subTags = platform.getExtensions(locale); - if (subTags === null) { - // platform.getExtensions returns null to indicate fallback to JS implementation - subTags = getExtensionSubtags(locale); - } - - if (subTags) { - callInstanceFunc(ArrayInstanceForEach, subTags, function (subTag) { - locale = callInstanceFunc(StringInstanceReplace, locale, "-" + subTag, ""); - }); - } - - // Instead of using replace, we will match two groups, one capturing, one not. The non capturing group just strips away -u if present. - // We are substituting for the function replace; which will only make a change if /-u$/ was found (-u at the end of the line) - // And because match will return null if we don't match entire sequence, we are using the two groups stated above. - locale = platform.builtInRegexMatch(locale, /(.*?)(?:-u)?$/)[1]; - var resolved = fitter(locale, defaultLocale); - - if (extensionFilter !== undefined) { // Filter to expected sub-tags - var filtered = []; - callInstanceFunc(ArrayInstanceForEach, subTags, (function (subTag) { - var parts = platform.builtInRegexMatch(subTag, /([^-]*)-?(.*)?/); // [0] entire thing; [1] key; [2] value - var key = parts[1]; - if (callInstanceFunc(ArrayInstanceIndexOf, extensionFilter, key) !== -1) { - callInstanceFunc(ArrayInstancePush, filtered, subTag); - } - })); - subTags = filtered; - } - - // As long as we are using the JS version of getExtensions on ICU, "u" will be considered an extension - // of a locale like "de-u-co-phonebk" - // Thus, we can't add the -u- ourselves here - const withoutSubTags = resolved; - if (resolved) { - if (subTags && getArrayLength(subTags) > 0) { - if (isPlatformUsingICU) { - resolved += "-"; - } else { - resolved += "-u-"; - } - } - - resolved += callInstanceFunc(ArrayInstanceJoin, subTags, "-"); - } else { - resolved = undefined; - } - - return setPrototype({ - locale: resolved, - subTags: subTags, - localeWithoutSubtags: withoutSubTags - }, null); - } - - var resolveLocales = function (givenLocales, matcher, extensionFilter, defaultLocaleFunc) { - var fitter = matcher === "lookup" ? resolveLocaleLookup : resolveLocaleBestFit; - var length = getArrayLength(givenLocales); - - var defaultLocale = defaultLocaleFunc(); - - length = length !== undefined ? length : 0; - for (var i = 0; i < length; i++) { - var resolved = resolveLocaleHelper(givenLocales[i], fitter, extensionFilter, defaultLocale); - if (resolved.locale !== undefined) { - return resolved; - } - } - return resolveLocaleHelper(defaultLocale, fitter, undefined, defaultLocale); - } - - // get just the language-script-region from the default locale - let __strippedDefaultLocale = undefined; - var strippedDefaultLocale = function () { - if (__strippedDefaultLocale) { - return __strippedDefaultLocale; - } - - if (isPlatformUsingICU) { - if (!LANG_TAG_BASE_RE) { - InitializeLangTagREs(); - } - - const def = GetDefaultLocale(); - const match = platform.builtInRegexMatch(def, LANG_TAG_BASE_RE); - if (match) { - // strip extensions by matching only the base - __strippedDefaultLocale = match[0]; - } else { - __strippedDefaultLocale = def; - } - } else { - // the only thing to strip off of a WinGlob locale is the collation, - // which comes after the underscore - __strippedDefaultLocale = platform.builtInRegexMatch(GetDefaultLocale(), /([^_]*).*/)[1]; - } - - return __strippedDefaultLocale; - }; - - var Internal = (function () { - return setPrototype({ - ToObject: function (o) { - if (o === null) { - platform.raiseNeedObject(); - } - return o !== undefined ? Object(o) : undefined; - }, - - ToString: function (s) { - return s !== undefined ? String(s) : undefined; - }, - - ToNumber: function (n) { - return n === undefined ? NaN : Number(n); - }, - - ToLogicalBoolean: function (v) { - return v !== undefined ? Boolean(v) : undefined; - }, - - ToUint32: function (n) { - var num = Number(n), - ret = 0; - if (!isNaN(num) && isFinite(num)) { - ret = Math.abs(num % Math.pow(2, 32)); - } - return ret; - }, - - HasProperty: function (o, p) { - // Walk the prototype chain - while (o) { - if (callInstanceFunc(ObjectInstanceHasOwnProperty, o, p)) { - return true; - } - o = ObjectGetPrototypeOf(o); - } - } - }, null) - })(); - - // Internal ops implemented in JS: - function GetOption(options, property, type, values, fallback) { - let value = options[property]; - - if (value !== undefined) { - if (type == "boolean") { - value = Internal.ToLogicalBoolean(value); - } - - if (type == "string") { - value = Internal.ToString(value); - } - - if (type == "number") { - value = Internal.ToNumber(value); - } - - if (values !== undefined && callInstanceFunc(ArrayInstanceIndexOf, values, value) == -1) { - platform.raiseOptionValueOutOfRange_3(String(value), String(property), "['" + callInstanceFunc(ArrayInstanceJoin, values, "', '") + "']"); - } - - return value; - } - - return fallback; - } - - function GetNumberOption(options, property, minimum, maximum, fallback) { - const rawValue = options[property]; - - if (typeof rawValue !== 'undefined') { - const formattedValue = Internal.ToNumber(rawValue); - - if (isNaN(formattedValue) || formattedValue < minimum || formattedValue > maximum) { - platform.raiseOptionValueOutOfRange_3(String(rawValue), String(property), "[" + minimum + " - " + maximum + "]"); - } - - return Math.floor(formattedValue); - } else { - return fallback; - } - } - - let CURRENCY_CODE_RE; - function InitializeCurrencyRegExp() { - CURRENCY_CODE_RE = /^[A-Z]{3}$/i; - } - - let LANG_TAG_BASE_RE; // language[-script[-region]] - let LANG_TAG_EXT_RE; // extension part (variant, extension, privateuse) - let LANG_TAG_RE; // full syntax of language tags (including privateuse and grandfathered) - function InitializeLangTagREs() { - // Language Tag Syntax as described in RFC 5646 #section-2.1 - // Note: All language tags are comprised only of ASCII characters (makes our job easy here) - // Note: Language tags in canonical form have case conventions, but language tags are case-insensitive for our purposes - - // Note: The ABNF syntax used in RFC 5646 #section-2.1 uses the following numeric quantifier conventions: - // - (Parentheses) are used for grouping - // - PRODUCTION => exactly 1 of PRODUCTION /PRODUCTION/ - // - [PRODUCTION] => 0 or 1 of PRODUCTION /(PRODUCTION)?/ - // - #PRODUCTION => exactly # of PRODUCTION /(PRODUCTION){#}/ - // - a*bPRODUCTION (where a and b are optional) - // - *PRODUCTION => any number of PRODUCTION /(PRODUCTION)*/ - // - 1*PRODUCTION => 1 or more of PRODUCTION /(PRODUCTION)+/ - // - #*PRODUCTION => # or more of PRODUCTION /(PRODUCTION){#,}/ - // - *#PRODUCTION => 0 to # (inclusive) of PRODUCTION /(PRODUCTION){,#}/ or /(PRODUCTION){0,#}/ - // - a*bPRODUCTION => a to b (inclusive) of PRODUCTION /(PRODUCTION){a,b}/ - - const ALPHA = "[A-Z]"; - const DIGIT = "[0-9]"; - const alphanum = `(?:${ALPHA}|${DIGIT})`; - - const regular = "\\b(?:art-lojban|cel-gaulish|no-bok|no-nyn|zh-guoyu|zh-hakka|zh-min|zh-min-nan|zh-xiang)\\b"; - const irregular = "\\b(?:en-GB-oed|i-ami|i-bnn|i-default|i-enochian|i-hak|i-klingon|i-lux|i-mingo" + - "|i-navajo|i-pwn|i-tao|i-tay|i-tsu|sgn-BE-FR|sgn-BE-NL|sgn-CH-DE)\\b"; - const grandfathered = `\\b(?:${regular}|${irregular})\\b`; - - const privateuse = `\\b(?:x(?:-${alphanum}{1,8}\\b)+)\\b`; // privateuse = "x" 1*("-" (1*8alphanum)) - const singleton = `\\b(?:${DIGIT}|[A-WY-Z])\\b`; // singleton ~= alphanum except for 'x' ; (paraphrased) - const extension = `\\b(?:${singleton}(?:-${alphanum}{2,8})+)\\b`; // extension = singleton 1*("-" (2*8alphanum)) - const variant = `\\b(?:${alphanum}{5,8}|${DIGIT}${alphanum}{3})\\b`; // variant = 5*8alphanum / (DIGIT 3alphanum) - const region = `\\b(?:${ALPHA}{2}|${DIGIT}{3})\\b`; // region = 2ALPHA / 3DIGIT - - const script = `\\b(?:${ALPHA}{4})\\b`; // script = 4ALPHA - const extlang = `\\b(?:${ALPHA}{3}\\b(?:-${ALPHA}{3}){0,2})\\b`; // extlang = 3ALPHA *2("-" 3ALPHA) - - const language = '\\b(?:' + // language = - `${ALPHA}{2,3}` + // 2*3ALPHA ; shortest ISO 639 code - `\\b(?:-${extlang})?` + // ["-" extlang] ; sometimes followed by extended language subtags - // `|${ALPHA}{4}` + // / 4ALPHA ; or reserved for future use - // `|${ALPHA}{5,8}` + // / 5*8ALPHA ; or registered language subtag - `|${ALPHA}{4,8}` + // ~/ 4*8ALPHA ; (paraphrased: combined previous two lines) - ')\\b'; - - // below: ${language}, ${script}, and ${region} are wrapped in parens because matching groups are useful for replacement - const LANG_TAG_BASE = `\\b(${language})\\b` + // langtag = language - `\\b(?:-(${script}))?\\b` + // ["-" script] - `\\b(?:-(${region}))?\\b` ; // ["-" region] - const LANG_TAG_EXT = `\\b(?:-${variant})*\\b` + // *("-" variant) - `\\b((?:-${extension})*)\\b` + // *("-" extension) - `\\b(?:-${privateuse})?\\b` ; // ["-" privateuse] - const langtag = `\\b${LANG_TAG_BASE}\\b${LANG_TAG_EXT}\\b`; - - const LANG_TAG = `\\b(?:${langtag}|${privateuse}|${grandfathered})\\b`; // Language-Tag = ... - - LANG_TAG_BASE_RE = new RegExp(LANG_TAG_BASE, 'i'); // [1] language; [2] script; [3] region - LANG_TAG_EXT_RE = new RegExp(LANG_TAG_EXT, 'i'); // [1] extensions /((${extension})-)*/ - LANG_TAG_RE = new RegExp(LANG_TAG, 'i'); // [1] language; [2] script; [3] region; [4] extensions - } - - function IsWellFormedCurrencyCode(code) { - code = Internal.ToString(code); - - if (!CURRENCY_CODE_RE) { - InitializeCurrencyRegExp(); - } - - return platform.builtInRegexMatch(code, CURRENCY_CODE_RE) !== null; - } - - // Make sure locales is an array, remove duplicate locales, make sure each locale is valid, and canonicalize each. - function CanonicalizeLocaleList(locales) { - if (typeof locales === 'undefined') { - return []; - } - - if (typeof locales === 'string') { - locales = [locales]; - } - - locales = Internal.ToObject(locales); - const length = Internal.ToUint32(locales.length); - - // TODO: Use sets here to prevent duplicates - let seen = []; - - forEachIfPresent(locales, length, function (locale) { - if ((typeof locale !== 'string' && typeof locale !== 'object') || locale === null) { - platform.raiseNeedObjectOrString("Locale"); - } - - let tag = Internal.ToString(locale); - - if (!IsWellFormedLanguageTag(tag)) { - platform.raiseLocaleNotWellFormed(String(tag)); - } - - tag = platform.normalizeLanguageTag(tag); - - if (tag !== undefined && callInstanceFunc(ArrayInstanceIndexOf, seen, tag) === -1) { - callInstanceFunc(ArrayInstancePush, seen, tag); - } - }); - - return seen; - } - - function LookupSupportedLocales(requestedLocales, fitter, defaultLocale) { - var subset = []; - var count = 0; - callInstanceFunc(ArrayInstanceForEach, requestedLocales, function (locale) { - try { - var resolved = resolveLocaleHelper(locale, fitter, undefined, defaultLocale); - if (resolved.locale) { - ObjectDefineProperty(subset, count, { value: resolved.locale, writable: false, configurable: false, enumerable: true }); - count = count + 1; - } - } catch (ex) { - throwExIfOOMOrSOE(ex); - // Expecting an error (other than OOM or SOE), same as fitter returning undefined - } - }); - ObjectDefineProperty(subset, "length", { value: count, writable: false, configurable: false }); - return subset; - } - - var supportedLocalesOfWrapper = function (that, functionName, locales, options) { - if (that === null || that === undefined) { - platform.raiseNotAConstructor(functionName); - } - - var hiddenObj = platform.getHiddenObject(that); - if (!hiddenObj || hiddenObj.isValid !== "Valid") { - platform.raiseNotAConstructor(functionName); - } - - return supportedLocalesOf(locales, options); - } - - var canonicalizeLocaleListWrapper = function (that, functionName, locales) { - if (that === null || that === undefined) { - platform.raiseNotAConstructor(functionName); - } - - var hiddenObj = platform.getHiddenObject(that); - if (!hiddenObj || hiddenObj.isValid !== "Valid") { - platform.raiseNotAConstructor(functionName); - } - - return CanonicalizeLocaleList(locales); - } - - // Shared among all the constructors - var supportedLocalesOf = function (locales, options) { - var matcher; - locales = CanonicalizeLocaleList(locales); - - if (typeof options !== 'undefined') { - matcher = options.localeMatcher; - - if (typeof matcher !== 'undefined') { - matcher = Internal.ToString(matcher); - - if (matcher !== 'lookup' && matcher !== 'best fit') { - platform.raiseOptionValueOutOfRange_3(String(matcher), "localeMatcher", "['best fit', 'lookup']"); - } - } - } - - if (typeof matcher === 'undefined' || matcher === 'best fit') { - return LookupSupportedLocales(locales, resolveLocaleBestFit, platform.normalizeLanguageTag(strippedDefaultLocale())); - } else { - return LookupSupportedLocales(locales, resolveLocaleLookup, strippedDefaultLocale()); - } - }; - - const intlStaticMethodThisArg = setPrototype({}, null); - platform.setHiddenObject(intlStaticMethodThisArg, setPrototype({ isValid: "Valid" }, null)); - - // We wrap these functions so that we can define the correct name for this function for each Intl constructor, - // which allows us to display the correct error message for each Intl type. - const collator_supportedLocalesOf_name = "Intl.Collator.supportedLocalesOf"; - const collator_supportedLocalesOf = callInstanceFunc(FunctionInstanceBind, tagPublicFunction(collator_supportedLocalesOf_name, - function collator_supportedLocalesOf_dummyName(locales, options = undefined) { - return supportedLocalesOfWrapper(this, collator_supportedLocalesOf_name, locales, options); - }), intlStaticMethodThisArg); - - const numberFormat_supportedLocalesOf_name = "Intl.NumberFormat.supportedLocalesOf"; - const numberFormat_supportedLocalesOf = callInstanceFunc(FunctionInstanceBind, tagPublicFunction(numberFormat_supportedLocalesOf_name, - function numberFormat_supportedLocalesOf_dummyName(locales, options = undefined) { - return supportedLocalesOfWrapper(this, numberFormat_supportedLocalesOf_name, locales, options); - }), intlStaticMethodThisArg); - - const dateTimeFormat_supportedLocalesOf_name = "Intl.DateTimeFormat.supportedLocalesOf"; - const dateTimeFormat_supportedLocalesOf = callInstanceFunc(FunctionInstanceBind, tagPublicFunction(dateTimeFormat_supportedLocalesOf_name, - function dateTimeFormat_supportedLocalesOf_dummyName(locales, options = undefined) { - return supportedLocalesOfWrapper(this, dateTimeFormat_supportedLocalesOf_name, locales, options); - }), intlStaticMethodThisArg); - - const getCanonicalLocales_name = "Intl.getCanonicalLocales"; - const getCanonicalLocales = callInstanceFunc(FunctionInstanceBind, tagPublicFunction(getCanonicalLocales_name, - function getCanonicalLocales_dummyName(locales) { - return canonicalizeLocaleListWrapper(this, getCanonicalLocales_name, locales); - }), intlStaticMethodThisArg); - - // TODO: Bound functions get the "bound" prefix by default, so we need to remove it. - // When https://github.com/Microsoft/ChakraCore/issues/637 is fixed and we have a way - // to make built-in functions non-constructible, we can remove the call to - // Function.prototype.bind (i.e. FunctionInstanceBind) and just rely on tagging instead of setting the "name" manually. - ObjectDefineProperty(collator_supportedLocalesOf, 'name', { value: 'supportedLocalesOf' }); - ObjectDefineProperty(numberFormat_supportedLocalesOf, 'name', { value: 'supportedLocalesOf' }); - ObjectDefineProperty(dateTimeFormat_supportedLocalesOf, 'name', { value: 'supportedLocalesOf' }); - ObjectDefineProperty(getCanonicalLocales, 'name', { value: 'getCanonicalLocales' }); - - // If an empty string is encountered for the value of the property; that means that is by default. - // So in the case of zh-TW; "default" and "stroke" are the same. - // This list was discussed with AnBorod, AnGlass and SureshJa. - var localesAcceptingCollationValues = setPrototype({ - "es-ES": setPrototype({ "trad": "tradnl" }, null), - "lv-LV": setPrototype({ "trad": "tradnl" }, null), - "de-DE": setPrototype({ "phonebk": "phoneb" }, null), - "ja-JP": setPrototype({ "unihan": "radstr" }, null), - // We believe "pronun" means "pronunciation" - "zh-TW": setPrototype({ "phonetic": "pronun", "unihan": "radstr", "stroke": "" }, null), - "zh-HK": setPrototype({ "unihan": "radstr", "stroke": "" }, null), - "zh-MO": setPrototype({ "unihan": "radstr", "stroke": "" }, null), - "zh-CN": setPrototype({ "stroke": "stroke", "pinyin": "" }, null), - "zh-SG": setPrototype({ "stroke": "stroke", "pinyin": "" }, null) - - // The following locales are supported by Windows; however, no BCP47 equivalent collation values were found for these. - // In future releases; this list (plus most of the Collator implementation) will be changed/removed as the platform support is expected to change. - // "hu-HU": ["technl"], - // "ka-GE": ["modern"], - // "x-IV": ["mathan"] - }, null); - - // reverses the keys and values in each locale's sub-object in localesAcceptingCollationValues - // localesAcceptingCollationValues[locale][key] = value -> reverseLocalesAcceptingCollationValues[locale][value] = key - var reverseLocalesAcceptingCollationValues = (function () { - const toReturn = setPrototype({}, null); - callInstanceFunc(ArrayInstanceForEach, ObjectGetOwnPropertyNames(localesAcceptingCollationValues), function (locale) { - const collationValuesForLocale = localesAcceptingCollationValues[locale]; - const reversedCollationValues = setPrototype({}, null); - - callInstanceFunc(ArrayInstanceForEach, ObjectGetOwnPropertyNames(collationValuesForLocale), function (collation) { - const windowsTag = collationValuesForLocale[collation]; - if (windowsTag !== "") { - reversedCollationValues[windowsTag] = collation; - } - }); - - toReturn[locale] = reversedCollationValues; - }); - return toReturn; - }()); - - // mappedDefaultLocale will get the default locale and update any deprecated - // collation/sort order values it may use - let __mappedDefaultLocale = undefined; - var mappedDefaultLocale = function () { - if (__mappedDefaultLocale && platform.useCaches) { - return __mappedDefaultLocale; - } - - let locale = undefined; - let collation = undefined; - if (isPlatformUsingICU) { - // ICU's getDefaultLocale() will return a valid BCP-47/RFC 5646 langtag - locale = GetDefaultLocale(); - const match = platform.builtInRegexMatch(locale, /-u(?:-[^\-][^\-]?-[^\-]+)*-co-([^\-]+).*/); - if (match) { - // if the system default locale had a collation, strip it for now - // we will add the collation back later in this function - collation = match[1]; - locale = callInstanceFunc(StringInstanceReplace, locale, `-co-${collation}`, ""); - } - } else { - // Windows' getDefaultLocale() will return a RFC4646 langtag - const parts = platform.builtInRegexMatch(GetDefaultLocale(), /([^_]*)_?(.+)?/); - locale = parts[1]; - collation = parts[2]; - } - - if (collation === undefined) { - __mappedDefaultLocale = locale; - return __mappedDefaultLocale; - } - - // we stripped the -co-collation or _collation above, so this function adds it back - const createLocaleCollationString = function (finalLocale, finalCollation) { - if (isPlatformUsingICU) { - return `${finalLocale}-co-${finalCollation}`; - } else { - return `${finalLocale}-u-co-${finalCollation}`; - } - }; - - const collationMapForLocale = reverseLocalesAcceptingCollationValues[locale]; - if (collationMapForLocale === undefined) { - // Assume the system wouldn't give us back a bad collation value - __mappedDefaultLocale = createLocaleCollationString(locale, collation); - return __mappedDefaultLocale; - } - - const mappedCollation = collationMapForLocale[collation]; - if (mappedCollation !== undefined) { - __mappedDefaultLocale = createLocaleCollationString(locale, mappedCollation); - } else { - __mappedDefaultLocale = createLocaleCollationString(locale, collation); - } - - return __mappedDefaultLocale; - }; - - // Intl.Collator, String.prototype.localeCompare - var Collator = (function () { - - if (InitType === 'Intl' || InitType === 'String') { - - function InitializeCollator(collator, localeList, options) { - if (typeof collator != "object") { - platform.raiseNeedObject(); - } - - if (callInstanceFunc(ObjectInstanceHasOwnProperty, collator, '__initializedIntlObject') && collator.__initializedIntlObject) { - platform.raiseObjectIsAlreadyInitialized("Collator", "Collator"); - } - - collator.__initializedIntlObject = true; - - // Extract options - if (typeof options === 'undefined') { - options = setPrototype({}, null); - } else { - options = Internal.ToObject(options); - } - - var matcher = GetOption(options, "localeMatcher", "string", ["lookup", "best fit"], "best fit"); - var usage = GetOption(options, "usage", "string", ["sort", "search"], "sort"); - var sensitivity = GetOption(options, "sensitivity", "string", ["base", "accent", "case", "variant"], undefined); - var ignorePunctuation = GetOption(options, "ignorePunctuation", "boolean", undefined, false); - var caseFirst = GetOption(options, "caseFirst", "string", ["upper", "lower", "false"], undefined); - var numeric = GetOption(options, "numeric", "boolean", [true, false], undefined); - - // Deal with the locales and extensions - localeList = CanonicalizeLocaleList(localeList); - var resolvedLocaleInfo = resolveLocales(localeList, matcher, undefined, mappedDefaultLocale); - - var collation = "default"; - var resolvedLocaleLookup = resolveLocaleLookup(resolvedLocaleInfo.localeWithoutSubtags); - var collationAugmentedLocale = resolvedLocaleLookup; - - if (resolvedLocaleInfo.subTags) { - callInstanceFunc(ArrayInstanceForEach, resolvedLocaleInfo.subTags, function (subTag) { - var parts = platform.builtInRegexMatch(subTag, /([^-]*)-?(.*)?/); // [0] entire thing; [1] key; [2] value - var key = parts[1]; - var value = parts[2] === "" ? undefined : parts[2]; - if (key === "kf" && caseFirst === undefined) { - caseFirst = GetOption(setPrototype({ caseFirst: value }, null), "caseFirst", "string", ["upper", "lower", "false"], undefined); - } else if (key === "kn" && numeric === undefined) { - if (value !== undefined) { - numeric = Internal.ToLogicalBoolean(callInstanceFunc(StringInstanceToLowerCase, value) === "true"); - } else { - numeric = true; - } - } else if (key === "co" && value !== undefined && value !== "default" && value !== "search" && value !== "sort" && value !== "standard") { - // Ignore these collation values as they shouldn't have any impact - collation = value; - } - }); - } - if (collation !== "default") { - var accepedCollationForLocale = localesAcceptingCollationValues[collationAugmentedLocale]; - var windowsCollation = ""; - if (accepedCollationForLocale !== undefined && (windowsCollation = accepedCollationForLocale[collation]) !== undefined) { - if (windowsCollation !== "") { - collationAugmentedLocale = collationAugmentedLocale + "_" + windowsCollation; - } - } - else { - collation = "default"; - } - } - - // Correct options if need be. - if (caseFirst === undefined) { - try { - var num = platform.compareString('A', 'a', resolvedLocaleLookup, undefined, undefined, undefined, undefined); - } catch (e) { - // Rethrow OOM or SOE - throwExIfOOMOrSOE(e); - - // Otherwise, Generic message to cover the exception throw from the CompareStringEx api. - // The platform's exception is also generic and in most if not all cases specifies that "a" argument is invalid. - // We have no other information from the platform on the cause of the exception. - platform.raiseOptionValueOutOfRange(); - } - - if (num === 0) { - caseFirst = 'false'; - } else if (num === -1) { - caseFirst = 'upper'; - } else { - caseFirst = 'lower'; - } - } - - if (sensitivity === undefined) { - sensitivity = "variant"; - } - - if (numeric === undefined) { - numeric = false; - } - - // Set the options on the object - collator.__matcher = matcher; - collator.__locale = resolvedLocaleInfo.localeWithoutSubtags; - collator.__localeForCompare = collationAugmentedLocale; - collator.__usage = usage; - collator.__sensitivity = sensitivity; - collator.__ignorePunctuation = ignorePunctuation; - collator.__caseFirst = caseFirst; - collator.__numeric = numeric; - collator.__collation = collation; - collator.__initializedCollator = true; - } - - platform.registerBuiltInFunction(tagPublicFunction("String.prototype.localeCompare", function () { - var that = arguments[0]; - if (this === undefined || this === null) { - platform.raiseThis_NullOrUndefined("String.prototype.localeCompare"); - } - else if (that === null) { - platform.raiseNeedObject(); - } - // ToString must be called on this/that argument before we do any other operation, as other operations in InitializeCollator may also be observable - var thisArg = String(this); - var that = String(that); - var stateObject = setPrototype({}, null); - InitializeCollator(stateObject, arguments[1], arguments[2]); - return Number(platform.compareString( - thisArg, - that, - stateObject.__localeForCompare, - toEnum(CollatorSensitivity, stateObject.__sensitivity), - stateObject.__ignorePunctuation, - stateObject.__numeric, - toEnum(CollatorCaseFirst, stateObject.__caseFirst) - )); - }), IntlBuiltInFunctionID.StringLocaleCompare); - - if (InitType === 'Intl') { - - function Collator(locales = undefined, options = undefined) { - if (this === Intl || this === undefined) { - return new Collator(locales, options); - } - - let obj = Internal.ToObject(this); - if (!ObjectIsExtensible(obj)) { - platform.raiseObjectIsNonExtensible("Collator"); - } - - // Use the hidden object to store data - let hiddenObject = platform.getHiddenObject(obj); - - if (hiddenObject === undefined) { - hiddenObject = setPrototype({}, null); - platform.setHiddenObject(obj, hiddenObject); - } - - InitializeCollator(hiddenObject, locales, options); - - // Add the bound compare - hiddenObject.__boundCompare = callInstanceFunc(FunctionInstanceBind, compare, obj); - delete hiddenObject.__boundCompare.name; - return obj; - } - tagPublicFunction("Intl.Collator", Collator); - - function compare(a, b) { - if (typeof this !== 'object') { - platform.raiseNeedObjectOfType("Collator.prototype.compare", "Collator"); - } - - var hiddenObject = platform.getHiddenObject(this); - if (hiddenObject === undefined || !hiddenObject.__initializedCollator) { - platform.raiseNeedObjectOfType("Collator.prototype.compare", "Collator"); - } - - a = String(a); - b = String(b); - - return Number(platform.compareString( - a, - b, - hiddenObject.__localeForCompare, - toEnum(CollatorSensitivity, hiddenObject.__sensitivity), - hiddenObject.__ignorePunctuation, - hiddenObject.__numeric, - toEnum(CollatorCaseFirst, hiddenObject.__caseFirst) - )); - } - tagPublicFunction("Intl.Collator.prototype.compare", compare); - - ObjectDefineProperty(Collator, 'supportedLocalesOf', { value: collator_supportedLocalesOf, writable: true, configurable: true }); - - ObjectDefineProperty(Collator, 'prototype', { value: new Collator(), writable: false, enumerable: false, configurable: false }); - setPrototype(Collator.prototype, Object.prototype); - - ObjectDefineProperty(Collator.prototype, 'constructor', { value: Collator, writable: true, enumerable: false, configurable: true }); - - ObjectDefineProperty(Collator.prototype, 'resolvedOptions', { - value: function resolvedOptions() { - if (typeof this !== 'object') { - platform.raiseNeedObjectOfType("Collator.prototype.resolvedOptions", "Collator"); - } - var hiddenObject = platform.getHiddenObject(this); - if (hiddenObject === undefined || !hiddenObject.__initializedCollator) { - platform.raiseNeedObjectOfType("Collator.prototype.resolvedOptions", "Collator"); - } - - return { - locale: hiddenObject.__locale, - usage: hiddenObject.__usage, - sensitivity: hiddenObject.__sensitivity, - ignorePunctuation: hiddenObject.__ignorePunctuation, - collation: hiddenObject.__collation, // "co" unicode extension - numeric: hiddenObject.__numeric, // "ka" unicode extension TODO: Determine if this is supported (doesn't have to be) - caseFirst: hiddenObject.__caseFirst // "kf" unicode extension TODO: Determine if this is supported (doesn't have to be) - } - }, writable: true, enumerable: false, configurable: true - }); - - ObjectDefineProperty(Collator.prototype, 'compare', { - get: tagPublicFunction('get compare', function () { - if (typeof this !== 'object') { - platform.raiseNeedObjectOfType("Collator.prototype.compare", "Collator"); - } - - var hiddenObject = platform.getHiddenObject(this); - if (hiddenObject === undefined || !hiddenObject.__initializedCollator) { - platform.raiseNeedObjectOfType("Collator.prototype.compare", "Collator"); - } - - return hiddenObject.__boundCompare; - }), enumerable: false, configurable: true - }); - - return Collator; - } - } - // 'Init.Collator' not defined if reached here. Return 'undefined' - return undefined; - })(); - - // Intl.NumberFormat, Number.prototype.toLocaleString - var NumberFormat = (function () { - if (InitType === 'Intl' || InitType === 'Number') { - function InitializeNumberFormat(numberFormat, localeList, options) { - if (typeof numberFormat != "object") { - platform.raiseNeedObject(); - } - - if (callInstanceFunc(ObjectInstanceHasOwnProperty, numberFormat, '__initializedIntlObject') && numberFormat.__initializedIntlObject) { - platform.raiseObjectIsAlreadyInitialized("NumberFormat", "NumberFormat"); - } - - numberFormat.__initializedIntlObject = true; - - // Extract options - if (typeof options === 'undefined') { - options = setPrototype({}, null); - } else { - options = Internal.ToObject(options); - } - - var matcher = GetOption(options, "localeMatcher", "string", ["lookup", "best fit"], "best fit"); - var style = GetOption(options, "style", "string", ["decimal", "percent", "currency"], "decimal"); - - var formatterToUse = NumberFormatStyle.DECIMAL; // DEFAULT - if (style === 'percent') { - formatterToUse = NumberFormatStyle.PERCENT; - } else if (style === 'currency') { - formatterToUse = NumberFormatStyle.CURRENCY; - } - - var currency = GetOption(options, "currency", "string", undefined, undefined); - var currencyDisplay = GetOption(options, 'currencyDisplay', 'string', ['code', 'symbol', 'name'], 'symbol'); - var currencyDigits = undefined; - - var minimumIntegerDigits = GetNumberOption(options, 'minimumIntegerDigits', 1, 21, 1); - var minimumFractionDigits = undefined; - var maximumFractionDigits = undefined; - var maximumFractionDigitsDefault = undefined; - - var minimumSignificantDigits = options.minimumSignificantDigits; - var maximumSignificantDigits = options.maximumSignificantDigits; - - if (typeof minimumSignificantDigits !== 'undefined' || typeof maximumSignificantDigits !== 'undefined') { - minimumSignificantDigits = GetNumberOption(options, 'minimumSignificantDigits', 1, 21, 1); - maximumSignificantDigits = GetNumberOption(options, 'maximumSignificantDigits', minimumSignificantDigits, 21, 21); - } - - var useGrouping = GetOption(options, 'useGrouping', 'boolean', undefined, true); - - // Deal with the locales and extensions - localeList = CanonicalizeLocaleList(localeList); - var resolvedLocaleInfo = resolveLocales(localeList, matcher, ["nu"], strippedDefaultLocale); - - // Correct the options if necessary - if (typeof currency !== 'undefined' && !IsWellFormedCurrencyCode(currency)) { - platform.raiseInvalidCurrencyCode(String(currency)); - } - - if (style === "currency") { - if (typeof currency === 'undefined') { - platform.raiseMissingCurrencyCode(); - } - currency = callInstanceFunc(StringInstanceToUpperCase, currency); - try { - currencyDigits = platform.currencyDigits(currency); - } catch (e) { - throwExIfOOMOrSOE(e); - platform.raiseInvalidCurrencyCode(String(currency)); - } - minimumFractionDigits = GetNumberOption(options, 'minimumFractionDigits', 0, 20, currencyDigits); - maximumFractionDigitsDefault = Math.max(currencyDigits, minimumFractionDigits); - } else { - currency = undefined; - currencyDisplay = undefined; - minimumFractionDigits = GetNumberOption(options, 'minimumFractionDigits', 0, 20, 0); - if (style === "percent") { - maximumFractionDigitsDefault = Math.max(minimumFractionDigits, 0); - } else { - maximumFractionDigitsDefault = Math.max(minimumFractionDigits, 3) - } - } - - maximumFractionDigits = GetNumberOption(options, 'maximumFractionDigits', minimumFractionDigits, 20, maximumFractionDigitsDefault); - - // Set the options on the object - numberFormat.__localeMatcher = matcher; - numberFormat.__locale = resolvedLocaleInfo.locale; - numberFormat.__style = style; - - if (currency !== undefined) { - numberFormat.__currency = currency; - } - - if (currencyDisplay !== undefined) { - numberFormat.__currencyDisplay = currencyDisplay; - numberFormat.__currencyDisplayToUse = NumberFormatCurrencyDisplay.DEFAULT; - if (currencyDisplay === "symbol") { - numberFormat.__currencyDisplayToUse = NumberFormatCurrencyDisplay.SYMBOL; - } else if (currencyDisplay === "code") { - numberFormat.__currencyDisplayToUse = NumberFormatCurrencyDisplay.CODE; - } else if (currencyDisplay === "name") { - numberFormat.__currencyDisplayToUse = NumberFormatCurrencyDisplay.NAME; - } - } - - numberFormat.__minimumIntegerDigits = minimumIntegerDigits; - numberFormat.__minimumFractionDigits = minimumFractionDigits; - numberFormat.__maximumFractionDigits = maximumFractionDigits; - - if (maximumSignificantDigits !== undefined) { - numberFormat.__minimumSignificantDigits = minimumSignificantDigits; - numberFormat.__maximumSignificantDigits = maximumSignificantDigits; - } - - numberFormat.__formatterToUse = formatterToUse; - numberFormat.__useGrouping = useGrouping; - - try { - // Cache api instance and update numbering system on the object - platform.cacheNumberFormat(numberFormat); - } catch (e) { - throwExIfOOMOrSOE(e); - // Generic message to cover the exception throw from the platform. - // The platform's exception is also generic and in most if not all cases specifies that "a" argument is invalid. - // We have no other information from the platform on the cause of the exception. - platform.raiseOptionValueOutOfRange(); - } - - if (!numberFormat.__numberingSystem) { - numberFormat.__numberingSystem = "latn"; // assume Latin numerals by default - } - - numberFormat.__numberingSystem = callInstanceFunc(StringInstanceToLowerCase, numberFormat.__numberingSystem); - numberFormat.__initializedNumberFormat = true; - } - - platform.registerBuiltInFunction(tagPublicFunction("Number.prototype.toLocaleString", function () { - if ((typeof this) !== 'number' && !(this instanceof Number)) { - platform.raiseNeedObjectOfType("Number.prototype.toLocaleString", "Number"); - } - - var stateObject = setPrototype({}, null); - InitializeNumberFormat(stateObject, arguments[0], arguments[1]); - - var n = Internal.ToNumber(this); - return String(platform.formatNumber(n, stateObject)); - }), IntlBuiltInFunctionID.NumberToLocaleString); - - if (InitType === 'Intl') { - function NumberFormat(locales = undefined, options = undefined) { - if (this === Intl || this === undefined) { - return new NumberFormat(locales, options); - } - - let obj = Internal.ToObject(this); - - if (!ObjectIsExtensible(obj)) { - platform.raiseObjectIsNonExtensible("NumberFormat"); - } - - // Use the hidden object to store data - let hiddenObject = platform.getHiddenObject(obj); - - if (hiddenObject === undefined) { - hiddenObject = setPrototype({}, null); - platform.setHiddenObject(obj, hiddenObject); - } - - InitializeNumberFormat(hiddenObject, locales, options); - - hiddenObject.__boundFormat = callInstanceFunc(FunctionInstanceBind, format, obj) - delete hiddenObject.__boundFormat.name; - - return obj; - } - tagPublicFunction("Intl.NumberFormat", NumberFormat); - - function format(n) { - n = Internal.ToNumber(n); - - if (typeof this !== 'object') { - platform.raiseNeedObjectOfType("NumberFormat.prototype.format", "NumberFormat"); - } - - var hiddenObject = platform.getHiddenObject(this); - if (hiddenObject === undefined || !hiddenObject.__initializedNumberFormat) { - platform.raiseNeedObjectOfType("NumberFormat.prototype.format", "NumberFormat"); - } - - return String(platform.formatNumber(n, hiddenObject)); - } - tagPublicFunction("Intl.NumberFormat.prototype.format", format); - - ObjectDefineProperty(NumberFormat, 'supportedLocalesOf', { value: numberFormat_supportedLocalesOf, writable: true, configurable: true }); - - var options = ['locale', 'numberingSystem', 'style', 'currency', 'currencyDisplay', 'minimumIntegerDigits', - 'minimumFractionDigits', 'maximumFractionDigits', 'minimumSignificantDigits', 'maximumSignificantDigits', - 'useGrouping']; - - ObjectDefineProperty(NumberFormat, 'prototype', { value: new NumberFormat(), writable: false, enumerable: false, configurable: false }); - setPrototype(NumberFormat.prototype, Object.prototype); - ObjectDefineProperty(NumberFormat.prototype, 'constructor', { value: NumberFormat, writable: true, enumerable: false, configurable: true }); - - ObjectDefineProperty(NumberFormat.prototype, 'resolvedOptions', { - value: function resolvedOptions() { - if (typeof this !== 'object') { - platform.raiseNeedObjectOfType("NumberFormat.prototype.resolvedOptions", "NumberFormat"); - } - var hiddenObject = platform.getHiddenObject(this); - if (hiddenObject === undefined || !hiddenObject.__initializedNumberFormat) { - platform.raiseNeedObjectOfType("NumberFormat.prototype.resolvedOptions", "NumberFormat"); - } - - var resolvedOptions = setPrototype({}, null); - - callInstanceFunc(ArrayInstanceForEach, options, function (option) { - if (typeof hiddenObject['__' + option] !== 'undefined') { - resolvedOptions[option] = hiddenObject['__' + option]; - } - }); - - return setPrototype(resolvedOptions, {}); - }, writable: true, enumerable: false, configurable: true - }); - - ObjectDefineProperty(NumberFormat.prototype, 'format', { - get: tagPublicFunction('get format', function () { - if (typeof this !== 'object') { - platform.raiseNeedObjectOfType("NumberFormat.prototype.format", "NumberFormat"); - } - - var hiddenObject = platform.getHiddenObject(this); - if (hiddenObject === undefined || !hiddenObject.__initializedNumberFormat) { - platform.raiseNeedObjectOfType("NumberFormat.prototype.format", "NumberFormat"); - } - - return hiddenObject.__boundFormat; - }), enumerable: false, configurable: true - }); - - return NumberFormat; - } - } - // 'Init.NumberFormat' not defined if reached here. Return 'undefined' - return undefined; - })(); - - // Intl.DateTimeFormat, Date.prototype.toLocaleString, Date.prototype.toLocaleDateString, Date.prototype.toLocaleTimeString - var DateTimeFormat = (function () { - if (InitType === 'Intl' || InitType === 'Date') { - function ToDateTimeOptions(options, required, defaults) { - if (options === undefined) { - options = setPrototype({}, null); - } else { - options = Internal.ToObject(options); - } - - var needDefaults = true; - if (required === "date" || required === "any") { - if (options.weekday !== undefined || options.year !== undefined || options.month !== undefined || options.day !== undefined) { - needDefaults = false; - } - } - if (required === "time" || required === "any") { - if (options.hour !== undefined || options.minute !== undefined || options.second !== undefined) { - needDefaults = false; - } - } - - if (needDefaults && (defaults === "date" || defaults === "all")) { - ObjectDefineProperty(options, "year", { - value: "numeric", writable: true, - enumerable: true, configurable: true - }); - ObjectDefineProperty(options, "month", { - value: "numeric", writable: true, - enumerable: true, configurable: true - }); - ObjectDefineProperty(options, "day", { - value: "numeric", writable: true, - enumerable: true, configurable: true - }); - } - if (needDefaults && (defaults === "time" || defaults === "all")) { - ObjectDefineProperty(options, "hour", { - value: "numeric", writable: true, - enumerable: true, configurable: true - }); - ObjectDefineProperty(options, "minute", { - value: "numeric", writable: true, - enumerable: true, configurable: true - }); - ObjectDefineProperty(options, "second", { - value: "numeric", writable: true, - enumerable: true, configurable: true - }); - } - return options; - } - - // Currently you cannot format date pieces and time pieces together, so this builds up a format template for each separately. - function EcmaOptionsToWindowsTemplate(options) { - var template = []; - - if (options.weekday) { - if (options.weekday === 'narrow' || options.weekday === 'short') { - callInstanceFunc(ArrayInstancePush, template, 'dayofweek.abbreviated'); - } else if (options.weekday === 'long') { - callInstanceFunc(ArrayInstancePush, template, 'dayofweek.full'); - } - } - - // TODO: Era not supported - if (options.year) { - if (options.year === '2-digit') { - callInstanceFunc(ArrayInstancePush, template, 'year.abbreviated'); - } else if (options.year === 'numeric') { - callInstanceFunc(ArrayInstancePush, template, 'year.full'); - } - } - - if (options.month) { - if (options.month === '2-digit' || options.month === 'numeric') { - callInstanceFunc(ArrayInstancePush, template, 'month.numeric') - } else if (options.month === 'short' || options.month === 'narrow') { - callInstanceFunc(ArrayInstancePush, template, 'month.abbreviated'); - } else if (options.month === 'long') { - callInstanceFunc(ArrayInstancePush, template, 'month.full'); - } - } - - if (options.day) { - callInstanceFunc(ArrayInstancePush, template, 'day'); - } - - if (options.timeZoneName) { - if (options.timeZoneName === "short") { - callInstanceFunc(ArrayInstancePush, template, 'timezone.abbreviated'); - } else if (options.timeZoneName === "long") { - callInstanceFunc(ArrayInstancePush, template, 'timezone.full'); - } - } - - callInstanceFunc(ArrayInstanceForEach, ['hour', 'minute', 'second'], function (opt) { - if (options[opt]) { - callInstanceFunc(ArrayInstancePush, template, opt); - } - }); - - // TODO: Timezone Name not supported. - return getArrayLength(template) > 0 ? callInstanceFunc(ArrayInstanceJoin, template, ' ') : undefined; - } - - var WindowsToEcmaCalendarMap = { - 'GregorianCalendar': 'gregory', - 'HebrewCalendar': 'hebrew', - 'HijriCalendar': 'islamic', - 'JapaneseCalendar': 'japanese', - 'JulianCalendar': 'julian', - 'KoreanCalendar': 'korean', - 'UmAlQuraCalendar': 'islamic-civil', - 'ThaiCalendar': 'thai', - 'TaiwanCalendar': 'taiwan' - }; - - function WindowsToEcmaCalendar(calendar) { - if (typeof calendar === 'undefined') { - return ''; - } - - return WindowsToEcmaCalendarMap[calendar] || 'gregory'; - } - - // Certain formats have similar patterns on both ecma and windows; will use helper methods for them - function correctWeekdayEraMonthPattern(patternString, userValue, searchParam) { - // parts[1] is either dayofweek.solo, dayofweek, era or month; parts[2] is either abbreviated or full - var parts = platform.builtInRegexMatch(patternString, RegExp("{(" + searchParam + "(?:\\.solo)?)\\.([a-z]*)(?:\\([0-9]\\))?}")); - // If this happens that means windows removed the specific pattern (which isn't expected; but better be safe) - if (parts === null) { - RaiseAssert(new Error("Error when correcting windows returned weekday/Era/Month pattern; regex returned null. \nInput was: '" + patternString + "'\nRegex: '" + "{(" + searchParam + "(\\.solo)?)\\.([a-z]*)(\\([0-9]\\))?}'")); - return patternString; - } - - if (parts[2] !== "full" && userValue === "long") { - return callInstanceFunc(StringInstanceReplace, patternString, parts[0], "{" + parts[1] + "." + "full" + "}"); - } else if (userValue !== "long") { - return callInstanceFunc(StringInstanceReplace, patternString, parts[0], "{" + parts[1] + "." + (userValue === "short" ? "abbreviated" : "abbreviated(1)") + "}"); - } - return patternString; - } - - function correctDayHourMinuteSecondMonthPattern(patternString, userValue, searchParam) { - // parts[1] is either month, day, hour, minute, or second - // REVIEW (doilij) is it even possible to have a '.solo' (i.e. /(?:\\.solo)?/ ) in the above cases? - var parts = platform.builtInRegexMatch(patternString, RegExp("{(" + searchParam + ")(?:\\.solo)?\\.([a-z]*)(?:\\([0-9]\\))?}")); - if (parts === null) { - RaiseAssert(new Error("Error when correcting windows returned day/hour/minute/second/month pattern; regex returned null. \nInput was: '" + patternString + "'\nRegex: '" + "{(" + searchParam + "(\\.solo)?)\\.([a-z]*)(\\([0-9]\\))?}'")); - return patternString; - } - - // Only correct the 2 digit; unless part[2] isn't integer - if (userValue === "2-digit") { - return callInstanceFunc(StringInstanceReplace, patternString, parts[0], "{" + parts[1] + ".integer(2)}"); - } else if (parts[2] !== "integer") { - return callInstanceFunc(StringInstanceReplace, patternString, parts[0], "{" + parts[1] + ".integer}"); - } - - return patternString; - } - - // Perhaps the level of validation that we have might not be required for this method - function updatePatternStrings(patternString, dateTimeFormat) { - if (dateTimeFormat.__weekday !== undefined) { - patternString = correctWeekdayEraMonthPattern(patternString, dateTimeFormat.__weekday, "dayofweek"); - } - - if (dateTimeFormat.__era !== undefined) { - // This is commented because not all options are supported for locales that do have era; - // In addition, we can't force era to be part of a locale using templates. - // patternString = correctWeekdayEraMonthPattern(patternString, dateTimeFormat.__era, "era", 2); - } - - if (dateTimeFormat.__year === "2-digit") { - var parts = platform.builtInRegexMatch(patternString, /\{year\.[a-z]*(\([0-9]\))?\}/); - if (parts === null) { - RaiseAssert(new Error("Error when correcting windows returned year; regex returned null")); - } else { - patternString = callInstanceFunc(StringInstanceReplace, patternString, parts[0], "{year.abbreviated(2)}"); - } - } else if (dateTimeFormat.__year === "full") { - var parts = platform.builtInRegexMatch(patternString, /\{year\.[a-z]*(\([0-9]\))?\}/); - if (parts === null) { - RaiseAssert(new Error("Error when correcting windows returned year; regex returned null")); - } else { - patternString = callInstanceFunc(StringInstanceReplace, patternString, parts[0], "{year.full}"); - } - } - - // Month partially overlaps with weekday/month; unless it's 2-digit or numeric in which case it overlaps with day/hour/minute/second - if (dateTimeFormat.__month !== undefined && dateTimeFormat.__month !== "2-digit" && dateTimeFormat.__month !== "numeric") { - patternString = correctWeekdayEraMonthPattern(patternString, dateTimeFormat.__month, "month"); - } else if (dateTimeFormat.__month !== undefined) { - patternString = correctDayHourMinuteSecondMonthPattern(patternString, dateTimeFormat.__month, "month"); - } - - if (dateTimeFormat.__day !== undefined) { - patternString = correctDayHourMinuteSecondMonthPattern(patternString, dateTimeFormat.__day, "day"); - } - - if (dateTimeFormat.__hour !== undefined) { - patternString = correctDayHourMinuteSecondMonthPattern(patternString, dateTimeFormat.__hour, "hour"); - } - - if (dateTimeFormat.__minute !== undefined) { - patternString = correctDayHourMinuteSecondMonthPattern(patternString, dateTimeFormat.__minute, "minute"); - } - - if (dateTimeFormat.__second !== undefined) { - patternString = correctDayHourMinuteSecondMonthPattern(patternString, dateTimeFormat.__second, "second"); - } - - if (dateTimeFormat.__timeZoneName !== undefined) { - patternString = correctWeekdayEraMonthPattern(patternString, dateTimeFormat.__timeZoneName, "timezone"); - } - - return patternString; - } - - function InitializeDateTimeFormat(dateTimeFormat, localeList, options) { - if (typeof dateTimeFormat != "object") { - platform.raiseNeedObject(); - } - - if (callInstanceFunc(ObjectInstanceHasOwnProperty, dateTimeFormat, '__initializedIntlObject') && dateTimeFormat.__initializedIntlObject) { - platform.raiseObjectIsAlreadyInitialized("DateTimeFormat", "DateTimeFormat"); - } - - dateTimeFormat.__initializedIntlObject = true; - - // Extract the options - options = ToDateTimeOptions(options, "any", "date"); - - var matcher = GetOption(options, "localeMatcher", "string", ["lookup", "best fit"], "best fit"); - var timeZone = GetOption(options, "timeZone", "string", undefined, undefined); - - if (timeZone !== undefined) { - timeZone = platform.validateAndCanonicalizeTimeZone(timeZone); - } else { - timeZone = platform.getDefaultTimeZone(); - } - - if (timeZone === undefined) { - platform.raiseOptionValueOutOfRange(); - } - - // Format options - var weekday = GetOption(options, "weekday", "string", ['narrow', 'short', 'long'], undefined); - var era = GetOption(options, "era", "string", ['narrow', 'short', 'long'], undefined); - var year = GetOption(options, "year", "string", ['2-digit', 'numeric'], undefined); - var month = GetOption(options, "month", "string", ['2-digit', 'numeric', 'narrow', 'short', 'long'], undefined); - var day = GetOption(options, "day", "string", ['2-digit', 'numeric'], undefined); - var hour = GetOption(options, "hour", "string", ['2-digit', 'numeric'], undefined); - var minute = GetOption(options, "minute", "string", ['2-digit', 'numeric'], undefined); - var second = GetOption(options, "second", "string", ['2-digit', 'numeric'], undefined); - var timeZoneName = GetOption(options, "timeZoneName", "string", ['short', 'long'], undefined); - - var hour12 = hour ? GetOption(options, "hour12", "boolean", undefined, undefined) : undefined; - var formatMatcher = GetOption(options, "formatMatcher", "string", ["basic", "best fit"], "best fit"); - - var windowsClock = hour12 !== undefined ? (hour12 ? "12HourClock" : "24HourClock") : undefined; - - var templateString = EcmaOptionsToWindowsTemplate(setPrototype({ - weekday: weekday, - era: era, - year: year, - month: month, - day: day, - hour: hour, - minute: minute, - second: second, - timeZoneName: timeZoneName - }, null)); - - // Deal with the locale - localeList = CanonicalizeLocaleList(localeList); - var resolvedLocaleInfo = resolveLocales(localeList, matcher, ["nu", "ca"], strippedDefaultLocale); - - // Assign the options - dateTimeFormat.__matcher = matcher; - dateTimeFormat.__timeZone = timeZone; - dateTimeFormat.__locale = resolvedLocaleInfo.locale; - - // Format options - dateTimeFormat.__weekday = weekday; - dateTimeFormat.__era = era; - dateTimeFormat.__year = year; - dateTimeFormat.__month = month; - dateTimeFormat.__day = day; - dateTimeFormat.__hour = hour; - dateTimeFormat.__minute = minute; - dateTimeFormat.__second = second; - dateTimeFormat.__timeZoneName = timeZoneName; - - dateTimeFormat.__hour12 = hour12; - dateTimeFormat.__formatMatcher = formatMatcher; - dateTimeFormat.__windowsClock = windowsClock; - - dateTimeFormat.__templateString = templateString; - - /* - * NOTE: - * Pattern string's are position-sensitive; while templates are not. - * If we specify {hour.integer(2)}:{minute.integer(2)} pattern string; we will always format as HH:mm. - * On the other hand, template strings don't give as fine granularity for options; and the platform decides how long month.abbreviated should be. - * Therefore, we have to create using template strings; and then change the .abbreivated/.integer values to have correct digits count if necessary. - * Thus, this results in this redundant looking code to create dateTimeFormat twice. - */ - var errorThrown = false; - - try { - // Create the DateTimeFormatter to extract pattern strings - CreateDateTimeFormat(dateTimeFormat, false); - } catch (e) { - // Rethrow SOE or OOM - throwExIfOOMOrSOE(e); - - // We won't throw for the first exception, but assume the template strings were rejected. - // Instead, we will try to fall back to default template strings. - var defaultOptions = ToDateTimeOptions(options, "none", "all"); - dateTimeFormat.__templateString = EcmaOptionsToWindowsTemplate(defaultOptions, null); - errorThrown = true; - } - - if (!errorThrown) { - // Update the pattern strings - dateTimeFormat.__templateString = updatePatternStrings(dateTimeFormat.__patternStrings[0], dateTimeFormat); - } - - try { - // Cache the date time formatter - CreateDateTimeFormat(dateTimeFormat, true); - } catch (e) { - // Rethrow SOE or OOM - throwExIfOOMOrSOE(e); - - // Otherwise, Generic message to cover the exception throw from the platform. - // The platform's exception is also generic and in most if not all cases specifies that "a" argument is invalid. - // We have no other information from the platform on the cause of the exception. - platform.raiseOptionValueOutOfRange(); - } - - // Correct the api's updated - dateTimeFormat.__calendar = WindowsToEcmaCalendar(dateTimeFormat.__windowsCalendar); - - dateTimeFormat.__numberingSystem = callInstanceFunc(StringInstanceToLowerCase, dateTimeFormat.__numberingSystem); - if (dateTimeFormat.__hour !== undefined) { - dateTimeFormat.__hour12 = dateTimeFormat.__windowsClock === "12HourClock"; - } - dateTimeFormat.__initializedDateTimeFormat = true; - } - - // caches for objects constructed with default parameters for each method - let __DateInstanceToLocaleStringDefaultCache = [undefined, undefined, undefined]; - const __DateInstanceToLocaleStringDefaultCacheSlot = setPrototype({ - toLocaleString: 0, - toLocaleDateString: 1, - toLocaleTimeString: 2 - }, null); - - function DateInstanceToLocaleStringImplementation(name, option1, option2, cacheSlot, locales, options) { - if (typeof this !== 'object' || !(this instanceof Date)) { - platform.raiseNeedObjectOfType(name, "Date"); - } - let value = callInstanceFunc(DateInstanceGetDate, new Date(this)); - if (isNaN(value) || !isFinite(value)) { - return "Invalid Date"; - } - - let stateObject = undefined; - if (platform.useCaches && locales === undefined && options === undefined) { - // All default parameters (locales and options): this is the most valuable case to cache. - if (__DateInstanceToLocaleStringDefaultCache[cacheSlot]) { - // retrieve cached value - stateObject = __DateInstanceToLocaleStringDefaultCache[cacheSlot]; - } else { - // populate cache - stateObject = setPrototype({}, null); - InitializeDateTimeFormat(stateObject, undefined, ToDateTimeOptions(undefined, option1, option2)); - __DateInstanceToLocaleStringDefaultCache[cacheSlot] = stateObject; - } - } - - if (!stateObject) { - stateObject = setPrototype({}, null); - InitializeDateTimeFormat(stateObject, locales, ToDateTimeOptions(options, option1, option2)); - } - - return String(platform.formatDateTime(Internal.ToNumber(this), stateObject)); - } - - // Note: tagPublicFunction (platform.tagPublicLibraryCode) messes with declared name of the FunctionBody so that - // the functions called appear correctly in the debugger and stack traces. Thus, we we cannot call tagPublicFunction in a loop. - // Each entry point needs to have its own unique FunctionBody (which is a function as defined in the source code); - // this is why we have seemingly repeated ourselves below, instead of having one function and calling it multiple times with - // different parameters. - // - // The following invocations of `platform.registerBuiltInFunction(tagPublicFunction(name, entryPoint))` are enclosed in IIFEs. - // The IIFEs are used to group all of the meaningful differences between each entry point into the arguments to the IIFE. - // The exception to this are the different entryPoint names which are only significant for debugging (and cannot be passed in - // as arguments, as the name is intrinsic to the function declaration). - // - // The `date_toLocale*String_entryPoint` function names are placeholder names that will never be seen from user code. - // The function name property and FunctionBody declared name are overwritten by `tagPublicFunction`. - // The fact that they are declared with unique names is helpful for debugging. - // The functions *must not* be declared as anonymous functions (must be declared with a name); - // converting from an unnnamed function to a named function is not readily supported by the platform code and - // this has caused us to hit assertions in debug builds in the past. - // - // See invocations of `tagPublicFunction` on the `supportedLocalesOf` entry points for a similar pattern. - // - // The entryPoint functions will be called as `Date.prototype.toLocale*String` and thus their `this` parameters will be a Date. - // `DateInstanceToLocaleStringImplementation` is not on `Date.prototype`, so we must propagate `this` into the call by using - // `DateInstanceToLocaleStringImplementation.call(this, ...)`. - - (function (name, option1, option2, cacheSlot, platformFunctionID) { - platform.registerBuiltInFunction(tagPublicFunction(name, function date_toLocaleString_entryPoint(locales = undefined, options = undefined) { - return DateInstanceToLocaleStringImplementation.call(this, name, option1, option2, cacheSlot, locales, options); - }), platformFunctionID); - })("Date.prototype.toLocaleString", "any", "all", __DateInstanceToLocaleStringDefaultCacheSlot.toLocaleString, IntlBuiltInFunctionID.DateToLocaleString); - - (function (name, option1, option2, cacheSlot, platformFunctionID) { - platform.registerBuiltInFunction(tagPublicFunction(name, function date_toLocaleDateString_entryPoint(locales = undefined, options = undefined) { - return DateInstanceToLocaleStringImplementation.call(this, name, option1, option2, cacheSlot, locales, options); - }), platformFunctionID); - })("Date.prototype.toLocaleDateString", "date", "date", __DateInstanceToLocaleStringDefaultCacheSlot.toLocaleDateString, IntlBuiltInFunctionID.DateToLocaleDateString); - - (function (name, option1, option2, cacheSlot, platformFunctionID) { - platform.registerBuiltInFunction(tagPublicFunction(name, function date_toLocaleTimeString_entryPoint(locales = undefined, options = undefined) { - return DateInstanceToLocaleStringImplementation.call(this, name, option1, option2, cacheSlot, locales, options); - }), platformFunctionID); - })("Date.prototype.toLocaleTimeString", "time", "time", __DateInstanceToLocaleStringDefaultCacheSlot.toLocaleTimeString, IntlBuiltInFunctionID.DateToLocaleTimeString); - - if (InitType === 'Intl') { - function DateTimeFormat(locales = undefined, options = undefined) { - if (this === Intl || this === undefined) { - return new DateTimeFormat(locales, options); - } - - let obj = Internal.ToObject(this); - if (!ObjectIsExtensible(obj)) { - platform.raiseObjectIsNonExtensible("DateTimeFormat"); - } - - // Use the hidden object to store data - let hiddenObject = platform.getHiddenObject(obj); - - if (hiddenObject === undefined) { - hiddenObject = setPrototype({}, null); - platform.setHiddenObject(obj, hiddenObject); - } - - InitializeDateTimeFormat(hiddenObject, locales, options); - - hiddenObject.__boundFormat = callInstanceFunc(FunctionInstanceBind, format, obj); - delete hiddenObject.__boundFormat.name; - - return obj; - } - tagPublicFunction("Intl.DateTimeFormat", DateTimeFormat); - - function format(date) { - if (typeof this !== 'object') { - platform.raiseNeedObjectOfType("DateTimeFormat.prototype.format", "DateTimeFormat"); - } - let hiddenObject = platform.getHiddenObject(this); - if (hiddenObject === undefined || !hiddenObject.__initializedDateTimeFormat) { - platform.raiseNeedObjectOfType("DateTimeFormat.prototype.format", "DateTimeFormat"); - } - - if (date !== undefined && (isNaN(date) || !isFinite(date))) { - platform.raiseInvalidDate(); - } - - let dateValue = undefined; - if (date !== undefined) { - dateValue = Internal.ToNumber(date) - } else { - dateValue = DateNow(); - } - - return String(platform.formatDateTime(dateValue, hiddenObject)); - } - tagPublicFunction("Intl.DateTimeFormat.prototype.format", format); - - DateTimeFormat.__relevantExtensionKeys = ['ca', 'nu']; - - ObjectDefineProperty(DateTimeFormat, 'prototype', { value: new DateTimeFormat(), writable: false, enumerable: false, configurable: false }); - setPrototype(DateTimeFormat.prototype, Object.prototype); - ObjectDefineProperty(DateTimeFormat.prototype, 'constructor', { value: DateTimeFormat, writable: true, enumerable: false, configurable: true }); - - ObjectDefineProperty(DateTimeFormat.prototype, 'format', { - get: tagPublicFunction('get format', function () { - if (typeof this !== 'object') { - platform.raiseNeedObjectOfType("DateTimeFormat.prototype.format", "DateTimeFormat"); - } - - var hiddenObject = platform.getHiddenObject(this); - if (hiddenObject === undefined || !hiddenObject.__initializedDateTimeFormat) { - platform.raiseNeedObjectOfType("DateTimeFormat.prototype.format", "DateTimeFormat"); - } - - return hiddenObject.__boundFormat; - }), enumerable: false, configurable: true - }); - - ObjectDefineProperty(DateTimeFormat.prototype, 'resolvedOptions', { - value: function resolvedOptions() { - if (typeof this !== 'object') { - platform.raiseNeedObjectOfType("DateTimeFormat.prototype.resolvedOptions", "DateTimeFormat"); - } - var hiddenObject = platform.getHiddenObject(this); - if (hiddenObject === undefined || !hiddenObject.__initializedDateTimeFormat) { - platform.raiseNeedObjectOfType("DateTimeFormat.prototype.resolvedOptions", "DateTimeFormat"); - } - var temp = setPrototype({ - locale: hiddenObject.__locale, - calendar: hiddenObject.__calendar, // ca unicode extension - numberingSystem: hiddenObject.__numberingSystem, // nu unicode extension - timeZone: hiddenObject.__timeZone, - hour12: hiddenObject.__hour12, - weekday: hiddenObject.__weekday, - era: hiddenObject.__era, - year: hiddenObject.__year, - month: hiddenObject.__month, - day: hiddenObject.__day, - hour: hiddenObject.__hour, - minute: hiddenObject.__minute, - second: hiddenObject.__second, - timeZoneName: hiddenObject.__timeZoneName - }, null) - var options = setPrototype({}, null); - callInstanceFunc(ArrayInstanceForEach, ObjectGetOwnPropertyNames(temp), function (prop) { - if ((temp[prop] !== undefined || prop === 'timeZone') && callInstanceFunc(ObjectInstanceHasOwnProperty, hiddenObject, "__" + prop)) { - options[prop] = temp[prop]; - } - }, hiddenObject); - return setPrototype(options, Object.prototype); - }, writable: true, enumerable: false, configurable: true - }); - - ObjectDefineProperty(DateTimeFormat, 'supportedLocalesOf', { value: dateTimeFormat_supportedLocalesOf, writable: true, configurable: true }); - - return DateTimeFormat; - } - } - // 'Init.DateTimeFormat' not defined if reached here. Return 'undefined' - return undefined; - })(); - - // Initialize Intl properties only if needed - if (InitType === 'Intl') { - ObjectDefineProperty(Intl, "Collator", { value: Collator, writable: true, enumerable: false, configurable: true }); - ObjectDefineProperty(Intl, "NumberFormat", { value: NumberFormat, writable: true, enumerable: false, configurable: true }); - ObjectDefineProperty(Intl, "DateTimeFormat", { value: DateTimeFormat, writable: true, enumerable: false, configurable: true }); - ObjectDefineProperty(Intl, "getCanonicalLocales", { value: getCanonicalLocales, writable: true, enumerable: false, configurable: true }); - } - - } // END WINGLOB -}); - -#endif -namespace Js -{ - const char Library_Bytecode_Intl[] = { -/* 00000000 */ 0x43, 0x68, 0x42, 0x63, 0x09, 0xAE, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 00000010 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0xFE, 0xCE, 0x02, 0x00, 0xFF, -/* 00000020 */ 0x2E, 0xC9, 0x02, 0x00, 0xFF, 0x2E, 0xC9, 0x02, 0x00, 0x39, 0x00, 0x00, 0x00, 0x24, 0x4B, 0x00, -/* 00000030 */ 0x00, 0x44, 0x87, 0x00, 0x00, 0x08, 0xAE, 0x01, 0x00, 0xFE, 0x45, 0x02, 0x9A, 0x0B, 0x00, 0x00, -/* 00000040 */ 0x00, 0xB2, 0x0B, 0x00, 0x00, 0x00, 0xC8, 0x0B, 0x00, 0x00, 0x01, 0xDC, 0x0B, 0x00, 0x00, 0x01, -/* 00000050 */ 0xF6, 0x0B, 0x00, 0x00, 0x01, 0x14, 0x0C, 0x00, 0x00, 0x01, 0x36, 0x0C, 0x00, 0x00, 0x01, 0x4E, -/* 00000060 */ 0x0C, 0x00, 0x00, 0x01, 0x78, 0x0C, 0x00, 0x00, 0x01, 0x9E, 0x0C, 0x00, 0x00, 0x01, 0xD2, 0x0C, -/* 00000070 */ 0x00, 0x00, 0x01, 0x0C, 0x0D, 0x00, 0x00, 0x01, 0x38, 0x0D, 0x00, 0x00, 0x01, 0x62, 0x0D, 0x00, -/* 00000080 */ 0x00, 0x01, 0x8C, 0x0D, 0x00, 0x00, 0x01, 0xB6, 0x0D, 0x00, 0x00, 0x01, 0xDA, 0x0D, 0x00, 0x00, -/* 00000090 */ 0x01, 0xFE, 0x0D, 0x00, 0x00, 0x01, 0x28, 0x0E, 0x00, 0x00, 0x01, 0x50, 0x0E, 0x00, 0x00, 0x01, -/* 000000A0 */ 0x60, 0x0E, 0x00, 0x00, 0x01, 0x8C, 0x0E, 0x00, 0x00, 0x01, 0xC0, 0x0E, 0x00, 0x00, 0x01, 0xF4, -/* 000000B0 */ 0x0E, 0x00, 0x00, 0x01, 0x18, 0x0F, 0x00, 0x00, 0x01, 0x3C, 0x0F, 0x00, 0x00, 0x01, 0x4E, 0x0F, -/* 000000C0 */ 0x00, 0x00, 0x01, 0x70, 0x0F, 0x00, 0x00, 0x01, 0x98, 0x0F, 0x00, 0x00, 0x01, 0xC0, 0x0F, 0x00, -/* 000000D0 */ 0x00, 0x01, 0xDE, 0x0F, 0x00, 0x00, 0x01, 0x0A, 0x10, 0x00, 0x00, 0x01, 0x3E, 0x10, 0x00, 0x00, -/* 000000E0 */ 0x01, 0x7A, 0x10, 0x00, 0x00, 0x01, 0xBA, 0x10, 0x00, 0x00, 0x01, 0x08, 0x11, 0x00, 0x00, 0x01, -/* 000000F0 */ 0x30, 0x11, 0x00, 0x00, 0x01, 0x42, 0x11, 0x00, 0x00, 0x01, 0x68, 0x11, 0x00, 0x00, 0x01, 0x7C, -/* 00000100 */ 0x11, 0x00, 0x00, 0x01, 0x86, 0x11, 0x00, 0x00, 0x01, 0xB2, 0x11, 0x00, 0x00, 0x01, 0xB6, 0x11, -/* 00000110 */ 0x00, 0x00, 0x01, 0xC2, 0x11, 0x00, 0x00, 0x01, 0xEA, 0x11, 0x00, 0x00, 0x01, 0x0E, 0x12, 0x00, -/* 00000120 */ 0x00, 0x01, 0x32, 0x12, 0x00, 0x00, 0x01, 0x6A, 0x12, 0x00, 0x00, 0x01, 0x78, 0x12, 0x00, 0x00, -/* 00000130 */ 0x00, 0x80, 0x12, 0x00, 0x00, 0x00, 0x8C, 0x12, 0x00, 0x00, 0x00, 0x94, 0x12, 0x00, 0x00, 0x00, -/* 00000140 */ 0x9C, 0x12, 0x00, 0x00, 0x01, 0xA4, 0x12, 0x00, 0x00, 0x01, 0xCA, 0x12, 0x00, 0x00, 0x01, 0xF8, -/* 00000150 */ 0x12, 0x00, 0x00, 0x01, 0x26, 0x13, 0x00, 0x00, 0x01, 0x50, 0x13, 0x00, 0x00, 0x01, 0x78, 0x13, -/* 00000160 */ 0x00, 0x00, 0x01, 0x80, 0x13, 0x00, 0x00, 0x00, 0x98, 0x13, 0x00, 0x00, 0x00, 0xB0, 0x13, 0x00, -/* 00000170 */ 0x00, 0x00, 0xC0, 0x13, 0x00, 0x00, 0x00, 0xCC, 0x13, 0x00, 0x00, 0x00, 0xE0, 0x13, 0x00, 0x00, -/* 00000180 */ 0x01, 0xFC, 0x13, 0x00, 0x00, 0x00, 0x08, 0x14, 0x00, 0x00, 0x00, 0x16, 0x14, 0x00, 0x00, 0x00, -/* 00000190 */ 0x26, 0x14, 0x00, 0x00, 0x00, 0x30, 0x14, 0x00, 0x00, 0x00, 0x3A, 0x14, 0x00, 0x00, 0x01, 0x54, -/* 000001A0 */ 0x14, 0x00, 0x00, 0x00, 0x5C, 0x14, 0x00, 0x00, 0x00, 0x6A, 0x14, 0x00, 0x00, 0x00, 0x76, 0x14, -/* 000001B0 */ 0x00, 0x00, 0x00, 0x84, 0x14, 0x00, 0x00, 0x00, 0x92, 0x14, 0x00, 0x00, 0x01, 0xA0, 0x14, 0x00, -/* 000001C0 */ 0x00, 0x00, 0xAA, 0x14, 0x00, 0x00, 0x00, 0xC8, 0x14, 0x00, 0x00, 0x00, 0xE6, 0x14, 0x00, 0x00, -/* 000001D0 */ 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x0E, 0x15, 0x00, 0x00, 0x00, 0x2C, 0x15, 0x00, 0x00, 0x00, -/* 000001E0 */ 0x3E, 0x15, 0x00, 0x00, 0x00, 0x4A, 0x15, 0x00, 0x00, 0x00, 0x5A, 0x15, 0x00, 0x00, 0x00, 0x64, -/* 000001F0 */ 0x15, 0x00, 0x00, 0x00, 0x70, 0x15, 0x00, 0x00, 0x01, 0x86, 0x15, 0x00, 0x00, 0x01, 0x94, 0x15, -/* 00000200 */ 0x00, 0x00, 0x01, 0x9E, 0x15, 0x00, 0x00, 0x01, 0xAC, 0x15, 0x00, 0x00, 0x01, 0xB6, 0x15, 0x00, -/* 00000210 */ 0x00, 0x01, 0xC6, 0x15, 0x00, 0x00, 0x01, 0xD6, 0x15, 0x00, 0x00, 0x01, 0xE2, 0x15, 0x00, 0x00, -/* 00000220 */ 0x01, 0xEE, 0x15, 0x00, 0x00, 0x00, 0xFA, 0x15, 0x00, 0x00, 0x01, 0x0A, 0x16, 0x00, 0x00, 0x01, -/* 00000230 */ 0x1A, 0x16, 0x00, 0x00, 0x01, 0x2C, 0x16, 0x00, 0x00, 0x01, 0x3A, 0x16, 0x00, 0x00, 0x01, 0x44, -/* 00000240 */ 0x16, 0x00, 0x00, 0x01, 0x4E, 0x16, 0x00, 0x00, 0x01, 0x60, 0x16, 0x00, 0x00, 0x01, 0x72, 0x16, -/* 00000250 */ 0x00, 0x00, 0x01, 0x84, 0x16, 0x00, 0x00, 0x01, 0xA6, 0x16, 0x00, 0x00, 0x01, 0xB8, 0x16, 0x00, -/* 00000260 */ 0x00, 0x00, 0xC8, 0x16, 0x00, 0x00, 0x00, 0xD4, 0x16, 0x00, 0x00, 0x00, 0xDE, 0x16, 0x00, 0x00, -/* 00000270 */ 0x00, 0x10, 0x17, 0x00, 0x00, 0x00, 0x1A, 0x17, 0x00, 0x00, 0x00, 0x26, 0x17, 0x00, 0x00, 0x00, -/* 00000280 */ 0x4E, 0x17, 0x00, 0x00, 0x00, 0x60, 0x17, 0x00, 0x00, 0x00, 0x76, 0x17, 0x00, 0x00, 0x00, 0x90, -/* 00000290 */ 0x17, 0x00, 0x00, 0x00, 0xA2, 0x17, 0x00, 0x00, 0x00, 0xBC, 0x17, 0x00, 0x00, 0x00, 0xDA, 0x17, -/* 000002A0 */ 0x00, 0x00, 0x00, 0xF2, 0x17, 0x00, 0x00, 0x00, 0x34, 0x18, 0x00, 0x00, 0x00, 0x7E, 0x18, 0x00, -/* 000002B0 */ 0x00, 0x00, 0xCC, 0x18, 0x00, 0x00, 0x00, 0xF2, 0x18, 0x00, 0x00, 0x01, 0xFE, 0x18, 0x00, 0x00, -/* 000002C0 */ 0x01, 0x08, 0x19, 0x00, 0x00, 0x00, 0x16, 0x19, 0x00, 0x00, 0x01, 0x22, 0x19, 0x00, 0x00, 0x01, -/* 000002D0 */ 0x2E, 0x19, 0x00, 0x00, 0x01, 0x3E, 0x19, 0x00, 0x00, 0x00, 0x4C, 0x19, 0x00, 0x00, 0x01, 0x58, -/* 000002E0 */ 0x19, 0x00, 0x00, 0x01, 0x66, 0x19, 0x00, 0x00, 0x00, 0x74, 0x19, 0x00, 0x00, 0x01, 0x80, 0x19, -/* 000002F0 */ 0x00, 0x00, 0x01, 0x92, 0x19, 0x00, 0x00, 0x00, 0xA0, 0x19, 0x00, 0x00, 0x01, 0xAE, 0x19, 0x00, -/* 00000300 */ 0x00, 0x00, 0xB0, 0x19, 0x00, 0x00, 0x01, 0xBC, 0x19, 0x00, 0x00, 0x01, 0xC8, 0x19, 0x00, 0x00, -/* 00000310 */ 0x01, 0xD4, 0x19, 0x00, 0x00, 0x01, 0xE2, 0x19, 0x00, 0x00, 0x01, 0xEE, 0x19, 0x00, 0x00, 0x01, -/* 00000320 */ 0x02, 0x1A, 0x00, 0x00, 0x01, 0x26, 0x1A, 0x00, 0x00, 0x01, 0x4C, 0x1A, 0x00, 0x00, 0x01, 0x60, -/* 00000330 */ 0x1A, 0x00, 0x00, 0x01, 0x92, 0x1A, 0x00, 0x00, 0x01, 0xB2, 0x1A, 0x00, 0x00, 0x01, 0xD4, 0x1A, -/* 00000340 */ 0x00, 0x00, 0x01, 0xFC, 0x1A, 0x00, 0x00, 0x01, 0x1E, 0x1B, 0x00, 0x00, 0x01, 0x3A, 0x1B, 0x00, -/* 00000350 */ 0x00, 0x01, 0x58, 0x1B, 0x00, 0x00, 0x01, 0x84, 0x1B, 0x00, 0x00, 0x01, 0xA0, 0x1B, 0x00, 0x00, -/* 00000360 */ 0x01, 0xC0, 0x1B, 0x00, 0x00, 0x01, 0xE2, 0x1B, 0x00, 0x00, 0x01, 0xFC, 0x1B, 0x00, 0x00, 0x01, -/* 00000370 */ 0x2E, 0x1C, 0x00, 0x00, 0x01, 0x6C, 0x1C, 0x00, 0x00, 0x01, 0x9A, 0x1C, 0x00, 0x00, 0x01, 0xC8, -/* 00000380 */ 0x1C, 0x00, 0x00, 0x01, 0xF8, 0x1C, 0x00, 0x00, 0x01, 0x30, 0x1D, 0x00, 0x00, 0x01, 0x52, 0x1D, -/* 00000390 */ 0x00, 0x00, 0x01, 0x82, 0x1D, 0x00, 0x00, 0x01, 0xC8, 0x1D, 0x00, 0x00, 0x01, 0x10, 0x1E, 0x00, -/* 000003A0 */ 0x00, 0x01, 0x3C, 0x1E, 0x00, 0x00, 0x01, 0x6E, 0x1E, 0x00, 0x00, 0x01, 0x98, 0x1E, 0x00, 0x00, -/* 000003B0 */ 0x01, 0xC2, 0x1E, 0x00, 0x00, 0x01, 0xF2, 0x1E, 0x00, 0x00, 0x01, 0x22, 0x1F, 0x00, 0x00, 0x01, -/* 000003C0 */ 0x44, 0x1F, 0x00, 0x00, 0x01, 0x64, 0x1F, 0x00, 0x00, 0x01, 0x7C, 0x1F, 0x00, 0x00, 0x01, 0xBE, -/* 000003D0 */ 0x1F, 0x00, 0x00, 0x01, 0xF6, 0x1F, 0x00, 0x00, 0x01, 0x40, 0x20, 0x00, 0x00, 0x01, 0x80, 0x20, -/* 000003E0 */ 0x00, 0x00, 0x01, 0xCE, 0x20, 0x00, 0x00, 0x01, 0x12, 0x21, 0x00, 0x00, 0x01, 0x3E, 0x21, 0x00, -/* 000003F0 */ 0x00, 0x01, 0x42, 0x21, 0x00, 0x00, 0x01, 0x50, 0x21, 0x00, 0x00, 0x00, 0x58, 0x21, 0x00, 0x00, -/* 00000400 */ 0x00, 0x60, 0x21, 0x00, 0x00, 0x00, 0x7C, 0x21, 0x00, 0x00, 0x00, 0x98, 0x21, 0x00, 0x00, 0x00, -/* 00000410 */ 0xAC, 0x21, 0x00, 0x00, 0x00, 0xBC, 0x21, 0x00, 0x00, 0x00, 0xD4, 0x21, 0x00, 0x00, 0x00, 0xF4, -/* 00000420 */ 0x21, 0x00, 0x00, 0x00, 0x04, 0x22, 0x00, 0x00, 0x00, 0x16, 0x22, 0x00, 0x00, 0x00, 0x2A, 0x22, -/* 00000430 */ 0x00, 0x00, 0x00, 0x38, 0x22, 0x00, 0x00, 0x00, 0x46, 0x22, 0x00, 0x00, 0x00, 0x64, 0x22, 0x00, -/* 00000440 */ 0x00, 0x00, 0x70, 0x22, 0x00, 0x00, 0x00, 0x82, 0x22, 0x00, 0x00, 0x00, 0x92, 0x22, 0x00, 0x00, -/* 00000450 */ 0x00, 0xA4, 0x22, 0x00, 0x00, 0x00, 0xB6, 0x22, 0x00, 0x00, 0x00, 0xC8, 0x22, 0x00, 0x00, 0x01, -/* 00000460 */ 0xD4, 0x22, 0x00, 0x00, 0x00, 0xF6, 0x22, 0x00, 0x00, 0x00, 0x18, 0x23, 0x00, 0x00, 0x00, 0x2A, -/* 00000470 */ 0x23, 0x00, 0x00, 0x00, 0x4C, 0x23, 0x00, 0x00, 0x00, 0x5C, 0x23, 0x00, 0x00, 0x00, 0x70, 0x23, -/* 00000480 */ 0x00, 0x00, 0x00, 0x7E, 0x23, 0x00, 0x00, 0x00, 0x8E, 0x23, 0x00, 0x00, 0x00, 0xB0, 0x23, 0x00, -/* 00000490 */ 0x00, 0x00, 0xCA, 0x23, 0x00, 0x00, 0x00, 0xE6, 0x23, 0x00, 0x00, 0x00, 0xF4, 0x23, 0x00, 0x00, -/* 000004A0 */ 0x00, 0xFA, 0x23, 0x00, 0x00, 0x00, 0xFE, 0x23, 0x00, 0x00, 0x01, 0x04, 0x24, 0x00, 0x00, 0x01, -/* 000004B0 */ 0x0A, 0x24, 0x00, 0x00, 0x01, 0x10, 0x24, 0x00, 0x00, 0x01, 0x16, 0x24, 0x00, 0x00, 0x01, 0x1C, -/* 000004C0 */ 0x24, 0x00, 0x00, 0x01, 0x22, 0x24, 0x00, 0x00, 0x01, 0x44, 0x24, 0x00, 0x00, 0x01, 0x58, 0x24, -/* 000004D0 */ 0x00, 0x00, 0x01, 0x5C, 0x24, 0x00, 0x00, 0x01, 0x74, 0x24, 0x00, 0x00, 0x01, 0x82, 0x24, 0x00, -/* 000004E0 */ 0x00, 0x01, 0xA8, 0x24, 0x00, 0x00, 0x00, 0xB6, 0x24, 0x00, 0x00, 0x01, 0xCC, 0x24, 0x00, 0x00, -/* 000004F0 */ 0x00, 0xD2, 0x24, 0x00, 0x00, 0x00, 0xDA, 0x24, 0x00, 0x00, 0x01, 0xF6, 0x24, 0x00, 0x00, 0x00, -/* 00000500 */ 0x00, 0x25, 0x00, 0x00, 0x00, 0x10, 0x25, 0x00, 0x00, 0x00, 0x1E, 0x25, 0x00, 0x00, 0x00, 0x24, -/* 00000510 */ 0x25, 0x00, 0x00, 0x00, 0x2A, 0x25, 0x00, 0x00, 0x00, 0x34, 0x25, 0x00, 0x00, 0x00, 0x38, 0x25, -/* 00000520 */ 0x00, 0x00, 0x00, 0x40, 0x25, 0x00, 0x00, 0x00, 0x44, 0x25, 0x00, 0x00, 0x00, 0x5A, 0x25, 0x00, -/* 00000530 */ 0x00, 0x01, 0x80, 0x25, 0x00, 0x00, 0x00, 0x8C, 0x25, 0x00, 0x00, 0x00, 0x98, 0x25, 0x00, 0x00, -/* 00000540 */ 0x00, 0xA0, 0x25, 0x00, 0x00, 0x00, 0xA4, 0x25, 0x00, 0x00, 0x00, 0xA8, 0x25, 0x00, 0x00, 0x00, -/* 00000550 */ 0x5C, 0x26, 0x00, 0x00, 0x00, 0xF8, 0x26, 0x00, 0x00, 0x00, 0x7E, 0x27, 0x00, 0x00, 0x00, 0x8A, -/* 00000560 */ 0x27, 0x00, 0x00, 0x00, 0x92, 0x27, 0x00, 0x00, 0x00, 0xA8, 0x27, 0x00, 0x00, 0x00, 0xC2, 0x27, -/* 00000570 */ 0x00, 0x00, 0x00, 0xDC, 0x27, 0x00, 0x00, 0x00, 0xE6, 0x27, 0x00, 0x00, 0x00, 0xFC, 0x27, 0x00, -/* 00000580 */ 0x00, 0x00, 0x0A, 0x28, 0x00, 0x00, 0x00, 0x18, 0x28, 0x00, 0x00, 0x00, 0x22, 0x28, 0x00, 0x00, -/* 00000590 */ 0x00, 0x30, 0x28, 0x00, 0x00, 0x00, 0x44, 0x28, 0x00, 0x00, 0x00, 0x5E, 0x28, 0x00, 0x00, 0x00, -/* 000005A0 */ 0x6A, 0x28, 0x00, 0x00, 0x00, 0x78, 0x28, 0x00, 0x00, 0x00, 0x7E, 0x28, 0x00, 0x00, 0x00, 0x8A, -/* 000005B0 */ 0x28, 0x00, 0x00, 0x00, 0x92, 0x28, 0x00, 0x00, 0x00, 0xA2, 0x28, 0x00, 0x00, 0x00, 0xAE, 0x28, -/* 000005C0 */ 0x00, 0x00, 0x00, 0xBE, 0x28, 0x00, 0x00, 0x00, 0xCA, 0x28, 0x00, 0x00, 0x00, 0xD4, 0x28, 0x00, -/* 000005D0 */ 0x00, 0x00, 0xDA, 0x28, 0x00, 0x00, 0x00, 0xDE, 0x28, 0x00, 0x00, 0x00, 0xE2, 0x28, 0x00, 0x00, -/* 000005E0 */ 0x00, 0xE6, 0x28, 0x00, 0x00, 0x01, 0xEA, 0x28, 0x00, 0x00, 0x01, 0xFC, 0x28, 0x00, 0x00, 0x01, -/* 000005F0 */ 0x0A, 0x29, 0x00, 0x00, 0x01, 0x18, 0x29, 0x00, 0x00, 0x01, 0x2A, 0x29, 0x00, 0x00, 0x01, 0x40, -/* 00000600 */ 0x29, 0x00, 0x00, 0x00, 0x54, 0x29, 0x00, 0x00, 0x00, 0x62, 0x29, 0x00, 0x00, 0x00, 0x70, 0x29, -/* 00000610 */ 0x00, 0x00, 0x01, 0x94, 0x29, 0x00, 0x00, 0x01, 0xA2, 0x29, 0x00, 0x00, 0x00, 0xCC, 0x29, 0x00, -/* 00000620 */ 0x00, 0x00, 0xF8, 0x29, 0x00, 0x00, 0x00, 0x24, 0x2A, 0x00, 0x00, 0x00, 0x56, 0x2A, 0x00, 0x00, -/* 00000630 */ 0x00, 0x88, 0x2A, 0x00, 0x00, 0x00, 0x9A, 0x2A, 0x00, 0x00, 0x00, 0xB6, 0x2A, 0x00, 0x00, 0x00, -/* 00000640 */ 0xC4, 0x2A, 0x00, 0x00, 0x01, 0xDE, 0x2A, 0x00, 0x00, 0x01, 0xE8, 0x2A, 0x00, 0x00, 0x01, 0xFA, -/* 00000650 */ 0x2A, 0x00, 0x00, 0x01, 0x20, 0x2B, 0x00, 0x00, 0x01, 0x50, 0x2B, 0x00, 0x00, 0x00, 0x5E, 0x2B, -/* 00000660 */ 0x00, 0x00, 0x00, 0x9C, 0x2B, 0x00, 0x00, 0x00, 0xB8, 0x2B, 0x00, 0x00, 0x00, 0xF8, 0x2B, 0x00, -/* 00000670 */ 0x00, 0x00, 0x0C, 0x2C, 0x00, 0x00, 0x00, 0x24, 0x2C, 0x00, 0x00, 0x00, 0x44, 0x2C, 0x00, 0x00, -/* 00000680 */ 0x00, 0x5C, 0x2C, 0x00, 0x00, 0x00, 0x6C, 0x2C, 0x00, 0x00, 0x01, 0x78, 0x2C, 0x00, 0x00, 0x00, -/* 00000690 */ 0x82, 0x2C, 0x00, 0x00, 0x00, 0x90, 0x2C, 0x00, 0x00, 0x00, 0xA0, 0x2C, 0x00, 0x00, 0x01, 0xB4, -/* 000006A0 */ 0x2C, 0x00, 0x00, 0x00, 0xC4, 0x2C, 0x00, 0x00, 0x00, 0xDC, 0x2C, 0x00, 0x00, 0x00, 0x00, 0x2D, -/* 000006B0 */ 0x00, 0x00, 0x01, 0x10, 0x2D, 0x00, 0x00, 0x01, 0x24, 0x2D, 0x00, 0x00, 0x01, 0x4C, 0x2D, 0x00, -/* 000006C0 */ 0x00, 0x01, 0x66, 0x2D, 0x00, 0x00, 0x00, 0x9C, 0x2D, 0x00, 0x00, 0x00, 0xE2, 0x2D, 0x00, 0x00, -/* 000006D0 */ 0x00, 0xF8, 0x2D, 0x00, 0x00, 0x01, 0x26, 0x2E, 0x00, 0x00, 0x00, 0x34, 0x2E, 0x00, 0x00, 0x00, -/* 000006E0 */ 0x74, 0x2E, 0x00, 0x00, 0x00, 0x98, 0x2E, 0x00, 0x00, 0x00, 0xDE, 0x2E, 0x00, 0x00, 0x00, 0x32, -/* 000006F0 */ 0x2F, 0x00, 0x00, 0x00, 0x48, 0x2F, 0x00, 0x00, 0x00, 0x56, 0x2F, 0x00, 0x00, 0x00, 0x72, 0x2F, -/* 00000700 */ 0x00, 0x00, 0x01, 0x7E, 0x2F, 0x00, 0x00, 0x00, 0x8E, 0x2F, 0x00, 0x00, 0x00, 0x9E, 0x2F, 0x00, -/* 00000710 */ 0x00, 0x00, 0xB0, 0x2F, 0x00, 0x00, 0x00, 0xD0, 0x2F, 0x00, 0x00, 0x00, 0xDA, 0x2F, 0x00, 0x00, -/* 00000720 */ 0x00, 0xE8, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x01, 0x30, 0x30, 0x00, 0x00, 0x01, -/* 00000730 */ 0x48, 0x30, 0x00, 0x00, 0x00, 0x84, 0x30, 0x00, 0x00, 0x00, 0xCE, 0x30, 0x00, 0x00, 0x00, 0x1C, -/* 00000740 */ 0x31, 0x00, 0x00, 0x00, 0x3C, 0x31, 0x00, 0x00, 0x00, 0x50, 0x31, 0x00, 0x00, 0x01, 0xA2, 0x31, -/* 00000750 */ 0x00, 0x00, 0x01, 0xC8, 0x31, 0x00, 0x00, 0x01, 0xF2, 0x31, 0x00, 0x00, 0x01, 0x24, 0x32, 0x00, -/* 00000760 */ 0x00, 0x01, 0x48, 0x32, 0x00, 0x00, 0x01, 0x66, 0x32, 0x00, 0x00, 0x01, 0x92, 0x32, 0x00, 0x00, -/* 00000770 */ 0x01, 0xE4, 0x32, 0x00, 0x00, 0x01, 0xFE, 0x32, 0x00, 0x00, 0x01, 0x18, 0x33, 0x00, 0x00, 0x00, -/* 00000780 */ 0x22, 0x33, 0x00, 0x00, 0x01, 0x30, 0x33, 0x00, 0x00, 0x01, 0x3C, 0x33, 0x00, 0x00, 0x01, 0x46, -/* 00000790 */ 0x33, 0x00, 0x00, 0x01, 0x56, 0x33, 0x00, 0x00, 0x00, 0x66, 0x33, 0x00, 0x00, 0x00, 0x6E, 0x33, -/* 000007A0 */ 0x00, 0x00, 0x00, 0x78, 0x33, 0x00, 0x00, 0x00, 0x84, 0x33, 0x00, 0x00, 0x00, 0x8C, 0x33, 0x00, -/* 000007B0 */ 0x00, 0x00, 0x96, 0x33, 0x00, 0x00, 0x00, 0xA4, 0x33, 0x00, 0x00, 0x00, 0xB2, 0x33, 0x00, 0x00, -/* 000007C0 */ 0x00, 0xCC, 0x33, 0x00, 0x00, 0x00, 0xEA, 0x33, 0x00, 0x00, 0x00, 0x10, 0x34, 0x00, 0x00, 0x00, -/* 000007D0 */ 0x36, 0x34, 0x00, 0x00, 0x00, 0x72, 0x34, 0x00, 0x00, 0x00, 0x7A, 0x34, 0x00, 0x00, 0x00, 0x82, -/* 000007E0 */ 0x34, 0x00, 0x00, 0x00, 0xC6, 0x34, 0x00, 0x00, 0x00, 0xD0, 0x34, 0x00, 0x00, 0x00, 0x14, 0x35, -/* 000007F0 */ 0x00, 0x00, 0x00, 0x1E, 0x35, 0x00, 0x00, 0x00, 0x46, 0x35, 0x00, 0x00, 0x00, 0x90, 0x35, 0x00, -/* 00000800 */ 0x00, 0x00, 0xE8, 0x35, 0x00, 0x00, 0x01, 0x08, 0x36, 0x00, 0x00, 0x01, 0x28, 0x36, 0x00, 0x00, -/* 00000810 */ 0x01, 0x54, 0x36, 0x00, 0x00, 0x01, 0x80, 0x36, 0x00, 0x00, 0x01, 0xA8, 0x36, 0x00, 0x00, 0x01, -/* 00000820 */ 0xD0, 0x36, 0x00, 0x00, 0x00, 0xD4, 0x36, 0x00, 0x00, 0x01, 0xD8, 0x36, 0x00, 0x00, 0x01, 0xDC, -/* 00000830 */ 0x36, 0x00, 0x00, 0x01, 0xE0, 0x36, 0x00, 0x00, 0x01, 0xE4, 0x36, 0x00, 0x00, 0x00, 0xE8, 0x36, -/* 00000840 */ 0x00, 0x00, 0x00, 0xF6, 0x36, 0x00, 0x00, 0x01, 0xFA, 0x36, 0x00, 0x00, 0x01, 0x08, 0x37, 0x00, -/* 00000850 */ 0x00, 0x01, 0x0C, 0x37, 0x00, 0x00, 0x01, 0x10, 0x37, 0x00, 0x00, 0x01, 0x14, 0x37, 0x00, 0x00, -/* 00000860 */ 0x01, 0x18, 0x37, 0x00, 0x00, 0x01, 0x1C, 0x37, 0x00, 0x00, 0x01, 0x20, 0x37, 0x00, 0x00, 0x01, -/* 00000870 */ 0x24, 0x37, 0x00, 0x00, 0x01, 0x28, 0x37, 0x00, 0x00, 0x01, 0x2C, 0x37, 0x00, 0x00, 0x01, 0x30, -/* 00000880 */ 0x37, 0x00, 0x00, 0x01, 0x34, 0x37, 0x00, 0x00, 0x01, 0x38, 0x37, 0x00, 0x00, 0x01, 0x3C, 0x37, -/* 00000890 */ 0x00, 0x00, 0x01, 0x40, 0x37, 0x00, 0x00, 0x01, 0x44, 0x37, 0x00, 0x00, 0x01, 0x48, 0x37, 0x00, -/* 000008A0 */ 0x00, 0x01, 0x4C, 0x37, 0x00, 0x00, 0x01, 0x50, 0x37, 0x00, 0x00, 0x01, 0x54, 0x37, 0x00, 0x00, -/* 000008B0 */ 0x01, 0x58, 0x37, 0x00, 0x00, 0x01, 0x5C, 0x37, 0x00, 0x00, 0x01, 0x64, 0x37, 0x00, 0x00, 0x01, -/* 000008C0 */ 0x6C, 0x37, 0x00, 0x00, 0x01, 0x74, 0x37, 0x00, 0x00, 0x01, 0x7C, 0x37, 0x00, 0x00, 0x00, 0x80, -/* 000008D0 */ 0x37, 0x00, 0x00, 0x00, 0x84, 0x37, 0x00, 0x00, 0x01, 0x98, 0x37, 0x00, 0x00, 0x00, 0xB0, 0x37, -/* 000008E0 */ 0x00, 0x00, 0x00, 0xC2, 0x37, 0x00, 0x00, 0x00, 0x10, 0x38, 0x00, 0x00, 0x00, 0x20, 0x38, 0x00, -/* 000008F0 */ 0x00, 0x00, 0x30, 0x38, 0x00, 0x00, 0x00, 0x38, 0x38, 0x00, 0x00, 0x00, 0x54, 0x38, 0x00, 0x00, -/* 00000900 */ 0x00, 0x60, 0x38, 0x00, 0x00, 0x01, 0x94, 0x38, 0x00, 0x00, 0x01, 0xAE, 0x38, 0x00, 0x00, 0x00, -/* 00000910 */ 0xC8, 0x38, 0x00, 0x00, 0x01, 0xD8, 0x38, 0x00, 0x00, 0x01, 0xE8, 0x38, 0x00, 0x00, 0x01, 0xFC, -/* 00000920 */ 0x38, 0x00, 0x00, 0x00, 0x3A, 0x39, 0x00, 0x00, 0x00, 0x80, 0x39, 0x00, 0x00, 0x00, 0xC6, 0x39, -/* 00000930 */ 0x00, 0x00, 0x00, 0x04, 0x3A, 0x00, 0x00, 0x00, 0x16, 0x3A, 0x00, 0x00, 0x01, 0x42, 0x3A, 0x00, -/* 00000940 */ 0x00, 0x01, 0x5E, 0x3A, 0x00, 0x00, 0x01, 0xA6, 0x3A, 0x00, 0x00, 0x00, 0xC8, 0x3A, 0x00, 0x00, -/* 00000950 */ 0x00, 0x10, 0x3B, 0x00, 0x00, 0x00, 0x54, 0x3B, 0x00, 0x00, 0x00, 0x62, 0x3B, 0x00, 0x00, 0x00, -/* 00000960 */ 0xB8, 0x3B, 0x00, 0x00, 0x00, 0xC2, 0x3B, 0x00, 0x00, 0x00, 0xD4, 0x3B, 0x00, 0x00, 0x00, 0xE4, -/* 00000970 */ 0x3B, 0x00, 0x00, 0x01, 0x06, 0x3C, 0x00, 0x00, 0x01, 0x34, 0x3C, 0x00, 0x00, 0x00, 0x40, 0x3C, -/* 00000980 */ 0x00, 0x00, 0x01, 0x46, 0x3C, 0x00, 0x00, 0x00, 0xA0, 0x3C, 0x00, 0x00, 0x00, 0xCA, 0x3C, 0x00, -/* 00000990 */ 0x00, 0x00, 0xF2, 0x3C, 0x00, 0x00, 0x01, 0x04, 0x3D, 0x00, 0x00, 0x01, 0x24, 0x3D, 0x00, 0x00, -/* 000009A0 */ 0x00, 0x2C, 0x3D, 0x00, 0x00, 0x00, 0x3C, 0x3D, 0x00, 0x00, 0x00, 0x66, 0x3D, 0x00, 0x00, 0x00, -/* 000009B0 */ 0x82, 0x3D, 0x00, 0x00, 0x00, 0xA0, 0x3D, 0x00, 0x00, 0x00, 0xB4, 0x3D, 0x00, 0x00, 0x01, 0xCC, -/* 000009C0 */ 0x3D, 0x00, 0x00, 0x00, 0xD6, 0x3D, 0x00, 0x00, 0x01, 0xE0, 0x3D, 0x00, 0x00, 0x00, 0xEE, 0x3D, -/* 000009D0 */ 0x00, 0x00, 0x01, 0xFA, 0x3D, 0x00, 0x00, 0x01, 0x08, 0x3E, 0x00, 0x00, 0x01, 0x24, 0x3E, 0x00, -/* 000009E0 */ 0x00, 0x00, 0x52, 0x3E, 0x00, 0x00, 0x00, 0x9E, 0x3E, 0x00, 0x00, 0x00, 0xF2, 0x3E, 0x00, 0x00, -/* 000009F0 */ 0x00, 0x4A, 0x3F, 0x00, 0x00, 0x00, 0x86, 0x3F, 0x00, 0x00, 0x01, 0x98, 0x3F, 0x00, 0x00, 0x01, -/* 00000A00 */ 0xCA, 0x3F, 0x00, 0x00, 0x01, 0xFA, 0x3F, 0x00, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x00, 0x56, -/* 00000A10 */ 0x40, 0x00, 0x00, 0x00, 0x74, 0x40, 0x00, 0x00, 0x00, 0xAC, 0x40, 0x00, 0x00, 0x00, 0xBA, 0x40, -/* 00000A20 */ 0x00, 0x00, 0x00, 0xEA, 0x40, 0x00, 0x00, 0x00, 0xEE, 0x40, 0x00, 0x00, 0x00, 0xF2, 0x40, 0x00, -/* 00000A30 */ 0x00, 0x01, 0x18, 0x41, 0x00, 0x00, 0x01, 0x28, 0x41, 0x00, 0x00, 0x01, 0x44, 0x41, 0x00, 0x00, -/* 00000A40 */ 0x01, 0x6C, 0x41, 0x00, 0x00, 0x01, 0x84, 0x41, 0x00, 0x00, 0x01, 0x98, 0x41, 0x00, 0x00, 0x00, -/* 00000A50 */ 0xAA, 0x41, 0x00, 0x00, 0x00, 0xB4, 0x41, 0x00, 0x00, 0x01, 0xD4, 0x41, 0x00, 0x00, 0x00, 0xDA, -/* 00000A60 */ 0x41, 0x00, 0x00, 0x01, 0x0C, 0x42, 0x00, 0x00, 0x01, 0x30, 0x42, 0x00, 0x00, 0x00, 0x40, 0x42, -/* 00000A70 */ 0x00, 0x00, 0x01, 0x5E, 0x42, 0x00, 0x00, 0x00, 0x6C, 0x42, 0x00, 0x00, 0x01, 0x88, 0x42, 0x00, -/* 00000A80 */ 0x00, 0x00, 0x98, 0x42, 0x00, 0x00, 0x01, 0xBA, 0x42, 0x00, 0x00, 0x00, 0xCC, 0x42, 0x00, 0x00, -/* 00000A90 */ 0x01, 0xEA, 0x42, 0x00, 0x00, 0x00, 0xF8, 0x42, 0x00, 0x00, 0x01, 0x16, 0x43, 0x00, 0x00, 0x00, -/* 00000AA0 */ 0x24, 0x43, 0x00, 0x00, 0x01, 0x46, 0x43, 0x00, 0x00, 0x00, 0x62, 0x43, 0x00, 0x00, 0x01, 0x7C, -/* 00000AB0 */ 0x43, 0x00, 0x00, 0x00, 0x86, 0x43, 0x00, 0x00, 0x01, 0xA4, 0x43, 0x00, 0x00, 0x00, 0xB2, 0x43, -/* 00000AC0 */ 0x00, 0x00, 0x01, 0xEC, 0x43, 0x00, 0x00, 0x01, 0x18, 0x44, 0x00, 0x00, 0x01, 0x54, 0x44, 0x00, -/* 00000AD0 */ 0x00, 0x01, 0xA2, 0x44, 0x00, 0x00, 0x01, 0xCC, 0x44, 0x00, 0x00, 0x01, 0xDE, 0x44, 0x00, 0x00, -/* 00000AE0 */ 0x00, 0x0A, 0x45, 0x00, 0x00, 0x00, 0x28, 0x45, 0x00, 0x00, 0x00, 0x4A, 0x45, 0x00, 0x00, 0x00, -/* 00000AF0 */ 0x5E, 0x45, 0x00, 0x00, 0x00, 0x7A, 0x45, 0x00, 0x00, 0x00, 0x9E, 0x45, 0x00, 0x00, 0x00, 0xB4, -/* 00000B00 */ 0x45, 0x00, 0x00, 0x00, 0xDE, 0x45, 0x00, 0x00, 0x00, 0xFA, 0x45, 0x00, 0x00, 0x00, 0x00, 0x46, -/* 00000B10 */ 0x00, 0x00, 0x00, 0x4C, 0x46, 0x00, 0x00, 0x00, 0x16, 0x47, 0x00, 0x00, 0x00, 0x2C, 0x47, 0x00, -/* 00000B20 */ 0x00, 0x00, 0x72, 0x47, 0x00, 0x00, 0x00, 0x7C, 0x47, 0x00, 0x00, 0x00, 0x80, 0x47, 0x00, 0x00, -/* 00000B30 */ 0x00, 0x84, 0x47, 0x00, 0x00, 0x00, 0x88, 0x47, 0x00, 0x00, 0x00, 0xA0, 0x47, 0x00, 0x00, 0x00, -/* 00000B40 */ 0xBE, 0x47, 0x00, 0x00, 0x00, 0x0A, 0x48, 0x00, 0x00, 0x00, 0xEA, 0x48, 0x00, 0x00, 0x00, 0x04, -/* 00000B50 */ 0x49, 0x00, 0x00, 0x00, 0x14, 0x49, 0x00, 0x00, 0x00, 0x28, 0x49, 0x00, 0x00, 0x00, 0x3C, 0x49, -/* 00000B60 */ 0x00, 0x00, 0x00, 0xBE, 0x49, 0x00, 0x00, 0x00, 0xEA, 0x49, 0x00, 0x00, 0x00, 0x02, 0x4A, 0x00, -/* 00000B70 */ 0x00, 0x00, 0x14, 0x4A, 0x00, 0x00, 0x00, 0x4E, 0x4A, 0x00, 0x00, 0x00, 0x66, 0x4A, 0x00, 0x00, -/* 00000B80 */ 0x00, 0x7E, 0x4A, 0x00, 0x00, 0x00, 0x88, 0x4A, 0x00, 0x00, 0x00, 0xC8, 0x4A, 0x00, 0x00, 0x01, -/* 00000B90 */ 0xD2, 0x4A, 0x00, 0x00, 0x00, 0x24, 0x4B, 0x00, 0x00, 0x00, 0x47, 0x00, 0x6C, 0x00, 0x6F, 0x00, -/* 00000BA0 */ 0x62, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x20, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x64, 0x00, 0x65, 0x00, -/* 00000BB0 */ 0x00, 0x00, 0x75, 0x00, 0x73, 0x00, 0x65, 0x00, 0x20, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, -/* 00000BC0 */ 0x69, 0x00, 0x63, 0x00, 0x74, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, -/* 00000BD0 */ 0x43, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x00, 0x00, 0x73, 0x00, 0x65, 0x00, -/* 00000BE0 */ 0x74, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, -/* 00000BF0 */ 0x70, 0x00, 0x65, 0x00, 0x00, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x41, 0x00, 0x72, 0x00, -/* 00000C00 */ 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x4C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x74, 0x00, -/* 00000C10 */ 0x68, 0x00, 0x00, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x49, 0x00, 0x6E, 0x00, -/* 00000C20 */ 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, 0x46, 0x00, 0x75, 0x00, -/* 00000C30 */ 0x6E, 0x00, 0x63, 0x00, 0x00, 0x00, 0x52, 0x00, 0x61, 0x00, 0x69, 0x00, 0x73, 0x00, 0x65, 0x00, -/* 00000C40 */ 0x41, 0x00, 0x73, 0x00, 0x73, 0x00, 0x65, 0x00, 0x72, 0x00, 0x74, 0x00, 0x00, 0x00, 0x4F, 0x00, -/* 00000C50 */ 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x47, 0x00, 0x65, 0x00, 0x74, 0x00, -/* 00000C60 */ 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, -/* 00000C70 */ 0x65, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x4F, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, -/* 00000C80 */ 0x63, 0x00, 0x74, 0x00, 0x49, 0x00, 0x73, 0x00, 0x45, 0x00, 0x78, 0x00, 0x74, 0x00, 0x65, 0x00, -/* 00000C90 */ 0x6E, 0x00, 0x73, 0x00, 0x69, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x4F, 0x00, -/* 00000CA0 */ 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x47, 0x00, 0x65, 0x00, 0x74, 0x00, -/* 00000CB0 */ 0x4F, 0x00, 0x77, 0x00, 0x6E, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x65, 0x00, -/* 00000CC0 */ 0x72, 0x00, 0x74, 0x00, 0x79, 0x00, 0x4E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x73, 0x00, -/* 00000CD0 */ 0x00, 0x00, 0x4F, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x49, 0x00, -/* 00000CE0 */ 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, 0x48, 0x00, -/* 00000CF0 */ 0x61, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x77, 0x00, 0x6E, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, -/* 00000D00 */ 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x6F, 0x00, -/* 00000D10 */ 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x44, 0x00, 0x65, 0x00, 0x66, 0x00, -/* 00000D20 */ 0x69, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x65, 0x00, -/* 00000D30 */ 0x72, 0x00, 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x4F, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, -/* 00000D40 */ 0x63, 0x00, 0x74, 0x00, 0x44, 0x00, 0x65, 0x00, 0x66, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x65, 0x00, -/* 00000D50 */ 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x74, 0x00, 0x79, 0x00, -/* 00000D60 */ 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x49, 0x00, 0x6E, 0x00, -/* 00000D70 */ 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, -/* 00000D80 */ 0x72, 0x00, 0x45, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, -/* 00000D90 */ 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, -/* 00000DA0 */ 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x65, 0x00, 0x78, 0x00, -/* 00000DB0 */ 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, -/* 00000DC0 */ 0x49, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, -/* 00000DD0 */ 0x50, 0x00, 0x75, 0x00, 0x73, 0x00, 0x68, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, -/* 00000DE0 */ 0x61, 0x00, 0x79, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, -/* 00000DF0 */ 0x63, 0x00, 0x65, 0x00, 0x4A, 0x00, 0x6F, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x46, 0x00, -/* 00000E00 */ 0x75, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x49, 0x00, -/* 00000E10 */ 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, 0x42, 0x00, -/* 00000E20 */ 0x69, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x00, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, -/* 00000E30 */ 0x49, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, -/* 00000E40 */ 0x47, 0x00, 0x65, 0x00, 0x74, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 00000E50 */ 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x4E, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x00, 0x00, -/* 00000E60 */ 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x49, 0x00, 0x6E, 0x00, -/* 00000E70 */ 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, 0x52, 0x00, 0x65, 0x00, -/* 00000E80 */ 0x70, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x63, 0x00, 0x65, 0x00, 0x00, 0x00, 0x53, 0x00, 0x74, 0x00, -/* 00000E90 */ 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, -/* 00000EA0 */ 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, -/* 00000EB0 */ 0x77, 0x00, 0x65, 0x00, 0x72, 0x00, 0x43, 0x00, 0x61, 0x00, 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 00000EC0 */ 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x49, 0x00, 0x6E, 0x00, -/* 00000ED0 */ 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, 0x54, 0x00, 0x6F, 0x00, -/* 00000EE0 */ 0x55, 0x00, 0x70, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x43, 0x00, 0x61, 0x00, 0x73, 0x00, -/* 00000EF0 */ 0x65, 0x00, 0x00, 0x00, 0x74, 0x00, 0x68, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x45, 0x00, -/* 00000F00 */ 0x78, 0x00, 0x49, 0x00, 0x66, 0x00, 0x4F, 0x00, 0x4F, 0x00, 0x4D, 0x00, 0x4F, 0x00, 0x72, 0x00, -/* 00000F10 */ 0x53, 0x00, 0x4F, 0x00, 0x45, 0x00, 0x00, 0x00, 0x74, 0x00, 0x61, 0x00, 0x67, 0x00, 0x50, 0x00, -/* 00000F20 */ 0x75, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x63, 0x00, 0x46, 0x00, 0x75, 0x00, 0x6E, 0x00, -/* 00000F30 */ 0x63, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, -/* 00000F40 */ 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x66, 0x00, -/* 00000F50 */ 0x6F, 0x00, 0x72, 0x00, 0x45, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x49, 0x00, 0x66, 0x00, -/* 00000F60 */ 0x50, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x00, 0x00, -/* 00000F70 */ 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x45, 0x00, 0x78, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6E, 0x00, -/* 00000F80 */ 0x73, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x53, 0x00, 0x75, 0x00, 0x62, 0x00, 0x74, 0x00, -/* 00000F90 */ 0x61, 0x00, 0x67, 0x00, 0x73, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, -/* 00000FA0 */ 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00000FB0 */ 0x65, 0x00, 0x48, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, -/* 00000FC0 */ 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x4C, 0x00, -/* 00000FD0 */ 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x73, 0x00, -/* 00000FE0 */ 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x70, 0x00, 0x70, 0x00, 0x65, 0x00, 0x64, 0x00, 0x44, 0x00, -/* 00000FF0 */ 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x4C, 0x00, 0x6F, 0x00, -/* 00001000 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, -/* 00001010 */ 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, -/* 00001020 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x57, 0x00, -/* 00001030 */ 0x72, 0x00, 0x61, 0x00, 0x70, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x63, 0x00, -/* 00001040 */ 0x61, 0x00, 0x6E, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00001050 */ 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00001060 */ 0x65, 0x00, 0x4C, 0x00, 0x69, 0x00, 0x73, 0x00, 0x74, 0x00, 0x57, 0x00, 0x72, 0x00, 0x61, 0x00, -/* 00001070 */ 0x70, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, -/* 00001080 */ 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x41, 0x00, 0x63, 0x00, 0x63, 0x00, 0x65, 0x00, -/* 00001090 */ 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, -/* 000010A0 */ 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x56, 0x00, 0x61, 0x00, -/* 000010B0 */ 0x6C, 0x00, 0x75, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, 0x76, 0x00, -/* 000010C0 */ 0x65, 0x00, 0x72, 0x00, 0x73, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, -/* 000010D0 */ 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x41, 0x00, 0x63, 0x00, 0x63, 0x00, 0x65, 0x00, 0x70, 0x00, -/* 000010E0 */ 0x74, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, -/* 000010F0 */ 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x56, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00001100 */ 0x75, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x70, 0x00, 0x70, 0x00, -/* 00001110 */ 0x65, 0x00, 0x64, 0x00, 0x44, 0x00, 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, -/* 00001120 */ 0x74, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 00001130 */ 0x49, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x54, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, -/* 00001140 */ 0x00, 0x00, 0x69, 0x00, 0x73, 0x00, 0x50, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x66, 0x00, -/* 00001150 */ 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x55, 0x00, 0x73, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, -/* 00001160 */ 0x49, 0x00, 0x43, 0x00, 0x55, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x4F, 0x00, 0x54, 0x00, 0x5F, 0x00, -/* 00001170 */ 0x46, 0x00, 0x4F, 0x00, 0x55, 0x00, 0x4E, 0x00, 0x44, 0x00, 0x00, 0x00, 0x62, 0x00, 0x61, 0x00, -/* 00001180 */ 0x72, 0x00, 0x65, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x42, 0x00, -/* 00001190 */ 0x75, 0x00, 0x69, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x46, 0x00, 0x75, 0x00, -/* 000011A0 */ 0x6E, 0x00, 0x63, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x49, 0x00, 0x44, 0x00, -/* 000011B0 */ 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x72, 0x00, 0x61, 0x00, 0x69, 0x00, 0x73, 0x00, 0x65, 0x00, -/* 000011C0 */ 0x00, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, -/* 000011D0 */ 0x72, 0x00, 0x53, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, -/* 000011E0 */ 0x76, 0x00, 0x69, 0x00, 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, -/* 000011F0 */ 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x43, 0x00, 0x61, 0x00, 0x73, 0x00, -/* 00001200 */ 0x65, 0x00, 0x46, 0x00, 0x69, 0x00, 0x72, 0x00, 0x73, 0x00, 0x74, 0x00, 0x00, 0x00, 0x4E, 0x00, -/* 00001210 */ 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, -/* 00001220 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x53, 0x00, 0x74, 0x00, 0x79, 0x00, 0x6C, 0x00, 0x65, 0x00, -/* 00001230 */ 0x00, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, -/* 00001240 */ 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x43, 0x00, 0x75, 0x00, 0x72, 0x00, -/* 00001250 */ 0x72, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x79, 0x00, 0x44, 0x00, 0x69, 0x00, 0x73, 0x00, -/* 00001260 */ 0x70, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x79, 0x00, 0x00, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x45, 0x00, -/* 00001270 */ 0x6E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x00, 0x00, 0x61, 0x00, 0x62, 0x00, 0x73, 0x00, 0x00, 0x00, -/* 00001280 */ 0x66, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x61, 0x00, -/* 00001290 */ 0x78, 0x00, 0x00, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x00, 0x00, 0x4D, 0x00, 0x49, 0x00, -/* 000012A0 */ 0x4E, 0x00, 0x00, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x6F, 0x00, -/* 000012B0 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, -/* 000012C0 */ 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, -/* 000012D0 */ 0x65, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 000012E0 */ 0x65, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, -/* 000012F0 */ 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, -/* 00001300 */ 0x54, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, -/* 00001310 */ 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, -/* 00001320 */ 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, -/* 00001330 */ 0x72, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00001340 */ 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, -/* 00001350 */ 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x4C, 0x00, 0x6F, 0x00, -/* 00001360 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00, -/* 00001370 */ 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, 0x00, 0x00, 0x4D, 0x00, 0x41, 0x00, 0x58, 0x00, 0x00, 0x00, -/* 00001380 */ 0x74, 0x00, 0x6F, 0x00, 0x55, 0x00, 0x70, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x43, 0x00, -/* 00001390 */ 0x61, 0x00, 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, -/* 000013A0 */ 0x77, 0x00, 0x65, 0x00, 0x72, 0x00, 0x43, 0x00, 0x61, 0x00, 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 000013B0 */ 0x72, 0x00, 0x65, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x63, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 000013C0 */ 0x73, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x74, 0x00, 0x00, 0x00, 0x73, 0x00, 0x75, 0x00, -/* 000013D0 */ 0x62, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, -/* 000013E0 */ 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x49, 0x00, 0x6E, 0x00, -/* 000013F0 */ 0x64, 0x00, 0x65, 0x00, 0x78, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x61, 0x00, -/* 00001400 */ 0x74, 0x00, 0x63, 0x00, 0x68, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, 0x70, 0x00, 0x65, 0x00, -/* 00001410 */ 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x45, 0x00, 0x61, 0x00, -/* 00001420 */ 0x63, 0x00, 0x68, 0x00, 0x00, 0x00, 0x70, 0x00, 0x75, 0x00, 0x73, 0x00, 0x68, 0x00, 0x00, 0x00, -/* 00001430 */ 0x6A, 0x00, 0x6F, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x61, 0x00, 0x72, 0x00, 0x72, 0x00, -/* 00001440 */ 0x61, 0x00, 0x79, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x65, 0x00, 0x78, 0x00, 0x4F, 0x00, -/* 00001450 */ 0x66, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x70, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, -/* 00001460 */ 0x64, 0x00, 0x75, 0x00, 0x63, 0x00, 0x65, 0x00, 0x00, 0x00, 0x73, 0x00, 0x6C, 0x00, 0x69, 0x00, -/* 00001470 */ 0x63, 0x00, 0x65, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x61, 0x00, -/* 00001480 */ 0x74, 0x00, 0x00, 0x00, 0x66, 0x00, 0x69, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, -/* 00001490 */ 0x00, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x71, 0x00, 0x75, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 000014A0 */ 0x6B, 0x00, 0x65, 0x00, 0x79, 0x00, 0x73, 0x00, 0x00, 0x00, 0x68, 0x00, 0x61, 0x00, 0x73, 0x00, -/* 000014B0 */ 0x4F, 0x00, 0x77, 0x00, 0x6E, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x65, 0x00, -/* 000014C0 */ 0x72, 0x00, 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x64, 0x00, 0x65, 0x00, 0x66, 0x00, 0x69, 0x00, -/* 000014D0 */ 0x6E, 0x00, 0x65, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, -/* 000014E0 */ 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x69, 0x00, 0x73, 0x00, 0x45, 0x00, 0x78, 0x00, 0x74, 0x00, -/* 000014F0 */ 0x65, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x69, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 00001500 */ 0x63, 0x00, 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, 0x73, 0x00, -/* 00001510 */ 0x65, 0x00, 0x74, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, -/* 00001520 */ 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x69, 0x00, 0x73, 0x00, -/* 00001530 */ 0x46, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, 0x69, 0x00, -/* 00001540 */ 0x73, 0x00, 0x4E, 0x00, 0x61, 0x00, 0x4E, 0x00, 0x00, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, -/* 00001550 */ 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6E, 0x00, -/* 00001560 */ 0x64, 0x00, 0x00, 0x00, 0x61, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x79, 0x00, 0x00, 0x00, -/* 00001570 */ 0x72, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x65, 0x00, 0x45, 0x00, 0x72, 0x00, 0x72, 0x00, -/* 00001580 */ 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x61, 0x00, 0x73, 0x00, 0x73, 0x00, 0x65, 0x00, 0x72, 0x00, -/* 00001590 */ 0x74, 0x00, 0x00, 0x00, 0x62, 0x00, 0x61, 0x00, 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, 0x61, 0x00, -/* 000015A0 */ 0x63, 0x00, 0x63, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x00, 0x00, 0x63, 0x00, 0x61, 0x00, -/* 000015B0 */ 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, 0x76, 0x00, 0x61, 0x00, 0x72, 0x00, 0x69, 0x00, 0x61, 0x00, -/* 000015C0 */ 0x6E, 0x00, 0x74, 0x00, 0x00, 0x00, 0x44, 0x00, 0x45, 0x00, 0x46, 0x00, 0x41, 0x00, 0x55, 0x00, -/* 000015D0 */ 0x4C, 0x00, 0x54, 0x00, 0x00, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, -/* 000015E0 */ 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x66, 0x00, -/* 000015F0 */ 0x61, 0x00, 0x6C, 0x00, 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, 0x44, 0x00, 0x45, 0x00, 0x43, 0x00, -/* 00001600 */ 0x49, 0x00, 0x4D, 0x00, 0x41, 0x00, 0x4C, 0x00, 0x00, 0x00, 0x50, 0x00, 0x45, 0x00, 0x52, 0x00, -/* 00001610 */ 0x43, 0x00, 0x45, 0x00, 0x4E, 0x00, 0x54, 0x00, 0x00, 0x00, 0x43, 0x00, 0x55, 0x00, 0x52, 0x00, -/* 00001620 */ 0x52, 0x00, 0x45, 0x00, 0x4E, 0x00, 0x43, 0x00, 0x59, 0x00, 0x00, 0x00, 0x53, 0x00, 0x59, 0x00, -/* 00001630 */ 0x4D, 0x00, 0x42, 0x00, 0x4F, 0x00, 0x4C, 0x00, 0x00, 0x00, 0x43, 0x00, 0x4F, 0x00, 0x44, 0x00, -/* 00001640 */ 0x45, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x41, 0x00, 0x4D, 0x00, 0x45, 0x00, 0x00, 0x00, 0x54, 0x00, -/* 00001650 */ 0x6F, 0x00, 0x4F, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x00, 0x00, -/* 00001660 */ 0x54, 0x00, 0x6F, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, -/* 00001670 */ 0x00, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, -/* 00001680 */ 0x72, 0x00, 0x00, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x67, 0x00, 0x69, 0x00, -/* 00001690 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x42, 0x00, 0x6F, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x65, 0x00, -/* 000016A0 */ 0x61, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x55, 0x00, 0x69, 0x00, 0x6E, 0x00, -/* 000016B0 */ 0x74, 0x00, 0x33, 0x00, 0x32, 0x00, 0x00, 0x00, 0x69, 0x00, 0x73, 0x00, 0x56, 0x00, 0x61, 0x00, -/* 000016C0 */ 0x6C, 0x00, 0x69, 0x00, 0x64, 0x00, 0x00, 0x00, 0x56, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, -/* 000016D0 */ 0x64, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x49, 0x00, -/* 000016E0 */ 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x43, 0x00, -/* 000016F0 */ 0x61, 0x00, 0x6E, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00001700 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, -/* 00001710 */ 0x6E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x76, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00001720 */ 0x75, 0x00, 0x65, 0x00, 0x00, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x43, 0x00, 0x61, 0x00, -/* 00001730 */ 0x6E, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x4C, 0x00, -/* 00001740 */ 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x77, 0x00, -/* 00001750 */ 0x72, 0x00, 0x69, 0x00, 0x74, 0x00, 0x61, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 00001760 */ 0x65, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x72, 0x00, 0x61, 0x00, 0x62, 0x00, -/* 00001770 */ 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x66, 0x00, 0x69, 0x00, -/* 00001780 */ 0x67, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 00001790 */ 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, -/* 000017A0 */ 0x00, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, -/* 000017B0 */ 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x44, 0x00, 0x61, 0x00, -/* 000017C0 */ 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, -/* 000017D0 */ 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x50, 0x00, 0x6C, 0x00, 0x75, 0x00, -/* 000017E0 */ 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x52, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, -/* 000017F0 */ 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x43, 0x00, 0x6F, 0x00, -/* 00001800 */ 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x2E, 0x00, 0x73, 0x00, -/* 00001810 */ 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, -/* 00001820 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, -/* 00001830 */ 0x66, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x4E, 0x00, -/* 00001840 */ 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, -/* 00001850 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, -/* 00001860 */ 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, -/* 00001870 */ 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x49, 0x00, -/* 00001880 */ 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, -/* 00001890 */ 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, -/* 000018A0 */ 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, -/* 000018B0 */ 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, -/* 000018C0 */ 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x73, 0x00, 0x75, 0x00, -/* 000018D0 */ 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, -/* 000018E0 */ 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, -/* 000018F0 */ 0x00, 0x00, 0x65, 0x00, 0x73, 0x00, 0x2D, 0x00, 0x45, 0x00, 0x53, 0x00, 0x00, 0x00, 0x74, 0x00, -/* 00001900 */ 0x72, 0x00, 0x61, 0x00, 0x64, 0x00, 0x00, 0x00, 0x74, 0x00, 0x72, 0x00, 0x61, 0x00, 0x64, 0x00, -/* 00001910 */ 0x6E, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x2D, 0x00, 0x4C, 0x00, 0x56, 0x00, -/* 00001920 */ 0x00, 0x00, 0x64, 0x00, 0x65, 0x00, 0x2D, 0x00, 0x44, 0x00, 0x45, 0x00, 0x00, 0x00, 0x70, 0x00, -/* 00001930 */ 0x68, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x62, 0x00, 0x6B, 0x00, 0x00, 0x00, 0x70, 0x00, -/* 00001940 */ 0x68, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x62, 0x00, 0x00, 0x00, 0x6A, 0x00, 0x61, 0x00, -/* 00001950 */ 0x2D, 0x00, 0x4A, 0x00, 0x50, 0x00, 0x00, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x68, 0x00, -/* 00001960 */ 0x61, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x72, 0x00, 0x61, 0x00, 0x64, 0x00, 0x73, 0x00, 0x74, 0x00, -/* 00001970 */ 0x72, 0x00, 0x00, 0x00, 0x7A, 0x00, 0x68, 0x00, 0x2D, 0x00, 0x54, 0x00, 0x57, 0x00, 0x00, 0x00, -/* 00001980 */ 0x70, 0x00, 0x68, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x74, 0x00, 0x69, 0x00, 0x63, 0x00, -/* 00001990 */ 0x00, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x00, 0x00, -/* 000019A0 */ 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x6B, 0x00, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 000019B0 */ 0x7A, 0x00, 0x68, 0x00, 0x2D, 0x00, 0x48, 0x00, 0x4B, 0x00, 0x00, 0x00, 0x7A, 0x00, 0x68, 0x00, -/* 000019C0 */ 0x2D, 0x00, 0x4D, 0x00, 0x4F, 0x00, 0x00, 0x00, 0x7A, 0x00, 0x68, 0x00, 0x2D, 0x00, 0x43, 0x00, -/* 000019D0 */ 0x4E, 0x00, 0x00, 0x00, 0x70, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x79, 0x00, 0x69, 0x00, 0x6E, 0x00, -/* 000019E0 */ 0x00, 0x00, 0x7A, 0x00, 0x68, 0x00, 0x2D, 0x00, 0x53, 0x00, 0x47, 0x00, 0x00, 0x00, 0x75, 0x00, -/* 000019F0 */ 0x73, 0x00, 0x65, 0x00, 0x43, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x73, 0x00, -/* 00001A00 */ 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x4C, 0x00, -/* 00001A10 */ 0x6F, 0x00, 0x6F, 0x00, 0x6B, 0x00, 0x75, 0x00, 0x70, 0x00, 0x43, 0x00, 0x61, 0x00, 0x63, 0x00, -/* 00001A20 */ 0x68, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00001A30 */ 0x65, 0x00, 0x42, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x46, 0x00, 0x69, 0x00, 0x74, 0x00, -/* 00001A40 */ 0x43, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x00, 0x00, 0x47, 0x00, 0x65, 0x00, -/* 00001A50 */ 0x74, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, -/* 00001A60 */ 0x49, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, -/* 00001A70 */ 0x7A, 0x00, 0x65, 0x00, 0x43, 0x00, 0x75, 0x00, 0x72, 0x00, 0x72, 0x00, 0x65, 0x00, 0x6E, 0x00, -/* 00001A80 */ 0x63, 0x00, 0x79, 0x00, 0x52, 0x00, 0x65, 0x00, 0x67, 0x00, 0x45, 0x00, 0x78, 0x00, 0x70, 0x00, -/* 00001A90 */ 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x64, 0x00, 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, -/* 00001AA0 */ 0x6C, 0x00, 0x74, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, -/* 00001AB0 */ 0x00, 0x00, 0x47, 0x00, 0x65, 0x00, 0x74, 0x00, 0x44, 0x00, 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, -/* 00001AC0 */ 0x75, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00001AD0 */ 0x65, 0x00, 0x00, 0x00, 0x42, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x41, 0x00, 0x76, 0x00, -/* 00001AE0 */ 0x61, 0x00, 0x69, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x4C, 0x00, -/* 00001AF0 */ 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x67, 0x00, 0x65, 0x00, -/* 00001B00 */ 0x74, 0x00, 0x4B, 0x00, 0x65, 0x00, 0x79, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, -/* 00001B10 */ 0x6C, 0x00, 0x65, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x61, 0x00, 0x00, 0x00, 0x4C, 0x00, -/* 00001B20 */ 0x6F, 0x00, 0x6F, 0x00, 0x6B, 0x00, 0x75, 0x00, 0x70, 0x00, 0x4D, 0x00, 0x61, 0x00, 0x74, 0x00, -/* 00001B30 */ 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x42, 0x00, 0x65, 0x00, 0x73, 0x00, -/* 00001B40 */ 0x74, 0x00, 0x46, 0x00, 0x69, 0x00, 0x74, 0x00, 0x4D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x63, 0x00, -/* 00001B50 */ 0x68, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x55, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x63, 0x00, -/* 00001B60 */ 0x6F, 0x00, 0x64, 0x00, 0x65, 0x00, 0x45, 0x00, 0x78, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6E, 0x00, -/* 00001B70 */ 0x73, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x56, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x75, 0x00, -/* 00001B80 */ 0x65, 0x00, 0x00, 0x00, 0x52, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, -/* 00001B90 */ 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 00001BA0 */ 0x47, 0x00, 0x65, 0x00, 0x74, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, -/* 00001BB0 */ 0x72, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, -/* 00001BC0 */ 0x43, 0x00, 0x55, 0x00, 0x52, 0x00, 0x52, 0x00, 0x45, 0x00, 0x4E, 0x00, 0x43, 0x00, 0x59, 0x00, -/* 00001BD0 */ 0x5F, 0x00, 0x43, 0x00, 0x4F, 0x00, 0x44, 0x00, 0x45, 0x00, 0x5F, 0x00, 0x52, 0x00, 0x45, 0x00, -/* 00001BE0 */ 0x00, 0x00, 0x70, 0x00, 0x61, 0x00, 0x72, 0x00, 0x73, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x61, 0x00, -/* 00001BF0 */ 0x6E, 0x00, 0x67, 0x00, 0x74, 0x00, 0x61, 0x00, 0x67, 0x00, 0x00, 0x00, 0x49, 0x00, 0x73, 0x00, -/* 00001C00 */ 0x57, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, -/* 00001C10 */ 0x65, 0x00, 0x64, 0x00, 0x43, 0x00, 0x75, 0x00, 0x72, 0x00, 0x72, 0x00, 0x65, 0x00, 0x6E, 0x00, -/* 00001C20 */ 0x63, 0x00, 0x79, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x64, 0x00, 0x65, 0x00, 0x00, 0x00, 0x49, 0x00, -/* 00001C30 */ 0x73, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x75, 0x00, 0x63, 0x00, 0x74, 0x00, 0x75, 0x00, -/* 00001C40 */ 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x79, 0x00, 0x56, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00001C50 */ 0x69, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x75, 0x00, 0x61, 0x00, -/* 00001C60 */ 0x67, 0x00, 0x65, 0x00, 0x54, 0x00, 0x61, 0x00, 0x67, 0x00, 0x00, 0x00, 0x43, 0x00, 0x61, 0x00, -/* 00001C70 */ 0x6E, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, -/* 00001C80 */ 0x7A, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, -/* 00001C90 */ 0x4C, 0x00, 0x69, 0x00, 0x73, 0x00, 0x74, 0x00, 0x00, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x6F, 0x00, -/* 00001CA0 */ 0x6B, 0x00, 0x75, 0x00, 0x70, 0x00, 0x53, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, -/* 00001CB0 */ 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, -/* 00001CC0 */ 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x42, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, -/* 00001CD0 */ 0x46, 0x00, 0x69, 0x00, 0x74, 0x00, 0x53, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, -/* 00001CE0 */ 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, -/* 00001CF0 */ 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x53, 0x00, 0x65, 0x00, 0x74, 0x00, 0x4E, 0x00, -/* 00001D00 */ 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, -/* 00001D10 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x44, 0x00, 0x69, 0x00, 0x67, 0x00, 0x69, 0x00, 0x74, 0x00, -/* 00001D20 */ 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x00, 0x00, -/* 00001D30 */ 0x53, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, -/* 00001D40 */ 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, -/* 00001D50 */ 0x00, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x53, 0x00, 0x74, 0x00, 0x61, 0x00, -/* 00001D60 */ 0x74, 0x00, 0x69, 0x00, 0x63, 0x00, 0x4D, 0x00, 0x65, 0x00, 0x74, 0x00, 0x68, 0x00, 0x6F, 0x00, -/* 00001D70 */ 0x64, 0x00, 0x54, 0x00, 0x68, 0x00, 0x69, 0x00, 0x73, 0x00, 0x41, 0x00, 0x72, 0x00, 0x67, 0x00, -/* 00001D80 */ 0x00, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, -/* 00001D90 */ 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, -/* 00001DA0 */ 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x5F, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x6F, 0x00, -/* 00001DB0 */ 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x75, 0x00, 0x63, 0x00, 0x74, 0x00, 0x61, 0x00, -/* 00001DC0 */ 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x43, 0x00, -/* 00001DD0 */ 0x61, 0x00, 0x6E, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00001DE0 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x5F, 0x00, -/* 00001DF0 */ 0x75, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, -/* 00001E00 */ 0x75, 0x00, 0x63, 0x00, 0x74, 0x00, 0x61, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 00001E10 */ 0x63, 0x00, 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x52, 0x00, 0x65, 0x00, -/* 00001E20 */ 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4F, 0x00, 0x70, 0x00, -/* 00001E30 */ 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x00, 0x00, 0x67, 0x00, 0x65, 0x00, -/* 00001E40 */ 0x74, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x63, 0x00, -/* 00001E50 */ 0x61, 0x00, 0x6C, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, -/* 00001E60 */ 0x73, 0x00, 0x5F, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x49, 0x00, -/* 00001E70 */ 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x7A, 0x00, -/* 00001E80 */ 0x65, 0x00, 0x4C, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x54, 0x00, 0x61, 0x00, 0x67, 0x00, -/* 00001E90 */ 0x52, 0x00, 0x45, 0x00, 0x73, 0x00, 0x00, 0x00, 0x43, 0x00, 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, -/* 00001EA0 */ 0x74, 0x00, 0x65, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, -/* 00001EB0 */ 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, -/* 00001EC0 */ 0x00, 0x00, 0x49, 0x00, 0x73, 0x00, 0x57, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x46, 0x00, -/* 00001ED0 */ 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x61, 0x00, 0x6E, 0x00, -/* 00001EE0 */ 0x67, 0x00, 0x75, 0x00, 0x61, 0x00, 0x67, 0x00, 0x65, 0x00, 0x54, 0x00, 0x61, 0x00, 0x67, 0x00, -/* 00001EF0 */ 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x70, 0x00, -/* 00001F00 */ 0x70, 0x00, 0x65, 0x00, 0x64, 0x00, 0x44, 0x00, 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, -/* 00001F10 */ 0x6C, 0x00, 0x74, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, -/* 00001F20 */ 0x00, 0x00, 0x4C, 0x00, 0x41, 0x00, 0x4E, 0x00, 0x47, 0x00, 0x5F, 0x00, 0x54, 0x00, 0x41, 0x00, -/* 00001F30 */ 0x47, 0x00, 0x5F, 0x00, 0x42, 0x00, 0x41, 0x00, 0x53, 0x00, 0x45, 0x00, 0x5F, 0x00, 0x52, 0x00, -/* 00001F40 */ 0x45, 0x00, 0x00, 0x00, 0x4C, 0x00, 0x41, 0x00, 0x4E, 0x00, 0x47, 0x00, 0x5F, 0x00, 0x54, 0x00, -/* 00001F50 */ 0x41, 0x00, 0x47, 0x00, 0x5F, 0x00, 0x45, 0x00, 0x58, 0x00, 0x54, 0x00, 0x5F, 0x00, 0x52, 0x00, -/* 00001F60 */ 0x45, 0x00, 0x00, 0x00, 0x4C, 0x00, 0x41, 0x00, 0x4E, 0x00, 0x47, 0x00, 0x5F, 0x00, 0x54, 0x00, -/* 00001F70 */ 0x41, 0x00, 0x47, 0x00, 0x5F, 0x00, 0x52, 0x00, 0x45, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, -/* 00001F80 */ 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x5F, 0x00, 0x73, 0x00, -/* 00001F90 */ 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, -/* 00001FA0 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, -/* 00001FB0 */ 0x66, 0x00, 0x5F, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x63, 0x00, -/* 00001FC0 */ 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x5F, 0x00, -/* 00001FD0 */ 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, -/* 00001FE0 */ 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, -/* 00001FF0 */ 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, -/* 00002000 */ 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x5F, 0x00, -/* 00002010 */ 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, -/* 00002020 */ 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, -/* 00002030 */ 0x4F, 0x00, 0x66, 0x00, 0x5F, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 00002040 */ 0x6E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, -/* 00002050 */ 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x5F, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, -/* 00002060 */ 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, -/* 00002070 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, -/* 00002080 */ 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, -/* 00002090 */ 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x5F, 0x00, 0x73, 0x00, -/* 000020A0 */ 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, -/* 000020B0 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, -/* 000020C0 */ 0x66, 0x00, 0x5F, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x64, 0x00, -/* 000020D0 */ 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, -/* 000020E0 */ 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x5F, 0x00, 0x73, 0x00, 0x75, 0x00, -/* 000020F0 */ 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, -/* 00002100 */ 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, -/* 00002110 */ 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x70, 0x00, 0x70, 0x00, 0x65, 0x00, -/* 00002120 */ 0x64, 0x00, 0x44, 0x00, 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x74, 0x00, -/* 00002130 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6E, 0x00, -/* 00002140 */ 0x00, 0x00, 0x5F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 00002150 */ 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x00, 0x00, 0x73, 0x00, 0x65, 0x00, 0x74, 0x00, 0x00, 0x00, -/* 00002160 */ 0x5F, 0x00, 0x2E, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x55, 0x00, 0x70, 0x00, 0x70, 0x00, 0x65, 0x00, -/* 00002170 */ 0x72, 0x00, 0x43, 0x00, 0x61, 0x00, 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, -/* 00002180 */ 0x74, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x65, 0x00, 0x72, 0x00, 0x43, 0x00, -/* 00002190 */ 0x61, 0x00, 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x72, 0x00, 0x65, 0x00, -/* 000021A0 */ 0x70, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x63, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, -/* 000021B0 */ 0x73, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x74, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, -/* 000021C0 */ 0x73, 0x00, 0x75, 0x00, 0x62, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, -/* 000021D0 */ 0x67, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, -/* 000021E0 */ 0x6E, 0x00, 0x67, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x65, 0x00, 0x78, 0x00, 0x4F, 0x00, -/* 000021F0 */ 0x66, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x63, 0x00, -/* 00002200 */ 0x68, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x72, 0x00, 0x65, 0x00, 0x70, 0x00, 0x65, 0x00, -/* 00002210 */ 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, -/* 00002220 */ 0x45, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x70, 0x00, -/* 00002230 */ 0x75, 0x00, 0x73, 0x00, 0x68, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x6A, 0x00, 0x6F, 0x00, -/* 00002240 */ 0x69, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x61, 0x00, 0x72, 0x00, 0x72, 0x00, -/* 00002250 */ 0x61, 0x00, 0x79, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x65, 0x00, 0x78, 0x00, 0x4F, 0x00, -/* 00002260 */ 0x66, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x70, 0x00, 0x00, 0x00, -/* 00002270 */ 0x5F, 0x00, 0x2E, 0x00, 0x72, 0x00, 0x65, 0x00, 0x64, 0x00, 0x75, 0x00, 0x63, 0x00, 0x65, 0x00, -/* 00002280 */ 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x63, 0x00, 0x65, 0x00, -/* 00002290 */ 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x61, 0x00, -/* 000022A0 */ 0x74, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x69, 0x00, 0x6C, 0x00, 0x74, 0x00, -/* 000022B0 */ 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x69, 0x00, -/* 000022C0 */ 0x71, 0x00, 0x75, 0x00, 0x65, 0x00, 0x00, 0x00, 0x61, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, -/* 000022D0 */ 0x79, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x68, 0x00, 0x61, 0x00, 0x73, 0x00, 0x4F, 0x00, -/* 000022E0 */ 0x77, 0x00, 0x6E, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, -/* 000022F0 */ 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x64, 0x00, 0x65, 0x00, 0x66, 0x00, -/* 00002300 */ 0x69, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x65, 0x00, -/* 00002310 */ 0x72, 0x00, 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x63, 0x00, 0x72, 0x00, -/* 00002320 */ 0x65, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x73, 0x00, -/* 00002330 */ 0x65, 0x00, 0x74, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, -/* 00002340 */ 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, -/* 00002350 */ 0x66, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, -/* 00002360 */ 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 00002370 */ 0x5F, 0x00, 0x2E, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x00, 0x00, 0x5F, 0x00, -/* 00002380 */ 0x2E, 0x00, 0x61, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x79, 0x00, 0x00, 0x00, 0x72, 0x00, -/* 00002390 */ 0x61, 0x00, 0x69, 0x00, 0x73, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6E, 0x00, -/* 000023A0 */ 0x67, 0x00, 0x65, 0x00, 0x45, 0x00, 0x72, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, -/* 000023B0 */ 0x72, 0x00, 0x61, 0x00, 0x69, 0x00, 0x73, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x61, 0x00, 0x73, 0x00, -/* 000023C0 */ 0x73, 0x00, 0x65, 0x00, 0x72, 0x00, 0x74, 0x00, 0x00, 0x00, 0x41, 0x00, 0x73, 0x00, 0x73, 0x00, -/* 000023D0 */ 0x65, 0x00, 0x72, 0x00, 0x74, 0x00, 0x20, 0x00, 0x66, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6C, 0x00, -/* 000023E0 */ 0x65, 0x00, 0x64, 0x00, 0x00, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, -/* 000023F0 */ 0x67, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x63, 0x00, -/* 00002400 */ 0x6F, 0x00, 0x00, 0x00, 0x6B, 0x00, 0x66, 0x00, 0x00, 0x00, 0x6B, 0x00, 0x6E, 0x00, 0x00, 0x00, -/* 00002410 */ 0x63, 0x00, 0x61, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x00, 0x00, 0x68, 0x00, 0x63, 0x00, -/* 00002420 */ 0x00, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x64, 0x00, 0x65, 0x00, -/* 00002430 */ 0x45, 0x00, 0x78, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x69, 0x00, 0x6F, 0x00, -/* 00002440 */ 0x6E, 0x00, 0x00, 0x00, 0x65, 0x00, 0x78, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x73, 0x00, -/* 00002450 */ 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, 0x66, 0x00, 0x6F, 0x00, -/* 00002460 */ 0x75, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00002470 */ 0x65, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x74, 0x00, -/* 00002480 */ 0x00, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, -/* 00002490 */ 0x65, 0x00, 0x64, 0x00, 0x45, 0x00, 0x78, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x73, 0x00, -/* 000024A0 */ 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x6F, 0x00, 0x6B, 0x00, -/* 000024B0 */ 0x75, 0x00, 0x70, 0x00, 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, 0x61, 0x00, 0x4C, 0x00, -/* 000024C0 */ 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x2D, 0x00, 0x75, 0x00, -/* 000024D0 */ 0x00, 0x00, 0x2D, 0x00, 0x78, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x6F, 0x00, -/* 000024E0 */ 0x6B, 0x00, 0x75, 0x00, 0x70, 0x00, 0x4D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x63, 0x00, 0x68, 0x00, -/* 000024F0 */ 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x74, 0x00, 0x72, 0x00, 0x75, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 00002500 */ 0x62, 0x00, 0x6F, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x00, 0x00, -/* 00002510 */ 0x6E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x5B, 0x00, -/* 00002520 */ 0x27, 0x00, 0x00, 0x00, 0x27, 0x00, 0x5D, 0x00, 0x00, 0x00, 0x27, 0x00, 0x2C, 0x00, 0x20, 0x00, -/* 00002530 */ 0x27, 0x00, 0x00, 0x00, 0x5B, 0x00, 0x00, 0x00, 0x20, 0x00, 0x2D, 0x00, 0x20, 0x00, 0x00, 0x00, -/* 00002540 */ 0x5D, 0x00, 0x00, 0x00, 0x5E, 0x00, 0x5B, 0x00, 0x41, 0x00, 0x2D, 0x00, 0x5A, 0x00, 0x5D, 0x00, -/* 00002550 */ 0x7B, 0x00, 0x33, 0x00, 0x7D, 0x00, 0x24, 0x00, 0x00, 0x00, 0x70, 0x00, 0x61, 0x00, 0x72, 0x00, -/* 00002560 */ 0x73, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x74, 0x00, -/* 00002570 */ 0x61, 0x00, 0x67, 0x00, 0x43, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 00002580 */ 0x5B, 0x00, 0x41, 0x00, 0x2D, 0x00, 0x5A, 0x00, 0x5D, 0x00, 0x00, 0x00, 0x5B, 0x00, 0x30, 0x00, -/* 00002590 */ 0x2D, 0x00, 0x39, 0x00, 0x5D, 0x00, 0x00, 0x00, 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x00, 0x00, -/* 000025A0 */ 0x7C, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x28, 0x00, 0x3F, 0x00, -/* 000025B0 */ 0x3A, 0x00, 0x61, 0x00, 0x72, 0x00, 0x74, 0x00, 0x2D, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x6A, 0x00, -/* 000025C0 */ 0x62, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x7C, 0x00, 0x63, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x2D, 0x00, -/* 000025D0 */ 0x67, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x7C, 0x00, -/* 000025E0 */ 0x6E, 0x00, 0x6F, 0x00, 0x2D, 0x00, 0x62, 0x00, 0x6F, 0x00, 0x6B, 0x00, 0x7C, 0x00, 0x6E, 0x00, -/* 000025F0 */ 0x6F, 0x00, 0x2D, 0x00, 0x6E, 0x00, 0x79, 0x00, 0x6E, 0x00, 0x7C, 0x00, 0x7A, 0x00, 0x68, 0x00, -/* 00002600 */ 0x2D, 0x00, 0x67, 0x00, 0x75, 0x00, 0x6F, 0x00, 0x79, 0x00, 0x75, 0x00, 0x7C, 0x00, 0x7A, 0x00, -/* 00002610 */ 0x68, 0x00, 0x2D, 0x00, 0x68, 0x00, 0x61, 0x00, 0x6B, 0x00, 0x6B, 0x00, 0x61, 0x00, 0x7C, 0x00, -/* 00002620 */ 0x7A, 0x00, 0x68, 0x00, 0x2D, 0x00, 0x6D, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x7C, 0x00, 0x7A, 0x00, -/* 00002630 */ 0x68, 0x00, 0x2D, 0x00, 0x6D, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x2D, 0x00, 0x6E, 0x00, 0x61, 0x00, -/* 00002640 */ 0x6E, 0x00, 0x7C, 0x00, 0x7A, 0x00, 0x68, 0x00, 0x2D, 0x00, 0x78, 0x00, 0x69, 0x00, 0x61, 0x00, -/* 00002650 */ 0x6E, 0x00, 0x67, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x62, 0x00, -/* 00002660 */ 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x2D, 0x00, 0x47, 0x00, 0x42, 0x00, -/* 00002670 */ 0x2D, 0x00, 0x6F, 0x00, 0x65, 0x00, 0x64, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x61, 0x00, -/* 00002680 */ 0x6D, 0x00, 0x69, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x62, 0x00, 0x6E, 0x00, 0x6E, 0x00, -/* 00002690 */ 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x64, 0x00, 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, -/* 000026A0 */ 0x6C, 0x00, 0x74, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x6F, 0x00, -/* 000026B0 */ 0x63, 0x00, 0x68, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, -/* 000026C0 */ 0x68, 0x00, 0x61, 0x00, 0x6B, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x6B, 0x00, 0x6C, 0x00, -/* 000026D0 */ 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, -/* 000026E0 */ 0x6C, 0x00, 0x75, 0x00, 0x78, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x6D, 0x00, 0x69, 0x00, -/* 000026F0 */ 0x6E, 0x00, 0x67, 0x00, 0x6F, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x6E, 0x00, -/* 00002700 */ 0x61, 0x00, 0x76, 0x00, 0x61, 0x00, 0x6A, 0x00, 0x6F, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, -/* 00002710 */ 0x70, 0x00, 0x77, 0x00, 0x6E, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x74, 0x00, 0x61, 0x00, -/* 00002720 */ 0x6F, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x74, 0x00, 0x61, 0x00, 0x79, 0x00, 0x7C, 0x00, -/* 00002730 */ 0x69, 0x00, 0x2D, 0x00, 0x74, 0x00, 0x73, 0x00, 0x75, 0x00, 0x7C, 0x00, 0x73, 0x00, 0x67, 0x00, -/* 00002740 */ 0x6E, 0x00, 0x2D, 0x00, 0x42, 0x00, 0x45, 0x00, 0x2D, 0x00, 0x46, 0x00, 0x52, 0x00, 0x7C, 0x00, -/* 00002750 */ 0x73, 0x00, 0x67, 0x00, 0x6E, 0x00, 0x2D, 0x00, 0x42, 0x00, 0x45, 0x00, 0x2D, 0x00, 0x4E, 0x00, -/* 00002760 */ 0x4C, 0x00, 0x7C, 0x00, 0x73, 0x00, 0x67, 0x00, 0x6E, 0x00, 0x2D, 0x00, 0x43, 0x00, 0x48, 0x00, -/* 00002770 */ 0x2D, 0x00, 0x44, 0x00, 0x45, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x5C, 0x00, -/* 00002780 */ 0x62, 0x00, 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x00, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, -/* 00002790 */ 0x00, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x78, 0x00, 0x28, 0x00, -/* 000027A0 */ 0x3F, 0x00, 0x3A, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x31, 0x00, 0x2C, 0x00, 0x38, 0x00, -/* 000027B0 */ 0x7D, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x29, 0x00, 0x2B, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, -/* 000027C0 */ 0x00, 0x00, 0x7C, 0x00, 0x5B, 0x00, 0x41, 0x00, 0x2D, 0x00, 0x57, 0x00, 0x59, 0x00, 0x2D, 0x00, -/* 000027D0 */ 0x5A, 0x00, 0x5D, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x28, 0x00, 0x3F, 0x00, -/* 000027E0 */ 0x3A, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x32, 0x00, 0x2C, 0x00, 0x38, 0x00, 0x7D, 0x00, -/* 000027F0 */ 0x29, 0x00, 0x2B, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x35, 0x00, -/* 00002800 */ 0x2C, 0x00, 0x38, 0x00, 0x7D, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x33, 0x00, 0x7D, 0x00, -/* 00002810 */ 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x32, 0x00, 0x7D, 0x00, 0x7C, 0x00, -/* 00002820 */ 0x00, 0x00, 0x7B, 0x00, 0x34, 0x00, 0x7D, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, -/* 00002830 */ 0x7B, 0x00, 0x33, 0x00, 0x7D, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, -/* 00002840 */ 0x2D, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x33, 0x00, 0x7D, 0x00, 0x29, 0x00, 0x7B, 0x00, 0x30, 0x00, -/* 00002850 */ 0x2C, 0x00, 0x32, 0x00, 0x7D, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x7B, 0x00, -/* 00002860 */ 0x32, 0x00, 0x2C, 0x00, 0x33, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x28, 0x00, -/* 00002870 */ 0x3F, 0x00, 0x3A, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x7B, 0x00, -/* 00002880 */ 0x34, 0x00, 0x2C, 0x00, 0x38, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x28, 0x00, -/* 00002890 */ 0x00, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x2D, 0x00, 0x28, 0x00, -/* 000028A0 */ 0x00, 0x00, 0x29, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x5C, 0x00, -/* 000028B0 */ 0x62, 0x00, 0x28, 0x00, 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x29, 0x00, -/* 000028C0 */ 0x2A, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x5C, 0x00, -/* 000028D0 */ 0x62, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x5E, 0x00, 0x00, 0x00, 0x24, 0x00, -/* 000028E0 */ 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x6E, 0x00, -/* 000028F0 */ 0x67, 0x00, 0x75, 0x00, 0x61, 0x00, 0x67, 0x00, 0x65, 0x00, 0x00, 0x00, 0x73, 0x00, 0x63, 0x00, -/* 00002900 */ 0x72, 0x00, 0x69, 0x00, 0x70, 0x00, 0x74, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, 0x67, 0x00, -/* 00002910 */ 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x76, 0x00, 0x61, 0x00, 0x72, 0x00, 0x69, 0x00, -/* 00002920 */ 0x61, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x65, 0x00, 0x78, 0x00, 0x74, 0x00, -/* 00002930 */ 0x65, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x00, 0x00, -/* 00002940 */ 0x75, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x65, 0x00, 0x66, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x65, 0x00, -/* 00002950 */ 0x64, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, -/* 00002960 */ 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 00002970 */ 0x69, 0x00, 0x73, 0x00, 0x41, 0x00, 0x76, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6C, 0x00, 0x61, 0x00, -/* 00002980 */ 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00002990 */ 0x65, 0x00, 0x00, 0x00, 0x73, 0x00, 0x75, 0x00, 0x62, 0x00, 0x73, 0x00, 0x65, 0x00, 0x74, 0x00, -/* 000029A0 */ 0x00, 0x00, 0x6D, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x75, 0x00, 0x6D, 0x00, -/* 000029B0 */ 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x65, 0x00, 0x67, 0x00, 0x65, 0x00, 0x72, 0x00, 0x44, 0x00, -/* 000029C0 */ 0x69, 0x00, 0x67, 0x00, 0x69, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x69, 0x00, -/* 000029D0 */ 0x6E, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x46, 0x00, 0x72, 0x00, 0x61, 0x00, -/* 000029E0 */ 0x63, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x44, 0x00, 0x69, 0x00, 0x67, 0x00, -/* 000029F0 */ 0x69, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x78, 0x00, 0x69, 0x00, -/* 00002A00 */ 0x6D, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x46, 0x00, 0x72, 0x00, 0x61, 0x00, 0x63, 0x00, 0x74, 0x00, -/* 00002A10 */ 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x44, 0x00, 0x69, 0x00, 0x67, 0x00, 0x69, 0x00, 0x74, 0x00, -/* 00002A20 */ 0x73, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x75, 0x00, -/* 00002A30 */ 0x6D, 0x00, 0x53, 0x00, 0x69, 0x00, 0x67, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x66, 0x00, 0x69, 0x00, -/* 00002A40 */ 0x63, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x44, 0x00, 0x69, 0x00, 0x67, 0x00, 0x69, 0x00, -/* 00002A50 */ 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x78, 0x00, 0x69, 0x00, 0x6D, 0x00, -/* 00002A60 */ 0x75, 0x00, 0x6D, 0x00, 0x53, 0x00, 0x69, 0x00, 0x67, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x66, 0x00, -/* 00002A70 */ 0x69, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x44, 0x00, 0x69, 0x00, 0x67, 0x00, -/* 00002A80 */ 0x69, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x62, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, -/* 00002A90 */ 0x20, 0x00, 0x66, 0x00, 0x69, 0x00, 0x74, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, -/* 00002AA0 */ 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x4D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x63, 0x00, 0x68, 0x00, -/* 00002AB0 */ 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x74, 0x00, -/* 00002AC0 */ 0x68, 0x00, 0x00, 0x00, 0x68, 0x00, 0x69, 0x00, 0x64, 0x00, 0x64, 0x00, 0x65, 0x00, 0x6E, 0x00, -/* 00002AD0 */ 0x4F, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x00, 0x00, 0x66, 0x00, -/* 00002AE0 */ 0x75, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, -/* 00002AF0 */ 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x64, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x69, 0x00, -/* 00002B00 */ 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x43, 0x00, -/* 00002B10 */ 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, -/* 00002B20 */ 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x43, 0x00, 0x6F, 0x00, -/* 00002B30 */ 0x6D, 0x00, 0x70, 0x00, 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x61, 0x00, -/* 00002B40 */ 0x74, 0x00, 0x65, 0x00, 0x43, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 00002B50 */ 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, 0x53, 0x00, -/* 00002B60 */ 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, -/* 00002B70 */ 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, -/* 00002B80 */ 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x43, 0x00, 0x6F, 0x00, -/* 00002B90 */ 0x6D, 0x00, 0x70, 0x00, 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, -/* 00002BA0 */ 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, -/* 00002BB0 */ 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, -/* 00002BC0 */ 0x2E, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, -/* 00002BD0 */ 0x72, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, -/* 00002BE0 */ 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00, -/* 00002BF0 */ 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, 0x00, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, -/* 00002C00 */ 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, -/* 00002C10 */ 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x75, 0x00, 0x63, 0x00, 0x74, 0x00, 0x6F, 0x00, -/* 00002C20 */ 0x72, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, -/* 00002C30 */ 0x65, 0x00, 0x64, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, -/* 00002C40 */ 0x73, 0x00, 0x00, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x20, 0x00, 0x63, 0x00, 0x6F, 0x00, -/* 00002C50 */ 0x6D, 0x00, 0x70, 0x00, 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, -/* 00002C60 */ 0x6D, 0x00, 0x70, 0x00, 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, 0x00, 0x00, 0x75, 0x00, 0x73, 0x00, -/* 00002C70 */ 0x61, 0x00, 0x67, 0x00, 0x65, 0x00, 0x00, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, -/* 00002C80 */ 0x00, 0x00, 0x73, 0x00, 0x65, 0x00, 0x61, 0x00, 0x72, 0x00, 0x63, 0x00, 0x68, 0x00, 0x00, 0x00, -/* 00002C90 */ 0x6E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x72, 0x00, 0x69, 0x00, 0x63, 0x00, 0x00, 0x00, -/* 00002CA0 */ 0x63, 0x00, 0x61, 0x00, 0x73, 0x00, 0x65, 0x00, 0x46, 0x00, 0x69, 0x00, 0x72, 0x00, 0x73, 0x00, -/* 00002CB0 */ 0x74, 0x00, 0x00, 0x00, 0x64, 0x00, 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, -/* 00002CC0 */ 0x74, 0x00, 0x00, 0x00, 0x73, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x69, 0x00, 0x74, 0x00, -/* 00002CD0 */ 0x69, 0x00, 0x76, 0x00, 0x69, 0x00, 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x69, 0x00, 0x67, 0x00, -/* 00002CE0 */ 0x6E, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x65, 0x00, 0x50, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x63, 0x00, -/* 00002CF0 */ 0x74, 0x00, 0x75, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, -/* 00002D00 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, -/* 00002D10 */ 0x63, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, -/* 00002D20 */ 0x6E, 0x00, 0x00, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, -/* 00002D30 */ 0x6C, 0x00, 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x64, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, -/* 00002D40 */ 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x62, 0x00, 0x6F, 0x00, -/* 00002D50 */ 0x75, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00, 0x61, 0x00, -/* 00002D60 */ 0x72, 0x00, 0x65, 0x00, 0x00, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, -/* 00002D70 */ 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, -/* 00002D80 */ 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x63, 0x00, 0x6F, 0x00, -/* 00002D90 */ 0x6D, 0x00, 0x70, 0x00, 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, 0x00, 0x00, 0x43, 0x00, 0x6F, 0x00, -/* 00002DA0 */ 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x2E, 0x00, 0x70, 0x00, -/* 00002DB0 */ 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, -/* 00002DC0 */ 0x2E, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, -/* 00002DD0 */ 0x64, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, -/* 00002DE0 */ 0x00, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00, -/* 00002DF0 */ 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, -/* 00002E00 */ 0x69, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x4E, 0x00, 0x75, 0x00, -/* 00002E10 */ 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, -/* 00002E20 */ 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, -/* 00002E30 */ 0x72, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, -/* 00002E40 */ 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, -/* 00002E50 */ 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, -/* 00002E60 */ 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, -/* 00002E70 */ 0x67, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x4E, 0x00, -/* 00002E80 */ 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, -/* 00002E90 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, -/* 00002EA0 */ 0x2E, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, -/* 00002EB0 */ 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, -/* 00002EC0 */ 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, -/* 00002ED0 */ 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x49, 0x00, -/* 00002EE0 */ 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, -/* 00002EF0 */ 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, -/* 00002F00 */ 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, -/* 00002F10 */ 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, -/* 00002F20 */ 0x74, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x50, 0x00, 0x61, 0x00, 0x72, 0x00, 0x74, 0x00, 0x73, 0x00, -/* 00002F30 */ 0x00, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x20, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, -/* 00002F40 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, -/* 00002F50 */ 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, -/* 00002F60 */ 0x74, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x50, 0x00, 0x61, 0x00, 0x72, 0x00, 0x74, 0x00, 0x73, 0x00, -/* 00002F70 */ 0x00, 0x00, 0x73, 0x00, 0x74, 0x00, 0x79, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x64, 0x00, -/* 00002F80 */ 0x65, 0x00, 0x63, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x70, 0x00, -/* 00002F90 */ 0x65, 0x00, 0x72, 0x00, 0x63, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x00, 0x00, 0x63, 0x00, -/* 00002FA0 */ 0x75, 0x00, 0x72, 0x00, 0x72, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x79, 0x00, 0x00, 0x00, -/* 00002FB0 */ 0x63, 0x00, 0x75, 0x00, 0x72, 0x00, 0x72, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x79, 0x00, -/* 00002FC0 */ 0x44, 0x00, 0x69, 0x00, 0x73, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x79, 0x00, 0x00, 0x00, -/* 00002FD0 */ 0x63, 0x00, 0x6F, 0x00, 0x64, 0x00, 0x65, 0x00, 0x00, 0x00, 0x73, 0x00, 0x79, 0x00, 0x6D, 0x00, -/* 00002FE0 */ 0x62, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x75, 0x00, 0x73, 0x00, 0x65, 0x00, 0x47, 0x00, -/* 00002FF0 */ 0x72, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x70, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, -/* 00003000 */ 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, -/* 00003010 */ 0x7A, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, -/* 00003020 */ 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, -/* 00003030 */ 0x62, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, -/* 00003040 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, -/* 00003050 */ 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, -/* 00003060 */ 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, -/* 00003070 */ 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, -/* 00003080 */ 0x74, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, -/* 00003090 */ 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, -/* 000030A0 */ 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, -/* 000030B0 */ 0x2E, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x54, 0x00, -/* 000030C0 */ 0x6F, 0x00, 0x50, 0x00, 0x61, 0x00, 0x72, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x4E, 0x00, -/* 000030D0 */ 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, -/* 000030E0 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, -/* 000030F0 */ 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x72, 0x00, 0x65, 0x00, -/* 00003100 */ 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4F, 0x00, 0x70, 0x00, -/* 00003110 */ 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x75, 0x00, -/* 00003120 */ 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x53, 0x00, -/* 00003130 */ 0x79, 0x00, 0x73, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6D, 0x00, 0x00, 0x00, 0x67, 0x00, 0x65, 0x00, -/* 00003140 */ 0x74, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, -/* 00003150 */ 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, -/* 00003160 */ 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, -/* 00003170 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, -/* 00003180 */ 0x6E, 0x00, 0x67, 0x00, 0x49, 0x00, 0x6D, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6D, 0x00, -/* 00003190 */ 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, -/* 000031A0 */ 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, -/* 000031B0 */ 0x65, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x65, 0x00, -/* 000031C0 */ 0x6E, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x50, 0x00, -/* 000031D0 */ 0x61, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x46, 0x00, 0x6F, 0x00, -/* 000031E0 */ 0x72, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, -/* 000031F0 */ 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00003200 */ 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, -/* 00003210 */ 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, -/* 00003220 */ 0x74, 0x00, 0x00, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, -/* 00003230 */ 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, -/* 00003240 */ 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x00, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, -/* 00003250 */ 0x61, 0x00, 0x74, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, -/* 00003260 */ 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, -/* 00003270 */ 0x74, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, -/* 00003280 */ 0x65, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x50, 0x00, 0x61, 0x00, 0x72, 0x00, 0x74, 0x00, 0x73, 0x00, -/* 00003290 */ 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x49, 0x00, -/* 000032A0 */ 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, 0x54, 0x00, -/* 000032B0 */ 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x53, 0x00, -/* 000032C0 */ 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x44, 0x00, 0x65, 0x00, 0x66, 0x00, -/* 000032D0 */ 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x43, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, -/* 000032E0 */ 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x75, 0x00, 0x72, 0x00, 0x65, 0x00, -/* 000032F0 */ 0x4D, 0x00, 0x65, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x65, 0x00, -/* 00003300 */ 0x6E, 0x00, 0x73, 0x00, 0x75, 0x00, 0x72, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, -/* 00003310 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, -/* 00003320 */ 0x00, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x72, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x00, 0x00, -/* 00003330 */ 0x73, 0x00, 0x68, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, -/* 00003340 */ 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, 0x32, 0x00, 0x2D, 0x00, 0x64, 0x00, 0x69, 0x00, 0x67, 0x00, -/* 00003350 */ 0x69, 0x00, 0x74, 0x00, 0x00, 0x00, 0x77, 0x00, 0x65, 0x00, 0x65, 0x00, 0x6B, 0x00, 0x64, 0x00, -/* 00003360 */ 0x61, 0x00, 0x79, 0x00, 0x00, 0x00, 0x65, 0x00, 0x72, 0x00, 0x61, 0x00, 0x00, 0x00, 0x79, 0x00, -/* 00003370 */ 0x65, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x74, 0x00, -/* 00003380 */ 0x68, 0x00, 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, 0x79, 0x00, 0x00, 0x00, 0x68, 0x00, 0x6F, 0x00, -/* 00003390 */ 0x75, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x74, 0x00, -/* 000033A0 */ 0x65, 0x00, 0x00, 0x00, 0x73, 0x00, 0x65, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x64, 0x00, -/* 000033B0 */ 0x00, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x5A, 0x00, 0x6F, 0x00, 0x6E, 0x00, -/* 000033C0 */ 0x65, 0x00, 0x4E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x74, 0x00, 0x6F, 0x00, -/* 000033D0 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, -/* 000033E0 */ 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x4C, 0x00, -/* 000033F0 */ 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, -/* 00003400 */ 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, -/* 00003410 */ 0x74, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, -/* 00003420 */ 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, -/* 00003430 */ 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x2E, 0x00, -/* 00003440 */ 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, -/* 00003450 */ 0x65, 0x00, 0x2E, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, -/* 00003460 */ 0x6C, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, -/* 00003470 */ 0x00, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x79, 0x00, 0x00, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x6C, 0x00, -/* 00003480 */ 0x00, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, -/* 00003490 */ 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, -/* 000034A0 */ 0x74, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, -/* 000034B0 */ 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, -/* 000034C0 */ 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 000034D0 */ 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, -/* 000034E0 */ 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x74, 0x00, -/* 000034F0 */ 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x54, 0x00, -/* 00003500 */ 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, -/* 00003510 */ 0x67, 0x00, 0x00, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x49, 0x00, -/* 00003520 */ 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, -/* 00003530 */ 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, -/* 00003540 */ 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, -/* 00003550 */ 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, -/* 00003560 */ 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, -/* 00003570 */ 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, -/* 00003580 */ 0x2E, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, -/* 00003590 */ 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, -/* 000035A0 */ 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, -/* 000035B0 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, -/* 000035C0 */ 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x6F, 0x00, -/* 000035D0 */ 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x50, 0x00, 0x61, 0x00, -/* 000035E0 */ 0x72, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x73, 0x00, 0x79, 0x00, 0x6D, 0x00, 0x62, 0x00, -/* 000035F0 */ 0x6F, 0x00, 0x6C, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, -/* 00003600 */ 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, -/* 00003610 */ 0x6F, 0x00, 0x6E, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x53, 0x00, 0x79, 0x00, 0x6D, 0x00, -/* 00003620 */ 0x62, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x73, 0x00, 0x79, 0x00, 0x6D, 0x00, 0x62, 0x00, -/* 00003630 */ 0x6F, 0x00, 0x6C, 0x00, 0x4C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x74, 0x00, 0x68, 0x00, -/* 00003640 */ 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, -/* 00003650 */ 0x6E, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, -/* 00003660 */ 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x53, 0x00, 0x79, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x6F, 0x00, -/* 00003670 */ 0x6C, 0x00, 0x4C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x74, 0x00, 0x68, 0x00, 0x00, 0x00, -/* 00003680 */ 0x70, 0x00, 0x61, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x46, 0x00, -/* 00003690 */ 0x6F, 0x00, 0x72, 0x00, 0x48, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x72, 0x00, 0x43, 0x00, 0x79, 0x00, -/* 000036A0 */ 0x63, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x68, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x72, 0x00, -/* 000036B0 */ 0x43, 0x00, 0x79, 0x00, 0x63, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, -/* 000036C0 */ 0x50, 0x00, 0x61, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x00, 0x00, -/* 000036D0 */ 0x45, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x4D, 0x00, 0x00, 0x00, -/* 000036E0 */ 0x64, 0x00, 0x00, 0x00, 0x6A, 0x00, 0x00, 0x00, 0x68, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x72, 0x00, -/* 000036F0 */ 0x31, 0x00, 0x32, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x68, 0x00, 0x6F, 0x00, 0x75, 0x00, -/* 00003700 */ 0x72, 0x00, 0x32, 0x00, 0x34, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x00, 0x00, -/* 00003710 */ 0x73, 0x00, 0x00, 0x00, 0x7A, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 00003720 */ 0x55, 0x00, 0x00, 0x00, 0x4C, 0x00, 0x00, 0x00, 0x4B, 0x00, 0x00, 0x00, 0x6B, 0x00, 0x00, 0x00, -/* 00003730 */ 0x5A, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x4F, 0x00, 0x00, 0x00, -/* 00003740 */ 0x58, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, -/* 00003750 */ 0x33, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x68, 0x00, 0x31, 0x00, -/* 00003760 */ 0x32, 0x00, 0x00, 0x00, 0x68, 0x00, 0x32, 0x00, 0x33, 0x00, 0x00, 0x00, 0x68, 0x00, 0x31, 0x00, -/* 00003770 */ 0x31, 0x00, 0x00, 0x00, 0x68, 0x00, 0x32, 0x00, 0x34, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, -/* 00003780 */ 0x20, 0x00, 0x00, 0x00, 0x68, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x72, 0x00, 0x43, 0x00, 0x79, 0x00, -/* 00003790 */ 0x63, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x45, 0x00, 0x74, 0x00, 0x63, 0x00, 0x2F, 0x00, -/* 000037A0 */ 0x55, 0x00, 0x6E, 0x00, 0x6B, 0x00, 0x6E, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x6E, 0x00, 0x00, 0x00, -/* 000037B0 */ 0x74, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x5A, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x65, 0x00, -/* 000037C0 */ 0x00, 0x00, 0x49, 0x00, 0x41, 0x00, 0x4E, 0x00, 0x41, 0x00, 0x20, 0x00, 0x5A, 0x00, 0x6F, 0x00, -/* 000037D0 */ 0x6E, 0x00, 0x65, 0x00, 0x20, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x20, 0x00, 0x4C, 0x00, 0x69, 0x00, -/* 000037E0 */ 0x6E, 0x00, 0x6B, 0x00, 0x20, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x20, 0x00, -/* 000037F0 */ 0x28, 0x00, 0x41, 0x00, 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, 0x2F, 0x00, 0x4C, 0x00, 0x6F, 0x00, -/* 00003800 */ 0x63, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x29, 0x00, 0x00, 0x00, -/* 00003810 */ 0x45, 0x00, 0x74, 0x00, 0x63, 0x00, 0x2F, 0x00, 0x55, 0x00, 0x54, 0x00, 0x43, 0x00, 0x00, 0x00, -/* 00003820 */ 0x45, 0x00, 0x74, 0x00, 0x63, 0x00, 0x2F, 0x00, 0x47, 0x00, 0x4D, 0x00, 0x54, 0x00, 0x00, 0x00, -/* 00003830 */ 0x55, 0x00, 0x54, 0x00, 0x43, 0x00, 0x00, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, -/* 00003840 */ 0x61, 0x00, 0x74, 0x00, 0x4D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, -/* 00003850 */ 0x72, 0x00, 0x00, 0x00, 0x62, 0x00, 0x61, 0x00, 0x73, 0x00, 0x69, 0x00, 0x63, 0x00, 0x00, 0x00, -/* 00003860 */ 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, -/* 00003870 */ 0x7A, 0x00, 0x65, 0x00, 0x64, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, -/* 00003880 */ 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, -/* 00003890 */ 0x74, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x65, 0x00, 0x64, 0x00, 0x44, 0x00, 0x65, 0x00, -/* 000038A0 */ 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x49, 0x00, -/* 000038B0 */ 0x6E, 0x00, 0x76, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x64, 0x00, 0x20, 0x00, 0x44, 0x00, -/* 000038C0 */ 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, -/* 000038D0 */ 0x6F, 0x00, 0x6E, 0x00, 0x31, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, -/* 000038E0 */ 0x6F, 0x00, 0x6E, 0x00, 0x32, 0x00, 0x00, 0x00, 0x63, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, -/* 000038F0 */ 0x65, 0x00, 0x53, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, -/* 00003900 */ 0x74, 0x00, 0x65, 0x00, 0x5F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, -/* 00003910 */ 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, -/* 00003920 */ 0x67, 0x00, 0x5F, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x72, 0x00, 0x79, 0x00, 0x50, 0x00, -/* 00003930 */ 0x6F, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, -/* 00003940 */ 0x65, 0x00, 0x5F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, -/* 00003950 */ 0x6C, 0x00, 0x65, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, -/* 00003960 */ 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x5F, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, -/* 00003970 */ 0x72, 0x00, 0x79, 0x00, 0x50, 0x00, 0x6F, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x00, 0x00, -/* 00003980 */ 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x5F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x4C, 0x00, -/* 00003990 */ 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, -/* 000039A0 */ 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x5F, 0x00, -/* 000039B0 */ 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x72, 0x00, 0x79, 0x00, 0x50, 0x00, 0x6F, 0x00, 0x69, 0x00, -/* 000039C0 */ 0x6E, 0x00, 0x74, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, -/* 000039D0 */ 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, -/* 000039E0 */ 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, -/* 000039F0 */ 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, -/* 00003A00 */ 0x2E, 0x00, 0x00, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, -/* 00003A10 */ 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, -/* 00003A20 */ 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x50, 0x00, 0x6C, 0x00, 0x75, 0x00, -/* 00003A30 */ 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x52, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, -/* 00003A40 */ 0x00, 0x00, 0x52, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, -/* 00003A50 */ 0x50, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x70, 0x00, -/* 00003A60 */ 0x6C, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x52, 0x00, 0x75, 0x00, 0x6C, 0x00, -/* 00003A70 */ 0x65, 0x00, 0x73, 0x00, 0x5F, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, -/* 00003A80 */ 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, -/* 00003A90 */ 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x5F, 0x00, 0x6E, 0x00, 0x61, 0x00, -/* 00003AA0 */ 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, -/* 00003AB0 */ 0x50, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x52, 0x00, 0x75, 0x00, -/* 00003AC0 */ 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, -/* 00003AD0 */ 0x2E, 0x00, 0x50, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x52, 0x00, -/* 00003AE0 */ 0x75, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, -/* 00003AF0 */ 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, -/* 00003B00 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, -/* 00003B10 */ 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x50, 0x00, 0x6C, 0x00, 0x75, 0x00, -/* 00003B20 */ 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x52, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, -/* 00003B30 */ 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, -/* 00003B40 */ 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x63, 0x00, -/* 00003B50 */ 0x74, 0x00, 0x00, 0x00, 0x73, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, -/* 00003B60 */ 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x50, 0x00, 0x6C, 0x00, -/* 00003B70 */ 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x52, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x65, 0x00, -/* 00003B80 */ 0x73, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, -/* 00003B90 */ 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, -/* 00003BA0 */ 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, -/* 00003BB0 */ 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x00, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, -/* 00003BC0 */ 0x00, 0x00, 0x63, 0x00, 0x61, 0x00, 0x72, 0x00, 0x64, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x61, 0x00, -/* 00003BD0 */ 0x6C, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x64, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x61, 0x00, -/* 00003BE0 */ 0x6C, 0x00, 0x00, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00003BF0 */ 0x43, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x67, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x69, 0x00, -/* 00003C00 */ 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, -/* 00003C10 */ 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x64, 0x00, 0x50, 0x00, 0x6C, 0x00, -/* 00003C20 */ 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x52, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x65, 0x00, -/* 00003C30 */ 0x73, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x68, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, -/* 00003C40 */ 0x70, 0x00, 0x72, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x6D, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x74, 0x00, -/* 00003C50 */ 0x68, 0x00, 0x2E, 0x00, 0x61, 0x00, 0x7D, 0x00, 0x7B, 0x00, 0x64, 0x00, 0x61, 0x00, 0x79, 0x00, -/* 00003C60 */ 0x2E, 0x00, 0x62, 0x00, 0x7D, 0x00, 0x7B, 0x00, 0x68, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x72, 0x00, -/* 00003C70 */ 0x2E, 0x00, 0x63, 0x00, 0x7D, 0x00, 0x7B, 0x00, 0x6D, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x75, 0x00, -/* 00003C80 */ 0x74, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x64, 0x00, 0x7D, 0x00, 0x7B, 0x00, 0x73, 0x00, 0x65, 0x00, -/* 00003C90 */ 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x2E, 0x00, 0x65, 0x00, 0x7D, 0x00, 0x00, 0x00, -/* 00003CA0 */ 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x4C, 0x00, -/* 00003CB0 */ 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x42, 0x00, 0x65, 0x00, 0x73, 0x00, -/* 00003CC0 */ 0x74, 0x00, 0x46, 0x00, 0x69, 0x00, 0x74, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, -/* 00003CD0 */ 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, -/* 00003CE0 */ 0x6C, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x6F, 0x00, 0x6B, 0x00, 0x75, 0x00, 0x70, 0x00, -/* 00003CF0 */ 0x00, 0x00, 0x66, 0x00, 0x69, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x65, 0x00, -/* 00003D00 */ 0x64, 0x00, 0x00, 0x00, 0x65, 0x00, 0x78, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x73, 0x00, -/* 00003D10 */ 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x46, 0x00, 0x69, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x65, 0x00, -/* 00003D20 */ 0x72, 0x00, 0x00, 0x00, 0x2D, 0x00, 0x75, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x73, 0x00, 0x75, 0x00, -/* 00003D30 */ 0x62, 0x00, 0x54, 0x00, 0x61, 0x00, 0x67, 0x00, 0x73, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, -/* 00003D40 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x57, 0x00, 0x69, 0x00, 0x74, 0x00, 0x68, 0x00, -/* 00003D50 */ 0x6F, 0x00, 0x75, 0x00, 0x74, 0x00, 0x53, 0x00, 0x75, 0x00, 0x62, 0x00, 0x74, 0x00, 0x61, 0x00, -/* 00003D60 */ 0x67, 0x00, 0x73, 0x00, 0x00, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x2A, 0x00, 0x3F, 0x00, 0x29, 0x00, -/* 00003D70 */ 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x2D, 0x00, 0x75, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x24, 0x00, -/* 00003D80 */ 0x00, 0x00, 0x28, 0x00, 0x5B, 0x00, 0x5E, 0x00, 0x2D, 0x00, 0x5D, 0x00, 0x2A, 0x00, 0x29, 0x00, -/* 00003D90 */ 0x2D, 0x00, 0x3F, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x2A, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x00, 0x00, -/* 00003DA0 */ 0x28, 0x00, 0x5B, 0x00, 0x5E, 0x00, 0x5F, 0x00, 0x5D, 0x00, 0x2A, 0x00, 0x29, 0x00, 0x2E, 0x00, -/* 00003DB0 */ 0x2A, 0x00, 0x00, 0x00, 0x48, 0x00, 0x61, 0x00, 0x73, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, -/* 00003DC0 */ 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x29, 0x00, 0x2A, 0x00, -/* 00003DD0 */ 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x73, 0x00, 0x65, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x00, 0x00, -/* 00003DE0 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x63, 0x00, -/* 00003DF0 */ 0x6F, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x00, 0x00, 0x66, 0x00, 0x69, 0x00, 0x74, 0x00, -/* 00003E00 */ 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x64, 0x00, 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, -/* 00003E10 */ 0x75, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00003E20 */ 0x65, 0x00, 0x00, 0x00, 0x5B, 0x00, 0x27, 0x00, 0x62, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, -/* 00003E30 */ 0x20, 0x00, 0x66, 0x00, 0x69, 0x00, 0x74, 0x00, 0x27, 0x00, 0x2C, 0x00, 0x20, 0x00, 0x27, 0x00, -/* 00003E40 */ 0x6C, 0x00, 0x6F, 0x00, 0x6F, 0x00, 0x6B, 0x00, 0x75, 0x00, 0x70, 0x00, 0x27, 0x00, 0x5D, 0x00, -/* 00003E50 */ 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, -/* 00003E60 */ 0x72, 0x00, 0x5F, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, -/* 00003E70 */ 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00003E80 */ 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x5F, 0x00, 0x64, 0x00, 0x75, 0x00, 0x6D, 0x00, -/* 00003E90 */ 0x6D, 0x00, 0x79, 0x00, 0x4E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6E, 0x00, -/* 00003EA0 */ 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, -/* 00003EB0 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x5F, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, -/* 00003EC0 */ 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, -/* 00003ED0 */ 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x5F, 0x00, 0x64, 0x00, -/* 00003EE0 */ 0x75, 0x00, 0x6D, 0x00, 0x6D, 0x00, 0x79, 0x00, 0x4E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, -/* 00003EF0 */ 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, -/* 00003F00 */ 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x5F, 0x00, -/* 00003F10 */ 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, -/* 00003F20 */ 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, -/* 00003F30 */ 0x4F, 0x00, 0x66, 0x00, 0x5F, 0x00, 0x64, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x6D, 0x00, 0x79, 0x00, -/* 00003F40 */ 0x4E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, -/* 00003F50 */ 0x43, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x63, 0x00, 0x61, 0x00, -/* 00003F60 */ 0x6C, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, -/* 00003F70 */ 0x5F, 0x00, 0x64, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x6D, 0x00, 0x79, 0x00, 0x4E, 0x00, 0x61, 0x00, -/* 00003F80 */ 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x52, 0x00, 0x65, 0x00, 0x74, 0x00, -/* 00003F90 */ 0x75, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, -/* 00003FA0 */ 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x56, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00003FB0 */ 0x75, 0x00, 0x65, 0x00, 0x73, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x4C, 0x00, 0x6F, 0x00, -/* 00003FC0 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, 0x76, 0x00, -/* 00003FD0 */ 0x65, 0x00, 0x72, 0x00, 0x73, 0x00, 0x65, 0x00, 0x64, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, -/* 00003FE0 */ 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x56, 0x00, 0x61, 0x00, -/* 00003FF0 */ 0x6C, 0x00, 0x75, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x2D, 0x00, 0x63, 0x00, 0x6F, 0x00, -/* 00004000 */ 0x2D, 0x00, 0x00, 0x00, 0x2D, 0x00, 0x75, 0x00, 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x2D, 0x00, -/* 00004010 */ 0x5B, 0x00, 0x5E, 0x00, 0x5C, 0x00, 0x2D, 0x00, 0x5D, 0x00, 0x5B, 0x00, 0x5E, 0x00, 0x5C, 0x00, -/* 00004020 */ 0x2D, 0x00, 0x5D, 0x00, 0x3F, 0x00, 0x2D, 0x00, 0x5B, 0x00, 0x5E, 0x00, 0x5C, 0x00, 0x2D, 0x00, -/* 00004030 */ 0x5D, 0x00, 0x2B, 0x00, 0x29, 0x00, 0x2A, 0x00, 0x2D, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x2D, 0x00, -/* 00004040 */ 0x28, 0x00, 0x5B, 0x00, 0x5E, 0x00, 0x5C, 0x00, 0x2D, 0x00, 0x5D, 0x00, 0x2B, 0x00, 0x29, 0x00, -/* 00004050 */ 0x2E, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x28, 0x00, 0x5B, 0x00, 0x5E, 0x00, 0x5F, 0x00, 0x5D, 0x00, -/* 00004060 */ 0x2A, 0x00, 0x29, 0x00, 0x5F, 0x00, 0x3F, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x2B, 0x00, 0x29, 0x00, -/* 00004070 */ 0x3F, 0x00, 0x00, 0x00, 0x63, 0x00, 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, -/* 00004080 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x43, 0x00, 0x6F, 0x00, -/* 00004090 */ 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x53, 0x00, -/* 000040A0 */ 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, 0x2D, 0x00, 0x75, 0x00, -/* 000040B0 */ 0x2D, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x69, 0x00, -/* 000040C0 */ 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x7A, 0x00, -/* 000040D0 */ 0x65, 0x00, 0x64, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x4F, 0x00, 0x62, 0x00, -/* 000040E0 */ 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x61, 0x00, -/* 000040F0 */ 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00004100 */ 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00, -/* 00004110 */ 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x75, 0x00, 0x73, 0x00, -/* 00004120 */ 0x61, 0x00, 0x67, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x73, 0x00, 0x65, 0x00, -/* 00004130 */ 0x6E, 0x00, 0x73, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x76, 0x00, 0x69, 0x00, 0x74, 0x00, -/* 00004140 */ 0x79, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x69, 0x00, 0x67, 0x00, 0x6E, 0x00, 0x6F, 0x00, -/* 00004150 */ 0x72, 0x00, 0x65, 0x00, 0x50, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x74, 0x00, 0x75, 0x00, -/* 00004160 */ 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, -/* 00004170 */ 0x63, 0x00, 0x61, 0x00, 0x73, 0x00, 0x65, 0x00, 0x46, 0x00, 0x69, 0x00, 0x72, 0x00, 0x73, 0x00, -/* 00004180 */ 0x74, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x65, 0x00, -/* 00004190 */ 0x72, 0x00, 0x69, 0x00, 0x63, 0x00, 0x00, 0x00, 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, -/* 000041A0 */ 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x64, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, -/* 000041B0 */ 0x6E, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, -/* 000041C0 */ 0x6C, 0x00, 0x65, 0x00, 0x4D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, -/* 000041D0 */ 0x72, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x57, 0x00, 0x69, 0x00, 0x6E, 0x00, -/* 000041E0 */ 0x64, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x73, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x45, 0x00, 0x63, 0x00, -/* 000041F0 */ 0x6D, 0x00, 0x61, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, -/* 00004200 */ 0x61, 0x00, 0x72, 0x00, 0x4D, 0x00, 0x61, 0x00, 0x70, 0x00, 0x00, 0x00, 0x47, 0x00, 0x72, 0x00, -/* 00004210 */ 0x65, 0x00, 0x67, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x43, 0x00, -/* 00004220 */ 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, -/* 00004230 */ 0x67, 0x00, 0x72, 0x00, 0x65, 0x00, 0x67, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x79, 0x00, 0x00, 0x00, -/* 00004240 */ 0x48, 0x00, 0x65, 0x00, 0x62, 0x00, 0x72, 0x00, 0x65, 0x00, 0x77, 0x00, 0x43, 0x00, 0x61, 0x00, -/* 00004250 */ 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x68, 0x00, -/* 00004260 */ 0x65, 0x00, 0x62, 0x00, 0x72, 0x00, 0x65, 0x00, 0x77, 0x00, 0x00, 0x00, 0x48, 0x00, 0x69, 0x00, -/* 00004270 */ 0x6A, 0x00, 0x72, 0x00, 0x69, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, -/* 00004280 */ 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x69, 0x00, 0x73, 0x00, 0x6C, 0x00, 0x61, 0x00, -/* 00004290 */ 0x6D, 0x00, 0x69, 0x00, 0x63, 0x00, 0x00, 0x00, 0x4A, 0x00, 0x61, 0x00, 0x70, 0x00, 0x61, 0x00, -/* 000042A0 */ 0x6E, 0x00, 0x65, 0x00, 0x73, 0x00, 0x65, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, -/* 000042B0 */ 0x6E, 0x00, 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6A, 0x00, 0x61, 0x00, 0x70, 0x00, -/* 000042C0 */ 0x61, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, 0x4A, 0x00, 0x75, 0x00, -/* 000042D0 */ 0x6C, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, -/* 000042E0 */ 0x6E, 0x00, 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6A, 0x00, 0x75, 0x00, 0x6C, 0x00, -/* 000042F0 */ 0x69, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x4B, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x65, 0x00, -/* 00004300 */ 0x61, 0x00, 0x6E, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, -/* 00004310 */ 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6B, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, -/* 00004320 */ 0x6E, 0x00, 0x00, 0x00, 0x55, 0x00, 0x6D, 0x00, 0x41, 0x00, 0x6C, 0x00, 0x51, 0x00, 0x75, 0x00, -/* 00004330 */ 0x72, 0x00, 0x61, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, -/* 00004340 */ 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x69, 0x00, 0x73, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x6D, 0x00, -/* 00004350 */ 0x69, 0x00, 0x63, 0x00, 0x2D, 0x00, 0x63, 0x00, 0x69, 0x00, 0x76, 0x00, 0x69, 0x00, 0x6C, 0x00, -/* 00004360 */ 0x00, 0x00, 0x54, 0x00, 0x68, 0x00, 0x61, 0x00, 0x69, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00004370 */ 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x74, 0x00, 0x68, 0x00, -/* 00004380 */ 0x61, 0x00, 0x69, 0x00, 0x00, 0x00, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x77, 0x00, 0x61, 0x00, -/* 00004390 */ 0x6E, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x61, 0x00, -/* 000043A0 */ 0x72, 0x00, 0x00, 0x00, 0x74, 0x00, 0x61, 0x00, 0x69, 0x00, 0x77, 0x00, 0x61, 0x00, 0x6E, 0x00, -/* 000043B0 */ 0x00, 0x00, 0x45, 0x00, 0x63, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, -/* 000043C0 */ 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x57, 0x00, 0x69, 0x00, -/* 000043D0 */ 0x6E, 0x00, 0x64, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x73, 0x00, 0x54, 0x00, 0x65, 0x00, 0x6D, 0x00, -/* 000043E0 */ 0x70, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, 0x57, 0x00, 0x69, 0x00, -/* 000043F0 */ 0x6E, 0x00, 0x64, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x73, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x45, 0x00, -/* 00004400 */ 0x63, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, -/* 00004410 */ 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x72, 0x00, -/* 00004420 */ 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x57, 0x00, 0x65, 0x00, 0x65, 0x00, 0x6B, 0x00, 0x64, 0x00, -/* 00004430 */ 0x61, 0x00, 0x79, 0x00, 0x45, 0x00, 0x72, 0x00, 0x61, 0x00, 0x4D, 0x00, 0x6F, 0x00, 0x6E, 0x00, -/* 00004440 */ 0x74, 0x00, 0x68, 0x00, 0x50, 0x00, 0x61, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, -/* 00004450 */ 0x6E, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x72, 0x00, 0x65, 0x00, 0x63, 0x00, -/* 00004460 */ 0x74, 0x00, 0x44, 0x00, 0x61, 0x00, 0x79, 0x00, 0x48, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x72, 0x00, -/* 00004470 */ 0x4D, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x74, 0x00, 0x65, 0x00, 0x53, 0x00, 0x65, 0x00, -/* 00004480 */ 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x4D, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x74, 0x00, -/* 00004490 */ 0x68, 0x00, 0x50, 0x00, 0x61, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, -/* 000044A0 */ 0x00, 0x00, 0x75, 0x00, 0x70, 0x00, 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x50, 0x00, -/* 000044B0 */ 0x61, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x53, 0x00, 0x74, 0x00, -/* 000044C0 */ 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x73, 0x00, 0x00, 0x00, 0x74, 0x00, 0x65, 0x00, -/* 000044D0 */ 0x6D, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, 0x64, 0x00, -/* 000044E0 */ 0x61, 0x00, 0x79, 0x00, 0x6F, 0x00, 0x66, 0x00, 0x77, 0x00, 0x65, 0x00, 0x65, 0x00, 0x6B, 0x00, -/* 000044F0 */ 0x2E, 0x00, 0x61, 0x00, 0x62, 0x00, 0x62, 0x00, 0x72, 0x00, 0x65, 0x00, 0x76, 0x00, 0x69, 0x00, -/* 00004500 */ 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, 0x79, 0x00, -/* 00004510 */ 0x6F, 0x00, 0x66, 0x00, 0x77, 0x00, 0x65, 0x00, 0x65, 0x00, 0x6B, 0x00, 0x2E, 0x00, 0x66, 0x00, -/* 00004520 */ 0x75, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x79, 0x00, 0x65, 0x00, 0x61, 0x00, 0x72, 0x00, -/* 00004530 */ 0x2E, 0x00, 0x61, 0x00, 0x62, 0x00, 0x62, 0x00, 0x72, 0x00, 0x65, 0x00, 0x76, 0x00, 0x69, 0x00, -/* 00004540 */ 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x00, 0x00, 0x79, 0x00, 0x65, 0x00, 0x61, 0x00, -/* 00004550 */ 0x72, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x6D, 0x00, -/* 00004560 */ 0x6F, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x68, 0x00, 0x2E, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x6D, 0x00, -/* 00004570 */ 0x65, 0x00, 0x72, 0x00, 0x69, 0x00, 0x63, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x6F, 0x00, 0x6E, 0x00, -/* 00004580 */ 0x74, 0x00, 0x68, 0x00, 0x2E, 0x00, 0x61, 0x00, 0x62, 0x00, 0x62, 0x00, 0x72, 0x00, 0x65, 0x00, -/* 00004590 */ 0x76, 0x00, 0x69, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x00, 0x00, 0x6D, 0x00, -/* 000045A0 */ 0x6F, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x68, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x75, 0x00, 0x6C, 0x00, -/* 000045B0 */ 0x6C, 0x00, 0x00, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x7A, 0x00, 0x6F, 0x00, -/* 000045C0 */ 0x6E, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x61, 0x00, 0x62, 0x00, 0x62, 0x00, 0x72, 0x00, 0x65, 0x00, -/* 000045D0 */ 0x76, 0x00, 0x69, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x00, 0x00, 0x74, 0x00, -/* 000045E0 */ 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x7A, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x2E, 0x00, -/* 000045F0 */ 0x66, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x28, 0x00, 0x00, 0x00, -/* 00004600 */ 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x5C, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, -/* 00004610 */ 0x6F, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x2E, 0x00, 0x28, 0x00, 0x5B, 0x00, -/* 00004620 */ 0x61, 0x00, 0x2D, 0x00, 0x7A, 0x00, 0x5D, 0x00, 0x2A, 0x00, 0x29, 0x00, 0x28, 0x00, 0x3F, 0x00, -/* 00004630 */ 0x3A, 0x00, 0x5C, 0x00, 0x28, 0x00, 0x5B, 0x00, 0x30, 0x00, 0x2D, 0x00, 0x39, 0x00, 0x5D, 0x00, -/* 00004640 */ 0x5C, 0x00, 0x29, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x45, 0x00, 0x72, 0x00, -/* 00004650 */ 0x72, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x20, 0x00, 0x77, 0x00, 0x68, 0x00, 0x65, 0x00, 0x6E, 0x00, -/* 00004660 */ 0x20, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x72, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, -/* 00004670 */ 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x20, 0x00, 0x77, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x64, 0x00, -/* 00004680 */ 0x6F, 0x00, 0x77, 0x00, 0x73, 0x00, 0x20, 0x00, 0x72, 0x00, 0x65, 0x00, 0x74, 0x00, 0x75, 0x00, -/* 00004690 */ 0x72, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x64, 0x00, 0x20, 0x00, 0x77, 0x00, 0x65, 0x00, 0x65, 0x00, -/* 000046A0 */ 0x6B, 0x00, 0x64, 0x00, 0x61, 0x00, 0x79, 0x00, 0x2F, 0x00, 0x45, 0x00, 0x72, 0x00, 0x61, 0x00, -/* 000046B0 */ 0x2F, 0x00, 0x4D, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x68, 0x00, 0x20, 0x00, 0x70, 0x00, -/* 000046C0 */ 0x61, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x3B, 0x00, 0x20, 0x00, -/* 000046D0 */ 0x72, 0x00, 0x65, 0x00, 0x67, 0x00, 0x65, 0x00, 0x78, 0x00, 0x20, 0x00, 0x72, 0x00, 0x65, 0x00, -/* 000046E0 */ 0x74, 0x00, 0x75, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x64, 0x00, 0x20, 0x00, 0x6E, 0x00, -/* 000046F0 */ 0x75, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x20, 0x00, 0x0A, 0x00, 0x49, 0x00, 0x6E, 0x00, -/* 00004700 */ 0x70, 0x00, 0x75, 0x00, 0x74, 0x00, 0x20, 0x00, 0x77, 0x00, 0x61, 0x00, 0x73, 0x00, 0x3A, 0x00, -/* 00004710 */ 0x20, 0x00, 0x27, 0x00, 0x00, 0x00, 0x27, 0x00, 0x0A, 0x00, 0x52, 0x00, 0x65, 0x00, 0x67, 0x00, -/* 00004720 */ 0x65, 0x00, 0x78, 0x00, 0x3A, 0x00, 0x20, 0x00, 0x27, 0x00, 0x00, 0x00, 0x28, 0x00, 0x5C, 0x00, -/* 00004730 */ 0x2E, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x29, 0x00, -/* 00004740 */ 0x5C, 0x00, 0x2E, 0x00, 0x28, 0x00, 0x5B, 0x00, 0x61, 0x00, 0x2D, 0x00, 0x7A, 0x00, 0x5D, 0x00, -/* 00004750 */ 0x2A, 0x00, 0x29, 0x00, 0x28, 0x00, 0x5C, 0x00, 0x28, 0x00, 0x5B, 0x00, 0x30, 0x00, 0x2D, 0x00, -/* 00004760 */ 0x39, 0x00, 0x5D, 0x00, 0x5C, 0x00, 0x29, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x7D, 0x00, 0x27, 0x00, -/* 00004770 */ 0x00, 0x00, 0x66, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x00, 0x00, -/* 00004780 */ 0x2E, 0x00, 0x00, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x61, 0x00, 0x62, 0x00, 0x62, 0x00, 0x72, 0x00, -/* 00004790 */ 0x65, 0x00, 0x76, 0x00, 0x69, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x00, 0x00, -/* 000047A0 */ 0x61, 0x00, 0x62, 0x00, 0x62, 0x00, 0x72, 0x00, 0x65, 0x00, 0x76, 0x00, 0x69, 0x00, 0x61, 0x00, -/* 000047B0 */ 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x28, 0x00, 0x31, 0x00, 0x29, 0x00, 0x00, 0x00, 0x29, 0x00, -/* 000047C0 */ 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x5C, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, -/* 000047D0 */ 0x6F, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x5C, 0x00, 0x2E, 0x00, 0x28, 0x00, 0x5B, 0x00, 0x61, 0x00, -/* 000047E0 */ 0x2D, 0x00, 0x7A, 0x00, 0x5D, 0x00, 0x2A, 0x00, 0x29, 0x00, 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, -/* 000047F0 */ 0x5C, 0x00, 0x28, 0x00, 0x5B, 0x00, 0x30, 0x00, 0x2D, 0x00, 0x39, 0x00, 0x5D, 0x00, 0x5C, 0x00, -/* 00004800 */ 0x29, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x45, 0x00, 0x72, 0x00, 0x72, 0x00, -/* 00004810 */ 0x6F, 0x00, 0x72, 0x00, 0x20, 0x00, 0x77, 0x00, 0x68, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x20, 0x00, -/* 00004820 */ 0x63, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x72, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x69, 0x00, -/* 00004830 */ 0x6E, 0x00, 0x67, 0x00, 0x20, 0x00, 0x77, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x6F, 0x00, -/* 00004840 */ 0x77, 0x00, 0x73, 0x00, 0x20, 0x00, 0x72, 0x00, 0x65, 0x00, 0x74, 0x00, 0x75, 0x00, 0x72, 0x00, -/* 00004850 */ 0x6E, 0x00, 0x65, 0x00, 0x64, 0x00, 0x20, 0x00, 0x64, 0x00, 0x61, 0x00, 0x79, 0x00, 0x2F, 0x00, -/* 00004860 */ 0x68, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x72, 0x00, 0x2F, 0x00, 0x6D, 0x00, 0x69, 0x00, 0x6E, 0x00, -/* 00004870 */ 0x75, 0x00, 0x74, 0x00, 0x65, 0x00, 0x2F, 0x00, 0x73, 0x00, 0x65, 0x00, 0x63, 0x00, 0x6F, 0x00, -/* 00004880 */ 0x6E, 0x00, 0x64, 0x00, 0x2F, 0x00, 0x6D, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x68, 0x00, -/* 00004890 */ 0x20, 0x00, 0x70, 0x00, 0x61, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, -/* 000048A0 */ 0x3B, 0x00, 0x20, 0x00, 0x72, 0x00, 0x65, 0x00, 0x67, 0x00, 0x65, 0x00, 0x78, 0x00, 0x20, 0x00, -/* 000048B0 */ 0x72, 0x00, 0x65, 0x00, 0x74, 0x00, 0x75, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x64, 0x00, -/* 000048C0 */ 0x20, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x20, 0x00, 0x0A, 0x00, -/* 000048D0 */ 0x49, 0x00, 0x6E, 0x00, 0x70, 0x00, 0x75, 0x00, 0x74, 0x00, 0x20, 0x00, 0x77, 0x00, 0x61, 0x00, -/* 000048E0 */ 0x73, 0x00, 0x3A, 0x00, 0x20, 0x00, 0x27, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x69, 0x00, 0x6E, 0x00, -/* 000048F0 */ 0x74, 0x00, 0x65, 0x00, 0x67, 0x00, 0x65, 0x00, 0x72, 0x00, 0x28, 0x00, 0x32, 0x00, 0x29, 0x00, -/* 00004900 */ 0x7D, 0x00, 0x00, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x65, 0x00, 0x67, 0x00, 0x65, 0x00, -/* 00004910 */ 0x72, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x65, 0x00, 0x67, 0x00, -/* 00004920 */ 0x65, 0x00, 0x72, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, 0x79, 0x00, 0x6F, 0x00, -/* 00004930 */ 0x66, 0x00, 0x77, 0x00, 0x65, 0x00, 0x65, 0x00, 0x6B, 0x00, 0x00, 0x00, 0x45, 0x00, 0x72, 0x00, -/* 00004940 */ 0x72, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x20, 0x00, 0x77, 0x00, 0x68, 0x00, 0x65, 0x00, 0x6E, 0x00, -/* 00004950 */ 0x20, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x72, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, -/* 00004960 */ 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x20, 0x00, 0x77, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x64, 0x00, -/* 00004970 */ 0x6F, 0x00, 0x77, 0x00, 0x73, 0x00, 0x20, 0x00, 0x72, 0x00, 0x65, 0x00, 0x74, 0x00, 0x75, 0x00, -/* 00004980 */ 0x72, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x64, 0x00, 0x20, 0x00, 0x79, 0x00, 0x65, 0x00, 0x61, 0x00, -/* 00004990 */ 0x72, 0x00, 0x3B, 0x00, 0x20, 0x00, 0x72, 0x00, 0x65, 0x00, 0x67, 0x00, 0x65, 0x00, 0x78, 0x00, -/* 000049A0 */ 0x20, 0x00, 0x72, 0x00, 0x65, 0x00, 0x74, 0x00, 0x75, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x65, 0x00, -/* 000049B0 */ 0x64, 0x00, 0x20, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x7B, 0x00, -/* 000049C0 */ 0x79, 0x00, 0x65, 0x00, 0x61, 0x00, 0x72, 0x00, 0x2E, 0x00, 0x61, 0x00, 0x62, 0x00, 0x62, 0x00, -/* 000049D0 */ 0x72, 0x00, 0x65, 0x00, 0x76, 0x00, 0x69, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, -/* 000049E0 */ 0x28, 0x00, 0x32, 0x00, 0x29, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x79, 0x00, 0x65, 0x00, -/* 000049F0 */ 0x61, 0x00, 0x72, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x7D, 0x00, -/* 00004A00 */ 0x00, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x7A, 0x00, 0x6F, 0x00, 0x6E, 0x00, -/* 00004A10 */ 0x65, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x7B, 0x00, 0x79, 0x00, 0x65, 0x00, 0x61, 0x00, 0x72, 0x00, -/* 00004A20 */ 0x5C, 0x00, 0x2E, 0x00, 0x5B, 0x00, 0x61, 0x00, 0x2D, 0x00, 0x7A, 0x00, 0x5D, 0x00, 0x2A, 0x00, -/* 00004A30 */ 0x28, 0x00, 0x5C, 0x00, 0x28, 0x00, 0x5B, 0x00, 0x30, 0x00, 0x2D, 0x00, 0x39, 0x00, 0x5D, 0x00, -/* 00004A40 */ 0x5C, 0x00, 0x29, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x5C, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x31, 0x00, -/* 00004A50 */ 0x32, 0x00, 0x48, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x72, 0x00, 0x43, 0x00, 0x6C, 0x00, 0x6F, 0x00, -/* 00004A60 */ 0x63, 0x00, 0x6B, 0x00, 0x00, 0x00, 0x32, 0x00, 0x34, 0x00, 0x48, 0x00, 0x6F, 0x00, 0x75, 0x00, -/* 00004A70 */ 0x72, 0x00, 0x43, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x6B, 0x00, 0x00, 0x00, 0x6E, 0x00, -/* 00004A80 */ 0x6F, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x00, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, -/* 00004A90 */ 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, -/* 00004AA0 */ 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, -/* 00004AB0 */ 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, -/* 00004AC0 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6D, 0x00, 0x70, 0x00, -/* 00004AD0 */ 0x00, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, -/* 00004AE0 */ 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, -/* 00004AF0 */ 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, -/* 00004B00 */ 0x65, 0x00, 0x2E, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, -/* 00004B10 */ 0x65, 0x00, 0x64, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, -/* 00004B20 */ 0x73, 0x00, 0x00, 0x00, 0xFE, 0x07, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x6A, 0x00, 0x00, 0x00, 0x9B, -/* 00004B30 */ 0x00, 0x00, 0x00, 0x05, 0x01, 0x00, 0x00, 0x6F, 0x01, 0x00, 0x00, 0x70, 0x01, 0x00, 0x00, 0x7E, -/* 00004B40 */ 0x01, 0x00, 0x00, 0x8F, 0x01, 0x00, 0x00, 0xB7, 0x01, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x00, 0xE1, -/* 00004B50 */ 0x01, 0x00, 0x00, 0x5B, 0x02, 0x00, 0x00, 0x7A, 0x02, 0x00, 0x00, 0x7B, 0x02, 0x00, 0x00, 0xAE, -/* 00004B60 */ 0x02, 0x00, 0x00, 0xED, 0x02, 0x00, 0x00, 0x12, 0x03, 0x00, 0x00, 0x44, 0x03, 0x00, 0x00, 0x79, -/* 00004B70 */ 0x03, 0x00, 0x00, 0x7A, 0x03, 0x00, 0x00, 0x8B, 0x03, 0x00, 0x00, 0xAE, 0x03, 0x00, 0x00, 0xAF, -/* 00004B80 */ 0x03, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0xF5, 0x03, 0x00, 0x00, 0x2E, 0x04, 0x00, 0x00, 0x6F, -/* 00004B90 */ 0x04, 0x00, 0x00, 0x70, 0x04, 0x00, 0x00, 0xB1, 0x04, 0x00, 0x00, 0xE9, 0x04, 0x00, 0x00, 0xEA, -/* 00004BA0 */ 0x04, 0x00, 0x00, 0x64, 0x05, 0x00, 0x00, 0xC5, 0x05, 0x00, 0x00, 0x54, 0x06, 0x00, 0x00, 0xBF, -/* 00004BB0 */ 0x06, 0x00, 0x00, 0xE0, 0x06, 0x00, 0x00, 0xF6, 0x06, 0x00, 0x00, 0x08, 0x07, 0x00, 0x00, 0x28, -/* 00004BC0 */ 0x07, 0x00, 0x00, 0x29, 0x07, 0x00, 0x00, 0x40, 0x07, 0x00, 0x00, 0x8A, 0x07, 0x00, 0x00, 0x99, -/* 00004BD0 */ 0x07, 0x00, 0x00, 0x9A, 0x07, 0x00, 0x00, 0xB8, 0x07, 0x00, 0x00, 0xE3, 0x07, 0x00, 0x00, 0xFF, -/* 00004BE0 */ 0x07, 0x00, 0x00, 0x11, 0x08, 0x00, 0x00, 0x12, 0x08, 0x00, 0x00, 0x6F, 0x08, 0x00, 0x00, 0x9D, -/* 00004BF0 */ 0x08, 0x00, 0x00, 0xAF, 0x08, 0x00, 0x00, 0xB0, 0x08, 0x00, 0x00, 0xDA, 0x08, 0x00, 0x00, 0xE8, -/* 00004C00 */ 0x08, 0x00, 0x00, 0xF4, 0x08, 0x00, 0x00, 0xFA, 0x08, 0x00, 0x00, 0xFB, 0x08, 0x00, 0x00, 0x1F, -/* 00004C10 */ 0x09, 0x00, 0x00, 0x41, 0x09, 0x00, 0x00, 0x63, 0x09, 0x00, 0x00, 0x85, 0x09, 0x00, 0x00, 0xA7, -/* 00004C20 */ 0x09, 0x00, 0x00, 0xC5, 0x09, 0x00, 0x00, 0xE5, 0x09, 0x00, 0x00, 0xE6, 0x09, 0x00, 0x00, 0x12, -/* 00004C30 */ 0x0A, 0x00, 0x00, 0x13, 0x0A, 0x00, 0x00, 0x31, 0x0A, 0x00, 0x00, 0x57, 0x0A, 0x00, 0x00, 0x81, -/* 00004C40 */ 0x0A, 0x00, 0x00, 0xA7, 0x0A, 0x00, 0x00, 0xCC, 0x0A, 0x00, 0x00, 0xDA, 0x0A, 0x00, 0x00, 0xDB, -/* 00004C50 */ 0x0A, 0x00, 0x00, 0x2F, 0x0B, 0x00, 0x00, 0x7F, 0x0B, 0x00, 0x00, 0xDD, 0x0B, 0x00, 0x00, 0x39, -/* 00004C60 */ 0x0C, 0x00, 0x00, 0xAF, 0x0C, 0x00, 0x00, 0xDF, 0x0C, 0x00, 0x00, 0x34, 0x0D, 0x00, 0x00, 0x76, -/* 00004C70 */ 0x0D, 0x00, 0x00, 0xC0, 0x0D, 0x00, 0x00, 0xC7, 0x0D, 0x00, 0x00, 0xC8, 0x0D, 0x00, 0x00, 0x14, -/* 00004C80 */ 0x0E, 0x00, 0x00, 0x60, 0x0E, 0x00, 0x00, 0xA6, 0x0E, 0x00, 0x00, 0xEC, 0x0E, 0x00, 0x00, 0xED, -/* 00004C90 */ 0x0E, 0x00, 0x00, 0x39, 0x0F, 0x00, 0x00, 0x83, 0x0F, 0x00, 0x00, 0xBD, 0x0F, 0x00, 0x00, 0xBE, -/* 00004CA0 */ 0x0F, 0x00, 0x00, 0x0C, 0x10, 0x00, 0x00, 0x62, 0x10, 0x00, 0x00, 0xB8, 0x10, 0x00, 0x00, 0xB9, -/* 00004CB0 */ 0x10, 0x00, 0x00, 0xEE, 0x10, 0x00, 0x00, 0xEF, 0x10, 0x00, 0x00, 0x2D, 0x11, 0x00, 0x00, 0x65, -/* 00004CC0 */ 0x11, 0x00, 0x00, 0x66, 0x11, 0x00, 0x00, 0xD1, 0x11, 0x00, 0x00, 0x02, 0x12, 0x00, 0x00, 0x12, -/* 00004CD0 */ 0x12, 0x00, 0x00, 0x31, 0x12, 0x00, 0x00, 0x54, 0x12, 0x00, 0x00, 0x77, 0x12, 0x00, 0x00, 0x98, -/* 00004CE0 */ 0x12, 0x00, 0x00, 0xB8, 0x12, 0x00, 0x00, 0xC7, 0x12, 0x00, 0x00, 0xD5, 0x12, 0x00, 0x00, 0xD6, -/* 00004CF0 */ 0x12, 0x00, 0x00, 0xE6, 0x12, 0x00, 0x00, 0x3D, 0x13, 0x00, 0x00, 0x94, 0x13, 0x00, 0x00, 0x0F, -/* 00004D00 */ 0x14, 0x00, 0x00, 0x83, 0x14, 0x00, 0x00, 0x05, 0x15, 0x00, 0x00, 0x85, 0x15, 0x00, 0x00, 0xCD, -/* 00004D10 */ 0x15, 0x00, 0x00, 0x3F, 0x16, 0x00, 0x00, 0x40, 0x16, 0x00, 0x00, 0x9E, 0x16, 0x00, 0x00, 0xFA, -/* 00004D20 */ 0x16, 0x00, 0x00, 0x50, 0x17, 0x00, 0x00, 0xBB, 0x17, 0x00, 0x00, 0x28, 0x18, 0x00, 0x00, 0xA7, -/* 00004D30 */ 0x18, 0x00, 0x00, 0x24, 0x19, 0x00, 0x00, 0x9B, 0x19, 0x00, 0x00, 0x0E, 0x1A, 0x00, 0x00, 0x6B, -/* 00004D40 */ 0x1A, 0x00, 0x00, 0x6C, 0x1A, 0x00, 0x00, 0xA5, 0x1A, 0x00, 0x00, 0x21, 0x1B, 0x00, 0x00, 0xAE, -/* 00004D50 */ 0x1B, 0x00, 0x00, 0xD6, 0x1B, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x50, 0x1C, 0x00, 0x00, 0x5B, -/* 00004D60 */ 0x1C, 0x00, 0x00, 0xA4, 0x1C, 0x00, 0x00, 0xFC, 0x1C, 0x00, 0x00, 0x62, 0x1D, 0x00, 0x00, 0x63, -/* 00004D70 */ 0x1D, 0x00, 0x00, 0x89, 0x1D, 0x00, 0x00, 0xE9, 0x1D, 0x00, 0x00, 0x31, 0x1E, 0x00, 0x00, 0x57, -/* 00004D80 */ 0x1E, 0x00, 0x00, 0x7D, 0x1E, 0x00, 0x00, 0x7E, 0x1E, 0x00, 0x00, 0xBB, 0x1E, 0x00, 0x00, 0xF2, -/* 00004D90 */ 0x1E, 0x00, 0x00, 0xF3, 0x1E, 0x00, 0x00, 0x59, 0x1F, 0x00, 0x00, 0x5A, 0x1F, 0x00, 0x00, 0xCA, -/* 00004DA0 */ 0x1F, 0x00, 0x00, 0x48, 0x20, 0x00, 0x00, 0x4F, 0x20, 0x00, 0x00, 0x50, 0x20, 0x00, 0x00, 0x64, -/* 00004DB0 */ 0x20, 0x00, 0x00, 0xFB, 0x20, 0x00, 0x00, 0x6C, 0x21, 0x00, 0x00, 0x73, 0x21, 0x00, 0x00, 0x74, -/* 00004DC0 */ 0x21, 0x00, 0x00, 0xBF, 0x21, 0x00, 0x00, 0xE6, 0x21, 0x00, 0x00, 0xF7, 0x21, 0x00, 0x00, 0x0A, -/* 00004DD0 */ 0x22, 0x00, 0x00, 0x1B, 0x22, 0x00, 0x00, 0x2F, 0x22, 0x00, 0x00, 0x42, 0x22, 0x00, 0x00, 0x4A, -/* 00004DE0 */ 0x22, 0x00, 0x00, 0x6F, 0x22, 0x00, 0x00, 0x81, 0x22, 0x00, 0x00, 0x93, 0x22, 0x00, 0x00, 0xA5, -/* 00004DF0 */ 0x22, 0x00, 0x00, 0xB8, 0x22, 0x00, 0x00, 0xC0, 0x22, 0x00, 0x00, 0xE5, 0x22, 0x00, 0x00, 0x15, -/* 00004E00 */ 0x23, 0x00, 0x00, 0x7C, 0x23, 0x00, 0x00, 0xC4, 0x23, 0x00, 0x00, 0x13, 0x24, 0x00, 0x00, 0x1B, -/* 00004E10 */ 0x24, 0x00, 0x00, 0x4A, 0x24, 0x00, 0x00, 0x79, 0x24, 0x00, 0x00, 0x04, 0x25, 0x00, 0x00, 0x71, -/* 00004E20 */ 0x25, 0x00, 0x00, 0xE4, 0x25, 0x00, 0x00, 0xEC, 0x25, 0x00, 0x00, 0xED, 0x25, 0x00, 0x00, 0x1D, -/* 00004E30 */ 0x26, 0x00, 0x00, 0x4C, 0x26, 0x00, 0x00, 0x73, 0x26, 0x00, 0x00, 0x84, 0x26, 0x00, 0x00, 0xA8, -/* 00004E40 */ 0x26, 0x00, 0x00, 0xB2, 0x26, 0x00, 0x00, 0xB8, 0x26, 0x00, 0x00, 0xB9, 0x26, 0x00, 0x00, 0x13, -/* 00004E50 */ 0x27, 0x00, 0x00, 0x80, 0x27, 0x00, 0x00, 0xEC, 0x27, 0x00, 0x00, 0x54, 0x28, 0x00, 0x00, 0xC3, -/* 00004E60 */ 0x28, 0x00, 0x00, 0x23, 0x29, 0x00, 0x00, 0x41, 0x29, 0x00, 0x00, 0x42, 0x29, 0x00, 0x00, 0x67, -/* 00004E70 */ 0x29, 0x00, 0x00, 0x92, 0x29, 0x00, 0x00, 0xC7, 0x29, 0x00, 0x00, 0xEB, 0x29, 0x00, 0x00, 0xF5, -/* 00004E80 */ 0x29, 0x00, 0x00, 0xF6, 0x29, 0x00, 0x00, 0x2A, 0x2A, 0x00, 0x00, 0x41, 0x2A, 0x00, 0x00, 0x90, -/* 00004E90 */ 0x2A, 0x00, 0x00, 0xC2, 0x2A, 0x00, 0x00, 0xE6, 0x2A, 0x00, 0x00, 0xF7, 0x2A, 0x00, 0x00, 0x1D, -/* 00004EA0 */ 0x2B, 0x00, 0x00, 0x27, 0x2B, 0x00, 0x00, 0x28, 0x2B, 0x00, 0x00, 0x48, 0x2B, 0x00, 0x00, 0x4F, -/* 00004EB0 */ 0x2B, 0x00, 0x00, 0x50, 0x2B, 0x00, 0x00, 0xB5, 0x2B, 0x00, 0x00, 0xE1, 0x2B, 0x00, 0x00, 0x27, -/* 00004EC0 */ 0x2C, 0x00, 0x00, 0x3D, 0x2C, 0x00, 0x00, 0x47, 0x2C, 0x00, 0x00, 0x4E, 0x2C, 0x00, 0x00, 0x4F, -/* 00004ED0 */ 0x2C, 0x00, 0x00, 0x80, 0x2C, 0x00, 0x00, 0xB7, 0x2C, 0x00, 0x00, 0xBE, 0x2C, 0x00, 0x00, 0xBF, -/* 00004EE0 */ 0x2C, 0x00, 0x00, 0xC7, 0x2C, 0x00, 0x00, 0x0A, 0x2D, 0x00, 0x00, 0x11, 0x2D, 0x00, 0x00, 0x3B, -/* 00004EF0 */ 0x2D, 0x00, 0x00, 0x42, 0x2D, 0x00, 0x00, 0xB3, 0x2D, 0x00, 0x00, 0x10, 0x2E, 0x00, 0x00, 0x60, -/* 00004F00 */ 0x2E, 0x00, 0x00, 0x68, 0x2E, 0x00, 0x00, 0xAF, 0x2E, 0x00, 0x00, 0xD3, 0x2E, 0x00, 0x00, 0xF1, -/* 00004F10 */ 0x2E, 0x00, 0x00, 0xFB, 0x2E, 0x00, 0x00, 0xFC, 0x2E, 0x00, 0x00, 0x1C, 0x2F, 0x00, 0x00, 0x38, -/* 00004F20 */ 0x2F, 0x00, 0x00, 0x4F, 0x2F, 0x00, 0x00, 0x7F, 0x2F, 0x00, 0x00, 0xA1, 0x2F, 0x00, 0x00, 0xAF, -/* 00004F30 */ 0x2F, 0x00, 0x00, 0xB0, 0x2F, 0x00, 0x00, 0xCA, 0x2F, 0x00, 0x00, 0x08, 0x30, 0x00, 0x00, 0x37, -/* 00004F40 */ 0x30, 0x00, 0x00, 0x54, 0x30, 0x00, 0x00, 0x6F, 0x30, 0x00, 0x00, 0x81, 0x30, 0x00, 0x00, 0x8F, -/* 00004F50 */ 0x30, 0x00, 0x00, 0x90, 0x30, 0x00, 0x00, 0xAE, 0x30, 0x00, 0x00, 0xD0, 0x30, 0x00, 0x00, 0x14, -/* 00004F60 */ 0x31, 0x00, 0x00, 0x62, 0x31, 0x00, 0x00, 0xA5, 0x31, 0x00, 0x00, 0xF4, 0x31, 0x00, 0x00, 0x24, -/* 00004F70 */ 0x32, 0x00, 0x00, 0x6D, 0x32, 0x00, 0x00, 0x87, 0x32, 0x00, 0x00, 0x95, 0x32, 0x00, 0x00, 0x96, -/* 00004F80 */ 0x32, 0x00, 0x00, 0xCE, 0x32, 0x00, 0x00, 0xD8, 0x32, 0x00, 0x00, 0xDF, 0x32, 0x00, 0x00, 0xE0, -/* 00004F90 */ 0x32, 0x00, 0x00, 0xE8, 0x32, 0x00, 0x00, 0x4C, 0x33, 0x00, 0x00, 0xB3, 0x33, 0x00, 0x00, 0x0A, -/* 00004FA0 */ 0x34, 0x00, 0x00, 0x11, 0x34, 0x00, 0x00, 0x74, 0x34, 0x00, 0x00, 0x7B, 0x34, 0x00, 0x00, 0xC3, -/* 00004FB0 */ 0x34, 0x00, 0x00, 0x12, 0x35, 0x00, 0x00, 0x2D, 0x35, 0x00, 0x00, 0x35, 0x35, 0x00, 0x00, 0x6B, -/* 00004FC0 */ 0x35, 0x00, 0x00, 0xDE, 0x35, 0x00, 0x00, 0xFF, 0x35, 0x00, 0x00, 0x12, 0x36, 0x00, 0x00, 0x25, -/* 00004FD0 */ 0x36, 0x00, 0x00, 0x38, 0x36, 0x00, 0x00, 0x4B, 0x36, 0x00, 0x00, 0x5E, 0x36, 0x00, 0x00, 0x71, -/* 00004FE0 */ 0x36, 0x00, 0x00, 0x7C, 0x36, 0x00, 0x00, 0x7D, 0x36, 0x00, 0x00, 0xD0, 0x36, 0x00, 0x00, 0xD1, -/* 00004FF0 */ 0x36, 0x00, 0x00, 0xEF, 0x36, 0x00, 0x00, 0xF6, 0x36, 0x00, 0x00, 0xF7, 0x36, 0x00, 0x00, 0xFF, -/* 00005000 */ 0x36, 0x00, 0x00, 0x4B, 0x37, 0x00, 0x00, 0x52, 0x37, 0x00, 0x00, 0x76, 0x37, 0x00, 0x00, 0x7D, -/* 00005010 */ 0x37, 0x00, 0x00, 0xEE, 0x37, 0x00, 0x00, 0x36, 0x38, 0x00, 0x00, 0x3E, 0x38, 0x00, 0x00, 0x89, -/* 00005020 */ 0x38, 0x00, 0x00, 0xAC, 0x38, 0x00, 0x00, 0xE8, 0x38, 0x00, 0x00, 0x2D, 0x39, 0x00, 0x00, 0x57, -/* 00005030 */ 0x39, 0x00, 0x00, 0x71, 0x39, 0x00, 0x00, 0x7F, 0x39, 0x00, 0x00, 0x80, 0x39, 0x00, 0x00, 0xE0, -/* 00005040 */ 0x39, 0x00, 0x00, 0x11, 0x3A, 0x00, 0x00, 0x42, 0x3A, 0x00, 0x00, 0x84, 0x3A, 0x00, 0x00, 0xCB, -/* 00005050 */ 0x3A, 0x00, 0x00, 0xDD, 0x3A, 0x00, 0x00, 0xDE, 0x3A, 0x00, 0x00, 0xFD, 0x3A, 0x00, 0x00, 0x0B, -/* 00005060 */ 0x3B, 0x00, 0x00, 0x15, 0x3B, 0x00, 0x00, 0x16, 0x3B, 0x00, 0x00, 0x42, 0x3B, 0x00, 0x00, 0x59, -/* 00005070 */ 0x3B, 0x00, 0x00, 0x60, 0x3B, 0x00, 0x00, 0x61, 0x3B, 0x00, 0x00, 0x8B, 0x3B, 0x00, 0x00, 0x8C, -/* 00005080 */ 0x3B, 0x00, 0x00, 0x94, 0x3B, 0x00, 0x00, 0xDB, 0x3B, 0x00, 0x00, 0xE2, 0x3B, 0x00, 0x00, 0x0E, -/* 00005090 */ 0x3C, 0x00, 0x00, 0x15, 0x3C, 0x00, 0x00, 0x72, 0x3C, 0x00, 0x00, 0xD0, 0x3C, 0x00, 0x00, 0xD8, -/* 000050A0 */ 0x3C, 0x00, 0x00, 0x16, 0x3D, 0x00, 0x00, 0x3E, 0x3D, 0x00, 0x00, 0x65, 0x3D, 0x00, 0x00, 0x66, -/* 000050B0 */ 0x3D, 0x00, 0x00, 0x8F, 0x3D, 0x00, 0x00, 0xC9, 0x3D, 0x00, 0x00, 0xE3, 0x3D, 0x00, 0x00, 0x06, -/* 000050C0 */ 0x3E, 0x00, 0x00, 0x23, 0x3E, 0x00, 0x00, 0x3E, 0x3E, 0x00, 0x00, 0x5C, 0x3E, 0x00, 0x00, 0x78, -/* 000050D0 */ 0x3E, 0x00, 0x00, 0xB6, 0x3E, 0x00, 0x00, 0xEF, 0x3E, 0x00, 0x00, 0x10, 0x3F, 0x00, 0x00, 0x31, -/* 000050E0 */ 0x3F, 0x00, 0x00, 0x58, 0x3F, 0x00, 0x00, 0x78, 0x3F, 0x00, 0x00, 0x99, 0x3F, 0x00, 0x00, 0xB2, -/* 000050F0 */ 0x3F, 0x00, 0x00, 0xCF, 0x3F, 0x00, 0x00, 0xEE, 0x3F, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x0E, -/* 00005100 */ 0x40, 0x00, 0x00, 0x0F, 0x40, 0x00, 0x00, 0x46, 0x40, 0x00, 0x00, 0x50, 0x40, 0x00, 0x00, 0x51, -/* 00005110 */ 0x40, 0x00, 0x00, 0x88, 0x40, 0x00, 0x00, 0xBD, 0x40, 0x00, 0x00, 0xEB, 0x40, 0x00, 0x00, 0x02, -/* 00005120 */ 0x41, 0x00, 0x00, 0x13, 0x41, 0x00, 0x00, 0x31, 0x41, 0x00, 0x00, 0x3B, 0x41, 0x00, 0x00, 0x42, -/* 00005130 */ 0x41, 0x00, 0x00, 0x43, 0x41, 0x00, 0x00, 0x4B, 0x41, 0x00, 0x00, 0xA9, 0x41, 0x00, 0x00, 0xFE, -/* 00005140 */ 0x41, 0x00, 0x00, 0x05, 0x42, 0x00, 0x00, 0x29, 0x42, 0x00, 0x00, 0x30, 0x42, 0x00, 0x00, 0xA1, -/* 00005150 */ 0x42, 0x00, 0x00, 0x1B, 0x43, 0x00, 0x00, 0x96, 0x43, 0x00, 0x00, 0xC9, 0x43, 0x00, 0x00, 0x45, -/* 00005160 */ 0x44, 0x00, 0x00, 0x4D, 0x44, 0x00, 0x00, 0xB8, 0x44, 0x00, 0x00, 0xE7, 0x44, 0x00, 0x00, 0xF6, -/* 00005170 */ 0x44, 0x00, 0x00, 0x1A, 0x45, 0x00, 0x00, 0x5E, 0x45, 0x00, 0x00, 0x6F, 0x45, 0x00, 0x00, 0xB4, -/* 00005180 */ 0x45, 0x00, 0x00, 0xBE, 0x45, 0x00, 0x00, 0xBF, 0x45, 0x00, 0x00, 0xE3, 0x45, 0x00, 0x00, 0x1D, -/* 00005190 */ 0x46, 0x00, 0x00, 0x44, 0x46, 0x00, 0x00, 0x7E, 0x46, 0x00, 0x00, 0xC4, 0x46, 0x00, 0x00, 0xEE, -/* 000051A0 */ 0x46, 0x00, 0x00, 0x1F, 0x47, 0x00, 0x00, 0x3E, 0x47, 0x00, 0x00, 0x8E, 0x47, 0x00, 0x00, 0xC2, -/* 000051B0 */ 0x47, 0x00, 0x00, 0xF3, 0x47, 0x00, 0x00, 0x47, 0x48, 0x00, 0x00, 0x7B, 0x48, 0x00, 0x00, 0xC8, -/* 000051C0 */ 0x48, 0x00, 0x00, 0xE2, 0x48, 0x00, 0x00, 0x31, 0x49, 0x00, 0x00, 0x59, 0x49, 0x00, 0x00, 0x6F, -/* 000051D0 */ 0x49, 0x00, 0x00, 0x81, 0x49, 0x00, 0x00, 0x8F, 0x49, 0x00, 0x00, 0x90, 0x49, 0x00, 0x00, 0xC2, -/* 000051E0 */ 0x49, 0x00, 0x00, 0xF5, 0x49, 0x00, 0x00, 0x3F, 0x4A, 0x00, 0x00, 0x71, 0x4A, 0x00, 0x00, 0x9F, -/* 000051F0 */ 0x4A, 0x00, 0x00, 0xD8, 0x4A, 0x00, 0x00, 0xEE, 0x4A, 0x00, 0x00, 0x00, 0x4B, 0x00, 0x00, 0x0E, -/* 00005200 */ 0x4B, 0x00, 0x00, 0x0F, 0x4B, 0x00, 0x00, 0x30, 0x4B, 0x00, 0x00, 0x6E, 0x4B, 0x00, 0x00, 0x7A, -/* 00005210 */ 0x4B, 0x00, 0x00, 0x7B, 0x4B, 0x00, 0x00, 0xA8, 0x4B, 0x00, 0x00, 0xEE, 0x4B, 0x00, 0x00, 0x15, -/* 00005220 */ 0x4C, 0x00, 0x00, 0x48, 0x4C, 0x00, 0x00, 0x5D, 0x4C, 0x00, 0x00, 0xAD, 0x4C, 0x00, 0x00, 0xFB, -/* 00005230 */ 0x4C, 0x00, 0x00, 0x4C, 0x4D, 0x00, 0x00, 0x5A, 0x4D, 0x00, 0x00, 0x5B, 0x4D, 0x00, 0x00, 0xA1, -/* 00005240 */ 0x4D, 0x00, 0x00, 0xAB, 0x4D, 0x00, 0x00, 0xAC, 0x4D, 0x00, 0x00, 0xD1, 0x4D, 0x00, 0x00, 0xE8, -/* 00005250 */ 0x4D, 0x00, 0x00, 0xEF, 0x4D, 0x00, 0x00, 0xF0, 0x4D, 0x00, 0x00, 0x0A, 0x4E, 0x00, 0x00, 0x20, -/* 00005260 */ 0x4E, 0x00, 0x00, 0x3E, 0x4E, 0x00, 0x00, 0x6A, 0x4E, 0x00, 0x00, 0x78, 0x4E, 0x00, 0x00, 0xB4, -/* 00005270 */ 0x4E, 0x00, 0x00, 0xBF, 0x4E, 0x00, 0x00, 0xC0, 0x4E, 0x00, 0x00, 0xD6, 0x4E, 0x00, 0x00, 0x12, -/* 00005280 */ 0x4F, 0x00, 0x00, 0x1D, 0x4F, 0x00, 0x00, 0x1E, 0x4F, 0x00, 0x00, 0x34, 0x4F, 0x00, 0x00, 0x6A, -/* 00005290 */ 0x4F, 0x00, 0x00, 0x75, 0x4F, 0x00, 0x00, 0x76, 0x4F, 0x00, 0x00, 0x94, 0x4F, 0x00, 0x00, 0xD1, -/* 000052A0 */ 0x4F, 0x00, 0x00, 0xDC, 0x4F, 0x00, 0x00, 0xDD, 0x4F, 0x00, 0x00, 0xF3, 0x4F, 0x00, 0x00, 0x14, -/* 000052B0 */ 0x50, 0x00, 0x00, 0x2D, 0x50, 0x00, 0x00, 0x5D, 0x50, 0x00, 0x00, 0x8E, 0x50, 0x00, 0x00, 0x9C, -/* 000052C0 */ 0x50, 0x00, 0x00, 0xB4, 0x50, 0x00, 0x00, 0xBE, 0x50, 0x00, 0x00, 0xC6, 0x50, 0x00, 0x00, 0xC7, -/* 000052D0 */ 0x50, 0x00, 0x00, 0xEE, 0x50, 0x00, 0x00, 0x32, 0x51, 0x00, 0x00, 0x59, 0x51, 0x00, 0x00, 0x5A, -/* 000052E0 */ 0x51, 0x00, 0x00, 0x7D, 0x51, 0x00, 0x00, 0xA2, 0x51, 0x00, 0x00, 0xDC, 0x51, 0x00, 0x00, 0xEA, -/* 000052F0 */ 0x51, 0x00, 0x00, 0xEB, 0x51, 0x00, 0x00, 0x0F, 0x52, 0x00, 0x00, 0x41, 0x52, 0x00, 0x00, 0x4F, -/* 00005300 */ 0x52, 0x00, 0x00, 0x50, 0x52, 0x00, 0x00, 0x74, 0x52, 0x00, 0x00, 0xA6, 0x52, 0x00, 0x00, 0xB4, -/* 00005310 */ 0x52, 0x00, 0x00, 0xB5, 0x52, 0x00, 0x00, 0x04, 0x53, 0x00, 0x00, 0x7D, 0x53, 0x00, 0x00, 0x8B, -/* 00005320 */ 0x53, 0x00, 0x00, 0x8C, 0x53, 0x00, 0x00, 0xA6, 0x53, 0x00, 0x00, 0xB0, 0x53, 0x00, 0x00, 0xB1, -/* 00005330 */ 0x53, 0x00, 0x00, 0xCA, 0x53, 0x00, 0x00, 0xD0, 0x53, 0x00, 0x00, 0xD1, 0x53, 0x00, 0x00, 0xD9, -/* 00005340 */ 0x53, 0x00, 0x00, 0x34, 0x54, 0x00, 0x00, 0x85, 0x54, 0x00, 0x00, 0xB8, 0x54, 0x00, 0x00, 0xBF, -/* 00005350 */ 0x54, 0x00, 0x00, 0x18, 0x55, 0x00, 0x00, 0x66, 0x55, 0x00, 0x00, 0x6D, 0x55, 0x00, 0x00, 0x96, -/* 00005360 */ 0x55, 0x00, 0x00, 0x9D, 0x55, 0x00, 0x00, 0xD9, 0x55, 0x00, 0x00, 0x2C, 0x56, 0x00, 0x00, 0x79, -/* 00005370 */ 0x56, 0x00, 0x00, 0xC6, 0x56, 0x00, 0x00, 0x20, 0x57, 0x00, 0x00, 0x39, 0x57, 0x00, 0x00, 0x41, -/* 00005380 */ 0x57, 0x00, 0x00, 0x98, 0x57, 0x00, 0x00, 0xBF, 0x57, 0x00, 0x00, 0xE2, 0x57, 0x00, 0x00, 0x10, -/* 00005390 */ 0x58, 0x00, 0x00, 0x58, 0x58, 0x00, 0x00, 0xC5, 0x58, 0x00, 0x00, 0xD3, 0x58, 0x00, 0x00, 0xF6, -/* 000053A0 */ 0x58, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x01, 0x59, 0x00, 0x00, 0x1A, 0x59, 0x00, 0x00, 0x21, -/* 000053B0 */ 0x59, 0x00, 0x00, 0x22, 0x59, 0x00, 0x00, 0x3C, 0x59, 0x00, 0x00, 0x66, 0x59, 0x00, 0x00, 0x90, -/* 000053C0 */ 0x59, 0x00, 0x00, 0x96, 0x59, 0x00, 0x00, 0x97, 0x59, 0x00, 0x00, 0x9F, 0x59, 0x00, 0x00, 0x0A, -/* 000053D0 */ 0x5A, 0x00, 0x00, 0x3A, 0x5A, 0x00, 0x00, 0x41, 0x5A, 0x00, 0x00, 0x7A, 0x5A, 0x00, 0x00, 0x82, -/* 000053E0 */ 0x5A, 0x00, 0x00, 0xAA, 0x5A, 0x00, 0x00, 0xEF, 0x5A, 0x00, 0x00, 0x53, 0x5B, 0x00, 0x00, 0xD3, -/* 000053F0 */ 0x5B, 0x00, 0x00, 0xD4, 0x5B, 0x00, 0x00, 0x46, 0x5C, 0x00, 0x00, 0x77, 0x5C, 0x00, 0x00, 0xC6, -/* 00005400 */ 0x5C, 0x00, 0x00, 0x18, 0x5D, 0x00, 0x00, 0x6C, 0x5D, 0x00, 0x00, 0xA4, 0x5D, 0x00, 0x00, 0xF6, -/* 00005410 */ 0x5D, 0x00, 0x00, 0x48, 0x5E, 0x00, 0x00, 0x9D, 0x5E, 0x00, 0x00, 0x09, 0x5F, 0x00, 0x00, 0x5F, -/* 00005420 */ 0x5F, 0x00, 0x00, 0x60, 0x5F, 0x00, 0x00, 0x7F, 0x5F, 0x00, 0x00, 0x9E, 0x5F, 0x00, 0x00, 0xD0, -/* 00005430 */ 0x5F, 0x00, 0x00, 0xD1, 0x5F, 0x00, 0x00, 0x48, 0x60, 0x00, 0x00, 0xB5, 0x60, 0x00, 0x00, 0x08, -/* 00005440 */ 0x61, 0x00, 0x00, 0x4B, 0x61, 0x00, 0x00, 0x4C, 0x61, 0x00, 0x00, 0xC9, 0x61, 0x00, 0x00, 0x5D, -/* 00005450 */ 0x62, 0x00, 0x00, 0xE0, 0x62, 0x00, 0x00, 0x63, 0x63, 0x00, 0x00, 0xD6, 0x63, 0x00, 0x00, 0xD7, -/* 00005460 */ 0x63, 0x00, 0x00, 0x41, 0x64, 0x00, 0x00, 0xBA, 0x64, 0x00, 0x00, 0xBB, 0x64, 0x00, 0x00, 0x1E, -/* 00005470 */ 0x65, 0x00, 0x00, 0xAD, 0x65, 0x00, 0x00, 0x56, 0x66, 0x00, 0x00, 0xEA, 0x66, 0x00, 0x00, 0x81, -/* 00005480 */ 0x67, 0x00, 0x00, 0x25, 0x68, 0x00, 0x00, 0x39, 0x68, 0x00, 0x00, 0x3A, 0x68, 0x00, 0x00, 0x6A, -/* 00005490 */ 0x68, 0x00, 0x00, 0xD6, 0x68, 0x00, 0x00, 0x46, 0x69, 0x00, 0x00, 0xB6, 0x69, 0x00, 0x00, 0x28, -/* 000054A0 */ 0x6A, 0x00, 0x00, 0x9C, 0x6A, 0x00, 0x00, 0x10, 0x6B, 0x00, 0x00, 0x5A, 0x6B, 0x00, 0x00, 0x5B, -/* 000054B0 */ 0x6B, 0x00, 0x00, 0xC8, 0x6B, 0x00, 0x00, 0xC9, 0x6B, 0x00, 0x00, 0x15, 0x6C, 0x00, 0x00, 0x89, -/* 000054C0 */ 0x6C, 0x00, 0x00, 0x1B, 0x6D, 0x00, 0x00, 0xAD, 0x6D, 0x00, 0x00, 0xAE, 0x6D, 0x00, 0x00, 0xE2, -/* 000054D0 */ 0x6D, 0x00, 0x00, 0x06, 0x6E, 0x00, 0x00, 0x42, 0x6E, 0x00, 0x00, 0x5C, 0x6E, 0x00, 0x00, 0x7B, -/* 000054E0 */ 0x6E, 0x00, 0x00, 0x89, 0x6E, 0x00, 0x00, 0x8A, 0x6E, 0x00, 0x00, 0xC3, 0x6E, 0x00, 0x00, 0xDD, -/* 000054F0 */ 0x6E, 0x00, 0x00, 0xFA, 0x6E, 0x00, 0x00, 0x08, 0x6F, 0x00, 0x00, 0x09, 0x6F, 0x00, 0x00, 0x2D, -/* 00005500 */ 0x6F, 0x00, 0x00, 0x52, 0x6F, 0x00, 0x00, 0x73, 0x6F, 0x00, 0x00, 0x8F, 0x6F, 0x00, 0x00, 0xB6, -/* 00005510 */ 0x6F, 0x00, 0x00, 0xE2, 0x6F, 0x00, 0x00, 0xF0, 0x6F, 0x00, 0x00, 0xF1, 0x6F, 0x00, 0x00, 0x0D, -/* 00005520 */ 0x70, 0x00, 0x00, 0x34, 0x70, 0x00, 0x00, 0x60, 0x70, 0x00, 0x00, 0x6E, 0x70, 0x00, 0x00, 0x6F, -/* 00005530 */ 0x70, 0x00, 0x00, 0x8B, 0x70, 0x00, 0x00, 0xB4, 0x70, 0x00, 0x00, 0xC2, 0x70, 0x00, 0x00, 0xC3, -/* 00005540 */ 0x70, 0x00, 0x00, 0xDF, 0x70, 0x00, 0x00, 0x0A, 0x71, 0x00, 0x00, 0x0B, 0x71, 0x00, 0x00, 0x55, -/* 00005550 */ 0x71, 0x00, 0x00, 0x94, 0x71, 0x00, 0x00, 0xD6, 0x71, 0x00, 0x00, 0x0B, 0x72, 0x00, 0x00, 0x2D, -/* 00005560 */ 0x72, 0x00, 0x00, 0x43, 0x72, 0x00, 0x00, 0x44, 0x72, 0x00, 0x00, 0x5F, 0x72, 0x00, 0x00, 0xC5, -/* 00005570 */ 0x72, 0x00, 0x00, 0x34, 0x73, 0x00, 0x00, 0x78, 0x73, 0x00, 0x00, 0xCE, 0x73, 0x00, 0x00, 0xE4, -/* 00005580 */ 0x73, 0x00, 0x00, 0xE5, 0x73, 0x00, 0x00, 0x0A, 0x74, 0x00, 0x00, 0x7C, 0x74, 0x00, 0x00, 0xDD, -/* 00005590 */ 0x74, 0x00, 0x00, 0x38, 0x75, 0x00, 0x00, 0x4E, 0x75, 0x00, 0x00, 0x4F, 0x75, 0x00, 0x00, 0xAD, -/* 000055A0 */ 0x75, 0x00, 0x00, 0xC8, 0x75, 0x00, 0x00, 0xDA, 0x75, 0x00, 0x00, 0xE8, 0x75, 0x00, 0x00, 0xE9, -/* 000055B0 */ 0x75, 0x00, 0x00, 0x1B, 0x76, 0x00, 0x00, 0x1C, 0x76, 0x00, 0x00, 0x34, 0x76, 0x00, 0x00, 0x3F, -/* 000055C0 */ 0x76, 0x00, 0x00, 0x49, 0x76, 0x00, 0x00, 0x4A, 0x76, 0x00, 0x00, 0x81, 0x76, 0x00, 0x00, 0xA9, -/* 000055D0 */ 0x76, 0x00, 0x00, 0xAA, 0x76, 0x00, 0x00, 0xCB, 0x76, 0x00, 0x00, 0xF3, 0x76, 0x00, 0x00, 0xFD, -/* 000055E0 */ 0x76, 0x00, 0x00, 0xFE, 0x76, 0x00, 0x00, 0x4A, 0x77, 0x00, 0x00, 0x50, 0x77, 0x00, 0x00, 0x51, -/* 000055F0 */ 0x77, 0x00, 0x00, 0x59, 0x77, 0x00, 0x00, 0xB4, 0x77, 0x00, 0x00, 0xE3, 0x77, 0x00, 0x00, 0xEA, -/* 00005600 */ 0x77, 0x00, 0x00, 0x3D, 0x78, 0x00, 0x00, 0x9A, 0x78, 0x00, 0x00, 0xF5, 0x78, 0x00, 0x00, 0x1F, -/* 00005610 */ 0x79, 0x00, 0x00, 0x26, 0x79, 0x00, 0x00, 0x5A, 0x79, 0x00, 0x00, 0x61, 0x79, 0x00, 0x00, 0x93, -/* 00005620 */ 0x79, 0x00, 0x00, 0xAD, 0x79, 0x00, 0x00, 0xB5, 0x79, 0x00, 0x00, 0xF4, 0x79, 0x00, 0x00, 0x21, -/* 00005630 */ 0x7A, 0x00, 0x00, 0x40, 0x7A, 0x00, 0x00, 0x5A, 0x7A, 0x00, 0x00, 0x64, 0x7A, 0x00, 0x00, 0x65, -/* 00005640 */ 0x7A, 0x00, 0x00, 0x89, 0x7A, 0x00, 0x00, 0xA8, 0x7A, 0x00, 0x00, 0xE4, 0x7A, 0x00, 0x00, 0x1B, -/* 00005650 */ 0x7B, 0x00, 0x00, 0x1C, 0x7B, 0x00, 0x00, 0x59, 0x7B, 0x00, 0x00, 0x77, 0x7B, 0x00, 0x00, 0x85, -/* 00005660 */ 0x7B, 0x00, 0x00, 0x8F, 0x7B, 0x00, 0x00, 0x90, 0x7B, 0x00, 0x00, 0xB1, 0x7B, 0x00, 0x00, 0xF5, -/* 00005670 */ 0x7B, 0x00, 0x00, 0x7D, 0x7C, 0x00, 0x00, 0xB8, 0x7C, 0x00, 0x00, 0xB9, 0x7C, 0x00, 0x00, 0xFB, -/* 00005680 */ 0x7C, 0x00, 0x00, 0x05, 0x7D, 0x00, 0x00, 0x06, 0x7D, 0x00, 0x00, 0x1B, 0x7D, 0x00, 0x00, 0x22, -/* 00005690 */ 0x7D, 0x00, 0x00, 0x23, 0x7D, 0x00, 0x00, 0x2B, 0x7D, 0x00, 0x00, 0x84, 0x7D, 0x00, 0x00, 0xD1, -/* 000056A0 */ 0x7D, 0x00, 0x00, 0xD8, 0x7D, 0x00, 0x00, 0x04, 0x7E, 0x00, 0x00, 0x0B, 0x7E, 0x00, 0x00, 0x61, -/* 000056B0 */ 0x7E, 0x00, 0x00, 0x69, 0x7E, 0x00, 0x00, 0xA1, 0x7E, 0x00, 0x00, 0xCF, 0x7E, 0x00, 0x00, 0xE6, -/* 000056C0 */ 0x7E, 0x00, 0x00, 0xF0, 0x7E, 0x00, 0x00, 0xF1, 0x7E, 0x00, 0x00, 0x0A, 0x7F, 0x00, 0x00, 0x62, -/* 000056D0 */ 0x7F, 0x00, 0x00, 0x93, 0x7F, 0x00, 0x00, 0xA6, 0x7F, 0x00, 0x00, 0xA7, 0x7F, 0x00, 0x00, 0xC1, -/* 000056E0 */ 0x7F, 0x00, 0x00, 0xEE, 0x7F, 0x00, 0x00, 0x09, 0x80, 0x00, 0x00, 0x2F, 0x80, 0x00, 0x00, 0x94, -/* 000056F0 */ 0x80, 0x00, 0x00, 0xD4, 0x80, 0x00, 0x00, 0xE6, 0x80, 0x00, 0x00, 0xE7, 0x80, 0x00, 0x00, 0x1E, -/* 00005700 */ 0x81, 0x00, 0x00, 0x5A, 0x81, 0x00, 0x00, 0x96, 0x81, 0x00, 0x00, 0xA8, 0x81, 0x00, 0x00, 0xA9, -/* 00005710 */ 0x81, 0x00, 0x00, 0xF6, 0x81, 0x00, 0x00, 0x2C, 0x82, 0x00, 0x00, 0x88, 0x82, 0x00, 0x00, 0xC4, -/* 00005720 */ 0x82, 0x00, 0x00, 0x10, 0x83, 0x00, 0x00, 0x44, 0x83, 0x00, 0x00, 0x56, 0x83, 0x00, 0x00, 0x64, -/* 00005730 */ 0x83, 0x00, 0x00, 0x65, 0x83, 0x00, 0x00, 0x79, 0x83, 0x00, 0x00, 0x83, 0x83, 0x00, 0x00, 0x84, -/* 00005740 */ 0x83, 0x00, 0x00, 0x99, 0x83, 0x00, 0x00, 0xA0, 0x83, 0x00, 0x00, 0xA1, 0x83, 0x00, 0x00, 0xA9, -/* 00005750 */ 0x83, 0x00, 0x00, 0x14, 0x84, 0x00, 0x00, 0x1B, 0x84, 0x00, 0x00, 0x47, 0x84, 0x00, 0x00, 0x4E, -/* 00005760 */ 0x84, 0x00, 0x00, 0xBF, 0x84, 0x00, 0x00, 0xF0, 0x84, 0x00, 0x00, 0xF8, 0x84, 0x00, 0x00, 0x4C, -/* 00005770 */ 0x85, 0x00, 0x00, 0x67, 0x85, 0x00, 0x00, 0x9F, 0x85, 0x00, 0x00, 0xE1, 0x85, 0x00, 0x00, 0x3D, -/* 00005780 */ 0x86, 0x00, 0x00, 0x65, 0x86, 0x00, 0x00, 0x73, 0x86, 0x00, 0x00, 0x7F, 0x86, 0x00, 0x00, 0x80, -/* 00005790 */ 0x86, 0x00, 0x00, 0x97, 0x86, 0x00, 0x00, 0x9E, 0x86, 0x00, 0x00, 0x9F, 0x86, 0x00, 0x00, 0xDB, -/* 000057A0 */ 0x86, 0x00, 0x00, 0xDC, 0x86, 0x00, 0x00, 0xE4, 0x86, 0x00, 0x00, 0x33, 0x87, 0x00, 0x00, 0x3A, -/* 000057B0 */ 0x87, 0x00, 0x00, 0x93, 0x87, 0x00, 0x00, 0xBF, 0x87, 0x00, 0x00, 0xC6, 0x87, 0x00, 0x00, 0xEE, -/* 000057C0 */ 0x87, 0x00, 0x00, 0xF5, 0x87, 0x00, 0x00, 0x79, 0x88, 0x00, 0x00, 0xE7, 0x88, 0x00, 0x00, 0x2C, -/* 000057D0 */ 0x89, 0x00, 0x00, 0x71, 0x89, 0x00, 0x00, 0x79, 0x89, 0x00, 0x00, 0xD9, 0x89, 0x00, 0x00, 0x2A, -/* 000057E0 */ 0x8A, 0x00, 0x00, 0x86, 0x8A, 0x00, 0x00, 0xC2, 0x8A, 0x00, 0x00, 0x27, 0x8B, 0x00, 0x00, 0x54, -/* 000057F0 */ 0x8B, 0x00, 0x00, 0x82, 0x8B, 0x00, 0x00, 0xB0, 0x8B, 0x00, 0x00, 0xB1, 0x8B, 0x00, 0x00, 0xE6, -/* 00005800 */ 0x8B, 0x00, 0x00, 0x1B, 0x8C, 0x00, 0x00, 0x53, 0x8C, 0x00, 0x00, 0xA5, 0x8C, 0x00, 0x00, 0x01, -/* 00005810 */ 0x8D, 0x00, 0x00, 0x6F, 0x8D, 0x00, 0x00, 0xE1, 0x8D, 0x00, 0x00, 0x16, 0x8E, 0x00, 0x00, 0x4B, -/* 00005820 */ 0x8E, 0x00, 0x00, 0x55, 0x8E, 0x00, 0x00, 0x5C, 0x8E, 0x00, 0x00, 0x5D, 0x8E, 0x00, 0x00, 0x65, -/* 00005830 */ 0x8E, 0x00, 0x00, 0xBC, 0x8E, 0x00, 0x00, 0xF0, 0x8E, 0x00, 0x00, 0xF7, 0x8E, 0x00, 0x00, 0x1D, -/* 00005840 */ 0x8F, 0x00, 0x00, 0x24, 0x8F, 0x00, 0x00, 0x95, 0x8F, 0x00, 0x00, 0xC6, 0x8F, 0x00, 0x00, 0xE5, -/* 00005850 */ 0x8F, 0x00, 0x00, 0xED, 0x8F, 0x00, 0x00, 0x44, 0x90, 0x00, 0x00, 0x72, 0x90, 0x00, 0x00, 0x8B, -/* 00005860 */ 0x90, 0x00, 0x00, 0xFF, 0x90, 0x00, 0x00, 0x37, 0x91, 0x00, 0x00, 0x82, 0x91, 0x00, 0x00, 0xCD, -/* 00005870 */ 0x91, 0x00, 0x00, 0xCE, 0x91, 0x00, 0x00, 0x0A, 0x92, 0x00, 0x00, 0x7A, 0x92, 0x00, 0x00, 0x84, -/* 00005880 */ 0x92, 0x00, 0x00, 0x85, 0x92, 0x00, 0x00, 0xD2, 0x92, 0x00, 0x00, 0x2B, 0x93, 0x00, 0x00, 0x62, -/* 00005890 */ 0x93, 0x00, 0x00, 0x7F, 0x93, 0x00, 0x00, 0xA0, 0x93, 0x00, 0x00, 0xBF, 0x93, 0x00, 0x00, 0xCB, -/* 000058A0 */ 0x93, 0x00, 0x00, 0xCC, 0x93, 0x00, 0x00, 0xED, 0x93, 0x00, 0x00, 0xF4, 0x93, 0x00, 0x00, 0xF5, -/* 000058B0 */ 0x93, 0x00, 0x00, 0x6C, 0x94, 0x00, 0x00, 0xD5, 0x94, 0x00, 0x00, 0x05, 0x95, 0x00, 0x00, 0x52, -/* 000058C0 */ 0x95, 0x00, 0x00, 0xCF, 0x95, 0x00, 0x00, 0x02, 0x96, 0x00, 0x00, 0x3B, 0x96, 0x00, 0x00, 0x45, -/* 000058D0 */ 0x96, 0x00, 0x00, 0x46, 0x96, 0x00, 0x00, 0x80, 0x96, 0x00, 0x00, 0xBB, 0x96, 0x00, 0x00, 0xF4, -/* 000058E0 */ 0x96, 0x00, 0x00, 0xFE, 0x96, 0x00, 0x00, 0xFF, 0x96, 0x00, 0x00, 0x66, 0x97, 0x00, 0x00, 0x6C, -/* 000058F0 */ 0x97, 0x00, 0x00, 0x6D, 0x97, 0x00, 0x00, 0xC6, 0x97, 0x00, 0x00, 0xF9, 0x97, 0x00, 0x00, 0x32, -/* 00005900 */ 0x98, 0x00, 0x00, 0x3C, 0x98, 0x00, 0x00, 0x3D, 0x98, 0x00, 0x00, 0x77, 0x98, 0x00, 0x00, 0xB2, -/* 00005910 */ 0x98, 0x00, 0x00, 0xEB, 0x98, 0x00, 0x00, 0xF5, 0x98, 0x00, 0x00, 0xF6, 0x98, 0x00, 0x00, 0x26, -/* 00005920 */ 0x99, 0x00, 0x00, 0x2C, 0x99, 0x00, 0x00, 0x2D, 0x99, 0x00, 0x00, 0x9E, 0x99, 0x00, 0x00, 0xD5, -/* 00005930 */ 0x99, 0x00, 0x00, 0x2B, 0x9A, 0x00, 0x00, 0xAE, 0x9A, 0x00, 0x00, 0x21, 0x9B, 0x00, 0x00, 0x7A, -/* 00005940 */ 0x9B, 0x00, 0x00, 0xD4, 0x9B, 0x00, 0x00, 0x33, 0x9C, 0x00, 0x00, 0xA9, 0x9C, 0x00, 0x00, 0xC8, -/* 00005950 */ 0x9C, 0x00, 0x00, 0x0D, 0x9D, 0x00, 0x00, 0x77, 0x9D, 0x00, 0x00, 0xD8, 0x9D, 0x00, 0x00, 0xE4, -/* 00005960 */ 0x9D, 0x00, 0x00, 0x43, 0x9E, 0x00, 0x00, 0x7B, 0x9E, 0x00, 0x00, 0xA5, 0x9E, 0x00, 0x00, 0xC2, -/* 00005970 */ 0x9E, 0x00, 0x00, 0xE1, 0x9E, 0x00, 0x00, 0x01, 0x9F, 0x00, 0x00, 0x0D, 0x9F, 0x00, 0x00, 0x45, -/* 00005980 */ 0x9F, 0x00, 0x00, 0x6D, 0x9F, 0x00, 0x00, 0x89, 0x9F, 0x00, 0x00, 0xA8, 0x9F, 0x00, 0x00, 0xC7, -/* 00005990 */ 0x9F, 0x00, 0x00, 0xD3, 0x9F, 0x00, 0x00, 0xD9, 0x9F, 0x00, 0x00, 0xDA, 0x9F, 0x00, 0x00, 0xE2, -/* 000059A0 */ 0x9F, 0x00, 0x00, 0x59, 0xA0, 0x00, 0x00, 0x60, 0xA0, 0x00, 0x00, 0xD9, 0xA0, 0x00, 0x00, 0x55, -/* 000059B0 */ 0xA1, 0x00, 0x00, 0xCD, 0xA1, 0x00, 0x00, 0x2E, 0xA2, 0x00, 0x00, 0x36, 0xA2, 0x00, 0x00, 0x86, -/* 000059C0 */ 0xA2, 0x00, 0x00, 0xAB, 0xA2, 0x00, 0x00, 0xD6, 0xA2, 0x00, 0x00, 0x18, 0xA3, 0x00, 0x00, 0x8B, -/* 000059D0 */ 0xA3, 0x00, 0x00, 0xA3, 0xA3, 0x00, 0x00, 0xB1, 0xA3, 0x00, 0x00, 0xB2, 0xA3, 0x00, 0x00, 0xEF, -/* 000059E0 */ 0xA3, 0x00, 0x00, 0x24, 0xA4, 0x00, 0x00, 0x32, 0xA4, 0x00, 0x00, 0x3E, 0xA4, 0x00, 0x00, 0x3F, -/* 000059F0 */ 0xA4, 0x00, 0x00, 0x85, 0xA4, 0x00, 0x00, 0x8C, 0xA4, 0x00, 0x00, 0x8D, 0xA4, 0x00, 0x00, 0xC2, -/* 00005A00 */ 0xA4, 0x00, 0x00, 0xE6, 0xA4, 0x00, 0x00, 0x22, 0xA5, 0x00, 0x00, 0x36, 0xA5, 0x00, 0x00, 0x40, -/* 00005A10 */ 0xA5, 0x00, 0x00, 0x41, 0xA5, 0x00, 0x00, 0x8C, 0xA5, 0x00, 0x00, 0xD2, 0xA5, 0x00, 0x00, 0x29, -/* 00005A20 */ 0xA6, 0x00, 0x00, 0x2A, 0xA6, 0x00, 0x00, 0x8A, 0xA6, 0x00, 0x00, 0xDC, 0xA6, 0x00, 0x00, 0x3B, -/* 00005A30 */ 0xA7, 0x00, 0x00, 0x3C, 0xA7, 0x00, 0x00, 0x60, 0xA7, 0x00, 0x00, 0xCD, 0xA7, 0x00, 0x00, 0x22, -/* 00005A40 */ 0xA8, 0x00, 0x00, 0x66, 0xA8, 0x00, 0x00, 0xCE, 0xA8, 0x00, 0x00, 0xCF, 0xA8, 0x00, 0x00, 0x43, -/* 00005A50 */ 0xA9, 0x00, 0x00, 0x6B, 0xA9, 0x00, 0x00, 0xAE, 0xA9, 0x00, 0x00, 0xDE, 0xA9, 0x00, 0x00, 0x05, -/* 00005A60 */ 0xAA, 0x00, 0x00, 0x59, 0xAA, 0x00, 0x00, 0x5A, 0xAA, 0x00, 0x00, 0xDC, 0xAA, 0x00, 0x00, 0x36, -/* 00005A70 */ 0xAB, 0x00, 0x00, 0x37, 0xAB, 0x00, 0x00, 0xA6, 0xAB, 0x00, 0x00, 0xA7, 0xAB, 0x00, 0x00, 0xD8, -/* 00005A80 */ 0xAB, 0x00, 0x00, 0xD9, 0xAB, 0x00, 0x00, 0xF6, 0xAB, 0x00, 0x00, 0x01, 0xAC, 0x00, 0x00, 0x02, -/* 00005A90 */ 0xAC, 0x00, 0x00, 0x27, 0xAC, 0x00, 0x00, 0x75, 0xAC, 0x00, 0x00, 0x0E, 0xAD, 0x00, 0x00, 0x45, -/* 00005AA0 */ 0xAD, 0x00, 0x00, 0x9B, 0xAD, 0x00, 0x00, 0xA9, 0xAD, 0x00, 0x00, 0xAA, 0xAD, 0x00, 0x00, 0xD4, -/* 00005AB0 */ 0xAD, 0x00, 0x00, 0xFE, 0xAD, 0x00, 0x00, 0xFF, 0xAD, 0x00, 0x00, 0x77, 0xAE, 0x00, 0x00, 0xD2, -/* 00005AC0 */ 0xAE, 0x00, 0x00, 0xEF, 0xAE, 0x00, 0x00, 0x31, 0xAF, 0x00, 0x00, 0x6E, 0xAF, 0x00, 0x00, 0xA8, -/* 00005AD0 */ 0xAF, 0x00, 0x00, 0xFF, 0xAF, 0x00, 0x00, 0x11, 0xB0, 0x00, 0x00, 0x12, 0xB0, 0x00, 0x00, 0x49, -/* 00005AE0 */ 0xB0, 0x00, 0x00, 0x5E, 0xB0, 0x00, 0x00, 0x88, 0xB0, 0x00, 0x00, 0xCB, 0xB0, 0x00, 0x00, 0xD9, -/* 00005AF0 */ 0xB0, 0x00, 0x00, 0xDA, 0xB0, 0x00, 0x00, 0x50, 0xB1, 0x00, 0x00, 0x88, 0xB1, 0x00, 0x00, 0x89, -/* 00005B00 */ 0xB1, 0x00, 0x00, 0xEB, 0xB1, 0x00, 0x00, 0x10, 0xB2, 0x00, 0x00, 0x24, 0xB2, 0x00, 0x00, 0x2E, -/* 00005B10 */ 0xB2, 0x00, 0x00, 0x2F, 0xB2, 0x00, 0x00, 0x87, 0xB2, 0x00, 0x00, 0xED, 0xB2, 0x00, 0x00, 0x21, -/* 00005B20 */ 0xB3, 0x00, 0x00, 0x9B, 0xB3, 0x00, 0x00, 0xD2, 0xB3, 0x00, 0x00, 0x09, 0xB4, 0x00, 0x00, 0x17, -/* 00005B30 */ 0xB4, 0x00, 0x00, 0x18, 0xB4, 0x00, 0x00, 0x47, 0xB4, 0x00, 0x00, 0x6F, 0xB4, 0x00, 0x00, 0xB0, -/* 00005B40 */ 0xB4, 0x00, 0x00, 0xBE, 0xB4, 0x00, 0x00, 0xBF, 0xB4, 0x00, 0x00, 0xF2, 0xB4, 0x00, 0x00, 0x30, -/* 00005B50 */ 0xB5, 0x00, 0x00, 0x31, 0xB5, 0x00, 0x00, 0x5F, 0xB5, 0x00, 0x00, 0x8A, 0xB5, 0x00, 0x00, 0xC7, -/* 00005B60 */ 0xB5, 0x00, 0x00, 0xD5, 0xB5, 0x00, 0x00, 0xD6, 0xB5, 0x00, 0x00, 0x16, 0xB6, 0x00, 0x00, 0x17, -/* 00005B70 */ 0xB6, 0x00, 0x00, 0x3C, 0xB6, 0x00, 0x00, 0x7A, 0xB6, 0x00, 0x00, 0xAD, 0xB6, 0x00, 0x00, 0xC5, -/* 00005B80 */ 0xB6, 0x00, 0x00, 0xD1, 0xB6, 0x00, 0x00, 0xD2, 0xB6, 0x00, 0x00, 0x38, 0xB7, 0x00, 0x00, 0x64, -/* 00005B90 */ 0xB7, 0x00, 0x00, 0xBE, 0xB7, 0x00, 0x00, 0xCC, 0xB7, 0x00, 0x00, 0xCD, 0xB7, 0x00, 0x00, 0x0E, -/* 00005BA0 */ 0xB8, 0x00, 0x00, 0x61, 0xB8, 0x00, 0x00, 0xBB, 0xB8, 0x00, 0x00, 0xC9, 0xB8, 0x00, 0x00, 0xCA, -/* 00005BB0 */ 0xB8, 0x00, 0x00, 0x46, 0xB9, 0x00, 0x00, 0x52, 0xB9, 0x00, 0x00, 0x53, 0xB9, 0x00, 0x00, 0x87, -/* 00005BC0 */ 0xB9, 0x00, 0x00, 0xDC, 0xB9, 0x00, 0x00, 0x6B, 0xBA, 0x00, 0x00, 0x00, 0xBB, 0x00, 0x00, 0x0C, -/* 00005BD0 */ 0xBB, 0x00, 0x00, 0x7B, 0xBB, 0x00, 0x00, 0xBB, 0xBB, 0x00, 0x00, 0xE4, 0xBB, 0x00, 0x00, 0x01, -/* 00005BE0 */ 0xBC, 0x00, 0x00, 0x20, 0xBC, 0x00, 0x00, 0x40, 0xBC, 0x00, 0x00, 0x4C, 0xBC, 0x00, 0x00, 0x87, -/* 00005BF0 */ 0xBC, 0x00, 0x00, 0xB7, 0xBC, 0x00, 0x00, 0xD3, 0xBC, 0x00, 0x00, 0xF2, 0xBC, 0x00, 0x00, 0x12, -/* 00005C00 */ 0xBD, 0x00, 0x00, 0x1E, 0xBD, 0x00, 0x00, 0x1F, 0xBD, 0x00, 0x00, 0x51, 0xBD, 0x00, 0x00, 0x74, -/* 00005C10 */ 0xBD, 0x00, 0x00, 0x91, 0xBD, 0x00, 0x00, 0xB0, 0xBD, 0x00, 0x00, 0xD0, 0xBD, 0x00, 0x00, 0xDC, -/* 00005C20 */ 0xBD, 0x00, 0x00, 0x18, 0xBE, 0x00, 0x00, 0x19, 0xBE, 0x00, 0x00, 0x57, 0xBE, 0x00, 0x00, 0x74, -/* 00005C30 */ 0xBE, 0x00, 0x00, 0x90, 0xBE, 0x00, 0x00, 0xAF, 0xBE, 0x00, 0x00, 0xCE, 0xBE, 0x00, 0x00, 0xDA, -/* 00005C40 */ 0xBE, 0x00, 0x00, 0x1C, 0xBF, 0x00, 0x00, 0x4C, 0xBF, 0x00, 0x00, 0x7C, 0xBF, 0x00, 0x00, 0xE2, -/* 00005C50 */ 0xBF, 0x00, 0x00, 0xF4, 0xBF, 0x00, 0x00, 0x39, 0xC0, 0x00, 0x00, 0x90, 0xC0, 0x00, 0x00, 0xF6, -/* 00005C60 */ 0xC0, 0x00, 0x00, 0x08, 0xC1, 0x00, 0x00, 0x09, 0xC1, 0x00, 0x00, 0x2B, 0xC1, 0x00, 0x00, 0x49, -/* 00005C70 */ 0xC1, 0x00, 0x00, 0x66, 0xC1, 0x00, 0x00, 0x89, 0xC1, 0x00, 0x00, 0xB2, 0xC1, 0x00, 0x00, 0xD3, -/* 00005C80 */ 0xC1, 0x00, 0x00, 0xF2, 0xC1, 0x00, 0x00, 0x13, 0xC2, 0x00, 0x00, 0x26, 0xC2, 0x00, 0x00, 0x27, -/* 00005C90 */ 0xC2, 0x00, 0x00, 0x6C, 0xC2, 0x00, 0x00, 0x7B, 0xC2, 0x00, 0x00, 0x97, 0xC2, 0x00, 0x00, 0xB6, -/* 00005CA0 */ 0xC2, 0x00, 0x00, 0xD5, 0xC2, 0x00, 0x00, 0xE1, 0xC2, 0x00, 0x00, 0xE2, 0xC2, 0x00, 0x00, 0x5B, -/* 00005CB0 */ 0xC3, 0x00, 0x00, 0x84, 0xC3, 0x00, 0x00, 0xB0, 0xC3, 0x00, 0x00, 0x0A, 0xC4, 0x00, 0x00, 0x18, -/* 00005CC0 */ 0xC4, 0x00, 0x00, 0x19, 0xC4, 0x00, 0x00, 0x5A, 0xC4, 0x00, 0x00, 0xAD, 0xC4, 0x00, 0x00, 0x07, -/* 00005CD0 */ 0xC5, 0x00, 0x00, 0x15, 0xC5, 0x00, 0x00, 0x16, 0xC5, 0x00, 0x00, 0x44, 0xC5, 0x00, 0x00, 0x4F, -/* 00005CE0 */ 0xC5, 0x00, 0x00, 0x7E, 0xC5, 0x00, 0x00, 0xA0, 0xC5, 0x00, 0x00, 0xBD, 0xC5, 0x00, 0x00, 0xDC, -/* 00005CF0 */ 0xC5, 0x00, 0x00, 0xFC, 0xC5, 0x00, 0x00, 0x08, 0xC6, 0x00, 0x00, 0x42, 0xC6, 0x00, 0x00, 0x81, -/* 00005D00 */ 0xC6, 0x00, 0x00, 0xA0, 0xC6, 0x00, 0x00, 0xBF, 0xC6, 0x00, 0x00, 0xCB, 0xC6, 0x00, 0x00, 0xCC, -/* 00005D10 */ 0xC6, 0x00, 0x00, 0xE5, 0xC6, 0x00, 0x00, 0xEF, 0xC6, 0x00, 0x00, 0xF0, 0xC6, 0x00, 0x00, 0x2A, -/* 00005D20 */ 0xC7, 0x00, 0x00, 0x50, 0xC7, 0x00, 0x00, 0x8C, 0xC7, 0x00, 0x00, 0xA0, 0xC7, 0x00, 0x00, 0xAA, -/* 00005D30 */ 0xC7, 0x00, 0x00, 0xAB, 0xC7, 0x00, 0x00, 0xF4, 0xC7, 0x00, 0x00, 0x3A, 0xC8, 0x00, 0x00, 0x91, -/* 00005D40 */ 0xC8, 0x00, 0x00, 0x92, 0xC8, 0x00, 0x00, 0xB6, 0xC8, 0x00, 0x00, 0x29, 0xC9, 0x00, 0x00, 0x2A, -/* 00005D50 */ 0xC9, 0x00, 0x00, 0x8C, 0xC9, 0x00, 0x00, 0xAE, 0xC9, 0x00, 0x00, 0xD5, 0xC9, 0x00, 0x00, 0xD6, -/* 00005D60 */ 0xC9, 0x00, 0x00, 0x46, 0xCA, 0x00, 0x00, 0x64, 0xCA, 0x00, 0x00, 0xB5, 0xCA, 0x00, 0x00, 0xEB, -/* 00005D70 */ 0xCA, 0x00, 0x00, 0xEC, 0xCA, 0x00, 0x00, 0x47, 0xCB, 0x00, 0x00, 0x98, 0xCB, 0x00, 0x00, 0xD5, -/* 00005D80 */ 0xCB, 0x00, 0x00, 0x15, 0xCC, 0x00, 0x00, 0x4A, 0xCC, 0x00, 0x00, 0x58, 0xCC, 0x00, 0x00, 0x59, -/* 00005D90 */ 0xCC, 0x00, 0x00, 0x76, 0xCC, 0x00, 0x00, 0x95, 0xCC, 0x00, 0x00, 0xC9, 0xCC, 0x00, 0x00, 0xF1, -/* 00005DA0 */ 0xCC, 0x00, 0x00, 0x2E, 0xCD, 0x00, 0x00, 0x3C, 0xCD, 0x00, 0x00, 0x3D, 0xCD, 0x00, 0x00, 0xB6, -/* 00005DB0 */ 0xCD, 0x00, 0x00, 0xD5, 0xCD, 0x00, 0x00, 0x0A, 0xCE, 0x00, 0x00, 0x79, 0xCE, 0x00, 0x00, 0x87, -/* 00005DC0 */ 0xCE, 0x00, 0x00, 0x88, 0xCE, 0x00, 0x00, 0xB2, 0xCE, 0x00, 0x00, 0xD1, 0xCE, 0x00, 0x00, 0xF8, -/* 00005DD0 */ 0xCE, 0x00, 0x00, 0x1F, 0xCF, 0x00, 0x00, 0x34, 0xCF, 0x00, 0x00, 0x55, 0xCF, 0x00, 0x00, 0x80, -/* 00005DE0 */ 0xCF, 0x00, 0x00, 0xA5, 0xCF, 0x00, 0x00, 0xBE, 0xCF, 0x00, 0x00, 0xE3, 0xCF, 0x00, 0x00, 0xF5, -/* 00005DF0 */ 0xCF, 0x00, 0x00, 0x03, 0xD0, 0x00, 0x00, 0x04, 0xD0, 0x00, 0x00, 0x54, 0xD0, 0x00, 0x00, 0x55, -/* 00005E00 */ 0xD0, 0x00, 0x00, 0xB1, 0xD0, 0x00, 0x00, 0xB2, 0xD0, 0x00, 0x00, 0xE1, 0xD0, 0x00, 0x00, 0xE2, -/* 00005E10 */ 0xD0, 0x00, 0x00, 0x2E, 0xD1, 0x00, 0x00, 0x5A, 0xD1, 0x00, 0x00, 0x5B, 0xD1, 0x00, 0x00, 0x72, -/* 00005E20 */ 0xD1, 0x00, 0x00, 0x7D, 0xD1, 0x00, 0x00, 0x7E, 0xD1, 0x00, 0x00, 0xEA, 0xD1, 0x00, 0x00, 0x33, -/* 00005E30 */ 0xD2, 0x00, 0x00, 0x90, 0xD2, 0x00, 0x00, 0x9E, 0xD2, 0x00, 0x00, 0x9F, 0xD2, 0x00, 0x00, 0xCB, -/* 00005E40 */ 0xD2, 0x00, 0x00, 0x18, 0xD3, 0x00, 0x00, 0x19, 0xD3, 0x00, 0x00, 0x48, 0xD3, 0x00, 0x00, 0xC4, -/* 00005E50 */ 0xD3, 0x00, 0x00, 0xFD, 0xD3, 0x00, 0x00, 0xFE, 0xD3, 0x00, 0x00, 0x23, 0xD4, 0x00, 0x00, 0x37, -/* 00005E60 */ 0xD4, 0x00, 0x00, 0x41, 0xD4, 0x00, 0x00, 0x42, 0xD4, 0x00, 0x00, 0xC8, 0xD4, 0x00, 0x00, 0xFF, -/* 00005E70 */ 0xD4, 0x00, 0x00, 0x3A, 0xD5, 0x00, 0x00, 0x48, 0xD5, 0x00, 0x00, 0x49, 0xD5, 0x00, 0x00, 0x7A, -/* 00005E80 */ 0xD5, 0x00, 0x00, 0x7B, 0xD5, 0x00, 0x00, 0xA3, 0xD5, 0x00, 0x00, 0xE8, 0xD5, 0x00, 0x00, 0xF6, -/* 00005E90 */ 0xD5, 0x00, 0x00, 0xF7, 0xD5, 0x00, 0x00, 0x2A, 0xD6, 0x00, 0x00, 0x68, 0xD6, 0x00, 0x00, 0x96, -/* 00005EA0 */ 0xD6, 0x00, 0x00, 0xC1, 0xD6, 0x00, 0x00, 0xFE, 0xD6, 0x00, 0x00, 0x0C, 0xD7, 0x00, 0x00, 0x0D, -/* 00005EB0 */ 0xD7, 0x00, 0x00, 0x51, 0xD7, 0x00, 0x00, 0x52, 0xD7, 0x00, 0x00, 0x8D, 0xD7, 0x00, 0x00, 0xBF, -/* 00005EC0 */ 0xD7, 0x00, 0x00, 0xC0, 0xD7, 0x00, 0x00, 0xD8, 0xD7, 0x00, 0x00, 0xE4, 0xD7, 0x00, 0x00, 0xE5, -/* 00005ED0 */ 0xD7, 0x00, 0x00, 0x49, 0xD8, 0x00, 0x00, 0x6F, 0xD8, 0x00, 0x00, 0x70, 0xD8, 0x00, 0x00, 0x9C, -/* 00005EE0 */ 0xD8, 0x00, 0x00, 0xFD, 0xD8, 0x00, 0x00, 0x0B, 0xD9, 0x00, 0x00, 0x0C, 0xD9, 0x00, 0x00, 0x4D, -/* 00005EF0 */ 0xD9, 0x00, 0x00, 0xA4, 0xD9, 0x00, 0x00, 0x05, 0xDA, 0x00, 0x00, 0x13, 0xDA, 0x00, 0x00, 0x14, -/* 00005F00 */ 0xDA, 0x00, 0x00, 0x92, 0xDA, 0x00, 0x00, 0x9E, 0xDA, 0x00, 0x00, 0x9F, 0xDA, 0x00, 0x00, 0x18, -/* 00005F10 */ 0xDB, 0x00, 0x00, 0x3E, 0xDB, 0x00, 0x00, 0x3F, 0xDB, 0x00, 0x00, 0x6B, 0xDB, 0x00, 0x00, 0xD3, -/* 00005F20 */ 0xDB, 0x00, 0x00, 0xE1, 0xDB, 0x00, 0x00, 0xE2, 0xDB, 0x00, 0x00, 0x23, 0xDC, 0x00, 0x00, 0x7A, -/* 00005F30 */ 0xDC, 0x00, 0x00, 0xE2, 0xDC, 0x00, 0x00, 0xF0, 0xDC, 0x00, 0x00, 0xF1, 0xDC, 0x00, 0x00, 0x6E, -/* 00005F40 */ 0xDD, 0x00, 0x00, 0x7A, 0xDD, 0x00, 0x00, 0x7B, 0xDD, 0x00, 0x00, 0xAF, 0xDD, 0x00, 0x00, 0x0C, -/* 00005F50 */ 0xDE, 0x00, 0x00, 0xA3, 0xDE, 0x00, 0x00, 0x36, 0xDF, 0x00, 0x00, 0x42, 0xDF, 0x00, 0x00, 0xB9, -/* 00005F60 */ 0xDF, 0x00, 0x00, 0xFD, 0xDF, 0x00, 0x00, 0x26, 0xE0, 0x00, 0x00, 0x43, 0xE0, 0x00, 0x00, 0x62, -/* 00005F70 */ 0xE0, 0x00, 0x00, 0x82, 0xE0, 0x00, 0x00, 0x8E, 0xE0, 0x00, 0x00, 0xCD, 0xE0, 0x00, 0x00, 0x01, -/* 00005F80 */ 0xE1, 0x00, 0x00, 0x1D, 0xE1, 0x00, 0x00, 0x3C, 0xE1, 0x00, 0x00, 0x5C, 0xE1, 0x00, 0x00, 0x68, -/* 00005F90 */ 0xE1, 0x00, 0x00, 0x69, 0xE1, 0x00, 0x00, 0x9F, 0xE1, 0x00, 0x00, 0xC6, 0xE1, 0x00, 0x00, 0xE3, -/* 00005FA0 */ 0xE1, 0x00, 0x00, 0x02, 0xE2, 0x00, 0x00, 0x23, 0xE2, 0x00, 0x00, 0x2F, 0xE2, 0x00, 0x00, 0x6F, -/* 00005FB0 */ 0xE2, 0x00, 0x00, 0xB1, 0xE2, 0x00, 0x00, 0xD2, 0xE2, 0x00, 0x00, 0xEE, 0xE2, 0x00, 0x00, 0x0D, -/* 00005FC0 */ 0xE3, 0x00, 0x00, 0x2D, 0xE3, 0x00, 0x00, 0x39, 0xE3, 0x00, 0x00, 0x3A, 0xE3, 0x00, 0x00, 0x80, -/* 00005FD0 */ 0xE3, 0x00, 0x00, 0xB0, 0xE3, 0x00, 0x00, 0xE0, 0xE3, 0x00, 0x00, 0x4E, 0xE4, 0x00, 0x00, 0x60, -/* 00005FE0 */ 0xE4, 0x00, 0x00, 0xA5, 0xE4, 0x00, 0x00, 0x00, 0xE5, 0x00, 0x00, 0x6E, 0xE5, 0x00, 0x00, 0x80, -/* 00005FF0 */ 0xE5, 0x00, 0x00, 0x81, 0xE5, 0x00, 0x00, 0xFF, 0xE5, 0x00, 0x00, 0x7D, 0xE6, 0x00, 0x00, 0xA1, -/* 00006000 */ 0xE6, 0x00, 0x00, 0xA2, 0xE6, 0x00, 0x00, 0xE7, 0xE6, 0x00, 0x00, 0xF6, 0xE6, 0x00, 0x00, 0x12, -/* 00006010 */ 0xE7, 0x00, 0x00, 0x31, 0xE7, 0x00, 0x00, 0x51, 0xE7, 0x00, 0x00, 0x5D, 0xE7, 0x00, 0x00, 0x5E, -/* 00006020 */ 0xE7, 0x00, 0x00, 0xDA, 0xE7, 0x00, 0x00, 0x02, 0xE8, 0x00, 0x00, 0x2E, 0xE8, 0x00, 0x00, 0x8F, -/* 00006030 */ 0xE8, 0x00, 0x00, 0x9D, 0xE8, 0x00, 0x00, 0x9E, 0xE8, 0x00, 0x00, 0xDF, 0xE8, 0x00, 0x00, 0x36, -/* 00006040 */ 0xE9, 0x00, 0x00, 0x97, 0xE9, 0x00, 0x00, 0xA5, 0xE9, 0x00, 0x00, 0xA6, 0xE9, 0x00, 0x00, 0xD3, -/* 00006050 */ 0xE9, 0x00, 0x00, 0xDE, 0xE9, 0x00, 0x00, 0x0C, 0xEA, 0x00, 0x00, 0x2D, 0xEA, 0x00, 0x00, 0x4A, -/* 00006060 */ 0xEA, 0x00, 0x00, 0x69, 0xEA, 0x00, 0x00, 0x89, 0xEA, 0x00, 0x00, 0x95, 0xEA, 0x00, 0x00, 0xD2, -/* 00006070 */ 0xEA, 0x00, 0x00, 0x0F, 0xEB, 0x00, 0x00, 0x2E, 0xEB, 0x00, 0x00, 0x4E, 0xEB, 0x00, 0x00, 0x5A, -/* 00006080 */ 0xEB, 0x00, 0x00, 0x5B, 0xEB, 0x00, 0x00, 0x9F, 0xEB, 0x00, 0x00, 0xC1, 0xEB, 0x00, 0x00, 0xE0, -/* 00006090 */ 0xEB, 0x00, 0x00, 0x00, 0xEC, 0x00, 0x00, 0x1C, 0xEC, 0x00, 0x00, 0x28, 0xEC, 0x00, 0x00, 0x29, -/* 000060A0 */ 0xEC, 0x00, 0x00, 0x46, 0xEC, 0x00, 0x00, 0x50, 0xEC, 0x00, 0x00, 0x51, 0xEC, 0x00, 0x00, 0xD1, -/* 000060B0 */ 0xEC, 0x00, 0x00, 0xF9, 0xEC, 0x00, 0x00, 0x33, 0xED, 0x00, 0x00, 0x47, 0xED, 0x00, 0x00, 0x51, -/* 000060C0 */ 0xED, 0x00, 0x00, 0x52, 0xED, 0x00, 0x00, 0x8F, 0xED, 0x00, 0x00, 0xC7, 0xED, 0x00, 0x00, 0x13, -/* 000060D0 */ 0xEE, 0x00, 0x00, 0x38, 0xEE, 0x00, 0x00, 0x62, 0xEE, 0x00, 0x00, 0x88, 0xEE, 0x00, 0x00, 0xAF, -/* 000060E0 */ 0xEE, 0x00, 0x00, 0x01, 0xEF, 0x00, 0x00, 0x27, 0xEF, 0x00, 0x00, 0x4E, 0xEF, 0x00, 0x00, 0x77, -/* 000060F0 */ 0xEF, 0x00, 0x00, 0xA0, 0xEF, 0x00, 0x00, 0x09, 0xF0, 0x00, 0x00, 0x14, 0xF0, 0x00, 0x00, 0x15, -/* 00006100 */ 0xF0, 0x00, 0x00, 0x21, 0xF0, 0x00, 0x00, 0x8D, 0xF0, 0x00, 0x00, 0x0A, 0xF1, 0x00, 0x00, 0x15, -/* 00006110 */ 0xF1, 0x00, 0x00, 0x57, 0xF1, 0x00, 0x00, 0xAA, 0xF1, 0x00, 0x00, 0xB6, 0xF1, 0x00, 0x00, 0xEA, -/* 00006120 */ 0xF1, 0x00, 0x00, 0x69, 0xF2, 0x00, 0x00, 0x8F, 0xF2, 0x00, 0x00, 0xAD, 0xF2, 0x00, 0x00, 0xC7, -/* 00006130 */ 0xF2, 0x00, 0x00, 0xE2, 0xF2, 0x00, 0x00, 0xFE, 0xF2, 0x00, 0x00, 0x18, 0xF3, 0x00, 0x00, 0x53, -/* 00006140 */ 0xF3, 0x00, 0x00, 0x88, 0xF3, 0x00, 0x00, 0xA5, 0xF3, 0x00, 0x00, 0xC2, 0xF3, 0x00, 0x00, 0xE5, -/* 00006150 */ 0xF3, 0x00, 0x00, 0xF4, 0xF3, 0x00, 0x00, 0x79, 0xF4, 0x00, 0x00, 0x9F, 0xF4, 0x00, 0x00, 0xD9, -/* 00006160 */ 0xF4, 0x00, 0x00, 0xF3, 0xF4, 0x00, 0x00, 0x24, 0xF5, 0x00, 0x00, 0x4C, 0xF5, 0x00, 0x00, 0x66, -/* 00006170 */ 0xF5, 0x00, 0x00, 0xA2, 0xF5, 0x00, 0x00, 0xBF, 0xF5, 0x00, 0x00, 0xDC, 0xF5, 0x00, 0x00, 0x71, -/* 00006180 */ 0xF6, 0x00, 0x00, 0x80, 0xF6, 0x00, 0x00, 0x81, 0xF6, 0x00, 0x00, 0xE6, 0xF6, 0x00, 0x00, 0x55, -/* 00006190 */ 0xF7, 0x00, 0x00, 0x81, 0xF7, 0x00, 0x00, 0x9D, 0xF7, 0x00, 0x00, 0xBB, 0xF7, 0x00, 0x00, 0xD5, -/* 000061A0 */ 0xF7, 0x00, 0x00, 0xEE, 0xF7, 0x00, 0x00, 0x09, 0xF8, 0x00, 0x00, 0x18, 0xF8, 0x00, 0x00, 0x44, -/* 000061B0 */ 0xF8, 0x00, 0x00, 0x62, 0xF8, 0x00, 0x00, 0x80, 0xF8, 0x00, 0x00, 0x9C, 0xF8, 0x00, 0x00, 0xB7, -/* 000061C0 */ 0xF8, 0x00, 0x00, 0xD4, 0xF8, 0x00, 0x00, 0xE3, 0xF8, 0x00, 0x00, 0xE4, 0xF8, 0x00, 0x00, 0x18, -/* 000061D0 */ 0xF9, 0x00, 0x00, 0x42, 0xF9, 0x00, 0x00, 0x5C, 0xF9, 0x00, 0x00, 0x76, 0xF9, 0x00, 0x00, 0x90, -/* 000061E0 */ 0xF9, 0x00, 0x00, 0xAA, 0xF9, 0x00, 0x00, 0xB9, 0xF9, 0x00, 0x00, 0xE3, 0xF9, 0x00, 0x00, 0xFD, -/* 000061F0 */ 0xF9, 0x00, 0x00, 0x17, 0xFA, 0x00, 0x00, 0x31, 0xFA, 0x00, 0x00, 0x4B, 0xFA, 0x00, 0x00, 0x5A, -/* 00006200 */ 0xFA, 0x00, 0x00, 0x5B, 0xFA, 0x00, 0x00, 0x88, 0xFA, 0x00, 0x00, 0xEE, 0xFA, 0x00, 0x00, 0x1D, -/* 00006210 */ 0xFB, 0x00, 0x00, 0x7C, 0xFB, 0x00, 0x00, 0xAB, 0xFB, 0x00, 0x00, 0xDB, 0xFB, 0x00, 0x00, 0xF1, -/* 00006220 */ 0xFB, 0x00, 0x00, 0xF2, 0xFB, 0x00, 0x00, 0x17, 0xFC, 0x00, 0x00, 0x37, 0xFC, 0x00, 0x00, 0x38, -/* 00006230 */ 0xFC, 0x00, 0x00, 0xAB, 0xFC, 0x00, 0x00, 0xFC, 0xFC, 0x00, 0x00, 0x5A, 0xFD, 0x00, 0x00, 0x84, -/* 00006240 */ 0xFD, 0x00, 0x00, 0x85, 0xFD, 0x00, 0x00, 0x10, 0xFE, 0x00, 0x00, 0x74, 0xFE, 0x00, 0x00, 0xB6, -/* 00006250 */ 0xFE, 0x00, 0x00, 0xE6, 0xFE, 0x00, 0x00, 0x3E, 0xFF, 0x00, 0x00, 0xAA, 0xFF, 0x00, 0x00, 0x07, -/* 00006260 */ 0x00, 0x01, 0x00, 0x7E, 0x00, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x57, 0x01, 0x01, 0x00, 0xC2, -/* 00006270 */ 0x01, 0x01, 0x00, 0xF4, 0x01, 0x01, 0x00, 0x67, 0x02, 0x01, 0x00, 0x99, 0x02, 0x01, 0x00, 0xB3, -/* 00006280 */ 0x02, 0x01, 0x00, 0xC9, 0x02, 0x01, 0x00, 0xCA, 0x02, 0x01, 0x00, 0x3A, 0x03, 0x01, 0x00, 0x52, -/* 00006290 */ 0x03, 0x01, 0x00, 0x53, 0x03, 0x01, 0x00, 0xA7, 0x03, 0x01, 0x00, 0xA8, 0x03, 0x01, 0x00, 0x3D, -/* 000062A0 */ 0x04, 0x01, 0x00, 0xCC, 0x04, 0x01, 0x00, 0x61, 0x05, 0x01, 0x00, 0x88, 0x05, 0x01, 0x00, 0xA3, -/* 000062B0 */ 0x05, 0x01, 0x00, 0xD0, 0x05, 0x01, 0x00, 0xFA, 0x05, 0x01, 0x00, 0x2B, 0x06, 0x01, 0x00, 0x50, -/* 000062C0 */ 0x06, 0x01, 0x00, 0x77, 0x06, 0x01, 0x00, 0xA6, 0x06, 0x01, 0x00, 0xC0, 0x06, 0x01, 0x00, 0xDD, -/* 000062D0 */ 0x06, 0x01, 0x00, 0xFF, 0x06, 0x01, 0x00, 0x29, 0x07, 0x01, 0x00, 0x53, 0x07, 0x01, 0x00, 0x70, -/* 000062E0 */ 0x07, 0x01, 0x00, 0x92, 0x07, 0x01, 0x00, 0xC0, 0x07, 0x01, 0x00, 0xDD, 0x07, 0x01, 0x00, 0xFF, -/* 000062F0 */ 0x07, 0x01, 0x00, 0x15, 0x08, 0x01, 0x00, 0x16, 0x08, 0x01, 0x00, 0x7C, 0x08, 0x01, 0x00, 0xE3, -/* 00006300 */ 0x08, 0x01, 0x00, 0x37, 0x09, 0x01, 0x00, 0x71, 0x09, 0x01, 0x00, 0xE0, 0x09, 0x01, 0x00, 0x52, -/* 00006310 */ 0x0A, 0x01, 0x00, 0xA9, 0x0A, 0x01, 0x00, 0xF2, 0x0A, 0x01, 0x00, 0x29, 0x0B, 0x01, 0x00, 0x67, -/* 00006320 */ 0x0B, 0x01, 0x00, 0x9B, 0x0B, 0x01, 0x00, 0x1F, 0x0C, 0x01, 0x00, 0x48, 0x0C, 0x01, 0x00, 0x7C, -/* 00006330 */ 0x0C, 0x01, 0x00, 0xF2, 0x0C, 0x01, 0x00, 0x14, 0x0D, 0x01, 0x00, 0x15, 0x0D, 0x01, 0x00, 0x6D, -/* 00006340 */ 0x0D, 0x01, 0x00, 0x9F, 0x0D, 0x01, 0x00, 0xBD, 0x0D, 0x01, 0x00, 0xDE, 0x0D, 0x01, 0x00, 0x4C, -/* 00006350 */ 0x0E, 0x01, 0x00, 0xA9, 0x0E, 0x01, 0x00, 0xEF, 0x0E, 0x01, 0x00, 0x09, 0x0F, 0x01, 0x00, 0x1F, -/* 00006360 */ 0x0F, 0x01, 0x00, 0x20, 0x0F, 0x01, 0x00, 0x43, 0x0F, 0x01, 0x00, 0x8A, 0x0F, 0x01, 0x00, 0xA7, -/* 00006370 */ 0x0F, 0x01, 0x00, 0xBD, 0x0F, 0x01, 0x00, 0xBE, 0x0F, 0x01, 0x00, 0xFC, 0x0F, 0x01, 0x00, 0x44, -/* 00006380 */ 0x10, 0x01, 0x00, 0x7A, 0x10, 0x01, 0x00, 0x95, 0x10, 0x01, 0x00, 0xA7, 0x10, 0x01, 0x00, 0xA8, -/* 00006390 */ 0x10, 0x01, 0x00, 0xCF, 0x10, 0x01, 0x00, 0xDE, 0x10, 0x01, 0x00, 0xEC, 0x10, 0x01, 0x00, 0xED, -/* 000063A0 */ 0x10, 0x01, 0x00, 0xF9, 0x10, 0x01, 0x00, 0x50, 0x11, 0x01, 0x00, 0x5B, 0x11, 0x01, 0x00, 0x8E, -/* 000063B0 */ 0x11, 0x01, 0x00, 0x99, 0x11, 0x01, 0x00, 0x13, 0x12, 0x01, 0x00, 0x5F, 0x12, 0x01, 0x00, 0xA1, -/* 000063C0 */ 0x12, 0x01, 0x00, 0xAD, 0x12, 0x01, 0x00, 0x04, 0x13, 0x01, 0x00, 0x4A, 0x13, 0x01, 0x00, 0x8B, -/* 000063D0 */ 0x13, 0x01, 0x00, 0x8C, 0x13, 0x01, 0x00, 0xB0, 0x13, 0x01, 0x00, 0x23, 0x14, 0x01, 0x00, 0x81, -/* 000063E0 */ 0x14, 0x01, 0x00, 0xEA, 0x14, 0x01, 0x00, 0xEB, 0x14, 0x01, 0x00, 0x5A, 0x15, 0x01, 0x00, 0x88, -/* 000063F0 */ 0x15, 0x01, 0x00, 0xB4, 0x15, 0x01, 0x00, 0xE1, 0x15, 0x01, 0x00, 0x14, 0x16, 0x01, 0x00, 0x15, -/* 00006400 */ 0x16, 0x01, 0x00, 0x4C, 0x16, 0x01, 0x00, 0x73, 0x16, 0x01, 0x00, 0x97, 0x16, 0x01, 0x00, 0xCB, -/* 00006410 */ 0x16, 0x01, 0x00, 0xE0, 0x16, 0x01, 0x00, 0x0C, 0x17, 0x01, 0x00, 0x1A, 0x17, 0x01, 0x00, 0x1B, -/* 00006420 */ 0x17, 0x01, 0x00, 0x90, 0x17, 0x01, 0x00, 0xD3, 0x17, 0x01, 0x00, 0x21, 0x18, 0x01, 0x00, 0x6F, -/* 00006430 */ 0x18, 0x01, 0x00, 0xCB, 0x18, 0x01, 0x00, 0x1C, 0x19, 0x01, 0x00, 0x38, 0x19, 0x01, 0x00, 0x4D, -/* 00006440 */ 0x19, 0x01, 0x00, 0x6F, 0x19, 0x01, 0x00, 0x7D, 0x19, 0x01, 0x00, 0x7E, 0x19, 0x01, 0x00, 0xA8, -/* 00006450 */ 0x19, 0x01, 0x00, 0xA9, 0x19, 0x01, 0x00, 0xE2, 0x19, 0x01, 0x00, 0x40, 0x1A, 0x01, 0x00, 0x41, -/* 00006460 */ 0x1A, 0x01, 0x00, 0xB5, 0x1A, 0x01, 0x00, 0xF0, 0x1A, 0x01, 0x00, 0x2D, 0x1B, 0x01, 0x00, 0x2E, -/* 00006470 */ 0x1B, 0x01, 0x00, 0x51, 0x1B, 0x01, 0x00, 0x5C, 0x1B, 0x01, 0x00, 0x5D, 0x1B, 0x01, 0x00, 0x69, -/* 00006480 */ 0x1B, 0x01, 0x00, 0xB1, 0x1B, 0x01, 0x00, 0xBC, 0x1B, 0x01, 0x00, 0xE8, 0x1B, 0x01, 0x00, 0xF3, -/* 00006490 */ 0x1B, 0x01, 0x00, 0x74, 0x1C, 0x01, 0x00, 0xEE, 0x1C, 0x01, 0x00, 0x69, 0x1D, 0x01, 0x00, 0x9E, -/* 000064A0 */ 0x1D, 0x01, 0x00, 0xAA, 0x1D, 0x01, 0x00, 0xF5, 0x1D, 0x01, 0x00, 0x46, 0x1E, 0x01, 0x00, 0x6F, -/* 000064B0 */ 0x1E, 0x01, 0x00, 0x94, 0x1E, 0x01, 0x00, 0xD1, 0x1E, 0x01, 0x00, 0x22, 0x1F, 0x01, 0x00, 0x53, -/* 000064C0 */ 0x1F, 0x01, 0x00, 0x82, 0x1F, 0x01, 0x00, 0xB0, 0x1F, 0x01, 0x00, 0xC6, 0x1F, 0x01, 0x00, 0xDA, -/* 000064D0 */ 0x1F, 0x01, 0x00, 0xE8, 0x1F, 0x01, 0x00, 0xE9, 0x1F, 0x01, 0x00, 0x26, 0x20, 0x01, 0x00, 0x70, -/* 000064E0 */ 0x20, 0x01, 0x00, 0xA1, 0x20, 0x01, 0x00, 0xD0, 0x20, 0x01, 0x00, 0xFE, 0x20, 0x01, 0x00, 0x14, -/* 000064F0 */ 0x21, 0x01, 0x00, 0x28, 0x21, 0x01, 0x00, 0x36, 0x21, 0x01, 0x00, 0x37, 0x21, 0x01, 0x00, 0x8F, -/* 00006500 */ 0x21, 0x01, 0x00, 0xD5, 0x21, 0x01, 0x00, 0x0B, 0x22, 0x01, 0x00, 0x35, 0x22, 0x01, 0x00, 0x5D, -/* 00006510 */ 0x22, 0x01, 0x00, 0x87, 0x22, 0x01, 0x00, 0xB3, 0x22, 0x01, 0x00, 0xCB, 0x22, 0x01, 0x00, 0xDE, -/* 00006520 */ 0x22, 0x01, 0x00, 0xEC, 0x22, 0x01, 0x00, 0xED, 0x22, 0x01, 0x00, 0x45, 0x23, 0x01, 0x00, 0x8F, -/* 00006530 */ 0x23, 0x01, 0x00, 0xC5, 0x23, 0x01, 0x00, 0xEF, 0x23, 0x01, 0x00, 0x17, 0x24, 0x01, 0x00, 0x41, -/* 00006540 */ 0x24, 0x01, 0x00, 0x6D, 0x24, 0x01, 0x00, 0x85, 0x24, 0x01, 0x00, 0x98, 0x24, 0x01, 0x00, 0xA6, -/* 00006550 */ 0x24, 0x01, 0x00, 0xA7, 0x24, 0x01, 0x00, 0xC3, 0x24, 0x01, 0x00, 0xCE, 0x24, 0x01, 0x00, 0xCF, -/* 00006560 */ 0x24, 0x01, 0x00, 0x02, 0x25, 0x01, 0x00, 0x32, 0x25, 0x01, 0x00, 0x5F, 0x25, 0x01, 0x00, 0x6D, -/* 00006570 */ 0x25, 0x01, 0x00, 0x6E, 0x25, 0x01, 0x00, 0xE3, 0x25, 0x01, 0x00, 0xEE, 0x25, 0x01, 0x00, 0xEF, -/* 00006580 */ 0x25, 0x01, 0x00, 0x29, 0x26, 0x01, 0x00, 0x59, 0x26, 0x01, 0x00, 0x86, 0x26, 0x01, 0x00, 0x94, -/* 00006590 */ 0x26, 0x01, 0x00, 0x95, 0x26, 0x01, 0x00, 0x09, 0x27, 0x01, 0x00, 0x14, 0x27, 0x01, 0x00, 0x15, -/* 000065A0 */ 0x27, 0x01, 0x00, 0x67, 0x27, 0x01, 0x00, 0xC3, 0x27, 0x01, 0x00, 0x07, 0x28, 0x01, 0x00, 0x26, -/* 000065B0 */ 0x28, 0x01, 0x00, 0x49, 0x28, 0x01, 0x00, 0x6B, 0x28, 0x01, 0x00, 0x77, 0x28, 0x01, 0x00, 0x78, -/* 000065C0 */ 0x28, 0x01, 0x00, 0xE9, 0x28, 0x01, 0x00, 0x30, 0x29, 0x01, 0x00, 0x6E, 0x29, 0x01, 0x00, 0x7C, -/* 000065D0 */ 0x29, 0x01, 0x00, 0xB1, 0x29, 0x01, 0x00, 0xE9, 0x29, 0x01, 0x00, 0x10, 0x2A, 0x01, 0x00, 0x1E, -/* 000065E0 */ 0x2A, 0x01, 0x00, 0x1F, 0x2A, 0x01, 0x00, 0x48, 0x2A, 0x01, 0x00, 0xA0, 0x2A, 0x01, 0x00, 0x0A, -/* 000065F0 */ 0x2B, 0x01, 0x00, 0x55, 0x2B, 0x01, 0x00, 0x82, 0x2B, 0x01, 0x00, 0xD9, 0x2B, 0x01, 0x00, 0xF2, -/* 00006600 */ 0x2B, 0x01, 0x00, 0x18, 0x2C, 0x01, 0x00, 0x46, 0x2C, 0x01, 0x00, 0xBC, 0x2C, 0x01, 0x00, 0x13, -/* 00006610 */ 0x2D, 0x01, 0x00, 0x25, 0x2D, 0x01, 0x00, 0x33, 0x2D, 0x01, 0x00, 0x34, 0x2D, 0x01, 0x00, 0x54, -/* 00006620 */ 0x2D, 0x01, 0x00, 0x7E, 0x2D, 0x01, 0x00, 0xEC, 0x2D, 0x01, 0x00, 0xFA, 0x2D, 0x01, 0x00, 0xFB, -/* 00006630 */ 0x2D, 0x01, 0x00, 0x8D, 0x2E, 0x01, 0x00, 0x97, 0x2E, 0x01, 0x00, 0x98, 0x2E, 0x01, 0x00, 0x11, -/* 00006640 */ 0x2F, 0x01, 0x00, 0x99, 0x2F, 0x01, 0x00, 0x14, 0x30, 0x01, 0x00, 0x99, 0x30, 0x01, 0x00, 0xBA, -/* 00006650 */ 0x30, 0x01, 0x00, 0xC5, 0x30, 0x01, 0x00, 0x4C, 0x31, 0x01, 0x00, 0xCE, 0x31, 0x01, 0x00, 0x54, -/* 00006660 */ 0x32, 0x01, 0x00, 0xA4, 0x32, 0x01, 0x00, 0xAF, 0x32, 0x01, 0x00, 0x2D, 0x33, 0x01, 0x00, 0x9A, -/* 00006670 */ 0x33, 0x01, 0x00, 0xF1, 0x33, 0x01, 0x00, 0x58, 0x34, 0x01, 0x00, 0xCE, 0x34, 0x01, 0x00, 0x1B, -/* 00006680 */ 0x35, 0x01, 0x00, 0x26, 0x35, 0x01, 0x00, 0x98, 0x35, 0x01, 0x00, 0xA3, 0x35, 0x01, 0x00, 0x2B, -/* 00006690 */ 0x36, 0x01, 0x00, 0xB0, 0x36, 0x01, 0x00, 0xF7, 0x36, 0x01, 0x00, 0xF8, 0x36, 0x01, 0x00, 0x44, -/* 000066A0 */ 0x37, 0x01, 0x00, 0xDD, 0x37, 0x01, 0x00, 0x5E, 0x38, 0x01, 0x00, 0x83, 0x38, 0x01, 0x00, 0x25, -/* 000066B0 */ 0x39, 0x01, 0x00, 0x26, 0x39, 0x01, 0x00, 0x72, 0x39, 0x01, 0x00, 0x0F, 0x3A, 0x01, 0x00, 0x90, -/* 000066C0 */ 0x3A, 0x01, 0x00, 0xB5, 0x3A, 0x01, 0x00, 0x65, 0x3B, 0x01, 0x00, 0x66, 0x3B, 0x01, 0x00, 0xB2, -/* 000066D0 */ 0x3B, 0x01, 0x00, 0x4F, 0x3C, 0x01, 0x00, 0xD0, 0x3C, 0x01, 0x00, 0xF5, 0x3C, 0x01, 0x00, 0xA5, -/* 000066E0 */ 0x3D, 0x01, 0x00, 0xA6, 0x3D, 0x01, 0x00, 0x01, 0x3E, 0x01, 0x00, 0x24, 0x3E, 0x01, 0x00, 0x38, -/* 000066F0 */ 0x3E, 0x01, 0x00, 0x42, 0x3E, 0x01, 0x00, 0x43, 0x3E, 0x01, 0x00, 0x4F, 0x3E, 0x01, 0x00, 0x7E, -/* 00006700 */ 0x3E, 0x01, 0x00, 0x89, 0x3E, 0x01, 0x00, 0xB7, 0x3E, 0x01, 0x00, 0xC2, 0x3E, 0x01, 0x00, 0xEE, -/* 00006710 */ 0x3E, 0x01, 0x00, 0x11, 0x3F, 0x01, 0x00, 0x1D, 0x3F, 0x01, 0x00, 0x69, 0x3F, 0x01, 0x00, 0xA0, -/* 00006720 */ 0x3F, 0x01, 0x00, 0xDD, 0x3F, 0x01, 0x00, 0xEB, 0x3F, 0x01, 0x00, 0xEC, 0x3F, 0x01, 0x00, 0x1D, -/* 00006730 */ 0x40, 0x01, 0x00, 0x45, 0x40, 0x01, 0x00, 0x8C, 0x40, 0x01, 0x00, 0x9A, 0x40, 0x01, 0x00, 0x9B, -/* 00006740 */ 0x40, 0x01, 0x00, 0xCE, 0x40, 0x01, 0x00, 0x0C, 0x41, 0x01, 0x00, 0x0D, 0x41, 0x01, 0x00, 0x3B, -/* 00006750 */ 0x41, 0x01, 0x00, 0x66, 0x41, 0x01, 0x00, 0xA3, 0x41, 0x01, 0x00, 0xB1, 0x41, 0x01, 0x00, 0xB2, -/* 00006760 */ 0x41, 0x01, 0x00, 0xF8, 0x41, 0x01, 0x00, 0xF9, 0x41, 0x01, 0x00, 0x47, 0x42, 0x01, 0x00, 0x83, -/* 00006770 */ 0x42, 0x01, 0x00, 0xB5, 0x42, 0x01, 0x00, 0xB6, 0x42, 0x01, 0x00, 0xCE, 0x42, 0x01, 0x00, 0xD8, -/* 00006780 */ 0x42, 0x01, 0x00, 0x1A, 0x43, 0x01, 0x00, 0x1B, 0x43, 0x01, 0x00, 0x27, 0x43, 0x01, 0x00, 0x86, -/* 00006790 */ 0x43, 0x01, 0x00, 0x91, 0x43, 0x01, 0x00, 0xC8, 0x43, 0x01, 0x00, 0xD3, 0x43, 0x01, 0x00, 0x2D, -/* 000067A0 */ 0x44, 0x01, 0x00, 0x91, 0x44, 0x01, 0x00, 0xD1, 0x44, 0x01, 0x00, 0xDD, 0x44, 0x01, 0x00, 0x11, -/* 000067B0 */ 0x45, 0x01, 0x00, 0x3C, 0x45, 0x01, 0x00, 0xA7, 0x45, 0x01, 0x00, 0xB5, 0x45, 0x01, 0x00, 0xF3, -/* 000067C0 */ 0x45, 0x01, 0x00, 0x4C, 0x46, 0x01, 0x00, 0xB7, 0x46, 0x01, 0x00, 0xC5, 0x46, 0x01, 0x00, 0xC6, -/* 000067D0 */ 0x46, 0x01, 0x00, 0xE7, 0x46, 0x01, 0x00, 0xF2, 0x46, 0x01, 0x00, 0xF3, 0x46, 0x01, 0x00, 0xFF, -/* 000067E0 */ 0x46, 0x01, 0x00, 0x53, 0x47, 0x01, 0x00, 0x5E, 0x47, 0x01, 0x00, 0xAB, 0x47, 0x01, 0x00, 0xB6, -/* 000067F0 */ 0x47, 0x01, 0x00, 0x10, 0x48, 0x01, 0x00, 0x49, 0x48, 0x01, 0x00, 0xAD, 0x48, 0x01, 0x00, 0xB9, -/* 00006800 */ 0x48, 0x01, 0x00, 0xF3, 0x48, 0x01, 0x00, 0x2D, 0x49, 0x01, 0x00, 0x2E, 0x49, 0x01, 0x00, 0x41, -/* 00006810 */ 0x49, 0x01, 0x00, 0x67, 0x49, 0x01, 0x00, 0xA5, 0x49, 0x01, 0x00, 0xBA, 0x49, 0x01, 0x00, 0xE7, -/* 00006820 */ 0x49, 0x01, 0x00, 0xF5, 0x49, 0x01, 0x00, 0xF6, 0x49, 0x01, 0x00, 0x33, 0x4A, 0x01, 0x00, 0x59, -/* 00006830 */ 0x4A, 0x01, 0x00, 0x64, 0x4A, 0x01, 0x00, 0x65, 0x4A, 0x01, 0x00, 0x8E, 0x4A, 0x01, 0x00, 0xE9, -/* 00006840 */ 0x4A, 0x01, 0x00, 0xF4, 0x4A, 0x01, 0x00, 0x3F, 0x4B, 0x01, 0x00, 0x40, 0x4B, 0x01, 0x00, 0x70, -/* 00006850 */ 0x4B, 0x01, 0x00, 0xD9, 0x4B, 0x01, 0x00, 0xE4, 0x4B, 0x01, 0x00, 0x3D, 0x4C, 0x01, 0x00, 0x3E, -/* 00006860 */ 0x4C, 0x01, 0x00, 0x76, 0x4C, 0x01, 0x00, 0x9F, 0x4C, 0x01, 0x00, 0xBC, 0x4C, 0x01, 0x00, 0xDB, -/* 00006870 */ 0x4C, 0x01, 0x00, 0xFB, 0x4C, 0x01, 0x00, 0x07, 0x4D, 0x01, 0x00, 0x49, 0x4D, 0x01, 0x00, 0x4A, -/* 00006880 */ 0x4D, 0x01, 0x00, 0x8E, 0x4D, 0x01, 0x00, 0xB1, 0x4D, 0x01, 0x00, 0xCD, 0x4D, 0x01, 0x00, 0xEC, -/* 00006890 */ 0x4D, 0x01, 0x00, 0x0B, 0x4E, 0x01, 0x00, 0x17, 0x4E, 0x01, 0x00, 0x18, 0x4E, 0x01, 0x00, 0x96, -/* 000068A0 */ 0x4E, 0x01, 0x00, 0xBE, 0x4E, 0x01, 0x00, 0xFB, 0x4E, 0x01, 0x00, 0xFC, 0x4E, 0x01, 0x00, 0x29, -/* 000068B0 */ 0x4F, 0x01, 0x00, 0x34, 0x4F, 0x01, 0x00, 0x62, 0x4F, 0x01, 0x00, 0x83, 0x4F, 0x01, 0x00, 0xA0, -/* 000068C0 */ 0x4F, 0x01, 0x00, 0xBF, 0x4F, 0x01, 0x00, 0xDF, 0x4F, 0x01, 0x00, 0xEB, 0x4F, 0x01, 0x00, 0x2A, -/* 000068D0 */ 0x50, 0x01, 0x00, 0x67, 0x50, 0x01, 0x00, 0x86, 0x50, 0x01, 0x00, 0xA6, 0x50, 0x01, 0x00, 0xB2, -/* 000068E0 */ 0x50, 0x01, 0x00, 0xF8, 0x50, 0x01, 0x00, 0x1A, 0x51, 0x01, 0x00, 0x39, 0x51, 0x01, 0x00, 0x59, -/* 000068F0 */ 0x51, 0x01, 0x00, 0x75, 0x51, 0x01, 0x00, 0x81, 0x51, 0x01, 0x00, 0xC9, 0x51, 0x01, 0x00, 0xF9, -/* 00006900 */ 0x51, 0x01, 0x00, 0x45, 0x52, 0x01, 0x00, 0x67, 0x52, 0x01, 0x00, 0x85, 0x52, 0x01, 0x00, 0xA5, -/* 00006910 */ 0x52, 0x01, 0x00, 0xCC, 0x52, 0x01, 0x00, 0xEC, 0x52, 0x01, 0x00, 0x0D, 0x53, 0x01, 0x00, 0x2C, -/* 00006920 */ 0x53, 0x01, 0x00, 0x47, 0x53, 0x01, 0x00, 0x63, 0x53, 0x01, 0x00, 0x80, 0x53, 0x01, 0x00, 0x9B, -/* 00006930 */ 0x53, 0x01, 0x00, 0xB7, 0x53, 0x01, 0x00, 0xD5, 0x53, 0x01, 0x00, 0xF3, 0x53, 0x01, 0x00, 0x17, -/* 00006940 */ 0x54, 0x01, 0x00, 0x2A, 0x54, 0x01, 0x00, 0x2B, 0x54, 0x01, 0x00, 0x8B, 0x54, 0x01, 0x00, 0xBB, -/* 00006950 */ 0x54, 0x01, 0x00, 0xF6, 0x54, 0x01, 0x00, 0x44, 0x55, 0x01, 0x00, 0x79, 0x55, 0x01, 0x00, 0xC5, -/* 00006960 */ 0x55, 0x01, 0x00, 0xDF, 0x55, 0x01, 0x00, 0xE0, 0x55, 0x01, 0x00, 0x05, 0x56, 0x01, 0x00, 0x1B, -/* 00006970 */ 0x56, 0x01, 0x00, 0x2F, 0x56, 0x01, 0x00, 0x3E, 0x56, 0x01, 0x00, 0x5A, 0x56, 0x01, 0x00, 0x79, -/* 00006980 */ 0x56, 0x01, 0x00, 0x99, 0x56, 0x01, 0x00, 0xA5, 0x56, 0x01, 0x00, 0xA6, 0x56, 0x01, 0x00, 0xDA, -/* 00006990 */ 0x56, 0x01, 0x00, 0x3B, 0x57, 0x01, 0x00, 0xD6, 0x57, 0x01, 0x00, 0x6C, 0x58, 0x01, 0x00, 0x78, -/* 000069A0 */ 0x58, 0x01, 0x00, 0xF3, 0x58, 0x01, 0x00, 0x39, 0x59, 0x01, 0x00, 0x62, 0x59, 0x01, 0x00, 0x7F, -/* 000069B0 */ 0x59, 0x01, 0x00, 0x9E, 0x59, 0x01, 0x00, 0xBE, 0x59, 0x01, 0x00, 0xCA, 0x59, 0x01, 0x00, 0x0B, -/* 000069C0 */ 0x5A, 0x01, 0x00, 0x41, 0x5A, 0x01, 0x00, 0x5D, 0x5A, 0x01, 0x00, 0x7C, 0x5A, 0x01, 0x00, 0x9C, -/* 000069D0 */ 0x5A, 0x01, 0x00, 0xA8, 0x5A, 0x01, 0x00, 0xA9, 0x5A, 0x01, 0x00, 0xC8, 0x5A, 0x01, 0x00, 0xD2, -/* 000069E0 */ 0x5A, 0x01, 0x00, 0xD3, 0x5A, 0x01, 0x00, 0xF9, 0x5A, 0x01, 0x00, 0x1C, 0x5B, 0x01, 0x00, 0x30, -/* 000069F0 */ 0x5B, 0x01, 0x00, 0x3A, 0x5B, 0x01, 0x00, 0x3B, 0x5B, 0x01, 0x00, 0x47, 0x5B, 0x01, 0x00, 0x7B, -/* 00006A00 */ 0x5B, 0x01, 0x00, 0x86, 0x5B, 0x01, 0x00, 0xB6, 0x5B, 0x01, 0x00, 0xC1, 0x5B, 0x01, 0x00, 0xE8, -/* 00006A10 */ 0x5B, 0x01, 0x00, 0x14, 0x5C, 0x01, 0x00, 0x37, 0x5C, 0x01, 0x00, 0x43, 0x5C, 0x01, 0x00, 0x94, -/* 00006A20 */ 0x5C, 0x01, 0x00, 0xDA, 0x5C, 0x01, 0x00, 0x31, 0x5D, 0x01, 0x00, 0x55, 0x5D, 0x01, 0x00, 0xC2, -/* 00006A30 */ 0x5D, 0x01, 0x00, 0x2C, 0x5E, 0x01, 0x00, 0x2D, 0x5E, 0x01, 0x00, 0x72, 0x5E, 0x01, 0x00, 0x73, -/* 00006A40 */ 0x5E, 0x01, 0x00, 0xD6, 0x5E, 0x01, 0x00, 0x34, 0x5F, 0x01, 0x00, 0x35, 0x5F, 0x01, 0x00, 0x60, -/* 00006A50 */ 0x5F, 0x01, 0x00, 0xB6, 0x5F, 0x01, 0x00, 0xB7, 0x5F, 0x01, 0x00, 0xEE, 0x5F, 0x01, 0x00, 0xEF, -/* 00006A60 */ 0x5F, 0x01, 0x00, 0x0F, 0x60, 0x01, 0x00, 0x1A, 0x60, 0x01, 0x00, 0x1B, 0x60, 0x01, 0x00, 0x27, -/* 00006A70 */ 0x60, 0x01, 0x00, 0x78, 0x60, 0x01, 0x00, 0xB7, 0x60, 0x01, 0x00, 0xC2, 0x60, 0x01, 0x00, 0xEA, -/* 00006A80 */ 0x60, 0x01, 0x00, 0xF5, 0x60, 0x01, 0x00, 0x1C, 0x61, 0x01, 0x00, 0x39, 0x61, 0x01, 0x00, 0x45, -/* 00006A90 */ 0x61, 0x01, 0x00, 0x7F, 0x61, 0x01, 0x00, 0xA1, 0x61, 0x01, 0x00, 0xC1, 0x61, 0x01, 0x00, 0xCF, -/* 00006AA0 */ 0x61, 0x01, 0x00, 0xD0, 0x61, 0x01, 0x00, 0x0F, 0x62, 0x01, 0x00, 0x1A, 0x62, 0x01, 0x00, 0x1B, -/* 00006AB0 */ 0x62, 0x01, 0x00, 0x6B, 0x62, 0x01, 0x00, 0xC8, 0x62, 0x01, 0x00, 0xF4, 0x62, 0x01, 0x00, 0x47, -/* 00006AC0 */ 0x63, 0x01, 0x00, 0x55, 0x63, 0x01, 0x00, 0x56, 0x63, 0x01, 0x00, 0x82, 0x63, 0x01, 0x00, 0xBB, -/* 00006AD0 */ 0x63, 0x01, 0x00, 0xBC, 0x63, 0x01, 0x00, 0xFE, 0x63, 0x01, 0x00, 0xFF, 0x63, 0x01, 0x00, 0x18, -/* 00006AE0 */ 0x64, 0x01, 0x00, 0x23, 0x64, 0x01, 0x00, 0x5F, 0x64, 0x01, 0x00, 0x60, 0x64, 0x01, 0x00, 0x95, -/* 00006AF0 */ 0x64, 0x01, 0x00, 0xCA, 0x64, 0x01, 0x00, 0xE1, 0x64, 0x01, 0x00, 0xFE, 0x64, 0x01, 0x00, 0x1D, -/* 00006B00 */ 0x65, 0x01, 0x00, 0x3E, 0x65, 0x01, 0x00, 0x4A, 0x65, 0x01, 0x00, 0x4B, 0x65, 0x01, 0x00, 0x7F, -/* 00006B10 */ 0x65, 0x01, 0x00, 0xBD, 0x65, 0x01, 0x00, 0x18, 0x66, 0x01, 0x00, 0xAD, 0x66, 0x01, 0x00, 0x3F, -/* 00006B20 */ 0x67, 0x01, 0x00, 0x4B, 0x67, 0x01, 0x00, 0xC0, 0x67, 0x01, 0x00, 0x03, 0x68, 0x01, 0x00, 0x2C, -/* 00006B30 */ 0x68, 0x01, 0x00, 0x49, 0x68, 0x01, 0x00, 0x68, 0x68, 0x01, 0x00, 0x88, 0x68, 0x01, 0x00, 0x94, -/* 00006B40 */ 0x68, 0x01, 0x00, 0xD2, 0x68, 0x01, 0x00, 0x05, 0x69, 0x01, 0x00, 0x21, 0x69, 0x01, 0x00, 0x40, -/* 00006B50 */ 0x69, 0x01, 0x00, 0x60, 0x69, 0x01, 0x00, 0x6C, 0x69, 0x01, 0x00, 0x6D, 0x69, 0x01, 0x00, 0xA9, -/* 00006B60 */ 0x69, 0x01, 0x00, 0xD9, 0x69, 0x01, 0x00, 0x10, 0x6A, 0x01, 0x00, 0x45, 0x6A, 0x01, 0x00, 0xA9, -/* 00006B70 */ 0x6A, 0x01, 0x00, 0xB7, 0x6A, 0x01, 0x00, 0xB8, 0x6A, 0x01, 0x00, 0xE8, 0x6A, 0x01, 0x00, 0x11, -/* 00006B80 */ 0x6B, 0x01, 0x00, 0x1C, 0x6B, 0x01, 0x00, 0x64, 0x6B, 0x01, 0x00, 0xA0, 0x6B, 0x01, 0x00, 0xBB, -/* 00006B90 */ 0x6B, 0x01, 0x00, 0xDA, 0x6B, 0x01, 0x00, 0xFA, 0x6B, 0x01, 0x00, 0x16, 0x6C, 0x01, 0x00, 0x22, -/* 00006BA0 */ 0x6C, 0x01, 0x00, 0x23, 0x6C, 0x01, 0x00, 0x60, 0x6C, 0x01, 0x00, 0x97, 0x6C, 0x01, 0x00, 0xCC, -/* 00006BB0 */ 0x6C, 0x01, 0x00, 0x30, 0x6D, 0x01, 0x00, 0x3E, 0x6D, 0x01, 0x00, 0x3F, 0x6D, 0x01, 0x00, 0x6A, -/* 00006BC0 */ 0x6D, 0x01, 0x00, 0x84, 0x6D, 0x01, 0x00, 0x9C, 0x6D, 0x01, 0x00, 0xC4, 0x6D, 0x01, 0x00, 0xED, -/* 00006BD0 */ 0x6D, 0x01, 0x00, 0x16, 0x6E, 0x01, 0x00, 0x42, 0x6E, 0x01, 0x00, 0x6E, 0x6E, 0x01, 0x00, 0x91, -/* 00006BE0 */ 0x6E, 0x01, 0x00, 0xBA, 0x6E, 0x01, 0x00, 0xED, 0x6E, 0x01, 0x00, 0x5C, 0x6F, 0x01, 0x00, 0xAD, -/* 00006BF0 */ 0x6F, 0x01, 0x00, 0xCE, 0x6F, 0x01, 0x00, 0xE0, 0x6F, 0x01, 0x00, 0xF0, 0x6F, 0x01, 0x00, 0xFB, -/* 00006C00 */ 0x6F, 0x01, 0x00, 0x55, 0x70, 0x01, 0x00, 0x9A, 0x70, 0x01, 0x00, 0xBE, 0x70, 0x01, 0x00, 0xDD, -/* 00006C10 */ 0x70, 0x01, 0x00, 0xFD, 0x70, 0x01, 0x00, 0x19, 0x71, 0x01, 0x00, 0x25, 0x71, 0x01, 0x00, 0x26, -/* 00006C20 */ 0x71, 0x01, 0x00, 0x42, 0x71, 0x01, 0x00, 0x4C, 0x71, 0x01, 0x00, 0x4D, 0x71, 0x01, 0x00, 0x7E, -/* 00006C30 */ 0x71, 0x01, 0x00, 0x9D, 0x71, 0x01, 0x00, 0x2F, 0x72, 0x01, 0x00, 0xC1, 0x72, 0x01, 0x00, 0x53, -/* 00006C40 */ 0x73, 0x01, 0x00, 0xE5, 0x73, 0x01, 0x00, 0xEB, 0x73, 0x01, 0x00, 0xEC, 0x73, 0x01, 0x00, 0xF2, -/* 00006C50 */ 0x73, 0x01, 0x00, 0xFA, 0x73, 0x01, 0x00, 0x01, 0x74, 0x01, 0x00, 0x08, 0x74, 0x01, 0x00, 0x0F, -/* 00006C60 */ 0x74, 0x01, 0x00, 0x16, 0x74, 0x01, 0x00, 0x1D, 0x74, 0x01, 0x00, 0x24, 0x74, 0x01, 0x00, 0x42, -/* 00006C70 */ 0x74, 0x01, 0x00, 0x49, 0x74, 0x01, 0x00, 0x50, 0x74, 0x01, 0x00, 0x57, 0x74, 0x01, 0x00, 0x5E, -/* 00006C80 */ 0x74, 0x01, 0x00, 0x65, 0x74, 0x01, 0x00, 0x6C, 0x74, 0x01, 0x00, 0x74, 0x74, 0x01, 0x00, 0x7F, -/* 00006C90 */ 0x74, 0x01, 0x00, 0x80, 0x74, 0x01, 0x00, 0xB4, 0x74, 0x01, 0x00, 0xEA, 0x74, 0x01, 0x00, 0xF0, -/* 00006CA0 */ 0x74, 0x01, 0x00, 0x25, 0x75, 0x01, 0x00, 0x5C, 0x75, 0x01, 0x00, 0x62, 0x75, 0x01, 0x00, 0x63, -/* 00006CB0 */ 0x75, 0x01, 0x00, 0x88, 0x75, 0x01, 0x00, 0xB3, 0x75, 0x01, 0x00, 0xE8, 0x75, 0x01, 0x00, 0x0C, -/* 00006CC0 */ 0x76, 0x01, 0x00, 0x16, 0x76, 0x01, 0x00, 0x17, 0x76, 0x01, 0x00, 0x4B, 0x76, 0x01, 0x00, 0x62, -/* 00006CD0 */ 0x76, 0x01, 0x00, 0xB1, 0x76, 0x01, 0x00, 0xE3, 0x76, 0x01, 0x00, 0x07, 0x77, 0x01, 0x00, 0x18, -/* 00006CE0 */ 0x77, 0x01, 0x00, 0x3E, 0x77, 0x01, 0x00, 0x48, 0x77, 0x01, 0x00, 0x49, 0x77, 0x01, 0x00, 0x69, -/* 00006CF0 */ 0x77, 0x01, 0x00, 0x70, 0x77, 0x01, 0x00, 0x71, 0x77, 0x01, 0x00, 0xB7, 0x77, 0x01, 0x00, 0x06, -/* 00006D00 */ 0x78, 0x01, 0x00, 0x25, 0x78, 0x01, 0x00, 0x73, 0x78, 0x01, 0x00, 0xA6, 0x78, 0x01, 0x00, 0xD6, -/* 00006D10 */ 0x78, 0x01, 0x00, 0x16, 0x79, 0x01, 0x00, 0x42, 0x79, 0x01, 0x00, 0x50, 0x79, 0x01, 0x00, 0x5A, -/* 00006D20 */ 0x79, 0x01, 0x00, 0x75, 0x79, 0x01, 0x00, 0x7C, 0x79, 0x01, 0x00, 0x7D, 0x79, 0x01, 0x00, 0xB4, -/* 00006D30 */ 0x79, 0x01, 0x00, 0xF4, 0x79, 0x01, 0x00, 0x13, 0x7A, 0x01, 0x00, 0x33, 0x7A, 0x01, 0x00, 0x5B, -/* 00006D40 */ 0x7A, 0x01, 0x00, 0x69, 0x7A, 0x01, 0x00, 0xB3, 0x7A, 0x01, 0x00, 0xCF, 0x7A, 0x01, 0x00, 0xE0, -/* 00006D50 */ 0x7A, 0x01, 0x00, 0xFB, 0x7A, 0x01, 0x00, 0x05, 0x7B, 0x01, 0x00, 0x0C, 0x7B, 0x01, 0x00, 0x0D, -/* 00006D60 */ 0x7B, 0x01, 0x00, 0x47, 0x7B, 0x01, 0x00, 0x60, 0x7B, 0x01, 0x00, 0x83, 0x7B, 0x01, 0x00, 0xA5, -/* 00006D70 */ 0x7B, 0x01, 0x00, 0xC9, 0x7B, 0x01, 0x00, 0xD7, 0x7B, 0x01, 0x00, 0xEE, 0x7B, 0x01, 0x00, 0xF8, -/* 00006D80 */ 0x7B, 0x01, 0x00, 0xFF, 0x7B, 0x01, 0x00, 0x00, 0x7C, 0x01, 0x00, 0x65, 0x7C, 0x01, 0x00, 0x91, -/* 00006D90 */ 0x7C, 0x01, 0x00, 0xD7, 0x7C, 0x01, 0x00, 0xED, 0x7C, 0x01, 0x00, 0xF7, 0x7C, 0x01, 0x00, 0xFE, -/* 00006DA0 */ 0x7C, 0x01, 0x00, 0xFF, 0x7C, 0x01, 0x00, 0x30, 0x7D, 0x01, 0x00, 0x67, 0x7D, 0x01, 0x00, 0x6E, -/* 00006DB0 */ 0x7D, 0x01, 0x00, 0x6F, 0x7D, 0x01, 0x00, 0xB1, 0x7D, 0x01, 0x00, 0xF7, 0x7D, 0x01, 0x00, 0x23, -/* 00006DC0 */ 0x7E, 0x01, 0x00, 0x67, 0x7E, 0x01, 0x00, 0x92, 0x7E, 0x01, 0x00, 0xBB, 0x7E, 0x01, 0x00, 0xE7, -/* 00006DD0 */ 0x7E, 0x01, 0x00, 0xF9, 0x7E, 0x01, 0x00, 0x4B, 0x7F, 0x01, 0x00, 0xC0, 0x7F, 0x01, 0x00, 0xCE, -/* 00006DE0 */ 0x7F, 0x01, 0x00, 0x19, 0x80, 0x01, 0x00, 0x5B, 0x80, 0x01, 0x00, 0xCB, 0x80, 0x01, 0x00, 0xFE, -/* 00006DF0 */ 0x80, 0x01, 0x00, 0x26, 0x81, 0x01, 0x00, 0x30, 0x81, 0x01, 0x00, 0x31, 0x81, 0x01, 0x00, 0x59, -/* 00006E00 */ 0x81, 0x01, 0x00, 0x7C, 0x81, 0x01, 0x00, 0xB3, 0x81, 0x01, 0x00, 0xD1, 0x81, 0x01, 0x00, 0xE2, -/* 00006E10 */ 0x81, 0x01, 0x00, 0x05, 0x82, 0x01, 0x00, 0x0F, 0x82, 0x01, 0x00, 0x15, 0x82, 0x01, 0x00, 0x16, -/* 00006E20 */ 0x82, 0x01, 0x00, 0x56, 0x82, 0x01, 0x00, 0xA9, 0x82, 0x01, 0x00, 0xD5, 0x82, 0x01, 0x00, 0x26, -/* 00006E30 */ 0x83, 0x01, 0x00, 0x51, 0x83, 0x01, 0x00, 0x7A, 0x83, 0x01, 0x00, 0xA6, 0x83, 0x01, 0x00, 0xB8, -/* 00006E40 */ 0x83, 0x01, 0x00, 0x18, 0x84, 0x01, 0x00, 0x69, 0x84, 0x01, 0x00, 0x93, 0x84, 0x01, 0x00, 0xCC, -/* 00006E50 */ 0x84, 0x01, 0x00, 0x06, 0x85, 0x01, 0x00, 0x14, 0x85, 0x01, 0x00, 0x5F, 0x85, 0x01, 0x00, 0xA1, -/* 00006E60 */ 0x85, 0x01, 0x00, 0x1E, 0x86, 0x01, 0x00, 0x51, 0x86, 0x01, 0x00, 0x79, 0x86, 0x01, 0x00, 0x83, -/* 00006E70 */ 0x86, 0x01, 0x00, 0xA2, 0x86, 0x01, 0x00, 0xA8, 0x86, 0x01, 0x00, 0xA9, 0x86, 0x01, 0x00, 0xDB, -/* 00006E80 */ 0x86, 0x01, 0x00, 0xFB, 0x86, 0x01, 0x00, 0x1F, 0x87, 0x01, 0x00, 0x29, 0x87, 0x01, 0x00, 0x2A, -/* 00006E90 */ 0x87, 0x01, 0x00, 0x75, 0x87, 0x01, 0x00, 0x8B, 0x87, 0x01, 0x00, 0xA9, 0x87, 0x01, 0x00, 0xB3, -/* 00006EA0 */ 0x87, 0x01, 0x00, 0xB4, 0x87, 0x01, 0x00, 0x29, 0x88, 0x01, 0x00, 0x79, 0x88, 0x01, 0x00, 0xBE, -/* 00006EB0 */ 0x88, 0x01, 0x00, 0xBF, 0x88, 0x01, 0x00, 0x32, 0x89, 0x01, 0x00, 0x4B, 0x89, 0x01, 0x00, 0x6F, -/* 00006EC0 */ 0x89, 0x01, 0x00, 0x93, 0x89, 0x01, 0x00, 0xEB, 0x89, 0x01, 0x00, 0x2E, 0x8A, 0x01, 0x00, 0xB7, -/* 00006ED0 */ 0x8A, 0x01, 0x00, 0xB8, 0x8A, 0x01, 0x00, 0xD3, 0x8A, 0x01, 0x00, 0xD9, 0x8A, 0x01, 0x00, 0xDA, -/* 00006EE0 */ 0x8A, 0x01, 0x00, 0x34, 0x8B, 0x01, 0x00, 0x6A, 0x8B, 0x01, 0x00, 0x8A, 0x8B, 0x01, 0x00, 0xE7, -/* 00006EF0 */ 0x8B, 0x01, 0x00, 0x1A, 0x8C, 0x01, 0x00, 0x24, 0x8C, 0x01, 0x00, 0x25, 0x8C, 0x01, 0x00, 0x3C, -/* 00006F00 */ 0x8C, 0x01, 0x00, 0x8C, 0x8C, 0x01, 0x00, 0xE8, 0x8C, 0x01, 0x00, 0xF8, 0x8C, 0x01, 0x00, 0x02, -/* 00006F10 */ 0x8D, 0x01, 0x00, 0x03, 0x8D, 0x01, 0x00, 0x92, 0x8D, 0x01, 0x00, 0x18, 0x8E, 0x01, 0x00, 0x93, -/* 00006F20 */ 0x8E, 0x01, 0x00, 0xDC, 0x8E, 0x01, 0x00, 0x12, 0x8F, 0x01, 0x00, 0x13, 0x8F, 0x01, 0x00, 0x5F, -/* 00006F30 */ 0x8F, 0x01, 0x00, 0x7E, 0x8F, 0x01, 0x00, 0xCF, 0x8F, 0x01, 0x00, 0x49, 0x90, 0x01, 0x00, 0x6D, -/* 00006F40 */ 0x90, 0x01, 0x00, 0xC8, 0x90, 0x01, 0x00, 0x13, 0x91, 0x01, 0x00, 0x25, 0x91, 0x01, 0x00, 0x36, -/* 00006F50 */ 0x91, 0x01, 0x00, 0x56, 0x91, 0x01, 0x00, 0x60, 0x91, 0x01, 0x00, 0x61, 0x91, 0x01, 0x00, 0xD0, -/* 00006F60 */ 0x91, 0x01, 0x00, 0xFE, 0x91, 0x01, 0x00, 0x33, 0x92, 0x01, 0x00, 0x5C, 0x92, 0x01, 0x00, 0x74, -/* 00006F70 */ 0x92, 0x01, 0x00, 0xAE, 0x92, 0x01, 0x00, 0xD8, 0x92, 0x01, 0x00, 0xFD, 0x92, 0x01, 0x00, 0x16, -/* 00006F80 */ 0x93, 0x01, 0x00, 0x3D, 0x93, 0x01, 0x00, 0x4F, 0x93, 0x01, 0x00, 0x5D, 0x93, 0x01, 0x00, 0x5E, -/* 00006F90 */ 0x93, 0x01, 0x00, 0xA9, 0x93, 0x01, 0x00, 0xBA, 0x93, 0x01, 0x00, 0xDC, 0x93, 0x01, 0x00, 0xE6, -/* 00006FA0 */ 0x93, 0x01, 0x00, 0xE7, 0x93, 0x01, 0x00, 0x05, 0x94, 0x01, 0x00, 0x23, 0x94, 0x01, 0x00, 0x41, -/* 00006FB0 */ 0x94, 0x01, 0x00, 0x72, 0x94, 0x01, 0x00, 0x84, 0x94, 0x01, 0x00, 0x8A, 0x94, 0x01, 0x00, 0x8B, -/* 00006FC0 */ 0x94, 0x01, 0x00, 0xEB, 0x94, 0x01, 0x00, 0x43, 0x95, 0x01, 0x00, 0x76, 0x95, 0x01, 0x00, 0x77, -/* 00006FD0 */ 0x95, 0x01, 0x00, 0xA8, 0x95, 0x01, 0x00, 0xA9, 0x95, 0x01, 0x00, 0xDD, 0x95, 0x01, 0x00, 0x08, -/* 00006FE0 */ 0x96, 0x01, 0x00, 0x71, 0x96, 0x01, 0x00, 0xA2, 0x96, 0x01, 0x00, 0xC3, 0x96, 0x01, 0x00, 0xD1, -/* 00006FF0 */ 0x96, 0x01, 0x00, 0xDB, 0x96, 0x01, 0x00, 0x30, 0x97, 0x01, 0x00, 0x36, 0x97, 0x01, 0x00, 0x37, -/* 00007000 */ 0x97, 0x01, 0x00, 0x7A, 0x97, 0x01, 0x00, 0xA7, 0x97, 0x01, 0x00, 0xD5, 0x97, 0x01, 0x00, 0xFC, -/* 00007010 */ 0x97, 0x01, 0x00, 0x28, 0x98, 0x01, 0x00, 0x32, 0x98, 0x01, 0x00, 0x33, 0x98, 0x01, 0x00, 0x55, -/* 00007020 */ 0x98, 0x01, 0x00, 0x7A, 0x98, 0x01, 0x00, 0xA2, 0x98, 0x01, 0x00, 0xB0, 0x98, 0x01, 0x00, 0xB1, -/* 00007030 */ 0x98, 0x01, 0x00, 0xDD, 0x98, 0x01, 0x00, 0x2A, 0x99, 0x01, 0x00, 0x43, 0x99, 0x01, 0x00, 0x81, -/* 00007040 */ 0x99, 0x01, 0x00, 0xB5, 0x99, 0x01, 0x00, 0xCA, 0x99, 0x01, 0x00, 0xF9, 0x99, 0x01, 0x00, 0x07, -/* 00007050 */ 0x9A, 0x01, 0x00, 0x18, 0x9A, 0x01, 0x00, 0x69, 0x9A, 0x01, 0x00, 0x99, 0x9A, 0x01, 0x00, 0xFF, -/* 00007060 */ 0x9A, 0x01, 0x00, 0x09, 0x9B, 0x01, 0x00, 0x0A, 0x9B, 0x01, 0x00, 0x32, 0x9B, 0x01, 0x00, 0x39, -/* 00007070 */ 0x9B, 0x01, 0x00, 0x3A, 0x9B, 0x01, 0x00, 0x5C, 0x9B, 0x01, 0x00, 0x7A, 0x9B, 0x01, 0x00, 0x9F, -/* 00007080 */ 0x9B, 0x01, 0x00, 0xC1, 0x9B, 0x01, 0x00, 0xF1, 0x9B, 0x01, 0x00, 0x03, 0x9C, 0x01, 0x00, 0x43, -/* 00007090 */ 0x9C, 0x01, 0x00, 0x52, 0x9C, 0x01, 0x00, 0x53, 0x9C, 0x01, 0x00, 0x78, 0x9C, 0x01, 0x00, 0xB8, -/* 000070A0 */ 0x9C, 0x01, 0x00, 0xC7, 0x9C, 0x01, 0x00, 0xC8, 0x9C, 0x01, 0x00, 0xED, 0x9C, 0x01, 0x00, 0x27, -/* 000070B0 */ 0x9D, 0x01, 0x00, 0x36, 0x9D, 0x01, 0x00, 0x37, 0x9D, 0x01, 0x00, 0x64, 0x9D, 0x01, 0x00, 0xA5, -/* 000070C0 */ 0x9D, 0x01, 0x00, 0xB4, 0x9D, 0x01, 0x00, 0xB5, 0x9D, 0x01, 0x00, 0xDA, 0x9D, 0x01, 0x00, 0xFF, -/* 000070D0 */ 0x9D, 0x01, 0x00, 0x1C, 0x9E, 0x01, 0x00, 0x50, 0x9E, 0x01, 0x00, 0x8B, 0x9E, 0x01, 0x00, 0x9D, -/* 000070E0 */ 0x9E, 0x01, 0x00, 0xB9, 0x9E, 0x01, 0x00, 0xC8, 0x9E, 0x01, 0x00, 0xC9, 0x9E, 0x01, 0x00, 0xF4, -/* 000070F0 */ 0x9E, 0x01, 0x00, 0x20, 0x9F, 0x01, 0x00, 0x3C, 0x9F, 0x01, 0x00, 0x8C, 0x9F, 0x01, 0x00, 0xB1, -/* 00007100 */ 0x9F, 0x01, 0x00, 0xC7, 0x9F, 0x01, 0x00, 0xF8, 0x9F, 0x01, 0x00, 0x0A, 0xA0, 0x01, 0x00, 0x18, -/* 00007110 */ 0xA0, 0x01, 0x00, 0x29, 0xA0, 0x01, 0x00, 0x33, 0xA0, 0x01, 0x00, 0x34, 0xA0, 0x01, 0x00, 0x5B, -/* 00007120 */ 0xA0, 0x01, 0x00, 0x9F, 0xA0, 0x01, 0x00, 0xC6, 0xA0, 0x01, 0x00, 0xC7, 0xA0, 0x01, 0x00, 0xEA, -/* 00007130 */ 0xA0, 0x01, 0x00, 0x0F, 0xA1, 0x01, 0x00, 0x49, 0xA1, 0x01, 0x00, 0x57, 0xA1, 0x01, 0x00, 0x58, -/* 00007140 */ 0xA1, 0x01, 0x00, 0x7C, 0xA1, 0x01, 0x00, 0xAE, 0xA1, 0x01, 0x00, 0xBC, 0xA1, 0x01, 0x00, 0xBD, -/* 00007150 */ 0xA1, 0x01, 0x00, 0xE1, 0xA1, 0x01, 0x00, 0x13, 0xA2, 0x01, 0x00, 0x21, 0xA2, 0x01, 0x00, 0x22, -/* 00007160 */ 0xA2, 0x01, 0x00, 0x89, 0xA2, 0x01, 0x00, 0x24, 0xA3, 0x01, 0x00, 0x32, 0xA3, 0x01, 0x00, 0x33, -/* 00007170 */ 0xA3, 0x01, 0x00, 0x4D, 0xA3, 0x01, 0x00, 0x57, 0xA3, 0x01, 0x00, 0x58, 0xA3, 0x01, 0x00, 0x71, -/* 00007180 */ 0xA3, 0x01, 0x00, 0x77, 0xA3, 0x01, 0x00, 0x78, 0xA3, 0x01, 0x00, 0xC6, 0xA3, 0x01, 0x00, 0xF2, -/* 00007190 */ 0xA3, 0x01, 0x00, 0xF3, 0xA3, 0x01, 0x00, 0x22, 0xA4, 0x01, 0x00, 0x62, 0xA4, 0x01, 0x00, 0x63, -/* 000071A0 */ 0xA4, 0x01, 0x00, 0xC4, 0xA4, 0x01, 0x00, 0x46, 0xA5, 0x01, 0x00, 0x54, 0xA5, 0x01, 0x00, 0x55, -/* 000071B0 */ 0xA5, 0x01, 0x00, 0x84, 0xA5, 0x01, 0x00, 0x95, 0xA5, 0x01, 0x00, 0xB2, 0xA5, 0x01, 0x00, 0xBC, -/* 000071C0 */ 0xA5, 0x01, 0x00, 0xC2, 0xA5, 0x01, 0x00, 0xC3, 0xA5, 0x01, 0x00, 0xDD, 0xA5, 0x01, 0x00, 0x07, -/* 000071D0 */ 0xA6, 0x01, 0x00, 0x31, 0xA6, 0x01, 0x00, 0x37, 0xA6, 0x01, 0x00, 0x38, 0xA6, 0x01, 0x00, 0x70, -/* 000071E0 */ 0xA6, 0x01, 0x00, 0xBC, 0xA6, 0x01, 0x00, 0x1A, 0xA7, 0x01, 0x00, 0x40, 0xA7, 0x01, 0x00, 0x85, -/* 000071F0 */ 0xA7, 0x01, 0x00, 0xE9, 0xA7, 0x01, 0x00, 0x69, 0xA8, 0x01, 0x00, 0x6A, 0xA8, 0x01, 0x00, 0xDC, -/* 00007200 */ 0xA8, 0x01, 0x00, 0x0D, 0xA9, 0x01, 0x00, 0x5C, 0xA9, 0x01, 0x00, 0xAE, 0xA9, 0x01, 0x00, 0x02, -/* 00007210 */ 0xAA, 0x01, 0x00, 0x3A, 0xAA, 0x01, 0x00, 0x8C, 0xAA, 0x01, 0x00, 0xDE, 0xAA, 0x01, 0x00, 0x33, -/* 00007220 */ 0xAB, 0x01, 0x00, 0x9F, 0xAB, 0x01, 0x00, 0xF5, 0xAB, 0x01, 0x00, 0xF6, 0xAB, 0x01, 0x00, 0x15, -/* 00007230 */ 0xAC, 0x01, 0x00, 0x34, 0xAC, 0x01, 0x00, 0x66, 0xAC, 0x01, 0x00, 0x67, 0xAC, 0x01, 0x00, 0xDE, -/* 00007240 */ 0xAC, 0x01, 0x00, 0x4B, 0xAD, 0x01, 0x00, 0x9E, 0xAD, 0x01, 0x00, 0xE1, 0xAD, 0x01, 0x00, 0xE2, -/* 00007250 */ 0xAD, 0x01, 0x00, 0x5F, 0xAE, 0x01, 0x00, 0xF3, 0xAE, 0x01, 0x00, 0x76, 0xAF, 0x01, 0x00, 0xF9, -/* 00007260 */ 0xAF, 0x01, 0x00, 0x6C, 0xB0, 0x01, 0x00, 0x6D, 0xB0, 0x01, 0x00, 0xD7, 0xB0, 0x01, 0x00, 0x50, -/* 00007270 */ 0xB1, 0x01, 0x00, 0x51, 0xB1, 0x01, 0x00, 0xB4, 0xB1, 0x01, 0x00, 0x43, 0xB2, 0x01, 0x00, 0xEC, -/* 00007280 */ 0xB2, 0x01, 0x00, 0x80, 0xB3, 0x01, 0x00, 0x17, 0xB4, 0x01, 0x00, 0xBB, 0xB4, 0x01, 0x00, 0xCF, -/* 00007290 */ 0xB4, 0x01, 0x00, 0xD0, 0xB4, 0x01, 0x00, 0x51, 0xB5, 0x01, 0x00, 0xBD, 0xB5, 0x01, 0x00, 0x2D, -/* 000072A0 */ 0xB6, 0x01, 0x00, 0x9D, 0xB6, 0x01, 0x00, 0x0F, 0xB7, 0x01, 0x00, 0x83, 0xB7, 0x01, 0x00, 0xF7, -/* 000072B0 */ 0xB7, 0x01, 0x00, 0x41, 0xB8, 0x01, 0x00, 0x42, 0xB8, 0x01, 0x00, 0xAF, 0xB8, 0x01, 0x00, 0xB0, -/* 000072C0 */ 0xB8, 0x01, 0x00, 0x16, 0xB9, 0x01, 0x00, 0xA1, 0xB9, 0x01, 0x00, 0x17, 0xBA, 0x01, 0x00, 0x1D, -/* 000072D0 */ 0xBA, 0x01, 0x00, 0x1E, 0xBA, 0x01, 0x00, 0x4C, 0xBA, 0x01, 0x00, 0x74, 0xBA, 0x01, 0x00, 0x75, -/* 000072E0 */ 0xBA, 0x01, 0x00, 0x96, 0xBA, 0x01, 0x00, 0xBE, 0xBA, 0x01, 0x00, 0xC8, 0xBA, 0x01, 0x00, 0xC9, -/* 000072F0 */ 0xBA, 0x01, 0x00, 0x15, 0xBB, 0x01, 0x00, 0x1B, 0xBB, 0x01, 0x00, 0x1C, 0xBB, 0x01, 0x00, 0x93, -/* 00007300 */ 0xBB, 0x01, 0x00, 0xC2, 0xBB, 0x01, 0x00, 0xF0, 0xBB, 0x01, 0x00, 0x07, 0xBC, 0x01, 0x00, 0x11, -/* 00007310 */ 0xBC, 0x01, 0x00, 0x12, 0xBC, 0x01, 0x00, 0x3D, 0xBC, 0x01, 0x00, 0x5E, 0xBC, 0x01, 0x00, 0x68, -/* 00007320 */ 0xBC, 0x01, 0x00, 0x69, 0xBC, 0x01, 0x00, 0x97, 0xBC, 0x01, 0x00, 0xD1, 0xBC, 0x01, 0x00, 0xD2, -/* 00007330 */ 0xBC, 0x01, 0x00, 0x07, 0xBD, 0x01, 0x00, 0x1E, 0xBD, 0x01, 0x00, 0x1F, 0xBD, 0x01, 0x00, 0x5D, -/* 00007340 */ 0xBD, 0x01, 0x00, 0xBE, 0xBD, 0x01, 0x00, 0xFA, 0xBD, 0x01, 0x00, 0x08, 0xBE, 0x01, 0x00, 0x09, -/* 00007350 */ 0xBE, 0x01, 0x00, 0x3A, 0xBE, 0x01, 0x00, 0x3B, 0xBE, 0x01, 0x00, 0x6C, 0xBE, 0x01, 0x00, 0xAC, -/* 00007360 */ 0xBE, 0x01, 0x00, 0xBA, 0xBE, 0x01, 0x00, 0xBB, 0xBE, 0x01, 0x00, 0xF1, 0xBE, 0x01, 0x00, 0xF2, -/* 00007370 */ 0xBE, 0x01, 0x00, 0x53, 0xBF, 0x01, 0x00, 0x93, 0xBF, 0x01, 0x00, 0xA1, 0xBF, 0x01, 0x00, 0xAD, -/* 00007380 */ 0xBF, 0x01, 0x00, 0xAE, 0xBF, 0x01, 0x00, 0xC3, 0xBF, 0x01, 0x00, 0xC9, 0xBF, 0x01, 0x00, 0xCA, -/* 00007390 */ 0xBF, 0x01, 0x00, 0x19, 0xC0, 0x01, 0x00, 0x32, 0xC0, 0x01, 0x00, 0x49, 0xC0, 0x01, 0x00, 0x9E, -/* 000073A0 */ 0xC0, 0x01, 0x00, 0xB0, 0xC0, 0x01, 0x00, 0x0E, 0xC1, 0x01, 0x00, 0x35, 0xC1, 0x01, 0x00, 0xC2, -/* 000073B0 */ 0xC1, 0x01, 0x00, 0xE9, 0xC1, 0x01, 0x00, 0xFB, 0xC1, 0x01, 0x00, 0x16, 0xC2, 0x01, 0x00, 0x3D, -/* 000073C0 */ 0xC2, 0x01, 0x00, 0x9F, 0xC2, 0x01, 0x00, 0xAD, 0xC2, 0x01, 0x00, 0xB9, 0xC2, 0x01, 0x00, 0x21, -/* 000073D0 */ 0xC3, 0x01, 0x00, 0x38, 0xC3, 0x01, 0x00, 0x3E, 0xC3, 0x01, 0x00, 0x3F, 0xC3, 0x01, 0x00, 0x95, -/* 000073E0 */ 0xC3, 0x01, 0x00, 0xC8, 0xC3, 0x01, 0x00, 0x01, 0xC4, 0x01, 0x00, 0x0B, 0xC4, 0x01, 0x00, 0x0C, -/* 000073F0 */ 0xC4, 0x01, 0x00, 0x44, 0xC4, 0x01, 0x00, 0x7F, 0xC4, 0x01, 0x00, 0xB8, 0xC4, 0x01, 0x00, 0xC2, -/* 00007400 */ 0xC4, 0x01, 0x00, 0xC3, 0xC4, 0x01, 0x00, 0xF8, 0xC4, 0x01, 0x00, 0xFE, 0xC4, 0x01, 0x00, 0xFF, -/* 00007410 */ 0xC4, 0x01, 0x00, 0x50, 0xC5, 0x01, 0x00, 0x83, 0xC5, 0x01, 0x00, 0xBC, 0xC5, 0x01, 0x00, 0xC6, -/* 00007420 */ 0xC5, 0x01, 0x00, 0xC7, 0xC5, 0x01, 0x00, 0xFF, 0xC5, 0x01, 0x00, 0x3A, 0xC6, 0x01, 0x00, 0x73, -/* 00007430 */ 0xC6, 0x01, 0x00, 0x7D, 0xC6, 0x01, 0x00, 0x7E, 0xC6, 0x01, 0x00, 0xAE, 0xC6, 0x01, 0x00, 0xB4, -/* 00007440 */ 0xC6, 0x01, 0x00, 0xB5, 0xC6, 0x01, 0x00, 0xDE, 0xC6, 0x01, 0x00, 0x19, 0xC7, 0x01, 0x00, 0x2E, -/* 00007450 */ 0xC7, 0x01, 0x00, 0x61, 0xC7, 0x01, 0x00, 0x62, 0xC7, 0x01, 0x00, 0x90, 0xC7, 0x01, 0x00, 0xBD, -/* 00007460 */ 0xC7, 0x01, 0x00, 0xBE, 0xC7, 0x01, 0x00, 0xF0, 0xC7, 0x01, 0x00, 0x26, 0xC8, 0x01, 0x00, 0x27, -/* 00007470 */ 0xC8, 0x01, 0x00, 0x6D, 0xC8, 0x01, 0x00, 0xE4, 0xC8, 0x01, 0x00, 0xF6, 0xC8, 0x01, 0x00, 0x04, -/* 00007480 */ 0xC9, 0x01, 0x00, 0x0E, 0xC9, 0x01, 0x00, 0x0F, 0xC9, 0x01, 0x00, 0x57, 0xC9, 0x01, 0x00, 0xD9, -/* 00007490 */ 0xC9, 0x01, 0x00, 0xEA, 0xC9, 0x01, 0x00, 0x4C, 0xCA, 0x01, 0x00, 0x56, 0xCA, 0x01, 0x00, 0x5D, -/* 000074A0 */ 0xCA, 0x01, 0x00, 0x5E, 0xCA, 0x01, 0x00, 0x9A, 0xCA, 0x01, 0x00, 0xFB, 0xCA, 0x01, 0x00, 0xFC, -/* 000074B0 */ 0xCA, 0x01, 0x00, 0x6F, 0xCB, 0x01, 0x00, 0xBF, 0xCB, 0x01, 0x00, 0x10, 0xCC, 0x01, 0x00, 0x93, -/* 000074C0 */ 0xCC, 0x01, 0x00, 0xEA, 0xCC, 0x01, 0x00, 0x52, 0xCD, 0x01, 0x00, 0x78, 0xCD, 0x01, 0x00, 0x79, -/* 000074D0 */ 0xCD, 0x01, 0x00, 0xD2, 0xCD, 0x01, 0x00, 0x5D, 0xCE, 0x01, 0x00, 0xB8, 0xCE, 0x01, 0x00, 0x24, -/* 000074E0 */ 0xCF, 0x01, 0x00, 0x4A, 0xCF, 0x01, 0x00, 0x4B, 0xCF, 0x01, 0x00, 0xA8, 0xCF, 0x01, 0x00, 0x37, -/* 000074F0 */ 0xD0, 0x01, 0x00, 0x94, 0xD0, 0x01, 0x00, 0x02, 0xD1, 0x01, 0x00, 0x28, 0xD1, 0x01, 0x00, 0x29, -/* 00007500 */ 0xD1, 0x01, 0x00, 0x6A, 0xD1, 0x01, 0x00, 0xDD, 0xD1, 0x01, 0x00, 0x17, 0xD2, 0x01, 0x00, 0x72, -/* 00007510 */ 0xD2, 0x01, 0x00, 0x98, 0xD2, 0x01, 0x00, 0x99, 0xD2, 0x01, 0x00, 0xF2, 0xD2, 0x01, 0x00, 0x4C, -/* 00007520 */ 0xD3, 0x01, 0x00, 0x9B, 0xD3, 0x01, 0x00, 0x17, 0xD4, 0x01, 0x00, 0x77, 0xD4, 0x01, 0x00, 0xDB, -/* 00007530 */ 0xD4, 0x01, 0x00, 0x41, 0xD5, 0x01, 0x00, 0x9A, 0xD5, 0x01, 0x00, 0x9B, 0xD5, 0x01, 0x00, 0x02, -/* 00007540 */ 0xD6, 0x01, 0x00, 0x47, 0xD6, 0x01, 0x00, 0x8A, 0xD6, 0x01, 0x00, 0xC3, 0xD6, 0x01, 0x00, 0xFE, -/* 00007550 */ 0xD6, 0x01, 0x00, 0x39, 0xD7, 0x01, 0x00, 0x77, 0xD7, 0x01, 0x00, 0xB4, 0xD7, 0x01, 0x00, 0xE9, -/* 00007560 */ 0xD7, 0x01, 0x00, 0x4A, 0xD8, 0x01, 0x00, 0x95, 0xD8, 0x01, 0x00, 0xE0, 0xD8, 0x01, 0x00, 0x2B, -/* 00007570 */ 0xD9, 0x01, 0x00, 0x75, 0xD9, 0x01, 0x00, 0x76, 0xD9, 0x01, 0x00, 0xF5, 0xD9, 0x01, 0x00, 0x90, -/* 00007580 */ 0xDA, 0x01, 0x00, 0xB0, 0xDA, 0x01, 0x00, 0xD0, 0xDA, 0x01, 0x00, 0xEE, 0xDA, 0x01, 0x00, 0xFC, -/* 00007590 */ 0xDA, 0x01, 0x00, 0xFD, 0xDA, 0x01, 0x00, 0x60, 0xDB, 0x01, 0x00, 0xDB, 0xDB, 0x01, 0x00, 0x1B, -/* 000075A0 */ 0xDC, 0x01, 0x00, 0x4C, 0xDC, 0x01, 0x00, 0xCB, 0xDC, 0x01, 0x00, 0x21, 0xDD, 0x01, 0x00, 0x65, -/* 000075B0 */ 0xDD, 0x01, 0x00, 0x66, 0xDD, 0x01, 0x00, 0xE5, 0xDD, 0x01, 0x00, 0x2D, 0xDE, 0x01, 0x00, 0x56, -/* 000075C0 */ 0xDE, 0x01, 0x00, 0x9B, 0xDE, 0x01, 0x00, 0xAD, 0xDE, 0x01, 0x00, 0xBD, 0xDE, 0x01, 0x00, 0xBE, -/* 000075D0 */ 0xDE, 0x01, 0x00, 0xF6, 0xDE, 0x01, 0x00, 0x02, 0xDF, 0x01, 0x00, 0x1B, 0xDF, 0x01, 0x00, 0x25, -/* 000075E0 */ 0xDF, 0x01, 0x00, 0x26, 0xDF, 0x01, 0x00, 0x77, 0xDF, 0x01, 0x00, 0xA5, 0xDF, 0x01, 0x00, 0xD0, -/* 000075F0 */ 0xDF, 0x01, 0x00, 0xFC, 0xDF, 0x01, 0x00, 0x37, 0xE0, 0x01, 0x00, 0x61, 0xE0, 0x01, 0x00, 0x6B, -/* 00007600 */ 0xE0, 0x01, 0x00, 0x6C, 0xE0, 0x01, 0x00, 0x8C, 0xE0, 0x01, 0x00, 0xAF, 0xE0, 0x01, 0x00, 0xD1, -/* 00007610 */ 0xE0, 0x01, 0x00, 0x25, 0xE1, 0x01, 0x00, 0x4E, 0xE1, 0x01, 0x00, 0xB8, 0xE1, 0x01, 0x00, 0xD1, -/* 00007620 */ 0xE1, 0x01, 0x00, 0x23, 0xE2, 0x01, 0x00, 0x6C, 0xE2, 0x01, 0x00, 0x92, 0xE2, 0x01, 0x00, 0xF4, -/* 00007630 */ 0xE2, 0x01, 0x00, 0x02, 0xE3, 0x01, 0x00, 0x13, 0xE3, 0x01, 0x00, 0x5C, 0xE3, 0x01, 0x00, 0xB8, -/* 00007640 */ 0xE3, 0x01, 0x00, 0xD7, 0xE3, 0x01, 0x00, 0xF9, 0xE3, 0x01, 0x00, 0x03, 0xE4, 0x01, 0x00, 0x04, -/* 00007650 */ 0xE4, 0x01, 0x00, 0x2B, 0xE4, 0x01, 0x00, 0x57, 0xE4, 0x01, 0x00, 0x81, 0xE4, 0x01, 0x00, 0x8B, -/* 00007660 */ 0xE4, 0x01, 0x00, 0x8C, 0xE4, 0x01, 0x00, 0xE8, 0xE4, 0x01, 0x00, 0x3D, 0xE5, 0x01, 0x00, 0x63, -/* 00007670 */ 0xE5, 0x01, 0x00, 0xA1, 0xE5, 0x01, 0x00, 0xB6, 0xE5, 0x01, 0x00, 0xF6, 0xE5, 0x01, 0x00, 0x04, -/* 00007680 */ 0xE6, 0x01, 0x00, 0x0F, 0xE6, 0x01, 0x00, 0x10, 0xE6, 0x01, 0x00, 0x66, 0xE6, 0x01, 0x00, 0x99, -/* 00007690 */ 0xE6, 0x01, 0x00, 0xE6, 0xE6, 0x01, 0x00, 0x3A, 0xE7, 0x01, 0x00, 0x64, 0xE7, 0x01, 0x00, 0x6E, -/* 000076A0 */ 0xE7, 0x01, 0x00, 0x6F, 0xE7, 0x01, 0x00, 0xB1, 0xE7, 0x01, 0x00, 0xDE, 0xE7, 0x01, 0x00, 0x38, -/* 000076B0 */ 0xE8, 0x01, 0x00, 0x49, 0xE8, 0x01, 0x00, 0x9D, 0xE8, 0x01, 0x00, 0xA7, 0xE8, 0x01, 0x00, 0xA8, -/* 000076C0 */ 0xE8, 0x01, 0x00, 0xCE, 0xE8, 0x01, 0x00, 0xD5, 0xE8, 0x01, 0x00, 0xD6, 0xE8, 0x01, 0x00, 0x0B, -/* 000076D0 */ 0xE9, 0x01, 0x00, 0x2D, 0xE9, 0x01, 0x00, 0x2E, 0xE9, 0x01, 0x00, 0x6A, 0xE9, 0x01, 0x00, 0x6B, -/* 000076E0 */ 0xE9, 0x01, 0x00, 0xB4, 0xE9, 0x01, 0x00, 0xE7, 0xE9, 0x01, 0x00, 0x17, 0xEA, 0x01, 0x00, 0x29, -/* 000076F0 */ 0xEA, 0x01, 0x00, 0x2A, 0xEA, 0x01, 0x00, 0xB9, 0xEA, 0x01, 0x00, 0x0F, 0xEB, 0x01, 0x00, 0x21, -/* 00007700 */ 0xEB, 0x01, 0x00, 0x22, 0xEB, 0x01, 0x00, 0x5B, 0xEB, 0x01, 0x00, 0x5C, 0xEB, 0x01, 0x00, 0x7F, -/* 00007710 */ 0xEB, 0x01, 0x00, 0xB5, 0xEB, 0x01, 0x00, 0xEB, 0xEB, 0x01, 0x00, 0x04, 0xEC, 0x01, 0x00, 0x3E, -/* 00007720 */ 0xEC, 0x01, 0x00, 0x50, 0xEC, 0x01, 0x00, 0x51, 0xEC, 0x01, 0x00, 0xC2, 0xEC, 0x01, 0x00, 0x21, -/* 00007730 */ 0xED, 0x01, 0x00, 0xA2, 0xED, 0x01, 0x00, 0x10, 0xEE, 0x01, 0x00, 0x83, 0xEE, 0x01, 0x00, 0xE5, -/* 00007740 */ 0xEE, 0x01, 0x00, 0xE6, 0xEE, 0x01, 0x00, 0x1E, 0xEF, 0x01, 0x00, 0x5F, 0xEF, 0x01, 0x00, 0xCD, -/* 00007750 */ 0xEF, 0x01, 0x00, 0xCE, 0xEF, 0x01, 0x00, 0xF9, 0xEF, 0x01, 0x00, 0x62, 0xF0, 0x01, 0x00, 0xA7, -/* 00007760 */ 0xF0, 0x01, 0x00, 0xA8, 0xF0, 0x01, 0x00, 0xDA, 0xF0, 0x01, 0x00, 0x45, 0xF1, 0x01, 0x00, 0xC7, -/* 00007770 */ 0xF1, 0x01, 0x00, 0xF3, 0xF1, 0x01, 0x00, 0x3F, 0xF2, 0x01, 0x00, 0x86, 0xF2, 0x01, 0x00, 0x22, -/* 00007780 */ 0xF3, 0x01, 0x00, 0x6E, 0xF3, 0x01, 0x00, 0xA5, 0xF3, 0x01, 0x00, 0x29, 0xF4, 0x01, 0x00, 0x4E, -/* 00007790 */ 0xF4, 0x01, 0x00, 0x7E, 0xF4, 0x01, 0x00, 0x9C, 0xF4, 0x01, 0x00, 0x3F, 0xF5, 0x01, 0x00, 0x9E, -/* 000077A0 */ 0xF5, 0x01, 0x00, 0xCD, 0xF5, 0x01, 0x00, 0xE7, 0xF5, 0x01, 0x00, 0xFF, 0xF5, 0x01, 0x00, 0x11, -/* 000077B0 */ 0xF6, 0x01, 0x00, 0x40, 0xF6, 0x01, 0x00, 0xAF, 0xF6, 0x01, 0x00, 0xDE, 0xF6, 0x01, 0x00, 0x6C, -/* 000077C0 */ 0xF7, 0x01, 0x00, 0xA3, 0xF7, 0x01, 0x00, 0x0D, 0xF8, 0x01, 0x00, 0x27, 0xF8, 0x01, 0x00, 0x3D, -/* 000077D0 */ 0xF8, 0x01, 0x00, 0x58, 0xF8, 0x01, 0x00, 0x87, 0xF8, 0x01, 0x00, 0x9D, 0xF8, 0x01, 0x00, 0xAF, -/* 000077E0 */ 0xF8, 0x01, 0x00, 0xB0, 0xF8, 0x01, 0x00, 0xDF, 0xF8, 0x01, 0x00, 0x0E, 0xF9, 0x01, 0x00, 0x28, -/* 000077F0 */ 0xF9, 0x01, 0x00, 0xAE, 0xF9, 0x01, 0x00, 0xD0, 0xF9, 0x01, 0x00, 0xFE, 0xF9, 0x01, 0x00, 0x2C, -/* 00007800 */ 0xFA, 0x01, 0x00, 0x2D, 0xFA, 0x01, 0x00, 0x9E, 0xFA, 0x01, 0x00, 0x27, 0xFB, 0x01, 0x00, 0x90, -/* 00007810 */ 0xFB, 0x01, 0x00, 0xCF, 0xFB, 0x01, 0x00, 0xE5, 0xFB, 0x01, 0x00, 0xE6, 0xFB, 0x01, 0x00, 0x0B, -/* 00007820 */ 0xFC, 0x01, 0x00, 0x38, 0xFC, 0x01, 0x00, 0x65, 0xFC, 0x01, 0x00, 0x92, 0xFC, 0x01, 0x00, 0xAF, -/* 00007830 */ 0xFC, 0x01, 0x00, 0xDC, 0xFC, 0x01, 0x00, 0xF2, 0xFC, 0x01, 0x00, 0x04, 0xFD, 0x01, 0x00, 0x05, -/* 00007840 */ 0xFD, 0x01, 0x00, 0x36, 0xFD, 0x01, 0x00, 0x63, 0xFD, 0x01, 0x00, 0x75, 0xFD, 0x01, 0x00, 0x76, -/* 00007850 */ 0xFD, 0x01, 0x00, 0xA3, 0xFD, 0x01, 0x00, 0xC8, 0xFD, 0x01, 0x00, 0xDA, 0xFD, 0x01, 0x00, 0xDB, -/* 00007860 */ 0xFD, 0x01, 0x00, 0x0C, 0xFE, 0x01, 0x00, 0x3A, 0xFE, 0x01, 0x00, 0x87, 0xFE, 0x01, 0x00, 0xCF, -/* 00007870 */ 0xFE, 0x01, 0x00, 0xF9, 0xFE, 0x01, 0x00, 0x2F, 0xFF, 0x01, 0x00, 0x71, 0xFF, 0x01, 0x00, 0xA3, -/* 00007880 */ 0xFF, 0x01, 0x00, 0xD1, 0xFF, 0x01, 0x00, 0x03, 0x00, 0x02, 0x00, 0x3A, 0x00, 0x02, 0x00, 0x48, -/* 00007890 */ 0x00, 0x02, 0x00, 0x49, 0x00, 0x02, 0x00, 0xB8, 0x00, 0x02, 0x00, 0xE1, 0x00, 0x02, 0x00, 0x1C, -/* 000078A0 */ 0x01, 0x02, 0x00, 0x76, 0x01, 0x02, 0x00, 0x88, 0x01, 0x02, 0x00, 0xB2, 0x01, 0x02, 0x00, 0xE2, -/* 000078B0 */ 0x01, 0x02, 0x00, 0xF4, 0x01, 0x02, 0x00, 0x98, 0x02, 0x02, 0x00, 0xC4, 0x02, 0x02, 0x00, 0xED, -/* 000078C0 */ 0x02, 0x02, 0x00, 0x27, 0x03, 0x02, 0x00, 0x74, 0x03, 0x02, 0x00, 0xAA, 0x03, 0x02, 0x00, 0xC7, -/* 000078D0 */ 0x03, 0x02, 0x00, 0xE1, 0x03, 0x02, 0x00, 0x15, 0x04, 0x02, 0x00, 0x61, 0x04, 0x02, 0x00, 0x96, -/* 000078E0 */ 0x04, 0x02, 0x00, 0xC1, 0x04, 0x02, 0x00, 0x08, 0x05, 0x02, 0x00, 0x1C, 0x05, 0x02, 0x00, 0x58, -/* 000078F0 */ 0x05, 0x02, 0x00, 0x59, 0x05, 0x02, 0x00, 0x80, 0x05, 0x02, 0x00, 0x81, 0x05, 0x02, 0x00, 0xCF, -/* 00007900 */ 0x05, 0x02, 0x00, 0x0E, 0x06, 0x02, 0x00, 0x4D, 0x06, 0x02, 0x00, 0x63, 0x06, 0x02, 0x00, 0x64, -/* 00007910 */ 0x06, 0x02, 0x00, 0x9B, 0x06, 0x02, 0x00, 0xCF, 0x06, 0x02, 0x00, 0x18, 0x07, 0x02, 0x00, 0x2E, -/* 00007920 */ 0x07, 0x02, 0x00, 0x2F, 0x07, 0x02, 0x00, 0x6A, 0x07, 0x02, 0x00, 0xB0, 0x07, 0x02, 0x00, 0xB1, -/* 00007930 */ 0x07, 0x02, 0x00, 0xE7, 0x07, 0x02, 0x00, 0x26, 0x08, 0x02, 0x00, 0x6B, 0x08, 0x02, 0x00, 0x81, -/* 00007940 */ 0x08, 0x02, 0x00, 0x82, 0x08, 0x02, 0x00, 0xCA, 0x08, 0x02, 0x00, 0xCB, 0x08, 0x02, 0x00, 0xF8, -/* 00007950 */ 0x08, 0x02, 0x00, 0x60, 0x09, 0x02, 0x00, 0x9D, 0x09, 0x02, 0x00, 0xBD, 0x09, 0x02, 0x00, 0xCF, -/* 00007960 */ 0x09, 0x02, 0x00, 0x0D, 0x0A, 0x02, 0x00, 0x0E, 0x0A, 0x02, 0x00, 0x37, 0x0A, 0x02, 0x00, 0x6B, -/* 00007970 */ 0x0A, 0x02, 0x00, 0xCD, 0x0A, 0x02, 0x00, 0xE3, 0x0A, 0x02, 0x00, 0xE4, 0x0A, 0x02, 0x00, 0x2B, -/* 00007980 */ 0x0B, 0x02, 0x00, 0x88, 0x0B, 0x02, 0x00, 0xEA, 0x0B, 0x02, 0x00, 0x00, 0x0C, 0x02, 0x00, 0x01, -/* 00007990 */ 0x0C, 0x02, 0x00, 0x24, 0x0C, 0x02, 0x00, 0x47, 0x0C, 0x02, 0x00, 0x48, 0x0C, 0x02, 0x00, 0x82, -/* 000079A0 */ 0x0C, 0x02, 0x00, 0x9D, 0x0C, 0x02, 0x00, 0xB8, 0x0C, 0x02, 0x00, 0xF1, 0x0C, 0x02, 0x00, 0x42, -/* 000079B0 */ 0x0D, 0x02, 0x00, 0x7C, 0x0D, 0x02, 0x00, 0xAC, 0x0D, 0x02, 0x00, 0xF8, 0x0D, 0x02, 0x00, 0x10, -/* 000079C0 */ 0x0E, 0x02, 0x00, 0x22, 0x0E, 0x02, 0x00, 0x71, 0x0E, 0x02, 0x00, 0x72, 0x0E, 0x02, 0x00, 0x04, -/* 000079D0 */ 0x0F, 0x02, 0x00, 0x05, 0x0F, 0x02, 0x00, 0x96, 0x0F, 0x02, 0x00, 0xDA, 0x0F, 0x02, 0x00, 0xDB, -/* 000079E0 */ 0x0F, 0x02, 0x00, 0x70, 0x10, 0x02, 0x00, 0x71, 0x10, 0x02, 0x00, 0xBF, 0x10, 0x02, 0x00, 0xF7, -/* 000079F0 */ 0x10, 0x02, 0x00, 0x2F, 0x11, 0x02, 0x00, 0x9D, 0x11, 0x02, 0x00, 0xB7, 0x11, 0x02, 0x00, 0x02, -/* 00007A00 */ 0x12, 0x02, 0x00, 0x63, 0x12, 0x02, 0x00, 0xD1, 0x12, 0x02, 0x00, 0xEB, 0x12, 0x02, 0x00, 0xEC, -/* 00007A10 */ 0x12, 0x02, 0x00, 0x0D, 0x13, 0x02, 0x00, 0x48, 0x13, 0x02, 0x00, 0x81, 0x13, 0x02, 0x00, 0xC6, -/* 00007A20 */ 0x13, 0x02, 0x00, 0x17, 0x14, 0x02, 0x00, 0x72, 0x14, 0x02, 0x00, 0x07, 0x15, 0x02, 0x00, 0x9C, -/* 00007A30 */ 0x15, 0x02, 0x00, 0xB6, 0x15, 0x02, 0x00, 0x03, 0x16, 0x02, 0x00, 0x17, 0x16, 0x02, 0x00, 0x18, -/* 00007A40 */ 0x16, 0x02, 0x00, 0x5E, 0x16, 0x02, 0x00, 0xA6, 0x16, 0x02, 0x00, 0xDE, 0x16, 0x02, 0x00, 0x44, -/* 00007A50 */ 0x17, 0x02, 0x00, 0x5E, 0x17, 0x02, 0x00, 0x5F, 0x17, 0x02, 0x00, 0xAA, 0x17, 0x02, 0x00, 0x0B, -/* 00007A60 */ 0x18, 0x02, 0x00, 0x71, 0x18, 0x02, 0x00, 0x8B, 0x18, 0x02, 0x00, 0x8C, 0x18, 0x02, 0x00, 0xC8, -/* 00007A70 */ 0x18, 0x02, 0x00, 0x06, 0x19, 0x02, 0x00, 0x1A, 0x19, 0x02, 0x00, 0x1B, 0x19, 0x02, 0x00, 0x3C, -/* 00007A80 */ 0x19, 0x02, 0x00, 0x4A, 0x19, 0x02, 0x00, 0x54, 0x19, 0x02, 0x00, 0x9F, 0x19, 0x02, 0x00, 0xB9, -/* 00007A90 */ 0x19, 0x02, 0x00, 0xC3, 0x19, 0x02, 0x00, 0xC4, 0x19, 0x02, 0x00, 0xFE, 0x19, 0x02, 0x00, 0x24, -/* 00007AA0 */ 0x1A, 0x02, 0x00, 0x60, 0x1A, 0x02, 0x00, 0xB1, 0x1A, 0x02, 0x00, 0xE8, 0x1A, 0x02, 0x00, 0x18, -/* 00007AB0 */ 0x1B, 0x02, 0x00, 0x2A, 0x1B, 0x02, 0x00, 0x2B, 0x1B, 0x02, 0x00, 0xC2, 0x1B, 0x02, 0x00, 0x20, -/* 00007AC0 */ 0x1C, 0x02, 0x00, 0x32, 0x1C, 0x02, 0x00, 0x33, 0x1C, 0x02, 0x00, 0x70, 0x1C, 0x02, 0x00, 0x71, -/* 00007AD0 */ 0x1C, 0x02, 0x00, 0x94, 0x1C, 0x02, 0x00, 0xCA, 0x1C, 0x02, 0x00, 0x00, 0x1D, 0x02, 0x00, 0x19, -/* 00007AE0 */ 0x1D, 0x02, 0x00, 0x53, 0x1D, 0x02, 0x00, 0x65, 0x1D, 0x02, 0x00, 0x66, 0x1D, 0x02, 0x00, 0xD7, -/* 00007AF0 */ 0x1D, 0x02, 0x00, 0x49, 0x1E, 0x02, 0x00, 0x4A, 0x1E, 0x02, 0x00, 0x95, 0x1E, 0x02, 0x00, 0xC0, -/* 00007B00 */ 0x1E, 0x02, 0x00, 0x00, 0x1F, 0x02, 0x00, 0x33, 0x1F, 0x02, 0x00, 0x74, 0x1F, 0x02, 0x00, 0x86, -/* 00007B10 */ 0x1F, 0x02, 0x00, 0x87, 0x1F, 0x02, 0x00, 0xE6, 0x1F, 0x02, 0x00, 0x63, 0x20, 0x02, 0x00, 0x93, -/* 00007B20 */ 0x20, 0x02, 0x00, 0x94, 0x20, 0x02, 0x00, 0xFB, 0x20, 0x02, 0x00, 0x32, 0x21, 0x02, 0x00, 0x69, -/* 00007B30 */ 0x21, 0x02, 0x00, 0xA7, 0x21, 0x02, 0x00, 0xA8, 0x21, 0x02, 0x00, 0xF9, 0x21, 0x02, 0x00, 0x4A, -/* 00007B40 */ 0x22, 0x02, 0x00, 0x4B, 0x22, 0x02, 0x00, 0xC5, 0x22, 0x02, 0x00, 0x34, 0x23, 0x02, 0x00, 0xBB, -/* 00007B50 */ 0x23, 0x02, 0x00, 0xCD, 0x23, 0x02, 0x00, 0xCE, 0x23, 0x02, 0x00, 0x2F, 0x24, 0x02, 0x00, 0x30, -/* 00007B60 */ 0x24, 0x02, 0x00, 0x68, 0x24, 0x02, 0x00, 0xA9, 0x24, 0x02, 0x00, 0x16, 0x25, 0x02, 0x00, 0x17, -/* 00007B70 */ 0x25, 0x02, 0x00, 0x4B, 0x25, 0x02, 0x00, 0xA9, 0x25, 0x02, 0x00, 0xF2, 0x25, 0x02, 0x00, 0x04, -/* 00007B80 */ 0x26, 0x02, 0x00, 0x05, 0x26, 0x02, 0x00, 0x31, 0x26, 0x02, 0x00, 0x6C, 0x26, 0x02, 0x00, 0xA9, -/* 00007B90 */ 0x26, 0x02, 0x00, 0xBF, 0x26, 0x02, 0x00, 0x15, 0x27, 0x02, 0x00, 0x2F, 0x27, 0x02, 0x00, 0x7B, -/* 00007BA0 */ 0x27, 0x02, 0x00, 0x9D, 0x27, 0x02, 0x00, 0xCB, 0x27, 0x02, 0x00, 0x18, 0x28, 0x02, 0x00, 0x2E, -/* 00007BB0 */ 0x28, 0x02, 0x00, 0xA4, 0x28, 0x02, 0x00, 0x08, 0x29, 0x02, 0x00, 0x21, 0x29, 0x02, 0x00, 0x4B, -/* 00007BC0 */ 0x29, 0x02, 0x00, 0x7C, 0x29, 0x02, 0x00, 0xE5, 0x29, 0x02, 0x00, 0x14, 0x2A, 0x02, 0x00, 0x6F, -/* 00007BD0 */ 0x2A, 0x02, 0x00, 0x8C, 0x2A, 0x02, 0x00, 0xE6, 0x2A, 0x02, 0x00, 0xFC, 0x2A, 0x02, 0x00, 0x0E, -/* 00007BE0 */ 0x2B, 0x02, 0x00, 0x0F, 0x2B, 0x02, 0x00, 0xA3, 0x2B, 0x02, 0x00, 0xA4, 0x2B, 0x02, 0x00, 0xD5, -/* 00007BF0 */ 0x2B, 0x02, 0x00, 0x0D, 0x2C, 0x02, 0x00, 0x50, 0x2C, 0x02, 0x00, 0x7E, 0x2C, 0x02, 0x00, 0x7F, -/* 00007C00 */ 0x2C, 0x02, 0x00, 0xAD, 0x2C, 0x02, 0x00, 0xE5, 0x2C, 0x02, 0x00, 0xF7, 0x2C, 0x02, 0x00, 0xF8, -/* 00007C10 */ 0x2C, 0x02, 0x00, 0x2D, 0x2D, 0x02, 0x00, 0x73, 0x2D, 0x02, 0x00, 0xD2, 0x2D, 0x02, 0x00, 0x0A, -/* 00007C20 */ 0x2E, 0x02, 0x00, 0x6C, 0x2E, 0x02, 0x00, 0xA9, 0x2E, 0x02, 0x00, 0x09, 0x2F, 0x02, 0x00, 0x46, -/* 00007C30 */ 0x2F, 0x02, 0x00, 0xA6, 0x2F, 0x02, 0x00, 0xBC, 0x2F, 0x02, 0x00, 0xCE, 0x2F, 0x02, 0x00, 0xCF, -/* 00007C40 */ 0x2F, 0x02, 0x00, 0x1B, 0x30, 0x02, 0x00, 0x69, 0x30, 0x02, 0x00, 0xB7, 0x30, 0x02, 0x00, 0xB8, -/* 00007C50 */ 0x30, 0x02, 0x00, 0xF6, 0x30, 0x02, 0x00, 0x4E, 0x31, 0x02, 0x00, 0xA6, 0x31, 0x02, 0x00, 0xB8, -/* 00007C60 */ 0x31, 0x02, 0x00, 0xB9, 0x31, 0x02, 0x00, 0xF9, 0x31, 0x02, 0x00, 0x33, 0x32, 0x02, 0x00, 0x34, -/* 00007C70 */ 0x32, 0x02, 0x00, 0x4A, 0x32, 0x02, 0x00, 0x9E, 0x32, 0x02, 0x00, 0xDC, 0x32, 0x02, 0x00, 0xFA, -/* 00007C80 */ 0x32, 0x02, 0x00, 0x24, 0x33, 0x02, 0x00, 0x7B, 0x33, 0x02, 0x00, 0x00, 0x34, 0x02, 0x00, 0x65, -/* 00007C90 */ 0x34, 0x02, 0x00, 0xA0, 0x34, 0x02, 0x00, 0xB2, 0x34, 0x02, 0x00, 0xB3, 0x34, 0x02, 0x00, 0xEA, -/* 00007CA0 */ 0x34, 0x02, 0x00, 0x4B, 0x35, 0x02, 0x00, 0x5D, 0x35, 0x02, 0x00, 0x5E, 0x35, 0x02, 0x00, 0xDC, -/* 00007CB0 */ 0x35, 0x02, 0x00, 0x1B, 0x36, 0x02, 0x00, 0x29, 0x36, 0x02, 0x00, 0x2A, 0x36, 0x02, 0x00, 0x9A, -/* 00007CC0 */ 0x36, 0x02, 0x00, 0xE9, 0x36, 0x02, 0x00, 0x4A, 0x37, 0x02, 0x00, 0x5C, 0x37, 0x02, 0x00, 0x5D, -/* 00007CD0 */ 0x37, 0x02, 0x00, 0x97, 0x37, 0x02, 0x00, 0xE8, 0x37, 0x02, 0x00, 0xE9, 0x37, 0x02, 0x00, 0x1A, -/* 00007CE0 */ 0x38, 0x02, 0x00, 0x60, 0x38, 0x02, 0x00, 0x9D, 0x38, 0x02, 0x00, 0x9E, 0x38, 0x02, 0x00, 0xC5, -/* 00007CF0 */ 0x38, 0x02, 0x00, 0x17, 0x39, 0x02, 0x00, 0x56, 0x39, 0x02, 0x00, 0x99, 0x39, 0x02, 0x00, 0xAF, -/* 00007D00 */ 0x39, 0x02, 0x00, 0xB0, 0x39, 0x02, 0x00, 0xE7, 0x39, 0x02, 0x00, 0xE8, 0x39, 0x02, 0x00, 0x1C, -/* 00007D10 */ 0x3A, 0x02, 0x00, 0x69, 0x3A, 0x02, 0x00, 0x7F, 0x3A, 0x02, 0x00, 0x80, 0x3A, 0x02, 0x00, 0xBB, -/* 00007D20 */ 0x3A, 0x02, 0x00, 0x01, 0x3B, 0x02, 0x00, 0x02, 0x3B, 0x02, 0x00, 0x38, 0x3B, 0x02, 0x00, 0x77, -/* 00007D30 */ 0x3B, 0x02, 0x00, 0xBC, 0x3B, 0x02, 0x00, 0xD2, 0x3B, 0x02, 0x00, 0xD3, 0x3B, 0x02, 0x00, 0x1F, -/* 00007D40 */ 0x3C, 0x02, 0x00, 0x20, 0x3C, 0x02, 0x00, 0x85, 0x3C, 0x02, 0x00, 0xC1, 0x3C, 0x02, 0x00, 0xC2, -/* 00007D50 */ 0x3C, 0x02, 0x00, 0xE2, 0x3C, 0x02, 0x00, 0xF4, 0x3C, 0x02, 0x00, 0x3A, 0x3D, 0x02, 0x00, 0x3B, -/* 00007D60 */ 0x3D, 0x02, 0x00, 0x60, 0x3D, 0x02, 0x00, 0x8E, 0x3D, 0x02, 0x00, 0x8F, 0x3D, 0x02, 0x00, 0xC3, -/* 00007D70 */ 0x3D, 0x02, 0x00, 0x2C, 0x3E, 0x02, 0x00, 0x42, 0x3E, 0x02, 0x00, 0x43, 0x3E, 0x02, 0x00, 0x8A, -/* 00007D80 */ 0x3E, 0x02, 0x00, 0xEB, 0x3E, 0x02, 0x00, 0x54, 0x3F, 0x02, 0x00, 0x6A, 0x3F, 0x02, 0x00, 0x6B, -/* 00007D90 */ 0x3F, 0x02, 0x00, 0xB6, 0x3F, 0x02, 0x00, 0xC8, 0x3F, 0x02, 0x00, 0x19, 0x40, 0x02, 0x00, 0x1A, -/* 00007DA0 */ 0x40, 0x02, 0x00, 0xB4, 0x40, 0x02, 0x00, 0xB5, 0x40, 0x02, 0x00, 0x31, 0x41, 0x02, 0x00, 0xAF, -/* 00007DB0 */ 0x41, 0x02, 0x00, 0xD3, 0x41, 0x02, 0x00, 0xD4, 0x41, 0x02, 0x00, 0x6D, 0x42, 0x02, 0x00, 0xB5, -/* 00007DC0 */ 0x42, 0x02, 0x00, 0x52, 0x43, 0x02, 0x00, 0x53, 0x43, 0x02, 0x00, 0xA5, 0x43, 0x02, 0x00, 0xDD, -/* 00007DD0 */ 0x43, 0x02, 0x00, 0x15, 0x44, 0x02, 0x00, 0x8B, 0x44, 0x02, 0x00, 0xA5, 0x44, 0x02, 0x00, 0xF0, -/* 00007DE0 */ 0x44, 0x02, 0x00, 0x55, 0x45, 0x02, 0x00, 0xCB, 0x45, 0x02, 0x00, 0xE5, 0x45, 0x02, 0x00, 0xE6, -/* 00007DF0 */ 0x45, 0x02, 0x00, 0x2C, 0x46, 0x02, 0x00, 0x2D, 0x46, 0x02, 0x00, 0x89, 0x46, 0x02, 0x00, 0xDF, -/* 00007E00 */ 0x46, 0x02, 0x00, 0x36, 0x47, 0x02, 0x00, 0x54, 0x47, 0x02, 0x00, 0x70, 0x47, 0x02, 0x00, 0x71, -/* 00007E10 */ 0x47, 0x02, 0x00, 0xB3, 0x47, 0x02, 0x00, 0x00, 0x48, 0x02, 0x00, 0x14, 0x48, 0x02, 0x00, 0x15, -/* 00007E20 */ 0x48, 0x02, 0x00, 0x5E, 0x48, 0x02, 0x00, 0xA5, 0x48, 0x02, 0x00, 0xDD, 0x48, 0x02, 0x00, 0x4A, -/* 00007E30 */ 0x49, 0x02, 0x00, 0x64, 0x49, 0x02, 0x00, 0x65, 0x49, 0x02, 0x00, 0xB0, 0x49, 0x02, 0x00, 0x15, -/* 00007E40 */ 0x4A, 0x02, 0x00, 0x82, 0x4A, 0x02, 0x00, 0x9C, 0x4A, 0x02, 0x00, 0x9D, 0x4A, 0x02, 0x00, 0xD8, -/* 00007E50 */ 0x4A, 0x02, 0x00, 0x16, 0x4B, 0x02, 0x00, 0x2A, 0x4B, 0x02, 0x00, 0x2B, 0x4B, 0x02, 0x00, 0x50, -/* 00007E60 */ 0x4B, 0x02, 0x00, 0x5E, 0x4B, 0x02, 0x00, 0x68, 0x4B, 0x02, 0x00, 0xB7, 0x4B, 0x02, 0x00, 0xD1, -/* 00007E70 */ 0x4B, 0x02, 0x00, 0xDB, 0x4B, 0x02, 0x00, 0xDC, 0x4B, 0x02, 0x00, 0x5C, 0x4C, 0x02, 0x00, 0x84, -/* 00007E80 */ 0x4C, 0x02, 0x00, 0xBE, 0x4C, 0x02, 0x00, 0x04, 0x4D, 0x02, 0x00, 0x31, 0x4D, 0x02, 0x00, 0x67, -/* 00007E90 */ 0x4D, 0x02, 0x00, 0x80, 0x4D, 0x02, 0x00, 0xBA, 0x4D, 0x02, 0x00, 0xCC, 0x4D, 0x02, 0x00, 0xCD, -/* 00007EA0 */ 0x4D, 0x02, 0x00, 0xF6, 0x4D, 0x02, 0x00, 0x37, 0x4E, 0x02, 0x00, 0xCA, 0x4E, 0x02, 0x00, 0xF8, -/* 00007EB0 */ 0x4E, 0x02, 0x00, 0x0E, 0x4F, 0x02, 0x00, 0x20, 0x4F, 0x02, 0x00, 0x61, 0x4F, 0x02, 0x00, 0xD7, -/* 00007EC0 */ 0x4F, 0x02, 0x00, 0x05, 0x50, 0x02, 0x00, 0x1B, 0x50, 0x02, 0x00, 0x2D, 0x50, 0x02, 0x00, 0x2E, -/* 00007ED0 */ 0x50, 0x02, 0x00, 0x81, 0x50, 0x02, 0x00, 0xBD, 0x50, 0x02, 0x00, 0xF7, 0x50, 0x02, 0x00, 0x34, -/* 00007EE0 */ 0x51, 0x02, 0x00, 0x4C, 0x51, 0x02, 0x00, 0x89, 0x51, 0x02, 0x00, 0xC3, 0x51, 0x02, 0x00, 0x00, -/* 00007EF0 */ 0x52, 0x02, 0x00, 0x18, 0x52, 0x02, 0x00, 0x53, 0x52, 0x02, 0x00, 0x8D, 0x52, 0x02, 0x00, 0xCA, -/* 00007F00 */ 0x52, 0x02, 0x00, 0xE2, 0x52, 0x02, 0x00, 0xF4, 0x52, 0x02, 0x00, 0x47, 0x53, 0x02, 0x00, 0x83, -/* 00007F10 */ 0x53, 0x02, 0x00, 0xBD, 0x53, 0x02, 0x00, 0xFA, 0x53, 0x02, 0x00, 0x12, 0x54, 0x02, 0x00, 0x50, -/* 00007F20 */ 0x54, 0x02, 0x00, 0x8A, 0x54, 0x02, 0x00, 0xC7, 0x54, 0x02, 0x00, 0xDF, 0x54, 0x02, 0x00, 0x1D, -/* 00007F30 */ 0x55, 0x02, 0x00, 0x57, 0x55, 0x02, 0x00, 0x94, 0x55, 0x02, 0x00, 0xAC, 0x55, 0x02, 0x00, 0xBE, -/* 00007F40 */ 0x55, 0x02, 0x00, 0xDE, 0x55, 0x02, 0x00, 0xEC, 0x55, 0x02, 0x00, 0xED, 0x55, 0x02, 0x00, 0x77, -/* 00007F50 */ 0x56, 0x02, 0x00, 0xB4, 0x56, 0x02, 0x00, 0xD7, 0x56, 0x02, 0x00, 0xD8, 0x56, 0x02, 0x00, 0xFF, -/* 00007F60 */ 0x56, 0x02, 0x00, 0x56, 0x57, 0x02, 0x00, 0xB6, 0x57, 0x02, 0x00, 0xF3, 0x57, 0x02, 0x00, 0x4C, -/* 00007F70 */ 0x58, 0x02, 0x00, 0x62, 0x58, 0x02, 0x00, 0x74, 0x58, 0x02, 0x00, 0x75, 0x58, 0x02, 0x00, 0xA0, -/* 00007F80 */ 0x58, 0x02, 0x00, 0xC4, 0x58, 0x02, 0x00, 0xFA, 0x58, 0x02, 0x00, 0x55, 0x59, 0x02, 0x00, 0x92, -/* 00007F90 */ 0x59, 0x02, 0x00, 0xE6, 0x59, 0x02, 0x00, 0xFC, 0x59, 0x02, 0x00, 0x0E, 0x5A, 0x02, 0x00, 0x0F, -/* 00007FA0 */ 0x5A, 0x02, 0x00, 0x34, 0x5A, 0x02, 0x00, 0x8A, 0x5A, 0x02, 0x00, 0xE1, 0x5A, 0x02, 0x00, 0x3B, -/* 00007FB0 */ 0x5B, 0x02, 0x00, 0x97, 0x5B, 0x02, 0x00, 0xD2, 0x5B, 0x02, 0x00, 0x27, 0x5C, 0x02, 0x00, 0x3D, -/* 00007FC0 */ 0x5C, 0x02, 0x00, 0x4F, 0x5C, 0x02, 0x00, 0x50, 0x5C, 0x02, 0x00, 0x73, 0x5C, 0x02, 0x00, 0xBD, -/* 00007FD0 */ 0x5C, 0x02, 0x00, 0xCF, 0x5C, 0x02, 0x00, 0xD0, 0x5C, 0x02, 0x00, 0xFC, 0x5C, 0x02, 0x00, 0x38, -/* 00007FE0 */ 0x5D, 0x02, 0x00, 0x97, 0x5D, 0x02, 0x00, 0xD9, 0x5D, 0x02, 0x00, 0x31, 0x5E, 0x02, 0x00, 0x47, -/* 00007FF0 */ 0x5E, 0x02, 0x00, 0x59, 0x5E, 0x02, 0x00, 0x5A, 0x5E, 0x02, 0x00, 0xC0, 0x5E, 0x02, 0x00, 0xE8, -/* 00008000 */ 0x5E, 0x02, 0x00, 0x34, 0x5F, 0x02, 0x00, 0x4A, 0x5F, 0x02, 0x00, 0x5E, 0x5F, 0x02, 0x00, 0x5F, -/* 00008010 */ 0x5F, 0x02, 0x00, 0x95, 0x5F, 0x02, 0x00, 0x0B, 0x60, 0x02, 0x00, 0x19, 0x60, 0x02, 0x00, 0x1A, -/* 00008020 */ 0x60, 0x02, 0x00, 0x47, 0x60, 0x02, 0x00, 0x77, 0x60, 0x02, 0x00, 0xA3, 0x60, 0x02, 0x00, 0xCF, -/* 00008030 */ 0x60, 0x02, 0x00, 0xFF, 0x60, 0x02, 0x00, 0x2B, 0x61, 0x02, 0x00, 0x57, 0x61, 0x02, 0x00, 0x8C, -/* 00008040 */ 0x61, 0x02, 0x00, 0xB4, 0x61, 0x02, 0x00, 0xDF, 0x61, 0x02, 0x00, 0xEE, 0x61, 0x02, 0x00, 0xEF, -/* 00008050 */ 0x61, 0x02, 0x00, 0x26, 0x62, 0x02, 0x00, 0x5D, 0x62, 0x02, 0x00, 0x7C, 0x62, 0x02, 0x00, 0x8E, -/* 00008060 */ 0x62, 0x02, 0x00, 0x8F, 0x62, 0x02, 0x00, 0xD7, 0x62, 0x02, 0x00, 0xE5, 0x62, 0x02, 0x00, 0xE6, -/* 00008070 */ 0x62, 0x02, 0x00, 0x56, 0x63, 0x02, 0x00, 0xB2, 0x63, 0x02, 0x00, 0x28, 0x64, 0x02, 0x00, 0xB9, -/* 00008080 */ 0x64, 0x02, 0x00, 0x37, 0x65, 0x02, 0x00, 0x5D, 0x65, 0x02, 0x00, 0x52, 0x66, 0x02, 0x00, 0x7C, -/* 00008090 */ 0x66, 0x02, 0x00, 0x8E, 0x66, 0x02, 0x00, 0x8F, 0x66, 0x02, 0x00, 0xD2, 0x66, 0x02, 0x00, 0x54, -/* 000080A0 */ 0x67, 0x02, 0x00, 0x87, 0x67, 0x02, 0x00, 0x3D, 0x68, 0x02, 0x00, 0x4F, 0x68, 0x02, 0x00, 0x75, -/* 000080B0 */ 0x68, 0x02, 0x00, 0x83, 0x68, 0x02, 0x00, 0x84, 0x68, 0x02, 0x00, 0xE9, 0x68, 0x02, 0x00, 0x33, -/* 000080C0 */ 0x69, 0x02, 0x00, 0xA7, 0x69, 0x02, 0x00, 0x38, 0x6A, 0x02, 0x00, 0x5E, 0x6A, 0x02, 0x00, 0x5E, -/* 000080D0 */ 0x6B, 0x02, 0x00, 0x88, 0x6B, 0x02, 0x00, 0x9A, 0x6B, 0x02, 0x00, 0x9B, 0x6B, 0x02, 0x00, 0xE5, -/* 000080E0 */ 0x6B, 0x02, 0x00, 0x14, 0x6C, 0x02, 0x00, 0x92, 0x6C, 0x02, 0x00, 0xC7, 0x6C, 0x02, 0x00, 0x42, -/* 000080F0 */ 0x6D, 0x02, 0x00, 0x54, 0x6D, 0x02, 0x00, 0x55, 0x6D, 0x02, 0x00, 0x7B, 0x6D, 0x02, 0x00, 0x89, -/* 00008100 */ 0x6D, 0x02, 0x00, 0x8A, 0x6D, 0x02, 0x00, 0xEC, 0x6D, 0x02, 0x00, 0x37, 0x6E, 0x02, 0x00, 0x75, -/* 00008110 */ 0x6E, 0x02, 0x00, 0xEE, 0x6E, 0x02, 0x00, 0x00, 0x6F, 0x02, 0x00, 0x01, 0x6F, 0x02, 0x00, 0x3B, -/* 00008120 */ 0x6F, 0x02, 0x00, 0xA8, 0x6F, 0x02, 0x00, 0x07, 0x70, 0x02, 0x00, 0x7C, 0x70, 0x02, 0x00, 0x8E, -/* 00008130 */ 0x70, 0x02, 0x00, 0x8F, 0x70, 0x02, 0x00, 0xCA, 0x70, 0x02, 0x00, 0x35, 0x71, 0x02, 0x00, 0x5F, -/* 00008140 */ 0x71, 0x02, 0x00, 0xD3, 0x71, 0x02, 0x00, 0xF0, 0x71, 0x02, 0x00, 0x73, 0x72, 0x02, 0x00, 0x89, -/* 00008150 */ 0x72, 0x02, 0x00, 0xC8, 0x72, 0x02, 0x00, 0x33, 0x73, 0x02, 0x00, 0x5D, 0x73, 0x02, 0x00, 0xD1, -/* 00008160 */ 0x73, 0x02, 0x00, 0xEE, 0x73, 0x02, 0x00, 0x67, 0x74, 0x02, 0x00, 0x7D, 0x74, 0x02, 0x00, 0x8F, -/* 00008170 */ 0x74, 0x02, 0x00, 0x90, 0x74, 0x02, 0x00, 0x25, 0x75, 0x02, 0x00, 0xB1, 0x75, 0x02, 0x00, 0x24, -/* 00008180 */ 0x76, 0x02, 0x00, 0x67, 0x76, 0x02, 0x00, 0xE3, 0x76, 0x02, 0x00, 0xF5, 0x76, 0x02, 0x00, 0xF6, -/* 00008190 */ 0x76, 0x02, 0x00, 0x30, 0x77, 0x02, 0x00, 0xA8, 0x77, 0x02, 0x00, 0xBA, 0x77, 0x02, 0x00, 0xBB, -/* 000081A0 */ 0x77, 0x02, 0x00, 0xF6, 0x77, 0x02, 0x00, 0x70, 0x78, 0x02, 0x00, 0x82, 0x78, 0x02, 0x00, 0x83, -/* 000081B0 */ 0x78, 0x02, 0x00, 0xC0, 0x78, 0x02, 0x00, 0x3E, 0x79, 0x02, 0x00, 0x50, 0x79, 0x02, 0x00, 0x51, -/* 000081C0 */ 0x79, 0x02, 0x00, 0x8E, 0x79, 0x02, 0x00, 0x0C, 0x7A, 0x02, 0x00, 0x1E, 0x7A, 0x02, 0x00, 0x1F, -/* 000081D0 */ 0x7A, 0x02, 0x00, 0x62, 0x7A, 0x02, 0x00, 0xDF, 0x7A, 0x02, 0x00, 0xF1, 0x7A, 0x02, 0x00, 0xF2, -/* 000081E0 */ 0x7A, 0x02, 0x00, 0x18, 0x7B, 0x02, 0x00, 0x26, 0x7B, 0x02, 0x00, 0x27, 0x7B, 0x02, 0x00, 0x7C, -/* 000081F0 */ 0x7B, 0x02, 0x00, 0xB5, 0x7B, 0x02, 0x00, 0xE5, 0x7B, 0x02, 0x00, 0xF7, 0x7B, 0x02, 0x00, 0xF8, -/* 00008200 */ 0x7B, 0x02, 0x00, 0x93, 0x7C, 0x02, 0x00, 0xF5, 0x7C, 0x02, 0x00, 0x07, 0x7D, 0x02, 0x00, 0x08, -/* 00008210 */ 0x7D, 0x02, 0x00, 0x47, 0x7D, 0x02, 0x00, 0x48, 0x7D, 0x02, 0x00, 0x6F, 0x7D, 0x02, 0x00, 0xB4, -/* 00008220 */ 0x7D, 0x02, 0x00, 0xB5, 0x7D, 0x02, 0x00, 0x26, 0x7E, 0x02, 0x00, 0x85, 0x7E, 0x02, 0x00, 0x86, -/* 00008230 */ 0x7E, 0x02, 0x00, 0xB4, 0x7E, 0x02, 0x00, 0x07, 0x7F, 0x02, 0x00, 0x20, 0x7F, 0x02, 0x00, 0x5E, -/* 00008240 */ 0x7F, 0x02, 0x00, 0x70, 0x7F, 0x02, 0x00, 0x71, 0x7F, 0x02, 0x00, 0x9F, 0x7F, 0x02, 0x00, 0xDA, -/* 00008250 */ 0x7F, 0x02, 0x00, 0xEC, 0x7F, 0x02, 0x00, 0xED, 0x7F, 0x02, 0x00, 0x0F, 0x80, 0x02, 0x00, 0x7E, -/* 00008260 */ 0x80, 0x02, 0x00, 0xE5, 0x80, 0x02, 0x00, 0x49, 0x81, 0x02, 0x00, 0xCA, 0x81, 0x02, 0x00, 0x2C, -/* 00008270 */ 0x82, 0x02, 0x00, 0x90, 0x82, 0x02, 0x00, 0xF8, 0x82, 0x02, 0x00, 0x60, 0x83, 0x02, 0x00, 0xCF, -/* 00008280 */ 0x83, 0x02, 0x00, 0xD0, 0x83, 0x02, 0x00, 0x3F, 0x84, 0x02, 0x00, 0xB5, 0x84, 0x02, 0x00, 0xB6, -/* 00008290 */ 0x84, 0x02, 0x00, 0x26, 0x85, 0x02, 0x00, 0x27, 0x85, 0x02, 0x00, 0x78, 0x85, 0x02, 0x00, 0x9E, -/* 000082A0 */ 0x85, 0x02, 0x00, 0xBC, 0x85, 0x02, 0x00, 0xDC, 0x85, 0x02, 0x00, 0xFE, 0x85, 0x02, 0x00, 0x1C, -/* 000082B0 */ 0x86, 0x02, 0x00, 0x3C, 0x86, 0x02, 0x00, 0x60, 0x86, 0x02, 0x00, 0x84, 0x86, 0x02, 0x00, 0xB3, -/* 000082C0 */ 0x86, 0x02, 0x00, 0xCE, 0x86, 0x02, 0x00, 0xCF, 0x86, 0x02, 0x00, 0xF7, 0x86, 0x02, 0x00, 0x38, -/* 000082D0 */ 0x87, 0x02, 0x00, 0xAB, 0x87, 0x02, 0x00, 0xAC, 0x87, 0x02, 0x00, 0xD2, 0x87, 0x02, 0x00, 0x06, -/* 000082E0 */ 0x88, 0x02, 0x00, 0x3C, 0x88, 0x02, 0x00, 0x81, 0x88, 0x02, 0x00, 0x82, 0x88, 0x02, 0x00, 0xA4, -/* 000082F0 */ 0x88, 0x02, 0x00, 0xD8, 0x88, 0x02, 0x00, 0x04, 0x89, 0x02, 0x00, 0x32, 0x89, 0x02, 0x00, 0x62, -/* 00008300 */ 0x89, 0x02, 0x00, 0x8E, 0x89, 0x02, 0x00, 0xBC, 0x89, 0x02, 0x00, 0xEE, 0x89, 0x02, 0x00, 0x20, -/* 00008310 */ 0x8A, 0x02, 0x00, 0x5E, 0x8A, 0x02, 0x00, 0x5F, 0x8A, 0x02, 0x00, 0x91, 0x8A, 0x02, 0x00, 0xD1, -/* 00008320 */ 0x8A, 0x02, 0x00, 0x0F, 0x8B, 0x02, 0x00, 0x10, 0x8B, 0x02, 0x00, 0x52, 0x8B, 0x02, 0x00, 0x53, -/* 00008330 */ 0x8B, 0x02, 0x00, 0x66, 0x8B, 0x02, 0x00, 0x82, 0x8B, 0x02, 0x00, 0xDA, 0x8B, 0x02, 0x00, 0x54, -/* 00008340 */ 0x8C, 0x02, 0x00, 0xF9, 0x8C, 0x02, 0x00, 0xA0, 0x8D, 0x02, 0x00, 0x08, 0x8E, 0x02, 0x00, 0x1F, -/* 00008350 */ 0x8E, 0x02, 0x00, 0x48, 0x8E, 0x02, 0x00, 0x49, 0x8E, 0x02, 0x00, 0x5F, 0x8E, 0x02, 0x00, 0xAE, -/* 00008360 */ 0x8E, 0x02, 0x00, 0xEF, 0x8E, 0x02, 0x00, 0x0D, 0x8F, 0x02, 0x00, 0x37, 0x8F, 0x02, 0x00, 0x61, -/* 00008370 */ 0x8F, 0x02, 0x00, 0x62, 0x8F, 0x02, 0x00, 0xD0, 0x8F, 0x02, 0x00, 0x26, 0x90, 0x02, 0x00, 0x7A, -/* 00008380 */ 0x90, 0x02, 0x00, 0xE4, 0x90, 0x02, 0x00, 0x0C, 0x91, 0x02, 0x00, 0x1E, 0x91, 0x02, 0x00, 0x1F, -/* 00008390 */ 0x91, 0x02, 0x00, 0x43, 0x91, 0x02, 0x00, 0x75, 0x91, 0x02, 0x00, 0xF5, 0x91, 0x02, 0x00, 0x07, -/* 000083A0 */ 0x92, 0x02, 0x00, 0x08, 0x92, 0x02, 0x00, 0x1E, 0x92, 0x02, 0x00, 0x53, 0x92, 0x02, 0x00, 0x93, -/* 000083B0 */ 0x92, 0x02, 0x00, 0xB1, 0x92, 0x02, 0x00, 0xDB, 0x92, 0x02, 0x00, 0x05, 0x93, 0x02, 0x00, 0x06, -/* 000083C0 */ 0x93, 0x02, 0x00, 0x68, 0x93, 0x02, 0x00, 0xED, 0x93, 0x02, 0x00, 0x52, 0x94, 0x02, 0x00, 0x8D, -/* 000083D0 */ 0x94, 0x02, 0x00, 0x9F, 0x94, 0x02, 0x00, 0xA0, 0x94, 0x02, 0x00, 0xCD, 0x94, 0x02, 0x00, 0x32, -/* 000083E0 */ 0x95, 0x02, 0x00, 0x33, 0x95, 0x02, 0x00, 0xB5, 0x95, 0x02, 0x00, 0xF0, 0x95, 0x02, 0x00, 0x4F, -/* 000083F0 */ 0x96, 0x02, 0x00, 0x61, 0x96, 0x02, 0x00, 0xA4, 0x96, 0x02, 0x00, 0xB2, 0x96, 0x02, 0x00, 0xB3, -/* 00008400 */ 0x96, 0x02, 0x00, 0x09, 0x97, 0x02, 0x00, 0x67, 0x97, 0x02, 0x00, 0xB7, 0x97, 0x02, 0x00, 0xDA, -/* 00008410 */ 0x97, 0x02, 0x00, 0x01, 0x98, 0x02, 0x00, 0x27, 0x98, 0x02, 0x00, 0x3D, 0x98, 0x02, 0x00, 0x3E, -/* 00008420 */ 0x98, 0x02, 0x00, 0xB3, 0x98, 0x02, 0x00, 0xFE, 0x98, 0x02, 0x00, 0x40, 0x99, 0x02, 0x00, 0x52, -/* 00008430 */ 0x99, 0x02, 0x00, 0xA5, 0x99, 0x02, 0x00, 0xDD, 0x99, 0x02, 0x00, 0x08, 0x9A, 0x02, 0x00, 0x1A, -/* 00008440 */ 0x9A, 0x02, 0x00, 0x1B, 0x9A, 0x02, 0x00, 0x48, 0x9A, 0x02, 0x00, 0xA4, 0x9A, 0x02, 0x00, 0x12, -/* 00008450 */ 0x9B, 0x02, 0x00, 0x61, 0x9B, 0x02, 0x00, 0x92, 0x9B, 0x02, 0x00, 0xED, 0x9B, 0x02, 0x00, 0x0A, -/* 00008460 */ 0x9C, 0x02, 0x00, 0x34, 0x9C, 0x02, 0x00, 0x72, 0x9C, 0x02, 0x00, 0xEC, 0x9C, 0x02, 0x00, 0x47, -/* 00008470 */ 0x9D, 0x02, 0x00, 0x5D, 0x9D, 0x02, 0x00, 0x6F, 0x9D, 0x02, 0x00, 0x70, 0x9D, 0x02, 0x00, 0x94, -/* 00008480 */ 0x9D, 0x02, 0x00, 0xCE, 0x9D, 0x02, 0x00, 0x40, 0x9E, 0x02, 0x00, 0x52, 0x9E, 0x02, 0x00, 0x53, -/* 00008490 */ 0x9E, 0x02, 0x00, 0xB1, 0x9E, 0x02, 0x00, 0xBF, 0x9E, 0x02, 0x00, 0xC0, 0x9E, 0x02, 0x00, 0x3D, -/* 000084A0 */ 0x9F, 0x02, 0x00, 0xC9, 0x9F, 0x02, 0x00, 0x48, 0xA0, 0x02, 0x00, 0xD1, 0xA0, 0x02, 0x00, 0xF6, -/* 000084B0 */ 0xA0, 0x02, 0x00, 0x05, 0xA1, 0x02, 0x00, 0x90, 0xA1, 0x02, 0x00, 0x16, 0xA2, 0x02, 0x00, 0xA0, -/* 000084C0 */ 0xA2, 0x02, 0x00, 0xF4, 0xA2, 0x02, 0x00, 0x03, 0xA3, 0x02, 0x00, 0x85, 0xA3, 0x02, 0x00, 0xF6, -/* 000084D0 */ 0xA3, 0x02, 0x00, 0x51, 0xA4, 0x02, 0x00, 0xBC, 0xA4, 0x02, 0x00, 0x36, 0xA5, 0x02, 0x00, 0x87, -/* 000084E0 */ 0xA5, 0x02, 0x00, 0x96, 0xA5, 0x02, 0x00, 0x0C, 0xA6, 0x02, 0x00, 0x1B, 0xA6, 0x02, 0x00, 0xA7, -/* 000084F0 */ 0xA6, 0x02, 0x00, 0x30, 0xA7, 0x02, 0x00, 0x7B, 0xA7, 0x02, 0x00, 0x7C, 0xA7, 0x02, 0x00, 0xCC, -/* 00008500 */ 0xA7, 0x02, 0x00, 0x69, 0xA8, 0x02, 0x00, 0xEE, 0xA8, 0x02, 0x00, 0x17, 0xA9, 0x02, 0x00, 0xBD, -/* 00008510 */ 0xA9, 0x02, 0x00, 0xBE, 0xA9, 0x02, 0x00, 0x0E, 0xAA, 0x02, 0x00, 0xAF, 0xAA, 0x02, 0x00, 0x34, -/* 00008520 */ 0xAB, 0x02, 0x00, 0x5D, 0xAB, 0x02, 0x00, 0x11, 0xAC, 0x02, 0x00, 0x12, 0xAC, 0x02, 0x00, 0x62, -/* 00008530 */ 0xAC, 0x02, 0x00, 0x03, 0xAD, 0x02, 0x00, 0x88, 0xAD, 0x02, 0x00, 0xB1, 0xAD, 0x02, 0x00, 0x65, -/* 00008540 */ 0xAE, 0x02, 0x00, 0x66, 0xAE, 0x02, 0x00, 0x8D, 0xAE, 0x02, 0x00, 0xE1, 0xAE, 0x02, 0x00, 0x20, -/* 00008550 */ 0xAF, 0x02, 0x00, 0x65, 0xAF, 0x02, 0x00, 0x7B, 0xAF, 0x02, 0x00, 0x7C, 0xAF, 0x02, 0x00, 0xB3, -/* 00008560 */ 0xAF, 0x02, 0x00, 0xE7, 0xAF, 0x02, 0x00, 0x36, 0xB0, 0x02, 0x00, 0x4C, 0xB0, 0x02, 0x00, 0x4D, -/* 00008570 */ 0xB0, 0x02, 0x00, 0x88, 0xB0, 0x02, 0x00, 0xCE, 0xB0, 0x02, 0x00, 0xCF, 0xB0, 0x02, 0x00, 0x05, -/* 00008580 */ 0xB1, 0x02, 0x00, 0x44, 0xB1, 0x02, 0x00, 0x89, 0xB1, 0x02, 0x00, 0x9F, 0xB1, 0x02, 0x00, 0xA0, -/* 00008590 */ 0xB1, 0x02, 0x00, 0xEE, 0xB1, 0x02, 0x00, 0xEF, 0xB1, 0x02, 0x00, 0x55, 0xB2, 0x02, 0x00, 0x91, -/* 000085A0 */ 0xB2, 0x02, 0x00, 0x92, 0xB2, 0x02, 0x00, 0xB2, 0xB2, 0x02, 0x00, 0xC4, 0xB2, 0x02, 0x00, 0x0E, -/* 000085B0 */ 0xB3, 0x02, 0x00, 0x0F, 0xB3, 0x02, 0x00, 0x37, 0xB3, 0x02, 0x00, 0x6B, 0xB3, 0x02, 0x00, 0xD8, -/* 000085C0 */ 0xB3, 0x02, 0x00, 0xEE, 0xB3, 0x02, 0x00, 0x35, 0xB4, 0x02, 0x00, 0x98, 0xB4, 0x02, 0x00, 0x05, -/* 000085D0 */ 0xB5, 0x02, 0x00, 0x1B, 0xB5, 0x02, 0x00, 0x1C, 0xB5, 0x02, 0x00, 0x6E, 0xB5, 0x02, 0x00, 0xA3, -/* 000085E0 */ 0xB5, 0x02, 0x00, 0xB9, 0xB5, 0x02, 0x00, 0xBA, 0xB5, 0x02, 0x00, 0xE9, 0xB5, 0x02, 0x00, 0x17, -/* 000085F0 */ 0xB6, 0x02, 0x00, 0x53, 0xB6, 0x02, 0x00, 0x70, 0xB6, 0x02, 0x00, 0x9F, 0xB6, 0x02, 0x00, 0xB5, -/* 00008600 */ 0xB6, 0x02, 0x00, 0xB6, 0xB6, 0x02, 0x00, 0x0B, 0xB7, 0x02, 0x00, 0x1D, 0xB7, 0x02, 0x00, 0x70, -/* 00008610 */ 0xB7, 0x02, 0x00, 0x71, 0xB7, 0x02, 0x00, 0xB8, 0xB7, 0x02, 0x00, 0xB9, 0xB7, 0x02, 0x00, 0x56, -/* 00008620 */ 0xB8, 0x02, 0x00, 0xA0, 0xB8, 0x02, 0x00, 0x41, 0xB9, 0x02, 0x00, 0x42, 0xB9, 0x02, 0x00, 0x8D, -/* 00008630 */ 0xB9, 0x02, 0x00, 0xD4, 0xB9, 0x02, 0x00, 0x0C, 0xBA, 0x02, 0x00, 0x7D, 0xBA, 0x02, 0x00, 0x97, -/* 00008640 */ 0xBA, 0x02, 0x00, 0x98, 0xBA, 0x02, 0x00, 0xE3, 0xBA, 0x02, 0x00, 0x4A, 0xBB, 0x02, 0x00, 0xBB, -/* 00008650 */ 0xBB, 0x02, 0x00, 0xD5, 0xBB, 0x02, 0x00, 0xD6, 0xBB, 0x02, 0x00, 0x11, 0xBC, 0x02, 0x00, 0x4F, -/* 00008660 */ 0xBC, 0x02, 0x00, 0x63, 0xBC, 0x02, 0x00, 0x64, 0xBC, 0x02, 0x00, 0xB8, 0xBC, 0x02, 0x00, 0xF0, -/* 00008670 */ 0xBC, 0x02, 0x00, 0x28, 0xBD, 0x02, 0x00, 0xA2, 0xBD, 0x02, 0x00, 0xBC, 0xBD, 0x02, 0x00, 0x07, -/* 00008680 */ 0xBE, 0x02, 0x00, 0x6E, 0xBE, 0x02, 0x00, 0xE8, 0xBE, 0x02, 0x00, 0x02, 0xBF, 0x02, 0x00, 0x34, -/* 00008690 */ 0xBF, 0x02, 0x00, 0x6F, 0xBF, 0x02, 0x00, 0xC6, 0xBF, 0x02, 0x00, 0x2B, 0xC0, 0x02, 0x00, 0x6A, -/* 000086A0 */ 0xC0, 0x02, 0x00, 0xA5, 0xC0, 0x02, 0x00, 0xE2, 0xC0, 0x02, 0x00, 0x17, 0xC1, 0x02, 0x00, 0x4E, -/* 000086B0 */ 0xC1, 0x02, 0x00, 0x87, 0xC1, 0x02, 0x00, 0xBC, 0xC1, 0x02, 0x00, 0xF3, 0xC1, 0x02, 0x00, 0x2E, -/* 000086C0 */ 0xC2, 0x02, 0x00, 0x69, 0xC2, 0x02, 0x00, 0xAF, 0xC2, 0x02, 0x00, 0xD0, 0xC2, 0x02, 0x00, 0x0E, -/* 000086D0 */ 0xC3, 0x02, 0x00, 0x80, 0xC3, 0x02, 0x00, 0x22, 0xC4, 0x02, 0x00, 0x5E, 0xC4, 0x02, 0x00, 0x7C, -/* 000086E0 */ 0xC4, 0x02, 0x00, 0xA6, 0xC4, 0x02, 0x00, 0xEE, 0xC4, 0x02, 0x00, 0x3B, 0xC5, 0x02, 0x00, 0x4F, -/* 000086F0 */ 0xC5, 0x02, 0x00, 0x50, 0xC5, 0x02, 0x00, 0xEE, 0xC5, 0x02, 0x00, 0xEF, 0xC5, 0x02, 0x00, 0x16, -/* 00008700 */ 0xC6, 0x02, 0x00, 0x24, 0xC6, 0x02, 0x00, 0x2E, 0xC6, 0x02, 0x00, 0x7F, 0xC6, 0x02, 0x00, 0x99, -/* 00008710 */ 0xC6, 0x02, 0x00, 0xA3, 0xC6, 0x02, 0x00, 0xA4, 0xC6, 0x02, 0x00, 0xD5, 0xC6, 0x02, 0x00, 0xF4, -/* 00008720 */ 0xC6, 0x02, 0x00, 0x70, 0xC7, 0x02, 0x00, 0xF4, 0xC7, 0x02, 0x00, 0x7C, 0xC8, 0x02, 0x00, 0x0E, -/* 00008730 */ 0xC9, 0x02, 0x00, 0x14, 0xC9, 0x02, 0x00, 0x15, 0xC9, 0x02, 0x00, 0x2A, 0xC9, 0x02, 0x00, 0x2E, -/* 00008740 */ 0xC9, 0x02, 0x00, 0x00, 0xCC, 0xB9, 0x0C, 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0xA8, 0x41, 0xC0, -/* 00008750 */ 0x00, 0xFE, 0xCE, 0x02, 0x00, 0xFE, 0x70, 0x01, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0xFE, 0x70, -/* 00008760 */ 0x01, 0xFF, 0xBE, 0xC7, 0x02, 0x00, 0xFF, 0xBE, 0xC7, 0x02, 0x00, 0x40, 0x01, 0x04, 0x04, 0x05, -/* 00008770 */ 0x05, 0x03, 0x05, 0xFE, 0xCF, 0x02, 0x0A, 0x09, 0xA6, 0x00, 0xD3, 0x00, 0x04, 0xFA, 0x04, 0x24, -/* 00008780 */ 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00, 0x8C, 0x87, 0x00, 0x00, 0xBF, 0x1D, 0x00, 0xC1, -/* 00008790 */ 0x53, 0xAD, 0x25, 0x01, 0x07, 0x01, 0xA2, 0x41, 0xD1, 0x00, 0x01, 0xFE, 0x90, 0x01, 0x5F, 0xFF, -/* 000087A0 */ 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x90, 0x01, 0xFF, 0x9B, 0xC7, 0x02, 0x00, 0xFF, 0x9B, -/* 000087B0 */ 0xC7, 0x02, 0x00, 0x40, 0x3C, 0xFE, 0xD0, 0x02, 0xFE, 0xFF, 0x01, 0xFE, 0xD1, 0x02, 0xFE, 0xD2, -/* 000087C0 */ 0x02, 0xFE, 0xD3, 0x02, 0x51, 0xFE, 0x02, 0x01, 0xFE, 0x28, 0x01, 0xFD, 0xFE, 0x4A, 0x01, 0x63, -/* 000087D0 */ 0x76, 0xFE, 0xD4, 0x02, 0xC7, 0xFE, 0xD5, 0x02, 0xFE, 0xD6, 0x02, 0xFE, 0xD7, 0x02, 0xFE, 0xD8, -/* 000087E0 */ 0x02, 0xFE, 0xD9, 0x02, 0xFE, 0xDA, 0x02, 0xFE, 0xDB, 0x02, 0xFE, 0xDC, 0x02, 0xFE, 0xDD, 0x02, -/* 000087F0 */ 0xFE, 0xDE, 0x02, 0xFE, 0xDF, 0x02, 0xFE, 0xE0, 0x02, 0xFE, 0xE1, 0x02, 0xFE, 0xE2, 0x02, 0xFE, -/* 00008800 */ 0xE3, 0x02, 0xFE, 0xE4, 0x02, 0xB1, 0xB4, 0xFE, 0xE5, 0x02, 0xFE, 0xE6, 0x02, 0xFE, 0xE7, 0x02, -/* 00008810 */ 0xFE, 0xE8, 0x02, 0xFE, 0xDE, 0x01, 0xFE, 0xDD, 0x01, 0xFE, 0xE9, 0x02, 0xFE, 0xEA, 0x02, 0xFE, -/* 00008820 */ 0xEB, 0x02, 0xFE, 0xEC, 0x02, 0xFE, 0xED, 0x02, 0xFE, 0xEE, 0x02, 0xFE, 0xFC, 0x01, 0xFE, 0xEF, -/* 00008830 */ 0x02, 0xFE, 0xF0, 0x02, 0xFE, 0xF1, 0x02, 0xFE, 0xF2, 0x02, 0xFE, 0xF3, 0x02, 0xFE, 0xF4, 0x02, -/* 00008840 */ 0xFE, 0xF5, 0x02, 0xFE, 0xF6, 0x02, 0xFE, 0xF7, 0x02, 0xFE, 0xF8, 0x02, 0xFE, 0xF9, 0x02, 0xFE, -/* 00008850 */ 0xFA, 0x02, 0xFE, 0xFB, 0x02, 0xFE, 0xFC, 0x02, 0xFE, 0xFD, 0x02, 0x20, 0x70, 0x8A, 0x09, 0xFE, -/* 00008860 */ 0x25, 0x04, 0xFE, 0x18, 0x04, 0x16, 0x8F, 0x8E, 0x8F, 0x8F, 0x23, 0x02, 0x87, 0x88, 0x89, 0x8A, -/* 00008870 */ 0x08, 0x0B, 0x06, 0xFE, 0xF4, 0x02, 0x06, 0xFE, 0xFE, 0x02, 0x06, 0xFE, 0xFF, 0x02, 0x06, 0xFE, -/* 00008880 */ 0x00, 0x03, 0x06, 0xFE, 0x01, 0x03, 0x07, 0x06, 0xFE, 0x02, 0x03, 0x01, 0x00, 0x06, 0xFE, 0x03, -/* 00008890 */ 0x03, 0x06, 0xFE, 0x04, 0x03, 0x01, 0x01, 0x06, 0xFE, 0x05, 0x03, 0x01, 0x02, 0x06, 0xFE, 0x06, -/* 000088A0 */ 0x03, 0x01, 0x03, 0x06, 0xFE, 0x07, 0x03, 0x01, 0x04, 0x06, 0xFE, 0x08, 0x03, 0x01, 0x05, 0x06, -/* 000088B0 */ 0xFE, 0x09, 0x03, 0x06, 0xFE, 0x0A, 0x03, 0x06, 0xFE, 0x0B, 0x03, 0x06, 0xFE, 0x0C, 0x03, 0x06, -/* 000088C0 */ 0xFE, 0x0D, 0x03, 0x06, 0xFE, 0x0E, 0x03, 0x06, 0xFE, 0x0F, 0x03, 0x06, 0xFE, 0x10, 0x03, 0x06, -/* 000088D0 */ 0xFE, 0x11, 0x03, 0x06, 0xFE, 0x12, 0x03, 0x06, 0xFE, 0x13, 0x03, 0x06, 0xFE, 0x14, 0x03, 0x06, -/* 000088E0 */ 0xFE, 0x15, 0x03, 0x06, 0xFE, 0x16, 0x03, 0x06, 0xFE, 0x17, 0x03, 0x06, 0xFE, 0x18, 0x03, 0x06, -/* 000088F0 */ 0xFE, 0x19, 0x03, 0x06, 0xFE, 0x1A, 0x03, 0x06, 0xFE, 0x1B, 0x03, 0x06, 0xFE, 0x1C, 0x03, 0x06, -/* 00008900 */ 0xFE, 0x1D, 0x03, 0x06, 0xFE, 0x1E, 0x03, 0x06, 0xFE, 0x1F, 0x03, 0x06, 0xFE, 0x20, 0x03, 0x06, -/* 00008910 */ 0xFE, 0x21, 0x03, 0x06, 0xFE, 0x22, 0x03, 0x06, 0xFE, 0x23, 0x03, 0x06, 0xFE, 0x24, 0x03, 0x06, -/* 00008920 */ 0xFE, 0x25, 0x03, 0x06, 0xFE, 0x26, 0x03, 0x06, 0xFE, 0x27, 0x03, 0x06, 0xFE, 0x28, 0x03, 0x06, -/* 00008930 */ 0xFE, 0x29, 0x03, 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, 0x2B, 0x03, 0x06, 0xFE, 0x2C, 0x03, 0x06, -/* 00008940 */ 0xFE, 0x2D, 0x03, 0x06, 0xFE, 0x2E, 0x03, 0x06, 0xFE, 0x2F, 0x03, 0x06, 0xFE, 0x30, 0x03, 0x06, -/* 00008950 */ 0xFE, 0x31, 0x03, 0x06, 0xFE, 0x32, 0x03, 0x06, 0xFE, 0x33, 0x03, 0x06, 0xFE, 0x34, 0x03, 0x06, -/* 00008960 */ 0xFE, 0x35, 0x03, 0x06, 0xFE, 0x36, 0x03, 0x06, 0xFE, 0x37, 0x03, 0x06, 0xFE, 0x38, 0x03, 0x06, -/* 00008970 */ 0xFE, 0x39, 0x03, 0x06, 0xFE, 0x3A, 0x03, 0x06, 0xFE, 0x3B, 0x03, 0x05, 0xFE, 0x3C, 0x03, 0x06, -/* 00008980 */ 0xFE, 0x3D, 0x03, 0x05, 0xFE, 0x3E, 0x03, 0x06, 0xFE, 0x3F, 0x03, 0x06, 0xFE, 0x40, 0x03, 0x05, -/* 00008990 */ 0xFE, 0x41, 0x03, 0x06, 0xFE, 0x42, 0x03, 0x0C, 0x06, 0xFE, 0x43, 0x03, 0x06, 0xFE, 0x44, 0x03, -/* 000089A0 */ 0x06, 0xFE, 0x45, 0x03, 0x06, 0xFE, 0x46, 0x03, 0x06, 0xFE, 0x47, 0x03, 0x06, 0xFE, 0x48, 0x03, -/* 000089B0 */ 0x05, 0xFE, 0x49, 0x03, 0x05, 0xFE, 0x4A, 0x03, 0x05, 0xFE, 0x4B, 0x03, 0x06, 0xFE, 0x4C, 0x03, -/* 000089C0 */ 0x06, 0xFE, 0x4D, 0x03, 0x06, 0xFE, 0x4E, 0x03, 0x05, 0xFE, 0x4F, 0x03, 0x06, 0xFE, 0x50, 0x03, -/* 000089D0 */ 0x06, 0xFE, 0x51, 0x03, 0x06, 0xFE, 0x52, 0x03, 0x05, 0xFE, 0x53, 0x03, 0x06, 0xFE, 0x54, 0x03, -/* 000089E0 */ 0x06, 0xFE, 0x55, 0x03, 0x05, 0xFE, 0x56, 0x03, 0x06, 0xFE, 0x57, 0x03, 0x06, 0xFE, 0x58, 0x03, -/* 000089F0 */ 0x05, 0xFE, 0x59, 0x03, 0x06, 0xFE, 0x5A, 0x03, 0x06, 0xFE, 0x5B, 0x03, 0x06, 0xFE, 0x5C, 0x03, -/* 00008A00 */ 0x06, 0xFE, 0x5D, 0x03, 0x06, 0xFE, 0x5E, 0x03, 0x06, 0xFE, 0x5F, 0x03, 0x06, 0xFE, 0x60, 0x03, -/* 00008A10 */ 0xFE, 0x61, 0x10, 0x94, 0x32, 0x71, 0xA6, 0x81, 0xA6, 0x82, 0xA6, 0x86, 0xD3, 0x01, 0x72, 0x94, -/* 00008A20 */ 0x02, 0x72, 0x4F, 0x7C, 0x4F, 0x80, 0x4F, 0x83, 0xA6, 0x73, 0xA6, 0x74, 0x4F, 0x7E, 0x4F, 0x7F, -/* 00008A30 */ 0x4F, 0x84, 0x4F, 0x85, 0xA6, 0x75, 0xA6, 0x76, 0xA6, 0x77, 0xA6, 0x78, 0xA6, 0x79, 0xA6, 0x7A, -/* 00008A40 */ 0xA6, 0x7B, 0x4F, 0x8C, 0x94, 0x33, 0x8C, 0x4F, 0x8C, 0x94, 0x34, 0x8C, 0x4F, 0x8C, 0x94, 0x35, -/* 00008A50 */ 0x8C, 0x4F, 0x8C, 0x94, 0x36, 0x8C, 0x4F, 0x8C, 0x94, 0x37, 0x8C, 0x4F, 0x8C, 0x94, 0x38, 0x8C, -/* 00008A60 */ 0x4F, 0x8C, 0x94, 0x39, 0x8C, 0x4F, 0x8C, 0x94, 0x3A, 0x8C, 0x4F, 0x8C, 0x94, 0x3B, 0x8C, 0x4F, -/* 00008A70 */ 0x8C, 0x94, 0x3C, 0x8C, 0x4F, 0x8C, 0x94, 0x3D, 0x8C, 0x5F, 0x8C, 0x70, 0x00, 0x94, 0x03, 0x8C, -/* 00008A80 */ 0x90, 0x03, 0x8C, 0x74, 0x03, 0x8C, 0x01, 0x90, 0x03, 0x8D, 0x5F, 0x8D, 0x8D, 0x02, 0xAA, 0x8C, -/* 00008A90 */ 0x0F, 0x02, 0x00, 0x8D, 0xA9, 0x8C, 0x94, 0x33, 0x8C, 0x90, 0x03, 0x8C, 0x5F, 0x8C, 0x8C, 0x03, -/* 00008AA0 */ 0x47, 0x7C, 0x8C, 0x94, 0x34, 0x04, 0x90, 0x03, 0x8C, 0x5F, 0x8C, 0x8C, 0x04, 0x94, 0x04, 0x8C, -/* 00008AB0 */ 0x90, 0x03, 0x8C, 0x5F, 0x8C, 0x8C, 0x05, 0x94, 0x05, 0x8C, 0x90, 0x03, 0x8C, 0x5F, 0x8C, 0x8C, -/* 00008AC0 */ 0x06, 0x94, 0x06, 0x8C, 0xD3, 0x00, 0x8C, 0x94, 0x35, 0x8C, 0x90, 0x03, 0x8C, 0x5F, 0x8C, 0x8C, -/* 00008AD0 */ 0x07, 0x94, 0x07, 0x8C, 0x90, 0x03, 0x8C, 0x5F, 0x8C, 0x8C, 0x08, 0x94, 0x08, 0x8C, 0x90, 0x03, -/* 00008AE0 */ 0x8C, 0x5F, 0x8C, 0x8C, 0x09, 0x94, 0x09, 0x8C, 0x90, 0x03, 0x8C, 0x5F, 0x8C, 0x8C, 0x0A, 0x94, -/* 00008AF0 */ 0x0A, 0x8C, 0x90, 0x03, 0x8C, 0x5F, 0x8C, 0x8C, 0x0B, 0x94, 0x0B, 0x8C, 0x90, 0x03, 0x8C, 0x5F, -/* 00008B00 */ 0x8C, 0x8C, 0x0C, 0x94, 0x0C, 0x8C, 0x90, 0x03, 0x8C, 0x5F, 0x8C, 0x8C, 0x0D, 0x94, 0x0D, 0x8C, -/* 00008B10 */ 0x90, 0x03, 0x8C, 0x5F, 0x8C, 0x8C, 0x0E, 0x94, 0x0E, 0x8C, 0x90, 0x04, 0x8C, 0x07, 0x03, 0x00, -/* 00008B20 */ 0x5A, 0x00, 0x02, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, -/* 00008B30 */ 0x90, 0x03, 0x8E, 0x5F, 0x8E, 0x8E, 0x0F, 0x78, 0x8E, 0x8D, 0x10, 0x90, 0x03, 0x8E, 0x5F, 0x8E, -/* 00008B40 */ 0x8E, 0x11, 0x78, 0x8E, 0x8D, 0x12, 0x90, 0x03, 0x8E, 0x5F, 0x8E, 0x8E, 0x13, 0x78, 0x8E, 0x8D, -/* 00008B50 */ 0x14, 0x90, 0x03, 0x8E, 0x5F, 0x8E, 0x8E, 0x15, 0x78, 0x8E, 0x8D, 0x16, 0x5A, 0x01, 0x8D, 0x5A, -/* 00008B60 */ 0x02, 0x09, 0x02, 0x1F, 0x03, 0x8C, 0x00, 0x8C, 0x00, 0x94, 0x0F, 0x8C, 0x90, 0x03, 0x8C, 0x5F, -/* 00008B70 */ 0x8C, 0x8C, 0x17, 0x94, 0x10, 0x8C, 0x90, 0x03, 0x8C, 0x5F, 0x8C, 0x8C, 0x18, 0x94, 0x11, 0x8C, -/* 00008B80 */ 0x90, 0x03, 0x8C, 0x5F, 0x8C, 0x8C, 0x19, 0x94, 0x12, 0x8C, 0x90, 0x03, 0x8C, 0x5F, 0x8C, 0x8C, -/* 00008B90 */ 0x1A, 0x94, 0x13, 0x8C, 0x90, 0x03, 0x8C, 0x5F, 0x8C, 0x8C, 0x1B, 0x94, 0x14, 0x8C, 0xD3, 0x02, -/* 00008BA0 */ 0x8C, 0x94, 0x15, 0x8C, 0x90, 0x03, 0x8C, 0x5F, 0x8C, 0x8C, 0x1C, 0x94, 0x16, 0x8C, 0x90, 0x03, -/* 00008BB0 */ 0x8C, 0x5F, 0x8C, 0x8C, 0x1D, 0x94, 0x17, 0x8C, 0x90, 0x03, 0x8C, 0x5F, 0x8C, 0x8C, 0x1E, 0x94, -/* 00008BC0 */ 0x18, 0x8C, 0x90, 0x03, 0x8C, 0x5F, 0x8C, 0x8C, 0x1F, 0x94, 0x19, 0x8C, 0x90, 0x03, 0x8C, 0x5F, -/* 00008BD0 */ 0x8C, 0x8C, 0x20, 0x94, 0x1A, 0x8C, 0x90, 0x03, 0x8C, 0x5F, 0x8C, 0x8C, 0x21, 0x94, 0x1B, 0x8C, -/* 00008BE0 */ 0x90, 0x03, 0x8C, 0x5F, 0x8C, 0x8C, 0x22, 0x94, 0x1C, 0x8C, 0x90, 0x03, 0x8C, 0x5F, 0x8C, 0x8C, -/* 00008BF0 */ 0x23, 0x94, 0x1D, 0x8C, 0x90, 0x03, 0x8C, 0x5F, 0x8C, 0x8C, 0x24, 0x94, 0x1E, 0x8C, 0x90, 0x03, -/* 00008C00 */ 0x8C, 0x5F, 0x8C, 0x8C, 0x25, 0x94, 0x1F, 0x8C, 0x90, 0x03, 0x8C, 0x5F, 0x8C, 0x8C, 0x26, 0x47, -/* 00008C10 */ 0x7D, 0x8C, 0x90, 0x03, 0x8C, 0x5F, 0x8C, 0x8C, 0x27, 0x94, 0x20, 0x8C, 0x90, 0x03, 0x8C, 0x5F, -/* 00008C20 */ 0x8C, 0x8C, 0x28, 0x94, 0x21, 0x8C, 0x90, 0x04, 0x8C, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0xCB, -/* 00008C30 */ 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, 0x78, 0x0B, 0x8D, 0x29, -/* 00008C40 */ 0x78, 0x0B, 0x8D, 0x2A, 0x78, 0x0E, 0x8D, 0x2B, 0x78, 0x10, 0x8D, 0x2C, 0x78, 0x12, 0x8D, 0x2D, -/* 00008C50 */ 0x78, 0x14, 0x8D, 0x2E, 0x78, 0x16, 0x8D, 0x2F, 0x5A, 0x01, 0x8D, 0x5A, 0x02, 0x09, 0x02, 0x1F, -/* 00008C60 */ 0x03, 0x8C, 0x00, 0x8C, 0x00, 0x94, 0x36, 0x8C, 0xCB, 0x3C, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, -/* 00008C70 */ 0x00, 0x8C, 0x00, 0x00, 0x00, 0xD6, 0x03, 0x8D, 0x8C, 0x78, 0x8D, 0x8C, 0x30, 0xD6, 0x04, 0x8D, -/* 00008C80 */ 0x8C, 0x78, 0x8D, 0x8C, 0x31, 0xD6, 0x05, 0x8D, 0x8C, 0x78, 0x8D, 0x8C, 0x32, 0xD6, 0x06, 0x8D, -/* 00008C90 */ 0x8C, 0x78, 0x8D, 0x8C, 0x33, 0xD6, 0x07, 0x8D, 0x8C, 0x78, 0x8D, 0x8C, 0x34, 0xD6, 0x08, 0x8D, -/* 00008CA0 */ 0x8C, 0x78, 0x8D, 0x8C, 0x35, 0xD6, 0x09, 0x8D, 0x8C, 0x78, 0x8D, 0x8C, 0x36, 0xD6, 0x0A, 0x8D, -/* 00008CB0 */ 0x8C, 0x78, 0x8D, 0x8C, 0x37, 0xD6, 0x0B, 0x8D, 0x8C, 0x78, 0x8D, 0x8C, 0x38, 0xD6, 0x0C, 0x8D, -/* 00008CC0 */ 0x8C, 0x78, 0x8D, 0x8C, 0x39, 0xD6, 0x0D, 0x8D, 0x8C, 0x78, 0x8D, 0x8C, 0x3A, 0xD6, 0x0E, 0x8D, -/* 00008CD0 */ 0x8C, 0x78, 0x8D, 0x8C, 0x3B, 0xD6, 0x0F, 0x8D, 0x8C, 0x78, 0x8D, 0x8C, 0x3C, 0xD6, 0x10, 0x8D, -/* 00008CE0 */ 0x8C, 0x78, 0x8D, 0x8C, 0x3D, 0xD6, 0x11, 0x8D, 0x8C, 0x78, 0x8D, 0x8C, 0x3E, 0xD6, 0x12, 0x8D, -/* 00008CF0 */ 0x8C, 0x78, 0x8D, 0x8C, 0x3F, 0xD6, 0x13, 0x8D, 0x8C, 0x78, 0x8D, 0x8C, 0x40, 0xD6, 0x14, 0x8D, -/* 00008D00 */ 0x8C, 0x78, 0x8D, 0x8C, 0x41, 0x90, 0x03, 0x8D, 0x5F, 0x8D, 0x8D, 0x42, 0x78, 0x8D, 0x8C, 0x43, -/* 00008D10 */ 0xD6, 0x15, 0x8D, 0x8C, 0x78, 0x8D, 0x8C, 0x44, 0xD6, 0x16, 0x8D, 0x8C, 0x78, 0x8D, 0x8C, 0x45, -/* 00008D20 */ 0x90, 0x03, 0x8D, 0x5F, 0x8D, 0x8D, 0x46, 0x78, 0x8D, 0x8C, 0x47, 0xD6, 0x17, 0x8D, 0x8C, 0x78, -/* 00008D30 */ 0x8D, 0x8C, 0x48, 0xD6, 0x18, 0x8D, 0x8C, 0x78, 0x8D, 0x8C, 0x49, 0x90, 0x03, 0x8D, 0x5F, 0x8D, -/* 00008D40 */ 0x8D, 0x4A, 0x78, 0x8D, 0x8C, 0x4B, 0xD6, 0x19, 0x8D, 0x8C, 0x78, 0x8D, 0x8C, 0x4C, 0x90, 0x03, -/* 00008D50 */ 0x8D, 0x5F, 0x8D, 0x8D, 0x4D, 0x78, 0x8D, 0x8C, 0x4E, 0x90, 0x03, 0x8D, 0x5F, 0x8D, 0x8D, 0x4F, -/* 00008D60 */ 0x78, 0x8D, 0x8C, 0x50, 0x90, 0x03, 0x8D, 0x5F, 0x8D, 0x8D, 0x51, 0x78, 0x8D, 0x8C, 0x52, 0x90, -/* 00008D70 */ 0x03, 0x8D, 0x5F, 0x8D, 0x8D, 0x53, 0x78, 0x8D, 0x8C, 0x54, 0xD6, 0x1A, 0x8D, 0x8C, 0x78, 0x8D, -/* 00008D80 */ 0x8C, 0x55, 0xD6, 0x1B, 0x8D, 0x8C, 0x78, 0x8D, 0x8C, 0x56, 0xD6, 0x1C, 0x8D, 0x8C, 0x78, 0x8D, -/* 00008D90 */ 0x8C, 0x57, 0x94, 0x37, 0x8C, 0xCB, 0xC8, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x8C, 0x00, -/* 00008DA0 */ 0x00, 0x00, 0xD6, 0x1D, 0x8D, 0x8C, 0x78, 0x8D, 0x8C, 0x58, 0xD6, 0x1E, 0x8D, 0x8C, 0x78, 0x8D, -/* 00008DB0 */ 0x8C, 0x59, 0x94, 0x38, 0x8C, 0x90, 0x35, 0x8C, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0xD8, -/* 00008DC0 */ 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, 0x78, 0x0B, 0x8D, 0x5A, 0x78, -/* 00008DD0 */ 0x0E, 0x8D, 0x5B, 0x78, 0x10, 0x8D, 0x5C, 0x78, 0x12, 0x8D, 0x5D, 0x78, 0x12, 0x8D, 0x5E, 0x5A, -/* 00008DE0 */ 0x01, 0x8D, 0x02, 0x1F, 0x02, 0x8C, 0x00, 0x8C, 0x00, 0x94, 0x39, 0x8C, 0x90, 0x35, 0x8C, 0x07, -/* 00008DF0 */ 0x02, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0xF4, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x8D, 0x00, -/* 00008E00 */ 0x00, 0x00, 0x78, 0x0B, 0x8D, 0x5F, 0x78, 0x0E, 0x8D, 0x60, 0x78, 0x10, 0x8D, 0x61, 0x78, 0x10, -/* 00008E10 */ 0x8D, 0x5E, 0x5A, 0x01, 0x8D, 0x02, 0x1F, 0x02, 0x8C, 0x00, 0x8C, 0x00, 0x94, 0x3A, 0x8C, 0x90, -/* 00008E20 */ 0x35, 0x8C, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0x0C, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, -/* 00008E30 */ 0x00, 0x8D, 0x00, 0x00, 0x00, 0x78, 0x0B, 0x8D, 0x5E, 0x78, 0x0B, 0x8D, 0x62, 0x78, 0x0E, 0x8D, -/* 00008E40 */ 0x63, 0x78, 0x10, 0x8D, 0x64, 0x5A, 0x01, 0x8D, 0x02, 0x1F, 0x02, 0x8C, 0x00, 0x8C, 0x00, 0x94, -/* 00008E50 */ 0x3B, 0x8C, 0x90, 0x35, 0x8C, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0x24, 0x01, 0x00, 0x00, -/* 00008E60 */ 0x07, 0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, 0x78, 0x0B, 0x8D, 0x5E, 0x78, 0x0B, 0x8D, 0x65, -/* 00008E70 */ 0x78, 0x0E, 0x8D, 0x66, 0x78, 0x10, 0x8D, 0x67, 0x5A, 0x01, 0x8D, 0x02, 0x1F, 0x02, 0x8C, 0x00, -/* 00008E80 */ 0x8C, 0x00, 0x94, 0x3C, 0x8C, 0xD3, 0x1F, 0x8C, 0x94, 0x3D, 0x8C, 0x90, 0x33, 0x8C, 0x0E, 0xAB, -/* 00008E90 */ 0x04, 0x8C, 0xDE, 0x00, 0x1A, 0x03, 0xB6, 0x8C, 0x00, 0x01, 0x53, 0x01, 0x2D, 0x73, 0x8C, 0x93, -/* 00008EA0 */ 0x00, 0x02, 0x73, 0x01, 0x53, 0x01, 0x2F, 0x74, 0x8C, 0x93, 0x00, 0x03, 0x74, 0x4F, 0x8C, 0x93, -/* 00008EB0 */ 0x00, 0x04, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x05, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x06, 0x8C, 0x4F, -/* 00008EC0 */ 0x8C, 0x93, 0x00, 0x07, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x08, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x09, -/* 00008ED0 */ 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x0A, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x0B, 0x8C, 0x4F, 0x8C, 0x93, -/* 00008EE0 */ 0x00, 0x0C, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x0D, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x0E, 0x8C, 0x4F, -/* 00008EF0 */ 0x8C, 0x93, 0x00, 0x0F, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x10, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x11, -/* 00008F00 */ 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x12, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x13, 0x8C, 0x4F, 0x8C, 0x93, -/* 00008F10 */ 0x00, 0x14, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x15, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x16, 0x8C, 0x4F, -/* 00008F20 */ 0x8C, 0x93, 0x00, 0x17, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x18, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x19, -/* 00008F30 */ 0x8C, 0xA6, 0x8C, 0x93, 0x00, 0x04, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x20, 0x8C, 0x8D, -/* 00008F40 */ 0x93, 0x00, 0x05, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x21, 0x8C, 0x8D, 0x94, 0x22, 0x8C, -/* 00008F50 */ 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x22, 0x8C, 0x8D, 0x94, 0x23, 0x8C, 0xB6, 0x8D, 0x00, 0x01, -/* 00008F60 */ 0x53, 0x01, 0x23, 0x8C, 0x8D, 0x93, 0x00, 0x06, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x24, -/* 00008F70 */ 0x8C, 0x8D, 0x93, 0x00, 0x07, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x25, 0x8C, 0x8D, 0x93, -/* 00008F80 */ 0x00, 0x08, 0x8C, 0x8E, 0x00, 0x08, 0x8C, 0x93, 0x00, 0x09, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, -/* 00008F90 */ 0x01, 0x26, 0x8C, 0x8D, 0x93, 0x00, 0x0A, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x27, 0x8C, -/* 00008FA0 */ 0x8D, 0x93, 0x00, 0x0B, 0x8C, 0x90, 0x35, 0x8C, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0x3C, -/* 00008FB0 */ 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, 0xB6, 0x8F, 0x00, 0x01, 0x57, -/* 00008FC0 */ 0x01, 0x28, 0x8E, 0x8F, 0x8D, 0x78, 0x8E, 0x8D, 0x68, 0xB6, 0x8F, 0x00, 0x01, 0x57, 0x01, 0x29, -/* 00008FD0 */ 0x8E, 0x8F, 0x8D, 0x78, 0x8E, 0x8D, 0x69, 0xB6, 0x8F, 0x00, 0x01, 0x57, 0x01, 0x2A, 0x8E, 0x8F, -/* 00008FE0 */ 0x8D, 0x78, 0x8E, 0x8D, 0x6A, 0xB6, 0x8F, 0x00, 0x01, 0x57, 0x01, 0x2B, 0x8E, 0x8F, 0x8D, 0x78, -/* 00008FF0 */ 0x8E, 0x8D, 0x6B, 0xB6, 0x8F, 0x00, 0x01, 0x57, 0x01, 0x2C, 0x8E, 0x8F, 0x8D, 0x78, 0x8E, 0x8D, -/* 00009000 */ 0x6C, 0x5A, 0x01, 0x8D, 0x02, 0x1F, 0x02, 0x8C, 0x00, 0x8C, 0x00, 0x94, 0x24, 0x8C, 0xB6, 0x8D, -/* 00009010 */ 0x00, 0x01, 0x53, 0x01, 0x2E, 0x8C, 0x8D, 0x93, 0x00, 0x0C, 0x8C, 0xA6, 0x8C, 0x93, 0x00, 0x0D, -/* 00009020 */ 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x30, 0x8C, 0x8D, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x02, -/* 00009030 */ 0x02, 0x1F, 0x01, 0x8C, 0x00, 0x8C, 0x00, 0x93, 0x00, 0x0E, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, -/* 00009040 */ 0x01, 0x31, 0x8C, 0x8D, 0x93, 0x00, 0x0F, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x32, 0x8C, -/* 00009050 */ 0x8D, 0x93, 0x00, 0x10, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x33, 0x8C, 0x8D, 0x93, 0x00, -/* 00009060 */ 0x11, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x34, 0x8C, 0x8D, 0x93, 0x00, 0x12, 0x8C, 0x8E, -/* 00009070 */ 0x00, 0x12, 0x8C, 0x93, 0x00, 0x13, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x35, 0x8C, 0x8D, -/* 00009080 */ 0x93, 0x00, 0x14, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x36, 0x8C, 0x8D, 0x93, 0x00, 0x15, -/* 00009090 */ 0x8C, 0x90, 0x37, 0x8D, 0x6A, 0x8C, 0x8D, 0x6D, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x8D, 0x02, 0x1F, -/* 000090A0 */ 0x01, 0x8C, 0x00, 0x8C, 0x00, 0x93, 0x00, 0x16, 0x8C, 0x90, 0x03, 0x8D, 0x6A, 0x8C, 0x8D, 0x6E, -/* 000090B0 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x8D, 0x8E, 0x00, 0x16, 0x8E, 0x5A, 0x01, 0x8E, 0xCB, 0x58, 0x01, -/* 000090C0 */ 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x8E, 0x00, 0x00, 0x00, 0x78, 0x4A, 0x8E, 0x6F, 0x5A, 0x02, -/* 000090D0 */ 0x8E, 0x1F, 0x03, 0xFF, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x37, 0x8C, 0x8D, 0x93, 0x00, -/* 000090E0 */ 0x17, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x38, 0x8C, 0x8D, 0x93, 0x00, 0x18, 0x8C, 0x90, -/* 000090F0 */ 0x32, 0x8C, 0x14, 0x03, 0x00, 0x8C, 0x4B, 0x09, 0xD0, 0x00, 0xDE, 0x01, 0x03, 0x05, 0x4F, 0x8C, -/* 00009100 */ 0x93, 0x01, 0x02, 0x8C, 0x93, 0x01, 0x02, 0x4C, 0x90, 0x23, 0x8C, 0x07, 0x03, 0x00, 0x5A, 0x00, -/* 00009110 */ 0x02, 0x8E, 0x01, 0x02, 0x8D, 0x5A, 0x01, 0x8D, 0xB6, 0x8E, 0x00, 0xB5, 0x01, 0x00, 0x00, 0x00, -/* 00009120 */ 0x8E, 0x8E, 0x01, 0x53, 0x01, 0x39, 0x8D, 0x8E, 0x5A, 0x02, 0x8D, 0x02, 0x1F, 0x03, 0x8C, 0x00, -/* 00009130 */ 0x8C, 0x00, 0x47, 0x7E, 0x8C, 0x90, 0x37, 0x8D, 0x6A, 0x8C, 0x8D, 0x70, 0x07, 0x03, 0x00, 0x5A, -/* 00009140 */ 0x00, 0x8D, 0x5A, 0x01, 0x7E, 0x8E, 0x00, 0x16, 0x8E, 0x5A, 0x02, 0x8E, 0x02, 0x1F, 0x03, 0x8C, -/* 00009150 */ 0x00, 0x8C, 0x00, 0x47, 0x7F, 0x8C, 0x90, 0x37, 0x8D, 0x6A, 0x8C, 0x8D, 0x71, 0x07, 0x04, 0x00, -/* 00009160 */ 0x5A, 0x00, 0x8D, 0x5A, 0x01, 0x7F, 0x5A, 0x02, 0x4D, 0xCB, 0x64, 0x01, 0x00, 0x00, 0x0A, 0x00, -/* 00009170 */ 0x00, 0x00, 0x8E, 0x00, 0x00, 0x00, 0x78, 0x4F, 0x8E, 0x72, 0x78, 0x51, 0x8E, 0x73, 0x78, 0x51, -/* 00009180 */ 0x8E, 0x74, 0x78, 0x03, 0x8E, 0x75, 0x5A, 0x03, 0x8E, 0x1F, 0x04, 0xFF, 0x8C, 0x90, 0x37, 0x8D, -/* 00009190 */ 0x6A, 0x8C, 0x8D, 0x71, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x8D, 0x68, 0x8E, 0x00, 0x00, 0x00, 0x8E, -/* 000091A0 */ 0x5A, 0x01, 0x8E, 0x5A, 0x02, 0x4F, 0xCB, 0x7C, 0x01, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x8E, -/* 000091B0 */ 0x00, 0x00, 0x00, 0x78, 0x7F, 0x8E, 0x72, 0x78, 0x03, 0x8E, 0x73, 0x78, 0x51, 0x8E, 0x74, 0x78, -/* 000091C0 */ 0x03, 0x8E, 0x75, 0x5A, 0x03, 0x8E, 0x1F, 0x04, 0xFF, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, -/* 000091D0 */ 0x3A, 0x8C, 0x8D, 0x93, 0x00, 0x19, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x3B, 0x8C, 0x8D, -/* 000091E0 */ 0x07, 0x01, 0x00, 0x5A, 0x00, 0x02, 0x02, 0x1F, 0x01, 0x8C, 0x00, 0x8C, 0x00, 0x47, 0x80, 0x8C, -/* 000091F0 */ 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x3C, 0x8C, 0x8D, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x02, 0x02, -/* 00009200 */ 0x1F, 0x01, 0x8C, 0x00, 0x8C, 0x00, 0x47, 0x81, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x3D, -/* 00009210 */ 0x8C, 0x8D, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x02, 0x02, 0x1F, 0x01, 0x8C, 0x00, 0x8C, 0x00, 0x47, -/* 00009220 */ 0x82, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x3E, 0x8C, 0x8D, 0x07, 0x01, 0x00, 0x5A, 0x00, -/* 00009230 */ 0x02, 0x02, 0x1F, 0x01, 0x8C, 0x00, 0x8C, 0x00, 0x47, 0x83, 0x8C, 0x90, 0x32, 0x8C, 0x14, 0x03, -/* 00009240 */ 0x00, 0x8C, 0x4B, 0x09, 0xF4, 0x00, 0x90, 0x37, 0x8D, 0x6A, 0x8C, 0x8D, 0x71, 0x07, 0x04, 0x00, -/* 00009250 */ 0x5A, 0x00, 0x8D, 0x68, 0x8E, 0x00, 0x00, 0x00, 0x8E, 0x5A, 0x01, 0x8E, 0x5A, 0x02, 0x54, 0xCB, -/* 00009260 */ 0x94, 0x01, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x8E, 0x00, 0x00, 0x00, 0x78, 0x80, 0x8E, 0x72, -/* 00009270 */ 0x78, 0x03, 0x8E, 0x73, 0x78, 0x51, 0x8E, 0x74, 0x78, 0x03, 0x8E, 0x75, 0x5A, 0x03, 0x8E, 0x1F, -/* 00009280 */ 0x04, 0xFF, 0x8C, 0x90, 0x37, 0x8D, 0x6A, 0x8C, 0x8D, 0x71, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x8D, -/* 00009290 */ 0x68, 0x8E, 0x00, 0x00, 0x00, 0x8E, 0x5A, 0x01, 0x8E, 0x5A, 0x02, 0x55, 0xCB, 0xAC, 0x01, 0x00, -/* 000092A0 */ 0x00, 0x0D, 0x00, 0x00, 0x00, 0x8E, 0x00, 0x00, 0x00, 0x78, 0x81, 0x8E, 0x72, 0x78, 0x03, 0x8E, -/* 000092B0 */ 0x73, 0x78, 0x51, 0x8E, 0x74, 0x78, 0x03, 0x8E, 0x75, 0x5A, 0x03, 0x8E, 0x1F, 0x04, 0xFF, 0x8C, -/* 000092C0 */ 0x90, 0x37, 0x8D, 0x6A, 0x8C, 0x8D, 0x71, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x8D, 0x68, 0x8E, 0x00, -/* 000092D0 */ 0x00, 0x00, 0x8E, 0x5A, 0x01, 0x8E, 0x5A, 0x02, 0x56, 0xCB, 0xC4, 0x01, 0x00, 0x00, 0x0E, 0x00, -/* 000092E0 */ 0x00, 0x00, 0x8E, 0x00, 0x00, 0x00, 0x78, 0x82, 0x8E, 0x72, 0x78, 0x03, 0x8E, 0x73, 0x78, 0x51, -/* 000092F0 */ 0x8E, 0x74, 0x78, 0x03, 0x8E, 0x75, 0x5A, 0x03, 0x8E, 0x1F, 0x04, 0xFF, 0x8C, 0x90, 0x37, 0x8D, -/* 00009300 */ 0x6A, 0x8C, 0x8D, 0x71, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x8D, 0x68, 0x8E, 0x00, 0x00, 0x00, 0x8E, -/* 00009310 */ 0x5A, 0x01, 0x8E, 0x5A, 0x02, 0x57, 0xCB, 0xDC, 0x01, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x8E, -/* 00009320 */ 0x00, 0x00, 0x00, 0x78, 0x83, 0x8E, 0x72, 0x78, 0x03, 0x8E, 0x73, 0x78, 0x51, 0x8E, 0x74, 0x78, -/* 00009330 */ 0x03, 0x8E, 0x75, 0x5A, 0x03, 0x8E, 0x1F, 0x04, 0xFF, 0x8C, 0x09, 0x33, 0x07, 0xDE, 0x00, 0x1A, -/* 00009340 */ 0x07, 0xB6, 0x8C, 0x00, 0x01, 0x53, 0x01, 0x4C, 0x75, 0x8C, 0x93, 0x00, 0x02, 0x75, 0x01, 0x53, -/* 00009350 */ 0x01, 0x4D, 0x76, 0x8C, 0x93, 0x00, 0x03, 0x76, 0x01, 0x53, 0x01, 0x4E, 0x77, 0x8C, 0x93, 0x00, -/* 00009360 */ 0x04, 0x77, 0x01, 0x53, 0x01, 0x4F, 0x78, 0x8C, 0x93, 0x00, 0x05, 0x78, 0x01, 0x53, 0x01, 0x50, -/* 00009370 */ 0x79, 0x8C, 0x93, 0x00, 0x06, 0x79, 0x01, 0x53, 0x01, 0x51, 0x7A, 0x8C, 0x93, 0x00, 0x07, 0x7A, -/* 00009380 */ 0x01, 0x53, 0x01, 0x52, 0x7B, 0x8C, 0x93, 0x00, 0x08, 0x7B, 0x4F, 0x8C, 0x93, 0x00, 0x09, 0x8C, -/* 00009390 */ 0x4F, 0x8C, 0x93, 0x00, 0x0A, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x0B, 0x8C, 0x4F, 0x8C, 0x93, 0x00, -/* 000093A0 */ 0x0C, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x0D, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x0E, 0x8C, 0x4F, 0x8C, -/* 000093B0 */ 0x93, 0x00, 0x0F, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x10, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x11, 0x8C, -/* 000093C0 */ 0x4F, 0x8C, 0x93, 0x00, 0x12, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x13, 0x8C, 0x4F, 0x8C, 0x93, 0x00, -/* 000093D0 */ 0x14, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x15, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x16, 0x8C, 0x4F, 0x8C, -/* 000093E0 */ 0x93, 0x00, 0x17, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x18, 0x8C, 0x4F, 0x8C, 0x93, 0x00, 0x19, 0x8C, -/* 000093F0 */ 0x90, 0x03, 0x8C, 0x5F, 0x8C, 0x8C, 0x76, 0xA6, 0x8D, 0x14, 0x03, 0x00, 0x8C, 0x8D, 0x09, 0x14, -/* 00009400 */ 0x00, 0x90, 0x03, 0x8C, 0x90, 0x02, 0x8D, 0x07, 0x01, 0x00, 0x02, 0xC1, 0x01, 0x8D, 0x00, 0x8D, -/* 00009410 */ 0x00, 0x74, 0x8D, 0x8C, 0x77, 0x90, 0x03, 0x8C, 0x5F, 0x8C, 0x8C, 0x78, 0xA6, 0x8D, 0x14, 0x03, -/* 00009420 */ 0x00, 0x8C, 0x8D, 0x09, 0x14, 0x00, 0x90, 0x03, 0x8C, 0x90, 0x02, 0x8D, 0x07, 0x01, 0x00, 0x02, -/* 00009430 */ 0xC1, 0x01, 0x8D, 0x00, 0x8D, 0x00, 0x74, 0x8D, 0x8C, 0x79, 0xA6, 0x8C, 0x93, 0x00, 0x09, 0x8C, -/* 00009440 */ 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x3F, 0x8C, 0x8D, 0x93, 0x00, 0x0A, 0x8C, 0xB6, 0x8D, 0x00, -/* 00009450 */ 0x01, 0x53, 0x01, 0x40, 0x8C, 0x8D, 0x93, 0x00, 0x0B, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, -/* 00009460 */ 0x41, 0x8C, 0x8D, 0x93, 0x00, 0x0C, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x42, 0x8C, 0x8D, -/* 00009470 */ 0x94, 0x25, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x43, 0x8C, 0x8D, 0x94, 0x22, 0x8C, 0xB6, -/* 00009480 */ 0x8D, 0x00, 0x01, 0x53, 0x01, 0x44, 0x8C, 0x8D, 0x94, 0x23, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, -/* 00009490 */ 0x01, 0x45, 0x8C, 0x8D, 0x94, 0x26, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x46, 0x8C, 0x8D, -/* 000094A0 */ 0x94, 0x27, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x47, 0x8C, 0x8D, 0x94, 0x28, 0x8C, 0xB6, -/* 000094B0 */ 0x8D, 0x00, 0x01, 0x53, 0x01, 0x48, 0x8C, 0x8D, 0x94, 0x29, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, -/* 000094C0 */ 0x01, 0x49, 0x8C, 0x8D, 0x94, 0x2A, 0x8C, 0xA6, 0x8C, 0x93, 0x00, 0x0D, 0x8C, 0xB6, 0x8D, 0x00, -/* 000094D0 */ 0x01, 0x53, 0x01, 0x4A, 0x8C, 0x8D, 0x94, 0x2B, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x4B, -/* 000094E0 */ 0x8C, 0x8D, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x02, 0x02, 0x1F, 0x01, 0x8C, 0x00, 0x8C, 0x00, 0x94, -/* 000094F0 */ 0x24, 0x8C, 0xA6, 0x8C, 0x93, 0x00, 0x0E, 0x8C, 0xA6, 0x8C, 0x93, 0x00, 0x0F, 0x8C, 0xA6, 0x8C, -/* 00009500 */ 0x93, 0x00, 0x10, 0x8C, 0xA6, 0x8C, 0x93, 0x00, 0x11, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, -/* 00009510 */ 0x53, 0x8C, 0x8D, 0x94, 0x2C, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x54, 0x8C, 0x8D, 0x94, -/* 00009520 */ 0x2D, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x55, 0x8C, 0x8D, 0x94, 0x2E, 0x8C, 0x90, 0x04, -/* 00009530 */ 0x8C, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0xCA, 0x8D, 0x5A, 0x01, 0x8D, 0x5A, 0x02, 0x09, 0x02, -/* 00009540 */ 0x1F, 0x03, 0x8C, 0x00, 0x8C, 0x00, 0x47, 0x84, 0x8C, 0x90, 0x03, 0x8D, 0x6A, 0x8C, 0x8D, 0x6E, -/* 00009550 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x8D, 0x5A, 0x01, 0x84, 0x90, 0x04, 0x8E, 0x07, 0x03, 0x00, 0x5A, -/* 00009560 */ 0x00, 0x02, 0xCB, 0xF4, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x8F, 0x00, 0x00, 0x00, 0x78, -/* 00009570 */ 0x4A, 0x8F, 0x7A, 0x5A, 0x01, 0x8F, 0x5A, 0x02, 0x09, 0x02, 0x1F, 0x03, 0x8E, 0x00, 0x8E, 0x00, -/* 00009580 */ 0x5A, 0x02, 0x8E, 0x1F, 0x03, 0xFF, 0x8C, 0x93, 0x00, 0x12, 0x58, 0x90, 0x06, 0x8C, 0x07, 0x04, -/* 00009590 */ 0x00, 0x5A, 0x00, 0x02, 0x90, 0x1A, 0x8D, 0x5A, 0x01, 0x8D, 0x90, 0x23, 0x8D, 0x07, 0x03, 0x00, -/* 000095A0 */ 0x5A, 0x00, 0x02, 0x8E, 0x00, 0x12, 0x8E, 0x5A, 0x01, 0x8E, 0xB6, 0x8F, 0x00, 0x01, 0x53, 0x01, -/* 000095B0 */ 0x56, 0x8E, 0x8F, 0x5A, 0x02, 0x8E, 0x02, 0x1F, 0x03, 0x8D, 0x00, 0x8D, 0x00, 0x5A, 0x02, 0x8D, -/* 000095C0 */ 0x5A, 0x03, 0x84, 0x02, 0x1F, 0x04, 0x8C, 0x00, 0x8C, 0x00, 0x93, 0x00, 0x13, 0x8C, 0x93, 0x00, -/* 000095D0 */ 0x14, 0x59, 0x90, 0x06, 0x8C, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x90, 0x1A, 0x8D, 0x5A, 0x01, -/* 000095E0 */ 0x8D, 0x90, 0x23, 0x8D, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x8E, 0x00, 0x14, 0x8E, 0x5A, 0x01, -/* 000095F0 */ 0x8E, 0xB6, 0x8F, 0x00, 0x01, 0x53, 0x01, 0x57, 0x8E, 0x8F, 0x5A, 0x02, 0x8E, 0x02, 0x1F, 0x03, -/* 00009600 */ 0x8D, 0x00, 0x8D, 0x00, 0x5A, 0x02, 0x8D, 0x5A, 0x03, 0x84, 0x02, 0x1F, 0x04, 0x8C, 0x00, 0x8C, -/* 00009610 */ 0x00, 0x93, 0x00, 0x15, 0x8C, 0x93, 0x00, 0x16, 0x5A, 0x90, 0x06, 0x8C, 0x07, 0x04, 0x00, 0x5A, -/* 00009620 */ 0x00, 0x02, 0x90, 0x1A, 0x8D, 0x5A, 0x01, 0x8D, 0x90, 0x23, 0x8D, 0x07, 0x03, 0x00, 0x5A, 0x00, -/* 00009630 */ 0x02, 0x8E, 0x00, 0x16, 0x8E, 0x5A, 0x01, 0x8E, 0xB6, 0x8F, 0x00, 0x01, 0x53, 0x01, 0x58, 0x8E, -/* 00009640 */ 0x8F, 0x5A, 0x02, 0x8E, 0x02, 0x1F, 0x03, 0x8D, 0x00, 0x8D, 0x00, 0x5A, 0x02, 0x8D, 0x5A, 0x03, -/* 00009650 */ 0x84, 0x02, 0x1F, 0x04, 0x8C, 0x00, 0x8C, 0x00, 0x93, 0x00, 0x17, 0x8C, 0x93, 0x00, 0x18, 0x4C, -/* 00009660 */ 0x90, 0x06, 0x8C, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x90, 0x1A, 0x8D, 0x5A, 0x01, 0x8D, 0x90, -/* 00009670 */ 0x23, 0x8D, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x8E, 0x00, 0x18, 0x8E, 0x5A, 0x01, 0x8E, 0xB6, -/* 00009680 */ 0x8F, 0x00, 0x01, 0x53, 0x01, 0x59, 0x8E, 0x8F, 0x5A, 0x02, 0x8E, 0x02, 0x1F, 0x03, 0x8D, 0x00, -/* 00009690 */ 0x8D, 0x00, 0x5A, 0x02, 0x8D, 0x5A, 0x03, 0x84, 0x02, 0x1F, 0x04, 0x8C, 0x00, 0x8C, 0x00, 0x47, -/* 000096A0 */ 0x85, 0x8C, 0x90, 0x15, 0x8C, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8E, 0x00, 0x13, 0x8D, 0x5A, -/* 000096B0 */ 0x01, 0x8D, 0x5A, 0x02, 0x4D, 0xCB, 0x00, 0x02, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x8D, 0x00, -/* 000096C0 */ 0x00, 0x00, 0x78, 0x5B, 0x8D, 0x7B, 0x5A, 0x03, 0x8D, 0x1F, 0x04, 0xFF, 0x8C, 0x90, 0x15, 0x8C, -/* 000096D0 */ 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8E, 0x00, 0x15, 0x8D, 0x5A, 0x01, 0x8D, 0x5A, 0x02, 0x4D, -/* 000096E0 */ 0xCB, 0x0C, 0x02, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, 0x78, 0x5B, 0x8D, -/* 000096F0 */ 0x7B, 0x5A, 0x03, 0x8D, 0x1F, 0x04, 0xFF, 0x8C, 0x90, 0x15, 0x8C, 0x07, 0x04, 0x00, 0x5A, 0x00, -/* 00009700 */ 0x02, 0x8E, 0x00, 0x17, 0x8D, 0x5A, 0x01, 0x8D, 0x5A, 0x02, 0x4D, 0xCB, 0x18, 0x02, 0x00, 0x00, -/* 00009710 */ 0x13, 0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, 0x78, 0x5B, 0x8D, 0x7B, 0x5A, 0x03, 0x8D, 0x1F, -/* 00009720 */ 0x04, 0xFF, 0x8C, 0x90, 0x15, 0x8C, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x85, 0x5A, -/* 00009730 */ 0x02, 0x4D, 0xCB, 0x24, 0x02, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, 0x78, -/* 00009740 */ 0x4F, 0x8D, 0x7B, 0x5A, 0x03, 0x8D, 0x1F, 0x04, 0xFF, 0x8C, 0x90, 0x04, 0x8C, 0x07, 0x03, 0x00, -/* 00009750 */ 0x5A, 0x00, 0x02, 0xCB, 0x30, 0x02, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, -/* 00009760 */ 0x90, 0x04, 0x8E, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0x5C, 0x02, 0x00, 0x00, 0x16, 0x00, -/* 00009770 */ 0x00, 0x00, 0x8F, 0x00, 0x00, 0x00, 0x78, 0x5E, 0x8F, 0x7C, 0x5A, 0x01, 0x8F, 0x5A, 0x02, 0x09, -/* 00009780 */ 0x02, 0x1F, 0x03, 0x8E, 0x00, 0x8E, 0x00, 0x78, 0x8E, 0x8D, 0x7D, 0x90, 0x04, 0x8E, 0x07, 0x03, -/* 00009790 */ 0x00, 0x5A, 0x00, 0x02, 0xCB, 0x68, 0x02, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x8F, 0x00, 0x00, -/* 000097A0 */ 0x00, 0x78, 0x5E, 0x8F, 0x7C, 0x5A, 0x01, 0x8F, 0x5A, 0x02, 0x09, 0x02, 0x1F, 0x03, 0x8E, 0x00, -/* 000097B0 */ 0x8E, 0x00, 0x78, 0x8E, 0x8D, 0x7E, 0x90, 0x04, 0x8E, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0xCB, -/* 000097C0 */ 0x74, 0x02, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x8F, 0x00, 0x00, 0x00, 0x78, 0x62, 0x8F, 0x7F, -/* 000097D0 */ 0x5A, 0x01, 0x8F, 0x5A, 0x02, 0x09, 0x02, 0x1F, 0x03, 0x8E, 0x00, 0x8E, 0x00, 0x78, 0x8E, 0x8D, -/* 000097E0 */ 0x80, 0x90, 0x04, 0x8E, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0x80, 0x02, 0x00, 0x00, 0x19, -/* 000097F0 */ 0x00, 0x00, 0x00, 0x8F, 0x00, 0x00, 0x00, 0x78, 0x65, 0x8F, 0x81, 0x5A, 0x01, 0x8F, 0x5A, 0x02, -/* 00009800 */ 0x09, 0x02, 0x1F, 0x03, 0x8E, 0x00, 0x8E, 0x00, 0x78, 0x8E, 0x8D, 0x82, 0x90, 0x04, 0x8E, 0x07, -/* 00009810 */ 0x03, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0x8C, 0x02, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00, 0x8F, 0x00, -/* 00009820 */ 0x00, 0x00, 0x78, 0x68, 0x8F, 0x83, 0x78, 0x65, 0x8F, 0x81, 0x78, 0x6A, 0x8F, 0x84, 0x5A, 0x01, -/* 00009830 */ 0x8F, 0x5A, 0x02, 0x09, 0x02, 0x1F, 0x03, 0x8E, 0x00, 0x8E, 0x00, 0x78, 0x8E, 0x8D, 0x85, 0x90, -/* 00009840 */ 0x04, 0x8E, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0xA0, 0x02, 0x00, 0x00, 0x1B, 0x00, 0x00, -/* 00009850 */ 0x00, 0x8F, 0x00, 0x00, 0x00, 0x78, 0x65, 0x8F, 0x81, 0x78, 0x6A, 0x8F, 0x84, 0x5A, 0x01, 0x8F, -/* 00009860 */ 0x5A, 0x02, 0x09, 0x02, 0x1F, 0x03, 0x8E, 0x00, 0x8E, 0x00, 0x78, 0x8E, 0x8D, 0x86, 0x90, 0x04, -/* 00009870 */ 0x8E, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0xB0, 0x02, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, -/* 00009880 */ 0x8F, 0x00, 0x00, 0x00, 0x78, 0x65, 0x8F, 0x81, 0x78, 0x6A, 0x8F, 0x84, 0x5A, 0x01, 0x8F, 0x5A, -/* 00009890 */ 0x02, 0x09, 0x02, 0x1F, 0x03, 0x8E, 0x00, 0x8E, 0x00, 0x78, 0x8E, 0x8D, 0x87, 0x90, 0x04, 0x8E, -/* 000098A0 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0xC0, 0x02, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0x8F, -/* 000098B0 */ 0x00, 0x00, 0x00, 0x78, 0x69, 0x8F, 0x84, 0x78, 0x6A, 0x8F, 0x88, 0x5A, 0x01, 0x8F, 0x5A, 0x02, -/* 000098C0 */ 0x09, 0x02, 0x1F, 0x03, 0x8E, 0x00, 0x8E, 0x00, 0x78, 0x8E, 0x8D, 0x89, 0x90, 0x04, 0x8E, 0x07, -/* 000098D0 */ 0x03, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0xD0, 0x02, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x8F, 0x00, -/* 000098E0 */ 0x00, 0x00, 0x78, 0x69, 0x8F, 0x84, 0x78, 0x6A, 0x8F, 0x88, 0x5A, 0x01, 0x8F, 0x5A, 0x02, 0x09, -/* 000098F0 */ 0x02, 0x1F, 0x03, 0x8E, 0x00, 0x8E, 0x00, 0x78, 0x8E, 0x8D, 0x8A, 0x5A, 0x01, 0x8D, 0x5A, 0x02, -/* 00009900 */ 0x09, 0x02, 0x1F, 0x03, 0x8C, 0x00, 0x8C, 0x00, 0x94, 0x2F, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, -/* 00009910 */ 0x01, 0x5A, 0x8C, 0x8D, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x02, 0x02, 0x1F, 0x01, 0x8C, 0x00, 0x8C, -/* 00009920 */ 0x00, 0x94, 0x30, 0x8C, 0xA6, 0x8C, 0x93, 0x00, 0x19, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, -/* 00009930 */ 0x5B, 0x8C, 0x8D, 0x94, 0x31, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x5C, 0x8C, 0x8D, 0x07, -/* 00009940 */ 0x01, 0x00, 0x5A, 0x00, 0x02, 0x02, 0x1F, 0x01, 0x8C, 0x00, 0x8C, 0x00, 0x47, 0x86, 0x8C, 0xB6, -/* 00009950 */ 0x8D, 0x00, 0x01, 0x53, 0x01, 0x5D, 0x8C, 0x8D, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x02, 0x02, 0x1F, -/* 00009960 */ 0x01, 0x8C, 0x00, 0x8C, 0x00, 0x47, 0x81, 0x8C, 0xB6, 0x8D, 0x00, 0x01, 0x53, 0x01, 0x5E, 0x8C, -/* 00009970 */ 0x8D, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x02, 0x02, 0x1F, 0x01, 0x8C, 0x00, 0x8C, 0x00, 0x47, 0x82, -/* 00009980 */ 0x8C, 0x90, 0x32, 0x8C, 0x14, 0x03, 0x00, 0x8C, 0x4B, 0x09, 0xE4, 0x00, 0x90, 0x15, 0x8C, 0x07, -/* 00009990 */ 0x04, 0x00, 0x5A, 0x00, 0x02, 0x68, 0x8E, 0x00, 0x00, 0x00, 0x8D, 0x5A, 0x01, 0x8D, 0x5A, 0x02, -/* 000099A0 */ 0x54, 0xCB, 0xE0, 0x02, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, 0x78, 0x86, -/* 000099B0 */ 0x8D, 0x7B, 0x78, 0x03, 0x8D, 0x8B, 0x78, 0x51, 0x8D, 0x8C, 0x78, 0x03, 0x8D, 0x8D, 0x5A, 0x03, -/* 000099C0 */ 0x8D, 0x1F, 0x04, 0xFF, 0x8C, 0x90, 0x15, 0x8C, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x68, 0x8E, -/* 000099D0 */ 0x00, 0x00, 0x00, 0x8D, 0x5A, 0x01, 0x8D, 0x5A, 0x02, 0x55, 0xCB, 0xF8, 0x02, 0x00, 0x00, 0x20, -/* 000099E0 */ 0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, 0x78, 0x81, 0x8D, 0x7B, 0x78, 0x03, 0x8D, 0x8B, 0x78, -/* 000099F0 */ 0x51, 0x8D, 0x8C, 0x78, 0x03, 0x8D, 0x8D, 0x5A, 0x03, 0x8D, 0x1F, 0x04, 0xFF, 0x8C, 0x90, 0x15, -/* 00009A00 */ 0x8C, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x68, 0x8E, 0x00, 0x00, 0x00, 0x8D, 0x5A, 0x01, 0x8D, -/* 00009A10 */ 0x5A, 0x02, 0x56, 0xCB, 0x10, 0x03, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, -/* 00009A20 */ 0x78, 0x82, 0x8D, 0x7B, 0x78, 0x03, 0x8D, 0x8B, 0x78, 0x51, 0x8D, 0x8C, 0x78, 0x03, 0x8D, 0x8D, -/* 00009A30 */ 0x5A, 0x03, 0x8D, 0x1F, 0x04, 0xFF, 0x8C, 0x90, 0x15, 0x8C, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, -/* 00009A40 */ 0x68, 0x8E, 0x00, 0x00, 0x00, 0x8D, 0x5A, 0x01, 0x8D, 0x5A, 0x02, 0x4F, 0xCB, 0x28, 0x03, 0x00, -/* 00009A50 */ 0x00, 0x22, 0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, 0x78, 0x85, 0x8D, 0x7B, 0x78, 0x03, 0x8D, -/* 00009A60 */ 0x8B, 0x78, 0x51, 0x8D, 0x8C, 0x78, 0x03, 0x8D, 0x8D, 0x5A, 0x03, 0x8D, 0x1F, 0x04, 0xFF, 0x8C, -/* 00009A70 */ 0xA6, 0x00, 0x24, 0x00, 0x23, 0xFE, 0x40, 0x03, 0x00, 0x28, 0x03, 0x00, 0x00, 0x03, 0x04, 0x00, -/* 00009A80 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, -/* 00009A90 */ 0x00, 0x81, 0x01, 0x00, 0x00, 0x10, 0x03, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 00009AA0 */ 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, -/* 00009AB0 */ 0x00, 0xF8, 0x02, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, -/* 00009AC0 */ 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0xE0, 0x02, 0x00, -/* 00009AD0 */ 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, -/* 00009AE0 */ 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0xD0, 0x02, 0x00, 0x00, 0x03, 0x02, 0x00, -/* 00009AF0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x5A, 0x03, 0x00, 0x00, 0x5F, 0x03, 0x00, 0x00, 0xC0, 0x02, 0x00, -/* 00009B00 */ 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5A, 0x03, 0x00, 0x00, 0x5F, 0x03, 0x00, -/* 00009B10 */ 0x00, 0xB0, 0x02, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x03, 0x00, -/* 00009B20 */ 0x00, 0x5A, 0x03, 0x00, 0x00, 0xA0, 0x02, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 00009B30 */ 0x00, 0x55, 0x03, 0x00, 0x00, 0x5A, 0x03, 0x00, 0x00, 0x8C, 0x02, 0x00, 0x00, 0x03, 0x03, 0x00, -/* 00009B40 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x03, 0x00, 0x00, 0x55, 0x03, 0x00, 0x00, 0x5A, 0x03, 0x00, -/* 00009B50 */ 0x00, 0x80, 0x02, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x03, 0x00, -/* 00009B60 */ 0x00, 0x74, 0x02, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x03, 0x00, -/* 00009B70 */ 0x00, 0x68, 0x02, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4E, 0x03, 0x00, -/* 00009B80 */ 0x00, 0x5C, 0x02, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4E, 0x03, 0x00, -/* 00009B90 */ 0x00, 0x30, 0x02, 0x00, 0x00, 0x03, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x03, 0x00, -/* 00009BA0 */ 0x00, 0x50, 0x03, 0x00, 0x00, 0x51, 0x03, 0x00, 0x00, 0x54, 0x03, 0x00, 0x00, 0x57, 0x03, 0x00, -/* 00009BB0 */ 0x00, 0x5C, 0x03, 0x00, 0x00, 0x5D, 0x03, 0x00, 0x00, 0x5E, 0x03, 0x00, 0x00, 0x60, 0x03, 0x00, -/* 00009BC0 */ 0x00, 0x24, 0x02, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, -/* 00009BD0 */ 0x00, 0x18, 0x02, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, -/* 00009BE0 */ 0x00, 0x0C, 0x02, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, -/* 00009BF0 */ 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, -/* 00009C00 */ 0x00, 0xF4, 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0x01, 0x00, -/* 00009C10 */ 0x00, 0xDC, 0x01, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, -/* 00009C20 */ 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0xC4, 0x01, 0x00, -/* 00009C30 */ 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, -/* 00009C40 */ 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0xAC, 0x01, 0x00, 0x00, 0x03, 0x04, 0x00, -/* 00009C50 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, -/* 00009C60 */ 0x00, 0x81, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 00009C70 */ 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, -/* 00009C80 */ 0x00, 0x7C, 0x01, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, -/* 00009C90 */ 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x64, 0x01, 0x00, -/* 00009CA0 */ 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, -/* 00009CB0 */ 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x58, 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, -/* 00009CC0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0x01, 0x00, 0x00, 0x3C, 0x01, 0x00, 0x00, 0x03, 0x05, 0x00, -/* 00009CD0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x03, 0x00, 0x00, 0x37, 0x03, 0x00, 0x00, 0x38, 0x03, 0x00, -/* 00009CE0 */ 0x00, 0x39, 0x03, 0x00, 0x00, 0x3A, 0x03, 0x00, 0x00, 0x24, 0x01, 0x00, 0x00, 0x03, 0x04, 0x00, -/* 00009CF0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x2C, 0x03, 0x00, 0x00, 0x33, 0x03, 0x00, 0x00, 0x34, 0x03, 0x00, -/* 00009D00 */ 0x00, 0x35, 0x03, 0x00, 0x00, 0x0C, 0x01, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 00009D10 */ 0x00, 0x2C, 0x03, 0x00, 0x00, 0x30, 0x03, 0x00, 0x00, 0x31, 0x03, 0x00, 0x00, 0x32, 0x03, 0x00, -/* 00009D20 */ 0x00, 0xF4, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x03, 0x00, -/* 00009D30 */ 0x00, 0x2E, 0x03, 0x00, 0x00, 0x7B, 0x00, 0x00, 0x00, 0x2C, 0x03, 0x00, 0x00, 0xD8, 0x00, 0x00, -/* 00009D40 */ 0x00, 0x03, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x03, 0x00, 0x00, 0x29, 0x03, 0x00, -/* 00009D50 */ 0x00, 0x2A, 0x03, 0x00, 0x00, 0x2B, 0x03, 0x00, 0x00, 0x2C, 0x03, 0x00, 0x00, 0xC8, 0x00, 0x00, -/* 00009D60 */ 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0x03, 0x00, 0x00, 0x27, 0x03, 0x00, -/* 00009D70 */ 0x00, 0x3C, 0x00, 0x00, 0x00, 0x03, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x69, 0x01, 0x00, -/* 00009D80 */ 0x00, 0x63, 0x01, 0x00, 0x00, 0x22, 0x01, 0x00, 0x00, 0x45, 0x01, 0x00, 0x00, 0x4C, 0x01, 0x00, -/* 00009D90 */ 0x00, 0x0E, 0x03, 0x00, 0x00, 0xF1, 0x00, 0x00, 0x00, 0x29, 0x01, 0x00, 0x00, 0x86, 0x00, 0x00, -/* 00009DA0 */ 0x00, 0x18, 0x01, 0x00, 0x00, 0xBC, 0x00, 0x00, 0x00, 0x14, 0x03, 0x00, 0x00, 0xC5, 0x00, 0x00, -/* 00009DB0 */ 0x00, 0x1C, 0x01, 0x00, 0x00, 0x3F, 0x01, 0x00, 0x00, 0x5D, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, -/* 00009DC0 */ 0x00, 0x1A, 0x03, 0x00, 0x00, 0xBF, 0x00, 0x00, 0x00, 0xA7, 0x00, 0x00, 0x00, 0x88, 0x01, 0x00, -/* 00009DD0 */ 0x00, 0xB0, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x86, 0x01, 0x00, 0x00, 0x1B, 0x00, 0x00, -/* 00009DE0 */ 0x00, 0x23, 0x00, 0x00, 0x00, 0xEE, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0xB1, 0x00, 0x00, -/* 00009DF0 */ 0x00, 0xB4, 0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, 0x4D, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, -/* 00009E00 */ 0x00, 0x18, 0x00, 0x00, 0x00, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0x00, -/* 00009E10 */ 0x00, 0x03, 0x03, 0x00, 0x00, 0x04, 0x03, 0x00, 0x00, 0x05, 0x03, 0x00, 0x00, 0x06, 0x03, 0x00, -/* 00009E20 */ 0x00, 0x07, 0x03, 0x00, 0x00, 0x08, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, -/* 00009E30 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xEE, 0x00, 0x00, -/* 00009E40 */ 0x00, 0x29, 0x00, 0x00, 0x00, 0xAB, 0xFE, 0x61, 0x03, 0xFE, 0xFE, 0x01, 0xFE, 0xFE, 0x01, 0xFE, -/* 00009E50 */ 0x81, 0x02, 0xFE, 0x82, 0x02, 0xFE, 0x84, 0x02, 0x51, 0xFE, 0x02, 0x01, 0xFE, 0x28, 0x01, 0xFD, -/* 00009E60 */ 0xFE, 0x4A, 0x01, 0x63, 0x76, 0xFE, 0xD6, 0x01, 0xFE, 0x79, 0x02, 0x1B, 0xFE, 0x7A, 0x02, 0x23, -/* 00009E70 */ 0xFE, 0x7B, 0x02, 0xEE, 0xFE, 0x7C, 0x02, 0x29, 0xFE, 0x6A, 0x02, 0xFE, 0x6C, 0x02, 0xFE, 0x69, -/* 00009E80 */ 0x02, 0xFE, 0x6B, 0x02, 0xFE, 0x68, 0x02, 0xFE, 0x5C, 0x02, 0xFE, 0x5D, 0x02, 0xFE, 0x60, 0x02, -/* 00009E90 */ 0xFE, 0x5E, 0x02, 0xFE, 0x66, 0x02, 0xFE, 0x63, 0x02, 0xFE, 0x64, 0x02, 0xFE, 0x74, 0x02, 0xFE, -/* 00009EA0 */ 0x77, 0x02, 0xFE, 0x78, 0x02, 0xFE, 0x80, 0x02, 0xFE, 0x57, 0x02, 0xFE, 0x58, 0x02, 0xFE, 0x02, -/* 00009EB0 */ 0x03, 0xFE, 0x03, 0x03, 0xFE, 0x04, 0x03, 0xFE, 0x05, 0x03, 0xFE, 0x06, 0x03, 0xFE, 0x07, 0x03, -/* 00009EC0 */ 0xFE, 0x08, 0x03, 0xFE, 0x69, 0x01, 0xFE, 0x63, 0x01, 0xFE, 0x22, 0x01, 0xFE, 0x45, 0x01, 0xFE, -/* 00009ED0 */ 0x4C, 0x01, 0xFE, 0x0E, 0x03, 0xF1, 0xFE, 0x29, 0x01, 0x86, 0xFE, 0x18, 0x01, 0xBC, 0xFE, 0x14, -/* 00009EE0 */ 0x03, 0xC5, 0xFE, 0x1C, 0x01, 0xFE, 0x3F, 0x01, 0x5D, 0x7E, 0xFE, 0x1A, 0x03, 0xFE, 0x6D, 0x02, -/* 00009EF0 */ 0xBF, 0xA7, 0xFE, 0x88, 0x01, 0xFE, 0x6C, 0x02, 0xB0, 0x61, 0xFE, 0x86, 0x01, 0xFE, 0x79, 0x02, -/* 00009F00 */ 0x1B, 0x23, 0xFE, 0x7B, 0x02, 0xEE, 0xFE, 0x7C, 0x02, 0x29, 0xFE, 0x57, 0x02, 0xB1, 0xFE, 0x58, -/* 00009F10 */ 0x02, 0xB4, 0x8D, 0x4D, 0x48, 0xFE, 0x26, 0x03, 0xFE, 0x27, 0x03, 0xFE, 0x28, 0x03, 0xFE, 0x29, -/* 00009F20 */ 0x03, 0xFE, 0x2A, 0x03, 0xFE, 0x2B, 0x03, 0xFE, 0x2C, 0x03, 0xFE, 0x2D, 0x03, 0xFE, 0x2E, 0x03, -/* 00009F30 */ 0x7B, 0xFE, 0x30, 0x03, 0xFE, 0x31, 0x03, 0xFE, 0x32, 0x03, 0xFE, 0x33, 0x03, 0xFE, 0x34, 0x03, -/* 00009F40 */ 0xFE, 0x35, 0x03, 0xFE, 0x36, 0x03, 0xFE, 0x37, 0x03, 0xFE, 0x38, 0x03, 0xFE, 0x39, 0x03, 0xFE, -/* 00009F50 */ 0x3A, 0x03, 0x61, 0xFE, 0xF0, 0x01, 0xFE, 0xF6, 0x01, 0x4D, 0xFE, 0x88, 0x01, 0xFE, 0x83, 0x01, -/* 00009F60 */ 0xFE, 0x82, 0x01, 0xFE, 0x80, 0x01, 0xFE, 0x81, 0x01, 0xFE, 0x62, 0x03, 0xFE, 0x62, 0x03, 0xFE, -/* 00009F70 */ 0x63, 0x03, 0xFE, 0x63, 0x03, 0xFE, 0xF6, 0x01, 0xFE, 0x83, 0x01, 0xFE, 0x4E, 0x03, 0xFE, 0x4D, -/* 00009F80 */ 0x03, 0xFE, 0x50, 0x03, 0xFE, 0x52, 0x03, 0xFE, 0x51, 0x03, 0xFE, 0x55, 0x03, 0xFE, 0x54, 0x03, -/* 00009F90 */ 0xFE, 0x58, 0x03, 0xFE, 0x5A, 0x03, 0xFE, 0x57, 0x03, 0xFE, 0x5C, 0x03, 0xFE, 0x5D, 0x03, 0xFE, -/* 00009FA0 */ 0x5F, 0x03, 0xFE, 0x5E, 0x03, 0xFE, 0x60, 0x03, 0xFE, 0x82, 0x01, 0xFE, 0x80, 0x01, 0xFE, 0x81, -/* 00009FB0 */ 0x01, 0xAB, 0x03, 0x03, 0x18, 0x00, 0xFE, 0x64, 0x03, 0x01, 0xFE, 0x65, 0x03, 0x02, 0xFE, 0x66, -/* 00009FC0 */ 0x03, 0x03, 0xFE, 0x67, 0x03, 0x04, 0xFE, 0x68, 0x03, 0x05, 0xFE, 0x69, 0x03, 0x06, 0xFE, 0x6A, -/* 00009FD0 */ 0x03, 0x07, 0xFE, 0x6B, 0x03, 0x08, 0xFE, 0x6C, 0x03, 0x09, 0xFE, 0x6D, 0x03, 0x0A, 0xFE, 0x6E, -/* 00009FE0 */ 0x03, 0x0B, 0xFE, 0x6F, 0x03, 0x0C, 0xFE, 0x70, 0x03, 0x0D, 0xFE, 0x71, 0x03, 0x0E, 0xFE, 0x72, -/* 00009FF0 */ 0x03, 0x0F, 0xFE, 0x73, 0x03, 0x10, 0xFE, 0x74, 0x03, 0x11, 0xFE, 0x75, 0x03, 0x12, 0xFE, 0x76, -/* 0000A000 */ 0x03, 0x13, 0xFE, 0x77, 0x03, 0x14, 0xFE, 0x78, 0x03, 0x15, 0xFE, 0x79, 0x03, 0x16, 0xFE, 0x7A, -/* 0000A010 */ 0x03, 0x17, 0xFE, 0x7B, 0x03, 0x05, 0x01, 0x00, 0xFE, 0x7C, 0x03, 0x07, 0x18, 0x00, 0xFE, 0x64, -/* 0000A020 */ 0x03, 0x01, 0xFE, 0x6E, 0x03, 0x02, 0xFE, 0x65, 0x03, 0x03, 0xFE, 0x7D, 0x03, 0x04, 0xFE, 0x71, -/* 0000A030 */ 0x03, 0x05, 0xFE, 0x73, 0x03, 0x06, 0xFE, 0x74, 0x03, 0x07, 0xFE, 0x66, 0x03, 0x08, 0xFE, 0x67, -/* 0000A040 */ 0x03, 0x09, 0xFE, 0x7E, 0x03, 0x0A, 0xFE, 0x7F, 0x03, 0x0B, 0xFE, 0x80, 0x03, 0x0C, 0xFE, 0x6F, -/* 0000A050 */ 0x03, 0x0D, 0xFE, 0x81, 0x03, 0x0E, 0xFE, 0x82, 0x03, 0x0F, 0xFE, 0x83, 0x03, 0x10, 0xFE, 0x84, -/* 0000A060 */ 0x03, 0x11, 0xFE, 0x85, 0x03, 0x12, 0xFE, 0x86, 0x03, 0x13, 0xFE, 0x87, 0x03, 0x14, 0xFE, 0x88, -/* 0000A070 */ 0x03, 0x15, 0xFE, 0x89, 0x03, 0x16, 0xFE, 0x7C, 0x03, 0x17, 0xFE, 0x8A, 0x03, 0xFE, 0xBB, 0x01, -/* 0000A080 */ 0x8C, 0x66, 0x00, 0x00, 0x00, 0x07, 0x00, 0xA4, 0x00, 0x07, 0x00, 0xB7, 0x00, 0x12, 0x00, 0x32, -/* 0000A090 */ 0x00, 0x0A, 0x00, 0x47, 0x00, 0x03, 0x00, 0x35, 0x00, 0x0A, 0x00, 0x35, 0x00, 0x0A, 0x00, 0x39, -/* 0000A0A0 */ 0x00, 0x0A, 0x00, 0x83, 0x00, 0x06, 0x00, 0x4A, 0x04, 0x0A, 0x00, 0x24, 0x00, 0x0A, 0x00, 0x22, -/* 0000A0B0 */ 0x00, 0x0A, 0x00, 0x22, 0x00, 0x0A, 0x00, 0x22, 0x00, 0x0A, 0x00, 0x22, 0x00, 0x0A, 0x00, 0x1E, -/* 0000A0C0 */ 0x00, 0x0A, 0x00, 0x21, 0x00, 0x0A, 0x00, 0x2D, 0x00, 0x52, 0x00, 0xC8, 0x00, 0x0A, 0x00, 0x54, -/* 0000A0D0 */ 0x00, 0x0A, 0x00, 0x50, 0x00, 0x0A, 0x00, 0x5E, 0x00, 0x0A, 0x00, 0x02, 0x01, 0x0A, 0x00, 0x55, -/* 0000A0E0 */ 0x00, 0x06, 0x00, 0x94, 0x00, 0x0A, 0x00, 0x4C, 0x00, 0x0A, 0x00, 0x4C, 0x00, 0x0A, 0x00, 0x46, -/* 0000A0F0 */ 0x00, 0x0A, 0x00, 0x47, 0x00, 0x0A, 0x00, 0x4C, 0x00, 0x0A, 0x00, 0x4A, 0x00, 0x0A, 0x00, 0x3B, -/* 0000A100 */ 0x00, 0x0A, 0x00, 0x4E, 0x00, 0x0A, 0x00, 0x56, 0x00, 0x0A, 0x00, 0x57, 0x00, 0x0A, 0x00, 0x36, -/* 0000A110 */ 0x00, 0x0A, 0x00, 0x3E, 0x00, 0x0A, 0x00, 0xA4, 0x00, 0x42, 0x00, 0x05, 0x01, 0x2D, 0x01, 0x7A, -/* 0000A120 */ 0x0D, 0x20, 0x00, 0x6F, 0x01, 0x37, 0x00, 0x8B, 0x00, 0x33, 0x00, 0x76, 0x00, 0x33, 0x00, 0x5B, -/* 0000A130 */ 0x01, 0x33, 0x00, 0xD2, 0x01, 0x06, 0x00, 0x36, 0x03, 0xA6, 0x00, 0x1F, 0x00, 0x06, 0x00, 0x25, -/* 0000A140 */ 0x00, 0x0D, 0x00, 0x4E, 0x02, 0x0C, 0x00, 0x9A, 0x00, 0x0C, 0x00, 0x19, 0x02, 0x0D, 0x00, 0xCD, -/* 0000A150 */ 0x06, 0x0D, 0x00, 0x09, 0x03, 0x0D, 0x00, 0x23, 0x03, 0x08, 0x00, 0x77, 0x01, 0x0D, 0x00, 0x75, -/* 0000A160 */ 0x07, 0x0D, 0x00, 0xA3, 0x09, 0x69, 0x00, 0x51, 0x09, 0x0D, 0x00, 0xE1, 0x01, 0x06, 0x00, 0x60, -/* 0000A170 */ 0x01, 0x1A, 0x00, 0xC8, 0x1B, 0x0D, 0x00, 0x6B, 0x03, 0x0D, 0x00, 0xB4, 0x04, 0x0D, 0x00, 0x8F, -/* 0000A180 */ 0x06, 0x0D, 0x00, 0xA7, 0x01, 0x08, 0x00, 0xDA, 0x02, 0x0D, 0x00, 0x74, 0x06, 0x0D, 0x00, 0xE8, -/* 0000A190 */ 0x04, 0x18, 0x00, 0x30, 0x00, 0x2C, 0x00, 0x4D, 0x00, 0x0D, 0x00, 0x1B, 0x02, 0x0D, 0x00, 0x3C, -/* 0000A1A0 */ 0x05, 0x15, 0x00, 0x23, 0x00, 0x04, 0x00, 0x45, 0x00, 0x2D, 0x00, 0xD7, 0x00, 0x21, 0x00, 0x5F, -/* 0000A1B0 */ 0x00, 0x37, 0x00, 0xCA, 0x00, 0x3D, 0x00, 0x25, 0x03, 0x0D, 0x00, 0x8C, 0x02, 0x19, 0x00, 0x68, -/* 0000A1C0 */ 0x22, 0x19, 0x00, 0xA7, 0x25, 0x19, 0x00, 0x02, 0x6E, 0x19, 0x00, 0xAB, 0x16, 0x0B, 0x00, 0x23, -/* 0000A1D0 */ 0x00, 0x3D, 0x00, 0x92, 0x00, 0x3D, 0x00, 0x92, 0x00, 0x3D, 0x00, 0x92, 0x00, 0xF3, 0x00, 0x29, -/* 0000A1E0 */ 0x01, 0x11, 0x00, 0x38, 0x00, 0x14, 0x00, 0x38, 0x00, 0x11, 0x00, 0x39, 0x00, 0x14, 0x00, 0x3A, -/* 0000A1F0 */ 0x00, 0x06, 0x00, 0x25, 0x00, 0x0D, 0x00, 0xE9, 0x01, 0x0D, 0x00, 0x0C, 0x02, 0x0D, 0x00, 0x90, -/* 0000A200 */ 0x01, 0x0C, 0x00, 0x58, 0x01, 0x0C, 0x00, 0x9A, 0x00, 0x0C, 0x00, 0x70, 0x00, 0x0C, 0x00, 0xA7, -/* 0000A210 */ 0x04, 0x0C, 0x00, 0x93, 0x04, 0x0C, 0x00, 0x31, 0x04, 0x0C, 0x00, 0xB1, 0x09, 0x0C, 0x00, 0xEF, -/* 0000A220 */ 0x02, 0x06, 0x00, 0x2D, 0x00, 0x0C, 0x00, 0x93, 0x03, 0x19, 0x00, 0x89, 0x0A, 0x06, 0x00, 0x75, -/* 0000A230 */ 0x00, 0x06, 0x00, 0x38, 0x00, 0x06, 0x00, 0x4C, 0x00, 0x06, 0x00, 0x83, 0x1C, 0x0C, 0x00, 0xC0, -/* 0000A240 */ 0x01, 0x0C, 0x00, 0xDF, 0x01, 0x0C, 0x00, 0x80, 0x03, 0x1B, 0x00, 0x3C, 0x00, 0x3E, 0x00, 0x25, -/* 0000A250 */ 0x01, 0x04, 0x00, 0x51, 0x00, 0x43, 0x00, 0x69, 0x01, 0x04, 0x00, 0x59, 0x00, 0x43, 0x00, 0x79, -/* 0000A260 */ 0x01, 0x04, 0x00, 0x5D, 0x00, 0x43, 0x00, 0x81, 0x01, 0x04, 0x00, 0x41, 0x00, 0x42, 0x00, 0xAD, -/* 0000A270 */ 0x02, 0x2B, 0x00, 0x60, 0x00, 0x2B, 0x00, 0x64, 0x00, 0x2B, 0x00, 0x66, 0x00, 0x27, 0x00, 0x49, -/* 0000A280 */ 0x01, 0xC1, 0x01, 0x51, 0x05, 0x19, 0x00, 0xCA, 0x03, 0x06, 0x00, 0x2B, 0x00, 0x0C, 0x00, 0x3B, -/* 0000A290 */ 0x09, 0x19, 0x00, 0xF3, 0x30, 0x19, 0x00, 0x5E, 0x32, 0x19, 0x00, 0x79, 0x7A, 0x0B, 0x00, 0x23, -/* 0000A2A0 */ 0x00, 0x39, 0x00, 0x7C, 0x00, 0x39, 0x00, 0x84, 0x00, 0x39, 0x00, 0x88, 0x00, 0x3B, 0x00, 0xA6, -/* 0000A2B0 */ 0x00, 0x00, 0xA1, 0xAD, 0x01, 0x00, 0x6A, 0xAB, 0x01, 0x00, 0x00, 0xAB, 0x01, 0x00, 0xA1, 0xAA, -/* 0000A2C0 */ 0x01, 0x00, 0x42, 0xAA, 0x01, 0x00, 0xDD, 0xA9, 0x01, 0x00, 0x70, 0xA9, 0x01, 0x00, 0x00, 0xA9, -/* 0000A2D0 */ 0x01, 0x00, 0x90, 0xA8, 0x01, 0x00, 0x2B, 0xA8, 0x01, 0x00, 0xBE, 0xA7, 0x01, 0x00, 0x5C, 0xA7, -/* 0000A2E0 */ 0x01, 0x00, 0xE0, 0xA6, 0x01, 0x00, 0x7E, 0xA6, 0x01, 0x00, 0x19, 0xA6, 0x01, 0x00, 0xAC, 0xA5, -/* 0000A2F0 */ 0x01, 0x00, 0x3C, 0xA5, 0x01, 0x00, 0xCC, 0xA4, 0x01, 0x00, 0x45, 0xA4, 0x01, 0x00, 0xD8, 0xA3, -/* 0000A300 */ 0x01, 0x00, 0xF7, 0xA2, 0x01, 0x00, 0x8A, 0xA2, 0x01, 0x00, 0x03, 0xA2, 0x01, 0x00, 0x93, 0xA1, -/* 0000A310 */ 0x01, 0x00, 0x20, 0xA1, 0x01, 0x00, 0xAB, 0xA0, 0x01, 0x00, 0x41, 0xA0, 0x01, 0x00, 0xD4, 0x9F, -/* 0000A320 */ 0x01, 0x00, 0x64, 0x9F, 0x01, 0x00, 0xB8, 0x9E, 0x01, 0x00, 0x2B, 0x9E, 0x01, 0x00, 0xBE, 0x9D, -/* 0000A330 */ 0x01, 0x00, 0x05, 0x9D, 0x01, 0x00, 0x9F, 0x9C, 0x01, 0x00, 0x40, 0x9C, 0x01, 0x00, 0xE8, 0x9A, -/* 0000A340 */ 0x01, 0x00, 0xE6, 0x99, 0x01, 0x00, 0x8F, 0x98, 0x01, 0x00, 0x71, 0x96, 0x01, 0x00, 0xF6, 0x91, -/* 0000A350 */ 0x01, 0x00, 0x5E, 0x91, 0x01, 0x00, 0xF0, 0x90, 0x01, 0x00, 0x82, 0x90, 0x01, 0x00, 0x14, 0x90, -/* 0000A360 */ 0x01, 0x00, 0x31, 0x8F, 0x01, 0x00, 0x7F, 0x8D, 0x01, 0x00, 0x4F, 0x8C, 0x01, 0x00, 0x03, 0x8C, -/* 0000A370 */ 0x01, 0x00, 0x12, 0x85, 0x01, 0x00, 0x64, 0x84, 0x01, 0x00, 0xF7, 0x81, 0x01, 0x00, 0x7D, 0x7F, -/* 0000A380 */ 0x01, 0x00, 0x40, 0x7E, 0x01, 0x00, 0x3D, 0x7C, 0x01, 0x00, 0x33, 0x7A, 0x01, 0x00, 0x37, 0x79, -/* 0000A390 */ 0x01, 0x00, 0x54, 0x78, 0x01, 0x00, 0xF0, 0x77, 0x01, 0x00, 0x5F, 0x76, 0x01, 0x00, 0x69, 0x66, -/* 0000A3A0 */ 0x01, 0x00, 0x9A, 0x54, 0x01, 0x00, 0xF4, 0x2A, 0x01, 0x00, 0x93, 0x20, 0x01, 0x00, 0xD2, 0x1F, -/* 0000A3B0 */ 0x01, 0x00, 0x2C, 0x1F, 0x01, 0x00, 0x42, 0x1E, 0x01, 0x00, 0xB2, 0x1D, 0x01, 0x00, 0x44, 0x1D, -/* 0000A3C0 */ 0x01, 0x00, 0xDD, 0x1C, 0x01, 0x00, 0xFB, 0x1A, 0x01, 0x00, 0x48, 0x19, 0x01, 0x00, 0x02, 0x18, -/* 0000A3D0 */ 0x01, 0x00, 0x56, 0x14, 0x01, 0x00, 0x13, 0x13, 0x01, 0x00, 0xC3, 0x11, 0x01, 0x00, 0x38, 0x0D, -/* 0000A3E0 */ 0x01, 0x00, 0x8A, 0x0B, 0x01, 0x00, 0x4D, 0x0A, 0x01, 0x00, 0xFB, 0x09, 0x01, 0x00, 0x4F, 0x06, -/* 0000A3F0 */ 0x01, 0x00, 0x9B, 0x05, 0x01, 0x00, 0x18, 0x03, 0x01, 0x00, 0xC7, 0x00, 0x01, 0x00, 0xDF, 0xFF, -/* 0000A400 */ 0x00, 0x00, 0xF8, 0xFE, 0x00, 0x00, 0x57, 0xFD, 0x00, 0x00, 0xDB, 0xFC, 0x00, 0x00, 0x5F, 0xFC, -/* 0000A410 */ 0x00, 0x00, 0xE3, 0xFB, 0x00, 0x00, 0x78, 0xFB, 0x00, 0x00, 0x8A, 0xF9, 0x00, 0x00, 0x84, 0xF6, -/* 0000A420 */ 0x00, 0x00, 0x60, 0xE3, 0x00, 0x00, 0x69, 0xD0, 0x00, 0x00, 0x2E, 0xA4, 0x00, 0x00, 0x3F, 0x5D, -/* 0000A430 */ 0x00, 0xC1, 0x53, 0xAD, 0x25, 0x01, 0xFE, 0xD5, 0x0C, 0x1A, 0xA0, 0x41, 0xD1, 0x00, 0xB7, 0xFF, -/* 0000A440 */ 0x76, 0x4C, 0x02, 0x00, 0x0F, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFF, 0x76, 0x4C, 0x02, -/* 0000A450 */ 0x00, 0xFE, 0x28, 0x7A, 0xFE, 0x28, 0x7A, 0x01, 0xFE, 0xD5, 0x04, 0x15, 0x36, 0x44, 0x09, 0xEE, -/* 0000A460 */ 0xED, 0x02, 0x09, 0x19, 0x19, 0x19, 0x19, 0x07, 0x02, 0x41, 0x42, 0x43, 0x44, 0x08, 0x06, 0xFE, -/* 0000A470 */ 0x3D, 0x03, 0x06, 0xFE, 0x41, 0x04, 0x06, 0xFE, 0xD6, 0x04, 0x05, 0xFE, 0xD7, 0x04, 0x06, 0xFE, -/* 0000A480 */ 0xD8, 0x04, 0x05, 0xFE, 0xD9, 0x04, 0x06, 0xFE, 0xDA, 0x04, 0x05, 0xFE, 0xDB, 0x04, 0x06, 0xFE, -/* 0000A490 */ 0xDC, 0x04, 0x05, 0xFE, 0xDD, 0x04, 0x06, 0xFE, 0xDE, 0x04, 0x05, 0xFE, 0xDF, 0x04, 0x06, 0xFE, -/* 0000A4A0 */ 0xE0, 0x04, 0x05, 0xFE, 0xE1, 0x04, 0x06, 0xFE, 0xE2, 0x04, 0x05, 0xFE, 0xE3, 0x04, 0x06, 0xFE, -/* 0000A4B0 */ 0xE4, 0x04, 0x05, 0xFE, 0xE5, 0x04, 0x06, 0xFE, 0xE6, 0x04, 0x05, 0xFE, 0xE7, 0x04, 0x07, 0x06, -/* 0000A4C0 */ 0xFE, 0x4F, 0x04, 0x01, 0x00, 0x06, 0xFE, 0x50, 0x04, 0x01, 0x01, 0x06, 0xFE, 0x51, 0x04, 0x01, -/* 0000A4D0 */ 0x02, 0x05, 0xFE, 0x52, 0x04, 0x05, 0xFE, 0x53, 0x04, 0x06, 0xFE, 0x54, 0x04, 0x05, 0xFE, 0x55, -/* 0000A4E0 */ 0x04, 0x06, 0xFE, 0x56, 0x04, 0x05, 0xFE, 0x57, 0x04, 0x05, 0xFE, 0x58, 0x04, 0x05, 0xFE, 0x59, -/* 0000A4F0 */ 0x04, 0x05, 0xFE, 0x5A, 0x04, 0x06, 0xFE, 0xB3, 0x03, 0x06, 0xFE, 0xB4, 0x03, 0x06, 0xFE, 0x0B, -/* 0000A500 */ 0x04, 0x06, 0xFE, 0x40, 0x03, 0x06, 0xFE, 0x42, 0x03, 0x0C, 0x06, 0xFE, 0x43, 0x03, 0x06, 0xFE, -/* 0000A510 */ 0x44, 0x03, 0x06, 0xFE, 0x0C, 0x04, 0x0B, 0x06, 0xFE, 0x26, 0x04, 0x06, 0xFE, 0x8D, 0x03, 0x05, -/* 0000A520 */ 0xFE, 0x25, 0x04, 0x06, 0xFE, 0x0D, 0x04, 0x06, 0xFE, 0x4C, 0x03, 0xFE, 0xA0, 0x03, 0x4F, 0x40, -/* 0000A530 */ 0xA6, 0x36, 0xA6, 0x37, 0xA6, 0x38, 0xA6, 0x39, 0xA6, 0x3A, 0xA6, 0x3B, 0xA6, 0x3C, 0xA6, 0x3D, -/* 0000A540 */ 0xA6, 0x3E, 0xA6, 0x3F, 0x8C, 0x02, 0x32, 0x46, 0x14, 0x0C, 0x00, 0x46, 0x03, 0x8C, 0x02, 0x32, -/* 0000A550 */ 0x46, 0x14, 0x03, 0x00, 0x46, 0x04, 0x09, 0x6C, 0x03, 0xDE, 0x00, 0x0B, 0x01, 0xB6, 0x46, 0x00, -/* 0000A560 */ 0x01, 0x53, 0x01, 0x00, 0x36, 0x46, 0x93, 0x00, 0x02, 0x36, 0x01, 0x53, 0x01, 0x01, 0x37, 0x46, -/* 0000A570 */ 0x93, 0x00, 0x03, 0x37, 0x01, 0x53, 0x01, 0x02, 0x38, 0x46, 0x93, 0x00, 0x04, 0x38, 0x01, 0x53, -/* 0000A580 */ 0x01, 0x03, 0x39, 0x46, 0x93, 0x00, 0x05, 0x39, 0x01, 0x53, 0x01, 0x04, 0x3A, 0x46, 0x93, 0x00, -/* 0000A590 */ 0x06, 0x3A, 0x01, 0x53, 0x01, 0x05, 0x3B, 0x46, 0x93, 0x00, 0x07, 0x3B, 0x01, 0x53, 0x01, 0x06, -/* 0000A5A0 */ 0x3C, 0x46, 0x93, 0x00, 0x08, 0x3C, 0x01, 0x53, 0x01, 0x07, 0x3D, 0x46, 0x93, 0x00, 0x09, 0x3D, -/* 0000A5B0 */ 0x4F, 0x46, 0x93, 0x00, 0x0A, 0x46, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, -/* 0000A5C0 */ 0x00, 0x00, 0x00, 0x78, 0x06, 0x46, 0x00, 0x78, 0x08, 0x46, 0x01, 0x78, 0x0A, 0x46, 0x02, 0x78, -/* 0000A5D0 */ 0x0C, 0x46, 0x03, 0x78, 0x0E, 0x46, 0x04, 0x78, 0x10, 0x46, 0x05, 0x78, 0x12, 0x46, 0x06, 0x78, -/* 0000A5E0 */ 0x14, 0x46, 0x07, 0x78, 0x16, 0x46, 0x08, 0x94, 0x02, 0x46, 0xCC, 0x46, 0x03, 0xA6, 0x47, 0x9F, -/* 0000A5F0 */ 0x00, 0x47, 0x46, 0xA6, 0x47, 0x9F, 0x01, 0x47, 0x46, 0xA6, 0x47, 0x9F, 0x02, 0x47, 0x46, 0x93, -/* 0000A600 */ 0x00, 0x0A, 0x46, 0x8C, 0x02, 0x04, 0x46, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0x2C, 0x00, -/* 0000A610 */ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0x78, 0x19, 0x47, 0x09, 0x78, 0x1B, -/* 0000A620 */ 0x47, 0x0A, 0x78, 0x1D, 0x47, 0x0B, 0x5A, 0x01, 0x47, 0x5A, 0x02, 0x17, 0x1F, 0x03, 0x46, 0x46, -/* 0000A630 */ 0x47, 0x40, 0x46, 0xB6, 0x47, 0x00, 0x01, 0x53, 0x01, 0x08, 0x46, 0x47, 0x07, 0x06, 0x00, 0x5A, -/* 0000A640 */ 0x00, 0x02, 0x5A, 0x01, 0x1E, 0x5A, 0x02, 0x1F, 0x5A, 0x03, 0x20, 0x5F, 0x47, 0x40, 0x0C, 0x5A, -/* 0000A650 */ 0x04, 0x47, 0x8C, 0x02, 0x36, 0x47, 0x4B, 0x47, 0x5F, 0x47, 0x47, 0x0D, 0x5A, 0x05, 0x47, 0x1F, -/* 0000A660 */ 0x06, 0xFF, 0x46, 0xB6, 0x47, 0x00, 0x01, 0x53, 0x01, 0x09, 0x46, 0x47, 0x07, 0x06, 0x00, 0x5A, -/* 0000A670 */ 0x00, 0x02, 0x5A, 0x01, 0x21, 0x5A, 0x02, 0x22, 0x5A, 0x03, 0x22, 0x5F, 0x47, 0x40, 0x0E, 0x5A, -/* 0000A680 */ 0x04, 0x47, 0x8C, 0x02, 0x36, 0x47, 0x4B, 0x47, 0x5F, 0x47, 0x47, 0x0F, 0x5A, 0x05, 0x47, 0x1F, -/* 0000A690 */ 0x06, 0xFF, 0x46, 0xB6, 0x47, 0x00, 0x01, 0x53, 0x01, 0x0A, 0x46, 0x47, 0x07, 0x06, 0x00, 0x5A, -/* 0000A6A0 */ 0x00, 0x02, 0x5A, 0x01, 0x23, 0x5A, 0x02, 0x24, 0x5A, 0x03, 0x24, 0x5F, 0x47, 0x40, 0x10, 0x5A, -/* 0000A6B0 */ 0x04, 0x47, 0x8C, 0x02, 0x36, 0x47, 0x4B, 0x47, 0x5F, 0x47, 0x47, 0x11, 0x5A, 0x05, 0x47, 0x1F, -/* 0000A6C0 */ 0x06, 0xFF, 0x46, 0x8C, 0x02, 0x32, 0x46, 0x14, 0x03, 0x00, 0x46, 0x03, 0x09, 0xF6, 0x01, 0xDE, -/* 0000A6D0 */ 0x01, 0x04, 0x03, 0xB6, 0x46, 0x00, 0xB5, 0x01, 0x00, 0x00, 0x00, 0x46, 0x46, 0x01, 0x53, 0x01, -/* 0000A6E0 */ 0x0B, 0x3E, 0x46, 0x93, 0x01, 0x02, 0x3E, 0x01, 0x53, 0x01, 0x0C, 0x3F, 0x46, 0x93, 0x01, 0x03, -/* 0000A6F0 */ 0x3F, 0x8C, 0x02, 0x23, 0x46, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x25, 0x8E, 0x01, -/* 0000A700 */ 0x02, 0x47, 0x5A, 0x02, 0x47, 0x1F, 0x03, 0xFF, 0x46, 0x8C, 0x02, 0x23, 0x46, 0x07, 0x03, 0x00, -/* 0000A710 */ 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x26, 0x8E, 0x01, 0x03, 0x47, 0x5A, 0x02, 0x47, 0x1F, 0x03, 0xFF, -/* 0000A720 */ 0x46, 0x8E, 0x01, 0x02, 0x46, 0xCC, 0x47, 0x02, 0x9F, 0x00, 0x27, 0x47, 0x9F, 0x01, 0x28, 0x47, -/* 0000A730 */ 0x74, 0x47, 0x46, 0x12, 0x8C, 0x02, 0x15, 0x46, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8E, 0x01, -/* 0000A740 */ 0x02, 0x47, 0x5A, 0x01, 0x47, 0x5A, 0x02, 0x29, 0xCB, 0x40, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, -/* 0000A750 */ 0x00, 0x47, 0x00, 0x00, 0x00, 0x8E, 0x01, 0x02, 0x48, 0x07, 0x01, 0x00, 0xC1, 0x01, 0x48, 0x48, -/* 0000A760 */ 0x78, 0x48, 0x47, 0x13, 0x78, 0x2C, 0x47, 0x14, 0x78, 0x2C, 0x47, 0x15, 0x78, 0x2C, 0x47, 0x16, -/* 0000A770 */ 0x5A, 0x03, 0x47, 0x1F, 0x04, 0xFF, 0x46, 0x8C, 0x02, 0x04, 0x46, 0x07, 0x03, 0x00, 0x5A, 0x00, -/* 0000A780 */ 0x02, 0x8E, 0x01, 0x02, 0x47, 0x5F, 0x47, 0x47, 0x17, 0x5A, 0x01, 0x47, 0x8C, 0x02, 0x08, 0x47, -/* 0000A790 */ 0x5F, 0x47, 0x47, 0x17, 0x5A, 0x02, 0x47, 0x1F, 0x03, 0xFF, 0x46, 0x8C, 0x02, 0x15, 0x46, 0x07, -/* 0000A7A0 */ 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8E, 0x01, 0x02, 0x47, 0x5F, 0x47, 0x47, 0x17, 0x5A, 0x01, 0x47, -/* 0000A7B0 */ 0x5A, 0x02, 0x2F, 0xCB, 0x58, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, -/* 0000A7C0 */ 0x8E, 0x01, 0x02, 0x48, 0x78, 0x48, 0x47, 0x13, 0x78, 0x30, 0x47, 0x14, 0x78, 0x2C, 0x47, 0x15, -/* 0000A7D0 */ 0x78, 0x30, 0x47, 0x16, 0x5A, 0x03, 0x47, 0x1F, 0x04, 0xFF, 0x46, 0x8C, 0x02, 0x15, 0x46, 0x07, -/* 0000A7E0 */ 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8E, 0x01, 0x02, 0x47, 0x5F, 0x47, 0x47, 0x17, 0x5A, 0x01, 0x47, -/* 0000A7F0 */ 0x5A, 0x02, 0x31, 0xCB, 0x70, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, -/* 0000A800 */ 0x8C, 0x02, 0x23, 0x48, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x33, 0xB6, 0x4A, 0x00, -/* 0000A810 */ 0xB5, 0x01, 0x00, 0x00, 0x00, 0x4A, 0x4A, 0x01, 0x53, 0x01, 0x0D, 0x49, 0x4A, 0x5A, 0x02, 0x49, -/* 0000A820 */ 0x1F, 0x03, 0x48, 0x48, 0x78, 0x48, 0x47, 0x18, 0x78, 0x2C, 0x47, 0x15, 0x78, 0x30, 0x47, 0x16, -/* 0000A830 */ 0x5A, 0x03, 0x47, 0x1F, 0x04, 0xFF, 0x46, 0x8C, 0x02, 0x15, 0x46, 0x07, 0x04, 0x00, 0x5A, 0x00, -/* 0000A840 */ 0x02, 0x8E, 0x01, 0x02, 0x47, 0x5F, 0x47, 0x47, 0x17, 0x5A, 0x01, 0x47, 0x5A, 0x02, 0x34, 0xCB, -/* 0000A850 */ 0x84, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0xB6, 0x49, 0x00, 0xB5, -/* 0000A860 */ 0x01, 0x00, 0x00, 0x00, 0x49, 0x49, 0x01, 0x57, 0x01, 0x0E, 0x48, 0x49, 0x47, 0x78, 0x48, 0x47, -/* 0000A870 */ 0x13, 0x78, 0x30, 0x47, 0x14, 0x78, 0x2C, 0x47, 0x15, 0x78, 0x30, 0x47, 0x16, 0x5A, 0x03, 0x47, -/* 0000A880 */ 0x1F, 0x04, 0xFF, 0x46, 0x8C, 0x02, 0x15, 0x46, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8E, 0x01, -/* 0000A890 */ 0x02, 0x47, 0x5A, 0x01, 0x47, 0x5A, 0x02, 0x35, 0xCB, 0x9C, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, -/* 0000A8A0 */ 0x00, 0x47, 0x00, 0x00, 0x00, 0x8C, 0x01, 0x17, 0x48, 0x4B, 0x48, 0x78, 0x48, 0x47, 0x13, 0x78, -/* 0000A8B0 */ 0x30, 0x47, 0x14, 0x78, 0x30, 0x47, 0x16, 0x5A, 0x03, 0x47, 0x1F, 0x04, 0xFF, 0x46, 0x8E, 0x01, -/* 0000A8C0 */ 0x02, 0x00, 0x09, 0x07, 0x00, 0xA6, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x07, 0xB0, -/* 0000A8D0 */ 0x00, 0x9C, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, -/* 0000A8E0 */ 0x00, 0x82, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, -/* 0000A8F0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, -/* 0000A900 */ 0x00, 0x81, 0x01, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 0000A910 */ 0x00, 0x84, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x58, 0x00, 0x00, -/* 0000A920 */ 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, -/* 0000A930 */ 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, -/* 0000A940 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, -/* 0000A950 */ 0x00, 0x81, 0x01, 0x00, 0x00, 0x2C, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 0000A960 */ 0x00, 0x60, 0x01, 0x00, 0x00, 0x5E, 0x01, 0x00, 0x00, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 0000A970 */ 0x00, 0x03, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD6, 0x04, 0x00, 0x00, 0xD8, 0x04, 0x00, -/* 0000A980 */ 0x00, 0xDA, 0x04, 0x00, 0x00, 0xDC, 0x04, 0x00, 0x00, 0xDE, 0x04, 0x00, 0x00, 0xE0, 0x04, 0x00, -/* 0000A990 */ 0x00, 0xE2, 0x04, 0x00, 0x00, 0xE4, 0x04, 0x00, 0x00, 0xE6, 0x04, 0x00, 0x00, 0xFE, 0xD6, 0x04, -/* 0000A9A0 */ 0xFE, 0xD8, 0x04, 0xFE, 0xDA, 0x04, 0xFE, 0xDC, 0x04, 0xFE, 0xDE, 0x04, 0xFE, 0xE0, 0x04, 0xFE, -/* 0000A9B0 */ 0xE2, 0x04, 0xFE, 0xE4, 0x04, 0xFE, 0xE6, 0x04, 0xFE, 0x60, 0x01, 0xFE, 0x5E, 0x01, 0xFE, 0x61, -/* 0000A9C0 */ 0x01, 0xFE, 0x60, 0x01, 0xFE, 0x03, 0x03, 0xFE, 0x5E, 0x01, 0xFE, 0x04, 0x03, 0xFE, 0x61, 0x01, -/* 0000A9D0 */ 0xFE, 0x05, 0x03, 0xFE, 0xF4, 0x01, 0xFE, 0x83, 0x01, 0xFE, 0x82, 0x01, 0xFE, 0x80, 0x01, 0xFE, -/* 0000A9E0 */ 0x81, 0x01, 0xFE, 0x15, 0x01, 0xFE, 0x84, 0x01, 0x02, 0x01, 0x09, 0x00, 0xFE, 0x3B, 0x04, 0x01, -/* 0000A9F0 */ 0xFE, 0xE8, 0x04, 0x02, 0xFE, 0xE9, 0x04, 0x03, 0xFE, 0xEA, 0x04, 0x04, 0xFE, 0xEB, 0x04, 0x05, -/* 0000AA00 */ 0xFE, 0xEC, 0x04, 0x06, 0xFE, 0x3A, 0x04, 0x07, 0xFE, 0x37, 0x04, 0x08, 0xFE, 0x3E, 0x04, 0x03, -/* 0000AA10 */ 0x02, 0x00, 0xFE, 0x24, 0x02, 0x01, 0xFE, 0xF5, 0x01, 0xFF, 0x8C, 0x4C, 0x02, 0x00, 0x14, 0x16, -/* 0000AA20 */ 0x00, 0x00, 0x00, 0x72, 0x00, 0x9A, 0x13, 0x34, 0x00, 0xEF, 0x36, 0x19, 0x00, 0x5E, 0x00, 0x30, -/* 0000AA30 */ 0x00, 0x16, 0x10, 0x30, 0x00, 0x42, 0x02, 0x30, 0x00, 0x54, 0x02, 0x30, 0x00, 0x53, 0x02, 0x2E, -/* 0000AA40 */ 0x00, 0x62, 0x04, 0x18, 0x00, 0x59, 0x04, 0x18, 0x00, 0x54, 0x00, 0x13, 0x00, 0x48, 0x00, 0x43, -/* 0000AA50 */ 0x00, 0x9D, 0x00, 0x24, 0x00, 0x4A, 0x00, 0x40, 0x00, 0xA2, 0x00, 0x5C, 0x00, 0x22, 0x03, 0x4D, -/* 0000AA60 */ 0x00, 0xEC, 0x08, 0x3A, 0x00, 0x9F, 0x00, 0x07, 0x00, 0x88, 0x00, 0x07, 0x00, 0x16, 0x00, 0x00, -/* 0000AA70 */ 0xAE, 0xCC, 0x00, 0x00, 0x7F, 0xC8, 0x00, 0x00, 0x01, 0xC8, 0x00, 0x00, 0x3E, 0xC6, 0x00, 0x00, -/* 0000AA80 */ 0xB8, 0xC4, 0x00, 0x00, 0x06, 0xC1, 0x00, 0x00, 0xF9, 0xB8, 0x00, 0x00, 0x98, 0xB6, 0x00, 0x00, -/* 0000AA90 */ 0x52, 0xB5, 0x00, 0x00, 0x0C, 0xB4, 0x00, 0x00, 0xC6, 0xB2, 0x00, 0x00, 0xF3, 0xB0, 0x00, 0x00, -/* 0000AAA0 */ 0x41, 0xAF, 0x00, 0x00, 0x5D, 0xAE, 0x00, 0x00, 0xAC, 0xAA, 0x00, 0x00, 0x3F, 0x5D, 0x00, 0xC1, -/* 0000AAB0 */ 0x13, 0x8D, 0x27, 0x00, 0xFE, 0xD1, 0x0E, 0x1B, 0xA0, 0x41, 0xC3, 0x00, 0xFE, 0x0D, 0x04, 0xCA, -/* 0000AAC0 */ 0xFF, 0x00, 0x00, 0x00, 0x02, 0xFF, 0xD3, 0xBC, 0x02, 0x00, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, -/* 0000AAD0 */ 0x01, 0x01, 0xFF, 0xD3, 0xBC, 0x02, 0x00, 0xFE, 0x30, 0x08, 0xFE, 0x30, 0x08, 0x03, 0xFE, 0x02, -/* 0000AAE0 */ 0x04, 0xFE, 0x11, 0x05, 0xFE, 0xCA, 0x01, 0x07, 0x15, 0x19, 0x09, 0x78, 0x78, 0x05, 0x09, 0x20, -/* 0000AAF0 */ 0x20, 0x20, 0x20, 0x01, 0x16, 0x17, 0x18, 0x06, 0xFE, 0xF6, 0x03, 0x05, 0xFE, 0x12, 0x05, 0x06, -/* 0000AB00 */ 0xFE, 0x47, 0x03, 0x06, 0xFE, 0xF7, 0x03, 0x06, 0xFE, 0x99, 0x04, 0x06, 0xFE, 0x35, 0x04, 0x06, -/* 0000AB10 */ 0xFE, 0x88, 0x04, 0x06, 0xFE, 0x68, 0x04, 0x06, 0xFE, 0x46, 0x04, 0x06, 0xFE, 0x47, 0x04, 0x06, -/* 0000AB20 */ 0xFE, 0x48, 0x04, 0x06, 0xFE, 0x49, 0x04, 0x06, 0xFE, 0x4A, 0x04, 0x06, 0xFE, 0x4B, 0x04, 0x06, -/* 0000AB30 */ 0xFE, 0x4C, 0x04, 0x06, 0xFE, 0x4D, 0x04, 0x06, 0xFE, 0x4E, 0x04, 0x07, 0x08, 0xFE, 0xA2, 0x01, -/* 0000AB40 */ 0x59, 0x19, 0xB1, 0x15, 0x19, 0x2C, 0x19, 0x15, 0x15, 0x03, 0x00, 0x19, 0x02, 0x09, 0x18, 0x00, -/* 0000AB50 */ 0x8C, 0x05, 0x03, 0x1A, 0x6A, 0x19, 0x1A, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x1A, 0x5A, 0x01, -/* 0000AB60 */ 0x03, 0x5A, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x19, 0x8C, 0x05, 0x03, 0x1A, 0x6A, 0x19, 0x1A, 0x01, -/* 0000AB70 */ 0x07, 0x02, 0x00, 0x5A, 0x00, 0x1A, 0x5A, 0x01, 0x15, 0x1F, 0x02, 0x19, 0x19, 0x94, 0x02, 0x19, -/* 0000AB80 */ 0x90, 0x02, 0x19, 0xA6, 0x1A, 0x14, 0x0B, 0x00, 0x19, 0x1A, 0x90, 0x02, 0x19, 0x5F, 0x19, 0x19, -/* 0000AB90 */ 0x02, 0x0F, 0x18, 0x00, 0x19, 0x8C, 0x05, 0x03, 0x1A, 0x6A, 0x19, 0x1A, 0x00, 0x07, 0x03, 0x00, -/* 0000ABA0 */ 0x5A, 0x00, 0x1A, 0x5A, 0x01, 0x03, 0x5A, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x19, 0x8C, 0x05, 0x04, -/* 0000ABB0 */ 0x19, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x14, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 0000ABC0 */ 0x1A, 0x00, 0x00, 0x00, 0x90, 0x02, 0x1B, 0x5F, 0x1B, 0x1B, 0x03, 0x78, 0x1B, 0x1A, 0x04, 0x90, -/* 0000ABD0 */ 0x02, 0x1B, 0x5F, 0x1B, 0x1B, 0x05, 0x78, 0x1B, 0x1A, 0x06, 0x90, 0x02, 0x1B, 0x5F, 0x1B, 0x1B, -/* 0000ABE0 */ 0x07, 0x78, 0x1B, 0x1A, 0x08, 0x90, 0x02, 0x1B, 0x5F, 0x1B, 0x1B, 0x09, 0x78, 0x1B, 0x1A, 0x0A, -/* 0000ABF0 */ 0x90, 0x02, 0x1B, 0x5F, 0x1B, 0x1B, 0x0B, 0x78, 0x1B, 0x1A, 0x0C, 0x90, 0x02, 0x1B, 0x5F, 0x1B, -/* 0000AC00 */ 0x1B, 0x0D, 0x78, 0x1B, 0x1A, 0x0E, 0x90, 0x02, 0x1B, 0x5F, 0x1B, 0x1B, 0x0F, 0x78, 0x1B, 0x1A, -/* 0000AC10 */ 0x10, 0x90, 0x02, 0x1B, 0x5F, 0x1B, 0x1B, 0x11, 0x78, 0x1B, 0x1A, 0x12, 0x90, 0x02, 0x1B, 0x5F, -/* 0000AC20 */ 0x1B, 0x1B, 0x13, 0x78, 0x1B, 0x1A, 0x14, 0x90, 0x02, 0x1B, 0x5F, 0x1B, 0x1B, 0x15, 0x78, 0x1B, -/* 0000AC30 */ 0x1A, 0x16, 0x90, 0x02, 0x1B, 0x5F, 0x1B, 0x1B, 0x17, 0x78, 0x1B, 0x1A, 0x18, 0x90, 0x02, 0x1B, -/* 0000AC40 */ 0x5F, 0x1B, 0x1B, 0x19, 0x78, 0x1B, 0x1A, 0x1A, 0x90, 0x02, 0x1B, 0x5F, 0x1B, 0x1B, 0x1B, 0x78, -/* 0000AC50 */ 0x1B, 0x1A, 0x1C, 0x90, 0x02, 0x1B, 0x5F, 0x1B, 0x1B, 0x1D, 0x78, 0x1B, 0x1A, 0x1E, 0x5A, 0x01, -/* 0000AC60 */ 0x1A, 0x5A, 0x02, 0x13, 0x1F, 0x03, 0x19, 0x19, 0x94, 0x03, 0x19, 0x8C, 0x05, 0x04, 0x19, 0x07, -/* 0000AC70 */ 0x03, 0x00, 0x5A, 0x00, 0x14, 0xCA, 0x1A, 0x5A, 0x01, 0x1A, 0x5A, 0x02, 0x13, 0x1F, 0x03, 0x19, -/* 0000AC80 */ 0x19, 0x94, 0x04, 0x19, 0x8C, 0x05, 0x06, 0x19, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x14, 0x8C, 0x05, -/* 0000AC90 */ 0x16, 0x1A, 0x5A, 0x01, 0x1A, 0x8C, 0x05, 0x12, 0x1A, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x14, 0x90, -/* 0000ACA0 */ 0x03, 0x1B, 0x5A, 0x01, 0x1B, 0x1F, 0x02, 0x1A, 0x1A, 0x5A, 0x02, 0x1A, 0xD3, 0x00, 0x1A, 0x5A, -/* 0000ACB0 */ 0x03, 0x1A, 0x90, 0x02, 0x1A, 0x5A, 0x04, 0x1A, 0x1F, 0x05, 0xFF, 0x19, 0x8C, 0x05, 0x04, 0x19, -/* 0000ACC0 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x14, 0x90, 0x04, 0x1A, 0x5A, 0x01, 0x1A, 0x8C, 0x05, 0x08, 0x1A, -/* 0000ACD0 */ 0x5F, 0x1A, 0x1A, 0x1F, 0x5A, 0x02, 0x1A, 0x1F, 0x03, 0x00, 0x19, 0x09, 0x02, 0x00, 0xA6, 0x00, -/* 0000ACE0 */ 0x24, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 0000ACF0 */ 0x00, 0xF7, 0x01, 0x00, 0x00, 0x39, 0x02, 0x00, 0x00, 0x18, 0x02, 0x00, 0x00, 0x42, 0x02, 0x00, -/* 0000AD00 */ 0x00, 0x3D, 0x02, 0x00, 0x00, 0x44, 0x02, 0x00, 0x00, 0x3B, 0x02, 0x00, 0x00, 0x45, 0x02, 0x00, -/* 0000AD10 */ 0x00, 0x3F, 0x02, 0x00, 0x00, 0x3A, 0x02, 0x00, 0x00, 0x3C, 0x02, 0x00, 0x00, 0x3E, 0x02, 0x00, -/* 0000AD20 */ 0x00, 0x41, 0x02, 0x00, 0x00, 0x43, 0x02, 0x00, 0x00, 0xFE, 0x8A, 0x02, 0xFE, 0xEF, 0x01, 0xFE, -/* 0000AD30 */ 0x2C, 0x02, 0xFE, 0xF3, 0x01, 0xFE, 0xF7, 0x01, 0xFE, 0x26, 0x02, 0xFE, 0x39, 0x02, 0xFE, 0x0C, -/* 0000AD40 */ 0x02, 0xFE, 0x18, 0x02, 0xFE, 0x33, 0x02, 0xFE, 0x42, 0x02, 0xFE, 0x2B, 0x02, 0xFE, 0x3D, 0x02, -/* 0000AD50 */ 0xFE, 0x35, 0x02, 0xFE, 0x44, 0x02, 0xFE, 0x28, 0x02, 0xFE, 0x3B, 0x02, 0xFE, 0x38, 0x02, 0xFE, -/* 0000AD60 */ 0x45, 0x02, 0xFE, 0x2F, 0x02, 0xFE, 0x3F, 0x02, 0xFE, 0x27, 0x02, 0xFE, 0x3A, 0x02, 0xFE, 0x2A, -/* 0000AD70 */ 0x02, 0xFE, 0x3C, 0x02, 0xFE, 0x2E, 0x02, 0xFE, 0x3E, 0x02, 0xFE, 0x31, 0x02, 0xFE, 0x41, 0x02, -/* 0000AD80 */ 0xFE, 0x34, 0x02, 0xFE, 0x43, 0x02, 0xFE, 0x15, 0x01, 0xFF, 0x08, 0xBD, 0x02, 0x00, 0x0A, 0x05, -/* 0000AD90 */ 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3C, 0x00, 0x18, 0x00, 0x90, 0x00, 0x18, 0x00, 0x4B, 0x00, 0x15, -/* 0000ADA0 */ 0x00, 0x6B, 0x00, 0x18, 0x00, 0x90, 0x00, 0xBE, 0x00, 0xCE, 0x03, 0x19, 0x00, 0x3E, 0x00, 0x38, -/* 0000ADB0 */ 0x00, 0x98, 0x01, 0x24, 0x00, 0x44, 0x00, 0x00, 0xBC, 0xAD, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0x01, -/* 0000ADC0 */ 0x00, 0x88, 0x01, 0x00, 0xFE, 0xEA, 0x0E, 0x60, 0xA2, 0x41, 0xD1, 0x00, 0xCB, 0xFF, 0x6E, 0xC3, -/* 0000ADD0 */ 0x02, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0x6E, 0xC3, 0x02, 0x00, 0xFE, 0x27, -/* 0000ADE0 */ 0x01, 0xFE, 0x27, 0x01, 0x41, 0x04, 0x05, 0x07, 0x05, 0x18, 0x18, 0x06, 0x05, 0x06, 0x06, 0xFE, -/* 0000ADF0 */ 0x88, 0x04, 0x05, 0xFE, 0xD4, 0x04, 0x08, 0x52, 0x8C, 0x01, 0x03, 0x07, 0x95, 0x07, 0x07, 0x05, -/* 0000AE00 */ 0xA6, 0x08, 0x15, 0x08, 0x00, 0x07, 0x08, 0x14, 0x03, 0x00, 0x05, 0x02, 0x09, 0x37, 0x00, 0x8C, -/* 0000AE10 */ 0x06, 0x06, 0x07, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x04, 0x8C, 0x06, 0x13, 0x08, 0x5A, 0x01, 0x08, -/* 0000AE20 */ 0x8C, 0x01, 0x02, 0x08, 0x5A, 0x02, 0x08, 0x2F, 0x08, 0x03, 0x05, 0x5A, 0x03, 0x08, 0x1F, 0x04, -/* 0000AE30 */ 0x07, 0x07, 0x0E, 0x10, 0x00, 0x07, 0x8C, 0x01, 0x04, 0x07, 0x8C, 0x01, 0x03, 0x08, 0x95, 0x08, -/* 0000AE40 */ 0x08, 0x05, 0x9A, 0x08, 0x07, 0x05, 0xA6, 0x00, 0x24, 0x00, 0xFF, 0x9C, 0xC3, 0x02, 0x00, 0x03, -/* 0000AE50 */ 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0xA6, 0x00, 0x12, 0x00, 0x52, 0x00, 0x00, 0xBF, 0x5C, 0x00, -/* 0000AE60 */ 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0xC2, 0x0E, 0x39, 0xA0, 0x41, 0xD1, 0x00, 0xC9, 0xFF, 0xC6, -/* 0000AE70 */ 0xB9, 0x02, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFF, 0xC6, 0xB9, 0x02, 0x00, 0xFE, -/* 0000AE80 */ 0x60, 0x02, 0xFE, 0x60, 0x02, 0x01, 0x05, 0x05, 0x08, 0x04, 0x23, 0x22, 0x05, 0x01, 0x04, 0x04, -/* 0000AE90 */ 0x04, 0x04, 0x07, 0x06, 0xFE, 0xF6, 0x03, 0x05, 0xFE, 0x10, 0x05, 0x06, 0xFE, 0x47, 0x03, 0x72, -/* 0000AEA0 */ 0x59, 0x08, 0xB1, 0x05, 0x08, 0x2C, 0x08, 0x05, 0x15, 0x03, 0x00, 0x08, 0x02, 0x09, 0x18, 0x00, -/* 0000AEB0 */ 0x8C, 0x05, 0x03, 0x09, 0x6A, 0x08, 0x09, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x09, 0x5A, 0x01, -/* 0000AEC0 */ 0x03, 0x5A, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x08, 0x8C, 0x05, 0x03, 0x09, 0x6A, 0x08, 0x09, 0x01, -/* 0000AED0 */ 0x07, 0x02, 0x00, 0x5A, 0x00, 0x09, 0x5A, 0x01, 0x05, 0x1F, 0x02, 0x08, 0x08, 0x47, 0x06, 0x08, -/* 0000AEE0 */ 0xA6, 0x08, 0x14, 0x08, 0x00, 0x06, 0x08, 0x5F, 0x08, 0x06, 0x02, 0x0F, 0x18, 0x00, 0x08, 0x8C, -/* 0000AEF0 */ 0x05, 0x03, 0x09, 0x6A, 0x08, 0x09, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x09, 0x5A, 0x01, 0x03, -/* 0000AF00 */ 0x5A, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x08, 0x5F, 0x00, 0x06, 0x03, 0x09, 0x02, 0x00, 0xA6, 0x00, -/* 0000AF10 */ 0x24, 0x00, 0xFE, 0x8A, 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0x2C, 0x02, 0xFE, 0x25, 0x02, 0xFF, 0xEC, -/* 0000AF20 */ 0xB9, 0x02, 0x00, 0x07, 0x05, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3C, 0x00, 0x18, 0x00, 0x88, 0x00, -/* 0000AF30 */ 0x18, 0x00, 0x4B, 0x00, 0x0F, 0x00, 0x6B, 0x00, 0x18, 0x00, 0x88, 0x00, 0x09, 0x00, 0x37, 0x00, -/* 0000AF40 */ 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0xA3, 0x0E, 0x10, 0xA3, 0x41, 0xC1, -/* 0000AF50 */ 0x00, 0xFE, 0x26, 0x04, 0xC8, 0xFF, 0x1F, 0xB3, 0x02, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, -/* 0000AF60 */ 0x02, 0xFF, 0x1F, 0xB3, 0x02, 0x00, 0xFE, 0xFD, 0x03, 0xFE, 0xFD, 0x03, 0x01, 0x08, 0x06, 0x0B, -/* 0000AF70 */ 0x07, 0x56, 0x52, 0x05, 0x06, 0x06, 0x06, 0x06, 0x06, 0x0A, 0x06, 0xFE, 0xF6, 0x03, 0x05, 0xFE, -/* 0000AF80 */ 0x10, 0x05, 0x06, 0xFE, 0x47, 0x03, 0x08, 0xFE, 0x1C, 0x01, 0x59, 0x0B, 0xB1, 0x07, 0x0B, 0x4F, -/* 0000AF90 */ 0x08, 0x4F, 0x09, 0x2C, 0x0B, 0x07, 0x15, 0x03, 0x00, 0x0B, 0x02, 0x09, 0x18, 0x00, 0x8C, 0x05, -/* 0000AFA0 */ 0x03, 0x0C, 0x6A, 0x0B, 0x0C, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x5A, 0x01, 0x03, 0x5A, -/* 0000AFB0 */ 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x0B, 0x8C, 0x05, 0x03, 0x0C, 0x6A, 0x0B, 0x0C, 0x01, 0x07, 0x02, -/* 0000AFC0 */ 0x00, 0x5A, 0x00, 0x0C, 0x5A, 0x01, 0x07, 0x1F, 0x02, 0x0B, 0x0B, 0x47, 0x08, 0x0B, 0xA6, 0x0B, -/* 0000AFD0 */ 0x14, 0x08, 0x00, 0x08, 0x0B, 0x5F, 0x0B, 0x08, 0x02, 0x0F, 0x18, 0x00, 0x0B, 0x8C, 0x05, 0x03, -/* 0000AFE0 */ 0x0C, 0x6A, 0x0B, 0x0C, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x5A, 0x01, 0x03, 0x5A, 0x02, -/* 0000AFF0 */ 0x04, 0x1F, 0x03, 0xFF, 0x0B, 0xA6, 0x0B, 0x15, 0x03, 0x00, 0x06, 0x0B, 0x09, 0x3C, 0x00, 0x8C, -/* 0000B000 */ 0x05, 0x21, 0x0B, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x05, 0x5A, 0x01, 0x06, 0x1F, 0x02, 0x0B, 0x0B, -/* 0000B010 */ 0x0F, 0x15, 0x00, 0x0B, 0x8C, 0x05, 0x20, 0x0B, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x05, 0x5A, 0x01, -/* 0000B020 */ 0x06, 0x1F, 0x02, 0x0B, 0x0B, 0x0F, 0x12, 0x00, 0x0B, 0x8C, 0x05, 0x03, 0x0C, 0x6A, 0x0B, 0x0C, -/* 0000B030 */ 0x03, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x0C, 0x1F, 0x01, 0xFF, 0x0B, 0xA6, 0x0B, 0x47, 0x09, 0x0B, -/* 0000B040 */ 0xA6, 0x0B, 0x15, 0x03, 0x00, 0x06, 0x0B, 0x09, 0x1B, 0x00, 0x8C, 0x05, 0x24, 0x0C, 0x6A, 0x0B, -/* 0000B050 */ 0x0C, 0x04, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5A, 0x01, 0x06, 0x1F, 0x02, 0x0B, 0x0B, 0x47, -/* 0000B060 */ 0x09, 0x0B, 0x09, 0x11, 0x00, 0x8C, 0x05, 0x1C, 0x0B, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x05, 0x1F, -/* 0000B070 */ 0x01, 0x0B, 0x0B, 0x47, 0x09, 0x0B, 0x8C, 0x05, 0x0B, 0x0B, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x05, -/* 0000B080 */ 0x8C, 0x05, 0x03, 0x0D, 0x6A, 0x0C, 0x0D, 0x05, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0D, 0x5A, 0x01, -/* 0000B090 */ 0x09, 0x5A, 0x02, 0x08, 0x1F, 0x03, 0x0C, 0x0C, 0x5A, 0x01, 0x0C, 0x1F, 0x02, 0x00, 0x0B, 0x09, -/* 0000B0A0 */ 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x8A, 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0x2C, 0x02, 0xFE, -/* 0000B0B0 */ 0x86, 0x02, 0xFE, 0x38, 0x03, 0xFE, 0xE6, 0x01, 0xFF, 0x4B, 0xB3, 0x02, 0x00, 0x0D, 0x09, 0x00, -/* 0000B0C0 */ 0x00, 0x00, 0x0B, 0x00, 0x38, 0x00, 0x18, 0x00, 0x7F, 0x00, 0x18, 0x00, 0x47, 0x00, 0x0F, 0x00, -/* 0000B0D0 */ 0x67, 0x00, 0x18, 0x00, 0x80, 0x00, 0x34, 0x00, 0x56, 0x00, 0x12, 0x00, 0x48, 0x00, 0x05, 0x00, -/* 0000B0E0 */ 0x2F, 0x00, 0x0A, 0x00, 0x32, 0x00, 0x1B, 0x00, 0x59, 0x00, 0x11, 0x00, 0x42, 0x00, 0x2E, 0x00, -/* 0000B0F0 */ 0x51, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x88, 0x0E, 0x10, 0xA3, -/* 0000B100 */ 0x41, 0xC1, 0x00, 0xFE, 0x47, 0x03, 0xC7, 0xFF, 0x9D, 0xAE, 0x02, 0x00, 0xFF, 0x00, 0x10, 0x01, -/* 0000B110 */ 0x00, 0x03, 0x01, 0xFF, 0x9D, 0xAE, 0x02, 0x00, 0xFE, 0x26, 0x04, 0xFE, 0x26, 0x04, 0x01, 0x09, -/* 0000B120 */ 0x05, 0x0B, 0x05, 0x60, 0x59, 0x05, 0x09, 0x07, 0x06, 0x07, 0x07, 0x0A, 0x08, 0x06, 0xFE, 0x47, -/* 0000B130 */ 0x03, 0x07, 0xFE, 0x37, 0x01, 0x59, 0x0B, 0xB1, 0x07, 0x0B, 0x4F, 0x08, 0x4F, 0x09, 0x15, 0x05, -/* 0000B140 */ 0x00, 0x05, 0x02, 0xA6, 0x0B, 0x47, 0x05, 0x0B, 0x15, 0x05, 0x00, 0x06, 0x02, 0xA6, 0x0B, 0x47, -/* 0000B150 */ 0x06, 0x0B, 0x4F, 0x08, 0x4F, 0x09, 0x68, 0x06, 0x00, 0x00, 0x00, 0x0B, 0x14, 0x0A, 0x00, 0x07, -/* 0000B160 */ 0x0B, 0xA6, 0x0B, 0x14, 0x03, 0x00, 0x07, 0x0B, 0x09, 0x16, 0x00, 0x8C, 0x01, 0x02, 0x0B, 0x4B, -/* 0000B170 */ 0x0B, 0x07, 0x03, 0x00, 0x5A, 0x01, 0x05, 0x5A, 0x02, 0x06, 0xC1, 0x03, 0x00, 0x0B, 0x09, 0xE9, -/* 0000B180 */ 0x00, 0x8C, 0x05, 0x24, 0x0C, 0x6A, 0x0B, 0x0C, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5A, -/* 0000B190 */ 0x01, 0x07, 0x1F, 0x02, 0x0B, 0x0B, 0x47, 0x08, 0x0B, 0x8C, 0x05, 0x11, 0x0B, 0x07, 0x02, 0x00, -/* 0000B1A0 */ 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x08, 0x1F, 0x02, 0x0B, 0x0B, 0x0F, 0x15, 0x00, 0x0B, 0x8C, 0x05, -/* 0000B1B0 */ 0x03, 0x0C, 0x6A, 0x0B, 0x0C, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5A, 0x01, 0x03, 0x1F, -/* 0000B1C0 */ 0x02, 0xFF, 0x0B, 0x8C, 0x05, 0x03, 0x0C, 0x6A, 0x0B, 0x0C, 0x02, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 0000B1D0 */ 0x0C, 0x5A, 0x01, 0x08, 0x1F, 0x02, 0x0B, 0x0B, 0x47, 0x09, 0x0B, 0xA6, 0x0B, 0x14, 0x03, 0x00, -/* 0000B1E0 */ 0x09, 0x0B, 0x09, 0x31, 0x00, 0x8C, 0x05, 0x04, 0x0B, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0xCA, -/* 0000B1F0 */ 0x0C, 0x5A, 0x01, 0x0C, 0x5A, 0x02, 0x04, 0x1F, 0x03, 0x0B, 0x0B, 0x47, 0x09, 0x0B, 0x8C, 0x05, -/* 0000B200 */ 0x03, 0x0C, 0x6A, 0x0B, 0x0C, 0x03, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x5A, 0x01, 0x08, 0x5A, -/* 0000B210 */ 0x02, 0x09, 0x1F, 0x03, 0xFF, 0x0B, 0x8C, 0x02, 0x08, 0x0B, 0x4B, 0x0B, 0x07, 0x04, 0x00, 0x5A, -/* 0000B220 */ 0x00, 0x02, 0x5A, 0x01, 0x09, 0x5A, 0x02, 0x05, 0x5A, 0x03, 0x06, 0x1F, 0x04, 0xFF, 0x0B, 0x47, -/* 0000B230 */ 0x0B, 0x09, 0x8C, 0x05, 0x06, 0x0C, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8C, 0x05, 0x1A, 0x0D, -/* 0000B240 */ 0x5A, 0x01, 0x0D, 0x8C, 0x01, 0x03, 0x0D, 0x4B, 0x0D, 0x5A, 0x02, 0x0D, 0x5A, 0x03, 0x08, 0x1F, -/* 0000B250 */ 0x04, 0x0C, 0x0C, 0x74, 0x0C, 0x0B, 0x04, 0x5F, 0x0B, 0x09, 0x05, 0x80, 0x0B, 0x0B, 0xF8, 0x00, -/* 0000B260 */ 0xFA, 0x0B, 0x47, 0x00, 0x08, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x36, 0x03, 0xFE, -/* 0000B270 */ 0x8E, 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0xF0, 0x01, 0xFE, 0x25, 0x02, 0xFE, 0x25, 0x02, 0xAB, 0xFF, -/* 0000B280 */ 0xB5, 0xAE, 0x02, 0x00, 0x10, 0x09, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0E, 0x00, 0x2B, -/* 0000B290 */ 0x00, 0x15, 0x00, 0x43, 0x00, 0x16, 0x00, 0x58, 0x00, 0x18, 0x00, 0x37, 0x00, 0x15, 0x00, 0x38, -/* 0000B2A0 */ 0x00, 0x15, 0x00, 0x9D, 0x00, 0x18, 0x00, 0x47, 0x00, 0x0A, 0x00, 0x3A, 0x00, 0x19, 0x00, 0x3F, -/* 0000B2B0 */ 0x00, 0x18, 0x00, 0x58, 0x00, 0x19, 0x00, 0x4F, 0x00, 0x28, 0x00, 0x66, 0x00, 0x0B, 0x00, 0x3D, -/* 0000B2C0 */ 0x00, 0x08, 0x00, 0x1C, 0x00, 0x00, 0xBF, 0x5D, 0x00, 0xC1, 0x03, 0x8D, 0x05, 0x00, 0xFE, 0x81, -/* 0000B2D0 */ 0x0E, 0x0D, 0xA2, 0x41, 0xD1, 0x00, 0xC5, 0xFF, 0x1F, 0xAC, 0x02, 0x00, 0x01, 0xFF, 0x00, 0x10, -/* 0000B2E0 */ 0x01, 0x00, 0x06, 0x06, 0xFF, 0x1F, 0xAC, 0x02, 0x00, 0xFE, 0x9F, 0x01, 0xFE, 0x9F, 0x01, 0x40, -/* 0000B2F0 */ 0x04, 0xF8, 0xFE, 0x92, 0x04, 0xFE, 0x93, 0x04, 0xFE, 0x94, 0x04, 0x0C, 0x03, 0x0B, 0x08, 0x16, -/* 0000B300 */ 0x16, 0x04, 0x03, 0x01, 0x01, 0x01, 0x01, 0x08, 0x09, 0x0A, 0x08, 0x42, 0x94, 0x02, 0x03, 0x94, -/* 0000B310 */ 0x03, 0x04, 0x94, 0x04, 0x05, 0x94, 0x05, 0x06, 0x8C, 0x04, 0x03, 0x0C, 0x6A, 0x0B, 0x0C, 0x00, -/* 0000B320 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x8C, 0x04, 0x23, 0x0D, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, -/* 0000B330 */ 0x90, 0x02, 0x0E, 0x5A, 0x01, 0x0E, 0xD3, 0x00, 0x0E, 0x5A, 0x02, 0x0E, 0x1F, 0x03, 0x0D, 0x0D, -/* 0000B340 */ 0x5A, 0x01, 0x0D, 0x5A, 0x02, 0x07, 0x1F, 0x03, 0xFF, 0x0B, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xEE, -/* 0000B350 */ 0x01, 0xFF, 0x72, 0xAC, 0x02, 0x00, 0x02, 0x0C, 0x00, 0x00, 0x00, 0x34, 0x00, 0x4B, 0x01, 0x00, -/* 0000B360 */ 0x64, 0xB3, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x82, 0x0E, 0x49, -/* 0000B370 */ 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x97, 0x04, 0xC6, 0xFF, 0xAB, 0xAC, 0x02, 0x00, 0xFF, 0x00, 0x10, -/* 0000B380 */ 0x01, 0x00, 0x03, 0x01, 0xFF, 0xAB, 0xAC, 0x02, 0x00, 0xEE, 0xEE, 0x01, 0x07, 0x03, 0x07, 0x09, -/* 0000B390 */ 0x1D, 0x1B, 0x05, 0x05, 0x01, 0x01, 0x01, 0x01, 0x06, 0x08, 0x59, 0x59, 0x07, 0xB1, 0x05, 0x07, -/* 0000B3A0 */ 0x15, 0x05, 0x00, 0x03, 0x02, 0xA6, 0x07, 0x47, 0x03, 0x07, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA6, -/* 0000B3B0 */ 0x07, 0x47, 0x04, 0x07, 0x8C, 0x02, 0x09, 0x08, 0x4B, 0x08, 0x6A, 0x07, 0x08, 0x00, 0x07, 0x08, -/* 0000B3C0 */ 0x00, 0x5A, 0x00, 0x08, 0x5A, 0x01, 0x05, 0x8C, 0x01, 0x02, 0x09, 0x5A, 0x02, 0x09, 0x8C, 0x01, -/* 0000B3D0 */ 0x03, 0x09, 0x5A, 0x03, 0x09, 0x8C, 0x01, 0x04, 0x09, 0x5A, 0x04, 0x09, 0x8C, 0x01, 0x05, 0x09, -/* 0000B3E0 */ 0x5A, 0x05, 0x09, 0x5A, 0x06, 0x03, 0x5A, 0x07, 0x04, 0x1F, 0x08, 0x00, 0x07, 0x09, 0x02, 0x00, -/* 0000B3F0 */ 0xA6, 0x00, 0x24, 0x00, 0x53, 0xFF, 0xD7, 0xAC, 0x02, 0x00, 0x04, 0x05, 0x00, 0x00, 0x00, 0x0A, -/* 0000B400 */ 0x00, 0x15, 0x00, 0x0A, 0x00, 0x2B, 0x00, 0x3E, 0x00, 0x81, 0x00, 0x00, 0xBF, 0x5D, 0x00, 0xC1, -/* 0000B410 */ 0x03, 0x8D, 0x05, 0x00, 0xFE, 0x7B, 0x0E, 0x0D, 0xA2, 0x41, 0xD1, 0x00, 0xC3, 0xFF, 0xCB, 0xA9, -/* 0000B420 */ 0x02, 0x00, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x06, 0x06, 0xFF, 0xCB, 0xA9, 0x02, 0x00, 0xFE, -/* 0000B430 */ 0x9F, 0x01, 0xFE, 0x9F, 0x01, 0x40, 0x04, 0xF8, 0xFE, 0x92, 0x04, 0xFE, 0x93, 0x04, 0xFE, 0x94, -/* 0000B440 */ 0x04, 0x0C, 0x03, 0x0B, 0x08, 0x16, 0x16, 0x04, 0x03, 0x01, 0x01, 0x01, 0x01, 0x08, 0x09, 0x0A, -/* 0000B450 */ 0x08, 0x42, 0x94, 0x02, 0x03, 0x94, 0x03, 0x04, 0x94, 0x04, 0x05, 0x94, 0x05, 0x06, 0x8C, 0x04, -/* 0000B460 */ 0x03, 0x0C, 0x6A, 0x0B, 0x0C, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x8C, 0x04, 0x23, 0x0D, -/* 0000B470 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x90, 0x02, 0x0E, 0x5A, 0x01, 0x0E, 0xD3, 0x00, 0x0E, 0x5A, -/* 0000B480 */ 0x02, 0x0E, 0x1F, 0x03, 0x0D, 0x0D, 0x5A, 0x01, 0x0D, 0x5A, 0x02, 0x07, 0x1F, 0x03, 0xFF, 0x0B, -/* 0000B490 */ 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xEE, 0x01, 0xFF, 0x1E, 0xAA, 0x02, 0x00, 0x02, 0x0C, 0x00, 0x00, -/* 0000B4A0 */ 0x00, 0x34, 0x00, 0x4B, 0x01, 0x00, 0xAA, 0xB4, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, -/* 0000B4B0 */ 0x01, 0x00, 0xFE, 0x7C, 0x0E, 0x49, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x96, 0x04, 0xC4, 0xFF, 0x57, -/* 0000B4C0 */ 0xAA, 0x02, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x01, 0xFF, 0x57, 0xAA, 0x02, 0x00, 0xEE, -/* 0000B4D0 */ 0xEE, 0x01, 0x07, 0x03, 0x07, 0x09, 0x1D, 0x1B, 0x05, 0x05, 0x01, 0x01, 0x01, 0x01, 0x06, 0x08, -/* 0000B4E0 */ 0x59, 0x59, 0x07, 0xB1, 0x05, 0x07, 0x15, 0x05, 0x00, 0x03, 0x02, 0xA6, 0x07, 0x47, 0x03, 0x07, -/* 0000B4F0 */ 0x15, 0x05, 0x00, 0x04, 0x02, 0xA6, 0x07, 0x47, 0x04, 0x07, 0x8C, 0x02, 0x09, 0x08, 0x4B, 0x08, -/* 0000B500 */ 0x6A, 0x07, 0x08, 0x00, 0x07, 0x08, 0x00, 0x5A, 0x00, 0x08, 0x5A, 0x01, 0x05, 0x8C, 0x01, 0x02, -/* 0000B510 */ 0x09, 0x5A, 0x02, 0x09, 0x8C, 0x01, 0x03, 0x09, 0x5A, 0x03, 0x09, 0x8C, 0x01, 0x04, 0x09, 0x5A, -/* 0000B520 */ 0x04, 0x09, 0x8C, 0x01, 0x05, 0x09, 0x5A, 0x05, 0x09, 0x5A, 0x06, 0x03, 0x5A, 0x07, 0x04, 0x1F, -/* 0000B530 */ 0x08, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x53, 0xFF, 0x83, 0xAA, 0x02, 0x00, -/* 0000B540 */ 0x04, 0x05, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0A, 0x00, 0x2B, 0x00, 0x3E, 0x00, 0x81, -/* 0000B550 */ 0x00, 0x00, 0xBF, 0x5D, 0x00, 0xC1, 0x03, 0x8D, 0x05, 0x00, 0xFE, 0x75, 0x0E, 0x0D, 0xA2, 0x41, -/* 0000B560 */ 0xD1, 0x00, 0xC1, 0xFF, 0x89, 0xA7, 0x02, 0x00, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x06, 0x06, -/* 0000B570 */ 0xFF, 0x89, 0xA7, 0x02, 0x00, 0xFE, 0x9B, 0x01, 0xFE, 0x9B, 0x01, 0x40, 0x04, 0xF8, 0xFE, 0x92, -/* 0000B580 */ 0x04, 0xFE, 0x93, 0x04, 0xFE, 0x94, 0x04, 0x0C, 0x03, 0x0B, 0x08, 0x16, 0x16, 0x04, 0x03, 0x01, -/* 0000B590 */ 0x01, 0x01, 0x01, 0x08, 0x09, 0x0A, 0x08, 0x42, 0x94, 0x02, 0x03, 0x94, 0x03, 0x04, 0x94, 0x04, -/* 0000B5A0 */ 0x05, 0x94, 0x05, 0x06, 0x8C, 0x04, 0x03, 0x0C, 0x6A, 0x0B, 0x0C, 0x00, 0x07, 0x03, 0x00, 0x5A, -/* 0000B5B0 */ 0x00, 0x0C, 0x8C, 0x04, 0x23, 0x0D, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x90, 0x02, 0x0E, 0x5A, -/* 0000B5C0 */ 0x01, 0x0E, 0xD3, 0x00, 0x0E, 0x5A, 0x02, 0x0E, 0x1F, 0x03, 0x0D, 0x0D, 0x5A, 0x01, 0x0D, 0x5A, -/* 0000B5D0 */ 0x02, 0x07, 0x1F, 0x03, 0xFF, 0x0B, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xEE, 0x01, 0xFF, 0xDC, 0xA7, -/* 0000B5E0 */ 0x02, 0x00, 0x02, 0x0C, 0x00, 0x00, 0x00, 0x34, 0x00, 0x47, 0x01, 0x00, 0xF0, 0xB5, 0x00, 0x00, -/* 0000B5F0 */ 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x76, 0x0E, 0x49, 0xA2, 0x41, 0xC3, 0x00, -/* 0000B600 */ 0xFE, 0x95, 0x04, 0xC2, 0xFF, 0x15, 0xA8, 0x02, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x01, -/* 0000B610 */ 0xFF, 0x15, 0xA8, 0x02, 0x00, 0xEA, 0xEA, 0x01, 0x07, 0x03, 0x07, 0x09, 0x1D, 0x1B, 0x05, 0x05, -/* 0000B620 */ 0x01, 0x01, 0x01, 0x01, 0x06, 0x08, 0x59, 0x59, 0x07, 0xB1, 0x05, 0x07, 0x15, 0x05, 0x00, 0x03, -/* 0000B630 */ 0x02, 0xA6, 0x07, 0x47, 0x03, 0x07, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA6, 0x07, 0x47, 0x04, 0x07, -/* 0000B640 */ 0x8C, 0x02, 0x09, 0x08, 0x4B, 0x08, 0x6A, 0x07, 0x08, 0x00, 0x07, 0x08, 0x00, 0x5A, 0x00, 0x08, -/* 0000B650 */ 0x5A, 0x01, 0x05, 0x8C, 0x01, 0x02, 0x09, 0x5A, 0x02, 0x09, 0x8C, 0x01, 0x03, 0x09, 0x5A, 0x03, -/* 0000B660 */ 0x09, 0x8C, 0x01, 0x04, 0x09, 0x5A, 0x04, 0x09, 0x8C, 0x01, 0x05, 0x09, 0x5A, 0x05, 0x09, 0x5A, -/* 0000B670 */ 0x06, 0x03, 0x5A, 0x07, 0x04, 0x1F, 0x08, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, -/* 0000B680 */ 0x53, 0xFF, 0x3D, 0xA8, 0x02, 0x00, 0x04, 0x05, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0A, -/* 0000B690 */ 0x00, 0x2B, 0x00, 0x3E, 0x00, 0x81, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x07, 0x88, 0x01, 0x00, -/* 0000B6A0 */ 0xFE, 0x3E, 0x0E, 0x0C, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x37, 0x04, 0xC0, 0xFF, 0x4A, 0x98, 0x02, -/* 0000B6B0 */ 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x07, 0x07, 0xFF, 0x4A, 0x98, 0x02, 0x00, 0xFE, 0x74, 0x06, -/* 0000B6C0 */ 0xFE, 0x74, 0x06, 0x01, 0x0F, 0x07, 0x11, 0x0A, 0x8A, 0x84, 0x04, 0x0C, 0x04, 0x04, 0x04, 0x04, -/* 0000B6D0 */ 0x01, 0x10, 0x06, 0xFE, 0xF6, 0x03, 0x06, 0xFE, 0x41, 0x04, 0x08, 0x05, 0xFE, 0x91, 0x04, 0x07, -/* 0000B6E0 */ 0xFE, 0xBF, 0x01, 0x59, 0x11, 0xB1, 0x0D, 0x11, 0x4F, 0x0E, 0x4F, 0x0F, 0x2C, 0x11, 0x0D, 0x15, -/* 0000B6F0 */ 0x0D, 0x00, 0x11, 0x02, 0x8C, 0x04, 0x0C, 0x11, 0xE1, 0x11, 0x0D, 0x11, 0x00, 0x0F, 0x18, 0x00, -/* 0000B700 */ 0x11, 0x8C, 0x04, 0x03, 0x12, 0x6A, 0x11, 0x12, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x12, 0x5A, -/* 0000B710 */ 0x01, 0x07, 0x5A, 0x02, 0x03, 0x1F, 0x03, 0xFF, 0x11, 0x8C, 0x04, 0x06, 0x11, 0x07, 0x03, 0x00, -/* 0000B720 */ 0x5A, 0x00, 0x04, 0x8C, 0x04, 0x1B, 0x12, 0x5A, 0x01, 0x12, 0x8C, 0x04, 0x0C, 0x12, 0x07, 0x02, -/* 0000B730 */ 0x00, 0x5A, 0x01, 0x0D, 0xC1, 0x02, 0x12, 0x12, 0x5A, 0x02, 0x12, 0x1F, 0x03, 0x11, 0x11, 0x47, -/* 0000B740 */ 0x0E, 0x11, 0x8C, 0x04, 0x21, 0x11, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x0E, 0x1F, -/* 0000B750 */ 0x02, 0x11, 0x11, 0x0F, 0x15, 0x00, 0x11, 0x8C, 0x04, 0x20, 0x11, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 0000B760 */ 0x04, 0x5A, 0x01, 0x0E, 0x1F, 0x02, 0x11, 0x11, 0x0F, 0x06, 0x00, 0x11, 0x47, 0x00, 0x05, 0x09, -/* 0000B770 */ 0x2E, 0x01, 0xA6, 0x11, 0x47, 0x0F, 0x11, 0x8C, 0x04, 0x03, 0x11, 0x5F, 0x11, 0x11, 0x01, 0x0E, -/* 0000B780 */ 0x8B, 0x00, 0x11, 0xA6, 0x11, 0x14, 0x03, 0x00, 0x0B, 0x11, 0x09, 0x81, 0x00, 0xA6, 0x11, 0x14, -/* 0000B790 */ 0x03, 0x00, 0x0C, 0x11, 0x09, 0x77, 0x00, 0x8C, 0x01, 0x0A, 0x11, 0x4B, 0x11, 0x95, 0x11, 0x11, -/* 0000B7A0 */ 0x0A, 0x0E, 0x10, 0x00, 0x11, 0x8C, 0x01, 0x0A, 0x11, 0x4B, 0x11, 0x95, 0x11, 0x11, 0x0A, 0x47, -/* 0000B7B0 */ 0x0F, 0x11, 0x09, 0x59, 0x00, 0x8C, 0x04, 0x04, 0x11, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x04, 0xCA, -/* 0000B7C0 */ 0x12, 0x5A, 0x01, 0x12, 0x5A, 0x02, 0x06, 0x1F, 0x03, 0x11, 0x11, 0x47, 0x0F, 0x11, 0x8C, 0x01, -/* 0000B7D0 */ 0x08, 0x11, 0x4B, 0x11, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x0F, 0xA6, 0x12, 0x5A, -/* 0000B7E0 */ 0x02, 0x12, 0x8C, 0x01, 0x02, 0x12, 0x4B, 0x12, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x04, 0xA6, 0x13, -/* 0000B7F0 */ 0x5A, 0x01, 0x13, 0x5A, 0x02, 0x08, 0x5A, 0x03, 0x09, 0x1F, 0x04, 0x12, 0x12, 0x5A, 0x03, 0x12, -/* 0000B800 */ 0x1F, 0x04, 0xFF, 0x11, 0x8C, 0x01, 0x0A, 0x11, 0x4B, 0x11, 0x9A, 0x0F, 0x11, 0x0A, 0x0F, 0x4B, -/* 0000B810 */ 0x00, 0x0F, 0x8C, 0x04, 0x04, 0x11, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x04, 0xCA, 0x12, 0x5A, 0x01, -/* 0000B820 */ 0x12, 0x5A, 0x02, 0x06, 0x1F, 0x03, 0x11, 0x11, 0x47, 0x0F, 0x11, 0x8C, 0x01, 0x08, 0x11, 0x4B, -/* 0000B830 */ 0x11, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x0F, 0x5A, 0x02, 0x0B, 0x8C, 0x01, 0x02, -/* 0000B840 */ 0x12, 0x4B, 0x12, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x0C, 0x5A, 0x02, 0x08, 0x5A, -/* 0000B850 */ 0x03, 0x09, 0x1F, 0x04, 0x12, 0x12, 0x5A, 0x03, 0x12, 0x1F, 0x04, 0xFF, 0x11, 0x8C, 0x04, 0x0B, -/* 0000B860 */ 0x11, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, 0x8C, 0x04, 0x03, 0x13, 0x6A, 0x12, 0x13, 0x02, 0x07, -/* 0000B870 */ 0x03, 0x00, 0x5A, 0x00, 0x13, 0x8C, 0x04, 0x24, 0x15, 0x6A, 0x14, 0x15, 0x03, 0x07, 0x02, 0x00, -/* 0000B880 */ 0x5A, 0x00, 0x15, 0x5A, 0x01, 0x0D, 0x1F, 0x02, 0x14, 0x14, 0x5A, 0x01, 0x14, 0x5A, 0x02, 0x0F, -/* 0000B890 */ 0x1F, 0x03, 0x12, 0x12, 0x5A, 0x01, 0x12, 0x1F, 0x02, 0x00, 0x11, 0x09, 0x02, 0x00, 0xA6, 0x00, -/* 0000B8A0 */ 0x24, 0x00, 0xFE, 0x8A, 0x02, 0xFE, 0x61, 0x03, 0xFE, 0xE6, 0x01, 0xFE, 0x38, 0x03, 0xFF, 0xC3, -/* 0000B8B0 */ 0x98, 0x02, 0x00, 0x11, 0x09, 0x00, 0x00, 0x00, 0x15, 0x00, 0x4F, 0x00, 0x18, 0x00, 0x50, 0x00, -/* 0000B8C0 */ 0x29, 0x00, 0x53, 0x00, 0x2A, 0x00, 0x3C, 0x00, 0x06, 0x00, 0x3A, 0x00, 0x05, 0x00, 0x2D, 0x00, -/* 0000B8D0 */ 0x20, 0x00, 0xCE, 0x00, 0x0E, 0x00, 0x84, 0x00, 0x10, 0x00, 0xA2, 0x00, 0x19, 0x00, 0x3E, 0x00, -/* 0000B8E0 */ 0x36, 0x00, 0x7A, 0x00, 0x0A, 0x00, 0x7C, 0x00, 0x04, 0x00, 0x28, 0x00, 0x19, 0x00, 0x3A, 0x00, -/* 0000B8F0 */ 0x32, 0x00, 0x81, 0x00, 0x43, 0x00, 0x5A, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x53, 0xA8, 0x21, -/* 0000B900 */ 0x00, 0xFE, 0xB1, 0x0D, 0x0C, 0xB3, 0x41, 0xC1, 0x00, 0xFE, 0x3A, 0x04, 0xBF, 0xFF, 0x33, 0x7B, -/* 0000B910 */ 0x02, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFF, 0x33, 0x7B, 0x02, 0x00, 0xFE, 0x7E, -/* 0000B920 */ 0x1B, 0xFE, 0x7E, 0x1B, 0x45, 0x1C, 0x29, 0x41, 0x07, 0xFE, 0xB3, 0x01, 0xFE, 0x93, 0x01, 0x04, -/* 0000B930 */ 0x0F, 0x2A, 0x2A, 0x2A, 0x2A, 0x01, 0x01, 0x40, 0x41, 0x06, 0xFE, 0xF6, 0x03, 0x06, 0xFE, 0xC8, -/* 0000B940 */ 0x04, 0x08, 0x06, 0xFE, 0x47, 0x03, 0x0B, 0x05, 0xFE, 0x53, 0x04, 0x06, 0xFE, 0x56, 0x04, 0x06, -/* 0000B950 */ 0xFE, 0x00, 0x04, 0x06, 0xFE, 0xAD, 0x03, 0x05, 0xFE, 0xBC, 0x03, 0x05, 0xFE, 0xFF, 0x03, 0x06, -/* 0000B960 */ 0xFE, 0x88, 0x04, 0x06, 0xFE, 0x46, 0x04, 0x06, 0xFE, 0x42, 0x04, 0x06, 0xFE, 0x43, 0x04, 0x06, -/* 0000B970 */ 0xFE, 0x44, 0x04, 0x06, 0xFE, 0x47, 0x04, 0x06, 0xFE, 0x48, 0x04, 0x06, 0xFE, 0x45, 0x04, 0x06, -/* 0000B980 */ 0xFE, 0x13, 0x04, 0x06, 0xFE, 0x49, 0x04, 0x06, 0xFE, 0x4A, 0x04, 0x06, 0xFE, 0x4B, 0x04, 0x06, -/* 0000B990 */ 0xFE, 0x4C, 0x04, 0x06, 0xFE, 0x4D, 0x04, 0x06, 0xFE, 0x4E, 0x04, 0x06, 0xFE, 0x68, 0x04, 0x06, -/* 0000B9A0 */ 0xFE, 0xC2, 0x03, 0x05, 0xFE, 0x8D, 0x04, 0x05, 0xFE, 0x8E, 0x04, 0x05, 0xFE, 0x0D, 0x05, 0x05, -/* 0000B9B0 */ 0xFE, 0x0E, 0x05, 0x07, 0x06, 0xFE, 0xB4, 0x03, 0x06, 0xFE, 0xB3, 0x03, 0x0C, 0x05, 0xFE, 0x0F, -/* 0000B9C0 */ 0x05, 0x06, 0xFE, 0x54, 0x04, 0x01, 0x00, 0xFE, 0x88, 0x05, 0xA6, 0x3F, 0x2C, 0x42, 0x29, 0x0D, -/* 0000B9D0 */ 0x03, 0x00, 0x42, 0x02, 0x09, 0x12, 0x00, 0x8C, 0x04, 0x03, 0x43, 0x6A, 0x42, 0x43, 0x00, 0x07, -/* 0000B9E0 */ 0x01, 0x00, 0x5A, 0x00, 0x43, 0x1F, 0x01, 0xFF, 0x42, 0x8C, 0x04, 0x06, 0x42, 0x07, 0x04, 0x00, -/* 0000B9F0 */ 0x5A, 0x00, 0x04, 0x8C, 0x04, 0x13, 0x43, 0x5A, 0x01, 0x43, 0x5A, 0x02, 0x29, 0x5A, 0x03, 0x03, -/* 0000BA00 */ 0x1F, 0x04, 0x42, 0x42, 0x0E, 0x20, 0x00, 0x42, 0x5F, 0x42, 0x29, 0x01, 0x0E, 0x18, 0x00, 0x42, -/* 0000BA10 */ 0x8C, 0x04, 0x03, 0x43, 0x6A, 0x42, 0x43, 0x02, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x43, 0x5A, 0x01, -/* 0000BA20 */ 0x05, 0x5A, 0x02, 0x05, 0x1F, 0x03, 0xFF, 0x42, 0x74, 0x06, 0x29, 0x03, 0x8C, 0x01, 0x02, 0x42, -/* 0000BA30 */ 0x4B, 0x42, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x2B, 0x5A, 0x02, 0x07, 0x5A, 0x03, -/* 0000BA40 */ 0x08, 0x1F, 0x04, 0x42, 0x42, 0x47, 0x2B, 0x42, 0x8C, 0x03, 0x02, 0x42, 0x4B, 0x42, 0x07, 0x06, -/* 0000BA50 */ 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x2B, 0x5A, 0x02, 0x09, 0x5A, 0x03, 0x0A, 0xCC, 0x43, 0x02, -/* 0000BA60 */ 0x9F, 0x00, 0x0B, 0x43, 0x9F, 0x01, 0x0C, 0x43, 0x5A, 0x04, 0x43, 0x5A, 0x05, 0x0C, 0x1F, 0x06, -/* 0000BA70 */ 0x42, 0x42, 0x47, 0x2E, 0x42, 0x8C, 0x03, 0x02, 0x42, 0x4B, 0x42, 0x07, 0x06, 0x00, 0x5A, 0x00, -/* 0000BA80 */ 0x04, 0x5A, 0x01, 0x2B, 0x5A, 0x02, 0x0D, 0x5A, 0x03, 0x0A, 0xA6, 0x43, 0x5A, 0x04, 0x43, 0xA6, -/* 0000BA90 */ 0x43, 0x5A, 0x05, 0x43, 0x1F, 0x06, 0x42, 0x42, 0x47, 0x2F, 0x42, 0xA6, 0x42, 0x15, 0x03, 0x00, -/* 0000BAA0 */ 0x2F, 0x42, 0x09, 0x1B, 0x00, 0x8C, 0x04, 0x03, 0x43, 0x6A, 0x42, 0x43, 0x04, 0x07, 0x02, 0x00, -/* 0000BAB0 */ 0x5A, 0x00, 0x43, 0x5A, 0x01, 0x2F, 0x1F, 0x02, 0x42, 0x42, 0x47, 0x2F, 0x42, 0x09, 0x15, 0x00, -/* 0000BAC0 */ 0x8C, 0x04, 0x03, 0x43, 0x6A, 0x42, 0x43, 0x05, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x43, 0x1F, 0x01, -/* 0000BAD0 */ 0x42, 0x42, 0x47, 0x2F, 0x42, 0xA6, 0x42, 0x14, 0x03, 0x00, 0x2F, 0x42, 0x09, 0x12, 0x00, 0x8C, -/* 0000BAE0 */ 0x04, 0x03, 0x43, 0x6A, 0x42, 0x43, 0x06, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x43, 0x1F, 0x01, 0xFF, -/* 0000BAF0 */ 0x42, 0x8C, 0x03, 0x02, 0x42, 0x4B, 0x42, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x2B, -/* 0000BB00 */ 0x5A, 0x02, 0x0E, 0x5A, 0x03, 0x0A, 0xCC, 0x43, 0x03, 0x9F, 0x00, 0x0F, 0x43, 0x9F, 0x01, 0x10, -/* 0000BB10 */ 0x43, 0x9F, 0x02, 0x11, 0x43, 0x5A, 0x04, 0x43, 0xA6, 0x43, 0x5A, 0x05, 0x43, 0x1F, 0x06, 0x42, -/* 0000BB20 */ 0x42, 0x47, 0x30, 0x42, 0x8C, 0x03, 0x02, 0x42, 0x4B, 0x42, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, -/* 0000BB30 */ 0x5A, 0x01, 0x2B, 0x5A, 0x02, 0x12, 0x5A, 0x03, 0x0A, 0xCC, 0x43, 0x03, 0x9F, 0x00, 0x0F, 0x43, -/* 0000BB40 */ 0x9F, 0x01, 0x10, 0x43, 0x9F, 0x02, 0x11, 0x43, 0x5A, 0x04, 0x43, 0xA6, 0x43, 0x5A, 0x05, 0x43, -/* 0000BB50 */ 0x1F, 0x06, 0x42, 0x42, 0x47, 0x31, 0x42, 0x8C, 0x03, 0x02, 0x42, 0x4B, 0x42, 0x07, 0x06, 0x00, -/* 0000BB60 */ 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x2B, 0x5A, 0x02, 0x13, 0x5A, 0x03, 0x0A, 0xCC, 0x43, 0x02, 0x9F, -/* 0000BB70 */ 0x00, 0x14, 0x43, 0x9F, 0x01, 0x15, 0x43, 0x5A, 0x04, 0x43, 0xA6, 0x43, 0x5A, 0x05, 0x43, 0x1F, -/* 0000BB80 */ 0x06, 0x42, 0x42, 0x47, 0x32, 0x42, 0x8C, 0x03, 0x02, 0x42, 0x4B, 0x42, 0x07, 0x06, 0x00, 0x5A, -/* 0000BB90 */ 0x00, 0x04, 0x5A, 0x01, 0x2B, 0x5A, 0x02, 0x16, 0x5A, 0x03, 0x0A, 0xCC, 0x43, 0x05, 0x9F, 0x00, -/* 0000BBA0 */ 0x14, 0x43, 0x9F, 0x01, 0x15, 0x43, 0x9F, 0x02, 0x0F, 0x43, 0x9F, 0x03, 0x10, 0x43, 0x9F, 0x04, -/* 0000BBB0 */ 0x11, 0x43, 0x5A, 0x04, 0x43, 0xA6, 0x43, 0x5A, 0x05, 0x43, 0x1F, 0x06, 0x42, 0x42, 0x47, 0x33, -/* 0000BBC0 */ 0x42, 0x8C, 0x03, 0x02, 0x42, 0x4B, 0x42, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x2B, -/* 0000BBD0 */ 0x5A, 0x02, 0x17, 0x5A, 0x03, 0x0A, 0xCC, 0x43, 0x02, 0x9F, 0x00, 0x14, 0x43, 0x9F, 0x01, 0x15, -/* 0000BBE0 */ 0x43, 0x5A, 0x04, 0x43, 0xA6, 0x43, 0x5A, 0x05, 0x43, 0x1F, 0x06, 0x42, 0x42, 0x47, 0x34, 0x42, -/* 0000BBF0 */ 0x8C, 0x03, 0x02, 0x42, 0x4B, 0x42, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x2B, 0x5A, -/* 0000BC00 */ 0x02, 0x18, 0x5A, 0x03, 0x0A, 0xCC, 0x43, 0x02, 0x9F, 0x00, 0x14, 0x43, 0x9F, 0x01, 0x15, 0x43, -/* 0000BC10 */ 0x5A, 0x04, 0x43, 0xA6, 0x43, 0x5A, 0x05, 0x43, 0x1F, 0x06, 0x42, 0x42, 0x47, 0x35, 0x42, 0x8C, -/* 0000BC20 */ 0x03, 0x02, 0x42, 0x4B, 0x42, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x2B, 0x5A, 0x02, -/* 0000BC30 */ 0x19, 0x5A, 0x03, 0x0A, 0xCC, 0x43, 0x02, 0x9F, 0x00, 0x14, 0x43, 0x9F, 0x01, 0x15, 0x43, 0x5A, -/* 0000BC40 */ 0x04, 0x43, 0xA6, 0x43, 0x5A, 0x05, 0x43, 0x1F, 0x06, 0x42, 0x42, 0x47, 0x36, 0x42, 0x8C, 0x03, -/* 0000BC50 */ 0x02, 0x42, 0x4B, 0x42, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x2B, 0x5A, 0x02, 0x1A, -/* 0000BC60 */ 0x5A, 0x03, 0x0A, 0xCC, 0x43, 0x02, 0x9F, 0x00, 0x14, 0x43, 0x9F, 0x01, 0x15, 0x43, 0x5A, 0x04, -/* 0000BC70 */ 0x43, 0xA6, 0x43, 0x5A, 0x05, 0x43, 0x1F, 0x06, 0x42, 0x42, 0x47, 0x37, 0x42, 0x8C, 0x03, 0x02, -/* 0000BC80 */ 0x42, 0x4B, 0x42, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x2B, 0x5A, 0x02, 0x1B, 0x5A, -/* 0000BC90 */ 0x03, 0x0A, 0xCC, 0x43, 0x02, 0x9F, 0x00, 0x10, 0x43, 0x9F, 0x01, 0x11, 0x43, 0x5A, 0x04, 0x43, -/* 0000BCA0 */ 0xA6, 0x43, 0x5A, 0x05, 0x43, 0x1F, 0x06, 0x42, 0x42, 0x47, 0x38, 0x42, 0x0E, 0x29, 0x00, 0x35, -/* 0000BCB0 */ 0x8C, 0x03, 0x02, 0x43, 0x4B, 0x43, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x2B, 0x5A, -/* 0000BCC0 */ 0x02, 0x1C, 0x5A, 0x03, 0x1D, 0xA6, 0x44, 0x5A, 0x04, 0x44, 0xA6, 0x44, 0x5A, 0x05, 0x44, 0x1F, -/* 0000BCD0 */ 0x06, 0x43, 0x43, 0x47, 0x42, 0x43, 0x09, 0x05, 0x00, 0xA6, 0x43, 0x47, 0x42, 0x43, 0x47, 0x39, -/* 0000BCE0 */ 0x42, 0x8C, 0x03, 0x02, 0x42, 0x4B, 0x42, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x2B, -/* 0000BCF0 */ 0x5A, 0x02, 0x1E, 0x5A, 0x03, 0x0A, 0xCC, 0x43, 0x02, 0x9F, 0x00, 0x1F, 0x43, 0x9F, 0x01, 0x0C, -/* 0000BD00 */ 0x43, 0x5A, 0x04, 0x43, 0x5A, 0x05, 0x0C, 0x1F, 0x06, 0x42, 0x42, 0x47, 0x3A, 0x42, 0xA6, 0x42, -/* 0000BD10 */ 0x15, 0x03, 0x00, 0x39, 0x42, 0x09, 0x13, 0x00, 0x0E, 0x06, 0x00, 0x39, 0x47, 0x43, 0x20, 0x09, -/* 0000BD20 */ 0x03, 0x00, 0x47, 0x43, 0x21, 0x47, 0x42, 0x43, 0x09, 0x05, 0x00, 0xA6, 0x43, 0x47, 0x42, 0x43, -/* 0000BD30 */ 0x47, 0x3B, 0x42, 0x8C, 0x01, 0x03, 0x42, 0x4B, 0x42, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, 0x8C, -/* 0000BD40 */ 0x04, 0x04, 0x43, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x04, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 0000BD50 */ 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x78, 0x30, 0x44, 0x07, 0x78, 0x31, 0x44, 0x08, 0x78, 0x32, -/* 0000BD60 */ 0x44, 0x09, 0x78, 0x33, 0x44, 0x0A, 0x78, 0x34, 0x44, 0x0B, 0x78, 0x35, 0x44, 0x0C, 0x78, 0x36, -/* 0000BD70 */ 0x44, 0x0D, 0x78, 0x37, 0x44, 0x0E, 0x78, 0x38, 0x44, 0x0F, 0x5A, 0x01, 0x44, 0x5A, 0x02, 0x22, -/* 0000BD80 */ 0x1F, 0x03, 0x43, 0x43, 0x5A, 0x01, 0x43, 0x1F, 0x02, 0x42, 0x42, 0x47, 0x3C, 0x42, 0x8C, 0x03, -/* 0000BD90 */ 0x07, 0x42, 0x4B, 0x42, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x2A, 0x1F, 0x02, 0x42, -/* 0000BDA0 */ 0x42, 0x47, 0x2A, 0x42, 0x8C, 0x04, 0x2A, 0x42, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, -/* 0000BDB0 */ 0x2A, 0x5A, 0x02, 0x2E, 0xCC, 0x43, 0x02, 0x9F, 0x00, 0x23, 0x43, 0x9F, 0x01, 0x24, 0x43, 0x5A, -/* 0000BDC0 */ 0x03, 0x43, 0x8C, 0x04, 0x2B, 0x43, 0x5A, 0x04, 0x43, 0x1F, 0x05, 0x42, 0x42, 0x47, 0x3D, 0x42, -/* 0000BDD0 */ 0x74, 0x2E, 0x29, 0x10, 0x74, 0x2F, 0x29, 0x11, 0x5F, 0x42, 0x3D, 0x12, 0x74, 0x42, 0x29, 0x13, -/* 0000BDE0 */ 0x74, 0x30, 0x29, 0x14, 0x74, 0x31, 0x29, 0x15, 0x74, 0x32, 0x29, 0x16, 0x74, 0x33, 0x29, 0x17, -/* 0000BDF0 */ 0x74, 0x34, 0x29, 0x18, 0x74, 0x35, 0x29, 0x19, 0x74, 0x36, 0x29, 0x1A, 0x74, 0x37, 0x29, 0x1B, -/* 0000BE00 */ 0x74, 0x38, 0x29, 0x1C, 0x74, 0x39, 0x29, 0x1D, 0x74, 0x3A, 0x29, 0x1E, 0x74, 0x3B, 0x29, 0x1F, -/* 0000BE10 */ 0x74, 0x3C, 0x29, 0x20, 0x47, 0x3E, 0x25, 0xE5, 0x1A, 0x00, 0x8C, 0x03, 0x0B, 0x42, 0x4B, 0x42, -/* 0000BE20 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x29, 0x5A, 0x02, 0x25, 0x1F, 0x03, 0xFF, 0x42, -/* 0000BE30 */ 0xE9, 0x09, 0x51, 0x00, 0xE7, 0x2C, 0x06, 0x8C, 0x04, 0x22, 0x42, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 0000BE40 */ 0x04, 0x5A, 0x01, 0x2C, 0x1F, 0x02, 0xFF, 0x42, 0x8C, 0x01, 0x02, 0x42, 0x4B, 0x42, 0x07, 0x04, -/* 0000BE50 */ 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x2B, 0x5A, 0x02, 0x26, 0x5A, 0x03, 0x27, 0x1F, 0x04, 0x42, -/* 0000BE60 */ 0x42, 0x47, 0x3F, 0x42, 0x47, 0x42, 0x29, 0x8C, 0x01, 0x03, 0x43, 0x4B, 0x43, 0x07, 0x03, 0x00, -/* 0000BE70 */ 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x3F, 0x5A, 0x02, 0x22, 0x1F, 0x03, 0x43, 0x43, 0x74, 0x43, 0x42, -/* 0000BE80 */ 0x21, 0x47, 0x3E, 0x06, 0xE9, 0x0F, 0x25, 0x00, 0x3E, 0x47, 0x42, 0x29, 0x8C, 0x01, 0x07, 0x43, -/* 0000BE90 */ 0x4B, 0x43, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x04, 0x5F, 0x44, 0x29, 0x22, 0x95, 0x44, 0x44, 0x28, -/* 0000BEA0 */ 0x5A, 0x01, 0x44, 0x5A, 0x02, 0x29, 0x1F, 0x03, 0x43, 0x43, 0x74, 0x43, 0x42, 0x21, 0xE5, 0x1A, -/* 0000BEB0 */ 0x00, 0x8C, 0x03, 0x0B, 0x42, 0x4B, 0x42, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x29, -/* 0000BEC0 */ 0x5A, 0x02, 0x06, 0x1F, 0x03, 0xFF, 0x42, 0xE9, 0x09, 0x27, 0x00, 0xE7, 0x2D, 0x06, 0x8C, 0x04, -/* 0000BED0 */ 0x22, 0x42, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x2D, 0x1F, 0x02, 0xFF, 0x42, 0x8C, -/* 0000BEE0 */ 0x04, 0x03, 0x43, 0x6A, 0x42, 0x43, 0x06, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x43, 0x1F, 0x01, 0xFF, -/* 0000BEF0 */ 0x42, 0xE9, 0x8C, 0x01, 0x04, 0x42, 0x4B, 0x42, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, 0x5F, 0x43, -/* 0000BF00 */ 0x29, 0x23, 0x5A, 0x01, 0x43, 0x1F, 0x02, 0x42, 0x42, 0x74, 0x42, 0x29, 0x24, 0x47, 0x42, 0x29, -/* 0000BF10 */ 0x8C, 0x04, 0x06, 0x43, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x04, 0x8C, 0x04, 0x1E, 0x44, 0x5A, 0x01, -/* 0000BF20 */ 0x44, 0x5F, 0x44, 0x29, 0x25, 0x5A, 0x02, 0x44, 0x1F, 0x03, 0x43, 0x43, 0x74, 0x43, 0x42, 0x26, -/* 0000BF30 */ 0x5F, 0x42, 0x29, 0x27, 0xA6, 0x43, 0x15, 0x03, 0x00, 0x42, 0x43, 0x09, 0x0C, 0x00, 0x5F, 0x42, -/* 0000BF40 */ 0x29, 0x28, 0x43, 0x42, 0x42, 0x20, 0x74, 0x42, 0x29, 0x1D, 0x74, 0x06, 0x29, 0x29, 0xA6, 0x00, -/* 0000BF50 */ 0x24, 0x00, 0x01, 0x2C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 0000BF60 */ 0x00, 0x44, 0x02, 0x00, 0x00, 0x3B, 0x02, 0x00, 0x00, 0x45, 0x02, 0x00, 0x00, 0x3F, 0x02, 0x00, -/* 0000BF70 */ 0x00, 0x3A, 0x02, 0x00, 0x00, 0x3C, 0x02, 0x00, 0x00, 0x3E, 0x02, 0x00, 0x00, 0x41, 0x02, 0x00, -/* 0000BF80 */ 0x00, 0x43, 0x02, 0x00, 0x00, 0xFE, 0x89, 0x02, 0xFE, 0xF2, 0x01, 0xFE, 0x8D, 0x02, 0xFE, 0xF2, -/* 0000BF90 */ 0x01, 0xFE, 0xE7, 0x01, 0xFE, 0xE8, 0x01, 0xFE, 0x90, 0x02, 0xFE, 0x44, 0x02, 0xFE, 0x3B, 0x02, -/* 0000BFA0 */ 0xFE, 0x45, 0x02, 0xFE, 0x3F, 0x02, 0xFE, 0x3A, 0x02, 0xFE, 0x3C, 0x02, 0xFE, 0x3E, 0x02, 0xFE, -/* 0000BFB0 */ 0x41, 0x02, 0xFE, 0x43, 0x02, 0xFE, 0x2D, 0x02, 0xFE, 0x33, 0x02, 0xFE, 0xF7, 0x01, 0xFE, 0xF3, -/* 0000BFC0 */ 0x01, 0xFE, 0x35, 0x02, 0xFE, 0x28, 0x02, 0xFE, 0x38, 0x02, 0xFE, 0x2F, 0x02, 0xFE, 0x27, 0x02, -/* 0000BFD0 */ 0xFE, 0x2A, 0x02, 0xFE, 0x2E, 0x02, 0xFE, 0x31, 0x02, 0xFE, 0x34, 0x02, 0xFE, 0x2B, 0x02, 0xFE, -/* 0000BFE0 */ 0x29, 0x02, 0xFE, 0x37, 0x02, 0xFE, 0x0D, 0x02, 0xFE, 0x0D, 0x02, 0xFE, 0x30, 0x02, 0xFE, 0x36, -/* 0000BFF0 */ 0x02, 0xFE, 0x26, 0x02, 0xFE, 0x0C, 0x02, 0xFE, 0x0C, 0x02, 0xFE, 0x2A, 0x02, 0xFE, 0x37, 0x02, -/* 0000C000 */ 0xFE, 0x2C, 0x02, 0xFF, 0x8C, 0x7B, 0x02, 0x00, 0x3F, 0x02, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3D, -/* 0000C010 */ 0x00, 0x12, 0x00, 0x3F, 0x00, 0x27, 0x00, 0x9F, 0x00, 0x18, 0x00, 0x71, 0x00, 0x04, 0x00, 0x67, -/* 0000C020 */ 0x00, 0x1C, 0x00, 0x46, 0x00, 0x2D, 0x00, 0x71, 0x00, 0x26, 0x00, 0x60, 0x00, 0x0A, 0x00, 0x32, -/* 0000C030 */ 0x00, 0x1B, 0x00, 0x6C, 0x00, 0x15, 0x00, 0x4D, 0x00, 0x0A, 0x00, 0x32, 0x00, 0x12, 0x00, 0x6C, -/* 0000C040 */ 0x00, 0x33, 0x00, 0x6F, 0x00, 0x33, 0x00, 0x67, 0x00, 0x2F, 0x00, 0x64, 0x00, 0x3B, 0x00, 0x81, -/* 0000C050 */ 0x00, 0x2F, 0x00, 0x62, 0x00, 0x2F, 0x00, 0x64, 0x00, 0x2F, 0x00, 0x68, 0x00, 0x2F, 0x00, 0x68, -/* 0000C060 */ 0x00, 0x2F, 0x00, 0x70, 0x00, 0x35, 0x00, 0x6F, 0x00, 0x2D, 0x00, 0x77, 0x00, 0x25, 0x00, 0x71, -/* 0000C070 */ 0x00, 0x5B, 0x00, 0xD0, 0x01, 0x16, 0x00, 0x41, 0x00, 0x2C, 0x00, 0x9A, 0x00, 0x04, 0x00, 0x34, -/* 0000C080 */ 0x00, 0x04, 0x00, 0x36, 0x00, 0x08, 0x00, 0x68, 0x00, 0x04, 0x00, 0x34, 0x00, 0x04, 0x00, 0x2C, -/* 0000C090 */ 0x00, 0x04, 0x00, 0x2E, 0x00, 0x04, 0x00, 0x30, 0x00, 0x04, 0x00, 0x2C, 0x00, 0x04, 0x00, 0x2E, -/* 0000C0A0 */ 0x00, 0x04, 0x00, 0x32, 0x00, 0x04, 0x00, 0x32, 0x00, 0x04, 0x00, 0x3F, 0x00, 0x04, 0x00, 0x32, -/* 0000C0B0 */ 0x00, 0x04, 0x00, 0x40, 0x00, 0x04, 0x00, 0x3F, 0x00, 0x04, 0x00, 0x0F, 0x03, 0x06, 0x00, 0x93, -/* 0000C0C0 */ 0x00, 0x1C, 0x00, 0x3F, 0x00, 0x01, 0x00, 0x4A, 0x00, 0x11, 0x00, 0xEF, 0x00, 0x1C, 0x00, 0x54, -/* 0000C0D0 */ 0x00, 0x1D, 0x00, 0x6A, 0x00, 0x04, 0x00, 0x37, 0x00, 0x04, 0x00, 0x5A, 0x00, 0x28, 0x00, 0xDE, -/* 0000C0E0 */ 0x00, 0x1C, 0x00, 0x3E, 0x00, 0x01, 0x00, 0x4A, 0x00, 0x11, 0x00, 0x77, 0x01, 0x13, 0x00, 0x77, -/* 0000C0F0 */ 0x00, 0x1B, 0x00, 0x66, 0x00, 0x23, 0x00, 0x82, 0x00, 0x0E, 0x00, 0x3F, 0x00, 0x0C, 0x00, 0x6D, -/* 0000C100 */ 0x00, 0x06, 0x00, 0x3F, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x23, 0x88, 0x01, 0x00, 0xFE, 0x78, -/* 0000C110 */ 0x0D, 0x0C, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0xEC, 0x04, 0xBE, 0xFF, 0xF8, 0x6D, 0x02, 0x00, 0xFF, -/* 0000C120 */ 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFF, 0xF8, 0x6D, 0x02, 0x00, 0xFE, 0x2D, 0x0D, 0xFE, 0x2D, -/* 0000C130 */ 0x0D, 0x01, 0x07, 0x12, 0x16, 0x06, 0xC8, 0xBB, 0x04, 0x07, 0x0A, 0x0A, 0x0A, 0x0A, 0x02, 0x15, -/* 0000C140 */ 0x05, 0xFE, 0x07, 0x05, 0x08, 0x06, 0xFE, 0x45, 0x04, 0x07, 0x05, 0xFE, 0x08, 0x05, 0x01, 0x00, -/* 0000C150 */ 0x05, 0xFE, 0x09, 0x05, 0x05, 0xFE, 0xFC, 0x04, 0x05, 0xFE, 0x0A, 0x05, 0x06, 0xFE, 0x13, 0x04, -/* 0000C160 */ 0x06, 0xFE, 0x49, 0x04, 0x06, 0xFE, 0x4A, 0x04, 0x06, 0xFE, 0x4B, 0x04, 0x06, 0xFE, 0x4C, 0x04, -/* 0000C170 */ 0x06, 0xFE, 0x4D, 0x04, 0x05, 0xFE, 0x0B, 0x05, 0xFE, 0x9A, 0x02, 0xA6, 0x14, 0x5F, 0x16, 0x13, -/* 0000C180 */ 0x00, 0xA6, 0x17, 0x15, 0x03, 0x00, 0x16, 0x17, 0x09, 0x20, 0x00, 0x8C, 0x01, 0x05, 0x16, 0x4B, -/* 0000C190 */ 0x16, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x5A, 0x01, 0x12, 0x5F, 0x17, 0x13, 0x00, 0x5A, 0x02, -/* 0000C1A0 */ 0x17, 0x5A, 0x03, 0x02, 0x1F, 0x04, 0x16, 0x16, 0x47, 0x12, 0x16, 0x5F, 0x16, 0x13, 0x01, 0xA6, -/* 0000C1B0 */ 0x17, 0x15, 0x03, 0x00, 0x16, 0x17, 0x09, 0x00, 0x00, 0x5F, 0x16, 0x13, 0x02, 0x14, 0x03, 0x00, -/* 0000C1C0 */ 0x16, 0x04, 0x09, 0x70, 0x00, 0x8C, 0x04, 0x03, 0x17, 0x6A, 0x16, 0x17, 0x03, 0x07, 0x03, 0x00, -/* 0000C1D0 */ 0x5A, 0x00, 0x17, 0x5A, 0x01, 0x12, 0xE0, 0x18, 0x00, 0x5A, 0x02, 0x18, 0x1F, 0x03, 0x16, 0x16, -/* 0000C1E0 */ 0x47, 0x14, 0x16, 0x14, 0x03, 0x00, 0x14, 0x05, 0x09, 0x22, 0x00, 0x8C, 0x04, 0x0E, 0x16, 0x07, -/* 0000C1F0 */ 0x02, 0x00, 0x5A, 0x00, 0x03, 0x8C, 0x04, 0x0D, 0x17, 0x07, 0x02, 0x00, 0x5A, 0x01, 0x06, 0xC1, -/* 0000C200 */ 0x02, 0x17, 0x17, 0x5A, 0x01, 0x17, 0x1F, 0x02, 0xFF, 0x16, 0x09, 0x25, 0x00, 0x8C, 0x04, 0x06, -/* 0000C210 */ 0x16, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x03, 0x8C, 0x04, 0x1D, 0x17, 0x5A, 0x01, 0x17, 0x5A, 0x02, -/* 0000C220 */ 0x12, 0x95, 0x17, 0x14, 0x07, 0x5A, 0x03, 0x17, 0x5A, 0x04, 0x08, 0x1F, 0x05, 0x16, 0x16, 0x47, -/* 0000C230 */ 0x12, 0x16, 0x09, 0x79, 0x00, 0x5F, 0x16, 0x13, 0x02, 0x14, 0x03, 0x00, 0x16, 0x09, 0x09, 0x6D, -/* 0000C240 */ 0x00, 0x8C, 0x04, 0x03, 0x17, 0x6A, 0x16, 0x17, 0x03, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x17, 0x5A, -/* 0000C250 */ 0x01, 0x12, 0xE0, 0x18, 0x01, 0x5A, 0x02, 0x18, 0x1F, 0x03, 0x16, 0x16, 0x47, 0x14, 0x16, 0x14, -/* 0000C260 */ 0x03, 0x00, 0x14, 0x05, 0x09, 0x22, 0x00, 0x8C, 0x04, 0x0E, 0x16, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 0000C270 */ 0x03, 0x8C, 0x04, 0x0D, 0x17, 0x07, 0x02, 0x00, 0x5A, 0x01, 0x06, 0xC1, 0x02, 0x17, 0x17, 0x5A, -/* 0000C280 */ 0x01, 0x17, 0x1F, 0x02, 0xFF, 0x16, 0x09, 0x25, 0x00, 0x8C, 0x04, 0x06, 0x16, 0x07, 0x05, 0x00, -/* 0000C290 */ 0x5A, 0x00, 0x03, 0x8C, 0x04, 0x1D, 0x17, 0x5A, 0x01, 0x17, 0x5A, 0x02, 0x12, 0x95, 0x17, 0x14, -/* 0000C2A0 */ 0x07, 0x5A, 0x03, 0x17, 0x5A, 0x04, 0x0A, 0x1F, 0x05, 0x16, 0x16, 0x47, 0x12, 0x16, 0x5F, 0x16, -/* 0000C2B0 */ 0x13, 0x04, 0xA6, 0x17, 0x15, 0x03, 0x00, 0x16, 0x17, 0x09, 0x3B, 0x00, 0x5F, 0x16, 0x13, 0x04, -/* 0000C2C0 */ 0x15, 0x03, 0x00, 0x16, 0x04, 0x09, 0x2F, 0x00, 0x5F, 0x16, 0x13, 0x04, 0x15, 0x03, 0x00, 0x16, -/* 0000C2D0 */ 0x0B, 0x09, 0x23, 0x00, 0x8C, 0x01, 0x05, 0x16, 0x4B, 0x16, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, -/* 0000C2E0 */ 0x5A, 0x01, 0x12, 0x5F, 0x17, 0x13, 0x04, 0x5A, 0x02, 0x17, 0x5A, 0x03, 0x0C, 0x1F, 0x04, 0x16, -/* 0000C2F0 */ 0x16, 0x47, 0x12, 0x16, 0x09, 0x2E, 0x00, 0x5F, 0x16, 0x13, 0x04, 0xA6, 0x17, 0x15, 0x03, 0x00, -/* 0000C300 */ 0x16, 0x17, 0x09, 0x20, 0x00, 0x8C, 0x01, 0x06, 0x16, 0x4B, 0x16, 0x07, 0x04, 0x00, 0x5A, 0x00, -/* 0000C310 */ 0x03, 0x5A, 0x01, 0x12, 0x5F, 0x17, 0x13, 0x04, 0x5A, 0x02, 0x17, 0x5A, 0x03, 0x0C, 0x1F, 0x04, -/* 0000C320 */ 0x16, 0x16, 0x47, 0x12, 0x16, 0x5F, 0x16, 0x13, 0x05, 0xA6, 0x17, 0x15, 0x03, 0x00, 0x16, 0x17, -/* 0000C330 */ 0x09, 0x20, 0x00, 0x8C, 0x01, 0x06, 0x16, 0x4B, 0x16, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x5A, -/* 0000C340 */ 0x01, 0x12, 0x5F, 0x17, 0x13, 0x05, 0x5A, 0x02, 0x17, 0x5A, 0x03, 0x0D, 0x1F, 0x04, 0x16, 0x16, -/* 0000C350 */ 0x47, 0x12, 0x16, 0x5F, 0x16, 0x13, 0x06, 0xA6, 0x17, 0x15, 0x03, 0x00, 0x16, 0x17, 0x09, 0x20, -/* 0000C360 */ 0x00, 0x8C, 0x01, 0x06, 0x16, 0x4B, 0x16, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x5A, 0x01, 0x12, -/* 0000C370 */ 0x5F, 0x17, 0x13, 0x06, 0x5A, 0x02, 0x17, 0x5A, 0x03, 0x0E, 0x1F, 0x04, 0x16, 0x16, 0x47, 0x12, -/* 0000C380 */ 0x16, 0x5F, 0x16, 0x13, 0x07, 0xA6, 0x17, 0x15, 0x03, 0x00, 0x16, 0x17, 0x09, 0x20, 0x00, 0x8C, -/* 0000C390 */ 0x01, 0x06, 0x16, 0x4B, 0x16, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x5A, 0x01, 0x12, 0x5F, 0x17, -/* 0000C3A0 */ 0x13, 0x07, 0x5A, 0x02, 0x17, 0x5A, 0x03, 0x0F, 0x1F, 0x04, 0x16, 0x16, 0x47, 0x12, 0x16, 0x5F, -/* 0000C3B0 */ 0x16, 0x13, 0x08, 0xA6, 0x17, 0x15, 0x03, 0x00, 0x16, 0x17, 0x09, 0x20, 0x00, 0x8C, 0x01, 0x06, -/* 0000C3C0 */ 0x16, 0x4B, 0x16, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x5A, 0x01, 0x12, 0x5F, 0x17, 0x13, 0x08, -/* 0000C3D0 */ 0x5A, 0x02, 0x17, 0x5A, 0x03, 0x10, 0x1F, 0x04, 0x16, 0x16, 0x47, 0x12, 0x16, 0x5F, 0x16, 0x13, -/* 0000C3E0 */ 0x09, 0xA6, 0x17, 0x15, 0x03, 0x00, 0x16, 0x17, 0x09, 0x20, 0x00, 0x8C, 0x01, 0x05, 0x16, 0x4B, -/* 0000C3F0 */ 0x16, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x5A, 0x01, 0x12, 0x5F, 0x17, 0x13, 0x09, 0x5A, 0x02, -/* 0000C400 */ 0x17, 0x5A, 0x03, 0x11, 0x1F, 0x04, 0x16, 0x16, 0x47, 0x12, 0x16, 0x47, 0x00, 0x12, 0x09, 0x02, -/* 0000C410 */ 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x35, 0x02, 0xFE, 0x28, 0x02, 0xFE, 0x38, 0x02, 0xFE, 0x83, -/* 0000C420 */ 0x02, 0xFE, 0x2F, 0x02, 0xFE, 0x27, 0x02, 0xFE, 0x2A, 0x02, 0xFE, 0x2E, 0x02, 0xFE, 0x31, 0x02, -/* 0000C430 */ 0xFE, 0x34, 0x02, 0x1C, 0xFE, 0x0C, 0x05, 0x00, 0x1C, 0xFE, 0x0C, 0x05, 0x00, 0xFF, 0x47, 0x6E, -/* 0000C440 */ 0x02, 0x00, 0x1D, 0x02, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x42, 0x00, 0x20, 0x00, 0x88, 0x00, 0x0E, -/* 0000C450 */ 0x00, 0x8E, 0x01, 0x0C, 0x00, 0x3F, 0x00, 0x1E, 0x00, 0x6B, 0x00, 0x08, 0x00, 0x2E, 0x00, 0x22, -/* 0000C460 */ 0x00, 0x91, 0x00, 0x28, 0x00, 0x98, 0x00, 0x0C, 0x00, 0x3C, 0x00, 0x1E, 0x00, 0x6B, 0x00, 0x08, -/* 0000C470 */ 0x00, 0x2E, 0x00, 0x22, 0x00, 0x91, 0x00, 0x25, 0x00, 0x2F, 0x01, 0x26, 0x00, 0x90, 0x00, 0x23, -/* 0000C480 */ 0x00, 0x76, 0x00, 0x0E, 0x00, 0x40, 0x00, 0x20, 0x00, 0x8B, 0x00, 0x0E, 0x00, 0x3E, 0x00, 0x20, -/* 0000C490 */ 0x00, 0x87, 0x00, 0x0E, 0x00, 0x3F, 0x00, 0x20, 0x00, 0x89, 0x00, 0x0E, 0x00, 0x41, 0x00, 0x20, -/* 0000C4A0 */ 0x00, 0x8D, 0x00, 0x0E, 0x00, 0x41, 0x00, 0x20, 0x00, 0x8D, 0x00, 0x0E, 0x00, 0x47, 0x00, 0x20, -/* 0000C4B0 */ 0x00, 0x8C, 0x00, 0x08, 0x00, 0x22, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, -/* 0000C4C0 */ 0xFE, 0x64, 0x0D, 0x0C, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0xEB, 0x04, 0xBD, 0xFF, 0x90, 0x68, 0x02, -/* 0000C4D0 */ 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFF, 0x90, 0x68, 0x02, 0x00, 0xFE, 0xF8, 0x04, -/* 0000C4E0 */ 0xFE, 0xF8, 0x04, 0x01, 0x09, 0x11, 0x16, 0x07, 0x43, 0x40, 0x04, 0x06, 0x01, 0x01, 0x01, 0x01, -/* 0000C4F0 */ 0x15, 0x05, 0xFE, 0xF7, 0x04, 0x05, 0xFE, 0x02, 0x05, 0x08, 0x07, 0x05, 0xFE, 0x03, 0x05, 0x05, -/* 0000C500 */ 0xFE, 0xFA, 0x04, 0x05, 0xFE, 0xFB, 0x04, 0x06, 0xFE, 0x45, 0x04, 0x01, 0x00, 0x06, 0xFE, 0xFD, -/* 0000C510 */ 0x04, 0x01, 0x01, 0x05, 0xFE, 0x04, 0x05, 0x01, 0x02, 0x05, 0xFE, 0x05, 0x05, 0x05, 0xFE, 0x06, -/* 0000C520 */ 0x05, 0xEA, 0x8C, 0x04, 0x03, 0x17, 0x6A, 0x16, 0x17, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x17, -/* 0000C530 */ 0x5A, 0x01, 0x11, 0x8C, 0x04, 0x09, 0x18, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, 0xFB, 0x19, 0x02, -/* 0000C540 */ 0x13, 0x03, 0x5A, 0x01, 0x19, 0x1F, 0x02, 0x18, 0x18, 0x5A, 0x02, 0x18, 0x1F, 0x03, 0x16, 0x16, -/* 0000C550 */ 0x47, 0x14, 0x16, 0x14, 0x03, 0x00, 0x14, 0x05, 0x09, 0x34, 0x00, 0x8C, 0x04, 0x0E, 0x16, 0x07, -/* 0000C560 */ 0x02, 0x00, 0x5A, 0x00, 0x04, 0x8C, 0x04, 0x0D, 0x17, 0x07, 0x02, 0x00, 0xFC, 0x18, 0x06, 0x11, -/* 0000C570 */ 0x06, 0xFE, 0x18, 0x07, 0x02, 0x02, 0xFE, 0x18, 0x13, 0x08, 0x04, 0x5A, 0x01, 0x18, 0xC1, 0x02, -/* 0000C580 */ 0x17, 0x17, 0x5A, 0x01, 0x17, 0x1F, 0x02, 0xFF, 0x16, 0x47, 0x00, 0x11, 0x09, 0x7B, 0x00, 0x14, -/* 0000C590 */ 0x03, 0x00, 0x12, 0x09, 0x09, 0x31, 0x00, 0x8C, 0x04, 0x06, 0x16, 0x07, 0x05, 0x00, 0x5A, 0x00, -/* 0000C5A0 */ 0x04, 0x8C, 0x04, 0x1D, 0x17, 0x5A, 0x01, 0x17, 0x5A, 0x02, 0x11, 0x95, 0x17, 0x14, 0x0A, 0x5A, -/* 0000C5B0 */ 0x03, 0x17, 0x95, 0x17, 0x14, 0x0C, 0xFB, 0x17, 0x0B, 0x17, 0x0D, 0x5A, 0x04, 0x17, 0x1F, 0x05, -/* 0000C5C0 */ 0x00, 0x16, 0x09, 0x45, 0x00, 0x09, 0x3A, 0x00, 0x95, 0x16, 0x14, 0x0E, 0x15, 0x03, 0x00, 0x16, -/* 0000C5D0 */ 0x0F, 0x09, 0x2E, 0x00, 0x8C, 0x04, 0x06, 0x16, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x04, 0x8C, 0x04, -/* 0000C5E0 */ 0x1D, 0x17, 0x5A, 0x01, 0x17, 0x5A, 0x02, 0x11, 0x95, 0x17, 0x14, 0x0A, 0x5A, 0x03, 0x17, 0x95, -/* 0000C5F0 */ 0x17, 0x14, 0x0C, 0xFB, 0x17, 0x0B, 0x17, 0x10, 0x5A, 0x04, 0x17, 0x1F, 0x05, 0x00, 0x16, 0x09, -/* 0000C600 */ 0x08, 0x00, 0x47, 0x00, 0x11, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x83, 0x02, 0xFF, -/* 0000C610 */ 0xB7, 0x69, 0x02, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x31, 0x00, 0x91, 0x00, 0x08, 0x00, 0x2A, -/* 0000C620 */ 0x00, 0x2E, 0x00, 0x00, 0x01, 0x06, 0x00, 0x83, 0x00, 0x08, 0x00, 0x33, 0x00, 0x31, 0x00, 0x81, -/* 0000C630 */ 0x00, 0x0C, 0x00, 0x32, 0x00, 0x2E, 0x00, 0x8A, 0x00, 0x08, 0x00, 0x22, 0x00, 0x00, 0xBF, 0x5C, -/* 0000C640 */ 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x53, 0x0D, 0x0C, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0xEA, -/* 0000C650 */ 0x04, 0xBC, 0xFF, 0x62, 0x63, 0x02, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFF, 0x62, -/* 0000C660 */ 0x63, 0x02, 0x00, 0xFE, 0x20, 0x05, 0xFE, 0x20, 0x05, 0x01, 0x09, 0x14, 0x19, 0x07, 0x50, 0x4B, -/* 0000C670 */ 0x04, 0x06, 0x01, 0x01, 0x01, 0x01, 0x18, 0x05, 0xFE, 0xF7, 0x04, 0x05, 0xFE, 0xF8, 0x04, 0x08, -/* 0000C680 */ 0x07, 0x05, 0xFE, 0xF9, 0x04, 0x05, 0xFE, 0xFA, 0x04, 0x05, 0xFE, 0xFB, 0x04, 0x01, 0x02, 0x05, -/* 0000C690 */ 0xFE, 0xFC, 0x04, 0x06, 0xFE, 0x44, 0x04, 0x01, 0x00, 0x06, 0xFE, 0xFD, 0x04, 0x01, 0x01, 0x06, -/* 0000C6A0 */ 0xFE, 0xFE, 0x04, 0x06, 0xFE, 0xFF, 0x04, 0x06, 0xFE, 0x43, 0x04, 0x05, 0xFE, 0x00, 0x05, 0x05, -/* 0000C6B0 */ 0xFE, 0x01, 0x05, 0xFE, 0x19, 0x01, 0x8C, 0x04, 0x03, 0x1A, 0x6A, 0x19, 0x1A, 0x00, 0x07, 0x03, -/* 0000C6C0 */ 0x00, 0x5A, 0x00, 0x1A, 0x5A, 0x01, 0x14, 0x8C, 0x04, 0x09, 0x1B, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 0000C6D0 */ 0x04, 0xFB, 0x1C, 0x02, 0x16, 0x03, 0x5A, 0x01, 0x1C, 0x1F, 0x02, 0x1B, 0x1B, 0x5A, 0x02, 0x1B, -/* 0000C6E0 */ 0x1F, 0x03, 0x19, 0x19, 0x47, 0x17, 0x19, 0x14, 0x03, 0x00, 0x17, 0x05, 0x09, 0x34, 0x00, 0x8C, -/* 0000C6F0 */ 0x04, 0x0E, 0x19, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, 0x8C, 0x04, 0x0D, 0x1A, 0x07, 0x02, 0x00, -/* 0000C700 */ 0xFC, 0x1B, 0x06, 0x14, 0x06, 0xFE, 0x1B, 0x07, 0x02, 0x02, 0xFE, 0x1B, 0x16, 0x08, 0x04, 0x5A, -/* 0000C710 */ 0x01, 0x1B, 0xC1, 0x02, 0x1A, 0x1A, 0x5A, 0x01, 0x1A, 0x1F, 0x02, 0xFF, 0x19, 0x47, 0x00, 0x14, -/* 0000C720 */ 0x09, 0xAA, 0x00, 0x95, 0x19, 0x17, 0x09, 0x15, 0x03, 0x00, 0x19, 0x0A, 0x09, 0x44, 0x00, 0x14, -/* 0000C730 */ 0x03, 0x00, 0x15, 0x0B, 0x09, 0x3C, 0x00, 0x8C, 0x04, 0x06, 0x19, 0x07, 0x05, 0x00, 0x5A, 0x00, -/* 0000C740 */ 0x04, 0x8C, 0x04, 0x1D, 0x1A, 0x5A, 0x01, 0x1A, 0x5A, 0x02, 0x14, 0x95, 0x1A, 0x17, 0x0C, 0x5A, -/* 0000C750 */ 0x03, 0x1A, 0x95, 0x1A, 0x17, 0x0E, 0x2F, 0x1A, 0x0D, 0x1A, 0x2F, 0x1A, 0x1A, 0x0F, 0x2F, 0x1A, -/* 0000C760 */ 0x1A, 0x0A, 0x2F, 0x1A, 0x1A, 0x10, 0x5A, 0x04, 0x1A, 0x1F, 0x05, 0x00, 0x19, 0x09, 0x5D, 0x00, -/* 0000C770 */ 0x09, 0x52, 0x00, 0x15, 0x03, 0x00, 0x15, 0x0B, 0x09, 0x4A, 0x00, 0x8C, 0x04, 0x06, 0x19, 0x07, -/* 0000C780 */ 0x05, 0x00, 0x5A, 0x00, 0x04, 0x8C, 0x04, 0x1D, 0x1A, 0x5A, 0x01, 0x1A, 0x5A, 0x02, 0x14, 0x95, -/* 0000C790 */ 0x1A, 0x17, 0x0C, 0x5A, 0x03, 0x1A, 0x95, 0x1A, 0x17, 0x0E, 0x2F, 0x1A, 0x0D, 0x1A, 0x2F, 0x1A, -/* 0000C7A0 */ 0x1A, 0x0F, 0x14, 0x03, 0x00, 0x15, 0x11, 0x09, 0x06, 0x00, 0x47, 0x1B, 0x12, 0x09, 0x03, 0x00, -/* 0000C7B0 */ 0x47, 0x1B, 0x13, 0x2F, 0x1A, 0x1A, 0x1B, 0x2F, 0x1A, 0x1A, 0x10, 0x5A, 0x04, 0x1A, 0x1F, 0x05, -/* 0000C7C0 */ 0x00, 0x19, 0x09, 0x08, 0x00, 0x47, 0x00, 0x14, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, -/* 0000C7D0 */ 0x83, 0x02, 0xFF, 0x38, 0x64, 0x02, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x31, 0x00, 0x0F, 0x01, -/* 0000C7E0 */ 0x08, 0x00, 0x2A, 0x00, 0x2E, 0x00, 0xF5, 0x00, 0x06, 0x00, 0x39, 0x00, 0x14, 0x00, 0x47, 0x00, -/* 0000C7F0 */ 0x3C, 0x00, 0x85, 0x00, 0x08, 0x00, 0x30, 0x00, 0x4A, 0x00, 0xC4, 0x00, 0x08, 0x00, 0x22, 0x00, -/* 0000C800 */ 0x00, 0xBF, 0x4C, 0x00, 0x01, 0x00, 0x88, 0x01, 0x00, 0xFE, 0x4A, 0x0D, 0x0C, 0xA3, 0x41, 0xC1, -/* 0000C810 */ 0x00, 0xFE, 0xE9, 0x04, 0xBB, 0xFF, 0xFB, 0x61, 0x02, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, -/* 0000C820 */ 0x02, 0xFF, 0xFB, 0x61, 0x02, 0x00, 0xE9, 0xE9, 0x01, 0x03, 0x05, 0x07, 0x0E, 0x0B, 0x04, 0x01, -/* 0000C830 */ 0x06, 0x06, 0xFE, 0xF5, 0x03, 0x06, 0xFE, 0x5B, 0x03, 0x05, 0xFE, 0xD7, 0x04, 0x2A, 0x2C, 0x07, -/* 0000C840 */ 0x05, 0x14, 0x03, 0x00, 0x07, 0x02, 0x09, 0x06, 0x00, 0x47, 0x00, 0x03, 0x09, 0x17, 0x00, 0x8C, -/* 0000C850 */ 0x02, 0x02, 0x07, 0x95, 0x07, 0x07, 0x05, 0x47, 0x00, 0x07, 0x0F, 0x03, 0x00, 0x07, 0x47, 0x00, -/* 0000C860 */ 0x04, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFF, 0x36, 0x62, 0x02, 0x00, 0x04, 0x00, 0x00, -/* 0000C870 */ 0x00, 0x00, 0x0B, 0x00, 0x3B, 0x00, 0x06, 0x00, 0x2E, 0x00, 0x17, 0x00, 0x44, 0x00, 0x00, 0x3F, -/* 0000C880 */ 0x5D, 0x00, 0xC1, 0x03, 0x8D, 0x05, 0x00, 0xFE, 0x0A, 0x0D, 0x0C, 0xA3, 0x41, 0xC1, 0x00, 0xFE, -/* 0000C890 */ 0xE8, 0x04, 0xB9, 0xFF, 0x83, 0x56, 0x02, 0x00, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, -/* 0000C8A0 */ 0xFF, 0x83, 0x56, 0x02, 0x00, 0xFE, 0x95, 0x09, 0xFE, 0x95, 0x09, 0x02, 0xFE, 0xED, 0x04, 0xFE, -/* 0000C8B0 */ 0xCA, 0x01, 0x06, 0x17, 0x1B, 0x05, 0xC4, 0xC2, 0x04, 0x07, 0x05, 0x05, 0x05, 0x05, 0x18, 0x19, -/* 0000C8C0 */ 0x1A, 0x06, 0xFE, 0x42, 0x04, 0x06, 0xFE, 0x43, 0x04, 0x05, 0xFE, 0xEE, 0x04, 0x08, 0x06, 0xFE, -/* 0000C8D0 */ 0x44, 0x04, 0x05, 0xFE, 0xEF, 0x04, 0x06, 0xFE, 0x45, 0x04, 0x05, 0xFE, 0xF0, 0x04, 0x06, 0xFE, -/* 0000C8E0 */ 0x13, 0x04, 0x05, 0xFE, 0xF1, 0x04, 0x05, 0xFE, 0xF2, 0x04, 0x05, 0xFE, 0xF3, 0x04, 0x05, 0xFE, -/* 0000C8F0 */ 0xF4, 0x04, 0x06, 0xFE, 0x4A, 0x04, 0x05, 0xFE, 0xF5, 0x04, 0x05, 0xFE, 0xF6, 0x04, 0x06, 0xFE, -/* 0000C900 */ 0x4B, 0x04, 0x06, 0xFE, 0x4C, 0x04, 0x06, 0xFE, 0x4D, 0x04, 0x01, 0x00, 0x06, 0xFE, 0x85, 0x04, -/* 0000C910 */ 0xFE, 0x9F, 0x02, 0x94, 0x03, 0x17, 0xCC, 0x1B, 0x00, 0x94, 0x02, 0x1B, 0x90, 0x03, 0x1B, 0x5F, -/* 0000C920 */ 0x1B, 0x1B, 0x00, 0x0E, 0x69, 0x00, 0x1B, 0x90, 0x03, 0x1B, 0x5F, 0x1B, 0x1B, 0x00, 0x14, 0x0F, -/* 0000C930 */ 0x00, 0x1B, 0x02, 0x90, 0x03, 0x1B, 0x5F, 0x1B, 0x1B, 0x00, 0x14, 0x03, 0x00, 0x1B, 0x03, 0x09, -/* 0000C940 */ 0x21, 0x00, 0x8C, 0x04, 0x06, 0x1B, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x05, 0x8C, 0x04, 0x18, 0x1C, -/* 0000C950 */ 0x5A, 0x01, 0x1C, 0x90, 0x02, 0x1C, 0x5A, 0x02, 0x1C, 0x5A, 0x03, 0x04, 0x1F, 0x04, 0xFF, 0x1B, -/* 0000C960 */ 0x09, 0x2D, 0x00, 0x90, 0x03, 0x1B, 0x5F, 0x1B, 0x1B, 0x00, 0x14, 0x03, 0x00, 0x1B, 0x06, 0x09, -/* 0000C970 */ 0x1E, 0x00, 0x8C, 0x04, 0x06, 0x1B, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x05, 0x8C, 0x04, 0x18, 0x1C, -/* 0000C980 */ 0x5A, 0x01, 0x1C, 0x90, 0x02, 0x1C, 0x5A, 0x02, 0x1C, 0x5A, 0x03, 0x07, 0x1F, 0x04, 0xFF, 0x1B, -/* 0000C990 */ 0x90, 0x03, 0x1B, 0x5F, 0x1B, 0x1B, 0x01, 0x0E, 0x5D, 0x00, 0x1B, 0x90, 0x03, 0x1B, 0x5F, 0x1B, -/* 0000C9A0 */ 0x1B, 0x01, 0x14, 0x03, 0x00, 0x1B, 0x08, 0x09, 0x21, 0x00, 0x8C, 0x04, 0x06, 0x1B, 0x07, 0x04, -/* 0000C9B0 */ 0x00, 0x5A, 0x00, 0x05, 0x8C, 0x04, 0x18, 0x1C, 0x5A, 0x01, 0x1C, 0x90, 0x02, 0x1C, 0x5A, 0x02, -/* 0000C9C0 */ 0x1C, 0x5A, 0x03, 0x09, 0x1F, 0x04, 0xFF, 0x1B, 0x09, 0x2D, 0x00, 0x90, 0x03, 0x1B, 0x5F, 0x1B, -/* 0000C9D0 */ 0x1B, 0x01, 0x14, 0x03, 0x00, 0x1B, 0x0A, 0x09, 0x1E, 0x00, 0x8C, 0x04, 0x06, 0x1B, 0x07, 0x04, -/* 0000C9E0 */ 0x00, 0x5A, 0x00, 0x05, 0x8C, 0x04, 0x18, 0x1C, 0x5A, 0x01, 0x1C, 0x90, 0x02, 0x1C, 0x5A, 0x02, -/* 0000C9F0 */ 0x1C, 0x5A, 0x03, 0x0B, 0x1F, 0x04, 0xFF, 0x1B, 0x90, 0x03, 0x1B, 0x5F, 0x1B, 0x1B, 0x02, 0x0E, -/* 0000CA00 */ 0xA5, 0x00, 0x1B, 0x90, 0x03, 0x1B, 0x5F, 0x1B, 0x1B, 0x02, 0x14, 0x0F, 0x00, 0x1B, 0x08, 0x90, -/* 0000CA10 */ 0x03, 0x1B, 0x5F, 0x1B, 0x1B, 0x02, 0x14, 0x03, 0x00, 0x1B, 0x0A, 0x09, 0x21, 0x00, 0x8C, 0x04, -/* 0000CA20 */ 0x06, 0x1B, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x05, 0x8C, 0x04, 0x18, 0x1C, 0x5A, 0x01, 0x1C, 0x90, -/* 0000CA30 */ 0x02, 0x1C, 0x5A, 0x02, 0x1C, 0x5A, 0x03, 0x0C, 0x1F, 0x04, 0xFF, 0x1B, 0x09, 0x69, 0x00, 0x90, -/* 0000CA40 */ 0x03, 0x1B, 0x5F, 0x1B, 0x1B, 0x02, 0x14, 0x0F, 0x00, 0x1B, 0x03, 0x90, 0x03, 0x1B, 0x5F, 0x1B, -/* 0000CA50 */ 0x1B, 0x02, 0x14, 0x03, 0x00, 0x1B, 0x02, 0x09, 0x21, 0x00, 0x8C, 0x04, 0x06, 0x1B, 0x07, 0x04, -/* 0000CA60 */ 0x00, 0x5A, 0x00, 0x05, 0x8C, 0x04, 0x18, 0x1C, 0x5A, 0x01, 0x1C, 0x90, 0x02, 0x1C, 0x5A, 0x02, -/* 0000CA70 */ 0x1C, 0x5A, 0x03, 0x0D, 0x1F, 0x04, 0xFF, 0x1B, 0x09, 0x2D, 0x00, 0x90, 0x03, 0x1B, 0x5F, 0x1B, -/* 0000CA80 */ 0x1B, 0x02, 0x14, 0x03, 0x00, 0x1B, 0x06, 0x09, 0x1E, 0x00, 0x8C, 0x04, 0x06, 0x1B, 0x07, 0x04, -/* 0000CA90 */ 0x00, 0x5A, 0x00, 0x05, 0x8C, 0x04, 0x18, 0x1C, 0x5A, 0x01, 0x1C, 0x90, 0x02, 0x1C, 0x5A, 0x02, -/* 0000CAA0 */ 0x1C, 0x5A, 0x03, 0x0E, 0x1F, 0x04, 0xFF, 0x1B, 0x90, 0x03, 0x1B, 0x5F, 0x1B, 0x1B, 0x03, 0x0E, -/* 0000CAB0 */ 0x1E, 0x00, 0x1B, 0x8C, 0x04, 0x06, 0x1B, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x05, 0x8C, 0x04, 0x18, -/* 0000CAC0 */ 0x1C, 0x5A, 0x01, 0x1C, 0x90, 0x02, 0x1C, 0x5A, 0x02, 0x1C, 0x5A, 0x03, 0x0F, 0x1F, 0x04, 0xFF, -/* 0000CAD0 */ 0x1B, 0x90, 0x03, 0x1B, 0x5F, 0x1B, 0x1B, 0x04, 0x0E, 0x5D, 0x00, 0x1B, 0x90, 0x03, 0x1B, 0x5F, -/* 0000CAE0 */ 0x1B, 0x1B, 0x04, 0x14, 0x03, 0x00, 0x1B, 0x03, 0x09, 0x21, 0x00, 0x8C, 0x04, 0x06, 0x1B, 0x07, -/* 0000CAF0 */ 0x04, 0x00, 0x5A, 0x00, 0x05, 0x8C, 0x04, 0x18, 0x1C, 0x5A, 0x01, 0x1C, 0x90, 0x02, 0x1C, 0x5A, -/* 0000CB00 */ 0x02, 0x1C, 0x5A, 0x03, 0x10, 0x1F, 0x04, 0xFF, 0x1B, 0x09, 0x2D, 0x00, 0x90, 0x03, 0x1B, 0x5F, -/* 0000CB10 */ 0x1B, 0x1B, 0x04, 0x14, 0x03, 0x00, 0x1B, 0x06, 0x09, 0x1E, 0x00, 0x8C, 0x04, 0x06, 0x1B, 0x07, -/* 0000CB20 */ 0x04, 0x00, 0x5A, 0x00, 0x05, 0x8C, 0x04, 0x18, 0x1C, 0x5A, 0x01, 0x1C, 0x90, 0x02, 0x1C, 0x5A, -/* 0000CB30 */ 0x02, 0x1C, 0x5A, 0x03, 0x11, 0x1F, 0x04, 0xFF, 0x1B, 0x8C, 0x04, 0x06, 0x1B, 0x07, 0x04, 0x00, -/* 0000CB40 */ 0x5A, 0x00, 0x05, 0x8C, 0x04, 0x16, 0x1C, 0x5A, 0x01, 0x1C, 0xCC, 0x1C, 0x03, 0x9F, 0x00, 0x12, -/* 0000CB50 */ 0x1C, 0x9F, 0x01, 0x13, 0x1C, 0x9F, 0x02, 0x14, 0x1C, 0x5A, 0x02, 0x1C, 0xD3, 0x00, 0x1C, 0x5A, -/* 0000CB60 */ 0x03, 0x1C, 0x1F, 0x04, 0xFF, 0x1B, 0x8C, 0x04, 0x05, 0x1B, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x05, -/* 0000CB70 */ 0x90, 0x02, 0x1C, 0x5A, 0x01, 0x1C, 0x1F, 0x02, 0x1B, 0x1B, 0x11, 0x03, 0x00, 0x1B, 0x15, 0x09, -/* 0000CB80 */ 0x24, 0x00, 0x8C, 0x04, 0x06, 0x1B, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x05, 0x8C, 0x04, 0x19, 0x1C, -/* 0000CB90 */ 0x5A, 0x01, 0x1C, 0x90, 0x02, 0x1C, 0x5A, 0x02, 0x1C, 0x5A, 0x03, 0x16, 0x1F, 0x04, 0x1B, 0x1B, -/* 0000CBA0 */ 0x47, 0x00, 0x1B, 0x09, 0x05, 0x00, 0xA6, 0x1B, 0x47, 0x00, 0x1B, 0x09, 0x02, 0x00, 0xA6, 0x00, -/* 0000CBB0 */ 0x24, 0x00, 0xFE, 0x44, 0x02, 0xFE, 0x45, 0x02, 0xFE, 0x3F, 0x02, 0xFE, 0x3A, 0x02, 0xFE, 0x43, -/* 0000CBC0 */ 0x02, 0xFF, 0xC4, 0x56, 0x02, 0x00, 0x1C, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x24, 0x00, 0x0B, -/* 0000CBD0 */ 0x00, 0x2B, 0x00, 0x1B, 0x00, 0x5B, 0x00, 0x21, 0x00, 0x63, 0x00, 0x0F, 0x00, 0x3A, 0x00, 0x1E, -/* 0000CBE0 */ 0x00, 0xA5, 0x00, 0x0B, 0x00, 0x28, 0x00, 0x0F, 0x00, 0x3A, 0x00, 0x21, 0x00, 0x5E, 0x00, 0x0F, -/* 0000CBF0 */ 0x00, 0x3A, 0x00, 0x1E, 0x00, 0x75, 0x00, 0x0B, 0x00, 0x29, 0x00, 0x1B, 0x00, 0x5A, 0x00, 0x21, -/* 0000CC00 */ 0x00, 0x5A, 0x00, 0x1B, 0x00, 0x57, 0x00, 0x21, 0x00, 0x5F, 0x00, 0x0F, 0x00, 0x38, 0x00, 0x1E, -/* 0000CC10 */ 0x00, 0x76, 0x00, 0x0B, 0x00, 0x27, 0x00, 0x1E, 0x00, 0x59, 0x00, 0x0B, 0x00, 0x30, 0x00, 0x0F, -/* 0000CC20 */ 0x00, 0x40, 0x00, 0x21, 0x00, 0x62, 0x00, 0x0F, 0x00, 0x3F, 0x00, 0x1E, 0x00, 0x79, 0x00, 0x2D, -/* 0000CC30 */ 0x00, 0x3B, 0x01, 0x4A, 0x00, 0x72, 0x00, 0x00, 0x3C, 0xCC, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0x01, -/* 0000CC40 */ 0x00, 0x88, 0x01, 0x00, 0xFE, 0x34, 0x0D, 0x55, 0xA2, 0x41, 0xD1, 0x00, 0xBA, 0xFF, 0xAF, 0x5E, -/* 0000CC50 */ 0x02, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0xAF, 0x5E, 0x02, 0x00, 0xAC, 0xAC, -/* 0000CC60 */ 0x41, 0x04, 0x03, 0x05, 0x05, 0x0F, 0x0F, 0x05, 0x04, 0x04, 0x08, 0x2F, 0x8C, 0x01, 0x03, 0x05, -/* 0000CC70 */ 0x95, 0x05, 0x05, 0x03, 0x0E, 0x1F, 0x00, 0x05, 0x8C, 0x05, 0x06, 0x05, 0x07, 0x04, 0x00, 0x5A, -/* 0000CC80 */ 0x00, 0x02, 0x8C, 0x05, 0x18, 0x06, 0x5A, 0x01, 0x06, 0x8C, 0x01, 0x02, 0x06, 0x5A, 0x02, 0x06, -/* 0000CC90 */ 0x5A, 0x03, 0x03, 0x1F, 0x04, 0xFF, 0x05, 0xA6, 0x00, 0x24, 0x00, 0xFF, 0xD4, 0x5E, 0x02, 0x00, -/* 0000CCA0 */ 0x03, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x2C, 0x00, 0x21, 0x00, 0x5A, 0x00, 0x00, 0xBF, 0x5C, -/* 0000CCB0 */ 0x00, 0xC1, 0x13, 0x88, 0x21, 0x00, 0xFE, 0xD7, 0x0C, 0x0C, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x3B, -/* 0000CCC0 */ 0x04, 0xB8, 0xFF, 0xCA, 0x4C, 0x02, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFF, 0xCA, -/* 0000CCD0 */ 0x4C, 0x02, 0x00, 0xFE, 0x21, 0x09, 0xFE, 0x21, 0x09, 0x01, 0x07, 0x15, 0x1A, 0x05, 0x88, 0x82, -/* 0000CCE0 */ 0x04, 0x03, 0x0C, 0x0C, 0x0C, 0x0C, 0x06, 0x19, 0x07, 0x08, 0x0B, 0x06, 0xFE, 0x56, 0x04, 0x05, -/* 0000CCF0 */ 0xFE, 0x53, 0x04, 0x0C, 0x05, 0xFE, 0x58, 0x04, 0x06, 0xFE, 0x54, 0x04, 0x06, 0xFE, 0x48, 0x04, -/* 0000CD00 */ 0x06, 0xFE, 0x40, 0x03, 0x06, 0xFE, 0x13, 0x04, 0x06, 0xFE, 0x42, 0x03, 0x06, 0xFE, 0x43, 0x03, -/* 0000CD10 */ 0x06, 0xFE, 0x44, 0x03, 0x06, 0xFE, 0x49, 0x04, 0x06, 0xFE, 0x4A, 0x04, 0x06, 0xFE, 0x4B, 0x04, -/* 0000CD20 */ 0x06, 0xFE, 0x4C, 0x04, 0x06, 0xFE, 0x4D, 0x04, 0xFE, 0x18, 0x02, 0xA6, 0x1A, 0x14, 0x03, 0x00, -/* 0000CD30 */ 0x15, 0x1A, 0x09, 0x1C, 0x00, 0x8C, 0x04, 0x04, 0x1A, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x03, 0xCA, -/* 0000CD40 */ 0x1B, 0x5A, 0x01, 0x1B, 0x5A, 0x02, 0x02, 0x1F, 0x03, 0x1A, 0x1A, 0x47, 0x15, 0x1A, 0x09, 0x18, -/* 0000CD50 */ 0x00, 0x8C, 0x04, 0x24, 0x1B, 0x6A, 0x1A, 0x1B, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x1B, 0x5A, -/* 0000CD60 */ 0x01, 0x15, 0x1F, 0x02, 0x1A, 0x1A, 0x47, 0x15, 0x1A, 0x47, 0x18, 0x04, 0x14, 0x08, 0x00, 0x16, -/* 0000CD70 */ 0x05, 0x14, 0x03, 0x00, 0x16, 0x06, 0x09, 0x32, 0x00, 0x5F, 0x1A, 0x15, 0x01, 0xA6, 0x1B, 0x15, -/* 0000CD80 */ 0x24, 0x00, 0x1A, 0x1B, 0x5F, 0x1A, 0x15, 0x02, 0xA6, 0x1B, 0x15, 0x19, 0x00, 0x1A, 0x1B, 0x5F, -/* 0000CD90 */ 0x1A, 0x15, 0x03, 0xA6, 0x1B, 0x15, 0x0E, 0x00, 0x1A, 0x1B, 0x5F, 0x1A, 0x15, 0x04, 0xA6, 0x1B, -/* 0000CDA0 */ 0x15, 0x03, 0x00, 0x1A, 0x1B, 0x09, 0x03, 0x00, 0x47, 0x18, 0x07, 0x14, 0x08, 0x00, 0x16, 0x08, -/* 0000CDB0 */ 0x14, 0x03, 0x00, 0x16, 0x06, 0x09, 0x27, 0x00, 0x5F, 0x1A, 0x15, 0x05, 0xA6, 0x1B, 0x15, 0x19, -/* 0000CDC0 */ 0x00, 0x1A, 0x1B, 0x5F, 0x1A, 0x15, 0x06, 0xA6, 0x1B, 0x15, 0x0E, 0x00, 0x1A, 0x1B, 0x5F, 0x1A, -/* 0000CDD0 */ 0x15, 0x07, 0xA6, 0x1B, 0x15, 0x03, 0x00, 0x1A, 0x1B, 0x09, 0x03, 0x00, 0x47, 0x18, 0x07, 0x0E, -/* 0000CDE0 */ 0xA9, 0x00, 0x18, 0x14, 0x08, 0x00, 0x17, 0x05, 0x14, 0x03, 0x00, 0x17, 0x09, 0x09, 0x9C, 0x00, -/* 0000CDF0 */ 0x8C, 0x04, 0x15, 0x1A, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x5A, 0x01, 0x15, 0x5A, 0x02, 0x0A, -/* 0000CE00 */ 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00, 0x78, 0x0C, 0x1B, -/* 0000CE10 */ 0x08, 0x78, 0x04, 0x1B, 0x09, 0x78, 0x04, 0x1B, 0x0A, 0x78, 0x04, 0x1B, 0x0B, 0x5A, 0x03, 0x1B, -/* 0000CE20 */ 0x1F, 0x04, 0xFF, 0x1A, 0x8C, 0x04, 0x15, 0x1A, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x5A, 0x01, -/* 0000CE30 */ 0x15, 0x5A, 0x02, 0x10, 0xCB, 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, -/* 0000CE40 */ 0x00, 0x78, 0x0C, 0x1B, 0x08, 0x78, 0x04, 0x1B, 0x09, 0x78, 0x04, 0x1B, 0x0A, 0x78, 0x04, 0x1B, -/* 0000CE50 */ 0x0B, 0x5A, 0x03, 0x1B, 0x1F, 0x04, 0xFF, 0x1A, 0x8C, 0x04, 0x15, 0x1A, 0x07, 0x04, 0x00, 0x5A, -/* 0000CE60 */ 0x00, 0x03, 0x5A, 0x01, 0x15, 0x5A, 0x02, 0x11, 0xCB, 0x30, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, -/* 0000CE70 */ 0x00, 0x1B, 0x00, 0x00, 0x00, 0x78, 0x0C, 0x1B, 0x08, 0x78, 0x04, 0x1B, 0x09, 0x78, 0x04, 0x1B, -/* 0000CE80 */ 0x0A, 0x78, 0x04, 0x1B, 0x0B, 0x5A, 0x03, 0x1B, 0x1F, 0x04, 0xFF, 0x1A, 0x0E, 0xA9, 0x00, 0x18, -/* 0000CE90 */ 0x14, 0x08, 0x00, 0x17, 0x08, 0x14, 0x03, 0x00, 0x17, 0x09, 0x09, 0x9C, 0x00, 0x8C, 0x04, 0x15, -/* 0000CEA0 */ 0x1A, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x5A, 0x01, 0x15, 0x5A, 0x02, 0x12, 0xCB, 0x48, 0x00, -/* 0000CEB0 */ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00, 0x78, 0x0C, 0x1B, 0x08, 0x78, 0x04, -/* 0000CEC0 */ 0x1B, 0x09, 0x78, 0x04, 0x1B, 0x0A, 0x78, 0x04, 0x1B, 0x0B, 0x5A, 0x03, 0x1B, 0x1F, 0x04, 0xFF, -/* 0000CED0 */ 0x1A, 0x8C, 0x04, 0x15, 0x1A, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x5A, 0x01, 0x15, 0x5A, 0x02, -/* 0000CEE0 */ 0x13, 0xCB, 0x60, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00, 0x78, 0x0C, -/* 0000CEF0 */ 0x1B, 0x08, 0x78, 0x04, 0x1B, 0x09, 0x78, 0x04, 0x1B, 0x0A, 0x78, 0x04, 0x1B, 0x0B, 0x5A, 0x03, -/* 0000CF00 */ 0x1B, 0x1F, 0x04, 0xFF, 0x1A, 0x8C, 0x04, 0x15, 0x1A, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x5A, -/* 0000CF10 */ 0x01, 0x15, 0x5A, 0x02, 0x14, 0xCB, 0x78, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x1B, 0x00, -/* 0000CF20 */ 0x00, 0x00, 0x78, 0x0C, 0x1B, 0x08, 0x78, 0x04, 0x1B, 0x09, 0x78, 0x04, 0x1B, 0x0A, 0x78, 0x04, -/* 0000CF30 */ 0x1B, 0x0B, 0x5A, 0x03, 0x1B, 0x1F, 0x04, 0xFF, 0x1A, 0x47, 0x00, 0x15, 0x09, 0x02, 0x00, 0xA6, -/* 0000CF40 */ 0x00, 0x24, 0x00, 0x06, 0x90, 0x00, 0x78, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, -/* 0000CF50 */ 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, -/* 0000CF60 */ 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, -/* 0000CF70 */ 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x48, 0x00, -/* 0000CF80 */ 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, -/* 0000CF90 */ 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x03, 0x04, -/* 0000CFA0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, -/* 0000CFB0 */ 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, -/* 0000CFC0 */ 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, -/* 0000CFD0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, -/* 0000CFE0 */ 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0xFE, 0x36, -/* 0000CFF0 */ 0x03, 0xFE, 0x44, 0x02, 0xFE, 0x45, 0x02, 0xFE, 0x3F, 0x02, 0xFE, 0x3A, 0x02, 0xFE, 0x3C, 0x02, -/* 0000D000 */ 0xFE, 0x3E, 0x02, 0xFE, 0x41, 0x02, 0xFE, 0x83, 0x01, 0xFE, 0x82, 0x01, 0xFE, 0x80, 0x01, 0xFE, -/* 0000D010 */ 0x81, 0x01, 0xFF, 0x14, 0x4D, 0x02, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x31, 0x00, -/* 0000D020 */ 0x1C, 0x00, 0x4F, 0x00, 0x18, 0x00, 0x49, 0x00, 0x03, 0x00, 0x29, 0x00, 0x0D, 0x00, 0x45, 0x00, -/* 0000D030 */ 0x2F, 0x00, 0x97, 0x00, 0x03, 0x00, 0x4E, 0x00, 0x0D, 0x00, 0x45, 0x00, 0x24, 0x00, 0x7A, 0x00, -/* 0000D040 */ 0x03, 0x00, 0x4F, 0x00, 0x11, 0x00, 0x57, 0x00, 0x34, 0x00, 0xCB, 0x00, 0x34, 0x00, 0xCC, 0x00, -/* 0000D050 */ 0x34, 0x00, 0xD8, 0x00, 0x11, 0x00, 0x57, 0x00, 0x34, 0x00, 0xCB, 0x00, 0x34, 0x00, 0xCD, 0x00, -/* 0000D060 */ 0x34, 0x00, 0xDB, 0x00, 0x08, 0x00, 0x1C, 0x00, 0x00, 0x3F, 0x5D, 0x00, 0xC1, 0x53, 0xAD, 0x25, -/* 0000D070 */ 0x01, 0xFE, 0xDD, 0x0B, 0x18, 0xA0, 0x41, 0xD1, 0x00, 0xAF, 0xFF, 0x16, 0x1A, 0x02, 0x00, 0x06, -/* 0000D080 */ 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFF, 0x16, 0x1A, 0x02, 0x00, 0xFE, 0xC0, 0x31, 0xFE, -/* 0000D090 */ 0xC0, 0x31, 0x01, 0xFE, 0xCA, 0x01, 0x0D, 0x21, 0x27, 0x09, 0xA8, 0xA8, 0x02, 0x0A, 0x08, 0x08, -/* 0000D0A0 */ 0x08, 0x08, 0x05, 0x02, 0x24, 0x25, 0x26, 0x27, 0x08, 0x06, 0xFE, 0x3D, 0x03, 0x06, 0xFE, 0x20, -/* 0000D0B0 */ 0x04, 0x05, 0xFE, 0x21, 0x04, 0x05, 0xFE, 0x22, 0x04, 0x05, 0xFE, 0x23, 0x04, 0x06, 0xFE, 0x4C, -/* 0000D0C0 */ 0x03, 0x06, 0xFE, 0x40, 0x03, 0x06, 0xFE, 0x42, 0x03, 0x0B, 0x06, 0xFE, 0x44, 0x03, 0x07, 0x06, -/* 0000D0D0 */ 0xFE, 0xF7, 0x03, 0x06, 0xFE, 0x35, 0x04, 0x06, 0xFE, 0x28, 0x04, 0x06, 0xFE, 0x2B, 0x04, 0x06, -/* 0000D0E0 */ 0xFE, 0x2C, 0x04, 0x06, 0xFE, 0xFA, 0x03, 0x06, 0xFE, 0xFB, 0x03, 0x06, 0xFE, 0xFC, 0x03, 0x06, -/* 0000D0F0 */ 0xFE, 0xFD, 0x03, 0x06, 0xFE, 0xFE, 0x03, 0x06, 0xFE, 0x2F, 0x04, 0x06, 0xFE, 0x0B, 0x04, 0x0C, -/* 0000D100 */ 0x06, 0xFE, 0x43, 0x03, 0x06, 0xFE, 0x0C, 0x04, 0x06, 0xFE, 0x0D, 0x04, 0x06, 0xFE, 0x26, 0x04, -/* 0000D110 */ 0x06, 0xFE, 0x8D, 0x03, 0x05, 0xFE, 0x25, 0x04, 0xFE, 0x95, 0x02, 0xA6, 0x21, 0xA6, 0x22, 0xA6, -/* 0000D120 */ 0x23, 0x8C, 0x02, 0x32, 0x29, 0x14, 0x0C, 0x00, 0x29, 0x03, 0x8C, 0x02, 0x32, 0x29, 0x14, 0x03, -/* 0000D130 */ 0x00, 0x29, 0x04, 0x09, 0x71, 0x02, 0xDE, 0x00, 0x03, 0x01, 0xB6, 0x29, 0x00, 0x01, 0x53, 0x01, -/* 0000D140 */ 0x00, 0x21, 0x29, 0x93, 0x00, 0x02, 0x21, 0x8C, 0x02, 0x03, 0x2A, 0x6A, 0x29, 0x2A, 0x00, 0x07, -/* 0000D150 */ 0x03, 0x00, 0x5A, 0x00, 0x2A, 0x8C, 0x02, 0x23, 0x2B, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5A, -/* 0000D160 */ 0x01, 0x05, 0xB6, 0x2D, 0x00, 0x01, 0x53, 0x01, 0x01, 0x2C, 0x2D, 0x5A, 0x02, 0x2C, 0x1F, 0x03, -/* 0000D170 */ 0x2B, 0x2B, 0x5A, 0x01, 0x2B, 0x8C, 0x02, 0x36, 0x2B, 0x4B, 0x2B, 0x5F, 0x2B, 0x2B, 0x01, 0x5A, -/* 0000D180 */ 0x02, 0x2B, 0x1F, 0x03, 0xFF, 0x29, 0x8C, 0x02, 0x32, 0x29, 0x14, 0x03, 0x00, 0x29, 0x03, 0x09, -/* 0000D190 */ 0x15, 0x02, 0xDE, 0x01, 0x04, 0x02, 0xB6, 0x29, 0x00, 0xB5, 0x01, 0x00, 0x00, 0x00, 0x29, 0x29, -/* 0000D1A0 */ 0x01, 0x53, 0x01, 0x02, 0x22, 0x29, 0x93, 0x01, 0x02, 0x22, 0x01, 0x53, 0x01, 0x03, 0x23, 0x29, -/* 0000D1B0 */ 0x93, 0x01, 0x03, 0x23, 0x8C, 0x02, 0x23, 0x29, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, -/* 0000D1C0 */ 0x06, 0x8E, 0x01, 0x02, 0x2A, 0x5A, 0x02, 0x2A, 0x1F, 0x03, 0xFF, 0x29, 0x8C, 0x02, 0x23, 0x29, -/* 0000D1D0 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x07, 0x8E, 0x01, 0x03, 0x2A, 0x5A, 0x02, 0x2A, -/* 0000D1E0 */ 0x1F, 0x03, 0xFF, 0x29, 0x8C, 0x02, 0x15, 0x29, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8E, 0x01, -/* 0000D1F0 */ 0x02, 0x2A, 0x5A, 0x01, 0x2A, 0x5A, 0x02, 0x08, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 0000D200 */ 0x00, 0x2A, 0x00, 0x00, 0x00, 0x8C, 0x01, 0x15, 0x2B, 0x4B, 0x2B, 0x78, 0x2B, 0x2A, 0x02, 0x78, -/* 0000D210 */ 0x0B, 0x2A, 0x03, 0x78, 0x0B, 0x2A, 0x04, 0x5A, 0x03, 0x2A, 0x1F, 0x04, 0xFF, 0x29, 0xCC, 0x29, -/* 0000D220 */ 0x0B, 0x9F, 0x00, 0x0E, 0x29, 0x9F, 0x01, 0x0F, 0x29, 0x9F, 0x02, 0x10, 0x29, 0x9F, 0x03, 0x11, -/* 0000D230 */ 0x29, 0x9F, 0x04, 0x12, 0x29, 0x9F, 0x05, 0x13, 0x29, 0x9F, 0x06, 0x14, 0x29, 0x9F, 0x07, 0x15, -/* 0000D240 */ 0x29, 0x9F, 0x08, 0x16, 0x29, 0x9F, 0x09, 0x17, 0x29, 0x9F, 0x0A, 0x18, 0x29, 0x94, 0x02, 0x29, -/* 0000D250 */ 0x8C, 0x02, 0x15, 0x29, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8E, 0x01, 0x02, 0x2A, 0x5A, 0x01, -/* 0000D260 */ 0x2A, 0x5A, 0x02, 0x19, 0xCB, 0x14, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, -/* 0000D270 */ 0x00, 0x8E, 0x01, 0x02, 0x2B, 0x07, 0x01, 0x00, 0xC1, 0x01, 0x2B, 0x2B, 0x78, 0x2B, 0x2A, 0x02, -/* 0000D280 */ 0x78, 0x1A, 0x2A, 0x03, 0x78, 0x1A, 0x2A, 0x05, 0x78, 0x1A, 0x2A, 0x04, 0x5A, 0x03, 0x2A, 0x1F, -/* 0000D290 */ 0x04, 0xFF, 0x29, 0x8C, 0x02, 0x04, 0x29, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x8E, 0x01, 0x02, -/* 0000D2A0 */ 0x2A, 0x5F, 0x2A, 0x2A, 0x06, 0x5A, 0x01, 0x2A, 0x8C, 0x02, 0x08, 0x2A, 0x5F, 0x2A, 0x2A, 0x06, -/* 0000D2B0 */ 0x5A, 0x02, 0x2A, 0x1F, 0x03, 0xFF, 0x29, 0x8C, 0x02, 0x15, 0x29, 0x07, 0x04, 0x00, 0x5A, 0x00, -/* 0000D2C0 */ 0x02, 0x8E, 0x01, 0x02, 0x2A, 0x5F, 0x2A, 0x2A, 0x06, 0x5A, 0x01, 0x2A, 0x5A, 0x02, 0x1C, 0xCB, -/* 0000D2D0 */ 0x2C, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x8E, 0x01, 0x02, 0x2B, -/* 0000D2E0 */ 0x78, 0x2B, 0x2A, 0x02, 0x78, 0x0B, 0x2A, 0x03, 0x78, 0x1A, 0x2A, 0x05, 0x78, 0x0B, 0x2A, 0x04, -/* 0000D2F0 */ 0x5A, 0x03, 0x2A, 0x1F, 0x04, 0xFF, 0x29, 0x8C, 0x02, 0x15, 0x29, 0x07, 0x04, 0x00, 0x5A, 0x00, -/* 0000D300 */ 0x02, 0x8E, 0x01, 0x02, 0x2A, 0x5F, 0x2A, 0x2A, 0x06, 0x5A, 0x01, 0x2A, 0x5A, 0x02, 0x1D, 0xCB, -/* 0000D310 */ 0x44, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x00, 0xB6, 0x2C, 0x00, 0xB5, -/* 0000D320 */ 0x01, 0x00, 0x00, 0x00, 0x2C, 0x2C, 0x01, 0x57, 0x01, 0x04, 0x2B, 0x2C, 0x2A, 0x78, 0x2B, 0x2A, -/* 0000D330 */ 0x02, 0x78, 0x0B, 0x2A, 0x03, 0x78, 0x1A, 0x2A, 0x05, 0x78, 0x0B, 0x2A, 0x04, 0x5A, 0x03, 0x2A, -/* 0000D340 */ 0x1F, 0x04, 0xFF, 0x29, 0x8C, 0x02, 0x15, 0x29, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8E, 0x01, -/* 0000D350 */ 0x02, 0x2A, 0x5F, 0x2A, 0x2A, 0x06, 0x5A, 0x01, 0x2A, 0x5A, 0x02, 0x1E, 0xCB, 0x5C, 0x00, 0x00, -/* 0000D360 */ 0x00, 0x04, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x8C, 0x02, 0x23, 0x2B, 0x07, 0x03, 0x00, -/* 0000D370 */ 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x20, 0xB6, 0x2D, 0x00, 0xB5, 0x01, 0x00, 0x00, 0x00, 0x2D, 0x2D, -/* 0000D380 */ 0x01, 0x53, 0x01, 0x05, 0x2C, 0x2D, 0x5A, 0x02, 0x2C, 0x1F, 0x03, 0x2B, 0x2B, 0x78, 0x2B, 0x2A, -/* 0000D390 */ 0x07, 0x78, 0x1A, 0x2A, 0x05, 0x78, 0x0B, 0x2A, 0x04, 0x5A, 0x03, 0x2A, 0x1F, 0x04, 0xFF, 0x29, -/* 0000D3A0 */ 0x8E, 0x01, 0x02, 0x00, 0x09, 0x07, 0x00, 0xA6, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, -/* 0000D3B0 */ 0x05, 0x70, 0x00, 0x5C, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, -/* 0000D3C0 */ 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x03, -/* 0000D3D0 */ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, -/* 0000D3E0 */ 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x2C, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, -/* 0000D3F0 */ 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, -/* 0000D400 */ 0x01, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, -/* 0000D410 */ 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x00, -/* 0000D420 */ 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, -/* 0000D430 */ 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0xFE, 0xEE, 0x01, 0xFE, 0x06, 0x03, 0xFE, 0x83, 0x01, -/* 0000D440 */ 0xFE, 0x82, 0x01, 0xFE, 0x81, 0x01, 0xFE, 0x80, 0x01, 0xFE, 0x15, 0x01, 0xFE, 0x84, 0x01, 0x02, -/* 0000D450 */ 0x01, 0x01, 0x00, 0xFE, 0x1F, 0x04, 0x02, 0x02, 0x00, 0xFE, 0x01, 0x02, 0x01, 0xFE, 0xF5, 0x01, -/* 0000D460 */ 0xFF, 0x2C, 0x1A, 0x02, 0x00, 0x0F, 0x06, 0x00, 0x00, 0x00, 0x26, 0x00, 0x0A, 0x1C, 0x3F, 0x00, -/* 0000D470 */ 0x74, 0x02, 0x2E, 0x00, 0x5A, 0x04, 0x18, 0x00, 0xD4, 0x02, 0x18, 0x00, 0x52, 0x00, 0x3A, 0x00, -/* 0000D480 */ 0x9B, 0x00, 0x32, 0x00, 0x1F, 0x01, 0x43, 0x00, 0x99, 0x00, 0x24, 0x00, 0x48, 0x00, 0x40, 0x00, -/* 0000D490 */ 0x9E, 0x00, 0x4D, 0x00, 0xC2, 0x04, 0x5C, 0x00, 0x16, 0x03, 0x07, 0x00, 0x84, 0x00, 0x07, 0x00, -/* 0000D4A0 */ 0x16, 0x00, 0x00, 0x98, 0xDB, 0x00, 0x00, 0x69, 0xDA, 0x00, 0x00, 0x96, 0xD8, 0x00, 0x00, 0x6A, -/* 0000D4B0 */ 0xD7, 0x00, 0x00, 0x9F, 0xD5, 0x00, 0x00, 0xBB, 0xD4, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, -/* 0000D4C0 */ 0x88, 0x01, 0x00, 0xFE, 0xBF, 0x0C, 0x39, 0xA0, 0x41, 0xD1, 0x00, 0xB6, 0xFF, 0x97, 0x48, 0x02, -/* 0000D4D0 */ 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFF, 0x97, 0x48, 0x02, 0x00, 0xFE, 0x56, 0x02, -/* 0000D4E0 */ 0xFE, 0x56, 0x02, 0x01, 0x05, 0x05, 0x08, 0x04, 0x23, 0x22, 0x05, 0x01, 0x04, 0x04, 0x04, 0x04, -/* 0000D4F0 */ 0x07, 0x06, 0xFE, 0xF6, 0x03, 0x05, 0xFE, 0x32, 0x04, 0x06, 0xFE, 0x46, 0x03, 0x72, 0x59, 0x08, -/* 0000D500 */ 0xB1, 0x05, 0x08, 0x2C, 0x08, 0x05, 0x15, 0x03, 0x00, 0x08, 0x02, 0x09, 0x18, 0x00, 0x8C, 0x05, -/* 0000D510 */ 0x03, 0x09, 0x6A, 0x08, 0x09, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x09, 0x5A, 0x01, 0x03, 0x5A, -/* 0000D520 */ 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x08, 0x8C, 0x05, 0x03, 0x09, 0x6A, 0x08, 0x09, 0x01, 0x07, 0x02, -/* 0000D530 */ 0x00, 0x5A, 0x00, 0x09, 0x5A, 0x01, 0x05, 0x1F, 0x02, 0x08, 0x08, 0x47, 0x06, 0x08, 0xA6, 0x08, -/* 0000D540 */ 0x14, 0x08, 0x00, 0x06, 0x08, 0x5F, 0x08, 0x06, 0x02, 0x0F, 0x18, 0x00, 0x08, 0x8C, 0x05, 0x03, -/* 0000D550 */ 0x09, 0x6A, 0x08, 0x09, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x09, 0x5A, 0x01, 0x03, 0x5A, 0x02, -/* 0000D560 */ 0x04, 0x1F, 0x03, 0xFF, 0x08, 0x5F, 0x00, 0x06, 0x03, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, -/* 0000D570 */ 0xFE, 0x8A, 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0x06, 0x02, 0xFE, 0x25, 0x02, 0xFF, 0xBD, 0x48, 0x02, -/* 0000D580 */ 0x00, 0x07, 0x05, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3C, 0x00, 0x18, 0x00, 0x84, 0x00, 0x18, 0x00, -/* 0000D590 */ 0x4B, 0x00, 0x0F, 0x00, 0x69, 0x00, 0x18, 0x00, 0x84, 0x00, 0x09, 0x00, 0x37, 0x00, 0x00, 0x3F, -/* 0000D5A0 */ 0x5D, 0x00, 0xC1, 0x03, 0x8D, 0x07, 0x00, 0xFE, 0xA9, 0x0C, 0x1B, 0xA0, 0x41, 0xC3, 0x00, 0xFE, -/* 0000D5B0 */ 0x0D, 0x04, 0xB4, 0xFF, 0x00, 0x00, 0x00, 0x02, 0xFF, 0xC0, 0x43, 0x02, 0x00, 0x01, 0xFF, 0x00, -/* 0000D5C0 */ 0x10, 0x01, 0x00, 0x01, 0x01, 0xFF, 0xC0, 0x43, 0x02, 0x00, 0xFE, 0x08, 0x04, 0xFE, 0x08, 0x04, -/* 0000D5D0 */ 0x02, 0xFE, 0x02, 0x04, 0xFE, 0xFA, 0x01, 0x06, 0x07, 0x0B, 0x05, 0x3E, 0x3E, 0x05, 0x07, 0x03, -/* 0000D5E0 */ 0x03, 0x03, 0x03, 0x08, 0x09, 0x0A, 0x06, 0xFE, 0xF6, 0x03, 0x05, 0xFE, 0x34, 0x04, 0x06, 0xFE, -/* 0000D5F0 */ 0x46, 0x03, 0x07, 0x08, 0xC8, 0x59, 0x0B, 0xB1, 0x07, 0x0B, 0x2C, 0x0B, 0x07, 0x15, 0x03, 0x00, -/* 0000D600 */ 0x0B, 0x02, 0x09, 0x18, 0x00, 0x8C, 0x05, 0x03, 0x0C, 0x6A, 0x0B, 0x0C, 0x00, 0x07, 0x03, 0x00, -/* 0000D610 */ 0x5A, 0x00, 0x0C, 0x5A, 0x01, 0x03, 0x5A, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x0B, 0x8C, 0x05, 0x03, -/* 0000D620 */ 0x0C, 0x6A, 0x0B, 0x0C, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5A, 0x01, 0x07, 0x1F, 0x02, -/* 0000D630 */ 0x0B, 0x0B, 0x94, 0x02, 0x0B, 0x90, 0x02, 0x0B, 0xA6, 0x0C, 0x14, 0x0B, 0x00, 0x0B, 0x0C, 0x90, -/* 0000D640 */ 0x02, 0x0B, 0x5F, 0x0B, 0x0B, 0x02, 0x0F, 0x18, 0x00, 0x0B, 0x8C, 0x05, 0x03, 0x0C, 0x6A, 0x0B, -/* 0000D650 */ 0x0C, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x5A, 0x01, 0x03, 0x5A, 0x02, 0x04, 0x1F, 0x03, -/* 0000D660 */ 0xFF, 0x0B, 0x8C, 0x05, 0x04, 0x0B, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x06, 0xCA, 0x0C, 0x5A, 0x01, -/* 0000D670 */ 0x0C, 0x5A, 0x02, 0x05, 0x1F, 0x03, 0x0B, 0x0B, 0x94, 0x03, 0x0B, 0x8C, 0x05, 0x06, 0x0B, 0x07, -/* 0000D680 */ 0x04, 0x00, 0x5A, 0x00, 0x06, 0x8C, 0x05, 0x16, 0x0C, 0x5A, 0x01, 0x0C, 0x8C, 0x03, 0x02, 0x0C, -/* 0000D690 */ 0x5A, 0x02, 0x0C, 0xD3, 0x00, 0x0C, 0x5A, 0x03, 0x0C, 0x1F, 0x04, 0xFF, 0x0B, 0x8C, 0x05, 0x04, -/* 0000D6A0 */ 0x0B, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x06, 0x90, 0x03, 0x0C, 0x5A, 0x01, 0x0C, 0xCA, 0x0C, 0x5A, -/* 0000D6B0 */ 0x02, 0x0C, 0x1F, 0x03, 0x00, 0x0B, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x8A, 0x02, -/* 0000D6C0 */ 0xFE, 0xEF, 0x01, 0xFE, 0x06, 0x02, 0xFF, 0xF5, 0x43, 0x02, 0x00, 0x09, 0x05, 0x00, 0x00, 0x00, -/* 0000D6D0 */ 0x0B, 0x00, 0x3C, 0x00, 0x18, 0x00, 0x8C, 0x00, 0x18, 0x00, 0x4B, 0x00, 0x15, 0x00, 0x69, 0x00, -/* 0000D6E0 */ 0x18, 0x00, 0x8D, 0x00, 0x19, 0x00, 0x47, 0x00, 0x22, 0x00, 0x44, 0x01, 0x1E, 0x00, 0x3E, 0x00, -/* 0000D6F0 */ 0x00, 0xF5, 0xD6, 0x00, 0x00, 0xBF, 0x4C, 0x00, 0x01, 0x00, 0x88, 0x01, 0x00, 0xFE, 0xB4, 0x0C, -/* 0000D700 */ 0x48, 0xA2, 0x41, 0xD1, 0x00, 0xB5, 0xFF, 0x75, 0x46, 0x02, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, -/* 0000D710 */ 0x02, 0x02, 0xFF, 0x75, 0x46, 0x02, 0x00, 0xF8, 0xF8, 0x41, 0x05, 0x04, 0x06, 0x0D, 0x0D, 0x06, -/* 0000D720 */ 0x02, 0x05, 0x05, 0xFE, 0xD4, 0x04, 0x06, 0xFE, 0xF5, 0x03, 0x2C, 0x8C, 0x01, 0x02, 0x06, 0x2F, -/* 0000D730 */ 0x07, 0x02, 0x04, 0x2D, 0x06, 0x06, 0x07, 0x15, 0x03, 0x00, 0x06, 0x03, 0x09, 0x14, 0x00, 0x8C, -/* 0000D740 */ 0x01, 0x03, 0x06, 0x8C, 0x01, 0x02, 0x07, 0x2F, 0x08, 0x02, 0x04, 0x95, 0x07, 0x07, 0x08, 0x9A, -/* 0000D750 */ 0x07, 0x06, 0x04, 0xA6, 0x00, 0x24, 0x00, 0xFF, 0xA5, 0x46, 0x02, 0x00, 0x03, 0x00, 0x00, 0x00, -/* 0000D760 */ 0x00, 0x14, 0x00, 0x5A, 0x00, 0x16, 0x00, 0x6D, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, -/* 0000D770 */ 0x01, 0x00, 0xFE, 0x8E, 0x0C, 0x10, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x26, 0x04, 0xB3, 0xFF, 0x4B, -/* 0000D780 */ 0x3D, 0x02, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0x4B, 0x3D, 0x02, 0x00, 0xFE, -/* 0000D790 */ 0x7C, 0x02, 0xFE, 0x7C, 0x02, 0x01, 0x07, 0x06, 0x0A, 0x07, 0x35, 0x33, 0x05, 0x03, 0x05, 0x05, -/* 0000D7A0 */ 0x05, 0x05, 0x09, 0x06, 0xFE, 0xF6, 0x03, 0x05, 0xFE, 0x32, 0x04, 0x06, 0xFE, 0x46, 0x03, 0x08, -/* 0000D7B0 */ 0xAF, 0x59, 0x0A, 0xB1, 0x07, 0x0A, 0x8C, 0x05, 0x24, 0x0B, 0x6A, 0x0A, 0x0B, 0x00, 0x07, 0x02, -/* 0000D7C0 */ 0x00, 0x5A, 0x00, 0x0B, 0x5A, 0x01, 0x06, 0x1F, 0x02, 0x0A, 0x0A, 0x47, 0x06, 0x0A, 0x2C, 0x0A, -/* 0000D7D0 */ 0x07, 0x15, 0x03, 0x00, 0x0A, 0x02, 0x09, 0x18, 0x00, 0x8C, 0x05, 0x03, 0x0B, 0x6A, 0x0A, 0x0B, -/* 0000D7E0 */ 0x01, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0B, 0x5A, 0x01, 0x03, 0x5A, 0x02, 0x04, 0x1F, 0x03, 0xFF, -/* 0000D7F0 */ 0x0A, 0x8C, 0x05, 0x03, 0x0B, 0x6A, 0x0A, 0x0B, 0x02, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0B, 0x5A, -/* 0000D800 */ 0x01, 0x07, 0x1F, 0x02, 0x0A, 0x0A, 0x47, 0x08, 0x0A, 0xA6, 0x0A, 0x14, 0x08, 0x00, 0x08, 0x0A, -/* 0000D810 */ 0x5F, 0x0A, 0x08, 0x03, 0x0F, 0x18, 0x00, 0x0A, 0x8C, 0x05, 0x03, 0x0B, 0x6A, 0x0A, 0x0B, 0x01, -/* 0000D820 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0B, 0x5A, 0x01, 0x03, 0x5A, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x0A, -/* 0000D830 */ 0x8C, 0x05, 0x0B, 0x0A, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x05, 0x8C, 0x05, 0x03, 0x0C, 0x6A, 0x0B, -/* 0000D840 */ 0x0C, 0x04, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x5A, 0x01, 0x06, 0x5A, 0x02, 0x08, 0x1F, 0x03, -/* 0000D850 */ 0x0B, 0x0B, 0x5A, 0x01, 0x0B, 0x1F, 0x02, 0x00, 0x0A, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, -/* 0000D860 */ 0xFE, 0x38, 0x03, 0xFE, 0x8A, 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0x06, 0x02, 0xFE, 0xE2, 0x01, 0xFF, -/* 0000D870 */ 0x74, 0x3D, 0x02, 0x00, 0x08, 0x05, 0x00, 0x00, 0x00, 0x18, 0x00, 0x2F, 0x00, 0x0B, 0x00, 0x38, -/* 0000D880 */ 0x00, 0x18, 0x00, 0x7C, 0x00, 0x18, 0x00, 0x47, 0x00, 0x0F, 0x00, 0x65, 0x00, 0x18, 0x00, 0x7C, -/* 0000D890 */ 0x00, 0x2E, 0x00, 0x47, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x72, -/* 0000D8A0 */ 0x0C, 0x10, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x46, 0x03, 0xB2, 0xFF, 0xD5, 0x38, 0x02, 0x00, 0xFF, -/* 0000D8B0 */ 0x00, 0x10, 0x01, 0x00, 0x03, 0x01, 0xFF, 0xD5, 0x38, 0x02, 0x00, 0xFE, 0x1E, 0x04, 0xFE, 0x1E, -/* 0000D8C0 */ 0x04, 0x01, 0x09, 0x05, 0x0B, 0x05, 0x60, 0x59, 0x05, 0x09, 0x07, 0x06, 0x07, 0x07, 0x0A, 0x08, -/* 0000D8D0 */ 0x06, 0xFE, 0x46, 0x03, 0x07, 0xFE, 0x37, 0x01, 0x59, 0x0B, 0xB1, 0x07, 0x0B, 0x4F, 0x08, 0x4F, -/* 0000D8E0 */ 0x09, 0x15, 0x05, 0x00, 0x05, 0x02, 0xA6, 0x0B, 0x47, 0x05, 0x0B, 0x15, 0x05, 0x00, 0x06, 0x02, -/* 0000D8F0 */ 0xA6, 0x0B, 0x47, 0x06, 0x0B, 0x4F, 0x08, 0x4F, 0x09, 0x68, 0x06, 0x00, 0x00, 0x00, 0x0B, 0x14, -/* 0000D900 */ 0x0A, 0x00, 0x07, 0x0B, 0xA6, 0x0B, 0x14, 0x03, 0x00, 0x07, 0x0B, 0x09, 0x16, 0x00, 0x8C, 0x01, -/* 0000D910 */ 0x02, 0x0B, 0x4B, 0x0B, 0x07, 0x03, 0x00, 0x5A, 0x01, 0x05, 0x5A, 0x02, 0x06, 0xC1, 0x03, 0x00, -/* 0000D920 */ 0x0B, 0x09, 0xE9, 0x00, 0x8C, 0x05, 0x24, 0x0C, 0x6A, 0x0B, 0x0C, 0x00, 0x07, 0x02, 0x00, 0x5A, -/* 0000D930 */ 0x00, 0x0C, 0x5A, 0x01, 0x07, 0x1F, 0x02, 0x0B, 0x0B, 0x47, 0x08, 0x0B, 0x8C, 0x05, 0x11, 0x0B, -/* 0000D940 */ 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x08, 0x1F, 0x02, 0x0B, 0x0B, 0x0F, 0x15, 0x00, -/* 0000D950 */ 0x0B, 0x8C, 0x05, 0x03, 0x0C, 0x6A, 0x0B, 0x0C, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5A, -/* 0000D960 */ 0x01, 0x03, 0x1F, 0x02, 0xFF, 0x0B, 0x8C, 0x05, 0x03, 0x0C, 0x6A, 0x0B, 0x0C, 0x02, 0x07, 0x02, -/* 0000D970 */ 0x00, 0x5A, 0x00, 0x0C, 0x5A, 0x01, 0x08, 0x1F, 0x02, 0x0B, 0x0B, 0x47, 0x09, 0x0B, 0xA6, 0x0B, -/* 0000D980 */ 0x14, 0x03, 0x00, 0x09, 0x0B, 0x09, 0x31, 0x00, 0x8C, 0x05, 0x04, 0x0B, 0x07, 0x03, 0x00, 0x5A, -/* 0000D990 */ 0x00, 0x02, 0xCA, 0x0C, 0x5A, 0x01, 0x0C, 0x5A, 0x02, 0x04, 0x1F, 0x03, 0x0B, 0x0B, 0x47, 0x09, -/* 0000D9A0 */ 0x0B, 0x8C, 0x05, 0x03, 0x0C, 0x6A, 0x0B, 0x0C, 0x03, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x5A, -/* 0000D9B0 */ 0x01, 0x08, 0x5A, 0x02, 0x09, 0x1F, 0x03, 0xFF, 0x0B, 0x8C, 0x02, 0x02, 0x0B, 0x4B, 0x0B, 0x07, -/* 0000D9C0 */ 0x04, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x09, 0x5A, 0x02, 0x05, 0x5A, 0x03, 0x06, 0x1F, 0x04, -/* 0000D9D0 */ 0xFF, 0x0B, 0x47, 0x0B, 0x09, 0x8C, 0x05, 0x06, 0x0C, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8C, -/* 0000D9E0 */ 0x05, 0x1A, 0x0D, 0x5A, 0x01, 0x0D, 0x8C, 0x01, 0x03, 0x0D, 0x4B, 0x0D, 0x5A, 0x02, 0x0D, 0x5A, -/* 0000D9F0 */ 0x03, 0x08, 0x1F, 0x04, 0x0C, 0x0C, 0x74, 0x0C, 0x0B, 0x04, 0x5F, 0x0B, 0x09, 0x05, 0x80, 0x0B, -/* 0000DA00 */ 0x0B, 0xF8, 0x00, 0xFA, 0x0B, 0x47, 0x00, 0x08, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, -/* 0000DA10 */ 0x36, 0x03, 0xFE, 0x8E, 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0xF0, 0x01, 0xFE, 0x25, 0x02, 0xFE, 0x25, -/* 0000DA20 */ 0x02, 0xAB, 0xFF, 0xEB, 0x38, 0x02, 0x00, 0x10, 0x09, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, -/* 0000DA30 */ 0x0E, 0x00, 0x2B, 0x00, 0x15, 0x00, 0x43, 0x00, 0x16, 0x00, 0x56, 0x00, 0x18, 0x00, 0x38, 0x00, -/* 0000DA40 */ 0x15, 0x00, 0x38, 0x00, 0x15, 0x00, 0x9B, 0x00, 0x18, 0x00, 0x47, 0x00, 0x0A, 0x00, 0x3A, 0x00, -/* 0000DA50 */ 0x19, 0x00, 0x3F, 0x00, 0x18, 0x00, 0x58, 0x00, 0x19, 0x00, 0x4D, 0x00, 0x28, 0x00, 0x65, 0x00, -/* 0000DA60 */ 0x0B, 0x00, 0x3D, 0x00, 0x08, 0x00, 0x1C, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x07, 0x88, 0x01, -/* 0000DA70 */ 0x00, 0xFE, 0x65, 0x0C, 0x62, 0xA0, 0x41, 0xF1, 0x00, 0xB1, 0xFF, 0x8C, 0x36, 0x02, 0x00, 0xFF, -/* 0000DA80 */ 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFF, 0x8C, 0x36, 0x02, 0x00, 0xFE, 0xE1, 0x01, 0xFE, 0xE1, -/* 0000DA90 */ 0x01, 0x03, 0x08, 0x09, 0x0E, 0x07, 0x39, 0x37, 0x04, 0x06, 0x03, 0x03, 0x03, 0x03, 0x01, 0x0D, -/* 0000DAA0 */ 0x07, 0x06, 0xFE, 0xC3, 0x03, 0x05, 0xFE, 0x21, 0x04, 0x06, 0xFE, 0x20, 0x04, 0x08, 0x01, 0x00, -/* 0000DAB0 */ 0x01, 0x01, 0xB9, 0xAC, 0x0B, 0x59, 0x0E, 0xB1, 0x09, 0x0E, 0x2C, 0x0E, 0x09, 0x15, 0x03, 0x00, -/* 0000DAC0 */ 0x0E, 0x03, 0x09, 0x25, 0x00, 0x8C, 0x04, 0x0A, 0x0E, 0xE1, 0x0E, 0x09, 0x0E, 0x00, 0x0F, 0x18, -/* 0000DAD0 */ 0x00, 0x0E, 0x8C, 0x04, 0x03, 0x0F, 0x6A, 0x0E, 0x0F, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0F, -/* 0000DAE0 */ 0x5A, 0x01, 0x04, 0x5A, 0x02, 0x05, 0x1F, 0x03, 0xFF, 0x0E, 0x8C, 0x04, 0x04, 0x0E, 0x07, 0x03, -/* 0000DAF0 */ 0x00, 0x5A, 0x00, 0x06, 0xCA, 0x0F, 0x5A, 0x01, 0x0F, 0x5A, 0x02, 0x02, 0x1F, 0x03, 0x0E, 0x0E, -/* 0000DB00 */ 0x47, 0x0A, 0x0E, 0x8C, 0x01, 0x02, 0x0E, 0x4B, 0x0E, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x06, 0x5A, -/* 0000DB10 */ 0x01, 0x0A, 0x95, 0x0F, 0x0B, 0x07, 0x5A, 0x02, 0x0F, 0x95, 0x0F, 0x0B, 0x08, 0x5A, 0x03, 0x0F, -/* 0000DB20 */ 0x1F, 0x04, 0xFF, 0x0E, 0x8C, 0x04, 0x24, 0x0F, 0x6A, 0x0E, 0x0F, 0x01, 0x07, 0x02, 0x00, 0x5A, -/* 0000DB30 */ 0x00, 0x0F, 0x5A, 0x01, 0x09, 0x1F, 0x02, 0x0E, 0x0E, 0x47, 0x0C, 0x0E, 0x8C, 0x04, 0x0B, 0x0E, -/* 0000DB40 */ 0x07, 0x02, 0x00, 0x5A, 0x00, 0x06, 0x8C, 0x04, 0x03, 0x10, 0x6A, 0x0F, 0x10, 0x02, 0x07, 0x03, -/* 0000DB50 */ 0x00, 0x5A, 0x00, 0x10, 0x5A, 0x01, 0x0C, 0x5A, 0x02, 0x0A, 0x1F, 0x03, 0x0F, 0x0F, 0x5A, 0x01, -/* 0000DB60 */ 0x0F, 0x1F, 0x02, 0x00, 0x0E, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x8A, 0x02, 0xFE, -/* 0000DB70 */ 0x38, 0x03, 0xFE, 0xE2, 0x01, 0xFF, 0xAA, 0x36, 0x02, 0x00, 0x07, 0x07, 0x00, 0x00, 0x00, 0x18, -/* 0000DB80 */ 0x00, 0x53, 0x00, 0x18, 0x00, 0x70, 0x00, 0x19, 0x00, 0x3A, 0x00, 0x21, 0x00, 0x52, 0x00, 0x18, -/* 0000DB90 */ 0x00, 0x31, 0x00, 0x2E, 0x00, 0x42, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x43, 0xA8, 0x01, 0x00, -/* 0000DBA0 */ 0xFE, 0xDF, 0x0B, 0x0C, 0xB3, 0x41, 0xC1, 0x00, 0xFE, 0x1F, 0x04, 0xB0, 0xFF, 0x6C, 0x1A, 0x02, -/* 0000DBB0 */ 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFF, 0x6C, 0x1A, 0x02, 0x00, 0xFE, 0xBC, 0x1B, -/* 0000DBC0 */ 0xFE, 0xBC, 0x1B, 0x45, 0x18, 0x23, 0x37, 0x07, 0xFE, 0xA3, 0x01, 0xFE, 0x83, 0x01, 0x04, 0x12, -/* 0000DBD0 */ 0x26, 0x26, 0x26, 0x26, 0x01, 0x36, 0x37, 0x06, 0xFE, 0xF6, 0x03, 0x06, 0xFE, 0xC8, 0x04, 0x08, -/* 0000DBE0 */ 0x06, 0xFE, 0x46, 0x03, 0x0B, 0x06, 0xFE, 0xF5, 0x03, 0x07, 0x06, 0xFE, 0x00, 0x04, 0x06, 0xFE, -/* 0000DBF0 */ 0xAD, 0x03, 0x05, 0xFE, 0xBC, 0x03, 0x05, 0xFE, 0xFF, 0x03, 0x06, 0xFE, 0x28, 0x04, 0x05, 0xFE, -/* 0000DC00 */ 0x29, 0x04, 0x05, 0xFE, 0x2A, 0x04, 0x06, 0xFE, 0x2B, 0x04, 0x06, 0xFE, 0x2C, 0x04, 0x05, 0xFE, -/* 0000DC10 */ 0x2D, 0x04, 0x06, 0xFE, 0x2E, 0x04, 0x06, 0xFE, 0x3F, 0x03, 0x06, 0xFE, 0xFA, 0x03, 0x01, 0x01, -/* 0000DC20 */ 0x01, 0x15, 0x06, 0xFE, 0xFD, 0x03, 0x06, 0xFE, 0xFE, 0x03, 0x06, 0xFE, 0x2F, 0x04, 0x06, 0xFE, -/* 0000DC30 */ 0xC2, 0x03, 0x06, 0xFE, 0xB4, 0x03, 0x06, 0xFE, 0xFB, 0x03, 0x01, 0x00, 0x01, 0x14, 0x01, 0x03, -/* 0000DC40 */ 0x06, 0xFE, 0xFC, 0x03, 0x05, 0xFE, 0xD2, 0x04, 0xFE, 0x5E, 0x05, 0x2C, 0x38, 0x23, 0x0D, 0x03, -/* 0000DC50 */ 0x00, 0x38, 0x02, 0x09, 0x12, 0x00, 0x8C, 0x04, 0x03, 0x39, 0x6A, 0x38, 0x39, 0x00, 0x07, 0x01, -/* 0000DC60 */ 0x00, 0x5A, 0x00, 0x39, 0x1F, 0x01, 0xFF, 0x38, 0x8C, 0x04, 0x06, 0x38, 0x07, 0x04, 0x00, 0x5A, -/* 0000DC70 */ 0x00, 0x04, 0x8C, 0x04, 0x13, 0x39, 0x5A, 0x01, 0x39, 0x5A, 0x02, 0x23, 0x5A, 0x03, 0x03, 0x1F, -/* 0000DC80 */ 0x04, 0x38, 0x38, 0x0E, 0x20, 0x00, 0x38, 0x5F, 0x38, 0x23, 0x01, 0x0E, 0x18, 0x00, 0x38, 0x8C, -/* 0000DC90 */ 0x04, 0x03, 0x39, 0x6A, 0x38, 0x39, 0x02, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x39, 0x5A, 0x01, 0x05, -/* 0000DCA0 */ 0x5A, 0x02, 0x05, 0x1F, 0x03, 0xFF, 0x38, 0x74, 0x06, 0x23, 0x03, 0x2C, 0x38, 0x25, 0x14, 0x03, -/* 0000DCB0 */ 0x00, 0x38, 0x07, 0x09, 0x1C, 0x00, 0x8C, 0x04, 0x04, 0x38, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x04, -/* 0000DCC0 */ 0xCA, 0x39, 0x5A, 0x01, 0x39, 0x5A, 0x02, 0x08, 0x1F, 0x03, 0x38, 0x38, 0x47, 0x25, 0x38, 0x09, -/* 0000DCD0 */ 0x18, 0x00, 0x8C, 0x04, 0x24, 0x39, 0x6A, 0x38, 0x39, 0x04, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x39, -/* 0000DCE0 */ 0x5A, 0x01, 0x25, 0x1F, 0x02, 0x38, 0x38, 0x47, 0x25, 0x38, 0x8C, 0x03, 0x02, 0x38, 0x4B, 0x38, -/* 0000DCF0 */ 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x25, 0x5A, 0x02, 0x09, 0x5A, 0x03, 0x0A, 0xCC, -/* 0000DD00 */ 0x39, 0x02, 0x9F, 0x00, 0x0B, 0x39, 0x9F, 0x01, 0x0C, 0x39, 0x5A, 0x04, 0x39, 0x5A, 0x05, 0x0C, -/* 0000DD10 */ 0x1F, 0x06, 0x38, 0x38, 0x47, 0x28, 0x38, 0x8C, 0x03, 0x02, 0x38, 0x4B, 0x38, 0x07, 0x06, 0x00, -/* 0000DD20 */ 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x25, 0x5A, 0x02, 0x0D, 0x5A, 0x03, 0x0A, 0xCC, 0x39, 0x03, 0x9F, -/* 0000DD30 */ 0x00, 0x0E, 0x39, 0x9F, 0x01, 0x0F, 0x39, 0x9F, 0x02, 0x10, 0x39, 0x5A, 0x04, 0x39, 0x5A, 0x05, -/* 0000DD40 */ 0x0E, 0x1F, 0x06, 0x38, 0x38, 0x47, 0x29, 0x38, 0x8C, 0x04, 0x3B, 0x38, 0x4B, 0x38, 0x5F, 0x38, -/* 0000DD50 */ 0x38, 0x05, 0x47, 0x2A, 0x38, 0x14, 0x03, 0x00, 0x29, 0x0F, 0x09, 0x10, 0x00, 0x8C, 0x04, 0x3B, -/* 0000DD60 */ 0x38, 0x4B, 0x38, 0x5F, 0x38, 0x38, 0x06, 0x47, 0x2A, 0x38, 0x09, 0x15, 0x00, 0x14, 0x03, 0x00, -/* 0000DD70 */ 0x29, 0x10, 0x09, 0x0D, 0x00, 0x8C, 0x04, 0x3B, 0x38, 0x4B, 0x38, 0x5F, 0x38, 0x38, 0x07, 0x47, -/* 0000DD80 */ 0x2A, 0x38, 0x8C, 0x03, 0x02, 0x38, 0x4B, 0x38, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, -/* 0000DD90 */ 0x25, 0x5A, 0x02, 0x10, 0x5A, 0x03, 0x0A, 0xA6, 0x39, 0x5A, 0x04, 0x39, 0xA6, 0x39, 0x5A, 0x05, -/* 0000DDA0 */ 0x39, 0x1F, 0x06, 0x38, 0x38, 0x47, 0x2B, 0x38, 0x8C, 0x03, 0x02, 0x38, 0x4B, 0x38, 0x07, 0x06, -/* 0000DDB0 */ 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x25, 0x5A, 0x02, 0x11, 0x5A, 0x03, 0x0A, 0xCC, 0x39, 0x03, -/* 0000DDC0 */ 0x9F, 0x00, 0x12, 0x39, 0x9F, 0x01, 0x13, 0x39, 0x9F, 0x02, 0x14, 0x39, 0x5A, 0x04, 0x39, 0x5A, -/* 0000DDD0 */ 0x05, 0x13, 0x1F, 0x06, 0x38, 0x38, 0x47, 0x2C, 0x38, 0xA6, 0x38, 0x47, 0x2D, 0x38, 0x8C, 0x03, -/* 0000DDE0 */ 0x03, 0x38, 0x4B, 0x38, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x25, 0x5A, 0x02, 0x15, -/* 0000DDF0 */ 0x5A, 0x03, 0x16, 0x5A, 0x04, 0x17, 0x5A, 0x05, 0x16, 0x1F, 0x06, 0x38, 0x38, 0x47, 0x2E, 0x38, -/* 0000DE00 */ 0xA6, 0x38, 0x47, 0x2F, 0x38, 0xA6, 0x38, 0x47, 0x30, 0x38, 0xA6, 0x38, 0x47, 0x31, 0x38, 0x5F, -/* 0000DE10 */ 0x38, 0x25, 0x08, 0x47, 0x32, 0x38, 0x5F, 0x38, 0x25, 0x09, 0x47, 0x33, 0x38, 0x2C, 0x38, 0x32, -/* 0000DE20 */ 0x15, 0x0B, 0x00, 0x38, 0x07, 0x2C, 0x38, 0x33, 0x15, 0x03, 0x00, 0x38, 0x07, 0x09, 0x44, 0x00, -/* 0000DE30 */ 0x8C, 0x03, 0x03, 0x38, 0x4B, 0x38, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x25, 0x5A, -/* 0000DE40 */ 0x02, 0x18, 0x5A, 0x03, 0x16, 0x5A, 0x04, 0x17, 0x5A, 0x05, 0x16, 0x1F, 0x06, 0x38, 0x38, 0x47, -/* 0000DE50 */ 0x32, 0x38, 0x8C, 0x03, 0x03, 0x38, 0x4B, 0x38, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, -/* 0000DE60 */ 0x25, 0x5A, 0x02, 0x19, 0x5A, 0x03, 0x32, 0x5A, 0x04, 0x17, 0x5A, 0x05, 0x17, 0x1F, 0x06, 0x38, -/* 0000DE70 */ 0x38, 0x47, 0x33, 0x38, 0x8C, 0x03, 0x02, 0x38, 0x4B, 0x38, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, -/* 0000DE80 */ 0x5A, 0x01, 0x25, 0x5A, 0x02, 0x1A, 0x5A, 0x03, 0x1B, 0xA6, 0x39, 0x5A, 0x04, 0x39, 0x5A, 0x05, -/* 0000DE90 */ 0x06, 0x1F, 0x06, 0x38, 0x38, 0x47, 0x34, 0x38, 0x8C, 0x03, 0x07, 0x38, 0x4B, 0x38, 0x07, 0x02, -/* 0000DEA0 */ 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x24, 0x1F, 0x02, 0x38, 0x38, 0x47, 0x24, 0x38, 0x8C, 0x04, -/* 0000DEB0 */ 0x2A, 0x38, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x24, 0x5A, 0x02, 0x28, 0xCC, 0x39, -/* 0000DEC0 */ 0x01, 0x9F, 0x00, 0x1C, 0x39, 0x5A, 0x03, 0x39, 0x8C, 0x04, 0x2B, 0x39, 0x5A, 0x04, 0x39, 0x1F, -/* 0000DED0 */ 0x05, 0x38, 0x38, 0x47, 0x35, 0x38, 0x2C, 0x38, 0x2B, 0x15, 0x03, 0x00, 0x38, 0x07, 0x09, 0x3D, -/* 0000DEE0 */ 0x00, 0x8C, 0x03, 0x06, 0x38, 0x4B, 0x38, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x2B, -/* 0000DEF0 */ 0x1F, 0x02, 0x38, 0x38, 0x0F, 0x26, 0x00, 0x38, 0x8C, 0x04, 0x03, 0x39, 0x6A, 0x38, 0x39, 0x0A, -/* 0000DF00 */ 0x07, 0x02, 0x00, 0x5A, 0x00, 0x39, 0x8C, 0x04, 0x0B, 0x3A, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, -/* 0000DF10 */ 0x5A, 0x01, 0x2B, 0x1F, 0x02, 0x3A, 0x3A, 0x5A, 0x01, 0x3A, 0x1F, 0x02, 0xFF, 0x38, 0x14, 0x03, -/* 0000DF20 */ 0x00, 0x29, 0x10, 0x09, 0xD2, 0x00, 0x2C, 0x38, 0x2B, 0x14, 0x03, 0x00, 0x38, 0x07, 0x09, 0x12, -/* 0000DF30 */ 0x00, 0x8C, 0x04, 0x03, 0x39, 0x6A, 0x38, 0x39, 0x0B, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x39, 0x1F, -/* 0000DF40 */ 0x01, 0xFF, 0x38, 0x8C, 0x04, 0x06, 0x38, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x04, 0x8C, 0x04, 0x1F, -/* 0000DF50 */ 0x39, 0x5A, 0x01, 0x39, 0x5A, 0x02, 0x2B, 0x1F, 0x03, 0x38, 0x38, 0x47, 0x2B, 0x38, 0xE5, 0x1C, -/* 0000DF60 */ 0x00, 0x8C, 0x04, 0x03, 0x39, 0x6A, 0x38, 0x39, 0x0C, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x39, 0x5A, -/* 0000DF70 */ 0x01, 0x2B, 0x1F, 0x02, 0x38, 0x38, 0x47, 0x2D, 0x38, 0xE9, 0x09, 0x3B, 0x00, 0xE7, 0x26, 0x06, -/* 0000DF80 */ 0x8C, 0x04, 0x22, 0x38, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x26, 0x1F, 0x02, 0xFF, -/* 0000DF90 */ 0x38, 0x8C, 0x04, 0x03, 0x39, 0x6A, 0x38, 0x39, 0x0A, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x39, 0x8C, -/* 0000DFA0 */ 0x04, 0x0B, 0x3A, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x2B, 0x1F, 0x02, 0x3A, 0x3A, -/* 0000DFB0 */ 0x5A, 0x01, 0x3A, 0x1F, 0x02, 0xFF, 0x38, 0xE9, 0x8C, 0x03, 0x03, 0x38, 0x4B, 0x38, 0x07, 0x06, -/* 0000DFC0 */ 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x25, 0x5A, 0x02, 0x1D, 0x5A, 0x03, 0x1E, 0x5A, 0x04, 0x1F, -/* 0000DFD0 */ 0x5A, 0x05, 0x2D, 0x1F, 0x06, 0x38, 0x38, 0x47, 0x2F, 0x38, 0x8C, 0x04, 0x0F, 0x39, 0x6A, 0x38, -/* 0000DFE0 */ 0x39, 0x0D, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x39, 0x5A, 0x01, 0x2D, 0x5A, 0x02, 0x2F, 0x1F, 0x03, -/* 0000DFF0 */ 0x38, 0x38, 0x47, 0x31, 0x38, 0x09, 0x6D, 0x00, 0xA6, 0x38, 0x47, 0x2B, 0x38, 0xA6, 0x38, 0x47, -/* 0000E000 */ 0x2C, 0x38, 0x8C, 0x03, 0x03, 0x38, 0x4B, 0x38, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, -/* 0000E010 */ 0x25, 0x5A, 0x02, 0x1D, 0x5A, 0x03, 0x1E, 0x5A, 0x04, 0x1F, 0x5A, 0x05, 0x1E, 0x1F, 0x06, 0x38, -/* 0000E020 */ 0x38, 0x47, 0x2F, 0x38, 0x14, 0x03, 0x00, 0x29, 0x0F, 0x09, 0x1E, 0x00, 0x8C, 0x04, 0x0F, 0x39, -/* 0000E030 */ 0x6A, 0x38, 0x39, 0x0D, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x39, 0x5A, 0x01, 0x2F, 0x5A, 0x02, 0x1E, -/* 0000E040 */ 0x1F, 0x03, 0x38, 0x38, 0x47, 0x31, 0x38, 0x09, 0x1B, 0x00, 0x8C, 0x04, 0x0F, 0x39, 0x6A, 0x38, -/* 0000E050 */ 0x39, 0x0D, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x39, 0x5A, 0x01, 0x2F, 0x5A, 0x02, 0x20, 0x1F, 0x03, -/* 0000E060 */ 0x38, 0x38, 0x47, 0x31, 0x38, 0x8C, 0x03, 0x03, 0x38, 0x4B, 0x38, 0x07, 0x06, 0x00, 0x5A, 0x00, -/* 0000E070 */ 0x04, 0x5A, 0x01, 0x25, 0x5A, 0x02, 0x21, 0x5A, 0x03, 0x2F, 0x5A, 0x04, 0x1F, 0x5A, 0x05, 0x31, -/* 0000E080 */ 0x1F, 0x06, 0x38, 0x38, 0x47, 0x30, 0x38, 0x74, 0x28, 0x23, 0x0E, 0x5F, 0x38, 0x35, 0x0F, 0x74, -/* 0000E090 */ 0x38, 0x23, 0x10, 0x74, 0x29, 0x23, 0x11, 0xA6, 0x38, 0x15, 0x03, 0x00, 0x2B, 0x38, 0x09, 0x04, -/* 0000E0A0 */ 0x00, 0x74, 0x2B, 0x23, 0x12, 0xA6, 0x38, 0x15, 0x03, 0x00, 0x2C, 0x38, 0x09, 0x5A, 0x00, 0x74, -/* 0000E0B0 */ 0x2C, 0x23, 0x13, 0x8C, 0x04, 0x3C, 0x38, 0x4B, 0x38, 0x5F, 0x38, 0x38, 0x14, 0x74, 0x38, 0x23, -/* 0000E0C0 */ 0x15, 0x14, 0x03, 0x00, 0x2C, 0x13, 0x09, 0x11, 0x00, 0x8C, 0x04, 0x3C, 0x38, 0x4B, 0x38, 0x5F, -/* 0000E0D0 */ 0x38, 0x38, 0x16, 0x74, 0x38, 0x23, 0x15, 0x09, 0x2F, 0x00, 0x14, 0x03, 0x00, 0x2C, 0x12, 0x09, -/* 0000E0E0 */ 0x11, 0x00, 0x8C, 0x04, 0x3C, 0x38, 0x4B, 0x38, 0x5F, 0x38, 0x38, 0x17, 0x74, 0x38, 0x23, 0x15, -/* 0000E0F0 */ 0x09, 0x16, 0x00, 0x14, 0x03, 0x00, 0x2C, 0x14, 0x09, 0x0E, 0x00, 0x8C, 0x04, 0x3C, 0x38, 0x4B, -/* 0000E100 */ 0x38, 0x5F, 0x38, 0x38, 0x18, 0x74, 0x38, 0x23, 0x15, 0x74, 0x2E, 0x23, 0x19, 0x74, 0x2F, 0x23, -/* 0000E110 */ 0x1A, 0x74, 0x30, 0x23, 0x1B, 0xA6, 0x38, 0x15, 0x03, 0x00, 0x33, 0x38, 0x09, 0x08, 0x00, 0x74, -/* 0000E120 */ 0x32, 0x23, 0x1C, 0x74, 0x33, 0x23, 0x1D, 0x74, 0x2A, 0x23, 0x1E, 0x74, 0x34, 0x23, 0x1F, 0xE5, -/* 0000E130 */ 0x19, 0x00, 0x8C, 0x04, 0x03, 0x39, 0x6A, 0x38, 0x39, 0x20, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x39, -/* 0000E140 */ 0x5A, 0x01, 0x23, 0x1F, 0x02, 0xFF, 0x38, 0xE9, 0x09, 0x27, 0x00, 0xE7, 0x27, 0x06, 0x8C, 0x04, -/* 0000E150 */ 0x22, 0x38, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x27, 0x1F, 0x02, 0xFF, 0x38, 0x8C, -/* 0000E160 */ 0x04, 0x03, 0x39, 0x6A, 0x38, 0x39, 0x21, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x39, 0x1F, 0x01, 0xFF, -/* 0000E170 */ 0x38, 0xE9, 0x5F, 0x38, 0x23, 0x22, 0x0F, 0x04, 0x00, 0x38, 0x74, 0x22, 0x23, 0x23, 0x47, 0x38, -/* 0000E180 */ 0x23, 0x8C, 0x04, 0x06, 0x39, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x04, 0x8C, 0x04, 0x1E, 0x3A, 0x5A, -/* 0000E190 */ 0x01, 0x3A, 0x5F, 0x3A, 0x23, 0x22, 0x5A, 0x02, 0x3A, 0x1F, 0x03, 0x39, 0x39, 0x74, 0x39, 0x38, -/* 0000E1A0 */ 0x24, 0x74, 0x06, 0x23, 0x25, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x89, 0x02, 0xFE, 0xF2, 0x01, 0xFE, -/* 0000E1B0 */ 0x8D, 0x02, 0xFE, 0xF2, 0x01, 0xFE, 0x36, 0x03, 0xFE, 0x30, 0x03, 0xFE, 0x31, 0x03, 0xFE, 0x32, -/* 0000E1C0 */ 0x03, 0xFE, 0x17, 0x02, 0xFE, 0x14, 0x02, 0xFE, 0x85, 0x02, 0xFE, 0x88, 0x02, 0xFE, 0xE5, 0x01, -/* 0000E1D0 */ 0xEE, 0xFE, 0xD3, 0x04, 0xFE, 0xF7, 0x01, 0xFE, 0xF3, 0x01, 0xFE, 0x32, 0x02, 0xFE, 0x02, 0x02, -/* 0000E1E0 */ 0xFE, 0x03, 0x02, 0xFE, 0x2C, 0x03, 0xFE, 0x04, 0x02, 0xFE, 0x33, 0x03, 0xFE, 0x34, 0x03, 0xFE, -/* 0000E1F0 */ 0x35, 0x03, 0xFE, 0x0A, 0x02, 0xFE, 0x09, 0x02, 0xFE, 0x07, 0x02, 0xFE, 0x0B, 0x02, 0xFE, 0x08, -/* 0000E200 */ 0x02, 0xFE, 0x05, 0x02, 0xFE, 0x0E, 0x02, 0xFE, 0xE3, 0x01, 0xFE, 0x90, 0x02, 0xFE, 0x0C, 0x02, -/* 0000E210 */ 0xFE, 0x0C, 0x02, 0xFE, 0x0C, 0x02, 0xFE, 0x06, 0x02, 0xFF, 0xC1, 0x1A, 0x02, 0x00, 0x50, 0x00, -/* 0000E220 */ 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3B, 0x00, 0x12, 0x00, 0x3F, 0x00, 0x27, 0x00, 0x9B, 0x00, 0x18, -/* 0000E230 */ 0x00, 0x6D, 0x00, 0x04, 0x00, 0x61, 0x00, 0x0B, 0x00, 0x3A, 0x00, 0x1C, 0x00, 0x4F, 0x00, 0x18, -/* 0000E240 */ 0x00, 0x49, 0x00, 0x2D, 0x00, 0x71, 0x00, 0x31, 0x00, 0x73, 0x00, 0x0D, 0x00, 0x4B, 0x00, 0x08, -/* 0000E250 */ 0x00, 0x2F, 0x00, 0x10, 0x00, 0x43, 0x00, 0x08, 0x00, 0x30, 0x00, 0x0D, 0x00, 0x50, 0x00, 0x26, -/* 0000E260 */ 0x00, 0x5F, 0x00, 0x31, 0x00, 0x7D, 0x00, 0x05, 0x00, 0x31, 0x00, 0x22, 0x00, 0x67, 0x00, 0x05, -/* 0000E270 */ 0x00, 0x37, 0x00, 0x05, 0x00, 0x37, 0x00, 0x05, 0x00, 0x3F, 0x00, 0x07, 0x00, 0x51, 0x00, 0x07, -/* 0000E280 */ 0x00, 0x52, 0x00, 0x13, 0x00, 0x7E, 0x00, 0x22, 0x00, 0x6F, 0x00, 0x22, 0x00, 0x96, 0x00, 0x24, -/* 0000E290 */ 0x00, 0x9A, 0x00, 0x16, 0x00, 0x41, 0x00, 0x28, 0x00, 0xA2, 0x00, 0x22, 0x00, 0x62, 0x00, 0x26, -/* 0000E2A0 */ 0x00, 0x58, 0x00, 0x08, 0x00, 0x30, 0x00, 0x0B, 0x00, 0x3F, 0x00, 0x12, 0x00, 0x4F, 0x00, 0x1E, -/* 0000E2B0 */ 0x00, 0x74, 0x00, 0x1E, 0x00, 0x4A, 0x00, 0x01, 0x00, 0x24, 0x00, 0x11, 0x00, 0x2E, 0x00, 0x27, -/* 0000E2C0 */ 0x00, 0x5F, 0x00, 0x22, 0x00, 0x76, 0x00, 0x1E, 0x00, 0x7D, 0x00, 0x05, 0x00, 0x2A, 0x00, 0x05, -/* 0000E2D0 */ 0x00, 0x31, 0x00, 0x22, 0x00, 0x69, 0x00, 0x08, 0x00, 0x33, 0x00, 0x1E, 0x00, 0x78, 0x00, 0x1B, -/* 0000E2E0 */ 0x00, 0x7B, 0x00, 0x22, 0x00, 0xC6, 0x00, 0x04, 0x00, 0x38, 0x00, 0x08, 0x00, 0x43, 0x00, 0x04, -/* 0000E2F0 */ 0x00, 0x2F, 0x00, 0x0A, 0x00, 0x32, 0x00, 0x04, 0x00, 0x47, 0x00, 0x0A, 0x00, 0x39, 0x00, 0x04, -/* 0000E300 */ 0x00, 0x46, 0x00, 0x0E, 0x00, 0x5F, 0x00, 0x08, 0x00, 0x3C, 0x00, 0x11, 0x00, 0x65, 0x00, 0x08, -/* 0000E310 */ 0x00, 0x3A, 0x00, 0x11, 0x00, 0x63, 0x00, 0x08, 0x00, 0x3A, 0x00, 0x0E, 0x00, 0x81, 0x00, 0x04, -/* 0000E320 */ 0x00, 0x4C, 0x00, 0x04, 0x00, 0x4E, 0x00, 0x04, 0x00, 0x4F, 0x00, 0x0A, 0x00, 0x42, 0x00, 0x04, -/* 0000E330 */ 0x00, 0x58, 0x00, 0x04, 0x00, 0x67, 0x00, 0x04, 0x00, 0x40, 0x00, 0x07, 0x00, 0xA9, 0x00, 0x1B, -/* 0000E340 */ 0x00, 0x3C, 0x00, 0x01, 0x00, 0x20, 0x00, 0x11, 0x00, 0x6B, 0x01, 0x13, 0x00, 0x4A, 0x00, 0x08, -/* 0000E350 */ 0x00, 0x3B, 0x00, 0x04, 0x00, 0x70, 0x00, 0x23, 0x00, 0x7E, 0x00, 0x06, 0x00, 0x3B, 0x00, 0x00, -/* 0000E360 */ 0x3F, 0x5C, 0x00, 0xC1, 0x53, 0xA8, 0x25, 0x01, 0xFE, 0xEA, 0x0A, 0x14, 0xA0, 0x41, 0xD1, 0x00, -/* 0000E370 */ 0xA7, 0xFF, 0x1F, 0xE9, 0x01, 0x00, 0x06, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFF, 0x1F, -/* 0000E380 */ 0xE9, 0x01, 0x00, 0xFE, 0x9F, 0x30, 0xFE, 0x9F, 0x30, 0x0B, 0x16, 0x1A, 0x09, 0x9B, 0x9B, 0x02, -/* 0000E390 */ 0x0A, 0x08, 0x08, 0x08, 0x08, 0x05, 0x02, 0x19, 0x1A, 0x08, 0x06, 0xFE, 0x3D, 0x03, 0x06, 0xFE, -/* 0000E3A0 */ 0x07, 0x04, 0x05, 0xFE, 0x08, 0x04, 0x05, 0xFE, 0x09, 0x04, 0x05, 0xFE, 0x0A, 0x04, 0x06, 0xFE, -/* 0000E3B0 */ 0x4C, 0x03, 0x06, 0xFE, 0x40, 0x03, 0x06, 0xFE, 0x42, 0x03, 0x0B, 0x06, 0xFE, 0x44, 0x03, 0x07, -/* 0000E3C0 */ 0x06, 0xFE, 0x0B, 0x04, 0x0C, 0x06, 0xFE, 0x43, 0x03, 0x06, 0xFE, 0x0C, 0x04, 0x06, 0xFE, 0x0D, -/* 0000E3D0 */ 0x04, 0x06, 0xFE, 0x0F, 0x04, 0x06, 0xFE, 0x8D, 0x03, 0x05, 0xFE, 0x0E, 0x04, 0xFE, 0x63, 0x02, -/* 0000E3E0 */ 0xA6, 0x16, 0xA6, 0x17, 0xA6, 0x18, 0x8C, 0x02, 0x32, 0x1C, 0x14, 0x0C, 0x00, 0x1C, 0x03, 0x8C, -/* 0000E3F0 */ 0x02, 0x32, 0x1C, 0x14, 0x03, 0x00, 0x1C, 0x04, 0x09, 0x3F, 0x02, 0xDE, 0x00, 0x03, 0x01, 0xB6, -/* 0000E400 */ 0x1C, 0x00, 0x01, 0x53, 0x01, 0x00, 0x16, 0x1C, 0x93, 0x00, 0x02, 0x16, 0x8C, 0x02, 0x03, 0x1D, -/* 0000E410 */ 0x6A, 0x1C, 0x1D, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x1D, 0x8C, 0x02, 0x23, 0x1E, 0x07, 0x03, -/* 0000E420 */ 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x05, 0xB6, 0x20, 0x00, 0x01, 0x53, 0x01, 0x01, 0x1F, 0x20, -/* 0000E430 */ 0x5A, 0x02, 0x1F, 0x1F, 0x03, 0x1E, 0x1E, 0x5A, 0x01, 0x1E, 0x8C, 0x02, 0x36, 0x1E, 0x4B, 0x1E, -/* 0000E440 */ 0x5F, 0x1E, 0x1E, 0x01, 0x5A, 0x02, 0x1E, 0x1F, 0x03, 0xFF, 0x1C, 0x8C, 0x02, 0x32, 0x1C, 0x14, -/* 0000E450 */ 0x03, 0x00, 0x1C, 0x03, 0x09, 0xE3, 0x01, 0xDE, 0x01, 0x04, 0x02, 0xB6, 0x1C, 0x00, 0xB5, 0x01, -/* 0000E460 */ 0x00, 0x00, 0x00, 0x1C, 0x1C, 0x01, 0x53, 0x01, 0x02, 0x17, 0x1C, 0x93, 0x01, 0x02, 0x17, 0x01, -/* 0000E470 */ 0x53, 0x01, 0x03, 0x18, 0x1C, 0x93, 0x01, 0x03, 0x18, 0x8C, 0x02, 0x23, 0x1C, 0x07, 0x03, 0x00, -/* 0000E480 */ 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x06, 0x8E, 0x01, 0x02, 0x1D, 0x5A, 0x02, 0x1D, 0x1F, 0x03, 0xFF, -/* 0000E490 */ 0x1C, 0x8C, 0x02, 0x23, 0x1C, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x07, 0x8E, 0x01, -/* 0000E4A0 */ 0x03, 0x1D, 0x5A, 0x02, 0x1D, 0x1F, 0x03, 0xFF, 0x1C, 0x8C, 0x02, 0x15, 0x1C, 0x07, 0x04, 0x00, -/* 0000E4B0 */ 0x5A, 0x00, 0x02, 0x8E, 0x01, 0x02, 0x1D, 0x5A, 0x01, 0x1D, 0x5A, 0x02, 0x08, 0xCB, 0x00, 0x00, -/* 0000E4C0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0x8C, 0x01, 0x13, 0x1E, 0x4B, 0x1E, -/* 0000E4D0 */ 0x78, 0x1E, 0x1D, 0x02, 0x78, 0x0B, 0x1D, 0x03, 0x78, 0x0B, 0x1D, 0x04, 0x5A, 0x03, 0x1D, 0x1F, -/* 0000E4E0 */ 0x04, 0xFF, 0x1C, 0x8C, 0x02, 0x15, 0x1C, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8E, 0x01, 0x02, -/* 0000E4F0 */ 0x1D, 0x5A, 0x01, 0x1D, 0x5A, 0x02, 0x0E, 0xCB, 0x14, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, -/* 0000E500 */ 0x1D, 0x00, 0x00, 0x00, 0x8E, 0x01, 0x02, 0x1E, 0x07, 0x01, 0x00, 0xC1, 0x01, 0x1E, 0x1E, 0x78, -/* 0000E510 */ 0x1E, 0x1D, 0x02, 0x78, 0x0F, 0x1D, 0x03, 0x78, 0x0F, 0x1D, 0x05, 0x78, 0x0F, 0x1D, 0x04, 0x5A, -/* 0000E520 */ 0x03, 0x1D, 0x1F, 0x04, 0xFF, 0x1C, 0x8C, 0x02, 0x04, 0x1C, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, -/* 0000E530 */ 0x8E, 0x01, 0x02, 0x1D, 0x5F, 0x1D, 0x1D, 0x06, 0x5A, 0x01, 0x1D, 0x8C, 0x02, 0x08, 0x1D, 0x5F, -/* 0000E540 */ 0x1D, 0x1D, 0x06, 0x5A, 0x02, 0x1D, 0x1F, 0x03, 0xFF, 0x1C, 0x8C, 0x02, 0x15, 0x1C, 0x07, 0x04, -/* 0000E550 */ 0x00, 0x5A, 0x00, 0x02, 0x8E, 0x01, 0x02, 0x1D, 0x5F, 0x1D, 0x1D, 0x06, 0x5A, 0x01, 0x1D, 0x5A, -/* 0000E560 */ 0x02, 0x11, 0xCB, 0x2C, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0x8E, -/* 0000E570 */ 0x01, 0x02, 0x1E, 0x78, 0x1E, 0x1D, 0x02, 0x78, 0x0B, 0x1D, 0x03, 0x78, 0x0F, 0x1D, 0x05, 0x78, -/* 0000E580 */ 0x0B, 0x1D, 0x04, 0x5A, 0x03, 0x1D, 0x1F, 0x04, 0xFF, 0x1C, 0x8C, 0x02, 0x15, 0x1C, 0x07, 0x04, -/* 0000E590 */ 0x00, 0x5A, 0x00, 0x02, 0x8E, 0x01, 0x02, 0x1D, 0x5F, 0x1D, 0x1D, 0x06, 0x5A, 0x01, 0x1D, 0x5A, -/* 0000E5A0 */ 0x02, 0x12, 0xCB, 0x44, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0xB6, -/* 0000E5B0 */ 0x1F, 0x00, 0xB5, 0x01, 0x00, 0x00, 0x00, 0x1F, 0x1F, 0x01, 0x57, 0x01, 0x04, 0x1E, 0x1F, 0x1D, -/* 0000E5C0 */ 0x78, 0x1E, 0x1D, 0x02, 0x78, 0x0B, 0x1D, 0x03, 0x78, 0x0F, 0x1D, 0x05, 0x78, 0x0B, 0x1D, 0x04, -/* 0000E5D0 */ 0x5A, 0x03, 0x1D, 0x1F, 0x04, 0xFF, 0x1C, 0x8C, 0x02, 0x15, 0x1C, 0x07, 0x04, 0x00, 0x5A, 0x00, -/* 0000E5E0 */ 0x02, 0x8E, 0x01, 0x02, 0x1D, 0x5F, 0x1D, 0x1D, 0x06, 0x5A, 0x01, 0x1D, 0x5A, 0x02, 0x13, 0xCB, -/* 0000E5F0 */ 0x5C, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0x8C, 0x02, 0x23, 0x1E, -/* 0000E600 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x15, 0xB6, 0x20, 0x00, 0xB5, 0x01, 0x00, 0x00, -/* 0000E610 */ 0x00, 0x20, 0x20, 0x01, 0x53, 0x01, 0x05, 0x1F, 0x20, 0x5A, 0x02, 0x1F, 0x1F, 0x03, 0x1E, 0x1E, -/* 0000E620 */ 0x78, 0x1E, 0x1D, 0x07, 0x78, 0x0F, 0x1D, 0x05, 0x78, 0x0B, 0x1D, 0x04, 0x5A, 0x03, 0x1D, 0x1F, -/* 0000E630 */ 0x04, 0xFF, 0x1C, 0x8E, 0x01, 0x02, 0x00, 0x09, 0x07, 0x00, 0xA6, 0x00, 0x09, 0x02, 0x00, 0xA6, -/* 0000E640 */ 0x00, 0x24, 0x00, 0x05, 0x70, 0x00, 0x5C, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, -/* 0000E650 */ 0x00, 0x00, 0x84, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x44, 0x00, -/* 0000E660 */ 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, -/* 0000E670 */ 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x2C, 0x00, 0x00, 0x00, 0x03, 0x04, -/* 0000E680 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, -/* 0000E690 */ 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, -/* 0000E6A0 */ 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, -/* 0000E6B0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, -/* 0000E6C0 */ 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0xFE, 0xEE, 0x01, 0xFE, 0x07, 0x03, -/* 0000E6D0 */ 0xFE, 0x83, 0x01, 0xFE, 0x82, 0x01, 0xFE, 0x81, 0x01, 0xFE, 0x80, 0x01, 0xFE, 0x15, 0x01, 0xFE, -/* 0000E6E0 */ 0x84, 0x01, 0x02, 0x01, 0x01, 0x00, 0xFE, 0x05, 0x04, 0x02, 0x02, 0x00, 0xFE, 0x1A, 0x02, 0x01, -/* 0000E6F0 */ 0xFE, 0x1E, 0x02, 0xFF, 0x36, 0xE9, 0x01, 0x00, 0x0E, 0x06, 0x00, 0x00, 0x00, 0x26, 0x00, 0x1F, -/* 0000E700 */ 0x17, 0x3F, 0x00, 0x10, 0x05, 0x2E, 0x00, 0x7A, 0x04, 0x18, 0x00, 0x53, 0x04, 0x18, 0x00, 0x50, -/* 0000E710 */ 0x00, 0x3A, 0x00, 0x93, 0x00, 0x43, 0x00, 0x91, 0x00, 0x24, 0x00, 0x45, 0x00, 0x40, 0x00, 0x96, -/* 0000E720 */ 0x00, 0x4D, 0x00, 0xA7, 0x05, 0x5C, 0x00, 0x03, 0x03, 0x07, 0x00, 0x7C, 0x00, 0x07, 0x00, 0x16, -/* 0000E730 */ 0x00, 0x00, 0x13, 0xEF, 0x00, 0x00, 0x47, 0xED, 0x00, 0x00, 0x74, 0xEB, 0x00, 0x00, 0xCB, 0xE9, -/* 0000E740 */ 0x00, 0x00, 0x2E, 0xE8, 0x00, 0x00, 0x4A, 0xE7, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, -/* 0000E750 */ 0x01, 0x00, 0xFE, 0xC7, 0x0B, 0x3A, 0xA0, 0x41, 0xD1, 0x00, 0xAE, 0xFF, 0x98, 0x16, 0x02, 0x00, -/* 0000E760 */ 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFF, 0x98, 0x16, 0x02, 0x00, 0xFE, 0x45, 0x02, 0xFE, -/* 0000E770 */ 0x45, 0x02, 0x01, 0x05, 0x05, 0x08, 0x04, 0x23, 0x22, 0x04, 0x01, 0x04, 0x04, 0x04, 0x04, 0x07, -/* 0000E780 */ 0x06, 0xFE, 0xF6, 0x03, 0x05, 0xFE, 0x1C, 0x04, 0x06, 0xFE, 0x45, 0x03, 0x72, 0x59, 0x08, 0xB1, -/* 0000E790 */ 0x05, 0x08, 0x2C, 0x08, 0x05, 0x15, 0x03, 0x00, 0x08, 0x02, 0x09, 0x18, 0x00, 0x8C, 0x04, 0x03, -/* 0000E7A0 */ 0x09, 0x6A, 0x08, 0x09, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x09, 0x5A, 0x01, 0x03, 0x5A, 0x02, -/* 0000E7B0 */ 0x04, 0x1F, 0x03, 0xFF, 0x08, 0x8C, 0x04, 0x03, 0x09, 0x6A, 0x08, 0x09, 0x01, 0x07, 0x02, 0x00, -/* 0000E7C0 */ 0x5A, 0x00, 0x09, 0x5A, 0x01, 0x05, 0x1F, 0x02, 0x08, 0x08, 0x47, 0x06, 0x08, 0xA6, 0x08, 0x14, -/* 0000E7D0 */ 0x08, 0x00, 0x06, 0x08, 0x5F, 0x08, 0x06, 0x02, 0x0F, 0x18, 0x00, 0x08, 0x8C, 0x04, 0x03, 0x09, -/* 0000E7E0 */ 0x6A, 0x08, 0x09, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x09, 0x5A, 0x01, 0x03, 0x5A, 0x02, 0x04, -/* 0000E7F0 */ 0x1F, 0x03, 0xFF, 0x08, 0x5F, 0x00, 0x06, 0x03, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, -/* 0000E800 */ 0x8A, 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0x1D, 0x02, 0xFE, 0x1B, 0x02, 0xFF, 0xBE, 0x16, 0x02, 0x00, -/* 0000E810 */ 0x07, 0x05, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3C, 0x00, 0x18, 0x00, 0x7D, 0x00, 0x18, 0x00, 0x4B, -/* 0000E820 */ 0x00, 0x0F, 0x00, 0x65, 0x00, 0x18, 0x00, 0x7D, 0x00, 0x09, 0x00, 0x38, 0x00, 0x00, 0xBF, 0x5C, -/* 0000E830 */ 0x00, 0xC1, 0x13, 0x88, 0x23, 0x00, 0xFE, 0xB1, 0x0B, 0x1B, 0xA0, 0x41, 0xC3, 0x00, 0xFE, 0x0D, -/* 0000E840 */ 0x04, 0xAD, 0xFF, 0x00, 0x00, 0x00, 0x02, 0xFF, 0xDA, 0x10, 0x02, 0x00, 0xFF, 0x00, 0x10, 0x01, -/* 0000E850 */ 0x00, 0x01, 0x01, 0xFF, 0xDA, 0x10, 0x02, 0x00, 0xFE, 0xF1, 0x04, 0xFE, 0xF1, 0x04, 0x01, 0x05, -/* 0000E860 */ 0x0D, 0x10, 0x04, 0x31, 0x30, 0x04, 0x01, 0x11, 0x11, 0x11, 0x11, 0x01, 0x0F, 0x06, 0xFE, 0xF6, -/* 0000E870 */ 0x03, 0x05, 0xFE, 0x1D, 0x04, 0x06, 0xFE, 0x45, 0x03, 0x06, 0xFE, 0xF7, 0x03, 0x06, 0xFE, 0x10, -/* 0000E880 */ 0x04, 0x06, 0xFE, 0x16, 0x04, 0x06, 0xFE, 0x17, 0x04, 0x06, 0xFE, 0x19, 0x04, 0x06, 0xFE, 0x13, -/* 0000E890 */ 0x04, 0x06, 0xFE, 0x14, 0x04, 0x07, 0xB3, 0x59, 0x10, 0xB1, 0x0D, 0x10, 0x2C, 0x10, 0x0D, 0x15, -/* 0000E8A0 */ 0x03, 0x00, 0x10, 0x02, 0x09, 0x18, 0x00, 0x8C, 0x04, 0x03, 0x11, 0x6A, 0x10, 0x11, 0x00, 0x07, -/* 0000E8B0 */ 0x03, 0x00, 0x5A, 0x00, 0x11, 0x5A, 0x01, 0x03, 0x5A, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x10, 0x8C, -/* 0000E8C0 */ 0x04, 0x03, 0x11, 0x6A, 0x10, 0x11, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x11, 0x5A, 0x01, 0x0D, -/* 0000E8D0 */ 0x1F, 0x02, 0x10, 0x10, 0x47, 0x0E, 0x10, 0xA6, 0x10, 0x14, 0x08, 0x00, 0x0E, 0x10, 0x5F, 0x10, -/* 0000E8E0 */ 0x0E, 0x02, 0x0F, 0x18, 0x00, 0x10, 0x8C, 0x04, 0x03, 0x11, 0x6A, 0x10, 0x11, 0x00, 0x07, 0x03, -/* 0000E8F0 */ 0x00, 0x5A, 0x00, 0x11, 0x5A, 0x01, 0x03, 0x5A, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x10, 0xCB, 0x00, -/* 0000E900 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x10, 0x0E, 0x03, 0x78, -/* 0000E910 */ 0x10, 0x00, 0x04, 0x5F, 0x10, 0x0E, 0x05, 0x78, 0x10, 0x00, 0x06, 0x5F, 0x10, 0x0E, 0x07, 0x78, -/* 0000E920 */ 0x10, 0x00, 0x08, 0x5F, 0x10, 0x0E, 0x09, 0x78, 0x10, 0x00, 0x0A, 0x5F, 0x10, 0x0E, 0x0B, 0x78, -/* 0000E930 */ 0x10, 0x00, 0x0C, 0x5F, 0x10, 0x0E, 0x0D, 0x78, 0x10, 0x00, 0x0E, 0x5F, 0x10, 0x0E, 0x0F, 0x78, -/* 0000E940 */ 0x10, 0x00, 0x10, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x01, 0x24, 0x00, 0x00, 0x00, 0x00, -/* 0000E950 */ 0x00, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0x01, 0x00, 0x00, 0x10, 0x04, 0x00, -/* 0000E960 */ 0x00, 0x21, 0x02, 0x00, 0x00, 0x1F, 0x02, 0x00, 0x00, 0x19, 0x04, 0x00, 0x00, 0x20, 0x02, 0x00, -/* 0000E970 */ 0x00, 0x14, 0x04, 0x00, 0x00, 0xFE, 0x8A, 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0x1D, 0x02, 0xFE, 0xF3, -/* 0000E980 */ 0x01, 0xFE, 0xF7, 0x01, 0xFE, 0xCC, 0x04, 0xFE, 0x10, 0x04, 0xFE, 0xCD, 0x04, 0xFE, 0x21, 0x02, -/* 0000E990 */ 0xFE, 0xCE, 0x04, 0xFE, 0x1F, 0x02, 0xFE, 0x1C, 0x02, 0xFE, 0x19, 0x04, 0xFE, 0xD0, 0x04, 0xFE, -/* 0000E9A0 */ 0x20, 0x02, 0xFE, 0xCF, 0x04, 0xFE, 0x14, 0x04, 0xFF, 0x0F, 0x11, 0x02, 0x00, 0x07, 0x05, 0x00, -/* 0000E9B0 */ 0x00, 0x00, 0x0B, 0x00, 0x3C, 0x00, 0x18, 0x00, 0x84, 0x00, 0x18, 0x00, 0x4B, 0x00, 0x0F, 0x00, -/* 0000E9C0 */ 0x65, 0x00, 0x18, 0x00, 0x85, 0x00, 0x4A, 0x00, 0xC6, 0x02, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, -/* 0000E9D0 */ 0x88, 0x01, 0x00, 0xFE, 0x90, 0x0B, 0x10, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x0F, 0x04, 0xAC, 0xFF, -/* 0000E9E0 */ 0x1E, 0x0A, 0x02, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFF, 0x1E, 0x0A, 0x02, 0x00, -/* 0000E9F0 */ 0xFE, 0x03, 0x04, 0xFE, 0x03, 0x04, 0x01, 0x0A, 0x06, 0x0B, 0x10, 0x56, 0x53, 0x04, 0x06, 0x09, -/* 0000EA00 */ 0x09, 0x09, 0x09, 0x0A, 0x06, 0xFE, 0xF6, 0x03, 0x05, 0xFE, 0x1C, 0x04, 0x06, 0xFE, 0x45, 0x03, -/* 0000EA10 */ 0x08, 0xFE, 0x1A, 0x01, 0x59, 0x0B, 0xB1, 0x08, 0x0B, 0x2C, 0x0B, 0x08, 0x15, 0x03, 0x00, 0x0B, -/* 0000EA20 */ 0x02, 0x09, 0x18, 0x00, 0x8C, 0x04, 0x03, 0x0C, 0x6A, 0x0B, 0x0C, 0x00, 0x07, 0x03, 0x00, 0x5A, -/* 0000EA30 */ 0x00, 0x0C, 0x5A, 0x01, 0x03, 0x5A, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x0B, 0x8C, 0x04, 0x03, 0x0C, -/* 0000EA40 */ 0x6A, 0x0B, 0x0C, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5A, 0x01, 0x08, 0x1F, 0x02, 0x0B, -/* 0000EA50 */ 0x0B, 0x47, 0x09, 0x0B, 0xA6, 0x0B, 0x14, 0x08, 0x00, 0x09, 0x0B, 0x5F, 0x0B, 0x09, 0x02, 0x0F, -/* 0000EA60 */ 0x18, 0x00, 0x0B, 0x8C, 0x04, 0x03, 0x0C, 0x6A, 0x0B, 0x0C, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, -/* 0000EA70 */ 0x0C, 0x5A, 0x01, 0x03, 0x5A, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x0B, 0x8C, 0x04, 0x0B, 0x0B, 0x07, -/* 0000EA80 */ 0x02, 0x00, 0x5A, 0x00, 0x05, 0x5A, 0x01, 0x06, 0x1F, 0x02, 0x0B, 0x0B, 0x47, 0x06, 0x0B, 0x8C, -/* 0000EA90 */ 0x04, 0x0B, 0x0B, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x05, 0x5A, 0x01, 0x07, 0x1F, 0x02, 0x0B, 0x0B, -/* 0000EAA0 */ 0x47, 0x07, 0x0B, 0x8C, 0x04, 0x0A, 0x0B, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x05, 0x8C, 0x04, 0x03, -/* 0000EAB0 */ 0x0D, 0x6A, 0x0C, 0x0D, 0x03, 0x07, 0x08, 0x00, 0x5A, 0x00, 0x0D, 0x5A, 0x01, 0x06, 0x5A, 0x02, -/* 0000EAC0 */ 0x07, 0x5F, 0x0E, 0x09, 0x04, 0x5A, 0x03, 0x0E, 0x8C, 0x04, 0x3D, 0x0E, 0x4B, 0x0E, 0x07, 0x03, -/* 0000EAD0 */ 0x00, 0x5A, 0x00, 0x05, 0x8C, 0x04, 0x39, 0x0F, 0x4B, 0x0F, 0x5A, 0x01, 0x0F, 0x5F, 0x0F, 0x09, -/* 0000EAE0 */ 0x05, 0x5A, 0x02, 0x0F, 0x1F, 0x03, 0x0E, 0x0E, 0x5A, 0x04, 0x0E, 0x5F, 0x0E, 0x09, 0x06, 0x5A, -/* 0000EAF0 */ 0x05, 0x0E, 0x5F, 0x0E, 0x09, 0x07, 0x5A, 0x06, 0x0E, 0x8C, 0x04, 0x3D, 0x0E, 0x4B, 0x0E, 0x07, -/* 0000EB00 */ 0x03, 0x00, 0x5A, 0x00, 0x05, 0x8C, 0x04, 0x3A, 0x0F, 0x4B, 0x0F, 0x5A, 0x01, 0x0F, 0x5F, 0x0F, -/* 0000EB10 */ 0x09, 0x08, 0x5A, 0x02, 0x0F, 0x1F, 0x03, 0x0E, 0x0E, 0x5A, 0x07, 0x0E, 0x1F, 0x08, 0x0C, 0x0C, -/* 0000EB20 */ 0x5A, 0x01, 0x0C, 0x1F, 0x02, 0x00, 0x0B, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x8A, -/* 0000EB30 */ 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0x1D, 0x02, 0xFE, 0xE1, 0x01, 0xFE, 0xCB, 0x04, 0xFE, 0xCD, 0x04, -/* 0000EB40 */ 0xFE, 0xCE, 0x04, 0xFE, 0xD0, 0x04, 0xFE, 0xCF, 0x04, 0xFF, 0x4B, 0x0A, 0x02, 0x00, 0x09, 0x05, -/* 0000EB50 */ 0x00, 0x00, 0x00, 0x0B, 0x00, 0x38, 0x00, 0x18, 0x00, 0x75, 0x00, 0x18, 0x00, 0x47, 0x00, 0x0F, -/* 0000EB60 */ 0x00, 0x61, 0x00, 0x18, 0x00, 0x75, 0x00, 0x14, 0x00, 0x23, 0x00, 0x14, 0x00, 0x24, 0x00, 0x89, -/* 0000EB70 */ 0x00, 0xC4, 0x01, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x75, 0x0B, 0x10, -/* 0000EB80 */ 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x45, 0x03, 0xAB, 0xFF, 0x91, 0x05, 0x02, 0x00, 0xFF, 0x00, 0x10, -/* 0000EB90 */ 0x01, 0x00, 0x03, 0x01, 0xFF, 0x91, 0x05, 0x02, 0x00, 0xFE, 0x3D, 0x04, 0xFE, 0x3D, 0x04, 0x01, -/* 0000EBA0 */ 0x09, 0x05, 0x0B, 0x05, 0x60, 0x59, 0x04, 0x09, 0x07, 0x06, 0x07, 0x07, 0x0A, 0x08, 0x06, 0xFE, -/* 0000EBB0 */ 0x45, 0x03, 0x07, 0xFE, 0x37, 0x01, 0x59, 0x0B, 0xB1, 0x07, 0x0B, 0x4F, 0x08, 0x4F, 0x09, 0x15, -/* 0000EBC0 */ 0x05, 0x00, 0x05, 0x02, 0xA6, 0x0B, 0x47, 0x05, 0x0B, 0x15, 0x05, 0x00, 0x06, 0x02, 0xA6, 0x0B, -/* 0000EBD0 */ 0x47, 0x06, 0x0B, 0x4F, 0x08, 0x4F, 0x09, 0x68, 0x06, 0x00, 0x00, 0x00, 0x0B, 0x14, 0x0A, 0x00, -/* 0000EBE0 */ 0x07, 0x0B, 0xA6, 0x0B, 0x14, 0x03, 0x00, 0x07, 0x0B, 0x09, 0x16, 0x00, 0x8C, 0x01, 0x02, 0x0B, -/* 0000EBF0 */ 0x4B, 0x0B, 0x07, 0x03, 0x00, 0x5A, 0x01, 0x05, 0x5A, 0x02, 0x06, 0xC1, 0x03, 0x00, 0x0B, 0x09, -/* 0000EC00 */ 0xE9, 0x00, 0x8C, 0x04, 0x24, 0x0C, 0x6A, 0x0B, 0x0C, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, -/* 0000EC10 */ 0x5A, 0x01, 0x07, 0x1F, 0x02, 0x0B, 0x0B, 0x47, 0x08, 0x0B, 0x8C, 0x04, 0x11, 0x0B, 0x07, 0x02, -/* 0000EC20 */ 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x08, 0x1F, 0x02, 0x0B, 0x0B, 0x0F, 0x15, 0x00, 0x0B, 0x8C, -/* 0000EC30 */ 0x04, 0x03, 0x0C, 0x6A, 0x0B, 0x0C, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5A, 0x01, 0x03, -/* 0000EC40 */ 0x1F, 0x02, 0xFF, 0x0B, 0x8C, 0x04, 0x03, 0x0C, 0x6A, 0x0B, 0x0C, 0x02, 0x07, 0x02, 0x00, 0x5A, -/* 0000EC50 */ 0x00, 0x0C, 0x5A, 0x01, 0x08, 0x1F, 0x02, 0x0B, 0x0B, 0x47, 0x09, 0x0B, 0xA6, 0x0B, 0x14, 0x03, -/* 0000EC60 */ 0x00, 0x09, 0x0B, 0x09, 0x31, 0x00, 0x8C, 0x04, 0x04, 0x0B, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, -/* 0000EC70 */ 0xCA, 0x0C, 0x5A, 0x01, 0x0C, 0x5A, 0x02, 0x04, 0x1F, 0x03, 0x0B, 0x0B, 0x47, 0x09, 0x0B, 0x8C, -/* 0000EC80 */ 0x04, 0x03, 0x0C, 0x6A, 0x0B, 0x0C, 0x03, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x5A, 0x01, 0x08, -/* 0000EC90 */ 0x5A, 0x02, 0x09, 0x1F, 0x03, 0xFF, 0x0B, 0x8C, 0x02, 0x02, 0x0B, 0x4B, 0x0B, 0x07, 0x04, 0x00, -/* 0000ECA0 */ 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x09, 0x5A, 0x02, 0x05, 0x5A, 0x03, 0x06, 0x1F, 0x04, 0xFF, 0x0B, -/* 0000ECB0 */ 0x47, 0x0B, 0x09, 0x8C, 0x04, 0x06, 0x0C, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8C, 0x04, 0x1A, -/* 0000ECC0 */ 0x0D, 0x5A, 0x01, 0x0D, 0x8C, 0x01, 0x03, 0x0D, 0x4B, 0x0D, 0x5A, 0x02, 0x0D, 0x5A, 0x03, 0x08, -/* 0000ECD0 */ 0x1F, 0x04, 0x0C, 0x0C, 0x74, 0x0C, 0x0B, 0x04, 0x5F, 0x0B, 0x09, 0x05, 0x80, 0x0B, 0x0B, 0xF8, -/* 0000ECE0 */ 0x00, 0xFA, 0x0B, 0x47, 0x00, 0x08, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x36, 0x03, -/* 0000ECF0 */ 0xFE, 0x8E, 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0xF0, 0x01, 0xFE, 0x1B, 0x02, 0xFE, 0x1B, 0x02, 0xAB, -/* 0000ED00 */ 0xFF, 0xA3, 0x05, 0x02, 0x00, 0x10, 0x09, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0E, 0x00, -/* 0000ED10 */ 0x2B, 0x00, 0x15, 0x00, 0x43, 0x00, 0x16, 0x00, 0x52, 0x00, 0x18, 0x00, 0x37, 0x00, 0x15, 0x00, -/* 0000ED20 */ 0x38, 0x00, 0x15, 0x00, 0x97, 0x00, 0x18, 0x00, 0x47, 0x00, 0x0A, 0x00, 0x3A, 0x00, 0x19, 0x00, -/* 0000ED30 */ 0x3F, 0x00, 0x18, 0x00, 0x58, 0x00, 0x19, 0x00, 0x76, 0x00, 0x28, 0x00, 0x68, 0x00, 0x0B, 0x00, -/* 0000ED40 */ 0x3D, 0x00, 0x08, 0x00, 0x1C, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, -/* 0000ED50 */ 0x5B, 0x0B, 0x61, 0xA0, 0x41, 0xF1, 0x00, 0xAA, 0xFF, 0xAA, 0x00, 0x02, 0x00, 0xFF, 0x00, 0x10, -/* 0000ED60 */ 0x01, 0x00, 0x01, 0x01, 0xFF, 0xAA, 0x00, 0x02, 0x00, 0xFE, 0x7F, 0x04, 0xFE, 0x7F, 0x04, 0x03, -/* 0000ED70 */ 0x0B, 0x08, 0x0E, 0x10, 0x61, 0x5D, 0x03, 0x08, 0x08, 0x08, 0x08, 0x08, 0x0D, 0x07, 0x01, 0x00, -/* 0000ED80 */ 0x05, 0xFE, 0x08, 0x04, 0x08, 0x01, 0x01, 0x01, 0x02, 0xFE, 0x3C, 0x01, 0xAC, 0x08, 0x59, 0x0E, -/* 0000ED90 */ 0xB1, 0x0A, 0x0E, 0x95, 0x0E, 0x08, 0x03, 0x47, 0x09, 0x0E, 0xA6, 0x0E, 0x14, 0x08, 0x00, 0x0A, -/* 0000EDA0 */ 0x0E, 0x14, 0x03, 0x00, 0x0A, 0x02, 0x09, 0x18, 0x00, 0x8C, 0x03, 0x03, 0x0F, 0x6A, 0x0E, 0x0F, -/* 0000EDB0 */ 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0F, 0x5A, 0x01, 0x04, 0x1F, 0x02, 0xFF, 0x0E, 0x09, 0x1A, -/* 0000EDC0 */ 0x00, 0x14, 0x03, 0x00, 0x09, 0x02, 0x09, 0x12, 0x00, 0x8C, 0x03, 0x03, 0x0F, 0x6A, 0x0E, 0x0F, -/* 0000EDD0 */ 0x01, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x0F, 0x1F, 0x01, 0xFF, 0x0E, 0x8C, 0x03, 0x0B, 0x0E, 0x07, -/* 0000EDE0 */ 0x02, 0x00, 0x5A, 0x00, 0x05, 0x5A, 0x01, 0x0A, 0x1F, 0x02, 0x0E, 0x0E, 0x47, 0x0B, 0x0E, 0x8C, -/* 0000EDF0 */ 0x03, 0x0B, 0x0E, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x05, 0x5A, 0x01, 0x09, 0x1F, 0x02, 0x0E, 0x0E, -/* 0000EE00 */ 0x47, 0x09, 0x0E, 0x8C, 0x03, 0x04, 0x0E, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x05, 0xCA, 0x0F, 0x5A, -/* 0000EE10 */ 0x01, 0x0F, 0x5A, 0x02, 0x02, 0x1F, 0x03, 0x0E, 0x0E, 0x47, 0x0C, 0x0E, 0x8C, 0x01, 0x02, 0x0E, -/* 0000EE20 */ 0x4B, 0x0E, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x05, 0x5A, 0x01, 0x0C, 0x95, 0x0F, 0x08, 0x06, 0x5A, -/* 0000EE30 */ 0x02, 0x0F, 0x95, 0x0F, 0x08, 0x07, 0x5A, 0x03, 0x0F, 0x1F, 0x04, 0xFF, 0x0E, 0x8C, 0x03, 0x0A, -/* 0000EE40 */ 0x0E, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x05, 0x8C, 0x03, 0x03, 0x10, 0x6A, 0x0F, 0x10, 0x02, 0x07, -/* 0000EE50 */ 0x08, 0x00, 0x5A, 0x00, 0x10, 0x5A, 0x01, 0x0B, 0x5A, 0x02, 0x09, 0x5F, 0x11, 0x0C, 0x03, 0x5A, -/* 0000EE60 */ 0x03, 0x11, 0x8C, 0x03, 0x3D, 0x11, 0x4B, 0x11, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x05, 0x8C, 0x03, -/* 0000EE70 */ 0x39, 0x12, 0x4B, 0x12, 0x5A, 0x01, 0x12, 0x5F, 0x12, 0x0C, 0x04, 0x5A, 0x02, 0x12, 0x1F, 0x03, -/* 0000EE80 */ 0x11, 0x11, 0x5A, 0x04, 0x11, 0x5F, 0x11, 0x0C, 0x05, 0x5A, 0x05, 0x11, 0x5F, 0x11, 0x0C, 0x06, -/* 0000EE90 */ 0x5A, 0x06, 0x11, 0x8C, 0x03, 0x3D, 0x11, 0x4B, 0x11, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x05, 0x8C, -/* 0000EEA0 */ 0x03, 0x3A, 0x12, 0x4B, 0x12, 0x5A, 0x01, 0x12, 0x5F, 0x12, 0x0C, 0x07, 0x5A, 0x02, 0x12, 0x1F, -/* 0000EEB0 */ 0x03, 0x11, 0x11, 0x5A, 0x07, 0x11, 0x1F, 0x08, 0x0F, 0x0F, 0x5A, 0x01, 0x0F, 0x1F, 0x02, 0x00, -/* 0000EEC0 */ 0x0E, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x91, 0x02, 0xFE, 0x89, 0x02, 0xFE, 0xE1, -/* 0000EED0 */ 0x01, 0xFE, 0xCB, 0x04, 0xFE, 0xCD, 0x04, 0xFE, 0xCE, 0x04, 0xFE, 0xD0, 0x04, 0xFE, 0xCF, 0x04, -/* 0000EEE0 */ 0xFF, 0xC8, 0x00, 0x02, 0x00, 0x0B, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x29, 0x00, 0x0F, 0x00, -/* 0000EEF0 */ 0x3F, 0x00, 0x18, 0x00, 0x6D, 0x00, 0x08, 0x00, 0x29, 0x00, 0x12, 0x00, 0xE2, 0x00, 0x14, 0x00, -/* 0000EF00 */ 0x2C, 0x00, 0x14, 0x00, 0x29, 0x00, 0x19, 0x00, 0x3A, 0x00, 0x21, 0x00, 0x4D, 0x00, 0x89, 0x00, -/* 0000EF10 */ 0xA4, 0x01, 0x00, 0xBF, 0x5D, 0x00, 0xC1, 0x43, 0xAD, 0x05, 0x00, 0xFE, 0xEE, 0x0A, 0x0C, 0xB3, -/* 0000EF20 */ 0x41, 0xC1, 0x00, 0xFE, 0x05, 0x04, 0xA8, 0xFF, 0x77, 0xE9, 0x01, 0x00, 0x01, 0xFF, 0x00, 0x10, -/* 0000EF30 */ 0x01, 0x00, 0x04, 0x04, 0xFF, 0x77, 0xE9, 0x01, 0x00, 0xFE, 0xD0, 0x16, 0xFE, 0xD0, 0x16, 0x44, -/* 0000EF40 */ 0x03, 0xFE, 0x14, 0x04, 0xFE, 0x20, 0x02, 0xFE, 0x19, 0x04, 0x15, 0x24, 0x35, 0x09, 0xFE, 0x10, -/* 0000EF50 */ 0x01, 0xFE, 0xFF, 0x00, 0x03, 0x10, 0x13, 0x13, 0x13, 0x13, 0x01, 0x32, 0x33, 0x34, 0x35, 0x06, -/* 0000EF60 */ 0xFE, 0xF6, 0x03, 0x06, 0xFE, 0xC8, 0x04, 0x08, 0x06, 0xFE, 0x45, 0x03, 0x0B, 0x06, 0xFE, 0xF5, -/* 0000EF70 */ 0x03, 0x07, 0x06, 0xFE, 0x00, 0x04, 0x06, 0xFE, 0xAD, 0x03, 0x05, 0xFE, 0xBC, 0x03, 0x05, 0xFE, -/* 0000EF80 */ 0xFF, 0x03, 0x06, 0xFE, 0x10, 0x04, 0x06, 0xFE, 0x11, 0x04, 0x06, 0xFE, 0x12, 0x04, 0x06, 0xFE, -/* 0000EF90 */ 0x16, 0x04, 0x06, 0xFE, 0x28, 0x03, 0x06, 0xFE, 0x29, 0x03, 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, -/* 0000EFA0 */ 0x2B, 0x03, 0x06, 0xFE, 0x17, 0x04, 0x06, 0xFE, 0xC2, 0x03, 0x0C, 0x06, 0xFE, 0x14, 0x04, 0x06, -/* 0000EFB0 */ 0xFE, 0x2D, 0x03, 0x06, 0xFE, 0x2E, 0x03, 0x06, 0xFE, 0x2F, 0x03, 0x06, 0xFE, 0x13, 0x04, 0x06, -/* 0000EFC0 */ 0xFE, 0x15, 0x04, 0x06, 0xFE, 0x5B, 0x03, 0x06, 0xFE, 0xF7, 0x02, 0x06, 0xFE, 0xC9, 0x04, 0x06, -/* 0000EFD0 */ 0xFE, 0xCA, 0x04, 0x01, 0x00, 0x01, 0xFF, 0xFE, 0x72, 0x03, 0xA6, 0x2F, 0xA6, 0x30, 0xA6, 0x31, -/* 0000EFE0 */ 0x2C, 0x36, 0x24, 0x0D, 0x03, 0x00, 0x36, 0x02, 0x09, 0x12, 0x00, 0x8C, 0x03, 0x03, 0x37, 0x6A, -/* 0000EFF0 */ 0x36, 0x37, 0x00, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x37, 0x1F, 0x01, 0xFF, 0x36, 0x8C, 0x03, 0x06, -/* 0000F000 */ 0x36, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x04, 0x8C, 0x03, 0x13, 0x37, 0x5A, 0x01, 0x37, 0x5A, 0x02, -/* 0000F010 */ 0x24, 0x5A, 0x03, 0x03, 0x1F, 0x04, 0x36, 0x36, 0x0E, 0x20, 0x00, 0x36, 0x5F, 0x36, 0x24, 0x01, -/* 0000F020 */ 0x0E, 0x18, 0x00, 0x36, 0x8C, 0x03, 0x03, 0x37, 0x6A, 0x36, 0x37, 0x02, 0x07, 0x03, 0x00, 0x5A, -/* 0000F030 */ 0x00, 0x37, 0x5A, 0x01, 0x05, 0x5A, 0x02, 0x05, 0x1F, 0x03, 0xFF, 0x36, 0x74, 0x06, 0x24, 0x03, -/* 0000F040 */ 0x2C, 0x36, 0x26, 0x14, 0x03, 0x00, 0x36, 0x07, 0x09, 0x1C, 0x00, 0x8C, 0x03, 0x04, 0x36, 0x07, -/* 0000F050 */ 0x03, 0x00, 0x5A, 0x00, 0x04, 0xCA, 0x37, 0x5A, 0x01, 0x37, 0x5A, 0x02, 0x08, 0x1F, 0x03, 0x36, -/* 0000F060 */ 0x36, 0x47, 0x26, 0x36, 0x09, 0x18, 0x00, 0x8C, 0x03, 0x24, 0x37, 0x6A, 0x36, 0x37, 0x04, 0x07, -/* 0000F070 */ 0x02, 0x00, 0x5A, 0x00, 0x37, 0x5A, 0x01, 0x26, 0x1F, 0x02, 0x36, 0x36, 0x47, 0x26, 0x36, 0x8C, -/* 0000F080 */ 0x02, 0x02, 0x36, 0x4B, 0x36, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x26, 0x5A, 0x02, -/* 0000F090 */ 0x09, 0x5A, 0x03, 0x0A, 0xCC, 0x37, 0x02, 0x9F, 0x00, 0x0B, 0x37, 0x9F, 0x01, 0x0C, 0x37, 0x5A, -/* 0000F0A0 */ 0x04, 0x37, 0x5A, 0x05, 0x0C, 0x1F, 0x06, 0x36, 0x36, 0x47, 0x28, 0x36, 0x8C, 0x02, 0x02, 0x36, -/* 0000F0B0 */ 0x4B, 0x36, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x26, 0x5A, 0x02, 0x0D, 0x5A, 0x03, -/* 0000F0C0 */ 0x0A, 0xCC, 0x37, 0x02, 0x9F, 0x00, 0x0E, 0x37, 0x9F, 0x01, 0x0F, 0x37, 0x5A, 0x04, 0x37, 0x5A, -/* 0000F0D0 */ 0x05, 0x0E, 0x1F, 0x06, 0x36, 0x36, 0x47, 0x29, 0x36, 0x8C, 0x02, 0x02, 0x36, 0x4B, 0x36, 0x07, -/* 0000F0E0 */ 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x26, 0x5A, 0x02, 0x10, 0x5A, 0x03, 0x0A, 0xCC, 0x37, -/* 0000F0F0 */ 0x04, 0x9F, 0x00, 0x11, 0x37, 0x9F, 0x01, 0x12, 0x37, 0x9F, 0x02, 0x13, 0x37, 0x9F, 0x03, 0x14, -/* 0000F100 */ 0x37, 0x5A, 0x04, 0x37, 0xA6, 0x37, 0x5A, 0x05, 0x37, 0x1F, 0x06, 0x36, 0x36, 0x47, 0x2A, 0x36, -/* 0000F110 */ 0x8C, 0x02, 0x02, 0x36, 0x4B, 0x36, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x26, 0x5A, -/* 0000F120 */ 0x02, 0x15, 0x5A, 0x03, 0x16, 0xA6, 0x37, 0x5A, 0x04, 0x37, 0x5A, 0x05, 0x17, 0x1F, 0x06, 0x36, -/* 0000F130 */ 0x36, 0x47, 0x2B, 0x36, 0x8C, 0x02, 0x02, 0x36, 0x4B, 0x36, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, -/* 0000F140 */ 0x5A, 0x01, 0x26, 0x5A, 0x02, 0x18, 0x5A, 0x03, 0x0A, 0xCC, 0x37, 0x03, 0x9F, 0x00, 0x19, 0x37, -/* 0000F150 */ 0x9F, 0x01, 0x1A, 0x37, 0x9F, 0x02, 0x1B, 0x37, 0x5A, 0x04, 0x37, 0xA6, 0x37, 0x5A, 0x05, 0x37, -/* 0000F160 */ 0x1F, 0x06, 0x36, 0x36, 0x94, 0x02, 0x36, 0x8C, 0x02, 0x02, 0x36, 0x4B, 0x36, 0x07, 0x06, 0x00, -/* 0000F170 */ 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x26, 0x5A, 0x02, 0x1C, 0x5A, 0x03, 0x16, 0xCC, 0x37, 0x02, 0x9F, -/* 0000F180 */ 0x00, 0x06, 0x37, 0x9F, 0x01, 0x17, 0x37, 0x5A, 0x04, 0x37, 0xA6, 0x37, 0x5A, 0x05, 0x37, 0x1F, -/* 0000F190 */ 0x06, 0x36, 0x36, 0x94, 0x03, 0x36, 0x8C, 0x02, 0x07, 0x36, 0x4B, 0x36, 0x07, 0x02, 0x00, 0x5A, -/* 0000F1A0 */ 0x00, 0x04, 0x5A, 0x01, 0x25, 0x1F, 0x02, 0x36, 0x36, 0x47, 0x25, 0x36, 0x8C, 0x03, 0x2A, 0x36, -/* 0000F1B0 */ 0x07, 0x05, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x25, 0x5A, 0x02, 0x28, 0xA6, 0x37, 0x5A, 0x03, -/* 0000F1C0 */ 0x37, 0x8C, 0x03, 0x31, 0x37, 0x5A, 0x04, 0x37, 0x1F, 0x05, 0x36, 0x36, 0x47, 0x2C, 0x36, 0x94, -/* 0000F1D0 */ 0x04, 0x1D, 0x8C, 0x03, 0x27, 0x36, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, 0x5F, 0x37, 0x2C, 0x05, -/* 0000F1E0 */ 0x5A, 0x01, 0x37, 0x1F, 0x02, 0x36, 0x36, 0x47, 0x2D, 0x36, 0x47, 0x2E, 0x2D, 0x5F, 0x36, 0x2C, -/* 0000F1F0 */ 0x06, 0x0E, 0x22, 0x00, 0x36, 0x8C, 0x03, 0x06, 0x36, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x04, 0x8C, -/* 0000F200 */ 0x03, 0x16, 0x37, 0x5A, 0x01, 0x37, 0x5F, 0x37, 0x2C, 0x06, 0x5A, 0x02, 0x37, 0xD3, 0x00, 0x37, -/* 0000F210 */ 0x5A, 0x03, 0x37, 0x1F, 0x04, 0xFF, 0x36, 0x90, 0x04, 0x36, 0x15, 0x03, 0x00, 0x36, 0x1D, 0x09, -/* 0000F220 */ 0x48, 0x00, 0x8C, 0x03, 0x2F, 0x36, 0x95, 0x36, 0x36, 0x2E, 0x47, 0x2F, 0x36, 0x47, 0x30, 0x1E, -/* 0000F230 */ 0xA6, 0x36, 0x15, 0x03, 0x00, 0x2F, 0x36, 0x09, 0x2D, 0x00, 0x90, 0x04, 0x37, 0x95, 0x37, 0x2F, -/* 0000F240 */ 0x37, 0x47, 0x30, 0x37, 0x47, 0x36, 0x37, 0xA6, 0x37, 0x15, 0x03, 0x00, 0x36, 0x37, 0x09, 0x16, -/* 0000F250 */ 0x00, 0x15, 0x03, 0x00, 0x30, 0x1E, 0x09, 0x0B, 0x00, 0x2F, 0x36, 0x2E, 0x1F, 0x2F, 0x36, 0x36, -/* 0000F260 */ 0x30, 0x47, 0x2E, 0x36, 0x09, 0x03, 0x00, 0x94, 0x04, 0x1D, 0x90, 0x02, 0x36, 0xA6, 0x37, 0x14, -/* 0000F270 */ 0x03, 0x00, 0x36, 0x37, 0x09, 0x7F, 0x00, 0xE5, 0x36, 0x00, 0x8C, 0x03, 0x03, 0x37, 0x6A, 0x36, -/* 0000F280 */ 0x37, 0x07, 0x07, 0x08, 0x00, 0x5A, 0x00, 0x37, 0x5A, 0x01, 0x20, 0x5A, 0x02, 0x21, 0x5A, 0x03, -/* 0000F290 */ 0x2D, 0xA6, 0x38, 0x5A, 0x04, 0x38, 0xA6, 0x38, 0x5A, 0x05, 0x38, 0xA6, 0x38, 0x5A, 0x06, 0x38, -/* 0000F2A0 */ 0xA6, 0x38, 0x5A, 0x07, 0x38, 0x1F, 0x08, 0x36, 0x36, 0x47, 0x31, 0x36, 0xE9, 0x09, 0x27, 0x00, -/* 0000F2B0 */ 0xE7, 0x27, 0x06, 0x8C, 0x03, 0x22, 0x36, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x27, -/* 0000F2C0 */ 0x1F, 0x02, 0xFF, 0x36, 0x8C, 0x03, 0x03, 0x37, 0x6A, 0x36, 0x37, 0x08, 0x07, 0x01, 0x00, 0x5A, -/* 0000F2D0 */ 0x00, 0x37, 0x1F, 0x01, 0xFF, 0x36, 0xE9, 0x14, 0x03, 0x00, 0x31, 0x22, 0x09, 0x06, 0x00, 0x94, -/* 0000F2E0 */ 0x02, 0x1B, 0x09, 0x11, 0x00, 0x14, 0x03, 0x00, 0x31, 0x23, 0x09, 0x06, 0x00, 0x94, 0x02, 0x19, -/* 0000F2F0 */ 0x09, 0x03, 0x00, 0x94, 0x02, 0x1A, 0xA6, 0x36, 0x14, 0x03, 0x00, 0x2A, 0x36, 0x09, 0x03, 0x00, -/* 0000F300 */ 0x47, 0x2A, 0x14, 0x90, 0x03, 0x36, 0xA6, 0x37, 0x14, 0x03, 0x00, 0x36, 0x37, 0x09, 0x03, 0x00, -/* 0000F310 */ 0x94, 0x03, 0x17, 0x74, 0x28, 0x24, 0x09, 0x5F, 0x36, 0x2C, 0x05, 0x74, 0x36, 0x24, 0x0A, 0x74, -/* 0000F320 */ 0x2E, 0x24, 0x0B, 0x74, 0x29, 0x24, 0x0C, 0x74, 0x2A, 0x24, 0x0D, 0x74, 0x2B, 0x24, 0x0E, 0x90, -/* 0000F330 */ 0x02, 0x36, 0x74, 0x36, 0x24, 0x0F, 0x90, 0x03, 0x36, 0x74, 0x36, 0x24, 0x10, 0x90, 0x04, 0x36, -/* 0000F340 */ 0x74, 0x36, 0x24, 0x11, 0x74, 0x06, 0x24, 0x12, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x89, 0x02, 0xFE, -/* 0000F350 */ 0xF2, 0x01, 0xFE, 0x8D, 0x02, 0xFE, 0xF2, 0x01, 0xFE, 0x36, 0x03, 0xFE, 0xF9, 0x01, 0xFE, 0xFB, -/* 0000F360 */ 0x01, 0xFE, 0xE1, 0x01, 0xFE, 0x90, 0x02, 0xFE, 0x2D, 0x02, 0xFE, 0xF3, 0x01, 0xFE, 0xCB, 0x04, -/* 0000F370 */ 0xFE, 0xCC, 0x04, 0xFE, 0xCD, 0x04, 0xFE, 0xCE, 0x04, 0xFE, 0xCF, 0x04, 0xFE, 0xD0, 0x04, 0xFE, -/* 0000F380 */ 0x1C, 0x02, 0xFE, 0x1D, 0x02, 0xFF, 0xC4, 0xE9, 0x01, 0x00, 0x35, 0x06, 0x00, 0x00, 0x00, 0x0B, -/* 0000F390 */ 0x00, 0x37, 0x00, 0x12, 0x00, 0x3F, 0x00, 0x27, 0x00, 0x93, 0x00, 0x18, 0x00, 0x65, 0x00, 0x04, -/* 0000F3A0 */ 0x00, 0x5D, 0x00, 0x0B, 0x00, 0x3A, 0x00, 0x1C, 0x00, 0x4F, 0x00, 0x18, 0x00, 0x49, 0x00, 0x2D, -/* 0000F3B0 */ 0x00, 0x71, 0x00, 0x2D, 0x00, 0x5F, 0x00, 0x37, 0x00, 0x81, 0x00, 0x24, 0x00, 0x6E, 0x00, 0x33, -/* 0000F3C0 */ 0x00, 0x73, 0x00, 0x2F, 0x00, 0x9B, 0x00, 0x16, 0x00, 0x41, 0x00, 0x23, 0x00, 0x6F, 0x00, 0x03, -/* 0000F3D0 */ 0x00, 0x2B, 0x00, 0x18, 0x00, 0x69, 0x00, 0x03, 0x00, 0x46, 0x00, 0x08, 0x00, 0x36, 0x00, 0x22, -/* 0000F3E0 */ 0x00, 0x33, 0x05, 0x0B, 0x00, 0x33, 0x00, 0x0B, 0x00, 0x6F, 0x00, 0x03, 0x00, 0x2F, 0x00, 0x21, -/* 0000F3F0 */ 0x00, 0x92, 0x00, 0x08, 0x00, 0x3B, 0x00, 0x0E, 0x00, 0xB1, 0x00, 0x03, 0x00, 0x7F, 0x00, 0x10, -/* 0000F400 */ 0x00, 0x51, 0x00, 0x38, 0x00, 0x84, 0x00, 0x01, 0x00, 0x52, 0x00, 0x11, 0x00, 0x92, 0x01, 0x13, -/* 0000F410 */ 0x00, 0x52, 0x00, 0x08, 0x00, 0x29, 0x00, 0x06, 0x00, 0x30, 0x00, 0x08, 0x00, 0x2A, 0x00, 0x06, -/* 0000F420 */ 0x00, 0x4A, 0x00, 0x03, 0x00, 0x4E, 0x00, 0x0A, 0x00, 0x35, 0x00, 0x03, 0x00, 0x3C, 0x00, 0x0D, -/* 0000F430 */ 0x00, 0x31, 0x00, 0x03, 0x00, 0x65, 0x00, 0x04, 0x00, 0x2E, 0x00, 0x08, 0x00, 0x4D, 0x00, 0x04, -/* 0000F440 */ 0x00, 0x48, 0x00, 0x04, 0x00, 0x2A, 0x00, 0x04, 0x00, 0x36, 0x00, 0x04, 0x00, 0x42, 0x00, 0x07, -/* 0000F450 */ 0x00, 0x32, 0x00, 0x07, 0x00, 0x2E, 0x00, 0x07, 0x00, 0x32, 0x00, 0x06, 0x00, 0x33, 0x00, 0x00, -/* 0000F460 */ 0x64, 0xF4, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x33, 0x88, 0x21, 0x00, 0xFE, 0x10, 0x0B, 0x57, -/* 0000F470 */ 0xA2, 0x41, 0xD1, 0x00, 0xA9, 0xFF, 0x31, 0xF1, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, -/* 0000F480 */ 0x02, 0xFF, 0x31, 0xF1, 0x01, 0x00, 0xFE, 0xCB, 0x04, 0xFE, 0xCB, 0x04, 0x41, 0x09, 0x15, 0x1A, -/* 0000F490 */ 0x0B, 0x5F, 0x5A, 0x04, 0x08, 0x03, 0x03, 0x03, 0x03, 0x01, 0x01, 0x19, 0x01, 0x01, 0x01, 0x02, -/* 0000F4A0 */ 0x06, 0xFE, 0x5B, 0x03, 0x06, 0xFE, 0xB1, 0x03, 0x06, 0xFE, 0x14, 0x04, 0x07, 0x08, 0x06, 0xFE, -/* 0000F4B0 */ 0xAD, 0x03, 0x06, 0xFE, 0x2D, 0x03, 0x06, 0xFE, 0x2E, 0x03, 0x06, 0xFE, 0x2F, 0x03, 0x06, 0xFE, -/* 0000F4C0 */ 0xB2, 0x03, 0x06, 0xFE, 0xC1, 0x03, 0x0B, 0x06, 0xFE, 0xB0, 0x03, 0x06, 0xFE, 0x15, 0x04, 0x06, -/* 0000F4D0 */ 0xFE, 0x12, 0x04, 0x06, 0xFE, 0x11, 0x04, 0x05, 0xFE, 0xD1, 0x04, 0xFE, 0x4E, 0x01, 0x8C, 0x04, -/* 0000F4E0 */ 0x03, 0x1B, 0x6A, 0x1A, 0x1B, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x1B, 0x5A, 0x01, 0x15, 0xE0, -/* 0000F4F0 */ 0x1C, 0x00, 0x5A, 0x02, 0x1C, 0x1F, 0x03, 0x1A, 0x1A, 0x47, 0x16, 0x1A, 0x95, 0x1A, 0x16, 0x02, -/* 0000F500 */ 0x47, 0x17, 0x1A, 0x95, 0x1A, 0x16, 0x03, 0x14, 0x03, 0x00, 0x1A, 0x04, 0x09, 0x08, 0x00, 0xA6, -/* 0000F510 */ 0x1B, 0x47, 0x1A, 0x1B, 0x09, 0x07, 0x00, 0x95, 0x1B, 0x16, 0x03, 0x47, 0x1A, 0x1B, 0x47, 0x18, -/* 0000F520 */ 0x1A, 0x14, 0x03, 0x00, 0x17, 0x05, 0x09, 0x6A, 0x00, 0x8C, 0x01, 0x02, 0x1A, 0xA6, 0x1B, 0x14, -/* 0000F530 */ 0x03, 0x00, 0x1A, 0x1B, 0x09, 0x5C, 0x00, 0x8C, 0x03, 0x02, 0x1A, 0x4B, 0x1A, 0x07, 0x06, 0x00, -/* 0000F540 */ 0x5A, 0x00, 0x08, 0x8C, 0x04, 0x04, 0x1B, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x08, 0xCB, 0x00, 0x00, -/* 0000F550 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x78, 0x18, 0x1C, 0x01, 0x5A, 0x01, -/* 0000F560 */ 0x1C, 0x5A, 0x02, 0x07, 0x1F, 0x03, 0x1B, 0x1B, 0x5A, 0x01, 0x1B, 0x5A, 0x02, 0x06, 0x5A, 0x03, -/* 0000F570 */ 0x09, 0xCC, 0x1B, 0x03, 0x9F, 0x00, 0x0A, 0x1B, 0x9F, 0x01, 0x0B, 0x1B, 0x9F, 0x02, 0x0C, 0x1B, -/* 0000F580 */ 0x5A, 0x04, 0x1B, 0xA6, 0x1B, 0x5A, 0x05, 0x1B, 0x1F, 0x06, 0x1A, 0x1A, 0x92, 0x01, 0x02, 0x1A, -/* 0000F590 */ 0x09, 0x95, 0x00, 0x14, 0x03, 0x00, 0x17, 0x0D, 0x09, 0x57, 0x00, 0x8C, 0x01, 0x03, 0x1A, 0xA6, -/* 0000F5A0 */ 0x1B, 0x14, 0x03, 0x00, 0x1A, 0x1B, 0x09, 0x49, 0x00, 0xA6, 0x1A, 0x15, 0x03, 0x00, 0x18, 0x1A, -/* 0000F5B0 */ 0x09, 0x38, 0x00, 0x8C, 0x04, 0x24, 0x1B, 0x6A, 0x1A, 0x1B, 0x02, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 0000F5C0 */ 0x1B, 0x8C, 0x04, 0x06, 0x1C, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x08, 0x8C, 0x04, 0x1E, 0x1D, 0x5A, -/* 0000F5D0 */ 0x01, 0x1D, 0x5A, 0x02, 0x18, 0x1F, 0x03, 0x1C, 0x1C, 0x43, 0x1C, 0x1C, 0x0E, 0x5A, 0x01, 0x1C, -/* 0000F5E0 */ 0x1F, 0x02, 0x1A, 0x1A, 0x92, 0x01, 0x03, 0x1A, 0x09, 0x04, 0x00, 0x92, 0x01, 0x03, 0x0F, 0x09, -/* 0000F5F0 */ 0x36, 0x00, 0x14, 0x03, 0x00, 0x17, 0x10, 0x09, 0x2E, 0x00, 0xA6, 0x1A, 0x15, 0x03, 0x00, 0x18, -/* 0000F600 */ 0x1A, 0x09, 0x24, 0x00, 0x15, 0x03, 0x00, 0x18, 0x11, 0x09, 0x1C, 0x00, 0x15, 0x03, 0x00, 0x18, -/* 0000F610 */ 0x12, 0x09, 0x14, 0x00, 0x15, 0x03, 0x00, 0x18, 0x13, 0x09, 0x0C, 0x00, 0x15, 0x03, 0x00, 0x18, -/* 0000F620 */ 0x14, 0x09, 0x04, 0x00, 0x92, 0x01, 0x04, 0x18, 0xA6, 0x00, 0x24, 0x00, 0x01, 0x0C, 0x00, 0x00, -/* 0000F630 */ 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x04, 0x00, 0x00, 0xFE, -/* 0000F640 */ 0x83, 0x02, 0xFE, 0x14, 0x04, 0xFE, 0x39, 0x03, 0x0E, 0xFE, 0xB2, 0x04, 0x00, 0xFF, 0x5D, 0xF1, -/* 0000F650 */ 0x01, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x82, 0x00, 0x07, 0x00, 0x2C, 0x00, 0x1E, -/* 0000F660 */ 0x00, 0x4C, 0x00, 0x16, 0x00, 0x4B, 0x00, 0x5C, 0x00, 0x9F, 0x00, 0x16, 0x00, 0x49, 0x00, 0x0A, -/* 0000F670 */ 0x00, 0x3B, 0x00, 0x38, 0x00, 0xA9, 0x00, 0x07, 0x00, 0x4D, 0x00, 0x32, 0x00, 0xFF, 0x00, 0x06, -/* 0000F680 */ 0x00, 0x41, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x63, 0xA8, 0x05, 0x00, 0xFE, 0xB2, 0x0A, 0x1E, -/* 0000F690 */ 0xA0, 0x41, 0xC1, 0x00, 0xFE, 0xF1, 0x02, 0xA5, 0xFF, 0xEE, 0xDF, 0x01, 0x00, 0x01, 0xFF, 0x00, -/* 0000F6A0 */ 0x10, 0x01, 0x00, 0x01, 0x01, 0xFF, 0xEE, 0xDF, 0x01, 0x00, 0xFE, 0xE5, 0x08, 0xFE, 0xE5, 0x08, -/* 0000F6B0 */ 0x01, 0x0C, 0x07, 0x0F, 0x06, 0x7A, 0x6D, 0x02, 0x07, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x0E, -/* 0000F6C0 */ 0x0F, 0x08, 0x01, 0x01, 0x05, 0xFE, 0xC3, 0x04, 0x06, 0xFE, 0x5B, 0x03, 0x01, 0x02, 0xFE, 0x8D, -/* 0000F6D0 */ 0x01, 0x4F, 0x07, 0x4F, 0x08, 0x4F, 0x0B, 0x4F, 0x0C, 0x4F, 0x0D, 0x4F, 0x09, 0x4F, 0x0A, 0x8C, -/* 0000F6E0 */ 0x01, 0x19, 0x10, 0x4B, 0x10, 0x0E, 0x15, 0x00, 0x10, 0x8C, 0x02, 0x03, 0x10, 0x5F, 0x10, 0x10, -/* 0000F6F0 */ 0x00, 0x0E, 0x09, 0x00, 0x10, 0x8C, 0x01, 0x19, 0x00, 0x4B, 0x00, 0x09, 0x5E, 0x01, 0xA6, 0x10, -/* 0000F700 */ 0x47, 0x07, 0x10, 0xA6, 0x10, 0x47, 0x08, 0x10, 0x8C, 0x02, 0x33, 0x10, 0x4B, 0x10, 0x0E, 0x70, -/* 0000F710 */ 0x00, 0x10, 0x8C, 0x01, 0x0A, 0x10, 0x4B, 0x10, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x02, 0x1F, 0x01, -/* 0000F720 */ 0x10, 0x10, 0x47, 0x07, 0x10, 0x8C, 0x02, 0x03, 0x11, 0x6A, 0x10, 0x11, 0x01, 0x07, 0x03, 0x00, -/* 0000F730 */ 0x5A, 0x00, 0x11, 0x5A, 0x01, 0x07, 0xE0, 0x12, 0x00, 0x5A, 0x02, 0x12, 0x1F, 0x03, 0x10, 0x10, -/* 0000F740 */ 0x47, 0x09, 0x10, 0x0E, 0x38, 0x00, 0x09, 0x95, 0x10, 0x09, 0x03, 0x47, 0x08, 0x10, 0x8C, 0x02, -/* 0000F750 */ 0x06, 0x10, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x02, 0x8C, 0x02, 0x1D, 0x11, 0x5A, 0x01, 0x11, 0x5A, -/* 0000F760 */ 0x02, 0x07, 0x47, 0x11, 0x04, 0x01, 0x04, 0x01, 0x12, 0x08, 0x2F, 0x11, 0x11, 0x12, 0x2F, 0x11, -/* 0000F770 */ 0x11, 0x05, 0x5A, 0x03, 0x11, 0x5A, 0x04, 0x05, 0x1F, 0x05, 0x10, 0x10, 0x47, 0x07, 0x10, 0x09, -/* 0000F780 */ 0x3C, 0x00, 0x8C, 0x02, 0x03, 0x11, 0x6A, 0x10, 0x11, 0x01, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x11, -/* 0000F790 */ 0x8C, 0x01, 0x0A, 0x12, 0x4B, 0x12, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x02, 0x1F, 0x01, 0x12, 0x12, -/* 0000F7A0 */ 0x5A, 0x01, 0x12, 0xE0, 0x12, 0x01, 0x5A, 0x02, 0x12, 0x1F, 0x03, 0x10, 0x10, 0x47, 0x0A, 0x10, -/* 0000F7B0 */ 0x95, 0x10, 0x0A, 0x03, 0x47, 0x07, 0x10, 0x95, 0x10, 0x0A, 0x06, 0x47, 0x08, 0x10, 0xA6, 0x10, -/* 0000F7C0 */ 0x14, 0x03, 0x00, 0x08, 0x10, 0x09, 0x0F, 0x00, 0x01, 0x34, 0x01, 0x01, 0x19, 0x07, 0x8C, 0x01, -/* 0000F7D0 */ 0x19, 0x00, 0x4B, 0x00, 0x09, 0x85, 0x00, 0xD5, 0x00, 0x10, 0x47, 0x0B, 0x10, 0x8C, 0x02, 0x30, -/* 0000F7E0 */ 0x10, 0x95, 0x10, 0x10, 0x07, 0x47, 0x0C, 0x10, 0xA6, 0x10, 0x14, 0x03, 0x00, 0x0C, 0x10, 0x09, -/* 0000F7F0 */ 0x1F, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x07, 0x5A, 0x02, 0x08, 0x1F, 0x03, -/* 0000F800 */ 0x10, 0x0B, 0x01, 0x34, 0x01, 0x01, 0x19, 0x10, 0x8C, 0x01, 0x19, 0x00, 0x4B, 0x00, 0x09, 0x4B, -/* 0000F810 */ 0x00, 0x95, 0x10, 0x0C, 0x08, 0x47, 0x0D, 0x10, 0xA6, 0x10, 0x15, 0x03, 0x00, 0x0D, 0x10, 0x09, -/* 0000F820 */ 0x19, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x07, 0x5A, 0x02, 0x0D, 0x1F, 0x03, -/* 0000F830 */ 0x10, 0x0B, 0x01, 0x34, 0x01, 0x01, 0x19, 0x10, 0x09, 0x16, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, -/* 0000F840 */ 0x02, 0x5A, 0x01, 0x07, 0x5A, 0x02, 0x08, 0x1F, 0x03, 0x10, 0x0B, 0x01, 0x34, 0x01, 0x01, 0x19, -/* 0000F850 */ 0x10, 0x8C, 0x01, 0x19, 0x00, 0x4B, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x61, -/* 0000F860 */ 0x03, 0xFE, 0x83, 0x02, 0x28, 0xFE, 0xC4, 0x04, 0x00, 0x0E, 0xFE, 0xC5, 0x04, 0x00, 0xFF, 0x04, -/* 0000F870 */ 0xE0, 0x01, 0x00, 0x1B, 0x0E, 0x00, 0x00, 0x00, 0x16, 0x00, 0x3F, 0x00, 0x09, 0x00, 0x31, 0x00, -/* 0000F880 */ 0x05, 0x00, 0x20, 0x00, 0x05, 0x00, 0x23, 0x00, 0x0A, 0x00, 0x7A, 0x00, 0x13, 0x00, 0x29, 0x00, -/* 0000F890 */ 0x1E, 0x00, 0x6A, 0x00, 0x04, 0x00, 0xB8, 0x00, 0x07, 0x00, 0x26, 0x00, 0x34, 0x00, 0xC6, 0x00, -/* 0000F8A0 */ 0x2E, 0x00, 0x5C, 0x00, 0x07, 0x00, 0x1F, 0x00, 0x07, 0x00, 0x29, 0x00, 0x0A, 0x00, 0x2B, 0x00, -/* 0000F8B0 */ 0x06, 0x00, 0x2C, 0x00, 0x09, 0x00, 0x8D, 0x00, 0x06, 0x00, 0x28, 0x01, 0x0B, 0x00, 0x56, 0x00, -/* 0000F8C0 */ 0x0A, 0x00, 0x84, 0x00, 0x16, 0x00, 0x54, 0x00, 0x09, 0x00, 0x31, 0x00, 0x07, 0x00, 0x42, 0x00, -/* 0000F8D0 */ 0x0A, 0x00, 0x31, 0x00, 0x19, 0x00, 0x6B, 0x00, 0x16, 0x00, 0x5B, 0x00, 0x0B, 0x00, 0x22, 0x00, -/* 0000F8E0 */ 0x00, 0xE5, 0xF8, 0x00, 0x00, 0xBF, 0x4C, 0x00, 0x01, 0x00, 0x88, 0x01, 0x00, 0xFE, 0xD0, 0x0A, -/* 0000F8F0 */ 0x2C, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xC6, 0x04, 0xA6, 0xFF, 0x14, 0xE5, 0x01, 0x00, 0xFF, 0x00, -/* 0000F900 */ 0x10, 0x01, 0x00, 0x03, 0x03, 0xFF, 0x14, 0xE5, 0x01, 0x00, 0xF9, 0xF9, 0x01, 0x04, 0x05, 0x08, -/* 0000F910 */ 0x17, 0x15, 0x02, 0x01, 0x07, 0x06, 0xFE, 0x5B, 0x03, 0x05, 0xFE, 0xC3, 0x04, 0x05, 0xFE, 0xC7, -/* 0000F920 */ 0x04, 0x51, 0x8C, 0x02, 0x33, 0x08, 0x4B, 0x08, 0x0E, 0x23, 0x00, 0x08, 0x47, 0x00, 0x02, 0x01, -/* 0000F930 */ 0x04, 0x01, 0x08, 0x05, 0x2F, 0x00, 0x00, 0x08, 0x2F, 0x00, 0x00, 0x03, 0x01, 0x04, 0x01, 0x08, -/* 0000F940 */ 0x06, 0x2F, 0x00, 0x00, 0x08, 0x2F, 0x00, 0x00, 0x02, 0x09, 0x25, 0x00, 0x09, 0x20, 0x00, 0x47, -/* 0000F950 */ 0x00, 0x02, 0x01, 0x04, 0x01, 0x08, 0x05, 0x2F, 0x00, 0x00, 0x08, 0x2F, 0x00, 0x00, 0x04, 0x01, -/* 0000F960 */ 0x04, 0x01, 0x08, 0x06, 0x2F, 0x00, 0x00, 0x08, 0x2F, 0x00, 0x00, 0x02, 0x09, 0x02, 0x00, 0xA6, -/* 0000F970 */ 0x00, 0x24, 0x00, 0xFF, 0x49, 0xE5, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x2A, -/* 0000F980 */ 0x00, 0x23, 0x00, 0x53, 0x00, 0x22, 0x00, 0x46, 0x00, 0x00, 0x3F, 0x5D, 0x00, 0x01, 0x00, 0x8D, -/* 0000F990 */ 0x05, 0x00, 0xFE, 0x9D, 0x0A, 0x32, 0xA0, 0x41, 0xD1, 0x00, 0xA2, 0xFF, 0x0D, 0xDC, 0x01, 0x00, -/* 0000F9A0 */ 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFF, 0x0D, 0xDC, 0x01, 0x00, 0xFE, 0x13, 0x03, -/* 0000F9B0 */ 0xFE, 0x13, 0x03, 0x01, 0xFE, 0xC0, 0x04, 0x06, 0x04, 0x07, 0x08, 0x1E, 0x1E, 0x02, 0x06, 0x04, -/* 0000F9C0 */ 0x05, 0x06, 0x07, 0x08, 0x5B, 0x4F, 0x07, 0x94, 0x02, 0x07, 0x8C, 0x02, 0x04, 0x07, 0x07, 0x03, -/* 0000F9D0 */ 0x00, 0x5A, 0x00, 0x03, 0xCA, 0x08, 0x5A, 0x01, 0x08, 0x5A, 0x02, 0x02, 0x1F, 0x03, 0x07, 0x07, -/* 0000F9E0 */ 0x94, 0x02, 0x07, 0x8C, 0x02, 0x06, 0x07, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x8C, 0x02, 0x16, -/* 0000F9F0 */ 0x08, 0x5A, 0x01, 0x08, 0x8C, 0x02, 0x12, 0x08, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x03, 0x8C, 0x02, -/* 0000FA00 */ 0x2F, 0x09, 0x5A, 0x01, 0x09, 0x1F, 0x02, 0x08, 0x08, 0x5A, 0x02, 0x08, 0xD3, 0x00, 0x08, 0x5A, -/* 0000FA10 */ 0x03, 0x08, 0x1F, 0x04, 0xFF, 0x07, 0x90, 0x02, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, -/* 0000FA20 */ 0xFF, 0x23, 0xDC, 0x01, 0x00, 0x04, 0x05, 0x00, 0x00, 0x00, 0x19, 0x00, 0x31, 0x00, 0x33, 0x00, -/* 0000FA30 */ 0xB6, 0x02, 0x08, 0x00, 0x15, 0x00, 0x00, 0x3B, 0xFA, 0x00, 0x00, 0xBF, 0x5D, 0x00, 0x01, 0x00, -/* 0000FA40 */ 0x8D, 0x05, 0x00, 0xFE, 0x9F, 0x0A, 0x6B, 0xA2, 0x41, 0xD1, 0x00, 0xA3, 0xFF, 0xB7, 0xDC, 0x01, -/* 0000FA50 */ 0x00, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0xB7, 0xDC, 0x01, 0x00, 0xFE, 0x48, -/* 0000FA60 */ 0x02, 0xFE, 0x48, 0x02, 0x40, 0x02, 0xFE, 0xC1, 0x04, 0xFE, 0xC2, 0x04, 0x07, 0x04, 0x08, 0x08, -/* 0000FA70 */ 0x25, 0x25, 0x03, 0x08, 0x05, 0x06, 0x07, 0x07, 0x08, 0x71, 0x4F, 0x08, 0x94, 0x02, 0x08, 0x4F, -/* 0000FA80 */ 0x08, 0x94, 0x03, 0x08, 0x8C, 0x03, 0x2F, 0x08, 0x95, 0x08, 0x08, 0x04, 0x94, 0x02, 0x08, 0x8C, -/* 0000FA90 */ 0x03, 0x04, 0x08, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x03, 0xCA, 0x09, 0x5A, 0x01, 0x09, 0x5A, 0x02, -/* 0000FAA0 */ 0x02, 0x1F, 0x03, 0x08, 0x08, 0x94, 0x03, 0x08, 0x8C, 0x03, 0x06, 0x08, 0x07, 0x04, 0x00, 0x5A, -/* 0000FAB0 */ 0x00, 0x03, 0x8C, 0x03, 0x16, 0x09, 0x5A, 0x01, 0x09, 0x8C, 0x03, 0x12, 0x09, 0x07, 0x02, 0x00, -/* 0000FAC0 */ 0x5A, 0x00, 0x03, 0x90, 0x02, 0x0A, 0x5A, 0x01, 0x0A, 0x1F, 0x02, 0x09, 0x09, 0x5A, 0x02, 0x09, -/* 0000FAD0 */ 0xD3, 0x00, 0x09, 0x5A, 0x03, 0x09, 0x1F, 0x04, 0xFF, 0x08, 0x8C, 0x01, 0x02, 0x08, 0x4B, 0x08, -/* 0000FAE0 */ 0x90, 0x03, 0x09, 0x9A, 0x09, 0x08, 0x04, 0xA6, 0x00, 0x24, 0x00, 0xFF, 0xD7, 0xDC, 0x01, 0x00, -/* 0000FAF0 */ 0x05, 0x0A, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x56, 0x00, 0x19, 0x00, 0x45, 0x00, 0x32, 0x00, 0x58, -/* 0000FB00 */ 0x01, 0x0F, 0x00, 0x34, 0x00, 0x00, 0x0A, 0xFB, 0x00, 0x00, 0xBF, 0x4C, 0x00, 0x01, 0x00, 0x88, -/* 0000FB10 */ 0x01, 0x00, 0xFE, 0xA3, 0x0A, 0x68, 0xA2, 0x41, 0xD1, 0x00, 0xA4, 0xFF, 0xCE, 0xDD, 0x01, 0x00, -/* 0000FB20 */ 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0xCE, 0xDD, 0x01, 0x00, 0xEC, 0xEC, 0x41, 0x04, -/* 0000FB30 */ 0x03, 0x06, 0x0D, 0x0C, 0x04, 0x02, 0x05, 0x06, 0xFE, 0x5B, 0x03, 0x25, 0x4F, 0x04, 0x8C, 0x01, -/* 0000FB40 */ 0x02, 0x06, 0x4B, 0x06, 0x95, 0x06, 0x06, 0x03, 0x47, 0x04, 0x06, 0x15, 0x03, 0x00, 0x04, 0x02, -/* 0000FB50 */ 0x09, 0x0A, 0x00, 0x8C, 0x01, 0x03, 0x06, 0x4B, 0x06, 0x9A, 0x03, 0x06, 0x04, 0xA6, 0x00, 0x24, -/* 0000FB60 */ 0x00, 0xFF, 0xF5, 0xDD, 0x01, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x48, 0x00, 0x08, -/* 0000FB70 */ 0x00, 0x2D, 0x00, 0x0C, 0x00, 0x4F, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0x01, 0x00, 0x88, 0x01, 0x00, -/* 0000FB80 */ 0xFE, 0x78, 0x0A, 0x08, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0xBF, 0x04, 0xA1, 0xFF, 0xE5, 0xD1, 0x01, -/* 0000FB90 */ 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0xE5, 0xD1, 0x01, 0x00, 0x96, 0x96, 0x01, -/* 0000FBA0 */ 0x05, 0x03, 0x06, 0x05, 0x0F, 0x0F, 0x02, 0x02, 0x05, 0x08, 0x29, 0x59, 0x06, 0xB1, 0x04, 0x06, -/* 0000FBB0 */ 0x8C, 0x02, 0x2D, 0x06, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x04, 0x8C, 0x01, 0x18, -/* 0000FBC0 */ 0x07, 0x4B, 0x07, 0x5A, 0x02, 0x07, 0x5A, 0x03, 0x03, 0x1F, 0x04, 0x00, 0x06, 0x09, 0x02, 0x00, -/* 0000FBD0 */ 0xA6, 0x00, 0x24, 0x00, 0xFF, 0x23, 0xD2, 0x01, 0x00, 0x02, 0x05, 0x00, 0x00, 0x00, 0x22, 0x00, -/* 0000FBE0 */ 0x57, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0x01, 0x00, 0x88, 0x01, 0x00, 0xFE, 0x72, 0x0A, 0x08, 0xA2, -/* 0000FBF0 */ 0x41, 0xC3, 0x00, 0xFE, 0xBE, 0x04, 0xA0, 0xFF, 0x3F, 0xD0, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, -/* 0000FC00 */ 0x00, 0x03, 0x02, 0xFF, 0x3F, 0xD0, 0x01, 0x00, 0xCC, 0xCC, 0x01, 0x06, 0x03, 0x07, 0x06, 0x13, -/* 0000FC10 */ 0x12, 0x02, 0x02, 0x06, 0x08, 0x36, 0x59, 0x07, 0xB1, 0x05, 0x07, 0x15, 0x05, 0x00, 0x04, 0x02, -/* 0000FC20 */ 0xA6, 0x07, 0x47, 0x04, 0x07, 0x8C, 0x02, 0x2C, 0x07, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x02, 0x5A, -/* 0000FC30 */ 0x01, 0x05, 0x8C, 0x01, 0x16, 0x08, 0x4B, 0x08, 0x5A, 0x02, 0x08, 0x5A, 0x03, 0x03, 0x5A, 0x04, -/* 0000FC40 */ 0x04, 0x1F, 0x05, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFF, 0x7D, 0xD0, 0x01, -/* 0000FC50 */ 0x00, 0x03, 0x05, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x23, 0x00, 0x25, 0x00, 0x6A, 0x00, 0x00, 0xBF, -/* 0000FC60 */ 0x5C, 0x00, 0x01, 0x00, 0x88, 0x01, 0x00, 0xFE, 0x6C, 0x0A, 0x08, 0xA2, 0x41, 0xC3, 0x00, 0xFE, -/* 0000FC70 */ 0xBD, 0x04, 0x9F, 0xFF, 0x65, 0xCE, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x02, 0xFF, -/* 0000FC80 */ 0x65, 0xCE, 0x01, 0x00, 0xC8, 0xC8, 0x01, 0x06, 0x03, 0x07, 0x06, 0x13, 0x12, 0x02, 0x02, 0x06, -/* 0000FC90 */ 0x08, 0x36, 0x59, 0x07, 0xB1, 0x05, 0x07, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA6, 0x07, 0x47, 0x04, -/* 0000FCA0 */ 0x07, 0x8C, 0x02, 0x2C, 0x07, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x05, 0x8C, 0x01, -/* 0000FCB0 */ 0x14, 0x08, 0x4B, 0x08, 0x5A, 0x02, 0x08, 0x5A, 0x03, 0x03, 0x5A, 0x04, 0x04, 0x1F, 0x05, 0x00, -/* 0000FCC0 */ 0x07, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFF, 0xA1, 0xCE, 0x01, 0x00, 0x03, 0x05, 0x00, -/* 0000FCD0 */ 0x00, 0x00, 0x0A, 0x00, 0x23, 0x00, 0x25, 0x00, 0x68, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0x01, 0x00, -/* 0000FCE0 */ 0x88, 0x01, 0x00, 0xFE, 0x66, 0x0A, 0x08, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0xBC, 0x04, 0x9E, 0xFF, -/* 0000FCF0 */ 0x9B, 0xCC, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x02, 0xFF, 0x9B, 0xCC, 0x01, 0x00, -/* 0000FD00 */ 0xC0, 0xC0, 0x01, 0x06, 0x03, 0x07, 0x06, 0x13, 0x12, 0x02, 0x02, 0x06, 0x08, 0x36, 0x59, 0x07, -/* 0000FD10 */ 0xB1, 0x05, 0x07, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA6, 0x07, 0x47, 0x04, 0x07, 0x8C, 0x02, 0x2C, -/* 0000FD20 */ 0x07, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x05, 0x8C, 0x01, 0x12, 0x08, 0x4B, 0x08, -/* 0000FD30 */ 0x5A, 0x02, 0x08, 0x5A, 0x03, 0x03, 0x5A, 0x04, 0x04, 0x1F, 0x05, 0x00, 0x07, 0x09, 0x02, 0x00, -/* 0000FD40 */ 0xA6, 0x00, 0x24, 0x00, 0xFF, 0xD3, 0xCC, 0x01, 0x00, 0x03, 0x05, 0x00, 0x00, 0x00, 0x0A, 0x00, -/* 0000FD50 */ 0x23, 0x00, 0x25, 0x00, 0x64, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, -/* 0000FD60 */ 0x48, 0x0A, 0x1D, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x4C, 0x03, 0x9D, 0xFF, 0xFB, 0xC6, 0x01, 0x00, -/* 0000FD70 */ 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFF, 0xFB, 0xC6, 0x01, 0x00, 0xFE, 0x60, 0x03, 0xFE, -/* 0000FD80 */ 0x60, 0x03, 0x01, 0x08, 0x08, 0x0C, 0x0A, 0x52, 0x4F, 0x02, 0x08, 0x04, 0x04, 0x04, 0x04, 0x0B, -/* 0000FD90 */ 0x08, 0x06, 0xFE, 0xF5, 0x03, 0x05, 0xFE, 0xBC, 0x03, 0x05, 0xFE, 0xFF, 0x03, 0x06, 0xFE, 0x00, -/* 0000FDA0 */ 0x04, 0x05, 0xFE, 0xBB, 0x04, 0xFE, 0x11, 0x01, 0xA6, 0x0A, 0x8C, 0x01, 0x07, 0x0C, 0x4B, 0x0C, -/* 0000FDB0 */ 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x08, 0x1F, 0x02, 0x0C, 0x0C, 0x47, 0x08, 0x0C, -/* 0000FDC0 */ 0x2C, 0x0C, 0x09, 0x15, 0x03, 0x00, 0x0C, 0x03, 0x09, 0x66, 0x00, 0x5F, 0x0C, 0x09, 0x00, 0x47, -/* 0000FDD0 */ 0x0A, 0x0C, 0x2C, 0x0C, 0x0A, 0x15, 0x03, 0x00, 0x0C, 0x03, 0x09, 0x54, 0x00, 0x8C, 0x02, 0x24, -/* 0000FDE0 */ 0x0D, 0x6A, 0x0C, 0x0D, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0D, 0x5A, 0x01, 0x0A, 0x1F, 0x02, -/* 0000FDF0 */ 0x0C, 0x0C, 0x47, 0x0A, 0x0C, 0x15, 0x03, 0x00, 0x0A, 0x04, 0x09, 0x34, 0x00, 0x15, 0x03, 0x00, -/* 0000FE00 */ 0x0A, 0x05, 0x09, 0x2C, 0x00, 0x8C, 0x02, 0x03, 0x0D, 0x6A, 0x0C, 0x0D, 0x02, 0x07, 0x04, 0x00, -/* 0000FE10 */ 0x5A, 0x00, 0x0D, 0x8C, 0x02, 0x0B, 0x0E, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x0A, -/* 0000FE20 */ 0x1F, 0x02, 0x0E, 0x0E, 0x5A, 0x01, 0x0E, 0x5A, 0x02, 0x06, 0x5A, 0x03, 0x07, 0x1F, 0x04, 0xFF, -/* 0000FE30 */ 0x0C, 0x2C, 0x0C, 0x0A, 0x14, 0x08, 0x00, 0x0C, 0x03, 0x14, 0x03, 0x00, 0x0A, 0x05, 0x09, 0x46, -/* 0000FE40 */ 0x00, 0x8C, 0x01, 0x08, 0x0C, 0x4B, 0x0C, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x08, -/* 0000FE50 */ 0x8C, 0x02, 0x26, 0x0D, 0x5A, 0x02, 0x0D, 0x8C, 0x02, 0x03, 0x0E, 0x6A, 0x0D, 0x0E, 0x03, 0x07, -/* 0000FE60 */ 0x02, 0x00, 0x5A, 0x00, 0x0E, 0x8C, 0x02, 0x2B, 0x0F, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x02, 0x1F, -/* 0000FE70 */ 0x01, 0x0F, 0x0F, 0x5A, 0x01, 0x0F, 0x1F, 0x02, 0x0D, 0x0D, 0x5A, 0x03, 0x0D, 0x1F, 0x04, 0x00, -/* 0000FE80 */ 0x0C, 0x09, 0x33, 0x00, 0x09, 0x2E, 0x00, 0x8C, 0x01, 0x08, 0x0C, 0x4B, 0x0C, 0x07, 0x04, 0x00, -/* 0000FE90 */ 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x08, 0x8C, 0x02, 0x27, 0x0D, 0x5A, 0x02, 0x0D, 0x8C, 0x02, 0x2B, -/* 0000FEA0 */ 0x0D, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x02, 0x1F, 0x01, 0x0D, 0x0D, 0x5A, 0x03, 0x0D, 0x1F, 0x04, -/* 0000FEB0 */ 0x00, 0x0C, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xF8, 0x01, 0xFE, 0x37, 0x03, 0xFE, -/* 0000FEC0 */ 0x8F, 0x02, 0xFE, 0xD8, 0x01, 0xFF, 0x36, 0xC7, 0x01, 0x00, 0x0B, 0x02, 0x00, 0x00, 0x00, 0x16, -/* 0000FED0 */ 0x00, 0x34, 0x00, 0x0B, 0x00, 0x32, 0x00, 0x07, 0x00, 0x2E, 0x00, 0x0B, 0x00, 0x36, 0x00, 0x18, -/* 0000FEE0 */ 0x00, 0x37, 0x00, 0x10, 0x00, 0x4A, 0x00, 0x2C, 0x00, 0x96, 0x00, 0x10, 0x00, 0x4C, 0x00, 0x46, -/* 0000FEF0 */ 0x00, 0x93, 0x00, 0x30, 0x00, 0x64, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, -/* 0000FF00 */ 0xFE, 0x3A, 0x0A, 0x28, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xEE, 0x02, 0x9C, 0xFF, 0x27, 0xC5, 0x01, -/* 0000FF10 */ 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFF, 0x27, 0xC5, 0x01, 0x00, 0xFE, 0x8C, 0x01, -/* 0000FF20 */ 0xFE, 0x8C, 0x01, 0x01, 0x07, 0x05, 0x0A, 0x03, 0x25, 0x24, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, -/* 0000FF30 */ 0x09, 0x07, 0x05, 0xFE, 0x3C, 0x03, 0x08, 0x7B, 0x14, 0x0A, 0x00, 0x05, 0x02, 0xA6, 0x0A, 0x14, -/* 0000FF40 */ 0x03, 0x00, 0x05, 0x0A, 0x09, 0x15, 0x00, 0x8C, 0x02, 0x03, 0x0B, 0x6A, 0x0A, 0x0B, 0x00, 0x07, -/* 0000FF50 */ 0x02, 0x00, 0x5A, 0x00, 0x0B, 0x5A, 0x01, 0x06, 0x1F, 0x02, 0xFF, 0x0A, 0x8C, 0x02, 0x03, 0x0B, -/* 0000FF60 */ 0x6A, 0x0A, 0x0B, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0B, 0x5A, 0x01, 0x05, 0x1F, 0x02, 0x0A, -/* 0000FF70 */ 0x0A, 0x47, 0x08, 0x0A, 0x0E, 0x0C, 0x00, 0x08, 0x5F, 0x0A, 0x08, 0x02, 0x15, 0x03, 0x00, 0x0A, -/* 0000FF80 */ 0x03, 0x09, 0x15, 0x00, 0x8C, 0x02, 0x03, 0x0B, 0x6A, 0x0A, 0x0B, 0x00, 0x07, 0x02, 0x00, 0x5A, -/* 0000FF90 */ 0x00, 0x0B, 0x5A, 0x01, 0x06, 0x1F, 0x02, 0xFF, 0x0A, 0x8C, 0x01, 0x07, 0x0A, 0x4B, 0x0A, 0x07, -/* 0000FFA0 */ 0x02, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x07, 0x1F, 0x02, 0x00, 0x0A, 0x09, 0x02, 0x00, 0xA6, -/* 0000FFB0 */ 0x00, 0x24, 0x00, 0xFE, 0x8C, 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0xF6, 0x01, 0xFF, 0x58, 0xC5, 0x01, -/* 0000FFC0 */ 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x37, 0x00, 0x15, 0x00, 0x40, 0x00, 0x18, 0x00, -/* 0000FFD0 */ 0x38, 0x00, 0x10, 0x00, 0x3F, 0x00, 0x15, 0x00, 0x40, 0x00, 0x18, 0x00, 0x2C, 0x00, 0x00, 0xBF, -/* 0000FFE0 */ 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x2D, 0x0A, 0x24, 0xA2, 0x41, 0xC1, 0x00, 0xFE, -/* 0000FFF0 */ 0xED, 0x02, 0x9B, 0xFF, 0x63, 0xC3, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x05, 0x05, 0xFF, -/* 00010000 */ 0x63, 0xC3, 0x01, 0x00, 0xFE, 0x9A, 0x01, 0xFE, 0x9A, 0x01, 0x01, 0x08, 0x05, 0x0B, 0x04, 0x25, -/* 00010010 */ 0x24, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x0A, 0x07, 0x05, 0xFE, 0x3C, 0x03, 0x08, 0x7C, 0x14, -/* 00010020 */ 0x0A, 0x00, 0x05, 0x02, 0xA6, 0x0B, 0x14, 0x03, 0x00, 0x05, 0x0B, 0x09, 0x15, 0x00, 0x8C, 0x02, -/* 00010030 */ 0x03, 0x0C, 0x6A, 0x0B, 0x0C, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5A, 0x01, 0x06, 0x1F, -/* 00010040 */ 0x02, 0xFF, 0x0B, 0x8C, 0x02, 0x03, 0x0C, 0x6A, 0x0B, 0x0C, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 00010050 */ 0x0C, 0x5A, 0x01, 0x05, 0x1F, 0x02, 0x0B, 0x0B, 0x47, 0x09, 0x0B, 0x0E, 0x0C, 0x00, 0x09, 0x5F, -/* 00010060 */ 0x0B, 0x09, 0x02, 0x15, 0x03, 0x00, 0x0B, 0x03, 0x09, 0x15, 0x00, 0x8C, 0x02, 0x03, 0x0C, 0x6A, -/* 00010070 */ 0x0B, 0x0C, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5A, 0x01, 0x06, 0x1F, 0x02, 0xFF, 0x0B, -/* 00010080 */ 0x8C, 0x02, 0x2E, 0x0B, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x07, 0x5A, 0x02, 0x08, -/* 00010090 */ 0x1F, 0x03, 0x00, 0x0B, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x8C, 0x02, 0xFE, 0xEF, -/* 000100A0 */ 0x01, 0xFE, 0xF6, 0x01, 0xFF, 0x9D, 0xC3, 0x01, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, -/* 000100B0 */ 0x37, 0x00, 0x15, 0x00, 0x40, 0x00, 0x18, 0x00, 0x38, 0x00, 0x10, 0x00, 0x3F, 0x00, 0x15, 0x00, -/* 000100C0 */ 0x40, 0x00, 0x19, 0x00, 0x31, 0x00, 0x00, 0x3F, 0x5D, 0x00, 0xC1, 0x13, 0x8D, 0x25, 0x00, 0xFE, -/* 000100D0 */ 0x1A, 0x0A, 0x04, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x74, 0x03, 0x99, 0xFF, 0xCE, 0xBF, 0x01, 0x00, -/* 000100E0 */ 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFF, 0xCE, 0xBF, 0x01, 0x00, 0xFE, 0x6F, 0x03, -/* 000100F0 */ 0xFE, 0x6F, 0x03, 0x04, 0xFE, 0xF9, 0x03, 0xFE, 0xB8, 0x04, 0xFE, 0xB9, 0x04, 0xFE, 0xBA, 0x04, -/* 00010100 */ 0x09, 0x0A, 0x10, 0x05, 0x20, 0x20, 0x02, 0x05, 0x03, 0x03, 0x03, 0x03, 0x01, 0x0D, 0x0E, 0x0F, -/* 00010110 */ 0x01, 0x00, 0x08, 0x06, 0xFE, 0x01, 0x04, 0x06, 0xFE, 0x40, 0x03, 0x06, 0xFE, 0x42, 0x03, 0x0C, -/* 00010120 */ 0x06, 0xFE, 0x44, 0x03, 0x07, 0x6D, 0x94, 0x04, 0x0B, 0x94, 0x05, 0x0C, 0xCC, 0x10, 0x00, 0x94, -/* 00010130 */ 0x02, 0x10, 0x94, 0x03, 0x02, 0x8C, 0x02, 0x06, 0x10, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x8C, -/* 00010140 */ 0x02, 0x16, 0x11, 0x5A, 0x01, 0x11, 0x5A, 0x02, 0x0A, 0xD3, 0x00, 0x11, 0x5A, 0x03, 0x11, 0x1F, -/* 00010150 */ 0x04, 0xFF, 0x10, 0x8C, 0x02, 0x15, 0x10, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x90, 0x02, 0x11, -/* 00010160 */ 0x5A, 0x01, 0x11, 0x5A, 0x02, 0x04, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, -/* 00010170 */ 0x00, 0x00, 0x00, 0x90, 0x03, 0x12, 0x78, 0x12, 0x11, 0x00, 0x78, 0x07, 0x11, 0x01, 0x78, 0x07, -/* 00010180 */ 0x11, 0x02, 0x5A, 0x03, 0x11, 0x1F, 0x04, 0xFF, 0x10, 0x90, 0x02, 0x00, 0x09, 0x02, 0x00, 0xA6, -/* 00010190 */ 0x00, 0x24, 0x00, 0x01, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, -/* 000101A0 */ 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0xFE, 0x83, -/* 000101B0 */ 0x01, 0xFE, 0x82, 0x01, 0xFE, 0x81, 0x01, 0xFF, 0x21, 0xC0, 0x01, 0x00, 0x06, 0x06, 0x00, 0x00, -/* 000101C0 */ 0x00, 0x06, 0x00, 0x19, 0x00, 0x03, 0x00, 0x17, 0x00, 0x1E, 0x00, 0x70, 0x02, 0x36, 0x00, 0x68, -/* 000101D0 */ 0x00, 0x08, 0x00, 0x13, 0x00, 0x00, 0xDA, 0x01, 0x01, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x53, 0xA8, -/* 000101E0 */ 0x21, 0x00, 0xFE, 0x1D, 0x0A, 0x41, 0xB2, 0x41, 0xD1, 0x00, 0x9A, 0xFF, 0x8A, 0xC0, 0x01, 0x00, -/* 000101F0 */ 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0x8A, 0xC0, 0x01, 0x00, 0xFE, 0x2C, 0x02, 0xFE, -/* 00010200 */ 0x2C, 0x02, 0x45, 0x08, 0x0B, 0x0F, 0x06, 0x2F, 0x2E, 0x03, 0x07, 0x05, 0x05, 0x05, 0x05, 0x01, -/* 00010210 */ 0x01, 0x0E, 0x0F, 0x08, 0x06, 0xFE, 0x40, 0x03, 0x06, 0xFE, 0x42, 0x03, 0x0C, 0x06, 0xFE, 0x44, -/* 00010220 */ 0x03, 0x06, 0xFE, 0x43, 0x03, 0x0B, 0x07, 0x01, 0x01, 0x9D, 0xA6, 0x0D, 0xE5, 0x7F, 0x00, 0x8C, -/* 00010230 */ 0x03, 0x29, 0x10, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x0B, 0x8C, 0x01, 0x04, 0x11, -/* 00010240 */ 0x5A, 0x02, 0x11, 0xA6, 0x11, 0x5A, 0x03, 0x11, 0x8C, 0x01, 0x05, 0x11, 0x5A, 0x04, 0x11, 0x1F, -/* 00010250 */ 0x05, 0x10, 0x10, 0x47, 0x0D, 0x10, 0x5F, 0x10, 0x0D, 0x00, 0x0E, 0x4C, 0x00, 0x10, 0x8C, 0x03, -/* 00010260 */ 0x15, 0x10, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8C, 0x01, 0x02, 0x11, 0x5A, 0x01, 0x11, 0x8C, -/* 00010270 */ 0x01, 0x03, 0x11, 0x5A, 0x02, 0x11, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, -/* 00010280 */ 0x00, 0x00, 0x00, 0x5F, 0x12, 0x0D, 0x00, 0x78, 0x12, 0x11, 0x01, 0x78, 0x05, 0x11, 0x02, 0x78, -/* 00010290 */ 0x05, 0x11, 0x03, 0x78, 0x08, 0x11, 0x04, 0x5A, 0x03, 0x11, 0x1F, 0x04, 0xFF, 0x10, 0x8C, 0x01, -/* 000102A0 */ 0x03, 0x10, 0x2F, 0x10, 0x10, 0x0A, 0x92, 0x01, 0x03, 0x10, 0xE9, 0x09, 0x15, 0x00, 0xE7, 0x0C, -/* 000102B0 */ 0x06, 0x8C, 0x03, 0x22, 0x10, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x0C, 0x1F, 0x02, -/* 000102C0 */ 0xFF, 0x10, 0xE9, 0xA6, 0x00, 0x24, 0x00, 0x01, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, -/* 000102D0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x81, 0x01, -/* 000102E0 */ 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0xFE, 0xF7, 0x01, 0xFE, 0x83, 0x01, 0xFE, 0x82, 0x01, 0xFE, -/* 000102F0 */ 0x81, 0x01, 0xFE, 0x80, 0x01, 0xFF, 0xC0, 0xC0, 0x01, 0x00, 0x07, 0x05, 0x00, 0x00, 0x00, 0x27, -/* 00010300 */ 0x00, 0x5E, 0x00, 0x08, 0x00, 0x2B, 0x00, 0x40, 0x00, 0x8D, 0x00, 0x12, 0x00, 0x33, 0x00, 0x01, -/* 00010310 */ 0x00, 0x1D, 0x00, 0x14, 0x00, 0x8F, 0x00, 0x00, 0x3F, 0x5D, 0x00, 0xC1, 0x03, 0x8D, 0x05, 0x00, -/* 00010320 */ 0xFE, 0xF6, 0x09, 0x04, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x73, 0x03, 0x97, 0xFF, 0x97, 0xBB, 0x01, -/* 00010330 */ 0x00, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0x97, 0xBB, 0x01, 0x00, 0xFE, 0x31, -/* 00010340 */ 0x04, 0xFE, 0x31, 0x04, 0x01, 0xFE, 0xB6, 0x04, 0x08, 0x05, 0x0A, 0x05, 0x2C, 0x29, 0x02, 0x03, -/* 00010350 */ 0x03, 0x03, 0x03, 0x03, 0x07, 0x08, 0x09, 0x06, 0xFE, 0xF5, 0x03, 0x06, 0xFE, 0xAD, 0x03, 0x08, -/* 00010360 */ 0x8B, 0x4F, 0x06, 0x4F, 0x0A, 0x94, 0x02, 0x0A, 0x2C, 0x0A, 0x05, 0x14, 0x03, 0x00, 0x0A, 0x02, -/* 00010370 */ 0x09, 0x06, 0x00, 0xCC, 0x00, 0x00, 0x09, 0x71, 0x00, 0x2C, 0x0A, 0x05, 0x14, 0x03, 0x00, 0x0A, -/* 00010380 */ 0x03, 0x09, 0x0A, 0x00, 0xCC, 0x0A, 0x01, 0x9F, 0x00, 0x05, 0x0A, 0x47, 0x05, 0x0A, 0x8C, 0x02, -/* 00010390 */ 0x24, 0x0B, 0x6A, 0x0A, 0x0B, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0B, 0x5A, 0x01, 0x05, 0x1F, -/* 000103A0 */ 0x02, 0x0A, 0x0A, 0x47, 0x05, 0x0A, 0x8C, 0x02, 0x24, 0x0B, 0x6A, 0x0A, 0x0B, 0x01, 0x07, 0x02, -/* 000103B0 */ 0x00, 0x5A, 0x00, 0x0B, 0xA4, 0x0C, 0x05, 0x02, 0x5A, 0x01, 0x0C, 0x1F, 0x02, 0x0A, 0x0A, 0x47, -/* 000103C0 */ 0x06, 0x0A, 0xCC, 0x0A, 0x00, 0x94, 0x02, 0x0A, 0x8C, 0x02, 0x25, 0x0A, 0x07, 0x04, 0x00, 0x5A, -/* 000103D0 */ 0x00, 0x04, 0x5A, 0x01, 0x05, 0x5A, 0x02, 0x06, 0xD3, 0x00, 0x0B, 0x5A, 0x03, 0x0B, 0x1F, 0x04, -/* 000103E0 */ 0xFF, 0x0A, 0x90, 0x02, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x36, 0x03, 0xFE, -/* 000103F0 */ 0x3A, 0x03, 0xC1, 0xFF, 0xCA, 0xBB, 0x01, 0x00, 0x0A, 0x07, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x32, -/* 00010400 */ 0x00, 0x06, 0x00, 0x1E, 0x00, 0x0B, 0x00, 0x2F, 0x00, 0x0A, 0x00, 0x28, 0x00, 0x18, 0x00, 0x2E, -/* 00010410 */ 0x00, 0x1C, 0x00, 0x70, 0x00, 0x06, 0x00, 0x18, 0x00, 0x1A, 0x00, 0x8F, 0x02, 0x08, 0x00, 0x11, -/* 00010420 */ 0x00, 0x00, 0x26, 0x04, 0x01, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x05, -/* 00010430 */ 0x0A, 0x2A, 0xA2, 0x41, 0xD1, 0x00, 0x98, 0xFF, 0x49, 0xBD, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, -/* 00010440 */ 0x00, 0x02, 0x02, 0xFF, 0x49, 0xBD, 0x01, 0x00, 0xFE, 0x61, 0x02, 0xFE, 0x61, 0x02, 0x41, 0x06, -/* 00010450 */ 0x08, 0x0B, 0x06, 0x4A, 0x48, 0x03, 0x08, 0x04, 0x04, 0x04, 0x04, 0x0A, 0x06, 0xFE, 0xAD, 0x03, -/* 00010460 */ 0x06, 0xFE, 0xF6, 0x03, 0x07, 0x05, 0xFE, 0xB7, 0x04, 0x08, 0x01, 0xFF, 0xF7, 0x4F, 0x09, 0x2C, -/* 00010470 */ 0x0B, 0x08, 0x15, 0x03, 0x00, 0x0B, 0x02, 0x09, 0x08, 0x00, 0x2C, 0x0B, 0x08, 0x15, 0x08, 0x00, -/* 00010480 */ 0x0B, 0x03, 0x14, 0x03, 0x00, 0x08, 0x04, 0x09, 0x15, 0x00, 0x8C, 0x03, 0x03, 0x0C, 0x6A, 0x0B, -/* 00010490 */ 0x0C, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5A, 0x01, 0x05, 0x1F, 0x02, 0xFF, 0x0B, 0x8C, -/* 000104A0 */ 0x03, 0x24, 0x0C, 0x6A, 0x0B, 0x0C, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5A, 0x01, 0x08, -/* 000104B0 */ 0x1F, 0x02, 0x0B, 0x0B, 0x47, 0x09, 0x0B, 0x8C, 0x02, 0x0C, 0x0B, 0x4B, 0x0B, 0x07, 0x02, 0x00, -/* 000104C0 */ 0x5A, 0x00, 0x06, 0x5A, 0x01, 0x09, 0x1F, 0x02, 0x0B, 0x0B, 0x0F, 0x26, 0x00, 0x0B, 0x8C, 0x03, -/* 000104D0 */ 0x03, 0x0C, 0x6A, 0x0B, 0x0C, 0x02, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x8C, 0x03, 0x0B, 0x0D, -/* 000104E0 */ 0x07, 0x02, 0x00, 0x5A, 0x00, 0x06, 0x5A, 0x01, 0x09, 0x1F, 0x02, 0x0D, 0x0D, 0x5A, 0x01, 0x0D, -/* 000104F0 */ 0x1F, 0x02, 0xFF, 0x0B, 0x8C, 0x03, 0x03, 0x0C, 0x6A, 0x0B, 0x0C, 0x03, 0x07, 0x02, 0x00, 0x5A, -/* 00010500 */ 0x00, 0x0C, 0x5A, 0x01, 0x09, 0x1F, 0x02, 0x0B, 0x0B, 0x47, 0x09, 0x0B, 0xA6, 0x0B, 0x15, 0x03, -/* 00010510 */ 0x00, 0x09, 0x0B, 0x09, 0x4A, 0x00, 0x8C, 0x03, 0x06, 0x0B, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x06, -/* 00010520 */ 0x8C, 0x03, 0x17, 0x0C, 0x5A, 0x01, 0x0C, 0x8C, 0x01, 0x02, 0x0C, 0x4B, 0x0C, 0x5A, 0x02, 0x0C, -/* 00010530 */ 0x5A, 0x03, 0x09, 0x1F, 0x04, 0x0B, 0x0B, 0x14, 0x03, 0x00, 0x0B, 0x07, 0x09, 0x21, 0x00, 0x8C, -/* 00010540 */ 0x03, 0x06, 0x0B, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x06, 0x8C, 0x03, 0x18, 0x0C, 0x5A, 0x01, 0x0C, -/* 00010550 */ 0x8C, 0x01, 0x02, 0x0C, 0x4B, 0x0C, 0x5A, 0x02, 0x0C, 0x5A, 0x03, 0x09, 0x1F, 0x04, 0xFF, 0x0B, -/* 00010560 */ 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x8B, 0x02, 0xFE, 0x37, 0x03, 0xFE, 0x87, 0x02, 0xFE, 0xD8, 0x01, -/* 00010570 */ 0xFF, 0x69, 0xBD, 0x01, 0x00, 0x09, 0x02, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x65, 0x00, 0x15, 0x00, -/* 00010580 */ 0x47, 0x00, 0x18, 0x00, 0x32, 0x00, 0x17, 0x00, 0x35, 0x00, 0x26, 0x00, 0x4B, 0x00, 0x18, 0x00, -/* 00010590 */ 0x37, 0x00, 0x33, 0x00, 0x65, 0x00, 0x23, 0x00, 0x46, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, -/* 000105A0 */ 0x88, 0x01, 0x00, 0xFE, 0xEB, 0x09, 0x04, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x71, 0x03, 0x96, 0xFF, -/* 000105B0 */ 0x22, 0xBA, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0x22, 0xBA, 0x01, 0x00, -/* 000105C0 */ 0xF8, 0xF8, 0x01, 0x05, 0x04, 0x06, 0x04, 0x1D, 0x1C, 0x02, 0x04, 0x02, 0x02, 0x02, 0x02, 0x05, -/* 000105D0 */ 0x08, 0x07, 0x5B, 0x8C, 0x02, 0x24, 0x07, 0x6A, 0x06, 0x07, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 000105E0 */ 0x07, 0x5A, 0x01, 0x04, 0x1F, 0x02, 0x06, 0x06, 0x47, 0x04, 0x06, 0x8C, 0x01, 0x0E, 0x06, 0x4B, -/* 000105F0 */ 0x06, 0x0F, 0x10, 0x00, 0x06, 0x8C, 0x01, 0x04, 0x06, 0x4B, 0x06, 0x07, 0x01, 0x00, 0x5A, 0x00, -/* 00010600 */ 0x02, 0x1F, 0x01, 0xFF, 0x06, 0x8C, 0x02, 0x03, 0x07, 0x6A, 0x06, 0x07, 0x01, 0x07, 0x03, 0x00, -/* 00010610 */ 0x5A, 0x00, 0x07, 0x5A, 0x01, 0x04, 0x8C, 0x01, 0x0E, 0x08, 0x4B, 0x08, 0x5A, 0x02, 0x08, 0x1F, -/* 00010620 */ 0x03, 0x06, 0x06, 0x44, 0x00, 0x06, 0x03, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x37, -/* 00010630 */ 0x03, 0xFE, 0x83, 0x02, 0xFF, 0x54, 0xBA, 0x01, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, -/* 00010640 */ 0x29, 0x00, 0x0A, 0x00, 0x25, 0x00, 0x10, 0x00, 0x2F, 0x00, 0x27, 0x00, 0x48, 0x00, 0x00, 0xBF, -/* 00010650 */ 0x5C, 0x00, 0x01, 0x00, 0x88, 0x01, 0x00, 0xFE, 0xB0, 0x09, 0x04, 0xA1, 0x41, 0xC1, 0x00, 0xFE, -/* 00010660 */ 0x7D, 0x03, 0x95, 0xFF, 0x1E, 0xA7, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFF, -/* 00010670 */ 0x1E, 0xA7, 0x01, 0x00, 0xFE, 0xFE, 0x12, 0xFE, 0xFE, 0x12, 0x41, 0x16, 0x25, 0x38, 0x04, 0xB0, -/* 00010680 */ 0x8A, 0x02, 0x01, 0x37, 0x05, 0xFE, 0xCC, 0x03, 0x05, 0xFE, 0xCD, 0x03, 0x05, 0xFE, 0xCE, 0x03, -/* 00010690 */ 0x06, 0xFE, 0xCF, 0x03, 0x06, 0xFE, 0xD0, 0x03, 0x05, 0xFE, 0xD1, 0x03, 0x05, 0xFE, 0xD2, 0x03, -/* 000106A0 */ 0x05, 0xFE, 0xD3, 0x03, 0x05, 0xFE, 0xD4, 0x03, 0x05, 0xFE, 0xD5, 0x03, 0x05, 0xFE, 0xD6, 0x03, -/* 000106B0 */ 0x05, 0xFE, 0xD7, 0x03, 0x05, 0xFE, 0xD8, 0x03, 0x05, 0xFE, 0xD9, 0x03, 0x05, 0xFE, 0xDA, 0x03, -/* 000106C0 */ 0x05, 0xFE, 0xDB, 0x03, 0x06, 0xFE, 0x5B, 0x03, 0x05, 0xFE, 0xDC, 0x03, 0x05, 0xFE, 0xDD, 0x03, -/* 000106D0 */ 0x05, 0xFE, 0xDE, 0x03, 0x05, 0xFE, 0xDF, 0x03, 0x05, 0xFE, 0xE0, 0x03, 0x05, 0xFE, 0xE1, 0x03, -/* 000106E0 */ 0x05, 0xFE, 0xE2, 0x03, 0x05, 0xFE, 0xE3, 0x03, 0x05, 0xFE, 0xE4, 0x03, 0x05, 0xFE, 0xE5, 0x03, -/* 000106F0 */ 0x05, 0xFE, 0xE6, 0x03, 0x05, 0xFE, 0xE7, 0x03, 0x05, 0xFE, 0xB5, 0x04, 0x05, 0xFE, 0xE8, 0x03, -/* 00010700 */ 0x05, 0xFE, 0xE9, 0x03, 0x05, 0xFE, 0xEA, 0x03, 0x05, 0xFE, 0xEB, 0x03, 0x06, 0xFE, 0xEE, 0x03, -/* 00010710 */ 0xFE, 0x89, 0x02, 0x4F, 0x25, 0x4F, 0x26, 0x4F, 0x27, 0x4F, 0x28, 0x4F, 0x29, 0x4F, 0x2A, 0x4F, -/* 00010720 */ 0x2B, 0x4F, 0x2C, 0x4F, 0x2D, 0x4F, 0x2E, 0x4F, 0x2F, 0x4F, 0x30, 0x4F, 0x31, 0x4F, 0x32, 0x4F, -/* 00010730 */ 0x33, 0x4F, 0x34, 0x4F, 0x35, 0x4F, 0x36, 0x47, 0x25, 0x02, 0x47, 0x26, 0x03, 0x47, 0x38, 0x04, -/* 00010740 */ 0x01, 0x04, 0x01, 0x39, 0x25, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x05, 0x01, 0x04, 0x01, -/* 00010750 */ 0x39, 0x26, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x06, 0x47, 0x27, 0x38, 0x47, 0x28, 0x07, -/* 00010760 */ 0x2F, 0x38, 0x08, 0x09, 0x47, 0x29, 0x38, 0x47, 0x38, 0x0A, 0x01, 0x04, 0x01, 0x39, 0x28, 0x2F, -/* 00010770 */ 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x05, 0x01, 0x04, 0x01, 0x39, 0x29, 0x2F, 0x38, 0x38, 0x39, -/* 00010780 */ 0x2F, 0x38, 0x38, 0x0B, 0x47, 0x2A, 0x38, 0x47, 0x38, 0x0C, 0x01, 0x04, 0x01, 0x39, 0x27, 0x2F, -/* 00010790 */ 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x0D, 0x47, 0x2B, 0x38, 0x47, 0x38, 0x0A, 0x01, 0x04, 0x01, -/* 000107A0 */ 0x39, 0x26, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x0E, 0x47, 0x2C, 0x38, 0x47, 0x38, 0x0A, -/* 000107B0 */ 0x01, 0x04, 0x01, 0x39, 0x2C, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x0F, 0x01, 0x04, 0x01, -/* 000107C0 */ 0x39, 0x27, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x10, 0x47, 0x2D, 0x38, 0x47, 0x38, 0x0A, -/* 000107D0 */ 0x01, 0x04, 0x01, 0x39, 0x27, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x11, 0x01, 0x04, 0x01, -/* 000107E0 */ 0x39, 0x26, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x12, 0x01, 0x04, 0x01, 0x39, 0x27, 0x2F, -/* 000107F0 */ 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x13, 0x47, 0x2E, 0x38, 0x47, 0x38, 0x0A, 0x01, 0x04, 0x01, -/* 00010800 */ 0x39, 0x25, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x14, 0x01, 0x04, 0x01, 0x39, 0x26, 0x2F, -/* 00010810 */ 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x13, 0x47, 0x2F, 0x38, 0x47, 0x38, 0x0A, 0x01, 0x04, 0x01, -/* 00010820 */ 0x39, 0x25, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x15, 0x47, 0x30, 0x38, 0x47, 0x38, 0x0A, -/* 00010830 */ 0x01, 0x04, 0x01, 0x39, 0x25, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x16, 0x01, 0x04, 0x01, -/* 00010840 */ 0x39, 0x25, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x17, 0x47, 0x31, 0x38, 0x47, 0x38, 0x12, -/* 00010850 */ 0x01, 0x04, 0x01, 0x39, 0x25, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x18, 0x2F, 0x38, 0x0A, -/* 00010860 */ 0x38, 0x47, 0x39, 0x19, 0x01, 0x04, 0x01, 0x3A, 0x31, 0x2F, 0x39, 0x39, 0x3A, 0x2F, 0x39, 0x39, -/* 00010870 */ 0x1A, 0x2F, 0x38, 0x38, 0x39, 0x47, 0x39, 0x05, 0x01, 0x04, 0x01, 0x3A, 0x25, 0x2F, 0x39, 0x39, -/* 00010880 */ 0x3A, 0x2F, 0x39, 0x39, 0x1B, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x0B, 0x47, 0x32, 0x38, -/* 00010890 */ 0x47, 0x38, 0x1C, 0x01, 0x04, 0x01, 0x39, 0x32, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x0B, -/* 000108A0 */ 0x47, 0x39, 0x1D, 0x01, 0x04, 0x01, 0x3A, 0x30, 0x2F, 0x39, 0x39, 0x3A, 0x2F, 0x39, 0x39, 0x1E, -/* 000108B0 */ 0x2F, 0x38, 0x38, 0x39, 0x47, 0x39, 0x1D, 0x01, 0x04, 0x01, 0x3A, 0x2F, 0x2F, 0x39, 0x39, 0x3A, -/* 000108C0 */ 0x2F, 0x39, 0x39, 0x1E, 0x2F, 0x38, 0x38, 0x39, 0x47, 0x33, 0x38, 0x47, 0x38, 0x19, 0x01, 0x04, -/* 000108D0 */ 0x01, 0x39, 0x2E, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x1F, 0x47, 0x39, 0x20, 0x01, 0x04, -/* 000108E0 */ 0x01, 0x3A, 0x2D, 0x2F, 0x39, 0x39, 0x3A, 0x2F, 0x39, 0x39, 0x21, 0x2F, 0x38, 0x38, 0x39, 0x47, -/* 000108F0 */ 0x39, 0x19, 0x01, 0x04, 0x01, 0x3A, 0x2B, 0x2F, 0x39, 0x39, 0x3A, 0x2F, 0x39, 0x39, 0x22, 0x2F, -/* 00010900 */ 0x38, 0x38, 0x39, 0x47, 0x34, 0x38, 0x47, 0x38, 0x23, 0x01, 0x04, 0x01, 0x39, 0x33, 0x2F, 0x38, -/* 00010910 */ 0x38, 0x39, 0x2F, 0x38, 0x38, 0x23, 0x01, 0x04, 0x01, 0x39, 0x34, 0x2F, 0x38, 0x38, 0x39, 0x2F, -/* 00010920 */ 0x38, 0x38, 0x23, 0x47, 0x35, 0x38, 0x47, 0x38, 0x0A, 0x01, 0x04, 0x01, 0x39, 0x35, 0x2F, 0x38, -/* 00010930 */ 0x38, 0x39, 0x2F, 0x38, 0x38, 0x05, 0x01, 0x04, 0x01, 0x39, 0x2B, 0x2F, 0x38, 0x38, 0x39, 0x2F, -/* 00010940 */ 0x38, 0x38, 0x05, 0x01, 0x04, 0x01, 0x39, 0x2A, 0x2F, 0x38, 0x38, 0x39, 0x2F, 0x38, 0x38, 0x0B, -/* 00010950 */ 0x47, 0x36, 0x38, 0x8C, 0x02, 0x09, 0x38, 0x07, 0x03, 0x00, 0x5A, 0x01, 0x33, 0x5A, 0x02, 0x24, -/* 00010960 */ 0xC1, 0x03, 0x38, 0x38, 0x01, 0x34, 0x01, 0x01, 0x0F, 0x38, 0x8C, 0x02, 0x09, 0x38, 0x07, 0x03, -/* 00010970 */ 0x00, 0x5A, 0x01, 0x34, 0x5A, 0x02, 0x24, 0xC1, 0x03, 0x38, 0x38, 0x01, 0x34, 0x01, 0x01, 0x10, -/* 00010980 */ 0x38, 0x8C, 0x02, 0x09, 0x38, 0x07, 0x03, 0x00, 0x5A, 0x01, 0x36, 0x5A, 0x02, 0x24, 0xC1, 0x03, -/* 00010990 */ 0x38, 0x38, 0x01, 0x34, 0x01, 0x01, 0x11, 0x38, 0xA6, 0x00, 0x24, 0x00, 0xFF, 0xFE, 0xAB, 0x01, -/* 000109A0 */ 0x00, 0x16, 0x24, 0x00, 0x00, 0x00, 0x03, 0x00, 0x1F, 0x00, 0x03, 0x00, 0x1F, 0x00, 0x20, 0x00, -/* 000109B0 */ 0x33, 0x00, 0x03, 0x00, 0x77, 0x00, 0x07, 0x00, 0xC0, 0x00, 0x20, 0x00, 0x44, 0x00, 0x13, 0x00, -/* 000109C0 */ 0x7D, 0x00, 0x13, 0x00, 0x94, 0x00, 0x20, 0x00, 0x83, 0x00, 0x2D, 0x00, 0x83, 0x00, 0x20, 0x00, -/* 000109D0 */ 0x74, 0x00, 0x13, 0x00, 0x6A, 0x00, 0x20, 0x00, 0x7A, 0x00, 0x43, 0x00, 0x00, 0x04, 0x3B, 0x00, -/* 000109E0 */ 0x4C, 0x01, 0x3B, 0x00, 0x5A, 0x01, 0x20, 0x00, 0x4B, 0x00, 0x2D, 0x00, 0x6E, 0x00, 0x17, 0x00, -/* 000109F0 */ 0x66, 0x00, 0x17, 0x00, 0x8B, 0x00, 0x19, 0x00, 0x72, 0x00, 0x00, 0xBF, 0x4C, 0x00, 0x00, 0x20, -/* 00010A00 */ 0x88, 0x01, 0x00, 0xFE, 0xA9, 0x09, 0x04, 0xA1, 0x41, 0xC1, 0x00, 0xFE, 0x65, 0x03, 0x94, 0xFF, -/* 00010A10 */ 0xE1, 0xA5, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFF, 0xE1, 0xA5, 0x01, 0x00, -/* 00010A20 */ 0x55, 0x55, 0x41, 0x02, 0x02, 0x03, 0x05, 0x05, 0x02, 0x01, 0x02, 0x0D, 0xE0, 0x03, 0x00, 0x01, -/* 00010A30 */ 0x34, 0x01, 0x01, 0x0E, 0x03, 0xA6, 0x00, 0x24, 0x00, 0x0A, 0xFE, 0xCA, 0x03, 0x01, 0xFF, 0x0F, -/* 00010A40 */ 0xA6, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x26, 0x00, 0x00, 0xBF, 0x5C, 0x00, -/* 00010A50 */ 0xC1, 0x43, 0xA8, 0x01, 0x00, 0xFE, 0x98, 0x09, 0x04, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x6E, 0x03, -/* 00010A60 */ 0x93, 0xFF, 0x7C, 0xA3, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x06, 0x06, 0xFF, 0x7C, 0xA3, -/* 00010A70 */ 0x01, 0x00, 0xFE, 0x45, 0x02, 0xFE, 0x45, 0x02, 0x01, 0x0C, 0x07, 0x0F, 0x08, 0x3A, 0x37, 0x02, -/* 00010A80 */ 0x05, 0x03, 0x03, 0x03, 0x03, 0x01, 0x0E, 0x0F, 0x06, 0xFE, 0xF5, 0x03, 0x08, 0x06, 0xFE, 0xC7, -/* 00010A90 */ 0x03, 0x05, 0xFE, 0xC8, 0x03, 0x06, 0xFE, 0xC9, 0x03, 0xC2, 0x4F, 0x0C, 0x4F, 0x0D, 0x95, 0x10, -/* 00010AA0 */ 0x07, 0x08, 0x47, 0x0C, 0x10, 0x2C, 0x10, 0x0C, 0x15, 0x03, 0x00, 0x10, 0x02, 0x09, 0xA2, 0x00, -/* 00010AB0 */ 0x8C, 0x02, 0x24, 0x11, 0x6A, 0x10, 0x11, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x11, 0x5A, 0x01, -/* 00010AC0 */ 0x0C, 0x1F, 0x02, 0x10, 0x10, 0x47, 0x0D, 0x10, 0x8C, 0x02, 0x21, 0x10, 0x07, 0x02, 0x00, 0x5A, -/* 00010AD0 */ 0x00, 0x03, 0x5A, 0x01, 0x0D, 0x1F, 0x02, 0x10, 0x10, 0x0F, 0x0D, 0x00, 0x10, 0x12, 0x08, 0x00, -/* 00010AE0 */ 0x0D, 0x09, 0x11, 0x03, 0x00, 0x0D, 0x0A, 0x09, 0x4D, 0x00, 0x8C, 0x02, 0x03, 0x11, 0x6A, 0x10, -/* 00010AF0 */ 0x11, 0x01, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x11, 0x8C, 0x02, 0x0B, 0x12, 0x07, 0x02, 0x00, 0x5A, -/* 00010B00 */ 0x00, 0x03, 0x5A, 0x01, 0x0C, 0x1F, 0x02, 0x12, 0x12, 0x5A, 0x01, 0x12, 0x8C, 0x02, 0x0B, 0x12, -/* 00010B10 */ 0x07, 0x02, 0x00, 0x5A, 0x00, 0x03, 0x5A, 0x01, 0x08, 0x1F, 0x02, 0x12, 0x12, 0x5A, 0x02, 0x12, -/* 00010B20 */ 0x2F, 0x12, 0x04, 0x09, 0x2F, 0x12, 0x12, 0x05, 0x2F, 0x12, 0x12, 0x0A, 0x2F, 0x12, 0x12, 0x06, -/* 00010B30 */ 0x5A, 0x03, 0x12, 0x1F, 0x04, 0xFF, 0x10, 0x8C, 0x02, 0x0F, 0x11, 0x6A, 0x10, 0x11, 0x02, 0x07, -/* 00010B40 */ 0x02, 0x00, 0x5A, 0x00, 0x11, 0x5A, 0x01, 0x0D, 0x1F, 0x02, 0x00, 0x10, 0x09, 0x0B, 0x00, 0x09, -/* 00010B50 */ 0x06, 0x00, 0x47, 0x00, 0x0B, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x38, 0x03, 0xFE, -/* 00010B60 */ 0x8F, 0x02, 0x23, 0xFF, 0xCE, 0xA3, 0x01, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x2D, -/* 00010B70 */ 0x00, 0x0B, 0x00, 0x33, 0x00, 0x18, 0x00, 0x41, 0x00, 0x22, 0x00, 0x65, 0x00, 0x4D, 0x00, 0x8D, -/* 00010B80 */ 0x00, 0x1B, 0x00, 0x40, 0x00, 0x08, 0x00, 0x1F, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, -/* 00010B90 */ 0x01, 0x00, 0xFE, 0x7E, 0x09, 0x04, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x64, 0x03, 0x92, 0xFF, 0x5F, -/* 00010BA0 */ 0xA0, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x06, 0x06, 0xFF, 0x5F, 0xA0, 0x01, 0x00, 0xFE, -/* 00010BB0 */ 0x17, 0x03, 0xFE, 0x17, 0x03, 0x01, 0x0B, 0x0A, 0x11, 0x0A, 0x51, 0x4B, 0x02, 0x06, 0x04, 0x04, -/* 00010BC0 */ 0x04, 0x04, 0x10, 0x06, 0xFE, 0xC2, 0x03, 0x06, 0xFE, 0xAD, 0x03, 0x06, 0xFE, 0xC3, 0x03, 0x08, -/* 00010BD0 */ 0x01, 0xFF, 0x05, 0xFE, 0xC4, 0x03, 0x05, 0xFE, 0xC6, 0x03, 0x05, 0xFE, 0xC5, 0x03, 0xFE, 0x10, -/* 00010BE0 */ 0x01, 0x4F, 0x0F, 0x95, 0x11, 0x0A, 0x0B, 0x47, 0x0F, 0x11, 0xA6, 0x11, 0x15, 0x03, 0x00, 0x0F, -/* 00010BF0 */ 0x11, 0x09, 0xF3, 0x00, 0x0C, 0x03, 0x00, 0x0C, 0x02, 0x09, 0x18, 0x00, 0x8C, 0x02, 0x24, 0x12, -/* 00010C00 */ 0x6A, 0x11, 0x12, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x12, 0x5A, 0x01, 0x0F, 0x1F, 0x02, 0x11, -/* 00010C10 */ 0x11, 0x47, 0x0F, 0x11, 0x0C, 0x03, 0x00, 0x0C, 0x03, 0x09, 0x18, 0x00, 0x8C, 0x02, 0x24, 0x12, -/* 00010C20 */ 0x6A, 0x11, 0x12, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x12, 0x5A, 0x01, 0x0F, 0x1F, 0x02, 0x11, -/* 00010C30 */ 0x11, 0x47, 0x0F, 0x11, 0x0C, 0x03, 0x00, 0x0C, 0x04, 0x09, 0x18, 0x00, 0x8C, 0x02, 0x24, 0x12, -/* 00010C40 */ 0x6A, 0x11, 0x12, 0x02, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x12, 0x5A, 0x01, 0x0F, 0x1F, 0x02, 0x11, -/* 00010C50 */ 0x11, 0x47, 0x0F, 0x11, 0xA6, 0x11, 0x15, 0x03, 0x00, 0x0D, 0x11, 0x09, 0x83, 0x00, 0x8C, 0x02, -/* 00010C60 */ 0x06, 0x11, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x05, 0x8C, 0x02, 0x17, 0x12, 0x5A, 0x01, 0x12, 0x5A, -/* 00010C70 */ 0x02, 0x0D, 0x5A, 0x03, 0x0F, 0x1F, 0x04, 0x11, 0x11, 0x0C, 0x03, 0x00, 0x11, 0x06, 0x09, 0x60, -/* 00010C80 */ 0x00, 0x8C, 0x02, 0x03, 0x12, 0x6A, 0x11, 0x12, 0x03, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x12, 0x8C, -/* 00010C90 */ 0x02, 0x0B, 0x13, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x05, 0x5A, 0x01, 0x0F, 0x1F, 0x02, 0x13, 0x13, -/* 00010CA0 */ 0x5A, 0x01, 0x13, 0x8C, 0x02, 0x0B, 0x13, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x05, 0x5A, 0x01, 0x0B, -/* 00010CB0 */ 0x1F, 0x02, 0x13, 0x13, 0x5A, 0x02, 0x13, 0x8C, 0x02, 0x06, 0x13, 0x07, 0x04, 0x00, 0x5A, 0x00, -/* 00010CC0 */ 0x05, 0x8C, 0x02, 0x19, 0x14, 0x5A, 0x01, 0x14, 0x5A, 0x02, 0x0D, 0x5A, 0x03, 0x08, 0x1F, 0x04, -/* 00010CD0 */ 0x13, 0x13, 0x2F, 0x13, 0x07, 0x13, 0x2F, 0x13, 0x13, 0x09, 0x5A, 0x03, 0x13, 0x1F, 0x04, 0xFF, -/* 00010CE0 */ 0x11, 0x47, 0x00, 0x0F, 0x09, 0x08, 0x00, 0x47, 0x00, 0x0E, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, -/* 00010CF0 */ 0x00, 0xFE, 0x39, 0x03, 0xFE, 0x37, 0x03, 0xFE, 0x38, 0x03, 0xFE, 0x8F, 0x02, 0xFF, 0xA7, 0xA0, -/* 00010D00 */ 0x01, 0x00, 0x0D, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x28, 0x00, 0x0A, 0x00, 0x27, 0x00, 0x08, -/* 00010D10 */ 0x00, 0x29, 0x00, 0x18, 0x00, 0x45, 0x00, 0x08, 0x00, 0x28, 0x00, 0x18, 0x00, 0x3D, 0x00, 0x08, -/* 00010D20 */ 0x00, 0x28, 0x00, 0x18, 0x00, 0x3D, 0x00, 0x2D, 0x00, 0x6B, 0x00, 0x60, 0x00, 0xA6, 0x00, 0x06, -/* 00010D30 */ 0x00, 0x21, 0x00, 0x08, 0x00, 0x15, 0x00, 0x00, 0x3F, 0x5C, 0x00, 0xC1, 0x13, 0x88, 0x25, 0x00, -/* 00010D40 */ 0xFE, 0x53, 0x09, 0x14, 0xA0, 0x41, 0xD1, 0x00, 0x8B, 0xFF, 0x4E, 0x9B, 0x01, 0x00, 0x06, 0xFF, -/* 00010D50 */ 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFF, 0x4E, 0x9B, 0x01, 0x00, 0xFE, 0xE0, 0x04, 0xFE, 0xE0, -/* 00010D60 */ 0x04, 0x04, 0x0A, 0x0B, 0x04, 0x17, 0x17, 0x02, 0x01, 0x06, 0x06, 0x06, 0x06, 0x01, 0x0A, 0x08, -/* 00010D70 */ 0x06, 0xFE, 0x36, 0x03, 0x06, 0xFE, 0x37, 0x03, 0x06, 0xFE, 0x38, 0x03, 0x06, 0xFE, 0x39, 0x03, -/* 00010D80 */ 0x06, 0xFE, 0x3A, 0x03, 0x06, 0xFE, 0xB4, 0x04, 0x07, 0x58, 0x8C, 0x02, 0x04, 0x0B, 0x07, 0x03, -/* 00010D90 */ 0x00, 0x5A, 0x00, 0x02, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, -/* 00010DA0 */ 0x00, 0xD6, 0x00, 0x0D, 0x0C, 0x78, 0x0D, 0x0C, 0x00, 0xD6, 0x01, 0x0D, 0x0C, 0x78, 0x0D, 0x0C, -/* 00010DB0 */ 0x01, 0xD6, 0x02, 0x0D, 0x0C, 0x78, 0x0D, 0x0C, 0x02, 0xD6, 0x03, 0x0D, 0x0C, 0x78, 0x0D, 0x0C, -/* 00010DC0 */ 0x03, 0xD6, 0x04, 0x0D, 0x0C, 0x78, 0x0D, 0x0C, 0x04, 0xD6, 0x05, 0x0D, 0x0C, 0x78, 0x0D, 0x0C, -/* 00010DD0 */ 0x05, 0x5A, 0x01, 0x0C, 0x5A, 0x02, 0x09, 0x1F, 0x03, 0x00, 0x0B, 0x09, 0x02, 0x00, 0xA6, 0x00, -/* 00010DE0 */ 0x24, 0x00, 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 00010DF0 */ 0x00, 0x36, 0x03, 0x00, 0x00, 0x37, 0x03, 0x00, 0x00, 0x38, 0x03, 0x00, 0x00, 0x39, 0x03, 0x00, -/* 00010E00 */ 0x00, 0x3A, 0x03, 0x00, 0x00, 0xB4, 0x04, 0x00, 0x00, 0xFE, 0x36, 0x03, 0xFE, 0x37, 0x03, 0xFE, -/* 00010E10 */ 0x38, 0x03, 0xFE, 0x39, 0x03, 0xFE, 0x3A, 0x03, 0xFE, 0xB4, 0x04, 0xFF, 0x64, 0x9B, 0x01, 0x00, -/* 00010E20 */ 0x02, 0x00, 0x00, 0x00, 0x00, 0x56, 0x00, 0xC9, 0x04, 0x00, 0x25, 0x11, 0x01, 0x00, 0xB1, 0x10, -/* 00010E30 */ 0x01, 0x00, 0x3D, 0x10, 0x01, 0x00, 0xC9, 0x0F, 0x01, 0x00, 0xE4, 0x0E, 0x01, 0x00, 0x42, 0x0E, -/* 00010E40 */ 0x01, 0x00, 0xBF, 0x7C, 0x00, 0x03, 0x00, 0x88, 0x0B, 0x00, 0xFE, 0x71, 0x09, 0x19, 0xA2, 0x41, -/* 00010E50 */ 0xC1, 0x00, 0xFE, 0xB4, 0x04, 0x91, 0xFF, 0x00, 0x00, 0x00, 0x02, 0xFF, 0xE2, 0x9E, 0x01, 0x00, -/* 00010E60 */ 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFF, 0xE2, 0x9E, 0x01, 0x00, 0xFE, 0x35, 0x01, 0xFE, -/* 00010E70 */ 0x35, 0x01, 0x01, 0x05, 0x04, 0x07, 0x05, 0x17, 0x15, 0x14, 0x02, 0x03, 0x01, 0x06, 0x00, 0x42, -/* 00010E80 */ 0x08, 0x0B, 0x46, 0xEA, 0x00, 0x0E, 0x3C, 0x00, 0x04, 0x8C, 0x02, 0x06, 0x07, 0x07, 0x04, 0x00, -/* 00010E90 */ 0x5A, 0x00, 0x02, 0x8C, 0x02, 0x13, 0x08, 0x5A, 0x01, 0x08, 0x5A, 0x02, 0x04, 0x5A, 0x03, 0x05, -/* 00010EA0 */ 0x1F, 0x04, 0x07, 0x07, 0x0E, 0x06, 0x00, 0x07, 0x47, 0x00, 0x03, 0x09, 0x19, 0x00, 0x8C, 0x02, -/* 00010EB0 */ 0x10, 0x07, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x04, 0x1F, 0x02, 0x07, 0x07, 0x47, -/* 00010EC0 */ 0x04, 0x07, 0x09, 0xBE, 0xFF, 0xA6, 0x00, 0x24, 0x00, 0xFF, 0x37, 0x9F, 0x01, 0x00, 0x05, 0x02, -/* 00010ED0 */ 0x00, 0x00, 0x00, 0x04, 0x00, 0x19, 0x00, 0x1F, 0x00, 0x54, 0x00, 0x06, 0x00, 0x37, 0x00, 0x19, -/* 00010EE0 */ 0x00, 0x3B, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x03, 0x00, 0xFE, 0x68, 0x09, 0x16, -/* 00010EF0 */ 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x3A, 0x03, 0x90, 0xFF, 0x00, 0x00, 0x00, 0x02, 0xFF, 0xCB, 0x9D, -/* 00010F00 */ 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0xCB, 0x9D, 0x01, 0x00, 0xFB, 0xFB, -/* 00010F10 */ 0x01, 0x09, 0x06, 0x0A, 0x07, 0x28, 0x23, 0x02, 0x04, 0x02, 0x02, 0x02, 0x02, 0x09, 0x08, 0x01, -/* 00010F20 */ 0x00, 0x01, 0x02, 0x01, 0x20, 0x82, 0x8C, 0x02, 0x0A, 0x0A, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, -/* 00010F30 */ 0x5A, 0x01, 0x06, 0x1F, 0x02, 0x0A, 0x0A, 0x47, 0x07, 0x0A, 0x47, 0x08, 0x03, 0x8C, 0x02, 0x21, -/* 00010F40 */ 0x0A, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x07, 0x1F, 0x02, 0x0A, 0x0A, 0x0F, 0x4C, -/* 00010F50 */ 0x00, 0x0A, 0x8C, 0x02, 0x20, 0x0A, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x07, 0x1F, -/* 00010F60 */ 0x02, 0x0A, 0x0A, 0x0E, 0x37, 0x00, 0x0A, 0x8C, 0x02, 0x0F, 0x0B, 0x6A, 0x0A, 0x0B, 0x00, 0x07, -/* 00010F70 */ 0x02, 0x00, 0x5A, 0x00, 0x0B, 0x47, 0x0C, 0x07, 0x8C, 0x02, 0x0F, 0x0E, 0x6A, 0x0D, 0x0E, 0x01, -/* 00010F80 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0E, 0x5A, 0x01, 0x04, 0x5A, 0x02, 0x05, 0x1F, 0x03, 0x0D, 0x0D, -/* 00010F90 */ 0x33, 0x0C, 0x0C, 0x0D, 0x5A, 0x01, 0x0C, 0x1F, 0x02, 0x0A, 0x0A, 0x47, 0x08, 0x0A, 0x47, 0x00, -/* 00010FA0 */ 0x08, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x1B, 0x29, 0xFF, 0xEA, 0x9D, 0x01, 0x00, 0x06, -/* 00010FB0 */ 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x29, 0x00, 0x03, 0x00, 0x19, 0x00, 0x2A, 0x00, 0x38, 0x00, -/* 00010FC0 */ 0x37, 0x00, 0x49, 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0x01, 0x00, 0x88, 0x03, -/* 00010FD0 */ 0x00, 0xFE, 0x64, 0x09, 0x1E, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x39, 0x03, 0x8F, 0xFF, 0x00, 0x00, -/* 00010FE0 */ 0x00, 0x02, 0xFF, 0x55, 0x9D, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0x55, -/* 00010FF0 */ 0x9D, 0x01, 0x00, 0x5D, 0x5D, 0x01, 0x03, 0x03, 0x05, 0x03, 0x10, 0x0E, 0x02, 0x01, 0x04, 0x08, -/* 00011000 */ 0x2D, 0xA6, 0x05, 0x15, 0x03, 0x00, 0x03, 0x05, 0x09, 0x17, 0x00, 0x8C, 0x02, 0x07, 0x05, 0x07, -/* 00011010 */ 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x03, 0x1F, 0x02, 0x05, 0x05, 0x47, 0x00, 0x05, 0x09, -/* 00011020 */ 0x05, 0x00, 0xA6, 0x05, 0x47, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFF, 0x74, -/* 00011030 */ 0x9D, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x3D, 0x00, 0x00, 0xBF, 0x5C, 0x00, -/* 00011040 */ 0x01, 0x00, 0x88, 0x03, 0x00, 0xFE, 0x60, 0x09, 0x16, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x38, 0x03, -/* 00011050 */ 0x8E, 0xFF, 0x00, 0x00, 0x00, 0x02, 0xFF, 0xDE, 0x9C, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, -/* 00011060 */ 0x02, 0x02, 0xFF, 0xDE, 0x9C, 0x01, 0x00, 0x56, 0x56, 0x01, 0x03, 0x03, 0x05, 0x03, 0x10, 0x0E, -/* 00011070 */ 0x02, 0x01, 0x04, 0x08, 0x2D, 0xA6, 0x05, 0x14, 0x03, 0x00, 0x03, 0x05, 0x09, 0x08, 0x00, 0xA7, -/* 00011080 */ 0x05, 0x47, 0x00, 0x05, 0x09, 0x14, 0x00, 0x8C, 0x02, 0x0A, 0x05, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 00011090 */ 0x02, 0x5A, 0x01, 0x03, 0x1F, 0x02, 0x05, 0x05, 0x47, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA6, 0x00, -/* 000110A0 */ 0x24, 0x00, 0xFF, 0xFD, 0x9C, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x36, 0x00, -/* 000110B0 */ 0x00, 0xBF, 0x5C, 0x00, 0x01, 0x00, 0x88, 0x03, 0x00, 0xFE, 0x5C, 0x09, 0x16, 0xA2, 0x41, 0xC1, -/* 000110C0 */ 0x00, 0xFE, 0x37, 0x03, 0x8D, 0xFF, 0x00, 0x00, 0x00, 0x02, 0xFF, 0x69, 0x9C, 0x01, 0x00, 0xFF, -/* 000110D0 */ 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0x69, 0x9C, 0x01, 0x00, 0x5C, 0x5C, 0x01, 0x03, 0x03, -/* 000110E0 */ 0x05, 0x03, 0x10, 0x0E, 0x02, 0x01, 0x04, 0x08, 0x2D, 0xA6, 0x05, 0x15, 0x03, 0x00, 0x03, 0x05, -/* 000110F0 */ 0x09, 0x17, 0x00, 0x8C, 0x02, 0x0B, 0x05, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x03, -/* 00011100 */ 0x1F, 0x02, 0x05, 0x05, 0x47, 0x00, 0x05, 0x09, 0x05, 0x00, 0xA6, 0x05, 0x47, 0x00, 0x05, 0x09, -/* 00011110 */ 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFF, 0x88, 0x9C, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -/* 00011120 */ 0x2B, 0x00, 0x3C, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x03, 0x00, 0xFE, 0x55, 0x09, -/* 00011130 */ 0x16, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x36, 0x03, 0x8C, 0xFF, 0x00, 0x00, 0x00, 0x02, 0xFF, 0x90, -/* 00011140 */ 0x9B, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0x90, 0x9B, 0x01, 0x00, 0xC0, -/* 00011150 */ 0xC0, 0x01, 0x04, 0x04, 0x06, 0x03, 0x17, 0x15, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x05, 0x07, -/* 00011160 */ 0x08, 0x47, 0x14, 0x03, 0x00, 0x04, 0x02, 0x09, 0x12, 0x00, 0x8C, 0x02, 0x03, 0x07, 0x6A, 0x06, -/* 00011170 */ 0x07, 0x00, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x07, 0x1F, 0x01, 0xFF, 0x06, 0xA6, 0x06, 0x15, 0x03, -/* 00011180 */ 0x00, 0x04, 0x06, 0x09, 0x17, 0x00, 0x8C, 0x02, 0x08, 0x06, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x03, -/* 00011190 */ 0x5A, 0x01, 0x04, 0x1F, 0x02, 0x06, 0x06, 0x47, 0x00, 0x06, 0x09, 0x05, 0x00, 0xA6, 0x06, 0x47, -/* 000111A0 */ 0x00, 0x06, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x89, 0x02, 0xFF, 0xAF, 0x9B, 0x01, -/* 000111B0 */ 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x26, 0x00, 0x12, 0x00, 0x3E, 0x00, 0x2B, 0x00, -/* 000111C0 */ 0x3C, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x63, 0xA8, 0x01, 0x00, 0xFE, 0x38, 0x09, 0x20, 0xA0, -/* 000111D0 */ 0x41, 0xC1, 0x00, 0xFE, 0xEC, 0x02, 0x8A, 0xFF, 0xC7, 0x97, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, -/* 000111E0 */ 0x00, 0x01, 0x01, 0xFF, 0xC7, 0x97, 0x01, 0x00, 0xFE, 0x70, 0x03, 0xFE, 0x70, 0x03, 0x01, 0x07, -/* 000111F0 */ 0x05, 0x08, 0x06, 0x3E, 0x3C, 0x02, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x07, 0x08, 0x08, -/* 00011200 */ 0x01, 0x00, 0x01, 0x01, 0xCB, 0x4F, 0x05, 0x4F, 0x06, 0x8C, 0x01, 0x0D, 0x09, 0x4B, 0x09, 0x0E, -/* 00011210 */ 0x09, 0x00, 0x09, 0x8C, 0x01, 0x0D, 0x00, 0x4B, 0x00, 0x09, 0xB2, 0x00, 0x8C, 0x02, 0x33, 0x09, -/* 00011220 */ 0x4B, 0x09, 0x0E, 0x68, 0x00, 0x09, 0x8C, 0x01, 0x0F, 0x09, 0x4B, 0x09, 0x0F, 0x10, 0x00, 0x09, -/* 00011230 */ 0x8C, 0x01, 0x05, 0x09, 0x4B, 0x09, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x02, 0x1F, 0x01, 0xFF, 0x09, -/* 00011240 */ 0x8C, 0x01, 0x0A, 0x09, 0x4B, 0x09, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x02, 0x1F, 0x01, 0x09, 0x09, -/* 00011250 */ 0x47, 0x05, 0x09, 0x8C, 0x02, 0x03, 0x0A, 0x6A, 0x09, 0x0A, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, -/* 00011260 */ 0x0A, 0x5A, 0x01, 0x05, 0x8C, 0x01, 0x0F, 0x0B, 0x4B, 0x0B, 0x5A, 0x02, 0x0B, 0x1F, 0x03, 0x09, -/* 00011270 */ 0x09, 0x47, 0x06, 0x09, 0x0E, 0x0D, 0x00, 0x06, 0x95, 0x09, 0x06, 0x03, 0x01, 0x34, 0x01, 0x01, -/* 00011280 */ 0x0D, 0x09, 0x09, 0x06, 0x00, 0x01, 0x34, 0x01, 0x01, 0x0D, 0x05, 0x09, 0x35, 0x00, 0x8C, 0x02, -/* 00011290 */ 0x03, 0x0A, 0x6A, 0x09, 0x0A, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0A, 0x8C, 0x01, 0x0A, 0x0B, -/* 000112A0 */ 0x4B, 0x0B, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x02, 0x1F, 0x01, 0x0B, 0x0B, 0x5A, 0x01, 0x0B, 0xE0, -/* 000112B0 */ 0x0B, 0x00, 0x5A, 0x02, 0x0B, 0x1F, 0x03, 0x09, 0x09, 0x95, 0x09, 0x09, 0x04, 0x01, 0x34, 0x01, -/* 000112C0 */ 0x01, 0x0D, 0x09, 0x8C, 0x01, 0x0D, 0x00, 0x4B, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, -/* 000112D0 */ 0xFE, 0x83, 0x02, 0x09, 0xFE, 0xB3, 0x04, 0x00, 0xFF, 0xDD, 0x97, 0x01, 0x00, 0x0D, 0x04, 0x00, -/* 000112E0 */ 0x00, 0x00, 0x0A, 0x00, 0x2B, 0x00, 0x09, 0x00, 0x33, 0x00, 0x0A, 0x00, 0x26, 0x00, 0x0A, 0x00, -/* 000112F0 */ 0x29, 0x00, 0x10, 0x00, 0x33, 0x00, 0x13, 0x00, 0x2C, 0x00, 0x21, 0x00, 0x4D, 0x00, 0x04, 0x00, -/* 00011300 */ 0x5B, 0x00, 0x0D, 0x00, 0x49, 0x00, 0x09, 0x00, 0xCB, 0x00, 0x35, 0x00, 0x6D, 0x00, 0x0B, 0x00, -/* 00011310 */ 0x24, 0x00, 0x00, 0xBF, 0x7C, 0x00, 0xC3, 0x03, 0x88, 0x09, 0x00, 0xFE, 0x26, 0x09, 0x19, 0xA2, -/* 00011320 */ 0x41, 0xC1, 0x00, 0xFE, 0xEB, 0x02, 0x89, 0xFF, 0xA4, 0x94, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, -/* 00011330 */ 0x00, 0x05, 0x05, 0xFF, 0xA4, 0x94, 0x01, 0x00, 0xFE, 0x91, 0x02, 0xFE, 0x91, 0x02, 0x01, 0x0C, -/* 00011340 */ 0x06, 0x10, 0x06, 0x3E, 0x33, 0x15, 0x02, 0x04, 0x01, 0x01, 0x01, 0x01, 0x01, 0x0F, 0x5A, 0x9F, -/* 00011350 */ 0x05, 0xFE, 0xBC, 0x03, 0x08, 0x01, 0x00, 0x01, 0x01, 0xC2, 0xA6, 0x0D, 0xA6, 0x0E, 0x14, 0x03, -/* 00011360 */ 0x00, 0x07, 0x02, 0x09, 0x0A, 0x00, 0x8C, 0x02, 0x27, 0x11, 0x47, 0x10, 0x11, 0x09, 0x07, 0x00, -/* 00011370 */ 0x8C, 0x02, 0x26, 0x11, 0x47, 0x10, 0x11, 0x47, 0x0A, 0x10, 0x8C, 0x02, 0x05, 0x10, 0x07, 0x02, -/* 00011380 */ 0x00, 0x5A, 0x00, 0x03, 0x5A, 0x01, 0x06, 0x1F, 0x02, 0x10, 0x10, 0x47, 0x0B, 0x10, 0x07, 0x01, -/* 00011390 */ 0x00, 0x5A, 0x00, 0x03, 0x1F, 0x01, 0x10, 0x09, 0x47, 0x0C, 0x10, 0xA6, 0x10, 0x15, 0x03, 0x00, -/* 000113A0 */ 0x0B, 0x10, 0x09, 0x06, 0x00, 0x47, 0x10, 0x0B, 0x09, 0x03, 0x00, 0x47, 0x10, 0x04, 0x47, 0x0B, -/* 000113B0 */ 0x10, 0x47, 0x0D, 0x04, 0xEA, 0x00, 0x12, 0x03, 0x00, 0x0D, 0x0B, 0x09, 0x3B, 0x00, 0x8C, 0x02, -/* 000113C0 */ 0x29, 0x10, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x03, 0x95, 0x11, 0x06, 0x0D, 0x5A, 0x01, 0x11, 0x5A, -/* 000113D0 */ 0x02, 0x0A, 0x5A, 0x03, 0x08, 0x5A, 0x04, 0x0C, 0x1F, 0x05, 0x10, 0x10, 0x47, 0x0E, 0x10, 0x5F, -/* 000113E0 */ 0x10, 0x0E, 0x00, 0xA6, 0x11, 0x15, 0x03, 0x00, 0x10, 0x11, 0x09, 0x06, 0x00, 0x47, 0x00, 0x0E, -/* 000113F0 */ 0x09, 0x27, 0x00, 0x28, 0x0D, 0x0D, 0x09, 0xBB, 0xFF, 0x8C, 0x02, 0x29, 0x10, 0x07, 0x05, 0x00, -/* 00011400 */ 0x5A, 0x00, 0x03, 0x5A, 0x01, 0x0C, 0x5A, 0x02, 0x0A, 0xA6, 0x11, 0x5A, 0x03, 0x11, 0x5A, 0x04, -/* 00011410 */ 0x0C, 0x1F, 0x05, 0x00, 0x10, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xF7, 0x01, 0xFF, -/* 00011420 */ 0xF3, 0x94, 0x01, 0x00, 0x0C, 0x04, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x58, 0x00, 0x14, 0x00, 0x34, -/* 00011430 */ 0x00, 0x0D, 0x00, 0x32, 0x00, 0x16, 0x00, 0x39, 0x00, 0x05, 0x00, 0x0B, 0x00, 0x08, 0x00, 0x1F, -/* 00011440 */ 0x00, 0x21, 0x00, 0x69, 0x00, 0x0E, 0x00, 0x35, 0x00, 0x06, 0x00, 0x4F, 0xFF, 0x06, 0x00, 0xE2, -/* 00011450 */ 0x00, 0x21, 0x00, 0x51, 0x00, 0x00, 0x3F, 0x5D, 0x00, 0xC1, 0x73, 0xAD, 0x25, 0x00, 0xFE, 0xEE, -/* 00011460 */ 0x08, 0x1E, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xEA, 0x02, 0x86, 0xFF, 0xF8, 0x8A, 0x01, 0x00, 0x02, -/* 00011470 */ 0xFF, 0x00, 0x10, 0x01, 0x00, 0x05, 0x05, 0xFF, 0xF8, 0x8A, 0x01, 0x00, 0xFE, 0x91, 0x09, 0xFE, -/* 00011480 */ 0x91, 0x09, 0x03, 0xFE, 0xAC, 0x04, 0xFE, 0xF7, 0x01, 0xFE, 0xAD, 0x04, 0x0E, 0x0B, 0x15, 0x05, -/* 00011490 */ 0x6D, 0x65, 0x02, 0x0B, 0x05, 0x05, 0x05, 0x05, 0x01, 0x01, 0x01, 0x12, 0x13, 0x14, 0x15, 0x07, -/* 000114A0 */ 0x08, 0x01, 0x01, 0x01, 0x00, 0x06, 0xFE, 0xAF, 0x03, 0x05, 0xFE, 0xAE, 0x04, 0x06, 0xFE, 0xF7, -/* 000114B0 */ 0x03, 0x06, 0xFE, 0xAF, 0x04, 0x06, 0xFE, 0xB0, 0x04, 0xFE, 0x70, 0x01, 0x94, 0x03, 0x0B, 0x94, -/* 000114C0 */ 0x04, 0x0D, 0x4F, 0x11, 0x8C, 0x02, 0x03, 0x17, 0x6A, 0x16, 0x17, 0x00, 0x07, 0x02, 0x00, 0x5A, -/* 000114D0 */ 0x00, 0x17, 0x90, 0x03, 0x18, 0x5A, 0x01, 0x18, 0x1F, 0x02, 0x16, 0x16, 0x47, 0x0F, 0x16, 0x14, -/* 000114E0 */ 0x03, 0x00, 0x0F, 0x02, 0x09, 0x17, 0x00, 0x8C, 0x02, 0x28, 0x16, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 000114F0 */ 0x03, 0x90, 0x03, 0x17, 0x5A, 0x01, 0x17, 0x1F, 0x02, 0x16, 0x16, 0x47, 0x0F, 0x16, 0x0E, 0x1E, -/* 00011500 */ 0x00, 0x0F, 0x8C, 0x02, 0x06, 0x16, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x8C, 0x02, 0x16, 0x17, -/* 00011510 */ 0x5A, 0x01, 0x17, 0x5A, 0x02, 0x0F, 0xD3, 0x00, 0x17, 0x5A, 0x03, 0x17, 0x1F, 0x04, 0xFF, 0x16, -/* 00011520 */ 0x8C, 0x02, 0x03, 0x17, 0x6A, 0x16, 0x17, 0x01, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x17, 0x90, 0x03, -/* 00011530 */ 0x18, 0x5A, 0x01, 0x18, 0xE0, 0x18, 0x00, 0x5A, 0x02, 0x18, 0x1F, 0x03, 0x16, 0x16, 0x95, 0x16, -/* 00011540 */ 0x16, 0x04, 0x94, 0x03, 0x16, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x03, 0x90, 0x03, 0x16, 0x5A, 0x01, -/* 00011550 */ 0x16, 0x5A, 0x02, 0x0E, 0x1F, 0x03, 0x16, 0x0C, 0x47, 0x10, 0x16, 0x90, 0x04, 0x16, 0xA6, 0x17, -/* 00011560 */ 0x15, 0x03, 0x00, 0x16, 0x17, 0x09, 0x2A, 0x00, 0xCC, 0x16, 0x00, 0x94, 0x02, 0x16, 0x8C, 0x02, -/* 00011570 */ 0x06, 0x16, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x8C, 0x02, 0x16, 0x17, 0x5A, 0x01, 0x17, 0x5A, -/* 00011580 */ 0x02, 0x0F, 0xD3, 0x01, 0x17, 0x5A, 0x03, 0x17, 0x1F, 0x04, 0xFF, 0x16, 0x90, 0x02, 0x16, 0x47, -/* 00011590 */ 0x0F, 0x16, 0x47, 0x11, 0x10, 0x0E, 0x5A, 0x00, 0x10, 0x0E, 0x2E, 0x00, 0x0F, 0x8C, 0x02, 0x05, -/* 000115A0 */ 0x16, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x03, 0x5A, 0x01, 0x0F, 0x1F, 0x02, 0x16, 0x16, 0x11, 0x03, -/* 000115B0 */ 0x00, 0x16, 0x05, 0x09, 0x15, 0x00, 0x8C, 0x02, 0x33, 0x16, 0x4B, 0x16, 0x0E, 0x07, 0x00, 0x16, -/* 000115C0 */ 0x2F, 0x10, 0x10, 0x06, 0x09, 0x04, 0x00, 0x2F, 0x10, 0x10, 0x07, 0x47, 0x16, 0x10, 0x8C, 0x02, -/* 000115D0 */ 0x06, 0x17, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x8C, 0x02, 0x19, 0x18, 0x5A, 0x01, 0x18, 0x5A, -/* 000115E0 */ 0x02, 0x0F, 0x5A, 0x03, 0x06, 0x1F, 0x04, 0x17, 0x17, 0x2F, 0x16, 0x16, 0x17, 0x47, 0x10, 0x16, -/* 000115F0 */ 0x09, 0x05, 0x00, 0xA6, 0x16, 0x47, 0x10, 0x16, 0x8C, 0x02, 0x04, 0x16, 0x07, 0x03, 0x00, 0x5A, -/* 00011600 */ 0x00, 0x03, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x78, -/* 00011610 */ 0x10, 0x17, 0x02, 0x78, 0x0F, 0x17, 0x03, 0x78, 0x11, 0x17, 0x04, 0x5A, 0x01, 0x17, 0x5A, 0x02, -/* 00011620 */ 0x02, 0x1F, 0x03, 0x00, 0x16, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x01, 0x14, 0x00, 0x00, -/* 00011630 */ 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0x01, 0x00, 0x00, 0xFB, -/* 00011640 */ 0x01, 0x00, 0x00, 0xF9, 0x01, 0x00, 0x00, 0xFE, 0xE0, 0x01, 0xFE, 0x83, 0x02, 0xFE, 0xF7, 0x01, -/* 00011650 */ 0xFE, 0xFB, 0x01, 0xFE, 0xF9, 0x01, 0x0D, 0xFE, 0xB1, 0x04, 0x00, 0xFF, 0x3C, 0x8B, 0x01, 0x00, -/* 00011660 */ 0x15, 0x08, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x36, 0x00, 0x08, 0x00, 0x81, 0x00, 0x17, 0x00, 0x3A, -/* 00011670 */ 0x00, 0x04, 0x00, 0x1B, 0x00, 0x1E, 0x00, 0x53, 0x02, 0x25, 0x00, 0x49, 0x00, 0x16, 0x00, 0x37, -/* 00011680 */ 0x00, 0x0D, 0x00, 0x50, 0x00, 0x06, 0x00, 0x1F, 0x00, 0x1E, 0x00, 0xB8, 0x01, 0x06, 0x00, 0xF9, -/* 00011690 */ 0x00, 0x03, 0x00, 0x29, 0x00, 0x04, 0x00, 0x1C, 0x00, 0x1D, 0x00, 0x3E, 0x00, 0x0A, 0x00, 0x2E, -/* 000116A0 */ 0x00, 0x07, 0x00, 0x3E, 0x00, 0x04, 0x00, 0x40, 0x00, 0x28, 0x00, 0x5C, 0x00, 0x05, 0x00, 0x29, -/* 000116B0 */ 0x00, 0x32, 0x00, 0x99, 0x00, 0x00, 0x8D, 0x17, 0x01, 0x00, 0xBE, 0x16, 0x01, 0x00, 0xBF, 0x5C, -/* 000116C0 */ 0x00, 0xC1, 0x23, 0x88, 0x01, 0x00, 0xFE, 0x03, 0x09, 0x3D, 0xA2, 0x41, 0xD1, 0x00, 0x88, 0xFF, -/* 000116D0 */ 0xBB, 0x8F, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0xBB, 0x8F, 0x01, 0x00, -/* 000116E0 */ 0xFE, 0x77, 0x01, 0xFE, 0x77, 0x01, 0x41, 0x07, 0x05, 0x09, 0x05, 0x22, 0x20, 0x03, 0x06, 0x01, -/* 000116F0 */ 0x01, 0x01, 0x01, 0x01, 0x08, 0x01, 0x01, 0x08, 0x01, 0xFF, 0x6F, 0x8C, 0x03, 0x03, 0x0A, 0x6A, -/* 00011700 */ 0x09, 0x0A, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0A, 0x5A, 0x01, 0x05, 0xE0, 0x0B, 0x00, 0x5A, -/* 00011710 */ 0x02, 0x0B, 0x1F, 0x03, 0x09, 0x09, 0x47, 0x06, 0x09, 0x95, 0x09, 0x06, 0x02, 0x47, 0x07, 0x09, -/* 00011720 */ 0x8C, 0x03, 0x06, 0x09, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x8C, 0x03, 0x17, 0x0A, 0x5A, 0x01, -/* 00011730 */ 0x0A, 0x8C, 0x01, 0x04, 0x0A, 0x5A, 0x02, 0x0A, 0x5A, 0x03, 0x07, 0x1F, 0x04, 0x09, 0x09, 0x15, -/* 00011740 */ 0x03, 0x00, 0x09, 0x04, 0x09, 0x1F, 0x00, 0x8C, 0x03, 0x06, 0x09, 0x07, 0x04, 0x00, 0x5A, 0x00, -/* 00011750 */ 0x03, 0x8C, 0x03, 0x18, 0x0A, 0x5A, 0x01, 0x0A, 0x8C, 0x01, 0x02, 0x0A, 0x5A, 0x02, 0x0A, 0x5A, -/* 00011760 */ 0x03, 0x05, 0x1F, 0x04, 0xFF, 0x09, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x83, 0x02, 0x0E, 0xFE, 0xB2, -/* 00011770 */ 0x04, 0x00, 0xFF, 0xDF, 0x8F, 0x01, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x7A, 0x00, -/* 00011780 */ 0x07, 0x00, 0x24, 0x00, 0x27, 0x00, 0x5F, 0x00, 0x21, 0x00, 0x55, 0x00, 0x00, 0xBF, 0x5C, 0x00, -/* 00011790 */ 0x01, 0x00, 0x88, 0x01, 0x00, 0xFE, 0xF6, 0x08, 0x3C, 0xA2, 0x41, 0xD1, 0x00, 0x87, 0xFF, 0x78, -/* 000117A0 */ 0x8C, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0x78, 0x8C, 0x01, 0x00, 0x7D, -/* 000117B0 */ 0x7D, 0x41, 0x04, 0x05, 0x07, 0x06, 0x0F, 0x0F, 0x03, 0x03, 0x06, 0x06, 0xFE, 0xAF, 0x03, 0x06, -/* 000117C0 */ 0xFE, 0x5B, 0x03, 0x08, 0x2E, 0x8C, 0x03, 0x06, 0x07, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x04, 0x8C, -/* 000117D0 */ 0x03, 0x1D, 0x08, 0x5A, 0x01, 0x08, 0x8C, 0x01, 0x03, 0x08, 0x5A, 0x02, 0x08, 0x2F, 0x08, 0x02, -/* 000117E0 */ 0x05, 0x5A, 0x03, 0x08, 0x5A, 0x04, 0x03, 0x1F, 0x05, 0x07, 0x07, 0x92, 0x01, 0x03, 0x07, 0xA6, -/* 000117F0 */ 0x00, 0x24, 0x00, 0xFF, 0x9C, 0x8C, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x2C, 0x00, 0x58, -/* 00011800 */ 0x00, 0x00, 0x3F, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x05, 0x00, 0xFE, 0xD5, 0x08, 0x1E, 0xA2, 0x41, -/* 00011810 */ 0xC1, 0x00, 0xFE, 0xE9, 0x02, 0x84, 0xFF, 0xC7, 0x86, 0x01, 0x00, 0x01, 0xFF, 0x00, 0x10, 0x01, -/* 00011820 */ 0x00, 0x02, 0x02, 0xFF, 0xC7, 0x86, 0x01, 0x00, 0xFE, 0x11, 0x04, 0xFE, 0x11, 0x04, 0x07, 0x05, -/* 00011830 */ 0x09, 0x04, 0x29, 0x26, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x08, 0x08, 0x01, 0x00, 0x06, 0xFE, -/* 00011840 */ 0xAF, 0x03, 0x7E, 0x4F, 0x06, 0x4F, 0x07, 0x8C, 0x01, 0x10, 0x09, 0x4B, 0x09, 0x0F, 0x10, 0x00, -/* 00011850 */ 0x09, 0x8C, 0x01, 0x05, 0x09, 0x4B, 0x09, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x02, 0x1F, 0x01, 0xFF, -/* 00011860 */ 0x09, 0x8C, 0x02, 0x03, 0x0A, 0x6A, 0x09, 0x0A, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0A, 0x5A, -/* 00011870 */ 0x01, 0x05, 0x8C, 0x01, 0x10, 0x0B, 0x4B, 0x0B, 0x5A, 0x02, 0x0B, 0x1F, 0x03, 0x09, 0x09, 0x47, -/* 00011880 */ 0x06, 0x09, 0x0F, 0x05, 0x00, 0x06, 0xA6, 0x00, 0x09, 0x34, 0x00, 0x95, 0x0B, 0x06, 0x03, 0x6A, -/* 00011890 */ 0x0A, 0x0B, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0B, 0x5A, 0x01, 0x04, 0x1F, 0x02, 0x0A, 0x0A, -/* 000118A0 */ 0x6A, 0x09, 0x0A, 0x02, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0A, 0xD3, 0x00, 0x0B, 0x5A, 0x01, 0x0B, -/* 000118B0 */ 0x1F, 0x02, 0x09, 0x09, 0x47, 0x07, 0x09, 0x47, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, -/* 000118C0 */ 0x00, 0xFE, 0x83, 0x02, 0xFE, 0x45, 0x01, 0x7E, 0xFF, 0xE3, 0x86, 0x01, 0x00, 0x08, 0x04, 0x00, -/* 000118D0 */ 0x00, 0x00, 0x0A, 0x00, 0x24, 0x00, 0x10, 0x00, 0x2B, 0x00, 0x21, 0x00, 0x4B, 0x00, 0x04, 0x00, -/* 000118E0 */ 0x1A, 0x00, 0x05, 0x00, 0x5C, 0x02, 0x2C, 0x00, 0xCD, 0x00, 0x08, 0x00, 0x17, 0x00, 0x00, 0xF3, -/* 000118F0 */ 0x18, 0x01, 0x00, 0xBF, 0x4C, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0xFE, 0xE8, 0x08, 0x36, 0xA2, -/* 00011900 */ 0x41, 0xD0, 0x00, 0x85, 0xFE, 0x01, 0x10, 0xFF, 0x21, 0x8A, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, -/* 00011910 */ 0x00, 0x02, 0x02, 0xFF, 0x21, 0x8A, 0x01, 0x00, 0x0A, 0x0A, 0x01, 0x02, 0x02, 0x03, 0x0A, 0x0A, -/* 00011920 */ 0x02, 0x17, 0xAA, 0x03, 0x0F, 0x02, 0x00, 0x02, 0xA9, 0x03, 0xAA, 0x00, 0x0F, 0x02, 0x00, 0x03, -/* 00011930 */ 0xA9, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFF, 0x28, 0x8A, 0x01, 0x00, 0x02, 0x00, -/* 00011940 */ 0x00, 0x00, 0x00, 0x15, 0x00, 0x03, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x43, 0xA8, 0x01, 0x00, -/* 00011950 */ 0xFE, 0xBE, 0x08, 0x1E, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xAB, 0x04, 0x83, 0xFF, 0x34, 0x82, 0x01, -/* 00011960 */ 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0x34, 0x82, 0x01, 0x00, 0xFE, 0x73, 0x04, -/* 00011970 */ 0xFE, 0x73, 0x04, 0x01, 0x09, 0x09, 0x0D, 0x04, 0x56, 0x4A, 0x02, 0x04, 0x05, 0x05, 0x05, 0x05, -/* 00011980 */ 0x01, 0x0C, 0x0D, 0x07, 0x08, 0x01, 0x01, 0x01, 0x02, 0x06, 0xFE, 0xAF, 0x03, 0x06, 0xFE, 0x5B, -/* 00011990 */ 0x03, 0x01, 0x03, 0xFE, 0x1B, 0x01, 0x4F, 0x0A, 0x4F, 0x0B, 0x8C, 0x02, 0x03, 0x0F, 0x5F, 0x0F, -/* 000119A0 */ 0x0F, 0x00, 0x6A, 0x0E, 0x0F, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0F, 0x5A, 0x01, 0x09, 0x1F, -/* 000119B0 */ 0x02, 0x0E, 0x0E, 0x47, 0x0A, 0x0E, 0xA6, 0x0E, 0x14, 0x03, 0x00, 0x0A, 0x0E, 0x09, 0xD4, 0x00, -/* 000119C0 */ 0x8C, 0x02, 0x03, 0x0F, 0x6A, 0x0E, 0x0F, 0x02, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0F, 0x5A, 0x01, -/* 000119D0 */ 0x09, 0x1F, 0x02, 0x0E, 0x0E, 0x47, 0x0A, 0x0E, 0x14, 0x03, 0x00, 0x0A, 0x02, 0x09, 0x7C, 0x00, -/* 000119E0 */ 0x8C, 0x01, 0x0F, 0x0E, 0x4B, 0x0E, 0x0F, 0x10, 0x00, 0x0E, 0x8C, 0x01, 0x05, 0x0E, 0x4B, 0x0E, -/* 000119F0 */ 0x07, 0x01, 0x00, 0x5A, 0x00, 0x03, 0x1F, 0x01, 0xFF, 0x0E, 0x8C, 0x02, 0x03, 0x0F, 0x6A, 0x0E, -/* 00011A00 */ 0x0F, 0x03, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0F, 0x5A, 0x01, 0x09, 0x8C, 0x01, 0x0F, 0x10, 0x4B, -/* 00011A10 */ 0x10, 0x5A, 0x02, 0x10, 0x1F, 0x03, 0x0E, 0x0E, 0x47, 0x0B, 0x0E, 0x95, 0x0E, 0x0B, 0x04, 0x95, -/* 00011A20 */ 0x0F, 0x0B, 0x05, 0x0E, 0x0E, 0x00, 0x0F, 0x95, 0x10, 0x0B, 0x05, 0x2F, 0x10, 0x06, 0x10, 0x47, -/* 00011A30 */ 0x0F, 0x10, 0x09, 0x03, 0x00, 0x47, 0x0F, 0x07, 0x2F, 0x0E, 0x0E, 0x0F, 0x95, 0x0F, 0x0B, 0x08, -/* 00011A40 */ 0x0E, 0x0E, 0x00, 0x0F, 0x95, 0x10, 0x0B, 0x08, 0x2F, 0x10, 0x06, 0x10, 0x47, 0x0F, 0x10, 0x09, -/* 00011A50 */ 0x03, 0x00, 0x47, 0x0F, 0x07, 0x2F, 0x0E, 0x0E, 0x0F, 0x47, 0x0A, 0x0E, 0x8C, 0x02, 0x03, 0x0F, -/* 00011A60 */ 0x5F, 0x0F, 0x0F, 0x00, 0x6A, 0x0E, 0x0F, 0x04, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0F, 0x5A, 0x01, -/* 00011A70 */ 0x09, 0xA6, 0x10, 0x14, 0x03, 0x00, 0x0A, 0x10, 0x09, 0x0C, 0x00, 0x8C, 0x02, 0x34, 0x11, 0x4B, -/* 00011A80 */ 0x11, 0x47, 0x10, 0x11, 0x09, 0x03, 0x00, 0x47, 0x10, 0x0A, 0x5A, 0x02, 0x10, 0x1F, 0x03, 0xFF, -/* 00011A90 */ 0x0E, 0x09, 0x13, 0x00, 0x8C, 0x02, 0x34, 0x0E, 0x4B, 0x0E, 0x14, 0x03, 0x00, 0x0A, 0x0E, 0x09, -/* 00011AA0 */ 0x05, 0x00, 0xA6, 0x0E, 0x47, 0x0A, 0x0E, 0x47, 0x00, 0x0A, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, -/* 00011AB0 */ 0x00, 0xFE, 0x62, 0x03, 0xFE, 0x84, 0x01, 0xFE, 0xDD, 0x01, 0xFE, 0x83, 0x02, 0xFE, 0x87, 0x01, -/* 00011AC0 */ 0xFF, 0x5E, 0x82, 0x01, 0x00, 0x0D, 0x04, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x53, 0x00, 0x0A, 0x00, -/* 00011AD0 */ 0x30, 0x00, 0x18, 0x00, 0x51, 0x00, 0x08, 0x00, 0x2F, 0x00, 0x0A, 0x00, 0x2D, 0x00, 0x10, 0x00, -/* 00011AE0 */ 0x3A, 0x00, 0x21, 0x00, 0xB1, 0x00, 0x41, 0x00, 0x34, 0x01, 0x38, 0x00, 0x80, 0x00, 0x0E, 0x00, -/* 00011AF0 */ 0x30, 0x00, 0x05, 0x00, 0x2E, 0x00, 0x08, 0x00, 0x1B, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x43, -/* 00011B00 */ 0xA8, 0x01, 0x00, 0xFE, 0xA3, 0x08, 0x1F, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xAA, 0x04, 0x82, 0xFF, -/* 00011B10 */ 0x8E, 0x7D, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFF, 0x8E, 0x7D, 0x01, 0x00, -/* 00011B20 */ 0xFE, 0x86, 0x04, 0xFE, 0x86, 0x04, 0x01, 0x0A, 0x09, 0x0E, 0x04, 0x5F, 0x52, 0x02, 0x04, 0x05, -/* 00011B30 */ 0x05, 0x05, 0x05, 0x01, 0x0D, 0x0E, 0x07, 0x08, 0x01, 0x01, 0x01, 0x02, 0x06, 0xFE, 0xAF, 0x03, -/* 00011B40 */ 0x06, 0xFE, 0x5B, 0x03, 0x01, 0x03, 0xFE, 0x3A, 0x01, 0x4F, 0x0C, 0x8C, 0x02, 0x03, 0x10, 0x5F, -/* 00011B50 */ 0x10, 0x10, 0x00, 0x6A, 0x0F, 0x10, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x10, 0x5A, 0x01, 0x09, -/* 00011B60 */ 0x1F, 0x02, 0x0F, 0x0F, 0x47, 0x0B, 0x0F, 0xA6, 0x0F, 0x14, 0x03, 0x00, 0x0B, 0x0F, 0x09, 0xD4, -/* 00011B70 */ 0x00, 0x8C, 0x02, 0x03, 0x10, 0x6A, 0x0F, 0x10, 0x02, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x10, 0x5A, -/* 00011B80 */ 0x01, 0x09, 0x1F, 0x02, 0x0F, 0x0F, 0x47, 0x0B, 0x0F, 0x14, 0x03, 0x00, 0x0B, 0x02, 0x09, 0x7C, -/* 00011B90 */ 0x00, 0x8C, 0x01, 0x0F, 0x0F, 0x4B, 0x0F, 0x0F, 0x10, 0x00, 0x0F, 0x8C, 0x01, 0x05, 0x0F, 0x4B, -/* 00011BA0 */ 0x0F, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x03, 0x1F, 0x01, 0xFF, 0x0F, 0x8C, 0x02, 0x03, 0x10, 0x6A, -/* 00011BB0 */ 0x0F, 0x10, 0x03, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x10, 0x5A, 0x01, 0x09, 0x8C, 0x01, 0x0F, 0x11, -/* 00011BC0 */ 0x4B, 0x11, 0x5A, 0x02, 0x11, 0x1F, 0x03, 0x0F, 0x0F, 0x47, 0x0C, 0x0F, 0x95, 0x0F, 0x0C, 0x04, -/* 00011BD0 */ 0x95, 0x10, 0x0C, 0x05, 0x0E, 0x0E, 0x00, 0x10, 0x95, 0x11, 0x0C, 0x05, 0x2F, 0x11, 0x06, 0x11, -/* 00011BE0 */ 0x47, 0x10, 0x11, 0x09, 0x03, 0x00, 0x47, 0x10, 0x07, 0x2F, 0x0F, 0x0F, 0x10, 0x95, 0x10, 0x0C, -/* 00011BF0 */ 0x08, 0x0E, 0x0E, 0x00, 0x10, 0x95, 0x11, 0x0C, 0x08, 0x2F, 0x11, 0x06, 0x11, 0x47, 0x10, 0x11, -/* 00011C00 */ 0x09, 0x03, 0x00, 0x47, 0x10, 0x07, 0x2F, 0x0F, 0x0F, 0x10, 0x47, 0x0B, 0x0F, 0x8C, 0x02, 0x03, -/* 00011C10 */ 0x10, 0x5F, 0x10, 0x10, 0x00, 0x6A, 0x0F, 0x10, 0x04, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x10, 0x5A, -/* 00011C20 */ 0x01, 0x09, 0xA6, 0x11, 0x14, 0x03, 0x00, 0x0B, 0x11, 0x09, 0x0C, 0x00, 0x8C, 0x02, 0x34, 0x12, -/* 00011C30 */ 0x4B, 0x12, 0x47, 0x11, 0x12, 0x09, 0x03, 0x00, 0x47, 0x11, 0x0B, 0x5A, 0x02, 0x11, 0x1F, 0x03, -/* 00011C40 */ 0xFF, 0x0F, 0x09, 0x13, 0x00, 0x8C, 0x02, 0x34, 0x0F, 0x4B, 0x0F, 0x14, 0x03, 0x00, 0x0B, 0x0F, -/* 00011C50 */ 0x09, 0x05, 0x00, 0xA6, 0x0F, 0x47, 0x0B, 0x0F, 0x14, 0x03, 0x00, 0x0A, 0x09, 0x09, 0x09, 0x00, -/* 00011C60 */ 0x47, 0x00, 0x0B, 0x09, 0x1B, 0x00, 0x09, 0x16, 0x00, 0x14, 0x03, 0x00, 0x0A, 0x0B, 0x09, 0x08, -/* 00011C70 */ 0x00, 0xA6, 0x00, 0x09, 0x0B, 0x00, 0x09, 0x06, 0x00, 0x47, 0x00, 0x0B, 0x09, 0x02, 0x00, 0xA6, -/* 00011C80 */ 0x00, 0x24, 0x00, 0xFE, 0x63, 0x03, 0xFE, 0x84, 0x01, 0xFE, 0xDE, 0x01, 0xFE, 0x83, 0x02, 0xFE, -/* 00011C90 */ 0x87, 0x01, 0xFF, 0xB9, 0x7D, 0x01, 0x00, 0x11, 0x02, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x46, 0x00, -/* 00011CA0 */ 0x0A, 0x00, 0x30, 0x00, 0x18, 0x00, 0x44, 0x00, 0x08, 0x00, 0x2F, 0x00, 0x0A, 0x00, 0x2D, 0x00, -/* 00011CB0 */ 0x10, 0x00, 0x3A, 0x00, 0x21, 0x00, 0x52, 0x00, 0x41, 0x00, 0x0C, 0x01, 0x38, 0x00, 0x73, 0x00, -/* 00011CC0 */ 0x0E, 0x00, 0x30, 0x00, 0x05, 0x00, 0x2F, 0x00, 0x08, 0x00, 0x2C, 0x00, 0x09, 0x00, 0x26, 0x00, -/* 00011CD0 */ 0x08, 0x00, 0x34, 0x00, 0x08, 0x00, 0x2F, 0x00, 0x08, 0x00, 0x25, 0x00, 0x00, 0xBF, 0x5C, 0x00, -/* 00011CE0 */ 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x9F, 0x08, 0x1C, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xE6, 0x02, -/* 00011CF0 */ 0x81, 0xFF, 0x1B, 0x7D, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFF, 0x1B, 0x7D, -/* 00011D00 */ 0x01, 0x00, 0x51, 0x51, 0x01, 0x05, 0x02, 0x05, 0x04, 0x0B, 0x0B, 0x02, 0x01, 0x01, 0x01, 0x01, -/* 00011D10 */ 0x01, 0x04, 0x1F, 0x8C, 0x02, 0x03, 0x06, 0x6A, 0x05, 0x06, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, -/* 00011D20 */ 0x06, 0x5A, 0x01, 0x03, 0x5A, 0x02, 0x02, 0x1F, 0x03, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA6, 0x00, -/* 00011D30 */ 0x24, 0x00, 0xFE, 0xFD, 0x01, 0xFF, 0x38, 0x7D, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x1D, -/* 00011D40 */ 0x00, 0x33, 0x00, 0x00, 0xBF, 0x4C, 0x00, 0xC0, 0x03, 0x80, 0x01, 0x00, 0xFE, 0x99, 0x08, 0x1C, -/* 00011D50 */ 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xE5, 0x02, 0x80, 0xFF, 0x81, 0x7C, 0x01, 0x00, 0xFF, 0x00, 0x10, -/* 00011D60 */ 0x01, 0x00, 0x02, 0x02, 0xFF, 0x81, 0x7C, 0x01, 0x00, 0x7B, 0x7B, 0x41, 0x02, 0x04, 0x05, 0x09, -/* 00011D70 */ 0x09, 0x02, 0x01, 0x01, 0x01, 0x01, 0x03, 0x1C, 0x00, 0x0A, 0x80, 0x03, 0x07, 0x00, 0x0A, 0x80, -/* 00011D80 */ 0x1B, 0x5F, 0x05, 0x04, 0x00, 0x14, 0x0C, 0x00, 0x05, 0x02, 0x5F, 0x05, 0x04, 0x00, 0x14, 0x03, -/* 00011D90 */ 0x00, 0x05, 0x03, 0x09, 0x02, 0x00, 0x23, 0x04, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xFE, 0x00, 0xFF, -/* 00011DA0 */ 0x99, 0x7C, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x4A, 0x00, 0x04, 0x00, 0x18, -/* 00011DB0 */ 0x00, 0x00, 0xBF, 0x7C, 0x02, 0x02, 0x00, 0x80, 0x09, 0x00, 0xFE, 0x8E, 0x08, 0x1B, 0xA2, 0x41, -/* 00011DC0 */ 0xC1, 0x00, 0xFE, 0xE8, 0x02, 0x7F, 0xFF, 0x28, 0x7B, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, -/* 00011DD0 */ 0x04, 0x04, 0xFF, 0x28, 0x7B, 0x01, 0x00, 0xD5, 0xD5, 0x41, 0x06, 0x05, 0x09, 0x03, 0x12, 0x10, -/* 00011DE0 */ 0x0D, 0x02, 0x01, 0x01, 0x05, 0x33, 0x01, 0x00, 0x08, 0x01, 0x01, 0x37, 0x4F, 0x08, 0x47, 0x08, -/* 00011DF0 */ 0x02, 0xEA, 0x00, 0x12, 0x03, 0x00, 0x08, 0x06, 0x09, 0x24, 0x00, 0xB9, 0x09, 0x08, 0x05, 0x00, -/* 00011E00 */ 0x00, 0x0E, 0x14, 0x00, 0x09, 0x47, 0x09, 0x07, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x03, 0x95, 0x0A, -/* 00011E10 */ 0x05, 0x08, 0x5A, 0x01, 0x0A, 0x1F, 0x02, 0xFF, 0x09, 0x28, 0x08, 0x08, 0x09, 0xD2, 0xFF, 0xA6, -/* 00011E20 */ 0x00, 0x24, 0x00, 0xFF, 0x4F, 0x7B, 0x01, 0x00, 0x06, 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x20, -/* 00011E30 */ 0x00, 0x08, 0x00, 0x20, 0x00, 0x0A, 0x00, 0x26, 0x00, 0x14, 0x00, 0x2E, 0x00, 0x08, 0x00, 0x19, -/* 00011E40 */ 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x43, 0xA8, 0x01, 0x00, 0xFE, 0x81, 0x08, 0x22, 0xA2, 0x41, -/* 00011E50 */ 0xC1, 0x00, 0xFE, 0x7F, 0x03, 0x7E, 0xFF, 0x9F, 0x79, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, -/* 00011E60 */ 0x02, 0x02, 0xFF, 0x9F, 0x79, 0x01, 0x00, 0xFE, 0x6B, 0x01, 0xFE, 0x6B, 0x01, 0x01, 0x08, 0x04, -/* 00011E70 */ 0x08, 0x04, 0x2A, 0x27, 0x02, 0x03, 0x02, 0x02, 0x02, 0x02, 0x01, 0x07, 0x08, 0x07, 0x08, 0x7F, -/* 00011E80 */ 0x4F, 0x05, 0x4F, 0x06, 0x8C, 0x02, 0x03, 0x0A, 0x6A, 0x09, 0x0A, 0x00, 0x07, 0x02, 0x00, 0x5A, -/* 00011E90 */ 0x00, 0x0A, 0x5A, 0x01, 0x04, 0x1F, 0x02, 0x09, 0x09, 0x47, 0x05, 0x09, 0x14, 0x03, 0x00, 0x05, -/* 00011EA0 */ 0x02, 0x09, 0x51, 0x00, 0x8C, 0x01, 0x11, 0x09, 0x4B, 0x09, 0x0F, 0x10, 0x00, 0x09, 0x8C, 0x01, -/* 00011EB0 */ 0x05, 0x09, 0x4B, 0x09, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x03, 0x1F, 0x01, 0xFF, 0x09, 0x8C, 0x02, -/* 00011EC0 */ 0x03, 0x0A, 0x6A, 0x09, 0x0A, 0x01, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0A, 0x5A, 0x01, 0x04, 0x8C, -/* 00011ED0 */ 0x01, 0x11, 0x0B, 0x4B, 0x0B, 0x5A, 0x02, 0x0B, 0x1F, 0x03, 0x09, 0x09, 0x47, 0x06, 0x09, 0xAA, -/* 00011EE0 */ 0x09, 0x0F, 0x02, 0x00, 0x06, 0xA9, 0x09, 0xAA, 0x00, 0x0F, 0x02, 0x00, 0x09, 0xA9, 0x00, 0x09, -/* 00011EF0 */ 0x0B, 0x00, 0x09, 0x06, 0x00, 0x47, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, -/* 00011F00 */ 0xD7, 0x01, 0xFE, 0x83, 0x02, 0xFF, 0xBC, 0x79, 0x01, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x18, -/* 00011F10 */ 0x00, 0x40, 0x00, 0x08, 0x00, 0x23, 0x00, 0x0A, 0x00, 0x24, 0x00, 0x10, 0x00, 0x32, 0x00, 0x21, -/* 00011F20 */ 0x00, 0x4A, 0x00, 0x16, 0x00, 0x2D, 0x00, 0x08, 0x00, 0x1D, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, -/* 00011F30 */ 0x03, 0x88, 0x01, 0x00, 0xFE, 0x74, 0x08, 0x1F, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x7E, 0x03, 0x7D, -/* 00011F40 */ 0xFF, 0x90, 0x77, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFF, 0x90, 0x77, 0x01, -/* 00011F50 */ 0x00, 0xFE, 0xEA, 0x01, 0xFE, 0xEA, 0x01, 0x41, 0x06, 0x05, 0x09, 0x04, 0x14, 0x12, 0x02, 0x01, -/* 00011F60 */ 0x03, 0x03, 0x03, 0x03, 0x08, 0x07, 0x06, 0xFE, 0x5B, 0x03, 0x05, 0xFE, 0xA9, 0x04, 0x3F, 0x4F, -/* 00011F70 */ 0x07, 0x8C, 0x02, 0x03, 0x0A, 0x6A, 0x09, 0x0A, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0A, 0x5A, -/* 00011F80 */ 0x01, 0x05, 0x5A, 0x02, 0x06, 0x1F, 0x03, 0x09, 0x09, 0x47, 0x07, 0x09, 0x14, 0x03, 0x00, 0x07, -/* 00011F90 */ 0x02, 0x09, 0x16, 0x00, 0x74, 0x03, 0x05, 0x01, 0x47, 0x09, 0x05, 0xCC, 0x0A, 0x02, 0x9F, 0x00, -/* 00011FA0 */ 0x04, 0x0A, 0x9F, 0x01, 0x03, 0x0A, 0x74, 0x0A, 0x09, 0x02, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xE4, -/* 00011FB0 */ 0x01, 0xFE, 0x0C, 0x02, 0xFE, 0x30, 0x02, 0xFF, 0xBF, 0x77, 0x01, 0x00, 0x05, 0x02, 0x00, 0x00, -/* 00011FC0 */ 0x00, 0x1B, 0x00, 0x4F, 0x00, 0x08, 0x00, 0x71, 0x00, 0x04, 0x00, 0x33, 0x00, 0x14, 0x00, 0xC7, -/* 00011FD0 */ 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x63, 0x08, 0x1D, 0xA0, 0x41, -/* 00011FE0 */ 0xC1, 0x00, 0xFE, 0x67, 0x03, 0x7C, 0xFF, 0xA5, 0x75, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, -/* 00011FF0 */ 0x01, 0x01, 0xFF, 0xA5, 0x75, 0x01, 0x00, 0xFE, 0xC9, 0x01, 0xFE, 0xC9, 0x01, 0x01, 0x04, 0x03, -/* 00012000 */ 0x05, 0x02, 0x1A, 0x19, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x04, 0x05, 0xFE, 0xAE, 0x03, 0x56, -/* 00012010 */ 0x4F, 0x03, 0x8C, 0x01, 0x09, 0x05, 0x4B, 0x05, 0x0E, 0x15, 0x00, 0x05, 0x8C, 0x02, 0x03, 0x05, -/* 00012020 */ 0x5F, 0x05, 0x05, 0x00, 0x0E, 0x09, 0x00, 0x05, 0x8C, 0x01, 0x09, 0x00, 0x4B, 0x00, 0x09, 0x33, -/* 00012030 */ 0x00, 0x8C, 0x02, 0x03, 0x06, 0x6A, 0x05, 0x06, 0x01, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x06, 0x1F, -/* 00012040 */ 0x01, 0x05, 0x05, 0x47, 0x03, 0x05, 0x0F, 0x09, 0x00, 0x03, 0x01, 0x34, 0x01, 0x01, 0x09, 0x02, -/* 00012050 */ 0x09, 0x06, 0x00, 0x01, 0x34, 0x01, 0x01, 0x09, 0x03, 0x8C, 0x01, 0x09, 0x00, 0x4B, 0x00, 0x09, -/* 00012060 */ 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x61, 0x03, 0xFE, 0xDF, 0x01, 0xFF, 0xBB, 0x75, 0x01, -/* 00012070 */ 0x00, 0x08, 0x02, 0x00, 0x00, 0x00, 0x16, 0x00, 0x39, 0x00, 0x09, 0x00, 0x2B, 0x00, 0x15, 0x00, -/* 00012080 */ 0x34, 0x00, 0x04, 0x00, 0x9C, 0x00, 0x09, 0x00, 0x35, 0x00, 0x06, 0x00, 0x2D, 0x00, 0x0B, 0x00, -/* 00012090 */ 0x1C, 0x00, 0x00, 0x3F, 0x5D, 0x00, 0xC1, 0x13, 0x8D, 0x25, 0x00, 0xFE, 0xAF, 0x07, 0x19, 0xA0, -/* 000120A0 */ 0x41, 0xD1, 0x00, 0x74, 0xFF, 0xEC, 0x5A, 0x01, 0x00, 0x06, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, -/* 000120B0 */ 0x01, 0xFF, 0xEC, 0x5A, 0x01, 0x00, 0xFE, 0x5B, 0x16, 0xFE, 0x5B, 0x16, 0x03, 0xFE, 0x9A, 0x04, -/* 000120C0 */ 0xFE, 0x9B, 0x04, 0xFE, 0x9C, 0x04, 0x0C, 0x14, 0x1C, 0x05, 0x8F, 0x89, 0x02, 0x05, 0x07, 0x07, -/* 000120D0 */ 0x07, 0x07, 0x05, 0x19, 0x1A, 0x1B, 0x06, 0xFE, 0x3D, 0x03, 0x05, 0xFE, 0x9D, 0x04, 0x08, 0x06, -/* 000120E0 */ 0xFE, 0x0B, 0x04, 0x06, 0xFE, 0x40, 0x03, 0x07, 0x06, 0xFE, 0x42, 0x03, 0x0C, 0x06, 0xFE, 0x43, -/* 000120F0 */ 0x03, 0x06, 0xFE, 0x44, 0x03, 0x05, 0xFE, 0x9E, 0x04, 0x06, 0xFE, 0x3F, 0x03, 0x06, 0xFE, 0x4C, -/* 00012100 */ 0x03, 0x0B, 0x05, 0xFE, 0x9F, 0x04, 0x06, 0xFE, 0xA0, 0x04, 0x05, 0xFE, 0xA1, 0x04, 0x06, 0xFE, -/* 00012110 */ 0x0D, 0x04, 0xFE, 0xFD, 0x01, 0x4F, 0x14, 0x4F, 0x15, 0x4F, 0x16, 0x4F, 0x17, 0x4F, 0x18, 0x4F, -/* 00012120 */ 0x1C, 0x94, 0x02, 0x1C, 0x4F, 0x1C, 0x94, 0x03, 0x1C, 0x4F, 0x1C, 0x94, 0x04, 0x1C, 0x8C, 0x02, -/* 00012130 */ 0x32, 0x1C, 0x15, 0x03, 0x00, 0x1C, 0x02, 0x09, 0x05, 0x00, 0xA6, 0x00, 0x09, 0xD1, 0x01, 0xD3, -/* 00012140 */ 0x00, 0x1C, 0x94, 0x02, 0x1C, 0xD3, 0x01, 0x1C, 0x94, 0x03, 0x1C, 0xD3, 0x02, 0x1C, 0x47, 0x14, -/* 00012150 */ 0x1C, 0x8C, 0x02, 0x23, 0x1C, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x03, 0x5A, 0x02, -/* 00012160 */ 0x14, 0x1F, 0x03, 0xFF, 0x1C, 0x8C, 0x02, 0x37, 0x1D, 0x4B, 0x1D, 0x6A, 0x1C, 0x1D, 0x00, 0x07, -/* 00012170 */ 0x04, 0x00, 0x5A, 0x00, 0x1D, 0x5A, 0x01, 0x14, 0x5A, 0x02, 0x05, 0xCB, 0x00, 0x00, 0x00, 0x00, -/* 00012180 */ 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0xCA, 0x1F, 0x78, 0x1F, 0x1E, 0x01, 0x78, 0x09, -/* 00012190 */ 0x1E, 0x02, 0x78, 0x09, 0x1E, 0x03, 0x78, 0x09, 0x1E, 0x04, 0x5A, 0x03, 0x1E, 0x1F, 0x04, 0xFF, -/* 000121A0 */ 0x1C, 0x94, 0x04, 0x0C, 0x8C, 0x02, 0x23, 0x1C, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x04, 0x90, 0x04, -/* 000121B0 */ 0x1D, 0x5A, 0x01, 0x1D, 0xD3, 0x03, 0x1D, 0x5A, 0x02, 0x1D, 0x1F, 0x03, 0x1C, 0x1C, 0x47, 0x15, -/* 000121C0 */ 0x1C, 0x8C, 0x02, 0x37, 0x1D, 0x4B, 0x1D, 0x6A, 0x1C, 0x1D, 0x05, 0x07, 0x03, 0x00, 0x5A, 0x00, -/* 000121D0 */ 0x1D, 0x5A, 0x01, 0x15, 0x8C, 0x01, 0x16, 0x1E, 0x4B, 0x1E, 0x5A, 0x02, 0x1E, 0x1F, 0x03, 0x1C, -/* 000121E0 */ 0x1C, 0x47, 0x16, 0x1C, 0x8C, 0x02, 0x37, 0x1D, 0x4B, 0x1D, 0x6A, 0x1C, 0x1D, 0x00, 0x07, 0x04, -/* 000121F0 */ 0x00, 0x5A, 0x00, 0x1D, 0x5A, 0x01, 0x16, 0x5A, 0x02, 0x0D, 0xCB, 0x18, 0x00, 0x00, 0x00, 0x01, -/* 00012200 */ 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x78, 0x0E, 0x1E, 0x01, 0x78, 0x09, 0x1E, 0x02, 0x78, -/* 00012210 */ 0x09, 0x1E, 0x03, 0x78, 0x0F, 0x1E, 0x04, 0x5A, 0x03, 0x1E, 0x1F, 0x04, 0xFF, 0x1C, 0x8C, 0x02, -/* 00012220 */ 0x37, 0x1D, 0x4B, 0x1D, 0x6A, 0x1C, 0x1D, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x1D, 0x5A, 0x01, -/* 00012230 */ 0x14, 0x5A, 0x02, 0x0E, 0xCB, 0x30, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, -/* 00012240 */ 0x00, 0x78, 0x16, 0x1E, 0x01, 0x78, 0x0F, 0x1E, 0x02, 0x78, 0x09, 0x1E, 0x03, 0x78, 0x0F, 0x1E, -/* 00012250 */ 0x04, 0x5A, 0x03, 0x1E, 0x1F, 0x04, 0xFF, 0x1C, 0xD3, 0x04, 0x1C, 0x47, 0x17, 0x1C, 0x8C, 0x02, -/* 00012260 */ 0x23, 0x1C, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x10, 0x5A, 0x02, 0x17, 0x1F, 0x03, -/* 00012270 */ 0xFF, 0x1C, 0x8C, 0x02, 0x37, 0x1D, 0x4B, 0x1D, 0x6A, 0x1C, 0x1D, 0x00, 0x07, 0x04, 0x00, 0x5A, -/* 00012280 */ 0x00, 0x1D, 0x5F, 0x1E, 0x14, 0x06, 0x5A, 0x01, 0x1E, 0x5A, 0x02, 0x11, 0xCB, 0x48, 0x00, 0x00, -/* 00012290 */ 0x00, 0x03, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x78, 0x17, 0x1E, 0x01, 0x78, 0x09, 0x1E, -/* 000122A0 */ 0x03, 0x78, 0x0F, 0x1E, 0x04, 0x78, 0x0F, 0x1E, 0x02, 0x5A, 0x03, 0x1E, 0x1F, 0x04, 0xFF, 0x1C, -/* 000122B0 */ 0xD3, 0x05, 0x1C, 0x47, 0x18, 0x1C, 0x8C, 0x02, 0x23, 0x1C, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x04, -/* 000122C0 */ 0x5A, 0x01, 0x12, 0x5A, 0x02, 0x18, 0x1F, 0x03, 0xFF, 0x1C, 0x8C, 0x02, 0x37, 0x1D, 0x4B, 0x1D, -/* 000122D0 */ 0x6A, 0x1C, 0x1D, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x1D, 0x5F, 0x1E, 0x14, 0x06, 0x5A, 0x01, -/* 000122E0 */ 0x1E, 0x5A, 0x02, 0x13, 0xCB, 0x60, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, -/* 000122F0 */ 0x00, 0x78, 0x18, 0x1E, 0x01, 0x78, 0x09, 0x1E, 0x03, 0x78, 0x0F, 0x1E, 0x04, 0x78, 0x0F, 0x1E, -/* 00012300 */ 0x02, 0x5A, 0x03, 0x1E, 0x1F, 0x04, 0xFF, 0x1C, 0x47, 0x00, 0x14, 0x09, 0x02, 0x00, 0xA6, 0x00, -/* 00012310 */ 0x24, 0x00, 0x05, 0x78, 0x00, 0x60, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 00012320 */ 0x00, 0x83, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, -/* 00012330 */ 0x00, 0x48, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, -/* 00012340 */ 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x30, 0x00, 0x00, -/* 00012350 */ 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, -/* 00012360 */ 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, -/* 00012370 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, -/* 00012380 */ 0x00, 0x81, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 00012390 */ 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, -/* 000123A0 */ 0x00, 0xFE, 0x88, 0x01, 0xFE, 0x83, 0x01, 0xFE, 0x82, 0x01, 0xFE, 0x80, 0x01, 0xFE, 0x81, 0x01, -/* 000123B0 */ 0x4D, 0xFE, 0x15, 0x01, 0xFF, 0x01, 0x5B, 0x01, 0x00, 0x14, 0x19, 0x00, 0x00, 0x00, 0x0C, 0x00, -/* 000123C0 */ 0x27, 0x00, 0x05, 0x00, 0x23, 0x01, 0x06, 0x00, 0x02, 0x05, 0x06, 0x00, 0x26, 0x01, 0x06, 0x00, -/* 000123D0 */ 0xB8, 0x01, 0x14, 0x00, 0x72, 0x00, 0x3C, 0x00, 0x28, 0x01, 0x03, 0x00, 0x5B, 0x00, 0x1D, 0x00, -/* 000123E0 */ 0x33, 0x01, 0x23, 0x00, 0x75, 0x00, 0x3A, 0x00, 0xD4, 0x00, 0x3A, 0x00, 0x15, 0x01, 0x06, 0x00, -/* 000123F0 */ 0x73, 0x01, 0x14, 0x00, 0x48, 0x00, 0x3E, 0x00, 0xBF, 0x00, 0x06, 0x00, 0xD8, 0x03, 0x14, 0x00, -/* 00012400 */ 0x5A, 0x00, 0x3E, 0x00, 0xD1, 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, 0xFB, 0x28, 0x01, 0x00, 0x66, -/* 00012410 */ 0x28, 0x01, 0x00, 0x5C, 0x27, 0x01, 0x00, 0xCF, 0x26, 0x01, 0x00, 0xE7, 0x25, 0x01, 0x00, 0x23, -/* 00012420 */ 0x24, 0x01, 0x00, 0x3F, 0x5D, 0x00, 0xC1, 0x03, 0x8D, 0x05, 0x00, 0xFE, 0x1F, 0x08, 0x20, 0xA0, -/* 00012430 */ 0x41, 0xC3, 0x00, 0xFE, 0x0D, 0x04, 0x7A, 0xFF, 0x43, 0x6C, 0x01, 0x00, 0x01, 0xFF, 0x00, 0x10, -/* 00012440 */ 0x01, 0x00, 0x01, 0x01, 0xFF, 0x43, 0x6C, 0x01, 0x00, 0xFE, 0xB6, 0x03, 0xFE, 0xB6, 0x03, 0x01, -/* 00012450 */ 0xFE, 0xA8, 0x04, 0x06, 0x0D, 0x11, 0x05, 0x2E, 0x2E, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x0E, -/* 00012460 */ 0x0F, 0x10, 0x05, 0xFE, 0x9F, 0x04, 0x06, 0xFE, 0x48, 0x03, 0x06, 0xFE, 0xF7, 0x03, 0x06, 0xFE, -/* 00012470 */ 0xA2, 0x04, 0x06, 0xFE, 0xFA, 0x03, 0x06, 0xFE, 0xFB, 0x03, 0x06, 0xFE, 0xFC, 0x03, 0x06, 0xFE, -/* 00012480 */ 0xFD, 0x03, 0x06, 0xFE, 0xFE, 0x03, 0x06, 0xFE, 0xA5, 0x04, 0x08, 0x95, 0x59, 0x11, 0xB1, 0x0D, -/* 00012490 */ 0x11, 0x4F, 0x11, 0x94, 0x02, 0x11, 0x8C, 0x03, 0x03, 0x12, 0x6A, 0x11, 0x12, 0x00, 0x07, 0x02, -/* 000124A0 */ 0x00, 0x5A, 0x00, 0x12, 0x5A, 0x01, 0x0D, 0x1F, 0x02, 0x11, 0x11, 0x94, 0x02, 0x11, 0x90, 0x02, -/* 000124B0 */ 0x11, 0x0E, 0x0B, 0x00, 0x11, 0x90, 0x02, 0x11, 0x5F, 0x11, 0x11, 0x01, 0x0F, 0x18, 0x00, 0x11, -/* 000124C0 */ 0x8C, 0x03, 0x03, 0x12, 0x6A, 0x11, 0x12, 0x02, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x12, 0x5A, 0x01, -/* 000124D0 */ 0x02, 0x5A, 0x02, 0x03, 0x1F, 0x03, 0xFF, 0x11, 0x8C, 0x02, 0x19, 0x11, 0x4B, 0x11, 0x07, 0x04, -/* 000124E0 */ 0x00, 0x5A, 0x00, 0x0C, 0xCC, 0x12, 0x08, 0x9F, 0x00, 0x04, 0x12, 0x9F, 0x01, 0x05, 0x12, 0x9F, -/* 000124F0 */ 0x02, 0x06, 0x12, 0x9F, 0x03, 0x07, 0x12, 0x9F, 0x04, 0x08, 0x12, 0x9F, 0x05, 0x09, 0x12, 0x9F, -/* 00012500 */ 0x06, 0x0A, 0x12, 0x9F, 0x07, 0x0B, 0x12, 0x5A, 0x01, 0x12, 0x90, 0x02, 0x12, 0x5A, 0x02, 0x12, -/* 00012510 */ 0xD3, 0x00, 0x12, 0x5A, 0x03, 0x12, 0x1F, 0x04, 0x00, 0x11, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, -/* 00012520 */ 0x00, 0xFE, 0xEF, 0x01, 0xFE, 0xA6, 0x04, 0xFE, 0x8A, 0x02, 0xFF, 0x6C, 0x6C, 0x01, 0x00, 0x05, -/* 00012530 */ 0x0A, 0x00, 0x00, 0x00, 0x18, 0x00, 0x37, 0x00, 0x12, 0x00, 0x39, 0x00, 0x18, 0x00, 0x6F, 0x00, -/* 00012540 */ 0x47, 0x00, 0xAD, 0x02, 0x00, 0x49, 0x25, 0x01, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x03, -/* 00012550 */ 0x00, 0xFE, 0x2E, 0x08, 0x13, 0xA2, 0x41, 0xD0, 0x00, 0x7B, 0xFE, 0x01, 0x10, 0xFF, 0xA4, 0x6E, -/* 00012560 */ 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFF, 0xA4, 0x6E, 0x01, 0x00, 0xFE, 0x49, -/* 00012570 */ 0x01, 0xFE, 0x49, 0x01, 0x01, 0x07, 0x05, 0x08, 0x04, 0x14, 0x12, 0x04, 0x02, 0x03, 0x03, 0x03, -/* 00012580 */ 0x03, 0x07, 0x06, 0xFE, 0xA5, 0x04, 0x01, 0x00, 0x0B, 0x3D, 0x14, 0x03, 0x00, 0x05, 0x02, 0x09, -/* 00012590 */ 0x31, 0x00, 0x47, 0x08, 0x06, 0x8C, 0x04, 0x37, 0x0A, 0x4B, 0x0A, 0x6A, 0x09, 0x0A, 0x00, 0x07, -/* 000125A0 */ 0x03, 0x00, 0x5A, 0x00, 0x0A, 0x8C, 0x01, 0x02, 0x0B, 0x4B, 0x0B, 0x5F, 0x0B, 0x0B, 0x01, 0x5A, -/* 000125B0 */ 0x01, 0x0B, 0x5A, 0x02, 0x03, 0x1F, 0x03, 0x09, 0x09, 0x74, 0x09, 0x08, 0x02, 0x47, 0x00, 0x04, -/* 000125C0 */ 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x3F, 0x01, 0xFE, 0xA5, 0x04, 0xFE, 0xA5, 0x04, -/* 000125D0 */ 0xFF, 0xCA, 0x6E, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0xA6, 0x00, 0x2B, 0x00, -/* 000125E0 */ 0x51, 0x00, 0x08, 0x00, 0x2B, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, -/* 000125F0 */ 0x0E, 0x08, 0x17, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0xA0, 0x04, 0x79, 0xFF, 0xC0, 0x69, 0x01, 0x00, -/* 00012600 */ 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0xC0, 0x69, 0x01, 0x00, 0xFE, 0x5A, 0x01, 0xFE, -/* 00012610 */ 0x5A, 0x01, 0x01, 0x07, 0x05, 0x0A, 0x04, 0x27, 0x25, 0x03, 0x03, 0x04, 0x04, 0x04, 0x04, 0x09, -/* 00012620 */ 0x05, 0xFE, 0x9F, 0x04, 0x06, 0xFE, 0x48, 0x03, 0x08, 0x7A, 0x59, 0x0A, 0xB1, 0x06, 0x0A, 0x4F, -/* 00012630 */ 0x07, 0x4F, 0x08, 0x8C, 0x03, 0x03, 0x0B, 0x6A, 0x0A, 0x0B, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 00012640 */ 0x0B, 0x5A, 0x01, 0x06, 0x1F, 0x02, 0x0A, 0x0A, 0x47, 0x07, 0x0A, 0x0E, 0x08, 0x00, 0x07, 0x5F, -/* 00012650 */ 0x0A, 0x07, 0x01, 0x0F, 0x18, 0x00, 0x0A, 0x8C, 0x03, 0x03, 0x0B, 0x6A, 0x0A, 0x0B, 0x02, 0x07, -/* 00012660 */ 0x03, 0x00, 0x5A, 0x00, 0x0B, 0x5A, 0x01, 0x02, 0x5A, 0x02, 0x03, 0x1F, 0x03, 0xFF, 0x0A, 0x8C, -/* 00012670 */ 0x03, 0x24, 0x0B, 0x6A, 0x0A, 0x0B, 0x03, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0B, 0x5A, 0x01, 0x05, -/* 00012680 */ 0x1F, 0x02, 0x0A, 0x0A, 0x47, 0x08, 0x0A, 0x8C, 0x01, 0x03, 0x0A, 0x4B, 0x0A, 0x07, 0x03, 0x00, -/* 00012690 */ 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x07, 0x5A, 0x02, 0x08, 0x1F, 0x03, 0x00, 0x0A, 0x09, 0x02, 0x00, -/* 000126A0 */ 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xEF, 0x01, 0xFE, 0xA6, 0x04, 0xFE, 0x8A, 0x02, 0xFE, 0x38, 0x03, -/* 000126B0 */ 0xFF, 0xE5, 0x69, 0x01, 0x00, 0x06, 0x09, 0x00, 0x00, 0x00, 0x18, 0x00, 0x37, 0x00, 0x0C, 0x00, -/* 000126C0 */ 0x39, 0x00, 0x18, 0x00, 0x6F, 0x00, 0x18, 0x00, 0x30, 0x00, 0x1B, 0x00, 0x25, 0x00, 0x00, 0xBF, -/* 000126D0 */ 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0xFC, 0x07, 0x6B, 0xA2, 0x41, 0xD1, 0x00, 0x78, -/* 000126E0 */ 0xFF, 0x83, 0x66, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x02, 0xFF, 0x83, 0x66, 0x01, -/* 000126F0 */ 0x00, 0xC5, 0xC5, 0x01, 0x06, 0x03, 0x07, 0x07, 0x17, 0x16, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, -/* 00012700 */ 0x06, 0x08, 0x43, 0x59, 0x07, 0xB1, 0x05, 0x07, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA6, 0x07, 0x47, -/* 00012710 */ 0x04, 0x07, 0x8C, 0x02, 0x17, 0x07, 0x4B, 0x07, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, -/* 00012720 */ 0x05, 0x8C, 0x01, 0x04, 0x08, 0x4B, 0x08, 0x5A, 0x02, 0x08, 0x8C, 0x03, 0x03, 0x08, 0x5F, 0x08, -/* 00012730 */ 0x08, 0x00, 0x5A, 0x03, 0x08, 0x5A, 0x04, 0x03, 0x5A, 0x05, 0x04, 0x1F, 0x06, 0x00, 0x07, 0x09, -/* 00012740 */ 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xDC, 0x01, 0xFF, 0x96, 0x66, 0x01, 0x00, 0x03, 0x05, -/* 00012750 */ 0x00, 0x00, 0x00, 0x0A, 0x00, 0x23, 0x00, 0x32, 0x00, 0x8E, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, -/* 00012760 */ 0x03, 0x88, 0x01, 0x00, 0xFE, 0xE3, 0x07, 0x1C, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x48, 0x03, 0x77, -/* 00012770 */ 0xFF, 0x87, 0x62, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x01, 0xFF, 0x87, 0x62, 0x01, -/* 00012780 */ 0x00, 0xFE, 0x9A, 0x01, 0xFE, 0x9A, 0x01, 0x01, 0x08, 0x05, 0x0B, 0x05, 0x30, 0x2C, 0x03, 0x03, -/* 00012790 */ 0x03, 0x03, 0x03, 0x03, 0x0A, 0x08, 0x05, 0xFE, 0x9D, 0x04, 0x06, 0xFE, 0x48, 0x03, 0x95, 0x01, -/* 000127A0 */ 0x4D, 0x01, 0x07, 0x59, 0x0B, 0xB1, 0x09, 0x0B, 0x4F, 0x08, 0x15, 0x05, 0x00, 0x05, 0x02, 0xA6, -/* 000127B0 */ 0x0B, 0x47, 0x05, 0x0B, 0x15, 0x05, 0x00, 0x06, 0x02, 0xA6, 0x0B, 0x47, 0x06, 0x0B, 0x4F, 0x08, -/* 000127C0 */ 0xA6, 0x0B, 0x14, 0x03, 0x00, 0x07, 0x0B, 0x09, 0x18, 0x00, 0x8C, 0x03, 0x03, 0x0C, 0x6A, 0x0B, -/* 000127D0 */ 0x0C, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x5A, 0x01, 0x03, 0x5A, 0x02, 0x04, 0x1F, 0x03, -/* 000127E0 */ 0xFF, 0x0B, 0x8C, 0x03, 0x37, 0x0C, 0x4B, 0x0C, 0x6A, 0x0B, 0x0C, 0x01, 0x07, 0x01, 0x00, 0x5A, -/* 000127F0 */ 0x00, 0x0C, 0x1F, 0x01, 0x0B, 0x0B, 0x47, 0x08, 0x0B, 0x8C, 0x03, 0x03, 0x0C, 0x6A, 0x0B, 0x0C, -/* 00012800 */ 0x02, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x5A, 0x01, 0x09, 0x5A, 0x02, 0x08, 0x1F, 0x03, 0xFF, -/* 00012810 */ 0x0B, 0x8C, 0x01, 0x02, 0x0B, 0x4B, 0x0B, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x08, -/* 00012820 */ 0x5A, 0x02, 0x05, 0x5A, 0x03, 0x06, 0x1F, 0x04, 0xFF, 0x0B, 0x47, 0x00, 0x09, 0x09, 0x02, 0x00, -/* 00012830 */ 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x8A, 0x02, 0x61, 0xFE, 0xF0, 0x01, 0xFF, 0x9C, 0x62, 0x01, 0x00, -/* 00012840 */ 0x09, 0x0B, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0C, 0x00, 0x23, 0x00, 0x0A, 0x00, 0x30, -/* 00012850 */ 0x00, 0x18, 0x00, 0x5E, 0x00, 0x17, 0x00, 0x2C, 0x00, 0x18, 0x00, 0x3A, 0x00, 0x19, 0x00, 0x43, -/* 00012860 */ 0x00, 0x08, 0x00, 0x15, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0xDA, -/* 00012870 */ 0x07, 0x1E, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x9B, 0x04, 0x76, 0xFF, 0x63, 0x61, 0x01, 0x00, 0xFF, -/* 00012880 */ 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFF, 0x63, 0x61, 0x01, 0x00, 0xB5, 0xB5, 0x01, 0x05, 0x03, -/* 00012890 */ 0x06, 0x04, 0x15, 0x14, 0x03, 0x02, 0x02, 0x02, 0x02, 0x02, 0x05, 0x05, 0xFE, 0xA7, 0x04, 0x40, -/* 000128A0 */ 0x8C, 0x03, 0x37, 0x07, 0x4B, 0x07, 0x6A, 0x06, 0x07, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x07, -/* 000128B0 */ 0x5A, 0x01, 0x04, 0x1F, 0x02, 0x06, 0x06, 0x0F, 0x06, 0x00, 0x06, 0x47, 0x00, 0x02, 0x09, 0x1D, -/* 000128C0 */ 0x00, 0x8C, 0x03, 0x03, 0x07, 0x6A, 0x06, 0x07, 0x01, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x07, 0x5A, -/* 000128D0 */ 0x01, 0x03, 0x5A, 0x02, 0x04, 0x1F, 0x03, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, -/* 000128E0 */ 0xB1, 0xFE, 0xEC, 0x01, 0xFF, 0x8B, 0x61, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x00, -/* 000128F0 */ 0x26, 0x00, 0x06, 0x00, 0x2B, 0x00, 0x1D, 0x00, 0x3B, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, -/* 00012900 */ 0x88, 0x01, 0x00, 0xFE, 0xBD, 0x07, 0x26, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x9A, 0x04, 0x75, 0xFF, -/* 00012910 */ 0x69, 0x5C, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFF, 0x69, 0x5C, 0x01, 0x00, -/* 00012920 */ 0xFE, 0xAF, 0x03, 0xFE, 0xAF, 0x03, 0x01, 0x0A, 0x0D, 0x14, 0x07, 0x67, 0x5E, 0x03, 0x07, 0x0B, -/* 00012930 */ 0x0B, 0x0B, 0x0B, 0x13, 0x08, 0x06, 0xFE, 0x00, 0x04, 0x06, 0xFE, 0xAD, 0x03, 0x05, 0xFE, 0xBC, -/* 00012940 */ 0x03, 0x05, 0xFE, 0xFF, 0x03, 0x06, 0xFE, 0xA2, 0x04, 0x05, 0xFE, 0xA3, 0x04, 0x05, 0xFE, 0xA4, -/* 00012950 */ 0x04, 0x01, 0x00, 0x01, 0x03, 0x0B, 0xFE, 0x49, 0x01, 0x4F, 0x10, 0x4F, 0x11, 0x4F, 0x12, 0x8C, -/* 00012960 */ 0x02, 0x11, 0x14, 0x4B, 0x14, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x0E, 0x1F, 0x02, -/* 00012970 */ 0x14, 0x14, 0x47, 0x10, 0x14, 0xA6, 0x14, 0x14, 0x03, 0x00, 0x0F, 0x14, 0x09, 0x1A, 0x00, 0x8C, -/* 00012980 */ 0x03, 0x37, 0x16, 0x4B, 0x16, 0x6A, 0x15, 0x16, 0x00, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x16, 0x1F, -/* 00012990 */ 0x01, 0x15, 0x15, 0x47, 0x14, 0x15, 0x09, 0x18, 0x00, 0x8C, 0x03, 0x24, 0x16, 0x6A, 0x15, 0x16, -/* 000129A0 */ 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x16, 0x5A, 0x01, 0x0F, 0x1F, 0x02, 0x15, 0x15, 0x47, 0x14, -/* 000129B0 */ 0x15, 0x47, 0x0F, 0x14, 0x8C, 0x03, 0x37, 0x15, 0x4B, 0x15, 0x6A, 0x14, 0x15, 0x02, 0x07, 0x01, -/* 000129C0 */ 0x00, 0x5A, 0x00, 0x15, 0x1F, 0x01, 0x14, 0x14, 0x47, 0x11, 0x14, 0x47, 0x14, 0x11, 0x8C, 0x02, -/* 000129D0 */ 0x02, 0x15, 0x4B, 0x15, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x0F, 0x5A, 0x02, 0x03, -/* 000129E0 */ 0x5A, 0x03, 0x04, 0xCC, 0x16, 0x02, 0x9F, 0x00, 0x05, 0x16, 0x9F, 0x01, 0x06, 0x16, 0x5A, 0x04, -/* 000129F0 */ 0x16, 0x5A, 0x05, 0x06, 0x1F, 0x06, 0x15, 0x15, 0x74, 0x15, 0x14, 0x03, 0x47, 0x14, 0x0D, 0x8C, -/* 00012A00 */ 0x02, 0x02, 0x15, 0x4B, 0x15, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x0F, 0x5A, 0x02, -/* 00012A10 */ 0x07, 0x5A, 0x03, 0x04, 0xCC, 0x16, 0x02, 0x9F, 0x00, 0x08, 0x16, 0x9F, 0x01, 0x09, 0x16, 0x5A, -/* 00012A20 */ 0x04, 0x16, 0x5A, 0x05, 0x08, 0x1F, 0x06, 0x15, 0x15, 0x74, 0x15, 0x14, 0x04, 0x8C, 0x02, 0x14, -/* 00012A30 */ 0x14, 0x4B, 0x14, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x0D, 0x5A, 0x02, 0x0F, 0x5A, -/* 00012A40 */ 0x03, 0x0A, 0x5A, 0x04, 0x0B, 0x1F, 0x05, 0xFF, 0x14, 0x8C, 0x02, 0x0B, 0x14, 0x4B, 0x14, 0x07, -/* 00012A50 */ 0x05, 0x00, 0x5A, 0x00, 0x02, 0x8C, 0x03, 0x03, 0x15, 0x5F, 0x15, 0x15, 0x05, 0x5A, 0x01, 0x15, -/* 00012A60 */ 0x5A, 0x02, 0x10, 0x5A, 0x03, 0x11, 0xCC, 0x15, 0x00, 0x5A, 0x04, 0x15, 0x1F, 0x05, 0x14, 0x14, -/* 00012A70 */ 0x47, 0x12, 0x14, 0x5F, 0x14, 0x12, 0x06, 0x74, 0x14, 0x0D, 0x07, 0x8C, 0x03, 0x03, 0x15, 0x6A, -/* 00012A80 */ 0x14, 0x15, 0x08, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x15, 0x5A, 0x01, 0x0D, 0x1F, 0x02, 0x14, 0x14, -/* 00012A90 */ 0x74, 0x14, 0x0D, 0x09, 0x74, 0x0C, 0x0D, 0x0A, 0x47, 0x00, 0x0D, 0x09, 0x02, 0x00, 0xA6, 0x00, -/* 00012AA0 */ 0x24, 0x00, 0x61, 0xFE, 0x36, 0x03, 0x61, 0xFE, 0x18, 0x04, 0xE6, 0xFE, 0xDC, 0x01, 0xFE, 0xF7, -/* 00012AB0 */ 0x01, 0xFE, 0xF7, 0x01, 0xFE, 0xED, 0x01, 0xFE, 0xA5, 0x04, 0xFE, 0xA6, 0x04, 0xFF, 0xA0, 0x5C, -/* 00012AC0 */ 0x01, 0x00, 0x0C, 0x06, 0x00, 0x00, 0x00, 0x16, 0x00, 0x46, 0x00, 0x3F, 0x00, 0x57, 0x00, 0x17, -/* 00012AD0 */ 0x00, 0x24, 0x00, 0x31, 0x00, 0x6D, 0x00, 0x31, 0x00, 0x6B, 0x00, 0x1C, 0x00, 0xA9, 0x00, 0x2A, -/* 00012AE0 */ 0x00, 0x5F, 0x00, 0x08, 0x00, 0x2B, 0x00, 0x19, 0x00, 0x57, 0x00, 0x04, 0x00, 0x38, 0x00, 0x08, -/* 00012AF0 */ 0x00, 0x1C, 0x00, 0x00, 0x3F, 0x5D, 0x00, 0xC1, 0x13, 0x8D, 0x25, 0x00, 0xFE, 0x62, 0x05, 0x1A, -/* 00012B00 */ 0xA0, 0x41, 0xD1, 0x00, 0x57, 0xFE, 0xEB, 0xEC, 0x11, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, -/* 00012B10 */ 0xFE, 0xEB, 0xEC, 0xFE, 0xE2, 0x6D, 0xFE, 0xE2, 0x6D, 0x0D, 0xFE, 0x37, 0x04, 0xFE, 0x24, 0x02, -/* 00012B20 */ 0xFE, 0x38, 0x04, 0xFE, 0x39, 0x04, 0xFE, 0x3A, 0x04, 0xFE, 0x3B, 0x04, 0xFE, 0x3C, 0x04, 0xFE, -/* 00012B30 */ 0x3D, 0x04, 0xFE, 0x3E, 0x04, 0xFE, 0x3F, 0x04, 0xFE, 0x40, 0x04, 0xFE, 0xF5, 0x01, 0xFE, 0x88, -/* 00012B40 */ 0x03, 0x11, 0x34, 0x41, 0x09, 0xFE, 0x7C, 0x01, 0xFE, 0x74, 0x01, 0x02, 0x0B, 0x14, 0x14, 0x14, -/* 00012B50 */ 0x14, 0x09, 0x3E, 0x3F, 0x40, 0x08, 0x06, 0xFE, 0x3D, 0x03, 0x06, 0xFE, 0x41, 0x04, 0x06, 0xFE, -/* 00012B60 */ 0x42, 0x04, 0x06, 0xFE, 0x43, 0x04, 0x06, 0xFE, 0x44, 0x04, 0x06, 0xFE, 0x45, 0x04, 0x06, 0xFE, -/* 00012B70 */ 0x13, 0x04, 0x06, 0xFE, 0x46, 0x04, 0x06, 0xFE, 0x47, 0x04, 0x06, 0xFE, 0x48, 0x04, 0x06, 0xFE, -/* 00012B80 */ 0x49, 0x04, 0x06, 0xFE, 0x4A, 0x04, 0x06, 0xFE, 0x4B, 0x04, 0x06, 0xFE, 0x4C, 0x04, 0x06, 0xFE, -/* 00012B90 */ 0x4D, 0x04, 0x06, 0xFE, 0x4E, 0x04, 0x01, 0x01, 0x06, 0xFE, 0x4F, 0x04, 0x01, 0x00, 0x06, 0xFE, -/* 00012BA0 */ 0x50, 0x04, 0x06, 0xFE, 0x51, 0x04, 0x01, 0x02, 0x07, 0x05, 0xFE, 0x52, 0x04, 0x05, 0xFE, 0x53, -/* 00012BB0 */ 0x04, 0x06, 0xFE, 0x54, 0x04, 0x05, 0xFE, 0x55, 0x04, 0x06, 0xFE, 0x56, 0x04, 0x05, 0xFE, 0x57, -/* 00012BC0 */ 0x04, 0x05, 0xFE, 0x58, 0x04, 0x05, 0xFE, 0x59, 0x04, 0x05, 0xFE, 0x5A, 0x04, 0x05, 0xFE, 0x5B, -/* 00012BD0 */ 0x04, 0x06, 0xFE, 0x0B, 0x04, 0x06, 0xFE, 0x40, 0x03, 0x06, 0xFE, 0x42, 0x03, 0x0C, 0x06, 0xFE, -/* 00012BE0 */ 0x43, 0x03, 0x06, 0xFE, 0x44, 0x03, 0x06, 0xFE, 0x0C, 0x04, 0x0B, 0x06, 0xFE, 0x3F, 0x03, 0x05, -/* 00012BF0 */ 0xFE, 0x25, 0x04, 0x06, 0xFE, 0x26, 0x04, 0x06, 0xFE, 0x8D, 0x03, 0x06, 0xFE, 0x27, 0x04, 0x06, -/* 00012C00 */ 0xFE, 0x0D, 0x04, 0x05, 0xFE, 0x4B, 0x03, 0x06, 0xFE, 0x4C, 0x03, 0xFE, 0x35, 0x05, 0xD3, 0x05, -/* 00012C10 */ 0x34, 0x94, 0x02, 0x34, 0xD3, 0x09, 0x35, 0x94, 0x03, 0x35, 0x4F, 0x36, 0x4F, 0x37, 0x4F, 0x38, -/* 00012C20 */ 0x4F, 0x39, 0x4F, 0x3A, 0x4F, 0x3B, 0x4F, 0x3C, 0x4F, 0x3D, 0x4F, 0x41, 0x94, 0x04, 0x41, 0x4F, -/* 00012C30 */ 0x41, 0x94, 0x05, 0x41, 0x4F, 0x41, 0x94, 0x06, 0x41, 0x4F, 0x41, 0x94, 0x07, 0x41, 0x4F, 0x41, -/* 00012C40 */ 0x94, 0x08, 0x41, 0x4F, 0x41, 0x94, 0x09, 0x41, 0x4F, 0x41, 0x94, 0x0A, 0x41, 0x4F, 0x41, 0x94, -/* 00012C50 */ 0x0B, 0x41, 0x4F, 0x41, 0x94, 0x0C, 0x41, 0x4F, 0x41, 0x94, 0x0D, 0x41, 0x4F, 0x41, 0x94, 0x0E, -/* 00012C60 */ 0x41, 0x8C, 0x02, 0x32, 0x41, 0x15, 0x03, 0x00, 0x41, 0x03, 0x09, 0x11, 0x00, 0x8C, 0x02, 0x32, -/* 00012C70 */ 0x41, 0x15, 0x03, 0x00, 0x41, 0x04, 0x09, 0x05, 0x00, 0xA6, 0x00, 0x09, 0xC3, 0x04, 0xCC, 0x41, -/* 00012C80 */ 0x03, 0x9F, 0x00, 0x05, 0x41, 0x9F, 0x01, 0x06, 0x41, 0x9F, 0x02, 0x07, 0x41, 0x47, 0x36, 0x41, -/* 00012C90 */ 0xCC, 0x41, 0x02, 0x9F, 0x00, 0x08, 0x41, 0x9F, 0x01, 0x09, 0x41, 0x47, 0x37, 0x41, 0x8C, 0x02, -/* 00012CA0 */ 0x37, 0x42, 0x4B, 0x42, 0x6A, 0x41, 0x42, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x42, 0x5A, 0x01, -/* 00012CB0 */ 0x37, 0x5A, 0x02, 0x36, 0x1F, 0x03, 0x41, 0x41, 0x47, 0x38, 0x41, 0xCC, 0x41, 0x09, 0xCC, 0x42, -/* 00012CC0 */ 0x02, 0x9F, 0x00, 0x0A, 0x42, 0x9F, 0x01, 0x36, 0x42, 0x9F, 0x00, 0x42, 0x41, 0xCC, 0x42, 0x02, -/* 00012CD0 */ 0x9F, 0x00, 0x0B, 0x42, 0x9F, 0x01, 0x36, 0x42, 0x9F, 0x01, 0x42, 0x41, 0xCC, 0x42, 0x02, 0x9F, -/* 00012CE0 */ 0x00, 0x0C, 0x42, 0x9F, 0x01, 0x37, 0x42, 0x9F, 0x02, 0x42, 0x41, 0xCC, 0x42, 0x02, 0x9F, 0x00, -/* 00012CF0 */ 0x0D, 0x42, 0x9F, 0x01, 0x38, 0x42, 0x9F, 0x03, 0x42, 0x41, 0xCC, 0x42, 0x02, 0x9F, 0x00, 0x0E, -/* 00012D00 */ 0x42, 0x9F, 0x01, 0x37, 0x42, 0x9F, 0x04, 0x42, 0x41, 0xCC, 0x42, 0x02, 0x9F, 0x00, 0x0F, 0x42, -/* 00012D10 */ 0x9F, 0x01, 0x37, 0x42, 0x9F, 0x05, 0x42, 0x41, 0xCC, 0x42, 0x02, 0x9F, 0x00, 0x10, 0x42, 0x9F, -/* 00012D20 */ 0x01, 0x37, 0x42, 0x9F, 0x06, 0x42, 0x41, 0xCC, 0x42, 0x02, 0x9F, 0x00, 0x11, 0x42, 0x9F, 0x01, -/* 00012D30 */ 0x37, 0x42, 0x9F, 0x07, 0x42, 0x41, 0xCC, 0x42, 0x02, 0x9F, 0x00, 0x12, 0x42, 0x8C, 0x02, 0x37, -/* 00012D40 */ 0x44, 0x4B, 0x44, 0x6A, 0x43, 0x44, 0x01, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x44, 0x5A, 0x01, 0x36, -/* 00012D50 */ 0x5A, 0x02, 0x13, 0x1F, 0x03, 0x43, 0x43, 0x9F, 0x01, 0x43, 0x42, 0x9F, 0x08, 0x42, 0x41, 0x94, -/* 00012D60 */ 0x04, 0x41, 0xD3, 0x00, 0x41, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x02, 0x1F, 0x01, 0x41, 0x41, 0x94, -/* 00012D70 */ 0x05, 0x41, 0xD3, 0x01, 0x41, 0x94, 0x06, 0x41, 0xD3, 0x02, 0x41, 0x94, 0x07, 0x41, 0xD3, 0x03, -/* 00012D80 */ 0x41, 0x94, 0x08, 0x41, 0xD3, 0x04, 0x41, 0x94, 0x09, 0x41, 0xCC, 0x41, 0x03, 0xA6, 0x42, 0x9F, -/* 00012D90 */ 0x00, 0x42, 0x41, 0xA6, 0x42, 0x9F, 0x01, 0x42, 0x41, 0xA6, 0x42, 0x9F, 0x02, 0x42, 0x41, 0x94, -/* 00012DA0 */ 0x0A, 0x41, 0x8C, 0x02, 0x35, 0x41, 0x4B, 0x41, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0x00, -/* 00012DB0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x78, 0x15, 0x42, 0x02, 0x78, -/* 00012DC0 */ 0x13, 0x42, 0x03, 0x78, 0x18, 0x42, 0x04, 0x5A, 0x01, 0x42, 0x1F, 0x02, 0x41, 0x41, 0x47, 0x39, -/* 00012DD0 */ 0x41, 0xD3, 0x06, 0x41, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x1A, 0x5A, 0x02, 0x1B, -/* 00012DE0 */ 0x5A, 0x03, 0x1C, 0x5F, 0x42, 0x39, 0x05, 0x5A, 0x04, 0x42, 0x8C, 0x02, 0x36, 0x42, 0x4B, 0x42, -/* 00012DF0 */ 0x5F, 0x42, 0x42, 0x06, 0x5A, 0x05, 0x42, 0x1F, 0x06, 0xFF, 0x41, 0xD3, 0x07, 0x41, 0x07, 0x06, -/* 00012E00 */ 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x1D, 0x5A, 0x02, 0x1E, 0x5A, 0x03, 0x1E, 0x5F, 0x42, 0x39, -/* 00012E10 */ 0x07, 0x5A, 0x04, 0x42, 0x8C, 0x02, 0x36, 0x42, 0x4B, 0x42, 0x5F, 0x42, 0x42, 0x08, 0x5A, 0x05, -/* 00012E20 */ 0x42, 0x1F, 0x06, 0xFF, 0x41, 0xD3, 0x08, 0x41, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, -/* 00012E30 */ 0x1F, 0x5A, 0x02, 0x20, 0x5A, 0x03, 0x20, 0x5F, 0x42, 0x39, 0x09, 0x5A, 0x04, 0x42, 0x8C, 0x02, -/* 00012E40 */ 0x36, 0x42, 0x4B, 0x42, 0x5F, 0x42, 0x42, 0x0A, 0x5A, 0x05, 0x42, 0x1F, 0x06, 0xFF, 0x41, 0x8C, -/* 00012E50 */ 0x02, 0x32, 0x41, 0x15, 0x03, 0x00, 0x41, 0x03, 0x09, 0x05, 0x00, 0xA6, 0x00, 0x09, 0xE1, 0x02, -/* 00012E60 */ 0x8C, 0x02, 0x23, 0x41, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x21, 0x90, 0x03, 0x42, -/* 00012E70 */ 0x5A, 0x02, 0x42, 0x1F, 0x03, 0xFF, 0x41, 0xD3, 0x0A, 0x41, 0x94, 0x0B, 0x41, 0xD3, 0x0B, 0x41, -/* 00012E80 */ 0x94, 0x0C, 0x41, 0xD3, 0x0C, 0x41, 0x94, 0x0D, 0x41, 0x8C, 0x02, 0x23, 0x41, 0x07, 0x03, 0x00, -/* 00012E90 */ 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x22, 0x90, 0x0D, 0x42, 0x5A, 0x02, 0x42, 0x1F, 0x03, 0xFF, 0x41, -/* 00012EA0 */ 0xD3, 0x0D, 0x41, 0x47, 0x3A, 0x41, 0x8C, 0x02, 0x23, 0x41, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, -/* 00012EB0 */ 0x5A, 0x01, 0x23, 0x5A, 0x02, 0x3A, 0x1F, 0x03, 0xFF, 0x41, 0x8C, 0x02, 0x37, 0x42, 0x4B, 0x42, -/* 00012EC0 */ 0x6A, 0x41, 0x42, 0x0B, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x42, 0x90, 0x03, 0x43, 0x5A, 0x01, 0x43, -/* 00012ED0 */ 0x5A, 0x02, 0x24, 0xCB, 0x14, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, -/* 00012EE0 */ 0x90, 0x03, 0x44, 0x07, 0x01, 0x00, 0xC1, 0x01, 0x44, 0x44, 0x78, 0x44, 0x43, 0x0C, 0x78, 0x27, -/* 00012EF0 */ 0x43, 0x0D, 0x78, 0x27, 0x43, 0x0E, 0x78, 0x27, 0x43, 0x0F, 0x5A, 0x03, 0x43, 0x1F, 0x04, 0xFF, -/* 00012F00 */ 0x41, 0x8C, 0x02, 0x04, 0x41, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x90, 0x03, 0x42, 0x5F, 0x42, -/* 00012F10 */ 0x42, 0x10, 0x5A, 0x01, 0x42, 0x8C, 0x02, 0x08, 0x42, 0x5F, 0x42, 0x42, 0x10, 0x5A, 0x02, 0x42, -/* 00012F20 */ 0x1F, 0x03, 0xFF, 0x41, 0x8C, 0x02, 0x37, 0x42, 0x4B, 0x42, 0x6A, 0x41, 0x42, 0x0B, 0x07, 0x04, -/* 00012F30 */ 0x00, 0x5A, 0x00, 0x42, 0x90, 0x03, 0x43, 0x5F, 0x43, 0x43, 0x11, 0x5A, 0x01, 0x43, 0x5A, 0x02, -/* 00012F40 */ 0x2A, 0xCB, 0x2C, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x90, 0x03, -/* 00012F50 */ 0x44, 0x78, 0x44, 0x43, 0x0C, 0x78, 0x2B, 0x43, 0x0D, 0x78, 0x27, 0x43, 0x0E, 0x78, 0x2B, 0x43, -/* 00012F60 */ 0x0F, 0x5A, 0x03, 0x43, 0x1F, 0x04, 0xFF, 0x41, 0xD3, 0x0E, 0x41, 0x47, 0x3B, 0x41, 0x8C, 0x02, -/* 00012F70 */ 0x37, 0x42, 0x4B, 0x42, 0x6A, 0x41, 0x42, 0x0B, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x42, 0x5A, 0x01, -/* 00012F80 */ 0x3B, 0x5A, 0x02, 0x2C, 0xCB, 0x44, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, -/* 00012F90 */ 0x00, 0x78, 0x2D, 0x43, 0x0C, 0x78, 0x27, 0x43, 0x0D, 0x78, 0x27, 0x43, 0x0E, 0x78, 0x2B, 0x43, -/* 00012FA0 */ 0x0F, 0x5A, 0x03, 0x43, 0x1F, 0x04, 0xFF, 0x41, 0x8C, 0x02, 0x37, 0x42, 0x4B, 0x42, 0x6A, 0x41, -/* 00012FB0 */ 0x42, 0x0B, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x42, 0x90, 0x03, 0x43, 0x5F, 0x43, 0x43, 0x11, 0x5A, -/* 00012FC0 */ 0x01, 0x43, 0x5A, 0x02, 0x2E, 0xCB, 0x5C, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x43, 0x00, -/* 00012FD0 */ 0x00, 0x00, 0x8C, 0x02, 0x23, 0x44, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x2D, 0x5A, -/* 00012FE0 */ 0x02, 0x3B, 0x1F, 0x03, 0x44, 0x44, 0x78, 0x44, 0x43, 0x12, 0x78, 0x27, 0x43, 0x0E, 0x78, 0x2B, -/* 00012FF0 */ 0x43, 0x0F, 0x5A, 0x03, 0x43, 0x1F, 0x04, 0xFF, 0x41, 0x8C, 0x02, 0x37, 0x42, 0x4B, 0x42, 0x6A, -/* 00013000 */ 0x41, 0x42, 0x0B, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x42, 0x90, 0x03, 0x43, 0x5F, 0x43, 0x43, 0x11, -/* 00013010 */ 0x5A, 0x01, 0x43, 0x5A, 0x02, 0x30, 0xCB, 0x70, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x43, -/* 00013020 */ 0x00, 0x00, 0x00, 0x78, 0x3A, 0x43, 0x0C, 0x78, 0x27, 0x43, 0x0E, 0x78, 0x2B, 0x43, 0x0F, 0x78, -/* 00013030 */ 0x2B, 0x43, 0x0D, 0x5A, 0x03, 0x43, 0x1F, 0x04, 0xFF, 0x41, 0x8C, 0x02, 0x37, 0x42, 0x4B, 0x42, -/* 00013040 */ 0x6A, 0x41, 0x42, 0x0B, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x42, 0x90, 0x03, 0x43, 0x5F, 0x43, 0x43, -/* 00013050 */ 0x11, 0x5A, 0x01, 0x43, 0x5A, 0x02, 0x31, 0xCB, 0x88, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, -/* 00013060 */ 0x43, 0x00, 0x00, 0x00, 0xD6, 0x0F, 0x44, 0x43, 0x78, 0x44, 0x43, 0x0C, 0x78, 0x2B, 0x43, 0x0D, -/* 00013070 */ 0x78, 0x27, 0x43, 0x0E, 0x78, 0x2B, 0x43, 0x0F, 0x5A, 0x03, 0x43, 0x1F, 0x04, 0xFF, 0x41, 0x94, -/* 00013080 */ 0x0E, 0x32, 0x8C, 0x02, 0x23, 0x41, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x90, 0x0E, 0x42, 0x5A, -/* 00013090 */ 0x01, 0x42, 0xD3, 0x10, 0x42, 0x5A, 0x02, 0x42, 0x1F, 0x03, 0x41, 0x41, 0x47, 0x3C, 0x41, 0x8C, -/* 000130A0 */ 0x02, 0x37, 0x42, 0x4B, 0x42, 0x6A, 0x41, 0x42, 0x13, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x42, 0x5A, -/* 000130B0 */ 0x01, 0x3C, 0x8C, 0x01, 0x16, 0x43, 0x4B, 0x43, 0x5A, 0x02, 0x43, 0x1F, 0x03, 0x41, 0x41, 0x47, -/* 000130C0 */ 0x3D, 0x41, 0x8C, 0x02, 0x37, 0x42, 0x4B, 0x42, 0x6A, 0x41, 0x42, 0x0B, 0x07, 0x04, 0x00, 0x5A, -/* 000130D0 */ 0x00, 0x42, 0x5A, 0x01, 0x3D, 0x5A, 0x02, 0x2C, 0xCB, 0xA0, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, -/* 000130E0 */ 0x00, 0x43, 0x00, 0x00, 0x00, 0x78, 0x33, 0x43, 0x0C, 0x78, 0x27, 0x43, 0x0D, 0x78, 0x27, 0x43, -/* 000130F0 */ 0x0E, 0x78, 0x2B, 0x43, 0x0F, 0x5A, 0x03, 0x43, 0x1F, 0x04, 0xFF, 0x41, 0x8C, 0x02, 0x37, 0x42, -/* 00013100 */ 0x4B, 0x42, 0x6A, 0x41, 0x42, 0x0B, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x42, 0x90, 0x03, 0x43, 0x5A, -/* 00013110 */ 0x01, 0x43, 0x5A, 0x02, 0x33, 0xCB, 0xB8, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x43, 0x00, -/* 00013120 */ 0x00, 0x00, 0x78, 0x3D, 0x43, 0x0C, 0x78, 0x2B, 0x43, 0x0D, 0x78, 0x27, 0x43, 0x0E, 0x78, 0x2B, -/* 00013130 */ 0x43, 0x0F, 0x5A, 0x03, 0x43, 0x1F, 0x04, 0xFF, 0x41, 0x90, 0x03, 0x00, 0x09, 0x02, 0x00, 0xA6, -/* 00013140 */ 0x00, 0x24, 0x00, 0x09, 0xD0, 0x00, 0xB8, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, -/* 00013150 */ 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, -/* 00013160 */ 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, -/* 00013170 */ 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x88, 0x00, -/* 00013180 */ 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, -/* 00013190 */ 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x03, 0x04, -/* 000131A0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, -/* 000131B0 */ 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x5C, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, -/* 000131C0 */ 0x00, 0x00, 0x84, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x44, 0x00, -/* 000131D0 */ 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, -/* 000131E0 */ 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x2C, 0x00, 0x00, 0x00, 0x03, 0x04, -/* 000131F0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, -/* 00013200 */ 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, -/* 00013210 */ 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, -/* 00013220 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x01, -/* 00013230 */ 0x00, 0x00, 0x5E, 0x01, 0x00, 0x00, 0x61, 0x01, 0x00, 0x00, 0x5D, 0xFE, 0x3F, 0x01, 0xFE, 0x60, -/* 00013240 */ 0x01, 0xFE, 0x5E, 0x01, 0xFE, 0x61, 0x01, 0xFE, 0x60, 0x01, 0xFE, 0x03, 0x03, 0xFE, 0x5E, 0x01, -/* 00013250 */ 0xFE, 0x04, 0x03, 0xFE, 0x61, 0x01, 0xFE, 0x05, 0x03, 0xFE, 0x88, 0x01, 0xFE, 0x83, 0x01, 0xFE, -/* 00013260 */ 0x82, 0x01, 0xFE, 0x80, 0x01, 0xFE, 0x81, 0x01, 0xFE, 0x15, 0x01, 0xFE, 0x15, 0x01, 0xFE, 0x84, -/* 00013270 */ 0x01, 0x4D, 0xFE, 0x01, 0xED, 0x28, 0x53, 0x00, 0x00, 0x00, 0x18, 0x00, 0x3E, 0x00, 0x05, 0x00, -/* 00013280 */ 0x1B, 0x00, 0x12, 0x00, 0x3D, 0x00, 0x0E, 0x00, 0x38, 0x00, 0x1D, 0x00, 0x4C, 0x00, 0xA7, 0x00, -/* 00013290 */ 0xA3, 0x03, 0x10, 0x00, 0xF7, 0x20, 0x06, 0x00, 0xFD, 0x0A, 0x06, 0x00, 0x25, 0x07, 0x06, 0x00, -/* 000132A0 */ 0x20, 0x01, 0x06, 0x00, 0x78, 0x01, 0x18, 0x00, 0x5C, 0x00, 0x2F, 0x00, 0x36, 0x0F, 0x2A, 0x00, -/* 000132B0 */ 0x2E, 0x02, 0x2A, 0x00, 0x40, 0x02, 0x2A, 0x00, 0x9A, 0x02, 0x0C, 0x00, 0x27, 0x00, 0x05, 0x00, -/* 000132C0 */ 0xB0, 0x04, 0x17, 0x00, 0x05, 0x02, 0x06, 0x00, 0xDC, 0x03, 0x06, 0x00, 0xAC, 0x01, 0x06, 0x00, -/* 000132D0 */ 0x8F, 0x00, 0x17, 0x00, 0x4C, 0x00, 0x06, 0x00, 0xA4, 0x00, 0x14, 0x00, 0x5A, 0x00, 0x47, 0x00, -/* 000132E0 */ 0xC9, 0x00, 0x23, 0x00, 0x43, 0x00, 0x44, 0x00, 0x4C, 0x01, 0x06, 0x00, 0x9E, 0x00, 0x3A, 0x00, -/* 000132F0 */ 0xB7, 0x00, 0x51, 0x00, 0xC7, 0x00, 0x41, 0x00, 0xCF, 0x00, 0x45, 0x00, 0x59, 0x05, 0x03, 0x00, -/* 00013300 */ 0x61, 0x00, 0x1D, 0x00, 0x3D, 0x01, 0x23, 0x00, 0x7B, 0x00, 0x3A, 0x00, 0xD7, 0x00, 0x3D, 0x00, -/* 00013310 */ 0xDF, 0x00, 0x08, 0x00, 0x1B, 0x00, 0x00, 0xC2, 0x4A, 0x01, 0x00, 0x71, 0x47, 0x01, 0x00, 0xE3, -/* 00013320 */ 0x42, 0x01, 0x00, 0x1C, 0x42, 0x01, 0x00, 0x58, 0x41, 0x01, 0x00, 0xF6, 0x3E, 0x01, 0x00, 0xB2, -/* 00013330 */ 0x3D, 0x01, 0x00, 0x6E, 0x3C, 0x01, 0x00, 0x2A, 0x3B, 0x01, 0x00, 0x54, 0x39, 0x01, 0x00, 0x50, -/* 00013340 */ 0x38, 0x01, 0x00, 0x7E, 0x37, 0x01, 0x00, 0xE9, 0x36, 0x01, 0x00, 0x54, 0x36, 0x01, 0x00, 0xD6, -/* 00013350 */ 0x35, 0x01, 0x00, 0xE8, 0x33, 0x01, 0x00, 0x5B, 0x33, 0x01, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, -/* 00013360 */ 0x88, 0x01, 0x00, 0xFE, 0x9B, 0x07, 0x71, 0xA2, 0x41, 0xD1, 0x00, 0x73, 0xFF, 0xAC, 0x57, 0x01, -/* 00013370 */ 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x02, 0xFF, 0xAC, 0x57, 0x01, 0x00, 0xC9, 0xC9, 0x01, -/* 00013380 */ 0x06, 0x03, 0x07, 0x07, 0x17, 0x16, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x06, 0x08, 0x43, 0x59, -/* 00013390 */ 0x07, 0xB1, 0x05, 0x07, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA6, 0x07, 0x47, 0x04, 0x07, 0x8C, 0x02, -/* 000133A0 */ 0x17, 0x07, 0x4B, 0x07, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x05, 0x8C, 0x01, 0x0E, -/* 000133B0 */ 0x08, 0x4B, 0x08, 0x5A, 0x02, 0x08, 0x8C, 0x03, 0x03, 0x08, 0x5F, 0x08, 0x08, 0x00, 0x5A, 0x03, -/* 000133C0 */ 0x08, 0x5A, 0x04, 0x03, 0x5A, 0x05, 0x04, 0x1F, 0x06, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA6, 0x00, -/* 000133D0 */ 0x24, 0x00, 0xFE, 0xD9, 0x01, 0xFF, 0xBF, 0x57, 0x01, 0x00, 0x03, 0x05, 0x00, 0x00, 0x00, 0x0A, -/* 000133E0 */ 0x00, 0x23, 0x00, 0x32, 0x00, 0x92, 0x00, 0x00, 0x3F, 0x5D, 0x00, 0x01, 0x00, 0x8D, 0x07, 0x00, -/* 000133F0 */ 0xFE, 0x75, 0x07, 0x13, 0xA0, 0x41, 0xC3, 0x00, 0xFE, 0x0D, 0x04, 0x71, 0xFF, 0x00, 0x00, 0x00, -/* 00013400 */ 0x02, 0xFF, 0xDC, 0x51, 0x01, 0x00, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFF, 0xDC, -/* 00013410 */ 0x51, 0x01, 0x00, 0xFE, 0x60, 0x04, 0xFE, 0x60, 0x04, 0x01, 0xFE, 0x02, 0x04, 0x07, 0x12, 0x17, -/* 00013420 */ 0x05, 0x2B, 0x2A, 0x03, 0x03, 0x14, 0x15, 0x16, 0x06, 0xFE, 0x0D, 0x04, 0x08, 0x06, 0xFE, 0xF7, -/* 00013430 */ 0x03, 0x06, 0xFE, 0x99, 0x04, 0x06, 0xFE, 0x35, 0x04, 0x06, 0xFE, 0x88, 0x04, 0x06, 0xFE, 0x86, -/* 00013440 */ 0x04, 0x06, 0xFE, 0x46, 0x04, 0x06, 0xFE, 0x47, 0x04, 0x06, 0xFE, 0x48, 0x04, 0x06, 0xFE, 0x49, -/* 00013450 */ 0x04, 0x06, 0xFE, 0x4A, 0x04, 0x06, 0xFE, 0x4B, 0x04, 0x06, 0xFE, 0x4C, 0x04, 0x06, 0xFE, 0x4D, -/* 00013460 */ 0x04, 0x06, 0xFE, 0x4E, 0x04, 0x89, 0x59, 0x17, 0xB1, 0x12, 0x17, 0x4F, 0x13, 0x4F, 0x17, 0x94, -/* 00013470 */ 0x02, 0x17, 0x8C, 0x01, 0x0B, 0x17, 0x4B, 0x17, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x03, 0x5A, 0x01, -/* 00013480 */ 0x12, 0x5A, 0x02, 0x02, 0x1F, 0x03, 0x17, 0x17, 0x94, 0x02, 0x17, 0xCC, 0x17, 0x0E, 0x9F, 0x00, -/* 00013490 */ 0x04, 0x17, 0x9F, 0x01, 0x05, 0x17, 0x9F, 0x02, 0x06, 0x17, 0x9F, 0x03, 0x07, 0x17, 0x9F, 0x04, -/* 000134A0 */ 0x08, 0x17, 0x9F, 0x05, 0x09, 0x17, 0x9F, 0x06, 0x0A, 0x17, 0x9F, 0x07, 0x0B, 0x17, 0x9F, 0x08, -/* 000134B0 */ 0x0C, 0x17, 0x9F, 0x09, 0x0D, 0x17, 0x9F, 0x0A, 0x0E, 0x17, 0x9F, 0x0B, 0x0F, 0x17, 0x9F, 0x0C, -/* 000134C0 */ 0x10, 0x17, 0x9F, 0x0D, 0x11, 0x17, 0x47, 0x13, 0x17, 0x8C, 0x02, 0x19, 0x17, 0x4B, 0x17, 0x07, -/* 000134D0 */ 0x04, 0x00, 0x5A, 0x00, 0x03, 0x5A, 0x01, 0x13, 0x90, 0x02, 0x18, 0x5A, 0x02, 0x18, 0xD3, 0x00, -/* 000134E0 */ 0x18, 0x5A, 0x03, 0x18, 0x1F, 0x04, 0x00, 0x17, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFF, -/* 000134F0 */ 0x09, 0x52, 0x01, 0x00, 0x04, 0x0C, 0x00, 0x00, 0x00, 0x19, 0x00, 0x4C, 0x00, 0x3E, 0x00, 0xE6, -/* 00013500 */ 0x01, 0x24, 0x00, 0x00, 0x02, 0x00, 0x0A, 0x35, 0x01, 0x00, 0xBF, 0x4C, 0x00, 0xC1, 0x43, 0xA8, -/* 00013510 */ 0x01, 0x00, 0xFE, 0x88, 0x07, 0x44, 0xA2, 0x41, 0xD1, 0x00, 0x72, 0xFF, 0x6F, 0x54, 0x01, 0x00, -/* 00013520 */ 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFF, 0x6F, 0x54, 0x01, 0x00, 0xFE, 0xBD, 0x01, 0xFE, -/* 00013530 */ 0xBD, 0x01, 0x01, 0x07, 0x07, 0x0B, 0x1B, 0x17, 0x04, 0x01, 0x04, 0x04, 0x04, 0x04, 0x01, 0x0A, -/* 00013540 */ 0x0B, 0x06, 0xFE, 0x86, 0x04, 0x07, 0x06, 0xFE, 0x82, 0x04, 0x06, 0xFE, 0x80, 0x04, 0x0B, 0x57, -/* 00013550 */ 0x4F, 0x09, 0x14, 0x03, 0x00, 0x07, 0x02, 0x09, 0x49, 0x00, 0x8C, 0x01, 0x02, 0x0C, 0x4B, 0x0C, -/* 00013560 */ 0x5F, 0x0C, 0x0C, 0x00, 0x47, 0x09, 0x0C, 0x8C, 0x01, 0x02, 0x0C, 0x4B, 0x0C, 0x5F, 0x0C, 0x0C, -/* 00013570 */ 0x01, 0xA6, 0x0D, 0x15, 0x03, 0x00, 0x0C, 0x0D, 0x09, 0x22, 0x00, 0x15, 0x03, 0x00, 0x09, 0x03, -/* 00013580 */ 0x09, 0x1A, 0x00, 0x74, 0x09, 0x08, 0x02, 0x43, 0x0D, 0x09, 0x04, 0x47, 0x0C, 0x0D, 0x0F, 0x07, -/* 00013590 */ 0x00, 0x0D, 0x43, 0x0D, 0x09, 0x05, 0x47, 0x0C, 0x0D, 0x74, 0x0C, 0x08, 0x03, 0x47, 0x00, 0x06, -/* 000135A0 */ 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x86, 0x04, 0xFE, 0x3C, 0x02, 0xFE, 0x86, 0x04, -/* 000135B0 */ 0xFE, 0x3D, 0x02, 0xFF, 0x9F, 0x54, 0x01, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x34, -/* 000135C0 */ 0x00, 0x0D, 0x00, 0x3B, 0x00, 0x1C, 0x00, 0x52, 0x00, 0x04, 0x00, 0x35, 0x00, 0x16, 0x00, 0x63, -/* 000135D0 */ 0x00, 0x08, 0x00, 0x33, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x5E, -/* 000135E0 */ 0x07, 0x1A, 0xA0, 0x41, 0xC1, 0x00, 0xFE, 0x36, 0x04, 0x70, 0xFF, 0xB0, 0x4E, 0x01, 0x00, 0xFF, -/* 000135F0 */ 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFF, 0xB0, 0x4E, 0x01, 0x00, 0x82, 0x82, 0x01, 0x05, 0x03, -/* 00013600 */ 0x06, 0x04, 0x12, 0x11, 0x03, 0x02, 0x01, 0x01, 0x01, 0x01, 0x05, 0x08, 0x31, 0x59, 0x06, 0xB1, -/* 00013610 */ 0x03, 0x06, 0x4F, 0x04, 0x8C, 0x01, 0x0B, 0x06, 0x4B, 0x06, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, -/* 00013620 */ 0x5A, 0x01, 0x03, 0x8C, 0x01, 0x0D, 0x07, 0x4B, 0x07, 0x5A, 0x02, 0x07, 0x1F, 0x03, 0x06, 0x06, -/* 00013630 */ 0x47, 0x04, 0x06, 0x5F, 0x00, 0x04, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x31, -/* 00013640 */ 0x04, 0xFF, 0xCA, 0x4E, 0x01, 0x00, 0x03, 0x07, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x3E, 0x00, 0x09, -/* 00013650 */ 0x00, 0x29, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x49, 0x07, 0x1E, -/* 00013660 */ 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x27, 0x04, 0x6F, 0xFF, 0x5E, 0x4B, 0x01, 0x00, 0xFF, 0x00, 0x10, -/* 00013670 */ 0x01, 0x00, 0x02, 0x02, 0xFF, 0x5E, 0x4B, 0x01, 0x00, 0x84, 0x84, 0x01, 0x06, 0x04, 0x07, 0x0A, -/* 00013680 */ 0x1A, 0x1A, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0xFE, 0x27, 0x04, 0x08, 0x4A, 0x59, -/* 00013690 */ 0x07, 0xB1, 0x05, 0x07, 0x8C, 0x03, 0x37, 0x08, 0x4B, 0x08, 0x6A, 0x07, 0x08, 0x00, 0x07, 0x04, -/* 000136A0 */ 0x00, 0x5A, 0x00, 0x08, 0x8C, 0x01, 0x09, 0x09, 0x4B, 0x09, 0x5A, 0x01, 0x09, 0xA6, 0x09, 0x5A, -/* 000136B0 */ 0x02, 0x09, 0x8C, 0x01, 0x0C, 0x09, 0x4B, 0x09, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x5A, 0x01, -/* 000136C0 */ 0x05, 0x5A, 0x02, 0x04, 0x5A, 0x03, 0x02, 0x1F, 0x04, 0x09, 0x09, 0x5A, 0x03, 0x09, 0x1F, 0x04, -/* 000136D0 */ 0x00, 0x07, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x48, 0xFF, 0x7C, 0x4B, 0x01, 0x00, 0x02, -/* 000136E0 */ 0x05, 0x00, 0x00, 0x00, 0x43, 0x00, 0x65, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, -/* 000136F0 */ 0x00, 0xFE, 0x44, 0x07, 0x17, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x26, 0x04, 0x6E, 0xFF, 0x7C, 0x4A, -/* 00013700 */ 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0x7C, 0x4A, 0x01, 0x00, 0x76, 0x76, -/* 00013710 */ 0x01, 0x06, 0x04, 0x07, 0x0A, 0x1A, 0x1A, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0xFE, -/* 00013720 */ 0x26, 0x04, 0x08, 0x4A, 0x59, 0x07, 0xB1, 0x05, 0x07, 0x8C, 0x03, 0x37, 0x08, 0x4B, 0x08, 0x6A, -/* 00013730 */ 0x07, 0x08, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x08, 0x8C, 0x01, 0x08, 0x09, 0x4B, 0x09, 0x5A, -/* 00013740 */ 0x01, 0x09, 0xA6, 0x09, 0x5A, 0x02, 0x09, 0x8C, 0x01, 0x0C, 0x09, 0x4B, 0x09, 0x07, 0x04, 0x00, -/* 00013750 */ 0x5A, 0x00, 0x03, 0x5A, 0x01, 0x05, 0x5A, 0x02, 0x04, 0x5A, 0x03, 0x02, 0x1F, 0x04, 0x09, 0x09, -/* 00013760 */ 0x5A, 0x03, 0x09, 0x1F, 0x04, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x48, 0xFF, -/* 00013770 */ 0x9A, 0x4A, 0x01, 0x00, 0x02, 0x05, 0x00, 0x00, 0x00, 0x43, 0x00, 0x57, 0x00, 0x00, 0xBF, 0x5C, -/* 00013780 */ 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x36, 0x07, 0x1D, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x40, -/* 00013790 */ 0x04, 0x6D, 0xFF, 0xD6, 0x48, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFF, 0xD6, -/* 000137A0 */ 0x48, 0x01, 0x00, 0xFE, 0x8C, 0x01, 0xFE, 0x8C, 0x01, 0x01, 0x08, 0x03, 0x09, 0x04, 0x24, 0x20, -/* 000137B0 */ 0x03, 0x03, 0x02, 0x02, 0x02, 0x02, 0x08, 0x08, 0x6E, 0x4F, 0x06, 0x4F, 0x07, 0x8C, 0x01, 0x0B, -/* 000137C0 */ 0x09, 0x4B, 0x09, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x03, 0x5A, 0x02, 0x05, 0x1F, -/* 000137D0 */ 0x03, 0x09, 0x09, 0x47, 0x06, 0x09, 0xA6, 0x09, 0x47, 0x07, 0x09, 0xA6, 0x09, 0x14, 0x03, 0x00, -/* 000137E0 */ 0x04, 0x09, 0x09, 0x18, 0x00, 0x8C, 0x03, 0x03, 0x0A, 0x6A, 0x09, 0x0A, 0x00, 0x07, 0x01, 0x00, -/* 000137F0 */ 0x5A, 0x00, 0x0A, 0x1F, 0x01, 0x09, 0x09, 0x47, 0x07, 0x09, 0x09, 0x18, 0x00, 0x8C, 0x03, 0x24, -/* 00013800 */ 0x0A, 0x6A, 0x09, 0x0A, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0A, 0x5A, 0x01, 0x04, 0x1F, 0x02, -/* 00013810 */ 0x09, 0x09, 0x47, 0x07, 0x09, 0xCC, 0x00, 0x02, 0x9F, 0x00, 0x06, 0x00, 0x9F, 0x01, 0x07, 0x00, -/* 00013820 */ 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x64, 0x02, 0xFE, 0x38, 0x03, 0xFF, 0xFF, 0x48, -/* 00013830 */ 0x01, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00, 0x19, 0x00, 0x3B, 0x00, 0x05, 0x00, 0x13, 0x00, 0x0A, -/* 00013840 */ 0x00, 0x2A, 0x00, 0x18, 0x00, 0x53, 0x00, 0x18, 0x00, 0x75, 0x00, 0x10, 0x00, 0x22, 0x00, 0x00, -/* 00013850 */ 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x21, 0x07, 0x1D, 0xA2, 0x41, 0xC1, 0x00, -/* 00013860 */ 0xFE, 0x3F, 0x04, 0x6C, 0xFF, 0xFA, 0x44, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, -/* 00013870 */ 0xFF, 0xFA, 0x44, 0x01, 0x00, 0xFE, 0xF6, 0x01, 0xFE, 0xF6, 0x01, 0x01, 0x08, 0x06, 0x0A, 0x04, -/* 00013880 */ 0x2A, 0x26, 0x03, 0x01, 0x03, 0x03, 0x03, 0x03, 0x09, 0x06, 0xFE, 0xF6, 0x03, 0x05, 0xFE, 0x98, -/* 00013890 */ 0x04, 0x06, 0xFE, 0x5B, 0x03, 0x06, 0xFE, 0x47, 0x03, 0x8E, 0x4F, 0x08, 0x2C, 0x0A, 0x06, 0x15, -/* 000138A0 */ 0x03, 0x00, 0x0A, 0x02, 0x09, 0x28, 0x00, 0x8C, 0x03, 0x03, 0x0B, 0x6A, 0x0A, 0x0B, 0x00, 0x07, -/* 000138B0 */ 0x03, 0x00, 0x5A, 0x00, 0x0B, 0x47, 0x0C, 0x03, 0x01, 0x04, 0x01, 0x0D, 0x07, 0x2F, 0x0C, 0x0C, -/* 000138C0 */ 0x0D, 0x2F, 0x0C, 0x0C, 0x04, 0x5A, 0x01, 0x0C, 0x5A, 0x02, 0x05, 0x1F, 0x03, 0xFF, 0x0A, 0x8C, -/* 000138D0 */ 0x03, 0x03, 0x0B, 0x6A, 0x0A, 0x0B, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0B, 0x5A, 0x01, 0x06, -/* 000138E0 */ 0x1F, 0x02, 0x0A, 0x0A, 0x47, 0x08, 0x0A, 0xA6, 0x0A, 0x14, 0x08, 0x00, 0x08, 0x0A, 0x5F, 0x0A, -/* 000138F0 */ 0x08, 0x02, 0x0F, 0x28, 0x00, 0x0A, 0x8C, 0x03, 0x03, 0x0B, 0x6A, 0x0A, 0x0B, 0x00, 0x07, 0x03, -/* 00013900 */ 0x00, 0x5A, 0x00, 0x0B, 0x47, 0x0C, 0x03, 0x01, 0x04, 0x01, 0x0D, 0x07, 0x2F, 0x0C, 0x0C, 0x0D, -/* 00013910 */ 0x2F, 0x0C, 0x0C, 0x04, 0x5A, 0x01, 0x0C, 0x5A, 0x02, 0x05, 0x1F, 0x03, 0xFF, 0x0A, 0x47, 0x00, -/* 00013920 */ 0x08, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x8A, 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0x8F, -/* 00013930 */ 0x04, 0xFF, 0x1D, 0x45, 0x01, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x2F, 0x00, 0x28, -/* 00013940 */ 0x00, 0x75, 0x00, 0x18, 0x00, 0x3E, 0x00, 0x0F, 0x00, 0x5D, 0x00, 0x28, 0x00, 0x76, 0x00, 0x08, -/* 00013950 */ 0x00, 0x1D, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0xFC, 0x06, 0x08, -/* 00013960 */ 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x47, 0x03, 0x6B, 0xFF, 0x25, 0x3F, 0x01, 0x00, 0xFF, 0x00, 0x10, -/* 00013970 */ 0x01, 0x00, 0x03, 0x01, 0xFF, 0x25, 0x3F, 0x01, 0x00, 0xFE, 0xB2, 0x03, 0xFE, 0xB2, 0x03, 0x01, -/* 00013980 */ 0x0A, 0x04, 0x0A, 0x05, 0x60, 0x59, 0x03, 0x06, 0x0A, 0x09, 0x0A, 0x0A, 0x09, 0x08, 0x06, 0xFE, -/* 00013990 */ 0x47, 0x03, 0xFE, 0x38, 0x01, 0x59, 0x0A, 0xB1, 0x06, 0x0A, 0x4F, 0x07, 0x4F, 0x08, 0x15, 0x05, -/* 000139A0 */ 0x00, 0x04, 0x02, 0xA6, 0x0A, 0x47, 0x04, 0x0A, 0x15, 0x05, 0x00, 0x05, 0x02, 0xA6, 0x0A, 0x47, -/* 000139B0 */ 0x05, 0x0A, 0x4F, 0x07, 0x4F, 0x08, 0x68, 0x09, 0x00, 0x00, 0x00, 0x0A, 0x14, 0x0A, 0x00, 0x06, -/* 000139C0 */ 0x0A, 0xA6, 0x0A, 0x14, 0x03, 0x00, 0x06, 0x0A, 0x09, 0x14, 0x00, 0x8C, 0x01, 0x03, 0x0A, 0x07, -/* 000139D0 */ 0x03, 0x00, 0x5A, 0x01, 0x04, 0x5A, 0x02, 0x05, 0xC1, 0x03, 0x00, 0x0A, 0x09, 0xEC, 0x00, 0x8C, -/* 000139E0 */ 0x03, 0x24, 0x0B, 0x6A, 0x0A, 0x0B, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0B, 0x5A, 0x01, 0x06, -/* 000139F0 */ 0x1F, 0x02, 0x0A, 0x0A, 0x47, 0x07, 0x0A, 0x8C, 0x03, 0x37, 0x0B, 0x4B, 0x0B, 0x6A, 0x0A, 0x0B, -/* 00013A00 */ 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0B, 0x5A, 0x01, 0x07, 0x1F, 0x02, 0x0A, 0x0A, 0x0F, 0x15, -/* 00013A10 */ 0x00, 0x0A, 0x8C, 0x03, 0x03, 0x0B, 0x6A, 0x0A, 0x0B, 0x02, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0B, -/* 00013A20 */ 0x5A, 0x01, 0x03, 0x1F, 0x02, 0xFF, 0x0A, 0x8C, 0x03, 0x03, 0x0B, 0x6A, 0x0A, 0x0B, 0x03, 0x07, -/* 00013A30 */ 0x02, 0x00, 0x5A, 0x00, 0x0B, 0x5A, 0x01, 0x07, 0x1F, 0x02, 0x0A, 0x0A, 0x47, 0x08, 0x0A, 0xA6, -/* 00013A40 */ 0x0A, 0x14, 0x03, 0x00, 0x08, 0x0A, 0x09, 0x2F, 0x00, 0x8C, 0x03, 0x37, 0x0B, 0x4B, 0x0B, 0x6A, -/* 00013A50 */ 0x0A, 0x0B, 0x04, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x0B, 0x1F, 0x01, 0x0A, 0x0A, 0x47, 0x08, 0x0A, -/* 00013A60 */ 0x8C, 0x03, 0x03, 0x0B, 0x6A, 0x0A, 0x0B, 0x05, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0B, 0x5A, 0x01, -/* 00013A70 */ 0x07, 0x5A, 0x02, 0x08, 0x1F, 0x03, 0xFF, 0x0A, 0x8C, 0x01, 0x06, 0x0A, 0x4B, 0x0A, 0x07, 0x04, -/* 00013A80 */ 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x08, 0x5A, 0x02, 0x04, 0x5A, 0x03, 0x05, 0x1F, 0x04, 0xFF, -/* 00013A90 */ 0x0A, 0x47, 0x0A, 0x08, 0x8C, 0x03, 0x37, 0x0C, 0x4B, 0x0C, 0x6A, 0x0B, 0x0C, 0x06, 0x07, 0x03, -/* 00013AA0 */ 0x00, 0x5A, 0x00, 0x0C, 0x8C, 0x01, 0x0D, 0x0D, 0x4B, 0x0D, 0x5A, 0x01, 0x0D, 0x5A, 0x02, 0x07, -/* 00013AB0 */ 0x1F, 0x03, 0x0B, 0x0B, 0x74, 0x0B, 0x0A, 0x07, 0x5F, 0x0A, 0x08, 0x08, 0x80, 0x0A, 0x0A, 0xF8, -/* 00013AC0 */ 0x00, 0xFA, 0x0A, 0x47, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x36, 0x03, -/* 00013AD0 */ 0xB0, 0xFE, 0x8E, 0x02, 0xFE, 0xEF, 0x01, 0x61, 0xFE, 0xF0, 0x01, 0x4D, 0xFE, 0x31, 0x04, 0xFE, -/* 00013AE0 */ 0x31, 0x04, 0xAB, 0xFF, 0x3D, 0x3F, 0x01, 0x00, 0x10, 0x09, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, -/* 00013AF0 */ 0x00, 0x0E, 0x00, 0x23, 0x00, 0x15, 0x00, 0x3B, 0x00, 0x14, 0x00, 0x48, 0x00, 0x18, 0x00, 0x31, -/* 00013B00 */ 0x00, 0x1B, 0x00, 0x2C, 0x00, 0x15, 0x00, 0x85, 0x00, 0x18, 0x00, 0x3F, 0x00, 0x0A, 0x00, 0x32, -/* 00013B10 */ 0x00, 0x17, 0x00, 0x2B, 0x00, 0x18, 0x00, 0x48, 0x00, 0x19, 0x00, 0x95, 0x00, 0x27, 0x00, 0x3C, -/* 00013B20 */ 0x00, 0x0B, 0x00, 0x33, 0x00, 0x08, 0x00, 0x14, 0x00, 0x00, 0xBF, 0x5D, 0x00, 0xC1, 0x03, 0x8D, -/* 00013B30 */ 0x05, 0x00, 0xFE, 0xE9, 0x06, 0x09, 0xA2, 0x41, 0xD1, 0x00, 0x69, 0xFF, 0x6F, 0x3B, 0x01, 0x00, -/* 00013B40 */ 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x06, 0x06, 0xFF, 0x6F, 0x3B, 0x01, 0x00, 0xFE, 0x8F, 0x01, -/* 00013B50 */ 0xFE, 0x8F, 0x01, 0x40, 0x04, 0xF8, 0xFE, 0x92, 0x04, 0xFE, 0x93, 0x04, 0xFE, 0x94, 0x04, 0x0C, -/* 00013B60 */ 0x03, 0x0B, 0x08, 0x16, 0x16, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x08, 0x09, 0x0A, 0x08, 0x42, -/* 00013B70 */ 0x94, 0x02, 0x03, 0x94, 0x03, 0x04, 0x94, 0x04, 0x05, 0x94, 0x05, 0x06, 0x8C, 0x03, 0x03, 0x0C, -/* 00013B80 */ 0x6A, 0x0B, 0x0C, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x8C, 0x03, 0x23, 0x0D, 0x07, 0x03, -/* 00013B90 */ 0x00, 0x5A, 0x00, 0x02, 0x90, 0x02, 0x0E, 0x5A, 0x01, 0x0E, 0xD3, 0x00, 0x0E, 0x5A, 0x02, 0x0E, -/* 00013BA0 */ 0x1F, 0x03, 0x0D, 0x0D, 0x5A, 0x01, 0x0D, 0x5A, 0x02, 0x07, 0x1F, 0x03, 0xFF, 0x0B, 0xA6, 0x00, -/* 00013BB0 */ 0x24, 0x00, 0xFE, 0xEE, 0x01, 0xFF, 0xBE, 0x3B, 0x01, 0x00, 0x02, 0x0C, 0x00, 0x00, 0x00, 0x34, -/* 00013BC0 */ 0x00, 0x3F, 0x01, 0x00, 0xC8, 0x3B, 0x01, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, -/* 00013BD0 */ 0xFE, 0xEA, 0x06, 0x45, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x97, 0x04, 0x6A, 0xFF, 0xF7, 0x3B, 0x01, -/* 00013BE0 */ 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x01, 0xFF, 0xF7, 0x3B, 0x01, 0x00, 0xE6, 0xE6, 0x01, -/* 00013BF0 */ 0x07, 0x03, 0x07, 0x09, 0x1C, 0x1A, 0x04, 0x05, 0x01, 0x01, 0x01, 0x01, 0x06, 0x08, 0x57, 0x59, -/* 00013C00 */ 0x07, 0xB1, 0x05, 0x07, 0x15, 0x05, 0x00, 0x03, 0x02, 0xA6, 0x07, 0x47, 0x03, 0x07, 0x15, 0x05, -/* 00013C10 */ 0x00, 0x04, 0x02, 0xA6, 0x07, 0x47, 0x04, 0x07, 0x8C, 0x02, 0x02, 0x08, 0x6A, 0x07, 0x08, 0x00, -/* 00013C20 */ 0x07, 0x08, 0x00, 0x5A, 0x00, 0x08, 0x5A, 0x01, 0x05, 0x8C, 0x01, 0x02, 0x09, 0x5A, 0x02, 0x09, -/* 00013C30 */ 0x8C, 0x01, 0x03, 0x09, 0x5A, 0x03, 0x09, 0x8C, 0x01, 0x04, 0x09, 0x5A, 0x04, 0x09, 0x8C, 0x01, -/* 00013C40 */ 0x05, 0x09, 0x5A, 0x05, 0x09, 0x5A, 0x06, 0x03, 0x5A, 0x07, 0x04, 0x1F, 0x08, 0x00, 0x07, 0x09, -/* 00013C50 */ 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x53, 0xFF, 0x23, 0x3C, 0x01, 0x00, 0x04, 0x05, 0x00, 0x00, -/* 00013C60 */ 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0A, 0x00, 0x27, 0x00, 0x3C, 0x00, 0x7D, 0x00, 0x00, 0xBF, 0x5D, -/* 00013C70 */ 0x00, 0xC1, 0x03, 0x8D, 0x05, 0x00, 0xFE, 0xE3, 0x06, 0x09, 0xA2, 0x41, 0xD1, 0x00, 0x67, 0xFF, -/* 00013C80 */ 0x2F, 0x39, 0x01, 0x00, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x06, 0x06, 0xFF, 0x2F, 0x39, 0x01, -/* 00013C90 */ 0x00, 0xFE, 0x8F, 0x01, 0xFE, 0x8F, 0x01, 0x40, 0x04, 0xF8, 0xFE, 0x92, 0x04, 0xFE, 0x93, 0x04, -/* 00013CA0 */ 0xFE, 0x94, 0x04, 0x0C, 0x03, 0x0B, 0x08, 0x16, 0x16, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x08, -/* 00013CB0 */ 0x09, 0x0A, 0x08, 0x42, 0x94, 0x02, 0x03, 0x94, 0x03, 0x04, 0x94, 0x04, 0x05, 0x94, 0x05, 0x06, -/* 00013CC0 */ 0x8C, 0x03, 0x03, 0x0C, 0x6A, 0x0B, 0x0C, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x8C, 0x03, -/* 00013CD0 */ 0x23, 0x0D, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x90, 0x02, 0x0E, 0x5A, 0x01, 0x0E, 0xD3, 0x00, -/* 00013CE0 */ 0x0E, 0x5A, 0x02, 0x0E, 0x1F, 0x03, 0x0D, 0x0D, 0x5A, 0x01, 0x0D, 0x5A, 0x02, 0x07, 0x1F, 0x03, -/* 00013CF0 */ 0xFF, 0x0B, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xEE, 0x01, 0xFF, 0x7E, 0x39, 0x01, 0x00, 0x02, 0x0C, -/* 00013D00 */ 0x00, 0x00, 0x00, 0x34, 0x00, 0x3F, 0x01, 0x00, 0x0C, 0x3D, 0x01, 0x00, 0xBF, 0x5C, 0x00, 0xC1, -/* 00013D10 */ 0x03, 0x88, 0x01, 0x00, 0xFE, 0xE4, 0x06, 0x45, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x96, 0x04, 0x68, -/* 00013D20 */ 0xFF, 0xB7, 0x39, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x01, 0xFF, 0xB7, 0x39, 0x01, -/* 00013D30 */ 0x00, 0xE6, 0xE6, 0x01, 0x07, 0x03, 0x07, 0x09, 0x1C, 0x1A, 0x04, 0x05, 0x01, 0x01, 0x01, 0x01, -/* 00013D40 */ 0x06, 0x08, 0x57, 0x59, 0x07, 0xB1, 0x05, 0x07, 0x15, 0x05, 0x00, 0x03, 0x02, 0xA6, 0x07, 0x47, -/* 00013D50 */ 0x03, 0x07, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA6, 0x07, 0x47, 0x04, 0x07, 0x8C, 0x02, 0x02, 0x08, -/* 00013D60 */ 0x6A, 0x07, 0x08, 0x00, 0x07, 0x08, 0x00, 0x5A, 0x00, 0x08, 0x5A, 0x01, 0x05, 0x8C, 0x01, 0x02, -/* 00013D70 */ 0x09, 0x5A, 0x02, 0x09, 0x8C, 0x01, 0x03, 0x09, 0x5A, 0x03, 0x09, 0x8C, 0x01, 0x04, 0x09, 0x5A, -/* 00013D80 */ 0x04, 0x09, 0x8C, 0x01, 0x05, 0x09, 0x5A, 0x05, 0x09, 0x5A, 0x06, 0x03, 0x5A, 0x07, 0x04, 0x1F, -/* 00013D90 */ 0x08, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x53, 0xFF, 0xE3, 0x39, 0x01, 0x00, -/* 00013DA0 */ 0x04, 0x05, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0A, 0x00, 0x27, 0x00, 0x3C, 0x00, 0x7D, -/* 00013DB0 */ 0x00, 0x00, 0xBF, 0x5D, 0x00, 0xC1, 0x03, 0x8D, 0x05, 0x00, 0xFE, 0xDD, 0x06, 0x09, 0xA2, 0x41, -/* 00013DC0 */ 0xD1, 0x00, 0x65, 0xFF, 0x01, 0x37, 0x01, 0x00, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x06, 0x06, -/* 00013DD0 */ 0xFF, 0x01, 0x37, 0x01, 0x00, 0xFE, 0x8B, 0x01, 0xFE, 0x8B, 0x01, 0x40, 0x04, 0xF8, 0xFE, 0x92, -/* 00013DE0 */ 0x04, 0xFE, 0x93, 0x04, 0xFE, 0x94, 0x04, 0x0C, 0x03, 0x0B, 0x08, 0x16, 0x16, 0x03, 0x03, 0x01, -/* 00013DF0 */ 0x01, 0x01, 0x01, 0x08, 0x09, 0x0A, 0x08, 0x42, 0x94, 0x02, 0x03, 0x94, 0x03, 0x04, 0x94, 0x04, -/* 00013E00 */ 0x05, 0x94, 0x05, 0x06, 0x8C, 0x03, 0x03, 0x0C, 0x6A, 0x0B, 0x0C, 0x00, 0x07, 0x03, 0x00, 0x5A, -/* 00013E10 */ 0x00, 0x0C, 0x8C, 0x03, 0x23, 0x0D, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x90, 0x02, 0x0E, 0x5A, -/* 00013E20 */ 0x01, 0x0E, 0xD3, 0x00, 0x0E, 0x5A, 0x02, 0x0E, 0x1F, 0x03, 0x0D, 0x0D, 0x5A, 0x01, 0x0D, 0x5A, -/* 00013E30 */ 0x02, 0x07, 0x1F, 0x03, 0xFF, 0x0B, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xEE, 0x01, 0xFF, 0x50, 0x37, -/* 00013E40 */ 0x01, 0x00, 0x02, 0x0C, 0x00, 0x00, 0x00, 0x34, 0x00, 0x3B, 0x01, 0x00, 0x50, 0x3E, 0x01, 0x00, -/* 00013E50 */ 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0xDE, 0x06, 0x45, 0xA2, 0x41, 0xC3, 0x00, -/* 00013E60 */ 0xFE, 0x95, 0x04, 0x66, 0xFF, 0x89, 0x37, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x01, -/* 00013E70 */ 0xFF, 0x89, 0x37, 0x01, 0x00, 0xE2, 0xE2, 0x01, 0x07, 0x03, 0x07, 0x09, 0x1C, 0x1A, 0x04, 0x05, -/* 00013E80 */ 0x01, 0x01, 0x01, 0x01, 0x06, 0x08, 0x57, 0x59, 0x07, 0xB1, 0x05, 0x07, 0x15, 0x05, 0x00, 0x03, -/* 00013E90 */ 0x02, 0xA6, 0x07, 0x47, 0x03, 0x07, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA6, 0x07, 0x47, 0x04, 0x07, -/* 00013EA0 */ 0x8C, 0x02, 0x02, 0x08, 0x6A, 0x07, 0x08, 0x00, 0x07, 0x08, 0x00, 0x5A, 0x00, 0x08, 0x5A, 0x01, -/* 00013EB0 */ 0x05, 0x8C, 0x01, 0x02, 0x09, 0x5A, 0x02, 0x09, 0x8C, 0x01, 0x03, 0x09, 0x5A, 0x03, 0x09, 0x8C, -/* 00013EC0 */ 0x01, 0x04, 0x09, 0x5A, 0x04, 0x09, 0x8C, 0x01, 0x05, 0x09, 0x5A, 0x05, 0x09, 0x5A, 0x06, 0x03, -/* 00013ED0 */ 0x5A, 0x07, 0x04, 0x1F, 0x08, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x53, 0xFF, -/* 00013EE0 */ 0xB1, 0x37, 0x01, 0x00, 0x04, 0x05, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0A, 0x00, 0x27, -/* 00013EF0 */ 0x00, 0x3C, 0x00, 0x7D, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x07, 0x88, 0x01, 0x00, 0xFE, 0xA6, -/* 00013F00 */ 0x06, 0x08, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x37, 0x04, 0x64, 0xFF, 0x80, 0x28, 0x01, 0x00, 0xFF, -/* 00013F10 */ 0x00, 0x10, 0x01, 0x00, 0x07, 0x07, 0xFF, 0x80, 0x28, 0x01, 0x00, 0xFE, 0x16, 0x06, 0xFE, 0x16, -/* 00013F20 */ 0x06, 0x01, 0x0E, 0x08, 0x12, 0x0A, 0x89, 0x83, 0x03, 0x07, 0x08, 0x08, 0x08, 0x08, 0x01, 0x11, -/* 00013F30 */ 0x06, 0xFE, 0xF6, 0x03, 0x06, 0xFE, 0x41, 0x04, 0x05, 0xFE, 0x91, 0x04, 0x08, 0x0C, 0x0B, 0xFE, -/* 00013F40 */ 0xBB, 0x01, 0x59, 0x12, 0xB1, 0x0E, 0x12, 0x4F, 0x0F, 0x4F, 0x10, 0x2C, 0x12, 0x0E, 0x15, 0x0D, -/* 00013F50 */ 0x00, 0x12, 0x02, 0x8C, 0x03, 0x0C, 0x12, 0xE1, 0x12, 0x0E, 0x12, 0x00, 0x0F, 0x18, 0x00, 0x12, -/* 00013F60 */ 0x8C, 0x03, 0x03, 0x13, 0x6A, 0x12, 0x13, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x13, 0x5A, 0x01, -/* 00013F70 */ 0x08, 0x5A, 0x02, 0x03, 0x1F, 0x03, 0xFF, 0x12, 0x8C, 0x03, 0x37, 0x13, 0x4B, 0x13, 0x6A, 0x12, -/* 00013F80 */ 0x13, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x13, 0x8C, 0x03, 0x0C, 0x14, 0x07, 0x02, 0x00, 0x5A, -/* 00013F90 */ 0x01, 0x0E, 0xC1, 0x02, 0x14, 0x14, 0x5A, 0x01, 0x14, 0x1F, 0x02, 0x12, 0x12, 0x47, 0x0F, 0x12, -/* 00013FA0 */ 0x8C, 0x03, 0x37, 0x13, 0x4B, 0x13, 0x6A, 0x12, 0x13, 0x02, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x13, -/* 00013FB0 */ 0x5A, 0x01, 0x0F, 0x1F, 0x02, 0x12, 0x12, 0x0F, 0x1B, 0x00, 0x12, 0x8C, 0x03, 0x37, 0x13, 0x4B, -/* 00013FC0 */ 0x13, 0x6A, 0x12, 0x13, 0x03, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x13, 0x5A, 0x01, 0x0F, 0x1F, 0x02, -/* 00013FD0 */ 0x12, 0x12, 0x0F, 0x06, 0x00, 0x12, 0x47, 0x00, 0x04, 0x09, 0x1F, 0x01, 0xA6, 0x12, 0x47, 0x10, -/* 00013FE0 */ 0x12, 0x8C, 0x03, 0x03, 0x12, 0x5F, 0x12, 0x12, 0x04, 0x0E, 0x89, 0x00, 0x12, 0xA6, 0x12, 0x14, -/* 00013FF0 */ 0x03, 0x00, 0x0C, 0x12, 0x09, 0x7F, 0x00, 0xA6, 0x12, 0x14, 0x03, 0x00, 0x0D, 0x12, 0x09, 0x75, -/* 00014000 */ 0x00, 0x8C, 0x01, 0x0A, 0x12, 0x4B, 0x12, 0x95, 0x12, 0x12, 0x0B, 0x0E, 0x10, 0x00, 0x12, 0x8C, -/* 00014010 */ 0x01, 0x0A, 0x12, 0x4B, 0x12, 0x95, 0x12, 0x12, 0x0B, 0x47, 0x10, 0x12, 0x09, 0x57, 0x00, 0x8C, -/* 00014020 */ 0x03, 0x37, 0x13, 0x4B, 0x13, 0x6A, 0x12, 0x13, 0x05, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x13, 0x1F, -/* 00014030 */ 0x01, 0x12, 0x12, 0x47, 0x10, 0x12, 0x8C, 0x01, 0x06, 0x12, 0x4B, 0x12, 0x07, 0x04, 0x00, 0x5A, -/* 00014040 */ 0x00, 0x05, 0x5A, 0x01, 0x10, 0xA6, 0x13, 0x5A, 0x02, 0x13, 0x8C, 0x01, 0x07, 0x13, 0x4B, 0x13, -/* 00014050 */ 0x07, 0x04, 0x00, 0x5A, 0x00, 0x05, 0xA6, 0x14, 0x5A, 0x01, 0x14, 0x5A, 0x02, 0x09, 0x5A, 0x03, -/* 00014060 */ 0x0A, 0x1F, 0x04, 0x13, 0x13, 0x5A, 0x03, 0x13, 0x1F, 0x04, 0xFF, 0x12, 0x8C, 0x01, 0x0A, 0x12, -/* 00014070 */ 0x4B, 0x12, 0x9A, 0x10, 0x12, 0x0B, 0x0F, 0x49, 0x00, 0x10, 0x8C, 0x03, 0x37, 0x13, 0x4B, 0x13, -/* 00014080 */ 0x6A, 0x12, 0x13, 0x05, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x13, 0x1F, 0x01, 0x12, 0x12, 0x47, 0x10, -/* 00014090 */ 0x12, 0x8C, 0x01, 0x06, 0x12, 0x4B, 0x12, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x05, 0x5A, 0x01, 0x10, -/* 000140A0 */ 0x5A, 0x02, 0x0C, 0x8C, 0x01, 0x07, 0x13, 0x4B, 0x13, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x05, 0x5A, -/* 000140B0 */ 0x01, 0x0D, 0x5A, 0x02, 0x09, 0x5A, 0x03, 0x0A, 0x1F, 0x04, 0x13, 0x13, 0x5A, 0x03, 0x13, 0x1F, -/* 000140C0 */ 0x04, 0xFF, 0x12, 0x8C, 0x03, 0x03, 0x13, 0x6A, 0x12, 0x13, 0x06, 0x07, 0x05, 0x00, 0x5A, 0x00, -/* 000140D0 */ 0x13, 0x5A, 0x01, 0x10, 0x8C, 0x03, 0x24, 0x15, 0x6A, 0x14, 0x15, 0x07, 0x07, 0x02, 0x00, 0x5A, -/* 000140E0 */ 0x00, 0x15, 0x5A, 0x01, 0x0E, 0x1F, 0x02, 0x14, 0x14, 0x5A, 0x02, 0x14, 0x5A, 0x03, 0x06, 0x5A, -/* 000140F0 */ 0x04, 0x07, 0x1F, 0x05, 0x00, 0x12, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x8A, 0x02, -/* 00014100 */ 0x8D, 0xB4, 0xB1, 0xFE, 0x61, 0x03, 0x61, 0xFE, 0xE6, 0x01, 0xFE, 0x38, 0x03, 0xFF, 0xF5, 0x28, -/* 00014110 */ 0x01, 0x00, 0x11, 0x09, 0x00, 0x00, 0x00, 0x15, 0x00, 0x4B, 0x00, 0x18, 0x00, 0x48, 0x00, 0x28, -/* 00014120 */ 0x00, 0x35, 0x00, 0x36, 0x00, 0x3C, 0x00, 0x06, 0x00, 0x32, 0x00, 0x05, 0x00, 0x29, 0x00, 0x20, -/* 00014130 */ 0x00, 0xC6, 0x00, 0x0E, 0x00, 0x7C, 0x00, 0x10, 0x00, 0x96, 0x00, 0x17, 0x00, 0x2E, 0x00, 0x36, -/* 00014140 */ 0x00, 0x76, 0x00, 0x0A, 0x00, 0x70, 0x00, 0x04, 0x00, 0x24, 0x00, 0x17, 0x00, 0x2A, 0x00, 0x32, -/* 00014150 */ 0x00, 0x79, 0x00, 0x38, 0x00, 0x8E, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, -/* 00014160 */ 0xFE, 0x96, 0x06, 0x26, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x3D, 0x04, 0x63, 0xFF, 0x15, 0x26, 0x01, -/* 00014170 */ 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFF, 0x15, 0x26, 0x01, 0x00, 0xFD, 0xFD, 0x01, -/* 00014180 */ 0x05, 0x04, 0x07, 0x06, 0x22, 0x22, 0x03, 0x02, 0x04, 0x04, 0x04, 0x04, 0x06, 0x0B, 0x0C, 0x6D, -/* 00014190 */ 0x8C, 0x03, 0x37, 0x08, 0x4B, 0x08, 0x6A, 0x07, 0x08, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x08, -/* 000141A0 */ 0x5A, 0x01, 0x05, 0x1F, 0x02, 0x07, 0x07, 0x0F, 0x1B, 0x00, 0x07, 0x8C, 0x03, 0x37, 0x08, 0x4B, -/* 000141B0 */ 0x08, 0x6A, 0x07, 0x08, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x08, 0x5A, 0x01, 0x05, 0x1F, 0x02, -/* 000141C0 */ 0x07, 0x07, 0x0F, 0x12, 0x00, 0x07, 0x8C, 0x03, 0x03, 0x08, 0x6A, 0x07, 0x08, 0x02, 0x07, 0x01, -/* 000141D0 */ 0x00, 0x5A, 0x00, 0x08, 0x1F, 0x01, 0xFF, 0x07, 0x8C, 0x03, 0x03, 0x08, 0x6A, 0x07, 0x08, 0x03, -/* 000141E0 */ 0x07, 0x05, 0x00, 0x5A, 0x00, 0x08, 0x5A, 0x01, 0x04, 0x5A, 0x02, 0x05, 0x5A, 0x03, 0x02, 0x5A, -/* 000141F0 */ 0x04, 0x03, 0x1F, 0x05, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xB4, 0xB1, 0xFE, -/* 00014200 */ 0x86, 0x02, 0xFE, 0xE6, 0x01, 0xFF, 0x35, 0x26, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x36, -/* 00014210 */ 0x00, 0x34, 0x00, 0x12, 0x00, 0x38, 0x00, 0x23, 0x00, 0x70, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, -/* 00014220 */ 0x03, 0x88, 0x01, 0x00, 0xFE, 0x8E, 0x06, 0x1F, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x3C, 0x04, 0x62, -/* 00014230 */ 0xFF, 0xEE, 0x24, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFF, 0xEE, 0x24, 0x01, -/* 00014240 */ 0x00, 0xFE, 0xFE, 0x00, 0xFE, 0xFE, 0x00, 0x01, 0x05, 0x03, 0x06, 0x06, 0x22, 0x22, 0x03, 0x02, -/* 00014250 */ 0x04, 0x04, 0x04, 0x04, 0x05, 0x0C, 0x6D, 0x8C, 0x03, 0x37, 0x07, 0x4B, 0x07, 0x6A, 0x06, 0x07, -/* 00014260 */ 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x07, 0x5A, 0x01, 0x04, 0x1F, 0x02, 0x06, 0x06, 0x0F, 0x1B, -/* 00014270 */ 0x00, 0x06, 0x8C, 0x03, 0x37, 0x07, 0x4B, 0x07, 0x6A, 0x06, 0x07, 0x01, 0x07, 0x02, 0x00, 0x5A, -/* 00014280 */ 0x00, 0x07, 0x5A, 0x01, 0x04, 0x1F, 0x02, 0x06, 0x06, 0x0F, 0x12, 0x00, 0x06, 0x8C, 0x03, 0x03, -/* 00014290 */ 0x07, 0x6A, 0x06, 0x07, 0x02, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x07, 0x1F, 0x01, 0xFF, 0x06, 0x8C, -/* 000142A0 */ 0x03, 0x03, 0x07, 0x6A, 0x06, 0x07, 0x03, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x07, 0x5A, 0x01, 0x03, -/* 000142B0 */ 0x5A, 0x02, 0x04, 0x5A, 0x03, 0x02, 0x5A, 0x04, 0x02, 0x1F, 0x05, 0x00, 0x06, 0x09, 0x02, 0x00, -/* 000142C0 */ 0xA6, 0x00, 0x24, 0x00, 0xB4, 0xB1, 0xFE, 0x86, 0x02, 0xFE, 0xE6, 0x01, 0xFF, 0x0E, 0x25, 0x01, -/* 000142D0 */ 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x34, 0x00, 0x12, 0x00, 0x38, 0x00, 0x23, 0x00, -/* 000142E0 */ 0x71, 0x00, 0x00, 0x3F, 0x5D, 0x00, 0xC1, 0x43, 0xAD, 0x05, 0x00, 0xFE, 0x5F, 0x06, 0x22, 0xA2, -/* 000142F0 */ 0x41, 0xC1, 0x00, 0xFE, 0x3B, 0x04, 0x5D, 0xFF, 0xCC, 0x1D, 0x01, 0x00, 0x04, 0xFF, 0x00, 0x10, -/* 00014300 */ 0x01, 0x00, 0x04, 0x04, 0xFF, 0xCC, 0x1D, 0x01, 0x00, 0xFE, 0x00, 0x07, 0xFE, 0x00, 0x07, 0x02, -/* 00014310 */ 0xFE, 0xCA, 0x01, 0xFE, 0x90, 0x04, 0x0B, 0x0F, 0x15, 0x04, 0x68, 0x66, 0x03, 0x04, 0x03, 0x03, -/* 00014320 */ 0x03, 0x03, 0x01, 0x12, 0x13, 0x14, 0x15, 0x07, 0x0B, 0x06, 0xFE, 0x56, 0x04, 0x05, 0xFE, 0x53, -/* 00014330 */ 0x04, 0x06, 0xFE, 0x46, 0x04, 0x06, 0xFE, 0x48, 0x04, 0x06, 0xFE, 0x49, 0x04, 0x06, 0xFE, 0x4A, -/* 00014340 */ 0x04, 0x05, 0xFE, 0x58, 0x04, 0x06, 0xFE, 0x4B, 0x04, 0x06, 0xFE, 0x4C, 0x04, 0x06, 0xFE, 0x4D, -/* 00014350 */ 0x04, 0x06, 0xFE, 0x54, 0x04, 0xFE, 0x61, 0x01, 0x94, 0x02, 0x0F, 0x4F, 0x16, 0x94, 0x03, 0x16, -/* 00014360 */ 0x90, 0x02, 0x16, 0xA6, 0x17, 0x14, 0x03, 0x00, 0x16, 0x17, 0x09, 0x06, 0x00, 0x47, 0x16, 0x02, -/* 00014370 */ 0x09, 0x1B, 0x00, 0x8C, 0x03, 0x24, 0x18, 0x6A, 0x17, 0x18, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 00014380 */ 0x18, 0x90, 0x02, 0x19, 0x5A, 0x01, 0x19, 0x1F, 0x02, 0x17, 0x17, 0x47, 0x16, 0x17, 0x94, 0x02, -/* 00014390 */ 0x16, 0x8C, 0x03, 0x37, 0x17, 0x4B, 0x17, 0x6A, 0x16, 0x17, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 000143A0 */ 0x17, 0x90, 0x02, 0x18, 0x5A, 0x01, 0x18, 0x1F, 0x02, 0x16, 0x16, 0x94, 0x02, 0x16, 0x94, 0x03, -/* 000143B0 */ 0x03, 0x14, 0x08, 0x00, 0x10, 0x04, 0x14, 0x03, 0x00, 0x10, 0x05, 0x09, 0x30, 0x00, 0x8C, 0x03, -/* 000143C0 */ 0x37, 0x17, 0x4B, 0x17, 0x6A, 0x16, 0x17, 0x02, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x17, 0xCC, 0x18, -/* 000143D0 */ 0x04, 0x9F, 0x00, 0x06, 0x18, 0x9F, 0x01, 0x07, 0x18, 0x9F, 0x02, 0x08, 0x18, 0x9F, 0x03, 0x09, -/* 000143E0 */ 0x18, 0x5A, 0x01, 0x18, 0xD3, 0x00, 0x18, 0x5A, 0x02, 0x18, 0x1F, 0x03, 0xFF, 0x16, 0x14, 0x08, -/* 000143F0 */ 0x00, 0x10, 0x0A, 0x14, 0x03, 0x00, 0x10, 0x05, 0x09, 0x2C, 0x00, 0x8C, 0x03, 0x37, 0x17, 0x4B, -/* 00014400 */ 0x17, 0x6A, 0x16, 0x17, 0x02, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x17, 0xCC, 0x18, 0x03, 0x9F, 0x00, -/* 00014410 */ 0x0B, 0x18, 0x9F, 0x01, 0x0C, 0x18, 0x9F, 0x02, 0x0D, 0x18, 0x5A, 0x01, 0x18, 0xD3, 0x01, 0x18, -/* 00014420 */ 0x5A, 0x02, 0x18, 0x1F, 0x03, 0xFF, 0x16, 0x90, 0x03, 0x16, 0x14, 0x03, 0x00, 0x16, 0x03, 0x09, -/* 00014430 */ 0x39, 0x00, 0x14, 0x08, 0x00, 0x11, 0x04, 0x14, 0x03, 0x00, 0x11, 0x0E, 0x09, 0x2C, 0x00, 0x8C, -/* 00014440 */ 0x03, 0x37, 0x17, 0x4B, 0x17, 0x6A, 0x16, 0x17, 0x02, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x17, 0xCC, -/* 00014450 */ 0x18, 0x03, 0x9F, 0x00, 0x07, 0x18, 0x9F, 0x01, 0x08, 0x18, 0x9F, 0x02, 0x09, 0x18, 0x5A, 0x01, -/* 00014460 */ 0x18, 0xD3, 0x02, 0x18, 0x5A, 0x02, 0x18, 0x1F, 0x03, 0xFF, 0x16, 0x90, 0x03, 0x16, 0x14, 0x03, -/* 00014470 */ 0x00, 0x16, 0x03, 0x09, 0x39, 0x00, 0x14, 0x08, 0x00, 0x11, 0x0A, 0x14, 0x03, 0x00, 0x11, 0x0E, -/* 00014480 */ 0x09, 0x2C, 0x00, 0x8C, 0x03, 0x37, 0x17, 0x4B, 0x17, 0x6A, 0x16, 0x17, 0x02, 0x07, 0x03, 0x00, -/* 00014490 */ 0x5A, 0x00, 0x17, 0xCC, 0x18, 0x03, 0x9F, 0x00, 0x0B, 0x18, 0x9F, 0x01, 0x0C, 0x18, 0x9F, 0x02, -/* 000144A0 */ 0x0D, 0x18, 0x5A, 0x01, 0x18, 0xD3, 0x03, 0x18, 0x5A, 0x02, 0x18, 0x1F, 0x03, 0xFF, 0x16, 0x90, -/* 000144B0 */ 0x02, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x36, 0x03, 0x61, 0x86, 0xFF, 0x01, -/* 000144C0 */ 0x1E, 0x01, 0x00, 0x0D, 0x08, 0x00, 0x00, 0x00, 0x31, 0x00, 0x51, 0x00, 0x1D, 0x00, 0x29, 0x00, -/* 000144D0 */ 0x03, 0x00, 0x25, 0x00, 0x0D, 0x00, 0x41, 0x00, 0x30, 0x00, 0x14, 0x01, 0x0D, 0x00, 0x41, 0x00, -/* 000144E0 */ 0x2C, 0x00, 0x0D, 0x01, 0x18, 0x00, 0x5C, 0x00, 0x2C, 0x00, 0x5A, 0x01, 0x18, 0x00, 0x5C, 0x00, -/* 000144F0 */ 0x2C, 0x00, 0x5E, 0x01, 0x08, 0x00, 0x18, 0x00, 0x00, 0x0A, 0x47, 0x01, 0x00, 0xA3, 0x46, 0x01, -/* 00014500 */ 0x00, 0xD6, 0x45, 0x01, 0x00, 0x09, 0x45, 0x01, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x13, 0x88, 0x21, -/* 00014510 */ 0x00, 0xFE, 0x81, 0x06, 0x38, 0xA2, 0x41, 0xD1, 0x00, 0x61, 0xFF, 0x7D, 0x23, 0x01, 0x00, 0xFF, -/* 00014520 */ 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0x7D, 0x23, 0x01, 0x00, 0xFE, 0x19, 0x01, 0xFE, 0x19, -/* 00014530 */ 0x01, 0x41, 0x05, 0x09, 0x0B, 0x05, 0x12, 0x12, 0x04, 0x02, 0x05, 0x05, 0x05, 0x05, 0x01, 0x0A, -/* 00014540 */ 0x06, 0xFE, 0x40, 0x03, 0x06, 0xFE, 0x13, 0x04, 0x06, 0xFE, 0x42, 0x03, 0x0B, 0x06, 0xFE, 0x43, -/* 00014550 */ 0x03, 0x06, 0xFE, 0x44, 0x03, 0x07, 0x42, 0x8C, 0x04, 0x37, 0x0C, 0x4B, 0x0C, 0x6A, 0x0B, 0x0C, -/* 00014560 */ 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x0C, 0x8C, 0x01, 0x02, 0x0D, 0x5A, 0x01, 0x0D, 0x5A, 0x02, -/* 00014570 */ 0x09, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x78, 0x03, -/* 00014580 */ 0x0D, 0x01, 0x78, 0x05, 0x0D, 0x02, 0x78, 0x05, 0x0D, 0x03, 0x78, 0x05, 0x0D, 0x04, 0x5A, 0x03, -/* 00014590 */ 0x0D, 0x1F, 0x04, 0xFF, 0x0B, 0xA6, 0x00, 0x24, 0x00, 0x01, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 000145A0 */ 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, -/* 000145B0 */ 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0xFE, 0x88, 0x01, 0xFE, 0x83, 0x01, 0xFE, 0x82, -/* 000145C0 */ 0x01, 0xFE, 0x80, 0x01, 0xFE, 0x81, 0x01, 0xFF, 0xA3, 0x23, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, -/* 000145D0 */ 0x00, 0x40, 0x00, 0xF2, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x13, 0x88, 0x21, 0x00, 0xFE, 0x76, -/* 000145E0 */ 0x06, 0x34, 0xA2, 0x41, 0xD1, 0x00, 0x60, 0xFF, 0xC3, 0x21, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, -/* 000145F0 */ 0x00, 0x02, 0x02, 0xFF, 0xC3, 0x21, 0x01, 0x00, 0xFE, 0x19, 0x01, 0xFE, 0x19, 0x01, 0x41, 0x05, -/* 00014600 */ 0x09, 0x0B, 0x05, 0x12, 0x12, 0x04, 0x02, 0x05, 0x05, 0x05, 0x05, 0x01, 0x0A, 0x06, 0xFE, 0x40, -/* 00014610 */ 0x03, 0x06, 0xFE, 0x13, 0x04, 0x06, 0xFE, 0x42, 0x03, 0x0B, 0x06, 0xFE, 0x43, 0x03, 0x06, 0xFE, -/* 00014620 */ 0x44, 0x03, 0x07, 0x42, 0x8C, 0x04, 0x37, 0x0C, 0x4B, 0x0C, 0x6A, 0x0B, 0x0C, 0x00, 0x07, 0x04, -/* 00014630 */ 0x00, 0x5A, 0x00, 0x0C, 0x8C, 0x01, 0x02, 0x0D, 0x5A, 0x01, 0x0D, 0x5A, 0x02, 0x09, 0xCB, 0x00, -/* 00014640 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x78, 0x03, 0x0D, 0x01, 0x78, -/* 00014650 */ 0x05, 0x0D, 0x02, 0x78, 0x05, 0x0D, 0x03, 0x78, 0x05, 0x0D, 0x04, 0x5A, 0x03, 0x0D, 0x1F, 0x04, -/* 00014660 */ 0xFF, 0x0B, 0xA6, 0x00, 0x24, 0x00, 0x01, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, -/* 00014670 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, -/* 00014680 */ 0x00, 0x81, 0x01, 0x00, 0x00, 0xFE, 0x88, 0x01, 0xFE, 0x83, 0x01, 0xFE, 0x82, 0x01, 0xFE, 0x80, -/* 00014690 */ 0x01, 0xFE, 0x81, 0x01, 0xFF, 0xE9, 0x21, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, -/* 000146A0 */ 0xF2, 0x00, 0x00, 0xBF, 0x4C, 0x00, 0x01, 0x00, 0x88, 0x01, 0x00, 0xFE, 0x6D, 0x06, 0x38, 0xA2, -/* 000146B0 */ 0x41, 0xD1, 0x00, 0x5F, 0xFF, 0x5E, 0x20, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, -/* 000146C0 */ 0xFF, 0x5E, 0x20, 0x01, 0x00, 0xC7, 0xC7, 0x41, 0x04, 0x03, 0x06, 0x0B, 0x0A, 0x04, 0x01, 0x05, -/* 000146D0 */ 0x0C, 0x21, 0x4F, 0x04, 0x8C, 0x01, 0x02, 0x06, 0x95, 0x06, 0x06, 0x03, 0x47, 0x04, 0x06, 0xA6, -/* 000146E0 */ 0x06, 0x15, 0x03, 0x00, 0x04, 0x06, 0x09, 0x06, 0x00, 0x01, 0x34, 0x01, 0x01, 0x03, 0x02, 0xA6, -/* 000146F0 */ 0x00, 0x24, 0x00, 0xFF, 0x84, 0x20, 0x01, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x31, -/* 00014700 */ 0x00, 0x0A, 0x00, 0x33, 0x00, 0x08, 0x00, 0x3C, 0x00, 0x00, 0xBF, 0x4C, 0x00, 0x01, 0x00, 0x88, -/* 00014710 */ 0x01, 0x00, 0xFE, 0x64, 0x06, 0x3F, 0xA2, 0x41, 0xD1, 0x00, 0x5E, 0xFF, 0x10, 0x1F, 0x01, 0x00, -/* 00014720 */ 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0x10, 0x1F, 0x01, 0x00, 0xC7, 0xC7, 0x41, 0x04, -/* 00014730 */ 0x03, 0x06, 0x0B, 0x0A, 0x04, 0x01, 0x05, 0x0C, 0x21, 0x4F, 0x04, 0x8C, 0x01, 0x02, 0x06, 0x95, -/* 00014740 */ 0x06, 0x06, 0x03, 0x47, 0x04, 0x06, 0xA6, 0x06, 0x15, 0x03, 0x00, 0x04, 0x06, 0x09, 0x06, 0x00, -/* 00014750 */ 0x01, 0x34, 0x01, 0x01, 0x03, 0x02, 0xA6, 0x00, 0x24, 0x00, 0xFF, 0x36, 0x1F, 0x01, 0x00, 0x04, -/* 00014760 */ 0x02, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x31, 0x00, 0x0A, 0x00, 0x33, 0x00, 0x08, 0x00, 0x3C, 0x00, -/* 00014770 */ 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x27, 0x06, 0x29, 0xA2, 0x41, 0xC1, -/* 00014780 */ 0x00, 0xFE, 0x3A, 0x04, 0x5C, 0xFF, 0xD6, 0x12, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, -/* 00014790 */ 0x04, 0xFF, 0xD6, 0x12, 0x01, 0x00, 0xFE, 0x84, 0x08, 0xFE, 0x84, 0x08, 0x01, 0x0D, 0x1A, 0x24, -/* 000147A0 */ 0x07, 0xA1, 0x93, 0x03, 0x09, 0x14, 0x14, 0x14, 0x14, 0x23, 0x08, 0x05, 0xFE, 0x53, 0x04, 0x06, -/* 000147B0 */ 0xFE, 0x56, 0x04, 0x06, 0xFE, 0x00, 0x04, 0x06, 0xFE, 0xAD, 0x03, 0x05, 0xFE, 0xBC, 0x03, 0x05, -/* 000147C0 */ 0xFE, 0xFF, 0x03, 0x06, 0xFE, 0x86, 0x04, 0x06, 0xFE, 0x82, 0x04, 0x06, 0xFE, 0x80, 0x04, 0x06, -/* 000147D0 */ 0xFE, 0x81, 0x04, 0x06, 0xFE, 0x83, 0x04, 0x06, 0xFE, 0xB4, 0x03, 0x06, 0xFE, 0xB3, 0x03, 0x06, -/* 000147E0 */ 0xFE, 0xB5, 0x03, 0x05, 0xFE, 0x87, 0x04, 0x06, 0xFE, 0x88, 0x04, 0x05, 0xFE, 0x89, 0x04, 0x05, -/* 000147F0 */ 0xFE, 0x8A, 0x04, 0x05, 0xFE, 0x8B, 0x04, 0x06, 0xFE, 0x8C, 0x04, 0x05, 0xFE, 0x8D, 0x04, 0x05, -/* 00014800 */ 0xFE, 0x8E, 0x04, 0x0B, 0xFE, 0x0E, 0x02, 0x4F, 0x1D, 0x4F, 0x1E, 0x4F, 0x1F, 0x4F, 0x20, 0x4F, -/* 00014810 */ 0x21, 0x4F, 0x22, 0x8C, 0x02, 0x11, 0x24, 0x4B, 0x24, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5A, -/* 00014820 */ 0x01, 0x1B, 0x1F, 0x02, 0x24, 0x24, 0x47, 0x1D, 0x24, 0x8C, 0x01, 0x07, 0x24, 0x4B, 0x24, 0x07, -/* 00014830 */ 0x04, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x1C, 0x5A, 0x02, 0x03, 0x5A, 0x03, 0x04, 0x1F, 0x04, -/* 00014840 */ 0x24, 0x24, 0x47, 0x1C, 0x24, 0x8C, 0x03, 0x37, 0x25, 0x4B, 0x25, 0x6A, 0x24, 0x25, 0x00, 0x07, -/* 00014850 */ 0x01, 0x00, 0x5A, 0x00, 0x25, 0x1F, 0x01, 0x24, 0x24, 0x47, 0x1E, 0x24, 0x47, 0x24, 0x1E, 0x8C, -/* 00014860 */ 0x02, 0x02, 0x25, 0x4B, 0x25, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x1C, 0x5A, 0x02, -/* 00014870 */ 0x05, 0x5A, 0x03, 0x06, 0xCC, 0x26, 0x02, 0x9F, 0x00, 0x07, 0x26, 0x9F, 0x01, 0x08, 0x26, 0x5A, -/* 00014880 */ 0x04, 0x26, 0x5A, 0x05, 0x08, 0x1F, 0x06, 0x25, 0x25, 0x74, 0x25, 0x24, 0x01, 0x47, 0x24, 0x1E, -/* 00014890 */ 0x8C, 0x02, 0x02, 0x25, 0x4B, 0x25, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x1C, 0x5A, -/* 000148A0 */ 0x02, 0x09, 0x5A, 0x03, 0x06, 0xCC, 0x26, 0x04, 0x9F, 0x00, 0x0A, 0x26, 0x9F, 0x01, 0x0B, 0x26, -/* 000148B0 */ 0x9F, 0x02, 0x0C, 0x26, 0x9F, 0x03, 0x0D, 0x26, 0x5A, 0x04, 0x26, 0xA6, 0x26, 0x5A, 0x05, 0x26, -/* 000148C0 */ 0x1F, 0x06, 0x25, 0x25, 0x74, 0x25, 0x24, 0x02, 0x8C, 0x02, 0x0B, 0x24, 0x4B, 0x24, 0x07, 0x05, -/* 000148D0 */ 0x00, 0x5A, 0x00, 0x02, 0x8C, 0x03, 0x03, 0x25, 0x5F, 0x25, 0x25, 0x03, 0x5A, 0x01, 0x25, 0x5A, -/* 000148E0 */ 0x02, 0x1D, 0x5A, 0x03, 0x1E, 0xCC, 0x25, 0x03, 0x9F, 0x00, 0x0E, 0x25, 0x9F, 0x01, 0x0F, 0x25, -/* 000148F0 */ 0x9F, 0x02, 0x10, 0x25, 0x5A, 0x04, 0x25, 0x1F, 0x05, 0x24, 0x24, 0x47, 0x1F, 0x24, 0x5F, 0x24, -/* 00014900 */ 0x1F, 0x04, 0x74, 0x24, 0x1A, 0x05, 0x5F, 0x24, 0x1F, 0x06, 0x74, 0x24, 0x1A, 0x07, 0x5F, 0x24, -/* 00014910 */ 0x1F, 0x08, 0x74, 0x24, 0x1A, 0x09, 0x5F, 0x24, 0x1F, 0x0A, 0x74, 0x24, 0x1A, 0x0B, 0x5F, 0x24, -/* 00014920 */ 0x1F, 0x0C, 0x47, 0x20, 0x24, 0x5F, 0x24, 0x1C, 0x0D, 0x47, 0x21, 0x24, 0xA6, 0x24, 0x14, 0x03, -/* 00014930 */ 0x00, 0x21, 0x24, 0x09, 0x18, 0x00, 0x8C, 0x03, 0x03, 0x25, 0x6A, 0x24, 0x25, 0x0E, 0x07, 0x01, -/* 00014940 */ 0x00, 0x5A, 0x00, 0x25, 0x1F, 0x01, 0x24, 0x24, 0x47, 0x21, 0x24, 0x09, 0x18, 0x00, 0x8C, 0x03, -/* 00014950 */ 0x24, 0x25, 0x6A, 0x24, 0x25, 0x0F, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x25, 0x5A, 0x01, 0x21, 0x1F, -/* 00014960 */ 0x02, 0x24, 0x24, 0x47, 0x21, 0x24, 0x8C, 0x03, 0x03, 0x25, 0x6A, 0x24, 0x25, 0x10, 0x07, 0x02, -/* 00014970 */ 0x00, 0x5A, 0x00, 0x25, 0x5A, 0x01, 0x21, 0x1F, 0x02, 0x24, 0x24, 0x47, 0x22, 0x24, 0xA6, 0x24, -/* 00014980 */ 0x14, 0x08, 0x00, 0x22, 0x24, 0x14, 0x03, 0x00, 0x22, 0x11, 0x09, 0x20, 0x00, 0x8C, 0x03, 0x38, -/* 00014990 */ 0x25, 0x4B, 0x25, 0x6A, 0x24, 0x25, 0x11, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x25, 0x5A, 0x01, 0x21, -/* 000149A0 */ 0x5A, 0x02, 0x12, 0x5A, 0x03, 0x13, 0x1F, 0x04, 0xFF, 0x24, 0x09, 0x16, 0x00, 0x14, 0x08, 0x00, -/* 000149B0 */ 0x22, 0x14, 0x14, 0x03, 0x00, 0x22, 0x15, 0x09, 0x06, 0x00, 0x47, 0x21, 0x16, 0x09, 0x03, 0x00, -/* 000149C0 */ 0x47, 0x21, 0x22, 0x74, 0x21, 0x1A, 0x12, 0x8C, 0x02, 0x02, 0x24, 0x4B, 0x24, 0x07, 0x06, 0x00, -/* 000149D0 */ 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x1C, 0x5A, 0x02, 0x17, 0x5A, 0x03, 0x06, 0xCC, 0x25, 0x02, 0x9F, -/* 000149E0 */ 0x00, 0x18, 0x25, 0x9F, 0x01, 0x08, 0x25, 0x5A, 0x04, 0x25, 0x5A, 0x05, 0x08, 0x1F, 0x06, 0xFF, -/* 000149F0 */ 0x24, 0x8C, 0x01, 0x05, 0x24, 0x4B, 0x24, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x1A, -/* 00014A00 */ 0x5A, 0x02, 0x1C, 0x1F, 0x03, 0xFF, 0x24, 0x74, 0x19, 0x1A, 0x13, 0x47, 0x00, 0x1A, 0x09, 0x02, -/* 00014A10 */ 0x00, 0xA6, 0x00, 0x24, 0x00, 0x61, 0xFE, 0xF8, 0x01, 0xFE, 0xB5, 0x03, 0xFE, 0xD9, 0x01, 0xFE, -/* 00014A20 */ 0xF7, 0x01, 0xFE, 0xF7, 0x01, 0xFE, 0xB3, 0x03, 0xFE, 0x39, 0x02, 0xFE, 0xB5, 0x03, 0xFE, 0x86, -/* 00014A30 */ 0x04, 0xFE, 0xB4, 0x03, 0xFE, 0x18, 0x02, 0xFE, 0xBD, 0x03, 0xFE, 0x42, 0x02, 0xFE, 0xE8, 0x01, -/* 00014A40 */ 0xFE, 0x37, 0x03, 0xFE, 0xE7, 0x01, 0xFE, 0x26, 0x03, 0xFE, 0x42, 0x02, 0xFE, 0x8F, 0x04, 0xFF, -/* 00014A50 */ 0x10, 0x13, 0x01, 0x00, 0x1B, 0x0C, 0x00, 0x00, 0x00, 0x16, 0x00, 0x46, 0x00, 0x1C, 0x00, 0x42, -/* 00014A60 */ 0x00, 0x17, 0x00, 0x24, 0x00, 0x31, 0x00, 0xD1, 0x00, 0x3B, 0x00, 0x6A, 0x00, 0x36, 0x00, 0x6F, -/* 00014A70 */ 0x00, 0x08, 0x00, 0x2E, 0x00, 0x08, 0x00, 0x2C, 0x00, 0x08, 0x00, 0x2D, 0x00, 0x08, 0x00, 0x34, -/* 00014A80 */ 0x00, 0x07, 0x00, 0x37, 0x00, 0x07, 0x00, 0x27, 0x00, 0x0A, 0x00, 0x28, 0x00, 0x18, 0x00, 0x49, -/* 00014A90 */ 0x00, 0x18, 0x00, 0xEF, 0x00, 0x18, 0x00, 0x4E, 0x00, 0x0F, 0x00, 0x52, 0x00, 0x20, 0x00, 0x5F, -/* 00014AA0 */ 0x00, 0x0D, 0x00, 0x4E, 0x00, 0x06, 0x00, 0x31, 0x00, 0x03, 0x00, 0x2D, 0x00, 0x04, 0x00, 0x64, -/* 00014AB0 */ 0x00, 0x2A, 0x00, 0xD3, 0x00, 0x16, 0x00, 0x3B, 0x00, 0x04, 0x00, 0x3E, 0x00, 0x08, 0x00, 0x1F, -/* 00014AC0 */ 0x00, 0x00, 0x3F, 0x4D, 0x00, 0xC0, 0x13, 0x8D, 0x25, 0x00, 0xFE, 0x7D, 0x05, 0x26, 0xA0, 0x41, -/* 00014AD0 */ 0xD1, 0x00, 0x58, 0xFE, 0xDC, 0xF1, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0xDC, -/* 00014AE0 */ 0xF1, 0xFE, 0x0B, 0x1F, 0xFE, 0x0B, 0x1F, 0x06, 0xFE, 0x5C, 0x04, 0xFE, 0x5D, 0x04, 0xFE, 0x5E, -/* 00014AF0 */ 0x04, 0xFE, 0x5F, 0x04, 0xFE, 0x60, 0x04, 0xFE, 0x61, 0x04, 0x04, 0x39, 0x3C, 0x51, 0x51, 0x03, -/* 00014B00 */ 0x30, 0x30, 0x30, 0x30, 0x05, 0x39, 0x3A, 0x3B, 0x06, 0xFE, 0x46, 0x04, 0x06, 0xFE, 0x62, 0x04, -/* 00014B10 */ 0x06, 0xFE, 0x47, 0x04, 0x06, 0xFE, 0x63, 0x04, 0x06, 0xFE, 0x48, 0x04, 0x06, 0xFE, 0x64, 0x04, -/* 00014B20 */ 0x06, 0xFE, 0x49, 0x04, 0x06, 0xFE, 0x65, 0x04, 0x06, 0xFE, 0x4A, 0x04, 0x06, 0xFE, 0x66, 0x04, -/* 00014B30 */ 0x06, 0xFE, 0x4B, 0x04, 0x06, 0xFE, 0x67, 0x04, 0x06, 0xFE, 0x68, 0x04, 0x06, 0xFE, 0x69, 0x04, -/* 00014B40 */ 0x06, 0xFE, 0x6A, 0x04, 0x06, 0xFE, 0x6B, 0x04, 0x06, 0xFE, 0x4C, 0x04, 0x06, 0xFE, 0x6C, 0x04, -/* 00014B50 */ 0x06, 0xFE, 0x4D, 0x04, 0x06, 0xFE, 0x6D, 0x04, 0x06, 0xFE, 0x4E, 0x04, 0x06, 0xFE, 0x6E, 0x04, -/* 00014B60 */ 0x07, 0x06, 0xFE, 0x6F, 0x04, 0x06, 0xFE, 0x70, 0x04, 0x06, 0xFE, 0xEF, 0x03, 0x06, 0xFE, 0x71, -/* 00014B70 */ 0x04, 0x06, 0xFE, 0x72, 0x04, 0x06, 0xFE, 0x73, 0x04, 0x06, 0xFE, 0x74, 0x04, 0x06, 0xFE, 0x75, -/* 00014B80 */ 0x04, 0x06, 0xFE, 0x76, 0x04, 0x06, 0xFE, 0x77, 0x04, 0x06, 0xFE, 0x78, 0x04, 0x06, 0xFE, 0x79, -/* 00014B90 */ 0x04, 0x06, 0xFE, 0x7A, 0x04, 0x06, 0xFE, 0x13, 0x04, 0x01, 0x01, 0x06, 0xFE, 0x45, 0x04, 0x01, -/* 00014BA0 */ 0x02, 0x06, 0xFE, 0x43, 0x04, 0x01, 0x03, 0x06, 0xFE, 0x44, 0x04, 0x01, 0x04, 0x06, 0xFE, 0x42, -/* 00014BB0 */ 0x04, 0x01, 0x05, 0x06, 0xFE, 0x7B, 0x04, 0x06, 0xFE, 0x7C, 0x04, 0x06, 0xFE, 0x7D, 0x04, 0x06, -/* 00014BC0 */ 0xFE, 0x7E, 0x04, 0x06, 0xFE, 0x7F, 0x04, 0x06, 0xFE, 0x80, 0x04, 0x06, 0xFE, 0x81, 0x04, 0x06, -/* 00014BD0 */ 0xFE, 0x82, 0x04, 0x06, 0xFE, 0x83, 0x04, 0xFE, 0x4D, 0x01, 0x4F, 0x3C, 0x94, 0x02, 0x3C, 0x4F, -/* 00014BE0 */ 0x3C, 0x94, 0x03, 0x3C, 0x4F, 0x3C, 0x94, 0x04, 0x3C, 0x4F, 0x3C, 0x94, 0x05, 0x3C, 0x4F, 0x3C, -/* 00014BF0 */ 0x94, 0x06, 0x3C, 0x4F, 0x3C, 0x94, 0x07, 0x3C, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 00014C00 */ 0x00, 0x3C, 0x00, 0x00, 0x00, 0x78, 0x03, 0x3C, 0x00, 0x78, 0x05, 0x3C, 0x01, 0x78, 0x07, 0x3C, -/* 00014C10 */ 0x02, 0x78, 0x09, 0x3C, 0x03, 0x78, 0x0B, 0x3C, 0x04, 0x78, 0x0D, 0x3C, 0x05, 0x78, 0x0F, 0x3C, -/* 00014C20 */ 0x06, 0x78, 0x11, 0x3C, 0x07, 0x78, 0x13, 0x3C, 0x08, 0x78, 0x15, 0x3C, 0x09, 0x78, 0x17, 0x3C, -/* 00014C30 */ 0x0A, 0x94, 0x02, 0x3C, 0xCB, 0x34, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, -/* 00014C40 */ 0x00, 0x78, 0x02, 0x3C, 0x0B, 0x78, 0x02, 0x3C, 0x0C, 0x78, 0x02, 0x3C, 0x0D, 0x78, 0x04, 0x3C, -/* 00014C50 */ 0x0E, 0x78, 0x06, 0x3C, 0x0F, 0x78, 0x06, 0x3C, 0x10, 0x78, 0x06, 0x3C, 0x11, 0x78, 0x08, 0x3C, -/* 00014C60 */ 0x12, 0x78, 0x08, 0x3C, 0x13, 0x78, 0x0A, 0x3C, 0x14, 0x78, 0x0C, 0x3C, 0x15, 0x78, 0x0C, 0x3C, -/* 00014C70 */ 0x16, 0x78, 0x0C, 0x3C, 0x17, 0x78, 0x0C, 0x3C, 0x18, 0x78, 0x12, 0x3C, 0x19, 0x78, 0x14, 0x3C, -/* 00014C80 */ 0x1A, 0x78, 0x16, 0x3C, 0x1B, 0x78, 0x16, 0x3C, 0x1C, 0x78, 0x16, 0x3C, 0x1D, 0x78, 0x16, 0x3C, -/* 00014C90 */ 0x1E, 0x78, 0x16, 0x3C, 0x1F, 0x78, 0x16, 0x3C, 0x20, 0x78, 0x16, 0x3C, 0x21, 0x94, 0x03, 0x3C, -/* 00014CA0 */ 0xCB, 0x98, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x78, 0x27, 0x3C, -/* 00014CB0 */ 0x22, 0x78, 0x29, 0x3C, 0x23, 0x78, 0x2B, 0x3C, 0x24, 0x78, 0x2D, 0x3C, 0x25, 0x78, 0x2F, 0x3C, -/* 00014CC0 */ 0x26, 0x94, 0x04, 0x3C, 0xCA, 0x3C, 0x78, 0x26, 0x3C, 0x27, 0x78, 0x28, 0x3C, 0x28, 0x78, 0x2A, -/* 00014CD0 */ 0x3C, 0x29, 0x78, 0x2C, 0x3C, 0x2A, 0x78, 0x2E, 0x3C, 0x2B, 0x94, 0x05, 0x3C, 0xCB, 0xB4, 0x00, -/* 00014CE0 */ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x78, 0x0F, 0x3C, 0x2C, 0x78, 0x11, -/* 00014CF0 */ 0x3C, 0x2D, 0x78, 0x1E, 0x3C, 0x2E, 0x78, 0x1F, 0x3C, 0x2F, 0x94, 0x06, 0x3C, 0xCB, 0xCC, 0x00, -/* 00014D00 */ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x78, 0x35, 0x3C, 0x15, 0x78, 0x36, -/* 00014D10 */ 0x3C, 0x16, 0x78, 0x37, 0x3C, 0x17, 0x78, 0x38, 0x3C, 0x18, 0x94, 0x07, 0x3C, 0xD3, 0x00, 0x00, -/* 00014D20 */ 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x05, 0xE4, 0x00, 0xCC, 0x00, 0x00, 0x00, 0x03, 0x04, -/* 00014D30 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x69, 0x04, 0x00, 0x00, 0x6B, 0x04, 0x00, 0x00, 0x73, 0x04, -/* 00014D40 */ 0x00, 0x00, 0x74, 0x04, 0x00, 0x00, 0xB4, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, -/* 00014D50 */ 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x81, 0x04, 0x00, 0x00, 0x82, 0x04, 0x00, 0x00, 0x83, 0x04, -/* 00014D60 */ 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x03, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x02, -/* 00014D70 */ 0x00, 0x00, 0x45, 0x04, 0x00, 0x00, 0x43, 0x04, 0x00, 0x00, 0x44, 0x04, 0x00, 0x00, 0x42, 0x04, -/* 00014D80 */ 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x03, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6D, 0x00, -/* 00014D90 */ 0x00, 0x00, 0x6F, 0x04, 0x00, 0x00, 0x70, 0x04, 0x00, 0x00, 0x63, 0x04, 0x00, 0x00, 0x64, 0x04, -/* 00014DA0 */ 0x00, 0x00, 0xEF, 0x03, 0x00, 0x00, 0x71, 0x04, 0x00, 0x00, 0x65, 0x04, 0x00, 0x00, 0x72, 0x04, -/* 00014DB0 */ 0x00, 0x00, 0x66, 0x04, 0x00, 0x00, 0x69, 0x04, 0x00, 0x00, 0x6B, 0x04, 0x00, 0x00, 0x73, 0x04, -/* 00014DC0 */ 0x00, 0x00, 0x74, 0x04, 0x00, 0x00, 0x6C, 0x04, 0x00, 0x00, 0x6D, 0x04, 0x00, 0x00, 0x6E, 0x04, -/* 00014DD0 */ 0x00, 0x00, 0x75, 0x04, 0x00, 0x00, 0x76, 0x04, 0x00, 0x00, 0x77, 0x04, 0x00, 0x00, 0x78, 0x04, -/* 00014DE0 */ 0x00, 0x00, 0x79, 0x04, 0x00, 0x00, 0x7A, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0B, -/* 00014DF0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x02, 0x00, 0x00, 0x3B, 0x02, 0x00, 0x00, 0x45, 0x02, -/* 00014E00 */ 0x00, 0x00, 0x3F, 0x02, 0x00, 0x00, 0x3A, 0x02, 0x00, 0x00, 0x3C, 0x02, 0x00, 0x00, 0x3D, 0x02, -/* 00014E10 */ 0x00, 0x00, 0x6A, 0x04, 0x00, 0x00, 0x3E, 0x02, 0x00, 0x00, 0x41, 0x02, 0x00, 0x00, 0x43, 0x02, -/* 00014E20 */ 0x00, 0x00, 0xFE, 0x44, 0x02, 0xFE, 0x3B, 0x02, 0xFE, 0x45, 0x02, 0xFE, 0x3F, 0x02, 0xFE, 0x3A, -/* 00014E30 */ 0x02, 0xFE, 0x3C, 0x02, 0xFE, 0x3D, 0x02, 0xFE, 0x6A, 0x04, 0xFE, 0x3E, 0x02, 0xFE, 0x41, 0x02, -/* 00014E40 */ 0xFE, 0x43, 0x02, 0x6D, 0xFE, 0x6F, 0x04, 0xFE, 0x70, 0x04, 0xFE, 0x63, 0x04, 0xFE, 0x64, 0x04, -/* 00014E50 */ 0xFE, 0xEF, 0x03, 0xFE, 0x71, 0x04, 0xFE, 0x65, 0x04, 0xFE, 0x72, 0x04, 0xFE, 0x66, 0x04, 0xFE, -/* 00014E60 */ 0x69, 0x04, 0xFE, 0x6B, 0x04, 0xFE, 0x73, 0x04, 0xFE, 0x74, 0x04, 0xFE, 0x6C, 0x04, 0xFE, 0x6D, -/* 00014E70 */ 0x04, 0xFE, 0x6E, 0x04, 0xFE, 0x75, 0x04, 0xFE, 0x76, 0x04, 0xFE, 0x77, 0x04, 0xFE, 0x78, 0x04, -/* 00014E80 */ 0xFE, 0x79, 0x04, 0xFE, 0x7A, 0x04, 0xFE, 0x20, 0x02, 0xFE, 0x45, 0x04, 0xFE, 0x43, 0x04, 0xFE, -/* 00014E90 */ 0x44, 0x04, 0xFE, 0x42, 0x04, 0xFE, 0x7B, 0x04, 0xFE, 0x7C, 0x04, 0xFE, 0x7D, 0x04, 0xFE, 0x7E, -/* 00014EA0 */ 0x04, 0xFE, 0x7F, 0x04, 0xFE, 0x80, 0x04, 0xFE, 0x81, 0x04, 0xFE, 0x82, 0x04, 0xFE, 0x83, 0x04, -/* 00014EB0 */ 0xFE, 0x75, 0xF2, 0x08, 0x1E, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x10, 0x02, 0x6C, 0x00, 0xDC, 0x02, -/* 00014EC0 */ 0x24, 0x00, 0xC3, 0x00, 0x19, 0x00, 0x00, 0x01, 0x20, 0x00, 0xA1, 0x00, 0x20, 0x00, 0xA2, 0x00, -/* 00014ED0 */ 0x08, 0x00, 0x7F, 0x16, 0x00, 0xD9, 0x4E, 0x01, 0x00, 0xBF, 0x7D, 0x00, 0xC3, 0x43, 0xAD, 0x0D, -/* 00014EE0 */ 0x00, 0xFE, 0xB7, 0x05, 0x13, 0xA2, 0x41, 0xD1, 0x00, 0x59, 0xFE, 0x6E, 0xFA, 0x02, 0xFF, 0x00, -/* 00014EF0 */ 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x6E, 0xFA, 0xFE, 0x6E, 0x16, 0xFE, 0x6E, 0x16, 0x40, 0x04, -/* 00014F00 */ 0xFE, 0xCA, 0x01, 0xFE, 0xFA, 0x01, 0xFE, 0x3D, 0x02, 0xFE, 0xB5, 0x03, 0x16, 0x11, 0x20, 0x08, -/* 00014F10 */ 0xCD, 0xBD, 0x77, 0x04, 0x0C, 0x02, 0x0B, 0x0B, 0x0B, 0x0B, 0x02, 0x1D, 0x1E, 0x1F, 0x20, 0xF5, -/* 00014F20 */ 0xFE, 0x90, 0x02, 0xFE, 0x48, 0x02, 0xFE, 0x68, 0x02, 0x06, 0xFE, 0x68, 0x04, 0x06, 0xFE, 0xC2, -/* 00014F30 */ 0x03, 0x08, 0x06, 0xFE, 0x5B, 0x03, 0x0C, 0x01, 0x00, 0x06, 0xFE, 0x84, 0x04, 0x01, 0x01, 0x0B, -/* 00014F40 */ 0x06, 0xFE, 0x85, 0x04, 0x06, 0xFE, 0x69, 0x04, 0x06, 0xFE, 0x6B, 0x04, 0x06, 0xFE, 0x73, 0x04, -/* 00014F50 */ 0x06, 0xFE, 0x74, 0x04, 0x01, 0x02, 0xFE, 0x98, 0x02, 0x94, 0x02, 0x12, 0x4F, 0x13, 0x4F, 0x14, -/* 00014F60 */ 0x4F, 0x15, 0x4F, 0x16, 0x4F, 0x17, 0x4F, 0x18, 0x4F, 0x1A, 0x4F, 0x1B, 0x4F, 0x1C, 0x4F, 0x19, -/* 00014F70 */ 0x4F, 0x22, 0x94, 0x03, 0x22, 0x4F, 0x22, 0x94, 0x04, 0x22, 0x4F, 0x22, 0x94, 0x05, 0x22, 0x8C, -/* 00014F80 */ 0x04, 0x37, 0x23, 0x4B, 0x23, 0x6A, 0x22, 0x23, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x23, 0x8C, -/* 00014F90 */ 0x02, 0x04, 0x24, 0x4B, 0x24, 0x5A, 0x01, 0x24, 0xD3, 0x00, 0x24, 0x5A, 0x02, 0x24, 0x8C, 0x04, -/* 00014FA0 */ 0x37, 0x25, 0x4B, 0x25, 0x6A, 0x24, 0x25, 0x01, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x25, 0x1F, 0x01, -/* 00014FB0 */ 0x24, 0x24, 0x5A, 0x03, 0x24, 0x1F, 0x04, 0x22, 0x22, 0x94, 0x03, 0x22, 0x8C, 0x03, 0x02, 0x22, -/* 00014FC0 */ 0x4B, 0x22, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x04, 0x90, 0x02, 0x23, 0x5A, 0x01, 0x23, 0x5A, 0x02, -/* 00014FD0 */ 0x02, 0x5A, 0x03, 0x03, 0xA6, 0x23, 0x5A, 0x04, 0x23, 0xA6, 0x23, 0x5A, 0x05, 0x23, 0x1F, 0x06, -/* 00014FE0 */ 0x22, 0x22, 0x94, 0x04, 0x22, 0x5F, 0x22, 0x11, 0x02, 0x94, 0x05, 0x22, 0x8C, 0x04, 0x37, 0x23, -/* 00014FF0 */ 0x4B, 0x23, 0x6A, 0x22, 0x23, 0x00, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x23, 0x8C, 0x04, 0x37, 0x25, -/* 00015000 */ 0x4B, 0x25, 0x6A, 0x24, 0x25, 0x03, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x25, 0x90, 0x03, 0x26, 0x5A, -/* 00015010 */ 0x01, 0x26, 0x1F, 0x02, 0x24, 0x24, 0x5A, 0x01, 0x24, 0xD3, 0x01, 0x24, 0x5A, 0x02, 0x24, 0x5A, -/* 00015020 */ 0x03, 0x05, 0x1F, 0x04, 0x22, 0x22, 0x47, 0x13, 0x22, 0x8C, 0x04, 0x03, 0x23, 0x6A, 0x22, 0x23, -/* 00015030 */ 0x04, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x23, 0x5F, 0x24, 0x11, 0x05, 0x5A, 0x01, 0x24, 0x5A, 0x02, -/* 00015040 */ 0x13, 0x1F, 0x03, 0x22, 0x22, 0x47, 0x14, 0x22, 0x47, 0x15, 0x06, 0x47, 0x16, 0x07, 0xEA, 0x00, -/* 00015050 */ 0xA4, 0x22, 0x14, 0x06, 0x12, 0x03, 0x00, 0x16, 0x22, 0x09, 0x8D, 0x01, 0x95, 0x22, 0x14, 0x16, -/* 00015060 */ 0x47, 0x17, 0x22, 0x43, 0x22, 0x17, 0x08, 0x47, 0x18, 0x22, 0x0E, 0x10, 0x00, 0x15, 0x0E, 0x03, -/* 00015070 */ 0x00, 0x18, 0x47, 0x15, 0x06, 0x28, 0x16, 0x16, 0x09, 0x6B, 0x01, 0x09, 0x1E, 0x00, 0x0E, 0x0C, -/* 00015080 */ 0x00, 0x18, 0x47, 0x15, 0x0A, 0x28, 0x16, 0x16, 0x09, 0x5B, 0x01, 0x09, 0x0E, 0x00, 0x14, 0x03, -/* 00015090 */ 0x00, 0x17, 0x0B, 0x09, 0x06, 0x00, 0x28, 0x16, 0x16, 0x09, 0x4A, 0x01, 0x14, 0x12, 0x00, 0x17, -/* 000150A0 */ 0x0C, 0x14, 0x0D, 0x00, 0x17, 0x0D, 0x14, 0x08, 0x00, 0x17, 0x0E, 0x14, 0x03, 0x00, 0x17, 0x0F, -/* 000150B0 */ 0x09, 0xE7, 0x00, 0x90, 0x05, 0x22, 0x0E, 0xD2, 0x00, 0x22, 0x90, 0x04, 0x22, 0xA6, 0x23, 0x14, -/* 000150C0 */ 0x03, 0x00, 0x22, 0x23, 0x09, 0xC5, 0x00, 0x8C, 0x01, 0x06, 0x22, 0x4B, 0x22, 0x90, 0x05, 0x23, -/* 000150D0 */ 0x95, 0x22, 0x22, 0x23, 0x47, 0x19, 0x22, 0x15, 0x03, 0x00, 0x19, 0x17, 0x09, 0xAA, 0x00, 0x2F, -/* 000150E0 */ 0x22, 0x16, 0x09, 0x95, 0x22, 0x14, 0x22, 0x14, 0x03, 0x00, 0x22, 0x17, 0x09, 0x4D, 0x00, 0x8C, -/* 000150F0 */ 0x04, 0x37, 0x23, 0x4B, 0x23, 0x6A, 0x22, 0x23, 0x07, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x23, 0x5A, -/* 00015100 */ 0x01, 0x14, 0x5A, 0x02, 0x07, 0x5A, 0x03, 0x16, 0x1F, 0x04, 0x22, 0x22, 0x2F, 0x22, 0x22, 0x19, -/* 00015110 */ 0x2F, 0x22, 0x22, 0x19, 0x8C, 0x04, 0x37, 0x24, 0x4B, 0x24, 0x6A, 0x23, 0x24, 0x08, 0x07, 0x03, -/* 00015120 */ 0x00, 0x5A, 0x00, 0x24, 0x5A, 0x01, 0x14, 0x2F, 0x25, 0x16, 0x10, 0x5A, 0x02, 0x25, 0x1F, 0x03, -/* 00015130 */ 0x23, 0x23, 0x2F, 0x22, 0x22, 0x23, 0x47, 0x14, 0x22, 0x09, 0x46, 0x00, 0x8C, 0x04, 0x37, 0x23, -/* 00015140 */ 0x4B, 0x23, 0x6A, 0x22, 0x23, 0x07, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x23, 0x5A, 0x01, 0x14, 0x5A, -/* 00015150 */ 0x02, 0x07, 0x5A, 0x03, 0x16, 0x1F, 0x04, 0x22, 0x22, 0x2F, 0x22, 0x22, 0x19, 0x8C, 0x04, 0x37, -/* 00015160 */ 0x24, 0x4B, 0x24, 0x6A, 0x23, 0x24, 0x08, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x24, 0x5A, 0x01, 0x14, -/* 00015170 */ 0x2F, 0x25, 0x16, 0x09, 0x5A, 0x02, 0x25, 0x1F, 0x03, 0x23, 0x23, 0x2F, 0x22, 0x22, 0x23, 0x47, -/* 00015180 */ 0x14, 0x22, 0x95, 0x22, 0x14, 0x16, 0x47, 0x17, 0x22, 0x09, 0x0E, 0x00, 0x8C, 0x01, 0x07, 0x22, -/* 00015190 */ 0x4B, 0x22, 0x95, 0x22, 0x22, 0x17, 0x74, 0x22, 0x11, 0x09, 0x2F, 0x22, 0x16, 0x09, 0x47, 0x1A, -/* 000151A0 */ 0x22, 0xEA, 0x01, 0xA4, 0x22, 0x14, 0x06, 0x12, 0x03, 0x00, 0x1A, 0x22, 0x09, 0x12, 0x00, 0x95, -/* 000151B0 */ 0x22, 0x14, 0x1A, 0x14, 0x03, 0x00, 0x22, 0x17, 0x09, 0x06, 0x00, 0x28, 0x1A, 0x1A, 0x09, 0xE0, -/* 000151C0 */ 0xFF, 0x8C, 0x01, 0x03, 0x22, 0x4B, 0x22, 0x95, 0x22, 0x22, 0x17, 0x47, 0x1B, 0x22, 0x8C, 0x01, -/* 000151D0 */ 0x05, 0x22, 0x4B, 0x22, 0x35, 0x23, 0x1A, 0x16, 0x95, 0x22, 0x22, 0x23, 0x47, 0x1C, 0x22, 0x9A, -/* 000151E0 */ 0x1C, 0x11, 0x1B, 0x47, 0x16, 0x1A, 0x09, 0x65, 0xFE, 0x74, 0x14, 0x11, 0x0A, 0xA6, 0x00, 0x24, -/* 000151F0 */ 0x00, 0xFE, 0x1C, 0x01, 0x61, 0xFE, 0x86, 0x04, 0xBF, 0xFE, 0xE9, 0x01, 0xFE, 0xF7, 0x01, 0xC1, -/* 00015200 */ 0xFE, 0x4C, 0x01, 0xFE, 0x4C, 0x01, 0xFE, 0x86, 0x04, 0xFE, 0x40, 0x02, 0xFE, 0x98, 0xFA, 0x28, -/* 00015210 */ 0x26, 0x00, 0x00, 0x00, 0x3D, 0x00, 0x74, 0x02, 0x29, 0x00, 0x5E, 0x00, 0x07, 0x00, 0xB6, 0x00, -/* 00015220 */ 0x3D, 0x00, 0x43, 0x05, 0x1F, 0x00, 0x0E, 0x02, 0x03, 0x00, 0x27, 0x00, 0x05, 0x00, 0x22, 0x00, -/* 00015230 */ 0x0C, 0x00, 0x2A, 0x00, 0x07, 0x00, 0x2A, 0x00, 0x07, 0x00, 0x31, 0x00, 0x04, 0x00, 0x29, 0x00, -/* 00015240 */ 0x04, 0x00, 0x2B, 0x00, 0x03, 0x00, 0x45, 0x00, 0x03, 0x00, 0x1D, 0x00, 0x06, 0x00, 0x25, 0x00, -/* 00015250 */ 0x04, 0x00, 0x27, 0x00, 0x03, 0x00, 0x2A, 0x00, 0x03, 0x00, 0x1D, 0x00, 0x06, 0x00, 0x25, 0x00, -/* 00015260 */ 0x08, 0x00, 0x2B, 0x00, 0x03, 0x00, 0x1D, 0x00, 0x03, 0x00, 0x02, 0x01, 0x17, 0x00, 0x58, 0x00, -/* 00015270 */ 0x14, 0x00, 0x76, 0x01, 0x10, 0x00, 0x49, 0x00, 0x08, 0x00, 0x3B, 0x00, 0x10, 0x00, 0x76, 0x00, -/* 00015280 */ 0x4D, 0x00, 0xE1, 0x00, 0x46, 0x00, 0xED, 0x00, 0x0A, 0x00, 0x38, 0x01, 0x0E, 0x00, 0x6F, 0x00, -/* 00015290 */ 0x09, 0x00, 0x2A, 0x00, 0x18, 0x00, 0x44, 0x00, 0x06, 0x00, 0x30, 0x00, 0x0D, 0x00, 0x3E, 0x00, -/* 000152A0 */ 0x11, 0x00, 0x48, 0x00, 0x04, 0x00, 0x36, 0x00, 0x06, 0x00, 0x2A, 0x00, 0x06, 0x00, 0x23, 0x00, -/* 000152B0 */ 0x00, 0xF6, 0x53, 0x01, 0x00, 0xB9, 0x52, 0x01, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, -/* 000152C0 */ 0x00, 0xFE, 0xC8, 0x05, 0x43, 0xA2, 0x41, 0xD1, 0x00, 0x5B, 0xFE, 0x53, 0xFE, 0xFF, 0x00, 0x10, -/* 000152D0 */ 0x01, 0x00, 0x03, 0x03, 0xFE, 0x53, 0xFE, 0xFE, 0xF8, 0x04, 0xFE, 0xF8, 0x04, 0x01, 0x08, 0x0B, -/* 000152E0 */ 0x0F, 0x04, 0x3C, 0x38, 0x05, 0x06, 0x01, 0x01, 0x01, 0x01, 0x0E, 0x06, 0xFE, 0x4B, 0x04, 0x0B, -/* 000152F0 */ 0x06, 0xFE, 0x82, 0x04, 0x06, 0xFE, 0x80, 0x04, 0x06, 0xFE, 0x68, 0x04, 0x0C, 0x06, 0xFE, 0x81, -/* 00015300 */ 0x04, 0x06, 0xFE, 0x83, 0x04, 0x06, 0xFE, 0x6A, 0x04, 0xC4, 0x4F, 0x0D, 0x8C, 0x01, 0x03, 0x0F, -/* 00015310 */ 0x4B, 0x0F, 0x95, 0x0F, 0x0F, 0x0C, 0x47, 0x0D, 0x0F, 0x14, 0x03, 0x00, 0x0C, 0x02, 0x09, 0x71, -/* 00015320 */ 0x00, 0x8C, 0x01, 0x04, 0x0F, 0x4B, 0x0F, 0x14, 0x29, 0x00, 0x0F, 0x03, 0x8C, 0x01, 0x04, 0x0F, -/* 00015330 */ 0x4B, 0x0F, 0xA6, 0x10, 0x14, 0x03, 0x00, 0x0F, 0x10, 0x09, 0x1F, 0x00, 0x8C, 0x01, 0x05, 0x0F, -/* 00015340 */ 0x4B, 0x0F, 0x14, 0x0E, 0x00, 0x0F, 0x04, 0x8C, 0x01, 0x05, 0x0F, 0x4B, 0x0F, 0x14, 0x03, 0x00, -/* 00015350 */ 0x0F, 0x05, 0x09, 0x06, 0x00, 0x47, 0x0C, 0x06, 0x09, 0x37, 0x00, 0x8C, 0x01, 0x04, 0x0F, 0x4B, -/* 00015360 */ 0x0F, 0x14, 0x29, 0x00, 0x0F, 0x07, 0x8C, 0x01, 0x04, 0x0F, 0x4B, 0x0F, 0xA6, 0x10, 0x14, 0x03, -/* 00015370 */ 0x00, 0x0F, 0x10, 0x09, 0x1C, 0x00, 0x8C, 0x01, 0x05, 0x0F, 0x4B, 0x0F, 0x14, 0x0E, 0x00, 0x0F, -/* 00015380 */ 0x08, 0x8C, 0x01, 0x05, 0x0F, 0x4B, 0x0F, 0x14, 0x03, 0x00, 0x0F, 0x09, 0x09, 0x03, 0x00, 0x47, -/* 00015390 */ 0x0C, 0x0A, 0x47, 0x0F, 0x0B, 0x8C, 0x05, 0x37, 0x11, 0x4B, 0x11, 0x6A, 0x10, 0x11, 0x00, 0x07, -/* 000153A0 */ 0x03, 0x00, 0x5A, 0x00, 0x11, 0x8C, 0x02, 0x02, 0x12, 0x4B, 0x12, 0x95, 0x12, 0x12, 0x0C, 0x5A, -/* 000153B0 */ 0x01, 0x12, 0x8C, 0x02, 0x04, 0x12, 0x4B, 0x12, 0x95, 0x12, 0x12, 0x0D, 0x5A, 0x02, 0x12, 0x1F, -/* 000153C0 */ 0x03, 0x10, 0x10, 0x2F, 0x00, 0x0F, 0x10, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x29, -/* 000153D0 */ 0x01, 0xFE, 0x88, 0xFE, 0x08, 0x02, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x42, 0x00, 0x08, 0x00, 0xA5, -/* 000153E0 */ 0x02, 0x34, 0x00, 0x6F, 0x00, 0x06, 0x00, 0x35, 0x00, 0x34, 0x00, 0x70, 0x00, 0x03, 0x00, 0x5B, -/* 000153F0 */ 0x00, 0x3A, 0x00, 0x6C, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0x01, 0x00, 0x88, 0x01, 0x00, 0xFE, 0xB8, -/* 00015400 */ 0x05, 0x45, 0xA2, 0x41, 0xD1, 0x00, 0x5A, 0xFE, 0xCD, 0xFA, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, -/* 00015410 */ 0x03, 0xFE, 0xCD, 0xFA, 0xFE, 0x5B, 0x01, 0xFE, 0x5B, 0x01, 0x01, 0x07, 0x06, 0x0B, 0x07, 0x1B, -/* 00015420 */ 0x18, 0x05, 0x02, 0x0A, 0x01, 0x00, 0x06, 0xFE, 0xAD, 0x03, 0x01, 0x01, 0x08, 0x4F, 0x4F, 0x08, -/* 00015430 */ 0x4F, 0x09, 0x95, 0x0B, 0x07, 0x02, 0x47, 0x08, 0x0B, 0x8C, 0x04, 0x02, 0x0B, 0x4B, 0x0B, 0x07, -/* 00015440 */ 0x06, 0x00, 0x5A, 0x00, 0x05, 0x8C, 0x01, 0x02, 0x0C, 0x5A, 0x01, 0x0C, 0x5A, 0x02, 0x08, 0x5A, -/* 00015450 */ 0x03, 0x03, 0x95, 0x0C, 0x07, 0x04, 0x5A, 0x04, 0x0C, 0xA6, 0x0C, 0x5A, 0x05, 0x0C, 0x1F, 0x06, -/* 00015460 */ 0x0B, 0x0B, 0x47, 0x09, 0x0B, 0xA6, 0x0B, 0x15, 0x03, 0x00, 0x09, 0x0B, 0x09, 0x04, 0x00, 0x9A, -/* 00015470 */ 0x09, 0x06, 0x08, 0x47, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x02, 0xFB, -/* 00015480 */ 0x06, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x2F, 0x00, 0x2C, 0x00, 0x5F, 0x00, 0x0A, 0x00, 0x33, -/* 00015490 */ 0x00, 0x04, 0x00, 0x43, 0x00, 0x08, 0x00, 0x21, 0x00, 0x00, 0x3F, 0x5D, 0x00, 0xC1, 0x13, 0x8D, -/* 000154A0 */ 0x25, 0x00, 0xFE, 0x7E, 0x04, 0x18, 0xA0, 0x41, 0xD1, 0x00, 0x4E, 0xFE, 0x42, 0xC7, 0x08, 0xFF, -/* 000154B0 */ 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0x42, 0xC7, 0xFE, 0x09, 0x25, 0xFE, 0x09, 0x25, 0x03, -/* 000154C0 */ 0xFE, 0x1F, 0x04, 0xFE, 0xF5, 0x01, 0xFE, 0x86, 0x03, 0x0C, 0x1A, 0x22, 0x09, 0xE4, 0xDE, 0x02, -/* 000154D0 */ 0x09, 0x0B, 0x0B, 0x0B, 0x0B, 0x08, 0x1F, 0x20, 0x21, 0x08, 0x06, 0xFE, 0x3D, 0x03, 0x06, 0xFE, -/* 000154E0 */ 0x20, 0x04, 0x05, 0xFE, 0x21, 0x04, 0x05, 0xFE, 0x22, 0x04, 0x05, 0xFE, 0x23, 0x04, 0x05, 0xFE, -/* 000154F0 */ 0x24, 0x04, 0x05, 0xFE, 0x4A, 0x03, 0x06, 0xFE, 0x3F, 0x03, 0x06, 0xFE, 0x40, 0x03, 0x06, 0xFE, -/* 00015500 */ 0x4C, 0x03, 0x06, 0xFE, 0x42, 0x03, 0x0C, 0x06, 0xFE, 0x43, 0x03, 0x06, 0xFE, 0x44, 0x03, 0x0B, -/* 00015510 */ 0x07, 0x06, 0xFE, 0x0B, 0x04, 0x06, 0xFE, 0x0C, 0x04, 0x06, 0xFE, 0x0D, 0x04, 0x05, 0xFE, 0x25, -/* 00015520 */ 0x04, 0x06, 0xFE, 0x26, 0x04, 0x06, 0xFE, 0x8D, 0x03, 0x06, 0xFE, 0x27, 0x04, 0xFE, 0x42, 0x03, -/* 00015530 */ 0x4F, 0x1A, 0x4F, 0x1B, 0x4F, 0x1C, 0x4F, 0x1D, 0x4F, 0x1E, 0x4F, 0x22, 0x94, 0x02, 0x22, 0x4F, -/* 00015540 */ 0x22, 0x94, 0x03, 0x22, 0x4F, 0x22, 0x94, 0x04, 0x22, 0x8C, 0x02, 0x32, 0x22, 0x15, 0x03, 0x00, -/* 00015550 */ 0x22, 0x03, 0x09, 0x11, 0x00, 0x8C, 0x02, 0x32, 0x22, 0x15, 0x03, 0x00, 0x22, 0x04, 0x09, 0x05, -/* 00015560 */ 0x00, 0xA6, 0x00, 0x09, 0x0A, 0x03, 0xD3, 0x00, 0x22, 0x94, 0x02, 0x22, 0x8C, 0x02, 0x03, 0x23, -/* 00015570 */ 0x6A, 0x22, 0x23, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x23, 0x8C, 0x02, 0x23, 0x24, 0x07, 0x03, -/* 00015580 */ 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x05, 0xD3, 0x01, 0x25, 0x5A, 0x02, 0x25, 0x1F, 0x03, 0x24, -/* 00015590 */ 0x24, 0x5A, 0x01, 0x24, 0x8C, 0x02, 0x36, 0x24, 0x4B, 0x24, 0x5F, 0x24, 0x24, 0x01, 0x5A, 0x02, -/* 000155A0 */ 0x24, 0x1F, 0x03, 0xFF, 0x22, 0x8C, 0x02, 0x32, 0x22, 0x14, 0x03, 0x00, 0x22, 0x04, 0x09, 0x05, -/* 000155B0 */ 0x00, 0xA6, 0x00, 0x09, 0xBA, 0x02, 0x8C, 0x02, 0x23, 0x22, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, -/* 000155C0 */ 0x5A, 0x01, 0x06, 0xD3, 0x02, 0x23, 0x5A, 0x02, 0x23, 0x1F, 0x03, 0x22, 0x22, 0x47, 0x1A, 0x22, -/* 000155D0 */ 0x8C, 0x02, 0x23, 0x22, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x07, 0xD3, 0x03, 0x23, -/* 000155E0 */ 0x5A, 0x02, 0x23, 0x1F, 0x03, 0x22, 0x22, 0x94, 0x03, 0x22, 0x8C, 0x02, 0x23, 0x22, 0x07, 0x03, -/* 000155F0 */ 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x08, 0xD3, 0x04, 0x23, 0x5A, 0x02, 0x23, 0x1F, 0x03, 0x22, -/* 00015600 */ 0x22, 0x47, 0x1B, 0x22, 0x94, 0x04, 0x09, 0x8C, 0x02, 0x23, 0x22, 0x07, 0x03, 0x00, 0x5A, 0x00, -/* 00015610 */ 0x02, 0x90, 0x04, 0x23, 0x5A, 0x01, 0x23, 0xD3, 0x05, 0x23, 0x5A, 0x02, 0x23, 0x1F, 0x03, 0x22, -/* 00015620 */ 0x22, 0x47, 0x1C, 0x22, 0x8C, 0x02, 0x37, 0x23, 0x4B, 0x23, 0x6A, 0x22, 0x23, 0x02, 0x07, 0x03, -/* 00015630 */ 0x00, 0x5A, 0x00, 0x23, 0x5A, 0x01, 0x1C, 0x8C, 0x01, 0x16, 0x24, 0x4B, 0x24, 0x5A, 0x02, 0x24, -/* 00015640 */ 0x1F, 0x03, 0x22, 0x22, 0x47, 0x1D, 0x22, 0x8C, 0x02, 0x37, 0x23, 0x4B, 0x23, 0x6A, 0x22, 0x23, -/* 00015650 */ 0x03, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x23, 0x5A, 0x01, 0x1D, 0x5A, 0x02, 0x0A, 0xCB, 0x00, 0x00, -/* 00015660 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x78, 0x0C, 0x24, 0x04, 0x78, 0x0E, -/* 00015670 */ 0x24, 0x05, 0x78, 0x0E, 0x24, 0x06, 0x78, 0x11, 0x24, 0x07, 0x5A, 0x03, 0x24, 0x1F, 0x04, 0xFF, -/* 00015680 */ 0x22, 0x8C, 0x02, 0x37, 0x23, 0x4B, 0x23, 0x6A, 0x22, 0x23, 0x03, 0x07, 0x04, 0x00, 0x5A, 0x00, -/* 00015690 */ 0x23, 0x5A, 0x01, 0x1A, 0x5A, 0x02, 0x0C, 0xCB, 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, -/* 000156A0 */ 0x24, 0x00, 0x00, 0x00, 0x78, 0x1D, 0x24, 0x04, 0x78, 0x11, 0x24, 0x05, 0x78, 0x0E, 0x24, 0x06, -/* 000156B0 */ 0x78, 0x11, 0x24, 0x07, 0x5A, 0x03, 0x24, 0x1F, 0x04, 0xFF, 0x22, 0x8C, 0x02, 0x37, 0x23, 0x4B, -/* 000156C0 */ 0x23, 0x6A, 0x22, 0x23, 0x03, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x23, 0x5A, 0x01, 0x1A, 0x5A, 0x02, -/* 000156D0 */ 0x13, 0xCB, 0x30, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x07, 0x01, -/* 000156E0 */ 0x00, 0xC1, 0x01, 0x25, 0x1A, 0x78, 0x25, 0x24, 0x04, 0x78, 0x0E, 0x24, 0x05, 0x78, 0x0E, 0x24, -/* 000156F0 */ 0x06, 0x78, 0x0E, 0x24, 0x07, 0x5A, 0x03, 0x24, 0x1F, 0x04, 0xFF, 0x22, 0x8C, 0x02, 0x04, 0x22, -/* 00015700 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5F, 0x23, 0x1A, 0x08, 0x5A, 0x01, 0x23, 0x8C, 0x02, 0x08, -/* 00015710 */ 0x23, 0x5F, 0x23, 0x23, 0x09, 0x5A, 0x02, 0x23, 0x1F, 0x03, 0xFF, 0x22, 0x8C, 0x02, 0x37, 0x23, -/* 00015720 */ 0x4B, 0x23, 0x6A, 0x22, 0x23, 0x03, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x23, 0x5F, 0x24, 0x1A, 0x08, -/* 00015730 */ 0x5A, 0x01, 0x24, 0x5A, 0x02, 0x14, 0xCB, 0x48, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x24, -/* 00015740 */ 0x00, 0x00, 0x00, 0x78, 0x1A, 0x24, 0x04, 0x78, 0x11, 0x24, 0x05, 0x78, 0x0E, 0x24, 0x06, 0x78, -/* 00015750 */ 0x11, 0x24, 0x07, 0x5A, 0x03, 0x24, 0x1F, 0x04, 0xFF, 0x22, 0x8C, 0x02, 0x37, 0x23, 0x4B, 0x23, -/* 00015760 */ 0x6A, 0x22, 0x23, 0x03, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x23, 0x5F, 0x24, 0x1A, 0x08, 0x5A, 0x01, -/* 00015770 */ 0x24, 0x5A, 0x02, 0x15, 0xCB, 0x60, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, -/* 00015780 */ 0x00, 0xD6, 0x06, 0x25, 0x24, 0x78, 0x25, 0x24, 0x04, 0x78, 0x11, 0x24, 0x05, 0x78, 0x0E, 0x24, -/* 00015790 */ 0x06, 0x78, 0x11, 0x24, 0x07, 0x5A, 0x03, 0x24, 0x1F, 0x04, 0xFF, 0x22, 0xD3, 0x07, 0x22, 0x47, -/* 000157A0 */ 0x1E, 0x22, 0x8C, 0x02, 0x37, 0x23, 0x4B, 0x23, 0x6A, 0x22, 0x23, 0x03, 0x07, 0x04, 0x00, 0x5A, -/* 000157B0 */ 0x00, 0x23, 0x5A, 0x01, 0x1E, 0x5A, 0x02, 0x0A, 0xCB, 0x78, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, -/* 000157C0 */ 0x00, 0x24, 0x00, 0x00, 0x00, 0x78, 0x16, 0x24, 0x04, 0x78, 0x0E, 0x24, 0x05, 0x78, 0x0E, 0x24, -/* 000157D0 */ 0x06, 0x78, 0x11, 0x24, 0x07, 0x5A, 0x03, 0x24, 0x1F, 0x04, 0xFF, 0x22, 0x8C, 0x02, 0x37, 0x23, -/* 000157E0 */ 0x4B, 0x23, 0x6A, 0x22, 0x23, 0x03, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x23, 0x5F, 0x24, 0x1A, 0x08, -/* 000157F0 */ 0x5A, 0x01, 0x24, 0x5A, 0x02, 0x17, 0xCB, 0x90, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x24, -/* 00015800 */ 0x00, 0x00, 0x00, 0x8C, 0x02, 0x23, 0x25, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x16, -/* 00015810 */ 0x5A, 0x02, 0x1E, 0x1F, 0x03, 0x25, 0x25, 0x78, 0x25, 0x24, 0x0A, 0x78, 0x0E, 0x24, 0x06, 0x78, -/* 00015820 */ 0x11, 0x24, 0x07, 0x5A, 0x03, 0x24, 0x1F, 0x04, 0xFF, 0x22, 0x8C, 0x02, 0x37, 0x23, 0x4B, 0x23, -/* 00015830 */ 0x6A, 0x22, 0x23, 0x03, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x23, 0x5F, 0x24, 0x1A, 0x08, 0x5A, 0x01, -/* 00015840 */ 0x24, 0x5A, 0x02, 0x19, 0xCB, 0xA4, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, -/* 00015850 */ 0x00, 0x78, 0x1B, 0x24, 0x04, 0x78, 0x0E, 0x24, 0x06, 0x78, 0x11, 0x24, 0x07, 0x78, 0x11, 0x24, -/* 00015860 */ 0x05, 0x5A, 0x03, 0x24, 0x1F, 0x04, 0xFF, 0x22, 0x47, 0x00, 0x1A, 0x09, 0x02, 0x00, 0xA6, 0x00, -/* 00015870 */ 0x24, 0x00, 0x08, 0xBC, 0x00, 0xA4, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 00015880 */ 0x00, 0x83, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, -/* 00015890 */ 0x00, 0x90, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, 0x01, 0x00, -/* 000158A0 */ 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, -/* 000158B0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, -/* 000158C0 */ 0x00, 0x81, 0x01, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 000158D0 */ 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, -/* 000158E0 */ 0x00, 0x48, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, -/* 000158F0 */ 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x30, 0x00, 0x00, -/* 00015900 */ 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, -/* 00015910 */ 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, -/* 00015920 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, -/* 00015930 */ 0x00, 0x81, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 00015940 */ 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, -/* 00015950 */ 0x00, 0xFE, 0xEE, 0x01, 0xFE, 0x06, 0x03, 0x4D, 0xFE, 0x88, 0x01, 0xFE, 0x83, 0x01, 0xFE, 0x82, -/* 00015960 */ 0x01, 0xFE, 0x80, 0x01, 0xFE, 0x81, 0x01, 0xFE, 0x15, 0x01, 0xFE, 0x15, 0x01, 0xFE, 0x84, 0x01, -/* 00015970 */ 0xFE, 0x58, 0xC7, 0x18, 0x19, 0x00, 0x00, 0x00, 0x18, 0x00, 0x40, 0x00, 0x05, 0x00, 0x1B, 0x00, -/* 00015980 */ 0x06, 0x00, 0xD3, 0x09, 0x39, 0x00, 0x80, 0x02, 0x0C, 0x00, 0x29, 0x00, 0x05, 0x00, 0x1B, 0x00, -/* 00015990 */ 0x1A, 0x00, 0xA3, 0x03, 0x1A, 0x00, 0xBA, 0x02, 0x1A, 0x00, 0x10, 0x03, 0x03, 0x00, 0x5D, 0x00, -/* 000159A0 */ 0x1D, 0x00, 0x36, 0x01, 0x23, 0x00, 0x77, 0x00, 0x3A, 0x00, 0xD5, 0x00, 0x3A, 0x00, 0xDB, 0x00, -/* 000159B0 */ 0x41, 0x00, 0xC6, 0x00, 0x20, 0x00, 0x40, 0x00, 0x3E, 0x00, 0xCB, 0x00, 0x42, 0x00, 0xA0, 0x04, -/* 000159C0 */ 0x06, 0x00, 0x04, 0x02, 0x3A, 0x00, 0xB7, 0x00, 0x4E, 0x00, 0xC6, 0x00, 0x3E, 0x00, 0xCE, 0x00, -/* 000159D0 */ 0x08, 0x00, 0x19, 0x00, 0x00, 0xE6, 0x61, 0x01, 0x00, 0xC3, 0x60, 0x01, 0x00, 0xF6, 0x5E, 0x01, -/* 000159E0 */ 0x00, 0xD9, 0x5D, 0x01, 0x00, 0xBB, 0x5C, 0x01, 0x00, 0x34, 0x5C, 0x01, 0x00, 0xD8, 0x5A, 0x01, -/* 000159F0 */ 0x00, 0xF5, 0x59, 0x01, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x3F, 0x05, -/* 00015A00 */ 0x1A, 0xA0, 0x41, 0xC1, 0x00, 0xFE, 0x36, 0x04, 0x56, 0xFE, 0xF4, 0xE7, 0xFF, 0x00, 0x10, 0x01, -/* 00015A10 */ 0x00, 0x01, 0x01, 0xFE, 0xF4, 0xE7, 0xFE, 0xE8, 0x01, 0xFE, 0xE8, 0x01, 0x01, 0x05, 0x05, 0x08, -/* 00015A20 */ 0x04, 0x24, 0x23, 0x03, 0x01, 0x04, 0x04, 0x04, 0x04, 0x07, 0x06, 0xFE, 0xF6, 0x03, 0x05, 0xFE, -/* 00015A30 */ 0x32, 0x04, 0x06, 0xFE, 0x46, 0x03, 0x74, 0x59, 0x08, 0xB1, 0x05, 0x08, 0x4F, 0x06, 0x2C, 0x08, -/* 00015A40 */ 0x05, 0x15, 0x03, 0x00, 0x08, 0x02, 0x09, 0x18, 0x00, 0x8C, 0x03, 0x03, 0x09, 0x6A, 0x08, 0x09, -/* 00015A50 */ 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x09, 0x5A, 0x01, 0x03, 0x5A, 0x02, 0x04, 0x1F, 0x03, 0xFF, -/* 00015A60 */ 0x08, 0x8C, 0x03, 0x03, 0x09, 0x6A, 0x08, 0x09, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x09, 0x5A, -/* 00015A70 */ 0x01, 0x05, 0x1F, 0x02, 0x08, 0x08, 0x47, 0x06, 0x08, 0xA6, 0x08, 0x14, 0x08, 0x00, 0x06, 0x08, -/* 00015A80 */ 0x5F, 0x08, 0x06, 0x02, 0x0F, 0x18, 0x00, 0x08, 0x8C, 0x03, 0x03, 0x09, 0x6A, 0x08, 0x09, 0x00, -/* 00015A90 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x09, 0x5A, 0x01, 0x03, 0x5A, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x08, -/* 00015AA0 */ 0x5F, 0x00, 0x06, 0x03, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x8A, 0x02, 0xFE, 0xEF, -/* 00015AB0 */ 0x01, 0xFE, 0x30, 0x04, 0xFE, 0x31, 0x04, 0xFE, 0x0E, 0xE8, 0x07, 0x07, 0x00, 0x00, 0x00, 0x0B, -/* 00015AC0 */ 0x00, 0x30, 0x00, 0x18, 0x00, 0x6C, 0x00, 0x18, 0x00, 0x41, 0x00, 0x0F, 0x00, 0x5B, 0x00, 0x18, -/* 00015AD0 */ 0x00, 0x6C, 0x00, 0x09, 0x00, 0x29, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x03, 0x00, -/* 00015AE0 */ 0xFE, 0x2A, 0x05, 0x13, 0xA0, 0x41, 0xC3, 0x00, 0xFE, 0x0D, 0x04, 0x55, 0xFF, 0x00, 0x00, 0x00, -/* 00015AF0 */ 0x02, 0xFE, 0x93, 0xE3, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0x93, 0xE3, 0xFE, 0x61, -/* 00015B00 */ 0x03, 0xFE, 0x61, 0x03, 0x01, 0x06, 0x11, 0x15, 0x04, 0x38, 0x36, 0x03, 0x02, 0x03, 0x03, 0x03, -/* 00015B10 */ 0x03, 0x14, 0x06, 0xFE, 0xF6, 0x03, 0x05, 0xFE, 0x34, 0x04, 0x06, 0xFE, 0x46, 0x03, 0x06, 0xFE, -/* 00015B20 */ 0xF7, 0x03, 0x06, 0xFE, 0x35, 0x04, 0x06, 0xFE, 0x28, 0x04, 0x06, 0xFE, 0x2B, 0x04, 0x06, 0xFE, -/* 00015B30 */ 0x2C, 0x04, 0x06, 0xFE, 0xFA, 0x03, 0x06, 0xFE, 0xFB, 0x03, 0x06, 0xFE, 0xFC, 0x03, 0x06, 0xFE, -/* 00015B40 */ 0xFD, 0x03, 0x06, 0xFE, 0xFE, 0x03, 0x06, 0xFE, 0x2F, 0x04, 0x08, 0xBA, 0x59, 0x15, 0xB1, 0x11, -/* 00015B50 */ 0x15, 0x4F, 0x12, 0x4F, 0x13, 0x2C, 0x15, 0x11, 0x15, 0x03, 0x00, 0x15, 0x02, 0x09, 0x18, 0x00, -/* 00015B60 */ 0x8C, 0x03, 0x03, 0x16, 0x6A, 0x15, 0x16, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x16, 0x5A, 0x01, -/* 00015B70 */ 0x03, 0x5A, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x15, 0x8C, 0x03, 0x03, 0x16, 0x6A, 0x15, 0x16, 0x01, -/* 00015B80 */ 0x07, 0x02, 0x00, 0x5A, 0x00, 0x16, 0x5A, 0x01, 0x11, 0x1F, 0x02, 0x15, 0x15, 0x47, 0x12, 0x15, -/* 00015B90 */ 0xA6, 0x15, 0x14, 0x08, 0x00, 0x12, 0x15, 0x5F, 0x15, 0x12, 0x02, 0x0F, 0x18, 0x00, 0x15, 0x8C, -/* 00015BA0 */ 0x03, 0x03, 0x16, 0x6A, 0x15, 0x16, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x16, 0x5A, 0x01, 0x03, -/* 00015BB0 */ 0x5A, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x15, 0xCC, 0x15, 0x0B, 0x9F, 0x00, 0x05, 0x15, 0x9F, 0x01, -/* 00015BC0 */ 0x06, 0x15, 0x9F, 0x02, 0x07, 0x15, 0x9F, 0x03, 0x08, 0x15, 0x9F, 0x04, 0x09, 0x15, 0x9F, 0x05, -/* 00015BD0 */ 0x0A, 0x15, 0x9F, 0x06, 0x0B, 0x15, 0x9F, 0x07, 0x0C, 0x15, 0x9F, 0x08, 0x0D, 0x15, 0x9F, 0x09, -/* 00015BE0 */ 0x0E, 0x15, 0x9F, 0x0A, 0x0F, 0x15, 0x47, 0x13, 0x15, 0x8C, 0x02, 0x19, 0x15, 0x4B, 0x15, 0x07, -/* 00015BF0 */ 0x03, 0x00, 0x5A, 0x00, 0x10, 0x5A, 0x01, 0x13, 0x5A, 0x02, 0x12, 0x1F, 0x03, 0x00, 0x15, 0x09, -/* 00015C00 */ 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x8A, 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0x30, 0x04, 0xFE, -/* 00015C10 */ 0xC0, 0xE3, 0x08, 0x09, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x34, 0x00, 0x18, 0x00, 0x7C, 0x00, 0x18, -/* 00015C20 */ 0x00, 0x45, 0x00, 0x0F, 0x00, 0x5F, 0x00, 0x18, 0x00, 0x7D, 0x00, 0x32, 0x00, 0x21, 0x01, 0x1B, -/* 00015C30 */ 0x00, 0x41, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x0A, 0x05, 0x6D, -/* 00015C40 */ 0xA2, 0x41, 0xD1, 0x00, 0x54, 0xFE, 0x79, 0xDE, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x02, 0xFE, -/* 00015C50 */ 0x79, 0xDE, 0xC6, 0xC6, 0x01, 0x06, 0x03, 0x07, 0x07, 0x17, 0x16, 0x03, 0x03, 0x01, 0x01, 0x01, -/* 00015C60 */ 0x01, 0x06, 0x08, 0x43, 0x59, 0x07, 0xB1, 0x05, 0x07, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA6, 0x07, -/* 00015C70 */ 0x47, 0x04, 0x07, 0x8C, 0x02, 0x17, 0x07, 0x4B, 0x07, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x02, 0x5A, -/* 00015C80 */ 0x01, 0x05, 0x8C, 0x01, 0x04, 0x08, 0x4B, 0x08, 0x5A, 0x02, 0x08, 0x8C, 0x03, 0x03, 0x08, 0x5F, -/* 00015C90 */ 0x08, 0x08, 0x00, 0x5A, 0x03, 0x08, 0x5A, 0x04, 0x03, 0x5A, 0x05, 0x04, 0x1F, 0x06, 0x00, 0x07, -/* 00015CA0 */ 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xDB, 0x01, 0xFE, 0x8C, 0xDE, 0x03, 0x05, 0x00, -/* 00015CB0 */ 0x00, 0x00, 0x0A, 0x00, 0x23, 0x00, 0x32, 0x00, 0x8F, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, -/* 00015CC0 */ 0x88, 0x01, 0x00, 0xFE, 0xF9, 0x04, 0x5D, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x27, 0x04, 0x53, 0xFE, -/* 00015CD0 */ 0xFC, 0xDA, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0xFC, 0xDA, 0xFE, 0x7B, 0x02, 0xFE, -/* 00015CE0 */ 0x7B, 0x02, 0x01, 0x06, 0x07, 0x0B, 0x06, 0x33, 0x31, 0x03, 0x02, 0x05, 0x05, 0x05, 0x05, 0x0A, -/* 00015CF0 */ 0x06, 0xFE, 0xF6, 0x03, 0x05, 0xFE, 0x33, 0x04, 0x06, 0xFE, 0x46, 0x03, 0x0B, 0x0C, 0xA6, 0x59, -/* 00015D00 */ 0x0B, 0xB1, 0x08, 0x0B, 0x4F, 0x09, 0x8C, 0x03, 0x24, 0x0C, 0x6A, 0x0B, 0x0C, 0x00, 0x07, 0x02, -/* 00015D10 */ 0x00, 0x5A, 0x00, 0x0C, 0x5A, 0x01, 0x07, 0x1F, 0x02, 0x0B, 0x0B, 0x47, 0x07, 0x0B, 0x2C, 0x0B, -/* 00015D20 */ 0x08, 0x15, 0x03, 0x00, 0x0B, 0x02, 0x09, 0x18, 0x00, 0x8C, 0x03, 0x03, 0x0C, 0x6A, 0x0B, 0x0C, -/* 00015D30 */ 0x01, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x5A, 0x01, 0x03, 0x5A, 0x02, 0x04, 0x1F, 0x03, 0xFF, -/* 00015D40 */ 0x0B, 0x8C, 0x03, 0x03, 0x0C, 0x6A, 0x0B, 0x0C, 0x02, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5A, -/* 00015D50 */ 0x01, 0x08, 0x1F, 0x02, 0x0B, 0x0B, 0x47, 0x09, 0x0B, 0xA6, 0x0B, 0x14, 0x08, 0x00, 0x09, 0x0B, -/* 00015D60 */ 0x5F, 0x0B, 0x09, 0x03, 0x0F, 0x18, 0x00, 0x0B, 0x8C, 0x03, 0x03, 0x0C, 0x6A, 0x0B, 0x0C, 0x01, -/* 00015D70 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x5A, 0x01, 0x03, 0x5A, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x0B, -/* 00015D80 */ 0x8C, 0x03, 0x03, 0x0C, 0x6A, 0x0B, 0x0C, 0x04, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x0C, 0x5A, 0x01, -/* 00015D90 */ 0x07, 0x5A, 0x02, 0x09, 0x5A, 0x03, 0x05, 0x5A, 0x04, 0x06, 0x1F, 0x05, 0x00, 0x0B, 0x09, 0x02, -/* 00015DA0 */ 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x38, 0x03, 0xFE, 0x8A, 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0x30, -/* 00015DB0 */ 0x04, 0xFE, 0xE2, 0x01, 0xFE, 0x24, 0xDB, 0x08, 0x07, 0x00, 0x00, 0x00, 0x18, 0x00, 0x27, 0x00, -/* 00015DC0 */ 0x0B, 0x00, 0x30, 0x00, 0x18, 0x00, 0x73, 0x00, 0x18, 0x00, 0x41, 0x00, 0x0F, 0x00, 0x5B, 0x00, -/* 00015DD0 */ 0x18, 0x00, 0x73, 0x00, 0x23, 0x00, 0x79, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, -/* 00015DE0 */ 0x00, 0xFE, 0xEA, 0x04, 0x4F, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x26, 0x04, 0x52, 0xFE, 0x34, 0xD8, -/* 00015DF0 */ 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x34, 0xD8, 0xFE, 0x67, 0x02, 0xFE, 0x67, 0x02, -/* 00015E00 */ 0x01, 0x06, 0x06, 0x0A, 0x06, 0x33, 0x31, 0x03, 0x02, 0x05, 0x05, 0x05, 0x05, 0x09, 0x06, 0xFE, -/* 00015E10 */ 0xF6, 0x03, 0x05, 0xFE, 0x32, 0x04, 0x06, 0xFE, 0x46, 0x03, 0x0C, 0xA6, 0x59, 0x0A, 0xB1, 0x07, -/* 00015E20 */ 0x0A, 0x4F, 0x08, 0x8C, 0x03, 0x24, 0x0B, 0x6A, 0x0A, 0x0B, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 00015E30 */ 0x0B, 0x5A, 0x01, 0x06, 0x1F, 0x02, 0x0A, 0x0A, 0x47, 0x06, 0x0A, 0x2C, 0x0A, 0x07, 0x15, 0x03, -/* 00015E40 */ 0x00, 0x0A, 0x02, 0x09, 0x18, 0x00, 0x8C, 0x03, 0x03, 0x0B, 0x6A, 0x0A, 0x0B, 0x01, 0x07, 0x03, -/* 00015E50 */ 0x00, 0x5A, 0x00, 0x0B, 0x5A, 0x01, 0x03, 0x5A, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x0A, 0x8C, 0x03, -/* 00015E60 */ 0x03, 0x0B, 0x6A, 0x0A, 0x0B, 0x02, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0B, 0x5A, 0x01, 0x07, 0x1F, -/* 00015E70 */ 0x02, 0x0A, 0x0A, 0x47, 0x08, 0x0A, 0xA6, 0x0A, 0x14, 0x08, 0x00, 0x08, 0x0A, 0x5F, 0x0A, 0x08, -/* 00015E80 */ 0x03, 0x0F, 0x18, 0x00, 0x0A, 0x8C, 0x03, 0x03, 0x0B, 0x6A, 0x0A, 0x0B, 0x01, 0x07, 0x03, 0x00, -/* 00015E90 */ 0x5A, 0x00, 0x0B, 0x5A, 0x01, 0x03, 0x5A, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x0A, 0x8C, 0x03, 0x03, -/* 00015EA0 */ 0x0B, 0x6A, 0x0A, 0x0B, 0x04, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x0B, 0x5A, 0x01, 0x06, 0x5A, 0x02, -/* 00015EB0 */ 0x08, 0x5A, 0x03, 0x05, 0x5A, 0x04, 0x05, 0x1F, 0x05, 0x00, 0x0A, 0x09, 0x02, 0x00, 0xA6, 0x00, -/* 00015EC0 */ 0x24, 0x00, 0xFE, 0x38, 0x03, 0xFE, 0x8A, 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0x30, 0x04, 0xFE, 0xE2, -/* 00015ED0 */ 0x01, 0xFE, 0x55, 0xD8, 0x08, 0x07, 0x00, 0x00, 0x00, 0x18, 0x00, 0x27, 0x00, 0x0B, 0x00, 0x30, -/* 00015EE0 */ 0x00, 0x18, 0x00, 0x6C, 0x00, 0x18, 0x00, 0x41, 0x00, 0x0F, 0x00, 0x5B, 0x00, 0x18, 0x00, 0x6C, -/* 00015EF0 */ 0x00, 0x23, 0x00, 0x7A, 0x00, 0x00, 0x3F, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0xD0, -/* 00015F00 */ 0x04, 0x44, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x46, 0x03, 0x51, 0xFE, 0x86, 0xD4, 0xFF, 0x00, 0x10, -/* 00015F10 */ 0x01, 0x00, 0x03, 0x01, 0xFE, 0x86, 0xD4, 0xFE, 0x5B, 0x03, 0xFE, 0x5B, 0x03, 0x0B, 0x04, 0x0B, -/* 00015F20 */ 0x05, 0x60, 0x59, 0x03, 0x05, 0x0A, 0x09, 0x0A, 0x0A, 0x0A, 0x08, 0x06, 0xFE, 0x46, 0x03, 0xFE, -/* 00015F30 */ 0x36, 0x01, 0x59, 0x0B, 0xB1, 0x06, 0x0B, 0xBD, 0x07, 0x4F, 0x08, 0x4F, 0x09, 0x15, 0x05, 0x00, -/* 00015F40 */ 0x04, 0x02, 0xA6, 0x0B, 0x47, 0x04, 0x0B, 0x15, 0x05, 0x00, 0x05, 0x02, 0xA6, 0x0B, 0x47, 0x05, -/* 00015F50 */ 0x0B, 0x4F, 0x08, 0x4F, 0x09, 0x68, 0x09, 0x00, 0x00, 0x00, 0x0B, 0x14, 0x0A, 0x00, 0x06, 0x0B, -/* 00015F60 */ 0xA6, 0x0B, 0x14, 0x03, 0x00, 0x06, 0x0B, 0x09, 0x10, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x01, 0x04, -/* 00015F70 */ 0x5A, 0x02, 0x05, 0xC1, 0x03, 0x00, 0x07, 0x09, 0xEC, 0x00, 0x8C, 0x03, 0x24, 0x0C, 0x6A, 0x0B, -/* 00015F80 */ 0x0C, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5A, 0x01, 0x06, 0x1F, 0x02, 0x0B, 0x0B, 0x47, -/* 00015F90 */ 0x08, 0x0B, 0x8C, 0x03, 0x37, 0x0C, 0x4B, 0x0C, 0x6A, 0x0B, 0x0C, 0x01, 0x07, 0x02, 0x00, 0x5A, -/* 00015FA0 */ 0x00, 0x0C, 0x5A, 0x01, 0x08, 0x1F, 0x02, 0x0B, 0x0B, 0x0F, 0x15, 0x00, 0x0B, 0x8C, 0x03, 0x03, -/* 00015FB0 */ 0x0C, 0x6A, 0x0B, 0x0C, 0x02, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5A, 0x01, 0x03, 0x1F, 0x02, -/* 00015FC0 */ 0xFF, 0x0B, 0x8C, 0x03, 0x03, 0x0C, 0x6A, 0x0B, 0x0C, 0x03, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, -/* 00015FD0 */ 0x5A, 0x01, 0x08, 0x1F, 0x02, 0x0B, 0x0B, 0x47, 0x09, 0x0B, 0xA6, 0x0B, 0x14, 0x03, 0x00, 0x09, -/* 00015FE0 */ 0x0B, 0x09, 0x2F, 0x00, 0x8C, 0x03, 0x37, 0x0C, 0x4B, 0x0C, 0x6A, 0x0B, 0x0C, 0x04, 0x07, 0x01, -/* 00015FF0 */ 0x00, 0x5A, 0x00, 0x0C, 0x1F, 0x01, 0x0B, 0x0B, 0x47, 0x09, 0x0B, 0x8C, 0x03, 0x03, 0x0C, 0x6A, -/* 00016000 */ 0x0B, 0x0C, 0x05, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x5A, 0x01, 0x08, 0x5A, 0x02, 0x09, 0x1F, -/* 00016010 */ 0x03, 0xFF, 0x0B, 0x8C, 0x01, 0x02, 0x0B, 0x4B, 0x0B, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x5A, -/* 00016020 */ 0x01, 0x09, 0x5A, 0x02, 0x04, 0x5A, 0x03, 0x05, 0x1F, 0x04, 0xFF, 0x0B, 0x47, 0x0B, 0x09, 0x8C, -/* 00016030 */ 0x03, 0x37, 0x0D, 0x4B, 0x0D, 0x6A, 0x0C, 0x0D, 0x06, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0D, 0x8C, -/* 00016040 */ 0x01, 0x03, 0x0E, 0x4B, 0x0E, 0x5A, 0x01, 0x0E, 0x5A, 0x02, 0x08, 0x1F, 0x03, 0x0C, 0x0C, 0x74, -/* 00016050 */ 0x0C, 0x0B, 0x07, 0x5F, 0x0B, 0x09, 0x08, 0x80, 0x0B, 0x0B, 0xF8, 0x00, 0xFA, 0x0B, 0x47, 0x00, -/* 00016060 */ 0x08, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x36, 0x03, 0xB0, 0xFE, 0x8E, 0x02, 0xFE, -/* 00016070 */ 0xEF, 0x01, 0x61, 0xFE, 0xF0, 0x01, 0x4D, 0xFE, 0x31, 0x04, 0xFE, 0x31, 0x04, 0xAB, 0xFE, 0x9C, -/* 00016080 */ 0xD4, 0x10, 0x0B, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0E, 0x00, 0x23, 0x00, 0x15, 0x00, -/* 00016090 */ 0x3B, 0x00, 0x10, 0x00, 0x46, 0x00, 0x18, 0x00, 0x32, 0x00, 0x1B, 0x00, 0x2C, 0x00, 0x15, 0x00, -/* 000160A0 */ 0x83, 0x00, 0x18, 0x00, 0x3E, 0x00, 0x0A, 0x00, 0x32, 0x00, 0x17, 0x00, 0x2B, 0x00, 0x18, 0x00, -/* 000160B0 */ 0x48, 0x00, 0x19, 0x00, 0x45, 0x00, 0x27, 0x00, 0x3B, 0x00, 0x0B, 0x00, 0x33, 0x00, 0x08, 0x00, -/* 000160C0 */ 0x14, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x07, 0x88, 0x01, 0x00, 0xFE, 0xC0, 0x04, 0x5E, 0xA0, -/* 000160D0 */ 0x41, 0xF1, 0x00, 0x50, 0xFE, 0xDC, 0xD1, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0xDC, -/* 000160E0 */ 0xD1, 0xFE, 0xF1, 0x01, 0xFE, 0xF1, 0x01, 0x03, 0x07, 0x0B, 0x10, 0x06, 0x37, 0x35, 0x03, 0x05, -/* 000160F0 */ 0x04, 0x04, 0x04, 0x04, 0x01, 0x0F, 0x07, 0x06, 0xFE, 0xC3, 0x03, 0x05, 0xFE, 0x21, 0x04, 0x06, -/* 00016100 */ 0xFE, 0x20, 0x04, 0x01, 0x00, 0x01, 0x01, 0x08, 0x0C, 0x0B, 0xB0, 0xAC, 0x0D, 0x59, 0x10, 0xB1, -/* 00016110 */ 0x0B, 0x10, 0x4F, 0x0C, 0x4F, 0x0E, 0x2C, 0x10, 0x0B, 0x15, 0x03, 0x00, 0x10, 0x03, 0x09, 0x25, -/* 00016120 */ 0x00, 0x8C, 0x03, 0x0A, 0x10, 0xE1, 0x10, 0x0B, 0x10, 0x00, 0x0F, 0x18, 0x00, 0x10, 0x8C, 0x03, -/* 00016130 */ 0x03, 0x11, 0x6A, 0x10, 0x11, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x11, 0x5A, 0x01, 0x04, 0x5A, -/* 00016140 */ 0x02, 0x05, 0x1F, 0x03, 0xFF, 0x10, 0x8C, 0x03, 0x37, 0x11, 0x4B, 0x11, 0x6A, 0x10, 0x11, 0x01, -/* 00016150 */ 0x07, 0x01, 0x00, 0x5A, 0x00, 0x11, 0x1F, 0x01, 0x10, 0x10, 0x47, 0x0C, 0x10, 0x8C, 0x01, 0x02, -/* 00016160 */ 0x10, 0x4B, 0x10, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x08, 0x5A, 0x01, 0x0C, 0x95, 0x11, 0x0D, 0x06, -/* 00016170 */ 0x5A, 0x02, 0x11, 0x95, 0x11, 0x0D, 0x07, 0x5A, 0x03, 0x11, 0x1F, 0x04, 0xFF, 0x10, 0x8C, 0x03, -/* 00016180 */ 0x24, 0x11, 0x6A, 0x10, 0x11, 0x02, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x11, 0x5A, 0x01, 0x0B, 0x1F, -/* 00016190 */ 0x02, 0x10, 0x10, 0x47, 0x0E, 0x10, 0x8C, 0x03, 0x03, 0x11, 0x6A, 0x10, 0x11, 0x03, 0x07, 0x05, -/* 000161A0 */ 0x00, 0x5A, 0x00, 0x11, 0x5A, 0x01, 0x0E, 0x5A, 0x02, 0x0C, 0x5A, 0x03, 0x09, 0x5A, 0x04, 0x0A, -/* 000161B0 */ 0x1F, 0x05, 0x00, 0x10, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x8A, 0x02, 0x61, 0xFE, -/* 000161C0 */ 0x38, 0x03, 0xFE, 0xE2, 0x01, 0xFE, 0xF6, 0xD1, 0x07, 0x0B, 0x00, 0x00, 0x00, 0x18, 0x00, 0x4D, -/* 000161D0 */ 0x00, 0x18, 0x00, 0x68, 0x00, 0x17, 0x00, 0x2C, 0x00, 0x21, 0x00, 0x4E, 0x00, 0x18, 0x00, 0x2F, -/* 000161E0 */ 0x00, 0x23, 0x00, 0x78, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x83, -/* 000161F0 */ 0x04, 0x27, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x1F, 0x04, 0x4F, 0xFE, 0xD2, 0xC7, 0xFF, 0x00, 0x10, -/* 00016200 */ 0x01, 0x00, 0x04, 0x04, 0xFE, 0xD2, 0xC7, 0xFE, 0xA9, 0x09, 0xFE, 0xA9, 0x09, 0x01, 0x12, 0x15, -/* 00016210 */ 0x23, 0x07, 0xFC, 0xE3, 0x03, 0x0B, 0x16, 0x16, 0x16, 0x16, 0x22, 0x08, 0x06, 0xFE, 0x00, 0x04, -/* 00016220 */ 0x06, 0xFE, 0xAD, 0x03, 0x05, 0xFE, 0xFF, 0x03, 0x05, 0xFE, 0xBC, 0x03, 0x06, 0xFE, 0xB4, 0x03, -/* 00016230 */ 0x06, 0xFE, 0x28, 0x04, 0x05, 0xFE, 0x29, 0x04, 0x05, 0xFE, 0x2A, 0x04, 0x06, 0xFE, 0x2B, 0x04, -/* 00016240 */ 0x01, 0x00, 0x06, 0xFE, 0x2C, 0x04, 0x05, 0xFE, 0x2D, 0x04, 0x06, 0xFE, 0x2E, 0x04, 0x06, 0xFE, -/* 00016250 */ 0x3F, 0x03, 0x01, 0x03, 0x06, 0xFE, 0x2F, 0x04, 0x06, 0xFE, 0xC2, 0x03, 0x0B, 0xFE, 0x26, 0x03, -/* 00016260 */ 0x4F, 0x18, 0x4F, 0x19, 0x4F, 0x1A, 0x4F, 0x1B, 0x4F, 0x1C, 0x4F, 0x1D, 0x4F, 0x1E, 0x4F, 0x1F, -/* 00016270 */ 0x4F, 0x20, 0x4F, 0x21, 0x8C, 0x02, 0x11, 0x23, 0x4B, 0x23, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, -/* 00016280 */ 0x5A, 0x01, 0x16, 0x1F, 0x02, 0x23, 0x23, 0x47, 0x18, 0x23, 0xA6, 0x23, 0x14, 0x03, 0x00, 0x17, -/* 00016290 */ 0x23, 0x09, 0x1A, 0x00, 0x8C, 0x03, 0x37, 0x25, 0x4B, 0x25, 0x6A, 0x24, 0x25, 0x00, 0x07, 0x01, -/* 000162A0 */ 0x00, 0x5A, 0x00, 0x25, 0x1F, 0x01, 0x24, 0x24, 0x47, 0x23, 0x24, 0x09, 0x18, 0x00, 0x8C, 0x03, -/* 000162B0 */ 0x24, 0x25, 0x6A, 0x24, 0x25, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x25, 0x5A, 0x01, 0x17, 0x1F, -/* 000162C0 */ 0x02, 0x24, 0x24, 0x47, 0x23, 0x24, 0x47, 0x17, 0x23, 0x8C, 0x03, 0x37, 0x24, 0x4B, 0x24, 0x6A, -/* 000162D0 */ 0x23, 0x24, 0x02, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x24, 0x1F, 0x01, 0x23, 0x23, 0x47, 0x19, 0x23, -/* 000162E0 */ 0x47, 0x23, 0x19, 0x8C, 0x02, 0x02, 0x24, 0x4B, 0x24, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x02, 0x5A, -/* 000162F0 */ 0x01, 0x17, 0x5A, 0x02, 0x03, 0x5A, 0x03, 0x04, 0xCC, 0x25, 0x02, 0x9F, 0x00, 0x05, 0x25, 0x9F, -/* 00016300 */ 0x01, 0x06, 0x25, 0x5A, 0x04, 0x25, 0x5A, 0x05, 0x05, 0x1F, 0x06, 0x24, 0x24, 0x74, 0x24, 0x23, -/* 00016310 */ 0x03, 0x8C, 0x02, 0x0B, 0x23, 0x4B, 0x23, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x02, 0x8C, 0x03, 0x03, -/* 00016320 */ 0x24, 0x5F, 0x24, 0x24, 0x04, 0x5A, 0x01, 0x24, 0x5A, 0x02, 0x18, 0x5A, 0x03, 0x19, 0xCC, 0x24, -/* 00016330 */ 0x01, 0x9F, 0x00, 0x07, 0x24, 0x5A, 0x04, 0x24, 0x1F, 0x05, 0x23, 0x23, 0x47, 0x1A, 0x23, 0x5F, -/* 00016340 */ 0x23, 0x1A, 0x05, 0x74, 0x23, 0x15, 0x06, 0x5F, 0x23, 0x1A, 0x07, 0x74, 0x23, 0x15, 0x08, 0x8C, -/* 00016350 */ 0x02, 0x02, 0x23, 0x4B, 0x23, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x17, 0x5A, 0x02, -/* 00016360 */ 0x08, 0x5A, 0x03, 0x04, 0xCC, 0x24, 0x03, 0x9F, 0x00, 0x09, 0x24, 0x9F, 0x01, 0x0A, 0x24, 0x9F, -/* 00016370 */ 0x02, 0x0B, 0x24, 0x5A, 0x04, 0x24, 0x5A, 0x05, 0x09, 0x1F, 0x06, 0x23, 0x23, 0x47, 0x1B, 0x23, -/* 00016380 */ 0x74, 0x1B, 0x15, 0x09, 0x47, 0x23, 0x15, 0x8C, 0x03, 0x3D, 0x24, 0x4B, 0x24, 0x07, 0x03, 0x00, -/* 00016390 */ 0x5A, 0x00, 0x02, 0x8C, 0x03, 0x3B, 0x25, 0x4B, 0x25, 0x5A, 0x01, 0x25, 0x8C, 0x03, 0x37, 0x26, -/* 000163A0 */ 0x4B, 0x26, 0x6A, 0x25, 0x26, 0x0A, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x26, 0x5A, 0x01, 0x1B, 0x1F, -/* 000163B0 */ 0x02, 0x25, 0x25, 0x5A, 0x02, 0x25, 0x1F, 0x03, 0x24, 0x24, 0x74, 0x24, 0x23, 0x0B, 0x43, 0x23, -/* 000163C0 */ 0x1B, 0x0B, 0x47, 0x1C, 0x23, 0x8C, 0x02, 0x02, 0x23, 0x4B, 0x23, 0x07, 0x06, 0x00, 0x5A, 0x00, -/* 000163D0 */ 0x02, 0x5A, 0x01, 0x17, 0x5A, 0x02, 0x0B, 0x5A, 0x03, 0x04, 0xA6, 0x24, 0x5A, 0x04, 0x24, 0xA6, -/* 000163E0 */ 0x24, 0x5A, 0x05, 0x24, 0x1F, 0x06, 0x23, 0x23, 0x47, 0x1D, 0x23, 0xA6, 0x23, 0x15, 0x03, 0x00, -/* 000163F0 */ 0x1D, 0x23, 0x09, 0x2F, 0x00, 0x8C, 0x02, 0x0F, 0x23, 0x4B, 0x23, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 00016400 */ 0x02, 0x5A, 0x01, 0x1D, 0x1F, 0x02, 0x23, 0x23, 0x0F, 0x18, 0x00, 0x23, 0x8C, 0x03, 0x03, 0x24, -/* 00016410 */ 0x6A, 0x23, 0x24, 0x0C, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x24, 0x5A, 0x01, 0x1D, 0x1F, 0x02, 0xFF, -/* 00016420 */ 0x23, 0x09, 0x20, 0x00, 0xA6, 0x23, 0x14, 0x03, 0x00, 0x1D, 0x23, 0x09, 0x16, 0x00, 0x0E, 0x12, -/* 00016430 */ 0x00, 0x1C, 0x8C, 0x03, 0x03, 0x24, 0x6A, 0x23, 0x24, 0x0D, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x24, -/* 00016440 */ 0x1F, 0x01, 0xFF, 0x23, 0x47, 0x1E, 0x0C, 0x0E, 0x36, 0x00, 0x1C, 0x8C, 0x03, 0x37, 0x24, 0x4B, -/* 00016450 */ 0x24, 0x6A, 0x23, 0x24, 0x0E, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x24, 0x5A, 0x01, 0x1D, 0x1F, 0x02, -/* 00016460 */ 0x23, 0x23, 0x47, 0x1D, 0x23, 0x74, 0x1D, 0x15, 0x0F, 0x8C, 0x03, 0x03, 0x24, 0x6A, 0x23, 0x24, -/* 00016470 */ 0x10, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x24, 0x5A, 0x01, 0x1D, 0x1F, 0x02, 0x23, 0x23, 0x47, 0x1E, -/* 00016480 */ 0x23, 0x8C, 0x02, 0x02, 0x23, 0x4B, 0x23, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x17, -/* 00016490 */ 0x5A, 0x02, 0x0D, 0x5A, 0x03, 0x04, 0xCC, 0x24, 0x03, 0x9F, 0x00, 0x0E, 0x24, 0x9F, 0x01, 0x0F, -/* 000164A0 */ 0x24, 0x9F, 0x02, 0x10, 0x24, 0x5A, 0x04, 0x24, 0x5A, 0x05, 0x0F, 0x1F, 0x06, 0x23, 0x23, 0x47, -/* 000164B0 */ 0x1F, 0x23, 0x0E, 0x3E, 0x00, 0x1C, 0x74, 0x1F, 0x15, 0x11, 0x47, 0x23, 0x15, 0x8C, 0x03, 0x3D, -/* 000164C0 */ 0x24, 0x4B, 0x24, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x8C, 0x03, 0x3C, 0x25, 0x4B, 0x25, 0x5A, -/* 000164D0 */ 0x01, 0x25, 0x8C, 0x03, 0x37, 0x26, 0x4B, 0x26, 0x6A, 0x25, 0x26, 0x0A, 0x07, 0x02, 0x00, 0x5A, -/* 000164E0 */ 0x00, 0x26, 0x5A, 0x01, 0x1F, 0x1F, 0x02, 0x25, 0x25, 0x5A, 0x02, 0x25, 0x1F, 0x03, 0x24, 0x24, -/* 000164F0 */ 0x74, 0x24, 0x23, 0x12, 0xA6, 0x23, 0x47, 0x20, 0x23, 0xA6, 0x23, 0x47, 0x21, 0x23, 0x0E, 0x09, -/* 00016500 */ 0x00, 0x1C, 0x47, 0x20, 0x1E, 0x47, 0x21, 0x1E, 0x09, 0x14, 0x00, 0x47, 0x20, 0x0C, 0x14, 0x03, -/* 00016510 */ 0x00, 0x1B, 0x0A, 0x09, 0x06, 0x00, 0x47, 0x21, 0x0C, 0x09, 0x03, 0x00, 0x47, 0x21, 0x11, 0x8C, -/* 00016520 */ 0x02, 0x14, 0x23, 0x4B, 0x23, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x15, 0x5A, 0x02, -/* 00016530 */ 0x17, 0x5A, 0x03, 0x20, 0x5A, 0x04, 0x21, 0x1F, 0x05, 0xFF, 0x23, 0x47, 0x23, 0x15, 0x8C, 0x02, -/* 00016540 */ 0x02, 0x24, 0x4B, 0x24, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x17, 0x5A, 0x02, 0x12, -/* 00016550 */ 0x5A, 0x03, 0x13, 0xA6, 0x25, 0x5A, 0x04, 0x25, 0x5A, 0x05, 0x14, 0x1F, 0x06, 0x24, 0x24, 0x74, -/* 00016560 */ 0x24, 0x23, 0x13, 0x74, 0x14, 0x15, 0x14, 0x8C, 0x03, 0x03, 0x24, 0x6A, 0x23, 0x24, 0x15, 0x07, -/* 00016570 */ 0x02, 0x00, 0x5A, 0x00, 0x24, 0x5A, 0x01, 0x15, 0x1F, 0x02, 0xFF, 0x23, 0x47, 0x00, 0x15, 0x09, -/* 00016580 */ 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x61, 0xFE, 0x36, 0x03, 0x61, 0xFE, 0xF8, 0x01, 0xFE, 0xDB, -/* 00016590 */ 0x01, 0xFE, 0xF7, 0x01, 0xFE, 0xF7, 0x01, 0xFE, 0xB4, 0x03, 0xFE, 0x18, 0x02, 0xFE, 0x28, 0x04, -/* 000165A0 */ 0xFE, 0x69, 0x01, 0xFE, 0x12, 0x02, 0xFE, 0x85, 0x02, 0xFE, 0x88, 0x02, 0xFE, 0x69, 0x01, 0xFE, -/* 000165B0 */ 0x0F, 0x02, 0xFE, 0xE5, 0x01, 0xFE, 0x10, 0x02, 0xFE, 0x11, 0x02, 0xFE, 0x19, 0x02, 0xFE, 0x30, -/* 000165C0 */ 0x04, 0xFE, 0xE3, 0x01, 0xFE, 0x00, 0xC8, 0x28, 0x14, 0x00, 0x00, 0x00, 0x16, 0x00, 0x46, 0x00, -/* 000165D0 */ 0x3F, 0x00, 0x58, 0x00, 0x17, 0x00, 0x24, 0x00, 0x31, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x62, 0x00, -/* 000165E0 */ 0x08, 0x00, 0x22, 0x00, 0x08, 0x00, 0x28, 0x00, 0x31, 0x00, 0x70, 0x00, 0x04, 0x00, 0x1E, 0x00, -/* 000165F0 */ 0x3A, 0x00, 0x51, 0x00, 0x07, 0x00, 0x37, 0x00, 0x26, 0x00, 0x5B, 0x00, 0x21, 0x00, 0x55, 0x00, -/* 00016600 */ 0x18, 0x00, 0x40, 0x00, 0x0E, 0x00, 0x3D, 0x00, 0x12, 0x00, 0x40, 0x00, 0x03, 0x00, 0x1D, 0x00, -/* 00016610 */ 0x04, 0x00, 0x23, 0x00, 0x1A, 0x00, 0x34, 0x00, 0x04, 0x00, 0x28, 0x00, 0x18, 0x00, 0x48, 0x00, -/* 00016620 */ 0x31, 0x00, 0x79, 0x00, 0x04, 0x00, 0x23, 0x00, 0x04, 0x00, 0x35, 0x00, 0x3A, 0x00, 0x7A, 0x00, -/* 00016630 */ 0x05, 0x00, 0x11, 0x00, 0x05, 0x00, 0x19, 0x00, 0x04, 0x00, 0x23, 0x00, 0x03, 0x00, 0x27, 0x00, -/* 00016640 */ 0x06, 0x00, 0x3C, 0x00, 0x03, 0x00, 0x21, 0x00, 0x08, 0x00, 0x2F, 0x00, 0x06, 0x00, 0x3E, 0x00, -/* 00016650 */ 0x03, 0x00, 0x3E, 0x00, 0x1C, 0x00, 0x51, 0x00, 0x28, 0x00, 0x5D, 0x00, 0x04, 0x00, 0x7C, 0x00, -/* 00016660 */ 0x15, 0x00, 0x2D, 0x00, 0x08, 0x00, 0x13, 0x00, 0x00, 0x3F, 0x5D, 0x00, 0xC1, 0x13, 0x8D, 0x25, -/* 00016670 */ 0x00, 0xFE, 0xB6, 0x03, 0x16, 0xA0, 0x41, 0xD1, 0x00, 0x46, 0xFE, 0xD8, 0xA4, 0x07, 0xFF, 0x00, -/* 00016680 */ 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0xD8, 0xA4, 0xFE, 0x12, 0x22, 0xFE, 0x12, 0x22, 0x04, 0xFE, -/* 00016690 */ 0x05, 0x04, 0xFE, 0x06, 0x04, 0xFE, 0x1E, 0x02, 0xFE, 0x84, 0x03, 0x0B, 0x18, 0x1F, 0x09, 0xD0, -/* 000166A0 */ 0xCB, 0x02, 0x09, 0x0B, 0x0B, 0x0B, 0x0B, 0x07, 0x1C, 0x1D, 0x1E, 0x08, 0x06, 0xFE, 0x3D, 0x03, -/* 000166B0 */ 0x06, 0xFE, 0x07, 0x04, 0x05, 0xFE, 0x08, 0x04, 0x05, 0xFE, 0x09, 0x04, 0x05, 0xFE, 0x0A, 0x04, -/* 000166C0 */ 0x05, 0xFE, 0x49, 0x03, 0x06, 0xFE, 0x3F, 0x03, 0x06, 0xFE, 0x40, 0x03, 0x06, 0xFE, 0x4C, 0x03, -/* 000166D0 */ 0x06, 0xFE, 0x42, 0x03, 0x0C, 0x06, 0xFE, 0x43, 0x03, 0x06, 0xFE, 0x44, 0x03, 0x0B, 0x07, 0x06, -/* 000166E0 */ 0xFE, 0x0B, 0x04, 0x06, 0xFE, 0x0C, 0x04, 0x06, 0xFE, 0x0D, 0x04, 0x05, 0xFE, 0x0E, 0x04, 0x06, -/* 000166F0 */ 0xFE, 0x0F, 0x04, 0x06, 0xFE, 0x8D, 0x03, 0xFE, 0xF2, 0x02, 0x4F, 0x18, 0x4F, 0x19, 0x4F, 0x1A, -/* 00016700 */ 0x4F, 0x1B, 0x4F, 0x1F, 0x94, 0x02, 0x1F, 0x4F, 0x1F, 0x94, 0x03, 0x1F, 0x4F, 0x1F, 0x94, 0x04, -/* 00016710 */ 0x1F, 0x4F, 0x1F, 0x94, 0x05, 0x1F, 0x8C, 0x02, 0x32, 0x1F, 0x15, 0x03, 0x00, 0x1F, 0x03, 0x09, -/* 00016720 */ 0x11, 0x00, 0x8C, 0x02, 0x32, 0x1F, 0x15, 0x03, 0x00, 0x1F, 0x04, 0x09, 0x05, 0x00, 0xA6, 0x00, -/* 00016730 */ 0x09, 0xB7, 0x02, 0xD3, 0x00, 0x1F, 0x94, 0x02, 0x1F, 0xA6, 0x1F, 0x94, 0x03, 0x1F, 0x8C, 0x02, -/* 00016740 */ 0x03, 0x20, 0x6A, 0x1F, 0x20, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x20, 0x8C, 0x02, 0x23, 0x21, -/* 00016750 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x05, 0xD3, 0x01, 0x22, 0x5A, 0x02, 0x22, 0x1F, -/* 00016760 */ 0x03, 0x21, 0x21, 0x5A, 0x01, 0x21, 0x8C, 0x02, 0x36, 0x21, 0x4B, 0x21, 0x5F, 0x21, 0x21, 0x01, -/* 00016770 */ 0x5A, 0x02, 0x21, 0x1F, 0x03, 0xFF, 0x1F, 0x8C, 0x02, 0x32, 0x1F, 0x14, 0x03, 0x00, 0x1F, 0x04, -/* 00016780 */ 0x09, 0x05, 0x00, 0xA6, 0x00, 0x09, 0x62, 0x02, 0x8C, 0x02, 0x23, 0x1F, 0x07, 0x03, 0x00, 0x5A, -/* 00016790 */ 0x00, 0x02, 0x5A, 0x01, 0x06, 0xD3, 0x02, 0x20, 0x5A, 0x02, 0x20, 0x1F, 0x03, 0x1F, 0x1F, 0x47, -/* 000167A0 */ 0x18, 0x1F, 0x8C, 0x02, 0x23, 0x1F, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x07, 0xD3, -/* 000167B0 */ 0x03, 0x20, 0x5A, 0x02, 0x20, 0x1F, 0x03, 0x1F, 0x1F, 0x94, 0x04, 0x1F, 0x94, 0x05, 0x08, 0x8C, -/* 000167C0 */ 0x02, 0x23, 0x1F, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x90, 0x05, 0x20, 0x5A, 0x01, 0x20, 0xD3, -/* 000167D0 */ 0x04, 0x20, 0x5A, 0x02, 0x20, 0x1F, 0x03, 0x1F, 0x1F, 0x47, 0x19, 0x1F, 0x8C, 0x02, 0x37, 0x20, -/* 000167E0 */ 0x4B, 0x20, 0x6A, 0x1F, 0x20, 0x02, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x20, 0x5A, 0x01, 0x19, 0x8C, -/* 000167F0 */ 0x01, 0x16, 0x21, 0x4B, 0x21, 0x5A, 0x02, 0x21, 0x1F, 0x03, 0x1F, 0x1F, 0x47, 0x1A, 0x1F, 0x8C, -/* 00016800 */ 0x02, 0x37, 0x20, 0x4B, 0x20, 0x6A, 0x1F, 0x20, 0x03, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x20, 0x5A, -/* 00016810 */ 0x01, 0x1A, 0x5A, 0x02, 0x09, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, -/* 00016820 */ 0x00, 0x00, 0x78, 0x0B, 0x21, 0x04, 0x78, 0x0D, 0x21, 0x05, 0x78, 0x0D, 0x21, 0x06, 0x78, 0x10, -/* 00016830 */ 0x21, 0x07, 0x5A, 0x03, 0x21, 0x1F, 0x04, 0xFF, 0x1F, 0x8C, 0x02, 0x37, 0x20, 0x4B, 0x20, 0x6A, -/* 00016840 */ 0x1F, 0x20, 0x03, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x20, 0x5A, 0x01, 0x18, 0x5A, 0x02, 0x0B, 0xCB, -/* 00016850 */ 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x78, 0x1A, 0x21, 0x04, -/* 00016860 */ 0x78, 0x10, 0x21, 0x05, 0x78, 0x0D, 0x21, 0x06, 0x78, 0x10, 0x21, 0x07, 0x5A, 0x03, 0x21, 0x1F, -/* 00016870 */ 0x04, 0xFF, 0x1F, 0x8C, 0x02, 0x37, 0x20, 0x4B, 0x20, 0x6A, 0x1F, 0x20, 0x03, 0x07, 0x04, 0x00, -/* 00016880 */ 0x5A, 0x00, 0x20, 0x5A, 0x01, 0x18, 0x5A, 0x02, 0x12, 0xCB, 0x30, 0x00, 0x00, 0x00, 0x02, 0x00, -/* 00016890 */ 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x07, 0x01, 0x00, 0xC1, 0x01, 0x22, 0x18, 0x78, 0x22, 0x21, -/* 000168A0 */ 0x04, 0x78, 0x0D, 0x21, 0x05, 0x78, 0x0D, 0x21, 0x06, 0x78, 0x0D, 0x21, 0x07, 0x5A, 0x03, 0x21, -/* 000168B0 */ 0x1F, 0x04, 0xFF, 0x1F, 0x8C, 0x02, 0x04, 0x1F, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5F, 0x20, -/* 000168C0 */ 0x18, 0x08, 0x5A, 0x01, 0x20, 0x8C, 0x02, 0x08, 0x20, 0x5F, 0x20, 0x20, 0x09, 0x5A, 0x02, 0x20, -/* 000168D0 */ 0x1F, 0x03, 0xFF, 0x1F, 0x8C, 0x02, 0x37, 0x20, 0x4B, 0x20, 0x6A, 0x1F, 0x20, 0x03, 0x07, 0x04, -/* 000168E0 */ 0x00, 0x5A, 0x00, 0x20, 0x5F, 0x21, 0x18, 0x08, 0x5A, 0x01, 0x21, 0x5A, 0x02, 0x13, 0xCB, 0x48, -/* 000168F0 */ 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x78, 0x18, 0x21, 0x04, 0x78, -/* 00016900 */ 0x10, 0x21, 0x05, 0x78, 0x0D, 0x21, 0x06, 0x78, 0x10, 0x21, 0x07, 0x5A, 0x03, 0x21, 0x1F, 0x04, -/* 00016910 */ 0xFF, 0x1F, 0x8C, 0x02, 0x37, 0x20, 0x4B, 0x20, 0x6A, 0x1F, 0x20, 0x03, 0x07, 0x04, 0x00, 0x5A, -/* 00016920 */ 0x00, 0x20, 0x5F, 0x21, 0x18, 0x08, 0x5A, 0x01, 0x21, 0x5A, 0x02, 0x14, 0xCB, 0x60, 0x00, 0x00, -/* 00016930 */ 0x00, 0x04, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0xD6, 0x05, 0x22, 0x21, 0x78, 0x22, 0x21, -/* 00016940 */ 0x04, 0x78, 0x10, 0x21, 0x05, 0x78, 0x0D, 0x21, 0x06, 0x78, 0x10, 0x21, 0x07, 0x5A, 0x03, 0x21, -/* 00016950 */ 0x1F, 0x04, 0xFF, 0x1F, 0xD3, 0x06, 0x1F, 0x47, 0x1B, 0x1F, 0x8C, 0x02, 0x37, 0x20, 0x4B, 0x20, -/* 00016960 */ 0x6A, 0x1F, 0x20, 0x03, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x20, 0x5A, 0x01, 0x1B, 0x5A, 0x02, 0x09, -/* 00016970 */ 0xCB, 0x78, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x78, 0x15, 0x21, -/* 00016980 */ 0x04, 0x78, 0x0D, 0x21, 0x05, 0x78, 0x0D, 0x21, 0x06, 0x78, 0x10, 0x21, 0x07, 0x5A, 0x03, 0x21, -/* 00016990 */ 0x1F, 0x04, 0xFF, 0x1F, 0x8C, 0x02, 0x37, 0x20, 0x4B, 0x20, 0x6A, 0x1F, 0x20, 0x03, 0x07, 0x04, -/* 000169A0 */ 0x00, 0x5A, 0x00, 0x20, 0x5F, 0x21, 0x18, 0x08, 0x5A, 0x01, 0x21, 0x5A, 0x02, 0x16, 0xCB, 0x90, -/* 000169B0 */ 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x8C, 0x02, 0x23, 0x22, 0x07, -/* 000169C0 */ 0x03, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x15, 0x5A, 0x02, 0x1B, 0x1F, 0x03, 0x22, 0x22, 0x78, -/* 000169D0 */ 0x22, 0x21, 0x0A, 0x78, 0x0D, 0x21, 0x06, 0x78, 0x10, 0x21, 0x07, 0x5A, 0x03, 0x21, 0x1F, 0x04, -/* 000169E0 */ 0xFF, 0x1F, 0x47, 0x00, 0x18, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x07, 0xA4, 0x00, 0x90, -/* 000169F0 */ 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, 0x01, 0x00, 0x00, 0x80, -/* 00016A00 */ 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, -/* 00016A10 */ 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, -/* 00016A20 */ 0x01, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, -/* 00016A30 */ 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x48, -/* 00016A40 */ 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, -/* 00016A50 */ 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x03, -/* 00016A60 */ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, -/* 00016A70 */ 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, -/* 00016A80 */ 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, -/* 00016A90 */ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, -/* 00016AA0 */ 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0xFE, -/* 00016AB0 */ 0xEE, 0x01, 0xFE, 0x07, 0x03, 0x4D, 0xFE, 0x88, 0x01, 0xFE, 0x83, 0x01, 0xFE, 0x82, 0x01, 0xFE, -/* 00016AC0 */ 0x80, 0x01, 0xFE, 0x81, 0x01, 0xFE, 0x15, 0x01, 0xFE, 0x15, 0x01, 0xFE, 0x84, 0x01, 0xFE, 0xEE, -/* 00016AD0 */ 0xA4, 0x17, 0x1C, 0x00, 0x00, 0x00, 0x18, 0x00, 0x40, 0x00, 0x05, 0x00, 0x1B, 0x00, 0x06, 0x00, -/* 00016AE0 */ 0xC1, 0x06, 0x05, 0x00, 0x73, 0x00, 0x39, 0x00, 0x76, 0x05, 0x0C, 0x00, 0x29, 0x00, 0x05, 0x00, -/* 00016AF0 */ 0x0D, 0x01, 0x1A, 0x00, 0xB1, 0x03, 0x1A, 0x00, 0xB5, 0x02, 0x03, 0x00, 0x55, 0x00, 0x1D, 0x00, -/* 00016B00 */ 0x30, 0x01, 0x23, 0x00, 0x6F, 0x00, 0x3A, 0x00, 0xD1, 0x00, 0x3A, 0x00, 0xD3, 0x00, 0x41, 0x00, -/* 00016B10 */ 0xBD, 0x00, 0x20, 0x00, 0x3D, 0x00, 0x3E, 0x00, 0xC1, 0x00, 0x42, 0x00, 0x81, 0x04, 0x06, 0x00, -/* 00016B20 */ 0xF4, 0x01, 0x3A, 0x00, 0xB9, 0x00, 0x4E, 0x00, 0xC4, 0x00, 0x08, 0x00, 0x15, 0x00, 0x00, 0x9F, -/* 00016B30 */ 0x72, 0x01, 0x00, 0xDF, 0x70, 0x01, 0x00, 0x12, 0x6F, 0x01, 0x00, 0xF1, 0x6D, 0x01, 0x00, 0x6A, -/* 00016B40 */ 0x6D, 0x01, 0x00, 0x2E, 0x6C, 0x01, 0x00, 0x4B, 0x6B, 0x01, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, -/* 00016B50 */ 0x88, 0x01, 0x00, 0xFE, 0x62, 0x04, 0x1B, 0xA0, 0x41, 0xC1, 0x00, 0xFE, 0x1E, 0x04, 0x4D, 0xFE, -/* 00016B60 */ 0x76, 0xC3, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0x76, 0xC3, 0xFE, 0xD7, 0x01, 0xFE, -/* 00016B70 */ 0xD7, 0x01, 0x01, 0x05, 0x05, 0x08, 0x04, 0x24, 0x23, 0x03, 0x01, 0x04, 0x04, 0x04, 0x04, 0x07, -/* 00016B80 */ 0x06, 0xFE, 0xF6, 0x03, 0x05, 0xFE, 0x1C, 0x04, 0x06, 0xFE, 0x45, 0x03, 0x74, 0x59, 0x08, 0xB1, -/* 00016B90 */ 0x05, 0x08, 0x4F, 0x06, 0x2C, 0x08, 0x05, 0x15, 0x03, 0x00, 0x08, 0x02, 0x09, 0x18, 0x00, 0x8C, -/* 00016BA0 */ 0x03, 0x03, 0x09, 0x6A, 0x08, 0x09, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x09, 0x5A, 0x01, 0x03, -/* 00016BB0 */ 0x5A, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x08, 0x8C, 0x03, 0x03, 0x09, 0x6A, 0x08, 0x09, 0x01, 0x07, -/* 00016BC0 */ 0x02, 0x00, 0x5A, 0x00, 0x09, 0x5A, 0x01, 0x05, 0x1F, 0x02, 0x08, 0x08, 0x47, 0x06, 0x08, 0xA6, -/* 00016BD0 */ 0x08, 0x14, 0x08, 0x00, 0x06, 0x08, 0x5F, 0x08, 0x06, 0x02, 0x0F, 0x18, 0x00, 0x08, 0x8C, 0x03, -/* 00016BE0 */ 0x03, 0x09, 0x6A, 0x08, 0x09, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x09, 0x5A, 0x01, 0x03, 0x5A, -/* 00016BF0 */ 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x08, 0x5F, 0x00, 0x06, 0x03, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, -/* 00016C00 */ 0x00, 0xFE, 0x8A, 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0x1A, 0x04, 0xFE, 0x1B, 0x04, 0xFE, 0x90, 0xC3, -/* 00016C10 */ 0x07, 0x07, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x30, 0x00, 0x18, 0x00, 0x65, 0x00, 0x18, 0x00, 0x41, -/* 00016C20 */ 0x00, 0x0F, 0x00, 0x57, 0x00, 0x18, 0x00, 0x65, 0x00, 0x09, 0x00, 0x2A, 0x00, 0x00, 0xBF, 0x5C, -/* 00016C30 */ 0x00, 0xC1, 0x03, 0x88, 0x03, 0x00, 0xFE, 0x47, 0x04, 0x13, 0xA0, 0x41, 0xC3, 0x00, 0xFE, 0x0D, -/* 00016C40 */ 0x04, 0x4C, 0xFF, 0x00, 0x00, 0x00, 0x02, 0xFE, 0x2F, 0xBF, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, -/* 00016C50 */ 0x01, 0xFE, 0x2F, 0xBF, 0xFE, 0x4A, 0x03, 0xFE, 0x4A, 0x03, 0x01, 0x06, 0x0D, 0x11, 0x04, 0x34, -/* 00016C60 */ 0x32, 0x03, 0x02, 0x03, 0x03, 0x03, 0x03, 0x10, 0x06, 0xFE, 0xF6, 0x03, 0x05, 0xFE, 0x1D, 0x04, -/* 00016C70 */ 0x06, 0xFE, 0x45, 0x03, 0x06, 0xFE, 0xF7, 0x03, 0x06, 0xFE, 0x10, 0x04, 0x06, 0xFE, 0x16, 0x04, -/* 00016C80 */ 0x06, 0xFE, 0x17, 0x04, 0x06, 0xFE, 0x19, 0x04, 0x06, 0xFE, 0x13, 0x04, 0x06, 0xFE, 0x14, 0x04, -/* 00016C90 */ 0x08, 0xAA, 0x59, 0x11, 0xB1, 0x0D, 0x11, 0x4F, 0x0E, 0x4F, 0x0F, 0x2C, 0x11, 0x0D, 0x15, 0x03, -/* 00016CA0 */ 0x00, 0x11, 0x02, 0x09, 0x18, 0x00, 0x8C, 0x03, 0x03, 0x12, 0x6A, 0x11, 0x12, 0x00, 0x07, 0x03, -/* 00016CB0 */ 0x00, 0x5A, 0x00, 0x12, 0x5A, 0x01, 0x03, 0x5A, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x11, 0x8C, 0x03, -/* 00016CC0 */ 0x03, 0x12, 0x6A, 0x11, 0x12, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x12, 0x5A, 0x01, 0x0D, 0x1F, -/* 00016CD0 */ 0x02, 0x11, 0x11, 0x47, 0x0E, 0x11, 0xA6, 0x11, 0x14, 0x08, 0x00, 0x0E, 0x11, 0x5F, 0x11, 0x0E, -/* 00016CE0 */ 0x02, 0x0F, 0x18, 0x00, 0x11, 0x8C, 0x03, 0x03, 0x12, 0x6A, 0x11, 0x12, 0x00, 0x07, 0x03, 0x00, -/* 00016CF0 */ 0x5A, 0x00, 0x12, 0x5A, 0x01, 0x03, 0x5A, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x11, 0xCC, 0x11, 0x07, -/* 00016D00 */ 0x9F, 0x00, 0x05, 0x11, 0x9F, 0x01, 0x06, 0x11, 0x9F, 0x02, 0x07, 0x11, 0x9F, 0x03, 0x08, 0x11, -/* 00016D10 */ 0x9F, 0x04, 0x09, 0x11, 0x9F, 0x05, 0x0A, 0x11, 0x9F, 0x06, 0x0B, 0x11, 0x47, 0x0F, 0x11, 0x8C, -/* 00016D20 */ 0x02, 0x19, 0x11, 0x4B, 0x11, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x5A, 0x01, 0x0F, 0x5A, 0x02, -/* 00016D30 */ 0x0E, 0x1F, 0x03, 0x00, 0x11, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x8A, 0x02, 0xFE, -/* 00016D40 */ 0xEF, 0x01, 0xFE, 0x1A, 0x04, 0xFE, 0x5C, 0xBF, 0x08, 0x09, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x34, -/* 00016D50 */ 0x00, 0x18, 0x00, 0x74, 0x00, 0x18, 0x00, 0x45, 0x00, 0x0F, 0x00, 0x5B, 0x00, 0x18, 0x00, 0x75, -/* 00016D60 */ 0x00, 0x22, 0x00, 0x1E, 0x01, 0x1B, 0x00, 0x41, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, -/* 00016D70 */ 0x01, 0x00, 0xFE, 0x27, 0x04, 0x65, 0xA2, 0x41, 0xD1, 0x00, 0x4B, 0xFE, 0x41, 0xBA, 0xFF, 0x00, -/* 00016D80 */ 0x10, 0x01, 0x00, 0x03, 0x02, 0xFE, 0x41, 0xBA, 0xC8, 0xC8, 0x01, 0x06, 0x03, 0x07, 0x07, 0x17, -/* 00016D90 */ 0x16, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x06, 0x08, 0x43, 0x59, 0x07, 0xB1, 0x05, 0x07, 0x15, -/* 00016DA0 */ 0x05, 0x00, 0x04, 0x02, 0xA6, 0x07, 0x47, 0x04, 0x07, 0x8C, 0x02, 0x17, 0x07, 0x4B, 0x07, 0x07, -/* 00016DB0 */ 0x06, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x05, 0x8C, 0x01, 0x05, 0x08, 0x4B, 0x08, 0x5A, 0x02, -/* 00016DC0 */ 0x08, 0x8C, 0x03, 0x03, 0x08, 0x5F, 0x08, 0x08, 0x00, 0x5A, 0x03, 0x08, 0x5A, 0x04, 0x03, 0x5A, -/* 00016DD0 */ 0x05, 0x04, 0x1F, 0x06, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xDA, 0x01, -/* 00016DE0 */ 0xFE, 0x54, 0xBA, 0x03, 0x05, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x23, 0x00, 0x32, 0x00, 0x91, 0x00, -/* 00016DF0 */ 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x18, 0x04, 0x4D, 0xA2, 0x41, 0xC3, -/* 00016E00 */ 0x00, 0xFE, 0x0F, 0x04, 0x4A, 0xFE, 0x1F, 0xB7, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, -/* 00016E10 */ 0x1F, 0xB7, 0xFE, 0x30, 0x02, 0xFE, 0x30, 0x02, 0x01, 0x08, 0x07, 0x0C, 0x09, 0x36, 0x35, 0x03, -/* 00016E20 */ 0x02, 0x04, 0x04, 0x04, 0x04, 0x0B, 0x06, 0xFE, 0xF6, 0x03, 0x05, 0xFE, 0x1C, 0x04, 0x06, 0xFE, -/* 00016E30 */ 0x45, 0x03, 0x08, 0x0C, 0xB0, 0x59, 0x0C, 0xB1, 0x09, 0x0C, 0x4F, 0x0A, 0x2C, 0x0C, 0x09, 0x15, -/* 00016E40 */ 0x03, 0x00, 0x0C, 0x02, 0x09, 0x18, 0x00, 0x8C, 0x03, 0x03, 0x0D, 0x6A, 0x0C, 0x0D, 0x00, 0x07, -/* 00016E50 */ 0x03, 0x00, 0x5A, 0x00, 0x0D, 0x5A, 0x01, 0x03, 0x5A, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x0C, 0x8C, -/* 00016E60 */ 0x03, 0x03, 0x0D, 0x6A, 0x0C, 0x0D, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0D, 0x5A, 0x01, 0x09, -/* 00016E70 */ 0x1F, 0x02, 0x0C, 0x0C, 0x47, 0x0A, 0x0C, 0xA6, 0x0C, 0x14, 0x08, 0x00, 0x0A, 0x0C, 0x5F, 0x0C, -/* 00016E80 */ 0x0A, 0x02, 0x0F, 0x18, 0x00, 0x0C, 0x8C, 0x03, 0x03, 0x0D, 0x6A, 0x0C, 0x0D, 0x00, 0x07, 0x03, -/* 00016E90 */ 0x00, 0x5A, 0x00, 0x0D, 0x5A, 0x01, 0x03, 0x5A, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x0C, 0x8C, 0x03, -/* 00016EA0 */ 0x03, 0x0D, 0x6A, 0x0C, 0x0D, 0x03, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x0D, 0x8C, 0x03, 0x0B, 0x0E, -/* 00016EB0 */ 0x07, 0x02, 0x00, 0x5A, 0x00, 0x05, 0x5A, 0x01, 0x07, 0x1F, 0x02, 0x0E, 0x0E, 0x5A, 0x01, 0x0E, -/* 00016EC0 */ 0x8C, 0x03, 0x0B, 0x0E, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x05, 0x5A, 0x01, 0x08, 0x1F, 0x02, 0x0E, -/* 00016ED0 */ 0x0E, 0x5A, 0x02, 0x0E, 0x5A, 0x03, 0x0A, 0x5A, 0x04, 0x06, 0x1F, 0x05, 0x00, 0x0C, 0x09, 0x02, -/* 00016EE0 */ 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x8A, 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0x1A, 0x04, 0xFE, 0xEB, -/* 00016EF0 */ 0x01, 0xFE, 0x44, 0xB7, 0x07, 0x07, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x30, 0x00, 0x18, 0x00, 0x65, -/* 00016F00 */ 0x00, 0x18, 0x00, 0x41, 0x00, 0x0F, 0x00, 0x57, 0x00, 0x18, 0x00, 0x65, 0x00, 0x45, 0x00, 0x78, -/* 00016F10 */ 0x00, 0x00, 0x3F, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0xFE, 0x03, 0x3C, 0xA2, 0x41, -/* 00016F20 */ 0xC3, 0x00, 0xFE, 0x45, 0x03, 0x49, 0xFE, 0x5D, 0xB3, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x01, -/* 00016F30 */ 0xFE, 0x5D, 0xB3, 0xFE, 0x71, 0x03, 0xFE, 0x71, 0x03, 0x0B, 0x04, 0x0B, 0x05, 0x60, 0x59, 0x03, -/* 00016F40 */ 0x05, 0x0A, 0x09, 0x0A, 0x0A, 0x0A, 0x08, 0x06, 0xFE, 0x45, 0x03, 0xFE, 0x36, 0x01, 0x59, 0x0B, -/* 00016F50 */ 0xB1, 0x06, 0x0B, 0xBD, 0x07, 0x4F, 0x08, 0x4F, 0x09, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA6, 0x0B, -/* 00016F60 */ 0x47, 0x04, 0x0B, 0x15, 0x05, 0x00, 0x05, 0x02, 0xA6, 0x0B, 0x47, 0x05, 0x0B, 0x4F, 0x08, 0x4F, -/* 00016F70 */ 0x09, 0x68, 0x09, 0x00, 0x00, 0x00, 0x0B, 0x14, 0x0A, 0x00, 0x06, 0x0B, 0xA6, 0x0B, 0x14, 0x03, -/* 00016F80 */ 0x00, 0x06, 0x0B, 0x09, 0x10, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x01, 0x04, 0x5A, 0x02, 0x05, 0xC1, -/* 00016F90 */ 0x03, 0x00, 0x07, 0x09, 0xEC, 0x00, 0x8C, 0x03, 0x24, 0x0C, 0x6A, 0x0B, 0x0C, 0x00, 0x07, 0x02, -/* 00016FA0 */ 0x00, 0x5A, 0x00, 0x0C, 0x5A, 0x01, 0x06, 0x1F, 0x02, 0x0B, 0x0B, 0x47, 0x08, 0x0B, 0x8C, 0x03, -/* 00016FB0 */ 0x37, 0x0C, 0x4B, 0x0C, 0x6A, 0x0B, 0x0C, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5A, 0x01, -/* 00016FC0 */ 0x08, 0x1F, 0x02, 0x0B, 0x0B, 0x0F, 0x15, 0x00, 0x0B, 0x8C, 0x03, 0x03, 0x0C, 0x6A, 0x0B, 0x0C, -/* 00016FD0 */ 0x02, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5A, 0x01, 0x03, 0x1F, 0x02, 0xFF, 0x0B, 0x8C, 0x03, -/* 00016FE0 */ 0x03, 0x0C, 0x6A, 0x0B, 0x0C, 0x03, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0C, 0x5A, 0x01, 0x08, 0x1F, -/* 00016FF0 */ 0x02, 0x0B, 0x0B, 0x47, 0x09, 0x0B, 0xA6, 0x0B, 0x14, 0x03, 0x00, 0x09, 0x0B, 0x09, 0x2F, 0x00, -/* 00017000 */ 0x8C, 0x03, 0x37, 0x0C, 0x4B, 0x0C, 0x6A, 0x0B, 0x0C, 0x04, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x0C, -/* 00017010 */ 0x1F, 0x01, 0x0B, 0x0B, 0x47, 0x09, 0x0B, 0x8C, 0x03, 0x03, 0x0C, 0x6A, 0x0B, 0x0C, 0x05, 0x07, -/* 00017020 */ 0x03, 0x00, 0x5A, 0x00, 0x0C, 0x5A, 0x01, 0x08, 0x5A, 0x02, 0x09, 0x1F, 0x03, 0xFF, 0x0B, 0x8C, -/* 00017030 */ 0x01, 0x02, 0x0B, 0x4B, 0x0B, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x09, 0x5A, 0x02, -/* 00017040 */ 0x04, 0x5A, 0x03, 0x05, 0x1F, 0x04, 0xFF, 0x0B, 0x47, 0x0B, 0x09, 0x8C, 0x03, 0x37, 0x0D, 0x4B, -/* 00017050 */ 0x0D, 0x6A, 0x0C, 0x0D, 0x06, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0D, 0x8C, 0x01, 0x04, 0x0E, 0x4B, -/* 00017060 */ 0x0E, 0x5A, 0x01, 0x0E, 0x5A, 0x02, 0x08, 0x1F, 0x03, 0x0C, 0x0C, 0x74, 0x0C, 0x0B, 0x07, 0x5F, -/* 00017070 */ 0x0B, 0x09, 0x08, 0x80, 0x0B, 0x0B, 0xF8, 0x00, 0xFA, 0x0B, 0x47, 0x00, 0x08, 0x09, 0x02, 0x00, -/* 00017080 */ 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x36, 0x03, 0xB0, 0xFE, 0x8E, 0x02, 0xFE, 0xEF, 0x01, 0x61, 0xFE, -/* 00017090 */ 0xF0, 0x01, 0x4D, 0xFE, 0x1B, 0x04, 0xFE, 0x1B, 0x04, 0xAB, 0xFE, 0x6F, 0xB3, 0x10, 0x0B, 0x00, -/* 000170A0 */ 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0E, 0x00, 0x23, 0x00, 0x15, 0x00, 0x3B, 0x00, 0x10, 0x00, -/* 000170B0 */ 0x42, 0x00, 0x18, 0x00, 0x2F, 0x00, 0x1B, 0x00, 0x2C, 0x00, 0x15, 0x00, 0x7F, 0x00, 0x18, 0x00, -/* 000170C0 */ 0x3F, 0x00, 0x0A, 0x00, 0x32, 0x00, 0x17, 0x00, 0x2B, 0x00, 0x18, 0x00, 0x48, 0x00, 0x19, 0x00, -/* 000170D0 */ 0x66, 0x00, 0x27, 0x00, 0x3E, 0x00, 0x0B, 0x00, 0x33, 0x00, 0x08, 0x00, 0x14, 0x00, 0x00, 0xBF, -/* 000170E0 */ 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0xDC, 0x03, 0x5D, 0xA2, 0x41, 0xD1, 0x00, 0x48, -/* 000170F0 */ 0xFE, 0xD2, 0xAC, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x02, 0xFE, 0xD2, 0xAC, 0xFE, 0x87, 0x04, -/* 00017100 */ 0xFE, 0x87, 0x04, 0x01, 0x0A, 0x06, 0x0E, 0x06, 0x64, 0x5D, 0x03, 0x05, 0x03, 0x03, 0x03, 0x03, -/* 00017110 */ 0x0D, 0x08, 0x07, 0x05, 0xFE, 0x08, 0x04, 0x0B, 0xFE, 0x38, 0x01, 0x59, 0x0E, 0xB1, 0x09, 0x0E, -/* 00017120 */ 0x4F, 0x0A, 0x4F, 0x0B, 0x4F, 0x0C, 0x15, 0x05, 0x00, 0x07, 0x02, 0xA6, 0x0E, 0x47, 0x07, 0x0E, -/* 00017130 */ 0x15, 0x05, 0x00, 0x08, 0x02, 0xA6, 0x0E, 0x47, 0x08, 0x0E, 0x4F, 0x0A, 0x4F, 0x0B, 0x4F, 0x0C, -/* 00017140 */ 0xA6, 0x0E, 0x14, 0x08, 0x00, 0x09, 0x0E, 0x14, 0x03, 0x00, 0x09, 0x03, 0x09, 0x15, 0x00, 0x8C, -/* 00017150 */ 0x03, 0x03, 0x0F, 0x6A, 0x0E, 0x0F, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0F, 0x5A, 0x01, 0x04, -/* 00017160 */ 0x1F, 0x02, 0xFF, 0x0E, 0x8C, 0x03, 0x0B, 0x0E, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, -/* 00017170 */ 0x09, 0x1F, 0x02, 0x0E, 0x0E, 0x47, 0x0A, 0x0E, 0x8C, 0x03, 0x0B, 0x0E, 0x07, 0x02, 0x00, 0x5A, -/* 00017180 */ 0x00, 0x02, 0x5A, 0x01, 0x06, 0x1F, 0x02, 0x0E, 0x0E, 0x47, 0x0B, 0x0E, 0xA6, 0x0E, 0x47, 0x0C, -/* 00017190 */ 0x0E, 0xA6, 0x0E, 0x14, 0x03, 0x00, 0x07, 0x0E, 0x09, 0x63, 0x00, 0xA6, 0x0E, 0x14, 0x03, 0x00, -/* 000171A0 */ 0x08, 0x0E, 0x09, 0x59, 0x00, 0x8C, 0x01, 0x03, 0x0E, 0x4B, 0x0E, 0xA6, 0x0F, 0x14, 0x03, 0x00, -/* 000171B0 */ 0x0E, 0x0F, 0x09, 0x3D, 0x00, 0x8C, 0x03, 0x37, 0x0F, 0x4B, 0x0F, 0x6A, 0x0E, 0x0F, 0x01, 0x07, -/* 000171C0 */ 0x01, 0x00, 0x5A, 0x00, 0x0F, 0x1F, 0x01, 0x0E, 0x0E, 0x01, 0x34, 0x01, 0x01, 0x03, 0x0E, 0x8C, -/* 000171D0 */ 0x01, 0x02, 0x0E, 0x4B, 0x0E, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8C, 0x01, 0x03, 0x0F, 0x4B, -/* 000171E0 */ 0x0F, 0x5A, 0x01, 0x0F, 0xA6, 0x0F, 0x5A, 0x02, 0x0F, 0xA6, 0x0F, 0x5A, 0x03, 0x0F, 0x1F, 0x04, -/* 000171F0 */ 0xFF, 0x0E, 0x8C, 0x01, 0x03, 0x0E, 0x4B, 0x0E, 0x47, 0x0C, 0x0E, 0x09, 0x30, 0x00, 0x8C, 0x03, -/* 00017200 */ 0x37, 0x0F, 0x4B, 0x0F, 0x6A, 0x0E, 0x0F, 0x01, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x0F, 0x1F, 0x01, -/* 00017210 */ 0x0E, 0x0E, 0x47, 0x0C, 0x0E, 0x8C, 0x01, 0x02, 0x0E, 0x4B, 0x0E, 0x07, 0x04, 0x00, 0x5A, 0x00, -/* 00017220 */ 0x02, 0x5A, 0x01, 0x0C, 0x5A, 0x02, 0x07, 0x5A, 0x03, 0x08, 0x1F, 0x04, 0xFF, 0x0E, 0x8C, 0x03, -/* 00017230 */ 0x03, 0x0F, 0x6A, 0x0E, 0x0F, 0x02, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x0F, 0x5A, 0x01, 0x0A, 0x5A, -/* 00017240 */ 0x02, 0x0B, 0x5A, 0x03, 0x0C, 0x5A, 0x04, 0x05, 0x1F, 0x05, 0x00, 0x0E, 0x09, 0x02, 0x00, 0xA6, -/* 00017250 */ 0x00, 0x24, 0x00, 0xFE, 0x91, 0x02, 0x61, 0xFE, 0xEB, 0x01, 0xFE, 0xE2, 0xAC, 0x10, 0x0B, 0x00, -/* 00017260 */ 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x10, 0x00, 0x23, 0x00, 0x0F, 0x00, 0x3B, 0x00, 0x15, 0x00, -/* 00017270 */ 0x61, 0x00, 0x14, 0x00, 0x2A, 0x00, 0x14, 0x00, 0xFE, 0x00, 0x05, 0x00, 0x1D, 0x00, 0x14, 0x00, -/* 00017280 */ 0x46, 0x00, 0x10, 0x00, 0x41, 0x00, 0x1A, 0x00, 0x3A, 0x00, 0x23, 0x00, 0x66, 0x00, 0x0C, 0x00, -/* 00017290 */ 0x4C, 0x00, 0x17, 0x00, 0x2A, 0x00, 0x19, 0x00, 0x4E, 0x00, 0x23, 0x00, 0x72, 0x00, 0x00, 0xBF, -/* 000172A0 */ 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0xBB, 0x03, 0x23, 0xA2, 0x41, 0xC1, 0x00, 0xFE, -/* 000172B0 */ 0x05, 0x04, 0x47, 0xFE, 0x64, 0xA5, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, 0x64, 0xA5, -/* 000172C0 */ 0xFE, 0x9B, 0x06, 0xFE, 0x9B, 0x06, 0x01, 0x0B, 0x1E, 0x26, 0x07, 0xC9, 0xB6, 0x03, 0x09, 0x18, -/* 000172D0 */ 0x18, 0x18, 0x18, 0x25, 0x08, 0x06, 0xFE, 0x10, 0x04, 0x06, 0xFE, 0xAD, 0x03, 0x06, 0xFE, 0x11, -/* 000172E0 */ 0x04, 0x06, 0xFE, 0x12, 0x04, 0x06, 0xFE, 0x00, 0x04, 0x05, 0xFE, 0xBC, 0x03, 0x05, 0xFE, 0xFF, -/* 000172F0 */ 0x03, 0x06, 0xFE, 0x13, 0x04, 0x06, 0xFE, 0xC2, 0x03, 0x06, 0xFE, 0x14, 0x04, 0x06, 0xFE, 0x2D, -/* 00017300 */ 0x03, 0x06, 0xFE, 0x2E, 0x03, 0x06, 0xFE, 0x2F, 0x03, 0x06, 0xFE, 0xB0, 0x03, 0x06, 0xFE, 0xB2, -/* 00017310 */ 0x03, 0x06, 0xFE, 0xB1, 0x03, 0x07, 0x06, 0xFE, 0x15, 0x04, 0x06, 0xFE, 0xC1, 0x03, 0x06, 0xFE, -/* 00017320 */ 0x16, 0x04, 0x06, 0xFE, 0x28, 0x03, 0x06, 0xFE, 0x29, 0x03, 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, -/* 00017330 */ 0x2B, 0x03, 0x06, 0xFE, 0x17, 0x04, 0x0C, 0x0B, 0xFE, 0x8B, 0x02, 0x4F, 0x21, 0x4F, 0x22, 0x4F, -/* 00017340 */ 0x23, 0x4F, 0x24, 0x8C, 0x02, 0x11, 0x26, 0x4B, 0x26, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5A, -/* 00017350 */ 0x01, 0x1F, 0x1F, 0x02, 0x26, 0x26, 0x47, 0x21, 0x26, 0xA6, 0x26, 0x14, 0x03, 0x00, 0x20, 0x26, -/* 00017360 */ 0x09, 0x1A, 0x00, 0x8C, 0x03, 0x37, 0x28, 0x4B, 0x28, 0x6A, 0x27, 0x28, 0x00, 0x07, 0x01, 0x00, -/* 00017370 */ 0x5A, 0x00, 0x28, 0x1F, 0x01, 0x27, 0x27, 0x47, 0x26, 0x27, 0x09, 0x18, 0x00, 0x8C, 0x03, 0x24, -/* 00017380 */ 0x28, 0x6A, 0x27, 0x28, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x28, 0x5A, 0x01, 0x20, 0x1F, 0x02, -/* 00017390 */ 0x27, 0x27, 0x47, 0x26, 0x27, 0x47, 0x20, 0x26, 0x47, 0x26, 0x1E, 0x8C, 0x02, 0x02, 0x27, 0x4B, -/* 000173A0 */ 0x27, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x20, 0x5A, 0x02, 0x03, 0x5A, 0x03, 0x04, -/* 000173B0 */ 0xCC, 0x28, 0x02, 0x9F, 0x00, 0x05, 0x28, 0x9F, 0x01, 0x06, 0x28, 0x5A, 0x04, 0x28, 0x5A, 0x05, -/* 000173C0 */ 0x05, 0x1F, 0x06, 0x27, 0x27, 0x74, 0x27, 0x26, 0x02, 0x8C, 0x03, 0x37, 0x27, 0x4B, 0x27, 0x6A, -/* 000173D0 */ 0x26, 0x27, 0x03, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x27, 0x1F, 0x01, 0x26, 0x26, 0x47, 0x22, 0x26, -/* 000173E0 */ 0x47, 0x26, 0x22, 0x8C, 0x02, 0x02, 0x27, 0x4B, 0x27, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x02, 0x5A, -/* 000173F0 */ 0x01, 0x20, 0x5A, 0x02, 0x07, 0x5A, 0x03, 0x04, 0xCC, 0x28, 0x02, 0x9F, 0x00, 0x08, 0x28, 0x9F, -/* 00017400 */ 0x01, 0x09, 0x28, 0x5A, 0x04, 0x28, 0x5A, 0x05, 0x09, 0x1F, 0x06, 0x27, 0x27, 0x74, 0x27, 0x26, -/* 00017410 */ 0x04, 0x8C, 0x02, 0x02, 0x26, 0x4B, 0x26, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x20, -/* 00017420 */ 0x5A, 0x02, 0x0A, 0x5A, 0x03, 0x0B, 0xA6, 0x27, 0x5A, 0x04, 0x27, 0xA6, 0x27, 0x5A, 0x05, 0x27, -/* 00017430 */ 0x1F, 0x06, 0x26, 0x26, 0x47, 0x23, 0x26, 0xA6, 0x26, 0x14, 0x03, 0x00, 0x23, 0x26, 0x09, 0x06, -/* 00017440 */ 0x00, 0x47, 0x26, 0x23, 0x09, 0x18, 0x00, 0x8C, 0x03, 0x24, 0x28, 0x6A, 0x27, 0x28, 0x05, 0x07, -/* 00017450 */ 0x02, 0x00, 0x5A, 0x00, 0x28, 0x5A, 0x01, 0x23, 0x1F, 0x02, 0x27, 0x27, 0x47, 0x26, 0x27, 0x74, -/* 00017460 */ 0x26, 0x22, 0x06, 0x47, 0x26, 0x22, 0x8C, 0x02, 0x02, 0x27, 0x4B, 0x27, 0x07, 0x06, 0x00, 0x5A, -/* 00017470 */ 0x00, 0x02, 0x5A, 0x01, 0x20, 0x5A, 0x02, 0x0C, 0x5A, 0x03, 0x04, 0xCC, 0x28, 0x03, 0x9F, 0x00, -/* 00017480 */ 0x0D, 0x28, 0x9F, 0x01, 0x0E, 0x28, 0x9F, 0x02, 0x0F, 0x28, 0x5A, 0x04, 0x28, 0xA6, 0x28, 0x5A, -/* 00017490 */ 0x05, 0x28, 0x1F, 0x06, 0x27, 0x27, 0x74, 0x27, 0x26, 0x07, 0x8C, 0x02, 0x0B, 0x26, 0x4B, 0x26, -/* 000174A0 */ 0x07, 0x05, 0x00, 0x5A, 0x00, 0x02, 0x8C, 0x03, 0x03, 0x27, 0x5F, 0x27, 0x27, 0x08, 0x5A, 0x01, -/* 000174B0 */ 0x27, 0x5A, 0x02, 0x21, 0x5A, 0x03, 0x22, 0xCC, 0x27, 0x03, 0x9F, 0x00, 0x10, 0x27, 0x9F, 0x01, -/* 000174C0 */ 0x11, 0x27, 0x9F, 0x02, 0x12, 0x27, 0x5A, 0x04, 0x27, 0x1F, 0x05, 0x26, 0x26, 0x47, 0x24, 0x26, -/* 000174D0 */ 0x5F, 0x26, 0x24, 0x09, 0x74, 0x26, 0x1E, 0x0A, 0x5F, 0x26, 0x24, 0x0B, 0x14, 0x03, 0x00, 0x26, -/* 000174E0 */ 0x13, 0x09, 0x06, 0x00, 0x47, 0x26, 0x14, 0x09, 0x07, 0x00, 0x5F, 0x27, 0x24, 0x0B, 0x47, 0x26, -/* 000174F0 */ 0x27, 0x74, 0x26, 0x1E, 0x0C, 0x5F, 0x26, 0x24, 0x0D, 0x43, 0x26, 0x26, 0x15, 0x74, 0x26, 0x1E, -/* 00017500 */ 0x0E, 0x5F, 0x26, 0x24, 0x0F, 0x74, 0x26, 0x1E, 0x10, 0x47, 0x26, 0x1E, 0x8C, 0x03, 0x3D, 0x27, -/* 00017510 */ 0x4B, 0x27, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x8C, 0x03, 0x3A, 0x28, 0x4B, 0x28, 0x5A, 0x01, -/* 00017520 */ 0x28, 0x5F, 0x28, 0x1E, 0x11, 0x5A, 0x02, 0x28, 0x1F, 0x03, 0x27, 0x27, 0x74, 0x27, 0x26, 0x12, -/* 00017530 */ 0x47, 0x26, 0x1E, 0x8C, 0x02, 0x02, 0x27, 0x4B, 0x27, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x02, 0x5A, -/* 00017540 */ 0x01, 0x20, 0x5A, 0x02, 0x16, 0x5A, 0x03, 0x04, 0xCC, 0x28, 0x04, 0x9F, 0x00, 0x17, 0x28, 0x9F, -/* 00017550 */ 0x01, 0x18, 0x28, 0x9F, 0x02, 0x19, 0x28, 0x9F, 0x03, 0x1A, 0x28, 0x5A, 0x04, 0x28, 0x5A, 0x05, -/* 00017560 */ 0x1A, 0x1F, 0x06, 0x27, 0x27, 0x74, 0x27, 0x26, 0x13, 0x47, 0x26, 0x1E, 0x8C, 0x03, 0x3D, 0x27, -/* 00017570 */ 0x4B, 0x27, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x8C, 0x03, 0x39, 0x28, 0x4B, 0x28, 0x5A, 0x01, -/* 00017580 */ 0x28, 0x5F, 0x28, 0x1E, 0x14, 0x5A, 0x02, 0x28, 0x1F, 0x03, 0x27, 0x27, 0x74, 0x27, 0x26, 0x15, -/* 00017590 */ 0x47, 0x26, 0x1E, 0x8C, 0x02, 0x02, 0x27, 0x4B, 0x27, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x02, 0x5A, -/* 000175A0 */ 0x01, 0x20, 0x5A, 0x02, 0x1B, 0x5A, 0x03, 0x0B, 0xA6, 0x28, 0x5A, 0x04, 0x28, 0x5A, 0x05, 0x1C, -/* 000175B0 */ 0x1F, 0x06, 0x27, 0x27, 0x74, 0x27, 0x26, 0x16, 0x74, 0x1D, 0x1E, 0x17, 0x47, 0x00, 0x1E, 0x09, -/* 000175C0 */ 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x61, 0xFE, 0x36, 0x03, 0xFE, 0x10, 0x04, 0x61, 0xFE, 0x18, -/* 000175D0 */ 0x04, 0xFE, 0x37, 0x03, 0xFE, 0xB2, 0x03, 0xFE, 0xB1, 0x03, 0xFE, 0xDA, 0x01, 0xFE, 0xF7, 0x01, -/* 000175E0 */ 0xFE, 0xF7, 0x01, 0xFE, 0xB0, 0x03, 0xFE, 0x19, 0x04, 0xFE, 0xB2, 0x03, 0xFE, 0x20, 0x02, 0xFE, -/* 000175F0 */ 0xB1, 0x03, 0xFE, 0x14, 0x04, 0xFE, 0x14, 0x04, 0xFE, 0x23, 0x02, 0xFE, 0x21, 0x02, 0xFE, 0x21, -/* 00017600 */ 0x02, 0xFE, 0x22, 0x02, 0xFE, 0x1F, 0x02, 0xFE, 0x1A, 0x04, 0xFE, 0x98, 0xA5, 0x14, 0x08, 0x00, -/* 00017610 */ 0x00, 0x00, 0x16, 0x00, 0x46, 0x00, 0x3F, 0x00, 0x58, 0x00, 0x31, 0x00, 0x12, 0x01, 0x17, 0x00, -/* 00017620 */ 0x24, 0x00, 0x31, 0x00, 0x6D, 0x00, 0x26, 0x00, 0x55, 0x00, 0x2C, 0x00, 0x44, 0x00, 0x37, 0x00, -/* 00017630 */ 0x69, 0x00, 0x36, 0x00, 0x74, 0x00, 0x08, 0x00, 0x28, 0x00, 0x1D, 0x00, 0x43, 0x00, 0x0C, 0x00, -/* 00017640 */ 0x30, 0x00, 0x08, 0x00, 0x27, 0x00, 0x27, 0x00, 0x55, 0x00, 0x39, 0x00, 0x82, 0x00, 0x27, 0x00, -/* 00017650 */ 0x5B, 0x00, 0x28, 0x00, 0x70, 0x00, 0x04, 0x00, 0x32, 0x00, 0x08, 0x00, 0x19, 0x00, 0x00, 0x3F, -/* 00017660 */ 0x5D, 0x00, 0xC1, 0x03, 0x8D, 0x05, 0x00, 0xFE, 0xA5, 0x03, 0x22, 0xA2, 0x41, 0xC1, 0x00, 0xFE, -/* 00017670 */ 0x7B, 0x03, 0x44, 0xFE, 0x58, 0xA2, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x03, 0xFE, 0x58, -/* 00017680 */ 0xA2, 0xFE, 0x32, 0x02, 0xFE, 0x32, 0x02, 0x03, 0xFE, 0x02, 0x04, 0xFE, 0x03, 0x04, 0xFE, 0x04, -/* 00017690 */ 0x04, 0x09, 0x04, 0x0A, 0x04, 0x26, 0x26, 0x02, 0x03, 0x04, 0x04, 0x04, 0x04, 0x07, 0x08, 0x09, -/* 000176A0 */ 0x07, 0x08, 0x78, 0x94, 0x02, 0x05, 0x94, 0x03, 0x06, 0x94, 0x02, 0x05, 0x15, 0x05, 0x00, 0x06, -/* 000176B0 */ 0x03, 0x01, 0x36, 0x01, 0x03, 0x02, 0x4F, 0x0A, 0x94, 0x04, 0x0A, 0x8C, 0x02, 0x37, 0x0B, 0x4B, -/* 000176C0 */ 0x0B, 0x6A, 0x0A, 0x0B, 0x00, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x0B, 0x1F, 0x01, 0x0A, 0x0A, 0x94, -/* 000176D0 */ 0x04, 0x0A, 0x8C, 0x02, 0x37, 0x0B, 0x4B, 0x0B, 0x6A, 0x0A, 0x0B, 0x01, 0x07, 0x03, 0x00, 0x5A, -/* 000176E0 */ 0x00, 0x0B, 0x5A, 0x01, 0x04, 0xD3, 0x00, 0x0C, 0x5A, 0x02, 0x0C, 0x1F, 0x03, 0xFF, 0x0A, 0x8C, -/* 000176F0 */ 0x02, 0x37, 0x0B, 0x4B, 0x0B, 0x6A, 0x0A, 0x0B, 0x02, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x0B, 0x90, -/* 00017700 */ 0x04, 0x0C, 0x5A, 0x01, 0x0C, 0x8C, 0x02, 0x03, 0x0C, 0x5F, 0x0C, 0x0C, 0x03, 0x5A, 0x02, 0x0C, -/* 00017710 */ 0x1F, 0x03, 0x00, 0x0A, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x61, 0x86, 0xFE, 0x86, 0x01, -/* 00017720 */ 0xFE, 0x80, 0x02, 0xFE, 0x77, 0xA2, 0x05, 0x09, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x17, 0x00, 0x17, -/* 00017730 */ 0x00, 0x25, 0x00, 0x1D, 0x00, 0x94, 0x01, 0x2A, 0x00, 0x42, 0x00, 0x00, 0x40, 0x77, 0x01, 0x00, -/* 00017740 */ 0xBF, 0x5C, 0x00, 0x01, 0x00, 0x88, 0x01, 0x00, 0xFE, 0xA7, 0x03, 0x19, 0xA2, 0x41, 0xD1, 0x00, -/* 00017750 */ 0x45, 0xFE, 0xC4, 0xA2, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0xC4, 0xA2, 0xFE, 0x77, -/* 00017760 */ 0x01, 0xFE, 0x77, 0x01, 0x41, 0x04, 0x06, 0x08, 0x04, 0x1F, 0x1F, 0x03, 0x03, 0x07, 0x07, 0x08, -/* 00017770 */ 0x0B, 0x06, 0xFE, 0xF5, 0x03, 0x61, 0x8C, 0x01, 0x03, 0x08, 0x4B, 0x08, 0x15, 0x03, 0x00, 0x08, -/* 00017780 */ 0x02, 0x09, 0x29, 0x00, 0x8C, 0x01, 0x03, 0x08, 0x4B, 0x08, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x03, -/* 00017790 */ 0x5A, 0x01, 0x06, 0x8C, 0x01, 0x04, 0x09, 0x4B, 0x09, 0x5A, 0x02, 0x09, 0x1F, 0x03, 0x08, 0x08, -/* 000177A0 */ 0x14, 0x03, 0x00, 0x08, 0x04, 0x09, 0x05, 0x00, 0xA6, 0x00, 0x09, 0x28, 0x00, 0x8C, 0x01, 0x02, -/* 000177B0 */ 0x08, 0x4B, 0x08, 0x2D, 0x08, 0x08, 0x06, 0x15, 0x03, 0x00, 0x08, 0x05, 0x09, 0x14, 0x00, 0x8C, -/* 000177C0 */ 0x01, 0x04, 0x08, 0x4B, 0x08, 0x8C, 0x01, 0x02, 0x09, 0x4B, 0x09, 0x95, 0x09, 0x09, 0x06, 0x9A, -/* 000177D0 */ 0x09, 0x08, 0x06, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xE2, 0xA2, 0x05, 0x00, 0x00, 0x00, 0x00, 0x32, -/* 000177E0 */ 0x00, 0xB9, 0x00, 0x05, 0x00, 0x23, 0x00, 0x12, 0x00, 0x41, 0x00, 0x16, 0x00, 0x3B, 0x00, 0x00, -/* 000177F0 */ 0xBF, 0x5C, 0x00, 0x01, 0x00, 0x88, 0x01, 0x00, 0xFE, 0x8B, 0x03, 0x55, 0xA2, 0x41, 0xD1, 0x00, -/* 00017800 */ 0x43, 0xFE, 0x62, 0x9D, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x62, 0x9D, 0x7F, 0x7F, -/* 00017810 */ 0x01, 0x05, 0x03, 0x06, 0x05, 0x10, 0x10, 0x03, 0x02, 0x05, 0x08, 0x2B, 0x59, 0x06, 0xB1, 0x04, -/* 00017820 */ 0x06, 0x8C, 0x02, 0x18, 0x06, 0x4B, 0x06, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x04, -/* 00017830 */ 0x8C, 0x01, 0x02, 0x07, 0x4B, 0x07, 0x5A, 0x02, 0x07, 0x5A, 0x03, 0x03, 0x1F, 0x04, 0x00, 0x06, -/* 00017840 */ 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x83, 0x9D, 0x02, 0x05, 0x00, 0x00, 0x00, 0x24, -/* 00017850 */ 0x00, 0x5D, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x73, 0x03, 0x30, -/* 00017860 */ 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x7A, 0x03, 0x42, 0xFE, 0x9D, 0x97, 0xFF, 0x00, 0x10, 0x01, 0x00, -/* 00017870 */ 0x04, 0x04, 0xFE, 0x9D, 0x97, 0xFE, 0x8E, 0x01, 0xFE, 0x8E, 0x01, 0x01, 0x07, 0x05, 0x0A, 0x03, -/* 00017880 */ 0x26, 0x25, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x09, 0x07, 0x05, 0xFE, 0x3C, 0x03, 0x08, 0x7D, -/* 00017890 */ 0x4F, 0x08, 0x14, 0x0A, 0x00, 0x05, 0x02, 0xA6, 0x0A, 0x14, 0x03, 0x00, 0x05, 0x0A, 0x09, 0x15, -/* 000178A0 */ 0x00, 0x8C, 0x02, 0x03, 0x0B, 0x6A, 0x0A, 0x0B, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0B, 0x5A, -/* 000178B0 */ 0x01, 0x06, 0x1F, 0x02, 0xFF, 0x0A, 0x8C, 0x02, 0x03, 0x0B, 0x6A, 0x0A, 0x0B, 0x01, 0x07, 0x02, -/* 000178C0 */ 0x00, 0x5A, 0x00, 0x0B, 0x5A, 0x01, 0x05, 0x1F, 0x02, 0x0A, 0x0A, 0x47, 0x08, 0x0A, 0x0E, 0x0C, -/* 000178D0 */ 0x00, 0x08, 0x5F, 0x0A, 0x08, 0x02, 0x15, 0x03, 0x00, 0x0A, 0x03, 0x09, 0x15, 0x00, 0x8C, 0x02, -/* 000178E0 */ 0x03, 0x0B, 0x6A, 0x0A, 0x0B, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0B, 0x5A, 0x01, 0x06, 0x1F, -/* 000178F0 */ 0x02, 0xFF, 0x0A, 0x8C, 0x01, 0x11, 0x0A, 0x4B, 0x0A, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, 0x5A, -/* 00017900 */ 0x01, 0x07, 0x1F, 0x02, 0x00, 0x0A, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x8C, 0x02, -/* 00017910 */ 0xFE, 0xEF, 0x01, 0xFE, 0xF6, 0x01, 0xFE, 0xCE, 0x97, 0x07, 0x02, 0x00, 0x00, 0x00, 0x0F, 0x00, -/* 00017920 */ 0x37, 0x00, 0x15, 0x00, 0x40, 0x00, 0x18, 0x00, 0x3A, 0x00, 0x10, 0x00, 0x3F, 0x00, 0x15, 0x00, -/* 00017930 */ 0x40, 0x00, 0x18, 0x00, 0x2C, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, -/* 00017940 */ 0x66, 0x03, 0x2F, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x79, 0x03, 0x41, 0xFE, 0x81, 0x95, 0xFF, 0x00, -/* 00017950 */ 0x10, 0x01, 0x00, 0x06, 0x06, 0xFE, 0x81, 0x95, 0xFE, 0xEA, 0x01, 0xFE, 0xEA, 0x01, 0x01, 0x09, -/* 00017960 */ 0x05, 0x0C, 0x08, 0x2E, 0x2D, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x0B, 0x07, 0x05, 0xFE, 0x3C, -/* 00017970 */ 0x03, 0x08, 0x96, 0x4F, 0x0A, 0x14, 0x0A, 0x00, 0x05, 0x02, 0xA6, 0x0C, 0x14, 0x03, 0x00, 0x05, -/* 00017980 */ 0x0C, 0x09, 0x15, 0x00, 0x8C, 0x02, 0x03, 0x0D, 0x6A, 0x0C, 0x0D, 0x00, 0x07, 0x02, 0x00, 0x5A, -/* 00017990 */ 0x00, 0x0D, 0x5A, 0x01, 0x06, 0x1F, 0x02, 0xFF, 0x0C, 0x8C, 0x02, 0x03, 0x0D, 0x6A, 0x0C, 0x0D, -/* 000179A0 */ 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0D, 0x5A, 0x01, 0x05, 0x1F, 0x02, 0x0C, 0x0C, 0x47, 0x0A, -/* 000179B0 */ 0x0C, 0x0E, 0x0C, 0x00, 0x0A, 0x5F, 0x0C, 0x0A, 0x02, 0x15, 0x03, 0x00, 0x0C, 0x03, 0x09, 0x15, -/* 000179C0 */ 0x00, 0x8C, 0x02, 0x03, 0x0D, 0x6A, 0x0C, 0x0D, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0D, 0x5A, -/* 000179D0 */ 0x01, 0x06, 0x1F, 0x02, 0xFF, 0x0C, 0x8C, 0x01, 0x15, 0x0C, 0x4B, 0x0C, 0x07, 0x04, 0x00, 0x5A, -/* 000179E0 */ 0x00, 0x04, 0x5A, 0x01, 0x07, 0x8C, 0x01, 0x11, 0x0D, 0x4B, 0x0D, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 000179F0 */ 0x04, 0x5A, 0x01, 0x08, 0x1F, 0x02, 0x0D, 0x0D, 0x5A, 0x02, 0x0D, 0x5A, 0x03, 0x09, 0x1F, 0x04, -/* 00017A00 */ 0x00, 0x0C, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x8C, 0x02, 0xFE, 0xEF, 0x01, 0xFE, -/* 00017A10 */ 0xF6, 0x01, 0xFE, 0xD7, 0x95, 0x07, 0x02, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x37, 0x00, 0x15, 0x00, -/* 00017A20 */ 0x40, 0x00, 0x18, 0x00, 0x3A, 0x00, 0x10, 0x00, 0x3F, 0x00, 0x15, 0x00, 0x40, 0x00, 0x31, 0x00, -/* 00017A30 */ 0x63, 0x00, 0x00, 0xBF, 0x7C, 0x00, 0xC3, 0x53, 0xA8, 0x29, 0x00, 0xFE, 0x4B, 0x03, 0x1D, 0xA2, -/* 00017A40 */ 0x41, 0xC1, 0x00, 0xFE, 0x77, 0x03, 0x40, 0xFE, 0x0A, 0x90, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, -/* 00017A50 */ 0x04, 0xFE, 0x0A, 0x90, 0xFE, 0xE8, 0x03, 0xFE, 0xE8, 0x03, 0x01, 0x0C, 0x0F, 0x16, 0x0A, 0x5C, -/* 00017A60 */ 0x54, 0x18, 0x02, 0x05, 0x01, 0x07, 0x07, 0x07, 0x07, 0x02, 0x01, 0x15, 0x16, 0x9E, 0xF9, 0x05, -/* 00017A70 */ 0xFE, 0xFF, 0x03, 0x06, 0xFE, 0x00, 0x04, 0x06, 0xFE, 0xAD, 0x03, 0x05, 0xFE, 0xBC, 0x03, 0x08, -/* 00017A80 */ 0x01, 0x00, 0x01, 0x01, 0x06, 0xFE, 0x44, 0x03, 0x0C, 0x06, 0xFE, 0x42, 0x03, 0x07, 0x06, 0xFE, -/* 00017A90 */ 0x01, 0x04, 0x06, 0xFE, 0x43, 0x03, 0xFE, 0x39, 0x01, 0x4F, 0x12, 0x4F, 0x13, 0x4F, 0x14, 0xA6, -/* 00017AA0 */ 0x17, 0x14, 0x03, 0x00, 0x11, 0x17, 0x09, 0x06, 0x00, 0x47, 0x17, 0x02, 0x09, 0x42, 0x00, 0x8C, -/* 00017AB0 */ 0x01, 0x02, 0x18, 0x4B, 0x18, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x06, 0x8C, 0x02, 0x24, 0x1A, 0x6A, -/* 00017AC0 */ 0x19, 0x1A, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x1A, 0x5A, 0x01, 0x11, 0x1F, 0x02, 0x19, 0x19, -/* 00017AD0 */ 0x5A, 0x01, 0x19, 0x5A, 0x02, 0x03, 0x5A, 0x03, 0x04, 0xCC, 0x19, 0x02, 0x9F, 0x00, 0x02, 0x19, -/* 00017AE0 */ 0x9F, 0x01, 0x05, 0x19, 0x5A, 0x04, 0x19, 0x5A, 0x05, 0x02, 0x1F, 0x06, 0x18, 0x18, 0x47, 0x17, -/* 00017AF0 */ 0x18, 0x47, 0x12, 0x17, 0x14, 0x03, 0x00, 0x12, 0x02, 0x09, 0x1C, 0x00, 0x8C, 0x01, 0x13, 0x18, -/* 00017B00 */ 0x4B, 0x18, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x06, 0x5A, 0x01, 0x0F, 0x5A, 0x02, 0x10, 0x1F, 0x03, -/* 00017B10 */ 0x18, 0x18, 0x47, 0x17, 0x18, 0x09, 0x19, 0x00, 0x8C, 0x01, 0x12, 0x18, 0x4B, 0x18, 0x07, 0x03, -/* 00017B20 */ 0x00, 0x5A, 0x00, 0x06, 0x5A, 0x01, 0x0F, 0x5A, 0x02, 0x10, 0x1F, 0x03, 0x18, 0x18, 0x47, 0x17, -/* 00017B30 */ 0x18, 0x47, 0x13, 0x17, 0x47, 0x14, 0x07, 0xEA, 0x00, 0xA4, 0x17, 0x13, 0x01, 0x12, 0x03, 0x00, -/* 00017B40 */ 0x14, 0x17, 0x09, 0x4D, 0x00, 0x8C, 0x02, 0x37, 0x18, 0x4B, 0x18, 0x6A, 0x17, 0x18, 0x02, 0x07, -/* 00017B50 */ 0x04, 0x00, 0x5A, 0x00, 0x18, 0x5A, 0x01, 0x13, 0x8C, 0x02, 0x24, 0x1A, 0x6A, 0x19, 0x1A, 0x03, -/* 00017B60 */ 0x07, 0x02, 0x00, 0x5A, 0x00, 0x1A, 0x5A, 0x01, 0x14, 0x1F, 0x02, 0x19, 0x19, 0x5A, 0x02, 0x19, -/* 00017B70 */ 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x78, 0x0A, 0x19, -/* 00017B80 */ 0x04, 0x78, 0x0A, 0x19, 0x05, 0x5A, 0x03, 0x19, 0x1F, 0x04, 0xFF, 0x17, 0x28, 0x14, 0x14, 0x09, -/* 00017B90 */ 0xA5, 0xFF, 0x8C, 0x02, 0x37, 0x18, 0x4B, 0x18, 0x6A, 0x17, 0x18, 0x02, 0x07, 0x04, 0x00, 0x5A, -/* 00017BA0 */ 0x00, 0x18, 0x5A, 0x01, 0x13, 0x5A, 0x02, 0x0D, 0xCB, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, -/* 00017BB0 */ 0x00, 0x19, 0x00, 0x00, 0x00, 0x78, 0x0A, 0x19, 0x05, 0x78, 0x0A, 0x19, 0x04, 0x78, 0x0A, 0x19, -/* 00017BC0 */ 0x06, 0x5A, 0x03, 0x19, 0x1F, 0x04, 0xFF, 0x17, 0x47, 0x00, 0x13, 0x09, 0x02, 0x00, 0xA6, 0x00, -/* 00017BD0 */ 0x24, 0x00, 0x02, 0x24, 0x00, 0x10, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 00017BE0 */ 0x00, 0x82, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 00017BF0 */ 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, -/* 00017C00 */ 0x00, 0xFE, 0x36, 0x03, 0xC1, 0xFE, 0x88, 0x01, 0xFE, 0x37, 0x03, 0xFE, 0x81, 0x01, 0xFE, 0x82, -/* 00017C10 */ 0x01, 0xFE, 0x80, 0x01, 0xFE, 0x4C, 0x90, 0x09, 0x06, 0x00, 0x00, 0x00, 0x55, 0x00, 0xBB, 0x00, -/* 00017C20 */ 0x40, 0x00, 0xD4, 0x00, 0x05, 0x00, 0x0B, 0x00, 0x0C, 0x00, 0x30, 0x00, 0x47, 0x00, 0xED, 0xFF, -/* 00017C30 */ 0x06, 0x00, 0x30, 0x01, 0x36, 0x00, 0xA1, 0x00, 0x08, 0x00, 0x1D, 0x00, 0x00, 0xBF, 0x5C, 0x00, -/* 00017C40 */ 0xC1, 0x13, 0x88, 0x21, 0x00, 0xFE, 0x2C, 0x03, 0x28, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x76, 0x03, -/* 00017C50 */ 0x3F, 0xFE, 0xA1, 0x89, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x05, 0x05, 0xFE, 0xA1, 0x89, 0xFE, 0xB9, -/* 00017C60 */ 0x04, 0xFE, 0xB9, 0x04, 0x41, 0x0D, 0x0D, 0x18, 0x07, 0x5B, 0x53, 0x02, 0x02, 0x0A, 0x0A, 0x0A, -/* 00017C70 */ 0x0A, 0x02, 0x17, 0x06, 0xFE, 0xFA, 0x03, 0x01, 0x01, 0x01, 0x15, 0x08, 0x06, 0xFE, 0xFB, 0x03, -/* 00017C80 */ 0x01, 0x00, 0x01, 0x14, 0x06, 0xFE, 0xFC, 0x03, 0x06, 0xFE, 0xFD, 0x03, 0x07, 0x06, 0xFE, 0xFE, -/* 00017C90 */ 0x03, 0xFE, 0x2C, 0x01, 0x4F, 0x11, 0x4F, 0x12, 0x4F, 0x13, 0x4F, 0x14, 0x4F, 0x15, 0x4F, 0x16, -/* 00017CA0 */ 0x8C, 0x01, 0x0C, 0x18, 0x4B, 0x18, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x05, 0x5A, 0x01, 0x0E, 0x5A, -/* 00017CB0 */ 0x02, 0x02, 0x5A, 0x03, 0x03, 0x5A, 0x04, 0x04, 0x5A, 0x05, 0x03, 0x1F, 0x06, 0x18, 0x18, 0x47, -/* 00017CC0 */ 0x11, 0x18, 0x8C, 0x01, 0x0C, 0x18, 0x4B, 0x18, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x05, 0x5A, 0x01, -/* 00017CD0 */ 0x0E, 0x5A, 0x02, 0x06, 0x5A, 0x03, 0x07, 0x5A, 0x04, 0x08, 0x5A, 0x05, 0x0F, 0x1F, 0x06, 0x18, -/* 00017CE0 */ 0x18, 0x47, 0x12, 0x18, 0x8C, 0x02, 0x37, 0x19, 0x4B, 0x19, 0x6A, 0x18, 0x19, 0x00, 0x07, 0x03, -/* 00017CF0 */ 0x00, 0x5A, 0x00, 0x19, 0x5A, 0x01, 0x12, 0x5A, 0x02, 0x10, 0x1F, 0x03, 0x18, 0x18, 0x47, 0x13, -/* 00017D00 */ 0x18, 0x8C, 0x01, 0x0C, 0x18, 0x4B, 0x18, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x05, 0x5A, 0x01, 0x0E, -/* 00017D10 */ 0x5A, 0x02, 0x09, 0x5A, 0x03, 0x12, 0x5A, 0x04, 0x08, 0x5A, 0x05, 0x13, 0x1F, 0x06, 0x18, 0x18, -/* 00017D20 */ 0x47, 0x14, 0x18, 0x74, 0x11, 0x0D, 0x01, 0x74, 0x12, 0x0D, 0x02, 0x74, 0x14, 0x0D, 0x03, 0x5F, -/* 00017D30 */ 0x18, 0x0E, 0x04, 0x47, 0x15, 0x18, 0x5F, 0x18, 0x0E, 0x05, 0x47, 0x16, 0x18, 0xA6, 0x18, 0x15, -/* 00017D40 */ 0x0A, 0x00, 0x15, 0x18, 0xA6, 0x18, 0x15, 0x03, 0x00, 0x16, 0x18, 0x09, 0x6E, 0x00, 0x8C, 0x01, -/* 00017D50 */ 0x0C, 0x18, 0x4B, 0x18, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x05, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 00017D60 */ 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x78, 0x15, 0x19, 0x06, 0x5A, 0x01, 0x19, 0x5A, 0x02, -/* 00017D70 */ 0x0A, 0x5A, 0x03, 0x03, 0x5A, 0x04, 0x04, 0x5A, 0x05, 0x03, 0x1F, 0x06, 0x18, 0x18, 0x47, 0x15, -/* 00017D80 */ 0x18, 0x8C, 0x01, 0x0C, 0x18, 0x4B, 0x18, 0x07, 0x06, 0x00, 0x5A, 0x00, 0x05, 0xCB, 0x0C, 0x00, -/* 00017D90 */ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x78, 0x16, 0x19, 0x07, 0x5A, 0x01, -/* 00017DA0 */ 0x19, 0x5A, 0x02, 0x0C, 0x5A, 0x03, 0x15, 0x5A, 0x04, 0x04, 0x5A, 0x05, 0x04, 0x1F, 0x06, 0x18, -/* 00017DB0 */ 0x18, 0x47, 0x16, 0x18, 0x74, 0x15, 0x0D, 0x08, 0x74, 0x16, 0x0D, 0x09, 0xA6, 0x00, 0x24, 0x00, -/* 00017DC0 */ 0x02, 0x18, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, -/* 00017DD0 */ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, -/* 00017DE0 */ 0x02, 0x00, 0x00, 0xEE, 0xFE, 0x16, 0x02, 0xFE, 0x15, 0x02, 0xFE, 0x13, 0x02, 0xFE, 0x17, 0x02, -/* 00017DF0 */ 0xFE, 0x14, 0x02, 0xFE, 0x17, 0x02, 0xFE, 0x14, 0x02, 0xFE, 0x17, 0x02, 0xFE, 0x14, 0x02, 0xFE, -/* 00017E00 */ 0xE1, 0x89, 0x0F, 0x0C, 0x00, 0x00, 0x00, 0x22, 0x00, 0x51, 0x00, 0x22, 0x00, 0x5C, 0x00, 0x1D, -/* 00017E10 */ 0x00, 0x3C, 0x00, 0x22, 0x00, 0x65, 0x00, 0x04, 0x00, 0x2D, 0x00, 0x04, 0x00, 0x2E, 0x00, 0x04, -/* 00017E20 */ 0x00, 0x2F, 0x00, 0x07, 0x00, 0x35, 0x00, 0x07, 0x00, 0x35, 0x00, 0x11, 0x00, 0xEA, 0x00, 0x33, -/* 00017E30 */ 0x00, 0x6E, 0x00, 0x33, 0x00, 0x72, 0x00, 0x04, 0x00, 0x35, 0x00, 0x06, 0x00, 0x37, 0x00, 0x00, -/* 00017E40 */ 0x3F, 0x5D, 0x00, 0xC1, 0x03, 0x8D, 0x05, 0x00, 0xFE, 0x11, 0x03, 0x23, 0xA2, 0x41, 0xC1, 0x00, -/* 00017E50 */ 0xFE, 0x74, 0x03, 0x3D, 0xFE, 0x1B, 0x85, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, -/* 00017E60 */ 0x1B, 0x85, 0xFE, 0x81, 0x01, 0xFE, 0x81, 0x01, 0x02, 0xFE, 0xF8, 0x03, 0xFE, 0xF9, 0x03, 0x08, -/* 00017E70 */ 0x02, 0x07, 0x04, 0x13, 0x13, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x04, 0x05, 0x06, 0x35, 0x94, -/* 00017E80 */ 0x02, 0x02, 0x4F, 0x07, 0x94, 0x03, 0x07, 0xCC, 0x07, 0x00, 0x94, 0x03, 0x07, 0x8C, 0x02, 0x37, -/* 00017E90 */ 0x08, 0x4B, 0x08, 0x6A, 0x07, 0x08, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x08, 0x5A, 0x01, 0x03, -/* 00017EA0 */ 0xD3, 0x00, 0x09, 0x5A, 0x02, 0x09, 0x1F, 0x03, 0xFF, 0x07, 0x90, 0x03, 0x00, 0x09, 0x02, 0x00, -/* 00017EB0 */ 0xA6, 0x00, 0x24, 0x00, 0x86, 0xFE, 0x54, 0x85, 0x04, 0x08, 0x00, 0x00, 0x00, 0x06, 0x00, 0x1B, -/* 00017EC0 */ 0x00, 0x1D, 0x00, 0x19, 0x01, 0x08, 0x00, 0x13, 0x00, 0x00, 0xCE, 0x7E, 0x01, 0x00, 0xBF, 0x5C, -/* 00017ED0 */ 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x13, 0x03, 0x24, 0xA2, 0x41, 0xD1, 0x00, 0x3E, 0xFE, -/* 00017EE0 */ 0x8B, 0x85, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x8B, 0x85, 0xF1, 0xF1, 0x41, 0x06, -/* 00017EF0 */ 0x03, 0x06, 0x04, 0x21, 0x20, 0x03, 0x05, 0x02, 0x02, 0x02, 0x02, 0x05, 0x08, 0x64, 0x4F, 0x04, -/* 00017F00 */ 0x8C, 0x02, 0x0E, 0x06, 0x4B, 0x06, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x03, 0x1F, -/* 00017F10 */ 0x02, 0x06, 0x06, 0x5F, 0x06, 0x06, 0x00, 0x47, 0x04, 0x06, 0x8C, 0x02, 0x06, 0x06, 0x4B, 0x06, -/* 00017F20 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x8C, 0x01, 0x02, 0x07, 0x5A, 0x01, 0x07, 0x5A, 0x02, 0x04, -/* 00017F30 */ 0x1F, 0x03, 0x06, 0x06, 0xA6, 0x07, 0x15, 0x03, 0x00, 0x06, 0x07, 0x09, 0x20, 0x00, 0x8C, 0x03, -/* 00017F40 */ 0x37, 0x07, 0x4B, 0x07, 0x6A, 0x06, 0x07, 0x01, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x07, 0x8C, 0x01, -/* 00017F50 */ 0x03, 0x08, 0x4B, 0x08, 0x5A, 0x01, 0x08, 0x5A, 0x02, 0x03, 0x1F, 0x03, 0xFF, 0x06, 0xA6, 0x00, -/* 00017F60 */ 0x24, 0x00, 0xFE, 0x28, 0x03, 0xFE, 0x18, 0x01, 0xFE, 0xAB, 0x85, 0x04, 0x02, 0x00, 0x00, 0x00, -/* 00017F70 */ 0x1A, 0x00, 0x42, 0x00, 0x24, 0x00, 0x60, 0x00, 0x22, 0x00, 0x2E, 0x00, 0x00, 0xBF, 0x7C, 0x02, -/* 00017F80 */ 0xC3, 0x43, 0xA8, 0x09, 0x00, 0xFE, 0xE3, 0x02, 0x23, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x73, 0x03, -/* 00017F90 */ 0x3C, 0xFE, 0x8C, 0x7E, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x8C, 0x7E, 0xFE, 0x12, -/* 00017FA0 */ 0x05, 0xFE, 0x12, 0x05, 0x01, 0x0F, 0x0B, 0x15, 0x04, 0x80, 0x75, 0x54, 0x02, 0x01, 0x04, 0x01, -/* 00017FB0 */ 0x09, 0x09, 0x09, 0x09, 0x02, 0x14, 0x15, 0x79, 0xFE, 0x9D, 0x01, 0x06, 0xFE, 0xF5, 0x03, 0x06, -/* 00017FC0 */ 0xFE, 0xAD, 0x03, 0x01, 0x00, 0x06, 0xFE, 0xF6, 0x03, 0x07, 0x06, 0xFE, 0xF7, 0x03, 0x08, 0x01, -/* 00017FD0 */ 0xFF, 0x01, 0x01, 0xFE, 0xA7, 0x01, 0x4F, 0x0C, 0x4F, 0x0D, 0x4F, 0x0E, 0x4F, 0x0F, 0x4F, 0x10, -/* 00017FE0 */ 0x4F, 0x11, 0x4F, 0x12, 0x4F, 0x13, 0x2C, 0x17, 0x0B, 0x14, 0x03, 0x00, 0x17, 0x02, 0x09, 0x06, -/* 00017FF0 */ 0x00, 0xCC, 0x00, 0x00, 0x09, 0x84, 0x01, 0xCC, 0x17, 0x00, 0x47, 0x0C, 0x17, 0x2C, 0x17, 0x0B, -/* 00018000 */ 0x14, 0x03, 0x00, 0x17, 0x03, 0x09, 0x0D, 0x00, 0xCC, 0x18, 0x01, 0x9F, 0x00, 0x0B, 0x18, 0x47, -/* 00018010 */ 0x17, 0x18, 0x09, 0x18, 0x00, 0x8C, 0x02, 0x24, 0x19, 0x6A, 0x18, 0x19, 0x00, 0x07, 0x02, 0x00, -/* 00018020 */ 0x5A, 0x00, 0x19, 0x5A, 0x01, 0x0B, 0x1F, 0x02, 0x18, 0x18, 0x47, 0x17, 0x18, 0x47, 0x0D, 0x17, -/* 00018030 */ 0x8C, 0x02, 0x24, 0x18, 0x6A, 0x17, 0x18, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x18, 0xA4, 0x19, -/* 00018040 */ 0x0D, 0x02, 0x5A, 0x01, 0x19, 0x1F, 0x02, 0x17, 0x17, 0x47, 0x0E, 0x17, 0x47, 0x0F, 0x04, 0xEA, -/* 00018050 */ 0x00, 0x12, 0x03, 0x00, 0x0F, 0x0E, 0x09, 0x1A, 0x01, 0x8C, 0x02, 0x24, 0x18, 0x6A, 0x17, 0x18, -/* 00018060 */ 0x03, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x18, 0x5A, 0x01, 0x0F, 0x1F, 0x02, 0x17, 0x17, 0x47, 0x10, -/* 00018070 */ 0x17, 0xB9, 0x17, 0x10, 0x0D, 0x00, 0x00, 0x0E, 0xF1, 0x00, 0x17, 0x95, 0x17, 0x0D, 0x10, 0x47, -/* 00018080 */ 0x11, 0x17, 0x2C, 0x17, 0x11, 0x15, 0x03, 0x00, 0x17, 0x03, 0x09, 0x08, 0x00, 0x2C, 0x17, 0x11, -/* 00018090 */ 0x15, 0x08, 0x00, 0x17, 0x05, 0x14, 0x03, 0x00, 0x11, 0x06, 0x09, 0x15, 0x00, 0x8C, 0x02, 0x03, -/* 000180A0 */ 0x18, 0x6A, 0x17, 0x18, 0x04, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x18, 0x5A, 0x01, 0x07, 0x1F, 0x02, -/* 000180B0 */ 0xFF, 0x17, 0x8C, 0x02, 0x24, 0x18, 0x6A, 0x17, 0x18, 0x03, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x18, -/* 000180C0 */ 0x5A, 0x01, 0x11, 0x1F, 0x02, 0x17, 0x17, 0x47, 0x12, 0x17, 0x8C, 0x01, 0x10, 0x17, 0x4B, 0x17, -/* 000180D0 */ 0x07, 0x02, 0x00, 0x5A, 0x00, 0x08, 0x5A, 0x01, 0x12, 0x1F, 0x02, 0x17, 0x17, 0x0F, 0x15, 0x00, -/* 000180E0 */ 0x17, 0x8C, 0x02, 0x03, 0x18, 0x6A, 0x17, 0x18, 0x05, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x18, 0x5A, -/* 000180F0 */ 0x01, 0x12, 0x1F, 0x02, 0xFF, 0x17, 0x8C, 0x02, 0x03, 0x18, 0x6A, 0x17, 0x18, 0x06, 0x07, 0x02, -/* 00018100 */ 0x00, 0x5A, 0x00, 0x18, 0x5A, 0x01, 0x12, 0x1F, 0x02, 0x17, 0x17, 0x47, 0x13, 0x17, 0xA6, 0x17, -/* 00018110 */ 0x14, 0x03, 0x00, 0x13, 0x17, 0x09, 0x18, 0x00, 0x8C, 0x02, 0x03, 0x18, 0x6A, 0x17, 0x18, 0x05, -/* 00018120 */ 0x07, 0x02, 0x00, 0x5A, 0x00, 0x18, 0x5A, 0x01, 0x12, 0x1F, 0x02, 0xFF, 0x17, 0x09, 0x3C, 0x00, -/* 00018130 */ 0x8C, 0x02, 0x37, 0x18, 0x4B, 0x18, 0x6A, 0x17, 0x18, 0x07, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x18, -/* 00018140 */ 0x5A, 0x01, 0x0C, 0x5A, 0x02, 0x13, 0x1F, 0x03, 0x17, 0x17, 0x14, 0x03, 0x00, 0x17, 0x09, 0x09, -/* 00018150 */ 0x1A, 0x00, 0x8C, 0x02, 0x37, 0x18, 0x4B, 0x18, 0x6A, 0x17, 0x18, 0x08, 0x07, 0x03, 0x00, 0x5A, -/* 00018160 */ 0x00, 0x18, 0x5A, 0x01, 0x0C, 0x5A, 0x02, 0x13, 0x1F, 0x03, 0xFF, 0x17, 0x2F, 0x0F, 0x0F, 0x0A, -/* 00018170 */ 0x09, 0xDC, 0xFE, 0x47, 0x00, 0x0C, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x36, 0x03, -/* 00018180 */ 0xFE, 0x3A, 0x03, 0xC1, 0xFE, 0x37, 0x03, 0xFE, 0x8B, 0x02, 0xFE, 0x87, 0x02, 0xFE, 0xD8, 0x01, -/* 00018190 */ 0xFE, 0x14, 0x03, 0xFE, 0x18, 0x01, 0xFE, 0xA9, 0x7E, 0x17, 0x10, 0x00, 0x00, 0x00, 0x0B, 0x00, -/* 000181A0 */ 0x32, 0x00, 0x06, 0x00, 0x1E, 0x00, 0x06, 0x00, 0x19, 0x00, 0x33, 0x00, 0x58, 0x00, 0x1C, 0x00, -/* 000181B0 */ 0x31, 0x00, 0x05, 0x00, 0x1B, 0x00, 0x08, 0x00, 0x17, 0x00, 0x18, 0x00, 0x2D, 0x00, 0x0A, 0x00, -/* 000181C0 */ 0x1F, 0x00, 0x07, 0x00, 0x26, 0x00, 0x1B, 0x00, 0x69, 0x00, 0x15, 0x00, 0x4F, 0x00, 0x18, 0x00, -/* 000181D0 */ 0x37, 0x00, 0x17, 0x00, 0x40, 0x00, 0x15, 0x00, 0x4B, 0x00, 0x18, 0x00, 0x4D, 0x00, 0x0A, 0x00, -/* 000181E0 */ 0x96, 0x00, 0x18, 0x00, 0x3F, 0x00, 0x22, 0x00, 0x49, 0x00, 0x1A, 0x00, 0x4D, 0x00, 0x07, 0x00, -/* 000181F0 */ 0x1B, 0x00, 0x08, 0x00, 0x11, 0x00, 0x00, 0x3F, 0x5C, 0x00, 0xC1, 0x43, 0xA8, 0x05, 0x00, 0xFE, -/* 00018200 */ 0xC0, 0x02, 0x2B, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x72, 0x03, 0x39, 0xFE, 0xE0, 0x79, 0x02, 0xFF, -/* 00018210 */ 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0xE0, 0x79, 0xFE, 0x40, 0x03, 0xFE, 0x40, 0x03, 0x0F, -/* 00018220 */ 0x07, 0x0F, 0x08, 0x5B, 0x52, 0x02, 0x02, 0x0A, 0x0A, 0x0A, 0x0A, 0x01, 0x0E, 0x0F, 0x08, 0x07, -/* 00018230 */ 0x0C, 0x06, 0xFE, 0xAF, 0x03, 0x0B, 0xFE, 0x22, 0x01, 0x4F, 0x08, 0x4F, 0x09, 0x4F, 0x0A, 0x4F, -/* 00018240 */ 0x0B, 0x4F, 0x0C, 0x4F, 0x0D, 0x8C, 0x01, 0x0E, 0x10, 0x4B, 0x10, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 00018250 */ 0x02, 0x5A, 0x01, 0x07, 0x1F, 0x02, 0x10, 0x10, 0x47, 0x08, 0x10, 0x14, 0x03, 0x00, 0x08, 0x03, -/* 00018260 */ 0x09, 0x06, 0x00, 0x47, 0x00, 0x04, 0x09, 0xF0, 0x00, 0x5F, 0x10, 0x08, 0x00, 0x0E, 0x51, 0x00, -/* 00018270 */ 0x10, 0x8C, 0x02, 0x37, 0x11, 0x4B, 0x11, 0x6A, 0x10, 0x11, 0x01, 0x07, 0x03, 0x00, 0x5A, 0x00, -/* 00018280 */ 0x11, 0x5F, 0x12, 0x08, 0x00, 0x5A, 0x01, 0x12, 0x5A, 0x02, 0x05, 0x1F, 0x03, 0x10, 0x10, 0x47, -/* 00018290 */ 0x09, 0x10, 0x8C, 0x02, 0x37, 0x11, 0x4B, 0x11, 0x6A, 0x10, 0x11, 0x02, 0x07, 0x02, 0x00, 0x5A, -/* 000182A0 */ 0x00, 0x11, 0x5A, 0x01, 0x09, 0x1F, 0x02, 0x10, 0x10, 0x47, 0x0A, 0x10, 0xA4, 0x10, 0x09, 0x03, -/* 000182B0 */ 0xA4, 0x11, 0x0A, 0x04, 0x15, 0x03, 0x00, 0x10, 0x11, 0x09, 0x06, 0x00, 0x47, 0x00, 0x04, 0x09, -/* 000182C0 */ 0x97, 0x00, 0x5F, 0x10, 0x08, 0x05, 0x0E, 0x87, 0x00, 0x10, 0x8C, 0x02, 0x37, 0x11, 0x4B, 0x11, -/* 000182D0 */ 0x6A, 0x10, 0x11, 0x01, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x11, 0x5F, 0x12, 0x08, 0x05, 0x5A, 0x01, -/* 000182E0 */ 0x12, 0x5A, 0x02, 0x05, 0x1F, 0x03, 0x10, 0x10, 0x47, 0x0B, 0x10, 0x8C, 0x02, 0x37, 0x11, 0x4B, -/* 000182F0 */ 0x11, 0x6A, 0x10, 0x11, 0x06, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x11, 0x8C, 0x02, 0x37, 0x13, 0x4B, -/* 00018300 */ 0x13, 0x6A, 0x12, 0x13, 0x07, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x13, 0x5A, 0x01, 0x0B, 0xD3, 0x00, -/* 00018310 */ 0x14, 0x5A, 0x02, 0x14, 0x1F, 0x03, 0x12, 0x12, 0x5A, 0x01, 0x12, 0xD3, 0x01, 0x12, 0x5A, 0x02, -/* 00018320 */ 0x12, 0x1F, 0x03, 0x10, 0x10, 0x47, 0x0C, 0x10, 0x8C, 0x02, 0x37, 0x11, 0x4B, 0x11, 0x6A, 0x10, -/* 00018330 */ 0x11, 0x02, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x11, 0x5A, 0x01, 0x0C, 0x1F, 0x02, 0x10, 0x10, 0x47, -/* 00018340 */ 0x0D, 0x10, 0xA4, 0x10, 0x0C, 0x08, 0xA4, 0x11, 0x0D, 0x09, 0x43, 0x00, 0x10, 0x11, 0x09, 0x08, -/* 00018350 */ 0x00, 0x47, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xF3, 0x03, 0xFE, 0x45, -/* 00018360 */ 0x01, 0xFE, 0x1A, 0x03, 0xC1, 0xC1, 0xFE, 0xF4, 0x03, 0xC5, 0x7E, 0xC1, 0xC1, 0xFE, 0xFC, 0x79, -/* 00018370 */ 0x0F, 0x0C, 0x00, 0x00, 0x00, 0x16, 0x00, 0x2D, 0x00, 0x08, 0x00, 0x23, 0x00, 0x06, 0x00, 0x45, -/* 00018380 */ 0x00, 0x08, 0x00, 0x23, 0x00, 0x21, 0x00, 0x3C, 0x00, 0x1A, 0x00, 0x38, 0x00, 0x10, 0x00, 0x41, -/* 00018390 */ 0x00, 0x06, 0x00, 0x2F, 0x00, 0x08, 0x00, 0x25, 0x00, 0x21, 0x00, 0x44, 0x00, 0x3D, 0x00, 0x88, -/* 000183A0 */ 0x00, 0x1A, 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x49, 0x00, 0x08, 0x00, 0x11, 0x00, 0x00, 0x16, 0x84, -/* 000183B0 */ 0x01, 0x00, 0xB6, 0x83, 0x01, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x03, 0x00, 0xFE, 0xD2, -/* 000183C0 */ 0x02, 0x62, 0xA2, 0x41, 0xD0, 0x00, 0x3B, 0xFE, 0x01, 0x10, 0xFE, 0x57, 0x7C, 0xFF, 0x00, 0x10, -/* 000183D0 */ 0x01, 0x00, 0x02, 0x02, 0xFE, 0x57, 0x7C, 0x23, 0x23, 0x01, 0x04, 0x02, 0x04, 0x03, 0x0B, 0x0B, -/* 000183E0 */ 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x1E, 0x8C, 0x02, 0x37, 0x05, 0x4B, 0x05, 0x6A, 0x04, -/* 000183F0 */ 0x05, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x05, 0x5A, 0x01, 0x02, 0x1F, 0x02, 0x00, 0x04, 0x09, -/* 00018400 */ 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x63, 0x01, 0xFE, 0x64, 0x7C, 0x02, 0x00, 0x00, 0x00, -/* 00018410 */ 0x00, 0x1C, 0x00, 0x16, 0x00, 0x00, 0xBF, 0x4C, 0x00, 0xC0, 0x03, 0x80, 0x03, 0x00, 0xFE, 0xD2, -/* 00018420 */ 0x02, 0x3E, 0xA2, 0x41, 0xD0, 0x00, 0x3A, 0xFE, 0x01, 0x10, 0xFE, 0x33, 0x7C, 0xFF, 0x00, 0x10, -/* 00018430 */ 0x01, 0x00, 0x02, 0x02, 0xFE, 0x33, 0x7C, 0x21, 0x21, 0x01, 0x02, 0x03, 0x04, 0x06, 0x06, 0x02, -/* 00018440 */ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x0F, 0xA4, 0x04, 0x03, 0x00, 0x43, 0x00, 0x04, 0x02, 0x09, -/* 00018450 */ 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xC1, 0xFE, 0x40, 0x7C, 0x02, 0x00, 0x00, 0x00, 0x00, 0x0D, -/* 00018460 */ 0x00, 0x14, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0xA8, 0x02, 0x25, -/* 00018470 */ 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x71, 0x03, 0x38, 0xFE, 0x6F, 0x76, 0xFF, 0x00, 0x10, 0x01, 0x00, -/* 00018480 */ 0x02, 0x02, 0xFE, 0x6F, 0x76, 0xE0, 0xE0, 0x01, 0x05, 0x04, 0x06, 0x04, 0x1D, 0x1C, 0x02, 0x04, -/* 00018490 */ 0x02, 0x02, 0x02, 0x02, 0x05, 0x08, 0x07, 0x5B, 0x8C, 0x02, 0x24, 0x07, 0x6A, 0x06, 0x07, 0x00, -/* 000184A0 */ 0x07, 0x02, 0x00, 0x5A, 0x00, 0x07, 0x5A, 0x01, 0x04, 0x1F, 0x02, 0x06, 0x06, 0x47, 0x04, 0x06, -/* 000184B0 */ 0x8C, 0x01, 0x0D, 0x06, 0x4B, 0x06, 0x0F, 0x10, 0x00, 0x06, 0x8C, 0x01, 0x03, 0x06, 0x4B, 0x06, -/* 000184C0 */ 0x07, 0x01, 0x00, 0x5A, 0x00, 0x02, 0x1F, 0x01, 0xFF, 0x06, 0x8C, 0x02, 0x03, 0x07, 0x6A, 0x06, -/* 000184D0 */ 0x07, 0x01, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x07, 0x5A, 0x01, 0x04, 0x8C, 0x01, 0x0D, 0x08, 0x4B, -/* 000184E0 */ 0x08, 0x5A, 0x02, 0x08, 0x1F, 0x03, 0x06, 0x06, 0x44, 0x00, 0x06, 0x03, 0x09, 0x02, 0x00, 0xA6, -/* 000184F0 */ 0x00, 0x24, 0x00, 0xFE, 0x37, 0x03, 0xFE, 0x83, 0x02, 0xFE, 0x89, 0x76, 0x05, 0x00, 0x00, 0x00, -/* 00018500 */ 0x00, 0x18, 0x00, 0x29, 0x00, 0x0A, 0x00, 0x25, 0x00, 0x10, 0x00, 0x2F, 0x00, 0x27, 0x00, 0x48, -/* 00018510 */ 0x00, 0x00, 0x3F, 0x5D, 0x00, 0x01, 0x00, 0x8D, 0x05, 0x00, 0xFE, 0x2E, 0x02, 0x1A, 0xA0, 0x41, -/* 00018520 */ 0xD1, 0x00, 0x36, 0xFE, 0x9C, 0x5A, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0x9C, -/* 00018530 */ 0x5A, 0xFE, 0xA8, 0x1B, 0xFE, 0xA8, 0x1B, 0x02, 0xFE, 0x83, 0x03, 0xFE, 0xCB, 0x03, 0x1A, 0x26, -/* 00018540 */ 0x3D, 0x04, 0xC8, 0x9D, 0x02, 0x02, 0x3A, 0x3B, 0x3C, 0x05, 0xFE, 0xCC, 0x03, 0x05, 0xFE, 0xCD, -/* 00018550 */ 0x03, 0x05, 0xFE, 0xCE, 0x03, 0x06, 0xFE, 0xCF, 0x03, 0x06, 0xFE, 0xD0, 0x03, 0x05, 0xFE, 0xD1, -/* 00018560 */ 0x03, 0x05, 0xFE, 0xD2, 0x03, 0x05, 0xFE, 0xD3, 0x03, 0x05, 0xFE, 0xD4, 0x03, 0x05, 0xFE, 0xD5, -/* 00018570 */ 0x03, 0x05, 0xFE, 0xD6, 0x03, 0x05, 0xFE, 0xD7, 0x03, 0x05, 0xFE, 0xD8, 0x03, 0x05, 0xFE, 0xD9, -/* 00018580 */ 0x03, 0x05, 0xFE, 0xDA, 0x03, 0x05, 0xFE, 0xDB, 0x03, 0x06, 0xFE, 0x5B, 0x03, 0x05, 0xFE, 0xDC, -/* 00018590 */ 0x03, 0x05, 0xFE, 0xDD, 0x03, 0x05, 0xFE, 0xDE, 0x03, 0x05, 0xFE, 0xDF, 0x03, 0x05, 0xFE, 0xE0, -/* 000185A0 */ 0x03, 0x05, 0xFE, 0xE1, 0x03, 0x05, 0xFE, 0xE2, 0x03, 0x05, 0xFE, 0xE3, 0x03, 0x05, 0xFE, 0xE4, -/* 000185B0 */ 0x03, 0x05, 0xFE, 0xE5, 0x03, 0x05, 0xFE, 0xE6, 0x03, 0x05, 0xFE, 0xE7, 0x03, 0x05, 0xFE, 0xE8, -/* 000185C0 */ 0x03, 0x05, 0xFE, 0xE9, 0x03, 0x05, 0xFE, 0xEA, 0x03, 0x05, 0xFE, 0xEB, 0x03, 0x06, 0xFE, 0xEC, -/* 000185D0 */ 0x03, 0x06, 0xFE, 0xED, 0x03, 0x06, 0xFE, 0xEE, 0x03, 0xFE, 0xD2, 0x02, 0x4F, 0x26, 0x4F, 0x27, -/* 000185E0 */ 0x4F, 0x28, 0x4F, 0x29, 0x4F, 0x2A, 0x4F, 0x2B, 0x4F, 0x2C, 0x4F, 0x2D, 0x4F, 0x2E, 0x4F, 0x2F, -/* 000185F0 */ 0x4F, 0x30, 0x4F, 0x31, 0x4F, 0x32, 0x4F, 0x33, 0x4F, 0x34, 0x4F, 0x35, 0x4F, 0x36, 0x4F, 0x37, -/* 00018600 */ 0x4F, 0x38, 0x4F, 0x39, 0x4F, 0x3D, 0x94, 0x02, 0x3D, 0x4F, 0x3D, 0x94, 0x03, 0x3D, 0x47, 0x26, -/* 00018610 */ 0x02, 0x47, 0x27, 0x03, 0x47, 0x3D, 0x04, 0x01, 0x04, 0x01, 0x3E, 0x26, 0x2F, 0x3D, 0x3D, 0x3E, -/* 00018620 */ 0x2F, 0x3D, 0x3D, 0x05, 0x01, 0x04, 0x01, 0x3E, 0x27, 0x2F, 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, -/* 00018630 */ 0x06, 0x47, 0x28, 0x3D, 0x47, 0x29, 0x07, 0x2F, 0x3D, 0x08, 0x09, 0x47, 0x2A, 0x3D, 0x47, 0x3D, -/* 00018640 */ 0x0A, 0x01, 0x04, 0x01, 0x3E, 0x29, 0x2F, 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, 0x05, 0x01, 0x04, -/* 00018650 */ 0x01, 0x3E, 0x2A, 0x2F, 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, 0x0B, 0x47, 0x2B, 0x3D, 0x47, 0x3D, -/* 00018660 */ 0x0C, 0x01, 0x04, 0x01, 0x3E, 0x28, 0x2F, 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, 0x0D, 0x47, 0x2C, -/* 00018670 */ 0x3D, 0x47, 0x3D, 0x0A, 0x01, 0x04, 0x01, 0x3E, 0x27, 0x2F, 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, -/* 00018680 */ 0x0E, 0x47, 0x2D, 0x3D, 0x47, 0x3D, 0x0A, 0x01, 0x04, 0x01, 0x3E, 0x2D, 0x2F, 0x3D, 0x3D, 0x3E, -/* 00018690 */ 0x2F, 0x3D, 0x3D, 0x0F, 0x01, 0x04, 0x01, 0x3E, 0x28, 0x2F, 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, -/* 000186A0 */ 0x10, 0x47, 0x2E, 0x3D, 0x47, 0x3D, 0x0A, 0x01, 0x04, 0x01, 0x3E, 0x28, 0x2F, 0x3D, 0x3D, 0x3E, -/* 000186B0 */ 0x2F, 0x3D, 0x3D, 0x11, 0x01, 0x04, 0x01, 0x3E, 0x27, 0x2F, 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, -/* 000186C0 */ 0x12, 0x01, 0x04, 0x01, 0x3E, 0x28, 0x2F, 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, 0x13, 0x47, 0x2F, -/* 000186D0 */ 0x3D, 0x47, 0x3D, 0x0A, 0x01, 0x04, 0x01, 0x3E, 0x26, 0x2F, 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, -/* 000186E0 */ 0x14, 0x01, 0x04, 0x01, 0x3E, 0x27, 0x2F, 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, 0x13, 0x47, 0x30, -/* 000186F0 */ 0x3D, 0x47, 0x3D, 0x0A, 0x01, 0x04, 0x01, 0x3E, 0x26, 0x2F, 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, -/* 00018700 */ 0x15, 0x47, 0x31, 0x3D, 0x47, 0x3D, 0x0A, 0x01, 0x04, 0x01, 0x3E, 0x26, 0x2F, 0x3D, 0x3D, 0x3E, -/* 00018710 */ 0x2F, 0x3D, 0x3D, 0x16, 0x01, 0x04, 0x01, 0x3E, 0x26, 0x2F, 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, -/* 00018720 */ 0x17, 0x47, 0x32, 0x3D, 0x47, 0x3D, 0x12, 0x01, 0x04, 0x01, 0x3E, 0x26, 0x2F, 0x3D, 0x3D, 0x3E, -/* 00018730 */ 0x2F, 0x3D, 0x3D, 0x18, 0x2F, 0x3D, 0x0A, 0x3D, 0x47, 0x3E, 0x19, 0x01, 0x04, 0x01, 0x3F, 0x32, -/* 00018740 */ 0x2F, 0x3E, 0x3E, 0x3F, 0x2F, 0x3E, 0x3E, 0x1A, 0x2F, 0x3D, 0x3D, 0x3E, 0x47, 0x3E, 0x05, 0x01, -/* 00018750 */ 0x04, 0x01, 0x3F, 0x26, 0x2F, 0x3E, 0x3E, 0x3F, 0x2F, 0x3E, 0x3E, 0x1B, 0x2F, 0x3D, 0x3D, 0x3E, -/* 00018760 */ 0x2F, 0x3D, 0x3D, 0x0B, 0x47, 0x33, 0x3D, 0x47, 0x3D, 0x1C, 0x01, 0x04, 0x01, 0x3E, 0x33, 0x2F, -/* 00018770 */ 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, 0x0B, 0x47, 0x3E, 0x1D, 0x01, 0x04, 0x01, 0x3F, 0x31, 0x2F, -/* 00018780 */ 0x3E, 0x3E, 0x3F, 0x2F, 0x3E, 0x3E, 0x1E, 0x2F, 0x3D, 0x3D, 0x3E, 0x47, 0x3E, 0x1D, 0x01, 0x04, -/* 00018790 */ 0x01, 0x3F, 0x30, 0x2F, 0x3E, 0x3E, 0x3F, 0x2F, 0x3E, 0x3E, 0x1E, 0x2F, 0x3D, 0x3D, 0x3E, 0x47, -/* 000187A0 */ 0x34, 0x3D, 0x47, 0x3D, 0x1F, 0x01, 0x04, 0x01, 0x3E, 0x2F, 0x2F, 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, -/* 000187B0 */ 0x3D, 0x20, 0x47, 0x3E, 0x1F, 0x01, 0x04, 0x01, 0x3F, 0x2E, 0x2F, 0x3E, 0x3E, 0x3F, 0x2F, 0x3E, -/* 000187C0 */ 0x3E, 0x20, 0x2F, 0x3D, 0x3D, 0x3E, 0x47, 0x3E, 0x19, 0x01, 0x04, 0x01, 0x3F, 0x2C, 0x2F, 0x3E, -/* 000187D0 */ 0x3E, 0x3F, 0x2F, 0x3E, 0x3E, 0x21, 0x2F, 0x3D, 0x3D, 0x3E, 0x47, 0x35, 0x3D, 0x47, 0x3D, 0x22, -/* 000187E0 */ 0x01, 0x04, 0x01, 0x3E, 0x34, 0x2F, 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, 0x22, 0x01, 0x04, 0x01, -/* 000187F0 */ 0x3E, 0x35, 0x2F, 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, 0x22, 0x47, 0x36, 0x3D, 0x47, 0x3D, 0x0A, -/* 00018800 */ 0x01, 0x04, 0x01, 0x3E, 0x36, 0x2F, 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, 0x05, 0x01, 0x04, 0x01, -/* 00018810 */ 0x3E, 0x2C, 0x2F, 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, 0x05, 0x01, 0x04, 0x01, 0x3E, 0x2B, 0x2F, -/* 00018820 */ 0x3D, 0x3D, 0x3E, 0x2F, 0x3D, 0x3D, 0x0B, 0x47, 0x37, 0x3D, 0x8C, 0x02, 0x09, 0x3D, 0x07, 0x03, -/* 00018830 */ 0x00, 0x47, 0x3E, 0x23, 0x01, 0x04, 0x01, 0x3F, 0x34, 0x2F, 0x3E, 0x3E, 0x3F, 0x2F, 0x3E, 0x3E, -/* 00018840 */ 0x24, 0x5A, 0x01, 0x3E, 0x5A, 0x02, 0x25, 0xC1, 0x03, 0x3D, 0x3D, 0x47, 0x38, 0x3D, 0x8C, 0x02, -/* 00018850 */ 0x09, 0x3D, 0x07, 0x03, 0x00, 0x47, 0x3E, 0x23, 0x01, 0x04, 0x01, 0x3F, 0x35, 0x2F, 0x3E, 0x3E, -/* 00018860 */ 0x3F, 0x2F, 0x3E, 0x3E, 0x24, 0x5A, 0x01, 0x3E, 0x5A, 0x02, 0x25, 0xC1, 0x03, 0x3D, 0x3D, 0x47, -/* 00018870 */ 0x39, 0x3D, 0x8C, 0x02, 0x09, 0x3D, 0x07, 0x03, 0x00, 0x47, 0x3E, 0x23, 0x01, 0x04, 0x01, 0x3F, -/* 00018880 */ 0x37, 0x2F, 0x3E, 0x3E, 0x3F, 0x2F, 0x3E, 0x3E, 0x24, 0x5A, 0x01, 0x3E, 0x5A, 0x02, 0x25, 0xC1, -/* 00018890 */ 0x03, 0x3D, 0x3D, 0x94, 0x02, 0x3D, 0x8C, 0x02, 0x02, 0x3D, 0x07, 0x01, 0x00, 0xC1, 0x01, 0x3D, -/* 000188A0 */ 0x3D, 0x94, 0x03, 0x3D, 0xD3, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x68, -/* 000188B0 */ 0x5F, 0x18, 0x32, 0x00, 0x00, 0x00, 0x03, 0x00, 0x1F, 0x00, 0x03, 0x00, 0x1F, 0x00, 0x20, 0x00, -/* 000188C0 */ 0x33, 0x00, 0x03, 0x00, 0x77, 0x00, 0x07, 0x00, 0xC0, 0x00, 0x20, 0x00, 0x44, 0x00, 0x13, 0x00, -/* 000188D0 */ 0x7D, 0x00, 0x13, 0x00, 0x94, 0x00, 0x20, 0x00, 0x83, 0x00, 0x2D, 0x00, 0x83, 0x00, 0x20, 0x00, -/* 000188E0 */ 0x74, 0x00, 0x13, 0x00, 0x6A, 0x00, 0x20, 0x00, 0x7A, 0x00, 0x43, 0x00, 0xAF, 0x03, 0x3B, 0x00, -/* 000188F0 */ 0x4C, 0x01, 0x3B, 0x00, 0x5A, 0x01, 0x20, 0x00, 0x4B, 0x00, 0x2D, 0x00, 0xBA, 0x00, 0x24, 0x00, -/* 00018900 */ 0x74, 0x00, 0x24, 0x00, 0x92, 0x00, 0x24, 0x00, 0x93, 0x00, 0x0E, 0x00, 0x34, 0x00, 0x08, 0x00, -/* 00018910 */ 0x59, 0x08, 0x00, 0x17, 0x89, 0x01, 0x00, 0xBF, 0x7C, 0x00, 0xC3, 0x43, 0xA8, 0x09, 0x00, 0xFE, -/* 00018920 */ 0x6A, 0x02, 0x0F, 0xA2, 0x41, 0xD1, 0x00, 0x37, 0xFE, 0xF1, 0x6D, 0xFF, 0x00, 0x10, 0x01, 0x00, -/* 00018930 */ 0x02, 0x02, 0xFE, 0xF1, 0x6D, 0xFE, 0x4C, 0x08, 0xFE, 0x4C, 0x08, 0x01, 0x10, 0x0B, 0x13, 0x09, -/* 00018940 */ 0x8D, 0x82, 0x2F, 0x03, 0x03, 0x02, 0x11, 0x11, 0x11, 0x11, 0x03, 0x12, 0x13, 0xFE, 0x14, 0x01, -/* 00018950 */ 0xFE, 0xB4, 0x01, 0xFE, 0x3D, 0x01, 0xFE, 0x61, 0x01, 0x07, 0x01, 0x01, 0x01, 0x02, 0x06, 0xFE, -/* 00018960 */ 0xAF, 0x03, 0x01, 0x03, 0x01, 0x04, 0x01, 0x05, 0x01, 0x00, 0x06, 0xFE, 0xEF, 0x03, 0xFE, 0xD8, -/* 00018970 */ 0x01, 0x4F, 0x0C, 0x4F, 0x0D, 0x4F, 0x0E, 0x4F, 0x0F, 0x4F, 0x10, 0x4F, 0x11, 0x8C, 0x01, 0x03, -/* 00018980 */ 0x17, 0x4B, 0x17, 0x6A, 0x16, 0x17, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x17, 0x5A, 0x01, 0x0B, -/* 00018990 */ 0x1F, 0x02, 0x16, 0x16, 0x47, 0x0C, 0x16, 0x0E, 0x06, 0x00, 0x0C, 0x47, 0x00, 0x0C, 0x09, 0xA6, -/* 000189A0 */ 0x01, 0x8C, 0x03, 0x37, 0x17, 0x4B, 0x17, 0x6A, 0x16, 0x17, 0x01, 0x07, 0x03, 0x00, 0x5A, 0x00, -/* 000189B0 */ 0x17, 0x5A, 0x01, 0x0B, 0x8C, 0x01, 0x02, 0x18, 0x4B, 0x18, 0x5A, 0x02, 0x18, 0x1F, 0x03, 0x16, -/* 000189C0 */ 0x16, 0x47, 0x0D, 0x16, 0x0F, 0x06, 0x00, 0x0D, 0x47, 0x00, 0x02, 0x09, 0x79, 0x01, 0x8C, 0x03, -/* 000189D0 */ 0x37, 0x17, 0x4B, 0x17, 0x6A, 0x16, 0x17, 0x02, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x17, 0x1F, 0x01, -/* 000189E0 */ 0x16, 0x16, 0x47, 0x0E, 0x16, 0x95, 0x16, 0x0D, 0x03, 0x74, 0x16, 0x0E, 0x03, 0x95, 0x16, 0x0D, -/* 000189F0 */ 0x03, 0x74, 0x16, 0x0E, 0x04, 0x95, 0x16, 0x0D, 0x04, 0x0E, 0x1E, 0x00, 0x16, 0x95, 0x16, 0x0D, -/* 00018A00 */ 0x04, 0x74, 0x16, 0x0E, 0x05, 0x5F, 0x17, 0x0E, 0x06, 0x95, 0x18, 0x0D, 0x04, 0x2F, 0x18, 0x05, -/* 00018A10 */ 0x18, 0x2F, 0x16, 0x17, 0x18, 0x74, 0x16, 0x0E, 0x04, 0xFA, 0x16, 0x95, 0x16, 0x0D, 0x06, 0x0E, -/* 00018A20 */ 0x1E, 0x00, 0x16, 0x95, 0x16, 0x0D, 0x06, 0x74, 0x16, 0x0E, 0x07, 0x5F, 0x17, 0x0E, 0x06, 0x95, -/* 00018A30 */ 0x18, 0x0D, 0x06, 0x2F, 0x18, 0x05, 0x18, 0x2F, 0x16, 0x17, 0x18, 0x74, 0x16, 0x0E, 0x04, 0xFA, -/* 00018A40 */ 0x16, 0x95, 0x16, 0x0D, 0x07, 0x0E, 0x08, 0x00, 0x16, 0x95, 0x16, 0x0D, 0x07, 0x74, 0x16, 0x0E, -/* 00018A50 */ 0x08, 0x95, 0x16, 0x0D, 0x08, 0x0E, 0xCC, 0x00, 0x16, 0x95, 0x16, 0x0D, 0x08, 0x74, 0x16, 0x0E, -/* 00018A60 */ 0x09, 0x8C, 0x03, 0x37, 0x17, 0x4B, 0x17, 0x6A, 0x16, 0x17, 0x0A, 0x07, 0x03, 0x00, 0x5A, 0x00, -/* 00018A70 */ 0x17, 0x95, 0x18, 0x0D, 0x08, 0x5A, 0x01, 0x18, 0x5A, 0x02, 0x05, 0x1F, 0x03, 0x16, 0x16, 0x47, -/* 00018A80 */ 0x0F, 0x16, 0x47, 0x10, 0x09, 0xEA, 0x00, 0xA4, 0x16, 0x0F, 0x0B, 0x12, 0x03, 0x00, 0x10, 0x16, -/* 00018A90 */ 0x09, 0x92, 0x00, 0x95, 0x16, 0x0F, 0x10, 0x15, 0x03, 0x00, 0x16, 0x0A, 0x09, 0x03, 0x00, 0x09, -/* 00018AA0 */ 0x7D, 0x00, 0xA6, 0x16, 0x47, 0x11, 0x16, 0x2F, 0x16, 0x10, 0x03, 0x47, 0x11, 0x16, 0xEA, 0x01, -/* 00018AB0 */ 0xA4, 0x16, 0x0F, 0x0B, 0x12, 0x03, 0x00, 0x11, 0x16, 0x09, 0x16, 0x00, 0x95, 0x16, 0x0F, 0x11, -/* 00018AC0 */ 0xA4, 0x16, 0x16, 0x0C, 0x11, 0x03, 0x00, 0x16, 0x03, 0x09, 0x06, 0x00, 0x28, 0x11, 0x11, 0x09, -/* 00018AD0 */ 0xDC, 0xFF, 0x2F, 0x16, 0x10, 0x03, 0x11, 0x03, 0x00, 0x11, 0x16, 0x09, 0x3E, 0x00, 0x47, 0x16, -/* 00018AE0 */ 0x0E, 0x8C, 0x03, 0x37, 0x18, 0x4B, 0x18, 0x6A, 0x17, 0x18, 0x0D, 0x07, 0x03, 0x00, 0x5A, 0x00, -/* 00018AF0 */ 0x18, 0x8C, 0x03, 0x37, 0x1A, 0x4B, 0x1A, 0x6A, 0x19, 0x1A, 0x0E, 0x07, 0x04, 0x00, 0x5A, 0x00, -/* 00018B00 */ 0x1A, 0x5A, 0x01, 0x0F, 0x5A, 0x02, 0x10, 0x5A, 0x03, 0x11, 0x1F, 0x04, 0x19, 0x19, 0x5A, 0x01, -/* 00018B10 */ 0x19, 0x5A, 0x02, 0x05, 0x1F, 0x03, 0x17, 0x17, 0x74, 0x17, 0x16, 0x0F, 0x09, 0x06, 0x00, 0x28, -/* 00018B20 */ 0x10, 0x10, 0x09, 0x60, 0xFF, 0x8C, 0x01, 0x03, 0x17, 0x4B, 0x17, 0x6A, 0x16, 0x17, 0x10, 0x07, -/* 00018B30 */ 0x03, 0x00, 0x5A, 0x00, 0x17, 0x5A, 0x01, 0x0B, 0x5A, 0x02, 0x0E, 0x1F, 0x03, 0xFF, 0x16, 0x47, -/* 00018B40 */ 0x00, 0x0E, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x84, 0x01, 0xF1, 0x61, 0xFE, 0xF0, -/* 00018B50 */ 0x03, 0xFE, 0x28, 0x03, 0xFE, 0xF1, 0x03, 0xFE, 0x28, 0x03, 0xFE, 0xF2, 0x03, 0xFE, 0xF3, 0x03, -/* 00018B60 */ 0xFE, 0xF4, 0x03, 0xFE, 0x45, 0x01, 0xC1, 0xC1, 0xBC, 0xFE, 0x3F, 0x01, 0xFE, 0xB6, 0x03, 0xFE, -/* 00018B70 */ 0x87, 0x01, 0xFE, 0x12, 0x6E, 0x23, 0x0C, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x3C, 0x00, 0x04, 0x00, -/* 00018B80 */ 0x1E, 0x00, 0x06, 0x00, 0x2A, 0x00, 0x23, 0x00, 0x39, 0x00, 0x04, 0x00, 0x1E, 0x00, 0x06, 0x00, -/* 00018B90 */ 0x28, 0x00, 0x17, 0x00, 0x24, 0x00, 0x08, 0x00, 0x25, 0x00, 0x08, 0x00, 0x21, 0x00, 0x08, 0x00, -/* 00018BA0 */ 0x20, 0x00, 0x08, 0x00, 0x27, 0x00, 0x16, 0x00, 0x37, 0x00, 0x08, 0x00, 0x20, 0x00, 0x08, 0x00, -/* 00018BB0 */ 0x27, 0x00, 0x16, 0x00, 0x37, 0x00, 0x08, 0x00, 0x20, 0x00, 0x08, 0x00, 0x34, 0x00, 0x08, 0x00, -/* 00018BC0 */ 0x20, 0x00, 0x08, 0x00, 0x76, 0x00, 0x21, 0x00, 0x44, 0x00, 0x05, 0x00, 0x0B, 0x00, 0x0C, 0x00, -/* 00018BD0 */ 0x36, 0x00, 0x0C, 0x00, 0x39, 0x00, 0x03, 0x00, 0x35, 0x00, 0x05, 0x00, 0x20, 0x00, 0x09, 0x00, -/* 00018BE0 */ 0x0B, 0x00, 0x1C, 0x00, 0x3B, 0x00, 0x06, 0x00, 0x3B, 0x01, 0x0C, 0x00, 0xFC, 0x00, 0x3E, 0x00, -/* 00018BF0 */ 0xCC, 0x00, 0x03, 0x00, 0x0E, 0xFC, 0x06, 0x00, 0x26, 0x04, 0x1A, 0x00, 0x33, 0x00, 0x08, 0x00, -/* 00018C00 */ 0x14, 0x00, 0x00, 0xBF, 0x4C, 0x00, 0x00, 0x20, 0x88, 0x01, 0x00, 0xFE, 0x24, 0x02, 0x04, 0xA1, -/* 00018C10 */ 0x41, 0xC1, 0x00, 0xFE, 0x65, 0x03, 0x35, 0xFE, 0x40, 0x59, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, -/* 00018C20 */ 0x01, 0xFE, 0x40, 0x59, 0x55, 0x55, 0x41, 0x02, 0x02, 0x03, 0x05, 0x05, 0x02, 0x01, 0x02, 0x0D, -/* 00018C30 */ 0xE0, 0x03, 0x00, 0x01, 0x34, 0x01, 0x01, 0x0D, 0x03, 0xA6, 0x00, 0x24, 0x00, 0x0A, 0xFE, 0xCA, -/* 00018C40 */ 0x03, 0x01, 0xFE, 0x6E, 0x59, 0x02, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x26, 0x00, 0x00, 0xBF, -/* 00018C50 */ 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0x16, 0x02, 0x1C, 0xA2, 0x41, 0xC1, 0x00, 0xFE, -/* 00018C60 */ 0x6E, 0x03, 0x34, 0xFE, 0x5D, 0x57, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x06, 0x06, 0xFE, 0x5D, 0x57, -/* 00018C70 */ 0xFE, 0xC2, 0x01, 0xFE, 0xC2, 0x01, 0x01, 0x0B, 0x06, 0x0D, 0x08, 0x39, 0x35, 0x02, 0x04, 0x04, -/* 00018C80 */ 0x04, 0x04, 0x04, 0x0C, 0x08, 0x06, 0xFE, 0xC7, 0x03, 0x05, 0xFE, 0xC8, 0x03, 0x06, 0xFE, 0xC9, -/* 00018C90 */ 0x03, 0xC0, 0x4F, 0x0B, 0x95, 0x0D, 0x06, 0x07, 0x47, 0x0B, 0x0D, 0xA6, 0x0D, 0x15, 0x03, 0x00, -/* 00018CA0 */ 0x0B, 0x0D, 0x09, 0xA3, 0x00, 0x8C, 0x02, 0x24, 0x0E, 0x6A, 0x0D, 0x0E, 0x00, 0x07, 0x02, 0x00, -/* 00018CB0 */ 0x5A, 0x00, 0x0E, 0x5A, 0x01, 0x0B, 0x1F, 0x02, 0x0D, 0x0D, 0x47, 0x0B, 0x0D, 0x8C, 0x02, 0x37, -/* 00018CC0 */ 0x0E, 0x4B, 0x0E, 0x6A, 0x0D, 0x0E, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0E, 0x5A, 0x01, 0x0B, -/* 00018CD0 */ 0x1F, 0x02, 0x0D, 0x0D, 0x0F, 0x0D, 0x00, 0x0D, 0x12, 0x08, 0x00, 0x0B, 0x08, 0x11, 0x03, 0x00, -/* 00018CE0 */ 0x0B, 0x09, 0x09, 0x49, 0x00, 0x8C, 0x02, 0x03, 0x0E, 0x6A, 0x0D, 0x0E, 0x02, 0x07, 0x04, 0x00, -/* 00018CF0 */ 0x5A, 0x00, 0x0E, 0x8C, 0x02, 0x0B, 0x0F, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x0B, -/* 00018D00 */ 0x1F, 0x02, 0x0F, 0x0F, 0x5A, 0x01, 0x0F, 0x5A, 0x02, 0x07, 0x47, 0x0F, 0x03, 0x01, 0x04, 0x01, -/* 00018D10 */ 0x10, 0x08, 0x2F, 0x0F, 0x0F, 0x10, 0x2F, 0x0F, 0x0F, 0x04, 0x01, 0x04, 0x01, 0x10, 0x09, 0x2F, -/* 00018D20 */ 0x0F, 0x0F, 0x10, 0x2F, 0x0F, 0x0F, 0x05, 0x5A, 0x03, 0x0F, 0x1F, 0x04, 0xFF, 0x0D, 0x8C, 0x02, -/* 00018D30 */ 0x37, 0x0E, 0x4B, 0x0E, 0x6A, 0x0D, 0x0E, 0x03, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0E, 0x5A, 0x01, -/* 00018D40 */ 0x0B, 0x1F, 0x02, 0x00, 0x0D, 0x09, 0x08, 0x00, 0x47, 0x00, 0x0A, 0x09, 0x02, 0x00, 0xA6, 0x00, -/* 00018D50 */ 0x24, 0x00, 0xFE, 0x38, 0x03, 0xB4, 0xFE, 0x8F, 0x02, 0x23, 0xFE, 0xA0, 0x57, 0x08, 0x02, 0x00, -/* 00018D60 */ 0x00, 0x00, 0x07, 0x00, 0x27, 0x00, 0x0A, 0x00, 0x27, 0x00, 0x18, 0x00, 0x2E, 0x00, 0x28, 0x00, -/* 00018D70 */ 0x4C, 0x00, 0x49, 0x00, 0x77, 0x00, 0x1A, 0x00, 0x2A, 0x00, 0x08, 0x00, 0x15, 0x00, 0x00, 0xBF, -/* 00018D80 */ 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xFE, 0xEB, 0x01, 0x04, 0xA3, 0x41, 0xC1, 0x00, 0xFE, -/* 00018D90 */ 0x64, 0x03, 0x33, 0xFE, 0xF2, 0x50, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x06, 0x06, 0xFE, 0xF2, 0x50, -/* 00018DA0 */ 0xFE, 0xDD, 0x02, 0xFE, 0xDD, 0x02, 0x01, 0x0C, 0x0A, 0x11, 0x09, 0x53, 0x4C, 0x02, 0x04, 0x06, -/* 00018DB0 */ 0x06, 0x06, 0x06, 0x10, 0x06, 0xFE, 0xC2, 0x03, 0x06, 0xFE, 0xAD, 0x03, 0x06, 0xFE, 0xC3, 0x03, -/* 00018DC0 */ 0x01, 0xFF, 0x08, 0x05, 0xFE, 0xC4, 0x03, 0x05, 0xFE, 0xC5, 0x03, 0x05, 0xFE, 0xC6, 0x03, 0xFE, -/* 00018DD0 */ 0x16, 0x01, 0x4F, 0x0F, 0x95, 0x11, 0x0A, 0x0B, 0x47, 0x0F, 0x11, 0xA6, 0x11, 0x15, 0x03, 0x00, -/* 00018DE0 */ 0x0F, 0x11, 0x09, 0xF9, 0x00, 0x0C, 0x03, 0x00, 0x0C, 0x02, 0x09, 0x18, 0x00, 0x8C, 0x02, 0x24, -/* 00018DF0 */ 0x12, 0x6A, 0x11, 0x12, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x12, 0x5A, 0x01, 0x0F, 0x1F, 0x02, -/* 00018E00 */ 0x11, 0x11, 0x47, 0x0F, 0x11, 0x0C, 0x03, 0x00, 0x0C, 0x03, 0x09, 0x18, 0x00, 0x8C, 0x02, 0x24, -/* 00018E10 */ 0x12, 0x6A, 0x11, 0x12, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x12, 0x5A, 0x01, 0x0F, 0x1F, 0x02, -/* 00018E20 */ 0x11, 0x11, 0x47, 0x0F, 0x11, 0x0C, 0x03, 0x00, 0x0C, 0x04, 0x09, 0x18, 0x00, 0x8C, 0x02, 0x24, -/* 00018E30 */ 0x12, 0x6A, 0x11, 0x12, 0x02, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x12, 0x5A, 0x01, 0x0F, 0x1F, 0x02, -/* 00018E40 */ 0x11, 0x11, 0x47, 0x0F, 0x11, 0xA6, 0x11, 0x15, 0x03, 0x00, 0x0D, 0x11, 0x09, 0x89, 0x00, 0x8C, -/* 00018E50 */ 0x02, 0x37, 0x12, 0x4B, 0x12, 0x6A, 0x11, 0x12, 0x03, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x12, 0x5A, -/* 00018E60 */ 0x01, 0x0D, 0x5A, 0x02, 0x0F, 0x1F, 0x03, 0x11, 0x11, 0x0C, 0x03, 0x00, 0x11, 0x05, 0x09, 0x67, -/* 00018E70 */ 0x00, 0x8C, 0x02, 0x03, 0x12, 0x6A, 0x11, 0x12, 0x04, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x12, 0x8C, -/* 00018E80 */ 0x02, 0x0B, 0x13, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x06, 0x5A, 0x01, 0x0F, 0x1F, 0x02, 0x13, 0x13, -/* 00018E90 */ 0x5A, 0x01, 0x13, 0x8C, 0x02, 0x0B, 0x13, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x06, 0x5A, 0x01, 0x0B, -/* 00018EA0 */ 0x1F, 0x02, 0x13, 0x13, 0x5A, 0x02, 0x13, 0x47, 0x13, 0x07, 0x8C, 0x02, 0x37, 0x15, 0x4B, 0x15, -/* 00018EB0 */ 0x6A, 0x14, 0x15, 0x05, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x15, 0x5A, 0x01, 0x0D, 0x5A, 0x02, 0x09, -/* 00018EC0 */ 0x1F, 0x03, 0x14, 0x14, 0x01, 0x04, 0x01, 0x15, 0x14, 0x2F, 0x13, 0x13, 0x15, 0x2F, 0x13, 0x13, -/* 00018ED0 */ 0x08, 0x5A, 0x03, 0x13, 0x1F, 0x04, 0xFF, 0x11, 0x47, 0x00, 0x0F, 0x09, 0x08, 0x00, 0x47, 0x00, -/* 00018EE0 */ 0x0E, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x39, 0x03, 0xFE, 0x37, 0x03, 0xFE, 0x38, -/* 00018EF0 */ 0x03, 0xFE, 0x14, 0x03, 0xFE, 0x8F, 0x02, 0xBC, 0xFE, 0x3A, 0x51, 0x0D, 0x02, 0x00, 0x00, 0x00, -/* 00018F00 */ 0x07, 0x00, 0x28, 0x00, 0x0A, 0x00, 0x27, 0x00, 0x08, 0x00, 0x29, 0x00, 0x18, 0x00, 0x45, 0x00, -/* 00018F10 */ 0x08, 0x00, 0x28, 0x00, 0x18, 0x00, 0x3D, 0x00, 0x08, 0x00, 0x28, 0x00, 0x18, 0x00, 0x3D, 0x00, -/* 00018F20 */ 0x2C, 0x00, 0x53, 0x00, 0x67, 0x00, 0x84, 0x00, 0x06, 0x00, 0x21, 0x00, 0x08, 0x00, 0x15, 0x00, -/* 00018F30 */ 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x03, 0x00, 0xFE, 0xE0, 0x01, 0x08, 0xA2, 0x41, 0xC1, -/* 00018F40 */ 0x01, 0xFE, 0x3A, 0x03, 0x32, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0xE5, 0x4F, 0xFF, 0x00, 0x10, -/* 00018F50 */ 0x01, 0x00, 0x02, 0x02, 0xFE, 0xE5, 0x4F, 0xD8, 0xD8, 0x01, 0x09, 0x06, 0x0A, 0x07, 0x2A, 0x25, -/* 00018F60 */ 0x02, 0x04, 0x02, 0x02, 0x02, 0x02, 0x09, 0x08, 0x01, 0x00, 0x01, 0x02, 0x01, 0x20, 0x86, 0x8C, -/* 00018F70 */ 0x02, 0x0A, 0x0A, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x06, 0x1F, 0x02, 0x0A, 0x0A, -/* 00018F80 */ 0x47, 0x07, 0x0A, 0x47, 0x08, 0x03, 0x8C, 0x02, 0x21, 0x0A, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, -/* 00018F90 */ 0x5A, 0x01, 0x07, 0x1F, 0x02, 0x0A, 0x0A, 0x0F, 0x50, 0x00, 0x0A, 0x8C, 0x02, 0x20, 0x0A, 0x07, -/* 00018FA0 */ 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x07, 0x1F, 0x02, 0x0A, 0x0A, 0x0E, 0x3B, 0x00, 0x0A, -/* 00018FB0 */ 0x8C, 0x02, 0x37, 0x0B, 0x4B, 0x0B, 0x6A, 0x0A, 0x0B, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x0B, -/* 00018FC0 */ 0x47, 0x0C, 0x07, 0x8C, 0x02, 0x37, 0x0E, 0x4B, 0x0E, 0x6A, 0x0D, 0x0E, 0x01, 0x07, 0x03, 0x00, -/* 00018FD0 */ 0x5A, 0x00, 0x0E, 0x5A, 0x01, 0x04, 0x5A, 0x02, 0x05, 0x1F, 0x03, 0x0D, 0x0D, 0x33, 0x0C, 0x0C, -/* 00018FE0 */ 0x0D, 0x5A, 0x01, 0x0C, 0x1F, 0x02, 0x0A, 0x0A, 0x47, 0x08, 0x0A, 0x47, 0x00, 0x08, 0x09, 0x02, -/* 00018FF0 */ 0x00, 0xA6, 0x00, 0x24, 0x00, 0x1B, 0x29, 0xFE, 0xFF, 0x4F, 0x06, 0x00, 0x00, 0x00, 0x00, 0x14, -/* 00019000 */ 0x00, 0x25, 0x00, 0x03, 0x00, 0x15, 0x00, 0x2A, 0x00, 0x34, 0x00, 0x3B, 0x00, 0x3B, 0x00, 0x08, -/* 00019010 */ 0x00, 0x14, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0x01, 0x00, 0x88, 0x03, 0x00, 0xFE, 0xDC, 0x01, 0x08, -/* 00019020 */ 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x39, 0x03, 0x31, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0x7E, 0x4F, -/* 00019030 */ 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x7E, 0x4F, 0x5C, 0x5C, 0x01, 0x03, 0x03, 0x05, -/* 00019040 */ 0x03, 0x10, 0x0E, 0x02, 0x01, 0x04, 0x08, 0x2D, 0xA6, 0x05, 0x15, 0x03, 0x00, 0x03, 0x05, 0x09, -/* 00019050 */ 0x17, 0x00, 0x8C, 0x02, 0x07, 0x05, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x03, 0x1F, -/* 00019060 */ 0x02, 0x05, 0x05, 0x47, 0x00, 0x05, 0x09, 0x05, 0x00, 0xA6, 0x05, 0x47, 0x00, 0x05, 0x09, 0x02, -/* 00019070 */ 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xA0, 0x4F, 0x02, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x39, -/* 00019080 */ 0x00, 0x00, 0xBF, 0x5C, 0x00, 0x01, 0x00, 0x88, 0x03, 0x00, 0xFE, 0xD8, 0x01, 0x08, 0xA2, 0x41, -/* 00019090 */ 0xC1, 0x01, 0xFE, 0x38, 0x03, 0x30, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0x26, 0x4F, 0xFF, 0x00, -/* 000190A0 */ 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x26, 0x4F, 0x4D, 0x4D, 0x01, 0x03, 0x03, 0x05, 0x03, 0x10, -/* 000190B0 */ 0x0E, 0x02, 0x01, 0x04, 0x08, 0x2D, 0xA6, 0x05, 0x15, 0x03, 0x00, 0x03, 0x05, 0x09, 0x17, 0x00, -/* 000190C0 */ 0x8C, 0x02, 0x0A, 0x05, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x03, 0x1F, 0x02, 0x05, -/* 000190D0 */ 0x05, 0x47, 0x00, 0x05, 0x09, 0x05, 0x00, 0xA7, 0x05, 0x47, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA6, -/* 000190E0 */ 0x00, 0x24, 0x00, 0xFE, 0x40, 0x4F, 0x02, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x32, 0x00, 0x00, -/* 000190F0 */ 0xBF, 0x5C, 0x00, 0x01, 0x00, 0x88, 0x03, 0x00, 0xFE, 0xD4, 0x01, 0x08, 0xA2, 0x41, 0xC1, 0x01, -/* 00019100 */ 0xFE, 0x37, 0x03, 0x2F, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0xC8, 0x4E, 0xFF, 0x00, 0x10, 0x01, -/* 00019110 */ 0x00, 0x02, 0x02, 0xFE, 0xC8, 0x4E, 0x53, 0x53, 0x01, 0x03, 0x03, 0x05, 0x03, 0x10, 0x0E, 0x02, -/* 00019120 */ 0x01, 0x04, 0x08, 0x2D, 0xA6, 0x05, 0x15, 0x03, 0x00, 0x03, 0x05, 0x09, 0x17, 0x00, 0x8C, 0x02, -/* 00019130 */ 0x0B, 0x05, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x03, 0x1F, 0x02, 0x05, 0x05, 0x47, -/* 00019140 */ 0x00, 0x05, 0x09, 0x05, 0x00, 0xA6, 0x05, 0x47, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, -/* 00019150 */ 0x00, 0xFE, 0xE2, 0x4E, 0x02, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x38, 0x00, 0x00, 0xBF, 0x5C, -/* 00019160 */ 0x00, 0xC1, 0x03, 0x88, 0x03, 0x00, 0xFE, 0xCD, 0x01, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x36, -/* 00019170 */ 0x03, 0x2E, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0x12, 0x4E, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, -/* 00019180 */ 0x02, 0xFE, 0x12, 0x4E, 0xAB, 0xAB, 0x01, 0x04, 0x04, 0x06, 0x03, 0x17, 0x15, 0x02, 0x02, 0x01, -/* 00019190 */ 0x01, 0x01, 0x01, 0x05, 0x07, 0x08, 0x47, 0x14, 0x03, 0x00, 0x04, 0x02, 0x09, 0x12, 0x00, 0x8C, -/* 000191A0 */ 0x02, 0x03, 0x07, 0x6A, 0x06, 0x07, 0x00, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x07, 0x1F, 0x01, 0xFF, -/* 000191B0 */ 0x06, 0xA6, 0x06, 0x15, 0x03, 0x00, 0x04, 0x06, 0x09, 0x17, 0x00, 0x8C, 0x02, 0x08, 0x06, 0x07, -/* 000191C0 */ 0x02, 0x00, 0x5A, 0x00, 0x03, 0x5A, 0x01, 0x04, 0x1F, 0x02, 0x06, 0x06, 0x47, 0x00, 0x06, 0x09, -/* 000191D0 */ 0x05, 0x00, 0xA6, 0x06, 0x47, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x89, -/* 000191E0 */ 0x02, 0xFE, 0x2C, 0x4E, 0x04, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x22, 0x00, 0x12, 0x00, 0x36, -/* 000191F0 */ 0x00, 0x2B, 0x00, 0x38, 0x00, 0x00, 0x3F, 0x5D, 0x00, 0xC1, 0x53, 0xAD, 0x25, 0x00, 0xFE, 0x8F, -/* 00019200 */ 0x01, 0x1A, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x6D, 0x03, 0x2C, 0xFE, 0x67, 0x44, 0x01, 0xFF, 0x00, -/* 00019210 */ 0x10, 0x01, 0x00, 0x05, 0x05, 0xFE, 0x67, 0x44, 0xFE, 0x86, 0x09, 0xFE, 0x86, 0x09, 0x05, 0xFE, -/* 00019220 */ 0xCA, 0x01, 0xFE, 0xB8, 0x03, 0xFE, 0xB9, 0x03, 0xFE, 0xBA, 0x03, 0xFE, 0xBB, 0x03, 0x10, 0x0B, -/* 00019230 */ 0x16, 0x05, 0x7B, 0x77, 0x02, 0x0A, 0x09, 0x09, 0x09, 0x09, 0x01, 0x02, 0x13, 0x14, 0x15, 0x16, -/* 00019240 */ 0x05, 0xFE, 0xBC, 0x03, 0x08, 0x06, 0xFE, 0xBD, 0x03, 0x07, 0x05, 0xFE, 0xBE, 0x03, 0x01, 0x02, -/* 00019250 */ 0x05, 0xFE, 0xBF, 0x03, 0x01, 0xFF, 0x01, 0x00, 0xFE, 0x88, 0x01, 0x94, 0x02, 0x0D, 0x4F, 0x0F, -/* 00019260 */ 0x4F, 0x10, 0x4F, 0x11, 0x4F, 0x12, 0x4F, 0x18, 0x94, 0x03, 0x18, 0x4F, 0x18, 0x94, 0x04, 0x18, -/* 00019270 */ 0x4F, 0x18, 0x94, 0x05, 0x18, 0x4F, 0x18, 0x94, 0x06, 0x18, 0x90, 0x02, 0x18, 0x5F, 0x18, 0x18, -/* 00019280 */ 0x00, 0x47, 0x0F, 0x18, 0xA6, 0x18, 0x94, 0x03, 0x18, 0x14, 0x03, 0x00, 0x0F, 0x02, 0x09, 0x1C, -/* 00019290 */ 0x00, 0x8C, 0x01, 0x08, 0x18, 0x4B, 0x18, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x03, 0x5A, 0x01, 0x0B, -/* 000192A0 */ 0x5A, 0x02, 0x0C, 0x1F, 0x03, 0x18, 0x18, 0x94, 0x03, 0x18, 0x09, 0x19, 0x00, 0x8C, 0x01, 0x09, -/* 000192B0 */ 0x18, 0x4B, 0x18, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x03, 0x5A, 0x01, 0x0B, 0x5A, 0x02, 0x0C, 0x1F, -/* 000192C0 */ 0x03, 0x18, 0x18, 0x94, 0x03, 0x18, 0x90, 0x03, 0x18, 0x5F, 0x18, 0x18, 0x01, 0x94, 0x04, 0x18, -/* 000192D0 */ 0x8C, 0x02, 0x35, 0x18, 0x4B, 0x18, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x03, 0xCB, 0x00, 0x00, 0x00, -/* 000192E0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x90, 0x04, 0x1A, 0x78, 0x1A, 0x19, 0x02, -/* 000192F0 */ 0x5A, 0x01, 0x19, 0x1F, 0x02, 0x18, 0x18, 0x94, 0x05, 0x18, 0x94, 0x06, 0x06, 0x8C, 0x02, 0x37, -/* 00019300 */ 0x19, 0x4B, 0x19, 0x6A, 0x18, 0x19, 0x03, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x19, 0x5A, 0x01, 0x0E, -/* 00019310 */ 0xD3, 0x00, 0x1A, 0x5A, 0x02, 0x1A, 0x1F, 0x03, 0xFF, 0x18, 0x90, 0x06, 0x18, 0xA4, 0x18, 0x18, -/* 00019320 */ 0x04, 0x11, 0x03, 0x00, 0x18, 0x07, 0x09, 0xA6, 0x00, 0x8C, 0x02, 0x37, 0x19, 0x4B, 0x19, 0x6A, -/* 00019330 */ 0x18, 0x19, 0x05, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x19, 0x90, 0x04, 0x1A, 0x5A, 0x01, 0x1A, 0x5A, -/* 00019340 */ 0x02, 0x08, 0x1F, 0x03, 0x18, 0x18, 0x47, 0x10, 0x18, 0x14, 0x03, 0x00, 0x10, 0x09, 0x09, 0x12, -/* 00019350 */ 0x00, 0x90, 0x04, 0x19, 0x90, 0x06, 0x1A, 0x2F, 0x18, 0x19, 0x1A, 0x94, 0x04, 0x18, 0xFA, 0x18, -/* 00019360 */ 0x09, 0x51, 0x00, 0x8C, 0x02, 0x37, 0x19, 0x4B, 0x19, 0x6A, 0x18, 0x19, 0x06, 0x07, 0x04, 0x00, -/* 00019370 */ 0x5A, 0x00, 0x19, 0x90, 0x04, 0x1A, 0x5A, 0x01, 0x1A, 0x5A, 0x02, 0x0A, 0x5A, 0x03, 0x10, 0x1F, -/* 00019380 */ 0x04, 0x18, 0x18, 0x47, 0x11, 0x18, 0x8C, 0x02, 0x37, 0x19, 0x4B, 0x19, 0x6A, 0x18, 0x19, 0x06, -/* 00019390 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x19, 0x90, 0x04, 0x1A, 0x5A, 0x01, 0x1A, 0x5A, 0x02, 0x10, 0x1F, -/* 000193A0 */ 0x03, 0x18, 0x18, 0x47, 0x12, 0x18, 0x90, 0x06, 0x18, 0x2F, 0x18, 0x11, 0x18, 0x2F, 0x18, 0x18, -/* 000193B0 */ 0x12, 0x94, 0x04, 0x18, 0x8C, 0x02, 0x03, 0x19, 0x6A, 0x18, 0x19, 0x07, 0x07, 0x02, 0x00, 0x5A, -/* 000193C0 */ 0x00, 0x19, 0x90, 0x04, 0x1A, 0x5A, 0x01, 0x1A, 0x1F, 0x02, 0x18, 0x18, 0x94, 0x04, 0x18, 0x90, -/* 000193D0 */ 0x05, 0x18, 0x90, 0x04, 0x19, 0x74, 0x19, 0x18, 0x08, 0x90, 0x05, 0x00, 0x09, 0x02, 0x00, 0xA6, -/* 000193E0 */ 0x00, 0x24, 0x00, 0x01, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, -/* 000193F0 */ 0x00, 0x00, 0xBD, 0x03, 0x00, 0x00, 0xFE, 0xC0, 0x03, 0xFE, 0xF7, 0x01, 0xFE, 0xBD, 0x03, 0x86, -/* 00019400 */ 0xC1, 0xFE, 0x0E, 0x03, 0xFE, 0x4C, 0x01, 0xFE, 0xD8, 0x01, 0xFE, 0xF7, 0x01, 0xFE, 0xC0, 0x44, -/* 00019410 */ 0x14, 0x1F, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x2F, 0x00, 0x05, 0x00, 0x0F, 0x00, 0x08, 0x00, 0x28, -/* 00019420 */ 0x00, 0x1C, 0x00, 0x55, 0x00, 0x19, 0x00, 0x4C, 0x00, 0x0A, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x3A, -/* 00019430 */ 0x00, 0x03, 0x00, 0x27, 0x00, 0x1D, 0x00, 0x37, 0x05, 0x0F, 0x00, 0x31, 0x00, 0x20, 0x00, 0x46, -/* 00019440 */ 0x00, 0x08, 0x00, 0x2B, 0x00, 0x12, 0x00, 0x48, 0x00, 0x23, 0x00, 0x50, 0x00, 0x20, 0x00, 0x4E, -/* 00019450 */ 0x00, 0x0E, 0x00, 0x5C, 0x00, 0x1B, 0x00, 0x4D, 0x00, 0x0A, 0x00, 0x25, 0x00, 0x08, 0x00, 0x13, -/* 00019460 */ 0x00, 0x00, 0x66, 0x94, 0x01, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x43, 0xA8, 0x01, 0x00, 0xFE, 0x9B, -/* 00019470 */ 0x01, 0x29, 0xA2, 0x41, 0xD1, 0x00, 0x2D, 0xFE, 0x6D, 0x46, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, -/* 00019480 */ 0x02, 0xFE, 0x6D, 0x46, 0xFE, 0x0A, 0x05, 0xFE, 0x0A, 0x05, 0x41, 0x0B, 0x08, 0x0F, 0x04, 0x6B, -/* 00019490 */ 0x60, 0x03, 0x08, 0x04, 0x04, 0x04, 0x04, 0x01, 0x0E, 0x0F, 0x08, 0x01, 0x00, 0x06, 0xFE, 0x5B, -/* 000194A0 */ 0x03, 0x01, 0xFF, 0x06, 0xFE, 0xAF, 0x03, 0x06, 0xFE, 0xC1, 0x03, 0xFE, 0x60, 0x01, 0x4F, 0x09, -/* 000194B0 */ 0x4F, 0x0A, 0x4F, 0x0B, 0x4F, 0x0C, 0x4F, 0x0D, 0x8C, 0x02, 0x07, 0x10, 0x4B, 0x10, 0x07, 0x03, -/* 000194C0 */ 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x08, 0x8C, 0x01, 0x04, 0x11, 0x4B, 0x11, 0x5A, 0x02, 0x11, -/* 000194D0 */ 0x1F, 0x03, 0x10, 0x10, 0x47, 0x09, 0x10, 0x95, 0x10, 0x09, 0x03, 0x47, 0x0A, 0x10, 0x47, 0x0B, -/* 000194E0 */ 0x04, 0x8C, 0x01, 0x03, 0x10, 0x4B, 0x10, 0x5F, 0x10, 0x10, 0x00, 0x0E, 0xA2, 0x00, 0x10, 0x8C, -/* 000194F0 */ 0x02, 0x0A, 0x10, 0x4B, 0x10, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x8C, 0x01, 0x03, 0x11, 0x4B, -/* 00019500 */ 0x11, 0x5F, 0x11, 0x11, 0x01, 0x5A, 0x01, 0x11, 0x5A, 0x02, 0x08, 0x1F, 0x03, 0x10, 0x10, 0x47, -/* 00019510 */ 0x0C, 0x10, 0xA6, 0x10, 0x15, 0x03, 0x00, 0x0C, 0x10, 0x09, 0x75, 0x00, 0x15, 0x03, 0x00, 0x0C, -/* 00019520 */ 0x04, 0x09, 0x48, 0x00, 0x8C, 0x03, 0x37, 0x11, 0x4B, 0x11, 0x6A, 0x10, 0x11, 0x02, 0x07, 0x03, -/* 00019530 */ 0x00, 0x5A, 0x00, 0x11, 0x5A, 0x01, 0x09, 0x5A, 0x02, 0x0C, 0x1F, 0x03, 0x10, 0x10, 0x15, 0x03, -/* 00019540 */ 0x00, 0x10, 0x05, 0x09, 0x23, 0x00, 0x47, 0x0A, 0x0C, 0x47, 0x10, 0x06, 0x01, 0x04, 0x01, 0x11, -/* 00019550 */ 0x08, 0x2F, 0x10, 0x10, 0x11, 0x2F, 0x10, 0x10, 0x06, 0x01, 0x04, 0x01, 0x11, 0x0A, 0x2F, 0x10, -/* 00019560 */ 0x10, 0x11, 0x2F, 0x10, 0x10, 0x04, 0x47, 0x0B, 0x10, 0x09, 0x25, 0x00, 0x8C, 0x03, 0x37, 0x11, -/* 00019570 */ 0x4B, 0x11, 0x6A, 0x10, 0x11, 0x02, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x11, 0x5A, 0x01, 0x09, 0x5A, -/* 00019580 */ 0x02, 0x07, 0x1F, 0x03, 0x10, 0x10, 0x15, 0x03, 0x00, 0x10, 0x05, 0x09, 0x03, 0x00, 0x47, 0x0A, -/* 00019590 */ 0x07, 0x8C, 0x03, 0x37, 0x11, 0x4B, 0x11, 0x6A, 0x10, 0x11, 0x03, 0x07, 0x03, 0x00, 0x5A, 0x00, -/* 000195A0 */ 0x11, 0x8C, 0x01, 0x02, 0x12, 0x5A, 0x01, 0x12, 0x5A, 0x02, 0x08, 0x1F, 0x03, 0x10, 0x10, 0x0E, -/* 000195B0 */ 0x3B, 0x00, 0x10, 0x8C, 0x01, 0x02, 0x10, 0x95, 0x10, 0x10, 0x08, 0x47, 0x0D, 0x10, 0x8C, 0x03, -/* 000195C0 */ 0x37, 0x11, 0x4B, 0x11, 0x6A, 0x10, 0x11, 0x02, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x11, 0x5A, 0x01, -/* 000195D0 */ 0x09, 0x5A, 0x02, 0x0D, 0x1F, 0x03, 0x10, 0x10, 0x15, 0x03, 0x00, 0x10, 0x05, 0x09, 0x0E, 0x00, -/* 000195E0 */ 0x15, 0x03, 0x00, 0x0D, 0x0A, 0x09, 0x06, 0x00, 0x47, 0x0A, 0x0D, 0x47, 0x0B, 0x04, 0x8C, 0x01, -/* 000195F0 */ 0x05, 0x10, 0x4B, 0x10, 0x9A, 0x0A, 0x10, 0x08, 0x8C, 0x01, 0x06, 0x11, 0x4B, 0x11, 0x2F, 0x10, -/* 00019600 */ 0x11, 0x0B, 0x01, 0x34, 0x01, 0x01, 0x06, 0x10, 0xFA, 0x10, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xB7, -/* 00019610 */ 0x03, 0xFE, 0xB7, 0x03, 0xFE, 0x14, 0x03, 0xA7, 0xFE, 0x8A, 0x46, 0x15, 0x0A, 0x00, 0x00, 0x00, -/* 00019620 */ 0x1F, 0x00, 0x46, 0x00, 0x07, 0x00, 0x2A, 0x00, 0x03, 0x00, 0x31, 0x00, 0x0E, 0x00, 0x23, 0x00, -/* 00019630 */ 0x23, 0x00, 0x50, 0x00, 0x0A, 0x00, 0x38, 0x00, 0x08, 0x00, 0x35, 0x00, 0x22, 0x00, 0x58, 0x00, -/* 00019640 */ 0x03, 0x00, 0x34, 0x00, 0x23, 0x00, 0x66, 0x00, 0x22, 0x00, 0x4C, 0x00, 0x03, 0x00, 0x53, 0x00, -/* 00019650 */ 0x22, 0x00, 0x36, 0x00, 0x0B, 0x00, 0x33, 0x00, 0x22, 0x00, 0x4E, 0x00, 0x08, 0x00, 0x36, 0x00, -/* 00019660 */ 0x03, 0x00, 0x2E, 0x00, 0x03, 0x00, 0x64, 0x00, 0x0A, 0x00, 0x21, 0x00, 0x14, 0x00, 0x3A, 0x00, -/* 00019670 */ 0x00, 0xBF, 0x7C, 0x00, 0xC3, 0x43, 0xA8, 0x09, 0x00, 0xFE, 0x5E, 0x01, 0x22, 0xA2, 0x41, 0xC1, -/* 00019680 */ 0x00, 0xFE, 0x6C, 0x03, 0x2B, 0xFE, 0xFA, 0x3C, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, -/* 00019690 */ 0xFA, 0x3C, 0xFE, 0x46, 0x04, 0xFE, 0x46, 0x04, 0x01, 0x11, 0x0B, 0x16, 0x05, 0x6C, 0x59, 0x21, -/* 000196A0 */ 0x02, 0x02, 0x01, 0x05, 0x05, 0x05, 0x05, 0x02, 0x15, 0x16, 0x7B, 0xE9, 0x01, 0x02, 0x06, 0xFE, -/* 000196B0 */ 0xAF, 0x03, 0x01, 0xFF, 0x01, 0x04, 0x0C, 0x0B, 0x01, 0x01, 0x06, 0xFE, 0x5B, 0x03, 0x01, 0x03, -/* 000196C0 */ 0xFE, 0x5C, 0x01, 0x4F, 0x0D, 0x4F, 0x0E, 0x4F, 0x0F, 0x4F, 0x10, 0x4F, 0x11, 0x4F, 0x12, 0x4F, -/* 000196D0 */ 0x13, 0x4F, 0x14, 0x8C, 0x02, 0x38, 0x19, 0x4B, 0x19, 0x6A, 0x18, 0x19, 0x00, 0x07, 0x02, 0x00, -/* 000196E0 */ 0x5A, 0x00, 0x19, 0xA4, 0x1A, 0x0C, 0x01, 0x43, 0x1A, 0x1A, 0x02, 0x5A, 0x01, 0x1A, 0x1F, 0x02, -/* 000196F0 */ 0xFF, 0x18, 0xA4, 0x18, 0x0B, 0x02, 0x47, 0x0D, 0x18, 0x8C, 0x02, 0x37, 0x19, 0x4B, 0x19, 0x6A, -/* 00019700 */ 0x18, 0x19, 0x03, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x19, 0x5A, 0x01, 0x0B, 0x47, 0x1A, 0x03, 0x01, -/* 00019710 */ 0x04, 0x01, 0x1B, 0x0C, 0x2F, 0x1A, 0x1A, 0x1B, 0x2F, 0x1A, 0x1A, 0x03, 0x5A, 0x02, 0x1A, 0x1F, -/* 00019720 */ 0x03, 0x18, 0x18, 0x47, 0x0E, 0x18, 0x15, 0x03, 0x00, 0x0E, 0x04, 0x09, 0x9E, 0x00, 0x2F, 0x18, -/* 00019730 */ 0x0E, 0x05, 0x47, 0x0F, 0x18, 0x47, 0x10, 0x0F, 0x47, 0x11, 0x0F, 0x47, 0x12, 0x06, 0xEA, 0x00, -/* 00019740 */ 0x0F, 0x68, 0x00, 0x12, 0x8C, 0x02, 0x37, 0x19, 0x4B, 0x19, 0x6A, 0x18, 0x19, 0x03, 0x07, 0x04, -/* 00019750 */ 0x00, 0x5A, 0x00, 0x19, 0x5A, 0x01, 0x0B, 0x5A, 0x02, 0x03, 0x5A, 0x03, 0x11, 0x1F, 0x04, 0x18, -/* 00019760 */ 0x18, 0x47, 0x13, 0x18, 0x14, 0x03, 0x00, 0x13, 0x04, 0x09, 0x0A, 0x00, 0x35, 0x19, 0x0D, 0x11, -/* 00019770 */ 0x47, 0x18, 0x19, 0x09, 0x07, 0x00, 0x35, 0x19, 0x13, 0x11, 0x47, 0x18, 0x19, 0x47, 0x14, 0x18, -/* 00019780 */ 0x14, 0x03, 0x00, 0x14, 0x02, 0x09, 0x06, 0x00, 0x47, 0x12, 0x07, 0x09, 0x1B, 0x00, 0x14, 0x03, -/* 00019790 */ 0x00, 0x13, 0x04, 0x09, 0x09, 0x00, 0x47, 0x10, 0x0D, 0x47, 0x12, 0x07, 0x09, 0x0A, 0x00, 0x47, -/* 000197A0 */ 0x10, 0x13, 0x2F, 0x18, 0x13, 0x08, 0x47, 0x11, 0x18, 0x09, 0x92, 0xFF, 0x8C, 0x02, 0x37, 0x19, -/* 000197B0 */ 0x4B, 0x19, 0x6A, 0x18, 0x19, 0x04, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x19, 0x5A, 0x01, 0x0B, 0x5A, -/* 000197C0 */ 0x02, 0x0F, 0x5A, 0x03, 0x10, 0x1F, 0x04, 0x00, 0x18, 0x09, 0x51, 0x00, 0x8C, 0x02, 0x37, 0x19, -/* 000197D0 */ 0x4B, 0x19, 0x6A, 0x18, 0x19, 0x03, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x19, 0x5A, 0x01, 0x0B, 0x47, -/* 000197E0 */ 0x1A, 0x03, 0x01, 0x04, 0x01, 0x1B, 0x0C, 0x2F, 0x1A, 0x1A, 0x1B, 0x2F, 0x1A, 0x1A, 0x09, 0x5A, -/* 000197F0 */ 0x02, 0x1A, 0x1F, 0x03, 0x18, 0x18, 0x47, 0x0E, 0x18, 0x15, 0x03, 0x00, 0x0E, 0x04, 0x09, 0x15, -/* 00019800 */ 0x00, 0x2F, 0x18, 0x0E, 0x0A, 0x14, 0x03, 0x00, 0x18, 0x0D, 0x09, 0x09, 0x00, 0x47, 0x00, 0x09, -/* 00019810 */ 0x09, 0x0A, 0x00, 0x09, 0x05, 0x00, 0xA6, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, -/* 00019820 */ 0x27, 0x03, 0xC1, 0xC1, 0xFE, 0x0E, 0x03, 0xFE, 0x4C, 0x01, 0xFE, 0x1E, 0x3D, 0x18, 0x10, 0x00, -/* 00019830 */ 0x00, 0x00, 0x1F, 0x00, 0x28, 0x00, 0x07, 0x00, 0x51, 0x00, 0x2D, 0x00, 0x3A, 0x00, 0x08, 0x00, -/* 00019840 */ 0x1E, 0x00, 0x07, 0x00, 0x23, 0x00, 0x03, 0x00, 0x1D, 0x00, 0x03, 0x00, 0x1B, 0x00, 0x05, 0x00, -/* 00019850 */ 0x25, 0x00, 0x04, 0x00, 0x19, 0x00, 0x20, 0x00, 0x3E, 0x00, 0x1C, 0x00, 0x39, 0x00, 0x08, 0x00, -/* 00019860 */ 0x25, 0x00, 0x06, 0x00, 0x24, 0x00, 0x08, 0x00, 0x24, 0x00, 0x03, 0x00, 0x20, 0x00, 0x06, 0x00, -/* 00019870 */ 0x3A, 0x00, 0x03, 0x00, 0x1D, 0x00, 0x0A, 0x00, 0x38, 0x00, 0x20, 0x00, 0x75, 0x00, 0x2D, 0x00, -/* 00019880 */ 0x35, 0x00, 0x14, 0x00, 0x32, 0x00, 0x09, 0x00, 0x28, 0x00, 0x07, 0x00, 0x20, 0x00, 0x00, 0xBF, -/* 00019890 */ 0x7C, 0x00, 0xC3, 0x43, 0xA8, 0x09, 0x00, 0xFE, 0x3D, 0x01, 0x1A, 0xA2, 0x41, 0xC1, 0x00, 0xFE, -/* 000198A0 */ 0x6A, 0x03, 0x2A, 0xFE, 0x58, 0x38, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x58, 0x38, -/* 000198B0 */ 0xFE, 0x06, 0x03, 0xFE, 0x06, 0x03, 0x01, 0x0B, 0x06, 0x0D, 0x04, 0x3D, 0x37, 0x26, 0x02, 0x04, -/* 000198C0 */ 0x01, 0x06, 0x06, 0x06, 0x06, 0x02, 0x0C, 0x0D, 0x22, 0xA4, 0x01, 0x00, 0x01, 0x01, 0x08, 0x07, -/* 000198D0 */ 0xC2, 0x4F, 0x08, 0x4F, 0x09, 0x4F, 0x0A, 0x4F, 0x0B, 0x8C, 0x02, 0x37, 0x10, 0x4B, 0x10, 0x6A, -/* 000198E0 */ 0x0F, 0x10, 0x00, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x10, 0x1F, 0x01, 0x0F, 0x0F, 0x47, 0x08, 0x0F, -/* 000198F0 */ 0x47, 0x09, 0x02, 0xEA, 0x00, 0xA4, 0x0F, 0x07, 0x01, 0x12, 0x03, 0x00, 0x09, 0x0F, 0x09, 0x74, -/* 00019900 */ 0x00, 0x8C, 0x01, 0x0E, 0x0F, 0x4B, 0x0F, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, 0x95, 0x10, 0x07, -/* 00019910 */ 0x09, 0x5A, 0x01, 0x10, 0x1F, 0x02, 0x0F, 0x0F, 0x47, 0x0A, 0x0F, 0x14, 0x03, 0x00, 0x0A, 0x05, -/* 00019920 */ 0x09, 0x03, 0x00, 0x09, 0x49, 0x00, 0x8C, 0x01, 0x06, 0x0F, 0x4B, 0x0F, 0x07, 0x03, 0x00, 0x5A, -/* 00019930 */ 0x00, 0x04, 0x5A, 0x01, 0x06, 0x5F, 0x10, 0x0A, 0x02, 0x5A, 0x02, 0x10, 0x1F, 0x03, 0x0F, 0x0F, -/* 00019940 */ 0x47, 0x0B, 0x0F, 0xA6, 0x0F, 0x15, 0x03, 0x00, 0x0B, 0x0F, 0x09, 0x22, 0x00, 0x74, 0x0B, 0x08, -/* 00019950 */ 0x03, 0x95, 0x0F, 0x07, 0x09, 0x5F, 0x10, 0x0A, 0x02, 0x15, 0x03, 0x00, 0x0F, 0x10, 0x09, 0x08, -/* 00019960 */ 0x00, 0x5F, 0x0F, 0x0A, 0x04, 0x74, 0x0F, 0x08, 0x05, 0x47, 0x00, 0x08, 0x09, 0x22, 0x00, 0x28, -/* 00019970 */ 0x09, 0x09, 0x09, 0x7E, 0xFF, 0x8C, 0x01, 0x05, 0x0F, 0x4B, 0x0F, 0x07, 0x01, 0x00, 0x5A, 0x00, -/* 00019980 */ 0x04, 0x1F, 0x01, 0x0F, 0x0F, 0x74, 0x0F, 0x08, 0x03, 0x47, 0x00, 0x08, 0x09, 0x02, 0x00, 0xA6, -/* 00019990 */ 0x00, 0x24, 0x00, 0x61, 0xC1, 0xFE, 0x28, 0x03, 0xFE, 0xF7, 0x01, 0xFE, 0xB6, 0x03, 0xFE, 0xB7, -/* 000199A0 */ 0x03, 0xFE, 0x91, 0x38, 0x10, 0x08, 0x00, 0x00, 0x00, 0x17, 0x00, 0x28, 0x00, 0x05, 0x00, 0x0B, -/* 000199B0 */ 0x00, 0x0C, 0x00, 0x30, 0x00, 0x1A, 0x00, 0x45, 0x00, 0x08, 0x00, 0x2E, 0x00, 0x03, 0x00, 0x25, -/* 000199C0 */ 0x00, 0x1D, 0x00, 0x60, 0x00, 0x0A, 0x00, 0x35, 0x00, 0x04, 0x00, 0x31, 0x00, 0x10, 0x00, 0x46, -/* 000199D0 */ 0x00, 0x08, 0x00, 0x56, 0x00, 0x06, 0x00, 0xF3, 0xFD, 0x06, 0x00, 0x3D, 0x02, 0x14, 0x00, 0x2C, -/* 000199E0 */ 0x00, 0x08, 0x00, 0x13, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x13, 0x88, 0x21, 0x00, 0xFE, 0x25, -/* 000199F0 */ 0x01, 0x1D, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x69, 0x03, 0x29, 0xFE, 0x52, 0x35, 0xFF, 0x00, 0x10, -/* 00019A00 */ 0x01, 0x00, 0x03, 0x03, 0xFE, 0x52, 0x35, 0xFE, 0xA2, 0x01, 0xFE, 0xA2, 0x01, 0x01, 0x08, 0x0F, -/* 00019A10 */ 0x14, 0x04, 0x18, 0x15, 0x02, 0x01, 0x07, 0x07, 0x07, 0x07, 0x01, 0x13, 0x06, 0xFE, 0xB0, 0x03, -/* 00019A20 */ 0x01, 0x00, 0x06, 0xFE, 0xB1, 0x03, 0x01, 0x01, 0x06, 0xFE, 0xB2, 0x03, 0x01, 0x02, 0x06, 0xFE, -/* 00019A30 */ 0xB3, 0x03, 0x01, 0x03, 0x06, 0xFE, 0xB4, 0x03, 0x01, 0x04, 0x06, 0xFE, 0xB5, 0x03, 0x01, 0x05, -/* 00019A40 */ 0x07, 0x55, 0x4F, 0x11, 0x4F, 0x12, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, -/* 00019A50 */ 0x00, 0x00, 0x00, 0x78, 0x03, 0x14, 0x00, 0x78, 0x05, 0x14, 0x01, 0x78, 0x07, 0x14, 0x02, 0x78, -/* 00019A60 */ 0x09, 0x14, 0x03, 0x78, 0x0B, 0x14, 0x04, 0x78, 0x0D, 0x14, 0x05, 0x47, 0x11, 0x14, 0x8C, 0x02, -/* 00019A70 */ 0x03, 0x15, 0x6A, 0x14, 0x15, 0x06, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x15, 0x95, 0x16, 0x11, 0x0F, -/* 00019A80 */ 0x5A, 0x01, 0x16, 0x5A, 0x02, 0x10, 0x1F, 0x03, 0x14, 0x14, 0x47, 0x12, 0x14, 0x47, 0x00, 0x12, -/* 00019A90 */ 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x06, -/* 00019AA0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB0, 0x03, 0x00, 0x00, 0xB1, 0x03, 0x00, 0x00, 0xB2, 0x03, -/* 00019AB0 */ 0x00, 0x00, 0xB3, 0x03, 0x00, 0x00, 0xB4, 0x03, 0x00, 0x00, 0xB5, 0x03, 0x00, 0x00, 0xFE, 0xB0, -/* 00019AC0 */ 0x03, 0xFE, 0xB1, 0x03, 0xFE, 0xB2, 0x03, 0xFE, 0xB3, 0x03, 0xFE, 0xB4, 0x03, 0xFE, 0xB5, 0x03, -/* 00019AD0 */ 0xFE, 0xEA, 0x01, 0xFE, 0xE6, 0x35, 0x04, 0x04, 0x00, 0x00, 0x00, 0x28, 0x00, 0x9F, 0x00, 0x1F, -/* 00019AE0 */ 0x00, 0x54, 0x00, 0x08, 0x00, 0x1A, 0x00, 0x00, 0xBF, 0x7C, 0x00, 0xC3, 0x43, 0xA8, 0x09, 0x00, -/* 00019AF0 */ 0xF7, 0x20, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x68, 0x03, 0x28, 0xFE, 0x88, 0x2E, 0xFF, 0x00, 0x10, -/* 00019B00 */ 0x01, 0x00, 0x03, 0x03, 0xFE, 0x88, 0x2E, 0xFE, 0x55, 0x04, 0xFE, 0x55, 0x04, 0x01, 0x0B, 0x09, -/* 00019B10 */ 0x10, 0x05, 0x3B, 0x34, 0x2D, 0x02, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x0F, 0x10, 0x1D, -/* 00019B20 */ 0xB5, 0x44, 0x66, 0x06, 0xFE, 0xAF, 0x03, 0x0B, 0x08, 0x01, 0xFF, 0x01, 0x01, 0x01, 0x00, 0x01, -/* 00019B30 */ 0x02, 0xB9, 0x4F, 0x0B, 0x4F, 0x0C, 0x4F, 0x0D, 0x4F, 0x0E, 0xA6, 0x12, 0x14, 0x03, 0x00, 0x0A, -/* 00019B40 */ 0x12, 0x09, 0x05, 0x00, 0xA6, 0x00, 0x09, 0xA0, 0x00, 0x47, 0x0B, 0x0A, 0x47, 0x0C, 0x02, 0xEA, -/* 00019B50 */ 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x04, 0x5A, 0x01, 0x0B, 0x1F, 0x02, 0x12, 0x09, 0x0E, 0x06, -/* 00019B60 */ 0x00, 0x12, 0x47, 0x00, 0x0B, 0x09, 0x81, 0x00, 0x47, 0x0D, 0x05, 0xA4, 0x12, 0x0B, 0x00, 0x35, -/* 00019B70 */ 0x12, 0x12, 0x06, 0x47, 0x0E, 0x12, 0xEA, 0x01, 0x10, 0x03, 0x00, 0x0E, 0x07, 0x09, 0x18, 0x00, -/* 00019B80 */ 0x95, 0x12, 0x0B, 0x0E, 0x14, 0x03, 0x00, 0x12, 0x0C, 0x09, 0x06, 0x00, 0x47, 0x0D, 0x0E, 0x09, -/* 00019B90 */ 0x06, 0x00, 0x29, 0x0E, 0x0E, 0x09, 0xDE, 0xFF, 0x14, 0x03, 0x00, 0x0D, 0x05, 0x09, 0x08, 0x00, -/* 00019BA0 */ 0xA6, 0x00, 0x09, 0x44, 0x00, 0x09, 0x1C, 0x00, 0x10, 0x03, 0x00, 0x0D, 0x08, 0x09, 0x14, 0x00, -/* 00019BB0 */ 0x35, 0x12, 0x0D, 0x08, 0x95, 0x12, 0x0B, 0x12, 0x14, 0x03, 0x00, 0x12, 0x0C, 0x09, 0x04, 0x00, -/* 00019BC0 */ 0x35, 0x0D, 0x0D, 0x08, 0x8C, 0x02, 0x37, 0x13, 0x4B, 0x13, 0x6A, 0x12, 0x13, 0x01, 0x07, 0x04, -/* 00019BD0 */ 0x00, 0x5A, 0x00, 0x13, 0x5A, 0x01, 0x0B, 0x5A, 0x02, 0x07, 0x5A, 0x03, 0x0D, 0x1F, 0x04, 0x12, -/* 00019BE0 */ 0x12, 0x47, 0x0B, 0x12, 0x09, 0x68, 0xFF, 0xA6, 0x00, 0x24, 0x00, 0xC1, 0xFE, 0x4C, 0x01, 0xFE, -/* 00019BF0 */ 0xB7, 0x2E, 0x13, 0x08, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x28, 0x00, 0x05, 0x00, 0x25, 0x00, 0x03, -/* 00019C00 */ 0x00, 0x20, 0x00, 0x05, 0x00, 0x37, 0x00, 0x11, 0x00, 0x34, 0x00, 0x06, 0x00, 0x2D, 0x00, 0x03, -/* 00019C10 */ 0x00, 0x1F, 0x00, 0x0D, 0x00, 0x1E, 0x00, 0x08, 0x00, 0x1F, 0x00, 0x0C, 0x00, 0x33, 0x00, 0x03, -/* 00019C20 */ 0x00, 0x1D, 0x00, 0x03, 0x00, 0x99, 0xFF, 0x06, 0x00, 0x9B, 0x00, 0x08, 0x00, 0x22, 0x00, 0x08, -/* 00019C30 */ 0x00, 0x25, 0x00, 0x18, 0x00, 0x9A, 0x01, 0x04, 0x00, 0x25, 0x00, 0x25, 0x00, 0x3A, 0x00, 0x00, -/* 00019C40 */ 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xEA, 0x1C, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xE6, -/* 00019C50 */ 0x02, 0x27, 0xFE, 0x6B, 0x2C, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x6B, 0x2C, 0x51, -/* 00019C60 */ 0x51, 0x01, 0x05, 0x02, 0x05, 0x04, 0x0B, 0x0B, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x1F, -/* 00019C70 */ 0x8C, 0x02, 0x03, 0x06, 0x6A, 0x05, 0x06, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x06, 0x5A, 0x01, -/* 00019C80 */ 0x03, 0x5A, 0x02, 0x02, 0x1F, 0x03, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, -/* 00019C90 */ 0xFD, 0x01, 0xFE, 0x88, 0x2C, 0x02, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x33, 0x00, 0x00, 0xBF, -/* 00019CA0 */ 0x4C, 0x00, 0xC0, 0x03, 0x80, 0x01, 0x00, 0xE4, 0x1C, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xE5, 0x02, -/* 00019CB0 */ 0x26, 0xFE, 0xD1, 0x2B, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0xD1, 0x2B, 0x7B, 0x7B, -/* 00019CC0 */ 0x41, 0x02, 0x04, 0x05, 0x09, 0x09, 0x02, 0x01, 0x01, 0x01, 0x01, 0x03, 0x1C, 0x00, 0x0A, 0x80, -/* 00019CD0 */ 0x03, 0x07, 0x00, 0x0A, 0x80, 0x1B, 0x5F, 0x05, 0x04, 0x00, 0x14, 0x0C, 0x00, 0x05, 0x02, 0x5F, -/* 00019CE0 */ 0x05, 0x04, 0x00, 0x14, 0x03, 0x00, 0x05, 0x03, 0x09, 0x02, 0x00, 0x23, 0x04, 0xA6, 0x00, 0x24, -/* 00019CF0 */ 0x00, 0xFE, 0xFE, 0x00, 0xFE, 0xE9, 0x2B, 0x03, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x4A, 0x00, -/* 00019D00 */ 0x04, 0x00, 0x18, 0x00, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x01, 0x00, 0xD2, 0x1D, 0xA0, -/* 00019D10 */ 0x41, 0xC1, 0x00, 0xFE, 0x67, 0x03, 0x25, 0xFE, 0x84, 0x29, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, -/* 00019D20 */ 0x01, 0xFE, 0x84, 0x29, 0xFE, 0xC9, 0x01, 0xFE, 0xC9, 0x01, 0x01, 0x04, 0x03, 0x05, 0x02, 0x1A, -/* 00019D30 */ 0x19, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x04, 0x05, 0xFE, 0xAE, 0x03, 0x56, 0x4F, 0x03, 0x8C, -/* 00019D40 */ 0x01, 0x04, 0x05, 0x4B, 0x05, 0x0E, 0x15, 0x00, 0x05, 0x8C, 0x02, 0x03, 0x05, 0x5F, 0x05, 0x05, -/* 00019D50 */ 0x00, 0x0E, 0x09, 0x00, 0x05, 0x8C, 0x01, 0x04, 0x00, 0x4B, 0x00, 0x09, 0x33, 0x00, 0x8C, 0x02, -/* 00019D60 */ 0x03, 0x06, 0x6A, 0x05, 0x06, 0x01, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x06, 0x1F, 0x01, 0x05, 0x05, -/* 00019D70 */ 0x47, 0x03, 0x05, 0x0F, 0x09, 0x00, 0x03, 0x01, 0x34, 0x01, 0x01, 0x04, 0x02, 0x09, 0x06, 0x00, -/* 00019D80 */ 0x01, 0x34, 0x01, 0x01, 0x04, 0x03, 0x8C, 0x01, 0x04, 0x00, 0x4B, 0x00, 0x09, 0x02, 0x00, 0xA6, -/* 00019D90 */ 0x00, 0x24, 0x00, 0xFE, 0x61, 0x03, 0xFE, 0xDF, 0x01, 0xFE, 0x9A, 0x29, 0x08, 0x02, 0x00, 0x00, -/* 00019DA0 */ 0x00, 0x16, 0x00, 0x39, 0x00, 0x09, 0x00, 0x2B, 0x00, 0x15, 0x00, 0x34, 0x00, 0x04, 0x00, 0x9C, -/* 00019DB0 */ 0x00, 0x09, 0x00, 0x35, 0x00, 0x06, 0x00, 0x2D, 0x00, 0x0B, 0x00, 0x1C, 0x00, 0x00, 0xBF, 0x4C, -/* 00019DC0 */ 0x00, 0xC0, 0x03, 0x80, 0x01, 0x00, 0xC1, 0x13, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xFD, 0x02, 0x24, -/* 00019DD0 */ 0xFE, 0x00, 0x26, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x00, 0x26, 0xB7, 0xB7, 0x01, -/* 00019DE0 */ 0x03, 0x03, 0x05, 0x0C, 0x0C, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0xFE, 0xAD, 0x03, 0x24, 0x0E, -/* 00019DF0 */ 0x0B, 0x00, 0x04, 0x2C, 0x05, 0x04, 0x15, 0x03, 0x00, 0x05, 0x02, 0x09, 0x0A, 0x00, 0x5F, 0x00, -/* 00019E00 */ 0x03, 0x00, 0x09, 0x0C, 0x00, 0x09, 0x07, 0x00, 0x95, 0x00, 0x03, 0x04, 0x09, 0x02, 0x00, 0xA6, -/* 00019E10 */ 0x00, 0x24, 0x00, 0xFE, 0x2C, 0x03, 0xFE, 0x25, 0x26, 0x04, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, -/* 00019E20 */ 0x33, 0x00, 0x0A, 0x00, 0x38, 0x00, 0x09, 0x00, 0x26, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0xC1, 0x03, -/* 00019E30 */ 0x88, 0x03, 0x00, 0xA3, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0xAB, 0x03, 0x23, 0xFF, 0x00, 0x00, -/* 00019E40 */ 0x40, 0x02, 0xFE, 0x03, 0x21, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x03, 0x21, 0x68, -/* 00019E50 */ 0x68, 0x06, 0x01, 0x07, 0x03, 0x06, 0x06, 0x16, 0x12, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x05, -/* 00019E60 */ 0x05, 0xFE, 0xAC, 0x03, 0x43, 0x0E, 0x08, 0x00, 0x03, 0xA6, 0x06, 0x47, 0x00, 0x06, 0x09, 0x30, -/* 00019E70 */ 0x00, 0x8C, 0x01, 0x03, 0x07, 0x6A, 0x06, 0x07, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x07, 0x47, -/* 00019E80 */ 0x08, 0x04, 0x0F, 0x11, 0x00, 0x04, 0x8C, 0x01, 0x0D, 0x09, 0x07, 0x02, 0x00, 0x5A, 0x01, 0x02, -/* 00019E90 */ 0xC1, 0x02, 0x09, 0x09, 0x47, 0x08, 0x09, 0x5A, 0x01, 0x08, 0x1F, 0x02, 0x06, 0x06, 0x47, 0x00, -/* 00019EA0 */ 0x06, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xD6, 0x01, 0xFE, 0x17, 0x21, 0x02, 0x00, -/* 00019EB0 */ 0x00, 0x00, 0x00, 0x41, 0x00, 0x53, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x23, 0x00, -/* 00019EC0 */ 0xA2, 0x08, 0xA0, 0x41, 0xE1, 0x01, 0xFE, 0xAA, 0x03, 0x22, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, -/* 00019ED0 */ 0x6C, 0x20, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0x6C, 0x20, 0x8D, 0x8D, 0x06, 0x02, -/* 00019EE0 */ 0x05, 0x04, 0x06, 0x03, 0x17, 0x15, 0x01, 0x01, 0x03, 0x03, 0x03, 0x03, 0x05, 0x07, 0x01, 0x03, -/* 00019EF0 */ 0x4F, 0xAC, 0x04, 0xA4, 0x06, 0x04, 0x00, 0x14, 0x03, 0x00, 0x06, 0x03, 0x09, 0x25, 0x00, 0x8C, -/* 00019F00 */ 0x01, 0x03, 0x07, 0x6A, 0x06, 0x07, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x07, 0x01, 0x4F, 0x01, -/* 00019F10 */ 0x08, 0x04, 0x5A, 0x01, 0x08, 0x21, 0x02, 0x06, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, -/* 00019F20 */ 0x06, 0x09, 0x15, 0x00, 0x8C, 0x01, 0x03, 0x07, 0x6A, 0x06, 0x07, 0x02, 0x07, 0x01, 0x00, 0x5A, -/* 00019F30 */ 0x00, 0x07, 0x1F, 0x01, 0x06, 0x06, 0x47, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, -/* 00019F40 */ 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, -/* 00019F50 */ 0xC1, 0xFE, 0x8F, 0x02, 0xFE, 0x90, 0x02, 0xFE, 0x7B, 0x20, 0x02, 0x02, 0x00, 0x00, 0x00, 0x4B, -/* 00019F60 */ 0x00, 0x7D, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x03, 0x00, 0x9E, 0x08, 0xA2, 0x41, -/* 00019F70 */ 0xC1, 0x01, 0xFE, 0xA9, 0x03, 0x21, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0xD2, 0x1F, 0xFF, 0x00, -/* 00019F80 */ 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, 0xD2, 0x1F, 0x74, 0x74, 0x02, 0x01, 0x06, 0x03, 0x07, 0x06, -/* 00019F90 */ 0x0E, 0x0E, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x06, 0x08, 0x29, 0x8C, 0x01, 0x06, 0x07, 0x07, -/* 00019FA0 */ 0x05, 0x00, 0x5A, 0x00, 0x02, 0x8C, 0x01, 0x03, 0x08, 0x5F, 0x08, 0x08, 0x00, 0x5A, 0x01, 0x08, -/* 00019FB0 */ 0x5A, 0x02, 0x03, 0x5A, 0x03, 0x04, 0x5A, 0x04, 0x05, 0x1F, 0x05, 0x00, 0x07, 0x09, 0x02, 0x00, -/* 00019FC0 */ 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x65, 0x02, 0xFE, 0xEC, 0x1F, 0x02, 0x00, 0x00, 0x00, 0x00, 0x27, -/* 00019FD0 */ 0x00, 0x59, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x03, 0x00, 0x9D, 0x08, 0xA2, 0x41, -/* 00019FE0 */ 0xC1, 0x01, 0xFE, 0xA8, 0x03, 0x20, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0x62, 0x1F, 0xFF, 0x00, -/* 00019FF0 */ 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x62, 0x1F, 0x66, 0x66, 0x02, 0x01, 0x05, 0x03, 0x06, 0x05, -/* 0001A000 */ 0x0D, 0x0D, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x05, 0x08, 0x26, 0x8C, 0x01, 0x06, 0x06, 0x07, -/* 0001A010 */ 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8C, 0x01, 0x03, 0x07, 0x5F, 0x07, 0x07, 0x00, 0x5A, 0x01, 0x07, -/* 0001A020 */ 0x5A, 0x02, 0x03, 0x5A, 0x03, 0x04, 0x1F, 0x04, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, -/* 0001A030 */ 0x00, 0xFE, 0x66, 0x02, 0xFE, 0x75, 0x1F, 0x02, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x52, 0x00, -/* 0001A040 */ 0x00, 0xFF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x03, 0x00, 0x9B, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, -/* 0001A050 */ 0xA7, 0x03, 0x1F, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0xFB, 0x1E, 0xFF, 0x00, 0x10, 0x01, 0x00, -/* 0001A060 */ 0x02, 0x02, 0xFE, 0xFB, 0x1E, 0x5C, 0x5C, 0x02, 0x01, 0x04, 0x03, 0x05, 0x04, 0x0C, 0x0C, 0x01, -/* 0001A070 */ 0x02, 0x01, 0x01, 0x01, 0x01, 0x04, 0x08, 0x23, 0x8C, 0x01, 0x06, 0x05, 0x07, 0x03, 0x00, 0x5A, -/* 0001A080 */ 0x00, 0x02, 0x8C, 0x01, 0x03, 0x06, 0x5F, 0x06, 0x06, 0x00, 0x5A, 0x01, 0x06, 0x5A, 0x02, 0x03, -/* 0001A090 */ 0x1F, 0x03, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x63, 0x02, 0xFE, 0x0B, -/* 0001A0A0 */ 0x1F, 0x02, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x4B, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0xC1, 0x03, -/* 0001A0B0 */ 0x88, 0x03, 0x00, 0x94, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0xA6, 0x03, 0x1E, 0xFF, 0x00, 0x00, -/* 0001A0C0 */ 0x40, 0x02, 0xFE, 0xF1, 0x1D, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0xF1, 0x1D, 0x3E, -/* 0001A0D0 */ 0x3E, 0x02, 0x01, 0x04, 0x03, 0x05, 0x03, 0x0F, 0x0D, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, -/* 0001A0E0 */ 0x01, 0x00, 0x2D, 0x14, 0x03, 0x00, 0x03, 0x02, 0x09, 0x06, 0x00, 0x47, 0x00, 0x02, 0x09, 0x18, -/* 0001A0F0 */ 0x00, 0x8C, 0x01, 0x03, 0x06, 0x6A, 0x05, 0x06, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x06, 0x5A, -/* 0001A100 */ 0x01, 0x03, 0x1F, 0x02, 0x05, 0x05, 0x47, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, -/* 0001A110 */ 0xFE, 0x7A, 0x02, 0xFE, 0xFC, 0x1D, 0x02, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x32, 0x00, 0x00, -/* 0001A120 */ 0xFF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x03, 0x00, 0x90, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0xA5, -/* 0001A130 */ 0x03, 0x1D, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0x04, 0x1D, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, -/* 0001A140 */ 0x02, 0xFE, 0x04, 0x1D, 0x5C, 0x5C, 0x02, 0x01, 0x05, 0x04, 0x07, 0x04, 0x0D, 0x0C, 0x01, 0x01, -/* 0001A150 */ 0x01, 0x01, 0x01, 0x01, 0x06, 0x07, 0x08, 0x27, 0x15, 0x03, 0x00, 0x05, 0x03, 0x47, 0x05, 0x02, -/* 0001A160 */ 0x8C, 0x01, 0x03, 0x08, 0x6A, 0x07, 0x08, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x08, 0x5A, 0x01, -/* 0001A170 */ 0x04, 0x5A, 0x02, 0x05, 0x1F, 0x03, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, -/* 0001A180 */ 0x81, 0x02, 0xFE, 0x1B, 0x1D, 0x03, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x10, 0x00, 0x1D, 0x00, -/* 0001A190 */ 0x34, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x03, 0x00, 0x8F, 0x08, 0xA2, 0x41, 0xC1, -/* 0001A1A0 */ 0x01, 0xFE, 0xA4, 0x03, 0x1C, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0xAC, 0x1C, 0xFF, 0x00, 0x10, -/* 0001A1B0 */ 0x01, 0x00, 0x02, 0x01, 0xFE, 0xAC, 0x1C, 0x4E, 0x4E, 0x02, 0x01, 0x04, 0x04, 0x06, 0x03, 0x0C, -/* 0001A1C0 */ 0x0B, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x05, 0x07, 0x08, 0x24, 0x15, 0x03, 0x00, 0x04, 0x03, -/* 0001A1D0 */ 0x47, 0x04, 0x02, 0x8C, 0x01, 0x03, 0x07, 0x6A, 0x06, 0x07, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 0001A1E0 */ 0x07, 0x5A, 0x01, 0x04, 0x1F, 0x02, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, -/* 0001A1F0 */ 0x67, 0x02, 0xFE, 0xB3, 0x1C, 0x03, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x10, 0x00, 0x1A, 0x00, -/* 0001A200 */ 0x36, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x03, 0x00, 0x8A, 0x08, 0xA2, 0x41, 0xC1, -/* 0001A210 */ 0x01, 0xFE, 0xA3, 0x03, 0x1B, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0xB6, 0x1B, 0xFF, 0x00, 0x10, -/* 0001A220 */ 0x01, 0x00, 0x04, 0x04, 0xFE, 0xB6, 0x1B, 0xA3, 0xA3, 0x02, 0x41, 0x06, 0x03, 0x07, 0x05, 0x13, -/* 0001A230 */ 0x13, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x06, 0x07, 0x39, 0x8C, 0x01, 0x37, 0x08, 0x4B, 0x08, -/* 0001A240 */ 0x6A, 0x07, 0x08, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x08, 0x5A, 0x01, 0x05, 0x5A, 0x02, 0x02, -/* 0001A250 */ 0x1F, 0x03, 0xFF, 0x07, 0x8C, 0x01, 0x03, 0x08, 0x6A, 0x07, 0x08, 0x01, 0x07, 0x04, 0x00, 0x5A, -/* 0001A260 */ 0x00, 0x08, 0x5A, 0x01, 0x03, 0x5A, 0x02, 0x04, 0x5A, 0x03, 0x05, 0x1F, 0x04, 0xFF, 0x07, 0xA6, -/* 0001A270 */ 0x00, 0x24, 0x00, 0xFE, 0x86, 0x01, 0xFE, 0x68, 0x02, 0xFE, 0xE2, 0x1B, 0x03, 0x00, 0x00, 0x00, -/* 0001A280 */ 0x00, 0x1A, 0x00, 0x2A, 0x00, 0x1D, 0x00, 0x4C, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0xC1, 0x03, 0x88, -/* 0001A290 */ 0x03, 0x00, 0x88, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0xA2, 0x03, 0x1A, 0xFF, 0x00, 0x00, 0x40, -/* 0001A2A0 */ 0x02, 0xFE, 0xAD, 0x1A, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0xAD, 0x1A, 0x72, 0x72, -/* 0001A2B0 */ 0x02, 0x01, 0x05, 0x03, 0x06, 0x05, 0x0D, 0x0D, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x05, 0x08, -/* 0001A2C0 */ 0x26, 0x8C, 0x01, 0x06, 0x06, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8C, 0x01, 0x03, 0x07, 0x5F, -/* 0001A2D0 */ 0x07, 0x07, 0x00, 0x5A, 0x01, 0x07, 0x5A, 0x02, 0x03, 0x5A, 0x03, 0x04, 0x1F, 0x04, 0x00, 0x06, -/* 0001A2E0 */ 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x6B, 0x02, 0xFE, 0xC7, 0x1A, 0x02, 0x00, 0x00, -/* 0001A2F0 */ 0x00, 0x00, 0x24, 0x00, 0x57, 0x00, 0x00, 0x7F, 0x5D, 0x00, 0xC1, 0x03, 0x8D, 0x07, 0x00, 0x85, -/* 0001A300 */ 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0xA0, 0x03, 0x18, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0x16, -/* 0001A310 */ 0x1A, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x16, 0x1A, 0x53, 0x53, 0x02, 0x01, -/* 0001A320 */ 0xFE, 0xA1, 0x03, 0x07, 0x02, 0x06, 0x04, 0x0F, 0x0F, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x03, -/* 0001A330 */ 0x04, 0x05, 0x2A, 0x94, 0x02, 0x02, 0x8C, 0x01, 0x37, 0x07, 0x4B, 0x07, 0x6A, 0x06, 0x07, 0x00, -/* 0001A340 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x07, 0x90, 0x02, 0x08, 0x5A, 0x01, 0x08, 0xD3, 0x00, 0x08, 0x5A, -/* 0001A350 */ 0x02, 0x08, 0x1F, 0x03, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x7E, 0xFE, 0x26, -/* 0001A360 */ 0x1A, 0x02, 0x03, 0x00, 0x00, 0x00, 0x25, 0x00, 0x42, 0x00, 0x00, 0x6F, 0xA3, 0x01, 0x00, 0xBF, -/* 0001A370 */ 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x03, 0x00, 0x85, 0x2F, 0xA2, 0x41, 0xD0, 0x00, 0x19, 0xFE, 0x01, -/* 0001A380 */ 0x10, 0xFE, 0x3D, 0x1A, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x3D, 0x1A, 0x28, 0x28, -/* 0001A390 */ 0x01, 0x06, 0x02, 0x05, 0x04, 0x0E, 0x0E, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x04, 0x29, 0x8C, -/* 0001A3A0 */ 0x02, 0x37, 0x06, 0x4B, 0x06, 0x6A, 0x05, 0x06, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x06, 0x8C, -/* 0001A3B0 */ 0x01, 0x02, 0x07, 0x5A, 0x01, 0x07, 0x5A, 0x02, 0x02, 0x1F, 0x03, 0x05, 0x05, 0x43, 0x00, 0x05, -/* 0001A3C0 */ 0x03, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x14, 0x03, 0xFE, 0x47, 0x1A, 0x02, 0x00, -/* 0001A3D0 */ 0x00, 0x00, 0x00, 0x27, 0x00, 0x1E, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x03, 0x00, -/* 0001A3E0 */ 0x84, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x9F, 0x03, 0x17, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, -/* 0001A3F0 */ 0xA3, 0x19, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0xA3, 0x19, 0x69, 0x69, 0x02, 0x01, -/* 0001A400 */ 0x05, 0x03, 0x06, 0x05, 0x0D, 0x0D, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x05, 0x08, 0x26, 0x8C, -/* 0001A410 */ 0x01, 0x06, 0x06, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8C, 0x01, 0x03, 0x07, 0x5F, 0x07, 0x07, -/* 0001A420 */ 0x00, 0x5A, 0x01, 0x07, 0x5A, 0x02, 0x03, 0x5A, 0x03, 0x04, 0x1F, 0x04, 0x00, 0x06, 0x09, 0x02, -/* 0001A430 */ 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x5B, 0x02, 0xFE, 0xB9, 0x19, 0x02, 0x00, 0x00, 0x00, 0x00, -/* 0001A440 */ 0x24, 0x00, 0x52, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x23, 0x00, 0x83, 0x08, 0xA2, -/* 0001A450 */ 0x41, 0xC1, 0x01, 0xFE, 0x9E, 0x03, 0x16, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0x2C, 0x19, 0xFF, -/* 0001A460 */ 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x2C, 0x19, 0x6D, 0x6D, 0x02, 0x81, 0x05, 0x03, 0x06, -/* 0001A470 */ 0x05, 0x0E, 0x0E, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x05, 0x08, 0x30, 0x8C, 0x01, 0x06, 0x06, -/* 0001A480 */ 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8C, 0x01, 0x03, 0x07, 0x5F, 0x07, 0x07, 0x00, 0x5A, 0x01, -/* 0001A490 */ 0x07, 0x5A, 0x02, 0x03, 0x01, 0x4F, 0x01, 0x07, 0x04, 0x5A, 0x03, 0x07, 0x21, 0x04, 0x00, 0x06, -/* 0001A4A0 */ 0x01, 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x01, 0x08, 0x00, 0x00, -/* 0001A4B0 */ 0x00, 0x00, 0x00, 0x05, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xFE, 0x5A, 0x02, 0xFE, -/* 0001A4C0 */ 0x44, 0x19, 0x02, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x54, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0xC1, -/* 0001A4D0 */ 0x03, 0x88, 0x03, 0x00, 0x82, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x9D, 0x03, 0x15, 0xFF, 0x00, -/* 0001A4E0 */ 0x00, 0x40, 0x02, 0xFE, 0xAF, 0x18, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, 0xAF, 0x18, -/* 0001A4F0 */ 0x73, 0x73, 0x02, 0x01, 0x06, 0x03, 0x07, 0x06, 0x0E, 0x0E, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, -/* 0001A500 */ 0x06, 0x08, 0x29, 0x8C, 0x01, 0x06, 0x07, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x02, 0x8C, 0x01, 0x03, -/* 0001A510 */ 0x08, 0x5F, 0x08, 0x08, 0x00, 0x5A, 0x01, 0x08, 0x5A, 0x02, 0x03, 0x5A, 0x03, 0x04, 0x5A, 0x04, -/* 0001A520 */ 0x05, 0x1F, 0x05, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x62, 0x02, 0xFE, -/* 0001A530 */ 0xCA, 0x18, 0x02, 0x00, 0x00, 0x00, 0x00, 0x27, 0x00, 0x57, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0xC1, -/* 0001A540 */ 0x03, 0x88, 0x03, 0x00, 0x81, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x9C, 0x03, 0x14, 0xFF, 0x00, -/* 0001A550 */ 0x00, 0x40, 0x02, 0xFE, 0x30, 0x18, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, 0x30, 0x18, -/* 0001A560 */ 0x75, 0x75, 0x02, 0x01, 0x06, 0x03, 0x07, 0x06, 0x0E, 0x0E, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, -/* 0001A570 */ 0x06, 0x08, 0x29, 0x8C, 0x01, 0x06, 0x07, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x02, 0x8C, 0x01, 0x03, -/* 0001A580 */ 0x08, 0x5F, 0x08, 0x08, 0x00, 0x5A, 0x01, 0x08, 0x5A, 0x02, 0x03, 0x5A, 0x03, 0x04, 0x5A, 0x04, -/* 0001A590 */ 0x05, 0x1F, 0x05, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x61, 0x02, 0xFE, -/* 0001A5A0 */ 0x4C, 0x18, 0x02, 0x00, 0x00, 0x00, 0x00, 0x27, 0x00, 0x58, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0xC1, -/* 0001A5B0 */ 0x03, 0x88, 0x03, 0x00, 0x80, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x9B, 0x03, 0x13, 0xFF, 0x00, -/* 0001A5C0 */ 0x00, 0x40, 0x02, 0xFE, 0xC3, 0x17, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0xC3, 0x17, -/* 0001A5D0 */ 0x63, 0x63, 0x02, 0x01, 0x05, 0x03, 0x06, 0x05, 0x0D, 0x0D, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, -/* 0001A5E0 */ 0x05, 0x08, 0x26, 0x8C, 0x01, 0x06, 0x06, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8C, 0x01, 0x03, -/* 0001A5F0 */ 0x07, 0x5F, 0x07, 0x07, 0x00, 0x5A, 0x01, 0x07, 0x5A, 0x02, 0x03, 0x5A, 0x03, 0x04, 0x1F, 0x04, -/* 0001A600 */ 0x00, 0x06, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x5F, 0x02, 0xFE, 0xD6, 0x17, 0x02, -/* 0001A610 */ 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x4F, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0x01, 0x00, 0x88, 0x03, -/* 0001A620 */ 0x00, 0x7F, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x9A, 0x03, 0x12, 0xFF, 0x00, 0x00, 0x40, 0x02, -/* 0001A630 */ 0xFE, 0x58, 0x17, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, 0x58, 0x17, 0x61, 0x61, 0x02, -/* 0001A640 */ 0x01, 0x06, 0x03, 0x07, 0x06, 0x0D, 0x0D, 0x01, 0x02, 0x06, 0x08, 0x25, 0x8C, 0x01, 0x06, 0x07, -/* 0001A650 */ 0x07, 0x05, 0x00, 0x5A, 0x00, 0x02, 0x8C, 0x01, 0x17, 0x08, 0x5A, 0x01, 0x08, 0x5A, 0x02, 0x03, -/* 0001A660 */ 0x5A, 0x03, 0x04, 0x5A, 0x04, 0x05, 0x1F, 0x05, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, -/* 0001A670 */ 0x00, 0xFE, 0x78, 0x17, 0x02, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x40, 0x00, 0x00, 0xFF, 0x5C, -/* 0001A680 */ 0x00, 0x01, 0x00, 0x88, 0x03, 0x00, 0x7E, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x99, 0x03, 0x11, -/* 0001A690 */ 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0x02, 0x17, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, -/* 0001A6A0 */ 0x02, 0x17, 0x4C, 0x4C, 0x02, 0x01, 0x05, 0x03, 0x06, 0x05, 0x0C, 0x0C, 0x01, 0x02, 0x05, 0x08, -/* 0001A6B0 */ 0x22, 0x8C, 0x01, 0x06, 0x06, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8C, 0x01, 0x19, 0x07, 0x5A, -/* 0001A6C0 */ 0x01, 0x07, 0x5A, 0x02, 0x03, 0x5A, 0x03, 0x04, 0x1F, 0x04, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA6, -/* 0001A6D0 */ 0x00, 0x24, 0x00, 0xFE, 0x15, 0x17, 0x02, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x38, 0x00, 0x00, -/* 0001A6E0 */ 0xFF, 0x5C, 0x00, 0x01, 0x00, 0x88, 0x23, 0x00, 0x7D, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x98, -/* 0001A6F0 */ 0x03, 0x10, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0xA6, 0x16, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, -/* 0001A700 */ 0x02, 0xFE, 0xA6, 0x16, 0x52, 0x52, 0x02, 0x81, 0x05, 0x03, 0x06, 0x05, 0x0D, 0x0D, 0x01, 0x02, -/* 0001A710 */ 0x05, 0x08, 0x2C, 0x8C, 0x01, 0x06, 0x06, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8C, 0x01, 0x18, -/* 0001A720 */ 0x07, 0x5A, 0x01, 0x07, 0x5A, 0x02, 0x03, 0x01, 0x4F, 0x01, 0x07, 0x04, 0x5A, 0x03, 0x07, 0x21, -/* 0001A730 */ 0x04, 0x00, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x01, -/* 0001A740 */ 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xFE, -/* 0001A750 */ 0xBC, 0x16, 0x02, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x3B, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0x01, -/* 0001A760 */ 0x00, 0x88, 0x03, 0x00, 0x7C, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x97, 0x03, 0x0F, 0xFF, 0x00, -/* 0001A770 */ 0x00, 0x40, 0x02, 0xFE, 0x48, 0x16, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x48, 0x16, -/* 0001A780 */ 0x54, 0x54, 0x02, 0x01, 0x05, 0x03, 0x06, 0x05, 0x0C, 0x0C, 0x01, 0x02, 0x05, 0x08, 0x22, 0x8C, -/* 0001A790 */ 0x01, 0x06, 0x06, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8C, 0x01, 0x16, 0x07, 0x5A, 0x01, 0x07, -/* 0001A7A0 */ 0x5A, 0x02, 0x03, 0x5A, 0x03, 0x04, 0x1F, 0x04, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, -/* 0001A7B0 */ 0x00, 0xFE, 0x5F, 0x16, 0x02, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x3C, 0x00, 0x00, 0xFF, 0x5C, -/* 0001A7C0 */ 0x00, 0xC1, 0x03, 0x88, 0x03, 0x00, 0x7A, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x96, 0x03, 0x0E, -/* 0001A7D0 */ 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0xD5, 0x15, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, -/* 0001A7E0 */ 0xD5, 0x15, 0x68, 0x68, 0x02, 0x01, 0x05, 0x03, 0x06, 0x05, 0x0D, 0x0D, 0x01, 0x02, 0x01, 0x01, -/* 0001A7F0 */ 0x01, 0x01, 0x05, 0x08, 0x26, 0x8C, 0x01, 0x06, 0x06, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x8C, -/* 0001A800 */ 0x01, 0x03, 0x07, 0x5F, 0x07, 0x07, 0x00, 0x5A, 0x01, 0x07, 0x5A, 0x02, 0x03, 0x5A, 0x03, 0x04, -/* 0001A810 */ 0x1F, 0x04, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x73, 0x02, 0xFE, 0xEA, -/* 0001A820 */ 0x15, 0x02, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x52, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0xC1, 0x03, -/* 0001A830 */ 0x88, 0x03, 0x00, 0x79, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x95, 0x03, 0x0D, 0xFF, 0x00, 0x00, -/* 0001A840 */ 0x40, 0x02, 0xFE, 0x8D, 0x15, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x8D, 0x15, 0x3E, -/* 0001A850 */ 0x3E, 0x02, 0x01, 0x05, 0x02, 0x05, 0x04, 0x0B, 0x0B, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, -/* 0001A860 */ 0x1F, 0x8C, 0x01, 0x03, 0x06, 0x6A, 0x05, 0x06, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x06, 0x5A, -/* 0001A870 */ 0x01, 0x02, 0x5A, 0x02, 0x03, 0x1F, 0x03, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, -/* 0001A880 */ 0xFE, 0x83, 0x02, 0xFE, 0x9E, 0x15, 0x02, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x2C, 0x00, 0x00, -/* 0001A890 */ 0xFF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x03, 0x00, 0x78, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x94, -/* 0001A8A0 */ 0x03, 0x0C, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0x0D, 0x15, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, -/* 0001A8B0 */ 0x04, 0xFE, 0x0D, 0x15, 0x76, 0x76, 0x02, 0x01, 0x06, 0x03, 0x07, 0x06, 0x0E, 0x0E, 0x01, 0x02, -/* 0001A8C0 */ 0x01, 0x01, 0x01, 0x01, 0x06, 0x08, 0x29, 0x8C, 0x01, 0x06, 0x07, 0x07, 0x05, 0x00, 0x5A, 0x00, -/* 0001A8D0 */ 0x02, 0x8C, 0x01, 0x03, 0x08, 0x5F, 0x08, 0x08, 0x00, 0x5A, 0x01, 0x08, 0x5A, 0x02, 0x03, 0x5A, -/* 0001A8E0 */ 0x03, 0x04, 0x5A, 0x04, 0x05, 0x1F, 0x05, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, -/* 0001A8F0 */ 0xFE, 0x71, 0x02, 0xFE, 0x2C, 0x15, 0x02, 0x00, 0x00, 0x00, 0x00, 0x27, 0x00, 0x56, 0x00, 0x00, -/* 0001A900 */ 0xFF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x03, 0x00, 0x77, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x93, -/* 0001A910 */ 0x03, 0x0B, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0x8B, 0x14, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, -/* 0001A920 */ 0x04, 0xFE, 0x8B, 0x14, 0x78, 0x78, 0x02, 0x01, 0x06, 0x03, 0x07, 0x06, 0x0E, 0x0E, 0x01, 0x02, -/* 0001A930 */ 0x01, 0x01, 0x01, 0x01, 0x06, 0x08, 0x29, 0x8C, 0x01, 0x06, 0x07, 0x07, 0x05, 0x00, 0x5A, 0x00, -/* 0001A940 */ 0x02, 0x8C, 0x01, 0x03, 0x08, 0x5F, 0x08, 0x08, 0x00, 0x5A, 0x01, 0x08, 0x5A, 0x02, 0x03, 0x5A, -/* 0001A950 */ 0x03, 0x04, 0x5A, 0x04, 0x05, 0x1F, 0x05, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, -/* 0001A960 */ 0xFE, 0x76, 0x02, 0xFE, 0xA8, 0x14, 0x02, 0x00, 0x00, 0x00, 0x00, 0x27, 0x00, 0x5A, 0x00, 0x00, -/* 0001A970 */ 0xFF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x03, 0x00, 0x76, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x92, -/* 0001A980 */ 0x03, 0x0A, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0x17, 0x14, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, -/* 0001A990 */ 0x03, 0xFE, 0x17, 0x14, 0x6A, 0x6A, 0x02, 0x01, 0x05, 0x03, 0x06, 0x05, 0x0D, 0x0D, 0x01, 0x02, -/* 0001A9A0 */ 0x01, 0x01, 0x01, 0x01, 0x05, 0x08, 0x26, 0x8C, 0x01, 0x06, 0x06, 0x07, 0x04, 0x00, 0x5A, 0x00, -/* 0001A9B0 */ 0x02, 0x8C, 0x01, 0x03, 0x07, 0x5F, 0x07, 0x07, 0x00, 0x5A, 0x01, 0x07, 0x5A, 0x02, 0x03, 0x5A, -/* 0001A9C0 */ 0x03, 0x04, 0x1F, 0x04, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x75, 0x02, -/* 0001A9D0 */ 0xFE, 0x2D, 0x14, 0x02, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x53, 0x00, 0x00, 0xFF, 0x5C, 0x00, -/* 0001A9E0 */ 0x01, 0x00, 0x88, 0x03, 0x00, 0x75, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x91, 0x03, 0x09, 0xFF, -/* 0001A9F0 */ 0x00, 0x00, 0x40, 0x02, 0xFE, 0x9C, 0x13, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, 0x9C, -/* 0001AA00 */ 0x13, 0x71, 0x71, 0x02, 0x01, 0x06, 0x03, 0x07, 0x06, 0x0D, 0x0D, 0x01, 0x02, 0x06, 0x08, 0x25, -/* 0001AA10 */ 0x8C, 0x01, 0x06, 0x07, 0x07, 0x05, 0x00, 0x5A, 0x00, 0x02, 0x8C, 0x01, 0x1D, 0x08, 0x5A, 0x01, -/* 0001AA20 */ 0x08, 0x5A, 0x02, 0x03, 0x5A, 0x03, 0x04, 0x5A, 0x04, 0x05, 0x1F, 0x05, 0x00, 0x07, 0x09, 0x02, -/* 0001AA30 */ 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xC1, 0x13, 0x02, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x4B, -/* 0001AA40 */ 0x00, 0x00, 0xFF, 0x5C, 0x00, 0x01, 0x00, 0x88, 0x03, 0x00, 0x74, 0x08, 0xA2, 0x41, 0xC1, 0x01, -/* 0001AA50 */ 0xFE, 0x90, 0x03, 0x08, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0x45, 0x13, 0xFF, 0x00, 0x10, 0x01, -/* 0001AA60 */ 0x00, 0x02, 0x02, 0xFE, 0x45, 0x13, 0x4D, 0x4D, 0x02, 0x01, 0x04, 0x03, 0x05, 0x04, 0x0B, 0x0B, -/* 0001AA70 */ 0x01, 0x02, 0x04, 0x08, 0x1F, 0x8C, 0x01, 0x06, 0x05, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x8C, -/* 0001AA80 */ 0x01, 0x1E, 0x06, 0x5A, 0x01, 0x06, 0x5A, 0x02, 0x03, 0x1F, 0x03, 0x00, 0x05, 0x09, 0x02, 0x00, -/* 0001AA90 */ 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x58, 0x13, 0x02, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x39, 0x00, -/* 0001AAA0 */ 0x00, 0xFF, 0x5C, 0x00, 0x01, 0x00, 0x88, 0x03, 0x00, 0x73, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, -/* 0001AAB0 */ 0x8F, 0x03, 0x07, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0xEE, 0x12, 0xFF, 0x00, 0x10, 0x01, 0x00, -/* 0001AAC0 */ 0x02, 0x02, 0xFE, 0xEE, 0x12, 0x4D, 0x4D, 0x02, 0x01, 0x04, 0x03, 0x05, 0x04, 0x0B, 0x0B, 0x01, -/* 0001AAD0 */ 0x02, 0x04, 0x08, 0x1F, 0x8C, 0x01, 0x06, 0x05, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0x8C, 0x01, -/* 0001AAE0 */ 0x1F, 0x06, 0x5A, 0x01, 0x06, 0x5A, 0x02, 0x03, 0x1F, 0x03, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA6, -/* 0001AAF0 */ 0x00, 0x24, 0x00, 0xFE, 0x01, 0x13, 0x02, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x39, 0x00, 0x00, -/* 0001AB00 */ 0xBF, 0x5C, 0x00, 0x01, 0x00, 0x88, 0x01, 0x00, 0x51, 0x1F, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xDA, -/* 0001AB10 */ 0x02, 0x06, 0xFE, 0x53, 0x0D, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, 0x53, 0x0D, 0x72, -/* 0001AB20 */ 0x72, 0x41, 0x06, 0x04, 0x08, 0x09, 0x10, 0x10, 0x01, 0x02, 0x07, 0x07, 0x08, 0x2F, 0x8C, 0x01, -/* 0001AB30 */ 0x14, 0x08, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x03, 0x5A, 0x01, 0x04, 0x5A, 0x02, 0x05, 0x8C, 0x01, -/* 0001AB40 */ 0x04, 0x09, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x03, 0x5A, 0x01, 0x06, 0x5A, 0x02, 0x02, 0x1F, 0x03, -/* 0001AB50 */ 0x09, 0x09, 0x5A, 0x03, 0x09, 0x1F, 0x04, 0xFF, 0x08, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x7E, 0x0D, -/* 0001AB60 */ 0x02, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x00, 0x46, 0x00, 0x00, 0x3F, 0x5C, 0x00, 0xC1, 0x13, 0x88, -/* 0001AB70 */ 0x25, 0x00, 0x22, 0x04, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0xD0, 0x02, 0x03, 0xFE, 0xC3, 0x06, 0x02, -/* 0001AB80 */ 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x01, 0xFE, 0xC3, 0x06, 0xFE, 0x36, 0x02, 0xFE, 0x36, 0x02, -/* 0001AB90 */ 0x06, 0x09, 0x0B, 0x05, 0x19, 0x18, 0x01, 0x02, 0x05, 0x05, 0x05, 0x05, 0x01, 0x0A, 0x08, 0x01, -/* 0001ABA0 */ 0x19, 0x06, 0xFE, 0x8B, 0x03, 0x06, 0xFE, 0x8C, 0x03, 0x06, 0xFE, 0x8D, 0x03, 0x06, 0xFE, 0x8E, -/* 0001ABB0 */ 0x03, 0x07, 0x5B, 0x15, 0x03, 0x00, 0x09, 0x02, 0x47, 0x09, 0x03, 0x8C, 0x01, 0x35, 0x0B, 0x4B, -/* 0001ABC0 */ 0x0B, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 0001ABD0 */ 0x0C, 0x00, 0x00, 0x00, 0x78, 0x09, 0x0C, 0x00, 0x8C, 0x01, 0x37, 0x0E, 0x4B, 0x0E, 0x6A, 0x0D, -/* 0001ABE0 */ 0x0E, 0x01, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x0E, 0x1F, 0x01, 0x0D, 0x0D, 0x78, 0x0D, 0x0C, 0x02, -/* 0001ABF0 */ 0xD6, 0x00, 0x0D, 0x0C, 0x78, 0x0D, 0x0C, 0x03, 0xD6, 0x01, 0x0D, 0x0C, 0x78, 0x0D, 0x0C, 0x04, -/* 0001AC00 */ 0x5A, 0x01, 0x0C, 0x1F, 0x02, 0x00, 0x0B, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x01, 0x18, -/* 0001AC10 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8B, 0x03, 0x00, -/* 0001AC20 */ 0x00, 0x8C, 0x03, 0x00, 0x00, 0x84, 0x01, 0x00, 0x00, 0x87, 0x01, 0x00, 0x00, 0xFE, 0x8B, 0x03, -/* 0001AC30 */ 0x61, 0xFE, 0x8C, 0x03, 0xFE, 0x84, 0x01, 0xFE, 0x87, 0x01, 0xFE, 0xD6, 0x06, 0x03, 0x00, 0x00, -/* 0001AC40 */ 0x00, 0x00, 0x08, 0x00, 0x12, 0x00, 0x51, 0x00, 0x10, 0x02, 0x00, 0x2F, 0xAD, 0x01, 0x00, 0x53, -/* 0001AC50 */ 0xAC, 0x01, 0x00, 0xBF, 0x5C, 0x00, 0xC1, 0x03, 0x88, 0x03, 0x00, 0x2B, 0x0C, 0xA2, 0x41, 0xC1, -/* 0001AC60 */ 0x01, 0xFE, 0x8E, 0x03, 0x05, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0xA6, 0x07, 0xFF, 0x00, 0x10, -/* 0001AC70 */ 0x01, 0x00, 0x03, 0x03, 0xFE, 0xA6, 0x07, 0xFE, 0x41, 0x01, 0xFE, 0x41, 0x01, 0x41, 0x07, 0x02, -/* 0001AC80 */ 0x06, 0x03, 0x24, 0x24, 0x01, 0x02, 0x07, 0x07, 0x07, 0x07, 0x05, 0x77, 0x59, 0x06, 0xB1, 0x04, -/* 0001AC90 */ 0x06, 0x8C, 0x01, 0x03, 0x06, 0x5F, 0x06, 0x06, 0x00, 0x0F, 0x05, 0x00, 0x06, 0xA6, 0x00, 0x09, -/* 0001ACA0 */ 0x5F, 0x00, 0x8C, 0x01, 0x37, 0x07, 0x4B, 0x07, 0x6A, 0x06, 0x07, 0x01, 0x07, 0x02, 0x00, 0x5A, -/* 0001ACB0 */ 0x00, 0x07, 0x5F, 0x08, 0x04, 0x02, 0x5A, 0x01, 0x08, 0x1F, 0x02, 0x06, 0x06, 0xA4, 0x06, 0x06, -/* 0001ACC0 */ 0x03, 0x5F, 0x07, 0x04, 0x04, 0x11, 0x03, 0x00, 0x06, 0x07, 0x09, 0x2A, 0x00, 0x5F, 0x06, 0x04, -/* 0001ACD0 */ 0x02, 0x95, 0x06, 0x06, 0x02, 0xA6, 0x07, 0x14, 0x03, 0x00, 0x06, 0x07, 0x09, 0x18, 0x00, 0x8C, -/* 0001ACE0 */ 0x01, 0x37, 0x07, 0x4B, 0x07, 0x6A, 0x06, 0x07, 0x05, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x07, 0x1F, -/* 0001ACF0 */ 0x01, 0x06, 0x06, 0x74, 0x06, 0x04, 0x06, 0x5F, 0x06, 0x04, 0x02, 0x9A, 0x03, 0x06, 0x02, 0xA6, -/* 0001AD00 */ 0x00, 0x24, 0x00, 0xFE, 0x61, 0x03, 0xBF, 0xFE, 0x8C, 0x03, 0xC1, 0xFE, 0x8B, 0x03, 0x61, 0xFE, -/* 0001AD10 */ 0x8C, 0x03, 0xFE, 0xC8, 0x07, 0x06, 0x05, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x2F, 0x00, 0x05, 0x00, -/* 0001AD20 */ 0x2B, 0x00, 0x3D, 0x00, 0x61, 0x00, 0x18, 0x00, 0x3D, 0x00, 0x0A, 0x00, 0x26, 0x00, 0x00, 0xBF, -/* 0001AD30 */ 0x4C, 0x00, 0xC1, 0x03, 0x88, 0x03, 0x00, 0x27, 0x0C, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x8D, 0x03, -/* 0001AD40 */ 0x04, 0xFF, 0x00, 0x00, 0x40, 0x02, 0xFE, 0x35, 0x07, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, -/* 0001AD50 */ 0xFE, 0x35, 0x07, 0x62, 0x62, 0x01, 0x04, 0x02, 0x05, 0x0F, 0x0D, 0x01, 0x01, 0x02, 0x02, 0x02, -/* 0001AD60 */ 0x02, 0x04, 0x2B, 0x59, 0x05, 0xB1, 0x03, 0x05, 0x8C, 0x01, 0x03, 0x05, 0x5F, 0x05, 0x05, 0x00, -/* 0001AD70 */ 0x0E, 0x0E, 0x00, 0x05, 0x5F, 0x05, 0x03, 0x01, 0x95, 0x05, 0x05, 0x02, 0x47, 0x00, 0x05, 0x09, -/* 0001AD80 */ 0x05, 0x00, 0xA6, 0x05, 0x47, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x61, -/* 0001AD90 */ 0x03, 0xFE, 0x8C, 0x03, 0xFE, 0x50, 0x07, 0x02, 0x05, 0x00, 0x00, 0x00, 0x24, 0x00, 0x46, 0x00, -/* 0001ADA0 */ 0x00, 0xBF, 0x5C, 0x00, 0x01, 0x00, 0x88, 0x03, 0x00, 0x1C, 0x11, 0xA2, 0x41, 0xC0, 0x00, 0xFE, -/* 0001ADB0 */ 0xF5, 0x02, 0x02, 0xFE, 0x01, 0x10, 0xFE, 0xC2, 0x04, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x01, -/* 0001ADC0 */ 0xFE, 0xC2, 0x04, 0x25, 0x25, 0x01, 0x03, 0x04, 0x06, 0x04, 0x0D, 0x0C, 0x01, 0x01, 0x05, 0x07, -/* 0001ADD0 */ 0x08, 0x25, 0x15, 0x05, 0x00, 0x04, 0x03, 0xCA, 0x06, 0x47, 0x04, 0x06, 0x8C, 0x01, 0x04, 0x06, -/* 0001ADE0 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x03, 0x5A, 0x01, 0x04, 0x5A, 0x02, 0x02, 0x1F, 0x03, 0x00, 0x06, -/* 0001ADF0 */ 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xC3, 0x04, 0x03, 0x00, 0x00, 0x00, 0x00, 0x0A, -/* 0001AE00 */ 0x00, 0x0D, 0x00, 0x19, 0x00, 0x17, 0x00, 0x00, 0x00}; - -} diff --git a/lib/Runtime/Library/InJavascript/JsBuiltIn.bc.32b.h b/lib/Runtime/Library/InJavascript/JsBuiltIn.bc.32b.h new file mode 100644 index 00000000000..c9204c875bc --- /dev/null +++ b/lib/Runtime/Library/InJavascript/JsBuiltIn.bc.32b.h @@ -0,0 +1,8469 @@ +//------------------------------------------------------------------------------------------------------- +// Copyright (C) Microsoft. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. +// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. +//------------------------------------------------------------------------------------------------------- + +// Generated Bytecode Header, this file was created by tools/regenByteCode.py +// This file contains: +// a) bytecode for Intl library methods implemented in javascript and +// b) bytecode for other Js library methods, JsBuiltIns, implemented in javascript + +#define JsBuiltIns(VALUE) \ +VALUE(Array, prototype, ArrayPrototype) \ +VALUE(Math, object, MathObject) \ +VALUE(Object, constructor, ObjectConstructor) + +namespace js +{ + +#ifdef ENABLE_JS_BUILTINS + +//Bytecode generated from Array_prototype.js +const char Library_Bytecode_Array_prototype[] = { +/* 00000000 */ 0x43, 0x68, 0x42, 0x63, 0x6C, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00000010 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0xFE, 0xD9, 0x02, 0x00, 0xFE, +/* 00000020 */ 0x77, 0x5F, 0xFE, 0x77, 0x5F, 0x35, 0x00, 0x00, 0x00, 0x4E, 0x06, 0x00, 0x00, 0x36, 0x0F, 0x00, +/* 00000030 */ 0x00, 0x6B, 0x31, 0x00, 0x00, 0x30, 0x2C, 0x01, 0x00, 0x00, 0x00, 0x44, 0x01, 0x00, 0x00, 0x00, +/* 00000040 */ 0x5A, 0x01, 0x00, 0x00, 0x01, 0x76, 0x01, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x8C, +/* 00000050 */ 0x01, 0x00, 0x00, 0x00, 0x9E, 0x01, 0x00, 0x00, 0x00, 0xB4, 0x01, 0x00, 0x00, 0x00, 0xCE, 0x01, +/* 00000060 */ 0x00, 0x00, 0x00, 0xEC, 0x01, 0x00, 0x00, 0x00, 0xFA, 0x01, 0x00, 0x00, 0x00, 0x04, 0x02, 0x00, +/* 00000070 */ 0x00, 0x01, 0x2C, 0x02, 0x00, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x00, 0x44, 0x02, 0x00, 0x00, +/* 00000080 */ 0x00, 0x54, 0x02, 0x00, 0x00, 0x00, 0x64, 0x02, 0x00, 0x00, 0x01, 0x8C, 0x02, 0x00, 0x00, 0x00, +/* 00000090 */ 0x9A, 0x02, 0x00, 0x00, 0x01, 0xBC, 0x02, 0x00, 0x00, 0x01, 0xEA, 0x02, 0x00, 0x00, 0x00, 0xF4, +/* 000000A0 */ 0x02, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x00, 0x00, 0x14, 0x03, 0x00, 0x00, 0x00, 0x1E, 0x03, +/* 000000B0 */ 0x00, 0x00, 0x00, 0x2A, 0x03, 0x00, 0x00, 0x00, 0x3C, 0x03, 0x00, 0x00, 0x00, 0x4A, 0x03, 0x00, +/* 000000C0 */ 0x00, 0x01, 0x68, 0x03, 0x00, 0x00, 0x01, 0x88, 0x03, 0x00, 0x00, 0x01, 0x9E, 0x03, 0x00, 0x00, +/* 000000D0 */ 0x01, 0xC4, 0x03, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0A, 0x04, 0x00, 0x00, 0x00, +/* 000000E0 */ 0x34, 0x04, 0x00, 0x00, 0x00, 0x62, 0x04, 0x00, 0x00, 0x00, 0x92, 0x04, 0x00, 0x00, 0x01, 0x96, +/* 000000F0 */ 0x04, 0x00, 0x00, 0x01, 0x9E, 0x04, 0x00, 0x00, 0x00, 0xCE, 0x04, 0x00, 0x00, 0x00, 0xFC, 0x04, +/* 00000100 */ 0x00, 0x00, 0x00, 0x0E, 0x05, 0x00, 0x00, 0x00, 0x38, 0x05, 0x00, 0x00, 0x00, 0x68, 0x05, 0x00, +/* 00000110 */ 0x00, 0x00, 0x98, 0x05, 0x00, 0x00, 0x00, 0xC2, 0x05, 0x00, 0x00, 0x00, 0xEE, 0x05, 0x00, 0x00, +/* 00000120 */ 0x00, 0x20, 0x06, 0x00, 0x00, 0x00, 0x4E, 0x06, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x6C, 0x00, +/* 00000130 */ 0x6F, 0x00, 0x62, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x20, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x64, 0x00, +/* 00000140 */ 0x65, 0x00, 0x00, 0x00, 0x75, 0x00, 0x73, 0x00, 0x65, 0x00, 0x20, 0x00, 0x73, 0x00, 0x74, 0x00, +/* 00000150 */ 0x72, 0x00, 0x69, 0x00, 0x63, 0x00, 0x74, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, +/* 00000160 */ 0x61, 0x00, 0x79, 0x00, 0x49, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 00000170 */ 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x78, 0x00, 0x74, 0x00, 0x00, 0x00, +/* 00000180 */ 0x76, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x65, 0x00, 0x00, 0x00, 0x77, 0x00, 0x72, 0x00, +/* 00000190 */ 0x69, 0x00, 0x74, 0x00, 0x61, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, +/* 000001A0 */ 0x6E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x72, 0x00, 0x61, 0x00, 0x62, 0x00, 0x6C, 0x00, +/* 000001B0 */ 0x65, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x66, 0x00, 0x69, 0x00, 0x67, 0x00, +/* 000001C0 */ 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x41, 0x00, +/* 000001D0 */ 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x20, 0x00, 0x49, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 000001E0 */ 0x72, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x65, 0x00, +/* 000001F0 */ 0x6E, 0x00, 0x67, 0x00, 0x74, 0x00, 0x68, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6D, 0x00, +/* 00000200 */ 0x65, 0x00, 0x00, 0x00, 0x43, 0x00, 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00000210 */ 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x49, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00000220 */ 0x72, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6B, 0x00, 0x65, 0x00, +/* 00000230 */ 0x79, 0x00, 0x73, 0x00, 0x00, 0x00, 0x76, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x65, 0x00, +/* 00000240 */ 0x73, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x65, 0x00, +/* 00000250 */ 0x73, 0x00, 0x00, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x65, 0x00, 0x78, 0x00, 0x4F, 0x00, +/* 00000260 */ 0x66, 0x00, 0x00, 0x00, 0x43, 0x00, 0x68, 0x00, 0x65, 0x00, 0x63, 0x00, 0x6B, 0x00, 0x41, 0x00, +/* 00000270 */ 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x41, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x47, 0x00, +/* 00000280 */ 0x65, 0x00, 0x74, 0x00, 0x4C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x66, 0x00, 0x69, 0x00, +/* 00000290 */ 0x6C, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x46, 0x00, 0x6C, 0x00, 0x61, 0x00, +/* 000002A0 */ 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6F, 0x00, +/* 000002B0 */ 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x00, 0x00, 0x46, 0x00, 0x6C, 0x00, +/* 000002C0 */ 0x61, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, +/* 000002D0 */ 0x6F, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x4D, 0x00, 0x61, 0x00, +/* 000002E0 */ 0x70, 0x00, 0x70, 0x00, 0x65, 0x00, 0x64, 0x00, 0x00, 0x00, 0x66, 0x00, 0x6C, 0x00, 0x61, 0x00, +/* 000002F0 */ 0x74, 0x00, 0x00, 0x00, 0x66, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x4D, 0x00, 0x61, 0x00, +/* 00000300 */ 0x70, 0x00, 0x00, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x45, 0x00, 0x61, 0x00, 0x63, 0x00, +/* 00000310 */ 0x68, 0x00, 0x00, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, +/* 00000320 */ 0x76, 0x00, 0x65, 0x00, 0x72, 0x00, 0x79, 0x00, 0x00, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x63, 0x00, +/* 00000330 */ 0x6C, 0x00, 0x75, 0x00, 0x64, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, +/* 00000340 */ 0x64, 0x00, 0x75, 0x00, 0x63, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x24, 0x00, +/* 00000350 */ 0x61, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x4F, 0x00, 0x62, 0x00, 0x6A, 0x00, +/* 00000360 */ 0x24, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x24, 0x00, 0x6E, 0x00, +/* 00000370 */ 0x65, 0x00, 0x78, 0x00, 0x74, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x65, 0x00, 0x78, 0x00, +/* 00000380 */ 0x24, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x24, 0x00, 0x6B, 0x00, +/* 00000390 */ 0x69, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x24, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x5F, 0x00, +/* 000003A0 */ 0x5F, 0x00, 0x24, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, +/* 000003B0 */ 0x61, 0x00, 0x6C, 0x00, 0x44, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x24, 0x00, 0x5F, 0x00, +/* 000003C0 */ 0x5F, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x20, 0x00, +/* 000003D0 */ 0x49, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 000003E0 */ 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, +/* 000003F0 */ 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x78, 0x00, 0x74, 0x00, 0x00, 0x00, +/* 00000400 */ 0x64, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, +/* 00000410 */ 0x61, 0x00, 0x79, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, +/* 00000420 */ 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x6B, 0x00, 0x65, 0x00, 0x79, 0x00, +/* 00000430 */ 0x73, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x2E, 0x00, +/* 00000440 */ 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, +/* 00000450 */ 0x65, 0x00, 0x2E, 0x00, 0x76, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x65, 0x00, 0x73, 0x00, +/* 00000460 */ 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x2E, 0x00, 0x70, 0x00, +/* 00000470 */ 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, +/* 00000480 */ 0x2E, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x65, 0x00, 0x73, 0x00, +/* 00000490 */ 0x00, 0x00, 0x6F, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x41, 0x00, +/* 000004A0 */ 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, +/* 000004B0 */ 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x69, 0x00, +/* 000004C0 */ 0x6E, 0x00, 0x64, 0x00, 0x65, 0x00, 0x78, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x41, 0x00, +/* 000004D0 */ 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, +/* 000004E0 */ 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x66, 0x00, +/* 000004F0 */ 0x69, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x66, 0x00, 0x75, 0x00, +/* 00000500 */ 0x6E, 0x00, 0x63, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x41, 0x00, +/* 00000510 */ 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, +/* 00000520 */ 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x66, 0x00, +/* 00000530 */ 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, +/* 00000540 */ 0x79, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, +/* 00000550 */ 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 00000560 */ 0x4D, 0x00, 0x61, 0x00, 0x70, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, +/* 00000570 */ 0x79, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, +/* 00000580 */ 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x45, 0x00, +/* 00000590 */ 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, +/* 000005A0 */ 0x79, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, +/* 000005B0 */ 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x65, 0x00, +/* 000005C0 */ 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x2E, 0x00, 0x70, 0x00, +/* 000005D0 */ 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, +/* 000005E0 */ 0x2E, 0x00, 0x65, 0x00, 0x76, 0x00, 0x65, 0x00, 0x72, 0x00, 0x79, 0x00, 0x00, 0x00, 0x41, 0x00, +/* 000005F0 */ 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, +/* 00000600 */ 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x69, 0x00, +/* 00000610 */ 0x6E, 0x00, 0x63, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x64, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, +/* 00000620 */ 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, +/* 00000630 */ 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, +/* 00000640 */ 0x72, 0x00, 0x65, 0x00, 0x64, 0x00, 0x75, 0x00, 0x63, 0x00, 0x65, 0x00, 0x00, 0x00, 0xFE, 0x39, +/* 00000650 */ 0x02, 0x00, 0x00, 0x00, 0x00, 0x6A, 0x00, 0x00, 0x00, 0x9B, 0x00, 0x00, 0x00, 0xE2, 0x00, 0x00, +/* 00000660 */ 0x00, 0x4C, 0x01, 0x00, 0x00, 0xB6, 0x01, 0x00, 0x00, 0xB7, 0x01, 0x00, 0x00, 0xC5, 0x01, 0x00, +/* 00000670 */ 0x00, 0xC6, 0x01, 0x00, 0x00, 0xDE, 0x01, 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x07, 0x02, 0x00, +/* 00000680 */ 0x00, 0x3C, 0x02, 0x00, 0x00, 0x91, 0x02, 0x00, 0x00, 0xB3, 0x02, 0x00, 0x00, 0xF7, 0x02, 0x00, +/* 00000690 */ 0x00, 0xF8, 0x02, 0x00, 0x00, 0x59, 0x03, 0x00, 0x00, 0xDB, 0x03, 0x00, 0x00, 0x03, 0x04, 0x00, +/* 000006A0 */ 0x00, 0x25, 0x04, 0x00, 0x00, 0x4E, 0x04, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x0A, 0x05, 0x00, +/* 000006B0 */ 0x00, 0x0B, 0x05, 0x00, 0x00, 0x81, 0x05, 0x00, 0x00, 0xBE, 0x05, 0x00, 0x00, 0xE4, 0x05, 0x00, +/* 000006C0 */ 0x00, 0x33, 0x06, 0x00, 0x00, 0x7F, 0x06, 0x00, 0x00, 0xD3, 0x06, 0x00, 0x00, 0x3F, 0x07, 0x00, +/* 000006D0 */ 0x00, 0x87, 0x07, 0x00, 0x00, 0xED, 0x07, 0x00, 0x00, 0xEE, 0x07, 0x00, 0x00, 0x39, 0x08, 0x00, +/* 000006E0 */ 0x00, 0xD2, 0x08, 0x00, 0x00, 0x14, 0x09, 0x00, 0x00, 0x2B, 0x09, 0x00, 0x00, 0x4C, 0x09, 0x00, +/* 000006F0 */ 0x00, 0x6A, 0x09, 0x00, 0x00, 0x6B, 0x09, 0x00, 0x00, 0xB0, 0x09, 0x00, 0x00, 0x1E, 0x0A, 0x00, +/* 00000700 */ 0x00, 0x30, 0x0A, 0x00, 0x00, 0x31, 0x0A, 0x00, 0x00, 0x5B, 0x0A, 0x00, 0x00, 0x5C, 0x0A, 0x00, +/* 00000710 */ 0x00, 0x91, 0x0A, 0x00, 0x00, 0xCE, 0x0A, 0x00, 0x00, 0xE7, 0x0A, 0x00, 0x00, 0x1A, 0x0B, 0x00, +/* 00000720 */ 0x00, 0x7E, 0x0B, 0x00, 0x00, 0x7F, 0x0B, 0x00, 0x00, 0xEB, 0x0B, 0x00, 0x00, 0x20, 0x0C, 0x00, +/* 00000730 */ 0x00, 0x21, 0x0C, 0x00, 0x00, 0x58, 0x0C, 0x00, 0x00, 0x59, 0x0C, 0x00, 0x00, 0xA4, 0x0C, 0x00, +/* 00000740 */ 0x00, 0xE9, 0x0C, 0x00, 0x00, 0x64, 0x0D, 0x00, 0x00, 0xA6, 0x0D, 0x00, 0x00, 0xC7, 0x0D, 0x00, +/* 00000750 */ 0x00, 0xFB, 0x0D, 0x00, 0x00, 0x34, 0x0E, 0x00, 0x00, 0x8B, 0x0E, 0x00, 0x00, 0xA5, 0x0E, 0x00, +/* 00000760 */ 0x00, 0xC2, 0x0E, 0x00, 0x00, 0xF7, 0x0E, 0x00, 0x00, 0x39, 0x0F, 0x00, 0x00, 0x4F, 0x0F, 0x00, +/* 00000770 */ 0x00, 0x61, 0x0F, 0x00, 0x00, 0x70, 0x0F, 0x00, 0x00, 0x8C, 0x0F, 0x00, 0x00, 0xAB, 0x0F, 0x00, +/* 00000780 */ 0x00, 0xCA, 0x0F, 0x00, 0x00, 0xDB, 0x0F, 0x00, 0x00, 0xE2, 0x0F, 0x00, 0x00, 0xE3, 0x0F, 0x00, +/* 00000790 */ 0x00, 0xA4, 0x10, 0x00, 0x00, 0xA5, 0x10, 0x00, 0x00, 0x52, 0x11, 0x00, 0x00, 0x53, 0x11, 0x00, +/* 000007A0 */ 0x00, 0x03, 0x12, 0x00, 0x00, 0x04, 0x12, 0x00, 0x00, 0x6B, 0x12, 0x00, 0x00, 0xB6, 0x12, 0x00, +/* 000007B0 */ 0x00, 0xBE, 0x12, 0x00, 0x00, 0xBF, 0x12, 0x00, 0x00, 0xF3, 0x12, 0x00, 0x00, 0x26, 0x13, 0x00, +/* 000007C0 */ 0x00, 0x75, 0x13, 0x00, 0x00, 0x7F, 0x13, 0x00, 0x00, 0xAD, 0x13, 0x00, 0x00, 0x03, 0x14, 0x00, +/* 000007D0 */ 0x00, 0x0B, 0x14, 0x00, 0x00, 0x0C, 0x14, 0x00, 0x00, 0x42, 0x14, 0x00, 0x00, 0x75, 0x14, 0x00, +/* 000007E0 */ 0x00, 0xC6, 0x14, 0x00, 0x00, 0xD0, 0x14, 0x00, 0x00, 0xFE, 0x14, 0x00, 0x00, 0x56, 0x15, 0x00, +/* 000007F0 */ 0x00, 0x5E, 0x15, 0x00, 0x00, 0x5F, 0x15, 0x00, 0x00, 0x96, 0x15, 0x00, 0x00, 0xC9, 0x15, 0x00, +/* 00000800 */ 0x00, 0x1B, 0x16, 0x00, 0x00, 0x25, 0x16, 0x00, 0x00, 0x53, 0x16, 0x00, 0x00, 0xB1, 0x16, 0x00, +/* 00000810 */ 0x00, 0xB9, 0x16, 0x00, 0x00, 0xBA, 0x16, 0x00, 0x00, 0x15, 0x17, 0x00, 0x00, 0x4D, 0x17, 0x00, +/* 00000820 */ 0x00, 0x4E, 0x17, 0x00, 0x00, 0xAB, 0x17, 0x00, 0x00, 0xAC, 0x17, 0x00, 0x00, 0xC5, 0x17, 0x00, +/* 00000830 */ 0x00, 0xDC, 0x17, 0x00, 0x00, 0xE6, 0x17, 0x00, 0x00, 0xE7, 0x17, 0x00, 0x00, 0x1D, 0x18, 0x00, +/* 00000840 */ 0x00, 0x35, 0x18, 0x00, 0x00, 0x4C, 0x18, 0x00, 0x00, 0x56, 0x18, 0x00, 0x00, 0x57, 0x18, 0x00, +/* 00000850 */ 0x00, 0x66, 0x18, 0x00, 0x00, 0x67, 0x18, 0x00, 0x00, 0xA8, 0x18, 0x00, 0x00, 0xEE, 0x18, 0x00, +/* 00000860 */ 0x00, 0x33, 0x19, 0x00, 0x00, 0x6B, 0x19, 0x00, 0x00, 0xBF, 0x19, 0x00, 0x00, 0xD2, 0x19, 0x00, +/* 00000870 */ 0x00, 0x24, 0x1A, 0x00, 0x00, 0x37, 0x1A, 0x00, 0x00, 0x72, 0x1A, 0x00, 0x00, 0x8B, 0x1A, 0x00, +/* 00000880 */ 0x00, 0x8C, 0x1A, 0x00, 0x00, 0xA5, 0x1A, 0x00, 0x00, 0xBC, 0x1A, 0x00, 0x00, 0xCA, 0x1A, 0x00, +/* 00000890 */ 0x00, 0xD4, 0x1A, 0x00, 0x00, 0xD5, 0x1A, 0x00, 0x00, 0xEF, 0x1A, 0x00, 0x00, 0x09, 0x1B, 0x00, +/* 000008A0 */ 0x00, 0x2E, 0x1B, 0x00, 0x00, 0x2F, 0x1B, 0x00, 0x00, 0x61, 0x1B, 0x00, 0x00, 0x7F, 0x1B, 0x00, +/* 000008B0 */ 0x00, 0x91, 0x1B, 0x00, 0x00, 0x9F, 0x1B, 0x00, 0x00, 0xA0, 0x1B, 0x00, 0x00, 0xB1, 0x1B, 0x00, +/* 000008C0 */ 0x00, 0xBB, 0x1B, 0x00, 0x00, 0xBC, 0x1B, 0x00, 0x00, 0xCF, 0x1B, 0x00, 0x00, 0xD7, 0x1B, 0x00, +/* 000008D0 */ 0x00, 0xD8, 0x1B, 0x00, 0x00, 0x38, 0x1C, 0x00, 0x00, 0x64, 0x1C, 0x00, 0x00, 0x94, 0x1C, 0x00, +/* 000008E0 */ 0x00, 0xA5, 0x1C, 0x00, 0x00, 0xDA, 0x1C, 0x00, 0x00, 0x22, 0x1D, 0x00, 0x00, 0x30, 0x1D, 0x00, +/* 000008F0 */ 0x00, 0x95, 0x1D, 0x00, 0x00, 0x9F, 0x1D, 0x00, 0x00, 0xA7, 0x1D, 0x00, 0x00, 0xA8, 0x1D, 0x00, +/* 00000900 */ 0x00, 0xFD, 0x1D, 0x00, 0x00, 0x34, 0x1E, 0x00, 0x00, 0x35, 0x1E, 0x00, 0x00, 0x91, 0x1E, 0x00, +/* 00000910 */ 0x00, 0x9A, 0x1E, 0x00, 0x00, 0xCA, 0x1E, 0x00, 0x00, 0x24, 0x1F, 0x00, 0x00, 0x2E, 0x1F, 0x00, +/* 00000920 */ 0x00, 0x2F, 0x1F, 0x00, 0x00, 0x69, 0x1F, 0x00, 0x00, 0x7C, 0x1F, 0x00, 0x00, 0x90, 0x1F, 0x00, +/* 00000930 */ 0x00, 0x91, 0x1F, 0x00, 0x00, 0xAB, 0x1F, 0x00, 0x00, 0xC5, 0x1F, 0x00, 0x00, 0xE8, 0x1F, 0x00, +/* 00000940 */ 0x00, 0x4E, 0x20, 0x00, 0x00, 0xA1, 0x20, 0x00, 0x00, 0xBB, 0x20, 0x00, 0x00, 0xCD, 0x20, 0x00, +/* 00000950 */ 0x00, 0xDB, 0x20, 0x00, 0x00, 0xEC, 0x20, 0x00, 0x00, 0xF6, 0x20, 0x00, 0x00, 0xF7, 0x20, 0x00, +/* 00000960 */ 0x00, 0x09, 0x21, 0x00, 0x00, 0x11, 0x21, 0x00, 0x00, 0x12, 0x21, 0x00, 0x00, 0x83, 0x21, 0x00, +/* 00000970 */ 0x00, 0x89, 0x21, 0x00, 0x00, 0xE7, 0x21, 0x00, 0x00, 0x47, 0x22, 0x00, 0x00, 0x48, 0x22, 0x00, +/* 00000980 */ 0x00, 0x6F, 0x22, 0x00, 0x00, 0x90, 0x22, 0x00, 0x00, 0xB3, 0x22, 0x00, 0x00, 0xD0, 0x22, 0x00, +/* 00000990 */ 0x00, 0x03, 0x23, 0x00, 0x00, 0x18, 0x23, 0x00, 0x00, 0x42, 0x23, 0x00, 0x00, 0x76, 0x23, 0x00, +/* 000009A0 */ 0x00, 0xB0, 0x23, 0x00, 0x00, 0xD9, 0x23, 0x00, 0x00, 0x07, 0x24, 0x00, 0x00, 0x3F, 0x24, 0x00, +/* 000009B0 */ 0x00, 0x6E, 0x24, 0x00, 0x00, 0xC3, 0x24, 0x00, 0x00, 0xF8, 0x24, 0x00, 0x00, 0x23, 0x25, 0x00, +/* 000009C0 */ 0x00, 0x67, 0x25, 0x00, 0x00, 0xAC, 0x25, 0x00, 0x00, 0xE5, 0x25, 0x00, 0x00, 0x38, 0x26, 0x00, +/* 000009D0 */ 0x00, 0xAF, 0x26, 0x00, 0x00, 0x46, 0x27, 0x00, 0x00, 0x5F, 0x27, 0x00, 0x00, 0x80, 0x27, 0x00, +/* 000009E0 */ 0x00, 0xD2, 0x27, 0x00, 0x00, 0x1A, 0x28, 0x00, 0x00, 0x6F, 0x28, 0x00, 0x00, 0x85, 0x28, 0x00, +/* 000009F0 */ 0x00, 0xEE, 0x28, 0x00, 0x00, 0x50, 0x29, 0x00, 0x00, 0x85, 0x29, 0x00, 0x00, 0xA8, 0x29, 0x00, +/* 00000A00 */ 0x00, 0xBA, 0x29, 0x00, 0x00, 0xC8, 0x29, 0x00, 0x00, 0xF6, 0x29, 0x00, 0x00, 0x11, 0x2A, 0x00, +/* 00000A10 */ 0x00, 0x1B, 0x2A, 0x00, 0x00, 0x3C, 0x2A, 0x00, 0x00, 0x58, 0x2A, 0x00, 0x00, 0x60, 0x2A, 0x00, +/* 00000A20 */ 0x00, 0x61, 0x2A, 0x00, 0x00, 0xEC, 0x2A, 0x00, 0x00, 0x39, 0x2B, 0x00, 0x00, 0x7E, 0x2B, 0x00, +/* 00000A30 */ 0x00, 0xCF, 0x2B, 0x00, 0x00, 0x20, 0x2C, 0x00, 0x00, 0x63, 0x2C, 0x00, 0x00, 0x8A, 0x2C, 0x00, +/* 00000A40 */ 0x00, 0xAB, 0x2C, 0x00, 0x00, 0xCE, 0x2C, 0x00, 0x00, 0xEB, 0x2C, 0x00, 0x00, 0x1E, 0x2D, 0x00, +/* 00000A50 */ 0x00, 0x1F, 0x2D, 0x00, 0x00, 0x4D, 0x2D, 0x00, 0x00, 0x77, 0x2D, 0x00, 0x00, 0xAB, 0x2D, 0x00, +/* 00000A60 */ 0x00, 0xE5, 0x2D, 0x00, 0x00, 0x0E, 0x2E, 0x00, 0x00, 0x3C, 0x2E, 0x00, 0x00, 0x74, 0x2E, 0x00, +/* 00000A70 */ 0x00, 0xAF, 0x2E, 0x00, 0x00, 0xE6, 0x2E, 0x00, 0x00, 0x50, 0x2F, 0x00, 0x00, 0xDA, 0x2F, 0x00, +/* 00000A80 */ 0x00, 0x0F, 0x30, 0x00, 0x00, 0x3A, 0x30, 0x00, 0x00, 0x7E, 0x30, 0x00, 0x00, 0xB4, 0x30, 0x00, +/* 00000A90 */ 0x00, 0x07, 0x31, 0x00, 0x00, 0x7E, 0x31, 0x00, 0x00, 0xB6, 0x31, 0x00, 0x00, 0x1F, 0x32, 0x00, +/* 00000AA0 */ 0x00, 0x6B, 0x32, 0x00, 0x00, 0x8F, 0x32, 0x00, 0x00, 0xC6, 0x32, 0x00, 0x00, 0xFB, 0x32, 0x00, +/* 00000AB0 */ 0x00, 0x55, 0x33, 0x00, 0x00, 0xA5, 0x33, 0x00, 0x00, 0x05, 0x34, 0x00, 0x00, 0x23, 0x34, 0x00, +/* 00000AC0 */ 0x00, 0x95, 0x34, 0x00, 0x00, 0x0B, 0x35, 0x00, 0x00, 0x49, 0x35, 0x00, 0x00, 0x74, 0x35, 0x00, +/* 00000AD0 */ 0x00, 0x8E, 0x35, 0x00, 0x00, 0xB4, 0x35, 0x00, 0x00, 0xCA, 0x35, 0x00, 0x00, 0xE3, 0x35, 0x00, +/* 00000AE0 */ 0x00, 0x05, 0x36, 0x00, 0x00, 0x5B, 0x36, 0x00, 0x00, 0xA3, 0x36, 0x00, 0x00, 0xFB, 0x36, 0x00, +/* 00000AF0 */ 0x00, 0x11, 0x37, 0x00, 0x00, 0x7B, 0x37, 0x00, 0x00, 0xDD, 0x37, 0x00, 0x00, 0x13, 0x38, 0x00, +/* 00000B00 */ 0x00, 0x36, 0x38, 0x00, 0x00, 0x48, 0x38, 0x00, 0x00, 0x56, 0x38, 0x00, 0x00, 0x84, 0x38, 0x00, +/* 00000B10 */ 0x00, 0x9F, 0x38, 0x00, 0x00, 0xA9, 0x38, 0x00, 0x00, 0xCA, 0x38, 0x00, 0x00, 0xE6, 0x38, 0x00, +/* 00000B20 */ 0x00, 0xEE, 0x38, 0x00, 0x00, 0xEF, 0x38, 0x00, 0x00, 0x34, 0x39, 0x00, 0x00, 0x62, 0x39, 0x00, +/* 00000B30 */ 0x00, 0xA0, 0x39, 0x00, 0x00, 0xFA, 0x39, 0x00, 0x00, 0xFB, 0x39, 0x00, 0x00, 0x1B, 0x3A, 0x00, +/* 00000B40 */ 0x00, 0x48, 0x3A, 0x00, 0x00, 0x79, 0x3A, 0x00, 0x00, 0xCE, 0x3A, 0x00, 0x00, 0x00, 0x3B, 0x00, +/* 00000B50 */ 0x00, 0x3C, 0x3B, 0x00, 0x00, 0x83, 0x3B, 0x00, 0x00, 0xC5, 0x3B, 0x00, 0x00, 0xDC, 0x3B, 0x00, +/* 00000B60 */ 0x00, 0xEE, 0x3B, 0x00, 0x00, 0xF6, 0x3B, 0x00, 0x00, 0xF7, 0x3B, 0x00, 0x00, 0x51, 0x3C, 0x00, +/* 00000B70 */ 0x00, 0x7F, 0x3C, 0x00, 0x00, 0xBD, 0x3C, 0x00, 0x00, 0x1A, 0x3D, 0x00, 0x00, 0x1B, 0x3D, 0x00, +/* 00000B80 */ 0x00, 0x6B, 0x3D, 0x00, 0x00, 0x9F, 0x3D, 0x00, 0x00, 0xFA, 0x3D, 0x00, 0x00, 0x04, 0x3E, 0x00, +/* 00000B90 */ 0x00, 0x52, 0x3E, 0x00, 0x00, 0x84, 0x3E, 0x00, 0x00, 0xC0, 0x3E, 0x00, 0x00, 0x07, 0x3F, 0x00, +/* 00000BA0 */ 0x00, 0x5E, 0x3F, 0x00, 0x00, 0x75, 0x3F, 0x00, 0x00, 0x87, 0x3F, 0x00, 0x00, 0x8F, 0x3F, 0x00, +/* 00000BB0 */ 0x00, 0x90, 0x3F, 0x00, 0x00, 0xE6, 0x3F, 0x00, 0x00, 0x1E, 0x40, 0x00, 0x00, 0x1F, 0x40, 0x00, +/* 00000BC0 */ 0x00, 0x4A, 0x40, 0x00, 0x00, 0x7F, 0x40, 0x00, 0x00, 0xDC, 0x40, 0x00, 0x00, 0xE5, 0x40, 0x00, +/* 00000BD0 */ 0x00, 0x30, 0x41, 0x00, 0x00, 0x60, 0x41, 0x00, 0x00, 0xBB, 0x41, 0x00, 0x00, 0xC5, 0x41, 0x00, +/* 00000BE0 */ 0x00, 0xC6, 0x41, 0x00, 0x00, 0x12, 0x42, 0x00, 0x00, 0x28, 0x42, 0x00, 0x00, 0x3B, 0x42, 0x00, +/* 00000BF0 */ 0x00, 0x3C, 0x42, 0x00, 0x00, 0x5C, 0x42, 0x00, 0x00, 0x76, 0x42, 0x00, 0x00, 0x9D, 0x42, 0x00, +/* 00000C00 */ 0x00, 0xD1, 0x42, 0x00, 0x00, 0xF9, 0x42, 0x00, 0x00, 0x13, 0x43, 0x00, 0x00, 0x41, 0x43, 0x00, +/* 00000C10 */ 0x00, 0x64, 0x43, 0x00, 0x00, 0xA4, 0x43, 0x00, 0x00, 0x04, 0x44, 0x00, 0x00, 0x12, 0x44, 0x00, +/* 00000C20 */ 0x00, 0x31, 0x44, 0x00, 0x00, 0x42, 0x44, 0x00, 0x00, 0x4C, 0x44, 0x00, 0x00, 0x69, 0x44, 0x00, +/* 00000C30 */ 0x00, 0x83, 0x44, 0x00, 0x00, 0x8B, 0x44, 0x00, 0x00, 0x8C, 0x44, 0x00, 0x00, 0xDF, 0x44, 0x00, +/* 00000C40 */ 0x00, 0x14, 0x45, 0x00, 0x00, 0x1D, 0x45, 0x00, 0x00, 0x48, 0x45, 0x00, 0x00, 0x7D, 0x45, 0x00, +/* 00000C50 */ 0x00, 0xD7, 0x45, 0x00, 0x00, 0xD8, 0x45, 0x00, 0x00, 0x23, 0x46, 0x00, 0x00, 0x53, 0x46, 0x00, +/* 00000C60 */ 0x00, 0xAB, 0x46, 0x00, 0x00, 0xB5, 0x46, 0x00, 0x00, 0xB6, 0x46, 0x00, 0x00, 0x02, 0x47, 0x00, +/* 00000C70 */ 0x00, 0x18, 0x47, 0x00, 0x00, 0x2B, 0x47, 0x00, 0x00, 0x2C, 0x47, 0x00, 0x00, 0x4C, 0x47, 0x00, +/* 00000C80 */ 0x00, 0x66, 0x47, 0x00, 0x00, 0x8D, 0x47, 0x00, 0x00, 0xC1, 0x47, 0x00, 0x00, 0xE9, 0x47, 0x00, +/* 00000C90 */ 0x00, 0x03, 0x48, 0x00, 0x00, 0x31, 0x48, 0x00, 0x00, 0x54, 0x48, 0x00, 0x00, 0xA9, 0x48, 0x00, +/* 00000CA0 */ 0x00, 0xDF, 0x48, 0x00, 0x00, 0x45, 0x49, 0x00, 0x00, 0x66, 0x49, 0x00, 0x00, 0x78, 0x49, 0x00, +/* 00000CB0 */ 0x00, 0x86, 0x49, 0x00, 0x00, 0xA5, 0x49, 0x00, 0x00, 0xB6, 0x49, 0x00, 0x00, 0xC0, 0x49, 0x00, +/* 00000CC0 */ 0x00, 0xD9, 0x49, 0x00, 0x00, 0xEF, 0x49, 0x00, 0x00, 0xF7, 0x49, 0x00, 0x00, 0xF8, 0x49, 0x00, +/* 00000CD0 */ 0x00, 0x4C, 0x4A, 0x00, 0x00, 0x82, 0x4A, 0x00, 0x00, 0x8B, 0x4A, 0x00, 0x00, 0xB6, 0x4A, 0x00, +/* 00000CE0 */ 0x00, 0xEB, 0x4A, 0x00, 0x00, 0x46, 0x4B, 0x00, 0x00, 0x47, 0x4B, 0x00, 0x00, 0x92, 0x4B, 0x00, +/* 00000CF0 */ 0x00, 0xC2, 0x4B, 0x00, 0x00, 0x1B, 0x4C, 0x00, 0x00, 0x25, 0x4C, 0x00, 0x00, 0x26, 0x4C, 0x00, +/* 00000D00 */ 0x00, 0x72, 0x4C, 0x00, 0x00, 0x88, 0x4C, 0x00, 0x00, 0x9B, 0x4C, 0x00, 0x00, 0x9C, 0x4C, 0x00, +/* 00000D10 */ 0x00, 0xBC, 0x4C, 0x00, 0x00, 0xD6, 0x4C, 0x00, 0x00, 0xFD, 0x4C, 0x00, 0x00, 0x31, 0x4D, 0x00, +/* 00000D20 */ 0x00, 0x59, 0x4D, 0x00, 0x00, 0x73, 0x4D, 0x00, 0x00, 0xA1, 0x4D, 0x00, 0x00, 0xC4, 0x4D, 0x00, +/* 00000D30 */ 0x00, 0x19, 0x4E, 0x00, 0x00, 0x51, 0x4E, 0x00, 0x00, 0xB8, 0x4E, 0x00, 0x00, 0xDA, 0x4E, 0x00, +/* 00000D40 */ 0x00, 0xEC, 0x4E, 0x00, 0x00, 0xFA, 0x4E, 0x00, 0x00, 0x19, 0x4F, 0x00, 0x00, 0x2A, 0x4F, 0x00, +/* 00000D50 */ 0x00, 0x34, 0x4F, 0x00, 0x00, 0x4C, 0x4F, 0x00, 0x00, 0x61, 0x4F, 0x00, 0x00, 0x69, 0x4F, 0x00, +/* 00000D60 */ 0x00, 0x6A, 0x4F, 0x00, 0x00, 0xC6, 0x4F, 0x00, 0x00, 0xFF, 0x4F, 0x00, 0x00, 0x00, 0x50, 0x00, +/* 00000D70 */ 0x00, 0x2B, 0x50, 0x00, 0x00, 0x60, 0x50, 0x00, 0x00, 0xBD, 0x50, 0x00, 0x00, 0xBE, 0x50, 0x00, +/* 00000D80 */ 0x00, 0xE3, 0x50, 0x00, 0x00, 0xFC, 0x50, 0x00, 0x00, 0x16, 0x51, 0x00, 0x00, 0x20, 0x51, 0x00, +/* 00000D90 */ 0x00, 0x21, 0x51, 0x00, 0x00, 0x4C, 0x51, 0x00, 0x00, 0x86, 0x51, 0x00, 0x00, 0xBC, 0x51, 0x00, +/* 00000DA0 */ 0x00, 0xCB, 0x51, 0x00, 0x00, 0xCC, 0x51, 0x00, 0x00, 0xE6, 0x51, 0x00, 0x00, 0xFE, 0x51, 0x00, +/* 00000DB0 */ 0x00, 0x14, 0x52, 0x00, 0x00, 0x32, 0x52, 0x00, 0x00, 0x54, 0x52, 0x00, 0x00, 0x6A, 0x52, 0x00, +/* 00000DC0 */ 0x00, 0x7D, 0x52, 0x00, 0x00, 0x88, 0x52, 0x00, 0x00, 0x97, 0x52, 0x00, 0x00, 0xB0, 0x52, 0x00, +/* 00000DD0 */ 0x00, 0xB1, 0x52, 0x00, 0x00, 0xCA, 0x52, 0x00, 0x00, 0xE1, 0x52, 0x00, 0x00, 0xEF, 0x52, 0x00, +/* 00000DE0 */ 0x00, 0xF9, 0x52, 0x00, 0x00, 0xFA, 0x52, 0x00, 0x00, 0x1A, 0x53, 0x00, 0x00, 0x34, 0x53, 0x00, +/* 00000DF0 */ 0x00, 0x79, 0x53, 0x00, 0x00, 0x9A, 0x53, 0x00, 0x00, 0xE8, 0x53, 0x00, 0x00, 0x69, 0x54, 0x00, +/* 00000E00 */ 0x00, 0x86, 0x54, 0x00, 0x00, 0x94, 0x54, 0x00, 0x00, 0xB3, 0x54, 0x00, 0x00, 0xC4, 0x54, 0x00, +/* 00000E10 */ 0x00, 0xCE, 0x54, 0x00, 0x00, 0xE7, 0x54, 0x00, 0x00, 0xFD, 0x54, 0x00, 0x00, 0x05, 0x55, 0x00, +/* 00000E20 */ 0x00, 0x06, 0x55, 0x00, 0x00, 0x60, 0x55, 0x00, 0x00, 0x97, 0x55, 0x00, 0x00, 0x98, 0x55, 0x00, +/* 00000E30 */ 0x00, 0xC3, 0x55, 0x00, 0x00, 0xF8, 0x55, 0x00, 0x00, 0x54, 0x56, 0x00, 0x00, 0x55, 0x56, 0x00, +/* 00000E40 */ 0x00, 0xA0, 0x56, 0x00, 0x00, 0xD0, 0x56, 0x00, 0x00, 0x2A, 0x57, 0x00, 0x00, 0x34, 0x57, 0x00, +/* 00000E50 */ 0x00, 0x35, 0x57, 0x00, 0x00, 0x89, 0x57, 0x00, 0x00, 0xC0, 0x57, 0x00, 0x00, 0x1E, 0x58, 0x00, +/* 00000E60 */ 0x00, 0x28, 0x58, 0x00, 0x00, 0x29, 0x58, 0x00, 0x00, 0x3F, 0x58, 0x00, 0x00, 0x67, 0x58, 0x00, +/* 00000E70 */ 0x00, 0x7A, 0x58, 0x00, 0x00, 0x9F, 0x58, 0x00, 0x00, 0xA0, 0x58, 0x00, 0x00, 0xCB, 0x58, 0x00, +/* 00000E80 */ 0x00, 0xF6, 0x58, 0x00, 0x00, 0x6A, 0x59, 0x00, 0x00, 0x92, 0x59, 0x00, 0x00, 0x9C, 0x59, 0x00, +/* 00000E90 */ 0x00, 0xC8, 0x59, 0x00, 0x00, 0xD7, 0x59, 0x00, 0x00, 0xFC, 0x59, 0x00, 0x00, 0x1E, 0x5A, 0x00, +/* 00000EA0 */ 0x00, 0x58, 0x5A, 0x00, 0x00, 0x83, 0x5A, 0x00, 0x00, 0xAE, 0x5A, 0x00, 0x00, 0xE6, 0x5A, 0x00, +/* 00000EB0 */ 0x00, 0x12, 0x5B, 0x00, 0x00, 0x47, 0x5B, 0x00, 0x00, 0x65, 0x5B, 0x00, 0x00, 0x8A, 0x5B, 0x00, +/* 00000EC0 */ 0x00, 0xB2, 0x5B, 0x00, 0x00, 0xC4, 0x5B, 0x00, 0x00, 0xE7, 0x5B, 0x00, 0x00, 0xFC, 0x5B, 0x00, +/* 00000ED0 */ 0x00, 0x0A, 0x5C, 0x00, 0x00, 0x4B, 0x5C, 0x00, 0x00, 0x68, 0x5C, 0x00, 0x00, 0xCA, 0x5C, 0x00, +/* 00000EE0 */ 0x00, 0xD8, 0x5C, 0x00, 0x00, 0xE2, 0x5C, 0x00, 0x00, 0xE3, 0x5C, 0x00, 0x00, 0x03, 0x5D, 0x00, +/* 00000EF0 */ 0x00, 0x1D, 0x5D, 0x00, 0x00, 0x44, 0x5D, 0x00, 0x00, 0x78, 0x5D, 0x00, 0x00, 0xA0, 0x5D, 0x00, +/* 00000F00 */ 0x00, 0xBA, 0x5D, 0x00, 0x00, 0xE8, 0x5D, 0x00, 0x00, 0x0B, 0x5E, 0x00, 0x00, 0x6B, 0x5E, 0x00, +/* 00000F10 */ 0x00, 0xE8, 0x5E, 0x00, 0x00, 0xF6, 0x5E, 0x00, 0x00, 0x15, 0x5F, 0x00, 0x00, 0x26, 0x5F, 0x00, +/* 00000F20 */ 0x00, 0x30, 0x5F, 0x00, 0x00, 0x4F, 0x5F, 0x00, 0x00, 0x6B, 0x5F, 0x00, 0x00, 0x73, 0x5F, 0x00, +/* 00000F30 */ 0x00, 0x77, 0x5F, 0x00, 0x00, 0x00, 0x14, 0x73, 0x0C, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, 0xA8, +/* 00000F40 */ 0x41, 0xC0, 0x00, 0xFE, 0xD9, 0x02, 0x00, 0xFE, 0xB7, 0x01, 0xFE, 0xB7, 0x01, 0x01, 0x40, 0xFE, +/* 00000F50 */ 0x00, 0x90, 0xFE, 0xB7, 0x01, 0xFE, 0xC0, 0x5D, 0xFE, 0xC0, 0x5D, 0x01, 0x04, 0x04, 0x04, 0x04, +/* 00000F60 */ 0x03, 0x05, 0xFE, 0xDA, 0x02, 0x0A, 0x07, 0xA8, 0x00, 0xD6, 0x00, 0x04, 0x24, 0x00, 0x00, 0x01, +/* 00000F70 */ 0x05, 0x00, 0x00, 0x00, 0x00, 0x79, 0x0F, 0x00, 0x00, 0x7F, 0x1C, 0x08, 0xC0, 0x13, 0x10, 0x4B, +/* 00000F80 */ 0x00, 0x08, 0x01, 0xA2, 0x41, 0xD1, 0x00, 0x01, 0xFE, 0xC7, 0x01, 0xFE, 0xC7, 0x01, 0x12, 0x40, +/* 00000F90 */ 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0xC7, 0x01, 0xFE, 0xAD, 0x5D, 0xFE, 0xAD, 0x5D, 0x0C, 0x20, +/* 00000FA0 */ 0x28, 0x09, 0xF7, 0xE9, 0x1B, 0x3E, 0x3E, 0x3E, 0x3E, 0x04, 0x27, 0x08, 0x06, 0xFE, 0xDB, 0x02, +/* 00000FB0 */ 0x06, 0xFE, 0xDC, 0x02, 0x06, 0xFE, 0xDD, 0x02, 0x06, 0xFE, 0xDE, 0x02, 0x0B, 0x06, 0xFE, 0xDF, +/* 00000FC0 */ 0x02, 0x0C, 0x06, 0xFE, 0xE0, 0x02, 0x07, 0x05, 0xFE, 0xE1, 0x02, 0x06, 0xFE, 0xE2, 0x02, 0x01, +/* 00000FD0 */ 0x00, 0x06, 0xFE, 0xE3, 0x02, 0x06, 0xFE, 0xE4, 0x02, 0x06, 0xFE, 0xE5, 0x02, 0x06, 0xFE, 0xE6, +/* 00000FE0 */ 0x02, 0x06, 0xFE, 0xE7, 0x02, 0x06, 0xFE, 0xE8, 0x02, 0x06, 0xFE, 0xE9, 0x02, 0x06, 0xFE, 0xEA, +/* 00000FF0 */ 0x02, 0x06, 0xFE, 0xEB, 0x02, 0x06, 0xFE, 0xEC, 0x02, 0x06, 0xFE, 0xED, 0x02, 0x06, 0xFE, 0xEE, +/* 00001000 */ 0x02, 0x06, 0xFE, 0xEF, 0x02, 0x06, 0xFE, 0xF0, 0x02, 0x06, 0xFE, 0xF1, 0x02, 0x06, 0xFE, 0xF2, +/* 00001010 */ 0x02, 0x06, 0xFE, 0xF3, 0x02, 0xFE, 0x58, 0x04, 0x5F, 0x28, 0x20, 0x00, 0x45, 0x21, 0x28, 0x5F, +/* 00001020 */ 0x28, 0x21, 0x01, 0x45, 0x22, 0x28, 0x5F, 0x28, 0x21, 0x02, 0x45, 0x23, 0x28, 0x5F, 0x28, 0x21, +/* 00001030 */ 0x03, 0x45, 0x24, 0x28, 0x5F, 0x28, 0x21, 0x04, 0x45, 0x25, 0x28, 0x6D, 0x28, 0x21, 0x05, 0x07, +/* 00001040 */ 0x03, 0x00, 0x59, 0x00, 0x21, 0x5A, 0x01, 0x03, 0x00, 0x00, 0xD6, 0x00, 0x29, 0x5A, 0x02, 0x29, +/* 00001050 */ 0x00, 0x00, 0xF4, 0x03, 0xFF, 0x28, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6D, 0x28, 0x21, 0x06, +/* 00001060 */ 0x07, 0x01, 0x00, 0x59, 0x00, 0x21, 0xF4, 0x01, 0x28, 0x28, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, +/* 00001070 */ 0x45, 0x26, 0x28, 0x01, 0x58, 0x01, 0x28, 0x5F, 0x28, 0x28, 0x07, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 00001080 */ 0x02, 0x5A, 0x01, 0x26, 0x02, 0x00, 0xF0, 0x02, 0x29, 0x25, 0x02, 0x00, 0x77, 0x29, 0x28, 0x08, +/* 00001090 */ 0x01, 0x58, 0x01, 0x28, 0x5F, 0x29, 0x21, 0x09, 0x77, 0x29, 0x28, 0x0A, 0x01, 0x58, 0x01, 0x28, +/* 000010A0 */ 0x5F, 0x29, 0x21, 0x0B, 0x77, 0x29, 0x28, 0x0C, 0x01, 0x58, 0x01, 0x28, 0x5F, 0x29, 0x21, 0x0D, +/* 000010B0 */ 0x77, 0x29, 0x28, 0x0E, 0x01, 0x58, 0x01, 0x28, 0x5F, 0x29, 0x21, 0x0F, 0x77, 0x29, 0x28, 0x10, +/* 000010C0 */ 0x01, 0x58, 0x01, 0x28, 0x5F, 0x29, 0x21, 0x11, 0x77, 0x29, 0x28, 0x12, 0x45, 0x28, 0x23, 0x07, +/* 000010D0 */ 0x04, 0x00, 0x59, 0x00, 0x02, 0x01, 0x58, 0x01, 0x29, 0x5F, 0x29, 0x29, 0x13, 0x5F, 0x29, 0x29, +/* 000010E0 */ 0x14, 0x5A, 0x01, 0x29, 0x03, 0x00, 0x5A, 0x02, 0x04, 0x03, 0x00, 0x45, 0x29, 0x22, 0x07, 0x03, +/* 000010F0 */ 0x00, 0x59, 0x00, 0x02, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, +/* 00001100 */ 0x00, 0xD9, 0x01, 0x2B, 0x2A, 0x7B, 0x2B, 0x2A, 0x15, 0x7B, 0x07, 0x2A, 0x16, 0x7B, 0x09, 0x2A, +/* 00001110 */ 0x17, 0x7B, 0x07, 0x2A, 0x18, 0x5A, 0x01, 0x2A, 0x04, 0x00, 0x5A, 0x02, 0x0B, 0x04, 0x00, 0xF0, +/* 00001120 */ 0x03, 0x29, 0x29, 0x04, 0x00, 0x5A, 0x03, 0x29, 0x03, 0x00, 0xF0, 0x04, 0xFF, 0x28, 0x03, 0x00, +/* 00001130 */ 0x45, 0x28, 0x23, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x01, 0x58, 0x01, 0x29, 0x5F, 0x29, 0x29, +/* 00001140 */ 0x19, 0x5F, 0x29, 0x29, 0x1A, 0x5A, 0x01, 0x29, 0x05, 0x00, 0x5F, 0x29, 0x24, 0x1B, 0x5A, 0x02, +/* 00001150 */ 0x29, 0x05, 0x00, 0x45, 0x29, 0x22, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0xCE, 0x18, 0x00, 0x00, +/* 00001160 */ 0x00, 0x01, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x7B, 0x0C, 0x2A, 0x1C, 0x7B, 0x09, 0x2A, +/* 00001170 */ 0x1D, 0x7B, 0x09, 0x2A, 0x1E, 0x7B, 0x07, 0x2A, 0x1F, 0x5A, 0x01, 0x2A, 0x06, 0x00, 0x5A, 0x02, +/* 00001180 */ 0x0B, 0x06, 0x00, 0xF0, 0x03, 0x29, 0x29, 0x06, 0x00, 0x5A, 0x03, 0x29, 0x05, 0x00, 0xF0, 0x04, +/* 00001190 */ 0xFF, 0x28, 0x05, 0x00, 0x45, 0x28, 0x23, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x01, 0x58, 0x01, +/* 000011A0 */ 0x29, 0x5F, 0x29, 0x29, 0x20, 0x5F, 0x29, 0x29, 0x21, 0x5F, 0x29, 0x29, 0x22, 0x5A, 0x01, 0x29, +/* 000011B0 */ 0x07, 0x00, 0x5A, 0x02, 0x0D, 0x07, 0x00, 0x45, 0x29, 0x22, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, +/* 000011C0 */ 0xCE, 0x30, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x7B, 0x0E, 0x2A, +/* 000011D0 */ 0x23, 0x7B, 0x09, 0x2A, 0x24, 0x7B, 0x09, 0x2A, 0x25, 0x7B, 0x07, 0x2A, 0x26, 0x5A, 0x01, 0x2A, +/* 000011E0 */ 0x08, 0x00, 0x5A, 0x02, 0x0B, 0x08, 0x00, 0xF0, 0x03, 0x29, 0x29, 0x08, 0x00, 0x5A, 0x03, 0x29, +/* 000011F0 */ 0x07, 0x00, 0xF0, 0x04, 0xFF, 0x28, 0x07, 0x00, 0x45, 0x28, 0x23, 0x07, 0x04, 0x00, 0x59, 0x00, +/* 00001200 */ 0x02, 0x01, 0x58, 0x01, 0x29, 0x5F, 0x29, 0x29, 0x27, 0x5F, 0x29, 0x29, 0x28, 0x5F, 0x29, 0x29, +/* 00001210 */ 0x29, 0x5A, 0x01, 0x29, 0x09, 0x00, 0x5A, 0x02, 0x0F, 0x09, 0x00, 0x45, 0x29, 0x22, 0x07, 0x03, +/* 00001220 */ 0x00, 0x59, 0x00, 0x02, 0xCE, 0x48, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, +/* 00001230 */ 0x00, 0x7B, 0x04, 0x2A, 0x2A, 0x7B, 0x09, 0x2A, 0x2B, 0x7B, 0x09, 0x2A, 0x2C, 0x7B, 0x07, 0x2A, +/* 00001240 */ 0x2D, 0x5A, 0x01, 0x2A, 0x0A, 0x00, 0x5A, 0x02, 0x0B, 0x0A, 0x00, 0xF0, 0x03, 0x29, 0x29, 0x0A, +/* 00001250 */ 0x00, 0x5A, 0x03, 0x29, 0x09, 0x00, 0xF0, 0x04, 0xFF, 0x28, 0x09, 0x00, 0x6D, 0x28, 0x21, 0x2E, +/* 00001260 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x21, 0x5A, 0x01, 0x10, 0x0B, 0x00, 0xD6, 0x02, 0x29, 0x5A, 0x02, +/* 00001270 */ 0x29, 0x0B, 0x00, 0xF4, 0x03, 0xFF, 0x28, 0x2E, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x6D, 0x28, 0x21, +/* 00001280 */ 0x2F, 0x07, 0x03, 0x00, 0x59, 0x00, 0x21, 0x5A, 0x01, 0x11, 0x0C, 0x00, 0xD6, 0x03, 0x29, 0x5A, +/* 00001290 */ 0x02, 0x29, 0x0C, 0x00, 0xF4, 0x03, 0xFF, 0x28, 0x2F, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x6D, 0x28, +/* 000012A0 */ 0x21, 0x30, 0x07, 0x03, 0x00, 0x59, 0x00, 0x21, 0x5A, 0x01, 0x12, 0x0D, 0x00, 0xD6, 0x04, 0x29, +/* 000012B0 */ 0x5A, 0x02, 0x29, 0x0D, 0x00, 0xF4, 0x03, 0xFF, 0x28, 0x30, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x6D, +/* 000012C0 */ 0x28, 0x21, 0x31, 0x07, 0x03, 0x00, 0x59, 0x00, 0x21, 0x5A, 0x01, 0x13, 0x0E, 0x00, 0xD6, 0x05, +/* 000012D0 */ 0x29, 0x5A, 0x02, 0x29, 0x0E, 0x00, 0xF4, 0x03, 0xFF, 0x28, 0x31, 0x00, 0x00, 0x00, 0x0E, 0x00, +/* 000012E0 */ 0x6D, 0x28, 0x21, 0x32, 0x07, 0x03, 0x00, 0x59, 0x00, 0x21, 0x5A, 0x01, 0x14, 0x0F, 0x00, 0xD6, +/* 000012F0 */ 0x06, 0x29, 0x5A, 0x02, 0x29, 0x0F, 0x00, 0xF4, 0x03, 0xFF, 0x28, 0x32, 0x00, 0x00, 0x00, 0x0F, +/* 00001300 */ 0x00, 0x6D, 0x28, 0x21, 0x33, 0x07, 0x03, 0x00, 0x59, 0x00, 0x21, 0x5A, 0x01, 0x15, 0x10, 0x00, +/* 00001310 */ 0xD6, 0x07, 0x29, 0x5A, 0x02, 0x29, 0x10, 0x00, 0xF4, 0x03, 0xFF, 0x28, 0x33, 0x00, 0x00, 0x00, +/* 00001320 */ 0x10, 0x00, 0x6D, 0x28, 0x21, 0x34, 0x07, 0x03, 0x00, 0x59, 0x00, 0x21, 0x5A, 0x01, 0x16, 0x11, +/* 00001330 */ 0x00, 0xD6, 0x08, 0x29, 0x5A, 0x02, 0x29, 0x11, 0x00, 0xF4, 0x03, 0xFF, 0x28, 0x34, 0x00, 0x00, +/* 00001340 */ 0x00, 0x11, 0x00, 0x6D, 0x28, 0x21, 0x35, 0x07, 0x03, 0x00, 0x59, 0x00, 0x21, 0x5A, 0x01, 0x17, +/* 00001350 */ 0x12, 0x00, 0xD6, 0x09, 0x29, 0x5A, 0x02, 0x29, 0x12, 0x00, 0xF4, 0x03, 0xFF, 0x28, 0x35, 0x00, +/* 00001360 */ 0x00, 0x00, 0x12, 0x00, 0x6D, 0x28, 0x21, 0x36, 0x07, 0x03, 0x00, 0x59, 0x00, 0x21, 0x5A, 0x01, +/* 00001370 */ 0x18, 0x13, 0x00, 0xD6, 0x0A, 0x29, 0x5A, 0x02, 0x29, 0x13, 0x00, 0xF4, 0x03, 0xFF, 0x28, 0x36, +/* 00001380 */ 0x00, 0x00, 0x00, 0x13, 0x00, 0x6D, 0x28, 0x21, 0x37, 0x07, 0x03, 0x00, 0x59, 0x00, 0x21, 0x5A, +/* 00001390 */ 0x01, 0x19, 0x14, 0x00, 0xD6, 0x0B, 0x29, 0x5A, 0x02, 0x29, 0x14, 0x00, 0xF4, 0x03, 0xFF, 0x28, +/* 000013A0 */ 0x37, 0x00, 0x00, 0x00, 0x14, 0x00, 0x6D, 0x28, 0x21, 0x38, 0x07, 0x03, 0x00, 0x59, 0x00, 0x21, +/* 000013B0 */ 0x5A, 0x01, 0x1A, 0x15, 0x00, 0xD6, 0x0C, 0x29, 0x5A, 0x02, 0x29, 0x15, 0x00, 0xF4, 0x03, 0xFF, +/* 000013C0 */ 0x28, 0x38, 0x00, 0x00, 0x00, 0x15, 0x00, 0x6D, 0x28, 0x21, 0x39, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 000013D0 */ 0x21, 0x5A, 0x01, 0x1B, 0x16, 0x00, 0xD6, 0x0D, 0x29, 0x5A, 0x02, 0x29, 0x16, 0x00, 0xF4, 0x03, +/* 000013E0 */ 0xFF, 0x28, 0x39, 0x00, 0x00, 0x00, 0x16, 0x00, 0x6D, 0x28, 0x21, 0x3A, 0x07, 0x03, 0x00, 0x59, +/* 000013F0 */ 0x00, 0x21, 0x5A, 0x01, 0x1C, 0x17, 0x00, 0xD6, 0x0E, 0x29, 0x5A, 0x02, 0x29, 0x17, 0x00, 0xF4, +/* 00001400 */ 0x03, 0xFF, 0x28, 0x3A, 0x00, 0x00, 0x00, 0x17, 0x00, 0x6D, 0x28, 0x21, 0x3B, 0x07, 0x03, 0x00, +/* 00001410 */ 0x59, 0x00, 0x21, 0x5A, 0x01, 0x1D, 0x18, 0x00, 0xD6, 0x0F, 0x29, 0x5A, 0x02, 0x29, 0x18, 0x00, +/* 00001420 */ 0xF4, 0x03, 0xFF, 0x28, 0x3B, 0x00, 0x00, 0x00, 0x18, 0x00, 0x6D, 0x28, 0x21, 0x3C, 0x07, 0x03, +/* 00001430 */ 0x00, 0x59, 0x00, 0x21, 0x5A, 0x01, 0x1E, 0x19, 0x00, 0xD6, 0x10, 0x29, 0x5A, 0x02, 0x29, 0x19, +/* 00001440 */ 0x00, 0xF4, 0x03, 0xFF, 0x28, 0x3C, 0x00, 0x00, 0x00, 0x19, 0x00, 0x6D, 0x28, 0x21, 0x3D, 0x07, +/* 00001450 */ 0x03, 0x00, 0x59, 0x00, 0x21, 0x5A, 0x01, 0x1F, 0x1A, 0x00, 0xD6, 0x11, 0x29, 0x5A, 0x02, 0x29, +/* 00001460 */ 0x1A, 0x00, 0xF4, 0x03, 0xFF, 0x28, 0x3D, 0x00, 0x00, 0x00, 0x1A, 0x00, 0xA8, 0x00, 0x24, 0x00, +/* 00001470 */ 0x04, 0x60, 0x00, 0x48, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, +/* 00001480 */ 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x30, +/* 00001490 */ 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, +/* 000014A0 */ 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x03, +/* 000014B0 */ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, +/* 000014C0 */ 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, +/* 000014D0 */ 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, +/* 000014E0 */ 0x01, 0x00, 0x00, 0x59, 0xFE, 0xBE, 0x02, 0xFE, 0x8F, 0x02, 0xFE, 0x66, 0x01, 0xFE, 0x95, 0x02, +/* 000014F0 */ 0xFE, 0x7E, 0x02, 0xFE, 0x7B, 0x02, 0xFE, 0xDB, 0x02, 0xFE, 0x24, 0x01, 0xFE, 0xB6, 0x02, 0xFE, +/* 00001500 */ 0xB6, 0x02, 0xFE, 0xB0, 0x02, 0xFE, 0xB0, 0x02, 0xFE, 0xB5, 0x02, 0xFE, 0xB5, 0x02, 0xFE, 0xB3, +/* 00001510 */ 0x02, 0xFE, 0xB3, 0x02, 0xFE, 0xBA, 0x02, 0xFE, 0xBA, 0x02, 0xFE, 0xDB, 0x02, 0xFE, 0x24, 0x01, +/* 00001520 */ 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0xDB, 0x02, 0xFE, +/* 00001530 */ 0x24, 0x01, 0xFE, 0x79, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, +/* 00001540 */ 0x01, 0xFE, 0xDB, 0x02, 0xFE, 0x24, 0x01, 0xFE, 0x07, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, +/* 00001550 */ 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0xDB, 0x02, 0xFE, 0x24, 0x01, 0xFE, 0x07, 0x01, 0xFE, +/* 00001560 */ 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x7E, 0x02, 0xFE, 0x7F, +/* 00001570 */ 0x02, 0xFE, 0x7F, 0x02, 0xFE, 0x7F, 0x02, 0xFE, 0x7F, 0x02, 0xFE, 0x7E, 0x02, 0xFE, 0x7F, 0x02, +/* 00001580 */ 0xFE, 0x7E, 0x02, 0xFE, 0x7E, 0x02, 0xFE, 0x7F, 0x02, 0xFE, 0x7F, 0x02, 0xFE, 0x7F, 0x02, 0xFE, +/* 00001590 */ 0x7F, 0x02, 0xFE, 0x7F, 0x02, 0xFE, 0x7F, 0x02, 0xFE, 0x7F, 0x02, 0xFE, 0xE2, 0x01, 0x22, 0x00, +/* 000015A0 */ 0x00, 0x00, 0x00, 0x07, 0x00, 0x29, 0x00, 0x07, 0x00, 0x35, 0x00, 0x07, 0x00, 0x55, 0x00, 0x07, +/* 000015B0 */ 0x00, 0x22, 0x00, 0x07, 0x00, 0x45, 0x00, 0x21, 0x00, 0x89, 0x02, 0x17, 0x00, 0x63, 0x00, 0x1D, +/* 000015C0 */ 0x00, 0x4F, 0x00, 0x0C, 0x00, 0x4C, 0x00, 0x0C, 0x00, 0x54, 0x00, 0x0C, 0x00, 0x6C, 0x00, 0x0C, +/* 000015D0 */ 0x00, 0x48, 0x00, 0x0C, 0x00, 0x67, 0x00, 0x64, 0x00, 0xF5, 0x07, 0x64, 0x00, 0xC2, 0x00, 0x64, +/* 000015E0 */ 0x00, 0xAE, 0x00, 0x64, 0x00, 0xB1, 0x00, 0x21, 0x00, 0xBB, 0x00, 0x21, 0x00, 0x4D, 0x01, 0x21, +/* 000015F0 */ 0x00, 0x53, 0x01, 0x21, 0x00, 0x5B, 0x01, 0x21, 0x00, 0x1E, 0x05, 0x21, 0x00, 0xD0, 0x01, 0x21, +/* 00001600 */ 0x00, 0x6A, 0x03, 0x21, 0x00, 0x4F, 0x09, 0x21, 0x00, 0x8E, 0x0E, 0x21, 0x00, 0x08, 0x03, 0x21, +/* 00001610 */ 0x00, 0x99, 0x03, 0x21, 0x00, 0xFC, 0x04, 0x21, 0x00, 0x6C, 0x05, 0x21, 0x00, 0x72, 0x05, 0x21, +/* 00001620 */ 0x00, 0x9C, 0x05, 0x23, 0x00, 0x69, 0x0A, 0x00, 0xAE, 0x30, 0x00, 0x00, 0xDF, 0x2D, 0x00, 0x00, +/* 00001630 */ 0x7D, 0x2D, 0x00, 0x00, 0xAB, 0x2C, 0x00, 0x00, 0xD9, 0x2B, 0x00, 0x00, 0x07, 0x2B, 0x00, 0x00, +/* 00001640 */ 0x3C, 0x29, 0x00, 0x00, 0xD7, 0x27, 0x00, 0x00, 0xE6, 0x25, 0x00, 0x00, 0x34, 0x24, 0x00, 0x00, +/* 00001650 */ 0xD8, 0x21, 0x00, 0x00, 0x73, 0x20, 0x00, 0x00, 0x12, 0x1F, 0x00, 0x00, 0x98, 0x1D, 0x00, 0x00, +/* 00001660 */ 0x0B, 0x1C, 0x00, 0x00, 0x7E, 0x1A, 0x00, 0x00, 0xE2, 0x18, 0x00, 0x00, 0x70, 0x16, 0x00, 0x00, +/* 00001670 */ 0x7F, 0x3C, 0x0B, 0xC2, 0x43, 0x40, 0x13, 0x00, 0xFE, 0xF4, 0x01, 0x28, 0xA2, 0x41, 0xB1, 0x00, +/* 00001680 */ 0x13, 0xFE, 0x2E, 0x55, 0xFE, 0x2E, 0x55, 0x0B, 0xFE, 0x00, 0x90, 0x03, 0x02, 0xFE, 0x2E, 0x55, +/* 00001690 */ 0xFE, 0x42, 0x0A, 0xFE, 0x42, 0x0A, 0x0F, 0x0C, 0x16, 0x08, 0x6E, 0x60, 0x25, 0x01, 0x04, 0x05, +/* 000016A0 */ 0x02, 0x08, 0x08, 0x08, 0x08, 0x01, 0x16, 0xDC, 0xFE, 0x0A, 0x01, 0xFE, 0x2B, 0x01, 0xFE, 0x8D, +/* 000016B0 */ 0x01, 0x07, 0x08, 0x06, 0xFE, 0xFD, 0x02, 0x06, 0xFE, 0xFE, 0x02, 0x05, 0xFE, 0x08, 0x03, 0x01, +/* 000016C0 */ 0x00, 0x06, 0xFE, 0x01, 0x03, 0x01, 0x01, 0x0C, 0x0B, 0xFE, 0x97, 0x01, 0xB2, 0x13, 0x58, 0x10, +/* 000016D0 */ 0x4E, 0x0E, 0x4E, 0x0F, 0x4E, 0x11, 0x4E, 0x12, 0x4E, 0x14, 0x4E, 0x15, 0x15, 0x05, 0x00, 0x0D, +/* 000016E0 */ 0x03, 0xA8, 0x17, 0x45, 0x0D, 0x17, 0x4E, 0x0E, 0x4E, 0x0F, 0x4E, 0x11, 0x4E, 0x12, 0x4E, 0x14, +/* 000016F0 */ 0x4E, 0x15, 0x01, 0x58, 0x01, 0x19, 0x6D, 0x18, 0x19, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x19, +/* 00001700 */ 0x5A, 0x01, 0x10, 0x00, 0x00, 0x5A, 0x02, 0x06, 0x00, 0x00, 0xF4, 0x03, 0x18, 0x18, 0x00, 0x00, +/* 00001710 */ 0x00, 0x00, 0x00, 0x00, 0x45, 0x17, 0x18, 0x45, 0x19, 0x18, 0x0D, 0x05, 0x00, 0x19, 0x03, 0x01, +/* 00001720 */ 0x73, 0x01, 0x10, 0x16, 0x5F, 0x1A, 0x19, 0x01, 0x45, 0x0E, 0x1A, 0x5F, 0x1A, 0x19, 0x02, 0x45, +/* 00001730 */ 0x0F, 0x1A, 0x2A, 0x17, 0x0C, 0x15, 0x03, 0x00, 0x17, 0x08, 0x09, 0x1D, 0x00, 0x01, 0x58, 0x01, +/* 00001740 */ 0x18, 0x6D, 0x17, 0x18, 0x03, 0x07, 0x02, 0x00, 0x59, 0x00, 0x18, 0x5A, 0x01, 0x06, 0x01, 0x00, +/* 00001750 */ 0xF4, 0x02, 0xFF, 0x17, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x14, 0x03, 0x00, 0x0F, 0x07, 0x09, +/* 00001760 */ 0x27, 0x00, 0xA8, 0x17, 0x14, 0x03, 0x00, 0x0D, 0x17, 0x09, 0x1D, 0x00, 0x01, 0x58, 0x01, 0x18, +/* 00001770 */ 0x6D, 0x17, 0x18, 0x04, 0x07, 0x02, 0x00, 0x59, 0x00, 0x18, 0x5A, 0x01, 0x06, 0x02, 0x00, 0xF4, +/* 00001780 */ 0x02, 0xFF, 0x17, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x45, 0x11, 0x07, 0xA8, 0x17, 0x45, 0x12, +/* 00001790 */ 0x17, 0xA7, 0x17, 0x13, 0x05, 0x00, 0x00, 0x11, 0x03, 0x00, 0x17, 0x09, 0x09, 0x06, 0x00, 0x45, +/* 000017A0 */ 0x12, 0x0D, 0x09, 0x52, 0x00, 0x45, 0x14, 0x0A, 0xED, 0x00, 0xEE, 0x00, 0x0F, 0x24, 0x00, 0x14, +/* 000017B0 */ 0x12, 0x03, 0x00, 0x11, 0x0F, 0x09, 0x1C, 0x00, 0xBC, 0x17, 0x11, 0x0E, 0x00, 0x00, 0x0E, 0x0C, +/* 000017C0 */ 0x00, 0x17, 0x45, 0x14, 0x0B, 0x98, 0x17, 0x0E, 0x11, 0x01, 0x00, 0x45, 0x12, 0x17, 0x26, 0x11, +/* 000017D0 */ 0x11, 0x09, 0xD6, 0xFF, 0xEF, 0x00, 0x0F, 0x1D, 0x00, 0x14, 0x01, 0x58, 0x01, 0x18, 0x6D, 0x17, +/* 000017E0 */ 0x18, 0x06, 0x07, 0x02, 0x00, 0x59, 0x00, 0x18, 0x5A, 0x01, 0x06, 0x03, 0x00, 0xF4, 0x02, 0xFF, +/* 000017F0 */ 0x17, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0xED, 0x01, 0xEE, 0x01, 0x12, 0x03, 0x00, 0x11, 0x0F, +/* 00001800 */ 0x09, 0x54, 0x00, 0xBC, 0x17, 0x11, 0x0E, 0x02, 0x00, 0x0E, 0x44, 0x00, 0x17, 0x98, 0x17, 0x0E, +/* 00001810 */ 0x11, 0x03, 0x00, 0x45, 0x15, 0x17, 0x01, 0x58, 0x01, 0x18, 0x6D, 0x17, 0x18, 0x07, 0x07, 0x07, +/* 00001820 */ 0x00, 0x59, 0x00, 0x18, 0x5A, 0x01, 0x0C, 0x04, 0x00, 0xA8, 0x19, 0x5A, 0x02, 0x19, 0x04, 0x00, +/* 00001830 */ 0x5A, 0x03, 0x12, 0x04, 0x00, 0x5A, 0x04, 0x15, 0x04, 0x00, 0x5A, 0x05, 0x11, 0x04, 0x00, 0x5A, +/* 00001840 */ 0x06, 0x0E, 0x04, 0x00, 0xF4, 0x07, 0x17, 0x17, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x45, 0x12, +/* 00001850 */ 0x17, 0x26, 0x11, 0x11, 0x09, 0xA2, 0xFF, 0xEF, 0x01, 0x45, 0x00, 0x12, 0x09, 0x02, 0x00, 0xA8, +/* 00001860 */ 0x00, 0x24, 0x00, 0xFE, 0xE9, 0x02, 0xFE, 0xFD, 0x02, 0xFE, 0xFE, 0x02, 0xFE, 0xBA, 0x02, 0xFE, +/* 00001870 */ 0xB5, 0x02, 0xD1, 0xFE, 0xB5, 0x02, 0xFE, 0x8B, 0x02, 0xFE, 0x44, 0x55, 0x19, 0x10, 0x00, 0x00, +/* 00001880 */ 0x00, 0x16, 0x00, 0xBC, 0x00, 0x40, 0x00, 0xA8, 0x00, 0x0B, 0x00, 0x34, 0x00, 0x1D, 0x00, 0xB5, +/* 00001890 */ 0x00, 0x12, 0x00, 0x3B, 0x00, 0x1D, 0x00, 0xA3, 0x00, 0x03, 0x00, 0x13, 0x00, 0x05, 0x00, 0x7C, +/* 000018A0 */ 0x00, 0x0E, 0x00, 0x78, 0x00, 0x06, 0x00, 0x92, 0x00, 0x07, 0x00, 0x63, 0x00, 0x0C, 0x00, 0xEC, +/* 000018B0 */ 0x00, 0x0A, 0x00, 0x22, 0x00, 0x03, 0x00, 0x25, 0x00, 0x09, 0x00, 0x59, 0x00, 0x08, 0x00, 0x60, +/* 000018C0 */ 0x00, 0x04, 0x00, 0x21, 0x00, 0x21, 0x00, 0x9A, 0x00, 0x08, 0x00, 0x9A, 0x00, 0x0A, 0x00, 0x4C, +/* 000018D0 */ 0x00, 0x09, 0x00, 0x83, 0x00, 0x3B, 0x00, 0xA6, 0x00, 0x08, 0x00, 0x36, 0x00, 0x08, 0x00, 0x18, +/* 000018E0 */ 0x00, 0x00, 0x7F, 0x3C, 0x0A, 0xC2, 0x43, 0x40, 0x13, 0x00, 0xFE, 0xC4, 0x01, 0x2A, 0xA2, 0x41, +/* 000018F0 */ 0xD1, 0x00, 0x12, 0xFE, 0x94, 0x4F, 0xFE, 0x94, 0x4F, 0x09, 0xFE, 0x00, 0x90, 0x03, 0x02, 0xFE, +/* 00001900 */ 0x94, 0x4F, 0xFE, 0x6E, 0x05, 0xFE, 0x6E, 0x05, 0x0D, 0x0A, 0x12, 0x04, 0x49, 0x3B, 0x11, 0x01, +/* 00001910 */ 0x02, 0x01, 0x04, 0x04, 0x04, 0x04, 0x01, 0x12, 0xB3, 0xED, 0x08, 0x06, 0xFE, 0xFD, 0x02, 0x06, +/* 00001920 */ 0xFE, 0xFE, 0x02, 0x05, 0xFE, 0x07, 0x03, 0x01, 0x00, 0x0C, 0x0B, 0x01, 0x01, 0xF7, 0x58, 0x0E, +/* 00001930 */ 0x4E, 0x0C, 0x4E, 0x0D, 0x4E, 0x0F, 0x4E, 0x10, 0x4E, 0x11, 0x15, 0x05, 0x00, 0x0B, 0x02, 0xA8, +/* 00001940 */ 0x13, 0x45, 0x0B, 0x13, 0x4E, 0x0C, 0x4E, 0x0D, 0x4E, 0x0F, 0x4E, 0x10, 0x4E, 0x11, 0x01, 0x58, +/* 00001950 */ 0x01, 0x15, 0x6D, 0x14, 0x15, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x15, 0x5A, 0x01, 0x0E, 0x00, +/* 00001960 */ 0x00, 0x5A, 0x02, 0x05, 0x00, 0x00, 0xF4, 0x03, 0x14, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00001970 */ 0x45, 0x13, 0x14, 0x45, 0x15, 0x14, 0x0D, 0x05, 0x00, 0x15, 0x02, 0x01, 0x73, 0x01, 0x10, 0x16, +/* 00001980 */ 0x5F, 0x16, 0x15, 0x01, 0x45, 0x0C, 0x16, 0x5F, 0x16, 0x15, 0x02, 0x45, 0x0D, 0x16, 0x14, 0x03, +/* 00001990 */ 0x00, 0x0D, 0x06, 0x09, 0x06, 0x00, 0x45, 0x00, 0x07, 0x09, 0x87, 0x00, 0x01, 0x58, 0x01, 0x14, +/* 000019A0 */ 0x6D, 0x13, 0x14, 0x03, 0x07, 0x02, 0x00, 0x59, 0x00, 0x14, 0x5A, 0x01, 0x0B, 0x01, 0x00, 0xF4, +/* 000019B0 */ 0x02, 0x13, 0x13, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, 0x0F, 0x13, 0xA8, 0x13, 0x45, 0x10, +/* 000019C0 */ 0x13, 0x10, 0x03, 0x00, 0x0F, 0x06, 0x09, 0x06, 0x00, 0x45, 0x10, 0x0F, 0x09, 0x12, 0x00, 0x2D, +/* 000019D0 */ 0x13, 0x0D, 0x0F, 0x45, 0x10, 0x13, 0x12, 0x03, 0x00, 0x10, 0x06, 0x09, 0x03, 0x00, 0x45, 0x10, +/* 000019E0 */ 0x06, 0xED, 0x00, 0xEE, 0x00, 0x12, 0x03, 0x00, 0x10, 0x0D, 0x09, 0x2C, 0x00, 0x98, 0x13, 0x0C, +/* 000019F0 */ 0x10, 0x00, 0x00, 0x45, 0x11, 0x13, 0x14, 0x10, 0x00, 0x0A, 0x11, 0x15, 0x03, 0x00, 0x0A, 0x0A, +/* 00001A00 */ 0x09, 0x10, 0x00, 0x15, 0x03, 0x00, 0x11, 0x11, 0x09, 0x08, 0x00, 0x45, 0x00, 0x08, 0xEF, 0x00, +/* 00001A10 */ 0x09, 0x10, 0x00, 0x26, 0x10, 0x10, 0x09, 0xCA, 0xFF, 0xEF, 0x00, 0x45, 0x00, 0x07, 0x09, 0x02, +/* 00001A20 */ 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xE9, 0x02, 0xFE, 0xFD, 0x02, 0xFE, 0xFE, 0x02, 0xFE, 0x81, +/* 00001A30 */ 0x02, 0xFE, 0xAD, 0x4F, 0x12, 0x0C, 0x00, 0x00, 0x00, 0x14, 0x00, 0xBB, 0x00, 0x40, 0x00, 0x83, +/* 00001A40 */ 0x00, 0x08, 0x00, 0x1D, 0x00, 0x06, 0x00, 0x86, 0x00, 0x20, 0x00, 0x36, 0x00, 0x05, 0x00, 0x98, +/* 00001A50 */ 0x00, 0x08, 0x00, 0x1A, 0x00, 0x06, 0x00, 0x2D, 0x00, 0x07, 0x00, 0x1A, 0x00, 0x08, 0x00, 0x1D, +/* 00001A60 */ 0x00, 0x07, 0x00, 0x4F, 0x00, 0x08, 0x00, 0x5C, 0x00, 0x09, 0x00, 0x6F, 0x00, 0x15, 0x00, 0x85, +/* 00001A70 */ 0x00, 0x08, 0x00, 0x46, 0x00, 0x08, 0x00, 0x30, 0x00, 0x08, 0x00, 0x12, 0x00, 0x00, 0x7F, 0x3C, +/* 00001A80 */ 0x0A, 0xC2, 0x43, 0x40, 0x13, 0x00, 0xFE, 0x9F, 0x01, 0x27, 0xA2, 0x41, 0xD1, 0x00, 0x11, 0xFE, +/* 00001A90 */ 0x1F, 0x4A, 0xFE, 0x1F, 0x4A, 0x09, 0xFE, 0x00, 0x90, 0x03, 0x02, 0xFE, 0x1F, 0x4A, 0xFE, 0x47, +/* 00001AA0 */ 0x05, 0xFE, 0x47, 0x05, 0x0C, 0x0B, 0x12, 0x07, 0x43, 0x3A, 0x19, 0x02, 0x03, 0x01, 0x05, 0x05, +/* 00001AB0 */ 0x05, 0x05, 0x01, 0x12, 0x87, 0xEB, 0x08, 0x06, 0xFE, 0xFD, 0x02, 0x06, 0xFE, 0xFE, 0x02, 0x05, +/* 00001AC0 */ 0xFE, 0x06, 0x03, 0x01, 0x00, 0x06, 0xFE, 0x01, 0x03, 0x0C, 0x01, 0x01, 0x0B, 0xF5, 0x58, 0x0F, +/* 00001AD0 */ 0x4E, 0x0D, 0x4E, 0x0E, 0x4E, 0x10, 0x4E, 0x11, 0x15, 0x05, 0x00, 0x0C, 0x02, 0xA8, 0x13, 0x45, +/* 00001AE0 */ 0x0C, 0x13, 0x4E, 0x0D, 0x4E, 0x0E, 0x4E, 0x10, 0x4E, 0x11, 0x01, 0x58, 0x01, 0x15, 0x6D, 0x14, +/* 00001AF0 */ 0x15, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x15, 0x5A, 0x01, 0x0F, 0x00, 0x00, 0x5A, 0x02, 0x05, +/* 00001B00 */ 0x00, 0x00, 0xF4, 0x03, 0x14, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x13, 0x14, 0x45, +/* 00001B10 */ 0x15, 0x14, 0x0D, 0x05, 0x00, 0x15, 0x02, 0x01, 0x73, 0x01, 0x10, 0x16, 0x5F, 0x16, 0x15, 0x01, +/* 00001B20 */ 0x45, 0x0D, 0x16, 0x5F, 0x16, 0x15, 0x02, 0x45, 0x0E, 0x16, 0x2A, 0x13, 0x0B, 0x15, 0x03, 0x00, +/* 00001B30 */ 0x13, 0x07, 0x09, 0x1D, 0x00, 0x01, 0x58, 0x01, 0x14, 0x6D, 0x13, 0x14, 0x03, 0x07, 0x02, 0x00, +/* 00001B40 */ 0x59, 0x00, 0x14, 0x5A, 0x01, 0x05, 0x01, 0x00, 0xF4, 0x02, 0xFF, 0x13, 0x03, 0x00, 0x00, 0x00, +/* 00001B50 */ 0x01, 0x00, 0x45, 0x10, 0x06, 0xED, 0x00, 0xEE, 0x00, 0x12, 0x03, 0x00, 0x10, 0x0E, 0x09, 0x56, +/* 00001B60 */ 0x00, 0xBC, 0x13, 0x10, 0x0D, 0x00, 0x00, 0x0E, 0x46, 0x00, 0x13, 0x98, 0x13, 0x0D, 0x10, 0x01, +/* 00001B70 */ 0x00, 0x45, 0x11, 0x13, 0x01, 0x58, 0x01, 0x14, 0x6D, 0x13, 0x14, 0x04, 0x07, 0x06, 0x00, 0x59, +/* 00001B80 */ 0x00, 0x14, 0x5A, 0x01, 0x0B, 0x02, 0x00, 0x5A, 0x02, 0x0C, 0x02, 0x00, 0x5A, 0x03, 0x11, 0x02, +/* 00001B90 */ 0x00, 0x5A, 0x04, 0x10, 0x02, 0x00, 0x5A, 0x05, 0x0D, 0x02, 0x00, 0xF4, 0x06, 0x13, 0x13, 0x04, +/* 00001BA0 */ 0x00, 0x00, 0x00, 0x02, 0x00, 0x0F, 0x08, 0x00, 0x13, 0x45, 0x00, 0x08, 0xEF, 0x00, 0x09, 0x10, +/* 00001BB0 */ 0x00, 0x26, 0x10, 0x10, 0x09, 0xA0, 0xFF, 0xEF, 0x00, 0x45, 0x00, 0x0A, 0x09, 0x02, 0x00, 0xA8, +/* 00001BC0 */ 0x00, 0x24, 0x00, 0xFE, 0xE9, 0x02, 0xFE, 0xFD, 0x02, 0xFE, 0xFE, 0x02, 0xFE, 0xBA, 0x02, 0xFE, +/* 00001BD0 */ 0x8B, 0x02, 0xFE, 0x35, 0x4A, 0x0D, 0x0A, 0x00, 0x00, 0x00, 0x12, 0x00, 0xBE, 0x00, 0x40, 0x00, +/* 00001BE0 */ 0xA7, 0x00, 0x0B, 0x00, 0x34, 0x00, 0x1D, 0x00, 0xC2, 0x00, 0x07, 0x00, 0x3B, 0x00, 0x08, 0x00, +/* 00001BF0 */ 0x9A, 0x00, 0x0A, 0x00, 0x4C, 0x00, 0x09, 0x00, 0xB0, 0x00, 0x35, 0x00, 0x6B, 0x00, 0x08, 0x00, +/* 00001C00 */ 0x59, 0x00, 0x08, 0x00, 0x2F, 0x00, 0x08, 0x00, 0x11, 0x00, 0x00, 0x7F, 0x3C, 0x0A, 0xC2, 0x43, +/* 00001C10 */ 0x40, 0x13, 0x00, 0xFE, 0x7A, 0x01, 0x26, 0xA2, 0x41, 0xD1, 0x00, 0x10, 0xFE, 0xB2, 0x44, 0xFE, +/* 00001C20 */ 0xB2, 0x44, 0x09, 0xFE, 0x00, 0x90, 0x03, 0x02, 0xFE, 0xB2, 0x44, 0xFE, 0x42, 0x05, 0xFE, 0x42, +/* 00001C30 */ 0x05, 0x0C, 0x0B, 0x12, 0x07, 0x43, 0x3A, 0x19, 0x02, 0x03, 0x01, 0x05, 0x05, 0x05, 0x05, 0x01, +/* 00001C40 */ 0x12, 0x87, 0xEB, 0x08, 0x06, 0xFE, 0xFD, 0x02, 0x06, 0xFE, 0xFE, 0x02, 0x05, 0xFE, 0x05, 0x03, +/* 00001C50 */ 0x01, 0x00, 0x06, 0xFE, 0x01, 0x03, 0x0B, 0x01, 0x01, 0x0C, 0xF5, 0x58, 0x0F, 0x4E, 0x0D, 0x4E, +/* 00001C60 */ 0x0E, 0x4E, 0x10, 0x4E, 0x11, 0x15, 0x05, 0x00, 0x0C, 0x02, 0xA8, 0x13, 0x45, 0x0C, 0x13, 0x4E, +/* 00001C70 */ 0x0D, 0x4E, 0x0E, 0x4E, 0x10, 0x4E, 0x11, 0x01, 0x58, 0x01, 0x15, 0x6D, 0x14, 0x15, 0x00, 0x07, +/* 00001C80 */ 0x03, 0x00, 0x59, 0x00, 0x15, 0x5A, 0x01, 0x0F, 0x00, 0x00, 0x5A, 0x02, 0x05, 0x00, 0x00, 0xF4, +/* 00001C90 */ 0x03, 0x14, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x13, 0x14, 0x45, 0x15, 0x14, 0x0D, +/* 00001CA0 */ 0x05, 0x00, 0x15, 0x02, 0x01, 0x73, 0x01, 0x10, 0x16, 0x5F, 0x16, 0x15, 0x01, 0x45, 0x0D, 0x16, +/* 00001CB0 */ 0x5F, 0x16, 0x15, 0x02, 0x45, 0x0E, 0x16, 0x2A, 0x13, 0x0B, 0x15, 0x03, 0x00, 0x13, 0x07, 0x09, +/* 00001CC0 */ 0x1D, 0x00, 0x01, 0x58, 0x01, 0x14, 0x6D, 0x13, 0x14, 0x03, 0x07, 0x02, 0x00, 0x59, 0x00, 0x14, +/* 00001CD0 */ 0x5A, 0x01, 0x05, 0x01, 0x00, 0xF4, 0x02, 0xFF, 0x13, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, +/* 00001CE0 */ 0x10, 0x06, 0xED, 0x00, 0xEE, 0x00, 0x12, 0x03, 0x00, 0x10, 0x0E, 0x09, 0x56, 0x00, 0xBC, 0x13, +/* 00001CF0 */ 0x10, 0x0D, 0x00, 0x00, 0x0E, 0x46, 0x00, 0x13, 0x98, 0x13, 0x0D, 0x10, 0x01, 0x00, 0x45, 0x11, +/* 00001D00 */ 0x13, 0x01, 0x58, 0x01, 0x14, 0x6D, 0x13, 0x14, 0x04, 0x07, 0x06, 0x00, 0x59, 0x00, 0x14, 0x5A, +/* 00001D10 */ 0x01, 0x0B, 0x02, 0x00, 0x5A, 0x02, 0x0C, 0x02, 0x00, 0x5A, 0x03, 0x11, 0x02, 0x00, 0x5A, 0x04, +/* 00001D20 */ 0x10, 0x02, 0x00, 0x5A, 0x05, 0x0D, 0x02, 0x00, 0xF4, 0x06, 0x13, 0x13, 0x04, 0x00, 0x00, 0x00, +/* 00001D30 */ 0x02, 0x00, 0x0E, 0x08, 0x00, 0x13, 0x45, 0x00, 0x08, 0xEF, 0x00, 0x09, 0x10, 0x00, 0x26, 0x10, +/* 00001D40 */ 0x10, 0x09, 0xA0, 0xFF, 0xEF, 0x00, 0x45, 0x00, 0x0A, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, +/* 00001D50 */ 0xFE, 0xE9, 0x02, 0xFE, 0xFD, 0x02, 0xFE, 0xFE, 0x02, 0xFE, 0xBA, 0x02, 0xFE, 0x8B, 0x02, 0xFE, +/* 00001D60 */ 0xC8, 0x44, 0x0D, 0x0A, 0x00, 0x00, 0x00, 0x12, 0x00, 0xBD, 0x00, 0x40, 0x00, 0xA6, 0x00, 0x0B, +/* 00001D70 */ 0x00, 0x34, 0x00, 0x1D, 0x00, 0xC1, 0x00, 0x07, 0x00, 0x3B, 0x00, 0x08, 0x00, 0x9A, 0x00, 0x0A, +/* 00001D80 */ 0x00, 0x4C, 0x00, 0x09, 0x00, 0xAE, 0x00, 0x35, 0x00, 0x6A, 0x00, 0x08, 0x00, 0x58, 0x00, 0x08, +/* 00001D90 */ 0x00, 0x30, 0x00, 0x08, 0x00, 0x12, 0x00, 0x00, 0x7F, 0x3C, 0x0A, 0xC2, 0x43, 0x40, 0x13, 0x00, +/* 00001DA0 */ 0xFE, 0x58, 0x01, 0x29, 0xA2, 0x41, 0xD1, 0x00, 0x0F, 0xFE, 0xB9, 0x3F, 0xFE, 0xB9, 0x3F, 0x09, +/* 00001DB0 */ 0xFE, 0x00, 0x90, 0x03, 0x02, 0xFE, 0xB9, 0x3F, 0xFE, 0xCF, 0x04, 0xFE, 0xCF, 0x04, 0x0C, 0x09, +/* 00001DC0 */ 0x10, 0x07, 0x3F, 0x38, 0x15, 0x02, 0x03, 0x01, 0x05, 0x05, 0x05, 0x05, 0x01, 0x10, 0x87, 0xDF, +/* 00001DD0 */ 0x08, 0x06, 0xFE, 0xFD, 0x02, 0x06, 0xFE, 0xFE, 0x02, 0x05, 0xFE, 0x04, 0x03, 0x01, 0x00, 0x06, +/* 00001DE0 */ 0xFE, 0x01, 0x03, 0x01, 0x01, 0xE8, 0x58, 0x0D, 0x4E, 0x0B, 0x4E, 0x0C, 0x4E, 0x0E, 0x4E, 0x0F, +/* 00001DF0 */ 0x15, 0x05, 0x00, 0x0A, 0x02, 0xA8, 0x11, 0x45, 0x0A, 0x11, 0x4E, 0x0B, 0x4E, 0x0C, 0x4E, 0x0E, +/* 00001E00 */ 0x4E, 0x0F, 0x01, 0x58, 0x01, 0x13, 0x6D, 0x12, 0x13, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x13, +/* 00001E10 */ 0x5A, 0x01, 0x0D, 0x00, 0x00, 0x5A, 0x02, 0x05, 0x00, 0x00, 0xF4, 0x03, 0x12, 0x12, 0x00, 0x00, +/* 00001E20 */ 0x00, 0x00, 0x00, 0x00, 0x45, 0x11, 0x12, 0x45, 0x13, 0x12, 0x0D, 0x05, 0x00, 0x13, 0x02, 0x01, +/* 00001E30 */ 0x73, 0x01, 0x10, 0x16, 0x5F, 0x14, 0x13, 0x01, 0x45, 0x0B, 0x14, 0x5F, 0x14, 0x13, 0x02, 0x45, +/* 00001E40 */ 0x0C, 0x14, 0x2A, 0x11, 0x09, 0x15, 0x03, 0x00, 0x11, 0x07, 0x09, 0x1D, 0x00, 0x01, 0x58, 0x01, +/* 00001E50 */ 0x12, 0x6D, 0x11, 0x12, 0x03, 0x07, 0x02, 0x00, 0x59, 0x00, 0x12, 0x5A, 0x01, 0x05, 0x01, 0x00, +/* 00001E60 */ 0xF4, 0x02, 0xFF, 0x11, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, 0x0E, 0x06, 0xED, 0x00, 0xEE, +/* 00001E70 */ 0x00, 0x12, 0x03, 0x00, 0x0E, 0x0C, 0x09, 0x4A, 0x00, 0xBC, 0x11, 0x0E, 0x0B, 0x00, 0x00, 0x0E, +/* 00001E80 */ 0x3A, 0x00, 0x11, 0x98, 0x11, 0x0B, 0x0E, 0x01, 0x00, 0x45, 0x0F, 0x11, 0x01, 0x58, 0x01, 0x12, +/* 00001E90 */ 0x6D, 0x11, 0x12, 0x04, 0x07, 0x06, 0x00, 0x59, 0x00, 0x12, 0x5A, 0x01, 0x09, 0x02, 0x00, 0x5A, +/* 00001EA0 */ 0x02, 0x0A, 0x02, 0x00, 0x5A, 0x03, 0x0F, 0x02, 0x00, 0x5A, 0x04, 0x0E, 0x02, 0x00, 0x5A, 0x05, +/* 00001EB0 */ 0x0B, 0x02, 0x00, 0xF4, 0x06, 0xFF, 0x11, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x26, 0x0E, 0x0E, +/* 00001EC0 */ 0x09, 0xAC, 0xFF, 0xEF, 0x00, 0xA8, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xE9, +/* 00001ED0 */ 0x02, 0xFE, 0xFD, 0x02, 0xFE, 0xFE, 0x02, 0xFE, 0xBA, 0x02, 0xFE, 0x8B, 0x02, 0xFE, 0xCF, 0x3F, +/* 00001EE0 */ 0x0C, 0x0A, 0x00, 0x00, 0x00, 0x12, 0x00, 0xB8, 0x00, 0x40, 0x00, 0xB1, 0x00, 0x0B, 0x00, 0x34, +/* 00001EF0 */ 0x00, 0x1D, 0x00, 0xC4, 0x00, 0x07, 0x00, 0x3B, 0x00, 0x08, 0x00, 0x9A, 0x00, 0x0A, 0x00, 0x4C, +/* 00001F00 */ 0x00, 0x09, 0x00, 0x63, 0x00, 0x31, 0x00, 0x89, 0x00, 0x08, 0x00, 0x34, 0x00, 0x07, 0x00, 0x16, +/* 00001F10 */ 0x00, 0x00, 0x7F, 0x1C, 0x08, 0xC0, 0x03, 0x00, 0x03, 0x00, 0xFE, 0x46, 0x01, 0x29, 0xA2, 0x41, +/* 00001F20 */ 0xD1, 0x00, 0x0E, 0xFE, 0x20, 0x3C, 0xFE, 0x20, 0x3C, 0x09, 0xFE, 0x00, 0x90, 0x03, 0x02, 0xFE, +/* 00001F30 */ 0x20, 0x3C, 0xFE, 0x6C, 0x03, 0xFE, 0x6C, 0x03, 0x0A, 0x08, 0x0E, 0x08, 0x3A, 0x33, 0x04, 0x06, +/* 00001F40 */ 0x06, 0x06, 0x06, 0x08, 0x06, 0xFE, 0xFD, 0x02, 0x06, 0xFE, 0xFE, 0x02, 0x05, 0xFE, 0x03, 0x03, +/* 00001F50 */ 0x01, 0x00, 0x06, 0xFE, 0x01, 0x03, 0xE5, 0x58, 0x0C, 0x4E, 0x0A, 0x4E, 0x0B, 0x4E, 0x0D, 0x15, +/* 00001F60 */ 0x05, 0x00, 0x09, 0x02, 0xA8, 0x0E, 0x45, 0x09, 0x0E, 0x4E, 0x0A, 0x4E, 0x0B, 0x4E, 0x0D, 0x01, +/* 00001F70 */ 0x58, 0x01, 0x10, 0x6D, 0x0F, 0x10, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x10, 0x5A, 0x01, 0x0C, +/* 00001F80 */ 0x00, 0x00, 0x5A, 0x02, 0x05, 0x00, 0x00, 0xF4, 0x03, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00001F90 */ 0x00, 0x45, 0x0E, 0x0F, 0x45, 0x10, 0x0F, 0x0D, 0x05, 0x00, 0x10, 0x02, 0x01, 0x73, 0x01, 0x10, +/* 00001FA0 */ 0x16, 0x5F, 0x11, 0x10, 0x01, 0x45, 0x0A, 0x11, 0x5F, 0x11, 0x10, 0x02, 0x45, 0x0B, 0x11, 0x2A, +/* 00001FB0 */ 0x0E, 0x08, 0x15, 0x03, 0x00, 0x0E, 0x07, 0x09, 0x1D, 0x00, 0x01, 0x58, 0x01, 0x0F, 0x6D, 0x0E, +/* 00001FC0 */ 0x0F, 0x03, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0F, 0x5A, 0x01, 0x05, 0x01, 0x00, 0xF4, 0x02, 0xFF, +/* 00001FD0 */ 0x0E, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x58, 0x01, 0x0F, 0x6D, 0x0E, 0x0F, 0x04, 0x07, +/* 00001FE0 */ 0x03, 0x00, 0x59, 0x00, 0x0F, 0x5A, 0x01, 0x0A, 0x02, 0x00, 0x5A, 0x02, 0x06, 0x02, 0x00, 0xF4, +/* 00001FF0 */ 0x03, 0x0E, 0x0E, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x45, 0x0D, 0x0E, 0x01, 0x58, 0x01, 0x0F, +/* 00002000 */ 0x6D, 0x0E, 0x0F, 0x05, 0x07, 0x07, 0x00, 0x59, 0x00, 0x0F, 0x5A, 0x01, 0x0D, 0x03, 0x00, 0x5A, +/* 00002010 */ 0x02, 0x0A, 0x03, 0x00, 0x5A, 0x03, 0x0B, 0x03, 0x00, 0x5A, 0x04, 0x06, 0x03, 0x00, 0x5A, 0x05, +/* 00002020 */ 0x08, 0x03, 0x00, 0x5A, 0x06, 0x09, 0x03, 0x00, 0xF4, 0x07, 0xFF, 0x0E, 0x05, 0x00, 0x00, 0x00, +/* 00002030 */ 0x03, 0x00, 0x45, 0x00, 0x0D, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xE9, 0x02, 0xFE, +/* 00002040 */ 0xFD, 0x02, 0xFE, 0xFE, 0x02, 0xFE, 0xBA, 0x02, 0xFE, 0x82, 0x02, 0xFE, 0xEC, 0x02, 0xFE, 0x3A, +/* 00002050 */ 0x3C, 0x08, 0x08, 0x00, 0x00, 0x00, 0x10, 0x00, 0x8B, 0x00, 0x40, 0x00, 0xAE, 0x00, 0x0B, 0x00, +/* 00002060 */ 0x38, 0x00, 0x1D, 0x00, 0xE1, 0x00, 0x25, 0x00, 0x83, 0x00, 0x36, 0x00, 0x6E, 0x00, 0x08, 0x00, +/* 00002070 */ 0x0E, 0x00, 0x00, 0x7F, 0x1C, 0x08, 0xC0, 0x03, 0x00, 0x03, 0x00, 0xFE, 0x35, 0x01, 0x26, 0xA2, +/* 00002080 */ 0x41, 0xD1, 0x00, 0x0D, 0xFE, 0x15, 0x39, 0xFE, 0x15, 0x39, 0x09, 0xFE, 0x00, 0x90, 0x02, 0x01, +/* 00002090 */ 0xFE, 0x15, 0x39, 0xFE, 0xDE, 0x02, 0xFE, 0xDE, 0x02, 0x0A, 0x08, 0x0E, 0x07, 0x3F, 0x36, 0x04, +/* 000020A0 */ 0x06, 0x06, 0x06, 0x06, 0x08, 0x06, 0xFE, 0xFD, 0x02, 0x06, 0xFE, 0xFE, 0x02, 0x05, 0xFE, 0x02, +/* 000020B0 */ 0x03, 0x01, 0x00, 0x01, 0x01, 0xEF, 0x58, 0x0B, 0x4E, 0x09, 0x4E, 0x0A, 0x4E, 0x0C, 0x4E, 0x0D, +/* 000020C0 */ 0x15, 0x05, 0x00, 0x08, 0x02, 0xA8, 0x0E, 0x45, 0x08, 0x0E, 0x4E, 0x09, 0x4E, 0x0A, 0x4E, 0x0C, +/* 000020D0 */ 0x4E, 0x0D, 0x01, 0x58, 0x01, 0x10, 0x6D, 0x0F, 0x10, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x10, +/* 000020E0 */ 0x5A, 0x01, 0x0B, 0x00, 0x00, 0x5A, 0x02, 0x05, 0x00, 0x00, 0xF4, 0x03, 0x0F, 0x0F, 0x00, 0x00, +/* 000020F0 */ 0x00, 0x00, 0x00, 0x00, 0x45, 0x0E, 0x0F, 0x45, 0x10, 0x0F, 0x0D, 0x05, 0x00, 0x10, 0x02, 0x01, +/* 00002100 */ 0x73, 0x01, 0x10, 0x16, 0x5F, 0x11, 0x10, 0x01, 0x45, 0x09, 0x11, 0x5F, 0x11, 0x10, 0x02, 0x45, +/* 00002110 */ 0x0A, 0x11, 0xA8, 0x0E, 0x15, 0x03, 0x00, 0x08, 0x0E, 0x09, 0x23, 0x00, 0x01, 0x58, 0x01, 0x10, +/* 00002120 */ 0x6D, 0x0F, 0x10, 0x03, 0x07, 0x02, 0x00, 0x59, 0x00, 0x10, 0x5A, 0x01, 0x08, 0x01, 0x00, 0xF4, +/* 00002130 */ 0x02, 0x0F, 0x0F, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, 0x0E, 0x0F, 0x09, 0x03, 0x00, 0x46, +/* 00002140 */ 0x0E, 0x07, 0x45, 0x0C, 0x0E, 0x01, 0x58, 0x01, 0x0F, 0x6D, 0x0E, 0x0F, 0x04, 0x07, 0x03, 0x00, +/* 00002150 */ 0x59, 0x00, 0x0F, 0x5A, 0x01, 0x09, 0x02, 0x00, 0x5A, 0x02, 0x06, 0x02, 0x00, 0xF4, 0x03, 0x0E, +/* 00002160 */ 0x0E, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x45, 0x0D, 0x0E, 0x01, 0x58, 0x01, 0x0F, 0x6D, 0x0E, +/* 00002170 */ 0x0F, 0x05, 0x07, 0x06, 0x00, 0x59, 0x00, 0x0F, 0x5A, 0x01, 0x0D, 0x03, 0x00, 0x5A, 0x02, 0x09, +/* 00002180 */ 0x03, 0x00, 0x5A, 0x03, 0x0A, 0x03, 0x00, 0x5A, 0x04, 0x06, 0x03, 0x00, 0x5A, 0x05, 0x0C, 0x03, +/* 00002190 */ 0x00, 0xF4, 0x06, 0xFF, 0x0E, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x45, 0x00, 0x0D, 0x09, 0x02, +/* 000021A0 */ 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xE9, 0x02, 0xFE, 0xFD, 0x02, 0xFE, 0xFE, 0x02, 0xFE, 0x81, +/* 000021B0 */ 0x02, 0xFE, 0x82, 0x02, 0xFE, 0xEB, 0x02, 0xFE, 0x1F, 0x39, 0x07, 0x0A, 0x00, 0x00, 0x00, 0x12, +/* 000021C0 */ 0x00, 0x89, 0x00, 0x40, 0x00, 0xD9, 0x00, 0x33, 0x00, 0x87, 0x00, 0x25, 0x00, 0x83, 0x00, 0x31, +/* 000021D0 */ 0x00, 0x59, 0x00, 0x08, 0x00, 0x0E, 0x00, 0x00, 0x7F, 0x3C, 0x0B, 0xC2, 0x03, 0x00, 0x13, 0x00, +/* 000021E0 */ 0xF4, 0x45, 0xA2, 0x41, 0xD1, 0x00, 0x0C, 0xFE, 0xA6, 0x2A, 0xFE, 0xA6, 0x2A, 0x01, 0xFE, 0x00, +/* 000021F0 */ 0x90, 0x07, 0x07, 0xFE, 0xA6, 0x2A, 0xFE, 0x45, 0x0E, 0xFE, 0x45, 0x0E, 0x0E, 0x06, 0x11, 0x07, +/* 00002200 */ 0x64, 0x5B, 0x52, 0x01, 0x04, 0x07, 0x02, 0x08, 0x08, 0x08, 0x08, 0x1F, 0xFE, 0x86, 0x01, 0xB9, +/* 00002210 */ 0xFE, 0x2C, 0x01, 0x01, 0x00, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x43, 0x05, 0xFE, +/* 00002220 */ 0x03, 0x03, 0x01, 0x01, 0xFE, 0x90, 0x01, 0x4E, 0x0C, 0x4E, 0x0D, 0x4E, 0x0E, 0x4E, 0x0F, 0x4E, +/* 00002230 */ 0x10, 0x45, 0x0C, 0x09, 0x45, 0x0D, 0x02, 0xA8, 0x11, 0x45, 0x0E, 0x11, 0xA8, 0x11, 0x45, 0x0F, +/* 00002240 */ 0x11, 0xA8, 0x11, 0x45, 0x10, 0x11, 0xED, 0x00, 0xEE, 0x00, 0x12, 0x03, 0x00, 0x0D, 0x08, 0x09, +/* 00002250 */ 0x59, 0x01, 0xBC, 0x11, 0x0D, 0x07, 0x00, 0x00, 0x0E, 0x49, 0x01, 0x11, 0x01, 0x58, 0x01, 0x12, +/* 00002260 */ 0x6D, 0x11, 0x12, 0x00, 0x07, 0x06, 0x00, 0x59, 0x00, 0x12, 0x5A, 0x01, 0x0A, 0x00, 0x00, 0x5A, +/* 00002270 */ 0x02, 0x0B, 0x00, 0x00, 0x98, 0x13, 0x07, 0x0D, 0x01, 0x00, 0x5A, 0x03, 0x13, 0x00, 0x00, 0x5A, +/* 00002280 */ 0x04, 0x0D, 0x00, 0x00, 0x5A, 0x05, 0x07, 0x00, 0x00, 0xF4, 0x06, 0x11, 0x11, 0x00, 0x00, 0x00, +/* 00002290 */ 0x00, 0x00, 0x00, 0x45, 0x0E, 0x11, 0x01, 0x58, 0x01, 0x12, 0x6D, 0x11, 0x12, 0x01, 0x07, 0x02, +/* 000022A0 */ 0x00, 0x59, 0x00, 0x12, 0x5A, 0x01, 0x0E, 0x01, 0x00, 0xF4, 0x02, 0x11, 0x11, 0x01, 0x00, 0x00, +/* 000022B0 */ 0x00, 0x01, 0x00, 0x0E, 0x9F, 0x00, 0x11, 0x01, 0x58, 0x01, 0x12, 0x6D, 0x11, 0x12, 0x02, 0x07, +/* 000022C0 */ 0x02, 0x00, 0x59, 0x00, 0x12, 0xA7, 0x13, 0x0E, 0x03, 0x00, 0x00, 0x5A, 0x01, 0x13, 0x02, 0x00, +/* 000022D0 */ 0xF4, 0x02, 0x11, 0x11, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x45, 0x0F, 0x11, 0x45, 0x10, 0x02, +/* 000022E0 */ 0xED, 0x01, 0xEE, 0x01, 0x12, 0x03, 0x00, 0x10, 0x0F, 0x09, 0x65, 0x00, 0xBC, 0x11, 0x10, 0x0E, +/* 000022F0 */ 0x02, 0x00, 0x0E, 0x55, 0x00, 0x11, 0x10, 0x03, 0x00, 0x0C, 0x03, 0x09, 0x1D, 0x00, 0x01, 0x58, +/* 00002300 */ 0x01, 0x12, 0x6D, 0x11, 0x12, 0x04, 0x07, 0x02, 0x00, 0x59, 0x00, 0x12, 0x5A, 0x01, 0x04, 0x03, +/* 00002310 */ 0x00, 0xF4, 0x02, 0xFF, 0x11, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x01, 0x58, 0x01, 0x12, 0x6D, +/* 00002320 */ 0x11, 0x12, 0x05, 0x07, 0x04, 0x00, 0x59, 0x00, 0x12, 0x5A, 0x01, 0x06, 0x04, 0x00, 0x5A, 0x02, +/* 00002330 */ 0x0C, 0x04, 0x00, 0x98, 0x13, 0x0E, 0x10, 0x03, 0x00, 0x5A, 0x03, 0x13, 0x04, 0x00, 0xF4, 0x04, +/* 00002340 */ 0xFF, 0x11, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x26, 0x0C, 0x0C, 0x26, 0x10, 0x10, 0x09, 0x91, +/* 00002350 */ 0xFF, 0xEF, 0x01, 0x09, 0x4F, 0x00, 0x10, 0x03, 0x00, 0x0C, 0x03, 0x09, 0x1D, 0x00, 0x01, 0x58, +/* 00002360 */ 0x01, 0x12, 0x6D, 0x11, 0x12, 0x06, 0x07, 0x02, 0x00, 0x59, 0x00, 0x12, 0x5A, 0x01, 0x04, 0x05, +/* 00002370 */ 0x00, 0xF4, 0x02, 0xFF, 0x11, 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, 0x01, 0x58, 0x01, 0x12, 0x6D, +/* 00002380 */ 0x11, 0x12, 0x07, 0x07, 0x04, 0x00, 0x59, 0x00, 0x12, 0x5A, 0x01, 0x06, 0x06, 0x00, 0x5A, 0x02, +/* 00002390 */ 0x0C, 0x06, 0x00, 0x5A, 0x03, 0x0E, 0x06, 0x00, 0xF4, 0x04, 0xFF, 0x11, 0x07, 0x00, 0x00, 0x00, +/* 000023A0 */ 0x06, 0x00, 0x26, 0x0C, 0x0C, 0x26, 0x0D, 0x0D, 0x09, 0x9D, 0xFE, 0xEF, 0x00, 0x45, 0x00, 0x0C, +/* 000023B0 */ 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x8B, 0x02, 0xBE, 0xFE, 0x80, 0x02, 0xD1, 0xFE, +/* 000023C0 */ 0xB3, 0x02, 0xFE, 0x83, 0x02, 0xFE, 0xB3, 0x02, 0xFE, 0x83, 0x02, 0xFE, 0x92, 0x2C, 0x19, 0x0A, +/* 000023D0 */ 0x00, 0x00, 0x00, 0x03, 0x00, 0x44, 0x00, 0x03, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0D, 0x00, 0x05, +/* 000023E0 */ 0x00, 0x0D, 0x00, 0x09, 0x00, 0x1B, 0x00, 0x08, 0x00, 0x95, 0x00, 0x0A, 0x00, 0x6F, 0x01, 0x3A, +/* 000023F0 */ 0x00, 0x2E, 0x02, 0x21, 0x00, 0xA5, 0x00, 0x26, 0x00, 0x4C, 0x00, 0x07, 0x00, 0x2B, 0x00, 0x08, +/* 00002400 */ 0x00, 0x34, 0x00, 0x0A, 0x00, 0x93, 0x00, 0x08, 0x00, 0x54, 0x00, 0x1D, 0x00, 0xEC, 0x00, 0x2D, +/* 00002410 */ 0x00, 0xB4, 0x00, 0x03, 0x00, 0x41, 0x00, 0x0B, 0x00, 0xC9, 0x00, 0x08, 0x00, 0x4C, 0x00, 0x1D, +/* 00002420 */ 0x00, 0xD4, 0x00, 0x27, 0x00, 0x98, 0x00, 0x03, 0x00, 0x69, 0x00, 0x08, 0x00, 0x42, 0x00, 0x08, +/* 00002430 */ 0x00, 0x18, 0x00, 0x00, 0x7F, 0x3C, 0x0B, 0xC2, 0x03, 0x00, 0x13, 0x00, 0xC6, 0x3F, 0xA2, 0x41, +/* 00002440 */ 0xD1, 0x00, 0x0B, 0xFE, 0x51, 0x21, 0xFE, 0x51, 0x21, 0x01, 0xFE, 0x00, 0x90, 0x06, 0x06, 0xFE, +/* 00002450 */ 0x51, 0x21, 0xFE, 0x0C, 0x09, 0xFE, 0x0C, 0x09, 0x0D, 0x06, 0x0E, 0x0A, 0x45, 0x3F, 0x39, 0x01, +/* 00002460 */ 0x02, 0x05, 0x01, 0x06, 0x06, 0x06, 0x06, 0x11, 0xFE, 0x0E, 0x01, 0x01, 0x00, 0x01, 0x01, 0x04, +/* 00002470 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x43, 0x05, 0xFE, 0x02, 0x03, 0xFE, 0x18, 0x01, 0x4E, +/* 00002480 */ 0x0B, 0x4E, 0x0C, 0x4E, 0x0D, 0x45, 0x0B, 0x09, 0x45, 0x0C, 0x02, 0xA8, 0x0E, 0x45, 0x0D, 0x0E, +/* 00002490 */ 0xED, 0x00, 0xEE, 0x00, 0x12, 0x03, 0x00, 0x0C, 0x08, 0x09, 0xEF, 0x00, 0xBC, 0x0E, 0x0C, 0x07, +/* 000024A0 */ 0x00, 0x00, 0x0E, 0xDF, 0x00, 0x0E, 0x98, 0x0E, 0x07, 0x0C, 0x01, 0x00, 0x45, 0x0D, 0x0E, 0x11, +/* 000024B0 */ 0x03, 0x00, 0x0A, 0x02, 0x09, 0x7F, 0x00, 0x01, 0x58, 0x01, 0x0F, 0x6D, 0x0E, 0x0F, 0x00, 0x07, +/* 000024C0 */ 0x02, 0x00, 0x59, 0x00, 0x0F, 0x5A, 0x01, 0x0D, 0x00, 0x00, 0xF4, 0x02, 0x0E, 0x0E, 0x00, 0x00, +/* 000024D0 */ 0x00, 0x00, 0x00, 0x00, 0x0E, 0x5E, 0x00, 0x0E, 0x01, 0x58, 0x01, 0x0F, 0x6D, 0x0E, 0x0F, 0x01, +/* 000024E0 */ 0x07, 0x06, 0x00, 0x59, 0x00, 0x0F, 0x5A, 0x01, 0x06, 0x01, 0x00, 0x5A, 0x02, 0x0D, 0x01, 0x00, +/* 000024F0 */ 0x01, 0x58, 0x01, 0x11, 0x6D, 0x10, 0x11, 0x02, 0x07, 0x02, 0x00, 0x59, 0x00, 0x11, 0xA7, 0x12, +/* 00002500 */ 0x0D, 0x03, 0x00, 0x00, 0x5A, 0x01, 0x12, 0x02, 0x00, 0xF4, 0x02, 0x10, 0x10, 0x02, 0x00, 0x00, +/* 00002510 */ 0x00, 0x02, 0x00, 0x5A, 0x03, 0x10, 0x01, 0x00, 0x5A, 0x04, 0x0B, 0x01, 0x00, 0x33, 0x10, 0x0A, +/* 00002520 */ 0x03, 0x5A, 0x05, 0x10, 0x01, 0x00, 0xF4, 0x06, 0x0E, 0x0E, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, +/* 00002530 */ 0x45, 0x0B, 0x0E, 0x09, 0x4F, 0x00, 0x10, 0x03, 0x00, 0x0B, 0x04, 0x09, 0x1D, 0x00, 0x01, 0x58, +/* 00002540 */ 0x01, 0x0F, 0x6D, 0x0E, 0x0F, 0x04, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0F, 0x5A, 0x01, 0x05, 0x03, +/* 00002550 */ 0x00, 0xF4, 0x02, 0xFF, 0x0E, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x01, 0x58, 0x01, 0x0F, 0x6D, +/* 00002560 */ 0x0E, 0x0F, 0x05, 0x07, 0x04, 0x00, 0x59, 0x00, 0x0F, 0x5A, 0x01, 0x06, 0x04, 0x00, 0x5A, 0x02, +/* 00002570 */ 0x0B, 0x04, 0x00, 0x5A, 0x03, 0x0D, 0x04, 0x00, 0xF4, 0x04, 0xFF, 0x0E, 0x05, 0x00, 0x00, 0x00, +/* 00002580 */ 0x04, 0x00, 0x26, 0x0B, 0x0B, 0x26, 0x0C, 0x0C, 0x09, 0x07, 0xFF, 0xEF, 0x00, 0x45, 0x00, 0x0B, +/* 00002590 */ 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xBE, 0xFE, 0xEB, 0x02, 0xFE, 0x80, 0x02, 0xD1, 0xFE, +/* 000025A0 */ 0xB3, 0x02, 0xFE, 0x83, 0x02, 0xFE, 0x77, 0x22, 0x0F, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x44, +/* 000025B0 */ 0x00, 0x03, 0x00, 0x50, 0x00, 0x09, 0x00, 0x1C, 0x00, 0x08, 0x00, 0x95, 0x00, 0x0A, 0x00, 0x93, +/* 000025C0 */ 0x00, 0x09, 0x00, 0x28, 0x01, 0x29, 0x00, 0x4C, 0x01, 0x5E, 0x00, 0x23, 0x01, 0x08, 0x00, 0x4C, +/* 000025D0 */ 0x00, 0x1D, 0x00, 0xD0, 0x00, 0x27, 0x00, 0x97, 0x00, 0x03, 0x00, 0x69, 0x00, 0x08, 0x00, 0x42, +/* 000025E0 */ 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, 0x7F, 0x3C, 0x0A, 0xC2, 0x43, 0x40, 0x13, 0x00, 0xAB, 0x28, +/* 000025F0 */ 0xA2, 0x41, 0xD1, 0x00, 0x0A, 0xFE, 0xD0, 0x1D, 0xFE, 0xD0, 0x1D, 0x09, 0xFE, 0x00, 0x90, 0x03, +/* 00002600 */ 0x02, 0xFE, 0xD0, 0x1D, 0xFE, 0x3E, 0x03, 0xFE, 0x3E, 0x03, 0x0E, 0x09, 0x12, 0x07, 0x56, 0x4C, +/* 00002610 */ 0x1F, 0x02, 0x05, 0x01, 0x07, 0x07, 0x07, 0x07, 0x01, 0x12, 0xB7, 0xFE, 0x3D, 0x01, 0x08, 0x06, +/* 00002620 */ 0xFE, 0xFD, 0x02, 0x06, 0xFE, 0xFE, 0x02, 0x05, 0xFE, 0x00, 0x03, 0x01, 0x00, 0x06, 0xFE, 0x01, +/* 00002630 */ 0x03, 0x01, 0x01, 0xFE, 0x47, 0x01, 0x58, 0x0D, 0x4E, 0x0B, 0x4E, 0x0C, 0x4E, 0x0E, 0x4E, 0x0F, +/* 00002640 */ 0x4E, 0x10, 0x4E, 0x11, 0x15, 0x05, 0x00, 0x0A, 0x02, 0xA8, 0x13, 0x45, 0x0A, 0x13, 0x4E, 0x0B, +/* 00002650 */ 0x4E, 0x0C, 0x4E, 0x0E, 0x4E, 0x0F, 0x4E, 0x10, 0x4E, 0x11, 0x01, 0x58, 0x01, 0x15, 0x6D, 0x14, +/* 00002660 */ 0x15, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x15, 0x5A, 0x01, 0x0D, 0x00, 0x00, 0x5A, 0x02, 0x05, +/* 00002670 */ 0x00, 0x00, 0xF4, 0x03, 0x14, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x13, 0x14, 0x45, +/* 00002680 */ 0x15, 0x14, 0x0D, 0x05, 0x00, 0x15, 0x02, 0x01, 0x73, 0x01, 0x10, 0x16, 0x5F, 0x16, 0x15, 0x01, +/* 00002690 */ 0x45, 0x0B, 0x16, 0x5F, 0x16, 0x15, 0x02, 0x45, 0x0C, 0x16, 0x2A, 0x13, 0x09, 0x15, 0x03, 0x00, +/* 000026A0 */ 0x13, 0x07, 0x09, 0x1D, 0x00, 0x01, 0x58, 0x01, 0x14, 0x6D, 0x13, 0x14, 0x03, 0x07, 0x02, 0x00, +/* 000026B0 */ 0x59, 0x00, 0x14, 0x5A, 0x01, 0x05, 0x01, 0x00, 0xF4, 0x02, 0xFF, 0x13, 0x03, 0x00, 0x00, 0x00, +/* 000026C0 */ 0x01, 0x00, 0x01, 0x58, 0x01, 0x14, 0x6D, 0x13, 0x14, 0x04, 0x07, 0x03, 0x00, 0x59, 0x00, 0x14, +/* 000026D0 */ 0x5A, 0x01, 0x0B, 0x02, 0x00, 0x5A, 0x02, 0x06, 0x02, 0x00, 0xF4, 0x03, 0x13, 0x13, 0x04, 0x00, +/* 000026E0 */ 0x00, 0x00, 0x02, 0x00, 0x45, 0x0E, 0x13, 0x45, 0x0F, 0x06, 0x45, 0x10, 0x06, 0xED, 0x00, 0xEE, +/* 000026F0 */ 0x00, 0x12, 0x03, 0x00, 0x0F, 0x0C, 0x09, 0x78, 0x00, 0xBC, 0x13, 0x0F, 0x0B, 0x00, 0x00, 0x0E, +/* 00002700 */ 0x68, 0x00, 0x13, 0x98, 0x13, 0x0B, 0x0F, 0x01, 0x00, 0x45, 0x11, 0x13, 0x01, 0x58, 0x01, 0x14, +/* 00002710 */ 0x6D, 0x13, 0x14, 0x05, 0x07, 0x06, 0x00, 0x59, 0x00, 0x14, 0x5A, 0x01, 0x09, 0x03, 0x00, 0x5A, +/* 00002720 */ 0x02, 0x0A, 0x03, 0x00, 0x5A, 0x03, 0x11, 0x03, 0x00, 0x5A, 0x04, 0x0F, 0x03, 0x00, 0x5A, 0x05, +/* 00002730 */ 0x0B, 0x03, 0x00, 0xF4, 0x06, 0x13, 0x13, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x0E, 0x2A, 0x00, +/* 00002740 */ 0x13, 0x01, 0x58, 0x01, 0x14, 0x6D, 0x13, 0x14, 0x06, 0x07, 0x04, 0x00, 0x59, 0x00, 0x14, 0x5A, +/* 00002750 */ 0x01, 0x0E, 0x04, 0x00, 0x5A, 0x02, 0x10, 0x04, 0x00, 0x5A, 0x03, 0x11, 0x04, 0x00, 0xF4, 0x04, +/* 00002760 */ 0xFF, 0x13, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x26, 0x10, 0x10, 0x26, 0x0F, 0x0F, 0x09, 0x7E, +/* 00002770 */ 0xFF, 0xEF, 0x00, 0x45, 0x00, 0x0E, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xE9, 0x02, +/* 00002780 */ 0xFE, 0xFD, 0x02, 0xFE, 0xFE, 0x02, 0xFE, 0xBA, 0x02, 0xFE, 0x82, 0x02, 0xFE, 0x8B, 0x02, 0xFE, +/* 00002790 */ 0x83, 0x02, 0xFE, 0xE6, 0x1D, 0x10, 0x0E, 0x00, 0x00, 0x00, 0x16, 0x00, 0x57, 0x00, 0x40, 0x00, +/* 000027A0 */ 0x65, 0x00, 0x0B, 0x00, 0x34, 0x00, 0x1D, 0x00, 0x61, 0x00, 0x25, 0x00, 0x3A, 0x00, 0x03, 0x00, +/* 000027B0 */ 0x13, 0x00, 0x07, 0x00, 0x1C, 0x00, 0x08, 0x00, 0x17, 0x00, 0x0A, 0x00, 0x1E, 0x00, 0x09, 0x00, +/* 000027C0 */ 0x23, 0x00, 0x35, 0x00, 0x6A, 0x00, 0x27, 0x00, 0x53, 0x00, 0x03, 0x00, 0x32, 0x00, 0x08, 0x00, +/* 000027D0 */ 0x18, 0x00, 0x08, 0x00, 0x0E, 0x00, 0x00, 0x7F, 0x1C, 0x09, 0xC0, 0x13, 0x00, 0x43, 0x00, 0xA0, +/* 000027E0 */ 0x42, 0xA2, 0x41, 0xD1, 0x00, 0x09, 0xFE, 0x1A, 0x1C, 0xFE, 0x1A, 0x1C, 0x01, 0xFE, 0x00, 0x90, +/* 000027F0 */ 0x03, 0x03, 0xFE, 0x1A, 0x1C, 0xFE, 0x8A, 0x01, 0xFE, 0x8A, 0x01, 0x05, 0x05, 0x07, 0x03, 0x2B, +/* 00002800 */ 0x2B, 0x02, 0x04, 0x0A, 0x0A, 0x0A, 0x0A, 0x02, 0x06, 0xFE, 0xFD, 0x02, 0x06, 0xFE, 0xFE, 0x02, +/* 00002810 */ 0x07, 0xCA, 0x01, 0x58, 0x01, 0x08, 0x6D, 0x07, 0x08, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x08, +/* 00002820 */ 0x5A, 0x01, 0x05, 0x00, 0x00, 0xF4, 0x02, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, +/* 00002830 */ 0x21, 0x00, 0x07, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00002840 */ 0x7B, 0x05, 0x00, 0x01, 0xA7, 0x07, 0x05, 0x02, 0x00, 0x00, 0x7B, 0x07, 0x00, 0x03, 0x09, 0x89, +/* 00002850 */ 0x00, 0x09, 0x84, 0x00, 0x14, 0x0A, 0x00, 0x05, 0x04, 0xA8, 0x07, 0x14, 0x03, 0x00, 0x05, 0x07, +/* 00002860 */ 0x09, 0x1D, 0x00, 0x01, 0x58, 0x01, 0x08, 0x6D, 0x07, 0x08, 0x04, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 00002870 */ 0x08, 0x5A, 0x01, 0x06, 0x01, 0x00, 0xF4, 0x02, 0xFF, 0x07, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, +/* 00002880 */ 0xCE, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x58, 0x01, +/* 00002890 */ 0x08, 0x6D, 0x07, 0x08, 0x05, 0x07, 0x02, 0x00, 0x59, 0x00, 0x08, 0x5A, 0x01, 0x05, 0x02, 0x00, +/* 000028A0 */ 0xF4, 0x02, 0x07, 0x07, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x7B, 0x07, 0x00, 0x06, 0x01, 0x58, +/* 000028B0 */ 0x01, 0x08, 0x6D, 0x07, 0x08, 0x07, 0x07, 0x02, 0x00, 0x59, 0x00, 0x08, 0xA7, 0x09, 0x05, 0x08, +/* 000028C0 */ 0x01, 0x00, 0x5A, 0x01, 0x09, 0x03, 0x00, 0xF4, 0x02, 0x07, 0x07, 0x07, 0x00, 0x00, 0x00, 0x03, +/* 000028D0 */ 0x00, 0x7B, 0x07, 0x00, 0x09, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x02, 0x20, 0x00, 0x10, +/* 000028E0 */ 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x02, 0x00, 0x00, 0xFE, +/* 000028F0 */ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, +/* 00002900 */ 0x02, 0x00, 0x00, 0xFE, 0x02, 0x00, 0x00, 0xBE, 0xFE, 0xFD, 0x02, 0xD1, 0xFE, 0xFE, 0x02, 0xFE, +/* 00002910 */ 0xB0, 0x02, 0xFE, 0x11, 0x01, 0xFE, 0xFD, 0x02, 0xFE, 0x80, 0x02, 0xD1, 0xFE, 0xFE, 0x02, 0xFE, +/* 00002920 */ 0x40, 0x1C, 0x06, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x30, 0x00, 0x21, 0x00, 0x41, 0x00, 0x0F, +/* 00002930 */ 0x00, 0x39, 0x00, 0x1D, 0x00, 0x52, 0x00, 0x5A, 0x00, 0x67, 0x00, 0x00, 0x7F, 0x3C, 0x0A, 0xC2, +/* 00002940 */ 0x43, 0x40, 0x13, 0x00, 0x71, 0x29, 0xA2, 0x41, 0xD1, 0x00, 0x08, 0xFE, 0xE3, 0x16, 0xFE, 0xE3, +/* 00002950 */ 0x16, 0x09, 0xFE, 0x00, 0x90, 0x03, 0x02, 0xFE, 0xE3, 0x16, 0xFE, 0xF1, 0x04, 0xFE, 0xF1, 0x04, +/* 00002960 */ 0x0D, 0x09, 0x11, 0x04, 0x50, 0x40, 0x10, 0x02, 0x02, 0x01, 0x04, 0x04, 0x04, 0x04, 0x01, 0x11, +/* 00002970 */ 0xCF, 0xFE, 0x06, 0x01, 0x08, 0x06, 0xFE, 0xFD, 0x02, 0x06, 0xFE, 0xFE, 0x02, 0x05, 0xFE, 0xFF, +/* 00002980 */ 0x02, 0x01, 0x00, 0x01, 0xFF, 0x01, 0x01, 0xFE, 0x10, 0x01, 0x58, 0x0D, 0x4E, 0x0B, 0x4E, 0x0C, +/* 00002990 */ 0x4E, 0x0E, 0x4E, 0x0F, 0x4E, 0x10, 0x15, 0x05, 0x00, 0x0A, 0x02, 0xA8, 0x12, 0x45, 0x0A, 0x12, +/* 000029A0 */ 0x4E, 0x0B, 0x4E, 0x0C, 0x4E, 0x0E, 0x4E, 0x0F, 0x4E, 0x10, 0x01, 0x58, 0x01, 0x14, 0x6D, 0x13, +/* 000029B0 */ 0x14, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x14, 0x5A, 0x01, 0x0D, 0x00, 0x00, 0x5A, 0x02, 0x05, +/* 000029C0 */ 0x00, 0x00, 0xF4, 0x03, 0x13, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x12, 0x13, 0x45, +/* 000029D0 */ 0x14, 0x13, 0x0D, 0x05, 0x00, 0x14, 0x02, 0x01, 0x73, 0x01, 0x10, 0x16, 0x5F, 0x15, 0x14, 0x01, +/* 000029E0 */ 0x45, 0x0B, 0x15, 0x5F, 0x15, 0x14, 0x02, 0x45, 0x0C, 0x15, 0x14, 0x03, 0x00, 0x0C, 0x06, 0x09, +/* 000029F0 */ 0x06, 0x00, 0x45, 0x00, 0x07, 0x09, 0xA0, 0x00, 0x01, 0x58, 0x01, 0x13, 0x6D, 0x12, 0x13, 0x03, +/* 00002A00 */ 0x07, 0x02, 0x00, 0x59, 0x00, 0x13, 0x5A, 0x01, 0x0A, 0x01, 0x00, 0xF4, 0x02, 0x12, 0x12, 0x03, +/* 00002A10 */ 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, 0x0E, 0x12, 0x10, 0x03, 0x00, 0x0E, 0x0C, 0x09, 0x06, 0x00, +/* 00002A20 */ 0x45, 0x00, 0x07, 0x09, 0x72, 0x00, 0xA8, 0x12, 0x45, 0x0F, 0x12, 0x14, 0x03, 0x00, 0x0E, 0x06, +/* 00002A30 */ 0x09, 0x06, 0x00, 0x45, 0x0F, 0x06, 0x09, 0x20, 0x00, 0x11, 0x03, 0x00, 0x0E, 0x06, 0x09, 0x06, +/* 00002A40 */ 0x00, 0x45, 0x0F, 0x0E, 0x09, 0x12, 0x00, 0x2D, 0x12, 0x0C, 0x0E, 0x45, 0x0F, 0x12, 0x12, 0x03, +/* 00002A50 */ 0x00, 0x0F, 0x06, 0x09, 0x03, 0x00, 0x45, 0x0F, 0x06, 0xED, 0x00, 0xEE, 0x00, 0x12, 0x03, 0x00, +/* 00002A60 */ 0x0F, 0x0C, 0x09, 0x29, 0x00, 0xBC, 0x12, 0x0F, 0x0B, 0x00, 0x00, 0x0E, 0x19, 0x00, 0x12, 0x98, +/* 00002A70 */ 0x12, 0x0B, 0x0F, 0x01, 0x00, 0x45, 0x10, 0x12, 0x14, 0x03, 0x00, 0x10, 0x09, 0x09, 0x08, 0x00, +/* 00002A80 */ 0x45, 0x00, 0x0F, 0xEF, 0x00, 0x09, 0x10, 0x00, 0x26, 0x0F, 0x0F, 0x09, 0xCD, 0xFF, 0xEF, 0x00, +/* 00002A90 */ 0x45, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xE9, 0x02, 0xFE, 0xFD, 0x02, +/* 00002AA0 */ 0xFE, 0xFE, 0x02, 0xFE, 0x81, 0x02, 0xFE, 0xFC, 0x16, 0x17, 0x0C, 0x00, 0x00, 0x00, 0x14, 0x00, +/* 00002AB0 */ 0x5A, 0x00, 0x40, 0x00, 0x5E, 0x00, 0x08, 0x00, 0x1D, 0x00, 0x06, 0x00, 0x1E, 0x00, 0x20, 0x00, +/* 00002AC0 */ 0x36, 0x00, 0x08, 0x00, 0x1C, 0x00, 0x06, 0x00, 0x1E, 0x00, 0x05, 0x00, 0x14, 0x01, 0x08, 0x00, +/* 00002AD0 */ 0x58, 0x00, 0x06, 0x00, 0x16, 0x00, 0x08, 0x00, 0x4F, 0x00, 0x06, 0x00, 0x4E, 0x00, 0x07, 0x00, +/* 00002AE0 */ 0x1A, 0x00, 0x08, 0x00, 0x1D, 0x00, 0x07, 0x00, 0x2F, 0x00, 0x08, 0x00, 0x17, 0x00, 0x0A, 0x00, +/* 00002AF0 */ 0x1E, 0x00, 0x09, 0x00, 0x26, 0x00, 0x08, 0x00, 0x36, 0x00, 0x08, 0x00, 0x37, 0x00, 0x08, 0x00, +/* 00002B00 */ 0x18, 0x00, 0x08, 0x00, 0x0F, 0x00, 0x00, 0x7F, 0x1C, 0x08, 0xC0, 0x03, 0x00, 0x03, 0x00, 0x69, +/* 00002B10 */ 0x29, 0xA0, 0x41, 0xD1, 0x00, 0x07, 0xFE, 0x88, 0x15, 0xFE, 0x88, 0x15, 0x09, 0xFE, 0x00, 0x90, +/* 00002B20 */ 0x01, 0x01, 0xFE, 0x88, 0x15, 0xFE, 0x2E, 0x01, 0xFE, 0x2E, 0x01, 0x04, 0x05, 0x07, 0x04, 0x1E, +/* 00002B30 */ 0x1D, 0x03, 0x03, 0x03, 0x03, 0x03, 0x07, 0x05, 0xFE, 0xFC, 0x02, 0x01, 0x02, 0x79, 0x58, 0x05, +/* 00002B40 */ 0x4E, 0x06, 0x14, 0x0A, 0x00, 0x05, 0x02, 0xA8, 0x07, 0x14, 0x03, 0x00, 0x05, 0x07, 0x09, 0x1D, +/* 00002B50 */ 0x00, 0x01, 0x58, 0x01, 0x08, 0x6D, 0x07, 0x08, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x08, 0x5A, +/* 00002B60 */ 0x01, 0x03, 0x00, 0x00, 0xF4, 0x02, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x58, +/* 00002B70 */ 0x01, 0x08, 0x6D, 0x07, 0x08, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x08, 0x5A, 0x01, 0x05, 0x01, +/* 00002B80 */ 0x00, 0xF4, 0x02, 0x07, 0x07, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, 0x06, 0x07, 0x01, 0x58, +/* 00002B90 */ 0x01, 0x08, 0x6D, 0x07, 0x08, 0x02, 0x07, 0x03, 0x00, 0x59, 0x00, 0x08, 0x5A, 0x01, 0x06, 0x02, +/* 00002BA0 */ 0x00, 0x5A, 0x02, 0x04, 0x02, 0x00, 0xF4, 0x03, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, +/* 00002BB0 */ 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB0, 0x02, 0xFE, 0x11, 0x01, 0xFE, 0xE4, 0x02, +/* 00002BC0 */ 0xFE, 0x9E, 0x15, 0x05, 0x04, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x37, 0x00, 0x1D, 0x00, 0x58, 0x00, +/* 00002BD0 */ 0x20, 0x00, 0x2E, 0x00, 0x27, 0x00, 0x5A, 0x00, 0x00, 0x7F, 0x1C, 0x08, 0xC0, 0x03, 0x00, 0x03, +/* 00002BE0 */ 0x00, 0x61, 0x28, 0xA0, 0x41, 0xD1, 0x00, 0x06, 0xFE, 0x34, 0x14, 0xFE, 0x34, 0x14, 0x09, 0xFE, +/* 00002BF0 */ 0x00, 0x90, 0x01, 0x01, 0xFE, 0x34, 0x14, 0xFE, 0x27, 0x01, 0xFE, 0x27, 0x01, 0x04, 0x05, 0x07, +/* 00002C00 */ 0x04, 0x1E, 0x1D, 0x03, 0x03, 0x03, 0x03, 0x03, 0x07, 0x05, 0xFE, 0xFB, 0x02, 0x01, 0x01, 0x79, +/* 00002C10 */ 0x58, 0x05, 0x4E, 0x06, 0x14, 0x0A, 0x00, 0x05, 0x02, 0xA8, 0x07, 0x14, 0x03, 0x00, 0x05, 0x07, +/* 00002C20 */ 0x09, 0x1D, 0x00, 0x01, 0x58, 0x01, 0x08, 0x6D, 0x07, 0x08, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 00002C30 */ 0x08, 0x5A, 0x01, 0x03, 0x00, 0x00, 0xF4, 0x02, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00002C40 */ 0x01, 0x58, 0x01, 0x08, 0x6D, 0x07, 0x08, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x08, 0x5A, 0x01, +/* 00002C50 */ 0x05, 0x01, 0x00, 0xF4, 0x02, 0x07, 0x07, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, 0x06, 0x07, +/* 00002C60 */ 0x01, 0x58, 0x01, 0x08, 0x6D, 0x07, 0x08, 0x02, 0x07, 0x03, 0x00, 0x59, 0x00, 0x08, 0x5A, 0x01, +/* 00002C70 */ 0x06, 0x02, 0x00, 0x5A, 0x02, 0x04, 0x02, 0x00, 0xF4, 0x03, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, +/* 00002C80 */ 0x02, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB0, 0x02, 0xFE, 0x11, 0x01, 0xFE, +/* 00002C90 */ 0xE4, 0x02, 0xFE, 0x4A, 0x14, 0x05, 0x04, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x37, 0x00, 0x1D, 0x00, +/* 00002CA0 */ 0x57, 0x00, 0x20, 0x00, 0x2E, 0x00, 0x27, 0x00, 0x54, 0x00, 0x00, 0x7F, 0x1C, 0x08, 0xC0, 0x03, +/* 00002CB0 */ 0x00, 0x03, 0x00, 0x59, 0x26, 0xA0, 0x41, 0xD1, 0x00, 0x05, 0xFE, 0xE5, 0x12, 0xFE, 0xE5, 0x12, +/* 00002CC0 */ 0x09, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFE, 0xE5, 0x12, 0xFE, 0x23, 0x01, 0xFE, 0x23, 0x01, 0x04, +/* 00002CD0 */ 0x05, 0x07, 0x04, 0x1E, 0x1D, 0x03, 0x03, 0x03, 0x03, 0x03, 0x07, 0x05, 0xFE, 0xFA, 0x02, 0x01, +/* 00002CE0 */ 0x00, 0x79, 0x58, 0x05, 0x4E, 0x06, 0x14, 0x0A, 0x00, 0x05, 0x02, 0xA8, 0x07, 0x14, 0x03, 0x00, +/* 00002CF0 */ 0x05, 0x07, 0x09, 0x1D, 0x00, 0x01, 0x58, 0x01, 0x08, 0x6D, 0x07, 0x08, 0x00, 0x07, 0x02, 0x00, +/* 00002D00 */ 0x59, 0x00, 0x08, 0x5A, 0x01, 0x03, 0x00, 0x00, 0xF4, 0x02, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, +/* 00002D10 */ 0x00, 0x00, 0x01, 0x58, 0x01, 0x08, 0x6D, 0x07, 0x08, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x08, +/* 00002D20 */ 0x5A, 0x01, 0x05, 0x01, 0x00, 0xF4, 0x02, 0x07, 0x07, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, +/* 00002D30 */ 0x06, 0x07, 0x01, 0x58, 0x01, 0x08, 0x6D, 0x07, 0x08, 0x02, 0x07, 0x03, 0x00, 0x59, 0x00, 0x08, +/* 00002D40 */ 0x5A, 0x01, 0x06, 0x02, 0x00, 0x5A, 0x02, 0x04, 0x02, 0x00, 0xF4, 0x03, 0x00, 0x07, 0x02, 0x00, +/* 00002D50 */ 0x00, 0x00, 0x02, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB0, 0x02, 0xFE, 0x11, +/* 00002D60 */ 0x01, 0xFE, 0xE4, 0x02, 0xFE, 0xFB, 0x12, 0x05, 0x04, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x37, 0x00, +/* 00002D70 */ 0x1D, 0x00, 0x55, 0x00, 0x20, 0x00, 0x2E, 0x00, 0x27, 0x00, 0x52, 0x00, 0x00, 0x7F, 0x1C, 0x08, +/* 00002D80 */ 0xC0, 0x03, 0x00, 0x03, 0x00, 0x55, 0x42, 0xA2, 0x41, 0xD1, 0x00, 0x04, 0xFE, 0x46, 0x12, 0xFE, +/* 00002D90 */ 0x46, 0x12, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, 0x46, 0x12, 0x75, 0x75, 0x03, 0x02, 0x04, +/* 00002DA0 */ 0x04, 0x0A, 0x0A, 0x01, 0x01, 0x01, 0x01, 0x01, 0x26, 0x01, 0x58, 0x01, 0x04, 0x5F, 0x04, 0x04, +/* 00002DB0 */ 0x00, 0x07, 0x03, 0x00, 0x5A, 0x01, 0x02, 0x00, 0x00, 0x5A, 0x02, 0x03, 0x00, 0x00, 0xC6, 0x03, +/* 00002DC0 */ 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, +/* 00002DD0 */ 0xDB, 0x02, 0xFE, 0x73, 0x12, 0x02, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x47, 0x00, 0x00, 0x7F, +/* 00002DE0 */ 0x1C, 0x1B, 0xC0, 0x57, 0x40, 0x47, 0x00, 0x26, 0x13, 0xA0, 0x41, 0xC1, 0x00, 0xFE, 0xDD, 0x02, +/* 00002DF0 */ 0x03, 0xFF, 0x00, 0x00, 0x00, 0x02, 0xFE, 0x3E, 0x09, 0xFE, 0x3E, 0x09, 0x09, 0xFE, 0x00, 0x90, +/* 00002E00 */ 0x01, 0x01, 0xFE, 0x3E, 0x09, 0xFE, 0x30, 0x06, 0xFE, 0x30, 0x06, 0x0E, 0x0B, 0x13, 0x04, 0x5C, +/* 00002E10 */ 0x54, 0x01, 0x02, 0x03, 0x01, 0x15, 0x15, 0x15, 0x15, 0x01, 0x05, 0x03, 0x13, 0x05, 0xFE, 0xF8, +/* 00002E20 */ 0x02, 0x05, 0xFE, 0xE1, 0x02, 0x0B, 0x06, 0xFE, 0xDD, 0x02, 0x06, 0xFE, 0xF9, 0x02, 0x07, 0x01, +/* 00002E30 */ 0x01, 0x0C, 0x01, 0x00, 0xFE, 0x86, 0x01, 0x58, 0x0B, 0x4E, 0x0C, 0x4E, 0x0D, 0x4E, 0x0E, 0x4E, +/* 00002E40 */ 0x0F, 0x4E, 0x10, 0x4E, 0x11, 0x4E, 0x12, 0x45, 0x0C, 0x0B, 0x01, 0x58, 0x01, 0x16, 0x5F, 0x16, +/* 00002E50 */ 0x16, 0x00, 0xE3, 0x16, 0x0C, 0x16, 0x00, 0x0F, 0x22, 0x00, 0x16, 0x01, 0x58, 0x01, 0x17, 0x6D, +/* 00002E60 */ 0x16, 0x17, 0x01, 0x07, 0x03, 0x00, 0x59, 0x00, 0x17, 0x5A, 0x01, 0x02, 0x00, 0x00, 0x5A, 0x02, +/* 00002E70 */ 0x03, 0x00, 0x00, 0xF4, 0x03, 0xFF, 0x16, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x16, 0x0C, +/* 00002E80 */ 0x02, 0x45, 0x0D, 0x16, 0x5F, 0x16, 0x0C, 0x03, 0x14, 0x03, 0x00, 0x16, 0x04, 0x09, 0x1D, 0x00, +/* 00002E90 */ 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0x16, 0x7B, +/* 00002EA0 */ 0x16, 0x00, 0x04, 0x7B, 0x04, 0x00, 0x05, 0x09, 0x11, 0x01, 0x09, 0x0C, 0x01, 0x5F, 0x16, 0x0C, +/* 00002EB0 */ 0x06, 0x45, 0x0E, 0x16, 0x01, 0x58, 0x01, 0x17, 0x6D, 0x16, 0x17, 0x07, 0x07, 0x02, 0x00, 0x59, +/* 00002EC0 */ 0x00, 0x17, 0x5A, 0x01, 0x0D, 0x01, 0x00, 0xF4, 0x02, 0x16, 0x16, 0x07, 0x00, 0x00, 0x00, 0x01, +/* 00002ED0 */ 0x00, 0x0E, 0x0C, 0x00, 0x16, 0xA7, 0x17, 0x0D, 0x08, 0x00, 0x00, 0x45, 0x16, 0x17, 0x09, 0x20, +/* 00002EE0 */ 0x00, 0x01, 0x58, 0x01, 0x18, 0x6D, 0x17, 0x18, 0x09, 0x07, 0x02, 0x00, 0x59, 0x00, 0x18, 0x5A, +/* 00002EF0 */ 0x01, 0x0D, 0x02, 0x00, 0xF4, 0x02, 0x17, 0x17, 0x09, 0x00, 0x00, 0x00, 0x02, 0x00, 0x46, 0x16, +/* 00002F00 */ 0x17, 0x45, 0x0F, 0x16, 0x12, 0x03, 0x00, 0x0E, 0x0F, 0x09, 0x8F, 0x00, 0x5F, 0x16, 0x0C, 0x0A, +/* 00002F10 */ 0x45, 0x10, 0x16, 0x2D, 0x16, 0x0E, 0x08, 0x77, 0x16, 0x0C, 0x0B, 0x14, 0x03, 0x00, 0x10, 0x08, +/* 00002F20 */ 0x09, 0x21, 0x00, 0xCE, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00002F30 */ 0x98, 0x16, 0x0D, 0x0E, 0x00, 0x00, 0x7B, 0x16, 0x00, 0x0C, 0x7B, 0x09, 0x00, 0x0D, 0x09, 0x7A, +/* 00002F40 */ 0x00, 0x09, 0x54, 0x00, 0x14, 0x03, 0x00, 0x10, 0x0A, 0x09, 0x1B, 0x00, 0xCE, 0x20, 0x00, 0x00, +/* 00002F50 */ 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7B, 0x0E, 0x00, 0x0E, 0x7B, 0x09, 0x00, +/* 00002F60 */ 0x0F, 0x09, 0x57, 0x00, 0x09, 0x31, 0x00, 0x45, 0x11, 0x0E, 0x98, 0x16, 0x0D, 0x0E, 0x01, 0x00, +/* 00002F70 */ 0x45, 0x12, 0x16, 0xCE, 0x30, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00002F80 */ 0xD0, 0x16, 0x02, 0x00, 0x00, 0xA1, 0x00, 0x11, 0x16, 0xA1, 0x01, 0x12, 0x16, 0x7B, 0x16, 0x00, +/* 00002F90 */ 0x10, 0x7B, 0x09, 0x00, 0x11, 0x09, 0x23, 0x00, 0x09, 0x1E, 0x00, 0x77, 0x04, 0x0C, 0x12, 0xCE, +/* 00002FA0 */ 0x40, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0x16, 0x7B, 0x16, +/* 00002FB0 */ 0x00, 0x13, 0x7B, 0x04, 0x00, 0x14, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x05, 0x50, 0x00, +/* 00002FC0 */ 0x40, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, +/* 00002FD0 */ 0x74, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00002FE0 */ 0x97, 0x01, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, +/* 00002FF0 */ 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, +/* 00003000 */ 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, +/* 00003010 */ 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, +/* 00003020 */ 0x74, 0x00, 0x00, 0x00, 0xFE, 0xDB, 0x02, 0xFE, 0xB6, 0x02, 0xFE, 0xF4, 0x02, 0xFE, 0xF7, 0x02, +/* 00003030 */ 0xFE, 0x97, 0x01, 0x74, 0xFE, 0xF5, 0x02, 0xBE, 0xD1, 0xFE, 0x7C, 0x02, 0xFE, 0xF6, 0x02, 0xFE, +/* 00003040 */ 0xF5, 0x02, 0xFE, 0x97, 0x01, 0x74, 0xFE, 0x97, 0x01, 0x74, 0xFE, 0x97, 0x01, 0x74, 0xFE, 0xF7, +/* 00003050 */ 0x02, 0xFE, 0x97, 0x01, 0x74, 0xFE, 0x5C, 0x09, 0x15, 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x1F, +/* 00003060 */ 0x00, 0x11, 0x00, 0x49, 0x00, 0x22, 0x00, 0x7D, 0x00, 0x07, 0x00, 0x2B, 0x00, 0x0C, 0x00, 0x39, +/* 00003070 */ 0x00, 0x1D, 0x00, 0x56, 0x00, 0x07, 0x00, 0x33, 0x00, 0x50, 0x00, 0x65, 0x00, 0x08, 0x00, 0x70, +/* 00003080 */ 0x00, 0x07, 0x00, 0x36, 0x00, 0x08, 0x00, 0x38, 0x00, 0x08, 0x00, 0x4F, 0x00, 0x21, 0x00, 0x48, +/* 00003090 */ 0x00, 0x08, 0x00, 0x78, 0x00, 0x1B, 0x00, 0x63, 0x00, 0x03, 0x00, 0x34, 0x00, 0x09, 0x00, 0x39, +/* 000030A0 */ 0x00, 0x28, 0x00, 0x8A, 0x00, 0x04, 0x00, 0x35, 0x00, 0x1C, 0x00, 0x5E, 0x00, 0x00, 0x7F, 0x1C, +/* 000030B0 */ 0x08, 0xC0, 0x03, 0x00, 0x03, 0x00, 0x10, 0x3C, 0xA2, 0x41, 0xD1, 0x00, 0x02, 0xFE, 0x34, 0x03, +/* 000030C0 */ 0xFE, 0x34, 0x03, 0x49, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, 0x34, 0x03, 0xFE, 0xD3, 0x01, 0xFE, +/* 000030D0 */ 0xD3, 0x01, 0x05, 0x09, 0x0C, 0x08, 0x13, 0x13, 0x01, 0x05, 0x05, 0x05, 0x05, 0x01, 0x04, 0x06, +/* 000030E0 */ 0xFE, 0xF4, 0x02, 0x06, 0xFE, 0xF5, 0x02, 0x06, 0xFE, 0xF6, 0x02, 0x06, 0xFE, 0xF7, 0x02, 0x01, +/* 000030F0 */ 0x00, 0x0C, 0x4C, 0x58, 0x0B, 0x01, 0x58, 0x01, 0x0D, 0x6D, 0x0C, 0x0D, 0x00, 0x07, 0x07, 0x00, +/* 00003100 */ 0x59, 0x00, 0x0D, 0x5A, 0x01, 0x0B, 0x00, 0x00, 0x5A, 0x02, 0x02, 0x00, 0x00, 0x5A, 0x03, 0x03, +/* 00003110 */ 0x00, 0x00, 0x5A, 0x04, 0x04, 0x00, 0x00, 0x5A, 0x05, 0x05, 0x00, 0x00, 0x5A, 0x06, 0x06, 0x00, +/* 00003120 */ 0x00, 0xF4, 0x07, 0xFF, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x09, 0x0B, 0x01, 0x77, +/* 00003130 */ 0x07, 0x0B, 0x02, 0x77, 0x0A, 0x0B, 0x03, 0x77, 0x08, 0x0B, 0x04, 0xA8, 0x00, 0x24, 0x00, 0xFE, +/* 00003140 */ 0x7D, 0x02, 0xFE, 0xF4, 0x02, 0xFE, 0xF5, 0x02, 0xFE, 0xF6, 0x02, 0xFE, 0xF7, 0x02, 0xFE, 0x61, +/* 00003150 */ 0x03, 0x06, 0x02, 0x00, 0x00, 0x00, 0x36, 0x00, 0x82, 0x00, 0x04, 0x00, 0x28, 0x00, 0x04, 0x00, +/* 00003160 */ 0x22, 0x00, 0x04, 0x00, 0x29, 0x00, 0x06, 0x00, 0xB0, 0x00, 0x00, 0x00}; + +//Bytecode generated from Math_object.js +const char Library_Bytecode_Math_object[] = { +/* 00000000 */ 0x43, 0x68, 0x42, 0x63, 0xA9, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00000010 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0xFE, 0xD9, 0x02, 0x00, 0xFE, +/* 00000020 */ 0xC0, 0x0F, 0xFE, 0xC0, 0x0F, 0x35, 0x00, 0x00, 0x00, 0xDC, 0x00, 0x00, 0x00, 0xBA, 0x02, 0x00, +/* 00000030 */ 0x00, 0xA8, 0x07, 0x00, 0x00, 0x06, 0x5A, 0x00, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, 0x00, +/* 00000040 */ 0x88, 0x00, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x01, 0xBA, +/* 00000050 */ 0x00, 0x00, 0x00, 0x01, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x6C, 0x00, 0x6F, 0x00, +/* 00000060 */ 0x62, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x20, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x64, 0x00, 0x65, 0x00, +/* 00000070 */ 0x00, 0x00, 0x75, 0x00, 0x73, 0x00, 0x65, 0x00, 0x20, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, +/* 00000080 */ 0x69, 0x00, 0x63, 0x00, 0x74, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x00, 0x00, +/* 00000090 */ 0x6D, 0x00, 0x61, 0x00, 0x78, 0x00, 0x00, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x73, 0x00, 0x69, 0x00, +/* 000000A0 */ 0x74, 0x00, 0x69, 0x00, 0x76, 0x00, 0x65, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x66, 0x00, 0x69, 0x00, +/* 000000B0 */ 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x67, 0x00, +/* 000000C0 */ 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x76, 0x00, 0x65, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x66, 0x00, +/* 000000D0 */ 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, +/* 000000E0 */ 0x00, 0x6A, 0x00, 0x00, 0x00, 0x9B, 0x00, 0x00, 0x00, 0xE2, 0x00, 0x00, 0x00, 0x4C, 0x01, 0x00, +/* 000000F0 */ 0x00, 0xB6, 0x01, 0x00, 0x00, 0xB7, 0x01, 0x00, 0x00, 0xC5, 0x01, 0x00, 0x00, 0xC6, 0x01, 0x00, +/* 00000100 */ 0x00, 0xDE, 0x01, 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x4A, 0x02, 0x00, +/* 00000110 */ 0x00, 0x8D, 0x02, 0x00, 0x00, 0x8E, 0x02, 0x00, 0x00, 0xCF, 0x02, 0x00, 0x00, 0xE8, 0x02, 0x00, +/* 00000120 */ 0x00, 0xE9, 0x02, 0x00, 0x00, 0x2F, 0x03, 0x00, 0x00, 0x63, 0x03, 0x00, 0x00, 0x15, 0x04, 0x00, +/* 00000130 */ 0x00, 0x3B, 0x04, 0x00, 0x00, 0x70, 0x04, 0x00, 0x00, 0x7A, 0x04, 0x00, 0x00, 0x7B, 0x04, 0x00, +/* 00000140 */ 0x00, 0x9A, 0x04, 0x00, 0x00, 0x9B, 0x04, 0x00, 0x00, 0xB5, 0x04, 0x00, 0x00, 0xD6, 0x04, 0x00, +/* 00000150 */ 0x00, 0xF4, 0x04, 0x00, 0x00, 0xFE, 0x04, 0x00, 0x00, 0xFF, 0x04, 0x00, 0x00, 0x25, 0x05, 0x00, +/* 00000160 */ 0x00, 0x40, 0x05, 0x00, 0x00, 0x4A, 0x05, 0x00, 0x00, 0x4B, 0x05, 0x00, 0x00, 0x71, 0x05, 0x00, +/* 00000170 */ 0x00, 0x8F, 0x05, 0x00, 0x00, 0xC1, 0x05, 0x00, 0x00, 0xDD, 0x05, 0x00, 0x00, 0xEB, 0x05, 0x00, +/* 00000180 */ 0x00, 0x6A, 0x06, 0x00, 0x00, 0x89, 0x06, 0x00, 0x00, 0x97, 0x06, 0x00, 0x00, 0xAA, 0x06, 0x00, +/* 00000190 */ 0x00, 0xC9, 0x06, 0x00, 0x00, 0xD7, 0x06, 0x00, 0x00, 0xE1, 0x06, 0x00, 0x00, 0xE2, 0x06, 0x00, +/* 000001A0 */ 0x00, 0xFC, 0x06, 0x00, 0x00, 0x11, 0x07, 0x00, 0x00, 0x12, 0x07, 0x00, 0x00, 0x47, 0x07, 0x00, +/* 000001B0 */ 0x00, 0xA6, 0x07, 0x00, 0x00, 0xDF, 0x07, 0x00, 0x00, 0x0B, 0x08, 0x00, 0x00, 0x2D, 0x08, 0x00, +/* 000001C0 */ 0x00, 0x48, 0x08, 0x00, 0x00, 0x56, 0x08, 0x00, 0x00, 0xD1, 0x08, 0x00, 0x00, 0xF0, 0x08, 0x00, +/* 000001D0 */ 0x00, 0xFE, 0x08, 0x00, 0x00, 0x08, 0x09, 0x00, 0x00, 0x09, 0x09, 0x00, 0x00, 0x1D, 0x09, 0x00, +/* 000001E0 */ 0x00, 0x25, 0x09, 0x00, 0x00, 0x26, 0x09, 0x00, 0x00, 0x67, 0x09, 0x00, 0x00, 0x80, 0x09, 0x00, +/* 000001F0 */ 0x00, 0x81, 0x09, 0x00, 0x00, 0xC7, 0x09, 0x00, 0x00, 0xFB, 0x09, 0x00, 0x00, 0xAC, 0x0A, 0x00, +/* 00000200 */ 0x00, 0xD2, 0x0A, 0x00, 0x00, 0x07, 0x0B, 0x00, 0x00, 0x11, 0x0B, 0x00, 0x00, 0x12, 0x0B, 0x00, +/* 00000210 */ 0x00, 0x31, 0x0B, 0x00, 0x00, 0x32, 0x0B, 0x00, 0x00, 0x4C, 0x0B, 0x00, 0x00, 0x6D, 0x0B, 0x00, +/* 00000220 */ 0x00, 0x8B, 0x0B, 0x00, 0x00, 0x95, 0x0B, 0x00, 0x00, 0x96, 0x0B, 0x00, 0x00, 0xBC, 0x0B, 0x00, +/* 00000230 */ 0x00, 0xD7, 0x0B, 0x00, 0x00, 0xE1, 0x0B, 0x00, 0x00, 0xE2, 0x0B, 0x00, 0x00, 0x08, 0x0C, 0x00, +/* 00000240 */ 0x00, 0x26, 0x0C, 0x00, 0x00, 0x58, 0x0C, 0x00, 0x00, 0x74, 0x0C, 0x00, 0x00, 0x82, 0x0C, 0x00, +/* 00000250 */ 0x00, 0x01, 0x0D, 0x00, 0x00, 0x20, 0x0D, 0x00, 0x00, 0x2E, 0x0D, 0x00, 0x00, 0x41, 0x0D, 0x00, +/* 00000260 */ 0x00, 0x60, 0x0D, 0x00, 0x00, 0x6E, 0x0D, 0x00, 0x00, 0x78, 0x0D, 0x00, 0x00, 0x79, 0x0D, 0x00, +/* 00000270 */ 0x00, 0x93, 0x0D, 0x00, 0x00, 0xA8, 0x0D, 0x00, 0x00, 0xA9, 0x0D, 0x00, 0x00, 0xDE, 0x0D, 0x00, +/* 00000280 */ 0x00, 0x3D, 0x0E, 0x00, 0x00, 0x76, 0x0E, 0x00, 0x00, 0xA2, 0x0E, 0x00, 0x00, 0xC4, 0x0E, 0x00, +/* 00000290 */ 0x00, 0xDF, 0x0E, 0x00, 0x00, 0xED, 0x0E, 0x00, 0x00, 0x68, 0x0F, 0x00, 0x00, 0x87, 0x0F, 0x00, +/* 000002A0 */ 0x00, 0x95, 0x0F, 0x00, 0x00, 0x9F, 0x0F, 0x00, 0x00, 0xA0, 0x0F, 0x00, 0x00, 0xB4, 0x0F, 0x00, +/* 000002B0 */ 0x00, 0xBC, 0x0F, 0x00, 0x00, 0xC0, 0x0F, 0x00, 0x00, 0x00, 0x04, 0x73, 0x0C, 0x00, 0x00, 0x00, +/* 000002C0 */ 0x10, 0x08, 0x00, 0xA8, 0x41, 0xC0, 0x00, 0xFE, 0xD9, 0x02, 0x00, 0xFE, 0xB7, 0x01, 0xFE, 0xB7, +/* 000002D0 */ 0x01, 0x01, 0x40, 0xFE, 0x00, 0x90, 0xFE, 0xB7, 0x01, 0xFE, 0x09, 0x0E, 0xFE, 0x09, 0x0E, 0x01, +/* 000002E0 */ 0x04, 0x04, 0x04, 0x04, 0x03, 0x05, 0xFE, 0xDA, 0x02, 0x0A, 0x07, 0xA8, 0x00, 0xD6, 0x00, 0x04, +/* 000002F0 */ 0x24, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x02, 0x00, 0x00, 0x7F, 0x1C, 0x08, +/* 00000300 */ 0xC0, 0x03, 0x10, 0x0B, 0x00, 0x08, 0x01, 0xA2, 0x41, 0xD1, 0x00, 0x01, 0xFE, 0xC7, 0x01, 0xFE, +/* 00000310 */ 0xC7, 0x01, 0x02, 0x40, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0xC7, 0x01, 0xFE, 0xF6, 0x0D, 0xFE, +/* 00000320 */ 0xF6, 0x0D, 0x05, 0x04, 0x07, 0x04, 0x19, 0x18, 0x02, 0x07, 0x07, 0x07, 0x07, 0x06, 0x06, 0xFE, +/* 00000330 */ 0xDB, 0x02, 0x06, 0xFE, 0xDC, 0x02, 0x65, 0x5F, 0x07, 0x04, 0x00, 0x45, 0x05, 0x07, 0x01, 0x58, +/* 00000340 */ 0x01, 0x07, 0x5F, 0x08, 0x05, 0x01, 0x77, 0x08, 0x07, 0x02, 0x01, 0x58, 0x01, 0x07, 0x5F, 0x08, +/* 00000350 */ 0x05, 0x03, 0x77, 0x08, 0x07, 0x04, 0x6D, 0x07, 0x05, 0x05, 0x07, 0x03, 0x00, 0x59, 0x00, 0x05, +/* 00000360 */ 0x5A, 0x01, 0x02, 0x00, 0x00, 0xD6, 0x00, 0x08, 0x5A, 0x02, 0x08, 0x00, 0x00, 0xF4, 0x03, 0xFF, +/* 00000370 */ 0x07, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6D, 0x07, 0x05, 0x06, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 00000380 */ 0x05, 0x5A, 0x01, 0x03, 0x01, 0x00, 0xD6, 0x01, 0x08, 0x5A, 0x02, 0x08, 0x01, 0x00, 0xF4, 0x03, +/* 00000390 */ 0xFF, 0x07, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x59, 0xFE, 0x21, 0x01, +/* 000003A0 */ 0xFE, 0xDD, 0x02, 0xFE, 0x0E, 0x01, 0xFE, 0xDE, 0x02, 0xFE, 0x7F, 0x02, 0xFE, 0x7F, 0x02, 0xFE, +/* 000003B0 */ 0xE2, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x29, 0x00, 0x0C, 0x00, 0x43, 0x00, 0x0C, +/* 000003C0 */ 0x00, 0x44, 0x00, 0x21, 0x00, 0x98, 0x06, 0x23, 0x00, 0x92, 0x06, 0x00, 0xBE, 0x05, 0x00, 0x00, +/* 000003D0 */ 0xD4, 0x03, 0x00, 0x00, 0x7F, 0x2C, 0x23, 0xC2, 0x43, 0x40, 0x13, 0x00, 0x42, 0x25, 0xA2, 0x41, +/* 000003E0 */ 0xB1, 0x00, 0x03, 0xFE, 0x4B, 0x09, 0xFE, 0x4B, 0x09, 0x03, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, +/* 000003F0 */ 0x4B, 0x09, 0xFE, 0x6E, 0x06, 0xFE, 0x6E, 0x06, 0x0A, 0x08, 0x0F, 0x53, 0x44, 0x1D, 0x04, 0x01, +/* 00000400 */ 0x04, 0x01, 0x05, 0x05, 0x05, 0x05, 0x01, 0x0F, 0xB0, 0xFE, 0x1C, 0x01, 0x07, 0x01, 0x00, 0x0C, +/* 00000410 */ 0x0B, 0x01, 0x01, 0x01, 0x02, 0xFE, 0x26, 0x01, 0xB1, 0x0A, 0x4E, 0x0B, 0x4E, 0x0C, 0x4E, 0x0D, +/* 00000420 */ 0x4E, 0x0E, 0xA7, 0x10, 0x0A, 0x00, 0x00, 0x00, 0x14, 0x03, 0x00, 0x10, 0x03, 0x09, 0x0B, 0x00, +/* 00000430 */ 0x01, 0x58, 0x01, 0x10, 0x5F, 0x00, 0x10, 0x01, 0x09, 0x01, 0x01, 0x45, 0x0B, 0x04, 0x43, 0x10, +/* 00000440 */ 0x08, 0x45, 0x08, 0x10, 0x15, 0x03, 0x00, 0x08, 0x08, 0x09, 0x03, 0x00, 0x45, 0x0B, 0x05, 0xA7, +/* 00000450 */ 0x10, 0x0A, 0x02, 0x01, 0x00, 0x14, 0x03, 0x00, 0x10, 0x06, 0x09, 0x06, 0x00, 0x45, 0x00, 0x08, +/* 00000460 */ 0x09, 0xD9, 0x00, 0xA7, 0x10, 0x0A, 0x03, 0x02, 0x00, 0x14, 0x03, 0x00, 0x10, 0x07, 0x09, 0x4C, +/* 00000470 */ 0x00, 0x43, 0x10, 0x09, 0x45, 0x09, 0x10, 0x15, 0x04, 0x00, 0x09, 0x09, 0x0E, 0x05, 0x00, 0x0B, +/* 00000480 */ 0xA9, 0x00, 0x09, 0xB7, 0x00, 0x11, 0x24, 0x00, 0x08, 0x09, 0x14, 0x03, 0x00, 0x08, 0x09, 0x09, +/* 00000490 */ 0x25, 0x00, 0x14, 0x03, 0x00, 0x08, 0x03, 0x09, 0x1D, 0x00, 0x2F, 0x10, 0x06, 0x08, 0x00, 0x00, +/* 000004A0 */ 0x2F, 0x11, 0x06, 0x09, 0x01, 0x00, 0x11, 0x03, 0x00, 0x10, 0x11, 0x09, 0x09, 0x00, 0x45, 0x00, +/* 000004B0 */ 0x08, 0x09, 0x88, 0x00, 0x09, 0x06, 0x00, 0x45, 0x00, 0x09, 0x09, 0x7F, 0x00, 0x45, 0x0C, 0x08, +/* 000004C0 */ 0xA8, 0x10, 0x45, 0x0D, 0x10, 0x45, 0x0E, 0x06, 0xED, 0x00, 0xEE, 0x00, 0xA7, 0x10, 0x0A, 0x04, +/* 000004D0 */ 0x03, 0x00, 0x12, 0x03, 0x00, 0x0E, 0x10, 0x09, 0x58, 0x00, 0x98, 0x10, 0x0A, 0x0E, 0x00, 0x00, +/* 000004E0 */ 0x43, 0x10, 0x10, 0x45, 0x0D, 0x10, 0x0E, 0x03, 0x00, 0x0B, 0x09, 0x3F, 0x00, 0x15, 0x03, 0x00, +/* 000004F0 */ 0x0D, 0x0D, 0x09, 0x0B, 0x00, 0x45, 0x0B, 0x05, 0xA9, 0x10, 0x45, 0x0C, 0x10, 0x09, 0x2C, 0x00, +/* 00000500 */ 0x12, 0x24, 0x00, 0x0C, 0x0D, 0x14, 0x03, 0x00, 0x0C, 0x0D, 0x09, 0x1F, 0x00, 0x14, 0x03, 0x00, +/* 00000510 */ 0x0C, 0x03, 0x09, 0x17, 0x00, 0x2F, 0x10, 0x06, 0x0C, 0x02, 0x00, 0x2F, 0x11, 0x06, 0x0D, 0x03, +/* 00000520 */ 0x00, 0x12, 0x03, 0x00, 0x10, 0x11, 0x09, 0x03, 0x00, 0x45, 0x0C, 0x0D, 0x26, 0x0E, 0x0E, 0x09, +/* 00000530 */ 0x98, 0xFF, 0xEF, 0x00, 0x45, 0x00, 0x0C, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xD1, 0xFE, +/* 00000540 */ 0xDE, 0x02, 0xD1, 0xD1, 0xD1, 0xFE, 0xB4, 0x0A, 0x1D, 0x0A, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x2A, +/* 00000550 */ 0x00, 0x0B, 0x00, 0x3C, 0x00, 0x03, 0x00, 0x20, 0x00, 0x06, 0x00, 0x1A, 0x00, 0x08, 0x00, 0x25, +/* 00000560 */ 0x00, 0x03, 0x00, 0x25, 0x00, 0x0E, 0x00, 0x2A, 0x00, 0x06, 0x00, 0x22, 0x00, 0x0E, 0x00, 0x2A, +/* 00000570 */ 0x00, 0x06, 0x00, 0x1E, 0x00, 0x09, 0x00, 0x36, 0x00, 0x05, 0x00, 0x26, 0x00, 0x29, 0x00, 0x83, +/* 00000580 */ 0x00, 0x09, 0x00, 0x40, 0x00, 0x06, 0x00, 0x30, 0x00, 0x03, 0x00, 0x1A, 0x00, 0x05, 0x00, 0x1B, +/* 00000590 */ 0x00, 0x07, 0x00, 0x0B, 0x00, 0x0E, 0x00, 0x29, 0x00, 0x0C, 0x00, 0x5F, 0x00, 0x07, 0x00, 0x3E, +/* 000005A0 */ 0x00, 0x08, 0x00, 0x2B, 0x00, 0x03, 0x00, 0x22, 0x00, 0x08, 0x00, 0x2A, 0x00, 0x29, 0x00, 0x7A, +/* 000005B0 */ 0x00, 0x03, 0x00, 0x5F, 0xFE, 0x08, 0x00, 0xD1, 0x01, 0x08, 0x00, 0x10, 0x00, 0x00, 0x7F, 0x2C, +/* 000005C0 */ 0x23, 0xC2, 0x43, 0x40, 0x13, 0x00, 0x0E, 0x25, 0xA2, 0x41, 0xB1, 0x00, 0x02, 0xFE, 0xB3, 0x02, +/* 000005D0 */ 0xFE, 0xB3, 0x02, 0x03, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, 0xB3, 0x02, 0xFE, 0x6F, 0x06, 0xFE, +/* 000005E0 */ 0x6F, 0x06, 0x0A, 0x08, 0x0F, 0x53, 0x44, 0x1D, 0x04, 0x01, 0x04, 0x01, 0x05, 0x05, 0x05, 0x05, +/* 000005F0 */ 0x01, 0x0F, 0xB0, 0xFE, 0x1C, 0x01, 0x07, 0x01, 0x00, 0x0C, 0x0B, 0x01, 0x01, 0x01, 0x02, 0xFE, +/* 00000600 */ 0x26, 0x01, 0xB1, 0x0A, 0x4E, 0x0B, 0x4E, 0x0C, 0x4E, 0x0D, 0x4E, 0x0E, 0xA7, 0x10, 0x0A, 0x00, +/* 00000610 */ 0x00, 0x00, 0x14, 0x03, 0x00, 0x10, 0x03, 0x09, 0x0B, 0x00, 0x01, 0x58, 0x01, 0x10, 0x5F, 0x00, +/* 00000620 */ 0x10, 0x01, 0x09, 0x01, 0x01, 0x45, 0x0B, 0x04, 0x43, 0x10, 0x08, 0x45, 0x08, 0x10, 0x15, 0x03, +/* 00000630 */ 0x00, 0x08, 0x08, 0x09, 0x03, 0x00, 0x45, 0x0B, 0x05, 0xA7, 0x10, 0x0A, 0x02, 0x01, 0x00, 0x14, +/* 00000640 */ 0x03, 0x00, 0x10, 0x06, 0x09, 0x06, 0x00, 0x45, 0x00, 0x08, 0x09, 0xD9, 0x00, 0xA7, 0x10, 0x0A, +/* 00000650 */ 0x03, 0x02, 0x00, 0x14, 0x03, 0x00, 0x10, 0x07, 0x09, 0x4C, 0x00, 0x43, 0x10, 0x09, 0x45, 0x09, +/* 00000660 */ 0x10, 0x15, 0x04, 0x00, 0x09, 0x09, 0x0E, 0x05, 0x00, 0x0B, 0xA9, 0x00, 0x09, 0xB7, 0x00, 0x12, +/* 00000670 */ 0x24, 0x00, 0x08, 0x09, 0x14, 0x03, 0x00, 0x08, 0x09, 0x09, 0x25, 0x00, 0x14, 0x03, 0x00, 0x08, +/* 00000680 */ 0x03, 0x09, 0x1D, 0x00, 0x2F, 0x10, 0x06, 0x08, 0x00, 0x00, 0x2F, 0x11, 0x06, 0x09, 0x01, 0x00, +/* 00000690 */ 0x12, 0x03, 0x00, 0x10, 0x11, 0x09, 0x09, 0x00, 0x45, 0x00, 0x08, 0x09, 0x88, 0x00, 0x09, 0x06, +/* 000006A0 */ 0x00, 0x45, 0x00, 0x09, 0x09, 0x7F, 0x00, 0x45, 0x0C, 0x08, 0xA8, 0x10, 0x45, 0x0D, 0x10, 0x45, +/* 000006B0 */ 0x0E, 0x06, 0xED, 0x00, 0xEE, 0x00, 0xA7, 0x10, 0x0A, 0x04, 0x03, 0x00, 0x12, 0x03, 0x00, 0x0E, +/* 000006C0 */ 0x10, 0x09, 0x58, 0x00, 0x98, 0x10, 0x0A, 0x0E, 0x00, 0x00, 0x43, 0x10, 0x10, 0x45, 0x0D, 0x10, +/* 000006D0 */ 0x0E, 0x03, 0x00, 0x0B, 0x09, 0x3F, 0x00, 0x15, 0x03, 0x00, 0x0D, 0x0D, 0x09, 0x0B, 0x00, 0x45, +/* 000006E0 */ 0x0B, 0x05, 0xA9, 0x10, 0x45, 0x0C, 0x10, 0x09, 0x2C, 0x00, 0x11, 0x24, 0x00, 0x0C, 0x0D, 0x14, +/* 000006F0 */ 0x03, 0x00, 0x0C, 0x0D, 0x09, 0x1F, 0x00, 0x14, 0x03, 0x00, 0x0C, 0x03, 0x09, 0x17, 0x00, 0x2F, +/* 00000700 */ 0x10, 0x06, 0x0C, 0x02, 0x00, 0x2F, 0x11, 0x06, 0x0D, 0x03, 0x00, 0x11, 0x03, 0x00, 0x10, 0x11, +/* 00000710 */ 0x09, 0x03, 0x00, 0x45, 0x0C, 0x0D, 0x26, 0x0E, 0x0E, 0x09, 0x98, 0xFF, 0xEF, 0x00, 0x45, 0x00, +/* 00000720 */ 0x0C, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xD1, 0xFE, 0xDD, 0x02, 0xD1, 0xD1, 0xD1, 0xFE, +/* 00000730 */ 0x1D, 0x04, 0x1D, 0x0A, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x2A, 0x00, 0x0B, 0x00, 0x3C, 0x00, 0x03, +/* 00000740 */ 0x00, 0x20, 0x00, 0x06, 0x00, 0x1A, 0x00, 0x08, 0x00, 0x25, 0x00, 0x03, 0x00, 0x25, 0x00, 0x0E, +/* 00000750 */ 0x00, 0x2A, 0x00, 0x06, 0x00, 0x22, 0x00, 0x0E, 0x00, 0x2A, 0x00, 0x06, 0x00, 0x1E, 0x00, 0x09, +/* 00000760 */ 0x00, 0x36, 0x00, 0x05, 0x00, 0x26, 0x00, 0x29, 0x00, 0x83, 0x00, 0x09, 0x00, 0x40, 0x00, 0x06, +/* 00000770 */ 0x00, 0x30, 0x00, 0x03, 0x00, 0x1A, 0x00, 0x05, 0x00, 0x1B, 0x00, 0x07, 0x00, 0x0B, 0x00, 0x0E, +/* 00000780 */ 0x00, 0x29, 0x00, 0x0C, 0x00, 0x5F, 0x00, 0x07, 0x00, 0x3E, 0x00, 0x08, 0x00, 0x2B, 0x00, 0x03, +/* 00000790 */ 0x00, 0x22, 0x00, 0x08, 0x00, 0x2A, 0x00, 0x29, 0x00, 0x7A, 0x00, 0x03, 0x00, 0x5F, 0xFE, 0x08, +/* 000007A0 */ 0x00, 0xD1, 0x01, 0x08, 0x00, 0x10, 0x00, 0x00, 0x00}; + +//Bytecode generated from Object_constructor.js +const char Library_Bytecode_Object_constructor[] = { +/* 00000000 */ 0x43, 0x68, 0x42, 0x63, 0x90, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00000010 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0xFE, 0xD9, 0x02, 0x00, 0xFE, +/* 00000020 */ 0x44, 0x06, 0xFE, 0x44, 0x06, 0x35, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x0E, 0x02, 0x00, +/* 00000030 */ 0x00, 0x8F, 0x05, 0x00, 0x00, 0x0A, 0x6E, 0x00, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, 0x00, +/* 00000040 */ 0x9C, 0x00, 0x00, 0x00, 0x00, 0xB4, 0x00, 0x00, 0x00, 0x01, 0xDE, 0x00, 0x00, 0x00, 0x00, 0x04, +/* 00000050 */ 0x01, 0x00, 0x00, 0x00, 0x1A, 0x01, 0x00, 0x00, 0x00, 0x34, 0x01, 0x00, 0x00, 0x00, 0x46, 0x01, +/* 00000060 */ 0x00, 0x00, 0x00, 0x52, 0x01, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, +/* 00000070 */ 0x6C, 0x00, 0x6F, 0x00, 0x62, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x20, 0x00, 0x63, 0x00, 0x6F, 0x00, +/* 00000080 */ 0x64, 0x00, 0x65, 0x00, 0x00, 0x00, 0x75, 0x00, 0x73, 0x00, 0x65, 0x00, 0x20, 0x00, 0x73, 0x00, +/* 00000090 */ 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x63, 0x00, 0x74, 0x00, 0x00, 0x00, 0x66, 0x00, 0x72, 0x00, +/* 000000A0 */ 0x6F, 0x00, 0x6D, 0x00, 0x45, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x65, 0x00, +/* 000000B0 */ 0x73, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, +/* 000000C0 */ 0x44, 0x00, 0x65, 0x00, 0x66, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x50, 0x00, 0x72, 0x00, +/* 000000D0 */ 0x6F, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x4F, 0x00, +/* 000000E0 */ 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x72, 0x00, +/* 000000F0 */ 0x6F, 0x00, 0x6D, 0x00, 0x45, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x65, 0x00, +/* 00000100 */ 0x73, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x72, 0x00, +/* 00000110 */ 0x61, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, +/* 00000120 */ 0x66, 0x00, 0x69, 0x00, 0x67, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x62, 0x00, 0x6C, 0x00, +/* 00000130 */ 0x65, 0x00, 0x00, 0x00, 0x77, 0x00, 0x72, 0x00, 0x69, 0x00, 0x74, 0x00, 0x61, 0x00, 0x62, 0x00, +/* 00000140 */ 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x76, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x65, 0x00, +/* 00000150 */ 0x00, 0x00, 0x6F, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x00, 0x00, +/* 00000160 */ 0x2B, 0x00, 0x00, 0x00, 0x00, 0x6A, 0x00, 0x00, 0x00, 0x9B, 0x00, 0x00, 0x00, 0xE7, 0x00, 0x00, +/* 00000170 */ 0x00, 0x51, 0x01, 0x00, 0x00, 0xBB, 0x01, 0x00, 0x00, 0xBC, 0x01, 0x00, 0x00, 0xCA, 0x01, 0x00, +/* 00000180 */ 0x00, 0xCB, 0x01, 0x00, 0x00, 0xE3, 0x01, 0x00, 0x00, 0x0B, 0x02, 0x00, 0x00, 0x0C, 0x02, 0x00, +/* 00000190 */ 0x00, 0x4C, 0x02, 0x00, 0x00, 0xA2, 0x02, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, +/* 000001A0 */ 0x00, 0x46, 0x03, 0x00, 0x00, 0x69, 0x03, 0x00, 0x00, 0xA4, 0x03, 0x00, 0x00, 0xE7, 0x03, 0x00, +/* 000001B0 */ 0x00, 0xF1, 0x03, 0x00, 0x00, 0xF2, 0x03, 0x00, 0x00, 0x08, 0x04, 0x00, 0x00, 0x29, 0x04, 0x00, +/* 000001C0 */ 0x00, 0x48, 0x04, 0x00, 0x00, 0x69, 0x04, 0x00, 0x00, 0x86, 0x04, 0x00, 0x00, 0xA4, 0x04, 0x00, +/* 000001D0 */ 0x00, 0xAF, 0x04, 0x00, 0x00, 0xB0, 0x04, 0x00, 0x00, 0xC1, 0x04, 0x00, 0x00, 0xE9, 0x04, 0x00, +/* 000001E0 */ 0x00, 0x28, 0x05, 0x00, 0x00, 0x7A, 0x05, 0x00, 0x00, 0x88, 0x05, 0x00, 0x00, 0x89, 0x05, 0x00, +/* 000001F0 */ 0x00, 0xA5, 0x05, 0x00, 0x00, 0xD2, 0x05, 0x00, 0x00, 0x1C, 0x06, 0x00, 0x00, 0x26, 0x06, 0x00, +/* 00000200 */ 0x00, 0x38, 0x06, 0x00, 0x00, 0x40, 0x06, 0x00, 0x00, 0x44, 0x06, 0x00, 0x00, 0x00, 0x03, 0x73, +/* 00000210 */ 0x0C, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, 0xA8, 0x41, 0xC0, 0x00, 0xFE, 0xD9, 0x02, 0x00, 0xFE, +/* 00000220 */ 0xBC, 0x01, 0xFE, 0xBC, 0x01, 0x01, 0x40, 0xFE, 0x00, 0x90, 0xFE, 0xBC, 0x01, 0xFE, 0x88, 0x04, +/* 00000230 */ 0xFE, 0x88, 0x04, 0x01, 0x04, 0x04, 0x04, 0x04, 0x03, 0x05, 0xFE, 0xDA, 0x02, 0x0A, 0x07, 0xA8, +/* 00000240 */ 0x00, 0xD6, 0x00, 0x04, 0x24, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x00, 0x00, 0x51, 0x02, 0x00, +/* 00000250 */ 0x00, 0x7F, 0x1C, 0x08, 0xC0, 0x03, 0x10, 0x0B, 0x00, 0x08, 0x01, 0xA2, 0x41, 0xD1, 0x00, 0x01, +/* 00000260 */ 0xFE, 0xCC, 0x01, 0xFE, 0xCC, 0x01, 0x01, 0x40, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0xCC, 0x01, +/* 00000270 */ 0xFE, 0x75, 0x04, 0xFE, 0x75, 0x04, 0x05, 0x03, 0x06, 0x04, 0x15, 0x14, 0x01, 0x08, 0x08, 0x08, +/* 00000280 */ 0x08, 0x05, 0x06, 0xFE, 0xDB, 0x02, 0x50, 0x5F, 0x06, 0x03, 0x00, 0x45, 0x04, 0x06, 0x01, 0x58, +/* 00000290 */ 0x01, 0x06, 0x5F, 0x07, 0x04, 0x01, 0x77, 0x07, 0x06, 0x02, 0x01, 0x58, 0x01, 0x06, 0x5F, 0x07, +/* 000002A0 */ 0x04, 0x03, 0x77, 0x07, 0x06, 0x04, 0x01, 0x58, 0x01, 0x06, 0x5F, 0x07, 0x04, 0x05, 0x77, 0x07, +/* 000002B0 */ 0x06, 0x06, 0x6D, 0x06, 0x04, 0x07, 0x07, 0x03, 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x02, 0x00, +/* 000002C0 */ 0x00, 0xD6, 0x00, 0x07, 0x5A, 0x02, 0x07, 0x00, 0x00, 0xF4, 0x03, 0xFF, 0x06, 0x07, 0x00, 0x00, +/* 000002D0 */ 0x00, 0x00, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x59, 0xFE, 0xAA, 0x02, 0xFE, 0xAA, 0x02, 0xFE, 0xB4, +/* 000002E0 */ 0x02, 0xFE, 0xB4, 0x02, 0xFE, 0x8F, 0x02, 0xFE, 0xDC, 0x02, 0xFE, 0x7F, 0x02, 0xFE, 0xE7, 0x01, +/* 000002F0 */ 0x06, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x29, 0x00, 0x0C, 0x00, 0x40, 0x00, 0x0C, 0x00, 0x56, +/* 00000300 */ 0x00, 0x0C, 0x00, 0x61, 0x00, 0x23, 0x00, 0x39, 0x03, 0x00, 0x0E, 0x03, 0x00, 0x00, 0x7F, 0x3C, +/* 00000310 */ 0x0A, 0xC6, 0x53, 0x40, 0x53, 0x00, 0x0F, 0x2D, 0xB2, 0x41, 0xD1, 0x00, 0x02, 0xFE, 0x30, 0x03, +/* 00000320 */ 0xFE, 0x30, 0x03, 0x05, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0x30, 0x03, 0xFE, 0x0D, 0x03, 0xFE, +/* 00000330 */ 0x0D, 0x03, 0x0D, 0x0D, 0x14, 0x09, 0x72, 0x6C, 0x27, 0x02, 0x07, 0x01, 0x01, 0x0E, 0x0E, 0x0E, +/* 00000340 */ 0x0E, 0x01, 0x01, 0x14, 0x98, 0xFE, 0x38, 0x01, 0x07, 0x05, 0xFE, 0xDD, 0x02, 0x06, 0xFE, 0xDE, +/* 00000350 */ 0x02, 0x0B, 0x06, 0xFE, 0xDF, 0x02, 0x06, 0xFE, 0xE0, 0x02, 0x06, 0xFE, 0xE1, 0x02, 0x06, 0xFE, +/* 00000360 */ 0xE2, 0x02, 0x01, 0x00, 0x01, 0x01, 0x08, 0xFE, 0xA3, 0x01, 0x4E, 0x0E, 0x4E, 0x0F, 0x4E, 0x10, +/* 00000370 */ 0x4E, 0x11, 0x14, 0x0A, 0x00, 0x0D, 0x02, 0xA8, 0x15, 0x14, 0x03, 0x00, 0x0D, 0x15, 0x09, 0x1D, +/* 00000380 */ 0x00, 0x01, 0x58, 0x01, 0x16, 0x6D, 0x15, 0x16, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x16, 0x5A, +/* 00000390 */ 0x01, 0x03, 0x00, 0x00, 0xF4, 0x02, 0xFF, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCD, 0x15, +/* 000003A0 */ 0x45, 0x0E, 0x15, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, +/* 000003B0 */ 0x7B, 0x05, 0x15, 0x01, 0x7B, 0x05, 0x15, 0x02, 0x7B, 0x05, 0x15, 0x03, 0xA8, 0x16, 0x7B, 0x16, +/* 000003C0 */ 0x15, 0x04, 0x45, 0x0F, 0x15, 0xA8, 0x15, 0x45, 0x10, 0x15, 0x0D, 0x05, 0x00, 0x0D, 0x0C, 0x01, +/* 000003D0 */ 0x73, 0x01, 0x10, 0x16, 0x44, 0x18, 0x0D, 0x6D, 0x15, 0x18, 0x05, 0x07, 0x01, 0x00, 0x59, 0x00, +/* 000003E0 */ 0x18, 0xF4, 0x01, 0x15, 0x15, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x18, 0x05, 0x00, 0x15, 0x01, +/* 000003F0 */ 0x73, 0x01, 0x8F, 0x13, 0x6D, 0x16, 0x15, 0x06, 0xAD, 0x12, 0xAD, 0x13, 0xE8, 0xDE, 0x00, 0xE7, +/* 00000400 */ 0xA4, 0x00, 0xED, 0x00, 0xEE, 0x00, 0xAD, 0x12, 0xAD, 0x13, 0x07, 0x01, 0x00, 0x59, 0x00, 0x15, +/* 00000410 */ 0xF4, 0x01, 0x17, 0x16, 0x06, 0x00, 0x00, 0x00, 0x02, 0x00, 0x18, 0x05, 0x00, 0x17, 0x01, 0x73, +/* 00000420 */ 0x01, 0x8F, 0x13, 0x5F, 0x18, 0x17, 0x07, 0x0F, 0x75, 0x00, 0x18, 0x5F, 0x17, 0x17, 0x08, 0xAB, +/* 00000430 */ 0x12, 0xAB, 0x13, 0x45, 0x11, 0x17, 0x2A, 0x18, 0x11, 0x15, 0x08, 0x00, 0x18, 0x09, 0x14, 0x03, +/* 00000440 */ 0x00, 0x11, 0x02, 0x09, 0x1D, 0x00, 0x01, 0x58, 0x01, 0x19, 0x6D, 0x18, 0x19, 0x09, 0x07, 0x02, +/* 00000450 */ 0x00, 0x59, 0x00, 0x19, 0x5A, 0x01, 0x03, 0x03, 0x00, 0xF4, 0x02, 0xFF, 0x18, 0x09, 0x00, 0x00, +/* 00000460 */ 0x00, 0x03, 0x00, 0x98, 0x18, 0x11, 0x0A, 0x00, 0x00, 0x45, 0x10, 0x18, 0x98, 0x18, 0x11, 0x0B, +/* 00000470 */ 0x01, 0x00, 0x77, 0x18, 0x0F, 0x0A, 0x01, 0x58, 0x01, 0x19, 0x6D, 0x18, 0x19, 0x0B, 0x07, 0x04, +/* 00000480 */ 0x00, 0x59, 0x00, 0x19, 0x5A, 0x01, 0x0E, 0x04, 0x00, 0x5A, 0x02, 0x10, 0x04, 0x00, 0x5A, 0x03, +/* 00000490 */ 0x0F, 0x04, 0x00, 0xF4, 0x04, 0xFF, 0x18, 0x0B, 0x00, 0x00, 0x00, 0x04, 0x00, 0x09, 0x64, 0xFF, +/* 000004A0 */ 0xEF, 0x00, 0xEB, 0x09, 0x33, 0x00, 0xE9, 0x16, 0x0E, 0x2A, 0x00, 0x12, 0xAE, 0x13, 0xE7, 0x22, +/* 000004B0 */ 0x00, 0x5F, 0x17, 0x15, 0x0C, 0x0C, 0x15, 0x00, 0x17, 0x0C, 0x07, 0x01, 0x00, 0x59, 0x00, 0x15, +/* 000004C0 */ 0xF0, 0x01, 0x17, 0x17, 0x05, 0x00, 0x18, 0x05, 0x00, 0x17, 0x01, 0x73, 0x01, 0x8F, 0x13, 0xEB, +/* 000004D0 */ 0x09, 0x03, 0x00, 0xE9, 0x17, 0xEB, 0x23, 0x16, 0xEB, 0xEB, 0x09, 0x26, 0x00, 0x01, 0x70, 0x01, +/* 000004E0 */ 0x0E, 0x1E, 0x00, 0x13, 0x5F, 0x16, 0x15, 0x0D, 0x0C, 0x15, 0x00, 0x16, 0x0C, 0x07, 0x01, 0x00, +/* 000004F0 */ 0x59, 0x00, 0x15, 0xF0, 0x01, 0x16, 0x16, 0x06, 0x00, 0x18, 0x05, 0x00, 0x16, 0x01, 0x73, 0x01, +/* 00000500 */ 0x8F, 0x13, 0xEA, 0x45, 0x00, 0x0E, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x01, 0x18, 0x00, +/* 00000510 */ 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, +/* 00000520 */ 0x95, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0xFE, 0xAA, 0x02, 0xFE, +/* 00000530 */ 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x97, 0x01, 0x14, 0xFE, 0x07, 0x01, 0x74, +/* 00000540 */ 0xFE, 0x97, 0x01, 0xFE, 0xB4, 0x02, 0xFE, 0x97, 0x01, 0xFE, 0xDC, 0x02, 0xFE, 0x35, 0x01, 0xFE, +/* 00000550 */ 0x35, 0x01, 0xFE, 0x71, 0x03, 0x0E, 0x08, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x3F, 0x00, 0x1D, 0x00, +/* 00000560 */ 0x4A, 0x00, 0x05, 0x00, 0x16, 0x00, 0x22, 0x00, 0xA8, 0x00, 0x05, 0x00, 0x11, 0x00, 0x3C, 0x00, +/* 00000570 */ 0x05, 0x00, 0x30, 0x00, 0x27, 0x00, 0x10, 0x00, 0x43, 0x00, 0x1D, 0x00, 0x5D, 0x00, 0x09, 0x00, +/* 00000580 */ 0x1C, 0x00, 0x0A, 0x00, 0x2D, 0x00, 0x8D, 0x00, 0x50, 0x00, 0x08, 0x00, 0x0E, 0x00, 0x00, 0x00}; + +#endif + +#ifdef ENABLE_INTL_OBJECT + +//Bytecode generated from Intl.js +const char Library_Bytecode_Intl[] = { +/* 00000000 */ 0x43, 0x68, 0x42, 0x63, 0x1C, 0xD0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00000010 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0xFE, 0xD9, 0x02, 0x00, 0xFF, +/* 00000020 */ 0x2E, 0xB2, 0x02, 0x00, 0xFF, 0x2E, 0xB2, 0x02, 0x00, 0x39, 0x00, 0x00, 0x00, 0xC8, 0x48, 0x00, +/* 00000030 */ 0x00, 0x38, 0x83, 0x00, 0x00, 0x1B, 0xD0, 0x01, 0x00, 0xFE, 0x2C, 0x02, 0x1E, 0x0B, 0x00, 0x00, +/* 00000040 */ 0x00, 0x36, 0x0B, 0x00, 0x00, 0x00, 0x4C, 0x0B, 0x00, 0x00, 0x01, 0x60, 0x0B, 0x00, 0x00, 0x01, +/* 00000050 */ 0x7A, 0x0B, 0x00, 0x00, 0x01, 0x98, 0x0B, 0x00, 0x00, 0x01, 0xBA, 0x0B, 0x00, 0x00, 0x01, 0xD2, +/* 00000060 */ 0x0B, 0x00, 0x00, 0x01, 0xFC, 0x0B, 0x00, 0x00, 0x01, 0x22, 0x0C, 0x00, 0x00, 0x01, 0x56, 0x0C, +/* 00000070 */ 0x00, 0x00, 0x01, 0x90, 0x0C, 0x00, 0x00, 0x01, 0xBC, 0x0C, 0x00, 0x00, 0x01, 0xE6, 0x0C, 0x00, +/* 00000080 */ 0x00, 0x01, 0x10, 0x0D, 0x00, 0x00, 0x01, 0x3A, 0x0D, 0x00, 0x00, 0x01, 0x5E, 0x0D, 0x00, 0x00, +/* 00000090 */ 0x01, 0x88, 0x0D, 0x00, 0x00, 0x01, 0xB0, 0x0D, 0x00, 0x00, 0x01, 0xC0, 0x0D, 0x00, 0x00, 0x01, +/* 000000A0 */ 0xEC, 0x0D, 0x00, 0x00, 0x01, 0x20, 0x0E, 0x00, 0x00, 0x01, 0x54, 0x0E, 0x00, 0x00, 0x01, 0x78, +/* 000000B0 */ 0x0E, 0x00, 0x00, 0x01, 0x9C, 0x0E, 0x00, 0x00, 0x01, 0xAE, 0x0E, 0x00, 0x00, 0x01, 0xD0, 0x0E, +/* 000000C0 */ 0x00, 0x00, 0x01, 0xF8, 0x0E, 0x00, 0x00, 0x01, 0x20, 0x0F, 0x00, 0x00, 0x01, 0x3E, 0x0F, 0x00, +/* 000000D0 */ 0x00, 0x01, 0x6A, 0x0F, 0x00, 0x00, 0x01, 0x9E, 0x0F, 0x00, 0x00, 0x01, 0xDA, 0x0F, 0x00, 0x00, +/* 000000E0 */ 0x01, 0x1A, 0x10, 0x00, 0x00, 0x01, 0x68, 0x10, 0x00, 0x00, 0x01, 0x90, 0x10, 0x00, 0x00, 0x01, +/* 000000F0 */ 0xA2, 0x10, 0x00, 0x00, 0x01, 0xC8, 0x10, 0x00, 0x00, 0x01, 0xDC, 0x10, 0x00, 0x00, 0x01, 0xE6, +/* 00000100 */ 0x10, 0x00, 0x00, 0x01, 0xEA, 0x10, 0x00, 0x00, 0x00, 0xF2, 0x10, 0x00, 0x00, 0x00, 0xFE, 0x10, +/* 00000110 */ 0x00, 0x00, 0x00, 0x06, 0x11, 0x00, 0x00, 0x00, 0x0E, 0x11, 0x00, 0x00, 0x00, 0x26, 0x11, 0x00, +/* 00000120 */ 0x00, 0x00, 0x3E, 0x11, 0x00, 0x00, 0x00, 0x4E, 0x11, 0x00, 0x00, 0x00, 0x5A, 0x11, 0x00, 0x00, +/* 00000130 */ 0x00, 0x6E, 0x11, 0x00, 0x00, 0x01, 0x8A, 0x11, 0x00, 0x00, 0x00, 0x96, 0x11, 0x00, 0x00, 0x00, +/* 00000140 */ 0xA4, 0x11, 0x00, 0x00, 0x00, 0xB4, 0x11, 0x00, 0x00, 0x00, 0xBE, 0x11, 0x00, 0x00, 0x01, 0xD8, +/* 00000150 */ 0x11, 0x00, 0x00, 0x00, 0xE0, 0x11, 0x00, 0x00, 0x00, 0xEE, 0x11, 0x00, 0x00, 0x00, 0xFA, 0x11, +/* 00000160 */ 0x00, 0x00, 0x00, 0x08, 0x12, 0x00, 0x00, 0x00, 0x16, 0x12, 0x00, 0x00, 0x01, 0x24, 0x12, 0x00, +/* 00000170 */ 0x00, 0x00, 0x2E, 0x12, 0x00, 0x00, 0x00, 0x4C, 0x12, 0x00, 0x00, 0x00, 0x6A, 0x12, 0x00, 0x00, +/* 00000180 */ 0x00, 0x84, 0x12, 0x00, 0x00, 0x00, 0x92, 0x12, 0x00, 0x00, 0x00, 0xB0, 0x12, 0x00, 0x00, 0x00, +/* 00000190 */ 0xC2, 0x12, 0x00, 0x00, 0x00, 0xCE, 0x12, 0x00, 0x00, 0x00, 0xDE, 0x12, 0x00, 0x00, 0x00, 0xE8, +/* 000001A0 */ 0x12, 0x00, 0x00, 0x00, 0xF4, 0x12, 0x00, 0x00, 0x01, 0x06, 0x13, 0x00, 0x00, 0x01, 0x18, 0x13, +/* 000001B0 */ 0x00, 0x00, 0x01, 0x2A, 0x13, 0x00, 0x00, 0x01, 0x4C, 0x13, 0x00, 0x00, 0x01, 0x60, 0x13, 0x00, +/* 000001C0 */ 0x00, 0x01, 0x72, 0x13, 0x00, 0x00, 0x00, 0x7C, 0x13, 0x00, 0x00, 0x00, 0xAE, 0x13, 0x00, 0x00, +/* 000001D0 */ 0x00, 0xD6, 0x13, 0x00, 0x00, 0x00, 0xE2, 0x13, 0x00, 0x00, 0x00, 0xF4, 0x13, 0x00, 0x00, 0x00, +/* 000001E0 */ 0x0A, 0x14, 0x00, 0x00, 0x00, 0x24, 0x14, 0x00, 0x00, 0x00, 0x36, 0x14, 0x00, 0x00, 0x00, 0x50, +/* 000001F0 */ 0x14, 0x00, 0x00, 0x00, 0x6E, 0x14, 0x00, 0x00, 0x00, 0x86, 0x14, 0x00, 0x00, 0x00, 0x96, 0x14, +/* 00000200 */ 0x00, 0x00, 0x00, 0xA2, 0x14, 0x00, 0x00, 0x00, 0xE4, 0x14, 0x00, 0x00, 0x00, 0x2E, 0x15, 0x00, +/* 00000210 */ 0x00, 0x00, 0x7C, 0x15, 0x00, 0x00, 0x00, 0x86, 0x15, 0x00, 0x00, 0x00, 0xAC, 0x15, 0x00, 0x00, +/* 00000220 */ 0x01, 0xB8, 0x15, 0x00, 0x00, 0x01, 0xC2, 0x15, 0x00, 0x00, 0x00, 0xD0, 0x15, 0x00, 0x00, 0x01, +/* 00000230 */ 0xDC, 0x15, 0x00, 0x00, 0x01, 0xE8, 0x15, 0x00, 0x00, 0x01, 0xF8, 0x15, 0x00, 0x00, 0x00, 0x06, +/* 00000240 */ 0x16, 0x00, 0x00, 0x01, 0x12, 0x16, 0x00, 0x00, 0x01, 0x20, 0x16, 0x00, 0x00, 0x00, 0x2E, 0x16, +/* 00000250 */ 0x00, 0x00, 0x01, 0x3A, 0x16, 0x00, 0x00, 0x01, 0x4C, 0x16, 0x00, 0x00, 0x00, 0x5A, 0x16, 0x00, +/* 00000260 */ 0x00, 0x01, 0x68, 0x16, 0x00, 0x00, 0x00, 0x6A, 0x16, 0x00, 0x00, 0x01, 0x76, 0x16, 0x00, 0x00, +/* 00000270 */ 0x01, 0x82, 0x16, 0x00, 0x00, 0x01, 0x8E, 0x16, 0x00, 0x00, 0x01, 0x9C, 0x16, 0x00, 0x00, 0x01, +/* 00000280 */ 0xA8, 0x16, 0x00, 0x00, 0x01, 0xBC, 0x16, 0x00, 0x00, 0x01, 0xE0, 0x16, 0x00, 0x00, 0x01, 0x06, +/* 00000290 */ 0x17, 0x00, 0x00, 0x01, 0x1A, 0x17, 0x00, 0x00, 0x01, 0x4C, 0x17, 0x00, 0x00, 0x01, 0x6C, 0x17, +/* 000002A0 */ 0x00, 0x00, 0x01, 0x8E, 0x17, 0x00, 0x00, 0x01, 0xB4, 0x17, 0x00, 0x00, 0x01, 0xF0, 0x17, 0x00, +/* 000002B0 */ 0x00, 0x01, 0x18, 0x18, 0x00, 0x00, 0x01, 0x34, 0x18, 0x00, 0x00, 0x01, 0x52, 0x18, 0x00, 0x00, +/* 000002C0 */ 0x01, 0x7E, 0x18, 0x00, 0x00, 0x01, 0x9A, 0x18, 0x00, 0x00, 0x01, 0xBA, 0x18, 0x00, 0x00, 0x01, +/* 000002D0 */ 0xDC, 0x18, 0x00, 0x00, 0x01, 0xF6, 0x18, 0x00, 0x00, 0x01, 0x28, 0x19, 0x00, 0x00, 0x01, 0x66, +/* 000002E0 */ 0x19, 0x00, 0x00, 0x01, 0x94, 0x19, 0x00, 0x00, 0x01, 0xC2, 0x19, 0x00, 0x00, 0x01, 0xF2, 0x19, +/* 000002F0 */ 0x00, 0x00, 0x01, 0x2A, 0x1A, 0x00, 0x00, 0x01, 0x4C, 0x1A, 0x00, 0x00, 0x01, 0x78, 0x1A, 0x00, +/* 00000300 */ 0x00, 0x01, 0xA2, 0x1A, 0x00, 0x00, 0x01, 0xCC, 0x1A, 0x00, 0x00, 0x01, 0xFC, 0x1A, 0x00, 0x00, +/* 00000310 */ 0x01, 0x2C, 0x1B, 0x00, 0x00, 0x01, 0x4E, 0x1B, 0x00, 0x00, 0x01, 0x6E, 0x1B, 0x00, 0x00, 0x01, +/* 00000320 */ 0x86, 0x1B, 0x00, 0x00, 0x01, 0xC8, 0x1B, 0x00, 0x00, 0x01, 0x00, 0x1C, 0x00, 0x00, 0x01, 0x4A, +/* 00000330 */ 0x1C, 0x00, 0x00, 0x01, 0x8A, 0x1C, 0x00, 0x00, 0x01, 0xD8, 0x1C, 0x00, 0x00, 0x01, 0x1C, 0x1D, +/* 00000340 */ 0x00, 0x00, 0x01, 0x4E, 0x1D, 0x00, 0x00, 0x01, 0x7A, 0x1D, 0x00, 0x00, 0x01, 0x7E, 0x1D, 0x00, +/* 00000350 */ 0x00, 0x01, 0x8C, 0x1D, 0x00, 0x00, 0x00, 0x94, 0x1D, 0x00, 0x00, 0x00, 0x9C, 0x1D, 0x00, 0x00, +/* 00000360 */ 0x00, 0xB8, 0x1D, 0x00, 0x00, 0x00, 0xD4, 0x1D, 0x00, 0x00, 0x00, 0xE8, 0x1D, 0x00, 0x00, 0x00, +/* 00000370 */ 0xF8, 0x1D, 0x00, 0x00, 0x00, 0x10, 0x1E, 0x00, 0x00, 0x00, 0x30, 0x1E, 0x00, 0x00, 0x00, 0x40, +/* 00000380 */ 0x1E, 0x00, 0x00, 0x00, 0x52, 0x1E, 0x00, 0x00, 0x00, 0x66, 0x1E, 0x00, 0x00, 0x00, 0x74, 0x1E, +/* 00000390 */ 0x00, 0x00, 0x00, 0x92, 0x1E, 0x00, 0x00, 0x00, 0x9E, 0x1E, 0x00, 0x00, 0x00, 0xB0, 0x1E, 0x00, +/* 000003A0 */ 0x00, 0x00, 0xC0, 0x1E, 0x00, 0x00, 0x00, 0xD2, 0x1E, 0x00, 0x00, 0x00, 0xE4, 0x1E, 0x00, 0x00, +/* 000003B0 */ 0x00, 0xF6, 0x1E, 0x00, 0x00, 0x01, 0x02, 0x1F, 0x00, 0x00, 0x00, 0x24, 0x1F, 0x00, 0x00, 0x00, +/* 000003C0 */ 0x46, 0x1F, 0x00, 0x00, 0x00, 0x58, 0x1F, 0x00, 0x00, 0x00, 0x7A, 0x1F, 0x00, 0x00, 0x00, 0x8A, +/* 000003D0 */ 0x1F, 0x00, 0x00, 0x00, 0x9E, 0x1F, 0x00, 0x00, 0x00, 0xAC, 0x1F, 0x00, 0x00, 0x00, 0xBC, 0x1F, +/* 000003E0 */ 0x00, 0x00, 0x00, 0xC2, 0x1F, 0x00, 0x00, 0x00, 0xD0, 0x1F, 0x00, 0x00, 0x00, 0xD4, 0x1F, 0x00, +/* 000003F0 */ 0x00, 0x01, 0xF6, 0x1F, 0x00, 0x00, 0x01, 0x0A, 0x20, 0x00, 0x00, 0x01, 0x0E, 0x20, 0x00, 0x00, +/* 00000400 */ 0x01, 0x26, 0x20, 0x00, 0x00, 0x01, 0x34, 0x20, 0x00, 0x00, 0x01, 0x5A, 0x20, 0x00, 0x00, 0x00, +/* 00000410 */ 0x68, 0x20, 0x00, 0x00, 0x01, 0x7E, 0x20, 0x00, 0x00, 0x00, 0x84, 0x20, 0x00, 0x00, 0x00, 0x8C, +/* 00000420 */ 0x20, 0x00, 0x00, 0x01, 0xA8, 0x20, 0x00, 0x00, 0x00, 0xB2, 0x20, 0x00, 0x00, 0x00, 0xC2, 0x20, +/* 00000430 */ 0x00, 0x00, 0x00, 0xD0, 0x20, 0x00, 0x00, 0x00, 0xDE, 0x20, 0x00, 0x00, 0x00, 0xE4, 0x20, 0x00, +/* 00000440 */ 0x00, 0x00, 0xEA, 0x20, 0x00, 0x00, 0x00, 0xF4, 0x20, 0x00, 0x00, 0x00, 0xF8, 0x20, 0x00, 0x00, +/* 00000450 */ 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x04, 0x21, 0x00, 0x00, 0x00, 0x1A, 0x21, 0x00, 0x00, 0x01, +/* 00000460 */ 0x40, 0x21, 0x00, 0x00, 0x00, 0x4C, 0x21, 0x00, 0x00, 0x00, 0x58, 0x21, 0x00, 0x00, 0x00, 0x60, +/* 00000470 */ 0x21, 0x00, 0x00, 0x00, 0x64, 0x21, 0x00, 0x00, 0x00, 0x68, 0x21, 0x00, 0x00, 0x00, 0x1C, 0x22, +/* 00000480 */ 0x00, 0x00, 0x00, 0xB8, 0x22, 0x00, 0x00, 0x00, 0x3E, 0x23, 0x00, 0x00, 0x00, 0x4A, 0x23, 0x00, +/* 00000490 */ 0x00, 0x00, 0x52, 0x23, 0x00, 0x00, 0x00, 0x68, 0x23, 0x00, 0x00, 0x00, 0x82, 0x23, 0x00, 0x00, +/* 000004A0 */ 0x00, 0x9C, 0x23, 0x00, 0x00, 0x00, 0xA6, 0x23, 0x00, 0x00, 0x00, 0xBC, 0x23, 0x00, 0x00, 0x00, +/* 000004B0 */ 0xCA, 0x23, 0x00, 0x00, 0x00, 0xD8, 0x23, 0x00, 0x00, 0x00, 0xE2, 0x23, 0x00, 0x00, 0x00, 0xF0, +/* 000004C0 */ 0x23, 0x00, 0x00, 0x00, 0x04, 0x24, 0x00, 0x00, 0x00, 0x1E, 0x24, 0x00, 0x00, 0x00, 0x2A, 0x24, +/* 000004D0 */ 0x00, 0x00, 0x00, 0x38, 0x24, 0x00, 0x00, 0x00, 0x3E, 0x24, 0x00, 0x00, 0x00, 0x4A, 0x24, 0x00, +/* 000004E0 */ 0x00, 0x00, 0x52, 0x24, 0x00, 0x00, 0x00, 0x62, 0x24, 0x00, 0x00, 0x00, 0x6E, 0x24, 0x00, 0x00, +/* 000004F0 */ 0x00, 0x7E, 0x24, 0x00, 0x00, 0x00, 0x8A, 0x24, 0x00, 0x00, 0x00, 0x94, 0x24, 0x00, 0x00, 0x00, +/* 00000500 */ 0x9A, 0x24, 0x00, 0x00, 0x00, 0x9E, 0x24, 0x00, 0x00, 0x00, 0xA2, 0x24, 0x00, 0x00, 0x01, 0xA6, +/* 00000510 */ 0x24, 0x00, 0x00, 0x01, 0xAA, 0x24, 0x00, 0x00, 0x01, 0xBC, 0x24, 0x00, 0x00, 0x01, 0xCA, 0x24, +/* 00000520 */ 0x00, 0x00, 0x01, 0xD8, 0x24, 0x00, 0x00, 0x01, 0xEA, 0x24, 0x00, 0x00, 0x01, 0x00, 0x25, 0x00, +/* 00000530 */ 0x00, 0x00, 0x14, 0x25, 0x00, 0x00, 0x00, 0x22, 0x25, 0x00, 0x00, 0x01, 0x46, 0x25, 0x00, 0x00, +/* 00000540 */ 0x01, 0x54, 0x25, 0x00, 0x00, 0x00, 0x7E, 0x25, 0x00, 0x00, 0x00, 0xAA, 0x25, 0x00, 0x00, 0x00, +/* 00000550 */ 0xD6, 0x25, 0x00, 0x00, 0x00, 0x08, 0x26, 0x00, 0x00, 0x00, 0x3A, 0x26, 0x00, 0x00, 0x00, 0x4C, +/* 00000560 */ 0x26, 0x00, 0x00, 0x00, 0x68, 0x26, 0x00, 0x00, 0x00, 0x76, 0x26, 0x00, 0x00, 0x01, 0x90, 0x26, +/* 00000570 */ 0x00, 0x00, 0x01, 0x9A, 0x26, 0x00, 0x00, 0x01, 0xAC, 0x26, 0x00, 0x00, 0x01, 0xD2, 0x26, 0x00, +/* 00000580 */ 0x00, 0x01, 0x02, 0x27, 0x00, 0x00, 0x01, 0x26, 0x27, 0x00, 0x00, 0x00, 0x34, 0x27, 0x00, 0x00, +/* 00000590 */ 0x00, 0x72, 0x27, 0x00, 0x00, 0x00, 0x8E, 0x27, 0x00, 0x00, 0x00, 0xCE, 0x27, 0x00, 0x00, 0x00, +/* 000005A0 */ 0xE2, 0x27, 0x00, 0x00, 0x00, 0xFA, 0x27, 0x00, 0x00, 0x00, 0x1A, 0x28, 0x00, 0x00, 0x00, 0x6A, +/* 000005B0 */ 0x28, 0x00, 0x00, 0x00, 0x82, 0x28, 0x00, 0x00, 0x00, 0x92, 0x28, 0x00, 0x00, 0x00, 0x9E, 0x28, +/* 000005C0 */ 0x00, 0x00, 0x00, 0xA8, 0x28, 0x00, 0x00, 0x00, 0xB6, 0x28, 0x00, 0x00, 0x00, 0xBC, 0x28, 0x00, +/* 000005D0 */ 0x00, 0x00, 0xC2, 0x28, 0x00, 0x00, 0x00, 0xC8, 0x28, 0x00, 0x00, 0x00, 0xD8, 0x28, 0x00, 0x00, +/* 000005E0 */ 0x01, 0xEC, 0x28, 0x00, 0x00, 0x00, 0xF8, 0x28, 0x00, 0x00, 0x00, 0x04, 0x29, 0x00, 0x00, 0x00, +/* 000005F0 */ 0x10, 0x29, 0x00, 0x00, 0x00, 0x20, 0x29, 0x00, 0x00, 0x00, 0x38, 0x29, 0x00, 0x00, 0x00, 0x42, +/* 00000600 */ 0x29, 0x00, 0x00, 0x00, 0x50, 0x29, 0x00, 0x00, 0x00, 0x5A, 0x29, 0x00, 0x00, 0x00, 0x6A, 0x29, +/* 00000610 */ 0x00, 0x00, 0x00, 0x8E, 0x29, 0x00, 0x00, 0x01, 0x9E, 0x29, 0x00, 0x00, 0x01, 0xB2, 0x29, 0x00, +/* 00000620 */ 0x00, 0x01, 0xDA, 0x29, 0x00, 0x00, 0x00, 0xF6, 0x29, 0x00, 0x00, 0x01, 0x10, 0x2A, 0x00, 0x00, +/* 00000630 */ 0x00, 0x46, 0x2A, 0x00, 0x00, 0x00, 0x8C, 0x2A, 0x00, 0x00, 0x01, 0xBA, 0x2A, 0x00, 0x00, 0x01, +/* 00000640 */ 0xE6, 0x2A, 0x00, 0x00, 0x01, 0x0C, 0x2B, 0x00, 0x00, 0x00, 0x1A, 0x2B, 0x00, 0x00, 0x00, 0x5A, +/* 00000650 */ 0x2B, 0x00, 0x00, 0x00, 0x7E, 0x2B, 0x00, 0x00, 0x00, 0xC4, 0x2B, 0x00, 0x00, 0x00, 0x18, 0x2C, +/* 00000660 */ 0x00, 0x00, 0x00, 0x70, 0x2C, 0x00, 0x00, 0x00, 0x86, 0x2C, 0x00, 0x00, 0x00, 0x94, 0x2C, 0x00, +/* 00000670 */ 0x00, 0x00, 0xB0, 0x2C, 0x00, 0x00, 0x00, 0xB6, 0x2C, 0x00, 0x00, 0x01, 0xC2, 0x2C, 0x00, 0x00, +/* 00000680 */ 0x00, 0xD2, 0x2C, 0x00, 0x00, 0x00, 0xE2, 0x2C, 0x00, 0x00, 0x00, 0xF4, 0x2C, 0x00, 0x00, 0x00, +/* 00000690 */ 0x14, 0x2D, 0x00, 0x00, 0x00, 0x1E, 0x2D, 0x00, 0x00, 0x00, 0x2C, 0x2D, 0x00, 0x00, 0x00, 0x44, +/* 000006A0 */ 0x2D, 0x00, 0x00, 0x01, 0x74, 0x2D, 0x00, 0x00, 0x00, 0x92, 0x2D, 0x00, 0x00, 0x00, 0xCE, 0x2D, +/* 000006B0 */ 0x00, 0x00, 0x00, 0x18, 0x2E, 0x00, 0x00, 0x00, 0x38, 0x2E, 0x00, 0x00, 0x01, 0x50, 0x2E, 0x00, +/* 000006C0 */ 0x00, 0x01, 0xA2, 0x2E, 0x00, 0x00, 0x01, 0xC8, 0x2E, 0x00, 0x00, 0x01, 0xF2, 0x2E, 0x00, 0x00, +/* 000006D0 */ 0x01, 0x24, 0x2F, 0x00, 0x00, 0x01, 0x48, 0x2F, 0x00, 0x00, 0x01, 0x9A, 0x2F, 0x00, 0x00, 0x01, +/* 000006E0 */ 0xCA, 0x2F, 0x00, 0x00, 0x01, 0xF4, 0x2F, 0x00, 0x00, 0x00, 0xFE, 0x2F, 0x00, 0x00, 0x01, 0x0C, +/* 000006F0 */ 0x30, 0x00, 0x00, 0x01, 0x18, 0x30, 0x00, 0x00, 0x01, 0x22, 0x30, 0x00, 0x00, 0x01, 0x32, 0x30, +/* 00000700 */ 0x00, 0x00, 0x00, 0x42, 0x30, 0x00, 0x00, 0x00, 0x4A, 0x30, 0x00, 0x00, 0x00, 0x54, 0x30, 0x00, +/* 00000710 */ 0x00, 0x00, 0x60, 0x30, 0x00, 0x00, 0x00, 0x68, 0x30, 0x00, 0x00, 0x00, 0x72, 0x30, 0x00, 0x00, +/* 00000720 */ 0x00, 0x80, 0x30, 0x00, 0x00, 0x00, 0x8E, 0x30, 0x00, 0x00, 0x00, 0xA8, 0x30, 0x00, 0x00, 0x00, +/* 00000730 */ 0xCE, 0x30, 0x00, 0x00, 0x00, 0xF4, 0x30, 0x00, 0x00, 0x00, 0x30, 0x31, 0x00, 0x00, 0x00, 0x38, +/* 00000740 */ 0x31, 0x00, 0x00, 0x00, 0x40, 0x31, 0x00, 0x00, 0x00, 0x84, 0x31, 0x00, 0x00, 0x00, 0x8E, 0x31, +/* 00000750 */ 0x00, 0x00, 0x00, 0xD2, 0x31, 0x00, 0x00, 0x00, 0xDC, 0x31, 0x00, 0x00, 0x00, 0x04, 0x32, 0x00, +/* 00000760 */ 0x00, 0x00, 0x4E, 0x32, 0x00, 0x00, 0x00, 0xA6, 0x32, 0x00, 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, +/* 00000770 */ 0x01, 0x22, 0x33, 0x00, 0x00, 0x01, 0x42, 0x33, 0x00, 0x00, 0x01, 0x6E, 0x33, 0x00, 0x00, 0x01, +/* 00000780 */ 0x9A, 0x33, 0x00, 0x00, 0x01, 0xC2, 0x33, 0x00, 0x00, 0x01, 0xEA, 0x33, 0x00, 0x00, 0x00, 0xEE, +/* 00000790 */ 0x33, 0x00, 0x00, 0x01, 0xF2, 0x33, 0x00, 0x00, 0x01, 0xF6, 0x33, 0x00, 0x00, 0x01, 0xFA, 0x33, +/* 000007A0 */ 0x00, 0x00, 0x01, 0xFE, 0x33, 0x00, 0x00, 0x00, 0x02, 0x34, 0x00, 0x00, 0x00, 0x10, 0x34, 0x00, +/* 000007B0 */ 0x00, 0x01, 0x14, 0x34, 0x00, 0x00, 0x01, 0x22, 0x34, 0x00, 0x00, 0x01, 0x26, 0x34, 0x00, 0x00, +/* 000007C0 */ 0x01, 0x2A, 0x34, 0x00, 0x00, 0x01, 0x2E, 0x34, 0x00, 0x00, 0x01, 0x32, 0x34, 0x00, 0x00, 0x01, +/* 000007D0 */ 0x36, 0x34, 0x00, 0x00, 0x01, 0x3A, 0x34, 0x00, 0x00, 0x01, 0x3E, 0x34, 0x00, 0x00, 0x01, 0x42, +/* 000007E0 */ 0x34, 0x00, 0x00, 0x01, 0x46, 0x34, 0x00, 0x00, 0x01, 0x4A, 0x34, 0x00, 0x00, 0x01, 0x4E, 0x34, +/* 000007F0 */ 0x00, 0x00, 0x01, 0x52, 0x34, 0x00, 0x00, 0x01, 0x56, 0x34, 0x00, 0x00, 0x01, 0x5A, 0x34, 0x00, +/* 00000800 */ 0x00, 0x01, 0x5E, 0x34, 0x00, 0x00, 0x01, 0x62, 0x34, 0x00, 0x00, 0x01, 0x66, 0x34, 0x00, 0x00, +/* 00000810 */ 0x01, 0x6A, 0x34, 0x00, 0x00, 0x01, 0x6E, 0x34, 0x00, 0x00, 0x01, 0x72, 0x34, 0x00, 0x00, 0x01, +/* 00000820 */ 0x76, 0x34, 0x00, 0x00, 0x01, 0x7E, 0x34, 0x00, 0x00, 0x01, 0x86, 0x34, 0x00, 0x00, 0x01, 0x8E, +/* 00000830 */ 0x34, 0x00, 0x00, 0x01, 0x96, 0x34, 0x00, 0x00, 0x00, 0x9A, 0x34, 0x00, 0x00, 0x00, 0x9E, 0x34, +/* 00000840 */ 0x00, 0x00, 0x01, 0xB2, 0x34, 0x00, 0x00, 0x00, 0xB8, 0x34, 0x00, 0x00, 0x00, 0xBE, 0x34, 0x00, +/* 00000850 */ 0x00, 0x00, 0xD6, 0x34, 0x00, 0x00, 0x00, 0xE8, 0x34, 0x00, 0x00, 0x00, 0x36, 0x35, 0x00, 0x00, +/* 00000860 */ 0x00, 0x46, 0x35, 0x00, 0x00, 0x00, 0x56, 0x35, 0x00, 0x00, 0x00, 0x5E, 0x35, 0x00, 0x00, 0x00, +/* 00000870 */ 0x7A, 0x35, 0x00, 0x00, 0x00, 0x86, 0x35, 0x00, 0x00, 0x01, 0xBA, 0x35, 0x00, 0x00, 0x01, 0xD4, +/* 00000880 */ 0x35, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x1A, 0x36, 0x00, 0x00, 0x01, 0x2A, 0x36, +/* 00000890 */ 0x00, 0x00, 0x01, 0x3A, 0x36, 0x00, 0x00, 0x01, 0x4E, 0x36, 0x00, 0x00, 0x00, 0x8C, 0x36, 0x00, +/* 000008A0 */ 0x00, 0x00, 0xD2, 0x36, 0x00, 0x00, 0x00, 0x18, 0x37, 0x00, 0x00, 0x00, 0x58, 0x37, 0x00, 0x00, +/* 000008B0 */ 0x00, 0xA6, 0x37, 0x00, 0x00, 0x00, 0xB8, 0x37, 0x00, 0x00, 0x01, 0xE4, 0x37, 0x00, 0x00, 0x01, +/* 000008C0 */ 0x00, 0x38, 0x00, 0x00, 0x01, 0x2A, 0x38, 0x00, 0x00, 0x00, 0x4C, 0x38, 0x00, 0x00, 0x00, 0x94, +/* 000008D0 */ 0x38, 0x00, 0x00, 0x00, 0xD8, 0x38, 0x00, 0x00, 0x00, 0xE6, 0x38, 0x00, 0x00, 0x00, 0x3C, 0x39, +/* 000008E0 */ 0x00, 0x00, 0x00, 0x46, 0x39, 0x00, 0x00, 0x00, 0x58, 0x39, 0x00, 0x00, 0x00, 0x68, 0x39, 0x00, +/* 000008F0 */ 0x00, 0x01, 0x8A, 0x39, 0x00, 0x00, 0x01, 0xB8, 0x39, 0x00, 0x00, 0x00, 0xC4, 0x39, 0x00, 0x00, +/* 00000900 */ 0x01, 0xCA, 0x39, 0x00, 0x00, 0x00, 0x24, 0x3A, 0x00, 0x00, 0x00, 0x4E, 0x3A, 0x00, 0x00, 0x00, +/* 00000910 */ 0x76, 0x3A, 0x00, 0x00, 0x01, 0x88, 0x3A, 0x00, 0x00, 0x01, 0xA8, 0x3A, 0x00, 0x00, 0x00, 0xB0, +/* 00000920 */ 0x3A, 0x00, 0x00, 0x00, 0xC0, 0x3A, 0x00, 0x00, 0x00, 0xEA, 0x3A, 0x00, 0x00, 0x00, 0x06, 0x3B, +/* 00000930 */ 0x00, 0x00, 0x00, 0x24, 0x3B, 0x00, 0x00, 0x00, 0x38, 0x3B, 0x00, 0x00, 0x01, 0x4A, 0x3B, 0x00, +/* 00000940 */ 0x00, 0x01, 0x62, 0x3B, 0x00, 0x00, 0x00, 0x6C, 0x3B, 0x00, 0x00, 0x01, 0x76, 0x3B, 0x00, 0x00, +/* 00000950 */ 0x00, 0x84, 0x3B, 0x00, 0x00, 0x01, 0x90, 0x3B, 0x00, 0x00, 0x01, 0x9E, 0x3B, 0x00, 0x00, 0x01, +/* 00000960 */ 0xBA, 0x3B, 0x00, 0x00, 0x00, 0xE8, 0x3B, 0x00, 0x00, 0x00, 0x34, 0x3C, 0x00, 0x00, 0x00, 0x88, +/* 00000970 */ 0x3C, 0x00, 0x00, 0x00, 0xE0, 0x3C, 0x00, 0x00, 0x00, 0x1C, 0x3D, 0x00, 0x00, 0x01, 0x2E, 0x3D, +/* 00000980 */ 0x00, 0x00, 0x01, 0x60, 0x3D, 0x00, 0x00, 0x01, 0x90, 0x3D, 0x00, 0x00, 0x00, 0x9A, 0x3D, 0x00, +/* 00000990 */ 0x00, 0x00, 0xEC, 0x3D, 0x00, 0x00, 0x00, 0x0A, 0x3E, 0x00, 0x00, 0x00, 0x42, 0x3E, 0x00, 0x00, +/* 000009A0 */ 0x00, 0x50, 0x3E, 0x00, 0x00, 0x00, 0x80, 0x3E, 0x00, 0x00, 0x00, 0x84, 0x3E, 0x00, 0x00, 0x00, +/* 000009B0 */ 0x88, 0x3E, 0x00, 0x00, 0x01, 0xAE, 0x3E, 0x00, 0x00, 0x01, 0xBE, 0x3E, 0x00, 0x00, 0x01, 0xDA, +/* 000009C0 */ 0x3E, 0x00, 0x00, 0x01, 0x02, 0x3F, 0x00, 0x00, 0x01, 0x1A, 0x3F, 0x00, 0x00, 0x01, 0x2E, 0x3F, +/* 000009D0 */ 0x00, 0x00, 0x00, 0x40, 0x3F, 0x00, 0x00, 0x00, 0x4A, 0x3F, 0x00, 0x00, 0x01, 0x6A, 0x3F, 0x00, +/* 000009E0 */ 0x00, 0x00, 0xB8, 0x3F, 0x00, 0x00, 0x00, 0xBE, 0x3F, 0x00, 0x00, 0x01, 0xF0, 0x3F, 0x00, 0x00, +/* 000009F0 */ 0x01, 0x14, 0x40, 0x00, 0x00, 0x00, 0x24, 0x40, 0x00, 0x00, 0x01, 0x42, 0x40, 0x00, 0x00, 0x00, +/* 00000A00 */ 0x50, 0x40, 0x00, 0x00, 0x01, 0x6C, 0x40, 0x00, 0x00, 0x00, 0x7C, 0x40, 0x00, 0x00, 0x01, 0x9E, +/* 00000A10 */ 0x40, 0x00, 0x00, 0x00, 0xB0, 0x40, 0x00, 0x00, 0x01, 0xCE, 0x40, 0x00, 0x00, 0x00, 0xDC, 0x40, +/* 00000A20 */ 0x00, 0x00, 0x01, 0xFA, 0x40, 0x00, 0x00, 0x00, 0x08, 0x41, 0x00, 0x00, 0x01, 0x2A, 0x41, 0x00, +/* 00000A30 */ 0x00, 0x00, 0x46, 0x41, 0x00, 0x00, 0x01, 0x60, 0x41, 0x00, 0x00, 0x00, 0x6A, 0x41, 0x00, 0x00, +/* 00000A40 */ 0x01, 0x88, 0x41, 0x00, 0x00, 0x00, 0x96, 0x41, 0x00, 0x00, 0x01, 0xD0, 0x41, 0x00, 0x00, 0x01, +/* 00000A50 */ 0xFC, 0x41, 0x00, 0x00, 0x01, 0x38, 0x42, 0x00, 0x00, 0x01, 0x86, 0x42, 0x00, 0x00, 0x01, 0xB0, +/* 00000A60 */ 0x42, 0x00, 0x00, 0x01, 0xC2, 0x42, 0x00, 0x00, 0x00, 0xEE, 0x42, 0x00, 0x00, 0x00, 0x0C, 0x43, +/* 00000A70 */ 0x00, 0x00, 0x00, 0x2E, 0x43, 0x00, 0x00, 0x00, 0x42, 0x43, 0x00, 0x00, 0x00, 0x5E, 0x43, 0x00, +/* 00000A80 */ 0x00, 0x00, 0x82, 0x43, 0x00, 0x00, 0x00, 0x98, 0x43, 0x00, 0x00, 0x00, 0xC2, 0x43, 0x00, 0x00, +/* 00000A90 */ 0x00, 0xDE, 0x43, 0x00, 0x00, 0x00, 0xE4, 0x43, 0x00, 0x00, 0x00, 0x30, 0x44, 0x00, 0x00, 0x00, +/* 00000AA0 */ 0xFA, 0x44, 0x00, 0x00, 0x00, 0x10, 0x45, 0x00, 0x00, 0x00, 0x56, 0x45, 0x00, 0x00, 0x00, 0x60, +/* 00000AB0 */ 0x45, 0x00, 0x00, 0x00, 0x64, 0x45, 0x00, 0x00, 0x00, 0x68, 0x45, 0x00, 0x00, 0x00, 0x6C, 0x45, +/* 00000AC0 */ 0x00, 0x00, 0x00, 0x84, 0x45, 0x00, 0x00, 0x00, 0xA2, 0x45, 0x00, 0x00, 0x00, 0xEE, 0x45, 0x00, +/* 00000AD0 */ 0x00, 0x00, 0xCE, 0x46, 0x00, 0x00, 0x00, 0xE8, 0x46, 0x00, 0x00, 0x00, 0xF8, 0x46, 0x00, 0x00, +/* 00000AE0 */ 0x00, 0x0C, 0x47, 0x00, 0x00, 0x00, 0x20, 0x47, 0x00, 0x00, 0x00, 0xA2, 0x47, 0x00, 0x00, 0x00, +/* 00000AF0 */ 0xCE, 0x47, 0x00, 0x00, 0x00, 0xE6, 0x47, 0x00, 0x00, 0x00, 0xF8, 0x47, 0x00, 0x00, 0x00, 0x32, +/* 00000B00 */ 0x48, 0x00, 0x00, 0x00, 0x4A, 0x48, 0x00, 0x00, 0x00, 0x62, 0x48, 0x00, 0x00, 0x00, 0x6C, 0x48, +/* 00000B10 */ 0x00, 0x00, 0x01, 0x76, 0x48, 0x00, 0x00, 0x00, 0xC8, 0x48, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, +/* 00000B20 */ 0x6C, 0x00, 0x6F, 0x00, 0x62, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x20, 0x00, 0x63, 0x00, 0x6F, 0x00, +/* 00000B30 */ 0x64, 0x00, 0x65, 0x00, 0x00, 0x00, 0x75, 0x00, 0x73, 0x00, 0x65, 0x00, 0x20, 0x00, 0x73, 0x00, +/* 00000B40 */ 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x63, 0x00, 0x74, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, +/* 00000B50 */ 0x74, 0x00, 0x6C, 0x00, 0x43, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x00, 0x00, +/* 00000B60 */ 0x73, 0x00, 0x65, 0x00, 0x74, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, +/* 00000B70 */ 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x00, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, +/* 00000B80 */ 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x4C, 0x00, 0x65, 0x00, 0x6E, 0x00, +/* 00000B90 */ 0x67, 0x00, 0x74, 0x00, 0x68, 0x00, 0x00, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x6C, 0x00, +/* 00000BA0 */ 0x49, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, +/* 00000BB0 */ 0x46, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x00, 0x00, 0x52, 0x00, 0x61, 0x00, 0x69, 0x00, +/* 00000BC0 */ 0x73, 0x00, 0x65, 0x00, 0x41, 0x00, 0x73, 0x00, 0x73, 0x00, 0x65, 0x00, 0x72, 0x00, 0x74, 0x00, +/* 00000BD0 */ 0x00, 0x00, 0x4F, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x47, 0x00, +/* 00000BE0 */ 0x65, 0x00, 0x74, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, +/* 00000BF0 */ 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x4F, 0x00, 0x62, 0x00, +/* 00000C00 */ 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x49, 0x00, 0x73, 0x00, 0x45, 0x00, 0x78, 0x00, +/* 00000C10 */ 0x74, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x69, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, +/* 00000C20 */ 0x00, 0x00, 0x4F, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x47, 0x00, +/* 00000C30 */ 0x65, 0x00, 0x74, 0x00, 0x4F, 0x00, 0x77, 0x00, 0x6E, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, +/* 00000C40 */ 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x74, 0x00, 0x79, 0x00, 0x4E, 0x00, 0x61, 0x00, 0x6D, 0x00, +/* 00000C50 */ 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x4F, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, +/* 00000C60 */ 0x74, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, +/* 00000C70 */ 0x65, 0x00, 0x48, 0x00, 0x61, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x77, 0x00, 0x6E, 0x00, 0x50, 0x00, +/* 00000C80 */ 0x72, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, +/* 00000C90 */ 0x5F, 0x00, 0x6F, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x44, 0x00, +/* 00000CA0 */ 0x65, 0x00, 0x66, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, +/* 00000CB0 */ 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x4F, 0x00, 0x62, 0x00, +/* 00000CC0 */ 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x44, 0x00, 0x65, 0x00, 0x66, 0x00, 0x69, 0x00, +/* 00000CD0 */ 0x6E, 0x00, 0x65, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, +/* 00000CE0 */ 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, +/* 00000CF0 */ 0x49, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, +/* 00000D00 */ 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x45, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x00, 0x00, +/* 00000D10 */ 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x73, 0x00, +/* 00000D20 */ 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x64, 0x00, +/* 00000D30 */ 0x65, 0x00, 0x78, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, +/* 00000D40 */ 0x61, 0x00, 0x79, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, +/* 00000D50 */ 0x63, 0x00, 0x65, 0x00, 0x4A, 0x00, 0x6F, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x46, 0x00, +/* 00000D60 */ 0x75, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x49, 0x00, +/* 00000D70 */ 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, 0x42, 0x00, +/* 00000D80 */ 0x69, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x00, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00000D90 */ 0x49, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, +/* 00000DA0 */ 0x47, 0x00, 0x65, 0x00, 0x74, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, +/* 00000DB0 */ 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x4E, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x00, 0x00, +/* 00000DC0 */ 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x49, 0x00, 0x6E, 0x00, +/* 00000DD0 */ 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, 0x52, 0x00, 0x65, 0x00, +/* 00000DE0 */ 0x70, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x63, 0x00, 0x65, 0x00, 0x00, 0x00, 0x53, 0x00, 0x74, 0x00, +/* 00000DF0 */ 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, +/* 00000E00 */ 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, +/* 00000E10 */ 0x77, 0x00, 0x65, 0x00, 0x72, 0x00, 0x43, 0x00, 0x61, 0x00, 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, +/* 00000E20 */ 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x49, 0x00, 0x6E, 0x00, +/* 00000E30 */ 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, 0x54, 0x00, 0x6F, 0x00, +/* 00000E40 */ 0x55, 0x00, 0x70, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x43, 0x00, 0x61, 0x00, 0x73, 0x00, +/* 00000E50 */ 0x65, 0x00, 0x00, 0x00, 0x74, 0x00, 0x68, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x45, 0x00, +/* 00000E60 */ 0x78, 0x00, 0x49, 0x00, 0x66, 0x00, 0x4F, 0x00, 0x4F, 0x00, 0x4D, 0x00, 0x4F, 0x00, 0x72, 0x00, +/* 00000E70 */ 0x53, 0x00, 0x4F, 0x00, 0x45, 0x00, 0x00, 0x00, 0x74, 0x00, 0x61, 0x00, 0x67, 0x00, 0x50, 0x00, +/* 00000E80 */ 0x75, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x63, 0x00, 0x46, 0x00, 0x75, 0x00, 0x6E, 0x00, +/* 00000E90 */ 0x63, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, +/* 00000EA0 */ 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x66, 0x00, +/* 00000EB0 */ 0x6F, 0x00, 0x72, 0x00, 0x45, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x49, 0x00, 0x66, 0x00, +/* 00000EC0 */ 0x50, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x00, 0x00, +/* 00000ED0 */ 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x45, 0x00, 0x78, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6E, 0x00, +/* 00000EE0 */ 0x73, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x53, 0x00, 0x75, 0x00, 0x62, 0x00, 0x74, 0x00, +/* 00000EF0 */ 0x61, 0x00, 0x67, 0x00, 0x73, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, +/* 00000F00 */ 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 00000F10 */ 0x65, 0x00, 0x48, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, +/* 00000F20 */ 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x4C, 0x00, +/* 00000F30 */ 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x73, 0x00, +/* 00000F40 */ 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x70, 0x00, 0x70, 0x00, 0x65, 0x00, 0x64, 0x00, 0x44, 0x00, +/* 00000F50 */ 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x4C, 0x00, 0x6F, 0x00, +/* 00000F60 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, +/* 00000F70 */ 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, +/* 00000F80 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x57, 0x00, +/* 00000F90 */ 0x72, 0x00, 0x61, 0x00, 0x70, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x63, 0x00, +/* 00000FA0 */ 0x61, 0x00, 0x6E, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 00000FB0 */ 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 00000FC0 */ 0x65, 0x00, 0x4C, 0x00, 0x69, 0x00, 0x73, 0x00, 0x74, 0x00, 0x57, 0x00, 0x72, 0x00, 0x61, 0x00, +/* 00000FD0 */ 0x70, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, +/* 00000FE0 */ 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x41, 0x00, 0x63, 0x00, 0x63, 0x00, 0x65, 0x00, +/* 00000FF0 */ 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, +/* 00001000 */ 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x56, 0x00, 0x61, 0x00, +/* 00001010 */ 0x6C, 0x00, 0x75, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, 0x76, 0x00, +/* 00001020 */ 0x65, 0x00, 0x72, 0x00, 0x73, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, +/* 00001030 */ 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x41, 0x00, 0x63, 0x00, 0x63, 0x00, 0x65, 0x00, 0x70, 0x00, +/* 00001040 */ 0x74, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, +/* 00001050 */ 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x56, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 00001060 */ 0x75, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x70, 0x00, 0x70, 0x00, +/* 00001070 */ 0x65, 0x00, 0x64, 0x00, 0x44, 0x00, 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, +/* 00001080 */ 0x74, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, +/* 00001090 */ 0x49, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x54, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, +/* 000010A0 */ 0x00, 0x00, 0x69, 0x00, 0x73, 0x00, 0x50, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x66, 0x00, +/* 000010B0 */ 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x55, 0x00, 0x73, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, +/* 000010C0 */ 0x49, 0x00, 0x43, 0x00, 0x55, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x4F, 0x00, 0x54, 0x00, 0x5F, 0x00, +/* 000010D0 */ 0x46, 0x00, 0x4F, 0x00, 0x55, 0x00, 0x4E, 0x00, 0x44, 0x00, 0x00, 0x00, 0x62, 0x00, 0x61, 0x00, +/* 000010E0 */ 0x72, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x61, 0x00, 0x62, 0x00, 0x73, 0x00, +/* 000010F0 */ 0x00, 0x00, 0x66, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6D, 0x00, +/* 00001100 */ 0x61, 0x00, 0x78, 0x00, 0x00, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x00, 0x00, 0x74, 0x00, +/* 00001110 */ 0x6F, 0x00, 0x55, 0x00, 0x70, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x43, 0x00, 0x61, 0x00, +/* 00001120 */ 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x77, 0x00, +/* 00001130 */ 0x65, 0x00, 0x72, 0x00, 0x43, 0x00, 0x61, 0x00, 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, 0x72, 0x00, +/* 00001140 */ 0x65, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x63, 0x00, 0x65, 0x00, 0x00, 0x00, 0x73, 0x00, +/* 00001150 */ 0x70, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x74, 0x00, 0x00, 0x00, 0x73, 0x00, 0x75, 0x00, 0x62, 0x00, +/* 00001160 */ 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, 0x73, 0x00, +/* 00001170 */ 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x64, 0x00, +/* 00001180 */ 0x65, 0x00, 0x78, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 00001190 */ 0x63, 0x00, 0x68, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, 0x70, 0x00, 0x65, 0x00, 0x61, 0x00, +/* 000011A0 */ 0x74, 0x00, 0x00, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x45, 0x00, 0x61, 0x00, 0x63, 0x00, +/* 000011B0 */ 0x68, 0x00, 0x00, 0x00, 0x6A, 0x00, 0x6F, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x61, 0x00, +/* 000011C0 */ 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x65, 0x00, +/* 000011D0 */ 0x78, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x70, 0x00, 0x00, 0x00, +/* 000011E0 */ 0x72, 0x00, 0x65, 0x00, 0x64, 0x00, 0x75, 0x00, 0x63, 0x00, 0x65, 0x00, 0x00, 0x00, 0x73, 0x00, +/* 000011F0 */ 0x6C, 0x00, 0x69, 0x00, 0x63, 0x00, 0x65, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, +/* 00001200 */ 0x63, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x66, 0x00, 0x69, 0x00, 0x6C, 0x00, 0x74, 0x00, +/* 00001210 */ 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x71, 0x00, 0x75, 0x00, +/* 00001220 */ 0x65, 0x00, 0x00, 0x00, 0x6B, 0x00, 0x65, 0x00, 0x79, 0x00, 0x73, 0x00, 0x00, 0x00, 0x68, 0x00, +/* 00001230 */ 0x61, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x77, 0x00, 0x6E, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, +/* 00001240 */ 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x64, 0x00, 0x65, 0x00, +/* 00001250 */ 0x66, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x70, 0x00, +/* 00001260 */ 0x65, 0x00, 0x72, 0x00, 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x69, 0x00, 0x73, 0x00, 0x45, 0x00, +/* 00001270 */ 0x78, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x69, 0x00, 0x62, 0x00, 0x6C, 0x00, +/* 00001280 */ 0x65, 0x00, 0x00, 0x00, 0x63, 0x00, 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00001290 */ 0x00, 0x00, 0x73, 0x00, 0x65, 0x00, 0x74, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, +/* 000012A0 */ 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, +/* 000012B0 */ 0x69, 0x00, 0x73, 0x00, 0x46, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 000012C0 */ 0x00, 0x00, 0x69, 0x00, 0x73, 0x00, 0x4E, 0x00, 0x61, 0x00, 0x4E, 0x00, 0x00, 0x00, 0x67, 0x00, +/* 000012D0 */ 0x65, 0x00, 0x74, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, 0x62, 0x00, +/* 000012E0 */ 0x69, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x00, 0x00, 0x61, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6C, 0x00, +/* 000012F0 */ 0x79, 0x00, 0x00, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x4F, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, +/* 00001300 */ 0x63, 0x00, 0x74, 0x00, 0x00, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, +/* 00001310 */ 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x4E, 0x00, 0x75, 0x00, +/* 00001320 */ 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x4C, 0x00, +/* 00001330 */ 0x6F, 0x00, 0x67, 0x00, 0x69, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x42, 0x00, 0x6F, 0x00, +/* 00001340 */ 0x6F, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x54, 0x00, 0x6F, 0x00, +/* 00001350 */ 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x65, 0x00, 0x67, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, +/* 00001360 */ 0x54, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x74, 0x00, 0x68, 0x00, +/* 00001370 */ 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, +/* 00001380 */ 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x43, 0x00, 0x61, 0x00, +/* 00001390 */ 0x6E, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x4C, 0x00, +/* 000013A0 */ 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x67, 0x00, +/* 000013B0 */ 0x65, 0x00, 0x74, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x69, 0x00, +/* 000013C0 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 000013D0 */ 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x76, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x65, 0x00, +/* 000013E0 */ 0x00, 0x00, 0x77, 0x00, 0x72, 0x00, 0x69, 0x00, 0x74, 0x00, 0x61, 0x00, 0x62, 0x00, 0x6C, 0x00, +/* 000013F0 */ 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x72, 0x00, +/* 00001400 */ 0x61, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, +/* 00001410 */ 0x66, 0x00, 0x69, 0x00, 0x67, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x62, 0x00, 0x6C, 0x00, +/* 00001420 */ 0x65, 0x00, 0x00, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 00001430 */ 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, +/* 00001440 */ 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, +/* 00001450 */ 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, +/* 00001460 */ 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x50, 0x00, +/* 00001470 */ 0x6C, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x52, 0x00, 0x75, 0x00, 0x6C, 0x00, +/* 00001480 */ 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x69, 0x00, 0x73, 0x00, 0x56, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 00001490 */ 0x69, 0x00, 0x64, 0x00, 0x00, 0x00, 0x56, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x64, 0x00, +/* 000014A0 */ 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x43, 0x00, 0x6F, 0x00, +/* 000014B0 */ 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x2E, 0x00, 0x73, 0x00, +/* 000014C0 */ 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, +/* 000014D0 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, +/* 000014E0 */ 0x66, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x4E, 0x00, +/* 000014F0 */ 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 00001500 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, +/* 00001510 */ 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, +/* 00001520 */ 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x49, 0x00, +/* 00001530 */ 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00001540 */ 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, +/* 00001550 */ 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, +/* 00001560 */ 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, +/* 00001570 */ 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x61, 0x00, +/* 00001580 */ 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, +/* 00001590 */ 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, +/* 000015A0 */ 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x65, 0x00, 0x73, 0x00, +/* 000015B0 */ 0x2D, 0x00, 0x45, 0x00, 0x53, 0x00, 0x00, 0x00, 0x74, 0x00, 0x72, 0x00, 0x61, 0x00, 0x64, 0x00, +/* 000015C0 */ 0x00, 0x00, 0x74, 0x00, 0x72, 0x00, 0x61, 0x00, 0x64, 0x00, 0x6E, 0x00, 0x6C, 0x00, 0x00, 0x00, +/* 000015D0 */ 0x6C, 0x00, 0x76, 0x00, 0x2D, 0x00, 0x4C, 0x00, 0x56, 0x00, 0x00, 0x00, 0x64, 0x00, 0x65, 0x00, +/* 000015E0 */ 0x2D, 0x00, 0x44, 0x00, 0x45, 0x00, 0x00, 0x00, 0x70, 0x00, 0x68, 0x00, 0x6F, 0x00, 0x6E, 0x00, +/* 000015F0 */ 0x65, 0x00, 0x62, 0x00, 0x6B, 0x00, 0x00, 0x00, 0x70, 0x00, 0x68, 0x00, 0x6F, 0x00, 0x6E, 0x00, +/* 00001600 */ 0x65, 0x00, 0x62, 0x00, 0x00, 0x00, 0x6A, 0x00, 0x61, 0x00, 0x2D, 0x00, 0x4A, 0x00, 0x50, 0x00, +/* 00001610 */ 0x00, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x68, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x00, 0x00, +/* 00001620 */ 0x72, 0x00, 0x61, 0x00, 0x64, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x00, 0x00, 0x7A, 0x00, +/* 00001630 */ 0x68, 0x00, 0x2D, 0x00, 0x54, 0x00, 0x57, 0x00, 0x00, 0x00, 0x70, 0x00, 0x68, 0x00, 0x6F, 0x00, +/* 00001640 */ 0x6E, 0x00, 0x65, 0x00, 0x74, 0x00, 0x69, 0x00, 0x63, 0x00, 0x00, 0x00, 0x70, 0x00, 0x72, 0x00, +/* 00001650 */ 0x6F, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, +/* 00001660 */ 0x6F, 0x00, 0x6B, 0x00, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7A, 0x00, 0x68, 0x00, 0x2D, 0x00, +/* 00001670 */ 0x48, 0x00, 0x4B, 0x00, 0x00, 0x00, 0x7A, 0x00, 0x68, 0x00, 0x2D, 0x00, 0x4D, 0x00, 0x4F, 0x00, +/* 00001680 */ 0x00, 0x00, 0x7A, 0x00, 0x68, 0x00, 0x2D, 0x00, 0x43, 0x00, 0x4E, 0x00, 0x00, 0x00, 0x70, 0x00, +/* 00001690 */ 0x69, 0x00, 0x6E, 0x00, 0x79, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x7A, 0x00, 0x68, 0x00, +/* 000016A0 */ 0x2D, 0x00, 0x53, 0x00, 0x47, 0x00, 0x00, 0x00, 0x75, 0x00, 0x73, 0x00, 0x65, 0x00, 0x43, 0x00, +/* 000016B0 */ 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, +/* 000016C0 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x6F, 0x00, 0x6B, 0x00, +/* 000016D0 */ 0x75, 0x00, 0x70, 0x00, 0x43, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x00, 0x00, +/* 000016E0 */ 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x42, 0x00, 0x65, 0x00, +/* 000016F0 */ 0x73, 0x00, 0x74, 0x00, 0x46, 0x00, 0x69, 0x00, 0x74, 0x00, 0x43, 0x00, 0x61, 0x00, 0x63, 0x00, +/* 00001700 */ 0x68, 0x00, 0x65, 0x00, 0x00, 0x00, 0x47, 0x00, 0x65, 0x00, 0x74, 0x00, 0x4F, 0x00, 0x70, 0x00, +/* 00001710 */ 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x69, 0x00, +/* 00001720 */ 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x43, 0x00, +/* 00001730 */ 0x75, 0x00, 0x72, 0x00, 0x72, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x79, 0x00, 0x52, 0x00, +/* 00001740 */ 0x65, 0x00, 0x67, 0x00, 0x45, 0x00, 0x78, 0x00, 0x70, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, +/* 00001750 */ 0x64, 0x00, 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x4C, 0x00, +/* 00001760 */ 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x47, 0x00, 0x65, 0x00, +/* 00001770 */ 0x74, 0x00, 0x44, 0x00, 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x74, 0x00, +/* 00001780 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x63, 0x00, +/* 00001790 */ 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x50, 0x00, 0x75, 0x00, 0x62, 0x00, +/* 000017A0 */ 0x6C, 0x00, 0x69, 0x00, 0x63, 0x00, 0x4D, 0x00, 0x65, 0x00, 0x74, 0x00, 0x68, 0x00, 0x6F, 0x00, +/* 000017B0 */ 0x64, 0x00, 0x00, 0x00, 0x4F, 0x00, 0x72, 0x00, 0x64, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x61, 0x00, +/* 000017C0 */ 0x72, 0x00, 0x79, 0x00, 0x43, 0x00, 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 000017D0 */ 0x46, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, +/* 000017E0 */ 0x74, 0x00, 0x72, 0x00, 0x75, 0x00, 0x63, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, +/* 000017F0 */ 0x42, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x41, 0x00, 0x76, 0x00, 0x61, 0x00, 0x69, 0x00, +/* 00001800 */ 0x6C, 0x00, 0x61, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, +/* 00001810 */ 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x6F, 0x00, 0x6B, 0x00, +/* 00001820 */ 0x75, 0x00, 0x70, 0x00, 0x4D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, +/* 00001830 */ 0x72, 0x00, 0x00, 0x00, 0x42, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x46, 0x00, 0x69, 0x00, +/* 00001840 */ 0x74, 0x00, 0x4D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x72, 0x00, +/* 00001850 */ 0x00, 0x00, 0x55, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x64, 0x00, 0x65, 0x00, +/* 00001860 */ 0x45, 0x00, 0x78, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x69, 0x00, 0x6F, 0x00, +/* 00001870 */ 0x6E, 0x00, 0x56, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x65, 0x00, 0x00, 0x00, 0x52, 0x00, +/* 00001880 */ 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, +/* 00001890 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x47, 0x00, 0x65, 0x00, 0x74, 0x00, +/* 000018A0 */ 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x4F, 0x00, 0x70, 0x00, +/* 000018B0 */ 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x43, 0x00, 0x55, 0x00, 0x52, 0x00, +/* 000018C0 */ 0x52, 0x00, 0x45, 0x00, 0x4E, 0x00, 0x43, 0x00, 0x59, 0x00, 0x5F, 0x00, 0x43, 0x00, 0x4F, 0x00, +/* 000018D0 */ 0x44, 0x00, 0x45, 0x00, 0x5F, 0x00, 0x52, 0x00, 0x45, 0x00, 0x00, 0x00, 0x70, 0x00, 0x61, 0x00, +/* 000018E0 */ 0x72, 0x00, 0x73, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x74, 0x00, +/* 000018F0 */ 0x61, 0x00, 0x67, 0x00, 0x00, 0x00, 0x49, 0x00, 0x73, 0x00, 0x57, 0x00, 0x65, 0x00, 0x6C, 0x00, +/* 00001900 */ 0x6C, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x64, 0x00, 0x43, 0x00, +/* 00001910 */ 0x75, 0x00, 0x72, 0x00, 0x72, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x79, 0x00, 0x43, 0x00, +/* 00001920 */ 0x6F, 0x00, 0x64, 0x00, 0x65, 0x00, 0x00, 0x00, 0x49, 0x00, 0x73, 0x00, 0x53, 0x00, 0x74, 0x00, +/* 00001930 */ 0x72, 0x00, 0x75, 0x00, 0x63, 0x00, 0x74, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 00001940 */ 0x6C, 0x00, 0x79, 0x00, 0x56, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x64, 0x00, 0x4C, 0x00, +/* 00001950 */ 0x61, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x75, 0x00, 0x61, 0x00, 0x67, 0x00, 0x65, 0x00, 0x54, 0x00, +/* 00001960 */ 0x61, 0x00, 0x67, 0x00, 0x00, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x6F, 0x00, 0x6E, 0x00, +/* 00001970 */ 0x69, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x4C, 0x00, +/* 00001980 */ 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x69, 0x00, 0x73, 0x00, +/* 00001990 */ 0x74, 0x00, 0x00, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x6F, 0x00, 0x6B, 0x00, 0x75, 0x00, 0x70, 0x00, +/* 000019A0 */ 0x53, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 000019B0 */ 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, +/* 000019C0 */ 0x00, 0x00, 0x42, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x46, 0x00, 0x69, 0x00, 0x74, 0x00, +/* 000019D0 */ 0x53, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 000019E0 */ 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, +/* 000019F0 */ 0x00, 0x00, 0x53, 0x00, 0x65, 0x00, 0x74, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, +/* 00001A00 */ 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 00001A10 */ 0x44, 0x00, 0x69, 0x00, 0x67, 0x00, 0x69, 0x00, 0x74, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, +/* 00001A20 */ 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x00, 0x00, 0x53, 0x00, 0x75, 0x00, 0x70, 0x00, +/* 00001A30 */ 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, +/* 00001A40 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x63, 0x00, 0x72, 0x00, +/* 00001A50 */ 0x65, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x52, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, +/* 00001A60 */ 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, +/* 00001A70 */ 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, +/* 00001A80 */ 0x69, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x61, 0x00, +/* 00001A90 */ 0x6E, 0x00, 0x67, 0x00, 0x54, 0x00, 0x61, 0x00, 0x67, 0x00, 0x52, 0x00, 0x45, 0x00, 0x73, 0x00, +/* 00001AA0 */ 0x00, 0x00, 0x43, 0x00, 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x44, 0x00, +/* 00001AB0 */ 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, +/* 00001AC0 */ 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x49, 0x00, 0x73, 0x00, +/* 00001AD0 */ 0x57, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, +/* 00001AE0 */ 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x75, 0x00, 0x61, 0x00, +/* 00001AF0 */ 0x67, 0x00, 0x65, 0x00, 0x54, 0x00, 0x61, 0x00, 0x67, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, +/* 00001B00 */ 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x70, 0x00, 0x70, 0x00, 0x65, 0x00, 0x64, 0x00, +/* 00001B10 */ 0x44, 0x00, 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x4C, 0x00, +/* 00001B20 */ 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x4C, 0x00, 0x41, 0x00, +/* 00001B30 */ 0x4E, 0x00, 0x47, 0x00, 0x5F, 0x00, 0x54, 0x00, 0x41, 0x00, 0x47, 0x00, 0x5F, 0x00, 0x42, 0x00, +/* 00001B40 */ 0x41, 0x00, 0x53, 0x00, 0x45, 0x00, 0x5F, 0x00, 0x52, 0x00, 0x45, 0x00, 0x00, 0x00, 0x4C, 0x00, +/* 00001B50 */ 0x41, 0x00, 0x4E, 0x00, 0x47, 0x00, 0x5F, 0x00, 0x54, 0x00, 0x41, 0x00, 0x47, 0x00, 0x5F, 0x00, +/* 00001B60 */ 0x45, 0x00, 0x58, 0x00, 0x54, 0x00, 0x5F, 0x00, 0x52, 0x00, 0x45, 0x00, 0x00, 0x00, 0x4C, 0x00, +/* 00001B70 */ 0x41, 0x00, 0x4E, 0x00, 0x47, 0x00, 0x5F, 0x00, 0x54, 0x00, 0x41, 0x00, 0x47, 0x00, 0x5F, 0x00, +/* 00001B80 */ 0x52, 0x00, 0x45, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, +/* 00001B90 */ 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x5F, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, +/* 00001BA0 */ 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, +/* 00001BB0 */ 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x5F, 0x00, 0x6E, 0x00, +/* 00001BC0 */ 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, +/* 00001BD0 */ 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x5F, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, +/* 00001BE0 */ 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, +/* 00001BF0 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, +/* 00001C00 */ 0x6E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, +/* 00001C10 */ 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x5F, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, +/* 00001C20 */ 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, +/* 00001C30 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x5F, 0x00, +/* 00001C40 */ 0x6E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x6D, 0x00, +/* 00001C50 */ 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, +/* 00001C60 */ 0x74, 0x00, 0x5F, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 00001C70 */ 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 00001C80 */ 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 00001C90 */ 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 00001CA0 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x5F, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, +/* 00001CB0 */ 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, +/* 00001CC0 */ 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x5F, 0x00, 0x6E, 0x00, +/* 00001CD0 */ 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00001CE0 */ 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, +/* 00001CF0 */ 0x61, 0x00, 0x74, 0x00, 0x5F, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, +/* 00001D00 */ 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, +/* 00001D10 */ 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x67, 0x00, 0x65, 0x00, +/* 00001D20 */ 0x74, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x63, 0x00, +/* 00001D30 */ 0x61, 0x00, 0x6C, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, +/* 00001D40 */ 0x73, 0x00, 0x5F, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5F, 0x00, +/* 00001D50 */ 0x5F, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x70, 0x00, 0x70, 0x00, 0x65, 0x00, 0x64, 0x00, 0x44, 0x00, +/* 00001D60 */ 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x4C, 0x00, 0x6F, 0x00, +/* 00001D70 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x5F, 0x00, +/* 00001D80 */ 0x63, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x00, 0x00, 0x67, 0x00, 0x65, 0x00, +/* 00001D90 */ 0x74, 0x00, 0x00, 0x00, 0x73, 0x00, 0x65, 0x00, 0x74, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, +/* 00001DA0 */ 0x74, 0x00, 0x6F, 0x00, 0x55, 0x00, 0x70, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x43, 0x00, +/* 00001DB0 */ 0x61, 0x00, 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x74, 0x00, 0x6F, 0x00, +/* 00001DC0 */ 0x4C, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x65, 0x00, 0x72, 0x00, 0x43, 0x00, 0x61, 0x00, 0x73, 0x00, +/* 00001DD0 */ 0x65, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x72, 0x00, 0x65, 0x00, 0x70, 0x00, 0x6C, 0x00, +/* 00001DE0 */ 0x61, 0x00, 0x63, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x70, 0x00, +/* 00001DF0 */ 0x6C, 0x00, 0x69, 0x00, 0x74, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x75, 0x00, +/* 00001E00 */ 0x62, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, +/* 00001E10 */ 0x5F, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, +/* 00001E20 */ 0x49, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x65, 0x00, 0x78, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, +/* 00001E30 */ 0x5F, 0x00, 0x2E, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x63, 0x00, 0x68, 0x00, 0x00, 0x00, +/* 00001E40 */ 0x5F, 0x00, 0x2E, 0x00, 0x72, 0x00, 0x65, 0x00, 0x70, 0x00, 0x65, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 00001E50 */ 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x45, 0x00, 0x61, 0x00, +/* 00001E60 */ 0x63, 0x00, 0x68, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x6A, 0x00, 0x6F, 0x00, 0x69, 0x00, +/* 00001E70 */ 0x6E, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x61, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, +/* 00001E80 */ 0x79, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x65, 0x00, 0x78, 0x00, 0x4F, 0x00, 0x66, 0x00, +/* 00001E90 */ 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x70, 0x00, 0x00, 0x00, 0x5F, 0x00, +/* 00001EA0 */ 0x2E, 0x00, 0x72, 0x00, 0x65, 0x00, 0x64, 0x00, 0x75, 0x00, 0x63, 0x00, 0x65, 0x00, 0x00, 0x00, +/* 00001EB0 */ 0x5F, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x63, 0x00, 0x65, 0x00, 0x00, 0x00, +/* 00001EC0 */ 0x5F, 0x00, 0x2E, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 00001ED0 */ 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x69, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00001EE0 */ 0x72, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x71, 0x00, +/* 00001EF0 */ 0x75, 0x00, 0x65, 0x00, 0x00, 0x00, 0x61, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, +/* 00001F00 */ 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x68, 0x00, 0x61, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x77, 0x00, +/* 00001F10 */ 0x6E, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x74, 0x00, +/* 00001F20 */ 0x79, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x64, 0x00, 0x65, 0x00, 0x66, 0x00, 0x69, 0x00, +/* 00001F30 */ 0x6E, 0x00, 0x65, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, +/* 00001F40 */ 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x63, 0x00, 0x72, 0x00, 0x65, 0x00, +/* 00001F50 */ 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x65, 0x00, +/* 00001F60 */ 0x74, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, +/* 00001F70 */ 0x70, 0x00, 0x65, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x66, 0x00, +/* 00001F80 */ 0x6C, 0x00, 0x6F, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x67, 0x00, +/* 00001F90 */ 0x65, 0x00, 0x74, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5F, 0x00, +/* 00001FA0 */ 0x2E, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, +/* 00001FB0 */ 0x61, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x79, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6E, 0x00, +/* 00001FC0 */ 0x00, 0x00, 0x6F, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x00, 0x00, +/* 00001FD0 */ 0x2D, 0x00, 0x00, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x64, 0x00, +/* 00001FE0 */ 0x65, 0x00, 0x45, 0x00, 0x78, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x69, 0x00, +/* 00001FF0 */ 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x65, 0x00, 0x78, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6E, 0x00, +/* 00002000 */ 0x73, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, 0x66, 0x00, +/* 00002010 */ 0x6F, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, +/* 00002020 */ 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x75, 0x00, 0x6C, 0x00, +/* 00002030 */ 0x74, 0x00, 0x00, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 00002040 */ 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x45, 0x00, 0x78, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6E, 0x00, +/* 00002050 */ 0x73, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x6F, 0x00, +/* 00002060 */ 0x6B, 0x00, 0x75, 0x00, 0x70, 0x00, 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, 0x61, 0x00, +/* 00002070 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x2D, 0x00, +/* 00002080 */ 0x75, 0x00, 0x00, 0x00, 0x2D, 0x00, 0x78, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, +/* 00002090 */ 0x6F, 0x00, 0x6B, 0x00, 0x75, 0x00, 0x70, 0x00, 0x4D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x63, 0x00, +/* 000020A0 */ 0x68, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x74, 0x00, 0x72, 0x00, 0x75, 0x00, 0x65, 0x00, +/* 000020B0 */ 0x00, 0x00, 0x62, 0x00, 0x6F, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x61, 0x00, 0x6E, 0x00, +/* 000020C0 */ 0x00, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, +/* 000020D0 */ 0x6E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x5B, 0x00, +/* 000020E0 */ 0x27, 0x00, 0x00, 0x00, 0x27, 0x00, 0x5D, 0x00, 0x00, 0x00, 0x27, 0x00, 0x2C, 0x00, 0x20, 0x00, +/* 000020F0 */ 0x27, 0x00, 0x00, 0x00, 0x5B, 0x00, 0x00, 0x00, 0x20, 0x00, 0x2D, 0x00, 0x20, 0x00, 0x00, 0x00, +/* 00002100 */ 0x5D, 0x00, 0x00, 0x00, 0x5E, 0x00, 0x5B, 0x00, 0x41, 0x00, 0x2D, 0x00, 0x5A, 0x00, 0x5D, 0x00, +/* 00002110 */ 0x7B, 0x00, 0x33, 0x00, 0x7D, 0x00, 0x24, 0x00, 0x00, 0x00, 0x70, 0x00, 0x61, 0x00, 0x72, 0x00, +/* 00002120 */ 0x73, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x74, 0x00, +/* 00002130 */ 0x61, 0x00, 0x67, 0x00, 0x43, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x00, 0x00, +/* 00002140 */ 0x5B, 0x00, 0x41, 0x00, 0x2D, 0x00, 0x5A, 0x00, 0x5D, 0x00, 0x00, 0x00, 0x5B, 0x00, 0x30, 0x00, +/* 00002150 */ 0x2D, 0x00, 0x39, 0x00, 0x5D, 0x00, 0x00, 0x00, 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x00, 0x00, +/* 00002160 */ 0x7C, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x28, 0x00, 0x3F, 0x00, +/* 00002170 */ 0x3A, 0x00, 0x61, 0x00, 0x72, 0x00, 0x74, 0x00, 0x2D, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x6A, 0x00, +/* 00002180 */ 0x62, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x7C, 0x00, 0x63, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x2D, 0x00, +/* 00002190 */ 0x67, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x7C, 0x00, +/* 000021A0 */ 0x6E, 0x00, 0x6F, 0x00, 0x2D, 0x00, 0x62, 0x00, 0x6F, 0x00, 0x6B, 0x00, 0x7C, 0x00, 0x6E, 0x00, +/* 000021B0 */ 0x6F, 0x00, 0x2D, 0x00, 0x6E, 0x00, 0x79, 0x00, 0x6E, 0x00, 0x7C, 0x00, 0x7A, 0x00, 0x68, 0x00, +/* 000021C0 */ 0x2D, 0x00, 0x67, 0x00, 0x75, 0x00, 0x6F, 0x00, 0x79, 0x00, 0x75, 0x00, 0x7C, 0x00, 0x7A, 0x00, +/* 000021D0 */ 0x68, 0x00, 0x2D, 0x00, 0x68, 0x00, 0x61, 0x00, 0x6B, 0x00, 0x6B, 0x00, 0x61, 0x00, 0x7C, 0x00, +/* 000021E0 */ 0x7A, 0x00, 0x68, 0x00, 0x2D, 0x00, 0x6D, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x7C, 0x00, 0x7A, 0x00, +/* 000021F0 */ 0x68, 0x00, 0x2D, 0x00, 0x6D, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x2D, 0x00, 0x6E, 0x00, 0x61, 0x00, +/* 00002200 */ 0x6E, 0x00, 0x7C, 0x00, 0x7A, 0x00, 0x68, 0x00, 0x2D, 0x00, 0x78, 0x00, 0x69, 0x00, 0x61, 0x00, +/* 00002210 */ 0x6E, 0x00, 0x67, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x62, 0x00, +/* 00002220 */ 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x2D, 0x00, 0x47, 0x00, 0x42, 0x00, +/* 00002230 */ 0x2D, 0x00, 0x6F, 0x00, 0x65, 0x00, 0x64, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x61, 0x00, +/* 00002240 */ 0x6D, 0x00, 0x69, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x62, 0x00, 0x6E, 0x00, 0x6E, 0x00, +/* 00002250 */ 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x64, 0x00, 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, +/* 00002260 */ 0x6C, 0x00, 0x74, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x6F, 0x00, +/* 00002270 */ 0x63, 0x00, 0x68, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, +/* 00002280 */ 0x68, 0x00, 0x61, 0x00, 0x6B, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x6B, 0x00, 0x6C, 0x00, +/* 00002290 */ 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, +/* 000022A0 */ 0x6C, 0x00, 0x75, 0x00, 0x78, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x6D, 0x00, 0x69, 0x00, +/* 000022B0 */ 0x6E, 0x00, 0x67, 0x00, 0x6F, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x6E, 0x00, +/* 000022C0 */ 0x61, 0x00, 0x76, 0x00, 0x61, 0x00, 0x6A, 0x00, 0x6F, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, +/* 000022D0 */ 0x70, 0x00, 0x77, 0x00, 0x6E, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x74, 0x00, 0x61, 0x00, +/* 000022E0 */ 0x6F, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x74, 0x00, 0x61, 0x00, 0x79, 0x00, 0x7C, 0x00, +/* 000022F0 */ 0x69, 0x00, 0x2D, 0x00, 0x74, 0x00, 0x73, 0x00, 0x75, 0x00, 0x7C, 0x00, 0x73, 0x00, 0x67, 0x00, +/* 00002300 */ 0x6E, 0x00, 0x2D, 0x00, 0x42, 0x00, 0x45, 0x00, 0x2D, 0x00, 0x46, 0x00, 0x52, 0x00, 0x7C, 0x00, +/* 00002310 */ 0x73, 0x00, 0x67, 0x00, 0x6E, 0x00, 0x2D, 0x00, 0x42, 0x00, 0x45, 0x00, 0x2D, 0x00, 0x4E, 0x00, +/* 00002320 */ 0x4C, 0x00, 0x7C, 0x00, 0x73, 0x00, 0x67, 0x00, 0x6E, 0x00, 0x2D, 0x00, 0x43, 0x00, 0x48, 0x00, +/* 00002330 */ 0x2D, 0x00, 0x44, 0x00, 0x45, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x5C, 0x00, +/* 00002340 */ 0x62, 0x00, 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x00, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, +/* 00002350 */ 0x00, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x78, 0x00, 0x28, 0x00, +/* 00002360 */ 0x3F, 0x00, 0x3A, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x31, 0x00, 0x2C, 0x00, 0x38, 0x00, +/* 00002370 */ 0x7D, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x29, 0x00, 0x2B, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, +/* 00002380 */ 0x00, 0x00, 0x7C, 0x00, 0x5B, 0x00, 0x41, 0x00, 0x2D, 0x00, 0x57, 0x00, 0x59, 0x00, 0x2D, 0x00, +/* 00002390 */ 0x5A, 0x00, 0x5D, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x28, 0x00, 0x3F, 0x00, +/* 000023A0 */ 0x3A, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x32, 0x00, 0x2C, 0x00, 0x38, 0x00, 0x7D, 0x00, +/* 000023B0 */ 0x29, 0x00, 0x2B, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x35, 0x00, +/* 000023C0 */ 0x2C, 0x00, 0x38, 0x00, 0x7D, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x33, 0x00, 0x7D, 0x00, +/* 000023D0 */ 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x32, 0x00, 0x7D, 0x00, 0x7C, 0x00, +/* 000023E0 */ 0x00, 0x00, 0x7B, 0x00, 0x34, 0x00, 0x7D, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, +/* 000023F0 */ 0x7B, 0x00, 0x33, 0x00, 0x7D, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, +/* 00002400 */ 0x2D, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x33, 0x00, 0x7D, 0x00, 0x29, 0x00, 0x7B, 0x00, 0x30, 0x00, +/* 00002410 */ 0x2C, 0x00, 0x32, 0x00, 0x7D, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x7B, 0x00, +/* 00002420 */ 0x32, 0x00, 0x2C, 0x00, 0x33, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x28, 0x00, +/* 00002430 */ 0x3F, 0x00, 0x3A, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x7B, 0x00, +/* 00002440 */ 0x34, 0x00, 0x2C, 0x00, 0x38, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x28, 0x00, +/* 00002450 */ 0x00, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x2D, 0x00, 0x28, 0x00, +/* 00002460 */ 0x00, 0x00, 0x29, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x5C, 0x00, +/* 00002470 */ 0x62, 0x00, 0x28, 0x00, 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x29, 0x00, +/* 00002480 */ 0x2A, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x5C, 0x00, +/* 00002490 */ 0x62, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x5E, 0x00, 0x00, 0x00, 0x24, 0x00, +/* 000024A0 */ 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x6E, 0x00, +/* 000024B0 */ 0x67, 0x00, 0x75, 0x00, 0x61, 0x00, 0x67, 0x00, 0x65, 0x00, 0x00, 0x00, 0x73, 0x00, 0x63, 0x00, +/* 000024C0 */ 0x72, 0x00, 0x69, 0x00, 0x70, 0x00, 0x74, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, 0x67, 0x00, +/* 000024D0 */ 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x76, 0x00, 0x61, 0x00, 0x72, 0x00, 0x69, 0x00, +/* 000024E0 */ 0x61, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x65, 0x00, 0x78, 0x00, 0x74, 0x00, +/* 000024F0 */ 0x65, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x00, 0x00, +/* 00002500 */ 0x75, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x65, 0x00, 0x66, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x65, 0x00, +/* 00002510 */ 0x64, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, +/* 00002520 */ 0x00, 0x00, 0x69, 0x00, 0x73, 0x00, 0x41, 0x00, 0x76, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6C, 0x00, +/* 00002530 */ 0x61, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, +/* 00002540 */ 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x73, 0x00, 0x75, 0x00, 0x62, 0x00, 0x73, 0x00, 0x65, 0x00, +/* 00002550 */ 0x74, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x75, 0x00, +/* 00002560 */ 0x6D, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x65, 0x00, 0x67, 0x00, 0x65, 0x00, 0x72, 0x00, +/* 00002570 */ 0x44, 0x00, 0x69, 0x00, 0x67, 0x00, 0x69, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x6D, 0x00, +/* 00002580 */ 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x46, 0x00, 0x72, 0x00, +/* 00002590 */ 0x61, 0x00, 0x63, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x44, 0x00, 0x69, 0x00, +/* 000025A0 */ 0x67, 0x00, 0x69, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x78, 0x00, +/* 000025B0 */ 0x69, 0x00, 0x6D, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x46, 0x00, 0x72, 0x00, 0x61, 0x00, 0x63, 0x00, +/* 000025C0 */ 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x44, 0x00, 0x69, 0x00, 0x67, 0x00, 0x69, 0x00, +/* 000025D0 */ 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x6D, 0x00, +/* 000025E0 */ 0x75, 0x00, 0x6D, 0x00, 0x53, 0x00, 0x69, 0x00, 0x67, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x66, 0x00, +/* 000025F0 */ 0x69, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x44, 0x00, 0x69, 0x00, 0x67, 0x00, +/* 00002600 */ 0x69, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x78, 0x00, 0x69, 0x00, +/* 00002610 */ 0x6D, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x53, 0x00, 0x69, 0x00, 0x67, 0x00, 0x6E, 0x00, 0x69, 0x00, +/* 00002620 */ 0x66, 0x00, 0x69, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x44, 0x00, 0x69, 0x00, +/* 00002630 */ 0x67, 0x00, 0x69, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x62, 0x00, 0x65, 0x00, 0x73, 0x00, +/* 00002640 */ 0x74, 0x00, 0x20, 0x00, 0x66, 0x00, 0x69, 0x00, 0x74, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, +/* 00002650 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x4D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x63, 0x00, +/* 00002660 */ 0x68, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x67, 0x00, +/* 00002670 */ 0x74, 0x00, 0x68, 0x00, 0x00, 0x00, 0x68, 0x00, 0x69, 0x00, 0x64, 0x00, 0x64, 0x00, 0x65, 0x00, +/* 00002680 */ 0x6E, 0x00, 0x4F, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x00, 0x00, +/* 00002690 */ 0x66, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, +/* 000026A0 */ 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x64, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, +/* 000026B0 */ 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, +/* 000026C0 */ 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 000026D0 */ 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x43, 0x00, +/* 000026E0 */ 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00, 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, +/* 000026F0 */ 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x43, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, +/* 00002700 */ 0x00, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, +/* 00002710 */ 0x72, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, +/* 00002720 */ 0x70, 0x00, 0x65, 0x00, 0x00, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, +/* 00002730 */ 0x67, 0x00, 0x00, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, +/* 00002740 */ 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, +/* 00002750 */ 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 00002760 */ 0x65, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00, 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, +/* 00002770 */ 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x43, 0x00, 0x6F, 0x00, +/* 00002780 */ 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x49, 0x00, +/* 00002790 */ 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, +/* 000027A0 */ 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, +/* 000027B0 */ 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x63, 0x00, +/* 000027C0 */ 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00, 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, 0x00, 0x00, 0x70, 0x00, +/* 000027D0 */ 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, +/* 000027E0 */ 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x75, 0x00, +/* 000027F0 */ 0x63, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, +/* 00002800 */ 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, +/* 00002810 */ 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, +/* 00002820 */ 0x6C, 0x00, 0x2E, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 00002830 */ 0x6F, 0x00, 0x72, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, +/* 00002840 */ 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, +/* 00002850 */ 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, +/* 00002860 */ 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x00, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, +/* 00002870 */ 0x20, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00, 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, +/* 00002880 */ 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00, 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, +/* 00002890 */ 0x00, 0x00, 0x75, 0x00, 0x73, 0x00, 0x61, 0x00, 0x67, 0x00, 0x65, 0x00, 0x00, 0x00, 0x73, 0x00, +/* 000028A0 */ 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x00, 0x00, 0x73, 0x00, 0x65, 0x00, 0x61, 0x00, 0x72, 0x00, +/* 000028B0 */ 0x63, 0x00, 0x68, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x00, 0x00, 0x6B, 0x00, 0x6E, 0x00, +/* 000028C0 */ 0x00, 0x00, 0x6B, 0x00, 0x66, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x65, 0x00, +/* 000028D0 */ 0x72, 0x00, 0x69, 0x00, 0x63, 0x00, 0x00, 0x00, 0x63, 0x00, 0x61, 0x00, 0x73, 0x00, 0x65, 0x00, +/* 000028E0 */ 0x46, 0x00, 0x69, 0x00, 0x72, 0x00, 0x73, 0x00, 0x74, 0x00, 0x00, 0x00, 0x75, 0x00, 0x70, 0x00, +/* 000028F0 */ 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x65, 0x00, +/* 00002900 */ 0x72, 0x00, 0x00, 0x00, 0x66, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, +/* 00002910 */ 0x64, 0x00, 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x00, 0x00, +/* 00002920 */ 0x73, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x76, 0x00, +/* 00002930 */ 0x69, 0x00, 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x62, 0x00, 0x61, 0x00, 0x73, 0x00, 0x65, 0x00, +/* 00002940 */ 0x00, 0x00, 0x61, 0x00, 0x63, 0x00, 0x63, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x00, 0x00, +/* 00002950 */ 0x63, 0x00, 0x61, 0x00, 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, 0x76, 0x00, 0x61, 0x00, 0x72, 0x00, +/* 00002960 */ 0x69, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x00, 0x00, 0x69, 0x00, 0x67, 0x00, 0x6E, 0x00, +/* 00002970 */ 0x6F, 0x00, 0x72, 0x00, 0x65, 0x00, 0x50, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x74, 0x00, +/* 00002980 */ 0x75, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x6D, 0x00, +/* 00002990 */ 0x61, 0x00, 0x74, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x63, 0x00, +/* 000029A0 */ 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, +/* 000029B0 */ 0x00, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 000029C0 */ 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x64, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, +/* 000029D0 */ 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, +/* 000029E0 */ 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00, 0x61, 0x00, +/* 000029F0 */ 0x72, 0x00, 0x65, 0x00, 0x00, 0x00, 0x62, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x64, 0x00, +/* 00002A00 */ 0x43, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00, 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, 0x00, 0x00, +/* 00002A10 */ 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 00002A20 */ 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, +/* 00002A30 */ 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00, 0x61, 0x00, +/* 00002A40 */ 0x72, 0x00, 0x65, 0x00, 0x00, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, +/* 00002A50 */ 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, +/* 00002A60 */ 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x72, 0x00, 0x65, 0x00, +/* 00002A70 */ 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4F, 0x00, 0x70, 0x00, +/* 00002A80 */ 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, +/* 00002A90 */ 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, +/* 00002AA0 */ 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, +/* 00002AB0 */ 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, +/* 00002AC0 */ 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, +/* 00002AD0 */ 0x74, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, +/* 00002AE0 */ 0x70, 0x00, 0x65, 0x00, 0x00, 0x00, 0x55, 0x00, 0x6E, 0x00, 0x77, 0x00, 0x72, 0x00, 0x61, 0x00, +/* 00002AF0 */ 0x70, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, +/* 00002B00 */ 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x75, 0x00, +/* 00002B10 */ 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, +/* 00002B20 */ 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, +/* 00002B30 */ 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x74, 0x00, 0x6F, 0x00, +/* 00002B40 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, +/* 00002B50 */ 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, +/* 00002B60 */ 0x6C, 0x00, 0x2E, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, +/* 00002B70 */ 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x49, 0x00, +/* 00002B80 */ 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, +/* 00002B90 */ 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 00002BA0 */ 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, +/* 00002BB0 */ 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, +/* 00002BC0 */ 0x74, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x4E, 0x00, +/* 00002BD0 */ 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 00002BE0 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, +/* 00002BF0 */ 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x6F, 0x00, +/* 00002C00 */ 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x50, 0x00, 0x61, 0x00, +/* 00002C10 */ 0x72, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, +/* 00002C20 */ 0x2E, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, +/* 00002C30 */ 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, +/* 00002C40 */ 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, +/* 00002C50 */ 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x64, 0x00, +/* 00002C60 */ 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x00, 0x00, +/* 00002C70 */ 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x20, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, +/* 00002C80 */ 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, +/* 00002C90 */ 0x74, 0x00, 0x00, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 00002CA0 */ 0x54, 0x00, 0x6F, 0x00, 0x50, 0x00, 0x61, 0x00, 0x72, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, +/* 00002CB0 */ 0x6E, 0x00, 0x75, 0x00, 0x00, 0x00, 0x73, 0x00, 0x74, 0x00, 0x79, 0x00, 0x6C, 0x00, 0x65, 0x00, +/* 00002CC0 */ 0x00, 0x00, 0x64, 0x00, 0x65, 0x00, 0x63, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 00002CD0 */ 0x00, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x63, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, +/* 00002CE0 */ 0x00, 0x00, 0x63, 0x00, 0x75, 0x00, 0x72, 0x00, 0x72, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x63, 0x00, +/* 00002CF0 */ 0x79, 0x00, 0x00, 0x00, 0x63, 0x00, 0x75, 0x00, 0x72, 0x00, 0x72, 0x00, 0x65, 0x00, 0x6E, 0x00, +/* 00002D00 */ 0x63, 0x00, 0x79, 0x00, 0x44, 0x00, 0x69, 0x00, 0x73, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x61, 0x00, +/* 00002D10 */ 0x79, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x64, 0x00, 0x65, 0x00, 0x00, 0x00, 0x73, 0x00, +/* 00002D20 */ 0x79, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x75, 0x00, 0x73, 0x00, +/* 00002D30 */ 0x65, 0x00, 0x47, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x70, 0x00, 0x69, 0x00, 0x6E, 0x00, +/* 00002D40 */ 0x67, 0x00, 0x00, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, +/* 00002D50 */ 0x6C, 0x00, 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, +/* 00002D60 */ 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, +/* 00002D70 */ 0x74, 0x00, 0x00, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, +/* 00002D80 */ 0x6C, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, +/* 00002D90 */ 0x00, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, +/* 00002DA0 */ 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, +/* 00002DB0 */ 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, +/* 00002DC0 */ 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x4E, 0x00, +/* 00002DD0 */ 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 00002DE0 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, +/* 00002DF0 */ 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x6F, 0x00, +/* 00002E00 */ 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x50, 0x00, 0x61, 0x00, +/* 00002E10 */ 0x72, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, +/* 00002E20 */ 0x65, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x53, 0x00, 0x79, 0x00, 0x73, 0x00, +/* 00002E30 */ 0x74, 0x00, 0x65, 0x00, 0x6D, 0x00, 0x00, 0x00, 0x62, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x6E, 0x00, +/* 00002E40 */ 0x64, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, +/* 00002E50 */ 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, +/* 00002E60 */ 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, +/* 00002E70 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, +/* 00002E80 */ 0x6E, 0x00, 0x67, 0x00, 0x49, 0x00, 0x6D, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6D, 0x00, +/* 00002E90 */ 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, +/* 00002EA0 */ 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, +/* 00002EB0 */ 0x65, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x65, 0x00, +/* 00002EC0 */ 0x6E, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x50, 0x00, +/* 00002ED0 */ 0x61, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x46, 0x00, 0x6F, 0x00, +/* 00002EE0 */ 0x72, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, +/* 00002EF0 */ 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 00002F00 */ 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, +/* 00002F10 */ 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, +/* 00002F20 */ 0x74, 0x00, 0x00, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00002F30 */ 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, +/* 00002F40 */ 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x44, 0x00, 0x61, 0x00, +/* 00002F50 */ 0x74, 0x00, 0x65, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, +/* 00002F60 */ 0x63, 0x00, 0x65, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, +/* 00002F70 */ 0x6C, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, +/* 00002F80 */ 0x44, 0x00, 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x43, 0x00, +/* 00002F90 */ 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x00, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 00002FA0 */ 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 00002FB0 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, +/* 00002FC0 */ 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x00, 0x00, 0x55, 0x00, 0x6E, 0x00, 0x77, 0x00, +/* 00002FD0 */ 0x72, 0x00, 0x61, 0x00, 0x70, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, +/* 00002FE0 */ 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, +/* 00002FF0 */ 0x74, 0x00, 0x00, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6E, 0x00, +/* 00003000 */ 0x61, 0x00, 0x72, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x00, 0x00, 0x73, 0x00, 0x68, 0x00, +/* 00003010 */ 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x67, 0x00, +/* 00003020 */ 0x00, 0x00, 0x32, 0x00, 0x2D, 0x00, 0x64, 0x00, 0x69, 0x00, 0x67, 0x00, 0x69, 0x00, 0x74, 0x00, +/* 00003030 */ 0x00, 0x00, 0x77, 0x00, 0x65, 0x00, 0x65, 0x00, 0x6B, 0x00, 0x64, 0x00, 0x61, 0x00, 0x79, 0x00, +/* 00003040 */ 0x00, 0x00, 0x65, 0x00, 0x72, 0x00, 0x61, 0x00, 0x00, 0x00, 0x79, 0x00, 0x65, 0x00, 0x61, 0x00, +/* 00003050 */ 0x72, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x68, 0x00, 0x00, 0x00, +/* 00003060 */ 0x64, 0x00, 0x61, 0x00, 0x79, 0x00, 0x00, 0x00, 0x68, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x72, 0x00, +/* 00003070 */ 0x00, 0x00, 0x6D, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, +/* 00003080 */ 0x73, 0x00, 0x65, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x00, 0x00, 0x74, 0x00, +/* 00003090 */ 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x5A, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x4E, 0x00, +/* 000030A0 */ 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, +/* 000030B0 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 000030C0 */ 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, 0x74, 0x00, +/* 000030D0 */ 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x54, 0x00, +/* 000030E0 */ 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, +/* 000030F0 */ 0x67, 0x00, 0x00, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x70, 0x00, +/* 00003100 */ 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, +/* 00003110 */ 0x2E, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 00003120 */ 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, +/* 00003130 */ 0x61, 0x00, 0x6E, 0x00, 0x79, 0x00, 0x00, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x00, 0x00, +/* 00003140 */ 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, +/* 00003150 */ 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x74, 0x00, +/* 00003160 */ 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x44, 0x00, +/* 00003170 */ 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, +/* 00003180 */ 0x67, 0x00, 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, 0x44, 0x00, +/* 00003190 */ 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, +/* 000031A0 */ 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x74, 0x00, 0x6F, 0x00, +/* 000031B0 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, +/* 000031C0 */ 0x6D, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, +/* 000031D0 */ 0x00, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, +/* 000031E0 */ 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, +/* 000031F0 */ 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, +/* 00003200 */ 0x74, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x44, 0x00, +/* 00003210 */ 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, +/* 00003220 */ 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, +/* 00003230 */ 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, +/* 00003240 */ 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x49, 0x00, +/* 00003250 */ 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00003260 */ 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, +/* 00003270 */ 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, +/* 00003280 */ 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 00003290 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x50, 0x00, 0x61, 0x00, 0x72, 0x00, +/* 000032A0 */ 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, +/* 000032B0 */ 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, +/* 000032C0 */ 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, +/* 000032D0 */ 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, +/* 000032E0 */ 0x2E, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, +/* 000032F0 */ 0x64, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, +/* 00003300 */ 0x00, 0x00, 0x73, 0x00, 0x79, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x46, 0x00, +/* 00003310 */ 0x6F, 0x00, 0x72, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, +/* 00003320 */ 0x00, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x46, 0x00, +/* 00003330 */ 0x6F, 0x00, 0x72, 0x00, 0x53, 0x00, 0x79, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x6F, 0x00, 0x6C, 0x00, +/* 00003340 */ 0x00, 0x00, 0x73, 0x00, 0x79, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x4C, 0x00, +/* 00003350 */ 0x65, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x74, 0x00, 0x68, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 00003360 */ 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x6F, 0x00, +/* 00003370 */ 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 00003380 */ 0x53, 0x00, 0x79, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x4C, 0x00, 0x65, 0x00, +/* 00003390 */ 0x6E, 0x00, 0x67, 0x00, 0x74, 0x00, 0x68, 0x00, 0x00, 0x00, 0x70, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 000033A0 */ 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x48, 0x00, +/* 000033B0 */ 0x6F, 0x00, 0x75, 0x00, 0x72, 0x00, 0x43, 0x00, 0x79, 0x00, 0x63, 0x00, 0x6C, 0x00, 0x65, 0x00, +/* 000033C0 */ 0x00, 0x00, 0x68, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x72, 0x00, 0x43, 0x00, 0x79, 0x00, 0x63, 0x00, +/* 000033D0 */ 0x6C, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x50, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 000033E0 */ 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0x47, 0x00, +/* 000033F0 */ 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x4D, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x6A, 0x00, +/* 00003400 */ 0x00, 0x00, 0x68, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x72, 0x00, 0x31, 0x00, 0x32, 0x00, 0x00, 0x00, +/* 00003410 */ 0x68, 0x00, 0x00, 0x00, 0x68, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x72, 0x00, 0x32, 0x00, 0x34, 0x00, +/* 00003420 */ 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, 0x7A, 0x00, +/* 00003430 */ 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 0x4C, 0x00, +/* 00003440 */ 0x00, 0x00, 0x4B, 0x00, 0x00, 0x00, 0x6B, 0x00, 0x00, 0x00, 0x5A, 0x00, 0x00, 0x00, 0x76, 0x00, +/* 00003450 */ 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x4F, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x78, 0x00, +/* 00003460 */ 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x34, 0x00, +/* 00003470 */ 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x68, 0x00, 0x31, 0x00, 0x32, 0x00, 0x00, 0x00, 0x68, 0x00, +/* 00003480 */ 0x32, 0x00, 0x33, 0x00, 0x00, 0x00, 0x68, 0x00, 0x31, 0x00, 0x31, 0x00, 0x00, 0x00, 0x68, 0x00, +/* 00003490 */ 0x32, 0x00, 0x34, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x68, 0x00, +/* 000034A0 */ 0x6F, 0x00, 0x75, 0x00, 0x72, 0x00, 0x43, 0x00, 0x79, 0x00, 0x63, 0x00, 0x6C, 0x00, 0x65, 0x00, +/* 000034B0 */ 0x00, 0x00, 0x63, 0x00, 0x61, 0x00, 0x00, 0x00, 0x68, 0x00, 0x63, 0x00, 0x00, 0x00, 0x45, 0x00, +/* 000034C0 */ 0x74, 0x00, 0x63, 0x00, 0x2F, 0x00, 0x55, 0x00, 0x6E, 0x00, 0x6B, 0x00, 0x6E, 0x00, 0x6F, 0x00, +/* 000034D0 */ 0x77, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x5A, 0x00, +/* 000034E0 */ 0x6F, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x00, 0x00, 0x49, 0x00, 0x41, 0x00, 0x4E, 0x00, 0x41, 0x00, +/* 000034F0 */ 0x20, 0x00, 0x5A, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x20, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 00003500 */ 0x20, 0x00, 0x4C, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x6B, 0x00, 0x20, 0x00, 0x6E, 0x00, 0x61, 0x00, +/* 00003510 */ 0x6D, 0x00, 0x65, 0x00, 0x20, 0x00, 0x28, 0x00, 0x41, 0x00, 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, +/* 00003520 */ 0x2F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, +/* 00003530 */ 0x6E, 0x00, 0x29, 0x00, 0x00, 0x00, 0x45, 0x00, 0x74, 0x00, 0x63, 0x00, 0x2F, 0x00, 0x55, 0x00, +/* 00003540 */ 0x54, 0x00, 0x43, 0x00, 0x00, 0x00, 0x45, 0x00, 0x74, 0x00, 0x63, 0x00, 0x2F, 0x00, 0x47, 0x00, +/* 00003550 */ 0x4D, 0x00, 0x54, 0x00, 0x00, 0x00, 0x55, 0x00, 0x54, 0x00, 0x43, 0x00, 0x00, 0x00, 0x66, 0x00, +/* 00003560 */ 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x4D, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 00003570 */ 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x62, 0x00, 0x61, 0x00, 0x73, 0x00, +/* 00003580 */ 0x69, 0x00, 0x63, 0x00, 0x00, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, +/* 00003590 */ 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x64, 0x00, 0x44, 0x00, 0x61, 0x00, +/* 000035A0 */ 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, +/* 000035B0 */ 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x65, 0x00, +/* 000035C0 */ 0x64, 0x00, 0x44, 0x00, 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x74, 0x00, +/* 000035D0 */ 0x73, 0x00, 0x00, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 000035E0 */ 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, +/* 000035F0 */ 0x54, 0x00, 0x6F, 0x00, 0x50, 0x00, 0x61, 0x00, 0x72, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, +/* 00003600 */ 0x49, 0x00, 0x6E, 0x00, 0x76, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x64, 0x00, 0x20, 0x00, +/* 00003610 */ 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x74, 0x00, +/* 00003620 */ 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x31, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x74, 0x00, +/* 00003630 */ 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x32, 0x00, 0x00, 0x00, 0x63, 0x00, 0x61, 0x00, 0x63, 0x00, +/* 00003640 */ 0x68, 0x00, 0x65, 0x00, 0x53, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x00, 0x00, 0x64, 0x00, +/* 00003650 */ 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x5F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, +/* 00003660 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, +/* 00003670 */ 0x6E, 0x00, 0x67, 0x00, 0x5F, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x72, 0x00, 0x79, 0x00, +/* 00003680 */ 0x50, 0x00, 0x6F, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, +/* 00003690 */ 0x74, 0x00, 0x65, 0x00, 0x5F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, +/* 000036A0 */ 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x53, 0x00, +/* 000036B0 */ 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x5F, 0x00, 0x65, 0x00, 0x6E, 0x00, +/* 000036C0 */ 0x74, 0x00, 0x72, 0x00, 0x79, 0x00, 0x50, 0x00, 0x6F, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x74, 0x00, +/* 000036D0 */ 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x5F, 0x00, 0x74, 0x00, 0x6F, 0x00, +/* 000036E0 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, +/* 000036F0 */ 0x6D, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, +/* 00003700 */ 0x5F, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x72, 0x00, 0x79, 0x00, 0x50, 0x00, 0x6F, 0x00, +/* 00003710 */ 0x69, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x00, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00003720 */ 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, +/* 00003730 */ 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, +/* 00003740 */ 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 00003750 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00003760 */ 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, +/* 00003770 */ 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, +/* 00003780 */ 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 00003790 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x50, 0x00, 0x61, 0x00, 0x72, 0x00, +/* 000037A0 */ 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, +/* 000037B0 */ 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, +/* 000037C0 */ 0x69, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x50, 0x00, 0x6C, 0x00, +/* 000037D0 */ 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x52, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x65, 0x00, +/* 000037E0 */ 0x73, 0x00, 0x00, 0x00, 0x52, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, +/* 000037F0 */ 0x65, 0x00, 0x50, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x00, 0x00, +/* 00003800 */ 0x50, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x52, 0x00, 0x75, 0x00, +/* 00003810 */ 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, +/* 00003820 */ 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, +/* 00003830 */ 0x6C, 0x00, 0x2E, 0x00, 0x50, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 00003840 */ 0x52, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, +/* 00003850 */ 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x50, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, +/* 00003860 */ 0x6C, 0x00, 0x52, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x2E, 0x00, 0x73, 0x00, +/* 00003870 */ 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, +/* 00003880 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, +/* 00003890 */ 0x66, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x50, 0x00, +/* 000038A0 */ 0x6C, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x52, 0x00, 0x75, 0x00, 0x6C, 0x00, +/* 000038B0 */ 0x65, 0x00, 0x73, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, +/* 000038C0 */ 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x65, 0x00, 0x6C, 0x00, +/* 000038D0 */ 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x00, 0x00, 0x73, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x65, 0x00, +/* 000038E0 */ 0x63, 0x00, 0x74, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, +/* 000038F0 */ 0x50, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x52, 0x00, 0x75, 0x00, +/* 00003900 */ 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, +/* 00003910 */ 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x72, 0x00, 0x65, 0x00, +/* 00003920 */ 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4F, 0x00, 0x70, 0x00, +/* 00003930 */ 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x00, 0x00, 0x74, 0x00, 0x79, 0x00, +/* 00003940 */ 0x70, 0x00, 0x65, 0x00, 0x00, 0x00, 0x63, 0x00, 0x61, 0x00, 0x72, 0x00, 0x64, 0x00, 0x69, 0x00, +/* 00003950 */ 0x6E, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x64, 0x00, 0x69, 0x00, +/* 00003960 */ 0x6E, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x72, 0x00, +/* 00003970 */ 0x61, 0x00, 0x6C, 0x00, 0x43, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x67, 0x00, 0x6F, 0x00, +/* 00003980 */ 0x72, 0x00, 0x69, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, +/* 00003990 */ 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x64, 0x00, +/* 000039A0 */ 0x50, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x52, 0x00, 0x75, 0x00, +/* 000039B0 */ 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x68, 0x00, 0x65, 0x00, +/* 000039C0 */ 0x72, 0x00, 0x00, 0x00, 0x70, 0x00, 0x72, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x6D, 0x00, 0x6F, 0x00, +/* 000039D0 */ 0x6E, 0x00, 0x74, 0x00, 0x68, 0x00, 0x2E, 0x00, 0x61, 0x00, 0x7D, 0x00, 0x7B, 0x00, 0x64, 0x00, +/* 000039E0 */ 0x61, 0x00, 0x79, 0x00, 0x2E, 0x00, 0x62, 0x00, 0x7D, 0x00, 0x7B, 0x00, 0x68, 0x00, 0x6F, 0x00, +/* 000039F0 */ 0x75, 0x00, 0x72, 0x00, 0x2E, 0x00, 0x63, 0x00, 0x7D, 0x00, 0x7B, 0x00, 0x6D, 0x00, 0x69, 0x00, +/* 00003A00 */ 0x6E, 0x00, 0x75, 0x00, 0x74, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x64, 0x00, 0x7D, 0x00, 0x7B, 0x00, +/* 00003A10 */ 0x73, 0x00, 0x65, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x2E, 0x00, 0x65, 0x00, +/* 00003A20 */ 0x7D, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, +/* 00003A30 */ 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x42, 0x00, +/* 00003A40 */ 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x46, 0x00, 0x69, 0x00, 0x74, 0x00, 0x00, 0x00, 0x72, 0x00, +/* 00003A50 */ 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, +/* 00003A60 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x6F, 0x00, 0x6B, 0x00, +/* 00003A70 */ 0x75, 0x00, 0x70, 0x00, 0x00, 0x00, 0x66, 0x00, 0x69, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00003A80 */ 0x72, 0x00, 0x65, 0x00, 0x64, 0x00, 0x00, 0x00, 0x65, 0x00, 0x78, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00003A90 */ 0x6E, 0x00, 0x73, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x46, 0x00, 0x69, 0x00, 0x6C, 0x00, +/* 00003AA0 */ 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x2D, 0x00, 0x75, 0x00, 0x2D, 0x00, 0x00, 0x00, +/* 00003AB0 */ 0x73, 0x00, 0x75, 0x00, 0x62, 0x00, 0x54, 0x00, 0x61, 0x00, 0x67, 0x00, 0x73, 0x00, 0x00, 0x00, +/* 00003AC0 */ 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x57, 0x00, 0x69, 0x00, +/* 00003AD0 */ 0x74, 0x00, 0x68, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x74, 0x00, 0x53, 0x00, 0x75, 0x00, 0x62, 0x00, +/* 00003AE0 */ 0x74, 0x00, 0x61, 0x00, 0x67, 0x00, 0x73, 0x00, 0x00, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x2A, 0x00, +/* 00003AF0 */ 0x3F, 0x00, 0x29, 0x00, 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x2D, 0x00, 0x75, 0x00, 0x29, 0x00, +/* 00003B00 */ 0x3F, 0x00, 0x24, 0x00, 0x00, 0x00, 0x28, 0x00, 0x5B, 0x00, 0x5E, 0x00, 0x2D, 0x00, 0x5D, 0x00, +/* 00003B10 */ 0x2A, 0x00, 0x29, 0x00, 0x2D, 0x00, 0x3F, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x2A, 0x00, 0x29, 0x00, +/* 00003B20 */ 0x3F, 0x00, 0x00, 0x00, 0x28, 0x00, 0x5B, 0x00, 0x5E, 0x00, 0x5F, 0x00, 0x5D, 0x00, 0x2A, 0x00, +/* 00003B30 */ 0x29, 0x00, 0x2E, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x55, 0x00, 0x69, 0x00, +/* 00003B40 */ 0x6E, 0x00, 0x74, 0x00, 0x33, 0x00, 0x32, 0x00, 0x00, 0x00, 0x48, 0x00, 0x61, 0x00, 0x73, 0x00, +/* 00003B50 */ 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x74, 0x00, 0x79, 0x00, +/* 00003B60 */ 0x00, 0x00, 0x29, 0x00, 0x2A, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x73, 0x00, 0x65, 0x00, +/* 00003B70 */ 0x65, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 00003B80 */ 0x65, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x00, 0x00, +/* 00003B90 */ 0x66, 0x00, 0x69, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x64, 0x00, +/* 00003BA0 */ 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x4C, 0x00, 0x6F, 0x00, +/* 00003BB0 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5B, 0x00, 0x27, 0x00, 0x62, 0x00, +/* 00003BC0 */ 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x20, 0x00, 0x66, 0x00, 0x69, 0x00, 0x74, 0x00, 0x27, 0x00, +/* 00003BD0 */ 0x2C, 0x00, 0x20, 0x00, 0x27, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x6F, 0x00, 0x6B, 0x00, 0x75, 0x00, +/* 00003BE0 */ 0x70, 0x00, 0x27, 0x00, 0x5D, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, +/* 00003BF0 */ 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x5F, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, +/* 00003C00 */ 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, +/* 00003C10 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x5F, 0x00, +/* 00003C20 */ 0x64, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x6D, 0x00, 0x79, 0x00, 0x4E, 0x00, 0x61, 0x00, 0x6D, 0x00, +/* 00003C30 */ 0x65, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, +/* 00003C40 */ 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x5F, 0x00, 0x73, 0x00, +/* 00003C50 */ 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, +/* 00003C60 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, +/* 00003C70 */ 0x66, 0x00, 0x5F, 0x00, 0x64, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x6D, 0x00, 0x79, 0x00, 0x4E, 0x00, +/* 00003C80 */ 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00003C90 */ 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, +/* 00003CA0 */ 0x61, 0x00, 0x74, 0x00, 0x5F, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, +/* 00003CB0 */ 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, +/* 00003CC0 */ 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x5F, 0x00, 0x64, 0x00, 0x75, 0x00, +/* 00003CD0 */ 0x6D, 0x00, 0x6D, 0x00, 0x79, 0x00, 0x4E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, +/* 00003CE0 */ 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x6F, 0x00, 0x6E, 0x00, +/* 00003CF0 */ 0x69, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, +/* 00003D00 */ 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x5F, 0x00, 0x64, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x6D, 0x00, +/* 00003D10 */ 0x79, 0x00, 0x4E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x74, 0x00, 0x6F, 0x00, +/* 00003D20 */ 0x52, 0x00, 0x65, 0x00, 0x74, 0x00, 0x75, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x63, 0x00, +/* 00003D30 */ 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, +/* 00003D40 */ 0x56, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x65, 0x00, 0x73, 0x00, 0x46, 0x00, 0x6F, 0x00, +/* 00003D50 */ 0x72, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, +/* 00003D60 */ 0x72, 0x00, 0x65, 0x00, 0x76, 0x00, 0x65, 0x00, 0x72, 0x00, 0x73, 0x00, 0x65, 0x00, 0x64, 0x00, +/* 00003D70 */ 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, +/* 00003D80 */ 0x6E, 0x00, 0x56, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, +/* 00003D90 */ 0x2D, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x2D, 0x00, 0x75, 0x00, 0x28, 0x00, +/* 00003DA0 */ 0x3F, 0x00, 0x3A, 0x00, 0x2D, 0x00, 0x5B, 0x00, 0x5E, 0x00, 0x5C, 0x00, 0x2D, 0x00, 0x5D, 0x00, +/* 00003DB0 */ 0x5B, 0x00, 0x5E, 0x00, 0x5C, 0x00, 0x2D, 0x00, 0x5D, 0x00, 0x3F, 0x00, 0x2D, 0x00, 0x5B, 0x00, +/* 00003DC0 */ 0x5E, 0x00, 0x5C, 0x00, 0x2D, 0x00, 0x5D, 0x00, 0x2B, 0x00, 0x29, 0x00, 0x2A, 0x00, 0x2D, 0x00, +/* 00003DD0 */ 0x63, 0x00, 0x6F, 0x00, 0x2D, 0x00, 0x28, 0x00, 0x5B, 0x00, 0x5E, 0x00, 0x5C, 0x00, 0x2D, 0x00, +/* 00003DE0 */ 0x5D, 0x00, 0x2B, 0x00, 0x29, 0x00, 0x2E, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x28, 0x00, 0x5B, 0x00, +/* 00003DF0 */ 0x5E, 0x00, 0x5F, 0x00, 0x5D, 0x00, 0x2A, 0x00, 0x29, 0x00, 0x5F, 0x00, 0x3F, 0x00, 0x28, 0x00, +/* 00003E00 */ 0x2E, 0x00, 0x2B, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x63, 0x00, 0x72, 0x00, 0x65, 0x00, +/* 00003E10 */ 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 00003E20 */ 0x65, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, +/* 00003E30 */ 0x6F, 0x00, 0x6E, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, +/* 00003E40 */ 0x00, 0x00, 0x2D, 0x00, 0x75, 0x00, 0x2D, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x2D, 0x00, 0x00, 0x00, +/* 00003E50 */ 0x5F, 0x00, 0x5F, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, +/* 00003E60 */ 0x6C, 0x00, 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x64, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, +/* 00003E70 */ 0x6C, 0x00, 0x4F, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x00, 0x00, +/* 00003E80 */ 0x41, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x6C, 0x00, 0x6F, 0x00, +/* 00003E90 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x43, 0x00, +/* 00003EA0 */ 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00, 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5F, 0x00, +/* 00003EB0 */ 0x5F, 0x00, 0x75, 0x00, 0x73, 0x00, 0x61, 0x00, 0x67, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5F, 0x00, +/* 00003EC0 */ 0x5F, 0x00, 0x73, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, +/* 00003ED0 */ 0x76, 0x00, 0x69, 0x00, 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x69, 0x00, +/* 00003EE0 */ 0x67, 0x00, 0x6E, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x65, 0x00, 0x50, 0x00, 0x75, 0x00, 0x6E, 0x00, +/* 00003EF0 */ 0x63, 0x00, 0x74, 0x00, 0x75, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, +/* 00003F00 */ 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x73, 0x00, 0x65, 0x00, 0x46, 0x00, +/* 00003F10 */ 0x69, 0x00, 0x72, 0x00, 0x73, 0x00, 0x74, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x6E, 0x00, +/* 00003F20 */ 0x75, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x72, 0x00, 0x69, 0x00, 0x63, 0x00, 0x00, 0x00, 0x73, 0x00, +/* 00003F30 */ 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x64, 0x00, 0x00, 0x00, +/* 00003F40 */ 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x6C, 0x00, +/* 00003F50 */ 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x4D, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 00003F60 */ 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, +/* 00003F70 */ 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, +/* 00003F80 */ 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, +/* 00003F90 */ 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, +/* 00003FA0 */ 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, +/* 00003FB0 */ 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x57, 0x00, +/* 00003FC0 */ 0x69, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x73, 0x00, 0x54, 0x00, 0x6F, 0x00, +/* 00003FD0 */ 0x45, 0x00, 0x63, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, +/* 00003FE0 */ 0x6E, 0x00, 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x4D, 0x00, 0x61, 0x00, 0x70, 0x00, 0x00, 0x00, +/* 00003FF0 */ 0x47, 0x00, 0x72, 0x00, 0x65, 0x00, 0x67, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x69, 0x00, 0x61, 0x00, +/* 00004000 */ 0x6E, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x61, 0x00, +/* 00004010 */ 0x72, 0x00, 0x00, 0x00, 0x67, 0x00, 0x72, 0x00, 0x65, 0x00, 0x67, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 00004020 */ 0x79, 0x00, 0x00, 0x00, 0x48, 0x00, 0x65, 0x00, 0x62, 0x00, 0x72, 0x00, 0x65, 0x00, 0x77, 0x00, +/* 00004030 */ 0x43, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, +/* 00004040 */ 0x00, 0x00, 0x68, 0x00, 0x65, 0x00, 0x62, 0x00, 0x72, 0x00, 0x65, 0x00, 0x77, 0x00, 0x00, 0x00, +/* 00004050 */ 0x48, 0x00, 0x69, 0x00, 0x6A, 0x00, 0x72, 0x00, 0x69, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 00004060 */ 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x69, 0x00, 0x73, 0x00, +/* 00004070 */ 0x6C, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x69, 0x00, 0x63, 0x00, 0x00, 0x00, 0x4A, 0x00, 0x61, 0x00, +/* 00004080 */ 0x70, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x73, 0x00, 0x65, 0x00, 0x43, 0x00, 0x61, 0x00, +/* 00004090 */ 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6A, 0x00, +/* 000040A0 */ 0x61, 0x00, 0x70, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, +/* 000040B0 */ 0x4A, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x43, 0x00, 0x61, 0x00, +/* 000040C0 */ 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6A, 0x00, +/* 000040D0 */ 0x75, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x4B, 0x00, 0x6F, 0x00, +/* 000040E0 */ 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, +/* 000040F0 */ 0x6E, 0x00, 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6B, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 00004100 */ 0x65, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x55, 0x00, 0x6D, 0x00, 0x41, 0x00, 0x6C, 0x00, +/* 00004110 */ 0x51, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, +/* 00004120 */ 0x6E, 0x00, 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x69, 0x00, 0x73, 0x00, 0x6C, 0x00, +/* 00004130 */ 0x61, 0x00, 0x6D, 0x00, 0x69, 0x00, 0x63, 0x00, 0x2D, 0x00, 0x63, 0x00, 0x69, 0x00, 0x76, 0x00, +/* 00004140 */ 0x69, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x54, 0x00, 0x68, 0x00, 0x61, 0x00, 0x69, 0x00, 0x43, 0x00, +/* 00004150 */ 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, +/* 00004160 */ 0x74, 0x00, 0x68, 0x00, 0x61, 0x00, 0x69, 0x00, 0x00, 0x00, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, +/* 00004170 */ 0x77, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, +/* 00004180 */ 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x74, 0x00, 0x61, 0x00, 0x69, 0x00, 0x77, 0x00, +/* 00004190 */ 0x61, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x45, 0x00, 0x63, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x4F, 0x00, +/* 000041A0 */ 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x54, 0x00, 0x6F, 0x00, +/* 000041B0 */ 0x57, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x73, 0x00, 0x54, 0x00, +/* 000041C0 */ 0x65, 0x00, 0x6D, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, +/* 000041D0 */ 0x57, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x73, 0x00, 0x54, 0x00, +/* 000041E0 */ 0x6F, 0x00, 0x45, 0x00, 0x63, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 000041F0 */ 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, +/* 00004200 */ 0x72, 0x00, 0x72, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x57, 0x00, 0x65, 0x00, 0x65, 0x00, +/* 00004210 */ 0x6B, 0x00, 0x64, 0x00, 0x61, 0x00, 0x79, 0x00, 0x45, 0x00, 0x72, 0x00, 0x61, 0x00, 0x4D, 0x00, +/* 00004220 */ 0x6F, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x68, 0x00, 0x50, 0x00, 0x61, 0x00, 0x74, 0x00, 0x74, 0x00, +/* 00004230 */ 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x72, 0x00, +/* 00004240 */ 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x44, 0x00, 0x61, 0x00, 0x79, 0x00, 0x48, 0x00, 0x6F, 0x00, +/* 00004250 */ 0x75, 0x00, 0x72, 0x00, 0x4D, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00004260 */ 0x53, 0x00, 0x65, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x4D, 0x00, 0x6F, 0x00, +/* 00004270 */ 0x6E, 0x00, 0x74, 0x00, 0x68, 0x00, 0x50, 0x00, 0x61, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00004280 */ 0x72, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x75, 0x00, 0x70, 0x00, 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 00004290 */ 0x65, 0x00, 0x50, 0x00, 0x61, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, +/* 000042A0 */ 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x73, 0x00, 0x00, 0x00, +/* 000042B0 */ 0x74, 0x00, 0x65, 0x00, 0x6D, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 000042C0 */ 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, 0x79, 0x00, 0x6F, 0x00, 0x66, 0x00, 0x77, 0x00, 0x65, 0x00, +/* 000042D0 */ 0x65, 0x00, 0x6B, 0x00, 0x2E, 0x00, 0x61, 0x00, 0x62, 0x00, 0x62, 0x00, 0x72, 0x00, 0x65, 0x00, +/* 000042E0 */ 0x76, 0x00, 0x69, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x00, 0x00, 0x64, 0x00, +/* 000042F0 */ 0x61, 0x00, 0x79, 0x00, 0x6F, 0x00, 0x66, 0x00, 0x77, 0x00, 0x65, 0x00, 0x65, 0x00, 0x6B, 0x00, +/* 00004300 */ 0x2E, 0x00, 0x66, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x79, 0x00, 0x65, 0x00, +/* 00004310 */ 0x61, 0x00, 0x72, 0x00, 0x2E, 0x00, 0x61, 0x00, 0x62, 0x00, 0x62, 0x00, 0x72, 0x00, 0x65, 0x00, +/* 00004320 */ 0x76, 0x00, 0x69, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x00, 0x00, 0x79, 0x00, +/* 00004330 */ 0x65, 0x00, 0x61, 0x00, 0x72, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x6C, 0x00, +/* 00004340 */ 0x00, 0x00, 0x6D, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x68, 0x00, 0x2E, 0x00, 0x6E, 0x00, +/* 00004350 */ 0x75, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x72, 0x00, 0x69, 0x00, 0x63, 0x00, 0x00, 0x00, 0x6D, 0x00, +/* 00004360 */ 0x6F, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x68, 0x00, 0x2E, 0x00, 0x61, 0x00, 0x62, 0x00, 0x62, 0x00, +/* 00004370 */ 0x72, 0x00, 0x65, 0x00, 0x76, 0x00, 0x69, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, +/* 00004380 */ 0x00, 0x00, 0x6D, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x68, 0x00, 0x2E, 0x00, 0x66, 0x00, +/* 00004390 */ 0x75, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, +/* 000043A0 */ 0x7A, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x61, 0x00, 0x62, 0x00, 0x62, 0x00, +/* 000043B0 */ 0x72, 0x00, 0x65, 0x00, 0x76, 0x00, 0x69, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, +/* 000043C0 */ 0x00, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x7A, 0x00, 0x6F, 0x00, 0x6E, 0x00, +/* 000043D0 */ 0x65, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x7B, 0x00, +/* 000043E0 */ 0x28, 0x00, 0x00, 0x00, 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x5C, 0x00, 0x2E, 0x00, 0x73, 0x00, +/* 000043F0 */ 0x6F, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x2E, 0x00, +/* 00004400 */ 0x28, 0x00, 0x5B, 0x00, 0x61, 0x00, 0x2D, 0x00, 0x7A, 0x00, 0x5D, 0x00, 0x2A, 0x00, 0x29, 0x00, +/* 00004410 */ 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x5C, 0x00, 0x28, 0x00, 0x5B, 0x00, 0x30, 0x00, 0x2D, 0x00, +/* 00004420 */ 0x39, 0x00, 0x5D, 0x00, 0x5C, 0x00, 0x29, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x7D, 0x00, 0x00, 0x00, +/* 00004430 */ 0x45, 0x00, 0x72, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x20, 0x00, 0x77, 0x00, 0x68, 0x00, +/* 00004440 */ 0x65, 0x00, 0x6E, 0x00, 0x20, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x72, 0x00, 0x65, 0x00, +/* 00004450 */ 0x63, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x20, 0x00, 0x77, 0x00, 0x69, 0x00, +/* 00004460 */ 0x6E, 0x00, 0x64, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x73, 0x00, 0x20, 0x00, 0x72, 0x00, 0x65, 0x00, +/* 00004470 */ 0x74, 0x00, 0x75, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x64, 0x00, 0x20, 0x00, 0x77, 0x00, +/* 00004480 */ 0x65, 0x00, 0x65, 0x00, 0x6B, 0x00, 0x64, 0x00, 0x61, 0x00, 0x79, 0x00, 0x2F, 0x00, 0x45, 0x00, +/* 00004490 */ 0x72, 0x00, 0x61, 0x00, 0x2F, 0x00, 0x4D, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x68, 0x00, +/* 000044A0 */ 0x20, 0x00, 0x70, 0x00, 0x61, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, +/* 000044B0 */ 0x3B, 0x00, 0x20, 0x00, 0x72, 0x00, 0x65, 0x00, 0x67, 0x00, 0x65, 0x00, 0x78, 0x00, 0x20, 0x00, +/* 000044C0 */ 0x72, 0x00, 0x65, 0x00, 0x74, 0x00, 0x75, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x64, 0x00, +/* 000044D0 */ 0x20, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x20, 0x00, 0x0A, 0x00, +/* 000044E0 */ 0x49, 0x00, 0x6E, 0x00, 0x70, 0x00, 0x75, 0x00, 0x74, 0x00, 0x20, 0x00, 0x77, 0x00, 0x61, 0x00, +/* 000044F0 */ 0x73, 0x00, 0x3A, 0x00, 0x20, 0x00, 0x27, 0x00, 0x00, 0x00, 0x27, 0x00, 0x0A, 0x00, 0x52, 0x00, +/* 00004500 */ 0x65, 0x00, 0x67, 0x00, 0x65, 0x00, 0x78, 0x00, 0x3A, 0x00, 0x20, 0x00, 0x27, 0x00, 0x00, 0x00, +/* 00004510 */ 0x28, 0x00, 0x5C, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x29, 0x00, +/* 00004520 */ 0x3F, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x2E, 0x00, 0x28, 0x00, 0x5B, 0x00, 0x61, 0x00, 0x2D, 0x00, +/* 00004530 */ 0x7A, 0x00, 0x5D, 0x00, 0x2A, 0x00, 0x29, 0x00, 0x28, 0x00, 0x5C, 0x00, 0x28, 0x00, 0x5B, 0x00, +/* 00004540 */ 0x30, 0x00, 0x2D, 0x00, 0x39, 0x00, 0x5D, 0x00, 0x5C, 0x00, 0x29, 0x00, 0x29, 0x00, 0x3F, 0x00, +/* 00004550 */ 0x7D, 0x00, 0x27, 0x00, 0x00, 0x00, 0x66, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x00, 0x00, +/* 00004560 */ 0x7B, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x00, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x61, 0x00, 0x62, 0x00, +/* 00004570 */ 0x62, 0x00, 0x72, 0x00, 0x65, 0x00, 0x76, 0x00, 0x69, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00004580 */ 0x64, 0x00, 0x00, 0x00, 0x61, 0x00, 0x62, 0x00, 0x62, 0x00, 0x72, 0x00, 0x65, 0x00, 0x76, 0x00, +/* 00004590 */ 0x69, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x28, 0x00, 0x31, 0x00, 0x29, 0x00, +/* 000045A0 */ 0x00, 0x00, 0x29, 0x00, 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x5C, 0x00, 0x2E, 0x00, 0x73, 0x00, +/* 000045B0 */ 0x6F, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x5C, 0x00, 0x2E, 0x00, 0x28, 0x00, +/* 000045C0 */ 0x5B, 0x00, 0x61, 0x00, 0x2D, 0x00, 0x7A, 0x00, 0x5D, 0x00, 0x2A, 0x00, 0x29, 0x00, 0x28, 0x00, +/* 000045D0 */ 0x3F, 0x00, 0x3A, 0x00, 0x5C, 0x00, 0x28, 0x00, 0x5B, 0x00, 0x30, 0x00, 0x2D, 0x00, 0x39, 0x00, +/* 000045E0 */ 0x5D, 0x00, 0x5C, 0x00, 0x29, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x45, 0x00, +/* 000045F0 */ 0x72, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x20, 0x00, 0x77, 0x00, 0x68, 0x00, 0x65, 0x00, +/* 00004600 */ 0x6E, 0x00, 0x20, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x72, 0x00, 0x65, 0x00, 0x63, 0x00, +/* 00004610 */ 0x74, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x20, 0x00, 0x77, 0x00, 0x69, 0x00, 0x6E, 0x00, +/* 00004620 */ 0x64, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x73, 0x00, 0x20, 0x00, 0x72, 0x00, 0x65, 0x00, 0x74, 0x00, +/* 00004630 */ 0x75, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x64, 0x00, 0x20, 0x00, 0x64, 0x00, 0x61, 0x00, +/* 00004640 */ 0x79, 0x00, 0x2F, 0x00, 0x68, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x72, 0x00, 0x2F, 0x00, 0x6D, 0x00, +/* 00004650 */ 0x69, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x74, 0x00, 0x65, 0x00, 0x2F, 0x00, 0x73, 0x00, 0x65, 0x00, +/* 00004660 */ 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x2F, 0x00, 0x6D, 0x00, 0x6F, 0x00, 0x6E, 0x00, +/* 00004670 */ 0x74, 0x00, 0x68, 0x00, 0x20, 0x00, 0x70, 0x00, 0x61, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00004680 */ 0x72, 0x00, 0x6E, 0x00, 0x3B, 0x00, 0x20, 0x00, 0x72, 0x00, 0x65, 0x00, 0x67, 0x00, 0x65, 0x00, +/* 00004690 */ 0x78, 0x00, 0x20, 0x00, 0x72, 0x00, 0x65, 0x00, 0x74, 0x00, 0x75, 0x00, 0x72, 0x00, 0x6E, 0x00, +/* 000046A0 */ 0x65, 0x00, 0x64, 0x00, 0x20, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x2E, 0x00, +/* 000046B0 */ 0x20, 0x00, 0x0A, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x70, 0x00, 0x75, 0x00, 0x74, 0x00, 0x20, 0x00, +/* 000046C0 */ 0x77, 0x00, 0x61, 0x00, 0x73, 0x00, 0x3A, 0x00, 0x20, 0x00, 0x27, 0x00, 0x00, 0x00, 0x2E, 0x00, +/* 000046D0 */ 0x69, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x65, 0x00, 0x67, 0x00, 0x65, 0x00, 0x72, 0x00, 0x28, 0x00, +/* 000046E0 */ 0x32, 0x00, 0x29, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 000046F0 */ 0x67, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x74, 0x00, +/* 00004700 */ 0x65, 0x00, 0x67, 0x00, 0x65, 0x00, 0x72, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, +/* 00004710 */ 0x79, 0x00, 0x6F, 0x00, 0x66, 0x00, 0x77, 0x00, 0x65, 0x00, 0x65, 0x00, 0x6B, 0x00, 0x00, 0x00, +/* 00004720 */ 0x45, 0x00, 0x72, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x20, 0x00, 0x77, 0x00, 0x68, 0x00, +/* 00004730 */ 0x65, 0x00, 0x6E, 0x00, 0x20, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x72, 0x00, 0x65, 0x00, +/* 00004740 */ 0x63, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x20, 0x00, 0x77, 0x00, 0x69, 0x00, +/* 00004750 */ 0x6E, 0x00, 0x64, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x73, 0x00, 0x20, 0x00, 0x72, 0x00, 0x65, 0x00, +/* 00004760 */ 0x74, 0x00, 0x75, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x64, 0x00, 0x20, 0x00, 0x79, 0x00, +/* 00004770 */ 0x65, 0x00, 0x61, 0x00, 0x72, 0x00, 0x3B, 0x00, 0x20, 0x00, 0x72, 0x00, 0x65, 0x00, 0x67, 0x00, +/* 00004780 */ 0x65, 0x00, 0x78, 0x00, 0x20, 0x00, 0x72, 0x00, 0x65, 0x00, 0x74, 0x00, 0x75, 0x00, 0x72, 0x00, +/* 00004790 */ 0x6E, 0x00, 0x65, 0x00, 0x64, 0x00, 0x20, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x6C, 0x00, +/* 000047A0 */ 0x00, 0x00, 0x7B, 0x00, 0x79, 0x00, 0x65, 0x00, 0x61, 0x00, 0x72, 0x00, 0x2E, 0x00, 0x61, 0x00, +/* 000047B0 */ 0x62, 0x00, 0x62, 0x00, 0x72, 0x00, 0x65, 0x00, 0x76, 0x00, 0x69, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 000047C0 */ 0x65, 0x00, 0x64, 0x00, 0x28, 0x00, 0x32, 0x00, 0x29, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x7B, 0x00, +/* 000047D0 */ 0x79, 0x00, 0x65, 0x00, 0x61, 0x00, 0x72, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x75, 0x00, 0x6C, 0x00, +/* 000047E0 */ 0x6C, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x7A, 0x00, +/* 000047F0 */ 0x6F, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x7B, 0x00, 0x79, 0x00, 0x65, 0x00, +/* 00004800 */ 0x61, 0x00, 0x72, 0x00, 0x5C, 0x00, 0x2E, 0x00, 0x5B, 0x00, 0x61, 0x00, 0x2D, 0x00, 0x7A, 0x00, +/* 00004810 */ 0x5D, 0x00, 0x2A, 0x00, 0x28, 0x00, 0x5C, 0x00, 0x28, 0x00, 0x5B, 0x00, 0x30, 0x00, 0x2D, 0x00, +/* 00004820 */ 0x39, 0x00, 0x5D, 0x00, 0x5C, 0x00, 0x29, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x5C, 0x00, 0x7D, 0x00, +/* 00004830 */ 0x00, 0x00, 0x31, 0x00, 0x32, 0x00, 0x48, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x72, 0x00, 0x43, 0x00, +/* 00004840 */ 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x6B, 0x00, 0x00, 0x00, 0x32, 0x00, 0x34, 0x00, 0x48, 0x00, +/* 00004850 */ 0x6F, 0x00, 0x75, 0x00, 0x72, 0x00, 0x43, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x6B, 0x00, +/* 00004860 */ 0x00, 0x00, 0x6E, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x00, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00004870 */ 0x6D, 0x00, 0x70, 0x00, 0x00, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, +/* 00004880 */ 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, +/* 00004890 */ 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, +/* 000048A0 */ 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, +/* 000048B0 */ 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, +/* 000048C0 */ 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x00, 0x00, 0xFE, 0x9B, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x6A, +/* 000048D0 */ 0x00, 0x00, 0x00, 0x9B, 0x00, 0x00, 0x00, 0xE7, 0x00, 0x00, 0x00, 0x51, 0x01, 0x00, 0x00, 0xBB, +/* 000048E0 */ 0x01, 0x00, 0x00, 0xBC, 0x01, 0x00, 0x00, 0xCA, 0x01, 0x00, 0x00, 0xDB, 0x01, 0x00, 0x00, 0x03, +/* 000048F0 */ 0x02, 0x00, 0x00, 0x2C, 0x02, 0x00, 0x00, 0x2D, 0x02, 0x00, 0x00, 0xA7, 0x02, 0x00, 0x00, 0xC6, +/* 00004900 */ 0x02, 0x00, 0x00, 0xC7, 0x02, 0x00, 0x00, 0xFA, 0x02, 0x00, 0x00, 0x39, 0x03, 0x00, 0x00, 0x5E, +/* 00004910 */ 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0xC5, 0x03, 0x00, 0x00, 0xC6, 0x03, 0x00, 0x00, 0xD7, +/* 00004920 */ 0x03, 0x00, 0x00, 0xFA, 0x03, 0x00, 0x00, 0xFB, 0x03, 0x00, 0x00, 0x0C, 0x04, 0x00, 0x00, 0x41, +/* 00004930 */ 0x04, 0x00, 0x00, 0x7A, 0x04, 0x00, 0x00, 0xBB, 0x04, 0x00, 0x00, 0xBC, 0x04, 0x00, 0x00, 0xFD, +/* 00004940 */ 0x04, 0x00, 0x00, 0x35, 0x05, 0x00, 0x00, 0x36, 0x05, 0x00, 0x00, 0xB0, 0x05, 0x00, 0x00, 0x11, +/* 00004950 */ 0x06, 0x00, 0x00, 0xA0, 0x06, 0x00, 0x00, 0x0B, 0x07, 0x00, 0x00, 0x2C, 0x07, 0x00, 0x00, 0x42, +/* 00004960 */ 0x07, 0x00, 0x00, 0x54, 0x07, 0x00, 0x00, 0x74, 0x07, 0x00, 0x00, 0x75, 0x07, 0x00, 0x00, 0x8C, +/* 00004970 */ 0x07, 0x00, 0x00, 0xD6, 0x07, 0x00, 0x00, 0xE5, 0x07, 0x00, 0x00, 0xE6, 0x07, 0x00, 0x00, 0x04, +/* 00004980 */ 0x08, 0x00, 0x00, 0x2F, 0x08, 0x00, 0x00, 0x4B, 0x08, 0x00, 0x00, 0x5D, 0x08, 0x00, 0x00, 0x5E, +/* 00004990 */ 0x08, 0x00, 0x00, 0xBB, 0x08, 0x00, 0x00, 0xE9, 0x08, 0x00, 0x00, 0xFB, 0x08, 0x00, 0x00, 0xFC, +/* 000049A0 */ 0x08, 0x00, 0x00, 0x26, 0x09, 0x00, 0x00, 0x34, 0x09, 0x00, 0x00, 0x40, 0x09, 0x00, 0x00, 0x46, +/* 000049B0 */ 0x09, 0x00, 0x00, 0x47, 0x09, 0x00, 0x00, 0x65, 0x09, 0x00, 0x00, 0x66, 0x09, 0x00, 0x00, 0x8A, +/* 000049C0 */ 0x09, 0x00, 0x00, 0xAC, 0x09, 0x00, 0x00, 0xCE, 0x09, 0x00, 0x00, 0xF0, 0x09, 0x00, 0x00, 0x12, +/* 000049D0 */ 0x0A, 0x00, 0x00, 0x30, 0x0A, 0x00, 0x00, 0x50, 0x0A, 0x00, 0x00, 0x51, 0x0A, 0x00, 0x00, 0x7D, +/* 000049E0 */ 0x0A, 0x00, 0x00, 0x7E, 0x0A, 0x00, 0x00, 0x9C, 0x0A, 0x00, 0x00, 0xC2, 0x0A, 0x00, 0x00, 0xEC, +/* 000049F0 */ 0x0A, 0x00, 0x00, 0x1A, 0x0B, 0x00, 0x00, 0x3F, 0x0B, 0x00, 0x00, 0x4D, 0x0B, 0x00, 0x00, 0x4E, +/* 00004A00 */ 0x0B, 0x00, 0x00, 0xA2, 0x0B, 0x00, 0x00, 0xF2, 0x0B, 0x00, 0x00, 0x50, 0x0C, 0x00, 0x00, 0xAC, +/* 00004A10 */ 0x0C, 0x00, 0x00, 0x22, 0x0D, 0x00, 0x00, 0x52, 0x0D, 0x00, 0x00, 0xA7, 0x0D, 0x00, 0x00, 0xE9, +/* 00004A20 */ 0x0D, 0x00, 0x00, 0x33, 0x0E, 0x00, 0x00, 0x3A, 0x0E, 0x00, 0x00, 0x3B, 0x0E, 0x00, 0x00, 0x83, +/* 00004A30 */ 0x0E, 0x00, 0x00, 0xCB, 0x0E, 0x00, 0x00, 0x11, 0x0F, 0x00, 0x00, 0x12, 0x0F, 0x00, 0x00, 0x5E, +/* 00004A40 */ 0x0F, 0x00, 0x00, 0xA8, 0x0F, 0x00, 0x00, 0xE2, 0x0F, 0x00, 0x00, 0xE3, 0x0F, 0x00, 0x00, 0x31, +/* 00004A50 */ 0x10, 0x00, 0x00, 0x87, 0x10, 0x00, 0x00, 0xDD, 0x10, 0x00, 0x00, 0xDE, 0x10, 0x00, 0x00, 0x1C, +/* 00004A60 */ 0x11, 0x00, 0x00, 0x54, 0x11, 0x00, 0x00, 0x55, 0x11, 0x00, 0x00, 0x65, 0x11, 0x00, 0x00, 0xBC, +/* 00004A70 */ 0x11, 0x00, 0x00, 0x13, 0x12, 0x00, 0x00, 0x8E, 0x12, 0x00, 0x00, 0x02, 0x13, 0x00, 0x00, 0x84, +/* 00004A80 */ 0x13, 0x00, 0x00, 0x04, 0x14, 0x00, 0x00, 0x4C, 0x14, 0x00, 0x00, 0xBE, 0x14, 0x00, 0x00, 0xBF, +/* 00004A90 */ 0x14, 0x00, 0x00, 0x1D, 0x15, 0x00, 0x00, 0x73, 0x15, 0x00, 0x00, 0xDE, 0x15, 0x00, 0x00, 0x4B, +/* 00004AA0 */ 0x16, 0x00, 0x00, 0xC6, 0x16, 0x00, 0x00, 0x43, 0x17, 0x00, 0x00, 0xBA, 0x17, 0x00, 0x00, 0x29, +/* 00004AB0 */ 0x18, 0x00, 0x00, 0x86, 0x18, 0x00, 0x00, 0x87, 0x18, 0x00, 0x00, 0xC0, 0x18, 0x00, 0x00, 0x3C, +/* 00004AC0 */ 0x19, 0x00, 0x00, 0xC9, 0x19, 0x00, 0x00, 0xF1, 0x19, 0x00, 0x00, 0x1B, 0x1A, 0x00, 0x00, 0x6B, +/* 00004AD0 */ 0x1A, 0x00, 0x00, 0x76, 0x1A, 0x00, 0x00, 0xBF, 0x1A, 0x00, 0x00, 0x1C, 0x1B, 0x00, 0x00, 0x82, +/* 00004AE0 */ 0x1B, 0x00, 0x00, 0x83, 0x1B, 0x00, 0x00, 0xA9, 0x1B, 0x00, 0x00, 0x09, 0x1C, 0x00, 0x00, 0x51, +/* 00004AF0 */ 0x1C, 0x00, 0x00, 0x7F, 0x1C, 0x00, 0x00, 0xA5, 0x1C, 0x00, 0x00, 0xA6, 0x1C, 0x00, 0x00, 0xE3, +/* 00004B00 */ 0x1C, 0x00, 0x00, 0x1A, 0x1D, 0x00, 0x00, 0x1B, 0x1D, 0x00, 0x00, 0x81, 0x1D, 0x00, 0x00, 0x82, +/* 00004B10 */ 0x1D, 0x00, 0x00, 0xF2, 0x1D, 0x00, 0x00, 0x70, 0x1E, 0x00, 0x00, 0x77, 0x1E, 0x00, 0x00, 0x78, +/* 00004B20 */ 0x1E, 0x00, 0x00, 0xD2, 0x1E, 0x00, 0x00, 0x3F, 0x1F, 0x00, 0x00, 0xAB, 0x1F, 0x00, 0x00, 0x13, +/* 00004B30 */ 0x20, 0x00, 0x00, 0x82, 0x20, 0x00, 0x00, 0xE2, 0x20, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x01, +/* 00004B40 */ 0x21, 0x00, 0x00, 0x26, 0x21, 0x00, 0x00, 0x51, 0x21, 0x00, 0x00, 0x86, 0x21, 0x00, 0x00, 0xAA, +/* 00004B50 */ 0x21, 0x00, 0x00, 0xB4, 0x21, 0x00, 0x00, 0xB5, 0x21, 0x00, 0x00, 0xE9, 0x21, 0x00, 0x00, 0x00, +/* 00004B60 */ 0x22, 0x00, 0x00, 0x4F, 0x22, 0x00, 0x00, 0x81, 0x22, 0x00, 0x00, 0xA5, 0x22, 0x00, 0x00, 0xB6, +/* 00004B70 */ 0x22, 0x00, 0x00, 0xDC, 0x22, 0x00, 0x00, 0xE6, 0x22, 0x00, 0x00, 0xE7, 0x22, 0x00, 0x00, 0x07, +/* 00004B80 */ 0x23, 0x00, 0x00, 0x0E, 0x23, 0x00, 0x00, 0x0F, 0x23, 0x00, 0x00, 0x74, 0x23, 0x00, 0x00, 0xA0, +/* 00004B90 */ 0x23, 0x00, 0x00, 0xE6, 0x23, 0x00, 0x00, 0xFC, 0x23, 0x00, 0x00, 0x06, 0x24, 0x00, 0x00, 0x0D, +/* 00004BA0 */ 0x24, 0x00, 0x00, 0x0E, 0x24, 0x00, 0x00, 0x3F, 0x24, 0x00, 0x00, 0x76, 0x24, 0x00, 0x00, 0x7D, +/* 00004BB0 */ 0x24, 0x00, 0x00, 0x7E, 0x24, 0x00, 0x00, 0xB2, 0x24, 0x00, 0x00, 0xF0, 0x24, 0x00, 0x00, 0xF6, +/* 00004BC0 */ 0x24, 0x00, 0x00, 0xF7, 0x24, 0x00, 0x00, 0x51, 0x25, 0x00, 0x00, 0x7C, 0x25, 0x00, 0x00, 0xA5, +/* 00004BD0 */ 0x25, 0x00, 0x00, 0xD0, 0x25, 0x00, 0x00, 0xDA, 0x25, 0x00, 0x00, 0xDB, 0x25, 0x00, 0x00, 0xFB, +/* 00004BE0 */ 0x25, 0x00, 0x00, 0x02, 0x26, 0x00, 0x00, 0x03, 0x26, 0x00, 0x00, 0x0B, 0x26, 0x00, 0x00, 0x4E, +/* 00004BF0 */ 0x26, 0x00, 0x00, 0x55, 0x26, 0x00, 0x00, 0x7F, 0x26, 0x00, 0x00, 0x86, 0x26, 0x00, 0x00, 0xF7, +/* 00004C00 */ 0x26, 0x00, 0x00, 0x54, 0x27, 0x00, 0x00, 0xA4, 0x27, 0x00, 0x00, 0xAC, 0x27, 0x00, 0x00, 0xF3, +/* 00004C10 */ 0x27, 0x00, 0x00, 0x17, 0x28, 0x00, 0x00, 0x35, 0x28, 0x00, 0x00, 0x3F, 0x28, 0x00, 0x00, 0x40, +/* 00004C20 */ 0x28, 0x00, 0x00, 0x60, 0x28, 0x00, 0x00, 0x7C, 0x28, 0x00, 0x00, 0x93, 0x28, 0x00, 0x00, 0xC3, +/* 00004C30 */ 0x28, 0x00, 0x00, 0xE5, 0x28, 0x00, 0x00, 0xF3, 0x28, 0x00, 0x00, 0xF4, 0x28, 0x00, 0x00, 0x0E, +/* 00004C40 */ 0x29, 0x00, 0x00, 0x4C, 0x29, 0x00, 0x00, 0x7B, 0x29, 0x00, 0x00, 0x98, 0x29, 0x00, 0x00, 0xB3, +/* 00004C50 */ 0x29, 0x00, 0x00, 0xC5, 0x29, 0x00, 0x00, 0xD3, 0x29, 0x00, 0x00, 0xD4, 0x29, 0x00, 0x00, 0xF2, +/* 00004C60 */ 0x29, 0x00, 0x00, 0x14, 0x2A, 0x00, 0x00, 0x58, 0x2A, 0x00, 0x00, 0xA6, 0x2A, 0x00, 0x00, 0xE9, +/* 00004C70 */ 0x2A, 0x00, 0x00, 0x38, 0x2B, 0x00, 0x00, 0x68, 0x2B, 0x00, 0x00, 0xB1, 0x2B, 0x00, 0x00, 0xCB, +/* 00004C80 */ 0x2B, 0x00, 0x00, 0xD9, 0x2B, 0x00, 0x00, 0xDA, 0x2B, 0x00, 0x00, 0x12, 0x2C, 0x00, 0x00, 0x1C, +/* 00004C90 */ 0x2C, 0x00, 0x00, 0x23, 0x2C, 0x00, 0x00, 0x24, 0x2C, 0x00, 0x00, 0x2C, 0x2C, 0x00, 0x00, 0x78, +/* 00004CA0 */ 0x2C, 0x00, 0x00, 0x7F, 0x2C, 0x00, 0x00, 0xA3, 0x2C, 0x00, 0x00, 0xAA, 0x2C, 0x00, 0x00, 0x1B, +/* 00004CB0 */ 0x2D, 0x00, 0x00, 0x63, 0x2D, 0x00, 0x00, 0x6B, 0x2D, 0x00, 0x00, 0xB6, 0x2D, 0x00, 0x00, 0xD9, +/* 00004CC0 */ 0x2D, 0x00, 0x00, 0x15, 0x2E, 0x00, 0x00, 0x5A, 0x2E, 0x00, 0x00, 0x84, 0x2E, 0x00, 0x00, 0x9E, +/* 00004CD0 */ 0x2E, 0x00, 0x00, 0xAC, 0x2E, 0x00, 0x00, 0xAD, 0x2E, 0x00, 0x00, 0x0D, 0x2F, 0x00, 0x00, 0x3E, +/* 00004CE0 */ 0x2F, 0x00, 0x00, 0x6F, 0x2F, 0x00, 0x00, 0xB1, 0x2F, 0x00, 0x00, 0xF8, 0x2F, 0x00, 0x00, 0x0A, +/* 00004CF0 */ 0x30, 0x00, 0x00, 0x0B, 0x30, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x00, 0x38, 0x30, 0x00, 0x00, 0x42, +/* 00004D00 */ 0x30, 0x00, 0x00, 0x43, 0x30, 0x00, 0x00, 0x6F, 0x30, 0x00, 0x00, 0x86, 0x30, 0x00, 0x00, 0x8D, +/* 00004D10 */ 0x30, 0x00, 0x00, 0x8E, 0x30, 0x00, 0x00, 0xB8, 0x30, 0x00, 0x00, 0xB9, 0x30, 0x00, 0x00, 0xC1, +/* 00004D20 */ 0x30, 0x00, 0x00, 0x08, 0x31, 0x00, 0x00, 0x0F, 0x31, 0x00, 0x00, 0x3B, 0x31, 0x00, 0x00, 0x42, +/* 00004D30 */ 0x31, 0x00, 0x00, 0x9F, 0x31, 0x00, 0x00, 0xFD, 0x31, 0x00, 0x00, 0x05, 0x32, 0x00, 0x00, 0x43, +/* 00004D40 */ 0x32, 0x00, 0x00, 0x6A, 0x32, 0x00, 0x00, 0x6B, 0x32, 0x00, 0x00, 0x94, 0x32, 0x00, 0x00, 0xCE, +/* 00004D50 */ 0x32, 0x00, 0x00, 0xE8, 0x32, 0x00, 0x00, 0x0B, 0x33, 0x00, 0x00, 0x28, 0x33, 0x00, 0x00, 0x43, +/* 00004D60 */ 0x33, 0x00, 0x00, 0x61, 0x33, 0x00, 0x00, 0x7D, 0x33, 0x00, 0x00, 0xBB, 0x33, 0x00, 0x00, 0xF4, +/* 00004D70 */ 0x33, 0x00, 0x00, 0x15, 0x34, 0x00, 0x00, 0x36, 0x34, 0x00, 0x00, 0x5D, 0x34, 0x00, 0x00, 0x7D, +/* 00004D80 */ 0x34, 0x00, 0x00, 0x9E, 0x34, 0x00, 0x00, 0xB7, 0x34, 0x00, 0x00, 0xD4, 0x34, 0x00, 0x00, 0xF3, +/* 00004D90 */ 0x34, 0x00, 0x00, 0x05, 0x35, 0x00, 0x00, 0x13, 0x35, 0x00, 0x00, 0x14, 0x35, 0x00, 0x00, 0x4B, +/* 00004DA0 */ 0x35, 0x00, 0x00, 0x55, 0x35, 0x00, 0x00, 0x56, 0x35, 0x00, 0x00, 0x8D, 0x35, 0x00, 0x00, 0xC2, +/* 00004DB0 */ 0x35, 0x00, 0x00, 0xF0, 0x35, 0x00, 0x00, 0x07, 0x36, 0x00, 0x00, 0x18, 0x36, 0x00, 0x00, 0x36, +/* 00004DC0 */ 0x36, 0x00, 0x00, 0x40, 0x36, 0x00, 0x00, 0x47, 0x36, 0x00, 0x00, 0x48, 0x36, 0x00, 0x00, 0x50, +/* 00004DD0 */ 0x36, 0x00, 0x00, 0xAE, 0x36, 0x00, 0x00, 0x03, 0x37, 0x00, 0x00, 0x0A, 0x37, 0x00, 0x00, 0x2E, +/* 00004DE0 */ 0x37, 0x00, 0x00, 0x35, 0x37, 0x00, 0x00, 0xA6, 0x37, 0x00, 0x00, 0x20, 0x38, 0x00, 0x00, 0x9B, +/* 00004DF0 */ 0x38, 0x00, 0x00, 0xCE, 0x38, 0x00, 0x00, 0x4A, 0x39, 0x00, 0x00, 0x52, 0x39, 0x00, 0x00, 0xBD, +/* 00004E00 */ 0x39, 0x00, 0x00, 0xEC, 0x39, 0x00, 0x00, 0xFB, 0x39, 0x00, 0x00, 0x1F, 0x3A, 0x00, 0x00, 0x63, +/* 00004E10 */ 0x3A, 0x00, 0x00, 0x74, 0x3A, 0x00, 0x00, 0xB9, 0x3A, 0x00, 0x00, 0xC3, 0x3A, 0x00, 0x00, 0xC4, +/* 00004E20 */ 0x3A, 0x00, 0x00, 0xE8, 0x3A, 0x00, 0x00, 0x22, 0x3B, 0x00, 0x00, 0x49, 0x3B, 0x00, 0x00, 0x83, +/* 00004E30 */ 0x3B, 0x00, 0x00, 0xE8, 0x3B, 0x00, 0x00, 0x12, 0x3C, 0x00, 0x00, 0x43, 0x3C, 0x00, 0x00, 0x62, +/* 00004E40 */ 0x3C, 0x00, 0x00, 0xB2, 0x3C, 0x00, 0x00, 0xE6, 0x3C, 0x00, 0x00, 0x17, 0x3D, 0x00, 0x00, 0x6B, +/* 00004E50 */ 0x3D, 0x00, 0x00, 0x9F, 0x3D, 0x00, 0x00, 0xEC, 0x3D, 0x00, 0x00, 0x06, 0x3E, 0x00, 0x00, 0x55, +/* 00004E60 */ 0x3E, 0x00, 0x00, 0x7D, 0x3E, 0x00, 0x00, 0x93, 0x3E, 0x00, 0x00, 0xA5, 0x3E, 0x00, 0x00, 0xB3, +/* 00004E70 */ 0x3E, 0x00, 0x00, 0xB4, 0x3E, 0x00, 0x00, 0xE6, 0x3E, 0x00, 0x00, 0x19, 0x3F, 0x00, 0x00, 0x63, +/* 00004E80 */ 0x3F, 0x00, 0x00, 0x95, 0x3F, 0x00, 0x00, 0xC3, 0x3F, 0x00, 0x00, 0xFC, 0x3F, 0x00, 0x00, 0x12, +/* 00004E90 */ 0x40, 0x00, 0x00, 0x24, 0x40, 0x00, 0x00, 0x32, 0x40, 0x00, 0x00, 0x33, 0x40, 0x00, 0x00, 0x54, +/* 00004EA0 */ 0x40, 0x00, 0x00, 0x92, 0x40, 0x00, 0x00, 0x9E, 0x40, 0x00, 0x00, 0x9F, 0x40, 0x00, 0x00, 0xCC, +/* 00004EB0 */ 0x40, 0x00, 0x00, 0x12, 0x41, 0x00, 0x00, 0x39, 0x41, 0x00, 0x00, 0x6C, 0x41, 0x00, 0x00, 0x81, +/* 00004EC0 */ 0x41, 0x00, 0x00, 0xD1, 0x41, 0x00, 0x00, 0x1F, 0x42, 0x00, 0x00, 0x70, 0x42, 0x00, 0x00, 0x7E, +/* 00004ED0 */ 0x42, 0x00, 0x00, 0x7F, 0x42, 0x00, 0x00, 0xC5, 0x42, 0x00, 0x00, 0xCF, 0x42, 0x00, 0x00, 0xD0, +/* 00004EE0 */ 0x42, 0x00, 0x00, 0xF5, 0x42, 0x00, 0x00, 0x0C, 0x43, 0x00, 0x00, 0x13, 0x43, 0x00, 0x00, 0x14, +/* 00004EF0 */ 0x43, 0x00, 0x00, 0x2E, 0x43, 0x00, 0x00, 0x44, 0x43, 0x00, 0x00, 0x62, 0x43, 0x00, 0x00, 0x8E, +/* 00004F00 */ 0x43, 0x00, 0x00, 0x9C, 0x43, 0x00, 0x00, 0xD8, 0x43, 0x00, 0x00, 0xE3, 0x43, 0x00, 0x00, 0xE4, +/* 00004F10 */ 0x43, 0x00, 0x00, 0xFA, 0x43, 0x00, 0x00, 0x36, 0x44, 0x00, 0x00, 0x41, 0x44, 0x00, 0x00, 0x42, +/* 00004F20 */ 0x44, 0x00, 0x00, 0x58, 0x44, 0x00, 0x00, 0x8E, 0x44, 0x00, 0x00, 0x99, 0x44, 0x00, 0x00, 0x9A, +/* 00004F30 */ 0x44, 0x00, 0x00, 0xB8, 0x44, 0x00, 0x00, 0xF5, 0x44, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x01, +/* 00004F40 */ 0x45, 0x00, 0x00, 0x18, 0x45, 0x00, 0x00, 0x3E, 0x45, 0x00, 0x00, 0x5F, 0x45, 0x00, 0x00, 0x79, +/* 00004F50 */ 0x45, 0x00, 0x00, 0xB5, 0x45, 0x00, 0x00, 0xD4, 0x45, 0x00, 0x00, 0xE2, 0x45, 0x00, 0x00, 0xE3, +/* 00004F60 */ 0x45, 0x00, 0x00, 0x13, 0x46, 0x00, 0x00, 0x31, 0x46, 0x00, 0x00, 0x4D, 0x46, 0x00, 0x00, 0x62, +/* 00004F70 */ 0x46, 0x00, 0x00, 0x7E, 0x46, 0x00, 0x00, 0x8C, 0x46, 0x00, 0x00, 0x97, 0x46, 0x00, 0x00, 0x98, +/* 00004F80 */ 0x46, 0x00, 0x00, 0xAE, 0x46, 0x00, 0x00, 0xDD, 0x46, 0x00, 0x00, 0xF9, 0x46, 0x00, 0x00, 0x13, +/* 00004F90 */ 0x47, 0x00, 0x00, 0x21, 0x47, 0x00, 0x00, 0x22, 0x47, 0x00, 0x00, 0x4C, 0x47, 0x00, 0x00, 0x76, +/* 00004FA0 */ 0x47, 0x00, 0x00, 0x80, 0x47, 0x00, 0x00, 0x88, 0x47, 0x00, 0x00, 0x89, 0x47, 0x00, 0x00, 0xB0, +/* 00004FB0 */ 0x47, 0x00, 0x00, 0xF4, 0x47, 0x00, 0x00, 0x1B, 0x48, 0x00, 0x00, 0x1C, 0x48, 0x00, 0x00, 0x3F, +/* 00004FC0 */ 0x48, 0x00, 0x00, 0x64, 0x48, 0x00, 0x00, 0x9E, 0x48, 0x00, 0x00, 0xAC, 0x48, 0x00, 0x00, 0xAD, +/* 00004FD0 */ 0x48, 0x00, 0x00, 0xD1, 0x48, 0x00, 0x00, 0x03, 0x49, 0x00, 0x00, 0x11, 0x49, 0x00, 0x00, 0x12, +/* 00004FE0 */ 0x49, 0x00, 0x00, 0x36, 0x49, 0x00, 0x00, 0x68, 0x49, 0x00, 0x00, 0x76, 0x49, 0x00, 0x00, 0x77, +/* 00004FF0 */ 0x49, 0x00, 0x00, 0xC6, 0x49, 0x00, 0x00, 0x3F, 0x4A, 0x00, 0x00, 0x4D, 0x4A, 0x00, 0x00, 0x4E, +/* 00005000 */ 0x4A, 0x00, 0x00, 0x68, 0x4A, 0x00, 0x00, 0x72, 0x4A, 0x00, 0x00, 0x73, 0x4A, 0x00, 0x00, 0x8C, +/* 00005010 */ 0x4A, 0x00, 0x00, 0x92, 0x4A, 0x00, 0x00, 0x93, 0x4A, 0x00, 0x00, 0x9B, 0x4A, 0x00, 0x00, 0xF6, +/* 00005020 */ 0x4A, 0x00, 0x00, 0x47, 0x4B, 0x00, 0x00, 0x7A, 0x4B, 0x00, 0x00, 0x81, 0x4B, 0x00, 0x00, 0xDA, +/* 00005030 */ 0x4B, 0x00, 0x00, 0x28, 0x4C, 0x00, 0x00, 0x2F, 0x4C, 0x00, 0x00, 0x58, 0x4C, 0x00, 0x00, 0x5F, +/* 00005040 */ 0x4C, 0x00, 0x00, 0x9B, 0x4C, 0x00, 0x00, 0xEE, 0x4C, 0x00, 0x00, 0x3B, 0x4D, 0x00, 0x00, 0x88, +/* 00005050 */ 0x4D, 0x00, 0x00, 0xE2, 0x4D, 0x00, 0x00, 0xFB, 0x4D, 0x00, 0x00, 0x03, 0x4E, 0x00, 0x00, 0x5A, +/* 00005060 */ 0x4E, 0x00, 0x00, 0x81, 0x4E, 0x00, 0x00, 0xA4, 0x4E, 0x00, 0x00, 0xD2, 0x4E, 0x00, 0x00, 0x1A, +/* 00005070 */ 0x4F, 0x00, 0x00, 0x87, 0x4F, 0x00, 0x00, 0x95, 0x4F, 0x00, 0x00, 0xB8, 0x4F, 0x00, 0x00, 0xC2, +/* 00005080 */ 0x4F, 0x00, 0x00, 0xC3, 0x4F, 0x00, 0x00, 0xDC, 0x4F, 0x00, 0x00, 0xE3, 0x4F, 0x00, 0x00, 0xE4, +/* 00005090 */ 0x4F, 0x00, 0x00, 0xFE, 0x4F, 0x00, 0x00, 0x28, 0x50, 0x00, 0x00, 0x52, 0x50, 0x00, 0x00, 0x58, +/* 000050A0 */ 0x50, 0x00, 0x00, 0x59, 0x50, 0x00, 0x00, 0x61, 0x50, 0x00, 0x00, 0xCC, 0x50, 0x00, 0x00, 0xFC, +/* 000050B0 */ 0x50, 0x00, 0x00, 0x03, 0x51, 0x00, 0x00, 0x3C, 0x51, 0x00, 0x00, 0x44, 0x51, 0x00, 0x00, 0x6C, +/* 000050C0 */ 0x51, 0x00, 0x00, 0xB1, 0x51, 0x00, 0x00, 0x15, 0x52, 0x00, 0x00, 0x95, 0x52, 0x00, 0x00, 0x96, +/* 000050D0 */ 0x52, 0x00, 0x00, 0x08, 0x53, 0x00, 0x00, 0x39, 0x53, 0x00, 0x00, 0x88, 0x53, 0x00, 0x00, 0xDA, +/* 000050E0 */ 0x53, 0x00, 0x00, 0x2E, 0x54, 0x00, 0x00, 0x66, 0x54, 0x00, 0x00, 0xB8, 0x54, 0x00, 0x00, 0x0A, +/* 000050F0 */ 0x55, 0x00, 0x00, 0x5F, 0x55, 0x00, 0x00, 0xCB, 0x55, 0x00, 0x00, 0x21, 0x56, 0x00, 0x00, 0x22, +/* 00005100 */ 0x56, 0x00, 0x00, 0x41, 0x56, 0x00, 0x00, 0x60, 0x56, 0x00, 0x00, 0x92, 0x56, 0x00, 0x00, 0x93, +/* 00005110 */ 0x56, 0x00, 0x00, 0x0A, 0x57, 0x00, 0x00, 0x77, 0x57, 0x00, 0x00, 0xCA, 0x57, 0x00, 0x00, 0x0D, +/* 00005120 */ 0x58, 0x00, 0x00, 0x0E, 0x58, 0x00, 0x00, 0x8B, 0x58, 0x00, 0x00, 0x1F, 0x59, 0x00, 0x00, 0xA2, +/* 00005130 */ 0x59, 0x00, 0x00, 0x25, 0x5A, 0x00, 0x00, 0x98, 0x5A, 0x00, 0x00, 0x99, 0x5A, 0x00, 0x00, 0x03, +/* 00005140 */ 0x5B, 0x00, 0x00, 0x7C, 0x5B, 0x00, 0x00, 0x7D, 0x5B, 0x00, 0x00, 0xE0, 0x5B, 0x00, 0x00, 0x6F, +/* 00005150 */ 0x5C, 0x00, 0x00, 0x18, 0x5D, 0x00, 0x00, 0xAC, 0x5D, 0x00, 0x00, 0x43, 0x5E, 0x00, 0x00, 0xE7, +/* 00005160 */ 0x5E, 0x00, 0x00, 0xFB, 0x5E, 0x00, 0x00, 0xFC, 0x5E, 0x00, 0x00, 0x2C, 0x5F, 0x00, 0x00, 0x98, +/* 00005170 */ 0x5F, 0x00, 0x00, 0x08, 0x60, 0x00, 0x00, 0x78, 0x60, 0x00, 0x00, 0xEA, 0x60, 0x00, 0x00, 0x5E, +/* 00005180 */ 0x61, 0x00, 0x00, 0xD2, 0x61, 0x00, 0x00, 0x1C, 0x62, 0x00, 0x00, 0x1D, 0x62, 0x00, 0x00, 0x8A, +/* 00005190 */ 0x62, 0x00, 0x00, 0x8B, 0x62, 0x00, 0x00, 0xD7, 0x62, 0x00, 0x00, 0x4B, 0x63, 0x00, 0x00, 0xDD, +/* 000051A0 */ 0x63, 0x00, 0x00, 0x6F, 0x64, 0x00, 0x00, 0x70, 0x64, 0x00, 0x00, 0xA4, 0x64, 0x00, 0x00, 0xC8, +/* 000051B0 */ 0x64, 0x00, 0x00, 0x04, 0x65, 0x00, 0x00, 0x1E, 0x65, 0x00, 0x00, 0x3D, 0x65, 0x00, 0x00, 0x4B, +/* 000051C0 */ 0x65, 0x00, 0x00, 0x4C, 0x65, 0x00, 0x00, 0x85, 0x65, 0x00, 0x00, 0x9F, 0x65, 0x00, 0x00, 0xBC, +/* 000051D0 */ 0x65, 0x00, 0x00, 0xCA, 0x65, 0x00, 0x00, 0xCB, 0x65, 0x00, 0x00, 0xEF, 0x65, 0x00, 0x00, 0x14, +/* 000051E0 */ 0x66, 0x00, 0x00, 0x35, 0x66, 0x00, 0x00, 0x51, 0x66, 0x00, 0x00, 0x78, 0x66, 0x00, 0x00, 0xA4, +/* 000051F0 */ 0x66, 0x00, 0x00, 0xB2, 0x66, 0x00, 0x00, 0xB3, 0x66, 0x00, 0x00, 0xCF, 0x66, 0x00, 0x00, 0xF6, +/* 00005200 */ 0x66, 0x00, 0x00, 0x22, 0x67, 0x00, 0x00, 0x30, 0x67, 0x00, 0x00, 0x31, 0x67, 0x00, 0x00, 0x4D, +/* 00005210 */ 0x67, 0x00, 0x00, 0x76, 0x67, 0x00, 0x00, 0x84, 0x67, 0x00, 0x00, 0x85, 0x67, 0x00, 0x00, 0xA1, +/* 00005220 */ 0x67, 0x00, 0x00, 0xCC, 0x67, 0x00, 0x00, 0xCD, 0x67, 0x00, 0x00, 0x17, 0x68, 0x00, 0x00, 0x56, +/* 00005230 */ 0x68, 0x00, 0x00, 0x98, 0x68, 0x00, 0x00, 0xCD, 0x68, 0x00, 0x00, 0xEF, 0x68, 0x00, 0x00, 0x05, +/* 00005240 */ 0x69, 0x00, 0x00, 0x06, 0x69, 0x00, 0x00, 0x21, 0x69, 0x00, 0x00, 0x87, 0x69, 0x00, 0x00, 0xF6, +/* 00005250 */ 0x69, 0x00, 0x00, 0x3A, 0x6A, 0x00, 0x00, 0x90, 0x6A, 0x00, 0x00, 0xA6, 0x6A, 0x00, 0x00, 0xA7, +/* 00005260 */ 0x6A, 0x00, 0x00, 0xCC, 0x6A, 0x00, 0x00, 0x3E, 0x6B, 0x00, 0x00, 0x9F, 0x6B, 0x00, 0x00, 0xFA, +/* 00005270 */ 0x6B, 0x00, 0x00, 0x10, 0x6C, 0x00, 0x00, 0x11, 0x6C, 0x00, 0x00, 0x6F, 0x6C, 0x00, 0x00, 0x8A, +/* 00005280 */ 0x6C, 0x00, 0x00, 0x9C, 0x6C, 0x00, 0x00, 0xAA, 0x6C, 0x00, 0x00, 0xAB, 0x6C, 0x00, 0x00, 0xDD, +/* 00005290 */ 0x6C, 0x00, 0x00, 0xDE, 0x6C, 0x00, 0x00, 0xF6, 0x6C, 0x00, 0x00, 0x01, 0x6D, 0x00, 0x00, 0x0B, +/* 000052A0 */ 0x6D, 0x00, 0x00, 0x0C, 0x6D, 0x00, 0x00, 0x43, 0x6D, 0x00, 0x00, 0x6B, 0x6D, 0x00, 0x00, 0x6C, +/* 000052B0 */ 0x6D, 0x00, 0x00, 0x8D, 0x6D, 0x00, 0x00, 0xB5, 0x6D, 0x00, 0x00, 0xBF, 0x6D, 0x00, 0x00, 0xC0, +/* 000052C0 */ 0x6D, 0x00, 0x00, 0x0C, 0x6E, 0x00, 0x00, 0x12, 0x6E, 0x00, 0x00, 0x13, 0x6E, 0x00, 0x00, 0x1B, +/* 000052D0 */ 0x6E, 0x00, 0x00, 0x76, 0x6E, 0x00, 0x00, 0xA5, 0x6E, 0x00, 0x00, 0xAC, 0x6E, 0x00, 0x00, 0xFF, +/* 000052E0 */ 0x6E, 0x00, 0x00, 0x5C, 0x6F, 0x00, 0x00, 0xB7, 0x6F, 0x00, 0x00, 0xE1, 0x6F, 0x00, 0x00, 0xE8, +/* 000052F0 */ 0x6F, 0x00, 0x00, 0x1C, 0x70, 0x00, 0x00, 0x23, 0x70, 0x00, 0x00, 0x55, 0x70, 0x00, 0x00, 0x6F, +/* 00005300 */ 0x70, 0x00, 0x00, 0x77, 0x70, 0x00, 0x00, 0xB6, 0x70, 0x00, 0x00, 0xE3, 0x70, 0x00, 0x00, 0x02, +/* 00005310 */ 0x71, 0x00, 0x00, 0x1C, 0x71, 0x00, 0x00, 0x26, 0x71, 0x00, 0x00, 0x27, 0x71, 0x00, 0x00, 0x4B, +/* 00005320 */ 0x71, 0x00, 0x00, 0x6A, 0x71, 0x00, 0x00, 0xA6, 0x71, 0x00, 0x00, 0xDD, 0x71, 0x00, 0x00, 0xDE, +/* 00005330 */ 0x71, 0x00, 0x00, 0x1B, 0x72, 0x00, 0x00, 0x39, 0x72, 0x00, 0x00, 0x47, 0x72, 0x00, 0x00, 0x51, +/* 00005340 */ 0x72, 0x00, 0x00, 0x52, 0x72, 0x00, 0x00, 0x73, 0x72, 0x00, 0x00, 0xB7, 0x72, 0x00, 0x00, 0x3F, +/* 00005350 */ 0x73, 0x00, 0x00, 0x7A, 0x73, 0x00, 0x00, 0x7B, 0x73, 0x00, 0x00, 0xBD, 0x73, 0x00, 0x00, 0xC7, +/* 00005360 */ 0x73, 0x00, 0x00, 0xC8, 0x73, 0x00, 0x00, 0xDD, 0x73, 0x00, 0x00, 0xE4, 0x73, 0x00, 0x00, 0xE5, +/* 00005370 */ 0x73, 0x00, 0x00, 0xED, 0x73, 0x00, 0x00, 0x46, 0x74, 0x00, 0x00, 0x93, 0x74, 0x00, 0x00, 0x9A, +/* 00005380 */ 0x74, 0x00, 0x00, 0xC6, 0x74, 0x00, 0x00, 0xCD, 0x74, 0x00, 0x00, 0x23, 0x75, 0x00, 0x00, 0x2B, +/* 00005390 */ 0x75, 0x00, 0x00, 0x63, 0x75, 0x00, 0x00, 0x91, 0x75, 0x00, 0x00, 0xA8, 0x75, 0x00, 0x00, 0xB2, +/* 000053A0 */ 0x75, 0x00, 0x00, 0xB3, 0x75, 0x00, 0x00, 0xCC, 0x75, 0x00, 0x00, 0x24, 0x76, 0x00, 0x00, 0x55, +/* 000053B0 */ 0x76, 0x00, 0x00, 0x70, 0x76, 0x00, 0x00, 0x71, 0x76, 0x00, 0x00, 0x8B, 0x76, 0x00, 0x00, 0xB8, +/* 000053C0 */ 0x76, 0x00, 0x00, 0xD3, 0x76, 0x00, 0x00, 0xF9, 0x76, 0x00, 0x00, 0x5E, 0x77, 0x00, 0x00, 0x9E, +/* 000053D0 */ 0x77, 0x00, 0x00, 0xB0, 0x77, 0x00, 0x00, 0xB1, 0x77, 0x00, 0x00, 0xE8, 0x77, 0x00, 0x00, 0x24, +/* 000053E0 */ 0x78, 0x00, 0x00, 0x60, 0x78, 0x00, 0x00, 0x72, 0x78, 0x00, 0x00, 0x73, 0x78, 0x00, 0x00, 0xC0, +/* 000053F0 */ 0x78, 0x00, 0x00, 0xF6, 0x78, 0x00, 0x00, 0x52, 0x79, 0x00, 0x00, 0x8E, 0x79, 0x00, 0x00, 0xDA, +/* 00005400 */ 0x79, 0x00, 0x00, 0x5C, 0x7A, 0x00, 0x00, 0x6E, 0x7A, 0x00, 0x00, 0x7C, 0x7A, 0x00, 0x00, 0x7D, +/* 00005410 */ 0x7A, 0x00, 0x00, 0x91, 0x7A, 0x00, 0x00, 0x9B, 0x7A, 0x00, 0x00, 0x9C, 0x7A, 0x00, 0x00, 0xB1, +/* 00005420 */ 0x7A, 0x00, 0x00, 0xB8, 0x7A, 0x00, 0x00, 0xB9, 0x7A, 0x00, 0x00, 0xC1, 0x7A, 0x00, 0x00, 0x2C, +/* 00005430 */ 0x7B, 0x00, 0x00, 0x33, 0x7B, 0x00, 0x00, 0x5F, 0x7B, 0x00, 0x00, 0x66, 0x7B, 0x00, 0x00, 0xD7, +/* 00005440 */ 0x7B, 0x00, 0x00, 0x08, 0x7C, 0x00, 0x00, 0x10, 0x7C, 0x00, 0x00, 0x64, 0x7C, 0x00, 0x00, 0x7F, +/* 00005450 */ 0x7C, 0x00, 0x00, 0x92, 0x7C, 0x00, 0x00, 0xCA, 0x7C, 0x00, 0x00, 0x0C, 0x7D, 0x00, 0x00, 0x68, +/* 00005460 */ 0x7D, 0x00, 0x00, 0xDE, 0x7D, 0x00, 0x00, 0xEC, 0x7D, 0x00, 0x00, 0xF8, 0x7D, 0x00, 0x00, 0xF9, +/* 00005470 */ 0x7D, 0x00, 0x00, 0x10, 0x7E, 0x00, 0x00, 0x17, 0x7E, 0x00, 0x00, 0x18, 0x7E, 0x00, 0x00, 0x54, +/* 00005480 */ 0x7E, 0x00, 0x00, 0x55, 0x7E, 0x00, 0x00, 0x5D, 0x7E, 0x00, 0x00, 0xAC, 0x7E, 0x00, 0x00, 0xB3, +/* 00005490 */ 0x7E, 0x00, 0x00, 0x0C, 0x7F, 0x00, 0x00, 0x38, 0x7F, 0x00, 0x00, 0x3F, 0x7F, 0x00, 0x00, 0x67, +/* 000054A0 */ 0x7F, 0x00, 0x00, 0x6E, 0x7F, 0x00, 0x00, 0xF2, 0x7F, 0x00, 0x00, 0x60, 0x80, 0x00, 0x00, 0xA5, +/* 000054B0 */ 0x80, 0x00, 0x00, 0xEA, 0x80, 0x00, 0x00, 0xF2, 0x80, 0x00, 0x00, 0x52, 0x81, 0x00, 0x00, 0xA3, +/* 000054C0 */ 0x81, 0x00, 0x00, 0xFF, 0x81, 0x00, 0x00, 0x3B, 0x82, 0x00, 0x00, 0xA0, 0x82, 0x00, 0x00, 0xCD, +/* 000054D0 */ 0x82, 0x00, 0x00, 0xFB, 0x82, 0x00, 0x00, 0x29, 0x83, 0x00, 0x00, 0x2A, 0x83, 0x00, 0x00, 0x5F, +/* 000054E0 */ 0x83, 0x00, 0x00, 0x94, 0x83, 0x00, 0x00, 0xCC, 0x83, 0x00, 0x00, 0x1E, 0x84, 0x00, 0x00, 0x7A, +/* 000054F0 */ 0x84, 0x00, 0x00, 0xE8, 0x84, 0x00, 0x00, 0x5A, 0x85, 0x00, 0x00, 0x8F, 0x85, 0x00, 0x00, 0xC4, +/* 00005500 */ 0x85, 0x00, 0x00, 0xCE, 0x85, 0x00, 0x00, 0xD5, 0x85, 0x00, 0x00, 0xD6, 0x85, 0x00, 0x00, 0xDE, +/* 00005510 */ 0x85, 0x00, 0x00, 0x35, 0x86, 0x00, 0x00, 0x69, 0x86, 0x00, 0x00, 0x70, 0x86, 0x00, 0x00, 0x96, +/* 00005520 */ 0x86, 0x00, 0x00, 0x9D, 0x86, 0x00, 0x00, 0x0E, 0x87, 0x00, 0x00, 0x3F, 0x87, 0x00, 0x00, 0x5E, +/* 00005530 */ 0x87, 0x00, 0x00, 0x66, 0x87, 0x00, 0x00, 0xBD, 0x87, 0x00, 0x00, 0xEB, 0x87, 0x00, 0x00, 0x04, +/* 00005540 */ 0x88, 0x00, 0x00, 0x78, 0x88, 0x00, 0x00, 0xB0, 0x88, 0x00, 0x00, 0xFB, 0x88, 0x00, 0x00, 0x46, +/* 00005550 */ 0x89, 0x00, 0x00, 0x47, 0x89, 0x00, 0x00, 0x83, 0x89, 0x00, 0x00, 0xF3, 0x89, 0x00, 0x00, 0xFD, +/* 00005560 */ 0x89, 0x00, 0x00, 0xFE, 0x89, 0x00, 0x00, 0x4B, 0x8A, 0x00, 0x00, 0xA4, 0x8A, 0x00, 0x00, 0xDB, +/* 00005570 */ 0x8A, 0x00, 0x00, 0xF8, 0x8A, 0x00, 0x00, 0x19, 0x8B, 0x00, 0x00, 0x38, 0x8B, 0x00, 0x00, 0x44, +/* 00005580 */ 0x8B, 0x00, 0x00, 0x45, 0x8B, 0x00, 0x00, 0x66, 0x8B, 0x00, 0x00, 0x6D, 0x8B, 0x00, 0x00, 0x6E, +/* 00005590 */ 0x8B, 0x00, 0x00, 0x8D, 0x8B, 0x00, 0x00, 0x08, 0x8C, 0x00, 0x00, 0x3C, 0x8C, 0x00, 0x00, 0x48, +/* 000055A0 */ 0x8C, 0x00, 0x00, 0x80, 0x8C, 0x00, 0x00, 0xA8, 0x8C, 0x00, 0x00, 0xC4, 0x8C, 0x00, 0x00, 0xE3, +/* 000055B0 */ 0x8C, 0x00, 0x00, 0x02, 0x8D, 0x00, 0x00, 0x0E, 0x8D, 0x00, 0x00, 0x14, 0x8D, 0x00, 0x00, 0x15, +/* 000055C0 */ 0x8D, 0x00, 0x00, 0x1D, 0x8D, 0x00, 0x00, 0x94, 0x8D, 0x00, 0x00, 0x9B, 0x8D, 0x00, 0x00, 0x14, +/* 000055D0 */ 0x8E, 0x00, 0x00, 0x90, 0x8E, 0x00, 0x00, 0x08, 0x8F, 0x00, 0x00, 0x69, 0x8F, 0x00, 0x00, 0x71, +/* 000055E0 */ 0x8F, 0x00, 0x00, 0xC1, 0x8F, 0x00, 0x00, 0xE6, 0x8F, 0x00, 0x00, 0x11, 0x90, 0x00, 0x00, 0x53, +/* 000055F0 */ 0x90, 0x00, 0x00, 0xC6, 0x90, 0x00, 0x00, 0xDE, 0x90, 0x00, 0x00, 0xEC, 0x90, 0x00, 0x00, 0xED, +/* 00005600 */ 0x90, 0x00, 0x00, 0x2A, 0x91, 0x00, 0x00, 0x5F, 0x91, 0x00, 0x00, 0x6D, 0x91, 0x00, 0x00, 0x79, +/* 00005610 */ 0x91, 0x00, 0x00, 0x7A, 0x91, 0x00, 0x00, 0xC0, 0x91, 0x00, 0x00, 0xC7, 0x91, 0x00, 0x00, 0xC8, +/* 00005620 */ 0x91, 0x00, 0x00, 0xFD, 0x91, 0x00, 0x00, 0x21, 0x92, 0x00, 0x00, 0x5D, 0x92, 0x00, 0x00, 0x71, +/* 00005630 */ 0x92, 0x00, 0x00, 0x7B, 0x92, 0x00, 0x00, 0x7C, 0x92, 0x00, 0x00, 0xC7, 0x92, 0x00, 0x00, 0x0D, +/* 00005640 */ 0x93, 0x00, 0x00, 0x64, 0x93, 0x00, 0x00, 0x65, 0x93, 0x00, 0x00, 0xD4, 0x93, 0x00, 0x00, 0x3E, +/* 00005650 */ 0x94, 0x00, 0x00, 0xA9, 0x94, 0x00, 0x00, 0x1D, 0x95, 0x00, 0x00, 0x88, 0x95, 0x00, 0x00, 0x03, +/* 00005660 */ 0x96, 0x00, 0x00, 0x71, 0x96, 0x00, 0x00, 0x9E, 0x96, 0x00, 0x00, 0xFE, 0x96, 0x00, 0x00, 0x67, +/* 00005670 */ 0x97, 0x00, 0x00, 0x68, 0x97, 0x00, 0x00, 0x8C, 0x97, 0x00, 0x00, 0xF9, 0x97, 0x00, 0x00, 0x4E, +/* 00005680 */ 0x98, 0x00, 0x00, 0x92, 0x98, 0x00, 0x00, 0xFA, 0x98, 0x00, 0x00, 0xFB, 0x98, 0x00, 0x00, 0x72, +/* 00005690 */ 0x99, 0x00, 0x00, 0x9A, 0x99, 0x00, 0x00, 0xE5, 0x99, 0x00, 0x00, 0x55, 0x9A, 0x00, 0x00, 0xAE, +/* 000056A0 */ 0x9A, 0x00, 0x00, 0xDE, 0x9A, 0x00, 0x00, 0x05, 0x9B, 0x00, 0x00, 0x5A, 0x9B, 0x00, 0x00, 0x5B, +/* 000056B0 */ 0x9B, 0x00, 0x00, 0xDD, 0x9B, 0x00, 0x00, 0x38, 0x9C, 0x00, 0x00, 0x39, 0x9C, 0x00, 0x00, 0xA8, +/* 000056C0 */ 0x9C, 0x00, 0x00, 0xA9, 0x9C, 0x00, 0x00, 0xDA, 0x9C, 0x00, 0x00, 0xDB, 0x9C, 0x00, 0x00, 0xF8, +/* 000056D0 */ 0x9C, 0x00, 0x00, 0x03, 0x9D, 0x00, 0x00, 0x04, 0x9D, 0x00, 0x00, 0x29, 0x9D, 0x00, 0x00, 0x77, +/* 000056E0 */ 0x9D, 0x00, 0x00, 0x1E, 0x9E, 0x00, 0x00, 0x55, 0x9E, 0x00, 0x00, 0xAB, 0x9E, 0x00, 0x00, 0xB9, +/* 000056F0 */ 0x9E, 0x00, 0x00, 0xBA, 0x9E, 0x00, 0x00, 0xE4, 0x9E, 0x00, 0x00, 0x0E, 0x9F, 0x00, 0x00, 0x0F, +/* 00005700 */ 0x9F, 0x00, 0x00, 0x87, 0x9F, 0x00, 0x00, 0xE2, 0x9F, 0x00, 0x00, 0xFF, 0x9F, 0x00, 0x00, 0x41, +/* 00005710 */ 0xA0, 0x00, 0x00, 0x7E, 0xA0, 0x00, 0x00, 0xB8, 0xA0, 0x00, 0x00, 0x0F, 0xA1, 0x00, 0x00, 0x21, +/* 00005720 */ 0xA1, 0x00, 0x00, 0x22, 0xA1, 0x00, 0x00, 0x59, 0xA1, 0x00, 0x00, 0x6E, 0xA1, 0x00, 0x00, 0x98, +/* 00005730 */ 0xA1, 0x00, 0x00, 0xDB, 0xA1, 0x00, 0x00, 0xE9, 0xA1, 0x00, 0x00, 0xEA, 0xA1, 0x00, 0x00, 0x60, +/* 00005740 */ 0xA2, 0x00, 0x00, 0x9D, 0xA2, 0x00, 0x00, 0x9E, 0xA2, 0x00, 0x00, 0x00, 0xA3, 0x00, 0x00, 0x25, +/* 00005750 */ 0xA3, 0x00, 0x00, 0x39, 0xA3, 0x00, 0x00, 0x43, 0xA3, 0x00, 0x00, 0x44, 0xA3, 0x00, 0x00, 0x6A, +/* 00005760 */ 0xA3, 0x00, 0x00, 0x6B, 0xA3, 0x00, 0x00, 0xDD, 0xA3, 0x00, 0x00, 0x2D, 0xA4, 0x00, 0x00, 0x87, +/* 00005770 */ 0xA4, 0x00, 0x00, 0x88, 0xA4, 0x00, 0x00, 0xBB, 0xA4, 0x00, 0x00, 0xFE, 0xA4, 0x00, 0x00, 0x2C, +/* 00005780 */ 0xA5, 0x00, 0x00, 0x57, 0xA5, 0x00, 0x00, 0x99, 0xA5, 0x00, 0x00, 0xA7, 0xA5, 0x00, 0x00, 0xA8, +/* 00005790 */ 0xA5, 0x00, 0x00, 0xE8, 0xA5, 0x00, 0x00, 0xE9, 0xA5, 0x00, 0x00, 0x0E, 0xA6, 0x00, 0x00, 0x51, +/* 000057A0 */ 0xA6, 0x00, 0x00, 0x84, 0xA6, 0x00, 0x00, 0xA1, 0xA6, 0x00, 0x00, 0xAD, 0xA6, 0x00, 0x00, 0xAE, +/* 000057B0 */ 0xA6, 0x00, 0x00, 0x15, 0xA7, 0x00, 0x00, 0x41, 0xA7, 0x00, 0x00, 0x9B, 0xA7, 0x00, 0x00, 0xA9, +/* 000057C0 */ 0xA7, 0x00, 0x00, 0xAA, 0xA7, 0x00, 0x00, 0xEB, 0xA7, 0x00, 0x00, 0x3E, 0xA8, 0x00, 0x00, 0x98, +/* 000057D0 */ 0xA8, 0x00, 0x00, 0xA6, 0xA8, 0x00, 0x00, 0xA7, 0xA8, 0x00, 0x00, 0x23, 0xA9, 0x00, 0x00, 0x2F, +/* 000057E0 */ 0xA9, 0x00, 0x00, 0x30, 0xA9, 0x00, 0x00, 0xC6, 0xA9, 0x00, 0x00, 0x39, 0xAA, 0x00, 0x00, 0x45, +/* 000057F0 */ 0xAA, 0x00, 0x00, 0x80, 0xAA, 0x00, 0x00, 0xA7, 0xAA, 0x00, 0x00, 0xC3, 0xAA, 0x00, 0x00, 0xE2, +/* 00005800 */ 0xAA, 0x00, 0x00, 0x02, 0xAB, 0x00, 0x00, 0x0E, 0xAB, 0x00, 0x00, 0x0F, 0xAB, 0x00, 0x00, 0x41, +/* 00005810 */ 0xAB, 0x00, 0x00, 0x67, 0xAB, 0x00, 0x00, 0x84, 0xAB, 0x00, 0x00, 0xA3, 0xAB, 0x00, 0x00, 0xC3, +/* 00005820 */ 0xAB, 0x00, 0x00, 0xCF, 0xAB, 0x00, 0x00, 0xD0, 0xAB, 0x00, 0x00, 0x0D, 0xAC, 0x00, 0x00, 0x2A, +/* 00005830 */ 0xAC, 0x00, 0x00, 0x46, 0xAC, 0x00, 0x00, 0x65, 0xAC, 0x00, 0x00, 0x84, 0xAC, 0x00, 0x00, 0x90, +/* 00005840 */ 0xAC, 0x00, 0x00, 0xD1, 0xAC, 0x00, 0x00, 0x3F, 0xAD, 0x00, 0x00, 0x6F, 0xAD, 0x00, 0x00, 0xD5, +/* 00005850 */ 0xAD, 0x00, 0x00, 0xE7, 0xAD, 0x00, 0x00, 0x2C, 0xAE, 0x00, 0x00, 0x83, 0xAE, 0x00, 0x00, 0xE9, +/* 00005860 */ 0xAE, 0x00, 0x00, 0xFB, 0xAE, 0x00, 0x00, 0xFC, 0xAE, 0x00, 0x00, 0x1E, 0xAF, 0x00, 0x00, 0x3C, +/* 00005870 */ 0xAF, 0x00, 0x00, 0x59, 0xAF, 0x00, 0x00, 0x7C, 0xAF, 0x00, 0x00, 0xA5, 0xAF, 0x00, 0x00, 0xC6, +/* 00005880 */ 0xAF, 0x00, 0x00, 0xE5, 0xAF, 0x00, 0x00, 0x06, 0xB0, 0x00, 0x00, 0x19, 0xB0, 0x00, 0x00, 0x1A, +/* 00005890 */ 0xB0, 0x00, 0x00, 0x5F, 0xB0, 0x00, 0x00, 0x6F, 0xB0, 0x00, 0x00, 0x8B, 0xB0, 0x00, 0x00, 0xAA, +/* 000058A0 */ 0xB0, 0x00, 0x00, 0xC9, 0xB0, 0x00, 0x00, 0xD5, 0xB0, 0x00, 0x00, 0xD6, 0xB0, 0x00, 0x00, 0x4F, +/* 000058B0 */ 0xB1, 0x00, 0x00, 0x9A, 0xB1, 0x00, 0x00, 0xC6, 0xB1, 0x00, 0x00, 0x20, 0xB2, 0x00, 0x00, 0x2E, +/* 000058C0 */ 0xB2, 0x00, 0x00, 0x2F, 0xB2, 0x00, 0x00, 0x70, 0xB2, 0x00, 0x00, 0xC3, 0xB2, 0x00, 0x00, 0x1D, +/* 000058D0 */ 0xB3, 0x00, 0x00, 0x2B, 0xB3, 0x00, 0x00, 0x2C, 0xB3, 0x00, 0x00, 0x5A, 0xB3, 0x00, 0x00, 0x66, +/* 000058E0 */ 0xB3, 0x00, 0x00, 0x9F, 0xB3, 0x00, 0x00, 0xBC, 0xB3, 0x00, 0x00, 0xDB, 0xB3, 0x00, 0x00, 0xFA, +/* 000058F0 */ 0xB3, 0x00, 0x00, 0x06, 0xB4, 0x00, 0x00, 0x07, 0xB4, 0x00, 0x00, 0x20, 0xB4, 0x00, 0x00, 0x2A, +/* 00005900 */ 0xB4, 0x00, 0x00, 0x2B, 0xB4, 0x00, 0x00, 0x65, 0xB4, 0x00, 0x00, 0x8B, 0xB4, 0x00, 0x00, 0xC7, +/* 00005910 */ 0xB4, 0x00, 0x00, 0xDB, 0xB4, 0x00, 0x00, 0xE5, 0xB4, 0x00, 0x00, 0xE6, 0xB4, 0x00, 0x00, 0x2F, +/* 00005920 */ 0xB5, 0x00, 0x00, 0x75, 0xB5, 0x00, 0x00, 0xCC, 0xB5, 0x00, 0x00, 0xCD, 0xB5, 0x00, 0x00, 0xF1, +/* 00005930 */ 0xB5, 0x00, 0x00, 0x64, 0xB6, 0x00, 0x00, 0x65, 0xB6, 0x00, 0x00, 0xC7, 0xB6, 0x00, 0x00, 0xE9, +/* 00005940 */ 0xB6, 0x00, 0x00, 0x10, 0xB7, 0x00, 0x00, 0x11, 0xB7, 0x00, 0x00, 0x81, 0xB7, 0x00, 0x00, 0x9F, +/* 00005950 */ 0xB7, 0x00, 0x00, 0xE2, 0xB7, 0x00, 0x00, 0x18, 0xB8, 0x00, 0x00, 0x19, 0xB8, 0x00, 0x00, 0x74, +/* 00005960 */ 0xB8, 0x00, 0x00, 0xC5, 0xB8, 0x00, 0x00, 0x02, 0xB9, 0x00, 0x00, 0x42, 0xB9, 0x00, 0x00, 0x77, +/* 00005970 */ 0xB9, 0x00, 0x00, 0x85, 0xB9, 0x00, 0x00, 0x86, 0xB9, 0x00, 0x00, 0xA3, 0xB9, 0x00, 0x00, 0xC2, +/* 00005980 */ 0xB9, 0x00, 0x00, 0xF6, 0xB9, 0x00, 0x00, 0x1E, 0xBA, 0x00, 0x00, 0x5B, 0xBA, 0x00, 0x00, 0x69, +/* 00005990 */ 0xBA, 0x00, 0x00, 0x6A, 0xBA, 0x00, 0x00, 0xE3, 0xBA, 0x00, 0x00, 0x02, 0xBB, 0x00, 0x00, 0x38, +/* 000059A0 */ 0xBB, 0x00, 0x00, 0x99, 0xBB, 0x00, 0x00, 0xA7, 0xBB, 0x00, 0x00, 0xA8, 0xBB, 0x00, 0x00, 0xD2, +/* 000059B0 */ 0xBB, 0x00, 0x00, 0xF1, 0xBB, 0x00, 0x00, 0x18, 0xBC, 0x00, 0x00, 0x3F, 0xBC, 0x00, 0x00, 0x54, +/* 000059C0 */ 0xBC, 0x00, 0x00, 0x75, 0xBC, 0x00, 0x00, 0xA0, 0xBC, 0x00, 0x00, 0xC5, 0xBC, 0x00, 0x00, 0xDE, +/* 000059D0 */ 0xBC, 0x00, 0x00, 0x03, 0xBD, 0x00, 0x00, 0x15, 0xBD, 0x00, 0x00, 0x23, 0xBD, 0x00, 0x00, 0x24, +/* 000059E0 */ 0xBD, 0x00, 0x00, 0x74, 0xBD, 0x00, 0x00, 0x75, 0xBD, 0x00, 0x00, 0xD1, 0xBD, 0x00, 0x00, 0xD2, +/* 000059F0 */ 0xBD, 0x00, 0x00, 0x01, 0xBE, 0x00, 0x00, 0x02, 0xBE, 0x00, 0x00, 0x4E, 0xBE, 0x00, 0x00, 0x7A, +/* 00005A00 */ 0xBE, 0x00, 0x00, 0x7B, 0xBE, 0x00, 0x00, 0x92, 0xBE, 0x00, 0x00, 0x9D, 0xBE, 0x00, 0x00, 0x9E, +/* 00005A10 */ 0xBE, 0x00, 0x00, 0x19, 0xBF, 0x00, 0x00, 0x62, 0xBF, 0x00, 0x00, 0xBF, 0xBF, 0x00, 0x00, 0xCD, +/* 00005A20 */ 0xBF, 0x00, 0x00, 0xCE, 0xBF, 0x00, 0x00, 0xFA, 0xBF, 0x00, 0x00, 0x47, 0xC0, 0x00, 0x00, 0x48, +/* 00005A30 */ 0xC0, 0x00, 0x00, 0x77, 0xC0, 0x00, 0x00, 0xF3, 0xC0, 0x00, 0x00, 0x31, 0xC1, 0x00, 0x00, 0x32, +/* 00005A40 */ 0xC1, 0x00, 0x00, 0x57, 0xC1, 0x00, 0x00, 0x6B, 0xC1, 0x00, 0x00, 0x75, 0xC1, 0x00, 0x00, 0x76, +/* 00005A50 */ 0xC1, 0x00, 0x00, 0xA0, 0xC1, 0x00, 0x00, 0xA1, 0xC1, 0x00, 0x00, 0x27, 0xC2, 0x00, 0x00, 0x7B, +/* 00005A60 */ 0xC2, 0x00, 0x00, 0xDD, 0xC2, 0x00, 0x00, 0xDE, 0xC2, 0x00, 0x00, 0x25, 0xC3, 0x00, 0x00, 0x53, +/* 00005A70 */ 0xC3, 0x00, 0x00, 0x7E, 0xC3, 0x00, 0x00, 0xC4, 0xC3, 0x00, 0x00, 0xD2, 0xC3, 0x00, 0x00, 0xD3, +/* 00005A80 */ 0xC3, 0x00, 0x00, 0x17, 0xC4, 0x00, 0x00, 0x18, 0xC4, 0x00, 0x00, 0x64, 0xC4, 0x00, 0x00, 0xA6, +/* 00005A90 */ 0xC4, 0x00, 0x00, 0xCF, 0xC4, 0x00, 0x00, 0xF4, 0xC4, 0x00, 0x00, 0x1B, 0xC5, 0x00, 0x00, 0x43, +/* 00005AA0 */ 0xC5, 0x00, 0x00, 0x57, 0xC5, 0x00, 0x00, 0x58, 0xC5, 0x00, 0x00, 0x75, 0xC5, 0x00, 0x00, 0x83, +/* 00005AB0 */ 0xC5, 0x00, 0x00, 0x84, 0xC5, 0x00, 0x00, 0xA5, 0xC5, 0x00, 0x00, 0xB1, 0xC5, 0x00, 0x00, 0xB2, +/* 00005AC0 */ 0xC5, 0x00, 0x00, 0x11, 0xC6, 0x00, 0x00, 0x76, 0xC6, 0x00, 0x00, 0x9C, 0xC6, 0x00, 0x00, 0x9D, +/* 00005AD0 */ 0xC6, 0x00, 0x00, 0xD7, 0xC6, 0x00, 0x00, 0x38, 0xC7, 0x00, 0x00, 0x46, 0xC7, 0x00, 0x00, 0x47, +/* 00005AE0 */ 0xC7, 0x00, 0x00, 0xBD, 0xC7, 0x00, 0x00, 0xC9, 0xC7, 0x00, 0x00, 0xCA, 0xC7, 0x00, 0x00, 0x44, +/* 00005AF0 */ 0xC8, 0x00, 0x00, 0x6A, 0xC8, 0x00, 0x00, 0x6B, 0xC8, 0x00, 0x00, 0x97, 0xC8, 0x00, 0x00, 0xFF, +/* 00005B00 */ 0xC8, 0x00, 0x00, 0x0D, 0xC9, 0x00, 0x00, 0x0E, 0xC9, 0x00, 0x00, 0x4F, 0xC9, 0x00, 0x00, 0xA6, +/* 00005B10 */ 0xC9, 0x00, 0x00, 0x0E, 0xCA, 0x00, 0x00, 0x1C, 0xCA, 0x00, 0x00, 0x1D, 0xCA, 0x00, 0x00, 0x9A, +/* 00005B20 */ 0xCA, 0x00, 0x00, 0xA6, 0xCA, 0x00, 0x00, 0xA7, 0xCA, 0x00, 0x00, 0x41, 0xCB, 0x00, 0x00, 0xAE, +/* 00005B30 */ 0xCB, 0x00, 0x00, 0xBA, 0xCB, 0x00, 0x00, 0xF9, 0xCB, 0x00, 0x00, 0x20, 0xCC, 0x00, 0x00, 0x3C, +/* 00005B40 */ 0xCC, 0x00, 0x00, 0x5B, 0xCC, 0x00, 0x00, 0x7B, 0xCC, 0x00, 0x00, 0x87, 0xCC, 0x00, 0x00, 0x88, +/* 00005B50 */ 0xCC, 0x00, 0x00, 0xBE, 0xCC, 0x00, 0x00, 0xE8, 0xCC, 0x00, 0x00, 0x05, 0xCD, 0x00, 0x00, 0x24, +/* 00005B60 */ 0xCD, 0x00, 0x00, 0x44, 0xCD, 0x00, 0x00, 0x50, 0xCD, 0x00, 0x00, 0x51, 0xCD, 0x00, 0x00, 0x92, +/* 00005B70 */ 0xCD, 0x00, 0x00, 0xB3, 0xCD, 0x00, 0x00, 0xCF, 0xCD, 0x00, 0x00, 0xEE, 0xCD, 0x00, 0x00, 0x0E, +/* 00005B80 */ 0xCE, 0x00, 0x00, 0x1A, 0xCE, 0x00, 0x00, 0x1B, 0xCE, 0x00, 0x00, 0x4E, 0xCE, 0x00, 0x00, 0x8B, +/* 00005B90 */ 0xCE, 0x00, 0x00, 0xF5, 0xCE, 0x00, 0x00, 0x27, 0xCF, 0x00, 0x00, 0x35, 0xCF, 0x00, 0x00, 0x36, +/* 00005BA0 */ 0xCF, 0x00, 0x00, 0x60, 0xCF, 0x00, 0x00, 0xC1, 0xCF, 0x00, 0x00, 0xCF, 0xCF, 0x00, 0x00, 0xD0, +/* 00005BB0 */ 0xCF, 0x00, 0x00, 0x09, 0xD0, 0x00, 0x00, 0x42, 0xD0, 0x00, 0x00, 0xA3, 0xD0, 0x00, 0x00, 0xB1, +/* 00005BC0 */ 0xD0, 0x00, 0x00, 0xB2, 0xD0, 0x00, 0x00, 0xD3, 0xD0, 0x00, 0x00, 0xDE, 0xD0, 0x00, 0x00, 0xDF, +/* 00005BD0 */ 0xD0, 0x00, 0x00, 0x24, 0xD1, 0x00, 0x00, 0x96, 0xD1, 0x00, 0x00, 0xC6, 0xD1, 0x00, 0x00, 0x2B, +/* 00005BE0 */ 0xD2, 0x00, 0x00, 0x3D, 0xD2, 0x00, 0x00, 0x3E, 0xD2, 0x00, 0x00, 0x7D, 0xD2, 0x00, 0x00, 0x7E, +/* 00005BF0 */ 0xD2, 0x00, 0x00, 0xFC, 0xD2, 0x00, 0x00, 0x7A, 0xD3, 0x00, 0x00, 0x9E, 0xD3, 0x00, 0x00, 0x9F, +/* 00005C00 */ 0xD3, 0x00, 0x00, 0xE4, 0xD3, 0x00, 0x00, 0xF4, 0xD3, 0x00, 0x00, 0x10, 0xD4, 0x00, 0x00, 0x2F, +/* 00005C10 */ 0xD4, 0x00, 0x00, 0x4F, 0xD4, 0x00, 0x00, 0x5B, 0xD4, 0x00, 0x00, 0x5C, 0xD4, 0x00, 0x00, 0xD8, +/* 00005C20 */ 0xD4, 0x00, 0x00, 0x21, 0xD5, 0x00, 0x00, 0x4D, 0xD5, 0x00, 0x00, 0xAE, 0xD5, 0x00, 0x00, 0xBC, +/* 00005C30 */ 0xD5, 0x00, 0x00, 0xBD, 0xD5, 0x00, 0x00, 0xF8, 0xD5, 0x00, 0x00, 0xF9, 0xD5, 0x00, 0x00, 0x33, +/* 00005C40 */ 0xD6, 0x00, 0x00, 0x7C, 0xD6, 0x00, 0x00, 0xB2, 0xD6, 0x00, 0x00, 0xC0, 0xD6, 0x00, 0x00, 0xC1, +/* 00005C50 */ 0xD6, 0x00, 0x00, 0xEE, 0xD6, 0x00, 0x00, 0xFA, 0xD6, 0x00, 0x00, 0x28, 0xD7, 0x00, 0x00, 0x49, +/* 00005C60 */ 0xD7, 0x00, 0x00, 0x66, 0xD7, 0x00, 0x00, 0x85, 0xD7, 0x00, 0x00, 0xA5, 0xD7, 0x00, 0x00, 0xB1, +/* 00005C70 */ 0xD7, 0x00, 0x00, 0xED, 0xD7, 0x00, 0x00, 0x09, 0xD8, 0x00, 0x00, 0x28, 0xD8, 0x00, 0x00, 0x48, +/* 00005C80 */ 0xD8, 0x00, 0x00, 0x54, 0xD8, 0x00, 0x00, 0x55, 0xD8, 0x00, 0x00, 0x98, 0xD8, 0x00, 0x00, 0xBA, +/* 00005C90 */ 0xD8, 0x00, 0x00, 0xD9, 0xD8, 0x00, 0x00, 0xF9, 0xD8, 0x00, 0x00, 0x15, 0xD9, 0x00, 0x00, 0x21, +/* 00005CA0 */ 0xD9, 0x00, 0x00, 0x22, 0xD9, 0x00, 0x00, 0x3F, 0xD9, 0x00, 0x00, 0x49, 0xD9, 0x00, 0x00, 0x4A, +/* 00005CB0 */ 0xD9, 0x00, 0x00, 0xCA, 0xD9, 0x00, 0x00, 0xF2, 0xD9, 0x00, 0x00, 0x2C, 0xDA, 0x00, 0x00, 0x40, +/* 00005CC0 */ 0xDA, 0x00, 0x00, 0x4A, 0xDA, 0x00, 0x00, 0x4B, 0xDA, 0x00, 0x00, 0x88, 0xDA, 0x00, 0x00, 0xC0, +/* 00005CD0 */ 0xDA, 0x00, 0x00, 0x0C, 0xDB, 0x00, 0x00, 0x31, 0xDB, 0x00, 0x00, 0x5B, 0xDB, 0x00, 0x00, 0x81, +/* 00005CE0 */ 0xDB, 0x00, 0x00, 0xA8, 0xDB, 0x00, 0x00, 0xFA, 0xDB, 0x00, 0x00, 0x20, 0xDC, 0x00, 0x00, 0x47, +/* 00005CF0 */ 0xDC, 0x00, 0x00, 0x70, 0xDC, 0x00, 0x00, 0x99, 0xDC, 0x00, 0x00, 0x02, 0xDD, 0x00, 0x00, 0x0D, +/* 00005D00 */ 0xDD, 0x00, 0x00, 0x0E, 0xDD, 0x00, 0x00, 0x1A, 0xDD, 0x00, 0x00, 0x86, 0xDD, 0x00, 0x00, 0x03, +/* 00005D10 */ 0xDE, 0x00, 0x00, 0x0E, 0xDE, 0x00, 0x00, 0x50, 0xDE, 0x00, 0x00, 0xA3, 0xDE, 0x00, 0x00, 0xAF, +/* 00005D20 */ 0xDE, 0x00, 0x00, 0xE3, 0xDE, 0x00, 0x00, 0x62, 0xDF, 0x00, 0x00, 0x88, 0xDF, 0x00, 0x00, 0xA6, +/* 00005D30 */ 0xDF, 0x00, 0x00, 0xC0, 0xDF, 0x00, 0x00, 0xDB, 0xDF, 0x00, 0x00, 0xF7, 0xDF, 0x00, 0x00, 0x11, +/* 00005D40 */ 0xE0, 0x00, 0x00, 0x4C, 0xE0, 0x00, 0x00, 0x81, 0xE0, 0x00, 0x00, 0x9E, 0xE0, 0x00, 0x00, 0xBB, +/* 00005D50 */ 0xE0, 0x00, 0x00, 0xDE, 0xE0, 0x00, 0x00, 0xED, 0xE0, 0x00, 0x00, 0x72, 0xE1, 0x00, 0x00, 0x98, +/* 00005D60 */ 0xE1, 0x00, 0x00, 0xD2, 0xE1, 0x00, 0x00, 0xEC, 0xE1, 0x00, 0x00, 0x1D, 0xE2, 0x00, 0x00, 0x45, +/* 00005D70 */ 0xE2, 0x00, 0x00, 0x5F, 0xE2, 0x00, 0x00, 0x9B, 0xE2, 0x00, 0x00, 0xB8, 0xE2, 0x00, 0x00, 0xD5, +/* 00005D80 */ 0xE2, 0x00, 0x00, 0x6A, 0xE3, 0x00, 0x00, 0x79, 0xE3, 0x00, 0x00, 0x7A, 0xE3, 0x00, 0x00, 0xDF, +/* 00005D90 */ 0xE3, 0x00, 0x00, 0x4E, 0xE4, 0x00, 0x00, 0x7A, 0xE4, 0x00, 0x00, 0x96, 0xE4, 0x00, 0x00, 0xB4, +/* 00005DA0 */ 0xE4, 0x00, 0x00, 0xCE, 0xE4, 0x00, 0x00, 0xE7, 0xE4, 0x00, 0x00, 0x02, 0xE5, 0x00, 0x00, 0x11, +/* 00005DB0 */ 0xE5, 0x00, 0x00, 0x3D, 0xE5, 0x00, 0x00, 0x5B, 0xE5, 0x00, 0x00, 0x79, 0xE5, 0x00, 0x00, 0x95, +/* 00005DC0 */ 0xE5, 0x00, 0x00, 0xB0, 0xE5, 0x00, 0x00, 0xCD, 0xE5, 0x00, 0x00, 0xDC, 0xE5, 0x00, 0x00, 0xDD, +/* 00005DD0 */ 0xE5, 0x00, 0x00, 0x11, 0xE6, 0x00, 0x00, 0x3B, 0xE6, 0x00, 0x00, 0x55, 0xE6, 0x00, 0x00, 0x6F, +/* 00005DE0 */ 0xE6, 0x00, 0x00, 0x89, 0xE6, 0x00, 0x00, 0xA3, 0xE6, 0x00, 0x00, 0xB2, 0xE6, 0x00, 0x00, 0xDC, +/* 00005DF0 */ 0xE6, 0x00, 0x00, 0xF6, 0xE6, 0x00, 0x00, 0x10, 0xE7, 0x00, 0x00, 0x2A, 0xE7, 0x00, 0x00, 0x44, +/* 00005E00 */ 0xE7, 0x00, 0x00, 0x53, 0xE7, 0x00, 0x00, 0x54, 0xE7, 0x00, 0x00, 0xBB, 0xE7, 0x00, 0x00, 0xF0, +/* 00005E10 */ 0xE7, 0x00, 0x00, 0x56, 0xE8, 0x00, 0x00, 0x85, 0xE8, 0x00, 0x00, 0xE4, 0xE8, 0x00, 0x00, 0x13, +/* 00005E20 */ 0xE9, 0x00, 0x00, 0x43, 0xE9, 0x00, 0x00, 0x59, 0xE9, 0x00, 0x00, 0x5A, 0xE9, 0x00, 0x00, 0x7F, +/* 00005E30 */ 0xE9, 0x00, 0x00, 0x9F, 0xE9, 0x00, 0x00, 0xA0, 0xE9, 0x00, 0x00, 0xCA, 0xE9, 0x00, 0x00, 0xCB, +/* 00005E40 */ 0xE9, 0x00, 0x00, 0x56, 0xEA, 0x00, 0x00, 0xBA, 0xEA, 0x00, 0x00, 0xFC, 0xEA, 0x00, 0x00, 0x2C, +/* 00005E50 */ 0xEB, 0x00, 0x00, 0x84, 0xEB, 0x00, 0x00, 0xF0, 0xEB, 0x00, 0x00, 0x4D, 0xEC, 0x00, 0x00, 0xC4, +/* 00005E60 */ 0xEC, 0x00, 0x00, 0x47, 0xED, 0x00, 0x00, 0x9D, 0xED, 0x00, 0x00, 0x08, 0xEE, 0x00, 0x00, 0x3A, +/* 00005E70 */ 0xEE, 0x00, 0x00, 0xAD, 0xEE, 0x00, 0x00, 0xDF, 0xEE, 0x00, 0x00, 0xF9, 0xEE, 0x00, 0x00, 0x0F, +/* 00005E80 */ 0xEF, 0x00, 0x00, 0x10, 0xEF, 0x00, 0x00, 0x80, 0xEF, 0x00, 0x00, 0x98, 0xEF, 0x00, 0x00, 0x99, +/* 00005E90 */ 0xEF, 0x00, 0x00, 0xED, 0xEF, 0x00, 0x00, 0xEE, 0xEF, 0x00, 0x00, 0x83, 0xF0, 0x00, 0x00, 0x12, +/* 00005EA0 */ 0xF1, 0x00, 0x00, 0xA7, 0xF1, 0x00, 0x00, 0xCE, 0xF1, 0x00, 0x00, 0xE9, 0xF1, 0x00, 0x00, 0x16, +/* 00005EB0 */ 0xF2, 0x00, 0x00, 0x40, 0xF2, 0x00, 0x00, 0x71, 0xF2, 0x00, 0x00, 0x96, 0xF2, 0x00, 0x00, 0xBD, +/* 00005EC0 */ 0xF2, 0x00, 0x00, 0xEC, 0xF2, 0x00, 0x00, 0x06, 0xF3, 0x00, 0x00, 0x23, 0xF3, 0x00, 0x00, 0x45, +/* 00005ED0 */ 0xF3, 0x00, 0x00, 0x6F, 0xF3, 0x00, 0x00, 0x99, 0xF3, 0x00, 0x00, 0xB6, 0xF3, 0x00, 0x00, 0xD8, +/* 00005EE0 */ 0xF3, 0x00, 0x00, 0x06, 0xF4, 0x00, 0x00, 0x23, 0xF4, 0x00, 0x00, 0x45, 0xF4, 0x00, 0x00, 0x5B, +/* 00005EF0 */ 0xF4, 0x00, 0x00, 0x5C, 0xF4, 0x00, 0x00, 0xC2, 0xF4, 0x00, 0x00, 0x29, 0xF5, 0x00, 0x00, 0x7D, +/* 00005F00 */ 0xF5, 0x00, 0x00, 0xB7, 0xF5, 0x00, 0x00, 0x26, 0xF6, 0x00, 0x00, 0x98, 0xF6, 0x00, 0x00, 0xEF, +/* 00005F10 */ 0xF6, 0x00, 0x00, 0x38, 0xF7, 0x00, 0x00, 0x6F, 0xF7, 0x00, 0x00, 0xAD, 0xF7, 0x00, 0x00, 0xE1, +/* 00005F20 */ 0xF7, 0x00, 0x00, 0x65, 0xF8, 0x00, 0x00, 0x8E, 0xF8, 0x00, 0x00, 0xC2, 0xF8, 0x00, 0x00, 0x38, +/* 00005F30 */ 0xF9, 0x00, 0x00, 0x5A, 0xF9, 0x00, 0x00, 0x5B, 0xF9, 0x00, 0x00, 0xB3, 0xF9, 0x00, 0x00, 0xE5, +/* 00005F40 */ 0xF9, 0x00, 0x00, 0x03, 0xFA, 0x00, 0x00, 0x24, 0xFA, 0x00, 0x00, 0x92, 0xFA, 0x00, 0x00, 0xEF, +/* 00005F50 */ 0xFA, 0x00, 0x00, 0x35, 0xFB, 0x00, 0x00, 0x4F, 0xFB, 0x00, 0x00, 0x65, 0xFB, 0x00, 0x00, 0x66, +/* 00005F60 */ 0xFB, 0x00, 0x00, 0x89, 0xFB, 0x00, 0x00, 0xD0, 0xFB, 0x00, 0x00, 0xED, 0xFB, 0x00, 0x00, 0x03, +/* 00005F70 */ 0xFC, 0x00, 0x00, 0x04, 0xFC, 0x00, 0x00, 0x42, 0xFC, 0x00, 0x00, 0x8A, 0xFC, 0x00, 0x00, 0xC0, +/* 00005F80 */ 0xFC, 0x00, 0x00, 0xDB, 0xFC, 0x00, 0x00, 0xED, 0xFC, 0x00, 0x00, 0xEE, 0xFC, 0x00, 0x00, 0x15, +/* 00005F90 */ 0xFD, 0x00, 0x00, 0x24, 0xFD, 0x00, 0x00, 0x32, 0xFD, 0x00, 0x00, 0x33, 0xFD, 0x00, 0x00, 0x3F, +/* 00005FA0 */ 0xFD, 0x00, 0x00, 0x96, 0xFD, 0x00, 0x00, 0xA1, 0xFD, 0x00, 0x00, 0xD4, 0xFD, 0x00, 0x00, 0xDF, +/* 00005FB0 */ 0xFD, 0x00, 0x00, 0x59, 0xFE, 0x00, 0x00, 0xA5, 0xFE, 0x00, 0x00, 0xE7, 0xFE, 0x00, 0x00, 0xF3, +/* 00005FC0 */ 0xFE, 0x00, 0x00, 0x4A, 0xFF, 0x00, 0x00, 0x90, 0xFF, 0x00, 0x00, 0xD1, 0xFF, 0x00, 0x00, 0xD2, +/* 00005FD0 */ 0xFF, 0x00, 0x00, 0xF6, 0xFF, 0x00, 0x00, 0x69, 0x00, 0x01, 0x00, 0x6A, 0x00, 0x01, 0x00, 0xD9, +/* 00005FE0 */ 0x00, 0x01, 0x00, 0x26, 0x01, 0x01, 0x00, 0x80, 0x01, 0x01, 0x00, 0xF0, 0x01, 0x01, 0x00, 0x18, +/* 00005FF0 */ 0x02, 0x01, 0x00, 0x3A, 0x02, 0x01, 0x00, 0x48, 0x02, 0x01, 0x00, 0x68, 0x02, 0x01, 0x00, 0x69, +/* 00006000 */ 0x02, 0x01, 0x00, 0xD8, 0x02, 0x01, 0x00, 0x06, 0x03, 0x01, 0x00, 0x32, 0x03, 0x01, 0x00, 0x5F, +/* 00006010 */ 0x03, 0x01, 0x00, 0x92, 0x03, 0x01, 0x00, 0x93, 0x03, 0x01, 0x00, 0xCA, 0x03, 0x01, 0x00, 0xF1, +/* 00006020 */ 0x03, 0x01, 0x00, 0x15, 0x04, 0x01, 0x00, 0x49, 0x04, 0x01, 0x00, 0x5E, 0x04, 0x01, 0x00, 0x8A, +/* 00006030 */ 0x04, 0x01, 0x00, 0x98, 0x04, 0x01, 0x00, 0x99, 0x04, 0x01, 0x00, 0x0E, 0x05, 0x01, 0x00, 0x51, +/* 00006040 */ 0x05, 0x01, 0x00, 0x9F, 0x05, 0x01, 0x00, 0xED, 0x05, 0x01, 0x00, 0x5E, 0x06, 0x01, 0x00, 0xAF, +/* 00006050 */ 0x06, 0x01, 0x00, 0xCB, 0x06, 0x01, 0x00, 0xE0, 0x06, 0x01, 0x00, 0x02, 0x07, 0x01, 0x00, 0x10, +/* 00006060 */ 0x07, 0x01, 0x00, 0x11, 0x07, 0x01, 0x00, 0x3B, 0x07, 0x01, 0x00, 0x3C, 0x07, 0x01, 0x00, 0x75, +/* 00006070 */ 0x07, 0x01, 0x00, 0xD3, 0x07, 0x01, 0x00, 0xD4, 0x07, 0x01, 0x00, 0x48, 0x08, 0x01, 0x00, 0x8B, +/* 00006080 */ 0x08, 0x01, 0x00, 0xC8, 0x08, 0x01, 0x00, 0xC9, 0x08, 0x01, 0x00, 0xEC, 0x08, 0x01, 0x00, 0xF7, +/* 00006090 */ 0x08, 0x01, 0x00, 0xF8, 0x08, 0x01, 0x00, 0x04, 0x09, 0x01, 0x00, 0x4C, 0x09, 0x01, 0x00, 0x57, +/* 000060A0 */ 0x09, 0x01, 0x00, 0x83, 0x09, 0x01, 0x00, 0x8E, 0x09, 0x01, 0x00, 0x0F, 0x0A, 0x01, 0x00, 0x89, +/* 000060B0 */ 0x0A, 0x01, 0x00, 0x04, 0x0B, 0x01, 0x00, 0x39, 0x0B, 0x01, 0x00, 0x45, 0x0B, 0x01, 0x00, 0x90, +/* 000060C0 */ 0x0B, 0x01, 0x00, 0xE1, 0x0B, 0x01, 0x00, 0x0A, 0x0C, 0x01, 0x00, 0x2F, 0x0C, 0x01, 0x00, 0x6C, +/* 000060D0 */ 0x0C, 0x01, 0x00, 0xBD, 0x0C, 0x01, 0x00, 0xEE, 0x0C, 0x01, 0x00, 0x1D, 0x0D, 0x01, 0x00, 0x4B, +/* 000060E0 */ 0x0D, 0x01, 0x00, 0x61, 0x0D, 0x01, 0x00, 0x75, 0x0D, 0x01, 0x00, 0x83, 0x0D, 0x01, 0x00, 0x84, +/* 000060F0 */ 0x0D, 0x01, 0x00, 0xC1, 0x0D, 0x01, 0x00, 0x0B, 0x0E, 0x01, 0x00, 0x3C, 0x0E, 0x01, 0x00, 0x6B, +/* 00006100 */ 0x0E, 0x01, 0x00, 0x99, 0x0E, 0x01, 0x00, 0xAF, 0x0E, 0x01, 0x00, 0xC3, 0x0E, 0x01, 0x00, 0xD1, +/* 00006110 */ 0x0E, 0x01, 0x00, 0xD2, 0x0E, 0x01, 0x00, 0x2A, 0x0F, 0x01, 0x00, 0x70, 0x0F, 0x01, 0x00, 0xA6, +/* 00006120 */ 0x0F, 0x01, 0x00, 0xD0, 0x0F, 0x01, 0x00, 0xF8, 0x0F, 0x01, 0x00, 0x22, 0x10, 0x01, 0x00, 0x4E, +/* 00006130 */ 0x10, 0x01, 0x00, 0x66, 0x10, 0x01, 0x00, 0x79, 0x10, 0x01, 0x00, 0x87, 0x10, 0x01, 0x00, 0x88, +/* 00006140 */ 0x10, 0x01, 0x00, 0xE0, 0x10, 0x01, 0x00, 0x2A, 0x11, 0x01, 0x00, 0x60, 0x11, 0x01, 0x00, 0x8A, +/* 00006150 */ 0x11, 0x01, 0x00, 0xB2, 0x11, 0x01, 0x00, 0xDC, 0x11, 0x01, 0x00, 0x08, 0x12, 0x01, 0x00, 0x20, +/* 00006160 */ 0x12, 0x01, 0x00, 0x33, 0x12, 0x01, 0x00, 0x41, 0x12, 0x01, 0x00, 0x42, 0x12, 0x01, 0x00, 0x5E, +/* 00006170 */ 0x12, 0x01, 0x00, 0x69, 0x12, 0x01, 0x00, 0x6A, 0x12, 0x01, 0x00, 0xA4, 0x12, 0x01, 0x00, 0xD4, +/* 00006180 */ 0x12, 0x01, 0x00, 0x01, 0x13, 0x01, 0x00, 0x0F, 0x13, 0x01, 0x00, 0x10, 0x13, 0x01, 0x00, 0x84, +/* 00006190 */ 0x13, 0x01, 0x00, 0x8F, 0x13, 0x01, 0x00, 0x90, 0x13, 0x01, 0x00, 0xE2, 0x13, 0x01, 0x00, 0x3E, +/* 000061A0 */ 0x14, 0x01, 0x00, 0x82, 0x14, 0x01, 0x00, 0xA1, 0x14, 0x01, 0x00, 0xC4, 0x14, 0x01, 0x00, 0xE6, +/* 000061B0 */ 0x14, 0x01, 0x00, 0xF2, 0x14, 0x01, 0x00, 0xF3, 0x14, 0x01, 0x00, 0x64, 0x15, 0x01, 0x00, 0xAB, +/* 000061C0 */ 0x15, 0x01, 0x00, 0xE9, 0x15, 0x01, 0x00, 0xF7, 0x15, 0x01, 0x00, 0x2C, 0x16, 0x01, 0x00, 0x64, +/* 000061D0 */ 0x16, 0x01, 0x00, 0x8B, 0x16, 0x01, 0x00, 0x99, 0x16, 0x01, 0x00, 0x9A, 0x16, 0x01, 0x00, 0xC3, +/* 000061E0 */ 0x16, 0x01, 0x00, 0x1B, 0x17, 0x01, 0x00, 0x85, 0x17, 0x01, 0x00, 0xD0, 0x17, 0x01, 0x00, 0xFD, +/* 000061F0 */ 0x17, 0x01, 0x00, 0x54, 0x18, 0x01, 0x00, 0x6D, 0x18, 0x01, 0x00, 0x93, 0x18, 0x01, 0x00, 0xC1, +/* 00006200 */ 0x18, 0x01, 0x00, 0x37, 0x19, 0x01, 0x00, 0x8E, 0x19, 0x01, 0x00, 0xA0, 0x19, 0x01, 0x00, 0xAE, +/* 00006210 */ 0x19, 0x01, 0x00, 0xAF, 0x19, 0x01, 0x00, 0xCF, 0x19, 0x01, 0x00, 0xF9, 0x19, 0x01, 0x00, 0x67, +/* 00006220 */ 0x1A, 0x01, 0x00, 0x75, 0x1A, 0x01, 0x00, 0x76, 0x1A, 0x01, 0x00, 0x08, 0x1B, 0x01, 0x00, 0x12, +/* 00006230 */ 0x1B, 0x01, 0x00, 0x13, 0x1B, 0x01, 0x00, 0x8D, 0x1B, 0x01, 0x00, 0x16, 0x1C, 0x01, 0x00, 0x91, +/* 00006240 */ 0x1C, 0x01, 0x00, 0x16, 0x1D, 0x01, 0x00, 0x37, 0x1D, 0x01, 0x00, 0x42, 0x1D, 0x01, 0x00, 0xCA, +/* 00006250 */ 0x1D, 0x01, 0x00, 0x4C, 0x1E, 0x01, 0x00, 0xD2, 0x1E, 0x01, 0x00, 0x22, 0x1F, 0x01, 0x00, 0x2D, +/* 00006260 */ 0x1F, 0x01, 0x00, 0xAB, 0x1F, 0x01, 0x00, 0x19, 0x20, 0x01, 0x00, 0x70, 0x20, 0x01, 0x00, 0xD7, +/* 00006270 */ 0x20, 0x01, 0x00, 0x4D, 0x21, 0x01, 0x00, 0x9A, 0x21, 0x01, 0x00, 0xA5, 0x21, 0x01, 0x00, 0x2D, +/* 00006280 */ 0x22, 0x01, 0x00, 0xB2, 0x22, 0x01, 0x00, 0xF9, 0x22, 0x01, 0x00, 0xFA, 0x22, 0x01, 0x00, 0x46, +/* 00006290 */ 0x23, 0x01, 0x00, 0xE0, 0x23, 0x01, 0x00, 0x61, 0x24, 0x01, 0x00, 0x86, 0x24, 0x01, 0x00, 0x2D, +/* 000062A0 */ 0x25, 0x01, 0x00, 0x2E, 0x25, 0x01, 0x00, 0x7A, 0x25, 0x01, 0x00, 0x18, 0x26, 0x01, 0x00, 0x99, +/* 000062B0 */ 0x26, 0x01, 0x00, 0xBE, 0x26, 0x01, 0x00, 0x73, 0x27, 0x01, 0x00, 0x74, 0x27, 0x01, 0x00, 0xC0, +/* 000062C0 */ 0x27, 0x01, 0x00, 0x5E, 0x28, 0x01, 0x00, 0xDF, 0x28, 0x01, 0x00, 0x04, 0x29, 0x01, 0x00, 0xB9, +/* 000062D0 */ 0x29, 0x01, 0x00, 0xBA, 0x29, 0x01, 0x00, 0x15, 0x2A, 0x01, 0x00, 0x38, 0x2A, 0x01, 0x00, 0x4C, +/* 000062E0 */ 0x2A, 0x01, 0x00, 0x56, 0x2A, 0x01, 0x00, 0x57, 0x2A, 0x01, 0x00, 0x83, 0x2A, 0x01, 0x00, 0x84, +/* 000062F0 */ 0x2A, 0x01, 0x00, 0x90, 0x2A, 0x01, 0x00, 0xBF, 0x2A, 0x01, 0x00, 0xCA, 0x2A, 0x01, 0x00, 0xF8, +/* 00006300 */ 0x2A, 0x01, 0x00, 0x03, 0x2B, 0x01, 0x00, 0x2F, 0x2B, 0x01, 0x00, 0x52, 0x2B, 0x01, 0x00, 0x5E, +/* 00006310 */ 0x2B, 0x01, 0x00, 0xEA, 0x2B, 0x01, 0x00, 0x40, 0x2C, 0x01, 0x00, 0xA6, 0x2C, 0x01, 0x00, 0xA7, +/* 00006320 */ 0x2C, 0x01, 0x00, 0xF0, 0x2C, 0x01, 0x00, 0x1E, 0x2D, 0x01, 0x00, 0x49, 0x2D, 0x01, 0x00, 0x91, +/* 00006330 */ 0x2D, 0x01, 0x00, 0x9F, 0x2D, 0x01, 0x00, 0xA0, 0x2D, 0x01, 0x00, 0xE6, 0x2D, 0x01, 0x00, 0xE7, +/* 00006340 */ 0x2D, 0x01, 0x00, 0x35, 0x2E, 0x01, 0x00, 0x77, 0x2E, 0x01, 0x00, 0xA2, 0x2E, 0x01, 0x00, 0xC7, +/* 00006350 */ 0x2E, 0x01, 0x00, 0xEE, 0x2E, 0x01, 0x00, 0x16, 0x2F, 0x01, 0x00, 0x2A, 0x2F, 0x01, 0x00, 0x2B, +/* 00006360 */ 0x2F, 0x01, 0x00, 0x48, 0x2F, 0x01, 0x00, 0x56, 0x2F, 0x01, 0x00, 0x57, 0x2F, 0x01, 0x00, 0x7A, +/* 00006370 */ 0x2F, 0x01, 0x00, 0x86, 0x2F, 0x01, 0x00, 0x87, 0x2F, 0x01, 0x00, 0xBD, 0x2F, 0x01, 0x00, 0xFB, +/* 00006380 */ 0x2F, 0x01, 0x00, 0x6A, 0x30, 0x01, 0x00, 0x9E, 0x30, 0x01, 0x00, 0xAC, 0x30, 0x01, 0x00, 0xAD, +/* 00006390 */ 0x30, 0x01, 0x00, 0xD8, 0x30, 0x01, 0x00, 0x3D, 0x31, 0x01, 0x00, 0x4B, 0x31, 0x01, 0x00, 0x4C, +/* 000063A0 */ 0x31, 0x01, 0x00, 0x86, 0x31, 0x01, 0x00, 0xC1, 0x31, 0x01, 0x00, 0x26, 0x32, 0x01, 0x00, 0x34, +/* 000063B0 */ 0x32, 0x01, 0x00, 0x35, 0x32, 0x01, 0x00, 0x56, 0x32, 0x01, 0x00, 0x61, 0x32, 0x01, 0x00, 0x62, +/* 000063C0 */ 0x32, 0x01, 0x00, 0xC3, 0x32, 0x01, 0x00, 0x2D, 0x33, 0x01, 0x00, 0x69, 0x33, 0x01, 0x00, 0xCE, +/* 000063D0 */ 0x33, 0x01, 0x00, 0xDC, 0x33, 0x01, 0x00, 0xDD, 0x33, 0x01, 0x00, 0xF0, 0x33, 0x01, 0x00, 0x16, +/* 000063E0 */ 0x34, 0x01, 0x00, 0x54, 0x34, 0x01, 0x00, 0x69, 0x34, 0x01, 0x00, 0x96, 0x34, 0x01, 0x00, 0x97, +/* 000063F0 */ 0x34, 0x01, 0x00, 0xCB, 0x34, 0x01, 0x00, 0xFC, 0x34, 0x01, 0x00, 0x0E, 0x35, 0x01, 0x00, 0x1C, +/* 00006400 */ 0x35, 0x01, 0x00, 0x1D, 0x35, 0x01, 0x00, 0x93, 0x35, 0x01, 0x00, 0x9F, 0x35, 0x01, 0x00, 0xA0, +/* 00006410 */ 0x35, 0x01, 0x00, 0x1F, 0x36, 0x01, 0x00, 0x4B, 0x36, 0x01, 0x00, 0xB7, 0x36, 0x01, 0x00, 0xC5, +/* 00006420 */ 0x36, 0x01, 0x00, 0xC6, 0x36, 0x01, 0x00, 0x07, 0x37, 0x01, 0x00, 0x60, 0x37, 0x01, 0x00, 0xCC, +/* 00006430 */ 0x37, 0x01, 0x00, 0xDA, 0x37, 0x01, 0x00, 0xDB, 0x37, 0x01, 0x00, 0xEE, 0x37, 0x01, 0x00, 0x14, +/* 00006440 */ 0x38, 0x01, 0x00, 0x52, 0x38, 0x01, 0x00, 0x67, 0x38, 0x01, 0x00, 0x94, 0x38, 0x01, 0x00, 0x95, +/* 00006450 */ 0x38, 0x01, 0x00, 0xC9, 0x38, 0x01, 0x00, 0xFA, 0x38, 0x01, 0x00, 0x0C, 0x39, 0x01, 0x00, 0x1A, +/* 00006460 */ 0x39, 0x01, 0x00, 0x1B, 0x39, 0x01, 0x00, 0x98, 0x39, 0x01, 0x00, 0xA4, 0x39, 0x01, 0x00, 0xA5, +/* 00006470 */ 0x39, 0x01, 0x00, 0xDD, 0x39, 0x01, 0x00, 0x09, 0x3A, 0x01, 0x00, 0x26, 0x3A, 0x01, 0x00, 0x45, +/* 00006480 */ 0x3A, 0x01, 0x00, 0x65, 0x3A, 0x01, 0x00, 0x71, 0x3A, 0x01, 0x00, 0x72, 0x3A, 0x01, 0x00, 0xB5, +/* 00006490 */ 0x3A, 0x01, 0x00, 0xD8, 0x3A, 0x01, 0x00, 0xF4, 0x3A, 0x01, 0x00, 0x13, 0x3B, 0x01, 0x00, 0x32, +/* 000064A0 */ 0x3B, 0x01, 0x00, 0x3E, 0x3B, 0x01, 0x00, 0x3F, 0x3B, 0x01, 0x00, 0xBD, 0x3B, 0x01, 0x00, 0x06, +/* 000064B0 */ 0x3C, 0x01, 0x00, 0x32, 0x3C, 0x01, 0x00, 0x97, 0x3C, 0x01, 0x00, 0xA5, 0x3C, 0x01, 0x00, 0xA6, +/* 000064C0 */ 0x3C, 0x01, 0x00, 0xE3, 0x3C, 0x01, 0x00, 0xE4, 0x3C, 0x01, 0x00, 0x1E, 0x3D, 0x01, 0x00, 0x67, +/* 000064D0 */ 0x3D, 0x01, 0x00, 0x9D, 0x3D, 0x01, 0x00, 0xAB, 0x3D, 0x01, 0x00, 0xAC, 0x3D, 0x01, 0x00, 0xD9, +/* 000064E0 */ 0x3D, 0x01, 0x00, 0xE5, 0x3D, 0x01, 0x00, 0x13, 0x3E, 0x01, 0x00, 0x34, 0x3E, 0x01, 0x00, 0x51, +/* 000064F0 */ 0x3E, 0x01, 0x00, 0x70, 0x3E, 0x01, 0x00, 0x90, 0x3E, 0x01, 0x00, 0x9C, 0x3E, 0x01, 0x00, 0xDA, +/* 00006500 */ 0x3E, 0x01, 0x00, 0xF6, 0x3E, 0x01, 0x00, 0x15, 0x3F, 0x01, 0x00, 0x35, 0x3F, 0x01, 0x00, 0x41, +/* 00006510 */ 0x3F, 0x01, 0x00, 0x86, 0x3F, 0x01, 0x00, 0xA8, 0x3F, 0x01, 0x00, 0xC7, 0x3F, 0x01, 0x00, 0xE7, +/* 00006520 */ 0x3F, 0x01, 0x00, 0x03, 0x40, 0x01, 0x00, 0x0F, 0x40, 0x01, 0x00, 0x56, 0x40, 0x01, 0x00, 0xCA, +/* 00006530 */ 0x40, 0x01, 0x00, 0xFA, 0x40, 0x01, 0x00, 0x63, 0x41, 0x01, 0x00, 0x75, 0x41, 0x01, 0x00, 0x76, +/* 00006540 */ 0x41, 0x01, 0x00, 0xB7, 0x41, 0x01, 0x00, 0xD9, 0x41, 0x01, 0x00, 0xF7, 0x41, 0x01, 0x00, 0x17, +/* 00006550 */ 0x42, 0x01, 0x00, 0x3E, 0x42, 0x01, 0x00, 0x5E, 0x42, 0x01, 0x00, 0x7F, 0x42, 0x01, 0x00, 0x9E, +/* 00006560 */ 0x42, 0x01, 0x00, 0xB9, 0x42, 0x01, 0x00, 0xD5, 0x42, 0x01, 0x00, 0xF2, 0x42, 0x01, 0x00, 0x0D, +/* 00006570 */ 0x43, 0x01, 0x00, 0x29, 0x43, 0x01, 0x00, 0x47, 0x43, 0x01, 0x00, 0x65, 0x43, 0x01, 0x00, 0x89, +/* 00006580 */ 0x43, 0x01, 0x00, 0x9C, 0x43, 0x01, 0x00, 0x9D, 0x43, 0x01, 0x00, 0xFD, 0x43, 0x01, 0x00, 0x2D, +/* 00006590 */ 0x44, 0x01, 0x00, 0x68, 0x44, 0x01, 0x00, 0xB6, 0x44, 0x01, 0x00, 0xEB, 0x44, 0x01, 0x00, 0x37, +/* 000065A0 */ 0x45, 0x01, 0x00, 0x51, 0x45, 0x01, 0x00, 0x52, 0x45, 0x01, 0x00, 0x77, 0x45, 0x01, 0x00, 0x8D, +/* 000065B0 */ 0x45, 0x01, 0x00, 0xA1, 0x45, 0x01, 0x00, 0xB1, 0x45, 0x01, 0x00, 0xCD, 0x45, 0x01, 0x00, 0xEC, +/* 000065C0 */ 0x45, 0x01, 0x00, 0x0C, 0x46, 0x01, 0x00, 0x18, 0x46, 0x01, 0x00, 0x19, 0x46, 0x01, 0x00, 0xB5, +/* 000065D0 */ 0x46, 0x01, 0x00, 0x23, 0x47, 0x01, 0x00, 0x2F, 0x47, 0x01, 0x00, 0x70, 0x47, 0x01, 0x00, 0x97, +/* 000065E0 */ 0x47, 0x01, 0x00, 0xB3, 0x47, 0x01, 0x00, 0xD2, 0x47, 0x01, 0x00, 0xF2, 0x47, 0x01, 0x00, 0xFE, +/* 000065F0 */ 0x47, 0x01, 0x00, 0xFF, 0x47, 0x01, 0x00, 0x1E, 0x48, 0x01, 0x00, 0x28, 0x48, 0x01, 0x00, 0x29, +/* 00006600 */ 0x48, 0x01, 0x00, 0x4F, 0x48, 0x01, 0x00, 0x72, 0x48, 0x01, 0x00, 0x86, 0x48, 0x01, 0x00, 0x90, +/* 00006610 */ 0x48, 0x01, 0x00, 0x91, 0x48, 0x01, 0x00, 0x9D, 0x48, 0x01, 0x00, 0xD1, 0x48, 0x01, 0x00, 0xDC, +/* 00006620 */ 0x48, 0x01, 0x00, 0x0C, 0x49, 0x01, 0x00, 0x17, 0x49, 0x01, 0x00, 0x3E, 0x49, 0x01, 0x00, 0x6A, +/* 00006630 */ 0x49, 0x01, 0x00, 0x8D, 0x49, 0x01, 0x00, 0x99, 0x49, 0x01, 0x00, 0xEA, 0x49, 0x01, 0x00, 0x30, +/* 00006640 */ 0x4A, 0x01, 0x00, 0x87, 0x4A, 0x01, 0x00, 0xAB, 0x4A, 0x01, 0x00, 0x18, 0x4B, 0x01, 0x00, 0x82, +/* 00006650 */ 0x4B, 0x01, 0x00, 0x83, 0x4B, 0x01, 0x00, 0xC8, 0x4B, 0x01, 0x00, 0xC9, 0x4B, 0x01, 0x00, 0x2C, +/* 00006660 */ 0x4C, 0x01, 0x00, 0x8A, 0x4C, 0x01, 0x00, 0x8B, 0x4C, 0x01, 0x00, 0xB6, 0x4C, 0x01, 0x00, 0x0C, +/* 00006670 */ 0x4D, 0x01, 0x00, 0x0D, 0x4D, 0x01, 0x00, 0x44, 0x4D, 0x01, 0x00, 0x45, 0x4D, 0x01, 0x00, 0x65, +/* 00006680 */ 0x4D, 0x01, 0x00, 0x70, 0x4D, 0x01, 0x00, 0x71, 0x4D, 0x01, 0x00, 0x7D, 0x4D, 0x01, 0x00, 0xCE, +/* 00006690 */ 0x4D, 0x01, 0x00, 0x0D, 0x4E, 0x01, 0x00, 0x18, 0x4E, 0x01, 0x00, 0x40, 0x4E, 0x01, 0x00, 0x4B, +/* 000066A0 */ 0x4E, 0x01, 0x00, 0x72, 0x4E, 0x01, 0x00, 0x8F, 0x4E, 0x01, 0x00, 0x9B, 0x4E, 0x01, 0x00, 0xD5, +/* 000066B0 */ 0x4E, 0x01, 0x00, 0xF7, 0x4E, 0x01, 0x00, 0x17, 0x4F, 0x01, 0x00, 0x25, 0x4F, 0x01, 0x00, 0x26, +/* 000066C0 */ 0x4F, 0x01, 0x00, 0x65, 0x4F, 0x01, 0x00, 0x70, 0x4F, 0x01, 0x00, 0x71, 0x4F, 0x01, 0x00, 0x9A, +/* 000066D0 */ 0x4F, 0x01, 0x00, 0x9B, 0x4F, 0x01, 0x00, 0xEB, 0x4F, 0x01, 0x00, 0x6E, 0x50, 0x01, 0x00, 0x9A, +/* 000066E0 */ 0x50, 0x01, 0x00, 0xED, 0x50, 0x01, 0x00, 0xFB, 0x50, 0x01, 0x00, 0xFC, 0x50, 0x01, 0x00, 0x5D, +/* 000066F0 */ 0x51, 0x01, 0x00, 0x5E, 0x51, 0x01, 0x00, 0x8A, 0x51, 0x01, 0x00, 0xCA, 0x51, 0x01, 0x00, 0xCB, +/* 00006700 */ 0x51, 0x01, 0x00, 0x0D, 0x52, 0x01, 0x00, 0x0E, 0x52, 0x01, 0x00, 0x2E, 0x52, 0x01, 0x00, 0x3A, +/* 00006710 */ 0x52, 0x01, 0x00, 0x3B, 0x52, 0x01, 0x00, 0x70, 0x52, 0x01, 0x00, 0xA5, 0x52, 0x01, 0x00, 0xCE, +/* 00006720 */ 0x52, 0x01, 0x00, 0xEB, 0x52, 0x01, 0x00, 0x0A, 0x53, 0x01, 0x00, 0x2B, 0x53, 0x01, 0x00, 0x37, +/* 00006730 */ 0x53, 0x01, 0x00, 0x38, 0x53, 0x01, 0x00, 0x78, 0x53, 0x01, 0x00, 0x98, 0x53, 0x01, 0x00, 0xB4, +/* 00006740 */ 0x53, 0x01, 0x00, 0xD3, 0x53, 0x01, 0x00, 0xF2, 0x53, 0x01, 0x00, 0xFE, 0x53, 0x01, 0x00, 0xFF, +/* 00006750 */ 0x53, 0x01, 0x00, 0x98, 0x54, 0x01, 0x00, 0x05, 0x55, 0x01, 0x00, 0x11, 0x55, 0x01, 0x00, 0x4F, +/* 00006760 */ 0x55, 0x01, 0x00, 0x76, 0x55, 0x01, 0x00, 0x92, 0x55, 0x01, 0x00, 0xB1, 0x55, 0x01, 0x00, 0xD1, +/* 00006770 */ 0x55, 0x01, 0x00, 0xDD, 0x55, 0x01, 0x00, 0xDE, 0x55, 0x01, 0x00, 0x1A, 0x56, 0x01, 0x00, 0x82, +/* 00006780 */ 0x56, 0x01, 0x00, 0xB9, 0x56, 0x01, 0x00, 0xEE, 0x56, 0x01, 0x00, 0x52, 0x57, 0x01, 0x00, 0x60, +/* 00006790 */ 0x57, 0x01, 0x00, 0x61, 0x57, 0x01, 0x00, 0x91, 0x57, 0x01, 0x00, 0xBA, 0x57, 0x01, 0x00, 0xC6, +/* 000067A0 */ 0x57, 0x01, 0x00, 0x01, 0x58, 0x01, 0x00, 0x1C, 0x58, 0x01, 0x00, 0x3B, 0x58, 0x01, 0x00, 0x5B, +/* 000067B0 */ 0x58, 0x01, 0x00, 0x77, 0x58, 0x01, 0x00, 0x83, 0x58, 0x01, 0x00, 0x84, 0x58, 0x01, 0x00, 0x02, +/* 000067C0 */ 0x59, 0x01, 0x00, 0x39, 0x59, 0x01, 0x00, 0x6E, 0x59, 0x01, 0x00, 0xD2, 0x59, 0x01, 0x00, 0xE0, +/* 000067D0 */ 0x59, 0x01, 0x00, 0xE1, 0x59, 0x01, 0x00, 0x0C, 0x5A, 0x01, 0x00, 0x26, 0x5A, 0x01, 0x00, 0x3E, +/* 000067E0 */ 0x5A, 0x01, 0x00, 0x66, 0x5A, 0x01, 0x00, 0x8F, 0x5A, 0x01, 0x00, 0xB8, 0x5A, 0x01, 0x00, 0xE4, +/* 000067F0 */ 0x5A, 0x01, 0x00, 0x10, 0x5B, 0x01, 0x00, 0x33, 0x5B, 0x01, 0x00, 0x5C, 0x5B, 0x01, 0x00, 0x8F, +/* 00006800 */ 0x5B, 0x01, 0x00, 0xFE, 0x5B, 0x01, 0x00, 0x4F, 0x5C, 0x01, 0x00, 0x70, 0x5C, 0x01, 0x00, 0x82, +/* 00006810 */ 0x5C, 0x01, 0x00, 0x92, 0x5C, 0x01, 0x00, 0x9E, 0x5C, 0x01, 0x00, 0xE2, 0x5C, 0x01, 0x00, 0x06, +/* 00006820 */ 0x5D, 0x01, 0x00, 0x25, 0x5D, 0x01, 0x00, 0x45, 0x5D, 0x01, 0x00, 0x61, 0x5D, 0x01, 0x00, 0x6D, +/* 00006830 */ 0x5D, 0x01, 0x00, 0x6E, 0x5D, 0x01, 0x00, 0x8A, 0x5D, 0x01, 0x00, 0x94, 0x5D, 0x01, 0x00, 0x95, +/* 00006840 */ 0x5D, 0x01, 0x00, 0xC6, 0x5D, 0x01, 0x00, 0xE5, 0x5D, 0x01, 0x00, 0x77, 0x5E, 0x01, 0x00, 0x09, +/* 00006850 */ 0x5F, 0x01, 0x00, 0x9B, 0x5F, 0x01, 0x00, 0x2D, 0x60, 0x01, 0x00, 0x33, 0x60, 0x01, 0x00, 0x34, +/* 00006860 */ 0x60, 0x01, 0x00, 0x3A, 0x60, 0x01, 0x00, 0x42, 0x60, 0x01, 0x00, 0x49, 0x60, 0x01, 0x00, 0x50, +/* 00006870 */ 0x60, 0x01, 0x00, 0x57, 0x60, 0x01, 0x00, 0x5E, 0x60, 0x01, 0x00, 0x65, 0x60, 0x01, 0x00, 0x6C, +/* 00006880 */ 0x60, 0x01, 0x00, 0x8A, 0x60, 0x01, 0x00, 0x91, 0x60, 0x01, 0x00, 0x98, 0x60, 0x01, 0x00, 0x9F, +/* 00006890 */ 0x60, 0x01, 0x00, 0xA6, 0x60, 0x01, 0x00, 0xAD, 0x60, 0x01, 0x00, 0xB4, 0x60, 0x01, 0x00, 0xBC, +/* 000068A0 */ 0x60, 0x01, 0x00, 0xC7, 0x60, 0x01, 0x00, 0xC8, 0x60, 0x01, 0x00, 0xFC, 0x60, 0x01, 0x00, 0x32, +/* 000068B0 */ 0x61, 0x01, 0x00, 0x38, 0x61, 0x01, 0x00, 0x6D, 0x61, 0x01, 0x00, 0xA4, 0x61, 0x01, 0x00, 0xAA, +/* 000068C0 */ 0x61, 0x01, 0x00, 0xAB, 0x61, 0x01, 0x00, 0xD0, 0x61, 0x01, 0x00, 0xFB, 0x61, 0x01, 0x00, 0x30, +/* 000068D0 */ 0x62, 0x01, 0x00, 0x54, 0x62, 0x01, 0x00, 0x5E, 0x62, 0x01, 0x00, 0x5F, 0x62, 0x01, 0x00, 0x93, +/* 000068E0 */ 0x62, 0x01, 0x00, 0xAA, 0x62, 0x01, 0x00, 0xF9, 0x62, 0x01, 0x00, 0x2B, 0x63, 0x01, 0x00, 0x4F, +/* 000068F0 */ 0x63, 0x01, 0x00, 0x60, 0x63, 0x01, 0x00, 0x86, 0x63, 0x01, 0x00, 0x90, 0x63, 0x01, 0x00, 0x91, +/* 00006900 */ 0x63, 0x01, 0x00, 0xB1, 0x63, 0x01, 0x00, 0xB8, 0x63, 0x01, 0x00, 0xB9, 0x63, 0x01, 0x00, 0xFF, +/* 00006910 */ 0x63, 0x01, 0x00, 0x4E, 0x64, 0x01, 0x00, 0x6D, 0x64, 0x01, 0x00, 0xBB, 0x64, 0x01, 0x00, 0xEE, +/* 00006920 */ 0x64, 0x01, 0x00, 0x1E, 0x65, 0x01, 0x00, 0x5E, 0x65, 0x01, 0x00, 0x8A, 0x65, 0x01, 0x00, 0x98, +/* 00006930 */ 0x65, 0x01, 0x00, 0xA2, 0x65, 0x01, 0x00, 0xBD, 0x65, 0x01, 0x00, 0xC4, 0x65, 0x01, 0x00, 0xC5, +/* 00006940 */ 0x65, 0x01, 0x00, 0xFC, 0x65, 0x01, 0x00, 0x3C, 0x66, 0x01, 0x00, 0x5B, 0x66, 0x01, 0x00, 0x7B, +/* 00006950 */ 0x66, 0x01, 0x00, 0xA3, 0x66, 0x01, 0x00, 0xB1, 0x66, 0x01, 0x00, 0xFB, 0x66, 0x01, 0x00, 0x17, +/* 00006960 */ 0x67, 0x01, 0x00, 0x28, 0x67, 0x01, 0x00, 0x43, 0x67, 0x01, 0x00, 0x4D, 0x67, 0x01, 0x00, 0x54, +/* 00006970 */ 0x67, 0x01, 0x00, 0x55, 0x67, 0x01, 0x00, 0x8F, 0x67, 0x01, 0x00, 0xA8, 0x67, 0x01, 0x00, 0xCB, +/* 00006980 */ 0x67, 0x01, 0x00, 0xED, 0x67, 0x01, 0x00, 0x11, 0x68, 0x01, 0x00, 0x1F, 0x68, 0x01, 0x00, 0x36, +/* 00006990 */ 0x68, 0x01, 0x00, 0x40, 0x68, 0x01, 0x00, 0x47, 0x68, 0x01, 0x00, 0x48, 0x68, 0x01, 0x00, 0xAD, +/* 000069A0 */ 0x68, 0x01, 0x00, 0xD9, 0x68, 0x01, 0x00, 0x1F, 0x69, 0x01, 0x00, 0x35, 0x69, 0x01, 0x00, 0x3F, +/* 000069B0 */ 0x69, 0x01, 0x00, 0x46, 0x69, 0x01, 0x00, 0x47, 0x69, 0x01, 0x00, 0x78, 0x69, 0x01, 0x00, 0xAF, +/* 000069C0 */ 0x69, 0x01, 0x00, 0xB6, 0x69, 0x01, 0x00, 0xB7, 0x69, 0x01, 0x00, 0xF9, 0x69, 0x01, 0x00, 0x3F, +/* 000069D0 */ 0x6A, 0x01, 0x00, 0x6B, 0x6A, 0x01, 0x00, 0xAF, 0x6A, 0x01, 0x00, 0xDA, 0x6A, 0x01, 0x00, 0x03, +/* 000069E0 */ 0x6B, 0x01, 0x00, 0x2F, 0x6B, 0x01, 0x00, 0x41, 0x6B, 0x01, 0x00, 0x93, 0x6B, 0x01, 0x00, 0x08, +/* 000069F0 */ 0x6C, 0x01, 0x00, 0x16, 0x6C, 0x01, 0x00, 0x61, 0x6C, 0x01, 0x00, 0xA3, 0x6C, 0x01, 0x00, 0x13, +/* 00006A00 */ 0x6D, 0x01, 0x00, 0x46, 0x6D, 0x01, 0x00, 0x6E, 0x6D, 0x01, 0x00, 0x78, 0x6D, 0x01, 0x00, 0x79, +/* 00006A10 */ 0x6D, 0x01, 0x00, 0xA1, 0x6D, 0x01, 0x00, 0xC4, 0x6D, 0x01, 0x00, 0xFB, 0x6D, 0x01, 0x00, 0x19, +/* 00006A20 */ 0x6E, 0x01, 0x00, 0x2A, 0x6E, 0x01, 0x00, 0x4D, 0x6E, 0x01, 0x00, 0x57, 0x6E, 0x01, 0x00, 0x5D, +/* 00006A30 */ 0x6E, 0x01, 0x00, 0x5E, 0x6E, 0x01, 0x00, 0x9E, 0x6E, 0x01, 0x00, 0xF1, 0x6E, 0x01, 0x00, 0x1D, +/* 00006A40 */ 0x6F, 0x01, 0x00, 0x6E, 0x6F, 0x01, 0x00, 0x99, 0x6F, 0x01, 0x00, 0xC2, 0x6F, 0x01, 0x00, 0xEE, +/* 00006A50 */ 0x6F, 0x01, 0x00, 0x00, 0x70, 0x01, 0x00, 0x60, 0x70, 0x01, 0x00, 0xB1, 0x70, 0x01, 0x00, 0xDB, +/* 00006A60 */ 0x70, 0x01, 0x00, 0x14, 0x71, 0x01, 0x00, 0x4E, 0x71, 0x01, 0x00, 0x5C, 0x71, 0x01, 0x00, 0xA7, +/* 00006A70 */ 0x71, 0x01, 0x00, 0xE9, 0x71, 0x01, 0x00, 0x66, 0x72, 0x01, 0x00, 0x99, 0x72, 0x01, 0x00, 0xC1, +/* 00006A80 */ 0x72, 0x01, 0x00, 0xCB, 0x72, 0x01, 0x00, 0xEA, 0x72, 0x01, 0x00, 0xF0, 0x72, 0x01, 0x00, 0xF1, +/* 00006A90 */ 0x72, 0x01, 0x00, 0x23, 0x73, 0x01, 0x00, 0x43, 0x73, 0x01, 0x00, 0x67, 0x73, 0x01, 0x00, 0x71, +/* 00006AA0 */ 0x73, 0x01, 0x00, 0x72, 0x73, 0x01, 0x00, 0xBD, 0x73, 0x01, 0x00, 0xD3, 0x73, 0x01, 0x00, 0xF1, +/* 00006AB0 */ 0x73, 0x01, 0x00, 0xFB, 0x73, 0x01, 0x00, 0xFC, 0x73, 0x01, 0x00, 0x71, 0x74, 0x01, 0x00, 0xC1, +/* 00006AC0 */ 0x74, 0x01, 0x00, 0x06, 0x75, 0x01, 0x00, 0x07, 0x75, 0x01, 0x00, 0x7A, 0x75, 0x01, 0x00, 0x93, +/* 00006AD0 */ 0x75, 0x01, 0x00, 0xB7, 0x75, 0x01, 0x00, 0xDB, 0x75, 0x01, 0x00, 0x33, 0x76, 0x01, 0x00, 0x76, +/* 00006AE0 */ 0x76, 0x01, 0x00, 0xFF, 0x76, 0x01, 0x00, 0x00, 0x77, 0x01, 0x00, 0x1B, 0x77, 0x01, 0x00, 0x21, +/* 00006AF0 */ 0x77, 0x01, 0x00, 0x22, 0x77, 0x01, 0x00, 0x7C, 0x77, 0x01, 0x00, 0xB2, 0x77, 0x01, 0x00, 0xD2, +/* 00006B00 */ 0x77, 0x01, 0x00, 0x2F, 0x78, 0x01, 0x00, 0x62, 0x78, 0x01, 0x00, 0x6C, 0x78, 0x01, 0x00, 0x6D, +/* 00006B10 */ 0x78, 0x01, 0x00, 0x84, 0x78, 0x01, 0x00, 0xD4, 0x78, 0x01, 0x00, 0x30, 0x79, 0x01, 0x00, 0x40, +/* 00006B20 */ 0x79, 0x01, 0x00, 0x4A, 0x79, 0x01, 0x00, 0x4B, 0x79, 0x01, 0x00, 0xDA, 0x79, 0x01, 0x00, 0x60, +/* 00006B30 */ 0x7A, 0x01, 0x00, 0xDB, 0x7A, 0x01, 0x00, 0x24, 0x7B, 0x01, 0x00, 0x5A, 0x7B, 0x01, 0x00, 0x5B, +/* 00006B40 */ 0x7B, 0x01, 0x00, 0xA7, 0x7B, 0x01, 0x00, 0xC6, 0x7B, 0x01, 0x00, 0xDD, 0x7B, 0x01, 0x00, 0x2E, +/* 00006B50 */ 0x7C, 0x01, 0x00, 0xA8, 0x7C, 0x01, 0x00, 0xCC, 0x7C, 0x01, 0x00, 0x27, 0x7D, 0x01, 0x00, 0xA3, +/* 00006B60 */ 0x7D, 0x01, 0x00, 0xB5, 0x7D, 0x01, 0x00, 0xC6, 0x7D, 0x01, 0x00, 0xE6, 0x7D, 0x01, 0x00, 0xF0, +/* 00006B70 */ 0x7D, 0x01, 0x00, 0xF1, 0x7D, 0x01, 0x00, 0x60, 0x7E, 0x01, 0x00, 0x8E, 0x7E, 0x01, 0x00, 0xC3, +/* 00006B80 */ 0x7E, 0x01, 0x00, 0xEC, 0x7E, 0x01, 0x00, 0x04, 0x7F, 0x01, 0x00, 0x3E, 0x7F, 0x01, 0x00, 0x68, +/* 00006B90 */ 0x7F, 0x01, 0x00, 0x8D, 0x7F, 0x01, 0x00, 0xA6, 0x7F, 0x01, 0x00, 0xCD, 0x7F, 0x01, 0x00, 0xDF, +/* 00006BA0 */ 0x7F, 0x01, 0x00, 0xED, 0x7F, 0x01, 0x00, 0xEE, 0x7F, 0x01, 0x00, 0x39, 0x80, 0x01, 0x00, 0x4A, +/* 00006BB0 */ 0x80, 0x01, 0x00, 0x6C, 0x80, 0x01, 0x00, 0x76, 0x80, 0x01, 0x00, 0x77, 0x80, 0x01, 0x00, 0x95, +/* 00006BC0 */ 0x80, 0x01, 0x00, 0xB3, 0x80, 0x01, 0x00, 0xD1, 0x80, 0x01, 0x00, 0x02, 0x81, 0x01, 0x00, 0x14, +/* 00006BD0 */ 0x81, 0x01, 0x00, 0x1A, 0x81, 0x01, 0x00, 0x1B, 0x81, 0x01, 0x00, 0x7B, 0x81, 0x01, 0x00, 0xD3, +/* 00006BE0 */ 0x81, 0x01, 0x00, 0x06, 0x82, 0x01, 0x00, 0x07, 0x82, 0x01, 0x00, 0x38, 0x82, 0x01, 0x00, 0x39, +/* 00006BF0 */ 0x82, 0x01, 0x00, 0x6D, 0x82, 0x01, 0x00, 0x98, 0x82, 0x01, 0x00, 0x01, 0x83, 0x01, 0x00, 0x32, +/* 00006C00 */ 0x83, 0x01, 0x00, 0x53, 0x83, 0x01, 0x00, 0x61, 0x83, 0x01, 0x00, 0x6B, 0x83, 0x01, 0x00, 0xC0, +/* 00006C10 */ 0x83, 0x01, 0x00, 0xC6, 0x83, 0x01, 0x00, 0xC7, 0x83, 0x01, 0x00, 0x0A, 0x84, 0x01, 0x00, 0x37, +/* 00006C20 */ 0x84, 0x01, 0x00, 0x65, 0x84, 0x01, 0x00, 0x8C, 0x84, 0x01, 0x00, 0xB8, 0x84, 0x01, 0x00, 0xC2, +/* 00006C30 */ 0x84, 0x01, 0x00, 0xC3, 0x84, 0x01, 0x00, 0xE5, 0x84, 0x01, 0x00, 0x0A, 0x85, 0x01, 0x00, 0x32, +/* 00006C40 */ 0x85, 0x01, 0x00, 0x40, 0x85, 0x01, 0x00, 0x41, 0x85, 0x01, 0x00, 0x6D, 0x85, 0x01, 0x00, 0xBA, +/* 00006C50 */ 0x85, 0x01, 0x00, 0xD3, 0x85, 0x01, 0x00, 0x11, 0x86, 0x01, 0x00, 0x45, 0x86, 0x01, 0x00, 0x5A, +/* 00006C60 */ 0x86, 0x01, 0x00, 0x89, 0x86, 0x01, 0x00, 0x97, 0x86, 0x01, 0x00, 0xA8, 0x86, 0x01, 0x00, 0xF9, +/* 00006C70 */ 0x86, 0x01, 0x00, 0x29, 0x87, 0x01, 0x00, 0x8F, 0x87, 0x01, 0x00, 0x99, 0x87, 0x01, 0x00, 0x9A, +/* 00006C80 */ 0x87, 0x01, 0x00, 0xC2, 0x87, 0x01, 0x00, 0xC9, 0x87, 0x01, 0x00, 0xCA, 0x87, 0x01, 0x00, 0xEC, +/* 00006C90 */ 0x87, 0x01, 0x00, 0x0A, 0x88, 0x01, 0x00, 0x2F, 0x88, 0x01, 0x00, 0x51, 0x88, 0x01, 0x00, 0x81, +/* 00006CA0 */ 0x88, 0x01, 0x00, 0x93, 0x88, 0x01, 0x00, 0xD3, 0x88, 0x01, 0x00, 0xE2, 0x88, 0x01, 0x00, 0xE3, +/* 00006CB0 */ 0x88, 0x01, 0x00, 0x08, 0x89, 0x01, 0x00, 0x48, 0x89, 0x01, 0x00, 0x57, 0x89, 0x01, 0x00, 0x58, +/* 00006CC0 */ 0x89, 0x01, 0x00, 0x7D, 0x89, 0x01, 0x00, 0xB7, 0x89, 0x01, 0x00, 0xC6, 0x89, 0x01, 0x00, 0xC7, +/* 00006CD0 */ 0x89, 0x01, 0x00, 0xF4, 0x89, 0x01, 0x00, 0x35, 0x8A, 0x01, 0x00, 0x44, 0x8A, 0x01, 0x00, 0x45, +/* 00006CE0 */ 0x8A, 0x01, 0x00, 0x6A, 0x8A, 0x01, 0x00, 0x8F, 0x8A, 0x01, 0x00, 0xAC, 0x8A, 0x01, 0x00, 0xE0, +/* 00006CF0 */ 0x8A, 0x01, 0x00, 0x1B, 0x8B, 0x01, 0x00, 0x2D, 0x8B, 0x01, 0x00, 0x49, 0x8B, 0x01, 0x00, 0x58, +/* 00006D00 */ 0x8B, 0x01, 0x00, 0x59, 0x8B, 0x01, 0x00, 0x84, 0x8B, 0x01, 0x00, 0xB0, 0x8B, 0x01, 0x00, 0xCC, +/* 00006D10 */ 0x8B, 0x01, 0x00, 0x1C, 0x8C, 0x01, 0x00, 0x41, 0x8C, 0x01, 0x00, 0x57, 0x8C, 0x01, 0x00, 0x88, +/* 00006D20 */ 0x8C, 0x01, 0x00, 0x9A, 0x8C, 0x01, 0x00, 0xA8, 0x8C, 0x01, 0x00, 0xB9, 0x8C, 0x01, 0x00, 0xC3, +/* 00006D30 */ 0x8C, 0x01, 0x00, 0xC4, 0x8C, 0x01, 0x00, 0xEB, 0x8C, 0x01, 0x00, 0x2F, 0x8D, 0x01, 0x00, 0x56, +/* 00006D40 */ 0x8D, 0x01, 0x00, 0x57, 0x8D, 0x01, 0x00, 0x7A, 0x8D, 0x01, 0x00, 0x9F, 0x8D, 0x01, 0x00, 0xD9, +/* 00006D50 */ 0x8D, 0x01, 0x00, 0xE7, 0x8D, 0x01, 0x00, 0xE8, 0x8D, 0x01, 0x00, 0x0C, 0x8E, 0x01, 0x00, 0x3E, +/* 00006D60 */ 0x8E, 0x01, 0x00, 0x4C, 0x8E, 0x01, 0x00, 0x4D, 0x8E, 0x01, 0x00, 0x71, 0x8E, 0x01, 0x00, 0xA3, +/* 00006D70 */ 0x8E, 0x01, 0x00, 0xB1, 0x8E, 0x01, 0x00, 0xB2, 0x8E, 0x01, 0x00, 0x19, 0x8F, 0x01, 0x00, 0xB4, +/* 00006D80 */ 0x8F, 0x01, 0x00, 0xC2, 0x8F, 0x01, 0x00, 0xC3, 0x8F, 0x01, 0x00, 0xDD, 0x8F, 0x01, 0x00, 0xE7, +/* 00006D90 */ 0x8F, 0x01, 0x00, 0xE8, 0x8F, 0x01, 0x00, 0x01, 0x90, 0x01, 0x00, 0x07, 0x90, 0x01, 0x00, 0x08, +/* 00006DA0 */ 0x90, 0x01, 0x00, 0x56, 0x90, 0x01, 0x00, 0x82, 0x90, 0x01, 0x00, 0x83, 0x90, 0x01, 0x00, 0xB2, +/* 00006DB0 */ 0x90, 0x01, 0x00, 0xF2, 0x90, 0x01, 0x00, 0xF3, 0x90, 0x01, 0x00, 0x54, 0x91, 0x01, 0x00, 0xD6, +/* 00006DC0 */ 0x91, 0x01, 0x00, 0xE4, 0x91, 0x01, 0x00, 0xE5, 0x91, 0x01, 0x00, 0x14, 0x92, 0x01, 0x00, 0x25, +/* 00006DD0 */ 0x92, 0x01, 0x00, 0x42, 0x92, 0x01, 0x00, 0x4C, 0x92, 0x01, 0x00, 0x52, 0x92, 0x01, 0x00, 0x53, +/* 00006DE0 */ 0x92, 0x01, 0x00, 0x6D, 0x92, 0x01, 0x00, 0x97, 0x92, 0x01, 0x00, 0xC1, 0x92, 0x01, 0x00, 0xC7, +/* 00006DF0 */ 0x92, 0x01, 0x00, 0xC8, 0x92, 0x01, 0x00, 0x00, 0x93, 0x01, 0x00, 0x4C, 0x93, 0x01, 0x00, 0xAA, +/* 00006E00 */ 0x93, 0x01, 0x00, 0xD0, 0x93, 0x01, 0x00, 0x15, 0x94, 0x01, 0x00, 0x79, 0x94, 0x01, 0x00, 0xF9, +/* 00006E10 */ 0x94, 0x01, 0x00, 0xFA, 0x94, 0x01, 0x00, 0x6C, 0x95, 0x01, 0x00, 0x9D, 0x95, 0x01, 0x00, 0xEC, +/* 00006E20 */ 0x95, 0x01, 0x00, 0x3E, 0x96, 0x01, 0x00, 0x92, 0x96, 0x01, 0x00, 0xCA, 0x96, 0x01, 0x00, 0x1C, +/* 00006E30 */ 0x97, 0x01, 0x00, 0x6E, 0x97, 0x01, 0x00, 0xC3, 0x97, 0x01, 0x00, 0x2F, 0x98, 0x01, 0x00, 0x85, +/* 00006E40 */ 0x98, 0x01, 0x00, 0x86, 0x98, 0x01, 0x00, 0xA5, 0x98, 0x01, 0x00, 0xC4, 0x98, 0x01, 0x00, 0xF6, +/* 00006E50 */ 0x98, 0x01, 0x00, 0xF7, 0x98, 0x01, 0x00, 0x6E, 0x99, 0x01, 0x00, 0xDB, 0x99, 0x01, 0x00, 0x2E, +/* 00006E60 */ 0x9A, 0x01, 0x00, 0x71, 0x9A, 0x01, 0x00, 0x72, 0x9A, 0x01, 0x00, 0xEF, 0x9A, 0x01, 0x00, 0x83, +/* 00006E70 */ 0x9B, 0x01, 0x00, 0x06, 0x9C, 0x01, 0x00, 0x89, 0x9C, 0x01, 0x00, 0xFC, 0x9C, 0x01, 0x00, 0xFD, +/* 00006E80 */ 0x9C, 0x01, 0x00, 0x67, 0x9D, 0x01, 0x00, 0xE0, 0x9D, 0x01, 0x00, 0xE1, 0x9D, 0x01, 0x00, 0x44, +/* 00006E90 */ 0x9E, 0x01, 0x00, 0xD3, 0x9E, 0x01, 0x00, 0x7C, 0x9F, 0x01, 0x00, 0x10, 0xA0, 0x01, 0x00, 0xA7, +/* 00006EA0 */ 0xA0, 0x01, 0x00, 0x4B, 0xA1, 0x01, 0x00, 0x5F, 0xA1, 0x01, 0x00, 0x60, 0xA1, 0x01, 0x00, 0xE1, +/* 00006EB0 */ 0xA1, 0x01, 0x00, 0x4D, 0xA2, 0x01, 0x00, 0xBD, 0xA2, 0x01, 0x00, 0x2D, 0xA3, 0x01, 0x00, 0x9F, +/* 00006EC0 */ 0xA3, 0x01, 0x00, 0x13, 0xA4, 0x01, 0x00, 0x87, 0xA4, 0x01, 0x00, 0xD1, 0xA4, 0x01, 0x00, 0xD2, +/* 00006ED0 */ 0xA4, 0x01, 0x00, 0x3F, 0xA5, 0x01, 0x00, 0x40, 0xA5, 0x01, 0x00, 0xA6, 0xA5, 0x01, 0x00, 0x31, +/* 00006EE0 */ 0xA6, 0x01, 0x00, 0xA7, 0xA6, 0x01, 0x00, 0xAD, 0xA6, 0x01, 0x00, 0xAE, 0xA6, 0x01, 0x00, 0xDC, +/* 00006EF0 */ 0xA6, 0x01, 0x00, 0x04, 0xA7, 0x01, 0x00, 0x05, 0xA7, 0x01, 0x00, 0x26, 0xA7, 0x01, 0x00, 0x4E, +/* 00006F00 */ 0xA7, 0x01, 0x00, 0x58, 0xA7, 0x01, 0x00, 0x59, 0xA7, 0x01, 0x00, 0xA5, 0xA7, 0x01, 0x00, 0xAB, +/* 00006F10 */ 0xA7, 0x01, 0x00, 0xAC, 0xA7, 0x01, 0x00, 0x23, 0xA8, 0x01, 0x00, 0x52, 0xA8, 0x01, 0x00, 0x80, +/* 00006F20 */ 0xA8, 0x01, 0x00, 0x97, 0xA8, 0x01, 0x00, 0xA1, 0xA8, 0x01, 0x00, 0xA2, 0xA8, 0x01, 0x00, 0xCD, +/* 00006F30 */ 0xA8, 0x01, 0x00, 0xEE, 0xA8, 0x01, 0x00, 0xF8, 0xA8, 0x01, 0x00, 0xF9, 0xA8, 0x01, 0x00, 0x27, +/* 00006F40 */ 0xA9, 0x01, 0x00, 0x61, 0xA9, 0x01, 0x00, 0x62, 0xA9, 0x01, 0x00, 0x97, 0xA9, 0x01, 0x00, 0xAE, +/* 00006F50 */ 0xA9, 0x01, 0x00, 0xC1, 0xA9, 0x01, 0x00, 0xC2, 0xA9, 0x01, 0x00, 0x00, 0xAA, 0x01, 0x00, 0x61, +/* 00006F60 */ 0xAA, 0x01, 0x00, 0x9D, 0xAA, 0x01, 0x00, 0xAB, 0xAA, 0x01, 0x00, 0xAC, 0xAA, 0x01, 0x00, 0xDD, +/* 00006F70 */ 0xAA, 0x01, 0x00, 0xDE, 0xAA, 0x01, 0x00, 0x0F, 0xAB, 0x01, 0x00, 0x4F, 0xAB, 0x01, 0x00, 0x5D, +/* 00006F80 */ 0xAB, 0x01, 0x00, 0x5E, 0xAB, 0x01, 0x00, 0x94, 0xAB, 0x01, 0x00, 0x95, 0xAB, 0x01, 0x00, 0xF6, +/* 00006F90 */ 0xAB, 0x01, 0x00, 0x67, 0xAC, 0x01, 0x00, 0x75, 0xAC, 0x01, 0x00, 0x81, 0xAC, 0x01, 0x00, 0x82, +/* 00006FA0 */ 0xAC, 0x01, 0x00, 0x97, 0xAC, 0x01, 0x00, 0x9D, 0xAC, 0x01, 0x00, 0x9E, 0xAC, 0x01, 0x00, 0xED, +/* 00006FB0 */ 0xAC, 0x01, 0x00, 0x06, 0xAD, 0x01, 0x00, 0x1D, 0xAD, 0x01, 0x00, 0x72, 0xAD, 0x01, 0x00, 0x84, +/* 00006FC0 */ 0xAD, 0x01, 0x00, 0xE2, 0xAD, 0x01, 0x00, 0x09, 0xAE, 0x01, 0x00, 0x96, 0xAE, 0x01, 0x00, 0xBD, +/* 00006FD0 */ 0xAE, 0x01, 0x00, 0xCF, 0xAE, 0x01, 0x00, 0xEA, 0xAE, 0x01, 0x00, 0x11, 0xAF, 0x01, 0x00, 0x73, +/* 00006FE0 */ 0xAF, 0x01, 0x00, 0x81, 0xAF, 0x01, 0x00, 0x8D, 0xAF, 0x01, 0x00, 0xF5, 0xAF, 0x01, 0x00, 0x0C, +/* 00006FF0 */ 0xB0, 0x01, 0x00, 0x12, 0xB0, 0x01, 0x00, 0x13, 0xB0, 0x01, 0x00, 0x69, 0xB0, 0x01, 0x00, 0x9C, +/* 00007000 */ 0xB0, 0x01, 0x00, 0xD5, 0xB0, 0x01, 0x00, 0xDF, 0xB0, 0x01, 0x00, 0xE0, 0xB0, 0x01, 0x00, 0x18, +/* 00007010 */ 0xB1, 0x01, 0x00, 0x53, 0xB1, 0x01, 0x00, 0x8C, 0xB1, 0x01, 0x00, 0x96, 0xB1, 0x01, 0x00, 0x97, +/* 00007020 */ 0xB1, 0x01, 0x00, 0xCC, 0xB1, 0x01, 0x00, 0xD2, 0xB1, 0x01, 0x00, 0xD3, 0xB1, 0x01, 0x00, 0x24, +/* 00007030 */ 0xB2, 0x01, 0x00, 0x57, 0xB2, 0x01, 0x00, 0x90, 0xB2, 0x01, 0x00, 0x9A, 0xB2, 0x01, 0x00, 0x9B, +/* 00007040 */ 0xB2, 0x01, 0x00, 0xD3, 0xB2, 0x01, 0x00, 0x0E, 0xB3, 0x01, 0x00, 0x47, 0xB3, 0x01, 0x00, 0x51, +/* 00007050 */ 0xB3, 0x01, 0x00, 0x52, 0xB3, 0x01, 0x00, 0x82, 0xB3, 0x01, 0x00, 0x88, 0xB3, 0x01, 0x00, 0x89, +/* 00007060 */ 0xB3, 0x01, 0x00, 0xB2, 0xB3, 0x01, 0x00, 0xED, 0xB3, 0x01, 0x00, 0x02, 0xB4, 0x01, 0x00, 0x35, +/* 00007070 */ 0xB4, 0x01, 0x00, 0x36, 0xB4, 0x01, 0x00, 0x64, 0xB4, 0x01, 0x00, 0x91, 0xB4, 0x01, 0x00, 0x92, +/* 00007080 */ 0xB4, 0x01, 0x00, 0xC4, 0xB4, 0x01, 0x00, 0xFA, 0xB4, 0x01, 0x00, 0xFB, 0xB4, 0x01, 0x00, 0x41, +/* 00007090 */ 0xB5, 0x01, 0x00, 0xB8, 0xB5, 0x01, 0x00, 0xCA, 0xB5, 0x01, 0x00, 0xD8, 0xB5, 0x01, 0x00, 0xE2, +/* 000070A0 */ 0xB5, 0x01, 0x00, 0xE3, 0xB5, 0x01, 0x00, 0x2B, 0xB6, 0x01, 0x00, 0xAD, 0xB6, 0x01, 0x00, 0xBE, +/* 000070B0 */ 0xB6, 0x01, 0x00, 0x20, 0xB7, 0x01, 0x00, 0x2A, 0xB7, 0x01, 0x00, 0x31, 0xB7, 0x01, 0x00, 0x32, +/* 000070C0 */ 0xB7, 0x01, 0x00, 0x6E, 0xB7, 0x01, 0x00, 0xCF, 0xB7, 0x01, 0x00, 0xD0, 0xB7, 0x01, 0x00, 0x43, +/* 000070D0 */ 0xB8, 0x01, 0x00, 0x93, 0xB8, 0x01, 0x00, 0xE4, 0xB8, 0x01, 0x00, 0x67, 0xB9, 0x01, 0x00, 0xBE, +/* 000070E0 */ 0xB9, 0x01, 0x00, 0x26, 0xBA, 0x01, 0x00, 0x4C, 0xBA, 0x01, 0x00, 0x4D, 0xBA, 0x01, 0x00, 0xA6, +/* 000070F0 */ 0xBA, 0x01, 0x00, 0x31, 0xBB, 0x01, 0x00, 0x8C, 0xBB, 0x01, 0x00, 0xF8, 0xBB, 0x01, 0x00, 0x1E, +/* 00007100 */ 0xBC, 0x01, 0x00, 0x1F, 0xBC, 0x01, 0x00, 0x7C, 0xBC, 0x01, 0x00, 0x0B, 0xBD, 0x01, 0x00, 0x68, +/* 00007110 */ 0xBD, 0x01, 0x00, 0xD6, 0xBD, 0x01, 0x00, 0xFC, 0xBD, 0x01, 0x00, 0xFD, 0xBD, 0x01, 0x00, 0x3E, +/* 00007120 */ 0xBE, 0x01, 0x00, 0xB1, 0xBE, 0x01, 0x00, 0xEB, 0xBE, 0x01, 0x00, 0x46, 0xBF, 0x01, 0x00, 0x6C, +/* 00007130 */ 0xBF, 0x01, 0x00, 0x6D, 0xBF, 0x01, 0x00, 0xC6, 0xBF, 0x01, 0x00, 0x20, 0xC0, 0x01, 0x00, 0x6F, +/* 00007140 */ 0xC0, 0x01, 0x00, 0xEB, 0xC0, 0x01, 0x00, 0x4B, 0xC1, 0x01, 0x00, 0xAF, 0xC1, 0x01, 0x00, 0x15, +/* 00007150 */ 0xC2, 0x01, 0x00, 0x6E, 0xC2, 0x01, 0x00, 0x6F, 0xC2, 0x01, 0x00, 0xD6, 0xC2, 0x01, 0x00, 0x1B, +/* 00007160 */ 0xC3, 0x01, 0x00, 0x5E, 0xC3, 0x01, 0x00, 0x97, 0xC3, 0x01, 0x00, 0xD2, 0xC3, 0x01, 0x00, 0x0D, +/* 00007170 */ 0xC4, 0x01, 0x00, 0x4B, 0xC4, 0x01, 0x00, 0x88, 0xC4, 0x01, 0x00, 0xBD, 0xC4, 0x01, 0x00, 0x1E, +/* 00007180 */ 0xC5, 0x01, 0x00, 0x69, 0xC5, 0x01, 0x00, 0xB4, 0xC5, 0x01, 0x00, 0xFF, 0xC5, 0x01, 0x00, 0x49, +/* 00007190 */ 0xC6, 0x01, 0x00, 0x4A, 0xC6, 0x01, 0x00, 0xC9, 0xC6, 0x01, 0x00, 0x64, 0xC7, 0x01, 0x00, 0x84, +/* 000071A0 */ 0xC7, 0x01, 0x00, 0xA4, 0xC7, 0x01, 0x00, 0xC2, 0xC7, 0x01, 0x00, 0xD0, 0xC7, 0x01, 0x00, 0xD1, +/* 000071B0 */ 0xC7, 0x01, 0x00, 0x34, 0xC8, 0x01, 0x00, 0xAF, 0xC8, 0x01, 0x00, 0xEF, 0xC8, 0x01, 0x00, 0x20, +/* 000071C0 */ 0xC9, 0x01, 0x00, 0x9F, 0xC9, 0x01, 0x00, 0xF5, 0xC9, 0x01, 0x00, 0x39, 0xCA, 0x01, 0x00, 0x3A, +/* 000071D0 */ 0xCA, 0x01, 0x00, 0xB9, 0xCA, 0x01, 0x00, 0x01, 0xCB, 0x01, 0x00, 0x2A, 0xCB, 0x01, 0x00, 0x6F, +/* 000071E0 */ 0xCB, 0x01, 0x00, 0x81, 0xCB, 0x01, 0x00, 0x91, 0xCB, 0x01, 0x00, 0x92, 0xCB, 0x01, 0x00, 0xCA, +/* 000071F0 */ 0xCB, 0x01, 0x00, 0xD6, 0xCB, 0x01, 0x00, 0xEF, 0xCB, 0x01, 0x00, 0xF9, 0xCB, 0x01, 0x00, 0xFA, +/* 00007200 */ 0xCB, 0x01, 0x00, 0x4B, 0xCC, 0x01, 0x00, 0x79, 0xCC, 0x01, 0x00, 0xA4, 0xCC, 0x01, 0x00, 0xD0, +/* 00007210 */ 0xCC, 0x01, 0x00, 0x0B, 0xCD, 0x01, 0x00, 0x35, 0xCD, 0x01, 0x00, 0x3F, 0xCD, 0x01, 0x00, 0x40, +/* 00007220 */ 0xCD, 0x01, 0x00, 0x60, 0xCD, 0x01, 0x00, 0x83, 0xCD, 0x01, 0x00, 0xA5, 0xCD, 0x01, 0x00, 0xF9, +/* 00007230 */ 0xCD, 0x01, 0x00, 0x22, 0xCE, 0x01, 0x00, 0x8C, 0xCE, 0x01, 0x00, 0xA5, 0xCE, 0x01, 0x00, 0xF7, +/* 00007240 */ 0xCE, 0x01, 0x00, 0x40, 0xCF, 0x01, 0x00, 0x66, 0xCF, 0x01, 0x00, 0xC8, 0xCF, 0x01, 0x00, 0xD6, +/* 00007250 */ 0xCF, 0x01, 0x00, 0xE7, 0xCF, 0x01, 0x00, 0x30, 0xD0, 0x01, 0x00, 0x8C, 0xD0, 0x01, 0x00, 0xAB, +/* 00007260 */ 0xD0, 0x01, 0x00, 0xCD, 0xD0, 0x01, 0x00, 0xD7, 0xD0, 0x01, 0x00, 0xD8, 0xD0, 0x01, 0x00, 0xFF, +/* 00007270 */ 0xD0, 0x01, 0x00, 0x2B, 0xD1, 0x01, 0x00, 0x55, 0xD1, 0x01, 0x00, 0x5F, 0xD1, 0x01, 0x00, 0x60, +/* 00007280 */ 0xD1, 0x01, 0x00, 0xBC, 0xD1, 0x01, 0x00, 0x11, 0xD2, 0x01, 0x00, 0x37, 0xD2, 0x01, 0x00, 0x75, +/* 00007290 */ 0xD2, 0x01, 0x00, 0x8A, 0xD2, 0x01, 0x00, 0xCA, 0xD2, 0x01, 0x00, 0xD8, 0xD2, 0x01, 0x00, 0xE3, +/* 000072A0 */ 0xD2, 0x01, 0x00, 0xE4, 0xD2, 0x01, 0x00, 0x3A, 0xD3, 0x01, 0x00, 0x6D, 0xD3, 0x01, 0x00, 0xBA, +/* 000072B0 */ 0xD3, 0x01, 0x00, 0x0E, 0xD4, 0x01, 0x00, 0x38, 0xD4, 0x01, 0x00, 0x42, 0xD4, 0x01, 0x00, 0x43, +/* 000072C0 */ 0xD4, 0x01, 0x00, 0x85, 0xD4, 0x01, 0x00, 0xB2, 0xD4, 0x01, 0x00, 0x0C, 0xD5, 0x01, 0x00, 0x1D, +/* 000072D0 */ 0xD5, 0x01, 0x00, 0x71, 0xD5, 0x01, 0x00, 0x7B, 0xD5, 0x01, 0x00, 0x7C, 0xD5, 0x01, 0x00, 0xA2, +/* 000072E0 */ 0xD5, 0x01, 0x00, 0xA9, 0xD5, 0x01, 0x00, 0xAA, 0xD5, 0x01, 0x00, 0xDF, 0xD5, 0x01, 0x00, 0x01, +/* 000072F0 */ 0xD6, 0x01, 0x00, 0x02, 0xD6, 0x01, 0x00, 0x3E, 0xD6, 0x01, 0x00, 0x3F, 0xD6, 0x01, 0x00, 0x88, +/* 00007300 */ 0xD6, 0x01, 0x00, 0xBB, 0xD6, 0x01, 0x00, 0xEB, 0xD6, 0x01, 0x00, 0xFD, 0xD6, 0x01, 0x00, 0xFE, +/* 00007310 */ 0xD6, 0x01, 0x00, 0x8D, 0xD7, 0x01, 0x00, 0xE3, 0xD7, 0x01, 0x00, 0xF5, 0xD7, 0x01, 0x00, 0xF6, +/* 00007320 */ 0xD7, 0x01, 0x00, 0x2F, 0xD8, 0x01, 0x00, 0x30, 0xD8, 0x01, 0x00, 0x53, 0xD8, 0x01, 0x00, 0x89, +/* 00007330 */ 0xD8, 0x01, 0x00, 0xBF, 0xD8, 0x01, 0x00, 0xD8, 0xD8, 0x01, 0x00, 0x12, 0xD9, 0x01, 0x00, 0x24, +/* 00007340 */ 0xD9, 0x01, 0x00, 0x25, 0xD9, 0x01, 0x00, 0x96, 0xD9, 0x01, 0x00, 0xF5, 0xD9, 0x01, 0x00, 0x76, +/* 00007350 */ 0xDA, 0x01, 0x00, 0xE4, 0xDA, 0x01, 0x00, 0x57, 0xDB, 0x01, 0x00, 0xB9, 0xDB, 0x01, 0x00, 0xBA, +/* 00007360 */ 0xDB, 0x01, 0x00, 0xF2, 0xDB, 0x01, 0x00, 0x33, 0xDC, 0x01, 0x00, 0xA1, 0xDC, 0x01, 0x00, 0xA2, +/* 00007370 */ 0xDC, 0x01, 0x00, 0xCD, 0xDC, 0x01, 0x00, 0x36, 0xDD, 0x01, 0x00, 0x7B, 0xDD, 0x01, 0x00, 0x7C, +/* 00007380 */ 0xDD, 0x01, 0x00, 0xAE, 0xDD, 0x01, 0x00, 0x19, 0xDE, 0x01, 0x00, 0x9B, 0xDE, 0x01, 0x00, 0xC7, +/* 00007390 */ 0xDE, 0x01, 0x00, 0x13, 0xDF, 0x01, 0x00, 0x5A, 0xDF, 0x01, 0x00, 0xF6, 0xDF, 0x01, 0x00, 0x42, +/* 000073A0 */ 0xE0, 0x01, 0x00, 0x79, 0xE0, 0x01, 0x00, 0xFD, 0xE0, 0x01, 0x00, 0x22, 0xE1, 0x01, 0x00, 0x52, +/* 000073B0 */ 0xE1, 0x01, 0x00, 0x70, 0xE1, 0x01, 0x00, 0x13, 0xE2, 0x01, 0x00, 0x72, 0xE2, 0x01, 0x00, 0xA1, +/* 000073C0 */ 0xE2, 0x01, 0x00, 0xBB, 0xE2, 0x01, 0x00, 0xD3, 0xE2, 0x01, 0x00, 0xE5, 0xE2, 0x01, 0x00, 0x14, +/* 000073D0 */ 0xE3, 0x01, 0x00, 0x83, 0xE3, 0x01, 0x00, 0xB2, 0xE3, 0x01, 0x00, 0x40, 0xE4, 0x01, 0x00, 0x77, +/* 000073E0 */ 0xE4, 0x01, 0x00, 0xE1, 0xE4, 0x01, 0x00, 0xFB, 0xE4, 0x01, 0x00, 0x11, 0xE5, 0x01, 0x00, 0x2C, +/* 000073F0 */ 0xE5, 0x01, 0x00, 0x5B, 0xE5, 0x01, 0x00, 0x71, 0xE5, 0x01, 0x00, 0x83, 0xE5, 0x01, 0x00, 0x84, +/* 00007400 */ 0xE5, 0x01, 0x00, 0xB3, 0xE5, 0x01, 0x00, 0xE2, 0xE5, 0x01, 0x00, 0xFC, 0xE5, 0x01, 0x00, 0x82, +/* 00007410 */ 0xE6, 0x01, 0x00, 0xA4, 0xE6, 0x01, 0x00, 0xD2, 0xE6, 0x01, 0x00, 0x00, 0xE7, 0x01, 0x00, 0x01, +/* 00007420 */ 0xE7, 0x01, 0x00, 0x72, 0xE7, 0x01, 0x00, 0xFB, 0xE7, 0x01, 0x00, 0x64, 0xE8, 0x01, 0x00, 0xA3, +/* 00007430 */ 0xE8, 0x01, 0x00, 0xB9, 0xE8, 0x01, 0x00, 0xBA, 0xE8, 0x01, 0x00, 0xDF, 0xE8, 0x01, 0x00, 0x0C, +/* 00007440 */ 0xE9, 0x01, 0x00, 0x39, 0xE9, 0x01, 0x00, 0x66, 0xE9, 0x01, 0x00, 0x83, 0xE9, 0x01, 0x00, 0xB0, +/* 00007450 */ 0xE9, 0x01, 0x00, 0xC6, 0xE9, 0x01, 0x00, 0xD8, 0xE9, 0x01, 0x00, 0xD9, 0xE9, 0x01, 0x00, 0x0A, +/* 00007460 */ 0xEA, 0x01, 0x00, 0x37, 0xEA, 0x01, 0x00, 0x49, 0xEA, 0x01, 0x00, 0x4A, 0xEA, 0x01, 0x00, 0x77, +/* 00007470 */ 0xEA, 0x01, 0x00, 0x9C, 0xEA, 0x01, 0x00, 0xAE, 0xEA, 0x01, 0x00, 0xAF, 0xEA, 0x01, 0x00, 0xE0, +/* 00007480 */ 0xEA, 0x01, 0x00, 0x0E, 0xEB, 0x01, 0x00, 0x5B, 0xEB, 0x01, 0x00, 0xA3, 0xEB, 0x01, 0x00, 0xCD, +/* 00007490 */ 0xEB, 0x01, 0x00, 0x03, 0xEC, 0x01, 0x00, 0x45, 0xEC, 0x01, 0x00, 0x77, 0xEC, 0x01, 0x00, 0xA5, +/* 000074A0 */ 0xEC, 0x01, 0x00, 0xD7, 0xEC, 0x01, 0x00, 0x0E, 0xED, 0x01, 0x00, 0x1C, 0xED, 0x01, 0x00, 0x1D, +/* 000074B0 */ 0xED, 0x01, 0x00, 0x8C, 0xED, 0x01, 0x00, 0xB5, 0xED, 0x01, 0x00, 0xF0, 0xED, 0x01, 0x00, 0x4A, +/* 000074C0 */ 0xEE, 0x01, 0x00, 0x5C, 0xEE, 0x01, 0x00, 0x86, 0xEE, 0x01, 0x00, 0xB6, 0xEE, 0x01, 0x00, 0xC8, +/* 000074D0 */ 0xEE, 0x01, 0x00, 0x6C, 0xEF, 0x01, 0x00, 0x98, 0xEF, 0x01, 0x00, 0xC1, 0xEF, 0x01, 0x00, 0xFB, +/* 000074E0 */ 0xEF, 0x01, 0x00, 0x48, 0xF0, 0x01, 0x00, 0x7E, 0xF0, 0x01, 0x00, 0x9B, 0xF0, 0x01, 0x00, 0xB5, +/* 000074F0 */ 0xF0, 0x01, 0x00, 0xE9, 0xF0, 0x01, 0x00, 0x36, 0xF1, 0x01, 0x00, 0x6B, 0xF1, 0x01, 0x00, 0x96, +/* 00007500 */ 0xF1, 0x01, 0x00, 0xDE, 0xF1, 0x01, 0x00, 0xF2, 0xF1, 0x01, 0x00, 0x33, 0xF2, 0x01, 0x00, 0x34, +/* 00007510 */ 0xF2, 0x01, 0x00, 0x5B, 0xF2, 0x01, 0x00, 0x5C, 0xF2, 0x01, 0x00, 0xAA, 0xF2, 0x01, 0x00, 0xE9, +/* 00007520 */ 0xF2, 0x01, 0x00, 0x28, 0xF3, 0x01, 0x00, 0x3E, 0xF3, 0x01, 0x00, 0x3F, 0xF3, 0x01, 0x00, 0x76, +/* 00007530 */ 0xF3, 0x01, 0x00, 0xAA, 0xF3, 0x01, 0x00, 0xF3, 0xF3, 0x01, 0x00, 0x09, 0xF4, 0x01, 0x00, 0x0A, +/* 00007540 */ 0xF4, 0x01, 0x00, 0x45, 0xF4, 0x01, 0x00, 0x8B, 0xF4, 0x01, 0x00, 0x8C, 0xF4, 0x01, 0x00, 0xC2, +/* 00007550 */ 0xF4, 0x01, 0x00, 0x01, 0xF5, 0x01, 0x00, 0x46, 0xF5, 0x01, 0x00, 0x5C, 0xF5, 0x01, 0x00, 0x5D, +/* 00007560 */ 0xF5, 0x01, 0x00, 0xA5, 0xF5, 0x01, 0x00, 0xA6, 0xF5, 0x01, 0x00, 0xD3, 0xF5, 0x01, 0x00, 0x3B, +/* 00007570 */ 0xF6, 0x01, 0x00, 0x78, 0xF6, 0x01, 0x00, 0x98, 0xF6, 0x01, 0x00, 0xAA, 0xF6, 0x01, 0x00, 0xE8, +/* 00007580 */ 0xF6, 0x01, 0x00, 0xE9, 0xF6, 0x01, 0x00, 0x12, 0xF7, 0x01, 0x00, 0x46, 0xF7, 0x01, 0x00, 0xA8, +/* 00007590 */ 0xF7, 0x01, 0x00, 0xBE, 0xF7, 0x01, 0x00, 0xBF, 0xF7, 0x01, 0x00, 0x06, 0xF8, 0x01, 0x00, 0x63, +/* 000075A0 */ 0xF8, 0x01, 0x00, 0xC5, 0xF8, 0x01, 0x00, 0xDB, 0xF8, 0x01, 0x00, 0xDC, 0xF8, 0x01, 0x00, 0xFF, +/* 000075B0 */ 0xF8, 0x01, 0x00, 0x22, 0xF9, 0x01, 0x00, 0x23, 0xF9, 0x01, 0x00, 0x5D, 0xF9, 0x01, 0x00, 0x78, +/* 000075C0 */ 0xF9, 0x01, 0x00, 0x93, 0xF9, 0x01, 0x00, 0xCC, 0xF9, 0x01, 0x00, 0x1E, 0xFA, 0x01, 0x00, 0x58, +/* 000075D0 */ 0xFA, 0x01, 0x00, 0x88, 0xFA, 0x01, 0x00, 0xD5, 0xFA, 0x01, 0x00, 0xED, 0xFA, 0x01, 0x00, 0xFF, +/* 000075E0 */ 0xFA, 0x01, 0x00, 0x4E, 0xFB, 0x01, 0x00, 0x4F, 0xFB, 0x01, 0x00, 0xE1, 0xFB, 0x01, 0x00, 0xE2, +/* 000075F0 */ 0xFB, 0x01, 0x00, 0x73, 0xFC, 0x01, 0x00, 0xB7, 0xFC, 0x01, 0x00, 0xB8, 0xFC, 0x01, 0x00, 0x4D, +/* 00007600 */ 0xFD, 0x01, 0x00, 0x4E, 0xFD, 0x01, 0x00, 0x9C, 0xFD, 0x01, 0x00, 0xD4, 0xFD, 0x01, 0x00, 0x0C, +/* 00007610 */ 0xFE, 0x01, 0x00, 0x7A, 0xFE, 0x01, 0x00, 0x94, 0xFE, 0x01, 0x00, 0xDF, 0xFE, 0x01, 0x00, 0x40, +/* 00007620 */ 0xFF, 0x01, 0x00, 0xAE, 0xFF, 0x01, 0x00, 0xC8, 0xFF, 0x01, 0x00, 0xC9, 0xFF, 0x01, 0x00, 0xEA, +/* 00007630 */ 0xFF, 0x01, 0x00, 0x25, 0x00, 0x02, 0x00, 0x5E, 0x00, 0x02, 0x00, 0xA3, 0x00, 0x02, 0x00, 0xF4, +/* 00007640 */ 0x00, 0x02, 0x00, 0x4F, 0x01, 0x02, 0x00, 0xE4, 0x01, 0x02, 0x00, 0x79, 0x02, 0x02, 0x00, 0x93, +/* 00007650 */ 0x02, 0x02, 0x00, 0xE0, 0x02, 0x02, 0x00, 0xF4, 0x02, 0x02, 0x00, 0xF5, 0x02, 0x02, 0x00, 0x3B, +/* 00007660 */ 0x03, 0x02, 0x00, 0x83, 0x03, 0x02, 0x00, 0xBB, 0x03, 0x02, 0x00, 0x21, 0x04, 0x02, 0x00, 0x3B, +/* 00007670 */ 0x04, 0x02, 0x00, 0x3C, 0x04, 0x02, 0x00, 0x87, 0x04, 0x02, 0x00, 0xE8, 0x04, 0x02, 0x00, 0x4E, +/* 00007680 */ 0x05, 0x02, 0x00, 0x68, 0x05, 0x02, 0x00, 0x69, 0x05, 0x02, 0x00, 0xA5, 0x05, 0x02, 0x00, 0xE3, +/* 00007690 */ 0x05, 0x02, 0x00, 0xF7, 0x05, 0x02, 0x00, 0xF8, 0x05, 0x02, 0x00, 0x19, 0x06, 0x02, 0x00, 0x27, +/* 000076A0 */ 0x06, 0x02, 0x00, 0x31, 0x06, 0x02, 0x00, 0x7C, 0x06, 0x02, 0x00, 0x96, 0x06, 0x02, 0x00, 0xA0, +/* 000076B0 */ 0x06, 0x02, 0x00, 0xA1, 0x06, 0x02, 0x00, 0xDB, 0x06, 0x02, 0x00, 0x01, 0x07, 0x02, 0x00, 0x3D, +/* 000076C0 */ 0x07, 0x02, 0x00, 0x8E, 0x07, 0x02, 0x00, 0xC5, 0x07, 0x02, 0x00, 0xF5, 0x07, 0x02, 0x00, 0x07, +/* 000076D0 */ 0x08, 0x02, 0x00, 0x08, 0x08, 0x02, 0x00, 0x9F, 0x08, 0x02, 0x00, 0xFD, 0x08, 0x02, 0x00, 0x0F, +/* 000076E0 */ 0x09, 0x02, 0x00, 0x10, 0x09, 0x02, 0x00, 0x4D, 0x09, 0x02, 0x00, 0x4E, 0x09, 0x02, 0x00, 0x71, +/* 000076F0 */ 0x09, 0x02, 0x00, 0xA7, 0x09, 0x02, 0x00, 0xDD, 0x09, 0x02, 0x00, 0xF6, 0x09, 0x02, 0x00, 0x30, +/* 00007700 */ 0x0A, 0x02, 0x00, 0x42, 0x0A, 0x02, 0x00, 0x43, 0x0A, 0x02, 0x00, 0xB4, 0x0A, 0x02, 0x00, 0x26, +/* 00007710 */ 0x0B, 0x02, 0x00, 0x27, 0x0B, 0x02, 0x00, 0x6F, 0x0B, 0x02, 0x00, 0x70, 0x0B, 0x02, 0x00, 0xCF, +/* 00007720 */ 0x0B, 0x02, 0x00, 0x4C, 0x0C, 0x02, 0x00, 0x7C, 0x0C, 0x02, 0x00, 0x7D, 0x0C, 0x02, 0x00, 0xE4, +/* 00007730 */ 0x0C, 0x02, 0x00, 0x1B, 0x0D, 0x02, 0x00, 0x52, 0x0D, 0x02, 0x00, 0x90, 0x0D, 0x02, 0x00, 0x91, +/* 00007740 */ 0x0D, 0x02, 0x00, 0xE2, 0x0D, 0x02, 0x00, 0x33, 0x0E, 0x02, 0x00, 0x34, 0x0E, 0x02, 0x00, 0xAE, +/* 00007750 */ 0x0E, 0x02, 0x00, 0x1D, 0x0F, 0x02, 0x00, 0xA4, 0x0F, 0x02, 0x00, 0xB6, 0x0F, 0x02, 0x00, 0xB7, +/* 00007760 */ 0x0F, 0x02, 0x00, 0x18, 0x10, 0x02, 0x00, 0x19, 0x10, 0x02, 0x00, 0x51, 0x10, 0x02, 0x00, 0x92, +/* 00007770 */ 0x10, 0x02, 0x00, 0xFF, 0x10, 0x02, 0x00, 0x00, 0x11, 0x02, 0x00, 0x34, 0x11, 0x02, 0x00, 0x92, +/* 00007780 */ 0x11, 0x02, 0x00, 0xDB, 0x11, 0x02, 0x00, 0xED, 0x11, 0x02, 0x00, 0xEE, 0x11, 0x02, 0x00, 0x1A, +/* 00007790 */ 0x12, 0x02, 0x00, 0x55, 0x12, 0x02, 0x00, 0x92, 0x12, 0x02, 0x00, 0xA8, 0x12, 0x02, 0x00, 0xFE, +/* 000077A0 */ 0x12, 0x02, 0x00, 0x18, 0x13, 0x02, 0x00, 0x64, 0x13, 0x02, 0x00, 0x86, 0x13, 0x02, 0x00, 0xB4, +/* 000077B0 */ 0x13, 0x02, 0x00, 0x01, 0x14, 0x02, 0x00, 0x17, 0x14, 0x02, 0x00, 0x8D, 0x14, 0x02, 0x00, 0xF1, +/* 000077C0 */ 0x14, 0x02, 0x00, 0x0A, 0x15, 0x02, 0x00, 0x34, 0x15, 0x02, 0x00, 0x65, 0x15, 0x02, 0x00, 0xCE, +/* 000077D0 */ 0x15, 0x02, 0x00, 0xFD, 0x15, 0x02, 0x00, 0x58, 0x16, 0x02, 0x00, 0x75, 0x16, 0x02, 0x00, 0xCF, +/* 000077E0 */ 0x16, 0x02, 0x00, 0xE5, 0x16, 0x02, 0x00, 0xF7, 0x16, 0x02, 0x00, 0xF8, 0x16, 0x02, 0x00, 0x8C, +/* 000077F0 */ 0x17, 0x02, 0x00, 0x8D, 0x17, 0x02, 0x00, 0xBE, 0x17, 0x02, 0x00, 0xF6, 0x17, 0x02, 0x00, 0x39, +/* 00007800 */ 0x18, 0x02, 0x00, 0x67, 0x18, 0x02, 0x00, 0x68, 0x18, 0x02, 0x00, 0x96, 0x18, 0x02, 0x00, 0xCE, +/* 00007810 */ 0x18, 0x02, 0x00, 0xE0, 0x18, 0x02, 0x00, 0xE1, 0x18, 0x02, 0x00, 0x16, 0x19, 0x02, 0x00, 0x5C, +/* 00007820 */ 0x19, 0x02, 0x00, 0xCD, 0x19, 0x02, 0x00, 0xDF, 0x19, 0x02, 0x00, 0xE0, 0x19, 0x02, 0x00, 0x2C, +/* 00007830 */ 0x1A, 0x02, 0x00, 0x7A, 0x1A, 0x02, 0x00, 0xC8, 0x1A, 0x02, 0x00, 0xC9, 0x1A, 0x02, 0x00, 0x07, +/* 00007840 */ 0x1B, 0x02, 0x00, 0x5F, 0x1B, 0x02, 0x00, 0xB7, 0x1B, 0x02, 0x00, 0xC9, 0x1B, 0x02, 0x00, 0xCA, +/* 00007850 */ 0x1B, 0x02, 0x00, 0x0A, 0x1C, 0x02, 0x00, 0x44, 0x1C, 0x02, 0x00, 0x45, 0x1C, 0x02, 0x00, 0x5B, +/* 00007860 */ 0x1C, 0x02, 0x00, 0xAF, 0x1C, 0x02, 0x00, 0xED, 0x1C, 0x02, 0x00, 0x0B, 0x1D, 0x02, 0x00, 0x35, +/* 00007870 */ 0x1D, 0x02, 0x00, 0x8C, 0x1D, 0x02, 0x00, 0x11, 0x1E, 0x02, 0x00, 0x76, 0x1E, 0x02, 0x00, 0xB1, +/* 00007880 */ 0x1E, 0x02, 0x00, 0xC3, 0x1E, 0x02, 0x00, 0xC4, 0x1E, 0x02, 0x00, 0xFB, 0x1E, 0x02, 0x00, 0x5C, +/* 00007890 */ 0x1F, 0x02, 0x00, 0x6E, 0x1F, 0x02, 0x00, 0x6F, 0x1F, 0x02, 0x00, 0xED, 0x1F, 0x02, 0x00, 0x2C, +/* 000078A0 */ 0x20, 0x02, 0x00, 0x3A, 0x20, 0x02, 0x00, 0x3B, 0x20, 0x02, 0x00, 0xAB, 0x20, 0x02, 0x00, 0xFA, +/* 000078B0 */ 0x20, 0x02, 0x00, 0x5B, 0x21, 0x02, 0x00, 0x6D, 0x21, 0x02, 0x00, 0x6E, 0x21, 0x02, 0x00, 0xA8, +/* 000078C0 */ 0x21, 0x02, 0x00, 0xF9, 0x21, 0x02, 0x00, 0xFA, 0x21, 0x02, 0x00, 0x2B, 0x22, 0x02, 0x00, 0x71, +/* 000078D0 */ 0x22, 0x02, 0x00, 0xB3, 0x22, 0x02, 0x00, 0xB4, 0x22, 0x02, 0x00, 0xDB, 0x22, 0x02, 0x00, 0x2D, +/* 000078E0 */ 0x23, 0x02, 0x00, 0x6C, 0x23, 0x02, 0x00, 0xAF, 0x23, 0x02, 0x00, 0xC5, 0x23, 0x02, 0x00, 0xC6, +/* 000078F0 */ 0x23, 0x02, 0x00, 0xFD, 0x23, 0x02, 0x00, 0xFE, 0x23, 0x02, 0x00, 0x32, 0x24, 0x02, 0x00, 0x7F, +/* 00007900 */ 0x24, 0x02, 0x00, 0x95, 0x24, 0x02, 0x00, 0x96, 0x24, 0x02, 0x00, 0xD1, 0x24, 0x02, 0x00, 0x17, +/* 00007910 */ 0x25, 0x02, 0x00, 0x18, 0x25, 0x02, 0x00, 0x4E, 0x25, 0x02, 0x00, 0x8D, 0x25, 0x02, 0x00, 0xD2, +/* 00007920 */ 0x25, 0x02, 0x00, 0xE8, 0x25, 0x02, 0x00, 0xE9, 0x25, 0x02, 0x00, 0x35, 0x26, 0x02, 0x00, 0x36, +/* 00007930 */ 0x26, 0x02, 0x00, 0x9B, 0x26, 0x02, 0x00, 0xD7, 0x26, 0x02, 0x00, 0xD8, 0x26, 0x02, 0x00, 0xF8, +/* 00007940 */ 0x26, 0x02, 0x00, 0x0A, 0x27, 0x02, 0x00, 0x50, 0x27, 0x02, 0x00, 0x51, 0x27, 0x02, 0x00, 0x76, +/* 00007950 */ 0x27, 0x02, 0x00, 0xA4, 0x27, 0x02, 0x00, 0xA5, 0x27, 0x02, 0x00, 0xD9, 0x27, 0x02, 0x00, 0x42, +/* 00007960 */ 0x28, 0x02, 0x00, 0x58, 0x28, 0x02, 0x00, 0x59, 0x28, 0x02, 0x00, 0xA0, 0x28, 0x02, 0x00, 0x01, +/* 00007970 */ 0x29, 0x02, 0x00, 0x6A, 0x29, 0x02, 0x00, 0x80, 0x29, 0x02, 0x00, 0x81, 0x29, 0x02, 0x00, 0xCC, +/* 00007980 */ 0x29, 0x02, 0x00, 0xDE, 0x29, 0x02, 0x00, 0x2F, 0x2A, 0x02, 0x00, 0x30, 0x2A, 0x02, 0x00, 0xCA, +/* 00007990 */ 0x2A, 0x02, 0x00, 0xCB, 0x2A, 0x02, 0x00, 0x47, 0x2B, 0x02, 0x00, 0xC5, 0x2B, 0x02, 0x00, 0xE9, +/* 000079A0 */ 0x2B, 0x02, 0x00, 0xEA, 0x2B, 0x02, 0x00, 0x83, 0x2C, 0x02, 0x00, 0xCB, 0x2C, 0x02, 0x00, 0x68, +/* 000079B0 */ 0x2D, 0x02, 0x00, 0x69, 0x2D, 0x02, 0x00, 0xBB, 0x2D, 0x02, 0x00, 0xF3, 0x2D, 0x02, 0x00, 0x2B, +/* 000079C0 */ 0x2E, 0x02, 0x00, 0xA1, 0x2E, 0x02, 0x00, 0xBB, 0x2E, 0x02, 0x00, 0x06, 0x2F, 0x02, 0x00, 0x6B, +/* 000079D0 */ 0x2F, 0x02, 0x00, 0xE1, 0x2F, 0x02, 0x00, 0xFB, 0x2F, 0x02, 0x00, 0xFC, 0x2F, 0x02, 0x00, 0x42, +/* 000079E0 */ 0x30, 0x02, 0x00, 0x43, 0x30, 0x02, 0x00, 0x9F, 0x30, 0x02, 0x00, 0xF5, 0x30, 0x02, 0x00, 0x4C, +/* 000079F0 */ 0x31, 0x02, 0x00, 0x6A, 0x31, 0x02, 0x00, 0x86, 0x31, 0x02, 0x00, 0x87, 0x31, 0x02, 0x00, 0xC9, +/* 00007A00 */ 0x31, 0x02, 0x00, 0x16, 0x32, 0x02, 0x00, 0x2A, 0x32, 0x02, 0x00, 0x2B, 0x32, 0x02, 0x00, 0x74, +/* 00007A10 */ 0x32, 0x02, 0x00, 0xBB, 0x32, 0x02, 0x00, 0xF3, 0x32, 0x02, 0x00, 0x60, 0x33, 0x02, 0x00, 0x7A, +/* 00007A20 */ 0x33, 0x02, 0x00, 0x7B, 0x33, 0x02, 0x00, 0xC6, 0x33, 0x02, 0x00, 0x2B, 0x34, 0x02, 0x00, 0x98, +/* 00007A30 */ 0x34, 0x02, 0x00, 0xB2, 0x34, 0x02, 0x00, 0xB3, 0x34, 0x02, 0x00, 0xEE, 0x34, 0x02, 0x00, 0x2C, +/* 00007A40 */ 0x35, 0x02, 0x00, 0x40, 0x35, 0x02, 0x00, 0x41, 0x35, 0x02, 0x00, 0x66, 0x35, 0x02, 0x00, 0x74, +/* 00007A50 */ 0x35, 0x02, 0x00, 0x7E, 0x35, 0x02, 0x00, 0xCD, 0x35, 0x02, 0x00, 0xE7, 0x35, 0x02, 0x00, 0xF1, +/* 00007A60 */ 0x35, 0x02, 0x00, 0xF2, 0x35, 0x02, 0x00, 0x72, 0x36, 0x02, 0x00, 0x9A, 0x36, 0x02, 0x00, 0xD4, +/* 00007A70 */ 0x36, 0x02, 0x00, 0x1A, 0x37, 0x02, 0x00, 0x47, 0x37, 0x02, 0x00, 0x7D, 0x37, 0x02, 0x00, 0x96, +/* 00007A80 */ 0x37, 0x02, 0x00, 0xD0, 0x37, 0x02, 0x00, 0xE2, 0x37, 0x02, 0x00, 0xE3, 0x37, 0x02, 0x00, 0x0C, +/* 00007A90 */ 0x38, 0x02, 0x00, 0x4D, 0x38, 0x02, 0x00, 0xE0, 0x38, 0x02, 0x00, 0x0E, 0x39, 0x02, 0x00, 0x24, +/* 00007AA0 */ 0x39, 0x02, 0x00, 0x36, 0x39, 0x02, 0x00, 0x77, 0x39, 0x02, 0x00, 0xED, 0x39, 0x02, 0x00, 0x1B, +/* 00007AB0 */ 0x3A, 0x02, 0x00, 0x31, 0x3A, 0x02, 0x00, 0x43, 0x3A, 0x02, 0x00, 0x44, 0x3A, 0x02, 0x00, 0x97, +/* 00007AC0 */ 0x3A, 0x02, 0x00, 0xD3, 0x3A, 0x02, 0x00, 0x0D, 0x3B, 0x02, 0x00, 0x4A, 0x3B, 0x02, 0x00, 0x62, +/* 00007AD0 */ 0x3B, 0x02, 0x00, 0x9F, 0x3B, 0x02, 0x00, 0xD9, 0x3B, 0x02, 0x00, 0x16, 0x3C, 0x02, 0x00, 0x2E, +/* 00007AE0 */ 0x3C, 0x02, 0x00, 0x69, 0x3C, 0x02, 0x00, 0xA3, 0x3C, 0x02, 0x00, 0xE0, 0x3C, 0x02, 0x00, 0xF8, +/* 00007AF0 */ 0x3C, 0x02, 0x00, 0x0A, 0x3D, 0x02, 0x00, 0x5D, 0x3D, 0x02, 0x00, 0x99, 0x3D, 0x02, 0x00, 0xD3, +/* 00007B00 */ 0x3D, 0x02, 0x00, 0x10, 0x3E, 0x02, 0x00, 0x28, 0x3E, 0x02, 0x00, 0x66, 0x3E, 0x02, 0x00, 0xA0, +/* 00007B10 */ 0x3E, 0x02, 0x00, 0xDD, 0x3E, 0x02, 0x00, 0xF5, 0x3E, 0x02, 0x00, 0x33, 0x3F, 0x02, 0x00, 0x6D, +/* 00007B20 */ 0x3F, 0x02, 0x00, 0xAA, 0x3F, 0x02, 0x00, 0xC2, 0x3F, 0x02, 0x00, 0xD4, 0x3F, 0x02, 0x00, 0xF4, +/* 00007B30 */ 0x3F, 0x02, 0x00, 0x02, 0x40, 0x02, 0x00, 0x03, 0x40, 0x02, 0x00, 0x8D, 0x40, 0x02, 0x00, 0xCA, +/* 00007B40 */ 0x40, 0x02, 0x00, 0xED, 0x40, 0x02, 0x00, 0x18, 0x41, 0x02, 0x00, 0x33, 0x41, 0x02, 0x00, 0x34, +/* 00007B50 */ 0x41, 0x02, 0x00, 0x5B, 0x41, 0x02, 0x00, 0xB2, 0x41, 0x02, 0x00, 0xF3, 0x41, 0x02, 0x00, 0x30, +/* 00007B60 */ 0x42, 0x02, 0x00, 0x6A, 0x42, 0x02, 0x00, 0x80, 0x42, 0x02, 0x00, 0x92, 0x42, 0x02, 0x00, 0x93, +/* 00007B70 */ 0x42, 0x02, 0x00, 0xBE, 0x42, 0x02, 0x00, 0xE2, 0x42, 0x02, 0x00, 0x18, 0x43, 0x02, 0x00, 0x54, +/* 00007B80 */ 0x43, 0x02, 0x00, 0x91, 0x43, 0x02, 0x00, 0xC6, 0x43, 0x02, 0x00, 0xDC, 0x43, 0x02, 0x00, 0xEE, +/* 00007B90 */ 0x43, 0x02, 0x00, 0xEF, 0x43, 0x02, 0x00, 0x14, 0x44, 0x02, 0x00, 0x6A, 0x44, 0x02, 0x00, 0xA3, +/* 00007BA0 */ 0x44, 0x02, 0x00, 0xFD, 0x44, 0x02, 0x00, 0x3A, 0x45, 0x02, 0x00, 0x75, 0x45, 0x02, 0x00, 0xAB, +/* 00007BB0 */ 0x45, 0x02, 0x00, 0xC1, 0x45, 0x02, 0x00, 0xD3, 0x45, 0x02, 0x00, 0xD4, 0x45, 0x02, 0x00, 0xF7, +/* 00007BC0 */ 0x45, 0x02, 0x00, 0x22, 0x46, 0x02, 0x00, 0x34, 0x46, 0x02, 0x00, 0x35, 0x46, 0x02, 0x00, 0x61, +/* 00007BD0 */ 0x46, 0x02, 0x00, 0x9D, 0x46, 0x02, 0x00, 0xDD, 0x46, 0x02, 0x00, 0x1F, 0x47, 0x02, 0x00, 0x58, +/* 00007BE0 */ 0x47, 0x02, 0x00, 0x6E, 0x47, 0x02, 0x00, 0x80, 0x47, 0x02, 0x00, 0x81, 0x47, 0x02, 0x00, 0xE7, +/* 00007BF0 */ 0x47, 0x02, 0x00, 0x0F, 0x48, 0x02, 0x00, 0x3C, 0x48, 0x02, 0x00, 0x52, 0x48, 0x02, 0x00, 0x66, +/* 00007C00 */ 0x48, 0x02, 0x00, 0x67, 0x48, 0x02, 0x00, 0x9D, 0x48, 0x02, 0x00, 0xFC, 0x48, 0x02, 0x00, 0x0A, +/* 00007C10 */ 0x49, 0x02, 0x00, 0x0B, 0x49, 0x02, 0x00, 0x38, 0x49, 0x02, 0x00, 0x68, 0x49, 0x02, 0x00, 0x94, +/* 00007C20 */ 0x49, 0x02, 0x00, 0xC0, 0x49, 0x02, 0x00, 0xF0, 0x49, 0x02, 0x00, 0x1C, 0x4A, 0x02, 0x00, 0x48, +/* 00007C30 */ 0x4A, 0x02, 0x00, 0x7D, 0x4A, 0x02, 0x00, 0xA5, 0x4A, 0x02, 0x00, 0xD0, 0x4A, 0x02, 0x00, 0xDF, +/* 00007C40 */ 0x4A, 0x02, 0x00, 0xE0, 0x4A, 0x02, 0x00, 0x17, 0x4B, 0x02, 0x00, 0x4E, 0x4B, 0x02, 0x00, 0x6D, +/* 00007C50 */ 0x4B, 0x02, 0x00, 0x7F, 0x4B, 0x02, 0x00, 0x80, 0x4B, 0x02, 0x00, 0xC8, 0x4B, 0x02, 0x00, 0xD6, +/* 00007C60 */ 0x4B, 0x02, 0x00, 0xD7, 0x4B, 0x02, 0x00, 0x47, 0x4C, 0x02, 0x00, 0xA3, 0x4C, 0x02, 0x00, 0x19, +/* 00007C70 */ 0x4D, 0x02, 0x00, 0xAA, 0x4D, 0x02, 0x00, 0x28, 0x4E, 0x02, 0x00, 0x4E, 0x4E, 0x02, 0x00, 0x43, +/* 00007C80 */ 0x4F, 0x02, 0x00, 0x6D, 0x4F, 0x02, 0x00, 0x7F, 0x4F, 0x02, 0x00, 0x80, 0x4F, 0x02, 0x00, 0xC3, +/* 00007C90 */ 0x4F, 0x02, 0x00, 0x45, 0x50, 0x02, 0x00, 0x78, 0x50, 0x02, 0x00, 0x2E, 0x51, 0x02, 0x00, 0x40, +/* 00007CA0 */ 0x51, 0x02, 0x00, 0x66, 0x51, 0x02, 0x00, 0x74, 0x51, 0x02, 0x00, 0x75, 0x51, 0x02, 0x00, 0xDA, +/* 00007CB0 */ 0x51, 0x02, 0x00, 0x24, 0x52, 0x02, 0x00, 0x98, 0x52, 0x02, 0x00, 0x29, 0x53, 0x02, 0x00, 0x4F, +/* 00007CC0 */ 0x53, 0x02, 0x00, 0x4F, 0x54, 0x02, 0x00, 0x79, 0x54, 0x02, 0x00, 0x8B, 0x54, 0x02, 0x00, 0x8C, +/* 00007CD0 */ 0x54, 0x02, 0x00, 0xD6, 0x54, 0x02, 0x00, 0x05, 0x55, 0x02, 0x00, 0x83, 0x55, 0x02, 0x00, 0xB8, +/* 00007CE0 */ 0x55, 0x02, 0x00, 0x33, 0x56, 0x02, 0x00, 0x45, 0x56, 0x02, 0x00, 0x46, 0x56, 0x02, 0x00, 0x6C, +/* 00007CF0 */ 0x56, 0x02, 0x00, 0x7A, 0x56, 0x02, 0x00, 0x7B, 0x56, 0x02, 0x00, 0xDD, 0x56, 0x02, 0x00, 0x28, +/* 00007D00 */ 0x57, 0x02, 0x00, 0x66, 0x57, 0x02, 0x00, 0xDF, 0x57, 0x02, 0x00, 0xF1, 0x57, 0x02, 0x00, 0xF2, +/* 00007D10 */ 0x57, 0x02, 0x00, 0x2C, 0x58, 0x02, 0x00, 0x99, 0x58, 0x02, 0x00, 0xF8, 0x58, 0x02, 0x00, 0x6D, +/* 00007D20 */ 0x59, 0x02, 0x00, 0x7F, 0x59, 0x02, 0x00, 0x80, 0x59, 0x02, 0x00, 0xBB, 0x59, 0x02, 0x00, 0x26, +/* 00007D30 */ 0x5A, 0x02, 0x00, 0x50, 0x5A, 0x02, 0x00, 0xC4, 0x5A, 0x02, 0x00, 0xE1, 0x5A, 0x02, 0x00, 0x64, +/* 00007D40 */ 0x5B, 0x02, 0x00, 0x7A, 0x5B, 0x02, 0x00, 0xB9, 0x5B, 0x02, 0x00, 0x24, 0x5C, 0x02, 0x00, 0x4E, +/* 00007D50 */ 0x5C, 0x02, 0x00, 0xC2, 0x5C, 0x02, 0x00, 0xDF, 0x5C, 0x02, 0x00, 0x58, 0x5D, 0x02, 0x00, 0x6E, +/* 00007D60 */ 0x5D, 0x02, 0x00, 0x80, 0x5D, 0x02, 0x00, 0x81, 0x5D, 0x02, 0x00, 0x16, 0x5E, 0x02, 0x00, 0xA2, +/* 00007D70 */ 0x5E, 0x02, 0x00, 0x15, 0x5F, 0x02, 0x00, 0x58, 0x5F, 0x02, 0x00, 0xD4, 0x5F, 0x02, 0x00, 0xE6, +/* 00007D80 */ 0x5F, 0x02, 0x00, 0xE7, 0x5F, 0x02, 0x00, 0x21, 0x60, 0x02, 0x00, 0x99, 0x60, 0x02, 0x00, 0xAB, +/* 00007D90 */ 0x60, 0x02, 0x00, 0xAC, 0x60, 0x02, 0x00, 0xE7, 0x60, 0x02, 0x00, 0x61, 0x61, 0x02, 0x00, 0x73, +/* 00007DA0 */ 0x61, 0x02, 0x00, 0x74, 0x61, 0x02, 0x00, 0xB1, 0x61, 0x02, 0x00, 0x2F, 0x62, 0x02, 0x00, 0x41, +/* 00007DB0 */ 0x62, 0x02, 0x00, 0x42, 0x62, 0x02, 0x00, 0x7F, 0x62, 0x02, 0x00, 0xFD, 0x62, 0x02, 0x00, 0x0F, +/* 00007DC0 */ 0x63, 0x02, 0x00, 0x10, 0x63, 0x02, 0x00, 0x53, 0x63, 0x02, 0x00, 0xD0, 0x63, 0x02, 0x00, 0xE2, +/* 00007DD0 */ 0x63, 0x02, 0x00, 0xE3, 0x63, 0x02, 0x00, 0x09, 0x64, 0x02, 0x00, 0x17, 0x64, 0x02, 0x00, 0x18, +/* 00007DE0 */ 0x64, 0x02, 0x00, 0x6D, 0x64, 0x02, 0x00, 0xA6, 0x64, 0x02, 0x00, 0xD6, 0x64, 0x02, 0x00, 0xE8, +/* 00007DF0 */ 0x64, 0x02, 0x00, 0xE9, 0x64, 0x02, 0x00, 0x84, 0x65, 0x02, 0x00, 0xE6, 0x65, 0x02, 0x00, 0xF8, +/* 00007E00 */ 0x65, 0x02, 0x00, 0xF9, 0x65, 0x02, 0x00, 0x38, 0x66, 0x02, 0x00, 0x39, 0x66, 0x02, 0x00, 0x60, +/* 00007E10 */ 0x66, 0x02, 0x00, 0xA5, 0x66, 0x02, 0x00, 0xA6, 0x66, 0x02, 0x00, 0x17, 0x67, 0x02, 0x00, 0x76, +/* 00007E20 */ 0x67, 0x02, 0x00, 0x77, 0x67, 0x02, 0x00, 0xA5, 0x67, 0x02, 0x00, 0xF8, 0x67, 0x02, 0x00, 0x11, +/* 00007E30 */ 0x68, 0x02, 0x00, 0x4F, 0x68, 0x02, 0x00, 0x61, 0x68, 0x02, 0x00, 0x62, 0x68, 0x02, 0x00, 0x90, +/* 00007E40 */ 0x68, 0x02, 0x00, 0xCB, 0x68, 0x02, 0x00, 0xDD, 0x68, 0x02, 0x00, 0xDE, 0x68, 0x02, 0x00, 0x00, +/* 00007E50 */ 0x69, 0x02, 0x00, 0x6F, 0x69, 0x02, 0x00, 0xD6, 0x69, 0x02, 0x00, 0x3A, 0x6A, 0x02, 0x00, 0xBB, +/* 00007E60 */ 0x6A, 0x02, 0x00, 0x1D, 0x6B, 0x02, 0x00, 0x81, 0x6B, 0x02, 0x00, 0xE9, 0x6B, 0x02, 0x00, 0x51, +/* 00007E70 */ 0x6C, 0x02, 0x00, 0xC0, 0x6C, 0x02, 0x00, 0xC1, 0x6C, 0x02, 0x00, 0x30, 0x6D, 0x02, 0x00, 0xA6, +/* 00007E80 */ 0x6D, 0x02, 0x00, 0xA7, 0x6D, 0x02, 0x00, 0x17, 0x6E, 0x02, 0x00, 0x18, 0x6E, 0x02, 0x00, 0x69, +/* 00007E90 */ 0x6E, 0x02, 0x00, 0x8F, 0x6E, 0x02, 0x00, 0xAD, 0x6E, 0x02, 0x00, 0xCD, 0x6E, 0x02, 0x00, 0xEF, +/* 00007EA0 */ 0x6E, 0x02, 0x00, 0x0D, 0x6F, 0x02, 0x00, 0x2D, 0x6F, 0x02, 0x00, 0x51, 0x6F, 0x02, 0x00, 0x75, +/* 00007EB0 */ 0x6F, 0x02, 0x00, 0xA4, 0x6F, 0x02, 0x00, 0xBF, 0x6F, 0x02, 0x00, 0xC0, 0x6F, 0x02, 0x00, 0xE8, +/* 00007EC0 */ 0x6F, 0x02, 0x00, 0x29, 0x70, 0x02, 0x00, 0x9C, 0x70, 0x02, 0x00, 0x9D, 0x70, 0x02, 0x00, 0xC3, +/* 00007ED0 */ 0x70, 0x02, 0x00, 0xF7, 0x70, 0x02, 0x00, 0x2D, 0x71, 0x02, 0x00, 0x72, 0x71, 0x02, 0x00, 0x73, +/* 00007EE0 */ 0x71, 0x02, 0x00, 0x95, 0x71, 0x02, 0x00, 0xC9, 0x71, 0x02, 0x00, 0xF5, 0x71, 0x02, 0x00, 0x23, +/* 00007EF0 */ 0x72, 0x02, 0x00, 0x53, 0x72, 0x02, 0x00, 0x7F, 0x72, 0x02, 0x00, 0xAD, 0x72, 0x02, 0x00, 0xDF, +/* 00007F00 */ 0x72, 0x02, 0x00, 0x11, 0x73, 0x02, 0x00, 0x4F, 0x73, 0x02, 0x00, 0x50, 0x73, 0x02, 0x00, 0x82, +/* 00007F10 */ 0x73, 0x02, 0x00, 0xC2, 0x73, 0x02, 0x00, 0x00, 0x74, 0x02, 0x00, 0x01, 0x74, 0x02, 0x00, 0x43, +/* 00007F20 */ 0x74, 0x02, 0x00, 0x44, 0x74, 0x02, 0x00, 0x57, 0x74, 0x02, 0x00, 0x73, 0x74, 0x02, 0x00, 0xCB, +/* 00007F30 */ 0x74, 0x02, 0x00, 0x45, 0x75, 0x02, 0x00, 0xEA, 0x75, 0x02, 0x00, 0x91, 0x76, 0x02, 0x00, 0xF9, +/* 00007F40 */ 0x76, 0x02, 0x00, 0x10, 0x77, 0x02, 0x00, 0x39, 0x77, 0x02, 0x00, 0x3A, 0x77, 0x02, 0x00, 0x50, +/* 00007F50 */ 0x77, 0x02, 0x00, 0x9F, 0x77, 0x02, 0x00, 0xE0, 0x77, 0x02, 0x00, 0xFE, 0x77, 0x02, 0x00, 0x28, +/* 00007F60 */ 0x78, 0x02, 0x00, 0x52, 0x78, 0x02, 0x00, 0x53, 0x78, 0x02, 0x00, 0xC1, 0x78, 0x02, 0x00, 0x17, +/* 00007F70 */ 0x79, 0x02, 0x00, 0x6B, 0x79, 0x02, 0x00, 0xD5, 0x79, 0x02, 0x00, 0xFD, 0x79, 0x02, 0x00, 0x0F, +/* 00007F80 */ 0x7A, 0x02, 0x00, 0x10, 0x7A, 0x02, 0x00, 0x34, 0x7A, 0x02, 0x00, 0x66, 0x7A, 0x02, 0x00, 0xE6, +/* 00007F90 */ 0x7A, 0x02, 0x00, 0xF8, 0x7A, 0x02, 0x00, 0xF9, 0x7A, 0x02, 0x00, 0x0F, 0x7B, 0x02, 0x00, 0x44, +/* 00007FA0 */ 0x7B, 0x02, 0x00, 0x84, 0x7B, 0x02, 0x00, 0xA2, 0x7B, 0x02, 0x00, 0xCC, 0x7B, 0x02, 0x00, 0xF6, +/* 00007FB0 */ 0x7B, 0x02, 0x00, 0xF7, 0x7B, 0x02, 0x00, 0x59, 0x7C, 0x02, 0x00, 0xDE, 0x7C, 0x02, 0x00, 0x43, +/* 00007FC0 */ 0x7D, 0x02, 0x00, 0x7E, 0x7D, 0x02, 0x00, 0x90, 0x7D, 0x02, 0x00, 0x91, 0x7D, 0x02, 0x00, 0xBE, +/* 00007FD0 */ 0x7D, 0x02, 0x00, 0x23, 0x7E, 0x02, 0x00, 0x24, 0x7E, 0x02, 0x00, 0xA6, 0x7E, 0x02, 0x00, 0xE1, +/* 00007FE0 */ 0x7E, 0x02, 0x00, 0x40, 0x7F, 0x02, 0x00, 0x52, 0x7F, 0x02, 0x00, 0x95, 0x7F, 0x02, 0x00, 0xA3, +/* 00007FF0 */ 0x7F, 0x02, 0x00, 0xA4, 0x7F, 0x02, 0x00, 0xFA, 0x7F, 0x02, 0x00, 0x58, 0x80, 0x02, 0x00, 0xA8, +/* 00008000 */ 0x80, 0x02, 0x00, 0xCB, 0x80, 0x02, 0x00, 0xF2, 0x80, 0x02, 0x00, 0x18, 0x81, 0x02, 0x00, 0x2E, +/* 00008010 */ 0x81, 0x02, 0x00, 0x2F, 0x81, 0x02, 0x00, 0xA4, 0x81, 0x02, 0x00, 0xEF, 0x81, 0x02, 0x00, 0x31, +/* 00008020 */ 0x82, 0x02, 0x00, 0x43, 0x82, 0x02, 0x00, 0x96, 0x82, 0x02, 0x00, 0xCE, 0x82, 0x02, 0x00, 0xF9, +/* 00008030 */ 0x82, 0x02, 0x00, 0x0B, 0x83, 0x02, 0x00, 0x0C, 0x83, 0x02, 0x00, 0x39, 0x83, 0x02, 0x00, 0x95, +/* 00008040 */ 0x83, 0x02, 0x00, 0x03, 0x84, 0x02, 0x00, 0x52, 0x84, 0x02, 0x00, 0x83, 0x84, 0x02, 0x00, 0xDE, +/* 00008050 */ 0x84, 0x02, 0x00, 0xFB, 0x84, 0x02, 0x00, 0x25, 0x85, 0x02, 0x00, 0x63, 0x85, 0x02, 0x00, 0xDD, +/* 00008060 */ 0x85, 0x02, 0x00, 0x38, 0x86, 0x02, 0x00, 0x4E, 0x86, 0x02, 0x00, 0x60, 0x86, 0x02, 0x00, 0x61, +/* 00008070 */ 0x86, 0x02, 0x00, 0x85, 0x86, 0x02, 0x00, 0xBF, 0x86, 0x02, 0x00, 0x31, 0x87, 0x02, 0x00, 0x43, +/* 00008080 */ 0x87, 0x02, 0x00, 0x44, 0x87, 0x02, 0x00, 0xA2, 0x87, 0x02, 0x00, 0xB0, 0x87, 0x02, 0x00, 0xB1, +/* 00008090 */ 0x87, 0x02, 0x00, 0x2E, 0x88, 0x02, 0x00, 0xBA, 0x88, 0x02, 0x00, 0x39, 0x89, 0x02, 0x00, 0xC2, +/* 000080A0 */ 0x89, 0x02, 0x00, 0xE7, 0x89, 0x02, 0x00, 0xF6, 0x89, 0x02, 0x00, 0x81, 0x8A, 0x02, 0x00, 0x07, +/* 000080B0 */ 0x8B, 0x02, 0x00, 0x91, 0x8B, 0x02, 0x00, 0xE5, 0x8B, 0x02, 0x00, 0xF4, 0x8B, 0x02, 0x00, 0x76, +/* 000080C0 */ 0x8C, 0x02, 0x00, 0xE7, 0x8C, 0x02, 0x00, 0x42, 0x8D, 0x02, 0x00, 0xAD, 0x8D, 0x02, 0x00, 0x27, +/* 000080D0 */ 0x8E, 0x02, 0x00, 0x78, 0x8E, 0x02, 0x00, 0x87, 0x8E, 0x02, 0x00, 0xFD, 0x8E, 0x02, 0x00, 0x0C, +/* 000080E0 */ 0x8F, 0x02, 0x00, 0x98, 0x8F, 0x02, 0x00, 0x21, 0x90, 0x02, 0x00, 0x6C, 0x90, 0x02, 0x00, 0x6D, +/* 000080F0 */ 0x90, 0x02, 0x00, 0xBD, 0x90, 0x02, 0x00, 0x5A, 0x91, 0x02, 0x00, 0xDF, 0x91, 0x02, 0x00, 0x08, +/* 00008100 */ 0x92, 0x02, 0x00, 0xB3, 0x92, 0x02, 0x00, 0xB4, 0x92, 0x02, 0x00, 0x04, 0x93, 0x02, 0x00, 0xA5, +/* 00008110 */ 0x93, 0x02, 0x00, 0x2A, 0x94, 0x02, 0x00, 0x53, 0x94, 0x02, 0x00, 0x0C, 0x95, 0x02, 0x00, 0x0D, +/* 00008120 */ 0x95, 0x02, 0x00, 0x5D, 0x95, 0x02, 0x00, 0xFE, 0x95, 0x02, 0x00, 0x83, 0x96, 0x02, 0x00, 0xAC, +/* 00008130 */ 0x96, 0x02, 0x00, 0x65, 0x97, 0x02, 0x00, 0x66, 0x97, 0x02, 0x00, 0x8D, 0x97, 0x02, 0x00, 0xE1, +/* 00008140 */ 0x97, 0x02, 0x00, 0x20, 0x98, 0x02, 0x00, 0x65, 0x98, 0x02, 0x00, 0x7B, 0x98, 0x02, 0x00, 0x7C, +/* 00008150 */ 0x98, 0x02, 0x00, 0xB3, 0x98, 0x02, 0x00, 0xE7, 0x98, 0x02, 0x00, 0x36, 0x99, 0x02, 0x00, 0x4C, +/* 00008160 */ 0x99, 0x02, 0x00, 0x4D, 0x99, 0x02, 0x00, 0x88, 0x99, 0x02, 0x00, 0xCE, 0x99, 0x02, 0x00, 0xCF, +/* 00008170 */ 0x99, 0x02, 0x00, 0x05, 0x9A, 0x02, 0x00, 0x44, 0x9A, 0x02, 0x00, 0x89, 0x9A, 0x02, 0x00, 0x9F, +/* 00008180 */ 0x9A, 0x02, 0x00, 0xA0, 0x9A, 0x02, 0x00, 0xEE, 0x9A, 0x02, 0x00, 0xEF, 0x9A, 0x02, 0x00, 0x55, +/* 00008190 */ 0x9B, 0x02, 0x00, 0x91, 0x9B, 0x02, 0x00, 0x92, 0x9B, 0x02, 0x00, 0xB2, 0x9B, 0x02, 0x00, 0xC4, +/* 000081A0 */ 0x9B, 0x02, 0x00, 0x0E, 0x9C, 0x02, 0x00, 0x0F, 0x9C, 0x02, 0x00, 0x37, 0x9C, 0x02, 0x00, 0x6B, +/* 000081B0 */ 0x9C, 0x02, 0x00, 0xD8, 0x9C, 0x02, 0x00, 0xEE, 0x9C, 0x02, 0x00, 0x35, 0x9D, 0x02, 0x00, 0x98, +/* 000081C0 */ 0x9D, 0x02, 0x00, 0x05, 0x9E, 0x02, 0x00, 0x1B, 0x9E, 0x02, 0x00, 0x1C, 0x9E, 0x02, 0x00, 0x6E, +/* 000081D0 */ 0x9E, 0x02, 0x00, 0xA3, 0x9E, 0x02, 0x00, 0xB9, 0x9E, 0x02, 0x00, 0xBA, 0x9E, 0x02, 0x00, 0xE9, +/* 000081E0 */ 0x9E, 0x02, 0x00, 0x17, 0x9F, 0x02, 0x00, 0x53, 0x9F, 0x02, 0x00, 0x70, 0x9F, 0x02, 0x00, 0x9F, +/* 000081F0 */ 0x9F, 0x02, 0x00, 0xB5, 0x9F, 0x02, 0x00, 0xB6, 0x9F, 0x02, 0x00, 0x0B, 0xA0, 0x02, 0x00, 0x1D, +/* 00008200 */ 0xA0, 0x02, 0x00, 0x70, 0xA0, 0x02, 0x00, 0x71, 0xA0, 0x02, 0x00, 0xB8, 0xA0, 0x02, 0x00, 0xB9, +/* 00008210 */ 0xA0, 0x02, 0x00, 0x56, 0xA1, 0x02, 0x00, 0xA0, 0xA1, 0x02, 0x00, 0x41, 0xA2, 0x02, 0x00, 0x42, +/* 00008220 */ 0xA2, 0x02, 0x00, 0x8D, 0xA2, 0x02, 0x00, 0xD4, 0xA2, 0x02, 0x00, 0x0C, 0xA3, 0x02, 0x00, 0x7D, +/* 00008230 */ 0xA3, 0x02, 0x00, 0x97, 0xA3, 0x02, 0x00, 0x98, 0xA3, 0x02, 0x00, 0xE3, 0xA3, 0x02, 0x00, 0x4A, +/* 00008240 */ 0xA4, 0x02, 0x00, 0xBB, 0xA4, 0x02, 0x00, 0xD5, 0xA4, 0x02, 0x00, 0xD6, 0xA4, 0x02, 0x00, 0x11, +/* 00008250 */ 0xA5, 0x02, 0x00, 0x4F, 0xA5, 0x02, 0x00, 0x63, 0xA5, 0x02, 0x00, 0x64, 0xA5, 0x02, 0x00, 0xB8, +/* 00008260 */ 0xA5, 0x02, 0x00, 0xF0, 0xA5, 0x02, 0x00, 0x28, 0xA6, 0x02, 0x00, 0xA2, 0xA6, 0x02, 0x00, 0xBC, +/* 00008270 */ 0xA6, 0x02, 0x00, 0x07, 0xA7, 0x02, 0x00, 0x6E, 0xA7, 0x02, 0x00, 0xE8, 0xA7, 0x02, 0x00, 0x02, +/* 00008280 */ 0xA8, 0x02, 0x00, 0x34, 0xA8, 0x02, 0x00, 0x6F, 0xA8, 0x02, 0x00, 0xC6, 0xA8, 0x02, 0x00, 0x2B, +/* 00008290 */ 0xA9, 0x02, 0x00, 0x6A, 0xA9, 0x02, 0x00, 0xA5, 0xA9, 0x02, 0x00, 0xE2, 0xA9, 0x02, 0x00, 0x17, +/* 000082A0 */ 0xAA, 0x02, 0x00, 0x4E, 0xAA, 0x02, 0x00, 0x87, 0xAA, 0x02, 0x00, 0xBC, 0xAA, 0x02, 0x00, 0xF3, +/* 000082B0 */ 0xAA, 0x02, 0x00, 0x2E, 0xAB, 0x02, 0x00, 0x69, 0xAB, 0x02, 0x00, 0xAF, 0xAB, 0x02, 0x00, 0xD0, +/* 000082C0 */ 0xAB, 0x02, 0x00, 0x0E, 0xAC, 0x02, 0x00, 0x80, 0xAC, 0x02, 0x00, 0x22, 0xAD, 0x02, 0x00, 0x5E, +/* 000082D0 */ 0xAD, 0x02, 0x00, 0x7C, 0xAD, 0x02, 0x00, 0xA6, 0xAD, 0x02, 0x00, 0xEE, 0xAD, 0x02, 0x00, 0x3B, +/* 000082E0 */ 0xAE, 0x02, 0x00, 0x4F, 0xAE, 0x02, 0x00, 0x50, 0xAE, 0x02, 0x00, 0xEE, 0xAE, 0x02, 0x00, 0xEF, +/* 000082F0 */ 0xAE, 0x02, 0x00, 0x16, 0xAF, 0x02, 0x00, 0x24, 0xAF, 0x02, 0x00, 0x2E, 0xAF, 0x02, 0x00, 0x7F, +/* 00008300 */ 0xAF, 0x02, 0x00, 0x99, 0xAF, 0x02, 0x00, 0xA3, 0xAF, 0x02, 0x00, 0xA4, 0xAF, 0x02, 0x00, 0xD5, +/* 00008310 */ 0xAF, 0x02, 0x00, 0xF4, 0xAF, 0x02, 0x00, 0x70, 0xB0, 0x02, 0x00, 0xF4, 0xB0, 0x02, 0x00, 0x7C, +/* 00008320 */ 0xB1, 0x02, 0x00, 0x0E, 0xB2, 0x02, 0x00, 0x14, 0xB2, 0x02, 0x00, 0x15, 0xB2, 0x02, 0x00, 0x2A, +/* 00008330 */ 0xB2, 0x02, 0x00, 0x2E, 0xB2, 0x02, 0x00, 0x00, 0xC7, 0x73, 0x0C, 0x00, 0x00, 0x00, 0x10, 0x08, +/* 00008340 */ 0x00, 0xA8, 0x41, 0xC0, 0x00, 0xFE, 0xD9, 0x02, 0x00, 0xFE, 0xBC, 0x01, 0xFE, 0xBC, 0x01, 0x01, +/* 00008350 */ 0x40, 0xFE, 0x00, 0x90, 0xFE, 0xBC, 0x01, 0xFF, 0x72, 0xB0, 0x02, 0x00, 0xFF, 0x72, 0xB0, 0x02, +/* 00008360 */ 0x00, 0x01, 0x04, 0x04, 0x04, 0x04, 0x03, 0x05, 0xFE, 0xDA, 0x02, 0x0A, 0x07, 0xA8, 0x00, 0xD6, +/* 00008370 */ 0x00, 0x04, 0x24, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x83, 0x00, 0x00, 0x7F, +/* 00008380 */ 0x1D, 0x08, 0xC1, 0x53, 0x5A, 0x4B, 0x04, 0x08, 0x01, 0xA2, 0x41, 0xD1, 0x00, 0x01, 0xFE, 0xDC, +/* 00008390 */ 0x01, 0xFE, 0xDC, 0x01, 0x5B, 0x40, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, 0xDC, 0x01, 0xFF, 0x4F, +/* 000083A0 */ 0xB0, 0x02, 0x00, 0xFF, 0x4F, 0xB0, 0x02, 0x00, 0x35, 0xFE, 0xDB, 0x02, 0xFE, 0x14, 0x02, 0xFE, +/* 000083B0 */ 0xDC, 0x02, 0xFE, 0xDD, 0x02, 0xFE, 0xDE, 0x02, 0xBB, 0x58, 0xFE, 0x11, 0x01, 0xFE, 0x39, 0x01, +/* 000083C0 */ 0xFE, 0x0B, 0x01, 0xFE, 0x5C, 0x01, 0x6B, 0x7F, 0xFE, 0xDF, 0x02, 0xD7, 0xFE, 0xE0, 0x02, 0xFE, +/* 000083D0 */ 0xE1, 0x02, 0xFE, 0xE2, 0x02, 0xFE, 0xE3, 0x02, 0xFE, 0xE4, 0x02, 0xFE, 0xE5, 0x02, 0xFE, 0xE6, +/* 000083E0 */ 0x02, 0xFE, 0xE7, 0x02, 0xFE, 0xE8, 0x02, 0xFE, 0xE9, 0x02, 0xFE, 0xEA, 0x02, 0xFE, 0xEB, 0x02, +/* 000083F0 */ 0xFE, 0xEC, 0x02, 0xFE, 0xED, 0x02, 0xFE, 0xEE, 0x02, 0xC1, 0xC4, 0xFE, 0xEF, 0x02, 0xFE, 0xF0, +/* 00008400 */ 0x02, 0xFE, 0xF1, 0x02, 0xFE, 0xF2, 0x02, 0xFE, 0xF4, 0x01, 0xFE, 0xF3, 0x01, 0xFE, 0xF3, 0x02, +/* 00008410 */ 0xFE, 0xF4, 0x02, 0xFE, 0xF5, 0x02, 0xFE, 0xF6, 0x02, 0xFE, 0xF7, 0x02, 0xFE, 0xF8, 0x02, 0xFE, +/* 00008420 */ 0x12, 0x02, 0xFE, 0xF9, 0x02, 0xFE, 0xFA, 0x02, 0xFE, 0xFB, 0x02, 0xFE, 0xFC, 0x02, 0xFE, 0xFD, +/* 00008430 */ 0x02, 0xFE, 0xFE, 0x02, 0xFE, 0xFF, 0x02, 0xFE, 0x00, 0x03, 0x1E, 0x53, 0x6B, 0x09, 0xFE, 0x9D, +/* 00008440 */ 0x03, 0xFE, 0x92, 0x03, 0x31, 0x16, 0xA0, 0xA0, 0xA0, 0xA0, 0x1B, 0x02, 0x68, 0x69, 0x6A, 0x6B, +/* 00008450 */ 0x08, 0x0B, 0x06, 0xFE, 0xFE, 0x02, 0x06, 0xFE, 0x01, 0x03, 0x06, 0xFE, 0x02, 0x03, 0x06, 0xFE, +/* 00008460 */ 0x03, 0x03, 0x06, 0xFE, 0x04, 0x03, 0x07, 0x06, 0xFE, 0x05, 0x03, 0x06, 0xFE, 0x06, 0x03, 0x06, +/* 00008470 */ 0xFE, 0x07, 0x03, 0x06, 0xFE, 0x08, 0x03, 0x06, 0xFE, 0x09, 0x03, 0x06, 0xFE, 0x0A, 0x03, 0x06, +/* 00008480 */ 0xFE, 0x0B, 0x03, 0x06, 0xFE, 0x0C, 0x03, 0x06, 0xFE, 0x0D, 0x03, 0x06, 0xFE, 0x0E, 0x03, 0x06, +/* 00008490 */ 0xFE, 0x0F, 0x03, 0x06, 0xFE, 0x10, 0x03, 0x06, 0xFE, 0x11, 0x03, 0x06, 0xFE, 0x12, 0x03, 0x06, +/* 000084A0 */ 0xFE, 0x13, 0x03, 0x06, 0xFE, 0x14, 0x03, 0x06, 0xFE, 0x15, 0x03, 0x06, 0xFE, 0x16, 0x03, 0x06, +/* 000084B0 */ 0xFE, 0x17, 0x03, 0x06, 0xFE, 0x18, 0x03, 0x06, 0xFE, 0x19, 0x03, 0x06, 0xFE, 0x1A, 0x03, 0x06, +/* 000084C0 */ 0xFE, 0x1B, 0x03, 0x06, 0xFE, 0x1C, 0x03, 0x06, 0xFE, 0x1D, 0x03, 0x06, 0xFE, 0x1E, 0x03, 0x06, +/* 000084D0 */ 0xFE, 0x1F, 0x03, 0x06, 0xFE, 0x20, 0x03, 0x06, 0xFE, 0x21, 0x03, 0x06, 0xFE, 0x22, 0x03, 0x06, +/* 000084E0 */ 0xFE, 0x23, 0x03, 0x06, 0xFE, 0x24, 0x03, 0x06, 0xFE, 0x25, 0x03, 0x06, 0xFE, 0x26, 0x03, 0x06, +/* 000084F0 */ 0xFE, 0x27, 0x03, 0x05, 0xFE, 0x28, 0x03, 0x06, 0xFE, 0x29, 0x03, 0x06, 0xFE, 0x2A, 0x03, 0x06, +/* 00008500 */ 0xFE, 0x2B, 0x03, 0x06, 0xFE, 0x2C, 0x03, 0x0C, 0x06, 0xFE, 0x2D, 0x03, 0x06, 0xFE, 0x2E, 0x03, +/* 00008510 */ 0x06, 0xFE, 0x2F, 0x03, 0x06, 0xFE, 0x30, 0x03, 0x06, 0xFE, 0x31, 0x03, 0x06, 0xFE, 0x32, 0x03, +/* 00008520 */ 0x05, 0xFE, 0x33, 0x03, 0x05, 0xFE, 0x34, 0x03, 0x05, 0xFE, 0x35, 0x03, 0x05, 0xFE, 0x36, 0x03, +/* 00008530 */ 0x06, 0xFE, 0x37, 0x03, 0x06, 0xFE, 0x38, 0x03, 0x06, 0xFE, 0x39, 0x03, 0x06, 0xFE, 0x3A, 0x03, +/* 00008540 */ 0x05, 0xFE, 0x3B, 0x03, 0x06, 0xFE, 0x3C, 0x03, 0x06, 0xFE, 0x3D, 0x03, 0x06, 0xFE, 0x3E, 0x03, +/* 00008550 */ 0x05, 0xFE, 0x3F, 0x03, 0x06, 0xFE, 0x40, 0x03, 0x06, 0xFE, 0x41, 0x03, 0x05, 0xFE, 0x42, 0x03, +/* 00008560 */ 0x06, 0xFE, 0x43, 0x03, 0x06, 0xFE, 0x44, 0x03, 0x05, 0xFE, 0x45, 0x03, 0x06, 0xFE, 0x46, 0x03, +/* 00008570 */ 0x06, 0xFE, 0x47, 0x03, 0x06, 0xFE, 0x48, 0x03, 0x06, 0xFE, 0x49, 0x03, 0x06, 0xFE, 0x4A, 0x03, +/* 00008580 */ 0x06, 0xFE, 0x4B, 0x03, 0x06, 0xFE, 0x4C, 0x03, 0xFE, 0xBB, 0x0F, 0x96, 0x32, 0x54, 0xA8, 0x62, +/* 00008590 */ 0xA8, 0x63, 0xA8, 0x67, 0xD6, 0x01, 0x55, 0x96, 0x02, 0x55, 0x4E, 0x5F, 0x4E, 0x61, 0x4E, 0x64, +/* 000085A0 */ 0xA8, 0x56, 0xA8, 0x57, 0x4E, 0x60, 0x4E, 0x65, 0x4E, 0x66, 0xA8, 0x58, 0xA8, 0x59, 0xA8, 0x5A, +/* 000085B0 */ 0xA8, 0x5B, 0xA8, 0x5C, 0xA8, 0x5D, 0xA8, 0x5E, 0x4E, 0x6D, 0x96, 0x33, 0x6D, 0x4E, 0x6D, 0x96, +/* 000085C0 */ 0x34, 0x6D, 0x4E, 0x6D, 0x96, 0x35, 0x6D, 0x4E, 0x6D, 0x96, 0x36, 0x6D, 0x5F, 0x6D, 0x53, 0x00, +/* 000085D0 */ 0x96, 0x03, 0x6D, 0x93, 0x03, 0x6D, 0x00, 0x00, 0x77, 0x03, 0x6D, 0x01, 0x93, 0x03, 0x6E, 0x00, +/* 000085E0 */ 0x00, 0x5F, 0x6E, 0x6E, 0x02, 0xAD, 0x6D, 0x0F, 0x02, 0x00, 0x6E, 0xAC, 0x6D, 0x96, 0x33, 0x6D, +/* 000085F0 */ 0x93, 0x03, 0x6D, 0x00, 0x00, 0x5F, 0x6D, 0x6D, 0x03, 0x45, 0x5F, 0x6D, 0x96, 0x34, 0x04, 0x93, +/* 00008600 */ 0x03, 0x6D, 0x00, 0x00, 0x5F, 0x6D, 0x6D, 0x04, 0x96, 0x04, 0x6D, 0x93, 0x03, 0x6D, 0x00, 0x00, +/* 00008610 */ 0x5F, 0x6D, 0x6D, 0x05, 0x96, 0x05, 0x6D, 0x93, 0x03, 0x6D, 0x00, 0x00, 0x5F, 0x6D, 0x6D, 0x06, +/* 00008620 */ 0x96, 0x06, 0x6D, 0xD6, 0x00, 0x6D, 0x96, 0x35, 0x6D, 0x93, 0x03, 0x6D, 0x00, 0x00, 0x5F, 0x6D, +/* 00008630 */ 0x6D, 0x07, 0x96, 0x07, 0x6D, 0x93, 0x03, 0x6D, 0x00, 0x00, 0x5F, 0x6D, 0x6D, 0x08, 0x96, 0x08, +/* 00008640 */ 0x6D, 0x93, 0x03, 0x6D, 0x00, 0x00, 0x5F, 0x6D, 0x6D, 0x09, 0x96, 0x09, 0x6D, 0x93, 0x03, 0x6D, +/* 00008650 */ 0x00, 0x00, 0x5F, 0x6D, 0x6D, 0x0A, 0x96, 0x0A, 0x6D, 0x93, 0x03, 0x6D, 0x00, 0x00, 0x5F, 0x6D, +/* 00008660 */ 0x6D, 0x0B, 0x96, 0x0B, 0x6D, 0x93, 0x03, 0x6D, 0x00, 0x00, 0x5F, 0x6D, 0x6D, 0x0C, 0x96, 0x0C, +/* 00008670 */ 0x6D, 0x93, 0x03, 0x6D, 0x00, 0x00, 0x5F, 0x6D, 0x6D, 0x0D, 0x96, 0x0D, 0x6D, 0x93, 0x03, 0x6D, +/* 00008680 */ 0x00, 0x00, 0x5F, 0x6D, 0x6D, 0x0E, 0x96, 0x0E, 0x6D, 0x93, 0x03, 0x6D, 0x00, 0x00, 0x5F, 0x6D, +/* 00008690 */ 0x6D, 0x0F, 0x96, 0x0F, 0x6D, 0x93, 0x04, 0x6D, 0x01, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, +/* 000086A0 */ 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x93, 0x03, 0x6F, +/* 000086B0 */ 0x00, 0x00, 0x5F, 0x6F, 0x6F, 0x10, 0x7B, 0x6F, 0x6E, 0x11, 0x93, 0x03, 0x6F, 0x00, 0x00, 0x5F, +/* 000086C0 */ 0x6F, 0x6F, 0x12, 0x7B, 0x6F, 0x6E, 0x13, 0x93, 0x03, 0x6F, 0x00, 0x00, 0x5F, 0x6F, 0x6F, 0x14, +/* 000086D0 */ 0x7B, 0x6F, 0x6E, 0x15, 0x93, 0x03, 0x6F, 0x00, 0x00, 0x5F, 0x6F, 0x6F, 0x16, 0x7B, 0x6F, 0x6E, +/* 000086E0 */ 0x17, 0x5A, 0x01, 0x6E, 0x00, 0x00, 0x5A, 0x02, 0x09, 0x00, 0x00, 0xF0, 0x03, 0x6D, 0x6D, 0x00, +/* 000086F0 */ 0x00, 0x96, 0x10, 0x6D, 0x93, 0x03, 0x6D, 0x00, 0x00, 0x5F, 0x6D, 0x6D, 0x18, 0x96, 0x11, 0x6D, +/* 00008700 */ 0x93, 0x03, 0x6D, 0x00, 0x00, 0x5F, 0x6D, 0x6D, 0x19, 0x96, 0x12, 0x6D, 0x93, 0x03, 0x6D, 0x00, +/* 00008710 */ 0x00, 0x5F, 0x6D, 0x6D, 0x1A, 0x96, 0x13, 0x6D, 0x93, 0x03, 0x6D, 0x00, 0x00, 0x5F, 0x6D, 0x6D, +/* 00008720 */ 0x1B, 0x96, 0x14, 0x6D, 0x93, 0x03, 0x6D, 0x00, 0x00, 0x5F, 0x6D, 0x6D, 0x1C, 0x96, 0x15, 0x6D, +/* 00008730 */ 0xD6, 0x02, 0x6D, 0x96, 0x16, 0x6D, 0x93, 0x03, 0x6D, 0x00, 0x00, 0x5F, 0x6D, 0x6D, 0x1D, 0x96, +/* 00008740 */ 0x17, 0x6D, 0x93, 0x03, 0x6D, 0x00, 0x00, 0x5F, 0x6D, 0x6D, 0x1E, 0x96, 0x18, 0x6D, 0x93, 0x03, +/* 00008750 */ 0x6D, 0x00, 0x00, 0x5F, 0x6D, 0x6D, 0x1F, 0x96, 0x19, 0x6D, 0x93, 0x03, 0x6D, 0x00, 0x00, 0x5F, +/* 00008760 */ 0x6D, 0x6D, 0x20, 0x96, 0x1A, 0x6D, 0x93, 0x03, 0x6D, 0x00, 0x00, 0x5F, 0x6D, 0x6D, 0x21, 0x96, +/* 00008770 */ 0x1B, 0x6D, 0x93, 0x03, 0x6D, 0x00, 0x00, 0x5F, 0x6D, 0x6D, 0x22, 0x96, 0x1C, 0x6D, 0x93, 0x03, +/* 00008780 */ 0x6D, 0x00, 0x00, 0x5F, 0x6D, 0x6D, 0x23, 0x96, 0x1D, 0x6D, 0x93, 0x03, 0x6D, 0x00, 0x00, 0x5F, +/* 00008790 */ 0x6D, 0x6D, 0x24, 0x96, 0x1E, 0x6D, 0x93, 0x03, 0x6D, 0x00, 0x00, 0x5F, 0x6D, 0x6D, 0x25, 0x96, +/* 000087A0 */ 0x1F, 0x6D, 0x93, 0x03, 0x6D, 0x00, 0x00, 0x5F, 0x6D, 0x6D, 0x26, 0x96, 0x20, 0x6D, 0x93, 0x03, +/* 000087B0 */ 0x6D, 0x00, 0x00, 0x5F, 0x6D, 0x6D, 0x27, 0x96, 0x21, 0x6D, 0xCE, 0x18, 0x00, 0x00, 0x00, 0x01, +/* 000087C0 */ 0x00, 0x00, 0x00, 0x6D, 0x00, 0x00, 0x00, 0xD9, 0x03, 0x6E, 0x6D, 0x7B, 0x6E, 0x6D, 0x28, 0xD9, +/* 000087D0 */ 0x04, 0x6E, 0x6D, 0x7B, 0x6E, 0x6D, 0x29, 0xD9, 0x05, 0x6E, 0x6D, 0x7B, 0x6E, 0x6D, 0x2A, 0xD9, +/* 000087E0 */ 0x06, 0x6E, 0x6D, 0x7B, 0x6E, 0x6D, 0x2B, 0xD9, 0x07, 0x6E, 0x6D, 0x7B, 0x6E, 0x6D, 0x2C, 0xD9, +/* 000087F0 */ 0x08, 0x6E, 0x6D, 0x7B, 0x6E, 0x6D, 0x2D, 0xD9, 0x09, 0x6E, 0x6D, 0x7B, 0x6E, 0x6D, 0x2E, 0xD9, +/* 00008800 */ 0x0A, 0x6E, 0x6D, 0x7B, 0x6E, 0x6D, 0x2F, 0xD9, 0x0B, 0x6E, 0x6D, 0x7B, 0x6E, 0x6D, 0x30, 0xD9, +/* 00008810 */ 0x0C, 0x6E, 0x6D, 0x7B, 0x6E, 0x6D, 0x31, 0xD9, 0x0D, 0x6E, 0x6D, 0x7B, 0x6E, 0x6D, 0x32, 0xD9, +/* 00008820 */ 0x0E, 0x6E, 0x6D, 0x7B, 0x6E, 0x6D, 0x33, 0xD9, 0x0F, 0x6E, 0x6D, 0x7B, 0x6E, 0x6D, 0x34, 0xD9, +/* 00008830 */ 0x10, 0x6E, 0x6D, 0x7B, 0x6E, 0x6D, 0x35, 0xD9, 0x11, 0x6E, 0x6D, 0x7B, 0x6E, 0x6D, 0x36, 0xD9, +/* 00008840 */ 0x12, 0x6E, 0x6D, 0x7B, 0x6E, 0x6D, 0x37, 0xD9, 0x13, 0x6E, 0x6D, 0x7B, 0x6E, 0x6D, 0x38, 0x93, +/* 00008850 */ 0x03, 0x6E, 0x00, 0x00, 0x5F, 0x6E, 0x6E, 0x39, 0x7B, 0x6E, 0x6D, 0x3A, 0xD9, 0x14, 0x6E, 0x6D, +/* 00008860 */ 0x7B, 0x6E, 0x6D, 0x3B, 0xD9, 0x15, 0x6E, 0x6D, 0x7B, 0x6E, 0x6D, 0x3C, 0x93, 0x03, 0x6E, 0x00, +/* 00008870 */ 0x00, 0x5F, 0x6E, 0x6E, 0x3D, 0x7B, 0x6E, 0x6D, 0x3E, 0xD9, 0x16, 0x6E, 0x6D, 0x7B, 0x6E, 0x6D, +/* 00008880 */ 0x3F, 0xD9, 0x17, 0x6E, 0x6D, 0x7B, 0x6E, 0x6D, 0x40, 0x93, 0x03, 0x6E, 0x00, 0x00, 0x5F, 0x6E, +/* 00008890 */ 0x6E, 0x41, 0x7B, 0x6E, 0x6D, 0x42, 0xD9, 0x18, 0x6E, 0x6D, 0x7B, 0x6E, 0x6D, 0x43, 0x93, 0x03, +/* 000088A0 */ 0x6E, 0x00, 0x00, 0x5F, 0x6E, 0x6E, 0x44, 0x7B, 0x6E, 0x6D, 0x45, 0x93, 0x03, 0x6E, 0x00, 0x00, +/* 000088B0 */ 0x5F, 0x6E, 0x6E, 0x46, 0x7B, 0x6E, 0x6D, 0x47, 0x93, 0x03, 0x6E, 0x00, 0x00, 0x5F, 0x6E, 0x6E, +/* 000088C0 */ 0x48, 0x7B, 0x6E, 0x6D, 0x49, 0x93, 0x03, 0x6E, 0x00, 0x00, 0x5F, 0x6E, 0x6E, 0x4A, 0x7B, 0x6E, +/* 000088D0 */ 0x6D, 0x4B, 0xD9, 0x19, 0x6E, 0x6D, 0x7B, 0x6E, 0x6D, 0x4C, 0xD9, 0x1A, 0x6E, 0x6D, 0x7B, 0x6E, +/* 000088E0 */ 0x6D, 0x4D, 0xD9, 0x1B, 0x6E, 0x6D, 0x7B, 0x6E, 0x6D, 0x4E, 0x96, 0x36, 0x6D, 0x93, 0x33, 0x6D, +/* 000088F0 */ 0x02, 0x00, 0x0E, 0x38, 0x04, 0x6D, 0xE0, 0x00, 0x18, 0x03, 0xB9, 0x6D, 0x00, 0x01, 0x66, 0x01, +/* 00008900 */ 0x2B, 0x56, 0x6D, 0x95, 0x00, 0x02, 0x56, 0x01, 0x66, 0x01, 0x2D, 0x57, 0x6D, 0x95, 0x00, 0x03, +/* 00008910 */ 0x57, 0x4E, 0x6D, 0x95, 0x00, 0x04, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x05, 0x6D, 0x4E, 0x6D, 0x95, +/* 00008920 */ 0x00, 0x06, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x07, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x08, 0x6D, 0x4E, +/* 00008930 */ 0x6D, 0x95, 0x00, 0x09, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x0A, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x0B, +/* 00008940 */ 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x0C, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x0D, 0x6D, 0x4E, 0x6D, 0x95, +/* 00008950 */ 0x00, 0x0E, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x0F, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x10, 0x6D, 0x4E, +/* 00008960 */ 0x6D, 0x95, 0x00, 0x11, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x12, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x13, +/* 00008970 */ 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x14, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x15, 0x6D, 0x4E, 0x6D, 0x95, +/* 00008980 */ 0x00, 0x16, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x17, 0x6D, 0xA8, 0x6D, 0x95, 0x00, 0x04, 0x6D, 0xB9, +/* 00008990 */ 0x6E, 0x00, 0x01, 0x66, 0x01, 0x1C, 0x6D, 0x6E, 0x95, 0x00, 0x05, 0x6D, 0xB9, 0x6E, 0x00, 0x01, +/* 000089A0 */ 0x66, 0x01, 0x1D, 0x6D, 0x6E, 0x96, 0x22, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x1E, 0x6D, +/* 000089B0 */ 0x6E, 0x96, 0x23, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x1F, 0x6D, 0x6E, 0x95, 0x00, 0x06, +/* 000089C0 */ 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x20, 0x6D, 0x6E, 0x95, 0x00, 0x07, 0x6D, 0xB9, 0x6E, +/* 000089D0 */ 0x00, 0x01, 0x66, 0x01, 0x21, 0x6D, 0x6E, 0x95, 0x00, 0x08, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, +/* 000089E0 */ 0x01, 0x22, 0x6D, 0x6E, 0x95, 0x00, 0x09, 0x6D, 0x91, 0x00, 0x09, 0x6D, 0x03, 0x00, 0x95, 0x00, +/* 000089F0 */ 0x0A, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x23, 0x6D, 0x6E, 0x95, 0x00, 0x0B, 0x6D, 0xB9, +/* 00008A00 */ 0x6E, 0x00, 0x01, 0x66, 0x01, 0x24, 0x6D, 0x6E, 0x95, 0x00, 0x0C, 0x6D, 0x93, 0x35, 0x6D, 0x04, +/* 00008A10 */ 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0xCE, 0xA0, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, +/* 00008A20 */ 0x6E, 0x00, 0x00, 0x00, 0xB9, 0x70, 0x00, 0x01, 0x6A, 0x01, 0x25, 0x6F, 0x70, 0x6E, 0x7B, 0x6F, +/* 00008A30 */ 0x6E, 0x4F, 0xB9, 0x70, 0x00, 0x01, 0x6A, 0x01, 0x26, 0x6F, 0x70, 0x6E, 0x7B, 0x6F, 0x6E, 0x50, +/* 00008A40 */ 0xB9, 0x70, 0x00, 0x01, 0x6A, 0x01, 0x27, 0x6F, 0x70, 0x6E, 0x7B, 0x6F, 0x6E, 0x51, 0xB9, 0x70, +/* 00008A50 */ 0x00, 0x01, 0x6A, 0x01, 0x28, 0x6F, 0x70, 0x6E, 0x7B, 0x6F, 0x6E, 0x52, 0xB9, 0x70, 0x00, 0x01, +/* 00008A60 */ 0x6A, 0x01, 0x29, 0x6F, 0x70, 0x6E, 0x7B, 0x6F, 0x6E, 0x53, 0xB9, 0x70, 0x00, 0x01, 0x6A, 0x01, +/* 00008A70 */ 0x2A, 0x6F, 0x70, 0x6E, 0x7B, 0x6F, 0x6E, 0x54, 0x5A, 0x01, 0x6E, 0x01, 0x00, 0xF0, 0x02, 0x6D, +/* 00008A80 */ 0x6D, 0x01, 0x00, 0x96, 0x24, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x2C, 0x6D, 0x6E, 0x95, +/* 00008A90 */ 0x00, 0x0D, 0x6D, 0xA8, 0x6D, 0x95, 0x00, 0x0E, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x2E, +/* 00008AA0 */ 0x6D, 0x6E, 0x07, 0x01, 0x00, 0x59, 0x00, 0x02, 0xF0, 0x01, 0x6D, 0x6D, 0x02, 0x00, 0x95, 0x00, +/* 00008AB0 */ 0x0F, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x2F, 0x6D, 0x6E, 0x95, 0x00, 0x10, 0x6D, 0xB9, +/* 00008AC0 */ 0x6E, 0x00, 0x01, 0x66, 0x01, 0x30, 0x6D, 0x6E, 0x95, 0x00, 0x11, 0x6D, 0xB9, 0x6E, 0x00, 0x01, +/* 00008AD0 */ 0x66, 0x01, 0x31, 0x6D, 0x6E, 0x95, 0x00, 0x12, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x32, +/* 00008AE0 */ 0x6D, 0x6E, 0x95, 0x00, 0x13, 0x6D, 0x91, 0x00, 0x13, 0x6D, 0x05, 0x00, 0x95, 0x00, 0x14, 0x6D, +/* 00008AF0 */ 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x33, 0x6D, 0x6E, 0x95, 0x00, 0x15, 0x6D, 0xB9, 0x6E, 0x00, +/* 00008B00 */ 0x01, 0x66, 0x01, 0x34, 0x6D, 0x6E, 0x95, 0x00, 0x16, 0x6D, 0x93, 0x32, 0x6D, 0x06, 0x00, 0x14, +/* 00008B10 */ 0x03, 0x00, 0x6D, 0x2C, 0x09, 0x72, 0x00, 0x91, 0x00, 0x06, 0x6D, 0x07, 0x00, 0x07, 0x03, 0x00, +/* 00008B20 */ 0x59, 0x00, 0x02, 0x5A, 0x01, 0x2D, 0x03, 0x00, 0xB9, 0x6F, 0x00, 0x01, 0x66, 0x01, 0x35, 0x6E, +/* 00008B30 */ 0x6F, 0x5A, 0x02, 0x6E, 0x03, 0x00, 0xF0, 0x03, 0x6D, 0x6D, 0x03, 0x00, 0x45, 0x60, 0x6D, 0x93, +/* 00008B40 */ 0x36, 0x6E, 0x08, 0x00, 0x6D, 0x6D, 0x6E, 0x55, 0x07, 0x04, 0x00, 0x59, 0x00, 0x6E, 0x93, 0x07, +/* 00008B50 */ 0x6F, 0x09, 0x00, 0x5A, 0x01, 0x6F, 0x04, 0x00, 0x5A, 0x02, 0x2E, 0x04, 0x00, 0xCE, 0xC0, 0x00, +/* 00008B60 */ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x00, 0x00, 0x7B, 0x60, 0x6F, 0x56, 0x7B, 0x03, +/* 00008B70 */ 0x6F, 0x57, 0x7B, 0x32, 0x6F, 0x58, 0x7B, 0x03, 0x6F, 0x59, 0x5A, 0x03, 0x6F, 0x04, 0x00, 0xF4, +/* 00008B80 */ 0x04, 0xFF, 0x6D, 0x55, 0x00, 0x00, 0x00, 0x04, 0x00, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x36, +/* 00008B90 */ 0x6D, 0x6E, 0x95, 0x00, 0x17, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x37, 0x6D, 0x6E, 0x07, +/* 00008BA0 */ 0x01, 0x00, 0x59, 0x00, 0x02, 0xF0, 0x01, 0x6D, 0x6D, 0x05, 0x00, 0x45, 0x61, 0x6D, 0xB9, 0x6E, +/* 00008BB0 */ 0x00, 0x01, 0x66, 0x01, 0x38, 0x6D, 0x6E, 0x07, 0x01, 0x00, 0x59, 0x00, 0x02, 0xF0, 0x01, 0x6D, +/* 00008BC0 */ 0x6D, 0x06, 0x00, 0x45, 0x62, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x39, 0x6D, 0x6E, 0x07, +/* 00008BD0 */ 0x01, 0x00, 0x59, 0x00, 0x02, 0xF0, 0x01, 0x6D, 0x6D, 0x07, 0x00, 0x45, 0x63, 0x6D, 0xB9, 0x6E, +/* 00008BE0 */ 0x00, 0x01, 0x66, 0x01, 0x3A, 0x6D, 0x6E, 0x07, 0x01, 0x00, 0x59, 0x00, 0x02, 0xF0, 0x01, 0x6D, +/* 00008BF0 */ 0x6D, 0x08, 0x00, 0x45, 0x64, 0x6D, 0x93, 0x32, 0x6D, 0x06, 0x00, 0x14, 0x03, 0x00, 0x6D, 0x2C, +/* 00008C00 */ 0x09, 0x28, 0x01, 0x93, 0x36, 0x6E, 0x08, 0x00, 0x6D, 0x6D, 0x6E, 0x5A, 0x07, 0x04, 0x00, 0x59, +/* 00008C10 */ 0x00, 0x6E, 0x93, 0x07, 0x6F, 0x09, 0x00, 0x5A, 0x01, 0x6F, 0x09, 0x00, 0x5A, 0x02, 0x34, 0x09, +/* 00008C20 */ 0x00, 0xCE, 0xD8, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x00, 0x00, 0x7B, 0x61, +/* 00008C30 */ 0x6F, 0x5B, 0x7B, 0x03, 0x6F, 0x5C, 0x7B, 0x32, 0x6F, 0x5D, 0x7B, 0x03, 0x6F, 0x5E, 0x5A, 0x03, +/* 00008C40 */ 0x6F, 0x09, 0x00, 0xF4, 0x04, 0xFF, 0x6D, 0x5A, 0x00, 0x00, 0x00, 0x09, 0x00, 0x93, 0x36, 0x6E, +/* 00008C50 */ 0x08, 0x00, 0x6D, 0x6D, 0x6E, 0x5F, 0x07, 0x04, 0x00, 0x59, 0x00, 0x6E, 0x93, 0x07, 0x6F, 0x09, +/* 00008C60 */ 0x00, 0x5A, 0x01, 0x6F, 0x0A, 0x00, 0x5A, 0x02, 0x35, 0x0A, 0x00, 0xCE, 0xF0, 0x00, 0x00, 0x00, +/* 00008C70 */ 0x05, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x00, 0x00, 0x7B, 0x62, 0x6F, 0x60, 0x7B, 0x03, 0x6F, 0x61, +/* 00008C80 */ 0x7B, 0x32, 0x6F, 0x62, 0x7B, 0x03, 0x6F, 0x63, 0x5A, 0x03, 0x6F, 0x0A, 0x00, 0xF4, 0x04, 0xFF, +/* 00008C90 */ 0x6D, 0x5F, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x93, 0x36, 0x6E, 0x08, 0x00, 0x6D, 0x6D, 0x6E, 0x64, +/* 00008CA0 */ 0x07, 0x04, 0x00, 0x59, 0x00, 0x6E, 0x93, 0x07, 0x6F, 0x09, 0x00, 0x5A, 0x01, 0x6F, 0x0B, 0x00, +/* 00008CB0 */ 0x5A, 0x02, 0x36, 0x0B, 0x00, 0xCE, 0x08, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x6F, 0x00, +/* 00008CC0 */ 0x00, 0x00, 0x7B, 0x63, 0x6F, 0x65, 0x7B, 0x03, 0x6F, 0x66, 0x7B, 0x32, 0x6F, 0x67, 0x7B, 0x03, +/* 00008CD0 */ 0x6F, 0x68, 0x5A, 0x03, 0x6F, 0x0B, 0x00, 0xF4, 0x04, 0xFF, 0x6D, 0x64, 0x00, 0x00, 0x00, 0x0B, +/* 00008CE0 */ 0x00, 0x93, 0x36, 0x6E, 0x08, 0x00, 0x6D, 0x6D, 0x6E, 0x69, 0x07, 0x04, 0x00, 0x59, 0x00, 0x6E, +/* 00008CF0 */ 0x93, 0x07, 0x6F, 0x09, 0x00, 0x5A, 0x01, 0x6F, 0x0C, 0x00, 0x5A, 0x02, 0x37, 0x0C, 0x00, 0xCE, +/* 00008D00 */ 0x20, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x00, 0x00, 0x7B, 0x64, 0x6F, 0x6A, +/* 00008D10 */ 0x7B, 0x03, 0x6F, 0x6B, 0x7B, 0x32, 0x6F, 0x6C, 0x7B, 0x03, 0x6F, 0x6D, 0x5A, 0x03, 0x6F, 0x0C, +/* 00008D20 */ 0x00, 0xF4, 0x04, 0xFF, 0x6D, 0x69, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x09, 0x14, 0x08, 0xE0, 0x00, +/* 00008D30 */ 0x1A, 0x06, 0xB9, 0x6D, 0x00, 0x01, 0x66, 0x01, 0x48, 0x58, 0x6D, 0x95, 0x00, 0x02, 0x58, 0x01, +/* 00008D40 */ 0x66, 0x01, 0x49, 0x59, 0x6D, 0x95, 0x00, 0x03, 0x59, 0x01, 0x66, 0x01, 0x4A, 0x5A, 0x6D, 0x95, +/* 00008D50 */ 0x00, 0x04, 0x5A, 0x01, 0x66, 0x01, 0x4B, 0x5B, 0x6D, 0x95, 0x00, 0x05, 0x5B, 0x01, 0x66, 0x01, +/* 00008D60 */ 0x4C, 0x5C, 0x6D, 0x95, 0x00, 0x06, 0x5C, 0x01, 0x66, 0x01, 0x4D, 0x5D, 0x6D, 0x95, 0x00, 0x07, +/* 00008D70 */ 0x5D, 0x01, 0x66, 0x01, 0x4E, 0x5E, 0x6D, 0x95, 0x00, 0x08, 0x5E, 0x4E, 0x6D, 0x95, 0x00, 0x09, +/* 00008D80 */ 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x0A, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x0B, 0x6D, 0x4E, 0x6D, 0x95, +/* 00008D90 */ 0x00, 0x0C, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x0D, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x0E, 0x6D, 0x4E, +/* 00008DA0 */ 0x6D, 0x95, 0x00, 0x0F, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x10, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x11, +/* 00008DB0 */ 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x12, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x13, 0x6D, 0x4E, 0x6D, 0x95, +/* 00008DC0 */ 0x00, 0x14, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x15, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x16, 0x6D, 0x4E, +/* 00008DD0 */ 0x6D, 0x95, 0x00, 0x17, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x18, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x19, +/* 00008DE0 */ 0x6D, 0x93, 0x03, 0x6D, 0x00, 0x00, 0x5F, 0x6D, 0x6D, 0x6E, 0xA8, 0x6E, 0x14, 0x03, 0x00, 0x6D, +/* 00008DF0 */ 0x6E, 0x09, 0x17, 0x00, 0x93, 0x03, 0x6D, 0x00, 0x00, 0x93, 0x02, 0x6E, 0x0A, 0x00, 0x07, 0x01, +/* 00008E00 */ 0x00, 0xC5, 0x01, 0x6E, 0x6E, 0x0D, 0x00, 0x77, 0x6E, 0x6D, 0x6F, 0x93, 0x03, 0x6D, 0x00, 0x00, +/* 00008E10 */ 0x5F, 0x6D, 0x6D, 0x70, 0xA8, 0x6E, 0x14, 0x03, 0x00, 0x6D, 0x6E, 0x09, 0x17, 0x00, 0x93, 0x03, +/* 00008E20 */ 0x6D, 0x00, 0x00, 0x93, 0x02, 0x6E, 0x0A, 0x00, 0x07, 0x01, 0x00, 0xC5, 0x01, 0x6E, 0x6E, 0x0E, +/* 00008E30 */ 0x00, 0x77, 0x6E, 0x6D, 0x71, 0xA8, 0x6D, 0x95, 0x00, 0x09, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, +/* 00008E40 */ 0x01, 0x3B, 0x6D, 0x6E, 0x95, 0x00, 0x0A, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x3C, 0x6D, +/* 00008E50 */ 0x6E, 0x95, 0x00, 0x0B, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x3D, 0x6D, 0x6E, 0x95, 0x00, +/* 00008E60 */ 0x0C, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x3E, 0x6D, 0x6E, 0x96, 0x25, 0x6D, 0xB9, 0x6E, +/* 00008E70 */ 0x00, 0x01, 0x66, 0x01, 0x3F, 0x6D, 0x6E, 0x96, 0x22, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, +/* 00008E80 */ 0x40, 0x6D, 0x6E, 0x96, 0x23, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x41, 0x6D, 0x6E, 0x96, +/* 00008E90 */ 0x26, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x42, 0x6D, 0x6E, 0x96, 0x27, 0x6D, 0xB9, 0x6E, +/* 00008EA0 */ 0x00, 0x01, 0x66, 0x01, 0x43, 0x6D, 0x6E, 0x96, 0x28, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, +/* 00008EB0 */ 0x44, 0x6D, 0x6E, 0x96, 0x29, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x45, 0x6D, 0x6E, 0x96, +/* 00008EC0 */ 0x2A, 0x6D, 0xA8, 0x6D, 0x95, 0x00, 0x0D, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x46, 0x6D, +/* 00008ED0 */ 0x6E, 0x96, 0x2B, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x47, 0x6D, 0x6E, 0x07, 0x01, 0x00, +/* 00008EE0 */ 0x59, 0x00, 0x02, 0xF0, 0x01, 0x6D, 0x6D, 0x0F, 0x00, 0x96, 0x24, 0x6D, 0xA8, 0x6D, 0x95, 0x00, +/* 00008EF0 */ 0x0E, 0x6D, 0xA8, 0x6D, 0x95, 0x00, 0x0F, 0x6D, 0xA8, 0x6D, 0x95, 0x00, 0x10, 0x6D, 0xA8, 0x6D, +/* 00008F00 */ 0x95, 0x00, 0x11, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x4F, 0x6D, 0x6E, 0x96, 0x2C, 0x6D, +/* 00008F10 */ 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x50, 0x6D, 0x6E, 0x96, 0x2D, 0x6D, 0xB9, 0x6E, 0x00, 0x01, +/* 00008F20 */ 0x66, 0x01, 0x51, 0x6D, 0x6E, 0x96, 0x2E, 0x6D, 0x93, 0x04, 0x6D, 0x01, 0x00, 0x07, 0x03, 0x00, +/* 00008F30 */ 0x59, 0x00, 0x02, 0xCD, 0x6E, 0x5A, 0x01, 0x6E, 0x10, 0x00, 0x5A, 0x02, 0x09, 0x10, 0x00, 0xF0, +/* 00008F40 */ 0x03, 0x6D, 0x6D, 0x10, 0x00, 0x45, 0x65, 0x6D, 0x93, 0x03, 0x6E, 0x00, 0x00, 0x6D, 0x6D, 0x6E, +/* 00008F50 */ 0x72, 0x07, 0x03, 0x00, 0x59, 0x00, 0x6E, 0x5A, 0x01, 0x65, 0x11, 0x00, 0x93, 0x04, 0x6F, 0x01, +/* 00008F60 */ 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0xCE, 0x38, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, +/* 00008F70 */ 0x70, 0x00, 0x00, 0x00, 0x7B, 0x39, 0x70, 0x73, 0x5A, 0x01, 0x70, 0x12, 0x00, 0x5A, 0x02, 0x09, +/* 00008F80 */ 0x12, 0x00, 0xF0, 0x03, 0x6F, 0x6F, 0x12, 0x00, 0x5A, 0x02, 0x6F, 0x11, 0x00, 0xF4, 0x03, 0xFF, +/* 00008F90 */ 0x6D, 0x72, 0x00, 0x00, 0x00, 0x11, 0x00, 0x95, 0x00, 0x12, 0x3A, 0x93, 0x06, 0x6D, 0x0B, 0x00, +/* 00008FA0 */ 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x93, 0x1A, 0x6E, 0x0C, 0x00, 0x5A, 0x01, 0x6E, 0x13, 0x00, +/* 00008FB0 */ 0x93, 0x23, 0x6E, 0x0D, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x91, 0x00, 0x12, 0x6F, 0x0E, +/* 00008FC0 */ 0x00, 0x5A, 0x01, 0x6F, 0x14, 0x00, 0xB9, 0x70, 0x00, 0x01, 0x66, 0x01, 0x52, 0x6F, 0x70, 0x5A, +/* 00008FD0 */ 0x02, 0x6F, 0x14, 0x00, 0xF0, 0x03, 0x6E, 0x6E, 0x14, 0x00, 0x5A, 0x02, 0x6E, 0x13, 0x00, 0x5A, +/* 00008FE0 */ 0x03, 0x65, 0x13, 0x00, 0xF0, 0x04, 0x6D, 0x6D, 0x13, 0x00, 0x95, 0x00, 0x13, 0x6D, 0x95, 0x00, +/* 00008FF0 */ 0x14, 0x3B, 0x93, 0x06, 0x6D, 0x0B, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x93, 0x1A, 0x6E, +/* 00009000 */ 0x0C, 0x00, 0x5A, 0x01, 0x6E, 0x15, 0x00, 0x93, 0x23, 0x6E, 0x0D, 0x00, 0x07, 0x03, 0x00, 0x59, +/* 00009010 */ 0x00, 0x02, 0x91, 0x00, 0x14, 0x6F, 0x0F, 0x00, 0x5A, 0x01, 0x6F, 0x16, 0x00, 0xB9, 0x70, 0x00, +/* 00009020 */ 0x01, 0x66, 0x01, 0x53, 0x6F, 0x70, 0x5A, 0x02, 0x6F, 0x16, 0x00, 0xF0, 0x03, 0x6E, 0x6E, 0x16, +/* 00009030 */ 0x00, 0x5A, 0x02, 0x6E, 0x15, 0x00, 0x5A, 0x03, 0x65, 0x15, 0x00, 0xF0, 0x04, 0x6D, 0x6D, 0x15, +/* 00009040 */ 0x00, 0x95, 0x00, 0x15, 0x6D, 0x95, 0x00, 0x16, 0x3C, 0x93, 0x06, 0x6D, 0x0B, 0x00, 0x07, 0x04, +/* 00009050 */ 0x00, 0x59, 0x00, 0x02, 0x93, 0x1A, 0x6E, 0x0C, 0x00, 0x5A, 0x01, 0x6E, 0x17, 0x00, 0x93, 0x23, +/* 00009060 */ 0x6E, 0x0D, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x91, 0x00, 0x16, 0x6F, 0x10, 0x00, 0x5A, +/* 00009070 */ 0x01, 0x6F, 0x18, 0x00, 0xB9, 0x70, 0x00, 0x01, 0x66, 0x01, 0x54, 0x6F, 0x70, 0x5A, 0x02, 0x6F, +/* 00009080 */ 0x18, 0x00, 0xF0, 0x03, 0x6E, 0x6E, 0x18, 0x00, 0x5A, 0x02, 0x6E, 0x17, 0x00, 0x5A, 0x03, 0x65, +/* 00009090 */ 0x17, 0x00, 0xF0, 0x04, 0x6D, 0x6D, 0x17, 0x00, 0x95, 0x00, 0x17, 0x6D, 0x95, 0x00, 0x18, 0x2D, +/* 000090A0 */ 0x93, 0x06, 0x6D, 0x0B, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x93, 0x1A, 0x6E, 0x0C, 0x00, +/* 000090B0 */ 0x5A, 0x01, 0x6E, 0x19, 0x00, 0x93, 0x23, 0x6E, 0x0D, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, +/* 000090C0 */ 0x91, 0x00, 0x18, 0x6F, 0x11, 0x00, 0x5A, 0x01, 0x6F, 0x1A, 0x00, 0xB9, 0x70, 0x00, 0x01, 0x66, +/* 000090D0 */ 0x01, 0x55, 0x6F, 0x70, 0x5A, 0x02, 0x6F, 0x1A, 0x00, 0xF0, 0x03, 0x6E, 0x6E, 0x1A, 0x00, 0x5A, +/* 000090E0 */ 0x02, 0x6E, 0x19, 0x00, 0x5A, 0x03, 0x65, 0x19, 0x00, 0xF0, 0x04, 0x6D, 0x6D, 0x19, 0x00, 0x45, +/* 000090F0 */ 0x66, 0x6D, 0x93, 0x16, 0x6D, 0x12, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x91, 0x00, 0x13, +/* 00009100 */ 0x6E, 0x13, 0x00, 0x5A, 0x01, 0x6E, 0x1B, 0x00, 0x5A, 0x02, 0x3D, 0x1B, 0x00, 0xCE, 0x44, 0x01, +/* 00009110 */ 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x7B, 0x3E, 0x6E, 0x74, 0x5A, 0x03, +/* 00009120 */ 0x6E, 0x1B, 0x00, 0xF0, 0x04, 0xFF, 0x6D, 0x1B, 0x00, 0x93, 0x16, 0x6D, 0x12, 0x00, 0x07, 0x04, +/* 00009130 */ 0x00, 0x59, 0x00, 0x02, 0x91, 0x00, 0x15, 0x6E, 0x14, 0x00, 0x5A, 0x01, 0x6E, 0x1C, 0x00, 0x5A, +/* 00009140 */ 0x02, 0x3D, 0x1C, 0x00, 0xCE, 0x50, 0x01, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x00, +/* 00009150 */ 0x00, 0x7B, 0x3E, 0x6E, 0x75, 0x5A, 0x03, 0x6E, 0x1C, 0x00, 0xF0, 0x04, 0xFF, 0x6D, 0x1C, 0x00, +/* 00009160 */ 0x93, 0x16, 0x6D, 0x12, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x91, 0x00, 0x17, 0x6E, 0x15, +/* 00009170 */ 0x00, 0x5A, 0x01, 0x6E, 0x1D, 0x00, 0x5A, 0x02, 0x3D, 0x1D, 0x00, 0xCE, 0x5C, 0x01, 0x00, 0x00, +/* 00009180 */ 0x0B, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x7B, 0x3E, 0x6E, 0x76, 0x5A, 0x03, 0x6E, 0x1D, +/* 00009190 */ 0x00, 0xF0, 0x04, 0xFF, 0x6D, 0x1D, 0x00, 0x93, 0x16, 0x6D, 0x12, 0x00, 0x07, 0x04, 0x00, 0x59, +/* 000091A0 */ 0x00, 0x02, 0x5A, 0x01, 0x66, 0x1E, 0x00, 0x5A, 0x02, 0x3D, 0x1E, 0x00, 0xCE, 0x68, 0x01, 0x00, +/* 000091B0 */ 0x00, 0x0C, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x7B, 0x2E, 0x6E, 0x77, 0x5A, 0x03, 0x6E, +/* 000091C0 */ 0x1E, 0x00, 0xF0, 0x04, 0xFF, 0x6D, 0x1E, 0x00, 0x93, 0x04, 0x6D, 0x01, 0x00, 0x07, 0x03, 0x00, +/* 000091D0 */ 0x59, 0x00, 0x02, 0xCE, 0x74, 0x01, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x00, 0x00, +/* 000091E0 */ 0x93, 0x04, 0x6F, 0x01, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0xCE, 0xA0, 0x01, 0x00, 0x00, +/* 000091F0 */ 0x0E, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x7B, 0x41, 0x70, 0x78, 0x5A, 0x01, 0x70, 0x20, +/* 00009200 */ 0x00, 0x5A, 0x02, 0x09, 0x20, 0x00, 0xF0, 0x03, 0x6F, 0x6F, 0x20, 0x00, 0x7B, 0x6F, 0x6E, 0x79, +/* 00009210 */ 0x93, 0x04, 0x6F, 0x01, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0xCE, 0xAC, 0x01, 0x00, 0x00, +/* 00009220 */ 0x0F, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x7B, 0x41, 0x70, 0x7A, 0x5A, 0x01, 0x70, 0x21, +/* 00009230 */ 0x00, 0x5A, 0x02, 0x09, 0x21, 0x00, 0xF0, 0x03, 0x6F, 0x6F, 0x21, 0x00, 0x7B, 0x6F, 0x6E, 0x7B, +/* 00009240 */ 0x93, 0x04, 0x6F, 0x01, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0xCE, 0xB8, 0x01, 0x00, 0x00, +/* 00009250 */ 0x10, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x7B, 0x45, 0x70, 0x7C, 0x5A, 0x01, 0x70, 0x22, +/* 00009260 */ 0x00, 0x5A, 0x02, 0x09, 0x22, 0x00, 0xF0, 0x03, 0x6F, 0x6F, 0x22, 0x00, 0x7B, 0x6F, 0x6E, 0x7D, +/* 00009270 */ 0x93, 0x04, 0x6F, 0x01, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0xCE, 0xC4, 0x01, 0x00, 0x00, +/* 00009280 */ 0x11, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x7B, 0x48, 0x70, 0x7E, 0x5A, 0x01, 0x70, 0x23, +/* 00009290 */ 0x00, 0x5A, 0x02, 0x09, 0x23, 0x00, 0xF0, 0x03, 0x6F, 0x6F, 0x23, 0x00, 0x7B, 0x6F, 0x6E, 0x7F, +/* 000092A0 */ 0x93, 0x04, 0x6F, 0x01, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0xCE, 0xD0, 0x01, 0x00, 0x00, +/* 000092B0 */ 0x12, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x7B, 0x4B, 0x70, 0x80, 0x7B, 0x48, 0x70, 0x81, +/* 000092C0 */ 0x7B, 0x4D, 0x70, 0x82, 0x5A, 0x01, 0x70, 0x24, 0x00, 0x5A, 0x02, 0x09, 0x24, 0x00, 0xF0, 0x03, +/* 000092D0 */ 0x6F, 0x6F, 0x24, 0x00, 0x7B, 0x6F, 0x6E, 0x83, 0x93, 0x04, 0x6F, 0x01, 0x00, 0x07, 0x03, 0x00, +/* 000092E0 */ 0x59, 0x00, 0x02, 0xCE, 0xE4, 0x01, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, +/* 000092F0 */ 0x7B, 0x48, 0x70, 0x84, 0x7B, 0x4D, 0x70, 0x85, 0x5A, 0x01, 0x70, 0x25, 0x00, 0x5A, 0x02, 0x09, +/* 00009300 */ 0x25, 0x00, 0xF0, 0x03, 0x6F, 0x6F, 0x25, 0x00, 0x7B, 0x6F, 0x6E, 0x86, 0x93, 0x04, 0x6F, 0x01, +/* 00009310 */ 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0xCE, 0xF4, 0x01, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, +/* 00009320 */ 0x70, 0x00, 0x00, 0x00, 0x7B, 0x48, 0x70, 0x87, 0x7B, 0x4D, 0x70, 0x88, 0x5A, 0x01, 0x70, 0x26, +/* 00009330 */ 0x00, 0x5A, 0x02, 0x09, 0x26, 0x00, 0xF0, 0x03, 0x6F, 0x6F, 0x26, 0x00, 0x7B, 0x6F, 0x6E, 0x89, +/* 00009340 */ 0x93, 0x04, 0x6F, 0x01, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0xCE, 0x04, 0x02, 0x00, 0x00, +/* 00009350 */ 0x15, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x7B, 0x4C, 0x70, 0x8A, 0x7B, 0x4D, 0x70, 0x8B, +/* 00009360 */ 0x5A, 0x01, 0x70, 0x27, 0x00, 0x5A, 0x02, 0x09, 0x27, 0x00, 0xF0, 0x03, 0x6F, 0x6F, 0x27, 0x00, +/* 00009370 */ 0x7B, 0x6F, 0x6E, 0x8C, 0x93, 0x04, 0x6F, 0x01, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0xCE, +/* 00009380 */ 0x14, 0x02, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x7B, 0x4C, 0x70, 0x8D, +/* 00009390 */ 0x7B, 0x4D, 0x70, 0x8E, 0x5A, 0x01, 0x70, 0x28, 0x00, 0x5A, 0x02, 0x09, 0x28, 0x00, 0xF0, 0x03, +/* 000093A0 */ 0x6F, 0x6F, 0x28, 0x00, 0x7B, 0x6F, 0x6E, 0x8F, 0x5A, 0x01, 0x6E, 0x1F, 0x00, 0x5A, 0x02, 0x09, +/* 000093B0 */ 0x1F, 0x00, 0xF0, 0x03, 0x6D, 0x6D, 0x1F, 0x00, 0x96, 0x2F, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, +/* 000093C0 */ 0x01, 0x56, 0x6D, 0x6E, 0x07, 0x01, 0x00, 0x59, 0x00, 0x02, 0xF0, 0x01, 0x6D, 0x6D, 0x29, 0x00, +/* 000093D0 */ 0x96, 0x30, 0x6D, 0xA8, 0x6D, 0x95, 0x00, 0x19, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x57, +/* 000093E0 */ 0x6D, 0x6E, 0x96, 0x31, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x58, 0x6D, 0x6E, 0x07, 0x01, +/* 000093F0 */ 0x00, 0x59, 0x00, 0x02, 0xF0, 0x01, 0x6D, 0x6D, 0x2A, 0x00, 0x45, 0x67, 0x6D, 0xB9, 0x6E, 0x00, +/* 00009400 */ 0x01, 0x66, 0x01, 0x59, 0x6D, 0x6E, 0x07, 0x01, 0x00, 0x59, 0x00, 0x02, 0xF0, 0x01, 0x6D, 0x6D, +/* 00009410 */ 0x2B, 0x00, 0x45, 0x62, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x5A, 0x6D, 0x6E, 0x07, 0x01, +/* 00009420 */ 0x00, 0x59, 0x00, 0x02, 0xF0, 0x01, 0x6D, 0x6D, 0x2C, 0x00, 0x45, 0x63, 0x6D, 0x93, 0x32, 0x6D, +/* 00009430 */ 0x06, 0x00, 0x14, 0x03, 0x00, 0x6D, 0x2C, 0x09, 0x08, 0x01, 0x93, 0x16, 0x6D, 0x12, 0x00, 0x07, +/* 00009440 */ 0x04, 0x00, 0x59, 0x00, 0x02, 0x93, 0x07, 0x6E, 0x09, 0x00, 0x5A, 0x01, 0x6E, 0x2D, 0x00, 0x5A, +/* 00009450 */ 0x02, 0x34, 0x2D, 0x00, 0xCE, 0x24, 0x02, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x00, +/* 00009460 */ 0x00, 0x7B, 0x67, 0x6E, 0x90, 0x7B, 0x03, 0x6E, 0x91, 0x7B, 0x32, 0x6E, 0x92, 0x7B, 0x03, 0x6E, +/* 00009470 */ 0x93, 0x5A, 0x03, 0x6E, 0x2D, 0x00, 0xF0, 0x04, 0xFF, 0x6D, 0x2D, 0x00, 0x93, 0x16, 0x6D, 0x12, +/* 00009480 */ 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x93, 0x07, 0x6E, 0x09, 0x00, 0x5A, 0x01, 0x6E, 0x2E, +/* 00009490 */ 0x00, 0x5A, 0x02, 0x35, 0x2E, 0x00, 0xCE, 0x3C, 0x02, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x6E, +/* 000094A0 */ 0x00, 0x00, 0x00, 0x7B, 0x62, 0x6E, 0x94, 0x7B, 0x03, 0x6E, 0x95, 0x7B, 0x32, 0x6E, 0x96, 0x7B, +/* 000094B0 */ 0x03, 0x6E, 0x97, 0x5A, 0x03, 0x6E, 0x2E, 0x00, 0xF0, 0x04, 0xFF, 0x6D, 0x2E, 0x00, 0x93, 0x16, +/* 000094C0 */ 0x6D, 0x12, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x93, 0x07, 0x6E, 0x09, 0x00, 0x5A, 0x01, +/* 000094D0 */ 0x6E, 0x2F, 0x00, 0x5A, 0x02, 0x36, 0x2F, 0x00, 0xCE, 0x54, 0x02, 0x00, 0x00, 0x19, 0x00, 0x00, +/* 000094E0 */ 0x00, 0x6E, 0x00, 0x00, 0x00, 0x7B, 0x63, 0x6E, 0x98, 0x7B, 0x03, 0x6E, 0x99, 0x7B, 0x32, 0x6E, +/* 000094F0 */ 0x9A, 0x7B, 0x03, 0x6E, 0x9B, 0x5A, 0x03, 0x6E, 0x2F, 0x00, 0xF0, 0x04, 0xFF, 0x6D, 0x2F, 0x00, +/* 00009500 */ 0x93, 0x16, 0x6D, 0x12, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x93, 0x07, 0x6E, 0x09, 0x00, +/* 00009510 */ 0x5A, 0x01, 0x6E, 0x30, 0x00, 0x5A, 0x02, 0x2E, 0x30, 0x00, 0xCE, 0x6C, 0x02, 0x00, 0x00, 0x1A, +/* 00009520 */ 0x00, 0x00, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x7B, 0x66, 0x6E, 0x9C, 0x7B, 0x03, 0x6E, 0x9D, 0x7B, +/* 00009530 */ 0x32, 0x6E, 0x9E, 0x7B, 0x03, 0x6E, 0x9F, 0x5A, 0x03, 0x6E, 0x30, 0x00, 0xF0, 0x04, 0xFF, 0x6D, +/* 00009540 */ 0x30, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x1B, 0xFE, 0x84, 0x02, 0x00, 0x6C, 0x02, 0x00, 0x00, 0x03, +/* 00009550 */ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, +/* 00009560 */ 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x54, 0x02, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, +/* 00009570 */ 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, +/* 00009580 */ 0x01, 0x00, 0x00, 0x3C, 0x02, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, +/* 00009590 */ 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x24, +/* 000095A0 */ 0x02, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, +/* 000095B0 */ 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x14, 0x02, 0x00, 0x00, 0x03, +/* 000095C0 */ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x03, 0x00, 0x00, 0x4B, 0x03, 0x00, 0x00, 0x04, +/* 000095D0 */ 0x02, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x03, 0x00, 0x00, 0x4B, +/* 000095E0 */ 0x03, 0x00, 0x00, 0xF4, 0x01, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, +/* 000095F0 */ 0x03, 0x00, 0x00, 0x46, 0x03, 0x00, 0x00, 0xE4, 0x01, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, +/* 00009600 */ 0x00, 0x00, 0x00, 0x41, 0x03, 0x00, 0x00, 0x46, 0x03, 0x00, 0x00, 0xD0, 0x01, 0x00, 0x00, 0x03, +/* 00009610 */ 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x03, 0x00, 0x00, 0x41, 0x03, 0x00, 0x00, 0x46, +/* 00009620 */ 0x03, 0x00, 0x00, 0xC4, 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, +/* 00009630 */ 0x03, 0x00, 0x00, 0xB8, 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, +/* 00009640 */ 0x03, 0x00, 0x00, 0xAC, 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3A, +/* 00009650 */ 0x03, 0x00, 0x00, 0xA0, 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3A, +/* 00009660 */ 0x03, 0x00, 0x00, 0x74, 0x01, 0x00, 0x00, 0x03, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x39, +/* 00009670 */ 0x03, 0x00, 0x00, 0x3C, 0x03, 0x00, 0x00, 0x3D, 0x03, 0x00, 0x00, 0x40, 0x03, 0x00, 0x00, 0x43, +/* 00009680 */ 0x03, 0x00, 0x00, 0x48, 0x03, 0x00, 0x00, 0x49, 0x03, 0x00, 0x00, 0x4A, 0x03, 0x00, 0x00, 0x4C, +/* 00009690 */ 0x03, 0x00, 0x00, 0x68, 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, +/* 000096A0 */ 0x01, 0x00, 0x00, 0x5C, 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, +/* 000096B0 */ 0x01, 0x00, 0x00, 0x50, 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, +/* 000096C0 */ 0x01, 0x00, 0x00, 0x44, 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, +/* 000096D0 */ 0x01, 0x00, 0x00, 0x38, 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, +/* 000096E0 */ 0x02, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, +/* 000096F0 */ 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x08, +/* 00009700 */ 0x01, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, +/* 00009710 */ 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x03, +/* 00009720 */ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, +/* 00009730 */ 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0xD8, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, +/* 00009740 */ 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, +/* 00009750 */ 0x01, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, +/* 00009760 */ 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0xA0, +/* 00009770 */ 0x00, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x03, 0x00, 0x00, 0x22, +/* 00009780 */ 0x03, 0x00, 0x00, 0x23, 0x03, 0x00, 0x00, 0x24, 0x03, 0x00, 0x00, 0x25, 0x03, 0x00, 0x00, 0x26, +/* 00009790 */ 0x03, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x03, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7B, +/* 000097A0 */ 0x01, 0x00, 0x00, 0x75, 0x01, 0x00, 0x00, 0x33, 0x01, 0x00, 0x00, 0x56, 0x01, 0x00, 0x00, 0x5E, +/* 000097B0 */ 0x01, 0x00, 0x00, 0x0A, 0x03, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x3A, 0x01, 0x00, 0x00, 0x93, +/* 000097C0 */ 0x00, 0x00, 0x00, 0xCC, 0x00, 0x00, 0x00, 0x0F, 0x03, 0x00, 0x00, 0xD5, 0x00, 0x00, 0x00, 0x2C, +/* 000097D0 */ 0x01, 0x00, 0x00, 0x50, 0x01, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, 0x15, +/* 000097E0 */ 0x03, 0x00, 0x00, 0xCF, 0x00, 0x00, 0x00, 0xB7, 0x00, 0x00, 0x00, 0x9C, 0x01, 0x00, 0x00, 0xC0, +/* 000097F0 */ 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, 0x9A, 0x01, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0x26, +/* 00009800 */ 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x2C, 0x00, 0x00, 0x00, 0xC1, 0x00, 0x00, 0x00, 0xC4, +/* 00009810 */ 0x00, 0x00, 0x00, 0x9C, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x00, 0x00, 0x00, +/* 00009820 */ 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0x26, +/* 00009830 */ 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x2C, 0x00, 0x00, 0x00, 0xBB, 0xFE, 0x4D, 0x03, 0xFE, +/* 00009840 */ 0x13, 0x02, 0xFE, 0x13, 0x02, 0xFE, 0xBE, 0x02, 0xFE, 0xBF, 0x02, 0xFE, 0x8B, 0x02, 0xBB, 0x58, +/* 00009850 */ 0xFE, 0x11, 0x01, 0xFE, 0x39, 0x01, 0xFE, 0x0B, 0x01, 0xFE, 0x5C, 0x01, 0x6B, 0x7F, 0xFE, 0xEC, +/* 00009860 */ 0x01, 0xFE, 0x8C, 0x02, 0x1D, 0xFE, 0x8D, 0x02, 0x26, 0xFE, 0x89, 0x02, 0xFE, 0xFE, 0x00, 0xFE, +/* 00009870 */ 0x8E, 0x02, 0x2C, 0xFE, 0x90, 0x02, 0xFE, 0x91, 0x02, 0xFE, 0x92, 0x02, 0xFE, 0x93, 0x02, 0xFE, +/* 00009880 */ 0x8F, 0x02, 0xFE, 0x85, 0x02, 0xFE, 0x86, 0x02, 0xFE, 0x98, 0x02, 0xFE, 0x9C, 0x02, 0xFE, 0x9E, +/* 00009890 */ 0x02, 0xFE, 0x9F, 0x02, 0xFE, 0xA0, 0x02, 0xFE, 0xA1, 0x02, 0xFE, 0xA2, 0x02, 0xFE, 0xA7, 0x02, +/* 000098A0 */ 0xFE, 0xA8, 0x02, 0xFE, 0x7B, 0x01, 0xFE, 0x75, 0x01, 0xFE, 0x33, 0x01, 0xFE, 0x56, 0x01, 0xFE, +/* 000098B0 */ 0x5E, 0x01, 0xFE, 0x0A, 0x03, 0xFE, 0x01, 0x01, 0xFE, 0x3A, 0x01, 0x93, 0xCC, 0xFE, 0x0F, 0x03, +/* 000098C0 */ 0xD5, 0xFE, 0x2C, 0x01, 0xFE, 0x50, 0x01, 0x65, 0x89, 0xFE, 0x15, 0x03, 0xFE, 0x94, 0x02, 0xCF, +/* 000098D0 */ 0xB7, 0xFE, 0x9C, 0x01, 0xFE, 0x91, 0x02, 0xC0, 0x69, 0xFE, 0x9A, 0x01, 0xFE, 0x8C, 0x02, 0x1D, +/* 000098E0 */ 0x26, 0xFE, 0x89, 0x02, 0xFE, 0xFE, 0x00, 0xFE, 0x8E, 0x02, 0x2C, 0xFE, 0xA7, 0x02, 0xC1, 0xFE, +/* 000098F0 */ 0xA8, 0x02, 0xC4, 0x9C, 0x54, 0x4E, 0xFE, 0x21, 0x03, 0xFE, 0x22, 0x03, 0xFE, 0x23, 0x03, 0xFE, +/* 00009900 */ 0x24, 0x03, 0xFE, 0x25, 0x03, 0xFE, 0x26, 0x03, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, +/* 00009910 */ 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, +/* 00009920 */ 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, +/* 00009930 */ 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, +/* 00009940 */ 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, +/* 00009950 */ 0xFE, 0x95, 0x01, 0xFE, 0x4E, 0x03, 0xFE, 0x4E, 0x03, 0xFE, 0x4F, 0x03, 0xFE, 0x4F, 0x03, 0xFE, +/* 00009960 */ 0x06, 0x02, 0xFE, 0x0C, 0x02, 0xFE, 0x97, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x97, +/* 00009970 */ 0x01, 0xFE, 0x3A, 0x03, 0xFE, 0x39, 0x03, 0xFE, 0x3A, 0x03, 0xFE, 0x3C, 0x03, 0xFE, 0x3E, 0x03, +/* 00009980 */ 0xFE, 0x3D, 0x03, 0xFE, 0x41, 0x03, 0xFE, 0x40, 0x03, 0xFE, 0x44, 0x03, 0xFE, 0x41, 0x03, 0xFE, +/* 00009990 */ 0x46, 0x03, 0xFE, 0x43, 0x03, 0xFE, 0x41, 0x03, 0xFE, 0x46, 0x03, 0xFE, 0x48, 0x03, 0xFE, 0x41, +/* 000099A0 */ 0x03, 0xFE, 0x46, 0x03, 0xFE, 0x49, 0x03, 0xFE, 0x46, 0x03, 0xFE, 0x4B, 0x03, 0xFE, 0x4A, 0x03, +/* 000099B0 */ 0xFE, 0x46, 0x03, 0xFE, 0x4B, 0x03, 0xFE, 0x4C, 0x03, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, +/* 000099C0 */ 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, +/* 000099D0 */ 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x97, 0x01, +/* 000099E0 */ 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0x02, 0x03, 0x16, 0x00, 0xFE, 0x50, 0x03, +/* 000099F0 */ 0x01, 0xFE, 0x51, 0x03, 0x02, 0xFE, 0x52, 0x03, 0x03, 0xFE, 0x53, 0x03, 0x04, 0xFE, 0x54, 0x03, +/* 00009A00 */ 0x05, 0xFE, 0x55, 0x03, 0x06, 0xFE, 0x56, 0x03, 0x07, 0xFE, 0x57, 0x03, 0x08, 0xFE, 0x58, 0x03, +/* 00009A10 */ 0x09, 0xFE, 0x59, 0x03, 0x0A, 0xFE, 0x5A, 0x03, 0x0B, 0xFE, 0x5B, 0x03, 0x0C, 0xFE, 0x5C, 0x03, +/* 00009A20 */ 0x0D, 0xFE, 0x5D, 0x03, 0x0E, 0xFE, 0x5E, 0x03, 0x0F, 0xFE, 0x5F, 0x03, 0x10, 0xFE, 0x60, 0x03, +/* 00009A30 */ 0x11, 0xFE, 0x61, 0x03, 0x12, 0xFE, 0x62, 0x03, 0x13, 0xFE, 0x63, 0x03, 0x14, 0xFE, 0x64, 0x03, +/* 00009A40 */ 0x15, 0xFE, 0x65, 0x03, 0x06, 0x18, 0x00, 0xFE, 0x50, 0x03, 0x01, 0xFE, 0x5B, 0x03, 0x02, 0xFE, +/* 00009A50 */ 0x51, 0x03, 0x03, 0xFE, 0x66, 0x03, 0x04, 0xFE, 0x5E, 0x03, 0x05, 0xFE, 0x60, 0x03, 0x06, 0xFE, +/* 00009A60 */ 0x61, 0x03, 0x07, 0xFE, 0x52, 0x03, 0x08, 0xFE, 0x53, 0x03, 0x09, 0xFE, 0x67, 0x03, 0x0A, 0xFE, +/* 00009A70 */ 0x68, 0x03, 0x0B, 0xFE, 0x69, 0x03, 0x0C, 0xFE, 0x5C, 0x03, 0x0D, 0xFE, 0x6A, 0x03, 0x0E, 0xFE, +/* 00009A80 */ 0x6B, 0x03, 0x0F, 0xFE, 0x6C, 0x03, 0x10, 0xFE, 0x6D, 0x03, 0x11, 0xFE, 0x6E, 0x03, 0x12, 0xFE, +/* 00009A90 */ 0x6F, 0x03, 0x13, 0xFE, 0x70, 0x03, 0x14, 0xFE, 0x71, 0x03, 0x15, 0xFE, 0x72, 0x03, 0x16, 0xFE, +/* 00009AA0 */ 0x73, 0x03, 0x17, 0xFE, 0x74, 0x03, 0xFE, 0x07, 0x02, 0x7E, 0x41, 0x00, 0x00, 0x00, 0x07, 0x00, +/* 00009AB0 */ 0xA4, 0x00, 0x09, 0x00, 0xB7, 0x00, 0x14, 0x00, 0x32, 0x00, 0x0C, 0x00, 0x47, 0x00, 0x03, 0x00, +/* 00009AC0 */ 0x35, 0x00, 0x0C, 0x00, 0x35, 0x00, 0x0C, 0x00, 0x39, 0x00, 0x0C, 0x00, 0x83, 0x00, 0x06, 0x00, +/* 00009AD0 */ 0x4A, 0x04, 0x0C, 0x00, 0x1F, 0x00, 0x0C, 0x00, 0x24, 0x00, 0x0C, 0x00, 0x22, 0x00, 0x0C, 0x00, +/* 00009AE0 */ 0x22, 0x00, 0x0C, 0x00, 0x22, 0x00, 0x0C, 0x00, 0x22, 0x00, 0x0C, 0x00, 0x1E, 0x00, 0x0C, 0x00, +/* 00009AF0 */ 0x21, 0x00, 0x0C, 0x00, 0x2D, 0x00, 0x5F, 0x00, 0xD0, 0x00, 0x0C, 0x00, 0x54, 0x00, 0x0C, 0x00, +/* 00009B00 */ 0x50, 0x00, 0x0C, 0x00, 0x5E, 0x00, 0x0C, 0x00, 0x02, 0x01, 0x0C, 0x00, 0x55, 0x00, 0x06, 0x00, +/* 00009B10 */ 0x94, 0x00, 0x0C, 0x00, 0x48, 0x00, 0x0C, 0x00, 0x48, 0x00, 0x0C, 0x00, 0x47, 0x00, 0x0C, 0x00, +/* 00009B20 */ 0x4C, 0x00, 0x0C, 0x00, 0x4A, 0x00, 0x0C, 0x00, 0x3B, 0x00, 0x0C, 0x00, 0x4E, 0x00, 0x0C, 0x00, +/* 00009B30 */ 0x56, 0x00, 0x0C, 0x00, 0x57, 0x00, 0x0C, 0x00, 0x3E, 0x00, 0x0C, 0x00, 0x39, 0x00, 0x33, 0x01, +/* 00009B40 */ 0x8D, 0x0F, 0x9C, 0x00, 0x1F, 0x00, 0x06, 0x00, 0x25, 0x00, 0x0D, 0x00, 0x4E, 0x02, 0x0C, 0x00, +/* 00009B50 */ 0x9A, 0x00, 0x0C, 0x00, 0x70, 0x00, 0x0D, 0x00, 0x79, 0x00, 0x0D, 0x00, 0xB5, 0x02, 0x0D, 0x00, +/* 00009B60 */ 0xBF, 0x05, 0x0D, 0x00, 0x23, 0x03, 0x0A, 0x00, 0x77, 0x01, 0x0D, 0x00, 0x4D, 0x07, 0x0D, 0x00, +/* 00009B70 */ 0xC2, 0x09, 0x7A, 0x00, 0xEF, 0x0A, 0x0D, 0x00, 0xE1, 0x01, 0x06, 0x00, 0x60, 0x01, 0x19, 0x00, +/* 00009B80 */ 0xC8, 0x1B, 0x0D, 0x00, 0x6B, 0x03, 0x0D, 0x00, 0xB4, 0x04, 0x0D, 0x00, 0xE5, 0x06, 0x0D, 0x00, +/* 00009B90 */ 0x08, 0x02, 0x0A, 0x00, 0xDA, 0x02, 0x0D, 0x00, 0x74, 0x06, 0x0D, 0x00, 0x08, 0x04, 0x0D, 0x00, +/* 00009BA0 */ 0x23, 0x00, 0x28, 0x00, 0xBB, 0x00, 0x4A, 0x00, 0x25, 0x03, 0x0D, 0x00, 0x8C, 0x02, 0x18, 0x00, +/* 00009BB0 */ 0x68, 0x22, 0x18, 0x00, 0x65, 0x25, 0x18, 0x00, 0x5F, 0x6E, 0x18, 0x00, 0x9D, 0x15, 0x0D, 0x00, +/* 00009BC0 */ 0x23, 0x00, 0x4A, 0x00, 0x92, 0x00, 0x4A, 0x00, 0x92, 0x00, 0x4A, 0x00, 0x92, 0x00, 0x00, 0x01, +/* 00009BD0 */ 0x29, 0x01, 0x13, 0x00, 0x38, 0x00, 0x17, 0x00, 0x38, 0x00, 0x13, 0x00, 0x39, 0x00, 0x17, 0x00, +/* 00009BE0 */ 0x3A, 0x00, 0x06, 0x00, 0x25, 0x00, 0x0D, 0x00, 0xE9, 0x01, 0x0D, 0x00, 0x0C, 0x02, 0x0D, 0x00, +/* 00009BF0 */ 0x90, 0x01, 0x0C, 0x00, 0x58, 0x01, 0x0C, 0x00, 0x9A, 0x00, 0x0C, 0x00, 0x70, 0x00, 0x0C, 0x00, +/* 00009C00 */ 0xA7, 0x04, 0x0C, 0x00, 0x93, 0x04, 0x0C, 0x00, 0x31, 0x04, 0x0C, 0x00, 0xF9, 0x09, 0x0C, 0x00, +/* 00009C10 */ 0xEF, 0x02, 0x06, 0x00, 0x2D, 0x00, 0x0C, 0x00, 0x93, 0x03, 0x18, 0x00, 0x89, 0x0A, 0x06, 0x00, +/* 00009C20 */ 0x75, 0x00, 0x06, 0x00, 0x38, 0x00, 0x06, 0x00, 0x4C, 0x00, 0x06, 0x00, 0xC7, 0x1C, 0x0C, 0x00, +/* 00009C30 */ 0xC0, 0x01, 0x0C, 0x00, 0xDF, 0x01, 0x0C, 0x00, 0x80, 0x03, 0x20, 0x00, 0x3C, 0x00, 0x4F, 0x00, +/* 00009C40 */ 0x25, 0x01, 0x04, 0x00, 0x51, 0x00, 0x53, 0x00, 0x69, 0x01, 0x04, 0x00, 0x59, 0x00, 0x53, 0x00, +/* 00009C50 */ 0x79, 0x01, 0x04, 0x00, 0x5D, 0x00, 0x53, 0x00, 0x81, 0x01, 0x04, 0x00, 0x41, 0x00, 0x52, 0x00, +/* 00009C60 */ 0xAD, 0x02, 0x37, 0x00, 0x60, 0x00, 0x37, 0x00, 0x64, 0x00, 0x37, 0x00, 0x66, 0x00, 0x31, 0x00, +/* 00009C70 */ 0x49, 0x01, 0xF3, 0x01, 0x51, 0x05, 0x18, 0x00, 0xCA, 0x03, 0x06, 0x00, 0x2B, 0x00, 0x0C, 0x00, +/* 00009C80 */ 0x3B, 0x09, 0x18, 0x00, 0xFC, 0x30, 0x18, 0x00, 0x97, 0x2F, 0x18, 0x00, 0x63, 0x79, 0x0D, 0x00, +/* 00009C90 */ 0x23, 0x00, 0x42, 0x00, 0x7C, 0x00, 0x42, 0x00, 0x84, 0x00, 0x42, 0x00, 0x88, 0x00, 0x44, 0x00, +/* 00009CA0 */ 0xA6, 0x00, 0x00, 0xAA, 0xCF, 0x01, 0x00, 0x3E, 0xCD, 0x01, 0x00, 0xC0, 0xCC, 0x01, 0x00, 0x55, +/* 00009CB0 */ 0xCC, 0x01, 0x00, 0xEA, 0xCB, 0x01, 0x00, 0x75, 0xCB, 0x01, 0x00, 0xFA, 0xCA, 0x01, 0x00, 0x7A, +/* 00009CC0 */ 0xCA, 0x01, 0x00, 0xFA, 0xC9, 0x01, 0x00, 0x87, 0xC9, 0x01, 0x00, 0x0C, 0xC9, 0x01, 0x00, 0x9C, +/* 00009CD0 */ 0xC8, 0x01, 0x00, 0x2C, 0xC8, 0x01, 0x00, 0xB7, 0xC7, 0x01, 0x00, 0x3C, 0xC7, 0x01, 0x00, 0xBC, +/* 00009CE0 */ 0xC6, 0x01, 0x00, 0x3C, 0xC6, 0x01, 0x00, 0xA7, 0xC5, 0x01, 0x00, 0x2C, 0xC5, 0x01, 0x00, 0x2B, +/* 00009CF0 */ 0xC4, 0x01, 0x00, 0xB0, 0xC3, 0x01, 0x00, 0x0D, 0xC3, 0x01, 0x00, 0x91, 0xC2, 0x01, 0x00, 0x10, +/* 00009D00 */ 0xC2, 0x01, 0x00, 0x8F, 0xC1, 0x01, 0x00, 0x19, 0xC1, 0x01, 0x00, 0x9E, 0xC0, 0x01, 0x00, 0x1E, +/* 00009D10 */ 0xC0, 0x01, 0x00, 0x53, 0xBF, 0x01, 0x00, 0xE1, 0xBE, 0x01, 0x00, 0x74, 0xBE, 0x01, 0x00, 0x01, +/* 00009D20 */ 0xBE, 0x01, 0x00, 0x6F, 0xBD, 0x01, 0x00, 0xEF, 0xBB, 0x01, 0x00, 0x6A, 0xBA, 0x01, 0x00, 0x34, +/* 00009D30 */ 0xB8, 0x01, 0x00, 0xD1, 0xB2, 0x01, 0x00, 0x29, 0xB2, 0x01, 0x00, 0xB3, 0xB1, 0x01, 0x00, 0x3D, +/* 00009D40 */ 0xB1, 0x01, 0x00, 0xC7, 0xB0, 0x01, 0x00, 0x90, 0xAF, 0x01, 0x00, 0xB5, 0xAE, 0x01, 0x00, 0xAE, +/* 00009D50 */ 0xAC, 0x01, 0x00, 0x47, 0xAB, 0x01, 0x00, 0xFA, 0xAA, 0x01, 0x00, 0x6E, 0xA3, 0x01, 0x00, 0xA0, +/* 00009D60 */ 0xA2, 0x01, 0x00, 0xC2, 0x9F, 0x01, 0x00, 0x53, 0x9C, 0x01, 0x00, 0x57, 0x9A, 0x01, 0x00, 0xFE, +/* 00009D70 */ 0x97, 0x01, 0x00, 0x8F, 0x95, 0x01, 0x00, 0x31, 0x95, 0x01, 0x00, 0x59, 0x93, 0x01, 0x00, 0xC1, +/* 00009D80 */ 0x81, 0x01, 0x00, 0x81, 0x6C, 0x01, 0x00, 0x9F, 0x3B, 0x01, 0x00, 0x60, 0x2F, 0x01, 0x00, 0x8B, +/* 00009D90 */ 0x2E, 0x01, 0x00, 0xD2, 0x2D, 0x01, 0x00, 0xC6, 0x2C, 0x01, 0x00, 0x28, 0x2C, 0x01, 0x00, 0xAC, +/* 00009DA0 */ 0x2B, 0x01, 0x00, 0x35, 0x2B, 0x01, 0x00, 0x09, 0x29, 0x01, 0x00, 0x0C, 0x27, 0x01, 0x00, 0x98, +/* 00009DB0 */ 0x25, 0x01, 0x00, 0xA7, 0x20, 0x01, 0x00, 0x33, 0x1F, 0x01, 0x00, 0xA5, 0x1D, 0x01, 0x00, 0x93, +/* 00009DC0 */ 0x18, 0x01, 0x00, 0x8E, 0x16, 0x01, 0x00, 0x16, 0x15, 0x01, 0x00, 0xC1, 0x14, 0x01, 0x00, 0x06, +/* 00009DD0 */ 0x11, 0x01, 0x00, 0x30, 0x10, 0x01, 0x00, 0xA0, 0x0C, 0x01, 0x00, 0xFF, 0x09, 0x01, 0x00, 0xEA, +/* 00009DE0 */ 0x08, 0x01, 0x00, 0xD8, 0x07, 0x01, 0x00, 0xE5, 0x05, 0x01, 0x00, 0x5A, 0x05, 0x01, 0x00, 0xCF, +/* 00009DF0 */ 0x04, 0x01, 0x00, 0x44, 0x04, 0x01, 0x00, 0xCC, 0x03, 0x01, 0x00, 0x83, 0x01, 0x01, 0x00, 0x30, +/* 00009E00 */ 0xFE, 0x00, 0x00, 0xE3, 0xE7, 0x00, 0x00, 0xDD, 0xD1, 0x00, 0x00, 0x0F, 0x9E, 0x00, 0x00, 0x7E, +/* 00009E10 */ 0x5D, 0x18, 0xC1, 0x53, 0x5A, 0x4B, 0x04, 0xFE, 0x67, 0x0C, 0x1A, 0xA0, 0x41, 0xD1, 0x00, 0xB2, +/* 00009E20 */ 0xFF, 0x8C, 0x36, 0x02, 0x00, 0xFF, 0x8C, 0x36, 0x02, 0x00, 0x0F, 0xFE, 0x00, 0x90, 0x01, 0x01, +/* 00009E30 */ 0xFF, 0x8C, 0x36, 0x02, 0x00, 0xFE, 0x12, 0x79, 0xFE, 0x12, 0x79, 0x01, 0xFE, 0xC8, 0x04, 0x15, +/* 00009E40 */ 0x36, 0x44, 0x09, 0xEE, 0xED, 0x02, 0x0E, 0x02, 0x09, 0x2D, 0x2D, 0x2D, 0x2D, 0x07, 0x02, 0x41, +/* 00009E50 */ 0x42, 0x43, 0x44, 0x08, 0x06, 0xFE, 0x27, 0x03, 0x06, 0xFE, 0x2E, 0x04, 0x06, 0xFE, 0xC9, 0x04, +/* 00009E60 */ 0x05, 0xFE, 0xCA, 0x04, 0x06, 0xFE, 0xCB, 0x04, 0x05, 0xFE, 0xCC, 0x04, 0x06, 0xFE, 0xCD, 0x04, +/* 00009E70 */ 0x05, 0xFE, 0xCE, 0x04, 0x06, 0xFE, 0xCF, 0x04, 0x05, 0xFE, 0xD0, 0x04, 0x06, 0xFE, 0xD1, 0x04, +/* 00009E80 */ 0x05, 0xFE, 0xD2, 0x04, 0x06, 0xFE, 0xD3, 0x04, 0x05, 0xFE, 0xD4, 0x04, 0x06, 0xFE, 0xD5, 0x04, +/* 00009E90 */ 0x05, 0xFE, 0xD6, 0x04, 0x06, 0xFE, 0xD7, 0x04, 0x05, 0xFE, 0xD8, 0x04, 0x06, 0xFE, 0xD9, 0x04, +/* 00009EA0 */ 0x05, 0xFE, 0xDA, 0x04, 0x07, 0x06, 0xFE, 0x21, 0x04, 0x01, 0x00, 0x06, 0xFE, 0x3C, 0x04, 0x01, +/* 00009EB0 */ 0x01, 0x06, 0xFE, 0x3D, 0x04, 0x01, 0x02, 0x05, 0xFE, 0x3E, 0x04, 0x06, 0xFE, 0x3F, 0x04, 0x06, +/* 00009EC0 */ 0xFE, 0x40, 0x04, 0x05, 0xFE, 0x41, 0x04, 0x06, 0xFE, 0x42, 0x04, 0x05, 0xFE, 0x43, 0x04, 0x05, +/* 00009ED0 */ 0xFE, 0x44, 0x04, 0x05, 0xFE, 0x45, 0x04, 0x05, 0xFE, 0x46, 0x04, 0x06, 0xFE, 0x74, 0x04, 0x06, +/* 00009EE0 */ 0xFE, 0x17, 0x04, 0x06, 0xFE, 0xEC, 0x03, 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, 0x2B, 0x03, 0x0C, +/* 00009EF0 */ 0x06, 0xFE, 0x2C, 0x03, 0x06, 0xFE, 0x2D, 0x03, 0x06, 0xFE, 0xED, 0x03, 0x0B, 0x06, 0xFE, 0x15, +/* 00009F00 */ 0x04, 0x06, 0xFE, 0x77, 0x03, 0x05, 0xFE, 0x14, 0x04, 0x06, 0xFE, 0xEE, 0x03, 0x06, 0xFE, 0x38, +/* 00009F10 */ 0x03, 0xFE, 0x52, 0x04, 0x4E, 0x40, 0xA8, 0x36, 0xA8, 0x37, 0xA8, 0x38, 0xA8, 0x39, 0xA8, 0x3A, +/* 00009F20 */ 0xA8, 0x3B, 0xA8, 0x3C, 0xA8, 0x3D, 0xA8, 0x3E, 0xA8, 0x3F, 0x8F, 0x02, 0x32, 0x46, 0x00, 0x00, +/* 00009F30 */ 0x14, 0x0E, 0x00, 0x46, 0x03, 0x8F, 0x02, 0x32, 0x46, 0x00, 0x00, 0x14, 0x03, 0x00, 0x46, 0x04, +/* 00009F40 */ 0x09, 0x1A, 0x04, 0xE0, 0x00, 0x0B, 0x01, 0xB9, 0x46, 0x00, 0x01, 0x66, 0x01, 0x00, 0x36, 0x46, +/* 00009F50 */ 0x95, 0x00, 0x02, 0x36, 0x01, 0x66, 0x01, 0x01, 0x37, 0x46, 0x95, 0x00, 0x03, 0x37, 0x01, 0x66, +/* 00009F60 */ 0x01, 0x02, 0x38, 0x46, 0x95, 0x00, 0x04, 0x38, 0x01, 0x66, 0x01, 0x03, 0x39, 0x46, 0x95, 0x00, +/* 00009F70 */ 0x05, 0x39, 0x01, 0x66, 0x01, 0x04, 0x3A, 0x46, 0x95, 0x00, 0x06, 0x3A, 0x01, 0x66, 0x01, 0x05, +/* 00009F80 */ 0x3B, 0x46, 0x95, 0x00, 0x07, 0x3B, 0x01, 0x66, 0x01, 0x06, 0x3C, 0x46, 0x95, 0x00, 0x08, 0x3C, +/* 00009F90 */ 0x01, 0x66, 0x01, 0x07, 0x3D, 0x46, 0x95, 0x00, 0x09, 0x3D, 0x4E, 0x46, 0x95, 0x00, 0x0A, 0x46, +/* 00009FA0 */ 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x7B, 0x06, 0x46, +/* 00009FB0 */ 0x00, 0x7B, 0x08, 0x46, 0x01, 0x7B, 0x0A, 0x46, 0x02, 0x7B, 0x0C, 0x46, 0x03, 0x7B, 0x0E, 0x46, +/* 00009FC0 */ 0x04, 0x7B, 0x10, 0x46, 0x05, 0x7B, 0x12, 0x46, 0x06, 0x7B, 0x14, 0x46, 0x07, 0x7B, 0x16, 0x46, +/* 00009FD0 */ 0x08, 0x96, 0x02, 0x46, 0xD0, 0x46, 0x03, 0x00, 0x00, 0xA8, 0x47, 0xA1, 0x00, 0x47, 0x46, 0xA8, +/* 00009FE0 */ 0x47, 0xA1, 0x01, 0x47, 0x46, 0xA8, 0x47, 0xA1, 0x02, 0x47, 0x46, 0x95, 0x00, 0x0A, 0x46, 0x8F, +/* 00009FF0 */ 0x02, 0x04, 0x46, 0x01, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0xCE, 0x2C, 0x00, 0x00, 0x00, +/* 0000A000 */ 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0x7B, 0x19, 0x47, 0x09, 0x7B, 0x1B, 0x47, 0x0A, +/* 0000A010 */ 0x7B, 0x1D, 0x47, 0x0B, 0x5A, 0x01, 0x47, 0x00, 0x00, 0x5A, 0x02, 0x17, 0x00, 0x00, 0xF0, 0x03, +/* 0000A020 */ 0x46, 0x46, 0x00, 0x00, 0x45, 0x40, 0x46, 0xB9, 0x47, 0x00, 0x01, 0x66, 0x01, 0x08, 0x46, 0x47, +/* 0000A030 */ 0x07, 0x06, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x1E, 0x01, 0x00, 0x5A, 0x02, 0x1F, 0x01, 0x00, +/* 0000A040 */ 0x5A, 0x03, 0x20, 0x01, 0x00, 0x5F, 0x47, 0x40, 0x0C, 0x5A, 0x04, 0x47, 0x01, 0x00, 0x8F, 0x02, +/* 0000A050 */ 0x03, 0x47, 0x02, 0x00, 0x5F, 0x47, 0x47, 0x0D, 0x5F, 0x47, 0x47, 0x0E, 0x5A, 0x05, 0x47, 0x01, +/* 0000A060 */ 0x00, 0xF0, 0x06, 0xFF, 0x46, 0x01, 0x00, 0xB9, 0x47, 0x00, 0x01, 0x66, 0x01, 0x09, 0x46, 0x47, +/* 0000A070 */ 0x07, 0x06, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x21, 0x02, 0x00, 0x5A, 0x02, 0x22, 0x02, 0x00, +/* 0000A080 */ 0x5A, 0x03, 0x22, 0x02, 0x00, 0x5F, 0x47, 0x40, 0x0F, 0x5A, 0x04, 0x47, 0x02, 0x00, 0x8F, 0x02, +/* 0000A090 */ 0x03, 0x47, 0x02, 0x00, 0x5F, 0x47, 0x47, 0x10, 0x5F, 0x47, 0x47, 0x11, 0x5A, 0x05, 0x47, 0x02, +/* 0000A0A0 */ 0x00, 0xF0, 0x06, 0xFF, 0x46, 0x02, 0x00, 0xB9, 0x47, 0x00, 0x01, 0x66, 0x01, 0x0A, 0x46, 0x47, +/* 0000A0B0 */ 0x07, 0x06, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x23, 0x03, 0x00, 0x5A, 0x02, 0x24, 0x03, 0x00, +/* 0000A0C0 */ 0x5A, 0x03, 0x24, 0x03, 0x00, 0x5F, 0x47, 0x40, 0x12, 0x5A, 0x04, 0x47, 0x03, 0x00, 0x8F, 0x02, +/* 0000A0D0 */ 0x03, 0x47, 0x02, 0x00, 0x5F, 0x47, 0x47, 0x13, 0x5F, 0x47, 0x47, 0x14, 0x5A, 0x05, 0x47, 0x03, +/* 0000A0E0 */ 0x00, 0xF0, 0x06, 0xFF, 0x46, 0x03, 0x00, 0x8F, 0x02, 0x32, 0x46, 0x00, 0x00, 0x14, 0x03, 0x00, +/* 0000A0F0 */ 0x46, 0x03, 0x09, 0x68, 0x02, 0xE0, 0x01, 0x04, 0x03, 0xB9, 0x46, 0x00, 0xB8, 0x01, 0x00, 0x00, +/* 0000A100 */ 0x00, 0x46, 0x46, 0x01, 0x66, 0x01, 0x0B, 0x3E, 0x46, 0x95, 0x01, 0x02, 0x3E, 0x01, 0x66, 0x01, +/* 0000A110 */ 0x0C, 0x3F, 0x46, 0x95, 0x01, 0x03, 0x3F, 0x8F, 0x02, 0x23, 0x46, 0x03, 0x00, 0x07, 0x03, 0x00, +/* 0000A120 */ 0x59, 0x00, 0x02, 0x5A, 0x01, 0x25, 0x04, 0x00, 0x91, 0x01, 0x02, 0x47, 0x04, 0x00, 0x5A, 0x02, +/* 0000A130 */ 0x47, 0x04, 0x00, 0xF0, 0x03, 0xFF, 0x46, 0x04, 0x00, 0x8F, 0x02, 0x23, 0x46, 0x03, 0x00, 0x07, +/* 0000A140 */ 0x03, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x26, 0x05, 0x00, 0x91, 0x01, 0x03, 0x47, 0x05, 0x00, +/* 0000A150 */ 0x5A, 0x02, 0x47, 0x05, 0x00, 0xF0, 0x03, 0xFF, 0x46, 0x05, 0x00, 0x91, 0x01, 0x02, 0x46, 0x04, +/* 0000A160 */ 0x00, 0xD0, 0x47, 0x02, 0x01, 0x00, 0xA1, 0x00, 0x27, 0x47, 0xA1, 0x01, 0x28, 0x47, 0x77, 0x47, +/* 0000A170 */ 0x46, 0x15, 0x8F, 0x02, 0x16, 0x46, 0x06, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x91, 0x01, +/* 0000A180 */ 0x02, 0x47, 0x04, 0x00, 0x5A, 0x01, 0x47, 0x06, 0x00, 0x5A, 0x02, 0x29, 0x06, 0x00, 0xCE, 0x40, +/* 0000A190 */ 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0x91, 0x01, 0x02, 0x48, 0x04, +/* 0000A1A0 */ 0x00, 0x07, 0x01, 0x00, 0xC5, 0x01, 0x48, 0x48, 0x07, 0x00, 0x7B, 0x48, 0x47, 0x16, 0x7B, 0x2C, +/* 0000A1B0 */ 0x47, 0x17, 0x7B, 0x2C, 0x47, 0x18, 0x7B, 0x2C, 0x47, 0x19, 0x5A, 0x03, 0x47, 0x06, 0x00, 0xF0, +/* 0000A1C0 */ 0x04, 0xFF, 0x46, 0x06, 0x00, 0x8F, 0x02, 0x04, 0x46, 0x01, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 0000A1D0 */ 0x02, 0x91, 0x01, 0x02, 0x47, 0x04, 0x00, 0x5F, 0x47, 0x47, 0x1A, 0x5A, 0x01, 0x47, 0x08, 0x00, +/* 0000A1E0 */ 0x8F, 0x02, 0x09, 0x47, 0x07, 0x00, 0x5F, 0x47, 0x47, 0x1B, 0x5A, 0x02, 0x47, 0x08, 0x00, 0xF0, +/* 0000A1F0 */ 0x03, 0xFF, 0x46, 0x08, 0x00, 0x8F, 0x02, 0x16, 0x46, 0x06, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, +/* 0000A200 */ 0x02, 0x91, 0x01, 0x02, 0x47, 0x04, 0x00, 0x5F, 0x47, 0x47, 0x1C, 0x5A, 0x01, 0x47, 0x09, 0x00, +/* 0000A210 */ 0x5A, 0x02, 0x2F, 0x09, 0x00, 0xCE, 0x58, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x47, 0x00, +/* 0000A220 */ 0x00, 0x00, 0x91, 0x01, 0x02, 0x48, 0x04, 0x00, 0x7B, 0x48, 0x47, 0x1D, 0x7B, 0x30, 0x47, 0x1E, +/* 0000A230 */ 0x7B, 0x2C, 0x47, 0x1F, 0x7B, 0x30, 0x47, 0x20, 0x5A, 0x03, 0x47, 0x09, 0x00, 0xF0, 0x04, 0xFF, +/* 0000A240 */ 0x46, 0x09, 0x00, 0x8F, 0x02, 0x16, 0x46, 0x06, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x91, +/* 0000A250 */ 0x01, 0x02, 0x47, 0x04, 0x00, 0x5F, 0x47, 0x47, 0x21, 0x5A, 0x01, 0x47, 0x0A, 0x00, 0x5A, 0x02, +/* 0000A260 */ 0x31, 0x0A, 0x00, 0xCE, 0x70, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, +/* 0000A270 */ 0x8F, 0x02, 0x23, 0x48, 0x03, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x33, 0x0B, +/* 0000A280 */ 0x00, 0xB9, 0x4A, 0x00, 0xB8, 0x01, 0x00, 0x00, 0x00, 0x4A, 0x4A, 0x01, 0x66, 0x01, 0x0D, 0x49, +/* 0000A290 */ 0x4A, 0x5A, 0x02, 0x49, 0x0B, 0x00, 0xF0, 0x03, 0x48, 0x48, 0x0B, 0x00, 0x7B, 0x48, 0x47, 0x22, +/* 0000A2A0 */ 0x7B, 0x2C, 0x47, 0x23, 0x7B, 0x30, 0x47, 0x24, 0x5A, 0x03, 0x47, 0x0A, 0x00, 0xF0, 0x04, 0xFF, +/* 0000A2B0 */ 0x46, 0x0A, 0x00, 0x8F, 0x02, 0x16, 0x46, 0x06, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x91, +/* 0000A2C0 */ 0x01, 0x02, 0x47, 0x04, 0x00, 0x5F, 0x47, 0x47, 0x25, 0x5A, 0x01, 0x47, 0x0C, 0x00, 0x5A, 0x02, +/* 0000A2D0 */ 0x34, 0x0C, 0x00, 0xCE, 0x84, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, +/* 0000A2E0 */ 0xB9, 0x49, 0x00, 0xB8, 0x01, 0x00, 0x00, 0x00, 0x49, 0x49, 0x01, 0x6A, 0x01, 0x0E, 0x48, 0x49, +/* 0000A2F0 */ 0x47, 0x7B, 0x48, 0x47, 0x26, 0x7B, 0x30, 0x47, 0x27, 0x7B, 0x2C, 0x47, 0x28, 0x7B, 0x30, 0x47, +/* 0000A300 */ 0x29, 0x5A, 0x03, 0x47, 0x0C, 0x00, 0xF0, 0x04, 0xFF, 0x46, 0x0C, 0x00, 0x8F, 0x02, 0x16, 0x46, +/* 0000A310 */ 0x06, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x91, 0x01, 0x02, 0x47, 0x04, 0x00, 0x5A, 0x01, +/* 0000A320 */ 0x47, 0x0D, 0x00, 0x5A, 0x02, 0x35, 0x0D, 0x00, 0xCE, 0x9C, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, +/* 0000A330 */ 0x00, 0x47, 0x00, 0x00, 0x00, 0x8F, 0x01, 0x17, 0x48, 0x08, 0x00, 0x4A, 0x48, 0x7B, 0x48, 0x47, +/* 0000A340 */ 0x2A, 0x7B, 0x30, 0x47, 0x2B, 0x7B, 0x30, 0x47, 0x2C, 0x5A, 0x03, 0x47, 0x0D, 0x00, 0xF0, 0x04, +/* 0000A350 */ 0xFF, 0x46, 0x0D, 0x00, 0x91, 0x01, 0x02, 0x00, 0x04, 0x00, 0x09, 0x07, 0x00, 0xA8, 0x00, 0x09, +/* 0000A360 */ 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x07, 0xB0, 0x00, 0x9C, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, +/* 0000A370 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, +/* 0000A380 */ 0x00, 0x84, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, +/* 0000A390 */ 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x70, 0x00, 0x00, +/* 0000A3A0 */ 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, +/* 0000A3B0 */ 0x00, 0x95, 0x01, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0000A3C0 */ 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, +/* 0000A3D0 */ 0x00, 0x40, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, +/* 0000A3E0 */ 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x2C, 0x00, 0x00, +/* 0000A3F0 */ 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x72, 0x01, 0x00, 0x00, 0x70, 0x01, 0x00, +/* 0000A400 */ 0x00, 0x73, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0000A410 */ 0x00, 0xC9, 0x04, 0x00, 0x00, 0xCB, 0x04, 0x00, 0x00, 0xCD, 0x04, 0x00, 0x00, 0xCF, 0x04, 0x00, +/* 0000A420 */ 0x00, 0xD1, 0x04, 0x00, 0x00, 0xD3, 0x04, 0x00, 0x00, 0xD5, 0x04, 0x00, 0x00, 0xD7, 0x04, 0x00, +/* 0000A430 */ 0x00, 0xD9, 0x04, 0x00, 0x00, 0xFE, 0xC9, 0x04, 0xFE, 0xCB, 0x04, 0xFE, 0xCD, 0x04, 0xFE, 0xCF, +/* 0000A440 */ 0x04, 0xFE, 0xD1, 0x04, 0xFE, 0xD3, 0x04, 0xFE, 0xD5, 0x04, 0xFE, 0xD7, 0x04, 0xFE, 0xD9, 0x04, +/* 0000A450 */ 0xFE, 0x72, 0x01, 0xFE, 0x70, 0x01, 0xFE, 0x73, 0x01, 0xFE, 0x72, 0x01, 0xFE, 0x2F, 0x02, 0xFE, +/* 0000A460 */ 0x2A, 0x02, 0xFE, 0x70, 0x01, 0xFE, 0x2F, 0x02, 0xFE, 0x2B, 0x02, 0xFE, 0x73, 0x01, 0xFE, 0x2F, +/* 0000A470 */ 0x02, 0xFE, 0x2C, 0x02, 0xFE, 0x0A, 0x02, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, +/* 0000A480 */ 0xFE, 0x95, 0x01, 0xFE, 0x24, 0x01, 0xFE, 0x24, 0x01, 0xFE, 0x24, 0x01, 0xFE, 0x97, 0x01, 0xFE, +/* 0000A490 */ 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x24, 0x01, 0xFE, 0x98, 0x01, 0xFE, 0x94, +/* 0000A4A0 */ 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x24, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, +/* 0000A4B0 */ 0xFE, 0x95, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x95, 0x01, 0x02, 0x01, 0x09, 0x00, +/* 0000A4C0 */ 0xFE, 0x2A, 0x04, 0x01, 0xFE, 0xDB, 0x04, 0x02, 0xFE, 0xDC, 0x04, 0x03, 0xFE, 0xDD, 0x04, 0x04, +/* 0000A4D0 */ 0xFE, 0xDE, 0x04, 0x05, 0xFE, 0xDF, 0x04, 0x06, 0xFE, 0x29, 0x04, 0x07, 0xFE, 0x26, 0x04, 0x08, +/* 0000A4E0 */ 0xFE, 0x2B, 0x04, 0x03, 0x02, 0x00, 0xFE, 0x56, 0x02, 0x01, 0xFE, 0x0B, 0x02, 0xFF, 0xA2, 0x36, +/* 0000A4F0 */ 0x02, 0x00, 0x14, 0x16, 0x00, 0x00, 0x00, 0x76, 0x00, 0x75, 0x12, 0x34, 0x00, 0xEF, 0x36, 0x1B, +/* 0000A500 */ 0x00, 0x5E, 0x00, 0x38, 0x00, 0x16, 0x10, 0x40, 0x00, 0x47, 0x02, 0x40, 0x00, 0x59, 0x02, 0x40, +/* 0000A510 */ 0x00, 0x58, 0x02, 0x30, 0x00, 0x62, 0x04, 0x22, 0x00, 0x59, 0x04, 0x22, 0x00, 0x54, 0x00, 0x17, +/* 0000A520 */ 0x00, 0x48, 0x00, 0x53, 0x00, 0x9D, 0x00, 0x30, 0x00, 0x4A, 0x00, 0x4E, 0x00, 0xA2, 0x00, 0x70, +/* 0000A530 */ 0x00, 0x22, 0x03, 0x59, 0x00, 0xEC, 0x08, 0x48, 0x00, 0x9F, 0x00, 0x09, 0x00, 0x88, 0x00, 0x07, +/* 0000A540 */ 0x00, 0x16, 0x00, 0x00, 0x94, 0xCD, 0x00, 0x00, 0x05, 0xC9, 0x00, 0x00, 0x7F, 0xC8, 0x00, 0x00, +/* 0000A550 */ 0x73, 0xC6, 0x00, 0x00, 0xA2, 0xC4, 0x00, 0x00, 0x24, 0xC0, 0x00, 0x00, 0x84, 0xB6, 0x00, 0x00, +/* 0000A560 */ 0x94, 0xB3, 0x00, 0x00, 0x11, 0xB2, 0x00, 0x00, 0x8E, 0xB0, 0x00, 0x00, 0x0B, 0xAF, 0x00, 0x00, +/* 0000A570 */ 0xE2, 0xAC, 0x00, 0x00, 0xD6, 0xAA, 0x00, 0x00, 0xCC, 0xA9, 0x00, 0x00, 0x80, 0xA5, 0x00, 0x00, +/* 0000A580 */ 0x7F, 0x5D, 0x08, 0xC1, 0x13, 0x1A, 0x4F, 0x00, 0xFE, 0x65, 0x0E, 0x1B, 0xA0, 0x41, 0xC3, 0x00, +/* 0000A590 */ 0xFE, 0xEE, 0x03, 0xC5, 0xFF, 0x00, 0x00, 0x00, 0x02, 0xFF, 0xD3, 0xA5, 0x02, 0x00, 0xFF, 0xD3, +/* 0000A5A0 */ 0xA5, 0x02, 0x00, 0x01, 0x08, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFF, 0xD3, 0xA5, 0x02, 0x00, 0xFE, +/* 0000A5B0 */ 0x30, 0x08, 0xFE, 0x30, 0x08, 0x03, 0xFE, 0xE2, 0x03, 0xFE, 0x03, 0x05, 0xFE, 0xE0, 0x01, 0x07, +/* 0000A5C0 */ 0x15, 0x19, 0x09, 0x77, 0x77, 0x05, 0x08, 0x09, 0x21, 0x21, 0x21, 0x21, 0x01, 0x16, 0x17, 0x18, +/* 0000A5D0 */ 0x06, 0xFE, 0x94, 0x03, 0x05, 0xFE, 0x04, 0x05, 0x06, 0xFE, 0x30, 0x03, 0x06, 0xFE, 0xD7, 0x03, +/* 0000A5E0 */ 0x06, 0xFE, 0x8A, 0x04, 0x06, 0xFE, 0x24, 0x04, 0x06, 0xFE, 0x77, 0x04, 0x06, 0xFE, 0x55, 0x04, +/* 0000A5F0 */ 0x06, 0xFE, 0x33, 0x04, 0x06, 0xFE, 0x34, 0x04, 0x06, 0xFE, 0x35, 0x04, 0x06, 0xFE, 0x36, 0x04, +/* 0000A600 */ 0x06, 0xFE, 0x37, 0x04, 0x06, 0xFE, 0x38, 0x04, 0x06, 0xFE, 0x39, 0x04, 0x06, 0xFE, 0x3A, 0x04, +/* 0000A610 */ 0x06, 0xFE, 0x3B, 0x04, 0x07, 0x08, 0xFE, 0x15, 0x02, 0x58, 0x15, 0x2A, 0x19, 0x15, 0x15, 0x03, +/* 0000A620 */ 0x00, 0x19, 0x02, 0x09, 0x24, 0x00, 0x8F, 0x05, 0x03, 0x1A, 0x00, 0x00, 0x6D, 0x19, 0x1A, 0x00, +/* 0000A630 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x1A, 0x5A, 0x01, 0x03, 0x00, 0x00, 0x5A, 0x02, 0x04, 0x00, 0x00, +/* 0000A640 */ 0xF4, 0x03, 0xFF, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x05, 0x03, 0x1A, 0x00, 0x00, +/* 0000A650 */ 0x6D, 0x19, 0x1A, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x1A, 0x5A, 0x01, 0x15, 0x01, 0x00, 0xF4, +/* 0000A660 */ 0x02, 0x19, 0x19, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x96, 0x02, 0x19, 0x93, 0x02, 0x19, 0x01, +/* 0000A670 */ 0x00, 0xA8, 0x1A, 0x14, 0x0D, 0x00, 0x19, 0x1A, 0x93, 0x02, 0x19, 0x01, 0x00, 0x5F, 0x19, 0x19, +/* 0000A680 */ 0x02, 0x0F, 0x24, 0x00, 0x19, 0x8F, 0x05, 0x03, 0x1A, 0x00, 0x00, 0x6D, 0x19, 0x1A, 0x03, 0x07, +/* 0000A690 */ 0x03, 0x00, 0x59, 0x00, 0x1A, 0x5A, 0x01, 0x03, 0x02, 0x00, 0x5A, 0x02, 0x04, 0x02, 0x00, 0xF4, +/* 0000A6A0 */ 0x03, 0xFF, 0x19, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x8F, 0x05, 0x04, 0x19, 0x02, 0x00, 0x07, +/* 0000A6B0 */ 0x03, 0x00, 0x59, 0x00, 0x14, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, +/* 0000A6C0 */ 0x00, 0x00, 0x93, 0x02, 0x1B, 0x01, 0x00, 0x5F, 0x1B, 0x1B, 0x04, 0x7B, 0x1B, 0x1A, 0x05, 0x93, +/* 0000A6D0 */ 0x02, 0x1B, 0x01, 0x00, 0x5F, 0x1B, 0x1B, 0x06, 0x7B, 0x1B, 0x1A, 0x07, 0x93, 0x02, 0x1B, 0x01, +/* 0000A6E0 */ 0x00, 0x5F, 0x1B, 0x1B, 0x08, 0x7B, 0x1B, 0x1A, 0x09, 0x93, 0x02, 0x1B, 0x01, 0x00, 0x5F, 0x1B, +/* 0000A6F0 */ 0x1B, 0x0A, 0x7B, 0x1B, 0x1A, 0x0B, 0x93, 0x02, 0x1B, 0x01, 0x00, 0x5F, 0x1B, 0x1B, 0x0C, 0x7B, +/* 0000A700 */ 0x1B, 0x1A, 0x0D, 0x93, 0x02, 0x1B, 0x01, 0x00, 0x5F, 0x1B, 0x1B, 0x0E, 0x7B, 0x1B, 0x1A, 0x0F, +/* 0000A710 */ 0x93, 0x02, 0x1B, 0x01, 0x00, 0x5F, 0x1B, 0x1B, 0x10, 0x7B, 0x1B, 0x1A, 0x11, 0x93, 0x02, 0x1B, +/* 0000A720 */ 0x01, 0x00, 0x5F, 0x1B, 0x1B, 0x12, 0x7B, 0x1B, 0x1A, 0x13, 0x93, 0x02, 0x1B, 0x01, 0x00, 0x5F, +/* 0000A730 */ 0x1B, 0x1B, 0x14, 0x7B, 0x1B, 0x1A, 0x15, 0x93, 0x02, 0x1B, 0x01, 0x00, 0x5F, 0x1B, 0x1B, 0x16, +/* 0000A740 */ 0x7B, 0x1B, 0x1A, 0x17, 0x93, 0x02, 0x1B, 0x01, 0x00, 0x5F, 0x1B, 0x1B, 0x18, 0x7B, 0x1B, 0x1A, +/* 0000A750 */ 0x19, 0x93, 0x02, 0x1B, 0x01, 0x00, 0x5F, 0x1B, 0x1B, 0x1A, 0x7B, 0x1B, 0x1A, 0x1B, 0x93, 0x02, +/* 0000A760 */ 0x1B, 0x01, 0x00, 0x5F, 0x1B, 0x1B, 0x1C, 0x7B, 0x1B, 0x1A, 0x1D, 0x93, 0x02, 0x1B, 0x01, 0x00, +/* 0000A770 */ 0x5F, 0x1B, 0x1B, 0x1E, 0x7B, 0x1B, 0x1A, 0x1F, 0x5A, 0x01, 0x1A, 0x03, 0x00, 0x5A, 0x02, 0x13, +/* 0000A780 */ 0x03, 0x00, 0xF0, 0x03, 0x19, 0x19, 0x03, 0x00, 0x96, 0x03, 0x19, 0x8F, 0x05, 0x04, 0x19, 0x02, +/* 0000A790 */ 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x14, 0xCD, 0x1A, 0x5A, 0x01, 0x1A, 0x04, 0x00, 0x5A, 0x02, +/* 0000A7A0 */ 0x13, 0x04, 0x00, 0xF0, 0x03, 0x19, 0x19, 0x04, 0x00, 0x96, 0x04, 0x19, 0x8F, 0x05, 0x06, 0x19, +/* 0000A7B0 */ 0x03, 0x00, 0x07, 0x05, 0x00, 0x59, 0x00, 0x14, 0x8F, 0x05, 0x17, 0x1A, 0x04, 0x00, 0x5A, 0x01, +/* 0000A7C0 */ 0x1A, 0x05, 0x00, 0x8F, 0x05, 0x13, 0x1A, 0x05, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x14, 0x93, +/* 0000A7D0 */ 0x03, 0x1B, 0x06, 0x00, 0x5A, 0x01, 0x1B, 0x06, 0x00, 0xF0, 0x02, 0x1A, 0x1A, 0x06, 0x00, 0x5A, +/* 0000A7E0 */ 0x02, 0x1A, 0x05, 0x00, 0xD6, 0x00, 0x1A, 0x5A, 0x03, 0x1A, 0x05, 0x00, 0x93, 0x02, 0x1A, 0x01, +/* 0000A7F0 */ 0x00, 0x5A, 0x04, 0x1A, 0x05, 0x00, 0xF0, 0x05, 0xFF, 0x19, 0x05, 0x00, 0x8F, 0x05, 0x04, 0x19, +/* 0000A800 */ 0x02, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x14, 0x93, 0x04, 0x1A, 0x07, 0x00, 0x5A, 0x01, 0x1A, +/* 0000A810 */ 0x07, 0x00, 0x8F, 0x05, 0x09, 0x1A, 0x08, 0x00, 0x5F, 0x1A, 0x1A, 0x20, 0x5A, 0x02, 0x1A, 0x07, +/* 0000A820 */ 0x00, 0xF0, 0x03, 0x00, 0x19, 0x07, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x01, 0x40, +/* 0000A830 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x02, 0x00, +/* 0000A840 */ 0x00, 0x6B, 0x02, 0x00, 0x00, 0x49, 0x02, 0x00, 0x00, 0x74, 0x02, 0x00, 0x00, 0x6F, 0x02, 0x00, +/* 0000A850 */ 0x00, 0x76, 0x02, 0x00, 0x00, 0x6D, 0x02, 0x00, 0x00, 0x77, 0x02, 0x00, 0x00, 0x71, 0x02, 0x00, +/* 0000A860 */ 0x00, 0x6C, 0x02, 0x00, 0x00, 0x6E, 0x02, 0x00, 0x00, 0x70, 0x02, 0x00, 0x00, 0x73, 0x02, 0x00, +/* 0000A870 */ 0x00, 0x75, 0x02, 0x00, 0x00, 0xFE, 0xB6, 0x02, 0xFE, 0x05, 0x02, 0xFE, 0x5E, 0x02, 0xFE, 0xB6, +/* 0000A880 */ 0x02, 0xFE, 0x09, 0x02, 0xFE, 0x0D, 0x02, 0xFE, 0x58, 0x02, 0xFE, 0x6B, 0x02, 0xFE, 0x3D, 0x02, +/* 0000A890 */ 0xFE, 0x49, 0x02, 0xFE, 0x65, 0x02, 0xFE, 0x74, 0x02, 0xFE, 0x5D, 0x02, 0xFE, 0x6F, 0x02, 0xFE, +/* 0000A8A0 */ 0x67, 0x02, 0xFE, 0x76, 0x02, 0xFE, 0x5A, 0x02, 0xFE, 0x6D, 0x02, 0xFE, 0x6A, 0x02, 0xFE, 0x77, +/* 0000A8B0 */ 0x02, 0xFE, 0x61, 0x02, 0xFE, 0x71, 0x02, 0xFE, 0x59, 0x02, 0xFE, 0x6C, 0x02, 0xFE, 0x5C, 0x02, +/* 0000A8C0 */ 0xFE, 0x6E, 0x02, 0xFE, 0x60, 0x02, 0xFE, 0x70, 0x02, 0xFE, 0x63, 0x02, 0xFE, 0x73, 0x02, 0xFE, +/* 0000A8D0 */ 0x66, 0x02, 0xFE, 0x75, 0x02, 0xFE, 0x24, 0x01, 0xFF, 0x08, 0xA6, 0x02, 0x00, 0x0A, 0x02, 0x00, +/* 0000A8E0 */ 0x00, 0x00, 0x0B, 0x00, 0x3C, 0x00, 0x24, 0x00, 0x90, 0x00, 0x22, 0x00, 0x4B, 0x00, 0x19, 0x00, +/* 0000A8F0 */ 0x6B, 0x00, 0x24, 0x00, 0x90, 0x00, 0xE2, 0x00, 0xCE, 0x03, 0x21, 0x00, 0x3E, 0x00, 0x50, 0x00, +/* 0000A900 */ 0x98, 0x01, 0x30, 0x00, 0x44, 0x00, 0x00, 0x0B, 0xA9, 0x00, 0x00, 0x7F, 0x5C, 0x0E, 0x01, 0x00, +/* 0000A910 */ 0x10, 0x03, 0x00, 0xFE, 0x7E, 0x0E, 0x60, 0xA2, 0x41, 0xD1, 0x00, 0xC6, 0xFF, 0x6E, 0xAC, 0x02, +/* 0000A920 */ 0x00, 0xFF, 0x6E, 0xAC, 0x02, 0x00, 0x41, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0x6E, 0xAC, 0x02, +/* 0000A930 */ 0x00, 0xFE, 0x27, 0x01, 0xFE, 0x27, 0x01, 0x04, 0x05, 0x07, 0x05, 0x18, 0x18, 0x06, 0x02, 0x01, +/* 0000A940 */ 0x01, 0x05, 0x06, 0x06, 0xFE, 0x77, 0x04, 0x05, 0xFE, 0xC7, 0x04, 0x08, 0x6C, 0x8F, 0x01, 0x03, +/* 0000A950 */ 0x07, 0x00, 0x00, 0x98, 0x07, 0x07, 0x05, 0x00, 0x00, 0xA8, 0x08, 0x15, 0x08, 0x00, 0x07, 0x08, +/* 0000A960 */ 0x14, 0x03, 0x00, 0x05, 0x02, 0x09, 0x4D, 0x00, 0x8F, 0x06, 0x06, 0x07, 0x01, 0x00, 0x07, 0x04, +/* 0000A970 */ 0x00, 0x59, 0x00, 0x04, 0x8F, 0x06, 0x14, 0x08, 0x02, 0x00, 0x5A, 0x01, 0x08, 0x00, 0x00, 0x8F, +/* 0000A980 */ 0x01, 0x02, 0x08, 0x03, 0x00, 0x5A, 0x02, 0x08, 0x00, 0x00, 0x2D, 0x08, 0x03, 0x05, 0x5A, 0x03, +/* 0000A990 */ 0x08, 0x00, 0x00, 0xF0, 0x04, 0x07, 0x07, 0x00, 0x00, 0x0E, 0x18, 0x00, 0x07, 0x8F, 0x01, 0x04, +/* 0000A9A0 */ 0x07, 0x04, 0x00, 0x8F, 0x01, 0x03, 0x08, 0x00, 0x00, 0x98, 0x08, 0x08, 0x05, 0x01, 0x00, 0x9D, +/* 0000A9B0 */ 0x08, 0x07, 0x05, 0x00, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFF, 0x9C, 0xAC, 0x02, 0x00, 0x03, 0x00, +/* 0000A9C0 */ 0x00, 0x00, 0x00, 0x50, 0x00, 0xA6, 0x00, 0x1A, 0x00, 0x52, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0xC1, +/* 0000A9D0 */ 0x03, 0x10, 0x03, 0x00, 0xFE, 0x56, 0x0E, 0x39, 0xA0, 0x41, 0xD1, 0x00, 0xC4, 0xFF, 0xC6, 0xA2, +/* 0000A9E0 */ 0x02, 0x00, 0xFF, 0xC6, 0xA2, 0x02, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFF, 0xC6, 0xA2, +/* 0000A9F0 */ 0x02, 0x00, 0xFE, 0x60, 0x02, 0xFE, 0x60, 0x02, 0x05, 0x05, 0x08, 0x04, 0x22, 0x21, 0x05, 0x03, +/* 0000AA00 */ 0x01, 0x05, 0x05, 0x05, 0x05, 0x07, 0x06, 0xFE, 0x94, 0x03, 0x05, 0xFE, 0x88, 0x04, 0x06, 0xFE, +/* 0000AA10 */ 0x30, 0x03, 0x91, 0x58, 0x05, 0x2A, 0x08, 0x05, 0x15, 0x03, 0x00, 0x08, 0x02, 0x09, 0x24, 0x00, +/* 0000AA20 */ 0x8F, 0x05, 0x03, 0x09, 0x00, 0x00, 0x6D, 0x08, 0x09, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x09, +/* 0000AA30 */ 0x5A, 0x01, 0x03, 0x00, 0x00, 0x5A, 0x02, 0x04, 0x00, 0x00, 0xF4, 0x03, 0xFF, 0x08, 0x00, 0x00, +/* 0000AA40 */ 0x00, 0x00, 0x00, 0x00, 0x8F, 0x05, 0x03, 0x09, 0x00, 0x00, 0x6D, 0x08, 0x09, 0x01, 0x07, 0x02, +/* 0000AA50 */ 0x00, 0x59, 0x00, 0x09, 0x5A, 0x01, 0x05, 0x01, 0x00, 0xF4, 0x02, 0x08, 0x08, 0x01, 0x00, 0x00, +/* 0000AA60 */ 0x00, 0x01, 0x00, 0x45, 0x06, 0x08, 0xA8, 0x08, 0x14, 0x08, 0x00, 0x06, 0x08, 0x5F, 0x08, 0x06, +/* 0000AA70 */ 0x02, 0x0F, 0x24, 0x00, 0x08, 0x8F, 0x05, 0x03, 0x09, 0x00, 0x00, 0x6D, 0x08, 0x09, 0x03, 0x07, +/* 0000AA80 */ 0x03, 0x00, 0x59, 0x00, 0x09, 0x5A, 0x01, 0x03, 0x02, 0x00, 0x5A, 0x02, 0x04, 0x02, 0x00, 0xF4, +/* 0000AA90 */ 0x03, 0xFF, 0x08, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x5F, 0x00, 0x06, 0x04, 0x09, 0x02, 0x00, +/* 0000AAA0 */ 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB6, 0x02, 0xFE, 0x05, 0x02, 0xFE, 0x5E, 0x02, 0xFE, 0xB6, 0x02, +/* 0000AAB0 */ 0xFE, 0x57, 0x02, 0xFF, 0xEC, 0xA2, 0x02, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3C, +/* 0000AAC0 */ 0x00, 0x24, 0x00, 0x88, 0x00, 0x22, 0x00, 0x4B, 0x00, 0x0F, 0x00, 0x6B, 0x00, 0x24, 0x00, 0x88, +/* 0000AAD0 */ 0x00, 0x09, 0x00, 0x37, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x37, +/* 0000AAE0 */ 0x0E, 0x10, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x15, 0x04, 0xC3, 0xFF, 0x1F, 0x9C, 0x02, 0x00, 0xFF, +/* 0000AAF0 */ 0x1F, 0x9C, 0x02, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0x1F, 0x9C, 0x02, 0x00, 0xFE, +/* 0000AB00 */ 0xFD, 0x03, 0xFE, 0xFD, 0x03, 0x08, 0x06, 0x0B, 0x07, 0x55, 0x51, 0x05, 0x0A, 0x06, 0x07, 0x07, +/* 0000AB10 */ 0x07, 0x07, 0x0A, 0x06, 0xFE, 0x94, 0x03, 0x05, 0xFE, 0x88, 0x04, 0x06, 0xFE, 0x30, 0x03, 0x08, +/* 0000AB20 */ 0xFE, 0x6F, 0x01, 0x58, 0x07, 0x4E, 0x08, 0x4E, 0x09, 0x2A, 0x0B, 0x07, 0x15, 0x03, 0x00, 0x0B, +/* 0000AB30 */ 0x02, 0x09, 0x24, 0x00, 0x8F, 0x05, 0x03, 0x0C, 0x00, 0x00, 0x6D, 0x0B, 0x0C, 0x00, 0x07, 0x03, +/* 0000AB40 */ 0x00, 0x59, 0x00, 0x0C, 0x5A, 0x01, 0x03, 0x00, 0x00, 0x5A, 0x02, 0x04, 0x00, 0x00, 0xF4, 0x03, +/* 0000AB50 */ 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x05, 0x03, 0x0C, 0x00, 0x00, 0x6D, 0x0B, +/* 0000AB60 */ 0x0C, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0C, 0x5A, 0x01, 0x07, 0x01, 0x00, 0xF4, 0x02, 0x0B, +/* 0000AB70 */ 0x0B, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, 0x08, 0x0B, 0xA8, 0x0B, 0x14, 0x08, 0x00, 0x08, +/* 0000AB80 */ 0x0B, 0x5F, 0x0B, 0x08, 0x02, 0x0F, 0x24, 0x00, 0x0B, 0x8F, 0x05, 0x03, 0x0C, 0x00, 0x00, 0x6D, +/* 0000AB90 */ 0x0B, 0x0C, 0x03, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0C, 0x5A, 0x01, 0x03, 0x02, 0x00, 0x5A, 0x02, +/* 0000ABA0 */ 0x04, 0x02, 0x00, 0xF4, 0x03, 0xFF, 0x0B, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0xA8, 0x0B, 0x15, +/* 0000ABB0 */ 0x03, 0x00, 0x06, 0x0B, 0x09, 0x50, 0x00, 0x8F, 0x05, 0x21, 0x0B, 0x01, 0x00, 0x07, 0x02, 0x00, +/* 0000ABC0 */ 0x59, 0x00, 0x05, 0x5A, 0x01, 0x06, 0x03, 0x00, 0xF0, 0x02, 0x0B, 0x0B, 0x03, 0x00, 0x0F, 0x1B, +/* 0000ABD0 */ 0x00, 0x0B, 0x8F, 0x05, 0x20, 0x0B, 0x02, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x05, 0x5A, 0x01, +/* 0000ABE0 */ 0x06, 0x04, 0x00, 0xF0, 0x02, 0x0B, 0x0B, 0x04, 0x00, 0x0F, 0x1A, 0x00, 0x0B, 0x8F, 0x05, 0x03, +/* 0000ABF0 */ 0x0C, 0x00, 0x00, 0x6D, 0x0B, 0x0C, 0x04, 0x07, 0x01, 0x00, 0x59, 0x00, 0x0C, 0xF4, 0x01, 0xFF, +/* 0000AC00 */ 0x0B, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0xA8, 0x0B, 0x45, 0x09, 0x0B, 0xA8, 0x0B, 0x15, 0x03, +/* 0000AC10 */ 0x00, 0x06, 0x0B, 0x09, 0x25, 0x00, 0x8F, 0x05, 0x24, 0x0C, 0x03, 0x00, 0x6D, 0x0B, 0x0C, 0x05, +/* 0000AC20 */ 0x07, 0x02, 0x00, 0x59, 0x00, 0x0C, 0x5A, 0x01, 0x06, 0x06, 0x00, 0xF4, 0x02, 0x0B, 0x0B, 0x05, +/* 0000AC30 */ 0x00, 0x00, 0x00, 0x06, 0x00, 0x45, 0x09, 0x0B, 0x09, 0x15, 0x00, 0x8F, 0x05, 0x1C, 0x0B, 0x04, +/* 0000AC40 */ 0x00, 0x07, 0x01, 0x00, 0x59, 0x00, 0x05, 0xF0, 0x01, 0x0B, 0x0B, 0x07, 0x00, 0x45, 0x09, 0x0B, +/* 0000AC50 */ 0x8F, 0x05, 0x0C, 0x0B, 0x05, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x05, 0x8F, 0x05, 0x03, 0x0D, +/* 0000AC60 */ 0x00, 0x00, 0x6D, 0x0C, 0x0D, 0x06, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0D, 0x5A, 0x01, 0x09, 0x09, +/* 0000AC70 */ 0x00, 0x5A, 0x02, 0x08, 0x09, 0x00, 0xF4, 0x03, 0x0C, 0x0C, 0x06, 0x00, 0x00, 0x00, 0x09, 0x00, +/* 0000AC80 */ 0x5A, 0x01, 0x0C, 0x08, 0x00, 0xF0, 0x02, 0x00, 0x0B, 0x08, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, +/* 0000AC90 */ 0x24, 0x00, 0xFE, 0xB6, 0x02, 0xFE, 0x05, 0x02, 0xFE, 0x5E, 0x02, 0xFE, 0xB6, 0x02, 0xFE, 0xB9, +/* 0000ACA0 */ 0x02, 0xFE, 0x23, 0x03, 0xFE, 0xFC, 0x01, 0xFF, 0x4B, 0x9C, 0x02, 0x00, 0x0D, 0x06, 0x00, 0x00, +/* 0000ACB0 */ 0x00, 0x0B, 0x00, 0x38, 0x00, 0x24, 0x00, 0x7F, 0x00, 0x22, 0x00, 0x47, 0x00, 0x0F, 0x00, 0x67, +/* 0000ACC0 */ 0x00, 0x24, 0x00, 0x80, 0x00, 0x40, 0x00, 0x56, 0x00, 0x1A, 0x00, 0x48, 0x00, 0x05, 0x00, 0x2F, +/* 0000ACD0 */ 0x00, 0x0A, 0x00, 0x32, 0x00, 0x25, 0x00, 0x59, 0x00, 0x15, 0x00, 0x42, 0x00, 0x40, 0x00, 0x51, +/* 0000ACE0 */ 0x00, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x1C, 0x0E, 0x10, 0xA3, 0x41, +/* 0000ACF0 */ 0xC1, 0x00, 0xFE, 0x30, 0x03, 0xC2, 0xFF, 0x9D, 0x97, 0x02, 0x00, 0xFF, 0x9D, 0x97, 0x02, 0x00, +/* 0000AD00 */ 0x09, 0xFE, 0x00, 0x90, 0x03, 0x01, 0xFF, 0x9D, 0x97, 0x02, 0x00, 0xFE, 0x26, 0x04, 0xFE, 0x26, +/* 0000AD10 */ 0x04, 0x09, 0x05, 0x0B, 0x05, 0x5E, 0x57, 0x05, 0x09, 0x0A, 0x06, 0x06, 0x06, 0x06, 0x0A, 0x08, +/* 0000AD20 */ 0x06, 0xFE, 0x30, 0x03, 0x07, 0xFE, 0x8A, 0x01, 0x58, 0x07, 0x4E, 0x08, 0x4E, 0x09, 0x15, 0x05, +/* 0000AD30 */ 0x00, 0x05, 0x02, 0xA8, 0x0B, 0x45, 0x05, 0x0B, 0x15, 0x05, 0x00, 0x06, 0x02, 0xA8, 0x0B, 0x45, +/* 0000AD40 */ 0x06, 0x0B, 0x4E, 0x08, 0x4E, 0x09, 0x8F, 0x05, 0x07, 0x0B, 0x00, 0x00, 0x14, 0x0A, 0x00, 0x07, +/* 0000AD50 */ 0x0B, 0xA8, 0x0B, 0x14, 0x03, 0x00, 0x07, 0x0B, 0x09, 0x1E, 0x00, 0x8F, 0x01, 0x02, 0x0B, 0x01, +/* 0000AD60 */ 0x00, 0x4A, 0x0B, 0x07, 0x03, 0x00, 0x5A, 0x01, 0x05, 0x00, 0x00, 0x5A, 0x02, 0x06, 0x00, 0x00, +/* 0000AD70 */ 0xC5, 0x03, 0x00, 0x0B, 0x00, 0x00, 0x09, 0x37, 0x01, 0x8F, 0x05, 0x24, 0x0C, 0x02, 0x00, 0x6D, +/* 0000AD80 */ 0x0B, 0x0C, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0C, 0x5A, 0x01, 0x07, 0x01, 0x00, 0xF4, 0x02, +/* 0000AD90 */ 0x0B, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, 0x08, 0x0B, 0x8F, 0x05, 0x12, 0x0B, 0x03, +/* 0000ADA0 */ 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x08, 0x02, 0x00, 0xF0, 0x02, 0x0B, 0x0B, +/* 0000ADB0 */ 0x02, 0x00, 0x0F, 0x1F, 0x00, 0x0B, 0x8F, 0x05, 0x03, 0x0C, 0x04, 0x00, 0x6D, 0x0B, 0x0C, 0x01, +/* 0000ADC0 */ 0x07, 0x02, 0x00, 0x59, 0x00, 0x0C, 0x5A, 0x01, 0x03, 0x03, 0x00, 0xF4, 0x02, 0xFF, 0x0B, 0x01, +/* 0000ADD0 */ 0x00, 0x00, 0x00, 0x03, 0x00, 0x8F, 0x05, 0x03, 0x0C, 0x04, 0x00, 0x6D, 0x0B, 0x0C, 0x02, 0x07, +/* 0000ADE0 */ 0x02, 0x00, 0x59, 0x00, 0x0C, 0x5A, 0x01, 0x08, 0x04, 0x00, 0xF4, 0x02, 0x0B, 0x0B, 0x02, 0x00, +/* 0000ADF0 */ 0x00, 0x00, 0x04, 0x00, 0x45, 0x09, 0x0B, 0xA8, 0x0B, 0x14, 0x03, 0x00, 0x09, 0x0B, 0x09, 0x45, +/* 0000AE00 */ 0x00, 0x8F, 0x05, 0x04, 0x0B, 0x05, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0xCD, 0x0C, 0x5A, +/* 0000AE10 */ 0x01, 0x0C, 0x05, 0x00, 0x5A, 0x02, 0x04, 0x05, 0x00, 0xF0, 0x03, 0x0B, 0x0B, 0x05, 0x00, 0x45, +/* 0000AE20 */ 0x09, 0x0B, 0x8F, 0x05, 0x03, 0x0C, 0x04, 0x00, 0x6D, 0x0B, 0x0C, 0x03, 0x07, 0x03, 0x00, 0x59, +/* 0000AE30 */ 0x00, 0x0C, 0x5A, 0x01, 0x08, 0x06, 0x00, 0x5A, 0x02, 0x09, 0x06, 0x00, 0xF4, 0x03, 0xFF, 0x0B, +/* 0000AE40 */ 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x8F, 0x02, 0x08, 0x0B, 0x06, 0x00, 0x4A, 0x0B, 0x07, 0x04, +/* 0000AE50 */ 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x09, 0x07, 0x00, 0x5A, 0x02, 0x05, 0x07, 0x00, 0x5A, 0x03, +/* 0000AE60 */ 0x06, 0x07, 0x00, 0xF0, 0x04, 0xFF, 0x0B, 0x07, 0x00, 0x45, 0x0B, 0x09, 0x8F, 0x05, 0x06, 0x0C, +/* 0000AE70 */ 0x07, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x8F, 0x05, 0x1A, 0x0D, 0x08, 0x00, 0x5A, 0x01, +/* 0000AE80 */ 0x0D, 0x08, 0x00, 0x8F, 0x01, 0x03, 0x0D, 0x09, 0x00, 0x4A, 0x0D, 0x5A, 0x02, 0x0D, 0x08, 0x00, +/* 0000AE90 */ 0x5A, 0x03, 0x08, 0x08, 0x00, 0xF0, 0x04, 0x0C, 0x0C, 0x08, 0x00, 0x77, 0x0C, 0x0B, 0x04, 0x5F, +/* 0000AEA0 */ 0x0B, 0x09, 0x05, 0x82, 0x0B, 0x0B, 0x06, 0x01, 0x45, 0x00, 0x08, 0x09, 0x02, 0x00, 0xA8, 0x00, +/* 0000AEB0 */ 0x24, 0x00, 0xFE, 0x21, 0x03, 0xFE, 0xB2, 0x02, 0xFE, 0x05, 0x02, 0xFE, 0x06, 0x02, 0xFE, 0x57, +/* 0000AEC0 */ 0x02, 0xFE, 0x57, 0x02, 0xFF, 0xB5, 0x97, 0x02, 0x00, 0x10, 0x06, 0x00, 0x00, 0x00, 0x0A, 0x00, +/* 0000AED0 */ 0x15, 0x00, 0x0E, 0x00, 0x2B, 0x00, 0x15, 0x00, 0x43, 0x00, 0x1E, 0x00, 0x58, 0x00, 0x22, 0x00, +/* 0000AEE0 */ 0x37, 0x00, 0x1B, 0x00, 0x38, 0x00, 0x1F, 0x00, 0x9D, 0x00, 0x22, 0x00, 0x47, 0x00, 0x0A, 0x00, +/* 0000AEF0 */ 0x3A, 0x00, 0x21, 0x00, 0x3F, 0x00, 0x24, 0x00, 0x58, 0x00, 0x23, 0x00, 0x4F, 0x00, 0x36, 0x00, +/* 0000AF00 */ 0x66, 0x00, 0x09, 0x00, 0x3D, 0x00, 0x08, 0x00, 0x1C, 0x00, 0x00, 0x7F, 0x5D, 0x08, 0xC1, 0x03, +/* 0000AF10 */ 0x1A, 0x0B, 0x00, 0xFE, 0x15, 0x0E, 0x0D, 0xA2, 0x41, 0xD1, 0x00, 0xC0, 0xFF, 0x1A, 0x95, 0x02, +/* 0000AF20 */ 0x00, 0xFF, 0x1A, 0x95, 0x02, 0x00, 0x01, 0x40, 0xFE, 0x00, 0x90, 0x06, 0x06, 0xFF, 0x1A, 0x95, +/* 0000AF30 */ 0x02, 0x00, 0xFE, 0x9F, 0x01, 0xFE, 0x9F, 0x01, 0x04, 0xFE, 0x06, 0x01, 0xFE, 0x82, 0x04, 0xFE, +/* 0000AF40 */ 0x83, 0x04, 0xFE, 0x84, 0x04, 0x0C, 0x03, 0x0B, 0x08, 0x16, 0x16, 0x04, 0x02, 0x03, 0x01, 0x01, +/* 0000AF50 */ 0x01, 0x01, 0x08, 0x09, 0x0A, 0x08, 0x58, 0x96, 0x02, 0x03, 0x96, 0x03, 0x04, 0x96, 0x04, 0x05, +/* 0000AF60 */ 0x96, 0x05, 0x06, 0x8F, 0x04, 0x03, 0x0C, 0x00, 0x00, 0x6D, 0x0B, 0x0C, 0x00, 0x07, 0x03, 0x00, +/* 0000AF70 */ 0x59, 0x00, 0x0C, 0x8F, 0x04, 0x23, 0x0D, 0x01, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x93, +/* 0000AF80 */ 0x02, 0x0E, 0x02, 0x00, 0x5A, 0x01, 0x0E, 0x01, 0x00, 0xD6, 0x00, 0x0E, 0x5A, 0x02, 0x0E, 0x01, +/* 0000AF90 */ 0x00, 0xF0, 0x03, 0x0D, 0x0D, 0x01, 0x00, 0x5A, 0x01, 0x0D, 0x00, 0x00, 0x5A, 0x02, 0x07, 0x00, +/* 0000AFA0 */ 0x00, 0xF4, 0x03, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, +/* 0000AFB0 */ 0x04, 0x02, 0xFF, 0x6D, 0x95, 0x02, 0x00, 0x02, 0x0C, 0x00, 0x00, 0x00, 0x4A, 0x00, 0x4B, 0x01, +/* 0000AFC0 */ 0x00, 0xC5, 0xAF, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x83, 0x10, 0x03, 0x02, 0xFE, 0x16, 0x0E, +/* 0000AFD0 */ 0x49, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x87, 0x04, 0xC1, 0xFF, 0xA6, 0x95, 0x02, 0x00, 0xFF, 0xA6, +/* 0000AFE0 */ 0x95, 0x02, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x03, 0x01, 0xFF, 0xA6, 0x95, 0x02, 0x00, 0xEE, 0xEE, +/* 0000AFF0 */ 0x07, 0x03, 0x07, 0x09, 0x1C, 0x1A, 0x05, 0x01, 0x05, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x08, +/* 0000B000 */ 0x74, 0x58, 0x05, 0x15, 0x05, 0x00, 0x03, 0x02, 0xA8, 0x07, 0x45, 0x03, 0x07, 0x15, 0x05, 0x00, +/* 0000B010 */ 0x04, 0x02, 0xA8, 0x07, 0x45, 0x04, 0x07, 0x8F, 0x02, 0x09, 0x08, 0x00, 0x00, 0x4A, 0x08, 0x6D, +/* 0000B020 */ 0x07, 0x08, 0x00, 0x07, 0x08, 0x00, 0x59, 0x00, 0x08, 0x5A, 0x01, 0x05, 0x00, 0x00, 0x8F, 0x01, +/* 0000B030 */ 0x02, 0x09, 0x01, 0x00, 0x5A, 0x02, 0x09, 0x00, 0x00, 0x8F, 0x01, 0x03, 0x09, 0x02, 0x00, 0x5A, +/* 0000B040 */ 0x03, 0x09, 0x00, 0x00, 0x8F, 0x01, 0x04, 0x09, 0x03, 0x00, 0x5A, 0x04, 0x09, 0x00, 0x00, 0x8F, +/* 0000B050 */ 0x01, 0x05, 0x09, 0x04, 0x00, 0x5A, 0x05, 0x09, 0x00, 0x00, 0x5A, 0x06, 0x03, 0x00, 0x00, 0x5A, +/* 0000B060 */ 0x07, 0x04, 0x00, 0x00, 0xF4, 0x08, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, +/* 0000B070 */ 0x00, 0xA8, 0x00, 0x24, 0x00, 0x5A, 0x00, 0xFF, 0xD2, 0x95, 0x02, 0x00, 0x04, 0x02, 0x00, 0x00, +/* 0000B080 */ 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0A, 0x00, 0x2B, 0x00, 0x5C, 0x00, 0x81, 0x00, 0x00, 0x7F, 0x5D, +/* 0000B090 */ 0x08, 0xC1, 0x03, 0x1A, 0x0B, 0x00, 0xFE, 0x0F, 0x0E, 0x0D, 0xA2, 0x41, 0xD1, 0x00, 0xBE, 0xFF, +/* 0000B0A0 */ 0xC1, 0x92, 0x02, 0x00, 0xFF, 0xC1, 0x92, 0x02, 0x00, 0x01, 0x40, 0xFE, 0x00, 0x90, 0x06, 0x06, +/* 0000B0B0 */ 0xFF, 0xC1, 0x92, 0x02, 0x00, 0xFE, 0x9F, 0x01, 0xFE, 0x9F, 0x01, 0x04, 0xFE, 0x06, 0x01, 0xFE, +/* 0000B0C0 */ 0x82, 0x04, 0xFE, 0x83, 0x04, 0xFE, 0x84, 0x04, 0x0C, 0x03, 0x0B, 0x08, 0x16, 0x16, 0x04, 0x02, +/* 0000B0D0 */ 0x03, 0x01, 0x01, 0x01, 0x01, 0x08, 0x09, 0x0A, 0x08, 0x58, 0x96, 0x02, 0x03, 0x96, 0x03, 0x04, +/* 0000B0E0 */ 0x96, 0x04, 0x05, 0x96, 0x05, 0x06, 0x8F, 0x04, 0x03, 0x0C, 0x00, 0x00, 0x6D, 0x0B, 0x0C, 0x00, +/* 0000B0F0 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x0C, 0x8F, 0x04, 0x23, 0x0D, 0x01, 0x00, 0x07, 0x03, 0x00, 0x59, +/* 0000B100 */ 0x00, 0x02, 0x93, 0x02, 0x0E, 0x02, 0x00, 0x5A, 0x01, 0x0E, 0x01, 0x00, 0xD6, 0x00, 0x0E, 0x5A, +/* 0000B110 */ 0x02, 0x0E, 0x01, 0x00, 0xF0, 0x03, 0x0D, 0x0D, 0x01, 0x00, 0x5A, 0x01, 0x0D, 0x00, 0x00, 0x5A, +/* 0000B120 */ 0x02, 0x07, 0x00, 0x00, 0xF4, 0x03, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0x00, +/* 0000B130 */ 0x24, 0x00, 0xFE, 0x04, 0x02, 0xFF, 0x14, 0x93, 0x02, 0x00, 0x02, 0x0C, 0x00, 0x00, 0x00, 0x4A, +/* 0000B140 */ 0x00, 0x4B, 0x01, 0x00, 0x48, 0xB1, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x83, 0x10, 0x03, 0x02, +/* 0000B150 */ 0xFE, 0x10, 0x0E, 0x49, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x86, 0x04, 0xBF, 0xFF, 0x4D, 0x93, 0x02, +/* 0000B160 */ 0x00, 0xFF, 0x4D, 0x93, 0x02, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x03, 0x01, 0xFF, 0x4D, 0x93, 0x02, +/* 0000B170 */ 0x00, 0xEE, 0xEE, 0x07, 0x03, 0x07, 0x09, 0x1C, 0x1A, 0x05, 0x01, 0x05, 0x01, 0x01, 0x01, 0x01, +/* 0000B180 */ 0x01, 0x06, 0x08, 0x74, 0x58, 0x05, 0x15, 0x05, 0x00, 0x03, 0x02, 0xA8, 0x07, 0x45, 0x03, 0x07, +/* 0000B190 */ 0x15, 0x05, 0x00, 0x04, 0x02, 0xA8, 0x07, 0x45, 0x04, 0x07, 0x8F, 0x02, 0x09, 0x08, 0x00, 0x00, +/* 0000B1A0 */ 0x4A, 0x08, 0x6D, 0x07, 0x08, 0x00, 0x07, 0x08, 0x00, 0x59, 0x00, 0x08, 0x5A, 0x01, 0x05, 0x00, +/* 0000B1B0 */ 0x00, 0x8F, 0x01, 0x02, 0x09, 0x01, 0x00, 0x5A, 0x02, 0x09, 0x00, 0x00, 0x8F, 0x01, 0x03, 0x09, +/* 0000B1C0 */ 0x02, 0x00, 0x5A, 0x03, 0x09, 0x00, 0x00, 0x8F, 0x01, 0x04, 0x09, 0x03, 0x00, 0x5A, 0x04, 0x09, +/* 0000B1D0 */ 0x00, 0x00, 0x8F, 0x01, 0x05, 0x09, 0x04, 0x00, 0x5A, 0x05, 0x09, 0x00, 0x00, 0x5A, 0x06, 0x03, +/* 0000B1E0 */ 0x00, 0x00, 0x5A, 0x07, 0x04, 0x00, 0x00, 0xF4, 0x08, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0000B1F0 */ 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x5A, 0x00, 0xFF, 0x79, 0x93, 0x02, 0x00, 0x04, +/* 0000B200 */ 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0A, 0x00, 0x2B, 0x00, 0x5C, 0x00, 0x81, 0x00, +/* 0000B210 */ 0x00, 0x7F, 0x5D, 0x08, 0xC1, 0x03, 0x1A, 0x0B, 0x00, 0xFE, 0x09, 0x0E, 0x0D, 0xA2, 0x41, 0xD1, +/* 0000B220 */ 0x00, 0xBC, 0xFF, 0x7A, 0x90, 0x02, 0x00, 0xFF, 0x7A, 0x90, 0x02, 0x00, 0x01, 0x40, 0xFE, 0x00, +/* 0000B230 */ 0x90, 0x06, 0x06, 0xFF, 0x7A, 0x90, 0x02, 0x00, 0xFE, 0x9B, 0x01, 0xFE, 0x9B, 0x01, 0x04, 0xFE, +/* 0000B240 */ 0x06, 0x01, 0xFE, 0x82, 0x04, 0xFE, 0x83, 0x04, 0xFE, 0x84, 0x04, 0x0C, 0x03, 0x0B, 0x08, 0x16, +/* 0000B250 */ 0x16, 0x04, 0x02, 0x03, 0x01, 0x01, 0x01, 0x01, 0x08, 0x09, 0x0A, 0x08, 0x58, 0x96, 0x02, 0x03, +/* 0000B260 */ 0x96, 0x03, 0x04, 0x96, 0x04, 0x05, 0x96, 0x05, 0x06, 0x8F, 0x04, 0x03, 0x0C, 0x00, 0x00, 0x6D, +/* 0000B270 */ 0x0B, 0x0C, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0C, 0x8F, 0x04, 0x23, 0x0D, 0x01, 0x00, 0x07, +/* 0000B280 */ 0x03, 0x00, 0x59, 0x00, 0x02, 0x93, 0x02, 0x0E, 0x02, 0x00, 0x5A, 0x01, 0x0E, 0x01, 0x00, 0xD6, +/* 0000B290 */ 0x00, 0x0E, 0x5A, 0x02, 0x0E, 0x01, 0x00, 0xF0, 0x03, 0x0D, 0x0D, 0x01, 0x00, 0x5A, 0x01, 0x0D, +/* 0000B2A0 */ 0x00, 0x00, 0x5A, 0x02, 0x07, 0x00, 0x00, 0xF4, 0x03, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0000B2B0 */ 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x04, 0x02, 0xFF, 0xCD, 0x90, 0x02, 0x00, 0x02, 0x0C, 0x00, +/* 0000B2C0 */ 0x00, 0x00, 0x4A, 0x00, 0x47, 0x01, 0x00, 0xCB, 0xB2, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x83, +/* 0000B2D0 */ 0x10, 0x03, 0x02, 0xFE, 0x0A, 0x0E, 0x49, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x85, 0x04, 0xBD, 0xFF, +/* 0000B2E0 */ 0x06, 0x91, 0x02, 0x00, 0xFF, 0x06, 0x91, 0x02, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x03, 0x01, 0xFF, +/* 0000B2F0 */ 0x06, 0x91, 0x02, 0x00, 0xEA, 0xEA, 0x07, 0x03, 0x07, 0x09, 0x1C, 0x1A, 0x05, 0x01, 0x05, 0x01, +/* 0000B300 */ 0x01, 0x01, 0x01, 0x01, 0x06, 0x08, 0x74, 0x58, 0x05, 0x15, 0x05, 0x00, 0x03, 0x02, 0xA8, 0x07, +/* 0000B310 */ 0x45, 0x03, 0x07, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA8, 0x07, 0x45, 0x04, 0x07, 0x8F, 0x02, 0x09, +/* 0000B320 */ 0x08, 0x00, 0x00, 0x4A, 0x08, 0x6D, 0x07, 0x08, 0x00, 0x07, 0x08, 0x00, 0x59, 0x00, 0x08, 0x5A, +/* 0000B330 */ 0x01, 0x05, 0x00, 0x00, 0x8F, 0x01, 0x02, 0x09, 0x01, 0x00, 0x5A, 0x02, 0x09, 0x00, 0x00, 0x8F, +/* 0000B340 */ 0x01, 0x03, 0x09, 0x02, 0x00, 0x5A, 0x03, 0x09, 0x00, 0x00, 0x8F, 0x01, 0x04, 0x09, 0x03, 0x00, +/* 0000B350 */ 0x5A, 0x04, 0x09, 0x00, 0x00, 0x8F, 0x01, 0x05, 0x09, 0x04, 0x00, 0x5A, 0x05, 0x09, 0x00, 0x00, +/* 0000B360 */ 0x5A, 0x06, 0x03, 0x00, 0x00, 0x5A, 0x07, 0x04, 0x00, 0x00, 0xF4, 0x08, 0x00, 0x07, 0x00, 0x00, +/* 0000B370 */ 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x5A, 0x00, 0xFF, 0x2E, 0x91, +/* 0000B380 */ 0x02, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0A, 0x00, 0x2B, 0x00, 0x5C, +/* 0000B390 */ 0x00, 0x81, 0x00, 0x00, 0x7F, 0x5C, 0x0E, 0xC1, 0x07, 0x10, 0x03, 0x00, 0xFE, 0xD2, 0x0D, 0x0C, +/* 0000B3A0 */ 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x26, 0x04, 0xBB, 0xFF, 0x3B, 0x81, 0x02, 0x00, 0xFF, 0x3B, 0x81, +/* 0000B3B0 */ 0x02, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x07, 0x07, 0xFF, 0x3B, 0x81, 0x02, 0x00, 0xFE, 0x74, 0x06, +/* 0000B3C0 */ 0xFE, 0x74, 0x06, 0x0F, 0x07, 0x11, 0x0A, 0x89, 0x83, 0x04, 0x02, 0x01, 0x0E, 0x0C, 0x04, 0x04, +/* 0000B3D0 */ 0x04, 0x04, 0x01, 0x10, 0x06, 0xFE, 0x94, 0x03, 0x06, 0xFE, 0x2E, 0x04, 0x08, 0x05, 0xFE, 0x81, +/* 0000B3E0 */ 0x04, 0x07, 0xFE, 0x48, 0x02, 0x58, 0x0D, 0x4E, 0x0E, 0x4E, 0x0F, 0x2A, 0x11, 0x0D, 0x15, 0x0F, +/* 0000B3F0 */ 0x00, 0x11, 0x02, 0x8F, 0x04, 0x0D, 0x11, 0x00, 0x00, 0xE3, 0x11, 0x0D, 0x11, 0x00, 0x0F, 0x24, +/* 0000B400 */ 0x00, 0x11, 0x8F, 0x04, 0x03, 0x12, 0x01, 0x00, 0x6D, 0x11, 0x12, 0x00, 0x07, 0x03, 0x00, 0x59, +/* 0000B410 */ 0x00, 0x12, 0x5A, 0x01, 0x07, 0x00, 0x00, 0x5A, 0x02, 0x03, 0x00, 0x00, 0xF4, 0x03, 0xFF, 0x11, +/* 0000B420 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x04, 0x06, 0x11, 0x02, 0x00, 0x07, 0x03, 0x00, 0x59, +/* 0000B430 */ 0x00, 0x04, 0x8F, 0x04, 0x1B, 0x12, 0x03, 0x00, 0x5A, 0x01, 0x12, 0x01, 0x00, 0x8F, 0x04, 0x0D, +/* 0000B440 */ 0x12, 0x00, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x01, 0x0D, 0x02, 0x00, 0xC5, 0x02, 0x12, 0x12, 0x02, +/* 0000B450 */ 0x00, 0x5A, 0x02, 0x12, 0x01, 0x00, 0xF0, 0x03, 0x11, 0x11, 0x01, 0x00, 0x45, 0x0E, 0x11, 0x8F, +/* 0000B460 */ 0x04, 0x21, 0x11, 0x04, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x0E, 0x03, 0x00, +/* 0000B470 */ 0xF0, 0x02, 0x11, 0x11, 0x03, 0x00, 0x0F, 0x1B, 0x00, 0x11, 0x8F, 0x04, 0x20, 0x11, 0x05, 0x00, +/* 0000B480 */ 0x07, 0x02, 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x0E, 0x04, 0x00, 0xF0, 0x02, 0x11, 0x11, 0x04, +/* 0000B490 */ 0x00, 0x0F, 0x06, 0x00, 0x11, 0x45, 0x00, 0x05, 0x09, 0x90, 0x01, 0xA8, 0x11, 0x45, 0x0F, 0x11, +/* 0000B4A0 */ 0x8F, 0x04, 0x03, 0x11, 0x01, 0x00, 0x5F, 0x11, 0x11, 0x01, 0x0E, 0xB3, 0x00, 0x11, 0xA8, 0x11, +/* 0000B4B0 */ 0x14, 0x03, 0x00, 0x0B, 0x11, 0x09, 0xA9, 0x00, 0xA8, 0x11, 0x14, 0x03, 0x00, 0x0C, 0x11, 0x09, +/* 0000B4C0 */ 0x9F, 0x00, 0x8F, 0x01, 0x0A, 0x11, 0x06, 0x00, 0x4A, 0x11, 0x98, 0x11, 0x11, 0x0A, 0x00, 0x00, +/* 0000B4D0 */ 0x0E, 0x14, 0x00, 0x11, 0x8F, 0x01, 0x0A, 0x11, 0x06, 0x00, 0x4A, 0x11, 0x98, 0x11, 0x11, 0x0A, +/* 0000B4E0 */ 0x01, 0x00, 0x45, 0x0F, 0x11, 0x09, 0x79, 0x00, 0x8F, 0x04, 0x04, 0x11, 0x07, 0x00, 0x07, 0x03, +/* 0000B4F0 */ 0x00, 0x59, 0x00, 0x04, 0xCD, 0x12, 0x5A, 0x01, 0x12, 0x05, 0x00, 0x5A, 0x02, 0x06, 0x05, 0x00, +/* 0000B500 */ 0xF0, 0x03, 0x11, 0x11, 0x05, 0x00, 0x45, 0x0F, 0x11, 0x8F, 0x01, 0x08, 0x11, 0x08, 0x00, 0x4A, +/* 0000B510 */ 0x11, 0x07, 0x04, 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x0F, 0x06, 0x00, 0xA8, 0x12, 0x5A, 0x02, +/* 0000B520 */ 0x12, 0x06, 0x00, 0x8F, 0x01, 0x02, 0x12, 0x09, 0x00, 0x4A, 0x12, 0x07, 0x04, 0x00, 0x59, 0x00, +/* 0000B530 */ 0x04, 0xA8, 0x13, 0x5A, 0x01, 0x13, 0x07, 0x00, 0x5A, 0x02, 0x08, 0x07, 0x00, 0x5A, 0x03, 0x09, +/* 0000B540 */ 0x07, 0x00, 0xF0, 0x04, 0x12, 0x12, 0x07, 0x00, 0x5A, 0x03, 0x12, 0x06, 0x00, 0xF0, 0x04, 0xFF, +/* 0000B550 */ 0x11, 0x06, 0x00, 0x8F, 0x01, 0x0A, 0x11, 0x06, 0x00, 0x4A, 0x11, 0x9D, 0x0F, 0x11, 0x0A, 0x00, +/* 0000B560 */ 0x00, 0x0F, 0x67, 0x00, 0x0F, 0x8F, 0x04, 0x04, 0x11, 0x07, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 0000B570 */ 0x04, 0xCD, 0x12, 0x5A, 0x01, 0x12, 0x08, 0x00, 0x5A, 0x02, 0x06, 0x08, 0x00, 0xF0, 0x03, 0x11, +/* 0000B580 */ 0x11, 0x08, 0x00, 0x45, 0x0F, 0x11, 0x8F, 0x01, 0x08, 0x11, 0x08, 0x00, 0x4A, 0x11, 0x07, 0x04, +/* 0000B590 */ 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x0F, 0x09, 0x00, 0x5A, 0x02, 0x0B, 0x09, 0x00, 0x8F, 0x01, +/* 0000B5A0 */ 0x02, 0x12, 0x09, 0x00, 0x4A, 0x12, 0x07, 0x04, 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x0C, 0x0A, +/* 0000B5B0 */ 0x00, 0x5A, 0x02, 0x08, 0x0A, 0x00, 0x5A, 0x03, 0x09, 0x0A, 0x00, 0xF0, 0x04, 0x12, 0x12, 0x0A, +/* 0000B5C0 */ 0x00, 0x5A, 0x03, 0x12, 0x09, 0x00, 0xF0, 0x04, 0xFF, 0x11, 0x09, 0x00, 0x8F, 0x04, 0x0C, 0x11, +/* 0000B5D0 */ 0x0A, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x04, 0x8F, 0x04, 0x03, 0x13, 0x01, 0x00, 0x6D, 0x12, +/* 0000B5E0 */ 0x13, 0x02, 0x07, 0x03, 0x00, 0x59, 0x00, 0x13, 0x8F, 0x04, 0x24, 0x15, 0x0B, 0x00, 0x6D, 0x14, +/* 0000B5F0 */ 0x15, 0x03, 0x07, 0x02, 0x00, 0x59, 0x00, 0x15, 0x5A, 0x01, 0x0D, 0x0D, 0x00, 0xF4, 0x02, 0x14, +/* 0000B600 */ 0x14, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x5A, 0x01, 0x14, 0x0C, 0x00, 0x5A, 0x02, 0x0F, 0x0C, +/* 0000B610 */ 0x00, 0xF4, 0x03, 0x12, 0x12, 0x02, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x5A, 0x01, 0x12, 0x0B, 0x00, +/* 0000B620 */ 0xF0, 0x02, 0x00, 0x11, 0x0B, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB6, 0x02, +/* 0000B630 */ 0xFE, 0x4D, 0x03, 0xFE, 0xFC, 0x01, 0xFE, 0x23, 0x03, 0xFF, 0xB4, 0x81, 0x02, 0x00, 0x11, 0x06, +/* 0000B640 */ 0x00, 0x00, 0x00, 0x17, 0x00, 0x4F, 0x00, 0x24, 0x00, 0x50, 0x00, 0x39, 0x00, 0x53, 0x00, 0x36, +/* 0000B650 */ 0x00, 0x3C, 0x00, 0x06, 0x00, 0x3A, 0x00, 0x05, 0x00, 0x2D, 0x00, 0x22, 0x00, 0xCE, 0x00, 0x12, +/* 0000B660 */ 0x00, 0x84, 0x00, 0x14, 0x00, 0xA2, 0x00, 0x21, 0x00, 0x3E, 0x00, 0x4A, 0x00, 0x7A, 0x00, 0x0E, +/* 0000B670 */ 0x00, 0x7C, 0x00, 0x04, 0x00, 0x28, 0x00, 0x21, 0x00, 0x3A, 0x00, 0x46, 0x00, 0x81, 0x00, 0x5F, +/* 0000B680 */ 0x00, 0x5A, 0x00, 0x00, 0x7F, 0x5C, 0x1A, 0xC1, 0x53, 0x50, 0x43, 0x00, 0xFE, 0x45, 0x0D, 0x0C, +/* 0000B690 */ 0xB3, 0x41, 0xC1, 0x00, 0xFE, 0x29, 0x04, 0xBA, 0xFF, 0x24, 0x64, 0x02, 0x00, 0xFF, 0x24, 0x64, +/* 0000B6A0 */ 0x02, 0x00, 0x45, 0xFE, 0x00, 0x90, 0x04, 0x04, 0xFF, 0x24, 0x64, 0x02, 0x00, 0xFE, 0x7E, 0x1B, +/* 0000B6B0 */ 0xFE, 0x7E, 0x1B, 0x1C, 0x29, 0x41, 0x07, 0xFE, 0xB3, 0x01, 0xFE, 0x96, 0x01, 0x04, 0x01, 0x22, +/* 0000B6C0 */ 0x0C, 0x0F, 0x2D, 0x2D, 0x2D, 0x2D, 0x01, 0x01, 0x40, 0x41, 0x06, 0xFE, 0x94, 0x03, 0x06, 0xFE, +/* 0000B6D0 */ 0xBA, 0x04, 0x08, 0x06, 0xFE, 0x30, 0x03, 0x0B, 0x06, 0xFE, 0x3F, 0x04, 0x06, 0xFE, 0x42, 0x04, +/* 0000B6E0 */ 0x06, 0xFE, 0xE0, 0x03, 0x06, 0xFE, 0xA3, 0x03, 0x05, 0xFE, 0x9C, 0x03, 0x05, 0xFE, 0xDF, 0x03, +/* 0000B6F0 */ 0x06, 0xFE, 0x77, 0x04, 0x06, 0xFE, 0x33, 0x04, 0x06, 0xFE, 0x2F, 0x04, 0x06, 0xFE, 0x30, 0x04, +/* 0000B700 */ 0x06, 0xFE, 0x31, 0x04, 0x06, 0xFE, 0x34, 0x04, 0x06, 0xFE, 0x35, 0x04, 0x06, 0xFE, 0x32, 0x04, +/* 0000B710 */ 0x06, 0xFE, 0xF8, 0x03, 0x06, 0xFE, 0x36, 0x04, 0x06, 0xFE, 0x37, 0x04, 0x06, 0xFE, 0x38, 0x04, +/* 0000B720 */ 0x06, 0xFE, 0x39, 0x04, 0x06, 0xFE, 0x3A, 0x04, 0x06, 0xFE, 0x3B, 0x04, 0x06, 0xFE, 0x55, 0x04, +/* 0000B730 */ 0x06, 0xFE, 0xA2, 0x03, 0x05, 0xFE, 0x7C, 0x04, 0x05, 0xFE, 0x7D, 0x04, 0x05, 0xFE, 0x00, 0x05, +/* 0000B740 */ 0x05, 0xFE, 0x01, 0x05, 0x07, 0x06, 0xFE, 0x17, 0x04, 0x06, 0xFE, 0x74, 0x04, 0x0C, 0x05, 0xFE, +/* 0000B750 */ 0x02, 0x05, 0x06, 0xFE, 0x40, 0x04, 0x01, 0x00, 0xFE, 0x0C, 0x07, 0xA8, 0x3F, 0x2A, 0x42, 0x29, +/* 0000B760 */ 0x0D, 0x03, 0x00, 0x42, 0x02, 0x09, 0x1A, 0x00, 0x8F, 0x04, 0x03, 0x43, 0x00, 0x00, 0x6D, 0x42, +/* 0000B770 */ 0x43, 0x00, 0x07, 0x01, 0x00, 0x59, 0x00, 0x43, 0xF4, 0x01, 0xFF, 0x42, 0x00, 0x00, 0x00, 0x00, +/* 0000B780 */ 0x00, 0x00, 0x8F, 0x04, 0x06, 0x42, 0x01, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x04, 0x8F, 0x04, +/* 0000B790 */ 0x14, 0x43, 0x02, 0x00, 0x5A, 0x01, 0x43, 0x01, 0x00, 0x5A, 0x02, 0x29, 0x01, 0x00, 0x5A, 0x03, +/* 0000B7A0 */ 0x03, 0x01, 0x00, 0xF0, 0x04, 0x42, 0x42, 0x01, 0x00, 0x0E, 0x2C, 0x00, 0x42, 0x5F, 0x42, 0x29, +/* 0000B7B0 */ 0x01, 0x0E, 0x24, 0x00, 0x42, 0x8F, 0x04, 0x03, 0x43, 0x00, 0x00, 0x6D, 0x42, 0x43, 0x02, 0x07, +/* 0000B7C0 */ 0x03, 0x00, 0x59, 0x00, 0x43, 0x5A, 0x01, 0x05, 0x02, 0x00, 0x5A, 0x02, 0x05, 0x02, 0x00, 0xF4, +/* 0000B7D0 */ 0x03, 0xFF, 0x42, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x77, 0x06, 0x29, 0x03, 0x8F, 0x01, 0x02, +/* 0000B7E0 */ 0x42, 0x03, 0x00, 0x4A, 0x42, 0x07, 0x04, 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x2B, 0x03, 0x00, +/* 0000B7F0 */ 0x5A, 0x02, 0x07, 0x03, 0x00, 0x5A, 0x03, 0x08, 0x03, 0x00, 0xF0, 0x04, 0x42, 0x42, 0x03, 0x00, +/* 0000B800 */ 0x45, 0x2B, 0x42, 0x8F, 0x03, 0x02, 0x42, 0x04, 0x00, 0x4A, 0x42, 0x07, 0x06, 0x00, 0x59, 0x00, +/* 0000B810 */ 0x04, 0x5A, 0x01, 0x2B, 0x04, 0x00, 0x5A, 0x02, 0x09, 0x04, 0x00, 0x5A, 0x03, 0x0A, 0x04, 0x00, +/* 0000B820 */ 0xD0, 0x43, 0x02, 0x00, 0x00, 0xA1, 0x00, 0x0B, 0x43, 0xA1, 0x01, 0x0C, 0x43, 0x5A, 0x04, 0x43, +/* 0000B830 */ 0x04, 0x00, 0x5A, 0x05, 0x0C, 0x04, 0x00, 0xF0, 0x06, 0x42, 0x42, 0x04, 0x00, 0x45, 0x2E, 0x42, +/* 0000B840 */ 0x8F, 0x03, 0x02, 0x42, 0x04, 0x00, 0x4A, 0x42, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, +/* 0000B850 */ 0x2B, 0x05, 0x00, 0x5A, 0x02, 0x0D, 0x05, 0x00, 0x5A, 0x03, 0x0A, 0x05, 0x00, 0xA8, 0x43, 0x5A, +/* 0000B860 */ 0x04, 0x43, 0x05, 0x00, 0xA8, 0x43, 0x5A, 0x05, 0x43, 0x05, 0x00, 0xF0, 0x06, 0x42, 0x42, 0x05, +/* 0000B870 */ 0x00, 0x45, 0x2F, 0x42, 0xA8, 0x42, 0x15, 0x03, 0x00, 0x2F, 0x42, 0x09, 0x25, 0x00, 0x8F, 0x04, +/* 0000B880 */ 0x03, 0x43, 0x00, 0x00, 0x6D, 0x42, 0x43, 0x04, 0x07, 0x02, 0x00, 0x59, 0x00, 0x43, 0x5A, 0x01, +/* 0000B890 */ 0x2F, 0x06, 0x00, 0xF4, 0x02, 0x42, 0x42, 0x04, 0x00, 0x00, 0x00, 0x06, 0x00, 0x45, 0x2F, 0x42, +/* 0000B8A0 */ 0x09, 0x1D, 0x00, 0x8F, 0x04, 0x03, 0x43, 0x00, 0x00, 0x6D, 0x42, 0x43, 0x05, 0x07, 0x01, 0x00, +/* 0000B8B0 */ 0x59, 0x00, 0x43, 0xF4, 0x01, 0x42, 0x42, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x45, 0x2F, 0x42, +/* 0000B8C0 */ 0xA8, 0x42, 0x14, 0x03, 0x00, 0x2F, 0x42, 0x09, 0x1A, 0x00, 0x8F, 0x04, 0x03, 0x43, 0x00, 0x00, +/* 0000B8D0 */ 0x6D, 0x42, 0x43, 0x06, 0x07, 0x01, 0x00, 0x59, 0x00, 0x43, 0xF4, 0x01, 0xFF, 0x42, 0x06, 0x00, +/* 0000B8E0 */ 0x00, 0x00, 0x08, 0x00, 0x8F, 0x03, 0x02, 0x42, 0x04, 0x00, 0x4A, 0x42, 0x07, 0x06, 0x00, 0x59, +/* 0000B8F0 */ 0x00, 0x04, 0x5A, 0x01, 0x2B, 0x09, 0x00, 0x5A, 0x02, 0x0E, 0x09, 0x00, 0x5A, 0x03, 0x0A, 0x09, +/* 0000B900 */ 0x00, 0xD0, 0x43, 0x03, 0x01, 0x00, 0xA1, 0x00, 0x0F, 0x43, 0xA1, 0x01, 0x10, 0x43, 0xA1, 0x02, +/* 0000B910 */ 0x11, 0x43, 0x5A, 0x04, 0x43, 0x09, 0x00, 0xA8, 0x43, 0x5A, 0x05, 0x43, 0x09, 0x00, 0xF0, 0x06, +/* 0000B920 */ 0x42, 0x42, 0x09, 0x00, 0x45, 0x30, 0x42, 0x8F, 0x03, 0x02, 0x42, 0x04, 0x00, 0x4A, 0x42, 0x07, +/* 0000B930 */ 0x06, 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x2B, 0x0A, 0x00, 0x5A, 0x02, 0x12, 0x0A, 0x00, 0x5A, +/* 0000B940 */ 0x03, 0x0A, 0x0A, 0x00, 0xD0, 0x43, 0x03, 0x02, 0x00, 0xA1, 0x00, 0x0F, 0x43, 0xA1, 0x01, 0x10, +/* 0000B950 */ 0x43, 0xA1, 0x02, 0x11, 0x43, 0x5A, 0x04, 0x43, 0x0A, 0x00, 0xA8, 0x43, 0x5A, 0x05, 0x43, 0x0A, +/* 0000B960 */ 0x00, 0xF0, 0x06, 0x42, 0x42, 0x0A, 0x00, 0x45, 0x31, 0x42, 0x8F, 0x03, 0x02, 0x42, 0x04, 0x00, +/* 0000B970 */ 0x4A, 0x42, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x2B, 0x0B, 0x00, 0x5A, 0x02, 0x13, +/* 0000B980 */ 0x0B, 0x00, 0x5A, 0x03, 0x0A, 0x0B, 0x00, 0xD0, 0x43, 0x02, 0x03, 0x00, 0xA1, 0x00, 0x14, 0x43, +/* 0000B990 */ 0xA1, 0x01, 0x15, 0x43, 0x5A, 0x04, 0x43, 0x0B, 0x00, 0xA8, 0x43, 0x5A, 0x05, 0x43, 0x0B, 0x00, +/* 0000B9A0 */ 0xF0, 0x06, 0x42, 0x42, 0x0B, 0x00, 0x45, 0x32, 0x42, 0x8F, 0x03, 0x02, 0x42, 0x04, 0x00, 0x4A, +/* 0000B9B0 */ 0x42, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x2B, 0x0C, 0x00, 0x5A, 0x02, 0x16, 0x0C, +/* 0000B9C0 */ 0x00, 0x5A, 0x03, 0x0A, 0x0C, 0x00, 0xD0, 0x43, 0x05, 0x04, 0x00, 0xA1, 0x00, 0x14, 0x43, 0xA1, +/* 0000B9D0 */ 0x01, 0x15, 0x43, 0xA1, 0x02, 0x0F, 0x43, 0xA1, 0x03, 0x10, 0x43, 0xA1, 0x04, 0x11, 0x43, 0x5A, +/* 0000B9E0 */ 0x04, 0x43, 0x0C, 0x00, 0xA8, 0x43, 0x5A, 0x05, 0x43, 0x0C, 0x00, 0xF0, 0x06, 0x42, 0x42, 0x0C, +/* 0000B9F0 */ 0x00, 0x45, 0x33, 0x42, 0x8F, 0x03, 0x02, 0x42, 0x04, 0x00, 0x4A, 0x42, 0x07, 0x06, 0x00, 0x59, +/* 0000BA00 */ 0x00, 0x04, 0x5A, 0x01, 0x2B, 0x0D, 0x00, 0x5A, 0x02, 0x17, 0x0D, 0x00, 0x5A, 0x03, 0x0A, 0x0D, +/* 0000BA10 */ 0x00, 0xD0, 0x43, 0x02, 0x05, 0x00, 0xA1, 0x00, 0x14, 0x43, 0xA1, 0x01, 0x15, 0x43, 0x5A, 0x04, +/* 0000BA20 */ 0x43, 0x0D, 0x00, 0xA8, 0x43, 0x5A, 0x05, 0x43, 0x0D, 0x00, 0xF0, 0x06, 0x42, 0x42, 0x0D, 0x00, +/* 0000BA30 */ 0x45, 0x34, 0x42, 0x8F, 0x03, 0x02, 0x42, 0x04, 0x00, 0x4A, 0x42, 0x07, 0x06, 0x00, 0x59, 0x00, +/* 0000BA40 */ 0x04, 0x5A, 0x01, 0x2B, 0x0E, 0x00, 0x5A, 0x02, 0x18, 0x0E, 0x00, 0x5A, 0x03, 0x0A, 0x0E, 0x00, +/* 0000BA50 */ 0xD0, 0x43, 0x02, 0x06, 0x00, 0xA1, 0x00, 0x14, 0x43, 0xA1, 0x01, 0x15, 0x43, 0x5A, 0x04, 0x43, +/* 0000BA60 */ 0x0E, 0x00, 0xA8, 0x43, 0x5A, 0x05, 0x43, 0x0E, 0x00, 0xF0, 0x06, 0x42, 0x42, 0x0E, 0x00, 0x45, +/* 0000BA70 */ 0x35, 0x42, 0x8F, 0x03, 0x02, 0x42, 0x04, 0x00, 0x4A, 0x42, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, +/* 0000BA80 */ 0x5A, 0x01, 0x2B, 0x0F, 0x00, 0x5A, 0x02, 0x19, 0x0F, 0x00, 0x5A, 0x03, 0x0A, 0x0F, 0x00, 0xD0, +/* 0000BA90 */ 0x43, 0x02, 0x07, 0x00, 0xA1, 0x00, 0x14, 0x43, 0xA1, 0x01, 0x15, 0x43, 0x5A, 0x04, 0x43, 0x0F, +/* 0000BAA0 */ 0x00, 0xA8, 0x43, 0x5A, 0x05, 0x43, 0x0F, 0x00, 0xF0, 0x06, 0x42, 0x42, 0x0F, 0x00, 0x45, 0x36, +/* 0000BAB0 */ 0x42, 0x8F, 0x03, 0x02, 0x42, 0x04, 0x00, 0x4A, 0x42, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, 0x5A, +/* 0000BAC0 */ 0x01, 0x2B, 0x10, 0x00, 0x5A, 0x02, 0x1A, 0x10, 0x00, 0x5A, 0x03, 0x0A, 0x10, 0x00, 0xD0, 0x43, +/* 0000BAD0 */ 0x02, 0x08, 0x00, 0xA1, 0x00, 0x14, 0x43, 0xA1, 0x01, 0x15, 0x43, 0x5A, 0x04, 0x43, 0x10, 0x00, +/* 0000BAE0 */ 0xA8, 0x43, 0x5A, 0x05, 0x43, 0x10, 0x00, 0xF0, 0x06, 0x42, 0x42, 0x10, 0x00, 0x45, 0x37, 0x42, +/* 0000BAF0 */ 0x8F, 0x03, 0x02, 0x42, 0x04, 0x00, 0x4A, 0x42, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, +/* 0000BB00 */ 0x2B, 0x11, 0x00, 0x5A, 0x02, 0x1B, 0x11, 0x00, 0x5A, 0x03, 0x0A, 0x11, 0x00, 0xD0, 0x43, 0x02, +/* 0000BB10 */ 0x09, 0x00, 0xA1, 0x00, 0x10, 0x43, 0xA1, 0x01, 0x11, 0x43, 0x5A, 0x04, 0x43, 0x11, 0x00, 0xA8, +/* 0000BB20 */ 0x43, 0x5A, 0x05, 0x43, 0x11, 0x00, 0xF0, 0x06, 0x42, 0x42, 0x11, 0x00, 0x45, 0x38, 0x42, 0x0E, +/* 0000BB30 */ 0x37, 0x00, 0x35, 0x8F, 0x03, 0x02, 0x43, 0x04, 0x00, 0x4A, 0x43, 0x07, 0x06, 0x00, 0x59, 0x00, +/* 0000BB40 */ 0x04, 0x5A, 0x01, 0x2B, 0x12, 0x00, 0x5A, 0x02, 0x1C, 0x12, 0x00, 0x5A, 0x03, 0x1D, 0x12, 0x00, +/* 0000BB50 */ 0xA8, 0x44, 0x5A, 0x04, 0x44, 0x12, 0x00, 0xA8, 0x44, 0x5A, 0x05, 0x44, 0x12, 0x00, 0xF0, 0x06, +/* 0000BB60 */ 0x43, 0x43, 0x12, 0x00, 0x45, 0x42, 0x43, 0x09, 0x05, 0x00, 0xA8, 0x43, 0x46, 0x42, 0x43, 0x45, +/* 0000BB70 */ 0x39, 0x42, 0x8F, 0x03, 0x02, 0x42, 0x04, 0x00, 0x4A, 0x42, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, +/* 0000BB80 */ 0x5A, 0x01, 0x2B, 0x13, 0x00, 0x5A, 0x02, 0x1E, 0x13, 0x00, 0x5A, 0x03, 0x0A, 0x13, 0x00, 0xD0, +/* 0000BB90 */ 0x43, 0x02, 0x0A, 0x00, 0xA1, 0x00, 0x1F, 0x43, 0xA1, 0x01, 0x0C, 0x43, 0x5A, 0x04, 0x43, 0x13, +/* 0000BBA0 */ 0x00, 0x5A, 0x05, 0x0C, 0x13, 0x00, 0xF0, 0x06, 0x42, 0x42, 0x13, 0x00, 0x45, 0x3A, 0x42, 0xA8, +/* 0000BBB0 */ 0x42, 0x15, 0x03, 0x00, 0x39, 0x42, 0x09, 0x13, 0x00, 0x0E, 0x06, 0x00, 0x39, 0x45, 0x43, 0x20, +/* 0000BBC0 */ 0x09, 0x03, 0x00, 0x46, 0x43, 0x21, 0x45, 0x42, 0x43, 0x09, 0x05, 0x00, 0xA8, 0x43, 0x46, 0x42, +/* 0000BBD0 */ 0x43, 0x45, 0x3B, 0x42, 0x8F, 0x01, 0x03, 0x42, 0x05, 0x00, 0x4A, 0x42, 0x07, 0x02, 0x00, 0x59, +/* 0000BBE0 */ 0x00, 0x04, 0x8F, 0x04, 0x04, 0x43, 0x06, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x04, 0xCE, 0x00, +/* 0000BBF0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x7B, 0x30, 0x44, 0x07, 0x7B, +/* 0000BC00 */ 0x31, 0x44, 0x08, 0x7B, 0x32, 0x44, 0x09, 0x7B, 0x33, 0x44, 0x0A, 0x7B, 0x34, 0x44, 0x0B, 0x7B, +/* 0000BC10 */ 0x35, 0x44, 0x0C, 0x7B, 0x36, 0x44, 0x0D, 0x7B, 0x37, 0x44, 0x0E, 0x7B, 0x38, 0x44, 0x0F, 0x5A, +/* 0000BC20 */ 0x01, 0x44, 0x15, 0x00, 0x5A, 0x02, 0x22, 0x15, 0x00, 0xF0, 0x03, 0x43, 0x43, 0x15, 0x00, 0x5A, +/* 0000BC30 */ 0x01, 0x43, 0x14, 0x00, 0xF0, 0x02, 0x42, 0x42, 0x14, 0x00, 0x45, 0x3C, 0x42, 0x8F, 0x03, 0x07, +/* 0000BC40 */ 0x42, 0x07, 0x00, 0x4A, 0x42, 0x07, 0x02, 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x2A, 0x16, 0x00, +/* 0000BC50 */ 0xF0, 0x02, 0x42, 0x42, 0x16, 0x00, 0x45, 0x2A, 0x42, 0x8F, 0x04, 0x2A, 0x42, 0x08, 0x00, 0x07, +/* 0000BC60 */ 0x05, 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x2A, 0x17, 0x00, 0x5A, 0x02, 0x2E, 0x17, 0x00, 0xD0, +/* 0000BC70 */ 0x43, 0x02, 0x0B, 0x00, 0xA1, 0x00, 0x23, 0x43, 0xA1, 0x01, 0x24, 0x43, 0x5A, 0x03, 0x43, 0x17, +/* 0000BC80 */ 0x00, 0x8F, 0x04, 0x2B, 0x43, 0x09, 0x00, 0x5A, 0x04, 0x43, 0x17, 0x00, 0xF0, 0x05, 0x42, 0x42, +/* 0000BC90 */ 0x17, 0x00, 0x45, 0x3D, 0x42, 0x77, 0x2E, 0x29, 0x10, 0x77, 0x2F, 0x29, 0x11, 0x5F, 0x42, 0x3D, +/* 0000BCA0 */ 0x12, 0x77, 0x42, 0x29, 0x13, 0x77, 0x30, 0x29, 0x14, 0x77, 0x31, 0x29, 0x15, 0x77, 0x32, 0x29, +/* 0000BCB0 */ 0x16, 0x77, 0x33, 0x29, 0x17, 0x77, 0x34, 0x29, 0x18, 0x77, 0x35, 0x29, 0x19, 0x77, 0x36, 0x29, +/* 0000BCC0 */ 0x1A, 0x77, 0x37, 0x29, 0x1B, 0x77, 0x38, 0x29, 0x1C, 0x77, 0x39, 0x29, 0x1D, 0x77, 0x3A, 0x29, +/* 0000BCD0 */ 0x1E, 0x77, 0x3B, 0x29, 0x1F, 0x77, 0x3C, 0x29, 0x20, 0x45, 0x3E, 0x25, 0xE7, 0x22, 0x00, 0x8F, +/* 0000BCE0 */ 0x03, 0x0B, 0x42, 0x0A, 0x00, 0x4A, 0x42, 0x07, 0x03, 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x29, +/* 0000BCF0 */ 0x18, 0x00, 0x5A, 0x02, 0x25, 0x18, 0x00, 0xF0, 0x03, 0xFF, 0x42, 0x18, 0x00, 0xEB, 0x09, 0x69, +/* 0000BD00 */ 0x00, 0xE9, 0x2C, 0x06, 0x8F, 0x04, 0x22, 0x42, 0x0B, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x04, +/* 0000BD10 */ 0x5A, 0x01, 0x2C, 0x19, 0x00, 0xF0, 0x02, 0xFF, 0x42, 0x19, 0x00, 0x8F, 0x01, 0x02, 0x42, 0x03, +/* 0000BD20 */ 0x00, 0x4A, 0x42, 0x07, 0x04, 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x2B, 0x1A, 0x00, 0x5A, 0x02, +/* 0000BD30 */ 0x26, 0x1A, 0x00, 0x5A, 0x03, 0x27, 0x1A, 0x00, 0xF0, 0x04, 0x42, 0x42, 0x1A, 0x00, 0x45, 0x3F, +/* 0000BD40 */ 0x42, 0x45, 0x42, 0x29, 0x8F, 0x01, 0x03, 0x43, 0x05, 0x00, 0x4A, 0x43, 0x07, 0x03, 0x00, 0x59, +/* 0000BD50 */ 0x00, 0x04, 0x5A, 0x01, 0x3F, 0x1B, 0x00, 0x5A, 0x02, 0x22, 0x1B, 0x00, 0xF0, 0x03, 0x43, 0x43, +/* 0000BD60 */ 0x1B, 0x00, 0x77, 0x43, 0x42, 0x21, 0x45, 0x3E, 0x06, 0xEB, 0x0F, 0x2F, 0x00, 0x3E, 0x45, 0x42, +/* 0000BD70 */ 0x29, 0x8F, 0x01, 0x07, 0x43, 0x0C, 0x00, 0x4A, 0x43, 0x07, 0x03, 0x00, 0x59, 0x00, 0x04, 0x5F, +/* 0000BD80 */ 0x44, 0x29, 0x22, 0x98, 0x44, 0x44, 0x28, 0x00, 0x00, 0x5A, 0x01, 0x44, 0x1C, 0x00, 0x5A, 0x02, +/* 0000BD90 */ 0x29, 0x1C, 0x00, 0xF0, 0x03, 0x43, 0x43, 0x1C, 0x00, 0x77, 0x43, 0x42, 0x23, 0xE7, 0x22, 0x00, +/* 0000BDA0 */ 0x8F, 0x03, 0x0B, 0x42, 0x0A, 0x00, 0x4A, 0x42, 0x07, 0x03, 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, +/* 0000BDB0 */ 0x29, 0x1D, 0x00, 0x5A, 0x02, 0x06, 0x1D, 0x00, 0xF0, 0x03, 0xFF, 0x42, 0x1D, 0x00, 0xEB, 0x09, +/* 0000BDC0 */ 0x35, 0x00, 0xE9, 0x2D, 0x06, 0x8F, 0x04, 0x22, 0x42, 0x0B, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 0000BDD0 */ 0x04, 0x5A, 0x01, 0x2D, 0x1E, 0x00, 0xF0, 0x02, 0xFF, 0x42, 0x1E, 0x00, 0x8F, 0x04, 0x03, 0x43, +/* 0000BDE0 */ 0x00, 0x00, 0x6D, 0x42, 0x43, 0x24, 0x07, 0x01, 0x00, 0x59, 0x00, 0x43, 0xF4, 0x01, 0xFF, 0x42, +/* 0000BDF0 */ 0x24, 0x00, 0x00, 0x00, 0x1F, 0x00, 0xEB, 0x8F, 0x01, 0x04, 0x42, 0x0D, 0x00, 0x4A, 0x42, 0x07, +/* 0000BE00 */ 0x02, 0x00, 0x59, 0x00, 0x04, 0x5F, 0x43, 0x29, 0x25, 0x5A, 0x01, 0x43, 0x20, 0x00, 0xF0, 0x02, +/* 0000BE10 */ 0x42, 0x42, 0x20, 0x00, 0x77, 0x42, 0x29, 0x26, 0x45, 0x42, 0x29, 0x8F, 0x04, 0x06, 0x43, 0x01, +/* 0000BE20 */ 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x04, 0x8F, 0x04, 0x1E, 0x44, 0x0E, 0x00, 0x5A, 0x01, 0x44, +/* 0000BE30 */ 0x21, 0x00, 0x5F, 0x44, 0x29, 0x27, 0x5A, 0x02, 0x44, 0x21, 0x00, 0xF0, 0x03, 0x43, 0x43, 0x21, +/* 0000BE40 */ 0x00, 0x77, 0x43, 0x42, 0x28, 0x5F, 0x42, 0x29, 0x29, 0xA8, 0x43, 0x15, 0x03, 0x00, 0x42, 0x43, +/* 0000BE50 */ 0x09, 0x0C, 0x00, 0x5F, 0x42, 0x29, 0x2A, 0x41, 0x42, 0x42, 0x20, 0x77, 0x42, 0x29, 0x2B, 0x77, +/* 0000BE60 */ 0x06, 0x29, 0x2C, 0xA8, 0x00, 0x24, 0x00, 0x01, 0x2C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x09, +/* 0000BE70 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x02, 0x00, 0x00, 0x6D, 0x02, 0x00, 0x00, 0x77, 0x02, +/* 0000BE80 */ 0x00, 0x00, 0x71, 0x02, 0x00, 0x00, 0x6C, 0x02, 0x00, 0x00, 0x6E, 0x02, 0x00, 0x00, 0x70, 0x02, +/* 0000BE90 */ 0x00, 0x00, 0x73, 0x02, 0x00, 0x00, 0x75, 0x02, 0x00, 0x00, 0xFE, 0xAA, 0x02, 0xFE, 0x08, 0x02, +/* 0000BEA0 */ 0xFE, 0xAB, 0x02, 0xFE, 0x08, 0x02, 0xFE, 0xFD, 0x01, 0xFE, 0xFE, 0x01, 0xFE, 0xAD, 0x02, 0xFE, +/* 0000BEB0 */ 0x76, 0x02, 0xFE, 0x6D, 0x02, 0xFE, 0x77, 0x02, 0xFE, 0x71, 0x02, 0xFE, 0x6C, 0x02, 0xFE, 0x6E, +/* 0000BEC0 */ 0x02, 0xFE, 0x70, 0x02, 0xFE, 0x73, 0x02, 0xFE, 0x75, 0x02, 0xFE, 0x5F, 0x02, 0xFE, 0x65, 0x02, +/* 0000BED0 */ 0xFE, 0x0D, 0x02, 0xFE, 0x09, 0x02, 0xFE, 0x67, 0x02, 0xFE, 0x5A, 0x02, 0xFE, 0x6A, 0x02, 0xFE, +/* 0000BEE0 */ 0x61, 0x02, 0xFE, 0x59, 0x02, 0xFE, 0x5C, 0x02, 0xFE, 0x60, 0x02, 0xFE, 0x63, 0x02, 0xFE, 0x66, +/* 0000BEF0 */ 0x02, 0xFE, 0x5D, 0x02, 0xFE, 0x5B, 0x02, 0xFE, 0x69, 0x02, 0xFE, 0x3E, 0x02, 0xFE, 0x3E, 0x02, +/* 0000BF00 */ 0xFE, 0x62, 0x02, 0xFE, 0x3E, 0x02, 0xFE, 0xAD, 0x02, 0xFE, 0x68, 0x02, 0xFE, 0x58, 0x02, 0xFE, +/* 0000BF10 */ 0x3D, 0x02, 0xFE, 0x3D, 0x02, 0xFE, 0x5C, 0x02, 0xFE, 0x69, 0x02, 0xFE, 0x5D, 0x02, 0xFE, 0x5E, +/* 0000BF20 */ 0x02, 0xFF, 0x7D, 0x64, 0x02, 0x00, 0x3F, 0x02, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3D, 0x00, 0x1A, +/* 0000BF30 */ 0x00, 0x3F, 0x00, 0x33, 0x00, 0x9F, 0x00, 0x24, 0x00, 0x71, 0x00, 0x04, 0x00, 0x67, 0x00, 0x26, +/* 0000BF40 */ 0x00, 0x46, 0x00, 0x3D, 0x00, 0x71, 0x00, 0x34, 0x00, 0x60, 0x00, 0x0A, 0x00, 0x32, 0x00, 0x25, +/* 0000BF50 */ 0x00, 0x6C, 0x00, 0x1D, 0x00, 0x4D, 0x00, 0x0A, 0x00, 0x32, 0x00, 0x1A, 0x00, 0x6C, 0x00, 0x43, +/* 0000BF60 */ 0x00, 0x6F, 0x00, 0x43, 0x00, 0x67, 0x00, 0x3F, 0x00, 0x64, 0x00, 0x4B, 0x00, 0x81, 0x00, 0x3F, +/* 0000BF70 */ 0x00, 0x62, 0x00, 0x3F, 0x00, 0x64, 0x00, 0x3F, 0x00, 0x68, 0x00, 0x3F, 0x00, 0x68, 0x00, 0x3F, +/* 0000BF80 */ 0x00, 0x70, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x3D, 0x00, 0x77, 0x00, 0x25, 0x00, 0x71, 0x00, 0x69, +/* 0000BF90 */ 0x00, 0xD0, 0x01, 0x1C, 0x00, 0x41, 0x00, 0x3C, 0x00, 0x9A, 0x00, 0x04, 0x00, 0x34, 0x00, 0x04, +/* 0000BFA0 */ 0x00, 0x36, 0x00, 0x08, 0x00, 0x68, 0x00, 0x04, 0x00, 0x34, 0x00, 0x04, 0x00, 0x2C, 0x00, 0x04, +/* 0000BFB0 */ 0x00, 0x2E, 0x00, 0x04, 0x00, 0x30, 0x00, 0x04, 0x00, 0x2C, 0x00, 0x04, 0x00, 0x2E, 0x00, 0x04, +/* 0000BFC0 */ 0x00, 0x32, 0x00, 0x04, 0x00, 0x32, 0x00, 0x04, 0x00, 0x3F, 0x00, 0x04, 0x00, 0x32, 0x00, 0x04, +/* 0000BFD0 */ 0x00, 0x40, 0x00, 0x04, 0x00, 0x3F, 0x00, 0x04, 0x00, 0x0F, 0x03, 0x06, 0x00, 0x93, 0x00, 0x24, +/* 0000BFE0 */ 0x00, 0x3F, 0x00, 0x01, 0x00, 0x4A, 0x00, 0x17, 0x00, 0xEF, 0x00, 0x26, 0x00, 0x54, 0x00, 0x25, +/* 0000BFF0 */ 0x00, 0x6A, 0x00, 0x04, 0x00, 0x37, 0x00, 0x04, 0x00, 0x5A, 0x00, 0x32, 0x00, 0xDE, 0x00, 0x24, +/* 0000C000 */ 0x00, 0x3E, 0x00, 0x01, 0x00, 0x4A, 0x00, 0x17, 0x00, 0x77, 0x01, 0x1B, 0x00, 0x77, 0x00, 0x21, +/* 0000C010 */ 0x00, 0x66, 0x00, 0x2D, 0x00, 0x82, 0x00, 0x0E, 0x00, 0x3F, 0x00, 0x0C, 0x00, 0x6D, 0x00, 0x06, +/* 0000C020 */ 0x00, 0x3F, 0x00, 0x00, 0x7F, 0x5C, 0x0A, 0xC1, 0x23, 0x10, 0x03, 0x00, 0xFE, 0x0C, 0x0D, 0x0C, +/* 0000C030 */ 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0xDF, 0x04, 0xB9, 0xFF, 0xE9, 0x56, 0x02, 0x00, 0xFF, 0xE9, 0x56, +/* 0000C040 */ 0x02, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFF, 0xE9, 0x56, 0x02, 0x00, 0xFE, 0x2D, 0x0D, +/* 0000C050 */ 0xFE, 0x2D, 0x0D, 0x07, 0x12, 0x16, 0x06, 0xC8, 0xBB, 0x04, 0x02, 0x10, 0x07, 0x17, 0x17, 0x17, +/* 0000C060 */ 0x17, 0x02, 0x15, 0x05, 0xFE, 0xFA, 0x04, 0x08, 0x06, 0xFE, 0x32, 0x04, 0x07, 0x05, 0xFE, 0xFB, +/* 0000C070 */ 0x04, 0x01, 0x00, 0x05, 0xFE, 0xFC, 0x04, 0x05, 0xFE, 0xEF, 0x04, 0x05, 0xFE, 0xFD, 0x04, 0x06, +/* 0000C080 */ 0xFE, 0xF8, 0x03, 0x06, 0xFE, 0x36, 0x04, 0x06, 0xFE, 0x37, 0x04, 0x06, 0xFE, 0x38, 0x04, 0x06, +/* 0000C090 */ 0xFE, 0x39, 0x04, 0x06, 0xFE, 0x3A, 0x04, 0x05, 0xFE, 0xFE, 0x04, 0xFE, 0x3A, 0x03, 0xA8, 0x14, +/* 0000C0A0 */ 0x5F, 0x16, 0x13, 0x00, 0xA8, 0x17, 0x15, 0x03, 0x00, 0x16, 0x17, 0x09, 0x2A, 0x00, 0x8F, 0x01, +/* 0000C0B0 */ 0x05, 0x16, 0x00, 0x00, 0x4A, 0x16, 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, 0x5A, 0x01, 0x12, 0x00, +/* 0000C0C0 */ 0x00, 0x5F, 0x17, 0x13, 0x01, 0x5A, 0x02, 0x17, 0x00, 0x00, 0x5A, 0x03, 0x02, 0x00, 0x00, 0xF0, +/* 0000C0D0 */ 0x04, 0x16, 0x16, 0x00, 0x00, 0x45, 0x12, 0x16, 0x5F, 0x16, 0x13, 0x02, 0xA8, 0x17, 0x15, 0x03, +/* 0000C0E0 */ 0x00, 0x16, 0x17, 0x09, 0x00, 0x00, 0x5F, 0x16, 0x13, 0x03, 0x14, 0x03, 0x00, 0x16, 0x04, 0x09, +/* 0000C0F0 */ 0x98, 0x00, 0x8F, 0x04, 0x03, 0x17, 0x01, 0x00, 0x6D, 0x16, 0x17, 0x04, 0x07, 0x03, 0x00, 0x59, +/* 0000C100 */ 0x00, 0x17, 0x5A, 0x01, 0x12, 0x01, 0x00, 0xE2, 0x18, 0x00, 0x5A, 0x02, 0x18, 0x01, 0x00, 0xF4, +/* 0000C110 */ 0x03, 0x16, 0x16, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, 0x14, 0x16, 0x14, 0x03, 0x00, 0x14, +/* 0000C120 */ 0x05, 0x09, 0x2E, 0x00, 0x8F, 0x04, 0x0F, 0x16, 0x02, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x03, +/* 0000C130 */ 0x8F, 0x04, 0x0E, 0x17, 0x03, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x01, 0x06, 0x03, 0x00, 0xC5, 0x02, +/* 0000C140 */ 0x17, 0x17, 0x03, 0x00, 0x5A, 0x01, 0x17, 0x02, 0x00, 0xF0, 0x02, 0xFF, 0x16, 0x02, 0x00, 0x09, +/* 0000C150 */ 0x35, 0x00, 0x8F, 0x04, 0x06, 0x16, 0x04, 0x00, 0x07, 0x05, 0x00, 0x59, 0x00, 0x03, 0x8F, 0x04, +/* 0000C160 */ 0x1D, 0x17, 0x05, 0x00, 0x5A, 0x01, 0x17, 0x04, 0x00, 0x5A, 0x02, 0x12, 0x04, 0x00, 0x98, 0x17, +/* 0000C170 */ 0x14, 0x07, 0x00, 0x00, 0x5A, 0x03, 0x17, 0x04, 0x00, 0x5A, 0x04, 0x08, 0x04, 0x00, 0xF0, 0x05, +/* 0000C180 */ 0x16, 0x16, 0x04, 0x00, 0x45, 0x12, 0x16, 0x09, 0xA1, 0x00, 0x5F, 0x16, 0x13, 0x05, 0x14, 0x03, +/* 0000C190 */ 0x00, 0x16, 0x09, 0x09, 0x95, 0x00, 0x8F, 0x04, 0x03, 0x17, 0x01, 0x00, 0x6D, 0x16, 0x17, 0x06, +/* 0000C1A0 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x17, 0x5A, 0x01, 0x12, 0x05, 0x00, 0xE2, 0x18, 0x01, 0x5A, 0x02, +/* 0000C1B0 */ 0x18, 0x05, 0x00, 0xF4, 0x03, 0x16, 0x16, 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, 0x45, 0x14, 0x16, +/* 0000C1C0 */ 0x14, 0x03, 0x00, 0x14, 0x05, 0x09, 0x2E, 0x00, 0x8F, 0x04, 0x0F, 0x16, 0x02, 0x00, 0x07, 0x02, +/* 0000C1D0 */ 0x00, 0x59, 0x00, 0x03, 0x8F, 0x04, 0x0E, 0x17, 0x03, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x01, 0x06, +/* 0000C1E0 */ 0x07, 0x00, 0xC5, 0x02, 0x17, 0x17, 0x07, 0x00, 0x5A, 0x01, 0x17, 0x06, 0x00, 0xF0, 0x02, 0xFF, +/* 0000C1F0 */ 0x16, 0x06, 0x00, 0x09, 0x35, 0x00, 0x8F, 0x04, 0x06, 0x16, 0x04, 0x00, 0x07, 0x05, 0x00, 0x59, +/* 0000C200 */ 0x00, 0x03, 0x8F, 0x04, 0x1D, 0x17, 0x05, 0x00, 0x5A, 0x01, 0x17, 0x08, 0x00, 0x5A, 0x02, 0x12, +/* 0000C210 */ 0x08, 0x00, 0x98, 0x17, 0x14, 0x07, 0x01, 0x00, 0x5A, 0x03, 0x17, 0x08, 0x00, 0x5A, 0x04, 0x0A, +/* 0000C220 */ 0x08, 0x00, 0xF0, 0x05, 0x16, 0x16, 0x08, 0x00, 0x45, 0x12, 0x16, 0x5F, 0x16, 0x13, 0x07, 0xA8, +/* 0000C230 */ 0x17, 0x15, 0x03, 0x00, 0x16, 0x17, 0x09, 0x45, 0x00, 0x5F, 0x16, 0x13, 0x08, 0x15, 0x03, 0x00, +/* 0000C240 */ 0x16, 0x04, 0x09, 0x39, 0x00, 0x5F, 0x16, 0x13, 0x09, 0x15, 0x03, 0x00, 0x16, 0x0B, 0x09, 0x2D, +/* 0000C250 */ 0x00, 0x8F, 0x01, 0x05, 0x16, 0x00, 0x00, 0x4A, 0x16, 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, 0x5A, +/* 0000C260 */ 0x01, 0x12, 0x09, 0x00, 0x5F, 0x17, 0x13, 0x0A, 0x5A, 0x02, 0x17, 0x09, 0x00, 0x5A, 0x03, 0x0C, +/* 0000C270 */ 0x09, 0x00, 0xF0, 0x04, 0x16, 0x16, 0x09, 0x00, 0x45, 0x12, 0x16, 0x09, 0x38, 0x00, 0x5F, 0x16, +/* 0000C280 */ 0x13, 0x0B, 0xA8, 0x17, 0x15, 0x03, 0x00, 0x16, 0x17, 0x09, 0x2A, 0x00, 0x8F, 0x01, 0x06, 0x16, +/* 0000C290 */ 0x06, 0x00, 0x4A, 0x16, 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, 0x5A, 0x01, 0x12, 0x0A, 0x00, 0x5F, +/* 0000C2A0 */ 0x17, 0x13, 0x0C, 0x5A, 0x02, 0x17, 0x0A, 0x00, 0x5A, 0x03, 0x0C, 0x0A, 0x00, 0xF0, 0x04, 0x16, +/* 0000C2B0 */ 0x16, 0x0A, 0x00, 0x45, 0x12, 0x16, 0x5F, 0x16, 0x13, 0x0D, 0xA8, 0x17, 0x15, 0x03, 0x00, 0x16, +/* 0000C2C0 */ 0x17, 0x09, 0x2A, 0x00, 0x8F, 0x01, 0x06, 0x16, 0x06, 0x00, 0x4A, 0x16, 0x07, 0x04, 0x00, 0x59, +/* 0000C2D0 */ 0x00, 0x03, 0x5A, 0x01, 0x12, 0x0B, 0x00, 0x5F, 0x17, 0x13, 0x0E, 0x5A, 0x02, 0x17, 0x0B, 0x00, +/* 0000C2E0 */ 0x5A, 0x03, 0x0D, 0x0B, 0x00, 0xF0, 0x04, 0x16, 0x16, 0x0B, 0x00, 0x45, 0x12, 0x16, 0x5F, 0x16, +/* 0000C2F0 */ 0x13, 0x0F, 0xA8, 0x17, 0x15, 0x03, 0x00, 0x16, 0x17, 0x09, 0x2A, 0x00, 0x8F, 0x01, 0x06, 0x16, +/* 0000C300 */ 0x06, 0x00, 0x4A, 0x16, 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, 0x5A, 0x01, 0x12, 0x0C, 0x00, 0x5F, +/* 0000C310 */ 0x17, 0x13, 0x10, 0x5A, 0x02, 0x17, 0x0C, 0x00, 0x5A, 0x03, 0x0E, 0x0C, 0x00, 0xF0, 0x04, 0x16, +/* 0000C320 */ 0x16, 0x0C, 0x00, 0x45, 0x12, 0x16, 0x5F, 0x16, 0x13, 0x11, 0xA8, 0x17, 0x15, 0x03, 0x00, 0x16, +/* 0000C330 */ 0x17, 0x09, 0x2A, 0x00, 0x8F, 0x01, 0x06, 0x16, 0x06, 0x00, 0x4A, 0x16, 0x07, 0x04, 0x00, 0x59, +/* 0000C340 */ 0x00, 0x03, 0x5A, 0x01, 0x12, 0x0D, 0x00, 0x5F, 0x17, 0x13, 0x12, 0x5A, 0x02, 0x17, 0x0D, 0x00, +/* 0000C350 */ 0x5A, 0x03, 0x0F, 0x0D, 0x00, 0xF0, 0x04, 0x16, 0x16, 0x0D, 0x00, 0x45, 0x12, 0x16, 0x5F, 0x16, +/* 0000C360 */ 0x13, 0x13, 0xA8, 0x17, 0x15, 0x03, 0x00, 0x16, 0x17, 0x09, 0x2A, 0x00, 0x8F, 0x01, 0x06, 0x16, +/* 0000C370 */ 0x06, 0x00, 0x4A, 0x16, 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, 0x5A, 0x01, 0x12, 0x0E, 0x00, 0x5F, +/* 0000C380 */ 0x17, 0x13, 0x14, 0x5A, 0x02, 0x17, 0x0E, 0x00, 0x5A, 0x03, 0x10, 0x0E, 0x00, 0xF0, 0x04, 0x16, +/* 0000C390 */ 0x16, 0x0E, 0x00, 0x45, 0x12, 0x16, 0x5F, 0x16, 0x13, 0x15, 0xA8, 0x17, 0x15, 0x03, 0x00, 0x16, +/* 0000C3A0 */ 0x17, 0x09, 0x2A, 0x00, 0x8F, 0x01, 0x05, 0x16, 0x00, 0x00, 0x4A, 0x16, 0x07, 0x04, 0x00, 0x59, +/* 0000C3B0 */ 0x00, 0x03, 0x5A, 0x01, 0x12, 0x0F, 0x00, 0x5F, 0x17, 0x13, 0x16, 0x5A, 0x02, 0x17, 0x0F, 0x00, +/* 0000C3C0 */ 0x5A, 0x03, 0x11, 0x0F, 0x00, 0xF0, 0x04, 0x16, 0x16, 0x0F, 0x00, 0x45, 0x12, 0x16, 0x45, 0x00, +/* 0000C3D0 */ 0x12, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x67, 0x02, 0xFE, 0x67, 0x02, 0xFE, 0x5A, +/* 0000C3E0 */ 0x02, 0xFE, 0x6A, 0x02, 0xFE, 0xC0, 0x02, 0xFE, 0x6A, 0x02, 0xFE, 0xC0, 0x02, 0xFE, 0x61, 0x02, +/* 0000C3F0 */ 0xFE, 0x61, 0x02, 0xFE, 0x61, 0x02, 0xFE, 0x61, 0x02, 0xFE, 0x61, 0x02, 0xFE, 0x61, 0x02, 0xFE, +/* 0000C400 */ 0x59, 0x02, 0xFE, 0x59, 0x02, 0xFE, 0x5C, 0x02, 0xFE, 0x5C, 0x02, 0xFE, 0x60, 0x02, 0xFE, 0x60, +/* 0000C410 */ 0x02, 0xFE, 0x63, 0x02, 0xFE, 0x63, 0x02, 0xFE, 0x66, 0x02, 0xFE, 0x66, 0x02, 0x1C, 0xFE, 0xFF, +/* 0000C420 */ 0x04, 0x00, 0x1C, 0xFE, 0xFF, 0x04, 0x00, 0xFF, 0x38, 0x57, 0x02, 0x00, 0x1D, 0x02, 0x00, 0x00, +/* 0000C430 */ 0x00, 0x0E, 0x00, 0x42, 0x00, 0x2A, 0x00, 0x88, 0x00, 0x0E, 0x00, 0x8E, 0x01, 0x0C, 0x00, 0x3F, +/* 0000C440 */ 0x00, 0x2A, 0x00, 0x6B, 0x00, 0x08, 0x00, 0x2E, 0x00, 0x2E, 0x00, 0x91, 0x00, 0x38, 0x00, 0x98, +/* 0000C450 */ 0x00, 0x0C, 0x00, 0x3C, 0x00, 0x2A, 0x00, 0x6B, 0x00, 0x08, 0x00, 0x2E, 0x00, 0x2E, 0x00, 0x91, +/* 0000C460 */ 0x00, 0x35, 0x00, 0x2F, 0x01, 0x26, 0x00, 0x90, 0x00, 0x2D, 0x00, 0x76, 0x00, 0x0E, 0x00, 0x40, +/* 0000C470 */ 0x00, 0x2A, 0x00, 0x8B, 0x00, 0x0E, 0x00, 0x3E, 0x00, 0x2A, 0x00, 0x87, 0x00, 0x0E, 0x00, 0x3F, +/* 0000C480 */ 0x00, 0x2A, 0x00, 0x89, 0x00, 0x0E, 0x00, 0x41, 0x00, 0x2A, 0x00, 0x8D, 0x00, 0x0E, 0x00, 0x41, +/* 0000C490 */ 0x00, 0x2A, 0x00, 0x8D, 0x00, 0x0E, 0x00, 0x47, 0x00, 0x2A, 0x00, 0x8C, 0x00, 0x08, 0x00, 0x22, +/* 0000C4A0 */ 0x00, 0x00, 0x7F, 0x5C, 0x0A, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0xF8, 0x0C, 0x0C, 0xA3, 0x41, +/* 0000C4B0 */ 0xC1, 0x00, 0xFE, 0xDE, 0x04, 0xB8, 0xFF, 0x81, 0x51, 0x02, 0x00, 0xFF, 0x81, 0x51, 0x02, 0x00, +/* 0000C4C0 */ 0x01, 0xFE, 0x00, 0x90, 0x04, 0x04, 0xFF, 0x81, 0x51, 0x02, 0x00, 0xFE, 0xF8, 0x04, 0xFE, 0xF8, +/* 0000C4D0 */ 0x04, 0x09, 0x11, 0x16, 0x07, 0x43, 0x40, 0x04, 0x05, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x15, +/* 0000C4E0 */ 0x05, 0xFE, 0xEA, 0x04, 0x05, 0xFE, 0xF5, 0x04, 0x08, 0x07, 0x05, 0xFE, 0xF6, 0x04, 0x05, 0xFE, +/* 0000C4F0 */ 0xED, 0x04, 0x05, 0xFE, 0xEE, 0x04, 0x06, 0xFE, 0x32, 0x04, 0x01, 0x00, 0x06, 0xFE, 0xF0, 0x04, +/* 0000C500 */ 0x01, 0x01, 0x05, 0xFE, 0xF7, 0x04, 0x01, 0x02, 0x05, 0xFE, 0xF8, 0x04, 0x05, 0xFE, 0xF9, 0x04, +/* 0000C510 */ 0xFE, 0x2E, 0x01, 0x8F, 0x04, 0x03, 0x17, 0x00, 0x00, 0x6D, 0x16, 0x17, 0x00, 0x07, 0x03, 0x00, +/* 0000C520 */ 0x59, 0x00, 0x17, 0x5A, 0x01, 0x11, 0x00, 0x00, 0x8F, 0x04, 0x0A, 0x18, 0x01, 0x00, 0x07, 0x02, +/* 0000C530 */ 0x00, 0x59, 0x00, 0x04, 0xFC, 0x19, 0x02, 0x13, 0x03, 0x5A, 0x01, 0x19, 0x01, 0x00, 0xF0, 0x02, +/* 0000C540 */ 0x18, 0x18, 0x01, 0x00, 0x5A, 0x02, 0x18, 0x00, 0x00, 0xF4, 0x03, 0x16, 0x16, 0x00, 0x00, 0x00, +/* 0000C550 */ 0x00, 0x00, 0x00, 0x45, 0x14, 0x16, 0x14, 0x03, 0x00, 0x14, 0x05, 0x09, 0x40, 0x00, 0x8F, 0x04, +/* 0000C560 */ 0x0F, 0x16, 0x02, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x04, 0x8F, 0x04, 0x0E, 0x17, 0x03, 0x00, +/* 0000C570 */ 0x07, 0x02, 0x00, 0xFD, 0x18, 0x06, 0x11, 0x06, 0xFF, 0x18, 0x07, 0x02, 0x02, 0xFF, 0x18, 0x13, +/* 0000C580 */ 0x08, 0x04, 0x5A, 0x01, 0x18, 0x03, 0x00, 0xC5, 0x02, 0x17, 0x17, 0x03, 0x00, 0x5A, 0x01, 0x17, +/* 0000C590 */ 0x02, 0x00, 0xF0, 0x02, 0xFF, 0x16, 0x02, 0x00, 0x45, 0x00, 0x11, 0x09, 0xA1, 0x00, 0x14, 0x03, +/* 0000C5A0 */ 0x00, 0x12, 0x09, 0x09, 0x43, 0x00, 0x8F, 0x04, 0x06, 0x16, 0x04, 0x00, 0x07, 0x05, 0x00, 0x59, +/* 0000C5B0 */ 0x00, 0x04, 0x8F, 0x04, 0x1D, 0x17, 0x05, 0x00, 0x5A, 0x01, 0x17, 0x04, 0x00, 0x5A, 0x02, 0x11, +/* 0000C5C0 */ 0x04, 0x00, 0x98, 0x17, 0x14, 0x0A, 0x00, 0x00, 0x5A, 0x03, 0x17, 0x04, 0x00, 0x98, 0x17, 0x14, +/* 0000C5D0 */ 0x0C, 0x01, 0x00, 0xFC, 0x17, 0x0B, 0x17, 0x0D, 0x5A, 0x04, 0x17, 0x04, 0x00, 0xF0, 0x05, 0x00, +/* 0000C5E0 */ 0x16, 0x04, 0x00, 0x09, 0x59, 0x00, 0x09, 0x4E, 0x00, 0x98, 0x16, 0x14, 0x0E, 0x02, 0x00, 0x15, +/* 0000C5F0 */ 0x03, 0x00, 0x16, 0x0F, 0x09, 0x40, 0x00, 0x8F, 0x04, 0x06, 0x16, 0x04, 0x00, 0x07, 0x05, 0x00, +/* 0000C600 */ 0x59, 0x00, 0x04, 0x8F, 0x04, 0x1D, 0x17, 0x05, 0x00, 0x5A, 0x01, 0x17, 0x05, 0x00, 0x5A, 0x02, +/* 0000C610 */ 0x11, 0x05, 0x00, 0x98, 0x17, 0x14, 0x0A, 0x03, 0x00, 0x5A, 0x03, 0x17, 0x05, 0x00, 0x98, 0x17, +/* 0000C620 */ 0x14, 0x0C, 0x04, 0x00, 0xFC, 0x17, 0x0B, 0x17, 0x10, 0x5A, 0x04, 0x17, 0x05, 0x00, 0xF0, 0x05, +/* 0000C630 */ 0x00, 0x16, 0x05, 0x00, 0x09, 0x08, 0x00, 0x45, 0x00, 0x11, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, +/* 0000C640 */ 0x00, 0xFE, 0xC0, 0x02, 0xFF, 0xA8, 0x52, 0x02, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x43, 0x00, +/* 0000C650 */ 0x91, 0x00, 0x08, 0x00, 0x2A, 0x00, 0x3A, 0x00, 0x00, 0x01, 0x06, 0x00, 0x83, 0x00, 0x08, 0x00, +/* 0000C660 */ 0x33, 0x00, 0x43, 0x00, 0x81, 0x00, 0x0E, 0x00, 0x32, 0x00, 0x40, 0x00, 0x8A, 0x00, 0x08, 0x00, +/* 0000C670 */ 0x22, 0x00, 0x00, 0x7F, 0x5C, 0x0A, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0xE7, 0x0C, 0x0C, 0xA3, +/* 0000C680 */ 0x41, 0xC1, 0x00, 0xFE, 0xDD, 0x04, 0xB7, 0xFF, 0x53, 0x4C, 0x02, 0x00, 0xFF, 0x53, 0x4C, 0x02, +/* 0000C690 */ 0x00, 0x01, 0xFE, 0x00, 0x90, 0x04, 0x04, 0xFF, 0x53, 0x4C, 0x02, 0x00, 0xFE, 0x20, 0x05, 0xFE, +/* 0000C6A0 */ 0x20, 0x05, 0x09, 0x14, 0x19, 0x07, 0x50, 0x4C, 0x04, 0x05, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, +/* 0000C6B0 */ 0x18, 0x05, 0xFE, 0xEA, 0x04, 0x05, 0xFE, 0xEB, 0x04, 0x08, 0x07, 0x05, 0xFE, 0xEC, 0x04, 0x05, +/* 0000C6C0 */ 0xFE, 0xED, 0x04, 0x05, 0xFE, 0xEE, 0x04, 0x01, 0x02, 0x05, 0xFE, 0xEF, 0x04, 0x06, 0xFE, 0x31, +/* 0000C6D0 */ 0x04, 0x01, 0x00, 0x06, 0xFE, 0xF0, 0x04, 0x01, 0x01, 0x06, 0xFE, 0xF1, 0x04, 0x06, 0xFE, 0xF2, +/* 0000C6E0 */ 0x04, 0x06, 0xFE, 0x30, 0x04, 0x05, 0xFE, 0xF3, 0x04, 0x05, 0xFE, 0xF4, 0x04, 0xFE, 0x5D, 0x01, +/* 0000C6F0 */ 0x8F, 0x04, 0x03, 0x1A, 0x00, 0x00, 0x6D, 0x19, 0x1A, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x1A, +/* 0000C700 */ 0x5A, 0x01, 0x14, 0x00, 0x00, 0x8F, 0x04, 0x0A, 0x1B, 0x01, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 0000C710 */ 0x04, 0xFC, 0x1C, 0x02, 0x16, 0x03, 0x5A, 0x01, 0x1C, 0x01, 0x00, 0xF0, 0x02, 0x1B, 0x1B, 0x01, +/* 0000C720 */ 0x00, 0x5A, 0x02, 0x1B, 0x00, 0x00, 0xF4, 0x03, 0x19, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0000C730 */ 0x45, 0x17, 0x19, 0x14, 0x03, 0x00, 0x17, 0x05, 0x09, 0x40, 0x00, 0x8F, 0x04, 0x0F, 0x19, 0x02, +/* 0000C740 */ 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x04, 0x8F, 0x04, 0x0E, 0x1A, 0x03, 0x00, 0x07, 0x02, 0x00, +/* 0000C750 */ 0xFD, 0x1B, 0x06, 0x14, 0x06, 0xFF, 0x1B, 0x07, 0x02, 0x02, 0xFF, 0x1B, 0x16, 0x08, 0x04, 0x5A, +/* 0000C760 */ 0x01, 0x1B, 0x03, 0x00, 0xC5, 0x02, 0x1A, 0x1A, 0x03, 0x00, 0x5A, 0x01, 0x1A, 0x02, 0x00, 0xF0, +/* 0000C770 */ 0x02, 0xFF, 0x19, 0x02, 0x00, 0x45, 0x00, 0x14, 0x09, 0xD0, 0x00, 0x98, 0x19, 0x17, 0x09, 0x00, +/* 0000C780 */ 0x00, 0x15, 0x03, 0x00, 0x19, 0x0A, 0x09, 0x56, 0x00, 0x14, 0x03, 0x00, 0x15, 0x0B, 0x09, 0x4E, +/* 0000C790 */ 0x00, 0x8F, 0x04, 0x06, 0x19, 0x04, 0x00, 0x07, 0x05, 0x00, 0x59, 0x00, 0x04, 0x8F, 0x04, 0x1D, +/* 0000C7A0 */ 0x1A, 0x05, 0x00, 0x5A, 0x01, 0x1A, 0x04, 0x00, 0x5A, 0x02, 0x14, 0x04, 0x00, 0x98, 0x1A, 0x17, +/* 0000C7B0 */ 0x0C, 0x01, 0x00, 0x5A, 0x03, 0x1A, 0x04, 0x00, 0x98, 0x1A, 0x17, 0x0E, 0x02, 0x00, 0x2D, 0x1A, +/* 0000C7C0 */ 0x0D, 0x1A, 0x2D, 0x1A, 0x1A, 0x0F, 0x2D, 0x1A, 0x1A, 0x0A, 0x2D, 0x1A, 0x1A, 0x10, 0x5A, 0x04, +/* 0000C7D0 */ 0x1A, 0x04, 0x00, 0xF0, 0x05, 0x00, 0x19, 0x04, 0x00, 0x09, 0x6F, 0x00, 0x09, 0x64, 0x00, 0x15, +/* 0000C7E0 */ 0x03, 0x00, 0x15, 0x0B, 0x09, 0x5C, 0x00, 0x8F, 0x04, 0x06, 0x19, 0x04, 0x00, 0x07, 0x05, 0x00, +/* 0000C7F0 */ 0x59, 0x00, 0x04, 0x8F, 0x04, 0x1D, 0x1A, 0x05, 0x00, 0x5A, 0x01, 0x1A, 0x05, 0x00, 0x5A, 0x02, +/* 0000C800 */ 0x14, 0x05, 0x00, 0x98, 0x1A, 0x17, 0x0C, 0x03, 0x00, 0x5A, 0x03, 0x1A, 0x05, 0x00, 0x98, 0x1A, +/* 0000C810 */ 0x17, 0x0E, 0x04, 0x00, 0x2D, 0x1A, 0x0D, 0x1A, 0x2D, 0x1A, 0x1A, 0x0F, 0x14, 0x03, 0x00, 0x15, +/* 0000C820 */ 0x11, 0x09, 0x06, 0x00, 0x45, 0x1B, 0x12, 0x09, 0x03, 0x00, 0x46, 0x1B, 0x13, 0x2D, 0x1A, 0x1A, +/* 0000C830 */ 0x1B, 0x2D, 0x1A, 0x1A, 0x10, 0x5A, 0x04, 0x1A, 0x05, 0x00, 0xF0, 0x05, 0x00, 0x19, 0x05, 0x00, +/* 0000C840 */ 0x09, 0x08, 0x00, 0x45, 0x00, 0x14, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xC0, 0x02, +/* 0000C850 */ 0xFF, 0x29, 0x4D, 0x02, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x43, 0x00, 0x0F, 0x01, 0x08, 0x00, +/* 0000C860 */ 0x2A, 0x00, 0x3A, 0x00, 0xF5, 0x00, 0x06, 0x00, 0x39, 0x00, 0x16, 0x00, 0x47, 0x00, 0x4E, 0x00, +/* 0000C870 */ 0x85, 0x00, 0x08, 0x00, 0x30, 0x00, 0x5C, 0x00, 0xC4, 0x00, 0x08, 0x00, 0x22, 0x00, 0x00, 0x7F, +/* 0000C880 */ 0x4C, 0x02, 0x01, 0x00, 0x10, 0x03, 0x00, 0xFE, 0xDE, 0x0C, 0x0C, 0xA3, 0x41, 0xC1, 0x00, 0xFE, +/* 0000C890 */ 0xDC, 0x04, 0xB6, 0xFF, 0xEC, 0x4A, 0x02, 0x00, 0xFF, 0xEC, 0x4A, 0x02, 0x00, 0x01, 0xFE, 0x00, +/* 0000C8A0 */ 0x90, 0x02, 0x02, 0xFF, 0xEC, 0x4A, 0x02, 0x00, 0xE9, 0xE9, 0x03, 0x05, 0x07, 0x0E, 0x0C, 0x04, +/* 0000C8B0 */ 0x01, 0x01, 0x06, 0x06, 0xFE, 0xD6, 0x03, 0x06, 0xFE, 0x47, 0x03, 0x05, 0xFE, 0xCA, 0x04, 0x2E, +/* 0000C8C0 */ 0x2A, 0x07, 0x05, 0x14, 0x03, 0x00, 0x07, 0x02, 0x09, 0x06, 0x00, 0x45, 0x00, 0x03, 0x09, 0x1B, +/* 0000C8D0 */ 0x00, 0x8F, 0x02, 0x02, 0x07, 0x00, 0x00, 0x98, 0x07, 0x07, 0x05, 0x00, 0x00, 0x45, 0x00, 0x07, +/* 0000C8E0 */ 0x0F, 0x03, 0x00, 0x07, 0x46, 0x00, 0x04, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFF, 0x27, +/* 0000C8F0 */ 0x4B, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3B, 0x00, 0x06, 0x00, 0x2E, 0x00, +/* 0000C900 */ 0x1B, 0x00, 0x44, 0x00, 0x00, 0x7E, 0x5D, 0x1C, 0xC1, 0x03, 0x1A, 0x0B, 0x00, 0xFE, 0x9C, 0x0C, +/* 0000C910 */ 0x0C, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0xDB, 0x04, 0xB4, 0xFF, 0x99, 0x40, 0x02, 0x00, 0xFF, 0x99, +/* 0000C920 */ 0x40, 0x02, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0x99, 0x40, 0x02, 0x00, 0xFE, 0x70, +/* 0000C930 */ 0x08, 0xFE, 0x70, 0x08, 0x03, 0xFE, 0xE0, 0x04, 0xFE, 0xE0, 0x01, 0xFE, 0xCF, 0x03, 0x07, 0x19, +/* 0000C940 */ 0x1D, 0x05, 0xA6, 0xA5, 0x04, 0x0A, 0x02, 0x02, 0x06, 0x12, 0x12, 0x12, 0x12, 0x1A, 0x1B, 0x1C, +/* 0000C950 */ 0x07, 0x01, 0x00, 0x06, 0xFE, 0x2F, 0x04, 0x06, 0xFE, 0x30, 0x04, 0x01, 0x01, 0x05, 0xFE, 0xE1, +/* 0000C960 */ 0x04, 0x06, 0xFE, 0x31, 0x04, 0x05, 0xFE, 0xE2, 0x04, 0x06, 0xFE, 0x32, 0x04, 0x05, 0xFE, 0xE3, +/* 0000C970 */ 0x04, 0x06, 0xFE, 0xF8, 0x03, 0x05, 0xFE, 0xE4, 0x04, 0x05, 0xFE, 0xE5, 0x04, 0x05, 0xFE, 0xE6, +/* 0000C980 */ 0x04, 0x05, 0xFE, 0xE7, 0x04, 0x06, 0xFE, 0x37, 0x04, 0x05, 0xFE, 0xE8, 0x04, 0x05, 0xFE, 0xE9, +/* 0000C990 */ 0x04, 0x06, 0xFE, 0x38, 0x04, 0x06, 0xFE, 0x39, 0x04, 0x06, 0xFE, 0x3A, 0x04, 0x08, 0x06, 0xFE, +/* 0000C9A0 */ 0x72, 0x04, 0xFE, 0xB9, 0x02, 0x96, 0x03, 0x19, 0x4E, 0x1D, 0x96, 0x04, 0x1D, 0xD0, 0x1D, 0x00, +/* 0000C9B0 */ 0x00, 0x00, 0x96, 0x02, 0x1D, 0x93, 0x02, 0x1D, 0x00, 0x00, 0x77, 0x02, 0x1D, 0x00, 0x96, 0x04, +/* 0000C9C0 */ 0x03, 0x93, 0x03, 0x1D, 0x01, 0x00, 0x5F, 0x1D, 0x1D, 0x01, 0x0E, 0x67, 0x00, 0x1D, 0x93, 0x03, +/* 0000C9D0 */ 0x1D, 0x01, 0x00, 0x5F, 0x1D, 0x1D, 0x02, 0x14, 0x11, 0x00, 0x1D, 0x04, 0x93, 0x03, 0x1D, 0x01, +/* 0000C9E0 */ 0x00, 0x5F, 0x1D, 0x1D, 0x03, 0x14, 0x03, 0x00, 0x1D, 0x05, 0x09, 0x1D, 0x00, 0x93, 0x02, 0x1D, +/* 0000C9F0 */ 0x00, 0x00, 0x93, 0x04, 0x1F, 0x02, 0x00, 0x43, 0x1E, 0x1F, 0x2D, 0x1F, 0x1E, 0x06, 0x96, 0x04, +/* 0000CA00 */ 0x1F, 0x9D, 0x07, 0x1D, 0x1E, 0x00, 0x00, 0x09, 0x2B, 0x00, 0x93, 0x03, 0x1D, 0x01, 0x00, 0x5F, +/* 0000CA10 */ 0x1D, 0x1D, 0x04, 0x14, 0x03, 0x00, 0x1D, 0x08, 0x09, 0x1A, 0x00, 0x93, 0x02, 0x1D, 0x00, 0x00, +/* 0000CA20 */ 0x93, 0x04, 0x1F, 0x02, 0x00, 0x43, 0x1E, 0x1F, 0x2D, 0x1F, 0x1E, 0x06, 0x96, 0x04, 0x1F, 0x9D, +/* 0000CA30 */ 0x09, 0x1D, 0x1E, 0x01, 0x00, 0x93, 0x03, 0x1D, 0x01, 0x00, 0x5F, 0x1D, 0x1D, 0x05, 0x0E, 0x59, +/* 0000CA40 */ 0x00, 0x1D, 0x93, 0x03, 0x1D, 0x01, 0x00, 0x5F, 0x1D, 0x1D, 0x06, 0x14, 0x03, 0x00, 0x1D, 0x0A, +/* 0000CA50 */ 0x09, 0x1D, 0x00, 0x93, 0x02, 0x1D, 0x00, 0x00, 0x93, 0x04, 0x1F, 0x02, 0x00, 0x43, 0x1E, 0x1F, +/* 0000CA60 */ 0x2D, 0x1F, 0x1E, 0x06, 0x96, 0x04, 0x1F, 0x9D, 0x0B, 0x1D, 0x1E, 0x02, 0x00, 0x09, 0x2B, 0x00, +/* 0000CA70 */ 0x93, 0x03, 0x1D, 0x01, 0x00, 0x5F, 0x1D, 0x1D, 0x07, 0x14, 0x03, 0x00, 0x1D, 0x0C, 0x09, 0x1A, +/* 0000CA80 */ 0x00, 0x93, 0x02, 0x1D, 0x00, 0x00, 0x93, 0x04, 0x1F, 0x02, 0x00, 0x43, 0x1E, 0x1F, 0x2D, 0x1F, +/* 0000CA90 */ 0x1E, 0x06, 0x96, 0x04, 0x1F, 0x9D, 0x0D, 0x1D, 0x1E, 0x03, 0x00, 0x93, 0x03, 0x1D, 0x01, 0x00, +/* 0000CAA0 */ 0x5F, 0x1D, 0x1D, 0x08, 0x0E, 0xA3, 0x00, 0x1D, 0x93, 0x03, 0x1D, 0x01, 0x00, 0x5F, 0x1D, 0x1D, +/* 0000CAB0 */ 0x09, 0x14, 0x11, 0x00, 0x1D, 0x0A, 0x93, 0x03, 0x1D, 0x01, 0x00, 0x5F, 0x1D, 0x1D, 0x0A, 0x14, +/* 0000CAC0 */ 0x03, 0x00, 0x1D, 0x0C, 0x09, 0x1D, 0x00, 0x93, 0x02, 0x1D, 0x00, 0x00, 0x93, 0x04, 0x1F, 0x02, +/* 0000CAD0 */ 0x00, 0x43, 0x1E, 0x1F, 0x2D, 0x1F, 0x1E, 0x06, 0x96, 0x04, 0x1F, 0x9D, 0x0E, 0x1D, 0x1E, 0x04, +/* 0000CAE0 */ 0x00, 0x09, 0x67, 0x00, 0x93, 0x03, 0x1D, 0x01, 0x00, 0x5F, 0x1D, 0x1D, 0x0B, 0x14, 0x11, 0x00, +/* 0000CAF0 */ 0x1D, 0x05, 0x93, 0x03, 0x1D, 0x01, 0x00, 0x5F, 0x1D, 0x1D, 0x0C, 0x14, 0x03, 0x00, 0x1D, 0x04, +/* 0000CB00 */ 0x09, 0x1D, 0x00, 0x93, 0x02, 0x1D, 0x00, 0x00, 0x93, 0x04, 0x1F, 0x02, 0x00, 0x43, 0x1E, 0x1F, +/* 0000CB10 */ 0x2D, 0x1F, 0x1E, 0x06, 0x96, 0x04, 0x1F, 0x9D, 0x0F, 0x1D, 0x1E, 0x05, 0x00, 0x09, 0x2B, 0x00, +/* 0000CB20 */ 0x93, 0x03, 0x1D, 0x01, 0x00, 0x5F, 0x1D, 0x1D, 0x0D, 0x14, 0x03, 0x00, 0x1D, 0x08, 0x09, 0x1A, +/* 0000CB30 */ 0x00, 0x93, 0x02, 0x1D, 0x00, 0x00, 0x93, 0x04, 0x1F, 0x02, 0x00, 0x43, 0x1E, 0x1F, 0x2D, 0x1F, +/* 0000CB40 */ 0x1E, 0x06, 0x96, 0x04, 0x1F, 0x9D, 0x10, 0x1D, 0x1E, 0x06, 0x00, 0x93, 0x03, 0x1D, 0x01, 0x00, +/* 0000CB50 */ 0x5F, 0x1D, 0x1D, 0x0E, 0x0E, 0x1A, 0x00, 0x1D, 0x93, 0x02, 0x1D, 0x00, 0x00, 0x93, 0x04, 0x1F, +/* 0000CB60 */ 0x02, 0x00, 0x43, 0x1E, 0x1F, 0x2D, 0x1F, 0x1E, 0x06, 0x96, 0x04, 0x1F, 0x9D, 0x11, 0x1D, 0x1E, +/* 0000CB70 */ 0x07, 0x00, 0x93, 0x03, 0x1D, 0x01, 0x00, 0x5F, 0x1D, 0x1D, 0x0F, 0x0E, 0x59, 0x00, 0x1D, 0x93, +/* 0000CB80 */ 0x03, 0x1D, 0x01, 0x00, 0x5F, 0x1D, 0x1D, 0x10, 0x14, 0x03, 0x00, 0x1D, 0x05, 0x09, 0x1D, 0x00, +/* 0000CB90 */ 0x93, 0x02, 0x1D, 0x00, 0x00, 0x93, 0x04, 0x1F, 0x02, 0x00, 0x43, 0x1E, 0x1F, 0x2D, 0x1F, 0x1E, +/* 0000CBA0 */ 0x06, 0x96, 0x04, 0x1F, 0x9D, 0x12, 0x1D, 0x1E, 0x08, 0x00, 0x09, 0x2B, 0x00, 0x93, 0x03, 0x1D, +/* 0000CBB0 */ 0x01, 0x00, 0x5F, 0x1D, 0x1D, 0x11, 0x14, 0x03, 0x00, 0x1D, 0x08, 0x09, 0x1A, 0x00, 0x93, 0x02, +/* 0000CBC0 */ 0x1D, 0x00, 0x00, 0x93, 0x04, 0x1F, 0x02, 0x00, 0x43, 0x1E, 0x1F, 0x2D, 0x1F, 0x1E, 0x06, 0x96, +/* 0000CBD0 */ 0x04, 0x1F, 0x9D, 0x13, 0x1D, 0x1E, 0x09, 0x00, 0x8F, 0x04, 0x06, 0x1D, 0x03, 0x00, 0x07, 0x04, +/* 0000CBE0 */ 0x00, 0x59, 0x00, 0x17, 0x8F, 0x04, 0x17, 0x1E, 0x04, 0x00, 0x5A, 0x01, 0x1E, 0x00, 0x00, 0xD0, +/* 0000CBF0 */ 0x1E, 0x03, 0x01, 0x00, 0xA1, 0x00, 0x14, 0x1E, 0xA1, 0x01, 0x15, 0x1E, 0xA1, 0x02, 0x16, 0x1E, +/* 0000CC00 */ 0x5A, 0x02, 0x1E, 0x00, 0x00, 0xD6, 0x00, 0x1E, 0x5A, 0x03, 0x1E, 0x00, 0x00, 0xF0, 0x04, 0xFF, +/* 0000CC10 */ 0x1D, 0x00, 0x00, 0x93, 0x04, 0x1D, 0x02, 0x00, 0x11, 0x03, 0x00, 0x1D, 0x03, 0x09, 0x32, 0x00, +/* 0000CC20 */ 0x8F, 0x04, 0x06, 0x1D, 0x03, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x17, 0x8F, 0x04, 0x19, 0x1E, +/* 0000CC30 */ 0x05, 0x00, 0x5A, 0x01, 0x1E, 0x01, 0x00, 0x93, 0x02, 0x1E, 0x00, 0x00, 0x5A, 0x02, 0x1E, 0x01, +/* 0000CC40 */ 0x00, 0x5A, 0x03, 0x18, 0x01, 0x00, 0xF0, 0x04, 0x1D, 0x1D, 0x01, 0x00, 0x45, 0x00, 0x1D, 0x09, +/* 0000CC50 */ 0x05, 0x00, 0xA8, 0x1D, 0x46, 0x00, 0x1D, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xEB, +/* 0000CC60 */ 0x01, 0xFE, 0x76, 0x02, 0xFE, 0x76, 0x02, 0xFE, 0x76, 0x02, 0xFE, 0x76, 0x02, 0xFE, 0x77, 0x02, +/* 0000CC70 */ 0xFE, 0x77, 0x02, 0xFE, 0x77, 0x02, 0xFE, 0x71, 0x02, 0xFE, 0x71, 0x02, 0xFE, 0x71, 0x02, 0xFE, +/* 0000CC80 */ 0x71, 0x02, 0xFE, 0x71, 0x02, 0xFE, 0x71, 0x02, 0xFE, 0x6C, 0x02, 0xFE, 0x75, 0x02, 0xFE, 0x75, +/* 0000CC90 */ 0x02, 0xFE, 0x75, 0x02, 0xFF, 0xDA, 0x40, 0x02, 0x00, 0x1E, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, +/* 0000CCA0 */ 0x23, 0x00, 0x09, 0x00, 0x2B, 0x00, 0x03, 0x00, 0x1C, 0x00, 0x0D, 0x00, 0x2B, 0x00, 0x1F, 0x00, +/* 0000CCB0 */ 0x5B, 0x00, 0x1D, 0x00, 0x44, 0x00, 0x11, 0x00, 0x3A, 0x00, 0x1A, 0x00, 0x86, 0x00, 0x0D, 0x00, +/* 0000CCC0 */ 0x28, 0x00, 0x11, 0x00, 0x3A, 0x00, 0x1D, 0x00, 0x3F, 0x00, 0x11, 0x00, 0x3A, 0x00, 0x1A, 0x00, +/* 0000CCD0 */ 0x56, 0x00, 0x0D, 0x00, 0x29, 0x00, 0x1F, 0x00, 0x5A, 0x00, 0x1D, 0x00, 0x3C, 0x00, 0x1F, 0x00, +/* 0000CCE0 */ 0x57, 0x00, 0x1D, 0x00, 0x40, 0x00, 0x11, 0x00, 0x38, 0x00, 0x1A, 0x00, 0x57, 0x00, 0x0D, 0x00, +/* 0000CCF0 */ 0x27, 0x00, 0x1A, 0x00, 0x3A, 0x00, 0x0D, 0x00, 0x30, 0x00, 0x11, 0x00, 0x40, 0x00, 0x1D, 0x00, +/* 0000CD00 */ 0x43, 0x00, 0x11, 0x00, 0x3F, 0x00, 0x1A, 0x00, 0x5A, 0x00, 0x3B, 0x00, 0x1C, 0x01, 0x49, 0x00, +/* 0000CD10 */ 0x5B, 0x00, 0x00, 0x17, 0xCD, 0x00, 0x00, 0x7F, 0x4C, 0x06, 0x01, 0x00, 0x10, 0x03, 0x00, 0xFE, +/* 0000CD20 */ 0xC8, 0x0C, 0x55, 0xA2, 0x41, 0xD1, 0x00, 0xB5, 0xFF, 0xD6, 0x47, 0x02, 0x00, 0xFF, 0xD6, 0x47, +/* 0000CD30 */ 0x02, 0x00, 0x41, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0xD6, 0x47, 0x02, 0x00, 0x8D, 0x8D, 0x05, +/* 0000CD40 */ 0x03, 0x05, 0x0D, 0x0D, 0x05, 0x01, 0x01, 0x03, 0x04, 0x01, 0x01, 0x35, 0x8F, 0x01, 0x03, 0x05, +/* 0000CD50 */ 0x00, 0x00, 0x98, 0x05, 0x05, 0x03, 0x00, 0x00, 0x0E, 0x21, 0x00, 0x05, 0x8F, 0x01, 0x02, 0x05, +/* 0000CD60 */ 0x01, 0x00, 0x8F, 0x01, 0x04, 0x07, 0x02, 0x00, 0x4A, 0x07, 0x43, 0x06, 0x07, 0x2D, 0x07, 0x06, +/* 0000CD70 */ 0x02, 0x01, 0x43, 0x01, 0x01, 0x04, 0x07, 0x9D, 0x03, 0x05, 0x06, 0x00, 0x00, 0xA8, 0x00, 0x24, +/* 0000CD80 */ 0x00, 0xFF, 0xFB, 0x47, 0x02, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x2C, 0x00, 0x23, +/* 0000CD90 */ 0x00, 0x3B, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x13, 0x10, 0x43, 0x00, 0xFE, 0x69, 0x0C, 0x0C, +/* 0000CDA0 */ 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x2A, 0x04, 0xB3, 0xFF, 0xE0, 0x36, 0x02, 0x00, 0xFF, 0xE0, 0x36, +/* 0000CDB0 */ 0x02, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x04, 0x04, 0xFF, 0xE0, 0x36, 0x02, 0x00, 0xFE, 0x21, 0x09, +/* 0000CDC0 */ 0xFE, 0x21, 0x09, 0x07, 0x15, 0x1A, 0x05, 0x88, 0x82, 0x04, 0x08, 0x03, 0x20, 0x20, 0x20, 0x20, +/* 0000CDD0 */ 0x06, 0x19, 0x07, 0x08, 0x0B, 0x06, 0xFE, 0x42, 0x04, 0x06, 0xFE, 0x3F, 0x04, 0x0C, 0x05, 0xFE, +/* 0000CDE0 */ 0x44, 0x04, 0x06, 0xFE, 0x40, 0x04, 0x06, 0xFE, 0x35, 0x04, 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, +/* 0000CDF0 */ 0xF8, 0x03, 0x06, 0xFE, 0x2B, 0x03, 0x06, 0xFE, 0x2C, 0x03, 0x06, 0xFE, 0x2D, 0x03, 0x06, 0xFE, +/* 0000CE00 */ 0x36, 0x04, 0x06, 0xFE, 0x37, 0x04, 0x06, 0xFE, 0x38, 0x04, 0x06, 0xFE, 0x39, 0x04, 0x06, 0xFE, +/* 0000CE10 */ 0x3A, 0x04, 0xFE, 0x66, 0x02, 0xA8, 0x1A, 0x14, 0x03, 0x00, 0x15, 0x1A, 0x09, 0x24, 0x00, 0x8F, +/* 0000CE20 */ 0x04, 0x04, 0x1A, 0x00, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x03, 0xCD, 0x1B, 0x5A, 0x01, 0x1B, +/* 0000CE30 */ 0x00, 0x00, 0x5A, 0x02, 0x02, 0x00, 0x00, 0xF0, 0x03, 0x1A, 0x1A, 0x00, 0x00, 0x45, 0x15, 0x1A, +/* 0000CE40 */ 0x09, 0x22, 0x00, 0x8F, 0x04, 0x24, 0x1B, 0x01, 0x00, 0x6D, 0x1A, 0x1B, 0x00, 0x07, 0x02, 0x00, +/* 0000CE50 */ 0x59, 0x00, 0x1B, 0x5A, 0x01, 0x15, 0x01, 0x00, 0xF4, 0x02, 0x1A, 0x1A, 0x00, 0x00, 0x00, 0x00, +/* 0000CE60 */ 0x01, 0x00, 0x45, 0x15, 0x1A, 0x45, 0x18, 0x04, 0x14, 0x08, 0x00, 0x16, 0x05, 0x14, 0x03, 0x00, +/* 0000CE70 */ 0x16, 0x06, 0x09, 0x32, 0x00, 0x5F, 0x1A, 0x15, 0x01, 0xA8, 0x1B, 0x15, 0x24, 0x00, 0x1A, 0x1B, +/* 0000CE80 */ 0x5F, 0x1A, 0x15, 0x02, 0xA8, 0x1B, 0x15, 0x19, 0x00, 0x1A, 0x1B, 0x5F, 0x1A, 0x15, 0x03, 0xA8, +/* 0000CE90 */ 0x1B, 0x15, 0x0E, 0x00, 0x1A, 0x1B, 0x5F, 0x1A, 0x15, 0x04, 0xA8, 0x1B, 0x15, 0x03, 0x00, 0x1A, +/* 0000CEA0 */ 0x1B, 0x09, 0x03, 0x00, 0x45, 0x18, 0x07, 0x14, 0x08, 0x00, 0x16, 0x08, 0x14, 0x03, 0x00, 0x16, +/* 0000CEB0 */ 0x06, 0x09, 0x27, 0x00, 0x5F, 0x1A, 0x15, 0x05, 0xA8, 0x1B, 0x15, 0x19, 0x00, 0x1A, 0x1B, 0x5F, +/* 0000CEC0 */ 0x1A, 0x15, 0x06, 0xA8, 0x1B, 0x15, 0x0E, 0x00, 0x1A, 0x1B, 0x5F, 0x1A, 0x15, 0x07, 0xA8, 0x1B, +/* 0000CED0 */ 0x15, 0x03, 0x00, 0x1A, 0x1B, 0x09, 0x03, 0x00, 0x45, 0x18, 0x07, 0x0E, 0xC7, 0x00, 0x18, 0x14, +/* 0000CEE0 */ 0x08, 0x00, 0x17, 0x05, 0x14, 0x03, 0x00, 0x17, 0x09, 0x09, 0xBA, 0x00, 0x8F, 0x04, 0x16, 0x1A, +/* 0000CEF0 */ 0x02, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, 0x5A, 0x01, 0x15, 0x02, 0x00, 0x5A, 0x02, 0x0A, +/* 0000CF00 */ 0x02, 0x00, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00, 0x7B, +/* 0000CF10 */ 0x0C, 0x1B, 0x08, 0x7B, 0x04, 0x1B, 0x09, 0x7B, 0x04, 0x1B, 0x0A, 0x7B, 0x04, 0x1B, 0x0B, 0x5A, +/* 0000CF20 */ 0x03, 0x1B, 0x02, 0x00, 0xF0, 0x04, 0xFF, 0x1A, 0x02, 0x00, 0x8F, 0x04, 0x16, 0x1A, 0x02, 0x00, +/* 0000CF30 */ 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, 0x5A, 0x01, 0x15, 0x03, 0x00, 0x5A, 0x02, 0x10, 0x03, 0x00, +/* 0000CF40 */ 0xCE, 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00, 0x7B, 0x0C, 0x1B, +/* 0000CF50 */ 0x0C, 0x7B, 0x04, 0x1B, 0x0D, 0x7B, 0x04, 0x1B, 0x0E, 0x7B, 0x04, 0x1B, 0x0F, 0x5A, 0x03, 0x1B, +/* 0000CF60 */ 0x03, 0x00, 0xF0, 0x04, 0xFF, 0x1A, 0x03, 0x00, 0x8F, 0x04, 0x16, 0x1A, 0x02, 0x00, 0x07, 0x04, +/* 0000CF70 */ 0x00, 0x59, 0x00, 0x03, 0x5A, 0x01, 0x15, 0x04, 0x00, 0x5A, 0x02, 0x11, 0x04, 0x00, 0xCE, 0x30, +/* 0000CF80 */ 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00, 0x7B, 0x0C, 0x1B, 0x10, 0x7B, +/* 0000CF90 */ 0x04, 0x1B, 0x11, 0x7B, 0x04, 0x1B, 0x12, 0x7B, 0x04, 0x1B, 0x13, 0x5A, 0x03, 0x1B, 0x04, 0x00, +/* 0000CFA0 */ 0xF0, 0x04, 0xFF, 0x1A, 0x04, 0x00, 0x0E, 0xC7, 0x00, 0x18, 0x14, 0x08, 0x00, 0x17, 0x08, 0x14, +/* 0000CFB0 */ 0x03, 0x00, 0x17, 0x09, 0x09, 0xBA, 0x00, 0x8F, 0x04, 0x16, 0x1A, 0x02, 0x00, 0x07, 0x04, 0x00, +/* 0000CFC0 */ 0x59, 0x00, 0x03, 0x5A, 0x01, 0x15, 0x05, 0x00, 0x5A, 0x02, 0x12, 0x05, 0x00, 0xCE, 0x48, 0x00, +/* 0000CFD0 */ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00, 0x7B, 0x0C, 0x1B, 0x14, 0x7B, 0x04, +/* 0000CFE0 */ 0x1B, 0x15, 0x7B, 0x04, 0x1B, 0x16, 0x7B, 0x04, 0x1B, 0x17, 0x5A, 0x03, 0x1B, 0x05, 0x00, 0xF0, +/* 0000CFF0 */ 0x04, 0xFF, 0x1A, 0x05, 0x00, 0x8F, 0x04, 0x16, 0x1A, 0x02, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, +/* 0000D000 */ 0x03, 0x5A, 0x01, 0x15, 0x06, 0x00, 0x5A, 0x02, 0x13, 0x06, 0x00, 0xCE, 0x60, 0x00, 0x00, 0x00, +/* 0000D010 */ 0x04, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00, 0x7B, 0x0C, 0x1B, 0x18, 0x7B, 0x04, 0x1B, 0x19, +/* 0000D020 */ 0x7B, 0x04, 0x1B, 0x1A, 0x7B, 0x04, 0x1B, 0x1B, 0x5A, 0x03, 0x1B, 0x06, 0x00, 0xF0, 0x04, 0xFF, +/* 0000D030 */ 0x1A, 0x06, 0x00, 0x8F, 0x04, 0x16, 0x1A, 0x02, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, 0x5A, +/* 0000D040 */ 0x01, 0x15, 0x07, 0x00, 0x5A, 0x02, 0x14, 0x07, 0x00, 0xCE, 0x78, 0x00, 0x00, 0x00, 0x05, 0x00, +/* 0000D050 */ 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00, 0x7B, 0x0C, 0x1B, 0x1C, 0x7B, 0x04, 0x1B, 0x1D, 0x7B, 0x04, +/* 0000D060 */ 0x1B, 0x1E, 0x7B, 0x04, 0x1B, 0x1F, 0x5A, 0x03, 0x1B, 0x07, 0x00, 0xF0, 0x04, 0xFF, 0x1A, 0x07, +/* 0000D070 */ 0x00, 0x45, 0x00, 0x15, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x06, 0x90, 0x00, 0x78, 0x00, +/* 0000D080 */ 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, +/* 0000D090 */ 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x03, 0x04, +/* 0000D0A0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, +/* 0000D0B0 */ 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, +/* 0000D0C0 */ 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, +/* 0000D0D0 */ 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, +/* 0000D0E0 */ 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x18, 0x00, +/* 0000D0F0 */ 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, +/* 0000D100 */ 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, +/* 0000D110 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, +/* 0000D120 */ 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0xFE, 0x21, 0x03, 0xFE, 0x76, 0x02, 0xFE, 0x77, 0x02, 0xFE, +/* 0000D130 */ 0x71, 0x02, 0xFE, 0x6C, 0x02, 0xFE, 0x6E, 0x02, 0xFE, 0x70, 0x02, 0xFE, 0x73, 0x02, 0xFE, 0x97, +/* 0000D140 */ 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, +/* 0000D150 */ 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, +/* 0000D160 */ 0x95, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x97, +/* 0000D170 */ 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, +/* 0000D180 */ 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFF, 0x2A, 0x37, 0x02, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, +/* 0000D190 */ 0x0A, 0x00, 0x31, 0x00, 0x24, 0x00, 0x4F, 0x00, 0x22, 0x00, 0x49, 0x00, 0x03, 0x00, 0x29, 0x00, +/* 0000D1A0 */ 0x0D, 0x00, 0x45, 0x00, 0x2F, 0x00, 0x97, 0x00, 0x03, 0x00, 0x4E, 0x00, 0x0D, 0x00, 0x45, 0x00, +/* 0000D1B0 */ 0x24, 0x00, 0x7A, 0x00, 0x03, 0x00, 0x4F, 0x00, 0x11, 0x00, 0x57, 0x00, 0x3E, 0x00, 0xCB, 0x00, +/* 0000D1C0 */ 0x3E, 0x00, 0xCC, 0x00, 0x3E, 0x00, 0xD8, 0x00, 0x11, 0x00, 0x57, 0x00, 0x3E, 0x00, 0xCB, 0x00, +/* 0000D1D0 */ 0x3E, 0x00, 0xCD, 0x00, 0x3E, 0x00, 0xDB, 0x00, 0x08, 0x00, 0x1C, 0x00, 0x00, 0x7E, 0x5D, 0x18, +/* 0000D1E0 */ 0xC1, 0x53, 0x5A, 0x4B, 0x04, 0xFE, 0x7B, 0x0B, 0x18, 0xA0, 0x41, 0xD1, 0x00, 0xAA, 0xFF, 0xF3, +/* 0000D1F0 */ 0x06, 0x02, 0x00, 0xFF, 0xF3, 0x06, 0x02, 0x00, 0x06, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFF, 0xF3, +/* 0000D200 */ 0x06, 0x02, 0x00, 0xFE, 0xF9, 0x2E, 0xFE, 0xF9, 0x2E, 0x01, 0xFE, 0xE0, 0x01, 0x0D, 0x21, 0x27, +/* 0000D210 */ 0x09, 0xA8, 0xA8, 0x02, 0x0C, 0x01, 0x09, 0x1A, 0x1A, 0x1A, 0x1A, 0x05, 0x02, 0x24, 0x25, 0x26, +/* 0000D220 */ 0x27, 0x08, 0x06, 0xFE, 0x27, 0x03, 0x06, 0xFE, 0x0E, 0x04, 0x05, 0xFE, 0x0F, 0x04, 0x05, 0xFE, +/* 0000D230 */ 0x10, 0x04, 0x05, 0xFE, 0x11, 0x04, 0x06, 0xFE, 0x38, 0x03, 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, +/* 0000D240 */ 0x2B, 0x03, 0x0B, 0x06, 0xFE, 0x2D, 0x03, 0x07, 0x06, 0xFE, 0xD7, 0x03, 0x06, 0xFE, 0x24, 0x04, +/* 0000D250 */ 0x06, 0xFE, 0x18, 0x04, 0x06, 0xFE, 0x1B, 0x04, 0x06, 0xFE, 0x1C, 0x04, 0x06, 0xFE, 0xDA, 0x03, +/* 0000D260 */ 0x06, 0xFE, 0xDB, 0x03, 0x06, 0xFE, 0xDC, 0x03, 0x06, 0xFE, 0xDD, 0x03, 0x06, 0xFE, 0xDE, 0x03, +/* 0000D270 */ 0x06, 0xFE, 0x1F, 0x04, 0x06, 0xFE, 0xEC, 0x03, 0x0C, 0x06, 0xFE, 0x2C, 0x03, 0x06, 0xFE, 0xED, +/* 0000D280 */ 0x03, 0x06, 0xFE, 0xEE, 0x03, 0x06, 0xFE, 0x15, 0x04, 0x06, 0xFE, 0x77, 0x03, 0x05, 0xFE, 0x14, +/* 0000D290 */ 0x04, 0xFE, 0x23, 0x03, 0xA8, 0x21, 0xA8, 0x22, 0xA8, 0x23, 0x8F, 0x02, 0x32, 0x29, 0x00, 0x00, +/* 0000D2A0 */ 0x14, 0x0E, 0x00, 0x29, 0x03, 0x8F, 0x02, 0x32, 0x29, 0x00, 0x00, 0x14, 0x03, 0x00, 0x29, 0x04, +/* 0000D2B0 */ 0x09, 0xFB, 0x02, 0xE0, 0x00, 0x03, 0x01, 0xB9, 0x29, 0x00, 0x01, 0x66, 0x01, 0x00, 0x21, 0x29, +/* 0000D2C0 */ 0x95, 0x00, 0x02, 0x21, 0x8F, 0x02, 0x03, 0x2A, 0x01, 0x00, 0x6D, 0x29, 0x2A, 0x00, 0x07, 0x03, +/* 0000D2D0 */ 0x00, 0x59, 0x00, 0x2A, 0x8F, 0x02, 0x23, 0x2B, 0x02, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, +/* 0000D2E0 */ 0x5A, 0x01, 0x05, 0x01, 0x00, 0xB9, 0x2D, 0x00, 0x01, 0x66, 0x01, 0x01, 0x2C, 0x2D, 0x5A, 0x02, +/* 0000D2F0 */ 0x2C, 0x01, 0x00, 0xF0, 0x03, 0x2B, 0x2B, 0x01, 0x00, 0x5A, 0x01, 0x2B, 0x00, 0x00, 0x8F, 0x02, +/* 0000D300 */ 0x03, 0x2B, 0x01, 0x00, 0x5F, 0x2B, 0x2B, 0x01, 0x5F, 0x2B, 0x2B, 0x02, 0x5A, 0x02, 0x2B, 0x00, +/* 0000D310 */ 0x00, 0xF4, 0x03, 0xFF, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x02, 0x32, 0x29, 0x00, +/* 0000D320 */ 0x00, 0x14, 0x03, 0x00, 0x29, 0x03, 0x09, 0x85, 0x02, 0xE0, 0x01, 0x04, 0x02, 0xB9, 0x29, 0x00, +/* 0000D330 */ 0xB8, 0x01, 0x00, 0x00, 0x00, 0x29, 0x29, 0x01, 0x66, 0x01, 0x02, 0x22, 0x29, 0x95, 0x01, 0x02, +/* 0000D340 */ 0x22, 0x01, 0x66, 0x01, 0x03, 0x23, 0x29, 0x95, 0x01, 0x03, 0x23, 0x8F, 0x02, 0x23, 0x29, 0x02, +/* 0000D350 */ 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x06, 0x02, 0x00, 0x91, 0x01, 0x02, 0x2A, +/* 0000D360 */ 0x03, 0x00, 0x5A, 0x02, 0x2A, 0x02, 0x00, 0xF0, 0x03, 0xFF, 0x29, 0x02, 0x00, 0x8F, 0x02, 0x23, +/* 0000D370 */ 0x29, 0x02, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x07, 0x03, 0x00, 0x91, 0x01, +/* 0000D380 */ 0x03, 0x2A, 0x04, 0x00, 0x5A, 0x02, 0x2A, 0x03, 0x00, 0xF0, 0x03, 0xFF, 0x29, 0x03, 0x00, 0x8F, +/* 0000D390 */ 0x02, 0x16, 0x29, 0x05, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x91, 0x01, 0x02, 0x2A, 0x03, +/* 0000D3A0 */ 0x00, 0x5A, 0x01, 0x2A, 0x04, 0x00, 0x5A, 0x02, 0x08, 0x04, 0x00, 0xCE, 0x00, 0x00, 0x00, 0x00, +/* 0000D3B0 */ 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x8F, 0x01, 0x15, 0x2B, 0x06, 0x00, 0x4A, 0x2B, +/* 0000D3C0 */ 0x7B, 0x2B, 0x2A, 0x03, 0x7B, 0x0B, 0x2A, 0x04, 0x7B, 0x0B, 0x2A, 0x05, 0x5A, 0x03, 0x2A, 0x04, +/* 0000D3D0 */ 0x00, 0xF0, 0x04, 0xFF, 0x29, 0x04, 0x00, 0xD0, 0x29, 0x0B, 0x00, 0x00, 0xA1, 0x00, 0x0E, 0x29, +/* 0000D3E0 */ 0xA1, 0x01, 0x0F, 0x29, 0xA1, 0x02, 0x10, 0x29, 0xA1, 0x03, 0x11, 0x29, 0xA1, 0x04, 0x12, 0x29, +/* 0000D3F0 */ 0xA1, 0x05, 0x13, 0x29, 0xA1, 0x06, 0x14, 0x29, 0xA1, 0x07, 0x15, 0x29, 0xA1, 0x08, 0x16, 0x29, +/* 0000D400 */ 0xA1, 0x09, 0x17, 0x29, 0xA1, 0x0A, 0x18, 0x29, 0x96, 0x02, 0x29, 0x8F, 0x02, 0x16, 0x29, 0x05, +/* 0000D410 */ 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x91, 0x01, 0x02, 0x2A, 0x03, 0x00, 0x5A, 0x01, 0x2A, +/* 0000D420 */ 0x05, 0x00, 0x5A, 0x02, 0x19, 0x05, 0x00, 0xCE, 0x14, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, +/* 0000D430 */ 0x2A, 0x00, 0x00, 0x00, 0x91, 0x01, 0x02, 0x2B, 0x03, 0x00, 0x07, 0x01, 0x00, 0xC5, 0x01, 0x2B, +/* 0000D440 */ 0x2B, 0x06, 0x00, 0x7B, 0x2B, 0x2A, 0x06, 0x7B, 0x1A, 0x2A, 0x07, 0x7B, 0x1A, 0x2A, 0x08, 0x7B, +/* 0000D450 */ 0x1A, 0x2A, 0x09, 0x5A, 0x03, 0x2A, 0x05, 0x00, 0xF0, 0x04, 0xFF, 0x29, 0x05, 0x00, 0x8F, 0x02, +/* 0000D460 */ 0x04, 0x29, 0x07, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x91, 0x01, 0x02, 0x2A, 0x03, 0x00, +/* 0000D470 */ 0x5F, 0x2A, 0x2A, 0x0A, 0x5A, 0x01, 0x2A, 0x07, 0x00, 0x8F, 0x02, 0x09, 0x2A, 0x08, 0x00, 0x5F, +/* 0000D480 */ 0x2A, 0x2A, 0x0B, 0x5A, 0x02, 0x2A, 0x07, 0x00, 0xF0, 0x03, 0xFF, 0x29, 0x07, 0x00, 0x8F, 0x02, +/* 0000D490 */ 0x16, 0x29, 0x05, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x91, 0x01, 0x02, 0x2A, 0x03, 0x00, +/* 0000D4A0 */ 0x5F, 0x2A, 0x2A, 0x0C, 0x5A, 0x01, 0x2A, 0x08, 0x00, 0x5A, 0x02, 0x1C, 0x08, 0x00, 0xCE, 0x2C, +/* 0000D4B0 */ 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x91, 0x01, 0x02, 0x2B, 0x03, +/* 0000D4C0 */ 0x00, 0x7B, 0x2B, 0x2A, 0x0D, 0x7B, 0x0B, 0x2A, 0x0E, 0x7B, 0x1A, 0x2A, 0x0F, 0x7B, 0x0B, 0x2A, +/* 0000D4D0 */ 0x10, 0x5A, 0x03, 0x2A, 0x08, 0x00, 0xF0, 0x04, 0xFF, 0x29, 0x08, 0x00, 0x8F, 0x02, 0x16, 0x29, +/* 0000D4E0 */ 0x05, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x91, 0x01, 0x02, 0x2A, 0x03, 0x00, 0x5F, 0x2A, +/* 0000D4F0 */ 0x2A, 0x11, 0x5A, 0x01, 0x2A, 0x09, 0x00, 0x5A, 0x02, 0x1D, 0x09, 0x00, 0xCE, 0x44, 0x00, 0x00, +/* 0000D500 */ 0x00, 0x03, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x00, 0xB9, 0x2C, 0x00, 0xB8, 0x01, 0x00, 0x00, +/* 0000D510 */ 0x00, 0x2C, 0x2C, 0x01, 0x6A, 0x01, 0x04, 0x2B, 0x2C, 0x2A, 0x7B, 0x2B, 0x2A, 0x12, 0x7B, 0x0B, +/* 0000D520 */ 0x2A, 0x13, 0x7B, 0x1A, 0x2A, 0x14, 0x7B, 0x0B, 0x2A, 0x15, 0x5A, 0x03, 0x2A, 0x09, 0x00, 0xF0, +/* 0000D530 */ 0x04, 0xFF, 0x29, 0x09, 0x00, 0x8F, 0x02, 0x16, 0x29, 0x05, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, +/* 0000D540 */ 0x02, 0x91, 0x01, 0x02, 0x2A, 0x03, 0x00, 0x5F, 0x2A, 0x2A, 0x16, 0x5A, 0x01, 0x2A, 0x0A, 0x00, +/* 0000D550 */ 0x5A, 0x02, 0x1E, 0x0A, 0x00, 0xCE, 0x5C, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x2A, 0x00, +/* 0000D560 */ 0x00, 0x00, 0x8F, 0x02, 0x23, 0x2B, 0x02, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, +/* 0000D570 */ 0x20, 0x0B, 0x00, 0xB9, 0x2D, 0x00, 0xB8, 0x01, 0x00, 0x00, 0x00, 0x2D, 0x2D, 0x01, 0x66, 0x01, +/* 0000D580 */ 0x05, 0x2C, 0x2D, 0x5A, 0x02, 0x2C, 0x0B, 0x00, 0xF0, 0x03, 0x2B, 0x2B, 0x0B, 0x00, 0x7B, 0x2B, +/* 0000D590 */ 0x2A, 0x17, 0x7B, 0x1A, 0x2A, 0x18, 0x7B, 0x0B, 0x2A, 0x19, 0x5A, 0x03, 0x2A, 0x0A, 0x00, 0xF0, +/* 0000D5A0 */ 0x04, 0xFF, 0x29, 0x0A, 0x00, 0x91, 0x01, 0x02, 0x00, 0x03, 0x00, 0x09, 0x07, 0x00, 0xA8, 0x00, +/* 0000D5B0 */ 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x05, 0x70, 0x00, 0x5C, 0x00, 0x00, 0x00, 0x03, 0x03, +/* 0000D5C0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, +/* 0000D5D0 */ 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, +/* 0000D5E0 */ 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x2C, 0x00, +/* 0000D5F0 */ 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, +/* 0000D600 */ 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x03, 0x04, +/* 0000D610 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, +/* 0000D620 */ 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, +/* 0000D630 */ 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0xFE, 0x04, +/* 0000D640 */ 0x02, 0xFE, 0x2F, 0x02, 0xFE, 0x2D, 0x02, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x95, 0x01, +/* 0000D650 */ 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x24, 0x01, 0xFE, +/* 0000D660 */ 0x24, 0x01, 0xFE, 0x24, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, +/* 0000D670 */ 0x01, 0xFE, 0x24, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, +/* 0000D680 */ 0xFE, 0x24, 0x01, 0xFE, 0x98, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0x02, 0x01, 0x01, 0x00, +/* 0000D690 */ 0xFE, 0x0B, 0x04, 0x02, 0x02, 0x00, 0xFE, 0x32, 0x02, 0x01, 0xFE, 0x0B, 0x02, 0xFF, 0x09, 0x07, +/* 0000D6A0 */ 0x02, 0x00, 0x0F, 0x06, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x3E, 0x19, 0x57, 0x00, 0x79, 0x02, 0x30, +/* 0000D6B0 */ 0x00, 0x5A, 0x04, 0x22, 0x00, 0xD4, 0x02, 0x22, 0x00, 0x52, 0x00, 0x48, 0x00, 0x9B, 0x00, 0x34, +/* 0000D6C0 */ 0x00, 0x1F, 0x01, 0x53, 0x00, 0x99, 0x00, 0x30, 0x00, 0x48, 0x00, 0x4E, 0x00, 0x9E, 0x00, 0x59, +/* 0000D6D0 */ 0x00, 0xC2, 0x04, 0x70, 0x00, 0x16, 0x03, 0x09, 0x00, 0x84, 0x00, 0x07, 0x00, 0x16, 0x00, 0x00, +/* 0000D6E0 */ 0x31, 0xDF, 0x00, 0x00, 0xC0, 0xDD, 0x00, 0x00, 0x97, 0xDB, 0x00, 0x00, 0x29, 0xDA, 0x00, 0x00, +/* 0000D6F0 */ 0x02, 0xD8, 0x00, 0x00, 0xF8, 0xD6, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x03, 0x00, +/* 0000D700 */ 0xFE, 0x51, 0x0C, 0x39, 0xA0, 0x41, 0xD1, 0x00, 0xB1, 0xFF, 0xAD, 0x32, 0x02, 0x00, 0xFF, 0xAD, +/* 0000D710 */ 0x32, 0x02, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFF, 0xAD, 0x32, 0x02, 0x00, 0xFE, 0x56, +/* 0000D720 */ 0x02, 0xFE, 0x56, 0x02, 0x05, 0x05, 0x08, 0x04, 0x22, 0x21, 0x05, 0x03, 0x01, 0x05, 0x05, 0x05, +/* 0000D730 */ 0x05, 0x07, 0x06, 0xFE, 0x94, 0x03, 0x05, 0xFE, 0x22, 0x04, 0x06, 0xFE, 0x2F, 0x03, 0x91, 0x58, +/* 0000D740 */ 0x05, 0x2A, 0x08, 0x05, 0x15, 0x03, 0x00, 0x08, 0x02, 0x09, 0x24, 0x00, 0x8F, 0x05, 0x03, 0x09, +/* 0000D750 */ 0x00, 0x00, 0x6D, 0x08, 0x09, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x09, 0x5A, 0x01, 0x03, 0x00, +/* 0000D760 */ 0x00, 0x5A, 0x02, 0x04, 0x00, 0x00, 0xF4, 0x03, 0xFF, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0000D770 */ 0x8F, 0x05, 0x03, 0x09, 0x00, 0x00, 0x6D, 0x08, 0x09, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x09, +/* 0000D780 */ 0x5A, 0x01, 0x05, 0x01, 0x00, 0xF4, 0x02, 0x08, 0x08, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, +/* 0000D790 */ 0x06, 0x08, 0xA8, 0x08, 0x14, 0x08, 0x00, 0x06, 0x08, 0x5F, 0x08, 0x06, 0x02, 0x0F, 0x24, 0x00, +/* 0000D7A0 */ 0x08, 0x8F, 0x05, 0x03, 0x09, 0x00, 0x00, 0x6D, 0x08, 0x09, 0x03, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 0000D7B0 */ 0x09, 0x5A, 0x01, 0x03, 0x02, 0x00, 0x5A, 0x02, 0x04, 0x02, 0x00, 0xF4, 0x03, 0xFF, 0x08, 0x03, +/* 0000D7C0 */ 0x00, 0x00, 0x00, 0x02, 0x00, 0x5F, 0x00, 0x06, 0x04, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, +/* 0000D7D0 */ 0xFE, 0xB6, 0x02, 0xFE, 0x05, 0x02, 0xFE, 0x37, 0x02, 0xFE, 0xB6, 0x02, 0xFE, 0x57, 0x02, 0xFF, +/* 0000D7E0 */ 0xD3, 0x32, 0x02, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3C, 0x00, 0x24, 0x00, 0x84, +/* 0000D7F0 */ 0x00, 0x22, 0x00, 0x4B, 0x00, 0x0F, 0x00, 0x69, 0x00, 0x24, 0x00, 0x84, 0x00, 0x09, 0x00, 0x37, +/* 0000D800 */ 0x00, 0x00, 0x7F, 0x5D, 0x08, 0xC1, 0x03, 0x1A, 0x0F, 0x00, 0xFE, 0x3B, 0x0C, 0x1B, 0xA0, 0x41, +/* 0000D810 */ 0xC3, 0x00, 0xFE, 0xEE, 0x03, 0xAF, 0xFF, 0x00, 0x00, 0x00, 0x02, 0xFF, 0xD6, 0x2D, 0x02, 0x00, +/* 0000D820 */ 0xFF, 0xD6, 0x2D, 0x02, 0x00, 0x01, 0x08, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFF, 0xD6, 0x2D, 0x02, +/* 0000D830 */ 0x00, 0xFE, 0x08, 0x04, 0xFE, 0x08, 0x04, 0x02, 0xFE, 0xE2, 0x03, 0xFE, 0x10, 0x02, 0x06, 0x07, +/* 0000D840 */ 0x0B, 0x05, 0x3D, 0x3D, 0x05, 0x06, 0x07, 0x04, 0x04, 0x04, 0x04, 0x08, 0x09, 0x0A, 0x06, 0xFE, +/* 0000D850 */ 0x94, 0x03, 0x05, 0xFE, 0xC6, 0x04, 0x06, 0xFE, 0x2F, 0x03, 0x07, 0x08, 0xFE, 0x0B, 0x01, 0x58, +/* 0000D860 */ 0x07, 0x2A, 0x0B, 0x07, 0x15, 0x03, 0x00, 0x0B, 0x02, 0x09, 0x24, 0x00, 0x8F, 0x05, 0x03, 0x0C, +/* 0000D870 */ 0x00, 0x00, 0x6D, 0x0B, 0x0C, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0C, 0x5A, 0x01, 0x03, 0x00, +/* 0000D880 */ 0x00, 0x5A, 0x02, 0x04, 0x00, 0x00, 0xF4, 0x03, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0000D890 */ 0x8F, 0x05, 0x03, 0x0C, 0x00, 0x00, 0x6D, 0x0B, 0x0C, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0C, +/* 0000D8A0 */ 0x5A, 0x01, 0x07, 0x01, 0x00, 0xF4, 0x02, 0x0B, 0x0B, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x96, +/* 0000D8B0 */ 0x02, 0x0B, 0x93, 0x02, 0x0B, 0x01, 0x00, 0xA8, 0x0C, 0x14, 0x0D, 0x00, 0x0B, 0x0C, 0x93, 0x02, +/* 0000D8C0 */ 0x0B, 0x01, 0x00, 0x5F, 0x0B, 0x0B, 0x02, 0x0F, 0x24, 0x00, 0x0B, 0x8F, 0x05, 0x03, 0x0C, 0x00, +/* 0000D8D0 */ 0x00, 0x6D, 0x0B, 0x0C, 0x03, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0C, 0x5A, 0x01, 0x03, 0x02, 0x00, +/* 0000D8E0 */ 0x5A, 0x02, 0x04, 0x02, 0x00, 0xF4, 0x03, 0xFF, 0x0B, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x8F, +/* 0000D8F0 */ 0x05, 0x04, 0x0B, 0x02, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x06, 0xCD, 0x0C, 0x5A, 0x01, 0x0C, +/* 0000D900 */ 0x03, 0x00, 0x5A, 0x02, 0x05, 0x03, 0x00, 0xF0, 0x03, 0x0B, 0x0B, 0x03, 0x00, 0x96, 0x03, 0x0B, +/* 0000D910 */ 0x8F, 0x05, 0x06, 0x0B, 0x03, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x06, 0x8F, 0x05, 0x17, 0x0C, +/* 0000D920 */ 0x04, 0x00, 0x5A, 0x01, 0x0C, 0x04, 0x00, 0x8F, 0x03, 0x02, 0x0C, 0x05, 0x00, 0x5A, 0x02, 0x0C, +/* 0000D930 */ 0x04, 0x00, 0xD6, 0x00, 0x0C, 0x5A, 0x03, 0x0C, 0x04, 0x00, 0xF0, 0x04, 0xFF, 0x0B, 0x04, 0x00, +/* 0000D940 */ 0x8F, 0x05, 0x04, 0x0B, 0x02, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x06, 0x93, 0x03, 0x0C, 0x06, +/* 0000D950 */ 0x00, 0x5A, 0x01, 0x0C, 0x05, 0x00, 0xCD, 0x0C, 0x5A, 0x02, 0x0C, 0x05, 0x00, 0xF0, 0x03, 0x00, +/* 0000D960 */ 0x0B, 0x05, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB6, 0x02, 0xFE, 0x05, 0x02, +/* 0000D970 */ 0xFE, 0x37, 0x02, 0xFE, 0xB6, 0x02, 0xFF, 0x0B, 0x2E, 0x02, 0x00, 0x09, 0x02, 0x00, 0x00, 0x00, +/* 0000D980 */ 0x0B, 0x00, 0x3C, 0x00, 0x24, 0x00, 0x8C, 0x00, 0x22, 0x00, 0x4B, 0x00, 0x19, 0x00, 0x69, 0x00, +/* 0000D990 */ 0x24, 0x00, 0x8D, 0x00, 0x21, 0x00, 0x47, 0x00, 0x30, 0x00, 0x44, 0x01, 0x28, 0x00, 0x3E, 0x00, +/* 0000D9A0 */ 0x00, 0xA5, 0xD9, 0x00, 0x00, 0x7F, 0x4C, 0x06, 0x01, 0x00, 0x10, 0x03, 0x00, 0xFE, 0x46, 0x0C, +/* 0000D9B0 */ 0x48, 0xA2, 0x41, 0xD1, 0x00, 0xB0, 0xFF, 0x8B, 0x30, 0x02, 0x00, 0xFF, 0x8B, 0x30, 0x02, 0x00, +/* 0000D9C0 */ 0x41, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0x8B, 0x30, 0x02, 0x00, 0xF8, 0xF8, 0x05, 0x04, 0x06, +/* 0000D9D0 */ 0x0D, 0x0D, 0x06, 0x01, 0x01, 0x02, 0x05, 0x05, 0xFE, 0xC7, 0x04, 0x06, 0xFE, 0xD6, 0x03, 0x36, +/* 0000D9E0 */ 0x8F, 0x01, 0x02, 0x06, 0x00, 0x00, 0x2D, 0x07, 0x02, 0x04, 0x2B, 0x06, 0x06, 0x07, 0x15, 0x03, +/* 0000D9F0 */ 0x00, 0x06, 0x03, 0x09, 0x1C, 0x00, 0x8F, 0x01, 0x03, 0x06, 0x01, 0x00, 0x8F, 0x01, 0x02, 0x07, +/* 0000DA00 */ 0x00, 0x00, 0x2D, 0x08, 0x02, 0x04, 0x98, 0x07, 0x07, 0x08, 0x00, 0x00, 0x9D, 0x07, 0x06, 0x04, +/* 0000DA10 */ 0x00, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFF, 0xBB, 0x30, 0x02, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, +/* 0000DA20 */ 0x16, 0x00, 0x5A, 0x00, 0x1E, 0x00, 0x6D, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x03, +/* 0000DA30 */ 0x00, 0xFE, 0x20, 0x0C, 0x10, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x15, 0x04, 0xAE, 0xFF, 0x61, 0x27, +/* 0000DA40 */ 0x02, 0x00, 0xFF, 0x61, 0x27, 0x02, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0x61, 0x27, +/* 0000DA50 */ 0x02, 0x00, 0xFE, 0x7C, 0x02, 0xFE, 0x7C, 0x02, 0x07, 0x06, 0x0A, 0x07, 0x34, 0x32, 0x05, 0x06, +/* 0000DA60 */ 0x03, 0x06, 0x06, 0x06, 0x06, 0x09, 0x06, 0xFE, 0x94, 0x03, 0x05, 0xFE, 0x22, 0x04, 0x06, 0xFE, +/* 0000DA70 */ 0x2F, 0x03, 0x08, 0xEA, 0x58, 0x07, 0x8F, 0x05, 0x24, 0x0B, 0x00, 0x00, 0x6D, 0x0A, 0x0B, 0x00, +/* 0000DA80 */ 0x07, 0x02, 0x00, 0x59, 0x00, 0x0B, 0x5A, 0x01, 0x06, 0x00, 0x00, 0xF4, 0x02, 0x0A, 0x0A, 0x00, +/* 0000DA90 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x06, 0x0A, 0x2A, 0x0A, 0x07, 0x15, 0x03, 0x00, 0x0A, 0x02, +/* 0000DAA0 */ 0x09, 0x24, 0x00, 0x8F, 0x05, 0x03, 0x0B, 0x01, 0x00, 0x6D, 0x0A, 0x0B, 0x01, 0x07, 0x03, 0x00, +/* 0000DAB0 */ 0x59, 0x00, 0x0B, 0x5A, 0x01, 0x03, 0x01, 0x00, 0x5A, 0x02, 0x04, 0x01, 0x00, 0xF4, 0x03, 0xFF, +/* 0000DAC0 */ 0x0A, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x8F, 0x05, 0x03, 0x0B, 0x01, 0x00, 0x6D, 0x0A, 0x0B, +/* 0000DAD0 */ 0x02, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0B, 0x5A, 0x01, 0x07, 0x02, 0x00, 0xF4, 0x02, 0x0A, 0x0A, +/* 0000DAE0 */ 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x45, 0x08, 0x0A, 0xA8, 0x0A, 0x14, 0x08, 0x00, 0x08, 0x0A, +/* 0000DAF0 */ 0x5F, 0x0A, 0x08, 0x03, 0x0F, 0x24, 0x00, 0x0A, 0x8F, 0x05, 0x03, 0x0B, 0x01, 0x00, 0x6D, 0x0A, +/* 0000DB00 */ 0x0B, 0x04, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0B, 0x5A, 0x01, 0x03, 0x03, 0x00, 0x5A, 0x02, 0x04, +/* 0000DB10 */ 0x03, 0x00, 0xF4, 0x03, 0xFF, 0x0A, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x8F, 0x05, 0x0C, 0x0A, +/* 0000DB20 */ 0x02, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x05, 0x8F, 0x05, 0x03, 0x0C, 0x01, 0x00, 0x6D, 0x0B, +/* 0000DB30 */ 0x0C, 0x05, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0C, 0x5A, 0x01, 0x06, 0x05, 0x00, 0x5A, 0x02, 0x08, +/* 0000DB40 */ 0x05, 0x00, 0xF4, 0x03, 0x0B, 0x0B, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x5A, 0x01, 0x0B, 0x04, +/* 0000DB50 */ 0x00, 0xF0, 0x02, 0x00, 0x0A, 0x04, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x23, +/* 0000DB60 */ 0x03, 0xFE, 0xB6, 0x02, 0xFE, 0x05, 0x02, 0xFE, 0x37, 0x02, 0xFE, 0xB6, 0x02, 0xFE, 0xF8, 0x01, +/* 0000DB70 */ 0xFF, 0x8A, 0x27, 0x02, 0x00, 0x08, 0x02, 0x00, 0x00, 0x00, 0x22, 0x00, 0x2F, 0x00, 0x0B, 0x00, +/* 0000DB80 */ 0x38, 0x00, 0x24, 0x00, 0x7C, 0x00, 0x22, 0x00, 0x47, 0x00, 0x0F, 0x00, 0x65, 0x00, 0x24, 0x00, +/* 0000DB90 */ 0x7C, 0x00, 0x40, 0x00, 0x47, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, +/* 0000DBA0 */ 0x04, 0x0C, 0x10, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x2F, 0x03, 0xAD, 0xFF, 0xEB, 0x22, 0x02, 0x00, +/* 0000DBB0 */ 0xFF, 0xEB, 0x22, 0x02, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x03, 0x01, 0xFF, 0xEB, 0x22, 0x02, 0x00, +/* 0000DBC0 */ 0xFE, 0x1E, 0x04, 0xFE, 0x1E, 0x04, 0x09, 0x05, 0x0B, 0x05, 0x5E, 0x57, 0x05, 0x09, 0x0A, 0x06, +/* 0000DBD0 */ 0x06, 0x06, 0x06, 0x0A, 0x08, 0x06, 0xFE, 0x2F, 0x03, 0x07, 0xFE, 0x8A, 0x01, 0x58, 0x07, 0x4E, +/* 0000DBE0 */ 0x08, 0x4E, 0x09, 0x15, 0x05, 0x00, 0x05, 0x02, 0xA8, 0x0B, 0x45, 0x05, 0x0B, 0x15, 0x05, 0x00, +/* 0000DBF0 */ 0x06, 0x02, 0xA8, 0x0B, 0x45, 0x06, 0x0B, 0x4E, 0x08, 0x4E, 0x09, 0x8F, 0x05, 0x07, 0x0B, 0x00, +/* 0000DC00 */ 0x00, 0x14, 0x0A, 0x00, 0x07, 0x0B, 0xA8, 0x0B, 0x14, 0x03, 0x00, 0x07, 0x0B, 0x09, 0x1E, 0x00, +/* 0000DC10 */ 0x8F, 0x01, 0x02, 0x0B, 0x01, 0x00, 0x4A, 0x0B, 0x07, 0x03, 0x00, 0x5A, 0x01, 0x05, 0x00, 0x00, +/* 0000DC20 */ 0x5A, 0x02, 0x06, 0x00, 0x00, 0xC5, 0x03, 0x00, 0x0B, 0x00, 0x00, 0x09, 0x37, 0x01, 0x8F, 0x05, +/* 0000DC30 */ 0x24, 0x0C, 0x02, 0x00, 0x6D, 0x0B, 0x0C, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0C, 0x5A, 0x01, +/* 0000DC40 */ 0x07, 0x01, 0x00, 0xF4, 0x02, 0x0B, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, 0x08, 0x0B, +/* 0000DC50 */ 0x8F, 0x05, 0x12, 0x0B, 0x03, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x08, 0x02, +/* 0000DC60 */ 0x00, 0xF0, 0x02, 0x0B, 0x0B, 0x02, 0x00, 0x0F, 0x1F, 0x00, 0x0B, 0x8F, 0x05, 0x03, 0x0C, 0x04, +/* 0000DC70 */ 0x00, 0x6D, 0x0B, 0x0C, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0C, 0x5A, 0x01, 0x03, 0x03, 0x00, +/* 0000DC80 */ 0xF4, 0x02, 0xFF, 0x0B, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x8F, 0x05, 0x03, 0x0C, 0x04, 0x00, +/* 0000DC90 */ 0x6D, 0x0B, 0x0C, 0x02, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0C, 0x5A, 0x01, 0x08, 0x04, 0x00, 0xF4, +/* 0000DCA0 */ 0x02, 0x0B, 0x0B, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x45, 0x09, 0x0B, 0xA8, 0x0B, 0x14, 0x03, +/* 0000DCB0 */ 0x00, 0x09, 0x0B, 0x09, 0x45, 0x00, 0x8F, 0x05, 0x04, 0x0B, 0x05, 0x00, 0x07, 0x03, 0x00, 0x59, +/* 0000DCC0 */ 0x00, 0x02, 0xCD, 0x0C, 0x5A, 0x01, 0x0C, 0x05, 0x00, 0x5A, 0x02, 0x04, 0x05, 0x00, 0xF0, 0x03, +/* 0000DCD0 */ 0x0B, 0x0B, 0x05, 0x00, 0x45, 0x09, 0x0B, 0x8F, 0x05, 0x03, 0x0C, 0x04, 0x00, 0x6D, 0x0B, 0x0C, +/* 0000DCE0 */ 0x03, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0C, 0x5A, 0x01, 0x08, 0x06, 0x00, 0x5A, 0x02, 0x09, 0x06, +/* 0000DCF0 */ 0x00, 0xF4, 0x03, 0xFF, 0x0B, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x8F, 0x02, 0x02, 0x0B, 0x06, +/* 0000DD00 */ 0x00, 0x4A, 0x0B, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x09, 0x07, 0x00, 0x5A, 0x02, +/* 0000DD10 */ 0x05, 0x07, 0x00, 0x5A, 0x03, 0x06, 0x07, 0x00, 0xF0, 0x04, 0xFF, 0x0B, 0x07, 0x00, 0x45, 0x0B, +/* 0000DD20 */ 0x09, 0x8F, 0x05, 0x06, 0x0C, 0x07, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x8F, 0x05, 0x1A, +/* 0000DD30 */ 0x0D, 0x08, 0x00, 0x5A, 0x01, 0x0D, 0x08, 0x00, 0x8F, 0x01, 0x03, 0x0D, 0x09, 0x00, 0x4A, 0x0D, +/* 0000DD40 */ 0x5A, 0x02, 0x0D, 0x08, 0x00, 0x5A, 0x03, 0x08, 0x08, 0x00, 0xF0, 0x04, 0x0C, 0x0C, 0x08, 0x00, +/* 0000DD50 */ 0x77, 0x0C, 0x0B, 0x04, 0x5F, 0x0B, 0x09, 0x05, 0x82, 0x0B, 0x0B, 0x06, 0x01, 0x45, 0x00, 0x08, +/* 0000DD60 */ 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x21, 0x03, 0xFE, 0xB2, 0x02, 0xFE, 0x05, 0x02, +/* 0000DD70 */ 0xFE, 0x06, 0x02, 0xFE, 0x57, 0x02, 0xFE, 0x57, 0x02, 0xFF, 0x01, 0x23, 0x02, 0x00, 0x10, 0x06, +/* 0000DD80 */ 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0E, 0x00, 0x2B, 0x00, 0x15, 0x00, 0x43, 0x00, 0x1E, +/* 0000DD90 */ 0x00, 0x56, 0x00, 0x22, 0x00, 0x38, 0x00, 0x1B, 0x00, 0x38, 0x00, 0x1F, 0x00, 0x9B, 0x00, 0x22, +/* 0000DDA0 */ 0x00, 0x47, 0x00, 0x0A, 0x00, 0x3A, 0x00, 0x21, 0x00, 0x3F, 0x00, 0x24, 0x00, 0x58, 0x00, 0x23, +/* 0000DDB0 */ 0x00, 0x4D, 0x00, 0x36, 0x00, 0x65, 0x00, 0x09, 0x00, 0x3D, 0x00, 0x08, 0x00, 0x1C, 0x00, 0x00, +/* 0000DDC0 */ 0x7F, 0x5C, 0x0A, 0xC1, 0x07, 0x10, 0x03, 0x00, 0xFE, 0xF7, 0x0B, 0x62, 0xA0, 0x41, 0xF1, 0x00, +/* 0000DDD0 */ 0xAC, 0xFF, 0x9D, 0x20, 0x02, 0x00, 0xFF, 0x9D, 0x20, 0x02, 0x00, 0x0B, 0xFE, 0x00, 0x90, 0x01, +/* 0000DDE0 */ 0x01, 0xFF, 0x9D, 0x20, 0x02, 0x00, 0xFE, 0xE1, 0x01, 0xFE, 0xE1, 0x01, 0x08, 0x09, 0x0E, 0x07, +/* 0000DDF0 */ 0x38, 0x36, 0x04, 0x02, 0x06, 0x06, 0x03, 0x03, 0x03, 0x03, 0x01, 0x0D, 0x07, 0x06, 0xFE, 0xA4, +/* 0000DE00 */ 0x03, 0x05, 0xFE, 0x0F, 0x04, 0x06, 0xFE, 0x0E, 0x04, 0x08, 0x01, 0x00, 0x01, 0x01, 0xF6, 0xB1, +/* 0000DE10 */ 0x0B, 0x58, 0x09, 0x2A, 0x0E, 0x09, 0x15, 0x03, 0x00, 0x0E, 0x03, 0x09, 0x33, 0x00, 0x8F, 0x04, +/* 0000DE20 */ 0x0B, 0x0E, 0x00, 0x00, 0xE3, 0x0E, 0x09, 0x0E, 0x00, 0x0F, 0x24, 0x00, 0x0E, 0x8F, 0x04, 0x03, +/* 0000DE30 */ 0x0F, 0x01, 0x00, 0x6D, 0x0E, 0x0F, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0F, 0x5A, 0x01, 0x04, +/* 0000DE40 */ 0x00, 0x00, 0x5A, 0x02, 0x05, 0x00, 0x00, 0xF4, 0x03, 0xFF, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0000DE50 */ 0x00, 0x8F, 0x04, 0x04, 0x0E, 0x02, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x06, 0xCD, 0x0F, 0x5A, +/* 0000DE60 */ 0x01, 0x0F, 0x01, 0x00, 0x5A, 0x02, 0x02, 0x01, 0x00, 0xF0, 0x03, 0x0E, 0x0E, 0x01, 0x00, 0x45, +/* 0000DE70 */ 0x0A, 0x0E, 0x8F, 0x01, 0x02, 0x0E, 0x03, 0x00, 0x4A, 0x0E, 0x07, 0x04, 0x00, 0x59, 0x00, 0x06, +/* 0000DE80 */ 0x5A, 0x01, 0x0A, 0x02, 0x00, 0x98, 0x0F, 0x0B, 0x07, 0x00, 0x00, 0x5A, 0x02, 0x0F, 0x02, 0x00, +/* 0000DE90 */ 0x98, 0x0F, 0x0B, 0x08, 0x01, 0x00, 0x5A, 0x03, 0x0F, 0x02, 0x00, 0xF0, 0x04, 0xFF, 0x0E, 0x02, +/* 0000DEA0 */ 0x00, 0x8F, 0x04, 0x24, 0x0F, 0x04, 0x00, 0x6D, 0x0E, 0x0F, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 0000DEB0 */ 0x0F, 0x5A, 0x01, 0x09, 0x03, 0x00, 0xF4, 0x02, 0x0E, 0x0E, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, +/* 0000DEC0 */ 0x45, 0x0C, 0x0E, 0x8F, 0x04, 0x0C, 0x0E, 0x05, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x06, 0x8F, +/* 0000DED0 */ 0x04, 0x03, 0x10, 0x01, 0x00, 0x6D, 0x0F, 0x10, 0x02, 0x07, 0x03, 0x00, 0x59, 0x00, 0x10, 0x5A, +/* 0000DEE0 */ 0x01, 0x0C, 0x05, 0x00, 0x5A, 0x02, 0x0A, 0x05, 0x00, 0xF4, 0x03, 0x0F, 0x0F, 0x02, 0x00, 0x00, +/* 0000DEF0 */ 0x00, 0x05, 0x00, 0x5A, 0x01, 0x0F, 0x04, 0x00, 0xF0, 0x02, 0x00, 0x0E, 0x04, 0x00, 0x09, 0x02, +/* 0000DF00 */ 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB6, 0x02, 0xFE, 0x23, 0x03, 0xFE, 0xF8, 0x01, 0xFF, 0xBB, +/* 0000DF10 */ 0x20, 0x02, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x53, 0x00, 0x24, 0x00, 0x70, 0x00, +/* 0000DF20 */ 0x21, 0x00, 0x3A, 0x00, 0x2F, 0x00, 0x52, 0x00, 0x22, 0x00, 0x31, 0x00, 0x40, 0x00, 0x42, 0x00, +/* 0000DF30 */ 0x00, 0x7F, 0x5C, 0x1A, 0xC1, 0x43, 0x50, 0x03, 0x00, 0xFE, 0x7D, 0x0B, 0x0C, 0xB3, 0x41, 0xC1, +/* 0000DF40 */ 0x00, 0xFE, 0x0B, 0x04, 0xAB, 0xFF, 0x49, 0x07, 0x02, 0x00, 0xFF, 0x49, 0x07, 0x02, 0x00, 0x45, +/* 0000DF50 */ 0xFE, 0x00, 0x90, 0x04, 0x04, 0xFF, 0x49, 0x07, 0x02, 0x00, 0xFE, 0xF0, 0x18, 0xFE, 0xF0, 0x18, +/* 0000DF60 */ 0x18, 0x23, 0x37, 0x07, 0xFE, 0x82, 0x01, 0xFE, 0x64, 0x01, 0x04, 0x02, 0x22, 0x04, 0x10, 0x25, +/* 0000DF70 */ 0x25, 0x25, 0x25, 0x01, 0x36, 0x37, 0x06, 0xFE, 0x94, 0x03, 0x06, 0xFE, 0xBA, 0x04, 0x08, 0x06, +/* 0000DF80 */ 0xFE, 0x2F, 0x03, 0x0B, 0x06, 0xFE, 0xD6, 0x03, 0x07, 0x06, 0xFE, 0xE0, 0x03, 0x06, 0xFE, 0xA3, +/* 0000DF90 */ 0x03, 0x05, 0xFE, 0x9C, 0x03, 0x05, 0xFE, 0xDF, 0x03, 0x06, 0xFE, 0x18, 0x04, 0x06, 0xFE, 0x19, +/* 0000DFA0 */ 0x04, 0x06, 0xFE, 0x1A, 0x04, 0x06, 0xFE, 0x1B, 0x04, 0x06, 0xFE, 0x1C, 0x04, 0x06, 0xFE, 0x1D, +/* 0000DFB0 */ 0x04, 0x06, 0xFE, 0x1E, 0x04, 0x06, 0xFE, 0x37, 0x03, 0x06, 0xFE, 0xDA, 0x03, 0x01, 0x01, 0x01, +/* 0000DFC0 */ 0x15, 0x06, 0xFE, 0xDD, 0x03, 0x06, 0xFE, 0xDE, 0x03, 0x06, 0xFE, 0x1F, 0x04, 0x06, 0xFE, 0xA2, +/* 0000DFD0 */ 0x03, 0x06, 0xFE, 0x17, 0x04, 0x06, 0xFE, 0xDB, 0x03, 0x01, 0x00, 0x01, 0x14, 0x01, 0x03, 0x06, +/* 0000DFE0 */ 0xFE, 0xDC, 0x03, 0x05, 0xFE, 0xC4, 0x04, 0xFE, 0x6B, 0x06, 0x2A, 0x38, 0x23, 0x0D, 0x03, 0x00, +/* 0000DFF0 */ 0x38, 0x02, 0x09, 0x1A, 0x00, 0x8F, 0x04, 0x03, 0x39, 0x00, 0x00, 0x6D, 0x38, 0x39, 0x00, 0x07, +/* 0000E000 */ 0x01, 0x00, 0x59, 0x00, 0x39, 0xF4, 0x01, 0xFF, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, +/* 0000E010 */ 0x04, 0x06, 0x38, 0x01, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x04, 0x8F, 0x04, 0x14, 0x39, 0x02, +/* 0000E020 */ 0x00, 0x5A, 0x01, 0x39, 0x01, 0x00, 0x5A, 0x02, 0x23, 0x01, 0x00, 0x5A, 0x03, 0x03, 0x01, 0x00, +/* 0000E030 */ 0xF0, 0x04, 0x38, 0x38, 0x01, 0x00, 0x0E, 0x2C, 0x00, 0x38, 0x5F, 0x38, 0x23, 0x01, 0x0E, 0x24, +/* 0000E040 */ 0x00, 0x38, 0x8F, 0x04, 0x03, 0x39, 0x00, 0x00, 0x6D, 0x38, 0x39, 0x02, 0x07, 0x03, 0x00, 0x59, +/* 0000E050 */ 0x00, 0x39, 0x5A, 0x01, 0x05, 0x02, 0x00, 0x5A, 0x02, 0x05, 0x02, 0x00, 0xF4, 0x03, 0xFF, 0x38, +/* 0000E060 */ 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x77, 0x06, 0x23, 0x03, 0x2A, 0x38, 0x25, 0x14, 0x03, 0x00, +/* 0000E070 */ 0x38, 0x07, 0x09, 0x24, 0x00, 0x8F, 0x04, 0x04, 0x38, 0x03, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 0000E080 */ 0x04, 0xCD, 0x39, 0x5A, 0x01, 0x39, 0x03, 0x00, 0x5A, 0x02, 0x08, 0x03, 0x00, 0xF0, 0x03, 0x38, +/* 0000E090 */ 0x38, 0x03, 0x00, 0x45, 0x25, 0x38, 0x09, 0x22, 0x00, 0x8F, 0x04, 0x24, 0x39, 0x04, 0x00, 0x6D, +/* 0000E0A0 */ 0x38, 0x39, 0x04, 0x07, 0x02, 0x00, 0x59, 0x00, 0x39, 0x5A, 0x01, 0x25, 0x04, 0x00, 0xF4, 0x02, +/* 0000E0B0 */ 0x38, 0x38, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x45, 0x25, 0x38, 0x8F, 0x03, 0x02, 0x38, 0x05, +/* 0000E0C0 */ 0x00, 0x4A, 0x38, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x25, 0x05, 0x00, 0x5A, 0x02, +/* 0000E0D0 */ 0x09, 0x05, 0x00, 0x5A, 0x03, 0x0A, 0x05, 0x00, 0xD0, 0x39, 0x02, 0x00, 0x00, 0xA1, 0x00, 0x0B, +/* 0000E0E0 */ 0x39, 0xA1, 0x01, 0x0C, 0x39, 0x5A, 0x04, 0x39, 0x05, 0x00, 0x5A, 0x05, 0x0C, 0x05, 0x00, 0xF0, +/* 0000E0F0 */ 0x06, 0x38, 0x38, 0x05, 0x00, 0x45, 0x28, 0x38, 0x8F, 0x03, 0x02, 0x38, 0x05, 0x00, 0x4A, 0x38, +/* 0000E100 */ 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x25, 0x06, 0x00, 0x5A, 0x02, 0x0D, 0x06, 0x00, +/* 0000E110 */ 0x5A, 0x03, 0x0A, 0x06, 0x00, 0xD0, 0x39, 0x03, 0x01, 0x00, 0xA1, 0x00, 0x0E, 0x39, 0xA1, 0x01, +/* 0000E120 */ 0x0F, 0x39, 0xA1, 0x02, 0x10, 0x39, 0x5A, 0x04, 0x39, 0x06, 0x00, 0x5A, 0x05, 0x0E, 0x06, 0x00, +/* 0000E130 */ 0xF0, 0x06, 0x38, 0x38, 0x06, 0x00, 0x45, 0x29, 0x38, 0x8F, 0x04, 0x03, 0x38, 0x00, 0x00, 0x5F, +/* 0000E140 */ 0x38, 0x38, 0x05, 0x98, 0x38, 0x38, 0x29, 0x00, 0x00, 0x45, 0x2A, 0x38, 0x8F, 0x03, 0x02, 0x38, +/* 0000E150 */ 0x05, 0x00, 0x4A, 0x38, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x25, 0x07, 0x00, 0x5A, +/* 0000E160 */ 0x02, 0x10, 0x07, 0x00, 0x5A, 0x03, 0x0A, 0x07, 0x00, 0xA8, 0x39, 0x5A, 0x04, 0x39, 0x07, 0x00, +/* 0000E170 */ 0xA8, 0x39, 0x5A, 0x05, 0x39, 0x07, 0x00, 0xF0, 0x06, 0x38, 0x38, 0x07, 0x00, 0x45, 0x2B, 0x38, +/* 0000E180 */ 0x8F, 0x03, 0x02, 0x38, 0x05, 0x00, 0x4A, 0x38, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, +/* 0000E190 */ 0x25, 0x08, 0x00, 0x5A, 0x02, 0x11, 0x08, 0x00, 0x5A, 0x03, 0x0A, 0x08, 0x00, 0xD0, 0x39, 0x03, +/* 0000E1A0 */ 0x02, 0x00, 0xA1, 0x00, 0x12, 0x39, 0xA1, 0x01, 0x13, 0x39, 0xA1, 0x02, 0x14, 0x39, 0x5A, 0x04, +/* 0000E1B0 */ 0x39, 0x08, 0x00, 0x5A, 0x05, 0x13, 0x08, 0x00, 0xF0, 0x06, 0x38, 0x38, 0x08, 0x00, 0x45, 0x2C, +/* 0000E1C0 */ 0x38, 0xA8, 0x38, 0x45, 0x2D, 0x38, 0x8F, 0x03, 0x03, 0x38, 0x06, 0x00, 0x4A, 0x38, 0x07, 0x06, +/* 0000E1D0 */ 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x25, 0x09, 0x00, 0x5A, 0x02, 0x15, 0x09, 0x00, 0x5A, 0x03, +/* 0000E1E0 */ 0x16, 0x09, 0x00, 0x5A, 0x04, 0x17, 0x09, 0x00, 0x5A, 0x05, 0x16, 0x09, 0x00, 0xF0, 0x06, 0x38, +/* 0000E1F0 */ 0x38, 0x09, 0x00, 0x45, 0x2E, 0x38, 0xA8, 0x38, 0x45, 0x2F, 0x38, 0xA8, 0x38, 0x45, 0x30, 0x38, +/* 0000E200 */ 0xA8, 0x38, 0x45, 0x31, 0x38, 0x5F, 0x38, 0x25, 0x06, 0x45, 0x32, 0x38, 0x5F, 0x38, 0x25, 0x07, +/* 0000E210 */ 0x45, 0x33, 0x38, 0x2A, 0x38, 0x32, 0x15, 0x0B, 0x00, 0x38, 0x07, 0x2A, 0x38, 0x33, 0x15, 0x03, +/* 0000E220 */ 0x00, 0x38, 0x07, 0x09, 0x60, 0x00, 0x8F, 0x03, 0x03, 0x38, 0x06, 0x00, 0x4A, 0x38, 0x07, 0x06, +/* 0000E230 */ 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x25, 0x0A, 0x00, 0x5A, 0x02, 0x18, 0x0A, 0x00, 0x5A, 0x03, +/* 0000E240 */ 0x16, 0x0A, 0x00, 0x5A, 0x04, 0x17, 0x0A, 0x00, 0x5A, 0x05, 0x16, 0x0A, 0x00, 0xF0, 0x06, 0x38, +/* 0000E250 */ 0x38, 0x0A, 0x00, 0x45, 0x32, 0x38, 0x8F, 0x03, 0x03, 0x38, 0x06, 0x00, 0x4A, 0x38, 0x07, 0x06, +/* 0000E260 */ 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x25, 0x0B, 0x00, 0x5A, 0x02, 0x19, 0x0B, 0x00, 0x5A, 0x03, +/* 0000E270 */ 0x32, 0x0B, 0x00, 0x5A, 0x04, 0x17, 0x0B, 0x00, 0x5A, 0x05, 0x17, 0x0B, 0x00, 0xF0, 0x06, 0x38, +/* 0000E280 */ 0x38, 0x0B, 0x00, 0x45, 0x33, 0x38, 0x8F, 0x03, 0x02, 0x38, 0x05, 0x00, 0x4A, 0x38, 0x07, 0x06, +/* 0000E290 */ 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x25, 0x0C, 0x00, 0x5A, 0x02, 0x1A, 0x0C, 0x00, 0x5A, 0x03, +/* 0000E2A0 */ 0x1B, 0x0C, 0x00, 0xA8, 0x39, 0x5A, 0x04, 0x39, 0x0C, 0x00, 0x5A, 0x05, 0x06, 0x0C, 0x00, 0xF0, +/* 0000E2B0 */ 0x06, 0x38, 0x38, 0x0C, 0x00, 0x45, 0x34, 0x38, 0x8F, 0x03, 0x07, 0x38, 0x07, 0x00, 0x4A, 0x38, +/* 0000E2C0 */ 0x07, 0x02, 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x24, 0x0D, 0x00, 0xF0, 0x02, 0x38, 0x38, 0x0D, +/* 0000E2D0 */ 0x00, 0x45, 0x24, 0x38, 0x8F, 0x04, 0x2A, 0x38, 0x08, 0x00, 0x07, 0x05, 0x00, 0x59, 0x00, 0x04, +/* 0000E2E0 */ 0x5A, 0x01, 0x24, 0x0E, 0x00, 0x5A, 0x02, 0x28, 0x0E, 0x00, 0xD0, 0x39, 0x01, 0x03, 0x00, 0xA1, +/* 0000E2F0 */ 0x00, 0x1C, 0x39, 0x5A, 0x03, 0x39, 0x0E, 0x00, 0x8F, 0x04, 0x2B, 0x39, 0x09, 0x00, 0x5A, 0x04, +/* 0000E300 */ 0x39, 0x0E, 0x00, 0xF0, 0x05, 0x38, 0x38, 0x0E, 0x00, 0x45, 0x35, 0x38, 0x2A, 0x38, 0x2B, 0x15, +/* 0000E310 */ 0x03, 0x00, 0x38, 0x07, 0x09, 0x53, 0x00, 0x8F, 0x03, 0x06, 0x38, 0x0A, 0x00, 0x4A, 0x38, 0x07, +/* 0000E320 */ 0x02, 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x2B, 0x0F, 0x00, 0xF0, 0x02, 0x38, 0x38, 0x0F, 0x00, +/* 0000E330 */ 0x0F, 0x36, 0x00, 0x38, 0x8F, 0x04, 0x03, 0x39, 0x00, 0x00, 0x6D, 0x38, 0x39, 0x08, 0x07, 0x02, +/* 0000E340 */ 0x00, 0x59, 0x00, 0x39, 0x8F, 0x04, 0x0C, 0x3A, 0x0B, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x04, +/* 0000E350 */ 0x5A, 0x01, 0x2B, 0x11, 0x00, 0xF0, 0x02, 0x3A, 0x3A, 0x11, 0x00, 0x5A, 0x01, 0x3A, 0x10, 0x00, +/* 0000E360 */ 0xF4, 0x02, 0xFF, 0x38, 0x08, 0x00, 0x00, 0x00, 0x10, 0x00, 0x14, 0x03, 0x00, 0x29, 0x10, 0x09, +/* 0000E370 */ 0x1E, 0x01, 0x2A, 0x38, 0x2B, 0x14, 0x03, 0x00, 0x38, 0x07, 0x09, 0x1A, 0x00, 0x8F, 0x04, 0x03, +/* 0000E380 */ 0x39, 0x00, 0x00, 0x6D, 0x38, 0x39, 0x09, 0x07, 0x01, 0x00, 0x59, 0x00, 0x39, 0xF4, 0x01, 0xFF, +/* 0000E390 */ 0x38, 0x09, 0x00, 0x00, 0x00, 0x12, 0x00, 0x8F, 0x04, 0x06, 0x38, 0x01, 0x00, 0x07, 0x03, 0x00, +/* 0000E3A0 */ 0x59, 0x00, 0x04, 0x8F, 0x04, 0x1F, 0x39, 0x0C, 0x00, 0x5A, 0x01, 0x39, 0x13, 0x00, 0x5A, 0x02, +/* 0000E3B0 */ 0x2B, 0x13, 0x00, 0xF0, 0x03, 0x38, 0x38, 0x13, 0x00, 0x45, 0x2B, 0x38, 0xE7, 0x26, 0x00, 0x8F, +/* 0000E3C0 */ 0x04, 0x03, 0x39, 0x00, 0x00, 0x6D, 0x38, 0x39, 0x0A, 0x07, 0x02, 0x00, 0x59, 0x00, 0x39, 0x5A, +/* 0000E3D0 */ 0x01, 0x2B, 0x14, 0x00, 0xF4, 0x02, 0x38, 0x38, 0x0A, 0x00, 0x00, 0x00, 0x14, 0x00, 0x45, 0x2D, +/* 0000E3E0 */ 0x38, 0xEB, 0x09, 0x51, 0x00, 0xE9, 0x26, 0x06, 0x8F, 0x04, 0x22, 0x38, 0x0D, 0x00, 0x07, 0x02, +/* 0000E3F0 */ 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x26, 0x15, 0x00, 0xF0, 0x02, 0xFF, 0x38, 0x15, 0x00, 0x8F, +/* 0000E400 */ 0x04, 0x03, 0x39, 0x00, 0x00, 0x6D, 0x38, 0x39, 0x0B, 0x07, 0x02, 0x00, 0x59, 0x00, 0x39, 0x8F, +/* 0000E410 */ 0x04, 0x0C, 0x3A, 0x0B, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x2B, 0x17, 0x00, +/* 0000E420 */ 0xF0, 0x02, 0x3A, 0x3A, 0x17, 0x00, 0x5A, 0x01, 0x3A, 0x16, 0x00, 0xF4, 0x02, 0xFF, 0x38, 0x0B, +/* 0000E430 */ 0x00, 0x00, 0x00, 0x16, 0x00, 0xEB, 0x8F, 0x03, 0x03, 0x38, 0x06, 0x00, 0x4A, 0x38, 0x07, 0x06, +/* 0000E440 */ 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x25, 0x18, 0x00, 0x5A, 0x02, 0x1D, 0x18, 0x00, 0x5A, 0x03, +/* 0000E450 */ 0x1E, 0x18, 0x00, 0x5A, 0x04, 0x1F, 0x18, 0x00, 0x5A, 0x05, 0x2D, 0x18, 0x00, 0xF0, 0x06, 0x38, +/* 0000E460 */ 0x38, 0x18, 0x00, 0x45, 0x2F, 0x38, 0x8F, 0x04, 0x10, 0x39, 0x0E, 0x00, 0x6D, 0x38, 0x39, 0x0C, +/* 0000E470 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x39, 0x5A, 0x01, 0x2D, 0x19, 0x00, 0x5A, 0x02, 0x2F, 0x19, 0x00, +/* 0000E480 */ 0xF4, 0x03, 0x38, 0x38, 0x0C, 0x00, 0x00, 0x00, 0x19, 0x00, 0x45, 0x31, 0x38, 0x09, 0x93, 0x00, +/* 0000E490 */ 0xA8, 0x38, 0x45, 0x2B, 0x38, 0xA8, 0x38, 0x45, 0x2C, 0x38, 0x8F, 0x03, 0x03, 0x38, 0x06, 0x00, +/* 0000E4A0 */ 0x4A, 0x38, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x25, 0x1A, 0x00, 0x5A, 0x02, 0x1D, +/* 0000E4B0 */ 0x1A, 0x00, 0x5A, 0x03, 0x1E, 0x1A, 0x00, 0x5A, 0x04, 0x1F, 0x1A, 0x00, 0x5A, 0x05, 0x1E, 0x1A, +/* 0000E4C0 */ 0x00, 0xF0, 0x06, 0x38, 0x38, 0x1A, 0x00, 0x45, 0x2F, 0x38, 0x14, 0x03, 0x00, 0x29, 0x0F, 0x09, +/* 0000E4D0 */ 0x2A, 0x00, 0x8F, 0x04, 0x10, 0x39, 0x0E, 0x00, 0x6D, 0x38, 0x39, 0x0D, 0x07, 0x03, 0x00, 0x59, +/* 0000E4E0 */ 0x00, 0x39, 0x5A, 0x01, 0x2F, 0x1B, 0x00, 0x5A, 0x02, 0x1E, 0x1B, 0x00, 0xF4, 0x03, 0x38, 0x38, +/* 0000E4F0 */ 0x0D, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x45, 0x31, 0x38, 0x09, 0x27, 0x00, 0x8F, 0x04, 0x10, 0x39, +/* 0000E500 */ 0x0E, 0x00, 0x6D, 0x38, 0x39, 0x0E, 0x07, 0x03, 0x00, 0x59, 0x00, 0x39, 0x5A, 0x01, 0x2F, 0x1C, +/* 0000E510 */ 0x00, 0x5A, 0x02, 0x20, 0x1C, 0x00, 0xF4, 0x03, 0x38, 0x38, 0x0E, 0x00, 0x00, 0x00, 0x1C, 0x00, +/* 0000E520 */ 0x45, 0x31, 0x38, 0x8F, 0x03, 0x03, 0x38, 0x06, 0x00, 0x4A, 0x38, 0x07, 0x06, 0x00, 0x59, 0x00, +/* 0000E530 */ 0x04, 0x5A, 0x01, 0x25, 0x1D, 0x00, 0x5A, 0x02, 0x21, 0x1D, 0x00, 0x5A, 0x03, 0x2F, 0x1D, 0x00, +/* 0000E540 */ 0x5A, 0x04, 0x1F, 0x1D, 0x00, 0x5A, 0x05, 0x31, 0x1D, 0x00, 0xF0, 0x06, 0x38, 0x38, 0x1D, 0x00, +/* 0000E550 */ 0x45, 0x30, 0x38, 0x77, 0x28, 0x23, 0x0F, 0x5F, 0x38, 0x35, 0x10, 0x77, 0x38, 0x23, 0x11, 0x77, +/* 0000E560 */ 0x29, 0x23, 0x12, 0xA8, 0x38, 0x15, 0x03, 0x00, 0x2B, 0x38, 0x09, 0x04, 0x00, 0x77, 0x2B, 0x23, +/* 0000E570 */ 0x13, 0xA8, 0x38, 0x15, 0x03, 0x00, 0x2C, 0x38, 0x09, 0x18, 0x00, 0x77, 0x2C, 0x23, 0x14, 0x8F, +/* 0000E580 */ 0x04, 0x03, 0x38, 0x00, 0x00, 0x5F, 0x38, 0x38, 0x15, 0x98, 0x38, 0x38, 0x2C, 0x01, 0x00, 0x77, +/* 0000E590 */ 0x38, 0x23, 0x16, 0x77, 0x2E, 0x23, 0x17, 0x77, 0x2F, 0x23, 0x18, 0x77, 0x30, 0x23, 0x19, 0xA8, +/* 0000E5A0 */ 0x38, 0x15, 0x03, 0x00, 0x33, 0x38, 0x09, 0x08, 0x00, 0x77, 0x32, 0x23, 0x1A, 0x77, 0x33, 0x23, +/* 0000E5B0 */ 0x1B, 0x77, 0x2A, 0x23, 0x1C, 0x77, 0x34, 0x23, 0x1D, 0xE7, 0x23, 0x00, 0x8F, 0x04, 0x03, 0x39, +/* 0000E5C0 */ 0x00, 0x00, 0x6D, 0x38, 0x39, 0x1E, 0x07, 0x02, 0x00, 0x59, 0x00, 0x39, 0x5A, 0x01, 0x23, 0x1E, +/* 0000E5D0 */ 0x00, 0xF4, 0x02, 0xFF, 0x38, 0x1E, 0x00, 0x00, 0x00, 0x1E, 0x00, 0xEB, 0x09, 0x35, 0x00, 0xE9, +/* 0000E5E0 */ 0x27, 0x06, 0x8F, 0x04, 0x22, 0x38, 0x0D, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, +/* 0000E5F0 */ 0x27, 0x1F, 0x00, 0xF0, 0x02, 0xFF, 0x38, 0x1F, 0x00, 0x8F, 0x04, 0x03, 0x39, 0x00, 0x00, 0x6D, +/* 0000E600 */ 0x38, 0x39, 0x1F, 0x07, 0x01, 0x00, 0x59, 0x00, 0x39, 0xF4, 0x01, 0xFF, 0x38, 0x1F, 0x00, 0x00, +/* 0000E610 */ 0x00, 0x20, 0x00, 0xEB, 0x5F, 0x38, 0x23, 0x20, 0x0F, 0x04, 0x00, 0x38, 0x77, 0x22, 0x23, 0x21, +/* 0000E620 */ 0x45, 0x38, 0x23, 0x8F, 0x04, 0x06, 0x39, 0x01, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x04, 0x8F, +/* 0000E630 */ 0x04, 0x1E, 0x3A, 0x0F, 0x00, 0x5A, 0x01, 0x3A, 0x21, 0x00, 0x5F, 0x3A, 0x23, 0x22, 0x5A, 0x02, +/* 0000E640 */ 0x3A, 0x21, 0x00, 0xF0, 0x03, 0x39, 0x39, 0x21, 0x00, 0x77, 0x39, 0x38, 0x23, 0x77, 0x06, 0x23, +/* 0000E650 */ 0x24, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xAA, 0x02, 0xFE, 0x08, 0x02, 0xFE, 0xAB, 0x02, 0xFE, 0x08, +/* 0000E660 */ 0x02, 0xFE, 0x21, 0x03, 0xFE, 0x25, 0x02, 0xFE, 0x48, 0x02, 0xFE, 0x45, 0x02, 0xFE, 0xB7, 0x02, +/* 0000E670 */ 0xFE, 0xB8, 0x02, 0xFE, 0xFB, 0x01, 0xFE, 0xB7, 0x02, 0xFE, 0xFE, 0x00, 0xFE, 0xFE, 0x00, 0xFE, +/* 0000E680 */ 0xFE, 0x00, 0xFE, 0xC5, 0x04, 0xFE, 0x0D, 0x02, 0xFE, 0x09, 0x02, 0xFE, 0x64, 0x02, 0xFE, 0x33, +/* 0000E690 */ 0x02, 0xFE, 0x34, 0x02, 0xFE, 0x26, 0x02, 0xFE, 0x35, 0x02, 0xFE, 0x3B, 0x02, 0xFE, 0x3A, 0x02, +/* 0000E6A0 */ 0xFE, 0x38, 0x02, 0xFE, 0x3C, 0x02, 0xFE, 0x39, 0x02, 0xFE, 0x36, 0x02, 0xFE, 0x3F, 0x02, 0xFE, +/* 0000E6B0 */ 0xF9, 0x01, 0xFE, 0xAD, 0x02, 0xFE, 0x3D, 0x02, 0xFE, 0x3D, 0x02, 0xFE, 0x3D, 0x02, 0xFE, 0x3D, +/* 0000E6C0 */ 0x02, 0xFE, 0x37, 0x02, 0xFF, 0x9E, 0x07, 0x02, 0x00, 0x46, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x00, +/* 0000E6D0 */ 0x3B, 0x00, 0x1A, 0x00, 0x3F, 0x00, 0x33, 0x00, 0x9B, 0x00, 0x24, 0x00, 0x6D, 0x00, 0x04, 0x00, +/* 0000E6E0 */ 0x61, 0x00, 0x0B, 0x00, 0x3A, 0x00, 0x24, 0x00, 0x4F, 0x00, 0x22, 0x00, 0x49, 0x00, 0x3D, 0x00, +/* 0000E6F0 */ 0x71, 0x00, 0x41, 0x00, 0x73, 0x00, 0x13, 0x00, 0x49, 0x00, 0x34, 0x00, 0x5F, 0x00, 0x41, 0x00, +/* 0000E700 */ 0x7D, 0x00, 0x05, 0x00, 0x31, 0x00, 0x30, 0x00, 0x67, 0x00, 0x05, 0x00, 0x37, 0x00, 0x05, 0x00, +/* 0000E710 */ 0x37, 0x00, 0x05, 0x00, 0x3F, 0x00, 0x07, 0x00, 0x51, 0x00, 0x07, 0x00, 0x52, 0x00, 0x13, 0x00, +/* 0000E720 */ 0x7E, 0x00, 0x30, 0x00, 0x6F, 0x00, 0x30, 0x00, 0x96, 0x00, 0x32, 0x00, 0x9A, 0x00, 0x1C, 0x00, +/* 0000E730 */ 0x41, 0x00, 0x38, 0x00, 0xA2, 0x00, 0x28, 0x00, 0x62, 0x00, 0x36, 0x00, 0x58, 0x00, 0x08, 0x00, +/* 0000E740 */ 0x30, 0x00, 0x0B, 0x00, 0x3F, 0x00, 0x1A, 0x00, 0x4F, 0x00, 0x28, 0x00, 0x74, 0x00, 0x28, 0x00, +/* 0000E750 */ 0x4A, 0x00, 0x01, 0x00, 0x24, 0x00, 0x17, 0x00, 0x2E, 0x00, 0x37, 0x00, 0x5F, 0x00, 0x30, 0x00, +/* 0000E760 */ 0x76, 0x00, 0x2A, 0x00, 0x7D, 0x00, 0x05, 0x00, 0x2A, 0x00, 0x05, 0x00, 0x31, 0x00, 0x30, 0x00, +/* 0000E770 */ 0x69, 0x00, 0x08, 0x00, 0x33, 0x00, 0x2A, 0x00, 0x78, 0x00, 0x27, 0x00, 0x7B, 0x00, 0x30, 0x00, +/* 0000E780 */ 0xC6, 0x00, 0x04, 0x00, 0x38, 0x00, 0x08, 0x00, 0x43, 0x00, 0x04, 0x00, 0x2F, 0x00, 0x0A, 0x00, +/* 0000E790 */ 0x32, 0x00, 0x04, 0x00, 0x47, 0x00, 0x0A, 0x00, 0x39, 0x00, 0x04, 0x00, 0x46, 0x00, 0x14, 0x00, +/* 0000E7A0 */ 0x80, 0x00, 0x04, 0x00, 0x4C, 0x00, 0x04, 0x00, 0x4E, 0x00, 0x04, 0x00, 0x4F, 0x00, 0x0A, 0x00, +/* 0000E7B0 */ 0x42, 0x00, 0x04, 0x00, 0x58, 0x00, 0x04, 0x00, 0x67, 0x00, 0x04, 0x00, 0x40, 0x00, 0x07, 0x00, +/* 0000E7C0 */ 0xA9, 0x00, 0x25, 0x00, 0x3C, 0x00, 0x01, 0x00, 0x20, 0x00, 0x17, 0x00, 0x6B, 0x01, 0x1B, 0x00, +/* 0000E7D0 */ 0x4A, 0x00, 0x08, 0x00, 0x3B, 0x00, 0x04, 0x00, 0x70, 0x00, 0x2D, 0x00, 0x7E, 0x00, 0x06, 0x00, +/* 0000E7E0 */ 0x3B, 0x00, 0x00, 0x7E, 0x5C, 0x08, 0xC1, 0x53, 0x50, 0x4B, 0x04, 0xFE, 0x88, 0x0A, 0x14, 0xA0, +/* 0000E7F0 */ 0x41, 0xD1, 0x00, 0xA2, 0xFF, 0xF3, 0xD5, 0x01, 0x00, 0xFF, 0xF3, 0xD5, 0x01, 0x00, 0x06, 0xFE, +/* 0000E800 */ 0x00, 0x90, 0x01, 0x01, 0xFF, 0xF3, 0xD5, 0x01, 0x00, 0xFE, 0xA8, 0x30, 0xFE, 0xA8, 0x30, 0x0B, +/* 0000E810 */ 0x16, 0x1A, 0x09, 0x9B, 0x9B, 0x02, 0x0C, 0x09, 0x1A, 0x1A, 0x1A, 0x1A, 0x05, 0x02, 0x19, 0x1A, +/* 0000E820 */ 0x08, 0x06, 0xFE, 0x27, 0x03, 0x06, 0xFE, 0xE8, 0x03, 0x05, 0xFE, 0xE9, 0x03, 0x05, 0xFE, 0xEA, +/* 0000E830 */ 0x03, 0x05, 0xFE, 0xEB, 0x03, 0x06, 0xFE, 0x38, 0x03, 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, 0x2B, +/* 0000E840 */ 0x03, 0x0B, 0x06, 0xFE, 0x2D, 0x03, 0x07, 0x06, 0xFE, 0xEC, 0x03, 0x0C, 0x06, 0xFE, 0x2C, 0x03, +/* 0000E850 */ 0x06, 0xFE, 0xED, 0x03, 0x06, 0xFE, 0xEE, 0x03, 0x06, 0xFE, 0xF1, 0x03, 0x06, 0xFE, 0x77, 0x03, +/* 0000E860 */ 0x05, 0xFE, 0xF0, 0x03, 0xFE, 0xEF, 0x02, 0xA8, 0x16, 0xA8, 0x17, 0xA8, 0x18, 0x8F, 0x02, 0x32, +/* 0000E870 */ 0x1C, 0x00, 0x00, 0x14, 0x0E, 0x00, 0x1C, 0x03, 0x8F, 0x02, 0x32, 0x1C, 0x00, 0x00, 0x14, 0x03, +/* 0000E880 */ 0x00, 0x1C, 0x04, 0x09, 0xC7, 0x02, 0xE0, 0x00, 0x03, 0x01, 0xB9, 0x1C, 0x00, 0x01, 0x66, 0x01, +/* 0000E890 */ 0x00, 0x16, 0x1C, 0x95, 0x00, 0x02, 0x16, 0x8F, 0x02, 0x03, 0x1D, 0x01, 0x00, 0x6D, 0x1C, 0x1D, +/* 0000E8A0 */ 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x1D, 0x8F, 0x02, 0x23, 0x1E, 0x02, 0x00, 0x07, 0x03, 0x00, +/* 0000E8B0 */ 0x59, 0x00, 0x02, 0x5A, 0x01, 0x05, 0x01, 0x00, 0xB9, 0x20, 0x00, 0x01, 0x66, 0x01, 0x01, 0x1F, +/* 0000E8C0 */ 0x20, 0x5A, 0x02, 0x1F, 0x01, 0x00, 0xF0, 0x03, 0x1E, 0x1E, 0x01, 0x00, 0x5A, 0x01, 0x1E, 0x00, +/* 0000E8D0 */ 0x00, 0x8F, 0x02, 0x03, 0x1E, 0x01, 0x00, 0x5F, 0x1E, 0x1E, 0x01, 0x5F, 0x1E, 0x1E, 0x02, 0x5A, +/* 0000E8E0 */ 0x02, 0x1E, 0x00, 0x00, 0xF4, 0x03, 0xFF, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x02, +/* 0000E8F0 */ 0x32, 0x1C, 0x00, 0x00, 0x14, 0x03, 0x00, 0x1C, 0x03, 0x09, 0x51, 0x02, 0xE0, 0x01, 0x04, 0x02, +/* 0000E900 */ 0xB9, 0x1C, 0x00, 0xB8, 0x01, 0x00, 0x00, 0x00, 0x1C, 0x1C, 0x01, 0x66, 0x01, 0x02, 0x17, 0x1C, +/* 0000E910 */ 0x95, 0x01, 0x02, 0x17, 0x01, 0x66, 0x01, 0x03, 0x18, 0x1C, 0x95, 0x01, 0x03, 0x18, 0x8F, 0x02, +/* 0000E920 */ 0x23, 0x1C, 0x02, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x06, 0x02, 0x00, 0x91, +/* 0000E930 */ 0x01, 0x02, 0x1D, 0x03, 0x00, 0x5A, 0x02, 0x1D, 0x02, 0x00, 0xF0, 0x03, 0xFF, 0x1C, 0x02, 0x00, +/* 0000E940 */ 0x8F, 0x02, 0x23, 0x1C, 0x02, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x07, 0x03, +/* 0000E950 */ 0x00, 0x91, 0x01, 0x03, 0x1D, 0x04, 0x00, 0x5A, 0x02, 0x1D, 0x03, 0x00, 0xF0, 0x03, 0xFF, 0x1C, +/* 0000E960 */ 0x03, 0x00, 0x8F, 0x02, 0x16, 0x1C, 0x05, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x91, 0x01, +/* 0000E970 */ 0x02, 0x1D, 0x03, 0x00, 0x5A, 0x01, 0x1D, 0x04, 0x00, 0x5A, 0x02, 0x08, 0x04, 0x00, 0xCE, 0x00, +/* 0000E980 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0x8F, 0x01, 0x13, 0x1E, 0x06, +/* 0000E990 */ 0x00, 0x4A, 0x1E, 0x7B, 0x1E, 0x1D, 0x03, 0x7B, 0x0B, 0x1D, 0x04, 0x7B, 0x0B, 0x1D, 0x05, 0x5A, +/* 0000E9A0 */ 0x03, 0x1D, 0x04, 0x00, 0xF0, 0x04, 0xFF, 0x1C, 0x04, 0x00, 0x8F, 0x02, 0x16, 0x1C, 0x05, 0x00, +/* 0000E9B0 */ 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x91, 0x01, 0x02, 0x1D, 0x03, 0x00, 0x5A, 0x01, 0x1D, 0x05, +/* 0000E9C0 */ 0x00, 0x5A, 0x02, 0x0E, 0x05, 0x00, 0xCE, 0x14, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1D, +/* 0000E9D0 */ 0x00, 0x00, 0x00, 0x91, 0x01, 0x02, 0x1E, 0x03, 0x00, 0x07, 0x01, 0x00, 0xC5, 0x01, 0x1E, 0x1E, +/* 0000E9E0 */ 0x06, 0x00, 0x7B, 0x1E, 0x1D, 0x06, 0x7B, 0x0F, 0x1D, 0x07, 0x7B, 0x0F, 0x1D, 0x08, 0x7B, 0x0F, +/* 0000E9F0 */ 0x1D, 0x09, 0x5A, 0x03, 0x1D, 0x05, 0x00, 0xF0, 0x04, 0xFF, 0x1C, 0x05, 0x00, 0x8F, 0x02, 0x04, +/* 0000EA00 */ 0x1C, 0x07, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x91, 0x01, 0x02, 0x1D, 0x03, 0x00, 0x5F, +/* 0000EA10 */ 0x1D, 0x1D, 0x0A, 0x5A, 0x01, 0x1D, 0x07, 0x00, 0x8F, 0x02, 0x09, 0x1D, 0x08, 0x00, 0x5F, 0x1D, +/* 0000EA20 */ 0x1D, 0x0B, 0x5A, 0x02, 0x1D, 0x07, 0x00, 0xF0, 0x03, 0xFF, 0x1C, 0x07, 0x00, 0x8F, 0x02, 0x16, +/* 0000EA30 */ 0x1C, 0x05, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x91, 0x01, 0x02, 0x1D, 0x03, 0x00, 0x5F, +/* 0000EA40 */ 0x1D, 0x1D, 0x0C, 0x5A, 0x01, 0x1D, 0x08, 0x00, 0x5A, 0x02, 0x11, 0x08, 0x00, 0xCE, 0x2C, 0x00, +/* 0000EA50 */ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0x91, 0x01, 0x02, 0x1E, 0x03, 0x00, +/* 0000EA60 */ 0x7B, 0x1E, 0x1D, 0x0D, 0x7B, 0x0B, 0x1D, 0x0E, 0x7B, 0x0F, 0x1D, 0x0F, 0x7B, 0x0B, 0x1D, 0x10, +/* 0000EA70 */ 0x5A, 0x03, 0x1D, 0x08, 0x00, 0xF0, 0x04, 0xFF, 0x1C, 0x08, 0x00, 0x8F, 0x02, 0x16, 0x1C, 0x05, +/* 0000EA80 */ 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x91, 0x01, 0x02, 0x1D, 0x03, 0x00, 0x5F, 0x1D, 0x1D, +/* 0000EA90 */ 0x11, 0x5A, 0x01, 0x1D, 0x09, 0x00, 0x5A, 0x02, 0x12, 0x09, 0x00, 0xCE, 0x44, 0x00, 0x00, 0x00, +/* 0000EAA0 */ 0x03, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0xB9, 0x1F, 0x00, 0xB8, 0x01, 0x00, 0x00, 0x00, +/* 0000EAB0 */ 0x1F, 0x1F, 0x01, 0x6A, 0x01, 0x04, 0x1E, 0x1F, 0x1D, 0x7B, 0x1E, 0x1D, 0x12, 0x7B, 0x0B, 0x1D, +/* 0000EAC0 */ 0x13, 0x7B, 0x0F, 0x1D, 0x14, 0x7B, 0x0B, 0x1D, 0x15, 0x5A, 0x03, 0x1D, 0x09, 0x00, 0xF0, 0x04, +/* 0000EAD0 */ 0xFF, 0x1C, 0x09, 0x00, 0x8F, 0x02, 0x16, 0x1C, 0x05, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, +/* 0000EAE0 */ 0x91, 0x01, 0x02, 0x1D, 0x03, 0x00, 0x5F, 0x1D, 0x1D, 0x16, 0x5A, 0x01, 0x1D, 0x0A, 0x00, 0x5A, +/* 0000EAF0 */ 0x02, 0x13, 0x0A, 0x00, 0xCE, 0x5C, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, +/* 0000EB00 */ 0x00, 0x8F, 0x02, 0x23, 0x1E, 0x02, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x15, +/* 0000EB10 */ 0x0B, 0x00, 0xB9, 0x20, 0x00, 0xB8, 0x01, 0x00, 0x00, 0x00, 0x20, 0x20, 0x01, 0x66, 0x01, 0x05, +/* 0000EB20 */ 0x1F, 0x20, 0x5A, 0x02, 0x1F, 0x0B, 0x00, 0xF0, 0x03, 0x1E, 0x1E, 0x0B, 0x00, 0x7B, 0x1E, 0x1D, +/* 0000EB30 */ 0x17, 0x7B, 0x0F, 0x1D, 0x18, 0x7B, 0x0B, 0x1D, 0x19, 0x5A, 0x03, 0x1D, 0x0A, 0x00, 0xF0, 0x04, +/* 0000EB40 */ 0xFF, 0x1C, 0x0A, 0x00, 0x91, 0x01, 0x02, 0x00, 0x03, 0x00, 0x09, 0x07, 0x00, 0xA8, 0x00, 0x09, +/* 0000EB50 */ 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x05, 0x70, 0x00, 0x5C, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, +/* 0000EB60 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, +/* 0000EB70 */ 0x00, 0x44, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, +/* 0000EB80 */ 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x2C, 0x00, 0x00, +/* 0000EB90 */ 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, +/* 0000EBA0 */ 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, +/* 0000EBB0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, +/* 0000EBC0 */ 0x00, 0x95, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0000EBD0 */ 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0xFE, 0x04, 0x02, +/* 0000EBE0 */ 0xFE, 0x2F, 0x02, 0xFE, 0x2E, 0x02, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x95, 0x01, 0xFE, +/* 0000EBF0 */ 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x24, 0x01, 0xFE, 0x24, +/* 0000EC00 */ 0x01, 0xFE, 0x24, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, +/* 0000EC10 */ 0xFE, 0x24, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, +/* 0000EC20 */ 0x24, 0x01, 0xFE, 0x98, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0x02, 0x01, 0x01, 0x00, 0xFE, +/* 0000EC30 */ 0xE5, 0x03, 0x02, 0x02, 0x00, 0xFE, 0x4B, 0x02, 0x01, 0xFE, 0x4F, 0x02, 0xFF, 0x0A, 0xD6, 0x01, +/* 0000EC40 */ 0x00, 0x0E, 0x06, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x1F, 0x17, 0x57, 0x00, 0x17, 0x05, 0x30, 0x00, +/* 0000EC50 */ 0x7A, 0x04, 0x22, 0x00, 0x55, 0x04, 0x22, 0x00, 0x50, 0x00, 0x48, 0x00, 0x93, 0x00, 0x53, 0x00, +/* 0000EC60 */ 0x91, 0x00, 0x30, 0x00, 0x45, 0x00, 0x4E, 0x00, 0x96, 0x00, 0x59, 0x00, 0xA7, 0x05, 0x70, 0x00, +/* 0000EC70 */ 0x03, 0x03, 0x09, 0x00, 0x7C, 0x00, 0x07, 0x00, 0x16, 0x00, 0x00, 0x7D, 0xF5, 0x00, 0x00, 0x6F, +/* 0000EC80 */ 0xF3, 0x00, 0x00, 0x46, 0xF1, 0x00, 0x00, 0x60, 0xEF, 0x00, 0x00, 0x9D, 0xED, 0x00, 0x00, 0x93, +/* 0000EC90 */ 0xEC, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x65, 0x0B, 0x3A, 0xA0, +/* 0000ECA0 */ 0x41, 0xD1, 0x00, 0xA9, 0xFF, 0x75, 0x03, 0x02, 0x00, 0xFF, 0x75, 0x03, 0x02, 0x00, 0x09, 0xFE, +/* 0000ECB0 */ 0x00, 0x90, 0x01, 0x01, 0xFF, 0x75, 0x03, 0x02, 0x00, 0xFE, 0x45, 0x02, 0xFE, 0x45, 0x02, 0x05, +/* 0000ECC0 */ 0x05, 0x08, 0x04, 0x22, 0x21, 0x04, 0x03, 0x01, 0x05, 0x05, 0x05, 0x05, 0x07, 0x06, 0xFE, 0x94, +/* 0000ECD0 */ 0x03, 0x05, 0xFE, 0x09, 0x04, 0x06, 0xFE, 0x2E, 0x03, 0x91, 0x58, 0x05, 0x2A, 0x08, 0x05, 0x15, +/* 0000ECE0 */ 0x03, 0x00, 0x08, 0x02, 0x09, 0x24, 0x00, 0x8F, 0x04, 0x03, 0x09, 0x00, 0x00, 0x6D, 0x08, 0x09, +/* 0000ECF0 */ 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x09, 0x5A, 0x01, 0x03, 0x00, 0x00, 0x5A, 0x02, 0x04, 0x00, +/* 0000ED00 */ 0x00, 0xF4, 0x03, 0xFF, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x04, 0x03, 0x09, 0x00, +/* 0000ED10 */ 0x00, 0x6D, 0x08, 0x09, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x09, 0x5A, 0x01, 0x05, 0x01, 0x00, +/* 0000ED20 */ 0xF4, 0x02, 0x08, 0x08, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, 0x06, 0x08, 0xA8, 0x08, 0x14, +/* 0000ED30 */ 0x08, 0x00, 0x06, 0x08, 0x5F, 0x08, 0x06, 0x02, 0x0F, 0x24, 0x00, 0x08, 0x8F, 0x04, 0x03, 0x09, +/* 0000ED40 */ 0x00, 0x00, 0x6D, 0x08, 0x09, 0x03, 0x07, 0x03, 0x00, 0x59, 0x00, 0x09, 0x5A, 0x01, 0x03, 0x02, +/* 0000ED50 */ 0x00, 0x5A, 0x02, 0x04, 0x02, 0x00, 0xF4, 0x03, 0xFF, 0x08, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, +/* 0000ED60 */ 0x5F, 0x00, 0x06, 0x04, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB6, 0x02, 0xFE, 0x05, +/* 0000ED70 */ 0x02, 0xFE, 0x4E, 0x02, 0xFE, 0xB6, 0x02, 0xFE, 0x4C, 0x02, 0xFF, 0x9B, 0x03, 0x02, 0x00, 0x07, +/* 0000ED80 */ 0x02, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3C, 0x00, 0x24, 0x00, 0x7D, 0x00, 0x22, 0x00, 0x4B, 0x00, +/* 0000ED90 */ 0x0F, 0x00, 0x65, 0x00, 0x24, 0x00, 0x7D, 0x00, 0x09, 0x00, 0x38, 0x00, 0x00, 0x7F, 0x5C, 0x08, +/* 0000EDA0 */ 0xC1, 0x13, 0x10, 0x47, 0x00, 0xFE, 0x4F, 0x0B, 0x1B, 0xA0, 0x41, 0xC3, 0x00, 0xFE, 0xEE, 0x03, +/* 0000EDB0 */ 0xA8, 0xFF, 0x00, 0x00, 0x00, 0x02, 0xFF, 0xB7, 0xFD, 0x01, 0x00, 0xFF, 0xB7, 0xFD, 0x01, 0x00, +/* 0000EDC0 */ 0x09, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFF, 0xB7, 0xFD, 0x01, 0x00, 0xFE, 0xF1, 0x04, 0xFE, 0xF1, +/* 0000EDD0 */ 0x04, 0x05, 0x0D, 0x10, 0x04, 0x30, 0x2F, 0x04, 0x03, 0x01, 0x12, 0x12, 0x12, 0x12, 0x01, 0x0F, +/* 0000EDE0 */ 0x06, 0xFE, 0x94, 0x03, 0x05, 0xFE, 0x0A, 0x04, 0x06, 0xFE, 0x2E, 0x03, 0x06, 0xFE, 0xD7, 0x03, +/* 0000EDF0 */ 0x06, 0xFE, 0xF2, 0x03, 0x06, 0xFE, 0xFE, 0x03, 0x06, 0xFE, 0x03, 0x04, 0x06, 0xFE, 0x05, 0x04, +/* 0000EE00 */ 0x06, 0xFE, 0xF8, 0x03, 0x06, 0xFE, 0xF9, 0x03, 0x07, 0xD2, 0x58, 0x0D, 0x2A, 0x10, 0x0D, 0x15, +/* 0000EE10 */ 0x03, 0x00, 0x10, 0x02, 0x09, 0x24, 0x00, 0x8F, 0x04, 0x03, 0x11, 0x00, 0x00, 0x6D, 0x10, 0x11, +/* 0000EE20 */ 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x11, 0x5A, 0x01, 0x03, 0x00, 0x00, 0x5A, 0x02, 0x04, 0x00, +/* 0000EE30 */ 0x00, 0xF4, 0x03, 0xFF, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x04, 0x03, 0x11, 0x00, +/* 0000EE40 */ 0x00, 0x6D, 0x10, 0x11, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x11, 0x5A, 0x01, 0x0D, 0x01, 0x00, +/* 0000EE50 */ 0xF4, 0x02, 0x10, 0x10, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, 0x0E, 0x10, 0xA8, 0x10, 0x14, +/* 0000EE60 */ 0x08, 0x00, 0x0E, 0x10, 0x5F, 0x10, 0x0E, 0x02, 0x0F, 0x24, 0x00, 0x10, 0x8F, 0x04, 0x03, 0x11, +/* 0000EE70 */ 0x00, 0x00, 0x6D, 0x10, 0x11, 0x03, 0x07, 0x03, 0x00, 0x59, 0x00, 0x11, 0x5A, 0x01, 0x03, 0x02, +/* 0000EE80 */ 0x00, 0x5A, 0x02, 0x04, 0x02, 0x00, 0xF4, 0x03, 0xFF, 0x10, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, +/* 0000EE90 */ 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x10, 0x0E, +/* 0000EEA0 */ 0x04, 0x7B, 0x10, 0x00, 0x05, 0x5F, 0x10, 0x0E, 0x06, 0x7B, 0x10, 0x00, 0x07, 0x5F, 0x10, 0x0E, +/* 0000EEB0 */ 0x08, 0x7B, 0x10, 0x00, 0x09, 0x5F, 0x10, 0x0E, 0x0A, 0x7B, 0x10, 0x00, 0x0B, 0x5F, 0x10, 0x0E, +/* 0000EEC0 */ 0x0C, 0x7B, 0x10, 0x00, 0x0D, 0x5F, 0x10, 0x0E, 0x0E, 0x7B, 0x10, 0x00, 0x0F, 0x5F, 0x10, 0x0E, +/* 0000EED0 */ 0x10, 0x7B, 0x10, 0x00, 0x11, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x01, 0x24, 0x00, 0x00, +/* 0000EEE0 */ 0x00, 0x00, 0x00, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x02, 0x00, 0x00, 0x55, +/* 0000EEF0 */ 0x02, 0x00, 0x00, 0x52, 0x02, 0x00, 0x00, 0x50, 0x02, 0x00, 0x00, 0x05, 0x04, 0x00, 0x00, 0x51, +/* 0000EF00 */ 0x02, 0x00, 0x00, 0xF9, 0x03, 0x00, 0x00, 0xFE, 0xB6, 0x02, 0xFE, 0x05, 0x02, 0xFE, 0x4E, 0x02, +/* 0000EF10 */ 0xFE, 0xB6, 0x02, 0xFE, 0x09, 0x02, 0xFE, 0x0D, 0x02, 0xFE, 0xBE, 0x04, 0xFE, 0x55, 0x02, 0xFE, +/* 0000EF20 */ 0xBF, 0x04, 0xFE, 0x52, 0x02, 0xFE, 0xC0, 0x04, 0xFE, 0x50, 0x02, 0xFE, 0x4D, 0x02, 0xFE, 0x05, +/* 0000EF30 */ 0x04, 0xFE, 0xC2, 0x04, 0xFE, 0x51, 0x02, 0xFE, 0xC1, 0x04, 0xFE, 0xF9, 0x03, 0xFF, 0xEC, 0xFD, +/* 0000EF40 */ 0x01, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3C, 0x00, 0x24, 0x00, 0x84, 0x00, 0x22, +/* 0000EF50 */ 0x00, 0x4B, 0x00, 0x0F, 0x00, 0x65, 0x00, 0x24, 0x00, 0x85, 0x00, 0x4A, 0x00, 0xC6, 0x02, 0x00, +/* 0000EF60 */ 0x7F, 0x5C, 0x0A, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x2E, 0x0B, 0x10, 0xA3, 0x41, 0xC1, 0x00, +/* 0000EF70 */ 0xFE, 0xF1, 0x03, 0xA7, 0xFF, 0xF9, 0xF6, 0x01, 0x00, 0xFF, 0xF9, 0xF6, 0x01, 0x00, 0x09, 0xFE, +/* 0000EF80 */ 0x00, 0x90, 0x03, 0x03, 0xFF, 0xF9, 0xF6, 0x01, 0x00, 0xFE, 0x05, 0x04, 0xFE, 0x05, 0x04, 0x0A, +/* 0000EF90 */ 0x06, 0x0B, 0x0C, 0x49, 0x46, 0x04, 0x02, 0x07, 0x03, 0x0C, 0x0C, 0x0C, 0x0C, 0x0A, 0x06, 0xFE, +/* 0000EFA0 */ 0x94, 0x03, 0x05, 0xFE, 0x09, 0x04, 0x06, 0xFE, 0x2E, 0x03, 0x08, 0xFE, 0x49, 0x01, 0x58, 0x08, +/* 0000EFB0 */ 0x2A, 0x0B, 0x08, 0x15, 0x03, 0x00, 0x0B, 0x02, 0x09, 0x24, 0x00, 0x8F, 0x04, 0x03, 0x0C, 0x00, +/* 0000EFC0 */ 0x00, 0x6D, 0x0B, 0x0C, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0C, 0x5A, 0x01, 0x03, 0x00, 0x00, +/* 0000EFD0 */ 0x5A, 0x02, 0x04, 0x00, 0x00, 0xF4, 0x03, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, +/* 0000EFE0 */ 0x04, 0x03, 0x0C, 0x00, 0x00, 0x6D, 0x0B, 0x0C, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0C, 0x5A, +/* 0000EFF0 */ 0x01, 0x08, 0x01, 0x00, 0xF4, 0x02, 0x0B, 0x0B, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, 0x09, +/* 0000F000 */ 0x0B, 0xA8, 0x0B, 0x14, 0x08, 0x00, 0x09, 0x0B, 0x5F, 0x0B, 0x09, 0x02, 0x0F, 0x24, 0x00, 0x0B, +/* 0000F010 */ 0x8F, 0x04, 0x03, 0x0C, 0x00, 0x00, 0x6D, 0x0B, 0x0C, 0x03, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0C, +/* 0000F020 */ 0x5A, 0x01, 0x03, 0x02, 0x00, 0x5A, 0x02, 0x04, 0x02, 0x00, 0xF4, 0x03, 0xFF, 0x0B, 0x03, 0x00, +/* 0000F030 */ 0x00, 0x00, 0x02, 0x00, 0x8F, 0x04, 0x0C, 0x0B, 0x01, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x05, +/* 0000F040 */ 0x5A, 0x01, 0x06, 0x03, 0x00, 0xF0, 0x02, 0x0B, 0x0B, 0x03, 0x00, 0x45, 0x06, 0x0B, 0x8F, 0x04, +/* 0000F050 */ 0x0C, 0x0B, 0x01, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x05, 0x5A, 0x01, 0x07, 0x04, 0x00, 0xF0, +/* 0000F060 */ 0x02, 0x0B, 0x0B, 0x04, 0x00, 0x45, 0x07, 0x0B, 0x8F, 0x04, 0x0B, 0x0B, 0x02, 0x00, 0x07, 0x02, +/* 0000F070 */ 0x00, 0x59, 0x00, 0x05, 0x8F, 0x04, 0x03, 0x0D, 0x00, 0x00, 0x6D, 0x0C, 0x0D, 0x04, 0x07, 0x08, +/* 0000F080 */ 0x00, 0x59, 0x00, 0x0D, 0x5A, 0x01, 0x06, 0x06, 0x00, 0x5A, 0x02, 0x07, 0x06, 0x00, 0x5F, 0x0E, +/* 0000F090 */ 0x09, 0x05, 0x5A, 0x03, 0x0E, 0x06, 0x00, 0x8F, 0x04, 0x03, 0x0E, 0x00, 0x00, 0x5F, 0x0E, 0x0E, +/* 0000F0A0 */ 0x06, 0x5F, 0x0F, 0x09, 0x07, 0x98, 0x0E, 0x0E, 0x0F, 0x00, 0x00, 0x5A, 0x04, 0x0E, 0x06, 0x00, +/* 0000F0B0 */ 0x5F, 0x0E, 0x09, 0x08, 0x5A, 0x05, 0x0E, 0x06, 0x00, 0x5F, 0x0E, 0x09, 0x09, 0x5A, 0x06, 0x0E, +/* 0000F0C0 */ 0x06, 0x00, 0x8F, 0x04, 0x03, 0x0E, 0x00, 0x00, 0x5F, 0x0E, 0x0E, 0x0A, 0x5F, 0x0F, 0x09, 0x0B, +/* 0000F0D0 */ 0x98, 0x0E, 0x0E, 0x0F, 0x01, 0x00, 0x5A, 0x07, 0x0E, 0x06, 0x00, 0xF4, 0x08, 0x0C, 0x0C, 0x04, +/* 0000F0E0 */ 0x00, 0x00, 0x00, 0x06, 0x00, 0x5A, 0x01, 0x0C, 0x05, 0x00, 0xF0, 0x02, 0x00, 0x0B, 0x05, 0x00, +/* 0000F0F0 */ 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB6, 0x02, 0xFE, 0x05, 0x02, 0xFE, 0x4E, 0x02, +/* 0000F100 */ 0xFE, 0xB6, 0x02, 0xFE, 0xF7, 0x01, 0xFE, 0xBD, 0x04, 0xFE, 0x27, 0x02, 0xFE, 0xBF, 0x04, 0xFE, +/* 0000F110 */ 0xC0, 0x04, 0xFE, 0xC2, 0x04, 0xFE, 0x28, 0x02, 0xFE, 0xC1, 0x04, 0xFF, 0x26, 0xF7, 0x01, 0x00, +/* 0000F120 */ 0x09, 0x02, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x38, 0x00, 0x24, 0x00, 0x75, 0x00, 0x22, 0x00, 0x47, +/* 0000F130 */ 0x00, 0x0F, 0x00, 0x61, 0x00, 0x24, 0x00, 0x75, 0x00, 0x1A, 0x00, 0x23, 0x00, 0x1A, 0x00, 0x24, +/* 0000F140 */ 0x00, 0x8D, 0x00, 0xC6, 0x01, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x13, +/* 0000F150 */ 0x0B, 0x10, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x2E, 0x03, 0xA6, 0xFF, 0x6C, 0xF2, 0x01, 0x00, 0xFF, +/* 0000F160 */ 0x6C, 0xF2, 0x01, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x03, 0x01, 0xFF, 0x6C, 0xF2, 0x01, 0x00, 0xFE, +/* 0000F170 */ 0x3D, 0x04, 0xFE, 0x3D, 0x04, 0x09, 0x05, 0x0B, 0x05, 0x5E, 0x57, 0x04, 0x09, 0x0A, 0x06, 0x06, +/* 0000F180 */ 0x06, 0x06, 0x0A, 0x08, 0x06, 0xFE, 0x2E, 0x03, 0x07, 0xFE, 0x8A, 0x01, 0x58, 0x07, 0x4E, 0x08, +/* 0000F190 */ 0x4E, 0x09, 0x15, 0x05, 0x00, 0x05, 0x02, 0xA8, 0x0B, 0x45, 0x05, 0x0B, 0x15, 0x05, 0x00, 0x06, +/* 0000F1A0 */ 0x02, 0xA8, 0x0B, 0x45, 0x06, 0x0B, 0x4E, 0x08, 0x4E, 0x09, 0x8F, 0x04, 0x07, 0x0B, 0x00, 0x00, +/* 0000F1B0 */ 0x14, 0x0A, 0x00, 0x07, 0x0B, 0xA8, 0x0B, 0x14, 0x03, 0x00, 0x07, 0x0B, 0x09, 0x1E, 0x00, 0x8F, +/* 0000F1C0 */ 0x01, 0x02, 0x0B, 0x01, 0x00, 0x4A, 0x0B, 0x07, 0x03, 0x00, 0x5A, 0x01, 0x05, 0x00, 0x00, 0x5A, +/* 0000F1D0 */ 0x02, 0x06, 0x00, 0x00, 0xC5, 0x03, 0x00, 0x0B, 0x00, 0x00, 0x09, 0x37, 0x01, 0x8F, 0x04, 0x24, +/* 0000F1E0 */ 0x0C, 0x02, 0x00, 0x6D, 0x0B, 0x0C, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0C, 0x5A, 0x01, 0x07, +/* 0000F1F0 */ 0x01, 0x00, 0xF4, 0x02, 0x0B, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, 0x08, 0x0B, 0x8F, +/* 0000F200 */ 0x04, 0x12, 0x0B, 0x03, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x08, 0x02, 0x00, +/* 0000F210 */ 0xF0, 0x02, 0x0B, 0x0B, 0x02, 0x00, 0x0F, 0x1F, 0x00, 0x0B, 0x8F, 0x04, 0x03, 0x0C, 0x04, 0x00, +/* 0000F220 */ 0x6D, 0x0B, 0x0C, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0C, 0x5A, 0x01, 0x03, 0x03, 0x00, 0xF4, +/* 0000F230 */ 0x02, 0xFF, 0x0B, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x8F, 0x04, 0x03, 0x0C, 0x04, 0x00, 0x6D, +/* 0000F240 */ 0x0B, 0x0C, 0x02, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0C, 0x5A, 0x01, 0x08, 0x04, 0x00, 0xF4, 0x02, +/* 0000F250 */ 0x0B, 0x0B, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x45, 0x09, 0x0B, 0xA8, 0x0B, 0x14, 0x03, 0x00, +/* 0000F260 */ 0x09, 0x0B, 0x09, 0x45, 0x00, 0x8F, 0x04, 0x04, 0x0B, 0x05, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 0000F270 */ 0x02, 0xCD, 0x0C, 0x5A, 0x01, 0x0C, 0x05, 0x00, 0x5A, 0x02, 0x04, 0x05, 0x00, 0xF0, 0x03, 0x0B, +/* 0000F280 */ 0x0B, 0x05, 0x00, 0x45, 0x09, 0x0B, 0x8F, 0x04, 0x03, 0x0C, 0x04, 0x00, 0x6D, 0x0B, 0x0C, 0x03, +/* 0000F290 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x0C, 0x5A, 0x01, 0x08, 0x06, 0x00, 0x5A, 0x02, 0x09, 0x06, 0x00, +/* 0000F2A0 */ 0xF4, 0x03, 0xFF, 0x0B, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x8F, 0x02, 0x02, 0x0B, 0x06, 0x00, +/* 0000F2B0 */ 0x4A, 0x0B, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x09, 0x07, 0x00, 0x5A, 0x02, 0x05, +/* 0000F2C0 */ 0x07, 0x00, 0x5A, 0x03, 0x06, 0x07, 0x00, 0xF0, 0x04, 0xFF, 0x0B, 0x07, 0x00, 0x45, 0x0B, 0x09, +/* 0000F2D0 */ 0x8F, 0x04, 0x06, 0x0C, 0x07, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x8F, 0x04, 0x1A, 0x0D, +/* 0000F2E0 */ 0x08, 0x00, 0x5A, 0x01, 0x0D, 0x08, 0x00, 0x8F, 0x01, 0x03, 0x0D, 0x09, 0x00, 0x4A, 0x0D, 0x5A, +/* 0000F2F0 */ 0x02, 0x0D, 0x08, 0x00, 0x5A, 0x03, 0x08, 0x08, 0x00, 0xF0, 0x04, 0x0C, 0x0C, 0x08, 0x00, 0x77, +/* 0000F300 */ 0x0C, 0x0B, 0x04, 0x5F, 0x0B, 0x09, 0x05, 0x82, 0x0B, 0x0B, 0x06, 0x01, 0x45, 0x00, 0x08, 0x09, +/* 0000F310 */ 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x21, 0x03, 0xFE, 0xB2, 0x02, 0xFE, 0x05, 0x02, 0xFE, +/* 0000F320 */ 0x06, 0x02, 0xFE, 0x4C, 0x02, 0xFE, 0x4C, 0x02, 0xFF, 0x7E, 0xF2, 0x01, 0x00, 0x10, 0x06, 0x00, +/* 0000F330 */ 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0E, 0x00, 0x2B, 0x00, 0x15, 0x00, 0x43, 0x00, 0x1E, 0x00, +/* 0000F340 */ 0x52, 0x00, 0x22, 0x00, 0x37, 0x00, 0x1B, 0x00, 0x38, 0x00, 0x1F, 0x00, 0x97, 0x00, 0x22, 0x00, +/* 0000F350 */ 0x47, 0x00, 0x0A, 0x00, 0x3A, 0x00, 0x21, 0x00, 0x3F, 0x00, 0x24, 0x00, 0x58, 0x00, 0x23, 0x00, +/* 0000F360 */ 0x76, 0x00, 0x36, 0x00, 0x68, 0x00, 0x09, 0x00, 0x3D, 0x00, 0x08, 0x00, 0x1C, 0x00, 0x00, 0x7F, +/* 0000F370 */ 0x5C, 0x0A, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0xF9, 0x0A, 0x61, 0xA0, 0x41, 0xF1, 0x00, 0xA5, +/* 0000F380 */ 0xFF, 0x7E, 0xED, 0x01, 0x00, 0xFF, 0x7E, 0xED, 0x01, 0x00, 0x0B, 0xFE, 0x00, 0x90, 0x01, 0x01, +/* 0000F390 */ 0xFF, 0x7E, 0xED, 0x01, 0x00, 0xFE, 0x81, 0x04, 0xFE, 0x81, 0x04, 0x0B, 0x08, 0x0E, 0x0C, 0x54, +/* 0000F3A0 */ 0x50, 0x03, 0x05, 0x08, 0x05, 0x0A, 0x0A, 0x0A, 0x0A, 0x0D, 0x07, 0x01, 0x00, 0x05, 0xFE, 0xE9, +/* 0000F3B0 */ 0x03, 0x08, 0x01, 0x01, 0x01, 0x02, 0xFE, 0x73, 0x01, 0xB1, 0x08, 0x58, 0x0A, 0x98, 0x0E, 0x08, +/* 0000F3C0 */ 0x03, 0x00, 0x00, 0x45, 0x09, 0x0E, 0xA8, 0x0E, 0x14, 0x08, 0x00, 0x0A, 0x0E, 0x14, 0x03, 0x00, +/* 0000F3D0 */ 0x0A, 0x02, 0x09, 0x22, 0x00, 0x8F, 0x03, 0x03, 0x0F, 0x00, 0x00, 0x6D, 0x0E, 0x0F, 0x00, 0x07, +/* 0000F3E0 */ 0x02, 0x00, 0x59, 0x00, 0x0F, 0x5A, 0x01, 0x04, 0x00, 0x00, 0xF4, 0x02, 0xFF, 0x0E, 0x00, 0x00, +/* 0000F3F0 */ 0x00, 0x00, 0x00, 0x00, 0x09, 0x22, 0x00, 0x14, 0x03, 0x00, 0x09, 0x02, 0x09, 0x1A, 0x00, 0x8F, +/* 0000F400 */ 0x03, 0x03, 0x0F, 0x00, 0x00, 0x6D, 0x0E, 0x0F, 0x01, 0x07, 0x01, 0x00, 0x59, 0x00, 0x0F, 0xF4, +/* 0000F410 */ 0x01, 0xFF, 0x0E, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x8F, 0x03, 0x0C, 0x0E, 0x01, 0x00, 0x07, +/* 0000F420 */ 0x02, 0x00, 0x59, 0x00, 0x05, 0x5A, 0x01, 0x0A, 0x02, 0x00, 0xF0, 0x02, 0x0E, 0x0E, 0x02, 0x00, +/* 0000F430 */ 0x45, 0x0B, 0x0E, 0x8F, 0x03, 0x0C, 0x0E, 0x01, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x05, 0x5A, +/* 0000F440 */ 0x01, 0x09, 0x03, 0x00, 0xF0, 0x02, 0x0E, 0x0E, 0x03, 0x00, 0x45, 0x09, 0x0E, 0x8F, 0x03, 0x04, +/* 0000F450 */ 0x0E, 0x02, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x05, 0xCD, 0x0F, 0x5A, 0x01, 0x0F, 0x04, 0x00, +/* 0000F460 */ 0x5A, 0x02, 0x02, 0x04, 0x00, 0xF0, 0x03, 0x0E, 0x0E, 0x04, 0x00, 0x45, 0x0C, 0x0E, 0x8F, 0x01, +/* 0000F470 */ 0x02, 0x0E, 0x03, 0x00, 0x4A, 0x0E, 0x07, 0x04, 0x00, 0x59, 0x00, 0x05, 0x5A, 0x01, 0x0C, 0x05, +/* 0000F480 */ 0x00, 0x98, 0x0F, 0x08, 0x06, 0x01, 0x00, 0x5A, 0x02, 0x0F, 0x05, 0x00, 0x98, 0x0F, 0x08, 0x07, +/* 0000F490 */ 0x02, 0x00, 0x5A, 0x03, 0x0F, 0x05, 0x00, 0xF0, 0x04, 0xFF, 0x0E, 0x05, 0x00, 0x8F, 0x03, 0x0B, +/* 0000F4A0 */ 0x0E, 0x04, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x05, 0x8F, 0x03, 0x03, 0x10, 0x00, 0x00, 0x6D, +/* 0000F4B0 */ 0x0F, 0x10, 0x02, 0x07, 0x08, 0x00, 0x59, 0x00, 0x10, 0x5A, 0x01, 0x0B, 0x07, 0x00, 0x5A, 0x02, +/* 0000F4C0 */ 0x09, 0x07, 0x00, 0x5F, 0x11, 0x0C, 0x03, 0x5A, 0x03, 0x11, 0x07, 0x00, 0x8F, 0x03, 0x03, 0x11, +/* 0000F4D0 */ 0x00, 0x00, 0x5F, 0x11, 0x11, 0x04, 0x5F, 0x12, 0x0C, 0x05, 0x98, 0x11, 0x11, 0x12, 0x03, 0x00, +/* 0000F4E0 */ 0x5A, 0x04, 0x11, 0x07, 0x00, 0x5F, 0x11, 0x0C, 0x06, 0x5A, 0x05, 0x11, 0x07, 0x00, 0x5F, 0x11, +/* 0000F4F0 */ 0x0C, 0x07, 0x5A, 0x06, 0x11, 0x07, 0x00, 0x8F, 0x03, 0x03, 0x11, 0x00, 0x00, 0x5F, 0x11, 0x11, +/* 0000F500 */ 0x08, 0x5F, 0x12, 0x0C, 0x09, 0x98, 0x11, 0x11, 0x12, 0x04, 0x00, 0x5A, 0x07, 0x11, 0x07, 0x00, +/* 0000F510 */ 0xF4, 0x08, 0x0F, 0x0F, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x5A, 0x01, 0x0F, 0x06, 0x00, 0xF0, +/* 0000F520 */ 0x02, 0x00, 0x0E, 0x06, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB0, 0x02, 0xFE, +/* 0000F530 */ 0xAA, 0x02, 0xFE, 0xF7, 0x01, 0xFE, 0xBD, 0x04, 0xFE, 0x27, 0x02, 0xFE, 0xBF, 0x04, 0xFE, 0xC0, +/* 0000F540 */ 0x04, 0xFE, 0xC2, 0x04, 0xFE, 0x28, 0x02, 0xFE, 0xC1, 0x04, 0xFF, 0x9C, 0xED, 0x01, 0x00, 0x0B, +/* 0000F550 */ 0x04, 0x00, 0x00, 0x00, 0x09, 0x00, 0x29, 0x00, 0x0F, 0x00, 0x3F, 0x00, 0x22, 0x00, 0x6D, 0x00, +/* 0000F560 */ 0x08, 0x00, 0x29, 0x00, 0x1A, 0x00, 0xE2, 0x00, 0x1A, 0x00, 0x2C, 0x00, 0x1A, 0x00, 0x29, 0x00, +/* 0000F570 */ 0x21, 0x00, 0x3A, 0x00, 0x2F, 0x00, 0x4D, 0x00, 0x8D, 0x00, 0xA6, 0x01, 0x00, 0x7F, 0x5D, 0x1A, +/* 0000F580 */ 0xC1, 0x43, 0x5A, 0x0B, 0x00, 0xFE, 0x8C, 0x0A, 0x0C, 0xB3, 0x41, 0xC1, 0x00, 0xFE, 0xE5, 0x03, +/* 0000F590 */ 0xA3, 0xFF, 0x4B, 0xD6, 0x01, 0x00, 0xFF, 0x4B, 0xD6, 0x01, 0x00, 0x01, 0x44, 0xFE, 0x00, 0x90, +/* 0000F5A0 */ 0x04, 0x04, 0xFF, 0x4B, 0xD6, 0x01, 0x00, 0xFE, 0xD0, 0x16, 0xFE, 0xD0, 0x16, 0x03, 0xFE, 0xF9, +/* 0000F5B0 */ 0x03, 0xFE, 0x51, 0x02, 0xFE, 0x05, 0x04, 0x15, 0x24, 0x35, 0x09, 0xFE, 0x10, 0x01, 0xFE, 0xFF, +/* 0000F5C0 */ 0x00, 0x03, 0x02, 0x12, 0x05, 0x10, 0x15, 0x15, 0x15, 0x15, 0x01, 0x32, 0x33, 0x34, 0x35, 0x06, +/* 0000F5D0 */ 0xFE, 0x94, 0x03, 0x06, 0xFE, 0xBA, 0x04, 0x08, 0x06, 0xFE, 0x2E, 0x03, 0x0B, 0x06, 0xFE, 0xD6, +/* 0000F5E0 */ 0x03, 0x07, 0x06, 0xFE, 0xE0, 0x03, 0x06, 0xFE, 0xA3, 0x03, 0x05, 0xFE, 0x9C, 0x03, 0x05, 0xFE, +/* 0000F5F0 */ 0xDF, 0x03, 0x06, 0xFE, 0xF2, 0x03, 0x06, 0xFE, 0xF3, 0x03, 0x06, 0xFE, 0xF4, 0x03, 0x06, 0xFE, +/* 0000F600 */ 0xFE, 0x03, 0x06, 0xFE, 0xFF, 0x03, 0x06, 0xFE, 0x00, 0x04, 0x06, 0xFE, 0x01, 0x04, 0x06, 0xFE, +/* 0000F610 */ 0x02, 0x04, 0x06, 0xFE, 0x03, 0x04, 0x06, 0xFE, 0xA2, 0x03, 0x0C, 0x06, 0xFE, 0xF9, 0x03, 0x06, +/* 0000F620 */ 0xFE, 0xFA, 0x03, 0x06, 0xFE, 0xFB, 0x03, 0x06, 0xFE, 0xFC, 0x03, 0x06, 0xFE, 0xF8, 0x03, 0x06, +/* 0000F630 */ 0xFE, 0xFD, 0x03, 0x06, 0xFE, 0x47, 0x03, 0x06, 0xFE, 0x00, 0x03, 0x06, 0xFE, 0xBB, 0x04, 0x06, +/* 0000F640 */ 0xFE, 0xBC, 0x04, 0x01, 0x00, 0x01, 0xFF, 0xFE, 0x60, 0x04, 0xA8, 0x2F, 0xA8, 0x30, 0xA8, 0x31, +/* 0000F650 */ 0x2A, 0x36, 0x24, 0x0D, 0x03, 0x00, 0x36, 0x02, 0x09, 0x1A, 0x00, 0x8F, 0x03, 0x03, 0x37, 0x00, +/* 0000F660 */ 0x00, 0x6D, 0x36, 0x37, 0x00, 0x07, 0x01, 0x00, 0x59, 0x00, 0x37, 0xF4, 0x01, 0xFF, 0x36, 0x00, +/* 0000F670 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x03, 0x06, 0x36, 0x01, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, +/* 0000F680 */ 0x04, 0x8F, 0x03, 0x14, 0x37, 0x02, 0x00, 0x5A, 0x01, 0x37, 0x01, 0x00, 0x5A, 0x02, 0x24, 0x01, +/* 0000F690 */ 0x00, 0x5A, 0x03, 0x03, 0x01, 0x00, 0xF0, 0x04, 0x36, 0x36, 0x01, 0x00, 0x0E, 0x2C, 0x00, 0x36, +/* 0000F6A0 */ 0x5F, 0x36, 0x24, 0x01, 0x0E, 0x24, 0x00, 0x36, 0x8F, 0x03, 0x03, 0x37, 0x00, 0x00, 0x6D, 0x36, +/* 0000F6B0 */ 0x37, 0x02, 0x07, 0x03, 0x00, 0x59, 0x00, 0x37, 0x5A, 0x01, 0x05, 0x02, 0x00, 0x5A, 0x02, 0x05, +/* 0000F6C0 */ 0x02, 0x00, 0xF4, 0x03, 0xFF, 0x36, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x77, 0x06, 0x24, 0x03, +/* 0000F6D0 */ 0x2A, 0x36, 0x26, 0x14, 0x03, 0x00, 0x36, 0x07, 0x09, 0x24, 0x00, 0x8F, 0x03, 0x04, 0x36, 0x03, +/* 0000F6E0 */ 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x04, 0xCD, 0x37, 0x5A, 0x01, 0x37, 0x03, 0x00, 0x5A, 0x02, +/* 0000F6F0 */ 0x08, 0x03, 0x00, 0xF0, 0x03, 0x36, 0x36, 0x03, 0x00, 0x45, 0x26, 0x36, 0x09, 0x22, 0x00, 0x8F, +/* 0000F700 */ 0x03, 0x24, 0x37, 0x04, 0x00, 0x6D, 0x36, 0x37, 0x04, 0x07, 0x02, 0x00, 0x59, 0x00, 0x37, 0x5A, +/* 0000F710 */ 0x01, 0x26, 0x04, 0x00, 0xF4, 0x02, 0x36, 0x36, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x45, 0x26, +/* 0000F720 */ 0x36, 0x8F, 0x02, 0x02, 0x36, 0x05, 0x00, 0x4A, 0x36, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, 0x5A, +/* 0000F730 */ 0x01, 0x26, 0x05, 0x00, 0x5A, 0x02, 0x09, 0x05, 0x00, 0x5A, 0x03, 0x0A, 0x05, 0x00, 0xD0, 0x37, +/* 0000F740 */ 0x02, 0x00, 0x00, 0xA1, 0x00, 0x0B, 0x37, 0xA1, 0x01, 0x0C, 0x37, 0x5A, 0x04, 0x37, 0x05, 0x00, +/* 0000F750 */ 0x5A, 0x05, 0x0C, 0x05, 0x00, 0xF0, 0x06, 0x36, 0x36, 0x05, 0x00, 0x45, 0x28, 0x36, 0x8F, 0x02, +/* 0000F760 */ 0x02, 0x36, 0x05, 0x00, 0x4A, 0x36, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x26, 0x06, +/* 0000F770 */ 0x00, 0x5A, 0x02, 0x0D, 0x06, 0x00, 0x5A, 0x03, 0x0A, 0x06, 0x00, 0xD0, 0x37, 0x02, 0x01, 0x00, +/* 0000F780 */ 0xA1, 0x00, 0x0E, 0x37, 0xA1, 0x01, 0x0F, 0x37, 0x5A, 0x04, 0x37, 0x06, 0x00, 0x5A, 0x05, 0x0E, +/* 0000F790 */ 0x06, 0x00, 0xF0, 0x06, 0x36, 0x36, 0x06, 0x00, 0x45, 0x29, 0x36, 0x8F, 0x02, 0x02, 0x36, 0x05, +/* 0000F7A0 */ 0x00, 0x4A, 0x36, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x26, 0x07, 0x00, 0x5A, 0x02, +/* 0000F7B0 */ 0x10, 0x07, 0x00, 0x5A, 0x03, 0x0A, 0x07, 0x00, 0xD0, 0x37, 0x04, 0x02, 0x00, 0xA1, 0x00, 0x11, +/* 0000F7C0 */ 0x37, 0xA1, 0x01, 0x12, 0x37, 0xA1, 0x02, 0x13, 0x37, 0xA1, 0x03, 0x14, 0x37, 0x5A, 0x04, 0x37, +/* 0000F7D0 */ 0x07, 0x00, 0xA8, 0x37, 0x5A, 0x05, 0x37, 0x07, 0x00, 0xF0, 0x06, 0x36, 0x36, 0x07, 0x00, 0x45, +/* 0000F7E0 */ 0x2A, 0x36, 0x8F, 0x02, 0x02, 0x36, 0x05, 0x00, 0x4A, 0x36, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, +/* 0000F7F0 */ 0x5A, 0x01, 0x26, 0x08, 0x00, 0x5A, 0x02, 0x15, 0x08, 0x00, 0x5A, 0x03, 0x16, 0x08, 0x00, 0xA8, +/* 0000F800 */ 0x37, 0x5A, 0x04, 0x37, 0x08, 0x00, 0x5A, 0x05, 0x17, 0x08, 0x00, 0xF0, 0x06, 0x36, 0x36, 0x08, +/* 0000F810 */ 0x00, 0x45, 0x2B, 0x36, 0x8F, 0x02, 0x02, 0x36, 0x05, 0x00, 0x4A, 0x36, 0x07, 0x06, 0x00, 0x59, +/* 0000F820 */ 0x00, 0x04, 0x5A, 0x01, 0x26, 0x09, 0x00, 0x5A, 0x02, 0x18, 0x09, 0x00, 0x5A, 0x03, 0x0A, 0x09, +/* 0000F830 */ 0x00, 0xD0, 0x37, 0x03, 0x03, 0x00, 0xA1, 0x00, 0x19, 0x37, 0xA1, 0x01, 0x1A, 0x37, 0xA1, 0x02, +/* 0000F840 */ 0x1B, 0x37, 0x5A, 0x04, 0x37, 0x09, 0x00, 0xA8, 0x37, 0x5A, 0x05, 0x37, 0x09, 0x00, 0xF0, 0x06, +/* 0000F850 */ 0x36, 0x36, 0x09, 0x00, 0x96, 0x02, 0x36, 0x8F, 0x02, 0x02, 0x36, 0x05, 0x00, 0x4A, 0x36, 0x07, +/* 0000F860 */ 0x06, 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x26, 0x0A, 0x00, 0x5A, 0x02, 0x1C, 0x0A, 0x00, 0x5A, +/* 0000F870 */ 0x03, 0x16, 0x0A, 0x00, 0xD0, 0x37, 0x02, 0x04, 0x00, 0xA1, 0x00, 0x06, 0x37, 0xA1, 0x01, 0x17, +/* 0000F880 */ 0x37, 0x5A, 0x04, 0x37, 0x0A, 0x00, 0xA8, 0x37, 0x5A, 0x05, 0x37, 0x0A, 0x00, 0xF0, 0x06, 0x36, +/* 0000F890 */ 0x36, 0x0A, 0x00, 0x96, 0x03, 0x36, 0x8F, 0x02, 0x07, 0x36, 0x06, 0x00, 0x4A, 0x36, 0x07, 0x02, +/* 0000F8A0 */ 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x25, 0x0B, 0x00, 0xF0, 0x02, 0x36, 0x36, 0x0B, 0x00, 0x45, +/* 0000F8B0 */ 0x25, 0x36, 0x8F, 0x03, 0x2A, 0x36, 0x07, 0x00, 0x07, 0x05, 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, +/* 0000F8C0 */ 0x25, 0x0C, 0x00, 0x5A, 0x02, 0x28, 0x0C, 0x00, 0xA8, 0x37, 0x5A, 0x03, 0x37, 0x0C, 0x00, 0x8F, +/* 0000F8D0 */ 0x03, 0x31, 0x37, 0x08, 0x00, 0x5A, 0x04, 0x37, 0x0C, 0x00, 0xF0, 0x05, 0x36, 0x36, 0x0C, 0x00, +/* 0000F8E0 */ 0x45, 0x2C, 0x36, 0x96, 0x04, 0x1D, 0x8F, 0x03, 0x27, 0x36, 0x09, 0x00, 0x07, 0x02, 0x00, 0x59, +/* 0000F8F0 */ 0x00, 0x04, 0x5F, 0x37, 0x2C, 0x05, 0x5A, 0x01, 0x37, 0x0D, 0x00, 0xF0, 0x02, 0x36, 0x36, 0x0D, +/* 0000F900 */ 0x00, 0x45, 0x2D, 0x36, 0x45, 0x2E, 0x2D, 0x5F, 0x36, 0x2C, 0x06, 0x0E, 0x2E, 0x00, 0x36, 0x8F, +/* 0000F910 */ 0x03, 0x06, 0x36, 0x01, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x04, 0x8F, 0x03, 0x17, 0x37, 0x0A, +/* 0000F920 */ 0x00, 0x5A, 0x01, 0x37, 0x0E, 0x00, 0x5F, 0x37, 0x2C, 0x07, 0x5A, 0x02, 0x37, 0x0E, 0x00, 0xD6, +/* 0000F930 */ 0x00, 0x37, 0x5A, 0x03, 0x37, 0x0E, 0x00, 0xF0, 0x04, 0xFF, 0x36, 0x0E, 0x00, 0x93, 0x04, 0x36, +/* 0000F940 */ 0x0B, 0x00, 0x15, 0x03, 0x00, 0x36, 0x1D, 0x09, 0x50, 0x00, 0x8F, 0x03, 0x2F, 0x36, 0x0C, 0x00, +/* 0000F950 */ 0x98, 0x36, 0x36, 0x2E, 0x00, 0x00, 0x45, 0x2F, 0x36, 0x45, 0x30, 0x1E, 0xA8, 0x36, 0x15, 0x03, +/* 0000F960 */ 0x00, 0x2F, 0x36, 0x09, 0x31, 0x00, 0x93, 0x04, 0x37, 0x0B, 0x00, 0x98, 0x37, 0x2F, 0x37, 0x01, +/* 0000F970 */ 0x00, 0x45, 0x30, 0x37, 0x45, 0x36, 0x37, 0xA8, 0x37, 0x15, 0x03, 0x00, 0x36, 0x37, 0x09, 0x16, +/* 0000F980 */ 0x00, 0x15, 0x03, 0x00, 0x30, 0x1E, 0x09, 0x0B, 0x00, 0x2D, 0x36, 0x2E, 0x1F, 0x2D, 0x36, 0x36, +/* 0000F990 */ 0x30, 0x45, 0x2E, 0x36, 0x09, 0x03, 0x00, 0x96, 0x04, 0x1D, 0x93, 0x02, 0x36, 0x0D, 0x00, 0xA8, +/* 0000F9A0 */ 0x37, 0x14, 0x03, 0x00, 0x36, 0x37, 0x09, 0xA3, 0x00, 0xE7, 0x4C, 0x00, 0x8F, 0x03, 0x03, 0x37, +/* 0000F9B0 */ 0x00, 0x00, 0x6D, 0x36, 0x37, 0x08, 0x07, 0x08, 0x00, 0x59, 0x00, 0x37, 0x5A, 0x01, 0x20, 0x0F, +/* 0000F9C0 */ 0x00, 0x5A, 0x02, 0x21, 0x0F, 0x00, 0x5A, 0x03, 0x2D, 0x0F, 0x00, 0xA8, 0x38, 0x5A, 0x04, 0x38, +/* 0000F9D0 */ 0x0F, 0x00, 0xA8, 0x38, 0x5A, 0x05, 0x38, 0x0F, 0x00, 0xA8, 0x38, 0x5A, 0x06, 0x38, 0x0F, 0x00, +/* 0000F9E0 */ 0xA8, 0x38, 0x5A, 0x07, 0x38, 0x0F, 0x00, 0xF4, 0x08, 0x36, 0x36, 0x08, 0x00, 0x00, 0x00, 0x0F, +/* 0000F9F0 */ 0x00, 0x45, 0x31, 0x36, 0xEB, 0x09, 0x35, 0x00, 0xE9, 0x27, 0x06, 0x8F, 0x03, 0x22, 0x36, 0x0E, +/* 0000FA00 */ 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x27, 0x10, 0x00, 0xF0, 0x02, 0xFF, 0x36, +/* 0000FA10 */ 0x10, 0x00, 0x8F, 0x03, 0x03, 0x37, 0x00, 0x00, 0x6D, 0x36, 0x37, 0x09, 0x07, 0x01, 0x00, 0x59, +/* 0000FA20 */ 0x00, 0x37, 0xF4, 0x01, 0xFF, 0x36, 0x09, 0x00, 0x00, 0x00, 0x11, 0x00, 0xEB, 0x14, 0x03, 0x00, +/* 0000FA30 */ 0x31, 0x22, 0x09, 0x06, 0x00, 0x96, 0x02, 0x1B, 0x09, 0x11, 0x00, 0x14, 0x03, 0x00, 0x31, 0x23, +/* 0000FA40 */ 0x09, 0x06, 0x00, 0x96, 0x02, 0x19, 0x09, 0x03, 0x00, 0x96, 0x02, 0x1A, 0xA8, 0x36, 0x14, 0x03, +/* 0000FA50 */ 0x00, 0x2A, 0x36, 0x09, 0x03, 0x00, 0x45, 0x2A, 0x14, 0x93, 0x03, 0x36, 0x0F, 0x00, 0xA8, 0x37, +/* 0000FA60 */ 0x14, 0x03, 0x00, 0x36, 0x37, 0x09, 0x03, 0x00, 0x96, 0x03, 0x17, 0x77, 0x28, 0x24, 0x0A, 0x5F, +/* 0000FA70 */ 0x36, 0x2C, 0x0B, 0x77, 0x36, 0x24, 0x0C, 0x77, 0x2E, 0x24, 0x0D, 0x77, 0x29, 0x24, 0x0E, 0x77, +/* 0000FA80 */ 0x2A, 0x24, 0x0F, 0x77, 0x2B, 0x24, 0x10, 0x93, 0x02, 0x36, 0x0D, 0x00, 0x77, 0x36, 0x24, 0x11, +/* 0000FA90 */ 0x93, 0x03, 0x36, 0x0F, 0x00, 0x77, 0x36, 0x24, 0x12, 0x93, 0x04, 0x36, 0x0B, 0x00, 0x77, 0x36, +/* 0000FAA0 */ 0x24, 0x13, 0x77, 0x06, 0x24, 0x14, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xAA, 0x02, 0xFE, 0x08, 0x02, +/* 0000FAB0 */ 0xFE, 0xAB, 0x02, 0xFE, 0x08, 0x02, 0xFE, 0x21, 0x03, 0xFE, 0x0F, 0x02, 0xFE, 0x11, 0x02, 0xFE, +/* 0000FAC0 */ 0x11, 0x02, 0xFE, 0xF7, 0x01, 0xFE, 0xAD, 0x02, 0xFE, 0x5F, 0x02, 0xFE, 0x0F, 0x02, 0xFE, 0x09, +/* 0000FAD0 */ 0x02, 0xFE, 0xBD, 0x04, 0xFE, 0xBE, 0x04, 0xFE, 0xBF, 0x04, 0xFE, 0xC0, 0x04, 0xFE, 0xC1, 0x04, +/* 0000FAE0 */ 0xFE, 0xC2, 0x04, 0xFE, 0x4D, 0x02, 0xFE, 0x4E, 0x02, 0xFF, 0x98, 0xD6, 0x01, 0x00, 0x35, 0x06, +/* 0000FAF0 */ 0x00, 0x00, 0x00, 0x0B, 0x00, 0x37, 0x00, 0x1A, 0x00, 0x3F, 0x00, 0x33, 0x00, 0x93, 0x00, 0x24, +/* 0000FB00 */ 0x00, 0x65, 0x00, 0x04, 0x00, 0x5D, 0x00, 0x0B, 0x00, 0x3A, 0x00, 0x24, 0x00, 0x4F, 0x00, 0x22, +/* 0000FB10 */ 0x00, 0x49, 0x00, 0x3D, 0x00, 0x71, 0x00, 0x3D, 0x00, 0x5F, 0x00, 0x47, 0x00, 0x81, 0x00, 0x32, +/* 0000FB20 */ 0x00, 0x6E, 0x00, 0x43, 0x00, 0x73, 0x00, 0x3F, 0x00, 0x9B, 0x00, 0x1C, 0x00, 0x41, 0x00, 0x31, +/* 0000FB30 */ 0x00, 0x6F, 0x00, 0x03, 0x00, 0x2B, 0x00, 0x1E, 0x00, 0x69, 0x00, 0x03, 0x00, 0x46, 0x00, 0x08, +/* 0000FB40 */ 0x00, 0x36, 0x00, 0x2E, 0x00, 0x33, 0x05, 0x0D, 0x00, 0x33, 0x00, 0x0F, 0x00, 0x6F, 0x00, 0x03, +/* 0000FB50 */ 0x00, 0x2F, 0x00, 0x25, 0x00, 0x92, 0x00, 0x08, 0x00, 0x3B, 0x00, 0x0E, 0x00, 0xB1, 0x00, 0x03, +/* 0000FB60 */ 0x00, 0x7F, 0x00, 0x12, 0x00, 0x51, 0x00, 0x4E, 0x00, 0x84, 0x00, 0x01, 0x00, 0x52, 0x00, 0x17, +/* 0000FB70 */ 0x00, 0x92, 0x01, 0x1B, 0x00, 0x52, 0x00, 0x08, 0x00, 0x29, 0x00, 0x06, 0x00, 0x30, 0x00, 0x08, +/* 0000FB80 */ 0x00, 0x2A, 0x00, 0x06, 0x00, 0x4A, 0x00, 0x03, 0x00, 0x4E, 0x00, 0x0A, 0x00, 0x35, 0x00, 0x03, +/* 0000FB90 */ 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x31, 0x00, 0x03, 0x00, 0x65, 0x00, 0x04, 0x00, 0x2E, 0x00, 0x08, +/* 0000FBA0 */ 0x00, 0x4D, 0x00, 0x04, 0x00, 0x48, 0x00, 0x04, 0x00, 0x2A, 0x00, 0x04, 0x00, 0x36, 0x00, 0x04, +/* 0000FBB0 */ 0x00, 0x42, 0x00, 0x09, 0x00, 0x32, 0x00, 0x09, 0x00, 0x2E, 0x00, 0x09, 0x00, 0x32, 0x00, 0x06, +/* 0000FBC0 */ 0x00, 0x33, 0x00, 0x00, 0xC8, 0xFB, 0x00, 0x00, 0x7F, 0x5C, 0x1A, 0xC1, 0x33, 0x10, 0x43, 0x00, +/* 0000FBD0 */ 0xFE, 0xAE, 0x0A, 0x57, 0xA2, 0x41, 0xD1, 0x00, 0xA4, 0xFF, 0x05, 0xDE, 0x01, 0x00, 0xFF, 0x05, +/* 0000FBE0 */ 0xDE, 0x01, 0x00, 0x41, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0x05, 0xDE, 0x01, 0x00, 0xFE, 0xCB, +/* 0000FBF0 */ 0x04, 0xFE, 0xCB, 0x04, 0x09, 0x15, 0x1A, 0x0B, 0x5F, 0x5B, 0x04, 0x03, 0x05, 0x01, 0x08, 0x03, +/* 0000FC00 */ 0x03, 0x03, 0x03, 0x01, 0x01, 0x19, 0x01, 0x01, 0x01, 0x02, 0x06, 0xFE, 0x47, 0x03, 0x06, 0xFE, +/* 0000FC10 */ 0xF7, 0x03, 0x06, 0xFE, 0xF9, 0x03, 0x07, 0x08, 0x06, 0xFE, 0xA3, 0x03, 0x06, 0xFE, 0xFA, 0x03, +/* 0000FC20 */ 0x06, 0xFE, 0xFB, 0x03, 0x06, 0xFE, 0xFC, 0x03, 0x06, 0xFE, 0xF6, 0x03, 0x06, 0xFE, 0xA1, 0x03, +/* 0000FC30 */ 0x0B, 0x06, 0xFE, 0xF5, 0x03, 0x06, 0xFE, 0xFD, 0x03, 0x06, 0xFE, 0xF4, 0x03, 0x06, 0xFE, 0xF3, +/* 0000FC40 */ 0x03, 0x05, 0xFE, 0xC3, 0x04, 0xFE, 0x90, 0x01, 0x8F, 0x04, 0x03, 0x1B, 0x00, 0x00, 0x6D, 0x1A, +/* 0000FC50 */ 0x1B, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x1B, 0x5A, 0x01, 0x15, 0x00, 0x00, 0xE2, 0x1C, 0x00, +/* 0000FC60 */ 0x5A, 0x02, 0x1C, 0x00, 0x00, 0xF4, 0x03, 0x1A, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, +/* 0000FC70 */ 0x16, 0x1A, 0x98, 0x1A, 0x16, 0x02, 0x00, 0x00, 0x45, 0x17, 0x1A, 0x98, 0x1A, 0x16, 0x03, 0x01, +/* 0000FC80 */ 0x00, 0x14, 0x03, 0x00, 0x1A, 0x04, 0x09, 0x08, 0x00, 0xA8, 0x1B, 0x45, 0x1A, 0x1B, 0x09, 0x09, +/* 0000FC90 */ 0x00, 0x98, 0x1B, 0x16, 0x03, 0x02, 0x00, 0x46, 0x1A, 0x1B, 0x45, 0x18, 0x1A, 0x14, 0x03, 0x00, +/* 0000FCA0 */ 0x17, 0x05, 0x09, 0x84, 0x00, 0x8F, 0x01, 0x02, 0x1A, 0x01, 0x00, 0xA8, 0x1B, 0x14, 0x03, 0x00, +/* 0000FCB0 */ 0x1A, 0x1B, 0x09, 0x74, 0x00, 0x8F, 0x03, 0x02, 0x1A, 0x02, 0x00, 0x4A, 0x1A, 0x07, 0x06, 0x00, +/* 0000FCC0 */ 0x59, 0x00, 0x08, 0x8F, 0x04, 0x04, 0x1B, 0x03, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x08, 0xCE, +/* 0000FCD0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x7B, 0x18, 0x1C, 0x01, +/* 0000FCE0 */ 0x5A, 0x01, 0x1C, 0x02, 0x00, 0x5A, 0x02, 0x07, 0x02, 0x00, 0xF0, 0x03, 0x1B, 0x1B, 0x02, 0x00, +/* 0000FCF0 */ 0x5A, 0x01, 0x1B, 0x01, 0x00, 0x5A, 0x02, 0x06, 0x01, 0x00, 0x5A, 0x03, 0x09, 0x01, 0x00, 0xD0, +/* 0000FD00 */ 0x1B, 0x03, 0x00, 0x00, 0xA1, 0x00, 0x0A, 0x1B, 0xA1, 0x01, 0x0B, 0x1B, 0xA1, 0x02, 0x0C, 0x1B, +/* 0000FD10 */ 0x5A, 0x04, 0x1B, 0x01, 0x00, 0xA8, 0x1B, 0x5A, 0x05, 0x1B, 0x01, 0x00, 0xF0, 0x06, 0x1A, 0x1A, +/* 0000FD20 */ 0x01, 0x00, 0x94, 0x01, 0x02, 0x1A, 0x09, 0xAB, 0x00, 0x14, 0x03, 0x00, 0x17, 0x0D, 0x09, 0x6D, +/* 0000FD30 */ 0x00, 0x8F, 0x01, 0x03, 0x1A, 0x04, 0x00, 0xA8, 0x1B, 0x14, 0x03, 0x00, 0x1A, 0x1B, 0x09, 0x5D, +/* 0000FD40 */ 0x00, 0xA8, 0x1A, 0x15, 0x03, 0x00, 0x18, 0x1A, 0x09, 0x4C, 0x00, 0x8F, 0x04, 0x24, 0x1B, 0x05, +/* 0000FD50 */ 0x00, 0x6D, 0x1A, 0x1B, 0x02, 0x07, 0x02, 0x00, 0x59, 0x00, 0x1B, 0x8F, 0x04, 0x06, 0x1C, 0x06, +/* 0000FD60 */ 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x08, 0x8F, 0x04, 0x1E, 0x1D, 0x07, 0x00, 0x5A, 0x01, 0x1D, +/* 0000FD70 */ 0x04, 0x00, 0x5A, 0x02, 0x18, 0x04, 0x00, 0xF0, 0x03, 0x1C, 0x1C, 0x04, 0x00, 0x41, 0x1C, 0x1C, +/* 0000FD80 */ 0x0E, 0x5A, 0x01, 0x1C, 0x03, 0x00, 0xF4, 0x02, 0x1A, 0x1A, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, +/* 0000FD90 */ 0x94, 0x01, 0x03, 0x1A, 0x09, 0x04, 0x00, 0x94, 0x01, 0x03, 0x0F, 0x09, 0x36, 0x00, 0x14, 0x03, +/* 0000FDA0 */ 0x00, 0x17, 0x10, 0x09, 0x2E, 0x00, 0xA8, 0x1A, 0x15, 0x03, 0x00, 0x18, 0x1A, 0x09, 0x24, 0x00, +/* 0000FDB0 */ 0x15, 0x03, 0x00, 0x18, 0x11, 0x09, 0x1C, 0x00, 0x15, 0x03, 0x00, 0x18, 0x12, 0x09, 0x14, 0x00, +/* 0000FDC0 */ 0x15, 0x03, 0x00, 0x18, 0x13, 0x09, 0x0C, 0x00, 0x15, 0x03, 0x00, 0x18, 0x14, 0x09, 0x04, 0x00, +/* 0000FDD0 */ 0x94, 0x01, 0x04, 0x18, 0xA8, 0x00, 0x24, 0x00, 0x01, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, +/* 0000FDE0 */ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0x03, 0x00, 0x00, 0xFE, 0xC0, 0x02, 0xFE, 0xF9, +/* 0000FDF0 */ 0x03, 0xFE, 0x24, 0x03, 0x0E, 0xFE, 0xA3, 0x04, 0x00, 0xFF, 0x31, 0xDE, 0x01, 0x00, 0x0C, 0x00, +/* 0000FE00 */ 0x00, 0x00, 0x00, 0x2A, 0x00, 0x82, 0x00, 0x09, 0x00, 0x2C, 0x00, 0x22, 0x00, 0x4C, 0x00, 0x18, +/* 0000FE10 */ 0x00, 0x4B, 0x00, 0x74, 0x00, 0x9F, 0x00, 0x18, 0x00, 0x49, 0x00, 0x0A, 0x00, 0x3B, 0x00, 0x4C, +/* 0000FE20 */ 0x00, 0xA9, 0x00, 0x07, 0x00, 0x4D, 0x00, 0x32, 0x00, 0xFF, 0x00, 0x06, 0x00, 0x41, 0x00, 0x00, +/* 0000FE30 */ 0x7F, 0x5C, 0x0A, 0xC1, 0x63, 0x50, 0x0B, 0x00, 0xFE, 0x50, 0x0A, 0x1E, 0xA0, 0x41, 0xC1, 0x00, +/* 0000FE40 */ 0xFE, 0xFB, 0x02, 0xA0, 0xFF, 0xC2, 0xCC, 0x01, 0x00, 0xFF, 0xC2, 0xCC, 0x01, 0x00, 0x01, 0x01, +/* 0000FE50 */ 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFF, 0xC2, 0xCC, 0x01, 0x00, 0xFE, 0xE5, 0x08, 0xFE, 0xE5, 0x08, +/* 0000FE60 */ 0x0C, 0x07, 0x0F, 0x06, 0x79, 0x6C, 0x02, 0x05, 0x08, 0x07, 0x03, 0x03, 0x03, 0x03, 0x02, 0x01, +/* 0000FE70 */ 0x0E, 0x0F, 0x08, 0x01, 0x01, 0x05, 0xFE, 0xB5, 0x04, 0x06, 0xFE, 0x47, 0x03, 0x01, 0x02, 0xFE, +/* 0000FE80 */ 0xE3, 0x01, 0x4E, 0x07, 0x4E, 0x08, 0x4E, 0x0B, 0x4E, 0x0C, 0x4E, 0x0D, 0x4E, 0x09, 0x4E, 0x0A, +/* 0000FE90 */ 0x8F, 0x01, 0x19, 0x10, 0x00, 0x00, 0x4A, 0x10, 0x0E, 0x19, 0x00, 0x10, 0x8F, 0x02, 0x03, 0x10, +/* 0000FEA0 */ 0x01, 0x00, 0x5F, 0x10, 0x10, 0x00, 0x0E, 0x0B, 0x00, 0x10, 0x8F, 0x01, 0x19, 0x00, 0x00, 0x00, +/* 0000FEB0 */ 0x4A, 0x00, 0x09, 0xAE, 0x01, 0xA8, 0x10, 0x45, 0x07, 0x10, 0xA8, 0x10, 0x45, 0x08, 0x10, 0x8F, +/* 0000FEC0 */ 0x02, 0x33, 0x10, 0x02, 0x00, 0x4A, 0x10, 0x0E, 0x8C, 0x00, 0x10, 0x8F, 0x01, 0x0A, 0x10, 0x03, +/* 0000FED0 */ 0x00, 0x4A, 0x10, 0x07, 0x01, 0x00, 0x59, 0x00, 0x02, 0xF0, 0x01, 0x10, 0x10, 0x00, 0x00, 0x45, +/* 0000FEE0 */ 0x07, 0x10, 0x8F, 0x02, 0x03, 0x11, 0x01, 0x00, 0x6D, 0x10, 0x11, 0x01, 0x07, 0x03, 0x00, 0x59, +/* 0000FEF0 */ 0x00, 0x11, 0x5A, 0x01, 0x07, 0x01, 0x00, 0xE2, 0x12, 0x00, 0x5A, 0x02, 0x12, 0x01, 0x00, 0xF4, +/* 0000FF00 */ 0x03, 0x10, 0x10, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, 0x09, 0x10, 0x0E, 0x44, 0x00, 0x09, +/* 0000FF10 */ 0x98, 0x10, 0x09, 0x03, 0x00, 0x00, 0x45, 0x08, 0x10, 0x8F, 0x02, 0x06, 0x10, 0x04, 0x00, 0x07, +/* 0000FF20 */ 0x05, 0x00, 0x59, 0x00, 0x02, 0x8F, 0x02, 0x1D, 0x11, 0x05, 0x00, 0x5A, 0x01, 0x11, 0x02, 0x00, +/* 0000FF30 */ 0x5A, 0x02, 0x07, 0x02, 0x00, 0x45, 0x11, 0x04, 0x01, 0x09, 0x01, 0x12, 0x08, 0x2D, 0x11, 0x11, +/* 0000FF40 */ 0x12, 0x5A, 0x03, 0x11, 0x02, 0x00, 0x5A, 0x04, 0x05, 0x02, 0x00, 0xF0, 0x05, 0x10, 0x10, 0x02, +/* 0000FF50 */ 0x00, 0x45, 0x07, 0x10, 0x09, 0x50, 0x00, 0x8F, 0x02, 0x03, 0x11, 0x01, 0x00, 0x6D, 0x10, 0x11, +/* 0000FF60 */ 0x02, 0x07, 0x03, 0x00, 0x59, 0x00, 0x11, 0x8F, 0x01, 0x0A, 0x12, 0x03, 0x00, 0x4A, 0x12, 0x07, +/* 0000FF70 */ 0x01, 0x00, 0x59, 0x00, 0x02, 0xF0, 0x01, 0x12, 0x12, 0x04, 0x00, 0x5A, 0x01, 0x12, 0x03, 0x00, +/* 0000FF80 */ 0xE2, 0x12, 0x01, 0x5A, 0x02, 0x12, 0x03, 0x00, 0xF4, 0x03, 0x10, 0x10, 0x02, 0x00, 0x00, 0x00, +/* 0000FF90 */ 0x03, 0x00, 0x45, 0x0A, 0x10, 0x98, 0x10, 0x0A, 0x03, 0x01, 0x00, 0x45, 0x07, 0x10, 0x98, 0x10, +/* 0000FFA0 */ 0x0A, 0x06, 0x02, 0x00, 0x45, 0x08, 0x10, 0xA8, 0x10, 0x14, 0x03, 0x00, 0x08, 0x10, 0x09, 0x11, +/* 0000FFB0 */ 0x00, 0x01, 0x43, 0x01, 0x01, 0x19, 0x07, 0x8F, 0x01, 0x19, 0x00, 0x00, 0x00, 0x4A, 0x00, 0x09, +/* 0000FFC0 */ 0xA1, 0x00, 0xD8, 0x00, 0x10, 0x45, 0x0B, 0x10, 0x8F, 0x02, 0x30, 0x10, 0x06, 0x00, 0x98, 0x10, +/* 0000FFD0 */ 0x10, 0x07, 0x03, 0x00, 0x45, 0x0C, 0x10, 0xA8, 0x10, 0x14, 0x03, 0x00, 0x0C, 0x10, 0x09, 0x27, +/* 0000FFE0 */ 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x07, 0x05, 0x00, 0x5A, 0x02, 0x08, 0x05, +/* 0000FFF0 */ 0x00, 0xF0, 0x03, 0x10, 0x0B, 0x05, 0x00, 0x01, 0x43, 0x01, 0x01, 0x19, 0x10, 0x8F, 0x01, 0x19, +/* 00010000 */ 0x00, 0x00, 0x00, 0x4A, 0x00, 0x09, 0x5B, 0x00, 0x98, 0x10, 0x0C, 0x08, 0x04, 0x00, 0x45, 0x0D, +/* 00010010 */ 0x10, 0xA8, 0x10, 0x15, 0x03, 0x00, 0x0D, 0x10, 0x09, 0x1F, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 00010020 */ 0x02, 0x5A, 0x01, 0x07, 0x06, 0x00, 0x5A, 0x02, 0x0D, 0x06, 0x00, 0xF0, 0x03, 0x10, 0x0B, 0x06, +/* 00010030 */ 0x00, 0x01, 0x43, 0x01, 0x01, 0x19, 0x10, 0x09, 0x1C, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, +/* 00010040 */ 0x5A, 0x01, 0x07, 0x07, 0x00, 0x5A, 0x02, 0x08, 0x07, 0x00, 0xF0, 0x03, 0x10, 0x0B, 0x07, 0x00, +/* 00010050 */ 0x01, 0x43, 0x01, 0x01, 0x19, 0x10, 0x8F, 0x01, 0x19, 0x00, 0x00, 0x00, 0x4A, 0x00, 0x09, 0x02, +/* 00010060 */ 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x4D, 0x03, 0xFE, 0xC0, 0x02, 0xFE, 0xC0, 0x02, 0x28, 0xFE, +/* 00010070 */ 0xB6, 0x04, 0x00, 0x0E, 0xFE, 0xB7, 0x04, 0x00, 0xFF, 0xD8, 0xCC, 0x01, 0x00, 0x1B, 0x0E, 0x00, +/* 00010080 */ 0x00, 0x00, 0x1A, 0x00, 0x3F, 0x00, 0x0B, 0x00, 0x31, 0x00, 0x05, 0x00, 0x20, 0x00, 0x05, 0x00, +/* 00010090 */ 0x23, 0x00, 0x0C, 0x00, 0x7A, 0x00, 0x17, 0x00, 0x29, 0x00, 0x2A, 0x00, 0x6A, 0x00, 0x04, 0x00, +/* 000100A0 */ 0xB8, 0x00, 0x09, 0x00, 0x26, 0x00, 0x3E, 0x00, 0xC6, 0x00, 0x3E, 0x00, 0x5C, 0x00, 0x09, 0x00, +/* 000100B0 */ 0x1F, 0x00, 0x09, 0x00, 0x29, 0x00, 0x0A, 0x00, 0x2B, 0x00, 0x06, 0x00, 0x2C, 0x00, 0x0B, 0x00, +/* 000100C0 */ 0x8D, 0x00, 0x06, 0x00, 0x28, 0x01, 0x0F, 0x00, 0x56, 0x00, 0x0A, 0x00, 0x84, 0x00, 0x1C, 0x00, +/* 000100D0 */ 0x54, 0x00, 0x0B, 0x00, 0x31, 0x00, 0x09, 0x00, 0x42, 0x00, 0x0A, 0x00, 0x31, 0x00, 0x1F, 0x00, +/* 000100E0 */ 0x6B, 0x00, 0x1C, 0x00, 0x5B, 0x00, 0x0D, 0x00, 0x22, 0x00, 0x00, 0xEF, 0x00, 0x01, 0x00, 0x7F, +/* 000100F0 */ 0x4C, 0x00, 0x01, 0x00, 0x10, 0x03, 0x00, 0xFE, 0x6E, 0x0A, 0x2C, 0xA2, 0x41, 0xC1, 0x00, 0xFE, +/* 00010100 */ 0xB8, 0x04, 0xA1, 0xFF, 0xE8, 0xD1, 0x01, 0x00, 0xFF, 0xE8, 0xD1, 0x01, 0x00, 0x01, 0xFE, 0x00, +/* 00010110 */ 0x90, 0x03, 0x03, 0xFF, 0xE8, 0xD1, 0x01, 0x00, 0xF9, 0xF9, 0x04, 0x05, 0x08, 0x11, 0x11, 0x02, +/* 00010120 */ 0x01, 0x07, 0x06, 0xFE, 0x47, 0x03, 0x05, 0xFE, 0xB5, 0x04, 0x05, 0xFE, 0xB9, 0x04, 0x3D, 0x8F, +/* 00010130 */ 0x02, 0x33, 0x08, 0x00, 0x00, 0x4A, 0x08, 0x0E, 0x18, 0x00, 0x08, 0x01, 0x09, 0x01, 0x00, 0x05, +/* 00010140 */ 0x2D, 0x00, 0x00, 0x03, 0x01, 0x09, 0x01, 0x08, 0x06, 0x2D, 0x00, 0x00, 0x08, 0x09, 0x1A, 0x00, +/* 00010150 */ 0x09, 0x15, 0x00, 0x01, 0x09, 0x01, 0x00, 0x05, 0x2D, 0x00, 0x00, 0x04, 0x01, 0x09, 0x01, 0x08, +/* 00010160 */ 0x06, 0x2D, 0x00, 0x00, 0x08, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFF, 0x1D, 0xD2, 0x01, +/* 00010170 */ 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x2A, 0x00, 0x18, 0x00, 0x53, 0x00, 0x17, 0x00, +/* 00010180 */ 0x46, 0x00, 0x00, 0x7E, 0x5D, 0x08, 0x01, 0x00, 0x1A, 0x0B, 0x00, 0xFE, 0x3B, 0x0A, 0x32, 0xA0, +/* 00010190 */ 0x41, 0xD1, 0x00, 0x9D, 0xFF, 0xE1, 0xC8, 0x01, 0x00, 0xFF, 0xE1, 0xC8, 0x01, 0x00, 0x01, 0xFE, +/* 000101A0 */ 0x00, 0x90, 0x01, 0x01, 0xFF, 0xE1, 0xC8, 0x01, 0x00, 0xFE, 0x13, 0x03, 0xFE, 0x13, 0x03, 0x01, +/* 000101B0 */ 0xFE, 0xB2, 0x04, 0x06, 0x04, 0x07, 0x08, 0x1E, 0x1E, 0x02, 0x03, 0x06, 0x04, 0x05, 0x06, 0x07, +/* 000101C0 */ 0x08, 0x79, 0x4E, 0x07, 0x96, 0x02, 0x07, 0x8F, 0x02, 0x04, 0x07, 0x00, 0x00, 0x07, 0x03, 0x00, +/* 000101D0 */ 0x59, 0x00, 0x03, 0xCD, 0x08, 0x5A, 0x01, 0x08, 0x00, 0x00, 0x5A, 0x02, 0x02, 0x00, 0x00, 0xF0, +/* 000101E0 */ 0x03, 0x07, 0x07, 0x00, 0x00, 0x96, 0x02, 0x07, 0x8F, 0x02, 0x06, 0x07, 0x01, 0x00, 0x07, 0x04, +/* 000101F0 */ 0x00, 0x59, 0x00, 0x03, 0x8F, 0x02, 0x17, 0x08, 0x02, 0x00, 0x5A, 0x01, 0x08, 0x01, 0x00, 0x8F, +/* 00010200 */ 0x02, 0x13, 0x08, 0x03, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x03, 0x8F, 0x02, 0x2F, 0x09, 0x04, +/* 00010210 */ 0x00, 0x5A, 0x01, 0x09, 0x02, 0x00, 0xF0, 0x02, 0x08, 0x08, 0x02, 0x00, 0x5A, 0x02, 0x08, 0x01, +/* 00010220 */ 0x00, 0xD6, 0x00, 0x08, 0x5A, 0x03, 0x08, 0x01, 0x00, 0xF0, 0x04, 0xFF, 0x07, 0x01, 0x00, 0x93, +/* 00010230 */ 0x02, 0x00, 0x05, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFF, 0xF7, 0xC8, 0x01, 0x00, +/* 00010240 */ 0x04, 0x05, 0x00, 0x00, 0x00, 0x21, 0x00, 0x31, 0x00, 0x47, 0x00, 0xB6, 0x02, 0x0A, 0x00, 0x15, +/* 00010250 */ 0x00, 0x00, 0x56, 0x02, 0x01, 0x00, 0x7F, 0x5D, 0x0E, 0x01, 0x00, 0x1A, 0x0B, 0x00, 0xFE, 0x3D, +/* 00010260 */ 0x0A, 0x6B, 0xA2, 0x41, 0xD1, 0x00, 0x9E, 0xFF, 0x8B, 0xC9, 0x01, 0x00, 0xFF, 0x8B, 0xC9, 0x01, +/* 00010270 */ 0x00, 0x01, 0x40, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0x8B, 0xC9, 0x01, 0x00, 0xFE, 0x48, 0x02, +/* 00010280 */ 0xFE, 0x48, 0x02, 0x02, 0xFE, 0xB3, 0x04, 0xFE, 0xB4, 0x04, 0x07, 0x04, 0x08, 0x08, 0x25, 0x25, +/* 00010290 */ 0x03, 0x01, 0x01, 0x03, 0x08, 0x05, 0x06, 0x07, 0x07, 0x08, 0x97, 0x4E, 0x08, 0x96, 0x02, 0x08, +/* 000102A0 */ 0x4E, 0x08, 0x96, 0x03, 0x08, 0x8F, 0x03, 0x2F, 0x08, 0x00, 0x00, 0x98, 0x08, 0x08, 0x04, 0x00, +/* 000102B0 */ 0x00, 0x96, 0x02, 0x08, 0x8F, 0x03, 0x04, 0x08, 0x01, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x03, +/* 000102C0 */ 0xCD, 0x09, 0x5A, 0x01, 0x09, 0x00, 0x00, 0x5A, 0x02, 0x02, 0x00, 0x00, 0xF0, 0x03, 0x08, 0x08, +/* 000102D0 */ 0x00, 0x00, 0x96, 0x03, 0x08, 0x8F, 0x03, 0x06, 0x08, 0x02, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, +/* 000102E0 */ 0x03, 0x8F, 0x03, 0x17, 0x09, 0x03, 0x00, 0x5A, 0x01, 0x09, 0x01, 0x00, 0x8F, 0x03, 0x13, 0x09, +/* 000102F0 */ 0x04, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x03, 0x93, 0x02, 0x0A, 0x05, 0x00, 0x5A, 0x01, 0x0A, +/* 00010300 */ 0x02, 0x00, 0xF0, 0x02, 0x09, 0x09, 0x02, 0x00, 0x5A, 0x02, 0x09, 0x01, 0x00, 0xD6, 0x00, 0x09, +/* 00010310 */ 0x5A, 0x03, 0x09, 0x01, 0x00, 0xF0, 0x04, 0xFF, 0x08, 0x01, 0x00, 0x8F, 0x01, 0x02, 0x08, 0x06, +/* 00010320 */ 0x00, 0x4A, 0x08, 0x93, 0x03, 0x09, 0x07, 0x00, 0x9D, 0x09, 0x08, 0x04, 0x00, 0x00, 0xA8, 0x00, +/* 00010330 */ 0x24, 0x00, 0xFF, 0xAB, 0xC9, 0x01, 0x00, 0x05, 0x0A, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x56, 0x00, +/* 00010340 */ 0x21, 0x00, 0x45, 0x00, 0x46, 0x00, 0x58, 0x01, 0x15, 0x00, 0x34, 0x00, 0x00, 0x51, 0x03, 0x01, +/* 00010350 */ 0x00, 0x7F, 0x4C, 0x06, 0x01, 0x00, 0x10, 0x03, 0x00, 0xFE, 0x41, 0x0A, 0x68, 0xA2, 0x41, 0xD1, +/* 00010360 */ 0x00, 0x9F, 0xFF, 0xA2, 0xCA, 0x01, 0x00, 0xFF, 0xA2, 0xCA, 0x01, 0x00, 0x41, 0xFE, 0x00, 0x90, +/* 00010370 */ 0x02, 0x02, 0xFF, 0xA2, 0xCA, 0x01, 0x00, 0xEC, 0xEC, 0x04, 0x03, 0x06, 0x0D, 0x0C, 0x04, 0x01, +/* 00010380 */ 0x01, 0x02, 0x05, 0x06, 0xFE, 0x47, 0x03, 0x2D, 0x4E, 0x04, 0x8F, 0x01, 0x02, 0x06, 0x00, 0x00, +/* 00010390 */ 0x4A, 0x06, 0x98, 0x06, 0x06, 0x03, 0x00, 0x00, 0x45, 0x04, 0x06, 0x15, 0x03, 0x00, 0x04, 0x02, +/* 000103A0 */ 0x09, 0x0E, 0x00, 0x8F, 0x01, 0x03, 0x06, 0x01, 0x00, 0x4A, 0x06, 0x9D, 0x03, 0x06, 0x04, 0x00, +/* 000103B0 */ 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFF, 0xC9, 0xCA, 0x01, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00, 0x11, +/* 000103C0 */ 0x00, 0x48, 0x00, 0x08, 0x00, 0x2D, 0x00, 0x10, 0x00, 0x4F, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0x01, +/* 000103D0 */ 0x00, 0x10, 0x03, 0x00, 0xFE, 0x16, 0x0A, 0x08, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0xB1, 0x04, 0x9C, +/* 000103E0 */ 0xFF, 0xB9, 0xBE, 0x01, 0x00, 0xFF, 0xB9, 0xBE, 0x01, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x02, 0x02, +/* 000103F0 */ 0xFF, 0xB9, 0xBE, 0x01, 0x00, 0x96, 0x96, 0x05, 0x03, 0x06, 0x05, 0x0E, 0x0E, 0x02, 0x01, 0x02, +/* 00010400 */ 0x05, 0x08, 0x32, 0x58, 0x04, 0x8F, 0x02, 0x2D, 0x06, 0x00, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, +/* 00010410 */ 0x02, 0x5A, 0x01, 0x04, 0x00, 0x00, 0x8F, 0x01, 0x18, 0x07, 0x01, 0x00, 0x4A, 0x07, 0x5A, 0x02, +/* 00010420 */ 0x07, 0x00, 0x00, 0x5A, 0x03, 0x03, 0x00, 0x00, 0xF0, 0x04, 0x00, 0x06, 0x00, 0x00, 0x09, 0x02, +/* 00010430 */ 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFF, 0xF7, 0xBE, 0x01, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x2E, +/* 00010440 */ 0x00, 0x57, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0x01, 0x00, 0x10, 0x03, 0x00, 0xFE, 0x10, 0x0A, 0x08, +/* 00010450 */ 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0xB0, 0x04, 0x9B, 0xFF, 0x13, 0xBD, 0x01, 0x00, 0xFF, 0x13, 0xBD, +/* 00010460 */ 0x01, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x03, 0x02, 0xFF, 0x13, 0xBD, 0x01, 0x00, 0xCC, 0xCC, 0x06, +/* 00010470 */ 0x03, 0x07, 0x06, 0x12, 0x11, 0x02, 0x01, 0x02, 0x06, 0x08, 0x41, 0x58, 0x05, 0x15, 0x05, 0x00, +/* 00010480 */ 0x04, 0x02, 0xA8, 0x07, 0x45, 0x04, 0x07, 0x8F, 0x02, 0x2C, 0x07, 0x00, 0x00, 0x07, 0x05, 0x00, +/* 00010490 */ 0x59, 0x00, 0x02, 0x5A, 0x01, 0x05, 0x00, 0x00, 0x8F, 0x01, 0x16, 0x08, 0x01, 0x00, 0x4A, 0x08, +/* 000104A0 */ 0x5A, 0x02, 0x08, 0x00, 0x00, 0x5A, 0x03, 0x03, 0x00, 0x00, 0x5A, 0x04, 0x04, 0x00, 0x00, 0xF0, +/* 000104B0 */ 0x05, 0x00, 0x07, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFF, 0x51, 0xBD, 0x01, +/* 000104C0 */ 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x23, 0x00, 0x33, 0x00, 0x6A, 0x00, 0x00, 0x7F, +/* 000104D0 */ 0x5C, 0x08, 0x01, 0x00, 0x10, 0x03, 0x00, 0xFE, 0x0A, 0x0A, 0x08, 0xA2, 0x41, 0xC3, 0x00, 0xFE, +/* 000104E0 */ 0xAF, 0x04, 0x9A, 0xFF, 0x39, 0xBB, 0x01, 0x00, 0xFF, 0x39, 0xBB, 0x01, 0x00, 0x09, 0xFE, 0x00, +/* 000104F0 */ 0x90, 0x03, 0x02, 0xFF, 0x39, 0xBB, 0x01, 0x00, 0xC8, 0xC8, 0x06, 0x03, 0x07, 0x06, 0x12, 0x11, +/* 00010500 */ 0x02, 0x01, 0x02, 0x06, 0x08, 0x41, 0x58, 0x05, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA8, 0x07, 0x45, +/* 00010510 */ 0x04, 0x07, 0x8F, 0x02, 0x2C, 0x07, 0x00, 0x00, 0x07, 0x05, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, +/* 00010520 */ 0x05, 0x00, 0x00, 0x8F, 0x01, 0x14, 0x08, 0x01, 0x00, 0x4A, 0x08, 0x5A, 0x02, 0x08, 0x00, 0x00, +/* 00010530 */ 0x5A, 0x03, 0x03, 0x00, 0x00, 0x5A, 0x04, 0x04, 0x00, 0x00, 0xF0, 0x05, 0x00, 0x07, 0x00, 0x00, +/* 00010540 */ 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFF, 0x75, 0xBB, 0x01, 0x00, 0x03, 0x02, 0x00, 0x00, +/* 00010550 */ 0x00, 0x0A, 0x00, 0x23, 0x00, 0x33, 0x00, 0x68, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0x01, 0x00, 0x10, +/* 00010560 */ 0x03, 0x00, 0xFE, 0x04, 0x0A, 0x08, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0xAE, 0x04, 0x99, 0xFF, 0x6F, +/* 00010570 */ 0xB9, 0x01, 0x00, 0xFF, 0x6F, 0xB9, 0x01, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x03, 0x02, 0xFF, 0x6F, +/* 00010580 */ 0xB9, 0x01, 0x00, 0xC0, 0xC0, 0x06, 0x03, 0x07, 0x06, 0x12, 0x11, 0x02, 0x01, 0x02, 0x06, 0x08, +/* 00010590 */ 0x41, 0x58, 0x05, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA8, 0x07, 0x45, 0x04, 0x07, 0x8F, 0x02, 0x2C, +/* 000105A0 */ 0x07, 0x00, 0x00, 0x07, 0x05, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x05, 0x00, 0x00, 0x8F, 0x01, +/* 000105B0 */ 0x12, 0x08, 0x01, 0x00, 0x4A, 0x08, 0x5A, 0x02, 0x08, 0x00, 0x00, 0x5A, 0x03, 0x03, 0x00, 0x00, +/* 000105C0 */ 0x5A, 0x04, 0x04, 0x00, 0x00, 0xF0, 0x05, 0x00, 0x07, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, +/* 000105D0 */ 0x24, 0x00, 0xFF, 0xA7, 0xB9, 0x01, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x23, 0x00, +/* 000105E0 */ 0x33, 0x00, 0x64, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0xE6, 0x09, +/* 000105F0 */ 0x1D, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x38, 0x03, 0x98, 0xFF, 0xCF, 0xB3, 0x01, 0x00, 0xFF, 0xCF, +/* 00010600 */ 0xB3, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFF, 0xCF, 0xB3, 0x01, 0x00, 0xFE, 0x60, +/* 00010610 */ 0x03, 0xFE, 0x60, 0x03, 0x08, 0x08, 0x0C, 0x0A, 0x52, 0x4F, 0x02, 0x09, 0x08, 0x04, 0x04, 0x04, +/* 00010620 */ 0x04, 0x0B, 0x08, 0x06, 0xFE, 0xD6, 0x03, 0x05, 0xFE, 0x9C, 0x03, 0x05, 0xFE, 0xDF, 0x03, 0x06, +/* 00010630 */ 0xFE, 0xE0, 0x03, 0x05, 0xFE, 0xAD, 0x04, 0xFE, 0x5F, 0x01, 0xA8, 0x0A, 0x8F, 0x01, 0x07, 0x0C, +/* 00010640 */ 0x00, 0x00, 0x4A, 0x0C, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x08, 0x00, 0x00, 0xF0, +/* 00010650 */ 0x02, 0x0C, 0x0C, 0x00, 0x00, 0x45, 0x08, 0x0C, 0x2A, 0x0C, 0x09, 0x15, 0x03, 0x00, 0x0C, 0x03, +/* 00010660 */ 0x09, 0x84, 0x00, 0x5F, 0x0C, 0x09, 0x00, 0x45, 0x0A, 0x0C, 0x2A, 0x0C, 0x0A, 0x15, 0x03, 0x00, +/* 00010670 */ 0x0C, 0x03, 0x09, 0x72, 0x00, 0x8F, 0x02, 0x24, 0x0D, 0x01, 0x00, 0x6D, 0x0C, 0x0D, 0x01, 0x07, +/* 00010680 */ 0x02, 0x00, 0x59, 0x00, 0x0D, 0x5A, 0x01, 0x0A, 0x01, 0x00, 0xF4, 0x02, 0x0C, 0x0C, 0x01, 0x00, +/* 00010690 */ 0x00, 0x00, 0x01, 0x00, 0x45, 0x0A, 0x0C, 0x15, 0x03, 0x00, 0x0A, 0x04, 0x09, 0x48, 0x00, 0x15, +/* 000106A0 */ 0x03, 0x00, 0x0A, 0x05, 0x09, 0x40, 0x00, 0x8F, 0x02, 0x03, 0x0D, 0x02, 0x00, 0x6D, 0x0C, 0x0D, +/* 000106B0 */ 0x02, 0x07, 0x04, 0x00, 0x59, 0x00, 0x0D, 0x8F, 0x02, 0x0C, 0x0E, 0x03, 0x00, 0x07, 0x02, 0x00, +/* 000106C0 */ 0x59, 0x00, 0x02, 0x5A, 0x01, 0x0A, 0x03, 0x00, 0xF0, 0x02, 0x0E, 0x0E, 0x03, 0x00, 0x5A, 0x01, +/* 000106D0 */ 0x0E, 0x02, 0x00, 0x5A, 0x02, 0x06, 0x02, 0x00, 0x5A, 0x03, 0x07, 0x02, 0x00, 0xF4, 0x04, 0xFF, +/* 000106E0 */ 0x0C, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x2A, 0x0C, 0x0A, 0x14, 0x08, 0x00, 0x0C, 0x03, 0x14, +/* 000106F0 */ 0x03, 0x00, 0x0A, 0x05, 0x09, 0x60, 0x00, 0x8F, 0x01, 0x08, 0x0C, 0x04, 0x00, 0x4A, 0x0C, 0x07, +/* 00010700 */ 0x04, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x08, 0x04, 0x00, 0x8F, 0x02, 0x26, 0x0D, 0x05, 0x00, +/* 00010710 */ 0x5A, 0x02, 0x0D, 0x04, 0x00, 0x8F, 0x02, 0x03, 0x0E, 0x02, 0x00, 0x6D, 0x0D, 0x0E, 0x03, 0x07, +/* 00010720 */ 0x02, 0x00, 0x59, 0x00, 0x0E, 0x8F, 0x02, 0x2B, 0x0F, 0x06, 0x00, 0x07, 0x01, 0x00, 0x59, 0x00, +/* 00010730 */ 0x02, 0xF0, 0x01, 0x0F, 0x0F, 0x06, 0x00, 0x5A, 0x01, 0x0F, 0x05, 0x00, 0xF4, 0x02, 0x0D, 0x0D, +/* 00010740 */ 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x5A, 0x03, 0x0D, 0x04, 0x00, 0xF0, 0x04, 0x00, 0x0C, 0x04, +/* 00010750 */ 0x00, 0x09, 0x43, 0x00, 0x09, 0x3E, 0x00, 0x8F, 0x01, 0x08, 0x0C, 0x04, 0x00, 0x4A, 0x0C, 0x07, +/* 00010760 */ 0x04, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x08, 0x07, 0x00, 0x8F, 0x02, 0x27, 0x0D, 0x07, 0x00, +/* 00010770 */ 0x5A, 0x02, 0x0D, 0x07, 0x00, 0x8F, 0x02, 0x2B, 0x0D, 0x06, 0x00, 0x07, 0x01, 0x00, 0x59, 0x00, +/* 00010780 */ 0x02, 0xF0, 0x01, 0x0D, 0x0D, 0x08, 0x00, 0x5A, 0x03, 0x0D, 0x07, 0x00, 0xF0, 0x04, 0x00, 0x0C, +/* 00010790 */ 0x07, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x0E, 0x02, 0xFE, 0x22, 0x03, 0xFE, +/* 000107A0 */ 0xAC, 0x02, 0xFE, 0xEE, 0x01, 0xFF, 0x0A, 0xB4, 0x01, 0x00, 0x0B, 0x02, 0x00, 0x00, 0x00, 0x1C, +/* 000107B0 */ 0x00, 0x34, 0x00, 0x0B, 0x00, 0x32, 0x00, 0x07, 0x00, 0x2E, 0x00, 0x0B, 0x00, 0x36, 0x00, 0x22, +/* 000107C0 */ 0x00, 0x37, 0x00, 0x10, 0x00, 0x4A, 0x00, 0x40, 0x00, 0x96, 0x00, 0x10, 0x00, 0x4C, 0x00, 0x60, +/* 000107D0 */ 0x00, 0x93, 0x00, 0x40, 0x00, 0x64, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x03, 0x00, +/* 000107E0 */ 0xFE, 0xD8, 0x09, 0x28, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xF8, 0x02, 0x97, 0xFF, 0xFB, 0xB1, 0x01, +/* 000107F0 */ 0x00, 0xFF, 0xFB, 0xB1, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x04, 0x04, 0xFF, 0xFB, 0xB1, 0x01, +/* 00010800 */ 0x00, 0xFE, 0x8C, 0x01, 0xFE, 0x8C, 0x01, 0x07, 0x05, 0x0A, 0x03, 0x25, 0x24, 0x02, 0x04, 0x02, +/* 00010810 */ 0x04, 0x04, 0x04, 0x04, 0x09, 0x07, 0x05, 0xFE, 0x33, 0x03, 0x08, 0x9F, 0x14, 0x0A, 0x00, 0x05, +/* 00010820 */ 0x02, 0xA8, 0x0A, 0x14, 0x03, 0x00, 0x05, 0x0A, 0x09, 0x1F, 0x00, 0x8F, 0x02, 0x03, 0x0B, 0x00, +/* 00010830 */ 0x00, 0x6D, 0x0A, 0x0B, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0B, 0x5A, 0x01, 0x06, 0x00, 0x00, +/* 00010840 */ 0xF4, 0x02, 0xFF, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x02, 0x03, 0x0B, 0x00, 0x00, +/* 00010850 */ 0x6D, 0x0A, 0x0B, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0B, 0x5A, 0x01, 0x05, 0x01, 0x00, 0xF4, +/* 00010860 */ 0x02, 0x0A, 0x0A, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, 0x08, 0x0A, 0x0E, 0x0C, 0x00, 0x08, +/* 00010870 */ 0x5F, 0x0A, 0x08, 0x02, 0x15, 0x03, 0x00, 0x0A, 0x03, 0x09, 0x1F, 0x00, 0x8F, 0x02, 0x03, 0x0B, +/* 00010880 */ 0x00, 0x00, 0x6D, 0x0A, 0x0B, 0x03, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0B, 0x5A, 0x01, 0x06, 0x02, +/* 00010890 */ 0x00, 0xF4, 0x02, 0xFF, 0x0A, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x8F, 0x01, 0x07, 0x0A, 0x01, +/* 000108A0 */ 0x00, 0x4A, 0x0A, 0x07, 0x02, 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x07, 0x03, 0x00, 0xF0, 0x02, +/* 000108B0 */ 0x00, 0x0A, 0x03, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB1, 0x02, 0xFE, 0x05, +/* 000108C0 */ 0x02, 0xFE, 0x0C, 0x02, 0xFE, 0xB1, 0x02, 0xFF, 0x2C, 0xB2, 0x01, 0x00, 0x07, 0x00, 0x00, 0x00, +/* 000108D0 */ 0x00, 0x0F, 0x00, 0x37, 0x00, 0x1F, 0x00, 0x40, 0x00, 0x22, 0x00, 0x38, 0x00, 0x10, 0x00, 0x3F, +/* 000108E0 */ 0x00, 0x1F, 0x00, 0x40, 0x00, 0x1E, 0x00, 0x2C, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, +/* 000108F0 */ 0x03, 0x00, 0xFE, 0xCB, 0x09, 0x24, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xF7, 0x02, 0x96, 0xFF, 0x37, +/* 00010900 */ 0xB0, 0x01, 0x00, 0xFF, 0x37, 0xB0, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x05, 0x05, 0xFF, 0x37, +/* 00010910 */ 0xB0, 0x01, 0x00, 0xFE, 0x9A, 0x01, 0xFE, 0x9A, 0x01, 0x08, 0x05, 0x0B, 0x04, 0x25, 0x24, 0x02, +/* 00010920 */ 0x04, 0x02, 0x04, 0x04, 0x04, 0x04, 0x0A, 0x07, 0x05, 0xFE, 0x33, 0x03, 0x08, 0xA2, 0x14, 0x0A, +/* 00010930 */ 0x00, 0x05, 0x02, 0xA8, 0x0B, 0x14, 0x03, 0x00, 0x05, 0x0B, 0x09, 0x1F, 0x00, 0x8F, 0x02, 0x03, +/* 00010940 */ 0x0C, 0x00, 0x00, 0x6D, 0x0B, 0x0C, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0C, 0x5A, 0x01, 0x06, +/* 00010950 */ 0x00, 0x00, 0xF4, 0x02, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x02, 0x03, 0x0C, +/* 00010960 */ 0x00, 0x00, 0x6D, 0x0B, 0x0C, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0C, 0x5A, 0x01, 0x05, 0x01, +/* 00010970 */ 0x00, 0xF4, 0x02, 0x0B, 0x0B, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, 0x09, 0x0B, 0x0E, 0x0C, +/* 00010980 */ 0x00, 0x09, 0x5F, 0x0B, 0x09, 0x02, 0x15, 0x03, 0x00, 0x0B, 0x03, 0x09, 0x1F, 0x00, 0x8F, 0x02, +/* 00010990 */ 0x03, 0x0C, 0x00, 0x00, 0x6D, 0x0B, 0x0C, 0x03, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0C, 0x5A, 0x01, +/* 000109A0 */ 0x06, 0x02, 0x00, 0xF4, 0x02, 0xFF, 0x0B, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x8F, 0x02, 0x2E, +/* 000109B0 */ 0x0B, 0x01, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x07, 0x03, 0x00, 0x5A, 0x02, +/* 000109C0 */ 0x08, 0x03, 0x00, 0xF0, 0x03, 0x00, 0x0B, 0x03, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, +/* 000109D0 */ 0xFE, 0xB1, 0x02, 0xFE, 0x05, 0x02, 0xFE, 0x0C, 0x02, 0xFE, 0xB1, 0x02, 0xFF, 0x71, 0xB0, 0x01, +/* 000109E0 */ 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x37, 0x00, 0x1F, 0x00, 0x40, 0x00, 0x22, 0x00, +/* 000109F0 */ 0x38, 0x00, 0x10, 0x00, 0x3F, 0x00, 0x1F, 0x00, 0x40, 0x00, 0x21, 0x00, 0x31, 0x00, 0x00, 0x7E, +/* 00010A00 */ 0x5D, 0x18, 0xC1, 0x13, 0x1A, 0x4B, 0x00, 0xFE, 0xB8, 0x09, 0x04, 0xA3, 0x41, 0xC1, 0x00, 0xFE, +/* 00010A10 */ 0x61, 0x03, 0x94, 0xFF, 0xA2, 0xAC, 0x01, 0x00, 0xFF, 0xA2, 0xAC, 0x01, 0x00, 0x01, 0xFE, 0x00, +/* 00010A20 */ 0x90, 0x04, 0x04, 0xFF, 0xA2, 0xAC, 0x01, 0x00, 0xFE, 0x6F, 0x03, 0xFE, 0x6F, 0x03, 0x04, 0xFE, +/* 00010A30 */ 0xD9, 0x03, 0xFE, 0xAA, 0x04, 0xFE, 0xAB, 0x04, 0xFE, 0xAC, 0x04, 0x09, 0x0A, 0x10, 0x05, 0x20, +/* 00010A40 */ 0x20, 0x02, 0x02, 0x01, 0x05, 0x03, 0x03, 0x03, 0x03, 0x01, 0x0D, 0x0E, 0x0F, 0x01, 0x00, 0x08, +/* 00010A50 */ 0x06, 0xFE, 0xE1, 0x03, 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, 0x2B, 0x03, 0x0C, 0x06, 0xFE, 0x2D, +/* 00010A60 */ 0x03, 0x07, 0x8B, 0x96, 0x04, 0x0B, 0x96, 0x05, 0x0C, 0xD0, 0x10, 0x00, 0x00, 0x00, 0x96, 0x02, +/* 00010A70 */ 0x10, 0x96, 0x03, 0x02, 0x8F, 0x02, 0x06, 0x10, 0x00, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, +/* 00010A80 */ 0x8F, 0x02, 0x17, 0x11, 0x01, 0x00, 0x5A, 0x01, 0x11, 0x00, 0x00, 0x5A, 0x02, 0x0A, 0x00, 0x00, +/* 00010A90 */ 0xD6, 0x00, 0x11, 0x5A, 0x03, 0x11, 0x00, 0x00, 0xF0, 0x04, 0xFF, 0x10, 0x00, 0x00, 0x8F, 0x02, +/* 00010AA0 */ 0x16, 0x10, 0x02, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, 0x93, 0x02, 0x11, 0x03, 0x00, 0x5A, +/* 00010AB0 */ 0x01, 0x11, 0x01, 0x00, 0x5A, 0x02, 0x04, 0x01, 0x00, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00010AC0 */ 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x93, 0x03, 0x12, 0x04, 0x00, 0x7B, 0x12, 0x11, 0x00, 0x7B, +/* 00010AD0 */ 0x07, 0x11, 0x01, 0x7B, 0x07, 0x11, 0x02, 0x5A, 0x03, 0x11, 0x01, 0x00, 0xF0, 0x04, 0xFF, 0x10, +/* 00010AE0 */ 0x01, 0x00, 0x93, 0x02, 0x00, 0x03, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x01, 0x14, +/* 00010AF0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, +/* 00010B00 */ 0x00, 0x96, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, +/* 00010B10 */ 0x95, 0x01, 0xFF, 0xF5, 0xAC, 0x01, 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 0x08, 0x00, 0x19, 0x00, +/* 00010B20 */ 0x03, 0x00, 0x17, 0x00, 0x2A, 0x00, 0x70, 0x02, 0x44, 0x00, 0x68, 0x00, 0x0A, 0x00, 0x13, 0x00, +/* 00010B30 */ 0x00, 0x35, 0x0B, 0x01, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x53, 0x50, 0x43, 0x00, 0xFE, 0xBB, 0x09, +/* 00010B40 */ 0x41, 0xB2, 0x41, 0xD1, 0x00, 0x95, 0xFF, 0x5E, 0xAD, 0x01, 0x00, 0xFF, 0x5E, 0xAD, 0x01, 0x00, +/* 00010B50 */ 0x45, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0x5E, 0xAD, 0x01, 0x00, 0xFE, 0x2C, 0x02, 0xFE, 0x2C, +/* 00010B60 */ 0x02, 0x08, 0x0B, 0x0F, 0x06, 0x2F, 0x2E, 0x03, 0x03, 0x07, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, +/* 00010B70 */ 0x0E, 0x0F, 0x08, 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, 0x2B, 0x03, 0x0C, 0x06, 0xFE, 0x2D, 0x03, +/* 00010B80 */ 0x06, 0xFE, 0x2C, 0x03, 0x0B, 0x07, 0x01, 0x01, 0xC3, 0xA8, 0x0D, 0xE7, 0x9F, 0x00, 0x8F, 0x03, +/* 00010B90 */ 0x29, 0x10, 0x00, 0x00, 0x07, 0x05, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x0B, 0x00, 0x00, 0x8F, +/* 00010BA0 */ 0x01, 0x04, 0x11, 0x01, 0x00, 0x5A, 0x02, 0x11, 0x00, 0x00, 0xA8, 0x11, 0x5A, 0x03, 0x11, 0x00, +/* 00010BB0 */ 0x00, 0x8F, 0x01, 0x05, 0x11, 0x02, 0x00, 0x5A, 0x04, 0x11, 0x00, 0x00, 0xF0, 0x05, 0x10, 0x10, +/* 00010BC0 */ 0x00, 0x00, 0x45, 0x0D, 0x10, 0x5F, 0x10, 0x0D, 0x00, 0x0E, 0x5C, 0x00, 0x10, 0x8F, 0x03, 0x16, +/* 00010BD0 */ 0x10, 0x03, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x8F, 0x01, 0x02, 0x11, 0x04, 0x00, 0x5A, +/* 00010BE0 */ 0x01, 0x11, 0x01, 0x00, 0x8F, 0x01, 0x03, 0x11, 0x05, 0x00, 0x5A, 0x02, 0x11, 0x01, 0x00, 0xCE, +/* 00010BF0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x5F, 0x12, 0x0D, 0x01, +/* 00010C00 */ 0x7B, 0x12, 0x11, 0x02, 0x7B, 0x05, 0x11, 0x03, 0x7B, 0x05, 0x11, 0x04, 0x7B, 0x08, 0x11, 0x05, +/* 00010C10 */ 0x5A, 0x03, 0x11, 0x01, 0x00, 0xF0, 0x04, 0xFF, 0x10, 0x01, 0x00, 0x8F, 0x01, 0x03, 0x10, 0x05, +/* 00010C20 */ 0x00, 0x2D, 0x10, 0x10, 0x0A, 0x94, 0x01, 0x03, 0x10, 0xEB, 0x09, 0x1B, 0x00, 0xE9, 0x0C, 0x06, +/* 00010C30 */ 0x8F, 0x03, 0x22, 0x10, 0x06, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x0C, 0x02, +/* 00010C40 */ 0x00, 0xF0, 0x02, 0xFF, 0x10, 0x02, 0x00, 0xEB, 0xA8, 0x00, 0x24, 0x00, 0x01, 0x18, 0x00, 0x00, +/* 00010C50 */ 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, +/* 00010C60 */ 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0xFE, 0x0D, 0x02, 0xFE, 0x0D, +/* 00010C70 */ 0x02, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x94, 0x01, 0xFF, 0x94, 0xAD, +/* 00010C80 */ 0x01, 0x00, 0x07, 0x05, 0x00, 0x00, 0x00, 0x37, 0x00, 0x5E, 0x00, 0x08, 0x00, 0x2B, 0x00, 0x4E, +/* 00010C90 */ 0x00, 0x8D, 0x00, 0x14, 0x00, 0x33, 0x00, 0x01, 0x00, 0x1D, 0x00, 0x1A, 0x00, 0x8F, 0x00, 0x00, +/* 00010CA0 */ 0x7E, 0x5D, 0x19, 0xC1, 0x03, 0x1A, 0x0B, 0x00, 0xFE, 0x93, 0x09, 0x04, 0xA3, 0x41, 0xC1, 0x00, +/* 00010CB0 */ 0xFE, 0x60, 0x03, 0x92, 0xFF, 0x27, 0xA8, 0x01, 0x00, 0xFF, 0x27, 0xA8, 0x01, 0x00, 0x01, 0xFE, +/* 00010CC0 */ 0x00, 0x90, 0x02, 0x02, 0xFF, 0x27, 0xA8, 0x01, 0x00, 0xFE, 0x75, 0x04, 0xFE, 0x75, 0x04, 0x02, +/* 00010CD0 */ 0xFE, 0xA8, 0x04, 0xFE, 0xCF, 0x03, 0x08, 0x06, 0x0B, 0x05, 0x2F, 0x2C, 0x02, 0x01, 0x03, 0x03, +/* 00010CE0 */ 0x03, 0x03, 0x03, 0x03, 0x03, 0x08, 0x09, 0x0A, 0x06, 0xFE, 0xD6, 0x03, 0x06, 0xFE, 0xA3, 0x03, +/* 00010CF0 */ 0x01, 0x00, 0x08, 0xBB, 0x4E, 0x07, 0x4E, 0x0B, 0x96, 0x02, 0x0B, 0x4E, 0x0B, 0x96, 0x03, 0x0B, +/* 00010D00 */ 0x2A, 0x0B, 0x06, 0x14, 0x03, 0x00, 0x0B, 0x02, 0x09, 0x08, 0x00, 0xD0, 0x00, 0x00, 0x00, 0x00, +/* 00010D10 */ 0x09, 0x9A, 0x00, 0x2A, 0x0B, 0x06, 0x14, 0x03, 0x00, 0x0B, 0x03, 0x09, 0x0C, 0x00, 0xD0, 0x0B, +/* 00010D20 */ 0x01, 0x01, 0x00, 0xA1, 0x00, 0x06, 0x0B, 0x45, 0x06, 0x0B, 0x8F, 0x02, 0x24, 0x0C, 0x00, 0x00, +/* 00010D30 */ 0x6D, 0x0B, 0x0C, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0C, 0x5A, 0x01, 0x06, 0x00, 0x00, 0xF4, +/* 00010D40 */ 0x02, 0x0B, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x06, 0x0B, 0x8F, 0x02, 0x24, 0x0C, +/* 00010D50 */ 0x00, 0x00, 0x6D, 0x0B, 0x0C, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0C, 0xA7, 0x0D, 0x06, 0x02, +/* 00010D60 */ 0x00, 0x00, 0x5A, 0x01, 0x0D, 0x01, 0x00, 0xF4, 0x02, 0x0B, 0x0B, 0x01, 0x00, 0x00, 0x00, 0x01, +/* 00010D70 */ 0x00, 0x45, 0x07, 0x0B, 0xD0, 0x0B, 0x00, 0x02, 0x00, 0x96, 0x02, 0x0B, 0x96, 0x03, 0x04, 0x8F, +/* 00010D80 */ 0x02, 0x25, 0x0B, 0x01, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x05, 0x5A, 0x01, 0x06, 0x02, 0x00, +/* 00010D90 */ 0x5A, 0x02, 0x07, 0x02, 0x00, 0xD6, 0x00, 0x0C, 0x5A, 0x03, 0x0C, 0x02, 0x00, 0xF0, 0x04, 0xFF, +/* 00010DA0 */ 0x0B, 0x02, 0x00, 0x93, 0x02, 0x00, 0x02, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, +/* 00010DB0 */ 0x21, 0x03, 0xFE, 0xA5, 0x04, 0xD1, 0xFF, 0x5A, 0xA8, 0x01, 0x00, 0x0B, 0x0C, 0x00, 0x00, 0x00, +/* 00010DC0 */ 0x0B, 0x00, 0x32, 0x00, 0x08, 0x00, 0x1E, 0x00, 0x0B, 0x00, 0x2F, 0x00, 0x0C, 0x00, 0x28, 0x00, +/* 00010DD0 */ 0x22, 0x00, 0x2E, 0x00, 0x28, 0x00, 0x70, 0x00, 0x08, 0x00, 0x17, 0x00, 0x03, 0x00, 0x14, 0x00, +/* 00010DE0 */ 0x24, 0x00, 0xC0, 0x02, 0x0A, 0x00, 0x11, 0x00, 0x00, 0xED, 0x0D, 0x01, 0x00, 0x7F, 0x5C, 0x08, +/* 00010DF0 */ 0xC1, 0x13, 0x10, 0x43, 0x00, 0xFE, 0xA3, 0x09, 0x2A, 0xA2, 0x41, 0xD1, 0x00, 0x93, 0xFF, 0xEC, +/* 00010E00 */ 0xA9, 0x01, 0x00, 0xFF, 0xEC, 0xA9, 0x01, 0x00, 0x41, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0xEC, +/* 00010E10 */ 0xA9, 0x01, 0x00, 0xFE, 0x92, 0x02, 0xFE, 0x92, 0x02, 0x07, 0x0E, 0x11, 0x06, 0x55, 0x53, 0x03, +/* 00010E20 */ 0x08, 0x09, 0x09, 0x09, 0x09, 0x09, 0x01, 0x10, 0x06, 0xFE, 0xA3, 0x03, 0x06, 0xFE, 0x94, 0x03, +/* 00010E30 */ 0x07, 0x05, 0xFE, 0xA9, 0x04, 0x08, 0x01, 0xFF, 0x01, 0x01, 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, +/* 00010E40 */ 0x2B, 0x03, 0x0B, 0x06, 0xFE, 0x2C, 0x03, 0x06, 0xFE, 0x2D, 0x03, 0xFE, 0x7D, 0x01, 0x4E, 0x0F, +/* 00010E50 */ 0x2A, 0x11, 0x0E, 0x15, 0x03, 0x00, 0x11, 0x02, 0x09, 0x08, 0x00, 0x2A, 0x11, 0x0E, 0x15, 0x08, +/* 00010E60 */ 0x00, 0x11, 0x03, 0x14, 0x03, 0x00, 0x0E, 0x04, 0x09, 0x1F, 0x00, 0x8F, 0x03, 0x03, 0x12, 0x00, +/* 00010E70 */ 0x00, 0x6D, 0x11, 0x12, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x12, 0x5A, 0x01, 0x05, 0x00, 0x00, +/* 00010E80 */ 0xF4, 0x02, 0xFF, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x03, 0x24, 0x12, 0x01, 0x00, +/* 00010E90 */ 0x6D, 0x11, 0x12, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x12, 0x5A, 0x01, 0x0E, 0x01, 0x00, 0xF4, +/* 00010EA0 */ 0x02, 0x11, 0x11, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, 0x0F, 0x11, 0x8F, 0x02, 0x0C, 0x11, +/* 00010EB0 */ 0x02, 0x00, 0x4A, 0x11, 0x07, 0x02, 0x00, 0x59, 0x00, 0x06, 0x5A, 0x01, 0x0F, 0x02, 0x00, 0xF0, +/* 00010EC0 */ 0x02, 0x11, 0x11, 0x02, 0x00, 0x0F, 0x36, 0x00, 0x11, 0x8F, 0x03, 0x03, 0x12, 0x00, 0x00, 0x6D, +/* 00010ED0 */ 0x11, 0x12, 0x02, 0x07, 0x02, 0x00, 0x59, 0x00, 0x12, 0x8F, 0x03, 0x0C, 0x13, 0x03, 0x00, 0x07, +/* 00010EE0 */ 0x02, 0x00, 0x59, 0x00, 0x06, 0x5A, 0x01, 0x0F, 0x04, 0x00, 0xF0, 0x02, 0x13, 0x13, 0x04, 0x00, +/* 00010EF0 */ 0x5A, 0x01, 0x13, 0x03, 0x00, 0xF4, 0x02, 0xFF, 0x11, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x8F, +/* 00010F00 */ 0x03, 0x03, 0x12, 0x00, 0x00, 0x6D, 0x11, 0x12, 0x03, 0x07, 0x02, 0x00, 0x59, 0x00, 0x12, 0x5A, +/* 00010F10 */ 0x01, 0x0F, 0x05, 0x00, 0xF4, 0x02, 0x11, 0x11, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x45, 0x0F, +/* 00010F20 */ 0x11, 0xA8, 0x11, 0x15, 0x03, 0x00, 0x0F, 0x11, 0x09, 0x9C, 0x00, 0x8F, 0x03, 0x06, 0x11, 0x04, +/* 00010F30 */ 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x06, 0x8F, 0x03, 0x18, 0x12, 0x05, 0x00, 0x5A, 0x01, 0x12, +/* 00010F40 */ 0x06, 0x00, 0x8F, 0x01, 0x02, 0x12, 0x06, 0x00, 0x4A, 0x12, 0x5A, 0x02, 0x12, 0x06, 0x00, 0x5A, +/* 00010F50 */ 0x03, 0x0F, 0x06, 0x00, 0xF0, 0x04, 0x11, 0x11, 0x06, 0x00, 0x14, 0x03, 0x00, 0x11, 0x07, 0x09, +/* 00010F60 */ 0x65, 0x00, 0x8F, 0x03, 0x36, 0x12, 0x07, 0x00, 0x4A, 0x12, 0x6D, 0x11, 0x12, 0x04, 0x07, 0x04, +/* 00010F70 */ 0x00, 0x59, 0x00, 0x12, 0x8F, 0x01, 0x02, 0x13, 0x06, 0x00, 0x4A, 0x13, 0x5A, 0x01, 0x13, 0x07, +/* 00010F80 */ 0x00, 0x8F, 0x01, 0x03, 0x14, 0x08, 0x00, 0x4A, 0x14, 0x43, 0x13, 0x14, 0x2D, 0x14, 0x13, 0x08, +/* 00010F90 */ 0x01, 0x43, 0x01, 0x01, 0x03, 0x14, 0x5A, 0x02, 0x13, 0x07, 0x00, 0xCE, 0x00, 0x00, 0x00, 0x00, +/* 00010FA0 */ 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x7B, 0x0F, 0x13, 0x05, 0x7B, 0x0B, 0x13, 0x06, +/* 00010FB0 */ 0x7B, 0x0B, 0x13, 0x07, 0x7B, 0x0B, 0x13, 0x08, 0x5A, 0x03, 0x13, 0x07, 0x00, 0xF4, 0x04, 0xFF, +/* 00010FC0 */ 0x11, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x01, 0x18, 0x00, 0x00, 0x00, +/* 00010FD0 */ 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, +/* 00010FE0 */ 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0xFE, 0xAE, 0x02, 0xFE, 0x22, 0x03, +/* 00010FF0 */ 0xFE, 0xAF, 0x02, 0xFE, 0xEE, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, +/* 00011000 */ 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFF, 0x0C, 0xAA, 0x01, 0x00, 0x09, 0x02, 0x00, 0x00, 0x00, 0x1B, +/* 00011010 */ 0x00, 0x65, 0x00, 0x1F, 0x00, 0x47, 0x00, 0x22, 0x00, 0x32, 0x00, 0x1D, 0x00, 0x35, 0x00, 0x36, +/* 00011020 */ 0x00, 0x4B, 0x00, 0x22, 0x00, 0x37, 0x00, 0x41, 0x00, 0x65, 0x00, 0x67, 0x00, 0x77, 0x00, 0x00, +/* 00011030 */ 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x88, 0x09, 0x04, 0xA3, 0x41, 0xC1, 0x00, +/* 00011040 */ 0xFE, 0x5E, 0x03, 0x91, 0xFF, 0xB2, 0xA6, 0x01, 0x00, 0xFF, 0xB2, 0xA6, 0x01, 0x00, 0x01, 0xFE, +/* 00011050 */ 0x00, 0x90, 0x02, 0x02, 0xFF, 0xB2, 0xA6, 0x01, 0x00, 0xF8, 0xF8, 0x05, 0x04, 0x06, 0x04, 0x1D, +/* 00011060 */ 0x1C, 0x02, 0x03, 0x04, 0x02, 0x02, 0x02, 0x02, 0x05, 0x08, 0x07, 0x79, 0x8F, 0x02, 0x24, 0x07, +/* 00011070 */ 0x00, 0x00, 0x6D, 0x06, 0x07, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x07, 0x5A, 0x01, 0x04, 0x00, +/* 00011080 */ 0x00, 0xF4, 0x02, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x04, 0x06, 0x8F, 0x01, +/* 00011090 */ 0x0E, 0x06, 0x01, 0x00, 0x4A, 0x06, 0x0F, 0x14, 0x00, 0x06, 0x8F, 0x01, 0x04, 0x06, 0x02, 0x00, +/* 000110A0 */ 0x4A, 0x06, 0x07, 0x01, 0x00, 0x59, 0x00, 0x02, 0xF0, 0x01, 0xFF, 0x06, 0x01, 0x00, 0x8F, 0x02, +/* 000110B0 */ 0x03, 0x07, 0x03, 0x00, 0x6D, 0x06, 0x07, 0x01, 0x07, 0x03, 0x00, 0x59, 0x00, 0x07, 0x5A, 0x01, +/* 000110C0 */ 0x04, 0x02, 0x00, 0x8F, 0x01, 0x0E, 0x08, 0x01, 0x00, 0x4A, 0x08, 0x5A, 0x02, 0x08, 0x02, 0x00, +/* 000110D0 */ 0xF4, 0x03, 0x06, 0x06, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x42, 0x00, 0x06, 0x03, 0x09, 0x02, +/* 000110E0 */ 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x22, 0x03, 0xFE, 0xC0, 0x02, 0xFF, 0xE4, 0xA6, 0x01, 0x00, +/* 000110F0 */ 0x05, 0x00, 0x00, 0x00, 0x00, 0x22, 0x00, 0x29, 0x00, 0x0C, 0x00, 0x25, 0x00, 0x14, 0x00, 0x2F, +/* 00011100 */ 0x00, 0x35, 0x00, 0x48, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0x01, 0x00, 0x10, 0x03, 0x00, 0xFE, 0x4D, +/* 00011110 */ 0x09, 0x04, 0xA1, 0x41, 0xC1, 0x00, 0xFE, 0x66, 0x03, 0x90, 0xFF, 0xAE, 0x93, 0x01, 0x00, 0xFF, +/* 00011120 */ 0xAE, 0x93, 0x01, 0x00, 0x41, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFF, 0xAE, 0x93, 0x01, 0x00, 0xFE, +/* 00011130 */ 0xFE, 0x12, 0xFE, 0xFE, 0x12, 0x17, 0x25, 0x38, 0x04, 0xAC, 0x87, 0x02, 0x03, 0x01, 0x37, 0x05, +/* 00011140 */ 0xFE, 0xAD, 0x03, 0x05, 0xFE, 0xAE, 0x03, 0x05, 0xFE, 0xAF, 0x03, 0x06, 0xFE, 0xB0, 0x03, 0x06, +/* 00011150 */ 0xFE, 0xB1, 0x03, 0x05, 0xFE, 0xB2, 0x03, 0x05, 0xFE, 0xB3, 0x03, 0x05, 0xFE, 0xB4, 0x03, 0x05, +/* 00011160 */ 0xFE, 0xB5, 0x03, 0x05, 0xFE, 0xB6, 0x03, 0x05, 0xFE, 0xB7, 0x03, 0x05, 0xFE, 0xB8, 0x03, 0x05, +/* 00011170 */ 0xFE, 0xB9, 0x03, 0x05, 0xFE, 0xBA, 0x03, 0x05, 0xFE, 0xBB, 0x03, 0x05, 0xFE, 0xBC, 0x03, 0x06, +/* 00011180 */ 0xFE, 0x47, 0x03, 0x05, 0xFE, 0xBD, 0x03, 0x05, 0xFE, 0xBE, 0x03, 0x05, 0xFE, 0xBF, 0x03, 0x05, +/* 00011190 */ 0xFE, 0xC0, 0x03, 0x05, 0xFE, 0xC1, 0x03, 0x05, 0xFE, 0xC2, 0x03, 0x05, 0xFE, 0xC3, 0x03, 0x05, +/* 000111A0 */ 0xFE, 0xC4, 0x03, 0x05, 0xFE, 0xC5, 0x03, 0x05, 0xFE, 0xC6, 0x03, 0x05, 0xFE, 0xC7, 0x03, 0x05, +/* 000111B0 */ 0xFE, 0xC8, 0x03, 0x05, 0xFE, 0xA7, 0x04, 0x05, 0xFE, 0xC9, 0x03, 0x05, 0xFE, 0xCA, 0x03, 0x05, +/* 000111C0 */ 0xFE, 0xCB, 0x03, 0x05, 0xFE, 0xCC, 0x03, 0x06, 0xFE, 0xCF, 0x03, 0xFE, 0x94, 0x02, 0x4E, 0x25, +/* 000111D0 */ 0x4E, 0x26, 0x4E, 0x27, 0x4E, 0x28, 0x4E, 0x29, 0x4E, 0x2A, 0x4E, 0x2B, 0x4E, 0x2C, 0x4E, 0x2D, +/* 000111E0 */ 0x4E, 0x2E, 0x4E, 0x2F, 0x4E, 0x30, 0x4E, 0x31, 0x4E, 0x32, 0x4E, 0x33, 0x4E, 0x34, 0x4E, 0x35, +/* 000111F0 */ 0x4E, 0x36, 0x45, 0x25, 0x02, 0x45, 0x26, 0x03, 0x45, 0x38, 0x04, 0x01, 0x09, 0x01, 0x39, 0x25, +/* 00011200 */ 0x2D, 0x38, 0x38, 0x39, 0x2D, 0x38, 0x38, 0x05, 0x01, 0x09, 0x01, 0x39, 0x26, 0x2D, 0x38, 0x38, +/* 00011210 */ 0x39, 0x2D, 0x38, 0x38, 0x06, 0x45, 0x27, 0x38, 0x45, 0x28, 0x07, 0x2D, 0x38, 0x08, 0x09, 0x45, +/* 00011220 */ 0x29, 0x38, 0x45, 0x38, 0x0A, 0x01, 0x09, 0x01, 0x39, 0x28, 0x2D, 0x38, 0x38, 0x39, 0x2D, 0x38, +/* 00011230 */ 0x38, 0x05, 0x01, 0x09, 0x01, 0x39, 0x29, 0x2D, 0x38, 0x38, 0x39, 0x2D, 0x38, 0x38, 0x0B, 0x45, +/* 00011240 */ 0x2A, 0x38, 0x45, 0x38, 0x0C, 0x01, 0x09, 0x01, 0x39, 0x27, 0x2D, 0x38, 0x38, 0x39, 0x2D, 0x38, +/* 00011250 */ 0x38, 0x0D, 0x45, 0x2B, 0x38, 0x45, 0x38, 0x0A, 0x01, 0x09, 0x01, 0x39, 0x26, 0x2D, 0x38, 0x38, +/* 00011260 */ 0x39, 0x2D, 0x38, 0x38, 0x0E, 0x45, 0x2C, 0x38, 0x45, 0x38, 0x0A, 0x01, 0x09, 0x01, 0x39, 0x2C, +/* 00011270 */ 0x2D, 0x38, 0x38, 0x39, 0x2D, 0x38, 0x38, 0x0F, 0x01, 0x09, 0x01, 0x39, 0x27, 0x2D, 0x38, 0x38, +/* 00011280 */ 0x39, 0x2D, 0x38, 0x38, 0x10, 0x45, 0x2D, 0x38, 0x45, 0x38, 0x0A, 0x01, 0x09, 0x01, 0x39, 0x27, +/* 00011290 */ 0x2D, 0x38, 0x38, 0x39, 0x2D, 0x38, 0x38, 0x11, 0x01, 0x09, 0x01, 0x39, 0x26, 0x2D, 0x38, 0x38, +/* 000112A0 */ 0x39, 0x01, 0x09, 0x01, 0x39, 0x27, 0x2D, 0x38, 0x38, 0x39, 0x2D, 0x38, 0x38, 0x13, 0x45, 0x2E, +/* 000112B0 */ 0x38, 0x45, 0x38, 0x0A, 0x01, 0x09, 0x01, 0x39, 0x25, 0x2D, 0x38, 0x38, 0x39, 0x2D, 0x38, 0x38, +/* 000112C0 */ 0x14, 0x01, 0x09, 0x01, 0x39, 0x26, 0x2D, 0x38, 0x38, 0x39, 0x2D, 0x38, 0x38, 0x13, 0x45, 0x2F, +/* 000112D0 */ 0x38, 0x45, 0x38, 0x0A, 0x01, 0x09, 0x01, 0x39, 0x25, 0x2D, 0x38, 0x38, 0x39, 0x2D, 0x38, 0x38, +/* 000112E0 */ 0x15, 0x45, 0x30, 0x38, 0x45, 0x38, 0x0A, 0x01, 0x09, 0x01, 0x39, 0x25, 0x2D, 0x38, 0x38, 0x39, +/* 000112F0 */ 0x2D, 0x38, 0x38, 0x16, 0x01, 0x09, 0x01, 0x39, 0x25, 0x2D, 0x38, 0x38, 0x39, 0x2D, 0x38, 0x38, +/* 00011300 */ 0x17, 0x45, 0x31, 0x38, 0x01, 0x09, 0x01, 0x39, 0x25, 0x2D, 0x39, 0x39, 0x18, 0xFD, 0x38, 0x0A, +/* 00011310 */ 0x39, 0x05, 0x45, 0x39, 0x19, 0x01, 0x09, 0x01, 0x3A, 0x31, 0x2D, 0x39, 0x39, 0x3A, 0x2D, 0x39, +/* 00011320 */ 0x39, 0x1A, 0x45, 0x3A, 0x05, 0x01, 0x09, 0x01, 0x3B, 0x25, 0x2D, 0x3A, 0x3A, 0x3B, 0x2D, 0x3A, +/* 00011330 */ 0x3A, 0x1B, 0xFF, 0x38, 0x39, 0x3A, 0x02, 0xFE, 0x38, 0x0B, 0x04, 0x45, 0x32, 0x38, 0x45, 0x38, +/* 00011340 */ 0x1C, 0x01, 0x09, 0x01, 0x39, 0x32, 0x2D, 0x38, 0x38, 0x39, 0x2D, 0x38, 0x38, 0x0B, 0x45, 0x39, +/* 00011350 */ 0x1D, 0x01, 0x09, 0x01, 0x3A, 0x30, 0x2D, 0x39, 0x39, 0x3A, 0x2D, 0x39, 0x39, 0x1E, 0x2D, 0x38, +/* 00011360 */ 0x38, 0x39, 0x45, 0x39, 0x1D, 0x01, 0x09, 0x01, 0x3A, 0x2F, 0x2D, 0x39, 0x39, 0x3A, 0x2D, 0x39, +/* 00011370 */ 0x39, 0x1E, 0x2D, 0x38, 0x38, 0x39, 0x45, 0x33, 0x38, 0x45, 0x38, 0x19, 0x01, 0x09, 0x01, 0x39, +/* 00011380 */ 0x2E, 0x2D, 0x38, 0x38, 0x39, 0x2D, 0x38, 0x38, 0x1F, 0x45, 0x39, 0x20, 0x01, 0x09, 0x01, 0x3A, +/* 00011390 */ 0x2D, 0x2D, 0x39, 0x39, 0x3A, 0x2D, 0x39, 0x39, 0x21, 0x2D, 0x38, 0x38, 0x39, 0x45, 0x39, 0x19, +/* 000113A0 */ 0x01, 0x09, 0x01, 0x3A, 0x2B, 0x2D, 0x39, 0x39, 0x3A, 0x2D, 0x39, 0x39, 0x22, 0x2D, 0x38, 0x38, +/* 000113B0 */ 0x39, 0x45, 0x34, 0x38, 0x45, 0x38, 0x23, 0x01, 0x09, 0x01, 0x39, 0x33, 0x2D, 0x38, 0x38, 0x39, +/* 000113C0 */ 0x2D, 0x38, 0x38, 0x23, 0x01, 0x09, 0x01, 0x39, 0x34, 0x2D, 0x38, 0x38, 0x39, 0x2D, 0x38, 0x38, +/* 000113D0 */ 0x23, 0x45, 0x35, 0x38, 0x45, 0x38, 0x0A, 0x01, 0x09, 0x01, 0x39, 0x35, 0x2D, 0x38, 0x38, 0x39, +/* 000113E0 */ 0x2D, 0x38, 0x38, 0x05, 0x01, 0x09, 0x01, 0x39, 0x2B, 0x2D, 0x38, 0x38, 0x39, 0x2D, 0x38, 0x38, +/* 000113F0 */ 0x05, 0x01, 0x09, 0x01, 0x39, 0x2A, 0x2D, 0x38, 0x38, 0x39, 0x2D, 0x38, 0x38, 0x0B, 0x45, 0x36, +/* 00011400 */ 0x38, 0x8F, 0x02, 0x0A, 0x38, 0x00, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x01, 0x33, 0x00, 0x00, 0x5A, +/* 00011410 */ 0x02, 0x24, 0x00, 0x00, 0xC5, 0x03, 0x38, 0x38, 0x00, 0x00, 0x01, 0x43, 0x01, 0x01, 0x0F, 0x38, +/* 00011420 */ 0x8F, 0x02, 0x0A, 0x38, 0x00, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x01, 0x34, 0x01, 0x00, 0x5A, 0x02, +/* 00011430 */ 0x24, 0x01, 0x00, 0xC5, 0x03, 0x38, 0x38, 0x01, 0x00, 0x01, 0x43, 0x01, 0x01, 0x10, 0x38, 0x8F, +/* 00011440 */ 0x02, 0x0A, 0x38, 0x00, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x01, 0x36, 0x02, 0x00, 0x5A, 0x02, 0x24, +/* 00011450 */ 0x02, 0x00, 0xC5, 0x03, 0x38, 0x38, 0x02, 0x00, 0x01, 0x43, 0x01, 0x01, 0x11, 0x38, 0xA8, 0x00, +/* 00011460 */ 0x24, 0x00, 0xFF, 0x8E, 0x98, 0x01, 0x00, 0x16, 0x24, 0x00, 0x00, 0x00, 0x03, 0x00, 0x1F, 0x00, +/* 00011470 */ 0x03, 0x00, 0x1F, 0x00, 0x20, 0x00, 0x33, 0x00, 0x03, 0x00, 0x77, 0x00, 0x07, 0x00, 0xC0, 0x00, +/* 00011480 */ 0x20, 0x00, 0x44, 0x00, 0x13, 0x00, 0x7D, 0x00, 0x13, 0x00, 0x94, 0x00, 0x20, 0x00, 0x83, 0x00, +/* 00011490 */ 0x29, 0x00, 0x83, 0x00, 0x20, 0x00, 0x74, 0x00, 0x13, 0x00, 0x6A, 0x00, 0x20, 0x00, 0x7A, 0x00, +/* 000114A0 */ 0x3A, 0x00, 0x00, 0x04, 0x3B, 0x00, 0x4C, 0x01, 0x3B, 0x00, 0x5A, 0x01, 0x20, 0x00, 0x4B, 0x00, +/* 000114B0 */ 0x2D, 0x00, 0x6E, 0x00, 0x1F, 0x00, 0x66, 0x00, 0x1F, 0x00, 0x8B, 0x00, 0x21, 0x00, 0x72, 0x00, +/* 000114C0 */ 0x00, 0x7F, 0x4C, 0x00, 0x00, 0x20, 0x10, 0x03, 0x00, 0xFE, 0x46, 0x09, 0x04, 0xA1, 0x41, 0xC1, +/* 000114D0 */ 0x00, 0xFE, 0x51, 0x03, 0x8F, 0xFF, 0x71, 0x92, 0x01, 0x00, 0xFF, 0x71, 0x92, 0x01, 0x00, 0x41, +/* 000114E0 */ 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFF, 0x71, 0x92, 0x01, 0x00, 0x55, 0x55, 0x02, 0x02, 0x03, 0x05, +/* 000114F0 */ 0x05, 0x02, 0x01, 0x02, 0x0D, 0xE2, 0x03, 0x00, 0x01, 0x43, 0x01, 0x01, 0x0E, 0x03, 0xA8, 0x00, +/* 00011500 */ 0x24, 0x00, 0x0A, 0xFE, 0xAB, 0x03, 0x01, 0xFF, 0x9F, 0x92, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, +/* 00011510 */ 0x00, 0x0B, 0x00, 0x26, 0x00, 0x00, 0x7F, 0x5C, 0x0A, 0xC1, 0x43, 0x50, 0x03, 0x00, 0xFE, 0x35, +/* 00011520 */ 0x09, 0x04, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x5B, 0x03, 0x8E, 0xFF, 0x0C, 0x90, 0x01, 0x00, 0xFF, +/* 00011530 */ 0x0C, 0x90, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x06, 0x06, 0xFF, 0x0C, 0x90, 0x01, 0x00, 0xFE, +/* 00011540 */ 0x45, 0x02, 0xFE, 0x45, 0x02, 0x0C, 0x07, 0x0F, 0x08, 0x3A, 0x37, 0x02, 0x01, 0x06, 0x05, 0x03, +/* 00011550 */ 0x03, 0x03, 0x03, 0x01, 0x0E, 0x0F, 0x06, 0xFE, 0xD6, 0x03, 0x08, 0x06, 0xFE, 0xA8, 0x03, 0x05, +/* 00011560 */ 0xFE, 0xA9, 0x03, 0x06, 0xFE, 0xAA, 0x03, 0xF8, 0x4E, 0x0C, 0x4E, 0x0D, 0x98, 0x10, 0x07, 0x08, +/* 00011570 */ 0x00, 0x00, 0x45, 0x0C, 0x10, 0x2A, 0x10, 0x0C, 0x15, 0x03, 0x00, 0x10, 0x02, 0x09, 0xD6, 0x00, +/* 00011580 */ 0x8F, 0x02, 0x24, 0x11, 0x00, 0x00, 0x6D, 0x10, 0x11, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x11, +/* 00011590 */ 0x5A, 0x01, 0x0C, 0x00, 0x00, 0xF4, 0x02, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, +/* 000115A0 */ 0x0D, 0x10, 0x8F, 0x02, 0x21, 0x10, 0x01, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x03, 0x5A, 0x01, +/* 000115B0 */ 0x0D, 0x01, 0x00, 0xF0, 0x02, 0x10, 0x10, 0x01, 0x00, 0x0F, 0x0D, 0x00, 0x10, 0x12, 0x08, 0x00, +/* 000115C0 */ 0x0D, 0x09, 0x11, 0x03, 0x00, 0x0D, 0x0A, 0x09, 0x67, 0x00, 0x8F, 0x02, 0x03, 0x11, 0x02, 0x00, +/* 000115D0 */ 0x6D, 0x10, 0x11, 0x01, 0x07, 0x04, 0x00, 0x59, 0x00, 0x11, 0x8F, 0x02, 0x0C, 0x12, 0x03, 0x00, +/* 000115E0 */ 0x07, 0x02, 0x00, 0x59, 0x00, 0x03, 0x5A, 0x01, 0x0C, 0x03, 0x00, 0xF0, 0x02, 0x12, 0x12, 0x03, +/* 000115F0 */ 0x00, 0x5A, 0x01, 0x12, 0x02, 0x00, 0x8F, 0x02, 0x0C, 0x12, 0x03, 0x00, 0x07, 0x02, 0x00, 0x59, +/* 00011600 */ 0x00, 0x03, 0x5A, 0x01, 0x08, 0x04, 0x00, 0xF0, 0x02, 0x12, 0x12, 0x04, 0x00, 0x5A, 0x02, 0x12, +/* 00011610 */ 0x02, 0x00, 0x2D, 0x12, 0x04, 0x09, 0x2D, 0x12, 0x12, 0x05, 0x2D, 0x12, 0x12, 0x0A, 0x2D, 0x12, +/* 00011620 */ 0x12, 0x06, 0x5A, 0x03, 0x12, 0x02, 0x00, 0xF4, 0x04, 0xFF, 0x10, 0x01, 0x00, 0x00, 0x00, 0x02, +/* 00011630 */ 0x00, 0x8F, 0x02, 0x10, 0x11, 0x04, 0x00, 0x6D, 0x10, 0x11, 0x02, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 00011640 */ 0x11, 0x5A, 0x01, 0x0D, 0x05, 0x00, 0xF4, 0x02, 0x00, 0x10, 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, +/* 00011650 */ 0x09, 0x0B, 0x00, 0x09, 0x06, 0x00, 0x45, 0x00, 0x0B, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, +/* 00011660 */ 0xFE, 0x23, 0x03, 0xFE, 0xAC, 0x02, 0x26, 0xFF, 0x5E, 0x90, 0x01, 0x00, 0x08, 0x04, 0x00, 0x00, +/* 00011670 */ 0x00, 0x09, 0x00, 0x2D, 0x00, 0x0B, 0x00, 0x33, 0x00, 0x22, 0x00, 0x41, 0x00, 0x28, 0x00, 0x65, +/* 00011680 */ 0x00, 0x67, 0x00, 0x8D, 0x00, 0x25, 0x00, 0x40, 0x00, 0x08, 0x00, 0x1F, 0x00, 0x00, 0x7F, 0x5C, +/* 00011690 */ 0x0A, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x1B, 0x09, 0x04, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x50, +/* 000116A0 */ 0x03, 0x8D, 0xFF, 0xEF, 0x8C, 0x01, 0x00, 0xFF, 0xEF, 0x8C, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, +/* 000116B0 */ 0x06, 0x06, 0xFF, 0xEF, 0x8C, 0x01, 0x00, 0xFE, 0x17, 0x03, 0xFE, 0x17, 0x03, 0x0B, 0x0A, 0x11, +/* 000116C0 */ 0x0A, 0x51, 0x4B, 0x02, 0x01, 0x08, 0x06, 0x04, 0x04, 0x04, 0x04, 0x10, 0x06, 0xFE, 0xA2, 0x03, +/* 000116D0 */ 0x06, 0xFE, 0xA3, 0x03, 0x06, 0xFE, 0xA4, 0x03, 0x08, 0x01, 0xFF, 0x05, 0xFE, 0xA5, 0x03, 0x05, +/* 000116E0 */ 0xFE, 0xA7, 0x03, 0x05, 0xFE, 0xA6, 0x03, 0xFE, 0x62, 0x01, 0x4E, 0x0F, 0x98, 0x11, 0x0A, 0x0B, +/* 000116F0 */ 0x00, 0x00, 0x45, 0x0F, 0x11, 0xA8, 0x11, 0x15, 0x03, 0x00, 0x0F, 0x11, 0x09, 0x43, 0x01, 0x0C, +/* 00011700 */ 0x03, 0x00, 0x0C, 0x02, 0x09, 0x22, 0x00, 0x8F, 0x02, 0x24, 0x12, 0x00, 0x00, 0x6D, 0x11, 0x12, +/* 00011710 */ 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x12, 0x5A, 0x01, 0x0F, 0x00, 0x00, 0xF4, 0x02, 0x11, 0x11, +/* 00011720 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x0F, 0x11, 0x0C, 0x03, 0x00, 0x0C, 0x03, 0x09, 0x22, +/* 00011730 */ 0x00, 0x8F, 0x02, 0x24, 0x12, 0x00, 0x00, 0x6D, 0x11, 0x12, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 00011740 */ 0x12, 0x5A, 0x01, 0x0F, 0x01, 0x00, 0xF4, 0x02, 0x11, 0x11, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, +/* 00011750 */ 0x45, 0x0F, 0x11, 0x0C, 0x03, 0x00, 0x0C, 0x04, 0x09, 0x22, 0x00, 0x8F, 0x02, 0x24, 0x12, 0x00, +/* 00011760 */ 0x00, 0x6D, 0x11, 0x12, 0x02, 0x07, 0x02, 0x00, 0x59, 0x00, 0x12, 0x5A, 0x01, 0x0F, 0x02, 0x00, +/* 00011770 */ 0xF4, 0x02, 0x11, 0x11, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x45, 0x0F, 0x11, 0xA8, 0x11, 0x15, +/* 00011780 */ 0x03, 0x00, 0x0D, 0x11, 0x09, 0xB5, 0x00, 0x8F, 0x02, 0x06, 0x11, 0x01, 0x00, 0x07, 0x04, 0x00, +/* 00011790 */ 0x59, 0x00, 0x05, 0x8F, 0x02, 0x18, 0x12, 0x02, 0x00, 0x5A, 0x01, 0x12, 0x03, 0x00, 0x5A, 0x02, +/* 000117A0 */ 0x0D, 0x03, 0x00, 0x5A, 0x03, 0x0F, 0x03, 0x00, 0xF0, 0x04, 0x11, 0x11, 0x03, 0x00, 0x0C, 0x03, +/* 000117B0 */ 0x00, 0x11, 0x06, 0x09, 0x86, 0x00, 0x8F, 0x02, 0x03, 0x12, 0x03, 0x00, 0x6D, 0x11, 0x12, 0x03, +/* 000117C0 */ 0x07, 0x04, 0x00, 0x59, 0x00, 0x12, 0x8F, 0x02, 0x0C, 0x13, 0x04, 0x00, 0x07, 0x02, 0x00, 0x59, +/* 000117D0 */ 0x00, 0x05, 0x5A, 0x01, 0x0F, 0x05, 0x00, 0xF0, 0x02, 0x13, 0x13, 0x05, 0x00, 0x5A, 0x01, 0x13, +/* 000117E0 */ 0x04, 0x00, 0x8F, 0x02, 0x0C, 0x13, 0x04, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x05, 0x5A, 0x01, +/* 000117F0 */ 0x0B, 0x06, 0x00, 0xF0, 0x02, 0x13, 0x13, 0x06, 0x00, 0x5A, 0x02, 0x13, 0x04, 0x00, 0x8F, 0x02, +/* 00011800 */ 0x06, 0x13, 0x01, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x05, 0x8F, 0x02, 0x19, 0x14, 0x05, 0x00, +/* 00011810 */ 0x5A, 0x01, 0x14, 0x07, 0x00, 0x5A, 0x02, 0x0D, 0x07, 0x00, 0x5A, 0x03, 0x08, 0x07, 0x00, 0xF0, +/* 00011820 */ 0x04, 0x13, 0x13, 0x07, 0x00, 0x2D, 0x13, 0x07, 0x13, 0x2D, 0x13, 0x13, 0x09, 0x5A, 0x03, 0x13, +/* 00011830 */ 0x04, 0x00, 0xF4, 0x04, 0xFF, 0x11, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x45, 0x00, 0x0F, 0x09, +/* 00011840 */ 0x08, 0x00, 0x45, 0x00, 0x0E, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x24, 0x03, 0xFE, +/* 00011850 */ 0x22, 0x03, 0xFE, 0x23, 0x03, 0xFE, 0xAC, 0x02, 0xFF, 0x37, 0x8D, 0x01, 0x00, 0x0D, 0x02, 0x00, +/* 00011860 */ 0x00, 0x00, 0x09, 0x00, 0x28, 0x00, 0x0A, 0x00, 0x27, 0x00, 0x08, 0x00, 0x29, 0x00, 0x22, 0x00, +/* 00011870 */ 0x45, 0x00, 0x08, 0x00, 0x28, 0x00, 0x22, 0x00, 0x3D, 0x00, 0x08, 0x00, 0x28, 0x00, 0x22, 0x00, +/* 00011880 */ 0x3D, 0x00, 0x39, 0x00, 0x6B, 0x00, 0x86, 0x00, 0xA6, 0x00, 0x06, 0x00, 0x21, 0x00, 0x08, 0x00, +/* 00011890 */ 0x15, 0x00, 0x00, 0x7E, 0x5C, 0x08, 0xC1, 0x13, 0x10, 0x4B, 0x00, 0xFE, 0xF0, 0x08, 0x14, 0xA0, +/* 000118A0 */ 0x41, 0xD1, 0x00, 0x86, 0xFF, 0xDE, 0x87, 0x01, 0x00, 0xFF, 0xDE, 0x87, 0x01, 0x00, 0x06, 0xFE, +/* 000118B0 */ 0x00, 0x90, 0x01, 0x01, 0xFF, 0xDE, 0x87, 0x01, 0x00, 0xFE, 0xE0, 0x04, 0xFE, 0xE0, 0x04, 0x04, +/* 000118C0 */ 0x0A, 0x0B, 0x04, 0x17, 0x17, 0x02, 0x01, 0x01, 0x06, 0x06, 0x06, 0x06, 0x01, 0x0A, 0x08, 0x06, +/* 000118D0 */ 0xFE, 0x21, 0x03, 0x06, 0xFE, 0x22, 0x03, 0x06, 0xFE, 0x23, 0x03, 0x06, 0xFE, 0x24, 0x03, 0x06, +/* 000118E0 */ 0xFE, 0xA5, 0x04, 0x06, 0xFE, 0xA6, 0x04, 0x07, 0x60, 0x8F, 0x02, 0x04, 0x0B, 0x00, 0x00, 0x07, +/* 000118F0 */ 0x03, 0x00, 0x59, 0x00, 0x02, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, +/* 00011900 */ 0x00, 0x00, 0xD9, 0x00, 0x0D, 0x0C, 0x7B, 0x0D, 0x0C, 0x00, 0xD9, 0x01, 0x0D, 0x0C, 0x7B, 0x0D, +/* 00011910 */ 0x0C, 0x01, 0xD9, 0x02, 0x0D, 0x0C, 0x7B, 0x0D, 0x0C, 0x02, 0xD9, 0x03, 0x0D, 0x0C, 0x7B, 0x0D, +/* 00011920 */ 0x0C, 0x03, 0xD9, 0x04, 0x0D, 0x0C, 0x7B, 0x0D, 0x0C, 0x04, 0xD9, 0x05, 0x0D, 0x0C, 0x7B, 0x0D, +/* 00011930 */ 0x0C, 0x05, 0x5A, 0x01, 0x0C, 0x00, 0x00, 0x5A, 0x02, 0x09, 0x00, 0x00, 0xF0, 0x03, 0x00, 0x0B, +/* 00011940 */ 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00011950 */ 0x03, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x03, 0x00, 0x00, 0x22, 0x03, 0x00, 0x00, +/* 00011960 */ 0x23, 0x03, 0x00, 0x00, 0x24, 0x03, 0x00, 0x00, 0xA5, 0x04, 0x00, 0x00, 0xA6, 0x04, 0x00, 0x00, +/* 00011970 */ 0xFE, 0x21, 0x03, 0xFE, 0x22, 0x03, 0xFE, 0x23, 0x03, 0xFE, 0x24, 0x03, 0xFE, 0xA5, 0x04, 0xFE, +/* 00011980 */ 0xA6, 0x04, 0xFF, 0xF4, 0x87, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x5E, 0x00, 0xC9, 0x04, +/* 00011990 */ 0x00, 0xF5, 0x1C, 0x01, 0x00, 0x77, 0x1C, 0x01, 0x00, 0xF9, 0x1B, 0x01, 0x00, 0x7B, 0x1B, 0x01, +/* 000119A0 */ 0x00, 0x67, 0x1A, 0x01, 0x00, 0xA9, 0x19, 0x01, 0x00, 0x7F, 0x7C, 0x08, 0x03, 0x00, 0x10, 0x17, +/* 000119B0 */ 0x00, 0xFE, 0x0E, 0x09, 0x19, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xA6, 0x04, 0x8C, 0xFF, 0x00, 0x00, +/* 000119C0 */ 0x00, 0x02, 0xFF, 0x72, 0x8B, 0x01, 0x00, 0xFF, 0x72, 0x8B, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, +/* 000119D0 */ 0x03, 0x03, 0xFF, 0x72, 0x8B, 0x01, 0x00, 0xFE, 0x35, 0x01, 0xFE, 0x35, 0x01, 0x05, 0x04, 0x07, +/* 000119E0 */ 0x05, 0x1A, 0x18, 0x17, 0x02, 0x02, 0x03, 0x01, 0x06, 0x00, 0x5A, 0x08, 0x0B, 0x5E, 0xED, 0x00, +/* 000119F0 */ 0xEE, 0x00, 0x0E, 0x50, 0x00, 0x04, 0x8F, 0x02, 0x06, 0x07, 0x00, 0x00, 0x07, 0x04, 0x00, 0x59, +/* 00011A00 */ 0x00, 0x02, 0x8F, 0x02, 0x14, 0x08, 0x01, 0x00, 0x5A, 0x01, 0x08, 0x00, 0x00, 0x5A, 0x02, 0x04, +/* 00011A10 */ 0x00, 0x00, 0x5A, 0x03, 0x05, 0x00, 0x00, 0xF0, 0x04, 0x07, 0x07, 0x00, 0x00, 0x0E, 0x08, 0x00, +/* 00011A20 */ 0x07, 0x45, 0x00, 0x03, 0xEF, 0x00, 0x09, 0x21, 0x00, 0x8F, 0x02, 0x11, 0x07, 0x02, 0x00, 0x07, +/* 00011A30 */ 0x02, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x04, 0x01, 0x00, 0xF0, 0x02, 0x07, 0x07, 0x01, 0x00, +/* 00011A40 */ 0x45, 0x04, 0x07, 0x09, 0xAA, 0xFF, 0xEF, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFF, 0xC7, 0x8B, 0x01, +/* 00011A50 */ 0x00, 0x05, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x19, 0x00, 0x2B, 0x00, 0x54, 0x00, 0x08, 0x00, +/* 00011A60 */ 0x37, 0x00, 0x21, 0x00, 0x3B, 0x00, 0x00, 0x7F, 0x5C, 0x28, 0xC1, 0x03, 0x10, 0x07, 0x00, 0xFE, +/* 00011A70 */ 0x05, 0x09, 0x16, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xA5, 0x04, 0x8B, 0xFF, 0x00, 0x00, 0x00, 0x02, +/* 00011A80 */ 0xFF, 0x5B, 0x8A, 0x01, 0x00, 0xFF, 0x5B, 0x8A, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, +/* 00011A90 */ 0xFF, 0x5B, 0x8A, 0x01, 0x00, 0xFB, 0xFB, 0x09, 0x06, 0x0A, 0x07, 0x28, 0x23, 0x02, 0x05, 0x01, +/* 00011AA0 */ 0x04, 0x02, 0x02, 0x02, 0x02, 0x09, 0x08, 0x01, 0x00, 0x01, 0x02, 0x01, 0x20, 0xAC, 0x8F, 0x02, +/* 00011AB0 */ 0x0B, 0x0A, 0x00, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x06, 0x00, 0x00, 0xF0, +/* 00011AC0 */ 0x02, 0x0A, 0x0A, 0x00, 0x00, 0x45, 0x07, 0x0A, 0x45, 0x08, 0x03, 0x8F, 0x02, 0x21, 0x0A, 0x01, +/* 00011AD0 */ 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x07, 0x01, 0x00, 0xF0, 0x02, 0x0A, 0x0A, +/* 00011AE0 */ 0x01, 0x00, 0x0F, 0x6A, 0x00, 0x0A, 0x8F, 0x02, 0x20, 0x0A, 0x02, 0x00, 0x07, 0x02, 0x00, 0x59, +/* 00011AF0 */ 0x00, 0x02, 0x5A, 0x01, 0x07, 0x02, 0x00, 0xF0, 0x02, 0x0A, 0x0A, 0x02, 0x00, 0x0E, 0x4F, 0x00, +/* 00011B00 */ 0x0A, 0x8F, 0x02, 0x10, 0x0B, 0x03, 0x00, 0x6D, 0x0A, 0x0B, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 00011B10 */ 0x0B, 0x45, 0x0C, 0x07, 0x8F, 0x02, 0x10, 0x0E, 0x03, 0x00, 0x6D, 0x0D, 0x0E, 0x01, 0x07, 0x03, +/* 00011B20 */ 0x00, 0x59, 0x00, 0x0E, 0x5A, 0x01, 0x04, 0x04, 0x00, 0x5A, 0x02, 0x05, 0x04, 0x00, 0xF4, 0x03, +/* 00011B30 */ 0x0D, 0x0D, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x32, 0x0C, 0x0C, 0x0D, 0x00, 0x00, 0x5A, 0x01, +/* 00011B40 */ 0x0C, 0x03, 0x00, 0xF4, 0x02, 0x0A, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x45, 0x08, 0x0A, +/* 00011B50 */ 0x45, 0x00, 0x08, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x1D, 0x2C, 0xFF, 0x7A, 0x8A, 0x01, +/* 00011B60 */ 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x29, 0x00, 0x03, 0x00, 0x19, 0x00, 0x36, 0x00, +/* 00011B70 */ 0x38, 0x00, 0x4F, 0x00, 0x49, 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0x01, 0x00, +/* 00011B80 */ 0x10, 0x07, 0x00, 0xFE, 0x01, 0x09, 0x1E, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x24, 0x03, 0x8A, 0xFF, +/* 00011B90 */ 0x00, 0x00, 0x00, 0x02, 0xFF, 0xE5, 0x89, 0x01, 0x00, 0xFF, 0xE5, 0x89, 0x01, 0x00, 0x01, 0xFE, +/* 00011BA0 */ 0x00, 0x90, 0x02, 0x02, 0xFF, 0xE5, 0x89, 0x01, 0x00, 0x5D, 0x5D, 0x03, 0x03, 0x05, 0x03, 0x10, +/* 00011BB0 */ 0x0F, 0x02, 0x01, 0x01, 0x04, 0x08, 0x33, 0xA8, 0x05, 0x15, 0x03, 0x00, 0x03, 0x05, 0x09, 0x1D, +/* 00011BC0 */ 0x00, 0x8F, 0x02, 0x08, 0x05, 0x00, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x03, +/* 00011BD0 */ 0x00, 0x00, 0xF0, 0x02, 0x05, 0x05, 0x00, 0x00, 0x45, 0x00, 0x05, 0x09, 0x05, 0x00, 0xA8, 0x05, +/* 00011BE0 */ 0x46, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFF, 0x04, 0x8A, 0x01, 0x00, 0x02, +/* 00011BF0 */ 0x00, 0x00, 0x00, 0x00, 0x31, 0x00, 0x3D, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0x01, 0x00, 0x10, 0x07, +/* 00011C00 */ 0x00, 0xFE, 0xFD, 0x08, 0x16, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x23, 0x03, 0x89, 0xFF, 0x00, 0x00, +/* 00011C10 */ 0x00, 0x02, 0xFF, 0x6E, 0x89, 0x01, 0x00, 0xFF, 0x6E, 0x89, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, +/* 00011C20 */ 0x02, 0x02, 0xFF, 0x6E, 0x89, 0x01, 0x00, 0x56, 0x56, 0x03, 0x03, 0x05, 0x03, 0x10, 0x0F, 0x02, +/* 00011C30 */ 0x01, 0x01, 0x04, 0x08, 0x33, 0xA8, 0x05, 0x14, 0x03, 0x00, 0x03, 0x05, 0x09, 0x08, 0x00, 0xA9, +/* 00011C40 */ 0x05, 0x45, 0x00, 0x05, 0x09, 0x1A, 0x00, 0x8F, 0x02, 0x0B, 0x05, 0x00, 0x00, 0x07, 0x02, 0x00, +/* 00011C50 */ 0x59, 0x00, 0x02, 0x5A, 0x01, 0x03, 0x00, 0x00, 0xF0, 0x02, 0x05, 0x05, 0x00, 0x00, 0x46, 0x00, +/* 00011C60 */ 0x05, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFF, 0x8D, 0x89, 0x01, 0x00, 0x02, 0x00, 0x00, +/* 00011C70 */ 0x00, 0x00, 0x31, 0x00, 0x36, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0x01, 0x00, 0x10, 0x07, 0x00, 0xFE, +/* 00011C80 */ 0xF9, 0x08, 0x16, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x22, 0x03, 0x88, 0xFF, 0x00, 0x00, 0x00, 0x02, +/* 00011C90 */ 0xFF, 0xF9, 0x88, 0x01, 0x00, 0xFF, 0xF9, 0x88, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, +/* 00011CA0 */ 0xFF, 0xF9, 0x88, 0x01, 0x00, 0x5C, 0x5C, 0x03, 0x03, 0x05, 0x03, 0x10, 0x0F, 0x02, 0x01, 0x01, +/* 00011CB0 */ 0x04, 0x08, 0x33, 0xA8, 0x05, 0x15, 0x03, 0x00, 0x03, 0x05, 0x09, 0x1D, 0x00, 0x8F, 0x02, 0x0C, +/* 00011CC0 */ 0x05, 0x00, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x03, 0x00, 0x00, 0xF0, 0x02, +/* 00011CD0 */ 0x05, 0x05, 0x00, 0x00, 0x45, 0x00, 0x05, 0x09, 0x05, 0x00, 0xA8, 0x05, 0x46, 0x00, 0x05, 0x09, +/* 00011CE0 */ 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFF, 0x18, 0x89, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, +/* 00011CF0 */ 0x31, 0x00, 0x3C, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x07, 0x00, 0xFE, 0xF2, 0x08, +/* 00011D00 */ 0x16, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x21, 0x03, 0x87, 0xFF, 0x00, 0x00, 0x00, 0x02, 0xFF, 0x20, +/* 00011D10 */ 0x88, 0x01, 0x00, 0xFF, 0x20, 0x88, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0x20, +/* 00011D20 */ 0x88, 0x01, 0x00, 0xC0, 0xC0, 0x04, 0x04, 0x06, 0x03, 0x17, 0x16, 0x02, 0x02, 0x02, 0x01, 0x01, +/* 00011D30 */ 0x01, 0x01, 0x05, 0x07, 0x08, 0x55, 0x14, 0x03, 0x00, 0x04, 0x02, 0x09, 0x1A, 0x00, 0x8F, 0x02, +/* 00011D40 */ 0x03, 0x07, 0x00, 0x00, 0x6D, 0x06, 0x07, 0x00, 0x07, 0x01, 0x00, 0x59, 0x00, 0x07, 0xF4, 0x01, +/* 00011D50 */ 0xFF, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0x06, 0x15, 0x03, 0x00, 0x04, 0x06, 0x09, +/* 00011D60 */ 0x1D, 0x00, 0x8F, 0x02, 0x09, 0x06, 0x01, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x03, 0x5A, 0x01, +/* 00011D70 */ 0x04, 0x01, 0x00, 0xF0, 0x02, 0x06, 0x06, 0x01, 0x00, 0x45, 0x00, 0x06, 0x09, 0x05, 0x00, 0xA8, +/* 00011D80 */ 0x06, 0x46, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xAA, 0x02, 0xFF, 0x3F, +/* 00011D90 */ 0x88, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x26, 0x00, 0x1A, 0x00, 0x3E, 0x00, +/* 00011DA0 */ 0x31, 0x00, 0x3C, 0x00, 0x00, 0x7F, 0x5C, 0x0A, 0xC1, 0x63, 0x50, 0x03, 0x00, 0xFE, 0xD5, 0x08, +/* 00011DB0 */ 0x20, 0xA0, 0x41, 0xC1, 0x00, 0xFE, 0xF6, 0x02, 0x85, 0xFF, 0x57, 0x84, 0x01, 0x00, 0xFF, 0x57, +/* 00011DC0 */ 0x84, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFF, 0x57, 0x84, 0x01, 0x00, 0xFE, 0x70, +/* 00011DD0 */ 0x03, 0xFE, 0x70, 0x03, 0x07, 0x05, 0x08, 0x06, 0x3E, 0x3C, 0x02, 0x02, 0x05, 0x06, 0x02, 0x02, +/* 00011DE0 */ 0x02, 0x02, 0x01, 0x01, 0x07, 0x08, 0x08, 0x01, 0x00, 0x01, 0x01, 0xFE, 0xFF, 0x00, 0x4E, 0x05, +/* 00011DF0 */ 0x4E, 0x06, 0x8F, 0x01, 0x0D, 0x09, 0x00, 0x00, 0x4A, 0x09, 0x0E, 0x0B, 0x00, 0x09, 0x8F, 0x01, +/* 00011E00 */ 0x0D, 0x00, 0x00, 0x00, 0x4A, 0x00, 0x09, 0xE2, 0x00, 0x8F, 0x02, 0x33, 0x09, 0x01, 0x00, 0x4A, +/* 00011E10 */ 0x09, 0x0E, 0x82, 0x00, 0x09, 0x8F, 0x01, 0x0F, 0x09, 0x02, 0x00, 0x4A, 0x09, 0x0F, 0x14, 0x00, +/* 00011E20 */ 0x09, 0x8F, 0x01, 0x05, 0x09, 0x03, 0x00, 0x4A, 0x09, 0x07, 0x01, 0x00, 0x59, 0x00, 0x02, 0xF0, +/* 00011E30 */ 0x01, 0xFF, 0x09, 0x00, 0x00, 0x8F, 0x01, 0x0A, 0x09, 0x04, 0x00, 0x4A, 0x09, 0x07, 0x01, 0x00, +/* 00011E40 */ 0x59, 0x00, 0x02, 0xF0, 0x01, 0x09, 0x09, 0x01, 0x00, 0x45, 0x05, 0x09, 0x8F, 0x02, 0x03, 0x0A, +/* 00011E50 */ 0x05, 0x00, 0x6D, 0x09, 0x0A, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0A, 0x5A, 0x01, 0x05, 0x02, +/* 00011E60 */ 0x00, 0x8F, 0x01, 0x0F, 0x0B, 0x02, 0x00, 0x4A, 0x0B, 0x5A, 0x02, 0x0B, 0x02, 0x00, 0xF4, 0x03, +/* 00011E70 */ 0x09, 0x09, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x45, 0x06, 0x09, 0x0E, 0x0F, 0x00, 0x06, 0x98, +/* 00011E80 */ 0x09, 0x06, 0x03, 0x00, 0x00, 0x01, 0x43, 0x01, 0x01, 0x0D, 0x09, 0x09, 0x06, 0x00, 0x01, 0x43, +/* 00011E90 */ 0x01, 0x01, 0x0D, 0x05, 0x09, 0x47, 0x00, 0x8F, 0x02, 0x03, 0x0A, 0x05, 0x00, 0x6D, 0x09, 0x0A, +/* 00011EA0 */ 0x01, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0A, 0x8F, 0x01, 0x0A, 0x0B, 0x04, 0x00, 0x4A, 0x0B, 0x07, +/* 00011EB0 */ 0x01, 0x00, 0x59, 0x00, 0x02, 0xF0, 0x01, 0x0B, 0x0B, 0x04, 0x00, 0x5A, 0x01, 0x0B, 0x03, 0x00, +/* 00011EC0 */ 0xE2, 0x0B, 0x00, 0x5A, 0x02, 0x0B, 0x03, 0x00, 0xF4, 0x03, 0x09, 0x09, 0x01, 0x00, 0x00, 0x00, +/* 00011ED0 */ 0x03, 0x00, 0x98, 0x09, 0x09, 0x04, 0x01, 0x00, 0x01, 0x43, 0x01, 0x01, 0x0D, 0x09, 0x8F, 0x01, +/* 00011EE0 */ 0x0D, 0x00, 0x00, 0x00, 0x4A, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xC0, 0x02, +/* 00011EF0 */ 0xFE, 0xC0, 0x02, 0x09, 0xFE, 0xA4, 0x04, 0x00, 0xFF, 0x6D, 0x84, 0x01, 0x00, 0x0D, 0x04, 0x00, +/* 00011F00 */ 0x00, 0x00, 0x0C, 0x00, 0x2B, 0x00, 0x0B, 0x00, 0x33, 0x00, 0x0C, 0x00, 0x26, 0x00, 0x0C, 0x00, +/* 00011F10 */ 0x29, 0x00, 0x14, 0x00, 0x33, 0x00, 0x17, 0x00, 0x2C, 0x00, 0x2F, 0x00, 0x4D, 0x00, 0x04, 0x00, +/* 00011F20 */ 0x5B, 0x00, 0x0F, 0x00, 0x49, 0x00, 0x09, 0x00, 0xCB, 0x00, 0x47, 0x00, 0x6D, 0x00, 0x0D, 0x00, +/* 00011F30 */ 0x24, 0x00, 0x00, 0x7F, 0x7C, 0x0A, 0xC3, 0x03, 0x10, 0x13, 0x00, 0xFE, 0xC3, 0x08, 0x19, 0xA2, +/* 00011F40 */ 0x41, 0xC1, 0x00, 0xFE, 0xF5, 0x02, 0x84, 0xFF, 0x34, 0x81, 0x01, 0x00, 0xFF, 0x34, 0x81, 0x01, +/* 00011F50 */ 0x00, 0x01, 0xFE, 0x00, 0x90, 0x05, 0x05, 0xFF, 0x34, 0x81, 0x01, 0x00, 0xFE, 0x91, 0x02, 0xFE, +/* 00011F60 */ 0x91, 0x02, 0x0C, 0x06, 0x10, 0x06, 0x41, 0x38, 0x18, 0x02, 0x01, 0x04, 0x04, 0x01, 0x01, 0x01, +/* 00011F70 */ 0x01, 0x01, 0x0F, 0x66, 0xBF, 0x05, 0xFE, 0x9C, 0x03, 0x08, 0x01, 0x00, 0x01, 0x01, 0xEE, 0xA8, +/* 00011F80 */ 0x0D, 0xA8, 0x0E, 0x14, 0x03, 0x00, 0x07, 0x02, 0x09, 0x0C, 0x00, 0x8F, 0x02, 0x27, 0x11, 0x00, +/* 00011F90 */ 0x00, 0x45, 0x10, 0x11, 0x09, 0x09, 0x00, 0x8F, 0x02, 0x26, 0x11, 0x01, 0x00, 0x46, 0x10, 0x11, +/* 00011FA0 */ 0x45, 0x0A, 0x10, 0x8F, 0x02, 0x05, 0x10, 0x02, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x03, 0x5A, +/* 00011FB0 */ 0x01, 0x06, 0x00, 0x00, 0xF0, 0x02, 0x10, 0x10, 0x00, 0x00, 0x45, 0x0B, 0x10, 0x07, 0x01, 0x00, +/* 00011FC0 */ 0x59, 0x00, 0x03, 0xF0, 0x01, 0x10, 0x09, 0x01, 0x00, 0x45, 0x0C, 0x10, 0xA8, 0x10, 0x15, 0x03, +/* 00011FD0 */ 0x00, 0x0B, 0x10, 0x09, 0x06, 0x00, 0x45, 0x10, 0x0B, 0x09, 0x03, 0x00, 0x46, 0x10, 0x04, 0x45, +/* 00011FE0 */ 0x0B, 0x10, 0x45, 0x0D, 0x04, 0xED, 0x00, 0xEE, 0x00, 0x12, 0x03, 0x00, 0x0D, 0x0B, 0x09, 0x4B, +/* 00011FF0 */ 0x00, 0x8F, 0x02, 0x29, 0x10, 0x03, 0x00, 0x07, 0x05, 0x00, 0x59, 0x00, 0x03, 0x98, 0x11, 0x06, +/* 00012000 */ 0x0D, 0x00, 0x00, 0x5A, 0x01, 0x11, 0x02, 0x00, 0x5A, 0x02, 0x0A, 0x02, 0x00, 0x5A, 0x03, 0x08, +/* 00012010 */ 0x02, 0x00, 0x5A, 0x04, 0x0C, 0x02, 0x00, 0xF0, 0x05, 0x10, 0x10, 0x02, 0x00, 0x45, 0x0E, 0x10, +/* 00012020 */ 0x5F, 0x10, 0x0E, 0x00, 0xA8, 0x11, 0x15, 0x03, 0x00, 0x10, 0x11, 0x09, 0x08, 0x00, 0x45, 0x00, +/* 00012030 */ 0x0E, 0xEF, 0x00, 0x09, 0x35, 0x00, 0x26, 0x0D, 0x0D, 0x09, 0xAB, 0xFF, 0xEF, 0x00, 0x8F, 0x02, +/* 00012040 */ 0x29, 0x10, 0x03, 0x00, 0x07, 0x05, 0x00, 0x59, 0x00, 0x03, 0x5A, 0x01, 0x0C, 0x03, 0x00, 0x5A, +/* 00012050 */ 0x02, 0x0A, 0x03, 0x00, 0xA8, 0x11, 0x5A, 0x03, 0x11, 0x03, 0x00, 0x5A, 0x04, 0x0C, 0x03, 0x00, +/* 00012060 */ 0xF0, 0x05, 0x00, 0x10, 0x03, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x0D, 0x02, +/* 00012070 */ 0xFF, 0x83, 0x81, 0x01, 0x00, 0x0C, 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x58, 0x00, 0x1A, 0x00, +/* 00012080 */ 0x34, 0x00, 0x0F, 0x00, 0x32, 0x00, 0x16, 0x00, 0x39, 0x00, 0x07, 0x00, 0x0B, 0x00, 0x08, 0x00, +/* 00012090 */ 0x1F, 0x00, 0x2F, 0x00, 0x69, 0x00, 0x0E, 0x00, 0x35, 0x00, 0x08, 0x00, 0x4F, 0xFF, 0x08, 0x00, +/* 000120A0 */ 0xE2, 0x00, 0x2D, 0x00, 0x51, 0x00, 0x00, 0x7E, 0x5D, 0x1A, 0xC1, 0x73, 0x5A, 0x4B, 0x04, 0xFE, +/* 000120B0 */ 0x8A, 0x08, 0x1E, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xF4, 0x02, 0x81, 0xFF, 0x40, 0x77, 0x01, 0x00, +/* 000120C0 */ 0xFF, 0x40, 0x77, 0x01, 0x00, 0x02, 0xFE, 0x00, 0x90, 0x05, 0x05, 0xFF, 0x40, 0x77, 0x01, 0x00, +/* 000120D0 */ 0xFE, 0xD9, 0x09, 0xFE, 0xD9, 0x09, 0x03, 0xFE, 0x9D, 0x04, 0xFE, 0x0D, 0x02, 0xFE, 0x9E, 0x04, +/* 000120E0 */ 0x0E, 0x0B, 0x15, 0x05, 0x72, 0x6A, 0x02, 0x01, 0x09, 0x01, 0x0B, 0x05, 0x05, 0x05, 0x05, 0x01, +/* 000120F0 */ 0x01, 0x01, 0x12, 0x13, 0x14, 0x15, 0x07, 0x08, 0x01, 0x01, 0x01, 0x00, 0x06, 0xFE, 0x95, 0x03, +/* 00012100 */ 0x05, 0xFE, 0x9F, 0x04, 0x06, 0xFE, 0xD7, 0x03, 0x06, 0xFE, 0xA0, 0x04, 0x06, 0xFE, 0xA1, 0x04, +/* 00012110 */ 0xFE, 0xEA, 0x01, 0x96, 0x03, 0x0B, 0x96, 0x04, 0x0D, 0x4E, 0x11, 0x8F, 0x02, 0x03, 0x17, 0x00, +/* 00012120 */ 0x00, 0x6D, 0x16, 0x17, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x17, 0x93, 0x03, 0x18, 0x01, 0x00, +/* 00012130 */ 0x5A, 0x01, 0x18, 0x00, 0x00, 0xF4, 0x02, 0x16, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, +/* 00012140 */ 0x0F, 0x16, 0x14, 0x03, 0x00, 0x0F, 0x02, 0x09, 0x1F, 0x00, 0x8F, 0x02, 0x28, 0x16, 0x02, 0x00, +/* 00012150 */ 0x07, 0x02, 0x00, 0x59, 0x00, 0x03, 0x93, 0x03, 0x17, 0x01, 0x00, 0x5A, 0x01, 0x17, 0x01, 0x00, +/* 00012160 */ 0xF0, 0x02, 0x16, 0x16, 0x01, 0x00, 0x45, 0x0F, 0x16, 0x0E, 0x2A, 0x00, 0x0F, 0x8F, 0x02, 0x06, +/* 00012170 */ 0x16, 0x03, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, 0x8F, 0x02, 0x17, 0x17, 0x04, 0x00, 0x5A, +/* 00012180 */ 0x01, 0x17, 0x02, 0x00, 0x5A, 0x02, 0x0F, 0x02, 0x00, 0xD6, 0x00, 0x17, 0x5A, 0x03, 0x17, 0x02, +/* 00012190 */ 0x00, 0xF0, 0x04, 0xFF, 0x16, 0x02, 0x00, 0x8F, 0x02, 0x03, 0x17, 0x00, 0x00, 0x6D, 0x16, 0x17, +/* 000121A0 */ 0x01, 0x07, 0x03, 0x00, 0x59, 0x00, 0x17, 0x93, 0x03, 0x18, 0x01, 0x00, 0x5A, 0x01, 0x18, 0x03, +/* 000121B0 */ 0x00, 0xE2, 0x18, 0x00, 0x5A, 0x02, 0x18, 0x03, 0x00, 0xF4, 0x03, 0x16, 0x16, 0x01, 0x00, 0x00, +/* 000121C0 */ 0x00, 0x03, 0x00, 0x98, 0x16, 0x16, 0x04, 0x00, 0x00, 0x96, 0x03, 0x16, 0x07, 0x03, 0x00, 0x59, +/* 000121D0 */ 0x00, 0x03, 0x93, 0x03, 0x16, 0x01, 0x00, 0x5A, 0x01, 0x16, 0x04, 0x00, 0x5A, 0x02, 0x0E, 0x04, +/* 000121E0 */ 0x00, 0xF0, 0x03, 0x16, 0x0C, 0x04, 0x00, 0x45, 0x10, 0x16, 0x93, 0x04, 0x16, 0x05, 0x00, 0xA8, +/* 000121F0 */ 0x17, 0x15, 0x03, 0x00, 0x16, 0x17, 0x09, 0x4E, 0x00, 0xE0, 0x00, 0x03, 0x04, 0x4E, 0x16, 0x95, +/* 00012200 */ 0x00, 0x02, 0x16, 0xD0, 0x16, 0x00, 0x00, 0x00, 0x96, 0x02, 0x16, 0x95, 0x00, 0x02, 0x05, 0x8F, +/* 00012210 */ 0x02, 0x06, 0x16, 0x03, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, 0x8F, 0x02, 0x17, 0x17, 0x04, +/* 00012220 */ 0x00, 0x5A, 0x01, 0x17, 0x05, 0x00, 0x5A, 0x02, 0x0F, 0x05, 0x00, 0xB9, 0x18, 0x00, 0x01, 0x66, +/* 00012230 */ 0x01, 0x01, 0x17, 0x18, 0x5A, 0x03, 0x17, 0x05, 0x00, 0xF0, 0x04, 0xFF, 0x16, 0x05, 0x00, 0x93, +/* 00012240 */ 0x02, 0x16, 0x06, 0x00, 0x45, 0x0F, 0x16, 0x45, 0x11, 0x10, 0x0E, 0x6E, 0x00, 0x10, 0x0E, 0x36, +/* 00012250 */ 0x00, 0x0F, 0x8F, 0x02, 0x05, 0x16, 0x07, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x03, 0x5A, 0x01, +/* 00012260 */ 0x0F, 0x06, 0x00, 0xF0, 0x02, 0x16, 0x16, 0x06, 0x00, 0x11, 0x03, 0x00, 0x16, 0x05, 0x09, 0x17, +/* 00012270 */ 0x00, 0x8F, 0x02, 0x33, 0x16, 0x08, 0x00, 0x4A, 0x16, 0x0E, 0x07, 0x00, 0x16, 0x2D, 0x10, 0x10, +/* 00012280 */ 0x06, 0x09, 0x04, 0x00, 0x2D, 0x10, 0x10, 0x07, 0x45, 0x16, 0x10, 0x8F, 0x02, 0x06, 0x17, 0x03, +/* 00012290 */ 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, 0x8F, 0x02, 0x19, 0x18, 0x09, 0x00, 0x5A, 0x01, 0x18, +/* 000122A0 */ 0x07, 0x00, 0x5A, 0x02, 0x0F, 0x07, 0x00, 0x5A, 0x03, 0x06, 0x07, 0x00, 0xF0, 0x04, 0x17, 0x17, +/* 000122B0 */ 0x07, 0x00, 0x2D, 0x16, 0x16, 0x17, 0x45, 0x10, 0x16, 0x09, 0x05, 0x00, 0xA8, 0x16, 0x45, 0x10, +/* 000122C0 */ 0x16, 0x8F, 0x02, 0x04, 0x16, 0x0A, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x03, 0xCE, 0x00, 0x00, +/* 000122D0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x7B, 0x10, 0x17, 0x02, 0x7B, 0x0F, +/* 000122E0 */ 0x17, 0x03, 0x7B, 0x11, 0x17, 0x04, 0x5A, 0x01, 0x17, 0x08, 0x00, 0x5A, 0x02, 0x02, 0x08, 0x00, +/* 000122F0 */ 0xF0, 0x03, 0x00, 0x16, 0x08, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x01, 0x14, 0x00, +/* 00012300 */ 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x02, 0x00, 0x00, +/* 00012310 */ 0x11, 0x02, 0x00, 0x00, 0x0F, 0x02, 0x00, 0x00, 0xFE, 0xF6, 0x01, 0xFE, 0xC0, 0x02, 0xFE, 0x0D, +/* 00012320 */ 0x02, 0xFE, 0x11, 0x02, 0xFE, 0x0F, 0x02, 0x01, 0x04, 0x01, 0x00, 0xFE, 0xCF, 0x03, 0x0D, 0xFE, +/* 00012330 */ 0xA2, 0x04, 0x00, 0xFF, 0x84, 0x77, 0x01, 0x00, 0x16, 0x08, 0x00, 0x00, 0x00, 0x27, 0x00, 0x36, +/* 00012340 */ 0x00, 0x08, 0x00, 0x81, 0x00, 0x1F, 0x00, 0x3A, 0x00, 0x04, 0x00, 0x1B, 0x00, 0x2A, 0x00, 0x53, +/* 00012350 */ 0x02, 0x35, 0x00, 0x49, 0x00, 0x1E, 0x00, 0x37, 0x00, 0x19, 0x00, 0x50, 0x00, 0x08, 0x00, 0x1F, +/* 00012360 */ 0x00, 0x04, 0x00, 0x17, 0x00, 0x30, 0x00, 0xE9, 0x01, 0x08, 0x00, 0xF9, 0x00, 0x03, 0x00, 0x29, +/* 00012370 */ 0x00, 0x04, 0x00, 0x1C, 0x00, 0x23, 0x00, 0x3E, 0x00, 0x0C, 0x00, 0x2E, 0x00, 0x07, 0x00, 0x3E, +/* 00012380 */ 0x00, 0x04, 0x00, 0x40, 0x00, 0x34, 0x00, 0x5C, 0x00, 0x05, 0x00, 0x29, 0x00, 0x3A, 0x00, 0x99, +/* 00012390 */ 0x00, 0x00, 0x0F, 0x25, 0x01, 0x00, 0x9A, 0x23, 0x01, 0x00, 0x7F, 0x5C, 0x0A, 0xC1, 0x33, 0x10, +/* 000123A0 */ 0x43, 0x00, 0xFE, 0xA0, 0x08, 0x3D, 0xA2, 0x41, 0xD1, 0x00, 0x83, 0xFF, 0x1A, 0x7C, 0x01, 0x00, +/* 000123B0 */ 0xFF, 0x1A, 0x7C, 0x01, 0x00, 0x41, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0x1A, 0x7C, 0x01, 0x00, +/* 000123C0 */ 0xFE, 0xA8, 0x01, 0xFE, 0xA8, 0x01, 0x08, 0x0B, 0x0F, 0x05, 0x2D, 0x2B, 0x04, 0x01, 0x03, 0x07, +/* 000123D0 */ 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x0E, 0x01, 0x01, 0x08, 0x01, 0xFF, 0x06, 0xFE, 0x2A, 0x03, +/* 000123E0 */ 0x06, 0xFE, 0x2C, 0x03, 0x0B, 0x06, 0xFE, 0x2D, 0x03, 0x06, 0xFE, 0x2B, 0x03, 0x07, 0xCF, 0x8F, +/* 000123F0 */ 0x04, 0x03, 0x10, 0x00, 0x00, 0x6D, 0x0F, 0x10, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x10, 0x5A, +/* 00012400 */ 0x01, 0x0B, 0x00, 0x00, 0xE2, 0x11, 0x00, 0x5A, 0x02, 0x11, 0x00, 0x00, 0xF4, 0x03, 0x0F, 0x0F, +/* 00012410 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x0C, 0x0F, 0x98, 0x0F, 0x0C, 0x02, 0x00, 0x00, 0x45, +/* 00012420 */ 0x0D, 0x0F, 0x8F, 0x04, 0x06, 0x0F, 0x01, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, 0x8F, 0x04, +/* 00012430 */ 0x18, 0x10, 0x02, 0x00, 0x5A, 0x01, 0x10, 0x01, 0x00, 0x8F, 0x02, 0x04, 0x10, 0x03, 0x00, 0x5A, +/* 00012440 */ 0x02, 0x10, 0x01, 0x00, 0x5A, 0x03, 0x0D, 0x01, 0x00, 0xF0, 0x04, 0x0F, 0x0F, 0x01, 0x00, 0x15, +/* 00012450 */ 0x03, 0x00, 0x0F, 0x04, 0x09, 0x63, 0x00, 0x8F, 0x04, 0x36, 0x10, 0x04, 0x00, 0x4A, 0x10, 0x6D, +/* 00012460 */ 0x0F, 0x10, 0x01, 0x07, 0x04, 0x00, 0x59, 0x00, 0x10, 0x8F, 0x02, 0x02, 0x11, 0x05, 0x00, 0x5A, +/* 00012470 */ 0x01, 0x11, 0x02, 0x00, 0x8F, 0x01, 0x02, 0x12, 0x06, 0x00, 0x4A, 0x12, 0x43, 0x11, 0x12, 0x2D, +/* 00012480 */ 0x12, 0x11, 0x02, 0x01, 0x43, 0x01, 0x01, 0x02, 0x12, 0x5A, 0x02, 0x11, 0x02, 0x00, 0xCE, 0x00, +/* 00012490 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x7B, 0x0B, 0x11, 0x02, 0x7B, +/* 000124A0 */ 0x07, 0x11, 0x03, 0x7B, 0x07, 0x11, 0x04, 0x7B, 0x07, 0x11, 0x05, 0x5A, 0x03, 0x11, 0x02, 0x00, +/* 000124B0 */ 0xF4, 0x04, 0xFF, 0x0F, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x01, 0x18, +/* 000124C0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, +/* 000124D0 */ 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0xFE, 0xC0, 0x02, +/* 000124E0 */ 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x96, 0x01, 0x0E, +/* 000124F0 */ 0xFE, 0xA3, 0x04, 0x00, 0xFF, 0x3E, 0x7C, 0x01, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, +/* 00012500 */ 0x7A, 0x00, 0x09, 0x00, 0x24, 0x00, 0x35, 0x00, 0x5F, 0x00, 0x65, 0x00, 0x86, 0x00, 0x00, 0x7F, +/* 00012510 */ 0x5C, 0x08, 0x01, 0x00, 0x10, 0x03, 0x00, 0xFE, 0x92, 0x08, 0x3C, 0xA2, 0x41, 0xD1, 0x00, 0x82, +/* 00012520 */ 0xFF, 0xC0, 0x78, 0x01, 0x00, 0xFF, 0xC0, 0x78, 0x01, 0x00, 0x41, 0xFE, 0x00, 0x90, 0x02, 0x02, +/* 00012530 */ 0xFF, 0xC0, 0x78, 0x01, 0x00, 0x7D, 0x7D, 0x04, 0x05, 0x07, 0x06, 0x0F, 0x0F, 0x03, 0x01, 0x03, +/* 00012540 */ 0x06, 0x06, 0xFE, 0x95, 0x03, 0x06, 0xFE, 0x47, 0x03, 0x08, 0x3E, 0x8F, 0x03, 0x06, 0x07, 0x00, +/* 00012550 */ 0x00, 0x07, 0x05, 0x00, 0x59, 0x00, 0x04, 0x8F, 0x03, 0x1D, 0x08, 0x01, 0x00, 0x5A, 0x01, 0x08, +/* 00012560 */ 0x00, 0x00, 0x8F, 0x01, 0x03, 0x08, 0x02, 0x00, 0x5A, 0x02, 0x08, 0x00, 0x00, 0x2D, 0x08, 0x02, +/* 00012570 */ 0x05, 0x5A, 0x03, 0x08, 0x00, 0x00, 0x5A, 0x04, 0x03, 0x00, 0x00, 0xF0, 0x05, 0x07, 0x07, 0x00, +/* 00012580 */ 0x00, 0x94, 0x01, 0x03, 0x07, 0xA8, 0x00, 0x24, 0x00, 0xFF, 0xE4, 0x78, 0x01, 0x00, 0x02, 0x00, +/* 00012590 */ 0x00, 0x00, 0x00, 0x3C, 0x00, 0x58, 0x00, 0x00, 0x7E, 0x5C, 0x0A, 0xC1, 0x03, 0x10, 0x0B, 0x00, +/* 000125A0 */ 0xFE, 0x71, 0x08, 0x1E, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xF3, 0x02, 0x7F, 0xFF, 0x0F, 0x73, 0x01, +/* 000125B0 */ 0x00, 0xFF, 0x0F, 0x73, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0x0F, 0x73, 0x01, +/* 000125C0 */ 0x00, 0xFE, 0x11, 0x04, 0xFE, 0x11, 0x04, 0x07, 0x05, 0x09, 0x04, 0x29, 0x26, 0x02, 0x01, 0x04, +/* 000125D0 */ 0x03, 0x03, 0x03, 0x03, 0x03, 0x08, 0x08, 0x01, 0x00, 0x06, 0xFE, 0x95, 0x03, 0xA4, 0x4E, 0x06, +/* 000125E0 */ 0x4E, 0x07, 0x8F, 0x01, 0x10, 0x09, 0x00, 0x00, 0x4A, 0x09, 0x0F, 0x14, 0x00, 0x09, 0x8F, 0x01, +/* 000125F0 */ 0x05, 0x09, 0x01, 0x00, 0x4A, 0x09, 0x07, 0x01, 0x00, 0x59, 0x00, 0x02, 0xF0, 0x01, 0xFF, 0x09, +/* 00012600 */ 0x00, 0x00, 0x8F, 0x02, 0x03, 0x0A, 0x02, 0x00, 0x6D, 0x09, 0x0A, 0x00, 0x07, 0x03, 0x00, 0x59, +/* 00012610 */ 0x00, 0x0A, 0x5A, 0x01, 0x05, 0x01, 0x00, 0x8F, 0x01, 0x10, 0x0B, 0x00, 0x00, 0x4A, 0x0B, 0x5A, +/* 00012620 */ 0x02, 0x0B, 0x01, 0x00, 0xF4, 0x03, 0x09, 0x09, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, 0x06, +/* 00012630 */ 0x09, 0x0F, 0x05, 0x00, 0x06, 0xA8, 0x00, 0x09, 0x46, 0x00, 0x98, 0x0B, 0x06, 0x03, 0x00, 0x00, +/* 00012640 */ 0x6D, 0x0A, 0x0B, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0B, 0x5A, 0x01, 0x04, 0x02, 0x00, 0xF4, +/* 00012650 */ 0x02, 0x0A, 0x0A, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x6D, 0x09, 0x0A, 0x02, 0x07, 0x02, 0x00, +/* 00012660 */ 0x59, 0x00, 0x0A, 0xD6, 0x00, 0x0B, 0x5A, 0x01, 0x0B, 0x03, 0x00, 0xF4, 0x02, 0x09, 0x09, 0x02, +/* 00012670 */ 0x00, 0x00, 0x00, 0x03, 0x00, 0x45, 0x07, 0x09, 0x45, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA8, 0x00, +/* 00012680 */ 0x24, 0x00, 0xFE, 0xC0, 0x02, 0xFE, 0x56, 0x01, 0x89, 0xFF, 0x2B, 0x73, 0x01, 0x00, 0x08, 0x04, +/* 00012690 */ 0x00, 0x00, 0x00, 0x0C, 0x00, 0x24, 0x00, 0x14, 0x00, 0x2B, 0x00, 0x2F, 0x00, 0x4B, 0x00, 0x04, +/* 000126A0 */ 0x00, 0x1A, 0x00, 0x05, 0x00, 0x5C, 0x02, 0x3E, 0x00, 0xCD, 0x00, 0x08, 0x00, 0x17, 0x00, 0x00, +/* 000126B0 */ 0xB4, 0x26, 0x01, 0x00, 0x7F, 0x4C, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0xFE, 0x84, 0x08, 0x36, +/* 000126C0 */ 0xA2, 0x41, 0xD0, 0x00, 0x80, 0xFE, 0x01, 0x10, 0xFF, 0x69, 0x76, 0x01, 0x00, 0xFF, 0x69, 0x76, +/* 000126D0 */ 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0x69, 0x76, 0x01, 0x00, 0x0A, 0x0A, 0x02, +/* 000126E0 */ 0x02, 0x03, 0x0A, 0x0A, 0x02, 0x17, 0xAD, 0x03, 0x0F, 0x02, 0x00, 0x02, 0xAC, 0x03, 0xAD, 0x00, +/* 000126F0 */ 0x0F, 0x02, 0x00, 0x03, 0xAC, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFF, 0x70, 0x76, +/* 00012700 */ 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x03, 0x00, 0x00, 0x7F, 0x5C, 0x0A, 0xC1, +/* 00012710 */ 0x43, 0x50, 0x03, 0x00, 0xFE, 0x5A, 0x08, 0x1E, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x9C, 0x04, 0x7E, +/* 00012720 */ 0xFF, 0x7C, 0x6E, 0x01, 0x00, 0xFF, 0x7C, 0x6E, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, +/* 00012730 */ 0xFF, 0x7C, 0x6E, 0x01, 0x00, 0xFE, 0x73, 0x04, 0xFE, 0x73, 0x04, 0x09, 0x09, 0x0D, 0x04, 0x56, +/* 00012740 */ 0x4D, 0x02, 0x05, 0x05, 0x04, 0x06, 0x06, 0x06, 0x06, 0x01, 0x0C, 0x0D, 0x07, 0x08, 0x01, 0x01, +/* 00012750 */ 0x01, 0x02, 0x06, 0xFE, 0x95, 0x03, 0x06, 0xFE, 0x47, 0x03, 0x01, 0x03, 0xFE, 0x5D, 0x01, 0x4E, +/* 00012760 */ 0x0A, 0x4E, 0x0B, 0x8F, 0x02, 0x03, 0x0F, 0x00, 0x00, 0x5F, 0x0F, 0x0F, 0x00, 0x6D, 0x0E, 0x0F, +/* 00012770 */ 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0F, 0x5A, 0x01, 0x09, 0x00, 0x00, 0xF4, 0x02, 0x0E, 0x0E, +/* 00012780 */ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x0A, 0x0E, 0xA8, 0x0E, 0x14, 0x03, 0x00, 0x0A, 0x0E, +/* 00012790 */ 0x09, 0x0A, 0x01, 0x8F, 0x02, 0x03, 0x0F, 0x00, 0x00, 0x6D, 0x0E, 0x0F, 0x02, 0x07, 0x02, 0x00, +/* 000127A0 */ 0x59, 0x00, 0x0F, 0x5A, 0x01, 0x09, 0x01, 0x00, 0xF4, 0x02, 0x0E, 0x0E, 0x02, 0x00, 0x00, 0x00, +/* 000127B0 */ 0x01, 0x00, 0x45, 0x0A, 0x0E, 0x14, 0x03, 0x00, 0x0A, 0x02, 0x09, 0x9A, 0x00, 0x8F, 0x01, 0x0F, +/* 000127C0 */ 0x0E, 0x01, 0x00, 0x4A, 0x0E, 0x0F, 0x14, 0x00, 0x0E, 0x8F, 0x01, 0x05, 0x0E, 0x02, 0x00, 0x4A, +/* 000127D0 */ 0x0E, 0x07, 0x01, 0x00, 0x59, 0x00, 0x03, 0xF0, 0x01, 0xFF, 0x0E, 0x02, 0x00, 0x8F, 0x02, 0x03, +/* 000127E0 */ 0x0F, 0x00, 0x00, 0x6D, 0x0E, 0x0F, 0x03, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0F, 0x5A, 0x01, 0x09, +/* 000127F0 */ 0x03, 0x00, 0x8F, 0x01, 0x0F, 0x10, 0x01, 0x00, 0x4A, 0x10, 0x5A, 0x02, 0x10, 0x03, 0x00, 0xF4, +/* 00012800 */ 0x03, 0x0E, 0x0E, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x45, 0x0B, 0x0E, 0x98, 0x0E, 0x0B, 0x04, +/* 00012810 */ 0x00, 0x00, 0x98, 0x0F, 0x0B, 0x05, 0x01, 0x00, 0x0E, 0x10, 0x00, 0x0F, 0x98, 0x10, 0x0B, 0x05, +/* 00012820 */ 0x02, 0x00, 0x2D, 0x10, 0x06, 0x10, 0x45, 0x0F, 0x10, 0x09, 0x03, 0x00, 0x46, 0x0F, 0x07, 0x2D, +/* 00012830 */ 0x0E, 0x0E, 0x0F, 0x98, 0x0F, 0x0B, 0x08, 0x03, 0x00, 0x0E, 0x10, 0x00, 0x0F, 0x98, 0x10, 0x0B, +/* 00012840 */ 0x08, 0x04, 0x00, 0x2D, 0x10, 0x06, 0x10, 0x45, 0x0F, 0x10, 0x09, 0x03, 0x00, 0x46, 0x0F, 0x07, +/* 00012850 */ 0x2D, 0x0E, 0x0E, 0x0F, 0x45, 0x0A, 0x0E, 0x8F, 0x02, 0x03, 0x0F, 0x00, 0x00, 0x5F, 0x0F, 0x0F, +/* 00012860 */ 0x04, 0x6D, 0x0E, 0x0F, 0x05, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0F, 0x5A, 0x01, 0x09, 0x04, 0x00, +/* 00012870 */ 0xA8, 0x10, 0x14, 0x03, 0x00, 0x0A, 0x10, 0x09, 0x0E, 0x00, 0x8F, 0x02, 0x34, 0x11, 0x03, 0x00, +/* 00012880 */ 0x4A, 0x11, 0x45, 0x10, 0x11, 0x09, 0x03, 0x00, 0x46, 0x10, 0x0A, 0x5A, 0x02, 0x10, 0x04, 0x00, +/* 00012890 */ 0xF4, 0x03, 0xFF, 0x0E, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x09, 0x15, 0x00, 0x8F, 0x02, 0x34, +/* 000128A0 */ 0x0E, 0x03, 0x00, 0x4A, 0x0E, 0x14, 0x03, 0x00, 0x0A, 0x0E, 0x09, 0x05, 0x00, 0xA8, 0x0E, 0x45, +/* 000128B0 */ 0x0A, 0x0E, 0x45, 0x00, 0x0A, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x4E, 0x03, 0xFE, +/* 000128C0 */ 0x98, 0x01, 0xFE, 0xF3, 0x01, 0xFE, 0xC0, 0x02, 0xFE, 0x4E, 0x03, 0xFE, 0x9B, 0x01, 0xFF, 0xA6, +/* 000128D0 */ 0x6E, 0x01, 0x00, 0x0D, 0x04, 0x00, 0x00, 0x00, 0x26, 0x00, 0x53, 0x00, 0x0A, 0x00, 0x30, 0x00, +/* 000128E0 */ 0x22, 0x00, 0x51, 0x00, 0x08, 0x00, 0x2F, 0x00, 0x0C, 0x00, 0x2D, 0x00, 0x14, 0x00, 0x3A, 0x00, +/* 000128F0 */ 0x2F, 0x00, 0xB1, 0x00, 0x4B, 0x00, 0x34, 0x01, 0x46, 0x00, 0x80, 0x00, 0x10, 0x00, 0x30, 0x00, +/* 00012900 */ 0x05, 0x00, 0x2E, 0x00, 0x08, 0x00, 0x1B, 0x00, 0x00, 0x7F, 0x5C, 0x0A, 0xC1, 0x43, 0x50, 0x03, +/* 00012910 */ 0x00, 0xFE, 0x3F, 0x08, 0x1F, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x9B, 0x04, 0x7D, 0xFF, 0xD6, 0x69, +/* 00012920 */ 0x01, 0x00, 0xFF, 0xD6, 0x69, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFF, 0xD6, 0x69, +/* 00012930 */ 0x01, 0x00, 0xFE, 0x86, 0x04, 0xFE, 0x86, 0x04, 0x0A, 0x09, 0x0E, 0x04, 0x5F, 0x55, 0x02, 0x05, +/* 00012940 */ 0x05, 0x04, 0x06, 0x06, 0x06, 0x06, 0x01, 0x0D, 0x0E, 0x07, 0x08, 0x01, 0x01, 0x01, 0x02, 0x06, +/* 00012950 */ 0xFE, 0x95, 0x03, 0x06, 0xFE, 0x47, 0x03, 0x01, 0x03, 0xFE, 0x7C, 0x01, 0x4E, 0x0C, 0x8F, 0x02, +/* 00012960 */ 0x03, 0x10, 0x00, 0x00, 0x5F, 0x10, 0x10, 0x00, 0x6D, 0x0F, 0x10, 0x01, 0x07, 0x02, 0x00, 0x59, +/* 00012970 */ 0x00, 0x10, 0x5A, 0x01, 0x09, 0x00, 0x00, 0xF4, 0x02, 0x0F, 0x0F, 0x01, 0x00, 0x00, 0x00, 0x00, +/* 00012980 */ 0x00, 0x45, 0x0B, 0x0F, 0xA8, 0x0F, 0x14, 0x03, 0x00, 0x0B, 0x0F, 0x09, 0x0A, 0x01, 0x8F, 0x02, +/* 00012990 */ 0x03, 0x10, 0x00, 0x00, 0x6D, 0x0F, 0x10, 0x02, 0x07, 0x02, 0x00, 0x59, 0x00, 0x10, 0x5A, 0x01, +/* 000129A0 */ 0x09, 0x01, 0x00, 0xF4, 0x02, 0x0F, 0x0F, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, 0x0B, 0x0F, +/* 000129B0 */ 0x14, 0x03, 0x00, 0x0B, 0x02, 0x09, 0x9A, 0x00, 0x8F, 0x01, 0x0F, 0x0F, 0x01, 0x00, 0x4A, 0x0F, +/* 000129C0 */ 0x0F, 0x14, 0x00, 0x0F, 0x8F, 0x01, 0x05, 0x0F, 0x02, 0x00, 0x4A, 0x0F, 0x07, 0x01, 0x00, 0x59, +/* 000129D0 */ 0x00, 0x03, 0xF0, 0x01, 0xFF, 0x0F, 0x02, 0x00, 0x8F, 0x02, 0x03, 0x10, 0x00, 0x00, 0x6D, 0x0F, +/* 000129E0 */ 0x10, 0x03, 0x07, 0x03, 0x00, 0x59, 0x00, 0x10, 0x5A, 0x01, 0x09, 0x03, 0x00, 0x8F, 0x01, 0x0F, +/* 000129F0 */ 0x11, 0x01, 0x00, 0x4A, 0x11, 0x5A, 0x02, 0x11, 0x03, 0x00, 0xF4, 0x03, 0x0F, 0x0F, 0x03, 0x00, +/* 00012A00 */ 0x00, 0x00, 0x03, 0x00, 0x45, 0x0C, 0x0F, 0x98, 0x0F, 0x0C, 0x04, 0x00, 0x00, 0x98, 0x10, 0x0C, +/* 00012A10 */ 0x05, 0x01, 0x00, 0x0E, 0x10, 0x00, 0x10, 0x98, 0x11, 0x0C, 0x05, 0x02, 0x00, 0x2D, 0x11, 0x06, +/* 00012A20 */ 0x11, 0x45, 0x10, 0x11, 0x09, 0x03, 0x00, 0x46, 0x10, 0x07, 0x2D, 0x0F, 0x0F, 0x10, 0x98, 0x10, +/* 00012A30 */ 0x0C, 0x08, 0x03, 0x00, 0x0E, 0x10, 0x00, 0x10, 0x98, 0x11, 0x0C, 0x08, 0x04, 0x00, 0x2D, 0x11, +/* 00012A40 */ 0x06, 0x11, 0x45, 0x10, 0x11, 0x09, 0x03, 0x00, 0x46, 0x10, 0x07, 0x2D, 0x0F, 0x0F, 0x10, 0x45, +/* 00012A50 */ 0x0B, 0x0F, 0x8F, 0x02, 0x03, 0x10, 0x00, 0x00, 0x5F, 0x10, 0x10, 0x04, 0x6D, 0x0F, 0x10, 0x05, +/* 00012A60 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x10, 0x5A, 0x01, 0x09, 0x04, 0x00, 0xA8, 0x11, 0x14, 0x03, 0x00, +/* 00012A70 */ 0x0B, 0x11, 0x09, 0x0E, 0x00, 0x8F, 0x02, 0x34, 0x12, 0x03, 0x00, 0x4A, 0x12, 0x45, 0x11, 0x12, +/* 00012A80 */ 0x09, 0x03, 0x00, 0x46, 0x11, 0x0B, 0x5A, 0x02, 0x11, 0x04, 0x00, 0xF4, 0x03, 0xFF, 0x0F, 0x05, +/* 00012A90 */ 0x00, 0x00, 0x00, 0x04, 0x00, 0x09, 0x15, 0x00, 0x8F, 0x02, 0x34, 0x0F, 0x03, 0x00, 0x4A, 0x0F, +/* 00012AA0 */ 0x14, 0x03, 0x00, 0x0B, 0x0F, 0x09, 0x05, 0x00, 0xA8, 0x0F, 0x45, 0x0B, 0x0F, 0x14, 0x03, 0x00, +/* 00012AB0 */ 0x0A, 0x09, 0x09, 0x09, 0x00, 0x45, 0x00, 0x0B, 0x09, 0x1B, 0x00, 0x09, 0x16, 0x00, 0x14, 0x03, +/* 00012AC0 */ 0x00, 0x0A, 0x0B, 0x09, 0x08, 0x00, 0xA8, 0x00, 0x09, 0x0B, 0x00, 0x09, 0x06, 0x00, 0x45, 0x00, +/* 00012AD0 */ 0x0B, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x4F, 0x03, 0xFE, 0x98, 0x01, 0xFE, 0xF4, +/* 00012AE0 */ 0x01, 0xFE, 0xC0, 0x02, 0xFE, 0x4F, 0x03, 0xFE, 0x9B, 0x01, 0xFF, 0x01, 0x6A, 0x01, 0x00, 0x11, +/* 00012AF0 */ 0x02, 0x00, 0x00, 0x00, 0x26, 0x00, 0x46, 0x00, 0x0A, 0x00, 0x30, 0x00, 0x22, 0x00, 0x44, 0x00, +/* 00012B00 */ 0x08, 0x00, 0x2F, 0x00, 0x0C, 0x00, 0x2D, 0x00, 0x14, 0x00, 0x3A, 0x00, 0x2F, 0x00, 0x52, 0x00, +/* 00012B10 */ 0x4B, 0x00, 0x0C, 0x01, 0x46, 0x00, 0x73, 0x00, 0x10, 0x00, 0x30, 0x00, 0x05, 0x00, 0x2F, 0x00, +/* 00012B20 */ 0x08, 0x00, 0x2C, 0x00, 0x09, 0x00, 0x26, 0x00, 0x08, 0x00, 0x34, 0x00, 0x08, 0x00, 0x2F, 0x00, +/* 00012B30 */ 0x08, 0x00, 0x25, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x3B, 0x08, +/* 00012B40 */ 0x1C, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xF0, 0x02, 0x7C, 0xFF, 0x63, 0x69, 0x01, 0x00, 0xFF, 0x63, +/* 00012B50 */ 0x69, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFF, 0x63, 0x69, 0x01, 0x00, 0x51, 0x51, +/* 00012B60 */ 0x05, 0x02, 0x05, 0x04, 0x0B, 0x0B, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x2B, 0x8F, +/* 00012B70 */ 0x02, 0x03, 0x06, 0x00, 0x00, 0x6D, 0x05, 0x06, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x06, 0x5A, +/* 00012B80 */ 0x01, 0x03, 0x00, 0x00, 0x5A, 0x02, 0x02, 0x00, 0x00, 0xF4, 0x03, 0x00, 0x05, 0x00, 0x00, 0x00, +/* 00012B90 */ 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xBD, 0x02, 0xFF, 0x80, 0x69, +/* 00012BA0 */ 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x33, 0x00, 0x00, 0x7F, 0x4C, 0x00, 0xC0, +/* 00012BB0 */ 0x03, 0x00, 0x03, 0x00, 0xFE, 0x35, 0x08, 0x1C, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xEF, 0x02, 0x7B, +/* 00012BC0 */ 0xFF, 0xC9, 0x68, 0x01, 0x00, 0xFF, 0xC9, 0x68, 0x01, 0x00, 0x41, 0xFE, 0x00, 0x90, 0x02, 0x02, +/* 00012BD0 */ 0xFF, 0xC9, 0x68, 0x01, 0x00, 0x7B, 0x7B, 0x02, 0x04, 0x05, 0x09, 0x09, 0x02, 0x02, 0x02, 0x02, +/* 00012BE0 */ 0x02, 0x04, 0x00, 0x00, 0x00, 0xF9, 0x7F, 0xFD, 0xDF, 0xC1, 0x04, 0x00, 0x00, 0x40, 0xFE, 0x7F, +/* 00012BF0 */ 0xFD, 0xDF, 0xC1, 0x1B, 0x5F, 0x05, 0x04, 0x00, 0x14, 0x0C, 0x00, 0x05, 0x02, 0x5F, 0x05, 0x04, +/* 00012C00 */ 0x01, 0x14, 0x03, 0x00, 0x05, 0x03, 0x09, 0x02, 0x00, 0x23, 0x04, 0xA8, 0x00, 0x24, 0x00, 0xFE, +/* 00012C10 */ 0x0C, 0x01, 0xFE, 0x0C, 0x01, 0xFF, 0xE1, 0x68, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x15, +/* 00012C20 */ 0x00, 0x4A, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x7F, 0x7C, 0x0A, 0x02, 0x00, 0x00, 0x13, 0x00, +/* 00012C30 */ 0xFE, 0x2A, 0x08, 0x1B, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xF2, 0x02, 0x7A, 0xFF, 0x70, 0x67, 0x01, +/* 00012C40 */ 0x00, 0xFF, 0x70, 0x67, 0x01, 0x00, 0x41, 0xFE, 0x00, 0x90, 0x04, 0x04, 0xFF, 0x70, 0x67, 0x01, +/* 00012C50 */ 0x00, 0xD5, 0xD5, 0x06, 0x05, 0x09, 0x03, 0x14, 0x12, 0x0F, 0x02, 0x02, 0x01, 0x01, 0x05, 0x3D, +/* 00012C60 */ 0x01, 0x00, 0x08, 0x01, 0x01, 0x41, 0x4E, 0x08, 0x45, 0x08, 0x02, 0xED, 0x00, 0xEE, 0x00, 0x12, +/* 00012C70 */ 0x03, 0x00, 0x08, 0x06, 0x09, 0x2A, 0x00, 0xBC, 0x09, 0x08, 0x05, 0x00, 0x00, 0x0E, 0x1A, 0x00, +/* 00012C80 */ 0x09, 0x45, 0x09, 0x07, 0x07, 0x02, 0x00, 0x59, 0x00, 0x03, 0x98, 0x0A, 0x05, 0x08, 0x01, 0x00, +/* 00012C90 */ 0x5A, 0x01, 0x0A, 0x00, 0x00, 0xF0, 0x02, 0xFF, 0x09, 0x00, 0x00, 0x26, 0x08, 0x08, 0x09, 0xCC, +/* 00012CA0 */ 0xFF, 0xEF, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFF, 0x97, 0x67, 0x01, 0x00, 0x06, 0x02, 0x00, 0x00, +/* 00012CB0 */ 0x00, 0x07, 0x00, 0x20, 0x00, 0x08, 0x00, 0x20, 0x00, 0x0A, 0x00, 0x26, 0x00, 0x1A, 0x00, 0x2E, +/* 00012CC0 */ 0x00, 0x0A, 0x00, 0x19, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x43, 0x50, 0x03, 0x00, 0xFE, 0x1D, +/* 00012CD0 */ 0x08, 0x22, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x68, 0x03, 0x79, 0xFF, 0xE7, 0x65, 0x01, 0x00, 0xFF, +/* 00012CE0 */ 0xE7, 0x65, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0xE7, 0x65, 0x01, 0x00, 0xFE, +/* 00012CF0 */ 0x6B, 0x01, 0xFE, 0x6B, 0x01, 0x08, 0x04, 0x08, 0x04, 0x2A, 0x27, 0x02, 0x03, 0x03, 0x02, 0x02, +/* 00012D00 */ 0x02, 0x02, 0x01, 0x07, 0x08, 0x07, 0x08, 0x9D, 0x4E, 0x05, 0x4E, 0x06, 0x8F, 0x02, 0x03, 0x0A, +/* 00012D10 */ 0x00, 0x00, 0x6D, 0x09, 0x0A, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0A, 0x5A, 0x01, 0x04, 0x00, +/* 00012D20 */ 0x00, 0xF4, 0x02, 0x09, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x05, 0x09, 0x14, 0x03, +/* 00012D30 */ 0x00, 0x05, 0x02, 0x09, 0x65, 0x00, 0x8F, 0x01, 0x11, 0x09, 0x01, 0x00, 0x4A, 0x09, 0x0F, 0x14, +/* 00012D40 */ 0x00, 0x09, 0x8F, 0x01, 0x05, 0x09, 0x02, 0x00, 0x4A, 0x09, 0x07, 0x01, 0x00, 0x59, 0x00, 0x03, +/* 00012D50 */ 0xF0, 0x01, 0xFF, 0x09, 0x01, 0x00, 0x8F, 0x02, 0x03, 0x0A, 0x00, 0x00, 0x6D, 0x09, 0x0A, 0x01, +/* 00012D60 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x0A, 0x5A, 0x01, 0x04, 0x02, 0x00, 0x8F, 0x01, 0x11, 0x0B, 0x01, +/* 00012D70 */ 0x00, 0x4A, 0x0B, 0x5A, 0x02, 0x0B, 0x02, 0x00, 0xF4, 0x03, 0x09, 0x09, 0x01, 0x00, 0x00, 0x00, +/* 00012D80 */ 0x02, 0x00, 0x45, 0x06, 0x09, 0xAD, 0x09, 0x0F, 0x02, 0x00, 0x06, 0xAC, 0x09, 0xAD, 0x00, 0x0F, +/* 00012D90 */ 0x02, 0x00, 0x09, 0xAC, 0x00, 0x09, 0x0B, 0x00, 0x09, 0x06, 0x00, 0x45, 0x00, 0x05, 0x09, 0x02, +/* 00012DA0 */ 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xED, 0x01, 0xFE, 0xC0, 0x02, 0xFF, 0x04, 0x66, 0x01, 0x00, +/* 00012DB0 */ 0x08, 0x04, 0x00, 0x00, 0x00, 0x22, 0x00, 0x40, 0x00, 0x08, 0x00, 0x23, 0x00, 0x0C, 0x00, 0x24, +/* 00012DC0 */ 0x00, 0x14, 0x00, 0x32, 0x00, 0x2F, 0x00, 0x4A, 0x00, 0x16, 0x00, 0x2D, 0x00, 0x08, 0x00, 0x1D, +/* 00012DD0 */ 0x00, 0x00, 0x7F, 0x5C, 0x18, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x10, 0x08, 0x1F, 0xA2, 0x41, +/* 00012DE0 */ 0xC1, 0x00, 0xFE, 0x67, 0x03, 0x78, 0xFF, 0xD8, 0x63, 0x01, 0x00, 0xFF, 0xD8, 0x63, 0x01, 0x00, +/* 00012DF0 */ 0x41, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFF, 0xD8, 0x63, 0x01, 0x00, 0xFE, 0xEA, 0x01, 0xFE, 0xEA, +/* 00012E00 */ 0x01, 0x06, 0x05, 0x09, 0x04, 0x14, 0x12, 0x02, 0x01, 0x01, 0x01, 0x03, 0x03, 0x03, 0x03, 0x08, +/* 00012E10 */ 0x07, 0x06, 0xFE, 0x47, 0x03, 0x05, 0xFE, 0x9A, 0x04, 0x4D, 0x4E, 0x07, 0x8F, 0x02, 0x03, 0x0A, +/* 00012E20 */ 0x00, 0x00, 0x6D, 0x09, 0x0A, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0A, 0x5A, 0x01, 0x05, 0x00, +/* 00012E30 */ 0x00, 0x5A, 0x02, 0x06, 0x00, 0x00, 0xF4, 0x03, 0x09, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00012E40 */ 0x45, 0x07, 0x09, 0x14, 0x03, 0x00, 0x07, 0x02, 0x09, 0x18, 0x00, 0x77, 0x03, 0x05, 0x01, 0x45, +/* 00012E50 */ 0x09, 0x05, 0xD0, 0x0A, 0x02, 0x00, 0x00, 0xA1, 0x00, 0x04, 0x0A, 0xA1, 0x01, 0x03, 0x0A, 0x77, +/* 00012E60 */ 0x0A, 0x09, 0x02, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xFA, 0x01, 0xFE, 0x3D, 0x02, 0xFE, 0x62, 0x02, +/* 00012E70 */ 0xFF, 0x07, 0x64, 0x01, 0x00, 0x05, 0x02, 0x00, 0x00, 0x00, 0x27, 0x00, 0x4F, 0x00, 0x08, 0x00, +/* 00012E80 */ 0x71, 0x00, 0x04, 0x00, 0x33, 0x00, 0x16, 0x00, 0xC7, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x03, +/* 00012E90 */ 0x10, 0x03, 0x00, 0xFE, 0xFF, 0x07, 0x1D, 0xA0, 0x41, 0xC1, 0x00, 0xFE, 0x53, 0x03, 0x77, 0xFF, +/* 00012EA0 */ 0xED, 0x61, 0x01, 0x00, 0xFF, 0xED, 0x61, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFF, +/* 00012EB0 */ 0xED, 0x61, 0x01, 0x00, 0xFE, 0xC9, 0x01, 0xFE, 0xC9, 0x01, 0x04, 0x03, 0x05, 0x02, 0x1A, 0x19, +/* 00012EC0 */ 0x02, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x04, 0x05, 0xFE, 0x93, 0x03, 0x66, 0x4E, 0x03, 0x8F, +/* 00012ED0 */ 0x01, 0x09, 0x05, 0x00, 0x00, 0x4A, 0x05, 0x0E, 0x19, 0x00, 0x05, 0x8F, 0x02, 0x03, 0x05, 0x01, +/* 00012EE0 */ 0x00, 0x5F, 0x05, 0x05, 0x00, 0x0E, 0x0B, 0x00, 0x05, 0x8F, 0x01, 0x09, 0x00, 0x00, 0x00, 0x4A, +/* 00012EF0 */ 0x00, 0x09, 0x3D, 0x00, 0x8F, 0x02, 0x03, 0x06, 0x01, 0x00, 0x6D, 0x05, 0x06, 0x01, 0x07, 0x01, +/* 00012F00 */ 0x00, 0x59, 0x00, 0x06, 0xF4, 0x01, 0x05, 0x05, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x03, +/* 00012F10 */ 0x05, 0x0F, 0x09, 0x00, 0x03, 0x01, 0x43, 0x01, 0x01, 0x09, 0x02, 0x09, 0x06, 0x00, 0x01, 0x43, +/* 00012F20 */ 0x01, 0x01, 0x09, 0x03, 0x8F, 0x01, 0x09, 0x00, 0x00, 0x00, 0x4A, 0x00, 0x09, 0x02, 0x00, 0xA8, +/* 00012F30 */ 0x00, 0x24, 0x00, 0xFE, 0x4D, 0x03, 0xFE, 0xF5, 0x01, 0xFF, 0x03, 0x62, 0x01, 0x00, 0x08, 0x02, +/* 00012F40 */ 0x00, 0x00, 0x00, 0x1A, 0x00, 0x39, 0x00, 0x0B, 0x00, 0x2B, 0x00, 0x1D, 0x00, 0x34, 0x00, 0x04, +/* 00012F50 */ 0x00, 0x9C, 0x00, 0x09, 0x00, 0x35, 0x00, 0x06, 0x00, 0x2D, 0x00, 0x0D, 0x00, 0x1C, 0x00, 0x00, +/* 00012F60 */ 0x7E, 0x5D, 0x08, 0xC1, 0x13, 0x1A, 0x4B, 0x00, 0xFE, 0x4D, 0x07, 0x19, 0xA0, 0x41, 0xD1, 0x00, +/* 00012F70 */ 0x6F, 0xFF, 0x42, 0x48, 0x01, 0x00, 0xFF, 0x42, 0x48, 0x01, 0x00, 0x06, 0xFE, 0x00, 0x90, 0x01, +/* 00012F80 */ 0x01, 0xFF, 0x42, 0x48, 0x01, 0x00, 0xFE, 0x4D, 0x15, 0xFE, 0x4D, 0x15, 0x03, 0xFE, 0x8B, 0x04, +/* 00012F90 */ 0xFE, 0x8C, 0x04, 0xFE, 0x8D, 0x04, 0x0B, 0x14, 0x1B, 0x05, 0x87, 0x82, 0x02, 0x09, 0x05, 0x19, +/* 00012FA0 */ 0x19, 0x19, 0x19, 0x05, 0x18, 0x19, 0x1A, 0x06, 0xFE, 0x27, 0x03, 0x07, 0x05, 0xFE, 0x8E, 0x04, +/* 00012FB0 */ 0x08, 0x06, 0xFE, 0xEC, 0x03, 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, 0x2B, 0x03, 0x0C, 0x06, 0xFE, +/* 00012FC0 */ 0x2C, 0x03, 0x06, 0xFE, 0x2D, 0x03, 0x06, 0xFE, 0xED, 0x03, 0x0B, 0x05, 0xFE, 0x8F, 0x04, 0x06, +/* 00012FD0 */ 0xFE, 0x38, 0x03, 0x05, 0xFE, 0x90, 0x04, 0x06, 0xFE, 0x91, 0x04, 0x05, 0xFE, 0x92, 0x04, 0x06, +/* 00012FE0 */ 0xFE, 0xEE, 0x03, 0xFE, 0x4F, 0x02, 0x4E, 0x14, 0x4E, 0x15, 0x4E, 0x16, 0x4E, 0x17, 0x4E, 0x1B, +/* 00012FF0 */ 0x96, 0x02, 0x1B, 0x4E, 0x1B, 0x96, 0x03, 0x1B, 0x4E, 0x1B, 0x96, 0x04, 0x1B, 0x8F, 0x02, 0x32, +/* 00013000 */ 0x1B, 0x00, 0x00, 0x15, 0x03, 0x00, 0x1B, 0x02, 0x09, 0x05, 0x00, 0xA8, 0x00, 0x09, 0x23, 0x02, +/* 00013010 */ 0xD6, 0x00, 0x1B, 0x96, 0x02, 0x1B, 0xD6, 0x01, 0x1B, 0x96, 0x03, 0x1B, 0xCD, 0x1B, 0x96, 0x04, +/* 00013020 */ 0x1B, 0x8F, 0x02, 0x23, 0x1B, 0x01, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x05, 0x5A, 0x01, 0x04, +/* 00013030 */ 0x00, 0x00, 0xD6, 0x02, 0x1C, 0x5A, 0x02, 0x1C, 0x00, 0x00, 0xF0, 0x03, 0x1B, 0x1B, 0x00, 0x00, +/* 00013040 */ 0x45, 0x14, 0x1B, 0x8F, 0x02, 0x36, 0x1C, 0x02, 0x00, 0x4A, 0x1C, 0x6D, 0x1B, 0x1C, 0x00, 0x07, +/* 00013050 */ 0x04, 0x00, 0x59, 0x00, 0x1C, 0x5A, 0x01, 0x14, 0x01, 0x00, 0x5A, 0x02, 0x06, 0x01, 0x00, 0xCE, +/* 00013060 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0x93, 0x04, 0x1E, 0x03, +/* 00013070 */ 0x00, 0x7B, 0x1E, 0x1D, 0x01, 0x7B, 0x09, 0x1D, 0x02, 0x7B, 0x09, 0x1D, 0x03, 0x7B, 0x09, 0x1D, +/* 00013080 */ 0x04, 0x5A, 0x03, 0x1D, 0x01, 0x00, 0xF4, 0x04, 0xFF, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, +/* 00013090 */ 0x8F, 0x02, 0x36, 0x1C, 0x02, 0x00, 0x4A, 0x1C, 0x6D, 0x1B, 0x1C, 0x05, 0x07, 0x04, 0x00, 0x59, +/* 000130A0 */ 0x00, 0x1C, 0x93, 0x04, 0x1D, 0x03, 0x00, 0x5A, 0x01, 0x1D, 0x02, 0x00, 0x5A, 0x02, 0x0C, 0x02, +/* 000130B0 */ 0x00, 0xCE, 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0x7B, 0x14, +/* 000130C0 */ 0x1D, 0x06, 0x7B, 0x0D, 0x1D, 0x07, 0x7B, 0x09, 0x1D, 0x08, 0x7B, 0x0D, 0x1D, 0x09, 0x5A, 0x03, +/* 000130D0 */ 0x1D, 0x02, 0x00, 0xF4, 0x04, 0xFF, 0x1B, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x8F, 0x01, 0x06, +/* 000130E0 */ 0x1B, 0x04, 0x00, 0x4A, 0x1B, 0x07, 0x03, 0x00, 0x59, 0x00, 0x05, 0x5A, 0x01, 0x0E, 0x03, 0x00, +/* 000130F0 */ 0xD6, 0x03, 0x1C, 0x5A, 0x02, 0x1C, 0x03, 0x00, 0xF0, 0x03, 0x1B, 0x1B, 0x03, 0x00, 0x45, 0x15, +/* 00013100 */ 0x1B, 0x8F, 0x02, 0x36, 0x1C, 0x02, 0x00, 0x4A, 0x1C, 0x6D, 0x1B, 0x1C, 0x0A, 0x07, 0x04, 0x00, +/* 00013110 */ 0x59, 0x00, 0x1C, 0x5A, 0x01, 0x14, 0x04, 0x00, 0x5A, 0x02, 0x0F, 0x04, 0x00, 0xCE, 0x30, 0x00, +/* 00013120 */ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0x7B, 0x15, 0x1D, 0x0B, 0x7B, 0x0D, +/* 00013130 */ 0x1D, 0x0C, 0x7B, 0x09, 0x1D, 0x0D, 0x7B, 0x0D, 0x1D, 0x0E, 0x5A, 0x03, 0x1D, 0x04, 0x00, 0xF4, +/* 00013140 */ 0x04, 0xFF, 0x1B, 0x0A, 0x00, 0x00, 0x00, 0x04, 0x00, 0x8F, 0x01, 0x06, 0x1B, 0x04, 0x00, 0x4A, +/* 00013150 */ 0x1B, 0x07, 0x03, 0x00, 0x59, 0x00, 0x05, 0x5A, 0x01, 0x10, 0x05, 0x00, 0xD6, 0x04, 0x1C, 0x5A, +/* 00013160 */ 0x02, 0x1C, 0x05, 0x00, 0xF0, 0x03, 0x1B, 0x1B, 0x05, 0x00, 0x45, 0x16, 0x1B, 0x8F, 0x02, 0x36, +/* 00013170 */ 0x1C, 0x02, 0x00, 0x4A, 0x1C, 0x6D, 0x1B, 0x1C, 0x0F, 0x07, 0x04, 0x00, 0x59, 0x00, 0x1C, 0x93, +/* 00013180 */ 0x04, 0x1D, 0x03, 0x00, 0x5A, 0x01, 0x1D, 0x06, 0x00, 0x5A, 0x02, 0x11, 0x06, 0x00, 0xCE, 0x48, +/* 00013190 */ 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0x7B, 0x16, 0x1D, 0x10, 0x7B, +/* 000131A0 */ 0x09, 0x1D, 0x11, 0x7B, 0x0D, 0x1D, 0x12, 0x7B, 0x0D, 0x1D, 0x13, 0x5A, 0x03, 0x1D, 0x06, 0x00, +/* 000131B0 */ 0xF4, 0x04, 0xFF, 0x1B, 0x0F, 0x00, 0x00, 0x00, 0x06, 0x00, 0x8F, 0x01, 0x06, 0x1B, 0x04, 0x00, +/* 000131C0 */ 0x4A, 0x1B, 0x07, 0x03, 0x00, 0x59, 0x00, 0x05, 0x5A, 0x01, 0x12, 0x07, 0x00, 0xD6, 0x05, 0x1C, +/* 000131D0 */ 0x5A, 0x02, 0x1C, 0x07, 0x00, 0xF0, 0x03, 0x1B, 0x1B, 0x07, 0x00, 0x45, 0x17, 0x1B, 0x8F, 0x02, +/* 000131E0 */ 0x36, 0x1C, 0x02, 0x00, 0x4A, 0x1C, 0x6D, 0x1B, 0x1C, 0x14, 0x07, 0x04, 0x00, 0x59, 0x00, 0x1C, +/* 000131F0 */ 0x93, 0x04, 0x1D, 0x03, 0x00, 0x5A, 0x01, 0x1D, 0x08, 0x00, 0x5A, 0x02, 0x13, 0x08, 0x00, 0xCE, +/* 00013200 */ 0x60, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0x7B, 0x17, 0x1D, 0x15, +/* 00013210 */ 0x7B, 0x09, 0x1D, 0x16, 0x7B, 0x0D, 0x1D, 0x17, 0x7B, 0x0D, 0x1D, 0x18, 0x5A, 0x03, 0x1D, 0x08, +/* 00013220 */ 0x00, 0xF4, 0x04, 0xFF, 0x1B, 0x14, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00, 0x14, 0x09, 0x02, +/* 00013230 */ 0x00, 0xA8, 0x00, 0x24, 0x00, 0x05, 0x78, 0x00, 0x60, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, +/* 00013240 */ 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, +/* 00013250 */ 0x96, 0x01, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00013260 */ 0x97, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, +/* 00013270 */ 0x30, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, +/* 00013280 */ 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, +/* 00013290 */ 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, +/* 000132A0 */ 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, +/* 000132B0 */ 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, +/* 000132C0 */ 0x95, 0x01, 0x00, 0x00, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, +/* 000132D0 */ 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, +/* 000132E0 */ 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, +/* 000132F0 */ 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x96, 0x01, +/* 00013300 */ 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x96, 0x01, 0xFF, +/* 00013310 */ 0x57, 0x48, 0x01, 0x00, 0x10, 0x17, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x27, 0x00, 0x05, 0x00, 0x23, +/* 00013320 */ 0x01, 0x06, 0x00, 0x02, 0x05, 0x06, 0x00, 0xD6, 0x00, 0x05, 0x00, 0x7A, 0x00, 0x22, 0x00, 0x85, +/* 00013330 */ 0x02, 0x4D, 0x00, 0xC8, 0x00, 0x4D, 0x00, 0xC7, 0x00, 0x24, 0x00, 0x12, 0x01, 0x48, 0x00, 0x09, +/* 00013340 */ 0x01, 0x24, 0x00, 0xAC, 0x01, 0x4D, 0x00, 0xBE, 0x00, 0x24, 0x00, 0x1A, 0x04, 0x4D, 0x00, 0xD0, +/* 00013350 */ 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, 0x3B, 0x39, 0x01, 0x00, 0x8C, 0x38, 0x01, 0x00, 0x28, 0x37, +/* 00013360 */ 0x01, 0x00, 0x80, 0x36, 0x01, 0x00, 0x6F, 0x35, 0x01, 0x00, 0x6E, 0x33, 0x01, 0x00, 0x7F, 0x5D, +/* 00013370 */ 0x18, 0xC1, 0x03, 0x1A, 0x0B, 0x00, 0xFE, 0xBC, 0x07, 0x61, 0xA0, 0x41, 0xC3, 0x00, 0xFE, 0xEE, +/* 00013380 */ 0x03, 0x75, 0xFF, 0xE5, 0x58, 0x01, 0x00, 0xFF, 0xE5, 0x58, 0x01, 0x00, 0x01, 0x08, 0xFE, 0x00, +/* 00013390 */ 0x90, 0x01, 0x01, 0xFF, 0xE5, 0x58, 0x01, 0x00, 0xFE, 0xB6, 0x03, 0xFE, 0xB6, 0x03, 0x01, 0xFE, +/* 000133A0 */ 0x99, 0x04, 0x06, 0x0D, 0x11, 0x05, 0x2D, 0x2D, 0x03, 0x03, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, +/* 000133B0 */ 0x0E, 0x0F, 0x10, 0x05, 0xFE, 0x90, 0x04, 0x06, 0xFE, 0x31, 0x03, 0x06, 0xFE, 0xD7, 0x03, 0x06, +/* 000133C0 */ 0xFE, 0x93, 0x04, 0x06, 0xFE, 0xDA, 0x03, 0x06, 0xFE, 0xDB, 0x03, 0x06, 0xFE, 0xDC, 0x03, 0x06, +/* 000133D0 */ 0xFE, 0xDD, 0x03, 0x06, 0xFE, 0xDE, 0x03, 0x06, 0xFE, 0x96, 0x04, 0x08, 0xBA, 0x58, 0x0D, 0x4E, +/* 000133E0 */ 0x11, 0x96, 0x02, 0x11, 0x8F, 0x03, 0x03, 0x12, 0x00, 0x00, 0x6D, 0x11, 0x12, 0x00, 0x07, 0x02, +/* 000133F0 */ 0x00, 0x59, 0x00, 0x12, 0x5A, 0x01, 0x0D, 0x00, 0x00, 0xF4, 0x02, 0x11, 0x11, 0x00, 0x00, 0x00, +/* 00013400 */ 0x00, 0x00, 0x00, 0x96, 0x02, 0x11, 0x93, 0x02, 0x11, 0x01, 0x00, 0x0E, 0x0D, 0x00, 0x11, 0x93, +/* 00013410 */ 0x02, 0x11, 0x01, 0x00, 0x5F, 0x11, 0x11, 0x01, 0x0F, 0x24, 0x00, 0x11, 0x8F, 0x03, 0x03, 0x12, +/* 00013420 */ 0x00, 0x00, 0x6D, 0x11, 0x12, 0x02, 0x07, 0x03, 0x00, 0x59, 0x00, 0x12, 0x5A, 0x01, 0x02, 0x01, +/* 00013430 */ 0x00, 0x5A, 0x02, 0x03, 0x01, 0x00, 0xF4, 0x03, 0xFF, 0x11, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, +/* 00013440 */ 0x8F, 0x02, 0x17, 0x11, 0x02, 0x00, 0x4A, 0x11, 0x07, 0x04, 0x00, 0x59, 0x00, 0x0C, 0xD0, 0x12, +/* 00013450 */ 0x08, 0x00, 0x00, 0xA1, 0x00, 0x04, 0x12, 0xA1, 0x01, 0x05, 0x12, 0xA1, 0x02, 0x06, 0x12, 0xA1, +/* 00013460 */ 0x03, 0x07, 0x12, 0xA1, 0x04, 0x08, 0x12, 0xA1, 0x05, 0x09, 0x12, 0xA1, 0x06, 0x0A, 0x12, 0xA1, +/* 00013470 */ 0x07, 0x0B, 0x12, 0x5A, 0x01, 0x12, 0x02, 0x00, 0x93, 0x02, 0x12, 0x01, 0x00, 0x5A, 0x02, 0x12, +/* 00013480 */ 0x02, 0x00, 0xD6, 0x00, 0x12, 0x5A, 0x03, 0x12, 0x02, 0x00, 0xF0, 0x04, 0x00, 0x11, 0x02, 0x00, +/* 00013490 */ 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x05, 0x02, 0xFE, 0x97, 0x04, 0xFE, 0xB6, 0x02, +/* 000134A0 */ 0xFF, 0x0E, 0x59, 0x01, 0x00, 0x05, 0x07, 0x00, 0x00, 0x00, 0x22, 0x00, 0x37, 0x00, 0x16, 0x00, +/* 000134B0 */ 0x39, 0x00, 0x24, 0x00, 0x6F, 0x00, 0x55, 0x00, 0xAD, 0x02, 0x00, 0xBF, 0x34, 0x01, 0x00, 0x7F, +/* 000134C0 */ 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x07, 0x00, 0xFE, 0xCB, 0x07, 0x13, 0xA2, 0x41, 0xD0, 0x00, 0x76, +/* 000134D0 */ 0xFE, 0x01, 0x10, 0xFF, 0x46, 0x5B, 0x01, 0x00, 0xFF, 0x46, 0x5B, 0x01, 0x00, 0x01, 0xFE, 0x00, +/* 000134E0 */ 0x90, 0x03, 0x03, 0xFF, 0x46, 0x5B, 0x01, 0x00, 0xFE, 0x49, 0x01, 0xFE, 0x49, 0x01, 0x07, 0x05, +/* 000134F0 */ 0x08, 0x04, 0x14, 0x12, 0x04, 0x01, 0x02, 0x03, 0x03, 0x03, 0x03, 0x07, 0x06, 0xFE, 0x96, 0x04, +/* 00013500 */ 0x01, 0x00, 0x0B, 0x4B, 0x14, 0x03, 0x00, 0x05, 0x02, 0x09, 0x3F, 0x00, 0x45, 0x08, 0x06, 0x8F, +/* 00013510 */ 0x04, 0x36, 0x0A, 0x00, 0x00, 0x4A, 0x0A, 0x6D, 0x09, 0x0A, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 00013520 */ 0x0A, 0x8F, 0x01, 0x02, 0x0B, 0x01, 0x00, 0x4A, 0x0B, 0x5F, 0x0B, 0x0B, 0x01, 0x5A, 0x01, 0x0B, +/* 00013530 */ 0x00, 0x00, 0x5A, 0x02, 0x03, 0x00, 0x00, 0xF4, 0x03, 0x09, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00013540 */ 0x00, 0x77, 0x09, 0x08, 0x02, 0x45, 0x00, 0x04, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, +/* 00013550 */ 0x50, 0x01, 0xFE, 0x96, 0x04, 0xFE, 0x96, 0x04, 0xFF, 0x6C, 0x5B, 0x01, 0x00, 0x04, 0x00, 0x00, +/* 00013560 */ 0x00, 0x00, 0x08, 0x00, 0xA6, 0x00, 0x39, 0x00, 0x51, 0x00, 0x08, 0x00, 0x2B, 0x00, 0x00, 0x7F, +/* 00013570 */ 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0xAC, 0x07, 0x4F, 0xA2, 0x41, 0xC3, 0x00, 0xFE, +/* 00013580 */ 0x91, 0x04, 0x74, 0xFF, 0x69, 0x56, 0x01, 0x00, 0xFF, 0x69, 0x56, 0x01, 0x00, 0x09, 0xFE, 0x00, +/* 00013590 */ 0x90, 0x02, 0x02, 0xFF, 0x69, 0x56, 0x01, 0x00, 0xFE, 0x5A, 0x01, 0xFE, 0x5A, 0x01, 0x07, 0x05, +/* 000135A0 */ 0x0A, 0x04, 0x26, 0x24, 0x03, 0x04, 0x03, 0x04, 0x04, 0x04, 0x04, 0x09, 0x05, 0xFE, 0x90, 0x04, +/* 000135B0 */ 0x06, 0xFE, 0x31, 0x03, 0x08, 0x9F, 0x58, 0x06, 0x4E, 0x07, 0x4E, 0x08, 0x8F, 0x03, 0x03, 0x0B, +/* 000135C0 */ 0x00, 0x00, 0x6D, 0x0A, 0x0B, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0B, 0x5A, 0x01, 0x06, 0x00, +/* 000135D0 */ 0x00, 0xF4, 0x02, 0x0A, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x07, 0x0A, 0x0E, 0x08, +/* 000135E0 */ 0x00, 0x07, 0x5F, 0x0A, 0x07, 0x01, 0x0F, 0x24, 0x00, 0x0A, 0x8F, 0x03, 0x03, 0x0B, 0x00, 0x00, +/* 000135F0 */ 0x6D, 0x0A, 0x0B, 0x02, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0B, 0x5A, 0x01, 0x02, 0x01, 0x00, 0x5A, +/* 00013600 */ 0x02, 0x03, 0x01, 0x00, 0xF4, 0x03, 0xFF, 0x0A, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x8F, 0x03, +/* 00013610 */ 0x24, 0x0B, 0x01, 0x00, 0x6D, 0x0A, 0x0B, 0x03, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0B, 0x5A, 0x01, +/* 00013620 */ 0x05, 0x02, 0x00, 0xF4, 0x02, 0x0A, 0x0A, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x45, 0x08, 0x0A, +/* 00013630 */ 0x8F, 0x01, 0x03, 0x0A, 0x02, 0x00, 0x4A, 0x0A, 0x07, 0x03, 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, +/* 00013640 */ 0x07, 0x03, 0x00, 0x5A, 0x02, 0x08, 0x03, 0x00, 0xF0, 0x03, 0x00, 0x0A, 0x03, 0x00, 0x09, 0x02, +/* 00013650 */ 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x05, 0x02, 0xFE, 0x97, 0x04, 0xFE, 0xB6, 0x02, 0xFE, 0x23, +/* 00013660 */ 0x03, 0xFF, 0x8E, 0x56, 0x01, 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 0x22, 0x00, 0x37, 0x00, 0x0C, +/* 00013670 */ 0x00, 0x39, 0x00, 0x24, 0x00, 0x6F, 0x00, 0x22, 0x00, 0x30, 0x00, 0x23, 0x00, 0x25, 0x00, 0x00, +/* 00013680 */ 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0xA1, 0x07, 0x5D, 0xA2, 0x41, 0xC3, 0x00, +/* 00013690 */ 0xFE, 0x38, 0x03, 0x73, 0xFF, 0x5C, 0x54, 0x01, 0x00, 0xFF, 0x5C, 0x54, 0x01, 0x00, 0x01, 0xFE, +/* 000136A0 */ 0x00, 0x90, 0x03, 0x02, 0xFF, 0x5C, 0x54, 0x01, 0x00, 0xB2, 0xB2, 0x05, 0x03, 0x06, 0x08, 0x17, +/* 000136B0 */ 0x16, 0x03, 0x02, 0x03, 0x01, 0x01, 0x01, 0x01, 0x05, 0x08, 0x57, 0x15, 0x05, 0x00, 0x04, 0x02, +/* 000136C0 */ 0xA8, 0x06, 0x45, 0x04, 0x06, 0x8F, 0x02, 0x16, 0x06, 0x00, 0x00, 0x4A, 0x06, 0x07, 0x04, 0x00, +/* 000136D0 */ 0x59, 0x00, 0x02, 0x8F, 0x03, 0x03, 0x07, 0x01, 0x00, 0x5F, 0x07, 0x07, 0x00, 0x5A, 0x01, 0x07, +/* 000136E0 */ 0x00, 0x00, 0x8F, 0x02, 0x12, 0x07, 0x02, 0x00, 0x4A, 0x07, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, +/* 000136F0 */ 0x5A, 0x01, 0x03, 0x01, 0x00, 0xF0, 0x02, 0x07, 0x07, 0x01, 0x00, 0x5A, 0x02, 0x07, 0x00, 0x00, +/* 00013700 */ 0x5A, 0x03, 0x04, 0x00, 0x00, 0xF0, 0x04, 0x00, 0x06, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, +/* 00013710 */ 0x24, 0x00, 0xFE, 0xF2, 0x01, 0xFF, 0x81, 0x54, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x0A, +/* 00013720 */ 0x00, 0x23, 0x00, 0x4B, 0x00, 0x69, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x03, 0x00, +/* 00013730 */ 0xFE, 0x83, 0x07, 0x42, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x31, 0x03, 0x72, 0xFF, 0x2D, 0x50, 0x01, +/* 00013740 */ 0x00, 0xFF, 0x2D, 0x50, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x01, 0xFF, 0x2D, 0x50, 0x01, +/* 00013750 */ 0x00, 0xFE, 0x0A, 0x02, 0xFE, 0x0A, 0x02, 0x08, 0x05, 0x0B, 0x05, 0x3A, 0x35, 0x03, 0x05, 0x05, +/* 00013760 */ 0x03, 0x03, 0x03, 0x03, 0x0A, 0x08, 0x05, 0xFE, 0x8E, 0x04, 0x06, 0xFE, 0x31, 0x03, 0xE7, 0x01, +/* 00013770 */ 0x5D, 0x01, 0x07, 0x4E, 0x08, 0x4E, 0x09, 0x15, 0x05, 0x00, 0x05, 0x02, 0xA8, 0x0B, 0x45, 0x05, +/* 00013780 */ 0x0B, 0x15, 0x05, 0x00, 0x06, 0x02, 0xA8, 0x0B, 0x45, 0x06, 0x0B, 0x4E, 0x08, 0x4E, 0x09, 0xA8, +/* 00013790 */ 0x0B, 0x14, 0x03, 0x00, 0x07, 0x0B, 0x09, 0x24, 0x00, 0x8F, 0x03, 0x03, 0x0C, 0x00, 0x00, 0x6D, +/* 000137A0 */ 0x0B, 0x0C, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0C, 0x5A, 0x01, 0x03, 0x00, 0x00, 0x5A, 0x02, +/* 000137B0 */ 0x04, 0x00, 0x00, 0xF4, 0x03, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x02, 0x07, +/* 000137C0 */ 0x0B, 0x01, 0x00, 0x4A, 0x0B, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x07, 0x01, 0x00, +/* 000137D0 */ 0x8F, 0x01, 0x04, 0x0C, 0x02, 0x00, 0x4A, 0x0C, 0x5A, 0x02, 0x0C, 0x01, 0x00, 0xF0, 0x03, 0x0B, +/* 000137E0 */ 0x0B, 0x01, 0x00, 0x45, 0x08, 0x0B, 0x8F, 0x03, 0x36, 0x0C, 0x03, 0x00, 0x4A, 0x0C, 0x6D, 0x0B, +/* 000137F0 */ 0x0C, 0x01, 0x07, 0x01, 0x00, 0x59, 0x00, 0x0C, 0xF4, 0x01, 0x0B, 0x0B, 0x01, 0x00, 0x00, 0x00, +/* 00013800 */ 0x02, 0x00, 0x45, 0x09, 0x0B, 0x8F, 0x03, 0x03, 0x0C, 0x00, 0x00, 0x6D, 0x0B, 0x0C, 0x02, 0x07, +/* 00013810 */ 0x03, 0x00, 0x59, 0x00, 0x0C, 0x5A, 0x01, 0x08, 0x03, 0x00, 0x5A, 0x02, 0x09, 0x03, 0x00, 0xF4, +/* 00013820 */ 0x03, 0xFF, 0x0B, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x8F, 0x01, 0x02, 0x0B, 0x04, 0x00, 0x4A, +/* 00013830 */ 0x0B, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x09, 0x04, 0x00, 0x5A, 0x02, 0x05, 0x04, +/* 00013840 */ 0x00, 0x5A, 0x03, 0x06, 0x04, 0x00, 0xF0, 0x04, 0xFF, 0x0B, 0x04, 0x00, 0x45, 0x00, 0x08, 0x09, +/* 00013850 */ 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB6, 0x02, 0x69, 0xFE, 0x06, 0x02, 0xFF, 0x42, 0x50, +/* 00013860 */ 0x01, 0x00, 0x0A, 0x08, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0E, 0x00, 0x23, 0x00, 0x0A, +/* 00013870 */ 0x00, 0x30, 0x00, 0x24, 0x00, 0x5E, 0x00, 0x29, 0x00, 0x62, 0x00, 0x1F, 0x00, 0x2C, 0x00, 0x24, +/* 00013880 */ 0x00, 0x41, 0x00, 0x23, 0x00, 0x43, 0x00, 0x08, 0x00, 0x1C, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0xC1, +/* 00013890 */ 0x03, 0x10, 0x03, 0x00, 0xFE, 0x78, 0x07, 0x1E, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x8C, 0x04, 0x71, +/* 000138A0 */ 0xFF, 0xB9, 0x4E, 0x01, 0x00, 0xFF, 0xB9, 0x4E, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, +/* 000138B0 */ 0xFF, 0xB9, 0x4E, 0x01, 0x00, 0xB5, 0xB5, 0x05, 0x03, 0x06, 0x04, 0x15, 0x14, 0x03, 0x02, 0x02, +/* 000138C0 */ 0x02, 0x02, 0x02, 0x02, 0x05, 0x05, 0xFE, 0x98, 0x04, 0x56, 0x8F, 0x03, 0x36, 0x07, 0x00, 0x00, +/* 000138D0 */ 0x4A, 0x07, 0x6D, 0x06, 0x07, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x07, 0x5A, 0x01, 0x04, 0x00, +/* 000138E0 */ 0x00, 0xF4, 0x02, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x06, 0x00, 0x06, 0x45, +/* 000138F0 */ 0x00, 0x02, 0x09, 0x29, 0x00, 0x8F, 0x03, 0x03, 0x07, 0x01, 0x00, 0x6D, 0x06, 0x07, 0x01, 0x07, +/* 00013900 */ 0x03, 0x00, 0x59, 0x00, 0x07, 0x5A, 0x01, 0x03, 0x01, 0x00, 0x5A, 0x02, 0x04, 0x01, 0x00, 0xF4, +/* 00013910 */ 0x03, 0x00, 0x06, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, +/* 00013920 */ 0xC1, 0xFE, 0x02, 0x02, 0xFF, 0xE1, 0x4E, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x25, 0x00, +/* 00013930 */ 0x26, 0x00, 0x06, 0x00, 0x2B, 0x00, 0x29, 0x00, 0x3B, 0x00, 0x00, 0x7F, 0x5C, 0x18, 0xC1, 0x03, +/* 00013940 */ 0x10, 0x03, 0x00, 0xFE, 0x5B, 0x07, 0x26, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x8B, 0x04, 0x70, 0xFF, +/* 00013950 */ 0xBF, 0x49, 0x01, 0x00, 0xFF, 0xBF, 0x49, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x04, 0x04, 0xFF, +/* 00013960 */ 0xBF, 0x49, 0x01, 0x00, 0xFE, 0xAF, 0x03, 0xFE, 0xAF, 0x03, 0x0A, 0x0D, 0x14, 0x07, 0x67, 0x5F, +/* 00013970 */ 0x03, 0x09, 0x03, 0x07, 0x0B, 0x0B, 0x0B, 0x0B, 0x13, 0x08, 0x06, 0xFE, 0xE0, 0x03, 0x06, 0xFE, +/* 00013980 */ 0xA3, 0x03, 0x05, 0xFE, 0x9C, 0x03, 0x05, 0xFE, 0xDF, 0x03, 0x06, 0xFE, 0x93, 0x04, 0x05, 0xFE, +/* 00013990 */ 0x94, 0x04, 0x05, 0xFE, 0x95, 0x04, 0x01, 0x00, 0x01, 0x03, 0x0B, 0xFE, 0xAF, 0x01, 0x4E, 0x10, +/* 000139A0 */ 0x4E, 0x11, 0x4E, 0x12, 0x8F, 0x02, 0x12, 0x14, 0x00, 0x00, 0x4A, 0x14, 0x07, 0x02, 0x00, 0x59, +/* 000139B0 */ 0x00, 0x02, 0x5A, 0x01, 0x0E, 0x00, 0x00, 0xF0, 0x02, 0x14, 0x14, 0x00, 0x00, 0x45, 0x10, 0x14, +/* 000139C0 */ 0xA8, 0x14, 0x14, 0x03, 0x00, 0x0F, 0x14, 0x09, 0x22, 0x00, 0x8F, 0x03, 0x36, 0x16, 0x01, 0x00, +/* 000139D0 */ 0x4A, 0x16, 0x6D, 0x15, 0x16, 0x00, 0x07, 0x01, 0x00, 0x59, 0x00, 0x16, 0xF4, 0x01, 0x15, 0x15, +/* 000139E0 */ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, 0x14, 0x15, 0x09, 0x22, 0x00, 0x8F, 0x03, 0x24, 0x16, +/* 000139F0 */ 0x02, 0x00, 0x6D, 0x15, 0x16, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x16, 0x5A, 0x01, 0x0F, 0x02, +/* 00013A00 */ 0x00, 0xF4, 0x02, 0x15, 0x15, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x46, 0x14, 0x15, 0x45, 0x0F, +/* 00013A10 */ 0x14, 0x8F, 0x03, 0x36, 0x15, 0x01, 0x00, 0x4A, 0x15, 0x6D, 0x14, 0x15, 0x02, 0x07, 0x01, 0x00, +/* 00013A20 */ 0x59, 0x00, 0x15, 0xF4, 0x01, 0x14, 0x14, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x45, 0x11, 0x14, +/* 00013A30 */ 0x45, 0x14, 0x11, 0x8F, 0x02, 0x02, 0x15, 0x03, 0x00, 0x4A, 0x15, 0x07, 0x06, 0x00, 0x59, 0x00, +/* 00013A40 */ 0x02, 0x5A, 0x01, 0x0F, 0x04, 0x00, 0x5A, 0x02, 0x03, 0x04, 0x00, 0x5A, 0x03, 0x04, 0x04, 0x00, +/* 00013A50 */ 0xD0, 0x16, 0x02, 0x00, 0x00, 0xA1, 0x00, 0x05, 0x16, 0xA1, 0x01, 0x06, 0x16, 0x5A, 0x04, 0x16, +/* 00013A60 */ 0x04, 0x00, 0x5A, 0x05, 0x06, 0x04, 0x00, 0xF0, 0x06, 0x15, 0x15, 0x04, 0x00, 0x77, 0x15, 0x14, +/* 00013A70 */ 0x03, 0x45, 0x14, 0x0D, 0x8F, 0x02, 0x02, 0x15, 0x03, 0x00, 0x4A, 0x15, 0x07, 0x06, 0x00, 0x59, +/* 00013A80 */ 0x00, 0x02, 0x5A, 0x01, 0x0F, 0x05, 0x00, 0x5A, 0x02, 0x07, 0x05, 0x00, 0x5A, 0x03, 0x04, 0x05, +/* 00013A90 */ 0x00, 0xD0, 0x16, 0x02, 0x01, 0x00, 0xA1, 0x00, 0x08, 0x16, 0xA1, 0x01, 0x09, 0x16, 0x5A, 0x04, +/* 00013AA0 */ 0x16, 0x05, 0x00, 0x5A, 0x05, 0x08, 0x05, 0x00, 0xF0, 0x06, 0x15, 0x15, 0x05, 0x00, 0x77, 0x15, +/* 00013AB0 */ 0x14, 0x04, 0x8F, 0x02, 0x15, 0x14, 0x04, 0x00, 0x4A, 0x14, 0x07, 0x05, 0x00, 0x59, 0x00, 0x02, +/* 00013AC0 */ 0x5A, 0x01, 0x0D, 0x06, 0x00, 0x5A, 0x02, 0x0F, 0x06, 0x00, 0x5A, 0x03, 0x0A, 0x06, 0x00, 0x5A, +/* 00013AD0 */ 0x04, 0x0B, 0x06, 0x00, 0xF0, 0x05, 0xFF, 0x14, 0x06, 0x00, 0x8F, 0x02, 0x0C, 0x14, 0x05, 0x00, +/* 00013AE0 */ 0x4A, 0x14, 0x07, 0x05, 0x00, 0x59, 0x00, 0x02, 0x8F, 0x03, 0x03, 0x15, 0x06, 0x00, 0x5F, 0x15, +/* 00013AF0 */ 0x15, 0x05, 0x5A, 0x01, 0x15, 0x07, 0x00, 0x5A, 0x02, 0x10, 0x07, 0x00, 0x5A, 0x03, 0x11, 0x07, +/* 00013B00 */ 0x00, 0xD0, 0x15, 0x00, 0x02, 0x00, 0x5A, 0x04, 0x15, 0x07, 0x00, 0xF0, 0x05, 0x14, 0x14, 0x07, +/* 00013B10 */ 0x00, 0x45, 0x12, 0x14, 0x5F, 0x14, 0x12, 0x06, 0x77, 0x14, 0x0D, 0x07, 0x8F, 0x03, 0x03, 0x15, +/* 00013B20 */ 0x06, 0x00, 0x6D, 0x14, 0x15, 0x08, 0x07, 0x02, 0x00, 0x59, 0x00, 0x15, 0x5A, 0x01, 0x0D, 0x08, +/* 00013B30 */ 0x00, 0xF4, 0x02, 0x14, 0x14, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x77, 0x14, 0x0D, 0x09, 0x77, +/* 00013B40 */ 0x0C, 0x0D, 0x0A, 0x45, 0x00, 0x0D, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x69, 0xFE, 0x21, +/* 00013B50 */ 0x03, 0x69, 0xFE, 0x04, 0x04, 0xF6, 0xFE, 0xF2, 0x01, 0xFE, 0x0D, 0x02, 0xFE, 0x0D, 0x02, 0xFE, +/* 00013B60 */ 0x03, 0x02, 0xFE, 0x96, 0x04, 0xFE, 0x97, 0x04, 0xFF, 0xF6, 0x49, 0x01, 0x00, 0x0C, 0x06, 0x00, +/* 00013B70 */ 0x00, 0x00, 0x1C, 0x00, 0x46, 0x00, 0x51, 0x00, 0x57, 0x00, 0x1F, 0x00, 0x24, 0x00, 0x41, 0x00, +/* 00013B80 */ 0x6D, 0x00, 0x41, 0x00, 0x6B, 0x00, 0x28, 0x00, 0xA9, 0x00, 0x3A, 0x00, 0x5F, 0x00, 0x08, 0x00, +/* 00013B90 */ 0x2B, 0x00, 0x23, 0x00, 0x57, 0x00, 0x04, 0x00, 0x38, 0x00, 0x08, 0x00, 0x1C, 0x00, 0x00, 0x7E, +/* 00013BA0 */ 0x5D, 0x18, 0xC1, 0x13, 0x1A, 0x4B, 0x00, 0xFE, 0xFA, 0x04, 0x1A, 0xA0, 0x41, 0xD1, 0x00, 0x54, +/* 00013BB0 */ 0xFE, 0xE4, 0xD9, 0xFE, 0xE4, 0xD9, 0x0F, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFE, 0xE4, 0xD9, 0xFE, +/* 00013BC0 */ 0x3F, 0x6E, 0xFE, 0x3F, 0x6E, 0x0A, 0xFE, 0x26, 0x04, 0xFE, 0x27, 0x04, 0xFE, 0x28, 0x04, 0xFE, +/* 00013BD0 */ 0x29, 0x04, 0xFE, 0x2A, 0x04, 0xFE, 0x2B, 0x04, 0xFE, 0x2C, 0x04, 0xFE, 0x56, 0x02, 0xFE, 0x2D, +/* 00013BE0 */ 0x04, 0xFE, 0x0B, 0x02, 0x11, 0x35, 0x41, 0x09, 0xFE, 0x54, 0x01, 0xFE, 0x4C, 0x01, 0x02, 0x14, +/* 00013BF0 */ 0x0D, 0x08, 0x30, 0x30, 0x30, 0x30, 0x08, 0x3E, 0x3F, 0x40, 0x06, 0xFE, 0x27, 0x03, 0x06, 0xFE, +/* 00013C00 */ 0x2E, 0x04, 0x06, 0xFE, 0x2F, 0x04, 0x06, 0xFE, 0x30, 0x04, 0x06, 0xFE, 0x31, 0x04, 0x06, 0xFE, +/* 00013C10 */ 0x32, 0x04, 0x06, 0xFE, 0xF8, 0x03, 0x06, 0xFE, 0x33, 0x04, 0x06, 0xFE, 0x34, 0x04, 0x06, 0xFE, +/* 00013C20 */ 0x35, 0x04, 0x06, 0xFE, 0x36, 0x04, 0x06, 0xFE, 0x37, 0x04, 0x06, 0xFE, 0x38, 0x04, 0x06, 0xFE, +/* 00013C30 */ 0x39, 0x04, 0x06, 0xFE, 0x3A, 0x04, 0x06, 0xFE, 0x3B, 0x04, 0x01, 0x01, 0x08, 0x06, 0xFE, 0x21, +/* 00013C40 */ 0x04, 0x01, 0x00, 0x06, 0xFE, 0x3C, 0x04, 0x06, 0xFE, 0x3D, 0x04, 0x01, 0x02, 0x07, 0x05, 0xFE, +/* 00013C50 */ 0x3E, 0x04, 0x06, 0xFE, 0x3F, 0x04, 0x06, 0xFE, 0x40, 0x04, 0x05, 0xFE, 0x41, 0x04, 0x06, 0xFE, +/* 00013C60 */ 0x42, 0x04, 0x05, 0xFE, 0x43, 0x04, 0x05, 0xFE, 0x44, 0x04, 0x05, 0xFE, 0x45, 0x04, 0x05, 0xFE, +/* 00013C70 */ 0x46, 0x04, 0x05, 0xFE, 0x47, 0x04, 0x06, 0xFE, 0xEC, 0x03, 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, +/* 00013C80 */ 0x2B, 0x03, 0x0C, 0x06, 0xFE, 0x2C, 0x03, 0x06, 0xFE, 0x2D, 0x03, 0x06, 0xFE, 0xED, 0x03, 0x0B, +/* 00013C90 */ 0x05, 0xFE, 0x14, 0x04, 0x06, 0xFE, 0x37, 0x03, 0x06, 0xFE, 0x15, 0x04, 0x06, 0xFE, 0x77, 0x03, +/* 00013CA0 */ 0x06, 0xFE, 0x16, 0x04, 0x06, 0xFE, 0xEE, 0x03, 0x05, 0xFE, 0x48, 0x04, 0x05, 0xFE, 0x36, 0x03, +/* 00013CB0 */ 0x06, 0xFE, 0x38, 0x03, 0xFE, 0xB2, 0x05, 0xD6, 0x04, 0x35, 0x96, 0x02, 0x35, 0x4E, 0x36, 0x4E, +/* 00013CC0 */ 0x37, 0x4E, 0x38, 0x4E, 0x39, 0x4E, 0x3A, 0x4E, 0x3B, 0x4E, 0x3C, 0x4E, 0x3D, 0x4E, 0x41, 0x96, +/* 00013CD0 */ 0x03, 0x41, 0x4E, 0x41, 0x96, 0x04, 0x41, 0x4E, 0x41, 0x96, 0x05, 0x41, 0x4E, 0x41, 0x96, 0x06, +/* 00013CE0 */ 0x41, 0x4E, 0x41, 0x96, 0x07, 0x41, 0x4E, 0x41, 0x96, 0x08, 0x41, 0x4E, 0x41, 0x96, 0x09, 0x41, +/* 00013CF0 */ 0x4E, 0x41, 0x96, 0x0A, 0x41, 0x4E, 0x41, 0x96, 0x0B, 0x41, 0x8F, 0x02, 0x32, 0x41, 0x00, 0x00, +/* 00013D00 */ 0x15, 0x03, 0x00, 0x41, 0x02, 0x09, 0x13, 0x00, 0x8F, 0x02, 0x32, 0x41, 0x00, 0x00, 0x15, 0x03, +/* 00013D10 */ 0x00, 0x41, 0x03, 0x09, 0x05, 0x00, 0xA8, 0x00, 0x09, 0x4C, 0x05, 0xD0, 0x41, 0x03, 0x00, 0x00, +/* 00013D20 */ 0xA1, 0x00, 0x04, 0x41, 0xA1, 0x01, 0x05, 0x41, 0xA1, 0x02, 0x06, 0x41, 0x45, 0x36, 0x41, 0xD0, +/* 00013D30 */ 0x41, 0x02, 0x01, 0x00, 0xA1, 0x00, 0x07, 0x41, 0xA1, 0x01, 0x08, 0x41, 0x45, 0x37, 0x41, 0x8F, +/* 00013D40 */ 0x02, 0x36, 0x42, 0x01, 0x00, 0x4A, 0x42, 0x6D, 0x41, 0x42, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 00013D50 */ 0x42, 0x5A, 0x01, 0x37, 0x00, 0x00, 0x5A, 0x02, 0x36, 0x00, 0x00, 0xF4, 0x03, 0x41, 0x41, 0x00, +/* 00013D60 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x38, 0x41, 0xD0, 0x41, 0x09, 0x02, 0x00, 0xD0, 0x42, 0x02, +/* 00013D70 */ 0x03, 0x00, 0xA1, 0x00, 0x09, 0x42, 0xA1, 0x01, 0x36, 0x42, 0xA1, 0x00, 0x42, 0x41, 0xD0, 0x42, +/* 00013D80 */ 0x02, 0x04, 0x00, 0xA1, 0x00, 0x0A, 0x42, 0xA1, 0x01, 0x36, 0x42, 0xA1, 0x01, 0x42, 0x41, 0xD0, +/* 00013D90 */ 0x42, 0x02, 0x05, 0x00, 0xA1, 0x00, 0x0B, 0x42, 0xA1, 0x01, 0x37, 0x42, 0xA1, 0x02, 0x42, 0x41, +/* 00013DA0 */ 0xD0, 0x42, 0x02, 0x06, 0x00, 0xA1, 0x00, 0x0C, 0x42, 0xA1, 0x01, 0x38, 0x42, 0xA1, 0x03, 0x42, +/* 00013DB0 */ 0x41, 0xD0, 0x42, 0x02, 0x07, 0x00, 0xA1, 0x00, 0x0D, 0x42, 0xA1, 0x01, 0x37, 0x42, 0xA1, 0x04, +/* 00013DC0 */ 0x42, 0x41, 0xD0, 0x42, 0x02, 0x08, 0x00, 0xA1, 0x00, 0x0E, 0x42, 0xA1, 0x01, 0x37, 0x42, 0xA1, +/* 00013DD0 */ 0x05, 0x42, 0x41, 0xD0, 0x42, 0x02, 0x09, 0x00, 0xA1, 0x00, 0x0F, 0x42, 0xA1, 0x01, 0x37, 0x42, +/* 00013DE0 */ 0xA1, 0x06, 0x42, 0x41, 0xD0, 0x42, 0x02, 0x0A, 0x00, 0xA1, 0x00, 0x10, 0x42, 0xA1, 0x01, 0x37, +/* 00013DF0 */ 0x42, 0xA1, 0x07, 0x42, 0x41, 0xD0, 0x42, 0x02, 0x0B, 0x00, 0xA1, 0x00, 0x11, 0x42, 0x8F, 0x02, +/* 00013E00 */ 0x36, 0x44, 0x01, 0x00, 0x4A, 0x44, 0x6D, 0x43, 0x44, 0x01, 0x07, 0x03, 0x00, 0x59, 0x00, 0x44, +/* 00013E10 */ 0x5A, 0x01, 0x36, 0x01, 0x00, 0x5A, 0x02, 0x12, 0x01, 0x00, 0xF4, 0x03, 0x43, 0x43, 0x01, 0x00, +/* 00013E20 */ 0x00, 0x00, 0x01, 0x00, 0xA1, 0x01, 0x43, 0x42, 0xA1, 0x08, 0x42, 0x41, 0x96, 0x03, 0x41, 0xD6, +/* 00013E30 */ 0x00, 0x41, 0x07, 0x01, 0x00, 0x59, 0x00, 0x13, 0xF0, 0x01, 0x41, 0x41, 0x02, 0x00, 0x96, 0x04, +/* 00013E40 */ 0x41, 0xD6, 0x01, 0x41, 0x96, 0x05, 0x41, 0xD6, 0x02, 0x41, 0x96, 0x06, 0x41, 0xD6, 0x03, 0x41, +/* 00013E50 */ 0x45, 0x39, 0x41, 0xD0, 0x41, 0x03, 0x0C, 0x00, 0xA8, 0x42, 0xA1, 0x00, 0x42, 0x41, 0xA8, 0x42, +/* 00013E60 */ 0xA1, 0x01, 0x42, 0x41, 0xA8, 0x42, 0xA1, 0x02, 0x42, 0x41, 0x96, 0x07, 0x41, 0x8F, 0x02, 0x35, +/* 00013E70 */ 0x41, 0x02, 0x00, 0x4A, 0x41, 0x07, 0x02, 0x00, 0x59, 0x00, 0x13, 0xCE, 0x00, 0x00, 0x00, 0x00, +/* 00013E80 */ 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x7B, 0x15, 0x42, 0x02, 0x7B, 0x12, 0x42, 0x03, +/* 00013E90 */ 0x7B, 0x18, 0x42, 0x04, 0x5A, 0x01, 0x42, 0x03, 0x00, 0xF0, 0x02, 0x41, 0x41, 0x03, 0x00, 0x45, +/* 00013EA0 */ 0x3A, 0x41, 0xD6, 0x05, 0x41, 0x07, 0x06, 0x00, 0x59, 0x00, 0x13, 0x5A, 0x01, 0x1A, 0x04, 0x00, +/* 00013EB0 */ 0x5A, 0x02, 0x1B, 0x04, 0x00, 0x5A, 0x03, 0x1C, 0x04, 0x00, 0x5F, 0x42, 0x3A, 0x05, 0x5A, 0x04, +/* 00013EC0 */ 0x42, 0x04, 0x00, 0x8F, 0x02, 0x03, 0x42, 0x03, 0x00, 0x5F, 0x42, 0x42, 0x06, 0x5F, 0x42, 0x42, +/* 00013ED0 */ 0x07, 0x5A, 0x05, 0x42, 0x04, 0x00, 0xF0, 0x06, 0xFF, 0x41, 0x04, 0x00, 0xD6, 0x06, 0x41, 0x07, +/* 00013EE0 */ 0x06, 0x00, 0x59, 0x00, 0x13, 0x5A, 0x01, 0x1D, 0x05, 0x00, 0x5A, 0x02, 0x1E, 0x05, 0x00, 0x5A, +/* 00013EF0 */ 0x03, 0x1E, 0x05, 0x00, 0x5F, 0x42, 0x3A, 0x08, 0x5A, 0x04, 0x42, 0x05, 0x00, 0x8F, 0x02, 0x03, +/* 00013F00 */ 0x42, 0x03, 0x00, 0x5F, 0x42, 0x42, 0x09, 0x5F, 0x42, 0x42, 0x0A, 0x5A, 0x05, 0x42, 0x05, 0x00, +/* 00013F10 */ 0xF0, 0x06, 0xFF, 0x41, 0x05, 0x00, 0xD6, 0x07, 0x41, 0x07, 0x06, 0x00, 0x59, 0x00, 0x13, 0x5A, +/* 00013F20 */ 0x01, 0x1F, 0x06, 0x00, 0x5A, 0x02, 0x20, 0x06, 0x00, 0x5A, 0x03, 0x20, 0x06, 0x00, 0x5F, 0x42, +/* 00013F30 */ 0x3A, 0x0B, 0x5A, 0x04, 0x42, 0x06, 0x00, 0x8F, 0x02, 0x03, 0x42, 0x03, 0x00, 0x5F, 0x42, 0x42, +/* 00013F40 */ 0x0C, 0x5F, 0x42, 0x42, 0x0D, 0x5A, 0x05, 0x42, 0x06, 0x00, 0xF0, 0x06, 0xFF, 0x41, 0x06, 0x00, +/* 00013F50 */ 0x8F, 0x02, 0x32, 0x41, 0x00, 0x00, 0x15, 0x03, 0x00, 0x41, 0x02, 0x09, 0x05, 0x00, 0xA8, 0x00, +/* 00013F60 */ 0x09, 0x04, 0x03, 0xCD, 0x41, 0x96, 0x08, 0x41, 0x8F, 0x02, 0x23, 0x41, 0x04, 0x00, 0x07, 0x03, +/* 00013F70 */ 0x00, 0x59, 0x00, 0x13, 0x5A, 0x01, 0x21, 0x07, 0x00, 0xD6, 0x08, 0x42, 0x5A, 0x02, 0x42, 0x07, +/* 00013F80 */ 0x00, 0xF0, 0x03, 0x41, 0x41, 0x07, 0x00, 0x96, 0x09, 0x41, 0xD6, 0x09, 0x41, 0x96, 0x0A, 0x41, +/* 00013F90 */ 0x8F, 0x01, 0x06, 0x41, 0x05, 0x00, 0x4A, 0x41, 0x07, 0x03, 0x00, 0x59, 0x00, 0x13, 0x5A, 0x01, +/* 00013FA0 */ 0x22, 0x08, 0x00, 0xD6, 0x0A, 0x42, 0x5A, 0x02, 0x42, 0x08, 0x00, 0xF0, 0x03, 0x41, 0x41, 0x08, +/* 00013FB0 */ 0x00, 0x96, 0x0B, 0x41, 0x8F, 0x01, 0x06, 0x41, 0x05, 0x00, 0x4A, 0x41, 0x07, 0x03, 0x00, 0x59, +/* 00013FC0 */ 0x00, 0x13, 0x5A, 0x01, 0x23, 0x09, 0x00, 0xD6, 0x0B, 0x42, 0x5A, 0x02, 0x42, 0x09, 0x00, 0xF0, +/* 00013FD0 */ 0x03, 0x41, 0x41, 0x09, 0x00, 0x45, 0x3B, 0x41, 0x8F, 0x02, 0x36, 0x42, 0x01, 0x00, 0x4A, 0x42, +/* 00013FE0 */ 0x6D, 0x41, 0x42, 0x0E, 0x07, 0x04, 0x00, 0x59, 0x00, 0x42, 0x93, 0x09, 0x43, 0x06, 0x00, 0x5A, +/* 00013FF0 */ 0x01, 0x43, 0x0A, 0x00, 0x5A, 0x02, 0x24, 0x0A, 0x00, 0xCE, 0x14, 0x00, 0x00, 0x00, 0x01, 0x00, +/* 00014000 */ 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x93, 0x08, 0x44, 0x07, 0x00, 0x7B, 0x44, 0x43, 0x0F, 0x7B, +/* 00014010 */ 0x27, 0x43, 0x10, 0x7B, 0x27, 0x43, 0x11, 0x7B, 0x27, 0x43, 0x12, 0x5A, 0x03, 0x43, 0x0A, 0x00, +/* 00014020 */ 0xF4, 0x04, 0xFF, 0x41, 0x0E, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x8F, 0x02, 0x36, 0x42, 0x01, 0x00, +/* 00014030 */ 0x4A, 0x42, 0x6D, 0x41, 0x42, 0x13, 0x07, 0x04, 0x00, 0x59, 0x00, 0x42, 0x93, 0x08, 0x43, 0x07, +/* 00014040 */ 0x00, 0x5A, 0x01, 0x43, 0x0B, 0x00, 0x5A, 0x02, 0x2A, 0x0B, 0x00, 0xCE, 0x2C, 0x00, 0x00, 0x00, +/* 00014050 */ 0x02, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x93, 0x09, 0x44, 0x06, 0x00, 0x7B, 0x44, 0x43, +/* 00014060 */ 0x14, 0x7B, 0x2B, 0x43, 0x15, 0x7B, 0x27, 0x43, 0x16, 0x7B, 0x2B, 0x43, 0x17, 0x5A, 0x03, 0x43, +/* 00014070 */ 0x0B, 0x00, 0xF4, 0x04, 0xFF, 0x41, 0x13, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x8F, 0x01, 0x06, 0x41, +/* 00014080 */ 0x05, 0x00, 0x4A, 0x41, 0x07, 0x03, 0x00, 0x59, 0x00, 0x13, 0x5A, 0x01, 0x2C, 0x0C, 0x00, 0xD6, +/* 00014090 */ 0x0C, 0x42, 0x5A, 0x02, 0x42, 0x0C, 0x00, 0xF0, 0x03, 0x41, 0x41, 0x0C, 0x00, 0x45, 0x3C, 0x41, +/* 000140A0 */ 0x8F, 0x02, 0x36, 0x42, 0x01, 0x00, 0x4A, 0x42, 0x6D, 0x41, 0x42, 0x18, 0x07, 0x04, 0x00, 0x59, +/* 000140B0 */ 0x00, 0x42, 0x5A, 0x01, 0x3C, 0x0D, 0x00, 0x5A, 0x02, 0x2D, 0x0D, 0x00, 0xCE, 0x44, 0x00, 0x00, +/* 000140C0 */ 0x00, 0x03, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x7B, 0x2C, 0x43, 0x19, 0x7B, 0x27, 0x43, +/* 000140D0 */ 0x1A, 0x7B, 0x27, 0x43, 0x1B, 0x7B, 0x2B, 0x43, 0x1C, 0x5A, 0x03, 0x43, 0x0D, 0x00, 0xF4, 0x04, +/* 000140E0 */ 0xFF, 0x41, 0x18, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x8F, 0x02, 0x36, 0x42, 0x01, 0x00, 0x4A, 0x42, +/* 000140F0 */ 0x6D, 0x41, 0x42, 0x1D, 0x07, 0x04, 0x00, 0x59, 0x00, 0x42, 0x93, 0x08, 0x43, 0x07, 0x00, 0x5A, +/* 00014100 */ 0x01, 0x43, 0x0E, 0x00, 0x5A, 0x02, 0x2E, 0x0E, 0x00, 0xCE, 0x5C, 0x00, 0x00, 0x00, 0x04, 0x00, +/* 00014110 */ 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x7B, 0x3C, 0x43, 0x1E, 0x7B, 0x27, 0x43, 0x1F, 0x7B, 0x2B, +/* 00014120 */ 0x43, 0x20, 0x5A, 0x03, 0x43, 0x0E, 0x00, 0xF4, 0x04, 0xFF, 0x41, 0x1D, 0x00, 0x00, 0x00, 0x0E, +/* 00014130 */ 0x00, 0x8F, 0x02, 0x36, 0x42, 0x01, 0x00, 0x4A, 0x42, 0x6D, 0x41, 0x42, 0x21, 0x07, 0x04, 0x00, +/* 00014140 */ 0x59, 0x00, 0x42, 0x93, 0x08, 0x43, 0x07, 0x00, 0x5A, 0x01, 0x43, 0x0F, 0x00, 0x5A, 0x02, 0x30, +/* 00014150 */ 0x0F, 0x00, 0xCE, 0x70, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x7B, +/* 00014160 */ 0x3B, 0x43, 0x22, 0x7B, 0x27, 0x43, 0x23, 0x7B, 0x2B, 0x43, 0x24, 0x7B, 0x2B, 0x43, 0x25, 0x5A, +/* 00014170 */ 0x03, 0x43, 0x0F, 0x00, 0xF4, 0x04, 0xFF, 0x41, 0x21, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x8F, 0x02, +/* 00014180 */ 0x36, 0x42, 0x01, 0x00, 0x4A, 0x42, 0x6D, 0x41, 0x42, 0x26, 0x07, 0x04, 0x00, 0x59, 0x00, 0x42, +/* 00014190 */ 0x93, 0x08, 0x43, 0x07, 0x00, 0x5A, 0x01, 0x43, 0x10, 0x00, 0x5A, 0x02, 0x31, 0x10, 0x00, 0xCE, +/* 000141A0 */ 0x88, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x8F, 0x01, 0x06, 0x44, +/* 000141B0 */ 0x05, 0x00, 0x4A, 0x44, 0x07, 0x03, 0x00, 0x59, 0x00, 0x13, 0x5A, 0x01, 0x32, 0x11, 0x00, 0xD6, +/* 000141C0 */ 0x0D, 0x45, 0x5A, 0x02, 0x45, 0x11, 0x00, 0xF0, 0x03, 0x44, 0x44, 0x11, 0x00, 0x7B, 0x44, 0x43, +/* 000141D0 */ 0x27, 0x7B, 0x2B, 0x43, 0x28, 0x7B, 0x27, 0x43, 0x29, 0x7B, 0x2B, 0x43, 0x2A, 0x5A, 0x03, 0x43, +/* 000141E0 */ 0x10, 0x00, 0xF4, 0x04, 0xFF, 0x41, 0x26, 0x00, 0x00, 0x00, 0x10, 0x00, 0x8F, 0x01, 0x06, 0x41, +/* 000141F0 */ 0x05, 0x00, 0x4A, 0x41, 0x07, 0x03, 0x00, 0x59, 0x00, 0x13, 0x5A, 0x01, 0x33, 0x12, 0x00, 0xD6, +/* 00014200 */ 0x0E, 0x42, 0x5A, 0x02, 0x42, 0x12, 0x00, 0xF0, 0x03, 0x41, 0x41, 0x12, 0x00, 0x45, 0x3D, 0x41, +/* 00014210 */ 0x8F, 0x02, 0x36, 0x42, 0x01, 0x00, 0x4A, 0x42, 0x6D, 0x41, 0x42, 0x2B, 0x07, 0x04, 0x00, 0x59, +/* 00014220 */ 0x00, 0x42, 0x93, 0x09, 0x43, 0x06, 0x00, 0x5A, 0x01, 0x43, 0x13, 0x00, 0x5A, 0x02, 0x34, 0x13, +/* 00014230 */ 0x00, 0xCE, 0xA0, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x7B, 0x3D, +/* 00014240 */ 0x43, 0x2C, 0x7B, 0x2B, 0x43, 0x2D, 0x7B, 0x27, 0x43, 0x2E, 0x7B, 0x2B, 0x43, 0x2F, 0x5A, 0x03, +/* 00014250 */ 0x43, 0x13, 0x00, 0xF4, 0x04, 0xFF, 0x41, 0x2B, 0x00, 0x00, 0x00, 0x13, 0x00, 0x93, 0x09, 0x00, +/* 00014260 */ 0x06, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x08, 0xB8, 0x00, 0xA0, 0x00, 0x00, 0x00, +/* 00014270 */ 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, +/* 00014280 */ 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, +/* 00014290 */ 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, +/* 000142A0 */ 0x95, 0x01, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 000142B0 */ 0x97, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, +/* 000142C0 */ 0x5C, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x01, 0x00, 0x00, +/* 000142D0 */ 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, +/* 000142E0 */ 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, +/* 000142F0 */ 0x95, 0x01, 0x00, 0x00, 0x2C, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00014300 */ 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, +/* 00014310 */ 0x14, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, +/* 00014320 */ 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00014330 */ 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x72, 0x01, 0x00, 0x00, 0x70, 0x01, 0x00, 0x00, +/* 00014340 */ 0x73, 0x01, 0x00, 0x00, 0x65, 0xFE, 0x50, 0x01, 0xFE, 0x72, 0x01, 0xFE, 0x70, 0x01, 0xFE, 0x73, +/* 00014350 */ 0x01, 0xFE, 0x72, 0x01, 0xFE, 0x2F, 0x02, 0xFE, 0x2A, 0x02, 0xFE, 0x70, 0x01, 0xFE, 0x2F, 0x02, +/* 00014360 */ 0xFE, 0x2B, 0x02, 0xFE, 0x73, 0x01, 0xFE, 0x2F, 0x02, 0xFE, 0x2C, 0x02, 0xFE, 0x9C, 0x01, 0xFE, +/* 00014370 */ 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x97, +/* 00014380 */ 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, +/* 00014390 */ 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x98, 0x01, 0xFE, +/* 000143A0 */ 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, +/* 000143B0 */ 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, +/* 000143C0 */ 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, +/* 000143D0 */ 0x95, 0x01, 0xFE, 0xFA, 0xD9, 0x21, 0x43, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x3E, 0x00, 0x05, 0x00, +/* 000143E0 */ 0x1B, 0x00, 0x14, 0x00, 0x3D, 0x00, 0x10, 0x00, 0x38, 0x00, 0x29, 0x00, 0x4C, 0x00, 0xC7, 0x00, +/* 000143F0 */ 0xA3, 0x03, 0x12, 0x00, 0x44, 0x20, 0x06, 0x00, 0x52, 0x0C, 0x06, 0x00, 0x25, 0x07, 0x06, 0x00, +/* 00014400 */ 0x78, 0x01, 0x1A, 0x00, 0x5C, 0x00, 0x35, 0x00, 0xBD, 0x0E, 0x3A, 0x00, 0x34, 0x02, 0x3A, 0x00, +/* 00014410 */ 0x46, 0x02, 0x3A, 0x00, 0xA0, 0x02, 0x0E, 0x00, 0x27, 0x00, 0x05, 0x00, 0x1B, 0x00, 0x05, 0x00, +/* 00014420 */ 0x07, 0x01, 0x22, 0x00, 0x29, 0x04, 0x06, 0x00, 0x3C, 0x03, 0x24, 0x00, 0xDD, 0x02, 0x24, 0x00, +/* 00014430 */ 0x05, 0x04, 0x52, 0x00, 0xCD, 0x00, 0x52, 0x00, 0x4B, 0x01, 0x24, 0x00, 0x28, 0x02, 0x48, 0x00, +/* 00014440 */ 0xB7, 0x00, 0x49, 0x00, 0xA5, 0x00, 0x4D, 0x00, 0xCE, 0x00, 0x6E, 0x00, 0x0A, 0x06, 0x24, 0x00, +/* 00014450 */ 0x16, 0x01, 0x4D, 0x00, 0xD0, 0x00, 0x0A, 0x00, 0x1B, 0x00, 0x00, 0xE8, 0x61, 0x01, 0x00, 0xAF, +/* 00014460 */ 0x5D, 0x01, 0x00, 0x89, 0x58, 0x01, 0x00, 0x95, 0x57, 0x01, 0x00, 0x9D, 0x54, 0x01, 0x00, 0x1A, +/* 00014470 */ 0x53, 0x01, 0x00, 0x97, 0x51, 0x01, 0x00, 0x14, 0x50, 0x01, 0x00, 0xDA, 0x4D, 0x01, 0x00, 0x6F, +/* 00014480 */ 0x4C, 0x01, 0x00, 0xC5, 0x4A, 0x01, 0x00, 0xAE, 0x48, 0x01, 0x00, 0x89, 0x47, 0x01, 0x00, 0x3F, +/* 00014490 */ 0x45, 0x01, 0x00, 0x97, 0x44, 0x01, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, +/* 000144A0 */ 0x40, 0x07, 0x60, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x38, 0x03, 0x6E, 0xFF, 0x79, 0x46, 0x01, 0x00, +/* 000144B0 */ 0xFF, 0x79, 0x46, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x02, 0xFF, 0x79, 0x46, 0x01, 0x00, +/* 000144C0 */ 0xB3, 0xB3, 0x05, 0x03, 0x06, 0x08, 0x17, 0x16, 0x03, 0x02, 0x03, 0x01, 0x01, 0x01, 0x01, 0x05, +/* 000144D0 */ 0x08, 0x57, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA8, 0x06, 0x45, 0x04, 0x06, 0x8F, 0x02, 0x16, 0x06, +/* 000144E0 */ 0x00, 0x00, 0x4A, 0x06, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x8F, 0x03, 0x03, 0x07, 0x01, 0x00, +/* 000144F0 */ 0x5F, 0x07, 0x07, 0x00, 0x5A, 0x01, 0x07, 0x00, 0x00, 0x8F, 0x02, 0x12, 0x07, 0x02, 0x00, 0x4A, +/* 00014500 */ 0x07, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x03, 0x01, 0x00, 0xF0, 0x02, 0x07, 0x07, +/* 00014510 */ 0x01, 0x00, 0x5A, 0x02, 0x07, 0x00, 0x00, 0x5A, 0x03, 0x04, 0x00, 0x00, 0xF0, 0x04, 0x00, 0x06, +/* 00014520 */ 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xEF, 0x01, 0xFF, 0x9E, 0x46, 0x01, +/* 00014530 */ 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x23, 0x00, 0x4B, 0x00, 0x6A, 0x00, 0x00, 0x7F, +/* 00014540 */ 0x5D, 0x18, 0xC1, 0x03, 0x1A, 0x0B, 0x00, 0xFE, 0x18, 0x07, 0x57, 0xA0, 0x41, 0xC3, 0x00, 0xFE, +/* 00014550 */ 0xEE, 0x03, 0x6C, 0xFF, 0xAD, 0x40, 0x01, 0x00, 0xFF, 0xAD, 0x40, 0x01, 0x00, 0x01, 0x08, 0xFE, +/* 00014560 */ 0x00, 0x90, 0x01, 0x01, 0xFF, 0xAD, 0x40, 0x01, 0x00, 0xFE, 0x01, 0x05, 0xFE, 0x01, 0x05, 0x01, +/* 00014570 */ 0xFE, 0xE2, 0x03, 0x07, 0x14, 0x19, 0x05, 0x33, 0x32, 0x03, 0x03, 0x01, 0x04, 0x01, 0x01, 0x01, +/* 00014580 */ 0x01, 0x16, 0x17, 0x18, 0x06, 0xFE, 0x94, 0x03, 0x05, 0xFE, 0x88, 0x04, 0x06, 0xFE, 0x30, 0x03, +/* 00014590 */ 0x08, 0x06, 0xFE, 0xD7, 0x03, 0x06, 0xFE, 0x8A, 0x04, 0x06, 0xFE, 0x24, 0x04, 0x06, 0xFE, 0x77, +/* 000145A0 */ 0x04, 0x06, 0xFE, 0x73, 0x04, 0x06, 0xFE, 0x33, 0x04, 0x06, 0xFE, 0x34, 0x04, 0x06, 0xFE, 0x35, +/* 000145B0 */ 0x04, 0x06, 0xFE, 0x36, 0x04, 0x06, 0xFE, 0x37, 0x04, 0x06, 0xFE, 0x38, 0x04, 0x06, 0xFE, 0x39, +/* 000145C0 */ 0x04, 0x06, 0xFE, 0x3A, 0x04, 0x06, 0xFE, 0x3B, 0x04, 0xC6, 0x58, 0x14, 0x4E, 0x15, 0x4E, 0x19, +/* 000145D0 */ 0x96, 0x02, 0x19, 0x2A, 0x19, 0x14, 0x15, 0x03, 0x00, 0x19, 0x02, 0x09, 0x24, 0x00, 0x8F, 0x03, +/* 000145E0 */ 0x03, 0x1A, 0x00, 0x00, 0x6D, 0x19, 0x1A, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x1A, 0x5A, 0x01, +/* 000145F0 */ 0x03, 0x00, 0x00, 0x5A, 0x02, 0x04, 0x00, 0x00, 0xF4, 0x03, 0xFF, 0x19, 0x00, 0x00, 0x00, 0x00, +/* 00014600 */ 0x00, 0x00, 0x8F, 0x01, 0x0A, 0x19, 0x01, 0x00, 0x4A, 0x19, 0x07, 0x02, 0x00, 0x59, 0x00, 0x05, +/* 00014610 */ 0x5A, 0x01, 0x14, 0x01, 0x00, 0xF0, 0x02, 0x19, 0x19, 0x01, 0x00, 0x96, 0x02, 0x19, 0xD0, 0x19, +/* 00014620 */ 0x0E, 0x00, 0x00, 0xA1, 0x00, 0x06, 0x19, 0xA1, 0x01, 0x07, 0x19, 0xA1, 0x02, 0x08, 0x19, 0xA1, +/* 00014630 */ 0x03, 0x09, 0x19, 0xA1, 0x04, 0x0A, 0x19, 0xA1, 0x05, 0x0B, 0x19, 0xA1, 0x06, 0x0C, 0x19, 0xA1, +/* 00014640 */ 0x07, 0x0D, 0x19, 0xA1, 0x08, 0x0E, 0x19, 0xA1, 0x09, 0x0F, 0x19, 0xA1, 0x0A, 0x10, 0x19, 0xA1, +/* 00014650 */ 0x0B, 0x11, 0x19, 0xA1, 0x0C, 0x12, 0x19, 0xA1, 0x0D, 0x13, 0x19, 0x45, 0x15, 0x19, 0x8F, 0x02, +/* 00014660 */ 0x17, 0x19, 0x02, 0x00, 0x4A, 0x19, 0x07, 0x04, 0x00, 0x59, 0x00, 0x05, 0x5A, 0x01, 0x15, 0x02, +/* 00014670 */ 0x00, 0x93, 0x02, 0x1A, 0x03, 0x00, 0x5A, 0x02, 0x1A, 0x02, 0x00, 0xD6, 0x00, 0x1A, 0x5A, 0x03, +/* 00014680 */ 0x1A, 0x02, 0x00, 0xF0, 0x04, 0x00, 0x19, 0x02, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, +/* 00014690 */ 0xFE, 0xB6, 0x02, 0xFF, 0xDA, 0x40, 0x01, 0x00, 0x06, 0x09, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x34, +/* 000146A0 */ 0x00, 0x24, 0x00, 0x78, 0x00, 0x1C, 0x00, 0x41, 0x00, 0x40, 0x00, 0xE6, 0x01, 0x30, 0x00, 0x00, +/* 000146B0 */ 0x02, 0x00, 0xB6, 0x46, 0x01, 0x00, 0x7F, 0x4C, 0x00, 0xC1, 0x43, 0x50, 0x03, 0x00, 0xFE, 0x2F, +/* 000146C0 */ 0x07, 0x44, 0xA2, 0x41, 0xD1, 0x00, 0x6D, 0xFF, 0xE1, 0x43, 0x01, 0x00, 0xFF, 0xE1, 0x43, 0x01, +/* 000146D0 */ 0x00, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFF, 0xE1, 0x43, 0x01, 0x00, 0xFE, 0xBD, 0x01, 0xFE, +/* 000146E0 */ 0xBD, 0x01, 0x07, 0x07, 0x0B, 0x1B, 0x18, 0x04, 0x01, 0x04, 0x04, 0x04, 0x04, 0x01, 0x0A, 0x0B, +/* 000146F0 */ 0x06, 0xFE, 0x73, 0x04, 0x07, 0x06, 0xFE, 0x6F, 0x04, 0x06, 0xFE, 0x6D, 0x04, 0x0B, 0x5B, 0x4E, +/* 00014700 */ 0x09, 0x14, 0x03, 0x00, 0x07, 0x02, 0x09, 0x4D, 0x00, 0x8F, 0x01, 0x02, 0x0C, 0x00, 0x00, 0x4A, +/* 00014710 */ 0x0C, 0x5F, 0x0C, 0x0C, 0x00, 0x45, 0x09, 0x0C, 0x8F, 0x01, 0x02, 0x0C, 0x00, 0x00, 0x4A, 0x0C, +/* 00014720 */ 0x5F, 0x0C, 0x0C, 0x01, 0xA8, 0x0D, 0x15, 0x03, 0x00, 0x0C, 0x0D, 0x09, 0x22, 0x00, 0x15, 0x03, +/* 00014730 */ 0x00, 0x09, 0x03, 0x09, 0x1A, 0x00, 0x77, 0x09, 0x08, 0x02, 0x41, 0x0D, 0x09, 0x04, 0x45, 0x0C, +/* 00014740 */ 0x0D, 0x0F, 0x07, 0x00, 0x0D, 0x41, 0x0D, 0x09, 0x05, 0x46, 0x0C, 0x0D, 0x77, 0x0C, 0x08, 0x03, +/* 00014750 */ 0x45, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x73, 0x04, 0xFE, 0x6E, 0x02, +/* 00014760 */ 0xFE, 0x73, 0x04, 0xFE, 0x6F, 0x02, 0xFF, 0x11, 0x44, 0x01, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, +/* 00014770 */ 0x08, 0x00, 0x34, 0x00, 0x0F, 0x00, 0x3B, 0x00, 0x1E, 0x00, 0x52, 0x00, 0x04, 0x00, 0x35, 0x00, +/* 00014780 */ 0x16, 0x00, 0x63, 0x00, 0x08, 0x00, 0x33, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x03, +/* 00014790 */ 0x00, 0xFE, 0xF8, 0x06, 0x3B, 0xA0, 0x41, 0xD1, 0x00, 0x6B, 0xFF, 0xF8, 0x3B, 0x01, 0x00, 0xFF, +/* 000147A0 */ 0xF8, 0x3B, 0x01, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFF, 0xF8, 0x3B, 0x01, 0x00, 0xFE, +/* 000147B0 */ 0xEA, 0x01, 0xFE, 0xEA, 0x01, 0x07, 0x06, 0x09, 0x04, 0x2A, 0x28, 0x03, 0x03, 0x04, 0x06, 0x06, +/* 000147C0 */ 0x06, 0x06, 0x08, 0x06, 0xFE, 0x94, 0x03, 0x05, 0xFE, 0x88, 0x04, 0x06, 0xFE, 0x30, 0x03, 0x08, +/* 000147D0 */ 0xA6, 0x58, 0x06, 0x4E, 0x07, 0x2A, 0x09, 0x06, 0x15, 0x03, 0x00, 0x09, 0x02, 0x09, 0x24, 0x00, +/* 000147E0 */ 0x8F, 0x03, 0x03, 0x0A, 0x00, 0x00, 0x6D, 0x09, 0x0A, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0A, +/* 000147F0 */ 0x5A, 0x01, 0x03, 0x00, 0x00, 0x5A, 0x02, 0x04, 0x00, 0x00, 0xF4, 0x03, 0xFF, 0x09, 0x00, 0x00, +/* 00014800 */ 0x00, 0x00, 0x00, 0x00, 0x8F, 0x01, 0x0A, 0x09, 0x01, 0x00, 0x4A, 0x09, 0x07, 0x02, 0x00, 0x59, +/* 00014810 */ 0x00, 0x05, 0x5A, 0x01, 0x06, 0x01, 0x00, 0xF0, 0x02, 0x09, 0x09, 0x01, 0x00, 0x45, 0x07, 0x09, +/* 00014820 */ 0x5F, 0x09, 0x07, 0x01, 0xA8, 0x0A, 0x14, 0x03, 0x00, 0x09, 0x0A, 0x09, 0x3E, 0x00, 0x45, 0x09, +/* 00014830 */ 0x07, 0x8F, 0x03, 0x36, 0x0B, 0x02, 0x00, 0x4A, 0x0B, 0x6D, 0x0A, 0x0B, 0x02, 0x07, 0x03, 0x00, +/* 00014840 */ 0x59, 0x00, 0x0B, 0x8F, 0x01, 0x0B, 0x0C, 0x03, 0x00, 0x4A, 0x0C, 0x5A, 0x01, 0x0C, 0x02, 0x00, +/* 00014850 */ 0x5A, 0x02, 0x07, 0x02, 0x00, 0xF4, 0x03, 0x0A, 0x0A, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x77, +/* 00014860 */ 0x0A, 0x09, 0x03, 0x5F, 0x09, 0x07, 0x04, 0x82, 0x09, 0x09, 0x06, 0x01, 0x5F, 0x00, 0x07, 0x05, +/* 00014870 */ 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB6, 0x02, 0xFE, 0x25, 0x04, 0x54, 0xFE, 0x25, +/* 00014880 */ 0x04, 0xFE, 0x25, 0x04, 0xFE, 0x25, 0x04, 0xFF, 0x12, 0x3C, 0x01, 0x00, 0x08, 0x04, 0x00, 0x00, +/* 00014890 */ 0x00, 0x0B, 0x00, 0x30, 0x00, 0x24, 0x00, 0x70, 0x00, 0x1C, 0x00, 0x3E, 0x00, 0x0E, 0x00, 0x3E, +/* 000148A0 */ 0x00, 0x35, 0x00, 0x49, 0x00, 0x09, 0x00, 0x41, 0x00, 0x09, 0x00, 0x29, 0x00, 0x00, 0x7F, 0x5C, +/* 000148B0 */ 0x08, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0xD1, 0x06, 0x60, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x16, +/* 000148C0 */ 0x04, 0x6A, 0xFF, 0x00, 0x36, 0x01, 0x00, 0xFF, 0x00, 0x36, 0x01, 0x00, 0x09, 0xFE, 0x00, 0x90, +/* 000148D0 */ 0x02, 0x02, 0xFF, 0x00, 0x36, 0x01, 0x00, 0xFE, 0xA1, 0x03, 0xFE, 0xA1, 0x03, 0x07, 0x07, 0x0C, +/* 000148E0 */ 0x06, 0x54, 0x50, 0x03, 0x09, 0x03, 0x0A, 0x0A, 0x0A, 0x0A, 0x0B, 0x06, 0xFE, 0x94, 0x03, 0x05, +/* 000148F0 */ 0xFE, 0x89, 0x04, 0x06, 0xFE, 0x30, 0x03, 0x0B, 0x0C, 0xFE, 0x74, 0x01, 0x58, 0x08, 0x4E, 0x09, +/* 00014900 */ 0x4E, 0x0A, 0x2A, 0x0C, 0x08, 0x15, 0x03, 0x00, 0x0C, 0x02, 0x09, 0x24, 0x00, 0x8F, 0x03, 0x03, +/* 00014910 */ 0x0D, 0x00, 0x00, 0x6D, 0x0C, 0x0D, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0D, 0x5A, 0x01, 0x03, +/* 00014920 */ 0x00, 0x00, 0x5A, 0x02, 0x04, 0x00, 0x00, 0xF4, 0x03, 0xFF, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00014930 */ 0x00, 0x8F, 0x03, 0x03, 0x0D, 0x00, 0x00, 0x6D, 0x0C, 0x0D, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 00014940 */ 0x0D, 0x5A, 0x01, 0x08, 0x01, 0x00, 0xF4, 0x02, 0x0C, 0x0C, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, +/* 00014950 */ 0x45, 0x09, 0x0C, 0xA8, 0x0C, 0x14, 0x08, 0x00, 0x09, 0x0C, 0x5F, 0x0C, 0x09, 0x02, 0x0F, 0x24, +/* 00014960 */ 0x00, 0x0C, 0x8F, 0x03, 0x03, 0x0D, 0x00, 0x00, 0x6D, 0x0C, 0x0D, 0x03, 0x07, 0x03, 0x00, 0x59, +/* 00014970 */ 0x00, 0x0D, 0x5A, 0x01, 0x03, 0x02, 0x00, 0x5A, 0x02, 0x04, 0x02, 0x00, 0xF4, 0x03, 0xFF, 0x0C, +/* 00014980 */ 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0xA8, 0x0C, 0x45, 0x0A, 0x0C, 0xA8, 0x0C, 0x14, 0x03, 0x00, +/* 00014990 */ 0x07, 0x0C, 0x09, 0x20, 0x00, 0x8F, 0x03, 0x03, 0x0D, 0x00, 0x00, 0x6D, 0x0C, 0x0D, 0x04, 0x07, +/* 000149A0 */ 0x01, 0x00, 0x59, 0x00, 0x0D, 0xF4, 0x01, 0x0C, 0x0C, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x45, +/* 000149B0 */ 0x0A, 0x0C, 0x09, 0x86, 0x00, 0x8F, 0x03, 0x24, 0x0D, 0x01, 0x00, 0x6D, 0x0C, 0x0D, 0x05, 0x07, +/* 000149C0 */ 0x02, 0x00, 0x59, 0x00, 0x0D, 0x5A, 0x01, 0x07, 0x04, 0x00, 0xF4, 0x02, 0x0C, 0x0C, 0x05, 0x00, +/* 000149D0 */ 0x00, 0x00, 0x04, 0x00, 0x45, 0x0A, 0x0C, 0x8F, 0x03, 0x36, 0x0D, 0x02, 0x00, 0x4A, 0x0D, 0x6D, +/* 000149E0 */ 0x0C, 0x0D, 0x06, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0D, 0x5A, 0x01, 0x0A, 0x05, 0x00, 0xF4, 0x02, +/* 000149F0 */ 0x0C, 0x0C, 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0F, 0x25, 0x00, 0x0C, 0x8F, 0x03, 0x36, 0x0D, +/* 00014A00 */ 0x02, 0x00, 0x4A, 0x0D, 0x6D, 0x0C, 0x0D, 0x07, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0D, 0x5A, 0x01, +/* 00014A10 */ 0x0A, 0x06, 0x00, 0xF4, 0x02, 0x0C, 0x0C, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x0F, 0x1A, 0x00, +/* 00014A20 */ 0x0C, 0x8F, 0x03, 0x03, 0x0D, 0x00, 0x00, 0x6D, 0x0C, 0x0D, 0x08, 0x07, 0x01, 0x00, 0x59, 0x00, +/* 00014A30 */ 0x0D, 0xF4, 0x01, 0xFF, 0x0C, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x8F, 0x03, 0x03, 0x0D, 0x00, +/* 00014A40 */ 0x00, 0x6D, 0x0C, 0x0D, 0x09, 0x07, 0x05, 0x00, 0x59, 0x00, 0x0D, 0x5A, 0x01, 0x09, 0x08, 0x00, +/* 00014A50 */ 0x5A, 0x02, 0x0A, 0x08, 0x00, 0x5A, 0x03, 0x05, 0x08, 0x00, 0x5A, 0x04, 0x06, 0x08, 0x00, 0xF4, +/* 00014A60 */ 0x05, 0x00, 0x0C, 0x09, 0x00, 0x00, 0x00, 0x08, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, +/* 00014A70 */ 0xFE, 0xB6, 0x02, 0xFE, 0x05, 0x02, 0xFE, 0x7E, 0x04, 0xFE, 0xB6, 0x02, 0xFE, 0x9F, 0x02, 0xFE, +/* 00014A80 */ 0x23, 0x03, 0xC4, 0xC1, 0xFE, 0xB9, 0x02, 0xFE, 0xFC, 0x01, 0xFF, 0x2B, 0x36, 0x01, 0x00, 0x0D, +/* 00014A90 */ 0x06, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x30, 0x00, 0x24, 0x00, 0x77, 0x00, 0x22, 0x00, 0x41, 0x00, +/* 00014AA0 */ 0x0F, 0x00, 0x5D, 0x00, 0x24, 0x00, 0x77, 0x00, 0x05, 0x00, 0x13, 0x00, 0x0A, 0x00, 0x2A, 0x00, +/* 00014AB0 */ 0x20, 0x00, 0x53, 0x00, 0x22, 0x00, 0x2E, 0x00, 0x4A, 0x00, 0x38, 0x00, 0x1A, 0x00, 0x4A, 0x00, +/* 00014AC0 */ 0x33, 0x00, 0x79, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0xBE, 0x06, +/* 00014AD0 */ 0x52, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x15, 0x04, 0x69, 0xFF, 0x15, 0x33, 0x01, 0x00, 0xFF, 0x15, +/* 00014AE0 */ 0x33, 0x01, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0x15, 0x33, 0x01, 0x00, 0xFE, 0x87, +/* 00014AF0 */ 0x02, 0xFE, 0x87, 0x02, 0x06, 0x05, 0x09, 0x06, 0x41, 0x3E, 0x03, 0x07, 0x03, 0x08, 0x08, 0x08, +/* 00014B00 */ 0x08, 0x08, 0x05, 0xFE, 0x88, 0x04, 0x06, 0xFE, 0x30, 0x03, 0x0C, 0xFE, 0x1E, 0x01, 0x58, 0x06, +/* 00014B10 */ 0x4E, 0x07, 0x0E, 0x08, 0x00, 0x06, 0x5F, 0x09, 0x06, 0x00, 0x0F, 0x24, 0x00, 0x09, 0x8F, 0x03, +/* 00014B20 */ 0x03, 0x0A, 0x00, 0x00, 0x6D, 0x09, 0x0A, 0x01, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0A, 0x5A, 0x01, +/* 00014B30 */ 0x02, 0x00, 0x00, 0x5A, 0x02, 0x03, 0x00, 0x00, 0xF4, 0x03, 0xFF, 0x09, 0x01, 0x00, 0x00, 0x00, +/* 00014B40 */ 0x00, 0x00, 0xA8, 0x09, 0x45, 0x07, 0x09, 0xA8, 0x09, 0x14, 0x03, 0x00, 0x05, 0x09, 0x09, 0x20, +/* 00014B50 */ 0x00, 0x8F, 0x03, 0x03, 0x0A, 0x00, 0x00, 0x6D, 0x09, 0x0A, 0x02, 0x07, 0x01, 0x00, 0x59, 0x00, +/* 00014B60 */ 0x0A, 0xF4, 0x01, 0x09, 0x09, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, 0x07, 0x09, 0x09, 0x86, +/* 00014B70 */ 0x00, 0x8F, 0x03, 0x24, 0x0A, 0x01, 0x00, 0x6D, 0x09, 0x0A, 0x03, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 00014B80 */ 0x0A, 0x5A, 0x01, 0x05, 0x02, 0x00, 0xF4, 0x02, 0x09, 0x09, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, +/* 00014B90 */ 0x45, 0x07, 0x09, 0x8F, 0x03, 0x36, 0x0A, 0x02, 0x00, 0x4A, 0x0A, 0x6D, 0x09, 0x0A, 0x04, 0x07, +/* 00014BA0 */ 0x02, 0x00, 0x59, 0x00, 0x0A, 0x5A, 0x01, 0x07, 0x03, 0x00, 0xF4, 0x02, 0x09, 0x09, 0x04, 0x00, +/* 00014BB0 */ 0x00, 0x00, 0x03, 0x00, 0x0F, 0x25, 0x00, 0x09, 0x8F, 0x03, 0x36, 0x0A, 0x02, 0x00, 0x4A, 0x0A, +/* 00014BC0 */ 0x6D, 0x09, 0x0A, 0x05, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0A, 0x5A, 0x01, 0x07, 0x04, 0x00, 0xF4, +/* 00014BD0 */ 0x02, 0x09, 0x09, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x0F, 0x1A, 0x00, 0x09, 0x8F, 0x03, 0x03, +/* 00014BE0 */ 0x0A, 0x00, 0x00, 0x6D, 0x09, 0x0A, 0x06, 0x07, 0x01, 0x00, 0x59, 0x00, 0x0A, 0xF4, 0x01, 0xFF, +/* 00014BF0 */ 0x09, 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, 0x8F, 0x03, 0x03, 0x0A, 0x00, 0x00, 0x6D, 0x09, 0x0A, +/* 00014C00 */ 0x07, 0x07, 0x05, 0x00, 0x59, 0x00, 0x0A, 0x5A, 0x01, 0x06, 0x06, 0x00, 0x5A, 0x02, 0x07, 0x06, +/* 00014C10 */ 0x00, 0x5A, 0x03, 0x04, 0x06, 0x00, 0x5A, 0x04, 0x04, 0x06, 0x00, 0xF4, 0x05, 0x00, 0x09, 0x07, +/* 00014C20 */ 0x00, 0x00, 0x00, 0x06, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x7E, 0x04, 0xFE, +/* 00014C30 */ 0xB6, 0x02, 0xFE, 0x9F, 0x02, 0xFE, 0x23, 0x03, 0xC4, 0xC1, 0xFE, 0xB9, 0x02, 0xFE, 0xFC, 0x01, +/* 00014C40 */ 0xFF, 0x39, 0x33, 0x01, 0x00, 0x0A, 0x04, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x40, 0x00, 0x24, 0x00, +/* 00014C50 */ 0x70, 0x00, 0x05, 0x00, 0x13, 0x00, 0x0A, 0x00, 0x2A, 0x00, 0x20, 0x00, 0x53, 0x00, 0x22, 0x00, +/* 00014C60 */ 0x2E, 0x00, 0x4A, 0x00, 0x38, 0x00, 0x1A, 0x00, 0x4A, 0x00, 0x33, 0x00, 0x72, 0x00, 0x00, 0x7F, +/* 00014C70 */ 0x5C, 0x0A, 0xC1, 0x07, 0x10, 0x03, 0x00, 0xFE, 0xAB, 0x06, 0x25, 0xA2, 0x41, 0xC1, 0x00, 0xFE, +/* 00014C80 */ 0x2D, 0x04, 0x68, 0xFF, 0xAC, 0x2F, 0x01, 0x00, 0xFF, 0xAC, 0x2F, 0x01, 0x00, 0x01, 0xFE, 0x00, +/* 00014C90 */ 0x90, 0x02, 0x02, 0xFF, 0xAC, 0x2F, 0x01, 0x00, 0xFE, 0xB3, 0x02, 0xFE, 0xB3, 0x02, 0x05, 0x05, +/* 00014CA0 */ 0x08, 0x04, 0x32, 0x2E, 0x03, 0x01, 0x04, 0x02, 0x07, 0x07, 0x07, 0x07, 0x01, 0x07, 0x06, 0xFE, +/* 00014CB0 */ 0x94, 0x03, 0x05, 0xFE, 0x88, 0x04, 0x06, 0xFE, 0x30, 0x03, 0xDB, 0x4E, 0x06, 0x8F, 0x03, 0x03, +/* 00014CC0 */ 0x09, 0x00, 0x00, 0x6D, 0x08, 0x09, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x09, 0x5A, 0x01, 0x05, +/* 00014CD0 */ 0x00, 0x00, 0xF4, 0x02, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x06, 0x08, 0x0E, +/* 00014CE0 */ 0x08, 0x00, 0x06, 0x5F, 0x08, 0x06, 0x01, 0x0F, 0x24, 0x00, 0x08, 0x8F, 0x01, 0x09, 0x08, 0x01, +/* 00014CF0 */ 0x00, 0x4A, 0x08, 0xE3, 0x08, 0x05, 0x08, 0x00, 0x0E, 0x13, 0x00, 0x08, 0x8F, 0x03, 0x03, 0x08, +/* 00014D00 */ 0x00, 0x00, 0x5F, 0x08, 0x08, 0x02, 0x98, 0x08, 0x05, 0x08, 0x00, 0x00, 0x45, 0x05, 0x08, 0x2A, +/* 00014D10 */ 0x08, 0x05, 0x15, 0x03, 0x00, 0x08, 0x02, 0x09, 0x24, 0x00, 0x8F, 0x03, 0x03, 0x09, 0x00, 0x00, +/* 00014D20 */ 0x6D, 0x08, 0x09, 0x03, 0x07, 0x03, 0x00, 0x59, 0x00, 0x09, 0x5A, 0x01, 0x03, 0x01, 0x00, 0x5A, +/* 00014D30 */ 0x02, 0x04, 0x01, 0x00, 0xF4, 0x03, 0xFF, 0x08, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x8F, 0x03, +/* 00014D40 */ 0x03, 0x09, 0x00, 0x00, 0x6D, 0x08, 0x09, 0x04, 0x07, 0x02, 0x00, 0x59, 0x00, 0x09, 0x5A, 0x01, +/* 00014D50 */ 0x05, 0x02, 0x00, 0xF4, 0x02, 0x08, 0x08, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x45, 0x06, 0x08, +/* 00014D60 */ 0x5F, 0x08, 0x06, 0x05, 0x0F, 0x24, 0x00, 0x08, 0x8F, 0x03, 0x03, 0x09, 0x00, 0x00, 0x6D, 0x08, +/* 00014D70 */ 0x09, 0x06, 0x07, 0x03, 0x00, 0x59, 0x00, 0x09, 0x5A, 0x01, 0x03, 0x03, 0x00, 0x5A, 0x02, 0x04, +/* 00014D80 */ 0x03, 0x00, 0xF4, 0x03, 0xFF, 0x08, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x45, 0x00, 0x06, 0x09, +/* 00014D90 */ 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x05, 0x02, 0xFE, 0x7E, 0x04, 0xFE, 0x30, 0x02, 0xFE, +/* 00014DA0 */ 0xB6, 0x02, 0xFE, 0x05, 0x02, 0xFE, 0x7E, 0x04, 0xFE, 0xB6, 0x02, 0xFF, 0xC9, 0x2F, 0x01, 0x00, +/* 00014DB0 */ 0x0A, 0x02, 0x00, 0x00, 0x00, 0x22, 0x00, 0x3E, 0x00, 0x1D, 0x00, 0x73, 0x00, 0x13, 0x00, 0x3F, +/* 00014DC0 */ 0x00, 0x0B, 0x00, 0x2F, 0x00, 0x24, 0x00, 0x70, 0x00, 0x22, 0x00, 0x3A, 0x00, 0x08, 0x00, 0x3F, +/* 00014DD0 */ 0x00, 0x24, 0x00, 0x70, 0x00, 0x08, 0x00, 0x1D, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x17, 0x10, +/* 00014DE0 */ 0x43, 0x00, 0xFE, 0x91, 0x06, 0x48, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x30, 0x03, 0x67, 0xFF, 0xA6, +/* 00014DF0 */ 0x2B, 0x01, 0x00, 0xFF, 0xA6, 0x2B, 0x01, 0x00, 0x08, 0xFE, 0x00, 0x90, 0x03, 0x01, 0xFF, 0xA6, +/* 00014E00 */ 0x2B, 0x01, 0x00, 0xFE, 0xDD, 0x03, 0xFE, 0xDD, 0x03, 0x0C, 0x09, 0x12, 0x05, 0x5C, 0x53, 0x03, +/* 00014E10 */ 0x06, 0x05, 0x09, 0x09, 0x09, 0x09, 0x01, 0x01, 0x11, 0x08, 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, +/* 00014E20 */ 0x2B, 0x03, 0x0C, 0x06, 0xFE, 0x2C, 0x03, 0x06, 0xFE, 0x2D, 0x03, 0x07, 0xFE, 0x6E, 0x01, 0x01, +/* 00014E30 */ 0x5D, 0x01, 0x0B, 0x58, 0x10, 0xC0, 0x0C, 0x4E, 0x0D, 0x4E, 0x0E, 0x4E, 0x0F, 0x15, 0x05, 0x00, +/* 00014E40 */ 0x09, 0x02, 0xA8, 0x12, 0x45, 0x09, 0x12, 0x15, 0x05, 0x00, 0x0A, 0x02, 0xA8, 0x12, 0x45, 0x0A, +/* 00014E50 */ 0x12, 0x4E, 0x0D, 0x4E, 0x0E, 0x4E, 0x0F, 0xA8, 0x12, 0x14, 0x03, 0x00, 0x0B, 0x12, 0x09, 0x06, +/* 00014E60 */ 0x00, 0x45, 0x12, 0x0C, 0x09, 0x03, 0x00, 0x46, 0x12, 0x0B, 0x45, 0x0D, 0x12, 0x8F, 0x02, 0x07, +/* 00014E70 */ 0x12, 0x00, 0x00, 0x4A, 0x12, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x0D, 0x00, 0x00, +/* 00014E80 */ 0x8F, 0x01, 0x08, 0x13, 0x01, 0x00, 0x4A, 0x13, 0x5A, 0x02, 0x13, 0x00, 0x00, 0xF0, 0x03, 0x12, +/* 00014E90 */ 0x12, 0x00, 0x00, 0x45, 0x0E, 0x12, 0x8F, 0x03, 0x03, 0x13, 0x02, 0x00, 0x6D, 0x12, 0x13, 0x00, +/* 00014EA0 */ 0x07, 0x02, 0x00, 0x59, 0x00, 0x13, 0x5A, 0x01, 0x0E, 0x01, 0x00, 0xF4, 0x02, 0x12, 0x12, 0x00, +/* 00014EB0 */ 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, 0x0F, 0x12, 0xA8, 0x12, 0x14, 0x03, 0x00, 0x0F, 0x12, 0x09, +/* 00014EC0 */ 0x43, 0x00, 0x8F, 0x03, 0x36, 0x13, 0x03, 0x00, 0x4A, 0x13, 0x6D, 0x12, 0x13, 0x01, 0x07, 0x01, +/* 00014ED0 */ 0x00, 0x59, 0x00, 0x13, 0xF4, 0x01, 0x12, 0x12, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x45, 0x0F, +/* 00014EE0 */ 0x12, 0x8F, 0x03, 0x03, 0x13, 0x02, 0x00, 0x6D, 0x12, 0x13, 0x02, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 00014EF0 */ 0x13, 0x5A, 0x01, 0x0E, 0x03, 0x00, 0x5A, 0x02, 0x0F, 0x03, 0x00, 0xF4, 0x03, 0xFF, 0x12, 0x02, +/* 00014F00 */ 0x00, 0x00, 0x00, 0x03, 0x00, 0x8F, 0x01, 0x05, 0x12, 0x04, 0x00, 0x4A, 0x12, 0x07, 0x04, 0x00, +/* 00014F10 */ 0x59, 0x00, 0x02, 0x5A, 0x01, 0x0F, 0x04, 0x00, 0x5A, 0x02, 0x09, 0x04, 0x00, 0x5A, 0x03, 0x0A, +/* 00014F20 */ 0x04, 0x00, 0xF0, 0x04, 0xFF, 0x12, 0x04, 0x00, 0xA8, 0x12, 0x14, 0x03, 0x00, 0x0B, 0x12, 0x09, +/* 00014F30 */ 0x61, 0x00, 0xE3, 0x12, 0x10, 0x0C, 0x00, 0x0E, 0x58, 0x00, 0x12, 0x8F, 0x03, 0x36, 0x13, 0x03, +/* 00014F40 */ 0x00, 0x4A, 0x13, 0x6D, 0x12, 0x13, 0x03, 0x07, 0x04, 0x00, 0x59, 0x00, 0x13, 0x5A, 0x01, 0x10, +/* 00014F50 */ 0x05, 0x00, 0x8F, 0x03, 0x03, 0x14, 0x02, 0x00, 0x5F, 0x14, 0x14, 0x04, 0x5A, 0x02, 0x14, 0x05, +/* 00014F60 */ 0x00, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x7B, 0x0E, +/* 00014F70 */ 0x14, 0x05, 0x7B, 0x05, 0x14, 0x06, 0x7B, 0x05, 0x14, 0x07, 0x7B, 0x05, 0x14, 0x08, 0x5A, 0x03, +/* 00014F80 */ 0x14, 0x05, 0x00, 0xF4, 0x04, 0xFF, 0x12, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x45, 0x00, 0x10, +/* 00014F90 */ 0x09, 0x08, 0x00, 0x45, 0x00, 0x0E, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x01, 0x18, 0x00, +/* 00014FA0 */ 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, +/* 00014FB0 */ 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0xFE, 0x05, 0x02, 0x69, +/* 00014FC0 */ 0xFE, 0x06, 0x02, 0xFE, 0x9C, 0x01, 0xFE, 0x30, 0x02, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, +/* 00014FD0 */ 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFF, 0xBE, 0x2B, 0x01, 0x00, 0x0E, 0x0E, 0x00, 0x00, 0x00, 0x0A, +/* 00014FE0 */ 0x00, 0x15, 0x00, 0x10, 0x00, 0x23, 0x00, 0x16, 0x00, 0x56, 0x00, 0x29, 0x00, 0x67, 0x00, 0x22, +/* 00014FF0 */ 0x00, 0x49, 0x00, 0x0A, 0x00, 0x32, 0x00, 0x1F, 0x00, 0x2B, 0x00, 0x24, 0x00, 0x53, 0x00, 0x23, +/* 00015000 */ 0x00, 0x47, 0x00, 0x13, 0x00, 0x52, 0x00, 0x52, 0x00, 0xF6, 0x00, 0x06, 0x00, 0x28, 0x00, 0x08, +/* 00015010 */ 0x00, 0x1F, 0x00, 0x00, 0x7F, 0x5D, 0x08, 0xC1, 0x03, 0x1A, 0x0B, 0x00, 0xFE, 0x7C, 0x06, 0x09, +/* 00015020 */ 0xA2, 0x41, 0xD1, 0x00, 0x65, 0xFF, 0x7D, 0x27, 0x01, 0x00, 0xFF, 0x7D, 0x27, 0x01, 0x00, 0x01, +/* 00015030 */ 0x40, 0xFE, 0x00, 0x90, 0x06, 0x06, 0xFF, 0x7D, 0x27, 0x01, 0x00, 0xFE, 0x90, 0x01, 0xFE, 0x90, +/* 00015040 */ 0x01, 0x04, 0xFE, 0x06, 0x01, 0xFE, 0x82, 0x04, 0xFE, 0x83, 0x04, 0xFE, 0x84, 0x04, 0x0C, 0x03, +/* 00015050 */ 0x0B, 0x08, 0x17, 0x17, 0x03, 0x02, 0x03, 0x01, 0x01, 0x01, 0x01, 0x08, 0x09, 0x0A, 0x08, 0x5A, +/* 00015060 */ 0x96, 0x02, 0x03, 0x96, 0x03, 0x04, 0x96, 0x04, 0x05, 0x96, 0x05, 0x06, 0x8F, 0x03, 0x03, 0x0C, +/* 00015070 */ 0x00, 0x00, 0x6D, 0x0B, 0x0C, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0C, 0x8F, 0x02, 0x06, 0x0D, +/* 00015080 */ 0x01, 0x00, 0x4A, 0x0D, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x93, 0x02, 0x0E, 0x02, 0x00, 0x5A, +/* 00015090 */ 0x01, 0x0E, 0x01, 0x00, 0xD6, 0x00, 0x0E, 0x5A, 0x02, 0x0E, 0x01, 0x00, 0xF0, 0x03, 0x0D, 0x0D, +/* 000150A0 */ 0x01, 0x00, 0x5A, 0x01, 0x0D, 0x00, 0x00, 0x5A, 0x02, 0x07, 0x00, 0x00, 0xF4, 0x03, 0xFF, 0x0B, +/* 000150B0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x04, 0x02, 0xFF, 0xCC, 0x27, +/* 000150C0 */ 0x01, 0x00, 0x02, 0x0C, 0x00, 0x00, 0x00, 0x4C, 0x00, 0x40, 0x01, 0x00, 0xD0, 0x50, 0x01, 0x00, +/* 000150D0 */ 0x7F, 0x5C, 0x08, 0xC1, 0x83, 0x10, 0x03, 0x02, 0xFE, 0x7D, 0x06, 0x46, 0xA2, 0x41, 0xC3, 0x00, +/* 000150E0 */ 0xFE, 0x87, 0x04, 0x66, 0xFF, 0x06, 0x28, 0x01, 0x00, 0xFF, 0x06, 0x28, 0x01, 0x00, 0x09, 0xFE, +/* 000150F0 */ 0x00, 0x90, 0x03, 0x01, 0xFF, 0x06, 0x28, 0x01, 0x00, 0xE6, 0xE6, 0x07, 0x03, 0x07, 0x09, 0x1B, +/* 00015100 */ 0x19, 0x04, 0x01, 0x05, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x08, 0x72, 0x58, 0x05, 0x15, 0x05, +/* 00015110 */ 0x00, 0x03, 0x02, 0xA8, 0x07, 0x45, 0x03, 0x07, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA8, 0x07, 0x45, +/* 00015120 */ 0x04, 0x07, 0x8F, 0x02, 0x02, 0x08, 0x00, 0x00, 0x6D, 0x07, 0x08, 0x00, 0x07, 0x08, 0x00, 0x59, +/* 00015130 */ 0x00, 0x08, 0x5A, 0x01, 0x05, 0x00, 0x00, 0x8F, 0x01, 0x02, 0x09, 0x01, 0x00, 0x5A, 0x02, 0x09, +/* 00015140 */ 0x00, 0x00, 0x8F, 0x01, 0x03, 0x09, 0x02, 0x00, 0x5A, 0x03, 0x09, 0x00, 0x00, 0x8F, 0x01, 0x04, +/* 00015150 */ 0x09, 0x03, 0x00, 0x5A, 0x04, 0x09, 0x00, 0x00, 0x8F, 0x01, 0x05, 0x09, 0x04, 0x00, 0x5A, 0x05, +/* 00015160 */ 0x09, 0x00, 0x00, 0x5A, 0x06, 0x03, 0x00, 0x00, 0x5A, 0x07, 0x04, 0x00, 0x00, 0xF4, 0x08, 0x00, +/* 00015170 */ 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x5A, 0x00, +/* 00015180 */ 0xFF, 0x32, 0x28, 0x01, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0A, 0x00, +/* 00015190 */ 0x27, 0x00, 0x5A, 0x00, 0x7D, 0x00, 0x00, 0x7F, 0x5D, 0x08, 0xC1, 0x03, 0x1A, 0x0B, 0x00, 0xFE, +/* 000151A0 */ 0x76, 0x06, 0x09, 0xA2, 0x41, 0xD1, 0x00, 0x63, 0xFF, 0x37, 0x25, 0x01, 0x00, 0xFF, 0x37, 0x25, +/* 000151B0 */ 0x01, 0x00, 0x01, 0x40, 0xFE, 0x00, 0x90, 0x06, 0x06, 0xFF, 0x37, 0x25, 0x01, 0x00, 0xFE, 0x90, +/* 000151C0 */ 0x01, 0xFE, 0x90, 0x01, 0x04, 0xFE, 0x06, 0x01, 0xFE, 0x82, 0x04, 0xFE, 0x83, 0x04, 0xFE, 0x84, +/* 000151D0 */ 0x04, 0x0C, 0x03, 0x0B, 0x08, 0x17, 0x17, 0x03, 0x02, 0x03, 0x01, 0x01, 0x01, 0x01, 0x08, 0x09, +/* 000151E0 */ 0x0A, 0x08, 0x5A, 0x96, 0x02, 0x03, 0x96, 0x03, 0x04, 0x96, 0x04, 0x05, 0x96, 0x05, 0x06, 0x8F, +/* 000151F0 */ 0x03, 0x03, 0x0C, 0x00, 0x00, 0x6D, 0x0B, 0x0C, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0C, 0x8F, +/* 00015200 */ 0x02, 0x06, 0x0D, 0x01, 0x00, 0x4A, 0x0D, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x93, 0x02, 0x0E, +/* 00015210 */ 0x02, 0x00, 0x5A, 0x01, 0x0E, 0x01, 0x00, 0xD6, 0x00, 0x0E, 0x5A, 0x02, 0x0E, 0x01, 0x00, 0xF0, +/* 00015220 */ 0x03, 0x0D, 0x0D, 0x01, 0x00, 0x5A, 0x01, 0x0D, 0x00, 0x00, 0x5A, 0x02, 0x07, 0x00, 0x00, 0xF4, +/* 00015230 */ 0x03, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x04, 0x02, +/* 00015240 */ 0xFF, 0x86, 0x25, 0x01, 0x00, 0x02, 0x0C, 0x00, 0x00, 0x00, 0x4C, 0x00, 0x40, 0x01, 0x00, 0x53, +/* 00015250 */ 0x52, 0x01, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x83, 0x10, 0x03, 0x02, 0xFE, 0x77, 0x06, 0x46, 0xA2, +/* 00015260 */ 0x41, 0xC3, 0x00, 0xFE, 0x86, 0x04, 0x64, 0xFF, 0xC0, 0x25, 0x01, 0x00, 0xFF, 0xC0, 0x25, 0x01, +/* 00015270 */ 0x00, 0x09, 0xFE, 0x00, 0x90, 0x03, 0x01, 0xFF, 0xC0, 0x25, 0x01, 0x00, 0xE6, 0xE6, 0x07, 0x03, +/* 00015280 */ 0x07, 0x09, 0x1B, 0x19, 0x04, 0x01, 0x05, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x08, 0x72, 0x58, +/* 00015290 */ 0x05, 0x15, 0x05, 0x00, 0x03, 0x02, 0xA8, 0x07, 0x45, 0x03, 0x07, 0x15, 0x05, 0x00, 0x04, 0x02, +/* 000152A0 */ 0xA8, 0x07, 0x45, 0x04, 0x07, 0x8F, 0x02, 0x02, 0x08, 0x00, 0x00, 0x6D, 0x07, 0x08, 0x00, 0x07, +/* 000152B0 */ 0x08, 0x00, 0x59, 0x00, 0x08, 0x5A, 0x01, 0x05, 0x00, 0x00, 0x8F, 0x01, 0x02, 0x09, 0x01, 0x00, +/* 000152C0 */ 0x5A, 0x02, 0x09, 0x00, 0x00, 0x8F, 0x01, 0x03, 0x09, 0x02, 0x00, 0x5A, 0x03, 0x09, 0x00, 0x00, +/* 000152D0 */ 0x8F, 0x01, 0x04, 0x09, 0x03, 0x00, 0x5A, 0x04, 0x09, 0x00, 0x00, 0x8F, 0x01, 0x05, 0x09, 0x04, +/* 000152E0 */ 0x00, 0x5A, 0x05, 0x09, 0x00, 0x00, 0x5A, 0x06, 0x03, 0x00, 0x00, 0x5A, 0x07, 0x04, 0x00, 0x00, +/* 000152F0 */ 0xF4, 0x08, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, +/* 00015300 */ 0x00, 0x5A, 0x00, 0xFF, 0xEC, 0x25, 0x01, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, +/* 00015310 */ 0x00, 0x0A, 0x00, 0x27, 0x00, 0x5A, 0x00, 0x7D, 0x00, 0x00, 0x7F, 0x5D, 0x08, 0xC1, 0x03, 0x1A, +/* 00015320 */ 0x0B, 0x00, 0xFE, 0x70, 0x06, 0x09, 0xA2, 0x41, 0xD1, 0x00, 0x61, 0xFF, 0x03, 0x23, 0x01, 0x00, +/* 00015330 */ 0xFF, 0x03, 0x23, 0x01, 0x00, 0x01, 0x40, 0xFE, 0x00, 0x90, 0x06, 0x06, 0xFF, 0x03, 0x23, 0x01, +/* 00015340 */ 0x00, 0xFE, 0x8C, 0x01, 0xFE, 0x8C, 0x01, 0x04, 0xFE, 0x06, 0x01, 0xFE, 0x82, 0x04, 0xFE, 0x83, +/* 00015350 */ 0x04, 0xFE, 0x84, 0x04, 0x0C, 0x03, 0x0B, 0x08, 0x17, 0x17, 0x03, 0x02, 0x03, 0x01, 0x01, 0x01, +/* 00015360 */ 0x01, 0x08, 0x09, 0x0A, 0x08, 0x5A, 0x96, 0x02, 0x03, 0x96, 0x03, 0x04, 0x96, 0x04, 0x05, 0x96, +/* 00015370 */ 0x05, 0x06, 0x8F, 0x03, 0x03, 0x0C, 0x00, 0x00, 0x6D, 0x0B, 0x0C, 0x00, 0x07, 0x03, 0x00, 0x59, +/* 00015380 */ 0x00, 0x0C, 0x8F, 0x02, 0x06, 0x0D, 0x01, 0x00, 0x4A, 0x0D, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, +/* 00015390 */ 0x93, 0x02, 0x0E, 0x02, 0x00, 0x5A, 0x01, 0x0E, 0x01, 0x00, 0xD6, 0x00, 0x0E, 0x5A, 0x02, 0x0E, +/* 000153A0 */ 0x01, 0x00, 0xF0, 0x03, 0x0D, 0x0D, 0x01, 0x00, 0x5A, 0x01, 0x0D, 0x00, 0x00, 0x5A, 0x02, 0x07, +/* 000153B0 */ 0x00, 0x00, 0xF4, 0x03, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0x00, 0x24, 0x00, +/* 000153C0 */ 0xFE, 0x04, 0x02, 0xFF, 0x52, 0x23, 0x01, 0x00, 0x02, 0x0C, 0x00, 0x00, 0x00, 0x4C, 0x00, 0x3C, +/* 000153D0 */ 0x01, 0x00, 0xD6, 0x53, 0x01, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x83, 0x10, 0x03, 0x02, 0xFE, 0x71, +/* 000153E0 */ 0x06, 0x46, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x85, 0x04, 0x62, 0xFF, 0x8C, 0x23, 0x01, 0x00, 0xFF, +/* 000153F0 */ 0x8C, 0x23, 0x01, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x03, 0x01, 0xFF, 0x8C, 0x23, 0x01, 0x00, 0xE2, +/* 00015400 */ 0xE2, 0x07, 0x03, 0x07, 0x09, 0x1B, 0x19, 0x04, 0x01, 0x05, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, +/* 00015410 */ 0x08, 0x72, 0x58, 0x05, 0x15, 0x05, 0x00, 0x03, 0x02, 0xA8, 0x07, 0x45, 0x03, 0x07, 0x15, 0x05, +/* 00015420 */ 0x00, 0x04, 0x02, 0xA8, 0x07, 0x45, 0x04, 0x07, 0x8F, 0x02, 0x02, 0x08, 0x00, 0x00, 0x6D, 0x07, +/* 00015430 */ 0x08, 0x00, 0x07, 0x08, 0x00, 0x59, 0x00, 0x08, 0x5A, 0x01, 0x05, 0x00, 0x00, 0x8F, 0x01, 0x02, +/* 00015440 */ 0x09, 0x01, 0x00, 0x5A, 0x02, 0x09, 0x00, 0x00, 0x8F, 0x01, 0x03, 0x09, 0x02, 0x00, 0x5A, 0x03, +/* 00015450 */ 0x09, 0x00, 0x00, 0x8F, 0x01, 0x04, 0x09, 0x03, 0x00, 0x5A, 0x04, 0x09, 0x00, 0x00, 0x8F, 0x01, +/* 00015460 */ 0x05, 0x09, 0x04, 0x00, 0x5A, 0x05, 0x09, 0x00, 0x00, 0x5A, 0x06, 0x03, 0x00, 0x00, 0x5A, 0x07, +/* 00015470 */ 0x04, 0x00, 0x00, 0xF4, 0x08, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, +/* 00015480 */ 0xA8, 0x00, 0x24, 0x00, 0x5A, 0x00, 0xFF, 0xB4, 0x23, 0x01, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00, +/* 00015490 */ 0x0A, 0x00, 0x15, 0x00, 0x0A, 0x00, 0x27, 0x00, 0x5A, 0x00, 0x7D, 0x00, 0x00, 0x7F, 0x5C, 0x0E, +/* 000154A0 */ 0xC1, 0x07, 0x10, 0x03, 0x00, 0xFE, 0x3B, 0x06, 0x08, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x26, 0x04, +/* 000154B0 */ 0x60, 0xFF, 0xFB, 0x14, 0x01, 0x00, 0xFF, 0xFB, 0x14, 0x01, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x07, +/* 000154C0 */ 0x07, 0xFF, 0xFB, 0x14, 0x01, 0x00, 0xFE, 0x16, 0x06, 0xFE, 0x16, 0x06, 0x0E, 0x08, 0x12, 0x0A, +/* 000154D0 */ 0x88, 0x82, 0x03, 0x02, 0x01, 0x0D, 0x07, 0x09, 0x09, 0x09, 0x09, 0x01, 0x11, 0x06, 0xFE, 0x94, +/* 000154E0 */ 0x03, 0x06, 0xFE, 0x2E, 0x04, 0x05, 0xFE, 0x81, 0x04, 0x08, 0x0C, 0x0B, 0xFE, 0x4A, 0x02, 0x58, +/* 000154F0 */ 0x0E, 0x4E, 0x0F, 0x4E, 0x10, 0x2A, 0x12, 0x0E, 0x15, 0x0F, 0x00, 0x12, 0x02, 0x8F, 0x03, 0x0D, +/* 00015500 */ 0x12, 0x00, 0x00, 0xE3, 0x12, 0x0E, 0x12, 0x00, 0x0F, 0x24, 0x00, 0x12, 0x8F, 0x03, 0x03, 0x13, +/* 00015510 */ 0x01, 0x00, 0x6D, 0x12, 0x13, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x13, 0x5A, 0x01, 0x08, 0x00, +/* 00015520 */ 0x00, 0x5A, 0x02, 0x03, 0x00, 0x00, 0xF4, 0x03, 0xFF, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00015530 */ 0x8F, 0x03, 0x36, 0x13, 0x02, 0x00, 0x4A, 0x13, 0x6D, 0x12, 0x13, 0x01, 0x07, 0x02, 0x00, 0x59, +/* 00015540 */ 0x00, 0x13, 0x8F, 0x03, 0x0D, 0x14, 0x00, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x01, 0x0E, 0x02, 0x00, +/* 00015550 */ 0xC5, 0x02, 0x14, 0x14, 0x02, 0x00, 0x5A, 0x01, 0x14, 0x01, 0x00, 0xF4, 0x02, 0x12, 0x12, 0x01, +/* 00015560 */ 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, 0x0F, 0x12, 0x8F, 0x03, 0x36, 0x13, 0x02, 0x00, 0x4A, 0x13, +/* 00015570 */ 0x6D, 0x12, 0x13, 0x02, 0x07, 0x02, 0x00, 0x59, 0x00, 0x13, 0x5A, 0x01, 0x0F, 0x03, 0x00, 0xF4, +/* 00015580 */ 0x02, 0x12, 0x12, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x0F, 0x25, 0x00, 0x12, 0x8F, 0x03, 0x36, +/* 00015590 */ 0x13, 0x02, 0x00, 0x4A, 0x13, 0x6D, 0x12, 0x13, 0x03, 0x07, 0x02, 0x00, 0x59, 0x00, 0x13, 0x5A, +/* 000155A0 */ 0x01, 0x0F, 0x04, 0x00, 0xF4, 0x02, 0x12, 0x12, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x0F, 0x06, +/* 000155B0 */ 0x00, 0x12, 0x45, 0x00, 0x04, 0x09, 0x7F, 0x01, 0xA8, 0x12, 0x45, 0x10, 0x12, 0x8F, 0x03, 0x03, +/* 000155C0 */ 0x12, 0x01, 0x00, 0x5F, 0x12, 0x12, 0x04, 0x0E, 0xB1, 0x00, 0x12, 0xA8, 0x12, 0x14, 0x03, 0x00, +/* 000155D0 */ 0x0C, 0x12, 0x09, 0xA7, 0x00, 0xA8, 0x12, 0x14, 0x03, 0x00, 0x0D, 0x12, 0x09, 0x9D, 0x00, 0x8F, +/* 000155E0 */ 0x01, 0x07, 0x12, 0x03, 0x00, 0x4A, 0x12, 0x98, 0x12, 0x12, 0x0B, 0x00, 0x00, 0x0E, 0x14, 0x00, +/* 000155F0 */ 0x12, 0x8F, 0x01, 0x07, 0x12, 0x03, 0x00, 0x4A, 0x12, 0x98, 0x12, 0x12, 0x0B, 0x01, 0x00, 0x45, +/* 00015600 */ 0x10, 0x12, 0x09, 0x77, 0x00, 0x8F, 0x03, 0x36, 0x13, 0x02, 0x00, 0x4A, 0x13, 0x6D, 0x12, 0x13, +/* 00015610 */ 0x05, 0x07, 0x01, 0x00, 0x59, 0x00, 0x13, 0xF4, 0x01, 0x12, 0x12, 0x05, 0x00, 0x00, 0x00, 0x05, +/* 00015620 */ 0x00, 0x45, 0x10, 0x12, 0x8F, 0x01, 0x05, 0x12, 0x04, 0x00, 0x4A, 0x12, 0x07, 0x04, 0x00, 0x59, +/* 00015630 */ 0x00, 0x05, 0x5A, 0x01, 0x10, 0x06, 0x00, 0xA8, 0x13, 0x5A, 0x02, 0x13, 0x06, 0x00, 0x8F, 0x01, +/* 00015640 */ 0x06, 0x13, 0x05, 0x00, 0x4A, 0x13, 0x07, 0x04, 0x00, 0x59, 0x00, 0x05, 0xA8, 0x14, 0x5A, 0x01, +/* 00015650 */ 0x14, 0x07, 0x00, 0x5A, 0x02, 0x09, 0x07, 0x00, 0x5A, 0x03, 0x0A, 0x07, 0x00, 0xF0, 0x04, 0x13, +/* 00015660 */ 0x13, 0x07, 0x00, 0x5A, 0x03, 0x13, 0x06, 0x00, 0xF0, 0x04, 0xFF, 0x12, 0x06, 0x00, 0x8F, 0x01, +/* 00015670 */ 0x07, 0x12, 0x03, 0x00, 0x4A, 0x12, 0x9D, 0x10, 0x12, 0x0B, 0x00, 0x00, 0x0F, 0x65, 0x00, 0x10, +/* 00015680 */ 0x8F, 0x03, 0x36, 0x13, 0x02, 0x00, 0x4A, 0x13, 0x6D, 0x12, 0x13, 0x06, 0x07, 0x01, 0x00, 0x59, +/* 00015690 */ 0x00, 0x13, 0xF4, 0x01, 0x12, 0x12, 0x06, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x10, 0x12, 0x8F, +/* 000156A0 */ 0x01, 0x05, 0x12, 0x04, 0x00, 0x4A, 0x12, 0x07, 0x04, 0x00, 0x59, 0x00, 0x05, 0x5A, 0x01, 0x10, +/* 000156B0 */ 0x09, 0x00, 0x5A, 0x02, 0x0C, 0x09, 0x00, 0x8F, 0x01, 0x06, 0x13, 0x05, 0x00, 0x4A, 0x13, 0x07, +/* 000156C0 */ 0x04, 0x00, 0x59, 0x00, 0x05, 0x5A, 0x01, 0x0D, 0x0A, 0x00, 0x5A, 0x02, 0x09, 0x0A, 0x00, 0x5A, +/* 000156D0 */ 0x03, 0x0A, 0x0A, 0x00, 0xF0, 0x04, 0x13, 0x13, 0x0A, 0x00, 0x5A, 0x03, 0x13, 0x09, 0x00, 0xF0, +/* 000156E0 */ 0x04, 0xFF, 0x12, 0x09, 0x00, 0x8F, 0x03, 0x03, 0x13, 0x01, 0x00, 0x6D, 0x12, 0x13, 0x07, 0x07, +/* 000156F0 */ 0x05, 0x00, 0x59, 0x00, 0x13, 0x5A, 0x01, 0x10, 0x0B, 0x00, 0x8F, 0x03, 0x24, 0x15, 0x06, 0x00, +/* 00015700 */ 0x6D, 0x14, 0x15, 0x08, 0x07, 0x02, 0x00, 0x59, 0x00, 0x15, 0x5A, 0x01, 0x0E, 0x0C, 0x00, 0xF4, +/* 00015710 */ 0x02, 0x14, 0x14, 0x08, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x5A, 0x02, 0x14, 0x0B, 0x00, 0x5A, 0x03, +/* 00015720 */ 0x06, 0x0B, 0x00, 0x5A, 0x04, 0x07, 0x0B, 0x00, 0xF4, 0x05, 0x00, 0x12, 0x07, 0x00, 0x00, 0x00, +/* 00015730 */ 0x0B, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB6, 0x02, 0x9C, 0xC4, 0xC1, 0xFE, +/* 00015740 */ 0x4D, 0x03, 0x69, 0x69, 0xFE, 0xFC, 0x01, 0xFE, 0x23, 0x03, 0xFF, 0x70, 0x15, 0x01, 0x00, 0x11, +/* 00015750 */ 0x06, 0x00, 0x00, 0x00, 0x17, 0x00, 0x4B, 0x00, 0x24, 0x00, 0x48, 0x00, 0x38, 0x00, 0x35, 0x00, +/* 00015760 */ 0x4A, 0x00, 0x3C, 0x00, 0x06, 0x00, 0x32, 0x00, 0x05, 0x00, 0x29, 0x00, 0x22, 0x00, 0xC6, 0x00, +/* 00015770 */ 0x12, 0x00, 0x7C, 0x00, 0x14, 0x00, 0x96, 0x00, 0x1F, 0x00, 0x2E, 0x00, 0x4A, 0x00, 0x76, 0x00, +/* 00015780 */ 0x0E, 0x00, 0x70, 0x00, 0x04, 0x00, 0x24, 0x00, 0x1F, 0x00, 0x2A, 0x00, 0x46, 0x00, 0x79, 0x00, +/* 00015790 */ 0x52, 0x00, 0x8E, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x2B, 0x06, +/* 000157A0 */ 0x26, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x80, 0x04, 0x5F, 0xFF, 0x90, 0x12, 0x01, 0x00, 0xFF, 0x90, +/* 000157B0 */ 0x12, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFF, 0x90, 0x12, 0x01, 0x00, 0xFD, 0xFD, +/* 000157C0 */ 0x05, 0x04, 0x07, 0x06, 0x22, 0x22, 0x03, 0x04, 0x02, 0x04, 0x04, 0x04, 0x04, 0x06, 0x0B, 0x0C, +/* 000157D0 */ 0x99, 0x8F, 0x03, 0x36, 0x08, 0x00, 0x00, 0x4A, 0x08, 0x6D, 0x07, 0x08, 0x00, 0x07, 0x02, 0x00, +/* 000157E0 */ 0x59, 0x00, 0x08, 0x5A, 0x01, 0x05, 0x00, 0x00, 0xF4, 0x02, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, +/* 000157F0 */ 0x00, 0x00, 0x0F, 0x25, 0x00, 0x07, 0x8F, 0x03, 0x36, 0x08, 0x00, 0x00, 0x4A, 0x08, 0x6D, 0x07, +/* 00015800 */ 0x08, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x08, 0x5A, 0x01, 0x05, 0x01, 0x00, 0xF4, 0x02, 0x07, +/* 00015810 */ 0x07, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0F, 0x1A, 0x00, 0x07, 0x8F, 0x03, 0x03, 0x08, 0x01, +/* 00015820 */ 0x00, 0x6D, 0x07, 0x08, 0x02, 0x07, 0x01, 0x00, 0x59, 0x00, 0x08, 0xF4, 0x01, 0xFF, 0x07, 0x02, +/* 00015830 */ 0x00, 0x00, 0x00, 0x02, 0x00, 0x8F, 0x03, 0x03, 0x08, 0x01, 0x00, 0x6D, 0x07, 0x08, 0x03, 0x07, +/* 00015840 */ 0x05, 0x00, 0x59, 0x00, 0x08, 0x5A, 0x01, 0x04, 0x03, 0x00, 0x5A, 0x02, 0x05, 0x03, 0x00, 0x5A, +/* 00015850 */ 0x03, 0x02, 0x03, 0x00, 0x5A, 0x04, 0x03, 0x03, 0x00, 0xF4, 0x05, 0x00, 0x07, 0x03, 0x00, 0x00, +/* 00015860 */ 0x00, 0x03, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xC4, 0xC1, 0xFE, 0xB9, 0x02, 0xFE, +/* 00015870 */ 0xFC, 0x01, 0xFF, 0xB0, 0x12, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x4A, 0x00, 0x34, 0x00, +/* 00015880 */ 0x1A, 0x00, 0x38, 0x00, 0x33, 0x00, 0x70, 0x00, 0x00, 0x7E, 0x5D, 0x18, 0xC1, 0x43, 0x5A, 0x0B, +/* 00015890 */ 0x00, 0xFE, 0xFC, 0x05, 0x22, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x2A, 0x04, 0x5A, 0xFF, 0x67, 0x0B, +/* 000158A0 */ 0x01, 0x00, 0xFF, 0x67, 0x0B, 0x01, 0x00, 0x04, 0xFE, 0x00, 0x90, 0x04, 0x04, 0xFF, 0x67, 0x0B, +/* 000158B0 */ 0x01, 0x00, 0xFE, 0x00, 0x07, 0xFE, 0x00, 0x07, 0x02, 0xFE, 0xE0, 0x01, 0xFE, 0x7F, 0x04, 0x0B, +/* 000158C0 */ 0x0F, 0x15, 0x04, 0x68, 0x67, 0x03, 0x06, 0x04, 0x04, 0x06, 0x06, 0x06, 0x06, 0x01, 0x12, 0x13, +/* 000158D0 */ 0x14, 0x15, 0x07, 0x0B, 0x06, 0xFE, 0x42, 0x04, 0x06, 0xFE, 0x3F, 0x04, 0x06, 0xFE, 0x33, 0x04, +/* 000158E0 */ 0x06, 0xFE, 0x35, 0x04, 0x06, 0xFE, 0x36, 0x04, 0x06, 0xFE, 0x37, 0x04, 0x05, 0xFE, 0x44, 0x04, +/* 000158F0 */ 0x06, 0xFE, 0x38, 0x04, 0x06, 0xFE, 0x39, 0x04, 0x06, 0xFE, 0x3A, 0x04, 0x06, 0xFE, 0x40, 0x04, +/* 00015900 */ 0xFE, 0xB9, 0x01, 0x96, 0x02, 0x0F, 0x4E, 0x16, 0x96, 0x03, 0x16, 0x93, 0x02, 0x16, 0x00, 0x00, +/* 00015910 */ 0xA8, 0x17, 0x14, 0x03, 0x00, 0x16, 0x17, 0x09, 0x06, 0x00, 0x45, 0x16, 0x02, 0x09, 0x27, 0x00, +/* 00015920 */ 0x8F, 0x03, 0x24, 0x18, 0x01, 0x00, 0x6D, 0x17, 0x18, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x18, +/* 00015930 */ 0x93, 0x02, 0x19, 0x00, 0x00, 0x5A, 0x01, 0x19, 0x00, 0x00, 0xF4, 0x02, 0x17, 0x17, 0x00, 0x00, +/* 00015940 */ 0x00, 0x00, 0x00, 0x00, 0x46, 0x16, 0x17, 0x96, 0x02, 0x16, 0x8F, 0x03, 0x36, 0x17, 0x02, 0x00, +/* 00015950 */ 0x4A, 0x17, 0x6D, 0x16, 0x17, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x17, 0x93, 0x02, 0x18, 0x00, +/* 00015960 */ 0x00, 0x5A, 0x01, 0x18, 0x01, 0x00, 0xF4, 0x02, 0x16, 0x16, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, +/* 00015970 */ 0x96, 0x02, 0x16, 0x96, 0x03, 0x03, 0x14, 0x08, 0x00, 0x10, 0x04, 0x14, 0x03, 0x00, 0x10, 0x05, +/* 00015980 */ 0x09, 0x3E, 0x00, 0x8F, 0x03, 0x36, 0x17, 0x02, 0x00, 0x4A, 0x17, 0x6D, 0x16, 0x17, 0x02, 0x07, +/* 00015990 */ 0x03, 0x00, 0x59, 0x00, 0x17, 0xD0, 0x18, 0x04, 0x00, 0x00, 0xA1, 0x00, 0x06, 0x18, 0xA1, 0x01, +/* 000159A0 */ 0x07, 0x18, 0xA1, 0x02, 0x08, 0x18, 0xA1, 0x03, 0x09, 0x18, 0x5A, 0x01, 0x18, 0x02, 0x00, 0xD6, +/* 000159B0 */ 0x00, 0x18, 0x5A, 0x02, 0x18, 0x02, 0x00, 0xF4, 0x03, 0xFF, 0x16, 0x02, 0x00, 0x00, 0x00, 0x02, +/* 000159C0 */ 0x00, 0x14, 0x08, 0x00, 0x10, 0x0A, 0x14, 0x03, 0x00, 0x10, 0x05, 0x09, 0x3A, 0x00, 0x8F, 0x03, +/* 000159D0 */ 0x36, 0x17, 0x02, 0x00, 0x4A, 0x17, 0x6D, 0x16, 0x17, 0x03, 0x07, 0x03, 0x00, 0x59, 0x00, 0x17, +/* 000159E0 */ 0xD0, 0x18, 0x03, 0x01, 0x00, 0xA1, 0x00, 0x0B, 0x18, 0xA1, 0x01, 0x0C, 0x18, 0xA1, 0x02, 0x0D, +/* 000159F0 */ 0x18, 0x5A, 0x01, 0x18, 0x03, 0x00, 0xD6, 0x01, 0x18, 0x5A, 0x02, 0x18, 0x03, 0x00, 0xF4, 0x03, +/* 00015A00 */ 0xFF, 0x16, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x93, 0x03, 0x16, 0x03, 0x00, 0x14, 0x03, 0x00, +/* 00015A10 */ 0x16, 0x03, 0x09, 0x47, 0x00, 0x14, 0x08, 0x00, 0x11, 0x04, 0x14, 0x03, 0x00, 0x11, 0x0E, 0x09, +/* 00015A20 */ 0x3A, 0x00, 0x8F, 0x03, 0x36, 0x17, 0x02, 0x00, 0x4A, 0x17, 0x6D, 0x16, 0x17, 0x04, 0x07, 0x03, +/* 00015A30 */ 0x00, 0x59, 0x00, 0x17, 0xD0, 0x18, 0x03, 0x02, 0x00, 0xA1, 0x00, 0x07, 0x18, 0xA1, 0x01, 0x08, +/* 00015A40 */ 0x18, 0xA1, 0x02, 0x09, 0x18, 0x5A, 0x01, 0x18, 0x04, 0x00, 0xD6, 0x02, 0x18, 0x5A, 0x02, 0x18, +/* 00015A50 */ 0x04, 0x00, 0xF4, 0x03, 0xFF, 0x16, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x93, 0x03, 0x16, 0x03, +/* 00015A60 */ 0x00, 0x14, 0x03, 0x00, 0x16, 0x03, 0x09, 0x47, 0x00, 0x14, 0x08, 0x00, 0x11, 0x0A, 0x14, 0x03, +/* 00015A70 */ 0x00, 0x11, 0x0E, 0x09, 0x3A, 0x00, 0x8F, 0x03, 0x36, 0x17, 0x02, 0x00, 0x4A, 0x17, 0x6D, 0x16, +/* 00015A80 */ 0x17, 0x05, 0x07, 0x03, 0x00, 0x59, 0x00, 0x17, 0xD0, 0x18, 0x03, 0x03, 0x00, 0xA1, 0x00, 0x0B, +/* 00015A90 */ 0x18, 0xA1, 0x01, 0x0C, 0x18, 0xA1, 0x02, 0x0D, 0x18, 0x5A, 0x01, 0x18, 0x05, 0x00, 0xD6, 0x03, +/* 00015AA0 */ 0x18, 0x5A, 0x02, 0x18, 0x05, 0x00, 0xF4, 0x03, 0xFF, 0x16, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, +/* 00015AB0 */ 0x93, 0x02, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x21, 0x03, 0x69, +/* 00015AC0 */ 0x93, 0x93, 0x93, 0x93, 0xFF, 0x9C, 0x0B, 0x01, 0x00, 0x0D, 0x08, 0x00, 0x00, 0x00, 0x3F, 0x00, +/* 00015AD0 */ 0x51, 0x00, 0x29, 0x00, 0x29, 0x00, 0x03, 0x00, 0x25, 0x00, 0x0D, 0x00, 0x41, 0x00, 0x3E, 0x00, +/* 00015AE0 */ 0x14, 0x01, 0x0D, 0x00, 0x41, 0x00, 0x3A, 0x00, 0x0D, 0x01, 0x1A, 0x00, 0x5C, 0x00, 0x3A, 0x00, +/* 00015AF0 */ 0x5A, 0x01, 0x1A, 0x00, 0x5C, 0x00, 0x3A, 0x00, 0x5E, 0x01, 0x0A, 0x00, 0x18, 0x00, 0x00, 0x40, +/* 00015B00 */ 0x5D, 0x01, 0x00, 0xD1, 0x5C, 0x01, 0x00, 0xF0, 0x5B, 0x01, 0x00, 0x0F, 0x5B, 0x01, 0x00, 0x7F, +/* 00015B10 */ 0x5C, 0x08, 0xC1, 0x13, 0x10, 0x43, 0x00, 0xFE, 0x1E, 0x06, 0x38, 0xA2, 0x41, 0xD1, 0x00, 0x5E, +/* 00015B20 */ 0xFF, 0x18, 0x11, 0x01, 0x00, 0xFF, 0x18, 0x11, 0x01, 0x00, 0x41, 0xFE, 0x00, 0x90, 0x02, 0x02, +/* 00015B30 */ 0xFF, 0x18, 0x11, 0x01, 0x00, 0xFE, 0x19, 0x01, 0xFE, 0x19, 0x01, 0x05, 0x09, 0x0B, 0x05, 0x12, +/* 00015B40 */ 0x12, 0x04, 0x01, 0x02, 0x05, 0x05, 0x05, 0x05, 0x01, 0x0A, 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, +/* 00015B50 */ 0xF8, 0x03, 0x06, 0xFE, 0x2B, 0x03, 0x0B, 0x06, 0xFE, 0x2C, 0x03, 0x06, 0xFE, 0x2D, 0x03, 0x07, +/* 00015B60 */ 0x52, 0x8F, 0x04, 0x36, 0x0C, 0x00, 0x00, 0x4A, 0x0C, 0x6D, 0x0B, 0x0C, 0x00, 0x07, 0x04, 0x00, +/* 00015B70 */ 0x59, 0x00, 0x0C, 0x8F, 0x01, 0x02, 0x0D, 0x01, 0x00, 0x5A, 0x01, 0x0D, 0x00, 0x00, 0x5A, 0x02, +/* 00015B80 */ 0x09, 0x00, 0x00, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, +/* 00015B90 */ 0x7B, 0x03, 0x0D, 0x01, 0x7B, 0x05, 0x0D, 0x02, 0x7B, 0x05, 0x0D, 0x03, 0x7B, 0x05, 0x0D, 0x04, +/* 00015BA0 */ 0x5A, 0x03, 0x0D, 0x00, 0x00, 0xF4, 0x04, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, +/* 00015BB0 */ 0x00, 0x24, 0x00, 0x01, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, +/* 00015BC0 */ 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, +/* 00015BD0 */ 0x00, 0x00, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, +/* 00015BE0 */ 0x01, 0xFF, 0x3E, 0x11, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0xF2, 0x00, 0x00, +/* 00015BF0 */ 0x7F, 0x5C, 0x08, 0xC1, 0x13, 0x10, 0x43, 0x00, 0xFE, 0x13, 0x06, 0x34, 0xA2, 0x41, 0xD1, 0x00, +/* 00015C00 */ 0x5D, 0xFF, 0x5E, 0x0F, 0x01, 0x00, 0xFF, 0x5E, 0x0F, 0x01, 0x00, 0x41, 0xFE, 0x00, 0x90, 0x02, +/* 00015C10 */ 0x02, 0xFF, 0x5E, 0x0F, 0x01, 0x00, 0xFE, 0x19, 0x01, 0xFE, 0x19, 0x01, 0x05, 0x09, 0x0B, 0x05, +/* 00015C20 */ 0x12, 0x12, 0x04, 0x01, 0x02, 0x05, 0x05, 0x05, 0x05, 0x01, 0x0A, 0x06, 0xFE, 0x2A, 0x03, 0x06, +/* 00015C30 */ 0xFE, 0xF8, 0x03, 0x06, 0xFE, 0x2B, 0x03, 0x0B, 0x06, 0xFE, 0x2C, 0x03, 0x06, 0xFE, 0x2D, 0x03, +/* 00015C40 */ 0x07, 0x52, 0x8F, 0x04, 0x36, 0x0C, 0x00, 0x00, 0x4A, 0x0C, 0x6D, 0x0B, 0x0C, 0x00, 0x07, 0x04, +/* 00015C50 */ 0x00, 0x59, 0x00, 0x0C, 0x8F, 0x01, 0x02, 0x0D, 0x01, 0x00, 0x5A, 0x01, 0x0D, 0x00, 0x00, 0x5A, +/* 00015C60 */ 0x02, 0x09, 0x00, 0x00, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, +/* 00015C70 */ 0x00, 0x7B, 0x03, 0x0D, 0x01, 0x7B, 0x05, 0x0D, 0x02, 0x7B, 0x05, 0x0D, 0x03, 0x7B, 0x05, 0x0D, +/* 00015C80 */ 0x04, 0x5A, 0x03, 0x0D, 0x00, 0x00, 0xF4, 0x04, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00015C90 */ 0xA8, 0x00, 0x24, 0x00, 0x01, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, +/* 00015CA0 */ 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, +/* 00015CB0 */ 0x01, 0x00, 0x00, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, +/* 00015CC0 */ 0x95, 0x01, 0xFF, 0x84, 0x0F, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0xF2, 0x00, +/* 00015CD0 */ 0x00, 0x7F, 0x4C, 0x02, 0x01, 0x00, 0x10, 0x03, 0x00, 0xFE, 0x0A, 0x06, 0x38, 0xA2, 0x41, 0xD1, +/* 00015CE0 */ 0x00, 0x5C, 0xFF, 0xF9, 0x0D, 0x01, 0x00, 0xFF, 0xF9, 0x0D, 0x01, 0x00, 0x41, 0xFE, 0x00, 0x90, +/* 00015CF0 */ 0x02, 0x02, 0xFF, 0xF9, 0x0D, 0x01, 0x00, 0xC7, 0xC7, 0x04, 0x03, 0x06, 0x0B, 0x0A, 0x04, 0x01, +/* 00015D00 */ 0x01, 0x05, 0x0C, 0x25, 0x4E, 0x04, 0x8F, 0x01, 0x02, 0x06, 0x00, 0x00, 0x98, 0x06, 0x06, 0x03, +/* 00015D10 */ 0x00, 0x00, 0x45, 0x04, 0x06, 0xA8, 0x06, 0x15, 0x03, 0x00, 0x04, 0x06, 0x09, 0x06, 0x00, 0x01, +/* 00015D20 */ 0x43, 0x01, 0x01, 0x03, 0x02, 0xA8, 0x00, 0x24, 0x00, 0xFF, 0x1F, 0x0E, 0x01, 0x00, 0x04, 0x02, +/* 00015D30 */ 0x00, 0x00, 0x00, 0x0F, 0x00, 0x31, 0x00, 0x0A, 0x00, 0x33, 0x00, 0x08, 0x00, 0x3C, 0x00, 0x00, +/* 00015D40 */ 0x7F, 0x4C, 0x02, 0x01, 0x00, 0x10, 0x03, 0x00, 0xFE, 0x01, 0x06, 0x3F, 0xA2, 0x41, 0xD1, 0x00, +/* 00015D50 */ 0x5B, 0xFF, 0xAB, 0x0C, 0x01, 0x00, 0xFF, 0xAB, 0x0C, 0x01, 0x00, 0x41, 0xFE, 0x00, 0x90, 0x02, +/* 00015D60 */ 0x02, 0xFF, 0xAB, 0x0C, 0x01, 0x00, 0xC7, 0xC7, 0x04, 0x03, 0x06, 0x0B, 0x0A, 0x04, 0x01, 0x01, +/* 00015D70 */ 0x05, 0x0C, 0x25, 0x4E, 0x04, 0x8F, 0x01, 0x02, 0x06, 0x00, 0x00, 0x98, 0x06, 0x06, 0x03, 0x00, +/* 00015D80 */ 0x00, 0x45, 0x04, 0x06, 0xA8, 0x06, 0x15, 0x03, 0x00, 0x04, 0x06, 0x09, 0x06, 0x00, 0x01, 0x43, +/* 00015D90 */ 0x01, 0x01, 0x03, 0x02, 0xA8, 0x00, 0x24, 0x00, 0xFF, 0xD1, 0x0C, 0x01, 0x00, 0x04, 0x02, 0x00, +/* 00015DA0 */ 0x00, 0x00, 0x0F, 0x00, 0x31, 0x00, 0x0A, 0x00, 0x33, 0x00, 0x08, 0x00, 0x3C, 0x00, 0x00, 0x7F, +/* 00015DB0 */ 0x5C, 0x18, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0xBD, 0x05, 0x29, 0xA2, 0x41, 0xC1, 0x00, 0xFE, +/* 00015DC0 */ 0x29, 0x04, 0x59, 0xFE, 0x1C, 0xFF, 0xFE, 0x1C, 0xFF, 0x01, 0xFE, 0x00, 0x90, 0x04, 0x04, 0xFE, +/* 00015DD0 */ 0x1C, 0xFF, 0xFE, 0xD9, 0x09, 0xFE, 0xD9, 0x09, 0x0F, 0x1D, 0x29, 0x07, 0xB4, 0xA4, 0x03, 0x0D, +/* 00015DE0 */ 0x04, 0x08, 0x14, 0x14, 0x14, 0x14, 0x28, 0x08, 0x06, 0xFE, 0x3F, 0x04, 0x06, 0xFE, 0x42, 0x04, +/* 00015DF0 */ 0x06, 0xFE, 0xE0, 0x03, 0x06, 0xFE, 0xA3, 0x03, 0x05, 0xFE, 0x9C, 0x03, 0x05, 0xFE, 0xDF, 0x03, +/* 00015E00 */ 0x06, 0xFE, 0x55, 0x04, 0x06, 0xFE, 0xA2, 0x03, 0x06, 0xFE, 0x73, 0x04, 0x06, 0xFE, 0x6F, 0x04, +/* 00015E10 */ 0x06, 0xFE, 0x6D, 0x04, 0x06, 0xFE, 0x6E, 0x04, 0x06, 0xFE, 0x70, 0x04, 0x07, 0x06, 0xFE, 0x17, +/* 00015E20 */ 0x04, 0x06, 0xFE, 0x74, 0x04, 0x06, 0xFE, 0x75, 0x04, 0x05, 0xFE, 0x76, 0x04, 0x06, 0xFE, 0x77, +/* 00015E30 */ 0x04, 0x05, 0xFE, 0x78, 0x04, 0x05, 0xFE, 0x79, 0x04, 0x05, 0xFE, 0x7A, 0x04, 0x06, 0xFE, 0x7B, +/* 00015E40 */ 0x04, 0x05, 0xFE, 0x7C, 0x04, 0x05, 0xFE, 0x7D, 0x04, 0x0B, 0xFE, 0xE0, 0x02, 0x4E, 0x20, 0x4E, +/* 00015E50 */ 0x21, 0x4E, 0x22, 0x4E, 0x23, 0x4E, 0x24, 0x4E, 0x25, 0x4E, 0x26, 0x4E, 0x27, 0x8F, 0x02, 0x12, +/* 00015E60 */ 0x29, 0x00, 0x00, 0x4A, 0x29, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x1E, 0x00, 0x00, +/* 00015E70 */ 0xF0, 0x02, 0x29, 0x29, 0x00, 0x00, 0x45, 0x20, 0x29, 0x8F, 0x01, 0x06, 0x29, 0x01, 0x00, 0x4A, +/* 00015E80 */ 0x29, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x1F, 0x01, 0x00, 0x5A, 0x02, 0x03, 0x01, +/* 00015E90 */ 0x00, 0x5A, 0x03, 0x04, 0x01, 0x00, 0xF0, 0x04, 0x29, 0x29, 0x01, 0x00, 0x45, 0x1F, 0x29, 0x8F, +/* 00015EA0 */ 0x03, 0x36, 0x2A, 0x02, 0x00, 0x4A, 0x2A, 0x6D, 0x29, 0x2A, 0x00, 0x07, 0x01, 0x00, 0x59, 0x00, +/* 00015EB0 */ 0x2A, 0xF4, 0x01, 0x29, 0x29, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x45, 0x21, 0x29, 0x45, 0x29, +/* 00015EC0 */ 0x21, 0x8F, 0x02, 0x02, 0x2A, 0x03, 0x00, 0x4A, 0x2A, 0x07, 0x06, 0x00, 0x59, 0x00, 0x02, 0x5A, +/* 00015ED0 */ 0x01, 0x1F, 0x03, 0x00, 0x5A, 0x02, 0x05, 0x03, 0x00, 0x5A, 0x03, 0x06, 0x03, 0x00, 0xD0, 0x2B, +/* 00015EE0 */ 0x02, 0x00, 0x00, 0xA1, 0x00, 0x07, 0x2B, 0xA1, 0x01, 0x08, 0x2B, 0x5A, 0x04, 0x2B, 0x03, 0x00, +/* 00015EF0 */ 0x5A, 0x05, 0x08, 0x03, 0x00, 0xF0, 0x06, 0x2A, 0x2A, 0x03, 0x00, 0x77, 0x2A, 0x29, 0x01, 0x8F, +/* 00015F00 */ 0x02, 0x02, 0x29, 0x03, 0x00, 0x4A, 0x29, 0x07, 0x06, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x1F, +/* 00015F10 */ 0x04, 0x00, 0x5A, 0x02, 0x09, 0x04, 0x00, 0x5A, 0x03, 0x0A, 0x04, 0x00, 0xA8, 0x2A, 0x5A, 0x04, +/* 00015F20 */ 0x2A, 0x04, 0x00, 0xA8, 0x2A, 0x5A, 0x05, 0x2A, 0x04, 0x00, 0xF0, 0x06, 0x29, 0x29, 0x04, 0x00, +/* 00015F30 */ 0x45, 0x22, 0x29, 0x8F, 0x02, 0x02, 0x29, 0x03, 0x00, 0x4A, 0x29, 0x07, 0x06, 0x00, 0x59, 0x00, +/* 00015F40 */ 0x02, 0x5A, 0x01, 0x1F, 0x05, 0x00, 0x5A, 0x02, 0x0B, 0x05, 0x00, 0x5A, 0x03, 0x06, 0x05, 0x00, +/* 00015F50 */ 0xD0, 0x2A, 0x04, 0x01, 0x00, 0xA1, 0x00, 0x0C, 0x2A, 0xA1, 0x01, 0x0D, 0x2A, 0xA1, 0x02, 0x0E, +/* 00015F60 */ 0x2A, 0xA1, 0x03, 0x0F, 0x2A, 0x5A, 0x04, 0x2A, 0x05, 0x00, 0xA8, 0x2A, 0x5A, 0x05, 0x2A, 0x05, +/* 00015F70 */ 0x00, 0xF0, 0x06, 0x29, 0x29, 0x05, 0x00, 0x45, 0x23, 0x29, 0xA8, 0x29, 0x15, 0x03, 0x00, 0x22, +/* 00015F80 */ 0x29, 0x09, 0x03, 0x00, 0x45, 0x23, 0x10, 0x77, 0x23, 0x21, 0x02, 0x8F, 0x02, 0x0C, 0x29, 0x04, +/* 00015F90 */ 0x00, 0x4A, 0x29, 0x07, 0x05, 0x00, 0x59, 0x00, 0x02, 0x8F, 0x03, 0x03, 0x2A, 0x05, 0x00, 0x5F, +/* 00015FA0 */ 0x2A, 0x2A, 0x03, 0x5A, 0x01, 0x2A, 0x06, 0x00, 0x5A, 0x02, 0x20, 0x06, 0x00, 0x5A, 0x03, 0x21, +/* 00015FB0 */ 0x06, 0x00, 0xD0, 0x2A, 0x03, 0x02, 0x00, 0xA1, 0x00, 0x11, 0x2A, 0xA1, 0x01, 0x12, 0x2A, 0xA1, +/* 00015FC0 */ 0x02, 0x13, 0x2A, 0x5A, 0x04, 0x2A, 0x06, 0x00, 0xF0, 0x05, 0x29, 0x29, 0x06, 0x00, 0x45, 0x24, +/* 00015FD0 */ 0x29, 0x5F, 0x29, 0x24, 0x04, 0x77, 0x29, 0x1D, 0x05, 0x5F, 0x29, 0x24, 0x06, 0x77, 0x29, 0x1D, +/* 00015FE0 */ 0x07, 0x5F, 0x29, 0x24, 0x08, 0x77, 0x29, 0x1D, 0x09, 0x5F, 0x29, 0x24, 0x0A, 0x77, 0x29, 0x1D, +/* 00015FF0 */ 0x0B, 0x5F, 0x29, 0x24, 0x0C, 0x45, 0x25, 0x29, 0x5F, 0x29, 0x1F, 0x0D, 0x45, 0x26, 0x29, 0xA8, +/* 00016000 */ 0x29, 0x14, 0x03, 0x00, 0x26, 0x29, 0x09, 0x20, 0x00, 0x8F, 0x03, 0x03, 0x2A, 0x05, 0x00, 0x6D, +/* 00016010 */ 0x29, 0x2A, 0x0E, 0x07, 0x01, 0x00, 0x59, 0x00, 0x2A, 0xF4, 0x01, 0x29, 0x29, 0x0E, 0x00, 0x00, +/* 00016020 */ 0x00, 0x07, 0x00, 0x45, 0x26, 0x29, 0x09, 0x22, 0x00, 0x8F, 0x03, 0x24, 0x2A, 0x06, 0x00, 0x6D, +/* 00016030 */ 0x29, 0x2A, 0x0F, 0x07, 0x02, 0x00, 0x59, 0x00, 0x2A, 0x5A, 0x01, 0x26, 0x08, 0x00, 0xF4, 0x02, +/* 00016040 */ 0x29, 0x29, 0x0F, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x26, 0x29, 0x8F, 0x03, 0x03, 0x2A, 0x05, +/* 00016050 */ 0x00, 0x6D, 0x29, 0x2A, 0x10, 0x07, 0x02, 0x00, 0x59, 0x00, 0x2A, 0x5A, 0x01, 0x26, 0x09, 0x00, +/* 00016060 */ 0xF4, 0x02, 0x29, 0x29, 0x10, 0x00, 0x00, 0x00, 0x09, 0x00, 0x45, 0x27, 0x29, 0xA8, 0x29, 0x14, +/* 00016070 */ 0x08, 0x00, 0x27, 0x29, 0x14, 0x03, 0x00, 0x27, 0x14, 0x09, 0x2C, 0x00, 0x8F, 0x03, 0x03, 0x2A, +/* 00016080 */ 0x05, 0x00, 0x6D, 0x29, 0x2A, 0x11, 0x07, 0x04, 0x00, 0x59, 0x00, 0x2A, 0x5A, 0x01, 0x26, 0x0A, +/* 00016090 */ 0x00, 0x5A, 0x02, 0x15, 0x0A, 0x00, 0x5A, 0x03, 0x16, 0x0A, 0x00, 0xF4, 0x04, 0xFF, 0x29, 0x11, +/* 000160A0 */ 0x00, 0x00, 0x00, 0x0A, 0x00, 0x09, 0x16, 0x00, 0x14, 0x08, 0x00, 0x27, 0x17, 0x14, 0x03, 0x00, +/* 000160B0 */ 0x27, 0x18, 0x09, 0x06, 0x00, 0x45, 0x26, 0x19, 0x09, 0x03, 0x00, 0x45, 0x26, 0x27, 0x77, 0x26, +/* 000160C0 */ 0x1D, 0x12, 0x8F, 0x02, 0x02, 0x29, 0x03, 0x00, 0x4A, 0x29, 0x07, 0x06, 0x00, 0x59, 0x00, 0x02, +/* 000160D0 */ 0x5A, 0x01, 0x1F, 0x0B, 0x00, 0x5A, 0x02, 0x1A, 0x0B, 0x00, 0x5A, 0x03, 0x06, 0x0B, 0x00, 0xD0, +/* 000160E0 */ 0x2A, 0x02, 0x03, 0x00, 0xA1, 0x00, 0x1B, 0x2A, 0xA1, 0x01, 0x08, 0x2A, 0x5A, 0x04, 0x2A, 0x0B, +/* 000160F0 */ 0x00, 0x5A, 0x05, 0x08, 0x0B, 0x00, 0xF0, 0x06, 0xFF, 0x29, 0x0B, 0x00, 0x8F, 0x01, 0x04, 0x29, +/* 00016100 */ 0x07, 0x00, 0x4A, 0x29, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x1D, 0x0C, 0x00, 0x5A, +/* 00016110 */ 0x02, 0x1F, 0x0C, 0x00, 0x5A, 0x03, 0x22, 0x0C, 0x00, 0xF0, 0x04, 0xFF, 0x29, 0x0C, 0x00, 0x77, +/* 00016120 */ 0x1C, 0x1D, 0x13, 0x45, 0x00, 0x1D, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x69, 0xFE, 0x0E, +/* 00016130 */ 0x02, 0xFE, 0x1B, 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0x0D, 0x02, 0xFE, 0x0D, 0x02, 0xFE, 0x1A, 0x02, +/* 00016140 */ 0xFE, 0x6B, 0x02, 0xFE, 0x1B, 0x02, 0xFE, 0x73, 0x04, 0xFE, 0x19, 0x02, 0xFE, 0x49, 0x02, 0xFE, +/* 00016150 */ 0x9D, 0x03, 0xFE, 0x74, 0x02, 0xFE, 0xFE, 0x01, 0xFE, 0x22, 0x03, 0xFE, 0xFD, 0x01, 0xFE, 0xAC, +/* 00016160 */ 0x02, 0xFE, 0x74, 0x02, 0xFE, 0x7E, 0x04, 0xFE, 0x56, 0xFF, 0x1F, 0x10, 0x00, 0x00, 0x00, 0x1C, +/* 00016170 */ 0x00, 0x46, 0x00, 0x26, 0x00, 0x42, 0x00, 0x1F, 0x00, 0x24, 0x00, 0x41, 0x00, 0x30, 0x01, 0x34, +/* 00016180 */ 0x00, 0x5A, 0x00, 0x47, 0x00, 0x70, 0x00, 0x0A, 0x00, 0x2C, 0x00, 0x03, 0x00, 0x2C, 0x00, 0x04, +/* 00016190 */ 0x00, 0x21, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x08, 0x00, 0x2E, 0x00, 0x08, 0x00, 0x2C, 0x00, 0x08, +/* 000161A0 */ 0x00, 0x2D, 0x00, 0x08, 0x00, 0x34, 0x00, 0x07, 0x00, 0x37, 0x00, 0x07, 0x00, 0x27, 0x00, 0x0A, +/* 000161B0 */ 0x00, 0x28, 0x00, 0x20, 0x00, 0x49, 0x00, 0x22, 0x00, 0xEF, 0x00, 0x22, 0x00, 0x4E, 0x00, 0x0F, +/* 000161C0 */ 0x00, 0x52, 0x00, 0x2C, 0x00, 0x74, 0x00, 0x0D, 0x00, 0x4E, 0x00, 0x06, 0x00, 0x31, 0x00, 0x03, +/* 000161D0 */ 0x00, 0x2D, 0x00, 0x04, 0x00, 0x64, 0x00, 0x3A, 0x00, 0xD3, 0x00, 0x23, 0x00, 0x43, 0x00, 0x04, +/* 000161E0 */ 0x00, 0x3E, 0x00, 0x08, 0x00, 0x1F, 0x00, 0x00, 0x7E, 0x4D, 0x00, 0xC0, 0x13, 0x1A, 0x4B, 0x00, +/* 000161F0 */ 0xFE, 0x15, 0x05, 0x26, 0xA0, 0x41, 0xD1, 0x00, 0x55, 0xFE, 0xD5, 0xDE, 0xFE, 0xD5, 0xDE, 0x01, +/* 00016200 */ 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFE, 0xD5, 0xDE, 0xFE, 0x58, 0x1E, 0xFE, 0x58, 0x1E, 0x06, 0xFE, +/* 00016210 */ 0x49, 0x04, 0xFE, 0x4A, 0x04, 0xFE, 0x4B, 0x04, 0xFE, 0x4C, 0x04, 0xFE, 0x4D, 0x04, 0xFE, 0x4E, +/* 00016220 */ 0x04, 0x04, 0x39, 0x3C, 0x51, 0x51, 0x03, 0x34, 0x34, 0x34, 0x34, 0x05, 0x39, 0x3A, 0x3B, 0x06, +/* 00016230 */ 0xFE, 0x33, 0x04, 0x06, 0xFE, 0x4F, 0x04, 0x06, 0xFE, 0x34, 0x04, 0x06, 0xFE, 0x50, 0x04, 0x06, +/* 00016240 */ 0xFE, 0x35, 0x04, 0x06, 0xFE, 0x51, 0x04, 0x06, 0xFE, 0x36, 0x04, 0x06, 0xFE, 0x52, 0x04, 0x06, +/* 00016250 */ 0xFE, 0x37, 0x04, 0x06, 0xFE, 0x53, 0x04, 0x06, 0xFE, 0x38, 0x04, 0x06, 0xFE, 0x54, 0x04, 0x06, +/* 00016260 */ 0xFE, 0x55, 0x04, 0x06, 0xFE, 0x56, 0x04, 0x06, 0xFE, 0x57, 0x04, 0x06, 0xFE, 0x58, 0x04, 0x06, +/* 00016270 */ 0xFE, 0x39, 0x04, 0x06, 0xFE, 0x59, 0x04, 0x06, 0xFE, 0x3A, 0x04, 0x06, 0xFE, 0x5A, 0x04, 0x06, +/* 00016280 */ 0xFE, 0x3B, 0x04, 0x06, 0xFE, 0x5B, 0x04, 0x07, 0x06, 0xFE, 0x5C, 0x04, 0x06, 0xFE, 0x5D, 0x04, +/* 00016290 */ 0x06, 0xFE, 0xD0, 0x03, 0x06, 0xFE, 0x5E, 0x04, 0x06, 0xFE, 0x5F, 0x04, 0x06, 0xFE, 0x60, 0x04, +/* 000162A0 */ 0x06, 0xFE, 0x61, 0x04, 0x06, 0xFE, 0x62, 0x04, 0x06, 0xFE, 0x63, 0x04, 0x06, 0xFE, 0x64, 0x04, +/* 000162B0 */ 0x06, 0xFE, 0x65, 0x04, 0x06, 0xFE, 0x66, 0x04, 0x06, 0xFE, 0x67, 0x04, 0x06, 0xFE, 0xF8, 0x03, +/* 000162C0 */ 0x01, 0x01, 0x06, 0xFE, 0x32, 0x04, 0x01, 0x02, 0x06, 0xFE, 0x30, 0x04, 0x01, 0x03, 0x06, 0xFE, +/* 000162D0 */ 0x31, 0x04, 0x01, 0x04, 0x06, 0xFE, 0x2F, 0x04, 0x01, 0x05, 0x06, 0xFE, 0x68, 0x04, 0x06, 0xFE, +/* 000162E0 */ 0x69, 0x04, 0x06, 0xFE, 0x6A, 0x04, 0x06, 0xFE, 0x6B, 0x04, 0x06, 0xFE, 0x6C, 0x04, 0x06, 0xFE, +/* 000162F0 */ 0x6D, 0x04, 0x06, 0xFE, 0x6E, 0x04, 0x06, 0xFE, 0x6F, 0x04, 0x06, 0xFE, 0x70, 0x04, 0xFE, 0x4D, +/* 00016300 */ 0x01, 0x4E, 0x3C, 0x96, 0x02, 0x3C, 0x4E, 0x3C, 0x96, 0x03, 0x3C, 0x4E, 0x3C, 0x96, 0x04, 0x3C, +/* 00016310 */ 0x4E, 0x3C, 0x96, 0x05, 0x3C, 0x4E, 0x3C, 0x96, 0x06, 0x3C, 0x4E, 0x3C, 0x96, 0x07, 0x3C, 0xCE, +/* 00016320 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x7B, 0x03, 0x3C, 0x00, +/* 00016330 */ 0x7B, 0x05, 0x3C, 0x01, 0x7B, 0x07, 0x3C, 0x02, 0x7B, 0x09, 0x3C, 0x03, 0x7B, 0x0B, 0x3C, 0x04, +/* 00016340 */ 0x7B, 0x0D, 0x3C, 0x05, 0x7B, 0x0F, 0x3C, 0x06, 0x7B, 0x11, 0x3C, 0x07, 0x7B, 0x13, 0x3C, 0x08, +/* 00016350 */ 0x7B, 0x15, 0x3C, 0x09, 0x7B, 0x17, 0x3C, 0x0A, 0x96, 0x02, 0x3C, 0xCE, 0x34, 0x00, 0x00, 0x00, +/* 00016360 */ 0x01, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x7B, 0x02, 0x3C, 0x0B, 0x7B, 0x02, 0x3C, 0x0C, +/* 00016370 */ 0x7B, 0x02, 0x3C, 0x0D, 0x7B, 0x04, 0x3C, 0x0E, 0x7B, 0x06, 0x3C, 0x0F, 0x7B, 0x06, 0x3C, 0x10, +/* 00016380 */ 0x7B, 0x06, 0x3C, 0x11, 0x7B, 0x08, 0x3C, 0x12, 0x7B, 0x08, 0x3C, 0x13, 0x7B, 0x0A, 0x3C, 0x14, +/* 00016390 */ 0x7B, 0x0C, 0x3C, 0x15, 0x7B, 0x0C, 0x3C, 0x16, 0x7B, 0x0C, 0x3C, 0x17, 0x7B, 0x0C, 0x3C, 0x18, +/* 000163A0 */ 0x7B, 0x12, 0x3C, 0x19, 0x7B, 0x14, 0x3C, 0x1A, 0x7B, 0x16, 0x3C, 0x1B, 0x7B, 0x16, 0x3C, 0x1C, +/* 000163B0 */ 0x7B, 0x16, 0x3C, 0x1D, 0x7B, 0x16, 0x3C, 0x1E, 0x7B, 0x16, 0x3C, 0x1F, 0x7B, 0x16, 0x3C, 0x20, +/* 000163C0 */ 0x7B, 0x16, 0x3C, 0x21, 0x96, 0x03, 0x3C, 0xCE, 0x98, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, +/* 000163D0 */ 0x3C, 0x00, 0x00, 0x00, 0x7B, 0x27, 0x3C, 0x22, 0x7B, 0x29, 0x3C, 0x23, 0x7B, 0x2B, 0x3C, 0x24, +/* 000163E0 */ 0x7B, 0x2D, 0x3C, 0x25, 0x7B, 0x2F, 0x3C, 0x26, 0x96, 0x04, 0x3C, 0xCD, 0x3C, 0x7B, 0x26, 0x3C, +/* 000163F0 */ 0x27, 0x7B, 0x28, 0x3C, 0x28, 0x7B, 0x2A, 0x3C, 0x29, 0x7B, 0x2C, 0x3C, 0x2A, 0x7B, 0x2E, 0x3C, +/* 00016400 */ 0x2B, 0x96, 0x05, 0x3C, 0xCE, 0xB4, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, +/* 00016410 */ 0x00, 0x7B, 0x0F, 0x3C, 0x2C, 0x7B, 0x11, 0x3C, 0x2D, 0x7B, 0x1E, 0x3C, 0x2E, 0x7B, 0x1F, 0x3C, +/* 00016420 */ 0x2F, 0x96, 0x06, 0x3C, 0xCE, 0xCC, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, +/* 00016430 */ 0x00, 0x7B, 0x35, 0x3C, 0x30, 0x7B, 0x36, 0x3C, 0x31, 0x7B, 0x37, 0x3C, 0x32, 0x7B, 0x38, 0x3C, +/* 00016440 */ 0x33, 0x96, 0x07, 0x3C, 0xD6, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x05, 0xE4, +/* 00016450 */ 0x00, 0xCC, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x04, 0x00, +/* 00016460 */ 0x00, 0x58, 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x61, 0x04, 0x00, 0x00, 0xB4, 0x00, 0x00, +/* 00016470 */ 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6D, 0x04, 0x00, 0x00, 0x6E, 0x04, 0x00, +/* 00016480 */ 0x00, 0x6F, 0x04, 0x00, 0x00, 0x70, 0x04, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x03, 0x05, 0x00, +/* 00016490 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x02, 0x00, 0x00, 0x32, 0x04, 0x00, 0x00, 0x30, 0x04, 0x00, +/* 000164A0 */ 0x00, 0x31, 0x04, 0x00, 0x00, 0x2F, 0x04, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x03, 0x17, 0x00, +/* 000164B0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x5C, 0x04, 0x00, 0x00, 0x5D, 0x04, 0x00, +/* 000164C0 */ 0x00, 0x50, 0x04, 0x00, 0x00, 0x51, 0x04, 0x00, 0x00, 0xD0, 0x03, 0x00, 0x00, 0x5E, 0x04, 0x00, +/* 000164D0 */ 0x00, 0x52, 0x04, 0x00, 0x00, 0x5F, 0x04, 0x00, 0x00, 0x53, 0x04, 0x00, 0x00, 0x56, 0x04, 0x00, +/* 000164E0 */ 0x00, 0x58, 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x61, 0x04, 0x00, 0x00, 0x59, 0x04, 0x00, +/* 000164F0 */ 0x00, 0x5A, 0x04, 0x00, 0x00, 0x5B, 0x04, 0x00, 0x00, 0x62, 0x04, 0x00, 0x00, 0x63, 0x04, 0x00, +/* 00016500 */ 0x00, 0x64, 0x04, 0x00, 0x00, 0x65, 0x04, 0x00, 0x00, 0x66, 0x04, 0x00, 0x00, 0x67, 0x04, 0x00, +/* 00016510 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x02, 0x00, +/* 00016520 */ 0x00, 0x6D, 0x02, 0x00, 0x00, 0x77, 0x02, 0x00, 0x00, 0x71, 0x02, 0x00, 0x00, 0x6C, 0x02, 0x00, +/* 00016530 */ 0x00, 0x6E, 0x02, 0x00, 0x00, 0x6F, 0x02, 0x00, 0x00, 0x57, 0x04, 0x00, 0x00, 0x70, 0x02, 0x00, +/* 00016540 */ 0x00, 0x73, 0x02, 0x00, 0x00, 0x75, 0x02, 0x00, 0x00, 0xFE, 0x76, 0x02, 0xFE, 0x6D, 0x02, 0xFE, +/* 00016550 */ 0x77, 0x02, 0xFE, 0x71, 0x02, 0xFE, 0x6C, 0x02, 0xFE, 0x6E, 0x02, 0xFE, 0x6F, 0x02, 0xFE, 0x57, +/* 00016560 */ 0x04, 0xFE, 0x70, 0x02, 0xFE, 0x73, 0x02, 0xFE, 0x75, 0x02, 0x75, 0xFE, 0x5C, 0x04, 0xFE, 0x5D, +/* 00016570 */ 0x04, 0xFE, 0x50, 0x04, 0xFE, 0x51, 0x04, 0xFE, 0xD0, 0x03, 0xFE, 0x5E, 0x04, 0xFE, 0x52, 0x04, +/* 00016580 */ 0xFE, 0x5F, 0x04, 0xFE, 0x53, 0x04, 0xFE, 0x56, 0x04, 0xFE, 0x58, 0x04, 0xFE, 0x60, 0x04, 0xFE, +/* 00016590 */ 0x61, 0x04, 0xFE, 0x59, 0x04, 0xFE, 0x5A, 0x04, 0xFE, 0x5B, 0x04, 0xFE, 0x62, 0x04, 0xFE, 0x63, +/* 000165A0 */ 0x04, 0xFE, 0x64, 0x04, 0xFE, 0x65, 0x04, 0xFE, 0x66, 0x04, 0xFE, 0x67, 0x04, 0xFE, 0x51, 0x02, +/* 000165B0 */ 0xFE, 0x32, 0x04, 0xFE, 0x30, 0x04, 0xFE, 0x31, 0x04, 0xFE, 0x2F, 0x04, 0xFE, 0x68, 0x04, 0xFE, +/* 000165C0 */ 0x69, 0x04, 0xFE, 0x6A, 0x04, 0xFE, 0x6B, 0x04, 0xFE, 0x6C, 0x04, 0xFE, 0x6D, 0x04, 0xFE, 0x6E, +/* 000165D0 */ 0x04, 0xFE, 0x6F, 0x04, 0xFE, 0x70, 0x04, 0xFE, 0x56, 0x04, 0xFE, 0x58, 0x04, 0xFE, 0x60, 0x04, +/* 000165E0 */ 0xFE, 0x61, 0x04, 0xFE, 0x6E, 0xDF, 0x08, 0x1E, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x10, 0x02, 0x6C, +/* 000165F0 */ 0x00, 0xDC, 0x02, 0x24, 0x00, 0xC3, 0x00, 0x19, 0x00, 0x00, 0x01, 0x20, 0x00, 0xA1, 0x00, 0x20, +/* 00016600 */ 0x00, 0x09, 0x01, 0x08, 0x00, 0x65, 0x15, 0x00, 0x0C, 0x66, 0x01, 0x00, 0x7F, 0x7D, 0x0F, 0xC3, +/* 00016610 */ 0x43, 0x5A, 0x1B, 0x00, 0xFE, 0x50, 0x05, 0x13, 0xA2, 0x41, 0xD1, 0x00, 0x56, 0xFE, 0xCE, 0xE7, +/* 00016620 */ 0xFE, 0xCE, 0xE7, 0x02, 0x40, 0xFE, 0x00, 0x90, 0x04, 0x04, 0xFE, 0xCE, 0xE7, 0xFE, 0x54, 0x15, +/* 00016630 */ 0xFE, 0x54, 0x15, 0x04, 0xFE, 0xE0, 0x01, 0xFE, 0x6F, 0x02, 0xFE, 0x10, 0x02, 0xFE, 0x1B, 0x02, +/* 00016640 */ 0x17, 0x0E, 0x1E, 0x08, 0xC2, 0xB2, 0x7B, 0x04, 0x02, 0x08, 0x01, 0x09, 0x0A, 0x02, 0x0F, 0x0F, +/* 00016650 */ 0x0F, 0x0F, 0x02, 0x1B, 0x1C, 0x1D, 0x1E, 0xFE, 0x08, 0x01, 0xFE, 0x03, 0x03, 0xFE, 0xA7, 0x02, +/* 00016660 */ 0xFE, 0xCF, 0x02, 0x06, 0xFE, 0x47, 0x03, 0x0C, 0x01, 0x00, 0x06, 0xFE, 0x71, 0x04, 0x01, 0x01, +/* 00016670 */ 0x0B, 0x06, 0xFE, 0x72, 0x04, 0x06, 0xFE, 0x56, 0x04, 0x06, 0xFE, 0x58, 0x04, 0x06, 0xFE, 0x60, +/* 00016680 */ 0x04, 0x06, 0xFE, 0x61, 0x04, 0x01, 0x02, 0xFE, 0x0B, 0x03, 0x96, 0x02, 0x0F, 0x96, 0x03, 0x10, +/* 00016690 */ 0x4E, 0x11, 0x4E, 0x12, 0x4E, 0x13, 0x4E, 0x14, 0x4E, 0x15, 0x4E, 0x16, 0x4E, 0x18, 0x4E, 0x19, +/* 000166A0 */ 0x4E, 0x1A, 0x4E, 0x17, 0x4E, 0x20, 0x96, 0x04, 0x20, 0x4E, 0x20, 0x96, 0x05, 0x20, 0x8F, 0x04, +/* 000166B0 */ 0x36, 0x21, 0x00, 0x00, 0x4A, 0x21, 0x6D, 0x20, 0x21, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x21, +/* 000166C0 */ 0x8F, 0x02, 0x03, 0x22, 0x01, 0x00, 0x4A, 0x22, 0x5A, 0x01, 0x22, 0x00, 0x00, 0xD6, 0x00, 0x22, +/* 000166D0 */ 0x5A, 0x02, 0x22, 0x00, 0x00, 0x8F, 0x04, 0x36, 0x23, 0x00, 0x00, 0x4A, 0x23, 0x6D, 0x22, 0x23, +/* 000166E0 */ 0x01, 0x07, 0x01, 0x00, 0x59, 0x00, 0x23, 0xF4, 0x01, 0x22, 0x22, 0x01, 0x00, 0x00, 0x00, 0x01, +/* 000166F0 */ 0x00, 0x5A, 0x03, 0x22, 0x00, 0x00, 0xF4, 0x04, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00016700 */ 0x96, 0x04, 0x20, 0x5F, 0x20, 0x0E, 0x02, 0x96, 0x05, 0x20, 0x8F, 0x04, 0x36, 0x21, 0x00, 0x00, +/* 00016710 */ 0x4A, 0x21, 0x6D, 0x20, 0x21, 0x03, 0x07, 0x04, 0x00, 0x59, 0x00, 0x21, 0x8F, 0x04, 0x36, 0x23, +/* 00016720 */ 0x00, 0x00, 0x4A, 0x23, 0x6D, 0x22, 0x23, 0x04, 0x07, 0x02, 0x00, 0x59, 0x00, 0x23, 0x93, 0x04, +/* 00016730 */ 0x24, 0x02, 0x00, 0x5A, 0x01, 0x24, 0x03, 0x00, 0xF4, 0x02, 0x22, 0x22, 0x04, 0x00, 0x00, 0x00, +/* 00016740 */ 0x03, 0x00, 0x5A, 0x01, 0x22, 0x02, 0x00, 0xD6, 0x01, 0x22, 0x5A, 0x02, 0x22, 0x02, 0x00, 0x5A, +/* 00016750 */ 0x03, 0x02, 0x02, 0x00, 0xF4, 0x04, 0x20, 0x20, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x45, 0x11, +/* 00016760 */ 0x20, 0x8F, 0x04, 0x03, 0x21, 0x03, 0x00, 0x6D, 0x20, 0x21, 0x05, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 00016770 */ 0x21, 0x5F, 0x22, 0x0E, 0x06, 0x5A, 0x01, 0x22, 0x04, 0x00, 0x5A, 0x02, 0x11, 0x04, 0x00, 0xF4, +/* 00016780 */ 0x03, 0x20, 0x20, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x45, 0x12, 0x20, 0x45, 0x13, 0x03, 0x45, +/* 00016790 */ 0x14, 0x04, 0xED, 0x00, 0xEE, 0x00, 0xA7, 0x20, 0x12, 0x07, 0x00, 0x00, 0x12, 0x03, 0x00, 0x14, +/* 000167A0 */ 0x20, 0x09, 0xE7, 0x01, 0x98, 0x20, 0x12, 0x14, 0x00, 0x00, 0x45, 0x15, 0x20, 0x41, 0x20, 0x15, +/* 000167B0 */ 0x05, 0x45, 0x16, 0x20, 0x0E, 0x10, 0x00, 0x13, 0x0E, 0x03, 0x00, 0x16, 0x45, 0x13, 0x03, 0x26, +/* 000167C0 */ 0x14, 0x14, 0x09, 0xC3, 0x01, 0x09, 0x1E, 0x00, 0x0E, 0x0C, 0x00, 0x16, 0x45, 0x13, 0x07, 0x26, +/* 000167D0 */ 0x14, 0x14, 0x09, 0xB3, 0x01, 0x09, 0x0E, 0x00, 0x14, 0x03, 0x00, 0x15, 0x08, 0x09, 0x06, 0x00, +/* 000167E0 */ 0x26, 0x14, 0x14, 0x09, 0xA2, 0x01, 0x14, 0x12, 0x00, 0x15, 0x09, 0x14, 0x0D, 0x00, 0x15, 0x0A, +/* 000167F0 */ 0x14, 0x08, 0x00, 0x15, 0x0B, 0x14, 0x03, 0x00, 0x15, 0x0C, 0x09, 0x2D, 0x01, 0x93, 0x05, 0x20, +/* 00016800 */ 0x04, 0x00, 0x0E, 0x12, 0x01, 0x20, 0x93, 0x03, 0x20, 0x05, 0x00, 0xA8, 0x21, 0x14, 0x03, 0x00, +/* 00016810 */ 0x20, 0x21, 0x09, 0x03, 0x01, 0x8F, 0x01, 0x06, 0x20, 0x06, 0x00, 0x4A, 0x20, 0x93, 0x05, 0x21, +/* 00016820 */ 0x04, 0x00, 0x98, 0x20, 0x20, 0x21, 0x01, 0x00, 0x45, 0x17, 0x20, 0x15, 0x03, 0x00, 0x17, 0x15, +/* 00016830 */ 0x09, 0xE2, 0x00, 0x2D, 0x20, 0x14, 0x06, 0x98, 0x20, 0x12, 0x20, 0x02, 0x00, 0x14, 0x03, 0x00, +/* 00016840 */ 0x20, 0x15, 0x09, 0x67, 0x00, 0x8F, 0x04, 0x36, 0x21, 0x00, 0x00, 0x4A, 0x21, 0x6D, 0x20, 0x21, +/* 00016850 */ 0x08, 0x07, 0x04, 0x00, 0x59, 0x00, 0x21, 0x5A, 0x01, 0x12, 0x05, 0x00, 0x5A, 0x02, 0x04, 0x05, +/* 00016860 */ 0x00, 0x5A, 0x03, 0x14, 0x05, 0x00, 0xF4, 0x04, 0x20, 0x20, 0x08, 0x00, 0x00, 0x00, 0x05, 0x00, +/* 00016870 */ 0x2D, 0x20, 0x20, 0x17, 0x2D, 0x20, 0x20, 0x17, 0x8F, 0x04, 0x36, 0x22, 0x00, 0x00, 0x4A, 0x22, +/* 00016880 */ 0x6D, 0x21, 0x22, 0x09, 0x07, 0x03, 0x00, 0x59, 0x00, 0x22, 0x5A, 0x01, 0x12, 0x06, 0x00, 0x2D, +/* 00016890 */ 0x23, 0x14, 0x0D, 0x5A, 0x02, 0x23, 0x06, 0x00, 0xF4, 0x03, 0x21, 0x21, 0x09, 0x00, 0x00, 0x00, +/* 000168A0 */ 0x06, 0x00, 0x2D, 0x20, 0x20, 0x21, 0x45, 0x12, 0x20, 0x09, 0x60, 0x00, 0x8F, 0x04, 0x36, 0x21, +/* 000168B0 */ 0x00, 0x00, 0x4A, 0x21, 0x6D, 0x20, 0x21, 0x0A, 0x07, 0x04, 0x00, 0x59, 0x00, 0x21, 0x5A, 0x01, +/* 000168C0 */ 0x12, 0x07, 0x00, 0x5A, 0x02, 0x04, 0x07, 0x00, 0x5A, 0x03, 0x14, 0x07, 0x00, 0xF4, 0x04, 0x20, +/* 000168D0 */ 0x20, 0x0A, 0x00, 0x00, 0x00, 0x07, 0x00, 0x2D, 0x20, 0x20, 0x17, 0x8F, 0x04, 0x36, 0x22, 0x00, +/* 000168E0 */ 0x00, 0x4A, 0x22, 0x6D, 0x21, 0x22, 0x0B, 0x07, 0x03, 0x00, 0x59, 0x00, 0x22, 0x5A, 0x01, 0x12, +/* 000168F0 */ 0x08, 0x00, 0x2D, 0x23, 0x14, 0x06, 0x5A, 0x02, 0x23, 0x08, 0x00, 0xF4, 0x03, 0x21, 0x21, 0x0B, +/* 00016900 */ 0x00, 0x00, 0x00, 0x08, 0x00, 0x2D, 0x20, 0x20, 0x21, 0x45, 0x12, 0x20, 0x98, 0x20, 0x12, 0x14, +/* 00016910 */ 0x03, 0x00, 0x45, 0x15, 0x20, 0x09, 0x12, 0x00, 0x8F, 0x01, 0x07, 0x20, 0x07, 0x00, 0x4A, 0x20, +/* 00016920 */ 0x98, 0x20, 0x20, 0x15, 0x04, 0x00, 0x77, 0x20, 0x0E, 0x0C, 0x2D, 0x20, 0x14, 0x06, 0x45, 0x18, +/* 00016930 */ 0x20, 0xED, 0x01, 0xEE, 0x01, 0xA7, 0x20, 0x12, 0x0D, 0x01, 0x00, 0x12, 0x03, 0x00, 0x18, 0x20, +/* 00016940 */ 0x09, 0x14, 0x00, 0x98, 0x20, 0x12, 0x18, 0x05, 0x00, 0x14, 0x03, 0x00, 0x20, 0x15, 0x09, 0x06, +/* 00016950 */ 0x00, 0x26, 0x18, 0x18, 0x09, 0xDC, 0xFF, 0xEF, 0x01, 0x8F, 0x01, 0x03, 0x20, 0x08, 0x00, 0x4A, +/* 00016960 */ 0x20, 0x98, 0x20, 0x20, 0x15, 0x06, 0x00, 0x45, 0x19, 0x20, 0x8F, 0x01, 0x05, 0x20, 0x09, 0x00, +/* 00016970 */ 0x4A, 0x20, 0x33, 0x21, 0x18, 0x14, 0x98, 0x20, 0x20, 0x21, 0x07, 0x00, 0x45, 0x1A, 0x20, 0x9D, +/* 00016980 */ 0x1A, 0x0E, 0x19, 0x00, 0x00, 0x45, 0x14, 0x18, 0x09, 0x09, 0xFE, 0xEF, 0x00, 0x77, 0x12, 0x0E, +/* 00016990 */ 0x0E, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x2C, 0x01, 0x69, 0xFE, 0x73, 0x04, 0xFE, 0x2C, 0x01, 0xCF, +/* 000169A0 */ 0xFE, 0xFF, 0x01, 0xFE, 0x0D, 0x02, 0xD1, 0xFE, 0x5E, 0x01, 0xFE, 0x5E, 0x01, 0xFE, 0x5E, 0x01, +/* 000169B0 */ 0xFE, 0x5E, 0x01, 0xFE, 0x73, 0x04, 0xD1, 0xFE, 0x72, 0x02, 0xFE, 0x00, 0xE8, 0x27, 0x24, 0x00, +/* 000169C0 */ 0x00, 0x00, 0x55, 0x00, 0xB0, 0x01, 0x07, 0x00, 0xB6, 0x00, 0x57, 0x00, 0x43, 0x05, 0x2B, 0x00, +/* 000169D0 */ 0x0E, 0x02, 0x03, 0x00, 0x27, 0x00, 0x07, 0x00, 0x22, 0x00, 0x0E, 0x00, 0x2A, 0x00, 0x09, 0x00, +/* 000169E0 */ 0x2A, 0x00, 0x07, 0x00, 0x31, 0x00, 0x04, 0x00, 0x29, 0x00, 0x04, 0x00, 0x2B, 0x00, 0x03, 0x00, +/* 000169F0 */ 0x45, 0x00, 0x03, 0x00, 0x1D, 0x00, 0x06, 0x00, 0x25, 0x00, 0x04, 0x00, 0x27, 0x00, 0x03, 0x00, +/* 00016A00 */ 0x2A, 0x00, 0x03, 0x00, 0x1D, 0x00, 0x06, 0x00, 0x25, 0x00, 0x08, 0x00, 0x2B, 0x00, 0x03, 0x00, +/* 00016A10 */ 0x1D, 0x00, 0x03, 0x00, 0x02, 0x01, 0x17, 0x00, 0x58, 0x00, 0x18, 0x00, 0x76, 0x01, 0x16, 0x00, +/* 00016A20 */ 0x49, 0x00, 0x08, 0x00, 0x3B, 0x00, 0x12, 0x00, 0x76, 0x00, 0x67, 0x00, 0xE1, 0x00, 0x60, 0x00, +/* 00016A30 */ 0xED, 0x00, 0x0C, 0x00, 0x38, 0x01, 0x12, 0x00, 0x6F, 0x00, 0x0B, 0x00, 0x2A, 0x00, 0x1C, 0x00, +/* 00016A40 */ 0x44, 0x00, 0x08, 0x00, 0x30, 0x00, 0x11, 0x00, 0x3E, 0x00, 0x15, 0x00, 0x48, 0x00, 0x06, 0x00, +/* 00016A50 */ 0x36, 0x00, 0x08, 0x00, 0x2A, 0x00, 0x06, 0x00, 0x23, 0x00, 0x00, 0xC3, 0x6B, 0x01, 0x00, 0x63, +/* 00016A60 */ 0x6A, 0x01, 0x00, 0x7F, 0x5C, 0x0A, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x5E, 0x05, 0x43, 0xA2, +/* 00016A70 */ 0x41, 0xD1, 0x00, 0x58, 0xFE, 0x99, 0xEA, 0xFE, 0x99, 0xEA, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, +/* 00016A80 */ 0xFE, 0x99, 0xEA, 0xFE, 0xF8, 0x04, 0xFE, 0xF8, 0x04, 0x08, 0x0B, 0x0F, 0x04, 0x38, 0x34, 0x05, +/* 00016A90 */ 0x03, 0x01, 0x06, 0x01, 0x01, 0x01, 0x01, 0x0E, 0x06, 0xFE, 0x38, 0x04, 0x0B, 0x06, 0xFE, 0x6F, +/* 00016AA0 */ 0x04, 0x06, 0xFE, 0x6D, 0x04, 0x06, 0xFE, 0x55, 0x04, 0x0C, 0x06, 0xFE, 0x6E, 0x04, 0x06, 0xFE, +/* 00016AB0 */ 0x70, 0x04, 0x06, 0xFE, 0x57, 0x04, 0xE4, 0x4E, 0x0D, 0x8F, 0x01, 0x04, 0x0F, 0x00, 0x00, 0x4A, +/* 00016AC0 */ 0x0F, 0x98, 0x0F, 0x0F, 0x0C, 0x00, 0x00, 0x45, 0x0D, 0x0F, 0x14, 0x03, 0x00, 0x0C, 0x02, 0x09, +/* 00016AD0 */ 0x79, 0x00, 0x8F, 0x01, 0x03, 0x0F, 0x01, 0x00, 0x14, 0x2D, 0x00, 0x0F, 0x03, 0x8F, 0x01, 0x03, +/* 00016AE0 */ 0x0F, 0x01, 0x00, 0xA8, 0x10, 0x14, 0x03, 0x00, 0x0F, 0x10, 0x09, 0x23, 0x00, 0x8F, 0x01, 0x05, +/* 00016AF0 */ 0x0F, 0x02, 0x00, 0x4A, 0x0F, 0x14, 0x10, 0x00, 0x0F, 0x04, 0x8F, 0x01, 0x05, 0x0F, 0x02, 0x00, +/* 00016B00 */ 0x4A, 0x0F, 0x14, 0x03, 0x00, 0x0F, 0x05, 0x09, 0x06, 0x00, 0x45, 0x0C, 0x06, 0x09, 0x3B, 0x00, +/* 00016B10 */ 0x8F, 0x01, 0x03, 0x0F, 0x01, 0x00, 0x14, 0x2D, 0x00, 0x0F, 0x07, 0x8F, 0x01, 0x03, 0x0F, 0x01, +/* 00016B20 */ 0x00, 0xA8, 0x10, 0x14, 0x03, 0x00, 0x0F, 0x10, 0x09, 0x20, 0x00, 0x8F, 0x01, 0x05, 0x0F, 0x02, +/* 00016B30 */ 0x00, 0x4A, 0x0F, 0x14, 0x10, 0x00, 0x0F, 0x08, 0x8F, 0x01, 0x05, 0x0F, 0x02, 0x00, 0x4A, 0x0F, +/* 00016B40 */ 0x14, 0x03, 0x00, 0x0F, 0x09, 0x09, 0x03, 0x00, 0x45, 0x0C, 0x0A, 0x45, 0x0F, 0x0B, 0x8F, 0x05, +/* 00016B50 */ 0x36, 0x11, 0x03, 0x00, 0x4A, 0x11, 0x6D, 0x10, 0x11, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x11, +/* 00016B60 */ 0x8F, 0x02, 0x02, 0x12, 0x04, 0x00, 0x4A, 0x12, 0x98, 0x12, 0x12, 0x0C, 0x01, 0x00, 0x5A, 0x01, +/* 00016B70 */ 0x12, 0x00, 0x00, 0x8F, 0x02, 0x04, 0x12, 0x05, 0x00, 0x4A, 0x12, 0x98, 0x12, 0x12, 0x0D, 0x02, +/* 00016B80 */ 0x00, 0x5A, 0x02, 0x12, 0x00, 0x00, 0xF4, 0x03, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00016B90 */ 0x2D, 0x00, 0x0F, 0x10, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x3A, 0x01, 0xFE, 0xCE, +/* 00016BA0 */ 0xEA, 0x08, 0x02, 0x00, 0x00, 0x00, 0x11, 0x00, 0x42, 0x00, 0x08, 0x00, 0xA5, 0x02, 0x38, 0x00, +/* 00016BB0 */ 0x6F, 0x00, 0x06, 0x00, 0x35, 0x00, 0x38, 0x00, 0x70, 0x00, 0x03, 0x00, 0x5B, 0x00, 0x4E, 0x00, +/* 00016BC0 */ 0x6C, 0x00, 0x00, 0x7F, 0x5C, 0x0E, 0x01, 0x00, 0x10, 0x03, 0x00, 0xFE, 0x51, 0x05, 0x45, 0xA2, +/* 00016BD0 */ 0x41, 0xD1, 0x00, 0x57, 0xFE, 0x35, 0xE8, 0xFE, 0x35, 0xE8, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, +/* 00016BE0 */ 0xFE, 0x35, 0xE8, 0xFE, 0x5B, 0x01, 0xFE, 0x5B, 0x01, 0x07, 0x06, 0x0B, 0x07, 0x1B, 0x18, 0x05, +/* 00016BF0 */ 0x02, 0x01, 0x01, 0x02, 0x0A, 0x01, 0x00, 0x06, 0xFE, 0xA3, 0x03, 0x01, 0x01, 0x08, 0x65, 0x4E, +/* 00016C00 */ 0x08, 0x4E, 0x09, 0x98, 0x0B, 0x07, 0x02, 0x00, 0x00, 0x45, 0x08, 0x0B, 0x8F, 0x04, 0x02, 0x0B, +/* 00016C10 */ 0x00, 0x00, 0x4A, 0x0B, 0x07, 0x06, 0x00, 0x59, 0x00, 0x05, 0x8F, 0x01, 0x02, 0x0C, 0x01, 0x00, +/* 00016C20 */ 0x5A, 0x01, 0x0C, 0x00, 0x00, 0x5A, 0x02, 0x08, 0x00, 0x00, 0x5A, 0x03, 0x03, 0x00, 0x00, 0x98, +/* 00016C30 */ 0x0C, 0x07, 0x04, 0x01, 0x00, 0x5A, 0x04, 0x0C, 0x00, 0x00, 0xA8, 0x0C, 0x5A, 0x05, 0x0C, 0x00, +/* 00016C40 */ 0x00, 0xF0, 0x06, 0x0B, 0x0B, 0x00, 0x00, 0x45, 0x09, 0x0B, 0xA8, 0x0B, 0x15, 0x03, 0x00, 0x09, +/* 00016C50 */ 0x0B, 0x09, 0x06, 0x00, 0x9D, 0x09, 0x06, 0x08, 0x00, 0x00, 0x45, 0x00, 0x06, 0x09, 0x02, 0x00, +/* 00016C60 */ 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x6A, 0xE8, 0x06, 0x04, 0x00, 0x00, 0x00, 0x09, 0x00, 0x2F, 0x00, +/* 00016C70 */ 0x3E, 0x00, 0x5F, 0x00, 0x0A, 0x00, 0x33, 0x00, 0x06, 0x00, 0x43, 0x00, 0x08, 0x00, 0x21, 0x00, +/* 00016C80 */ 0x00, 0x7E, 0x5D, 0x08, 0xC1, 0x13, 0x1A, 0x4B, 0x00, 0xFE, 0x0F, 0x04, 0x18, 0xA0, 0x41, 0xD1, +/* 00016C90 */ 0x00, 0x4A, 0xFE, 0x7D, 0xB4, 0xFE, 0x7D, 0xB4, 0x09, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFE, 0x7D, +/* 00016CA0 */ 0xB4, 0xFE, 0xC7, 0x24, 0xFE, 0xC7, 0x24, 0x05, 0xFE, 0x0B, 0x04, 0xFE, 0x0C, 0x04, 0xFE, 0x32, +/* 00016CB0 */ 0x02, 0xFE, 0x0B, 0x02, 0xFE, 0x0D, 0x04, 0x0B, 0x1B, 0x21, 0x09, 0xD4, 0xD1, 0x02, 0x0F, 0x07, +/* 00016CC0 */ 0x25, 0x25, 0x25, 0x25, 0x07, 0x1E, 0x1F, 0x20, 0x06, 0xFE, 0x27, 0x03, 0x06, 0xFE, 0x0E, 0x04, +/* 00016CD0 */ 0x05, 0xFE, 0x0F, 0x04, 0x08, 0x07, 0x05, 0xFE, 0x10, 0x04, 0x05, 0xFE, 0x11, 0x04, 0x05, 0xFE, +/* 00016CE0 */ 0x12, 0x04, 0x05, 0xFE, 0x35, 0x03, 0x06, 0xFE, 0x38, 0x03, 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, +/* 00016CF0 */ 0x2B, 0x03, 0x0B, 0x06, 0xFE, 0x2C, 0x03, 0x0C, 0x06, 0xFE, 0x2D, 0x03, 0x06, 0xFE, 0xEC, 0x03, +/* 00016D00 */ 0x06, 0xFE, 0xED, 0x03, 0x06, 0xFE, 0xEE, 0x03, 0x05, 0xFE, 0x13, 0x04, 0x05, 0xFE, 0x14, 0x04, +/* 00016D10 */ 0x06, 0xFE, 0x37, 0x03, 0x06, 0xFE, 0x15, 0x04, 0x06, 0xFE, 0x77, 0x03, 0x06, 0xFE, 0x16, 0x04, +/* 00016D20 */ 0xFE, 0xB2, 0x03, 0x4E, 0x1B, 0x4E, 0x1C, 0x4E, 0x1D, 0x4E, 0x21, 0x96, 0x02, 0x21, 0x4E, 0x21, +/* 00016D30 */ 0x96, 0x03, 0x21, 0x4E, 0x21, 0x96, 0x04, 0x21, 0x4E, 0x21, 0x96, 0x05, 0x21, 0x4E, 0x21, 0x96, +/* 00016D40 */ 0x06, 0x21, 0x8F, 0x02, 0x32, 0x21, 0x00, 0x00, 0x15, 0x03, 0x00, 0x21, 0x02, 0x09, 0x13, 0x00, +/* 00016D50 */ 0x8F, 0x02, 0x32, 0x21, 0x00, 0x00, 0x15, 0x03, 0x00, 0x21, 0x03, 0x09, 0x05, 0x00, 0xA8, 0x00, +/* 00016D60 */ 0x09, 0x70, 0x03, 0xD6, 0x00, 0x21, 0x96, 0x02, 0x21, 0x8F, 0x02, 0x03, 0x22, 0x01, 0x00, 0x6D, +/* 00016D70 */ 0x21, 0x22, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x22, 0x8F, 0x01, 0x06, 0x23, 0x02, 0x00, 0x4A, +/* 00016D80 */ 0x23, 0x07, 0x03, 0x00, 0x59, 0x00, 0x05, 0x5A, 0x01, 0x04, 0x01, 0x00, 0xD6, 0x01, 0x24, 0x5A, +/* 00016D90 */ 0x02, 0x24, 0x01, 0x00, 0xF0, 0x03, 0x23, 0x23, 0x01, 0x00, 0x5A, 0x01, 0x23, 0x00, 0x00, 0x8F, +/* 00016DA0 */ 0x02, 0x03, 0x23, 0x01, 0x00, 0x5F, 0x23, 0x23, 0x01, 0x5F, 0x23, 0x23, 0x02, 0x5A, 0x02, 0x23, +/* 00016DB0 */ 0x00, 0x00, 0xF4, 0x03, 0xFF, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x02, 0x32, 0x21, +/* 00016DC0 */ 0x00, 0x00, 0x14, 0x03, 0x00, 0x21, 0x03, 0x09, 0x05, 0x00, 0xA8, 0x00, 0x09, 0x04, 0x03, 0xCD, +/* 00016DD0 */ 0x21, 0x96, 0x03, 0x21, 0x8F, 0x02, 0x23, 0x21, 0x03, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x05, +/* 00016DE0 */ 0x5A, 0x01, 0x07, 0x02, 0x00, 0xD6, 0x02, 0x22, 0x5A, 0x02, 0x22, 0x02, 0x00, 0xF0, 0x03, 0x21, +/* 00016DF0 */ 0x21, 0x02, 0x00, 0x96, 0x04, 0x21, 0x8F, 0x01, 0x06, 0x21, 0x02, 0x00, 0x4A, 0x21, 0x07, 0x03, +/* 00016E00 */ 0x00, 0x59, 0x00, 0x05, 0x5A, 0x01, 0x08, 0x03, 0x00, 0xD6, 0x03, 0x22, 0x5A, 0x02, 0x22, 0x03, +/* 00016E10 */ 0x00, 0xF0, 0x03, 0x21, 0x21, 0x03, 0x00, 0x96, 0x05, 0x21, 0x8F, 0x01, 0x06, 0x21, 0x02, 0x00, +/* 00016E20 */ 0x4A, 0x21, 0x07, 0x03, 0x00, 0x59, 0x00, 0x05, 0x5A, 0x01, 0x09, 0x04, 0x00, 0xD6, 0x04, 0x22, +/* 00016E30 */ 0x5A, 0x02, 0x22, 0x04, 0x00, 0xF0, 0x03, 0x21, 0x21, 0x04, 0x00, 0x45, 0x1B, 0x21, 0x8F, 0x01, +/* 00016E40 */ 0x06, 0x21, 0x02, 0x00, 0x4A, 0x21, 0x07, 0x03, 0x00, 0x59, 0x00, 0x05, 0x5A, 0x01, 0x0A, 0x05, +/* 00016E50 */ 0x00, 0xD6, 0x05, 0x22, 0x5A, 0x02, 0x22, 0x05, 0x00, 0xF0, 0x03, 0x21, 0x21, 0x05, 0x00, 0x45, +/* 00016E60 */ 0x1C, 0x21, 0x8F, 0x02, 0x36, 0x22, 0x04, 0x00, 0x4A, 0x22, 0x6D, 0x21, 0x22, 0x03, 0x07, 0x04, +/* 00016E70 */ 0x00, 0x59, 0x00, 0x22, 0x93, 0x04, 0x23, 0x05, 0x00, 0x5A, 0x01, 0x23, 0x06, 0x00, 0x5A, 0x02, +/* 00016E80 */ 0x0B, 0x06, 0x00, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, +/* 00016E90 */ 0x7B, 0x1C, 0x23, 0x04, 0x7B, 0x0E, 0x23, 0x05, 0x7B, 0x10, 0x23, 0x06, 0x7B, 0x0E, 0x23, 0x07, +/* 00016EA0 */ 0x5A, 0x03, 0x23, 0x06, 0x00, 0xF4, 0x04, 0xFF, 0x21, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x8F, +/* 00016EB0 */ 0x02, 0x36, 0x22, 0x04, 0x00, 0x4A, 0x22, 0x6D, 0x21, 0x22, 0x08, 0x07, 0x04, 0x00, 0x59, 0x00, +/* 00016EC0 */ 0x22, 0x93, 0x04, 0x23, 0x05, 0x00, 0x5A, 0x01, 0x23, 0x07, 0x00, 0x5A, 0x02, 0x12, 0x07, 0x00, +/* 00016ED0 */ 0xCE, 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x93, 0x03, 0x24, +/* 00016EE0 */ 0x06, 0x00, 0x7B, 0x24, 0x23, 0x09, 0x7B, 0x10, 0x23, 0x0A, 0x7B, 0x10, 0x23, 0x0B, 0x7B, 0x10, +/* 00016EF0 */ 0x23, 0x0C, 0x5A, 0x03, 0x23, 0x07, 0x00, 0xF4, 0x04, 0xFF, 0x21, 0x08, 0x00, 0x00, 0x00, 0x07, +/* 00016F00 */ 0x00, 0x8F, 0x02, 0x36, 0x22, 0x04, 0x00, 0x4A, 0x22, 0x6D, 0x21, 0x22, 0x0D, 0x07, 0x04, 0x00, +/* 00016F10 */ 0x59, 0x00, 0x22, 0x93, 0x03, 0x23, 0x06, 0x00, 0x5A, 0x01, 0x23, 0x08, 0x00, 0x5A, 0x02, 0x13, +/* 00016F20 */ 0x08, 0x00, 0xCE, 0x30, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x93, +/* 00016F30 */ 0x04, 0x24, 0x05, 0x00, 0x7B, 0x24, 0x23, 0x0E, 0x7B, 0x0E, 0x23, 0x0F, 0x7B, 0x10, 0x23, 0x10, +/* 00016F40 */ 0x7B, 0x0E, 0x23, 0x11, 0x5A, 0x03, 0x23, 0x08, 0x00, 0xF4, 0x04, 0xFF, 0x21, 0x0D, 0x00, 0x00, +/* 00016F50 */ 0x00, 0x08, 0x00, 0xD6, 0x06, 0x21, 0x96, 0x06, 0x21, 0x8F, 0x02, 0x36, 0x22, 0x04, 0x00, 0x4A, +/* 00016F60 */ 0x22, 0x6D, 0x21, 0x22, 0x12, 0x07, 0x04, 0x00, 0x59, 0x00, 0x22, 0x93, 0x03, 0x23, 0x06, 0x00, +/* 00016F70 */ 0x5A, 0x01, 0x23, 0x09, 0x00, 0x5A, 0x02, 0x14, 0x09, 0x00, 0xCE, 0x48, 0x00, 0x00, 0x00, 0x03, +/* 00016F80 */ 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x8F, 0x01, 0x06, 0x24, 0x02, 0x00, 0x4A, 0x24, 0x07, +/* 00016F90 */ 0x03, 0x00, 0x59, 0x00, 0x05, 0x5A, 0x01, 0x15, 0x0A, 0x00, 0xD6, 0x07, 0x25, 0x5A, 0x02, 0x25, +/* 00016FA0 */ 0x0A, 0x00, 0xF0, 0x03, 0x24, 0x24, 0x0A, 0x00, 0x7B, 0x24, 0x23, 0x13, 0x7B, 0x0E, 0x23, 0x14, +/* 00016FB0 */ 0x7B, 0x10, 0x23, 0x15, 0x7B, 0x0E, 0x23, 0x16, 0x5A, 0x03, 0x23, 0x09, 0x00, 0xF4, 0x04, 0xFF, +/* 00016FC0 */ 0x21, 0x12, 0x00, 0x00, 0x00, 0x09, 0x00, 0x8F, 0x01, 0x06, 0x21, 0x02, 0x00, 0x4A, 0x21, 0x07, +/* 00016FD0 */ 0x03, 0x00, 0x59, 0x00, 0x05, 0x5A, 0x01, 0x16, 0x0B, 0x00, 0xD6, 0x08, 0x22, 0x5A, 0x02, 0x22, +/* 00016FE0 */ 0x0B, 0x00, 0xF0, 0x03, 0x21, 0x21, 0x0B, 0x00, 0x45, 0x1D, 0x21, 0x8F, 0x02, 0x36, 0x22, 0x04, +/* 00016FF0 */ 0x00, 0x4A, 0x22, 0x6D, 0x21, 0x22, 0x17, 0x07, 0x04, 0x00, 0x59, 0x00, 0x22, 0x5A, 0x01, 0x1D, +/* 00017000 */ 0x0C, 0x00, 0x5A, 0x02, 0x17, 0x0C, 0x00, 0xCE, 0x60, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, +/* 00017010 */ 0x23, 0x00, 0x00, 0x00, 0x7B, 0x16, 0x23, 0x18, 0x7B, 0x10, 0x23, 0x19, 0x7B, 0x10, 0x23, 0x1A, +/* 00017020 */ 0x7B, 0x0E, 0x23, 0x1B, 0x5A, 0x03, 0x23, 0x0C, 0x00, 0xF4, 0x04, 0xFF, 0x21, 0x17, 0x00, 0x00, +/* 00017030 */ 0x00, 0x0C, 0x00, 0x8F, 0x02, 0x36, 0x22, 0x04, 0x00, 0x4A, 0x22, 0x6D, 0x21, 0x22, 0x1C, 0x07, +/* 00017040 */ 0x04, 0x00, 0x59, 0x00, 0x22, 0x93, 0x03, 0x23, 0x06, 0x00, 0x5A, 0x01, 0x23, 0x0D, 0x00, 0x5A, +/* 00017050 */ 0x02, 0x18, 0x0D, 0x00, 0xCE, 0x78, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, +/* 00017060 */ 0x00, 0x7B, 0x1D, 0x23, 0x1D, 0x7B, 0x10, 0x23, 0x1E, 0x7B, 0x0E, 0x23, 0x1F, 0x5A, 0x03, 0x23, +/* 00017070 */ 0x0D, 0x00, 0xF4, 0x04, 0xFF, 0x21, 0x1C, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x8F, 0x02, 0x36, 0x22, +/* 00017080 */ 0x04, 0x00, 0x4A, 0x22, 0x6D, 0x21, 0x22, 0x20, 0x07, 0x04, 0x00, 0x59, 0x00, 0x22, 0x93, 0x03, +/* 00017090 */ 0x23, 0x06, 0x00, 0x5A, 0x01, 0x23, 0x0E, 0x00, 0x5A, 0x02, 0x1A, 0x0E, 0x00, 0xCE, 0x8C, 0x00, +/* 000170A0 */ 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x7B, 0x1B, 0x23, 0x21, 0x7B, 0x10, +/* 000170B0 */ 0x23, 0x22, 0x7B, 0x0E, 0x23, 0x23, 0x7B, 0x0E, 0x23, 0x24, 0x5A, 0x03, 0x23, 0x0E, 0x00, 0xF4, +/* 000170C0 */ 0x04, 0xFF, 0x21, 0x20, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x93, 0x04, 0x00, 0x05, 0x00, 0x09, 0x02, +/* 000170D0 */ 0x00, 0xA8, 0x00, 0x24, 0x00, 0x07, 0xA4, 0x00, 0x8C, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, +/* 000170E0 */ 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, +/* 000170F0 */ 0x96, 0x01, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00017100 */ 0x98, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, +/* 00017110 */ 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, +/* 00017120 */ 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, +/* 00017130 */ 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, +/* 00017140 */ 0x95, 0x01, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00017150 */ 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, +/* 00017160 */ 0x18, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, +/* 00017170 */ 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00017180 */ 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, +/* 00017190 */ 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0xFE, 0x04, 0x02, 0xFE, 0x2F, 0x02, 0xFE, 0x2D, +/* 000171A0 */ 0x02, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, +/* 000171B0 */ 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, +/* 000171C0 */ 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, +/* 000171D0 */ 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, +/* 000171E0 */ 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, +/* 000171F0 */ 0x98, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x94, +/* 00017200 */ 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x93, 0xB4, 0x16, 0x1F, 0x00, 0x00, 0x00, 0x1C, +/* 00017210 */ 0x00, 0x40, 0x00, 0x05, 0x00, 0x1B, 0x00, 0x06, 0x00, 0xB8, 0x09, 0x53, 0x00, 0x94, 0x02, 0x0E, +/* 00017220 */ 0x00, 0x29, 0x00, 0x05, 0x00, 0x1B, 0x00, 0x05, 0x00, 0x2B, 0x00, 0x22, 0x00, 0x70, 0x04, 0x24, +/* 00017230 */ 0x00, 0xB9, 0x01, 0x24, 0x00, 0xDD, 0x02, 0x24, 0x00, 0x13, 0x01, 0x4D, 0x00, 0xCE, 0x00, 0x52, +/* 00017240 */ 0x00, 0xC9, 0x00, 0x52, 0x00, 0xCA, 0x00, 0x06, 0x00, 0xC4, 0x02, 0x6E, 0x00, 0xF9, 0x03, 0x24, +/* 00017250 */ 0x00, 0x22, 0x02, 0x48, 0x00, 0xB7, 0x00, 0x49, 0x00, 0xA4, 0x00, 0x4D, 0x00, 0xCD, 0x00, 0x0A, +/* 00017260 */ 0x00, 0x19, 0x00, 0x00, 0xC5, 0x7C, 0x01, 0x00, 0x61, 0x7B, 0x01, 0x00, 0x2F, 0x79, 0x01, 0x00, +/* 00017270 */ 0x40, 0x78, 0x01, 0x00, 0xE4, 0x76, 0x01, 0x00, 0x44, 0x76, 0x01, 0x00, 0xE1, 0x74, 0x01, 0x00, +/* 00017280 */ 0xA5, 0x73, 0x01, 0x00, 0x88, 0x72, 0x01, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x03, 0x00, +/* 00017290 */ 0xFE, 0xD5, 0x04, 0x3B, 0xA0, 0x41, 0xD1, 0x00, 0x53, 0xFE, 0x13, 0xD5, 0xFE, 0x13, 0xD5, 0x09, +/* 000172A0 */ 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFE, 0x13, 0xD5, 0xFE, 0xE4, 0x01, 0xFE, 0xE4, 0x01, 0x07, 0x06, +/* 000172B0 */ 0x09, 0x04, 0x2A, 0x28, 0x03, 0x03, 0x04, 0x06, 0x06, 0x06, 0x06, 0x08, 0x06, 0xFE, 0x94, 0x03, +/* 000172C0 */ 0x05, 0xFE, 0x22, 0x04, 0x06, 0xFE, 0x2F, 0x03, 0x08, 0xA6, 0x58, 0x06, 0x4E, 0x07, 0x2A, 0x09, +/* 000172D0 */ 0x06, 0x15, 0x03, 0x00, 0x09, 0x02, 0x09, 0x24, 0x00, 0x8F, 0x03, 0x03, 0x0A, 0x00, 0x00, 0x6D, +/* 000172E0 */ 0x09, 0x0A, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0A, 0x5A, 0x01, 0x03, 0x00, 0x00, 0x5A, 0x02, +/* 000172F0 */ 0x04, 0x00, 0x00, 0xF4, 0x03, 0xFF, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x01, 0x06, +/* 00017300 */ 0x09, 0x01, 0x00, 0x4A, 0x09, 0x07, 0x02, 0x00, 0x59, 0x00, 0x05, 0x5A, 0x01, 0x06, 0x01, 0x00, +/* 00017310 */ 0xF0, 0x02, 0x09, 0x09, 0x01, 0x00, 0x45, 0x07, 0x09, 0x5F, 0x09, 0x07, 0x01, 0xA8, 0x0A, 0x14, +/* 00017320 */ 0x03, 0x00, 0x09, 0x0A, 0x09, 0x3E, 0x00, 0x45, 0x09, 0x07, 0x8F, 0x03, 0x36, 0x0B, 0x02, 0x00, +/* 00017330 */ 0x4A, 0x0B, 0x6D, 0x0A, 0x0B, 0x02, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0B, 0x8F, 0x01, 0x05, 0x0C, +/* 00017340 */ 0x03, 0x00, 0x4A, 0x0C, 0x5A, 0x01, 0x0C, 0x02, 0x00, 0x5A, 0x02, 0x07, 0x02, 0x00, 0xF4, 0x03, +/* 00017350 */ 0x0A, 0x0A, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x77, 0x0A, 0x09, 0x03, 0x5F, 0x09, 0x07, 0x04, +/* 00017360 */ 0x82, 0x09, 0x09, 0x06, 0x01, 0x5F, 0x00, 0x07, 0x05, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, +/* 00017370 */ 0xFE, 0xB6, 0x02, 0xFE, 0x25, 0x04, 0x54, 0xFE, 0x25, 0x04, 0xFE, 0x25, 0x04, 0xFE, 0x25, 0x04, +/* 00017380 */ 0xFE, 0x2D, 0xD5, 0x08, 0x04, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x30, 0x00, 0x24, 0x00, 0x6C, 0x00, +/* 00017390 */ 0x1C, 0x00, 0x3C, 0x00, 0x0E, 0x00, 0x3E, 0x00, 0x35, 0x00, 0x49, 0x00, 0x09, 0x00, 0x41, 0x00, +/* 000173A0 */ 0x09, 0x00, 0x29, 0x00, 0x00, 0x7F, 0x5C, 0x18, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0xC2, 0x04, +/* 000173B0 */ 0x55, 0xA0, 0x41, 0xC3, 0x00, 0xFE, 0xEE, 0x03, 0x52, 0xFE, 0x79, 0xD1, 0xFE, 0x79, 0xD1, 0x09, +/* 000173C0 */ 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFE, 0x79, 0xD1, 0xFE, 0x78, 0x02, 0xFE, 0x78, 0x02, 0x06, 0x11, +/* 000173D0 */ 0x15, 0x04, 0x2C, 0x2A, 0x03, 0x03, 0x01, 0x03, 0x01, 0x01, 0x01, 0x01, 0x14, 0x06, 0xFE, 0x94, +/* 000173E0 */ 0x03, 0x05, 0xFE, 0x22, 0x04, 0x06, 0xFE, 0x2F, 0x03, 0x08, 0x06, 0xFE, 0xD7, 0x03, 0x06, 0xFE, +/* 000173F0 */ 0x24, 0x04, 0x06, 0xFE, 0x18, 0x04, 0x06, 0xFE, 0x1B, 0x04, 0x06, 0xFE, 0x1C, 0x04, 0x06, 0xFE, +/* 00017400 */ 0xDA, 0x03, 0x06, 0xFE, 0xDB, 0x03, 0x06, 0xFE, 0xDC, 0x03, 0x06, 0xFE, 0xDD, 0x03, 0x06, 0xFE, +/* 00017410 */ 0xDE, 0x03, 0x06, 0xFE, 0x1F, 0x04, 0xAA, 0x58, 0x11, 0x4E, 0x12, 0x4E, 0x13, 0x2A, 0x15, 0x11, +/* 00017420 */ 0x15, 0x03, 0x00, 0x15, 0x02, 0x09, 0x24, 0x00, 0x8F, 0x03, 0x03, 0x16, 0x00, 0x00, 0x6D, 0x15, +/* 00017430 */ 0x16, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x16, 0x5A, 0x01, 0x03, 0x00, 0x00, 0x5A, 0x02, 0x04, +/* 00017440 */ 0x00, 0x00, 0xF4, 0x03, 0xFF, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x01, 0x06, 0x15, +/* 00017450 */ 0x01, 0x00, 0x4A, 0x15, 0x07, 0x02, 0x00, 0x59, 0x00, 0x05, 0x5A, 0x01, 0x11, 0x01, 0x00, 0xF0, +/* 00017460 */ 0x02, 0x15, 0x15, 0x01, 0x00, 0x45, 0x12, 0x15, 0xD0, 0x15, 0x0B, 0x00, 0x00, 0xA1, 0x00, 0x06, +/* 00017470 */ 0x15, 0xA1, 0x01, 0x07, 0x15, 0xA1, 0x02, 0x08, 0x15, 0xA1, 0x03, 0x09, 0x15, 0xA1, 0x04, 0x0A, +/* 00017480 */ 0x15, 0xA1, 0x05, 0x0B, 0x15, 0xA1, 0x06, 0x0C, 0x15, 0xA1, 0x07, 0x0D, 0x15, 0xA1, 0x08, 0x0E, +/* 00017490 */ 0x15, 0xA1, 0x09, 0x0F, 0x15, 0xA1, 0x0A, 0x10, 0x15, 0x45, 0x13, 0x15, 0x8F, 0x02, 0x17, 0x15, +/* 000174A0 */ 0x02, 0x00, 0x4A, 0x15, 0x07, 0x03, 0x00, 0x59, 0x00, 0x05, 0x5A, 0x01, 0x13, 0x02, 0x00, 0x5A, +/* 000174B0 */ 0x02, 0x12, 0x02, 0x00, 0xF0, 0x03, 0x00, 0x15, 0x02, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, +/* 000174C0 */ 0x00, 0xFE, 0xB6, 0x02, 0xFE, 0xA6, 0xD1, 0x06, 0x06, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x34, 0x00, +/* 000174D0 */ 0x24, 0x00, 0x74, 0x00, 0x1C, 0x00, 0x40, 0x00, 0x34, 0x00, 0x21, 0x01, 0x23, 0x00, 0x41, 0x00, +/* 000174E0 */ 0x00, 0x7F, 0x5C, 0x0A, 0xC1, 0x07, 0x10, 0x03, 0x00, 0xFE, 0xAF, 0x04, 0x23, 0xA2, 0x41, 0xC1, +/* 000174F0 */ 0x00, 0xFE, 0x0D, 0x04, 0x51, 0xFE, 0x3E, 0xCE, 0xFE, 0x3E, 0xCE, 0x01, 0xFE, 0x00, 0x90, 0x02, +/* 00017500 */ 0x02, 0xFE, 0x3E, 0xCE, 0xFE, 0x9E, 0x02, 0xFE, 0x9E, 0x02, 0x05, 0x05, 0x08, 0x04, 0x32, 0x2E, +/* 00017510 */ 0x03, 0x01, 0x04, 0x02, 0x07, 0x07, 0x07, 0x07, 0x01, 0x07, 0x06, 0xFE, 0x94, 0x03, 0x05, 0xFE, +/* 00017520 */ 0x22, 0x04, 0x06, 0xFE, 0x2F, 0x03, 0xDB, 0x4E, 0x06, 0x8F, 0x03, 0x03, 0x09, 0x00, 0x00, 0x6D, +/* 00017530 */ 0x08, 0x09, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x09, 0x5A, 0x01, 0x05, 0x00, 0x00, 0xF4, 0x02, +/* 00017540 */ 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x06, 0x08, 0x0E, 0x08, 0x00, 0x06, 0x5F, +/* 00017550 */ 0x08, 0x06, 0x01, 0x0F, 0x24, 0x00, 0x08, 0x8F, 0x01, 0x04, 0x08, 0x01, 0x00, 0x4A, 0x08, 0xE3, +/* 00017560 */ 0x08, 0x05, 0x08, 0x00, 0x0E, 0x13, 0x00, 0x08, 0x8F, 0x03, 0x03, 0x08, 0x00, 0x00, 0x5F, 0x08, +/* 00017570 */ 0x08, 0x02, 0x98, 0x08, 0x05, 0x08, 0x00, 0x00, 0x45, 0x05, 0x08, 0x2A, 0x08, 0x05, 0x15, 0x03, +/* 00017580 */ 0x00, 0x08, 0x02, 0x09, 0x24, 0x00, 0x8F, 0x03, 0x03, 0x09, 0x00, 0x00, 0x6D, 0x08, 0x09, 0x03, +/* 00017590 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x09, 0x5A, 0x01, 0x03, 0x01, 0x00, 0x5A, 0x02, 0x04, 0x01, 0x00, +/* 000175A0 */ 0xF4, 0x03, 0xFF, 0x08, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x8F, 0x03, 0x03, 0x09, 0x00, 0x00, +/* 000175B0 */ 0x6D, 0x08, 0x09, 0x04, 0x07, 0x02, 0x00, 0x59, 0x00, 0x09, 0x5A, 0x01, 0x05, 0x02, 0x00, 0xF4, +/* 000175C0 */ 0x02, 0x08, 0x08, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x45, 0x06, 0x08, 0x5F, 0x08, 0x06, 0x05, +/* 000175D0 */ 0x0F, 0x24, 0x00, 0x08, 0x8F, 0x03, 0x03, 0x09, 0x00, 0x00, 0x6D, 0x08, 0x09, 0x06, 0x07, 0x03, +/* 000175E0 */ 0x00, 0x59, 0x00, 0x09, 0x5A, 0x01, 0x03, 0x03, 0x00, 0x5A, 0x02, 0x04, 0x03, 0x00, 0xF4, 0x03, +/* 000175F0 */ 0xFF, 0x08, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x45, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA8, 0x00, +/* 00017600 */ 0x24, 0x00, 0xFE, 0x05, 0x02, 0xFE, 0x20, 0x04, 0xFE, 0x30, 0x02, 0xFE, 0xB6, 0x02, 0xFE, 0x05, +/* 00017610 */ 0x02, 0xFE, 0x20, 0x04, 0xFE, 0xB6, 0x02, 0xFE, 0x5A, 0xCE, 0x0A, 0x02, 0x00, 0x00, 0x00, 0x22, +/* 00017620 */ 0x00, 0x3D, 0x00, 0x1D, 0x00, 0x6E, 0x00, 0x13, 0x00, 0x3D, 0x00, 0x0B, 0x00, 0x2E, 0x00, 0x24, +/* 00017630 */ 0x00, 0x6C, 0x00, 0x22, 0x00, 0x39, 0x00, 0x08, 0x00, 0x3D, 0x00, 0x24, 0x00, 0x6C, 0x00, 0x08, +/* 00017640 */ 0x00, 0x1D, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x97, 0x04, 0x5E, +/* 00017650 */ 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x38, 0x03, 0x50, 0xFE, 0x05, 0xCB, 0xFE, 0x05, 0xCB, 0x01, 0xFE, +/* 00017660 */ 0x00, 0x90, 0x03, 0x02, 0xFE, 0x05, 0xCB, 0xB2, 0xB2, 0x05, 0x03, 0x06, 0x08, 0x17, 0x16, 0x03, +/* 00017670 */ 0x02, 0x03, 0x01, 0x01, 0x01, 0x01, 0x05, 0x08, 0x57, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA8, 0x06, +/* 00017680 */ 0x45, 0x04, 0x06, 0x8F, 0x02, 0x16, 0x06, 0x00, 0x00, 0x4A, 0x06, 0x07, 0x04, 0x00, 0x59, 0x00, +/* 00017690 */ 0x02, 0x8F, 0x03, 0x03, 0x07, 0x01, 0x00, 0x5F, 0x07, 0x07, 0x00, 0x5A, 0x01, 0x07, 0x00, 0x00, +/* 000176A0 */ 0x8F, 0x02, 0x12, 0x07, 0x02, 0x00, 0x4A, 0x07, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, +/* 000176B0 */ 0x03, 0x01, 0x00, 0xF0, 0x02, 0x07, 0x07, 0x01, 0x00, 0x5A, 0x02, 0x07, 0x00, 0x00, 0x5A, 0x03, +/* 000176C0 */ 0x04, 0x00, 0x00, 0xF0, 0x04, 0x00, 0x06, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, +/* 000176D0 */ 0xFE, 0xF1, 0x01, 0xFE, 0x2A, 0xCB, 0x03, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x23, 0x00, 0x4B, +/* 000176E0 */ 0x00, 0x69, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x88, 0x04, 0x5E, +/* 000176F0 */ 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x16, 0x04, 0x4F, 0xFE, 0x28, 0xC8, 0xFE, 0x28, 0xC8, 0x09, 0xFE, +/* 00017700 */ 0x00, 0x90, 0x02, 0x02, 0xFE, 0x28, 0xC8, 0xFE, 0x7B, 0x02, 0xFE, 0x7B, 0x02, 0x06, 0x07, 0x0B, +/* 00017710 */ 0x06, 0x32, 0x30, 0x03, 0x05, 0x02, 0x06, 0x06, 0x06, 0x06, 0x0A, 0x06, 0xFE, 0x94, 0x03, 0x05, +/* 00017720 */ 0xFE, 0x23, 0x04, 0x06, 0xFE, 0x2F, 0x03, 0x0B, 0x0C, 0xDF, 0x58, 0x08, 0x4E, 0x09, 0x8F, 0x03, +/* 00017730 */ 0x24, 0x0C, 0x00, 0x00, 0x6D, 0x0B, 0x0C, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0C, 0x5A, 0x01, +/* 00017740 */ 0x07, 0x00, 0x00, 0xF4, 0x02, 0x0B, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x07, 0x0B, +/* 00017750 */ 0x2A, 0x0B, 0x08, 0x15, 0x03, 0x00, 0x0B, 0x02, 0x09, 0x24, 0x00, 0x8F, 0x03, 0x03, 0x0C, 0x01, +/* 00017760 */ 0x00, 0x6D, 0x0B, 0x0C, 0x01, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0C, 0x5A, 0x01, 0x03, 0x01, 0x00, +/* 00017770 */ 0x5A, 0x02, 0x04, 0x01, 0x00, 0xF4, 0x03, 0xFF, 0x0B, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x8F, +/* 00017780 */ 0x03, 0x03, 0x0C, 0x01, 0x00, 0x6D, 0x0B, 0x0C, 0x02, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0C, 0x5A, +/* 00017790 */ 0x01, 0x08, 0x02, 0x00, 0xF4, 0x02, 0x0B, 0x0B, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x45, 0x09, +/* 000177A0 */ 0x0B, 0xA8, 0x0B, 0x14, 0x08, 0x00, 0x09, 0x0B, 0x5F, 0x0B, 0x09, 0x03, 0x0F, 0x24, 0x00, 0x0B, +/* 000177B0 */ 0x8F, 0x03, 0x03, 0x0C, 0x01, 0x00, 0x6D, 0x0B, 0x0C, 0x04, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0C, +/* 000177C0 */ 0x5A, 0x01, 0x03, 0x03, 0x00, 0x5A, 0x02, 0x04, 0x03, 0x00, 0xF4, 0x03, 0xFF, 0x0B, 0x04, 0x00, +/* 000177D0 */ 0x00, 0x00, 0x03, 0x00, 0x8F, 0x03, 0x03, 0x0C, 0x01, 0x00, 0x6D, 0x0B, 0x0C, 0x05, 0x07, 0x05, +/* 000177E0 */ 0x00, 0x59, 0x00, 0x0C, 0x5A, 0x01, 0x07, 0x04, 0x00, 0x5A, 0x02, 0x09, 0x04, 0x00, 0x5A, 0x03, +/* 000177F0 */ 0x05, 0x04, 0x00, 0x5A, 0x04, 0x06, 0x04, 0x00, 0xF4, 0x05, 0x00, 0x0B, 0x05, 0x00, 0x00, 0x00, +/* 00017800 */ 0x04, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x23, 0x03, 0xFE, 0xB6, 0x02, 0xFE, +/* 00017810 */ 0x05, 0x02, 0xFE, 0x20, 0x04, 0xFE, 0xB6, 0x02, 0xFE, 0xF8, 0x01, 0xFE, 0x50, 0xC8, 0x08, 0x04, +/* 00017820 */ 0x00, 0x00, 0x00, 0x22, 0x00, 0x27, 0x00, 0x0B, 0x00, 0x30, 0x00, 0x24, 0x00, 0x73, 0x00, 0x22, +/* 00017830 */ 0x00, 0x41, 0x00, 0x0F, 0x00, 0x5B, 0x00, 0x24, 0x00, 0x73, 0x00, 0x33, 0x00, 0x79, 0x00, 0x00, +/* 00017840 */ 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x7E, 0x04, 0x50, 0xA2, 0x41, 0xC3, 0x00, +/* 00017850 */ 0xFE, 0x15, 0x04, 0x4E, 0xFE, 0x61, 0xC6, 0xFE, 0x61, 0xC6, 0x09, 0xFE, 0x00, 0x90, 0x02, 0x02, +/* 00017860 */ 0xFE, 0x61, 0xC6, 0xFE, 0x65, 0x01, 0xFE, 0x65, 0x01, 0x05, 0x05, 0x08, 0x06, 0x1F, 0x1E, 0x03, +/* 00017870 */ 0x03, 0x02, 0x04, 0x04, 0x04, 0x04, 0x07, 0x05, 0xFE, 0x22, 0x04, 0x06, 0xFE, 0x2F, 0x03, 0x0C, +/* 00017880 */ 0x89, 0x58, 0x06, 0x8F, 0x03, 0x24, 0x09, 0x00, 0x00, 0x6D, 0x08, 0x09, 0x00, 0x07, 0x02, 0x00, +/* 00017890 */ 0x59, 0x00, 0x09, 0x5A, 0x01, 0x05, 0x00, 0x00, 0xF4, 0x02, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, +/* 000178A0 */ 0x00, 0x00, 0x45, 0x05, 0x08, 0x0E, 0x08, 0x00, 0x06, 0x5F, 0x08, 0x06, 0x01, 0x0F, 0x24, 0x00, +/* 000178B0 */ 0x08, 0x8F, 0x03, 0x03, 0x09, 0x01, 0x00, 0x6D, 0x08, 0x09, 0x02, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 000178C0 */ 0x09, 0x5A, 0x01, 0x02, 0x01, 0x00, 0x5A, 0x02, 0x03, 0x01, 0x00, 0xF4, 0x03, 0xFF, 0x08, 0x02, +/* 000178D0 */ 0x00, 0x00, 0x00, 0x01, 0x00, 0x8F, 0x03, 0x03, 0x09, 0x01, 0x00, 0x6D, 0x08, 0x09, 0x03, 0x07, +/* 000178E0 */ 0x05, 0x00, 0x59, 0x00, 0x09, 0x5A, 0x01, 0x05, 0x02, 0x00, 0x5A, 0x02, 0x06, 0x02, 0x00, 0x5A, +/* 000178F0 */ 0x03, 0x04, 0x02, 0x00, 0x5A, 0x04, 0x04, 0x02, 0x00, 0xF4, 0x05, 0x00, 0x08, 0x03, 0x00, 0x00, +/* 00017900 */ 0x00, 0x02, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x23, 0x03, 0xFE, 0x20, 0x04, +/* 00017910 */ 0xFE, 0xB6, 0x02, 0xFE, 0xF8, 0x01, 0xFE, 0x82, 0xC6, 0x05, 0x02, 0x00, 0x00, 0x00, 0x22, 0x00, +/* 00017920 */ 0x27, 0x00, 0x0C, 0x00, 0x3E, 0x00, 0x24, 0x00, 0x6C, 0x00, 0x33, 0x00, 0x72, 0x00, 0x00, 0x7F, +/* 00017930 */ 0x5C, 0x08, 0xC1, 0x17, 0x10, 0x43, 0x00, 0xFE, 0x63, 0x04, 0x44, 0xA2, 0x41, 0xC3, 0x00, 0xFE, +/* 00017940 */ 0x2F, 0x03, 0x4D, 0xFE, 0xE5, 0xC1, 0xFE, 0xE5, 0xC1, 0x08, 0xFE, 0x00, 0x90, 0x03, 0x01, 0xFE, +/* 00017950 */ 0xE5, 0xC1, 0xFE, 0xC9, 0x03, 0xFE, 0xC9, 0x03, 0x0C, 0x09, 0x12, 0x05, 0x5C, 0x53, 0x03, 0x06, +/* 00017960 */ 0x05, 0x09, 0x09, 0x09, 0x09, 0x01, 0x01, 0x11, 0x08, 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, 0x2B, +/* 00017970 */ 0x03, 0x0C, 0x06, 0xFE, 0x2C, 0x03, 0x06, 0xFE, 0x2D, 0x03, 0x07, 0xFE, 0x6E, 0x01, 0x01, 0x5D, +/* 00017980 */ 0x01, 0x0B, 0x58, 0x10, 0xC0, 0x0C, 0x4E, 0x0D, 0x4E, 0x0E, 0x4E, 0x0F, 0x15, 0x05, 0x00, 0x09, +/* 00017990 */ 0x02, 0xA8, 0x12, 0x45, 0x09, 0x12, 0x15, 0x05, 0x00, 0x0A, 0x02, 0xA8, 0x12, 0x45, 0x0A, 0x12, +/* 000179A0 */ 0x4E, 0x0D, 0x4E, 0x0E, 0x4E, 0x0F, 0xA8, 0x12, 0x14, 0x03, 0x00, 0x0B, 0x12, 0x09, 0x06, 0x00, +/* 000179B0 */ 0x45, 0x12, 0x0C, 0x09, 0x03, 0x00, 0x46, 0x12, 0x0B, 0x45, 0x0D, 0x12, 0x8F, 0x02, 0x07, 0x12, +/* 000179C0 */ 0x00, 0x00, 0x4A, 0x12, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x0D, 0x00, 0x00, 0x8F, +/* 000179D0 */ 0x01, 0x03, 0x13, 0x01, 0x00, 0x4A, 0x13, 0x5A, 0x02, 0x13, 0x00, 0x00, 0xF0, 0x03, 0x12, 0x12, +/* 000179E0 */ 0x00, 0x00, 0x45, 0x0E, 0x12, 0x8F, 0x03, 0x03, 0x13, 0x02, 0x00, 0x6D, 0x12, 0x13, 0x00, 0x07, +/* 000179F0 */ 0x02, 0x00, 0x59, 0x00, 0x13, 0x5A, 0x01, 0x0E, 0x01, 0x00, 0xF4, 0x02, 0x12, 0x12, 0x00, 0x00, +/* 00017A00 */ 0x00, 0x00, 0x01, 0x00, 0x45, 0x0F, 0x12, 0xA8, 0x12, 0x14, 0x03, 0x00, 0x0F, 0x12, 0x09, 0x43, +/* 00017A10 */ 0x00, 0x8F, 0x03, 0x36, 0x13, 0x03, 0x00, 0x4A, 0x13, 0x6D, 0x12, 0x13, 0x01, 0x07, 0x01, 0x00, +/* 00017A20 */ 0x59, 0x00, 0x13, 0xF4, 0x01, 0x12, 0x12, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x45, 0x0F, 0x12, +/* 00017A30 */ 0x8F, 0x03, 0x03, 0x13, 0x02, 0x00, 0x6D, 0x12, 0x13, 0x02, 0x07, 0x03, 0x00, 0x59, 0x00, 0x13, +/* 00017A40 */ 0x5A, 0x01, 0x0E, 0x03, 0x00, 0x5A, 0x02, 0x0F, 0x03, 0x00, 0xF4, 0x03, 0xFF, 0x12, 0x02, 0x00, +/* 00017A50 */ 0x00, 0x00, 0x03, 0x00, 0x8F, 0x01, 0x02, 0x12, 0x04, 0x00, 0x4A, 0x12, 0x07, 0x04, 0x00, 0x59, +/* 00017A60 */ 0x00, 0x02, 0x5A, 0x01, 0x0F, 0x04, 0x00, 0x5A, 0x02, 0x09, 0x04, 0x00, 0x5A, 0x03, 0x0A, 0x04, +/* 00017A70 */ 0x00, 0xF0, 0x04, 0xFF, 0x12, 0x04, 0x00, 0xA8, 0x12, 0x14, 0x03, 0x00, 0x0B, 0x12, 0x09, 0x61, +/* 00017A80 */ 0x00, 0xE3, 0x12, 0x10, 0x0C, 0x00, 0x0E, 0x58, 0x00, 0x12, 0x8F, 0x03, 0x36, 0x13, 0x03, 0x00, +/* 00017A90 */ 0x4A, 0x13, 0x6D, 0x12, 0x13, 0x03, 0x07, 0x04, 0x00, 0x59, 0x00, 0x13, 0x5A, 0x01, 0x10, 0x05, +/* 00017AA0 */ 0x00, 0x8F, 0x03, 0x03, 0x14, 0x02, 0x00, 0x5F, 0x14, 0x14, 0x04, 0x5A, 0x02, 0x14, 0x05, 0x00, +/* 00017AB0 */ 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x7B, 0x0E, 0x14, +/* 00017AC0 */ 0x05, 0x7B, 0x05, 0x14, 0x06, 0x7B, 0x05, 0x14, 0x07, 0x7B, 0x05, 0x14, 0x08, 0x5A, 0x03, 0x14, +/* 00017AD0 */ 0x05, 0x00, 0xF4, 0x04, 0xFF, 0x12, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x45, 0x00, 0x10, 0x09, +/* 00017AE0 */ 0x08, 0x00, 0x45, 0x00, 0x0E, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x01, 0x18, 0x00, 0x00, +/* 00017AF0 */ 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, +/* 00017B00 */ 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0xFE, 0x05, 0x02, 0x69, 0xFE, +/* 00017B10 */ 0x06, 0x02, 0xFE, 0x9C, 0x01, 0xFE, 0x30, 0x02, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, +/* 00017B20 */ 0x01, 0xFE, 0x95, 0x01, 0xFE, 0xFB, 0xC1, 0x0E, 0x0E, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, +/* 00017B30 */ 0x10, 0x00, 0x23, 0x00, 0x16, 0x00, 0x54, 0x00, 0x29, 0x00, 0x63, 0x00, 0x22, 0x00, 0x47, 0x00, +/* 00017B40 */ 0x0A, 0x00, 0x32, 0x00, 0x1F, 0x00, 0x2B, 0x00, 0x24, 0x00, 0x51, 0x00, 0x23, 0x00, 0x45, 0x00, +/* 00017B50 */ 0x13, 0x00, 0x50, 0x00, 0x52, 0x00, 0xF4, 0x00, 0x06, 0x00, 0x28, 0x00, 0x08, 0x00, 0x1D, 0x00, +/* 00017B60 */ 0x00, 0x7F, 0x5C, 0x0A, 0xC1, 0x07, 0x10, 0x03, 0x00, 0xFE, 0x51, 0x04, 0x5F, 0xA0, 0x41, 0xE3, +/* 00017B70 */ 0x00, 0xFE, 0x21, 0x04, 0x4C, 0xFE, 0xFD, 0xBE, 0xFE, 0xFD, 0xBE, 0x0B, 0xFE, 0x00, 0x90, 0x01, +/* 00017B80 */ 0x01, 0xFE, 0xFD, 0xBE, 0xFE, 0xFF, 0x01, 0xFE, 0xFF, 0x01, 0x07, 0x0B, 0x10, 0x06, 0x36, 0x34, +/* 00017B90 */ 0x03, 0x02, 0x05, 0x05, 0x04, 0x04, 0x04, 0x04, 0x01, 0x0F, 0x07, 0x06, 0xFE, 0xA4, 0x03, 0x05, +/* 00017BA0 */ 0xFE, 0x0F, 0x04, 0x06, 0xFE, 0x0E, 0x04, 0x01, 0x00, 0x01, 0x01, 0x08, 0x0C, 0x0B, 0xEB, 0xB1, +/* 00017BB0 */ 0x0D, 0x58, 0x0B, 0x4E, 0x0C, 0x4E, 0x0E, 0x2A, 0x10, 0x0B, 0x15, 0x03, 0x00, 0x10, 0x03, 0x09, +/* 00017BC0 */ 0x33, 0x00, 0x8F, 0x03, 0x0B, 0x10, 0x00, 0x00, 0xE3, 0x10, 0x0B, 0x10, 0x00, 0x0F, 0x24, 0x00, +/* 00017BD0 */ 0x10, 0x8F, 0x03, 0x03, 0x11, 0x01, 0x00, 0x6D, 0x10, 0x11, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 00017BE0 */ 0x11, 0x5A, 0x01, 0x04, 0x00, 0x00, 0x5A, 0x02, 0x05, 0x00, 0x00, 0xF4, 0x03, 0xFF, 0x10, 0x00, +/* 00017BF0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x03, 0x36, 0x11, 0x02, 0x00, 0x4A, 0x11, 0x6D, 0x10, 0x11, +/* 00017C00 */ 0x01, 0x07, 0x01, 0x00, 0x59, 0x00, 0x11, 0xF4, 0x01, 0x10, 0x10, 0x01, 0x00, 0x00, 0x00, 0x01, +/* 00017C10 */ 0x00, 0x45, 0x0C, 0x10, 0x8F, 0x01, 0x02, 0x10, 0x03, 0x00, 0x4A, 0x10, 0x07, 0x04, 0x00, 0x59, +/* 00017C20 */ 0x00, 0x08, 0x5A, 0x01, 0x0C, 0x02, 0x00, 0x98, 0x11, 0x0D, 0x06, 0x00, 0x00, 0x5A, 0x02, 0x11, +/* 00017C30 */ 0x02, 0x00, 0x98, 0x11, 0x0D, 0x07, 0x01, 0x00, 0x5A, 0x03, 0x11, 0x02, 0x00, 0xF0, 0x04, 0xFF, +/* 00017C40 */ 0x10, 0x02, 0x00, 0x8F, 0x03, 0x24, 0x11, 0x04, 0x00, 0x6D, 0x10, 0x11, 0x02, 0x07, 0x02, 0x00, +/* 00017C50 */ 0x59, 0x00, 0x11, 0x5A, 0x01, 0x0B, 0x03, 0x00, 0xF4, 0x02, 0x10, 0x10, 0x02, 0x00, 0x00, 0x00, +/* 00017C60 */ 0x03, 0x00, 0x45, 0x0E, 0x10, 0x8F, 0x03, 0x03, 0x11, 0x01, 0x00, 0x6D, 0x10, 0x11, 0x03, 0x07, +/* 00017C70 */ 0x05, 0x00, 0x59, 0x00, 0x11, 0x5A, 0x01, 0x0E, 0x04, 0x00, 0x5A, 0x02, 0x0C, 0x04, 0x00, 0x5A, +/* 00017C80 */ 0x03, 0x09, 0x04, 0x00, 0x5A, 0x04, 0x0A, 0x04, 0x00, 0xF4, 0x05, 0x00, 0x10, 0x03, 0x00, 0x00, +/* 00017C90 */ 0x00, 0x04, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB6, 0x02, 0x69, 0xFE, 0x23, +/* 00017CA0 */ 0x03, 0xFE, 0xF8, 0x01, 0xFE, 0x25, 0xBF, 0x07, 0x08, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x4D, 0x00, +/* 00017CB0 */ 0x24, 0x00, 0x68, 0x00, 0x1F, 0x00, 0x2C, 0x00, 0x2F, 0x00, 0x4E, 0x00, 0x22, 0x00, 0x2F, 0x00, +/* 00017CC0 */ 0x33, 0x00, 0x78, 0x00, 0x00, 0x7F, 0x5C, 0x1A, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x14, 0x04, +/* 00017CD0 */ 0x27, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x0B, 0x04, 0x4B, 0xFE, 0x0D, 0xB5, 0xFE, 0x0D, 0xB5, 0x01, +/* 00017CE0 */ 0xFE, 0x00, 0x90, 0x04, 0x04, 0xFE, 0x0D, 0xB5, 0xFE, 0x8E, 0x09, 0xFE, 0x8E, 0x09, 0x11, 0x15, +/* 00017CF0 */ 0x23, 0x07, 0xE0, 0xCA, 0x03, 0x02, 0x11, 0x04, 0x08, 0x17, 0x17, 0x17, 0x17, 0x22, 0x08, 0x06, +/* 00017D00 */ 0xFE, 0xE0, 0x03, 0x06, 0xFE, 0xA3, 0x03, 0x05, 0xFE, 0xDF, 0x03, 0x05, 0xFE, 0x9C, 0x03, 0x06, +/* 00017D10 */ 0xFE, 0x17, 0x04, 0x06, 0xFE, 0x18, 0x04, 0x06, 0xFE, 0x19, 0x04, 0x06, 0xFE, 0x1A, 0x04, 0x06, +/* 00017D20 */ 0xFE, 0x1B, 0x04, 0x01, 0x00, 0x06, 0xFE, 0x1C, 0x04, 0x06, 0xFE, 0x1D, 0x04, 0x06, 0xFE, 0x1E, +/* 00017D30 */ 0x04, 0x06, 0xFE, 0x37, 0x03, 0x01, 0x03, 0x06, 0xFE, 0x1F, 0x04, 0x06, 0xFE, 0xA2, 0x03, 0x0B, +/* 00017D40 */ 0xFE, 0x98, 0x03, 0x4E, 0x18, 0x4E, 0x19, 0x4E, 0x1A, 0x4E, 0x1B, 0x4E, 0x1C, 0x4E, 0x1D, 0x4E, +/* 00017D50 */ 0x1E, 0x4E, 0x1F, 0x4E, 0x20, 0x4E, 0x21, 0x8F, 0x02, 0x12, 0x23, 0x00, 0x00, 0x4A, 0x23, 0x07, +/* 00017D60 */ 0x02, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x16, 0x00, 0x00, 0xF0, 0x02, 0x23, 0x23, 0x00, 0x00, +/* 00017D70 */ 0x45, 0x18, 0x23, 0xA8, 0x23, 0x14, 0x03, 0x00, 0x17, 0x23, 0x09, 0x22, 0x00, 0x8F, 0x03, 0x36, +/* 00017D80 */ 0x25, 0x01, 0x00, 0x4A, 0x25, 0x6D, 0x24, 0x25, 0x00, 0x07, 0x01, 0x00, 0x59, 0x00, 0x25, 0xF4, +/* 00017D90 */ 0x01, 0x24, 0x24, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, 0x23, 0x24, 0x09, 0x22, 0x00, 0x8F, +/* 00017DA0 */ 0x03, 0x24, 0x25, 0x02, 0x00, 0x6D, 0x24, 0x25, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x25, 0x5A, +/* 00017DB0 */ 0x01, 0x17, 0x02, 0x00, 0xF4, 0x02, 0x24, 0x24, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x46, 0x23, +/* 00017DC0 */ 0x24, 0x45, 0x17, 0x23, 0x8F, 0x03, 0x36, 0x24, 0x01, 0x00, 0x4A, 0x24, 0x6D, 0x23, 0x24, 0x02, +/* 00017DD0 */ 0x07, 0x01, 0x00, 0x59, 0x00, 0x24, 0xF4, 0x01, 0x23, 0x23, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, +/* 00017DE0 */ 0x45, 0x19, 0x23, 0x45, 0x23, 0x19, 0x8F, 0x02, 0x02, 0x24, 0x03, 0x00, 0x4A, 0x24, 0x07, 0x06, +/* 00017DF0 */ 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x17, 0x04, 0x00, 0x5A, 0x02, 0x03, 0x04, 0x00, 0x5A, 0x03, +/* 00017E00 */ 0x04, 0x04, 0x00, 0xD0, 0x25, 0x02, 0x00, 0x00, 0xA1, 0x00, 0x05, 0x25, 0xA1, 0x01, 0x06, 0x25, +/* 00017E10 */ 0x5A, 0x04, 0x25, 0x04, 0x00, 0x5A, 0x05, 0x05, 0x04, 0x00, 0xF0, 0x06, 0x24, 0x24, 0x04, 0x00, +/* 00017E20 */ 0x77, 0x24, 0x23, 0x03, 0x8F, 0x02, 0x0C, 0x23, 0x04, 0x00, 0x4A, 0x23, 0x07, 0x05, 0x00, 0x59, +/* 00017E30 */ 0x00, 0x02, 0x8F, 0x03, 0x03, 0x24, 0x05, 0x00, 0x5F, 0x24, 0x24, 0x04, 0x5A, 0x01, 0x24, 0x05, +/* 00017E40 */ 0x00, 0x5A, 0x02, 0x18, 0x05, 0x00, 0x5A, 0x03, 0x19, 0x05, 0x00, 0xD0, 0x24, 0x01, 0x01, 0x00, +/* 00017E50 */ 0xA1, 0x00, 0x07, 0x24, 0x5A, 0x04, 0x24, 0x05, 0x00, 0xF0, 0x05, 0x23, 0x23, 0x05, 0x00, 0x45, +/* 00017E60 */ 0x1A, 0x23, 0x5F, 0x23, 0x1A, 0x05, 0x77, 0x23, 0x15, 0x06, 0x5F, 0x23, 0x1A, 0x07, 0x77, 0x23, +/* 00017E70 */ 0x15, 0x08, 0x8F, 0x02, 0x02, 0x23, 0x03, 0x00, 0x4A, 0x23, 0x07, 0x06, 0x00, 0x59, 0x00, 0x02, +/* 00017E80 */ 0x5A, 0x01, 0x17, 0x06, 0x00, 0x5A, 0x02, 0x08, 0x06, 0x00, 0x5A, 0x03, 0x04, 0x06, 0x00, 0xD0, +/* 00017E90 */ 0x24, 0x03, 0x02, 0x00, 0xA1, 0x00, 0x09, 0x24, 0xA1, 0x01, 0x0A, 0x24, 0xA1, 0x02, 0x0B, 0x24, +/* 00017EA0 */ 0x5A, 0x04, 0x24, 0x06, 0x00, 0x5A, 0x05, 0x09, 0x06, 0x00, 0xF0, 0x06, 0x23, 0x23, 0x06, 0x00, +/* 00017EB0 */ 0x45, 0x1B, 0x23, 0x77, 0x1B, 0x15, 0x09, 0x8F, 0x03, 0x03, 0x23, 0x05, 0x00, 0x5F, 0x23, 0x23, +/* 00017EC0 */ 0x0A, 0x98, 0x23, 0x23, 0x1B, 0x00, 0x00, 0x77, 0x23, 0x15, 0x0B, 0x41, 0x23, 0x1B, 0x0B, 0x45, +/* 00017ED0 */ 0x1C, 0x23, 0x8F, 0x02, 0x02, 0x23, 0x03, 0x00, 0x4A, 0x23, 0x07, 0x06, 0x00, 0x59, 0x00, 0x02, +/* 00017EE0 */ 0x5A, 0x01, 0x17, 0x07, 0x00, 0x5A, 0x02, 0x0B, 0x07, 0x00, 0x5A, 0x03, 0x04, 0x07, 0x00, 0xA8, +/* 00017EF0 */ 0x24, 0x5A, 0x04, 0x24, 0x07, 0x00, 0xA8, 0x24, 0x5A, 0x05, 0x24, 0x07, 0x00, 0xF0, 0x06, 0x23, +/* 00017F00 */ 0x23, 0x07, 0x00, 0x45, 0x1D, 0x23, 0xA8, 0x23, 0x15, 0x03, 0x00, 0x1D, 0x23, 0x09, 0x3F, 0x00, +/* 00017F10 */ 0x8F, 0x02, 0x10, 0x23, 0x06, 0x00, 0x4A, 0x23, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, +/* 00017F20 */ 0x1D, 0x08, 0x00, 0xF0, 0x02, 0x23, 0x23, 0x08, 0x00, 0x0F, 0x22, 0x00, 0x23, 0x8F, 0x03, 0x03, +/* 00017F30 */ 0x24, 0x05, 0x00, 0x6D, 0x23, 0x24, 0x0C, 0x07, 0x02, 0x00, 0x59, 0x00, 0x24, 0x5A, 0x01, 0x1D, +/* 00017F40 */ 0x09, 0x00, 0xF4, 0x02, 0xFF, 0x23, 0x0C, 0x00, 0x00, 0x00, 0x09, 0x00, 0x09, 0x28, 0x00, 0xA8, +/* 00017F50 */ 0x23, 0x14, 0x03, 0x00, 0x1D, 0x23, 0x09, 0x1E, 0x00, 0x0E, 0x1A, 0x00, 0x1C, 0x8F, 0x03, 0x03, +/* 00017F60 */ 0x24, 0x05, 0x00, 0x6D, 0x23, 0x24, 0x0D, 0x07, 0x01, 0x00, 0x59, 0x00, 0x24, 0xF4, 0x01, 0xFF, +/* 00017F70 */ 0x23, 0x0D, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x45, 0x1E, 0x0C, 0x0E, 0x4A, 0x00, 0x1C, 0x8F, 0x03, +/* 00017F80 */ 0x36, 0x24, 0x01, 0x00, 0x4A, 0x24, 0x6D, 0x23, 0x24, 0x0E, 0x07, 0x02, 0x00, 0x59, 0x00, 0x24, +/* 00017F90 */ 0x5A, 0x01, 0x1D, 0x0B, 0x00, 0xF4, 0x02, 0x23, 0x23, 0x0E, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x45, +/* 00017FA0 */ 0x1D, 0x23, 0x77, 0x1D, 0x15, 0x0F, 0x8F, 0x03, 0x03, 0x24, 0x05, 0x00, 0x6D, 0x23, 0x24, 0x10, +/* 00017FB0 */ 0x07, 0x02, 0x00, 0x59, 0x00, 0x24, 0x5A, 0x01, 0x1D, 0x0C, 0x00, 0xF4, 0x02, 0x23, 0x23, 0x10, +/* 00017FC0 */ 0x00, 0x00, 0x00, 0x0C, 0x00, 0x45, 0x1E, 0x23, 0x8F, 0x02, 0x02, 0x23, 0x03, 0x00, 0x4A, 0x23, +/* 00017FD0 */ 0x07, 0x06, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x17, 0x0D, 0x00, 0x5A, 0x02, 0x0D, 0x0D, 0x00, +/* 00017FE0 */ 0x5A, 0x03, 0x04, 0x0D, 0x00, 0xD0, 0x24, 0x03, 0x03, 0x00, 0xA1, 0x00, 0x0E, 0x24, 0xA1, 0x01, +/* 00017FF0 */ 0x0F, 0x24, 0xA1, 0x02, 0x10, 0x24, 0x5A, 0x04, 0x24, 0x0D, 0x00, 0x5A, 0x05, 0x0F, 0x0D, 0x00, +/* 00018000 */ 0xF0, 0x06, 0x23, 0x23, 0x0D, 0x00, 0x45, 0x1F, 0x23, 0x0E, 0x18, 0x00, 0x1C, 0x77, 0x1F, 0x15, +/* 00018010 */ 0x11, 0x8F, 0x03, 0x03, 0x23, 0x05, 0x00, 0x5F, 0x23, 0x23, 0x12, 0x98, 0x23, 0x23, 0x1F, 0x01, +/* 00018020 */ 0x00, 0x77, 0x23, 0x15, 0x13, 0xA8, 0x23, 0x45, 0x20, 0x23, 0xA8, 0x23, 0x45, 0x21, 0x23, 0x0E, +/* 00018030 */ 0x09, 0x00, 0x1C, 0x45, 0x20, 0x1E, 0x45, 0x21, 0x1E, 0x09, 0x14, 0x00, 0x45, 0x20, 0x0C, 0x14, +/* 00018040 */ 0x03, 0x00, 0x1B, 0x0A, 0x09, 0x06, 0x00, 0x45, 0x21, 0x0C, 0x09, 0x03, 0x00, 0x45, 0x21, 0x11, +/* 00018050 */ 0x8F, 0x02, 0x15, 0x23, 0x07, 0x00, 0x4A, 0x23, 0x07, 0x05, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, +/* 00018060 */ 0x15, 0x0E, 0x00, 0x5A, 0x02, 0x17, 0x0E, 0x00, 0x5A, 0x03, 0x20, 0x0E, 0x00, 0x5A, 0x04, 0x21, +/* 00018070 */ 0x0E, 0x00, 0xF0, 0x05, 0xFF, 0x23, 0x0E, 0x00, 0x45, 0x23, 0x15, 0x8F, 0x02, 0x02, 0x24, 0x03, +/* 00018080 */ 0x00, 0x4A, 0x24, 0x07, 0x06, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x17, 0x0F, 0x00, 0x5A, 0x02, +/* 00018090 */ 0x12, 0x0F, 0x00, 0x5A, 0x03, 0x13, 0x0F, 0x00, 0xA8, 0x25, 0x5A, 0x04, 0x25, 0x0F, 0x00, 0x5A, +/* 000180A0 */ 0x05, 0x14, 0x0F, 0x00, 0xF0, 0x06, 0x24, 0x24, 0x0F, 0x00, 0x77, 0x24, 0x23, 0x14, 0x77, 0x14, +/* 000180B0 */ 0x15, 0x15, 0x8F, 0x03, 0x03, 0x24, 0x05, 0x00, 0x6D, 0x23, 0x24, 0x16, 0x07, 0x02, 0x00, 0x59, +/* 000180C0 */ 0x00, 0x24, 0x5A, 0x01, 0x15, 0x10, 0x00, 0xF4, 0x02, 0xFF, 0x23, 0x16, 0x00, 0x00, 0x00, 0x10, +/* 000180D0 */ 0x00, 0x45, 0x00, 0x15, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x69, 0xFE, 0x21, 0x03, 0x69, +/* 000180E0 */ 0xFE, 0x0E, 0x02, 0xFE, 0xF1, 0x01, 0xFE, 0x0D, 0x02, 0xFE, 0x0D, 0x02, 0xFE, 0x19, 0x02, 0xFE, +/* 000180F0 */ 0x49, 0x02, 0xFE, 0x18, 0x04, 0xFE, 0x25, 0x02, 0xFE, 0x43, 0x02, 0xFE, 0xB7, 0x02, 0xFE, 0xB8, +/* 00018100 */ 0x02, 0xFE, 0x7B, 0x01, 0xFE, 0x40, 0x02, 0xFE, 0xFB, 0x01, 0xFE, 0x41, 0x02, 0xFE, 0x26, 0x02, +/* 00018110 */ 0xFE, 0x42, 0x02, 0xFE, 0x4A, 0x02, 0xFE, 0x20, 0x04, 0xFE, 0xF9, 0x01, 0xFE, 0x3B, 0xB5, 0x28, +/* 00018120 */ 0x14, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x46, 0x00, 0x51, 0x00, 0x58, 0x00, 0x1F, 0x00, 0x24, 0x00, +/* 00018130 */ 0x41, 0x00, 0x74, 0x00, 0x3E, 0x00, 0x62, 0x00, 0x08, 0x00, 0x22, 0x00, 0x08, 0x00, 0x28, 0x00, +/* 00018140 */ 0x41, 0x00, 0x70, 0x00, 0x04, 0x00, 0x1E, 0x00, 0x14, 0x00, 0x43, 0x00, 0x07, 0x00, 0x37, 0x00, +/* 00018150 */ 0x34, 0x00, 0x5B, 0x00, 0x27, 0x00, 0x55, 0x00, 0x22, 0x00, 0x40, 0x00, 0x0E, 0x00, 0x3D, 0x00, +/* 00018160 */ 0x1A, 0x00, 0x40, 0x00, 0x03, 0x00, 0x1D, 0x00, 0x04, 0x00, 0x23, 0x00, 0x24, 0x00, 0x34, 0x00, +/* 00018170 */ 0x04, 0x00, 0x28, 0x00, 0x22, 0x00, 0x48, 0x00, 0x41, 0x00, 0x79, 0x00, 0x04, 0x00, 0x23, 0x00, +/* 00018180 */ 0x04, 0x00, 0x36, 0x00, 0x14, 0x00, 0x6C, 0x00, 0x05, 0x00, 0x11, 0x00, 0x05, 0x00, 0x19, 0x00, +/* 00018190 */ 0x04, 0x00, 0x23, 0x00, 0x03, 0x00, 0x27, 0x00, 0x06, 0x00, 0x3C, 0x00, 0x03, 0x00, 0x21, 0x00, +/* 000181A0 */ 0x08, 0x00, 0x2F, 0x00, 0x06, 0x00, 0x3E, 0x00, 0x03, 0x00, 0x3E, 0x00, 0x28, 0x00, 0x51, 0x00, +/* 000181B0 */ 0x36, 0x00, 0x5D, 0x00, 0x04, 0x00, 0x7C, 0x00, 0x1F, 0x00, 0x2D, 0x00, 0x08, 0x00, 0x13, 0x00, +/* 000181C0 */ 0x00, 0x7E, 0x5D, 0x08, 0xC1, 0x13, 0x1A, 0x4B, 0x00, 0xFE, 0x56, 0x03, 0x16, 0xA0, 0x41, 0xD1, +/* 000181D0 */ 0x00, 0x42, 0xFE, 0x13, 0x92, 0xFE, 0x13, 0x92, 0x07, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFE, 0x13, +/* 000181E0 */ 0x92, 0xFE, 0x12, 0x22, 0xFE, 0x12, 0x22, 0x05, 0xFE, 0xE5, 0x03, 0xFE, 0xE6, 0x03, 0xFE, 0xE7, +/* 000181F0 */ 0x03, 0xFE, 0x4B, 0x02, 0xFE, 0x4F, 0x02, 0x0A, 0x18, 0x1D, 0x09, 0xAD, 0xAB, 0x02, 0x0C, 0x07, +/* 00018200 */ 0x1B, 0x1B, 0x1B, 0x1B, 0x05, 0x1A, 0x1B, 0x1C, 0x06, 0xFE, 0x27, 0x03, 0x06, 0xFE, 0xE8, 0x03, +/* 00018210 */ 0x05, 0xFE, 0xE9, 0x03, 0x08, 0x07, 0x05, 0xFE, 0xEA, 0x03, 0x05, 0xFE, 0xEB, 0x03, 0x05, 0xFE, +/* 00018220 */ 0x34, 0x03, 0x06, 0xFE, 0x38, 0x03, 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, 0x2B, 0x03, 0x0B, 0x06, +/* 00018230 */ 0xFE, 0x2C, 0x03, 0x0C, 0x06, 0xFE, 0x2D, 0x03, 0x06, 0xFE, 0xEC, 0x03, 0x06, 0xFE, 0xED, 0x03, +/* 00018240 */ 0x06, 0xFE, 0xEE, 0x03, 0x05, 0xFE, 0xEF, 0x03, 0x05, 0xFE, 0xF0, 0x03, 0x06, 0xFE, 0xF1, 0x03, +/* 00018250 */ 0x06, 0xFE, 0x77, 0x03, 0xFE, 0xF6, 0x02, 0x4E, 0x18, 0x4E, 0x19, 0x4E, 0x1D, 0x96, 0x02, 0x1D, +/* 00018260 */ 0x4E, 0x1D, 0x96, 0x03, 0x1D, 0x4E, 0x1D, 0x96, 0x04, 0x1D, 0x4E, 0x1D, 0x96, 0x05, 0x1D, 0x4E, +/* 00018270 */ 0x1D, 0x96, 0x06, 0x1D, 0x8F, 0x02, 0x32, 0x1D, 0x00, 0x00, 0x15, 0x03, 0x00, 0x1D, 0x02, 0x09, +/* 00018280 */ 0x13, 0x00, 0x8F, 0x02, 0x32, 0x1D, 0x00, 0x00, 0x15, 0x03, 0x00, 0x1D, 0x03, 0x09, 0x05, 0x00, +/* 00018290 */ 0xA8, 0x00, 0x09, 0xB6, 0x02, 0xD6, 0x00, 0x1D, 0x96, 0x02, 0x1D, 0xA8, 0x1D, 0x96, 0x03, 0x1D, +/* 000182A0 */ 0x8F, 0x02, 0x03, 0x1E, 0x01, 0x00, 0x6D, 0x1D, 0x1E, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x1E, +/* 000182B0 */ 0x8F, 0x01, 0x06, 0x1F, 0x02, 0x00, 0x4A, 0x1F, 0x07, 0x03, 0x00, 0x59, 0x00, 0x05, 0x5A, 0x01, +/* 000182C0 */ 0x04, 0x01, 0x00, 0xD6, 0x01, 0x20, 0x5A, 0x02, 0x20, 0x01, 0x00, 0xF0, 0x03, 0x1F, 0x1F, 0x01, +/* 000182D0 */ 0x00, 0x5A, 0x01, 0x1F, 0x00, 0x00, 0x8F, 0x02, 0x03, 0x1F, 0x01, 0x00, 0x5F, 0x1F, 0x1F, 0x01, +/* 000182E0 */ 0x5F, 0x1F, 0x1F, 0x02, 0x5A, 0x02, 0x1F, 0x00, 0x00, 0xF4, 0x03, 0xFF, 0x1D, 0x00, 0x00, 0x00, +/* 000182F0 */ 0x00, 0x00, 0x00, 0x8F, 0x02, 0x32, 0x1D, 0x00, 0x00, 0x14, 0x03, 0x00, 0x1D, 0x03, 0x09, 0x05, +/* 00018300 */ 0x00, 0xA8, 0x00, 0x09, 0x45, 0x02, 0xCD, 0x1D, 0x96, 0x04, 0x1D, 0x8F, 0x02, 0x23, 0x1D, 0x03, +/* 00018310 */ 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x05, 0x5A, 0x01, 0x07, 0x02, 0x00, 0xD6, 0x02, 0x1E, 0x5A, +/* 00018320 */ 0x02, 0x1E, 0x02, 0x00, 0xF0, 0x03, 0x1D, 0x1D, 0x02, 0x00, 0x96, 0x05, 0x1D, 0x8F, 0x01, 0x06, +/* 00018330 */ 0x1D, 0x02, 0x00, 0x4A, 0x1D, 0x07, 0x03, 0x00, 0x59, 0x00, 0x05, 0x5A, 0x01, 0x08, 0x03, 0x00, +/* 00018340 */ 0xD6, 0x03, 0x1E, 0x5A, 0x02, 0x1E, 0x03, 0x00, 0xF0, 0x03, 0x1D, 0x1D, 0x03, 0x00, 0x96, 0x06, +/* 00018350 */ 0x1D, 0x8F, 0x01, 0x06, 0x1D, 0x02, 0x00, 0x4A, 0x1D, 0x07, 0x03, 0x00, 0x59, 0x00, 0x05, 0x5A, +/* 00018360 */ 0x01, 0x09, 0x04, 0x00, 0xD6, 0x04, 0x1E, 0x5A, 0x02, 0x1E, 0x04, 0x00, 0xF0, 0x03, 0x1D, 0x1D, +/* 00018370 */ 0x04, 0x00, 0x45, 0x18, 0x1D, 0x8F, 0x02, 0x36, 0x1E, 0x04, 0x00, 0x4A, 0x1E, 0x6D, 0x1D, 0x1E, +/* 00018380 */ 0x03, 0x07, 0x04, 0x00, 0x59, 0x00, 0x1E, 0x93, 0x05, 0x1F, 0x05, 0x00, 0x5A, 0x01, 0x1F, 0x05, +/* 00018390 */ 0x00, 0x5A, 0x02, 0x0A, 0x05, 0x00, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, +/* 000183A0 */ 0x00, 0x00, 0x00, 0x7B, 0x18, 0x1F, 0x04, 0x7B, 0x0D, 0x1F, 0x05, 0x7B, 0x0F, 0x1F, 0x06, 0x7B, +/* 000183B0 */ 0x0D, 0x1F, 0x07, 0x5A, 0x03, 0x1F, 0x05, 0x00, 0xF4, 0x04, 0xFF, 0x1D, 0x03, 0x00, 0x00, 0x00, +/* 000183C0 */ 0x05, 0x00, 0x8F, 0x02, 0x36, 0x1E, 0x04, 0x00, 0x4A, 0x1E, 0x6D, 0x1D, 0x1E, 0x08, 0x07, 0x04, +/* 000183D0 */ 0x00, 0x59, 0x00, 0x1E, 0x93, 0x05, 0x1F, 0x05, 0x00, 0x5A, 0x01, 0x1F, 0x06, 0x00, 0x5A, 0x02, +/* 000183E0 */ 0x11, 0x06, 0x00, 0xCE, 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, +/* 000183F0 */ 0x93, 0x04, 0x20, 0x06, 0x00, 0x7B, 0x20, 0x1F, 0x09, 0x7B, 0x0F, 0x1F, 0x0A, 0x7B, 0x0F, 0x1F, +/* 00018400 */ 0x0B, 0x7B, 0x0F, 0x1F, 0x0C, 0x5A, 0x03, 0x1F, 0x06, 0x00, 0xF4, 0x04, 0xFF, 0x1D, 0x08, 0x00, +/* 00018410 */ 0x00, 0x00, 0x06, 0x00, 0x8F, 0x02, 0x36, 0x1E, 0x04, 0x00, 0x4A, 0x1E, 0x6D, 0x1D, 0x1E, 0x0D, +/* 00018420 */ 0x07, 0x04, 0x00, 0x59, 0x00, 0x1E, 0x93, 0x04, 0x1F, 0x06, 0x00, 0x5A, 0x01, 0x1F, 0x07, 0x00, +/* 00018430 */ 0x5A, 0x02, 0x12, 0x07, 0x00, 0xCE, 0x30, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1F, 0x00, +/* 00018440 */ 0x00, 0x00, 0x93, 0x05, 0x20, 0x05, 0x00, 0x7B, 0x20, 0x1F, 0x0E, 0x7B, 0x0D, 0x1F, 0x0F, 0x7B, +/* 00018450 */ 0x0F, 0x1F, 0x10, 0x7B, 0x0D, 0x1F, 0x11, 0x5A, 0x03, 0x1F, 0x07, 0x00, 0xF4, 0x04, 0xFF, 0x1D, +/* 00018460 */ 0x0D, 0x00, 0x00, 0x00, 0x07, 0x00, 0x8F, 0x02, 0x36, 0x1E, 0x04, 0x00, 0x4A, 0x1E, 0x6D, 0x1D, +/* 00018470 */ 0x1E, 0x12, 0x07, 0x04, 0x00, 0x59, 0x00, 0x1E, 0x93, 0x04, 0x1F, 0x06, 0x00, 0x5A, 0x01, 0x1F, +/* 00018480 */ 0x08, 0x00, 0x5A, 0x02, 0x13, 0x08, 0x00, 0xCE, 0x48, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, +/* 00018490 */ 0x1F, 0x00, 0x00, 0x00, 0x8F, 0x01, 0x06, 0x20, 0x02, 0x00, 0x4A, 0x20, 0x07, 0x03, 0x00, 0x59, +/* 000184A0 */ 0x00, 0x05, 0x5A, 0x01, 0x14, 0x09, 0x00, 0xD6, 0x05, 0x21, 0x5A, 0x02, 0x21, 0x09, 0x00, 0xF0, +/* 000184B0 */ 0x03, 0x20, 0x20, 0x09, 0x00, 0x7B, 0x20, 0x1F, 0x13, 0x7B, 0x0D, 0x1F, 0x14, 0x7B, 0x0F, 0x1F, +/* 000184C0 */ 0x15, 0x7B, 0x0D, 0x1F, 0x16, 0x5A, 0x03, 0x1F, 0x08, 0x00, 0xF4, 0x04, 0xFF, 0x1D, 0x12, 0x00, +/* 000184D0 */ 0x00, 0x00, 0x08, 0x00, 0x8F, 0x01, 0x06, 0x1D, 0x02, 0x00, 0x4A, 0x1D, 0x07, 0x03, 0x00, 0x59, +/* 000184E0 */ 0x00, 0x05, 0x5A, 0x01, 0x15, 0x0A, 0x00, 0xD6, 0x06, 0x1E, 0x5A, 0x02, 0x1E, 0x0A, 0x00, 0xF0, +/* 000184F0 */ 0x03, 0x1D, 0x1D, 0x0A, 0x00, 0x45, 0x19, 0x1D, 0x8F, 0x02, 0x36, 0x1E, 0x04, 0x00, 0x4A, 0x1E, +/* 00018500 */ 0x6D, 0x1D, 0x1E, 0x17, 0x07, 0x04, 0x00, 0x59, 0x00, 0x1E, 0x93, 0x04, 0x1F, 0x06, 0x00, 0x5A, +/* 00018510 */ 0x01, 0x1F, 0x0B, 0x00, 0x5A, 0x02, 0x16, 0x0B, 0x00, 0xCE, 0x60, 0x00, 0x00, 0x00, 0x04, 0x00, +/* 00018520 */ 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x7B, 0x19, 0x1F, 0x18, 0x7B, 0x0F, 0x1F, 0x19, 0x7B, 0x0D, +/* 00018530 */ 0x1F, 0x1A, 0x5A, 0x03, 0x1F, 0x0B, 0x00, 0xF4, 0x04, 0xFF, 0x1D, 0x17, 0x00, 0x00, 0x00, 0x0B, +/* 00018540 */ 0x00, 0x93, 0x05, 0x00, 0x05, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x05, 0x74, 0x00, +/* 00018550 */ 0x60, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x01, 0x00, 0x00, +/* 00018560 */ 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, +/* 00018570 */ 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, +/* 00018580 */ 0x95, 0x01, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00018590 */ 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, +/* 000185A0 */ 0x18, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, +/* 000185B0 */ 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 000185C0 */ 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, +/* 000185D0 */ 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0xFE, 0x04, 0x02, 0xFE, 0x2F, 0x02, 0xFE, 0x2E, +/* 000185E0 */ 0x02, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, +/* 000185F0 */ 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, +/* 00018600 */ 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, +/* 00018610 */ 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, +/* 00018620 */ 0xFE, 0x98, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x29, 0x92, 0x13, 0x1D, 0x00, 0x00, +/* 00018630 */ 0x00, 0x1C, 0x00, 0x40, 0x00, 0x05, 0x00, 0x1B, 0x00, 0x06, 0x00, 0x88, 0x0A, 0x05, 0x00, 0x73, +/* 00018640 */ 0x00, 0x53, 0x00, 0x89, 0x05, 0x0E, 0x00, 0x29, 0x00, 0x05, 0x00, 0x1B, 0x00, 0x05, 0x00, 0x27, +/* 00018650 */ 0x00, 0x22, 0x00, 0x43, 0x03, 0x24, 0x00, 0x82, 0x02, 0x24, 0x00, 0x15, 0x01, 0x4D, 0x00, 0xCA, +/* 00018660 */ 0x00, 0x52, 0x00, 0xC1, 0x00, 0x52, 0x00, 0xC0, 0x00, 0x6E, 0x00, 0xBF, 0x04, 0x24, 0x00, 0x17, +/* 00018670 */ 0x02, 0x49, 0x00, 0xA1, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x00, 0xD8, 0x8E, 0x01, 0x00, 0xC5, 0x8C, +/* 00018680 */ 0x01, 0x00, 0x01, 0x8B, 0x01, 0x00, 0xA0, 0x89, 0x01, 0x00, 0x00, 0x89, 0x01, 0x00, 0x9A, 0x87, +/* 00018690 */ 0x01, 0x00, 0x96, 0x86, 0x01, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0xF9, +/* 000186A0 */ 0x03, 0x3D, 0xA0, 0x41, 0xD1, 0x00, 0x49, 0xFE, 0x8C, 0xB1, 0xFE, 0x8C, 0xB1, 0x09, 0xFE, 0x00, +/* 000186B0 */ 0x90, 0x01, 0x01, 0xFE, 0x8C, 0xB1, 0xFE, 0xD7, 0x01, 0xFE, 0xD7, 0x01, 0x05, 0x05, 0x08, 0x04, +/* 000186C0 */ 0x23, 0x22, 0x03, 0x03, 0x01, 0x05, 0x05, 0x05, 0x05, 0x07, 0x06, 0xFE, 0x94, 0x03, 0x05, 0xFE, +/* 000186D0 */ 0x09, 0x04, 0x06, 0xFE, 0x2E, 0x03, 0x93, 0x58, 0x05, 0x4E, 0x06, 0x2A, 0x08, 0x05, 0x15, 0x03, +/* 000186E0 */ 0x00, 0x08, 0x02, 0x09, 0x24, 0x00, 0x8F, 0x03, 0x03, 0x09, 0x00, 0x00, 0x6D, 0x08, 0x09, 0x00, +/* 000186F0 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x09, 0x5A, 0x01, 0x03, 0x00, 0x00, 0x5A, 0x02, 0x04, 0x00, 0x00, +/* 00018700 */ 0xF4, 0x03, 0xFF, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x03, 0x03, 0x09, 0x00, 0x00, +/* 00018710 */ 0x6D, 0x08, 0x09, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x09, 0x5A, 0x01, 0x05, 0x01, 0x00, 0xF4, +/* 00018720 */ 0x02, 0x08, 0x08, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, 0x06, 0x08, 0xA8, 0x08, 0x14, 0x08, +/* 00018730 */ 0x00, 0x06, 0x08, 0x5F, 0x08, 0x06, 0x02, 0x0F, 0x24, 0x00, 0x08, 0x8F, 0x03, 0x03, 0x09, 0x00, +/* 00018740 */ 0x00, 0x6D, 0x08, 0x09, 0x03, 0x07, 0x03, 0x00, 0x59, 0x00, 0x09, 0x5A, 0x01, 0x03, 0x02, 0x00, +/* 00018750 */ 0x5A, 0x02, 0x04, 0x02, 0x00, 0xF4, 0x03, 0xFF, 0x08, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x5F, +/* 00018760 */ 0x00, 0x06, 0x04, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB6, 0x02, 0xFE, 0x05, 0x02, +/* 00018770 */ 0xFE, 0x06, 0x04, 0xFE, 0xB6, 0x02, 0xFE, 0x08, 0x04, 0xFE, 0xA6, 0xB1, 0x07, 0x04, 0x00, 0x00, +/* 00018780 */ 0x00, 0x0B, 0x00, 0x30, 0x00, 0x24, 0x00, 0x65, 0x00, 0x22, 0x00, 0x41, 0x00, 0x0F, 0x00, 0x57, +/* 00018790 */ 0x00, 0x24, 0x00, 0x65, 0x00, 0x09, 0x00, 0x2A, 0x00, 0x00, 0x7F, 0x5C, 0x18, 0xC1, 0x03, 0x10, +/* 000187A0 */ 0x03, 0x00, 0xFE, 0xDE, 0x03, 0x51, 0xA0, 0x41, 0xC3, 0x00, 0xFE, 0xEE, 0x03, 0x48, 0xFE, 0x22, +/* 000187B0 */ 0xAD, 0xFE, 0x22, 0xAD, 0x09, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFE, 0x22, 0xAD, 0xFE, 0x4A, 0x03, +/* 000187C0 */ 0xFE, 0x4A, 0x03, 0x06, 0x0D, 0x11, 0x04, 0x33, 0x31, 0x03, 0x04, 0x01, 0x02, 0x04, 0x04, 0x04, +/* 000187D0 */ 0x04, 0x10, 0x06, 0xFE, 0x94, 0x03, 0x05, 0xFE, 0x0A, 0x04, 0x06, 0xFE, 0x2E, 0x03, 0x06, 0xFE, +/* 000187E0 */ 0xD7, 0x03, 0x06, 0xFE, 0xF2, 0x03, 0x06, 0xFE, 0xFE, 0x03, 0x06, 0xFE, 0x03, 0x04, 0x06, 0xFE, +/* 000187F0 */ 0x05, 0x04, 0x06, 0xFE, 0xF8, 0x03, 0x06, 0xFE, 0xF9, 0x03, 0x08, 0xD3, 0x58, 0x0D, 0x4E, 0x0E, +/* 00018800 */ 0x4E, 0x0F, 0x2A, 0x11, 0x0D, 0x15, 0x03, 0x00, 0x11, 0x02, 0x09, 0x24, 0x00, 0x8F, 0x03, 0x03, +/* 00018810 */ 0x12, 0x00, 0x00, 0x6D, 0x11, 0x12, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x12, 0x5A, 0x01, 0x03, +/* 00018820 */ 0x00, 0x00, 0x5A, 0x02, 0x04, 0x00, 0x00, 0xF4, 0x03, 0xFF, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00018830 */ 0x00, 0x8F, 0x03, 0x03, 0x12, 0x00, 0x00, 0x6D, 0x11, 0x12, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 00018840 */ 0x12, 0x5A, 0x01, 0x0D, 0x01, 0x00, 0xF4, 0x02, 0x11, 0x11, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, +/* 00018850 */ 0x45, 0x0E, 0x11, 0xA8, 0x11, 0x14, 0x08, 0x00, 0x0E, 0x11, 0x5F, 0x11, 0x0E, 0x02, 0x0F, 0x24, +/* 00018860 */ 0x00, 0x11, 0x8F, 0x03, 0x03, 0x12, 0x00, 0x00, 0x6D, 0x11, 0x12, 0x03, 0x07, 0x03, 0x00, 0x59, +/* 00018870 */ 0x00, 0x12, 0x5A, 0x01, 0x03, 0x02, 0x00, 0x5A, 0x02, 0x04, 0x02, 0x00, 0xF4, 0x03, 0xFF, 0x11, +/* 00018880 */ 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0xD0, 0x11, 0x07, 0x00, 0x00, 0xA1, 0x00, 0x05, 0x11, 0xA1, +/* 00018890 */ 0x01, 0x06, 0x11, 0xA1, 0x02, 0x07, 0x11, 0xA1, 0x03, 0x08, 0x11, 0xA1, 0x04, 0x09, 0x11, 0xA1, +/* 000188A0 */ 0x05, 0x0A, 0x11, 0xA1, 0x06, 0x0B, 0x11, 0x45, 0x0F, 0x11, 0x8F, 0x02, 0x17, 0x11, 0x01, 0x00, +/* 000188B0 */ 0x4A, 0x11, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0C, 0x5A, 0x01, 0x0F, 0x03, 0x00, 0x5A, 0x02, 0x0E, +/* 000188C0 */ 0x03, 0x00, 0xF0, 0x03, 0x00, 0x11, 0x03, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, +/* 000188D0 */ 0xB6, 0x02, 0xFE, 0x05, 0x02, 0xFE, 0x06, 0x04, 0xFE, 0xB6, 0x02, 0xFE, 0x4F, 0xAD, 0x08, 0x06, +/* 000188E0 */ 0x00, 0x00, 0x00, 0x0B, 0x00, 0x34, 0x00, 0x24, 0x00, 0x74, 0x00, 0x22, 0x00, 0x45, 0x00, 0x0F, +/* 000188F0 */ 0x00, 0x5B, 0x00, 0x24, 0x00, 0x75, 0x00, 0x24, 0x00, 0x1E, 0x01, 0x23, 0x00, 0x41, 0x00, 0x00, +/* 00018900 */ 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0xC6, 0x03, 0x5A, 0xA2, 0x41, 0xC3, 0x00, +/* 00018910 */ 0xFE, 0x38, 0x03, 0x47, 0xFE, 0x8A, 0xA9, 0xFE, 0x8A, 0xA9, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x02, +/* 00018920 */ 0xFE, 0x8A, 0xA9, 0xB8, 0xB8, 0x05, 0x03, 0x06, 0x08, 0x17, 0x16, 0x03, 0x02, 0x03, 0x01, 0x01, +/* 00018930 */ 0x01, 0x01, 0x05, 0x08, 0x57, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA8, 0x06, 0x45, 0x04, 0x06, 0x8F, +/* 00018940 */ 0x02, 0x16, 0x06, 0x00, 0x00, 0x4A, 0x06, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x8F, 0x03, 0x03, +/* 00018950 */ 0x07, 0x01, 0x00, 0x5F, 0x07, 0x07, 0x00, 0x5A, 0x01, 0x07, 0x00, 0x00, 0x8F, 0x02, 0x12, 0x07, +/* 00018960 */ 0x02, 0x00, 0x4A, 0x07, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x03, 0x01, 0x00, 0xF0, +/* 00018970 */ 0x02, 0x07, 0x07, 0x01, 0x00, 0x5A, 0x02, 0x07, 0x00, 0x00, 0x5A, 0x03, 0x04, 0x00, 0x00, 0xF0, +/* 00018980 */ 0x04, 0x00, 0x06, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xF0, 0x01, 0xFE, +/* 00018990 */ 0xAF, 0xA9, 0x03, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x23, 0x00, 0x4B, 0x00, 0x6F, 0x00, 0x00, +/* 000189A0 */ 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0xB9, 0x03, 0x4E, 0xA2, 0x41, 0xC3, 0x00, +/* 000189B0 */ 0xFE, 0xF1, 0x03, 0x46, 0xFE, 0xFC, 0xA6, 0xFE, 0xFC, 0xA6, 0x09, 0xFE, 0x00, 0x90, 0x03, 0x03, +/* 000189C0 */ 0xFE, 0xFC, 0xA6, 0xFE, 0x30, 0x02, 0xFE, 0x30, 0x02, 0x08, 0x07, 0x0C, 0x09, 0x35, 0x34, 0x03, +/* 000189D0 */ 0x06, 0x02, 0x05, 0x05, 0x05, 0x05, 0x0B, 0x06, 0xFE, 0x94, 0x03, 0x05, 0xFE, 0x09, 0x04, 0x06, +/* 000189E0 */ 0xFE, 0x2E, 0x03, 0x08, 0x0C, 0xEB, 0x58, 0x09, 0x4E, 0x0A, 0x2A, 0x0C, 0x09, 0x15, 0x03, 0x00, +/* 000189F0 */ 0x0C, 0x02, 0x09, 0x24, 0x00, 0x8F, 0x03, 0x03, 0x0D, 0x00, 0x00, 0x6D, 0x0C, 0x0D, 0x00, 0x07, +/* 00018A00 */ 0x03, 0x00, 0x59, 0x00, 0x0D, 0x5A, 0x01, 0x03, 0x00, 0x00, 0x5A, 0x02, 0x04, 0x00, 0x00, 0xF4, +/* 00018A10 */ 0x03, 0xFF, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x03, 0x03, 0x0D, 0x00, 0x00, 0x6D, +/* 00018A20 */ 0x0C, 0x0D, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0D, 0x5A, 0x01, 0x09, 0x01, 0x00, 0xF4, 0x02, +/* 00018A30 */ 0x0C, 0x0C, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, 0x0A, 0x0C, 0xA8, 0x0C, 0x14, 0x08, 0x00, +/* 00018A40 */ 0x0A, 0x0C, 0x5F, 0x0C, 0x0A, 0x02, 0x0F, 0x24, 0x00, 0x0C, 0x8F, 0x03, 0x03, 0x0D, 0x00, 0x00, +/* 00018A50 */ 0x6D, 0x0C, 0x0D, 0x03, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0D, 0x5A, 0x01, 0x03, 0x02, 0x00, 0x5A, +/* 00018A60 */ 0x02, 0x04, 0x02, 0x00, 0xF4, 0x03, 0xFF, 0x0C, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x8F, 0x03, +/* 00018A70 */ 0x03, 0x0D, 0x00, 0x00, 0x6D, 0x0C, 0x0D, 0x04, 0x07, 0x05, 0x00, 0x59, 0x00, 0x0D, 0x8F, 0x03, +/* 00018A80 */ 0x0C, 0x0E, 0x01, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x05, 0x5A, 0x01, 0x07, 0x04, 0x00, 0xF0, +/* 00018A90 */ 0x02, 0x0E, 0x0E, 0x04, 0x00, 0x5A, 0x01, 0x0E, 0x03, 0x00, 0x8F, 0x03, 0x0C, 0x0E, 0x01, 0x00, +/* 00018AA0 */ 0x07, 0x02, 0x00, 0x59, 0x00, 0x05, 0x5A, 0x01, 0x08, 0x05, 0x00, 0xF0, 0x02, 0x0E, 0x0E, 0x05, +/* 00018AB0 */ 0x00, 0x5A, 0x02, 0x0E, 0x03, 0x00, 0x5A, 0x03, 0x0A, 0x03, 0x00, 0x5A, 0x04, 0x06, 0x03, 0x00, +/* 00018AC0 */ 0xF4, 0x05, 0x00, 0x0C, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, +/* 00018AD0 */ 0x00, 0xFE, 0xB6, 0x02, 0xFE, 0x05, 0x02, 0xFE, 0x06, 0x04, 0xFE, 0xB6, 0x02, 0xFE, 0x01, 0x02, +/* 00018AE0 */ 0xFE, 0x21, 0xA7, 0x07, 0x04, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x30, 0x00, 0x24, 0x00, 0x65, 0x00, +/* 00018AF0 */ 0x22, 0x00, 0x41, 0x00, 0x0F, 0x00, 0x57, 0x00, 0x24, 0x00, 0x65, 0x00, 0x61, 0x00, 0x78, 0x00, +/* 00018B00 */ 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0xA6, 0x03, 0x3C, 0xA2, 0x41, 0xD1, +/* 00018B10 */ 0x00, 0x45, 0xFE, 0xA7, 0xA3, 0xFE, 0xA7, 0xA3, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x01, 0xFE, 0xA7, +/* 00018B20 */ 0xA3, 0xFE, 0x03, 0x03, 0xFE, 0x03, 0x03, 0x0B, 0x03, 0x0A, 0x05, 0x53, 0x4A, 0x03, 0x06, 0x07, +/* 00018B30 */ 0x06, 0x06, 0x06, 0x06, 0x09, 0x08, 0xFE, 0x45, 0x01, 0x01, 0x5D, 0x01, 0x05, 0x4E, 0x06, 0x4E, +/* 00018B40 */ 0x07, 0x4E, 0x08, 0x15, 0x05, 0x00, 0x03, 0x02, 0xA8, 0x0A, 0x45, 0x03, 0x0A, 0x15, 0x05, 0x00, +/* 00018B50 */ 0x04, 0x02, 0xA8, 0x0A, 0x45, 0x04, 0x0A, 0x4E, 0x06, 0x4E, 0x07, 0x4E, 0x08, 0xA8, 0x0A, 0x14, +/* 00018B60 */ 0x03, 0x00, 0x05, 0x0A, 0x09, 0x0E, 0x00, 0x8F, 0x01, 0x05, 0x0B, 0x00, 0x00, 0x4A, 0x0B, 0x45, +/* 00018B70 */ 0x0A, 0x0B, 0x09, 0x03, 0x00, 0x46, 0x0A, 0x05, 0x45, 0x06, 0x0A, 0x8F, 0x02, 0x07, 0x0A, 0x01, +/* 00018B80 */ 0x00, 0x4A, 0x0A, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x06, 0x00, 0x00, 0x8F, 0x01, +/* 00018B90 */ 0x04, 0x0B, 0x02, 0x00, 0x4A, 0x0B, 0x5A, 0x02, 0x0B, 0x00, 0x00, 0xF0, 0x03, 0x0A, 0x0A, 0x00, +/* 00018BA0 */ 0x00, 0x45, 0x07, 0x0A, 0x8F, 0x03, 0x03, 0x0B, 0x03, 0x00, 0x6D, 0x0A, 0x0B, 0x00, 0x07, 0x02, +/* 00018BB0 */ 0x00, 0x59, 0x00, 0x0B, 0x5A, 0x01, 0x07, 0x01, 0x00, 0xF4, 0x02, 0x0A, 0x0A, 0x00, 0x00, 0x00, +/* 00018BC0 */ 0x00, 0x01, 0x00, 0x45, 0x08, 0x0A, 0xA8, 0x0A, 0x14, 0x03, 0x00, 0x08, 0x0A, 0x09, 0x43, 0x00, +/* 00018BD0 */ 0x8F, 0x03, 0x36, 0x0B, 0x04, 0x00, 0x4A, 0x0B, 0x6D, 0x0A, 0x0B, 0x01, 0x07, 0x01, 0x00, 0x59, +/* 00018BE0 */ 0x00, 0x0B, 0xF4, 0x01, 0x0A, 0x0A, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x45, 0x08, 0x0A, 0x8F, +/* 00018BF0 */ 0x03, 0x03, 0x0B, 0x03, 0x00, 0x6D, 0x0A, 0x0B, 0x02, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0B, 0x5A, +/* 00018C00 */ 0x01, 0x07, 0x03, 0x00, 0x5A, 0x02, 0x08, 0x03, 0x00, 0xF4, 0x03, 0xFF, 0x0A, 0x02, 0x00, 0x00, +/* 00018C10 */ 0x00, 0x03, 0x00, 0x8F, 0x01, 0x02, 0x0A, 0x05, 0x00, 0x4A, 0x0A, 0x07, 0x04, 0x00, 0x59, 0x00, +/* 00018C20 */ 0x02, 0x5A, 0x01, 0x08, 0x04, 0x00, 0x5A, 0x02, 0x03, 0x04, 0x00, 0x5A, 0x03, 0x04, 0x04, 0x00, +/* 00018C30 */ 0xF0, 0x04, 0xFF, 0x0A, 0x04, 0x00, 0x45, 0x0A, 0x08, 0x8F, 0x03, 0x36, 0x0C, 0x04, 0x00, 0x4A, +/* 00018C40 */ 0x0C, 0x6D, 0x0B, 0x0C, 0x03, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0C, 0x8F, 0x01, 0x06, 0x0D, 0x06, +/* 00018C50 */ 0x00, 0x4A, 0x0D, 0x5A, 0x01, 0x0D, 0x05, 0x00, 0x5A, 0x02, 0x07, 0x05, 0x00, 0xF4, 0x03, 0x0B, +/* 00018C60 */ 0x0B, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x77, 0x0B, 0x0A, 0x04, 0x5F, 0x0A, 0x08, 0x05, 0x82, +/* 00018C70 */ 0x0A, 0x0A, 0x06, 0x01, 0x45, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x05, +/* 00018C80 */ 0x02, 0x69, 0xFE, 0x06, 0x02, 0x54, 0xFE, 0x08, 0x04, 0xFE, 0x08, 0x04, 0xFE, 0xB1, 0xA3, 0x0D, +/* 00018C90 */ 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x10, 0x00, 0x23, 0x00, 0x1E, 0x00, 0x50, 0x00, +/* 00018CA0 */ 0x29, 0x00, 0x8E, 0x00, 0x22, 0x00, 0x43, 0x00, 0x0A, 0x00, 0x32, 0x00, 0x1F, 0x00, 0x2B, 0x00, +/* 00018CB0 */ 0x24, 0x00, 0x4D, 0x00, 0x23, 0x00, 0x66, 0x00, 0x35, 0x00, 0x43, 0x00, 0x09, 0x00, 0x33, 0x00, +/* 00018CC0 */ 0x08, 0x00, 0x19, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x85, 0x03, +/* 00018CD0 */ 0x5E, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x07, 0x04, 0x44, 0xFE, 0xD5, 0x9D, 0xFE, 0xD5, 0x9D, 0x09, +/* 00018CE0 */ 0xFE, 0x00, 0x90, 0x04, 0x02, 0xFE, 0xD5, 0x9D, 0xFE, 0x94, 0x04, 0xFE, 0x94, 0x04, 0x0A, 0x06, +/* 00018CF0 */ 0x0E, 0x06, 0x63, 0x5C, 0x03, 0x08, 0x05, 0x04, 0x04, 0x04, 0x04, 0x0D, 0x08, 0x07, 0x05, 0xFE, +/* 00018D00 */ 0xE9, 0x03, 0x0B, 0xFE, 0x85, 0x01, 0x58, 0x09, 0x4E, 0x0A, 0x4E, 0x0B, 0x4E, 0x0C, 0x15, 0x05, +/* 00018D10 */ 0x00, 0x07, 0x02, 0xA8, 0x0E, 0x45, 0x07, 0x0E, 0x15, 0x05, 0x00, 0x08, 0x02, 0xA8, 0x0E, 0x45, +/* 00018D20 */ 0x08, 0x0E, 0x4E, 0x0A, 0x4E, 0x0B, 0x4E, 0x0C, 0xA8, 0x0E, 0x14, 0x08, 0x00, 0x09, 0x0E, 0x14, +/* 00018D30 */ 0x03, 0x00, 0x09, 0x03, 0x09, 0x1F, 0x00, 0x8F, 0x03, 0x03, 0x0F, 0x00, 0x00, 0x6D, 0x0E, 0x0F, +/* 00018D40 */ 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0F, 0x5A, 0x01, 0x04, 0x00, 0x00, 0xF4, 0x02, 0xFF, 0x0E, +/* 00018D50 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x03, 0x0C, 0x0E, 0x01, 0x00, 0x07, 0x02, 0x00, 0x59, +/* 00018D60 */ 0x00, 0x02, 0x5A, 0x01, 0x09, 0x01, 0x00, 0xF0, 0x02, 0x0E, 0x0E, 0x01, 0x00, 0x45, 0x0A, 0x0E, +/* 00018D70 */ 0x8F, 0x03, 0x0C, 0x0E, 0x01, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x06, 0x02, +/* 00018D80 */ 0x00, 0xF0, 0x02, 0x0E, 0x0E, 0x02, 0x00, 0x45, 0x0B, 0x0E, 0xA8, 0x0E, 0x45, 0x0C, 0x0E, 0xA8, +/* 00018D90 */ 0x0E, 0x14, 0x03, 0x00, 0x07, 0x0E, 0x09, 0x7B, 0x00, 0xA8, 0x0E, 0x14, 0x03, 0x00, 0x08, 0x0E, +/* 00018DA0 */ 0x09, 0x71, 0x00, 0x8F, 0x01, 0x03, 0x0E, 0x02, 0x00, 0x4A, 0x0E, 0xA8, 0x0F, 0x14, 0x03, 0x00, +/* 00018DB0 */ 0x0E, 0x0F, 0x09, 0x51, 0x00, 0x8F, 0x03, 0x36, 0x0F, 0x03, 0x00, 0x4A, 0x0F, 0x6D, 0x0E, 0x0F, +/* 00018DC0 */ 0x01, 0x07, 0x01, 0x00, 0x59, 0x00, 0x0F, 0xF4, 0x01, 0x0E, 0x0E, 0x01, 0x00, 0x00, 0x00, 0x03, +/* 00018DD0 */ 0x00, 0x01, 0x43, 0x01, 0x01, 0x03, 0x0E, 0x8F, 0x01, 0x02, 0x0E, 0x04, 0x00, 0x4A, 0x0E, 0x07, +/* 00018DE0 */ 0x04, 0x00, 0x59, 0x00, 0x02, 0x8F, 0x01, 0x03, 0x0F, 0x02, 0x00, 0x4A, 0x0F, 0x5A, 0x01, 0x0F, +/* 00018DF0 */ 0x04, 0x00, 0xA8, 0x0F, 0x5A, 0x02, 0x0F, 0x04, 0x00, 0xA8, 0x0F, 0x5A, 0x03, 0x0F, 0x04, 0x00, +/* 00018E00 */ 0xF0, 0x04, 0xFF, 0x0E, 0x04, 0x00, 0x8F, 0x01, 0x03, 0x0E, 0x02, 0x00, 0x4A, 0x0E, 0x45, 0x0C, +/* 00018E10 */ 0x0E, 0x09, 0x42, 0x00, 0x8F, 0x03, 0x36, 0x0F, 0x03, 0x00, 0x4A, 0x0F, 0x6D, 0x0E, 0x0F, 0x02, +/* 00018E20 */ 0x07, 0x01, 0x00, 0x59, 0x00, 0x0F, 0xF4, 0x01, 0x0E, 0x0E, 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, +/* 00018E30 */ 0x45, 0x0C, 0x0E, 0x8F, 0x01, 0x02, 0x0E, 0x04, 0x00, 0x4A, 0x0E, 0x07, 0x04, 0x00, 0x59, 0x00, +/* 00018E40 */ 0x02, 0x5A, 0x01, 0x0C, 0x06, 0x00, 0x5A, 0x02, 0x07, 0x06, 0x00, 0x5A, 0x03, 0x08, 0x06, 0x00, +/* 00018E50 */ 0xF0, 0x04, 0xFF, 0x0E, 0x06, 0x00, 0x8F, 0x03, 0x03, 0x0F, 0x00, 0x00, 0x6D, 0x0E, 0x0F, 0x03, +/* 00018E60 */ 0x07, 0x05, 0x00, 0x59, 0x00, 0x0F, 0x5A, 0x01, 0x0A, 0x07, 0x00, 0x5A, 0x02, 0x0B, 0x07, 0x00, +/* 00018E70 */ 0x5A, 0x03, 0x0C, 0x07, 0x00, 0x5A, 0x04, 0x05, 0x07, 0x00, 0xF4, 0x05, 0x00, 0x0E, 0x03, 0x00, +/* 00018E80 */ 0x00, 0x00, 0x07, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB0, 0x02, 0x69, 0x69, +/* 00018E90 */ 0xFE, 0x01, 0x02, 0xFE, 0xF2, 0x9D, 0x10, 0x08, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x10, +/* 00018EA0 */ 0x00, 0x23, 0x00, 0x0F, 0x00, 0x3B, 0x00, 0x1F, 0x00, 0x61, 0x00, 0x1A, 0x00, 0x2A, 0x00, 0x1A, +/* 00018EB0 */ 0x00, 0xFE, 0x00, 0x05, 0x00, 0x1D, 0x00, 0x14, 0x00, 0x46, 0x00, 0x12, 0x00, 0x41, 0x00, 0x22, +/* 00018EC0 */ 0x00, 0x3A, 0x00, 0x2F, 0x00, 0x66, 0x00, 0x0E, 0x00, 0x4C, 0x00, 0x1F, 0x00, 0x2A, 0x00, 0x23, +/* 00018ED0 */ 0x00, 0x4E, 0x00, 0x33, 0x00, 0x72, 0x00, 0x00, 0x7F, 0x5C, 0x1A, 0xC1, 0x03, 0x10, 0x03, 0x00, +/* 00018EE0 */ 0xFE, 0x5B, 0x03, 0x23, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xE5, 0x03, 0x43, 0xFE, 0x9F, 0x92, 0xFE, +/* 00018EF0 */ 0x9F, 0x92, 0x01, 0xFE, 0x00, 0x90, 0x04, 0x04, 0xFE, 0x9F, 0x92, 0xFE, 0x62, 0x0A, 0xFE, 0x62, +/* 00018F00 */ 0x0A, 0x0C, 0x1E, 0x27, 0x07, 0xC9, 0xB9, 0x03, 0x02, 0x0C, 0x06, 0x06, 0x1D, 0x1D, 0x1D, 0x1D, +/* 00018F10 */ 0x26, 0x08, 0x06, 0xFE, 0xF2, 0x03, 0x06, 0xFE, 0xA3, 0x03, 0x06, 0xFE, 0xF3, 0x03, 0x06, 0xFE, +/* 00018F20 */ 0xF4, 0x03, 0x06, 0xFE, 0xF5, 0x03, 0x06, 0xFE, 0xF6, 0x03, 0x06, 0xFE, 0xF7, 0x03, 0x06, 0xFE, +/* 00018F30 */ 0xE0, 0x03, 0x05, 0xFE, 0x9C, 0x03, 0x05, 0xFE, 0xDF, 0x03, 0x06, 0xFE, 0xF8, 0x03, 0x06, 0xFE, +/* 00018F40 */ 0xA2, 0x03, 0x06, 0xFE, 0xF9, 0x03, 0x06, 0xFE, 0xFA, 0x03, 0x06, 0xFE, 0xFB, 0x03, 0x06, 0xFE, +/* 00018F50 */ 0xFC, 0x03, 0x07, 0x06, 0xFE, 0xFD, 0x03, 0x06, 0xFE, 0xA1, 0x03, 0x06, 0xFE, 0xFE, 0x03, 0x06, +/* 00018F60 */ 0xFE, 0xFF, 0x03, 0x06, 0xFE, 0x00, 0x04, 0x06, 0xFE, 0x01, 0x04, 0x06, 0xFE, 0x02, 0x04, 0x06, +/* 00018F70 */ 0xFE, 0x03, 0x04, 0x0C, 0x0B, 0xFE, 0x35, 0x03, 0x4E, 0x21, 0x4E, 0x22, 0x4E, 0x23, 0x4E, 0x24, +/* 00018F80 */ 0x4E, 0x25, 0x8F, 0x02, 0x12, 0x27, 0x00, 0x00, 0x4A, 0x27, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, +/* 00018F90 */ 0x5A, 0x01, 0x1F, 0x00, 0x00, 0xF0, 0x02, 0x27, 0x27, 0x00, 0x00, 0x45, 0x21, 0x27, 0xA8, 0x27, +/* 00018FA0 */ 0x14, 0x03, 0x00, 0x20, 0x27, 0x09, 0x22, 0x00, 0x8F, 0x03, 0x36, 0x29, 0x01, 0x00, 0x4A, 0x29, +/* 00018FB0 */ 0x6D, 0x28, 0x29, 0x00, 0x07, 0x01, 0x00, 0x59, 0x00, 0x29, 0xF4, 0x01, 0x28, 0x28, 0x00, 0x00, +/* 00018FC0 */ 0x00, 0x00, 0x01, 0x00, 0x45, 0x27, 0x28, 0x09, 0x22, 0x00, 0x8F, 0x03, 0x24, 0x29, 0x02, 0x00, +/* 00018FD0 */ 0x6D, 0x28, 0x29, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x29, 0x5A, 0x01, 0x20, 0x02, 0x00, 0xF4, +/* 00018FE0 */ 0x02, 0x28, 0x28, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x46, 0x27, 0x28, 0x45, 0x20, 0x27, 0x45, +/* 00018FF0 */ 0x27, 0x1E, 0x8F, 0x02, 0x02, 0x28, 0x03, 0x00, 0x4A, 0x28, 0x07, 0x06, 0x00, 0x59, 0x00, 0x02, +/* 00019000 */ 0x5A, 0x01, 0x20, 0x03, 0x00, 0x5A, 0x02, 0x03, 0x03, 0x00, 0x5A, 0x03, 0x04, 0x03, 0x00, 0xD0, +/* 00019010 */ 0x29, 0x02, 0x00, 0x00, 0xA1, 0x00, 0x05, 0x29, 0xA1, 0x01, 0x06, 0x29, 0x5A, 0x04, 0x29, 0x03, +/* 00019020 */ 0x00, 0x5A, 0x05, 0x05, 0x03, 0x00, 0xF0, 0x06, 0x28, 0x28, 0x03, 0x00, 0x77, 0x28, 0x27, 0x02, +/* 00019030 */ 0x5F, 0x27, 0x1E, 0x03, 0x14, 0x03, 0x00, 0x27, 0x05, 0x09, 0x17, 0x00, 0xD0, 0x28, 0x03, 0x01, +/* 00019040 */ 0x00, 0xA1, 0x00, 0x07, 0x28, 0xA1, 0x01, 0x08, 0x28, 0xA1, 0x02, 0x09, 0x28, 0x45, 0x27, 0x28, +/* 00019050 */ 0x09, 0x10, 0x00, 0xD0, 0x28, 0x02, 0x02, 0x00, 0xA1, 0x00, 0x08, 0x28, 0xA1, 0x01, 0x09, 0x28, +/* 00019060 */ 0x46, 0x27, 0x28, 0x45, 0x22, 0x27, 0x8F, 0x03, 0x36, 0x28, 0x01, 0x00, 0x4A, 0x28, 0x6D, 0x27, +/* 00019070 */ 0x28, 0x04, 0x07, 0x01, 0x00, 0x59, 0x00, 0x28, 0xF4, 0x01, 0x27, 0x27, 0x04, 0x00, 0x00, 0x00, +/* 00019080 */ 0x04, 0x00, 0x45, 0x23, 0x27, 0x45, 0x27, 0x23, 0x8F, 0x02, 0x02, 0x28, 0x03, 0x00, 0x4A, 0x28, +/* 00019090 */ 0x07, 0x06, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x20, 0x05, 0x00, 0x5A, 0x02, 0x0A, 0x05, 0x00, +/* 000190A0 */ 0x5A, 0x03, 0x04, 0x05, 0x00, 0xD0, 0x29, 0x02, 0x03, 0x00, 0xA1, 0x00, 0x0B, 0x29, 0xA1, 0x01, +/* 000190B0 */ 0x0C, 0x29, 0x5A, 0x04, 0x29, 0x05, 0x00, 0x5A, 0x05, 0x0C, 0x05, 0x00, 0xF0, 0x06, 0x28, 0x28, +/* 000190C0 */ 0x05, 0x00, 0x77, 0x28, 0x27, 0x05, 0x8F, 0x02, 0x02, 0x27, 0x03, 0x00, 0x4A, 0x27, 0x07, 0x06, +/* 000190D0 */ 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x20, 0x06, 0x00, 0x5A, 0x02, 0x0D, 0x06, 0x00, 0x5A, 0x03, +/* 000190E0 */ 0x0E, 0x06, 0x00, 0xA8, 0x28, 0x5A, 0x04, 0x28, 0x06, 0x00, 0xA8, 0x28, 0x5A, 0x05, 0x28, 0x06, +/* 000190F0 */ 0x00, 0xF0, 0x06, 0x27, 0x27, 0x06, 0x00, 0x45, 0x24, 0x27, 0xA8, 0x27, 0x14, 0x03, 0x00, 0x24, +/* 00019100 */ 0x27, 0x09, 0x06, 0x00, 0x45, 0x27, 0x24, 0x09, 0x22, 0x00, 0x8F, 0x03, 0x24, 0x29, 0x02, 0x00, +/* 00019110 */ 0x6D, 0x28, 0x29, 0x06, 0x07, 0x02, 0x00, 0x59, 0x00, 0x29, 0x5A, 0x01, 0x24, 0x07, 0x00, 0xF4, +/* 00019120 */ 0x02, 0x28, 0x28, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x46, 0x27, 0x28, 0x77, 0x27, 0x23, 0x07, +/* 00019130 */ 0x45, 0x27, 0x23, 0x8F, 0x02, 0x02, 0x28, 0x03, 0x00, 0x4A, 0x28, 0x07, 0x06, 0x00, 0x59, 0x00, +/* 00019140 */ 0x02, 0x5A, 0x01, 0x20, 0x08, 0x00, 0x5A, 0x02, 0x0F, 0x08, 0x00, 0x5A, 0x03, 0x04, 0x08, 0x00, +/* 00019150 */ 0xD0, 0x29, 0x03, 0x04, 0x00, 0xA1, 0x00, 0x10, 0x29, 0xA1, 0x01, 0x11, 0x29, 0xA1, 0x02, 0x12, +/* 00019160 */ 0x29, 0x5A, 0x04, 0x29, 0x08, 0x00, 0xA8, 0x29, 0x5A, 0x05, 0x29, 0x08, 0x00, 0xF0, 0x06, 0x28, +/* 00019170 */ 0x28, 0x08, 0x00, 0x77, 0x28, 0x27, 0x08, 0x8F, 0x02, 0x0C, 0x27, 0x04, 0x00, 0x4A, 0x27, 0x07, +/* 00019180 */ 0x05, 0x00, 0x59, 0x00, 0x02, 0x8F, 0x03, 0x03, 0x28, 0x05, 0x00, 0x5F, 0x28, 0x28, 0x09, 0x5A, +/* 00019190 */ 0x01, 0x28, 0x09, 0x00, 0x5A, 0x02, 0x21, 0x09, 0x00, 0x5A, 0x03, 0x23, 0x09, 0x00, 0x5A, 0x04, +/* 000191A0 */ 0x22, 0x09, 0x00, 0xF0, 0x05, 0x27, 0x27, 0x09, 0x00, 0x45, 0x25, 0x27, 0x5F, 0x27, 0x25, 0x0A, +/* 000191B0 */ 0x77, 0x27, 0x1E, 0x0B, 0x5F, 0x27, 0x25, 0x0C, 0x14, 0x0E, 0x00, 0x27, 0x13, 0x5F, 0x27, 0x25, +/* 000191C0 */ 0x0D, 0xA8, 0x28, 0x14, 0x03, 0x00, 0x27, 0x28, 0x09, 0x06, 0x00, 0x45, 0x27, 0x14, 0x09, 0x07, +/* 000191D0 */ 0x00, 0x5F, 0x28, 0x25, 0x0E, 0x46, 0x27, 0x28, 0x77, 0x27, 0x1E, 0x0F, 0x5F, 0x27, 0x25, 0x10, +/* 000191E0 */ 0x41, 0x27, 0x27, 0x15, 0x77, 0x27, 0x1E, 0x11, 0x5F, 0x27, 0x25, 0x12, 0x77, 0x27, 0x1E, 0x13, +/* 000191F0 */ 0x8F, 0x03, 0x03, 0x27, 0x05, 0x00, 0x5F, 0x27, 0x27, 0x14, 0x5F, 0x28, 0x1E, 0x15, 0x98, 0x27, +/* 00019200 */ 0x27, 0x28, 0x00, 0x00, 0x77, 0x27, 0x1E, 0x16, 0x45, 0x27, 0x1E, 0x8F, 0x02, 0x02, 0x28, 0x03, +/* 00019210 */ 0x00, 0x4A, 0x28, 0x07, 0x06, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x20, 0x0A, 0x00, 0x5A, 0x02, +/* 00019220 */ 0x16, 0x0A, 0x00, 0x5A, 0x03, 0x04, 0x0A, 0x00, 0xD0, 0x29, 0x04, 0x05, 0x00, 0xA1, 0x00, 0x17, +/* 00019230 */ 0x29, 0xA1, 0x01, 0x18, 0x29, 0xA1, 0x02, 0x19, 0x29, 0xA1, 0x03, 0x1A, 0x29, 0x5A, 0x04, 0x29, +/* 00019240 */ 0x0A, 0x00, 0x5A, 0x05, 0x1A, 0x0A, 0x00, 0xF0, 0x06, 0x28, 0x28, 0x0A, 0x00, 0x77, 0x28, 0x27, +/* 00019250 */ 0x17, 0x8F, 0x03, 0x03, 0x27, 0x05, 0x00, 0x5F, 0x27, 0x27, 0x18, 0x5F, 0x28, 0x1E, 0x19, 0x98, +/* 00019260 */ 0x27, 0x27, 0x28, 0x01, 0x00, 0x77, 0x27, 0x1E, 0x1A, 0x45, 0x27, 0x1E, 0x8F, 0x02, 0x02, 0x28, +/* 00019270 */ 0x03, 0x00, 0x4A, 0x28, 0x07, 0x06, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x20, 0x0B, 0x00, 0x5A, +/* 00019280 */ 0x02, 0x1B, 0x0B, 0x00, 0x5A, 0x03, 0x0E, 0x0B, 0x00, 0xA8, 0x29, 0x5A, 0x04, 0x29, 0x0B, 0x00, +/* 00019290 */ 0x5A, 0x05, 0x1C, 0x0B, 0x00, 0xF0, 0x06, 0x28, 0x28, 0x0B, 0x00, 0x77, 0x28, 0x27, 0x1B, 0x77, +/* 000192A0 */ 0x1D, 0x1E, 0x1C, 0x45, 0x00, 0x1E, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x69, 0xFE, 0x21, +/* 000192B0 */ 0x03, 0xFE, 0x55, 0x02, 0xFE, 0x55, 0x02, 0x69, 0xFE, 0x04, 0x04, 0xFE, 0x22, 0x03, 0xFE, 0x17, +/* 000192C0 */ 0x02, 0xFE, 0x18, 0x02, 0xFE, 0xF0, 0x01, 0xFE, 0x0D, 0x02, 0xFE, 0x0D, 0x02, 0xFE, 0x16, 0x02, +/* 000192D0 */ 0xFE, 0x16, 0x02, 0xFE, 0x16, 0x02, 0xFE, 0x05, 0x04, 0xFE, 0x17, 0x02, 0xFE, 0x51, 0x02, 0xFE, +/* 000192E0 */ 0x18, 0x02, 0xFE, 0xF9, 0x03, 0xFE, 0x28, 0x02, 0xFE, 0xF9, 0x03, 0xFE, 0x54, 0x02, 0xFE, 0x52, +/* 000192F0 */ 0x02, 0xFE, 0x27, 0x02, 0xFE, 0x52, 0x02, 0xFE, 0x53, 0x02, 0xFE, 0x50, 0x02, 0xFE, 0x06, 0x04, +/* 00019300 */ 0xFE, 0xD3, 0x92, 0x15, 0x0A, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x46, 0x00, 0x51, 0x00, 0x91, 0x03, +/* 00019310 */ 0x41, 0x00, 0x60, 0x00, 0x36, 0x00, 0x6A, 0x00, 0x1F, 0x00, 0x24, 0x00, 0x41, 0x00, 0x6D, 0x00, +/* 00019320 */ 0x34, 0x00, 0x55, 0x00, 0x36, 0x00, 0x44, 0x00, 0x47, 0x00, 0x69, 0x00, 0x35, 0x00, 0x77, 0x00, +/* 00019330 */ 0x08, 0x00, 0xE3, 0x00, 0x28, 0x00, 0x59, 0x00, 0x0C, 0x00, 0x30, 0x00, 0x08, 0x00, 0x27, 0x00, +/* 00019340 */ 0x18, 0x00, 0x56, 0x00, 0x49, 0x00, 0x82, 0x00, 0x18, 0x00, 0x5C, 0x00, 0x36, 0x00, 0x70, 0x00, +/* 00019350 */ 0x04, 0x00, 0x32, 0x00, 0x08, 0x00, 0x19, 0x00, 0x00, 0x7E, 0x5D, 0x08, 0xC1, 0x03, 0x1A, 0x0B, +/* 00019360 */ 0x00, 0xFE, 0x45, 0x03, 0x22, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x65, 0x03, 0x40, 0xFE, 0x93, 0x8F, +/* 00019370 */ 0xFE, 0x93, 0x8F, 0x01, 0xFE, 0x00, 0x90, 0x04, 0x03, 0xFE, 0x93, 0x8F, 0xFE, 0x32, 0x02, 0xFE, +/* 00019380 */ 0x32, 0x02, 0x03, 0xFE, 0xE2, 0x03, 0xFE, 0xE3, 0x03, 0xFE, 0xE4, 0x03, 0x09, 0x04, 0x0A, 0x04, +/* 00019390 */ 0x27, 0x27, 0x02, 0x03, 0x03, 0x05, 0x05, 0x05, 0x05, 0x07, 0x08, 0x09, 0x07, 0x08, 0xA0, 0x96, +/* 000193A0 */ 0x02, 0x05, 0x96, 0x03, 0x06, 0x96, 0x02, 0x05, 0x15, 0x05, 0x00, 0x06, 0x03, 0x01, 0x45, 0x01, +/* 000193B0 */ 0x03, 0x02, 0x4E, 0x0A, 0x96, 0x04, 0x0A, 0x8F, 0x02, 0x36, 0x0B, 0x00, 0x00, 0x4A, 0x0B, 0x6D, +/* 000193C0 */ 0x0A, 0x0B, 0x00, 0x07, 0x01, 0x00, 0x59, 0x00, 0x0B, 0xF4, 0x01, 0x0A, 0x0A, 0x00, 0x00, 0x00, +/* 000193D0 */ 0x00, 0x00, 0x00, 0x96, 0x04, 0x0A, 0x8F, 0x02, 0x36, 0x0B, 0x00, 0x00, 0x4A, 0x0B, 0x6D, 0x0A, +/* 000193E0 */ 0x0B, 0x01, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0B, 0x5A, 0x01, 0x04, 0x01, 0x00, 0xD6, 0x00, 0x0C, +/* 000193F0 */ 0x5A, 0x02, 0x0C, 0x01, 0x00, 0xF4, 0x03, 0xFF, 0x0A, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x8F, +/* 00019400 */ 0x02, 0x36, 0x0B, 0x00, 0x00, 0x4A, 0x0B, 0x6D, 0x0A, 0x0B, 0x02, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 00019410 */ 0x0B, 0x93, 0x04, 0x0C, 0x01, 0x00, 0x5A, 0x01, 0x0C, 0x02, 0x00, 0x8F, 0x02, 0x03, 0x0C, 0x02, +/* 00019420 */ 0x00, 0x5F, 0x0C, 0x0C, 0x03, 0x5F, 0x0C, 0x0C, 0x04, 0x5A, 0x02, 0x0C, 0x02, 0x00, 0xF4, 0x03, +/* 00019430 */ 0x00, 0x0A, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x69, +/* 00019440 */ 0x93, 0xFE, 0x9A, 0x01, 0xFE, 0x11, 0x01, 0xFE, 0x24, 0x01, 0xFE, 0xB2, 0x8F, 0x05, 0x09, 0x00, +/* 00019450 */ 0x00, 0x00, 0x0F, 0x00, 0x17, 0x00, 0x1F, 0x00, 0x25, 0x00, 0x29, 0x00, 0x94, 0x01, 0x3E, 0x00, +/* 00019460 */ 0x42, 0x00, 0x00, 0x67, 0x94, 0x01, 0x00, 0x7F, 0x5C, 0x0E, 0x01, 0x00, 0x10, 0x03, 0x00, 0xFE, +/* 00019470 */ 0x47, 0x03, 0x19, 0xA2, 0x41, 0xD1, 0x00, 0x41, 0xFE, 0xFF, 0x8F, 0xFE, 0xFF, 0x8F, 0x41, 0xFE, +/* 00019480 */ 0x00, 0x90, 0x02, 0x02, 0xFE, 0xFF, 0x8F, 0xFE, 0x77, 0x01, 0xFE, 0x77, 0x01, 0x04, 0x06, 0x08, +/* 00019490 */ 0x04, 0x1F, 0x1F, 0x03, 0x01, 0x01, 0x01, 0x03, 0x07, 0x07, 0x08, 0x0B, 0x06, 0xFE, 0xD6, 0x03, +/* 000194A0 */ 0x77, 0x8F, 0x01, 0x03, 0x08, 0x00, 0x00, 0x4A, 0x08, 0x15, 0x03, 0x00, 0x08, 0x02, 0x09, 0x33, +/* 000194B0 */ 0x00, 0x8F, 0x01, 0x03, 0x08, 0x00, 0x00, 0x4A, 0x08, 0x07, 0x03, 0x00, 0x59, 0x00, 0x03, 0x5A, +/* 000194C0 */ 0x01, 0x06, 0x00, 0x00, 0x8F, 0x01, 0x04, 0x09, 0x01, 0x00, 0x4A, 0x09, 0x5A, 0x02, 0x09, 0x00, +/* 000194D0 */ 0x00, 0xF0, 0x03, 0x08, 0x08, 0x00, 0x00, 0x14, 0x03, 0x00, 0x08, 0x04, 0x09, 0x05, 0x00, 0xA8, +/* 000194E0 */ 0x00, 0x09, 0x32, 0x00, 0x8F, 0x01, 0x02, 0x08, 0x02, 0x00, 0x4A, 0x08, 0x2B, 0x08, 0x08, 0x06, +/* 000194F0 */ 0x15, 0x03, 0x00, 0x08, 0x05, 0x09, 0x1C, 0x00, 0x8F, 0x01, 0x04, 0x08, 0x01, 0x00, 0x4A, 0x08, +/* 00019500 */ 0x8F, 0x01, 0x02, 0x09, 0x02, 0x00, 0x4A, 0x09, 0x98, 0x09, 0x09, 0x06, 0x00, 0x00, 0x9D, 0x09, +/* 00019510 */ 0x08, 0x06, 0x00, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x1D, 0x90, 0x05, 0x00, 0x00, 0x00, 0x00, +/* 00019520 */ 0x3E, 0x00, 0xB9, 0x00, 0x05, 0x00, 0x23, 0x00, 0x14, 0x00, 0x41, 0x00, 0x1E, 0x00, 0x3B, 0x00, +/* 00019530 */ 0x00, 0x7F, 0x5C, 0x08, 0x01, 0x00, 0x10, 0x03, 0x00, 0xFE, 0x32, 0x03, 0x53, 0xA2, 0x41, 0xC3, +/* 00019540 */ 0x00, 0xFE, 0x29, 0x03, 0x3F, 0xFE, 0xE0, 0x8B, 0xFE, 0xE0, 0x8B, 0x01, 0xFE, 0x00, 0x90, 0x02, +/* 00019550 */ 0x02, 0xFE, 0xE0, 0x8B, 0x65, 0x65, 0x03, 0x03, 0x05, 0x03, 0x0A, 0x0A, 0x02, 0x01, 0x01, 0x04, +/* 00019560 */ 0x08, 0x20, 0x8F, 0x01, 0x12, 0x05, 0x00, 0x00, 0x4A, 0x05, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, +/* 00019570 */ 0x5A, 0x01, 0x03, 0x00, 0x00, 0xF0, 0x02, 0x00, 0x05, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, +/* 00019580 */ 0x24, 0x00, 0xFE, 0x14, 0x8C, 0x02, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x30, 0x00, 0x00, 0x7F, +/* 00019590 */ 0x7C, 0x19, 0xC3, 0x53, 0x50, 0x53, 0x00, 0xFE, 0x1A, 0x03, 0x1D, 0xA2, 0x41, 0xC1, 0x00, 0xFE, +/* 000195A0 */ 0x64, 0x03, 0x3E, 0xFE, 0x83, 0x87, 0xFE, 0x83, 0x87, 0x01, 0xFE, 0x00, 0x90, 0x04, 0x04, 0xFE, +/* 000195B0 */ 0x83, 0x87, 0xFE, 0xE8, 0x03, 0xFE, 0xE8, 0x03, 0x0C, 0x0F, 0x16, 0x0A, 0x5E, 0x58, 0x1A, 0x02, +/* 000195C0 */ 0x01, 0x07, 0x01, 0x05, 0x01, 0x0A, 0x0A, 0x0A, 0x0A, 0x02, 0x01, 0x15, 0x16, 0xC8, 0xFE, 0x41, +/* 000195D0 */ 0x01, 0x05, 0xFE, 0xDF, 0x03, 0x06, 0xFE, 0xE0, 0x03, 0x06, 0xFE, 0xA3, 0x03, 0x05, 0xFE, 0x9C, +/* 000195E0 */ 0x03, 0x08, 0x01, 0x00, 0x01, 0x01, 0x06, 0xFE, 0x2D, 0x03, 0x0C, 0x06, 0xFE, 0x2B, 0x03, 0x07, +/* 000195F0 */ 0x06, 0xFE, 0xE1, 0x03, 0x06, 0xFE, 0x2C, 0x03, 0xFE, 0x8F, 0x01, 0x4E, 0x12, 0x4E, 0x13, 0x4E, +/* 00019600 */ 0x14, 0xA8, 0x17, 0x14, 0x03, 0x00, 0x11, 0x17, 0x09, 0x06, 0x00, 0x45, 0x17, 0x02, 0x09, 0x5C, +/* 00019610 */ 0x00, 0x8F, 0x01, 0x02, 0x18, 0x00, 0x00, 0x4A, 0x18, 0x07, 0x06, 0x00, 0x59, 0x00, 0x06, 0x8F, +/* 00019620 */ 0x02, 0x24, 0x1A, 0x01, 0x00, 0x6D, 0x19, 0x1A, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x1A, 0x5A, +/* 00019630 */ 0x01, 0x11, 0x01, 0x00, 0xF4, 0x02, 0x19, 0x19, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x5A, 0x01, +/* 00019640 */ 0x19, 0x00, 0x00, 0x5A, 0x02, 0x03, 0x00, 0x00, 0x5A, 0x03, 0x04, 0x00, 0x00, 0xD0, 0x19, 0x02, +/* 00019650 */ 0x00, 0x00, 0xA1, 0x00, 0x02, 0x19, 0xA1, 0x01, 0x05, 0x19, 0x5A, 0x04, 0x19, 0x00, 0x00, 0x5A, +/* 00019660 */ 0x05, 0x02, 0x00, 0x00, 0xF0, 0x06, 0x18, 0x18, 0x00, 0x00, 0x46, 0x17, 0x18, 0x45, 0x12, 0x17, +/* 00019670 */ 0x14, 0x03, 0x00, 0x12, 0x02, 0x09, 0x24, 0x00, 0x8F, 0x01, 0x14, 0x18, 0x02, 0x00, 0x4A, 0x18, +/* 00019680 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x06, 0x5A, 0x01, 0x0F, 0x02, 0x00, 0x5A, 0x02, 0x10, 0x02, 0x00, +/* 00019690 */ 0xF0, 0x03, 0x18, 0x18, 0x02, 0x00, 0x45, 0x17, 0x18, 0x09, 0x21, 0x00, 0x8F, 0x01, 0x13, 0x18, +/* 000196A0 */ 0x03, 0x00, 0x4A, 0x18, 0x07, 0x03, 0x00, 0x59, 0x00, 0x06, 0x5A, 0x01, 0x0F, 0x03, 0x00, 0x5A, +/* 000196B0 */ 0x02, 0x10, 0x03, 0x00, 0xF0, 0x03, 0x18, 0x18, 0x03, 0x00, 0x46, 0x17, 0x18, 0x45, 0x13, 0x17, +/* 000196C0 */ 0x45, 0x14, 0x07, 0xED, 0x00, 0xEE, 0x00, 0xA7, 0x17, 0x13, 0x01, 0x00, 0x00, 0x12, 0x03, 0x00, +/* 000196D0 */ 0x14, 0x17, 0x09, 0x65, 0x00, 0x8F, 0x02, 0x36, 0x18, 0x04, 0x00, 0x4A, 0x18, 0x6D, 0x17, 0x18, +/* 000196E0 */ 0x02, 0x07, 0x04, 0x00, 0x59, 0x00, 0x18, 0x5A, 0x01, 0x13, 0x04, 0x00, 0x8F, 0x02, 0x24, 0x1A, +/* 000196F0 */ 0x01, 0x00, 0x6D, 0x19, 0x1A, 0x03, 0x07, 0x02, 0x00, 0x59, 0x00, 0x1A, 0x5A, 0x01, 0x14, 0x05, +/* 00019700 */ 0x00, 0xF4, 0x02, 0x19, 0x19, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x5A, 0x02, 0x19, 0x04, 0x00, +/* 00019710 */ 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x7B, 0x0A, 0x19, +/* 00019720 */ 0x04, 0x7B, 0x0A, 0x19, 0x05, 0x5A, 0x03, 0x19, 0x04, 0x00, 0xF4, 0x04, 0xFF, 0x17, 0x02, 0x00, +/* 00019730 */ 0x00, 0x00, 0x04, 0x00, 0x26, 0x14, 0x14, 0x09, 0x8B, 0xFF, 0xEF, 0x00, 0x8F, 0x02, 0x36, 0x18, +/* 00019740 */ 0x04, 0x00, 0x4A, 0x18, 0x6D, 0x17, 0x18, 0x06, 0x07, 0x04, 0x00, 0x59, 0x00, 0x18, 0x5A, 0x01, +/* 00019750 */ 0x13, 0x06, 0x00, 0x5A, 0x02, 0x0D, 0x06, 0x00, 0xCE, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, +/* 00019760 */ 0x00, 0x19, 0x00, 0x00, 0x00, 0x7B, 0x0A, 0x19, 0x07, 0x7B, 0x0A, 0x19, 0x08, 0x7B, 0x0A, 0x19, +/* 00019770 */ 0x09, 0x5A, 0x03, 0x19, 0x06, 0x00, 0xF4, 0x04, 0xFF, 0x17, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, +/* 00019780 */ 0x45, 0x00, 0x13, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x02, 0x24, 0x00, 0x10, 0x00, 0x00, +/* 00019790 */ 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, +/* 000197A0 */ 0x00, 0x94, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 000197B0 */ 0x00, 0x95, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0xFE, 0x21, 0x03, 0xD1, 0xFE, 0x9C, 0x01, +/* 000197C0 */ 0xFE, 0x22, 0x03, 0xFE, 0x95, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x96, 0x01, 0xFE, +/* 000197D0 */ 0x95, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0xC5, 0x87, 0x09, 0x06, 0x00, 0x00, 0x00, 0x6F, 0x00, 0xBB, +/* 000197E0 */ 0x00, 0x50, 0x00, 0xD4, 0x00, 0x07, 0x00, 0x0B, 0x00, 0x0E, 0x00, 0x30, 0x00, 0x5F, 0x00, 0xED, +/* 000197F0 */ 0xFF, 0x08, 0x00, 0x30, 0x01, 0x44, 0x00, 0xA1, 0x00, 0x08, 0x00, 0x1D, 0x00, 0x00, 0x7F, 0x5C, +/* 00019800 */ 0x08, 0xC1, 0x13, 0x10, 0x43, 0x00, 0xFE, 0xFB, 0x02, 0x28, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x63, +/* 00019810 */ 0x03, 0x3D, 0xFE, 0x1A, 0x81, 0xFE, 0x1A, 0x81, 0x41, 0xFE, 0x00, 0x90, 0x05, 0x05, 0xFE, 0x1A, +/* 00019820 */ 0x81, 0xFE, 0xB9, 0x04, 0xFE, 0xB9, 0x04, 0x0D, 0x0D, 0x18, 0x07, 0x5B, 0x53, 0x02, 0x06, 0x02, +/* 00019830 */ 0x0A, 0x0A, 0x0A, 0x0A, 0x02, 0x17, 0x06, 0xFE, 0xDA, 0x03, 0x01, 0x01, 0x01, 0x15, 0x08, 0x06, +/* 00019840 */ 0xFE, 0xDB, 0x03, 0x01, 0x00, 0x01, 0x14, 0x06, 0xFE, 0xDC, 0x03, 0x06, 0xFE, 0xDD, 0x03, 0x07, +/* 00019850 */ 0x06, 0xFE, 0xDE, 0x03, 0xFE, 0x7E, 0x01, 0x4E, 0x11, 0x4E, 0x12, 0x4E, 0x13, 0x4E, 0x14, 0x4E, +/* 00019860 */ 0x15, 0x4E, 0x16, 0x8F, 0x01, 0x0D, 0x18, 0x00, 0x00, 0x4A, 0x18, 0x07, 0x06, 0x00, 0x59, 0x00, +/* 00019870 */ 0x05, 0x5A, 0x01, 0x0E, 0x00, 0x00, 0x5A, 0x02, 0x02, 0x00, 0x00, 0x5A, 0x03, 0x03, 0x00, 0x00, +/* 00019880 */ 0x5A, 0x04, 0x04, 0x00, 0x00, 0x5A, 0x05, 0x03, 0x00, 0x00, 0xF0, 0x06, 0x18, 0x18, 0x00, 0x00, +/* 00019890 */ 0x45, 0x11, 0x18, 0x8F, 0x01, 0x0D, 0x18, 0x00, 0x00, 0x4A, 0x18, 0x07, 0x06, 0x00, 0x59, 0x00, +/* 000198A0 */ 0x05, 0x5A, 0x01, 0x0E, 0x01, 0x00, 0x5A, 0x02, 0x06, 0x01, 0x00, 0x5A, 0x03, 0x07, 0x01, 0x00, +/* 000198B0 */ 0x5A, 0x04, 0x08, 0x01, 0x00, 0x5A, 0x05, 0x0F, 0x01, 0x00, 0xF0, 0x06, 0x18, 0x18, 0x01, 0x00, +/* 000198C0 */ 0x45, 0x12, 0x18, 0x8F, 0x02, 0x36, 0x19, 0x01, 0x00, 0x4A, 0x19, 0x6D, 0x18, 0x19, 0x00, 0x07, +/* 000198D0 */ 0x03, 0x00, 0x59, 0x00, 0x19, 0x5A, 0x01, 0x12, 0x02, 0x00, 0x5A, 0x02, 0x10, 0x02, 0x00, 0xF4, +/* 000198E0 */ 0x03, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x45, 0x13, 0x18, 0x8F, 0x01, 0x0D, 0x18, +/* 000198F0 */ 0x00, 0x00, 0x4A, 0x18, 0x07, 0x06, 0x00, 0x59, 0x00, 0x05, 0x5A, 0x01, 0x0E, 0x03, 0x00, 0x5A, +/* 00019900 */ 0x02, 0x09, 0x03, 0x00, 0x5A, 0x03, 0x12, 0x03, 0x00, 0x5A, 0x04, 0x08, 0x03, 0x00, 0x5A, 0x05, +/* 00019910 */ 0x13, 0x03, 0x00, 0xF0, 0x06, 0x18, 0x18, 0x03, 0x00, 0x45, 0x14, 0x18, 0x77, 0x11, 0x0D, 0x01, +/* 00019920 */ 0x77, 0x12, 0x0D, 0x02, 0x77, 0x14, 0x0D, 0x03, 0x5F, 0x18, 0x0E, 0x04, 0x45, 0x15, 0x18, 0x5F, +/* 00019930 */ 0x18, 0x0E, 0x05, 0x45, 0x16, 0x18, 0xA8, 0x18, 0x15, 0x0A, 0x00, 0x15, 0x18, 0xA8, 0x18, 0x15, +/* 00019940 */ 0x03, 0x00, 0x16, 0x18, 0x09, 0x8A, 0x00, 0x8F, 0x01, 0x0D, 0x18, 0x00, 0x00, 0x4A, 0x18, 0x07, +/* 00019950 */ 0x06, 0x00, 0x59, 0x00, 0x05, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, +/* 00019960 */ 0x00, 0x00, 0x7B, 0x15, 0x19, 0x06, 0x5A, 0x01, 0x19, 0x04, 0x00, 0x5A, 0x02, 0x0A, 0x04, 0x00, +/* 00019970 */ 0x5A, 0x03, 0x03, 0x04, 0x00, 0x5A, 0x04, 0x04, 0x04, 0x00, 0x5A, 0x05, 0x03, 0x04, 0x00, 0xF0, +/* 00019980 */ 0x06, 0x18, 0x18, 0x04, 0x00, 0x45, 0x15, 0x18, 0x8F, 0x01, 0x0D, 0x18, 0x00, 0x00, 0x4A, 0x18, +/* 00019990 */ 0x07, 0x06, 0x00, 0x59, 0x00, 0x05, 0xCE, 0x0C, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x19, +/* 000199A0 */ 0x00, 0x00, 0x00, 0x7B, 0x16, 0x19, 0x07, 0x5A, 0x01, 0x19, 0x05, 0x00, 0x5A, 0x02, 0x0C, 0x05, +/* 000199B0 */ 0x00, 0x5A, 0x03, 0x15, 0x05, 0x00, 0x5A, 0x04, 0x04, 0x05, 0x00, 0x5A, 0x05, 0x04, 0x05, 0x00, +/* 000199C0 */ 0xF0, 0x06, 0x18, 0x18, 0x05, 0x00, 0x45, 0x16, 0x18, 0x77, 0x15, 0x0D, 0x08, 0x77, 0x16, 0x0D, +/* 000199D0 */ 0x09, 0xA8, 0x00, 0x24, 0x00, 0x02, 0x18, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, +/* 000199E0 */ 0x00, 0x00, 0x00, 0x00, 0x45, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, +/* 000199F0 */ 0x00, 0x00, 0x00, 0x00, 0x48, 0x02, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0xFE, 0x47, 0x02, 0xFE, 0x46, +/* 00019A00 */ 0x02, 0xFE, 0x44, 0x02, 0xFE, 0x48, 0x02, 0xFE, 0x45, 0x02, 0xFE, 0x48, 0x02, 0xFE, 0x45, 0x02, +/* 00019A10 */ 0xFE, 0x48, 0x02, 0xFE, 0x45, 0x02, 0xFE, 0x5A, 0x81, 0x0F, 0x0C, 0x00, 0x00, 0x00, 0x30, 0x00, +/* 00019A20 */ 0x51, 0x00, 0x30, 0x00, 0x5C, 0x00, 0x29, 0x00, 0x3C, 0x00, 0x30, 0x00, 0x65, 0x00, 0x04, 0x00, +/* 00019A30 */ 0x2D, 0x00, 0x04, 0x00, 0x2E, 0x00, 0x04, 0x00, 0x2F, 0x00, 0x07, 0x00, 0x35, 0x00, 0x07, 0x00, +/* 00019A40 */ 0x35, 0x00, 0x11, 0x00, 0xEA, 0x00, 0x41, 0x00, 0x6E, 0x00, 0x41, 0x00, 0x72, 0x00, 0x04, 0x00, +/* 00019A50 */ 0x35, 0x00, 0x06, 0x00, 0x37, 0x00, 0x00, 0x7E, 0x5D, 0x18, 0xC1, 0x03, 0x1A, 0x0B, 0x00, 0xFE, +/* 00019A60 */ 0xDF, 0x02, 0x23, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x61, 0x03, 0x3B, 0xFE, 0x33, 0x7C, 0xFE, 0x33, +/* 00019A70 */ 0x7C, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, 0x33, 0x7C, 0xFE, 0xE2, 0x01, 0xFE, 0xE2, 0x01, +/* 00019A80 */ 0x03, 0xFE, 0xD8, 0x03, 0xFE, 0xD9, 0x03, 0xFE, 0xCF, 0x03, 0x08, 0x03, 0x08, 0x04, 0x16, 0x16, +/* 00019A90 */ 0x02, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x05, 0x06, 0x07, 0x01, 0x00, 0x4D, 0x96, 0x02, +/* 00019AA0 */ 0x03, 0x4E, 0x08, 0x96, 0x03, 0x08, 0x4E, 0x08, 0x96, 0x04, 0x08, 0xD0, 0x08, 0x00, 0x00, 0x00, +/* 00019AB0 */ 0x96, 0x03, 0x08, 0x96, 0x04, 0x02, 0x8F, 0x02, 0x36, 0x09, 0x00, 0x00, 0x4A, 0x09, 0x6D, 0x08, +/* 00019AC0 */ 0x09, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x09, 0x5A, 0x01, 0x04, 0x00, 0x00, 0xD6, 0x00, 0x0A, +/* 00019AD0 */ 0x5A, 0x02, 0x0A, 0x00, 0x00, 0xF4, 0x03, 0xFF, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x93, +/* 00019AE0 */ 0x03, 0x00, 0x01, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x93, 0xFE, 0x6C, 0x7C, 0x05, +/* 00019AF0 */ 0x0D, 0x00, 0x00, 0x00, 0x08, 0x00, 0x1B, 0x00, 0x03, 0x00, 0x13, 0x00, 0x29, 0x00, 0x67, 0x01, +/* 00019B00 */ 0x0A, 0x00, 0x13, 0x00, 0x00, 0x09, 0x9B, 0x01, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x13, 0x10, 0x43, +/* 00019B10 */ 0x00, 0xFE, 0xE2, 0x02, 0x24, 0xA2, 0x41, 0xD1, 0x00, 0x3C, 0xFE, 0xB6, 0x7C, 0xFE, 0xB6, 0x7C, +/* 00019B20 */ 0x41, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0xB6, 0x7C, 0xFE, 0x3F, 0x01, 0xFE, 0x3F, 0x01, 0x07, +/* 00019B30 */ 0x0A, 0x0D, 0x05, 0x2C, 0x2B, 0x03, 0x03, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x0C, 0x08, 0x01, +/* 00019B40 */ 0x01, 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, 0x2C, 0x03, 0x0B, 0x06, 0xFE, 0x2D, 0x03, 0x06, 0xFE, +/* 00019B50 */ 0x2B, 0x03, 0x07, 0xB9, 0x4E, 0x0B, 0x8F, 0x02, 0x0F, 0x0D, 0x00, 0x00, 0x4A, 0x0D, 0x07, 0x02, +/* 00019B60 */ 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x0A, 0x00, 0x00, 0xF0, 0x02, 0x0D, 0x0D, 0x00, 0x00, 0x5F, +/* 00019B70 */ 0x0D, 0x0D, 0x00, 0x45, 0x0B, 0x0D, 0x8F, 0x02, 0x08, 0x0D, 0x01, 0x00, 0x4A, 0x0D, 0x07, 0x03, +/* 00019B80 */ 0x00, 0x59, 0x00, 0x02, 0x8F, 0x01, 0x02, 0x0E, 0x02, 0x00, 0x5A, 0x01, 0x0E, 0x01, 0x00, 0x5A, +/* 00019B90 */ 0x02, 0x0B, 0x01, 0x00, 0xF0, 0x03, 0x0D, 0x0D, 0x01, 0x00, 0xA8, 0x0E, 0x15, 0x03, 0x00, 0x0D, +/* 00019BA0 */ 0x0E, 0x09, 0x65, 0x00, 0x8F, 0x03, 0x36, 0x0E, 0x03, 0x00, 0x4A, 0x0E, 0x6D, 0x0D, 0x0E, 0x01, +/* 00019BB0 */ 0x07, 0x04, 0x00, 0x59, 0x00, 0x0E, 0x8F, 0x01, 0x03, 0x0F, 0x04, 0x00, 0x4A, 0x0F, 0x5A, 0x01, +/* 00019BC0 */ 0x0F, 0x02, 0x00, 0x8F, 0x01, 0x04, 0x10, 0x05, 0x00, 0x4A, 0x10, 0x43, 0x0F, 0x10, 0x2D, 0x10, +/* 00019BD0 */ 0x0F, 0x03, 0x01, 0x43, 0x01, 0x01, 0x04, 0x10, 0x5A, 0x02, 0x0F, 0x02, 0x00, 0xCE, 0x00, 0x00, +/* 00019BE0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x7B, 0x0A, 0x0F, 0x02, 0x7B, 0x06, +/* 00019BF0 */ 0x0F, 0x03, 0x7B, 0x06, 0x0F, 0x04, 0x7B, 0x06, 0x0F, 0x05, 0x5A, 0x03, 0x0F, 0x02, 0x00, 0xF4, +/* 00019C00 */ 0x04, 0xFF, 0x0D, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x01, 0x18, 0x00, +/* 00019C10 */ 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, +/* 00019C20 */ 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0xFE, 0x1E, 0x02, 0xFE, +/* 00019C30 */ 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0xD6, +/* 00019C40 */ 0x7C, 0x04, 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x42, 0x00, 0x2E, 0x00, 0x60, 0x00, 0x67, 0x00, +/* 00019C50 */ 0x7C, 0x00, 0x00, 0x7F, 0x7C, 0x1B, 0xC3, 0x53, 0x50, 0x53, 0x00, 0xFE, 0xB1, 0x02, 0x23, 0xA2, +/* 00019C60 */ 0x41, 0xC1, 0x00, 0xFE, 0x60, 0x03, 0x3A, 0xFE, 0x4E, 0x75, 0xFE, 0x4E, 0x75, 0x01, 0xFE, 0x00, +/* 00019C70 */ 0x90, 0x02, 0x02, 0xFE, 0x4E, 0x75, 0xFE, 0x68, 0x05, 0xFE, 0x68, 0x05, 0x10, 0x10, 0x1B, 0x05, +/* 00019C80 */ 0x8C, 0x81, 0x5E, 0x02, 0x01, 0x02, 0x0B, 0x03, 0x04, 0x01, 0x0F, 0x0F, 0x0F, 0x0F, 0x01, 0x02, +/* 00019C90 */ 0x1A, 0x1B, 0x9A, 0xFE, 0x47, 0x02, 0x06, 0xFE, 0xD6, 0x03, 0x06, 0xFE, 0xA3, 0x03, 0x01, 0x00, +/* 00019CA0 */ 0x06, 0xFE, 0x94, 0x03, 0x07, 0x06, 0xFE, 0xD7, 0x03, 0x08, 0x01, 0xFF, 0x01, 0x01, 0x06, 0xFE, +/* 00019CB0 */ 0x2A, 0x03, 0x06, 0xFE, 0x2C, 0x03, 0x0B, 0x06, 0xFE, 0x2D, 0x03, 0x06, 0xFE, 0x2B, 0x03, 0xFE, +/* 00019CC0 */ 0x51, 0x02, 0x4E, 0x11, 0x4E, 0x12, 0x4E, 0x13, 0x4E, 0x14, 0x4E, 0x15, 0x4E, 0x16, 0x4E, 0x17, +/* 00019CD0 */ 0x4E, 0x18, 0x4E, 0x19, 0x2A, 0x1D, 0x10, 0x14, 0x03, 0x00, 0x1D, 0x02, 0x09, 0x08, 0x00, 0xD0, +/* 00019CE0 */ 0x00, 0x00, 0x00, 0x00, 0x09, 0x2A, 0x02, 0xD0, 0x1D, 0x00, 0x01, 0x00, 0x45, 0x11, 0x1D, 0x2A, +/* 00019CF0 */ 0x1D, 0x10, 0x14, 0x03, 0x00, 0x1D, 0x03, 0x09, 0x0F, 0x00, 0xD0, 0x1E, 0x01, 0x02, 0x00, 0xA1, +/* 00019D00 */ 0x00, 0x10, 0x1E, 0x45, 0x1D, 0x1E, 0x09, 0x22, 0x00, 0x8F, 0x02, 0x24, 0x1F, 0x00, 0x00, 0x6D, +/* 00019D10 */ 0x1E, 0x1F, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x1F, 0x5A, 0x01, 0x10, 0x00, 0x00, 0xF4, 0x02, +/* 00019D20 */ 0x1E, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x1D, 0x1E, 0x45, 0x12, 0x1D, 0x8F, 0x02, +/* 00019D30 */ 0x24, 0x1E, 0x00, 0x00, 0x6D, 0x1D, 0x1E, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x1E, 0xA7, 0x1F, +/* 00019D40 */ 0x12, 0x02, 0x00, 0x00, 0x5A, 0x01, 0x1F, 0x01, 0x00, 0xF4, 0x02, 0x1D, 0x1D, 0x01, 0x00, 0x00, +/* 00019D50 */ 0x00, 0x01, 0x00, 0x45, 0x13, 0x1D, 0x45, 0x14, 0x04, 0x45, 0x15, 0x04, 0xED, 0x00, 0xEE, 0x00, +/* 00019D60 */ 0x12, 0x03, 0x00, 0x14, 0x13, 0x09, 0x9F, 0x01, 0x8F, 0x02, 0x24, 0x1E, 0x00, 0x00, 0x6D, 0x1D, +/* 00019D70 */ 0x1E, 0x03, 0x07, 0x02, 0x00, 0x59, 0x00, 0x1E, 0x5A, 0x01, 0x14, 0x02, 0x00, 0xF4, 0x02, 0x1D, +/* 00019D80 */ 0x1D, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x45, 0x16, 0x1D, 0xBC, 0x1D, 0x16, 0x12, 0x00, 0x00, +/* 00019D90 */ 0x0E, 0x6C, 0x01, 0x1D, 0x98, 0x1D, 0x12, 0x16, 0x01, 0x00, 0x45, 0x17, 0x1D, 0x2A, 0x1D, 0x17, +/* 00019DA0 */ 0x15, 0x03, 0x00, 0x1D, 0x03, 0x09, 0x08, 0x00, 0x2A, 0x1D, 0x17, 0x15, 0x08, 0x00, 0x1D, 0x05, +/* 00019DB0 */ 0x14, 0x03, 0x00, 0x17, 0x06, 0x09, 0x1F, 0x00, 0x8F, 0x02, 0x03, 0x1E, 0x01, 0x00, 0x6D, 0x1D, +/* 00019DC0 */ 0x1E, 0x04, 0x07, 0x02, 0x00, 0x59, 0x00, 0x1E, 0x5A, 0x01, 0x07, 0x03, 0x00, 0xF4, 0x02, 0xFF, +/* 00019DD0 */ 0x1D, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x8F, 0x02, 0x24, 0x1E, 0x00, 0x00, 0x6D, 0x1D, 0x1E, +/* 00019DE0 */ 0x05, 0x07, 0x02, 0x00, 0x59, 0x00, 0x1E, 0x5A, 0x01, 0x17, 0x04, 0x00, 0xF4, 0x02, 0x1D, 0x1D, +/* 00019DF0 */ 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x45, 0x18, 0x1D, 0x8F, 0x01, 0x11, 0x1D, 0x02, 0x00, 0x4A, +/* 00019E00 */ 0x1D, 0x07, 0x02, 0x00, 0x59, 0x00, 0x08, 0x5A, 0x01, 0x18, 0x05, 0x00, 0xF0, 0x02, 0x1D, 0x1D, +/* 00019E10 */ 0x05, 0x00, 0x0F, 0x1F, 0x00, 0x1D, 0x8F, 0x02, 0x03, 0x1E, 0x01, 0x00, 0x6D, 0x1D, 0x1E, 0x06, +/* 00019E20 */ 0x07, 0x02, 0x00, 0x59, 0x00, 0x1E, 0x5A, 0x01, 0x18, 0x06, 0x00, 0xF4, 0x02, 0xFF, 0x1D, 0x06, +/* 00019E30 */ 0x00, 0x00, 0x00, 0x06, 0x00, 0x8F, 0x02, 0x03, 0x1E, 0x01, 0x00, 0x6D, 0x1D, 0x1E, 0x07, 0x07, +/* 00019E40 */ 0x02, 0x00, 0x59, 0x00, 0x1E, 0x5A, 0x01, 0x18, 0x07, 0x00, 0xF4, 0x02, 0x1D, 0x1D, 0x07, 0x00, +/* 00019E50 */ 0x00, 0x00, 0x07, 0x00, 0x45, 0x19, 0x1D, 0xA8, 0x1D, 0x14, 0x03, 0x00, 0x19, 0x1D, 0x09, 0x22, +/* 00019E60 */ 0x00, 0x8F, 0x02, 0x03, 0x1E, 0x01, 0x00, 0x6D, 0x1D, 0x1E, 0x08, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 00019E70 */ 0x1E, 0x5A, 0x01, 0x18, 0x08, 0x00, 0xF4, 0x02, 0xFF, 0x1D, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, +/* 00019E80 */ 0x09, 0x7D, 0x00, 0x8F, 0x02, 0x36, 0x1E, 0x03, 0x00, 0x4A, 0x1E, 0x6D, 0x1D, 0x1E, 0x09, 0x07, +/* 00019E90 */ 0x03, 0x00, 0x59, 0x00, 0x1E, 0x5A, 0x01, 0x11, 0x09, 0x00, 0x5A, 0x02, 0x19, 0x09, 0x00, 0xF4, +/* 00019EA0 */ 0x03, 0x1D, 0x1D, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x14, 0x03, 0x00, 0x1D, 0x09, 0x09, 0x4F, +/* 00019EB0 */ 0x00, 0x8F, 0x02, 0x36, 0x1E, 0x03, 0x00, 0x4A, 0x1E, 0x6D, 0x1D, 0x1E, 0x0A, 0x07, 0x04, 0x00, +/* 00019EC0 */ 0x59, 0x00, 0x1E, 0x5A, 0x01, 0x11, 0x0A, 0x00, 0x43, 0x1F, 0x15, 0x2D, 0x15, 0x1F, 0x0A, 0x5A, +/* 00019ED0 */ 0x02, 0x1F, 0x0A, 0x00, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, +/* 00019EE0 */ 0x00, 0x7B, 0x19, 0x1F, 0x0B, 0x7B, 0x0D, 0x1F, 0x0C, 0x7B, 0x0D, 0x1F, 0x0D, 0x7B, 0x0D, 0x1F, +/* 00019EF0 */ 0x0E, 0x5A, 0x03, 0x1F, 0x0A, 0x00, 0xF4, 0x04, 0xFF, 0x1D, 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x00, +/* 00019F00 */ 0x2D, 0x14, 0x14, 0x0A, 0x09, 0x57, 0xFE, 0xEF, 0x00, 0x45, 0x00, 0x11, 0x09, 0x02, 0x00, 0xA8, +/* 00019F10 */ 0x00, 0x24, 0x00, 0x01, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, +/* 00019F20 */ 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x96, 0x01, +/* 00019F30 */ 0x00, 0x00, 0xFE, 0x21, 0x03, 0xFE, 0x26, 0x03, 0xD1, 0xFE, 0x22, 0x03, 0xFE, 0xAE, 0x02, 0xFE, +/* 00019F40 */ 0x22, 0x03, 0xFE, 0xAF, 0x02, 0xFE, 0xEE, 0x01, 0xFE, 0xAF, 0x02, 0xFE, 0x0F, 0x03, 0xFE, 0x9C, +/* 00019F50 */ 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x6B, 0x75, +/* 00019F60 */ 0x18, 0x12, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x32, 0x00, 0x08, 0x00, 0x1E, 0x00, 0x08, 0x00, 0x19, +/* 00019F70 */ 0x00, 0x3F, 0x00, 0x58, 0x00, 0x28, 0x00, 0x31, 0x00, 0x03, 0x00, 0x0B, 0x00, 0x07, 0x00, 0x18, +/* 00019F80 */ 0x00, 0x08, 0x00, 0x17, 0x00, 0x22, 0x00, 0x2D, 0x00, 0x0A, 0x00, 0x1F, 0x00, 0x09, 0x00, 0x26, +/* 00019F90 */ 0x00, 0x1B, 0x00, 0x69, 0x00, 0x1F, 0x00, 0x4F, 0x00, 0x22, 0x00, 0x37, 0x00, 0x1D, 0x00, 0x40, +/* 00019FA0 */ 0x00, 0x1F, 0x00, 0x4B, 0x00, 0x22, 0x00, 0x4D, 0x00, 0x0A, 0x00, 0x96, 0x00, 0x22, 0x00, 0x3F, +/* 00019FB0 */ 0x00, 0x2E, 0x00, 0x49, 0x00, 0x4F, 0x00, 0x9B, 0x00, 0x09, 0x00, 0x1B, 0x00, 0x08, 0x00, 0x11, +/* 00019FC0 */ 0x00, 0x00, 0x7E, 0x5C, 0x09, 0xC1, 0x43, 0x50, 0x0B, 0x00, 0xFE, 0x8E, 0x02, 0x2B, 0xA2, 0x41, +/* 00019FD0 */ 0xC1, 0x00, 0xFE, 0x5F, 0x03, 0x37, 0xFE, 0xA2, 0x70, 0xFE, 0xA2, 0x70, 0x02, 0xFE, 0x00, 0x90, +/* 00019FE0 */ 0x02, 0x02, 0xFE, 0xA2, 0x70, 0xFE, 0x40, 0x03, 0xFE, 0x40, 0x03, 0x0F, 0x07, 0x0F, 0x08, 0x5B, +/* 00019FF0 */ 0x52, 0x02, 0x04, 0x07, 0x02, 0x0E, 0x0E, 0x0E, 0x0E, 0x01, 0x0E, 0x0F, 0x08, 0x07, 0x0C, 0x06, +/* 0001A000 */ 0xFE, 0x95, 0x03, 0x0B, 0xFE, 0x74, 0x01, 0x4E, 0x08, 0x4E, 0x09, 0x4E, 0x0A, 0x4E, 0x0B, 0x4E, +/* 0001A010 */ 0x0C, 0x4E, 0x0D, 0x8F, 0x01, 0x0F, 0x10, 0x00, 0x00, 0x4A, 0x10, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 0001A020 */ 0x02, 0x5A, 0x01, 0x07, 0x00, 0x00, 0xF0, 0x02, 0x10, 0x10, 0x00, 0x00, 0x45, 0x08, 0x10, 0x14, +/* 0001A030 */ 0x03, 0x00, 0x08, 0x03, 0x09, 0x06, 0x00, 0x45, 0x00, 0x04, 0x09, 0x3C, 0x01, 0x5F, 0x10, 0x08, +/* 0001A040 */ 0x00, 0x0E, 0x6B, 0x00, 0x10, 0x8F, 0x02, 0x36, 0x11, 0x01, 0x00, 0x4A, 0x11, 0x6D, 0x10, 0x11, +/* 0001A050 */ 0x01, 0x07, 0x03, 0x00, 0x59, 0x00, 0x11, 0x5F, 0x12, 0x08, 0x02, 0x5A, 0x01, 0x12, 0x01, 0x00, +/* 0001A060 */ 0x5A, 0x02, 0x05, 0x01, 0x00, 0xF4, 0x03, 0x10, 0x10, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, +/* 0001A070 */ 0x09, 0x10, 0x8F, 0x02, 0x36, 0x11, 0x01, 0x00, 0x4A, 0x11, 0x6D, 0x10, 0x11, 0x03, 0x07, 0x02, +/* 0001A080 */ 0x00, 0x59, 0x00, 0x11, 0x5A, 0x01, 0x09, 0x02, 0x00, 0xF4, 0x02, 0x10, 0x10, 0x03, 0x00, 0x00, +/* 0001A090 */ 0x00, 0x02, 0x00, 0x45, 0x0A, 0x10, 0xA7, 0x10, 0x09, 0x04, 0x00, 0x00, 0xA7, 0x11, 0x0A, 0x05, +/* 0001A0A0 */ 0x01, 0x00, 0x15, 0x03, 0x00, 0x10, 0x11, 0x09, 0x06, 0x00, 0x45, 0x00, 0x04, 0x09, 0xC9, 0x00, +/* 0001A0B0 */ 0x5F, 0x10, 0x08, 0x06, 0x0E, 0xB9, 0x00, 0x10, 0x8F, 0x02, 0x36, 0x11, 0x01, 0x00, 0x4A, 0x11, +/* 0001A0C0 */ 0x6D, 0x10, 0x11, 0x07, 0x07, 0x03, 0x00, 0x59, 0x00, 0x11, 0x5F, 0x12, 0x08, 0x08, 0x5A, 0x01, +/* 0001A0D0 */ 0x12, 0x03, 0x00, 0x5A, 0x02, 0x05, 0x03, 0x00, 0xF4, 0x03, 0x10, 0x10, 0x07, 0x00, 0x00, 0x00, +/* 0001A0E0 */ 0x03, 0x00, 0x45, 0x0B, 0x10, 0x8F, 0x02, 0x36, 0x11, 0x01, 0x00, 0x4A, 0x11, 0x6D, 0x10, 0x11, +/* 0001A0F0 */ 0x09, 0x07, 0x03, 0x00, 0x59, 0x00, 0x11, 0x8F, 0x02, 0x36, 0x13, 0x01, 0x00, 0x4A, 0x13, 0x6D, +/* 0001A100 */ 0x12, 0x13, 0x0A, 0x07, 0x03, 0x00, 0x59, 0x00, 0x13, 0x5A, 0x01, 0x0B, 0x05, 0x00, 0xD6, 0x00, +/* 0001A110 */ 0x14, 0x5A, 0x02, 0x14, 0x05, 0x00, 0xF4, 0x03, 0x12, 0x12, 0x0A, 0x00, 0x00, 0x00, 0x05, 0x00, +/* 0001A120 */ 0x5A, 0x01, 0x12, 0x04, 0x00, 0xD6, 0x01, 0x12, 0x5A, 0x02, 0x12, 0x04, 0x00, 0xF4, 0x03, 0x10, +/* 0001A130 */ 0x10, 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x45, 0x0C, 0x10, 0x8F, 0x02, 0x36, 0x11, 0x01, 0x00, +/* 0001A140 */ 0x4A, 0x11, 0x6D, 0x10, 0x11, 0x0B, 0x07, 0x02, 0x00, 0x59, 0x00, 0x11, 0x5A, 0x01, 0x0C, 0x06, +/* 0001A150 */ 0x00, 0xF4, 0x02, 0x10, 0x10, 0x0B, 0x00, 0x00, 0x00, 0x06, 0x00, 0x45, 0x0D, 0x10, 0xA7, 0x10, +/* 0001A160 */ 0x0C, 0x0C, 0x02, 0x00, 0xA7, 0x11, 0x0D, 0x0D, 0x03, 0x00, 0x41, 0x00, 0x10, 0x11, 0x09, 0x08, +/* 0001A170 */ 0x00, 0x45, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xD4, 0x03, 0xFE, 0x56, +/* 0001A180 */ 0x01, 0xFE, 0xD4, 0x03, 0xFE, 0x15, 0x03, 0xD1, 0xD1, 0xFE, 0xD5, 0x03, 0xFE, 0x56, 0x01, 0xFE, +/* 0001A190 */ 0xD5, 0x03, 0xD5, 0x89, 0xFE, 0x15, 0x03, 0xD1, 0xD1, 0xFE, 0xBE, 0x70, 0x0F, 0x0C, 0x00, 0x00, +/* 0001A1A0 */ 0x00, 0x1C, 0x00, 0x2D, 0x00, 0x08, 0x00, 0x23, 0x00, 0x06, 0x00, 0x45, 0x00, 0x08, 0x00, 0x23, +/* 0001A1B0 */ 0x00, 0x2D, 0x00, 0x3C, 0x00, 0x24, 0x00, 0x38, 0x00, 0x14, 0x00, 0x41, 0x00, 0x06, 0x00, 0x2F, +/* 0001A1C0 */ 0x00, 0x08, 0x00, 0x25, 0x00, 0x2D, 0x00, 0x44, 0x00, 0x55, 0x00, 0x88, 0x00, 0x24, 0x00, 0x3C, +/* 0001A1D0 */ 0x00, 0x13, 0x00, 0x49, 0x00, 0x08, 0x00, 0x11, 0x00, 0x00, 0x4E, 0xA2, 0x01, 0x00, 0xE2, 0xA1, +/* 0001A1E0 */ 0x01, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x07, 0x00, 0xFE, 0xA0, 0x02, 0x62, 0xA2, 0x41, +/* 0001A1F0 */ 0xD0, 0x00, 0x39, 0xFE, 0x01, 0x10, 0xFE, 0x19, 0x73, 0xFE, 0x19, 0x73, 0x01, 0xFE, 0x00, 0x90, +/* 0001A200 */ 0x02, 0x02, 0xFE, 0x19, 0x73, 0x23, 0x23, 0x04, 0x02, 0x04, 0x03, 0x0B, 0x0B, 0x02, 0x01, 0x01, +/* 0001A210 */ 0x01, 0x01, 0x01, 0x01, 0x03, 0x28, 0x8F, 0x02, 0x36, 0x05, 0x00, 0x00, 0x4A, 0x05, 0x6D, 0x04, +/* 0001A220 */ 0x05, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x05, 0x5A, 0x01, 0x02, 0x00, 0x00, 0xF4, 0x02, 0x00, +/* 0001A230 */ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x75, +/* 0001A240 */ 0x01, 0xFE, 0x26, 0x73, 0x02, 0x00, 0x00, 0x00, 0x00, 0x26, 0x00, 0x16, 0x00, 0x00, 0x7F, 0x4C, +/* 0001A250 */ 0x01, 0xC0, 0x03, 0x00, 0x07, 0x00, 0xFE, 0xA0, 0x02, 0x3E, 0xA2, 0x41, 0xD0, 0x00, 0x38, 0xFE, +/* 0001A260 */ 0x01, 0x10, 0xFE, 0xF5, 0x72, 0xFE, 0xF5, 0x72, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0xF5, +/* 0001A270 */ 0x72, 0x21, 0x21, 0x02, 0x03, 0x04, 0x06, 0x06, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, +/* 0001A280 */ 0x11, 0xA7, 0x04, 0x03, 0x00, 0x00, 0x00, 0x41, 0x00, 0x04, 0x02, 0x09, 0x02, 0x00, 0xA8, 0x00, +/* 0001A290 */ 0x24, 0x00, 0xD1, 0xFE, 0x02, 0x73, 0x02, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x14, 0x00, 0x00, +/* 0001A2A0 */ 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x76, 0x02, 0x25, 0xA2, 0x41, 0xC1, 0x00, +/* 0001A2B0 */ 0xFE, 0x5E, 0x03, 0x36, 0xFE, 0x31, 0x6D, 0xFE, 0x31, 0x6D, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, +/* 0001A2C0 */ 0xFE, 0x31, 0x6D, 0xE0, 0xE0, 0x05, 0x04, 0x06, 0x04, 0x1D, 0x1C, 0x02, 0x03, 0x04, 0x02, 0x02, +/* 0001A2D0 */ 0x02, 0x02, 0x05, 0x08, 0x07, 0x79, 0x8F, 0x02, 0x24, 0x07, 0x00, 0x00, 0x6D, 0x06, 0x07, 0x00, +/* 0001A2E0 */ 0x07, 0x02, 0x00, 0x59, 0x00, 0x07, 0x5A, 0x01, 0x04, 0x00, 0x00, 0xF4, 0x02, 0x06, 0x06, 0x00, +/* 0001A2F0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x04, 0x06, 0x8F, 0x01, 0x0E, 0x06, 0x01, 0x00, 0x4A, 0x06, +/* 0001A300 */ 0x0F, 0x14, 0x00, 0x06, 0x8F, 0x01, 0x03, 0x06, 0x02, 0x00, 0x4A, 0x06, 0x07, 0x01, 0x00, 0x59, +/* 0001A310 */ 0x00, 0x02, 0xF0, 0x01, 0xFF, 0x06, 0x01, 0x00, 0x8F, 0x02, 0x03, 0x07, 0x03, 0x00, 0x6D, 0x06, +/* 0001A320 */ 0x07, 0x01, 0x07, 0x03, 0x00, 0x59, 0x00, 0x07, 0x5A, 0x01, 0x04, 0x02, 0x00, 0x8F, 0x01, 0x0E, +/* 0001A330 */ 0x08, 0x01, 0x00, 0x4A, 0x08, 0x5A, 0x02, 0x08, 0x02, 0x00, 0xF4, 0x03, 0x06, 0x06, 0x01, 0x00, +/* 0001A340 */ 0x00, 0x00, 0x02, 0x00, 0x42, 0x00, 0x06, 0x03, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, +/* 0001A350 */ 0x22, 0x03, 0xFE, 0xC0, 0x02, 0xFE, 0x4B, 0x6D, 0x05, 0x00, 0x00, 0x00, 0x00, 0x22, 0x00, 0x29, +/* 0001A360 */ 0x00, 0x0C, 0x00, 0x25, 0x00, 0x14, 0x00, 0x2F, 0x00, 0x35, 0x00, 0x48, 0x00, 0x00, 0x7E, 0x5D, +/* 0001A370 */ 0x08, 0x01, 0x00, 0x1A, 0x0B, 0x00, 0xFE, 0xFC, 0x01, 0x1A, 0xA0, 0x41, 0xD1, 0x00, 0x34, 0xFE, +/* 0001A380 */ 0x5E, 0x51, 0xFE, 0x5E, 0x51, 0x01, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFE, 0x5E, 0x51, 0xFE, 0xA8, +/* 0001A390 */ 0x1B, 0xFE, 0xA8, 0x1B, 0x02, 0xFE, 0x6C, 0x03, 0xFE, 0xAC, 0x03, 0x1B, 0x26, 0x3D, 0x04, 0xC4, +/* 0001A3A0 */ 0x9A, 0x02, 0x04, 0x02, 0x3A, 0x3B, 0x3C, 0x05, 0xFE, 0xAD, 0x03, 0x05, 0xFE, 0xAE, 0x03, 0x05, +/* 0001A3B0 */ 0xFE, 0xAF, 0x03, 0x06, 0xFE, 0xB0, 0x03, 0x06, 0xFE, 0xB1, 0x03, 0x05, 0xFE, 0xB2, 0x03, 0x05, +/* 0001A3C0 */ 0xFE, 0xB3, 0x03, 0x05, 0xFE, 0xB4, 0x03, 0x05, 0xFE, 0xB5, 0x03, 0x05, 0xFE, 0xB6, 0x03, 0x05, +/* 0001A3D0 */ 0xFE, 0xB7, 0x03, 0x05, 0xFE, 0xB8, 0x03, 0x05, 0xFE, 0xB9, 0x03, 0x05, 0xFE, 0xBA, 0x03, 0x05, +/* 0001A3E0 */ 0xFE, 0xBB, 0x03, 0x05, 0xFE, 0xBC, 0x03, 0x06, 0xFE, 0x47, 0x03, 0x05, 0xFE, 0xBD, 0x03, 0x05, +/* 0001A3F0 */ 0xFE, 0xBE, 0x03, 0x05, 0xFE, 0xBF, 0x03, 0x05, 0xFE, 0xC0, 0x03, 0x05, 0xFE, 0xC1, 0x03, 0x05, +/* 0001A400 */ 0xFE, 0xC2, 0x03, 0x05, 0xFE, 0xC3, 0x03, 0x05, 0xFE, 0xC4, 0x03, 0x05, 0xFE, 0xC5, 0x03, 0x05, +/* 0001A410 */ 0xFE, 0xC6, 0x03, 0x05, 0xFE, 0xC7, 0x03, 0x05, 0xFE, 0xC8, 0x03, 0x05, 0xFE, 0xC9, 0x03, 0x05, +/* 0001A420 */ 0xFE, 0xCA, 0x03, 0x05, 0xFE, 0xCB, 0x03, 0x05, 0xFE, 0xCC, 0x03, 0x06, 0xFE, 0xCD, 0x03, 0x06, +/* 0001A430 */ 0xFE, 0xCE, 0x03, 0x06, 0xFE, 0xCF, 0x03, 0xFE, 0xE1, 0x02, 0x4E, 0x26, 0x4E, 0x27, 0x4E, 0x28, +/* 0001A440 */ 0x4E, 0x29, 0x4E, 0x2A, 0x4E, 0x2B, 0x4E, 0x2C, 0x4E, 0x2D, 0x4E, 0x2E, 0x4E, 0x2F, 0x4E, 0x30, +/* 0001A450 */ 0x4E, 0x31, 0x4E, 0x32, 0x4E, 0x33, 0x4E, 0x34, 0x4E, 0x35, 0x4E, 0x36, 0x4E, 0x37, 0x4E, 0x38, +/* 0001A460 */ 0x4E, 0x39, 0x4E, 0x3D, 0x96, 0x02, 0x3D, 0x4E, 0x3D, 0x96, 0x03, 0x3D, 0x45, 0x26, 0x02, 0x45, +/* 0001A470 */ 0x27, 0x03, 0x45, 0x3D, 0x04, 0x01, 0x09, 0x01, 0x3E, 0x26, 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, +/* 0001A480 */ 0x3D, 0x05, 0x01, 0x09, 0x01, 0x3E, 0x27, 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, 0x3D, 0x06, 0x45, +/* 0001A490 */ 0x28, 0x3D, 0x45, 0x29, 0x07, 0x2D, 0x3D, 0x08, 0x09, 0x45, 0x2A, 0x3D, 0x45, 0x3D, 0x0A, 0x01, +/* 0001A4A0 */ 0x09, 0x01, 0x3E, 0x29, 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, 0x3D, 0x05, 0x01, 0x09, 0x01, 0x3E, +/* 0001A4B0 */ 0x2A, 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, 0x3D, 0x0B, 0x45, 0x2B, 0x3D, 0x45, 0x3D, 0x0C, 0x01, +/* 0001A4C0 */ 0x09, 0x01, 0x3E, 0x28, 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, 0x3D, 0x0D, 0x45, 0x2C, 0x3D, 0x45, +/* 0001A4D0 */ 0x3D, 0x0A, 0x01, 0x09, 0x01, 0x3E, 0x27, 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, 0x3D, 0x0E, 0x45, +/* 0001A4E0 */ 0x2D, 0x3D, 0x45, 0x3D, 0x0A, 0x01, 0x09, 0x01, 0x3E, 0x2D, 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, +/* 0001A4F0 */ 0x3D, 0x0F, 0x01, 0x09, 0x01, 0x3E, 0x28, 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, 0x3D, 0x10, 0x45, +/* 0001A500 */ 0x2E, 0x3D, 0x45, 0x3D, 0x0A, 0x01, 0x09, 0x01, 0x3E, 0x28, 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, +/* 0001A510 */ 0x3D, 0x11, 0x01, 0x09, 0x01, 0x3E, 0x27, 0x2D, 0x3D, 0x3D, 0x3E, 0x01, 0x09, 0x01, 0x3E, 0x28, +/* 0001A520 */ 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, 0x3D, 0x13, 0x45, 0x2F, 0x3D, 0x45, 0x3D, 0x0A, 0x01, 0x09, +/* 0001A530 */ 0x01, 0x3E, 0x26, 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, 0x3D, 0x14, 0x01, 0x09, 0x01, 0x3E, 0x27, +/* 0001A540 */ 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, 0x3D, 0x13, 0x45, 0x30, 0x3D, 0x45, 0x3D, 0x0A, 0x01, 0x09, +/* 0001A550 */ 0x01, 0x3E, 0x26, 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, 0x3D, 0x15, 0x45, 0x31, 0x3D, 0x45, 0x3D, +/* 0001A560 */ 0x0A, 0x01, 0x09, 0x01, 0x3E, 0x26, 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, 0x3D, 0x16, 0x01, 0x09, +/* 0001A570 */ 0x01, 0x3E, 0x26, 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, 0x3D, 0x17, 0x45, 0x32, 0x3D, 0x01, 0x09, +/* 0001A580 */ 0x01, 0x3E, 0x26, 0x2D, 0x3E, 0x3E, 0x18, 0xFD, 0x3D, 0x0A, 0x3E, 0x05, 0x45, 0x3E, 0x19, 0x01, +/* 0001A590 */ 0x09, 0x01, 0x3F, 0x32, 0x2D, 0x3E, 0x3E, 0x3F, 0x2D, 0x3E, 0x3E, 0x1A, 0x45, 0x3F, 0x05, 0x01, +/* 0001A5A0 */ 0x09, 0x01, 0x40, 0x26, 0x2D, 0x3F, 0x3F, 0x40, 0x2D, 0x3F, 0x3F, 0x1B, 0xFF, 0x3D, 0x3E, 0x3F, +/* 0001A5B0 */ 0x02, 0xFE, 0x3D, 0x0B, 0x04, 0x45, 0x33, 0x3D, 0x45, 0x3D, 0x1C, 0x01, 0x09, 0x01, 0x3E, 0x33, +/* 0001A5C0 */ 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, 0x3D, 0x0B, 0x45, 0x3E, 0x1D, 0x01, 0x09, 0x01, 0x3F, 0x31, +/* 0001A5D0 */ 0x2D, 0x3E, 0x3E, 0x3F, 0x2D, 0x3E, 0x3E, 0x1E, 0x2D, 0x3D, 0x3D, 0x3E, 0x45, 0x3E, 0x1D, 0x01, +/* 0001A5E0 */ 0x09, 0x01, 0x3F, 0x30, 0x2D, 0x3E, 0x3E, 0x3F, 0x2D, 0x3E, 0x3E, 0x1E, 0x2D, 0x3D, 0x3D, 0x3E, +/* 0001A5F0 */ 0x45, 0x34, 0x3D, 0x45, 0x3D, 0x1F, 0x01, 0x09, 0x01, 0x3E, 0x2F, 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, +/* 0001A600 */ 0x3D, 0x3D, 0x20, 0x45, 0x3E, 0x1F, 0x01, 0x09, 0x01, 0x3F, 0x2E, 0x2D, 0x3E, 0x3E, 0x3F, 0x2D, +/* 0001A610 */ 0x3E, 0x3E, 0x20, 0x2D, 0x3D, 0x3D, 0x3E, 0x45, 0x3E, 0x19, 0x01, 0x09, 0x01, 0x3F, 0x2C, 0x2D, +/* 0001A620 */ 0x3E, 0x3E, 0x3F, 0x2D, 0x3E, 0x3E, 0x21, 0x2D, 0x3D, 0x3D, 0x3E, 0x45, 0x35, 0x3D, 0x45, 0x3D, +/* 0001A630 */ 0x22, 0x01, 0x09, 0x01, 0x3E, 0x34, 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, 0x3D, 0x22, 0x01, 0x09, +/* 0001A640 */ 0x01, 0x3E, 0x35, 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, 0x3D, 0x22, 0x45, 0x36, 0x3D, 0x45, 0x3D, +/* 0001A650 */ 0x0A, 0x01, 0x09, 0x01, 0x3E, 0x36, 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, 0x3D, 0x05, 0x01, 0x09, +/* 0001A660 */ 0x01, 0x3E, 0x2C, 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, 0x3D, 0x05, 0x01, 0x09, 0x01, 0x3E, 0x2B, +/* 0001A670 */ 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, 0x3D, 0x0B, 0x45, 0x37, 0x3D, 0x8F, 0x02, 0x0A, 0x3D, 0x00, +/* 0001A680 */ 0x00, 0x07, 0x03, 0x00, 0x45, 0x3E, 0x23, 0x01, 0x09, 0x01, 0x3F, 0x34, 0x2D, 0x3E, 0x3E, 0x3F, +/* 0001A690 */ 0x2D, 0x3E, 0x3E, 0x24, 0x5A, 0x01, 0x3E, 0x00, 0x00, 0x5A, 0x02, 0x25, 0x00, 0x00, 0xC5, 0x03, +/* 0001A6A0 */ 0x3D, 0x3D, 0x00, 0x00, 0x45, 0x38, 0x3D, 0x8F, 0x02, 0x0A, 0x3D, 0x00, 0x00, 0x07, 0x03, 0x00, +/* 0001A6B0 */ 0x45, 0x3E, 0x23, 0x01, 0x09, 0x01, 0x3F, 0x35, 0x2D, 0x3E, 0x3E, 0x3F, 0x2D, 0x3E, 0x3E, 0x24, +/* 0001A6C0 */ 0x5A, 0x01, 0x3E, 0x01, 0x00, 0x5A, 0x02, 0x25, 0x01, 0x00, 0xC5, 0x03, 0x3D, 0x3D, 0x01, 0x00, +/* 0001A6D0 */ 0x45, 0x39, 0x3D, 0x8F, 0x02, 0x0A, 0x3D, 0x00, 0x00, 0x07, 0x03, 0x00, 0x45, 0x3E, 0x23, 0x01, +/* 0001A6E0 */ 0x09, 0x01, 0x3F, 0x37, 0x2D, 0x3E, 0x3E, 0x3F, 0x2D, 0x3E, 0x3E, 0x24, 0x5A, 0x01, 0x3E, 0x02, +/* 0001A6F0 */ 0x00, 0x5A, 0x02, 0x25, 0x02, 0x00, 0xC5, 0x03, 0x3D, 0x3D, 0x02, 0x00, 0x96, 0x02, 0x3D, 0x8F, +/* 0001A700 */ 0x02, 0x02, 0x3D, 0x01, 0x00, 0x07, 0x01, 0x00, 0xC5, 0x01, 0x3D, 0x3D, 0x03, 0x00, 0x96, 0x03, +/* 0001A710 */ 0x3D, 0xD6, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x2A, 0x56, 0x18, 0x32, +/* 0001A720 */ 0x00, 0x00, 0x00, 0x03, 0x00, 0x1F, 0x00, 0x03, 0x00, 0x1F, 0x00, 0x20, 0x00, 0x33, 0x00, 0x03, +/* 0001A730 */ 0x00, 0x77, 0x00, 0x07, 0x00, 0xC0, 0x00, 0x20, 0x00, 0x44, 0x00, 0x13, 0x00, 0x7D, 0x00, 0x13, +/* 0001A740 */ 0x00, 0x94, 0x00, 0x20, 0x00, 0x83, 0x00, 0x29, 0x00, 0x83, 0x00, 0x20, 0x00, 0x74, 0x00, 0x13, +/* 0001A750 */ 0x00, 0x6A, 0x00, 0x20, 0x00, 0x7A, 0x00, 0x3A, 0x00, 0xAF, 0x03, 0x3B, 0x00, 0x4C, 0x01, 0x3B, +/* 0001A760 */ 0x00, 0x5A, 0x01, 0x20, 0x00, 0x4B, 0x00, 0x2D, 0x00, 0xBA, 0x00, 0x2C, 0x00, 0x74, 0x00, 0x2C, +/* 0001A770 */ 0x00, 0x92, 0x00, 0x2C, 0x00, 0x93, 0x00, 0x12, 0x00, 0x34, 0x00, 0x08, 0x00, 0x59, 0x08, 0x00, +/* 0001A780 */ 0x84, 0xA7, 0x01, 0x00, 0x7F, 0x7C, 0x0B, 0xC3, 0x43, 0x50, 0x13, 0x00, 0xFE, 0x38, 0x02, 0x0F, +/* 0001A790 */ 0xA2, 0x41, 0xD1, 0x00, 0x35, 0xFE, 0xB3, 0x64, 0xFE, 0xB3, 0x64, 0x01, 0xFE, 0x00, 0x90, 0x02, +/* 0001A7A0 */ 0x02, 0xFE, 0xB3, 0x64, 0xFE, 0x4C, 0x08, 0xFE, 0x4C, 0x08, 0x10, 0x0B, 0x13, 0x09, 0x8F, 0x84, +/* 0001A7B0 */ 0x33, 0x03, 0x03, 0x0F, 0x07, 0x03, 0x02, 0x15, 0x15, 0x15, 0x15, 0x03, 0x12, 0x13, 0xFE, 0x56, +/* 0001A7C0 */ 0x01, 0xFE, 0x22, 0x02, 0xFE, 0x85, 0x01, 0xFE, 0xB3, 0x01, 0x07, 0x01, 0x01, 0x01, 0x02, 0x06, +/* 0001A7D0 */ 0xFE, 0x95, 0x03, 0x01, 0x03, 0x01, 0x04, 0x01, 0x05, 0x01, 0x00, 0x06, 0xFE, 0xD0, 0x03, 0xFE, +/* 0001A7E0 */ 0x52, 0x02, 0x4E, 0x0C, 0x4E, 0x0D, 0x4E, 0x0E, 0x4E, 0x0F, 0x4E, 0x10, 0x4E, 0x11, 0x8F, 0x01, +/* 0001A7F0 */ 0x03, 0x17, 0x00, 0x00, 0x4A, 0x17, 0x6D, 0x16, 0x17, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x17, +/* 0001A800 */ 0x5A, 0x01, 0x0B, 0x00, 0x00, 0xF4, 0x02, 0x16, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, +/* 0001A810 */ 0x0C, 0x16, 0x0E, 0x06, 0x00, 0x0C, 0x45, 0x00, 0x0C, 0x09, 0x16, 0x02, 0x8F, 0x03, 0x36, 0x17, +/* 0001A820 */ 0x01, 0x00, 0x4A, 0x17, 0x6D, 0x16, 0x17, 0x01, 0x07, 0x03, 0x00, 0x59, 0x00, 0x17, 0x5A, 0x01, +/* 0001A830 */ 0x0B, 0x01, 0x00, 0x8F, 0x01, 0x02, 0x18, 0x02, 0x00, 0x4A, 0x18, 0x5A, 0x02, 0x18, 0x01, 0x00, +/* 0001A840 */ 0xF4, 0x03, 0x16, 0x16, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, 0x0D, 0x16, 0x0F, 0x06, 0x00, +/* 0001A850 */ 0x0D, 0x45, 0x00, 0x02, 0x09, 0xDB, 0x01, 0x8F, 0x03, 0x36, 0x17, 0x01, 0x00, 0x4A, 0x17, 0x6D, +/* 0001A860 */ 0x16, 0x17, 0x02, 0x07, 0x01, 0x00, 0x59, 0x00, 0x17, 0xF4, 0x01, 0x16, 0x16, 0x02, 0x00, 0x00, +/* 0001A870 */ 0x00, 0x02, 0x00, 0x45, 0x0E, 0x16, 0x98, 0x16, 0x0D, 0x03, 0x00, 0x00, 0x77, 0x16, 0x0E, 0x03, +/* 0001A880 */ 0x98, 0x16, 0x0D, 0x03, 0x01, 0x00, 0x77, 0x16, 0x0E, 0x04, 0x98, 0x16, 0x0D, 0x04, 0x02, 0x00, +/* 0001A890 */ 0x0E, 0x20, 0x00, 0x16, 0x98, 0x16, 0x0D, 0x04, 0x03, 0x00, 0x77, 0x16, 0x0E, 0x05, 0x5F, 0x17, +/* 0001A8A0 */ 0x0E, 0x06, 0x98, 0x18, 0x0D, 0x04, 0x04, 0x00, 0x2D, 0x18, 0x05, 0x18, 0x2D, 0x16, 0x17, 0x18, +/* 0001A8B0 */ 0x77, 0x16, 0x0E, 0x07, 0x98, 0x16, 0x0D, 0x06, 0x05, 0x00, 0x0E, 0x20, 0x00, 0x16, 0x98, 0x16, +/* 0001A8C0 */ 0x0D, 0x06, 0x06, 0x00, 0x77, 0x16, 0x0E, 0x08, 0x5F, 0x17, 0x0E, 0x09, 0x98, 0x18, 0x0D, 0x06, +/* 0001A8D0 */ 0x07, 0x00, 0x2D, 0x18, 0x05, 0x18, 0x2D, 0x16, 0x17, 0x18, 0x77, 0x16, 0x0E, 0x0A, 0x98, 0x16, +/* 0001A8E0 */ 0x0D, 0x07, 0x08, 0x00, 0x0E, 0x0A, 0x00, 0x16, 0x98, 0x16, 0x0D, 0x07, 0x09, 0x00, 0x77, 0x16, +/* 0001A8F0 */ 0x0E, 0x0B, 0x98, 0x16, 0x0D, 0x08, 0x0A, 0x00, 0x0E, 0x08, 0x01, 0x16, 0x98, 0x16, 0x0D, 0x08, +/* 0001A900 */ 0x0B, 0x00, 0x77, 0x16, 0x0E, 0x0C, 0x8F, 0x03, 0x36, 0x17, 0x01, 0x00, 0x4A, 0x17, 0x6D, 0x16, +/* 0001A910 */ 0x17, 0x0D, 0x07, 0x03, 0x00, 0x59, 0x00, 0x17, 0x98, 0x18, 0x0D, 0x08, 0x0C, 0x00, 0x5A, 0x01, +/* 0001A920 */ 0x18, 0x03, 0x00, 0x5A, 0x02, 0x05, 0x03, 0x00, 0xF4, 0x03, 0x16, 0x16, 0x0D, 0x00, 0x00, 0x00, +/* 0001A930 */ 0x03, 0x00, 0x45, 0x0F, 0x16, 0x45, 0x10, 0x09, 0xED, 0x00, 0xEE, 0x00, 0xA7, 0x16, 0x0F, 0x0E, +/* 0001A940 */ 0x00, 0x00, 0x12, 0x03, 0x00, 0x10, 0x16, 0x09, 0xB8, 0x00, 0x98, 0x16, 0x0F, 0x10, 0x0D, 0x00, +/* 0001A950 */ 0x15, 0x03, 0x00, 0x16, 0x0A, 0x09, 0x03, 0x00, 0x09, 0xA1, 0x00, 0xA8, 0x16, 0x45, 0x11, 0x16, +/* 0001A960 */ 0x2D, 0x16, 0x10, 0x03, 0x45, 0x11, 0x16, 0xED, 0x01, 0xEE, 0x01, 0xA7, 0x16, 0x0F, 0x0F, 0x01, +/* 0001A970 */ 0x00, 0x12, 0x03, 0x00, 0x11, 0x16, 0x09, 0x1A, 0x00, 0x98, 0x16, 0x0F, 0x11, 0x0E, 0x00, 0xA7, +/* 0001A980 */ 0x16, 0x16, 0x10, 0x02, 0x00, 0x11, 0x03, 0x00, 0x16, 0x03, 0x09, 0x06, 0x00, 0x26, 0x11, 0x11, +/* 0001A990 */ 0x09, 0xD6, 0xFF, 0xEF, 0x01, 0x2D, 0x16, 0x10, 0x03, 0x11, 0x03, 0x00, 0x11, 0x16, 0x09, 0x58, +/* 0001A9A0 */ 0x00, 0x45, 0x16, 0x0E, 0x8F, 0x03, 0x36, 0x18, 0x01, 0x00, 0x4A, 0x18, 0x6D, 0x17, 0x18, 0x11, +/* 0001A9B0 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x18, 0x8F, 0x03, 0x36, 0x1A, 0x01, 0x00, 0x4A, 0x1A, 0x6D, 0x19, +/* 0001A9C0 */ 0x1A, 0x12, 0x07, 0x04, 0x00, 0x59, 0x00, 0x1A, 0x5A, 0x01, 0x0F, 0x05, 0x00, 0x5A, 0x02, 0x10, +/* 0001A9D0 */ 0x05, 0x00, 0x5A, 0x03, 0x11, 0x05, 0x00, 0xF4, 0x04, 0x19, 0x19, 0x12, 0x00, 0x00, 0x00, 0x05, +/* 0001A9E0 */ 0x00, 0x5A, 0x01, 0x19, 0x04, 0x00, 0x5A, 0x02, 0x05, 0x04, 0x00, 0xF4, 0x03, 0x17, 0x17, 0x11, +/* 0001A9F0 */ 0x00, 0x00, 0x00, 0x04, 0x00, 0x77, 0x17, 0x16, 0x13, 0x09, 0x06, 0x00, 0x26, 0x10, 0x10, 0x09, +/* 0001AA00 */ 0x38, 0xFF, 0xEF, 0x00, 0x8F, 0x01, 0x03, 0x17, 0x00, 0x00, 0x4A, 0x17, 0x6D, 0x16, 0x17, 0x14, +/* 0001AA10 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x17, 0x5A, 0x01, 0x0B, 0x06, 0x00, 0x5A, 0x02, 0x0E, 0x06, 0x00, +/* 0001AA20 */ 0xF4, 0x03, 0xFF, 0x16, 0x14, 0x00, 0x00, 0x00, 0x06, 0x00, 0x45, 0x00, 0x0E, 0x09, 0x02, 0x00, +/* 0001AA30 */ 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x98, 0x01, 0xFE, 0x01, 0x01, 0x69, 0xFE, 0xD1, 0x03, 0xFE, 0x1E, +/* 0001AA40 */ 0x02, 0xFE, 0xD2, 0x03, 0xFE, 0x1E, 0x02, 0xFE, 0x1E, 0x02, 0xFE, 0xD3, 0x03, 0xFE, 0x1E, 0x02, +/* 0001AA50 */ 0xFE, 0x1E, 0x02, 0xFE, 0xD4, 0x03, 0xFE, 0xD5, 0x03, 0xFE, 0x56, 0x01, 0xD1, 0xD1, 0xD1, 0xCC, +/* 0001AA60 */ 0xFE, 0x50, 0x01, 0xFE, 0x96, 0x03, 0xFE, 0x9B, 0x01, 0xFE, 0xD4, 0x64, 0x23, 0x0C, 0x00, 0x00, +/* 0001AA70 */ 0x00, 0x24, 0x00, 0x3C, 0x00, 0x04, 0x00, 0x1E, 0x00, 0x06, 0x00, 0x2A, 0x00, 0x31, 0x00, 0x39, +/* 0001AA80 */ 0x00, 0x04, 0x00, 0x1E, 0x00, 0x06, 0x00, 0x28, 0x00, 0x1F, 0x00, 0x24, 0x00, 0x0A, 0x00, 0x25, +/* 0001AA90 */ 0x00, 0x0A, 0x00, 0x21, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x0A, 0x00, 0x27, 0x00, 0x16, 0x00, 0x37, +/* 0001AAA0 */ 0x00, 0x0A, 0x00, 0x20, 0x00, 0x0A, 0x00, 0x27, 0x00, 0x16, 0x00, 0x37, 0x00, 0x0A, 0x00, 0x20, +/* 0001AAB0 */ 0x00, 0x0A, 0x00, 0x34, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x0A, 0x00, 0x76, 0x00, 0x2F, 0x00, 0x44, +/* 0001AAC0 */ 0x00, 0x07, 0x00, 0x0B, 0x00, 0x0E, 0x00, 0x36, 0x00, 0x0E, 0x00, 0x39, 0x00, 0x03, 0x00, 0x35, +/* 0001AAD0 */ 0x00, 0x05, 0x00, 0x20, 0x00, 0x0B, 0x00, 0x0B, 0x00, 0x22, 0x00, 0x3B, 0x00, 0x08, 0x00, 0x3B, +/* 0001AAE0 */ 0x01, 0x0C, 0x00, 0xFC, 0x00, 0x58, 0x00, 0xCC, 0x00, 0x03, 0x00, 0x0E, 0xFC, 0x08, 0x00, 0x26, +/* 0001AAF0 */ 0x04, 0x26, 0x00, 0x33, 0x00, 0x08, 0x00, 0x14, 0x00, 0x00, 0x7F, 0x4C, 0x00, 0x00, 0x20, 0x10, +/* 0001AB00 */ 0x03, 0x00, 0xFE, 0xF2, 0x01, 0x04, 0xA1, 0x41, 0xC1, 0x00, 0xFE, 0x51, 0x03, 0x33, 0xFE, 0x02, +/* 0001AB10 */ 0x50, 0xFE, 0x02, 0x50, 0x41, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFE, 0x02, 0x50, 0x55, 0x55, 0x02, +/* 0001AB20 */ 0x02, 0x03, 0x05, 0x05, 0x02, 0x01, 0x02, 0x0D, 0xE2, 0x03, 0x00, 0x01, 0x43, 0x01, 0x01, 0x0E, +/* 0001AB30 */ 0x03, 0xA8, 0x00, 0x24, 0x00, 0x0A, 0xFE, 0xAB, 0x03, 0x01, 0xFE, 0x30, 0x50, 0x02, 0x00, 0x00, +/* 0001AB40 */ 0x00, 0x00, 0x0B, 0x00, 0x26, 0x00, 0x00, 0x7F, 0x5C, 0x0A, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, +/* 0001AB50 */ 0xE4, 0x01, 0x1C, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x5B, 0x03, 0x32, 0xFE, 0x1F, 0x4E, 0xFE, 0x1F, +/* 0001AB60 */ 0x4E, 0x01, 0xFE, 0x00, 0x90, 0x06, 0x06, 0xFE, 0x1F, 0x4E, 0xFE, 0xC2, 0x01, 0xFE, 0xC2, 0x01, +/* 0001AB70 */ 0x0B, 0x06, 0x0D, 0x08, 0x39, 0x35, 0x02, 0x01, 0x05, 0x04, 0x04, 0x04, 0x04, 0x04, 0x0C, 0x08, +/* 0001AB80 */ 0x06, 0xFE, 0xA8, 0x03, 0x05, 0xFE, 0xA9, 0x03, 0x06, 0xFE, 0xAA, 0x03, 0xF4, 0x4E, 0x0B, 0x98, +/* 0001AB90 */ 0x0D, 0x06, 0x07, 0x00, 0x00, 0x45, 0x0B, 0x0D, 0xA8, 0x0D, 0x15, 0x03, 0x00, 0x0B, 0x0D, 0x09, +/* 0001ABA0 */ 0xD5, 0x00, 0x8F, 0x02, 0x24, 0x0E, 0x00, 0x00, 0x6D, 0x0D, 0x0E, 0x00, 0x07, 0x02, 0x00, 0x59, +/* 0001ABB0 */ 0x00, 0x0E, 0x5A, 0x01, 0x0B, 0x00, 0x00, 0xF4, 0x02, 0x0D, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0001ABC0 */ 0x00, 0x45, 0x0B, 0x0D, 0x8F, 0x02, 0x36, 0x0E, 0x01, 0x00, 0x4A, 0x0E, 0x6D, 0x0D, 0x0E, 0x01, +/* 0001ABD0 */ 0x07, 0x02, 0x00, 0x59, 0x00, 0x0E, 0x5A, 0x01, 0x0B, 0x01, 0x00, 0xF4, 0x02, 0x0D, 0x0D, 0x01, +/* 0001ABE0 */ 0x00, 0x00, 0x00, 0x01, 0x00, 0x0F, 0x0D, 0x00, 0x0D, 0x12, 0x08, 0x00, 0x0B, 0x08, 0x11, 0x03, +/* 0001ABF0 */ 0x00, 0x0B, 0x09, 0x09, 0x5D, 0x00, 0x8F, 0x02, 0x03, 0x0E, 0x02, 0x00, 0x6D, 0x0D, 0x0E, 0x02, +/* 0001AC00 */ 0x07, 0x04, 0x00, 0x59, 0x00, 0x0E, 0x8F, 0x02, 0x0C, 0x0F, 0x03, 0x00, 0x07, 0x02, 0x00, 0x59, +/* 0001AC10 */ 0x00, 0x02, 0x5A, 0x01, 0x0B, 0x03, 0x00, 0xF0, 0x02, 0x0F, 0x0F, 0x03, 0x00, 0x5A, 0x01, 0x0F, +/* 0001AC20 */ 0x02, 0x00, 0x5A, 0x02, 0x07, 0x02, 0x00, 0x45, 0x0F, 0x03, 0x01, 0x09, 0x01, 0x10, 0x08, 0x2D, +/* 0001AC30 */ 0x0F, 0x0F, 0x10, 0x2D, 0x0F, 0x0F, 0x04, 0x01, 0x09, 0x01, 0x10, 0x09, 0x2D, 0x0F, 0x0F, 0x10, +/* 0001AC40 */ 0x2D, 0x0F, 0x0F, 0x05, 0x5A, 0x03, 0x0F, 0x02, 0x00, 0xF4, 0x04, 0xFF, 0x0D, 0x02, 0x00, 0x00, +/* 0001AC50 */ 0x00, 0x02, 0x00, 0x8F, 0x02, 0x36, 0x0E, 0x01, 0x00, 0x4A, 0x0E, 0x6D, 0x0D, 0x0E, 0x03, 0x07, +/* 0001AC60 */ 0x02, 0x00, 0x59, 0x00, 0x0E, 0x5A, 0x01, 0x0B, 0x04, 0x00, 0xF4, 0x02, 0x00, 0x0D, 0x03, 0x00, +/* 0001AC70 */ 0x00, 0x00, 0x04, 0x00, 0x09, 0x08, 0x00, 0x45, 0x00, 0x0A, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, +/* 0001AC80 */ 0x00, 0xFE, 0x23, 0x03, 0xC4, 0xFE, 0xAC, 0x02, 0x26, 0xFE, 0x62, 0x4E, 0x08, 0x02, 0x00, 0x00, +/* 0001AC90 */ 0x00, 0x09, 0x00, 0x27, 0x00, 0x0A, 0x00, 0x27, 0x00, 0x22, 0x00, 0x2E, 0x00, 0x32, 0x00, 0x4C, +/* 0001ACA0 */ 0x00, 0x5D, 0x00, 0x77, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x08, 0x00, 0x15, 0x00, 0x00, 0x7F, 0x5C, +/* 0001ACB0 */ 0x0A, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0xB9, 0x01, 0x04, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x50, +/* 0001ACC0 */ 0x03, 0x31, 0xFE, 0xB4, 0x47, 0xFE, 0xB4, 0x47, 0x01, 0xFE, 0x00, 0x90, 0x06, 0x06, 0xFE, 0xB4, +/* 0001ACD0 */ 0x47, 0xFE, 0xDD, 0x02, 0xFE, 0xDD, 0x02, 0x0C, 0x0A, 0x11, 0x09, 0x53, 0x4C, 0x02, 0x01, 0x08, +/* 0001ACE0 */ 0x04, 0x06, 0x06, 0x06, 0x06, 0x10, 0x06, 0xFE, 0xA2, 0x03, 0x06, 0xFE, 0xA3, 0x03, 0x06, 0xFE, +/* 0001ACF0 */ 0xA4, 0x03, 0x01, 0xFF, 0x08, 0x05, 0xFE, 0xA5, 0x03, 0x05, 0xFE, 0xA6, 0x03, 0x05, 0xFE, 0xA7, +/* 0001AD00 */ 0x03, 0xFE, 0x68, 0x01, 0x4E, 0x0F, 0x98, 0x11, 0x0A, 0x0B, 0x00, 0x00, 0x45, 0x0F, 0x11, 0xA8, +/* 0001AD10 */ 0x11, 0x15, 0x03, 0x00, 0x0F, 0x11, 0x09, 0x49, 0x01, 0x0C, 0x03, 0x00, 0x0C, 0x02, 0x09, 0x22, +/* 0001AD20 */ 0x00, 0x8F, 0x02, 0x24, 0x12, 0x00, 0x00, 0x6D, 0x11, 0x12, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 0001AD30 */ 0x12, 0x5A, 0x01, 0x0F, 0x00, 0x00, 0xF4, 0x02, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0001AD40 */ 0x45, 0x0F, 0x11, 0x0C, 0x03, 0x00, 0x0C, 0x03, 0x09, 0x22, 0x00, 0x8F, 0x02, 0x24, 0x12, 0x00, +/* 0001AD50 */ 0x00, 0x6D, 0x11, 0x12, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x12, 0x5A, 0x01, 0x0F, 0x01, 0x00, +/* 0001AD60 */ 0xF4, 0x02, 0x11, 0x11, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, 0x0F, 0x11, 0x0C, 0x03, 0x00, +/* 0001AD70 */ 0x0C, 0x04, 0x09, 0x22, 0x00, 0x8F, 0x02, 0x24, 0x12, 0x00, 0x00, 0x6D, 0x11, 0x12, 0x02, 0x07, +/* 0001AD80 */ 0x02, 0x00, 0x59, 0x00, 0x12, 0x5A, 0x01, 0x0F, 0x02, 0x00, 0xF4, 0x02, 0x11, 0x11, 0x02, 0x00, +/* 0001AD90 */ 0x00, 0x00, 0x02, 0x00, 0x45, 0x0F, 0x11, 0xA8, 0x11, 0x15, 0x03, 0x00, 0x0D, 0x11, 0x09, 0xBB, +/* 0001ADA0 */ 0x00, 0x8F, 0x02, 0x36, 0x12, 0x01, 0x00, 0x4A, 0x12, 0x6D, 0x11, 0x12, 0x03, 0x07, 0x03, 0x00, +/* 0001ADB0 */ 0x59, 0x00, 0x12, 0x5A, 0x01, 0x0D, 0x03, 0x00, 0x5A, 0x02, 0x0F, 0x03, 0x00, 0xF4, 0x03, 0x11, +/* 0001ADC0 */ 0x11, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x0C, 0x03, 0x00, 0x11, 0x05, 0x09, 0x8D, 0x00, 0x8F, +/* 0001ADD0 */ 0x02, 0x03, 0x12, 0x02, 0x00, 0x6D, 0x11, 0x12, 0x04, 0x07, 0x04, 0x00, 0x59, 0x00, 0x12, 0x8F, +/* 0001ADE0 */ 0x02, 0x0C, 0x13, 0x03, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x06, 0x5A, 0x01, 0x0F, 0x05, 0x00, +/* 0001ADF0 */ 0xF0, 0x02, 0x13, 0x13, 0x05, 0x00, 0x5A, 0x01, 0x13, 0x04, 0x00, 0x8F, 0x02, 0x0C, 0x13, 0x03, +/* 0001AE00 */ 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x06, 0x5A, 0x01, 0x0B, 0x06, 0x00, 0xF0, 0x02, 0x13, 0x13, +/* 0001AE10 */ 0x06, 0x00, 0x5A, 0x02, 0x13, 0x04, 0x00, 0x45, 0x13, 0x07, 0x8F, 0x02, 0x36, 0x15, 0x01, 0x00, +/* 0001AE20 */ 0x4A, 0x15, 0x6D, 0x14, 0x15, 0x05, 0x07, 0x03, 0x00, 0x59, 0x00, 0x15, 0x5A, 0x01, 0x0D, 0x07, +/* 0001AE30 */ 0x00, 0x5A, 0x02, 0x09, 0x07, 0x00, 0xF4, 0x03, 0x14, 0x14, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, +/* 0001AE40 */ 0x01, 0x09, 0x01, 0x15, 0x14, 0x2D, 0x13, 0x13, 0x15, 0x2D, 0x13, 0x13, 0x08, 0x5A, 0x03, 0x13, +/* 0001AE50 */ 0x04, 0x00, 0xF4, 0x04, 0xFF, 0x11, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x45, 0x00, 0x0F, 0x09, +/* 0001AE60 */ 0x08, 0x00, 0x45, 0x00, 0x0E, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x24, 0x03, 0xFE, +/* 0001AE70 */ 0x22, 0x03, 0xFE, 0x23, 0x03, 0xFE, 0x0F, 0x03, 0xFE, 0xAC, 0x02, 0xCC, 0xFE, 0xFC, 0x47, 0x0D, +/* 0001AE80 */ 0x02, 0x00, 0x00, 0x00, 0x09, 0x00, 0x28, 0x00, 0x0A, 0x00, 0x27, 0x00, 0x08, 0x00, 0x29, 0x00, +/* 0001AE90 */ 0x22, 0x00, 0x45, 0x00, 0x08, 0x00, 0x28, 0x00, 0x22, 0x00, 0x3D, 0x00, 0x08, 0x00, 0x28, 0x00, +/* 0001AEA0 */ 0x22, 0x00, 0x3D, 0x00, 0x38, 0x00, 0x53, 0x00, 0x8D, 0x00, 0x84, 0x00, 0x06, 0x00, 0x21, 0x00, +/* 0001AEB0 */ 0x08, 0x00, 0x15, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x07, 0x00, 0xFE, 0xAD, 0x01, +/* 0001AEC0 */ 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x26, 0x03, 0x30, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0xA0, +/* 0001AED0 */ 0x46, 0xFE, 0xA0, 0x46, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0xA0, 0x46, 0xDF, 0xDF, 0x06, +/* 0001AEE0 */ 0x06, 0x0A, 0x04, 0x20, 0x1C, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x09, 0x01, 0x00, 0x01, +/* 0001AEF0 */ 0x02, 0x01, 0x35, 0x01, 0x01, 0x79, 0x4E, 0x07, 0x4E, 0x08, 0x8F, 0x02, 0x24, 0x0B, 0x00, 0x00, +/* 0001AF00 */ 0x6D, 0x0A, 0x0B, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0B, 0x5A, 0x01, 0x06, 0x00, 0x00, 0xF4, +/* 0001AF10 */ 0x02, 0x0A, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x07, 0x0A, 0x13, 0x03, 0x00, 0x07, +/* 0001AF20 */ 0x02, 0x09, 0x06, 0x00, 0x45, 0x00, 0x02, 0x09, 0x43, 0x00, 0x8F, 0x02, 0x36, 0x0B, 0x01, 0x00, +/* 0001AF30 */ 0x4A, 0x0B, 0x6D, 0x0A, 0x0B, 0x01, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0B, 0x5A, 0x01, 0x03, 0x01, +/* 0001AF40 */ 0x00, 0x5A, 0x02, 0x04, 0x01, 0x00, 0xF4, 0x03, 0x0A, 0x0A, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, +/* 0001AF50 */ 0x33, 0x0A, 0x0A, 0x05, 0x45, 0x08, 0x0A, 0x12, 0x03, 0x00, 0x08, 0x07, 0x09, 0x06, 0x00, 0x45, +/* 0001AF60 */ 0x00, 0x08, 0x09, 0x03, 0x00, 0x46, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, +/* 0001AF70 */ 0x25, 0x03, 0x2C, 0xFE, 0xBA, 0x46, 0x06, 0x04, 0x00, 0x00, 0x00, 0x22, 0x00, 0x2F, 0x00, 0x08, +/* 0001AF80 */ 0x00, 0x20, 0x00, 0x06, 0x00, 0x25, 0x00, 0x2D, 0x00, 0x2A, 0x00, 0x16, 0x00, 0x26, 0x00, 0x00, +/* 0001AF90 */ 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x07, 0x00, 0xFE, 0x9D, 0x01, 0x08, 0xA2, 0x41, 0xC1, 0x01, +/* 0001AFA0 */ 0xFE, 0x25, 0x03, 0x2F, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0x09, 0x45, 0xFE, 0x09, 0x45, 0x01, +/* 0001AFB0 */ 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0x09, 0x45, 0xFE, 0x8C, 0x01, 0xFE, 0x8C, 0x01, 0x08, 0x04, +/* 0001AFC0 */ 0x08, 0x06, 0x33, 0x2E, 0x02, 0x05, 0x04, 0x02, 0x02, 0x02, 0x02, 0x07, 0x08, 0x01, 0x00, 0xC8, +/* 0001AFD0 */ 0x4E, 0x05, 0x4E, 0x06, 0x8F, 0x02, 0x0B, 0x08, 0x00, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, +/* 0001AFE0 */ 0x5A, 0x01, 0x04, 0x00, 0x00, 0xF0, 0x02, 0x08, 0x08, 0x00, 0x00, 0x45, 0x05, 0x08, 0x8F, 0x02, +/* 0001AFF0 */ 0x21, 0x08, 0x01, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x05, 0x01, 0x00, 0xF0, +/* 0001B000 */ 0x02, 0x08, 0x08, 0x01, 0x00, 0x0E, 0x09, 0x00, 0x08, 0x45, 0x00, 0x03, 0x09, 0x87, 0x00, 0x09, +/* 0001B010 */ 0x26, 0x00, 0x14, 0x1B, 0x00, 0x05, 0x03, 0x8F, 0x02, 0x20, 0x08, 0x02, 0x00, 0x07, 0x02, 0x00, +/* 0001B020 */ 0x59, 0x00, 0x02, 0x5A, 0x01, 0x05, 0x02, 0x00, 0xF0, 0x02, 0x08, 0x08, 0x02, 0x00, 0x0F, 0x06, +/* 0001B030 */ 0x00, 0x08, 0x45, 0x00, 0x05, 0x09, 0x5E, 0x00, 0x8F, 0x02, 0x36, 0x09, 0x03, 0x00, 0x4A, 0x09, +/* 0001B040 */ 0x6D, 0x08, 0x09, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x09, 0x8F, 0x02, 0x36, 0x0B, 0x03, 0x00, +/* 0001B050 */ 0x4A, 0x0B, 0x6D, 0x0A, 0x0B, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0B, 0x5A, 0x01, 0x05, 0x04, +/* 0001B060 */ 0x00, 0xF4, 0x02, 0x0A, 0x0A, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x5A, 0x01, 0x0A, 0x03, 0x00, +/* 0001B070 */ 0xF4, 0x02, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x45, 0x06, 0x08, 0x12, 0x03, 0x00, +/* 0001B080 */ 0x05, 0x03, 0x09, 0x09, 0x00, 0x28, 0x00, 0x06, 0x09, 0x0B, 0x00, 0x09, 0x06, 0x00, 0x45, 0x00, +/* 0001B090 */ 0x06, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x26, 0x1D, 0xFE, 0x24, 0x45, 0x0A, 0x04, 0x00, +/* 0001B0A0 */ 0x00, 0x00, 0x1A, 0x00, 0x26, 0x00, 0x1B, 0x00, 0x25, 0x00, 0x09, 0x00, 0x1D, 0x00, 0x20, 0x00, +/* 0001B0B0 */ 0x39, 0x00, 0x06, 0x00, 0x2A, 0x00, 0x45, 0x00, 0x30, 0x00, 0x08, 0x00, 0x22, 0x00, 0x09, 0x00, +/* 0001B0C0 */ 0x31, 0x00, 0x08, 0x00, 0x22, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0x01, 0x00, 0x10, 0x07, 0x00, 0xFE, +/* 0001B0D0 */ 0x99, 0x01, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x24, 0x03, 0x2E, 0xFF, 0x01, 0x00, 0x40, 0x02, +/* 0001B0E0 */ 0xFE, 0xA2, 0x44, 0xFE, 0xA2, 0x44, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0xA2, 0x44, 0x5C, +/* 0001B0F0 */ 0x5C, 0x03, 0x03, 0x05, 0x03, 0x10, 0x0F, 0x02, 0x01, 0x01, 0x04, 0x08, 0x33, 0xA8, 0x05, 0x15, +/* 0001B100 */ 0x03, 0x00, 0x03, 0x05, 0x09, 0x1D, 0x00, 0x8F, 0x02, 0x08, 0x05, 0x00, 0x00, 0x07, 0x02, 0x00, +/* 0001B110 */ 0x59, 0x00, 0x02, 0x5A, 0x01, 0x03, 0x00, 0x00, 0xF0, 0x02, 0x05, 0x05, 0x00, 0x00, 0x45, 0x00, +/* 0001B120 */ 0x05, 0x09, 0x05, 0x00, 0xA8, 0x05, 0x46, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, +/* 0001B130 */ 0xFE, 0xC4, 0x44, 0x02, 0x00, 0x00, 0x00, 0x00, 0x31, 0x00, 0x39, 0x00, 0x00, 0x7F, 0x5C, 0x08, +/* 0001B140 */ 0x01, 0x00, 0x10, 0x07, 0x00, 0xFE, 0x95, 0x01, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x23, 0x03, +/* 0001B150 */ 0x2D, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0x4A, 0x44, 0xFE, 0x4A, 0x44, 0x01, 0xFE, 0x00, 0x90, +/* 0001B160 */ 0x02, 0x02, 0xFE, 0x4A, 0x44, 0x4D, 0x4D, 0x03, 0x03, 0x05, 0x03, 0x10, 0x0F, 0x02, 0x01, 0x01, +/* 0001B170 */ 0x04, 0x08, 0x33, 0xA8, 0x05, 0x15, 0x03, 0x00, 0x03, 0x05, 0x09, 0x1D, 0x00, 0x8F, 0x02, 0x0B, +/* 0001B180 */ 0x05, 0x00, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x03, 0x00, 0x00, 0xF0, 0x02, +/* 0001B190 */ 0x05, 0x05, 0x00, 0x00, 0x45, 0x00, 0x05, 0x09, 0x05, 0x00, 0xA9, 0x05, 0x46, 0x00, 0x05, 0x09, +/* 0001B1A0 */ 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x64, 0x44, 0x02, 0x00, 0x00, 0x00, 0x00, 0x31, 0x00, +/* 0001B1B0 */ 0x32, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0x01, 0x00, 0x10, 0x07, 0x00, 0xFE, 0x91, 0x01, 0x08, 0xA2, +/* 0001B1C0 */ 0x41, 0xC1, 0x01, 0xFE, 0x22, 0x03, 0x2C, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0xEC, 0x43, 0xFE, +/* 0001B1D0 */ 0xEC, 0x43, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0xEC, 0x43, 0x53, 0x53, 0x03, 0x03, 0x05, +/* 0001B1E0 */ 0x03, 0x10, 0x0F, 0x02, 0x01, 0x01, 0x04, 0x08, 0x33, 0xA8, 0x05, 0x15, 0x03, 0x00, 0x03, 0x05, +/* 0001B1F0 */ 0x09, 0x1D, 0x00, 0x8F, 0x02, 0x0C, 0x05, 0x00, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x5A, +/* 0001B200 */ 0x01, 0x03, 0x00, 0x00, 0xF0, 0x02, 0x05, 0x05, 0x00, 0x00, 0x45, 0x00, 0x05, 0x09, 0x05, 0x00, +/* 0001B210 */ 0xA8, 0x05, 0x46, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x06, 0x44, 0x02, +/* 0001B220 */ 0x00, 0x00, 0x00, 0x00, 0x31, 0x00, 0x38, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x07, +/* 0001B230 */ 0x00, 0xFE, 0x8A, 0x01, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x21, 0x03, 0x2B, 0xFF, 0x01, 0x00, +/* 0001B240 */ 0x40, 0x02, 0xFE, 0x36, 0x43, 0xFE, 0x36, 0x43, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0x36, +/* 0001B250 */ 0x43, 0xAB, 0xAB, 0x04, 0x04, 0x06, 0x03, 0x17, 0x16, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, +/* 0001B260 */ 0x05, 0x07, 0x08, 0x55, 0x14, 0x03, 0x00, 0x04, 0x02, 0x09, 0x1A, 0x00, 0x8F, 0x02, 0x03, 0x07, +/* 0001B270 */ 0x00, 0x00, 0x6D, 0x06, 0x07, 0x00, 0x07, 0x01, 0x00, 0x59, 0x00, 0x07, 0xF4, 0x01, 0xFF, 0x06, +/* 0001B280 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0x06, 0x15, 0x03, 0x00, 0x04, 0x06, 0x09, 0x1D, 0x00, +/* 0001B290 */ 0x8F, 0x02, 0x09, 0x06, 0x01, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x03, 0x5A, 0x01, 0x04, 0x01, +/* 0001B2A0 */ 0x00, 0xF0, 0x02, 0x06, 0x06, 0x01, 0x00, 0x45, 0x00, 0x06, 0x09, 0x05, 0x00, 0xA8, 0x06, 0x46, +/* 0001B2B0 */ 0x00, 0x06, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xAA, 0x02, 0xFE, 0x50, 0x43, 0x04, +/* 0001B2C0 */ 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x22, 0x00, 0x1A, 0x00, 0x36, 0x00, 0x31, 0x00, 0x38, 0x00, +/* 0001B2D0 */ 0x00, 0x7E, 0x5D, 0x09, 0xC1, 0x53, 0x5A, 0x4B, 0x00, 0xFE, 0x4C, 0x01, 0x1A, 0xA2, 0x41, 0xC1, +/* 0001B2E0 */ 0x00, 0xFE, 0x5A, 0x03, 0x29, 0xFE, 0x6C, 0x39, 0xFE, 0x6C, 0x39, 0x01, 0xFE, 0x00, 0x90, 0x05, +/* 0001B2F0 */ 0x05, 0xFE, 0x6C, 0x39, 0xFE, 0xA5, 0x09, 0xFE, 0xA5, 0x09, 0x05, 0xFE, 0xE0, 0x01, 0xFE, 0x98, +/* 0001B300 */ 0x03, 0xFE, 0x99, 0x03, 0xFE, 0x9A, 0x03, 0xFE, 0x9B, 0x03, 0x10, 0x0B, 0x16, 0x05, 0x7A, 0x76, +/* 0001B310 */ 0x02, 0x01, 0x08, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x01, 0x02, 0x13, 0x14, 0x15, 0x16, 0x05, 0xFE, +/* 0001B320 */ 0x9C, 0x03, 0x08, 0x06, 0xFE, 0x9D, 0x03, 0x07, 0x05, 0xFE, 0x9E, 0x03, 0x01, 0x02, 0x05, 0xFE, +/* 0001B330 */ 0x9F, 0x03, 0x01, 0xFF, 0x01, 0x00, 0xFE, 0xF6, 0x01, 0x96, 0x02, 0x0D, 0x4E, 0x0F, 0x4E, 0x10, +/* 0001B340 */ 0x4E, 0x11, 0x4E, 0x12, 0x4E, 0x18, 0x96, 0x03, 0x18, 0x4E, 0x18, 0x96, 0x04, 0x18, 0x4E, 0x18, +/* 0001B350 */ 0x96, 0x05, 0x18, 0x4E, 0x18, 0x96, 0x06, 0x18, 0x93, 0x02, 0x18, 0x00, 0x00, 0x5F, 0x18, 0x18, +/* 0001B360 */ 0x00, 0x45, 0x0F, 0x18, 0xA8, 0x18, 0x96, 0x03, 0x18, 0x14, 0x03, 0x00, 0x0F, 0x02, 0x09, 0x24, +/* 0001B370 */ 0x00, 0x8F, 0x01, 0x09, 0x18, 0x01, 0x00, 0x4A, 0x18, 0x07, 0x03, 0x00, 0x59, 0x00, 0x03, 0x5A, +/* 0001B380 */ 0x01, 0x0B, 0x00, 0x00, 0x5A, 0x02, 0x0C, 0x00, 0x00, 0xF0, 0x03, 0x18, 0x18, 0x00, 0x00, 0x96, +/* 0001B390 */ 0x03, 0x18, 0x09, 0x21, 0x00, 0x8F, 0x01, 0x0A, 0x18, 0x02, 0x00, 0x4A, 0x18, 0x07, 0x03, 0x00, +/* 0001B3A0 */ 0x59, 0x00, 0x03, 0x5A, 0x01, 0x0B, 0x01, 0x00, 0x5A, 0x02, 0x0C, 0x01, 0x00, 0xF0, 0x03, 0x18, +/* 0001B3B0 */ 0x18, 0x01, 0x00, 0x96, 0x03, 0x18, 0x93, 0x03, 0x18, 0x03, 0x00, 0x5F, 0x18, 0x18, 0x01, 0x96, +/* 0001B3C0 */ 0x04, 0x18, 0x8F, 0x02, 0x35, 0x18, 0x04, 0x00, 0x4A, 0x18, 0x07, 0x02, 0x00, 0x59, 0x00, 0x03, +/* 0001B3D0 */ 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x93, 0x04, 0x1A, +/* 0001B3E0 */ 0x05, 0x00, 0x7B, 0x1A, 0x19, 0x02, 0x5A, 0x01, 0x19, 0x02, 0x00, 0xF0, 0x02, 0x18, 0x18, 0x02, +/* 0001B3F0 */ 0x00, 0x96, 0x05, 0x18, 0x96, 0x06, 0x06, 0x8F, 0x02, 0x36, 0x19, 0x06, 0x00, 0x4A, 0x19, 0x6D, +/* 0001B400 */ 0x18, 0x19, 0x03, 0x07, 0x03, 0x00, 0x59, 0x00, 0x19, 0x5A, 0x01, 0x0E, 0x03, 0x00, 0xD6, 0x00, +/* 0001B410 */ 0x1A, 0x5A, 0x02, 0x1A, 0x03, 0x00, 0xF4, 0x03, 0xFF, 0x18, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, +/* 0001B420 */ 0x93, 0x06, 0x18, 0x07, 0x00, 0xA7, 0x18, 0x18, 0x04, 0x00, 0x00, 0x11, 0x03, 0x00, 0x18, 0x07, +/* 0001B430 */ 0x09, 0xE2, 0x00, 0x8F, 0x02, 0x36, 0x19, 0x06, 0x00, 0x4A, 0x19, 0x6D, 0x18, 0x19, 0x05, 0x07, +/* 0001B440 */ 0x03, 0x00, 0x59, 0x00, 0x19, 0x93, 0x04, 0x1A, 0x05, 0x00, 0x5A, 0x01, 0x1A, 0x04, 0x00, 0x5A, +/* 0001B450 */ 0x02, 0x08, 0x04, 0x00, 0xF4, 0x03, 0x18, 0x18, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x45, 0x10, +/* 0001B460 */ 0x18, 0x14, 0x03, 0x00, 0x10, 0x09, 0x09, 0x14, 0x00, 0x93, 0x04, 0x19, 0x05, 0x00, 0x93, 0x06, +/* 0001B470 */ 0x1A, 0x07, 0x00, 0x2D, 0x18, 0x19, 0x1A, 0x96, 0x04, 0x18, 0x09, 0x71, 0x00, 0x8F, 0x02, 0x36, +/* 0001B480 */ 0x19, 0x06, 0x00, 0x4A, 0x19, 0x6D, 0x18, 0x19, 0x06, 0x07, 0x04, 0x00, 0x59, 0x00, 0x19, 0x93, +/* 0001B490 */ 0x04, 0x1A, 0x05, 0x00, 0x5A, 0x01, 0x1A, 0x05, 0x00, 0x5A, 0x02, 0x0A, 0x05, 0x00, 0x5A, 0x03, +/* 0001B4A0 */ 0x10, 0x05, 0x00, 0xF4, 0x04, 0x18, 0x18, 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, 0x45, 0x11, 0x18, +/* 0001B4B0 */ 0x8F, 0x02, 0x36, 0x19, 0x06, 0x00, 0x4A, 0x19, 0x6D, 0x18, 0x19, 0x07, 0x07, 0x03, 0x00, 0x59, +/* 0001B4C0 */ 0x00, 0x19, 0x93, 0x04, 0x1A, 0x05, 0x00, 0x5A, 0x01, 0x1A, 0x06, 0x00, 0x5A, 0x02, 0x10, 0x06, +/* 0001B4D0 */ 0x00, 0xF4, 0x03, 0x18, 0x18, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x45, 0x12, 0x18, 0x93, 0x06, +/* 0001B4E0 */ 0x18, 0x07, 0x00, 0x2D, 0x18, 0x11, 0x18, 0x2D, 0x18, 0x18, 0x12, 0x96, 0x04, 0x18, 0x8F, 0x02, +/* 0001B4F0 */ 0x03, 0x19, 0x08, 0x00, 0x6D, 0x18, 0x19, 0x08, 0x07, 0x02, 0x00, 0x59, 0x00, 0x19, 0x93, 0x04, +/* 0001B500 */ 0x1A, 0x05, 0x00, 0x5A, 0x01, 0x1A, 0x07, 0x00, 0xF4, 0x02, 0x18, 0x18, 0x08, 0x00, 0x00, 0x00, +/* 0001B510 */ 0x07, 0x00, 0x96, 0x04, 0x18, 0x93, 0x05, 0x18, 0x09, 0x00, 0x93, 0x04, 0x19, 0x05, 0x00, 0x77, +/* 0001B520 */ 0x19, 0x18, 0x09, 0x93, 0x05, 0x00, 0x09, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x01, +/* 0001B530 */ 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9D, 0x03, +/* 0001B540 */ 0x00, 0x00, 0xFE, 0xA0, 0x03, 0xFE, 0x0D, 0x02, 0xFE, 0x9D, 0x03, 0x93, 0xD1, 0xFE, 0x0A, 0x03, +/* 0001B550 */ 0xFE, 0x5E, 0x01, 0xFE, 0x5E, 0x01, 0xFE, 0xEE, 0x01, 0xFE, 0x0D, 0x02, 0xFE, 0xC5, 0x39, 0x14, +/* 0001B560 */ 0x1F, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x2F, 0x00, 0x05, 0x00, 0x0F, 0x00, 0x08, 0x00, 0x28, 0x00, +/* 0001B570 */ 0x24, 0x00, 0x55, 0x00, 0x21, 0x00, 0x4C, 0x00, 0x0C, 0x00, 0x24, 0x00, 0x32, 0x00, 0x3A, 0x00, +/* 0001B580 */ 0x03, 0x00, 0x27, 0x00, 0x29, 0x00, 0x56, 0x05, 0x13, 0x00, 0x31, 0x00, 0x2E, 0x00, 0x46, 0x00, +/* 0001B590 */ 0x08, 0x00, 0x2B, 0x00, 0x14, 0x00, 0x48, 0x00, 0x33, 0x00, 0x50, 0x00, 0x2E, 0x00, 0x4E, 0x00, +/* 0001B5A0 */ 0x10, 0x00, 0x5C, 0x00, 0x27, 0x00, 0x4D, 0x00, 0x0E, 0x00, 0x25, 0x00, 0x0A, 0x00, 0x13, 0x00, +/* 0001B5B0 */ 0x00, 0xB5, 0xB5, 0x01, 0x00, 0x7F, 0x5C, 0x0E, 0xC1, 0x43, 0x50, 0x03, 0x00, 0xFE, 0x58, 0x01, +/* 0001B5C0 */ 0x29, 0xA2, 0x41, 0xD1, 0x00, 0x2A, 0xFE, 0x72, 0x3B, 0xFE, 0x72, 0x3B, 0x41, 0xFE, 0x00, 0x90, +/* 0001B5D0 */ 0x02, 0x02, 0xFE, 0x72, 0x3B, 0xFE, 0x29, 0x05, 0xFE, 0x29, 0x05, 0x0B, 0x08, 0x0F, 0x04, 0x6C, +/* 0001B5E0 */ 0x61, 0x03, 0x03, 0x01, 0x06, 0x08, 0x08, 0x08, 0x08, 0x08, 0x01, 0x0E, 0x0F, 0x01, 0x00, 0x06, +/* 0001B5F0 */ 0xFE, 0x47, 0x03, 0x08, 0x01, 0xFF, 0x06, 0xFE, 0x95, 0x03, 0x06, 0xFE, 0xA1, 0x03, 0xFE, 0xC4, +/* 0001B600 */ 0x01, 0x4E, 0x09, 0x4E, 0x0A, 0x4E, 0x0B, 0x4E, 0x0C, 0x4E, 0x0D, 0x8F, 0x03, 0x03, 0x11, 0x00, +/* 0001B610 */ 0x00, 0x6D, 0x10, 0x11, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x11, 0x8F, 0x03, 0x03, 0x12, 0x00, +/* 0001B620 */ 0x00, 0x5F, 0x12, 0x12, 0x01, 0x98, 0x12, 0x12, 0x08, 0x00, 0x00, 0x5A, 0x01, 0x12, 0x00, 0x00, +/* 0001B630 */ 0x8F, 0x01, 0x04, 0x12, 0x01, 0x00, 0x4A, 0x12, 0x5A, 0x02, 0x12, 0x00, 0x00, 0xF4, 0x03, 0x10, +/* 0001B640 */ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x09, 0x10, 0x98, 0x10, 0x09, 0x02, 0x01, 0x00, +/* 0001B650 */ 0x45, 0x0A, 0x10, 0x45, 0x0B, 0x03, 0x8F, 0x01, 0x03, 0x10, 0x02, 0x00, 0x4A, 0x10, 0x5F, 0x10, +/* 0001B660 */ 0x10, 0x02, 0x0E, 0xC0, 0x00, 0x10, 0x8F, 0x02, 0x0B, 0x10, 0x03, 0x00, 0x4A, 0x10, 0x07, 0x03, +/* 0001B670 */ 0x00, 0x59, 0x00, 0x04, 0x8F, 0x01, 0x03, 0x11, 0x02, 0x00, 0x4A, 0x11, 0x5F, 0x11, 0x11, 0x03, +/* 0001B680 */ 0x5A, 0x01, 0x11, 0x01, 0x00, 0x5A, 0x02, 0x08, 0x01, 0x00, 0xF0, 0x03, 0x10, 0x10, 0x01, 0x00, +/* 0001B690 */ 0x45, 0x0C, 0x10, 0xA8, 0x10, 0x15, 0x03, 0x00, 0x0C, 0x10, 0x09, 0x89, 0x00, 0x15, 0x03, 0x00, +/* 0001B6A0 */ 0x0C, 0x03, 0x09, 0x50, 0x00, 0x8F, 0x03, 0x36, 0x11, 0x04, 0x00, 0x4A, 0x11, 0x6D, 0x10, 0x11, +/* 0001B6B0 */ 0x04, 0x07, 0x03, 0x00, 0x59, 0x00, 0x11, 0x5A, 0x01, 0x09, 0x02, 0x00, 0x5A, 0x02, 0x0C, 0x02, +/* 0001B6C0 */ 0x00, 0xF4, 0x03, 0x10, 0x10, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x15, 0x03, 0x00, 0x10, 0x05, +/* 0001B6D0 */ 0x09, 0x1F, 0x00, 0x45, 0x0A, 0x0C, 0x45, 0x10, 0x06, 0x01, 0x09, 0x01, 0x11, 0x08, 0x2D, 0x10, +/* 0001B6E0 */ 0x10, 0x11, 0x2D, 0x10, 0x10, 0x06, 0x01, 0x09, 0x01, 0x11, 0x0A, 0x2D, 0x10, 0x10, 0x11, 0x45, +/* 0001B6F0 */ 0x0B, 0x10, 0x09, 0x31, 0x00, 0x8F, 0x03, 0x36, 0x11, 0x04, 0x00, 0x4A, 0x11, 0x6D, 0x10, 0x11, +/* 0001B700 */ 0x05, 0x07, 0x03, 0x00, 0x59, 0x00, 0x11, 0x5A, 0x01, 0x09, 0x03, 0x00, 0x5A, 0x02, 0x07, 0x03, +/* 0001B710 */ 0x00, 0xF4, 0x03, 0x10, 0x10, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x15, 0x03, 0x00, 0x10, 0x05, +/* 0001B720 */ 0x09, 0x03, 0x00, 0x45, 0x0A, 0x07, 0x8F, 0x03, 0x36, 0x11, 0x04, 0x00, 0x4A, 0x11, 0x6D, 0x10, +/* 0001B730 */ 0x11, 0x06, 0x07, 0x03, 0x00, 0x59, 0x00, 0x11, 0x8F, 0x01, 0x02, 0x12, 0x05, 0x00, 0x5A, 0x01, +/* 0001B740 */ 0x12, 0x04, 0x00, 0x5A, 0x02, 0x08, 0x04, 0x00, 0xF4, 0x03, 0x10, 0x10, 0x06, 0x00, 0x00, 0x00, +/* 0001B750 */ 0x04, 0x00, 0x0E, 0x4B, 0x00, 0x10, 0x8F, 0x01, 0x02, 0x10, 0x05, 0x00, 0x98, 0x10, 0x10, 0x08, +/* 0001B760 */ 0x02, 0x00, 0x45, 0x0D, 0x10, 0x8F, 0x03, 0x36, 0x11, 0x04, 0x00, 0x4A, 0x11, 0x6D, 0x10, 0x11, +/* 0001B770 */ 0x07, 0x07, 0x03, 0x00, 0x59, 0x00, 0x11, 0x5A, 0x01, 0x09, 0x05, 0x00, 0x5A, 0x02, 0x0D, 0x05, +/* 0001B780 */ 0x00, 0xF4, 0x03, 0x10, 0x10, 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, 0x15, 0x03, 0x00, 0x10, 0x05, +/* 0001B790 */ 0x09, 0x0E, 0x00, 0x15, 0x03, 0x00, 0x0D, 0x0A, 0x09, 0x06, 0x00, 0x45, 0x0A, 0x0D, 0x45, 0x0B, +/* 0001B7A0 */ 0x03, 0x8F, 0x01, 0x05, 0x10, 0x06, 0x00, 0x4A, 0x10, 0x9D, 0x0A, 0x10, 0x08, 0x00, 0x00, 0x8F, +/* 0001B7B0 */ 0x01, 0x06, 0x11, 0x07, 0x00, 0x4A, 0x11, 0x2D, 0x10, 0x11, 0x0B, 0x01, 0x43, 0x01, 0x01, 0x06, +/* 0001B7C0 */ 0x10, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x00, 0x02, 0xFE, 0x29, 0x02, 0xFE, 0x97, 0x03, 0xFE, 0x97, +/* 0001B7D0 */ 0x03, 0xFE, 0x0F, 0x03, 0xFE, 0x0F, 0x03, 0xB7, 0xFE, 0x0F, 0x03, 0xFE, 0x8F, 0x3B, 0x15, 0x0A, +/* 0001B7E0 */ 0x00, 0x00, 0x00, 0x3F, 0x00, 0x65, 0x00, 0x09, 0x00, 0x2A, 0x00, 0x03, 0x00, 0x31, 0x00, 0x10, +/* 0001B7F0 */ 0x00, 0x23, 0x00, 0x2D, 0x00, 0x50, 0x00, 0x0A, 0x00, 0x38, 0x00, 0x08, 0x00, 0x35, 0x00, 0x2E, +/* 0001B800 */ 0x00, 0x58, 0x00, 0x03, 0x00, 0x34, 0x00, 0x1F, 0x00, 0x66, 0x00, 0x2E, 0x00, 0x4C, 0x00, 0x03, +/* 0001B810 */ 0x00, 0x53, 0x00, 0x30, 0x00, 0x36, 0x00, 0x0F, 0x00, 0x33, 0x00, 0x2E, 0x00, 0x4E, 0x00, 0x08, +/* 0001B820 */ 0x00, 0x36, 0x00, 0x03, 0x00, 0x2E, 0x00, 0x03, 0x00, 0x64, 0x00, 0x0E, 0x00, 0x21, 0x00, 0x14, +/* 0001B830 */ 0x00, 0x3A, 0x00, 0x00, 0x7F, 0x7C, 0x09, 0xC3, 0x43, 0x50, 0x13, 0x00, 0xFE, 0x1C, 0x01, 0x22, +/* 0001B840 */ 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x59, 0x03, 0x28, 0xFE, 0x27, 0x32, 0xFE, 0x27, 0x32, 0x01, 0xFE, +/* 0001B850 */ 0x00, 0x90, 0x03, 0x03, 0xFE, 0x27, 0x32, 0xFE, 0x1E, 0x04, 0xFE, 0x1E, 0x04, 0x11, 0x0B, 0x16, +/* 0001B860 */ 0x05, 0x64, 0x52, 0x23, 0x02, 0x01, 0x04, 0x01, 0x01, 0x05, 0x05, 0x05, 0x05, 0x02, 0x15, 0x16, +/* 0001B870 */ 0x6A, 0xEA, 0x06, 0xFE, 0x95, 0x03, 0x01, 0xFF, 0x01, 0x04, 0x0C, 0x01, 0x02, 0x0B, 0x01, 0x01, +/* 0001B880 */ 0x06, 0xFE, 0x47, 0x03, 0x01, 0x03, 0xFE, 0x73, 0x01, 0x4E, 0x0D, 0x4E, 0x0E, 0x4E, 0x0F, 0x4E, +/* 0001B890 */ 0x10, 0x4E, 0x11, 0x4E, 0x12, 0x4E, 0x13, 0x4E, 0x14, 0xA7, 0x18, 0x0B, 0x00, 0x00, 0x00, 0x45, +/* 0001B8A0 */ 0x0D, 0x18, 0x8F, 0x02, 0x36, 0x19, 0x00, 0x00, 0x4A, 0x19, 0x6D, 0x18, 0x19, 0x01, 0x07, 0x03, +/* 0001B8B0 */ 0x00, 0x59, 0x00, 0x19, 0x5A, 0x01, 0x0B, 0x00, 0x00, 0x45, 0x1A, 0x02, 0x01, 0x09, 0x01, 0x1B, +/* 0001B8C0 */ 0x0C, 0x2D, 0x1A, 0x1A, 0x1B, 0x2D, 0x1A, 0x1A, 0x02, 0x5A, 0x02, 0x1A, 0x00, 0x00, 0xF4, 0x03, +/* 0001B8D0 */ 0x18, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x0E, 0x18, 0x15, 0x03, 0x00, 0x0E, 0x03, +/* 0001B8E0 */ 0x09, 0xBE, 0x00, 0x2D, 0x18, 0x0E, 0x04, 0x45, 0x0F, 0x18, 0x45, 0x10, 0x0F, 0x45, 0x11, 0x0F, +/* 0001B8F0 */ 0x45, 0x12, 0x05, 0xED, 0x00, 0xEE, 0x00, 0x0F, 0x76, 0x00, 0x12, 0x8F, 0x02, 0x36, 0x19, 0x00, +/* 0001B900 */ 0x00, 0x4A, 0x19, 0x6D, 0x18, 0x19, 0x02, 0x07, 0x04, 0x00, 0x59, 0x00, 0x19, 0x5A, 0x01, 0x0B, +/* 0001B910 */ 0x01, 0x00, 0x5A, 0x02, 0x02, 0x01, 0x00, 0x5A, 0x03, 0x11, 0x01, 0x00, 0xF4, 0x04, 0x18, 0x18, +/* 0001B920 */ 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, 0x13, 0x18, 0x14, 0x03, 0x00, 0x13, 0x03, 0x09, 0x0A, +/* 0001B930 */ 0x00, 0x33, 0x19, 0x0D, 0x11, 0x45, 0x18, 0x19, 0x09, 0x07, 0x00, 0x33, 0x19, 0x13, 0x11, 0x46, +/* 0001B940 */ 0x18, 0x19, 0x45, 0x14, 0x18, 0x14, 0x03, 0x00, 0x14, 0x06, 0x09, 0x06, 0x00, 0x45, 0x12, 0x07, +/* 0001B950 */ 0x09, 0x1B, 0x00, 0x14, 0x03, 0x00, 0x13, 0x03, 0x09, 0x09, 0x00, 0x45, 0x10, 0x0D, 0x45, 0x12, +/* 0001B960 */ 0x07, 0x09, 0x0A, 0x00, 0x45, 0x10, 0x13, 0x2D, 0x18, 0x13, 0x08, 0x45, 0x11, 0x18, 0x09, 0x84, +/* 0001B970 */ 0xFF, 0xEF, 0x00, 0x8F, 0x02, 0x36, 0x19, 0x00, 0x00, 0x4A, 0x19, 0x6D, 0x18, 0x19, 0x03, 0x07, +/* 0001B980 */ 0x04, 0x00, 0x59, 0x00, 0x19, 0x5A, 0x01, 0x0B, 0x02, 0x00, 0x5A, 0x02, 0x0F, 0x02, 0x00, 0x5A, +/* 0001B990 */ 0x03, 0x10, 0x02, 0x00, 0xF4, 0x04, 0x00, 0x18, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x09, 0x59, +/* 0001B9A0 */ 0x00, 0x8F, 0x02, 0x36, 0x19, 0x00, 0x00, 0x4A, 0x19, 0x6D, 0x18, 0x19, 0x04, 0x07, 0x03, 0x00, +/* 0001B9B0 */ 0x59, 0x00, 0x19, 0x5A, 0x01, 0x0B, 0x03, 0x00, 0x45, 0x1A, 0x02, 0x01, 0x09, 0x01, 0x1B, 0x0C, +/* 0001B9C0 */ 0x2D, 0x1A, 0x1A, 0x1B, 0x5A, 0x02, 0x1A, 0x03, 0x00, 0xF4, 0x03, 0x18, 0x18, 0x04, 0x00, 0x00, +/* 0001B9D0 */ 0x00, 0x03, 0x00, 0x45, 0x0E, 0x18, 0x15, 0x03, 0x00, 0x0E, 0x03, 0x09, 0x15, 0x00, 0x2D, 0x18, +/* 0001B9E0 */ 0x0E, 0x0A, 0x14, 0x03, 0x00, 0x18, 0x0D, 0x09, 0x09, 0x00, 0x45, 0x00, 0x09, 0x09, 0x0A, 0x00, +/* 0001B9F0 */ 0x09, 0x05, 0x00, 0xA8, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xD1, 0xFE, 0x0A, 0x03, +/* 0001BA00 */ 0xFE, 0x0A, 0x03, 0xFE, 0x5E, 0x01, 0xFE, 0x0A, 0x03, 0xFE, 0x4B, 0x32, 0x17, 0x10, 0x00, 0x00, +/* 0001BA10 */ 0x00, 0x09, 0x00, 0x51, 0x00, 0x39, 0x00, 0x3A, 0x00, 0x08, 0x00, 0x1E, 0x00, 0x07, 0x00, 0x23, +/* 0001BA20 */ 0x00, 0x03, 0x00, 0x1D, 0x00, 0x03, 0x00, 0x1B, 0x00, 0x07, 0x00, 0x25, 0x00, 0x04, 0x00, 0x19, +/* 0001BA30 */ 0x00, 0x2E, 0x00, 0x3E, 0x00, 0x1C, 0x00, 0x39, 0x00, 0x08, 0x00, 0x25, 0x00, 0x06, 0x00, 0x24, +/* 0001BA40 */ 0x00, 0x08, 0x00, 0x24, 0x00, 0x03, 0x00, 0x20, 0x00, 0x06, 0x00, 0x3A, 0x00, 0x03, 0x00, 0x1D, +/* 0001BA50 */ 0x00, 0x0C, 0x00, 0x38, 0x00, 0x2E, 0x00, 0x75, 0x00, 0x35, 0x00, 0x35, 0x00, 0x14, 0x00, 0x32, +/* 0001BA60 */ 0x00, 0x09, 0x00, 0x28, 0x00, 0x07, 0x00, 0x20, 0x00, 0x00, 0x7F, 0x7C, 0x0B, 0xC3, 0x43, 0x50, +/* 0001BA70 */ 0x13, 0x00, 0xFB, 0x1A, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x57, 0x03, 0x27, 0xFE, 0x85, 0x2D, 0xFE, +/* 0001BA80 */ 0x85, 0x2D, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, 0x85, 0x2D, 0xFE, 0x06, 0x03, 0xFE, 0x06, +/* 0001BA90 */ 0x03, 0x0B, 0x06, 0x0D, 0x04, 0x40, 0x3A, 0x29, 0x02, 0x01, 0x02, 0x04, 0x04, 0x01, 0x08, 0x08, +/* 0001BAA0 */ 0x08, 0x08, 0x02, 0x0C, 0x0D, 0x2A, 0xC6, 0x01, 0x00, 0x01, 0x01, 0x08, 0x07, 0xE8, 0x4E, 0x08, +/* 0001BAB0 */ 0x4E, 0x09, 0x4E, 0x0A, 0x4E, 0x0B, 0x8F, 0x02, 0x36, 0x10, 0x00, 0x00, 0x4A, 0x10, 0x6D, 0x0F, +/* 0001BAC0 */ 0x10, 0x00, 0x07, 0x01, 0x00, 0x59, 0x00, 0x10, 0xF4, 0x01, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00, +/* 0001BAD0 */ 0x00, 0x00, 0x45, 0x08, 0x0F, 0x45, 0x09, 0x02, 0xED, 0x00, 0xEE, 0x00, 0xA7, 0x0F, 0x07, 0x01, +/* 0001BAE0 */ 0x00, 0x00, 0x12, 0x03, 0x00, 0x09, 0x0F, 0x09, 0x88, 0x00, 0x8F, 0x01, 0x0F, 0x0F, 0x01, 0x00, +/* 0001BAF0 */ 0x4A, 0x0F, 0x07, 0x02, 0x00, 0x59, 0x00, 0x04, 0x98, 0x10, 0x07, 0x09, 0x00, 0x00, 0x5A, 0x01, +/* 0001BB00 */ 0x10, 0x01, 0x00, 0xF0, 0x02, 0x0F, 0x0F, 0x01, 0x00, 0x45, 0x0A, 0x0F, 0x14, 0x03, 0x00, 0x0A, +/* 0001BB10 */ 0x05, 0x09, 0x03, 0x00, 0x09, 0x55, 0x00, 0x8F, 0x01, 0x08, 0x0F, 0x02, 0x00, 0x4A, 0x0F, 0x07, +/* 0001BB20 */ 0x03, 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x06, 0x02, 0x00, 0x5F, 0x10, 0x0A, 0x02, 0x5A, 0x02, +/* 0001BB30 */ 0x10, 0x02, 0x00, 0xF0, 0x03, 0x0F, 0x0F, 0x02, 0x00, 0x45, 0x0B, 0x0F, 0xA8, 0x0F, 0x15, 0x03, +/* 0001BB40 */ 0x00, 0x0B, 0x0F, 0x09, 0x26, 0x00, 0x77, 0x0B, 0x08, 0x03, 0x98, 0x0F, 0x07, 0x09, 0x01, 0x00, +/* 0001BB50 */ 0x5F, 0x10, 0x0A, 0x04, 0x15, 0x03, 0x00, 0x0F, 0x10, 0x09, 0x08, 0x00, 0x5F, 0x0F, 0x0A, 0x05, +/* 0001BB60 */ 0x77, 0x0F, 0x08, 0x06, 0x45, 0x00, 0x08, 0xEF, 0x00, 0x09, 0x28, 0x00, 0x26, 0x09, 0x09, 0x09, +/* 0001BB70 */ 0x68, 0xFF, 0xEF, 0x00, 0x8F, 0x01, 0x05, 0x0F, 0x03, 0x00, 0x4A, 0x0F, 0x07, 0x01, 0x00, 0x59, +/* 0001BB80 */ 0x00, 0x04, 0xF0, 0x01, 0x0F, 0x0F, 0x03, 0x00, 0x77, 0x0F, 0x08, 0x07, 0x45, 0x00, 0x08, 0x09, +/* 0001BB90 */ 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x69, 0xD1, 0xFE, 0x1E, 0x02, 0xFE, 0x0D, 0x02, 0xFE, 0x1E, +/* 0001BBA0 */ 0x02, 0xFE, 0x96, 0x03, 0xFE, 0x97, 0x03, 0xFE, 0x0D, 0x02, 0xFE, 0xBE, 0x2D, 0x10, 0x08, 0x00, +/* 0001BBB0 */ 0x00, 0x00, 0x1F, 0x00, 0x28, 0x00, 0x07, 0x00, 0x0B, 0x00, 0x0E, 0x00, 0x30, 0x00, 0x22, 0x00, +/* 0001BBC0 */ 0x45, 0x00, 0x08, 0x00, 0x2E, 0x00, 0x03, 0x00, 0x25, 0x00, 0x25, 0x00, 0x60, 0x00, 0x0A, 0x00, +/* 0001BBD0 */ 0x35, 0x00, 0x04, 0x00, 0x31, 0x00, 0x12, 0x00, 0x46, 0x00, 0x08, 0x00, 0x56, 0x00, 0x08, 0x00, +/* 0001BBE0 */ 0xF3, 0xFD, 0x08, 0x00, 0x3D, 0x02, 0x18, 0x00, 0x2C, 0x00, 0x08, 0x00, 0x13, 0x00, 0x00, 0x7F, +/* 0001BBF0 */ 0x7C, 0x0B, 0xC3, 0x43, 0x50, 0x13, 0x00, 0xD0, 0x20, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x56, 0x03, +/* 0001BC00 */ 0x26, 0xFE, 0xCC, 0x27, 0xFE, 0xCC, 0x27, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, 0xCC, 0x27, +/* 0001BC10 */ 0xFE, 0x55, 0x04, 0xFE, 0x55, 0x04, 0x0B, 0x09, 0x10, 0x05, 0x41, 0x3A, 0x33, 0x02, 0x01, 0x02, +/* 0001BC20 */ 0x02, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x0F, 0x10, 0x1D, 0xD9, 0x4E, 0x76, 0x06, 0xFE, +/* 0001BC30 */ 0x95, 0x03, 0x0B, 0x08, 0x01, 0xFF, 0x01, 0x01, 0x01, 0x00, 0x01, 0x02, 0xDD, 0x4E, 0x0B, 0x4E, +/* 0001BC40 */ 0x0C, 0x4E, 0x0D, 0x4E, 0x0E, 0xA8, 0x12, 0x14, 0x03, 0x00, 0x0A, 0x12, 0x09, 0x05, 0x00, 0xA8, +/* 0001BC50 */ 0x00, 0x09, 0xC4, 0x00, 0x45, 0x0B, 0x0A, 0x45, 0x0C, 0x02, 0xED, 0x00, 0xEE, 0x00, 0x07, 0x02, +/* 0001BC60 */ 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x0B, 0x00, 0x00, 0xF0, 0x02, 0x12, 0x09, 0x00, 0x00, 0x0E, +/* 0001BC70 */ 0x08, 0x00, 0x12, 0x45, 0x00, 0x0B, 0xEF, 0x00, 0x09, 0x9D, 0x00, 0x45, 0x0D, 0x05, 0xA7, 0x12, +/* 0001BC80 */ 0x0B, 0x00, 0x00, 0x00, 0x33, 0x12, 0x12, 0x06, 0x45, 0x0E, 0x12, 0xED, 0x01, 0xEE, 0x01, 0x10, +/* 0001BC90 */ 0x03, 0x00, 0x0E, 0x07, 0x09, 0x1A, 0x00, 0x98, 0x12, 0x0B, 0x0E, 0x00, 0x00, 0x14, 0x03, 0x00, +/* 0001BCA0 */ 0x12, 0x0C, 0x09, 0x06, 0x00, 0x45, 0x0D, 0x0E, 0x09, 0x06, 0x00, 0x27, 0x0E, 0x0E, 0x09, 0xDC, +/* 0001BCB0 */ 0xFF, 0xEF, 0x01, 0x14, 0x03, 0x00, 0x0D, 0x05, 0x09, 0x0A, 0x00, 0xA8, 0x00, 0xEF, 0x00, 0x09, +/* 0001BCC0 */ 0x56, 0x00, 0x09, 0x1E, 0x00, 0x10, 0x03, 0x00, 0x0D, 0x08, 0x09, 0x16, 0x00, 0x33, 0x12, 0x0D, +/* 0001BCD0 */ 0x08, 0x98, 0x12, 0x0B, 0x12, 0x01, 0x00, 0x14, 0x03, 0x00, 0x12, 0x0C, 0x09, 0x04, 0x00, 0x33, +/* 0001BCE0 */ 0x0D, 0x0D, 0x08, 0x8F, 0x02, 0x36, 0x13, 0x00, 0x00, 0x4A, 0x13, 0x6D, 0x12, 0x13, 0x01, 0x07, +/* 0001BCF0 */ 0x04, 0x00, 0x59, 0x00, 0x13, 0x5A, 0x01, 0x0B, 0x01, 0x00, 0x5A, 0x02, 0x07, 0x01, 0x00, 0x5A, +/* 0001BD00 */ 0x03, 0x0D, 0x01, 0x00, 0xF4, 0x04, 0x12, 0x12, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, 0x0B, +/* 0001BD10 */ 0x12, 0x09, 0x48, 0xFF, 0xEF, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xD1, 0xFE, 0x5E, 0x01, 0xFE, 0xFB, +/* 0001BD20 */ 0x27, 0x13, 0x08, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x28, 0x00, 0x05, 0x00, 0x25, 0x00, 0x03, 0x00, +/* 0001BD30 */ 0x20, 0x00, 0x07, 0x00, 0x37, 0x00, 0x15, 0x00, 0x34, 0x00, 0x08, 0x00, 0x2D, 0x00, 0x03, 0x00, +/* 0001BD40 */ 0x1F, 0x00, 0x11, 0x00, 0x1E, 0x00, 0x08, 0x00, 0x1F, 0x00, 0x0E, 0x00, 0x33, 0x00, 0x03, 0x00, +/* 0001BD50 */ 0x1D, 0x00, 0x03, 0x00, 0x99, 0xFF, 0x08, 0x00, 0x9B, 0x00, 0x08, 0x00, 0x22, 0x00, 0x0A, 0x00, +/* 0001BD60 */ 0x25, 0x00, 0x1A, 0x00, 0x9A, 0x01, 0x04, 0x00, 0x25, 0x00, 0x35, 0x00, 0x3A, 0x00, 0x00, 0x7F, +/* 0001BD70 */ 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xBE, 0x2A, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x55, 0x03, +/* 0001BD80 */ 0x25, 0xFE, 0x21, 0x25, 0xFE, 0x21, 0x25, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, 0x21, 0x25, +/* 0001BD90 */ 0xDF, 0xDF, 0x06, 0x03, 0x07, 0x03, 0x12, 0x10, 0x02, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x06, +/* 0001BDA0 */ 0x06, 0xFE, 0x94, 0x03, 0x3F, 0x4E, 0x05, 0x5F, 0x07, 0x03, 0x00, 0x45, 0x05, 0x07, 0x2A, 0x07, +/* 0001BDB0 */ 0x05, 0x15, 0x03, 0x00, 0x07, 0x02, 0x09, 0x03, 0x00, 0x45, 0x05, 0x04, 0x8F, 0x02, 0x36, 0x08, +/* 0001BDC0 */ 0x00, 0x00, 0x4A, 0x08, 0x6D, 0x07, 0x08, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x08, 0x5A, 0x01, +/* 0001BDD0 */ 0x05, 0x00, 0x00, 0xF4, 0x02, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, +/* 0001BDE0 */ 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x24, 0x01, 0x69, 0xFE, 0x59, 0x25, 0x05, 0x02, 0x00, 0x00, 0x00, +/* 0001BDF0 */ 0x07, 0x00, 0x2B, 0x00, 0x0B, 0x00, 0x2D, 0x00, 0x03, 0x00, 0x32, 0x00, 0x26, 0x00, 0x1C, 0x00, +/* 0001BE00 */ 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xBA, 0x1F, 0xA2, 0x41, 0xC1, 0x00, 0xFE, +/* 0001BE10 */ 0x54, 0x03, 0x24, 0xFE, 0x9D, 0x24, 0xFE, 0x9D, 0x24, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, +/* 0001BE20 */ 0x9D, 0x24, 0x58, 0x58, 0x05, 0x03, 0x06, 0x05, 0x0C, 0x0C, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, +/* 0001BE30 */ 0x01, 0x05, 0x0C, 0x30, 0x8F, 0x02, 0x03, 0x07, 0x00, 0x00, 0x6D, 0x06, 0x07, 0x00, 0x07, 0x04, +/* 0001BE40 */ 0x00, 0x59, 0x00, 0x07, 0x5A, 0x01, 0x04, 0x00, 0x00, 0x5A, 0x02, 0x03, 0x00, 0x00, 0x5A, 0x03, +/* 0001BE50 */ 0x02, 0x00, 0x00, 0xF4, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, +/* 0001BE60 */ 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xBD, 0x02, 0xFE, 0xBA, 0x24, 0x02, 0x00, 0x00, 0x00, 0x00, 0x2E, +/* 0001BE70 */ 0x00, 0x3A, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xB6, 0x1C, 0xA2, 0x41, +/* 0001BE80 */ 0xC1, 0x00, 0xFE, 0xF0, 0x02, 0x23, 0xFE, 0x2A, 0x24, 0xFE, 0x2A, 0x24, 0x01, 0xFE, 0x00, 0x90, +/* 0001BE90 */ 0x03, 0x03, 0xFE, 0x2A, 0x24, 0x51, 0x51, 0x05, 0x02, 0x05, 0x04, 0x0B, 0x0B, 0x02, 0x01, 0x01, +/* 0001BEA0 */ 0x01, 0x01, 0x01, 0x01, 0x04, 0x2B, 0x8F, 0x02, 0x03, 0x06, 0x00, 0x00, 0x6D, 0x05, 0x06, 0x00, +/* 0001BEB0 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x06, 0x5A, 0x01, 0x03, 0x00, 0x00, 0x5A, 0x02, 0x02, 0x00, 0x00, +/* 0001BEC0 */ 0xF4, 0x03, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, +/* 0001BED0 */ 0x00, 0xFE, 0xBD, 0x02, 0xFE, 0x47, 0x24, 0x02, 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x33, 0x00, +/* 0001BEE0 */ 0x00, 0x7F, 0x4C, 0x00, 0xC0, 0x03, 0x00, 0x03, 0x00, 0xB0, 0x1C, 0xA2, 0x41, 0xC1, 0x00, 0xFE, +/* 0001BEF0 */ 0xEF, 0x02, 0x22, 0xFE, 0x90, 0x23, 0xFE, 0x90, 0x23, 0x41, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, +/* 0001BF00 */ 0x90, 0x23, 0x7B, 0x7B, 0x02, 0x04, 0x05, 0x09, 0x09, 0x02, 0x02, 0x02, 0x02, 0x02, 0x04, 0x00, +/* 0001BF10 */ 0x00, 0x00, 0xF9, 0x7F, 0xFD, 0xDF, 0xC1, 0x04, 0x00, 0x00, 0x40, 0xFE, 0x7F, 0xFD, 0xDF, 0xC1, +/* 0001BF20 */ 0x1B, 0x5F, 0x05, 0x04, 0x00, 0x14, 0x0C, 0x00, 0x05, 0x02, 0x5F, 0x05, 0x04, 0x01, 0x14, 0x03, +/* 0001BF30 */ 0x00, 0x05, 0x03, 0x09, 0x02, 0x00, 0x23, 0x04, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x0C, 0x01, 0xFE, +/* 0001BF40 */ 0x0C, 0x01, 0xFE, 0xA8, 0x23, 0x03, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x4A, 0x00, 0x04, 0x00, +/* 0001BF50 */ 0x18, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x03, 0x00, 0x9E, 0x1D, 0xA0, 0x41, 0xC1, +/* 0001BF60 */ 0x00, 0xFE, 0x53, 0x03, 0x21, 0xFE, 0x43, 0x21, 0xFE, 0x43, 0x21, 0x01, 0xFE, 0x00, 0x90, 0x01, +/* 0001BF70 */ 0x01, 0xFE, 0x43, 0x21, 0xFE, 0xC9, 0x01, 0xFE, 0xC9, 0x01, 0x04, 0x03, 0x05, 0x02, 0x1A, 0x19, +/* 0001BF80 */ 0x02, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x04, 0x05, 0xFE, 0x93, 0x03, 0x66, 0x4E, 0x03, 0x8F, +/* 0001BF90 */ 0x01, 0x04, 0x05, 0x00, 0x00, 0x4A, 0x05, 0x0E, 0x19, 0x00, 0x05, 0x8F, 0x02, 0x03, 0x05, 0x01, +/* 0001BFA0 */ 0x00, 0x5F, 0x05, 0x05, 0x00, 0x0E, 0x0B, 0x00, 0x05, 0x8F, 0x01, 0x04, 0x00, 0x00, 0x00, 0x4A, +/* 0001BFB0 */ 0x00, 0x09, 0x3D, 0x00, 0x8F, 0x02, 0x03, 0x06, 0x01, 0x00, 0x6D, 0x05, 0x06, 0x01, 0x07, 0x01, +/* 0001BFC0 */ 0x00, 0x59, 0x00, 0x06, 0xF4, 0x01, 0x05, 0x05, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x03, +/* 0001BFD0 */ 0x05, 0x0F, 0x09, 0x00, 0x03, 0x01, 0x43, 0x01, 0x01, 0x04, 0x02, 0x09, 0x06, 0x00, 0x01, 0x43, +/* 0001BFE0 */ 0x01, 0x01, 0x04, 0x03, 0x8F, 0x01, 0x04, 0x00, 0x00, 0x00, 0x4A, 0x00, 0x09, 0x02, 0x00, 0xA8, +/* 0001BFF0 */ 0x00, 0x24, 0x00, 0xFE, 0x4D, 0x03, 0xFE, 0xF5, 0x01, 0xFE, 0x59, 0x21, 0x08, 0x02, 0x00, 0x00, +/* 0001C000 */ 0x00, 0x1A, 0x00, 0x39, 0x00, 0x0B, 0x00, 0x2B, 0x00, 0x1D, 0x00, 0x34, 0x00, 0x04, 0x00, 0x9C, +/* 0001C010 */ 0x00, 0x09, 0x00, 0x35, 0x00, 0x06, 0x00, 0x2D, 0x00, 0x0D, 0x00, 0x1C, 0x00, 0x00, 0xFF, 0x5C, +/* 0001C020 */ 0x08, 0xC1, 0x03, 0x10, 0x07, 0x00, 0x92, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x92, 0x03, 0x20, +/* 0001C030 */ 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0xFA, 0x1D, 0xFE, 0xFA, 0x1D, 0x01, 0xFE, 0x00, 0x90, 0x04, +/* 0001C040 */ 0x04, 0xFE, 0xFA, 0x1D, 0x74, 0x74, 0x02, 0x06, 0x03, 0x07, 0x06, 0x0E, 0x0E, 0x01, 0x01, 0x02, +/* 0001C050 */ 0x01, 0x01, 0x01, 0x01, 0x06, 0x08, 0x37, 0x8F, 0x01, 0x06, 0x07, 0x00, 0x00, 0x07, 0x05, 0x00, +/* 0001C060 */ 0x59, 0x00, 0x02, 0x8F, 0x01, 0x03, 0x08, 0x01, 0x00, 0x5F, 0x08, 0x08, 0x00, 0x5A, 0x01, 0x08, +/* 0001C070 */ 0x00, 0x00, 0x5A, 0x02, 0x03, 0x00, 0x00, 0x5A, 0x03, 0x04, 0x00, 0x00, 0x5A, 0x04, 0x05, 0x00, +/* 0001C080 */ 0x00, 0xF0, 0x05, 0x00, 0x07, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x9D, +/* 0001C090 */ 0x02, 0xFE, 0x14, 0x1E, 0x02, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x59, 0x00, 0x00, 0xFF, 0x5C, +/* 0001C0A0 */ 0x08, 0xC1, 0x03, 0x10, 0x07, 0x00, 0x91, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x91, 0x03, 0x1F, +/* 0001C0B0 */ 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0x8A, 0x1D, 0xFE, 0x8A, 0x1D, 0x01, 0xFE, 0x00, 0x90, 0x03, +/* 0001C0C0 */ 0x03, 0xFE, 0x8A, 0x1D, 0x66, 0x66, 0x02, 0x05, 0x03, 0x06, 0x05, 0x0D, 0x0D, 0x01, 0x01, 0x02, +/* 0001C0D0 */ 0x01, 0x01, 0x01, 0x01, 0x05, 0x08, 0x32, 0x8F, 0x01, 0x06, 0x06, 0x00, 0x00, 0x07, 0x04, 0x00, +/* 0001C0E0 */ 0x59, 0x00, 0x02, 0x8F, 0x01, 0x03, 0x07, 0x01, 0x00, 0x5F, 0x07, 0x07, 0x00, 0x5A, 0x01, 0x07, +/* 0001C0F0 */ 0x00, 0x00, 0x5A, 0x02, 0x03, 0x00, 0x00, 0x5A, 0x03, 0x04, 0x00, 0x00, 0xF0, 0x04, 0x00, 0x06, +/* 0001C100 */ 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x9C, 0x02, 0xFE, 0x9D, 0x1D, 0x02, +/* 0001C110 */ 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x52, 0x00, 0x00, 0xFF, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x07, +/* 0001C120 */ 0x00, 0x8F, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x90, 0x03, 0x1E, 0xFF, 0x01, 0x00, 0x40, 0x02, +/* 0001C130 */ 0xFE, 0x23, 0x1D, 0xFE, 0x23, 0x1D, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0x23, 0x1D, 0x5C, +/* 0001C140 */ 0x5C, 0x02, 0x04, 0x03, 0x05, 0x04, 0x0C, 0x0C, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x04, +/* 0001C150 */ 0x08, 0x2D, 0x8F, 0x01, 0x06, 0x05, 0x00, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x8F, 0x01, +/* 0001C160 */ 0x03, 0x06, 0x01, 0x00, 0x5F, 0x06, 0x06, 0x00, 0x5A, 0x01, 0x06, 0x00, 0x00, 0x5A, 0x02, 0x03, +/* 0001C170 */ 0x00, 0x00, 0xF0, 0x03, 0x00, 0x05, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, +/* 0001C180 */ 0x9E, 0x02, 0xFE, 0x33, 0x1D, 0x02, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x4B, 0x00, 0x00, 0xFF, +/* 0001C190 */ 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x07, 0x00, 0x88, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x8F, 0x03, +/* 0001C1A0 */ 0x1D, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0x11, 0x1C, 0xFE, 0x11, 0x1C, 0x01, 0xFE, 0x00, 0x90, +/* 0001C1B0 */ 0x02, 0x02, 0xFE, 0x11, 0x1C, 0x3E, 0x3E, 0x02, 0x04, 0x03, 0x05, 0x03, 0x0F, 0x0E, 0x01, 0x01, +/* 0001C1C0 */ 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x01, 0x00, 0x37, 0x14, 0x03, 0x00, 0x03, 0x02, 0x09, 0x06, +/* 0001C1D0 */ 0x00, 0x45, 0x00, 0x02, 0x09, 0x22, 0x00, 0x8F, 0x01, 0x03, 0x06, 0x00, 0x00, 0x6D, 0x05, 0x06, +/* 0001C1E0 */ 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x06, 0x5A, 0x01, 0x03, 0x00, 0x00, 0xF4, 0x02, 0x05, 0x05, +/* 0001C1F0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, +/* 0001C200 */ 0xFE, 0x8D, 0x02, 0xFE, 0x1C, 0x1C, 0x02, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x32, 0x00, 0x00, +/* 0001C210 */ 0xFF, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x07, 0x00, 0x84, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x8E, +/* 0001C220 */ 0x03, 0x1C, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0x24, 0x1B, 0xFE, 0x24, 0x1B, 0x01, 0xFE, 0x00, +/* 0001C230 */ 0x90, 0x03, 0x02, 0xFE, 0x24, 0x1B, 0x5C, 0x5C, 0x02, 0x05, 0x04, 0x07, 0x04, 0x0D, 0x0C, 0x01, +/* 0001C240 */ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x07, 0x08, 0x33, 0x15, 0x03, 0x00, 0x05, 0x03, 0x45, +/* 0001C250 */ 0x05, 0x02, 0x8F, 0x01, 0x03, 0x08, 0x00, 0x00, 0x6D, 0x07, 0x08, 0x00, 0x07, 0x03, 0x00, 0x59, +/* 0001C260 */ 0x00, 0x08, 0x5A, 0x01, 0x04, 0x00, 0x00, 0x5A, 0x02, 0x05, 0x00, 0x00, 0xF4, 0x03, 0x00, 0x07, +/* 0001C270 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xBE, 0x02, +/* 0001C280 */ 0xFE, 0x3B, 0x1B, 0x03, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x10, 0x00, 0x29, 0x00, 0x34, 0x00, +/* 0001C290 */ 0x00, 0xFF, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x07, 0x00, 0x83, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, +/* 0001C2A0 */ 0x8D, 0x03, 0x1B, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0xC7, 0x1A, 0xFE, 0xC7, 0x1A, 0x01, 0xFE, +/* 0001C2B0 */ 0x00, 0x90, 0x02, 0x01, 0xFE, 0xC7, 0x1A, 0x53, 0x53, 0x02, 0x04, 0x04, 0x06, 0x03, 0x0C, 0x0B, +/* 0001C2C0 */ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x05, 0x07, 0x08, 0x2E, 0x15, 0x03, 0x00, 0x04, 0x03, +/* 0001C2D0 */ 0x45, 0x04, 0x02, 0x8F, 0x01, 0x03, 0x07, 0x00, 0x00, 0x6D, 0x06, 0x07, 0x00, 0x07, 0x02, 0x00, +/* 0001C2E0 */ 0x59, 0x00, 0x07, 0x5A, 0x01, 0x04, 0x00, 0x00, 0xF4, 0x02, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, +/* 0001C2F0 */ 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x95, 0x02, 0xFE, 0xCE, 0x1A, 0x03, +/* 0001C300 */ 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x10, 0x00, 0x24, 0x00, 0x3B, 0x00, 0x00, 0xFF, 0x5C, 0x08, +/* 0001C310 */ 0xC1, 0x03, 0x10, 0x07, 0x00, 0x7E, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x8C, 0x03, 0x1A, 0xFF, +/* 0001C320 */ 0x01, 0x00, 0x40, 0x02, 0xFE, 0xD1, 0x19, 0xFE, 0xD1, 0x19, 0x41, 0xFE, 0x00, 0x90, 0x04, 0x04, +/* 0001C330 */ 0xFE, 0xD1, 0x19, 0xA3, 0xA3, 0x02, 0x06, 0x03, 0x07, 0x05, 0x13, 0x13, 0x01, 0x02, 0x02, 0x02, +/* 0001C340 */ 0x02, 0x02, 0x02, 0x06, 0x07, 0x53, 0x8F, 0x01, 0x36, 0x08, 0x00, 0x00, 0x4A, 0x08, 0x6D, 0x07, +/* 0001C350 */ 0x08, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x08, 0x5A, 0x01, 0x05, 0x00, 0x00, 0x5A, 0x02, 0x02, +/* 0001C360 */ 0x00, 0x00, 0xF4, 0x03, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x01, 0x03, 0x08, +/* 0001C370 */ 0x01, 0x00, 0x6D, 0x07, 0x08, 0x01, 0x07, 0x04, 0x00, 0x59, 0x00, 0x08, 0x5A, 0x01, 0x03, 0x01, +/* 0001C380 */ 0x00, 0x5A, 0x02, 0x04, 0x01, 0x00, 0x5A, 0x03, 0x05, 0x01, 0x00, 0xF4, 0x04, 0xFF, 0x07, 0x01, +/* 0001C390 */ 0x00, 0x00, 0x00, 0x01, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x9A, 0x01, 0xFE, 0x8F, 0x02, 0xFE, +/* 0001C3A0 */ 0xFD, 0x19, 0x03, 0x00, 0x00, 0x00, 0x00, 0x26, 0x00, 0x2A, 0x00, 0x2B, 0x00, 0x4C, 0x00, 0x00, +/* 0001C3B0 */ 0xFF, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x07, 0x00, 0x7C, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x8B, +/* 0001C3C0 */ 0x03, 0x19, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0xC8, 0x18, 0xFE, 0xC8, 0x18, 0x01, 0xFE, 0x00, +/* 0001C3D0 */ 0x90, 0x03, 0x03, 0xFE, 0xC8, 0x18, 0x72, 0x72, 0x02, 0x05, 0x03, 0x06, 0x05, 0x0D, 0x0D, 0x01, +/* 0001C3E0 */ 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x05, 0x08, 0x32, 0x8F, 0x01, 0x06, 0x06, 0x00, 0x00, 0x07, +/* 0001C3F0 */ 0x04, 0x00, 0x59, 0x00, 0x02, 0x8F, 0x01, 0x03, 0x07, 0x01, 0x00, 0x5F, 0x07, 0x07, 0x00, 0x5A, +/* 0001C400 */ 0x01, 0x07, 0x00, 0x00, 0x5A, 0x02, 0x03, 0x00, 0x00, 0x5A, 0x03, 0x04, 0x00, 0x00, 0xF0, 0x04, +/* 0001C410 */ 0x00, 0x06, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x93, 0x02, 0xFE, 0xE2, +/* 0001C420 */ 0x18, 0x02, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x57, 0x00, 0x00, 0xFE, 0x5D, 0x08, 0xC1, 0x03, +/* 0001C430 */ 0x1A, 0x0F, 0x00, 0x79, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x89, 0x03, 0x17, 0xFF, 0x01, 0x00, +/* 0001C440 */ 0x40, 0x02, 0xFE, 0x31, 0x18, 0xFE, 0x31, 0x18, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0x31, +/* 0001C450 */ 0x18, 0x53, 0x53, 0x02, 0x01, 0xFE, 0x8A, 0x03, 0x07, 0x02, 0x06, 0x04, 0x0F, 0x0F, 0x01, 0x01, +/* 0001C460 */ 0x02, 0x01, 0x01, 0x01, 0x01, 0x03, 0x04, 0x05, 0x38, 0x96, 0x02, 0x02, 0x8F, 0x01, 0x36, 0x07, +/* 0001C470 */ 0x00, 0x00, 0x4A, 0x07, 0x6D, 0x06, 0x07, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x07, 0x93, 0x02, +/* 0001C480 */ 0x08, 0x01, 0x00, 0x5A, 0x01, 0x08, 0x00, 0x00, 0xD6, 0x00, 0x08, 0x5A, 0x02, 0x08, 0x00, 0x00, +/* 0001C490 */ 0xF4, 0x03, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, +/* 0001C4A0 */ 0x00, 0x89, 0xFE, 0x41, 0x18, 0x02, 0x03, 0x00, 0x00, 0x00, 0x33, 0x00, 0x42, 0x00, 0x00, 0xB3, +/* 0001C4B0 */ 0xC4, 0x01, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x07, 0x00, 0x79, 0x2F, 0xA2, 0x41, 0xD0, +/* 0001C4C0 */ 0x00, 0x18, 0xFE, 0x01, 0x10, 0xFE, 0x58, 0x18, 0xFE, 0x58, 0x18, 0x01, 0xFE, 0x00, 0x90, 0x03, +/* 0001C4D0 */ 0x03, 0xFE, 0x58, 0x18, 0x28, 0x28, 0x06, 0x02, 0x05, 0x04, 0x0E, 0x0E, 0x02, 0x01, 0x02, 0x01, +/* 0001C4E0 */ 0x01, 0x01, 0x01, 0x04, 0x37, 0x8F, 0x02, 0x36, 0x06, 0x00, 0x00, 0x4A, 0x06, 0x6D, 0x05, 0x06, +/* 0001C4F0 */ 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x06, 0x8F, 0x01, 0x02, 0x07, 0x01, 0x00, 0x5A, 0x01, 0x07, +/* 0001C500 */ 0x00, 0x00, 0x5A, 0x02, 0x02, 0x00, 0x00, 0xF4, 0x03, 0x05, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0001C510 */ 0x00, 0x41, 0x00, 0x05, 0x03, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x0F, 0x03, 0xFE, +/* 0001C520 */ 0x62, 0x18, 0x02, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x1E, 0x00, 0x00, 0xFF, 0x5C, 0x08, 0xC1, +/* 0001C530 */ 0x03, 0x10, 0x07, 0x00, 0x78, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x88, 0x03, 0x16, 0xFF, 0x01, +/* 0001C540 */ 0x00, 0x40, 0x02, 0xFE, 0xC2, 0x17, 0xFE, 0xC2, 0x17, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, +/* 0001C550 */ 0xC2, 0x17, 0x65, 0x65, 0x02, 0x05, 0x03, 0x06, 0x05, 0x0D, 0x0D, 0x01, 0x01, 0x02, 0x01, 0x01, +/* 0001C560 */ 0x01, 0x01, 0x05, 0x08, 0x32, 0x8F, 0x01, 0x06, 0x06, 0x00, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, +/* 0001C570 */ 0x02, 0x8F, 0x01, 0x03, 0x07, 0x01, 0x00, 0x5F, 0x07, 0x07, 0x00, 0x5A, 0x01, 0x07, 0x00, 0x00, +/* 0001C580 */ 0x5A, 0x02, 0x03, 0x00, 0x00, 0x5A, 0x03, 0x04, 0x00, 0x00, 0xF0, 0x04, 0x00, 0x06, 0x00, 0x00, +/* 0001C590 */ 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x84, 0x02, 0xFE, 0xD8, 0x17, 0x02, 0x00, 0x00, +/* 0001C5A0 */ 0x00, 0x00, 0x30, 0x00, 0x4E, 0x00, 0x00, 0xFF, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x47, 0x00, 0x77, +/* 0001C5B0 */ 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x87, 0x03, 0x15, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0x4B, +/* 0001C5C0 */ 0x17, 0xFE, 0x4B, 0x17, 0x81, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0x4B, 0x17, 0x6D, 0x6D, 0x02, +/* 0001C5D0 */ 0x05, 0x03, 0x06, 0x05, 0x0E, 0x0E, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x05, 0x08, 0x3C, +/* 0001C5E0 */ 0x8F, 0x01, 0x06, 0x06, 0x00, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x8F, 0x01, 0x03, 0x07, +/* 0001C5F0 */ 0x01, 0x00, 0x5F, 0x07, 0x07, 0x00, 0x5A, 0x01, 0x07, 0x00, 0x00, 0x5A, 0x02, 0x03, 0x00, 0x00, +/* 0001C600 */ 0x01, 0x5F, 0x01, 0x07, 0x04, 0x5A, 0x03, 0x07, 0x00, 0x00, 0xF2, 0x04, 0x00, 0x06, 0x01, 0x00, +/* 0001C610 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x01, 0x08, 0x00, 0x00, +/* 0001C620 */ 0x00, 0x00, 0x00, 0x05, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xFE, 0x9B, 0x02, 0xFE, +/* 0001C630 */ 0x63, 0x17, 0x02, 0x00, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x54, 0x00, 0x00, 0xFF, 0x5C, 0x08, 0xC1, +/* 0001C640 */ 0x03, 0x10, 0x07, 0x00, 0x76, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x86, 0x03, 0x14, 0xFF, 0x01, +/* 0001C650 */ 0x00, 0x40, 0x02, 0xFE, 0xCE, 0x16, 0xFE, 0xCE, 0x16, 0x01, 0xFE, 0x00, 0x90, 0x04, 0x04, 0xFE, +/* 0001C660 */ 0xCE, 0x16, 0x73, 0x73, 0x02, 0x06, 0x03, 0x07, 0x06, 0x0E, 0x0E, 0x01, 0x01, 0x02, 0x01, 0x01, +/* 0001C670 */ 0x01, 0x01, 0x06, 0x08, 0x37, 0x8F, 0x01, 0x06, 0x07, 0x00, 0x00, 0x07, 0x05, 0x00, 0x59, 0x00, +/* 0001C680 */ 0x02, 0x8F, 0x01, 0x03, 0x08, 0x01, 0x00, 0x5F, 0x08, 0x08, 0x00, 0x5A, 0x01, 0x08, 0x00, 0x00, +/* 0001C690 */ 0x5A, 0x02, 0x03, 0x00, 0x00, 0x5A, 0x03, 0x04, 0x00, 0x00, 0x5A, 0x04, 0x05, 0x00, 0x00, 0xF0, +/* 0001C6A0 */ 0x05, 0x00, 0x07, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x9A, 0x02, 0xFE, +/* 0001C6B0 */ 0xE9, 0x16, 0x02, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x57, 0x00, 0x00, 0xFF, 0x5C, 0x08, 0xC1, +/* 0001C6C0 */ 0x03, 0x10, 0x07, 0x00, 0x75, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x85, 0x03, 0x13, 0xFF, 0x01, +/* 0001C6D0 */ 0x00, 0x40, 0x02, 0xFE, 0x53, 0x16, 0xFE, 0x53, 0x16, 0x01, 0xFE, 0x00, 0x90, 0x04, 0x04, 0xFE, +/* 0001C6E0 */ 0x53, 0x16, 0x71, 0x71, 0x02, 0x06, 0x03, 0x07, 0x06, 0x0E, 0x0E, 0x01, 0x01, 0x02, 0x01, 0x01, +/* 0001C6F0 */ 0x01, 0x01, 0x06, 0x08, 0x37, 0x8F, 0x01, 0x06, 0x07, 0x00, 0x00, 0x07, 0x05, 0x00, 0x59, 0x00, +/* 0001C700 */ 0x02, 0x8F, 0x01, 0x03, 0x08, 0x01, 0x00, 0x5F, 0x08, 0x08, 0x00, 0x5A, 0x01, 0x08, 0x00, 0x00, +/* 0001C710 */ 0x5A, 0x02, 0x03, 0x00, 0x00, 0x5A, 0x03, 0x04, 0x00, 0x00, 0x5A, 0x04, 0x05, 0x00, 0x00, 0xF0, +/* 0001C720 */ 0x05, 0x00, 0x07, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x87, 0x02, 0xFE, +/* 0001C730 */ 0x6F, 0x16, 0x02, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x54, 0x00, 0x00, 0xFF, 0x5C, 0x08, 0xC1, +/* 0001C740 */ 0x03, 0x10, 0x07, 0x00, 0x74, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x84, 0x03, 0x12, 0xFF, 0x01, +/* 0001C750 */ 0x00, 0x40, 0x02, 0xFE, 0xE6, 0x15, 0xFE, 0xE6, 0x15, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, +/* 0001C760 */ 0xE6, 0x15, 0x63, 0x63, 0x02, 0x05, 0x03, 0x06, 0x05, 0x0D, 0x0D, 0x01, 0x01, 0x02, 0x01, 0x01, +/* 0001C770 */ 0x01, 0x01, 0x05, 0x08, 0x32, 0x8F, 0x01, 0x06, 0x06, 0x00, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, +/* 0001C780 */ 0x02, 0x8F, 0x01, 0x03, 0x07, 0x01, 0x00, 0x5F, 0x07, 0x07, 0x00, 0x5A, 0x01, 0x07, 0x00, 0x00, +/* 0001C790 */ 0x5A, 0x02, 0x03, 0x00, 0x00, 0x5A, 0x03, 0x04, 0x00, 0x00, 0xF0, 0x04, 0x00, 0x06, 0x00, 0x00, +/* 0001C7A0 */ 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x99, 0x02, 0xFE, 0xF9, 0x15, 0x02, 0x00, 0x00, +/* 0001C7B0 */ 0x00, 0x00, 0x30, 0x00, 0x4F, 0x00, 0x00, 0xFF, 0x5C, 0x08, 0x01, 0x00, 0x10, 0x07, 0x00, 0x73, +/* 0001C7C0 */ 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x83, 0x03, 0x11, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0x7B, +/* 0001C7D0 */ 0x15, 0xFE, 0x7B, 0x15, 0x01, 0xFE, 0x00, 0x90, 0x04, 0x04, 0xFE, 0x7B, 0x15, 0x61, 0x61, 0x02, +/* 0001C7E0 */ 0x06, 0x03, 0x07, 0x06, 0x0D, 0x0D, 0x01, 0x01, 0x02, 0x06, 0x08, 0x33, 0x8F, 0x01, 0x06, 0x07, +/* 0001C7F0 */ 0x00, 0x00, 0x07, 0x05, 0x00, 0x59, 0x00, 0x02, 0x8F, 0x01, 0x18, 0x08, 0x01, 0x00, 0x5A, 0x01, +/* 0001C800 */ 0x08, 0x00, 0x00, 0x5A, 0x02, 0x03, 0x00, 0x00, 0x5A, 0x03, 0x04, 0x00, 0x00, 0x5A, 0x04, 0x05, +/* 0001C810 */ 0x00, 0x00, 0xF0, 0x05, 0x00, 0x07, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, +/* 0001C820 */ 0x9B, 0x15, 0x02, 0x00, 0x00, 0x00, 0x00, 0x31, 0x00, 0x40, 0x00, 0x00, 0xFF, 0x5C, 0x08, 0x01, +/* 0001C830 */ 0x00, 0x10, 0x07, 0x00, 0x72, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x82, 0x03, 0x10, 0xFF, 0x01, +/* 0001C840 */ 0x00, 0x40, 0x02, 0xFE, 0x25, 0x15, 0xFE, 0x25, 0x15, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, +/* 0001C850 */ 0x25, 0x15, 0x4C, 0x4C, 0x02, 0x05, 0x03, 0x06, 0x05, 0x0C, 0x0C, 0x01, 0x01, 0x02, 0x05, 0x08, +/* 0001C860 */ 0x2E, 0x8F, 0x01, 0x06, 0x06, 0x00, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x8F, 0x01, 0x19, +/* 0001C870 */ 0x07, 0x01, 0x00, 0x5A, 0x01, 0x07, 0x00, 0x00, 0x5A, 0x02, 0x03, 0x00, 0x00, 0x5A, 0x03, 0x04, +/* 0001C880 */ 0x00, 0x00, 0xF0, 0x04, 0x00, 0x06, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, +/* 0001C890 */ 0x38, 0x15, 0x02, 0x00, 0x00, 0x00, 0x00, 0x2C, 0x00, 0x38, 0x00, 0x00, 0xFF, 0x5C, 0x08, 0x01, +/* 0001C8A0 */ 0x00, 0x10, 0x07, 0x00, 0x71, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x81, 0x03, 0x0F, 0xFF, 0x01, +/* 0001C8B0 */ 0x00, 0x40, 0x02, 0xFE, 0xC7, 0x14, 0xFE, 0xC7, 0x14, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, +/* 0001C8C0 */ 0xC7, 0x14, 0x54, 0x54, 0x02, 0x05, 0x03, 0x06, 0x05, 0x0C, 0x0C, 0x01, 0x01, 0x02, 0x05, 0x08, +/* 0001C8D0 */ 0x2E, 0x8F, 0x01, 0x06, 0x06, 0x00, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x8F, 0x01, 0x17, +/* 0001C8E0 */ 0x07, 0x01, 0x00, 0x5A, 0x01, 0x07, 0x00, 0x00, 0x5A, 0x02, 0x03, 0x00, 0x00, 0x5A, 0x03, 0x04, +/* 0001C8F0 */ 0x00, 0x00, 0xF0, 0x04, 0x00, 0x06, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, +/* 0001C900 */ 0xDE, 0x14, 0x02, 0x00, 0x00, 0x00, 0x00, 0x2C, 0x00, 0x3C, 0x00, 0x00, 0xFF, 0x5C, 0x08, 0xC1, +/* 0001C910 */ 0x03, 0x10, 0x07, 0x00, 0x6F, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x80, 0x03, 0x0E, 0xFF, 0x01, +/* 0001C920 */ 0x00, 0x40, 0x02, 0xFE, 0x54, 0x14, 0xFE, 0x54, 0x14, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, +/* 0001C930 */ 0x54, 0x14, 0x68, 0x68, 0x02, 0x05, 0x03, 0x06, 0x05, 0x0D, 0x0D, 0x01, 0x01, 0x02, 0x01, 0x01, +/* 0001C940 */ 0x01, 0x01, 0x05, 0x08, 0x32, 0x8F, 0x01, 0x06, 0x06, 0x00, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, +/* 0001C950 */ 0x02, 0x8F, 0x01, 0x03, 0x07, 0x01, 0x00, 0x5F, 0x07, 0x07, 0x00, 0x5A, 0x01, 0x07, 0x00, 0x00, +/* 0001C960 */ 0x5A, 0x02, 0x03, 0x00, 0x00, 0x5A, 0x03, 0x04, 0x00, 0x00, 0xF0, 0x04, 0x00, 0x06, 0x00, 0x00, +/* 0001C970 */ 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xA5, 0x02, 0xFE, 0x69, 0x14, 0x02, 0x00, 0x00, +/* 0001C980 */ 0x00, 0x00, 0x30, 0x00, 0x52, 0x00, 0x00, 0xFF, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x07, 0x00, 0x6E, +/* 0001C990 */ 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x7F, 0x03, 0x0D, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0x0C, +/* 0001C9A0 */ 0x14, 0xFE, 0x0C, 0x14, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, 0x0C, 0x14, 0x3E, 0x3E, 0x02, +/* 0001C9B0 */ 0x05, 0x02, 0x05, 0x04, 0x0B, 0x0B, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x2B, 0x8F, +/* 0001C9C0 */ 0x01, 0x03, 0x06, 0x00, 0x00, 0x6D, 0x05, 0x06, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x06, 0x5A, +/* 0001C9D0 */ 0x01, 0x02, 0x00, 0x00, 0x5A, 0x02, 0x03, 0x00, 0x00, 0xF4, 0x03, 0x00, 0x05, 0x00, 0x00, 0x00, +/* 0001C9E0 */ 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xC0, 0x02, 0xFE, 0x1D, 0x14, +/* 0001C9F0 */ 0x02, 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x2C, 0x00, 0x00, 0xFF, 0x5C, 0x08, 0xC1, 0x03, 0x10, +/* 0001CA00 */ 0x07, 0x00, 0x6D, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x7E, 0x03, 0x0C, 0xFF, 0x01, 0x00, 0x40, +/* 0001CA10 */ 0x02, 0xFE, 0x8C, 0x13, 0xFE, 0x8C, 0x13, 0x01, 0xFE, 0x00, 0x90, 0x04, 0x04, 0xFE, 0x8C, 0x13, +/* 0001CA20 */ 0x76, 0x76, 0x02, 0x06, 0x03, 0x07, 0x06, 0x0E, 0x0E, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, +/* 0001CA30 */ 0x06, 0x08, 0x37, 0x8F, 0x01, 0x06, 0x07, 0x00, 0x00, 0x07, 0x05, 0x00, 0x59, 0x00, 0x02, 0x8F, +/* 0001CA40 */ 0x01, 0x03, 0x08, 0x01, 0x00, 0x5F, 0x08, 0x08, 0x00, 0x5A, 0x01, 0x08, 0x00, 0x00, 0x5A, 0x02, +/* 0001CA50 */ 0x03, 0x00, 0x00, 0x5A, 0x03, 0x04, 0x00, 0x00, 0x5A, 0x04, 0x05, 0x00, 0x00, 0xF0, 0x05, 0x00, +/* 0001CA60 */ 0x07, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xA6, 0x02, 0xFE, 0xAB, 0x13, +/* 0001CA70 */ 0x02, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x56, 0x00, 0x00, 0xFF, 0x5C, 0x08, 0xC1, 0x03, 0x10, +/* 0001CA80 */ 0x07, 0x00, 0x6C, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x7D, 0x03, 0x0B, 0xFF, 0x01, 0x00, 0x40, +/* 0001CA90 */ 0x02, 0xFE, 0x0A, 0x13, 0xFE, 0x0A, 0x13, 0x01, 0xFE, 0x00, 0x90, 0x04, 0x04, 0xFE, 0x0A, 0x13, +/* 0001CAA0 */ 0x78, 0x78, 0x02, 0x06, 0x03, 0x07, 0x06, 0x0E, 0x0E, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, +/* 0001CAB0 */ 0x06, 0x08, 0x37, 0x8F, 0x01, 0x06, 0x07, 0x00, 0x00, 0x07, 0x05, 0x00, 0x59, 0x00, 0x02, 0x8F, +/* 0001CAC0 */ 0x01, 0x03, 0x08, 0x01, 0x00, 0x5F, 0x08, 0x08, 0x00, 0x5A, 0x01, 0x08, 0x00, 0x00, 0x5A, 0x02, +/* 0001CAD0 */ 0x03, 0x00, 0x00, 0x5A, 0x03, 0x04, 0x00, 0x00, 0x5A, 0x04, 0x05, 0x00, 0x00, 0xF0, 0x05, 0x00, +/* 0001CAE0 */ 0x07, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xA4, 0x02, 0xFE, 0x27, 0x13, +/* 0001CAF0 */ 0x02, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x5A, 0x00, 0x00, 0xFF, 0x5C, 0x08, 0xC1, 0x03, 0x10, +/* 0001CB00 */ 0x07, 0x00, 0x6B, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x7C, 0x03, 0x0A, 0xFF, 0x01, 0x00, 0x40, +/* 0001CB10 */ 0x02, 0xFE, 0x96, 0x12, 0xFE, 0x96, 0x12, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, 0x96, 0x12, +/* 0001CB20 */ 0x6A, 0x6A, 0x02, 0x05, 0x03, 0x06, 0x05, 0x0D, 0x0D, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, +/* 0001CB30 */ 0x05, 0x08, 0x32, 0x8F, 0x01, 0x06, 0x06, 0x00, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x8F, +/* 0001CB40 */ 0x01, 0x03, 0x07, 0x01, 0x00, 0x5F, 0x07, 0x07, 0x00, 0x5A, 0x01, 0x07, 0x00, 0x00, 0x5A, 0x02, +/* 0001CB50 */ 0x03, 0x00, 0x00, 0x5A, 0x03, 0x04, 0x00, 0x00, 0xF0, 0x04, 0x00, 0x06, 0x00, 0x00, 0x09, 0x02, +/* 0001CB60 */ 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xA3, 0x02, 0xFE, 0xAC, 0x12, 0x02, 0x00, 0x00, 0x00, 0x00, +/* 0001CB70 */ 0x30, 0x00, 0x53, 0x00, 0x00, 0xFF, 0x5C, 0x08, 0x01, 0x00, 0x10, 0x07, 0x00, 0x6A, 0x08, 0xA2, +/* 0001CB80 */ 0x41, 0xC1, 0x01, 0xFE, 0x7B, 0x03, 0x09, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0x1B, 0x12, 0xFE, +/* 0001CB90 */ 0x1B, 0x12, 0x01, 0xFE, 0x00, 0x90, 0x04, 0x04, 0xFE, 0x1B, 0x12, 0x71, 0x71, 0x02, 0x06, 0x03, +/* 0001CBA0 */ 0x07, 0x06, 0x0D, 0x0D, 0x01, 0x01, 0x02, 0x06, 0x08, 0x33, 0x8F, 0x01, 0x06, 0x07, 0x00, 0x00, +/* 0001CBB0 */ 0x07, 0x05, 0x00, 0x59, 0x00, 0x02, 0x8F, 0x01, 0x1D, 0x08, 0x01, 0x00, 0x5A, 0x01, 0x08, 0x00, +/* 0001CBC0 */ 0x00, 0x5A, 0x02, 0x03, 0x00, 0x00, 0x5A, 0x03, 0x04, 0x00, 0x00, 0x5A, 0x04, 0x05, 0x00, 0x00, +/* 0001CBD0 */ 0xF0, 0x05, 0x00, 0x07, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x40, 0x12, +/* 0001CBE0 */ 0x02, 0x00, 0x00, 0x00, 0x00, 0x31, 0x00, 0x4B, 0x00, 0x00, 0xFF, 0x5C, 0x08, 0x01, 0x00, 0x10, +/* 0001CBF0 */ 0x07, 0x00, 0x69, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x7A, 0x03, 0x08, 0xFF, 0x01, 0x00, 0x40, +/* 0001CC00 */ 0x02, 0xFE, 0xC4, 0x11, 0xFE, 0xC4, 0x11, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0xC4, 0x11, +/* 0001CC10 */ 0x4D, 0x4D, 0x02, 0x04, 0x03, 0x05, 0x04, 0x0B, 0x0B, 0x01, 0x01, 0x02, 0x04, 0x08, 0x29, 0x8F, +/* 0001CC20 */ 0x01, 0x06, 0x05, 0x00, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x8F, 0x01, 0x1E, 0x06, 0x01, +/* 0001CC30 */ 0x00, 0x5A, 0x01, 0x06, 0x00, 0x00, 0x5A, 0x02, 0x03, 0x00, 0x00, 0xF0, 0x03, 0x00, 0x05, 0x00, +/* 0001CC40 */ 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xD7, 0x11, 0x02, 0x00, 0x00, 0x00, 0x00, +/* 0001CC50 */ 0x27, 0x00, 0x39, 0x00, 0x00, 0xFF, 0x5C, 0x08, 0x01, 0x00, 0x10, 0x07, 0x00, 0x68, 0x08, 0xA2, +/* 0001CC60 */ 0x41, 0xC1, 0x01, 0xFE, 0x79, 0x03, 0x07, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0x6D, 0x11, 0xFE, +/* 0001CC70 */ 0x6D, 0x11, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0x6D, 0x11, 0x4D, 0x4D, 0x02, 0x04, 0x03, +/* 0001CC80 */ 0x05, 0x04, 0x0B, 0x0B, 0x01, 0x01, 0x02, 0x04, 0x08, 0x29, 0x8F, 0x01, 0x06, 0x05, 0x00, 0x00, +/* 0001CC90 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x8F, 0x01, 0x1F, 0x06, 0x01, 0x00, 0x5A, 0x01, 0x06, 0x00, +/* 0001CCA0 */ 0x00, 0x5A, 0x02, 0x03, 0x00, 0x00, 0xF0, 0x03, 0x00, 0x05, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, +/* 0001CCB0 */ 0x00, 0x24, 0x00, 0xFE, 0x80, 0x11, 0x02, 0x00, 0x00, 0x00, 0x00, 0x27, 0x00, 0x39, 0x00, 0x00, +/* 0001CCC0 */ 0x7F, 0x5C, 0x08, 0x01, 0x00, 0x10, 0x03, 0x00, 0x54, 0x1F, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xE5, +/* 0001CCD0 */ 0x02, 0x06, 0xFE, 0xC6, 0x0D, 0xFE, 0xC6, 0x0D, 0x41, 0xFE, 0x00, 0x90, 0x04, 0x04, 0xFE, 0xC6, +/* 0001CCE0 */ 0x0D, 0x72, 0x72, 0x06, 0x04, 0x08, 0x09, 0x10, 0x10, 0x01, 0x02, 0x02, 0x07, 0x07, 0x08, 0x41, +/* 0001CCF0 */ 0x8F, 0x01, 0x15, 0x08, 0x00, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, 0x5A, 0x01, 0x04, 0x00, +/* 0001CD00 */ 0x00, 0x5A, 0x02, 0x05, 0x00, 0x00, 0x8F, 0x01, 0x04, 0x09, 0x01, 0x00, 0x07, 0x03, 0x00, 0x59, +/* 0001CD10 */ 0x00, 0x03, 0x5A, 0x01, 0x06, 0x01, 0x00, 0x5A, 0x02, 0x02, 0x01, 0x00, 0xF0, 0x03, 0x09, 0x09, +/* 0001CD20 */ 0x01, 0x00, 0x5A, 0x03, 0x09, 0x00, 0x00, 0xF0, 0x04, 0xFF, 0x08, 0x00, 0x00, 0xA8, 0x00, 0x24, +/* 0001CD30 */ 0x00, 0xFE, 0xF1, 0x0D, 0x02, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x46, 0x00, 0x00, 0x7E, 0x5C, +/* 0001CD40 */ 0x08, 0xC1, 0x13, 0x10, 0x4B, 0x00, 0x23, 0x04, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0xDB, 0x02, 0x03, +/* 0001CD50 */ 0xFE, 0x0F, 0x07, 0xFE, 0x0F, 0x07, 0x02, 0xFE, 0x00, 0x90, 0x02, 0x01, 0xFE, 0x0F, 0x07, 0xFE, +/* 0001CD60 */ 0x36, 0x02, 0xFE, 0x36, 0x02, 0x06, 0x09, 0x0B, 0x05, 0x19, 0x18, 0x01, 0x02, 0x02, 0x05, 0x05, +/* 0001CD70 */ 0x05, 0x05, 0x01, 0x0A, 0x08, 0x01, 0x19, 0x06, 0xFE, 0x75, 0x03, 0x06, 0xFE, 0x76, 0x03, 0x06, +/* 0001CD80 */ 0xFE, 0x77, 0x03, 0x06, 0xFE, 0x78, 0x03, 0x07, 0x69, 0x15, 0x03, 0x00, 0x09, 0x02, 0x45, 0x09, +/* 0001CD90 */ 0x03, 0x8F, 0x01, 0x35, 0x0B, 0x00, 0x00, 0x4A, 0x0B, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0xCE, +/* 0001CDA0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x7B, 0x09, 0x0C, 0x00, +/* 0001CDB0 */ 0x8F, 0x01, 0x36, 0x0E, 0x01, 0x00, 0x4A, 0x0E, 0x6D, 0x0D, 0x0E, 0x01, 0x07, 0x01, 0x00, 0x59, +/* 0001CDC0 */ 0x00, 0x0E, 0xF4, 0x01, 0x0D, 0x0D, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x7B, 0x0D, 0x0C, 0x02, +/* 0001CDD0 */ 0xD9, 0x00, 0x0D, 0x0C, 0x7B, 0x0D, 0x0C, 0x03, 0xD9, 0x01, 0x0D, 0x0C, 0x7B, 0x0D, 0x0C, 0x04, +/* 0001CDE0 */ 0x5A, 0x01, 0x0C, 0x00, 0x00, 0xF0, 0x02, 0x00, 0x0B, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, +/* 0001CDF0 */ 0x24, 0x00, 0x01, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0001CE00 */ 0x00, 0x75, 0x03, 0x00, 0x00, 0x76, 0x03, 0x00, 0x00, 0x98, 0x01, 0x00, 0x00, 0x9B, 0x01, 0x00, +/* 0001CE10 */ 0x00, 0xFE, 0x75, 0x03, 0x69, 0xFE, 0x76, 0x03, 0xFE, 0x98, 0x01, 0xFE, 0x9B, 0x01, 0xFE, 0x22, +/* 0001CE20 */ 0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x12, 0x00, 0x5F, 0x00, 0x10, 0x02, 0x00, 0x35, +/* 0001CE30 */ 0xCF, 0x01, 0x00, 0x37, 0xCE, 0x01, 0x00, 0x7F, 0x5C, 0x0F, 0xC1, 0x03, 0x10, 0x07, 0x00, 0x2C, +/* 0001CE40 */ 0x0C, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x78, 0x03, 0x05, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0xF2, +/* 0001CE50 */ 0x07, 0xFE, 0xF2, 0x07, 0x49, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, 0xF2, 0x07, 0xFE, 0x41, 0x01, +/* 0001CE60 */ 0xFE, 0x41, 0x01, 0x07, 0x02, 0x06, 0x03, 0x23, 0x23, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x09, +/* 0001CE70 */ 0x09, 0x09, 0x09, 0x05, 0x8E, 0x58, 0x04, 0x8F, 0x01, 0x03, 0x06, 0x00, 0x00, 0x5F, 0x06, 0x06, +/* 0001CE80 */ 0x00, 0x0F, 0x05, 0x00, 0x06, 0xA8, 0x00, 0x09, 0x77, 0x00, 0x8F, 0x01, 0x36, 0x07, 0x01, 0x00, +/* 0001CE90 */ 0x4A, 0x07, 0x6D, 0x06, 0x07, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x07, 0x5F, 0x08, 0x04, 0x02, +/* 0001CEA0 */ 0x5A, 0x01, 0x08, 0x00, 0x00, 0xF4, 0x02, 0x06, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA7, +/* 0001CEB0 */ 0x06, 0x06, 0x03, 0x00, 0x00, 0x5F, 0x07, 0x04, 0x04, 0x11, 0x03, 0x00, 0x06, 0x07, 0x09, 0x34, +/* 0001CEC0 */ 0x00, 0x5F, 0x06, 0x04, 0x05, 0x98, 0x06, 0x06, 0x02, 0x00, 0x00, 0xA8, 0x07, 0x14, 0x03, 0x00, +/* 0001CED0 */ 0x06, 0x07, 0x09, 0x20, 0x00, 0x8F, 0x01, 0x36, 0x07, 0x01, 0x00, 0x4A, 0x07, 0x6D, 0x06, 0x07, +/* 0001CEE0 */ 0x06, 0x07, 0x01, 0x00, 0x59, 0x00, 0x07, 0xF4, 0x01, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x01, +/* 0001CEF0 */ 0x00, 0x77, 0x06, 0x04, 0x07, 0x5F, 0x06, 0x04, 0x08, 0x9D, 0x03, 0x06, 0x02, 0x00, 0x00, 0xA8, +/* 0001CF00 */ 0x00, 0x24, 0x00, 0xFE, 0x4D, 0x03, 0xCF, 0xFE, 0x76, 0x03, 0xD1, 0xFE, 0x75, 0x03, 0xFE, 0x76, +/* 0001CF10 */ 0x03, 0x69, 0xFE, 0x76, 0x03, 0xFE, 0x76, 0x03, 0xFE, 0x14, 0x08, 0x06, 0x02, 0x00, 0x00, 0x00, +/* 0001CF20 */ 0x0E, 0x00, 0x2F, 0x00, 0x05, 0x00, 0x2B, 0x00, 0x4B, 0x00, 0x61, 0x00, 0x20, 0x00, 0x3D, 0x00, +/* 0001CF30 */ 0x0C, 0x00, 0x26, 0x00, 0x00, 0x7F, 0x4C, 0x02, 0xC1, 0x03, 0x10, 0x07, 0x00, 0x28, 0x0C, 0xA2, +/* 0001CF40 */ 0x41, 0xC1, 0x01, 0xFE, 0x77, 0x03, 0x04, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0x81, 0x07, 0xFE, +/* 0001CF50 */ 0x81, 0x07, 0x09, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0x81, 0x07, 0x62, 0x62, 0x04, 0x02, 0x05, +/* 0001CF60 */ 0x0E, 0x0D, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x04, 0x2C, 0x58, 0x03, 0x8F, 0x01, 0x03, +/* 0001CF70 */ 0x05, 0x00, 0x00, 0x5F, 0x05, 0x05, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x5F, 0x05, 0x03, 0x01, 0x98, +/* 0001CF80 */ 0x05, 0x05, 0x02, 0x00, 0x00, 0x45, 0x00, 0x05, 0x09, 0x05, 0x00, 0xA8, 0x05, 0x46, 0x00, 0x05, +/* 0001CF90 */ 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x4D, 0x03, 0xFE, 0x76, 0x03, 0xFE, 0x9C, 0x07, +/* 0001CFA0 */ 0x02, 0x02, 0x00, 0x00, 0x00, 0x28, 0x00, 0x46, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0x01, 0x00, 0x10, +/* 0001CFB0 */ 0x07, 0x00, 0x1D, 0x11, 0xA2, 0x41, 0xC0, 0x00, 0xFE, 0xFF, 0x02, 0x02, 0xFE, 0x01, 0x10, 0xFE, +/* 0001CFC0 */ 0x0E, 0x05, 0xFE, 0x0E, 0x05, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x01, 0xFE, 0x0E, 0x05, 0x25, 0x25, +/* 0001CFD0 */ 0x03, 0x04, 0x06, 0x04, 0x0D, 0x0C, 0x01, 0x01, 0x01, 0x05, 0x07, 0x08, 0x2D, 0x15, 0x05, 0x00, +/* 0001CFE0 */ 0x04, 0x03, 0xCD, 0x06, 0x45, 0x04, 0x06, 0x8F, 0x01, 0x04, 0x06, 0x00, 0x00, 0x07, 0x03, 0x00, +/* 0001CFF0 */ 0x59, 0x00, 0x03, 0x5A, 0x01, 0x04, 0x00, 0x00, 0x5A, 0x02, 0x02, 0x00, 0x00, 0xF0, 0x03, 0x00, +/* 0001D000 */ 0x06, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x0F, 0x05, 0x03, 0x00, 0x00, +/* 0001D010 */ 0x00, 0x00, 0x0A, 0x00, 0x0D, 0x00, 0x21, 0x00, 0x17, 0x00, 0x00, 0x00}; + +#endif + +} diff --git a/lib/Runtime/Library/InJavascript/JsBuiltIn.bc.64b.h b/lib/Runtime/Library/InJavascript/JsBuiltIn.bc.64b.h new file mode 100644 index 00000000000..f7b2f295ea9 --- /dev/null +++ b/lib/Runtime/Library/InJavascript/JsBuiltIn.bc.64b.h @@ -0,0 +1,8468 @@ +//------------------------------------------------------------------------------------------------------- +// Copyright (C) Microsoft. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. +// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. +//------------------------------------------------------------------------------------------------------- + +// Generated Bytecode Header, this file was created by tools/regenByteCode.py +// This file contains: +// a) bytecode for Intl library methods implemented in javascript and +// b) bytecode for other Js library methods, JsBuiltIns, implemented in javascript + +#define JsBuiltIns(VALUE) \ +VALUE(Array, prototype, ArrayPrototype) \ +VALUE(Math, object, MathObject) \ +VALUE(Object, constructor, ObjectConstructor) + +namespace js +{ + +#ifdef ENABLE_JS_BUILTINS + +//Bytecode generated from Array_prototype.js +const char Library_Bytecode_Array_prototype[] = { +/* 00000000 */ 0x43, 0x68, 0x42, 0x63, 0x6C, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00000010 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0xFE, 0xD9, 0x02, 0x00, 0xFE, +/* 00000020 */ 0x77, 0x5F, 0xFE, 0x77, 0x5F, 0x35, 0x00, 0x00, 0x00, 0x4E, 0x06, 0x00, 0x00, 0x36, 0x0F, 0x00, +/* 00000030 */ 0x00, 0x6B, 0x31, 0x00, 0x00, 0x30, 0x2C, 0x01, 0x00, 0x00, 0x00, 0x44, 0x01, 0x00, 0x00, 0x00, +/* 00000040 */ 0x5A, 0x01, 0x00, 0x00, 0x01, 0x76, 0x01, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x8C, +/* 00000050 */ 0x01, 0x00, 0x00, 0x00, 0x9E, 0x01, 0x00, 0x00, 0x00, 0xB4, 0x01, 0x00, 0x00, 0x00, 0xCE, 0x01, +/* 00000060 */ 0x00, 0x00, 0x00, 0xEC, 0x01, 0x00, 0x00, 0x00, 0xFA, 0x01, 0x00, 0x00, 0x00, 0x04, 0x02, 0x00, +/* 00000070 */ 0x00, 0x01, 0x2C, 0x02, 0x00, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x00, 0x44, 0x02, 0x00, 0x00, +/* 00000080 */ 0x00, 0x54, 0x02, 0x00, 0x00, 0x00, 0x64, 0x02, 0x00, 0x00, 0x01, 0x8C, 0x02, 0x00, 0x00, 0x00, +/* 00000090 */ 0x9A, 0x02, 0x00, 0x00, 0x01, 0xBC, 0x02, 0x00, 0x00, 0x01, 0xEA, 0x02, 0x00, 0x00, 0x00, 0xF4, +/* 000000A0 */ 0x02, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x00, 0x00, 0x14, 0x03, 0x00, 0x00, 0x00, 0x1E, 0x03, +/* 000000B0 */ 0x00, 0x00, 0x00, 0x2A, 0x03, 0x00, 0x00, 0x00, 0x3C, 0x03, 0x00, 0x00, 0x00, 0x4A, 0x03, 0x00, +/* 000000C0 */ 0x00, 0x01, 0x68, 0x03, 0x00, 0x00, 0x01, 0x88, 0x03, 0x00, 0x00, 0x01, 0x9E, 0x03, 0x00, 0x00, +/* 000000D0 */ 0x01, 0xC4, 0x03, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0A, 0x04, 0x00, 0x00, 0x00, +/* 000000E0 */ 0x34, 0x04, 0x00, 0x00, 0x00, 0x62, 0x04, 0x00, 0x00, 0x00, 0x92, 0x04, 0x00, 0x00, 0x01, 0x96, +/* 000000F0 */ 0x04, 0x00, 0x00, 0x01, 0x9E, 0x04, 0x00, 0x00, 0x00, 0xCE, 0x04, 0x00, 0x00, 0x00, 0xFC, 0x04, +/* 00000100 */ 0x00, 0x00, 0x00, 0x0E, 0x05, 0x00, 0x00, 0x00, 0x38, 0x05, 0x00, 0x00, 0x00, 0x68, 0x05, 0x00, +/* 00000110 */ 0x00, 0x00, 0x98, 0x05, 0x00, 0x00, 0x00, 0xC2, 0x05, 0x00, 0x00, 0x00, 0xEE, 0x05, 0x00, 0x00, +/* 00000120 */ 0x00, 0x20, 0x06, 0x00, 0x00, 0x00, 0x4E, 0x06, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x6C, 0x00, +/* 00000130 */ 0x6F, 0x00, 0x62, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x20, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x64, 0x00, +/* 00000140 */ 0x65, 0x00, 0x00, 0x00, 0x75, 0x00, 0x73, 0x00, 0x65, 0x00, 0x20, 0x00, 0x73, 0x00, 0x74, 0x00, +/* 00000150 */ 0x72, 0x00, 0x69, 0x00, 0x63, 0x00, 0x74, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, +/* 00000160 */ 0x61, 0x00, 0x79, 0x00, 0x49, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 00000170 */ 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x78, 0x00, 0x74, 0x00, 0x00, 0x00, +/* 00000180 */ 0x76, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x65, 0x00, 0x00, 0x00, 0x77, 0x00, 0x72, 0x00, +/* 00000190 */ 0x69, 0x00, 0x74, 0x00, 0x61, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, +/* 000001A0 */ 0x6E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x72, 0x00, 0x61, 0x00, 0x62, 0x00, 0x6C, 0x00, +/* 000001B0 */ 0x65, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x66, 0x00, 0x69, 0x00, 0x67, 0x00, +/* 000001C0 */ 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x41, 0x00, +/* 000001D0 */ 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x20, 0x00, 0x49, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 000001E0 */ 0x72, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x65, 0x00, +/* 000001F0 */ 0x6E, 0x00, 0x67, 0x00, 0x74, 0x00, 0x68, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6D, 0x00, +/* 00000200 */ 0x65, 0x00, 0x00, 0x00, 0x43, 0x00, 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00000210 */ 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x49, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00000220 */ 0x72, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6B, 0x00, 0x65, 0x00, +/* 00000230 */ 0x79, 0x00, 0x73, 0x00, 0x00, 0x00, 0x76, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x65, 0x00, +/* 00000240 */ 0x73, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x65, 0x00, +/* 00000250 */ 0x73, 0x00, 0x00, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x65, 0x00, 0x78, 0x00, 0x4F, 0x00, +/* 00000260 */ 0x66, 0x00, 0x00, 0x00, 0x43, 0x00, 0x68, 0x00, 0x65, 0x00, 0x63, 0x00, 0x6B, 0x00, 0x41, 0x00, +/* 00000270 */ 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x41, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x47, 0x00, +/* 00000280 */ 0x65, 0x00, 0x74, 0x00, 0x4C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x66, 0x00, 0x69, 0x00, +/* 00000290 */ 0x6C, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x46, 0x00, 0x6C, 0x00, 0x61, 0x00, +/* 000002A0 */ 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6F, 0x00, +/* 000002B0 */ 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x00, 0x00, 0x46, 0x00, 0x6C, 0x00, +/* 000002C0 */ 0x61, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, +/* 000002D0 */ 0x6F, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x4D, 0x00, 0x61, 0x00, +/* 000002E0 */ 0x70, 0x00, 0x70, 0x00, 0x65, 0x00, 0x64, 0x00, 0x00, 0x00, 0x66, 0x00, 0x6C, 0x00, 0x61, 0x00, +/* 000002F0 */ 0x74, 0x00, 0x00, 0x00, 0x66, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x4D, 0x00, 0x61, 0x00, +/* 00000300 */ 0x70, 0x00, 0x00, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x45, 0x00, 0x61, 0x00, 0x63, 0x00, +/* 00000310 */ 0x68, 0x00, 0x00, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, +/* 00000320 */ 0x76, 0x00, 0x65, 0x00, 0x72, 0x00, 0x79, 0x00, 0x00, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x63, 0x00, +/* 00000330 */ 0x6C, 0x00, 0x75, 0x00, 0x64, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, +/* 00000340 */ 0x64, 0x00, 0x75, 0x00, 0x63, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x24, 0x00, +/* 00000350 */ 0x61, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x4F, 0x00, 0x62, 0x00, 0x6A, 0x00, +/* 00000360 */ 0x24, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x24, 0x00, 0x6E, 0x00, +/* 00000370 */ 0x65, 0x00, 0x78, 0x00, 0x74, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x65, 0x00, 0x78, 0x00, +/* 00000380 */ 0x24, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x24, 0x00, 0x6B, 0x00, +/* 00000390 */ 0x69, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x24, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x5F, 0x00, +/* 000003A0 */ 0x5F, 0x00, 0x24, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, +/* 000003B0 */ 0x61, 0x00, 0x6C, 0x00, 0x44, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x24, 0x00, 0x5F, 0x00, +/* 000003C0 */ 0x5F, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x20, 0x00, +/* 000003D0 */ 0x49, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 000003E0 */ 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, +/* 000003F0 */ 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x78, 0x00, 0x74, 0x00, 0x00, 0x00, +/* 00000400 */ 0x64, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, +/* 00000410 */ 0x61, 0x00, 0x79, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, +/* 00000420 */ 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x6B, 0x00, 0x65, 0x00, 0x79, 0x00, +/* 00000430 */ 0x73, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x2E, 0x00, +/* 00000440 */ 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, +/* 00000450 */ 0x65, 0x00, 0x2E, 0x00, 0x76, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x65, 0x00, 0x73, 0x00, +/* 00000460 */ 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x2E, 0x00, 0x70, 0x00, +/* 00000470 */ 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, +/* 00000480 */ 0x2E, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x65, 0x00, 0x73, 0x00, +/* 00000490 */ 0x00, 0x00, 0x6F, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x41, 0x00, +/* 000004A0 */ 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, +/* 000004B0 */ 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x69, 0x00, +/* 000004C0 */ 0x6E, 0x00, 0x64, 0x00, 0x65, 0x00, 0x78, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x41, 0x00, +/* 000004D0 */ 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, +/* 000004E0 */ 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x66, 0x00, +/* 000004F0 */ 0x69, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x66, 0x00, 0x75, 0x00, +/* 00000500 */ 0x6E, 0x00, 0x63, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x41, 0x00, +/* 00000510 */ 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, +/* 00000520 */ 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x66, 0x00, +/* 00000530 */ 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, +/* 00000540 */ 0x79, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, +/* 00000550 */ 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 00000560 */ 0x4D, 0x00, 0x61, 0x00, 0x70, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, +/* 00000570 */ 0x79, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, +/* 00000580 */ 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x45, 0x00, +/* 00000590 */ 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, +/* 000005A0 */ 0x79, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, +/* 000005B0 */ 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x65, 0x00, +/* 000005C0 */ 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x2E, 0x00, 0x70, 0x00, +/* 000005D0 */ 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, +/* 000005E0 */ 0x2E, 0x00, 0x65, 0x00, 0x76, 0x00, 0x65, 0x00, 0x72, 0x00, 0x79, 0x00, 0x00, 0x00, 0x41, 0x00, +/* 000005F0 */ 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, +/* 00000600 */ 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x69, 0x00, +/* 00000610 */ 0x6E, 0x00, 0x63, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x64, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, +/* 00000620 */ 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, +/* 00000630 */ 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, +/* 00000640 */ 0x72, 0x00, 0x65, 0x00, 0x64, 0x00, 0x75, 0x00, 0x63, 0x00, 0x65, 0x00, 0x00, 0x00, 0xFE, 0x39, +/* 00000650 */ 0x02, 0x00, 0x00, 0x00, 0x00, 0x6A, 0x00, 0x00, 0x00, 0x9B, 0x00, 0x00, 0x00, 0xE2, 0x00, 0x00, +/* 00000660 */ 0x00, 0x4C, 0x01, 0x00, 0x00, 0xB6, 0x01, 0x00, 0x00, 0xB7, 0x01, 0x00, 0x00, 0xC5, 0x01, 0x00, +/* 00000670 */ 0x00, 0xC6, 0x01, 0x00, 0x00, 0xDE, 0x01, 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x07, 0x02, 0x00, +/* 00000680 */ 0x00, 0x3C, 0x02, 0x00, 0x00, 0x91, 0x02, 0x00, 0x00, 0xB3, 0x02, 0x00, 0x00, 0xF7, 0x02, 0x00, +/* 00000690 */ 0x00, 0xF8, 0x02, 0x00, 0x00, 0x59, 0x03, 0x00, 0x00, 0xDB, 0x03, 0x00, 0x00, 0x03, 0x04, 0x00, +/* 000006A0 */ 0x00, 0x25, 0x04, 0x00, 0x00, 0x4E, 0x04, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x0A, 0x05, 0x00, +/* 000006B0 */ 0x00, 0x0B, 0x05, 0x00, 0x00, 0x81, 0x05, 0x00, 0x00, 0xBE, 0x05, 0x00, 0x00, 0xE4, 0x05, 0x00, +/* 000006C0 */ 0x00, 0x33, 0x06, 0x00, 0x00, 0x7F, 0x06, 0x00, 0x00, 0xD3, 0x06, 0x00, 0x00, 0x3F, 0x07, 0x00, +/* 000006D0 */ 0x00, 0x87, 0x07, 0x00, 0x00, 0xED, 0x07, 0x00, 0x00, 0xEE, 0x07, 0x00, 0x00, 0x39, 0x08, 0x00, +/* 000006E0 */ 0x00, 0xD2, 0x08, 0x00, 0x00, 0x14, 0x09, 0x00, 0x00, 0x2B, 0x09, 0x00, 0x00, 0x4C, 0x09, 0x00, +/* 000006F0 */ 0x00, 0x6A, 0x09, 0x00, 0x00, 0x6B, 0x09, 0x00, 0x00, 0xB0, 0x09, 0x00, 0x00, 0x1E, 0x0A, 0x00, +/* 00000700 */ 0x00, 0x30, 0x0A, 0x00, 0x00, 0x31, 0x0A, 0x00, 0x00, 0x5B, 0x0A, 0x00, 0x00, 0x5C, 0x0A, 0x00, +/* 00000710 */ 0x00, 0x91, 0x0A, 0x00, 0x00, 0xCE, 0x0A, 0x00, 0x00, 0xE7, 0x0A, 0x00, 0x00, 0x1A, 0x0B, 0x00, +/* 00000720 */ 0x00, 0x7E, 0x0B, 0x00, 0x00, 0x7F, 0x0B, 0x00, 0x00, 0xEB, 0x0B, 0x00, 0x00, 0x20, 0x0C, 0x00, +/* 00000730 */ 0x00, 0x21, 0x0C, 0x00, 0x00, 0x58, 0x0C, 0x00, 0x00, 0x59, 0x0C, 0x00, 0x00, 0xA4, 0x0C, 0x00, +/* 00000740 */ 0x00, 0xE9, 0x0C, 0x00, 0x00, 0x64, 0x0D, 0x00, 0x00, 0xA6, 0x0D, 0x00, 0x00, 0xC7, 0x0D, 0x00, +/* 00000750 */ 0x00, 0xFB, 0x0D, 0x00, 0x00, 0x34, 0x0E, 0x00, 0x00, 0x8B, 0x0E, 0x00, 0x00, 0xA5, 0x0E, 0x00, +/* 00000760 */ 0x00, 0xC2, 0x0E, 0x00, 0x00, 0xF7, 0x0E, 0x00, 0x00, 0x39, 0x0F, 0x00, 0x00, 0x4F, 0x0F, 0x00, +/* 00000770 */ 0x00, 0x61, 0x0F, 0x00, 0x00, 0x70, 0x0F, 0x00, 0x00, 0x8C, 0x0F, 0x00, 0x00, 0xAB, 0x0F, 0x00, +/* 00000780 */ 0x00, 0xCA, 0x0F, 0x00, 0x00, 0xDB, 0x0F, 0x00, 0x00, 0xE2, 0x0F, 0x00, 0x00, 0xE3, 0x0F, 0x00, +/* 00000790 */ 0x00, 0xA4, 0x10, 0x00, 0x00, 0xA5, 0x10, 0x00, 0x00, 0x52, 0x11, 0x00, 0x00, 0x53, 0x11, 0x00, +/* 000007A0 */ 0x00, 0x03, 0x12, 0x00, 0x00, 0x04, 0x12, 0x00, 0x00, 0x6B, 0x12, 0x00, 0x00, 0xB6, 0x12, 0x00, +/* 000007B0 */ 0x00, 0xBE, 0x12, 0x00, 0x00, 0xBF, 0x12, 0x00, 0x00, 0xF3, 0x12, 0x00, 0x00, 0x26, 0x13, 0x00, +/* 000007C0 */ 0x00, 0x75, 0x13, 0x00, 0x00, 0x7F, 0x13, 0x00, 0x00, 0xAD, 0x13, 0x00, 0x00, 0x03, 0x14, 0x00, +/* 000007D0 */ 0x00, 0x0B, 0x14, 0x00, 0x00, 0x0C, 0x14, 0x00, 0x00, 0x42, 0x14, 0x00, 0x00, 0x75, 0x14, 0x00, +/* 000007E0 */ 0x00, 0xC6, 0x14, 0x00, 0x00, 0xD0, 0x14, 0x00, 0x00, 0xFE, 0x14, 0x00, 0x00, 0x56, 0x15, 0x00, +/* 000007F0 */ 0x00, 0x5E, 0x15, 0x00, 0x00, 0x5F, 0x15, 0x00, 0x00, 0x96, 0x15, 0x00, 0x00, 0xC9, 0x15, 0x00, +/* 00000800 */ 0x00, 0x1B, 0x16, 0x00, 0x00, 0x25, 0x16, 0x00, 0x00, 0x53, 0x16, 0x00, 0x00, 0xB1, 0x16, 0x00, +/* 00000810 */ 0x00, 0xB9, 0x16, 0x00, 0x00, 0xBA, 0x16, 0x00, 0x00, 0x15, 0x17, 0x00, 0x00, 0x4D, 0x17, 0x00, +/* 00000820 */ 0x00, 0x4E, 0x17, 0x00, 0x00, 0xAB, 0x17, 0x00, 0x00, 0xAC, 0x17, 0x00, 0x00, 0xC5, 0x17, 0x00, +/* 00000830 */ 0x00, 0xDC, 0x17, 0x00, 0x00, 0xE6, 0x17, 0x00, 0x00, 0xE7, 0x17, 0x00, 0x00, 0x1D, 0x18, 0x00, +/* 00000840 */ 0x00, 0x35, 0x18, 0x00, 0x00, 0x4C, 0x18, 0x00, 0x00, 0x56, 0x18, 0x00, 0x00, 0x57, 0x18, 0x00, +/* 00000850 */ 0x00, 0x66, 0x18, 0x00, 0x00, 0x67, 0x18, 0x00, 0x00, 0xA8, 0x18, 0x00, 0x00, 0xEE, 0x18, 0x00, +/* 00000860 */ 0x00, 0x33, 0x19, 0x00, 0x00, 0x6B, 0x19, 0x00, 0x00, 0xBF, 0x19, 0x00, 0x00, 0xD2, 0x19, 0x00, +/* 00000870 */ 0x00, 0x24, 0x1A, 0x00, 0x00, 0x37, 0x1A, 0x00, 0x00, 0x72, 0x1A, 0x00, 0x00, 0x8B, 0x1A, 0x00, +/* 00000880 */ 0x00, 0x8C, 0x1A, 0x00, 0x00, 0xA5, 0x1A, 0x00, 0x00, 0xBC, 0x1A, 0x00, 0x00, 0xCA, 0x1A, 0x00, +/* 00000890 */ 0x00, 0xD4, 0x1A, 0x00, 0x00, 0xD5, 0x1A, 0x00, 0x00, 0xEF, 0x1A, 0x00, 0x00, 0x09, 0x1B, 0x00, +/* 000008A0 */ 0x00, 0x2E, 0x1B, 0x00, 0x00, 0x2F, 0x1B, 0x00, 0x00, 0x61, 0x1B, 0x00, 0x00, 0x7F, 0x1B, 0x00, +/* 000008B0 */ 0x00, 0x91, 0x1B, 0x00, 0x00, 0x9F, 0x1B, 0x00, 0x00, 0xA0, 0x1B, 0x00, 0x00, 0xB1, 0x1B, 0x00, +/* 000008C0 */ 0x00, 0xBB, 0x1B, 0x00, 0x00, 0xBC, 0x1B, 0x00, 0x00, 0xCF, 0x1B, 0x00, 0x00, 0xD7, 0x1B, 0x00, +/* 000008D0 */ 0x00, 0xD8, 0x1B, 0x00, 0x00, 0x38, 0x1C, 0x00, 0x00, 0x64, 0x1C, 0x00, 0x00, 0x94, 0x1C, 0x00, +/* 000008E0 */ 0x00, 0xA5, 0x1C, 0x00, 0x00, 0xDA, 0x1C, 0x00, 0x00, 0x22, 0x1D, 0x00, 0x00, 0x30, 0x1D, 0x00, +/* 000008F0 */ 0x00, 0x95, 0x1D, 0x00, 0x00, 0x9F, 0x1D, 0x00, 0x00, 0xA7, 0x1D, 0x00, 0x00, 0xA8, 0x1D, 0x00, +/* 00000900 */ 0x00, 0xFD, 0x1D, 0x00, 0x00, 0x34, 0x1E, 0x00, 0x00, 0x35, 0x1E, 0x00, 0x00, 0x91, 0x1E, 0x00, +/* 00000910 */ 0x00, 0x9A, 0x1E, 0x00, 0x00, 0xCA, 0x1E, 0x00, 0x00, 0x24, 0x1F, 0x00, 0x00, 0x2E, 0x1F, 0x00, +/* 00000920 */ 0x00, 0x2F, 0x1F, 0x00, 0x00, 0x69, 0x1F, 0x00, 0x00, 0x7C, 0x1F, 0x00, 0x00, 0x90, 0x1F, 0x00, +/* 00000930 */ 0x00, 0x91, 0x1F, 0x00, 0x00, 0xAB, 0x1F, 0x00, 0x00, 0xC5, 0x1F, 0x00, 0x00, 0xE8, 0x1F, 0x00, +/* 00000940 */ 0x00, 0x4E, 0x20, 0x00, 0x00, 0xA1, 0x20, 0x00, 0x00, 0xBB, 0x20, 0x00, 0x00, 0xCD, 0x20, 0x00, +/* 00000950 */ 0x00, 0xDB, 0x20, 0x00, 0x00, 0xEC, 0x20, 0x00, 0x00, 0xF6, 0x20, 0x00, 0x00, 0xF7, 0x20, 0x00, +/* 00000960 */ 0x00, 0x09, 0x21, 0x00, 0x00, 0x11, 0x21, 0x00, 0x00, 0x12, 0x21, 0x00, 0x00, 0x83, 0x21, 0x00, +/* 00000970 */ 0x00, 0x89, 0x21, 0x00, 0x00, 0xE7, 0x21, 0x00, 0x00, 0x47, 0x22, 0x00, 0x00, 0x48, 0x22, 0x00, +/* 00000980 */ 0x00, 0x6F, 0x22, 0x00, 0x00, 0x90, 0x22, 0x00, 0x00, 0xB3, 0x22, 0x00, 0x00, 0xD0, 0x22, 0x00, +/* 00000990 */ 0x00, 0x03, 0x23, 0x00, 0x00, 0x18, 0x23, 0x00, 0x00, 0x42, 0x23, 0x00, 0x00, 0x76, 0x23, 0x00, +/* 000009A0 */ 0x00, 0xB0, 0x23, 0x00, 0x00, 0xD9, 0x23, 0x00, 0x00, 0x07, 0x24, 0x00, 0x00, 0x3F, 0x24, 0x00, +/* 000009B0 */ 0x00, 0x6E, 0x24, 0x00, 0x00, 0xC3, 0x24, 0x00, 0x00, 0xF8, 0x24, 0x00, 0x00, 0x23, 0x25, 0x00, +/* 000009C0 */ 0x00, 0x67, 0x25, 0x00, 0x00, 0xAC, 0x25, 0x00, 0x00, 0xE5, 0x25, 0x00, 0x00, 0x38, 0x26, 0x00, +/* 000009D0 */ 0x00, 0xAF, 0x26, 0x00, 0x00, 0x46, 0x27, 0x00, 0x00, 0x5F, 0x27, 0x00, 0x00, 0x80, 0x27, 0x00, +/* 000009E0 */ 0x00, 0xD2, 0x27, 0x00, 0x00, 0x1A, 0x28, 0x00, 0x00, 0x6F, 0x28, 0x00, 0x00, 0x85, 0x28, 0x00, +/* 000009F0 */ 0x00, 0xEE, 0x28, 0x00, 0x00, 0x50, 0x29, 0x00, 0x00, 0x85, 0x29, 0x00, 0x00, 0xA8, 0x29, 0x00, +/* 00000A00 */ 0x00, 0xBA, 0x29, 0x00, 0x00, 0xC8, 0x29, 0x00, 0x00, 0xF6, 0x29, 0x00, 0x00, 0x11, 0x2A, 0x00, +/* 00000A10 */ 0x00, 0x1B, 0x2A, 0x00, 0x00, 0x3C, 0x2A, 0x00, 0x00, 0x58, 0x2A, 0x00, 0x00, 0x60, 0x2A, 0x00, +/* 00000A20 */ 0x00, 0x61, 0x2A, 0x00, 0x00, 0xEC, 0x2A, 0x00, 0x00, 0x39, 0x2B, 0x00, 0x00, 0x7E, 0x2B, 0x00, +/* 00000A30 */ 0x00, 0xCF, 0x2B, 0x00, 0x00, 0x20, 0x2C, 0x00, 0x00, 0x63, 0x2C, 0x00, 0x00, 0x8A, 0x2C, 0x00, +/* 00000A40 */ 0x00, 0xAB, 0x2C, 0x00, 0x00, 0xCE, 0x2C, 0x00, 0x00, 0xEB, 0x2C, 0x00, 0x00, 0x1E, 0x2D, 0x00, +/* 00000A50 */ 0x00, 0x1F, 0x2D, 0x00, 0x00, 0x4D, 0x2D, 0x00, 0x00, 0x77, 0x2D, 0x00, 0x00, 0xAB, 0x2D, 0x00, +/* 00000A60 */ 0x00, 0xE5, 0x2D, 0x00, 0x00, 0x0E, 0x2E, 0x00, 0x00, 0x3C, 0x2E, 0x00, 0x00, 0x74, 0x2E, 0x00, +/* 00000A70 */ 0x00, 0xAF, 0x2E, 0x00, 0x00, 0xE6, 0x2E, 0x00, 0x00, 0x50, 0x2F, 0x00, 0x00, 0xDA, 0x2F, 0x00, +/* 00000A80 */ 0x00, 0x0F, 0x30, 0x00, 0x00, 0x3A, 0x30, 0x00, 0x00, 0x7E, 0x30, 0x00, 0x00, 0xB4, 0x30, 0x00, +/* 00000A90 */ 0x00, 0x07, 0x31, 0x00, 0x00, 0x7E, 0x31, 0x00, 0x00, 0xB6, 0x31, 0x00, 0x00, 0x1F, 0x32, 0x00, +/* 00000AA0 */ 0x00, 0x6B, 0x32, 0x00, 0x00, 0x8F, 0x32, 0x00, 0x00, 0xC6, 0x32, 0x00, 0x00, 0xFB, 0x32, 0x00, +/* 00000AB0 */ 0x00, 0x55, 0x33, 0x00, 0x00, 0xA5, 0x33, 0x00, 0x00, 0x05, 0x34, 0x00, 0x00, 0x23, 0x34, 0x00, +/* 00000AC0 */ 0x00, 0x95, 0x34, 0x00, 0x00, 0x0B, 0x35, 0x00, 0x00, 0x49, 0x35, 0x00, 0x00, 0x74, 0x35, 0x00, +/* 00000AD0 */ 0x00, 0x8E, 0x35, 0x00, 0x00, 0xB4, 0x35, 0x00, 0x00, 0xCA, 0x35, 0x00, 0x00, 0xE3, 0x35, 0x00, +/* 00000AE0 */ 0x00, 0x05, 0x36, 0x00, 0x00, 0x5B, 0x36, 0x00, 0x00, 0xA3, 0x36, 0x00, 0x00, 0xFB, 0x36, 0x00, +/* 00000AF0 */ 0x00, 0x11, 0x37, 0x00, 0x00, 0x7B, 0x37, 0x00, 0x00, 0xDD, 0x37, 0x00, 0x00, 0x13, 0x38, 0x00, +/* 00000B00 */ 0x00, 0x36, 0x38, 0x00, 0x00, 0x48, 0x38, 0x00, 0x00, 0x56, 0x38, 0x00, 0x00, 0x84, 0x38, 0x00, +/* 00000B10 */ 0x00, 0x9F, 0x38, 0x00, 0x00, 0xA9, 0x38, 0x00, 0x00, 0xCA, 0x38, 0x00, 0x00, 0xE6, 0x38, 0x00, +/* 00000B20 */ 0x00, 0xEE, 0x38, 0x00, 0x00, 0xEF, 0x38, 0x00, 0x00, 0x34, 0x39, 0x00, 0x00, 0x62, 0x39, 0x00, +/* 00000B30 */ 0x00, 0xA0, 0x39, 0x00, 0x00, 0xFA, 0x39, 0x00, 0x00, 0xFB, 0x39, 0x00, 0x00, 0x1B, 0x3A, 0x00, +/* 00000B40 */ 0x00, 0x48, 0x3A, 0x00, 0x00, 0x79, 0x3A, 0x00, 0x00, 0xCE, 0x3A, 0x00, 0x00, 0x00, 0x3B, 0x00, +/* 00000B50 */ 0x00, 0x3C, 0x3B, 0x00, 0x00, 0x83, 0x3B, 0x00, 0x00, 0xC5, 0x3B, 0x00, 0x00, 0xDC, 0x3B, 0x00, +/* 00000B60 */ 0x00, 0xEE, 0x3B, 0x00, 0x00, 0xF6, 0x3B, 0x00, 0x00, 0xF7, 0x3B, 0x00, 0x00, 0x51, 0x3C, 0x00, +/* 00000B70 */ 0x00, 0x7F, 0x3C, 0x00, 0x00, 0xBD, 0x3C, 0x00, 0x00, 0x1A, 0x3D, 0x00, 0x00, 0x1B, 0x3D, 0x00, +/* 00000B80 */ 0x00, 0x6B, 0x3D, 0x00, 0x00, 0x9F, 0x3D, 0x00, 0x00, 0xFA, 0x3D, 0x00, 0x00, 0x04, 0x3E, 0x00, +/* 00000B90 */ 0x00, 0x52, 0x3E, 0x00, 0x00, 0x84, 0x3E, 0x00, 0x00, 0xC0, 0x3E, 0x00, 0x00, 0x07, 0x3F, 0x00, +/* 00000BA0 */ 0x00, 0x5E, 0x3F, 0x00, 0x00, 0x75, 0x3F, 0x00, 0x00, 0x87, 0x3F, 0x00, 0x00, 0x8F, 0x3F, 0x00, +/* 00000BB0 */ 0x00, 0x90, 0x3F, 0x00, 0x00, 0xE6, 0x3F, 0x00, 0x00, 0x1E, 0x40, 0x00, 0x00, 0x1F, 0x40, 0x00, +/* 00000BC0 */ 0x00, 0x4A, 0x40, 0x00, 0x00, 0x7F, 0x40, 0x00, 0x00, 0xDC, 0x40, 0x00, 0x00, 0xE5, 0x40, 0x00, +/* 00000BD0 */ 0x00, 0x30, 0x41, 0x00, 0x00, 0x60, 0x41, 0x00, 0x00, 0xBB, 0x41, 0x00, 0x00, 0xC5, 0x41, 0x00, +/* 00000BE0 */ 0x00, 0xC6, 0x41, 0x00, 0x00, 0x12, 0x42, 0x00, 0x00, 0x28, 0x42, 0x00, 0x00, 0x3B, 0x42, 0x00, +/* 00000BF0 */ 0x00, 0x3C, 0x42, 0x00, 0x00, 0x5C, 0x42, 0x00, 0x00, 0x76, 0x42, 0x00, 0x00, 0x9D, 0x42, 0x00, +/* 00000C00 */ 0x00, 0xD1, 0x42, 0x00, 0x00, 0xF9, 0x42, 0x00, 0x00, 0x13, 0x43, 0x00, 0x00, 0x41, 0x43, 0x00, +/* 00000C10 */ 0x00, 0x64, 0x43, 0x00, 0x00, 0xA4, 0x43, 0x00, 0x00, 0x04, 0x44, 0x00, 0x00, 0x12, 0x44, 0x00, +/* 00000C20 */ 0x00, 0x31, 0x44, 0x00, 0x00, 0x42, 0x44, 0x00, 0x00, 0x4C, 0x44, 0x00, 0x00, 0x69, 0x44, 0x00, +/* 00000C30 */ 0x00, 0x83, 0x44, 0x00, 0x00, 0x8B, 0x44, 0x00, 0x00, 0x8C, 0x44, 0x00, 0x00, 0xDF, 0x44, 0x00, +/* 00000C40 */ 0x00, 0x14, 0x45, 0x00, 0x00, 0x1D, 0x45, 0x00, 0x00, 0x48, 0x45, 0x00, 0x00, 0x7D, 0x45, 0x00, +/* 00000C50 */ 0x00, 0xD7, 0x45, 0x00, 0x00, 0xD8, 0x45, 0x00, 0x00, 0x23, 0x46, 0x00, 0x00, 0x53, 0x46, 0x00, +/* 00000C60 */ 0x00, 0xAB, 0x46, 0x00, 0x00, 0xB5, 0x46, 0x00, 0x00, 0xB6, 0x46, 0x00, 0x00, 0x02, 0x47, 0x00, +/* 00000C70 */ 0x00, 0x18, 0x47, 0x00, 0x00, 0x2B, 0x47, 0x00, 0x00, 0x2C, 0x47, 0x00, 0x00, 0x4C, 0x47, 0x00, +/* 00000C80 */ 0x00, 0x66, 0x47, 0x00, 0x00, 0x8D, 0x47, 0x00, 0x00, 0xC1, 0x47, 0x00, 0x00, 0xE9, 0x47, 0x00, +/* 00000C90 */ 0x00, 0x03, 0x48, 0x00, 0x00, 0x31, 0x48, 0x00, 0x00, 0x54, 0x48, 0x00, 0x00, 0xA9, 0x48, 0x00, +/* 00000CA0 */ 0x00, 0xDF, 0x48, 0x00, 0x00, 0x45, 0x49, 0x00, 0x00, 0x66, 0x49, 0x00, 0x00, 0x78, 0x49, 0x00, +/* 00000CB0 */ 0x00, 0x86, 0x49, 0x00, 0x00, 0xA5, 0x49, 0x00, 0x00, 0xB6, 0x49, 0x00, 0x00, 0xC0, 0x49, 0x00, +/* 00000CC0 */ 0x00, 0xD9, 0x49, 0x00, 0x00, 0xEF, 0x49, 0x00, 0x00, 0xF7, 0x49, 0x00, 0x00, 0xF8, 0x49, 0x00, +/* 00000CD0 */ 0x00, 0x4C, 0x4A, 0x00, 0x00, 0x82, 0x4A, 0x00, 0x00, 0x8B, 0x4A, 0x00, 0x00, 0xB6, 0x4A, 0x00, +/* 00000CE0 */ 0x00, 0xEB, 0x4A, 0x00, 0x00, 0x46, 0x4B, 0x00, 0x00, 0x47, 0x4B, 0x00, 0x00, 0x92, 0x4B, 0x00, +/* 00000CF0 */ 0x00, 0xC2, 0x4B, 0x00, 0x00, 0x1B, 0x4C, 0x00, 0x00, 0x25, 0x4C, 0x00, 0x00, 0x26, 0x4C, 0x00, +/* 00000D00 */ 0x00, 0x72, 0x4C, 0x00, 0x00, 0x88, 0x4C, 0x00, 0x00, 0x9B, 0x4C, 0x00, 0x00, 0x9C, 0x4C, 0x00, +/* 00000D10 */ 0x00, 0xBC, 0x4C, 0x00, 0x00, 0xD6, 0x4C, 0x00, 0x00, 0xFD, 0x4C, 0x00, 0x00, 0x31, 0x4D, 0x00, +/* 00000D20 */ 0x00, 0x59, 0x4D, 0x00, 0x00, 0x73, 0x4D, 0x00, 0x00, 0xA1, 0x4D, 0x00, 0x00, 0xC4, 0x4D, 0x00, +/* 00000D30 */ 0x00, 0x19, 0x4E, 0x00, 0x00, 0x51, 0x4E, 0x00, 0x00, 0xB8, 0x4E, 0x00, 0x00, 0xDA, 0x4E, 0x00, +/* 00000D40 */ 0x00, 0xEC, 0x4E, 0x00, 0x00, 0xFA, 0x4E, 0x00, 0x00, 0x19, 0x4F, 0x00, 0x00, 0x2A, 0x4F, 0x00, +/* 00000D50 */ 0x00, 0x34, 0x4F, 0x00, 0x00, 0x4C, 0x4F, 0x00, 0x00, 0x61, 0x4F, 0x00, 0x00, 0x69, 0x4F, 0x00, +/* 00000D60 */ 0x00, 0x6A, 0x4F, 0x00, 0x00, 0xC6, 0x4F, 0x00, 0x00, 0xFF, 0x4F, 0x00, 0x00, 0x00, 0x50, 0x00, +/* 00000D70 */ 0x00, 0x2B, 0x50, 0x00, 0x00, 0x60, 0x50, 0x00, 0x00, 0xBD, 0x50, 0x00, 0x00, 0xBE, 0x50, 0x00, +/* 00000D80 */ 0x00, 0xE3, 0x50, 0x00, 0x00, 0xFC, 0x50, 0x00, 0x00, 0x16, 0x51, 0x00, 0x00, 0x20, 0x51, 0x00, +/* 00000D90 */ 0x00, 0x21, 0x51, 0x00, 0x00, 0x4C, 0x51, 0x00, 0x00, 0x86, 0x51, 0x00, 0x00, 0xBC, 0x51, 0x00, +/* 00000DA0 */ 0x00, 0xCB, 0x51, 0x00, 0x00, 0xCC, 0x51, 0x00, 0x00, 0xE6, 0x51, 0x00, 0x00, 0xFE, 0x51, 0x00, +/* 00000DB0 */ 0x00, 0x14, 0x52, 0x00, 0x00, 0x32, 0x52, 0x00, 0x00, 0x54, 0x52, 0x00, 0x00, 0x6A, 0x52, 0x00, +/* 00000DC0 */ 0x00, 0x7D, 0x52, 0x00, 0x00, 0x88, 0x52, 0x00, 0x00, 0x97, 0x52, 0x00, 0x00, 0xB0, 0x52, 0x00, +/* 00000DD0 */ 0x00, 0xB1, 0x52, 0x00, 0x00, 0xCA, 0x52, 0x00, 0x00, 0xE1, 0x52, 0x00, 0x00, 0xEF, 0x52, 0x00, +/* 00000DE0 */ 0x00, 0xF9, 0x52, 0x00, 0x00, 0xFA, 0x52, 0x00, 0x00, 0x1A, 0x53, 0x00, 0x00, 0x34, 0x53, 0x00, +/* 00000DF0 */ 0x00, 0x79, 0x53, 0x00, 0x00, 0x9A, 0x53, 0x00, 0x00, 0xE8, 0x53, 0x00, 0x00, 0x69, 0x54, 0x00, +/* 00000E00 */ 0x00, 0x86, 0x54, 0x00, 0x00, 0x94, 0x54, 0x00, 0x00, 0xB3, 0x54, 0x00, 0x00, 0xC4, 0x54, 0x00, +/* 00000E10 */ 0x00, 0xCE, 0x54, 0x00, 0x00, 0xE7, 0x54, 0x00, 0x00, 0xFD, 0x54, 0x00, 0x00, 0x05, 0x55, 0x00, +/* 00000E20 */ 0x00, 0x06, 0x55, 0x00, 0x00, 0x60, 0x55, 0x00, 0x00, 0x97, 0x55, 0x00, 0x00, 0x98, 0x55, 0x00, +/* 00000E30 */ 0x00, 0xC3, 0x55, 0x00, 0x00, 0xF8, 0x55, 0x00, 0x00, 0x54, 0x56, 0x00, 0x00, 0x55, 0x56, 0x00, +/* 00000E40 */ 0x00, 0xA0, 0x56, 0x00, 0x00, 0xD0, 0x56, 0x00, 0x00, 0x2A, 0x57, 0x00, 0x00, 0x34, 0x57, 0x00, +/* 00000E50 */ 0x00, 0x35, 0x57, 0x00, 0x00, 0x89, 0x57, 0x00, 0x00, 0xC0, 0x57, 0x00, 0x00, 0x1E, 0x58, 0x00, +/* 00000E60 */ 0x00, 0x28, 0x58, 0x00, 0x00, 0x29, 0x58, 0x00, 0x00, 0x3F, 0x58, 0x00, 0x00, 0x67, 0x58, 0x00, +/* 00000E70 */ 0x00, 0x7A, 0x58, 0x00, 0x00, 0x9F, 0x58, 0x00, 0x00, 0xA0, 0x58, 0x00, 0x00, 0xCB, 0x58, 0x00, +/* 00000E80 */ 0x00, 0xF6, 0x58, 0x00, 0x00, 0x6A, 0x59, 0x00, 0x00, 0x92, 0x59, 0x00, 0x00, 0x9C, 0x59, 0x00, +/* 00000E90 */ 0x00, 0xC8, 0x59, 0x00, 0x00, 0xD7, 0x59, 0x00, 0x00, 0xFC, 0x59, 0x00, 0x00, 0x1E, 0x5A, 0x00, +/* 00000EA0 */ 0x00, 0x58, 0x5A, 0x00, 0x00, 0x83, 0x5A, 0x00, 0x00, 0xAE, 0x5A, 0x00, 0x00, 0xE6, 0x5A, 0x00, +/* 00000EB0 */ 0x00, 0x12, 0x5B, 0x00, 0x00, 0x47, 0x5B, 0x00, 0x00, 0x65, 0x5B, 0x00, 0x00, 0x8A, 0x5B, 0x00, +/* 00000EC0 */ 0x00, 0xB2, 0x5B, 0x00, 0x00, 0xC4, 0x5B, 0x00, 0x00, 0xE7, 0x5B, 0x00, 0x00, 0xFC, 0x5B, 0x00, +/* 00000ED0 */ 0x00, 0x0A, 0x5C, 0x00, 0x00, 0x4B, 0x5C, 0x00, 0x00, 0x68, 0x5C, 0x00, 0x00, 0xCA, 0x5C, 0x00, +/* 00000EE0 */ 0x00, 0xD8, 0x5C, 0x00, 0x00, 0xE2, 0x5C, 0x00, 0x00, 0xE3, 0x5C, 0x00, 0x00, 0x03, 0x5D, 0x00, +/* 00000EF0 */ 0x00, 0x1D, 0x5D, 0x00, 0x00, 0x44, 0x5D, 0x00, 0x00, 0x78, 0x5D, 0x00, 0x00, 0xA0, 0x5D, 0x00, +/* 00000F00 */ 0x00, 0xBA, 0x5D, 0x00, 0x00, 0xE8, 0x5D, 0x00, 0x00, 0x0B, 0x5E, 0x00, 0x00, 0x6B, 0x5E, 0x00, +/* 00000F10 */ 0x00, 0xE8, 0x5E, 0x00, 0x00, 0xF6, 0x5E, 0x00, 0x00, 0x15, 0x5F, 0x00, 0x00, 0x26, 0x5F, 0x00, +/* 00000F20 */ 0x00, 0x30, 0x5F, 0x00, 0x00, 0x4F, 0x5F, 0x00, 0x00, 0x6B, 0x5F, 0x00, 0x00, 0x73, 0x5F, 0x00, +/* 00000F30 */ 0x00, 0x77, 0x5F, 0x00, 0x00, 0x00, 0x14, 0x73, 0x0C, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, 0xA8, +/* 00000F40 */ 0x41, 0xC0, 0x00, 0xFE, 0xD9, 0x02, 0x00, 0xFE, 0xB7, 0x01, 0xFE, 0xB7, 0x01, 0x01, 0x40, 0xFE, +/* 00000F50 */ 0x00, 0x90, 0xFE, 0xB7, 0x01, 0xFE, 0xC0, 0x5D, 0xFE, 0xC0, 0x5D, 0x01, 0x04, 0x04, 0x04, 0x04, +/* 00000F60 */ 0x03, 0x05, 0xFE, 0xDA, 0x02, 0x0A, 0x07, 0xA8, 0x00, 0xD6, 0x00, 0x04, 0x24, 0x00, 0x00, 0x01, +/* 00000F70 */ 0x05, 0x00, 0x00, 0x00, 0x00, 0x79, 0x0F, 0x00, 0x00, 0x7F, 0x1C, 0x08, 0xC0, 0x13, 0x10, 0x4B, +/* 00000F80 */ 0x00, 0x08, 0x01, 0xA2, 0x41, 0xD1, 0x00, 0x01, 0xFE, 0xC7, 0x01, 0xFE, 0xC7, 0x01, 0x12, 0x40, +/* 00000F90 */ 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0xC7, 0x01, 0xFE, 0xAD, 0x5D, 0xFE, 0xAD, 0x5D, 0x0C, 0x20, +/* 00000FA0 */ 0x28, 0x09, 0xF7, 0xE9, 0x1B, 0x3E, 0x3E, 0x3E, 0x3E, 0x04, 0x27, 0x08, 0x06, 0xFE, 0xDB, 0x02, +/* 00000FB0 */ 0x06, 0xFE, 0xDC, 0x02, 0x06, 0xFE, 0xDD, 0x02, 0x06, 0xFE, 0xDE, 0x02, 0x0B, 0x06, 0xFE, 0xDF, +/* 00000FC0 */ 0x02, 0x0C, 0x06, 0xFE, 0xE0, 0x02, 0x07, 0x05, 0xFE, 0xE1, 0x02, 0x06, 0xFE, 0xE2, 0x02, 0x01, +/* 00000FD0 */ 0x00, 0x06, 0xFE, 0xE3, 0x02, 0x06, 0xFE, 0xE4, 0x02, 0x06, 0xFE, 0xE5, 0x02, 0x06, 0xFE, 0xE6, +/* 00000FE0 */ 0x02, 0x06, 0xFE, 0xE7, 0x02, 0x06, 0xFE, 0xE8, 0x02, 0x06, 0xFE, 0xE9, 0x02, 0x06, 0xFE, 0xEA, +/* 00000FF0 */ 0x02, 0x06, 0xFE, 0xEB, 0x02, 0x06, 0xFE, 0xEC, 0x02, 0x06, 0xFE, 0xED, 0x02, 0x06, 0xFE, 0xEE, +/* 00001000 */ 0x02, 0x06, 0xFE, 0xEF, 0x02, 0x06, 0xFE, 0xF0, 0x02, 0x06, 0xFE, 0xF1, 0x02, 0x06, 0xFE, 0xF2, +/* 00001010 */ 0x02, 0x06, 0xFE, 0xF3, 0x02, 0xFE, 0x58, 0x04, 0x5F, 0x28, 0x20, 0x00, 0x45, 0x21, 0x28, 0x5F, +/* 00001020 */ 0x28, 0x21, 0x01, 0x45, 0x22, 0x28, 0x5F, 0x28, 0x21, 0x02, 0x45, 0x23, 0x28, 0x5F, 0x28, 0x21, +/* 00001030 */ 0x03, 0x45, 0x24, 0x28, 0x5F, 0x28, 0x21, 0x04, 0x45, 0x25, 0x28, 0x6D, 0x28, 0x21, 0x05, 0x07, +/* 00001040 */ 0x03, 0x00, 0x59, 0x00, 0x21, 0x5A, 0x01, 0x03, 0x00, 0x00, 0xD6, 0x00, 0x29, 0x5A, 0x02, 0x29, +/* 00001050 */ 0x00, 0x00, 0xF4, 0x03, 0xFF, 0x28, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6D, 0x28, 0x21, 0x06, +/* 00001060 */ 0x07, 0x01, 0x00, 0x59, 0x00, 0x21, 0xF4, 0x01, 0x28, 0x28, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, +/* 00001070 */ 0x45, 0x26, 0x28, 0x01, 0x58, 0x01, 0x28, 0x5F, 0x28, 0x28, 0x07, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 00001080 */ 0x02, 0x5A, 0x01, 0x26, 0x02, 0x00, 0xF0, 0x02, 0x29, 0x25, 0x02, 0x00, 0x77, 0x29, 0x28, 0x08, +/* 00001090 */ 0x01, 0x58, 0x01, 0x28, 0x5F, 0x29, 0x21, 0x09, 0x77, 0x29, 0x28, 0x0A, 0x01, 0x58, 0x01, 0x28, +/* 000010A0 */ 0x5F, 0x29, 0x21, 0x0B, 0x77, 0x29, 0x28, 0x0C, 0x01, 0x58, 0x01, 0x28, 0x5F, 0x29, 0x21, 0x0D, +/* 000010B0 */ 0x77, 0x29, 0x28, 0x0E, 0x01, 0x58, 0x01, 0x28, 0x5F, 0x29, 0x21, 0x0F, 0x77, 0x29, 0x28, 0x10, +/* 000010C0 */ 0x01, 0x58, 0x01, 0x28, 0x5F, 0x29, 0x21, 0x11, 0x77, 0x29, 0x28, 0x12, 0x45, 0x28, 0x23, 0x07, +/* 000010D0 */ 0x04, 0x00, 0x59, 0x00, 0x02, 0x01, 0x58, 0x01, 0x29, 0x5F, 0x29, 0x29, 0x13, 0x5F, 0x29, 0x29, +/* 000010E0 */ 0x14, 0x5A, 0x01, 0x29, 0x03, 0x00, 0x5A, 0x02, 0x04, 0x03, 0x00, 0x45, 0x29, 0x22, 0x07, 0x03, +/* 000010F0 */ 0x00, 0x59, 0x00, 0x02, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, +/* 00001100 */ 0x00, 0xD9, 0x01, 0x2B, 0x2A, 0x7B, 0x2B, 0x2A, 0x15, 0x7B, 0x07, 0x2A, 0x16, 0x7B, 0x09, 0x2A, +/* 00001110 */ 0x17, 0x7B, 0x07, 0x2A, 0x18, 0x5A, 0x01, 0x2A, 0x04, 0x00, 0x5A, 0x02, 0x0B, 0x04, 0x00, 0xF0, +/* 00001120 */ 0x03, 0x29, 0x29, 0x04, 0x00, 0x5A, 0x03, 0x29, 0x03, 0x00, 0xF0, 0x04, 0xFF, 0x28, 0x03, 0x00, +/* 00001130 */ 0x45, 0x28, 0x23, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x01, 0x58, 0x01, 0x29, 0x5F, 0x29, 0x29, +/* 00001140 */ 0x19, 0x5F, 0x29, 0x29, 0x1A, 0x5A, 0x01, 0x29, 0x05, 0x00, 0x5F, 0x29, 0x24, 0x1B, 0x5A, 0x02, +/* 00001150 */ 0x29, 0x05, 0x00, 0x45, 0x29, 0x22, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0xCE, 0x18, 0x00, 0x00, +/* 00001160 */ 0x00, 0x01, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x7B, 0x0C, 0x2A, 0x1C, 0x7B, 0x09, 0x2A, +/* 00001170 */ 0x1D, 0x7B, 0x09, 0x2A, 0x1E, 0x7B, 0x07, 0x2A, 0x1F, 0x5A, 0x01, 0x2A, 0x06, 0x00, 0x5A, 0x02, +/* 00001180 */ 0x0B, 0x06, 0x00, 0xF0, 0x03, 0x29, 0x29, 0x06, 0x00, 0x5A, 0x03, 0x29, 0x05, 0x00, 0xF0, 0x04, +/* 00001190 */ 0xFF, 0x28, 0x05, 0x00, 0x45, 0x28, 0x23, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x01, 0x58, 0x01, +/* 000011A0 */ 0x29, 0x5F, 0x29, 0x29, 0x20, 0x5F, 0x29, 0x29, 0x21, 0x5F, 0x29, 0x29, 0x22, 0x5A, 0x01, 0x29, +/* 000011B0 */ 0x07, 0x00, 0x5A, 0x02, 0x0D, 0x07, 0x00, 0x45, 0x29, 0x22, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, +/* 000011C0 */ 0xCE, 0x30, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x7B, 0x0E, 0x2A, +/* 000011D0 */ 0x23, 0x7B, 0x09, 0x2A, 0x24, 0x7B, 0x09, 0x2A, 0x25, 0x7B, 0x07, 0x2A, 0x26, 0x5A, 0x01, 0x2A, +/* 000011E0 */ 0x08, 0x00, 0x5A, 0x02, 0x0B, 0x08, 0x00, 0xF0, 0x03, 0x29, 0x29, 0x08, 0x00, 0x5A, 0x03, 0x29, +/* 000011F0 */ 0x07, 0x00, 0xF0, 0x04, 0xFF, 0x28, 0x07, 0x00, 0x45, 0x28, 0x23, 0x07, 0x04, 0x00, 0x59, 0x00, +/* 00001200 */ 0x02, 0x01, 0x58, 0x01, 0x29, 0x5F, 0x29, 0x29, 0x27, 0x5F, 0x29, 0x29, 0x28, 0x5F, 0x29, 0x29, +/* 00001210 */ 0x29, 0x5A, 0x01, 0x29, 0x09, 0x00, 0x5A, 0x02, 0x0F, 0x09, 0x00, 0x45, 0x29, 0x22, 0x07, 0x03, +/* 00001220 */ 0x00, 0x59, 0x00, 0x02, 0xCE, 0x48, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, +/* 00001230 */ 0x00, 0x7B, 0x04, 0x2A, 0x2A, 0x7B, 0x09, 0x2A, 0x2B, 0x7B, 0x09, 0x2A, 0x2C, 0x7B, 0x07, 0x2A, +/* 00001240 */ 0x2D, 0x5A, 0x01, 0x2A, 0x0A, 0x00, 0x5A, 0x02, 0x0B, 0x0A, 0x00, 0xF0, 0x03, 0x29, 0x29, 0x0A, +/* 00001250 */ 0x00, 0x5A, 0x03, 0x29, 0x09, 0x00, 0xF0, 0x04, 0xFF, 0x28, 0x09, 0x00, 0x6D, 0x28, 0x21, 0x2E, +/* 00001260 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x21, 0x5A, 0x01, 0x10, 0x0B, 0x00, 0xD6, 0x02, 0x29, 0x5A, 0x02, +/* 00001270 */ 0x29, 0x0B, 0x00, 0xF4, 0x03, 0xFF, 0x28, 0x2E, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x6D, 0x28, 0x21, +/* 00001280 */ 0x2F, 0x07, 0x03, 0x00, 0x59, 0x00, 0x21, 0x5A, 0x01, 0x11, 0x0C, 0x00, 0xD6, 0x03, 0x29, 0x5A, +/* 00001290 */ 0x02, 0x29, 0x0C, 0x00, 0xF4, 0x03, 0xFF, 0x28, 0x2F, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x6D, 0x28, +/* 000012A0 */ 0x21, 0x30, 0x07, 0x03, 0x00, 0x59, 0x00, 0x21, 0x5A, 0x01, 0x12, 0x0D, 0x00, 0xD6, 0x04, 0x29, +/* 000012B0 */ 0x5A, 0x02, 0x29, 0x0D, 0x00, 0xF4, 0x03, 0xFF, 0x28, 0x30, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x6D, +/* 000012C0 */ 0x28, 0x21, 0x31, 0x07, 0x03, 0x00, 0x59, 0x00, 0x21, 0x5A, 0x01, 0x13, 0x0E, 0x00, 0xD6, 0x05, +/* 000012D0 */ 0x29, 0x5A, 0x02, 0x29, 0x0E, 0x00, 0xF4, 0x03, 0xFF, 0x28, 0x31, 0x00, 0x00, 0x00, 0x0E, 0x00, +/* 000012E0 */ 0x6D, 0x28, 0x21, 0x32, 0x07, 0x03, 0x00, 0x59, 0x00, 0x21, 0x5A, 0x01, 0x14, 0x0F, 0x00, 0xD6, +/* 000012F0 */ 0x06, 0x29, 0x5A, 0x02, 0x29, 0x0F, 0x00, 0xF4, 0x03, 0xFF, 0x28, 0x32, 0x00, 0x00, 0x00, 0x0F, +/* 00001300 */ 0x00, 0x6D, 0x28, 0x21, 0x33, 0x07, 0x03, 0x00, 0x59, 0x00, 0x21, 0x5A, 0x01, 0x15, 0x10, 0x00, +/* 00001310 */ 0xD6, 0x07, 0x29, 0x5A, 0x02, 0x29, 0x10, 0x00, 0xF4, 0x03, 0xFF, 0x28, 0x33, 0x00, 0x00, 0x00, +/* 00001320 */ 0x10, 0x00, 0x6D, 0x28, 0x21, 0x34, 0x07, 0x03, 0x00, 0x59, 0x00, 0x21, 0x5A, 0x01, 0x16, 0x11, +/* 00001330 */ 0x00, 0xD6, 0x08, 0x29, 0x5A, 0x02, 0x29, 0x11, 0x00, 0xF4, 0x03, 0xFF, 0x28, 0x34, 0x00, 0x00, +/* 00001340 */ 0x00, 0x11, 0x00, 0x6D, 0x28, 0x21, 0x35, 0x07, 0x03, 0x00, 0x59, 0x00, 0x21, 0x5A, 0x01, 0x17, +/* 00001350 */ 0x12, 0x00, 0xD6, 0x09, 0x29, 0x5A, 0x02, 0x29, 0x12, 0x00, 0xF4, 0x03, 0xFF, 0x28, 0x35, 0x00, +/* 00001360 */ 0x00, 0x00, 0x12, 0x00, 0x6D, 0x28, 0x21, 0x36, 0x07, 0x03, 0x00, 0x59, 0x00, 0x21, 0x5A, 0x01, +/* 00001370 */ 0x18, 0x13, 0x00, 0xD6, 0x0A, 0x29, 0x5A, 0x02, 0x29, 0x13, 0x00, 0xF4, 0x03, 0xFF, 0x28, 0x36, +/* 00001380 */ 0x00, 0x00, 0x00, 0x13, 0x00, 0x6D, 0x28, 0x21, 0x37, 0x07, 0x03, 0x00, 0x59, 0x00, 0x21, 0x5A, +/* 00001390 */ 0x01, 0x19, 0x14, 0x00, 0xD6, 0x0B, 0x29, 0x5A, 0x02, 0x29, 0x14, 0x00, 0xF4, 0x03, 0xFF, 0x28, +/* 000013A0 */ 0x37, 0x00, 0x00, 0x00, 0x14, 0x00, 0x6D, 0x28, 0x21, 0x38, 0x07, 0x03, 0x00, 0x59, 0x00, 0x21, +/* 000013B0 */ 0x5A, 0x01, 0x1A, 0x15, 0x00, 0xD6, 0x0C, 0x29, 0x5A, 0x02, 0x29, 0x15, 0x00, 0xF4, 0x03, 0xFF, +/* 000013C0 */ 0x28, 0x38, 0x00, 0x00, 0x00, 0x15, 0x00, 0x6D, 0x28, 0x21, 0x39, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 000013D0 */ 0x21, 0x5A, 0x01, 0x1B, 0x16, 0x00, 0xD6, 0x0D, 0x29, 0x5A, 0x02, 0x29, 0x16, 0x00, 0xF4, 0x03, +/* 000013E0 */ 0xFF, 0x28, 0x39, 0x00, 0x00, 0x00, 0x16, 0x00, 0x6D, 0x28, 0x21, 0x3A, 0x07, 0x03, 0x00, 0x59, +/* 000013F0 */ 0x00, 0x21, 0x5A, 0x01, 0x1C, 0x17, 0x00, 0xD6, 0x0E, 0x29, 0x5A, 0x02, 0x29, 0x17, 0x00, 0xF4, +/* 00001400 */ 0x03, 0xFF, 0x28, 0x3A, 0x00, 0x00, 0x00, 0x17, 0x00, 0x6D, 0x28, 0x21, 0x3B, 0x07, 0x03, 0x00, +/* 00001410 */ 0x59, 0x00, 0x21, 0x5A, 0x01, 0x1D, 0x18, 0x00, 0xD6, 0x0F, 0x29, 0x5A, 0x02, 0x29, 0x18, 0x00, +/* 00001420 */ 0xF4, 0x03, 0xFF, 0x28, 0x3B, 0x00, 0x00, 0x00, 0x18, 0x00, 0x6D, 0x28, 0x21, 0x3C, 0x07, 0x03, +/* 00001430 */ 0x00, 0x59, 0x00, 0x21, 0x5A, 0x01, 0x1E, 0x19, 0x00, 0xD6, 0x10, 0x29, 0x5A, 0x02, 0x29, 0x19, +/* 00001440 */ 0x00, 0xF4, 0x03, 0xFF, 0x28, 0x3C, 0x00, 0x00, 0x00, 0x19, 0x00, 0x6D, 0x28, 0x21, 0x3D, 0x07, +/* 00001450 */ 0x03, 0x00, 0x59, 0x00, 0x21, 0x5A, 0x01, 0x1F, 0x1A, 0x00, 0xD6, 0x11, 0x29, 0x5A, 0x02, 0x29, +/* 00001460 */ 0x1A, 0x00, 0xF4, 0x03, 0xFF, 0x28, 0x3D, 0x00, 0x00, 0x00, 0x1A, 0x00, 0xA8, 0x00, 0x24, 0x00, +/* 00001470 */ 0x04, 0x60, 0x00, 0x48, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, +/* 00001480 */ 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x30, +/* 00001490 */ 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, +/* 000014A0 */ 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x03, +/* 000014B0 */ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, +/* 000014C0 */ 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, +/* 000014D0 */ 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, +/* 000014E0 */ 0x01, 0x00, 0x00, 0x59, 0xFE, 0xBE, 0x02, 0xFE, 0x8F, 0x02, 0xFE, 0x66, 0x01, 0xFE, 0x95, 0x02, +/* 000014F0 */ 0xFE, 0x7E, 0x02, 0xFE, 0x7B, 0x02, 0xFE, 0xDB, 0x02, 0xFE, 0x24, 0x01, 0xFE, 0xB6, 0x02, 0xFE, +/* 00001500 */ 0xB6, 0x02, 0xFE, 0xB0, 0x02, 0xFE, 0xB0, 0x02, 0xFE, 0xB5, 0x02, 0xFE, 0xB5, 0x02, 0xFE, 0xB3, +/* 00001510 */ 0x02, 0xFE, 0xB3, 0x02, 0xFE, 0xBA, 0x02, 0xFE, 0xBA, 0x02, 0xFE, 0xDB, 0x02, 0xFE, 0x24, 0x01, +/* 00001520 */ 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0xDB, 0x02, 0xFE, +/* 00001530 */ 0x24, 0x01, 0xFE, 0x79, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, +/* 00001540 */ 0x01, 0xFE, 0xDB, 0x02, 0xFE, 0x24, 0x01, 0xFE, 0x07, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, +/* 00001550 */ 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0xDB, 0x02, 0xFE, 0x24, 0x01, 0xFE, 0x07, 0x01, 0xFE, +/* 00001560 */ 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x7E, 0x02, 0xFE, 0x7F, +/* 00001570 */ 0x02, 0xFE, 0x7F, 0x02, 0xFE, 0x7F, 0x02, 0xFE, 0x7F, 0x02, 0xFE, 0x7E, 0x02, 0xFE, 0x7F, 0x02, +/* 00001580 */ 0xFE, 0x7E, 0x02, 0xFE, 0x7E, 0x02, 0xFE, 0x7F, 0x02, 0xFE, 0x7F, 0x02, 0xFE, 0x7F, 0x02, 0xFE, +/* 00001590 */ 0x7F, 0x02, 0xFE, 0x7F, 0x02, 0xFE, 0x7F, 0x02, 0xFE, 0x7F, 0x02, 0xFE, 0xE2, 0x01, 0x22, 0x00, +/* 000015A0 */ 0x00, 0x00, 0x00, 0x07, 0x00, 0x29, 0x00, 0x07, 0x00, 0x35, 0x00, 0x07, 0x00, 0x55, 0x00, 0x07, +/* 000015B0 */ 0x00, 0x22, 0x00, 0x07, 0x00, 0x45, 0x00, 0x21, 0x00, 0x89, 0x02, 0x17, 0x00, 0x63, 0x00, 0x1D, +/* 000015C0 */ 0x00, 0x4F, 0x00, 0x0C, 0x00, 0x4C, 0x00, 0x0C, 0x00, 0x54, 0x00, 0x0C, 0x00, 0x6C, 0x00, 0x0C, +/* 000015D0 */ 0x00, 0x48, 0x00, 0x0C, 0x00, 0x67, 0x00, 0x64, 0x00, 0xF5, 0x07, 0x64, 0x00, 0xC2, 0x00, 0x64, +/* 000015E0 */ 0x00, 0xAE, 0x00, 0x64, 0x00, 0xB1, 0x00, 0x21, 0x00, 0xBB, 0x00, 0x21, 0x00, 0x4D, 0x01, 0x21, +/* 000015F0 */ 0x00, 0x53, 0x01, 0x21, 0x00, 0x5B, 0x01, 0x21, 0x00, 0x1E, 0x05, 0x21, 0x00, 0xD0, 0x01, 0x21, +/* 00001600 */ 0x00, 0x6A, 0x03, 0x21, 0x00, 0x4F, 0x09, 0x21, 0x00, 0x8E, 0x0E, 0x21, 0x00, 0x08, 0x03, 0x21, +/* 00001610 */ 0x00, 0x99, 0x03, 0x21, 0x00, 0xFC, 0x04, 0x21, 0x00, 0x6C, 0x05, 0x21, 0x00, 0x72, 0x05, 0x21, +/* 00001620 */ 0x00, 0x9C, 0x05, 0x23, 0x00, 0x69, 0x0A, 0x00, 0xAE, 0x30, 0x00, 0x00, 0xDF, 0x2D, 0x00, 0x00, +/* 00001630 */ 0x7D, 0x2D, 0x00, 0x00, 0xAB, 0x2C, 0x00, 0x00, 0xD9, 0x2B, 0x00, 0x00, 0x07, 0x2B, 0x00, 0x00, +/* 00001640 */ 0x3C, 0x29, 0x00, 0x00, 0xD7, 0x27, 0x00, 0x00, 0xE6, 0x25, 0x00, 0x00, 0x34, 0x24, 0x00, 0x00, +/* 00001650 */ 0xD8, 0x21, 0x00, 0x00, 0x73, 0x20, 0x00, 0x00, 0x12, 0x1F, 0x00, 0x00, 0x98, 0x1D, 0x00, 0x00, +/* 00001660 */ 0x0B, 0x1C, 0x00, 0x00, 0x7E, 0x1A, 0x00, 0x00, 0xE2, 0x18, 0x00, 0x00, 0x70, 0x16, 0x00, 0x00, +/* 00001670 */ 0x7F, 0x3C, 0x0B, 0xC2, 0x43, 0x40, 0x13, 0x00, 0xFE, 0xF4, 0x01, 0x28, 0xA2, 0x41, 0xB1, 0x00, +/* 00001680 */ 0x13, 0xFE, 0x2E, 0x55, 0xFE, 0x2E, 0x55, 0x0B, 0xFE, 0x00, 0x90, 0x03, 0x02, 0xFE, 0x2E, 0x55, +/* 00001690 */ 0xFE, 0x42, 0x0A, 0xFE, 0x42, 0x0A, 0x0F, 0x0C, 0x16, 0x08, 0x6E, 0x60, 0x25, 0x01, 0x04, 0x05, +/* 000016A0 */ 0x02, 0x08, 0x08, 0x08, 0x08, 0x01, 0x16, 0xDC, 0xFE, 0x0A, 0x01, 0xFE, 0x2B, 0x01, 0xFE, 0x8D, +/* 000016B0 */ 0x01, 0x07, 0x08, 0x06, 0xFE, 0xFD, 0x02, 0x06, 0xFE, 0xFE, 0x02, 0x05, 0xFE, 0x08, 0x03, 0x01, +/* 000016C0 */ 0x00, 0x06, 0xFE, 0x01, 0x03, 0x01, 0x01, 0x0C, 0x0B, 0xFE, 0x97, 0x01, 0xB2, 0x13, 0x58, 0x10, +/* 000016D0 */ 0x4E, 0x0E, 0x4E, 0x0F, 0x4E, 0x11, 0x4E, 0x12, 0x4E, 0x14, 0x4E, 0x15, 0x15, 0x05, 0x00, 0x0D, +/* 000016E0 */ 0x03, 0xA8, 0x17, 0x45, 0x0D, 0x17, 0x4E, 0x0E, 0x4E, 0x0F, 0x4E, 0x11, 0x4E, 0x12, 0x4E, 0x14, +/* 000016F0 */ 0x4E, 0x15, 0x01, 0x58, 0x01, 0x19, 0x6D, 0x18, 0x19, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x19, +/* 00001700 */ 0x5A, 0x01, 0x10, 0x00, 0x00, 0x5A, 0x02, 0x06, 0x00, 0x00, 0xF4, 0x03, 0x18, 0x18, 0x00, 0x00, +/* 00001710 */ 0x00, 0x00, 0x00, 0x00, 0x45, 0x17, 0x18, 0x45, 0x19, 0x18, 0x0D, 0x05, 0x00, 0x19, 0x03, 0x01, +/* 00001720 */ 0x73, 0x01, 0x10, 0x16, 0x5F, 0x1A, 0x19, 0x01, 0x45, 0x0E, 0x1A, 0x5F, 0x1A, 0x19, 0x02, 0x45, +/* 00001730 */ 0x0F, 0x1A, 0x2A, 0x17, 0x0C, 0x15, 0x03, 0x00, 0x17, 0x08, 0x09, 0x1D, 0x00, 0x01, 0x58, 0x01, +/* 00001740 */ 0x18, 0x6D, 0x17, 0x18, 0x03, 0x07, 0x02, 0x00, 0x59, 0x00, 0x18, 0x5A, 0x01, 0x06, 0x01, 0x00, +/* 00001750 */ 0xF4, 0x02, 0xFF, 0x17, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x14, 0x03, 0x00, 0x0F, 0x07, 0x09, +/* 00001760 */ 0x27, 0x00, 0xA8, 0x17, 0x14, 0x03, 0x00, 0x0D, 0x17, 0x09, 0x1D, 0x00, 0x01, 0x58, 0x01, 0x18, +/* 00001770 */ 0x6D, 0x17, 0x18, 0x04, 0x07, 0x02, 0x00, 0x59, 0x00, 0x18, 0x5A, 0x01, 0x06, 0x02, 0x00, 0xF4, +/* 00001780 */ 0x02, 0xFF, 0x17, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x45, 0x11, 0x07, 0xA8, 0x17, 0x45, 0x12, +/* 00001790 */ 0x17, 0xA7, 0x17, 0x13, 0x05, 0x00, 0x00, 0x11, 0x03, 0x00, 0x17, 0x09, 0x09, 0x06, 0x00, 0x45, +/* 000017A0 */ 0x12, 0x0D, 0x09, 0x52, 0x00, 0x45, 0x14, 0x0A, 0xED, 0x00, 0xEE, 0x00, 0x0F, 0x24, 0x00, 0x14, +/* 000017B0 */ 0x12, 0x03, 0x00, 0x11, 0x0F, 0x09, 0x1C, 0x00, 0xBC, 0x17, 0x11, 0x0E, 0x00, 0x00, 0x0E, 0x0C, +/* 000017C0 */ 0x00, 0x17, 0x45, 0x14, 0x0B, 0x98, 0x17, 0x0E, 0x11, 0x01, 0x00, 0x45, 0x12, 0x17, 0x26, 0x11, +/* 000017D0 */ 0x11, 0x09, 0xD6, 0xFF, 0xEF, 0x00, 0x0F, 0x1D, 0x00, 0x14, 0x01, 0x58, 0x01, 0x18, 0x6D, 0x17, +/* 000017E0 */ 0x18, 0x06, 0x07, 0x02, 0x00, 0x59, 0x00, 0x18, 0x5A, 0x01, 0x06, 0x03, 0x00, 0xF4, 0x02, 0xFF, +/* 000017F0 */ 0x17, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0xED, 0x01, 0xEE, 0x01, 0x12, 0x03, 0x00, 0x11, 0x0F, +/* 00001800 */ 0x09, 0x54, 0x00, 0xBC, 0x17, 0x11, 0x0E, 0x02, 0x00, 0x0E, 0x44, 0x00, 0x17, 0x98, 0x17, 0x0E, +/* 00001810 */ 0x11, 0x03, 0x00, 0x45, 0x15, 0x17, 0x01, 0x58, 0x01, 0x18, 0x6D, 0x17, 0x18, 0x07, 0x07, 0x07, +/* 00001820 */ 0x00, 0x59, 0x00, 0x18, 0x5A, 0x01, 0x0C, 0x04, 0x00, 0xA8, 0x19, 0x5A, 0x02, 0x19, 0x04, 0x00, +/* 00001830 */ 0x5A, 0x03, 0x12, 0x04, 0x00, 0x5A, 0x04, 0x15, 0x04, 0x00, 0x5A, 0x05, 0x11, 0x04, 0x00, 0x5A, +/* 00001840 */ 0x06, 0x0E, 0x04, 0x00, 0xF4, 0x07, 0x17, 0x17, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x45, 0x12, +/* 00001850 */ 0x17, 0x26, 0x11, 0x11, 0x09, 0xA2, 0xFF, 0xEF, 0x01, 0x45, 0x00, 0x12, 0x09, 0x02, 0x00, 0xA8, +/* 00001860 */ 0x00, 0x24, 0x00, 0xFE, 0xE9, 0x02, 0xFE, 0xFD, 0x02, 0xFE, 0xFE, 0x02, 0xFE, 0xBA, 0x02, 0xFE, +/* 00001870 */ 0xB5, 0x02, 0xD1, 0xFE, 0xB5, 0x02, 0xFE, 0x8B, 0x02, 0xFE, 0x44, 0x55, 0x19, 0x10, 0x00, 0x00, +/* 00001880 */ 0x00, 0x16, 0x00, 0xBC, 0x00, 0x40, 0x00, 0xA8, 0x00, 0x0B, 0x00, 0x34, 0x00, 0x1D, 0x00, 0xB5, +/* 00001890 */ 0x00, 0x12, 0x00, 0x3B, 0x00, 0x1D, 0x00, 0xA3, 0x00, 0x03, 0x00, 0x13, 0x00, 0x05, 0x00, 0x7C, +/* 000018A0 */ 0x00, 0x0E, 0x00, 0x78, 0x00, 0x06, 0x00, 0x92, 0x00, 0x07, 0x00, 0x63, 0x00, 0x0C, 0x00, 0xEC, +/* 000018B0 */ 0x00, 0x0A, 0x00, 0x22, 0x00, 0x03, 0x00, 0x25, 0x00, 0x09, 0x00, 0x59, 0x00, 0x08, 0x00, 0x60, +/* 000018C0 */ 0x00, 0x04, 0x00, 0x21, 0x00, 0x21, 0x00, 0x9A, 0x00, 0x08, 0x00, 0x9A, 0x00, 0x0A, 0x00, 0x4C, +/* 000018D0 */ 0x00, 0x09, 0x00, 0x83, 0x00, 0x3B, 0x00, 0xA6, 0x00, 0x08, 0x00, 0x36, 0x00, 0x08, 0x00, 0x18, +/* 000018E0 */ 0x00, 0x00, 0x7F, 0x3C, 0x0A, 0xC2, 0x43, 0x40, 0x13, 0x00, 0xFE, 0xC4, 0x01, 0x2A, 0xA2, 0x41, +/* 000018F0 */ 0xD1, 0x00, 0x12, 0xFE, 0x94, 0x4F, 0xFE, 0x94, 0x4F, 0x09, 0xFE, 0x00, 0x90, 0x03, 0x02, 0xFE, +/* 00001900 */ 0x94, 0x4F, 0xFE, 0x6E, 0x05, 0xFE, 0x6E, 0x05, 0x0D, 0x0A, 0x12, 0x04, 0x49, 0x3B, 0x11, 0x01, +/* 00001910 */ 0x02, 0x01, 0x04, 0x04, 0x04, 0x04, 0x01, 0x12, 0xB3, 0xED, 0x08, 0x06, 0xFE, 0xFD, 0x02, 0x06, +/* 00001920 */ 0xFE, 0xFE, 0x02, 0x05, 0xFE, 0x07, 0x03, 0x01, 0x00, 0x0C, 0x0B, 0x01, 0x01, 0xF7, 0x58, 0x0E, +/* 00001930 */ 0x4E, 0x0C, 0x4E, 0x0D, 0x4E, 0x0F, 0x4E, 0x10, 0x4E, 0x11, 0x15, 0x05, 0x00, 0x0B, 0x02, 0xA8, +/* 00001940 */ 0x13, 0x45, 0x0B, 0x13, 0x4E, 0x0C, 0x4E, 0x0D, 0x4E, 0x0F, 0x4E, 0x10, 0x4E, 0x11, 0x01, 0x58, +/* 00001950 */ 0x01, 0x15, 0x6D, 0x14, 0x15, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x15, 0x5A, 0x01, 0x0E, 0x00, +/* 00001960 */ 0x00, 0x5A, 0x02, 0x05, 0x00, 0x00, 0xF4, 0x03, 0x14, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00001970 */ 0x45, 0x13, 0x14, 0x45, 0x15, 0x14, 0x0D, 0x05, 0x00, 0x15, 0x02, 0x01, 0x73, 0x01, 0x10, 0x16, +/* 00001980 */ 0x5F, 0x16, 0x15, 0x01, 0x45, 0x0C, 0x16, 0x5F, 0x16, 0x15, 0x02, 0x45, 0x0D, 0x16, 0x14, 0x03, +/* 00001990 */ 0x00, 0x0D, 0x06, 0x09, 0x06, 0x00, 0x45, 0x00, 0x07, 0x09, 0x87, 0x00, 0x01, 0x58, 0x01, 0x14, +/* 000019A0 */ 0x6D, 0x13, 0x14, 0x03, 0x07, 0x02, 0x00, 0x59, 0x00, 0x14, 0x5A, 0x01, 0x0B, 0x01, 0x00, 0xF4, +/* 000019B0 */ 0x02, 0x13, 0x13, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, 0x0F, 0x13, 0xA8, 0x13, 0x45, 0x10, +/* 000019C0 */ 0x13, 0x10, 0x03, 0x00, 0x0F, 0x06, 0x09, 0x06, 0x00, 0x45, 0x10, 0x0F, 0x09, 0x12, 0x00, 0x2D, +/* 000019D0 */ 0x13, 0x0D, 0x0F, 0x45, 0x10, 0x13, 0x12, 0x03, 0x00, 0x10, 0x06, 0x09, 0x03, 0x00, 0x45, 0x10, +/* 000019E0 */ 0x06, 0xED, 0x00, 0xEE, 0x00, 0x12, 0x03, 0x00, 0x10, 0x0D, 0x09, 0x2C, 0x00, 0x98, 0x13, 0x0C, +/* 000019F0 */ 0x10, 0x00, 0x00, 0x45, 0x11, 0x13, 0x14, 0x10, 0x00, 0x0A, 0x11, 0x15, 0x03, 0x00, 0x0A, 0x0A, +/* 00001A00 */ 0x09, 0x10, 0x00, 0x15, 0x03, 0x00, 0x11, 0x11, 0x09, 0x08, 0x00, 0x45, 0x00, 0x08, 0xEF, 0x00, +/* 00001A10 */ 0x09, 0x10, 0x00, 0x26, 0x10, 0x10, 0x09, 0xCA, 0xFF, 0xEF, 0x00, 0x45, 0x00, 0x07, 0x09, 0x02, +/* 00001A20 */ 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xE9, 0x02, 0xFE, 0xFD, 0x02, 0xFE, 0xFE, 0x02, 0xFE, 0x81, +/* 00001A30 */ 0x02, 0xFE, 0xAD, 0x4F, 0x12, 0x0C, 0x00, 0x00, 0x00, 0x14, 0x00, 0xBB, 0x00, 0x40, 0x00, 0x83, +/* 00001A40 */ 0x00, 0x08, 0x00, 0x1D, 0x00, 0x06, 0x00, 0x86, 0x00, 0x20, 0x00, 0x36, 0x00, 0x05, 0x00, 0x98, +/* 00001A50 */ 0x00, 0x08, 0x00, 0x1A, 0x00, 0x06, 0x00, 0x2D, 0x00, 0x07, 0x00, 0x1A, 0x00, 0x08, 0x00, 0x1D, +/* 00001A60 */ 0x00, 0x07, 0x00, 0x4F, 0x00, 0x08, 0x00, 0x5C, 0x00, 0x09, 0x00, 0x6F, 0x00, 0x15, 0x00, 0x85, +/* 00001A70 */ 0x00, 0x08, 0x00, 0x46, 0x00, 0x08, 0x00, 0x30, 0x00, 0x08, 0x00, 0x12, 0x00, 0x00, 0x7F, 0x3C, +/* 00001A80 */ 0x0A, 0xC2, 0x43, 0x40, 0x13, 0x00, 0xFE, 0x9F, 0x01, 0x27, 0xA2, 0x41, 0xD1, 0x00, 0x11, 0xFE, +/* 00001A90 */ 0x1F, 0x4A, 0xFE, 0x1F, 0x4A, 0x09, 0xFE, 0x00, 0x90, 0x03, 0x02, 0xFE, 0x1F, 0x4A, 0xFE, 0x47, +/* 00001AA0 */ 0x05, 0xFE, 0x47, 0x05, 0x0C, 0x0B, 0x12, 0x07, 0x43, 0x3A, 0x19, 0x02, 0x03, 0x01, 0x05, 0x05, +/* 00001AB0 */ 0x05, 0x05, 0x01, 0x12, 0x87, 0xEB, 0x08, 0x06, 0xFE, 0xFD, 0x02, 0x06, 0xFE, 0xFE, 0x02, 0x05, +/* 00001AC0 */ 0xFE, 0x06, 0x03, 0x01, 0x00, 0x06, 0xFE, 0x01, 0x03, 0x0C, 0x01, 0x01, 0x0B, 0xF5, 0x58, 0x0F, +/* 00001AD0 */ 0x4E, 0x0D, 0x4E, 0x0E, 0x4E, 0x10, 0x4E, 0x11, 0x15, 0x05, 0x00, 0x0C, 0x02, 0xA8, 0x13, 0x45, +/* 00001AE0 */ 0x0C, 0x13, 0x4E, 0x0D, 0x4E, 0x0E, 0x4E, 0x10, 0x4E, 0x11, 0x01, 0x58, 0x01, 0x15, 0x6D, 0x14, +/* 00001AF0 */ 0x15, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x15, 0x5A, 0x01, 0x0F, 0x00, 0x00, 0x5A, 0x02, 0x05, +/* 00001B00 */ 0x00, 0x00, 0xF4, 0x03, 0x14, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x13, 0x14, 0x45, +/* 00001B10 */ 0x15, 0x14, 0x0D, 0x05, 0x00, 0x15, 0x02, 0x01, 0x73, 0x01, 0x10, 0x16, 0x5F, 0x16, 0x15, 0x01, +/* 00001B20 */ 0x45, 0x0D, 0x16, 0x5F, 0x16, 0x15, 0x02, 0x45, 0x0E, 0x16, 0x2A, 0x13, 0x0B, 0x15, 0x03, 0x00, +/* 00001B30 */ 0x13, 0x07, 0x09, 0x1D, 0x00, 0x01, 0x58, 0x01, 0x14, 0x6D, 0x13, 0x14, 0x03, 0x07, 0x02, 0x00, +/* 00001B40 */ 0x59, 0x00, 0x14, 0x5A, 0x01, 0x05, 0x01, 0x00, 0xF4, 0x02, 0xFF, 0x13, 0x03, 0x00, 0x00, 0x00, +/* 00001B50 */ 0x01, 0x00, 0x45, 0x10, 0x06, 0xED, 0x00, 0xEE, 0x00, 0x12, 0x03, 0x00, 0x10, 0x0E, 0x09, 0x56, +/* 00001B60 */ 0x00, 0xBC, 0x13, 0x10, 0x0D, 0x00, 0x00, 0x0E, 0x46, 0x00, 0x13, 0x98, 0x13, 0x0D, 0x10, 0x01, +/* 00001B70 */ 0x00, 0x45, 0x11, 0x13, 0x01, 0x58, 0x01, 0x14, 0x6D, 0x13, 0x14, 0x04, 0x07, 0x06, 0x00, 0x59, +/* 00001B80 */ 0x00, 0x14, 0x5A, 0x01, 0x0B, 0x02, 0x00, 0x5A, 0x02, 0x0C, 0x02, 0x00, 0x5A, 0x03, 0x11, 0x02, +/* 00001B90 */ 0x00, 0x5A, 0x04, 0x10, 0x02, 0x00, 0x5A, 0x05, 0x0D, 0x02, 0x00, 0xF4, 0x06, 0x13, 0x13, 0x04, +/* 00001BA0 */ 0x00, 0x00, 0x00, 0x02, 0x00, 0x0F, 0x08, 0x00, 0x13, 0x45, 0x00, 0x08, 0xEF, 0x00, 0x09, 0x10, +/* 00001BB0 */ 0x00, 0x26, 0x10, 0x10, 0x09, 0xA0, 0xFF, 0xEF, 0x00, 0x45, 0x00, 0x0A, 0x09, 0x02, 0x00, 0xA8, +/* 00001BC0 */ 0x00, 0x24, 0x00, 0xFE, 0xE9, 0x02, 0xFE, 0xFD, 0x02, 0xFE, 0xFE, 0x02, 0xFE, 0xBA, 0x02, 0xFE, +/* 00001BD0 */ 0x8B, 0x02, 0xFE, 0x35, 0x4A, 0x0D, 0x0A, 0x00, 0x00, 0x00, 0x12, 0x00, 0xBE, 0x00, 0x40, 0x00, +/* 00001BE0 */ 0xA7, 0x00, 0x0B, 0x00, 0x34, 0x00, 0x1D, 0x00, 0xC2, 0x00, 0x07, 0x00, 0x3B, 0x00, 0x08, 0x00, +/* 00001BF0 */ 0x9A, 0x00, 0x0A, 0x00, 0x4C, 0x00, 0x09, 0x00, 0xB0, 0x00, 0x35, 0x00, 0x6B, 0x00, 0x08, 0x00, +/* 00001C00 */ 0x59, 0x00, 0x08, 0x00, 0x2F, 0x00, 0x08, 0x00, 0x11, 0x00, 0x00, 0x7F, 0x3C, 0x0A, 0xC2, 0x43, +/* 00001C10 */ 0x40, 0x13, 0x00, 0xFE, 0x7A, 0x01, 0x26, 0xA2, 0x41, 0xD1, 0x00, 0x10, 0xFE, 0xB2, 0x44, 0xFE, +/* 00001C20 */ 0xB2, 0x44, 0x09, 0xFE, 0x00, 0x90, 0x03, 0x02, 0xFE, 0xB2, 0x44, 0xFE, 0x42, 0x05, 0xFE, 0x42, +/* 00001C30 */ 0x05, 0x0C, 0x0B, 0x12, 0x07, 0x43, 0x3A, 0x19, 0x02, 0x03, 0x01, 0x05, 0x05, 0x05, 0x05, 0x01, +/* 00001C40 */ 0x12, 0x87, 0xEB, 0x08, 0x06, 0xFE, 0xFD, 0x02, 0x06, 0xFE, 0xFE, 0x02, 0x05, 0xFE, 0x05, 0x03, +/* 00001C50 */ 0x01, 0x00, 0x06, 0xFE, 0x01, 0x03, 0x0B, 0x01, 0x01, 0x0C, 0xF5, 0x58, 0x0F, 0x4E, 0x0D, 0x4E, +/* 00001C60 */ 0x0E, 0x4E, 0x10, 0x4E, 0x11, 0x15, 0x05, 0x00, 0x0C, 0x02, 0xA8, 0x13, 0x45, 0x0C, 0x13, 0x4E, +/* 00001C70 */ 0x0D, 0x4E, 0x0E, 0x4E, 0x10, 0x4E, 0x11, 0x01, 0x58, 0x01, 0x15, 0x6D, 0x14, 0x15, 0x00, 0x07, +/* 00001C80 */ 0x03, 0x00, 0x59, 0x00, 0x15, 0x5A, 0x01, 0x0F, 0x00, 0x00, 0x5A, 0x02, 0x05, 0x00, 0x00, 0xF4, +/* 00001C90 */ 0x03, 0x14, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x13, 0x14, 0x45, 0x15, 0x14, 0x0D, +/* 00001CA0 */ 0x05, 0x00, 0x15, 0x02, 0x01, 0x73, 0x01, 0x10, 0x16, 0x5F, 0x16, 0x15, 0x01, 0x45, 0x0D, 0x16, +/* 00001CB0 */ 0x5F, 0x16, 0x15, 0x02, 0x45, 0x0E, 0x16, 0x2A, 0x13, 0x0B, 0x15, 0x03, 0x00, 0x13, 0x07, 0x09, +/* 00001CC0 */ 0x1D, 0x00, 0x01, 0x58, 0x01, 0x14, 0x6D, 0x13, 0x14, 0x03, 0x07, 0x02, 0x00, 0x59, 0x00, 0x14, +/* 00001CD0 */ 0x5A, 0x01, 0x05, 0x01, 0x00, 0xF4, 0x02, 0xFF, 0x13, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, +/* 00001CE0 */ 0x10, 0x06, 0xED, 0x00, 0xEE, 0x00, 0x12, 0x03, 0x00, 0x10, 0x0E, 0x09, 0x56, 0x00, 0xBC, 0x13, +/* 00001CF0 */ 0x10, 0x0D, 0x00, 0x00, 0x0E, 0x46, 0x00, 0x13, 0x98, 0x13, 0x0D, 0x10, 0x01, 0x00, 0x45, 0x11, +/* 00001D00 */ 0x13, 0x01, 0x58, 0x01, 0x14, 0x6D, 0x13, 0x14, 0x04, 0x07, 0x06, 0x00, 0x59, 0x00, 0x14, 0x5A, +/* 00001D10 */ 0x01, 0x0B, 0x02, 0x00, 0x5A, 0x02, 0x0C, 0x02, 0x00, 0x5A, 0x03, 0x11, 0x02, 0x00, 0x5A, 0x04, +/* 00001D20 */ 0x10, 0x02, 0x00, 0x5A, 0x05, 0x0D, 0x02, 0x00, 0xF4, 0x06, 0x13, 0x13, 0x04, 0x00, 0x00, 0x00, +/* 00001D30 */ 0x02, 0x00, 0x0E, 0x08, 0x00, 0x13, 0x45, 0x00, 0x08, 0xEF, 0x00, 0x09, 0x10, 0x00, 0x26, 0x10, +/* 00001D40 */ 0x10, 0x09, 0xA0, 0xFF, 0xEF, 0x00, 0x45, 0x00, 0x0A, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, +/* 00001D50 */ 0xFE, 0xE9, 0x02, 0xFE, 0xFD, 0x02, 0xFE, 0xFE, 0x02, 0xFE, 0xBA, 0x02, 0xFE, 0x8B, 0x02, 0xFE, +/* 00001D60 */ 0xC8, 0x44, 0x0D, 0x0A, 0x00, 0x00, 0x00, 0x12, 0x00, 0xBD, 0x00, 0x40, 0x00, 0xA6, 0x00, 0x0B, +/* 00001D70 */ 0x00, 0x34, 0x00, 0x1D, 0x00, 0xC1, 0x00, 0x07, 0x00, 0x3B, 0x00, 0x08, 0x00, 0x9A, 0x00, 0x0A, +/* 00001D80 */ 0x00, 0x4C, 0x00, 0x09, 0x00, 0xAE, 0x00, 0x35, 0x00, 0x6A, 0x00, 0x08, 0x00, 0x58, 0x00, 0x08, +/* 00001D90 */ 0x00, 0x30, 0x00, 0x08, 0x00, 0x12, 0x00, 0x00, 0x7F, 0x3C, 0x0A, 0xC2, 0x43, 0x40, 0x13, 0x00, +/* 00001DA0 */ 0xFE, 0x58, 0x01, 0x29, 0xA2, 0x41, 0xD1, 0x00, 0x0F, 0xFE, 0xB9, 0x3F, 0xFE, 0xB9, 0x3F, 0x09, +/* 00001DB0 */ 0xFE, 0x00, 0x90, 0x03, 0x02, 0xFE, 0xB9, 0x3F, 0xFE, 0xCF, 0x04, 0xFE, 0xCF, 0x04, 0x0C, 0x09, +/* 00001DC0 */ 0x10, 0x07, 0x3F, 0x38, 0x15, 0x02, 0x03, 0x01, 0x05, 0x05, 0x05, 0x05, 0x01, 0x10, 0x87, 0xDF, +/* 00001DD0 */ 0x08, 0x06, 0xFE, 0xFD, 0x02, 0x06, 0xFE, 0xFE, 0x02, 0x05, 0xFE, 0x04, 0x03, 0x01, 0x00, 0x06, +/* 00001DE0 */ 0xFE, 0x01, 0x03, 0x01, 0x01, 0xE8, 0x58, 0x0D, 0x4E, 0x0B, 0x4E, 0x0C, 0x4E, 0x0E, 0x4E, 0x0F, +/* 00001DF0 */ 0x15, 0x05, 0x00, 0x0A, 0x02, 0xA8, 0x11, 0x45, 0x0A, 0x11, 0x4E, 0x0B, 0x4E, 0x0C, 0x4E, 0x0E, +/* 00001E00 */ 0x4E, 0x0F, 0x01, 0x58, 0x01, 0x13, 0x6D, 0x12, 0x13, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x13, +/* 00001E10 */ 0x5A, 0x01, 0x0D, 0x00, 0x00, 0x5A, 0x02, 0x05, 0x00, 0x00, 0xF4, 0x03, 0x12, 0x12, 0x00, 0x00, +/* 00001E20 */ 0x00, 0x00, 0x00, 0x00, 0x45, 0x11, 0x12, 0x45, 0x13, 0x12, 0x0D, 0x05, 0x00, 0x13, 0x02, 0x01, +/* 00001E30 */ 0x73, 0x01, 0x10, 0x16, 0x5F, 0x14, 0x13, 0x01, 0x45, 0x0B, 0x14, 0x5F, 0x14, 0x13, 0x02, 0x45, +/* 00001E40 */ 0x0C, 0x14, 0x2A, 0x11, 0x09, 0x15, 0x03, 0x00, 0x11, 0x07, 0x09, 0x1D, 0x00, 0x01, 0x58, 0x01, +/* 00001E50 */ 0x12, 0x6D, 0x11, 0x12, 0x03, 0x07, 0x02, 0x00, 0x59, 0x00, 0x12, 0x5A, 0x01, 0x05, 0x01, 0x00, +/* 00001E60 */ 0xF4, 0x02, 0xFF, 0x11, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, 0x0E, 0x06, 0xED, 0x00, 0xEE, +/* 00001E70 */ 0x00, 0x12, 0x03, 0x00, 0x0E, 0x0C, 0x09, 0x4A, 0x00, 0xBC, 0x11, 0x0E, 0x0B, 0x00, 0x00, 0x0E, +/* 00001E80 */ 0x3A, 0x00, 0x11, 0x98, 0x11, 0x0B, 0x0E, 0x01, 0x00, 0x45, 0x0F, 0x11, 0x01, 0x58, 0x01, 0x12, +/* 00001E90 */ 0x6D, 0x11, 0x12, 0x04, 0x07, 0x06, 0x00, 0x59, 0x00, 0x12, 0x5A, 0x01, 0x09, 0x02, 0x00, 0x5A, +/* 00001EA0 */ 0x02, 0x0A, 0x02, 0x00, 0x5A, 0x03, 0x0F, 0x02, 0x00, 0x5A, 0x04, 0x0E, 0x02, 0x00, 0x5A, 0x05, +/* 00001EB0 */ 0x0B, 0x02, 0x00, 0xF4, 0x06, 0xFF, 0x11, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x26, 0x0E, 0x0E, +/* 00001EC0 */ 0x09, 0xAC, 0xFF, 0xEF, 0x00, 0xA8, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xE9, +/* 00001ED0 */ 0x02, 0xFE, 0xFD, 0x02, 0xFE, 0xFE, 0x02, 0xFE, 0xBA, 0x02, 0xFE, 0x8B, 0x02, 0xFE, 0xCF, 0x3F, +/* 00001EE0 */ 0x0C, 0x0A, 0x00, 0x00, 0x00, 0x12, 0x00, 0xB8, 0x00, 0x40, 0x00, 0xB1, 0x00, 0x0B, 0x00, 0x34, +/* 00001EF0 */ 0x00, 0x1D, 0x00, 0xC4, 0x00, 0x07, 0x00, 0x3B, 0x00, 0x08, 0x00, 0x9A, 0x00, 0x0A, 0x00, 0x4C, +/* 00001F00 */ 0x00, 0x09, 0x00, 0x63, 0x00, 0x31, 0x00, 0x89, 0x00, 0x08, 0x00, 0x34, 0x00, 0x07, 0x00, 0x16, +/* 00001F10 */ 0x00, 0x00, 0x7F, 0x1C, 0x08, 0xC0, 0x03, 0x00, 0x03, 0x00, 0xFE, 0x46, 0x01, 0x29, 0xA2, 0x41, +/* 00001F20 */ 0xD1, 0x00, 0x0E, 0xFE, 0x20, 0x3C, 0xFE, 0x20, 0x3C, 0x09, 0xFE, 0x00, 0x90, 0x03, 0x02, 0xFE, +/* 00001F30 */ 0x20, 0x3C, 0xFE, 0x6C, 0x03, 0xFE, 0x6C, 0x03, 0x0A, 0x08, 0x0E, 0x08, 0x3A, 0x33, 0x04, 0x06, +/* 00001F40 */ 0x06, 0x06, 0x06, 0x08, 0x06, 0xFE, 0xFD, 0x02, 0x06, 0xFE, 0xFE, 0x02, 0x05, 0xFE, 0x03, 0x03, +/* 00001F50 */ 0x01, 0x00, 0x06, 0xFE, 0x01, 0x03, 0xE5, 0x58, 0x0C, 0x4E, 0x0A, 0x4E, 0x0B, 0x4E, 0x0D, 0x15, +/* 00001F60 */ 0x05, 0x00, 0x09, 0x02, 0xA8, 0x0E, 0x45, 0x09, 0x0E, 0x4E, 0x0A, 0x4E, 0x0B, 0x4E, 0x0D, 0x01, +/* 00001F70 */ 0x58, 0x01, 0x10, 0x6D, 0x0F, 0x10, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x10, 0x5A, 0x01, 0x0C, +/* 00001F80 */ 0x00, 0x00, 0x5A, 0x02, 0x05, 0x00, 0x00, 0xF4, 0x03, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00001F90 */ 0x00, 0x45, 0x0E, 0x0F, 0x45, 0x10, 0x0F, 0x0D, 0x05, 0x00, 0x10, 0x02, 0x01, 0x73, 0x01, 0x10, +/* 00001FA0 */ 0x16, 0x5F, 0x11, 0x10, 0x01, 0x45, 0x0A, 0x11, 0x5F, 0x11, 0x10, 0x02, 0x45, 0x0B, 0x11, 0x2A, +/* 00001FB0 */ 0x0E, 0x08, 0x15, 0x03, 0x00, 0x0E, 0x07, 0x09, 0x1D, 0x00, 0x01, 0x58, 0x01, 0x0F, 0x6D, 0x0E, +/* 00001FC0 */ 0x0F, 0x03, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0F, 0x5A, 0x01, 0x05, 0x01, 0x00, 0xF4, 0x02, 0xFF, +/* 00001FD0 */ 0x0E, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x58, 0x01, 0x0F, 0x6D, 0x0E, 0x0F, 0x04, 0x07, +/* 00001FE0 */ 0x03, 0x00, 0x59, 0x00, 0x0F, 0x5A, 0x01, 0x0A, 0x02, 0x00, 0x5A, 0x02, 0x06, 0x02, 0x00, 0xF4, +/* 00001FF0 */ 0x03, 0x0E, 0x0E, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x45, 0x0D, 0x0E, 0x01, 0x58, 0x01, 0x0F, +/* 00002000 */ 0x6D, 0x0E, 0x0F, 0x05, 0x07, 0x07, 0x00, 0x59, 0x00, 0x0F, 0x5A, 0x01, 0x0D, 0x03, 0x00, 0x5A, +/* 00002010 */ 0x02, 0x0A, 0x03, 0x00, 0x5A, 0x03, 0x0B, 0x03, 0x00, 0x5A, 0x04, 0x06, 0x03, 0x00, 0x5A, 0x05, +/* 00002020 */ 0x08, 0x03, 0x00, 0x5A, 0x06, 0x09, 0x03, 0x00, 0xF4, 0x07, 0xFF, 0x0E, 0x05, 0x00, 0x00, 0x00, +/* 00002030 */ 0x03, 0x00, 0x45, 0x00, 0x0D, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xE9, 0x02, 0xFE, +/* 00002040 */ 0xFD, 0x02, 0xFE, 0xFE, 0x02, 0xFE, 0xBA, 0x02, 0xFE, 0x82, 0x02, 0xFE, 0xEC, 0x02, 0xFE, 0x3A, +/* 00002050 */ 0x3C, 0x08, 0x08, 0x00, 0x00, 0x00, 0x10, 0x00, 0x8B, 0x00, 0x40, 0x00, 0xAE, 0x00, 0x0B, 0x00, +/* 00002060 */ 0x38, 0x00, 0x1D, 0x00, 0xE1, 0x00, 0x25, 0x00, 0x83, 0x00, 0x36, 0x00, 0x6E, 0x00, 0x08, 0x00, +/* 00002070 */ 0x0E, 0x00, 0x00, 0x7F, 0x1C, 0x08, 0xC0, 0x03, 0x00, 0x03, 0x00, 0xFE, 0x35, 0x01, 0x26, 0xA2, +/* 00002080 */ 0x41, 0xD1, 0x00, 0x0D, 0xFE, 0x15, 0x39, 0xFE, 0x15, 0x39, 0x09, 0xFE, 0x00, 0x90, 0x02, 0x01, +/* 00002090 */ 0xFE, 0x15, 0x39, 0xFE, 0xDE, 0x02, 0xFE, 0xDE, 0x02, 0x0A, 0x08, 0x0E, 0x07, 0x3F, 0x36, 0x04, +/* 000020A0 */ 0x06, 0x06, 0x06, 0x06, 0x08, 0x06, 0xFE, 0xFD, 0x02, 0x06, 0xFE, 0xFE, 0x02, 0x05, 0xFE, 0x02, +/* 000020B0 */ 0x03, 0x01, 0x00, 0x01, 0x01, 0xEF, 0x58, 0x0B, 0x4E, 0x09, 0x4E, 0x0A, 0x4E, 0x0C, 0x4E, 0x0D, +/* 000020C0 */ 0x15, 0x05, 0x00, 0x08, 0x02, 0xA8, 0x0E, 0x45, 0x08, 0x0E, 0x4E, 0x09, 0x4E, 0x0A, 0x4E, 0x0C, +/* 000020D0 */ 0x4E, 0x0D, 0x01, 0x58, 0x01, 0x10, 0x6D, 0x0F, 0x10, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x10, +/* 000020E0 */ 0x5A, 0x01, 0x0B, 0x00, 0x00, 0x5A, 0x02, 0x05, 0x00, 0x00, 0xF4, 0x03, 0x0F, 0x0F, 0x00, 0x00, +/* 000020F0 */ 0x00, 0x00, 0x00, 0x00, 0x45, 0x0E, 0x0F, 0x45, 0x10, 0x0F, 0x0D, 0x05, 0x00, 0x10, 0x02, 0x01, +/* 00002100 */ 0x73, 0x01, 0x10, 0x16, 0x5F, 0x11, 0x10, 0x01, 0x45, 0x09, 0x11, 0x5F, 0x11, 0x10, 0x02, 0x45, +/* 00002110 */ 0x0A, 0x11, 0xA8, 0x0E, 0x15, 0x03, 0x00, 0x08, 0x0E, 0x09, 0x23, 0x00, 0x01, 0x58, 0x01, 0x10, +/* 00002120 */ 0x6D, 0x0F, 0x10, 0x03, 0x07, 0x02, 0x00, 0x59, 0x00, 0x10, 0x5A, 0x01, 0x08, 0x01, 0x00, 0xF4, +/* 00002130 */ 0x02, 0x0F, 0x0F, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, 0x0E, 0x0F, 0x09, 0x03, 0x00, 0x46, +/* 00002140 */ 0x0E, 0x07, 0x45, 0x0C, 0x0E, 0x01, 0x58, 0x01, 0x0F, 0x6D, 0x0E, 0x0F, 0x04, 0x07, 0x03, 0x00, +/* 00002150 */ 0x59, 0x00, 0x0F, 0x5A, 0x01, 0x09, 0x02, 0x00, 0x5A, 0x02, 0x06, 0x02, 0x00, 0xF4, 0x03, 0x0E, +/* 00002160 */ 0x0E, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x45, 0x0D, 0x0E, 0x01, 0x58, 0x01, 0x0F, 0x6D, 0x0E, +/* 00002170 */ 0x0F, 0x05, 0x07, 0x06, 0x00, 0x59, 0x00, 0x0F, 0x5A, 0x01, 0x0D, 0x03, 0x00, 0x5A, 0x02, 0x09, +/* 00002180 */ 0x03, 0x00, 0x5A, 0x03, 0x0A, 0x03, 0x00, 0x5A, 0x04, 0x06, 0x03, 0x00, 0x5A, 0x05, 0x0C, 0x03, +/* 00002190 */ 0x00, 0xF4, 0x06, 0xFF, 0x0E, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x45, 0x00, 0x0D, 0x09, 0x02, +/* 000021A0 */ 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xE9, 0x02, 0xFE, 0xFD, 0x02, 0xFE, 0xFE, 0x02, 0xFE, 0x81, +/* 000021B0 */ 0x02, 0xFE, 0x82, 0x02, 0xFE, 0xEB, 0x02, 0xFE, 0x1F, 0x39, 0x07, 0x0A, 0x00, 0x00, 0x00, 0x12, +/* 000021C0 */ 0x00, 0x89, 0x00, 0x40, 0x00, 0xD9, 0x00, 0x33, 0x00, 0x87, 0x00, 0x25, 0x00, 0x83, 0x00, 0x31, +/* 000021D0 */ 0x00, 0x59, 0x00, 0x08, 0x00, 0x0E, 0x00, 0x00, 0x7F, 0x3C, 0x0B, 0xC2, 0x03, 0x00, 0x13, 0x00, +/* 000021E0 */ 0xF4, 0x45, 0xA2, 0x41, 0xD1, 0x00, 0x0C, 0xFE, 0xA6, 0x2A, 0xFE, 0xA6, 0x2A, 0x01, 0xFE, 0x00, +/* 000021F0 */ 0x90, 0x07, 0x07, 0xFE, 0xA6, 0x2A, 0xFE, 0x45, 0x0E, 0xFE, 0x45, 0x0E, 0x0E, 0x06, 0x11, 0x07, +/* 00002200 */ 0x64, 0x5B, 0x52, 0x01, 0x04, 0x07, 0x02, 0x08, 0x08, 0x08, 0x08, 0x1F, 0xFE, 0x86, 0x01, 0xB9, +/* 00002210 */ 0xFE, 0x2C, 0x01, 0x01, 0x00, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x43, 0x05, 0xFE, +/* 00002220 */ 0x03, 0x03, 0x01, 0x01, 0xFE, 0x90, 0x01, 0x4E, 0x0C, 0x4E, 0x0D, 0x4E, 0x0E, 0x4E, 0x0F, 0x4E, +/* 00002230 */ 0x10, 0x45, 0x0C, 0x09, 0x45, 0x0D, 0x02, 0xA8, 0x11, 0x45, 0x0E, 0x11, 0xA8, 0x11, 0x45, 0x0F, +/* 00002240 */ 0x11, 0xA8, 0x11, 0x45, 0x10, 0x11, 0xED, 0x00, 0xEE, 0x00, 0x12, 0x03, 0x00, 0x0D, 0x08, 0x09, +/* 00002250 */ 0x59, 0x01, 0xBC, 0x11, 0x0D, 0x07, 0x00, 0x00, 0x0E, 0x49, 0x01, 0x11, 0x01, 0x58, 0x01, 0x12, +/* 00002260 */ 0x6D, 0x11, 0x12, 0x00, 0x07, 0x06, 0x00, 0x59, 0x00, 0x12, 0x5A, 0x01, 0x0A, 0x00, 0x00, 0x5A, +/* 00002270 */ 0x02, 0x0B, 0x00, 0x00, 0x98, 0x13, 0x07, 0x0D, 0x01, 0x00, 0x5A, 0x03, 0x13, 0x00, 0x00, 0x5A, +/* 00002280 */ 0x04, 0x0D, 0x00, 0x00, 0x5A, 0x05, 0x07, 0x00, 0x00, 0xF4, 0x06, 0x11, 0x11, 0x00, 0x00, 0x00, +/* 00002290 */ 0x00, 0x00, 0x00, 0x45, 0x0E, 0x11, 0x01, 0x58, 0x01, 0x12, 0x6D, 0x11, 0x12, 0x01, 0x07, 0x02, +/* 000022A0 */ 0x00, 0x59, 0x00, 0x12, 0x5A, 0x01, 0x0E, 0x01, 0x00, 0xF4, 0x02, 0x11, 0x11, 0x01, 0x00, 0x00, +/* 000022B0 */ 0x00, 0x01, 0x00, 0x0E, 0x9F, 0x00, 0x11, 0x01, 0x58, 0x01, 0x12, 0x6D, 0x11, 0x12, 0x02, 0x07, +/* 000022C0 */ 0x02, 0x00, 0x59, 0x00, 0x12, 0xA7, 0x13, 0x0E, 0x03, 0x00, 0x00, 0x5A, 0x01, 0x13, 0x02, 0x00, +/* 000022D0 */ 0xF4, 0x02, 0x11, 0x11, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x45, 0x0F, 0x11, 0x45, 0x10, 0x02, +/* 000022E0 */ 0xED, 0x01, 0xEE, 0x01, 0x12, 0x03, 0x00, 0x10, 0x0F, 0x09, 0x65, 0x00, 0xBC, 0x11, 0x10, 0x0E, +/* 000022F0 */ 0x02, 0x00, 0x0E, 0x55, 0x00, 0x11, 0x10, 0x03, 0x00, 0x0C, 0x03, 0x09, 0x1D, 0x00, 0x01, 0x58, +/* 00002300 */ 0x01, 0x12, 0x6D, 0x11, 0x12, 0x04, 0x07, 0x02, 0x00, 0x59, 0x00, 0x12, 0x5A, 0x01, 0x04, 0x03, +/* 00002310 */ 0x00, 0xF4, 0x02, 0xFF, 0x11, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x01, 0x58, 0x01, 0x12, 0x6D, +/* 00002320 */ 0x11, 0x12, 0x05, 0x07, 0x04, 0x00, 0x59, 0x00, 0x12, 0x5A, 0x01, 0x06, 0x04, 0x00, 0x5A, 0x02, +/* 00002330 */ 0x0C, 0x04, 0x00, 0x98, 0x13, 0x0E, 0x10, 0x03, 0x00, 0x5A, 0x03, 0x13, 0x04, 0x00, 0xF4, 0x04, +/* 00002340 */ 0xFF, 0x11, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x26, 0x0C, 0x0C, 0x26, 0x10, 0x10, 0x09, 0x91, +/* 00002350 */ 0xFF, 0xEF, 0x01, 0x09, 0x4F, 0x00, 0x10, 0x03, 0x00, 0x0C, 0x03, 0x09, 0x1D, 0x00, 0x01, 0x58, +/* 00002360 */ 0x01, 0x12, 0x6D, 0x11, 0x12, 0x06, 0x07, 0x02, 0x00, 0x59, 0x00, 0x12, 0x5A, 0x01, 0x04, 0x05, +/* 00002370 */ 0x00, 0xF4, 0x02, 0xFF, 0x11, 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, 0x01, 0x58, 0x01, 0x12, 0x6D, +/* 00002380 */ 0x11, 0x12, 0x07, 0x07, 0x04, 0x00, 0x59, 0x00, 0x12, 0x5A, 0x01, 0x06, 0x06, 0x00, 0x5A, 0x02, +/* 00002390 */ 0x0C, 0x06, 0x00, 0x5A, 0x03, 0x0E, 0x06, 0x00, 0xF4, 0x04, 0xFF, 0x11, 0x07, 0x00, 0x00, 0x00, +/* 000023A0 */ 0x06, 0x00, 0x26, 0x0C, 0x0C, 0x26, 0x0D, 0x0D, 0x09, 0x9D, 0xFE, 0xEF, 0x00, 0x45, 0x00, 0x0C, +/* 000023B0 */ 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x8B, 0x02, 0xBE, 0xFE, 0x80, 0x02, 0xD1, 0xFE, +/* 000023C0 */ 0xB3, 0x02, 0xFE, 0x83, 0x02, 0xFE, 0xB3, 0x02, 0xFE, 0x83, 0x02, 0xFE, 0x92, 0x2C, 0x19, 0x0A, +/* 000023D0 */ 0x00, 0x00, 0x00, 0x03, 0x00, 0x44, 0x00, 0x03, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0D, 0x00, 0x05, +/* 000023E0 */ 0x00, 0x0D, 0x00, 0x09, 0x00, 0x1B, 0x00, 0x08, 0x00, 0x95, 0x00, 0x0A, 0x00, 0x6F, 0x01, 0x3A, +/* 000023F0 */ 0x00, 0x2E, 0x02, 0x21, 0x00, 0xA5, 0x00, 0x26, 0x00, 0x4C, 0x00, 0x07, 0x00, 0x2B, 0x00, 0x08, +/* 00002400 */ 0x00, 0x34, 0x00, 0x0A, 0x00, 0x93, 0x00, 0x08, 0x00, 0x54, 0x00, 0x1D, 0x00, 0xEC, 0x00, 0x2D, +/* 00002410 */ 0x00, 0xB4, 0x00, 0x03, 0x00, 0x41, 0x00, 0x0B, 0x00, 0xC9, 0x00, 0x08, 0x00, 0x4C, 0x00, 0x1D, +/* 00002420 */ 0x00, 0xD4, 0x00, 0x27, 0x00, 0x98, 0x00, 0x03, 0x00, 0x69, 0x00, 0x08, 0x00, 0x42, 0x00, 0x08, +/* 00002430 */ 0x00, 0x18, 0x00, 0x00, 0x7F, 0x3C, 0x0B, 0xC2, 0x03, 0x00, 0x13, 0x00, 0xC6, 0x3F, 0xA2, 0x41, +/* 00002440 */ 0xD1, 0x00, 0x0B, 0xFE, 0x51, 0x21, 0xFE, 0x51, 0x21, 0x01, 0xFE, 0x00, 0x90, 0x06, 0x06, 0xFE, +/* 00002450 */ 0x51, 0x21, 0xFE, 0x0C, 0x09, 0xFE, 0x0C, 0x09, 0x0D, 0x06, 0x0E, 0x0A, 0x45, 0x3F, 0x39, 0x01, +/* 00002460 */ 0x02, 0x05, 0x01, 0x06, 0x06, 0x06, 0x06, 0x11, 0xFE, 0x0E, 0x01, 0x01, 0x00, 0x01, 0x01, 0x04, +/* 00002470 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x43, 0x05, 0xFE, 0x02, 0x03, 0xFE, 0x18, 0x01, 0x4E, +/* 00002480 */ 0x0B, 0x4E, 0x0C, 0x4E, 0x0D, 0x45, 0x0B, 0x09, 0x45, 0x0C, 0x02, 0xA8, 0x0E, 0x45, 0x0D, 0x0E, +/* 00002490 */ 0xED, 0x00, 0xEE, 0x00, 0x12, 0x03, 0x00, 0x0C, 0x08, 0x09, 0xEF, 0x00, 0xBC, 0x0E, 0x0C, 0x07, +/* 000024A0 */ 0x00, 0x00, 0x0E, 0xDF, 0x00, 0x0E, 0x98, 0x0E, 0x07, 0x0C, 0x01, 0x00, 0x45, 0x0D, 0x0E, 0x11, +/* 000024B0 */ 0x03, 0x00, 0x0A, 0x02, 0x09, 0x7F, 0x00, 0x01, 0x58, 0x01, 0x0F, 0x6D, 0x0E, 0x0F, 0x00, 0x07, +/* 000024C0 */ 0x02, 0x00, 0x59, 0x00, 0x0F, 0x5A, 0x01, 0x0D, 0x00, 0x00, 0xF4, 0x02, 0x0E, 0x0E, 0x00, 0x00, +/* 000024D0 */ 0x00, 0x00, 0x00, 0x00, 0x0E, 0x5E, 0x00, 0x0E, 0x01, 0x58, 0x01, 0x0F, 0x6D, 0x0E, 0x0F, 0x01, +/* 000024E0 */ 0x07, 0x06, 0x00, 0x59, 0x00, 0x0F, 0x5A, 0x01, 0x06, 0x01, 0x00, 0x5A, 0x02, 0x0D, 0x01, 0x00, +/* 000024F0 */ 0x01, 0x58, 0x01, 0x11, 0x6D, 0x10, 0x11, 0x02, 0x07, 0x02, 0x00, 0x59, 0x00, 0x11, 0xA7, 0x12, +/* 00002500 */ 0x0D, 0x03, 0x00, 0x00, 0x5A, 0x01, 0x12, 0x02, 0x00, 0xF4, 0x02, 0x10, 0x10, 0x02, 0x00, 0x00, +/* 00002510 */ 0x00, 0x02, 0x00, 0x5A, 0x03, 0x10, 0x01, 0x00, 0x5A, 0x04, 0x0B, 0x01, 0x00, 0x33, 0x10, 0x0A, +/* 00002520 */ 0x03, 0x5A, 0x05, 0x10, 0x01, 0x00, 0xF4, 0x06, 0x0E, 0x0E, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, +/* 00002530 */ 0x45, 0x0B, 0x0E, 0x09, 0x4F, 0x00, 0x10, 0x03, 0x00, 0x0B, 0x04, 0x09, 0x1D, 0x00, 0x01, 0x58, +/* 00002540 */ 0x01, 0x0F, 0x6D, 0x0E, 0x0F, 0x04, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0F, 0x5A, 0x01, 0x05, 0x03, +/* 00002550 */ 0x00, 0xF4, 0x02, 0xFF, 0x0E, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x01, 0x58, 0x01, 0x0F, 0x6D, +/* 00002560 */ 0x0E, 0x0F, 0x05, 0x07, 0x04, 0x00, 0x59, 0x00, 0x0F, 0x5A, 0x01, 0x06, 0x04, 0x00, 0x5A, 0x02, +/* 00002570 */ 0x0B, 0x04, 0x00, 0x5A, 0x03, 0x0D, 0x04, 0x00, 0xF4, 0x04, 0xFF, 0x0E, 0x05, 0x00, 0x00, 0x00, +/* 00002580 */ 0x04, 0x00, 0x26, 0x0B, 0x0B, 0x26, 0x0C, 0x0C, 0x09, 0x07, 0xFF, 0xEF, 0x00, 0x45, 0x00, 0x0B, +/* 00002590 */ 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xBE, 0xFE, 0xEB, 0x02, 0xFE, 0x80, 0x02, 0xD1, 0xFE, +/* 000025A0 */ 0xB3, 0x02, 0xFE, 0x83, 0x02, 0xFE, 0x77, 0x22, 0x0F, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x44, +/* 000025B0 */ 0x00, 0x03, 0x00, 0x50, 0x00, 0x09, 0x00, 0x1C, 0x00, 0x08, 0x00, 0x95, 0x00, 0x0A, 0x00, 0x93, +/* 000025C0 */ 0x00, 0x09, 0x00, 0x28, 0x01, 0x29, 0x00, 0x4C, 0x01, 0x5E, 0x00, 0x23, 0x01, 0x08, 0x00, 0x4C, +/* 000025D0 */ 0x00, 0x1D, 0x00, 0xD0, 0x00, 0x27, 0x00, 0x97, 0x00, 0x03, 0x00, 0x69, 0x00, 0x08, 0x00, 0x42, +/* 000025E0 */ 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, 0x7F, 0x3C, 0x0A, 0xC2, 0x43, 0x40, 0x13, 0x00, 0xAB, 0x28, +/* 000025F0 */ 0xA2, 0x41, 0xD1, 0x00, 0x0A, 0xFE, 0xD0, 0x1D, 0xFE, 0xD0, 0x1D, 0x09, 0xFE, 0x00, 0x90, 0x03, +/* 00002600 */ 0x02, 0xFE, 0xD0, 0x1D, 0xFE, 0x3E, 0x03, 0xFE, 0x3E, 0x03, 0x0E, 0x09, 0x12, 0x07, 0x56, 0x4C, +/* 00002610 */ 0x1F, 0x02, 0x05, 0x01, 0x07, 0x07, 0x07, 0x07, 0x01, 0x12, 0xB7, 0xFE, 0x3D, 0x01, 0x08, 0x06, +/* 00002620 */ 0xFE, 0xFD, 0x02, 0x06, 0xFE, 0xFE, 0x02, 0x05, 0xFE, 0x00, 0x03, 0x01, 0x00, 0x06, 0xFE, 0x01, +/* 00002630 */ 0x03, 0x01, 0x01, 0xFE, 0x47, 0x01, 0x58, 0x0D, 0x4E, 0x0B, 0x4E, 0x0C, 0x4E, 0x0E, 0x4E, 0x0F, +/* 00002640 */ 0x4E, 0x10, 0x4E, 0x11, 0x15, 0x05, 0x00, 0x0A, 0x02, 0xA8, 0x13, 0x45, 0x0A, 0x13, 0x4E, 0x0B, +/* 00002650 */ 0x4E, 0x0C, 0x4E, 0x0E, 0x4E, 0x0F, 0x4E, 0x10, 0x4E, 0x11, 0x01, 0x58, 0x01, 0x15, 0x6D, 0x14, +/* 00002660 */ 0x15, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x15, 0x5A, 0x01, 0x0D, 0x00, 0x00, 0x5A, 0x02, 0x05, +/* 00002670 */ 0x00, 0x00, 0xF4, 0x03, 0x14, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x13, 0x14, 0x45, +/* 00002680 */ 0x15, 0x14, 0x0D, 0x05, 0x00, 0x15, 0x02, 0x01, 0x73, 0x01, 0x10, 0x16, 0x5F, 0x16, 0x15, 0x01, +/* 00002690 */ 0x45, 0x0B, 0x16, 0x5F, 0x16, 0x15, 0x02, 0x45, 0x0C, 0x16, 0x2A, 0x13, 0x09, 0x15, 0x03, 0x00, +/* 000026A0 */ 0x13, 0x07, 0x09, 0x1D, 0x00, 0x01, 0x58, 0x01, 0x14, 0x6D, 0x13, 0x14, 0x03, 0x07, 0x02, 0x00, +/* 000026B0 */ 0x59, 0x00, 0x14, 0x5A, 0x01, 0x05, 0x01, 0x00, 0xF4, 0x02, 0xFF, 0x13, 0x03, 0x00, 0x00, 0x00, +/* 000026C0 */ 0x01, 0x00, 0x01, 0x58, 0x01, 0x14, 0x6D, 0x13, 0x14, 0x04, 0x07, 0x03, 0x00, 0x59, 0x00, 0x14, +/* 000026D0 */ 0x5A, 0x01, 0x0B, 0x02, 0x00, 0x5A, 0x02, 0x06, 0x02, 0x00, 0xF4, 0x03, 0x13, 0x13, 0x04, 0x00, +/* 000026E0 */ 0x00, 0x00, 0x02, 0x00, 0x45, 0x0E, 0x13, 0x45, 0x0F, 0x06, 0x45, 0x10, 0x06, 0xED, 0x00, 0xEE, +/* 000026F0 */ 0x00, 0x12, 0x03, 0x00, 0x0F, 0x0C, 0x09, 0x78, 0x00, 0xBC, 0x13, 0x0F, 0x0B, 0x00, 0x00, 0x0E, +/* 00002700 */ 0x68, 0x00, 0x13, 0x98, 0x13, 0x0B, 0x0F, 0x01, 0x00, 0x45, 0x11, 0x13, 0x01, 0x58, 0x01, 0x14, +/* 00002710 */ 0x6D, 0x13, 0x14, 0x05, 0x07, 0x06, 0x00, 0x59, 0x00, 0x14, 0x5A, 0x01, 0x09, 0x03, 0x00, 0x5A, +/* 00002720 */ 0x02, 0x0A, 0x03, 0x00, 0x5A, 0x03, 0x11, 0x03, 0x00, 0x5A, 0x04, 0x0F, 0x03, 0x00, 0x5A, 0x05, +/* 00002730 */ 0x0B, 0x03, 0x00, 0xF4, 0x06, 0x13, 0x13, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x0E, 0x2A, 0x00, +/* 00002740 */ 0x13, 0x01, 0x58, 0x01, 0x14, 0x6D, 0x13, 0x14, 0x06, 0x07, 0x04, 0x00, 0x59, 0x00, 0x14, 0x5A, +/* 00002750 */ 0x01, 0x0E, 0x04, 0x00, 0x5A, 0x02, 0x10, 0x04, 0x00, 0x5A, 0x03, 0x11, 0x04, 0x00, 0xF4, 0x04, +/* 00002760 */ 0xFF, 0x13, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x26, 0x10, 0x10, 0x26, 0x0F, 0x0F, 0x09, 0x7E, +/* 00002770 */ 0xFF, 0xEF, 0x00, 0x45, 0x00, 0x0E, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xE9, 0x02, +/* 00002780 */ 0xFE, 0xFD, 0x02, 0xFE, 0xFE, 0x02, 0xFE, 0xBA, 0x02, 0xFE, 0x82, 0x02, 0xFE, 0x8B, 0x02, 0xFE, +/* 00002790 */ 0x83, 0x02, 0xFE, 0xE6, 0x1D, 0x10, 0x0E, 0x00, 0x00, 0x00, 0x16, 0x00, 0x57, 0x00, 0x40, 0x00, +/* 000027A0 */ 0x65, 0x00, 0x0B, 0x00, 0x34, 0x00, 0x1D, 0x00, 0x61, 0x00, 0x25, 0x00, 0x3A, 0x00, 0x03, 0x00, +/* 000027B0 */ 0x13, 0x00, 0x07, 0x00, 0x1C, 0x00, 0x08, 0x00, 0x17, 0x00, 0x0A, 0x00, 0x1E, 0x00, 0x09, 0x00, +/* 000027C0 */ 0x23, 0x00, 0x35, 0x00, 0x6A, 0x00, 0x27, 0x00, 0x53, 0x00, 0x03, 0x00, 0x32, 0x00, 0x08, 0x00, +/* 000027D0 */ 0x18, 0x00, 0x08, 0x00, 0x0E, 0x00, 0x00, 0x7F, 0x1C, 0x09, 0xC0, 0x13, 0x00, 0x43, 0x00, 0xA0, +/* 000027E0 */ 0x42, 0xA2, 0x41, 0xD1, 0x00, 0x09, 0xFE, 0x1A, 0x1C, 0xFE, 0x1A, 0x1C, 0x01, 0xFE, 0x00, 0x90, +/* 000027F0 */ 0x03, 0x03, 0xFE, 0x1A, 0x1C, 0xFE, 0x8A, 0x01, 0xFE, 0x8A, 0x01, 0x05, 0x05, 0x07, 0x03, 0x2B, +/* 00002800 */ 0x2B, 0x02, 0x04, 0x0A, 0x0A, 0x0A, 0x0A, 0x02, 0x06, 0xFE, 0xFD, 0x02, 0x06, 0xFE, 0xFE, 0x02, +/* 00002810 */ 0x07, 0xCA, 0x01, 0x58, 0x01, 0x08, 0x6D, 0x07, 0x08, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x08, +/* 00002820 */ 0x5A, 0x01, 0x05, 0x00, 0x00, 0xF4, 0x02, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, +/* 00002830 */ 0x21, 0x00, 0x07, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00002840 */ 0x7B, 0x05, 0x00, 0x01, 0xA7, 0x07, 0x05, 0x02, 0x00, 0x00, 0x7B, 0x07, 0x00, 0x03, 0x09, 0x89, +/* 00002850 */ 0x00, 0x09, 0x84, 0x00, 0x14, 0x0A, 0x00, 0x05, 0x04, 0xA8, 0x07, 0x14, 0x03, 0x00, 0x05, 0x07, +/* 00002860 */ 0x09, 0x1D, 0x00, 0x01, 0x58, 0x01, 0x08, 0x6D, 0x07, 0x08, 0x04, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 00002870 */ 0x08, 0x5A, 0x01, 0x06, 0x01, 0x00, 0xF4, 0x02, 0xFF, 0x07, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, +/* 00002880 */ 0xCE, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x58, 0x01, +/* 00002890 */ 0x08, 0x6D, 0x07, 0x08, 0x05, 0x07, 0x02, 0x00, 0x59, 0x00, 0x08, 0x5A, 0x01, 0x05, 0x02, 0x00, +/* 000028A0 */ 0xF4, 0x02, 0x07, 0x07, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x7B, 0x07, 0x00, 0x06, 0x01, 0x58, +/* 000028B0 */ 0x01, 0x08, 0x6D, 0x07, 0x08, 0x07, 0x07, 0x02, 0x00, 0x59, 0x00, 0x08, 0xA7, 0x09, 0x05, 0x08, +/* 000028C0 */ 0x01, 0x00, 0x5A, 0x01, 0x09, 0x03, 0x00, 0xF4, 0x02, 0x07, 0x07, 0x07, 0x00, 0x00, 0x00, 0x03, +/* 000028D0 */ 0x00, 0x7B, 0x07, 0x00, 0x09, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x02, 0x20, 0x00, 0x10, +/* 000028E0 */ 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x02, 0x00, 0x00, 0xFE, +/* 000028F0 */ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, +/* 00002900 */ 0x02, 0x00, 0x00, 0xFE, 0x02, 0x00, 0x00, 0xBE, 0xFE, 0xFD, 0x02, 0xD1, 0xFE, 0xFE, 0x02, 0xFE, +/* 00002910 */ 0xB0, 0x02, 0xFE, 0x11, 0x01, 0xFE, 0xFD, 0x02, 0xFE, 0x80, 0x02, 0xD1, 0xFE, 0xFE, 0x02, 0xFE, +/* 00002920 */ 0x40, 0x1C, 0x06, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x30, 0x00, 0x21, 0x00, 0x41, 0x00, 0x0F, +/* 00002930 */ 0x00, 0x39, 0x00, 0x1D, 0x00, 0x52, 0x00, 0x5A, 0x00, 0x67, 0x00, 0x00, 0x7F, 0x3C, 0x0A, 0xC2, +/* 00002940 */ 0x43, 0x40, 0x13, 0x00, 0x71, 0x29, 0xA2, 0x41, 0xD1, 0x00, 0x08, 0xFE, 0xE3, 0x16, 0xFE, 0xE3, +/* 00002950 */ 0x16, 0x09, 0xFE, 0x00, 0x90, 0x03, 0x02, 0xFE, 0xE3, 0x16, 0xFE, 0xF1, 0x04, 0xFE, 0xF1, 0x04, +/* 00002960 */ 0x0D, 0x09, 0x11, 0x04, 0x50, 0x40, 0x10, 0x02, 0x02, 0x01, 0x04, 0x04, 0x04, 0x04, 0x01, 0x11, +/* 00002970 */ 0xCF, 0xFE, 0x06, 0x01, 0x08, 0x06, 0xFE, 0xFD, 0x02, 0x06, 0xFE, 0xFE, 0x02, 0x05, 0xFE, 0xFF, +/* 00002980 */ 0x02, 0x01, 0x00, 0x01, 0xFF, 0x01, 0x01, 0xFE, 0x10, 0x01, 0x58, 0x0D, 0x4E, 0x0B, 0x4E, 0x0C, +/* 00002990 */ 0x4E, 0x0E, 0x4E, 0x0F, 0x4E, 0x10, 0x15, 0x05, 0x00, 0x0A, 0x02, 0xA8, 0x12, 0x45, 0x0A, 0x12, +/* 000029A0 */ 0x4E, 0x0B, 0x4E, 0x0C, 0x4E, 0x0E, 0x4E, 0x0F, 0x4E, 0x10, 0x01, 0x58, 0x01, 0x14, 0x6D, 0x13, +/* 000029B0 */ 0x14, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x14, 0x5A, 0x01, 0x0D, 0x00, 0x00, 0x5A, 0x02, 0x05, +/* 000029C0 */ 0x00, 0x00, 0xF4, 0x03, 0x13, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x12, 0x13, 0x45, +/* 000029D0 */ 0x14, 0x13, 0x0D, 0x05, 0x00, 0x14, 0x02, 0x01, 0x73, 0x01, 0x10, 0x16, 0x5F, 0x15, 0x14, 0x01, +/* 000029E0 */ 0x45, 0x0B, 0x15, 0x5F, 0x15, 0x14, 0x02, 0x45, 0x0C, 0x15, 0x14, 0x03, 0x00, 0x0C, 0x06, 0x09, +/* 000029F0 */ 0x06, 0x00, 0x45, 0x00, 0x07, 0x09, 0xA0, 0x00, 0x01, 0x58, 0x01, 0x13, 0x6D, 0x12, 0x13, 0x03, +/* 00002A00 */ 0x07, 0x02, 0x00, 0x59, 0x00, 0x13, 0x5A, 0x01, 0x0A, 0x01, 0x00, 0xF4, 0x02, 0x12, 0x12, 0x03, +/* 00002A10 */ 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, 0x0E, 0x12, 0x10, 0x03, 0x00, 0x0E, 0x0C, 0x09, 0x06, 0x00, +/* 00002A20 */ 0x45, 0x00, 0x07, 0x09, 0x72, 0x00, 0xA8, 0x12, 0x45, 0x0F, 0x12, 0x14, 0x03, 0x00, 0x0E, 0x06, +/* 00002A30 */ 0x09, 0x06, 0x00, 0x45, 0x0F, 0x06, 0x09, 0x20, 0x00, 0x11, 0x03, 0x00, 0x0E, 0x06, 0x09, 0x06, +/* 00002A40 */ 0x00, 0x45, 0x0F, 0x0E, 0x09, 0x12, 0x00, 0x2D, 0x12, 0x0C, 0x0E, 0x45, 0x0F, 0x12, 0x12, 0x03, +/* 00002A50 */ 0x00, 0x0F, 0x06, 0x09, 0x03, 0x00, 0x45, 0x0F, 0x06, 0xED, 0x00, 0xEE, 0x00, 0x12, 0x03, 0x00, +/* 00002A60 */ 0x0F, 0x0C, 0x09, 0x29, 0x00, 0xBC, 0x12, 0x0F, 0x0B, 0x00, 0x00, 0x0E, 0x19, 0x00, 0x12, 0x98, +/* 00002A70 */ 0x12, 0x0B, 0x0F, 0x01, 0x00, 0x45, 0x10, 0x12, 0x14, 0x03, 0x00, 0x10, 0x09, 0x09, 0x08, 0x00, +/* 00002A80 */ 0x45, 0x00, 0x0F, 0xEF, 0x00, 0x09, 0x10, 0x00, 0x26, 0x0F, 0x0F, 0x09, 0xCD, 0xFF, 0xEF, 0x00, +/* 00002A90 */ 0x45, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xE9, 0x02, 0xFE, 0xFD, 0x02, +/* 00002AA0 */ 0xFE, 0xFE, 0x02, 0xFE, 0x81, 0x02, 0xFE, 0xFC, 0x16, 0x17, 0x0C, 0x00, 0x00, 0x00, 0x14, 0x00, +/* 00002AB0 */ 0x5A, 0x00, 0x40, 0x00, 0x5E, 0x00, 0x08, 0x00, 0x1D, 0x00, 0x06, 0x00, 0x1E, 0x00, 0x20, 0x00, +/* 00002AC0 */ 0x36, 0x00, 0x08, 0x00, 0x1C, 0x00, 0x06, 0x00, 0x1E, 0x00, 0x05, 0x00, 0x14, 0x01, 0x08, 0x00, +/* 00002AD0 */ 0x58, 0x00, 0x06, 0x00, 0x16, 0x00, 0x08, 0x00, 0x4F, 0x00, 0x06, 0x00, 0x4E, 0x00, 0x07, 0x00, +/* 00002AE0 */ 0x1A, 0x00, 0x08, 0x00, 0x1D, 0x00, 0x07, 0x00, 0x2F, 0x00, 0x08, 0x00, 0x17, 0x00, 0x0A, 0x00, +/* 00002AF0 */ 0x1E, 0x00, 0x09, 0x00, 0x26, 0x00, 0x08, 0x00, 0x36, 0x00, 0x08, 0x00, 0x37, 0x00, 0x08, 0x00, +/* 00002B00 */ 0x18, 0x00, 0x08, 0x00, 0x0F, 0x00, 0x00, 0x7F, 0x1C, 0x08, 0xC0, 0x03, 0x00, 0x03, 0x00, 0x69, +/* 00002B10 */ 0x29, 0xA0, 0x41, 0xD1, 0x00, 0x07, 0xFE, 0x88, 0x15, 0xFE, 0x88, 0x15, 0x09, 0xFE, 0x00, 0x90, +/* 00002B20 */ 0x01, 0x01, 0xFE, 0x88, 0x15, 0xFE, 0x2E, 0x01, 0xFE, 0x2E, 0x01, 0x04, 0x05, 0x07, 0x04, 0x1E, +/* 00002B30 */ 0x1D, 0x03, 0x03, 0x03, 0x03, 0x03, 0x07, 0x05, 0xFE, 0xFC, 0x02, 0x01, 0x02, 0x79, 0x58, 0x05, +/* 00002B40 */ 0x4E, 0x06, 0x14, 0x0A, 0x00, 0x05, 0x02, 0xA8, 0x07, 0x14, 0x03, 0x00, 0x05, 0x07, 0x09, 0x1D, +/* 00002B50 */ 0x00, 0x01, 0x58, 0x01, 0x08, 0x6D, 0x07, 0x08, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x08, 0x5A, +/* 00002B60 */ 0x01, 0x03, 0x00, 0x00, 0xF4, 0x02, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x58, +/* 00002B70 */ 0x01, 0x08, 0x6D, 0x07, 0x08, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x08, 0x5A, 0x01, 0x05, 0x01, +/* 00002B80 */ 0x00, 0xF4, 0x02, 0x07, 0x07, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, 0x06, 0x07, 0x01, 0x58, +/* 00002B90 */ 0x01, 0x08, 0x6D, 0x07, 0x08, 0x02, 0x07, 0x03, 0x00, 0x59, 0x00, 0x08, 0x5A, 0x01, 0x06, 0x02, +/* 00002BA0 */ 0x00, 0x5A, 0x02, 0x04, 0x02, 0x00, 0xF4, 0x03, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, +/* 00002BB0 */ 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB0, 0x02, 0xFE, 0x11, 0x01, 0xFE, 0xE4, 0x02, +/* 00002BC0 */ 0xFE, 0x9E, 0x15, 0x05, 0x04, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x37, 0x00, 0x1D, 0x00, 0x58, 0x00, +/* 00002BD0 */ 0x20, 0x00, 0x2E, 0x00, 0x27, 0x00, 0x5A, 0x00, 0x00, 0x7F, 0x1C, 0x08, 0xC0, 0x03, 0x00, 0x03, +/* 00002BE0 */ 0x00, 0x61, 0x28, 0xA0, 0x41, 0xD1, 0x00, 0x06, 0xFE, 0x34, 0x14, 0xFE, 0x34, 0x14, 0x09, 0xFE, +/* 00002BF0 */ 0x00, 0x90, 0x01, 0x01, 0xFE, 0x34, 0x14, 0xFE, 0x27, 0x01, 0xFE, 0x27, 0x01, 0x04, 0x05, 0x07, +/* 00002C00 */ 0x04, 0x1E, 0x1D, 0x03, 0x03, 0x03, 0x03, 0x03, 0x07, 0x05, 0xFE, 0xFB, 0x02, 0x01, 0x01, 0x79, +/* 00002C10 */ 0x58, 0x05, 0x4E, 0x06, 0x14, 0x0A, 0x00, 0x05, 0x02, 0xA8, 0x07, 0x14, 0x03, 0x00, 0x05, 0x07, +/* 00002C20 */ 0x09, 0x1D, 0x00, 0x01, 0x58, 0x01, 0x08, 0x6D, 0x07, 0x08, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 00002C30 */ 0x08, 0x5A, 0x01, 0x03, 0x00, 0x00, 0xF4, 0x02, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00002C40 */ 0x01, 0x58, 0x01, 0x08, 0x6D, 0x07, 0x08, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x08, 0x5A, 0x01, +/* 00002C50 */ 0x05, 0x01, 0x00, 0xF4, 0x02, 0x07, 0x07, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, 0x06, 0x07, +/* 00002C60 */ 0x01, 0x58, 0x01, 0x08, 0x6D, 0x07, 0x08, 0x02, 0x07, 0x03, 0x00, 0x59, 0x00, 0x08, 0x5A, 0x01, +/* 00002C70 */ 0x06, 0x02, 0x00, 0x5A, 0x02, 0x04, 0x02, 0x00, 0xF4, 0x03, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, +/* 00002C80 */ 0x02, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB0, 0x02, 0xFE, 0x11, 0x01, 0xFE, +/* 00002C90 */ 0xE4, 0x02, 0xFE, 0x4A, 0x14, 0x05, 0x04, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x37, 0x00, 0x1D, 0x00, +/* 00002CA0 */ 0x57, 0x00, 0x20, 0x00, 0x2E, 0x00, 0x27, 0x00, 0x54, 0x00, 0x00, 0x7F, 0x1C, 0x08, 0xC0, 0x03, +/* 00002CB0 */ 0x00, 0x03, 0x00, 0x59, 0x26, 0xA0, 0x41, 0xD1, 0x00, 0x05, 0xFE, 0xE5, 0x12, 0xFE, 0xE5, 0x12, +/* 00002CC0 */ 0x09, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFE, 0xE5, 0x12, 0xFE, 0x23, 0x01, 0xFE, 0x23, 0x01, 0x04, +/* 00002CD0 */ 0x05, 0x07, 0x04, 0x1E, 0x1D, 0x03, 0x03, 0x03, 0x03, 0x03, 0x07, 0x05, 0xFE, 0xFA, 0x02, 0x01, +/* 00002CE0 */ 0x00, 0x79, 0x58, 0x05, 0x4E, 0x06, 0x14, 0x0A, 0x00, 0x05, 0x02, 0xA8, 0x07, 0x14, 0x03, 0x00, +/* 00002CF0 */ 0x05, 0x07, 0x09, 0x1D, 0x00, 0x01, 0x58, 0x01, 0x08, 0x6D, 0x07, 0x08, 0x00, 0x07, 0x02, 0x00, +/* 00002D00 */ 0x59, 0x00, 0x08, 0x5A, 0x01, 0x03, 0x00, 0x00, 0xF4, 0x02, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, +/* 00002D10 */ 0x00, 0x00, 0x01, 0x58, 0x01, 0x08, 0x6D, 0x07, 0x08, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x08, +/* 00002D20 */ 0x5A, 0x01, 0x05, 0x01, 0x00, 0xF4, 0x02, 0x07, 0x07, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, +/* 00002D30 */ 0x06, 0x07, 0x01, 0x58, 0x01, 0x08, 0x6D, 0x07, 0x08, 0x02, 0x07, 0x03, 0x00, 0x59, 0x00, 0x08, +/* 00002D40 */ 0x5A, 0x01, 0x06, 0x02, 0x00, 0x5A, 0x02, 0x04, 0x02, 0x00, 0xF4, 0x03, 0x00, 0x07, 0x02, 0x00, +/* 00002D50 */ 0x00, 0x00, 0x02, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB0, 0x02, 0xFE, 0x11, +/* 00002D60 */ 0x01, 0xFE, 0xE4, 0x02, 0xFE, 0xFB, 0x12, 0x05, 0x04, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x37, 0x00, +/* 00002D70 */ 0x1D, 0x00, 0x55, 0x00, 0x20, 0x00, 0x2E, 0x00, 0x27, 0x00, 0x52, 0x00, 0x00, 0x7F, 0x1C, 0x08, +/* 00002D80 */ 0xC0, 0x03, 0x00, 0x03, 0x00, 0x55, 0x42, 0xA2, 0x41, 0xD1, 0x00, 0x04, 0xFE, 0x46, 0x12, 0xFE, +/* 00002D90 */ 0x46, 0x12, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, 0x46, 0x12, 0x75, 0x75, 0x03, 0x02, 0x04, +/* 00002DA0 */ 0x04, 0x0A, 0x0A, 0x01, 0x01, 0x01, 0x01, 0x01, 0x26, 0x01, 0x58, 0x01, 0x04, 0x5F, 0x04, 0x04, +/* 00002DB0 */ 0x00, 0x07, 0x03, 0x00, 0x5A, 0x01, 0x02, 0x00, 0x00, 0x5A, 0x02, 0x03, 0x00, 0x00, 0xC6, 0x03, +/* 00002DC0 */ 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, +/* 00002DD0 */ 0xDB, 0x02, 0xFE, 0x73, 0x12, 0x02, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x47, 0x00, 0x00, 0x7F, +/* 00002DE0 */ 0x1C, 0x1B, 0xC0, 0x57, 0x40, 0x47, 0x00, 0x26, 0x13, 0xA0, 0x41, 0xC1, 0x00, 0xFE, 0xDD, 0x02, +/* 00002DF0 */ 0x03, 0xFF, 0x00, 0x00, 0x00, 0x02, 0xFE, 0x3E, 0x09, 0xFE, 0x3E, 0x09, 0x09, 0xFE, 0x00, 0x90, +/* 00002E00 */ 0x01, 0x01, 0xFE, 0x3E, 0x09, 0xFE, 0x30, 0x06, 0xFE, 0x30, 0x06, 0x0E, 0x0B, 0x13, 0x04, 0x5C, +/* 00002E10 */ 0x54, 0x01, 0x02, 0x03, 0x01, 0x15, 0x15, 0x15, 0x15, 0x01, 0x05, 0x03, 0x13, 0x05, 0xFE, 0xF8, +/* 00002E20 */ 0x02, 0x05, 0xFE, 0xE1, 0x02, 0x0B, 0x06, 0xFE, 0xDD, 0x02, 0x06, 0xFE, 0xF9, 0x02, 0x07, 0x01, +/* 00002E30 */ 0x01, 0x0C, 0x01, 0x00, 0xFE, 0x86, 0x01, 0x58, 0x0B, 0x4E, 0x0C, 0x4E, 0x0D, 0x4E, 0x0E, 0x4E, +/* 00002E40 */ 0x0F, 0x4E, 0x10, 0x4E, 0x11, 0x4E, 0x12, 0x45, 0x0C, 0x0B, 0x01, 0x58, 0x01, 0x16, 0x5F, 0x16, +/* 00002E50 */ 0x16, 0x00, 0xE3, 0x16, 0x0C, 0x16, 0x00, 0x0F, 0x22, 0x00, 0x16, 0x01, 0x58, 0x01, 0x17, 0x6D, +/* 00002E60 */ 0x16, 0x17, 0x01, 0x07, 0x03, 0x00, 0x59, 0x00, 0x17, 0x5A, 0x01, 0x02, 0x00, 0x00, 0x5A, 0x02, +/* 00002E70 */ 0x03, 0x00, 0x00, 0xF4, 0x03, 0xFF, 0x16, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x16, 0x0C, +/* 00002E80 */ 0x02, 0x45, 0x0D, 0x16, 0x5F, 0x16, 0x0C, 0x03, 0x14, 0x03, 0x00, 0x16, 0x04, 0x09, 0x1D, 0x00, +/* 00002E90 */ 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0x16, 0x7B, +/* 00002EA0 */ 0x16, 0x00, 0x04, 0x7B, 0x04, 0x00, 0x05, 0x09, 0x11, 0x01, 0x09, 0x0C, 0x01, 0x5F, 0x16, 0x0C, +/* 00002EB0 */ 0x06, 0x45, 0x0E, 0x16, 0x01, 0x58, 0x01, 0x17, 0x6D, 0x16, 0x17, 0x07, 0x07, 0x02, 0x00, 0x59, +/* 00002EC0 */ 0x00, 0x17, 0x5A, 0x01, 0x0D, 0x01, 0x00, 0xF4, 0x02, 0x16, 0x16, 0x07, 0x00, 0x00, 0x00, 0x01, +/* 00002ED0 */ 0x00, 0x0E, 0x0C, 0x00, 0x16, 0xA7, 0x17, 0x0D, 0x08, 0x00, 0x00, 0x45, 0x16, 0x17, 0x09, 0x20, +/* 00002EE0 */ 0x00, 0x01, 0x58, 0x01, 0x18, 0x6D, 0x17, 0x18, 0x09, 0x07, 0x02, 0x00, 0x59, 0x00, 0x18, 0x5A, +/* 00002EF0 */ 0x01, 0x0D, 0x02, 0x00, 0xF4, 0x02, 0x17, 0x17, 0x09, 0x00, 0x00, 0x00, 0x02, 0x00, 0x46, 0x16, +/* 00002F00 */ 0x17, 0x45, 0x0F, 0x16, 0x12, 0x03, 0x00, 0x0E, 0x0F, 0x09, 0x8F, 0x00, 0x5F, 0x16, 0x0C, 0x0A, +/* 00002F10 */ 0x45, 0x10, 0x16, 0x2D, 0x16, 0x0E, 0x08, 0x77, 0x16, 0x0C, 0x0B, 0x14, 0x03, 0x00, 0x10, 0x08, +/* 00002F20 */ 0x09, 0x21, 0x00, 0xCE, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00002F30 */ 0x98, 0x16, 0x0D, 0x0E, 0x00, 0x00, 0x7B, 0x16, 0x00, 0x0C, 0x7B, 0x09, 0x00, 0x0D, 0x09, 0x7A, +/* 00002F40 */ 0x00, 0x09, 0x54, 0x00, 0x14, 0x03, 0x00, 0x10, 0x0A, 0x09, 0x1B, 0x00, 0xCE, 0x20, 0x00, 0x00, +/* 00002F50 */ 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7B, 0x0E, 0x00, 0x0E, 0x7B, 0x09, 0x00, +/* 00002F60 */ 0x0F, 0x09, 0x57, 0x00, 0x09, 0x31, 0x00, 0x45, 0x11, 0x0E, 0x98, 0x16, 0x0D, 0x0E, 0x01, 0x00, +/* 00002F70 */ 0x45, 0x12, 0x16, 0xCE, 0x30, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00002F80 */ 0xD0, 0x16, 0x02, 0x00, 0x00, 0xA1, 0x00, 0x11, 0x16, 0xA1, 0x01, 0x12, 0x16, 0x7B, 0x16, 0x00, +/* 00002F90 */ 0x10, 0x7B, 0x09, 0x00, 0x11, 0x09, 0x23, 0x00, 0x09, 0x1E, 0x00, 0x77, 0x04, 0x0C, 0x12, 0xCE, +/* 00002FA0 */ 0x40, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0x16, 0x7B, 0x16, +/* 00002FB0 */ 0x00, 0x13, 0x7B, 0x04, 0x00, 0x14, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x05, 0x50, 0x00, +/* 00002FC0 */ 0x40, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, +/* 00002FD0 */ 0x74, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00002FE0 */ 0x97, 0x01, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, +/* 00002FF0 */ 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, +/* 00003000 */ 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, +/* 00003010 */ 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, +/* 00003020 */ 0x74, 0x00, 0x00, 0x00, 0xFE, 0xDB, 0x02, 0xFE, 0xB6, 0x02, 0xFE, 0xF4, 0x02, 0xFE, 0xF7, 0x02, +/* 00003030 */ 0xFE, 0x97, 0x01, 0x74, 0xFE, 0xF5, 0x02, 0xBE, 0xD1, 0xFE, 0x7C, 0x02, 0xFE, 0xF6, 0x02, 0xFE, +/* 00003040 */ 0xF5, 0x02, 0xFE, 0x97, 0x01, 0x74, 0xFE, 0x97, 0x01, 0x74, 0xFE, 0x97, 0x01, 0x74, 0xFE, 0xF7, +/* 00003050 */ 0x02, 0xFE, 0x97, 0x01, 0x74, 0xFE, 0x5C, 0x09, 0x15, 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x1F, +/* 00003060 */ 0x00, 0x11, 0x00, 0x49, 0x00, 0x22, 0x00, 0x7D, 0x00, 0x07, 0x00, 0x2B, 0x00, 0x0C, 0x00, 0x39, +/* 00003070 */ 0x00, 0x1D, 0x00, 0x56, 0x00, 0x07, 0x00, 0x33, 0x00, 0x50, 0x00, 0x65, 0x00, 0x08, 0x00, 0x70, +/* 00003080 */ 0x00, 0x07, 0x00, 0x36, 0x00, 0x08, 0x00, 0x38, 0x00, 0x08, 0x00, 0x4F, 0x00, 0x21, 0x00, 0x48, +/* 00003090 */ 0x00, 0x08, 0x00, 0x78, 0x00, 0x1B, 0x00, 0x63, 0x00, 0x03, 0x00, 0x34, 0x00, 0x09, 0x00, 0x39, +/* 000030A0 */ 0x00, 0x28, 0x00, 0x8A, 0x00, 0x04, 0x00, 0x35, 0x00, 0x1C, 0x00, 0x5E, 0x00, 0x00, 0x7F, 0x1C, +/* 000030B0 */ 0x08, 0xC0, 0x03, 0x00, 0x03, 0x00, 0x10, 0x3C, 0xA2, 0x41, 0xD1, 0x00, 0x02, 0xFE, 0x34, 0x03, +/* 000030C0 */ 0xFE, 0x34, 0x03, 0x49, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, 0x34, 0x03, 0xFE, 0xD3, 0x01, 0xFE, +/* 000030D0 */ 0xD3, 0x01, 0x05, 0x09, 0x0C, 0x08, 0x13, 0x13, 0x01, 0x05, 0x05, 0x05, 0x05, 0x01, 0x04, 0x06, +/* 000030E0 */ 0xFE, 0xF4, 0x02, 0x06, 0xFE, 0xF5, 0x02, 0x06, 0xFE, 0xF6, 0x02, 0x06, 0xFE, 0xF7, 0x02, 0x01, +/* 000030F0 */ 0x00, 0x0C, 0x4C, 0x58, 0x0B, 0x01, 0x58, 0x01, 0x0D, 0x6D, 0x0C, 0x0D, 0x00, 0x07, 0x07, 0x00, +/* 00003100 */ 0x59, 0x00, 0x0D, 0x5A, 0x01, 0x0B, 0x00, 0x00, 0x5A, 0x02, 0x02, 0x00, 0x00, 0x5A, 0x03, 0x03, +/* 00003110 */ 0x00, 0x00, 0x5A, 0x04, 0x04, 0x00, 0x00, 0x5A, 0x05, 0x05, 0x00, 0x00, 0x5A, 0x06, 0x06, 0x00, +/* 00003120 */ 0x00, 0xF4, 0x07, 0xFF, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x09, 0x0B, 0x01, 0x77, +/* 00003130 */ 0x07, 0x0B, 0x02, 0x77, 0x0A, 0x0B, 0x03, 0x77, 0x08, 0x0B, 0x04, 0xA8, 0x00, 0x24, 0x00, 0xFE, +/* 00003140 */ 0x7D, 0x02, 0xFE, 0xF4, 0x02, 0xFE, 0xF5, 0x02, 0xFE, 0xF6, 0x02, 0xFE, 0xF7, 0x02, 0xFE, 0x61, +/* 00003150 */ 0x03, 0x06, 0x02, 0x00, 0x00, 0x00, 0x36, 0x00, 0x82, 0x00, 0x04, 0x00, 0x28, 0x00, 0x04, 0x00, +/* 00003160 */ 0x22, 0x00, 0x04, 0x00, 0x29, 0x00, 0x06, 0x00, 0xB0, 0x00, 0x00, 0x00}; + +//Bytecode generated from Math_object.js +const char Library_Bytecode_Math_object[] = { +/* 00000000 */ 0x43, 0x68, 0x42, 0x63, 0xA9, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00000010 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0xFE, 0xD9, 0x02, 0x00, 0xFE, +/* 00000020 */ 0xC0, 0x0F, 0xFE, 0xC0, 0x0F, 0x35, 0x00, 0x00, 0x00, 0xDC, 0x00, 0x00, 0x00, 0xBA, 0x02, 0x00, +/* 00000030 */ 0x00, 0xA8, 0x07, 0x00, 0x00, 0x06, 0x5A, 0x00, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, 0x00, +/* 00000040 */ 0x88, 0x00, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x01, 0xBA, +/* 00000050 */ 0x00, 0x00, 0x00, 0x01, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x6C, 0x00, 0x6F, 0x00, +/* 00000060 */ 0x62, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x20, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x64, 0x00, 0x65, 0x00, +/* 00000070 */ 0x00, 0x00, 0x75, 0x00, 0x73, 0x00, 0x65, 0x00, 0x20, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, +/* 00000080 */ 0x69, 0x00, 0x63, 0x00, 0x74, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x00, 0x00, +/* 00000090 */ 0x6D, 0x00, 0x61, 0x00, 0x78, 0x00, 0x00, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x73, 0x00, 0x69, 0x00, +/* 000000A0 */ 0x74, 0x00, 0x69, 0x00, 0x76, 0x00, 0x65, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x66, 0x00, 0x69, 0x00, +/* 000000B0 */ 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x67, 0x00, +/* 000000C0 */ 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x76, 0x00, 0x65, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x66, 0x00, +/* 000000D0 */ 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, +/* 000000E0 */ 0x00, 0x6A, 0x00, 0x00, 0x00, 0x9B, 0x00, 0x00, 0x00, 0xE2, 0x00, 0x00, 0x00, 0x4C, 0x01, 0x00, +/* 000000F0 */ 0x00, 0xB6, 0x01, 0x00, 0x00, 0xB7, 0x01, 0x00, 0x00, 0xC5, 0x01, 0x00, 0x00, 0xC6, 0x01, 0x00, +/* 00000100 */ 0x00, 0xDE, 0x01, 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x4A, 0x02, 0x00, +/* 00000110 */ 0x00, 0x8D, 0x02, 0x00, 0x00, 0x8E, 0x02, 0x00, 0x00, 0xCF, 0x02, 0x00, 0x00, 0xE8, 0x02, 0x00, +/* 00000120 */ 0x00, 0xE9, 0x02, 0x00, 0x00, 0x2F, 0x03, 0x00, 0x00, 0x63, 0x03, 0x00, 0x00, 0x15, 0x04, 0x00, +/* 00000130 */ 0x00, 0x3B, 0x04, 0x00, 0x00, 0x70, 0x04, 0x00, 0x00, 0x7A, 0x04, 0x00, 0x00, 0x7B, 0x04, 0x00, +/* 00000140 */ 0x00, 0x9A, 0x04, 0x00, 0x00, 0x9B, 0x04, 0x00, 0x00, 0xB5, 0x04, 0x00, 0x00, 0xD6, 0x04, 0x00, +/* 00000150 */ 0x00, 0xF4, 0x04, 0x00, 0x00, 0xFE, 0x04, 0x00, 0x00, 0xFF, 0x04, 0x00, 0x00, 0x25, 0x05, 0x00, +/* 00000160 */ 0x00, 0x40, 0x05, 0x00, 0x00, 0x4A, 0x05, 0x00, 0x00, 0x4B, 0x05, 0x00, 0x00, 0x71, 0x05, 0x00, +/* 00000170 */ 0x00, 0x8F, 0x05, 0x00, 0x00, 0xC1, 0x05, 0x00, 0x00, 0xDD, 0x05, 0x00, 0x00, 0xEB, 0x05, 0x00, +/* 00000180 */ 0x00, 0x6A, 0x06, 0x00, 0x00, 0x89, 0x06, 0x00, 0x00, 0x97, 0x06, 0x00, 0x00, 0xAA, 0x06, 0x00, +/* 00000190 */ 0x00, 0xC9, 0x06, 0x00, 0x00, 0xD7, 0x06, 0x00, 0x00, 0xE1, 0x06, 0x00, 0x00, 0xE2, 0x06, 0x00, +/* 000001A0 */ 0x00, 0xFC, 0x06, 0x00, 0x00, 0x11, 0x07, 0x00, 0x00, 0x12, 0x07, 0x00, 0x00, 0x47, 0x07, 0x00, +/* 000001B0 */ 0x00, 0xA6, 0x07, 0x00, 0x00, 0xDF, 0x07, 0x00, 0x00, 0x0B, 0x08, 0x00, 0x00, 0x2D, 0x08, 0x00, +/* 000001C0 */ 0x00, 0x48, 0x08, 0x00, 0x00, 0x56, 0x08, 0x00, 0x00, 0xD1, 0x08, 0x00, 0x00, 0xF0, 0x08, 0x00, +/* 000001D0 */ 0x00, 0xFE, 0x08, 0x00, 0x00, 0x08, 0x09, 0x00, 0x00, 0x09, 0x09, 0x00, 0x00, 0x1D, 0x09, 0x00, +/* 000001E0 */ 0x00, 0x25, 0x09, 0x00, 0x00, 0x26, 0x09, 0x00, 0x00, 0x67, 0x09, 0x00, 0x00, 0x80, 0x09, 0x00, +/* 000001F0 */ 0x00, 0x81, 0x09, 0x00, 0x00, 0xC7, 0x09, 0x00, 0x00, 0xFB, 0x09, 0x00, 0x00, 0xAC, 0x0A, 0x00, +/* 00000200 */ 0x00, 0xD2, 0x0A, 0x00, 0x00, 0x07, 0x0B, 0x00, 0x00, 0x11, 0x0B, 0x00, 0x00, 0x12, 0x0B, 0x00, +/* 00000210 */ 0x00, 0x31, 0x0B, 0x00, 0x00, 0x32, 0x0B, 0x00, 0x00, 0x4C, 0x0B, 0x00, 0x00, 0x6D, 0x0B, 0x00, +/* 00000220 */ 0x00, 0x8B, 0x0B, 0x00, 0x00, 0x95, 0x0B, 0x00, 0x00, 0x96, 0x0B, 0x00, 0x00, 0xBC, 0x0B, 0x00, +/* 00000230 */ 0x00, 0xD7, 0x0B, 0x00, 0x00, 0xE1, 0x0B, 0x00, 0x00, 0xE2, 0x0B, 0x00, 0x00, 0x08, 0x0C, 0x00, +/* 00000240 */ 0x00, 0x26, 0x0C, 0x00, 0x00, 0x58, 0x0C, 0x00, 0x00, 0x74, 0x0C, 0x00, 0x00, 0x82, 0x0C, 0x00, +/* 00000250 */ 0x00, 0x01, 0x0D, 0x00, 0x00, 0x20, 0x0D, 0x00, 0x00, 0x2E, 0x0D, 0x00, 0x00, 0x41, 0x0D, 0x00, +/* 00000260 */ 0x00, 0x60, 0x0D, 0x00, 0x00, 0x6E, 0x0D, 0x00, 0x00, 0x78, 0x0D, 0x00, 0x00, 0x79, 0x0D, 0x00, +/* 00000270 */ 0x00, 0x93, 0x0D, 0x00, 0x00, 0xA8, 0x0D, 0x00, 0x00, 0xA9, 0x0D, 0x00, 0x00, 0xDE, 0x0D, 0x00, +/* 00000280 */ 0x00, 0x3D, 0x0E, 0x00, 0x00, 0x76, 0x0E, 0x00, 0x00, 0xA2, 0x0E, 0x00, 0x00, 0xC4, 0x0E, 0x00, +/* 00000290 */ 0x00, 0xDF, 0x0E, 0x00, 0x00, 0xED, 0x0E, 0x00, 0x00, 0x68, 0x0F, 0x00, 0x00, 0x87, 0x0F, 0x00, +/* 000002A0 */ 0x00, 0x95, 0x0F, 0x00, 0x00, 0x9F, 0x0F, 0x00, 0x00, 0xA0, 0x0F, 0x00, 0x00, 0xB4, 0x0F, 0x00, +/* 000002B0 */ 0x00, 0xBC, 0x0F, 0x00, 0x00, 0xC0, 0x0F, 0x00, 0x00, 0x00, 0x04, 0x73, 0x0C, 0x00, 0x00, 0x00, +/* 000002C0 */ 0x10, 0x08, 0x00, 0xA8, 0x41, 0xC0, 0x00, 0xFE, 0xD9, 0x02, 0x00, 0xFE, 0xB7, 0x01, 0xFE, 0xB7, +/* 000002D0 */ 0x01, 0x01, 0x40, 0xFE, 0x00, 0x90, 0xFE, 0xB7, 0x01, 0xFE, 0x09, 0x0E, 0xFE, 0x09, 0x0E, 0x01, +/* 000002E0 */ 0x04, 0x04, 0x04, 0x04, 0x03, 0x05, 0xFE, 0xDA, 0x02, 0x0A, 0x07, 0xA8, 0x00, 0xD6, 0x00, 0x04, +/* 000002F0 */ 0x24, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x02, 0x00, 0x00, 0x7F, 0x1C, 0x08, +/* 00000300 */ 0xC0, 0x03, 0x10, 0x0B, 0x00, 0x08, 0x01, 0xA2, 0x41, 0xD1, 0x00, 0x01, 0xFE, 0xC7, 0x01, 0xFE, +/* 00000310 */ 0xC7, 0x01, 0x02, 0x40, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0xC7, 0x01, 0xFE, 0xF6, 0x0D, 0xFE, +/* 00000320 */ 0xF6, 0x0D, 0x05, 0x04, 0x07, 0x04, 0x19, 0x18, 0x02, 0x07, 0x07, 0x07, 0x07, 0x06, 0x06, 0xFE, +/* 00000330 */ 0xDB, 0x02, 0x06, 0xFE, 0xDC, 0x02, 0x65, 0x5F, 0x07, 0x04, 0x00, 0x45, 0x05, 0x07, 0x01, 0x58, +/* 00000340 */ 0x01, 0x07, 0x5F, 0x08, 0x05, 0x01, 0x77, 0x08, 0x07, 0x02, 0x01, 0x58, 0x01, 0x07, 0x5F, 0x08, +/* 00000350 */ 0x05, 0x03, 0x77, 0x08, 0x07, 0x04, 0x6D, 0x07, 0x05, 0x05, 0x07, 0x03, 0x00, 0x59, 0x00, 0x05, +/* 00000360 */ 0x5A, 0x01, 0x02, 0x00, 0x00, 0xD6, 0x00, 0x08, 0x5A, 0x02, 0x08, 0x00, 0x00, 0xF4, 0x03, 0xFF, +/* 00000370 */ 0x07, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6D, 0x07, 0x05, 0x06, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 00000380 */ 0x05, 0x5A, 0x01, 0x03, 0x01, 0x00, 0xD6, 0x01, 0x08, 0x5A, 0x02, 0x08, 0x01, 0x00, 0xF4, 0x03, +/* 00000390 */ 0xFF, 0x07, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x59, 0xFE, 0x21, 0x01, +/* 000003A0 */ 0xFE, 0xDD, 0x02, 0xFE, 0x0E, 0x01, 0xFE, 0xDE, 0x02, 0xFE, 0x7F, 0x02, 0xFE, 0x7F, 0x02, 0xFE, +/* 000003B0 */ 0xE2, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x29, 0x00, 0x0C, 0x00, 0x43, 0x00, 0x0C, +/* 000003C0 */ 0x00, 0x44, 0x00, 0x21, 0x00, 0x98, 0x06, 0x23, 0x00, 0x92, 0x06, 0x00, 0xBE, 0x05, 0x00, 0x00, +/* 000003D0 */ 0xD4, 0x03, 0x00, 0x00, 0x7F, 0x2C, 0x23, 0xC2, 0x43, 0x40, 0x13, 0x00, 0x42, 0x25, 0xA2, 0x41, +/* 000003E0 */ 0xB1, 0x00, 0x03, 0xFE, 0x4B, 0x09, 0xFE, 0x4B, 0x09, 0x03, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, +/* 000003F0 */ 0x4B, 0x09, 0xFE, 0x6E, 0x06, 0xFE, 0x6E, 0x06, 0x0A, 0x08, 0x0F, 0x53, 0x44, 0x1D, 0x04, 0x01, +/* 00000400 */ 0x04, 0x01, 0x05, 0x05, 0x05, 0x05, 0x01, 0x0F, 0xB0, 0xFE, 0x1C, 0x01, 0x07, 0x01, 0x00, 0x0C, +/* 00000410 */ 0x0B, 0x01, 0x01, 0x01, 0x02, 0xFE, 0x26, 0x01, 0xB1, 0x0A, 0x4E, 0x0B, 0x4E, 0x0C, 0x4E, 0x0D, +/* 00000420 */ 0x4E, 0x0E, 0xA7, 0x10, 0x0A, 0x00, 0x00, 0x00, 0x14, 0x03, 0x00, 0x10, 0x03, 0x09, 0x0B, 0x00, +/* 00000430 */ 0x01, 0x58, 0x01, 0x10, 0x5F, 0x00, 0x10, 0x01, 0x09, 0x01, 0x01, 0x45, 0x0B, 0x04, 0x43, 0x10, +/* 00000440 */ 0x08, 0x45, 0x08, 0x10, 0x15, 0x03, 0x00, 0x08, 0x08, 0x09, 0x03, 0x00, 0x45, 0x0B, 0x05, 0xA7, +/* 00000450 */ 0x10, 0x0A, 0x02, 0x01, 0x00, 0x14, 0x03, 0x00, 0x10, 0x06, 0x09, 0x06, 0x00, 0x45, 0x00, 0x08, +/* 00000460 */ 0x09, 0xD9, 0x00, 0xA7, 0x10, 0x0A, 0x03, 0x02, 0x00, 0x14, 0x03, 0x00, 0x10, 0x07, 0x09, 0x4C, +/* 00000470 */ 0x00, 0x43, 0x10, 0x09, 0x45, 0x09, 0x10, 0x15, 0x04, 0x00, 0x09, 0x09, 0x0E, 0x05, 0x00, 0x0B, +/* 00000480 */ 0xA9, 0x00, 0x09, 0xB7, 0x00, 0x11, 0x24, 0x00, 0x08, 0x09, 0x14, 0x03, 0x00, 0x08, 0x09, 0x09, +/* 00000490 */ 0x25, 0x00, 0x14, 0x03, 0x00, 0x08, 0x03, 0x09, 0x1D, 0x00, 0x2F, 0x10, 0x06, 0x08, 0x00, 0x00, +/* 000004A0 */ 0x2F, 0x11, 0x06, 0x09, 0x01, 0x00, 0x11, 0x03, 0x00, 0x10, 0x11, 0x09, 0x09, 0x00, 0x45, 0x00, +/* 000004B0 */ 0x08, 0x09, 0x88, 0x00, 0x09, 0x06, 0x00, 0x45, 0x00, 0x09, 0x09, 0x7F, 0x00, 0x45, 0x0C, 0x08, +/* 000004C0 */ 0xA8, 0x10, 0x45, 0x0D, 0x10, 0x45, 0x0E, 0x06, 0xED, 0x00, 0xEE, 0x00, 0xA7, 0x10, 0x0A, 0x04, +/* 000004D0 */ 0x03, 0x00, 0x12, 0x03, 0x00, 0x0E, 0x10, 0x09, 0x58, 0x00, 0x98, 0x10, 0x0A, 0x0E, 0x00, 0x00, +/* 000004E0 */ 0x43, 0x10, 0x10, 0x45, 0x0D, 0x10, 0x0E, 0x03, 0x00, 0x0B, 0x09, 0x3F, 0x00, 0x15, 0x03, 0x00, +/* 000004F0 */ 0x0D, 0x0D, 0x09, 0x0B, 0x00, 0x45, 0x0B, 0x05, 0xA9, 0x10, 0x45, 0x0C, 0x10, 0x09, 0x2C, 0x00, +/* 00000500 */ 0x12, 0x24, 0x00, 0x0C, 0x0D, 0x14, 0x03, 0x00, 0x0C, 0x0D, 0x09, 0x1F, 0x00, 0x14, 0x03, 0x00, +/* 00000510 */ 0x0C, 0x03, 0x09, 0x17, 0x00, 0x2F, 0x10, 0x06, 0x0C, 0x02, 0x00, 0x2F, 0x11, 0x06, 0x0D, 0x03, +/* 00000520 */ 0x00, 0x12, 0x03, 0x00, 0x10, 0x11, 0x09, 0x03, 0x00, 0x45, 0x0C, 0x0D, 0x26, 0x0E, 0x0E, 0x09, +/* 00000530 */ 0x98, 0xFF, 0xEF, 0x00, 0x45, 0x00, 0x0C, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xD1, 0xFE, +/* 00000540 */ 0xDE, 0x02, 0xD1, 0xD1, 0xD1, 0xFE, 0xB4, 0x0A, 0x1D, 0x0A, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x2A, +/* 00000550 */ 0x00, 0x0B, 0x00, 0x3C, 0x00, 0x03, 0x00, 0x20, 0x00, 0x06, 0x00, 0x1A, 0x00, 0x08, 0x00, 0x25, +/* 00000560 */ 0x00, 0x03, 0x00, 0x25, 0x00, 0x0E, 0x00, 0x2A, 0x00, 0x06, 0x00, 0x22, 0x00, 0x0E, 0x00, 0x2A, +/* 00000570 */ 0x00, 0x06, 0x00, 0x1E, 0x00, 0x09, 0x00, 0x36, 0x00, 0x05, 0x00, 0x26, 0x00, 0x29, 0x00, 0x83, +/* 00000580 */ 0x00, 0x09, 0x00, 0x40, 0x00, 0x06, 0x00, 0x30, 0x00, 0x03, 0x00, 0x1A, 0x00, 0x05, 0x00, 0x1B, +/* 00000590 */ 0x00, 0x07, 0x00, 0x0B, 0x00, 0x0E, 0x00, 0x29, 0x00, 0x0C, 0x00, 0x5F, 0x00, 0x07, 0x00, 0x3E, +/* 000005A0 */ 0x00, 0x08, 0x00, 0x2B, 0x00, 0x03, 0x00, 0x22, 0x00, 0x08, 0x00, 0x2A, 0x00, 0x29, 0x00, 0x7A, +/* 000005B0 */ 0x00, 0x03, 0x00, 0x5F, 0xFE, 0x08, 0x00, 0xD1, 0x01, 0x08, 0x00, 0x10, 0x00, 0x00, 0x7F, 0x2C, +/* 000005C0 */ 0x23, 0xC2, 0x43, 0x40, 0x13, 0x00, 0x0E, 0x25, 0xA2, 0x41, 0xB1, 0x00, 0x02, 0xFE, 0xB3, 0x02, +/* 000005D0 */ 0xFE, 0xB3, 0x02, 0x03, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, 0xB3, 0x02, 0xFE, 0x6F, 0x06, 0xFE, +/* 000005E0 */ 0x6F, 0x06, 0x0A, 0x08, 0x0F, 0x53, 0x44, 0x1D, 0x04, 0x01, 0x04, 0x01, 0x05, 0x05, 0x05, 0x05, +/* 000005F0 */ 0x01, 0x0F, 0xB0, 0xFE, 0x1C, 0x01, 0x07, 0x01, 0x00, 0x0C, 0x0B, 0x01, 0x01, 0x01, 0x02, 0xFE, +/* 00000600 */ 0x26, 0x01, 0xB1, 0x0A, 0x4E, 0x0B, 0x4E, 0x0C, 0x4E, 0x0D, 0x4E, 0x0E, 0xA7, 0x10, 0x0A, 0x00, +/* 00000610 */ 0x00, 0x00, 0x14, 0x03, 0x00, 0x10, 0x03, 0x09, 0x0B, 0x00, 0x01, 0x58, 0x01, 0x10, 0x5F, 0x00, +/* 00000620 */ 0x10, 0x01, 0x09, 0x01, 0x01, 0x45, 0x0B, 0x04, 0x43, 0x10, 0x08, 0x45, 0x08, 0x10, 0x15, 0x03, +/* 00000630 */ 0x00, 0x08, 0x08, 0x09, 0x03, 0x00, 0x45, 0x0B, 0x05, 0xA7, 0x10, 0x0A, 0x02, 0x01, 0x00, 0x14, +/* 00000640 */ 0x03, 0x00, 0x10, 0x06, 0x09, 0x06, 0x00, 0x45, 0x00, 0x08, 0x09, 0xD9, 0x00, 0xA7, 0x10, 0x0A, +/* 00000650 */ 0x03, 0x02, 0x00, 0x14, 0x03, 0x00, 0x10, 0x07, 0x09, 0x4C, 0x00, 0x43, 0x10, 0x09, 0x45, 0x09, +/* 00000660 */ 0x10, 0x15, 0x04, 0x00, 0x09, 0x09, 0x0E, 0x05, 0x00, 0x0B, 0xA9, 0x00, 0x09, 0xB7, 0x00, 0x12, +/* 00000670 */ 0x24, 0x00, 0x08, 0x09, 0x14, 0x03, 0x00, 0x08, 0x09, 0x09, 0x25, 0x00, 0x14, 0x03, 0x00, 0x08, +/* 00000680 */ 0x03, 0x09, 0x1D, 0x00, 0x2F, 0x10, 0x06, 0x08, 0x00, 0x00, 0x2F, 0x11, 0x06, 0x09, 0x01, 0x00, +/* 00000690 */ 0x12, 0x03, 0x00, 0x10, 0x11, 0x09, 0x09, 0x00, 0x45, 0x00, 0x08, 0x09, 0x88, 0x00, 0x09, 0x06, +/* 000006A0 */ 0x00, 0x45, 0x00, 0x09, 0x09, 0x7F, 0x00, 0x45, 0x0C, 0x08, 0xA8, 0x10, 0x45, 0x0D, 0x10, 0x45, +/* 000006B0 */ 0x0E, 0x06, 0xED, 0x00, 0xEE, 0x00, 0xA7, 0x10, 0x0A, 0x04, 0x03, 0x00, 0x12, 0x03, 0x00, 0x0E, +/* 000006C0 */ 0x10, 0x09, 0x58, 0x00, 0x98, 0x10, 0x0A, 0x0E, 0x00, 0x00, 0x43, 0x10, 0x10, 0x45, 0x0D, 0x10, +/* 000006D0 */ 0x0E, 0x03, 0x00, 0x0B, 0x09, 0x3F, 0x00, 0x15, 0x03, 0x00, 0x0D, 0x0D, 0x09, 0x0B, 0x00, 0x45, +/* 000006E0 */ 0x0B, 0x05, 0xA9, 0x10, 0x45, 0x0C, 0x10, 0x09, 0x2C, 0x00, 0x11, 0x24, 0x00, 0x0C, 0x0D, 0x14, +/* 000006F0 */ 0x03, 0x00, 0x0C, 0x0D, 0x09, 0x1F, 0x00, 0x14, 0x03, 0x00, 0x0C, 0x03, 0x09, 0x17, 0x00, 0x2F, +/* 00000700 */ 0x10, 0x06, 0x0C, 0x02, 0x00, 0x2F, 0x11, 0x06, 0x0D, 0x03, 0x00, 0x11, 0x03, 0x00, 0x10, 0x11, +/* 00000710 */ 0x09, 0x03, 0x00, 0x45, 0x0C, 0x0D, 0x26, 0x0E, 0x0E, 0x09, 0x98, 0xFF, 0xEF, 0x00, 0x45, 0x00, +/* 00000720 */ 0x0C, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xD1, 0xFE, 0xDD, 0x02, 0xD1, 0xD1, 0xD1, 0xFE, +/* 00000730 */ 0x1D, 0x04, 0x1D, 0x0A, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x2A, 0x00, 0x0B, 0x00, 0x3C, 0x00, 0x03, +/* 00000740 */ 0x00, 0x20, 0x00, 0x06, 0x00, 0x1A, 0x00, 0x08, 0x00, 0x25, 0x00, 0x03, 0x00, 0x25, 0x00, 0x0E, +/* 00000750 */ 0x00, 0x2A, 0x00, 0x06, 0x00, 0x22, 0x00, 0x0E, 0x00, 0x2A, 0x00, 0x06, 0x00, 0x1E, 0x00, 0x09, +/* 00000760 */ 0x00, 0x36, 0x00, 0x05, 0x00, 0x26, 0x00, 0x29, 0x00, 0x83, 0x00, 0x09, 0x00, 0x40, 0x00, 0x06, +/* 00000770 */ 0x00, 0x30, 0x00, 0x03, 0x00, 0x1A, 0x00, 0x05, 0x00, 0x1B, 0x00, 0x07, 0x00, 0x0B, 0x00, 0x0E, +/* 00000780 */ 0x00, 0x29, 0x00, 0x0C, 0x00, 0x5F, 0x00, 0x07, 0x00, 0x3E, 0x00, 0x08, 0x00, 0x2B, 0x00, 0x03, +/* 00000790 */ 0x00, 0x22, 0x00, 0x08, 0x00, 0x2A, 0x00, 0x29, 0x00, 0x7A, 0x00, 0x03, 0x00, 0x5F, 0xFE, 0x08, +/* 000007A0 */ 0x00, 0xD1, 0x01, 0x08, 0x00, 0x10, 0x00, 0x00, 0x00}; + +//Bytecode generated from Object_constructor.js +const char Library_Bytecode_Object_constructor[] = { +/* 00000000 */ 0x43, 0x68, 0x42, 0x63, 0x90, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00000010 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0xFE, 0xD9, 0x02, 0x00, 0xFE, +/* 00000020 */ 0x44, 0x06, 0xFE, 0x44, 0x06, 0x35, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x0E, 0x02, 0x00, +/* 00000030 */ 0x00, 0x8F, 0x05, 0x00, 0x00, 0x0A, 0x6E, 0x00, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, 0x00, +/* 00000040 */ 0x9C, 0x00, 0x00, 0x00, 0x00, 0xB4, 0x00, 0x00, 0x00, 0x01, 0xDE, 0x00, 0x00, 0x00, 0x00, 0x04, +/* 00000050 */ 0x01, 0x00, 0x00, 0x00, 0x1A, 0x01, 0x00, 0x00, 0x00, 0x34, 0x01, 0x00, 0x00, 0x00, 0x46, 0x01, +/* 00000060 */ 0x00, 0x00, 0x00, 0x52, 0x01, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, +/* 00000070 */ 0x6C, 0x00, 0x6F, 0x00, 0x62, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x20, 0x00, 0x63, 0x00, 0x6F, 0x00, +/* 00000080 */ 0x64, 0x00, 0x65, 0x00, 0x00, 0x00, 0x75, 0x00, 0x73, 0x00, 0x65, 0x00, 0x20, 0x00, 0x73, 0x00, +/* 00000090 */ 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x63, 0x00, 0x74, 0x00, 0x00, 0x00, 0x66, 0x00, 0x72, 0x00, +/* 000000A0 */ 0x6F, 0x00, 0x6D, 0x00, 0x45, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x65, 0x00, +/* 000000B0 */ 0x73, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, +/* 000000C0 */ 0x44, 0x00, 0x65, 0x00, 0x66, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x50, 0x00, 0x72, 0x00, +/* 000000D0 */ 0x6F, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x4F, 0x00, +/* 000000E0 */ 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x72, 0x00, +/* 000000F0 */ 0x6F, 0x00, 0x6D, 0x00, 0x45, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x65, 0x00, +/* 00000100 */ 0x73, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x72, 0x00, +/* 00000110 */ 0x61, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, +/* 00000120 */ 0x66, 0x00, 0x69, 0x00, 0x67, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x62, 0x00, 0x6C, 0x00, +/* 00000130 */ 0x65, 0x00, 0x00, 0x00, 0x77, 0x00, 0x72, 0x00, 0x69, 0x00, 0x74, 0x00, 0x61, 0x00, 0x62, 0x00, +/* 00000140 */ 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x76, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x65, 0x00, +/* 00000150 */ 0x00, 0x00, 0x6F, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x00, 0x00, +/* 00000160 */ 0x2B, 0x00, 0x00, 0x00, 0x00, 0x6A, 0x00, 0x00, 0x00, 0x9B, 0x00, 0x00, 0x00, 0xE7, 0x00, 0x00, +/* 00000170 */ 0x00, 0x51, 0x01, 0x00, 0x00, 0xBB, 0x01, 0x00, 0x00, 0xBC, 0x01, 0x00, 0x00, 0xCA, 0x01, 0x00, +/* 00000180 */ 0x00, 0xCB, 0x01, 0x00, 0x00, 0xE3, 0x01, 0x00, 0x00, 0x0B, 0x02, 0x00, 0x00, 0x0C, 0x02, 0x00, +/* 00000190 */ 0x00, 0x4C, 0x02, 0x00, 0x00, 0xA2, 0x02, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, +/* 000001A0 */ 0x00, 0x46, 0x03, 0x00, 0x00, 0x69, 0x03, 0x00, 0x00, 0xA4, 0x03, 0x00, 0x00, 0xE7, 0x03, 0x00, +/* 000001B0 */ 0x00, 0xF1, 0x03, 0x00, 0x00, 0xF2, 0x03, 0x00, 0x00, 0x08, 0x04, 0x00, 0x00, 0x29, 0x04, 0x00, +/* 000001C0 */ 0x00, 0x48, 0x04, 0x00, 0x00, 0x69, 0x04, 0x00, 0x00, 0x86, 0x04, 0x00, 0x00, 0xA4, 0x04, 0x00, +/* 000001D0 */ 0x00, 0xAF, 0x04, 0x00, 0x00, 0xB0, 0x04, 0x00, 0x00, 0xC1, 0x04, 0x00, 0x00, 0xE9, 0x04, 0x00, +/* 000001E0 */ 0x00, 0x28, 0x05, 0x00, 0x00, 0x7A, 0x05, 0x00, 0x00, 0x88, 0x05, 0x00, 0x00, 0x89, 0x05, 0x00, +/* 000001F0 */ 0x00, 0xA5, 0x05, 0x00, 0x00, 0xD2, 0x05, 0x00, 0x00, 0x1C, 0x06, 0x00, 0x00, 0x26, 0x06, 0x00, +/* 00000200 */ 0x00, 0x38, 0x06, 0x00, 0x00, 0x40, 0x06, 0x00, 0x00, 0x44, 0x06, 0x00, 0x00, 0x00, 0x03, 0x73, +/* 00000210 */ 0x0C, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, 0xA8, 0x41, 0xC0, 0x00, 0xFE, 0xD9, 0x02, 0x00, 0xFE, +/* 00000220 */ 0xBC, 0x01, 0xFE, 0xBC, 0x01, 0x01, 0x40, 0xFE, 0x00, 0x90, 0xFE, 0xBC, 0x01, 0xFE, 0x88, 0x04, +/* 00000230 */ 0xFE, 0x88, 0x04, 0x01, 0x04, 0x04, 0x04, 0x04, 0x03, 0x05, 0xFE, 0xDA, 0x02, 0x0A, 0x07, 0xA8, +/* 00000240 */ 0x00, 0xD6, 0x00, 0x04, 0x24, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x00, 0x00, 0x51, 0x02, 0x00, +/* 00000250 */ 0x00, 0x7F, 0x1C, 0x08, 0xC0, 0x03, 0x10, 0x0B, 0x00, 0x08, 0x01, 0xA2, 0x41, 0xD1, 0x00, 0x01, +/* 00000260 */ 0xFE, 0xCC, 0x01, 0xFE, 0xCC, 0x01, 0x01, 0x40, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0xCC, 0x01, +/* 00000270 */ 0xFE, 0x75, 0x04, 0xFE, 0x75, 0x04, 0x05, 0x03, 0x06, 0x04, 0x15, 0x14, 0x01, 0x08, 0x08, 0x08, +/* 00000280 */ 0x08, 0x05, 0x06, 0xFE, 0xDB, 0x02, 0x50, 0x5F, 0x06, 0x03, 0x00, 0x45, 0x04, 0x06, 0x01, 0x58, +/* 00000290 */ 0x01, 0x06, 0x5F, 0x07, 0x04, 0x01, 0x77, 0x07, 0x06, 0x02, 0x01, 0x58, 0x01, 0x06, 0x5F, 0x07, +/* 000002A0 */ 0x04, 0x03, 0x77, 0x07, 0x06, 0x04, 0x01, 0x58, 0x01, 0x06, 0x5F, 0x07, 0x04, 0x05, 0x77, 0x07, +/* 000002B0 */ 0x06, 0x06, 0x6D, 0x06, 0x04, 0x07, 0x07, 0x03, 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x02, 0x00, +/* 000002C0 */ 0x00, 0xD6, 0x00, 0x07, 0x5A, 0x02, 0x07, 0x00, 0x00, 0xF4, 0x03, 0xFF, 0x06, 0x07, 0x00, 0x00, +/* 000002D0 */ 0x00, 0x00, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x59, 0xFE, 0xAA, 0x02, 0xFE, 0xAA, 0x02, 0xFE, 0xB4, +/* 000002E0 */ 0x02, 0xFE, 0xB4, 0x02, 0xFE, 0x8F, 0x02, 0xFE, 0xDC, 0x02, 0xFE, 0x7F, 0x02, 0xFE, 0xE7, 0x01, +/* 000002F0 */ 0x06, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x29, 0x00, 0x0C, 0x00, 0x40, 0x00, 0x0C, 0x00, 0x56, +/* 00000300 */ 0x00, 0x0C, 0x00, 0x61, 0x00, 0x23, 0x00, 0x39, 0x03, 0x00, 0x0E, 0x03, 0x00, 0x00, 0x7F, 0x3C, +/* 00000310 */ 0x0A, 0xC6, 0x53, 0x40, 0x53, 0x00, 0x0F, 0x2D, 0xB2, 0x41, 0xD1, 0x00, 0x02, 0xFE, 0x30, 0x03, +/* 00000320 */ 0xFE, 0x30, 0x03, 0x05, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0x30, 0x03, 0xFE, 0x0D, 0x03, 0xFE, +/* 00000330 */ 0x0D, 0x03, 0x0D, 0x0D, 0x14, 0x09, 0x72, 0x6C, 0x27, 0x02, 0x07, 0x01, 0x01, 0x0E, 0x0E, 0x0E, +/* 00000340 */ 0x0E, 0x01, 0x01, 0x14, 0x98, 0xFE, 0x38, 0x01, 0x07, 0x05, 0xFE, 0xDD, 0x02, 0x06, 0xFE, 0xDE, +/* 00000350 */ 0x02, 0x0B, 0x06, 0xFE, 0xDF, 0x02, 0x06, 0xFE, 0xE0, 0x02, 0x06, 0xFE, 0xE1, 0x02, 0x06, 0xFE, +/* 00000360 */ 0xE2, 0x02, 0x01, 0x00, 0x01, 0x01, 0x08, 0xFE, 0xA3, 0x01, 0x4E, 0x0E, 0x4E, 0x0F, 0x4E, 0x10, +/* 00000370 */ 0x4E, 0x11, 0x14, 0x0A, 0x00, 0x0D, 0x02, 0xA8, 0x15, 0x14, 0x03, 0x00, 0x0D, 0x15, 0x09, 0x1D, +/* 00000380 */ 0x00, 0x01, 0x58, 0x01, 0x16, 0x6D, 0x15, 0x16, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x16, 0x5A, +/* 00000390 */ 0x01, 0x03, 0x00, 0x00, 0xF4, 0x02, 0xFF, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCD, 0x15, +/* 000003A0 */ 0x45, 0x0E, 0x15, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, +/* 000003B0 */ 0x7B, 0x05, 0x15, 0x01, 0x7B, 0x05, 0x15, 0x02, 0x7B, 0x05, 0x15, 0x03, 0xA8, 0x16, 0x7B, 0x16, +/* 000003C0 */ 0x15, 0x04, 0x45, 0x0F, 0x15, 0xA8, 0x15, 0x45, 0x10, 0x15, 0x0D, 0x05, 0x00, 0x0D, 0x0C, 0x01, +/* 000003D0 */ 0x73, 0x01, 0x10, 0x16, 0x44, 0x18, 0x0D, 0x6D, 0x15, 0x18, 0x05, 0x07, 0x01, 0x00, 0x59, 0x00, +/* 000003E0 */ 0x18, 0xF4, 0x01, 0x15, 0x15, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x18, 0x05, 0x00, 0x15, 0x01, +/* 000003F0 */ 0x73, 0x01, 0x8F, 0x13, 0x6D, 0x16, 0x15, 0x06, 0xAD, 0x12, 0xAD, 0x13, 0xE8, 0xDE, 0x00, 0xE7, +/* 00000400 */ 0xA4, 0x00, 0xED, 0x00, 0xEE, 0x00, 0xAD, 0x12, 0xAD, 0x13, 0x07, 0x01, 0x00, 0x59, 0x00, 0x15, +/* 00000410 */ 0xF4, 0x01, 0x17, 0x16, 0x06, 0x00, 0x00, 0x00, 0x02, 0x00, 0x18, 0x05, 0x00, 0x17, 0x01, 0x73, +/* 00000420 */ 0x01, 0x8F, 0x13, 0x5F, 0x18, 0x17, 0x07, 0x0F, 0x75, 0x00, 0x18, 0x5F, 0x17, 0x17, 0x08, 0xAB, +/* 00000430 */ 0x12, 0xAB, 0x13, 0x45, 0x11, 0x17, 0x2A, 0x18, 0x11, 0x15, 0x08, 0x00, 0x18, 0x09, 0x14, 0x03, +/* 00000440 */ 0x00, 0x11, 0x02, 0x09, 0x1D, 0x00, 0x01, 0x58, 0x01, 0x19, 0x6D, 0x18, 0x19, 0x09, 0x07, 0x02, +/* 00000450 */ 0x00, 0x59, 0x00, 0x19, 0x5A, 0x01, 0x03, 0x03, 0x00, 0xF4, 0x02, 0xFF, 0x18, 0x09, 0x00, 0x00, +/* 00000460 */ 0x00, 0x03, 0x00, 0x98, 0x18, 0x11, 0x0A, 0x00, 0x00, 0x45, 0x10, 0x18, 0x98, 0x18, 0x11, 0x0B, +/* 00000470 */ 0x01, 0x00, 0x77, 0x18, 0x0F, 0x0A, 0x01, 0x58, 0x01, 0x19, 0x6D, 0x18, 0x19, 0x0B, 0x07, 0x04, +/* 00000480 */ 0x00, 0x59, 0x00, 0x19, 0x5A, 0x01, 0x0E, 0x04, 0x00, 0x5A, 0x02, 0x10, 0x04, 0x00, 0x5A, 0x03, +/* 00000490 */ 0x0F, 0x04, 0x00, 0xF4, 0x04, 0xFF, 0x18, 0x0B, 0x00, 0x00, 0x00, 0x04, 0x00, 0x09, 0x64, 0xFF, +/* 000004A0 */ 0xEF, 0x00, 0xEB, 0x09, 0x33, 0x00, 0xE9, 0x16, 0x0E, 0x2A, 0x00, 0x12, 0xAE, 0x13, 0xE7, 0x22, +/* 000004B0 */ 0x00, 0x5F, 0x17, 0x15, 0x0C, 0x0C, 0x15, 0x00, 0x17, 0x0C, 0x07, 0x01, 0x00, 0x59, 0x00, 0x15, +/* 000004C0 */ 0xF0, 0x01, 0x17, 0x17, 0x05, 0x00, 0x18, 0x05, 0x00, 0x17, 0x01, 0x73, 0x01, 0x8F, 0x13, 0xEB, +/* 000004D0 */ 0x09, 0x03, 0x00, 0xE9, 0x17, 0xEB, 0x23, 0x16, 0xEB, 0xEB, 0x09, 0x26, 0x00, 0x01, 0x70, 0x01, +/* 000004E0 */ 0x0E, 0x1E, 0x00, 0x13, 0x5F, 0x16, 0x15, 0x0D, 0x0C, 0x15, 0x00, 0x16, 0x0C, 0x07, 0x01, 0x00, +/* 000004F0 */ 0x59, 0x00, 0x15, 0xF0, 0x01, 0x16, 0x16, 0x06, 0x00, 0x18, 0x05, 0x00, 0x16, 0x01, 0x73, 0x01, +/* 00000500 */ 0x8F, 0x13, 0xEA, 0x45, 0x00, 0x0E, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x01, 0x18, 0x00, +/* 00000510 */ 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, +/* 00000520 */ 0x95, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0xFE, 0xAA, 0x02, 0xFE, +/* 00000530 */ 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x97, 0x01, 0x14, 0xFE, 0x07, 0x01, 0x74, +/* 00000540 */ 0xFE, 0x97, 0x01, 0xFE, 0xB4, 0x02, 0xFE, 0x97, 0x01, 0xFE, 0xDC, 0x02, 0xFE, 0x35, 0x01, 0xFE, +/* 00000550 */ 0x35, 0x01, 0xFE, 0x71, 0x03, 0x0E, 0x08, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x3F, 0x00, 0x1D, 0x00, +/* 00000560 */ 0x4A, 0x00, 0x05, 0x00, 0x16, 0x00, 0x22, 0x00, 0xA8, 0x00, 0x05, 0x00, 0x11, 0x00, 0x3C, 0x00, +/* 00000570 */ 0x05, 0x00, 0x30, 0x00, 0x27, 0x00, 0x10, 0x00, 0x43, 0x00, 0x1D, 0x00, 0x5D, 0x00, 0x09, 0x00, +/* 00000580 */ 0x1C, 0x00, 0x0A, 0x00, 0x2D, 0x00, 0x8D, 0x00, 0x50, 0x00, 0x08, 0x00, 0x0E, 0x00, 0x00, 0x00}; + +#endif + +#ifdef ENABLE_INTL_OBJECT + +//Bytecode generated from Intl.js +const char Library_Bytecode_Intl[] = { +/* 00000000 */ 0x43, 0x68, 0x42, 0x63, 0x10, 0xD0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00000010 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0xFE, 0xD9, 0x02, 0x00, 0xFF, +/* 00000020 */ 0x2E, 0xB2, 0x02, 0x00, 0xFF, 0x2E, 0xB2, 0x02, 0x00, 0x39, 0x00, 0x00, 0x00, 0xC8, 0x48, 0x00, +/* 00000030 */ 0x00, 0x38, 0x83, 0x00, 0x00, 0x0F, 0xD0, 0x01, 0x00, 0xFE, 0x2C, 0x02, 0x1E, 0x0B, 0x00, 0x00, +/* 00000040 */ 0x00, 0x36, 0x0B, 0x00, 0x00, 0x00, 0x4C, 0x0B, 0x00, 0x00, 0x01, 0x60, 0x0B, 0x00, 0x00, 0x01, +/* 00000050 */ 0x7A, 0x0B, 0x00, 0x00, 0x01, 0x98, 0x0B, 0x00, 0x00, 0x01, 0xBA, 0x0B, 0x00, 0x00, 0x01, 0xD2, +/* 00000060 */ 0x0B, 0x00, 0x00, 0x01, 0xFC, 0x0B, 0x00, 0x00, 0x01, 0x22, 0x0C, 0x00, 0x00, 0x01, 0x56, 0x0C, +/* 00000070 */ 0x00, 0x00, 0x01, 0x90, 0x0C, 0x00, 0x00, 0x01, 0xBC, 0x0C, 0x00, 0x00, 0x01, 0xE6, 0x0C, 0x00, +/* 00000080 */ 0x00, 0x01, 0x10, 0x0D, 0x00, 0x00, 0x01, 0x3A, 0x0D, 0x00, 0x00, 0x01, 0x5E, 0x0D, 0x00, 0x00, +/* 00000090 */ 0x01, 0x88, 0x0D, 0x00, 0x00, 0x01, 0xB0, 0x0D, 0x00, 0x00, 0x01, 0xC0, 0x0D, 0x00, 0x00, 0x01, +/* 000000A0 */ 0xEC, 0x0D, 0x00, 0x00, 0x01, 0x20, 0x0E, 0x00, 0x00, 0x01, 0x54, 0x0E, 0x00, 0x00, 0x01, 0x78, +/* 000000B0 */ 0x0E, 0x00, 0x00, 0x01, 0x9C, 0x0E, 0x00, 0x00, 0x01, 0xAE, 0x0E, 0x00, 0x00, 0x01, 0xD0, 0x0E, +/* 000000C0 */ 0x00, 0x00, 0x01, 0xF8, 0x0E, 0x00, 0x00, 0x01, 0x20, 0x0F, 0x00, 0x00, 0x01, 0x3E, 0x0F, 0x00, +/* 000000D0 */ 0x00, 0x01, 0x6A, 0x0F, 0x00, 0x00, 0x01, 0x9E, 0x0F, 0x00, 0x00, 0x01, 0xDA, 0x0F, 0x00, 0x00, +/* 000000E0 */ 0x01, 0x1A, 0x10, 0x00, 0x00, 0x01, 0x68, 0x10, 0x00, 0x00, 0x01, 0x90, 0x10, 0x00, 0x00, 0x01, +/* 000000F0 */ 0xA2, 0x10, 0x00, 0x00, 0x01, 0xC8, 0x10, 0x00, 0x00, 0x01, 0xDC, 0x10, 0x00, 0x00, 0x01, 0xE6, +/* 00000100 */ 0x10, 0x00, 0x00, 0x01, 0xEA, 0x10, 0x00, 0x00, 0x00, 0xF2, 0x10, 0x00, 0x00, 0x00, 0xFE, 0x10, +/* 00000110 */ 0x00, 0x00, 0x00, 0x06, 0x11, 0x00, 0x00, 0x00, 0x0E, 0x11, 0x00, 0x00, 0x00, 0x26, 0x11, 0x00, +/* 00000120 */ 0x00, 0x00, 0x3E, 0x11, 0x00, 0x00, 0x00, 0x4E, 0x11, 0x00, 0x00, 0x00, 0x5A, 0x11, 0x00, 0x00, +/* 00000130 */ 0x00, 0x6E, 0x11, 0x00, 0x00, 0x01, 0x8A, 0x11, 0x00, 0x00, 0x00, 0x96, 0x11, 0x00, 0x00, 0x00, +/* 00000140 */ 0xA4, 0x11, 0x00, 0x00, 0x00, 0xB4, 0x11, 0x00, 0x00, 0x00, 0xBE, 0x11, 0x00, 0x00, 0x01, 0xD8, +/* 00000150 */ 0x11, 0x00, 0x00, 0x00, 0xE0, 0x11, 0x00, 0x00, 0x00, 0xEE, 0x11, 0x00, 0x00, 0x00, 0xFA, 0x11, +/* 00000160 */ 0x00, 0x00, 0x00, 0x08, 0x12, 0x00, 0x00, 0x00, 0x16, 0x12, 0x00, 0x00, 0x01, 0x24, 0x12, 0x00, +/* 00000170 */ 0x00, 0x00, 0x2E, 0x12, 0x00, 0x00, 0x00, 0x4C, 0x12, 0x00, 0x00, 0x00, 0x6A, 0x12, 0x00, 0x00, +/* 00000180 */ 0x00, 0x84, 0x12, 0x00, 0x00, 0x00, 0x92, 0x12, 0x00, 0x00, 0x00, 0xB0, 0x12, 0x00, 0x00, 0x00, +/* 00000190 */ 0xC2, 0x12, 0x00, 0x00, 0x00, 0xCE, 0x12, 0x00, 0x00, 0x00, 0xDE, 0x12, 0x00, 0x00, 0x00, 0xE8, +/* 000001A0 */ 0x12, 0x00, 0x00, 0x00, 0xF4, 0x12, 0x00, 0x00, 0x01, 0x06, 0x13, 0x00, 0x00, 0x01, 0x18, 0x13, +/* 000001B0 */ 0x00, 0x00, 0x01, 0x2A, 0x13, 0x00, 0x00, 0x01, 0x4C, 0x13, 0x00, 0x00, 0x01, 0x60, 0x13, 0x00, +/* 000001C0 */ 0x00, 0x01, 0x72, 0x13, 0x00, 0x00, 0x00, 0x7C, 0x13, 0x00, 0x00, 0x00, 0xAE, 0x13, 0x00, 0x00, +/* 000001D0 */ 0x00, 0xD6, 0x13, 0x00, 0x00, 0x00, 0xE2, 0x13, 0x00, 0x00, 0x00, 0xF4, 0x13, 0x00, 0x00, 0x00, +/* 000001E0 */ 0x0A, 0x14, 0x00, 0x00, 0x00, 0x24, 0x14, 0x00, 0x00, 0x00, 0x36, 0x14, 0x00, 0x00, 0x00, 0x50, +/* 000001F0 */ 0x14, 0x00, 0x00, 0x00, 0x6E, 0x14, 0x00, 0x00, 0x00, 0x86, 0x14, 0x00, 0x00, 0x00, 0x96, 0x14, +/* 00000200 */ 0x00, 0x00, 0x00, 0xA2, 0x14, 0x00, 0x00, 0x00, 0xE4, 0x14, 0x00, 0x00, 0x00, 0x2E, 0x15, 0x00, +/* 00000210 */ 0x00, 0x00, 0x7C, 0x15, 0x00, 0x00, 0x00, 0x86, 0x15, 0x00, 0x00, 0x00, 0xAC, 0x15, 0x00, 0x00, +/* 00000220 */ 0x01, 0xB8, 0x15, 0x00, 0x00, 0x01, 0xC2, 0x15, 0x00, 0x00, 0x00, 0xD0, 0x15, 0x00, 0x00, 0x01, +/* 00000230 */ 0xDC, 0x15, 0x00, 0x00, 0x01, 0xE8, 0x15, 0x00, 0x00, 0x01, 0xF8, 0x15, 0x00, 0x00, 0x00, 0x06, +/* 00000240 */ 0x16, 0x00, 0x00, 0x01, 0x12, 0x16, 0x00, 0x00, 0x01, 0x20, 0x16, 0x00, 0x00, 0x00, 0x2E, 0x16, +/* 00000250 */ 0x00, 0x00, 0x01, 0x3A, 0x16, 0x00, 0x00, 0x01, 0x4C, 0x16, 0x00, 0x00, 0x00, 0x5A, 0x16, 0x00, +/* 00000260 */ 0x00, 0x01, 0x68, 0x16, 0x00, 0x00, 0x00, 0x6A, 0x16, 0x00, 0x00, 0x01, 0x76, 0x16, 0x00, 0x00, +/* 00000270 */ 0x01, 0x82, 0x16, 0x00, 0x00, 0x01, 0x8E, 0x16, 0x00, 0x00, 0x01, 0x9C, 0x16, 0x00, 0x00, 0x01, +/* 00000280 */ 0xA8, 0x16, 0x00, 0x00, 0x01, 0xBC, 0x16, 0x00, 0x00, 0x01, 0xE0, 0x16, 0x00, 0x00, 0x01, 0x06, +/* 00000290 */ 0x17, 0x00, 0x00, 0x01, 0x1A, 0x17, 0x00, 0x00, 0x01, 0x4C, 0x17, 0x00, 0x00, 0x01, 0x6C, 0x17, +/* 000002A0 */ 0x00, 0x00, 0x01, 0x8E, 0x17, 0x00, 0x00, 0x01, 0xB4, 0x17, 0x00, 0x00, 0x01, 0xF0, 0x17, 0x00, +/* 000002B0 */ 0x00, 0x01, 0x18, 0x18, 0x00, 0x00, 0x01, 0x34, 0x18, 0x00, 0x00, 0x01, 0x52, 0x18, 0x00, 0x00, +/* 000002C0 */ 0x01, 0x7E, 0x18, 0x00, 0x00, 0x01, 0x9A, 0x18, 0x00, 0x00, 0x01, 0xBA, 0x18, 0x00, 0x00, 0x01, +/* 000002D0 */ 0xDC, 0x18, 0x00, 0x00, 0x01, 0xF6, 0x18, 0x00, 0x00, 0x01, 0x28, 0x19, 0x00, 0x00, 0x01, 0x66, +/* 000002E0 */ 0x19, 0x00, 0x00, 0x01, 0x94, 0x19, 0x00, 0x00, 0x01, 0xC2, 0x19, 0x00, 0x00, 0x01, 0xF2, 0x19, +/* 000002F0 */ 0x00, 0x00, 0x01, 0x2A, 0x1A, 0x00, 0x00, 0x01, 0x4C, 0x1A, 0x00, 0x00, 0x01, 0x78, 0x1A, 0x00, +/* 00000300 */ 0x00, 0x01, 0xA2, 0x1A, 0x00, 0x00, 0x01, 0xCC, 0x1A, 0x00, 0x00, 0x01, 0xFC, 0x1A, 0x00, 0x00, +/* 00000310 */ 0x01, 0x2C, 0x1B, 0x00, 0x00, 0x01, 0x4E, 0x1B, 0x00, 0x00, 0x01, 0x6E, 0x1B, 0x00, 0x00, 0x01, +/* 00000320 */ 0x86, 0x1B, 0x00, 0x00, 0x01, 0xC8, 0x1B, 0x00, 0x00, 0x01, 0x00, 0x1C, 0x00, 0x00, 0x01, 0x4A, +/* 00000330 */ 0x1C, 0x00, 0x00, 0x01, 0x8A, 0x1C, 0x00, 0x00, 0x01, 0xD8, 0x1C, 0x00, 0x00, 0x01, 0x1C, 0x1D, +/* 00000340 */ 0x00, 0x00, 0x01, 0x4E, 0x1D, 0x00, 0x00, 0x01, 0x7A, 0x1D, 0x00, 0x00, 0x01, 0x7E, 0x1D, 0x00, +/* 00000350 */ 0x00, 0x01, 0x8C, 0x1D, 0x00, 0x00, 0x00, 0x94, 0x1D, 0x00, 0x00, 0x00, 0x9C, 0x1D, 0x00, 0x00, +/* 00000360 */ 0x00, 0xB8, 0x1D, 0x00, 0x00, 0x00, 0xD4, 0x1D, 0x00, 0x00, 0x00, 0xE8, 0x1D, 0x00, 0x00, 0x00, +/* 00000370 */ 0xF8, 0x1D, 0x00, 0x00, 0x00, 0x10, 0x1E, 0x00, 0x00, 0x00, 0x30, 0x1E, 0x00, 0x00, 0x00, 0x40, +/* 00000380 */ 0x1E, 0x00, 0x00, 0x00, 0x52, 0x1E, 0x00, 0x00, 0x00, 0x66, 0x1E, 0x00, 0x00, 0x00, 0x74, 0x1E, +/* 00000390 */ 0x00, 0x00, 0x00, 0x92, 0x1E, 0x00, 0x00, 0x00, 0x9E, 0x1E, 0x00, 0x00, 0x00, 0xB0, 0x1E, 0x00, +/* 000003A0 */ 0x00, 0x00, 0xC0, 0x1E, 0x00, 0x00, 0x00, 0xD2, 0x1E, 0x00, 0x00, 0x00, 0xE4, 0x1E, 0x00, 0x00, +/* 000003B0 */ 0x00, 0xF6, 0x1E, 0x00, 0x00, 0x01, 0x02, 0x1F, 0x00, 0x00, 0x00, 0x24, 0x1F, 0x00, 0x00, 0x00, +/* 000003C0 */ 0x46, 0x1F, 0x00, 0x00, 0x00, 0x58, 0x1F, 0x00, 0x00, 0x00, 0x7A, 0x1F, 0x00, 0x00, 0x00, 0x8A, +/* 000003D0 */ 0x1F, 0x00, 0x00, 0x00, 0x9E, 0x1F, 0x00, 0x00, 0x00, 0xAC, 0x1F, 0x00, 0x00, 0x00, 0xBC, 0x1F, +/* 000003E0 */ 0x00, 0x00, 0x00, 0xC2, 0x1F, 0x00, 0x00, 0x00, 0xD0, 0x1F, 0x00, 0x00, 0x00, 0xD4, 0x1F, 0x00, +/* 000003F0 */ 0x00, 0x01, 0xF6, 0x1F, 0x00, 0x00, 0x01, 0x0A, 0x20, 0x00, 0x00, 0x01, 0x0E, 0x20, 0x00, 0x00, +/* 00000400 */ 0x01, 0x26, 0x20, 0x00, 0x00, 0x01, 0x34, 0x20, 0x00, 0x00, 0x01, 0x5A, 0x20, 0x00, 0x00, 0x00, +/* 00000410 */ 0x68, 0x20, 0x00, 0x00, 0x01, 0x7E, 0x20, 0x00, 0x00, 0x00, 0x84, 0x20, 0x00, 0x00, 0x00, 0x8C, +/* 00000420 */ 0x20, 0x00, 0x00, 0x01, 0xA8, 0x20, 0x00, 0x00, 0x00, 0xB2, 0x20, 0x00, 0x00, 0x00, 0xC2, 0x20, +/* 00000430 */ 0x00, 0x00, 0x00, 0xD0, 0x20, 0x00, 0x00, 0x00, 0xDE, 0x20, 0x00, 0x00, 0x00, 0xE4, 0x20, 0x00, +/* 00000440 */ 0x00, 0x00, 0xEA, 0x20, 0x00, 0x00, 0x00, 0xF4, 0x20, 0x00, 0x00, 0x00, 0xF8, 0x20, 0x00, 0x00, +/* 00000450 */ 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x04, 0x21, 0x00, 0x00, 0x00, 0x1A, 0x21, 0x00, 0x00, 0x01, +/* 00000460 */ 0x40, 0x21, 0x00, 0x00, 0x00, 0x4C, 0x21, 0x00, 0x00, 0x00, 0x58, 0x21, 0x00, 0x00, 0x00, 0x60, +/* 00000470 */ 0x21, 0x00, 0x00, 0x00, 0x64, 0x21, 0x00, 0x00, 0x00, 0x68, 0x21, 0x00, 0x00, 0x00, 0x1C, 0x22, +/* 00000480 */ 0x00, 0x00, 0x00, 0xB8, 0x22, 0x00, 0x00, 0x00, 0x3E, 0x23, 0x00, 0x00, 0x00, 0x4A, 0x23, 0x00, +/* 00000490 */ 0x00, 0x00, 0x52, 0x23, 0x00, 0x00, 0x00, 0x68, 0x23, 0x00, 0x00, 0x00, 0x82, 0x23, 0x00, 0x00, +/* 000004A0 */ 0x00, 0x9C, 0x23, 0x00, 0x00, 0x00, 0xA6, 0x23, 0x00, 0x00, 0x00, 0xBC, 0x23, 0x00, 0x00, 0x00, +/* 000004B0 */ 0xCA, 0x23, 0x00, 0x00, 0x00, 0xD8, 0x23, 0x00, 0x00, 0x00, 0xE2, 0x23, 0x00, 0x00, 0x00, 0xF0, +/* 000004C0 */ 0x23, 0x00, 0x00, 0x00, 0x04, 0x24, 0x00, 0x00, 0x00, 0x1E, 0x24, 0x00, 0x00, 0x00, 0x2A, 0x24, +/* 000004D0 */ 0x00, 0x00, 0x00, 0x38, 0x24, 0x00, 0x00, 0x00, 0x3E, 0x24, 0x00, 0x00, 0x00, 0x4A, 0x24, 0x00, +/* 000004E0 */ 0x00, 0x00, 0x52, 0x24, 0x00, 0x00, 0x00, 0x62, 0x24, 0x00, 0x00, 0x00, 0x6E, 0x24, 0x00, 0x00, +/* 000004F0 */ 0x00, 0x7E, 0x24, 0x00, 0x00, 0x00, 0x8A, 0x24, 0x00, 0x00, 0x00, 0x94, 0x24, 0x00, 0x00, 0x00, +/* 00000500 */ 0x9A, 0x24, 0x00, 0x00, 0x00, 0x9E, 0x24, 0x00, 0x00, 0x00, 0xA2, 0x24, 0x00, 0x00, 0x01, 0xA6, +/* 00000510 */ 0x24, 0x00, 0x00, 0x01, 0xAA, 0x24, 0x00, 0x00, 0x01, 0xBC, 0x24, 0x00, 0x00, 0x01, 0xCA, 0x24, +/* 00000520 */ 0x00, 0x00, 0x01, 0xD8, 0x24, 0x00, 0x00, 0x01, 0xEA, 0x24, 0x00, 0x00, 0x01, 0x00, 0x25, 0x00, +/* 00000530 */ 0x00, 0x00, 0x14, 0x25, 0x00, 0x00, 0x00, 0x22, 0x25, 0x00, 0x00, 0x01, 0x46, 0x25, 0x00, 0x00, +/* 00000540 */ 0x01, 0x54, 0x25, 0x00, 0x00, 0x00, 0x7E, 0x25, 0x00, 0x00, 0x00, 0xAA, 0x25, 0x00, 0x00, 0x00, +/* 00000550 */ 0xD6, 0x25, 0x00, 0x00, 0x00, 0x08, 0x26, 0x00, 0x00, 0x00, 0x3A, 0x26, 0x00, 0x00, 0x00, 0x4C, +/* 00000560 */ 0x26, 0x00, 0x00, 0x00, 0x68, 0x26, 0x00, 0x00, 0x00, 0x76, 0x26, 0x00, 0x00, 0x01, 0x90, 0x26, +/* 00000570 */ 0x00, 0x00, 0x01, 0x9A, 0x26, 0x00, 0x00, 0x01, 0xAC, 0x26, 0x00, 0x00, 0x01, 0xD2, 0x26, 0x00, +/* 00000580 */ 0x00, 0x01, 0x02, 0x27, 0x00, 0x00, 0x01, 0x26, 0x27, 0x00, 0x00, 0x00, 0x34, 0x27, 0x00, 0x00, +/* 00000590 */ 0x00, 0x72, 0x27, 0x00, 0x00, 0x00, 0x8E, 0x27, 0x00, 0x00, 0x00, 0xCE, 0x27, 0x00, 0x00, 0x00, +/* 000005A0 */ 0xE2, 0x27, 0x00, 0x00, 0x00, 0xFA, 0x27, 0x00, 0x00, 0x00, 0x1A, 0x28, 0x00, 0x00, 0x00, 0x6A, +/* 000005B0 */ 0x28, 0x00, 0x00, 0x00, 0x82, 0x28, 0x00, 0x00, 0x00, 0x92, 0x28, 0x00, 0x00, 0x00, 0x9E, 0x28, +/* 000005C0 */ 0x00, 0x00, 0x00, 0xA8, 0x28, 0x00, 0x00, 0x00, 0xB6, 0x28, 0x00, 0x00, 0x00, 0xBC, 0x28, 0x00, +/* 000005D0 */ 0x00, 0x00, 0xC2, 0x28, 0x00, 0x00, 0x00, 0xC8, 0x28, 0x00, 0x00, 0x00, 0xD8, 0x28, 0x00, 0x00, +/* 000005E0 */ 0x01, 0xEC, 0x28, 0x00, 0x00, 0x00, 0xF8, 0x28, 0x00, 0x00, 0x00, 0x04, 0x29, 0x00, 0x00, 0x00, +/* 000005F0 */ 0x10, 0x29, 0x00, 0x00, 0x00, 0x20, 0x29, 0x00, 0x00, 0x00, 0x38, 0x29, 0x00, 0x00, 0x00, 0x42, +/* 00000600 */ 0x29, 0x00, 0x00, 0x00, 0x50, 0x29, 0x00, 0x00, 0x00, 0x5A, 0x29, 0x00, 0x00, 0x00, 0x6A, 0x29, +/* 00000610 */ 0x00, 0x00, 0x00, 0x8E, 0x29, 0x00, 0x00, 0x01, 0x9E, 0x29, 0x00, 0x00, 0x01, 0xB2, 0x29, 0x00, +/* 00000620 */ 0x00, 0x01, 0xDA, 0x29, 0x00, 0x00, 0x00, 0xF6, 0x29, 0x00, 0x00, 0x01, 0x10, 0x2A, 0x00, 0x00, +/* 00000630 */ 0x00, 0x46, 0x2A, 0x00, 0x00, 0x00, 0x8C, 0x2A, 0x00, 0x00, 0x01, 0xBA, 0x2A, 0x00, 0x00, 0x01, +/* 00000640 */ 0xE6, 0x2A, 0x00, 0x00, 0x01, 0x0C, 0x2B, 0x00, 0x00, 0x00, 0x1A, 0x2B, 0x00, 0x00, 0x00, 0x5A, +/* 00000650 */ 0x2B, 0x00, 0x00, 0x00, 0x7E, 0x2B, 0x00, 0x00, 0x00, 0xC4, 0x2B, 0x00, 0x00, 0x00, 0x18, 0x2C, +/* 00000660 */ 0x00, 0x00, 0x00, 0x70, 0x2C, 0x00, 0x00, 0x00, 0x86, 0x2C, 0x00, 0x00, 0x00, 0x94, 0x2C, 0x00, +/* 00000670 */ 0x00, 0x00, 0xB0, 0x2C, 0x00, 0x00, 0x00, 0xB6, 0x2C, 0x00, 0x00, 0x01, 0xC2, 0x2C, 0x00, 0x00, +/* 00000680 */ 0x00, 0xD2, 0x2C, 0x00, 0x00, 0x00, 0xE2, 0x2C, 0x00, 0x00, 0x00, 0xF4, 0x2C, 0x00, 0x00, 0x00, +/* 00000690 */ 0x14, 0x2D, 0x00, 0x00, 0x00, 0x1E, 0x2D, 0x00, 0x00, 0x00, 0x2C, 0x2D, 0x00, 0x00, 0x00, 0x44, +/* 000006A0 */ 0x2D, 0x00, 0x00, 0x01, 0x74, 0x2D, 0x00, 0x00, 0x00, 0x92, 0x2D, 0x00, 0x00, 0x00, 0xCE, 0x2D, +/* 000006B0 */ 0x00, 0x00, 0x00, 0x18, 0x2E, 0x00, 0x00, 0x00, 0x38, 0x2E, 0x00, 0x00, 0x01, 0x50, 0x2E, 0x00, +/* 000006C0 */ 0x00, 0x01, 0xA2, 0x2E, 0x00, 0x00, 0x01, 0xC8, 0x2E, 0x00, 0x00, 0x01, 0xF2, 0x2E, 0x00, 0x00, +/* 000006D0 */ 0x01, 0x24, 0x2F, 0x00, 0x00, 0x01, 0x48, 0x2F, 0x00, 0x00, 0x01, 0x9A, 0x2F, 0x00, 0x00, 0x01, +/* 000006E0 */ 0xCA, 0x2F, 0x00, 0x00, 0x01, 0xF4, 0x2F, 0x00, 0x00, 0x00, 0xFE, 0x2F, 0x00, 0x00, 0x01, 0x0C, +/* 000006F0 */ 0x30, 0x00, 0x00, 0x01, 0x18, 0x30, 0x00, 0x00, 0x01, 0x22, 0x30, 0x00, 0x00, 0x01, 0x32, 0x30, +/* 00000700 */ 0x00, 0x00, 0x00, 0x42, 0x30, 0x00, 0x00, 0x00, 0x4A, 0x30, 0x00, 0x00, 0x00, 0x54, 0x30, 0x00, +/* 00000710 */ 0x00, 0x00, 0x60, 0x30, 0x00, 0x00, 0x00, 0x68, 0x30, 0x00, 0x00, 0x00, 0x72, 0x30, 0x00, 0x00, +/* 00000720 */ 0x00, 0x80, 0x30, 0x00, 0x00, 0x00, 0x8E, 0x30, 0x00, 0x00, 0x00, 0xA8, 0x30, 0x00, 0x00, 0x00, +/* 00000730 */ 0xCE, 0x30, 0x00, 0x00, 0x00, 0xF4, 0x30, 0x00, 0x00, 0x00, 0x30, 0x31, 0x00, 0x00, 0x00, 0x38, +/* 00000740 */ 0x31, 0x00, 0x00, 0x00, 0x40, 0x31, 0x00, 0x00, 0x00, 0x84, 0x31, 0x00, 0x00, 0x00, 0x8E, 0x31, +/* 00000750 */ 0x00, 0x00, 0x00, 0xD2, 0x31, 0x00, 0x00, 0x00, 0xDC, 0x31, 0x00, 0x00, 0x00, 0x04, 0x32, 0x00, +/* 00000760 */ 0x00, 0x00, 0x4E, 0x32, 0x00, 0x00, 0x00, 0xA6, 0x32, 0x00, 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, +/* 00000770 */ 0x01, 0x22, 0x33, 0x00, 0x00, 0x01, 0x42, 0x33, 0x00, 0x00, 0x01, 0x6E, 0x33, 0x00, 0x00, 0x01, +/* 00000780 */ 0x9A, 0x33, 0x00, 0x00, 0x01, 0xC2, 0x33, 0x00, 0x00, 0x01, 0xEA, 0x33, 0x00, 0x00, 0x00, 0xEE, +/* 00000790 */ 0x33, 0x00, 0x00, 0x01, 0xF2, 0x33, 0x00, 0x00, 0x01, 0xF6, 0x33, 0x00, 0x00, 0x01, 0xFA, 0x33, +/* 000007A0 */ 0x00, 0x00, 0x01, 0xFE, 0x33, 0x00, 0x00, 0x00, 0x02, 0x34, 0x00, 0x00, 0x00, 0x10, 0x34, 0x00, +/* 000007B0 */ 0x00, 0x01, 0x14, 0x34, 0x00, 0x00, 0x01, 0x22, 0x34, 0x00, 0x00, 0x01, 0x26, 0x34, 0x00, 0x00, +/* 000007C0 */ 0x01, 0x2A, 0x34, 0x00, 0x00, 0x01, 0x2E, 0x34, 0x00, 0x00, 0x01, 0x32, 0x34, 0x00, 0x00, 0x01, +/* 000007D0 */ 0x36, 0x34, 0x00, 0x00, 0x01, 0x3A, 0x34, 0x00, 0x00, 0x01, 0x3E, 0x34, 0x00, 0x00, 0x01, 0x42, +/* 000007E0 */ 0x34, 0x00, 0x00, 0x01, 0x46, 0x34, 0x00, 0x00, 0x01, 0x4A, 0x34, 0x00, 0x00, 0x01, 0x4E, 0x34, +/* 000007F0 */ 0x00, 0x00, 0x01, 0x52, 0x34, 0x00, 0x00, 0x01, 0x56, 0x34, 0x00, 0x00, 0x01, 0x5A, 0x34, 0x00, +/* 00000800 */ 0x00, 0x01, 0x5E, 0x34, 0x00, 0x00, 0x01, 0x62, 0x34, 0x00, 0x00, 0x01, 0x66, 0x34, 0x00, 0x00, +/* 00000810 */ 0x01, 0x6A, 0x34, 0x00, 0x00, 0x01, 0x6E, 0x34, 0x00, 0x00, 0x01, 0x72, 0x34, 0x00, 0x00, 0x01, +/* 00000820 */ 0x76, 0x34, 0x00, 0x00, 0x01, 0x7E, 0x34, 0x00, 0x00, 0x01, 0x86, 0x34, 0x00, 0x00, 0x01, 0x8E, +/* 00000830 */ 0x34, 0x00, 0x00, 0x01, 0x96, 0x34, 0x00, 0x00, 0x00, 0x9A, 0x34, 0x00, 0x00, 0x00, 0x9E, 0x34, +/* 00000840 */ 0x00, 0x00, 0x01, 0xB2, 0x34, 0x00, 0x00, 0x00, 0xB8, 0x34, 0x00, 0x00, 0x00, 0xBE, 0x34, 0x00, +/* 00000850 */ 0x00, 0x00, 0xD6, 0x34, 0x00, 0x00, 0x00, 0xE8, 0x34, 0x00, 0x00, 0x00, 0x36, 0x35, 0x00, 0x00, +/* 00000860 */ 0x00, 0x46, 0x35, 0x00, 0x00, 0x00, 0x56, 0x35, 0x00, 0x00, 0x00, 0x5E, 0x35, 0x00, 0x00, 0x00, +/* 00000870 */ 0x7A, 0x35, 0x00, 0x00, 0x00, 0x86, 0x35, 0x00, 0x00, 0x01, 0xBA, 0x35, 0x00, 0x00, 0x01, 0xD4, +/* 00000880 */ 0x35, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x1A, 0x36, 0x00, 0x00, 0x01, 0x2A, 0x36, +/* 00000890 */ 0x00, 0x00, 0x01, 0x3A, 0x36, 0x00, 0x00, 0x01, 0x4E, 0x36, 0x00, 0x00, 0x00, 0x8C, 0x36, 0x00, +/* 000008A0 */ 0x00, 0x00, 0xD2, 0x36, 0x00, 0x00, 0x00, 0x18, 0x37, 0x00, 0x00, 0x00, 0x58, 0x37, 0x00, 0x00, +/* 000008B0 */ 0x00, 0xA6, 0x37, 0x00, 0x00, 0x00, 0xB8, 0x37, 0x00, 0x00, 0x01, 0xE4, 0x37, 0x00, 0x00, 0x01, +/* 000008C0 */ 0x00, 0x38, 0x00, 0x00, 0x01, 0x2A, 0x38, 0x00, 0x00, 0x00, 0x4C, 0x38, 0x00, 0x00, 0x00, 0x94, +/* 000008D0 */ 0x38, 0x00, 0x00, 0x00, 0xD8, 0x38, 0x00, 0x00, 0x00, 0xE6, 0x38, 0x00, 0x00, 0x00, 0x3C, 0x39, +/* 000008E0 */ 0x00, 0x00, 0x00, 0x46, 0x39, 0x00, 0x00, 0x00, 0x58, 0x39, 0x00, 0x00, 0x00, 0x68, 0x39, 0x00, +/* 000008F0 */ 0x00, 0x01, 0x8A, 0x39, 0x00, 0x00, 0x01, 0xB8, 0x39, 0x00, 0x00, 0x00, 0xC4, 0x39, 0x00, 0x00, +/* 00000900 */ 0x01, 0xCA, 0x39, 0x00, 0x00, 0x00, 0x24, 0x3A, 0x00, 0x00, 0x00, 0x4E, 0x3A, 0x00, 0x00, 0x00, +/* 00000910 */ 0x76, 0x3A, 0x00, 0x00, 0x01, 0x88, 0x3A, 0x00, 0x00, 0x01, 0xA8, 0x3A, 0x00, 0x00, 0x00, 0xB0, +/* 00000920 */ 0x3A, 0x00, 0x00, 0x00, 0xC0, 0x3A, 0x00, 0x00, 0x00, 0xEA, 0x3A, 0x00, 0x00, 0x00, 0x06, 0x3B, +/* 00000930 */ 0x00, 0x00, 0x00, 0x24, 0x3B, 0x00, 0x00, 0x00, 0x38, 0x3B, 0x00, 0x00, 0x01, 0x4A, 0x3B, 0x00, +/* 00000940 */ 0x00, 0x01, 0x62, 0x3B, 0x00, 0x00, 0x00, 0x6C, 0x3B, 0x00, 0x00, 0x01, 0x76, 0x3B, 0x00, 0x00, +/* 00000950 */ 0x00, 0x84, 0x3B, 0x00, 0x00, 0x01, 0x90, 0x3B, 0x00, 0x00, 0x01, 0x9E, 0x3B, 0x00, 0x00, 0x01, +/* 00000960 */ 0xBA, 0x3B, 0x00, 0x00, 0x00, 0xE8, 0x3B, 0x00, 0x00, 0x00, 0x34, 0x3C, 0x00, 0x00, 0x00, 0x88, +/* 00000970 */ 0x3C, 0x00, 0x00, 0x00, 0xE0, 0x3C, 0x00, 0x00, 0x00, 0x1C, 0x3D, 0x00, 0x00, 0x01, 0x2E, 0x3D, +/* 00000980 */ 0x00, 0x00, 0x01, 0x60, 0x3D, 0x00, 0x00, 0x01, 0x90, 0x3D, 0x00, 0x00, 0x00, 0x9A, 0x3D, 0x00, +/* 00000990 */ 0x00, 0x00, 0xEC, 0x3D, 0x00, 0x00, 0x00, 0x0A, 0x3E, 0x00, 0x00, 0x00, 0x42, 0x3E, 0x00, 0x00, +/* 000009A0 */ 0x00, 0x50, 0x3E, 0x00, 0x00, 0x00, 0x80, 0x3E, 0x00, 0x00, 0x00, 0x84, 0x3E, 0x00, 0x00, 0x00, +/* 000009B0 */ 0x88, 0x3E, 0x00, 0x00, 0x01, 0xAE, 0x3E, 0x00, 0x00, 0x01, 0xBE, 0x3E, 0x00, 0x00, 0x01, 0xDA, +/* 000009C0 */ 0x3E, 0x00, 0x00, 0x01, 0x02, 0x3F, 0x00, 0x00, 0x01, 0x1A, 0x3F, 0x00, 0x00, 0x01, 0x2E, 0x3F, +/* 000009D0 */ 0x00, 0x00, 0x00, 0x40, 0x3F, 0x00, 0x00, 0x00, 0x4A, 0x3F, 0x00, 0x00, 0x01, 0x6A, 0x3F, 0x00, +/* 000009E0 */ 0x00, 0x00, 0xB8, 0x3F, 0x00, 0x00, 0x00, 0xBE, 0x3F, 0x00, 0x00, 0x01, 0xF0, 0x3F, 0x00, 0x00, +/* 000009F0 */ 0x01, 0x14, 0x40, 0x00, 0x00, 0x00, 0x24, 0x40, 0x00, 0x00, 0x01, 0x42, 0x40, 0x00, 0x00, 0x00, +/* 00000A00 */ 0x50, 0x40, 0x00, 0x00, 0x01, 0x6C, 0x40, 0x00, 0x00, 0x00, 0x7C, 0x40, 0x00, 0x00, 0x01, 0x9E, +/* 00000A10 */ 0x40, 0x00, 0x00, 0x00, 0xB0, 0x40, 0x00, 0x00, 0x01, 0xCE, 0x40, 0x00, 0x00, 0x00, 0xDC, 0x40, +/* 00000A20 */ 0x00, 0x00, 0x01, 0xFA, 0x40, 0x00, 0x00, 0x00, 0x08, 0x41, 0x00, 0x00, 0x01, 0x2A, 0x41, 0x00, +/* 00000A30 */ 0x00, 0x00, 0x46, 0x41, 0x00, 0x00, 0x01, 0x60, 0x41, 0x00, 0x00, 0x00, 0x6A, 0x41, 0x00, 0x00, +/* 00000A40 */ 0x01, 0x88, 0x41, 0x00, 0x00, 0x00, 0x96, 0x41, 0x00, 0x00, 0x01, 0xD0, 0x41, 0x00, 0x00, 0x01, +/* 00000A50 */ 0xFC, 0x41, 0x00, 0x00, 0x01, 0x38, 0x42, 0x00, 0x00, 0x01, 0x86, 0x42, 0x00, 0x00, 0x01, 0xB0, +/* 00000A60 */ 0x42, 0x00, 0x00, 0x01, 0xC2, 0x42, 0x00, 0x00, 0x00, 0xEE, 0x42, 0x00, 0x00, 0x00, 0x0C, 0x43, +/* 00000A70 */ 0x00, 0x00, 0x00, 0x2E, 0x43, 0x00, 0x00, 0x00, 0x42, 0x43, 0x00, 0x00, 0x00, 0x5E, 0x43, 0x00, +/* 00000A80 */ 0x00, 0x00, 0x82, 0x43, 0x00, 0x00, 0x00, 0x98, 0x43, 0x00, 0x00, 0x00, 0xC2, 0x43, 0x00, 0x00, +/* 00000A90 */ 0x00, 0xDE, 0x43, 0x00, 0x00, 0x00, 0xE4, 0x43, 0x00, 0x00, 0x00, 0x30, 0x44, 0x00, 0x00, 0x00, +/* 00000AA0 */ 0xFA, 0x44, 0x00, 0x00, 0x00, 0x10, 0x45, 0x00, 0x00, 0x00, 0x56, 0x45, 0x00, 0x00, 0x00, 0x60, +/* 00000AB0 */ 0x45, 0x00, 0x00, 0x00, 0x64, 0x45, 0x00, 0x00, 0x00, 0x68, 0x45, 0x00, 0x00, 0x00, 0x6C, 0x45, +/* 00000AC0 */ 0x00, 0x00, 0x00, 0x84, 0x45, 0x00, 0x00, 0x00, 0xA2, 0x45, 0x00, 0x00, 0x00, 0xEE, 0x45, 0x00, +/* 00000AD0 */ 0x00, 0x00, 0xCE, 0x46, 0x00, 0x00, 0x00, 0xE8, 0x46, 0x00, 0x00, 0x00, 0xF8, 0x46, 0x00, 0x00, +/* 00000AE0 */ 0x00, 0x0C, 0x47, 0x00, 0x00, 0x00, 0x20, 0x47, 0x00, 0x00, 0x00, 0xA2, 0x47, 0x00, 0x00, 0x00, +/* 00000AF0 */ 0xCE, 0x47, 0x00, 0x00, 0x00, 0xE6, 0x47, 0x00, 0x00, 0x00, 0xF8, 0x47, 0x00, 0x00, 0x00, 0x32, +/* 00000B00 */ 0x48, 0x00, 0x00, 0x00, 0x4A, 0x48, 0x00, 0x00, 0x00, 0x62, 0x48, 0x00, 0x00, 0x00, 0x6C, 0x48, +/* 00000B10 */ 0x00, 0x00, 0x01, 0x76, 0x48, 0x00, 0x00, 0x00, 0xC8, 0x48, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, +/* 00000B20 */ 0x6C, 0x00, 0x6F, 0x00, 0x62, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x20, 0x00, 0x63, 0x00, 0x6F, 0x00, +/* 00000B30 */ 0x64, 0x00, 0x65, 0x00, 0x00, 0x00, 0x75, 0x00, 0x73, 0x00, 0x65, 0x00, 0x20, 0x00, 0x73, 0x00, +/* 00000B40 */ 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x63, 0x00, 0x74, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, +/* 00000B50 */ 0x74, 0x00, 0x6C, 0x00, 0x43, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x00, 0x00, +/* 00000B60 */ 0x73, 0x00, 0x65, 0x00, 0x74, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, +/* 00000B70 */ 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x00, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, +/* 00000B80 */ 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x4C, 0x00, 0x65, 0x00, 0x6E, 0x00, +/* 00000B90 */ 0x67, 0x00, 0x74, 0x00, 0x68, 0x00, 0x00, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x6C, 0x00, +/* 00000BA0 */ 0x49, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, +/* 00000BB0 */ 0x46, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x00, 0x00, 0x52, 0x00, 0x61, 0x00, 0x69, 0x00, +/* 00000BC0 */ 0x73, 0x00, 0x65, 0x00, 0x41, 0x00, 0x73, 0x00, 0x73, 0x00, 0x65, 0x00, 0x72, 0x00, 0x74, 0x00, +/* 00000BD0 */ 0x00, 0x00, 0x4F, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x47, 0x00, +/* 00000BE0 */ 0x65, 0x00, 0x74, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, +/* 00000BF0 */ 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x4F, 0x00, 0x62, 0x00, +/* 00000C00 */ 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x49, 0x00, 0x73, 0x00, 0x45, 0x00, 0x78, 0x00, +/* 00000C10 */ 0x74, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x69, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, +/* 00000C20 */ 0x00, 0x00, 0x4F, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x47, 0x00, +/* 00000C30 */ 0x65, 0x00, 0x74, 0x00, 0x4F, 0x00, 0x77, 0x00, 0x6E, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, +/* 00000C40 */ 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x74, 0x00, 0x79, 0x00, 0x4E, 0x00, 0x61, 0x00, 0x6D, 0x00, +/* 00000C50 */ 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x4F, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, +/* 00000C60 */ 0x74, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, +/* 00000C70 */ 0x65, 0x00, 0x48, 0x00, 0x61, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x77, 0x00, 0x6E, 0x00, 0x50, 0x00, +/* 00000C80 */ 0x72, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, +/* 00000C90 */ 0x5F, 0x00, 0x6F, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x44, 0x00, +/* 00000CA0 */ 0x65, 0x00, 0x66, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, +/* 00000CB0 */ 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x4F, 0x00, 0x62, 0x00, +/* 00000CC0 */ 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x44, 0x00, 0x65, 0x00, 0x66, 0x00, 0x69, 0x00, +/* 00000CD0 */ 0x6E, 0x00, 0x65, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, +/* 00000CE0 */ 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, +/* 00000CF0 */ 0x49, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, +/* 00000D00 */ 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x45, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x00, 0x00, +/* 00000D10 */ 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x73, 0x00, +/* 00000D20 */ 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x64, 0x00, +/* 00000D30 */ 0x65, 0x00, 0x78, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, +/* 00000D40 */ 0x61, 0x00, 0x79, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, +/* 00000D50 */ 0x63, 0x00, 0x65, 0x00, 0x4A, 0x00, 0x6F, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x46, 0x00, +/* 00000D60 */ 0x75, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x49, 0x00, +/* 00000D70 */ 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, 0x42, 0x00, +/* 00000D80 */ 0x69, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x00, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00000D90 */ 0x49, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, +/* 00000DA0 */ 0x47, 0x00, 0x65, 0x00, 0x74, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, +/* 00000DB0 */ 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x4E, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x00, 0x00, +/* 00000DC0 */ 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x49, 0x00, 0x6E, 0x00, +/* 00000DD0 */ 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, 0x52, 0x00, 0x65, 0x00, +/* 00000DE0 */ 0x70, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x63, 0x00, 0x65, 0x00, 0x00, 0x00, 0x53, 0x00, 0x74, 0x00, +/* 00000DF0 */ 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, +/* 00000E00 */ 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, +/* 00000E10 */ 0x77, 0x00, 0x65, 0x00, 0x72, 0x00, 0x43, 0x00, 0x61, 0x00, 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, +/* 00000E20 */ 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x49, 0x00, 0x6E, 0x00, +/* 00000E30 */ 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, 0x54, 0x00, 0x6F, 0x00, +/* 00000E40 */ 0x55, 0x00, 0x70, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x43, 0x00, 0x61, 0x00, 0x73, 0x00, +/* 00000E50 */ 0x65, 0x00, 0x00, 0x00, 0x74, 0x00, 0x68, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x45, 0x00, +/* 00000E60 */ 0x78, 0x00, 0x49, 0x00, 0x66, 0x00, 0x4F, 0x00, 0x4F, 0x00, 0x4D, 0x00, 0x4F, 0x00, 0x72, 0x00, +/* 00000E70 */ 0x53, 0x00, 0x4F, 0x00, 0x45, 0x00, 0x00, 0x00, 0x74, 0x00, 0x61, 0x00, 0x67, 0x00, 0x50, 0x00, +/* 00000E80 */ 0x75, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x63, 0x00, 0x46, 0x00, 0x75, 0x00, 0x6E, 0x00, +/* 00000E90 */ 0x63, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, +/* 00000EA0 */ 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x66, 0x00, +/* 00000EB0 */ 0x6F, 0x00, 0x72, 0x00, 0x45, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x49, 0x00, 0x66, 0x00, +/* 00000EC0 */ 0x50, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x00, 0x00, +/* 00000ED0 */ 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x45, 0x00, 0x78, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6E, 0x00, +/* 00000EE0 */ 0x73, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x53, 0x00, 0x75, 0x00, 0x62, 0x00, 0x74, 0x00, +/* 00000EF0 */ 0x61, 0x00, 0x67, 0x00, 0x73, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, +/* 00000F00 */ 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 00000F10 */ 0x65, 0x00, 0x48, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, +/* 00000F20 */ 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x4C, 0x00, +/* 00000F30 */ 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x73, 0x00, +/* 00000F40 */ 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x70, 0x00, 0x70, 0x00, 0x65, 0x00, 0x64, 0x00, 0x44, 0x00, +/* 00000F50 */ 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x4C, 0x00, 0x6F, 0x00, +/* 00000F60 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, +/* 00000F70 */ 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, +/* 00000F80 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x57, 0x00, +/* 00000F90 */ 0x72, 0x00, 0x61, 0x00, 0x70, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x63, 0x00, +/* 00000FA0 */ 0x61, 0x00, 0x6E, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 00000FB0 */ 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 00000FC0 */ 0x65, 0x00, 0x4C, 0x00, 0x69, 0x00, 0x73, 0x00, 0x74, 0x00, 0x57, 0x00, 0x72, 0x00, 0x61, 0x00, +/* 00000FD0 */ 0x70, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, +/* 00000FE0 */ 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x41, 0x00, 0x63, 0x00, 0x63, 0x00, 0x65, 0x00, +/* 00000FF0 */ 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, +/* 00001000 */ 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x56, 0x00, 0x61, 0x00, +/* 00001010 */ 0x6C, 0x00, 0x75, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, 0x76, 0x00, +/* 00001020 */ 0x65, 0x00, 0x72, 0x00, 0x73, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, +/* 00001030 */ 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x41, 0x00, 0x63, 0x00, 0x63, 0x00, 0x65, 0x00, 0x70, 0x00, +/* 00001040 */ 0x74, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, +/* 00001050 */ 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x56, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 00001060 */ 0x75, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x70, 0x00, 0x70, 0x00, +/* 00001070 */ 0x65, 0x00, 0x64, 0x00, 0x44, 0x00, 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, +/* 00001080 */ 0x74, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, +/* 00001090 */ 0x49, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x54, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, +/* 000010A0 */ 0x00, 0x00, 0x69, 0x00, 0x73, 0x00, 0x50, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x66, 0x00, +/* 000010B0 */ 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x55, 0x00, 0x73, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, +/* 000010C0 */ 0x49, 0x00, 0x43, 0x00, 0x55, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x4F, 0x00, 0x54, 0x00, 0x5F, 0x00, +/* 000010D0 */ 0x46, 0x00, 0x4F, 0x00, 0x55, 0x00, 0x4E, 0x00, 0x44, 0x00, 0x00, 0x00, 0x62, 0x00, 0x61, 0x00, +/* 000010E0 */ 0x72, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x61, 0x00, 0x62, 0x00, 0x73, 0x00, +/* 000010F0 */ 0x00, 0x00, 0x66, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6D, 0x00, +/* 00001100 */ 0x61, 0x00, 0x78, 0x00, 0x00, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x00, 0x00, 0x74, 0x00, +/* 00001110 */ 0x6F, 0x00, 0x55, 0x00, 0x70, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x43, 0x00, 0x61, 0x00, +/* 00001120 */ 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x77, 0x00, +/* 00001130 */ 0x65, 0x00, 0x72, 0x00, 0x43, 0x00, 0x61, 0x00, 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, 0x72, 0x00, +/* 00001140 */ 0x65, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x63, 0x00, 0x65, 0x00, 0x00, 0x00, 0x73, 0x00, +/* 00001150 */ 0x70, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x74, 0x00, 0x00, 0x00, 0x73, 0x00, 0x75, 0x00, 0x62, 0x00, +/* 00001160 */ 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, 0x73, 0x00, +/* 00001170 */ 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x64, 0x00, +/* 00001180 */ 0x65, 0x00, 0x78, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 00001190 */ 0x63, 0x00, 0x68, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, 0x70, 0x00, 0x65, 0x00, 0x61, 0x00, +/* 000011A0 */ 0x74, 0x00, 0x00, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x45, 0x00, 0x61, 0x00, 0x63, 0x00, +/* 000011B0 */ 0x68, 0x00, 0x00, 0x00, 0x6A, 0x00, 0x6F, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x61, 0x00, +/* 000011C0 */ 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x65, 0x00, +/* 000011D0 */ 0x78, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x70, 0x00, 0x00, 0x00, +/* 000011E0 */ 0x72, 0x00, 0x65, 0x00, 0x64, 0x00, 0x75, 0x00, 0x63, 0x00, 0x65, 0x00, 0x00, 0x00, 0x73, 0x00, +/* 000011F0 */ 0x6C, 0x00, 0x69, 0x00, 0x63, 0x00, 0x65, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, +/* 00001200 */ 0x63, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x66, 0x00, 0x69, 0x00, 0x6C, 0x00, 0x74, 0x00, +/* 00001210 */ 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x71, 0x00, 0x75, 0x00, +/* 00001220 */ 0x65, 0x00, 0x00, 0x00, 0x6B, 0x00, 0x65, 0x00, 0x79, 0x00, 0x73, 0x00, 0x00, 0x00, 0x68, 0x00, +/* 00001230 */ 0x61, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x77, 0x00, 0x6E, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, +/* 00001240 */ 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x64, 0x00, 0x65, 0x00, +/* 00001250 */ 0x66, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x70, 0x00, +/* 00001260 */ 0x65, 0x00, 0x72, 0x00, 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x69, 0x00, 0x73, 0x00, 0x45, 0x00, +/* 00001270 */ 0x78, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x69, 0x00, 0x62, 0x00, 0x6C, 0x00, +/* 00001280 */ 0x65, 0x00, 0x00, 0x00, 0x63, 0x00, 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00001290 */ 0x00, 0x00, 0x73, 0x00, 0x65, 0x00, 0x74, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, +/* 000012A0 */ 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, +/* 000012B0 */ 0x69, 0x00, 0x73, 0x00, 0x46, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 000012C0 */ 0x00, 0x00, 0x69, 0x00, 0x73, 0x00, 0x4E, 0x00, 0x61, 0x00, 0x4E, 0x00, 0x00, 0x00, 0x67, 0x00, +/* 000012D0 */ 0x65, 0x00, 0x74, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, 0x62, 0x00, +/* 000012E0 */ 0x69, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x00, 0x00, 0x61, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6C, 0x00, +/* 000012F0 */ 0x79, 0x00, 0x00, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x4F, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, +/* 00001300 */ 0x63, 0x00, 0x74, 0x00, 0x00, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, +/* 00001310 */ 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x4E, 0x00, 0x75, 0x00, +/* 00001320 */ 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x4C, 0x00, +/* 00001330 */ 0x6F, 0x00, 0x67, 0x00, 0x69, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x42, 0x00, 0x6F, 0x00, +/* 00001340 */ 0x6F, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x54, 0x00, 0x6F, 0x00, +/* 00001350 */ 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x65, 0x00, 0x67, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, +/* 00001360 */ 0x54, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x74, 0x00, 0x68, 0x00, +/* 00001370 */ 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, +/* 00001380 */ 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x43, 0x00, 0x61, 0x00, +/* 00001390 */ 0x6E, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x4C, 0x00, +/* 000013A0 */ 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x67, 0x00, +/* 000013B0 */ 0x65, 0x00, 0x74, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x69, 0x00, +/* 000013C0 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 000013D0 */ 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x76, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x65, 0x00, +/* 000013E0 */ 0x00, 0x00, 0x77, 0x00, 0x72, 0x00, 0x69, 0x00, 0x74, 0x00, 0x61, 0x00, 0x62, 0x00, 0x6C, 0x00, +/* 000013F0 */ 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x72, 0x00, +/* 00001400 */ 0x61, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, +/* 00001410 */ 0x66, 0x00, 0x69, 0x00, 0x67, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x62, 0x00, 0x6C, 0x00, +/* 00001420 */ 0x65, 0x00, 0x00, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 00001430 */ 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, +/* 00001440 */ 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, +/* 00001450 */ 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, +/* 00001460 */ 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x50, 0x00, +/* 00001470 */ 0x6C, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x52, 0x00, 0x75, 0x00, 0x6C, 0x00, +/* 00001480 */ 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x69, 0x00, 0x73, 0x00, 0x56, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 00001490 */ 0x69, 0x00, 0x64, 0x00, 0x00, 0x00, 0x56, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x64, 0x00, +/* 000014A0 */ 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x43, 0x00, 0x6F, 0x00, +/* 000014B0 */ 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x2E, 0x00, 0x73, 0x00, +/* 000014C0 */ 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, +/* 000014D0 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, +/* 000014E0 */ 0x66, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x4E, 0x00, +/* 000014F0 */ 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 00001500 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, +/* 00001510 */ 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, +/* 00001520 */ 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x49, 0x00, +/* 00001530 */ 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00001540 */ 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, +/* 00001550 */ 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, +/* 00001560 */ 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, +/* 00001570 */ 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x61, 0x00, +/* 00001580 */ 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, +/* 00001590 */ 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, +/* 000015A0 */ 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x65, 0x00, 0x73, 0x00, +/* 000015B0 */ 0x2D, 0x00, 0x45, 0x00, 0x53, 0x00, 0x00, 0x00, 0x74, 0x00, 0x72, 0x00, 0x61, 0x00, 0x64, 0x00, +/* 000015C0 */ 0x00, 0x00, 0x74, 0x00, 0x72, 0x00, 0x61, 0x00, 0x64, 0x00, 0x6E, 0x00, 0x6C, 0x00, 0x00, 0x00, +/* 000015D0 */ 0x6C, 0x00, 0x76, 0x00, 0x2D, 0x00, 0x4C, 0x00, 0x56, 0x00, 0x00, 0x00, 0x64, 0x00, 0x65, 0x00, +/* 000015E0 */ 0x2D, 0x00, 0x44, 0x00, 0x45, 0x00, 0x00, 0x00, 0x70, 0x00, 0x68, 0x00, 0x6F, 0x00, 0x6E, 0x00, +/* 000015F0 */ 0x65, 0x00, 0x62, 0x00, 0x6B, 0x00, 0x00, 0x00, 0x70, 0x00, 0x68, 0x00, 0x6F, 0x00, 0x6E, 0x00, +/* 00001600 */ 0x65, 0x00, 0x62, 0x00, 0x00, 0x00, 0x6A, 0x00, 0x61, 0x00, 0x2D, 0x00, 0x4A, 0x00, 0x50, 0x00, +/* 00001610 */ 0x00, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x68, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x00, 0x00, +/* 00001620 */ 0x72, 0x00, 0x61, 0x00, 0x64, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x00, 0x00, 0x7A, 0x00, +/* 00001630 */ 0x68, 0x00, 0x2D, 0x00, 0x54, 0x00, 0x57, 0x00, 0x00, 0x00, 0x70, 0x00, 0x68, 0x00, 0x6F, 0x00, +/* 00001640 */ 0x6E, 0x00, 0x65, 0x00, 0x74, 0x00, 0x69, 0x00, 0x63, 0x00, 0x00, 0x00, 0x70, 0x00, 0x72, 0x00, +/* 00001650 */ 0x6F, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, +/* 00001660 */ 0x6F, 0x00, 0x6B, 0x00, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7A, 0x00, 0x68, 0x00, 0x2D, 0x00, +/* 00001670 */ 0x48, 0x00, 0x4B, 0x00, 0x00, 0x00, 0x7A, 0x00, 0x68, 0x00, 0x2D, 0x00, 0x4D, 0x00, 0x4F, 0x00, +/* 00001680 */ 0x00, 0x00, 0x7A, 0x00, 0x68, 0x00, 0x2D, 0x00, 0x43, 0x00, 0x4E, 0x00, 0x00, 0x00, 0x70, 0x00, +/* 00001690 */ 0x69, 0x00, 0x6E, 0x00, 0x79, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x7A, 0x00, 0x68, 0x00, +/* 000016A0 */ 0x2D, 0x00, 0x53, 0x00, 0x47, 0x00, 0x00, 0x00, 0x75, 0x00, 0x73, 0x00, 0x65, 0x00, 0x43, 0x00, +/* 000016B0 */ 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, +/* 000016C0 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x6F, 0x00, 0x6B, 0x00, +/* 000016D0 */ 0x75, 0x00, 0x70, 0x00, 0x43, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x00, 0x00, +/* 000016E0 */ 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x42, 0x00, 0x65, 0x00, +/* 000016F0 */ 0x73, 0x00, 0x74, 0x00, 0x46, 0x00, 0x69, 0x00, 0x74, 0x00, 0x43, 0x00, 0x61, 0x00, 0x63, 0x00, +/* 00001700 */ 0x68, 0x00, 0x65, 0x00, 0x00, 0x00, 0x47, 0x00, 0x65, 0x00, 0x74, 0x00, 0x4F, 0x00, 0x70, 0x00, +/* 00001710 */ 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x69, 0x00, +/* 00001720 */ 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x43, 0x00, +/* 00001730 */ 0x75, 0x00, 0x72, 0x00, 0x72, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x79, 0x00, 0x52, 0x00, +/* 00001740 */ 0x65, 0x00, 0x67, 0x00, 0x45, 0x00, 0x78, 0x00, 0x70, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, +/* 00001750 */ 0x64, 0x00, 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x4C, 0x00, +/* 00001760 */ 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x47, 0x00, 0x65, 0x00, +/* 00001770 */ 0x74, 0x00, 0x44, 0x00, 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x74, 0x00, +/* 00001780 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x63, 0x00, +/* 00001790 */ 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x50, 0x00, 0x75, 0x00, 0x62, 0x00, +/* 000017A0 */ 0x6C, 0x00, 0x69, 0x00, 0x63, 0x00, 0x4D, 0x00, 0x65, 0x00, 0x74, 0x00, 0x68, 0x00, 0x6F, 0x00, +/* 000017B0 */ 0x64, 0x00, 0x00, 0x00, 0x4F, 0x00, 0x72, 0x00, 0x64, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x61, 0x00, +/* 000017C0 */ 0x72, 0x00, 0x79, 0x00, 0x43, 0x00, 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 000017D0 */ 0x46, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, +/* 000017E0 */ 0x74, 0x00, 0x72, 0x00, 0x75, 0x00, 0x63, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, +/* 000017F0 */ 0x42, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x41, 0x00, 0x76, 0x00, 0x61, 0x00, 0x69, 0x00, +/* 00001800 */ 0x6C, 0x00, 0x61, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, +/* 00001810 */ 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x6F, 0x00, 0x6B, 0x00, +/* 00001820 */ 0x75, 0x00, 0x70, 0x00, 0x4D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, +/* 00001830 */ 0x72, 0x00, 0x00, 0x00, 0x42, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x46, 0x00, 0x69, 0x00, +/* 00001840 */ 0x74, 0x00, 0x4D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x72, 0x00, +/* 00001850 */ 0x00, 0x00, 0x55, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x64, 0x00, 0x65, 0x00, +/* 00001860 */ 0x45, 0x00, 0x78, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x69, 0x00, 0x6F, 0x00, +/* 00001870 */ 0x6E, 0x00, 0x56, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x65, 0x00, 0x00, 0x00, 0x52, 0x00, +/* 00001880 */ 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, +/* 00001890 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x47, 0x00, 0x65, 0x00, 0x74, 0x00, +/* 000018A0 */ 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x4F, 0x00, 0x70, 0x00, +/* 000018B0 */ 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x43, 0x00, 0x55, 0x00, 0x52, 0x00, +/* 000018C0 */ 0x52, 0x00, 0x45, 0x00, 0x4E, 0x00, 0x43, 0x00, 0x59, 0x00, 0x5F, 0x00, 0x43, 0x00, 0x4F, 0x00, +/* 000018D0 */ 0x44, 0x00, 0x45, 0x00, 0x5F, 0x00, 0x52, 0x00, 0x45, 0x00, 0x00, 0x00, 0x70, 0x00, 0x61, 0x00, +/* 000018E0 */ 0x72, 0x00, 0x73, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x74, 0x00, +/* 000018F0 */ 0x61, 0x00, 0x67, 0x00, 0x00, 0x00, 0x49, 0x00, 0x73, 0x00, 0x57, 0x00, 0x65, 0x00, 0x6C, 0x00, +/* 00001900 */ 0x6C, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x64, 0x00, 0x43, 0x00, +/* 00001910 */ 0x75, 0x00, 0x72, 0x00, 0x72, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x79, 0x00, 0x43, 0x00, +/* 00001920 */ 0x6F, 0x00, 0x64, 0x00, 0x65, 0x00, 0x00, 0x00, 0x49, 0x00, 0x73, 0x00, 0x53, 0x00, 0x74, 0x00, +/* 00001930 */ 0x72, 0x00, 0x75, 0x00, 0x63, 0x00, 0x74, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 00001940 */ 0x6C, 0x00, 0x79, 0x00, 0x56, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x64, 0x00, 0x4C, 0x00, +/* 00001950 */ 0x61, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x75, 0x00, 0x61, 0x00, 0x67, 0x00, 0x65, 0x00, 0x54, 0x00, +/* 00001960 */ 0x61, 0x00, 0x67, 0x00, 0x00, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x6F, 0x00, 0x6E, 0x00, +/* 00001970 */ 0x69, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x4C, 0x00, +/* 00001980 */ 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x69, 0x00, 0x73, 0x00, +/* 00001990 */ 0x74, 0x00, 0x00, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x6F, 0x00, 0x6B, 0x00, 0x75, 0x00, 0x70, 0x00, +/* 000019A0 */ 0x53, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 000019B0 */ 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, +/* 000019C0 */ 0x00, 0x00, 0x42, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x46, 0x00, 0x69, 0x00, 0x74, 0x00, +/* 000019D0 */ 0x53, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 000019E0 */ 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, +/* 000019F0 */ 0x00, 0x00, 0x53, 0x00, 0x65, 0x00, 0x74, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, +/* 00001A00 */ 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 00001A10 */ 0x44, 0x00, 0x69, 0x00, 0x67, 0x00, 0x69, 0x00, 0x74, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, +/* 00001A20 */ 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x00, 0x00, 0x53, 0x00, 0x75, 0x00, 0x70, 0x00, +/* 00001A30 */ 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, +/* 00001A40 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x63, 0x00, 0x72, 0x00, +/* 00001A50 */ 0x65, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x52, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, +/* 00001A60 */ 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, +/* 00001A70 */ 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, +/* 00001A80 */ 0x69, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x61, 0x00, +/* 00001A90 */ 0x6E, 0x00, 0x67, 0x00, 0x54, 0x00, 0x61, 0x00, 0x67, 0x00, 0x52, 0x00, 0x45, 0x00, 0x73, 0x00, +/* 00001AA0 */ 0x00, 0x00, 0x43, 0x00, 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x44, 0x00, +/* 00001AB0 */ 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, +/* 00001AC0 */ 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x49, 0x00, 0x73, 0x00, +/* 00001AD0 */ 0x57, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, +/* 00001AE0 */ 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x75, 0x00, 0x61, 0x00, +/* 00001AF0 */ 0x67, 0x00, 0x65, 0x00, 0x54, 0x00, 0x61, 0x00, 0x67, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, +/* 00001B00 */ 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x70, 0x00, 0x70, 0x00, 0x65, 0x00, 0x64, 0x00, +/* 00001B10 */ 0x44, 0x00, 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x4C, 0x00, +/* 00001B20 */ 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x4C, 0x00, 0x41, 0x00, +/* 00001B30 */ 0x4E, 0x00, 0x47, 0x00, 0x5F, 0x00, 0x54, 0x00, 0x41, 0x00, 0x47, 0x00, 0x5F, 0x00, 0x42, 0x00, +/* 00001B40 */ 0x41, 0x00, 0x53, 0x00, 0x45, 0x00, 0x5F, 0x00, 0x52, 0x00, 0x45, 0x00, 0x00, 0x00, 0x4C, 0x00, +/* 00001B50 */ 0x41, 0x00, 0x4E, 0x00, 0x47, 0x00, 0x5F, 0x00, 0x54, 0x00, 0x41, 0x00, 0x47, 0x00, 0x5F, 0x00, +/* 00001B60 */ 0x45, 0x00, 0x58, 0x00, 0x54, 0x00, 0x5F, 0x00, 0x52, 0x00, 0x45, 0x00, 0x00, 0x00, 0x4C, 0x00, +/* 00001B70 */ 0x41, 0x00, 0x4E, 0x00, 0x47, 0x00, 0x5F, 0x00, 0x54, 0x00, 0x41, 0x00, 0x47, 0x00, 0x5F, 0x00, +/* 00001B80 */ 0x52, 0x00, 0x45, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, +/* 00001B90 */ 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x5F, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, +/* 00001BA0 */ 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, +/* 00001BB0 */ 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x5F, 0x00, 0x6E, 0x00, +/* 00001BC0 */ 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, +/* 00001BD0 */ 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x5F, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, +/* 00001BE0 */ 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, +/* 00001BF0 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, +/* 00001C00 */ 0x6E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, +/* 00001C10 */ 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x5F, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, +/* 00001C20 */ 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, +/* 00001C30 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x5F, 0x00, +/* 00001C40 */ 0x6E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x6D, 0x00, +/* 00001C50 */ 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, +/* 00001C60 */ 0x74, 0x00, 0x5F, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 00001C70 */ 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 00001C80 */ 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 00001C90 */ 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 00001CA0 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x5F, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, +/* 00001CB0 */ 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, +/* 00001CC0 */ 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x5F, 0x00, 0x6E, 0x00, +/* 00001CD0 */ 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00001CE0 */ 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, +/* 00001CF0 */ 0x61, 0x00, 0x74, 0x00, 0x5F, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, +/* 00001D00 */ 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, +/* 00001D10 */ 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x67, 0x00, 0x65, 0x00, +/* 00001D20 */ 0x74, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x63, 0x00, +/* 00001D30 */ 0x61, 0x00, 0x6C, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, +/* 00001D40 */ 0x73, 0x00, 0x5F, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5F, 0x00, +/* 00001D50 */ 0x5F, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x70, 0x00, 0x70, 0x00, 0x65, 0x00, 0x64, 0x00, 0x44, 0x00, +/* 00001D60 */ 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x4C, 0x00, 0x6F, 0x00, +/* 00001D70 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x5F, 0x00, +/* 00001D80 */ 0x63, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x00, 0x00, 0x67, 0x00, 0x65, 0x00, +/* 00001D90 */ 0x74, 0x00, 0x00, 0x00, 0x73, 0x00, 0x65, 0x00, 0x74, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, +/* 00001DA0 */ 0x74, 0x00, 0x6F, 0x00, 0x55, 0x00, 0x70, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x43, 0x00, +/* 00001DB0 */ 0x61, 0x00, 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x74, 0x00, 0x6F, 0x00, +/* 00001DC0 */ 0x4C, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x65, 0x00, 0x72, 0x00, 0x43, 0x00, 0x61, 0x00, 0x73, 0x00, +/* 00001DD0 */ 0x65, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x72, 0x00, 0x65, 0x00, 0x70, 0x00, 0x6C, 0x00, +/* 00001DE0 */ 0x61, 0x00, 0x63, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x70, 0x00, +/* 00001DF0 */ 0x6C, 0x00, 0x69, 0x00, 0x74, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x75, 0x00, +/* 00001E00 */ 0x62, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, +/* 00001E10 */ 0x5F, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, +/* 00001E20 */ 0x49, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x65, 0x00, 0x78, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, +/* 00001E30 */ 0x5F, 0x00, 0x2E, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x63, 0x00, 0x68, 0x00, 0x00, 0x00, +/* 00001E40 */ 0x5F, 0x00, 0x2E, 0x00, 0x72, 0x00, 0x65, 0x00, 0x70, 0x00, 0x65, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 00001E50 */ 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x45, 0x00, 0x61, 0x00, +/* 00001E60 */ 0x63, 0x00, 0x68, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x6A, 0x00, 0x6F, 0x00, 0x69, 0x00, +/* 00001E70 */ 0x6E, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x61, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, +/* 00001E80 */ 0x79, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x65, 0x00, 0x78, 0x00, 0x4F, 0x00, 0x66, 0x00, +/* 00001E90 */ 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x70, 0x00, 0x00, 0x00, 0x5F, 0x00, +/* 00001EA0 */ 0x2E, 0x00, 0x72, 0x00, 0x65, 0x00, 0x64, 0x00, 0x75, 0x00, 0x63, 0x00, 0x65, 0x00, 0x00, 0x00, +/* 00001EB0 */ 0x5F, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x63, 0x00, 0x65, 0x00, 0x00, 0x00, +/* 00001EC0 */ 0x5F, 0x00, 0x2E, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 00001ED0 */ 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x69, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00001EE0 */ 0x72, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x71, 0x00, +/* 00001EF0 */ 0x75, 0x00, 0x65, 0x00, 0x00, 0x00, 0x61, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, +/* 00001F00 */ 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x68, 0x00, 0x61, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x77, 0x00, +/* 00001F10 */ 0x6E, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x74, 0x00, +/* 00001F20 */ 0x79, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x64, 0x00, 0x65, 0x00, 0x66, 0x00, 0x69, 0x00, +/* 00001F30 */ 0x6E, 0x00, 0x65, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, +/* 00001F40 */ 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x63, 0x00, 0x72, 0x00, 0x65, 0x00, +/* 00001F50 */ 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x65, 0x00, +/* 00001F60 */ 0x74, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, +/* 00001F70 */ 0x70, 0x00, 0x65, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x66, 0x00, +/* 00001F80 */ 0x6C, 0x00, 0x6F, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x67, 0x00, +/* 00001F90 */ 0x65, 0x00, 0x74, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5F, 0x00, +/* 00001FA0 */ 0x2E, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, +/* 00001FB0 */ 0x61, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x79, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6E, 0x00, +/* 00001FC0 */ 0x00, 0x00, 0x6F, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x00, 0x00, +/* 00001FD0 */ 0x2D, 0x00, 0x00, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x64, 0x00, +/* 00001FE0 */ 0x65, 0x00, 0x45, 0x00, 0x78, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x69, 0x00, +/* 00001FF0 */ 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x65, 0x00, 0x78, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6E, 0x00, +/* 00002000 */ 0x73, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, 0x66, 0x00, +/* 00002010 */ 0x6F, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, +/* 00002020 */ 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x75, 0x00, 0x6C, 0x00, +/* 00002030 */ 0x74, 0x00, 0x00, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 00002040 */ 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x45, 0x00, 0x78, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6E, 0x00, +/* 00002050 */ 0x73, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x6F, 0x00, +/* 00002060 */ 0x6B, 0x00, 0x75, 0x00, 0x70, 0x00, 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, 0x61, 0x00, +/* 00002070 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x2D, 0x00, +/* 00002080 */ 0x75, 0x00, 0x00, 0x00, 0x2D, 0x00, 0x78, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, +/* 00002090 */ 0x6F, 0x00, 0x6B, 0x00, 0x75, 0x00, 0x70, 0x00, 0x4D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x63, 0x00, +/* 000020A0 */ 0x68, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x74, 0x00, 0x72, 0x00, 0x75, 0x00, 0x65, 0x00, +/* 000020B0 */ 0x00, 0x00, 0x62, 0x00, 0x6F, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x61, 0x00, 0x6E, 0x00, +/* 000020C0 */ 0x00, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, +/* 000020D0 */ 0x6E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x5B, 0x00, +/* 000020E0 */ 0x27, 0x00, 0x00, 0x00, 0x27, 0x00, 0x5D, 0x00, 0x00, 0x00, 0x27, 0x00, 0x2C, 0x00, 0x20, 0x00, +/* 000020F0 */ 0x27, 0x00, 0x00, 0x00, 0x5B, 0x00, 0x00, 0x00, 0x20, 0x00, 0x2D, 0x00, 0x20, 0x00, 0x00, 0x00, +/* 00002100 */ 0x5D, 0x00, 0x00, 0x00, 0x5E, 0x00, 0x5B, 0x00, 0x41, 0x00, 0x2D, 0x00, 0x5A, 0x00, 0x5D, 0x00, +/* 00002110 */ 0x7B, 0x00, 0x33, 0x00, 0x7D, 0x00, 0x24, 0x00, 0x00, 0x00, 0x70, 0x00, 0x61, 0x00, 0x72, 0x00, +/* 00002120 */ 0x73, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x74, 0x00, +/* 00002130 */ 0x61, 0x00, 0x67, 0x00, 0x43, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x00, 0x00, +/* 00002140 */ 0x5B, 0x00, 0x41, 0x00, 0x2D, 0x00, 0x5A, 0x00, 0x5D, 0x00, 0x00, 0x00, 0x5B, 0x00, 0x30, 0x00, +/* 00002150 */ 0x2D, 0x00, 0x39, 0x00, 0x5D, 0x00, 0x00, 0x00, 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x00, 0x00, +/* 00002160 */ 0x7C, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x28, 0x00, 0x3F, 0x00, +/* 00002170 */ 0x3A, 0x00, 0x61, 0x00, 0x72, 0x00, 0x74, 0x00, 0x2D, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x6A, 0x00, +/* 00002180 */ 0x62, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x7C, 0x00, 0x63, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x2D, 0x00, +/* 00002190 */ 0x67, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x7C, 0x00, +/* 000021A0 */ 0x6E, 0x00, 0x6F, 0x00, 0x2D, 0x00, 0x62, 0x00, 0x6F, 0x00, 0x6B, 0x00, 0x7C, 0x00, 0x6E, 0x00, +/* 000021B0 */ 0x6F, 0x00, 0x2D, 0x00, 0x6E, 0x00, 0x79, 0x00, 0x6E, 0x00, 0x7C, 0x00, 0x7A, 0x00, 0x68, 0x00, +/* 000021C0 */ 0x2D, 0x00, 0x67, 0x00, 0x75, 0x00, 0x6F, 0x00, 0x79, 0x00, 0x75, 0x00, 0x7C, 0x00, 0x7A, 0x00, +/* 000021D0 */ 0x68, 0x00, 0x2D, 0x00, 0x68, 0x00, 0x61, 0x00, 0x6B, 0x00, 0x6B, 0x00, 0x61, 0x00, 0x7C, 0x00, +/* 000021E0 */ 0x7A, 0x00, 0x68, 0x00, 0x2D, 0x00, 0x6D, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x7C, 0x00, 0x7A, 0x00, +/* 000021F0 */ 0x68, 0x00, 0x2D, 0x00, 0x6D, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x2D, 0x00, 0x6E, 0x00, 0x61, 0x00, +/* 00002200 */ 0x6E, 0x00, 0x7C, 0x00, 0x7A, 0x00, 0x68, 0x00, 0x2D, 0x00, 0x78, 0x00, 0x69, 0x00, 0x61, 0x00, +/* 00002210 */ 0x6E, 0x00, 0x67, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x62, 0x00, +/* 00002220 */ 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x2D, 0x00, 0x47, 0x00, 0x42, 0x00, +/* 00002230 */ 0x2D, 0x00, 0x6F, 0x00, 0x65, 0x00, 0x64, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x61, 0x00, +/* 00002240 */ 0x6D, 0x00, 0x69, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x62, 0x00, 0x6E, 0x00, 0x6E, 0x00, +/* 00002250 */ 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x64, 0x00, 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, +/* 00002260 */ 0x6C, 0x00, 0x74, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x6F, 0x00, +/* 00002270 */ 0x63, 0x00, 0x68, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, +/* 00002280 */ 0x68, 0x00, 0x61, 0x00, 0x6B, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x6B, 0x00, 0x6C, 0x00, +/* 00002290 */ 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, +/* 000022A0 */ 0x6C, 0x00, 0x75, 0x00, 0x78, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x6D, 0x00, 0x69, 0x00, +/* 000022B0 */ 0x6E, 0x00, 0x67, 0x00, 0x6F, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x6E, 0x00, +/* 000022C0 */ 0x61, 0x00, 0x76, 0x00, 0x61, 0x00, 0x6A, 0x00, 0x6F, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, +/* 000022D0 */ 0x70, 0x00, 0x77, 0x00, 0x6E, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x74, 0x00, 0x61, 0x00, +/* 000022E0 */ 0x6F, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x74, 0x00, 0x61, 0x00, 0x79, 0x00, 0x7C, 0x00, +/* 000022F0 */ 0x69, 0x00, 0x2D, 0x00, 0x74, 0x00, 0x73, 0x00, 0x75, 0x00, 0x7C, 0x00, 0x73, 0x00, 0x67, 0x00, +/* 00002300 */ 0x6E, 0x00, 0x2D, 0x00, 0x42, 0x00, 0x45, 0x00, 0x2D, 0x00, 0x46, 0x00, 0x52, 0x00, 0x7C, 0x00, +/* 00002310 */ 0x73, 0x00, 0x67, 0x00, 0x6E, 0x00, 0x2D, 0x00, 0x42, 0x00, 0x45, 0x00, 0x2D, 0x00, 0x4E, 0x00, +/* 00002320 */ 0x4C, 0x00, 0x7C, 0x00, 0x73, 0x00, 0x67, 0x00, 0x6E, 0x00, 0x2D, 0x00, 0x43, 0x00, 0x48, 0x00, +/* 00002330 */ 0x2D, 0x00, 0x44, 0x00, 0x45, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x5C, 0x00, +/* 00002340 */ 0x62, 0x00, 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x00, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, +/* 00002350 */ 0x00, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x78, 0x00, 0x28, 0x00, +/* 00002360 */ 0x3F, 0x00, 0x3A, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x31, 0x00, 0x2C, 0x00, 0x38, 0x00, +/* 00002370 */ 0x7D, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x29, 0x00, 0x2B, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, +/* 00002380 */ 0x00, 0x00, 0x7C, 0x00, 0x5B, 0x00, 0x41, 0x00, 0x2D, 0x00, 0x57, 0x00, 0x59, 0x00, 0x2D, 0x00, +/* 00002390 */ 0x5A, 0x00, 0x5D, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x28, 0x00, 0x3F, 0x00, +/* 000023A0 */ 0x3A, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x32, 0x00, 0x2C, 0x00, 0x38, 0x00, 0x7D, 0x00, +/* 000023B0 */ 0x29, 0x00, 0x2B, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x35, 0x00, +/* 000023C0 */ 0x2C, 0x00, 0x38, 0x00, 0x7D, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x33, 0x00, 0x7D, 0x00, +/* 000023D0 */ 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x32, 0x00, 0x7D, 0x00, 0x7C, 0x00, +/* 000023E0 */ 0x00, 0x00, 0x7B, 0x00, 0x34, 0x00, 0x7D, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, +/* 000023F0 */ 0x7B, 0x00, 0x33, 0x00, 0x7D, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, +/* 00002400 */ 0x2D, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x33, 0x00, 0x7D, 0x00, 0x29, 0x00, 0x7B, 0x00, 0x30, 0x00, +/* 00002410 */ 0x2C, 0x00, 0x32, 0x00, 0x7D, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x7B, 0x00, +/* 00002420 */ 0x32, 0x00, 0x2C, 0x00, 0x33, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x28, 0x00, +/* 00002430 */ 0x3F, 0x00, 0x3A, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x7B, 0x00, +/* 00002440 */ 0x34, 0x00, 0x2C, 0x00, 0x38, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x28, 0x00, +/* 00002450 */ 0x00, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x2D, 0x00, 0x28, 0x00, +/* 00002460 */ 0x00, 0x00, 0x29, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x5C, 0x00, +/* 00002470 */ 0x62, 0x00, 0x28, 0x00, 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x29, 0x00, +/* 00002480 */ 0x2A, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x5C, 0x00, +/* 00002490 */ 0x62, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x5E, 0x00, 0x00, 0x00, 0x24, 0x00, +/* 000024A0 */ 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x6E, 0x00, +/* 000024B0 */ 0x67, 0x00, 0x75, 0x00, 0x61, 0x00, 0x67, 0x00, 0x65, 0x00, 0x00, 0x00, 0x73, 0x00, 0x63, 0x00, +/* 000024C0 */ 0x72, 0x00, 0x69, 0x00, 0x70, 0x00, 0x74, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, 0x67, 0x00, +/* 000024D0 */ 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x76, 0x00, 0x61, 0x00, 0x72, 0x00, 0x69, 0x00, +/* 000024E0 */ 0x61, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x65, 0x00, 0x78, 0x00, 0x74, 0x00, +/* 000024F0 */ 0x65, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x00, 0x00, +/* 00002500 */ 0x75, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x65, 0x00, 0x66, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x65, 0x00, +/* 00002510 */ 0x64, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, +/* 00002520 */ 0x00, 0x00, 0x69, 0x00, 0x73, 0x00, 0x41, 0x00, 0x76, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6C, 0x00, +/* 00002530 */ 0x61, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, +/* 00002540 */ 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x73, 0x00, 0x75, 0x00, 0x62, 0x00, 0x73, 0x00, 0x65, 0x00, +/* 00002550 */ 0x74, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x75, 0x00, +/* 00002560 */ 0x6D, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x65, 0x00, 0x67, 0x00, 0x65, 0x00, 0x72, 0x00, +/* 00002570 */ 0x44, 0x00, 0x69, 0x00, 0x67, 0x00, 0x69, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x6D, 0x00, +/* 00002580 */ 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x46, 0x00, 0x72, 0x00, +/* 00002590 */ 0x61, 0x00, 0x63, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x44, 0x00, 0x69, 0x00, +/* 000025A0 */ 0x67, 0x00, 0x69, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x78, 0x00, +/* 000025B0 */ 0x69, 0x00, 0x6D, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x46, 0x00, 0x72, 0x00, 0x61, 0x00, 0x63, 0x00, +/* 000025C0 */ 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x44, 0x00, 0x69, 0x00, 0x67, 0x00, 0x69, 0x00, +/* 000025D0 */ 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x6D, 0x00, +/* 000025E0 */ 0x75, 0x00, 0x6D, 0x00, 0x53, 0x00, 0x69, 0x00, 0x67, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x66, 0x00, +/* 000025F0 */ 0x69, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x44, 0x00, 0x69, 0x00, 0x67, 0x00, +/* 00002600 */ 0x69, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x78, 0x00, 0x69, 0x00, +/* 00002610 */ 0x6D, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x53, 0x00, 0x69, 0x00, 0x67, 0x00, 0x6E, 0x00, 0x69, 0x00, +/* 00002620 */ 0x66, 0x00, 0x69, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x44, 0x00, 0x69, 0x00, +/* 00002630 */ 0x67, 0x00, 0x69, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x62, 0x00, 0x65, 0x00, 0x73, 0x00, +/* 00002640 */ 0x74, 0x00, 0x20, 0x00, 0x66, 0x00, 0x69, 0x00, 0x74, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, +/* 00002650 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x4D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x63, 0x00, +/* 00002660 */ 0x68, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x67, 0x00, +/* 00002670 */ 0x74, 0x00, 0x68, 0x00, 0x00, 0x00, 0x68, 0x00, 0x69, 0x00, 0x64, 0x00, 0x64, 0x00, 0x65, 0x00, +/* 00002680 */ 0x6E, 0x00, 0x4F, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x00, 0x00, +/* 00002690 */ 0x66, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, +/* 000026A0 */ 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x64, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, +/* 000026B0 */ 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, +/* 000026C0 */ 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 000026D0 */ 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x43, 0x00, +/* 000026E0 */ 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00, 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, +/* 000026F0 */ 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x43, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, +/* 00002700 */ 0x00, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, +/* 00002710 */ 0x72, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, +/* 00002720 */ 0x70, 0x00, 0x65, 0x00, 0x00, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, +/* 00002730 */ 0x67, 0x00, 0x00, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, +/* 00002740 */ 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, +/* 00002750 */ 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 00002760 */ 0x65, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00, 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, +/* 00002770 */ 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x43, 0x00, 0x6F, 0x00, +/* 00002780 */ 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x49, 0x00, +/* 00002790 */ 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, +/* 000027A0 */ 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, +/* 000027B0 */ 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x63, 0x00, +/* 000027C0 */ 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00, 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, 0x00, 0x00, 0x70, 0x00, +/* 000027D0 */ 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, +/* 000027E0 */ 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x75, 0x00, +/* 000027F0 */ 0x63, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, +/* 00002800 */ 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, +/* 00002810 */ 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, +/* 00002820 */ 0x6C, 0x00, 0x2E, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 00002830 */ 0x6F, 0x00, 0x72, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, +/* 00002840 */ 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, +/* 00002850 */ 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, +/* 00002860 */ 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x00, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, +/* 00002870 */ 0x20, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00, 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, +/* 00002880 */ 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00, 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, +/* 00002890 */ 0x00, 0x00, 0x75, 0x00, 0x73, 0x00, 0x61, 0x00, 0x67, 0x00, 0x65, 0x00, 0x00, 0x00, 0x73, 0x00, +/* 000028A0 */ 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x00, 0x00, 0x73, 0x00, 0x65, 0x00, 0x61, 0x00, 0x72, 0x00, +/* 000028B0 */ 0x63, 0x00, 0x68, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x00, 0x00, 0x6B, 0x00, 0x6E, 0x00, +/* 000028C0 */ 0x00, 0x00, 0x6B, 0x00, 0x66, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x65, 0x00, +/* 000028D0 */ 0x72, 0x00, 0x69, 0x00, 0x63, 0x00, 0x00, 0x00, 0x63, 0x00, 0x61, 0x00, 0x73, 0x00, 0x65, 0x00, +/* 000028E0 */ 0x46, 0x00, 0x69, 0x00, 0x72, 0x00, 0x73, 0x00, 0x74, 0x00, 0x00, 0x00, 0x75, 0x00, 0x70, 0x00, +/* 000028F0 */ 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x65, 0x00, +/* 00002900 */ 0x72, 0x00, 0x00, 0x00, 0x66, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, +/* 00002910 */ 0x64, 0x00, 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x00, 0x00, +/* 00002920 */ 0x73, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x76, 0x00, +/* 00002930 */ 0x69, 0x00, 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x62, 0x00, 0x61, 0x00, 0x73, 0x00, 0x65, 0x00, +/* 00002940 */ 0x00, 0x00, 0x61, 0x00, 0x63, 0x00, 0x63, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x00, 0x00, +/* 00002950 */ 0x63, 0x00, 0x61, 0x00, 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, 0x76, 0x00, 0x61, 0x00, 0x72, 0x00, +/* 00002960 */ 0x69, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x00, 0x00, 0x69, 0x00, 0x67, 0x00, 0x6E, 0x00, +/* 00002970 */ 0x6F, 0x00, 0x72, 0x00, 0x65, 0x00, 0x50, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x74, 0x00, +/* 00002980 */ 0x75, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x6D, 0x00, +/* 00002990 */ 0x61, 0x00, 0x74, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x63, 0x00, +/* 000029A0 */ 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, +/* 000029B0 */ 0x00, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 000029C0 */ 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x64, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, +/* 000029D0 */ 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, +/* 000029E0 */ 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00, 0x61, 0x00, +/* 000029F0 */ 0x72, 0x00, 0x65, 0x00, 0x00, 0x00, 0x62, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x64, 0x00, +/* 00002A00 */ 0x43, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00, 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, 0x00, 0x00, +/* 00002A10 */ 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 00002A20 */ 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, +/* 00002A30 */ 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00, 0x61, 0x00, +/* 00002A40 */ 0x72, 0x00, 0x65, 0x00, 0x00, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, +/* 00002A50 */ 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, +/* 00002A60 */ 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x72, 0x00, 0x65, 0x00, +/* 00002A70 */ 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4F, 0x00, 0x70, 0x00, +/* 00002A80 */ 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, +/* 00002A90 */ 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, +/* 00002AA0 */ 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, +/* 00002AB0 */ 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, +/* 00002AC0 */ 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, +/* 00002AD0 */ 0x74, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, +/* 00002AE0 */ 0x70, 0x00, 0x65, 0x00, 0x00, 0x00, 0x55, 0x00, 0x6E, 0x00, 0x77, 0x00, 0x72, 0x00, 0x61, 0x00, +/* 00002AF0 */ 0x70, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, +/* 00002B00 */ 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x75, 0x00, +/* 00002B10 */ 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, +/* 00002B20 */ 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, +/* 00002B30 */ 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x74, 0x00, 0x6F, 0x00, +/* 00002B40 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, +/* 00002B50 */ 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, +/* 00002B60 */ 0x6C, 0x00, 0x2E, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, +/* 00002B70 */ 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x49, 0x00, +/* 00002B80 */ 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, +/* 00002B90 */ 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 00002BA0 */ 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, +/* 00002BB0 */ 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, +/* 00002BC0 */ 0x74, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x4E, 0x00, +/* 00002BD0 */ 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 00002BE0 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, +/* 00002BF0 */ 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x6F, 0x00, +/* 00002C00 */ 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x50, 0x00, 0x61, 0x00, +/* 00002C10 */ 0x72, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, +/* 00002C20 */ 0x2E, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, +/* 00002C30 */ 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, +/* 00002C40 */ 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, +/* 00002C50 */ 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x64, 0x00, +/* 00002C60 */ 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x00, 0x00, +/* 00002C70 */ 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x20, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, +/* 00002C80 */ 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, +/* 00002C90 */ 0x74, 0x00, 0x00, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 00002CA0 */ 0x54, 0x00, 0x6F, 0x00, 0x50, 0x00, 0x61, 0x00, 0x72, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, +/* 00002CB0 */ 0x6E, 0x00, 0x75, 0x00, 0x00, 0x00, 0x73, 0x00, 0x74, 0x00, 0x79, 0x00, 0x6C, 0x00, 0x65, 0x00, +/* 00002CC0 */ 0x00, 0x00, 0x64, 0x00, 0x65, 0x00, 0x63, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 00002CD0 */ 0x00, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x63, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, +/* 00002CE0 */ 0x00, 0x00, 0x63, 0x00, 0x75, 0x00, 0x72, 0x00, 0x72, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x63, 0x00, +/* 00002CF0 */ 0x79, 0x00, 0x00, 0x00, 0x63, 0x00, 0x75, 0x00, 0x72, 0x00, 0x72, 0x00, 0x65, 0x00, 0x6E, 0x00, +/* 00002D00 */ 0x63, 0x00, 0x79, 0x00, 0x44, 0x00, 0x69, 0x00, 0x73, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x61, 0x00, +/* 00002D10 */ 0x79, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x64, 0x00, 0x65, 0x00, 0x00, 0x00, 0x73, 0x00, +/* 00002D20 */ 0x79, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x75, 0x00, 0x73, 0x00, +/* 00002D30 */ 0x65, 0x00, 0x47, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x70, 0x00, 0x69, 0x00, 0x6E, 0x00, +/* 00002D40 */ 0x67, 0x00, 0x00, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, +/* 00002D50 */ 0x6C, 0x00, 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, +/* 00002D60 */ 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, +/* 00002D70 */ 0x74, 0x00, 0x00, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, +/* 00002D80 */ 0x6C, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, +/* 00002D90 */ 0x00, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, +/* 00002DA0 */ 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, +/* 00002DB0 */ 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, +/* 00002DC0 */ 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x4E, 0x00, +/* 00002DD0 */ 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 00002DE0 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, +/* 00002DF0 */ 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x6F, 0x00, +/* 00002E00 */ 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x50, 0x00, 0x61, 0x00, +/* 00002E10 */ 0x72, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, +/* 00002E20 */ 0x65, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x53, 0x00, 0x79, 0x00, 0x73, 0x00, +/* 00002E30 */ 0x74, 0x00, 0x65, 0x00, 0x6D, 0x00, 0x00, 0x00, 0x62, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x6E, 0x00, +/* 00002E40 */ 0x64, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, +/* 00002E50 */ 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, +/* 00002E60 */ 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, +/* 00002E70 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, +/* 00002E80 */ 0x6E, 0x00, 0x67, 0x00, 0x49, 0x00, 0x6D, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6D, 0x00, +/* 00002E90 */ 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, +/* 00002EA0 */ 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, +/* 00002EB0 */ 0x65, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x65, 0x00, +/* 00002EC0 */ 0x6E, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x50, 0x00, +/* 00002ED0 */ 0x61, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x46, 0x00, 0x6F, 0x00, +/* 00002EE0 */ 0x72, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, +/* 00002EF0 */ 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 00002F00 */ 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, +/* 00002F10 */ 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, +/* 00002F20 */ 0x74, 0x00, 0x00, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00002F30 */ 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, +/* 00002F40 */ 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x44, 0x00, 0x61, 0x00, +/* 00002F50 */ 0x74, 0x00, 0x65, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, +/* 00002F60 */ 0x63, 0x00, 0x65, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, +/* 00002F70 */ 0x6C, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, +/* 00002F80 */ 0x44, 0x00, 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x43, 0x00, +/* 00002F90 */ 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x00, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 00002FA0 */ 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 00002FB0 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, +/* 00002FC0 */ 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x00, 0x00, 0x55, 0x00, 0x6E, 0x00, 0x77, 0x00, +/* 00002FD0 */ 0x72, 0x00, 0x61, 0x00, 0x70, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, +/* 00002FE0 */ 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, +/* 00002FF0 */ 0x74, 0x00, 0x00, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6E, 0x00, +/* 00003000 */ 0x61, 0x00, 0x72, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x00, 0x00, 0x73, 0x00, 0x68, 0x00, +/* 00003010 */ 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x67, 0x00, +/* 00003020 */ 0x00, 0x00, 0x32, 0x00, 0x2D, 0x00, 0x64, 0x00, 0x69, 0x00, 0x67, 0x00, 0x69, 0x00, 0x74, 0x00, +/* 00003030 */ 0x00, 0x00, 0x77, 0x00, 0x65, 0x00, 0x65, 0x00, 0x6B, 0x00, 0x64, 0x00, 0x61, 0x00, 0x79, 0x00, +/* 00003040 */ 0x00, 0x00, 0x65, 0x00, 0x72, 0x00, 0x61, 0x00, 0x00, 0x00, 0x79, 0x00, 0x65, 0x00, 0x61, 0x00, +/* 00003050 */ 0x72, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x68, 0x00, 0x00, 0x00, +/* 00003060 */ 0x64, 0x00, 0x61, 0x00, 0x79, 0x00, 0x00, 0x00, 0x68, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x72, 0x00, +/* 00003070 */ 0x00, 0x00, 0x6D, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, +/* 00003080 */ 0x73, 0x00, 0x65, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x00, 0x00, 0x74, 0x00, +/* 00003090 */ 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x5A, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x4E, 0x00, +/* 000030A0 */ 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, +/* 000030B0 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 000030C0 */ 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, 0x74, 0x00, +/* 000030D0 */ 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x54, 0x00, +/* 000030E0 */ 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, +/* 000030F0 */ 0x67, 0x00, 0x00, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x70, 0x00, +/* 00003100 */ 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, +/* 00003110 */ 0x2E, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 00003120 */ 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, +/* 00003130 */ 0x61, 0x00, 0x6E, 0x00, 0x79, 0x00, 0x00, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x00, 0x00, +/* 00003140 */ 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, +/* 00003150 */ 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x74, 0x00, +/* 00003160 */ 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x44, 0x00, +/* 00003170 */ 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, +/* 00003180 */ 0x67, 0x00, 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, 0x44, 0x00, +/* 00003190 */ 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, +/* 000031A0 */ 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x74, 0x00, 0x6F, 0x00, +/* 000031B0 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, +/* 000031C0 */ 0x6D, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, +/* 000031D0 */ 0x00, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, +/* 000031E0 */ 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, +/* 000031F0 */ 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, +/* 00003200 */ 0x74, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x44, 0x00, +/* 00003210 */ 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, +/* 00003220 */ 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, +/* 00003230 */ 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, +/* 00003240 */ 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x49, 0x00, +/* 00003250 */ 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00003260 */ 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, +/* 00003270 */ 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, +/* 00003280 */ 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 00003290 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x50, 0x00, 0x61, 0x00, 0x72, 0x00, +/* 000032A0 */ 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, +/* 000032B0 */ 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, +/* 000032C0 */ 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, +/* 000032D0 */ 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, +/* 000032E0 */ 0x2E, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, +/* 000032F0 */ 0x64, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, +/* 00003300 */ 0x00, 0x00, 0x73, 0x00, 0x79, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x46, 0x00, +/* 00003310 */ 0x6F, 0x00, 0x72, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, +/* 00003320 */ 0x00, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x46, 0x00, +/* 00003330 */ 0x6F, 0x00, 0x72, 0x00, 0x53, 0x00, 0x79, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x6F, 0x00, 0x6C, 0x00, +/* 00003340 */ 0x00, 0x00, 0x73, 0x00, 0x79, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x4C, 0x00, +/* 00003350 */ 0x65, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x74, 0x00, 0x68, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 00003360 */ 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x6F, 0x00, +/* 00003370 */ 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 00003380 */ 0x53, 0x00, 0x79, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x4C, 0x00, 0x65, 0x00, +/* 00003390 */ 0x6E, 0x00, 0x67, 0x00, 0x74, 0x00, 0x68, 0x00, 0x00, 0x00, 0x70, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 000033A0 */ 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x48, 0x00, +/* 000033B0 */ 0x6F, 0x00, 0x75, 0x00, 0x72, 0x00, 0x43, 0x00, 0x79, 0x00, 0x63, 0x00, 0x6C, 0x00, 0x65, 0x00, +/* 000033C0 */ 0x00, 0x00, 0x68, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x72, 0x00, 0x43, 0x00, 0x79, 0x00, 0x63, 0x00, +/* 000033D0 */ 0x6C, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x50, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 000033E0 */ 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0x47, 0x00, +/* 000033F0 */ 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x4D, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x6A, 0x00, +/* 00003400 */ 0x00, 0x00, 0x68, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x72, 0x00, 0x31, 0x00, 0x32, 0x00, 0x00, 0x00, +/* 00003410 */ 0x68, 0x00, 0x00, 0x00, 0x68, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x72, 0x00, 0x32, 0x00, 0x34, 0x00, +/* 00003420 */ 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, 0x7A, 0x00, +/* 00003430 */ 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 0x4C, 0x00, +/* 00003440 */ 0x00, 0x00, 0x4B, 0x00, 0x00, 0x00, 0x6B, 0x00, 0x00, 0x00, 0x5A, 0x00, 0x00, 0x00, 0x76, 0x00, +/* 00003450 */ 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x4F, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x78, 0x00, +/* 00003460 */ 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x34, 0x00, +/* 00003470 */ 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x68, 0x00, 0x31, 0x00, 0x32, 0x00, 0x00, 0x00, 0x68, 0x00, +/* 00003480 */ 0x32, 0x00, 0x33, 0x00, 0x00, 0x00, 0x68, 0x00, 0x31, 0x00, 0x31, 0x00, 0x00, 0x00, 0x68, 0x00, +/* 00003490 */ 0x32, 0x00, 0x34, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x68, 0x00, +/* 000034A0 */ 0x6F, 0x00, 0x75, 0x00, 0x72, 0x00, 0x43, 0x00, 0x79, 0x00, 0x63, 0x00, 0x6C, 0x00, 0x65, 0x00, +/* 000034B0 */ 0x00, 0x00, 0x63, 0x00, 0x61, 0x00, 0x00, 0x00, 0x68, 0x00, 0x63, 0x00, 0x00, 0x00, 0x45, 0x00, +/* 000034C0 */ 0x74, 0x00, 0x63, 0x00, 0x2F, 0x00, 0x55, 0x00, 0x6E, 0x00, 0x6B, 0x00, 0x6E, 0x00, 0x6F, 0x00, +/* 000034D0 */ 0x77, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x5A, 0x00, +/* 000034E0 */ 0x6F, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x00, 0x00, 0x49, 0x00, 0x41, 0x00, 0x4E, 0x00, 0x41, 0x00, +/* 000034F0 */ 0x20, 0x00, 0x5A, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x20, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 00003500 */ 0x20, 0x00, 0x4C, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x6B, 0x00, 0x20, 0x00, 0x6E, 0x00, 0x61, 0x00, +/* 00003510 */ 0x6D, 0x00, 0x65, 0x00, 0x20, 0x00, 0x28, 0x00, 0x41, 0x00, 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, +/* 00003520 */ 0x2F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, +/* 00003530 */ 0x6E, 0x00, 0x29, 0x00, 0x00, 0x00, 0x45, 0x00, 0x74, 0x00, 0x63, 0x00, 0x2F, 0x00, 0x55, 0x00, +/* 00003540 */ 0x54, 0x00, 0x43, 0x00, 0x00, 0x00, 0x45, 0x00, 0x74, 0x00, 0x63, 0x00, 0x2F, 0x00, 0x47, 0x00, +/* 00003550 */ 0x4D, 0x00, 0x54, 0x00, 0x00, 0x00, 0x55, 0x00, 0x54, 0x00, 0x43, 0x00, 0x00, 0x00, 0x66, 0x00, +/* 00003560 */ 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x4D, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 00003570 */ 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x62, 0x00, 0x61, 0x00, 0x73, 0x00, +/* 00003580 */ 0x69, 0x00, 0x63, 0x00, 0x00, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, +/* 00003590 */ 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x64, 0x00, 0x44, 0x00, 0x61, 0x00, +/* 000035A0 */ 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, +/* 000035B0 */ 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x65, 0x00, +/* 000035C0 */ 0x64, 0x00, 0x44, 0x00, 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x74, 0x00, +/* 000035D0 */ 0x73, 0x00, 0x00, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 000035E0 */ 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, +/* 000035F0 */ 0x54, 0x00, 0x6F, 0x00, 0x50, 0x00, 0x61, 0x00, 0x72, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, +/* 00003600 */ 0x49, 0x00, 0x6E, 0x00, 0x76, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x64, 0x00, 0x20, 0x00, +/* 00003610 */ 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x74, 0x00, +/* 00003620 */ 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x31, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x74, 0x00, +/* 00003630 */ 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x32, 0x00, 0x00, 0x00, 0x63, 0x00, 0x61, 0x00, 0x63, 0x00, +/* 00003640 */ 0x68, 0x00, 0x65, 0x00, 0x53, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x00, 0x00, 0x64, 0x00, +/* 00003650 */ 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x5F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, +/* 00003660 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, +/* 00003670 */ 0x6E, 0x00, 0x67, 0x00, 0x5F, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x72, 0x00, 0x79, 0x00, +/* 00003680 */ 0x50, 0x00, 0x6F, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, +/* 00003690 */ 0x74, 0x00, 0x65, 0x00, 0x5F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, +/* 000036A0 */ 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x53, 0x00, +/* 000036B0 */ 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x5F, 0x00, 0x65, 0x00, 0x6E, 0x00, +/* 000036C0 */ 0x74, 0x00, 0x72, 0x00, 0x79, 0x00, 0x50, 0x00, 0x6F, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x74, 0x00, +/* 000036D0 */ 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x5F, 0x00, 0x74, 0x00, 0x6F, 0x00, +/* 000036E0 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, +/* 000036F0 */ 0x6D, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, +/* 00003700 */ 0x5F, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x72, 0x00, 0x79, 0x00, 0x50, 0x00, 0x6F, 0x00, +/* 00003710 */ 0x69, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x00, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00003720 */ 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, +/* 00003730 */ 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, +/* 00003740 */ 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 00003750 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00003760 */ 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, +/* 00003770 */ 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, +/* 00003780 */ 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 00003790 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x50, 0x00, 0x61, 0x00, 0x72, 0x00, +/* 000037A0 */ 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, +/* 000037B0 */ 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, +/* 000037C0 */ 0x69, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x50, 0x00, 0x6C, 0x00, +/* 000037D0 */ 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x52, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x65, 0x00, +/* 000037E0 */ 0x73, 0x00, 0x00, 0x00, 0x52, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, +/* 000037F0 */ 0x65, 0x00, 0x50, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x00, 0x00, +/* 00003800 */ 0x50, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x52, 0x00, 0x75, 0x00, +/* 00003810 */ 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, +/* 00003820 */ 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, +/* 00003830 */ 0x6C, 0x00, 0x2E, 0x00, 0x50, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 00003840 */ 0x52, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, +/* 00003850 */ 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x50, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, +/* 00003860 */ 0x6C, 0x00, 0x52, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x2E, 0x00, 0x73, 0x00, +/* 00003870 */ 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, +/* 00003880 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, +/* 00003890 */ 0x66, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x50, 0x00, +/* 000038A0 */ 0x6C, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x52, 0x00, 0x75, 0x00, 0x6C, 0x00, +/* 000038B0 */ 0x65, 0x00, 0x73, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, +/* 000038C0 */ 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x65, 0x00, 0x6C, 0x00, +/* 000038D0 */ 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x00, 0x00, 0x73, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x65, 0x00, +/* 000038E0 */ 0x63, 0x00, 0x74, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, +/* 000038F0 */ 0x50, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x52, 0x00, 0x75, 0x00, +/* 00003900 */ 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, +/* 00003910 */ 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x72, 0x00, 0x65, 0x00, +/* 00003920 */ 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4F, 0x00, 0x70, 0x00, +/* 00003930 */ 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x00, 0x00, 0x74, 0x00, 0x79, 0x00, +/* 00003940 */ 0x70, 0x00, 0x65, 0x00, 0x00, 0x00, 0x63, 0x00, 0x61, 0x00, 0x72, 0x00, 0x64, 0x00, 0x69, 0x00, +/* 00003950 */ 0x6E, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x64, 0x00, 0x69, 0x00, +/* 00003960 */ 0x6E, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x72, 0x00, +/* 00003970 */ 0x61, 0x00, 0x6C, 0x00, 0x43, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x67, 0x00, 0x6F, 0x00, +/* 00003980 */ 0x72, 0x00, 0x69, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, +/* 00003990 */ 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x64, 0x00, +/* 000039A0 */ 0x50, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x52, 0x00, 0x75, 0x00, +/* 000039B0 */ 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x68, 0x00, 0x65, 0x00, +/* 000039C0 */ 0x72, 0x00, 0x00, 0x00, 0x70, 0x00, 0x72, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x6D, 0x00, 0x6F, 0x00, +/* 000039D0 */ 0x6E, 0x00, 0x74, 0x00, 0x68, 0x00, 0x2E, 0x00, 0x61, 0x00, 0x7D, 0x00, 0x7B, 0x00, 0x64, 0x00, +/* 000039E0 */ 0x61, 0x00, 0x79, 0x00, 0x2E, 0x00, 0x62, 0x00, 0x7D, 0x00, 0x7B, 0x00, 0x68, 0x00, 0x6F, 0x00, +/* 000039F0 */ 0x75, 0x00, 0x72, 0x00, 0x2E, 0x00, 0x63, 0x00, 0x7D, 0x00, 0x7B, 0x00, 0x6D, 0x00, 0x69, 0x00, +/* 00003A00 */ 0x6E, 0x00, 0x75, 0x00, 0x74, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x64, 0x00, 0x7D, 0x00, 0x7B, 0x00, +/* 00003A10 */ 0x73, 0x00, 0x65, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x2E, 0x00, 0x65, 0x00, +/* 00003A20 */ 0x7D, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, +/* 00003A30 */ 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x42, 0x00, +/* 00003A40 */ 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x46, 0x00, 0x69, 0x00, 0x74, 0x00, 0x00, 0x00, 0x72, 0x00, +/* 00003A50 */ 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, +/* 00003A60 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x6F, 0x00, 0x6B, 0x00, +/* 00003A70 */ 0x75, 0x00, 0x70, 0x00, 0x00, 0x00, 0x66, 0x00, 0x69, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00003A80 */ 0x72, 0x00, 0x65, 0x00, 0x64, 0x00, 0x00, 0x00, 0x65, 0x00, 0x78, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00003A90 */ 0x6E, 0x00, 0x73, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x46, 0x00, 0x69, 0x00, 0x6C, 0x00, +/* 00003AA0 */ 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x2D, 0x00, 0x75, 0x00, 0x2D, 0x00, 0x00, 0x00, +/* 00003AB0 */ 0x73, 0x00, 0x75, 0x00, 0x62, 0x00, 0x54, 0x00, 0x61, 0x00, 0x67, 0x00, 0x73, 0x00, 0x00, 0x00, +/* 00003AC0 */ 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x57, 0x00, 0x69, 0x00, +/* 00003AD0 */ 0x74, 0x00, 0x68, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x74, 0x00, 0x53, 0x00, 0x75, 0x00, 0x62, 0x00, +/* 00003AE0 */ 0x74, 0x00, 0x61, 0x00, 0x67, 0x00, 0x73, 0x00, 0x00, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x2A, 0x00, +/* 00003AF0 */ 0x3F, 0x00, 0x29, 0x00, 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x2D, 0x00, 0x75, 0x00, 0x29, 0x00, +/* 00003B00 */ 0x3F, 0x00, 0x24, 0x00, 0x00, 0x00, 0x28, 0x00, 0x5B, 0x00, 0x5E, 0x00, 0x2D, 0x00, 0x5D, 0x00, +/* 00003B10 */ 0x2A, 0x00, 0x29, 0x00, 0x2D, 0x00, 0x3F, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x2A, 0x00, 0x29, 0x00, +/* 00003B20 */ 0x3F, 0x00, 0x00, 0x00, 0x28, 0x00, 0x5B, 0x00, 0x5E, 0x00, 0x5F, 0x00, 0x5D, 0x00, 0x2A, 0x00, +/* 00003B30 */ 0x29, 0x00, 0x2E, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x55, 0x00, 0x69, 0x00, +/* 00003B40 */ 0x6E, 0x00, 0x74, 0x00, 0x33, 0x00, 0x32, 0x00, 0x00, 0x00, 0x48, 0x00, 0x61, 0x00, 0x73, 0x00, +/* 00003B50 */ 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x74, 0x00, 0x79, 0x00, +/* 00003B60 */ 0x00, 0x00, 0x29, 0x00, 0x2A, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x73, 0x00, 0x65, 0x00, +/* 00003B70 */ 0x65, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 00003B80 */ 0x65, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x00, 0x00, +/* 00003B90 */ 0x66, 0x00, 0x69, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x64, 0x00, +/* 00003BA0 */ 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x4C, 0x00, 0x6F, 0x00, +/* 00003BB0 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5B, 0x00, 0x27, 0x00, 0x62, 0x00, +/* 00003BC0 */ 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x20, 0x00, 0x66, 0x00, 0x69, 0x00, 0x74, 0x00, 0x27, 0x00, +/* 00003BD0 */ 0x2C, 0x00, 0x20, 0x00, 0x27, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x6F, 0x00, 0x6B, 0x00, 0x75, 0x00, +/* 00003BE0 */ 0x70, 0x00, 0x27, 0x00, 0x5D, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, +/* 00003BF0 */ 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x5F, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, +/* 00003C00 */ 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, +/* 00003C10 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x5F, 0x00, +/* 00003C20 */ 0x64, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x6D, 0x00, 0x79, 0x00, 0x4E, 0x00, 0x61, 0x00, 0x6D, 0x00, +/* 00003C30 */ 0x65, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, +/* 00003C40 */ 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x5F, 0x00, 0x73, 0x00, +/* 00003C50 */ 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, +/* 00003C60 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, +/* 00003C70 */ 0x66, 0x00, 0x5F, 0x00, 0x64, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x6D, 0x00, 0x79, 0x00, 0x4E, 0x00, +/* 00003C80 */ 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00003C90 */ 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, +/* 00003CA0 */ 0x61, 0x00, 0x74, 0x00, 0x5F, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, +/* 00003CB0 */ 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, +/* 00003CC0 */ 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x5F, 0x00, 0x64, 0x00, 0x75, 0x00, +/* 00003CD0 */ 0x6D, 0x00, 0x6D, 0x00, 0x79, 0x00, 0x4E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, +/* 00003CE0 */ 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x6F, 0x00, 0x6E, 0x00, +/* 00003CF0 */ 0x69, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, +/* 00003D00 */ 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x5F, 0x00, 0x64, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x6D, 0x00, +/* 00003D10 */ 0x79, 0x00, 0x4E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x74, 0x00, 0x6F, 0x00, +/* 00003D20 */ 0x52, 0x00, 0x65, 0x00, 0x74, 0x00, 0x75, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x63, 0x00, +/* 00003D30 */ 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, +/* 00003D40 */ 0x56, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x65, 0x00, 0x73, 0x00, 0x46, 0x00, 0x6F, 0x00, +/* 00003D50 */ 0x72, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, +/* 00003D60 */ 0x72, 0x00, 0x65, 0x00, 0x76, 0x00, 0x65, 0x00, 0x72, 0x00, 0x73, 0x00, 0x65, 0x00, 0x64, 0x00, +/* 00003D70 */ 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, +/* 00003D80 */ 0x6E, 0x00, 0x56, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, +/* 00003D90 */ 0x2D, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x2D, 0x00, 0x75, 0x00, 0x28, 0x00, +/* 00003DA0 */ 0x3F, 0x00, 0x3A, 0x00, 0x2D, 0x00, 0x5B, 0x00, 0x5E, 0x00, 0x5C, 0x00, 0x2D, 0x00, 0x5D, 0x00, +/* 00003DB0 */ 0x5B, 0x00, 0x5E, 0x00, 0x5C, 0x00, 0x2D, 0x00, 0x5D, 0x00, 0x3F, 0x00, 0x2D, 0x00, 0x5B, 0x00, +/* 00003DC0 */ 0x5E, 0x00, 0x5C, 0x00, 0x2D, 0x00, 0x5D, 0x00, 0x2B, 0x00, 0x29, 0x00, 0x2A, 0x00, 0x2D, 0x00, +/* 00003DD0 */ 0x63, 0x00, 0x6F, 0x00, 0x2D, 0x00, 0x28, 0x00, 0x5B, 0x00, 0x5E, 0x00, 0x5C, 0x00, 0x2D, 0x00, +/* 00003DE0 */ 0x5D, 0x00, 0x2B, 0x00, 0x29, 0x00, 0x2E, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x28, 0x00, 0x5B, 0x00, +/* 00003DF0 */ 0x5E, 0x00, 0x5F, 0x00, 0x5D, 0x00, 0x2A, 0x00, 0x29, 0x00, 0x5F, 0x00, 0x3F, 0x00, 0x28, 0x00, +/* 00003E00 */ 0x2E, 0x00, 0x2B, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x63, 0x00, 0x72, 0x00, 0x65, 0x00, +/* 00003E10 */ 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 00003E20 */ 0x65, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, +/* 00003E30 */ 0x6F, 0x00, 0x6E, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, +/* 00003E40 */ 0x00, 0x00, 0x2D, 0x00, 0x75, 0x00, 0x2D, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x2D, 0x00, 0x00, 0x00, +/* 00003E50 */ 0x5F, 0x00, 0x5F, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, +/* 00003E60 */ 0x6C, 0x00, 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x64, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, +/* 00003E70 */ 0x6C, 0x00, 0x4F, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x00, 0x00, +/* 00003E80 */ 0x41, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x6C, 0x00, 0x6F, 0x00, +/* 00003E90 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x43, 0x00, +/* 00003EA0 */ 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00, 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5F, 0x00, +/* 00003EB0 */ 0x5F, 0x00, 0x75, 0x00, 0x73, 0x00, 0x61, 0x00, 0x67, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5F, 0x00, +/* 00003EC0 */ 0x5F, 0x00, 0x73, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, +/* 00003ED0 */ 0x76, 0x00, 0x69, 0x00, 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x69, 0x00, +/* 00003EE0 */ 0x67, 0x00, 0x6E, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x65, 0x00, 0x50, 0x00, 0x75, 0x00, 0x6E, 0x00, +/* 00003EF0 */ 0x63, 0x00, 0x74, 0x00, 0x75, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, +/* 00003F00 */ 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x73, 0x00, 0x65, 0x00, 0x46, 0x00, +/* 00003F10 */ 0x69, 0x00, 0x72, 0x00, 0x73, 0x00, 0x74, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x6E, 0x00, +/* 00003F20 */ 0x75, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x72, 0x00, 0x69, 0x00, 0x63, 0x00, 0x00, 0x00, 0x73, 0x00, +/* 00003F30 */ 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x64, 0x00, 0x00, 0x00, +/* 00003F40 */ 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x6C, 0x00, +/* 00003F50 */ 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x4D, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 00003F60 */ 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, +/* 00003F70 */ 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, +/* 00003F80 */ 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, +/* 00003F90 */ 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, +/* 00003FA0 */ 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, +/* 00003FB0 */ 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x57, 0x00, +/* 00003FC0 */ 0x69, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x73, 0x00, 0x54, 0x00, 0x6F, 0x00, +/* 00003FD0 */ 0x45, 0x00, 0x63, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, +/* 00003FE0 */ 0x6E, 0x00, 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x4D, 0x00, 0x61, 0x00, 0x70, 0x00, 0x00, 0x00, +/* 00003FF0 */ 0x47, 0x00, 0x72, 0x00, 0x65, 0x00, 0x67, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x69, 0x00, 0x61, 0x00, +/* 00004000 */ 0x6E, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x61, 0x00, +/* 00004010 */ 0x72, 0x00, 0x00, 0x00, 0x67, 0x00, 0x72, 0x00, 0x65, 0x00, 0x67, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 00004020 */ 0x79, 0x00, 0x00, 0x00, 0x48, 0x00, 0x65, 0x00, 0x62, 0x00, 0x72, 0x00, 0x65, 0x00, 0x77, 0x00, +/* 00004030 */ 0x43, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, +/* 00004040 */ 0x00, 0x00, 0x68, 0x00, 0x65, 0x00, 0x62, 0x00, 0x72, 0x00, 0x65, 0x00, 0x77, 0x00, 0x00, 0x00, +/* 00004050 */ 0x48, 0x00, 0x69, 0x00, 0x6A, 0x00, 0x72, 0x00, 0x69, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 00004060 */ 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x69, 0x00, 0x73, 0x00, +/* 00004070 */ 0x6C, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x69, 0x00, 0x63, 0x00, 0x00, 0x00, 0x4A, 0x00, 0x61, 0x00, +/* 00004080 */ 0x70, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x73, 0x00, 0x65, 0x00, 0x43, 0x00, 0x61, 0x00, +/* 00004090 */ 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6A, 0x00, +/* 000040A0 */ 0x61, 0x00, 0x70, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, +/* 000040B0 */ 0x4A, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x43, 0x00, 0x61, 0x00, +/* 000040C0 */ 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6A, 0x00, +/* 000040D0 */ 0x75, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x4B, 0x00, 0x6F, 0x00, +/* 000040E0 */ 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, +/* 000040F0 */ 0x6E, 0x00, 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6B, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 00004100 */ 0x65, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x55, 0x00, 0x6D, 0x00, 0x41, 0x00, 0x6C, 0x00, +/* 00004110 */ 0x51, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, +/* 00004120 */ 0x6E, 0x00, 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x69, 0x00, 0x73, 0x00, 0x6C, 0x00, +/* 00004130 */ 0x61, 0x00, 0x6D, 0x00, 0x69, 0x00, 0x63, 0x00, 0x2D, 0x00, 0x63, 0x00, 0x69, 0x00, 0x76, 0x00, +/* 00004140 */ 0x69, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x54, 0x00, 0x68, 0x00, 0x61, 0x00, 0x69, 0x00, 0x43, 0x00, +/* 00004150 */ 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, +/* 00004160 */ 0x74, 0x00, 0x68, 0x00, 0x61, 0x00, 0x69, 0x00, 0x00, 0x00, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, +/* 00004170 */ 0x77, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, +/* 00004180 */ 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x74, 0x00, 0x61, 0x00, 0x69, 0x00, 0x77, 0x00, +/* 00004190 */ 0x61, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x45, 0x00, 0x63, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x4F, 0x00, +/* 000041A0 */ 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x54, 0x00, 0x6F, 0x00, +/* 000041B0 */ 0x57, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x73, 0x00, 0x54, 0x00, +/* 000041C0 */ 0x65, 0x00, 0x6D, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, +/* 000041D0 */ 0x57, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x73, 0x00, 0x54, 0x00, +/* 000041E0 */ 0x6F, 0x00, 0x45, 0x00, 0x63, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 000041F0 */ 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, +/* 00004200 */ 0x72, 0x00, 0x72, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x57, 0x00, 0x65, 0x00, 0x65, 0x00, +/* 00004210 */ 0x6B, 0x00, 0x64, 0x00, 0x61, 0x00, 0x79, 0x00, 0x45, 0x00, 0x72, 0x00, 0x61, 0x00, 0x4D, 0x00, +/* 00004220 */ 0x6F, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x68, 0x00, 0x50, 0x00, 0x61, 0x00, 0x74, 0x00, 0x74, 0x00, +/* 00004230 */ 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x72, 0x00, +/* 00004240 */ 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x44, 0x00, 0x61, 0x00, 0x79, 0x00, 0x48, 0x00, 0x6F, 0x00, +/* 00004250 */ 0x75, 0x00, 0x72, 0x00, 0x4D, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00004260 */ 0x53, 0x00, 0x65, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x4D, 0x00, 0x6F, 0x00, +/* 00004270 */ 0x6E, 0x00, 0x74, 0x00, 0x68, 0x00, 0x50, 0x00, 0x61, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00004280 */ 0x72, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x75, 0x00, 0x70, 0x00, 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 00004290 */ 0x65, 0x00, 0x50, 0x00, 0x61, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, +/* 000042A0 */ 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x73, 0x00, 0x00, 0x00, +/* 000042B0 */ 0x74, 0x00, 0x65, 0x00, 0x6D, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 000042C0 */ 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, 0x79, 0x00, 0x6F, 0x00, 0x66, 0x00, 0x77, 0x00, 0x65, 0x00, +/* 000042D0 */ 0x65, 0x00, 0x6B, 0x00, 0x2E, 0x00, 0x61, 0x00, 0x62, 0x00, 0x62, 0x00, 0x72, 0x00, 0x65, 0x00, +/* 000042E0 */ 0x76, 0x00, 0x69, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x00, 0x00, 0x64, 0x00, +/* 000042F0 */ 0x61, 0x00, 0x79, 0x00, 0x6F, 0x00, 0x66, 0x00, 0x77, 0x00, 0x65, 0x00, 0x65, 0x00, 0x6B, 0x00, +/* 00004300 */ 0x2E, 0x00, 0x66, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x79, 0x00, 0x65, 0x00, +/* 00004310 */ 0x61, 0x00, 0x72, 0x00, 0x2E, 0x00, 0x61, 0x00, 0x62, 0x00, 0x62, 0x00, 0x72, 0x00, 0x65, 0x00, +/* 00004320 */ 0x76, 0x00, 0x69, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x00, 0x00, 0x79, 0x00, +/* 00004330 */ 0x65, 0x00, 0x61, 0x00, 0x72, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x6C, 0x00, +/* 00004340 */ 0x00, 0x00, 0x6D, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x68, 0x00, 0x2E, 0x00, 0x6E, 0x00, +/* 00004350 */ 0x75, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x72, 0x00, 0x69, 0x00, 0x63, 0x00, 0x00, 0x00, 0x6D, 0x00, +/* 00004360 */ 0x6F, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x68, 0x00, 0x2E, 0x00, 0x61, 0x00, 0x62, 0x00, 0x62, 0x00, +/* 00004370 */ 0x72, 0x00, 0x65, 0x00, 0x76, 0x00, 0x69, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, +/* 00004380 */ 0x00, 0x00, 0x6D, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x68, 0x00, 0x2E, 0x00, 0x66, 0x00, +/* 00004390 */ 0x75, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, +/* 000043A0 */ 0x7A, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x61, 0x00, 0x62, 0x00, 0x62, 0x00, +/* 000043B0 */ 0x72, 0x00, 0x65, 0x00, 0x76, 0x00, 0x69, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, +/* 000043C0 */ 0x00, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x7A, 0x00, 0x6F, 0x00, 0x6E, 0x00, +/* 000043D0 */ 0x65, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x7B, 0x00, +/* 000043E0 */ 0x28, 0x00, 0x00, 0x00, 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x5C, 0x00, 0x2E, 0x00, 0x73, 0x00, +/* 000043F0 */ 0x6F, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x2E, 0x00, +/* 00004400 */ 0x28, 0x00, 0x5B, 0x00, 0x61, 0x00, 0x2D, 0x00, 0x7A, 0x00, 0x5D, 0x00, 0x2A, 0x00, 0x29, 0x00, +/* 00004410 */ 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x5C, 0x00, 0x28, 0x00, 0x5B, 0x00, 0x30, 0x00, 0x2D, 0x00, +/* 00004420 */ 0x39, 0x00, 0x5D, 0x00, 0x5C, 0x00, 0x29, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x7D, 0x00, 0x00, 0x00, +/* 00004430 */ 0x45, 0x00, 0x72, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x20, 0x00, 0x77, 0x00, 0x68, 0x00, +/* 00004440 */ 0x65, 0x00, 0x6E, 0x00, 0x20, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x72, 0x00, 0x65, 0x00, +/* 00004450 */ 0x63, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x20, 0x00, 0x77, 0x00, 0x69, 0x00, +/* 00004460 */ 0x6E, 0x00, 0x64, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x73, 0x00, 0x20, 0x00, 0x72, 0x00, 0x65, 0x00, +/* 00004470 */ 0x74, 0x00, 0x75, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x64, 0x00, 0x20, 0x00, 0x77, 0x00, +/* 00004480 */ 0x65, 0x00, 0x65, 0x00, 0x6B, 0x00, 0x64, 0x00, 0x61, 0x00, 0x79, 0x00, 0x2F, 0x00, 0x45, 0x00, +/* 00004490 */ 0x72, 0x00, 0x61, 0x00, 0x2F, 0x00, 0x4D, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x68, 0x00, +/* 000044A0 */ 0x20, 0x00, 0x70, 0x00, 0x61, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, +/* 000044B0 */ 0x3B, 0x00, 0x20, 0x00, 0x72, 0x00, 0x65, 0x00, 0x67, 0x00, 0x65, 0x00, 0x78, 0x00, 0x20, 0x00, +/* 000044C0 */ 0x72, 0x00, 0x65, 0x00, 0x74, 0x00, 0x75, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x64, 0x00, +/* 000044D0 */ 0x20, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x20, 0x00, 0x0A, 0x00, +/* 000044E0 */ 0x49, 0x00, 0x6E, 0x00, 0x70, 0x00, 0x75, 0x00, 0x74, 0x00, 0x20, 0x00, 0x77, 0x00, 0x61, 0x00, +/* 000044F0 */ 0x73, 0x00, 0x3A, 0x00, 0x20, 0x00, 0x27, 0x00, 0x00, 0x00, 0x27, 0x00, 0x0A, 0x00, 0x52, 0x00, +/* 00004500 */ 0x65, 0x00, 0x67, 0x00, 0x65, 0x00, 0x78, 0x00, 0x3A, 0x00, 0x20, 0x00, 0x27, 0x00, 0x00, 0x00, +/* 00004510 */ 0x28, 0x00, 0x5C, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x29, 0x00, +/* 00004520 */ 0x3F, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x2E, 0x00, 0x28, 0x00, 0x5B, 0x00, 0x61, 0x00, 0x2D, 0x00, +/* 00004530 */ 0x7A, 0x00, 0x5D, 0x00, 0x2A, 0x00, 0x29, 0x00, 0x28, 0x00, 0x5C, 0x00, 0x28, 0x00, 0x5B, 0x00, +/* 00004540 */ 0x30, 0x00, 0x2D, 0x00, 0x39, 0x00, 0x5D, 0x00, 0x5C, 0x00, 0x29, 0x00, 0x29, 0x00, 0x3F, 0x00, +/* 00004550 */ 0x7D, 0x00, 0x27, 0x00, 0x00, 0x00, 0x66, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x00, 0x00, +/* 00004560 */ 0x7B, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x00, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x61, 0x00, 0x62, 0x00, +/* 00004570 */ 0x62, 0x00, 0x72, 0x00, 0x65, 0x00, 0x76, 0x00, 0x69, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00004580 */ 0x64, 0x00, 0x00, 0x00, 0x61, 0x00, 0x62, 0x00, 0x62, 0x00, 0x72, 0x00, 0x65, 0x00, 0x76, 0x00, +/* 00004590 */ 0x69, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x28, 0x00, 0x31, 0x00, 0x29, 0x00, +/* 000045A0 */ 0x00, 0x00, 0x29, 0x00, 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x5C, 0x00, 0x2E, 0x00, 0x73, 0x00, +/* 000045B0 */ 0x6F, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x5C, 0x00, 0x2E, 0x00, 0x28, 0x00, +/* 000045C0 */ 0x5B, 0x00, 0x61, 0x00, 0x2D, 0x00, 0x7A, 0x00, 0x5D, 0x00, 0x2A, 0x00, 0x29, 0x00, 0x28, 0x00, +/* 000045D0 */ 0x3F, 0x00, 0x3A, 0x00, 0x5C, 0x00, 0x28, 0x00, 0x5B, 0x00, 0x30, 0x00, 0x2D, 0x00, 0x39, 0x00, +/* 000045E0 */ 0x5D, 0x00, 0x5C, 0x00, 0x29, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x45, 0x00, +/* 000045F0 */ 0x72, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x20, 0x00, 0x77, 0x00, 0x68, 0x00, 0x65, 0x00, +/* 00004600 */ 0x6E, 0x00, 0x20, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x72, 0x00, 0x65, 0x00, 0x63, 0x00, +/* 00004610 */ 0x74, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x20, 0x00, 0x77, 0x00, 0x69, 0x00, 0x6E, 0x00, +/* 00004620 */ 0x64, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x73, 0x00, 0x20, 0x00, 0x72, 0x00, 0x65, 0x00, 0x74, 0x00, +/* 00004630 */ 0x75, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x64, 0x00, 0x20, 0x00, 0x64, 0x00, 0x61, 0x00, +/* 00004640 */ 0x79, 0x00, 0x2F, 0x00, 0x68, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x72, 0x00, 0x2F, 0x00, 0x6D, 0x00, +/* 00004650 */ 0x69, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x74, 0x00, 0x65, 0x00, 0x2F, 0x00, 0x73, 0x00, 0x65, 0x00, +/* 00004660 */ 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x2F, 0x00, 0x6D, 0x00, 0x6F, 0x00, 0x6E, 0x00, +/* 00004670 */ 0x74, 0x00, 0x68, 0x00, 0x20, 0x00, 0x70, 0x00, 0x61, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00004680 */ 0x72, 0x00, 0x6E, 0x00, 0x3B, 0x00, 0x20, 0x00, 0x72, 0x00, 0x65, 0x00, 0x67, 0x00, 0x65, 0x00, +/* 00004690 */ 0x78, 0x00, 0x20, 0x00, 0x72, 0x00, 0x65, 0x00, 0x74, 0x00, 0x75, 0x00, 0x72, 0x00, 0x6E, 0x00, +/* 000046A0 */ 0x65, 0x00, 0x64, 0x00, 0x20, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x2E, 0x00, +/* 000046B0 */ 0x20, 0x00, 0x0A, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x70, 0x00, 0x75, 0x00, 0x74, 0x00, 0x20, 0x00, +/* 000046C0 */ 0x77, 0x00, 0x61, 0x00, 0x73, 0x00, 0x3A, 0x00, 0x20, 0x00, 0x27, 0x00, 0x00, 0x00, 0x2E, 0x00, +/* 000046D0 */ 0x69, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x65, 0x00, 0x67, 0x00, 0x65, 0x00, 0x72, 0x00, 0x28, 0x00, +/* 000046E0 */ 0x32, 0x00, 0x29, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 000046F0 */ 0x67, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x74, 0x00, +/* 00004700 */ 0x65, 0x00, 0x67, 0x00, 0x65, 0x00, 0x72, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, +/* 00004710 */ 0x79, 0x00, 0x6F, 0x00, 0x66, 0x00, 0x77, 0x00, 0x65, 0x00, 0x65, 0x00, 0x6B, 0x00, 0x00, 0x00, +/* 00004720 */ 0x45, 0x00, 0x72, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x20, 0x00, 0x77, 0x00, 0x68, 0x00, +/* 00004730 */ 0x65, 0x00, 0x6E, 0x00, 0x20, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x72, 0x00, 0x65, 0x00, +/* 00004740 */ 0x63, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x20, 0x00, 0x77, 0x00, 0x69, 0x00, +/* 00004750 */ 0x6E, 0x00, 0x64, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x73, 0x00, 0x20, 0x00, 0x72, 0x00, 0x65, 0x00, +/* 00004760 */ 0x74, 0x00, 0x75, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x64, 0x00, 0x20, 0x00, 0x79, 0x00, +/* 00004770 */ 0x65, 0x00, 0x61, 0x00, 0x72, 0x00, 0x3B, 0x00, 0x20, 0x00, 0x72, 0x00, 0x65, 0x00, 0x67, 0x00, +/* 00004780 */ 0x65, 0x00, 0x78, 0x00, 0x20, 0x00, 0x72, 0x00, 0x65, 0x00, 0x74, 0x00, 0x75, 0x00, 0x72, 0x00, +/* 00004790 */ 0x6E, 0x00, 0x65, 0x00, 0x64, 0x00, 0x20, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x6C, 0x00, +/* 000047A0 */ 0x00, 0x00, 0x7B, 0x00, 0x79, 0x00, 0x65, 0x00, 0x61, 0x00, 0x72, 0x00, 0x2E, 0x00, 0x61, 0x00, +/* 000047B0 */ 0x62, 0x00, 0x62, 0x00, 0x72, 0x00, 0x65, 0x00, 0x76, 0x00, 0x69, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 000047C0 */ 0x65, 0x00, 0x64, 0x00, 0x28, 0x00, 0x32, 0x00, 0x29, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x7B, 0x00, +/* 000047D0 */ 0x79, 0x00, 0x65, 0x00, 0x61, 0x00, 0x72, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x75, 0x00, 0x6C, 0x00, +/* 000047E0 */ 0x6C, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x7A, 0x00, +/* 000047F0 */ 0x6F, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x7B, 0x00, 0x79, 0x00, 0x65, 0x00, +/* 00004800 */ 0x61, 0x00, 0x72, 0x00, 0x5C, 0x00, 0x2E, 0x00, 0x5B, 0x00, 0x61, 0x00, 0x2D, 0x00, 0x7A, 0x00, +/* 00004810 */ 0x5D, 0x00, 0x2A, 0x00, 0x28, 0x00, 0x5C, 0x00, 0x28, 0x00, 0x5B, 0x00, 0x30, 0x00, 0x2D, 0x00, +/* 00004820 */ 0x39, 0x00, 0x5D, 0x00, 0x5C, 0x00, 0x29, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x5C, 0x00, 0x7D, 0x00, +/* 00004830 */ 0x00, 0x00, 0x31, 0x00, 0x32, 0x00, 0x48, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x72, 0x00, 0x43, 0x00, +/* 00004840 */ 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x6B, 0x00, 0x00, 0x00, 0x32, 0x00, 0x34, 0x00, 0x48, 0x00, +/* 00004850 */ 0x6F, 0x00, 0x75, 0x00, 0x72, 0x00, 0x43, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x6B, 0x00, +/* 00004860 */ 0x00, 0x00, 0x6E, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x00, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00004870 */ 0x6D, 0x00, 0x70, 0x00, 0x00, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, +/* 00004880 */ 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, +/* 00004890 */ 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, +/* 000048A0 */ 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, +/* 000048B0 */ 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, +/* 000048C0 */ 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x00, 0x00, 0xFE, 0x9B, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x6A, +/* 000048D0 */ 0x00, 0x00, 0x00, 0x9B, 0x00, 0x00, 0x00, 0xE7, 0x00, 0x00, 0x00, 0x51, 0x01, 0x00, 0x00, 0xBB, +/* 000048E0 */ 0x01, 0x00, 0x00, 0xBC, 0x01, 0x00, 0x00, 0xCA, 0x01, 0x00, 0x00, 0xDB, 0x01, 0x00, 0x00, 0x03, +/* 000048F0 */ 0x02, 0x00, 0x00, 0x2C, 0x02, 0x00, 0x00, 0x2D, 0x02, 0x00, 0x00, 0xA7, 0x02, 0x00, 0x00, 0xC6, +/* 00004900 */ 0x02, 0x00, 0x00, 0xC7, 0x02, 0x00, 0x00, 0xFA, 0x02, 0x00, 0x00, 0x39, 0x03, 0x00, 0x00, 0x5E, +/* 00004910 */ 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0xC5, 0x03, 0x00, 0x00, 0xC6, 0x03, 0x00, 0x00, 0xD7, +/* 00004920 */ 0x03, 0x00, 0x00, 0xFA, 0x03, 0x00, 0x00, 0xFB, 0x03, 0x00, 0x00, 0x0C, 0x04, 0x00, 0x00, 0x41, +/* 00004930 */ 0x04, 0x00, 0x00, 0x7A, 0x04, 0x00, 0x00, 0xBB, 0x04, 0x00, 0x00, 0xBC, 0x04, 0x00, 0x00, 0xFD, +/* 00004940 */ 0x04, 0x00, 0x00, 0x35, 0x05, 0x00, 0x00, 0x36, 0x05, 0x00, 0x00, 0xB0, 0x05, 0x00, 0x00, 0x11, +/* 00004950 */ 0x06, 0x00, 0x00, 0xA0, 0x06, 0x00, 0x00, 0x0B, 0x07, 0x00, 0x00, 0x2C, 0x07, 0x00, 0x00, 0x42, +/* 00004960 */ 0x07, 0x00, 0x00, 0x54, 0x07, 0x00, 0x00, 0x74, 0x07, 0x00, 0x00, 0x75, 0x07, 0x00, 0x00, 0x8C, +/* 00004970 */ 0x07, 0x00, 0x00, 0xD6, 0x07, 0x00, 0x00, 0xE5, 0x07, 0x00, 0x00, 0xE6, 0x07, 0x00, 0x00, 0x04, +/* 00004980 */ 0x08, 0x00, 0x00, 0x2F, 0x08, 0x00, 0x00, 0x4B, 0x08, 0x00, 0x00, 0x5D, 0x08, 0x00, 0x00, 0x5E, +/* 00004990 */ 0x08, 0x00, 0x00, 0xBB, 0x08, 0x00, 0x00, 0xE9, 0x08, 0x00, 0x00, 0xFB, 0x08, 0x00, 0x00, 0xFC, +/* 000049A0 */ 0x08, 0x00, 0x00, 0x26, 0x09, 0x00, 0x00, 0x34, 0x09, 0x00, 0x00, 0x40, 0x09, 0x00, 0x00, 0x46, +/* 000049B0 */ 0x09, 0x00, 0x00, 0x47, 0x09, 0x00, 0x00, 0x65, 0x09, 0x00, 0x00, 0x66, 0x09, 0x00, 0x00, 0x8A, +/* 000049C0 */ 0x09, 0x00, 0x00, 0xAC, 0x09, 0x00, 0x00, 0xCE, 0x09, 0x00, 0x00, 0xF0, 0x09, 0x00, 0x00, 0x12, +/* 000049D0 */ 0x0A, 0x00, 0x00, 0x30, 0x0A, 0x00, 0x00, 0x50, 0x0A, 0x00, 0x00, 0x51, 0x0A, 0x00, 0x00, 0x7D, +/* 000049E0 */ 0x0A, 0x00, 0x00, 0x7E, 0x0A, 0x00, 0x00, 0x9C, 0x0A, 0x00, 0x00, 0xC2, 0x0A, 0x00, 0x00, 0xEC, +/* 000049F0 */ 0x0A, 0x00, 0x00, 0x1A, 0x0B, 0x00, 0x00, 0x3F, 0x0B, 0x00, 0x00, 0x4D, 0x0B, 0x00, 0x00, 0x4E, +/* 00004A00 */ 0x0B, 0x00, 0x00, 0xA2, 0x0B, 0x00, 0x00, 0xF2, 0x0B, 0x00, 0x00, 0x50, 0x0C, 0x00, 0x00, 0xAC, +/* 00004A10 */ 0x0C, 0x00, 0x00, 0x22, 0x0D, 0x00, 0x00, 0x52, 0x0D, 0x00, 0x00, 0xA7, 0x0D, 0x00, 0x00, 0xE9, +/* 00004A20 */ 0x0D, 0x00, 0x00, 0x33, 0x0E, 0x00, 0x00, 0x3A, 0x0E, 0x00, 0x00, 0x3B, 0x0E, 0x00, 0x00, 0x83, +/* 00004A30 */ 0x0E, 0x00, 0x00, 0xCB, 0x0E, 0x00, 0x00, 0x11, 0x0F, 0x00, 0x00, 0x12, 0x0F, 0x00, 0x00, 0x5E, +/* 00004A40 */ 0x0F, 0x00, 0x00, 0xA8, 0x0F, 0x00, 0x00, 0xE2, 0x0F, 0x00, 0x00, 0xE3, 0x0F, 0x00, 0x00, 0x31, +/* 00004A50 */ 0x10, 0x00, 0x00, 0x87, 0x10, 0x00, 0x00, 0xDD, 0x10, 0x00, 0x00, 0xDE, 0x10, 0x00, 0x00, 0x1C, +/* 00004A60 */ 0x11, 0x00, 0x00, 0x54, 0x11, 0x00, 0x00, 0x55, 0x11, 0x00, 0x00, 0x65, 0x11, 0x00, 0x00, 0xBC, +/* 00004A70 */ 0x11, 0x00, 0x00, 0x13, 0x12, 0x00, 0x00, 0x8E, 0x12, 0x00, 0x00, 0x02, 0x13, 0x00, 0x00, 0x84, +/* 00004A80 */ 0x13, 0x00, 0x00, 0x04, 0x14, 0x00, 0x00, 0x4C, 0x14, 0x00, 0x00, 0xBE, 0x14, 0x00, 0x00, 0xBF, +/* 00004A90 */ 0x14, 0x00, 0x00, 0x1D, 0x15, 0x00, 0x00, 0x73, 0x15, 0x00, 0x00, 0xDE, 0x15, 0x00, 0x00, 0x4B, +/* 00004AA0 */ 0x16, 0x00, 0x00, 0xC6, 0x16, 0x00, 0x00, 0x43, 0x17, 0x00, 0x00, 0xBA, 0x17, 0x00, 0x00, 0x29, +/* 00004AB0 */ 0x18, 0x00, 0x00, 0x86, 0x18, 0x00, 0x00, 0x87, 0x18, 0x00, 0x00, 0xC0, 0x18, 0x00, 0x00, 0x3C, +/* 00004AC0 */ 0x19, 0x00, 0x00, 0xC9, 0x19, 0x00, 0x00, 0xF1, 0x19, 0x00, 0x00, 0x1B, 0x1A, 0x00, 0x00, 0x6B, +/* 00004AD0 */ 0x1A, 0x00, 0x00, 0x76, 0x1A, 0x00, 0x00, 0xBF, 0x1A, 0x00, 0x00, 0x1C, 0x1B, 0x00, 0x00, 0x82, +/* 00004AE0 */ 0x1B, 0x00, 0x00, 0x83, 0x1B, 0x00, 0x00, 0xA9, 0x1B, 0x00, 0x00, 0x09, 0x1C, 0x00, 0x00, 0x51, +/* 00004AF0 */ 0x1C, 0x00, 0x00, 0x7F, 0x1C, 0x00, 0x00, 0xA5, 0x1C, 0x00, 0x00, 0xA6, 0x1C, 0x00, 0x00, 0xE3, +/* 00004B00 */ 0x1C, 0x00, 0x00, 0x1A, 0x1D, 0x00, 0x00, 0x1B, 0x1D, 0x00, 0x00, 0x81, 0x1D, 0x00, 0x00, 0x82, +/* 00004B10 */ 0x1D, 0x00, 0x00, 0xF2, 0x1D, 0x00, 0x00, 0x70, 0x1E, 0x00, 0x00, 0x77, 0x1E, 0x00, 0x00, 0x78, +/* 00004B20 */ 0x1E, 0x00, 0x00, 0xD2, 0x1E, 0x00, 0x00, 0x3F, 0x1F, 0x00, 0x00, 0xAB, 0x1F, 0x00, 0x00, 0x13, +/* 00004B30 */ 0x20, 0x00, 0x00, 0x82, 0x20, 0x00, 0x00, 0xE2, 0x20, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x01, +/* 00004B40 */ 0x21, 0x00, 0x00, 0x26, 0x21, 0x00, 0x00, 0x51, 0x21, 0x00, 0x00, 0x86, 0x21, 0x00, 0x00, 0xAA, +/* 00004B50 */ 0x21, 0x00, 0x00, 0xB4, 0x21, 0x00, 0x00, 0xB5, 0x21, 0x00, 0x00, 0xE9, 0x21, 0x00, 0x00, 0x00, +/* 00004B60 */ 0x22, 0x00, 0x00, 0x4F, 0x22, 0x00, 0x00, 0x81, 0x22, 0x00, 0x00, 0xA5, 0x22, 0x00, 0x00, 0xB6, +/* 00004B70 */ 0x22, 0x00, 0x00, 0xDC, 0x22, 0x00, 0x00, 0xE6, 0x22, 0x00, 0x00, 0xE7, 0x22, 0x00, 0x00, 0x07, +/* 00004B80 */ 0x23, 0x00, 0x00, 0x0E, 0x23, 0x00, 0x00, 0x0F, 0x23, 0x00, 0x00, 0x74, 0x23, 0x00, 0x00, 0xA0, +/* 00004B90 */ 0x23, 0x00, 0x00, 0xE6, 0x23, 0x00, 0x00, 0xFC, 0x23, 0x00, 0x00, 0x06, 0x24, 0x00, 0x00, 0x0D, +/* 00004BA0 */ 0x24, 0x00, 0x00, 0x0E, 0x24, 0x00, 0x00, 0x3F, 0x24, 0x00, 0x00, 0x76, 0x24, 0x00, 0x00, 0x7D, +/* 00004BB0 */ 0x24, 0x00, 0x00, 0x7E, 0x24, 0x00, 0x00, 0xB2, 0x24, 0x00, 0x00, 0xF0, 0x24, 0x00, 0x00, 0xF6, +/* 00004BC0 */ 0x24, 0x00, 0x00, 0xF7, 0x24, 0x00, 0x00, 0x51, 0x25, 0x00, 0x00, 0x7C, 0x25, 0x00, 0x00, 0xA5, +/* 00004BD0 */ 0x25, 0x00, 0x00, 0xD0, 0x25, 0x00, 0x00, 0xDA, 0x25, 0x00, 0x00, 0xDB, 0x25, 0x00, 0x00, 0xFB, +/* 00004BE0 */ 0x25, 0x00, 0x00, 0x02, 0x26, 0x00, 0x00, 0x03, 0x26, 0x00, 0x00, 0x0B, 0x26, 0x00, 0x00, 0x4E, +/* 00004BF0 */ 0x26, 0x00, 0x00, 0x55, 0x26, 0x00, 0x00, 0x7F, 0x26, 0x00, 0x00, 0x86, 0x26, 0x00, 0x00, 0xF7, +/* 00004C00 */ 0x26, 0x00, 0x00, 0x54, 0x27, 0x00, 0x00, 0xA4, 0x27, 0x00, 0x00, 0xAC, 0x27, 0x00, 0x00, 0xF3, +/* 00004C10 */ 0x27, 0x00, 0x00, 0x17, 0x28, 0x00, 0x00, 0x35, 0x28, 0x00, 0x00, 0x3F, 0x28, 0x00, 0x00, 0x40, +/* 00004C20 */ 0x28, 0x00, 0x00, 0x60, 0x28, 0x00, 0x00, 0x7C, 0x28, 0x00, 0x00, 0x93, 0x28, 0x00, 0x00, 0xC3, +/* 00004C30 */ 0x28, 0x00, 0x00, 0xE5, 0x28, 0x00, 0x00, 0xF3, 0x28, 0x00, 0x00, 0xF4, 0x28, 0x00, 0x00, 0x0E, +/* 00004C40 */ 0x29, 0x00, 0x00, 0x4C, 0x29, 0x00, 0x00, 0x7B, 0x29, 0x00, 0x00, 0x98, 0x29, 0x00, 0x00, 0xB3, +/* 00004C50 */ 0x29, 0x00, 0x00, 0xC5, 0x29, 0x00, 0x00, 0xD3, 0x29, 0x00, 0x00, 0xD4, 0x29, 0x00, 0x00, 0xF2, +/* 00004C60 */ 0x29, 0x00, 0x00, 0x14, 0x2A, 0x00, 0x00, 0x58, 0x2A, 0x00, 0x00, 0xA6, 0x2A, 0x00, 0x00, 0xE9, +/* 00004C70 */ 0x2A, 0x00, 0x00, 0x38, 0x2B, 0x00, 0x00, 0x68, 0x2B, 0x00, 0x00, 0xB1, 0x2B, 0x00, 0x00, 0xCB, +/* 00004C80 */ 0x2B, 0x00, 0x00, 0xD9, 0x2B, 0x00, 0x00, 0xDA, 0x2B, 0x00, 0x00, 0x12, 0x2C, 0x00, 0x00, 0x1C, +/* 00004C90 */ 0x2C, 0x00, 0x00, 0x23, 0x2C, 0x00, 0x00, 0x24, 0x2C, 0x00, 0x00, 0x2C, 0x2C, 0x00, 0x00, 0x78, +/* 00004CA0 */ 0x2C, 0x00, 0x00, 0x7F, 0x2C, 0x00, 0x00, 0xA3, 0x2C, 0x00, 0x00, 0xAA, 0x2C, 0x00, 0x00, 0x1B, +/* 00004CB0 */ 0x2D, 0x00, 0x00, 0x63, 0x2D, 0x00, 0x00, 0x6B, 0x2D, 0x00, 0x00, 0xB6, 0x2D, 0x00, 0x00, 0xD9, +/* 00004CC0 */ 0x2D, 0x00, 0x00, 0x15, 0x2E, 0x00, 0x00, 0x5A, 0x2E, 0x00, 0x00, 0x84, 0x2E, 0x00, 0x00, 0x9E, +/* 00004CD0 */ 0x2E, 0x00, 0x00, 0xAC, 0x2E, 0x00, 0x00, 0xAD, 0x2E, 0x00, 0x00, 0x0D, 0x2F, 0x00, 0x00, 0x3E, +/* 00004CE0 */ 0x2F, 0x00, 0x00, 0x6F, 0x2F, 0x00, 0x00, 0xB1, 0x2F, 0x00, 0x00, 0xF8, 0x2F, 0x00, 0x00, 0x0A, +/* 00004CF0 */ 0x30, 0x00, 0x00, 0x0B, 0x30, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x00, 0x38, 0x30, 0x00, 0x00, 0x42, +/* 00004D00 */ 0x30, 0x00, 0x00, 0x43, 0x30, 0x00, 0x00, 0x6F, 0x30, 0x00, 0x00, 0x86, 0x30, 0x00, 0x00, 0x8D, +/* 00004D10 */ 0x30, 0x00, 0x00, 0x8E, 0x30, 0x00, 0x00, 0xB8, 0x30, 0x00, 0x00, 0xB9, 0x30, 0x00, 0x00, 0xC1, +/* 00004D20 */ 0x30, 0x00, 0x00, 0x08, 0x31, 0x00, 0x00, 0x0F, 0x31, 0x00, 0x00, 0x3B, 0x31, 0x00, 0x00, 0x42, +/* 00004D30 */ 0x31, 0x00, 0x00, 0x9F, 0x31, 0x00, 0x00, 0xFD, 0x31, 0x00, 0x00, 0x05, 0x32, 0x00, 0x00, 0x43, +/* 00004D40 */ 0x32, 0x00, 0x00, 0x6A, 0x32, 0x00, 0x00, 0x6B, 0x32, 0x00, 0x00, 0x94, 0x32, 0x00, 0x00, 0xCE, +/* 00004D50 */ 0x32, 0x00, 0x00, 0xE8, 0x32, 0x00, 0x00, 0x0B, 0x33, 0x00, 0x00, 0x28, 0x33, 0x00, 0x00, 0x43, +/* 00004D60 */ 0x33, 0x00, 0x00, 0x61, 0x33, 0x00, 0x00, 0x7D, 0x33, 0x00, 0x00, 0xBB, 0x33, 0x00, 0x00, 0xF4, +/* 00004D70 */ 0x33, 0x00, 0x00, 0x15, 0x34, 0x00, 0x00, 0x36, 0x34, 0x00, 0x00, 0x5D, 0x34, 0x00, 0x00, 0x7D, +/* 00004D80 */ 0x34, 0x00, 0x00, 0x9E, 0x34, 0x00, 0x00, 0xB7, 0x34, 0x00, 0x00, 0xD4, 0x34, 0x00, 0x00, 0xF3, +/* 00004D90 */ 0x34, 0x00, 0x00, 0x05, 0x35, 0x00, 0x00, 0x13, 0x35, 0x00, 0x00, 0x14, 0x35, 0x00, 0x00, 0x4B, +/* 00004DA0 */ 0x35, 0x00, 0x00, 0x55, 0x35, 0x00, 0x00, 0x56, 0x35, 0x00, 0x00, 0x8D, 0x35, 0x00, 0x00, 0xC2, +/* 00004DB0 */ 0x35, 0x00, 0x00, 0xF0, 0x35, 0x00, 0x00, 0x07, 0x36, 0x00, 0x00, 0x18, 0x36, 0x00, 0x00, 0x36, +/* 00004DC0 */ 0x36, 0x00, 0x00, 0x40, 0x36, 0x00, 0x00, 0x47, 0x36, 0x00, 0x00, 0x48, 0x36, 0x00, 0x00, 0x50, +/* 00004DD0 */ 0x36, 0x00, 0x00, 0xAE, 0x36, 0x00, 0x00, 0x03, 0x37, 0x00, 0x00, 0x0A, 0x37, 0x00, 0x00, 0x2E, +/* 00004DE0 */ 0x37, 0x00, 0x00, 0x35, 0x37, 0x00, 0x00, 0xA6, 0x37, 0x00, 0x00, 0x20, 0x38, 0x00, 0x00, 0x9B, +/* 00004DF0 */ 0x38, 0x00, 0x00, 0xCE, 0x38, 0x00, 0x00, 0x4A, 0x39, 0x00, 0x00, 0x52, 0x39, 0x00, 0x00, 0xBD, +/* 00004E00 */ 0x39, 0x00, 0x00, 0xEC, 0x39, 0x00, 0x00, 0xFB, 0x39, 0x00, 0x00, 0x1F, 0x3A, 0x00, 0x00, 0x63, +/* 00004E10 */ 0x3A, 0x00, 0x00, 0x74, 0x3A, 0x00, 0x00, 0xB9, 0x3A, 0x00, 0x00, 0xC3, 0x3A, 0x00, 0x00, 0xC4, +/* 00004E20 */ 0x3A, 0x00, 0x00, 0xE8, 0x3A, 0x00, 0x00, 0x22, 0x3B, 0x00, 0x00, 0x49, 0x3B, 0x00, 0x00, 0x83, +/* 00004E30 */ 0x3B, 0x00, 0x00, 0xE8, 0x3B, 0x00, 0x00, 0x12, 0x3C, 0x00, 0x00, 0x43, 0x3C, 0x00, 0x00, 0x62, +/* 00004E40 */ 0x3C, 0x00, 0x00, 0xB2, 0x3C, 0x00, 0x00, 0xE6, 0x3C, 0x00, 0x00, 0x17, 0x3D, 0x00, 0x00, 0x6B, +/* 00004E50 */ 0x3D, 0x00, 0x00, 0x9F, 0x3D, 0x00, 0x00, 0xEC, 0x3D, 0x00, 0x00, 0x06, 0x3E, 0x00, 0x00, 0x55, +/* 00004E60 */ 0x3E, 0x00, 0x00, 0x7D, 0x3E, 0x00, 0x00, 0x93, 0x3E, 0x00, 0x00, 0xA5, 0x3E, 0x00, 0x00, 0xB3, +/* 00004E70 */ 0x3E, 0x00, 0x00, 0xB4, 0x3E, 0x00, 0x00, 0xE6, 0x3E, 0x00, 0x00, 0x19, 0x3F, 0x00, 0x00, 0x63, +/* 00004E80 */ 0x3F, 0x00, 0x00, 0x95, 0x3F, 0x00, 0x00, 0xC3, 0x3F, 0x00, 0x00, 0xFC, 0x3F, 0x00, 0x00, 0x12, +/* 00004E90 */ 0x40, 0x00, 0x00, 0x24, 0x40, 0x00, 0x00, 0x32, 0x40, 0x00, 0x00, 0x33, 0x40, 0x00, 0x00, 0x54, +/* 00004EA0 */ 0x40, 0x00, 0x00, 0x92, 0x40, 0x00, 0x00, 0x9E, 0x40, 0x00, 0x00, 0x9F, 0x40, 0x00, 0x00, 0xCC, +/* 00004EB0 */ 0x40, 0x00, 0x00, 0x12, 0x41, 0x00, 0x00, 0x39, 0x41, 0x00, 0x00, 0x6C, 0x41, 0x00, 0x00, 0x81, +/* 00004EC0 */ 0x41, 0x00, 0x00, 0xD1, 0x41, 0x00, 0x00, 0x1F, 0x42, 0x00, 0x00, 0x70, 0x42, 0x00, 0x00, 0x7E, +/* 00004ED0 */ 0x42, 0x00, 0x00, 0x7F, 0x42, 0x00, 0x00, 0xC5, 0x42, 0x00, 0x00, 0xCF, 0x42, 0x00, 0x00, 0xD0, +/* 00004EE0 */ 0x42, 0x00, 0x00, 0xF5, 0x42, 0x00, 0x00, 0x0C, 0x43, 0x00, 0x00, 0x13, 0x43, 0x00, 0x00, 0x14, +/* 00004EF0 */ 0x43, 0x00, 0x00, 0x2E, 0x43, 0x00, 0x00, 0x44, 0x43, 0x00, 0x00, 0x62, 0x43, 0x00, 0x00, 0x8E, +/* 00004F00 */ 0x43, 0x00, 0x00, 0x9C, 0x43, 0x00, 0x00, 0xD8, 0x43, 0x00, 0x00, 0xE3, 0x43, 0x00, 0x00, 0xE4, +/* 00004F10 */ 0x43, 0x00, 0x00, 0xFA, 0x43, 0x00, 0x00, 0x36, 0x44, 0x00, 0x00, 0x41, 0x44, 0x00, 0x00, 0x42, +/* 00004F20 */ 0x44, 0x00, 0x00, 0x58, 0x44, 0x00, 0x00, 0x8E, 0x44, 0x00, 0x00, 0x99, 0x44, 0x00, 0x00, 0x9A, +/* 00004F30 */ 0x44, 0x00, 0x00, 0xB8, 0x44, 0x00, 0x00, 0xF5, 0x44, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x01, +/* 00004F40 */ 0x45, 0x00, 0x00, 0x18, 0x45, 0x00, 0x00, 0x3E, 0x45, 0x00, 0x00, 0x5F, 0x45, 0x00, 0x00, 0x79, +/* 00004F50 */ 0x45, 0x00, 0x00, 0xB5, 0x45, 0x00, 0x00, 0xD4, 0x45, 0x00, 0x00, 0xE2, 0x45, 0x00, 0x00, 0xE3, +/* 00004F60 */ 0x45, 0x00, 0x00, 0x13, 0x46, 0x00, 0x00, 0x31, 0x46, 0x00, 0x00, 0x4D, 0x46, 0x00, 0x00, 0x62, +/* 00004F70 */ 0x46, 0x00, 0x00, 0x7E, 0x46, 0x00, 0x00, 0x8C, 0x46, 0x00, 0x00, 0x97, 0x46, 0x00, 0x00, 0x98, +/* 00004F80 */ 0x46, 0x00, 0x00, 0xAE, 0x46, 0x00, 0x00, 0xDD, 0x46, 0x00, 0x00, 0xF9, 0x46, 0x00, 0x00, 0x13, +/* 00004F90 */ 0x47, 0x00, 0x00, 0x21, 0x47, 0x00, 0x00, 0x22, 0x47, 0x00, 0x00, 0x4C, 0x47, 0x00, 0x00, 0x76, +/* 00004FA0 */ 0x47, 0x00, 0x00, 0x80, 0x47, 0x00, 0x00, 0x88, 0x47, 0x00, 0x00, 0x89, 0x47, 0x00, 0x00, 0xB0, +/* 00004FB0 */ 0x47, 0x00, 0x00, 0xF4, 0x47, 0x00, 0x00, 0x1B, 0x48, 0x00, 0x00, 0x1C, 0x48, 0x00, 0x00, 0x3F, +/* 00004FC0 */ 0x48, 0x00, 0x00, 0x64, 0x48, 0x00, 0x00, 0x9E, 0x48, 0x00, 0x00, 0xAC, 0x48, 0x00, 0x00, 0xAD, +/* 00004FD0 */ 0x48, 0x00, 0x00, 0xD1, 0x48, 0x00, 0x00, 0x03, 0x49, 0x00, 0x00, 0x11, 0x49, 0x00, 0x00, 0x12, +/* 00004FE0 */ 0x49, 0x00, 0x00, 0x36, 0x49, 0x00, 0x00, 0x68, 0x49, 0x00, 0x00, 0x76, 0x49, 0x00, 0x00, 0x77, +/* 00004FF0 */ 0x49, 0x00, 0x00, 0xC6, 0x49, 0x00, 0x00, 0x3F, 0x4A, 0x00, 0x00, 0x4D, 0x4A, 0x00, 0x00, 0x4E, +/* 00005000 */ 0x4A, 0x00, 0x00, 0x68, 0x4A, 0x00, 0x00, 0x72, 0x4A, 0x00, 0x00, 0x73, 0x4A, 0x00, 0x00, 0x8C, +/* 00005010 */ 0x4A, 0x00, 0x00, 0x92, 0x4A, 0x00, 0x00, 0x93, 0x4A, 0x00, 0x00, 0x9B, 0x4A, 0x00, 0x00, 0xF6, +/* 00005020 */ 0x4A, 0x00, 0x00, 0x47, 0x4B, 0x00, 0x00, 0x7A, 0x4B, 0x00, 0x00, 0x81, 0x4B, 0x00, 0x00, 0xDA, +/* 00005030 */ 0x4B, 0x00, 0x00, 0x28, 0x4C, 0x00, 0x00, 0x2F, 0x4C, 0x00, 0x00, 0x58, 0x4C, 0x00, 0x00, 0x5F, +/* 00005040 */ 0x4C, 0x00, 0x00, 0x9B, 0x4C, 0x00, 0x00, 0xEE, 0x4C, 0x00, 0x00, 0x3B, 0x4D, 0x00, 0x00, 0x88, +/* 00005050 */ 0x4D, 0x00, 0x00, 0xE2, 0x4D, 0x00, 0x00, 0xFB, 0x4D, 0x00, 0x00, 0x03, 0x4E, 0x00, 0x00, 0x5A, +/* 00005060 */ 0x4E, 0x00, 0x00, 0x81, 0x4E, 0x00, 0x00, 0xA4, 0x4E, 0x00, 0x00, 0xD2, 0x4E, 0x00, 0x00, 0x1A, +/* 00005070 */ 0x4F, 0x00, 0x00, 0x87, 0x4F, 0x00, 0x00, 0x95, 0x4F, 0x00, 0x00, 0xB8, 0x4F, 0x00, 0x00, 0xC2, +/* 00005080 */ 0x4F, 0x00, 0x00, 0xC3, 0x4F, 0x00, 0x00, 0xDC, 0x4F, 0x00, 0x00, 0xE3, 0x4F, 0x00, 0x00, 0xE4, +/* 00005090 */ 0x4F, 0x00, 0x00, 0xFE, 0x4F, 0x00, 0x00, 0x28, 0x50, 0x00, 0x00, 0x52, 0x50, 0x00, 0x00, 0x58, +/* 000050A0 */ 0x50, 0x00, 0x00, 0x59, 0x50, 0x00, 0x00, 0x61, 0x50, 0x00, 0x00, 0xCC, 0x50, 0x00, 0x00, 0xFC, +/* 000050B0 */ 0x50, 0x00, 0x00, 0x03, 0x51, 0x00, 0x00, 0x3C, 0x51, 0x00, 0x00, 0x44, 0x51, 0x00, 0x00, 0x6C, +/* 000050C0 */ 0x51, 0x00, 0x00, 0xB1, 0x51, 0x00, 0x00, 0x15, 0x52, 0x00, 0x00, 0x95, 0x52, 0x00, 0x00, 0x96, +/* 000050D0 */ 0x52, 0x00, 0x00, 0x08, 0x53, 0x00, 0x00, 0x39, 0x53, 0x00, 0x00, 0x88, 0x53, 0x00, 0x00, 0xDA, +/* 000050E0 */ 0x53, 0x00, 0x00, 0x2E, 0x54, 0x00, 0x00, 0x66, 0x54, 0x00, 0x00, 0xB8, 0x54, 0x00, 0x00, 0x0A, +/* 000050F0 */ 0x55, 0x00, 0x00, 0x5F, 0x55, 0x00, 0x00, 0xCB, 0x55, 0x00, 0x00, 0x21, 0x56, 0x00, 0x00, 0x22, +/* 00005100 */ 0x56, 0x00, 0x00, 0x41, 0x56, 0x00, 0x00, 0x60, 0x56, 0x00, 0x00, 0x92, 0x56, 0x00, 0x00, 0x93, +/* 00005110 */ 0x56, 0x00, 0x00, 0x0A, 0x57, 0x00, 0x00, 0x77, 0x57, 0x00, 0x00, 0xCA, 0x57, 0x00, 0x00, 0x0D, +/* 00005120 */ 0x58, 0x00, 0x00, 0x0E, 0x58, 0x00, 0x00, 0x8B, 0x58, 0x00, 0x00, 0x1F, 0x59, 0x00, 0x00, 0xA2, +/* 00005130 */ 0x59, 0x00, 0x00, 0x25, 0x5A, 0x00, 0x00, 0x98, 0x5A, 0x00, 0x00, 0x99, 0x5A, 0x00, 0x00, 0x03, +/* 00005140 */ 0x5B, 0x00, 0x00, 0x7C, 0x5B, 0x00, 0x00, 0x7D, 0x5B, 0x00, 0x00, 0xE0, 0x5B, 0x00, 0x00, 0x6F, +/* 00005150 */ 0x5C, 0x00, 0x00, 0x18, 0x5D, 0x00, 0x00, 0xAC, 0x5D, 0x00, 0x00, 0x43, 0x5E, 0x00, 0x00, 0xE7, +/* 00005160 */ 0x5E, 0x00, 0x00, 0xFB, 0x5E, 0x00, 0x00, 0xFC, 0x5E, 0x00, 0x00, 0x2C, 0x5F, 0x00, 0x00, 0x98, +/* 00005170 */ 0x5F, 0x00, 0x00, 0x08, 0x60, 0x00, 0x00, 0x78, 0x60, 0x00, 0x00, 0xEA, 0x60, 0x00, 0x00, 0x5E, +/* 00005180 */ 0x61, 0x00, 0x00, 0xD2, 0x61, 0x00, 0x00, 0x1C, 0x62, 0x00, 0x00, 0x1D, 0x62, 0x00, 0x00, 0x8A, +/* 00005190 */ 0x62, 0x00, 0x00, 0x8B, 0x62, 0x00, 0x00, 0xD7, 0x62, 0x00, 0x00, 0x4B, 0x63, 0x00, 0x00, 0xDD, +/* 000051A0 */ 0x63, 0x00, 0x00, 0x6F, 0x64, 0x00, 0x00, 0x70, 0x64, 0x00, 0x00, 0xA4, 0x64, 0x00, 0x00, 0xC8, +/* 000051B0 */ 0x64, 0x00, 0x00, 0x04, 0x65, 0x00, 0x00, 0x1E, 0x65, 0x00, 0x00, 0x3D, 0x65, 0x00, 0x00, 0x4B, +/* 000051C0 */ 0x65, 0x00, 0x00, 0x4C, 0x65, 0x00, 0x00, 0x85, 0x65, 0x00, 0x00, 0x9F, 0x65, 0x00, 0x00, 0xBC, +/* 000051D0 */ 0x65, 0x00, 0x00, 0xCA, 0x65, 0x00, 0x00, 0xCB, 0x65, 0x00, 0x00, 0xEF, 0x65, 0x00, 0x00, 0x14, +/* 000051E0 */ 0x66, 0x00, 0x00, 0x35, 0x66, 0x00, 0x00, 0x51, 0x66, 0x00, 0x00, 0x78, 0x66, 0x00, 0x00, 0xA4, +/* 000051F0 */ 0x66, 0x00, 0x00, 0xB2, 0x66, 0x00, 0x00, 0xB3, 0x66, 0x00, 0x00, 0xCF, 0x66, 0x00, 0x00, 0xF6, +/* 00005200 */ 0x66, 0x00, 0x00, 0x22, 0x67, 0x00, 0x00, 0x30, 0x67, 0x00, 0x00, 0x31, 0x67, 0x00, 0x00, 0x4D, +/* 00005210 */ 0x67, 0x00, 0x00, 0x76, 0x67, 0x00, 0x00, 0x84, 0x67, 0x00, 0x00, 0x85, 0x67, 0x00, 0x00, 0xA1, +/* 00005220 */ 0x67, 0x00, 0x00, 0xCC, 0x67, 0x00, 0x00, 0xCD, 0x67, 0x00, 0x00, 0x17, 0x68, 0x00, 0x00, 0x56, +/* 00005230 */ 0x68, 0x00, 0x00, 0x98, 0x68, 0x00, 0x00, 0xCD, 0x68, 0x00, 0x00, 0xEF, 0x68, 0x00, 0x00, 0x05, +/* 00005240 */ 0x69, 0x00, 0x00, 0x06, 0x69, 0x00, 0x00, 0x21, 0x69, 0x00, 0x00, 0x87, 0x69, 0x00, 0x00, 0xF6, +/* 00005250 */ 0x69, 0x00, 0x00, 0x3A, 0x6A, 0x00, 0x00, 0x90, 0x6A, 0x00, 0x00, 0xA6, 0x6A, 0x00, 0x00, 0xA7, +/* 00005260 */ 0x6A, 0x00, 0x00, 0xCC, 0x6A, 0x00, 0x00, 0x3E, 0x6B, 0x00, 0x00, 0x9F, 0x6B, 0x00, 0x00, 0xFA, +/* 00005270 */ 0x6B, 0x00, 0x00, 0x10, 0x6C, 0x00, 0x00, 0x11, 0x6C, 0x00, 0x00, 0x6F, 0x6C, 0x00, 0x00, 0x8A, +/* 00005280 */ 0x6C, 0x00, 0x00, 0x9C, 0x6C, 0x00, 0x00, 0xAA, 0x6C, 0x00, 0x00, 0xAB, 0x6C, 0x00, 0x00, 0xDD, +/* 00005290 */ 0x6C, 0x00, 0x00, 0xDE, 0x6C, 0x00, 0x00, 0xF6, 0x6C, 0x00, 0x00, 0x01, 0x6D, 0x00, 0x00, 0x0B, +/* 000052A0 */ 0x6D, 0x00, 0x00, 0x0C, 0x6D, 0x00, 0x00, 0x43, 0x6D, 0x00, 0x00, 0x6B, 0x6D, 0x00, 0x00, 0x6C, +/* 000052B0 */ 0x6D, 0x00, 0x00, 0x8D, 0x6D, 0x00, 0x00, 0xB5, 0x6D, 0x00, 0x00, 0xBF, 0x6D, 0x00, 0x00, 0xC0, +/* 000052C0 */ 0x6D, 0x00, 0x00, 0x0C, 0x6E, 0x00, 0x00, 0x12, 0x6E, 0x00, 0x00, 0x13, 0x6E, 0x00, 0x00, 0x1B, +/* 000052D0 */ 0x6E, 0x00, 0x00, 0x76, 0x6E, 0x00, 0x00, 0xA5, 0x6E, 0x00, 0x00, 0xAC, 0x6E, 0x00, 0x00, 0xFF, +/* 000052E0 */ 0x6E, 0x00, 0x00, 0x5C, 0x6F, 0x00, 0x00, 0xB7, 0x6F, 0x00, 0x00, 0xE1, 0x6F, 0x00, 0x00, 0xE8, +/* 000052F0 */ 0x6F, 0x00, 0x00, 0x1C, 0x70, 0x00, 0x00, 0x23, 0x70, 0x00, 0x00, 0x55, 0x70, 0x00, 0x00, 0x6F, +/* 00005300 */ 0x70, 0x00, 0x00, 0x77, 0x70, 0x00, 0x00, 0xB6, 0x70, 0x00, 0x00, 0xE3, 0x70, 0x00, 0x00, 0x02, +/* 00005310 */ 0x71, 0x00, 0x00, 0x1C, 0x71, 0x00, 0x00, 0x26, 0x71, 0x00, 0x00, 0x27, 0x71, 0x00, 0x00, 0x4B, +/* 00005320 */ 0x71, 0x00, 0x00, 0x6A, 0x71, 0x00, 0x00, 0xA6, 0x71, 0x00, 0x00, 0xDD, 0x71, 0x00, 0x00, 0xDE, +/* 00005330 */ 0x71, 0x00, 0x00, 0x1B, 0x72, 0x00, 0x00, 0x39, 0x72, 0x00, 0x00, 0x47, 0x72, 0x00, 0x00, 0x51, +/* 00005340 */ 0x72, 0x00, 0x00, 0x52, 0x72, 0x00, 0x00, 0x73, 0x72, 0x00, 0x00, 0xB7, 0x72, 0x00, 0x00, 0x3F, +/* 00005350 */ 0x73, 0x00, 0x00, 0x7A, 0x73, 0x00, 0x00, 0x7B, 0x73, 0x00, 0x00, 0xBD, 0x73, 0x00, 0x00, 0xC7, +/* 00005360 */ 0x73, 0x00, 0x00, 0xC8, 0x73, 0x00, 0x00, 0xDD, 0x73, 0x00, 0x00, 0xE4, 0x73, 0x00, 0x00, 0xE5, +/* 00005370 */ 0x73, 0x00, 0x00, 0xED, 0x73, 0x00, 0x00, 0x46, 0x74, 0x00, 0x00, 0x93, 0x74, 0x00, 0x00, 0x9A, +/* 00005380 */ 0x74, 0x00, 0x00, 0xC6, 0x74, 0x00, 0x00, 0xCD, 0x74, 0x00, 0x00, 0x23, 0x75, 0x00, 0x00, 0x2B, +/* 00005390 */ 0x75, 0x00, 0x00, 0x63, 0x75, 0x00, 0x00, 0x91, 0x75, 0x00, 0x00, 0xA8, 0x75, 0x00, 0x00, 0xB2, +/* 000053A0 */ 0x75, 0x00, 0x00, 0xB3, 0x75, 0x00, 0x00, 0xCC, 0x75, 0x00, 0x00, 0x24, 0x76, 0x00, 0x00, 0x55, +/* 000053B0 */ 0x76, 0x00, 0x00, 0x70, 0x76, 0x00, 0x00, 0x71, 0x76, 0x00, 0x00, 0x8B, 0x76, 0x00, 0x00, 0xB8, +/* 000053C0 */ 0x76, 0x00, 0x00, 0xD3, 0x76, 0x00, 0x00, 0xF9, 0x76, 0x00, 0x00, 0x5E, 0x77, 0x00, 0x00, 0x9E, +/* 000053D0 */ 0x77, 0x00, 0x00, 0xB0, 0x77, 0x00, 0x00, 0xB1, 0x77, 0x00, 0x00, 0xE8, 0x77, 0x00, 0x00, 0x24, +/* 000053E0 */ 0x78, 0x00, 0x00, 0x60, 0x78, 0x00, 0x00, 0x72, 0x78, 0x00, 0x00, 0x73, 0x78, 0x00, 0x00, 0xC0, +/* 000053F0 */ 0x78, 0x00, 0x00, 0xF6, 0x78, 0x00, 0x00, 0x52, 0x79, 0x00, 0x00, 0x8E, 0x79, 0x00, 0x00, 0xDA, +/* 00005400 */ 0x79, 0x00, 0x00, 0x5C, 0x7A, 0x00, 0x00, 0x6E, 0x7A, 0x00, 0x00, 0x7C, 0x7A, 0x00, 0x00, 0x7D, +/* 00005410 */ 0x7A, 0x00, 0x00, 0x91, 0x7A, 0x00, 0x00, 0x9B, 0x7A, 0x00, 0x00, 0x9C, 0x7A, 0x00, 0x00, 0xB1, +/* 00005420 */ 0x7A, 0x00, 0x00, 0xB8, 0x7A, 0x00, 0x00, 0xB9, 0x7A, 0x00, 0x00, 0xC1, 0x7A, 0x00, 0x00, 0x2C, +/* 00005430 */ 0x7B, 0x00, 0x00, 0x33, 0x7B, 0x00, 0x00, 0x5F, 0x7B, 0x00, 0x00, 0x66, 0x7B, 0x00, 0x00, 0xD7, +/* 00005440 */ 0x7B, 0x00, 0x00, 0x08, 0x7C, 0x00, 0x00, 0x10, 0x7C, 0x00, 0x00, 0x64, 0x7C, 0x00, 0x00, 0x7F, +/* 00005450 */ 0x7C, 0x00, 0x00, 0x92, 0x7C, 0x00, 0x00, 0xCA, 0x7C, 0x00, 0x00, 0x0C, 0x7D, 0x00, 0x00, 0x68, +/* 00005460 */ 0x7D, 0x00, 0x00, 0xDE, 0x7D, 0x00, 0x00, 0xEC, 0x7D, 0x00, 0x00, 0xF8, 0x7D, 0x00, 0x00, 0xF9, +/* 00005470 */ 0x7D, 0x00, 0x00, 0x10, 0x7E, 0x00, 0x00, 0x17, 0x7E, 0x00, 0x00, 0x18, 0x7E, 0x00, 0x00, 0x54, +/* 00005480 */ 0x7E, 0x00, 0x00, 0x55, 0x7E, 0x00, 0x00, 0x5D, 0x7E, 0x00, 0x00, 0xAC, 0x7E, 0x00, 0x00, 0xB3, +/* 00005490 */ 0x7E, 0x00, 0x00, 0x0C, 0x7F, 0x00, 0x00, 0x38, 0x7F, 0x00, 0x00, 0x3F, 0x7F, 0x00, 0x00, 0x67, +/* 000054A0 */ 0x7F, 0x00, 0x00, 0x6E, 0x7F, 0x00, 0x00, 0xF2, 0x7F, 0x00, 0x00, 0x60, 0x80, 0x00, 0x00, 0xA5, +/* 000054B0 */ 0x80, 0x00, 0x00, 0xEA, 0x80, 0x00, 0x00, 0xF2, 0x80, 0x00, 0x00, 0x52, 0x81, 0x00, 0x00, 0xA3, +/* 000054C0 */ 0x81, 0x00, 0x00, 0xFF, 0x81, 0x00, 0x00, 0x3B, 0x82, 0x00, 0x00, 0xA0, 0x82, 0x00, 0x00, 0xCD, +/* 000054D0 */ 0x82, 0x00, 0x00, 0xFB, 0x82, 0x00, 0x00, 0x29, 0x83, 0x00, 0x00, 0x2A, 0x83, 0x00, 0x00, 0x5F, +/* 000054E0 */ 0x83, 0x00, 0x00, 0x94, 0x83, 0x00, 0x00, 0xCC, 0x83, 0x00, 0x00, 0x1E, 0x84, 0x00, 0x00, 0x7A, +/* 000054F0 */ 0x84, 0x00, 0x00, 0xE8, 0x84, 0x00, 0x00, 0x5A, 0x85, 0x00, 0x00, 0x8F, 0x85, 0x00, 0x00, 0xC4, +/* 00005500 */ 0x85, 0x00, 0x00, 0xCE, 0x85, 0x00, 0x00, 0xD5, 0x85, 0x00, 0x00, 0xD6, 0x85, 0x00, 0x00, 0xDE, +/* 00005510 */ 0x85, 0x00, 0x00, 0x35, 0x86, 0x00, 0x00, 0x69, 0x86, 0x00, 0x00, 0x70, 0x86, 0x00, 0x00, 0x96, +/* 00005520 */ 0x86, 0x00, 0x00, 0x9D, 0x86, 0x00, 0x00, 0x0E, 0x87, 0x00, 0x00, 0x3F, 0x87, 0x00, 0x00, 0x5E, +/* 00005530 */ 0x87, 0x00, 0x00, 0x66, 0x87, 0x00, 0x00, 0xBD, 0x87, 0x00, 0x00, 0xEB, 0x87, 0x00, 0x00, 0x04, +/* 00005540 */ 0x88, 0x00, 0x00, 0x78, 0x88, 0x00, 0x00, 0xB0, 0x88, 0x00, 0x00, 0xFB, 0x88, 0x00, 0x00, 0x46, +/* 00005550 */ 0x89, 0x00, 0x00, 0x47, 0x89, 0x00, 0x00, 0x83, 0x89, 0x00, 0x00, 0xF3, 0x89, 0x00, 0x00, 0xFD, +/* 00005560 */ 0x89, 0x00, 0x00, 0xFE, 0x89, 0x00, 0x00, 0x4B, 0x8A, 0x00, 0x00, 0xA4, 0x8A, 0x00, 0x00, 0xDB, +/* 00005570 */ 0x8A, 0x00, 0x00, 0xF8, 0x8A, 0x00, 0x00, 0x19, 0x8B, 0x00, 0x00, 0x38, 0x8B, 0x00, 0x00, 0x44, +/* 00005580 */ 0x8B, 0x00, 0x00, 0x45, 0x8B, 0x00, 0x00, 0x66, 0x8B, 0x00, 0x00, 0x6D, 0x8B, 0x00, 0x00, 0x6E, +/* 00005590 */ 0x8B, 0x00, 0x00, 0x8D, 0x8B, 0x00, 0x00, 0x08, 0x8C, 0x00, 0x00, 0x3C, 0x8C, 0x00, 0x00, 0x48, +/* 000055A0 */ 0x8C, 0x00, 0x00, 0x80, 0x8C, 0x00, 0x00, 0xA8, 0x8C, 0x00, 0x00, 0xC4, 0x8C, 0x00, 0x00, 0xE3, +/* 000055B0 */ 0x8C, 0x00, 0x00, 0x02, 0x8D, 0x00, 0x00, 0x0E, 0x8D, 0x00, 0x00, 0x14, 0x8D, 0x00, 0x00, 0x15, +/* 000055C0 */ 0x8D, 0x00, 0x00, 0x1D, 0x8D, 0x00, 0x00, 0x94, 0x8D, 0x00, 0x00, 0x9B, 0x8D, 0x00, 0x00, 0x14, +/* 000055D0 */ 0x8E, 0x00, 0x00, 0x90, 0x8E, 0x00, 0x00, 0x08, 0x8F, 0x00, 0x00, 0x69, 0x8F, 0x00, 0x00, 0x71, +/* 000055E0 */ 0x8F, 0x00, 0x00, 0xC1, 0x8F, 0x00, 0x00, 0xE6, 0x8F, 0x00, 0x00, 0x11, 0x90, 0x00, 0x00, 0x53, +/* 000055F0 */ 0x90, 0x00, 0x00, 0xC6, 0x90, 0x00, 0x00, 0xDE, 0x90, 0x00, 0x00, 0xEC, 0x90, 0x00, 0x00, 0xED, +/* 00005600 */ 0x90, 0x00, 0x00, 0x2A, 0x91, 0x00, 0x00, 0x5F, 0x91, 0x00, 0x00, 0x6D, 0x91, 0x00, 0x00, 0x79, +/* 00005610 */ 0x91, 0x00, 0x00, 0x7A, 0x91, 0x00, 0x00, 0xC0, 0x91, 0x00, 0x00, 0xC7, 0x91, 0x00, 0x00, 0xC8, +/* 00005620 */ 0x91, 0x00, 0x00, 0xFD, 0x91, 0x00, 0x00, 0x21, 0x92, 0x00, 0x00, 0x5D, 0x92, 0x00, 0x00, 0x71, +/* 00005630 */ 0x92, 0x00, 0x00, 0x7B, 0x92, 0x00, 0x00, 0x7C, 0x92, 0x00, 0x00, 0xC7, 0x92, 0x00, 0x00, 0x0D, +/* 00005640 */ 0x93, 0x00, 0x00, 0x64, 0x93, 0x00, 0x00, 0x65, 0x93, 0x00, 0x00, 0xD4, 0x93, 0x00, 0x00, 0x3E, +/* 00005650 */ 0x94, 0x00, 0x00, 0xA9, 0x94, 0x00, 0x00, 0x1D, 0x95, 0x00, 0x00, 0x88, 0x95, 0x00, 0x00, 0x03, +/* 00005660 */ 0x96, 0x00, 0x00, 0x71, 0x96, 0x00, 0x00, 0x9E, 0x96, 0x00, 0x00, 0xFE, 0x96, 0x00, 0x00, 0x67, +/* 00005670 */ 0x97, 0x00, 0x00, 0x68, 0x97, 0x00, 0x00, 0x8C, 0x97, 0x00, 0x00, 0xF9, 0x97, 0x00, 0x00, 0x4E, +/* 00005680 */ 0x98, 0x00, 0x00, 0x92, 0x98, 0x00, 0x00, 0xFA, 0x98, 0x00, 0x00, 0xFB, 0x98, 0x00, 0x00, 0x72, +/* 00005690 */ 0x99, 0x00, 0x00, 0x9A, 0x99, 0x00, 0x00, 0xE5, 0x99, 0x00, 0x00, 0x55, 0x9A, 0x00, 0x00, 0xAE, +/* 000056A0 */ 0x9A, 0x00, 0x00, 0xDE, 0x9A, 0x00, 0x00, 0x05, 0x9B, 0x00, 0x00, 0x5A, 0x9B, 0x00, 0x00, 0x5B, +/* 000056B0 */ 0x9B, 0x00, 0x00, 0xDD, 0x9B, 0x00, 0x00, 0x38, 0x9C, 0x00, 0x00, 0x39, 0x9C, 0x00, 0x00, 0xA8, +/* 000056C0 */ 0x9C, 0x00, 0x00, 0xA9, 0x9C, 0x00, 0x00, 0xDA, 0x9C, 0x00, 0x00, 0xDB, 0x9C, 0x00, 0x00, 0xF8, +/* 000056D0 */ 0x9C, 0x00, 0x00, 0x03, 0x9D, 0x00, 0x00, 0x04, 0x9D, 0x00, 0x00, 0x29, 0x9D, 0x00, 0x00, 0x77, +/* 000056E0 */ 0x9D, 0x00, 0x00, 0x1E, 0x9E, 0x00, 0x00, 0x55, 0x9E, 0x00, 0x00, 0xAB, 0x9E, 0x00, 0x00, 0xB9, +/* 000056F0 */ 0x9E, 0x00, 0x00, 0xBA, 0x9E, 0x00, 0x00, 0xE4, 0x9E, 0x00, 0x00, 0x0E, 0x9F, 0x00, 0x00, 0x0F, +/* 00005700 */ 0x9F, 0x00, 0x00, 0x87, 0x9F, 0x00, 0x00, 0xE2, 0x9F, 0x00, 0x00, 0xFF, 0x9F, 0x00, 0x00, 0x41, +/* 00005710 */ 0xA0, 0x00, 0x00, 0x7E, 0xA0, 0x00, 0x00, 0xB8, 0xA0, 0x00, 0x00, 0x0F, 0xA1, 0x00, 0x00, 0x21, +/* 00005720 */ 0xA1, 0x00, 0x00, 0x22, 0xA1, 0x00, 0x00, 0x59, 0xA1, 0x00, 0x00, 0x6E, 0xA1, 0x00, 0x00, 0x98, +/* 00005730 */ 0xA1, 0x00, 0x00, 0xDB, 0xA1, 0x00, 0x00, 0xE9, 0xA1, 0x00, 0x00, 0xEA, 0xA1, 0x00, 0x00, 0x60, +/* 00005740 */ 0xA2, 0x00, 0x00, 0x9D, 0xA2, 0x00, 0x00, 0x9E, 0xA2, 0x00, 0x00, 0x00, 0xA3, 0x00, 0x00, 0x25, +/* 00005750 */ 0xA3, 0x00, 0x00, 0x39, 0xA3, 0x00, 0x00, 0x43, 0xA3, 0x00, 0x00, 0x44, 0xA3, 0x00, 0x00, 0x6A, +/* 00005760 */ 0xA3, 0x00, 0x00, 0x6B, 0xA3, 0x00, 0x00, 0xDD, 0xA3, 0x00, 0x00, 0x2D, 0xA4, 0x00, 0x00, 0x87, +/* 00005770 */ 0xA4, 0x00, 0x00, 0x88, 0xA4, 0x00, 0x00, 0xBB, 0xA4, 0x00, 0x00, 0xFE, 0xA4, 0x00, 0x00, 0x2C, +/* 00005780 */ 0xA5, 0x00, 0x00, 0x57, 0xA5, 0x00, 0x00, 0x99, 0xA5, 0x00, 0x00, 0xA7, 0xA5, 0x00, 0x00, 0xA8, +/* 00005790 */ 0xA5, 0x00, 0x00, 0xE8, 0xA5, 0x00, 0x00, 0xE9, 0xA5, 0x00, 0x00, 0x0E, 0xA6, 0x00, 0x00, 0x51, +/* 000057A0 */ 0xA6, 0x00, 0x00, 0x84, 0xA6, 0x00, 0x00, 0xA1, 0xA6, 0x00, 0x00, 0xAD, 0xA6, 0x00, 0x00, 0xAE, +/* 000057B0 */ 0xA6, 0x00, 0x00, 0x15, 0xA7, 0x00, 0x00, 0x41, 0xA7, 0x00, 0x00, 0x9B, 0xA7, 0x00, 0x00, 0xA9, +/* 000057C0 */ 0xA7, 0x00, 0x00, 0xAA, 0xA7, 0x00, 0x00, 0xEB, 0xA7, 0x00, 0x00, 0x3E, 0xA8, 0x00, 0x00, 0x98, +/* 000057D0 */ 0xA8, 0x00, 0x00, 0xA6, 0xA8, 0x00, 0x00, 0xA7, 0xA8, 0x00, 0x00, 0x23, 0xA9, 0x00, 0x00, 0x2F, +/* 000057E0 */ 0xA9, 0x00, 0x00, 0x30, 0xA9, 0x00, 0x00, 0xC6, 0xA9, 0x00, 0x00, 0x39, 0xAA, 0x00, 0x00, 0x45, +/* 000057F0 */ 0xAA, 0x00, 0x00, 0x80, 0xAA, 0x00, 0x00, 0xA7, 0xAA, 0x00, 0x00, 0xC3, 0xAA, 0x00, 0x00, 0xE2, +/* 00005800 */ 0xAA, 0x00, 0x00, 0x02, 0xAB, 0x00, 0x00, 0x0E, 0xAB, 0x00, 0x00, 0x0F, 0xAB, 0x00, 0x00, 0x41, +/* 00005810 */ 0xAB, 0x00, 0x00, 0x67, 0xAB, 0x00, 0x00, 0x84, 0xAB, 0x00, 0x00, 0xA3, 0xAB, 0x00, 0x00, 0xC3, +/* 00005820 */ 0xAB, 0x00, 0x00, 0xCF, 0xAB, 0x00, 0x00, 0xD0, 0xAB, 0x00, 0x00, 0x0D, 0xAC, 0x00, 0x00, 0x2A, +/* 00005830 */ 0xAC, 0x00, 0x00, 0x46, 0xAC, 0x00, 0x00, 0x65, 0xAC, 0x00, 0x00, 0x84, 0xAC, 0x00, 0x00, 0x90, +/* 00005840 */ 0xAC, 0x00, 0x00, 0xD1, 0xAC, 0x00, 0x00, 0x3F, 0xAD, 0x00, 0x00, 0x6F, 0xAD, 0x00, 0x00, 0xD5, +/* 00005850 */ 0xAD, 0x00, 0x00, 0xE7, 0xAD, 0x00, 0x00, 0x2C, 0xAE, 0x00, 0x00, 0x83, 0xAE, 0x00, 0x00, 0xE9, +/* 00005860 */ 0xAE, 0x00, 0x00, 0xFB, 0xAE, 0x00, 0x00, 0xFC, 0xAE, 0x00, 0x00, 0x1E, 0xAF, 0x00, 0x00, 0x3C, +/* 00005870 */ 0xAF, 0x00, 0x00, 0x59, 0xAF, 0x00, 0x00, 0x7C, 0xAF, 0x00, 0x00, 0xA5, 0xAF, 0x00, 0x00, 0xC6, +/* 00005880 */ 0xAF, 0x00, 0x00, 0xE5, 0xAF, 0x00, 0x00, 0x06, 0xB0, 0x00, 0x00, 0x19, 0xB0, 0x00, 0x00, 0x1A, +/* 00005890 */ 0xB0, 0x00, 0x00, 0x5F, 0xB0, 0x00, 0x00, 0x6F, 0xB0, 0x00, 0x00, 0x8B, 0xB0, 0x00, 0x00, 0xAA, +/* 000058A0 */ 0xB0, 0x00, 0x00, 0xC9, 0xB0, 0x00, 0x00, 0xD5, 0xB0, 0x00, 0x00, 0xD6, 0xB0, 0x00, 0x00, 0x4F, +/* 000058B0 */ 0xB1, 0x00, 0x00, 0x9A, 0xB1, 0x00, 0x00, 0xC6, 0xB1, 0x00, 0x00, 0x20, 0xB2, 0x00, 0x00, 0x2E, +/* 000058C0 */ 0xB2, 0x00, 0x00, 0x2F, 0xB2, 0x00, 0x00, 0x70, 0xB2, 0x00, 0x00, 0xC3, 0xB2, 0x00, 0x00, 0x1D, +/* 000058D0 */ 0xB3, 0x00, 0x00, 0x2B, 0xB3, 0x00, 0x00, 0x2C, 0xB3, 0x00, 0x00, 0x5A, 0xB3, 0x00, 0x00, 0x66, +/* 000058E0 */ 0xB3, 0x00, 0x00, 0x9F, 0xB3, 0x00, 0x00, 0xBC, 0xB3, 0x00, 0x00, 0xDB, 0xB3, 0x00, 0x00, 0xFA, +/* 000058F0 */ 0xB3, 0x00, 0x00, 0x06, 0xB4, 0x00, 0x00, 0x07, 0xB4, 0x00, 0x00, 0x20, 0xB4, 0x00, 0x00, 0x2A, +/* 00005900 */ 0xB4, 0x00, 0x00, 0x2B, 0xB4, 0x00, 0x00, 0x65, 0xB4, 0x00, 0x00, 0x8B, 0xB4, 0x00, 0x00, 0xC7, +/* 00005910 */ 0xB4, 0x00, 0x00, 0xDB, 0xB4, 0x00, 0x00, 0xE5, 0xB4, 0x00, 0x00, 0xE6, 0xB4, 0x00, 0x00, 0x2F, +/* 00005920 */ 0xB5, 0x00, 0x00, 0x75, 0xB5, 0x00, 0x00, 0xCC, 0xB5, 0x00, 0x00, 0xCD, 0xB5, 0x00, 0x00, 0xF1, +/* 00005930 */ 0xB5, 0x00, 0x00, 0x64, 0xB6, 0x00, 0x00, 0x65, 0xB6, 0x00, 0x00, 0xC7, 0xB6, 0x00, 0x00, 0xE9, +/* 00005940 */ 0xB6, 0x00, 0x00, 0x10, 0xB7, 0x00, 0x00, 0x11, 0xB7, 0x00, 0x00, 0x81, 0xB7, 0x00, 0x00, 0x9F, +/* 00005950 */ 0xB7, 0x00, 0x00, 0xE2, 0xB7, 0x00, 0x00, 0x18, 0xB8, 0x00, 0x00, 0x19, 0xB8, 0x00, 0x00, 0x74, +/* 00005960 */ 0xB8, 0x00, 0x00, 0xC5, 0xB8, 0x00, 0x00, 0x02, 0xB9, 0x00, 0x00, 0x42, 0xB9, 0x00, 0x00, 0x77, +/* 00005970 */ 0xB9, 0x00, 0x00, 0x85, 0xB9, 0x00, 0x00, 0x86, 0xB9, 0x00, 0x00, 0xA3, 0xB9, 0x00, 0x00, 0xC2, +/* 00005980 */ 0xB9, 0x00, 0x00, 0xF6, 0xB9, 0x00, 0x00, 0x1E, 0xBA, 0x00, 0x00, 0x5B, 0xBA, 0x00, 0x00, 0x69, +/* 00005990 */ 0xBA, 0x00, 0x00, 0x6A, 0xBA, 0x00, 0x00, 0xE3, 0xBA, 0x00, 0x00, 0x02, 0xBB, 0x00, 0x00, 0x38, +/* 000059A0 */ 0xBB, 0x00, 0x00, 0x99, 0xBB, 0x00, 0x00, 0xA7, 0xBB, 0x00, 0x00, 0xA8, 0xBB, 0x00, 0x00, 0xD2, +/* 000059B0 */ 0xBB, 0x00, 0x00, 0xF1, 0xBB, 0x00, 0x00, 0x18, 0xBC, 0x00, 0x00, 0x3F, 0xBC, 0x00, 0x00, 0x54, +/* 000059C0 */ 0xBC, 0x00, 0x00, 0x75, 0xBC, 0x00, 0x00, 0xA0, 0xBC, 0x00, 0x00, 0xC5, 0xBC, 0x00, 0x00, 0xDE, +/* 000059D0 */ 0xBC, 0x00, 0x00, 0x03, 0xBD, 0x00, 0x00, 0x15, 0xBD, 0x00, 0x00, 0x23, 0xBD, 0x00, 0x00, 0x24, +/* 000059E0 */ 0xBD, 0x00, 0x00, 0x74, 0xBD, 0x00, 0x00, 0x75, 0xBD, 0x00, 0x00, 0xD1, 0xBD, 0x00, 0x00, 0xD2, +/* 000059F0 */ 0xBD, 0x00, 0x00, 0x01, 0xBE, 0x00, 0x00, 0x02, 0xBE, 0x00, 0x00, 0x4E, 0xBE, 0x00, 0x00, 0x7A, +/* 00005A00 */ 0xBE, 0x00, 0x00, 0x7B, 0xBE, 0x00, 0x00, 0x92, 0xBE, 0x00, 0x00, 0x9D, 0xBE, 0x00, 0x00, 0x9E, +/* 00005A10 */ 0xBE, 0x00, 0x00, 0x19, 0xBF, 0x00, 0x00, 0x62, 0xBF, 0x00, 0x00, 0xBF, 0xBF, 0x00, 0x00, 0xCD, +/* 00005A20 */ 0xBF, 0x00, 0x00, 0xCE, 0xBF, 0x00, 0x00, 0xFA, 0xBF, 0x00, 0x00, 0x47, 0xC0, 0x00, 0x00, 0x48, +/* 00005A30 */ 0xC0, 0x00, 0x00, 0x77, 0xC0, 0x00, 0x00, 0xF3, 0xC0, 0x00, 0x00, 0x31, 0xC1, 0x00, 0x00, 0x32, +/* 00005A40 */ 0xC1, 0x00, 0x00, 0x57, 0xC1, 0x00, 0x00, 0x6B, 0xC1, 0x00, 0x00, 0x75, 0xC1, 0x00, 0x00, 0x76, +/* 00005A50 */ 0xC1, 0x00, 0x00, 0xA0, 0xC1, 0x00, 0x00, 0xA1, 0xC1, 0x00, 0x00, 0x27, 0xC2, 0x00, 0x00, 0x7B, +/* 00005A60 */ 0xC2, 0x00, 0x00, 0xDD, 0xC2, 0x00, 0x00, 0xDE, 0xC2, 0x00, 0x00, 0x25, 0xC3, 0x00, 0x00, 0x53, +/* 00005A70 */ 0xC3, 0x00, 0x00, 0x7E, 0xC3, 0x00, 0x00, 0xC4, 0xC3, 0x00, 0x00, 0xD2, 0xC3, 0x00, 0x00, 0xD3, +/* 00005A80 */ 0xC3, 0x00, 0x00, 0x17, 0xC4, 0x00, 0x00, 0x18, 0xC4, 0x00, 0x00, 0x64, 0xC4, 0x00, 0x00, 0xA6, +/* 00005A90 */ 0xC4, 0x00, 0x00, 0xCF, 0xC4, 0x00, 0x00, 0xF4, 0xC4, 0x00, 0x00, 0x1B, 0xC5, 0x00, 0x00, 0x43, +/* 00005AA0 */ 0xC5, 0x00, 0x00, 0x57, 0xC5, 0x00, 0x00, 0x58, 0xC5, 0x00, 0x00, 0x75, 0xC5, 0x00, 0x00, 0x83, +/* 00005AB0 */ 0xC5, 0x00, 0x00, 0x84, 0xC5, 0x00, 0x00, 0xA5, 0xC5, 0x00, 0x00, 0xB1, 0xC5, 0x00, 0x00, 0xB2, +/* 00005AC0 */ 0xC5, 0x00, 0x00, 0x11, 0xC6, 0x00, 0x00, 0x76, 0xC6, 0x00, 0x00, 0x9C, 0xC6, 0x00, 0x00, 0x9D, +/* 00005AD0 */ 0xC6, 0x00, 0x00, 0xD7, 0xC6, 0x00, 0x00, 0x38, 0xC7, 0x00, 0x00, 0x46, 0xC7, 0x00, 0x00, 0x47, +/* 00005AE0 */ 0xC7, 0x00, 0x00, 0xBD, 0xC7, 0x00, 0x00, 0xC9, 0xC7, 0x00, 0x00, 0xCA, 0xC7, 0x00, 0x00, 0x44, +/* 00005AF0 */ 0xC8, 0x00, 0x00, 0x6A, 0xC8, 0x00, 0x00, 0x6B, 0xC8, 0x00, 0x00, 0x97, 0xC8, 0x00, 0x00, 0xFF, +/* 00005B00 */ 0xC8, 0x00, 0x00, 0x0D, 0xC9, 0x00, 0x00, 0x0E, 0xC9, 0x00, 0x00, 0x4F, 0xC9, 0x00, 0x00, 0xA6, +/* 00005B10 */ 0xC9, 0x00, 0x00, 0x0E, 0xCA, 0x00, 0x00, 0x1C, 0xCA, 0x00, 0x00, 0x1D, 0xCA, 0x00, 0x00, 0x9A, +/* 00005B20 */ 0xCA, 0x00, 0x00, 0xA6, 0xCA, 0x00, 0x00, 0xA7, 0xCA, 0x00, 0x00, 0x41, 0xCB, 0x00, 0x00, 0xAE, +/* 00005B30 */ 0xCB, 0x00, 0x00, 0xBA, 0xCB, 0x00, 0x00, 0xF9, 0xCB, 0x00, 0x00, 0x20, 0xCC, 0x00, 0x00, 0x3C, +/* 00005B40 */ 0xCC, 0x00, 0x00, 0x5B, 0xCC, 0x00, 0x00, 0x7B, 0xCC, 0x00, 0x00, 0x87, 0xCC, 0x00, 0x00, 0x88, +/* 00005B50 */ 0xCC, 0x00, 0x00, 0xBE, 0xCC, 0x00, 0x00, 0xE8, 0xCC, 0x00, 0x00, 0x05, 0xCD, 0x00, 0x00, 0x24, +/* 00005B60 */ 0xCD, 0x00, 0x00, 0x44, 0xCD, 0x00, 0x00, 0x50, 0xCD, 0x00, 0x00, 0x51, 0xCD, 0x00, 0x00, 0x92, +/* 00005B70 */ 0xCD, 0x00, 0x00, 0xB3, 0xCD, 0x00, 0x00, 0xCF, 0xCD, 0x00, 0x00, 0xEE, 0xCD, 0x00, 0x00, 0x0E, +/* 00005B80 */ 0xCE, 0x00, 0x00, 0x1A, 0xCE, 0x00, 0x00, 0x1B, 0xCE, 0x00, 0x00, 0x4E, 0xCE, 0x00, 0x00, 0x8B, +/* 00005B90 */ 0xCE, 0x00, 0x00, 0xF5, 0xCE, 0x00, 0x00, 0x27, 0xCF, 0x00, 0x00, 0x35, 0xCF, 0x00, 0x00, 0x36, +/* 00005BA0 */ 0xCF, 0x00, 0x00, 0x60, 0xCF, 0x00, 0x00, 0xC1, 0xCF, 0x00, 0x00, 0xCF, 0xCF, 0x00, 0x00, 0xD0, +/* 00005BB0 */ 0xCF, 0x00, 0x00, 0x09, 0xD0, 0x00, 0x00, 0x42, 0xD0, 0x00, 0x00, 0xA3, 0xD0, 0x00, 0x00, 0xB1, +/* 00005BC0 */ 0xD0, 0x00, 0x00, 0xB2, 0xD0, 0x00, 0x00, 0xD3, 0xD0, 0x00, 0x00, 0xDE, 0xD0, 0x00, 0x00, 0xDF, +/* 00005BD0 */ 0xD0, 0x00, 0x00, 0x24, 0xD1, 0x00, 0x00, 0x96, 0xD1, 0x00, 0x00, 0xC6, 0xD1, 0x00, 0x00, 0x2B, +/* 00005BE0 */ 0xD2, 0x00, 0x00, 0x3D, 0xD2, 0x00, 0x00, 0x3E, 0xD2, 0x00, 0x00, 0x7D, 0xD2, 0x00, 0x00, 0x7E, +/* 00005BF0 */ 0xD2, 0x00, 0x00, 0xFC, 0xD2, 0x00, 0x00, 0x7A, 0xD3, 0x00, 0x00, 0x9E, 0xD3, 0x00, 0x00, 0x9F, +/* 00005C00 */ 0xD3, 0x00, 0x00, 0xE4, 0xD3, 0x00, 0x00, 0xF4, 0xD3, 0x00, 0x00, 0x10, 0xD4, 0x00, 0x00, 0x2F, +/* 00005C10 */ 0xD4, 0x00, 0x00, 0x4F, 0xD4, 0x00, 0x00, 0x5B, 0xD4, 0x00, 0x00, 0x5C, 0xD4, 0x00, 0x00, 0xD8, +/* 00005C20 */ 0xD4, 0x00, 0x00, 0x21, 0xD5, 0x00, 0x00, 0x4D, 0xD5, 0x00, 0x00, 0xAE, 0xD5, 0x00, 0x00, 0xBC, +/* 00005C30 */ 0xD5, 0x00, 0x00, 0xBD, 0xD5, 0x00, 0x00, 0xF8, 0xD5, 0x00, 0x00, 0xF9, 0xD5, 0x00, 0x00, 0x33, +/* 00005C40 */ 0xD6, 0x00, 0x00, 0x7C, 0xD6, 0x00, 0x00, 0xB2, 0xD6, 0x00, 0x00, 0xC0, 0xD6, 0x00, 0x00, 0xC1, +/* 00005C50 */ 0xD6, 0x00, 0x00, 0xEE, 0xD6, 0x00, 0x00, 0xFA, 0xD6, 0x00, 0x00, 0x28, 0xD7, 0x00, 0x00, 0x49, +/* 00005C60 */ 0xD7, 0x00, 0x00, 0x66, 0xD7, 0x00, 0x00, 0x85, 0xD7, 0x00, 0x00, 0xA5, 0xD7, 0x00, 0x00, 0xB1, +/* 00005C70 */ 0xD7, 0x00, 0x00, 0xED, 0xD7, 0x00, 0x00, 0x09, 0xD8, 0x00, 0x00, 0x28, 0xD8, 0x00, 0x00, 0x48, +/* 00005C80 */ 0xD8, 0x00, 0x00, 0x54, 0xD8, 0x00, 0x00, 0x55, 0xD8, 0x00, 0x00, 0x98, 0xD8, 0x00, 0x00, 0xBA, +/* 00005C90 */ 0xD8, 0x00, 0x00, 0xD9, 0xD8, 0x00, 0x00, 0xF9, 0xD8, 0x00, 0x00, 0x15, 0xD9, 0x00, 0x00, 0x21, +/* 00005CA0 */ 0xD9, 0x00, 0x00, 0x22, 0xD9, 0x00, 0x00, 0x3F, 0xD9, 0x00, 0x00, 0x49, 0xD9, 0x00, 0x00, 0x4A, +/* 00005CB0 */ 0xD9, 0x00, 0x00, 0xCA, 0xD9, 0x00, 0x00, 0xF2, 0xD9, 0x00, 0x00, 0x2C, 0xDA, 0x00, 0x00, 0x40, +/* 00005CC0 */ 0xDA, 0x00, 0x00, 0x4A, 0xDA, 0x00, 0x00, 0x4B, 0xDA, 0x00, 0x00, 0x88, 0xDA, 0x00, 0x00, 0xC0, +/* 00005CD0 */ 0xDA, 0x00, 0x00, 0x0C, 0xDB, 0x00, 0x00, 0x31, 0xDB, 0x00, 0x00, 0x5B, 0xDB, 0x00, 0x00, 0x81, +/* 00005CE0 */ 0xDB, 0x00, 0x00, 0xA8, 0xDB, 0x00, 0x00, 0xFA, 0xDB, 0x00, 0x00, 0x20, 0xDC, 0x00, 0x00, 0x47, +/* 00005CF0 */ 0xDC, 0x00, 0x00, 0x70, 0xDC, 0x00, 0x00, 0x99, 0xDC, 0x00, 0x00, 0x02, 0xDD, 0x00, 0x00, 0x0D, +/* 00005D00 */ 0xDD, 0x00, 0x00, 0x0E, 0xDD, 0x00, 0x00, 0x1A, 0xDD, 0x00, 0x00, 0x86, 0xDD, 0x00, 0x00, 0x03, +/* 00005D10 */ 0xDE, 0x00, 0x00, 0x0E, 0xDE, 0x00, 0x00, 0x50, 0xDE, 0x00, 0x00, 0xA3, 0xDE, 0x00, 0x00, 0xAF, +/* 00005D20 */ 0xDE, 0x00, 0x00, 0xE3, 0xDE, 0x00, 0x00, 0x62, 0xDF, 0x00, 0x00, 0x88, 0xDF, 0x00, 0x00, 0xA6, +/* 00005D30 */ 0xDF, 0x00, 0x00, 0xC0, 0xDF, 0x00, 0x00, 0xDB, 0xDF, 0x00, 0x00, 0xF7, 0xDF, 0x00, 0x00, 0x11, +/* 00005D40 */ 0xE0, 0x00, 0x00, 0x4C, 0xE0, 0x00, 0x00, 0x81, 0xE0, 0x00, 0x00, 0x9E, 0xE0, 0x00, 0x00, 0xBB, +/* 00005D50 */ 0xE0, 0x00, 0x00, 0xDE, 0xE0, 0x00, 0x00, 0xED, 0xE0, 0x00, 0x00, 0x72, 0xE1, 0x00, 0x00, 0x98, +/* 00005D60 */ 0xE1, 0x00, 0x00, 0xD2, 0xE1, 0x00, 0x00, 0xEC, 0xE1, 0x00, 0x00, 0x1D, 0xE2, 0x00, 0x00, 0x45, +/* 00005D70 */ 0xE2, 0x00, 0x00, 0x5F, 0xE2, 0x00, 0x00, 0x9B, 0xE2, 0x00, 0x00, 0xB8, 0xE2, 0x00, 0x00, 0xD5, +/* 00005D80 */ 0xE2, 0x00, 0x00, 0x6A, 0xE3, 0x00, 0x00, 0x79, 0xE3, 0x00, 0x00, 0x7A, 0xE3, 0x00, 0x00, 0xDF, +/* 00005D90 */ 0xE3, 0x00, 0x00, 0x4E, 0xE4, 0x00, 0x00, 0x7A, 0xE4, 0x00, 0x00, 0x96, 0xE4, 0x00, 0x00, 0xB4, +/* 00005DA0 */ 0xE4, 0x00, 0x00, 0xCE, 0xE4, 0x00, 0x00, 0xE7, 0xE4, 0x00, 0x00, 0x02, 0xE5, 0x00, 0x00, 0x11, +/* 00005DB0 */ 0xE5, 0x00, 0x00, 0x3D, 0xE5, 0x00, 0x00, 0x5B, 0xE5, 0x00, 0x00, 0x79, 0xE5, 0x00, 0x00, 0x95, +/* 00005DC0 */ 0xE5, 0x00, 0x00, 0xB0, 0xE5, 0x00, 0x00, 0xCD, 0xE5, 0x00, 0x00, 0xDC, 0xE5, 0x00, 0x00, 0xDD, +/* 00005DD0 */ 0xE5, 0x00, 0x00, 0x11, 0xE6, 0x00, 0x00, 0x3B, 0xE6, 0x00, 0x00, 0x55, 0xE6, 0x00, 0x00, 0x6F, +/* 00005DE0 */ 0xE6, 0x00, 0x00, 0x89, 0xE6, 0x00, 0x00, 0xA3, 0xE6, 0x00, 0x00, 0xB2, 0xE6, 0x00, 0x00, 0xDC, +/* 00005DF0 */ 0xE6, 0x00, 0x00, 0xF6, 0xE6, 0x00, 0x00, 0x10, 0xE7, 0x00, 0x00, 0x2A, 0xE7, 0x00, 0x00, 0x44, +/* 00005E00 */ 0xE7, 0x00, 0x00, 0x53, 0xE7, 0x00, 0x00, 0x54, 0xE7, 0x00, 0x00, 0xBB, 0xE7, 0x00, 0x00, 0xF0, +/* 00005E10 */ 0xE7, 0x00, 0x00, 0x56, 0xE8, 0x00, 0x00, 0x85, 0xE8, 0x00, 0x00, 0xE4, 0xE8, 0x00, 0x00, 0x13, +/* 00005E20 */ 0xE9, 0x00, 0x00, 0x43, 0xE9, 0x00, 0x00, 0x59, 0xE9, 0x00, 0x00, 0x5A, 0xE9, 0x00, 0x00, 0x7F, +/* 00005E30 */ 0xE9, 0x00, 0x00, 0x9F, 0xE9, 0x00, 0x00, 0xA0, 0xE9, 0x00, 0x00, 0xCA, 0xE9, 0x00, 0x00, 0xCB, +/* 00005E40 */ 0xE9, 0x00, 0x00, 0x56, 0xEA, 0x00, 0x00, 0xBA, 0xEA, 0x00, 0x00, 0xFC, 0xEA, 0x00, 0x00, 0x2C, +/* 00005E50 */ 0xEB, 0x00, 0x00, 0x84, 0xEB, 0x00, 0x00, 0xF0, 0xEB, 0x00, 0x00, 0x4D, 0xEC, 0x00, 0x00, 0xC4, +/* 00005E60 */ 0xEC, 0x00, 0x00, 0x47, 0xED, 0x00, 0x00, 0x9D, 0xED, 0x00, 0x00, 0x08, 0xEE, 0x00, 0x00, 0x3A, +/* 00005E70 */ 0xEE, 0x00, 0x00, 0xAD, 0xEE, 0x00, 0x00, 0xDF, 0xEE, 0x00, 0x00, 0xF9, 0xEE, 0x00, 0x00, 0x0F, +/* 00005E80 */ 0xEF, 0x00, 0x00, 0x10, 0xEF, 0x00, 0x00, 0x80, 0xEF, 0x00, 0x00, 0x98, 0xEF, 0x00, 0x00, 0x99, +/* 00005E90 */ 0xEF, 0x00, 0x00, 0xED, 0xEF, 0x00, 0x00, 0xEE, 0xEF, 0x00, 0x00, 0x83, 0xF0, 0x00, 0x00, 0x12, +/* 00005EA0 */ 0xF1, 0x00, 0x00, 0xA7, 0xF1, 0x00, 0x00, 0xCE, 0xF1, 0x00, 0x00, 0xE9, 0xF1, 0x00, 0x00, 0x16, +/* 00005EB0 */ 0xF2, 0x00, 0x00, 0x40, 0xF2, 0x00, 0x00, 0x71, 0xF2, 0x00, 0x00, 0x96, 0xF2, 0x00, 0x00, 0xBD, +/* 00005EC0 */ 0xF2, 0x00, 0x00, 0xEC, 0xF2, 0x00, 0x00, 0x06, 0xF3, 0x00, 0x00, 0x23, 0xF3, 0x00, 0x00, 0x45, +/* 00005ED0 */ 0xF3, 0x00, 0x00, 0x6F, 0xF3, 0x00, 0x00, 0x99, 0xF3, 0x00, 0x00, 0xB6, 0xF3, 0x00, 0x00, 0xD8, +/* 00005EE0 */ 0xF3, 0x00, 0x00, 0x06, 0xF4, 0x00, 0x00, 0x23, 0xF4, 0x00, 0x00, 0x45, 0xF4, 0x00, 0x00, 0x5B, +/* 00005EF0 */ 0xF4, 0x00, 0x00, 0x5C, 0xF4, 0x00, 0x00, 0xC2, 0xF4, 0x00, 0x00, 0x29, 0xF5, 0x00, 0x00, 0x7D, +/* 00005F00 */ 0xF5, 0x00, 0x00, 0xB7, 0xF5, 0x00, 0x00, 0x26, 0xF6, 0x00, 0x00, 0x98, 0xF6, 0x00, 0x00, 0xEF, +/* 00005F10 */ 0xF6, 0x00, 0x00, 0x38, 0xF7, 0x00, 0x00, 0x6F, 0xF7, 0x00, 0x00, 0xAD, 0xF7, 0x00, 0x00, 0xE1, +/* 00005F20 */ 0xF7, 0x00, 0x00, 0x65, 0xF8, 0x00, 0x00, 0x8E, 0xF8, 0x00, 0x00, 0xC2, 0xF8, 0x00, 0x00, 0x38, +/* 00005F30 */ 0xF9, 0x00, 0x00, 0x5A, 0xF9, 0x00, 0x00, 0x5B, 0xF9, 0x00, 0x00, 0xB3, 0xF9, 0x00, 0x00, 0xE5, +/* 00005F40 */ 0xF9, 0x00, 0x00, 0x03, 0xFA, 0x00, 0x00, 0x24, 0xFA, 0x00, 0x00, 0x92, 0xFA, 0x00, 0x00, 0xEF, +/* 00005F50 */ 0xFA, 0x00, 0x00, 0x35, 0xFB, 0x00, 0x00, 0x4F, 0xFB, 0x00, 0x00, 0x65, 0xFB, 0x00, 0x00, 0x66, +/* 00005F60 */ 0xFB, 0x00, 0x00, 0x89, 0xFB, 0x00, 0x00, 0xD0, 0xFB, 0x00, 0x00, 0xED, 0xFB, 0x00, 0x00, 0x03, +/* 00005F70 */ 0xFC, 0x00, 0x00, 0x04, 0xFC, 0x00, 0x00, 0x42, 0xFC, 0x00, 0x00, 0x8A, 0xFC, 0x00, 0x00, 0xC0, +/* 00005F80 */ 0xFC, 0x00, 0x00, 0xDB, 0xFC, 0x00, 0x00, 0xED, 0xFC, 0x00, 0x00, 0xEE, 0xFC, 0x00, 0x00, 0x15, +/* 00005F90 */ 0xFD, 0x00, 0x00, 0x24, 0xFD, 0x00, 0x00, 0x32, 0xFD, 0x00, 0x00, 0x33, 0xFD, 0x00, 0x00, 0x3F, +/* 00005FA0 */ 0xFD, 0x00, 0x00, 0x96, 0xFD, 0x00, 0x00, 0xA1, 0xFD, 0x00, 0x00, 0xD4, 0xFD, 0x00, 0x00, 0xDF, +/* 00005FB0 */ 0xFD, 0x00, 0x00, 0x59, 0xFE, 0x00, 0x00, 0xA5, 0xFE, 0x00, 0x00, 0xE7, 0xFE, 0x00, 0x00, 0xF3, +/* 00005FC0 */ 0xFE, 0x00, 0x00, 0x4A, 0xFF, 0x00, 0x00, 0x90, 0xFF, 0x00, 0x00, 0xD1, 0xFF, 0x00, 0x00, 0xD2, +/* 00005FD0 */ 0xFF, 0x00, 0x00, 0xF6, 0xFF, 0x00, 0x00, 0x69, 0x00, 0x01, 0x00, 0x6A, 0x00, 0x01, 0x00, 0xD9, +/* 00005FE0 */ 0x00, 0x01, 0x00, 0x26, 0x01, 0x01, 0x00, 0x80, 0x01, 0x01, 0x00, 0xF0, 0x01, 0x01, 0x00, 0x18, +/* 00005FF0 */ 0x02, 0x01, 0x00, 0x3A, 0x02, 0x01, 0x00, 0x48, 0x02, 0x01, 0x00, 0x68, 0x02, 0x01, 0x00, 0x69, +/* 00006000 */ 0x02, 0x01, 0x00, 0xD8, 0x02, 0x01, 0x00, 0x06, 0x03, 0x01, 0x00, 0x32, 0x03, 0x01, 0x00, 0x5F, +/* 00006010 */ 0x03, 0x01, 0x00, 0x92, 0x03, 0x01, 0x00, 0x93, 0x03, 0x01, 0x00, 0xCA, 0x03, 0x01, 0x00, 0xF1, +/* 00006020 */ 0x03, 0x01, 0x00, 0x15, 0x04, 0x01, 0x00, 0x49, 0x04, 0x01, 0x00, 0x5E, 0x04, 0x01, 0x00, 0x8A, +/* 00006030 */ 0x04, 0x01, 0x00, 0x98, 0x04, 0x01, 0x00, 0x99, 0x04, 0x01, 0x00, 0x0E, 0x05, 0x01, 0x00, 0x51, +/* 00006040 */ 0x05, 0x01, 0x00, 0x9F, 0x05, 0x01, 0x00, 0xED, 0x05, 0x01, 0x00, 0x5E, 0x06, 0x01, 0x00, 0xAF, +/* 00006050 */ 0x06, 0x01, 0x00, 0xCB, 0x06, 0x01, 0x00, 0xE0, 0x06, 0x01, 0x00, 0x02, 0x07, 0x01, 0x00, 0x10, +/* 00006060 */ 0x07, 0x01, 0x00, 0x11, 0x07, 0x01, 0x00, 0x3B, 0x07, 0x01, 0x00, 0x3C, 0x07, 0x01, 0x00, 0x75, +/* 00006070 */ 0x07, 0x01, 0x00, 0xD3, 0x07, 0x01, 0x00, 0xD4, 0x07, 0x01, 0x00, 0x48, 0x08, 0x01, 0x00, 0x8B, +/* 00006080 */ 0x08, 0x01, 0x00, 0xC8, 0x08, 0x01, 0x00, 0xC9, 0x08, 0x01, 0x00, 0xEC, 0x08, 0x01, 0x00, 0xF7, +/* 00006090 */ 0x08, 0x01, 0x00, 0xF8, 0x08, 0x01, 0x00, 0x04, 0x09, 0x01, 0x00, 0x4C, 0x09, 0x01, 0x00, 0x57, +/* 000060A0 */ 0x09, 0x01, 0x00, 0x83, 0x09, 0x01, 0x00, 0x8E, 0x09, 0x01, 0x00, 0x0F, 0x0A, 0x01, 0x00, 0x89, +/* 000060B0 */ 0x0A, 0x01, 0x00, 0x04, 0x0B, 0x01, 0x00, 0x39, 0x0B, 0x01, 0x00, 0x45, 0x0B, 0x01, 0x00, 0x90, +/* 000060C0 */ 0x0B, 0x01, 0x00, 0xE1, 0x0B, 0x01, 0x00, 0x0A, 0x0C, 0x01, 0x00, 0x2F, 0x0C, 0x01, 0x00, 0x6C, +/* 000060D0 */ 0x0C, 0x01, 0x00, 0xBD, 0x0C, 0x01, 0x00, 0xEE, 0x0C, 0x01, 0x00, 0x1D, 0x0D, 0x01, 0x00, 0x4B, +/* 000060E0 */ 0x0D, 0x01, 0x00, 0x61, 0x0D, 0x01, 0x00, 0x75, 0x0D, 0x01, 0x00, 0x83, 0x0D, 0x01, 0x00, 0x84, +/* 000060F0 */ 0x0D, 0x01, 0x00, 0xC1, 0x0D, 0x01, 0x00, 0x0B, 0x0E, 0x01, 0x00, 0x3C, 0x0E, 0x01, 0x00, 0x6B, +/* 00006100 */ 0x0E, 0x01, 0x00, 0x99, 0x0E, 0x01, 0x00, 0xAF, 0x0E, 0x01, 0x00, 0xC3, 0x0E, 0x01, 0x00, 0xD1, +/* 00006110 */ 0x0E, 0x01, 0x00, 0xD2, 0x0E, 0x01, 0x00, 0x2A, 0x0F, 0x01, 0x00, 0x70, 0x0F, 0x01, 0x00, 0xA6, +/* 00006120 */ 0x0F, 0x01, 0x00, 0xD0, 0x0F, 0x01, 0x00, 0xF8, 0x0F, 0x01, 0x00, 0x22, 0x10, 0x01, 0x00, 0x4E, +/* 00006130 */ 0x10, 0x01, 0x00, 0x66, 0x10, 0x01, 0x00, 0x79, 0x10, 0x01, 0x00, 0x87, 0x10, 0x01, 0x00, 0x88, +/* 00006140 */ 0x10, 0x01, 0x00, 0xE0, 0x10, 0x01, 0x00, 0x2A, 0x11, 0x01, 0x00, 0x60, 0x11, 0x01, 0x00, 0x8A, +/* 00006150 */ 0x11, 0x01, 0x00, 0xB2, 0x11, 0x01, 0x00, 0xDC, 0x11, 0x01, 0x00, 0x08, 0x12, 0x01, 0x00, 0x20, +/* 00006160 */ 0x12, 0x01, 0x00, 0x33, 0x12, 0x01, 0x00, 0x41, 0x12, 0x01, 0x00, 0x42, 0x12, 0x01, 0x00, 0x5E, +/* 00006170 */ 0x12, 0x01, 0x00, 0x69, 0x12, 0x01, 0x00, 0x6A, 0x12, 0x01, 0x00, 0xA4, 0x12, 0x01, 0x00, 0xD4, +/* 00006180 */ 0x12, 0x01, 0x00, 0x01, 0x13, 0x01, 0x00, 0x0F, 0x13, 0x01, 0x00, 0x10, 0x13, 0x01, 0x00, 0x84, +/* 00006190 */ 0x13, 0x01, 0x00, 0x8F, 0x13, 0x01, 0x00, 0x90, 0x13, 0x01, 0x00, 0xE2, 0x13, 0x01, 0x00, 0x3E, +/* 000061A0 */ 0x14, 0x01, 0x00, 0x82, 0x14, 0x01, 0x00, 0xA1, 0x14, 0x01, 0x00, 0xC4, 0x14, 0x01, 0x00, 0xE6, +/* 000061B0 */ 0x14, 0x01, 0x00, 0xF2, 0x14, 0x01, 0x00, 0xF3, 0x14, 0x01, 0x00, 0x64, 0x15, 0x01, 0x00, 0xAB, +/* 000061C0 */ 0x15, 0x01, 0x00, 0xE9, 0x15, 0x01, 0x00, 0xF7, 0x15, 0x01, 0x00, 0x2C, 0x16, 0x01, 0x00, 0x64, +/* 000061D0 */ 0x16, 0x01, 0x00, 0x8B, 0x16, 0x01, 0x00, 0x99, 0x16, 0x01, 0x00, 0x9A, 0x16, 0x01, 0x00, 0xC3, +/* 000061E0 */ 0x16, 0x01, 0x00, 0x1B, 0x17, 0x01, 0x00, 0x85, 0x17, 0x01, 0x00, 0xD0, 0x17, 0x01, 0x00, 0xFD, +/* 000061F0 */ 0x17, 0x01, 0x00, 0x54, 0x18, 0x01, 0x00, 0x6D, 0x18, 0x01, 0x00, 0x93, 0x18, 0x01, 0x00, 0xC1, +/* 00006200 */ 0x18, 0x01, 0x00, 0x37, 0x19, 0x01, 0x00, 0x8E, 0x19, 0x01, 0x00, 0xA0, 0x19, 0x01, 0x00, 0xAE, +/* 00006210 */ 0x19, 0x01, 0x00, 0xAF, 0x19, 0x01, 0x00, 0xCF, 0x19, 0x01, 0x00, 0xF9, 0x19, 0x01, 0x00, 0x67, +/* 00006220 */ 0x1A, 0x01, 0x00, 0x75, 0x1A, 0x01, 0x00, 0x76, 0x1A, 0x01, 0x00, 0x08, 0x1B, 0x01, 0x00, 0x12, +/* 00006230 */ 0x1B, 0x01, 0x00, 0x13, 0x1B, 0x01, 0x00, 0x8D, 0x1B, 0x01, 0x00, 0x16, 0x1C, 0x01, 0x00, 0x91, +/* 00006240 */ 0x1C, 0x01, 0x00, 0x16, 0x1D, 0x01, 0x00, 0x37, 0x1D, 0x01, 0x00, 0x42, 0x1D, 0x01, 0x00, 0xCA, +/* 00006250 */ 0x1D, 0x01, 0x00, 0x4C, 0x1E, 0x01, 0x00, 0xD2, 0x1E, 0x01, 0x00, 0x22, 0x1F, 0x01, 0x00, 0x2D, +/* 00006260 */ 0x1F, 0x01, 0x00, 0xAB, 0x1F, 0x01, 0x00, 0x19, 0x20, 0x01, 0x00, 0x70, 0x20, 0x01, 0x00, 0xD7, +/* 00006270 */ 0x20, 0x01, 0x00, 0x4D, 0x21, 0x01, 0x00, 0x9A, 0x21, 0x01, 0x00, 0xA5, 0x21, 0x01, 0x00, 0x2D, +/* 00006280 */ 0x22, 0x01, 0x00, 0xB2, 0x22, 0x01, 0x00, 0xF9, 0x22, 0x01, 0x00, 0xFA, 0x22, 0x01, 0x00, 0x46, +/* 00006290 */ 0x23, 0x01, 0x00, 0xE0, 0x23, 0x01, 0x00, 0x61, 0x24, 0x01, 0x00, 0x86, 0x24, 0x01, 0x00, 0x2D, +/* 000062A0 */ 0x25, 0x01, 0x00, 0x2E, 0x25, 0x01, 0x00, 0x7A, 0x25, 0x01, 0x00, 0x18, 0x26, 0x01, 0x00, 0x99, +/* 000062B0 */ 0x26, 0x01, 0x00, 0xBE, 0x26, 0x01, 0x00, 0x73, 0x27, 0x01, 0x00, 0x74, 0x27, 0x01, 0x00, 0xC0, +/* 000062C0 */ 0x27, 0x01, 0x00, 0x5E, 0x28, 0x01, 0x00, 0xDF, 0x28, 0x01, 0x00, 0x04, 0x29, 0x01, 0x00, 0xB9, +/* 000062D0 */ 0x29, 0x01, 0x00, 0xBA, 0x29, 0x01, 0x00, 0x15, 0x2A, 0x01, 0x00, 0x38, 0x2A, 0x01, 0x00, 0x4C, +/* 000062E0 */ 0x2A, 0x01, 0x00, 0x56, 0x2A, 0x01, 0x00, 0x57, 0x2A, 0x01, 0x00, 0x83, 0x2A, 0x01, 0x00, 0x84, +/* 000062F0 */ 0x2A, 0x01, 0x00, 0x90, 0x2A, 0x01, 0x00, 0xBF, 0x2A, 0x01, 0x00, 0xCA, 0x2A, 0x01, 0x00, 0xF8, +/* 00006300 */ 0x2A, 0x01, 0x00, 0x03, 0x2B, 0x01, 0x00, 0x2F, 0x2B, 0x01, 0x00, 0x52, 0x2B, 0x01, 0x00, 0x5E, +/* 00006310 */ 0x2B, 0x01, 0x00, 0xEA, 0x2B, 0x01, 0x00, 0x40, 0x2C, 0x01, 0x00, 0xA6, 0x2C, 0x01, 0x00, 0xA7, +/* 00006320 */ 0x2C, 0x01, 0x00, 0xF0, 0x2C, 0x01, 0x00, 0x1E, 0x2D, 0x01, 0x00, 0x49, 0x2D, 0x01, 0x00, 0x91, +/* 00006330 */ 0x2D, 0x01, 0x00, 0x9F, 0x2D, 0x01, 0x00, 0xA0, 0x2D, 0x01, 0x00, 0xE6, 0x2D, 0x01, 0x00, 0xE7, +/* 00006340 */ 0x2D, 0x01, 0x00, 0x35, 0x2E, 0x01, 0x00, 0x77, 0x2E, 0x01, 0x00, 0xA2, 0x2E, 0x01, 0x00, 0xC7, +/* 00006350 */ 0x2E, 0x01, 0x00, 0xEE, 0x2E, 0x01, 0x00, 0x16, 0x2F, 0x01, 0x00, 0x2A, 0x2F, 0x01, 0x00, 0x2B, +/* 00006360 */ 0x2F, 0x01, 0x00, 0x48, 0x2F, 0x01, 0x00, 0x56, 0x2F, 0x01, 0x00, 0x57, 0x2F, 0x01, 0x00, 0x7A, +/* 00006370 */ 0x2F, 0x01, 0x00, 0x86, 0x2F, 0x01, 0x00, 0x87, 0x2F, 0x01, 0x00, 0xBD, 0x2F, 0x01, 0x00, 0xFB, +/* 00006380 */ 0x2F, 0x01, 0x00, 0x6A, 0x30, 0x01, 0x00, 0x9E, 0x30, 0x01, 0x00, 0xAC, 0x30, 0x01, 0x00, 0xAD, +/* 00006390 */ 0x30, 0x01, 0x00, 0xD8, 0x30, 0x01, 0x00, 0x3D, 0x31, 0x01, 0x00, 0x4B, 0x31, 0x01, 0x00, 0x4C, +/* 000063A0 */ 0x31, 0x01, 0x00, 0x86, 0x31, 0x01, 0x00, 0xC1, 0x31, 0x01, 0x00, 0x26, 0x32, 0x01, 0x00, 0x34, +/* 000063B0 */ 0x32, 0x01, 0x00, 0x35, 0x32, 0x01, 0x00, 0x56, 0x32, 0x01, 0x00, 0x61, 0x32, 0x01, 0x00, 0x62, +/* 000063C0 */ 0x32, 0x01, 0x00, 0xC3, 0x32, 0x01, 0x00, 0x2D, 0x33, 0x01, 0x00, 0x69, 0x33, 0x01, 0x00, 0xCE, +/* 000063D0 */ 0x33, 0x01, 0x00, 0xDC, 0x33, 0x01, 0x00, 0xDD, 0x33, 0x01, 0x00, 0xF0, 0x33, 0x01, 0x00, 0x16, +/* 000063E0 */ 0x34, 0x01, 0x00, 0x54, 0x34, 0x01, 0x00, 0x69, 0x34, 0x01, 0x00, 0x96, 0x34, 0x01, 0x00, 0x97, +/* 000063F0 */ 0x34, 0x01, 0x00, 0xCB, 0x34, 0x01, 0x00, 0xFC, 0x34, 0x01, 0x00, 0x0E, 0x35, 0x01, 0x00, 0x1C, +/* 00006400 */ 0x35, 0x01, 0x00, 0x1D, 0x35, 0x01, 0x00, 0x93, 0x35, 0x01, 0x00, 0x9F, 0x35, 0x01, 0x00, 0xA0, +/* 00006410 */ 0x35, 0x01, 0x00, 0x1F, 0x36, 0x01, 0x00, 0x4B, 0x36, 0x01, 0x00, 0xB7, 0x36, 0x01, 0x00, 0xC5, +/* 00006420 */ 0x36, 0x01, 0x00, 0xC6, 0x36, 0x01, 0x00, 0x07, 0x37, 0x01, 0x00, 0x60, 0x37, 0x01, 0x00, 0xCC, +/* 00006430 */ 0x37, 0x01, 0x00, 0xDA, 0x37, 0x01, 0x00, 0xDB, 0x37, 0x01, 0x00, 0xEE, 0x37, 0x01, 0x00, 0x14, +/* 00006440 */ 0x38, 0x01, 0x00, 0x52, 0x38, 0x01, 0x00, 0x67, 0x38, 0x01, 0x00, 0x94, 0x38, 0x01, 0x00, 0x95, +/* 00006450 */ 0x38, 0x01, 0x00, 0xC9, 0x38, 0x01, 0x00, 0xFA, 0x38, 0x01, 0x00, 0x0C, 0x39, 0x01, 0x00, 0x1A, +/* 00006460 */ 0x39, 0x01, 0x00, 0x1B, 0x39, 0x01, 0x00, 0x98, 0x39, 0x01, 0x00, 0xA4, 0x39, 0x01, 0x00, 0xA5, +/* 00006470 */ 0x39, 0x01, 0x00, 0xDD, 0x39, 0x01, 0x00, 0x09, 0x3A, 0x01, 0x00, 0x26, 0x3A, 0x01, 0x00, 0x45, +/* 00006480 */ 0x3A, 0x01, 0x00, 0x65, 0x3A, 0x01, 0x00, 0x71, 0x3A, 0x01, 0x00, 0x72, 0x3A, 0x01, 0x00, 0xB5, +/* 00006490 */ 0x3A, 0x01, 0x00, 0xD8, 0x3A, 0x01, 0x00, 0xF4, 0x3A, 0x01, 0x00, 0x13, 0x3B, 0x01, 0x00, 0x32, +/* 000064A0 */ 0x3B, 0x01, 0x00, 0x3E, 0x3B, 0x01, 0x00, 0x3F, 0x3B, 0x01, 0x00, 0xBD, 0x3B, 0x01, 0x00, 0x06, +/* 000064B0 */ 0x3C, 0x01, 0x00, 0x32, 0x3C, 0x01, 0x00, 0x97, 0x3C, 0x01, 0x00, 0xA5, 0x3C, 0x01, 0x00, 0xA6, +/* 000064C0 */ 0x3C, 0x01, 0x00, 0xE3, 0x3C, 0x01, 0x00, 0xE4, 0x3C, 0x01, 0x00, 0x1E, 0x3D, 0x01, 0x00, 0x67, +/* 000064D0 */ 0x3D, 0x01, 0x00, 0x9D, 0x3D, 0x01, 0x00, 0xAB, 0x3D, 0x01, 0x00, 0xAC, 0x3D, 0x01, 0x00, 0xD9, +/* 000064E0 */ 0x3D, 0x01, 0x00, 0xE5, 0x3D, 0x01, 0x00, 0x13, 0x3E, 0x01, 0x00, 0x34, 0x3E, 0x01, 0x00, 0x51, +/* 000064F0 */ 0x3E, 0x01, 0x00, 0x70, 0x3E, 0x01, 0x00, 0x90, 0x3E, 0x01, 0x00, 0x9C, 0x3E, 0x01, 0x00, 0xDA, +/* 00006500 */ 0x3E, 0x01, 0x00, 0xF6, 0x3E, 0x01, 0x00, 0x15, 0x3F, 0x01, 0x00, 0x35, 0x3F, 0x01, 0x00, 0x41, +/* 00006510 */ 0x3F, 0x01, 0x00, 0x86, 0x3F, 0x01, 0x00, 0xA8, 0x3F, 0x01, 0x00, 0xC7, 0x3F, 0x01, 0x00, 0xE7, +/* 00006520 */ 0x3F, 0x01, 0x00, 0x03, 0x40, 0x01, 0x00, 0x0F, 0x40, 0x01, 0x00, 0x56, 0x40, 0x01, 0x00, 0xCA, +/* 00006530 */ 0x40, 0x01, 0x00, 0xFA, 0x40, 0x01, 0x00, 0x63, 0x41, 0x01, 0x00, 0x75, 0x41, 0x01, 0x00, 0x76, +/* 00006540 */ 0x41, 0x01, 0x00, 0xB7, 0x41, 0x01, 0x00, 0xD9, 0x41, 0x01, 0x00, 0xF7, 0x41, 0x01, 0x00, 0x17, +/* 00006550 */ 0x42, 0x01, 0x00, 0x3E, 0x42, 0x01, 0x00, 0x5E, 0x42, 0x01, 0x00, 0x7F, 0x42, 0x01, 0x00, 0x9E, +/* 00006560 */ 0x42, 0x01, 0x00, 0xB9, 0x42, 0x01, 0x00, 0xD5, 0x42, 0x01, 0x00, 0xF2, 0x42, 0x01, 0x00, 0x0D, +/* 00006570 */ 0x43, 0x01, 0x00, 0x29, 0x43, 0x01, 0x00, 0x47, 0x43, 0x01, 0x00, 0x65, 0x43, 0x01, 0x00, 0x89, +/* 00006580 */ 0x43, 0x01, 0x00, 0x9C, 0x43, 0x01, 0x00, 0x9D, 0x43, 0x01, 0x00, 0xFD, 0x43, 0x01, 0x00, 0x2D, +/* 00006590 */ 0x44, 0x01, 0x00, 0x68, 0x44, 0x01, 0x00, 0xB6, 0x44, 0x01, 0x00, 0xEB, 0x44, 0x01, 0x00, 0x37, +/* 000065A0 */ 0x45, 0x01, 0x00, 0x51, 0x45, 0x01, 0x00, 0x52, 0x45, 0x01, 0x00, 0x77, 0x45, 0x01, 0x00, 0x8D, +/* 000065B0 */ 0x45, 0x01, 0x00, 0xA1, 0x45, 0x01, 0x00, 0xB1, 0x45, 0x01, 0x00, 0xCD, 0x45, 0x01, 0x00, 0xEC, +/* 000065C0 */ 0x45, 0x01, 0x00, 0x0C, 0x46, 0x01, 0x00, 0x18, 0x46, 0x01, 0x00, 0x19, 0x46, 0x01, 0x00, 0xB5, +/* 000065D0 */ 0x46, 0x01, 0x00, 0x23, 0x47, 0x01, 0x00, 0x2F, 0x47, 0x01, 0x00, 0x70, 0x47, 0x01, 0x00, 0x97, +/* 000065E0 */ 0x47, 0x01, 0x00, 0xB3, 0x47, 0x01, 0x00, 0xD2, 0x47, 0x01, 0x00, 0xF2, 0x47, 0x01, 0x00, 0xFE, +/* 000065F0 */ 0x47, 0x01, 0x00, 0xFF, 0x47, 0x01, 0x00, 0x1E, 0x48, 0x01, 0x00, 0x28, 0x48, 0x01, 0x00, 0x29, +/* 00006600 */ 0x48, 0x01, 0x00, 0x4F, 0x48, 0x01, 0x00, 0x72, 0x48, 0x01, 0x00, 0x86, 0x48, 0x01, 0x00, 0x90, +/* 00006610 */ 0x48, 0x01, 0x00, 0x91, 0x48, 0x01, 0x00, 0x9D, 0x48, 0x01, 0x00, 0xD1, 0x48, 0x01, 0x00, 0xDC, +/* 00006620 */ 0x48, 0x01, 0x00, 0x0C, 0x49, 0x01, 0x00, 0x17, 0x49, 0x01, 0x00, 0x3E, 0x49, 0x01, 0x00, 0x6A, +/* 00006630 */ 0x49, 0x01, 0x00, 0x8D, 0x49, 0x01, 0x00, 0x99, 0x49, 0x01, 0x00, 0xEA, 0x49, 0x01, 0x00, 0x30, +/* 00006640 */ 0x4A, 0x01, 0x00, 0x87, 0x4A, 0x01, 0x00, 0xAB, 0x4A, 0x01, 0x00, 0x18, 0x4B, 0x01, 0x00, 0x82, +/* 00006650 */ 0x4B, 0x01, 0x00, 0x83, 0x4B, 0x01, 0x00, 0xC8, 0x4B, 0x01, 0x00, 0xC9, 0x4B, 0x01, 0x00, 0x2C, +/* 00006660 */ 0x4C, 0x01, 0x00, 0x8A, 0x4C, 0x01, 0x00, 0x8B, 0x4C, 0x01, 0x00, 0xB6, 0x4C, 0x01, 0x00, 0x0C, +/* 00006670 */ 0x4D, 0x01, 0x00, 0x0D, 0x4D, 0x01, 0x00, 0x44, 0x4D, 0x01, 0x00, 0x45, 0x4D, 0x01, 0x00, 0x65, +/* 00006680 */ 0x4D, 0x01, 0x00, 0x70, 0x4D, 0x01, 0x00, 0x71, 0x4D, 0x01, 0x00, 0x7D, 0x4D, 0x01, 0x00, 0xCE, +/* 00006690 */ 0x4D, 0x01, 0x00, 0x0D, 0x4E, 0x01, 0x00, 0x18, 0x4E, 0x01, 0x00, 0x40, 0x4E, 0x01, 0x00, 0x4B, +/* 000066A0 */ 0x4E, 0x01, 0x00, 0x72, 0x4E, 0x01, 0x00, 0x8F, 0x4E, 0x01, 0x00, 0x9B, 0x4E, 0x01, 0x00, 0xD5, +/* 000066B0 */ 0x4E, 0x01, 0x00, 0xF7, 0x4E, 0x01, 0x00, 0x17, 0x4F, 0x01, 0x00, 0x25, 0x4F, 0x01, 0x00, 0x26, +/* 000066C0 */ 0x4F, 0x01, 0x00, 0x65, 0x4F, 0x01, 0x00, 0x70, 0x4F, 0x01, 0x00, 0x71, 0x4F, 0x01, 0x00, 0x9A, +/* 000066D0 */ 0x4F, 0x01, 0x00, 0x9B, 0x4F, 0x01, 0x00, 0xEB, 0x4F, 0x01, 0x00, 0x6E, 0x50, 0x01, 0x00, 0x9A, +/* 000066E0 */ 0x50, 0x01, 0x00, 0xED, 0x50, 0x01, 0x00, 0xFB, 0x50, 0x01, 0x00, 0xFC, 0x50, 0x01, 0x00, 0x5D, +/* 000066F0 */ 0x51, 0x01, 0x00, 0x5E, 0x51, 0x01, 0x00, 0x8A, 0x51, 0x01, 0x00, 0xCA, 0x51, 0x01, 0x00, 0xCB, +/* 00006700 */ 0x51, 0x01, 0x00, 0x0D, 0x52, 0x01, 0x00, 0x0E, 0x52, 0x01, 0x00, 0x2E, 0x52, 0x01, 0x00, 0x3A, +/* 00006710 */ 0x52, 0x01, 0x00, 0x3B, 0x52, 0x01, 0x00, 0x70, 0x52, 0x01, 0x00, 0xA5, 0x52, 0x01, 0x00, 0xCE, +/* 00006720 */ 0x52, 0x01, 0x00, 0xEB, 0x52, 0x01, 0x00, 0x0A, 0x53, 0x01, 0x00, 0x2B, 0x53, 0x01, 0x00, 0x37, +/* 00006730 */ 0x53, 0x01, 0x00, 0x38, 0x53, 0x01, 0x00, 0x78, 0x53, 0x01, 0x00, 0x98, 0x53, 0x01, 0x00, 0xB4, +/* 00006740 */ 0x53, 0x01, 0x00, 0xD3, 0x53, 0x01, 0x00, 0xF2, 0x53, 0x01, 0x00, 0xFE, 0x53, 0x01, 0x00, 0xFF, +/* 00006750 */ 0x53, 0x01, 0x00, 0x98, 0x54, 0x01, 0x00, 0x05, 0x55, 0x01, 0x00, 0x11, 0x55, 0x01, 0x00, 0x4F, +/* 00006760 */ 0x55, 0x01, 0x00, 0x76, 0x55, 0x01, 0x00, 0x92, 0x55, 0x01, 0x00, 0xB1, 0x55, 0x01, 0x00, 0xD1, +/* 00006770 */ 0x55, 0x01, 0x00, 0xDD, 0x55, 0x01, 0x00, 0xDE, 0x55, 0x01, 0x00, 0x1A, 0x56, 0x01, 0x00, 0x82, +/* 00006780 */ 0x56, 0x01, 0x00, 0xB9, 0x56, 0x01, 0x00, 0xEE, 0x56, 0x01, 0x00, 0x52, 0x57, 0x01, 0x00, 0x60, +/* 00006790 */ 0x57, 0x01, 0x00, 0x61, 0x57, 0x01, 0x00, 0x91, 0x57, 0x01, 0x00, 0xBA, 0x57, 0x01, 0x00, 0xC6, +/* 000067A0 */ 0x57, 0x01, 0x00, 0x01, 0x58, 0x01, 0x00, 0x1C, 0x58, 0x01, 0x00, 0x3B, 0x58, 0x01, 0x00, 0x5B, +/* 000067B0 */ 0x58, 0x01, 0x00, 0x77, 0x58, 0x01, 0x00, 0x83, 0x58, 0x01, 0x00, 0x84, 0x58, 0x01, 0x00, 0x02, +/* 000067C0 */ 0x59, 0x01, 0x00, 0x39, 0x59, 0x01, 0x00, 0x6E, 0x59, 0x01, 0x00, 0xD2, 0x59, 0x01, 0x00, 0xE0, +/* 000067D0 */ 0x59, 0x01, 0x00, 0xE1, 0x59, 0x01, 0x00, 0x0C, 0x5A, 0x01, 0x00, 0x26, 0x5A, 0x01, 0x00, 0x3E, +/* 000067E0 */ 0x5A, 0x01, 0x00, 0x66, 0x5A, 0x01, 0x00, 0x8F, 0x5A, 0x01, 0x00, 0xB8, 0x5A, 0x01, 0x00, 0xE4, +/* 000067F0 */ 0x5A, 0x01, 0x00, 0x10, 0x5B, 0x01, 0x00, 0x33, 0x5B, 0x01, 0x00, 0x5C, 0x5B, 0x01, 0x00, 0x8F, +/* 00006800 */ 0x5B, 0x01, 0x00, 0xFE, 0x5B, 0x01, 0x00, 0x4F, 0x5C, 0x01, 0x00, 0x70, 0x5C, 0x01, 0x00, 0x82, +/* 00006810 */ 0x5C, 0x01, 0x00, 0x92, 0x5C, 0x01, 0x00, 0x9E, 0x5C, 0x01, 0x00, 0xE2, 0x5C, 0x01, 0x00, 0x06, +/* 00006820 */ 0x5D, 0x01, 0x00, 0x25, 0x5D, 0x01, 0x00, 0x45, 0x5D, 0x01, 0x00, 0x61, 0x5D, 0x01, 0x00, 0x6D, +/* 00006830 */ 0x5D, 0x01, 0x00, 0x6E, 0x5D, 0x01, 0x00, 0x8A, 0x5D, 0x01, 0x00, 0x94, 0x5D, 0x01, 0x00, 0x95, +/* 00006840 */ 0x5D, 0x01, 0x00, 0xC6, 0x5D, 0x01, 0x00, 0xE5, 0x5D, 0x01, 0x00, 0x77, 0x5E, 0x01, 0x00, 0x09, +/* 00006850 */ 0x5F, 0x01, 0x00, 0x9B, 0x5F, 0x01, 0x00, 0x2D, 0x60, 0x01, 0x00, 0x33, 0x60, 0x01, 0x00, 0x34, +/* 00006860 */ 0x60, 0x01, 0x00, 0x3A, 0x60, 0x01, 0x00, 0x42, 0x60, 0x01, 0x00, 0x49, 0x60, 0x01, 0x00, 0x50, +/* 00006870 */ 0x60, 0x01, 0x00, 0x57, 0x60, 0x01, 0x00, 0x5E, 0x60, 0x01, 0x00, 0x65, 0x60, 0x01, 0x00, 0x6C, +/* 00006880 */ 0x60, 0x01, 0x00, 0x8A, 0x60, 0x01, 0x00, 0x91, 0x60, 0x01, 0x00, 0x98, 0x60, 0x01, 0x00, 0x9F, +/* 00006890 */ 0x60, 0x01, 0x00, 0xA6, 0x60, 0x01, 0x00, 0xAD, 0x60, 0x01, 0x00, 0xB4, 0x60, 0x01, 0x00, 0xBC, +/* 000068A0 */ 0x60, 0x01, 0x00, 0xC7, 0x60, 0x01, 0x00, 0xC8, 0x60, 0x01, 0x00, 0xFC, 0x60, 0x01, 0x00, 0x32, +/* 000068B0 */ 0x61, 0x01, 0x00, 0x38, 0x61, 0x01, 0x00, 0x6D, 0x61, 0x01, 0x00, 0xA4, 0x61, 0x01, 0x00, 0xAA, +/* 000068C0 */ 0x61, 0x01, 0x00, 0xAB, 0x61, 0x01, 0x00, 0xD0, 0x61, 0x01, 0x00, 0xFB, 0x61, 0x01, 0x00, 0x30, +/* 000068D0 */ 0x62, 0x01, 0x00, 0x54, 0x62, 0x01, 0x00, 0x5E, 0x62, 0x01, 0x00, 0x5F, 0x62, 0x01, 0x00, 0x93, +/* 000068E0 */ 0x62, 0x01, 0x00, 0xAA, 0x62, 0x01, 0x00, 0xF9, 0x62, 0x01, 0x00, 0x2B, 0x63, 0x01, 0x00, 0x4F, +/* 000068F0 */ 0x63, 0x01, 0x00, 0x60, 0x63, 0x01, 0x00, 0x86, 0x63, 0x01, 0x00, 0x90, 0x63, 0x01, 0x00, 0x91, +/* 00006900 */ 0x63, 0x01, 0x00, 0xB1, 0x63, 0x01, 0x00, 0xB8, 0x63, 0x01, 0x00, 0xB9, 0x63, 0x01, 0x00, 0xFF, +/* 00006910 */ 0x63, 0x01, 0x00, 0x4E, 0x64, 0x01, 0x00, 0x6D, 0x64, 0x01, 0x00, 0xBB, 0x64, 0x01, 0x00, 0xEE, +/* 00006920 */ 0x64, 0x01, 0x00, 0x1E, 0x65, 0x01, 0x00, 0x5E, 0x65, 0x01, 0x00, 0x8A, 0x65, 0x01, 0x00, 0x98, +/* 00006930 */ 0x65, 0x01, 0x00, 0xA2, 0x65, 0x01, 0x00, 0xBD, 0x65, 0x01, 0x00, 0xC4, 0x65, 0x01, 0x00, 0xC5, +/* 00006940 */ 0x65, 0x01, 0x00, 0xFC, 0x65, 0x01, 0x00, 0x3C, 0x66, 0x01, 0x00, 0x5B, 0x66, 0x01, 0x00, 0x7B, +/* 00006950 */ 0x66, 0x01, 0x00, 0xA3, 0x66, 0x01, 0x00, 0xB1, 0x66, 0x01, 0x00, 0xFB, 0x66, 0x01, 0x00, 0x17, +/* 00006960 */ 0x67, 0x01, 0x00, 0x28, 0x67, 0x01, 0x00, 0x43, 0x67, 0x01, 0x00, 0x4D, 0x67, 0x01, 0x00, 0x54, +/* 00006970 */ 0x67, 0x01, 0x00, 0x55, 0x67, 0x01, 0x00, 0x8F, 0x67, 0x01, 0x00, 0xA8, 0x67, 0x01, 0x00, 0xCB, +/* 00006980 */ 0x67, 0x01, 0x00, 0xED, 0x67, 0x01, 0x00, 0x11, 0x68, 0x01, 0x00, 0x1F, 0x68, 0x01, 0x00, 0x36, +/* 00006990 */ 0x68, 0x01, 0x00, 0x40, 0x68, 0x01, 0x00, 0x47, 0x68, 0x01, 0x00, 0x48, 0x68, 0x01, 0x00, 0xAD, +/* 000069A0 */ 0x68, 0x01, 0x00, 0xD9, 0x68, 0x01, 0x00, 0x1F, 0x69, 0x01, 0x00, 0x35, 0x69, 0x01, 0x00, 0x3F, +/* 000069B0 */ 0x69, 0x01, 0x00, 0x46, 0x69, 0x01, 0x00, 0x47, 0x69, 0x01, 0x00, 0x78, 0x69, 0x01, 0x00, 0xAF, +/* 000069C0 */ 0x69, 0x01, 0x00, 0xB6, 0x69, 0x01, 0x00, 0xB7, 0x69, 0x01, 0x00, 0xF9, 0x69, 0x01, 0x00, 0x3F, +/* 000069D0 */ 0x6A, 0x01, 0x00, 0x6B, 0x6A, 0x01, 0x00, 0xAF, 0x6A, 0x01, 0x00, 0xDA, 0x6A, 0x01, 0x00, 0x03, +/* 000069E0 */ 0x6B, 0x01, 0x00, 0x2F, 0x6B, 0x01, 0x00, 0x41, 0x6B, 0x01, 0x00, 0x93, 0x6B, 0x01, 0x00, 0x08, +/* 000069F0 */ 0x6C, 0x01, 0x00, 0x16, 0x6C, 0x01, 0x00, 0x61, 0x6C, 0x01, 0x00, 0xA3, 0x6C, 0x01, 0x00, 0x13, +/* 00006A00 */ 0x6D, 0x01, 0x00, 0x46, 0x6D, 0x01, 0x00, 0x6E, 0x6D, 0x01, 0x00, 0x78, 0x6D, 0x01, 0x00, 0x79, +/* 00006A10 */ 0x6D, 0x01, 0x00, 0xA1, 0x6D, 0x01, 0x00, 0xC4, 0x6D, 0x01, 0x00, 0xFB, 0x6D, 0x01, 0x00, 0x19, +/* 00006A20 */ 0x6E, 0x01, 0x00, 0x2A, 0x6E, 0x01, 0x00, 0x4D, 0x6E, 0x01, 0x00, 0x57, 0x6E, 0x01, 0x00, 0x5D, +/* 00006A30 */ 0x6E, 0x01, 0x00, 0x5E, 0x6E, 0x01, 0x00, 0x9E, 0x6E, 0x01, 0x00, 0xF1, 0x6E, 0x01, 0x00, 0x1D, +/* 00006A40 */ 0x6F, 0x01, 0x00, 0x6E, 0x6F, 0x01, 0x00, 0x99, 0x6F, 0x01, 0x00, 0xC2, 0x6F, 0x01, 0x00, 0xEE, +/* 00006A50 */ 0x6F, 0x01, 0x00, 0x00, 0x70, 0x01, 0x00, 0x60, 0x70, 0x01, 0x00, 0xB1, 0x70, 0x01, 0x00, 0xDB, +/* 00006A60 */ 0x70, 0x01, 0x00, 0x14, 0x71, 0x01, 0x00, 0x4E, 0x71, 0x01, 0x00, 0x5C, 0x71, 0x01, 0x00, 0xA7, +/* 00006A70 */ 0x71, 0x01, 0x00, 0xE9, 0x71, 0x01, 0x00, 0x66, 0x72, 0x01, 0x00, 0x99, 0x72, 0x01, 0x00, 0xC1, +/* 00006A80 */ 0x72, 0x01, 0x00, 0xCB, 0x72, 0x01, 0x00, 0xEA, 0x72, 0x01, 0x00, 0xF0, 0x72, 0x01, 0x00, 0xF1, +/* 00006A90 */ 0x72, 0x01, 0x00, 0x23, 0x73, 0x01, 0x00, 0x43, 0x73, 0x01, 0x00, 0x67, 0x73, 0x01, 0x00, 0x71, +/* 00006AA0 */ 0x73, 0x01, 0x00, 0x72, 0x73, 0x01, 0x00, 0xBD, 0x73, 0x01, 0x00, 0xD3, 0x73, 0x01, 0x00, 0xF1, +/* 00006AB0 */ 0x73, 0x01, 0x00, 0xFB, 0x73, 0x01, 0x00, 0xFC, 0x73, 0x01, 0x00, 0x71, 0x74, 0x01, 0x00, 0xC1, +/* 00006AC0 */ 0x74, 0x01, 0x00, 0x06, 0x75, 0x01, 0x00, 0x07, 0x75, 0x01, 0x00, 0x7A, 0x75, 0x01, 0x00, 0x93, +/* 00006AD0 */ 0x75, 0x01, 0x00, 0xB7, 0x75, 0x01, 0x00, 0xDB, 0x75, 0x01, 0x00, 0x33, 0x76, 0x01, 0x00, 0x76, +/* 00006AE0 */ 0x76, 0x01, 0x00, 0xFF, 0x76, 0x01, 0x00, 0x00, 0x77, 0x01, 0x00, 0x1B, 0x77, 0x01, 0x00, 0x21, +/* 00006AF0 */ 0x77, 0x01, 0x00, 0x22, 0x77, 0x01, 0x00, 0x7C, 0x77, 0x01, 0x00, 0xB2, 0x77, 0x01, 0x00, 0xD2, +/* 00006B00 */ 0x77, 0x01, 0x00, 0x2F, 0x78, 0x01, 0x00, 0x62, 0x78, 0x01, 0x00, 0x6C, 0x78, 0x01, 0x00, 0x6D, +/* 00006B10 */ 0x78, 0x01, 0x00, 0x84, 0x78, 0x01, 0x00, 0xD4, 0x78, 0x01, 0x00, 0x30, 0x79, 0x01, 0x00, 0x40, +/* 00006B20 */ 0x79, 0x01, 0x00, 0x4A, 0x79, 0x01, 0x00, 0x4B, 0x79, 0x01, 0x00, 0xDA, 0x79, 0x01, 0x00, 0x60, +/* 00006B30 */ 0x7A, 0x01, 0x00, 0xDB, 0x7A, 0x01, 0x00, 0x24, 0x7B, 0x01, 0x00, 0x5A, 0x7B, 0x01, 0x00, 0x5B, +/* 00006B40 */ 0x7B, 0x01, 0x00, 0xA7, 0x7B, 0x01, 0x00, 0xC6, 0x7B, 0x01, 0x00, 0xDD, 0x7B, 0x01, 0x00, 0x2E, +/* 00006B50 */ 0x7C, 0x01, 0x00, 0xA8, 0x7C, 0x01, 0x00, 0xCC, 0x7C, 0x01, 0x00, 0x27, 0x7D, 0x01, 0x00, 0xA3, +/* 00006B60 */ 0x7D, 0x01, 0x00, 0xB5, 0x7D, 0x01, 0x00, 0xC6, 0x7D, 0x01, 0x00, 0xE6, 0x7D, 0x01, 0x00, 0xF0, +/* 00006B70 */ 0x7D, 0x01, 0x00, 0xF1, 0x7D, 0x01, 0x00, 0x60, 0x7E, 0x01, 0x00, 0x8E, 0x7E, 0x01, 0x00, 0xC3, +/* 00006B80 */ 0x7E, 0x01, 0x00, 0xEC, 0x7E, 0x01, 0x00, 0x04, 0x7F, 0x01, 0x00, 0x3E, 0x7F, 0x01, 0x00, 0x68, +/* 00006B90 */ 0x7F, 0x01, 0x00, 0x8D, 0x7F, 0x01, 0x00, 0xA6, 0x7F, 0x01, 0x00, 0xCD, 0x7F, 0x01, 0x00, 0xDF, +/* 00006BA0 */ 0x7F, 0x01, 0x00, 0xED, 0x7F, 0x01, 0x00, 0xEE, 0x7F, 0x01, 0x00, 0x39, 0x80, 0x01, 0x00, 0x4A, +/* 00006BB0 */ 0x80, 0x01, 0x00, 0x6C, 0x80, 0x01, 0x00, 0x76, 0x80, 0x01, 0x00, 0x77, 0x80, 0x01, 0x00, 0x95, +/* 00006BC0 */ 0x80, 0x01, 0x00, 0xB3, 0x80, 0x01, 0x00, 0xD1, 0x80, 0x01, 0x00, 0x02, 0x81, 0x01, 0x00, 0x14, +/* 00006BD0 */ 0x81, 0x01, 0x00, 0x1A, 0x81, 0x01, 0x00, 0x1B, 0x81, 0x01, 0x00, 0x7B, 0x81, 0x01, 0x00, 0xD3, +/* 00006BE0 */ 0x81, 0x01, 0x00, 0x06, 0x82, 0x01, 0x00, 0x07, 0x82, 0x01, 0x00, 0x38, 0x82, 0x01, 0x00, 0x39, +/* 00006BF0 */ 0x82, 0x01, 0x00, 0x6D, 0x82, 0x01, 0x00, 0x98, 0x82, 0x01, 0x00, 0x01, 0x83, 0x01, 0x00, 0x32, +/* 00006C00 */ 0x83, 0x01, 0x00, 0x53, 0x83, 0x01, 0x00, 0x61, 0x83, 0x01, 0x00, 0x6B, 0x83, 0x01, 0x00, 0xC0, +/* 00006C10 */ 0x83, 0x01, 0x00, 0xC6, 0x83, 0x01, 0x00, 0xC7, 0x83, 0x01, 0x00, 0x0A, 0x84, 0x01, 0x00, 0x37, +/* 00006C20 */ 0x84, 0x01, 0x00, 0x65, 0x84, 0x01, 0x00, 0x8C, 0x84, 0x01, 0x00, 0xB8, 0x84, 0x01, 0x00, 0xC2, +/* 00006C30 */ 0x84, 0x01, 0x00, 0xC3, 0x84, 0x01, 0x00, 0xE5, 0x84, 0x01, 0x00, 0x0A, 0x85, 0x01, 0x00, 0x32, +/* 00006C40 */ 0x85, 0x01, 0x00, 0x40, 0x85, 0x01, 0x00, 0x41, 0x85, 0x01, 0x00, 0x6D, 0x85, 0x01, 0x00, 0xBA, +/* 00006C50 */ 0x85, 0x01, 0x00, 0xD3, 0x85, 0x01, 0x00, 0x11, 0x86, 0x01, 0x00, 0x45, 0x86, 0x01, 0x00, 0x5A, +/* 00006C60 */ 0x86, 0x01, 0x00, 0x89, 0x86, 0x01, 0x00, 0x97, 0x86, 0x01, 0x00, 0xA8, 0x86, 0x01, 0x00, 0xF9, +/* 00006C70 */ 0x86, 0x01, 0x00, 0x29, 0x87, 0x01, 0x00, 0x8F, 0x87, 0x01, 0x00, 0x99, 0x87, 0x01, 0x00, 0x9A, +/* 00006C80 */ 0x87, 0x01, 0x00, 0xC2, 0x87, 0x01, 0x00, 0xC9, 0x87, 0x01, 0x00, 0xCA, 0x87, 0x01, 0x00, 0xEC, +/* 00006C90 */ 0x87, 0x01, 0x00, 0x0A, 0x88, 0x01, 0x00, 0x2F, 0x88, 0x01, 0x00, 0x51, 0x88, 0x01, 0x00, 0x81, +/* 00006CA0 */ 0x88, 0x01, 0x00, 0x93, 0x88, 0x01, 0x00, 0xD3, 0x88, 0x01, 0x00, 0xE2, 0x88, 0x01, 0x00, 0xE3, +/* 00006CB0 */ 0x88, 0x01, 0x00, 0x08, 0x89, 0x01, 0x00, 0x48, 0x89, 0x01, 0x00, 0x57, 0x89, 0x01, 0x00, 0x58, +/* 00006CC0 */ 0x89, 0x01, 0x00, 0x7D, 0x89, 0x01, 0x00, 0xB7, 0x89, 0x01, 0x00, 0xC6, 0x89, 0x01, 0x00, 0xC7, +/* 00006CD0 */ 0x89, 0x01, 0x00, 0xF4, 0x89, 0x01, 0x00, 0x35, 0x8A, 0x01, 0x00, 0x44, 0x8A, 0x01, 0x00, 0x45, +/* 00006CE0 */ 0x8A, 0x01, 0x00, 0x6A, 0x8A, 0x01, 0x00, 0x8F, 0x8A, 0x01, 0x00, 0xAC, 0x8A, 0x01, 0x00, 0xE0, +/* 00006CF0 */ 0x8A, 0x01, 0x00, 0x1B, 0x8B, 0x01, 0x00, 0x2D, 0x8B, 0x01, 0x00, 0x49, 0x8B, 0x01, 0x00, 0x58, +/* 00006D00 */ 0x8B, 0x01, 0x00, 0x59, 0x8B, 0x01, 0x00, 0x84, 0x8B, 0x01, 0x00, 0xB0, 0x8B, 0x01, 0x00, 0xCC, +/* 00006D10 */ 0x8B, 0x01, 0x00, 0x1C, 0x8C, 0x01, 0x00, 0x41, 0x8C, 0x01, 0x00, 0x57, 0x8C, 0x01, 0x00, 0x88, +/* 00006D20 */ 0x8C, 0x01, 0x00, 0x9A, 0x8C, 0x01, 0x00, 0xA8, 0x8C, 0x01, 0x00, 0xB9, 0x8C, 0x01, 0x00, 0xC3, +/* 00006D30 */ 0x8C, 0x01, 0x00, 0xC4, 0x8C, 0x01, 0x00, 0xEB, 0x8C, 0x01, 0x00, 0x2F, 0x8D, 0x01, 0x00, 0x56, +/* 00006D40 */ 0x8D, 0x01, 0x00, 0x57, 0x8D, 0x01, 0x00, 0x7A, 0x8D, 0x01, 0x00, 0x9F, 0x8D, 0x01, 0x00, 0xD9, +/* 00006D50 */ 0x8D, 0x01, 0x00, 0xE7, 0x8D, 0x01, 0x00, 0xE8, 0x8D, 0x01, 0x00, 0x0C, 0x8E, 0x01, 0x00, 0x3E, +/* 00006D60 */ 0x8E, 0x01, 0x00, 0x4C, 0x8E, 0x01, 0x00, 0x4D, 0x8E, 0x01, 0x00, 0x71, 0x8E, 0x01, 0x00, 0xA3, +/* 00006D70 */ 0x8E, 0x01, 0x00, 0xB1, 0x8E, 0x01, 0x00, 0xB2, 0x8E, 0x01, 0x00, 0x19, 0x8F, 0x01, 0x00, 0xB4, +/* 00006D80 */ 0x8F, 0x01, 0x00, 0xC2, 0x8F, 0x01, 0x00, 0xC3, 0x8F, 0x01, 0x00, 0xDD, 0x8F, 0x01, 0x00, 0xE7, +/* 00006D90 */ 0x8F, 0x01, 0x00, 0xE8, 0x8F, 0x01, 0x00, 0x01, 0x90, 0x01, 0x00, 0x07, 0x90, 0x01, 0x00, 0x08, +/* 00006DA0 */ 0x90, 0x01, 0x00, 0x56, 0x90, 0x01, 0x00, 0x82, 0x90, 0x01, 0x00, 0x83, 0x90, 0x01, 0x00, 0xB2, +/* 00006DB0 */ 0x90, 0x01, 0x00, 0xF2, 0x90, 0x01, 0x00, 0xF3, 0x90, 0x01, 0x00, 0x54, 0x91, 0x01, 0x00, 0xD6, +/* 00006DC0 */ 0x91, 0x01, 0x00, 0xE4, 0x91, 0x01, 0x00, 0xE5, 0x91, 0x01, 0x00, 0x14, 0x92, 0x01, 0x00, 0x25, +/* 00006DD0 */ 0x92, 0x01, 0x00, 0x42, 0x92, 0x01, 0x00, 0x4C, 0x92, 0x01, 0x00, 0x52, 0x92, 0x01, 0x00, 0x53, +/* 00006DE0 */ 0x92, 0x01, 0x00, 0x6D, 0x92, 0x01, 0x00, 0x97, 0x92, 0x01, 0x00, 0xC1, 0x92, 0x01, 0x00, 0xC7, +/* 00006DF0 */ 0x92, 0x01, 0x00, 0xC8, 0x92, 0x01, 0x00, 0x00, 0x93, 0x01, 0x00, 0x4C, 0x93, 0x01, 0x00, 0xAA, +/* 00006E00 */ 0x93, 0x01, 0x00, 0xD0, 0x93, 0x01, 0x00, 0x15, 0x94, 0x01, 0x00, 0x79, 0x94, 0x01, 0x00, 0xF9, +/* 00006E10 */ 0x94, 0x01, 0x00, 0xFA, 0x94, 0x01, 0x00, 0x6C, 0x95, 0x01, 0x00, 0x9D, 0x95, 0x01, 0x00, 0xEC, +/* 00006E20 */ 0x95, 0x01, 0x00, 0x3E, 0x96, 0x01, 0x00, 0x92, 0x96, 0x01, 0x00, 0xCA, 0x96, 0x01, 0x00, 0x1C, +/* 00006E30 */ 0x97, 0x01, 0x00, 0x6E, 0x97, 0x01, 0x00, 0xC3, 0x97, 0x01, 0x00, 0x2F, 0x98, 0x01, 0x00, 0x85, +/* 00006E40 */ 0x98, 0x01, 0x00, 0x86, 0x98, 0x01, 0x00, 0xA5, 0x98, 0x01, 0x00, 0xC4, 0x98, 0x01, 0x00, 0xF6, +/* 00006E50 */ 0x98, 0x01, 0x00, 0xF7, 0x98, 0x01, 0x00, 0x6E, 0x99, 0x01, 0x00, 0xDB, 0x99, 0x01, 0x00, 0x2E, +/* 00006E60 */ 0x9A, 0x01, 0x00, 0x71, 0x9A, 0x01, 0x00, 0x72, 0x9A, 0x01, 0x00, 0xEF, 0x9A, 0x01, 0x00, 0x83, +/* 00006E70 */ 0x9B, 0x01, 0x00, 0x06, 0x9C, 0x01, 0x00, 0x89, 0x9C, 0x01, 0x00, 0xFC, 0x9C, 0x01, 0x00, 0xFD, +/* 00006E80 */ 0x9C, 0x01, 0x00, 0x67, 0x9D, 0x01, 0x00, 0xE0, 0x9D, 0x01, 0x00, 0xE1, 0x9D, 0x01, 0x00, 0x44, +/* 00006E90 */ 0x9E, 0x01, 0x00, 0xD3, 0x9E, 0x01, 0x00, 0x7C, 0x9F, 0x01, 0x00, 0x10, 0xA0, 0x01, 0x00, 0xA7, +/* 00006EA0 */ 0xA0, 0x01, 0x00, 0x4B, 0xA1, 0x01, 0x00, 0x5F, 0xA1, 0x01, 0x00, 0x60, 0xA1, 0x01, 0x00, 0xE1, +/* 00006EB0 */ 0xA1, 0x01, 0x00, 0x4D, 0xA2, 0x01, 0x00, 0xBD, 0xA2, 0x01, 0x00, 0x2D, 0xA3, 0x01, 0x00, 0x9F, +/* 00006EC0 */ 0xA3, 0x01, 0x00, 0x13, 0xA4, 0x01, 0x00, 0x87, 0xA4, 0x01, 0x00, 0xD1, 0xA4, 0x01, 0x00, 0xD2, +/* 00006ED0 */ 0xA4, 0x01, 0x00, 0x3F, 0xA5, 0x01, 0x00, 0x40, 0xA5, 0x01, 0x00, 0xA6, 0xA5, 0x01, 0x00, 0x31, +/* 00006EE0 */ 0xA6, 0x01, 0x00, 0xA7, 0xA6, 0x01, 0x00, 0xAD, 0xA6, 0x01, 0x00, 0xAE, 0xA6, 0x01, 0x00, 0xDC, +/* 00006EF0 */ 0xA6, 0x01, 0x00, 0x04, 0xA7, 0x01, 0x00, 0x05, 0xA7, 0x01, 0x00, 0x26, 0xA7, 0x01, 0x00, 0x4E, +/* 00006F00 */ 0xA7, 0x01, 0x00, 0x58, 0xA7, 0x01, 0x00, 0x59, 0xA7, 0x01, 0x00, 0xA5, 0xA7, 0x01, 0x00, 0xAB, +/* 00006F10 */ 0xA7, 0x01, 0x00, 0xAC, 0xA7, 0x01, 0x00, 0x23, 0xA8, 0x01, 0x00, 0x52, 0xA8, 0x01, 0x00, 0x80, +/* 00006F20 */ 0xA8, 0x01, 0x00, 0x97, 0xA8, 0x01, 0x00, 0xA1, 0xA8, 0x01, 0x00, 0xA2, 0xA8, 0x01, 0x00, 0xCD, +/* 00006F30 */ 0xA8, 0x01, 0x00, 0xEE, 0xA8, 0x01, 0x00, 0xF8, 0xA8, 0x01, 0x00, 0xF9, 0xA8, 0x01, 0x00, 0x27, +/* 00006F40 */ 0xA9, 0x01, 0x00, 0x61, 0xA9, 0x01, 0x00, 0x62, 0xA9, 0x01, 0x00, 0x97, 0xA9, 0x01, 0x00, 0xAE, +/* 00006F50 */ 0xA9, 0x01, 0x00, 0xC1, 0xA9, 0x01, 0x00, 0xC2, 0xA9, 0x01, 0x00, 0x00, 0xAA, 0x01, 0x00, 0x61, +/* 00006F60 */ 0xAA, 0x01, 0x00, 0x9D, 0xAA, 0x01, 0x00, 0xAB, 0xAA, 0x01, 0x00, 0xAC, 0xAA, 0x01, 0x00, 0xDD, +/* 00006F70 */ 0xAA, 0x01, 0x00, 0xDE, 0xAA, 0x01, 0x00, 0x0F, 0xAB, 0x01, 0x00, 0x4F, 0xAB, 0x01, 0x00, 0x5D, +/* 00006F80 */ 0xAB, 0x01, 0x00, 0x5E, 0xAB, 0x01, 0x00, 0x94, 0xAB, 0x01, 0x00, 0x95, 0xAB, 0x01, 0x00, 0xF6, +/* 00006F90 */ 0xAB, 0x01, 0x00, 0x67, 0xAC, 0x01, 0x00, 0x75, 0xAC, 0x01, 0x00, 0x81, 0xAC, 0x01, 0x00, 0x82, +/* 00006FA0 */ 0xAC, 0x01, 0x00, 0x97, 0xAC, 0x01, 0x00, 0x9D, 0xAC, 0x01, 0x00, 0x9E, 0xAC, 0x01, 0x00, 0xED, +/* 00006FB0 */ 0xAC, 0x01, 0x00, 0x06, 0xAD, 0x01, 0x00, 0x1D, 0xAD, 0x01, 0x00, 0x72, 0xAD, 0x01, 0x00, 0x84, +/* 00006FC0 */ 0xAD, 0x01, 0x00, 0xE2, 0xAD, 0x01, 0x00, 0x09, 0xAE, 0x01, 0x00, 0x96, 0xAE, 0x01, 0x00, 0xBD, +/* 00006FD0 */ 0xAE, 0x01, 0x00, 0xCF, 0xAE, 0x01, 0x00, 0xEA, 0xAE, 0x01, 0x00, 0x11, 0xAF, 0x01, 0x00, 0x73, +/* 00006FE0 */ 0xAF, 0x01, 0x00, 0x81, 0xAF, 0x01, 0x00, 0x8D, 0xAF, 0x01, 0x00, 0xF5, 0xAF, 0x01, 0x00, 0x0C, +/* 00006FF0 */ 0xB0, 0x01, 0x00, 0x12, 0xB0, 0x01, 0x00, 0x13, 0xB0, 0x01, 0x00, 0x69, 0xB0, 0x01, 0x00, 0x9C, +/* 00007000 */ 0xB0, 0x01, 0x00, 0xD5, 0xB0, 0x01, 0x00, 0xDF, 0xB0, 0x01, 0x00, 0xE0, 0xB0, 0x01, 0x00, 0x18, +/* 00007010 */ 0xB1, 0x01, 0x00, 0x53, 0xB1, 0x01, 0x00, 0x8C, 0xB1, 0x01, 0x00, 0x96, 0xB1, 0x01, 0x00, 0x97, +/* 00007020 */ 0xB1, 0x01, 0x00, 0xCC, 0xB1, 0x01, 0x00, 0xD2, 0xB1, 0x01, 0x00, 0xD3, 0xB1, 0x01, 0x00, 0x24, +/* 00007030 */ 0xB2, 0x01, 0x00, 0x57, 0xB2, 0x01, 0x00, 0x90, 0xB2, 0x01, 0x00, 0x9A, 0xB2, 0x01, 0x00, 0x9B, +/* 00007040 */ 0xB2, 0x01, 0x00, 0xD3, 0xB2, 0x01, 0x00, 0x0E, 0xB3, 0x01, 0x00, 0x47, 0xB3, 0x01, 0x00, 0x51, +/* 00007050 */ 0xB3, 0x01, 0x00, 0x52, 0xB3, 0x01, 0x00, 0x82, 0xB3, 0x01, 0x00, 0x88, 0xB3, 0x01, 0x00, 0x89, +/* 00007060 */ 0xB3, 0x01, 0x00, 0xB2, 0xB3, 0x01, 0x00, 0xED, 0xB3, 0x01, 0x00, 0x02, 0xB4, 0x01, 0x00, 0x35, +/* 00007070 */ 0xB4, 0x01, 0x00, 0x36, 0xB4, 0x01, 0x00, 0x64, 0xB4, 0x01, 0x00, 0x91, 0xB4, 0x01, 0x00, 0x92, +/* 00007080 */ 0xB4, 0x01, 0x00, 0xC4, 0xB4, 0x01, 0x00, 0xFA, 0xB4, 0x01, 0x00, 0xFB, 0xB4, 0x01, 0x00, 0x41, +/* 00007090 */ 0xB5, 0x01, 0x00, 0xB8, 0xB5, 0x01, 0x00, 0xCA, 0xB5, 0x01, 0x00, 0xD8, 0xB5, 0x01, 0x00, 0xE2, +/* 000070A0 */ 0xB5, 0x01, 0x00, 0xE3, 0xB5, 0x01, 0x00, 0x2B, 0xB6, 0x01, 0x00, 0xAD, 0xB6, 0x01, 0x00, 0xBE, +/* 000070B0 */ 0xB6, 0x01, 0x00, 0x20, 0xB7, 0x01, 0x00, 0x2A, 0xB7, 0x01, 0x00, 0x31, 0xB7, 0x01, 0x00, 0x32, +/* 000070C0 */ 0xB7, 0x01, 0x00, 0x6E, 0xB7, 0x01, 0x00, 0xCF, 0xB7, 0x01, 0x00, 0xD0, 0xB7, 0x01, 0x00, 0x43, +/* 000070D0 */ 0xB8, 0x01, 0x00, 0x93, 0xB8, 0x01, 0x00, 0xE4, 0xB8, 0x01, 0x00, 0x67, 0xB9, 0x01, 0x00, 0xBE, +/* 000070E0 */ 0xB9, 0x01, 0x00, 0x26, 0xBA, 0x01, 0x00, 0x4C, 0xBA, 0x01, 0x00, 0x4D, 0xBA, 0x01, 0x00, 0xA6, +/* 000070F0 */ 0xBA, 0x01, 0x00, 0x31, 0xBB, 0x01, 0x00, 0x8C, 0xBB, 0x01, 0x00, 0xF8, 0xBB, 0x01, 0x00, 0x1E, +/* 00007100 */ 0xBC, 0x01, 0x00, 0x1F, 0xBC, 0x01, 0x00, 0x7C, 0xBC, 0x01, 0x00, 0x0B, 0xBD, 0x01, 0x00, 0x68, +/* 00007110 */ 0xBD, 0x01, 0x00, 0xD6, 0xBD, 0x01, 0x00, 0xFC, 0xBD, 0x01, 0x00, 0xFD, 0xBD, 0x01, 0x00, 0x3E, +/* 00007120 */ 0xBE, 0x01, 0x00, 0xB1, 0xBE, 0x01, 0x00, 0xEB, 0xBE, 0x01, 0x00, 0x46, 0xBF, 0x01, 0x00, 0x6C, +/* 00007130 */ 0xBF, 0x01, 0x00, 0x6D, 0xBF, 0x01, 0x00, 0xC6, 0xBF, 0x01, 0x00, 0x20, 0xC0, 0x01, 0x00, 0x6F, +/* 00007140 */ 0xC0, 0x01, 0x00, 0xEB, 0xC0, 0x01, 0x00, 0x4B, 0xC1, 0x01, 0x00, 0xAF, 0xC1, 0x01, 0x00, 0x15, +/* 00007150 */ 0xC2, 0x01, 0x00, 0x6E, 0xC2, 0x01, 0x00, 0x6F, 0xC2, 0x01, 0x00, 0xD6, 0xC2, 0x01, 0x00, 0x1B, +/* 00007160 */ 0xC3, 0x01, 0x00, 0x5E, 0xC3, 0x01, 0x00, 0x97, 0xC3, 0x01, 0x00, 0xD2, 0xC3, 0x01, 0x00, 0x0D, +/* 00007170 */ 0xC4, 0x01, 0x00, 0x4B, 0xC4, 0x01, 0x00, 0x88, 0xC4, 0x01, 0x00, 0xBD, 0xC4, 0x01, 0x00, 0x1E, +/* 00007180 */ 0xC5, 0x01, 0x00, 0x69, 0xC5, 0x01, 0x00, 0xB4, 0xC5, 0x01, 0x00, 0xFF, 0xC5, 0x01, 0x00, 0x49, +/* 00007190 */ 0xC6, 0x01, 0x00, 0x4A, 0xC6, 0x01, 0x00, 0xC9, 0xC6, 0x01, 0x00, 0x64, 0xC7, 0x01, 0x00, 0x84, +/* 000071A0 */ 0xC7, 0x01, 0x00, 0xA4, 0xC7, 0x01, 0x00, 0xC2, 0xC7, 0x01, 0x00, 0xD0, 0xC7, 0x01, 0x00, 0xD1, +/* 000071B0 */ 0xC7, 0x01, 0x00, 0x34, 0xC8, 0x01, 0x00, 0xAF, 0xC8, 0x01, 0x00, 0xEF, 0xC8, 0x01, 0x00, 0x20, +/* 000071C0 */ 0xC9, 0x01, 0x00, 0x9F, 0xC9, 0x01, 0x00, 0xF5, 0xC9, 0x01, 0x00, 0x39, 0xCA, 0x01, 0x00, 0x3A, +/* 000071D0 */ 0xCA, 0x01, 0x00, 0xB9, 0xCA, 0x01, 0x00, 0x01, 0xCB, 0x01, 0x00, 0x2A, 0xCB, 0x01, 0x00, 0x6F, +/* 000071E0 */ 0xCB, 0x01, 0x00, 0x81, 0xCB, 0x01, 0x00, 0x91, 0xCB, 0x01, 0x00, 0x92, 0xCB, 0x01, 0x00, 0xCA, +/* 000071F0 */ 0xCB, 0x01, 0x00, 0xD6, 0xCB, 0x01, 0x00, 0xEF, 0xCB, 0x01, 0x00, 0xF9, 0xCB, 0x01, 0x00, 0xFA, +/* 00007200 */ 0xCB, 0x01, 0x00, 0x4B, 0xCC, 0x01, 0x00, 0x79, 0xCC, 0x01, 0x00, 0xA4, 0xCC, 0x01, 0x00, 0xD0, +/* 00007210 */ 0xCC, 0x01, 0x00, 0x0B, 0xCD, 0x01, 0x00, 0x35, 0xCD, 0x01, 0x00, 0x3F, 0xCD, 0x01, 0x00, 0x40, +/* 00007220 */ 0xCD, 0x01, 0x00, 0x60, 0xCD, 0x01, 0x00, 0x83, 0xCD, 0x01, 0x00, 0xA5, 0xCD, 0x01, 0x00, 0xF9, +/* 00007230 */ 0xCD, 0x01, 0x00, 0x22, 0xCE, 0x01, 0x00, 0x8C, 0xCE, 0x01, 0x00, 0xA5, 0xCE, 0x01, 0x00, 0xF7, +/* 00007240 */ 0xCE, 0x01, 0x00, 0x40, 0xCF, 0x01, 0x00, 0x66, 0xCF, 0x01, 0x00, 0xC8, 0xCF, 0x01, 0x00, 0xD6, +/* 00007250 */ 0xCF, 0x01, 0x00, 0xE7, 0xCF, 0x01, 0x00, 0x30, 0xD0, 0x01, 0x00, 0x8C, 0xD0, 0x01, 0x00, 0xAB, +/* 00007260 */ 0xD0, 0x01, 0x00, 0xCD, 0xD0, 0x01, 0x00, 0xD7, 0xD0, 0x01, 0x00, 0xD8, 0xD0, 0x01, 0x00, 0xFF, +/* 00007270 */ 0xD0, 0x01, 0x00, 0x2B, 0xD1, 0x01, 0x00, 0x55, 0xD1, 0x01, 0x00, 0x5F, 0xD1, 0x01, 0x00, 0x60, +/* 00007280 */ 0xD1, 0x01, 0x00, 0xBC, 0xD1, 0x01, 0x00, 0x11, 0xD2, 0x01, 0x00, 0x37, 0xD2, 0x01, 0x00, 0x75, +/* 00007290 */ 0xD2, 0x01, 0x00, 0x8A, 0xD2, 0x01, 0x00, 0xCA, 0xD2, 0x01, 0x00, 0xD8, 0xD2, 0x01, 0x00, 0xE3, +/* 000072A0 */ 0xD2, 0x01, 0x00, 0xE4, 0xD2, 0x01, 0x00, 0x3A, 0xD3, 0x01, 0x00, 0x6D, 0xD3, 0x01, 0x00, 0xBA, +/* 000072B0 */ 0xD3, 0x01, 0x00, 0x0E, 0xD4, 0x01, 0x00, 0x38, 0xD4, 0x01, 0x00, 0x42, 0xD4, 0x01, 0x00, 0x43, +/* 000072C0 */ 0xD4, 0x01, 0x00, 0x85, 0xD4, 0x01, 0x00, 0xB2, 0xD4, 0x01, 0x00, 0x0C, 0xD5, 0x01, 0x00, 0x1D, +/* 000072D0 */ 0xD5, 0x01, 0x00, 0x71, 0xD5, 0x01, 0x00, 0x7B, 0xD5, 0x01, 0x00, 0x7C, 0xD5, 0x01, 0x00, 0xA2, +/* 000072E0 */ 0xD5, 0x01, 0x00, 0xA9, 0xD5, 0x01, 0x00, 0xAA, 0xD5, 0x01, 0x00, 0xDF, 0xD5, 0x01, 0x00, 0x01, +/* 000072F0 */ 0xD6, 0x01, 0x00, 0x02, 0xD6, 0x01, 0x00, 0x3E, 0xD6, 0x01, 0x00, 0x3F, 0xD6, 0x01, 0x00, 0x88, +/* 00007300 */ 0xD6, 0x01, 0x00, 0xBB, 0xD6, 0x01, 0x00, 0xEB, 0xD6, 0x01, 0x00, 0xFD, 0xD6, 0x01, 0x00, 0xFE, +/* 00007310 */ 0xD6, 0x01, 0x00, 0x8D, 0xD7, 0x01, 0x00, 0xE3, 0xD7, 0x01, 0x00, 0xF5, 0xD7, 0x01, 0x00, 0xF6, +/* 00007320 */ 0xD7, 0x01, 0x00, 0x2F, 0xD8, 0x01, 0x00, 0x30, 0xD8, 0x01, 0x00, 0x53, 0xD8, 0x01, 0x00, 0x89, +/* 00007330 */ 0xD8, 0x01, 0x00, 0xBF, 0xD8, 0x01, 0x00, 0xD8, 0xD8, 0x01, 0x00, 0x12, 0xD9, 0x01, 0x00, 0x24, +/* 00007340 */ 0xD9, 0x01, 0x00, 0x25, 0xD9, 0x01, 0x00, 0x96, 0xD9, 0x01, 0x00, 0xF5, 0xD9, 0x01, 0x00, 0x76, +/* 00007350 */ 0xDA, 0x01, 0x00, 0xE4, 0xDA, 0x01, 0x00, 0x57, 0xDB, 0x01, 0x00, 0xB9, 0xDB, 0x01, 0x00, 0xBA, +/* 00007360 */ 0xDB, 0x01, 0x00, 0xF2, 0xDB, 0x01, 0x00, 0x33, 0xDC, 0x01, 0x00, 0xA1, 0xDC, 0x01, 0x00, 0xA2, +/* 00007370 */ 0xDC, 0x01, 0x00, 0xCD, 0xDC, 0x01, 0x00, 0x36, 0xDD, 0x01, 0x00, 0x7B, 0xDD, 0x01, 0x00, 0x7C, +/* 00007380 */ 0xDD, 0x01, 0x00, 0xAE, 0xDD, 0x01, 0x00, 0x19, 0xDE, 0x01, 0x00, 0x9B, 0xDE, 0x01, 0x00, 0xC7, +/* 00007390 */ 0xDE, 0x01, 0x00, 0x13, 0xDF, 0x01, 0x00, 0x5A, 0xDF, 0x01, 0x00, 0xF6, 0xDF, 0x01, 0x00, 0x42, +/* 000073A0 */ 0xE0, 0x01, 0x00, 0x79, 0xE0, 0x01, 0x00, 0xFD, 0xE0, 0x01, 0x00, 0x22, 0xE1, 0x01, 0x00, 0x52, +/* 000073B0 */ 0xE1, 0x01, 0x00, 0x70, 0xE1, 0x01, 0x00, 0x13, 0xE2, 0x01, 0x00, 0x72, 0xE2, 0x01, 0x00, 0xA1, +/* 000073C0 */ 0xE2, 0x01, 0x00, 0xBB, 0xE2, 0x01, 0x00, 0xD3, 0xE2, 0x01, 0x00, 0xE5, 0xE2, 0x01, 0x00, 0x14, +/* 000073D0 */ 0xE3, 0x01, 0x00, 0x83, 0xE3, 0x01, 0x00, 0xB2, 0xE3, 0x01, 0x00, 0x40, 0xE4, 0x01, 0x00, 0x77, +/* 000073E0 */ 0xE4, 0x01, 0x00, 0xE1, 0xE4, 0x01, 0x00, 0xFB, 0xE4, 0x01, 0x00, 0x11, 0xE5, 0x01, 0x00, 0x2C, +/* 000073F0 */ 0xE5, 0x01, 0x00, 0x5B, 0xE5, 0x01, 0x00, 0x71, 0xE5, 0x01, 0x00, 0x83, 0xE5, 0x01, 0x00, 0x84, +/* 00007400 */ 0xE5, 0x01, 0x00, 0xB3, 0xE5, 0x01, 0x00, 0xE2, 0xE5, 0x01, 0x00, 0xFC, 0xE5, 0x01, 0x00, 0x82, +/* 00007410 */ 0xE6, 0x01, 0x00, 0xA4, 0xE6, 0x01, 0x00, 0xD2, 0xE6, 0x01, 0x00, 0x00, 0xE7, 0x01, 0x00, 0x01, +/* 00007420 */ 0xE7, 0x01, 0x00, 0x72, 0xE7, 0x01, 0x00, 0xFB, 0xE7, 0x01, 0x00, 0x64, 0xE8, 0x01, 0x00, 0xA3, +/* 00007430 */ 0xE8, 0x01, 0x00, 0xB9, 0xE8, 0x01, 0x00, 0xBA, 0xE8, 0x01, 0x00, 0xDF, 0xE8, 0x01, 0x00, 0x0C, +/* 00007440 */ 0xE9, 0x01, 0x00, 0x39, 0xE9, 0x01, 0x00, 0x66, 0xE9, 0x01, 0x00, 0x83, 0xE9, 0x01, 0x00, 0xB0, +/* 00007450 */ 0xE9, 0x01, 0x00, 0xC6, 0xE9, 0x01, 0x00, 0xD8, 0xE9, 0x01, 0x00, 0xD9, 0xE9, 0x01, 0x00, 0x0A, +/* 00007460 */ 0xEA, 0x01, 0x00, 0x37, 0xEA, 0x01, 0x00, 0x49, 0xEA, 0x01, 0x00, 0x4A, 0xEA, 0x01, 0x00, 0x77, +/* 00007470 */ 0xEA, 0x01, 0x00, 0x9C, 0xEA, 0x01, 0x00, 0xAE, 0xEA, 0x01, 0x00, 0xAF, 0xEA, 0x01, 0x00, 0xE0, +/* 00007480 */ 0xEA, 0x01, 0x00, 0x0E, 0xEB, 0x01, 0x00, 0x5B, 0xEB, 0x01, 0x00, 0xA3, 0xEB, 0x01, 0x00, 0xCD, +/* 00007490 */ 0xEB, 0x01, 0x00, 0x03, 0xEC, 0x01, 0x00, 0x45, 0xEC, 0x01, 0x00, 0x77, 0xEC, 0x01, 0x00, 0xA5, +/* 000074A0 */ 0xEC, 0x01, 0x00, 0xD7, 0xEC, 0x01, 0x00, 0x0E, 0xED, 0x01, 0x00, 0x1C, 0xED, 0x01, 0x00, 0x1D, +/* 000074B0 */ 0xED, 0x01, 0x00, 0x8C, 0xED, 0x01, 0x00, 0xB5, 0xED, 0x01, 0x00, 0xF0, 0xED, 0x01, 0x00, 0x4A, +/* 000074C0 */ 0xEE, 0x01, 0x00, 0x5C, 0xEE, 0x01, 0x00, 0x86, 0xEE, 0x01, 0x00, 0xB6, 0xEE, 0x01, 0x00, 0xC8, +/* 000074D0 */ 0xEE, 0x01, 0x00, 0x6C, 0xEF, 0x01, 0x00, 0x98, 0xEF, 0x01, 0x00, 0xC1, 0xEF, 0x01, 0x00, 0xFB, +/* 000074E0 */ 0xEF, 0x01, 0x00, 0x48, 0xF0, 0x01, 0x00, 0x7E, 0xF0, 0x01, 0x00, 0x9B, 0xF0, 0x01, 0x00, 0xB5, +/* 000074F0 */ 0xF0, 0x01, 0x00, 0xE9, 0xF0, 0x01, 0x00, 0x36, 0xF1, 0x01, 0x00, 0x6B, 0xF1, 0x01, 0x00, 0x96, +/* 00007500 */ 0xF1, 0x01, 0x00, 0xDE, 0xF1, 0x01, 0x00, 0xF2, 0xF1, 0x01, 0x00, 0x33, 0xF2, 0x01, 0x00, 0x34, +/* 00007510 */ 0xF2, 0x01, 0x00, 0x5B, 0xF2, 0x01, 0x00, 0x5C, 0xF2, 0x01, 0x00, 0xAA, 0xF2, 0x01, 0x00, 0xE9, +/* 00007520 */ 0xF2, 0x01, 0x00, 0x28, 0xF3, 0x01, 0x00, 0x3E, 0xF3, 0x01, 0x00, 0x3F, 0xF3, 0x01, 0x00, 0x76, +/* 00007530 */ 0xF3, 0x01, 0x00, 0xAA, 0xF3, 0x01, 0x00, 0xF3, 0xF3, 0x01, 0x00, 0x09, 0xF4, 0x01, 0x00, 0x0A, +/* 00007540 */ 0xF4, 0x01, 0x00, 0x45, 0xF4, 0x01, 0x00, 0x8B, 0xF4, 0x01, 0x00, 0x8C, 0xF4, 0x01, 0x00, 0xC2, +/* 00007550 */ 0xF4, 0x01, 0x00, 0x01, 0xF5, 0x01, 0x00, 0x46, 0xF5, 0x01, 0x00, 0x5C, 0xF5, 0x01, 0x00, 0x5D, +/* 00007560 */ 0xF5, 0x01, 0x00, 0xA5, 0xF5, 0x01, 0x00, 0xA6, 0xF5, 0x01, 0x00, 0xD3, 0xF5, 0x01, 0x00, 0x3B, +/* 00007570 */ 0xF6, 0x01, 0x00, 0x78, 0xF6, 0x01, 0x00, 0x98, 0xF6, 0x01, 0x00, 0xAA, 0xF6, 0x01, 0x00, 0xE8, +/* 00007580 */ 0xF6, 0x01, 0x00, 0xE9, 0xF6, 0x01, 0x00, 0x12, 0xF7, 0x01, 0x00, 0x46, 0xF7, 0x01, 0x00, 0xA8, +/* 00007590 */ 0xF7, 0x01, 0x00, 0xBE, 0xF7, 0x01, 0x00, 0xBF, 0xF7, 0x01, 0x00, 0x06, 0xF8, 0x01, 0x00, 0x63, +/* 000075A0 */ 0xF8, 0x01, 0x00, 0xC5, 0xF8, 0x01, 0x00, 0xDB, 0xF8, 0x01, 0x00, 0xDC, 0xF8, 0x01, 0x00, 0xFF, +/* 000075B0 */ 0xF8, 0x01, 0x00, 0x22, 0xF9, 0x01, 0x00, 0x23, 0xF9, 0x01, 0x00, 0x5D, 0xF9, 0x01, 0x00, 0x78, +/* 000075C0 */ 0xF9, 0x01, 0x00, 0x93, 0xF9, 0x01, 0x00, 0xCC, 0xF9, 0x01, 0x00, 0x1E, 0xFA, 0x01, 0x00, 0x58, +/* 000075D0 */ 0xFA, 0x01, 0x00, 0x88, 0xFA, 0x01, 0x00, 0xD5, 0xFA, 0x01, 0x00, 0xED, 0xFA, 0x01, 0x00, 0xFF, +/* 000075E0 */ 0xFA, 0x01, 0x00, 0x4E, 0xFB, 0x01, 0x00, 0x4F, 0xFB, 0x01, 0x00, 0xE1, 0xFB, 0x01, 0x00, 0xE2, +/* 000075F0 */ 0xFB, 0x01, 0x00, 0x73, 0xFC, 0x01, 0x00, 0xB7, 0xFC, 0x01, 0x00, 0xB8, 0xFC, 0x01, 0x00, 0x4D, +/* 00007600 */ 0xFD, 0x01, 0x00, 0x4E, 0xFD, 0x01, 0x00, 0x9C, 0xFD, 0x01, 0x00, 0xD4, 0xFD, 0x01, 0x00, 0x0C, +/* 00007610 */ 0xFE, 0x01, 0x00, 0x7A, 0xFE, 0x01, 0x00, 0x94, 0xFE, 0x01, 0x00, 0xDF, 0xFE, 0x01, 0x00, 0x40, +/* 00007620 */ 0xFF, 0x01, 0x00, 0xAE, 0xFF, 0x01, 0x00, 0xC8, 0xFF, 0x01, 0x00, 0xC9, 0xFF, 0x01, 0x00, 0xEA, +/* 00007630 */ 0xFF, 0x01, 0x00, 0x25, 0x00, 0x02, 0x00, 0x5E, 0x00, 0x02, 0x00, 0xA3, 0x00, 0x02, 0x00, 0xF4, +/* 00007640 */ 0x00, 0x02, 0x00, 0x4F, 0x01, 0x02, 0x00, 0xE4, 0x01, 0x02, 0x00, 0x79, 0x02, 0x02, 0x00, 0x93, +/* 00007650 */ 0x02, 0x02, 0x00, 0xE0, 0x02, 0x02, 0x00, 0xF4, 0x02, 0x02, 0x00, 0xF5, 0x02, 0x02, 0x00, 0x3B, +/* 00007660 */ 0x03, 0x02, 0x00, 0x83, 0x03, 0x02, 0x00, 0xBB, 0x03, 0x02, 0x00, 0x21, 0x04, 0x02, 0x00, 0x3B, +/* 00007670 */ 0x04, 0x02, 0x00, 0x3C, 0x04, 0x02, 0x00, 0x87, 0x04, 0x02, 0x00, 0xE8, 0x04, 0x02, 0x00, 0x4E, +/* 00007680 */ 0x05, 0x02, 0x00, 0x68, 0x05, 0x02, 0x00, 0x69, 0x05, 0x02, 0x00, 0xA5, 0x05, 0x02, 0x00, 0xE3, +/* 00007690 */ 0x05, 0x02, 0x00, 0xF7, 0x05, 0x02, 0x00, 0xF8, 0x05, 0x02, 0x00, 0x19, 0x06, 0x02, 0x00, 0x27, +/* 000076A0 */ 0x06, 0x02, 0x00, 0x31, 0x06, 0x02, 0x00, 0x7C, 0x06, 0x02, 0x00, 0x96, 0x06, 0x02, 0x00, 0xA0, +/* 000076B0 */ 0x06, 0x02, 0x00, 0xA1, 0x06, 0x02, 0x00, 0xDB, 0x06, 0x02, 0x00, 0x01, 0x07, 0x02, 0x00, 0x3D, +/* 000076C0 */ 0x07, 0x02, 0x00, 0x8E, 0x07, 0x02, 0x00, 0xC5, 0x07, 0x02, 0x00, 0xF5, 0x07, 0x02, 0x00, 0x07, +/* 000076D0 */ 0x08, 0x02, 0x00, 0x08, 0x08, 0x02, 0x00, 0x9F, 0x08, 0x02, 0x00, 0xFD, 0x08, 0x02, 0x00, 0x0F, +/* 000076E0 */ 0x09, 0x02, 0x00, 0x10, 0x09, 0x02, 0x00, 0x4D, 0x09, 0x02, 0x00, 0x4E, 0x09, 0x02, 0x00, 0x71, +/* 000076F0 */ 0x09, 0x02, 0x00, 0xA7, 0x09, 0x02, 0x00, 0xDD, 0x09, 0x02, 0x00, 0xF6, 0x09, 0x02, 0x00, 0x30, +/* 00007700 */ 0x0A, 0x02, 0x00, 0x42, 0x0A, 0x02, 0x00, 0x43, 0x0A, 0x02, 0x00, 0xB4, 0x0A, 0x02, 0x00, 0x26, +/* 00007710 */ 0x0B, 0x02, 0x00, 0x27, 0x0B, 0x02, 0x00, 0x6F, 0x0B, 0x02, 0x00, 0x70, 0x0B, 0x02, 0x00, 0xCF, +/* 00007720 */ 0x0B, 0x02, 0x00, 0x4C, 0x0C, 0x02, 0x00, 0x7C, 0x0C, 0x02, 0x00, 0x7D, 0x0C, 0x02, 0x00, 0xE4, +/* 00007730 */ 0x0C, 0x02, 0x00, 0x1B, 0x0D, 0x02, 0x00, 0x52, 0x0D, 0x02, 0x00, 0x90, 0x0D, 0x02, 0x00, 0x91, +/* 00007740 */ 0x0D, 0x02, 0x00, 0xE2, 0x0D, 0x02, 0x00, 0x33, 0x0E, 0x02, 0x00, 0x34, 0x0E, 0x02, 0x00, 0xAE, +/* 00007750 */ 0x0E, 0x02, 0x00, 0x1D, 0x0F, 0x02, 0x00, 0xA4, 0x0F, 0x02, 0x00, 0xB6, 0x0F, 0x02, 0x00, 0xB7, +/* 00007760 */ 0x0F, 0x02, 0x00, 0x18, 0x10, 0x02, 0x00, 0x19, 0x10, 0x02, 0x00, 0x51, 0x10, 0x02, 0x00, 0x92, +/* 00007770 */ 0x10, 0x02, 0x00, 0xFF, 0x10, 0x02, 0x00, 0x00, 0x11, 0x02, 0x00, 0x34, 0x11, 0x02, 0x00, 0x92, +/* 00007780 */ 0x11, 0x02, 0x00, 0xDB, 0x11, 0x02, 0x00, 0xED, 0x11, 0x02, 0x00, 0xEE, 0x11, 0x02, 0x00, 0x1A, +/* 00007790 */ 0x12, 0x02, 0x00, 0x55, 0x12, 0x02, 0x00, 0x92, 0x12, 0x02, 0x00, 0xA8, 0x12, 0x02, 0x00, 0xFE, +/* 000077A0 */ 0x12, 0x02, 0x00, 0x18, 0x13, 0x02, 0x00, 0x64, 0x13, 0x02, 0x00, 0x86, 0x13, 0x02, 0x00, 0xB4, +/* 000077B0 */ 0x13, 0x02, 0x00, 0x01, 0x14, 0x02, 0x00, 0x17, 0x14, 0x02, 0x00, 0x8D, 0x14, 0x02, 0x00, 0xF1, +/* 000077C0 */ 0x14, 0x02, 0x00, 0x0A, 0x15, 0x02, 0x00, 0x34, 0x15, 0x02, 0x00, 0x65, 0x15, 0x02, 0x00, 0xCE, +/* 000077D0 */ 0x15, 0x02, 0x00, 0xFD, 0x15, 0x02, 0x00, 0x58, 0x16, 0x02, 0x00, 0x75, 0x16, 0x02, 0x00, 0xCF, +/* 000077E0 */ 0x16, 0x02, 0x00, 0xE5, 0x16, 0x02, 0x00, 0xF7, 0x16, 0x02, 0x00, 0xF8, 0x16, 0x02, 0x00, 0x8C, +/* 000077F0 */ 0x17, 0x02, 0x00, 0x8D, 0x17, 0x02, 0x00, 0xBE, 0x17, 0x02, 0x00, 0xF6, 0x17, 0x02, 0x00, 0x39, +/* 00007800 */ 0x18, 0x02, 0x00, 0x67, 0x18, 0x02, 0x00, 0x68, 0x18, 0x02, 0x00, 0x96, 0x18, 0x02, 0x00, 0xCE, +/* 00007810 */ 0x18, 0x02, 0x00, 0xE0, 0x18, 0x02, 0x00, 0xE1, 0x18, 0x02, 0x00, 0x16, 0x19, 0x02, 0x00, 0x5C, +/* 00007820 */ 0x19, 0x02, 0x00, 0xCD, 0x19, 0x02, 0x00, 0xDF, 0x19, 0x02, 0x00, 0xE0, 0x19, 0x02, 0x00, 0x2C, +/* 00007830 */ 0x1A, 0x02, 0x00, 0x7A, 0x1A, 0x02, 0x00, 0xC8, 0x1A, 0x02, 0x00, 0xC9, 0x1A, 0x02, 0x00, 0x07, +/* 00007840 */ 0x1B, 0x02, 0x00, 0x5F, 0x1B, 0x02, 0x00, 0xB7, 0x1B, 0x02, 0x00, 0xC9, 0x1B, 0x02, 0x00, 0xCA, +/* 00007850 */ 0x1B, 0x02, 0x00, 0x0A, 0x1C, 0x02, 0x00, 0x44, 0x1C, 0x02, 0x00, 0x45, 0x1C, 0x02, 0x00, 0x5B, +/* 00007860 */ 0x1C, 0x02, 0x00, 0xAF, 0x1C, 0x02, 0x00, 0xED, 0x1C, 0x02, 0x00, 0x0B, 0x1D, 0x02, 0x00, 0x35, +/* 00007870 */ 0x1D, 0x02, 0x00, 0x8C, 0x1D, 0x02, 0x00, 0x11, 0x1E, 0x02, 0x00, 0x76, 0x1E, 0x02, 0x00, 0xB1, +/* 00007880 */ 0x1E, 0x02, 0x00, 0xC3, 0x1E, 0x02, 0x00, 0xC4, 0x1E, 0x02, 0x00, 0xFB, 0x1E, 0x02, 0x00, 0x5C, +/* 00007890 */ 0x1F, 0x02, 0x00, 0x6E, 0x1F, 0x02, 0x00, 0x6F, 0x1F, 0x02, 0x00, 0xED, 0x1F, 0x02, 0x00, 0x2C, +/* 000078A0 */ 0x20, 0x02, 0x00, 0x3A, 0x20, 0x02, 0x00, 0x3B, 0x20, 0x02, 0x00, 0xAB, 0x20, 0x02, 0x00, 0xFA, +/* 000078B0 */ 0x20, 0x02, 0x00, 0x5B, 0x21, 0x02, 0x00, 0x6D, 0x21, 0x02, 0x00, 0x6E, 0x21, 0x02, 0x00, 0xA8, +/* 000078C0 */ 0x21, 0x02, 0x00, 0xF9, 0x21, 0x02, 0x00, 0xFA, 0x21, 0x02, 0x00, 0x2B, 0x22, 0x02, 0x00, 0x71, +/* 000078D0 */ 0x22, 0x02, 0x00, 0xB3, 0x22, 0x02, 0x00, 0xB4, 0x22, 0x02, 0x00, 0xDB, 0x22, 0x02, 0x00, 0x2D, +/* 000078E0 */ 0x23, 0x02, 0x00, 0x6C, 0x23, 0x02, 0x00, 0xAF, 0x23, 0x02, 0x00, 0xC5, 0x23, 0x02, 0x00, 0xC6, +/* 000078F0 */ 0x23, 0x02, 0x00, 0xFD, 0x23, 0x02, 0x00, 0xFE, 0x23, 0x02, 0x00, 0x32, 0x24, 0x02, 0x00, 0x7F, +/* 00007900 */ 0x24, 0x02, 0x00, 0x95, 0x24, 0x02, 0x00, 0x96, 0x24, 0x02, 0x00, 0xD1, 0x24, 0x02, 0x00, 0x17, +/* 00007910 */ 0x25, 0x02, 0x00, 0x18, 0x25, 0x02, 0x00, 0x4E, 0x25, 0x02, 0x00, 0x8D, 0x25, 0x02, 0x00, 0xD2, +/* 00007920 */ 0x25, 0x02, 0x00, 0xE8, 0x25, 0x02, 0x00, 0xE9, 0x25, 0x02, 0x00, 0x35, 0x26, 0x02, 0x00, 0x36, +/* 00007930 */ 0x26, 0x02, 0x00, 0x9B, 0x26, 0x02, 0x00, 0xD7, 0x26, 0x02, 0x00, 0xD8, 0x26, 0x02, 0x00, 0xF8, +/* 00007940 */ 0x26, 0x02, 0x00, 0x0A, 0x27, 0x02, 0x00, 0x50, 0x27, 0x02, 0x00, 0x51, 0x27, 0x02, 0x00, 0x76, +/* 00007950 */ 0x27, 0x02, 0x00, 0xA4, 0x27, 0x02, 0x00, 0xA5, 0x27, 0x02, 0x00, 0xD9, 0x27, 0x02, 0x00, 0x42, +/* 00007960 */ 0x28, 0x02, 0x00, 0x58, 0x28, 0x02, 0x00, 0x59, 0x28, 0x02, 0x00, 0xA0, 0x28, 0x02, 0x00, 0x01, +/* 00007970 */ 0x29, 0x02, 0x00, 0x6A, 0x29, 0x02, 0x00, 0x80, 0x29, 0x02, 0x00, 0x81, 0x29, 0x02, 0x00, 0xCC, +/* 00007980 */ 0x29, 0x02, 0x00, 0xDE, 0x29, 0x02, 0x00, 0x2F, 0x2A, 0x02, 0x00, 0x30, 0x2A, 0x02, 0x00, 0xCA, +/* 00007990 */ 0x2A, 0x02, 0x00, 0xCB, 0x2A, 0x02, 0x00, 0x47, 0x2B, 0x02, 0x00, 0xC5, 0x2B, 0x02, 0x00, 0xE9, +/* 000079A0 */ 0x2B, 0x02, 0x00, 0xEA, 0x2B, 0x02, 0x00, 0x83, 0x2C, 0x02, 0x00, 0xCB, 0x2C, 0x02, 0x00, 0x68, +/* 000079B0 */ 0x2D, 0x02, 0x00, 0x69, 0x2D, 0x02, 0x00, 0xBB, 0x2D, 0x02, 0x00, 0xF3, 0x2D, 0x02, 0x00, 0x2B, +/* 000079C0 */ 0x2E, 0x02, 0x00, 0xA1, 0x2E, 0x02, 0x00, 0xBB, 0x2E, 0x02, 0x00, 0x06, 0x2F, 0x02, 0x00, 0x6B, +/* 000079D0 */ 0x2F, 0x02, 0x00, 0xE1, 0x2F, 0x02, 0x00, 0xFB, 0x2F, 0x02, 0x00, 0xFC, 0x2F, 0x02, 0x00, 0x42, +/* 000079E0 */ 0x30, 0x02, 0x00, 0x43, 0x30, 0x02, 0x00, 0x9F, 0x30, 0x02, 0x00, 0xF5, 0x30, 0x02, 0x00, 0x4C, +/* 000079F0 */ 0x31, 0x02, 0x00, 0x6A, 0x31, 0x02, 0x00, 0x86, 0x31, 0x02, 0x00, 0x87, 0x31, 0x02, 0x00, 0xC9, +/* 00007A00 */ 0x31, 0x02, 0x00, 0x16, 0x32, 0x02, 0x00, 0x2A, 0x32, 0x02, 0x00, 0x2B, 0x32, 0x02, 0x00, 0x74, +/* 00007A10 */ 0x32, 0x02, 0x00, 0xBB, 0x32, 0x02, 0x00, 0xF3, 0x32, 0x02, 0x00, 0x60, 0x33, 0x02, 0x00, 0x7A, +/* 00007A20 */ 0x33, 0x02, 0x00, 0x7B, 0x33, 0x02, 0x00, 0xC6, 0x33, 0x02, 0x00, 0x2B, 0x34, 0x02, 0x00, 0x98, +/* 00007A30 */ 0x34, 0x02, 0x00, 0xB2, 0x34, 0x02, 0x00, 0xB3, 0x34, 0x02, 0x00, 0xEE, 0x34, 0x02, 0x00, 0x2C, +/* 00007A40 */ 0x35, 0x02, 0x00, 0x40, 0x35, 0x02, 0x00, 0x41, 0x35, 0x02, 0x00, 0x66, 0x35, 0x02, 0x00, 0x74, +/* 00007A50 */ 0x35, 0x02, 0x00, 0x7E, 0x35, 0x02, 0x00, 0xCD, 0x35, 0x02, 0x00, 0xE7, 0x35, 0x02, 0x00, 0xF1, +/* 00007A60 */ 0x35, 0x02, 0x00, 0xF2, 0x35, 0x02, 0x00, 0x72, 0x36, 0x02, 0x00, 0x9A, 0x36, 0x02, 0x00, 0xD4, +/* 00007A70 */ 0x36, 0x02, 0x00, 0x1A, 0x37, 0x02, 0x00, 0x47, 0x37, 0x02, 0x00, 0x7D, 0x37, 0x02, 0x00, 0x96, +/* 00007A80 */ 0x37, 0x02, 0x00, 0xD0, 0x37, 0x02, 0x00, 0xE2, 0x37, 0x02, 0x00, 0xE3, 0x37, 0x02, 0x00, 0x0C, +/* 00007A90 */ 0x38, 0x02, 0x00, 0x4D, 0x38, 0x02, 0x00, 0xE0, 0x38, 0x02, 0x00, 0x0E, 0x39, 0x02, 0x00, 0x24, +/* 00007AA0 */ 0x39, 0x02, 0x00, 0x36, 0x39, 0x02, 0x00, 0x77, 0x39, 0x02, 0x00, 0xED, 0x39, 0x02, 0x00, 0x1B, +/* 00007AB0 */ 0x3A, 0x02, 0x00, 0x31, 0x3A, 0x02, 0x00, 0x43, 0x3A, 0x02, 0x00, 0x44, 0x3A, 0x02, 0x00, 0x97, +/* 00007AC0 */ 0x3A, 0x02, 0x00, 0xD3, 0x3A, 0x02, 0x00, 0x0D, 0x3B, 0x02, 0x00, 0x4A, 0x3B, 0x02, 0x00, 0x62, +/* 00007AD0 */ 0x3B, 0x02, 0x00, 0x9F, 0x3B, 0x02, 0x00, 0xD9, 0x3B, 0x02, 0x00, 0x16, 0x3C, 0x02, 0x00, 0x2E, +/* 00007AE0 */ 0x3C, 0x02, 0x00, 0x69, 0x3C, 0x02, 0x00, 0xA3, 0x3C, 0x02, 0x00, 0xE0, 0x3C, 0x02, 0x00, 0xF8, +/* 00007AF0 */ 0x3C, 0x02, 0x00, 0x0A, 0x3D, 0x02, 0x00, 0x5D, 0x3D, 0x02, 0x00, 0x99, 0x3D, 0x02, 0x00, 0xD3, +/* 00007B00 */ 0x3D, 0x02, 0x00, 0x10, 0x3E, 0x02, 0x00, 0x28, 0x3E, 0x02, 0x00, 0x66, 0x3E, 0x02, 0x00, 0xA0, +/* 00007B10 */ 0x3E, 0x02, 0x00, 0xDD, 0x3E, 0x02, 0x00, 0xF5, 0x3E, 0x02, 0x00, 0x33, 0x3F, 0x02, 0x00, 0x6D, +/* 00007B20 */ 0x3F, 0x02, 0x00, 0xAA, 0x3F, 0x02, 0x00, 0xC2, 0x3F, 0x02, 0x00, 0xD4, 0x3F, 0x02, 0x00, 0xF4, +/* 00007B30 */ 0x3F, 0x02, 0x00, 0x02, 0x40, 0x02, 0x00, 0x03, 0x40, 0x02, 0x00, 0x8D, 0x40, 0x02, 0x00, 0xCA, +/* 00007B40 */ 0x40, 0x02, 0x00, 0xED, 0x40, 0x02, 0x00, 0x18, 0x41, 0x02, 0x00, 0x33, 0x41, 0x02, 0x00, 0x34, +/* 00007B50 */ 0x41, 0x02, 0x00, 0x5B, 0x41, 0x02, 0x00, 0xB2, 0x41, 0x02, 0x00, 0xF3, 0x41, 0x02, 0x00, 0x30, +/* 00007B60 */ 0x42, 0x02, 0x00, 0x6A, 0x42, 0x02, 0x00, 0x80, 0x42, 0x02, 0x00, 0x92, 0x42, 0x02, 0x00, 0x93, +/* 00007B70 */ 0x42, 0x02, 0x00, 0xBE, 0x42, 0x02, 0x00, 0xE2, 0x42, 0x02, 0x00, 0x18, 0x43, 0x02, 0x00, 0x54, +/* 00007B80 */ 0x43, 0x02, 0x00, 0x91, 0x43, 0x02, 0x00, 0xC6, 0x43, 0x02, 0x00, 0xDC, 0x43, 0x02, 0x00, 0xEE, +/* 00007B90 */ 0x43, 0x02, 0x00, 0xEF, 0x43, 0x02, 0x00, 0x14, 0x44, 0x02, 0x00, 0x6A, 0x44, 0x02, 0x00, 0xA3, +/* 00007BA0 */ 0x44, 0x02, 0x00, 0xFD, 0x44, 0x02, 0x00, 0x3A, 0x45, 0x02, 0x00, 0x75, 0x45, 0x02, 0x00, 0xAB, +/* 00007BB0 */ 0x45, 0x02, 0x00, 0xC1, 0x45, 0x02, 0x00, 0xD3, 0x45, 0x02, 0x00, 0xD4, 0x45, 0x02, 0x00, 0xF7, +/* 00007BC0 */ 0x45, 0x02, 0x00, 0x22, 0x46, 0x02, 0x00, 0x34, 0x46, 0x02, 0x00, 0x35, 0x46, 0x02, 0x00, 0x61, +/* 00007BD0 */ 0x46, 0x02, 0x00, 0x9D, 0x46, 0x02, 0x00, 0xDD, 0x46, 0x02, 0x00, 0x1F, 0x47, 0x02, 0x00, 0x58, +/* 00007BE0 */ 0x47, 0x02, 0x00, 0x6E, 0x47, 0x02, 0x00, 0x80, 0x47, 0x02, 0x00, 0x81, 0x47, 0x02, 0x00, 0xE7, +/* 00007BF0 */ 0x47, 0x02, 0x00, 0x0F, 0x48, 0x02, 0x00, 0x3C, 0x48, 0x02, 0x00, 0x52, 0x48, 0x02, 0x00, 0x66, +/* 00007C00 */ 0x48, 0x02, 0x00, 0x67, 0x48, 0x02, 0x00, 0x9D, 0x48, 0x02, 0x00, 0xFC, 0x48, 0x02, 0x00, 0x0A, +/* 00007C10 */ 0x49, 0x02, 0x00, 0x0B, 0x49, 0x02, 0x00, 0x38, 0x49, 0x02, 0x00, 0x68, 0x49, 0x02, 0x00, 0x94, +/* 00007C20 */ 0x49, 0x02, 0x00, 0xC0, 0x49, 0x02, 0x00, 0xF0, 0x49, 0x02, 0x00, 0x1C, 0x4A, 0x02, 0x00, 0x48, +/* 00007C30 */ 0x4A, 0x02, 0x00, 0x7D, 0x4A, 0x02, 0x00, 0xA5, 0x4A, 0x02, 0x00, 0xD0, 0x4A, 0x02, 0x00, 0xDF, +/* 00007C40 */ 0x4A, 0x02, 0x00, 0xE0, 0x4A, 0x02, 0x00, 0x17, 0x4B, 0x02, 0x00, 0x4E, 0x4B, 0x02, 0x00, 0x6D, +/* 00007C50 */ 0x4B, 0x02, 0x00, 0x7F, 0x4B, 0x02, 0x00, 0x80, 0x4B, 0x02, 0x00, 0xC8, 0x4B, 0x02, 0x00, 0xD6, +/* 00007C60 */ 0x4B, 0x02, 0x00, 0xD7, 0x4B, 0x02, 0x00, 0x47, 0x4C, 0x02, 0x00, 0xA3, 0x4C, 0x02, 0x00, 0x19, +/* 00007C70 */ 0x4D, 0x02, 0x00, 0xAA, 0x4D, 0x02, 0x00, 0x28, 0x4E, 0x02, 0x00, 0x4E, 0x4E, 0x02, 0x00, 0x43, +/* 00007C80 */ 0x4F, 0x02, 0x00, 0x6D, 0x4F, 0x02, 0x00, 0x7F, 0x4F, 0x02, 0x00, 0x80, 0x4F, 0x02, 0x00, 0xC3, +/* 00007C90 */ 0x4F, 0x02, 0x00, 0x45, 0x50, 0x02, 0x00, 0x78, 0x50, 0x02, 0x00, 0x2E, 0x51, 0x02, 0x00, 0x40, +/* 00007CA0 */ 0x51, 0x02, 0x00, 0x66, 0x51, 0x02, 0x00, 0x74, 0x51, 0x02, 0x00, 0x75, 0x51, 0x02, 0x00, 0xDA, +/* 00007CB0 */ 0x51, 0x02, 0x00, 0x24, 0x52, 0x02, 0x00, 0x98, 0x52, 0x02, 0x00, 0x29, 0x53, 0x02, 0x00, 0x4F, +/* 00007CC0 */ 0x53, 0x02, 0x00, 0x4F, 0x54, 0x02, 0x00, 0x79, 0x54, 0x02, 0x00, 0x8B, 0x54, 0x02, 0x00, 0x8C, +/* 00007CD0 */ 0x54, 0x02, 0x00, 0xD6, 0x54, 0x02, 0x00, 0x05, 0x55, 0x02, 0x00, 0x83, 0x55, 0x02, 0x00, 0xB8, +/* 00007CE0 */ 0x55, 0x02, 0x00, 0x33, 0x56, 0x02, 0x00, 0x45, 0x56, 0x02, 0x00, 0x46, 0x56, 0x02, 0x00, 0x6C, +/* 00007CF0 */ 0x56, 0x02, 0x00, 0x7A, 0x56, 0x02, 0x00, 0x7B, 0x56, 0x02, 0x00, 0xDD, 0x56, 0x02, 0x00, 0x28, +/* 00007D00 */ 0x57, 0x02, 0x00, 0x66, 0x57, 0x02, 0x00, 0xDF, 0x57, 0x02, 0x00, 0xF1, 0x57, 0x02, 0x00, 0xF2, +/* 00007D10 */ 0x57, 0x02, 0x00, 0x2C, 0x58, 0x02, 0x00, 0x99, 0x58, 0x02, 0x00, 0xF8, 0x58, 0x02, 0x00, 0x6D, +/* 00007D20 */ 0x59, 0x02, 0x00, 0x7F, 0x59, 0x02, 0x00, 0x80, 0x59, 0x02, 0x00, 0xBB, 0x59, 0x02, 0x00, 0x26, +/* 00007D30 */ 0x5A, 0x02, 0x00, 0x50, 0x5A, 0x02, 0x00, 0xC4, 0x5A, 0x02, 0x00, 0xE1, 0x5A, 0x02, 0x00, 0x64, +/* 00007D40 */ 0x5B, 0x02, 0x00, 0x7A, 0x5B, 0x02, 0x00, 0xB9, 0x5B, 0x02, 0x00, 0x24, 0x5C, 0x02, 0x00, 0x4E, +/* 00007D50 */ 0x5C, 0x02, 0x00, 0xC2, 0x5C, 0x02, 0x00, 0xDF, 0x5C, 0x02, 0x00, 0x58, 0x5D, 0x02, 0x00, 0x6E, +/* 00007D60 */ 0x5D, 0x02, 0x00, 0x80, 0x5D, 0x02, 0x00, 0x81, 0x5D, 0x02, 0x00, 0x16, 0x5E, 0x02, 0x00, 0xA2, +/* 00007D70 */ 0x5E, 0x02, 0x00, 0x15, 0x5F, 0x02, 0x00, 0x58, 0x5F, 0x02, 0x00, 0xD4, 0x5F, 0x02, 0x00, 0xE6, +/* 00007D80 */ 0x5F, 0x02, 0x00, 0xE7, 0x5F, 0x02, 0x00, 0x21, 0x60, 0x02, 0x00, 0x99, 0x60, 0x02, 0x00, 0xAB, +/* 00007D90 */ 0x60, 0x02, 0x00, 0xAC, 0x60, 0x02, 0x00, 0xE7, 0x60, 0x02, 0x00, 0x61, 0x61, 0x02, 0x00, 0x73, +/* 00007DA0 */ 0x61, 0x02, 0x00, 0x74, 0x61, 0x02, 0x00, 0xB1, 0x61, 0x02, 0x00, 0x2F, 0x62, 0x02, 0x00, 0x41, +/* 00007DB0 */ 0x62, 0x02, 0x00, 0x42, 0x62, 0x02, 0x00, 0x7F, 0x62, 0x02, 0x00, 0xFD, 0x62, 0x02, 0x00, 0x0F, +/* 00007DC0 */ 0x63, 0x02, 0x00, 0x10, 0x63, 0x02, 0x00, 0x53, 0x63, 0x02, 0x00, 0xD0, 0x63, 0x02, 0x00, 0xE2, +/* 00007DD0 */ 0x63, 0x02, 0x00, 0xE3, 0x63, 0x02, 0x00, 0x09, 0x64, 0x02, 0x00, 0x17, 0x64, 0x02, 0x00, 0x18, +/* 00007DE0 */ 0x64, 0x02, 0x00, 0x6D, 0x64, 0x02, 0x00, 0xA6, 0x64, 0x02, 0x00, 0xD6, 0x64, 0x02, 0x00, 0xE8, +/* 00007DF0 */ 0x64, 0x02, 0x00, 0xE9, 0x64, 0x02, 0x00, 0x84, 0x65, 0x02, 0x00, 0xE6, 0x65, 0x02, 0x00, 0xF8, +/* 00007E00 */ 0x65, 0x02, 0x00, 0xF9, 0x65, 0x02, 0x00, 0x38, 0x66, 0x02, 0x00, 0x39, 0x66, 0x02, 0x00, 0x60, +/* 00007E10 */ 0x66, 0x02, 0x00, 0xA5, 0x66, 0x02, 0x00, 0xA6, 0x66, 0x02, 0x00, 0x17, 0x67, 0x02, 0x00, 0x76, +/* 00007E20 */ 0x67, 0x02, 0x00, 0x77, 0x67, 0x02, 0x00, 0xA5, 0x67, 0x02, 0x00, 0xF8, 0x67, 0x02, 0x00, 0x11, +/* 00007E30 */ 0x68, 0x02, 0x00, 0x4F, 0x68, 0x02, 0x00, 0x61, 0x68, 0x02, 0x00, 0x62, 0x68, 0x02, 0x00, 0x90, +/* 00007E40 */ 0x68, 0x02, 0x00, 0xCB, 0x68, 0x02, 0x00, 0xDD, 0x68, 0x02, 0x00, 0xDE, 0x68, 0x02, 0x00, 0x00, +/* 00007E50 */ 0x69, 0x02, 0x00, 0x6F, 0x69, 0x02, 0x00, 0xD6, 0x69, 0x02, 0x00, 0x3A, 0x6A, 0x02, 0x00, 0xBB, +/* 00007E60 */ 0x6A, 0x02, 0x00, 0x1D, 0x6B, 0x02, 0x00, 0x81, 0x6B, 0x02, 0x00, 0xE9, 0x6B, 0x02, 0x00, 0x51, +/* 00007E70 */ 0x6C, 0x02, 0x00, 0xC0, 0x6C, 0x02, 0x00, 0xC1, 0x6C, 0x02, 0x00, 0x30, 0x6D, 0x02, 0x00, 0xA6, +/* 00007E80 */ 0x6D, 0x02, 0x00, 0xA7, 0x6D, 0x02, 0x00, 0x17, 0x6E, 0x02, 0x00, 0x18, 0x6E, 0x02, 0x00, 0x69, +/* 00007E90 */ 0x6E, 0x02, 0x00, 0x8F, 0x6E, 0x02, 0x00, 0xAD, 0x6E, 0x02, 0x00, 0xCD, 0x6E, 0x02, 0x00, 0xEF, +/* 00007EA0 */ 0x6E, 0x02, 0x00, 0x0D, 0x6F, 0x02, 0x00, 0x2D, 0x6F, 0x02, 0x00, 0x51, 0x6F, 0x02, 0x00, 0x75, +/* 00007EB0 */ 0x6F, 0x02, 0x00, 0xA4, 0x6F, 0x02, 0x00, 0xBF, 0x6F, 0x02, 0x00, 0xC0, 0x6F, 0x02, 0x00, 0xE8, +/* 00007EC0 */ 0x6F, 0x02, 0x00, 0x29, 0x70, 0x02, 0x00, 0x9C, 0x70, 0x02, 0x00, 0x9D, 0x70, 0x02, 0x00, 0xC3, +/* 00007ED0 */ 0x70, 0x02, 0x00, 0xF7, 0x70, 0x02, 0x00, 0x2D, 0x71, 0x02, 0x00, 0x72, 0x71, 0x02, 0x00, 0x73, +/* 00007EE0 */ 0x71, 0x02, 0x00, 0x95, 0x71, 0x02, 0x00, 0xC9, 0x71, 0x02, 0x00, 0xF5, 0x71, 0x02, 0x00, 0x23, +/* 00007EF0 */ 0x72, 0x02, 0x00, 0x53, 0x72, 0x02, 0x00, 0x7F, 0x72, 0x02, 0x00, 0xAD, 0x72, 0x02, 0x00, 0xDF, +/* 00007F00 */ 0x72, 0x02, 0x00, 0x11, 0x73, 0x02, 0x00, 0x4F, 0x73, 0x02, 0x00, 0x50, 0x73, 0x02, 0x00, 0x82, +/* 00007F10 */ 0x73, 0x02, 0x00, 0xC2, 0x73, 0x02, 0x00, 0x00, 0x74, 0x02, 0x00, 0x01, 0x74, 0x02, 0x00, 0x43, +/* 00007F20 */ 0x74, 0x02, 0x00, 0x44, 0x74, 0x02, 0x00, 0x57, 0x74, 0x02, 0x00, 0x73, 0x74, 0x02, 0x00, 0xCB, +/* 00007F30 */ 0x74, 0x02, 0x00, 0x45, 0x75, 0x02, 0x00, 0xEA, 0x75, 0x02, 0x00, 0x91, 0x76, 0x02, 0x00, 0xF9, +/* 00007F40 */ 0x76, 0x02, 0x00, 0x10, 0x77, 0x02, 0x00, 0x39, 0x77, 0x02, 0x00, 0x3A, 0x77, 0x02, 0x00, 0x50, +/* 00007F50 */ 0x77, 0x02, 0x00, 0x9F, 0x77, 0x02, 0x00, 0xE0, 0x77, 0x02, 0x00, 0xFE, 0x77, 0x02, 0x00, 0x28, +/* 00007F60 */ 0x78, 0x02, 0x00, 0x52, 0x78, 0x02, 0x00, 0x53, 0x78, 0x02, 0x00, 0xC1, 0x78, 0x02, 0x00, 0x17, +/* 00007F70 */ 0x79, 0x02, 0x00, 0x6B, 0x79, 0x02, 0x00, 0xD5, 0x79, 0x02, 0x00, 0xFD, 0x79, 0x02, 0x00, 0x0F, +/* 00007F80 */ 0x7A, 0x02, 0x00, 0x10, 0x7A, 0x02, 0x00, 0x34, 0x7A, 0x02, 0x00, 0x66, 0x7A, 0x02, 0x00, 0xE6, +/* 00007F90 */ 0x7A, 0x02, 0x00, 0xF8, 0x7A, 0x02, 0x00, 0xF9, 0x7A, 0x02, 0x00, 0x0F, 0x7B, 0x02, 0x00, 0x44, +/* 00007FA0 */ 0x7B, 0x02, 0x00, 0x84, 0x7B, 0x02, 0x00, 0xA2, 0x7B, 0x02, 0x00, 0xCC, 0x7B, 0x02, 0x00, 0xF6, +/* 00007FB0 */ 0x7B, 0x02, 0x00, 0xF7, 0x7B, 0x02, 0x00, 0x59, 0x7C, 0x02, 0x00, 0xDE, 0x7C, 0x02, 0x00, 0x43, +/* 00007FC0 */ 0x7D, 0x02, 0x00, 0x7E, 0x7D, 0x02, 0x00, 0x90, 0x7D, 0x02, 0x00, 0x91, 0x7D, 0x02, 0x00, 0xBE, +/* 00007FD0 */ 0x7D, 0x02, 0x00, 0x23, 0x7E, 0x02, 0x00, 0x24, 0x7E, 0x02, 0x00, 0xA6, 0x7E, 0x02, 0x00, 0xE1, +/* 00007FE0 */ 0x7E, 0x02, 0x00, 0x40, 0x7F, 0x02, 0x00, 0x52, 0x7F, 0x02, 0x00, 0x95, 0x7F, 0x02, 0x00, 0xA3, +/* 00007FF0 */ 0x7F, 0x02, 0x00, 0xA4, 0x7F, 0x02, 0x00, 0xFA, 0x7F, 0x02, 0x00, 0x58, 0x80, 0x02, 0x00, 0xA8, +/* 00008000 */ 0x80, 0x02, 0x00, 0xCB, 0x80, 0x02, 0x00, 0xF2, 0x80, 0x02, 0x00, 0x18, 0x81, 0x02, 0x00, 0x2E, +/* 00008010 */ 0x81, 0x02, 0x00, 0x2F, 0x81, 0x02, 0x00, 0xA4, 0x81, 0x02, 0x00, 0xEF, 0x81, 0x02, 0x00, 0x31, +/* 00008020 */ 0x82, 0x02, 0x00, 0x43, 0x82, 0x02, 0x00, 0x96, 0x82, 0x02, 0x00, 0xCE, 0x82, 0x02, 0x00, 0xF9, +/* 00008030 */ 0x82, 0x02, 0x00, 0x0B, 0x83, 0x02, 0x00, 0x0C, 0x83, 0x02, 0x00, 0x39, 0x83, 0x02, 0x00, 0x95, +/* 00008040 */ 0x83, 0x02, 0x00, 0x03, 0x84, 0x02, 0x00, 0x52, 0x84, 0x02, 0x00, 0x83, 0x84, 0x02, 0x00, 0xDE, +/* 00008050 */ 0x84, 0x02, 0x00, 0xFB, 0x84, 0x02, 0x00, 0x25, 0x85, 0x02, 0x00, 0x63, 0x85, 0x02, 0x00, 0xDD, +/* 00008060 */ 0x85, 0x02, 0x00, 0x38, 0x86, 0x02, 0x00, 0x4E, 0x86, 0x02, 0x00, 0x60, 0x86, 0x02, 0x00, 0x61, +/* 00008070 */ 0x86, 0x02, 0x00, 0x85, 0x86, 0x02, 0x00, 0xBF, 0x86, 0x02, 0x00, 0x31, 0x87, 0x02, 0x00, 0x43, +/* 00008080 */ 0x87, 0x02, 0x00, 0x44, 0x87, 0x02, 0x00, 0xA2, 0x87, 0x02, 0x00, 0xB0, 0x87, 0x02, 0x00, 0xB1, +/* 00008090 */ 0x87, 0x02, 0x00, 0x2E, 0x88, 0x02, 0x00, 0xBA, 0x88, 0x02, 0x00, 0x39, 0x89, 0x02, 0x00, 0xC2, +/* 000080A0 */ 0x89, 0x02, 0x00, 0xE7, 0x89, 0x02, 0x00, 0xF6, 0x89, 0x02, 0x00, 0x81, 0x8A, 0x02, 0x00, 0x07, +/* 000080B0 */ 0x8B, 0x02, 0x00, 0x91, 0x8B, 0x02, 0x00, 0xE5, 0x8B, 0x02, 0x00, 0xF4, 0x8B, 0x02, 0x00, 0x76, +/* 000080C0 */ 0x8C, 0x02, 0x00, 0xE7, 0x8C, 0x02, 0x00, 0x42, 0x8D, 0x02, 0x00, 0xAD, 0x8D, 0x02, 0x00, 0x27, +/* 000080D0 */ 0x8E, 0x02, 0x00, 0x78, 0x8E, 0x02, 0x00, 0x87, 0x8E, 0x02, 0x00, 0xFD, 0x8E, 0x02, 0x00, 0x0C, +/* 000080E0 */ 0x8F, 0x02, 0x00, 0x98, 0x8F, 0x02, 0x00, 0x21, 0x90, 0x02, 0x00, 0x6C, 0x90, 0x02, 0x00, 0x6D, +/* 000080F0 */ 0x90, 0x02, 0x00, 0xBD, 0x90, 0x02, 0x00, 0x5A, 0x91, 0x02, 0x00, 0xDF, 0x91, 0x02, 0x00, 0x08, +/* 00008100 */ 0x92, 0x02, 0x00, 0xB3, 0x92, 0x02, 0x00, 0xB4, 0x92, 0x02, 0x00, 0x04, 0x93, 0x02, 0x00, 0xA5, +/* 00008110 */ 0x93, 0x02, 0x00, 0x2A, 0x94, 0x02, 0x00, 0x53, 0x94, 0x02, 0x00, 0x0C, 0x95, 0x02, 0x00, 0x0D, +/* 00008120 */ 0x95, 0x02, 0x00, 0x5D, 0x95, 0x02, 0x00, 0xFE, 0x95, 0x02, 0x00, 0x83, 0x96, 0x02, 0x00, 0xAC, +/* 00008130 */ 0x96, 0x02, 0x00, 0x65, 0x97, 0x02, 0x00, 0x66, 0x97, 0x02, 0x00, 0x8D, 0x97, 0x02, 0x00, 0xE1, +/* 00008140 */ 0x97, 0x02, 0x00, 0x20, 0x98, 0x02, 0x00, 0x65, 0x98, 0x02, 0x00, 0x7B, 0x98, 0x02, 0x00, 0x7C, +/* 00008150 */ 0x98, 0x02, 0x00, 0xB3, 0x98, 0x02, 0x00, 0xE7, 0x98, 0x02, 0x00, 0x36, 0x99, 0x02, 0x00, 0x4C, +/* 00008160 */ 0x99, 0x02, 0x00, 0x4D, 0x99, 0x02, 0x00, 0x88, 0x99, 0x02, 0x00, 0xCE, 0x99, 0x02, 0x00, 0xCF, +/* 00008170 */ 0x99, 0x02, 0x00, 0x05, 0x9A, 0x02, 0x00, 0x44, 0x9A, 0x02, 0x00, 0x89, 0x9A, 0x02, 0x00, 0x9F, +/* 00008180 */ 0x9A, 0x02, 0x00, 0xA0, 0x9A, 0x02, 0x00, 0xEE, 0x9A, 0x02, 0x00, 0xEF, 0x9A, 0x02, 0x00, 0x55, +/* 00008190 */ 0x9B, 0x02, 0x00, 0x91, 0x9B, 0x02, 0x00, 0x92, 0x9B, 0x02, 0x00, 0xB2, 0x9B, 0x02, 0x00, 0xC4, +/* 000081A0 */ 0x9B, 0x02, 0x00, 0x0E, 0x9C, 0x02, 0x00, 0x0F, 0x9C, 0x02, 0x00, 0x37, 0x9C, 0x02, 0x00, 0x6B, +/* 000081B0 */ 0x9C, 0x02, 0x00, 0xD8, 0x9C, 0x02, 0x00, 0xEE, 0x9C, 0x02, 0x00, 0x35, 0x9D, 0x02, 0x00, 0x98, +/* 000081C0 */ 0x9D, 0x02, 0x00, 0x05, 0x9E, 0x02, 0x00, 0x1B, 0x9E, 0x02, 0x00, 0x1C, 0x9E, 0x02, 0x00, 0x6E, +/* 000081D0 */ 0x9E, 0x02, 0x00, 0xA3, 0x9E, 0x02, 0x00, 0xB9, 0x9E, 0x02, 0x00, 0xBA, 0x9E, 0x02, 0x00, 0xE9, +/* 000081E0 */ 0x9E, 0x02, 0x00, 0x17, 0x9F, 0x02, 0x00, 0x53, 0x9F, 0x02, 0x00, 0x70, 0x9F, 0x02, 0x00, 0x9F, +/* 000081F0 */ 0x9F, 0x02, 0x00, 0xB5, 0x9F, 0x02, 0x00, 0xB6, 0x9F, 0x02, 0x00, 0x0B, 0xA0, 0x02, 0x00, 0x1D, +/* 00008200 */ 0xA0, 0x02, 0x00, 0x70, 0xA0, 0x02, 0x00, 0x71, 0xA0, 0x02, 0x00, 0xB8, 0xA0, 0x02, 0x00, 0xB9, +/* 00008210 */ 0xA0, 0x02, 0x00, 0x56, 0xA1, 0x02, 0x00, 0xA0, 0xA1, 0x02, 0x00, 0x41, 0xA2, 0x02, 0x00, 0x42, +/* 00008220 */ 0xA2, 0x02, 0x00, 0x8D, 0xA2, 0x02, 0x00, 0xD4, 0xA2, 0x02, 0x00, 0x0C, 0xA3, 0x02, 0x00, 0x7D, +/* 00008230 */ 0xA3, 0x02, 0x00, 0x97, 0xA3, 0x02, 0x00, 0x98, 0xA3, 0x02, 0x00, 0xE3, 0xA3, 0x02, 0x00, 0x4A, +/* 00008240 */ 0xA4, 0x02, 0x00, 0xBB, 0xA4, 0x02, 0x00, 0xD5, 0xA4, 0x02, 0x00, 0xD6, 0xA4, 0x02, 0x00, 0x11, +/* 00008250 */ 0xA5, 0x02, 0x00, 0x4F, 0xA5, 0x02, 0x00, 0x63, 0xA5, 0x02, 0x00, 0x64, 0xA5, 0x02, 0x00, 0xB8, +/* 00008260 */ 0xA5, 0x02, 0x00, 0xF0, 0xA5, 0x02, 0x00, 0x28, 0xA6, 0x02, 0x00, 0xA2, 0xA6, 0x02, 0x00, 0xBC, +/* 00008270 */ 0xA6, 0x02, 0x00, 0x07, 0xA7, 0x02, 0x00, 0x6E, 0xA7, 0x02, 0x00, 0xE8, 0xA7, 0x02, 0x00, 0x02, +/* 00008280 */ 0xA8, 0x02, 0x00, 0x34, 0xA8, 0x02, 0x00, 0x6F, 0xA8, 0x02, 0x00, 0xC6, 0xA8, 0x02, 0x00, 0x2B, +/* 00008290 */ 0xA9, 0x02, 0x00, 0x6A, 0xA9, 0x02, 0x00, 0xA5, 0xA9, 0x02, 0x00, 0xE2, 0xA9, 0x02, 0x00, 0x17, +/* 000082A0 */ 0xAA, 0x02, 0x00, 0x4E, 0xAA, 0x02, 0x00, 0x87, 0xAA, 0x02, 0x00, 0xBC, 0xAA, 0x02, 0x00, 0xF3, +/* 000082B0 */ 0xAA, 0x02, 0x00, 0x2E, 0xAB, 0x02, 0x00, 0x69, 0xAB, 0x02, 0x00, 0xAF, 0xAB, 0x02, 0x00, 0xD0, +/* 000082C0 */ 0xAB, 0x02, 0x00, 0x0E, 0xAC, 0x02, 0x00, 0x80, 0xAC, 0x02, 0x00, 0x22, 0xAD, 0x02, 0x00, 0x5E, +/* 000082D0 */ 0xAD, 0x02, 0x00, 0x7C, 0xAD, 0x02, 0x00, 0xA6, 0xAD, 0x02, 0x00, 0xEE, 0xAD, 0x02, 0x00, 0x3B, +/* 000082E0 */ 0xAE, 0x02, 0x00, 0x4F, 0xAE, 0x02, 0x00, 0x50, 0xAE, 0x02, 0x00, 0xEE, 0xAE, 0x02, 0x00, 0xEF, +/* 000082F0 */ 0xAE, 0x02, 0x00, 0x16, 0xAF, 0x02, 0x00, 0x24, 0xAF, 0x02, 0x00, 0x2E, 0xAF, 0x02, 0x00, 0x7F, +/* 00008300 */ 0xAF, 0x02, 0x00, 0x99, 0xAF, 0x02, 0x00, 0xA3, 0xAF, 0x02, 0x00, 0xA4, 0xAF, 0x02, 0x00, 0xD5, +/* 00008310 */ 0xAF, 0x02, 0x00, 0xF4, 0xAF, 0x02, 0x00, 0x70, 0xB0, 0x02, 0x00, 0xF4, 0xB0, 0x02, 0x00, 0x7C, +/* 00008320 */ 0xB1, 0x02, 0x00, 0x0E, 0xB2, 0x02, 0x00, 0x14, 0xB2, 0x02, 0x00, 0x15, 0xB2, 0x02, 0x00, 0x2A, +/* 00008330 */ 0xB2, 0x02, 0x00, 0x2E, 0xB2, 0x02, 0x00, 0x00, 0xC7, 0x73, 0x0C, 0x00, 0x00, 0x00, 0x10, 0x08, +/* 00008340 */ 0x00, 0xA8, 0x41, 0xC0, 0x00, 0xFE, 0xD9, 0x02, 0x00, 0xFE, 0xBC, 0x01, 0xFE, 0xBC, 0x01, 0x01, +/* 00008350 */ 0x40, 0xFE, 0x00, 0x90, 0xFE, 0xBC, 0x01, 0xFF, 0x72, 0xB0, 0x02, 0x00, 0xFF, 0x72, 0xB0, 0x02, +/* 00008360 */ 0x00, 0x01, 0x04, 0x04, 0x04, 0x04, 0x03, 0x05, 0xFE, 0xDA, 0x02, 0x0A, 0x07, 0xA8, 0x00, 0xD6, +/* 00008370 */ 0x00, 0x04, 0x24, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x83, 0x00, 0x00, 0x7F, +/* 00008380 */ 0x1D, 0x08, 0xC1, 0x53, 0x5A, 0x4B, 0x04, 0x08, 0x01, 0xA2, 0x41, 0xD1, 0x00, 0x01, 0xFE, 0xDC, +/* 00008390 */ 0x01, 0xFE, 0xDC, 0x01, 0x5B, 0x40, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, 0xDC, 0x01, 0xFF, 0x4F, +/* 000083A0 */ 0xB0, 0x02, 0x00, 0xFF, 0x4F, 0xB0, 0x02, 0x00, 0x35, 0xFE, 0xDB, 0x02, 0xFE, 0x14, 0x02, 0xFE, +/* 000083B0 */ 0xDC, 0x02, 0xFE, 0xDD, 0x02, 0xFE, 0xDE, 0x02, 0xBB, 0x58, 0xFE, 0x11, 0x01, 0xFE, 0x39, 0x01, +/* 000083C0 */ 0xFE, 0x0B, 0x01, 0xFE, 0x5C, 0x01, 0x6B, 0x7F, 0xFE, 0xDF, 0x02, 0xD7, 0xFE, 0xE0, 0x02, 0xFE, +/* 000083D0 */ 0xE1, 0x02, 0xFE, 0xE2, 0x02, 0xFE, 0xE3, 0x02, 0xFE, 0xE4, 0x02, 0xFE, 0xE5, 0x02, 0xFE, 0xE6, +/* 000083E0 */ 0x02, 0xFE, 0xE7, 0x02, 0xFE, 0xE8, 0x02, 0xFE, 0xE9, 0x02, 0xFE, 0xEA, 0x02, 0xFE, 0xEB, 0x02, +/* 000083F0 */ 0xFE, 0xEC, 0x02, 0xFE, 0xED, 0x02, 0xFE, 0xEE, 0x02, 0xC1, 0xC4, 0xFE, 0xEF, 0x02, 0xFE, 0xF0, +/* 00008400 */ 0x02, 0xFE, 0xF1, 0x02, 0xFE, 0xF2, 0x02, 0xFE, 0xF4, 0x01, 0xFE, 0xF3, 0x01, 0xFE, 0xF3, 0x02, +/* 00008410 */ 0xFE, 0xF4, 0x02, 0xFE, 0xF5, 0x02, 0xFE, 0xF6, 0x02, 0xFE, 0xF7, 0x02, 0xFE, 0xF8, 0x02, 0xFE, +/* 00008420 */ 0x12, 0x02, 0xFE, 0xF9, 0x02, 0xFE, 0xFA, 0x02, 0xFE, 0xFB, 0x02, 0xFE, 0xFC, 0x02, 0xFE, 0xFD, +/* 00008430 */ 0x02, 0xFE, 0xFE, 0x02, 0xFE, 0xFF, 0x02, 0xFE, 0x00, 0x03, 0x1E, 0x53, 0x6B, 0x09, 0xFE, 0x9D, +/* 00008440 */ 0x03, 0xFE, 0x92, 0x03, 0x31, 0x16, 0xA0, 0xA0, 0xA0, 0xA0, 0x1B, 0x02, 0x68, 0x69, 0x6A, 0x6B, +/* 00008450 */ 0x08, 0x0B, 0x06, 0xFE, 0xFE, 0x02, 0x06, 0xFE, 0x01, 0x03, 0x06, 0xFE, 0x02, 0x03, 0x06, 0xFE, +/* 00008460 */ 0x03, 0x03, 0x06, 0xFE, 0x04, 0x03, 0x07, 0x06, 0xFE, 0x05, 0x03, 0x06, 0xFE, 0x06, 0x03, 0x06, +/* 00008470 */ 0xFE, 0x07, 0x03, 0x06, 0xFE, 0x08, 0x03, 0x06, 0xFE, 0x09, 0x03, 0x06, 0xFE, 0x0A, 0x03, 0x06, +/* 00008480 */ 0xFE, 0x0B, 0x03, 0x06, 0xFE, 0x0C, 0x03, 0x06, 0xFE, 0x0D, 0x03, 0x06, 0xFE, 0x0E, 0x03, 0x06, +/* 00008490 */ 0xFE, 0x0F, 0x03, 0x06, 0xFE, 0x10, 0x03, 0x06, 0xFE, 0x11, 0x03, 0x06, 0xFE, 0x12, 0x03, 0x06, +/* 000084A0 */ 0xFE, 0x13, 0x03, 0x06, 0xFE, 0x14, 0x03, 0x06, 0xFE, 0x15, 0x03, 0x06, 0xFE, 0x16, 0x03, 0x06, +/* 000084B0 */ 0xFE, 0x17, 0x03, 0x06, 0xFE, 0x18, 0x03, 0x06, 0xFE, 0x19, 0x03, 0x06, 0xFE, 0x1A, 0x03, 0x06, +/* 000084C0 */ 0xFE, 0x1B, 0x03, 0x06, 0xFE, 0x1C, 0x03, 0x06, 0xFE, 0x1D, 0x03, 0x06, 0xFE, 0x1E, 0x03, 0x06, +/* 000084D0 */ 0xFE, 0x1F, 0x03, 0x06, 0xFE, 0x20, 0x03, 0x06, 0xFE, 0x21, 0x03, 0x06, 0xFE, 0x22, 0x03, 0x06, +/* 000084E0 */ 0xFE, 0x23, 0x03, 0x06, 0xFE, 0x24, 0x03, 0x06, 0xFE, 0x25, 0x03, 0x06, 0xFE, 0x26, 0x03, 0x06, +/* 000084F0 */ 0xFE, 0x27, 0x03, 0x05, 0xFE, 0x28, 0x03, 0x06, 0xFE, 0x29, 0x03, 0x06, 0xFE, 0x2A, 0x03, 0x06, +/* 00008500 */ 0xFE, 0x2B, 0x03, 0x06, 0xFE, 0x2C, 0x03, 0x0C, 0x06, 0xFE, 0x2D, 0x03, 0x06, 0xFE, 0x2E, 0x03, +/* 00008510 */ 0x06, 0xFE, 0x2F, 0x03, 0x06, 0xFE, 0x30, 0x03, 0x06, 0xFE, 0x31, 0x03, 0x06, 0xFE, 0x32, 0x03, +/* 00008520 */ 0x05, 0xFE, 0x33, 0x03, 0x05, 0xFE, 0x34, 0x03, 0x05, 0xFE, 0x35, 0x03, 0x05, 0xFE, 0x36, 0x03, +/* 00008530 */ 0x06, 0xFE, 0x37, 0x03, 0x06, 0xFE, 0x38, 0x03, 0x06, 0xFE, 0x39, 0x03, 0x06, 0xFE, 0x3A, 0x03, +/* 00008540 */ 0x05, 0xFE, 0x3B, 0x03, 0x06, 0xFE, 0x3C, 0x03, 0x06, 0xFE, 0x3D, 0x03, 0x06, 0xFE, 0x3E, 0x03, +/* 00008550 */ 0x05, 0xFE, 0x3F, 0x03, 0x06, 0xFE, 0x40, 0x03, 0x06, 0xFE, 0x41, 0x03, 0x05, 0xFE, 0x42, 0x03, +/* 00008560 */ 0x06, 0xFE, 0x43, 0x03, 0x06, 0xFE, 0x44, 0x03, 0x05, 0xFE, 0x45, 0x03, 0x06, 0xFE, 0x46, 0x03, +/* 00008570 */ 0x06, 0xFE, 0x47, 0x03, 0x06, 0xFE, 0x48, 0x03, 0x06, 0xFE, 0x49, 0x03, 0x06, 0xFE, 0x4A, 0x03, +/* 00008580 */ 0x06, 0xFE, 0x4B, 0x03, 0x06, 0xFE, 0x4C, 0x03, 0xFE, 0xBB, 0x0F, 0x96, 0x32, 0x54, 0xA8, 0x62, +/* 00008590 */ 0xA8, 0x63, 0xA8, 0x67, 0xD6, 0x01, 0x55, 0x96, 0x02, 0x55, 0x4E, 0x5F, 0x4E, 0x61, 0x4E, 0x64, +/* 000085A0 */ 0xA8, 0x56, 0xA8, 0x57, 0x4E, 0x60, 0x4E, 0x65, 0x4E, 0x66, 0xA8, 0x58, 0xA8, 0x59, 0xA8, 0x5A, +/* 000085B0 */ 0xA8, 0x5B, 0xA8, 0x5C, 0xA8, 0x5D, 0xA8, 0x5E, 0x4E, 0x6D, 0x96, 0x33, 0x6D, 0x4E, 0x6D, 0x96, +/* 000085C0 */ 0x34, 0x6D, 0x4E, 0x6D, 0x96, 0x35, 0x6D, 0x4E, 0x6D, 0x96, 0x36, 0x6D, 0x5F, 0x6D, 0x53, 0x00, +/* 000085D0 */ 0x96, 0x03, 0x6D, 0x93, 0x03, 0x6D, 0x00, 0x00, 0x77, 0x03, 0x6D, 0x01, 0x93, 0x03, 0x6E, 0x00, +/* 000085E0 */ 0x00, 0x5F, 0x6E, 0x6E, 0x02, 0xAD, 0x6D, 0x0F, 0x02, 0x00, 0x6E, 0xAC, 0x6D, 0x96, 0x33, 0x6D, +/* 000085F0 */ 0x93, 0x03, 0x6D, 0x00, 0x00, 0x5F, 0x6D, 0x6D, 0x03, 0x45, 0x5F, 0x6D, 0x96, 0x34, 0x04, 0x93, +/* 00008600 */ 0x03, 0x6D, 0x00, 0x00, 0x5F, 0x6D, 0x6D, 0x04, 0x96, 0x04, 0x6D, 0x93, 0x03, 0x6D, 0x00, 0x00, +/* 00008610 */ 0x5F, 0x6D, 0x6D, 0x05, 0x96, 0x05, 0x6D, 0x93, 0x03, 0x6D, 0x00, 0x00, 0x5F, 0x6D, 0x6D, 0x06, +/* 00008620 */ 0x96, 0x06, 0x6D, 0xD6, 0x00, 0x6D, 0x96, 0x35, 0x6D, 0x93, 0x03, 0x6D, 0x00, 0x00, 0x5F, 0x6D, +/* 00008630 */ 0x6D, 0x07, 0x96, 0x07, 0x6D, 0x93, 0x03, 0x6D, 0x00, 0x00, 0x5F, 0x6D, 0x6D, 0x08, 0x96, 0x08, +/* 00008640 */ 0x6D, 0x93, 0x03, 0x6D, 0x00, 0x00, 0x5F, 0x6D, 0x6D, 0x09, 0x96, 0x09, 0x6D, 0x93, 0x03, 0x6D, +/* 00008650 */ 0x00, 0x00, 0x5F, 0x6D, 0x6D, 0x0A, 0x96, 0x0A, 0x6D, 0x93, 0x03, 0x6D, 0x00, 0x00, 0x5F, 0x6D, +/* 00008660 */ 0x6D, 0x0B, 0x96, 0x0B, 0x6D, 0x93, 0x03, 0x6D, 0x00, 0x00, 0x5F, 0x6D, 0x6D, 0x0C, 0x96, 0x0C, +/* 00008670 */ 0x6D, 0x93, 0x03, 0x6D, 0x00, 0x00, 0x5F, 0x6D, 0x6D, 0x0D, 0x96, 0x0D, 0x6D, 0x93, 0x03, 0x6D, +/* 00008680 */ 0x00, 0x00, 0x5F, 0x6D, 0x6D, 0x0E, 0x96, 0x0E, 0x6D, 0x93, 0x03, 0x6D, 0x00, 0x00, 0x5F, 0x6D, +/* 00008690 */ 0x6D, 0x0F, 0x96, 0x0F, 0x6D, 0x93, 0x04, 0x6D, 0x01, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, +/* 000086A0 */ 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x93, 0x03, 0x6F, +/* 000086B0 */ 0x00, 0x00, 0x5F, 0x6F, 0x6F, 0x10, 0x7B, 0x6F, 0x6E, 0x11, 0x93, 0x03, 0x6F, 0x00, 0x00, 0x5F, +/* 000086C0 */ 0x6F, 0x6F, 0x12, 0x7B, 0x6F, 0x6E, 0x13, 0x93, 0x03, 0x6F, 0x00, 0x00, 0x5F, 0x6F, 0x6F, 0x14, +/* 000086D0 */ 0x7B, 0x6F, 0x6E, 0x15, 0x93, 0x03, 0x6F, 0x00, 0x00, 0x5F, 0x6F, 0x6F, 0x16, 0x7B, 0x6F, 0x6E, +/* 000086E0 */ 0x17, 0x5A, 0x01, 0x6E, 0x00, 0x00, 0x5A, 0x02, 0x09, 0x00, 0x00, 0xF0, 0x03, 0x6D, 0x6D, 0x00, +/* 000086F0 */ 0x00, 0x96, 0x10, 0x6D, 0x93, 0x03, 0x6D, 0x00, 0x00, 0x5F, 0x6D, 0x6D, 0x18, 0x96, 0x11, 0x6D, +/* 00008700 */ 0x93, 0x03, 0x6D, 0x00, 0x00, 0x5F, 0x6D, 0x6D, 0x19, 0x96, 0x12, 0x6D, 0x93, 0x03, 0x6D, 0x00, +/* 00008710 */ 0x00, 0x5F, 0x6D, 0x6D, 0x1A, 0x96, 0x13, 0x6D, 0x93, 0x03, 0x6D, 0x00, 0x00, 0x5F, 0x6D, 0x6D, +/* 00008720 */ 0x1B, 0x96, 0x14, 0x6D, 0x93, 0x03, 0x6D, 0x00, 0x00, 0x5F, 0x6D, 0x6D, 0x1C, 0x96, 0x15, 0x6D, +/* 00008730 */ 0xD6, 0x02, 0x6D, 0x96, 0x16, 0x6D, 0x93, 0x03, 0x6D, 0x00, 0x00, 0x5F, 0x6D, 0x6D, 0x1D, 0x96, +/* 00008740 */ 0x17, 0x6D, 0x93, 0x03, 0x6D, 0x00, 0x00, 0x5F, 0x6D, 0x6D, 0x1E, 0x96, 0x18, 0x6D, 0x93, 0x03, +/* 00008750 */ 0x6D, 0x00, 0x00, 0x5F, 0x6D, 0x6D, 0x1F, 0x96, 0x19, 0x6D, 0x93, 0x03, 0x6D, 0x00, 0x00, 0x5F, +/* 00008760 */ 0x6D, 0x6D, 0x20, 0x96, 0x1A, 0x6D, 0x93, 0x03, 0x6D, 0x00, 0x00, 0x5F, 0x6D, 0x6D, 0x21, 0x96, +/* 00008770 */ 0x1B, 0x6D, 0x93, 0x03, 0x6D, 0x00, 0x00, 0x5F, 0x6D, 0x6D, 0x22, 0x96, 0x1C, 0x6D, 0x93, 0x03, +/* 00008780 */ 0x6D, 0x00, 0x00, 0x5F, 0x6D, 0x6D, 0x23, 0x96, 0x1D, 0x6D, 0x93, 0x03, 0x6D, 0x00, 0x00, 0x5F, +/* 00008790 */ 0x6D, 0x6D, 0x24, 0x96, 0x1E, 0x6D, 0x93, 0x03, 0x6D, 0x00, 0x00, 0x5F, 0x6D, 0x6D, 0x25, 0x96, +/* 000087A0 */ 0x1F, 0x6D, 0x93, 0x03, 0x6D, 0x00, 0x00, 0x5F, 0x6D, 0x6D, 0x26, 0x96, 0x20, 0x6D, 0x93, 0x03, +/* 000087B0 */ 0x6D, 0x00, 0x00, 0x5F, 0x6D, 0x6D, 0x27, 0x96, 0x21, 0x6D, 0xCE, 0x18, 0x00, 0x00, 0x00, 0x01, +/* 000087C0 */ 0x00, 0x00, 0x00, 0x6D, 0x00, 0x00, 0x00, 0xD9, 0x03, 0x6E, 0x6D, 0x7B, 0x6E, 0x6D, 0x28, 0xD9, +/* 000087D0 */ 0x04, 0x6E, 0x6D, 0x7B, 0x6E, 0x6D, 0x29, 0xD9, 0x05, 0x6E, 0x6D, 0x7B, 0x6E, 0x6D, 0x2A, 0xD9, +/* 000087E0 */ 0x06, 0x6E, 0x6D, 0x7B, 0x6E, 0x6D, 0x2B, 0xD9, 0x07, 0x6E, 0x6D, 0x7B, 0x6E, 0x6D, 0x2C, 0xD9, +/* 000087F0 */ 0x08, 0x6E, 0x6D, 0x7B, 0x6E, 0x6D, 0x2D, 0xD9, 0x09, 0x6E, 0x6D, 0x7B, 0x6E, 0x6D, 0x2E, 0xD9, +/* 00008800 */ 0x0A, 0x6E, 0x6D, 0x7B, 0x6E, 0x6D, 0x2F, 0xD9, 0x0B, 0x6E, 0x6D, 0x7B, 0x6E, 0x6D, 0x30, 0xD9, +/* 00008810 */ 0x0C, 0x6E, 0x6D, 0x7B, 0x6E, 0x6D, 0x31, 0xD9, 0x0D, 0x6E, 0x6D, 0x7B, 0x6E, 0x6D, 0x32, 0xD9, +/* 00008820 */ 0x0E, 0x6E, 0x6D, 0x7B, 0x6E, 0x6D, 0x33, 0xD9, 0x0F, 0x6E, 0x6D, 0x7B, 0x6E, 0x6D, 0x34, 0xD9, +/* 00008830 */ 0x10, 0x6E, 0x6D, 0x7B, 0x6E, 0x6D, 0x35, 0xD9, 0x11, 0x6E, 0x6D, 0x7B, 0x6E, 0x6D, 0x36, 0xD9, +/* 00008840 */ 0x12, 0x6E, 0x6D, 0x7B, 0x6E, 0x6D, 0x37, 0xD9, 0x13, 0x6E, 0x6D, 0x7B, 0x6E, 0x6D, 0x38, 0x93, +/* 00008850 */ 0x03, 0x6E, 0x00, 0x00, 0x5F, 0x6E, 0x6E, 0x39, 0x7B, 0x6E, 0x6D, 0x3A, 0xD9, 0x14, 0x6E, 0x6D, +/* 00008860 */ 0x7B, 0x6E, 0x6D, 0x3B, 0xD9, 0x15, 0x6E, 0x6D, 0x7B, 0x6E, 0x6D, 0x3C, 0x93, 0x03, 0x6E, 0x00, +/* 00008870 */ 0x00, 0x5F, 0x6E, 0x6E, 0x3D, 0x7B, 0x6E, 0x6D, 0x3E, 0xD9, 0x16, 0x6E, 0x6D, 0x7B, 0x6E, 0x6D, +/* 00008880 */ 0x3F, 0xD9, 0x17, 0x6E, 0x6D, 0x7B, 0x6E, 0x6D, 0x40, 0x93, 0x03, 0x6E, 0x00, 0x00, 0x5F, 0x6E, +/* 00008890 */ 0x6E, 0x41, 0x7B, 0x6E, 0x6D, 0x42, 0xD9, 0x18, 0x6E, 0x6D, 0x7B, 0x6E, 0x6D, 0x43, 0x93, 0x03, +/* 000088A0 */ 0x6E, 0x00, 0x00, 0x5F, 0x6E, 0x6E, 0x44, 0x7B, 0x6E, 0x6D, 0x45, 0x93, 0x03, 0x6E, 0x00, 0x00, +/* 000088B0 */ 0x5F, 0x6E, 0x6E, 0x46, 0x7B, 0x6E, 0x6D, 0x47, 0x93, 0x03, 0x6E, 0x00, 0x00, 0x5F, 0x6E, 0x6E, +/* 000088C0 */ 0x48, 0x7B, 0x6E, 0x6D, 0x49, 0x93, 0x03, 0x6E, 0x00, 0x00, 0x5F, 0x6E, 0x6E, 0x4A, 0x7B, 0x6E, +/* 000088D0 */ 0x6D, 0x4B, 0xD9, 0x19, 0x6E, 0x6D, 0x7B, 0x6E, 0x6D, 0x4C, 0xD9, 0x1A, 0x6E, 0x6D, 0x7B, 0x6E, +/* 000088E0 */ 0x6D, 0x4D, 0xD9, 0x1B, 0x6E, 0x6D, 0x7B, 0x6E, 0x6D, 0x4E, 0x96, 0x36, 0x6D, 0x93, 0x33, 0x6D, +/* 000088F0 */ 0x02, 0x00, 0x0E, 0x38, 0x04, 0x6D, 0xE0, 0x00, 0x18, 0x03, 0xB9, 0x6D, 0x00, 0x01, 0x66, 0x01, +/* 00008900 */ 0x2B, 0x56, 0x6D, 0x95, 0x00, 0x02, 0x56, 0x01, 0x66, 0x01, 0x2D, 0x57, 0x6D, 0x95, 0x00, 0x03, +/* 00008910 */ 0x57, 0x4E, 0x6D, 0x95, 0x00, 0x04, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x05, 0x6D, 0x4E, 0x6D, 0x95, +/* 00008920 */ 0x00, 0x06, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x07, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x08, 0x6D, 0x4E, +/* 00008930 */ 0x6D, 0x95, 0x00, 0x09, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x0A, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x0B, +/* 00008940 */ 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x0C, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x0D, 0x6D, 0x4E, 0x6D, 0x95, +/* 00008950 */ 0x00, 0x0E, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x0F, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x10, 0x6D, 0x4E, +/* 00008960 */ 0x6D, 0x95, 0x00, 0x11, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x12, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x13, +/* 00008970 */ 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x14, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x15, 0x6D, 0x4E, 0x6D, 0x95, +/* 00008980 */ 0x00, 0x16, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x17, 0x6D, 0xA8, 0x6D, 0x95, 0x00, 0x04, 0x6D, 0xB9, +/* 00008990 */ 0x6E, 0x00, 0x01, 0x66, 0x01, 0x1C, 0x6D, 0x6E, 0x95, 0x00, 0x05, 0x6D, 0xB9, 0x6E, 0x00, 0x01, +/* 000089A0 */ 0x66, 0x01, 0x1D, 0x6D, 0x6E, 0x96, 0x22, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x1E, 0x6D, +/* 000089B0 */ 0x6E, 0x96, 0x23, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x1F, 0x6D, 0x6E, 0x95, 0x00, 0x06, +/* 000089C0 */ 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x20, 0x6D, 0x6E, 0x95, 0x00, 0x07, 0x6D, 0xB9, 0x6E, +/* 000089D0 */ 0x00, 0x01, 0x66, 0x01, 0x21, 0x6D, 0x6E, 0x95, 0x00, 0x08, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, +/* 000089E0 */ 0x01, 0x22, 0x6D, 0x6E, 0x95, 0x00, 0x09, 0x6D, 0x91, 0x00, 0x09, 0x6D, 0x03, 0x00, 0x95, 0x00, +/* 000089F0 */ 0x0A, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x23, 0x6D, 0x6E, 0x95, 0x00, 0x0B, 0x6D, 0xB9, +/* 00008A00 */ 0x6E, 0x00, 0x01, 0x66, 0x01, 0x24, 0x6D, 0x6E, 0x95, 0x00, 0x0C, 0x6D, 0x93, 0x35, 0x6D, 0x04, +/* 00008A10 */ 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0xCE, 0xA0, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, +/* 00008A20 */ 0x6E, 0x00, 0x00, 0x00, 0xB9, 0x70, 0x00, 0x01, 0x6A, 0x01, 0x25, 0x6F, 0x70, 0x6E, 0x7B, 0x6F, +/* 00008A30 */ 0x6E, 0x4F, 0xB9, 0x70, 0x00, 0x01, 0x6A, 0x01, 0x26, 0x6F, 0x70, 0x6E, 0x7B, 0x6F, 0x6E, 0x50, +/* 00008A40 */ 0xB9, 0x70, 0x00, 0x01, 0x6A, 0x01, 0x27, 0x6F, 0x70, 0x6E, 0x7B, 0x6F, 0x6E, 0x51, 0xB9, 0x70, +/* 00008A50 */ 0x00, 0x01, 0x6A, 0x01, 0x28, 0x6F, 0x70, 0x6E, 0x7B, 0x6F, 0x6E, 0x52, 0xB9, 0x70, 0x00, 0x01, +/* 00008A60 */ 0x6A, 0x01, 0x29, 0x6F, 0x70, 0x6E, 0x7B, 0x6F, 0x6E, 0x53, 0xB9, 0x70, 0x00, 0x01, 0x6A, 0x01, +/* 00008A70 */ 0x2A, 0x6F, 0x70, 0x6E, 0x7B, 0x6F, 0x6E, 0x54, 0x5A, 0x01, 0x6E, 0x01, 0x00, 0xF0, 0x02, 0x6D, +/* 00008A80 */ 0x6D, 0x01, 0x00, 0x96, 0x24, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x2C, 0x6D, 0x6E, 0x95, +/* 00008A90 */ 0x00, 0x0D, 0x6D, 0xA8, 0x6D, 0x95, 0x00, 0x0E, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x2E, +/* 00008AA0 */ 0x6D, 0x6E, 0x07, 0x01, 0x00, 0x59, 0x00, 0x02, 0xF0, 0x01, 0x6D, 0x6D, 0x02, 0x00, 0x95, 0x00, +/* 00008AB0 */ 0x0F, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x2F, 0x6D, 0x6E, 0x95, 0x00, 0x10, 0x6D, 0xB9, +/* 00008AC0 */ 0x6E, 0x00, 0x01, 0x66, 0x01, 0x30, 0x6D, 0x6E, 0x95, 0x00, 0x11, 0x6D, 0xB9, 0x6E, 0x00, 0x01, +/* 00008AD0 */ 0x66, 0x01, 0x31, 0x6D, 0x6E, 0x95, 0x00, 0x12, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x32, +/* 00008AE0 */ 0x6D, 0x6E, 0x95, 0x00, 0x13, 0x6D, 0x91, 0x00, 0x13, 0x6D, 0x05, 0x00, 0x95, 0x00, 0x14, 0x6D, +/* 00008AF0 */ 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x33, 0x6D, 0x6E, 0x95, 0x00, 0x15, 0x6D, 0xB9, 0x6E, 0x00, +/* 00008B00 */ 0x01, 0x66, 0x01, 0x34, 0x6D, 0x6E, 0x95, 0x00, 0x16, 0x6D, 0x93, 0x32, 0x6D, 0x06, 0x00, 0x14, +/* 00008B10 */ 0x03, 0x00, 0x6D, 0x2C, 0x09, 0x72, 0x00, 0x91, 0x00, 0x06, 0x6D, 0x07, 0x00, 0x07, 0x03, 0x00, +/* 00008B20 */ 0x59, 0x00, 0x02, 0x5A, 0x01, 0x2D, 0x03, 0x00, 0xB9, 0x6F, 0x00, 0x01, 0x66, 0x01, 0x35, 0x6E, +/* 00008B30 */ 0x6F, 0x5A, 0x02, 0x6E, 0x03, 0x00, 0xF0, 0x03, 0x6D, 0x6D, 0x03, 0x00, 0x45, 0x60, 0x6D, 0x93, +/* 00008B40 */ 0x36, 0x6E, 0x08, 0x00, 0x6D, 0x6D, 0x6E, 0x55, 0x07, 0x04, 0x00, 0x59, 0x00, 0x6E, 0x93, 0x07, +/* 00008B50 */ 0x6F, 0x09, 0x00, 0x5A, 0x01, 0x6F, 0x04, 0x00, 0x5A, 0x02, 0x2E, 0x04, 0x00, 0xCE, 0xC0, 0x00, +/* 00008B60 */ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x00, 0x00, 0x7B, 0x60, 0x6F, 0x56, 0x7B, 0x03, +/* 00008B70 */ 0x6F, 0x57, 0x7B, 0x32, 0x6F, 0x58, 0x7B, 0x03, 0x6F, 0x59, 0x5A, 0x03, 0x6F, 0x04, 0x00, 0xF4, +/* 00008B80 */ 0x04, 0xFF, 0x6D, 0x55, 0x00, 0x00, 0x00, 0x04, 0x00, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x36, +/* 00008B90 */ 0x6D, 0x6E, 0x95, 0x00, 0x17, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x37, 0x6D, 0x6E, 0x07, +/* 00008BA0 */ 0x01, 0x00, 0x59, 0x00, 0x02, 0xF0, 0x01, 0x6D, 0x6D, 0x05, 0x00, 0x45, 0x61, 0x6D, 0xB9, 0x6E, +/* 00008BB0 */ 0x00, 0x01, 0x66, 0x01, 0x38, 0x6D, 0x6E, 0x07, 0x01, 0x00, 0x59, 0x00, 0x02, 0xF0, 0x01, 0x6D, +/* 00008BC0 */ 0x6D, 0x06, 0x00, 0x45, 0x62, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x39, 0x6D, 0x6E, 0x07, +/* 00008BD0 */ 0x01, 0x00, 0x59, 0x00, 0x02, 0xF0, 0x01, 0x6D, 0x6D, 0x07, 0x00, 0x45, 0x63, 0x6D, 0xB9, 0x6E, +/* 00008BE0 */ 0x00, 0x01, 0x66, 0x01, 0x3A, 0x6D, 0x6E, 0x07, 0x01, 0x00, 0x59, 0x00, 0x02, 0xF0, 0x01, 0x6D, +/* 00008BF0 */ 0x6D, 0x08, 0x00, 0x45, 0x64, 0x6D, 0x93, 0x32, 0x6D, 0x06, 0x00, 0x14, 0x03, 0x00, 0x6D, 0x2C, +/* 00008C00 */ 0x09, 0x28, 0x01, 0x93, 0x36, 0x6E, 0x08, 0x00, 0x6D, 0x6D, 0x6E, 0x5A, 0x07, 0x04, 0x00, 0x59, +/* 00008C10 */ 0x00, 0x6E, 0x93, 0x07, 0x6F, 0x09, 0x00, 0x5A, 0x01, 0x6F, 0x09, 0x00, 0x5A, 0x02, 0x34, 0x09, +/* 00008C20 */ 0x00, 0xCE, 0xD8, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x00, 0x00, 0x7B, 0x61, +/* 00008C30 */ 0x6F, 0x5B, 0x7B, 0x03, 0x6F, 0x5C, 0x7B, 0x32, 0x6F, 0x5D, 0x7B, 0x03, 0x6F, 0x5E, 0x5A, 0x03, +/* 00008C40 */ 0x6F, 0x09, 0x00, 0xF4, 0x04, 0xFF, 0x6D, 0x5A, 0x00, 0x00, 0x00, 0x09, 0x00, 0x93, 0x36, 0x6E, +/* 00008C50 */ 0x08, 0x00, 0x6D, 0x6D, 0x6E, 0x5F, 0x07, 0x04, 0x00, 0x59, 0x00, 0x6E, 0x93, 0x07, 0x6F, 0x09, +/* 00008C60 */ 0x00, 0x5A, 0x01, 0x6F, 0x0A, 0x00, 0x5A, 0x02, 0x35, 0x0A, 0x00, 0xCE, 0xF0, 0x00, 0x00, 0x00, +/* 00008C70 */ 0x05, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x00, 0x00, 0x7B, 0x62, 0x6F, 0x60, 0x7B, 0x03, 0x6F, 0x61, +/* 00008C80 */ 0x7B, 0x32, 0x6F, 0x62, 0x7B, 0x03, 0x6F, 0x63, 0x5A, 0x03, 0x6F, 0x0A, 0x00, 0xF4, 0x04, 0xFF, +/* 00008C90 */ 0x6D, 0x5F, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x93, 0x36, 0x6E, 0x08, 0x00, 0x6D, 0x6D, 0x6E, 0x64, +/* 00008CA0 */ 0x07, 0x04, 0x00, 0x59, 0x00, 0x6E, 0x93, 0x07, 0x6F, 0x09, 0x00, 0x5A, 0x01, 0x6F, 0x0B, 0x00, +/* 00008CB0 */ 0x5A, 0x02, 0x36, 0x0B, 0x00, 0xCE, 0x08, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x6F, 0x00, +/* 00008CC0 */ 0x00, 0x00, 0x7B, 0x63, 0x6F, 0x65, 0x7B, 0x03, 0x6F, 0x66, 0x7B, 0x32, 0x6F, 0x67, 0x7B, 0x03, +/* 00008CD0 */ 0x6F, 0x68, 0x5A, 0x03, 0x6F, 0x0B, 0x00, 0xF4, 0x04, 0xFF, 0x6D, 0x64, 0x00, 0x00, 0x00, 0x0B, +/* 00008CE0 */ 0x00, 0x93, 0x36, 0x6E, 0x08, 0x00, 0x6D, 0x6D, 0x6E, 0x69, 0x07, 0x04, 0x00, 0x59, 0x00, 0x6E, +/* 00008CF0 */ 0x93, 0x07, 0x6F, 0x09, 0x00, 0x5A, 0x01, 0x6F, 0x0C, 0x00, 0x5A, 0x02, 0x37, 0x0C, 0x00, 0xCE, +/* 00008D00 */ 0x20, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x00, 0x00, 0x7B, 0x64, 0x6F, 0x6A, +/* 00008D10 */ 0x7B, 0x03, 0x6F, 0x6B, 0x7B, 0x32, 0x6F, 0x6C, 0x7B, 0x03, 0x6F, 0x6D, 0x5A, 0x03, 0x6F, 0x0C, +/* 00008D20 */ 0x00, 0xF4, 0x04, 0xFF, 0x6D, 0x69, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x09, 0x14, 0x08, 0xE0, 0x00, +/* 00008D30 */ 0x1A, 0x06, 0xB9, 0x6D, 0x00, 0x01, 0x66, 0x01, 0x48, 0x58, 0x6D, 0x95, 0x00, 0x02, 0x58, 0x01, +/* 00008D40 */ 0x66, 0x01, 0x49, 0x59, 0x6D, 0x95, 0x00, 0x03, 0x59, 0x01, 0x66, 0x01, 0x4A, 0x5A, 0x6D, 0x95, +/* 00008D50 */ 0x00, 0x04, 0x5A, 0x01, 0x66, 0x01, 0x4B, 0x5B, 0x6D, 0x95, 0x00, 0x05, 0x5B, 0x01, 0x66, 0x01, +/* 00008D60 */ 0x4C, 0x5C, 0x6D, 0x95, 0x00, 0x06, 0x5C, 0x01, 0x66, 0x01, 0x4D, 0x5D, 0x6D, 0x95, 0x00, 0x07, +/* 00008D70 */ 0x5D, 0x01, 0x66, 0x01, 0x4E, 0x5E, 0x6D, 0x95, 0x00, 0x08, 0x5E, 0x4E, 0x6D, 0x95, 0x00, 0x09, +/* 00008D80 */ 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x0A, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x0B, 0x6D, 0x4E, 0x6D, 0x95, +/* 00008D90 */ 0x00, 0x0C, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x0D, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x0E, 0x6D, 0x4E, +/* 00008DA0 */ 0x6D, 0x95, 0x00, 0x0F, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x10, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x11, +/* 00008DB0 */ 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x12, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x13, 0x6D, 0x4E, 0x6D, 0x95, +/* 00008DC0 */ 0x00, 0x14, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x15, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x16, 0x6D, 0x4E, +/* 00008DD0 */ 0x6D, 0x95, 0x00, 0x17, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x18, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x19, +/* 00008DE0 */ 0x6D, 0x93, 0x03, 0x6D, 0x00, 0x00, 0x5F, 0x6D, 0x6D, 0x6E, 0xA8, 0x6E, 0x14, 0x03, 0x00, 0x6D, +/* 00008DF0 */ 0x6E, 0x09, 0x17, 0x00, 0x93, 0x03, 0x6D, 0x00, 0x00, 0x93, 0x02, 0x6E, 0x0A, 0x00, 0x07, 0x01, +/* 00008E00 */ 0x00, 0xC5, 0x01, 0x6E, 0x6E, 0x0D, 0x00, 0x77, 0x6E, 0x6D, 0x6F, 0x93, 0x03, 0x6D, 0x00, 0x00, +/* 00008E10 */ 0x5F, 0x6D, 0x6D, 0x70, 0xA8, 0x6E, 0x14, 0x03, 0x00, 0x6D, 0x6E, 0x09, 0x17, 0x00, 0x93, 0x03, +/* 00008E20 */ 0x6D, 0x00, 0x00, 0x93, 0x02, 0x6E, 0x0A, 0x00, 0x07, 0x01, 0x00, 0xC5, 0x01, 0x6E, 0x6E, 0x0E, +/* 00008E30 */ 0x00, 0x77, 0x6E, 0x6D, 0x71, 0xA8, 0x6D, 0x95, 0x00, 0x09, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, +/* 00008E40 */ 0x01, 0x3B, 0x6D, 0x6E, 0x95, 0x00, 0x0A, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x3C, 0x6D, +/* 00008E50 */ 0x6E, 0x95, 0x00, 0x0B, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x3D, 0x6D, 0x6E, 0x95, 0x00, +/* 00008E60 */ 0x0C, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x3E, 0x6D, 0x6E, 0x96, 0x25, 0x6D, 0xB9, 0x6E, +/* 00008E70 */ 0x00, 0x01, 0x66, 0x01, 0x3F, 0x6D, 0x6E, 0x96, 0x22, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, +/* 00008E80 */ 0x40, 0x6D, 0x6E, 0x96, 0x23, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x41, 0x6D, 0x6E, 0x96, +/* 00008E90 */ 0x26, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x42, 0x6D, 0x6E, 0x96, 0x27, 0x6D, 0xB9, 0x6E, +/* 00008EA0 */ 0x00, 0x01, 0x66, 0x01, 0x43, 0x6D, 0x6E, 0x96, 0x28, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, +/* 00008EB0 */ 0x44, 0x6D, 0x6E, 0x96, 0x29, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x45, 0x6D, 0x6E, 0x96, +/* 00008EC0 */ 0x2A, 0x6D, 0xA8, 0x6D, 0x95, 0x00, 0x0D, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x46, 0x6D, +/* 00008ED0 */ 0x6E, 0x96, 0x2B, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x47, 0x6D, 0x6E, 0x07, 0x01, 0x00, +/* 00008EE0 */ 0x59, 0x00, 0x02, 0xF0, 0x01, 0x6D, 0x6D, 0x0F, 0x00, 0x96, 0x24, 0x6D, 0xA8, 0x6D, 0x95, 0x00, +/* 00008EF0 */ 0x0E, 0x6D, 0xA8, 0x6D, 0x95, 0x00, 0x0F, 0x6D, 0xA8, 0x6D, 0x95, 0x00, 0x10, 0x6D, 0xA8, 0x6D, +/* 00008F00 */ 0x95, 0x00, 0x11, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x4F, 0x6D, 0x6E, 0x96, 0x2C, 0x6D, +/* 00008F10 */ 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x50, 0x6D, 0x6E, 0x96, 0x2D, 0x6D, 0xB9, 0x6E, 0x00, 0x01, +/* 00008F20 */ 0x66, 0x01, 0x51, 0x6D, 0x6E, 0x96, 0x2E, 0x6D, 0x93, 0x04, 0x6D, 0x01, 0x00, 0x07, 0x03, 0x00, +/* 00008F30 */ 0x59, 0x00, 0x02, 0xCD, 0x6E, 0x5A, 0x01, 0x6E, 0x10, 0x00, 0x5A, 0x02, 0x09, 0x10, 0x00, 0xF0, +/* 00008F40 */ 0x03, 0x6D, 0x6D, 0x10, 0x00, 0x45, 0x65, 0x6D, 0x93, 0x03, 0x6E, 0x00, 0x00, 0x6D, 0x6D, 0x6E, +/* 00008F50 */ 0x72, 0x07, 0x03, 0x00, 0x59, 0x00, 0x6E, 0x5A, 0x01, 0x65, 0x11, 0x00, 0x93, 0x04, 0x6F, 0x01, +/* 00008F60 */ 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0xCE, 0x38, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, +/* 00008F70 */ 0x70, 0x00, 0x00, 0x00, 0x7B, 0x39, 0x70, 0x73, 0x5A, 0x01, 0x70, 0x12, 0x00, 0x5A, 0x02, 0x09, +/* 00008F80 */ 0x12, 0x00, 0xF0, 0x03, 0x6F, 0x6F, 0x12, 0x00, 0x5A, 0x02, 0x6F, 0x11, 0x00, 0xF4, 0x03, 0xFF, +/* 00008F90 */ 0x6D, 0x72, 0x00, 0x00, 0x00, 0x11, 0x00, 0x95, 0x00, 0x12, 0x3A, 0x93, 0x06, 0x6D, 0x0B, 0x00, +/* 00008FA0 */ 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x93, 0x1A, 0x6E, 0x0C, 0x00, 0x5A, 0x01, 0x6E, 0x13, 0x00, +/* 00008FB0 */ 0x93, 0x23, 0x6E, 0x0D, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x91, 0x00, 0x12, 0x6F, 0x0E, +/* 00008FC0 */ 0x00, 0x5A, 0x01, 0x6F, 0x14, 0x00, 0xB9, 0x70, 0x00, 0x01, 0x66, 0x01, 0x52, 0x6F, 0x70, 0x5A, +/* 00008FD0 */ 0x02, 0x6F, 0x14, 0x00, 0xF0, 0x03, 0x6E, 0x6E, 0x14, 0x00, 0x5A, 0x02, 0x6E, 0x13, 0x00, 0x5A, +/* 00008FE0 */ 0x03, 0x65, 0x13, 0x00, 0xF0, 0x04, 0x6D, 0x6D, 0x13, 0x00, 0x95, 0x00, 0x13, 0x6D, 0x95, 0x00, +/* 00008FF0 */ 0x14, 0x3B, 0x93, 0x06, 0x6D, 0x0B, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x93, 0x1A, 0x6E, +/* 00009000 */ 0x0C, 0x00, 0x5A, 0x01, 0x6E, 0x15, 0x00, 0x93, 0x23, 0x6E, 0x0D, 0x00, 0x07, 0x03, 0x00, 0x59, +/* 00009010 */ 0x00, 0x02, 0x91, 0x00, 0x14, 0x6F, 0x0F, 0x00, 0x5A, 0x01, 0x6F, 0x16, 0x00, 0xB9, 0x70, 0x00, +/* 00009020 */ 0x01, 0x66, 0x01, 0x53, 0x6F, 0x70, 0x5A, 0x02, 0x6F, 0x16, 0x00, 0xF0, 0x03, 0x6E, 0x6E, 0x16, +/* 00009030 */ 0x00, 0x5A, 0x02, 0x6E, 0x15, 0x00, 0x5A, 0x03, 0x65, 0x15, 0x00, 0xF0, 0x04, 0x6D, 0x6D, 0x15, +/* 00009040 */ 0x00, 0x95, 0x00, 0x15, 0x6D, 0x95, 0x00, 0x16, 0x3C, 0x93, 0x06, 0x6D, 0x0B, 0x00, 0x07, 0x04, +/* 00009050 */ 0x00, 0x59, 0x00, 0x02, 0x93, 0x1A, 0x6E, 0x0C, 0x00, 0x5A, 0x01, 0x6E, 0x17, 0x00, 0x93, 0x23, +/* 00009060 */ 0x6E, 0x0D, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x91, 0x00, 0x16, 0x6F, 0x10, 0x00, 0x5A, +/* 00009070 */ 0x01, 0x6F, 0x18, 0x00, 0xB9, 0x70, 0x00, 0x01, 0x66, 0x01, 0x54, 0x6F, 0x70, 0x5A, 0x02, 0x6F, +/* 00009080 */ 0x18, 0x00, 0xF0, 0x03, 0x6E, 0x6E, 0x18, 0x00, 0x5A, 0x02, 0x6E, 0x17, 0x00, 0x5A, 0x03, 0x65, +/* 00009090 */ 0x17, 0x00, 0xF0, 0x04, 0x6D, 0x6D, 0x17, 0x00, 0x95, 0x00, 0x17, 0x6D, 0x95, 0x00, 0x18, 0x2D, +/* 000090A0 */ 0x93, 0x06, 0x6D, 0x0B, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x93, 0x1A, 0x6E, 0x0C, 0x00, +/* 000090B0 */ 0x5A, 0x01, 0x6E, 0x19, 0x00, 0x93, 0x23, 0x6E, 0x0D, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, +/* 000090C0 */ 0x91, 0x00, 0x18, 0x6F, 0x11, 0x00, 0x5A, 0x01, 0x6F, 0x1A, 0x00, 0xB9, 0x70, 0x00, 0x01, 0x66, +/* 000090D0 */ 0x01, 0x55, 0x6F, 0x70, 0x5A, 0x02, 0x6F, 0x1A, 0x00, 0xF0, 0x03, 0x6E, 0x6E, 0x1A, 0x00, 0x5A, +/* 000090E0 */ 0x02, 0x6E, 0x19, 0x00, 0x5A, 0x03, 0x65, 0x19, 0x00, 0xF0, 0x04, 0x6D, 0x6D, 0x19, 0x00, 0x45, +/* 000090F0 */ 0x66, 0x6D, 0x93, 0x16, 0x6D, 0x12, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x91, 0x00, 0x13, +/* 00009100 */ 0x6E, 0x13, 0x00, 0x5A, 0x01, 0x6E, 0x1B, 0x00, 0x5A, 0x02, 0x3D, 0x1B, 0x00, 0xCE, 0x44, 0x01, +/* 00009110 */ 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x7B, 0x3E, 0x6E, 0x74, 0x5A, 0x03, +/* 00009120 */ 0x6E, 0x1B, 0x00, 0xF0, 0x04, 0xFF, 0x6D, 0x1B, 0x00, 0x93, 0x16, 0x6D, 0x12, 0x00, 0x07, 0x04, +/* 00009130 */ 0x00, 0x59, 0x00, 0x02, 0x91, 0x00, 0x15, 0x6E, 0x14, 0x00, 0x5A, 0x01, 0x6E, 0x1C, 0x00, 0x5A, +/* 00009140 */ 0x02, 0x3D, 0x1C, 0x00, 0xCE, 0x50, 0x01, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x00, +/* 00009150 */ 0x00, 0x7B, 0x3E, 0x6E, 0x75, 0x5A, 0x03, 0x6E, 0x1C, 0x00, 0xF0, 0x04, 0xFF, 0x6D, 0x1C, 0x00, +/* 00009160 */ 0x93, 0x16, 0x6D, 0x12, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x91, 0x00, 0x17, 0x6E, 0x15, +/* 00009170 */ 0x00, 0x5A, 0x01, 0x6E, 0x1D, 0x00, 0x5A, 0x02, 0x3D, 0x1D, 0x00, 0xCE, 0x5C, 0x01, 0x00, 0x00, +/* 00009180 */ 0x0B, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x7B, 0x3E, 0x6E, 0x76, 0x5A, 0x03, 0x6E, 0x1D, +/* 00009190 */ 0x00, 0xF0, 0x04, 0xFF, 0x6D, 0x1D, 0x00, 0x93, 0x16, 0x6D, 0x12, 0x00, 0x07, 0x04, 0x00, 0x59, +/* 000091A0 */ 0x00, 0x02, 0x5A, 0x01, 0x66, 0x1E, 0x00, 0x5A, 0x02, 0x3D, 0x1E, 0x00, 0xCE, 0x68, 0x01, 0x00, +/* 000091B0 */ 0x00, 0x0C, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x7B, 0x2E, 0x6E, 0x77, 0x5A, 0x03, 0x6E, +/* 000091C0 */ 0x1E, 0x00, 0xF0, 0x04, 0xFF, 0x6D, 0x1E, 0x00, 0x93, 0x04, 0x6D, 0x01, 0x00, 0x07, 0x03, 0x00, +/* 000091D0 */ 0x59, 0x00, 0x02, 0xCE, 0x74, 0x01, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x00, 0x00, +/* 000091E0 */ 0x93, 0x04, 0x6F, 0x01, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0xCE, 0xA0, 0x01, 0x00, 0x00, +/* 000091F0 */ 0x0E, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x7B, 0x41, 0x70, 0x78, 0x5A, 0x01, 0x70, 0x20, +/* 00009200 */ 0x00, 0x5A, 0x02, 0x09, 0x20, 0x00, 0xF0, 0x03, 0x6F, 0x6F, 0x20, 0x00, 0x7B, 0x6F, 0x6E, 0x79, +/* 00009210 */ 0x93, 0x04, 0x6F, 0x01, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0xCE, 0xAC, 0x01, 0x00, 0x00, +/* 00009220 */ 0x0F, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x7B, 0x41, 0x70, 0x7A, 0x5A, 0x01, 0x70, 0x21, +/* 00009230 */ 0x00, 0x5A, 0x02, 0x09, 0x21, 0x00, 0xF0, 0x03, 0x6F, 0x6F, 0x21, 0x00, 0x7B, 0x6F, 0x6E, 0x7B, +/* 00009240 */ 0x93, 0x04, 0x6F, 0x01, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0xCE, 0xB8, 0x01, 0x00, 0x00, +/* 00009250 */ 0x10, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x7B, 0x45, 0x70, 0x7C, 0x5A, 0x01, 0x70, 0x22, +/* 00009260 */ 0x00, 0x5A, 0x02, 0x09, 0x22, 0x00, 0xF0, 0x03, 0x6F, 0x6F, 0x22, 0x00, 0x7B, 0x6F, 0x6E, 0x7D, +/* 00009270 */ 0x93, 0x04, 0x6F, 0x01, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0xCE, 0xC4, 0x01, 0x00, 0x00, +/* 00009280 */ 0x11, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x7B, 0x48, 0x70, 0x7E, 0x5A, 0x01, 0x70, 0x23, +/* 00009290 */ 0x00, 0x5A, 0x02, 0x09, 0x23, 0x00, 0xF0, 0x03, 0x6F, 0x6F, 0x23, 0x00, 0x7B, 0x6F, 0x6E, 0x7F, +/* 000092A0 */ 0x93, 0x04, 0x6F, 0x01, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0xCE, 0xD0, 0x01, 0x00, 0x00, +/* 000092B0 */ 0x12, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x7B, 0x4B, 0x70, 0x80, 0x7B, 0x48, 0x70, 0x81, +/* 000092C0 */ 0x7B, 0x4D, 0x70, 0x82, 0x5A, 0x01, 0x70, 0x24, 0x00, 0x5A, 0x02, 0x09, 0x24, 0x00, 0xF0, 0x03, +/* 000092D0 */ 0x6F, 0x6F, 0x24, 0x00, 0x7B, 0x6F, 0x6E, 0x83, 0x93, 0x04, 0x6F, 0x01, 0x00, 0x07, 0x03, 0x00, +/* 000092E0 */ 0x59, 0x00, 0x02, 0xCE, 0xE4, 0x01, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, +/* 000092F0 */ 0x7B, 0x48, 0x70, 0x84, 0x7B, 0x4D, 0x70, 0x85, 0x5A, 0x01, 0x70, 0x25, 0x00, 0x5A, 0x02, 0x09, +/* 00009300 */ 0x25, 0x00, 0xF0, 0x03, 0x6F, 0x6F, 0x25, 0x00, 0x7B, 0x6F, 0x6E, 0x86, 0x93, 0x04, 0x6F, 0x01, +/* 00009310 */ 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0xCE, 0xF4, 0x01, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, +/* 00009320 */ 0x70, 0x00, 0x00, 0x00, 0x7B, 0x48, 0x70, 0x87, 0x7B, 0x4D, 0x70, 0x88, 0x5A, 0x01, 0x70, 0x26, +/* 00009330 */ 0x00, 0x5A, 0x02, 0x09, 0x26, 0x00, 0xF0, 0x03, 0x6F, 0x6F, 0x26, 0x00, 0x7B, 0x6F, 0x6E, 0x89, +/* 00009340 */ 0x93, 0x04, 0x6F, 0x01, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0xCE, 0x04, 0x02, 0x00, 0x00, +/* 00009350 */ 0x15, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x7B, 0x4C, 0x70, 0x8A, 0x7B, 0x4D, 0x70, 0x8B, +/* 00009360 */ 0x5A, 0x01, 0x70, 0x27, 0x00, 0x5A, 0x02, 0x09, 0x27, 0x00, 0xF0, 0x03, 0x6F, 0x6F, 0x27, 0x00, +/* 00009370 */ 0x7B, 0x6F, 0x6E, 0x8C, 0x93, 0x04, 0x6F, 0x01, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0xCE, +/* 00009380 */ 0x14, 0x02, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x7B, 0x4C, 0x70, 0x8D, +/* 00009390 */ 0x7B, 0x4D, 0x70, 0x8E, 0x5A, 0x01, 0x70, 0x28, 0x00, 0x5A, 0x02, 0x09, 0x28, 0x00, 0xF0, 0x03, +/* 000093A0 */ 0x6F, 0x6F, 0x28, 0x00, 0x7B, 0x6F, 0x6E, 0x8F, 0x5A, 0x01, 0x6E, 0x1F, 0x00, 0x5A, 0x02, 0x09, +/* 000093B0 */ 0x1F, 0x00, 0xF0, 0x03, 0x6D, 0x6D, 0x1F, 0x00, 0x96, 0x2F, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, +/* 000093C0 */ 0x01, 0x56, 0x6D, 0x6E, 0x07, 0x01, 0x00, 0x59, 0x00, 0x02, 0xF0, 0x01, 0x6D, 0x6D, 0x29, 0x00, +/* 000093D0 */ 0x96, 0x30, 0x6D, 0xA8, 0x6D, 0x95, 0x00, 0x19, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x57, +/* 000093E0 */ 0x6D, 0x6E, 0x96, 0x31, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x58, 0x6D, 0x6E, 0x07, 0x01, +/* 000093F0 */ 0x00, 0x59, 0x00, 0x02, 0xF0, 0x01, 0x6D, 0x6D, 0x2A, 0x00, 0x45, 0x67, 0x6D, 0xB9, 0x6E, 0x00, +/* 00009400 */ 0x01, 0x66, 0x01, 0x59, 0x6D, 0x6E, 0x07, 0x01, 0x00, 0x59, 0x00, 0x02, 0xF0, 0x01, 0x6D, 0x6D, +/* 00009410 */ 0x2B, 0x00, 0x45, 0x62, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x5A, 0x6D, 0x6E, 0x07, 0x01, +/* 00009420 */ 0x00, 0x59, 0x00, 0x02, 0xF0, 0x01, 0x6D, 0x6D, 0x2C, 0x00, 0x45, 0x63, 0x6D, 0x93, 0x32, 0x6D, +/* 00009430 */ 0x06, 0x00, 0x14, 0x03, 0x00, 0x6D, 0x2C, 0x09, 0x08, 0x01, 0x93, 0x16, 0x6D, 0x12, 0x00, 0x07, +/* 00009440 */ 0x04, 0x00, 0x59, 0x00, 0x02, 0x93, 0x07, 0x6E, 0x09, 0x00, 0x5A, 0x01, 0x6E, 0x2D, 0x00, 0x5A, +/* 00009450 */ 0x02, 0x34, 0x2D, 0x00, 0xCE, 0x24, 0x02, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x00, +/* 00009460 */ 0x00, 0x7B, 0x67, 0x6E, 0x90, 0x7B, 0x03, 0x6E, 0x91, 0x7B, 0x32, 0x6E, 0x92, 0x7B, 0x03, 0x6E, +/* 00009470 */ 0x93, 0x5A, 0x03, 0x6E, 0x2D, 0x00, 0xF0, 0x04, 0xFF, 0x6D, 0x2D, 0x00, 0x93, 0x16, 0x6D, 0x12, +/* 00009480 */ 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x93, 0x07, 0x6E, 0x09, 0x00, 0x5A, 0x01, 0x6E, 0x2E, +/* 00009490 */ 0x00, 0x5A, 0x02, 0x35, 0x2E, 0x00, 0xCE, 0x3C, 0x02, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x6E, +/* 000094A0 */ 0x00, 0x00, 0x00, 0x7B, 0x62, 0x6E, 0x94, 0x7B, 0x03, 0x6E, 0x95, 0x7B, 0x32, 0x6E, 0x96, 0x7B, +/* 000094B0 */ 0x03, 0x6E, 0x97, 0x5A, 0x03, 0x6E, 0x2E, 0x00, 0xF0, 0x04, 0xFF, 0x6D, 0x2E, 0x00, 0x93, 0x16, +/* 000094C0 */ 0x6D, 0x12, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x93, 0x07, 0x6E, 0x09, 0x00, 0x5A, 0x01, +/* 000094D0 */ 0x6E, 0x2F, 0x00, 0x5A, 0x02, 0x36, 0x2F, 0x00, 0xCE, 0x54, 0x02, 0x00, 0x00, 0x19, 0x00, 0x00, +/* 000094E0 */ 0x00, 0x6E, 0x00, 0x00, 0x00, 0x7B, 0x63, 0x6E, 0x98, 0x7B, 0x03, 0x6E, 0x99, 0x7B, 0x32, 0x6E, +/* 000094F0 */ 0x9A, 0x7B, 0x03, 0x6E, 0x9B, 0x5A, 0x03, 0x6E, 0x2F, 0x00, 0xF0, 0x04, 0xFF, 0x6D, 0x2F, 0x00, +/* 00009500 */ 0x93, 0x16, 0x6D, 0x12, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x93, 0x07, 0x6E, 0x09, 0x00, +/* 00009510 */ 0x5A, 0x01, 0x6E, 0x30, 0x00, 0x5A, 0x02, 0x2E, 0x30, 0x00, 0xCE, 0x6C, 0x02, 0x00, 0x00, 0x1A, +/* 00009520 */ 0x00, 0x00, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x7B, 0x66, 0x6E, 0x9C, 0x7B, 0x03, 0x6E, 0x9D, 0x7B, +/* 00009530 */ 0x32, 0x6E, 0x9E, 0x7B, 0x03, 0x6E, 0x9F, 0x5A, 0x03, 0x6E, 0x30, 0x00, 0xF0, 0x04, 0xFF, 0x6D, +/* 00009540 */ 0x30, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x1B, 0xFE, 0x84, 0x02, 0x00, 0x6C, 0x02, 0x00, 0x00, 0x03, +/* 00009550 */ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, +/* 00009560 */ 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x54, 0x02, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, +/* 00009570 */ 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, +/* 00009580 */ 0x01, 0x00, 0x00, 0x3C, 0x02, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, +/* 00009590 */ 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x24, +/* 000095A0 */ 0x02, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, +/* 000095B0 */ 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x14, 0x02, 0x00, 0x00, 0x03, +/* 000095C0 */ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x03, 0x00, 0x00, 0x4B, 0x03, 0x00, 0x00, 0x04, +/* 000095D0 */ 0x02, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x03, 0x00, 0x00, 0x4B, +/* 000095E0 */ 0x03, 0x00, 0x00, 0xF4, 0x01, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, +/* 000095F0 */ 0x03, 0x00, 0x00, 0x46, 0x03, 0x00, 0x00, 0xE4, 0x01, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, +/* 00009600 */ 0x00, 0x00, 0x00, 0x41, 0x03, 0x00, 0x00, 0x46, 0x03, 0x00, 0x00, 0xD0, 0x01, 0x00, 0x00, 0x03, +/* 00009610 */ 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x03, 0x00, 0x00, 0x41, 0x03, 0x00, 0x00, 0x46, +/* 00009620 */ 0x03, 0x00, 0x00, 0xC4, 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, +/* 00009630 */ 0x03, 0x00, 0x00, 0xB8, 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, +/* 00009640 */ 0x03, 0x00, 0x00, 0xAC, 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3A, +/* 00009650 */ 0x03, 0x00, 0x00, 0xA0, 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3A, +/* 00009660 */ 0x03, 0x00, 0x00, 0x74, 0x01, 0x00, 0x00, 0x03, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x39, +/* 00009670 */ 0x03, 0x00, 0x00, 0x3C, 0x03, 0x00, 0x00, 0x3D, 0x03, 0x00, 0x00, 0x40, 0x03, 0x00, 0x00, 0x43, +/* 00009680 */ 0x03, 0x00, 0x00, 0x48, 0x03, 0x00, 0x00, 0x49, 0x03, 0x00, 0x00, 0x4A, 0x03, 0x00, 0x00, 0x4C, +/* 00009690 */ 0x03, 0x00, 0x00, 0x68, 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, +/* 000096A0 */ 0x01, 0x00, 0x00, 0x5C, 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, +/* 000096B0 */ 0x01, 0x00, 0x00, 0x50, 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, +/* 000096C0 */ 0x01, 0x00, 0x00, 0x44, 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, +/* 000096D0 */ 0x01, 0x00, 0x00, 0x38, 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, +/* 000096E0 */ 0x02, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, +/* 000096F0 */ 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x08, +/* 00009700 */ 0x01, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, +/* 00009710 */ 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x03, +/* 00009720 */ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, +/* 00009730 */ 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0xD8, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, +/* 00009740 */ 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, +/* 00009750 */ 0x01, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, +/* 00009760 */ 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0xA0, +/* 00009770 */ 0x00, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x03, 0x00, 0x00, 0x22, +/* 00009780 */ 0x03, 0x00, 0x00, 0x23, 0x03, 0x00, 0x00, 0x24, 0x03, 0x00, 0x00, 0x25, 0x03, 0x00, 0x00, 0x26, +/* 00009790 */ 0x03, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x03, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7B, +/* 000097A0 */ 0x01, 0x00, 0x00, 0x75, 0x01, 0x00, 0x00, 0x33, 0x01, 0x00, 0x00, 0x56, 0x01, 0x00, 0x00, 0x5E, +/* 000097B0 */ 0x01, 0x00, 0x00, 0x0A, 0x03, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x3A, 0x01, 0x00, 0x00, 0x93, +/* 000097C0 */ 0x00, 0x00, 0x00, 0xCC, 0x00, 0x00, 0x00, 0x0F, 0x03, 0x00, 0x00, 0xD5, 0x00, 0x00, 0x00, 0x2C, +/* 000097D0 */ 0x01, 0x00, 0x00, 0x50, 0x01, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, 0x15, +/* 000097E0 */ 0x03, 0x00, 0x00, 0xCF, 0x00, 0x00, 0x00, 0xB7, 0x00, 0x00, 0x00, 0x9C, 0x01, 0x00, 0x00, 0xC0, +/* 000097F0 */ 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, 0x9A, 0x01, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0x26, +/* 00009800 */ 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x2C, 0x00, 0x00, 0x00, 0xC1, 0x00, 0x00, 0x00, 0xC4, +/* 00009810 */ 0x00, 0x00, 0x00, 0x9C, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x00, 0x00, 0x00, +/* 00009820 */ 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0x26, +/* 00009830 */ 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x2C, 0x00, 0x00, 0x00, 0xBB, 0xFE, 0x4D, 0x03, 0xFE, +/* 00009840 */ 0x13, 0x02, 0xFE, 0x13, 0x02, 0xFE, 0xBE, 0x02, 0xFE, 0xBF, 0x02, 0xFE, 0x8B, 0x02, 0xBB, 0x58, +/* 00009850 */ 0xFE, 0x11, 0x01, 0xFE, 0x39, 0x01, 0xFE, 0x0B, 0x01, 0xFE, 0x5C, 0x01, 0x6B, 0x7F, 0xFE, 0xEC, +/* 00009860 */ 0x01, 0xFE, 0x8C, 0x02, 0x1D, 0xFE, 0x8D, 0x02, 0x26, 0xFE, 0x89, 0x02, 0xFE, 0xFE, 0x00, 0xFE, +/* 00009870 */ 0x8E, 0x02, 0x2C, 0xFE, 0x90, 0x02, 0xFE, 0x91, 0x02, 0xFE, 0x92, 0x02, 0xFE, 0x93, 0x02, 0xFE, +/* 00009880 */ 0x8F, 0x02, 0xFE, 0x85, 0x02, 0xFE, 0x86, 0x02, 0xFE, 0x98, 0x02, 0xFE, 0x9C, 0x02, 0xFE, 0x9E, +/* 00009890 */ 0x02, 0xFE, 0x9F, 0x02, 0xFE, 0xA0, 0x02, 0xFE, 0xA1, 0x02, 0xFE, 0xA2, 0x02, 0xFE, 0xA7, 0x02, +/* 000098A0 */ 0xFE, 0xA8, 0x02, 0xFE, 0x7B, 0x01, 0xFE, 0x75, 0x01, 0xFE, 0x33, 0x01, 0xFE, 0x56, 0x01, 0xFE, +/* 000098B0 */ 0x5E, 0x01, 0xFE, 0x0A, 0x03, 0xFE, 0x01, 0x01, 0xFE, 0x3A, 0x01, 0x93, 0xCC, 0xFE, 0x0F, 0x03, +/* 000098C0 */ 0xD5, 0xFE, 0x2C, 0x01, 0xFE, 0x50, 0x01, 0x65, 0x89, 0xFE, 0x15, 0x03, 0xFE, 0x94, 0x02, 0xCF, +/* 000098D0 */ 0xB7, 0xFE, 0x9C, 0x01, 0xFE, 0x91, 0x02, 0xC0, 0x69, 0xFE, 0x9A, 0x01, 0xFE, 0x8C, 0x02, 0x1D, +/* 000098E0 */ 0x26, 0xFE, 0x89, 0x02, 0xFE, 0xFE, 0x00, 0xFE, 0x8E, 0x02, 0x2C, 0xFE, 0xA7, 0x02, 0xC1, 0xFE, +/* 000098F0 */ 0xA8, 0x02, 0xC4, 0x9C, 0x54, 0x4E, 0xFE, 0x21, 0x03, 0xFE, 0x22, 0x03, 0xFE, 0x23, 0x03, 0xFE, +/* 00009900 */ 0x24, 0x03, 0xFE, 0x25, 0x03, 0xFE, 0x26, 0x03, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, +/* 00009910 */ 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, +/* 00009920 */ 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, +/* 00009930 */ 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, +/* 00009940 */ 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, +/* 00009950 */ 0xFE, 0x95, 0x01, 0xFE, 0x4E, 0x03, 0xFE, 0x4E, 0x03, 0xFE, 0x4F, 0x03, 0xFE, 0x4F, 0x03, 0xFE, +/* 00009960 */ 0x06, 0x02, 0xFE, 0x0C, 0x02, 0xFE, 0x97, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x97, +/* 00009970 */ 0x01, 0xFE, 0x3A, 0x03, 0xFE, 0x39, 0x03, 0xFE, 0x3A, 0x03, 0xFE, 0x3C, 0x03, 0xFE, 0x3E, 0x03, +/* 00009980 */ 0xFE, 0x3D, 0x03, 0xFE, 0x41, 0x03, 0xFE, 0x40, 0x03, 0xFE, 0x44, 0x03, 0xFE, 0x41, 0x03, 0xFE, +/* 00009990 */ 0x46, 0x03, 0xFE, 0x43, 0x03, 0xFE, 0x41, 0x03, 0xFE, 0x46, 0x03, 0xFE, 0x48, 0x03, 0xFE, 0x41, +/* 000099A0 */ 0x03, 0xFE, 0x46, 0x03, 0xFE, 0x49, 0x03, 0xFE, 0x46, 0x03, 0xFE, 0x4B, 0x03, 0xFE, 0x4A, 0x03, +/* 000099B0 */ 0xFE, 0x46, 0x03, 0xFE, 0x4B, 0x03, 0xFE, 0x4C, 0x03, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, +/* 000099C0 */ 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, +/* 000099D0 */ 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x97, 0x01, +/* 000099E0 */ 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0x02, 0x03, 0x16, 0x00, 0xFE, 0x50, 0x03, +/* 000099F0 */ 0x01, 0xFE, 0x51, 0x03, 0x02, 0xFE, 0x52, 0x03, 0x03, 0xFE, 0x53, 0x03, 0x04, 0xFE, 0x54, 0x03, +/* 00009A00 */ 0x05, 0xFE, 0x55, 0x03, 0x06, 0xFE, 0x56, 0x03, 0x07, 0xFE, 0x57, 0x03, 0x08, 0xFE, 0x58, 0x03, +/* 00009A10 */ 0x09, 0xFE, 0x59, 0x03, 0x0A, 0xFE, 0x5A, 0x03, 0x0B, 0xFE, 0x5B, 0x03, 0x0C, 0xFE, 0x5C, 0x03, +/* 00009A20 */ 0x0D, 0xFE, 0x5D, 0x03, 0x0E, 0xFE, 0x5E, 0x03, 0x0F, 0xFE, 0x5F, 0x03, 0x10, 0xFE, 0x60, 0x03, +/* 00009A30 */ 0x11, 0xFE, 0x61, 0x03, 0x12, 0xFE, 0x62, 0x03, 0x13, 0xFE, 0x63, 0x03, 0x14, 0xFE, 0x64, 0x03, +/* 00009A40 */ 0x15, 0xFE, 0x65, 0x03, 0x06, 0x18, 0x00, 0xFE, 0x50, 0x03, 0x01, 0xFE, 0x5B, 0x03, 0x02, 0xFE, +/* 00009A50 */ 0x51, 0x03, 0x03, 0xFE, 0x66, 0x03, 0x04, 0xFE, 0x5E, 0x03, 0x05, 0xFE, 0x60, 0x03, 0x06, 0xFE, +/* 00009A60 */ 0x61, 0x03, 0x07, 0xFE, 0x52, 0x03, 0x08, 0xFE, 0x53, 0x03, 0x09, 0xFE, 0x67, 0x03, 0x0A, 0xFE, +/* 00009A70 */ 0x68, 0x03, 0x0B, 0xFE, 0x69, 0x03, 0x0C, 0xFE, 0x5C, 0x03, 0x0D, 0xFE, 0x6A, 0x03, 0x0E, 0xFE, +/* 00009A80 */ 0x6B, 0x03, 0x0F, 0xFE, 0x6C, 0x03, 0x10, 0xFE, 0x6D, 0x03, 0x11, 0xFE, 0x6E, 0x03, 0x12, 0xFE, +/* 00009A90 */ 0x6F, 0x03, 0x13, 0xFE, 0x70, 0x03, 0x14, 0xFE, 0x71, 0x03, 0x15, 0xFE, 0x72, 0x03, 0x16, 0xFE, +/* 00009AA0 */ 0x73, 0x03, 0x17, 0xFE, 0x74, 0x03, 0xFE, 0x07, 0x02, 0x7E, 0x41, 0x00, 0x00, 0x00, 0x07, 0x00, +/* 00009AB0 */ 0xA4, 0x00, 0x09, 0x00, 0xB7, 0x00, 0x14, 0x00, 0x32, 0x00, 0x0C, 0x00, 0x47, 0x00, 0x03, 0x00, +/* 00009AC0 */ 0x35, 0x00, 0x0C, 0x00, 0x35, 0x00, 0x0C, 0x00, 0x39, 0x00, 0x0C, 0x00, 0x83, 0x00, 0x06, 0x00, +/* 00009AD0 */ 0x4A, 0x04, 0x0C, 0x00, 0x1F, 0x00, 0x0C, 0x00, 0x24, 0x00, 0x0C, 0x00, 0x22, 0x00, 0x0C, 0x00, +/* 00009AE0 */ 0x22, 0x00, 0x0C, 0x00, 0x22, 0x00, 0x0C, 0x00, 0x22, 0x00, 0x0C, 0x00, 0x1E, 0x00, 0x0C, 0x00, +/* 00009AF0 */ 0x21, 0x00, 0x0C, 0x00, 0x2D, 0x00, 0x5F, 0x00, 0xD0, 0x00, 0x0C, 0x00, 0x54, 0x00, 0x0C, 0x00, +/* 00009B00 */ 0x50, 0x00, 0x0C, 0x00, 0x5E, 0x00, 0x0C, 0x00, 0x02, 0x01, 0x0C, 0x00, 0x55, 0x00, 0x06, 0x00, +/* 00009B10 */ 0x94, 0x00, 0x0C, 0x00, 0x48, 0x00, 0x0C, 0x00, 0x48, 0x00, 0x0C, 0x00, 0x47, 0x00, 0x0C, 0x00, +/* 00009B20 */ 0x4C, 0x00, 0x0C, 0x00, 0x4A, 0x00, 0x0C, 0x00, 0x3B, 0x00, 0x0C, 0x00, 0x4E, 0x00, 0x0C, 0x00, +/* 00009B30 */ 0x56, 0x00, 0x0C, 0x00, 0x57, 0x00, 0x0C, 0x00, 0x3E, 0x00, 0x0C, 0x00, 0x39, 0x00, 0x33, 0x01, +/* 00009B40 */ 0x8D, 0x0F, 0x9C, 0x00, 0x1F, 0x00, 0x06, 0x00, 0x25, 0x00, 0x0D, 0x00, 0x4E, 0x02, 0x0C, 0x00, +/* 00009B50 */ 0x9A, 0x00, 0x0C, 0x00, 0x70, 0x00, 0x0D, 0x00, 0x79, 0x00, 0x0D, 0x00, 0xB5, 0x02, 0x0D, 0x00, +/* 00009B60 */ 0xBF, 0x05, 0x0D, 0x00, 0x23, 0x03, 0x0A, 0x00, 0x77, 0x01, 0x0D, 0x00, 0x4D, 0x07, 0x0D, 0x00, +/* 00009B70 */ 0xC2, 0x09, 0x7A, 0x00, 0xEF, 0x0A, 0x0D, 0x00, 0xE1, 0x01, 0x06, 0x00, 0x60, 0x01, 0x19, 0x00, +/* 00009B80 */ 0xC8, 0x1B, 0x0D, 0x00, 0x6B, 0x03, 0x0D, 0x00, 0xB4, 0x04, 0x0D, 0x00, 0xE5, 0x06, 0x0D, 0x00, +/* 00009B90 */ 0x08, 0x02, 0x0A, 0x00, 0xDA, 0x02, 0x0D, 0x00, 0x74, 0x06, 0x0D, 0x00, 0x08, 0x04, 0x0D, 0x00, +/* 00009BA0 */ 0x23, 0x00, 0x28, 0x00, 0xBB, 0x00, 0x4A, 0x00, 0x25, 0x03, 0x0D, 0x00, 0x8C, 0x02, 0x18, 0x00, +/* 00009BB0 */ 0x68, 0x22, 0x18, 0x00, 0x65, 0x25, 0x18, 0x00, 0x5F, 0x6E, 0x18, 0x00, 0x9D, 0x15, 0x0D, 0x00, +/* 00009BC0 */ 0x23, 0x00, 0x4A, 0x00, 0x92, 0x00, 0x4A, 0x00, 0x92, 0x00, 0x4A, 0x00, 0x92, 0x00, 0x00, 0x01, +/* 00009BD0 */ 0x29, 0x01, 0x13, 0x00, 0x38, 0x00, 0x17, 0x00, 0x38, 0x00, 0x13, 0x00, 0x39, 0x00, 0x17, 0x00, +/* 00009BE0 */ 0x3A, 0x00, 0x06, 0x00, 0x25, 0x00, 0x0D, 0x00, 0xE9, 0x01, 0x0D, 0x00, 0x0C, 0x02, 0x0D, 0x00, +/* 00009BF0 */ 0x90, 0x01, 0x0C, 0x00, 0x58, 0x01, 0x0C, 0x00, 0x9A, 0x00, 0x0C, 0x00, 0x70, 0x00, 0x0C, 0x00, +/* 00009C00 */ 0xA7, 0x04, 0x0C, 0x00, 0x93, 0x04, 0x0C, 0x00, 0x31, 0x04, 0x0C, 0x00, 0xF9, 0x09, 0x0C, 0x00, +/* 00009C10 */ 0xEF, 0x02, 0x06, 0x00, 0x2D, 0x00, 0x0C, 0x00, 0x93, 0x03, 0x18, 0x00, 0x89, 0x0A, 0x06, 0x00, +/* 00009C20 */ 0x75, 0x00, 0x06, 0x00, 0x38, 0x00, 0x06, 0x00, 0x4C, 0x00, 0x06, 0x00, 0xC7, 0x1C, 0x0C, 0x00, +/* 00009C30 */ 0xC0, 0x01, 0x0C, 0x00, 0xDF, 0x01, 0x0C, 0x00, 0x80, 0x03, 0x20, 0x00, 0x3C, 0x00, 0x4F, 0x00, +/* 00009C40 */ 0x25, 0x01, 0x04, 0x00, 0x51, 0x00, 0x53, 0x00, 0x69, 0x01, 0x04, 0x00, 0x59, 0x00, 0x53, 0x00, +/* 00009C50 */ 0x79, 0x01, 0x04, 0x00, 0x5D, 0x00, 0x53, 0x00, 0x81, 0x01, 0x04, 0x00, 0x41, 0x00, 0x52, 0x00, +/* 00009C60 */ 0xAD, 0x02, 0x37, 0x00, 0x60, 0x00, 0x37, 0x00, 0x64, 0x00, 0x37, 0x00, 0x66, 0x00, 0x31, 0x00, +/* 00009C70 */ 0x49, 0x01, 0xF3, 0x01, 0x51, 0x05, 0x18, 0x00, 0xCA, 0x03, 0x06, 0x00, 0x2B, 0x00, 0x0C, 0x00, +/* 00009C80 */ 0x3B, 0x09, 0x18, 0x00, 0xFC, 0x30, 0x18, 0x00, 0x97, 0x2F, 0x18, 0x00, 0x63, 0x79, 0x0D, 0x00, +/* 00009C90 */ 0x23, 0x00, 0x42, 0x00, 0x7C, 0x00, 0x42, 0x00, 0x84, 0x00, 0x42, 0x00, 0x88, 0x00, 0x44, 0x00, +/* 00009CA0 */ 0xA6, 0x00, 0x00, 0x9E, 0xCF, 0x01, 0x00, 0x32, 0xCD, 0x01, 0x00, 0xB4, 0xCC, 0x01, 0x00, 0x49, +/* 00009CB0 */ 0xCC, 0x01, 0x00, 0xDE, 0xCB, 0x01, 0x00, 0x69, 0xCB, 0x01, 0x00, 0xEE, 0xCA, 0x01, 0x00, 0x6E, +/* 00009CC0 */ 0xCA, 0x01, 0x00, 0xEE, 0xC9, 0x01, 0x00, 0x7B, 0xC9, 0x01, 0x00, 0x00, 0xC9, 0x01, 0x00, 0x90, +/* 00009CD0 */ 0xC8, 0x01, 0x00, 0x20, 0xC8, 0x01, 0x00, 0xAB, 0xC7, 0x01, 0x00, 0x30, 0xC7, 0x01, 0x00, 0xB0, +/* 00009CE0 */ 0xC6, 0x01, 0x00, 0x30, 0xC6, 0x01, 0x00, 0x9B, 0xC5, 0x01, 0x00, 0x20, 0xC5, 0x01, 0x00, 0x1F, +/* 00009CF0 */ 0xC4, 0x01, 0x00, 0xA4, 0xC3, 0x01, 0x00, 0x01, 0xC3, 0x01, 0x00, 0x85, 0xC2, 0x01, 0x00, 0x04, +/* 00009D00 */ 0xC2, 0x01, 0x00, 0x83, 0xC1, 0x01, 0x00, 0x0D, 0xC1, 0x01, 0x00, 0x92, 0xC0, 0x01, 0x00, 0x12, +/* 00009D10 */ 0xC0, 0x01, 0x00, 0x47, 0xBF, 0x01, 0x00, 0xDD, 0xBE, 0x01, 0x00, 0x70, 0xBE, 0x01, 0x00, 0xFD, +/* 00009D20 */ 0xBD, 0x01, 0x00, 0x6B, 0xBD, 0x01, 0x00, 0xEB, 0xBB, 0x01, 0x00, 0x66, 0xBA, 0x01, 0x00, 0x30, +/* 00009D30 */ 0xB8, 0x01, 0x00, 0xCD, 0xB2, 0x01, 0x00, 0x25, 0xB2, 0x01, 0x00, 0xAF, 0xB1, 0x01, 0x00, 0x39, +/* 00009D40 */ 0xB1, 0x01, 0x00, 0xC3, 0xB0, 0x01, 0x00, 0x8C, 0xAF, 0x01, 0x00, 0xB1, 0xAE, 0x01, 0x00, 0xAA, +/* 00009D50 */ 0xAC, 0x01, 0x00, 0x43, 0xAB, 0x01, 0x00, 0xF6, 0xAA, 0x01, 0x00, 0x68, 0xA3, 0x01, 0x00, 0x9A, +/* 00009D60 */ 0xA2, 0x01, 0x00, 0xBC, 0x9F, 0x01, 0x00, 0x4D, 0x9C, 0x01, 0x00, 0x51, 0x9A, 0x01, 0x00, 0xF8, +/* 00009D70 */ 0x97, 0x01, 0x00, 0x89, 0x95, 0x01, 0x00, 0x2B, 0x95, 0x01, 0x00, 0x53, 0x93, 0x01, 0x00, 0xBB, +/* 00009D80 */ 0x81, 0x01, 0x00, 0x7B, 0x6C, 0x01, 0x00, 0x99, 0x3B, 0x01, 0x00, 0x5A, 0x2F, 0x01, 0x00, 0x85, +/* 00009D90 */ 0x2E, 0x01, 0x00, 0xCC, 0x2D, 0x01, 0x00, 0xC0, 0x2C, 0x01, 0x00, 0x22, 0x2C, 0x01, 0x00, 0xAE, +/* 00009DA0 */ 0x2B, 0x01, 0x00, 0x37, 0x2B, 0x01, 0x00, 0x0B, 0x29, 0x01, 0x00, 0x0E, 0x27, 0x01, 0x00, 0x9A, +/* 00009DB0 */ 0x25, 0x01, 0x00, 0xA9, 0x20, 0x01, 0x00, 0x35, 0x1F, 0x01, 0x00, 0xA7, 0x1D, 0x01, 0x00, 0x95, +/* 00009DC0 */ 0x18, 0x01, 0x00, 0x90, 0x16, 0x01, 0x00, 0x18, 0x15, 0x01, 0x00, 0xC3, 0x14, 0x01, 0x00, 0x06, +/* 00009DD0 */ 0x11, 0x01, 0x00, 0x30, 0x10, 0x01, 0x00, 0xA0, 0x0C, 0x01, 0x00, 0xFF, 0x09, 0x01, 0x00, 0xEA, +/* 00009DE0 */ 0x08, 0x01, 0x00, 0xD8, 0x07, 0x01, 0x00, 0xE5, 0x05, 0x01, 0x00, 0x5A, 0x05, 0x01, 0x00, 0xCF, +/* 00009DF0 */ 0x04, 0x01, 0x00, 0x44, 0x04, 0x01, 0x00, 0xCC, 0x03, 0x01, 0x00, 0x83, 0x01, 0x01, 0x00, 0x30, +/* 00009E00 */ 0xFE, 0x00, 0x00, 0xE3, 0xE7, 0x00, 0x00, 0xDD, 0xD1, 0x00, 0x00, 0x0F, 0x9E, 0x00, 0x00, 0x7E, +/* 00009E10 */ 0x5D, 0x18, 0xC1, 0x53, 0x5A, 0x4B, 0x04, 0xFE, 0x67, 0x0C, 0x1A, 0xA0, 0x41, 0xD1, 0x00, 0xB2, +/* 00009E20 */ 0xFF, 0x8C, 0x36, 0x02, 0x00, 0xFF, 0x8C, 0x36, 0x02, 0x00, 0x0F, 0xFE, 0x00, 0x90, 0x01, 0x01, +/* 00009E30 */ 0xFF, 0x8C, 0x36, 0x02, 0x00, 0xFE, 0x12, 0x79, 0xFE, 0x12, 0x79, 0x01, 0xFE, 0xC8, 0x04, 0x15, +/* 00009E40 */ 0x36, 0x44, 0x09, 0xEE, 0xED, 0x02, 0x0E, 0x02, 0x09, 0x2D, 0x2D, 0x2D, 0x2D, 0x07, 0x02, 0x41, +/* 00009E50 */ 0x42, 0x43, 0x44, 0x08, 0x06, 0xFE, 0x27, 0x03, 0x06, 0xFE, 0x2E, 0x04, 0x06, 0xFE, 0xC9, 0x04, +/* 00009E60 */ 0x05, 0xFE, 0xCA, 0x04, 0x06, 0xFE, 0xCB, 0x04, 0x05, 0xFE, 0xCC, 0x04, 0x06, 0xFE, 0xCD, 0x04, +/* 00009E70 */ 0x05, 0xFE, 0xCE, 0x04, 0x06, 0xFE, 0xCF, 0x04, 0x05, 0xFE, 0xD0, 0x04, 0x06, 0xFE, 0xD1, 0x04, +/* 00009E80 */ 0x05, 0xFE, 0xD2, 0x04, 0x06, 0xFE, 0xD3, 0x04, 0x05, 0xFE, 0xD4, 0x04, 0x06, 0xFE, 0xD5, 0x04, +/* 00009E90 */ 0x05, 0xFE, 0xD6, 0x04, 0x06, 0xFE, 0xD7, 0x04, 0x05, 0xFE, 0xD8, 0x04, 0x06, 0xFE, 0xD9, 0x04, +/* 00009EA0 */ 0x05, 0xFE, 0xDA, 0x04, 0x07, 0x06, 0xFE, 0x21, 0x04, 0x01, 0x00, 0x06, 0xFE, 0x3C, 0x04, 0x01, +/* 00009EB0 */ 0x01, 0x06, 0xFE, 0x3D, 0x04, 0x01, 0x02, 0x05, 0xFE, 0x3E, 0x04, 0x06, 0xFE, 0x3F, 0x04, 0x06, +/* 00009EC0 */ 0xFE, 0x40, 0x04, 0x05, 0xFE, 0x41, 0x04, 0x06, 0xFE, 0x42, 0x04, 0x05, 0xFE, 0x43, 0x04, 0x05, +/* 00009ED0 */ 0xFE, 0x44, 0x04, 0x05, 0xFE, 0x45, 0x04, 0x05, 0xFE, 0x46, 0x04, 0x06, 0xFE, 0x74, 0x04, 0x06, +/* 00009EE0 */ 0xFE, 0x17, 0x04, 0x06, 0xFE, 0xEC, 0x03, 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, 0x2B, 0x03, 0x0C, +/* 00009EF0 */ 0x06, 0xFE, 0x2C, 0x03, 0x06, 0xFE, 0x2D, 0x03, 0x06, 0xFE, 0xED, 0x03, 0x0B, 0x06, 0xFE, 0x15, +/* 00009F00 */ 0x04, 0x06, 0xFE, 0x77, 0x03, 0x05, 0xFE, 0x14, 0x04, 0x06, 0xFE, 0xEE, 0x03, 0x06, 0xFE, 0x38, +/* 00009F10 */ 0x03, 0xFE, 0x52, 0x04, 0x4E, 0x40, 0xA8, 0x36, 0xA8, 0x37, 0xA8, 0x38, 0xA8, 0x39, 0xA8, 0x3A, +/* 00009F20 */ 0xA8, 0x3B, 0xA8, 0x3C, 0xA8, 0x3D, 0xA8, 0x3E, 0xA8, 0x3F, 0x8F, 0x02, 0x32, 0x46, 0x00, 0x00, +/* 00009F30 */ 0x14, 0x0E, 0x00, 0x46, 0x03, 0x8F, 0x02, 0x32, 0x46, 0x00, 0x00, 0x14, 0x03, 0x00, 0x46, 0x04, +/* 00009F40 */ 0x09, 0x1A, 0x04, 0xE0, 0x00, 0x0B, 0x01, 0xB9, 0x46, 0x00, 0x01, 0x66, 0x01, 0x00, 0x36, 0x46, +/* 00009F50 */ 0x95, 0x00, 0x02, 0x36, 0x01, 0x66, 0x01, 0x01, 0x37, 0x46, 0x95, 0x00, 0x03, 0x37, 0x01, 0x66, +/* 00009F60 */ 0x01, 0x02, 0x38, 0x46, 0x95, 0x00, 0x04, 0x38, 0x01, 0x66, 0x01, 0x03, 0x39, 0x46, 0x95, 0x00, +/* 00009F70 */ 0x05, 0x39, 0x01, 0x66, 0x01, 0x04, 0x3A, 0x46, 0x95, 0x00, 0x06, 0x3A, 0x01, 0x66, 0x01, 0x05, +/* 00009F80 */ 0x3B, 0x46, 0x95, 0x00, 0x07, 0x3B, 0x01, 0x66, 0x01, 0x06, 0x3C, 0x46, 0x95, 0x00, 0x08, 0x3C, +/* 00009F90 */ 0x01, 0x66, 0x01, 0x07, 0x3D, 0x46, 0x95, 0x00, 0x09, 0x3D, 0x4E, 0x46, 0x95, 0x00, 0x0A, 0x46, +/* 00009FA0 */ 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x7B, 0x06, 0x46, +/* 00009FB0 */ 0x00, 0x7B, 0x08, 0x46, 0x01, 0x7B, 0x0A, 0x46, 0x02, 0x7B, 0x0C, 0x46, 0x03, 0x7B, 0x0E, 0x46, +/* 00009FC0 */ 0x04, 0x7B, 0x10, 0x46, 0x05, 0x7B, 0x12, 0x46, 0x06, 0x7B, 0x14, 0x46, 0x07, 0x7B, 0x16, 0x46, +/* 00009FD0 */ 0x08, 0x96, 0x02, 0x46, 0xD0, 0x46, 0x03, 0x00, 0x00, 0xA8, 0x47, 0xA1, 0x00, 0x47, 0x46, 0xA8, +/* 00009FE0 */ 0x47, 0xA1, 0x01, 0x47, 0x46, 0xA8, 0x47, 0xA1, 0x02, 0x47, 0x46, 0x95, 0x00, 0x0A, 0x46, 0x8F, +/* 00009FF0 */ 0x02, 0x04, 0x46, 0x01, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0xCE, 0x2C, 0x00, 0x00, 0x00, +/* 0000A000 */ 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0x7B, 0x19, 0x47, 0x09, 0x7B, 0x1B, 0x47, 0x0A, +/* 0000A010 */ 0x7B, 0x1D, 0x47, 0x0B, 0x5A, 0x01, 0x47, 0x00, 0x00, 0x5A, 0x02, 0x17, 0x00, 0x00, 0xF0, 0x03, +/* 0000A020 */ 0x46, 0x46, 0x00, 0x00, 0x45, 0x40, 0x46, 0xB9, 0x47, 0x00, 0x01, 0x66, 0x01, 0x08, 0x46, 0x47, +/* 0000A030 */ 0x07, 0x06, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x1E, 0x01, 0x00, 0x5A, 0x02, 0x1F, 0x01, 0x00, +/* 0000A040 */ 0x5A, 0x03, 0x20, 0x01, 0x00, 0x5F, 0x47, 0x40, 0x0C, 0x5A, 0x04, 0x47, 0x01, 0x00, 0x8F, 0x02, +/* 0000A050 */ 0x03, 0x47, 0x02, 0x00, 0x5F, 0x47, 0x47, 0x0D, 0x5F, 0x47, 0x47, 0x0E, 0x5A, 0x05, 0x47, 0x01, +/* 0000A060 */ 0x00, 0xF0, 0x06, 0xFF, 0x46, 0x01, 0x00, 0xB9, 0x47, 0x00, 0x01, 0x66, 0x01, 0x09, 0x46, 0x47, +/* 0000A070 */ 0x07, 0x06, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x21, 0x02, 0x00, 0x5A, 0x02, 0x22, 0x02, 0x00, +/* 0000A080 */ 0x5A, 0x03, 0x22, 0x02, 0x00, 0x5F, 0x47, 0x40, 0x0F, 0x5A, 0x04, 0x47, 0x02, 0x00, 0x8F, 0x02, +/* 0000A090 */ 0x03, 0x47, 0x02, 0x00, 0x5F, 0x47, 0x47, 0x10, 0x5F, 0x47, 0x47, 0x11, 0x5A, 0x05, 0x47, 0x02, +/* 0000A0A0 */ 0x00, 0xF0, 0x06, 0xFF, 0x46, 0x02, 0x00, 0xB9, 0x47, 0x00, 0x01, 0x66, 0x01, 0x0A, 0x46, 0x47, +/* 0000A0B0 */ 0x07, 0x06, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x23, 0x03, 0x00, 0x5A, 0x02, 0x24, 0x03, 0x00, +/* 0000A0C0 */ 0x5A, 0x03, 0x24, 0x03, 0x00, 0x5F, 0x47, 0x40, 0x12, 0x5A, 0x04, 0x47, 0x03, 0x00, 0x8F, 0x02, +/* 0000A0D0 */ 0x03, 0x47, 0x02, 0x00, 0x5F, 0x47, 0x47, 0x13, 0x5F, 0x47, 0x47, 0x14, 0x5A, 0x05, 0x47, 0x03, +/* 0000A0E0 */ 0x00, 0xF0, 0x06, 0xFF, 0x46, 0x03, 0x00, 0x8F, 0x02, 0x32, 0x46, 0x00, 0x00, 0x14, 0x03, 0x00, +/* 0000A0F0 */ 0x46, 0x03, 0x09, 0x68, 0x02, 0xE0, 0x01, 0x04, 0x03, 0xB9, 0x46, 0x00, 0xB8, 0x01, 0x00, 0x00, +/* 0000A100 */ 0x00, 0x46, 0x46, 0x01, 0x66, 0x01, 0x0B, 0x3E, 0x46, 0x95, 0x01, 0x02, 0x3E, 0x01, 0x66, 0x01, +/* 0000A110 */ 0x0C, 0x3F, 0x46, 0x95, 0x01, 0x03, 0x3F, 0x8F, 0x02, 0x23, 0x46, 0x03, 0x00, 0x07, 0x03, 0x00, +/* 0000A120 */ 0x59, 0x00, 0x02, 0x5A, 0x01, 0x25, 0x04, 0x00, 0x91, 0x01, 0x02, 0x47, 0x04, 0x00, 0x5A, 0x02, +/* 0000A130 */ 0x47, 0x04, 0x00, 0xF0, 0x03, 0xFF, 0x46, 0x04, 0x00, 0x8F, 0x02, 0x23, 0x46, 0x03, 0x00, 0x07, +/* 0000A140 */ 0x03, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x26, 0x05, 0x00, 0x91, 0x01, 0x03, 0x47, 0x05, 0x00, +/* 0000A150 */ 0x5A, 0x02, 0x47, 0x05, 0x00, 0xF0, 0x03, 0xFF, 0x46, 0x05, 0x00, 0x91, 0x01, 0x02, 0x46, 0x04, +/* 0000A160 */ 0x00, 0xD0, 0x47, 0x02, 0x01, 0x00, 0xA1, 0x00, 0x27, 0x47, 0xA1, 0x01, 0x28, 0x47, 0x77, 0x47, +/* 0000A170 */ 0x46, 0x15, 0x8F, 0x02, 0x16, 0x46, 0x06, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x91, 0x01, +/* 0000A180 */ 0x02, 0x47, 0x04, 0x00, 0x5A, 0x01, 0x47, 0x06, 0x00, 0x5A, 0x02, 0x29, 0x06, 0x00, 0xCE, 0x40, +/* 0000A190 */ 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0x91, 0x01, 0x02, 0x48, 0x04, +/* 0000A1A0 */ 0x00, 0x07, 0x01, 0x00, 0xC5, 0x01, 0x48, 0x48, 0x07, 0x00, 0x7B, 0x48, 0x47, 0x16, 0x7B, 0x2C, +/* 0000A1B0 */ 0x47, 0x17, 0x7B, 0x2C, 0x47, 0x18, 0x7B, 0x2C, 0x47, 0x19, 0x5A, 0x03, 0x47, 0x06, 0x00, 0xF0, +/* 0000A1C0 */ 0x04, 0xFF, 0x46, 0x06, 0x00, 0x8F, 0x02, 0x04, 0x46, 0x01, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 0000A1D0 */ 0x02, 0x91, 0x01, 0x02, 0x47, 0x04, 0x00, 0x5F, 0x47, 0x47, 0x1A, 0x5A, 0x01, 0x47, 0x08, 0x00, +/* 0000A1E0 */ 0x8F, 0x02, 0x09, 0x47, 0x07, 0x00, 0x5F, 0x47, 0x47, 0x1B, 0x5A, 0x02, 0x47, 0x08, 0x00, 0xF0, +/* 0000A1F0 */ 0x03, 0xFF, 0x46, 0x08, 0x00, 0x8F, 0x02, 0x16, 0x46, 0x06, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, +/* 0000A200 */ 0x02, 0x91, 0x01, 0x02, 0x47, 0x04, 0x00, 0x5F, 0x47, 0x47, 0x1C, 0x5A, 0x01, 0x47, 0x09, 0x00, +/* 0000A210 */ 0x5A, 0x02, 0x2F, 0x09, 0x00, 0xCE, 0x58, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x47, 0x00, +/* 0000A220 */ 0x00, 0x00, 0x91, 0x01, 0x02, 0x48, 0x04, 0x00, 0x7B, 0x48, 0x47, 0x1D, 0x7B, 0x30, 0x47, 0x1E, +/* 0000A230 */ 0x7B, 0x2C, 0x47, 0x1F, 0x7B, 0x30, 0x47, 0x20, 0x5A, 0x03, 0x47, 0x09, 0x00, 0xF0, 0x04, 0xFF, +/* 0000A240 */ 0x46, 0x09, 0x00, 0x8F, 0x02, 0x16, 0x46, 0x06, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x91, +/* 0000A250 */ 0x01, 0x02, 0x47, 0x04, 0x00, 0x5F, 0x47, 0x47, 0x21, 0x5A, 0x01, 0x47, 0x0A, 0x00, 0x5A, 0x02, +/* 0000A260 */ 0x31, 0x0A, 0x00, 0xCE, 0x70, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, +/* 0000A270 */ 0x8F, 0x02, 0x23, 0x48, 0x03, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x33, 0x0B, +/* 0000A280 */ 0x00, 0xB9, 0x4A, 0x00, 0xB8, 0x01, 0x00, 0x00, 0x00, 0x4A, 0x4A, 0x01, 0x66, 0x01, 0x0D, 0x49, +/* 0000A290 */ 0x4A, 0x5A, 0x02, 0x49, 0x0B, 0x00, 0xF0, 0x03, 0x48, 0x48, 0x0B, 0x00, 0x7B, 0x48, 0x47, 0x22, +/* 0000A2A0 */ 0x7B, 0x2C, 0x47, 0x23, 0x7B, 0x30, 0x47, 0x24, 0x5A, 0x03, 0x47, 0x0A, 0x00, 0xF0, 0x04, 0xFF, +/* 0000A2B0 */ 0x46, 0x0A, 0x00, 0x8F, 0x02, 0x16, 0x46, 0x06, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x91, +/* 0000A2C0 */ 0x01, 0x02, 0x47, 0x04, 0x00, 0x5F, 0x47, 0x47, 0x25, 0x5A, 0x01, 0x47, 0x0C, 0x00, 0x5A, 0x02, +/* 0000A2D0 */ 0x34, 0x0C, 0x00, 0xCE, 0x84, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, +/* 0000A2E0 */ 0xB9, 0x49, 0x00, 0xB8, 0x01, 0x00, 0x00, 0x00, 0x49, 0x49, 0x01, 0x6A, 0x01, 0x0E, 0x48, 0x49, +/* 0000A2F0 */ 0x47, 0x7B, 0x48, 0x47, 0x26, 0x7B, 0x30, 0x47, 0x27, 0x7B, 0x2C, 0x47, 0x28, 0x7B, 0x30, 0x47, +/* 0000A300 */ 0x29, 0x5A, 0x03, 0x47, 0x0C, 0x00, 0xF0, 0x04, 0xFF, 0x46, 0x0C, 0x00, 0x8F, 0x02, 0x16, 0x46, +/* 0000A310 */ 0x06, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x91, 0x01, 0x02, 0x47, 0x04, 0x00, 0x5A, 0x01, +/* 0000A320 */ 0x47, 0x0D, 0x00, 0x5A, 0x02, 0x35, 0x0D, 0x00, 0xCE, 0x9C, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, +/* 0000A330 */ 0x00, 0x47, 0x00, 0x00, 0x00, 0x8F, 0x01, 0x17, 0x48, 0x08, 0x00, 0x4A, 0x48, 0x7B, 0x48, 0x47, +/* 0000A340 */ 0x2A, 0x7B, 0x30, 0x47, 0x2B, 0x7B, 0x30, 0x47, 0x2C, 0x5A, 0x03, 0x47, 0x0D, 0x00, 0xF0, 0x04, +/* 0000A350 */ 0xFF, 0x46, 0x0D, 0x00, 0x91, 0x01, 0x02, 0x00, 0x04, 0x00, 0x09, 0x07, 0x00, 0xA8, 0x00, 0x09, +/* 0000A360 */ 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x07, 0xB0, 0x00, 0x9C, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, +/* 0000A370 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, +/* 0000A380 */ 0x00, 0x84, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, +/* 0000A390 */ 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x70, 0x00, 0x00, +/* 0000A3A0 */ 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, +/* 0000A3B0 */ 0x00, 0x95, 0x01, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0000A3C0 */ 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, +/* 0000A3D0 */ 0x00, 0x40, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, +/* 0000A3E0 */ 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x2C, 0x00, 0x00, +/* 0000A3F0 */ 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x72, 0x01, 0x00, 0x00, 0x70, 0x01, 0x00, +/* 0000A400 */ 0x00, 0x73, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0000A410 */ 0x00, 0xC9, 0x04, 0x00, 0x00, 0xCB, 0x04, 0x00, 0x00, 0xCD, 0x04, 0x00, 0x00, 0xCF, 0x04, 0x00, +/* 0000A420 */ 0x00, 0xD1, 0x04, 0x00, 0x00, 0xD3, 0x04, 0x00, 0x00, 0xD5, 0x04, 0x00, 0x00, 0xD7, 0x04, 0x00, +/* 0000A430 */ 0x00, 0xD9, 0x04, 0x00, 0x00, 0xFE, 0xC9, 0x04, 0xFE, 0xCB, 0x04, 0xFE, 0xCD, 0x04, 0xFE, 0xCF, +/* 0000A440 */ 0x04, 0xFE, 0xD1, 0x04, 0xFE, 0xD3, 0x04, 0xFE, 0xD5, 0x04, 0xFE, 0xD7, 0x04, 0xFE, 0xD9, 0x04, +/* 0000A450 */ 0xFE, 0x72, 0x01, 0xFE, 0x70, 0x01, 0xFE, 0x73, 0x01, 0xFE, 0x72, 0x01, 0xFE, 0x2F, 0x02, 0xFE, +/* 0000A460 */ 0x2A, 0x02, 0xFE, 0x70, 0x01, 0xFE, 0x2F, 0x02, 0xFE, 0x2B, 0x02, 0xFE, 0x73, 0x01, 0xFE, 0x2F, +/* 0000A470 */ 0x02, 0xFE, 0x2C, 0x02, 0xFE, 0x0A, 0x02, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, +/* 0000A480 */ 0xFE, 0x95, 0x01, 0xFE, 0x24, 0x01, 0xFE, 0x24, 0x01, 0xFE, 0x24, 0x01, 0xFE, 0x97, 0x01, 0xFE, +/* 0000A490 */ 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x24, 0x01, 0xFE, 0x98, 0x01, 0xFE, 0x94, +/* 0000A4A0 */ 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x24, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, +/* 0000A4B0 */ 0xFE, 0x95, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x95, 0x01, 0x02, 0x01, 0x09, 0x00, +/* 0000A4C0 */ 0xFE, 0x2A, 0x04, 0x01, 0xFE, 0xDB, 0x04, 0x02, 0xFE, 0xDC, 0x04, 0x03, 0xFE, 0xDD, 0x04, 0x04, +/* 0000A4D0 */ 0xFE, 0xDE, 0x04, 0x05, 0xFE, 0xDF, 0x04, 0x06, 0xFE, 0x29, 0x04, 0x07, 0xFE, 0x26, 0x04, 0x08, +/* 0000A4E0 */ 0xFE, 0x2B, 0x04, 0x03, 0x02, 0x00, 0xFE, 0x56, 0x02, 0x01, 0xFE, 0x0B, 0x02, 0xFF, 0xA2, 0x36, +/* 0000A4F0 */ 0x02, 0x00, 0x14, 0x16, 0x00, 0x00, 0x00, 0x76, 0x00, 0x75, 0x12, 0x34, 0x00, 0xEF, 0x36, 0x1B, +/* 0000A500 */ 0x00, 0x5E, 0x00, 0x38, 0x00, 0x16, 0x10, 0x40, 0x00, 0x47, 0x02, 0x40, 0x00, 0x59, 0x02, 0x40, +/* 0000A510 */ 0x00, 0x58, 0x02, 0x30, 0x00, 0x62, 0x04, 0x22, 0x00, 0x59, 0x04, 0x22, 0x00, 0x54, 0x00, 0x17, +/* 0000A520 */ 0x00, 0x48, 0x00, 0x53, 0x00, 0x9D, 0x00, 0x30, 0x00, 0x4A, 0x00, 0x4E, 0x00, 0xA2, 0x00, 0x70, +/* 0000A530 */ 0x00, 0x22, 0x03, 0x59, 0x00, 0xEC, 0x08, 0x48, 0x00, 0x9F, 0x00, 0x09, 0x00, 0x88, 0x00, 0x07, +/* 0000A540 */ 0x00, 0x16, 0x00, 0x00, 0x94, 0xCD, 0x00, 0x00, 0x05, 0xC9, 0x00, 0x00, 0x7F, 0xC8, 0x00, 0x00, +/* 0000A550 */ 0x73, 0xC6, 0x00, 0x00, 0xA2, 0xC4, 0x00, 0x00, 0x24, 0xC0, 0x00, 0x00, 0x84, 0xB6, 0x00, 0x00, +/* 0000A560 */ 0x94, 0xB3, 0x00, 0x00, 0x11, 0xB2, 0x00, 0x00, 0x8E, 0xB0, 0x00, 0x00, 0x0B, 0xAF, 0x00, 0x00, +/* 0000A570 */ 0xE2, 0xAC, 0x00, 0x00, 0xD6, 0xAA, 0x00, 0x00, 0xCC, 0xA9, 0x00, 0x00, 0x80, 0xA5, 0x00, 0x00, +/* 0000A580 */ 0x7F, 0x5D, 0x08, 0xC1, 0x13, 0x1A, 0x4F, 0x00, 0xFE, 0x65, 0x0E, 0x1B, 0xA0, 0x41, 0xC3, 0x00, +/* 0000A590 */ 0xFE, 0xEE, 0x03, 0xC5, 0xFF, 0x00, 0x00, 0x00, 0x02, 0xFF, 0xD3, 0xA5, 0x02, 0x00, 0xFF, 0xD3, +/* 0000A5A0 */ 0xA5, 0x02, 0x00, 0x01, 0x08, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFF, 0xD3, 0xA5, 0x02, 0x00, 0xFE, +/* 0000A5B0 */ 0x30, 0x08, 0xFE, 0x30, 0x08, 0x03, 0xFE, 0xE2, 0x03, 0xFE, 0x03, 0x05, 0xFE, 0xE0, 0x01, 0x07, +/* 0000A5C0 */ 0x15, 0x19, 0x09, 0x77, 0x77, 0x05, 0x08, 0x09, 0x21, 0x21, 0x21, 0x21, 0x01, 0x16, 0x17, 0x18, +/* 0000A5D0 */ 0x06, 0xFE, 0x94, 0x03, 0x05, 0xFE, 0x04, 0x05, 0x06, 0xFE, 0x30, 0x03, 0x06, 0xFE, 0xD7, 0x03, +/* 0000A5E0 */ 0x06, 0xFE, 0x8A, 0x04, 0x06, 0xFE, 0x24, 0x04, 0x06, 0xFE, 0x77, 0x04, 0x06, 0xFE, 0x55, 0x04, +/* 0000A5F0 */ 0x06, 0xFE, 0x33, 0x04, 0x06, 0xFE, 0x34, 0x04, 0x06, 0xFE, 0x35, 0x04, 0x06, 0xFE, 0x36, 0x04, +/* 0000A600 */ 0x06, 0xFE, 0x37, 0x04, 0x06, 0xFE, 0x38, 0x04, 0x06, 0xFE, 0x39, 0x04, 0x06, 0xFE, 0x3A, 0x04, +/* 0000A610 */ 0x06, 0xFE, 0x3B, 0x04, 0x07, 0x08, 0xFE, 0x15, 0x02, 0x58, 0x15, 0x2A, 0x19, 0x15, 0x15, 0x03, +/* 0000A620 */ 0x00, 0x19, 0x02, 0x09, 0x24, 0x00, 0x8F, 0x05, 0x03, 0x1A, 0x00, 0x00, 0x6D, 0x19, 0x1A, 0x00, +/* 0000A630 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x1A, 0x5A, 0x01, 0x03, 0x00, 0x00, 0x5A, 0x02, 0x04, 0x00, 0x00, +/* 0000A640 */ 0xF4, 0x03, 0xFF, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x05, 0x03, 0x1A, 0x00, 0x00, +/* 0000A650 */ 0x6D, 0x19, 0x1A, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x1A, 0x5A, 0x01, 0x15, 0x01, 0x00, 0xF4, +/* 0000A660 */ 0x02, 0x19, 0x19, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x96, 0x02, 0x19, 0x93, 0x02, 0x19, 0x01, +/* 0000A670 */ 0x00, 0xA8, 0x1A, 0x14, 0x0D, 0x00, 0x19, 0x1A, 0x93, 0x02, 0x19, 0x01, 0x00, 0x5F, 0x19, 0x19, +/* 0000A680 */ 0x02, 0x0F, 0x24, 0x00, 0x19, 0x8F, 0x05, 0x03, 0x1A, 0x00, 0x00, 0x6D, 0x19, 0x1A, 0x03, 0x07, +/* 0000A690 */ 0x03, 0x00, 0x59, 0x00, 0x1A, 0x5A, 0x01, 0x03, 0x02, 0x00, 0x5A, 0x02, 0x04, 0x02, 0x00, 0xF4, +/* 0000A6A0 */ 0x03, 0xFF, 0x19, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x8F, 0x05, 0x04, 0x19, 0x02, 0x00, 0x07, +/* 0000A6B0 */ 0x03, 0x00, 0x59, 0x00, 0x14, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, +/* 0000A6C0 */ 0x00, 0x00, 0x93, 0x02, 0x1B, 0x01, 0x00, 0x5F, 0x1B, 0x1B, 0x04, 0x7B, 0x1B, 0x1A, 0x05, 0x93, +/* 0000A6D0 */ 0x02, 0x1B, 0x01, 0x00, 0x5F, 0x1B, 0x1B, 0x06, 0x7B, 0x1B, 0x1A, 0x07, 0x93, 0x02, 0x1B, 0x01, +/* 0000A6E0 */ 0x00, 0x5F, 0x1B, 0x1B, 0x08, 0x7B, 0x1B, 0x1A, 0x09, 0x93, 0x02, 0x1B, 0x01, 0x00, 0x5F, 0x1B, +/* 0000A6F0 */ 0x1B, 0x0A, 0x7B, 0x1B, 0x1A, 0x0B, 0x93, 0x02, 0x1B, 0x01, 0x00, 0x5F, 0x1B, 0x1B, 0x0C, 0x7B, +/* 0000A700 */ 0x1B, 0x1A, 0x0D, 0x93, 0x02, 0x1B, 0x01, 0x00, 0x5F, 0x1B, 0x1B, 0x0E, 0x7B, 0x1B, 0x1A, 0x0F, +/* 0000A710 */ 0x93, 0x02, 0x1B, 0x01, 0x00, 0x5F, 0x1B, 0x1B, 0x10, 0x7B, 0x1B, 0x1A, 0x11, 0x93, 0x02, 0x1B, +/* 0000A720 */ 0x01, 0x00, 0x5F, 0x1B, 0x1B, 0x12, 0x7B, 0x1B, 0x1A, 0x13, 0x93, 0x02, 0x1B, 0x01, 0x00, 0x5F, +/* 0000A730 */ 0x1B, 0x1B, 0x14, 0x7B, 0x1B, 0x1A, 0x15, 0x93, 0x02, 0x1B, 0x01, 0x00, 0x5F, 0x1B, 0x1B, 0x16, +/* 0000A740 */ 0x7B, 0x1B, 0x1A, 0x17, 0x93, 0x02, 0x1B, 0x01, 0x00, 0x5F, 0x1B, 0x1B, 0x18, 0x7B, 0x1B, 0x1A, +/* 0000A750 */ 0x19, 0x93, 0x02, 0x1B, 0x01, 0x00, 0x5F, 0x1B, 0x1B, 0x1A, 0x7B, 0x1B, 0x1A, 0x1B, 0x93, 0x02, +/* 0000A760 */ 0x1B, 0x01, 0x00, 0x5F, 0x1B, 0x1B, 0x1C, 0x7B, 0x1B, 0x1A, 0x1D, 0x93, 0x02, 0x1B, 0x01, 0x00, +/* 0000A770 */ 0x5F, 0x1B, 0x1B, 0x1E, 0x7B, 0x1B, 0x1A, 0x1F, 0x5A, 0x01, 0x1A, 0x03, 0x00, 0x5A, 0x02, 0x13, +/* 0000A780 */ 0x03, 0x00, 0xF0, 0x03, 0x19, 0x19, 0x03, 0x00, 0x96, 0x03, 0x19, 0x8F, 0x05, 0x04, 0x19, 0x02, +/* 0000A790 */ 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x14, 0xCD, 0x1A, 0x5A, 0x01, 0x1A, 0x04, 0x00, 0x5A, 0x02, +/* 0000A7A0 */ 0x13, 0x04, 0x00, 0xF0, 0x03, 0x19, 0x19, 0x04, 0x00, 0x96, 0x04, 0x19, 0x8F, 0x05, 0x06, 0x19, +/* 0000A7B0 */ 0x03, 0x00, 0x07, 0x05, 0x00, 0x59, 0x00, 0x14, 0x8F, 0x05, 0x17, 0x1A, 0x04, 0x00, 0x5A, 0x01, +/* 0000A7C0 */ 0x1A, 0x05, 0x00, 0x8F, 0x05, 0x13, 0x1A, 0x05, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x14, 0x93, +/* 0000A7D0 */ 0x03, 0x1B, 0x06, 0x00, 0x5A, 0x01, 0x1B, 0x06, 0x00, 0xF0, 0x02, 0x1A, 0x1A, 0x06, 0x00, 0x5A, +/* 0000A7E0 */ 0x02, 0x1A, 0x05, 0x00, 0xD6, 0x00, 0x1A, 0x5A, 0x03, 0x1A, 0x05, 0x00, 0x93, 0x02, 0x1A, 0x01, +/* 0000A7F0 */ 0x00, 0x5A, 0x04, 0x1A, 0x05, 0x00, 0xF0, 0x05, 0xFF, 0x19, 0x05, 0x00, 0x8F, 0x05, 0x04, 0x19, +/* 0000A800 */ 0x02, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x14, 0x93, 0x04, 0x1A, 0x07, 0x00, 0x5A, 0x01, 0x1A, +/* 0000A810 */ 0x07, 0x00, 0x8F, 0x05, 0x09, 0x1A, 0x08, 0x00, 0x5F, 0x1A, 0x1A, 0x20, 0x5A, 0x02, 0x1A, 0x07, +/* 0000A820 */ 0x00, 0xF0, 0x03, 0x00, 0x19, 0x07, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x01, 0x40, +/* 0000A830 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x02, 0x00, +/* 0000A840 */ 0x00, 0x6B, 0x02, 0x00, 0x00, 0x49, 0x02, 0x00, 0x00, 0x74, 0x02, 0x00, 0x00, 0x6F, 0x02, 0x00, +/* 0000A850 */ 0x00, 0x76, 0x02, 0x00, 0x00, 0x6D, 0x02, 0x00, 0x00, 0x77, 0x02, 0x00, 0x00, 0x71, 0x02, 0x00, +/* 0000A860 */ 0x00, 0x6C, 0x02, 0x00, 0x00, 0x6E, 0x02, 0x00, 0x00, 0x70, 0x02, 0x00, 0x00, 0x73, 0x02, 0x00, +/* 0000A870 */ 0x00, 0x75, 0x02, 0x00, 0x00, 0xFE, 0xB6, 0x02, 0xFE, 0x05, 0x02, 0xFE, 0x5E, 0x02, 0xFE, 0xB6, +/* 0000A880 */ 0x02, 0xFE, 0x09, 0x02, 0xFE, 0x0D, 0x02, 0xFE, 0x58, 0x02, 0xFE, 0x6B, 0x02, 0xFE, 0x3D, 0x02, +/* 0000A890 */ 0xFE, 0x49, 0x02, 0xFE, 0x65, 0x02, 0xFE, 0x74, 0x02, 0xFE, 0x5D, 0x02, 0xFE, 0x6F, 0x02, 0xFE, +/* 0000A8A0 */ 0x67, 0x02, 0xFE, 0x76, 0x02, 0xFE, 0x5A, 0x02, 0xFE, 0x6D, 0x02, 0xFE, 0x6A, 0x02, 0xFE, 0x77, +/* 0000A8B0 */ 0x02, 0xFE, 0x61, 0x02, 0xFE, 0x71, 0x02, 0xFE, 0x59, 0x02, 0xFE, 0x6C, 0x02, 0xFE, 0x5C, 0x02, +/* 0000A8C0 */ 0xFE, 0x6E, 0x02, 0xFE, 0x60, 0x02, 0xFE, 0x70, 0x02, 0xFE, 0x63, 0x02, 0xFE, 0x73, 0x02, 0xFE, +/* 0000A8D0 */ 0x66, 0x02, 0xFE, 0x75, 0x02, 0xFE, 0x24, 0x01, 0xFF, 0x08, 0xA6, 0x02, 0x00, 0x0A, 0x02, 0x00, +/* 0000A8E0 */ 0x00, 0x00, 0x0B, 0x00, 0x3C, 0x00, 0x24, 0x00, 0x90, 0x00, 0x22, 0x00, 0x4B, 0x00, 0x19, 0x00, +/* 0000A8F0 */ 0x6B, 0x00, 0x24, 0x00, 0x90, 0x00, 0xE2, 0x00, 0xCE, 0x03, 0x21, 0x00, 0x3E, 0x00, 0x50, 0x00, +/* 0000A900 */ 0x98, 0x01, 0x30, 0x00, 0x44, 0x00, 0x00, 0x0B, 0xA9, 0x00, 0x00, 0x7F, 0x5C, 0x0E, 0x01, 0x00, +/* 0000A910 */ 0x10, 0x03, 0x00, 0xFE, 0x7E, 0x0E, 0x60, 0xA2, 0x41, 0xD1, 0x00, 0xC6, 0xFF, 0x6E, 0xAC, 0x02, +/* 0000A920 */ 0x00, 0xFF, 0x6E, 0xAC, 0x02, 0x00, 0x41, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0x6E, 0xAC, 0x02, +/* 0000A930 */ 0x00, 0xFE, 0x27, 0x01, 0xFE, 0x27, 0x01, 0x04, 0x05, 0x07, 0x05, 0x18, 0x18, 0x06, 0x02, 0x01, +/* 0000A940 */ 0x01, 0x05, 0x06, 0x06, 0xFE, 0x77, 0x04, 0x05, 0xFE, 0xC7, 0x04, 0x08, 0x6C, 0x8F, 0x01, 0x03, +/* 0000A950 */ 0x07, 0x00, 0x00, 0x98, 0x07, 0x07, 0x05, 0x00, 0x00, 0xA8, 0x08, 0x15, 0x08, 0x00, 0x07, 0x08, +/* 0000A960 */ 0x14, 0x03, 0x00, 0x05, 0x02, 0x09, 0x4D, 0x00, 0x8F, 0x06, 0x06, 0x07, 0x01, 0x00, 0x07, 0x04, +/* 0000A970 */ 0x00, 0x59, 0x00, 0x04, 0x8F, 0x06, 0x14, 0x08, 0x02, 0x00, 0x5A, 0x01, 0x08, 0x00, 0x00, 0x8F, +/* 0000A980 */ 0x01, 0x02, 0x08, 0x03, 0x00, 0x5A, 0x02, 0x08, 0x00, 0x00, 0x2D, 0x08, 0x03, 0x05, 0x5A, 0x03, +/* 0000A990 */ 0x08, 0x00, 0x00, 0xF0, 0x04, 0x07, 0x07, 0x00, 0x00, 0x0E, 0x18, 0x00, 0x07, 0x8F, 0x01, 0x04, +/* 0000A9A0 */ 0x07, 0x04, 0x00, 0x8F, 0x01, 0x03, 0x08, 0x00, 0x00, 0x98, 0x08, 0x08, 0x05, 0x01, 0x00, 0x9D, +/* 0000A9B0 */ 0x08, 0x07, 0x05, 0x00, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFF, 0x9C, 0xAC, 0x02, 0x00, 0x03, 0x00, +/* 0000A9C0 */ 0x00, 0x00, 0x00, 0x50, 0x00, 0xA6, 0x00, 0x1A, 0x00, 0x52, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0xC1, +/* 0000A9D0 */ 0x03, 0x10, 0x03, 0x00, 0xFE, 0x56, 0x0E, 0x39, 0xA0, 0x41, 0xD1, 0x00, 0xC4, 0xFF, 0xC6, 0xA2, +/* 0000A9E0 */ 0x02, 0x00, 0xFF, 0xC6, 0xA2, 0x02, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFF, 0xC6, 0xA2, +/* 0000A9F0 */ 0x02, 0x00, 0xFE, 0x60, 0x02, 0xFE, 0x60, 0x02, 0x05, 0x05, 0x08, 0x04, 0x22, 0x21, 0x05, 0x03, +/* 0000AA00 */ 0x01, 0x05, 0x05, 0x05, 0x05, 0x07, 0x06, 0xFE, 0x94, 0x03, 0x05, 0xFE, 0x88, 0x04, 0x06, 0xFE, +/* 0000AA10 */ 0x30, 0x03, 0x91, 0x58, 0x05, 0x2A, 0x08, 0x05, 0x15, 0x03, 0x00, 0x08, 0x02, 0x09, 0x24, 0x00, +/* 0000AA20 */ 0x8F, 0x05, 0x03, 0x09, 0x00, 0x00, 0x6D, 0x08, 0x09, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x09, +/* 0000AA30 */ 0x5A, 0x01, 0x03, 0x00, 0x00, 0x5A, 0x02, 0x04, 0x00, 0x00, 0xF4, 0x03, 0xFF, 0x08, 0x00, 0x00, +/* 0000AA40 */ 0x00, 0x00, 0x00, 0x00, 0x8F, 0x05, 0x03, 0x09, 0x00, 0x00, 0x6D, 0x08, 0x09, 0x01, 0x07, 0x02, +/* 0000AA50 */ 0x00, 0x59, 0x00, 0x09, 0x5A, 0x01, 0x05, 0x01, 0x00, 0xF4, 0x02, 0x08, 0x08, 0x01, 0x00, 0x00, +/* 0000AA60 */ 0x00, 0x01, 0x00, 0x45, 0x06, 0x08, 0xA8, 0x08, 0x14, 0x08, 0x00, 0x06, 0x08, 0x5F, 0x08, 0x06, +/* 0000AA70 */ 0x02, 0x0F, 0x24, 0x00, 0x08, 0x8F, 0x05, 0x03, 0x09, 0x00, 0x00, 0x6D, 0x08, 0x09, 0x03, 0x07, +/* 0000AA80 */ 0x03, 0x00, 0x59, 0x00, 0x09, 0x5A, 0x01, 0x03, 0x02, 0x00, 0x5A, 0x02, 0x04, 0x02, 0x00, 0xF4, +/* 0000AA90 */ 0x03, 0xFF, 0x08, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x5F, 0x00, 0x06, 0x04, 0x09, 0x02, 0x00, +/* 0000AAA0 */ 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB6, 0x02, 0xFE, 0x05, 0x02, 0xFE, 0x5E, 0x02, 0xFE, 0xB6, 0x02, +/* 0000AAB0 */ 0xFE, 0x57, 0x02, 0xFF, 0xEC, 0xA2, 0x02, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3C, +/* 0000AAC0 */ 0x00, 0x24, 0x00, 0x88, 0x00, 0x22, 0x00, 0x4B, 0x00, 0x0F, 0x00, 0x6B, 0x00, 0x24, 0x00, 0x88, +/* 0000AAD0 */ 0x00, 0x09, 0x00, 0x37, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x37, +/* 0000AAE0 */ 0x0E, 0x10, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x15, 0x04, 0xC3, 0xFF, 0x1F, 0x9C, 0x02, 0x00, 0xFF, +/* 0000AAF0 */ 0x1F, 0x9C, 0x02, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0x1F, 0x9C, 0x02, 0x00, 0xFE, +/* 0000AB00 */ 0xFD, 0x03, 0xFE, 0xFD, 0x03, 0x08, 0x06, 0x0B, 0x07, 0x55, 0x51, 0x05, 0x0A, 0x06, 0x07, 0x07, +/* 0000AB10 */ 0x07, 0x07, 0x0A, 0x06, 0xFE, 0x94, 0x03, 0x05, 0xFE, 0x88, 0x04, 0x06, 0xFE, 0x30, 0x03, 0x08, +/* 0000AB20 */ 0xFE, 0x6F, 0x01, 0x58, 0x07, 0x4E, 0x08, 0x4E, 0x09, 0x2A, 0x0B, 0x07, 0x15, 0x03, 0x00, 0x0B, +/* 0000AB30 */ 0x02, 0x09, 0x24, 0x00, 0x8F, 0x05, 0x03, 0x0C, 0x00, 0x00, 0x6D, 0x0B, 0x0C, 0x00, 0x07, 0x03, +/* 0000AB40 */ 0x00, 0x59, 0x00, 0x0C, 0x5A, 0x01, 0x03, 0x00, 0x00, 0x5A, 0x02, 0x04, 0x00, 0x00, 0xF4, 0x03, +/* 0000AB50 */ 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x05, 0x03, 0x0C, 0x00, 0x00, 0x6D, 0x0B, +/* 0000AB60 */ 0x0C, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0C, 0x5A, 0x01, 0x07, 0x01, 0x00, 0xF4, 0x02, 0x0B, +/* 0000AB70 */ 0x0B, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, 0x08, 0x0B, 0xA8, 0x0B, 0x14, 0x08, 0x00, 0x08, +/* 0000AB80 */ 0x0B, 0x5F, 0x0B, 0x08, 0x02, 0x0F, 0x24, 0x00, 0x0B, 0x8F, 0x05, 0x03, 0x0C, 0x00, 0x00, 0x6D, +/* 0000AB90 */ 0x0B, 0x0C, 0x03, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0C, 0x5A, 0x01, 0x03, 0x02, 0x00, 0x5A, 0x02, +/* 0000ABA0 */ 0x04, 0x02, 0x00, 0xF4, 0x03, 0xFF, 0x0B, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0xA8, 0x0B, 0x15, +/* 0000ABB0 */ 0x03, 0x00, 0x06, 0x0B, 0x09, 0x50, 0x00, 0x8F, 0x05, 0x21, 0x0B, 0x01, 0x00, 0x07, 0x02, 0x00, +/* 0000ABC0 */ 0x59, 0x00, 0x05, 0x5A, 0x01, 0x06, 0x03, 0x00, 0xF0, 0x02, 0x0B, 0x0B, 0x03, 0x00, 0x0F, 0x1B, +/* 0000ABD0 */ 0x00, 0x0B, 0x8F, 0x05, 0x20, 0x0B, 0x02, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x05, 0x5A, 0x01, +/* 0000ABE0 */ 0x06, 0x04, 0x00, 0xF0, 0x02, 0x0B, 0x0B, 0x04, 0x00, 0x0F, 0x1A, 0x00, 0x0B, 0x8F, 0x05, 0x03, +/* 0000ABF0 */ 0x0C, 0x00, 0x00, 0x6D, 0x0B, 0x0C, 0x04, 0x07, 0x01, 0x00, 0x59, 0x00, 0x0C, 0xF4, 0x01, 0xFF, +/* 0000AC00 */ 0x0B, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0xA8, 0x0B, 0x45, 0x09, 0x0B, 0xA8, 0x0B, 0x15, 0x03, +/* 0000AC10 */ 0x00, 0x06, 0x0B, 0x09, 0x25, 0x00, 0x8F, 0x05, 0x24, 0x0C, 0x03, 0x00, 0x6D, 0x0B, 0x0C, 0x05, +/* 0000AC20 */ 0x07, 0x02, 0x00, 0x59, 0x00, 0x0C, 0x5A, 0x01, 0x06, 0x06, 0x00, 0xF4, 0x02, 0x0B, 0x0B, 0x05, +/* 0000AC30 */ 0x00, 0x00, 0x00, 0x06, 0x00, 0x45, 0x09, 0x0B, 0x09, 0x15, 0x00, 0x8F, 0x05, 0x1C, 0x0B, 0x04, +/* 0000AC40 */ 0x00, 0x07, 0x01, 0x00, 0x59, 0x00, 0x05, 0xF0, 0x01, 0x0B, 0x0B, 0x07, 0x00, 0x45, 0x09, 0x0B, +/* 0000AC50 */ 0x8F, 0x05, 0x0C, 0x0B, 0x05, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x05, 0x8F, 0x05, 0x03, 0x0D, +/* 0000AC60 */ 0x00, 0x00, 0x6D, 0x0C, 0x0D, 0x06, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0D, 0x5A, 0x01, 0x09, 0x09, +/* 0000AC70 */ 0x00, 0x5A, 0x02, 0x08, 0x09, 0x00, 0xF4, 0x03, 0x0C, 0x0C, 0x06, 0x00, 0x00, 0x00, 0x09, 0x00, +/* 0000AC80 */ 0x5A, 0x01, 0x0C, 0x08, 0x00, 0xF0, 0x02, 0x00, 0x0B, 0x08, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, +/* 0000AC90 */ 0x24, 0x00, 0xFE, 0xB6, 0x02, 0xFE, 0x05, 0x02, 0xFE, 0x5E, 0x02, 0xFE, 0xB6, 0x02, 0xFE, 0xB9, +/* 0000ACA0 */ 0x02, 0xFE, 0x23, 0x03, 0xFE, 0xFC, 0x01, 0xFF, 0x4B, 0x9C, 0x02, 0x00, 0x0D, 0x06, 0x00, 0x00, +/* 0000ACB0 */ 0x00, 0x0B, 0x00, 0x38, 0x00, 0x24, 0x00, 0x7F, 0x00, 0x22, 0x00, 0x47, 0x00, 0x0F, 0x00, 0x67, +/* 0000ACC0 */ 0x00, 0x24, 0x00, 0x80, 0x00, 0x40, 0x00, 0x56, 0x00, 0x1A, 0x00, 0x48, 0x00, 0x05, 0x00, 0x2F, +/* 0000ACD0 */ 0x00, 0x0A, 0x00, 0x32, 0x00, 0x25, 0x00, 0x59, 0x00, 0x15, 0x00, 0x42, 0x00, 0x40, 0x00, 0x51, +/* 0000ACE0 */ 0x00, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x1C, 0x0E, 0x10, 0xA3, 0x41, +/* 0000ACF0 */ 0xC1, 0x00, 0xFE, 0x30, 0x03, 0xC2, 0xFF, 0x9D, 0x97, 0x02, 0x00, 0xFF, 0x9D, 0x97, 0x02, 0x00, +/* 0000AD00 */ 0x09, 0xFE, 0x00, 0x90, 0x03, 0x01, 0xFF, 0x9D, 0x97, 0x02, 0x00, 0xFE, 0x26, 0x04, 0xFE, 0x26, +/* 0000AD10 */ 0x04, 0x09, 0x05, 0x0B, 0x05, 0x5E, 0x57, 0x05, 0x09, 0x0A, 0x06, 0x06, 0x06, 0x06, 0x0A, 0x08, +/* 0000AD20 */ 0x06, 0xFE, 0x30, 0x03, 0x07, 0xFE, 0x8A, 0x01, 0x58, 0x07, 0x4E, 0x08, 0x4E, 0x09, 0x15, 0x05, +/* 0000AD30 */ 0x00, 0x05, 0x02, 0xA8, 0x0B, 0x45, 0x05, 0x0B, 0x15, 0x05, 0x00, 0x06, 0x02, 0xA8, 0x0B, 0x45, +/* 0000AD40 */ 0x06, 0x0B, 0x4E, 0x08, 0x4E, 0x09, 0x8F, 0x05, 0x07, 0x0B, 0x00, 0x00, 0x14, 0x0A, 0x00, 0x07, +/* 0000AD50 */ 0x0B, 0xA8, 0x0B, 0x14, 0x03, 0x00, 0x07, 0x0B, 0x09, 0x1E, 0x00, 0x8F, 0x01, 0x02, 0x0B, 0x01, +/* 0000AD60 */ 0x00, 0x4A, 0x0B, 0x07, 0x03, 0x00, 0x5A, 0x01, 0x05, 0x00, 0x00, 0x5A, 0x02, 0x06, 0x00, 0x00, +/* 0000AD70 */ 0xC5, 0x03, 0x00, 0x0B, 0x00, 0x00, 0x09, 0x37, 0x01, 0x8F, 0x05, 0x24, 0x0C, 0x02, 0x00, 0x6D, +/* 0000AD80 */ 0x0B, 0x0C, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0C, 0x5A, 0x01, 0x07, 0x01, 0x00, 0xF4, 0x02, +/* 0000AD90 */ 0x0B, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, 0x08, 0x0B, 0x8F, 0x05, 0x12, 0x0B, 0x03, +/* 0000ADA0 */ 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x08, 0x02, 0x00, 0xF0, 0x02, 0x0B, 0x0B, +/* 0000ADB0 */ 0x02, 0x00, 0x0F, 0x1F, 0x00, 0x0B, 0x8F, 0x05, 0x03, 0x0C, 0x04, 0x00, 0x6D, 0x0B, 0x0C, 0x01, +/* 0000ADC0 */ 0x07, 0x02, 0x00, 0x59, 0x00, 0x0C, 0x5A, 0x01, 0x03, 0x03, 0x00, 0xF4, 0x02, 0xFF, 0x0B, 0x01, +/* 0000ADD0 */ 0x00, 0x00, 0x00, 0x03, 0x00, 0x8F, 0x05, 0x03, 0x0C, 0x04, 0x00, 0x6D, 0x0B, 0x0C, 0x02, 0x07, +/* 0000ADE0 */ 0x02, 0x00, 0x59, 0x00, 0x0C, 0x5A, 0x01, 0x08, 0x04, 0x00, 0xF4, 0x02, 0x0B, 0x0B, 0x02, 0x00, +/* 0000ADF0 */ 0x00, 0x00, 0x04, 0x00, 0x45, 0x09, 0x0B, 0xA8, 0x0B, 0x14, 0x03, 0x00, 0x09, 0x0B, 0x09, 0x45, +/* 0000AE00 */ 0x00, 0x8F, 0x05, 0x04, 0x0B, 0x05, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0xCD, 0x0C, 0x5A, +/* 0000AE10 */ 0x01, 0x0C, 0x05, 0x00, 0x5A, 0x02, 0x04, 0x05, 0x00, 0xF0, 0x03, 0x0B, 0x0B, 0x05, 0x00, 0x45, +/* 0000AE20 */ 0x09, 0x0B, 0x8F, 0x05, 0x03, 0x0C, 0x04, 0x00, 0x6D, 0x0B, 0x0C, 0x03, 0x07, 0x03, 0x00, 0x59, +/* 0000AE30 */ 0x00, 0x0C, 0x5A, 0x01, 0x08, 0x06, 0x00, 0x5A, 0x02, 0x09, 0x06, 0x00, 0xF4, 0x03, 0xFF, 0x0B, +/* 0000AE40 */ 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x8F, 0x02, 0x08, 0x0B, 0x06, 0x00, 0x4A, 0x0B, 0x07, 0x04, +/* 0000AE50 */ 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x09, 0x07, 0x00, 0x5A, 0x02, 0x05, 0x07, 0x00, 0x5A, 0x03, +/* 0000AE60 */ 0x06, 0x07, 0x00, 0xF0, 0x04, 0xFF, 0x0B, 0x07, 0x00, 0x45, 0x0B, 0x09, 0x8F, 0x05, 0x06, 0x0C, +/* 0000AE70 */ 0x07, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x8F, 0x05, 0x1A, 0x0D, 0x08, 0x00, 0x5A, 0x01, +/* 0000AE80 */ 0x0D, 0x08, 0x00, 0x8F, 0x01, 0x03, 0x0D, 0x09, 0x00, 0x4A, 0x0D, 0x5A, 0x02, 0x0D, 0x08, 0x00, +/* 0000AE90 */ 0x5A, 0x03, 0x08, 0x08, 0x00, 0xF0, 0x04, 0x0C, 0x0C, 0x08, 0x00, 0x77, 0x0C, 0x0B, 0x04, 0x5F, +/* 0000AEA0 */ 0x0B, 0x09, 0x05, 0x82, 0x0B, 0x0B, 0x06, 0x01, 0x45, 0x00, 0x08, 0x09, 0x02, 0x00, 0xA8, 0x00, +/* 0000AEB0 */ 0x24, 0x00, 0xFE, 0x21, 0x03, 0xFE, 0xB2, 0x02, 0xFE, 0x05, 0x02, 0xFE, 0x06, 0x02, 0xFE, 0x57, +/* 0000AEC0 */ 0x02, 0xFE, 0x57, 0x02, 0xFF, 0xB5, 0x97, 0x02, 0x00, 0x10, 0x06, 0x00, 0x00, 0x00, 0x0A, 0x00, +/* 0000AED0 */ 0x15, 0x00, 0x0E, 0x00, 0x2B, 0x00, 0x15, 0x00, 0x43, 0x00, 0x1E, 0x00, 0x58, 0x00, 0x22, 0x00, +/* 0000AEE0 */ 0x37, 0x00, 0x1B, 0x00, 0x38, 0x00, 0x1F, 0x00, 0x9D, 0x00, 0x22, 0x00, 0x47, 0x00, 0x0A, 0x00, +/* 0000AEF0 */ 0x3A, 0x00, 0x21, 0x00, 0x3F, 0x00, 0x24, 0x00, 0x58, 0x00, 0x23, 0x00, 0x4F, 0x00, 0x36, 0x00, +/* 0000AF00 */ 0x66, 0x00, 0x09, 0x00, 0x3D, 0x00, 0x08, 0x00, 0x1C, 0x00, 0x00, 0x7F, 0x5D, 0x08, 0xC1, 0x03, +/* 0000AF10 */ 0x1A, 0x0B, 0x00, 0xFE, 0x15, 0x0E, 0x0D, 0xA2, 0x41, 0xD1, 0x00, 0xC0, 0xFF, 0x1A, 0x95, 0x02, +/* 0000AF20 */ 0x00, 0xFF, 0x1A, 0x95, 0x02, 0x00, 0x01, 0x40, 0xFE, 0x00, 0x90, 0x06, 0x06, 0xFF, 0x1A, 0x95, +/* 0000AF30 */ 0x02, 0x00, 0xFE, 0x9F, 0x01, 0xFE, 0x9F, 0x01, 0x04, 0xFE, 0x06, 0x01, 0xFE, 0x82, 0x04, 0xFE, +/* 0000AF40 */ 0x83, 0x04, 0xFE, 0x84, 0x04, 0x0C, 0x03, 0x0B, 0x08, 0x16, 0x16, 0x04, 0x02, 0x03, 0x01, 0x01, +/* 0000AF50 */ 0x01, 0x01, 0x08, 0x09, 0x0A, 0x08, 0x58, 0x96, 0x02, 0x03, 0x96, 0x03, 0x04, 0x96, 0x04, 0x05, +/* 0000AF60 */ 0x96, 0x05, 0x06, 0x8F, 0x04, 0x03, 0x0C, 0x00, 0x00, 0x6D, 0x0B, 0x0C, 0x00, 0x07, 0x03, 0x00, +/* 0000AF70 */ 0x59, 0x00, 0x0C, 0x8F, 0x04, 0x23, 0x0D, 0x01, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x93, +/* 0000AF80 */ 0x02, 0x0E, 0x02, 0x00, 0x5A, 0x01, 0x0E, 0x01, 0x00, 0xD6, 0x00, 0x0E, 0x5A, 0x02, 0x0E, 0x01, +/* 0000AF90 */ 0x00, 0xF0, 0x03, 0x0D, 0x0D, 0x01, 0x00, 0x5A, 0x01, 0x0D, 0x00, 0x00, 0x5A, 0x02, 0x07, 0x00, +/* 0000AFA0 */ 0x00, 0xF4, 0x03, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, +/* 0000AFB0 */ 0x04, 0x02, 0xFF, 0x6D, 0x95, 0x02, 0x00, 0x02, 0x0C, 0x00, 0x00, 0x00, 0x4A, 0x00, 0x4B, 0x01, +/* 0000AFC0 */ 0x00, 0xC5, 0xAF, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x83, 0x10, 0x03, 0x02, 0xFE, 0x16, 0x0E, +/* 0000AFD0 */ 0x49, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x87, 0x04, 0xC1, 0xFF, 0xA6, 0x95, 0x02, 0x00, 0xFF, 0xA6, +/* 0000AFE0 */ 0x95, 0x02, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x03, 0x01, 0xFF, 0xA6, 0x95, 0x02, 0x00, 0xEE, 0xEE, +/* 0000AFF0 */ 0x07, 0x03, 0x07, 0x09, 0x1C, 0x1A, 0x05, 0x01, 0x05, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x08, +/* 0000B000 */ 0x74, 0x58, 0x05, 0x15, 0x05, 0x00, 0x03, 0x02, 0xA8, 0x07, 0x45, 0x03, 0x07, 0x15, 0x05, 0x00, +/* 0000B010 */ 0x04, 0x02, 0xA8, 0x07, 0x45, 0x04, 0x07, 0x8F, 0x02, 0x09, 0x08, 0x00, 0x00, 0x4A, 0x08, 0x6D, +/* 0000B020 */ 0x07, 0x08, 0x00, 0x07, 0x08, 0x00, 0x59, 0x00, 0x08, 0x5A, 0x01, 0x05, 0x00, 0x00, 0x8F, 0x01, +/* 0000B030 */ 0x02, 0x09, 0x01, 0x00, 0x5A, 0x02, 0x09, 0x00, 0x00, 0x8F, 0x01, 0x03, 0x09, 0x02, 0x00, 0x5A, +/* 0000B040 */ 0x03, 0x09, 0x00, 0x00, 0x8F, 0x01, 0x04, 0x09, 0x03, 0x00, 0x5A, 0x04, 0x09, 0x00, 0x00, 0x8F, +/* 0000B050 */ 0x01, 0x05, 0x09, 0x04, 0x00, 0x5A, 0x05, 0x09, 0x00, 0x00, 0x5A, 0x06, 0x03, 0x00, 0x00, 0x5A, +/* 0000B060 */ 0x07, 0x04, 0x00, 0x00, 0xF4, 0x08, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, +/* 0000B070 */ 0x00, 0xA8, 0x00, 0x24, 0x00, 0x5A, 0x00, 0xFF, 0xD2, 0x95, 0x02, 0x00, 0x04, 0x02, 0x00, 0x00, +/* 0000B080 */ 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0A, 0x00, 0x2B, 0x00, 0x5C, 0x00, 0x81, 0x00, 0x00, 0x7F, 0x5D, +/* 0000B090 */ 0x08, 0xC1, 0x03, 0x1A, 0x0B, 0x00, 0xFE, 0x0F, 0x0E, 0x0D, 0xA2, 0x41, 0xD1, 0x00, 0xBE, 0xFF, +/* 0000B0A0 */ 0xC1, 0x92, 0x02, 0x00, 0xFF, 0xC1, 0x92, 0x02, 0x00, 0x01, 0x40, 0xFE, 0x00, 0x90, 0x06, 0x06, +/* 0000B0B0 */ 0xFF, 0xC1, 0x92, 0x02, 0x00, 0xFE, 0x9F, 0x01, 0xFE, 0x9F, 0x01, 0x04, 0xFE, 0x06, 0x01, 0xFE, +/* 0000B0C0 */ 0x82, 0x04, 0xFE, 0x83, 0x04, 0xFE, 0x84, 0x04, 0x0C, 0x03, 0x0B, 0x08, 0x16, 0x16, 0x04, 0x02, +/* 0000B0D0 */ 0x03, 0x01, 0x01, 0x01, 0x01, 0x08, 0x09, 0x0A, 0x08, 0x58, 0x96, 0x02, 0x03, 0x96, 0x03, 0x04, +/* 0000B0E0 */ 0x96, 0x04, 0x05, 0x96, 0x05, 0x06, 0x8F, 0x04, 0x03, 0x0C, 0x00, 0x00, 0x6D, 0x0B, 0x0C, 0x00, +/* 0000B0F0 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x0C, 0x8F, 0x04, 0x23, 0x0D, 0x01, 0x00, 0x07, 0x03, 0x00, 0x59, +/* 0000B100 */ 0x00, 0x02, 0x93, 0x02, 0x0E, 0x02, 0x00, 0x5A, 0x01, 0x0E, 0x01, 0x00, 0xD6, 0x00, 0x0E, 0x5A, +/* 0000B110 */ 0x02, 0x0E, 0x01, 0x00, 0xF0, 0x03, 0x0D, 0x0D, 0x01, 0x00, 0x5A, 0x01, 0x0D, 0x00, 0x00, 0x5A, +/* 0000B120 */ 0x02, 0x07, 0x00, 0x00, 0xF4, 0x03, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0x00, +/* 0000B130 */ 0x24, 0x00, 0xFE, 0x04, 0x02, 0xFF, 0x14, 0x93, 0x02, 0x00, 0x02, 0x0C, 0x00, 0x00, 0x00, 0x4A, +/* 0000B140 */ 0x00, 0x4B, 0x01, 0x00, 0x48, 0xB1, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x83, 0x10, 0x03, 0x02, +/* 0000B150 */ 0xFE, 0x10, 0x0E, 0x49, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x86, 0x04, 0xBF, 0xFF, 0x4D, 0x93, 0x02, +/* 0000B160 */ 0x00, 0xFF, 0x4D, 0x93, 0x02, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x03, 0x01, 0xFF, 0x4D, 0x93, 0x02, +/* 0000B170 */ 0x00, 0xEE, 0xEE, 0x07, 0x03, 0x07, 0x09, 0x1C, 0x1A, 0x05, 0x01, 0x05, 0x01, 0x01, 0x01, 0x01, +/* 0000B180 */ 0x01, 0x06, 0x08, 0x74, 0x58, 0x05, 0x15, 0x05, 0x00, 0x03, 0x02, 0xA8, 0x07, 0x45, 0x03, 0x07, +/* 0000B190 */ 0x15, 0x05, 0x00, 0x04, 0x02, 0xA8, 0x07, 0x45, 0x04, 0x07, 0x8F, 0x02, 0x09, 0x08, 0x00, 0x00, +/* 0000B1A0 */ 0x4A, 0x08, 0x6D, 0x07, 0x08, 0x00, 0x07, 0x08, 0x00, 0x59, 0x00, 0x08, 0x5A, 0x01, 0x05, 0x00, +/* 0000B1B0 */ 0x00, 0x8F, 0x01, 0x02, 0x09, 0x01, 0x00, 0x5A, 0x02, 0x09, 0x00, 0x00, 0x8F, 0x01, 0x03, 0x09, +/* 0000B1C0 */ 0x02, 0x00, 0x5A, 0x03, 0x09, 0x00, 0x00, 0x8F, 0x01, 0x04, 0x09, 0x03, 0x00, 0x5A, 0x04, 0x09, +/* 0000B1D0 */ 0x00, 0x00, 0x8F, 0x01, 0x05, 0x09, 0x04, 0x00, 0x5A, 0x05, 0x09, 0x00, 0x00, 0x5A, 0x06, 0x03, +/* 0000B1E0 */ 0x00, 0x00, 0x5A, 0x07, 0x04, 0x00, 0x00, 0xF4, 0x08, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0000B1F0 */ 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x5A, 0x00, 0xFF, 0x79, 0x93, 0x02, 0x00, 0x04, +/* 0000B200 */ 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0A, 0x00, 0x2B, 0x00, 0x5C, 0x00, 0x81, 0x00, +/* 0000B210 */ 0x00, 0x7F, 0x5D, 0x08, 0xC1, 0x03, 0x1A, 0x0B, 0x00, 0xFE, 0x09, 0x0E, 0x0D, 0xA2, 0x41, 0xD1, +/* 0000B220 */ 0x00, 0xBC, 0xFF, 0x7A, 0x90, 0x02, 0x00, 0xFF, 0x7A, 0x90, 0x02, 0x00, 0x01, 0x40, 0xFE, 0x00, +/* 0000B230 */ 0x90, 0x06, 0x06, 0xFF, 0x7A, 0x90, 0x02, 0x00, 0xFE, 0x9B, 0x01, 0xFE, 0x9B, 0x01, 0x04, 0xFE, +/* 0000B240 */ 0x06, 0x01, 0xFE, 0x82, 0x04, 0xFE, 0x83, 0x04, 0xFE, 0x84, 0x04, 0x0C, 0x03, 0x0B, 0x08, 0x16, +/* 0000B250 */ 0x16, 0x04, 0x02, 0x03, 0x01, 0x01, 0x01, 0x01, 0x08, 0x09, 0x0A, 0x08, 0x58, 0x96, 0x02, 0x03, +/* 0000B260 */ 0x96, 0x03, 0x04, 0x96, 0x04, 0x05, 0x96, 0x05, 0x06, 0x8F, 0x04, 0x03, 0x0C, 0x00, 0x00, 0x6D, +/* 0000B270 */ 0x0B, 0x0C, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0C, 0x8F, 0x04, 0x23, 0x0D, 0x01, 0x00, 0x07, +/* 0000B280 */ 0x03, 0x00, 0x59, 0x00, 0x02, 0x93, 0x02, 0x0E, 0x02, 0x00, 0x5A, 0x01, 0x0E, 0x01, 0x00, 0xD6, +/* 0000B290 */ 0x00, 0x0E, 0x5A, 0x02, 0x0E, 0x01, 0x00, 0xF0, 0x03, 0x0D, 0x0D, 0x01, 0x00, 0x5A, 0x01, 0x0D, +/* 0000B2A0 */ 0x00, 0x00, 0x5A, 0x02, 0x07, 0x00, 0x00, 0xF4, 0x03, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0000B2B0 */ 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x04, 0x02, 0xFF, 0xCD, 0x90, 0x02, 0x00, 0x02, 0x0C, 0x00, +/* 0000B2C0 */ 0x00, 0x00, 0x4A, 0x00, 0x47, 0x01, 0x00, 0xCB, 0xB2, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x83, +/* 0000B2D0 */ 0x10, 0x03, 0x02, 0xFE, 0x0A, 0x0E, 0x49, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x85, 0x04, 0xBD, 0xFF, +/* 0000B2E0 */ 0x06, 0x91, 0x02, 0x00, 0xFF, 0x06, 0x91, 0x02, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x03, 0x01, 0xFF, +/* 0000B2F0 */ 0x06, 0x91, 0x02, 0x00, 0xEA, 0xEA, 0x07, 0x03, 0x07, 0x09, 0x1C, 0x1A, 0x05, 0x01, 0x05, 0x01, +/* 0000B300 */ 0x01, 0x01, 0x01, 0x01, 0x06, 0x08, 0x74, 0x58, 0x05, 0x15, 0x05, 0x00, 0x03, 0x02, 0xA8, 0x07, +/* 0000B310 */ 0x45, 0x03, 0x07, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA8, 0x07, 0x45, 0x04, 0x07, 0x8F, 0x02, 0x09, +/* 0000B320 */ 0x08, 0x00, 0x00, 0x4A, 0x08, 0x6D, 0x07, 0x08, 0x00, 0x07, 0x08, 0x00, 0x59, 0x00, 0x08, 0x5A, +/* 0000B330 */ 0x01, 0x05, 0x00, 0x00, 0x8F, 0x01, 0x02, 0x09, 0x01, 0x00, 0x5A, 0x02, 0x09, 0x00, 0x00, 0x8F, +/* 0000B340 */ 0x01, 0x03, 0x09, 0x02, 0x00, 0x5A, 0x03, 0x09, 0x00, 0x00, 0x8F, 0x01, 0x04, 0x09, 0x03, 0x00, +/* 0000B350 */ 0x5A, 0x04, 0x09, 0x00, 0x00, 0x8F, 0x01, 0x05, 0x09, 0x04, 0x00, 0x5A, 0x05, 0x09, 0x00, 0x00, +/* 0000B360 */ 0x5A, 0x06, 0x03, 0x00, 0x00, 0x5A, 0x07, 0x04, 0x00, 0x00, 0xF4, 0x08, 0x00, 0x07, 0x00, 0x00, +/* 0000B370 */ 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x5A, 0x00, 0xFF, 0x2E, 0x91, +/* 0000B380 */ 0x02, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0A, 0x00, 0x2B, 0x00, 0x5C, +/* 0000B390 */ 0x00, 0x81, 0x00, 0x00, 0x7F, 0x5C, 0x0E, 0xC1, 0x07, 0x10, 0x03, 0x00, 0xFE, 0xD2, 0x0D, 0x0C, +/* 0000B3A0 */ 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x26, 0x04, 0xBB, 0xFF, 0x3B, 0x81, 0x02, 0x00, 0xFF, 0x3B, 0x81, +/* 0000B3B0 */ 0x02, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x07, 0x07, 0xFF, 0x3B, 0x81, 0x02, 0x00, 0xFE, 0x74, 0x06, +/* 0000B3C0 */ 0xFE, 0x74, 0x06, 0x0F, 0x07, 0x11, 0x0A, 0x89, 0x83, 0x04, 0x02, 0x01, 0x0E, 0x0C, 0x04, 0x04, +/* 0000B3D0 */ 0x04, 0x04, 0x01, 0x10, 0x06, 0xFE, 0x94, 0x03, 0x06, 0xFE, 0x2E, 0x04, 0x08, 0x05, 0xFE, 0x81, +/* 0000B3E0 */ 0x04, 0x07, 0xFE, 0x48, 0x02, 0x58, 0x0D, 0x4E, 0x0E, 0x4E, 0x0F, 0x2A, 0x11, 0x0D, 0x15, 0x0F, +/* 0000B3F0 */ 0x00, 0x11, 0x02, 0x8F, 0x04, 0x0D, 0x11, 0x00, 0x00, 0xE3, 0x11, 0x0D, 0x11, 0x00, 0x0F, 0x24, +/* 0000B400 */ 0x00, 0x11, 0x8F, 0x04, 0x03, 0x12, 0x01, 0x00, 0x6D, 0x11, 0x12, 0x00, 0x07, 0x03, 0x00, 0x59, +/* 0000B410 */ 0x00, 0x12, 0x5A, 0x01, 0x07, 0x00, 0x00, 0x5A, 0x02, 0x03, 0x00, 0x00, 0xF4, 0x03, 0xFF, 0x11, +/* 0000B420 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x04, 0x06, 0x11, 0x02, 0x00, 0x07, 0x03, 0x00, 0x59, +/* 0000B430 */ 0x00, 0x04, 0x8F, 0x04, 0x1B, 0x12, 0x03, 0x00, 0x5A, 0x01, 0x12, 0x01, 0x00, 0x8F, 0x04, 0x0D, +/* 0000B440 */ 0x12, 0x00, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x01, 0x0D, 0x02, 0x00, 0xC5, 0x02, 0x12, 0x12, 0x02, +/* 0000B450 */ 0x00, 0x5A, 0x02, 0x12, 0x01, 0x00, 0xF0, 0x03, 0x11, 0x11, 0x01, 0x00, 0x45, 0x0E, 0x11, 0x8F, +/* 0000B460 */ 0x04, 0x21, 0x11, 0x04, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x0E, 0x03, 0x00, +/* 0000B470 */ 0xF0, 0x02, 0x11, 0x11, 0x03, 0x00, 0x0F, 0x1B, 0x00, 0x11, 0x8F, 0x04, 0x20, 0x11, 0x05, 0x00, +/* 0000B480 */ 0x07, 0x02, 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x0E, 0x04, 0x00, 0xF0, 0x02, 0x11, 0x11, 0x04, +/* 0000B490 */ 0x00, 0x0F, 0x06, 0x00, 0x11, 0x45, 0x00, 0x05, 0x09, 0x90, 0x01, 0xA8, 0x11, 0x45, 0x0F, 0x11, +/* 0000B4A0 */ 0x8F, 0x04, 0x03, 0x11, 0x01, 0x00, 0x5F, 0x11, 0x11, 0x01, 0x0E, 0xB3, 0x00, 0x11, 0xA8, 0x11, +/* 0000B4B0 */ 0x14, 0x03, 0x00, 0x0B, 0x11, 0x09, 0xA9, 0x00, 0xA8, 0x11, 0x14, 0x03, 0x00, 0x0C, 0x11, 0x09, +/* 0000B4C0 */ 0x9F, 0x00, 0x8F, 0x01, 0x0A, 0x11, 0x06, 0x00, 0x4A, 0x11, 0x98, 0x11, 0x11, 0x0A, 0x00, 0x00, +/* 0000B4D0 */ 0x0E, 0x14, 0x00, 0x11, 0x8F, 0x01, 0x0A, 0x11, 0x06, 0x00, 0x4A, 0x11, 0x98, 0x11, 0x11, 0x0A, +/* 0000B4E0 */ 0x01, 0x00, 0x45, 0x0F, 0x11, 0x09, 0x79, 0x00, 0x8F, 0x04, 0x04, 0x11, 0x07, 0x00, 0x07, 0x03, +/* 0000B4F0 */ 0x00, 0x59, 0x00, 0x04, 0xCD, 0x12, 0x5A, 0x01, 0x12, 0x05, 0x00, 0x5A, 0x02, 0x06, 0x05, 0x00, +/* 0000B500 */ 0xF0, 0x03, 0x11, 0x11, 0x05, 0x00, 0x45, 0x0F, 0x11, 0x8F, 0x01, 0x08, 0x11, 0x08, 0x00, 0x4A, +/* 0000B510 */ 0x11, 0x07, 0x04, 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x0F, 0x06, 0x00, 0xA8, 0x12, 0x5A, 0x02, +/* 0000B520 */ 0x12, 0x06, 0x00, 0x8F, 0x01, 0x02, 0x12, 0x09, 0x00, 0x4A, 0x12, 0x07, 0x04, 0x00, 0x59, 0x00, +/* 0000B530 */ 0x04, 0xA8, 0x13, 0x5A, 0x01, 0x13, 0x07, 0x00, 0x5A, 0x02, 0x08, 0x07, 0x00, 0x5A, 0x03, 0x09, +/* 0000B540 */ 0x07, 0x00, 0xF0, 0x04, 0x12, 0x12, 0x07, 0x00, 0x5A, 0x03, 0x12, 0x06, 0x00, 0xF0, 0x04, 0xFF, +/* 0000B550 */ 0x11, 0x06, 0x00, 0x8F, 0x01, 0x0A, 0x11, 0x06, 0x00, 0x4A, 0x11, 0x9D, 0x0F, 0x11, 0x0A, 0x00, +/* 0000B560 */ 0x00, 0x0F, 0x67, 0x00, 0x0F, 0x8F, 0x04, 0x04, 0x11, 0x07, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 0000B570 */ 0x04, 0xCD, 0x12, 0x5A, 0x01, 0x12, 0x08, 0x00, 0x5A, 0x02, 0x06, 0x08, 0x00, 0xF0, 0x03, 0x11, +/* 0000B580 */ 0x11, 0x08, 0x00, 0x45, 0x0F, 0x11, 0x8F, 0x01, 0x08, 0x11, 0x08, 0x00, 0x4A, 0x11, 0x07, 0x04, +/* 0000B590 */ 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x0F, 0x09, 0x00, 0x5A, 0x02, 0x0B, 0x09, 0x00, 0x8F, 0x01, +/* 0000B5A0 */ 0x02, 0x12, 0x09, 0x00, 0x4A, 0x12, 0x07, 0x04, 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x0C, 0x0A, +/* 0000B5B0 */ 0x00, 0x5A, 0x02, 0x08, 0x0A, 0x00, 0x5A, 0x03, 0x09, 0x0A, 0x00, 0xF0, 0x04, 0x12, 0x12, 0x0A, +/* 0000B5C0 */ 0x00, 0x5A, 0x03, 0x12, 0x09, 0x00, 0xF0, 0x04, 0xFF, 0x11, 0x09, 0x00, 0x8F, 0x04, 0x0C, 0x11, +/* 0000B5D0 */ 0x0A, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x04, 0x8F, 0x04, 0x03, 0x13, 0x01, 0x00, 0x6D, 0x12, +/* 0000B5E0 */ 0x13, 0x02, 0x07, 0x03, 0x00, 0x59, 0x00, 0x13, 0x8F, 0x04, 0x24, 0x15, 0x0B, 0x00, 0x6D, 0x14, +/* 0000B5F0 */ 0x15, 0x03, 0x07, 0x02, 0x00, 0x59, 0x00, 0x15, 0x5A, 0x01, 0x0D, 0x0D, 0x00, 0xF4, 0x02, 0x14, +/* 0000B600 */ 0x14, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x5A, 0x01, 0x14, 0x0C, 0x00, 0x5A, 0x02, 0x0F, 0x0C, +/* 0000B610 */ 0x00, 0xF4, 0x03, 0x12, 0x12, 0x02, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x5A, 0x01, 0x12, 0x0B, 0x00, +/* 0000B620 */ 0xF0, 0x02, 0x00, 0x11, 0x0B, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB6, 0x02, +/* 0000B630 */ 0xFE, 0x4D, 0x03, 0xFE, 0xFC, 0x01, 0xFE, 0x23, 0x03, 0xFF, 0xB4, 0x81, 0x02, 0x00, 0x11, 0x06, +/* 0000B640 */ 0x00, 0x00, 0x00, 0x17, 0x00, 0x4F, 0x00, 0x24, 0x00, 0x50, 0x00, 0x39, 0x00, 0x53, 0x00, 0x36, +/* 0000B650 */ 0x00, 0x3C, 0x00, 0x06, 0x00, 0x3A, 0x00, 0x05, 0x00, 0x2D, 0x00, 0x22, 0x00, 0xCE, 0x00, 0x12, +/* 0000B660 */ 0x00, 0x84, 0x00, 0x14, 0x00, 0xA2, 0x00, 0x21, 0x00, 0x3E, 0x00, 0x4A, 0x00, 0x7A, 0x00, 0x0E, +/* 0000B670 */ 0x00, 0x7C, 0x00, 0x04, 0x00, 0x28, 0x00, 0x21, 0x00, 0x3A, 0x00, 0x46, 0x00, 0x81, 0x00, 0x5F, +/* 0000B680 */ 0x00, 0x5A, 0x00, 0x00, 0x7F, 0x5C, 0x1A, 0xC1, 0x53, 0x50, 0x43, 0x00, 0xFE, 0x45, 0x0D, 0x0C, +/* 0000B690 */ 0xB3, 0x41, 0xC1, 0x00, 0xFE, 0x29, 0x04, 0xBA, 0xFF, 0x24, 0x64, 0x02, 0x00, 0xFF, 0x24, 0x64, +/* 0000B6A0 */ 0x02, 0x00, 0x45, 0xFE, 0x00, 0x90, 0x04, 0x04, 0xFF, 0x24, 0x64, 0x02, 0x00, 0xFE, 0x7E, 0x1B, +/* 0000B6B0 */ 0xFE, 0x7E, 0x1B, 0x1C, 0x29, 0x41, 0x07, 0xFE, 0xB3, 0x01, 0xFE, 0x96, 0x01, 0x04, 0x01, 0x22, +/* 0000B6C0 */ 0x0C, 0x0F, 0x2D, 0x2D, 0x2D, 0x2D, 0x01, 0x01, 0x40, 0x41, 0x06, 0xFE, 0x94, 0x03, 0x06, 0xFE, +/* 0000B6D0 */ 0xBA, 0x04, 0x08, 0x06, 0xFE, 0x30, 0x03, 0x0B, 0x06, 0xFE, 0x3F, 0x04, 0x06, 0xFE, 0x42, 0x04, +/* 0000B6E0 */ 0x06, 0xFE, 0xE0, 0x03, 0x06, 0xFE, 0xA3, 0x03, 0x05, 0xFE, 0x9C, 0x03, 0x05, 0xFE, 0xDF, 0x03, +/* 0000B6F0 */ 0x06, 0xFE, 0x77, 0x04, 0x06, 0xFE, 0x33, 0x04, 0x06, 0xFE, 0x2F, 0x04, 0x06, 0xFE, 0x30, 0x04, +/* 0000B700 */ 0x06, 0xFE, 0x31, 0x04, 0x06, 0xFE, 0x34, 0x04, 0x06, 0xFE, 0x35, 0x04, 0x06, 0xFE, 0x32, 0x04, +/* 0000B710 */ 0x06, 0xFE, 0xF8, 0x03, 0x06, 0xFE, 0x36, 0x04, 0x06, 0xFE, 0x37, 0x04, 0x06, 0xFE, 0x38, 0x04, +/* 0000B720 */ 0x06, 0xFE, 0x39, 0x04, 0x06, 0xFE, 0x3A, 0x04, 0x06, 0xFE, 0x3B, 0x04, 0x06, 0xFE, 0x55, 0x04, +/* 0000B730 */ 0x06, 0xFE, 0xA2, 0x03, 0x05, 0xFE, 0x7C, 0x04, 0x05, 0xFE, 0x7D, 0x04, 0x05, 0xFE, 0x00, 0x05, +/* 0000B740 */ 0x05, 0xFE, 0x01, 0x05, 0x07, 0x06, 0xFE, 0x17, 0x04, 0x06, 0xFE, 0x74, 0x04, 0x0C, 0x05, 0xFE, +/* 0000B750 */ 0x02, 0x05, 0x06, 0xFE, 0x40, 0x04, 0x01, 0x00, 0xFE, 0x0C, 0x07, 0xA8, 0x3F, 0x2A, 0x42, 0x29, +/* 0000B760 */ 0x0D, 0x03, 0x00, 0x42, 0x02, 0x09, 0x1A, 0x00, 0x8F, 0x04, 0x03, 0x43, 0x00, 0x00, 0x6D, 0x42, +/* 0000B770 */ 0x43, 0x00, 0x07, 0x01, 0x00, 0x59, 0x00, 0x43, 0xF4, 0x01, 0xFF, 0x42, 0x00, 0x00, 0x00, 0x00, +/* 0000B780 */ 0x00, 0x00, 0x8F, 0x04, 0x06, 0x42, 0x01, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x04, 0x8F, 0x04, +/* 0000B790 */ 0x14, 0x43, 0x02, 0x00, 0x5A, 0x01, 0x43, 0x01, 0x00, 0x5A, 0x02, 0x29, 0x01, 0x00, 0x5A, 0x03, +/* 0000B7A0 */ 0x03, 0x01, 0x00, 0xF0, 0x04, 0x42, 0x42, 0x01, 0x00, 0x0E, 0x2C, 0x00, 0x42, 0x5F, 0x42, 0x29, +/* 0000B7B0 */ 0x01, 0x0E, 0x24, 0x00, 0x42, 0x8F, 0x04, 0x03, 0x43, 0x00, 0x00, 0x6D, 0x42, 0x43, 0x02, 0x07, +/* 0000B7C0 */ 0x03, 0x00, 0x59, 0x00, 0x43, 0x5A, 0x01, 0x05, 0x02, 0x00, 0x5A, 0x02, 0x05, 0x02, 0x00, 0xF4, +/* 0000B7D0 */ 0x03, 0xFF, 0x42, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x77, 0x06, 0x29, 0x03, 0x8F, 0x01, 0x02, +/* 0000B7E0 */ 0x42, 0x03, 0x00, 0x4A, 0x42, 0x07, 0x04, 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x2B, 0x03, 0x00, +/* 0000B7F0 */ 0x5A, 0x02, 0x07, 0x03, 0x00, 0x5A, 0x03, 0x08, 0x03, 0x00, 0xF0, 0x04, 0x42, 0x42, 0x03, 0x00, +/* 0000B800 */ 0x45, 0x2B, 0x42, 0x8F, 0x03, 0x02, 0x42, 0x04, 0x00, 0x4A, 0x42, 0x07, 0x06, 0x00, 0x59, 0x00, +/* 0000B810 */ 0x04, 0x5A, 0x01, 0x2B, 0x04, 0x00, 0x5A, 0x02, 0x09, 0x04, 0x00, 0x5A, 0x03, 0x0A, 0x04, 0x00, +/* 0000B820 */ 0xD0, 0x43, 0x02, 0x00, 0x00, 0xA1, 0x00, 0x0B, 0x43, 0xA1, 0x01, 0x0C, 0x43, 0x5A, 0x04, 0x43, +/* 0000B830 */ 0x04, 0x00, 0x5A, 0x05, 0x0C, 0x04, 0x00, 0xF0, 0x06, 0x42, 0x42, 0x04, 0x00, 0x45, 0x2E, 0x42, +/* 0000B840 */ 0x8F, 0x03, 0x02, 0x42, 0x04, 0x00, 0x4A, 0x42, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, +/* 0000B850 */ 0x2B, 0x05, 0x00, 0x5A, 0x02, 0x0D, 0x05, 0x00, 0x5A, 0x03, 0x0A, 0x05, 0x00, 0xA8, 0x43, 0x5A, +/* 0000B860 */ 0x04, 0x43, 0x05, 0x00, 0xA8, 0x43, 0x5A, 0x05, 0x43, 0x05, 0x00, 0xF0, 0x06, 0x42, 0x42, 0x05, +/* 0000B870 */ 0x00, 0x45, 0x2F, 0x42, 0xA8, 0x42, 0x15, 0x03, 0x00, 0x2F, 0x42, 0x09, 0x25, 0x00, 0x8F, 0x04, +/* 0000B880 */ 0x03, 0x43, 0x00, 0x00, 0x6D, 0x42, 0x43, 0x04, 0x07, 0x02, 0x00, 0x59, 0x00, 0x43, 0x5A, 0x01, +/* 0000B890 */ 0x2F, 0x06, 0x00, 0xF4, 0x02, 0x42, 0x42, 0x04, 0x00, 0x00, 0x00, 0x06, 0x00, 0x45, 0x2F, 0x42, +/* 0000B8A0 */ 0x09, 0x1D, 0x00, 0x8F, 0x04, 0x03, 0x43, 0x00, 0x00, 0x6D, 0x42, 0x43, 0x05, 0x07, 0x01, 0x00, +/* 0000B8B0 */ 0x59, 0x00, 0x43, 0xF4, 0x01, 0x42, 0x42, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x45, 0x2F, 0x42, +/* 0000B8C0 */ 0xA8, 0x42, 0x14, 0x03, 0x00, 0x2F, 0x42, 0x09, 0x1A, 0x00, 0x8F, 0x04, 0x03, 0x43, 0x00, 0x00, +/* 0000B8D0 */ 0x6D, 0x42, 0x43, 0x06, 0x07, 0x01, 0x00, 0x59, 0x00, 0x43, 0xF4, 0x01, 0xFF, 0x42, 0x06, 0x00, +/* 0000B8E0 */ 0x00, 0x00, 0x08, 0x00, 0x8F, 0x03, 0x02, 0x42, 0x04, 0x00, 0x4A, 0x42, 0x07, 0x06, 0x00, 0x59, +/* 0000B8F0 */ 0x00, 0x04, 0x5A, 0x01, 0x2B, 0x09, 0x00, 0x5A, 0x02, 0x0E, 0x09, 0x00, 0x5A, 0x03, 0x0A, 0x09, +/* 0000B900 */ 0x00, 0xD0, 0x43, 0x03, 0x01, 0x00, 0xA1, 0x00, 0x0F, 0x43, 0xA1, 0x01, 0x10, 0x43, 0xA1, 0x02, +/* 0000B910 */ 0x11, 0x43, 0x5A, 0x04, 0x43, 0x09, 0x00, 0xA8, 0x43, 0x5A, 0x05, 0x43, 0x09, 0x00, 0xF0, 0x06, +/* 0000B920 */ 0x42, 0x42, 0x09, 0x00, 0x45, 0x30, 0x42, 0x8F, 0x03, 0x02, 0x42, 0x04, 0x00, 0x4A, 0x42, 0x07, +/* 0000B930 */ 0x06, 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x2B, 0x0A, 0x00, 0x5A, 0x02, 0x12, 0x0A, 0x00, 0x5A, +/* 0000B940 */ 0x03, 0x0A, 0x0A, 0x00, 0xD0, 0x43, 0x03, 0x02, 0x00, 0xA1, 0x00, 0x0F, 0x43, 0xA1, 0x01, 0x10, +/* 0000B950 */ 0x43, 0xA1, 0x02, 0x11, 0x43, 0x5A, 0x04, 0x43, 0x0A, 0x00, 0xA8, 0x43, 0x5A, 0x05, 0x43, 0x0A, +/* 0000B960 */ 0x00, 0xF0, 0x06, 0x42, 0x42, 0x0A, 0x00, 0x45, 0x31, 0x42, 0x8F, 0x03, 0x02, 0x42, 0x04, 0x00, +/* 0000B970 */ 0x4A, 0x42, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x2B, 0x0B, 0x00, 0x5A, 0x02, 0x13, +/* 0000B980 */ 0x0B, 0x00, 0x5A, 0x03, 0x0A, 0x0B, 0x00, 0xD0, 0x43, 0x02, 0x03, 0x00, 0xA1, 0x00, 0x14, 0x43, +/* 0000B990 */ 0xA1, 0x01, 0x15, 0x43, 0x5A, 0x04, 0x43, 0x0B, 0x00, 0xA8, 0x43, 0x5A, 0x05, 0x43, 0x0B, 0x00, +/* 0000B9A0 */ 0xF0, 0x06, 0x42, 0x42, 0x0B, 0x00, 0x45, 0x32, 0x42, 0x8F, 0x03, 0x02, 0x42, 0x04, 0x00, 0x4A, +/* 0000B9B0 */ 0x42, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x2B, 0x0C, 0x00, 0x5A, 0x02, 0x16, 0x0C, +/* 0000B9C0 */ 0x00, 0x5A, 0x03, 0x0A, 0x0C, 0x00, 0xD0, 0x43, 0x05, 0x04, 0x00, 0xA1, 0x00, 0x14, 0x43, 0xA1, +/* 0000B9D0 */ 0x01, 0x15, 0x43, 0xA1, 0x02, 0x0F, 0x43, 0xA1, 0x03, 0x10, 0x43, 0xA1, 0x04, 0x11, 0x43, 0x5A, +/* 0000B9E0 */ 0x04, 0x43, 0x0C, 0x00, 0xA8, 0x43, 0x5A, 0x05, 0x43, 0x0C, 0x00, 0xF0, 0x06, 0x42, 0x42, 0x0C, +/* 0000B9F0 */ 0x00, 0x45, 0x33, 0x42, 0x8F, 0x03, 0x02, 0x42, 0x04, 0x00, 0x4A, 0x42, 0x07, 0x06, 0x00, 0x59, +/* 0000BA00 */ 0x00, 0x04, 0x5A, 0x01, 0x2B, 0x0D, 0x00, 0x5A, 0x02, 0x17, 0x0D, 0x00, 0x5A, 0x03, 0x0A, 0x0D, +/* 0000BA10 */ 0x00, 0xD0, 0x43, 0x02, 0x05, 0x00, 0xA1, 0x00, 0x14, 0x43, 0xA1, 0x01, 0x15, 0x43, 0x5A, 0x04, +/* 0000BA20 */ 0x43, 0x0D, 0x00, 0xA8, 0x43, 0x5A, 0x05, 0x43, 0x0D, 0x00, 0xF0, 0x06, 0x42, 0x42, 0x0D, 0x00, +/* 0000BA30 */ 0x45, 0x34, 0x42, 0x8F, 0x03, 0x02, 0x42, 0x04, 0x00, 0x4A, 0x42, 0x07, 0x06, 0x00, 0x59, 0x00, +/* 0000BA40 */ 0x04, 0x5A, 0x01, 0x2B, 0x0E, 0x00, 0x5A, 0x02, 0x18, 0x0E, 0x00, 0x5A, 0x03, 0x0A, 0x0E, 0x00, +/* 0000BA50 */ 0xD0, 0x43, 0x02, 0x06, 0x00, 0xA1, 0x00, 0x14, 0x43, 0xA1, 0x01, 0x15, 0x43, 0x5A, 0x04, 0x43, +/* 0000BA60 */ 0x0E, 0x00, 0xA8, 0x43, 0x5A, 0x05, 0x43, 0x0E, 0x00, 0xF0, 0x06, 0x42, 0x42, 0x0E, 0x00, 0x45, +/* 0000BA70 */ 0x35, 0x42, 0x8F, 0x03, 0x02, 0x42, 0x04, 0x00, 0x4A, 0x42, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, +/* 0000BA80 */ 0x5A, 0x01, 0x2B, 0x0F, 0x00, 0x5A, 0x02, 0x19, 0x0F, 0x00, 0x5A, 0x03, 0x0A, 0x0F, 0x00, 0xD0, +/* 0000BA90 */ 0x43, 0x02, 0x07, 0x00, 0xA1, 0x00, 0x14, 0x43, 0xA1, 0x01, 0x15, 0x43, 0x5A, 0x04, 0x43, 0x0F, +/* 0000BAA0 */ 0x00, 0xA8, 0x43, 0x5A, 0x05, 0x43, 0x0F, 0x00, 0xF0, 0x06, 0x42, 0x42, 0x0F, 0x00, 0x45, 0x36, +/* 0000BAB0 */ 0x42, 0x8F, 0x03, 0x02, 0x42, 0x04, 0x00, 0x4A, 0x42, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, 0x5A, +/* 0000BAC0 */ 0x01, 0x2B, 0x10, 0x00, 0x5A, 0x02, 0x1A, 0x10, 0x00, 0x5A, 0x03, 0x0A, 0x10, 0x00, 0xD0, 0x43, +/* 0000BAD0 */ 0x02, 0x08, 0x00, 0xA1, 0x00, 0x14, 0x43, 0xA1, 0x01, 0x15, 0x43, 0x5A, 0x04, 0x43, 0x10, 0x00, +/* 0000BAE0 */ 0xA8, 0x43, 0x5A, 0x05, 0x43, 0x10, 0x00, 0xF0, 0x06, 0x42, 0x42, 0x10, 0x00, 0x45, 0x37, 0x42, +/* 0000BAF0 */ 0x8F, 0x03, 0x02, 0x42, 0x04, 0x00, 0x4A, 0x42, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, +/* 0000BB00 */ 0x2B, 0x11, 0x00, 0x5A, 0x02, 0x1B, 0x11, 0x00, 0x5A, 0x03, 0x0A, 0x11, 0x00, 0xD0, 0x43, 0x02, +/* 0000BB10 */ 0x09, 0x00, 0xA1, 0x00, 0x10, 0x43, 0xA1, 0x01, 0x11, 0x43, 0x5A, 0x04, 0x43, 0x11, 0x00, 0xA8, +/* 0000BB20 */ 0x43, 0x5A, 0x05, 0x43, 0x11, 0x00, 0xF0, 0x06, 0x42, 0x42, 0x11, 0x00, 0x45, 0x38, 0x42, 0x0E, +/* 0000BB30 */ 0x37, 0x00, 0x35, 0x8F, 0x03, 0x02, 0x43, 0x04, 0x00, 0x4A, 0x43, 0x07, 0x06, 0x00, 0x59, 0x00, +/* 0000BB40 */ 0x04, 0x5A, 0x01, 0x2B, 0x12, 0x00, 0x5A, 0x02, 0x1C, 0x12, 0x00, 0x5A, 0x03, 0x1D, 0x12, 0x00, +/* 0000BB50 */ 0xA8, 0x44, 0x5A, 0x04, 0x44, 0x12, 0x00, 0xA8, 0x44, 0x5A, 0x05, 0x44, 0x12, 0x00, 0xF0, 0x06, +/* 0000BB60 */ 0x43, 0x43, 0x12, 0x00, 0x45, 0x42, 0x43, 0x09, 0x05, 0x00, 0xA8, 0x43, 0x46, 0x42, 0x43, 0x45, +/* 0000BB70 */ 0x39, 0x42, 0x8F, 0x03, 0x02, 0x42, 0x04, 0x00, 0x4A, 0x42, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, +/* 0000BB80 */ 0x5A, 0x01, 0x2B, 0x13, 0x00, 0x5A, 0x02, 0x1E, 0x13, 0x00, 0x5A, 0x03, 0x0A, 0x13, 0x00, 0xD0, +/* 0000BB90 */ 0x43, 0x02, 0x0A, 0x00, 0xA1, 0x00, 0x1F, 0x43, 0xA1, 0x01, 0x0C, 0x43, 0x5A, 0x04, 0x43, 0x13, +/* 0000BBA0 */ 0x00, 0x5A, 0x05, 0x0C, 0x13, 0x00, 0xF0, 0x06, 0x42, 0x42, 0x13, 0x00, 0x45, 0x3A, 0x42, 0xA8, +/* 0000BBB0 */ 0x42, 0x15, 0x03, 0x00, 0x39, 0x42, 0x09, 0x13, 0x00, 0x0E, 0x06, 0x00, 0x39, 0x45, 0x43, 0x20, +/* 0000BBC0 */ 0x09, 0x03, 0x00, 0x46, 0x43, 0x21, 0x45, 0x42, 0x43, 0x09, 0x05, 0x00, 0xA8, 0x43, 0x46, 0x42, +/* 0000BBD0 */ 0x43, 0x45, 0x3B, 0x42, 0x8F, 0x01, 0x03, 0x42, 0x05, 0x00, 0x4A, 0x42, 0x07, 0x02, 0x00, 0x59, +/* 0000BBE0 */ 0x00, 0x04, 0x8F, 0x04, 0x04, 0x43, 0x06, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x04, 0xCE, 0x00, +/* 0000BBF0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x7B, 0x30, 0x44, 0x07, 0x7B, +/* 0000BC00 */ 0x31, 0x44, 0x08, 0x7B, 0x32, 0x44, 0x09, 0x7B, 0x33, 0x44, 0x0A, 0x7B, 0x34, 0x44, 0x0B, 0x7B, +/* 0000BC10 */ 0x35, 0x44, 0x0C, 0x7B, 0x36, 0x44, 0x0D, 0x7B, 0x37, 0x44, 0x0E, 0x7B, 0x38, 0x44, 0x0F, 0x5A, +/* 0000BC20 */ 0x01, 0x44, 0x15, 0x00, 0x5A, 0x02, 0x22, 0x15, 0x00, 0xF0, 0x03, 0x43, 0x43, 0x15, 0x00, 0x5A, +/* 0000BC30 */ 0x01, 0x43, 0x14, 0x00, 0xF0, 0x02, 0x42, 0x42, 0x14, 0x00, 0x45, 0x3C, 0x42, 0x8F, 0x03, 0x07, +/* 0000BC40 */ 0x42, 0x07, 0x00, 0x4A, 0x42, 0x07, 0x02, 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x2A, 0x16, 0x00, +/* 0000BC50 */ 0xF0, 0x02, 0x42, 0x42, 0x16, 0x00, 0x45, 0x2A, 0x42, 0x8F, 0x04, 0x2A, 0x42, 0x08, 0x00, 0x07, +/* 0000BC60 */ 0x05, 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x2A, 0x17, 0x00, 0x5A, 0x02, 0x2E, 0x17, 0x00, 0xD0, +/* 0000BC70 */ 0x43, 0x02, 0x0B, 0x00, 0xA1, 0x00, 0x23, 0x43, 0xA1, 0x01, 0x24, 0x43, 0x5A, 0x03, 0x43, 0x17, +/* 0000BC80 */ 0x00, 0x8F, 0x04, 0x2B, 0x43, 0x09, 0x00, 0x5A, 0x04, 0x43, 0x17, 0x00, 0xF0, 0x05, 0x42, 0x42, +/* 0000BC90 */ 0x17, 0x00, 0x45, 0x3D, 0x42, 0x77, 0x2E, 0x29, 0x10, 0x77, 0x2F, 0x29, 0x11, 0x5F, 0x42, 0x3D, +/* 0000BCA0 */ 0x12, 0x77, 0x42, 0x29, 0x13, 0x77, 0x30, 0x29, 0x14, 0x77, 0x31, 0x29, 0x15, 0x77, 0x32, 0x29, +/* 0000BCB0 */ 0x16, 0x77, 0x33, 0x29, 0x17, 0x77, 0x34, 0x29, 0x18, 0x77, 0x35, 0x29, 0x19, 0x77, 0x36, 0x29, +/* 0000BCC0 */ 0x1A, 0x77, 0x37, 0x29, 0x1B, 0x77, 0x38, 0x29, 0x1C, 0x77, 0x39, 0x29, 0x1D, 0x77, 0x3A, 0x29, +/* 0000BCD0 */ 0x1E, 0x77, 0x3B, 0x29, 0x1F, 0x77, 0x3C, 0x29, 0x20, 0x45, 0x3E, 0x25, 0xE7, 0x22, 0x00, 0x8F, +/* 0000BCE0 */ 0x03, 0x0B, 0x42, 0x0A, 0x00, 0x4A, 0x42, 0x07, 0x03, 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x29, +/* 0000BCF0 */ 0x18, 0x00, 0x5A, 0x02, 0x25, 0x18, 0x00, 0xF0, 0x03, 0xFF, 0x42, 0x18, 0x00, 0xEB, 0x09, 0x69, +/* 0000BD00 */ 0x00, 0xE9, 0x2C, 0x06, 0x8F, 0x04, 0x22, 0x42, 0x0B, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x04, +/* 0000BD10 */ 0x5A, 0x01, 0x2C, 0x19, 0x00, 0xF0, 0x02, 0xFF, 0x42, 0x19, 0x00, 0x8F, 0x01, 0x02, 0x42, 0x03, +/* 0000BD20 */ 0x00, 0x4A, 0x42, 0x07, 0x04, 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x2B, 0x1A, 0x00, 0x5A, 0x02, +/* 0000BD30 */ 0x26, 0x1A, 0x00, 0x5A, 0x03, 0x27, 0x1A, 0x00, 0xF0, 0x04, 0x42, 0x42, 0x1A, 0x00, 0x45, 0x3F, +/* 0000BD40 */ 0x42, 0x45, 0x42, 0x29, 0x8F, 0x01, 0x03, 0x43, 0x05, 0x00, 0x4A, 0x43, 0x07, 0x03, 0x00, 0x59, +/* 0000BD50 */ 0x00, 0x04, 0x5A, 0x01, 0x3F, 0x1B, 0x00, 0x5A, 0x02, 0x22, 0x1B, 0x00, 0xF0, 0x03, 0x43, 0x43, +/* 0000BD60 */ 0x1B, 0x00, 0x77, 0x43, 0x42, 0x21, 0x45, 0x3E, 0x06, 0xEB, 0x0F, 0x2F, 0x00, 0x3E, 0x45, 0x42, +/* 0000BD70 */ 0x29, 0x8F, 0x01, 0x07, 0x43, 0x0C, 0x00, 0x4A, 0x43, 0x07, 0x03, 0x00, 0x59, 0x00, 0x04, 0x5F, +/* 0000BD80 */ 0x44, 0x29, 0x22, 0x98, 0x44, 0x44, 0x28, 0x00, 0x00, 0x5A, 0x01, 0x44, 0x1C, 0x00, 0x5A, 0x02, +/* 0000BD90 */ 0x29, 0x1C, 0x00, 0xF0, 0x03, 0x43, 0x43, 0x1C, 0x00, 0x77, 0x43, 0x42, 0x23, 0xE7, 0x22, 0x00, +/* 0000BDA0 */ 0x8F, 0x03, 0x0B, 0x42, 0x0A, 0x00, 0x4A, 0x42, 0x07, 0x03, 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, +/* 0000BDB0 */ 0x29, 0x1D, 0x00, 0x5A, 0x02, 0x06, 0x1D, 0x00, 0xF0, 0x03, 0xFF, 0x42, 0x1D, 0x00, 0xEB, 0x09, +/* 0000BDC0 */ 0x35, 0x00, 0xE9, 0x2D, 0x06, 0x8F, 0x04, 0x22, 0x42, 0x0B, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 0000BDD0 */ 0x04, 0x5A, 0x01, 0x2D, 0x1E, 0x00, 0xF0, 0x02, 0xFF, 0x42, 0x1E, 0x00, 0x8F, 0x04, 0x03, 0x43, +/* 0000BDE0 */ 0x00, 0x00, 0x6D, 0x42, 0x43, 0x24, 0x07, 0x01, 0x00, 0x59, 0x00, 0x43, 0xF4, 0x01, 0xFF, 0x42, +/* 0000BDF0 */ 0x24, 0x00, 0x00, 0x00, 0x1F, 0x00, 0xEB, 0x8F, 0x01, 0x04, 0x42, 0x0D, 0x00, 0x4A, 0x42, 0x07, +/* 0000BE00 */ 0x02, 0x00, 0x59, 0x00, 0x04, 0x5F, 0x43, 0x29, 0x25, 0x5A, 0x01, 0x43, 0x20, 0x00, 0xF0, 0x02, +/* 0000BE10 */ 0x42, 0x42, 0x20, 0x00, 0x77, 0x42, 0x29, 0x26, 0x45, 0x42, 0x29, 0x8F, 0x04, 0x06, 0x43, 0x01, +/* 0000BE20 */ 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x04, 0x8F, 0x04, 0x1E, 0x44, 0x0E, 0x00, 0x5A, 0x01, 0x44, +/* 0000BE30 */ 0x21, 0x00, 0x5F, 0x44, 0x29, 0x27, 0x5A, 0x02, 0x44, 0x21, 0x00, 0xF0, 0x03, 0x43, 0x43, 0x21, +/* 0000BE40 */ 0x00, 0x77, 0x43, 0x42, 0x28, 0x5F, 0x42, 0x29, 0x29, 0xA8, 0x43, 0x15, 0x03, 0x00, 0x42, 0x43, +/* 0000BE50 */ 0x09, 0x0C, 0x00, 0x5F, 0x42, 0x29, 0x2A, 0x41, 0x42, 0x42, 0x20, 0x77, 0x42, 0x29, 0x2B, 0x77, +/* 0000BE60 */ 0x06, 0x29, 0x2C, 0xA8, 0x00, 0x24, 0x00, 0x01, 0x2C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x09, +/* 0000BE70 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x02, 0x00, 0x00, 0x6D, 0x02, 0x00, 0x00, 0x77, 0x02, +/* 0000BE80 */ 0x00, 0x00, 0x71, 0x02, 0x00, 0x00, 0x6C, 0x02, 0x00, 0x00, 0x6E, 0x02, 0x00, 0x00, 0x70, 0x02, +/* 0000BE90 */ 0x00, 0x00, 0x73, 0x02, 0x00, 0x00, 0x75, 0x02, 0x00, 0x00, 0xFE, 0xAA, 0x02, 0xFE, 0x08, 0x02, +/* 0000BEA0 */ 0xFE, 0xAB, 0x02, 0xFE, 0x08, 0x02, 0xFE, 0xFD, 0x01, 0xFE, 0xFE, 0x01, 0xFE, 0xAD, 0x02, 0xFE, +/* 0000BEB0 */ 0x76, 0x02, 0xFE, 0x6D, 0x02, 0xFE, 0x77, 0x02, 0xFE, 0x71, 0x02, 0xFE, 0x6C, 0x02, 0xFE, 0x6E, +/* 0000BEC0 */ 0x02, 0xFE, 0x70, 0x02, 0xFE, 0x73, 0x02, 0xFE, 0x75, 0x02, 0xFE, 0x5F, 0x02, 0xFE, 0x65, 0x02, +/* 0000BED0 */ 0xFE, 0x0D, 0x02, 0xFE, 0x09, 0x02, 0xFE, 0x67, 0x02, 0xFE, 0x5A, 0x02, 0xFE, 0x6A, 0x02, 0xFE, +/* 0000BEE0 */ 0x61, 0x02, 0xFE, 0x59, 0x02, 0xFE, 0x5C, 0x02, 0xFE, 0x60, 0x02, 0xFE, 0x63, 0x02, 0xFE, 0x66, +/* 0000BEF0 */ 0x02, 0xFE, 0x5D, 0x02, 0xFE, 0x5B, 0x02, 0xFE, 0x69, 0x02, 0xFE, 0x3E, 0x02, 0xFE, 0x3E, 0x02, +/* 0000BF00 */ 0xFE, 0x62, 0x02, 0xFE, 0x3E, 0x02, 0xFE, 0xAD, 0x02, 0xFE, 0x68, 0x02, 0xFE, 0x58, 0x02, 0xFE, +/* 0000BF10 */ 0x3D, 0x02, 0xFE, 0x3D, 0x02, 0xFE, 0x5C, 0x02, 0xFE, 0x69, 0x02, 0xFE, 0x5D, 0x02, 0xFE, 0x5E, +/* 0000BF20 */ 0x02, 0xFF, 0x7D, 0x64, 0x02, 0x00, 0x3F, 0x02, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3D, 0x00, 0x1A, +/* 0000BF30 */ 0x00, 0x3F, 0x00, 0x33, 0x00, 0x9F, 0x00, 0x24, 0x00, 0x71, 0x00, 0x04, 0x00, 0x67, 0x00, 0x26, +/* 0000BF40 */ 0x00, 0x46, 0x00, 0x3D, 0x00, 0x71, 0x00, 0x34, 0x00, 0x60, 0x00, 0x0A, 0x00, 0x32, 0x00, 0x25, +/* 0000BF50 */ 0x00, 0x6C, 0x00, 0x1D, 0x00, 0x4D, 0x00, 0x0A, 0x00, 0x32, 0x00, 0x1A, 0x00, 0x6C, 0x00, 0x43, +/* 0000BF60 */ 0x00, 0x6F, 0x00, 0x43, 0x00, 0x67, 0x00, 0x3F, 0x00, 0x64, 0x00, 0x4B, 0x00, 0x81, 0x00, 0x3F, +/* 0000BF70 */ 0x00, 0x62, 0x00, 0x3F, 0x00, 0x64, 0x00, 0x3F, 0x00, 0x68, 0x00, 0x3F, 0x00, 0x68, 0x00, 0x3F, +/* 0000BF80 */ 0x00, 0x70, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x3D, 0x00, 0x77, 0x00, 0x25, 0x00, 0x71, 0x00, 0x69, +/* 0000BF90 */ 0x00, 0xD0, 0x01, 0x1C, 0x00, 0x41, 0x00, 0x3C, 0x00, 0x9A, 0x00, 0x04, 0x00, 0x34, 0x00, 0x04, +/* 0000BFA0 */ 0x00, 0x36, 0x00, 0x08, 0x00, 0x68, 0x00, 0x04, 0x00, 0x34, 0x00, 0x04, 0x00, 0x2C, 0x00, 0x04, +/* 0000BFB0 */ 0x00, 0x2E, 0x00, 0x04, 0x00, 0x30, 0x00, 0x04, 0x00, 0x2C, 0x00, 0x04, 0x00, 0x2E, 0x00, 0x04, +/* 0000BFC0 */ 0x00, 0x32, 0x00, 0x04, 0x00, 0x32, 0x00, 0x04, 0x00, 0x3F, 0x00, 0x04, 0x00, 0x32, 0x00, 0x04, +/* 0000BFD0 */ 0x00, 0x40, 0x00, 0x04, 0x00, 0x3F, 0x00, 0x04, 0x00, 0x0F, 0x03, 0x06, 0x00, 0x93, 0x00, 0x24, +/* 0000BFE0 */ 0x00, 0x3F, 0x00, 0x01, 0x00, 0x4A, 0x00, 0x17, 0x00, 0xEF, 0x00, 0x26, 0x00, 0x54, 0x00, 0x25, +/* 0000BFF0 */ 0x00, 0x6A, 0x00, 0x04, 0x00, 0x37, 0x00, 0x04, 0x00, 0x5A, 0x00, 0x32, 0x00, 0xDE, 0x00, 0x24, +/* 0000C000 */ 0x00, 0x3E, 0x00, 0x01, 0x00, 0x4A, 0x00, 0x17, 0x00, 0x77, 0x01, 0x1B, 0x00, 0x77, 0x00, 0x21, +/* 0000C010 */ 0x00, 0x66, 0x00, 0x2D, 0x00, 0x82, 0x00, 0x0E, 0x00, 0x3F, 0x00, 0x0C, 0x00, 0x6D, 0x00, 0x06, +/* 0000C020 */ 0x00, 0x3F, 0x00, 0x00, 0x7F, 0x5C, 0x0A, 0xC1, 0x23, 0x10, 0x03, 0x00, 0xFE, 0x0C, 0x0D, 0x0C, +/* 0000C030 */ 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0xDF, 0x04, 0xB9, 0xFF, 0xE9, 0x56, 0x02, 0x00, 0xFF, 0xE9, 0x56, +/* 0000C040 */ 0x02, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFF, 0xE9, 0x56, 0x02, 0x00, 0xFE, 0x2D, 0x0D, +/* 0000C050 */ 0xFE, 0x2D, 0x0D, 0x07, 0x12, 0x16, 0x06, 0xC8, 0xBB, 0x04, 0x02, 0x10, 0x07, 0x17, 0x17, 0x17, +/* 0000C060 */ 0x17, 0x02, 0x15, 0x05, 0xFE, 0xFA, 0x04, 0x08, 0x06, 0xFE, 0x32, 0x04, 0x07, 0x05, 0xFE, 0xFB, +/* 0000C070 */ 0x04, 0x01, 0x00, 0x05, 0xFE, 0xFC, 0x04, 0x05, 0xFE, 0xEF, 0x04, 0x05, 0xFE, 0xFD, 0x04, 0x06, +/* 0000C080 */ 0xFE, 0xF8, 0x03, 0x06, 0xFE, 0x36, 0x04, 0x06, 0xFE, 0x37, 0x04, 0x06, 0xFE, 0x38, 0x04, 0x06, +/* 0000C090 */ 0xFE, 0x39, 0x04, 0x06, 0xFE, 0x3A, 0x04, 0x05, 0xFE, 0xFE, 0x04, 0xFE, 0x3A, 0x03, 0xA8, 0x14, +/* 0000C0A0 */ 0x5F, 0x16, 0x13, 0x00, 0xA8, 0x17, 0x15, 0x03, 0x00, 0x16, 0x17, 0x09, 0x2A, 0x00, 0x8F, 0x01, +/* 0000C0B0 */ 0x05, 0x16, 0x00, 0x00, 0x4A, 0x16, 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, 0x5A, 0x01, 0x12, 0x00, +/* 0000C0C0 */ 0x00, 0x5F, 0x17, 0x13, 0x01, 0x5A, 0x02, 0x17, 0x00, 0x00, 0x5A, 0x03, 0x02, 0x00, 0x00, 0xF0, +/* 0000C0D0 */ 0x04, 0x16, 0x16, 0x00, 0x00, 0x45, 0x12, 0x16, 0x5F, 0x16, 0x13, 0x02, 0xA8, 0x17, 0x15, 0x03, +/* 0000C0E0 */ 0x00, 0x16, 0x17, 0x09, 0x00, 0x00, 0x5F, 0x16, 0x13, 0x03, 0x14, 0x03, 0x00, 0x16, 0x04, 0x09, +/* 0000C0F0 */ 0x98, 0x00, 0x8F, 0x04, 0x03, 0x17, 0x01, 0x00, 0x6D, 0x16, 0x17, 0x04, 0x07, 0x03, 0x00, 0x59, +/* 0000C100 */ 0x00, 0x17, 0x5A, 0x01, 0x12, 0x01, 0x00, 0xE2, 0x18, 0x00, 0x5A, 0x02, 0x18, 0x01, 0x00, 0xF4, +/* 0000C110 */ 0x03, 0x16, 0x16, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, 0x14, 0x16, 0x14, 0x03, 0x00, 0x14, +/* 0000C120 */ 0x05, 0x09, 0x2E, 0x00, 0x8F, 0x04, 0x0F, 0x16, 0x02, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x03, +/* 0000C130 */ 0x8F, 0x04, 0x0E, 0x17, 0x03, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x01, 0x06, 0x03, 0x00, 0xC5, 0x02, +/* 0000C140 */ 0x17, 0x17, 0x03, 0x00, 0x5A, 0x01, 0x17, 0x02, 0x00, 0xF0, 0x02, 0xFF, 0x16, 0x02, 0x00, 0x09, +/* 0000C150 */ 0x35, 0x00, 0x8F, 0x04, 0x06, 0x16, 0x04, 0x00, 0x07, 0x05, 0x00, 0x59, 0x00, 0x03, 0x8F, 0x04, +/* 0000C160 */ 0x1D, 0x17, 0x05, 0x00, 0x5A, 0x01, 0x17, 0x04, 0x00, 0x5A, 0x02, 0x12, 0x04, 0x00, 0x98, 0x17, +/* 0000C170 */ 0x14, 0x07, 0x00, 0x00, 0x5A, 0x03, 0x17, 0x04, 0x00, 0x5A, 0x04, 0x08, 0x04, 0x00, 0xF0, 0x05, +/* 0000C180 */ 0x16, 0x16, 0x04, 0x00, 0x45, 0x12, 0x16, 0x09, 0xA1, 0x00, 0x5F, 0x16, 0x13, 0x05, 0x14, 0x03, +/* 0000C190 */ 0x00, 0x16, 0x09, 0x09, 0x95, 0x00, 0x8F, 0x04, 0x03, 0x17, 0x01, 0x00, 0x6D, 0x16, 0x17, 0x06, +/* 0000C1A0 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x17, 0x5A, 0x01, 0x12, 0x05, 0x00, 0xE2, 0x18, 0x01, 0x5A, 0x02, +/* 0000C1B0 */ 0x18, 0x05, 0x00, 0xF4, 0x03, 0x16, 0x16, 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, 0x45, 0x14, 0x16, +/* 0000C1C0 */ 0x14, 0x03, 0x00, 0x14, 0x05, 0x09, 0x2E, 0x00, 0x8F, 0x04, 0x0F, 0x16, 0x02, 0x00, 0x07, 0x02, +/* 0000C1D0 */ 0x00, 0x59, 0x00, 0x03, 0x8F, 0x04, 0x0E, 0x17, 0x03, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x01, 0x06, +/* 0000C1E0 */ 0x07, 0x00, 0xC5, 0x02, 0x17, 0x17, 0x07, 0x00, 0x5A, 0x01, 0x17, 0x06, 0x00, 0xF0, 0x02, 0xFF, +/* 0000C1F0 */ 0x16, 0x06, 0x00, 0x09, 0x35, 0x00, 0x8F, 0x04, 0x06, 0x16, 0x04, 0x00, 0x07, 0x05, 0x00, 0x59, +/* 0000C200 */ 0x00, 0x03, 0x8F, 0x04, 0x1D, 0x17, 0x05, 0x00, 0x5A, 0x01, 0x17, 0x08, 0x00, 0x5A, 0x02, 0x12, +/* 0000C210 */ 0x08, 0x00, 0x98, 0x17, 0x14, 0x07, 0x01, 0x00, 0x5A, 0x03, 0x17, 0x08, 0x00, 0x5A, 0x04, 0x0A, +/* 0000C220 */ 0x08, 0x00, 0xF0, 0x05, 0x16, 0x16, 0x08, 0x00, 0x45, 0x12, 0x16, 0x5F, 0x16, 0x13, 0x07, 0xA8, +/* 0000C230 */ 0x17, 0x15, 0x03, 0x00, 0x16, 0x17, 0x09, 0x45, 0x00, 0x5F, 0x16, 0x13, 0x08, 0x15, 0x03, 0x00, +/* 0000C240 */ 0x16, 0x04, 0x09, 0x39, 0x00, 0x5F, 0x16, 0x13, 0x09, 0x15, 0x03, 0x00, 0x16, 0x0B, 0x09, 0x2D, +/* 0000C250 */ 0x00, 0x8F, 0x01, 0x05, 0x16, 0x00, 0x00, 0x4A, 0x16, 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, 0x5A, +/* 0000C260 */ 0x01, 0x12, 0x09, 0x00, 0x5F, 0x17, 0x13, 0x0A, 0x5A, 0x02, 0x17, 0x09, 0x00, 0x5A, 0x03, 0x0C, +/* 0000C270 */ 0x09, 0x00, 0xF0, 0x04, 0x16, 0x16, 0x09, 0x00, 0x45, 0x12, 0x16, 0x09, 0x38, 0x00, 0x5F, 0x16, +/* 0000C280 */ 0x13, 0x0B, 0xA8, 0x17, 0x15, 0x03, 0x00, 0x16, 0x17, 0x09, 0x2A, 0x00, 0x8F, 0x01, 0x06, 0x16, +/* 0000C290 */ 0x06, 0x00, 0x4A, 0x16, 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, 0x5A, 0x01, 0x12, 0x0A, 0x00, 0x5F, +/* 0000C2A0 */ 0x17, 0x13, 0x0C, 0x5A, 0x02, 0x17, 0x0A, 0x00, 0x5A, 0x03, 0x0C, 0x0A, 0x00, 0xF0, 0x04, 0x16, +/* 0000C2B0 */ 0x16, 0x0A, 0x00, 0x45, 0x12, 0x16, 0x5F, 0x16, 0x13, 0x0D, 0xA8, 0x17, 0x15, 0x03, 0x00, 0x16, +/* 0000C2C0 */ 0x17, 0x09, 0x2A, 0x00, 0x8F, 0x01, 0x06, 0x16, 0x06, 0x00, 0x4A, 0x16, 0x07, 0x04, 0x00, 0x59, +/* 0000C2D0 */ 0x00, 0x03, 0x5A, 0x01, 0x12, 0x0B, 0x00, 0x5F, 0x17, 0x13, 0x0E, 0x5A, 0x02, 0x17, 0x0B, 0x00, +/* 0000C2E0 */ 0x5A, 0x03, 0x0D, 0x0B, 0x00, 0xF0, 0x04, 0x16, 0x16, 0x0B, 0x00, 0x45, 0x12, 0x16, 0x5F, 0x16, +/* 0000C2F0 */ 0x13, 0x0F, 0xA8, 0x17, 0x15, 0x03, 0x00, 0x16, 0x17, 0x09, 0x2A, 0x00, 0x8F, 0x01, 0x06, 0x16, +/* 0000C300 */ 0x06, 0x00, 0x4A, 0x16, 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, 0x5A, 0x01, 0x12, 0x0C, 0x00, 0x5F, +/* 0000C310 */ 0x17, 0x13, 0x10, 0x5A, 0x02, 0x17, 0x0C, 0x00, 0x5A, 0x03, 0x0E, 0x0C, 0x00, 0xF0, 0x04, 0x16, +/* 0000C320 */ 0x16, 0x0C, 0x00, 0x45, 0x12, 0x16, 0x5F, 0x16, 0x13, 0x11, 0xA8, 0x17, 0x15, 0x03, 0x00, 0x16, +/* 0000C330 */ 0x17, 0x09, 0x2A, 0x00, 0x8F, 0x01, 0x06, 0x16, 0x06, 0x00, 0x4A, 0x16, 0x07, 0x04, 0x00, 0x59, +/* 0000C340 */ 0x00, 0x03, 0x5A, 0x01, 0x12, 0x0D, 0x00, 0x5F, 0x17, 0x13, 0x12, 0x5A, 0x02, 0x17, 0x0D, 0x00, +/* 0000C350 */ 0x5A, 0x03, 0x0F, 0x0D, 0x00, 0xF0, 0x04, 0x16, 0x16, 0x0D, 0x00, 0x45, 0x12, 0x16, 0x5F, 0x16, +/* 0000C360 */ 0x13, 0x13, 0xA8, 0x17, 0x15, 0x03, 0x00, 0x16, 0x17, 0x09, 0x2A, 0x00, 0x8F, 0x01, 0x06, 0x16, +/* 0000C370 */ 0x06, 0x00, 0x4A, 0x16, 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, 0x5A, 0x01, 0x12, 0x0E, 0x00, 0x5F, +/* 0000C380 */ 0x17, 0x13, 0x14, 0x5A, 0x02, 0x17, 0x0E, 0x00, 0x5A, 0x03, 0x10, 0x0E, 0x00, 0xF0, 0x04, 0x16, +/* 0000C390 */ 0x16, 0x0E, 0x00, 0x45, 0x12, 0x16, 0x5F, 0x16, 0x13, 0x15, 0xA8, 0x17, 0x15, 0x03, 0x00, 0x16, +/* 0000C3A0 */ 0x17, 0x09, 0x2A, 0x00, 0x8F, 0x01, 0x05, 0x16, 0x00, 0x00, 0x4A, 0x16, 0x07, 0x04, 0x00, 0x59, +/* 0000C3B0 */ 0x00, 0x03, 0x5A, 0x01, 0x12, 0x0F, 0x00, 0x5F, 0x17, 0x13, 0x16, 0x5A, 0x02, 0x17, 0x0F, 0x00, +/* 0000C3C0 */ 0x5A, 0x03, 0x11, 0x0F, 0x00, 0xF0, 0x04, 0x16, 0x16, 0x0F, 0x00, 0x45, 0x12, 0x16, 0x45, 0x00, +/* 0000C3D0 */ 0x12, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x67, 0x02, 0xFE, 0x67, 0x02, 0xFE, 0x5A, +/* 0000C3E0 */ 0x02, 0xFE, 0x6A, 0x02, 0xFE, 0xC0, 0x02, 0xFE, 0x6A, 0x02, 0xFE, 0xC0, 0x02, 0xFE, 0x61, 0x02, +/* 0000C3F0 */ 0xFE, 0x61, 0x02, 0xFE, 0x61, 0x02, 0xFE, 0x61, 0x02, 0xFE, 0x61, 0x02, 0xFE, 0x61, 0x02, 0xFE, +/* 0000C400 */ 0x59, 0x02, 0xFE, 0x59, 0x02, 0xFE, 0x5C, 0x02, 0xFE, 0x5C, 0x02, 0xFE, 0x60, 0x02, 0xFE, 0x60, +/* 0000C410 */ 0x02, 0xFE, 0x63, 0x02, 0xFE, 0x63, 0x02, 0xFE, 0x66, 0x02, 0xFE, 0x66, 0x02, 0x1C, 0xFE, 0xFF, +/* 0000C420 */ 0x04, 0x00, 0x1C, 0xFE, 0xFF, 0x04, 0x00, 0xFF, 0x38, 0x57, 0x02, 0x00, 0x1D, 0x02, 0x00, 0x00, +/* 0000C430 */ 0x00, 0x0E, 0x00, 0x42, 0x00, 0x2A, 0x00, 0x88, 0x00, 0x0E, 0x00, 0x8E, 0x01, 0x0C, 0x00, 0x3F, +/* 0000C440 */ 0x00, 0x2A, 0x00, 0x6B, 0x00, 0x08, 0x00, 0x2E, 0x00, 0x2E, 0x00, 0x91, 0x00, 0x38, 0x00, 0x98, +/* 0000C450 */ 0x00, 0x0C, 0x00, 0x3C, 0x00, 0x2A, 0x00, 0x6B, 0x00, 0x08, 0x00, 0x2E, 0x00, 0x2E, 0x00, 0x91, +/* 0000C460 */ 0x00, 0x35, 0x00, 0x2F, 0x01, 0x26, 0x00, 0x90, 0x00, 0x2D, 0x00, 0x76, 0x00, 0x0E, 0x00, 0x40, +/* 0000C470 */ 0x00, 0x2A, 0x00, 0x8B, 0x00, 0x0E, 0x00, 0x3E, 0x00, 0x2A, 0x00, 0x87, 0x00, 0x0E, 0x00, 0x3F, +/* 0000C480 */ 0x00, 0x2A, 0x00, 0x89, 0x00, 0x0E, 0x00, 0x41, 0x00, 0x2A, 0x00, 0x8D, 0x00, 0x0E, 0x00, 0x41, +/* 0000C490 */ 0x00, 0x2A, 0x00, 0x8D, 0x00, 0x0E, 0x00, 0x47, 0x00, 0x2A, 0x00, 0x8C, 0x00, 0x08, 0x00, 0x22, +/* 0000C4A0 */ 0x00, 0x00, 0x7F, 0x5C, 0x0A, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0xF8, 0x0C, 0x0C, 0xA3, 0x41, +/* 0000C4B0 */ 0xC1, 0x00, 0xFE, 0xDE, 0x04, 0xB8, 0xFF, 0x81, 0x51, 0x02, 0x00, 0xFF, 0x81, 0x51, 0x02, 0x00, +/* 0000C4C0 */ 0x01, 0xFE, 0x00, 0x90, 0x04, 0x04, 0xFF, 0x81, 0x51, 0x02, 0x00, 0xFE, 0xF8, 0x04, 0xFE, 0xF8, +/* 0000C4D0 */ 0x04, 0x09, 0x11, 0x16, 0x07, 0x43, 0x40, 0x04, 0x05, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x15, +/* 0000C4E0 */ 0x05, 0xFE, 0xEA, 0x04, 0x05, 0xFE, 0xF5, 0x04, 0x08, 0x07, 0x05, 0xFE, 0xF6, 0x04, 0x05, 0xFE, +/* 0000C4F0 */ 0xED, 0x04, 0x05, 0xFE, 0xEE, 0x04, 0x06, 0xFE, 0x32, 0x04, 0x01, 0x00, 0x06, 0xFE, 0xF0, 0x04, +/* 0000C500 */ 0x01, 0x01, 0x05, 0xFE, 0xF7, 0x04, 0x01, 0x02, 0x05, 0xFE, 0xF8, 0x04, 0x05, 0xFE, 0xF9, 0x04, +/* 0000C510 */ 0xFE, 0x2E, 0x01, 0x8F, 0x04, 0x03, 0x17, 0x00, 0x00, 0x6D, 0x16, 0x17, 0x00, 0x07, 0x03, 0x00, +/* 0000C520 */ 0x59, 0x00, 0x17, 0x5A, 0x01, 0x11, 0x00, 0x00, 0x8F, 0x04, 0x0A, 0x18, 0x01, 0x00, 0x07, 0x02, +/* 0000C530 */ 0x00, 0x59, 0x00, 0x04, 0xFC, 0x19, 0x02, 0x13, 0x03, 0x5A, 0x01, 0x19, 0x01, 0x00, 0xF0, 0x02, +/* 0000C540 */ 0x18, 0x18, 0x01, 0x00, 0x5A, 0x02, 0x18, 0x00, 0x00, 0xF4, 0x03, 0x16, 0x16, 0x00, 0x00, 0x00, +/* 0000C550 */ 0x00, 0x00, 0x00, 0x45, 0x14, 0x16, 0x14, 0x03, 0x00, 0x14, 0x05, 0x09, 0x40, 0x00, 0x8F, 0x04, +/* 0000C560 */ 0x0F, 0x16, 0x02, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x04, 0x8F, 0x04, 0x0E, 0x17, 0x03, 0x00, +/* 0000C570 */ 0x07, 0x02, 0x00, 0xFD, 0x18, 0x06, 0x11, 0x06, 0xFF, 0x18, 0x07, 0x02, 0x02, 0xFF, 0x18, 0x13, +/* 0000C580 */ 0x08, 0x04, 0x5A, 0x01, 0x18, 0x03, 0x00, 0xC5, 0x02, 0x17, 0x17, 0x03, 0x00, 0x5A, 0x01, 0x17, +/* 0000C590 */ 0x02, 0x00, 0xF0, 0x02, 0xFF, 0x16, 0x02, 0x00, 0x45, 0x00, 0x11, 0x09, 0xA1, 0x00, 0x14, 0x03, +/* 0000C5A0 */ 0x00, 0x12, 0x09, 0x09, 0x43, 0x00, 0x8F, 0x04, 0x06, 0x16, 0x04, 0x00, 0x07, 0x05, 0x00, 0x59, +/* 0000C5B0 */ 0x00, 0x04, 0x8F, 0x04, 0x1D, 0x17, 0x05, 0x00, 0x5A, 0x01, 0x17, 0x04, 0x00, 0x5A, 0x02, 0x11, +/* 0000C5C0 */ 0x04, 0x00, 0x98, 0x17, 0x14, 0x0A, 0x00, 0x00, 0x5A, 0x03, 0x17, 0x04, 0x00, 0x98, 0x17, 0x14, +/* 0000C5D0 */ 0x0C, 0x01, 0x00, 0xFC, 0x17, 0x0B, 0x17, 0x0D, 0x5A, 0x04, 0x17, 0x04, 0x00, 0xF0, 0x05, 0x00, +/* 0000C5E0 */ 0x16, 0x04, 0x00, 0x09, 0x59, 0x00, 0x09, 0x4E, 0x00, 0x98, 0x16, 0x14, 0x0E, 0x02, 0x00, 0x15, +/* 0000C5F0 */ 0x03, 0x00, 0x16, 0x0F, 0x09, 0x40, 0x00, 0x8F, 0x04, 0x06, 0x16, 0x04, 0x00, 0x07, 0x05, 0x00, +/* 0000C600 */ 0x59, 0x00, 0x04, 0x8F, 0x04, 0x1D, 0x17, 0x05, 0x00, 0x5A, 0x01, 0x17, 0x05, 0x00, 0x5A, 0x02, +/* 0000C610 */ 0x11, 0x05, 0x00, 0x98, 0x17, 0x14, 0x0A, 0x03, 0x00, 0x5A, 0x03, 0x17, 0x05, 0x00, 0x98, 0x17, +/* 0000C620 */ 0x14, 0x0C, 0x04, 0x00, 0xFC, 0x17, 0x0B, 0x17, 0x10, 0x5A, 0x04, 0x17, 0x05, 0x00, 0xF0, 0x05, +/* 0000C630 */ 0x00, 0x16, 0x05, 0x00, 0x09, 0x08, 0x00, 0x45, 0x00, 0x11, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, +/* 0000C640 */ 0x00, 0xFE, 0xC0, 0x02, 0xFF, 0xA8, 0x52, 0x02, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x43, 0x00, +/* 0000C650 */ 0x91, 0x00, 0x08, 0x00, 0x2A, 0x00, 0x3A, 0x00, 0x00, 0x01, 0x06, 0x00, 0x83, 0x00, 0x08, 0x00, +/* 0000C660 */ 0x33, 0x00, 0x43, 0x00, 0x81, 0x00, 0x0E, 0x00, 0x32, 0x00, 0x40, 0x00, 0x8A, 0x00, 0x08, 0x00, +/* 0000C670 */ 0x22, 0x00, 0x00, 0x7F, 0x5C, 0x0A, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0xE7, 0x0C, 0x0C, 0xA3, +/* 0000C680 */ 0x41, 0xC1, 0x00, 0xFE, 0xDD, 0x04, 0xB7, 0xFF, 0x53, 0x4C, 0x02, 0x00, 0xFF, 0x53, 0x4C, 0x02, +/* 0000C690 */ 0x00, 0x01, 0xFE, 0x00, 0x90, 0x04, 0x04, 0xFF, 0x53, 0x4C, 0x02, 0x00, 0xFE, 0x20, 0x05, 0xFE, +/* 0000C6A0 */ 0x20, 0x05, 0x09, 0x14, 0x19, 0x07, 0x50, 0x4C, 0x04, 0x05, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, +/* 0000C6B0 */ 0x18, 0x05, 0xFE, 0xEA, 0x04, 0x05, 0xFE, 0xEB, 0x04, 0x08, 0x07, 0x05, 0xFE, 0xEC, 0x04, 0x05, +/* 0000C6C0 */ 0xFE, 0xED, 0x04, 0x05, 0xFE, 0xEE, 0x04, 0x01, 0x02, 0x05, 0xFE, 0xEF, 0x04, 0x06, 0xFE, 0x31, +/* 0000C6D0 */ 0x04, 0x01, 0x00, 0x06, 0xFE, 0xF0, 0x04, 0x01, 0x01, 0x06, 0xFE, 0xF1, 0x04, 0x06, 0xFE, 0xF2, +/* 0000C6E0 */ 0x04, 0x06, 0xFE, 0x30, 0x04, 0x05, 0xFE, 0xF3, 0x04, 0x05, 0xFE, 0xF4, 0x04, 0xFE, 0x5D, 0x01, +/* 0000C6F0 */ 0x8F, 0x04, 0x03, 0x1A, 0x00, 0x00, 0x6D, 0x19, 0x1A, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x1A, +/* 0000C700 */ 0x5A, 0x01, 0x14, 0x00, 0x00, 0x8F, 0x04, 0x0A, 0x1B, 0x01, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 0000C710 */ 0x04, 0xFC, 0x1C, 0x02, 0x16, 0x03, 0x5A, 0x01, 0x1C, 0x01, 0x00, 0xF0, 0x02, 0x1B, 0x1B, 0x01, +/* 0000C720 */ 0x00, 0x5A, 0x02, 0x1B, 0x00, 0x00, 0xF4, 0x03, 0x19, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0000C730 */ 0x45, 0x17, 0x19, 0x14, 0x03, 0x00, 0x17, 0x05, 0x09, 0x40, 0x00, 0x8F, 0x04, 0x0F, 0x19, 0x02, +/* 0000C740 */ 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x04, 0x8F, 0x04, 0x0E, 0x1A, 0x03, 0x00, 0x07, 0x02, 0x00, +/* 0000C750 */ 0xFD, 0x1B, 0x06, 0x14, 0x06, 0xFF, 0x1B, 0x07, 0x02, 0x02, 0xFF, 0x1B, 0x16, 0x08, 0x04, 0x5A, +/* 0000C760 */ 0x01, 0x1B, 0x03, 0x00, 0xC5, 0x02, 0x1A, 0x1A, 0x03, 0x00, 0x5A, 0x01, 0x1A, 0x02, 0x00, 0xF0, +/* 0000C770 */ 0x02, 0xFF, 0x19, 0x02, 0x00, 0x45, 0x00, 0x14, 0x09, 0xD0, 0x00, 0x98, 0x19, 0x17, 0x09, 0x00, +/* 0000C780 */ 0x00, 0x15, 0x03, 0x00, 0x19, 0x0A, 0x09, 0x56, 0x00, 0x14, 0x03, 0x00, 0x15, 0x0B, 0x09, 0x4E, +/* 0000C790 */ 0x00, 0x8F, 0x04, 0x06, 0x19, 0x04, 0x00, 0x07, 0x05, 0x00, 0x59, 0x00, 0x04, 0x8F, 0x04, 0x1D, +/* 0000C7A0 */ 0x1A, 0x05, 0x00, 0x5A, 0x01, 0x1A, 0x04, 0x00, 0x5A, 0x02, 0x14, 0x04, 0x00, 0x98, 0x1A, 0x17, +/* 0000C7B0 */ 0x0C, 0x01, 0x00, 0x5A, 0x03, 0x1A, 0x04, 0x00, 0x98, 0x1A, 0x17, 0x0E, 0x02, 0x00, 0x2D, 0x1A, +/* 0000C7C0 */ 0x0D, 0x1A, 0x2D, 0x1A, 0x1A, 0x0F, 0x2D, 0x1A, 0x1A, 0x0A, 0x2D, 0x1A, 0x1A, 0x10, 0x5A, 0x04, +/* 0000C7D0 */ 0x1A, 0x04, 0x00, 0xF0, 0x05, 0x00, 0x19, 0x04, 0x00, 0x09, 0x6F, 0x00, 0x09, 0x64, 0x00, 0x15, +/* 0000C7E0 */ 0x03, 0x00, 0x15, 0x0B, 0x09, 0x5C, 0x00, 0x8F, 0x04, 0x06, 0x19, 0x04, 0x00, 0x07, 0x05, 0x00, +/* 0000C7F0 */ 0x59, 0x00, 0x04, 0x8F, 0x04, 0x1D, 0x1A, 0x05, 0x00, 0x5A, 0x01, 0x1A, 0x05, 0x00, 0x5A, 0x02, +/* 0000C800 */ 0x14, 0x05, 0x00, 0x98, 0x1A, 0x17, 0x0C, 0x03, 0x00, 0x5A, 0x03, 0x1A, 0x05, 0x00, 0x98, 0x1A, +/* 0000C810 */ 0x17, 0x0E, 0x04, 0x00, 0x2D, 0x1A, 0x0D, 0x1A, 0x2D, 0x1A, 0x1A, 0x0F, 0x14, 0x03, 0x00, 0x15, +/* 0000C820 */ 0x11, 0x09, 0x06, 0x00, 0x45, 0x1B, 0x12, 0x09, 0x03, 0x00, 0x46, 0x1B, 0x13, 0x2D, 0x1A, 0x1A, +/* 0000C830 */ 0x1B, 0x2D, 0x1A, 0x1A, 0x10, 0x5A, 0x04, 0x1A, 0x05, 0x00, 0xF0, 0x05, 0x00, 0x19, 0x05, 0x00, +/* 0000C840 */ 0x09, 0x08, 0x00, 0x45, 0x00, 0x14, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xC0, 0x02, +/* 0000C850 */ 0xFF, 0x29, 0x4D, 0x02, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x43, 0x00, 0x0F, 0x01, 0x08, 0x00, +/* 0000C860 */ 0x2A, 0x00, 0x3A, 0x00, 0xF5, 0x00, 0x06, 0x00, 0x39, 0x00, 0x16, 0x00, 0x47, 0x00, 0x4E, 0x00, +/* 0000C870 */ 0x85, 0x00, 0x08, 0x00, 0x30, 0x00, 0x5C, 0x00, 0xC4, 0x00, 0x08, 0x00, 0x22, 0x00, 0x00, 0x7F, +/* 0000C880 */ 0x4C, 0x02, 0x01, 0x00, 0x10, 0x03, 0x00, 0xFE, 0xDE, 0x0C, 0x0C, 0xA3, 0x41, 0xC1, 0x00, 0xFE, +/* 0000C890 */ 0xDC, 0x04, 0xB6, 0xFF, 0xEC, 0x4A, 0x02, 0x00, 0xFF, 0xEC, 0x4A, 0x02, 0x00, 0x01, 0xFE, 0x00, +/* 0000C8A0 */ 0x90, 0x02, 0x02, 0xFF, 0xEC, 0x4A, 0x02, 0x00, 0xE9, 0xE9, 0x03, 0x05, 0x07, 0x0E, 0x0C, 0x04, +/* 0000C8B0 */ 0x01, 0x01, 0x06, 0x06, 0xFE, 0xD6, 0x03, 0x06, 0xFE, 0x47, 0x03, 0x05, 0xFE, 0xCA, 0x04, 0x2E, +/* 0000C8C0 */ 0x2A, 0x07, 0x05, 0x14, 0x03, 0x00, 0x07, 0x02, 0x09, 0x06, 0x00, 0x45, 0x00, 0x03, 0x09, 0x1B, +/* 0000C8D0 */ 0x00, 0x8F, 0x02, 0x02, 0x07, 0x00, 0x00, 0x98, 0x07, 0x07, 0x05, 0x00, 0x00, 0x45, 0x00, 0x07, +/* 0000C8E0 */ 0x0F, 0x03, 0x00, 0x07, 0x46, 0x00, 0x04, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFF, 0x27, +/* 0000C8F0 */ 0x4B, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3B, 0x00, 0x06, 0x00, 0x2E, 0x00, +/* 0000C900 */ 0x1B, 0x00, 0x44, 0x00, 0x00, 0x7E, 0x5D, 0x1C, 0xC1, 0x03, 0x1A, 0x0B, 0x00, 0xFE, 0x9C, 0x0C, +/* 0000C910 */ 0x0C, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0xDB, 0x04, 0xB4, 0xFF, 0x99, 0x40, 0x02, 0x00, 0xFF, 0x99, +/* 0000C920 */ 0x40, 0x02, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0x99, 0x40, 0x02, 0x00, 0xFE, 0x70, +/* 0000C930 */ 0x08, 0xFE, 0x70, 0x08, 0x03, 0xFE, 0xE0, 0x04, 0xFE, 0xE0, 0x01, 0xFE, 0xCF, 0x03, 0x07, 0x19, +/* 0000C940 */ 0x1D, 0x05, 0xA6, 0xA5, 0x04, 0x0A, 0x02, 0x02, 0x06, 0x12, 0x12, 0x12, 0x12, 0x1A, 0x1B, 0x1C, +/* 0000C950 */ 0x07, 0x01, 0x00, 0x06, 0xFE, 0x2F, 0x04, 0x06, 0xFE, 0x30, 0x04, 0x01, 0x01, 0x05, 0xFE, 0xE1, +/* 0000C960 */ 0x04, 0x06, 0xFE, 0x31, 0x04, 0x05, 0xFE, 0xE2, 0x04, 0x06, 0xFE, 0x32, 0x04, 0x05, 0xFE, 0xE3, +/* 0000C970 */ 0x04, 0x06, 0xFE, 0xF8, 0x03, 0x05, 0xFE, 0xE4, 0x04, 0x05, 0xFE, 0xE5, 0x04, 0x05, 0xFE, 0xE6, +/* 0000C980 */ 0x04, 0x05, 0xFE, 0xE7, 0x04, 0x06, 0xFE, 0x37, 0x04, 0x05, 0xFE, 0xE8, 0x04, 0x05, 0xFE, 0xE9, +/* 0000C990 */ 0x04, 0x06, 0xFE, 0x38, 0x04, 0x06, 0xFE, 0x39, 0x04, 0x06, 0xFE, 0x3A, 0x04, 0x08, 0x06, 0xFE, +/* 0000C9A0 */ 0x72, 0x04, 0xFE, 0xB9, 0x02, 0x96, 0x03, 0x19, 0x4E, 0x1D, 0x96, 0x04, 0x1D, 0xD0, 0x1D, 0x00, +/* 0000C9B0 */ 0x00, 0x00, 0x96, 0x02, 0x1D, 0x93, 0x02, 0x1D, 0x00, 0x00, 0x77, 0x02, 0x1D, 0x00, 0x96, 0x04, +/* 0000C9C0 */ 0x03, 0x93, 0x03, 0x1D, 0x01, 0x00, 0x5F, 0x1D, 0x1D, 0x01, 0x0E, 0x67, 0x00, 0x1D, 0x93, 0x03, +/* 0000C9D0 */ 0x1D, 0x01, 0x00, 0x5F, 0x1D, 0x1D, 0x02, 0x14, 0x11, 0x00, 0x1D, 0x04, 0x93, 0x03, 0x1D, 0x01, +/* 0000C9E0 */ 0x00, 0x5F, 0x1D, 0x1D, 0x03, 0x14, 0x03, 0x00, 0x1D, 0x05, 0x09, 0x1D, 0x00, 0x93, 0x02, 0x1D, +/* 0000C9F0 */ 0x00, 0x00, 0x93, 0x04, 0x1F, 0x02, 0x00, 0x43, 0x1E, 0x1F, 0x2D, 0x1F, 0x1E, 0x06, 0x96, 0x04, +/* 0000CA00 */ 0x1F, 0x9D, 0x07, 0x1D, 0x1E, 0x00, 0x00, 0x09, 0x2B, 0x00, 0x93, 0x03, 0x1D, 0x01, 0x00, 0x5F, +/* 0000CA10 */ 0x1D, 0x1D, 0x04, 0x14, 0x03, 0x00, 0x1D, 0x08, 0x09, 0x1A, 0x00, 0x93, 0x02, 0x1D, 0x00, 0x00, +/* 0000CA20 */ 0x93, 0x04, 0x1F, 0x02, 0x00, 0x43, 0x1E, 0x1F, 0x2D, 0x1F, 0x1E, 0x06, 0x96, 0x04, 0x1F, 0x9D, +/* 0000CA30 */ 0x09, 0x1D, 0x1E, 0x01, 0x00, 0x93, 0x03, 0x1D, 0x01, 0x00, 0x5F, 0x1D, 0x1D, 0x05, 0x0E, 0x59, +/* 0000CA40 */ 0x00, 0x1D, 0x93, 0x03, 0x1D, 0x01, 0x00, 0x5F, 0x1D, 0x1D, 0x06, 0x14, 0x03, 0x00, 0x1D, 0x0A, +/* 0000CA50 */ 0x09, 0x1D, 0x00, 0x93, 0x02, 0x1D, 0x00, 0x00, 0x93, 0x04, 0x1F, 0x02, 0x00, 0x43, 0x1E, 0x1F, +/* 0000CA60 */ 0x2D, 0x1F, 0x1E, 0x06, 0x96, 0x04, 0x1F, 0x9D, 0x0B, 0x1D, 0x1E, 0x02, 0x00, 0x09, 0x2B, 0x00, +/* 0000CA70 */ 0x93, 0x03, 0x1D, 0x01, 0x00, 0x5F, 0x1D, 0x1D, 0x07, 0x14, 0x03, 0x00, 0x1D, 0x0C, 0x09, 0x1A, +/* 0000CA80 */ 0x00, 0x93, 0x02, 0x1D, 0x00, 0x00, 0x93, 0x04, 0x1F, 0x02, 0x00, 0x43, 0x1E, 0x1F, 0x2D, 0x1F, +/* 0000CA90 */ 0x1E, 0x06, 0x96, 0x04, 0x1F, 0x9D, 0x0D, 0x1D, 0x1E, 0x03, 0x00, 0x93, 0x03, 0x1D, 0x01, 0x00, +/* 0000CAA0 */ 0x5F, 0x1D, 0x1D, 0x08, 0x0E, 0xA3, 0x00, 0x1D, 0x93, 0x03, 0x1D, 0x01, 0x00, 0x5F, 0x1D, 0x1D, +/* 0000CAB0 */ 0x09, 0x14, 0x11, 0x00, 0x1D, 0x0A, 0x93, 0x03, 0x1D, 0x01, 0x00, 0x5F, 0x1D, 0x1D, 0x0A, 0x14, +/* 0000CAC0 */ 0x03, 0x00, 0x1D, 0x0C, 0x09, 0x1D, 0x00, 0x93, 0x02, 0x1D, 0x00, 0x00, 0x93, 0x04, 0x1F, 0x02, +/* 0000CAD0 */ 0x00, 0x43, 0x1E, 0x1F, 0x2D, 0x1F, 0x1E, 0x06, 0x96, 0x04, 0x1F, 0x9D, 0x0E, 0x1D, 0x1E, 0x04, +/* 0000CAE0 */ 0x00, 0x09, 0x67, 0x00, 0x93, 0x03, 0x1D, 0x01, 0x00, 0x5F, 0x1D, 0x1D, 0x0B, 0x14, 0x11, 0x00, +/* 0000CAF0 */ 0x1D, 0x05, 0x93, 0x03, 0x1D, 0x01, 0x00, 0x5F, 0x1D, 0x1D, 0x0C, 0x14, 0x03, 0x00, 0x1D, 0x04, +/* 0000CB00 */ 0x09, 0x1D, 0x00, 0x93, 0x02, 0x1D, 0x00, 0x00, 0x93, 0x04, 0x1F, 0x02, 0x00, 0x43, 0x1E, 0x1F, +/* 0000CB10 */ 0x2D, 0x1F, 0x1E, 0x06, 0x96, 0x04, 0x1F, 0x9D, 0x0F, 0x1D, 0x1E, 0x05, 0x00, 0x09, 0x2B, 0x00, +/* 0000CB20 */ 0x93, 0x03, 0x1D, 0x01, 0x00, 0x5F, 0x1D, 0x1D, 0x0D, 0x14, 0x03, 0x00, 0x1D, 0x08, 0x09, 0x1A, +/* 0000CB30 */ 0x00, 0x93, 0x02, 0x1D, 0x00, 0x00, 0x93, 0x04, 0x1F, 0x02, 0x00, 0x43, 0x1E, 0x1F, 0x2D, 0x1F, +/* 0000CB40 */ 0x1E, 0x06, 0x96, 0x04, 0x1F, 0x9D, 0x10, 0x1D, 0x1E, 0x06, 0x00, 0x93, 0x03, 0x1D, 0x01, 0x00, +/* 0000CB50 */ 0x5F, 0x1D, 0x1D, 0x0E, 0x0E, 0x1A, 0x00, 0x1D, 0x93, 0x02, 0x1D, 0x00, 0x00, 0x93, 0x04, 0x1F, +/* 0000CB60 */ 0x02, 0x00, 0x43, 0x1E, 0x1F, 0x2D, 0x1F, 0x1E, 0x06, 0x96, 0x04, 0x1F, 0x9D, 0x11, 0x1D, 0x1E, +/* 0000CB70 */ 0x07, 0x00, 0x93, 0x03, 0x1D, 0x01, 0x00, 0x5F, 0x1D, 0x1D, 0x0F, 0x0E, 0x59, 0x00, 0x1D, 0x93, +/* 0000CB80 */ 0x03, 0x1D, 0x01, 0x00, 0x5F, 0x1D, 0x1D, 0x10, 0x14, 0x03, 0x00, 0x1D, 0x05, 0x09, 0x1D, 0x00, +/* 0000CB90 */ 0x93, 0x02, 0x1D, 0x00, 0x00, 0x93, 0x04, 0x1F, 0x02, 0x00, 0x43, 0x1E, 0x1F, 0x2D, 0x1F, 0x1E, +/* 0000CBA0 */ 0x06, 0x96, 0x04, 0x1F, 0x9D, 0x12, 0x1D, 0x1E, 0x08, 0x00, 0x09, 0x2B, 0x00, 0x93, 0x03, 0x1D, +/* 0000CBB0 */ 0x01, 0x00, 0x5F, 0x1D, 0x1D, 0x11, 0x14, 0x03, 0x00, 0x1D, 0x08, 0x09, 0x1A, 0x00, 0x93, 0x02, +/* 0000CBC0 */ 0x1D, 0x00, 0x00, 0x93, 0x04, 0x1F, 0x02, 0x00, 0x43, 0x1E, 0x1F, 0x2D, 0x1F, 0x1E, 0x06, 0x96, +/* 0000CBD0 */ 0x04, 0x1F, 0x9D, 0x13, 0x1D, 0x1E, 0x09, 0x00, 0x8F, 0x04, 0x06, 0x1D, 0x03, 0x00, 0x07, 0x04, +/* 0000CBE0 */ 0x00, 0x59, 0x00, 0x17, 0x8F, 0x04, 0x17, 0x1E, 0x04, 0x00, 0x5A, 0x01, 0x1E, 0x00, 0x00, 0xD0, +/* 0000CBF0 */ 0x1E, 0x03, 0x01, 0x00, 0xA1, 0x00, 0x14, 0x1E, 0xA1, 0x01, 0x15, 0x1E, 0xA1, 0x02, 0x16, 0x1E, +/* 0000CC00 */ 0x5A, 0x02, 0x1E, 0x00, 0x00, 0xD6, 0x00, 0x1E, 0x5A, 0x03, 0x1E, 0x00, 0x00, 0xF0, 0x04, 0xFF, +/* 0000CC10 */ 0x1D, 0x00, 0x00, 0x93, 0x04, 0x1D, 0x02, 0x00, 0x11, 0x03, 0x00, 0x1D, 0x03, 0x09, 0x32, 0x00, +/* 0000CC20 */ 0x8F, 0x04, 0x06, 0x1D, 0x03, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x17, 0x8F, 0x04, 0x19, 0x1E, +/* 0000CC30 */ 0x05, 0x00, 0x5A, 0x01, 0x1E, 0x01, 0x00, 0x93, 0x02, 0x1E, 0x00, 0x00, 0x5A, 0x02, 0x1E, 0x01, +/* 0000CC40 */ 0x00, 0x5A, 0x03, 0x18, 0x01, 0x00, 0xF0, 0x04, 0x1D, 0x1D, 0x01, 0x00, 0x45, 0x00, 0x1D, 0x09, +/* 0000CC50 */ 0x05, 0x00, 0xA8, 0x1D, 0x46, 0x00, 0x1D, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xEB, +/* 0000CC60 */ 0x01, 0xFE, 0x76, 0x02, 0xFE, 0x76, 0x02, 0xFE, 0x76, 0x02, 0xFE, 0x76, 0x02, 0xFE, 0x77, 0x02, +/* 0000CC70 */ 0xFE, 0x77, 0x02, 0xFE, 0x77, 0x02, 0xFE, 0x71, 0x02, 0xFE, 0x71, 0x02, 0xFE, 0x71, 0x02, 0xFE, +/* 0000CC80 */ 0x71, 0x02, 0xFE, 0x71, 0x02, 0xFE, 0x71, 0x02, 0xFE, 0x6C, 0x02, 0xFE, 0x75, 0x02, 0xFE, 0x75, +/* 0000CC90 */ 0x02, 0xFE, 0x75, 0x02, 0xFF, 0xDA, 0x40, 0x02, 0x00, 0x1E, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, +/* 0000CCA0 */ 0x23, 0x00, 0x09, 0x00, 0x2B, 0x00, 0x03, 0x00, 0x1C, 0x00, 0x0D, 0x00, 0x2B, 0x00, 0x1F, 0x00, +/* 0000CCB0 */ 0x5B, 0x00, 0x1D, 0x00, 0x44, 0x00, 0x11, 0x00, 0x3A, 0x00, 0x1A, 0x00, 0x86, 0x00, 0x0D, 0x00, +/* 0000CCC0 */ 0x28, 0x00, 0x11, 0x00, 0x3A, 0x00, 0x1D, 0x00, 0x3F, 0x00, 0x11, 0x00, 0x3A, 0x00, 0x1A, 0x00, +/* 0000CCD0 */ 0x56, 0x00, 0x0D, 0x00, 0x29, 0x00, 0x1F, 0x00, 0x5A, 0x00, 0x1D, 0x00, 0x3C, 0x00, 0x1F, 0x00, +/* 0000CCE0 */ 0x57, 0x00, 0x1D, 0x00, 0x40, 0x00, 0x11, 0x00, 0x38, 0x00, 0x1A, 0x00, 0x57, 0x00, 0x0D, 0x00, +/* 0000CCF0 */ 0x27, 0x00, 0x1A, 0x00, 0x3A, 0x00, 0x0D, 0x00, 0x30, 0x00, 0x11, 0x00, 0x40, 0x00, 0x1D, 0x00, +/* 0000CD00 */ 0x43, 0x00, 0x11, 0x00, 0x3F, 0x00, 0x1A, 0x00, 0x5A, 0x00, 0x3B, 0x00, 0x1C, 0x01, 0x49, 0x00, +/* 0000CD10 */ 0x5B, 0x00, 0x00, 0x17, 0xCD, 0x00, 0x00, 0x7F, 0x4C, 0x06, 0x01, 0x00, 0x10, 0x03, 0x00, 0xFE, +/* 0000CD20 */ 0xC8, 0x0C, 0x55, 0xA2, 0x41, 0xD1, 0x00, 0xB5, 0xFF, 0xD6, 0x47, 0x02, 0x00, 0xFF, 0xD6, 0x47, +/* 0000CD30 */ 0x02, 0x00, 0x41, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0xD6, 0x47, 0x02, 0x00, 0x8D, 0x8D, 0x05, +/* 0000CD40 */ 0x03, 0x05, 0x0D, 0x0D, 0x05, 0x01, 0x01, 0x03, 0x04, 0x01, 0x01, 0x35, 0x8F, 0x01, 0x03, 0x05, +/* 0000CD50 */ 0x00, 0x00, 0x98, 0x05, 0x05, 0x03, 0x00, 0x00, 0x0E, 0x21, 0x00, 0x05, 0x8F, 0x01, 0x02, 0x05, +/* 0000CD60 */ 0x01, 0x00, 0x8F, 0x01, 0x04, 0x07, 0x02, 0x00, 0x4A, 0x07, 0x43, 0x06, 0x07, 0x2D, 0x07, 0x06, +/* 0000CD70 */ 0x02, 0x01, 0x43, 0x01, 0x01, 0x04, 0x07, 0x9D, 0x03, 0x05, 0x06, 0x00, 0x00, 0xA8, 0x00, 0x24, +/* 0000CD80 */ 0x00, 0xFF, 0xFB, 0x47, 0x02, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x2C, 0x00, 0x23, +/* 0000CD90 */ 0x00, 0x3B, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x13, 0x10, 0x43, 0x00, 0xFE, 0x69, 0x0C, 0x0C, +/* 0000CDA0 */ 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x2A, 0x04, 0xB3, 0xFF, 0xE0, 0x36, 0x02, 0x00, 0xFF, 0xE0, 0x36, +/* 0000CDB0 */ 0x02, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x04, 0x04, 0xFF, 0xE0, 0x36, 0x02, 0x00, 0xFE, 0x21, 0x09, +/* 0000CDC0 */ 0xFE, 0x21, 0x09, 0x07, 0x15, 0x1A, 0x05, 0x88, 0x82, 0x04, 0x08, 0x03, 0x20, 0x20, 0x20, 0x20, +/* 0000CDD0 */ 0x06, 0x19, 0x07, 0x08, 0x0B, 0x06, 0xFE, 0x42, 0x04, 0x06, 0xFE, 0x3F, 0x04, 0x0C, 0x05, 0xFE, +/* 0000CDE0 */ 0x44, 0x04, 0x06, 0xFE, 0x40, 0x04, 0x06, 0xFE, 0x35, 0x04, 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, +/* 0000CDF0 */ 0xF8, 0x03, 0x06, 0xFE, 0x2B, 0x03, 0x06, 0xFE, 0x2C, 0x03, 0x06, 0xFE, 0x2D, 0x03, 0x06, 0xFE, +/* 0000CE00 */ 0x36, 0x04, 0x06, 0xFE, 0x37, 0x04, 0x06, 0xFE, 0x38, 0x04, 0x06, 0xFE, 0x39, 0x04, 0x06, 0xFE, +/* 0000CE10 */ 0x3A, 0x04, 0xFE, 0x66, 0x02, 0xA8, 0x1A, 0x14, 0x03, 0x00, 0x15, 0x1A, 0x09, 0x24, 0x00, 0x8F, +/* 0000CE20 */ 0x04, 0x04, 0x1A, 0x00, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x03, 0xCD, 0x1B, 0x5A, 0x01, 0x1B, +/* 0000CE30 */ 0x00, 0x00, 0x5A, 0x02, 0x02, 0x00, 0x00, 0xF0, 0x03, 0x1A, 0x1A, 0x00, 0x00, 0x45, 0x15, 0x1A, +/* 0000CE40 */ 0x09, 0x22, 0x00, 0x8F, 0x04, 0x24, 0x1B, 0x01, 0x00, 0x6D, 0x1A, 0x1B, 0x00, 0x07, 0x02, 0x00, +/* 0000CE50 */ 0x59, 0x00, 0x1B, 0x5A, 0x01, 0x15, 0x01, 0x00, 0xF4, 0x02, 0x1A, 0x1A, 0x00, 0x00, 0x00, 0x00, +/* 0000CE60 */ 0x01, 0x00, 0x45, 0x15, 0x1A, 0x45, 0x18, 0x04, 0x14, 0x08, 0x00, 0x16, 0x05, 0x14, 0x03, 0x00, +/* 0000CE70 */ 0x16, 0x06, 0x09, 0x32, 0x00, 0x5F, 0x1A, 0x15, 0x01, 0xA8, 0x1B, 0x15, 0x24, 0x00, 0x1A, 0x1B, +/* 0000CE80 */ 0x5F, 0x1A, 0x15, 0x02, 0xA8, 0x1B, 0x15, 0x19, 0x00, 0x1A, 0x1B, 0x5F, 0x1A, 0x15, 0x03, 0xA8, +/* 0000CE90 */ 0x1B, 0x15, 0x0E, 0x00, 0x1A, 0x1B, 0x5F, 0x1A, 0x15, 0x04, 0xA8, 0x1B, 0x15, 0x03, 0x00, 0x1A, +/* 0000CEA0 */ 0x1B, 0x09, 0x03, 0x00, 0x45, 0x18, 0x07, 0x14, 0x08, 0x00, 0x16, 0x08, 0x14, 0x03, 0x00, 0x16, +/* 0000CEB0 */ 0x06, 0x09, 0x27, 0x00, 0x5F, 0x1A, 0x15, 0x05, 0xA8, 0x1B, 0x15, 0x19, 0x00, 0x1A, 0x1B, 0x5F, +/* 0000CEC0 */ 0x1A, 0x15, 0x06, 0xA8, 0x1B, 0x15, 0x0E, 0x00, 0x1A, 0x1B, 0x5F, 0x1A, 0x15, 0x07, 0xA8, 0x1B, +/* 0000CED0 */ 0x15, 0x03, 0x00, 0x1A, 0x1B, 0x09, 0x03, 0x00, 0x45, 0x18, 0x07, 0x0E, 0xC7, 0x00, 0x18, 0x14, +/* 0000CEE0 */ 0x08, 0x00, 0x17, 0x05, 0x14, 0x03, 0x00, 0x17, 0x09, 0x09, 0xBA, 0x00, 0x8F, 0x04, 0x16, 0x1A, +/* 0000CEF0 */ 0x02, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, 0x5A, 0x01, 0x15, 0x02, 0x00, 0x5A, 0x02, 0x0A, +/* 0000CF00 */ 0x02, 0x00, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00, 0x7B, +/* 0000CF10 */ 0x0C, 0x1B, 0x08, 0x7B, 0x04, 0x1B, 0x09, 0x7B, 0x04, 0x1B, 0x0A, 0x7B, 0x04, 0x1B, 0x0B, 0x5A, +/* 0000CF20 */ 0x03, 0x1B, 0x02, 0x00, 0xF0, 0x04, 0xFF, 0x1A, 0x02, 0x00, 0x8F, 0x04, 0x16, 0x1A, 0x02, 0x00, +/* 0000CF30 */ 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, 0x5A, 0x01, 0x15, 0x03, 0x00, 0x5A, 0x02, 0x10, 0x03, 0x00, +/* 0000CF40 */ 0xCE, 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00, 0x7B, 0x0C, 0x1B, +/* 0000CF50 */ 0x0C, 0x7B, 0x04, 0x1B, 0x0D, 0x7B, 0x04, 0x1B, 0x0E, 0x7B, 0x04, 0x1B, 0x0F, 0x5A, 0x03, 0x1B, +/* 0000CF60 */ 0x03, 0x00, 0xF0, 0x04, 0xFF, 0x1A, 0x03, 0x00, 0x8F, 0x04, 0x16, 0x1A, 0x02, 0x00, 0x07, 0x04, +/* 0000CF70 */ 0x00, 0x59, 0x00, 0x03, 0x5A, 0x01, 0x15, 0x04, 0x00, 0x5A, 0x02, 0x11, 0x04, 0x00, 0xCE, 0x30, +/* 0000CF80 */ 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00, 0x7B, 0x0C, 0x1B, 0x10, 0x7B, +/* 0000CF90 */ 0x04, 0x1B, 0x11, 0x7B, 0x04, 0x1B, 0x12, 0x7B, 0x04, 0x1B, 0x13, 0x5A, 0x03, 0x1B, 0x04, 0x00, +/* 0000CFA0 */ 0xF0, 0x04, 0xFF, 0x1A, 0x04, 0x00, 0x0E, 0xC7, 0x00, 0x18, 0x14, 0x08, 0x00, 0x17, 0x08, 0x14, +/* 0000CFB0 */ 0x03, 0x00, 0x17, 0x09, 0x09, 0xBA, 0x00, 0x8F, 0x04, 0x16, 0x1A, 0x02, 0x00, 0x07, 0x04, 0x00, +/* 0000CFC0 */ 0x59, 0x00, 0x03, 0x5A, 0x01, 0x15, 0x05, 0x00, 0x5A, 0x02, 0x12, 0x05, 0x00, 0xCE, 0x48, 0x00, +/* 0000CFD0 */ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00, 0x7B, 0x0C, 0x1B, 0x14, 0x7B, 0x04, +/* 0000CFE0 */ 0x1B, 0x15, 0x7B, 0x04, 0x1B, 0x16, 0x7B, 0x04, 0x1B, 0x17, 0x5A, 0x03, 0x1B, 0x05, 0x00, 0xF0, +/* 0000CFF0 */ 0x04, 0xFF, 0x1A, 0x05, 0x00, 0x8F, 0x04, 0x16, 0x1A, 0x02, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, +/* 0000D000 */ 0x03, 0x5A, 0x01, 0x15, 0x06, 0x00, 0x5A, 0x02, 0x13, 0x06, 0x00, 0xCE, 0x60, 0x00, 0x00, 0x00, +/* 0000D010 */ 0x04, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00, 0x7B, 0x0C, 0x1B, 0x18, 0x7B, 0x04, 0x1B, 0x19, +/* 0000D020 */ 0x7B, 0x04, 0x1B, 0x1A, 0x7B, 0x04, 0x1B, 0x1B, 0x5A, 0x03, 0x1B, 0x06, 0x00, 0xF0, 0x04, 0xFF, +/* 0000D030 */ 0x1A, 0x06, 0x00, 0x8F, 0x04, 0x16, 0x1A, 0x02, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, 0x5A, +/* 0000D040 */ 0x01, 0x15, 0x07, 0x00, 0x5A, 0x02, 0x14, 0x07, 0x00, 0xCE, 0x78, 0x00, 0x00, 0x00, 0x05, 0x00, +/* 0000D050 */ 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00, 0x7B, 0x0C, 0x1B, 0x1C, 0x7B, 0x04, 0x1B, 0x1D, 0x7B, 0x04, +/* 0000D060 */ 0x1B, 0x1E, 0x7B, 0x04, 0x1B, 0x1F, 0x5A, 0x03, 0x1B, 0x07, 0x00, 0xF0, 0x04, 0xFF, 0x1A, 0x07, +/* 0000D070 */ 0x00, 0x45, 0x00, 0x15, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x06, 0x90, 0x00, 0x78, 0x00, +/* 0000D080 */ 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, +/* 0000D090 */ 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x03, 0x04, +/* 0000D0A0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, +/* 0000D0B0 */ 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, +/* 0000D0C0 */ 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, +/* 0000D0D0 */ 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, +/* 0000D0E0 */ 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x18, 0x00, +/* 0000D0F0 */ 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, +/* 0000D100 */ 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, +/* 0000D110 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, +/* 0000D120 */ 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0xFE, 0x21, 0x03, 0xFE, 0x76, 0x02, 0xFE, 0x77, 0x02, 0xFE, +/* 0000D130 */ 0x71, 0x02, 0xFE, 0x6C, 0x02, 0xFE, 0x6E, 0x02, 0xFE, 0x70, 0x02, 0xFE, 0x73, 0x02, 0xFE, 0x97, +/* 0000D140 */ 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, +/* 0000D150 */ 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, +/* 0000D160 */ 0x95, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x97, +/* 0000D170 */ 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, +/* 0000D180 */ 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFF, 0x2A, 0x37, 0x02, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, +/* 0000D190 */ 0x0A, 0x00, 0x31, 0x00, 0x24, 0x00, 0x4F, 0x00, 0x22, 0x00, 0x49, 0x00, 0x03, 0x00, 0x29, 0x00, +/* 0000D1A0 */ 0x0D, 0x00, 0x45, 0x00, 0x2F, 0x00, 0x97, 0x00, 0x03, 0x00, 0x4E, 0x00, 0x0D, 0x00, 0x45, 0x00, +/* 0000D1B0 */ 0x24, 0x00, 0x7A, 0x00, 0x03, 0x00, 0x4F, 0x00, 0x11, 0x00, 0x57, 0x00, 0x3E, 0x00, 0xCB, 0x00, +/* 0000D1C0 */ 0x3E, 0x00, 0xCC, 0x00, 0x3E, 0x00, 0xD8, 0x00, 0x11, 0x00, 0x57, 0x00, 0x3E, 0x00, 0xCB, 0x00, +/* 0000D1D0 */ 0x3E, 0x00, 0xCD, 0x00, 0x3E, 0x00, 0xDB, 0x00, 0x08, 0x00, 0x1C, 0x00, 0x00, 0x7E, 0x5D, 0x18, +/* 0000D1E0 */ 0xC1, 0x53, 0x5A, 0x4B, 0x04, 0xFE, 0x7B, 0x0B, 0x18, 0xA0, 0x41, 0xD1, 0x00, 0xAA, 0xFF, 0xF3, +/* 0000D1F0 */ 0x06, 0x02, 0x00, 0xFF, 0xF3, 0x06, 0x02, 0x00, 0x06, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFF, 0xF3, +/* 0000D200 */ 0x06, 0x02, 0x00, 0xFE, 0xF9, 0x2E, 0xFE, 0xF9, 0x2E, 0x01, 0xFE, 0xE0, 0x01, 0x0D, 0x21, 0x27, +/* 0000D210 */ 0x09, 0xA8, 0xA8, 0x02, 0x0C, 0x01, 0x09, 0x1A, 0x1A, 0x1A, 0x1A, 0x05, 0x02, 0x24, 0x25, 0x26, +/* 0000D220 */ 0x27, 0x08, 0x06, 0xFE, 0x27, 0x03, 0x06, 0xFE, 0x0E, 0x04, 0x05, 0xFE, 0x0F, 0x04, 0x05, 0xFE, +/* 0000D230 */ 0x10, 0x04, 0x05, 0xFE, 0x11, 0x04, 0x06, 0xFE, 0x38, 0x03, 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, +/* 0000D240 */ 0x2B, 0x03, 0x0B, 0x06, 0xFE, 0x2D, 0x03, 0x07, 0x06, 0xFE, 0xD7, 0x03, 0x06, 0xFE, 0x24, 0x04, +/* 0000D250 */ 0x06, 0xFE, 0x18, 0x04, 0x06, 0xFE, 0x1B, 0x04, 0x06, 0xFE, 0x1C, 0x04, 0x06, 0xFE, 0xDA, 0x03, +/* 0000D260 */ 0x06, 0xFE, 0xDB, 0x03, 0x06, 0xFE, 0xDC, 0x03, 0x06, 0xFE, 0xDD, 0x03, 0x06, 0xFE, 0xDE, 0x03, +/* 0000D270 */ 0x06, 0xFE, 0x1F, 0x04, 0x06, 0xFE, 0xEC, 0x03, 0x0C, 0x06, 0xFE, 0x2C, 0x03, 0x06, 0xFE, 0xED, +/* 0000D280 */ 0x03, 0x06, 0xFE, 0xEE, 0x03, 0x06, 0xFE, 0x15, 0x04, 0x06, 0xFE, 0x77, 0x03, 0x05, 0xFE, 0x14, +/* 0000D290 */ 0x04, 0xFE, 0x23, 0x03, 0xA8, 0x21, 0xA8, 0x22, 0xA8, 0x23, 0x8F, 0x02, 0x32, 0x29, 0x00, 0x00, +/* 0000D2A0 */ 0x14, 0x0E, 0x00, 0x29, 0x03, 0x8F, 0x02, 0x32, 0x29, 0x00, 0x00, 0x14, 0x03, 0x00, 0x29, 0x04, +/* 0000D2B0 */ 0x09, 0xFB, 0x02, 0xE0, 0x00, 0x03, 0x01, 0xB9, 0x29, 0x00, 0x01, 0x66, 0x01, 0x00, 0x21, 0x29, +/* 0000D2C0 */ 0x95, 0x00, 0x02, 0x21, 0x8F, 0x02, 0x03, 0x2A, 0x01, 0x00, 0x6D, 0x29, 0x2A, 0x00, 0x07, 0x03, +/* 0000D2D0 */ 0x00, 0x59, 0x00, 0x2A, 0x8F, 0x02, 0x23, 0x2B, 0x02, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, +/* 0000D2E0 */ 0x5A, 0x01, 0x05, 0x01, 0x00, 0xB9, 0x2D, 0x00, 0x01, 0x66, 0x01, 0x01, 0x2C, 0x2D, 0x5A, 0x02, +/* 0000D2F0 */ 0x2C, 0x01, 0x00, 0xF0, 0x03, 0x2B, 0x2B, 0x01, 0x00, 0x5A, 0x01, 0x2B, 0x00, 0x00, 0x8F, 0x02, +/* 0000D300 */ 0x03, 0x2B, 0x01, 0x00, 0x5F, 0x2B, 0x2B, 0x01, 0x5F, 0x2B, 0x2B, 0x02, 0x5A, 0x02, 0x2B, 0x00, +/* 0000D310 */ 0x00, 0xF4, 0x03, 0xFF, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x02, 0x32, 0x29, 0x00, +/* 0000D320 */ 0x00, 0x14, 0x03, 0x00, 0x29, 0x03, 0x09, 0x85, 0x02, 0xE0, 0x01, 0x04, 0x02, 0xB9, 0x29, 0x00, +/* 0000D330 */ 0xB8, 0x01, 0x00, 0x00, 0x00, 0x29, 0x29, 0x01, 0x66, 0x01, 0x02, 0x22, 0x29, 0x95, 0x01, 0x02, +/* 0000D340 */ 0x22, 0x01, 0x66, 0x01, 0x03, 0x23, 0x29, 0x95, 0x01, 0x03, 0x23, 0x8F, 0x02, 0x23, 0x29, 0x02, +/* 0000D350 */ 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x06, 0x02, 0x00, 0x91, 0x01, 0x02, 0x2A, +/* 0000D360 */ 0x03, 0x00, 0x5A, 0x02, 0x2A, 0x02, 0x00, 0xF0, 0x03, 0xFF, 0x29, 0x02, 0x00, 0x8F, 0x02, 0x23, +/* 0000D370 */ 0x29, 0x02, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x07, 0x03, 0x00, 0x91, 0x01, +/* 0000D380 */ 0x03, 0x2A, 0x04, 0x00, 0x5A, 0x02, 0x2A, 0x03, 0x00, 0xF0, 0x03, 0xFF, 0x29, 0x03, 0x00, 0x8F, +/* 0000D390 */ 0x02, 0x16, 0x29, 0x05, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x91, 0x01, 0x02, 0x2A, 0x03, +/* 0000D3A0 */ 0x00, 0x5A, 0x01, 0x2A, 0x04, 0x00, 0x5A, 0x02, 0x08, 0x04, 0x00, 0xCE, 0x00, 0x00, 0x00, 0x00, +/* 0000D3B0 */ 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x8F, 0x01, 0x15, 0x2B, 0x06, 0x00, 0x4A, 0x2B, +/* 0000D3C0 */ 0x7B, 0x2B, 0x2A, 0x03, 0x7B, 0x0B, 0x2A, 0x04, 0x7B, 0x0B, 0x2A, 0x05, 0x5A, 0x03, 0x2A, 0x04, +/* 0000D3D0 */ 0x00, 0xF0, 0x04, 0xFF, 0x29, 0x04, 0x00, 0xD0, 0x29, 0x0B, 0x00, 0x00, 0xA1, 0x00, 0x0E, 0x29, +/* 0000D3E0 */ 0xA1, 0x01, 0x0F, 0x29, 0xA1, 0x02, 0x10, 0x29, 0xA1, 0x03, 0x11, 0x29, 0xA1, 0x04, 0x12, 0x29, +/* 0000D3F0 */ 0xA1, 0x05, 0x13, 0x29, 0xA1, 0x06, 0x14, 0x29, 0xA1, 0x07, 0x15, 0x29, 0xA1, 0x08, 0x16, 0x29, +/* 0000D400 */ 0xA1, 0x09, 0x17, 0x29, 0xA1, 0x0A, 0x18, 0x29, 0x96, 0x02, 0x29, 0x8F, 0x02, 0x16, 0x29, 0x05, +/* 0000D410 */ 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x91, 0x01, 0x02, 0x2A, 0x03, 0x00, 0x5A, 0x01, 0x2A, +/* 0000D420 */ 0x05, 0x00, 0x5A, 0x02, 0x19, 0x05, 0x00, 0xCE, 0x14, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, +/* 0000D430 */ 0x2A, 0x00, 0x00, 0x00, 0x91, 0x01, 0x02, 0x2B, 0x03, 0x00, 0x07, 0x01, 0x00, 0xC5, 0x01, 0x2B, +/* 0000D440 */ 0x2B, 0x06, 0x00, 0x7B, 0x2B, 0x2A, 0x06, 0x7B, 0x1A, 0x2A, 0x07, 0x7B, 0x1A, 0x2A, 0x08, 0x7B, +/* 0000D450 */ 0x1A, 0x2A, 0x09, 0x5A, 0x03, 0x2A, 0x05, 0x00, 0xF0, 0x04, 0xFF, 0x29, 0x05, 0x00, 0x8F, 0x02, +/* 0000D460 */ 0x04, 0x29, 0x07, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x91, 0x01, 0x02, 0x2A, 0x03, 0x00, +/* 0000D470 */ 0x5F, 0x2A, 0x2A, 0x0A, 0x5A, 0x01, 0x2A, 0x07, 0x00, 0x8F, 0x02, 0x09, 0x2A, 0x08, 0x00, 0x5F, +/* 0000D480 */ 0x2A, 0x2A, 0x0B, 0x5A, 0x02, 0x2A, 0x07, 0x00, 0xF0, 0x03, 0xFF, 0x29, 0x07, 0x00, 0x8F, 0x02, +/* 0000D490 */ 0x16, 0x29, 0x05, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x91, 0x01, 0x02, 0x2A, 0x03, 0x00, +/* 0000D4A0 */ 0x5F, 0x2A, 0x2A, 0x0C, 0x5A, 0x01, 0x2A, 0x08, 0x00, 0x5A, 0x02, 0x1C, 0x08, 0x00, 0xCE, 0x2C, +/* 0000D4B0 */ 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x91, 0x01, 0x02, 0x2B, 0x03, +/* 0000D4C0 */ 0x00, 0x7B, 0x2B, 0x2A, 0x0D, 0x7B, 0x0B, 0x2A, 0x0E, 0x7B, 0x1A, 0x2A, 0x0F, 0x7B, 0x0B, 0x2A, +/* 0000D4D0 */ 0x10, 0x5A, 0x03, 0x2A, 0x08, 0x00, 0xF0, 0x04, 0xFF, 0x29, 0x08, 0x00, 0x8F, 0x02, 0x16, 0x29, +/* 0000D4E0 */ 0x05, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x91, 0x01, 0x02, 0x2A, 0x03, 0x00, 0x5F, 0x2A, +/* 0000D4F0 */ 0x2A, 0x11, 0x5A, 0x01, 0x2A, 0x09, 0x00, 0x5A, 0x02, 0x1D, 0x09, 0x00, 0xCE, 0x44, 0x00, 0x00, +/* 0000D500 */ 0x00, 0x03, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x00, 0xB9, 0x2C, 0x00, 0xB8, 0x01, 0x00, 0x00, +/* 0000D510 */ 0x00, 0x2C, 0x2C, 0x01, 0x6A, 0x01, 0x04, 0x2B, 0x2C, 0x2A, 0x7B, 0x2B, 0x2A, 0x12, 0x7B, 0x0B, +/* 0000D520 */ 0x2A, 0x13, 0x7B, 0x1A, 0x2A, 0x14, 0x7B, 0x0B, 0x2A, 0x15, 0x5A, 0x03, 0x2A, 0x09, 0x00, 0xF0, +/* 0000D530 */ 0x04, 0xFF, 0x29, 0x09, 0x00, 0x8F, 0x02, 0x16, 0x29, 0x05, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, +/* 0000D540 */ 0x02, 0x91, 0x01, 0x02, 0x2A, 0x03, 0x00, 0x5F, 0x2A, 0x2A, 0x16, 0x5A, 0x01, 0x2A, 0x0A, 0x00, +/* 0000D550 */ 0x5A, 0x02, 0x1E, 0x0A, 0x00, 0xCE, 0x5C, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x2A, 0x00, +/* 0000D560 */ 0x00, 0x00, 0x8F, 0x02, 0x23, 0x2B, 0x02, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, +/* 0000D570 */ 0x20, 0x0B, 0x00, 0xB9, 0x2D, 0x00, 0xB8, 0x01, 0x00, 0x00, 0x00, 0x2D, 0x2D, 0x01, 0x66, 0x01, +/* 0000D580 */ 0x05, 0x2C, 0x2D, 0x5A, 0x02, 0x2C, 0x0B, 0x00, 0xF0, 0x03, 0x2B, 0x2B, 0x0B, 0x00, 0x7B, 0x2B, +/* 0000D590 */ 0x2A, 0x17, 0x7B, 0x1A, 0x2A, 0x18, 0x7B, 0x0B, 0x2A, 0x19, 0x5A, 0x03, 0x2A, 0x0A, 0x00, 0xF0, +/* 0000D5A0 */ 0x04, 0xFF, 0x29, 0x0A, 0x00, 0x91, 0x01, 0x02, 0x00, 0x03, 0x00, 0x09, 0x07, 0x00, 0xA8, 0x00, +/* 0000D5B0 */ 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x05, 0x70, 0x00, 0x5C, 0x00, 0x00, 0x00, 0x03, 0x03, +/* 0000D5C0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, +/* 0000D5D0 */ 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, +/* 0000D5E0 */ 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x2C, 0x00, +/* 0000D5F0 */ 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, +/* 0000D600 */ 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x03, 0x04, +/* 0000D610 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, +/* 0000D620 */ 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, +/* 0000D630 */ 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0xFE, 0x04, +/* 0000D640 */ 0x02, 0xFE, 0x2F, 0x02, 0xFE, 0x2D, 0x02, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x95, 0x01, +/* 0000D650 */ 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x24, 0x01, 0xFE, +/* 0000D660 */ 0x24, 0x01, 0xFE, 0x24, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, +/* 0000D670 */ 0x01, 0xFE, 0x24, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, +/* 0000D680 */ 0xFE, 0x24, 0x01, 0xFE, 0x98, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0x02, 0x01, 0x01, 0x00, +/* 0000D690 */ 0xFE, 0x0B, 0x04, 0x02, 0x02, 0x00, 0xFE, 0x32, 0x02, 0x01, 0xFE, 0x0B, 0x02, 0xFF, 0x09, 0x07, +/* 0000D6A0 */ 0x02, 0x00, 0x0F, 0x06, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x3E, 0x19, 0x57, 0x00, 0x79, 0x02, 0x30, +/* 0000D6B0 */ 0x00, 0x5A, 0x04, 0x22, 0x00, 0xD4, 0x02, 0x22, 0x00, 0x52, 0x00, 0x48, 0x00, 0x9B, 0x00, 0x34, +/* 0000D6C0 */ 0x00, 0x1F, 0x01, 0x53, 0x00, 0x99, 0x00, 0x30, 0x00, 0x48, 0x00, 0x4E, 0x00, 0x9E, 0x00, 0x59, +/* 0000D6D0 */ 0x00, 0xC2, 0x04, 0x70, 0x00, 0x16, 0x03, 0x09, 0x00, 0x84, 0x00, 0x07, 0x00, 0x16, 0x00, 0x00, +/* 0000D6E0 */ 0x31, 0xDF, 0x00, 0x00, 0xC0, 0xDD, 0x00, 0x00, 0x97, 0xDB, 0x00, 0x00, 0x29, 0xDA, 0x00, 0x00, +/* 0000D6F0 */ 0x02, 0xD8, 0x00, 0x00, 0xF8, 0xD6, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x03, 0x00, +/* 0000D700 */ 0xFE, 0x51, 0x0C, 0x39, 0xA0, 0x41, 0xD1, 0x00, 0xB1, 0xFF, 0xAD, 0x32, 0x02, 0x00, 0xFF, 0xAD, +/* 0000D710 */ 0x32, 0x02, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFF, 0xAD, 0x32, 0x02, 0x00, 0xFE, 0x56, +/* 0000D720 */ 0x02, 0xFE, 0x56, 0x02, 0x05, 0x05, 0x08, 0x04, 0x22, 0x21, 0x05, 0x03, 0x01, 0x05, 0x05, 0x05, +/* 0000D730 */ 0x05, 0x07, 0x06, 0xFE, 0x94, 0x03, 0x05, 0xFE, 0x22, 0x04, 0x06, 0xFE, 0x2F, 0x03, 0x91, 0x58, +/* 0000D740 */ 0x05, 0x2A, 0x08, 0x05, 0x15, 0x03, 0x00, 0x08, 0x02, 0x09, 0x24, 0x00, 0x8F, 0x05, 0x03, 0x09, +/* 0000D750 */ 0x00, 0x00, 0x6D, 0x08, 0x09, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x09, 0x5A, 0x01, 0x03, 0x00, +/* 0000D760 */ 0x00, 0x5A, 0x02, 0x04, 0x00, 0x00, 0xF4, 0x03, 0xFF, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0000D770 */ 0x8F, 0x05, 0x03, 0x09, 0x00, 0x00, 0x6D, 0x08, 0x09, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x09, +/* 0000D780 */ 0x5A, 0x01, 0x05, 0x01, 0x00, 0xF4, 0x02, 0x08, 0x08, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, +/* 0000D790 */ 0x06, 0x08, 0xA8, 0x08, 0x14, 0x08, 0x00, 0x06, 0x08, 0x5F, 0x08, 0x06, 0x02, 0x0F, 0x24, 0x00, +/* 0000D7A0 */ 0x08, 0x8F, 0x05, 0x03, 0x09, 0x00, 0x00, 0x6D, 0x08, 0x09, 0x03, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 0000D7B0 */ 0x09, 0x5A, 0x01, 0x03, 0x02, 0x00, 0x5A, 0x02, 0x04, 0x02, 0x00, 0xF4, 0x03, 0xFF, 0x08, 0x03, +/* 0000D7C0 */ 0x00, 0x00, 0x00, 0x02, 0x00, 0x5F, 0x00, 0x06, 0x04, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, +/* 0000D7D0 */ 0xFE, 0xB6, 0x02, 0xFE, 0x05, 0x02, 0xFE, 0x37, 0x02, 0xFE, 0xB6, 0x02, 0xFE, 0x57, 0x02, 0xFF, +/* 0000D7E0 */ 0xD3, 0x32, 0x02, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3C, 0x00, 0x24, 0x00, 0x84, +/* 0000D7F0 */ 0x00, 0x22, 0x00, 0x4B, 0x00, 0x0F, 0x00, 0x69, 0x00, 0x24, 0x00, 0x84, 0x00, 0x09, 0x00, 0x37, +/* 0000D800 */ 0x00, 0x00, 0x7F, 0x5D, 0x08, 0xC1, 0x03, 0x1A, 0x0F, 0x00, 0xFE, 0x3B, 0x0C, 0x1B, 0xA0, 0x41, +/* 0000D810 */ 0xC3, 0x00, 0xFE, 0xEE, 0x03, 0xAF, 0xFF, 0x00, 0x00, 0x00, 0x02, 0xFF, 0xD6, 0x2D, 0x02, 0x00, +/* 0000D820 */ 0xFF, 0xD6, 0x2D, 0x02, 0x00, 0x01, 0x08, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFF, 0xD6, 0x2D, 0x02, +/* 0000D830 */ 0x00, 0xFE, 0x08, 0x04, 0xFE, 0x08, 0x04, 0x02, 0xFE, 0xE2, 0x03, 0xFE, 0x10, 0x02, 0x06, 0x07, +/* 0000D840 */ 0x0B, 0x05, 0x3D, 0x3D, 0x05, 0x06, 0x07, 0x04, 0x04, 0x04, 0x04, 0x08, 0x09, 0x0A, 0x06, 0xFE, +/* 0000D850 */ 0x94, 0x03, 0x05, 0xFE, 0xC6, 0x04, 0x06, 0xFE, 0x2F, 0x03, 0x07, 0x08, 0xFE, 0x0B, 0x01, 0x58, +/* 0000D860 */ 0x07, 0x2A, 0x0B, 0x07, 0x15, 0x03, 0x00, 0x0B, 0x02, 0x09, 0x24, 0x00, 0x8F, 0x05, 0x03, 0x0C, +/* 0000D870 */ 0x00, 0x00, 0x6D, 0x0B, 0x0C, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0C, 0x5A, 0x01, 0x03, 0x00, +/* 0000D880 */ 0x00, 0x5A, 0x02, 0x04, 0x00, 0x00, 0xF4, 0x03, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0000D890 */ 0x8F, 0x05, 0x03, 0x0C, 0x00, 0x00, 0x6D, 0x0B, 0x0C, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0C, +/* 0000D8A0 */ 0x5A, 0x01, 0x07, 0x01, 0x00, 0xF4, 0x02, 0x0B, 0x0B, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x96, +/* 0000D8B0 */ 0x02, 0x0B, 0x93, 0x02, 0x0B, 0x01, 0x00, 0xA8, 0x0C, 0x14, 0x0D, 0x00, 0x0B, 0x0C, 0x93, 0x02, +/* 0000D8C0 */ 0x0B, 0x01, 0x00, 0x5F, 0x0B, 0x0B, 0x02, 0x0F, 0x24, 0x00, 0x0B, 0x8F, 0x05, 0x03, 0x0C, 0x00, +/* 0000D8D0 */ 0x00, 0x6D, 0x0B, 0x0C, 0x03, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0C, 0x5A, 0x01, 0x03, 0x02, 0x00, +/* 0000D8E0 */ 0x5A, 0x02, 0x04, 0x02, 0x00, 0xF4, 0x03, 0xFF, 0x0B, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x8F, +/* 0000D8F0 */ 0x05, 0x04, 0x0B, 0x02, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x06, 0xCD, 0x0C, 0x5A, 0x01, 0x0C, +/* 0000D900 */ 0x03, 0x00, 0x5A, 0x02, 0x05, 0x03, 0x00, 0xF0, 0x03, 0x0B, 0x0B, 0x03, 0x00, 0x96, 0x03, 0x0B, +/* 0000D910 */ 0x8F, 0x05, 0x06, 0x0B, 0x03, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x06, 0x8F, 0x05, 0x17, 0x0C, +/* 0000D920 */ 0x04, 0x00, 0x5A, 0x01, 0x0C, 0x04, 0x00, 0x8F, 0x03, 0x02, 0x0C, 0x05, 0x00, 0x5A, 0x02, 0x0C, +/* 0000D930 */ 0x04, 0x00, 0xD6, 0x00, 0x0C, 0x5A, 0x03, 0x0C, 0x04, 0x00, 0xF0, 0x04, 0xFF, 0x0B, 0x04, 0x00, +/* 0000D940 */ 0x8F, 0x05, 0x04, 0x0B, 0x02, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x06, 0x93, 0x03, 0x0C, 0x06, +/* 0000D950 */ 0x00, 0x5A, 0x01, 0x0C, 0x05, 0x00, 0xCD, 0x0C, 0x5A, 0x02, 0x0C, 0x05, 0x00, 0xF0, 0x03, 0x00, +/* 0000D960 */ 0x0B, 0x05, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB6, 0x02, 0xFE, 0x05, 0x02, +/* 0000D970 */ 0xFE, 0x37, 0x02, 0xFE, 0xB6, 0x02, 0xFF, 0x0B, 0x2E, 0x02, 0x00, 0x09, 0x02, 0x00, 0x00, 0x00, +/* 0000D980 */ 0x0B, 0x00, 0x3C, 0x00, 0x24, 0x00, 0x8C, 0x00, 0x22, 0x00, 0x4B, 0x00, 0x19, 0x00, 0x69, 0x00, +/* 0000D990 */ 0x24, 0x00, 0x8D, 0x00, 0x21, 0x00, 0x47, 0x00, 0x30, 0x00, 0x44, 0x01, 0x28, 0x00, 0x3E, 0x00, +/* 0000D9A0 */ 0x00, 0xA5, 0xD9, 0x00, 0x00, 0x7F, 0x4C, 0x06, 0x01, 0x00, 0x10, 0x03, 0x00, 0xFE, 0x46, 0x0C, +/* 0000D9B0 */ 0x48, 0xA2, 0x41, 0xD1, 0x00, 0xB0, 0xFF, 0x8B, 0x30, 0x02, 0x00, 0xFF, 0x8B, 0x30, 0x02, 0x00, +/* 0000D9C0 */ 0x41, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0x8B, 0x30, 0x02, 0x00, 0xF8, 0xF8, 0x05, 0x04, 0x06, +/* 0000D9D0 */ 0x0D, 0x0D, 0x06, 0x01, 0x01, 0x02, 0x05, 0x05, 0xFE, 0xC7, 0x04, 0x06, 0xFE, 0xD6, 0x03, 0x36, +/* 0000D9E0 */ 0x8F, 0x01, 0x02, 0x06, 0x00, 0x00, 0x2D, 0x07, 0x02, 0x04, 0x2B, 0x06, 0x06, 0x07, 0x15, 0x03, +/* 0000D9F0 */ 0x00, 0x06, 0x03, 0x09, 0x1C, 0x00, 0x8F, 0x01, 0x03, 0x06, 0x01, 0x00, 0x8F, 0x01, 0x02, 0x07, +/* 0000DA00 */ 0x00, 0x00, 0x2D, 0x08, 0x02, 0x04, 0x98, 0x07, 0x07, 0x08, 0x00, 0x00, 0x9D, 0x07, 0x06, 0x04, +/* 0000DA10 */ 0x00, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFF, 0xBB, 0x30, 0x02, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, +/* 0000DA20 */ 0x16, 0x00, 0x5A, 0x00, 0x1E, 0x00, 0x6D, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x03, +/* 0000DA30 */ 0x00, 0xFE, 0x20, 0x0C, 0x10, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x15, 0x04, 0xAE, 0xFF, 0x61, 0x27, +/* 0000DA40 */ 0x02, 0x00, 0xFF, 0x61, 0x27, 0x02, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0x61, 0x27, +/* 0000DA50 */ 0x02, 0x00, 0xFE, 0x7C, 0x02, 0xFE, 0x7C, 0x02, 0x07, 0x06, 0x0A, 0x07, 0x34, 0x32, 0x05, 0x06, +/* 0000DA60 */ 0x03, 0x06, 0x06, 0x06, 0x06, 0x09, 0x06, 0xFE, 0x94, 0x03, 0x05, 0xFE, 0x22, 0x04, 0x06, 0xFE, +/* 0000DA70 */ 0x2F, 0x03, 0x08, 0xEA, 0x58, 0x07, 0x8F, 0x05, 0x24, 0x0B, 0x00, 0x00, 0x6D, 0x0A, 0x0B, 0x00, +/* 0000DA80 */ 0x07, 0x02, 0x00, 0x59, 0x00, 0x0B, 0x5A, 0x01, 0x06, 0x00, 0x00, 0xF4, 0x02, 0x0A, 0x0A, 0x00, +/* 0000DA90 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x06, 0x0A, 0x2A, 0x0A, 0x07, 0x15, 0x03, 0x00, 0x0A, 0x02, +/* 0000DAA0 */ 0x09, 0x24, 0x00, 0x8F, 0x05, 0x03, 0x0B, 0x01, 0x00, 0x6D, 0x0A, 0x0B, 0x01, 0x07, 0x03, 0x00, +/* 0000DAB0 */ 0x59, 0x00, 0x0B, 0x5A, 0x01, 0x03, 0x01, 0x00, 0x5A, 0x02, 0x04, 0x01, 0x00, 0xF4, 0x03, 0xFF, +/* 0000DAC0 */ 0x0A, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x8F, 0x05, 0x03, 0x0B, 0x01, 0x00, 0x6D, 0x0A, 0x0B, +/* 0000DAD0 */ 0x02, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0B, 0x5A, 0x01, 0x07, 0x02, 0x00, 0xF4, 0x02, 0x0A, 0x0A, +/* 0000DAE0 */ 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x45, 0x08, 0x0A, 0xA8, 0x0A, 0x14, 0x08, 0x00, 0x08, 0x0A, +/* 0000DAF0 */ 0x5F, 0x0A, 0x08, 0x03, 0x0F, 0x24, 0x00, 0x0A, 0x8F, 0x05, 0x03, 0x0B, 0x01, 0x00, 0x6D, 0x0A, +/* 0000DB00 */ 0x0B, 0x04, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0B, 0x5A, 0x01, 0x03, 0x03, 0x00, 0x5A, 0x02, 0x04, +/* 0000DB10 */ 0x03, 0x00, 0xF4, 0x03, 0xFF, 0x0A, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x8F, 0x05, 0x0C, 0x0A, +/* 0000DB20 */ 0x02, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x05, 0x8F, 0x05, 0x03, 0x0C, 0x01, 0x00, 0x6D, 0x0B, +/* 0000DB30 */ 0x0C, 0x05, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0C, 0x5A, 0x01, 0x06, 0x05, 0x00, 0x5A, 0x02, 0x08, +/* 0000DB40 */ 0x05, 0x00, 0xF4, 0x03, 0x0B, 0x0B, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x5A, 0x01, 0x0B, 0x04, +/* 0000DB50 */ 0x00, 0xF0, 0x02, 0x00, 0x0A, 0x04, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x23, +/* 0000DB60 */ 0x03, 0xFE, 0xB6, 0x02, 0xFE, 0x05, 0x02, 0xFE, 0x37, 0x02, 0xFE, 0xB6, 0x02, 0xFE, 0xF8, 0x01, +/* 0000DB70 */ 0xFF, 0x8A, 0x27, 0x02, 0x00, 0x08, 0x02, 0x00, 0x00, 0x00, 0x22, 0x00, 0x2F, 0x00, 0x0B, 0x00, +/* 0000DB80 */ 0x38, 0x00, 0x24, 0x00, 0x7C, 0x00, 0x22, 0x00, 0x47, 0x00, 0x0F, 0x00, 0x65, 0x00, 0x24, 0x00, +/* 0000DB90 */ 0x7C, 0x00, 0x40, 0x00, 0x47, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, +/* 0000DBA0 */ 0x04, 0x0C, 0x10, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x2F, 0x03, 0xAD, 0xFF, 0xEB, 0x22, 0x02, 0x00, +/* 0000DBB0 */ 0xFF, 0xEB, 0x22, 0x02, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x03, 0x01, 0xFF, 0xEB, 0x22, 0x02, 0x00, +/* 0000DBC0 */ 0xFE, 0x1E, 0x04, 0xFE, 0x1E, 0x04, 0x09, 0x05, 0x0B, 0x05, 0x5E, 0x57, 0x05, 0x09, 0x0A, 0x06, +/* 0000DBD0 */ 0x06, 0x06, 0x06, 0x0A, 0x08, 0x06, 0xFE, 0x2F, 0x03, 0x07, 0xFE, 0x8A, 0x01, 0x58, 0x07, 0x4E, +/* 0000DBE0 */ 0x08, 0x4E, 0x09, 0x15, 0x05, 0x00, 0x05, 0x02, 0xA8, 0x0B, 0x45, 0x05, 0x0B, 0x15, 0x05, 0x00, +/* 0000DBF0 */ 0x06, 0x02, 0xA8, 0x0B, 0x45, 0x06, 0x0B, 0x4E, 0x08, 0x4E, 0x09, 0x8F, 0x05, 0x07, 0x0B, 0x00, +/* 0000DC00 */ 0x00, 0x14, 0x0A, 0x00, 0x07, 0x0B, 0xA8, 0x0B, 0x14, 0x03, 0x00, 0x07, 0x0B, 0x09, 0x1E, 0x00, +/* 0000DC10 */ 0x8F, 0x01, 0x02, 0x0B, 0x01, 0x00, 0x4A, 0x0B, 0x07, 0x03, 0x00, 0x5A, 0x01, 0x05, 0x00, 0x00, +/* 0000DC20 */ 0x5A, 0x02, 0x06, 0x00, 0x00, 0xC5, 0x03, 0x00, 0x0B, 0x00, 0x00, 0x09, 0x37, 0x01, 0x8F, 0x05, +/* 0000DC30 */ 0x24, 0x0C, 0x02, 0x00, 0x6D, 0x0B, 0x0C, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0C, 0x5A, 0x01, +/* 0000DC40 */ 0x07, 0x01, 0x00, 0xF4, 0x02, 0x0B, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, 0x08, 0x0B, +/* 0000DC50 */ 0x8F, 0x05, 0x12, 0x0B, 0x03, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x08, 0x02, +/* 0000DC60 */ 0x00, 0xF0, 0x02, 0x0B, 0x0B, 0x02, 0x00, 0x0F, 0x1F, 0x00, 0x0B, 0x8F, 0x05, 0x03, 0x0C, 0x04, +/* 0000DC70 */ 0x00, 0x6D, 0x0B, 0x0C, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0C, 0x5A, 0x01, 0x03, 0x03, 0x00, +/* 0000DC80 */ 0xF4, 0x02, 0xFF, 0x0B, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x8F, 0x05, 0x03, 0x0C, 0x04, 0x00, +/* 0000DC90 */ 0x6D, 0x0B, 0x0C, 0x02, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0C, 0x5A, 0x01, 0x08, 0x04, 0x00, 0xF4, +/* 0000DCA0 */ 0x02, 0x0B, 0x0B, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x45, 0x09, 0x0B, 0xA8, 0x0B, 0x14, 0x03, +/* 0000DCB0 */ 0x00, 0x09, 0x0B, 0x09, 0x45, 0x00, 0x8F, 0x05, 0x04, 0x0B, 0x05, 0x00, 0x07, 0x03, 0x00, 0x59, +/* 0000DCC0 */ 0x00, 0x02, 0xCD, 0x0C, 0x5A, 0x01, 0x0C, 0x05, 0x00, 0x5A, 0x02, 0x04, 0x05, 0x00, 0xF0, 0x03, +/* 0000DCD0 */ 0x0B, 0x0B, 0x05, 0x00, 0x45, 0x09, 0x0B, 0x8F, 0x05, 0x03, 0x0C, 0x04, 0x00, 0x6D, 0x0B, 0x0C, +/* 0000DCE0 */ 0x03, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0C, 0x5A, 0x01, 0x08, 0x06, 0x00, 0x5A, 0x02, 0x09, 0x06, +/* 0000DCF0 */ 0x00, 0xF4, 0x03, 0xFF, 0x0B, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x8F, 0x02, 0x02, 0x0B, 0x06, +/* 0000DD00 */ 0x00, 0x4A, 0x0B, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x09, 0x07, 0x00, 0x5A, 0x02, +/* 0000DD10 */ 0x05, 0x07, 0x00, 0x5A, 0x03, 0x06, 0x07, 0x00, 0xF0, 0x04, 0xFF, 0x0B, 0x07, 0x00, 0x45, 0x0B, +/* 0000DD20 */ 0x09, 0x8F, 0x05, 0x06, 0x0C, 0x07, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x8F, 0x05, 0x1A, +/* 0000DD30 */ 0x0D, 0x08, 0x00, 0x5A, 0x01, 0x0D, 0x08, 0x00, 0x8F, 0x01, 0x03, 0x0D, 0x09, 0x00, 0x4A, 0x0D, +/* 0000DD40 */ 0x5A, 0x02, 0x0D, 0x08, 0x00, 0x5A, 0x03, 0x08, 0x08, 0x00, 0xF0, 0x04, 0x0C, 0x0C, 0x08, 0x00, +/* 0000DD50 */ 0x77, 0x0C, 0x0B, 0x04, 0x5F, 0x0B, 0x09, 0x05, 0x82, 0x0B, 0x0B, 0x06, 0x01, 0x45, 0x00, 0x08, +/* 0000DD60 */ 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x21, 0x03, 0xFE, 0xB2, 0x02, 0xFE, 0x05, 0x02, +/* 0000DD70 */ 0xFE, 0x06, 0x02, 0xFE, 0x57, 0x02, 0xFE, 0x57, 0x02, 0xFF, 0x01, 0x23, 0x02, 0x00, 0x10, 0x06, +/* 0000DD80 */ 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0E, 0x00, 0x2B, 0x00, 0x15, 0x00, 0x43, 0x00, 0x1E, +/* 0000DD90 */ 0x00, 0x56, 0x00, 0x22, 0x00, 0x38, 0x00, 0x1B, 0x00, 0x38, 0x00, 0x1F, 0x00, 0x9B, 0x00, 0x22, +/* 0000DDA0 */ 0x00, 0x47, 0x00, 0x0A, 0x00, 0x3A, 0x00, 0x21, 0x00, 0x3F, 0x00, 0x24, 0x00, 0x58, 0x00, 0x23, +/* 0000DDB0 */ 0x00, 0x4D, 0x00, 0x36, 0x00, 0x65, 0x00, 0x09, 0x00, 0x3D, 0x00, 0x08, 0x00, 0x1C, 0x00, 0x00, +/* 0000DDC0 */ 0x7F, 0x5C, 0x0A, 0xC1, 0x07, 0x10, 0x03, 0x00, 0xFE, 0xF7, 0x0B, 0x62, 0xA0, 0x41, 0xF1, 0x00, +/* 0000DDD0 */ 0xAC, 0xFF, 0x9D, 0x20, 0x02, 0x00, 0xFF, 0x9D, 0x20, 0x02, 0x00, 0x0B, 0xFE, 0x00, 0x90, 0x01, +/* 0000DDE0 */ 0x01, 0xFF, 0x9D, 0x20, 0x02, 0x00, 0xFE, 0xE1, 0x01, 0xFE, 0xE1, 0x01, 0x08, 0x09, 0x0E, 0x07, +/* 0000DDF0 */ 0x38, 0x36, 0x04, 0x02, 0x06, 0x06, 0x03, 0x03, 0x03, 0x03, 0x01, 0x0D, 0x07, 0x06, 0xFE, 0xA4, +/* 0000DE00 */ 0x03, 0x05, 0xFE, 0x0F, 0x04, 0x06, 0xFE, 0x0E, 0x04, 0x08, 0x01, 0x00, 0x01, 0x01, 0xF6, 0xB1, +/* 0000DE10 */ 0x0B, 0x58, 0x09, 0x2A, 0x0E, 0x09, 0x15, 0x03, 0x00, 0x0E, 0x03, 0x09, 0x33, 0x00, 0x8F, 0x04, +/* 0000DE20 */ 0x0B, 0x0E, 0x00, 0x00, 0xE3, 0x0E, 0x09, 0x0E, 0x00, 0x0F, 0x24, 0x00, 0x0E, 0x8F, 0x04, 0x03, +/* 0000DE30 */ 0x0F, 0x01, 0x00, 0x6D, 0x0E, 0x0F, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0F, 0x5A, 0x01, 0x04, +/* 0000DE40 */ 0x00, 0x00, 0x5A, 0x02, 0x05, 0x00, 0x00, 0xF4, 0x03, 0xFF, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0000DE50 */ 0x00, 0x8F, 0x04, 0x04, 0x0E, 0x02, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x06, 0xCD, 0x0F, 0x5A, +/* 0000DE60 */ 0x01, 0x0F, 0x01, 0x00, 0x5A, 0x02, 0x02, 0x01, 0x00, 0xF0, 0x03, 0x0E, 0x0E, 0x01, 0x00, 0x45, +/* 0000DE70 */ 0x0A, 0x0E, 0x8F, 0x01, 0x02, 0x0E, 0x03, 0x00, 0x4A, 0x0E, 0x07, 0x04, 0x00, 0x59, 0x00, 0x06, +/* 0000DE80 */ 0x5A, 0x01, 0x0A, 0x02, 0x00, 0x98, 0x0F, 0x0B, 0x07, 0x00, 0x00, 0x5A, 0x02, 0x0F, 0x02, 0x00, +/* 0000DE90 */ 0x98, 0x0F, 0x0B, 0x08, 0x01, 0x00, 0x5A, 0x03, 0x0F, 0x02, 0x00, 0xF0, 0x04, 0xFF, 0x0E, 0x02, +/* 0000DEA0 */ 0x00, 0x8F, 0x04, 0x24, 0x0F, 0x04, 0x00, 0x6D, 0x0E, 0x0F, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 0000DEB0 */ 0x0F, 0x5A, 0x01, 0x09, 0x03, 0x00, 0xF4, 0x02, 0x0E, 0x0E, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, +/* 0000DEC0 */ 0x45, 0x0C, 0x0E, 0x8F, 0x04, 0x0C, 0x0E, 0x05, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x06, 0x8F, +/* 0000DED0 */ 0x04, 0x03, 0x10, 0x01, 0x00, 0x6D, 0x0F, 0x10, 0x02, 0x07, 0x03, 0x00, 0x59, 0x00, 0x10, 0x5A, +/* 0000DEE0 */ 0x01, 0x0C, 0x05, 0x00, 0x5A, 0x02, 0x0A, 0x05, 0x00, 0xF4, 0x03, 0x0F, 0x0F, 0x02, 0x00, 0x00, +/* 0000DEF0 */ 0x00, 0x05, 0x00, 0x5A, 0x01, 0x0F, 0x04, 0x00, 0xF0, 0x02, 0x00, 0x0E, 0x04, 0x00, 0x09, 0x02, +/* 0000DF00 */ 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB6, 0x02, 0xFE, 0x23, 0x03, 0xFE, 0xF8, 0x01, 0xFF, 0xBB, +/* 0000DF10 */ 0x20, 0x02, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x53, 0x00, 0x24, 0x00, 0x70, 0x00, +/* 0000DF20 */ 0x21, 0x00, 0x3A, 0x00, 0x2F, 0x00, 0x52, 0x00, 0x22, 0x00, 0x31, 0x00, 0x40, 0x00, 0x42, 0x00, +/* 0000DF30 */ 0x00, 0x7F, 0x5C, 0x1A, 0xC1, 0x43, 0x50, 0x03, 0x00, 0xFE, 0x7D, 0x0B, 0x0C, 0xB3, 0x41, 0xC1, +/* 0000DF40 */ 0x00, 0xFE, 0x0B, 0x04, 0xAB, 0xFF, 0x49, 0x07, 0x02, 0x00, 0xFF, 0x49, 0x07, 0x02, 0x00, 0x45, +/* 0000DF50 */ 0xFE, 0x00, 0x90, 0x04, 0x04, 0xFF, 0x49, 0x07, 0x02, 0x00, 0xFE, 0xF0, 0x18, 0xFE, 0xF0, 0x18, +/* 0000DF60 */ 0x18, 0x23, 0x37, 0x07, 0xFE, 0x82, 0x01, 0xFE, 0x64, 0x01, 0x04, 0x02, 0x22, 0x04, 0x10, 0x25, +/* 0000DF70 */ 0x25, 0x25, 0x25, 0x01, 0x36, 0x37, 0x06, 0xFE, 0x94, 0x03, 0x06, 0xFE, 0xBA, 0x04, 0x08, 0x06, +/* 0000DF80 */ 0xFE, 0x2F, 0x03, 0x0B, 0x06, 0xFE, 0xD6, 0x03, 0x07, 0x06, 0xFE, 0xE0, 0x03, 0x06, 0xFE, 0xA3, +/* 0000DF90 */ 0x03, 0x05, 0xFE, 0x9C, 0x03, 0x05, 0xFE, 0xDF, 0x03, 0x06, 0xFE, 0x18, 0x04, 0x06, 0xFE, 0x19, +/* 0000DFA0 */ 0x04, 0x06, 0xFE, 0x1A, 0x04, 0x06, 0xFE, 0x1B, 0x04, 0x06, 0xFE, 0x1C, 0x04, 0x06, 0xFE, 0x1D, +/* 0000DFB0 */ 0x04, 0x06, 0xFE, 0x1E, 0x04, 0x06, 0xFE, 0x37, 0x03, 0x06, 0xFE, 0xDA, 0x03, 0x01, 0x01, 0x01, +/* 0000DFC0 */ 0x15, 0x06, 0xFE, 0xDD, 0x03, 0x06, 0xFE, 0xDE, 0x03, 0x06, 0xFE, 0x1F, 0x04, 0x06, 0xFE, 0xA2, +/* 0000DFD0 */ 0x03, 0x06, 0xFE, 0x17, 0x04, 0x06, 0xFE, 0xDB, 0x03, 0x01, 0x00, 0x01, 0x14, 0x01, 0x03, 0x06, +/* 0000DFE0 */ 0xFE, 0xDC, 0x03, 0x05, 0xFE, 0xC4, 0x04, 0xFE, 0x6B, 0x06, 0x2A, 0x38, 0x23, 0x0D, 0x03, 0x00, +/* 0000DFF0 */ 0x38, 0x02, 0x09, 0x1A, 0x00, 0x8F, 0x04, 0x03, 0x39, 0x00, 0x00, 0x6D, 0x38, 0x39, 0x00, 0x07, +/* 0000E000 */ 0x01, 0x00, 0x59, 0x00, 0x39, 0xF4, 0x01, 0xFF, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, +/* 0000E010 */ 0x04, 0x06, 0x38, 0x01, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x04, 0x8F, 0x04, 0x14, 0x39, 0x02, +/* 0000E020 */ 0x00, 0x5A, 0x01, 0x39, 0x01, 0x00, 0x5A, 0x02, 0x23, 0x01, 0x00, 0x5A, 0x03, 0x03, 0x01, 0x00, +/* 0000E030 */ 0xF0, 0x04, 0x38, 0x38, 0x01, 0x00, 0x0E, 0x2C, 0x00, 0x38, 0x5F, 0x38, 0x23, 0x01, 0x0E, 0x24, +/* 0000E040 */ 0x00, 0x38, 0x8F, 0x04, 0x03, 0x39, 0x00, 0x00, 0x6D, 0x38, 0x39, 0x02, 0x07, 0x03, 0x00, 0x59, +/* 0000E050 */ 0x00, 0x39, 0x5A, 0x01, 0x05, 0x02, 0x00, 0x5A, 0x02, 0x05, 0x02, 0x00, 0xF4, 0x03, 0xFF, 0x38, +/* 0000E060 */ 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x77, 0x06, 0x23, 0x03, 0x2A, 0x38, 0x25, 0x14, 0x03, 0x00, +/* 0000E070 */ 0x38, 0x07, 0x09, 0x24, 0x00, 0x8F, 0x04, 0x04, 0x38, 0x03, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 0000E080 */ 0x04, 0xCD, 0x39, 0x5A, 0x01, 0x39, 0x03, 0x00, 0x5A, 0x02, 0x08, 0x03, 0x00, 0xF0, 0x03, 0x38, +/* 0000E090 */ 0x38, 0x03, 0x00, 0x45, 0x25, 0x38, 0x09, 0x22, 0x00, 0x8F, 0x04, 0x24, 0x39, 0x04, 0x00, 0x6D, +/* 0000E0A0 */ 0x38, 0x39, 0x04, 0x07, 0x02, 0x00, 0x59, 0x00, 0x39, 0x5A, 0x01, 0x25, 0x04, 0x00, 0xF4, 0x02, +/* 0000E0B0 */ 0x38, 0x38, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x45, 0x25, 0x38, 0x8F, 0x03, 0x02, 0x38, 0x05, +/* 0000E0C0 */ 0x00, 0x4A, 0x38, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x25, 0x05, 0x00, 0x5A, 0x02, +/* 0000E0D0 */ 0x09, 0x05, 0x00, 0x5A, 0x03, 0x0A, 0x05, 0x00, 0xD0, 0x39, 0x02, 0x00, 0x00, 0xA1, 0x00, 0x0B, +/* 0000E0E0 */ 0x39, 0xA1, 0x01, 0x0C, 0x39, 0x5A, 0x04, 0x39, 0x05, 0x00, 0x5A, 0x05, 0x0C, 0x05, 0x00, 0xF0, +/* 0000E0F0 */ 0x06, 0x38, 0x38, 0x05, 0x00, 0x45, 0x28, 0x38, 0x8F, 0x03, 0x02, 0x38, 0x05, 0x00, 0x4A, 0x38, +/* 0000E100 */ 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x25, 0x06, 0x00, 0x5A, 0x02, 0x0D, 0x06, 0x00, +/* 0000E110 */ 0x5A, 0x03, 0x0A, 0x06, 0x00, 0xD0, 0x39, 0x03, 0x01, 0x00, 0xA1, 0x00, 0x0E, 0x39, 0xA1, 0x01, +/* 0000E120 */ 0x0F, 0x39, 0xA1, 0x02, 0x10, 0x39, 0x5A, 0x04, 0x39, 0x06, 0x00, 0x5A, 0x05, 0x0E, 0x06, 0x00, +/* 0000E130 */ 0xF0, 0x06, 0x38, 0x38, 0x06, 0x00, 0x45, 0x29, 0x38, 0x8F, 0x04, 0x03, 0x38, 0x00, 0x00, 0x5F, +/* 0000E140 */ 0x38, 0x38, 0x05, 0x98, 0x38, 0x38, 0x29, 0x00, 0x00, 0x45, 0x2A, 0x38, 0x8F, 0x03, 0x02, 0x38, +/* 0000E150 */ 0x05, 0x00, 0x4A, 0x38, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x25, 0x07, 0x00, 0x5A, +/* 0000E160 */ 0x02, 0x10, 0x07, 0x00, 0x5A, 0x03, 0x0A, 0x07, 0x00, 0xA8, 0x39, 0x5A, 0x04, 0x39, 0x07, 0x00, +/* 0000E170 */ 0xA8, 0x39, 0x5A, 0x05, 0x39, 0x07, 0x00, 0xF0, 0x06, 0x38, 0x38, 0x07, 0x00, 0x45, 0x2B, 0x38, +/* 0000E180 */ 0x8F, 0x03, 0x02, 0x38, 0x05, 0x00, 0x4A, 0x38, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, +/* 0000E190 */ 0x25, 0x08, 0x00, 0x5A, 0x02, 0x11, 0x08, 0x00, 0x5A, 0x03, 0x0A, 0x08, 0x00, 0xD0, 0x39, 0x03, +/* 0000E1A0 */ 0x02, 0x00, 0xA1, 0x00, 0x12, 0x39, 0xA1, 0x01, 0x13, 0x39, 0xA1, 0x02, 0x14, 0x39, 0x5A, 0x04, +/* 0000E1B0 */ 0x39, 0x08, 0x00, 0x5A, 0x05, 0x13, 0x08, 0x00, 0xF0, 0x06, 0x38, 0x38, 0x08, 0x00, 0x45, 0x2C, +/* 0000E1C0 */ 0x38, 0xA8, 0x38, 0x45, 0x2D, 0x38, 0x8F, 0x03, 0x03, 0x38, 0x06, 0x00, 0x4A, 0x38, 0x07, 0x06, +/* 0000E1D0 */ 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x25, 0x09, 0x00, 0x5A, 0x02, 0x15, 0x09, 0x00, 0x5A, 0x03, +/* 0000E1E0 */ 0x16, 0x09, 0x00, 0x5A, 0x04, 0x17, 0x09, 0x00, 0x5A, 0x05, 0x16, 0x09, 0x00, 0xF0, 0x06, 0x38, +/* 0000E1F0 */ 0x38, 0x09, 0x00, 0x45, 0x2E, 0x38, 0xA8, 0x38, 0x45, 0x2F, 0x38, 0xA8, 0x38, 0x45, 0x30, 0x38, +/* 0000E200 */ 0xA8, 0x38, 0x45, 0x31, 0x38, 0x5F, 0x38, 0x25, 0x06, 0x45, 0x32, 0x38, 0x5F, 0x38, 0x25, 0x07, +/* 0000E210 */ 0x45, 0x33, 0x38, 0x2A, 0x38, 0x32, 0x15, 0x0B, 0x00, 0x38, 0x07, 0x2A, 0x38, 0x33, 0x15, 0x03, +/* 0000E220 */ 0x00, 0x38, 0x07, 0x09, 0x60, 0x00, 0x8F, 0x03, 0x03, 0x38, 0x06, 0x00, 0x4A, 0x38, 0x07, 0x06, +/* 0000E230 */ 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x25, 0x0A, 0x00, 0x5A, 0x02, 0x18, 0x0A, 0x00, 0x5A, 0x03, +/* 0000E240 */ 0x16, 0x0A, 0x00, 0x5A, 0x04, 0x17, 0x0A, 0x00, 0x5A, 0x05, 0x16, 0x0A, 0x00, 0xF0, 0x06, 0x38, +/* 0000E250 */ 0x38, 0x0A, 0x00, 0x45, 0x32, 0x38, 0x8F, 0x03, 0x03, 0x38, 0x06, 0x00, 0x4A, 0x38, 0x07, 0x06, +/* 0000E260 */ 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x25, 0x0B, 0x00, 0x5A, 0x02, 0x19, 0x0B, 0x00, 0x5A, 0x03, +/* 0000E270 */ 0x32, 0x0B, 0x00, 0x5A, 0x04, 0x17, 0x0B, 0x00, 0x5A, 0x05, 0x17, 0x0B, 0x00, 0xF0, 0x06, 0x38, +/* 0000E280 */ 0x38, 0x0B, 0x00, 0x45, 0x33, 0x38, 0x8F, 0x03, 0x02, 0x38, 0x05, 0x00, 0x4A, 0x38, 0x07, 0x06, +/* 0000E290 */ 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x25, 0x0C, 0x00, 0x5A, 0x02, 0x1A, 0x0C, 0x00, 0x5A, 0x03, +/* 0000E2A0 */ 0x1B, 0x0C, 0x00, 0xA8, 0x39, 0x5A, 0x04, 0x39, 0x0C, 0x00, 0x5A, 0x05, 0x06, 0x0C, 0x00, 0xF0, +/* 0000E2B0 */ 0x06, 0x38, 0x38, 0x0C, 0x00, 0x45, 0x34, 0x38, 0x8F, 0x03, 0x07, 0x38, 0x07, 0x00, 0x4A, 0x38, +/* 0000E2C0 */ 0x07, 0x02, 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x24, 0x0D, 0x00, 0xF0, 0x02, 0x38, 0x38, 0x0D, +/* 0000E2D0 */ 0x00, 0x45, 0x24, 0x38, 0x8F, 0x04, 0x2A, 0x38, 0x08, 0x00, 0x07, 0x05, 0x00, 0x59, 0x00, 0x04, +/* 0000E2E0 */ 0x5A, 0x01, 0x24, 0x0E, 0x00, 0x5A, 0x02, 0x28, 0x0E, 0x00, 0xD0, 0x39, 0x01, 0x03, 0x00, 0xA1, +/* 0000E2F0 */ 0x00, 0x1C, 0x39, 0x5A, 0x03, 0x39, 0x0E, 0x00, 0x8F, 0x04, 0x2B, 0x39, 0x09, 0x00, 0x5A, 0x04, +/* 0000E300 */ 0x39, 0x0E, 0x00, 0xF0, 0x05, 0x38, 0x38, 0x0E, 0x00, 0x45, 0x35, 0x38, 0x2A, 0x38, 0x2B, 0x15, +/* 0000E310 */ 0x03, 0x00, 0x38, 0x07, 0x09, 0x53, 0x00, 0x8F, 0x03, 0x06, 0x38, 0x0A, 0x00, 0x4A, 0x38, 0x07, +/* 0000E320 */ 0x02, 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x2B, 0x0F, 0x00, 0xF0, 0x02, 0x38, 0x38, 0x0F, 0x00, +/* 0000E330 */ 0x0F, 0x36, 0x00, 0x38, 0x8F, 0x04, 0x03, 0x39, 0x00, 0x00, 0x6D, 0x38, 0x39, 0x08, 0x07, 0x02, +/* 0000E340 */ 0x00, 0x59, 0x00, 0x39, 0x8F, 0x04, 0x0C, 0x3A, 0x0B, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x04, +/* 0000E350 */ 0x5A, 0x01, 0x2B, 0x11, 0x00, 0xF0, 0x02, 0x3A, 0x3A, 0x11, 0x00, 0x5A, 0x01, 0x3A, 0x10, 0x00, +/* 0000E360 */ 0xF4, 0x02, 0xFF, 0x38, 0x08, 0x00, 0x00, 0x00, 0x10, 0x00, 0x14, 0x03, 0x00, 0x29, 0x10, 0x09, +/* 0000E370 */ 0x1E, 0x01, 0x2A, 0x38, 0x2B, 0x14, 0x03, 0x00, 0x38, 0x07, 0x09, 0x1A, 0x00, 0x8F, 0x04, 0x03, +/* 0000E380 */ 0x39, 0x00, 0x00, 0x6D, 0x38, 0x39, 0x09, 0x07, 0x01, 0x00, 0x59, 0x00, 0x39, 0xF4, 0x01, 0xFF, +/* 0000E390 */ 0x38, 0x09, 0x00, 0x00, 0x00, 0x12, 0x00, 0x8F, 0x04, 0x06, 0x38, 0x01, 0x00, 0x07, 0x03, 0x00, +/* 0000E3A0 */ 0x59, 0x00, 0x04, 0x8F, 0x04, 0x1F, 0x39, 0x0C, 0x00, 0x5A, 0x01, 0x39, 0x13, 0x00, 0x5A, 0x02, +/* 0000E3B0 */ 0x2B, 0x13, 0x00, 0xF0, 0x03, 0x38, 0x38, 0x13, 0x00, 0x45, 0x2B, 0x38, 0xE7, 0x26, 0x00, 0x8F, +/* 0000E3C0 */ 0x04, 0x03, 0x39, 0x00, 0x00, 0x6D, 0x38, 0x39, 0x0A, 0x07, 0x02, 0x00, 0x59, 0x00, 0x39, 0x5A, +/* 0000E3D0 */ 0x01, 0x2B, 0x14, 0x00, 0xF4, 0x02, 0x38, 0x38, 0x0A, 0x00, 0x00, 0x00, 0x14, 0x00, 0x45, 0x2D, +/* 0000E3E0 */ 0x38, 0xEB, 0x09, 0x51, 0x00, 0xE9, 0x26, 0x06, 0x8F, 0x04, 0x22, 0x38, 0x0D, 0x00, 0x07, 0x02, +/* 0000E3F0 */ 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x26, 0x15, 0x00, 0xF0, 0x02, 0xFF, 0x38, 0x15, 0x00, 0x8F, +/* 0000E400 */ 0x04, 0x03, 0x39, 0x00, 0x00, 0x6D, 0x38, 0x39, 0x0B, 0x07, 0x02, 0x00, 0x59, 0x00, 0x39, 0x8F, +/* 0000E410 */ 0x04, 0x0C, 0x3A, 0x0B, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x2B, 0x17, 0x00, +/* 0000E420 */ 0xF0, 0x02, 0x3A, 0x3A, 0x17, 0x00, 0x5A, 0x01, 0x3A, 0x16, 0x00, 0xF4, 0x02, 0xFF, 0x38, 0x0B, +/* 0000E430 */ 0x00, 0x00, 0x00, 0x16, 0x00, 0xEB, 0x8F, 0x03, 0x03, 0x38, 0x06, 0x00, 0x4A, 0x38, 0x07, 0x06, +/* 0000E440 */ 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x25, 0x18, 0x00, 0x5A, 0x02, 0x1D, 0x18, 0x00, 0x5A, 0x03, +/* 0000E450 */ 0x1E, 0x18, 0x00, 0x5A, 0x04, 0x1F, 0x18, 0x00, 0x5A, 0x05, 0x2D, 0x18, 0x00, 0xF0, 0x06, 0x38, +/* 0000E460 */ 0x38, 0x18, 0x00, 0x45, 0x2F, 0x38, 0x8F, 0x04, 0x10, 0x39, 0x0E, 0x00, 0x6D, 0x38, 0x39, 0x0C, +/* 0000E470 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x39, 0x5A, 0x01, 0x2D, 0x19, 0x00, 0x5A, 0x02, 0x2F, 0x19, 0x00, +/* 0000E480 */ 0xF4, 0x03, 0x38, 0x38, 0x0C, 0x00, 0x00, 0x00, 0x19, 0x00, 0x45, 0x31, 0x38, 0x09, 0x93, 0x00, +/* 0000E490 */ 0xA8, 0x38, 0x45, 0x2B, 0x38, 0xA8, 0x38, 0x45, 0x2C, 0x38, 0x8F, 0x03, 0x03, 0x38, 0x06, 0x00, +/* 0000E4A0 */ 0x4A, 0x38, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x25, 0x1A, 0x00, 0x5A, 0x02, 0x1D, +/* 0000E4B0 */ 0x1A, 0x00, 0x5A, 0x03, 0x1E, 0x1A, 0x00, 0x5A, 0x04, 0x1F, 0x1A, 0x00, 0x5A, 0x05, 0x1E, 0x1A, +/* 0000E4C0 */ 0x00, 0xF0, 0x06, 0x38, 0x38, 0x1A, 0x00, 0x45, 0x2F, 0x38, 0x14, 0x03, 0x00, 0x29, 0x0F, 0x09, +/* 0000E4D0 */ 0x2A, 0x00, 0x8F, 0x04, 0x10, 0x39, 0x0E, 0x00, 0x6D, 0x38, 0x39, 0x0D, 0x07, 0x03, 0x00, 0x59, +/* 0000E4E0 */ 0x00, 0x39, 0x5A, 0x01, 0x2F, 0x1B, 0x00, 0x5A, 0x02, 0x1E, 0x1B, 0x00, 0xF4, 0x03, 0x38, 0x38, +/* 0000E4F0 */ 0x0D, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x45, 0x31, 0x38, 0x09, 0x27, 0x00, 0x8F, 0x04, 0x10, 0x39, +/* 0000E500 */ 0x0E, 0x00, 0x6D, 0x38, 0x39, 0x0E, 0x07, 0x03, 0x00, 0x59, 0x00, 0x39, 0x5A, 0x01, 0x2F, 0x1C, +/* 0000E510 */ 0x00, 0x5A, 0x02, 0x20, 0x1C, 0x00, 0xF4, 0x03, 0x38, 0x38, 0x0E, 0x00, 0x00, 0x00, 0x1C, 0x00, +/* 0000E520 */ 0x45, 0x31, 0x38, 0x8F, 0x03, 0x03, 0x38, 0x06, 0x00, 0x4A, 0x38, 0x07, 0x06, 0x00, 0x59, 0x00, +/* 0000E530 */ 0x04, 0x5A, 0x01, 0x25, 0x1D, 0x00, 0x5A, 0x02, 0x21, 0x1D, 0x00, 0x5A, 0x03, 0x2F, 0x1D, 0x00, +/* 0000E540 */ 0x5A, 0x04, 0x1F, 0x1D, 0x00, 0x5A, 0x05, 0x31, 0x1D, 0x00, 0xF0, 0x06, 0x38, 0x38, 0x1D, 0x00, +/* 0000E550 */ 0x45, 0x30, 0x38, 0x77, 0x28, 0x23, 0x0F, 0x5F, 0x38, 0x35, 0x10, 0x77, 0x38, 0x23, 0x11, 0x77, +/* 0000E560 */ 0x29, 0x23, 0x12, 0xA8, 0x38, 0x15, 0x03, 0x00, 0x2B, 0x38, 0x09, 0x04, 0x00, 0x77, 0x2B, 0x23, +/* 0000E570 */ 0x13, 0xA8, 0x38, 0x15, 0x03, 0x00, 0x2C, 0x38, 0x09, 0x18, 0x00, 0x77, 0x2C, 0x23, 0x14, 0x8F, +/* 0000E580 */ 0x04, 0x03, 0x38, 0x00, 0x00, 0x5F, 0x38, 0x38, 0x15, 0x98, 0x38, 0x38, 0x2C, 0x01, 0x00, 0x77, +/* 0000E590 */ 0x38, 0x23, 0x16, 0x77, 0x2E, 0x23, 0x17, 0x77, 0x2F, 0x23, 0x18, 0x77, 0x30, 0x23, 0x19, 0xA8, +/* 0000E5A0 */ 0x38, 0x15, 0x03, 0x00, 0x33, 0x38, 0x09, 0x08, 0x00, 0x77, 0x32, 0x23, 0x1A, 0x77, 0x33, 0x23, +/* 0000E5B0 */ 0x1B, 0x77, 0x2A, 0x23, 0x1C, 0x77, 0x34, 0x23, 0x1D, 0xE7, 0x23, 0x00, 0x8F, 0x04, 0x03, 0x39, +/* 0000E5C0 */ 0x00, 0x00, 0x6D, 0x38, 0x39, 0x1E, 0x07, 0x02, 0x00, 0x59, 0x00, 0x39, 0x5A, 0x01, 0x23, 0x1E, +/* 0000E5D0 */ 0x00, 0xF4, 0x02, 0xFF, 0x38, 0x1E, 0x00, 0x00, 0x00, 0x1E, 0x00, 0xEB, 0x09, 0x35, 0x00, 0xE9, +/* 0000E5E0 */ 0x27, 0x06, 0x8F, 0x04, 0x22, 0x38, 0x0D, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, +/* 0000E5F0 */ 0x27, 0x1F, 0x00, 0xF0, 0x02, 0xFF, 0x38, 0x1F, 0x00, 0x8F, 0x04, 0x03, 0x39, 0x00, 0x00, 0x6D, +/* 0000E600 */ 0x38, 0x39, 0x1F, 0x07, 0x01, 0x00, 0x59, 0x00, 0x39, 0xF4, 0x01, 0xFF, 0x38, 0x1F, 0x00, 0x00, +/* 0000E610 */ 0x00, 0x20, 0x00, 0xEB, 0x5F, 0x38, 0x23, 0x20, 0x0F, 0x04, 0x00, 0x38, 0x77, 0x22, 0x23, 0x21, +/* 0000E620 */ 0x45, 0x38, 0x23, 0x8F, 0x04, 0x06, 0x39, 0x01, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x04, 0x8F, +/* 0000E630 */ 0x04, 0x1E, 0x3A, 0x0F, 0x00, 0x5A, 0x01, 0x3A, 0x21, 0x00, 0x5F, 0x3A, 0x23, 0x22, 0x5A, 0x02, +/* 0000E640 */ 0x3A, 0x21, 0x00, 0xF0, 0x03, 0x39, 0x39, 0x21, 0x00, 0x77, 0x39, 0x38, 0x23, 0x77, 0x06, 0x23, +/* 0000E650 */ 0x24, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xAA, 0x02, 0xFE, 0x08, 0x02, 0xFE, 0xAB, 0x02, 0xFE, 0x08, +/* 0000E660 */ 0x02, 0xFE, 0x21, 0x03, 0xFE, 0x25, 0x02, 0xFE, 0x48, 0x02, 0xFE, 0x45, 0x02, 0xFE, 0xB7, 0x02, +/* 0000E670 */ 0xFE, 0xB8, 0x02, 0xFE, 0xFB, 0x01, 0xFE, 0xB7, 0x02, 0xFE, 0xFE, 0x00, 0xFE, 0xFE, 0x00, 0xFE, +/* 0000E680 */ 0xFE, 0x00, 0xFE, 0xC5, 0x04, 0xFE, 0x0D, 0x02, 0xFE, 0x09, 0x02, 0xFE, 0x64, 0x02, 0xFE, 0x33, +/* 0000E690 */ 0x02, 0xFE, 0x34, 0x02, 0xFE, 0x26, 0x02, 0xFE, 0x35, 0x02, 0xFE, 0x3B, 0x02, 0xFE, 0x3A, 0x02, +/* 0000E6A0 */ 0xFE, 0x38, 0x02, 0xFE, 0x3C, 0x02, 0xFE, 0x39, 0x02, 0xFE, 0x36, 0x02, 0xFE, 0x3F, 0x02, 0xFE, +/* 0000E6B0 */ 0xF9, 0x01, 0xFE, 0xAD, 0x02, 0xFE, 0x3D, 0x02, 0xFE, 0x3D, 0x02, 0xFE, 0x3D, 0x02, 0xFE, 0x3D, +/* 0000E6C0 */ 0x02, 0xFE, 0x37, 0x02, 0xFF, 0x9E, 0x07, 0x02, 0x00, 0x46, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x00, +/* 0000E6D0 */ 0x3B, 0x00, 0x1A, 0x00, 0x3F, 0x00, 0x33, 0x00, 0x9B, 0x00, 0x24, 0x00, 0x6D, 0x00, 0x04, 0x00, +/* 0000E6E0 */ 0x61, 0x00, 0x0B, 0x00, 0x3A, 0x00, 0x24, 0x00, 0x4F, 0x00, 0x22, 0x00, 0x49, 0x00, 0x3D, 0x00, +/* 0000E6F0 */ 0x71, 0x00, 0x41, 0x00, 0x73, 0x00, 0x13, 0x00, 0x49, 0x00, 0x34, 0x00, 0x5F, 0x00, 0x41, 0x00, +/* 0000E700 */ 0x7D, 0x00, 0x05, 0x00, 0x31, 0x00, 0x30, 0x00, 0x67, 0x00, 0x05, 0x00, 0x37, 0x00, 0x05, 0x00, +/* 0000E710 */ 0x37, 0x00, 0x05, 0x00, 0x3F, 0x00, 0x07, 0x00, 0x51, 0x00, 0x07, 0x00, 0x52, 0x00, 0x13, 0x00, +/* 0000E720 */ 0x7E, 0x00, 0x30, 0x00, 0x6F, 0x00, 0x30, 0x00, 0x96, 0x00, 0x32, 0x00, 0x9A, 0x00, 0x1C, 0x00, +/* 0000E730 */ 0x41, 0x00, 0x38, 0x00, 0xA2, 0x00, 0x28, 0x00, 0x62, 0x00, 0x36, 0x00, 0x58, 0x00, 0x08, 0x00, +/* 0000E740 */ 0x30, 0x00, 0x0B, 0x00, 0x3F, 0x00, 0x1A, 0x00, 0x4F, 0x00, 0x28, 0x00, 0x74, 0x00, 0x28, 0x00, +/* 0000E750 */ 0x4A, 0x00, 0x01, 0x00, 0x24, 0x00, 0x17, 0x00, 0x2E, 0x00, 0x37, 0x00, 0x5F, 0x00, 0x30, 0x00, +/* 0000E760 */ 0x76, 0x00, 0x2A, 0x00, 0x7D, 0x00, 0x05, 0x00, 0x2A, 0x00, 0x05, 0x00, 0x31, 0x00, 0x30, 0x00, +/* 0000E770 */ 0x69, 0x00, 0x08, 0x00, 0x33, 0x00, 0x2A, 0x00, 0x78, 0x00, 0x27, 0x00, 0x7B, 0x00, 0x30, 0x00, +/* 0000E780 */ 0xC6, 0x00, 0x04, 0x00, 0x38, 0x00, 0x08, 0x00, 0x43, 0x00, 0x04, 0x00, 0x2F, 0x00, 0x0A, 0x00, +/* 0000E790 */ 0x32, 0x00, 0x04, 0x00, 0x47, 0x00, 0x0A, 0x00, 0x39, 0x00, 0x04, 0x00, 0x46, 0x00, 0x14, 0x00, +/* 0000E7A0 */ 0x80, 0x00, 0x04, 0x00, 0x4C, 0x00, 0x04, 0x00, 0x4E, 0x00, 0x04, 0x00, 0x4F, 0x00, 0x0A, 0x00, +/* 0000E7B0 */ 0x42, 0x00, 0x04, 0x00, 0x58, 0x00, 0x04, 0x00, 0x67, 0x00, 0x04, 0x00, 0x40, 0x00, 0x07, 0x00, +/* 0000E7C0 */ 0xA9, 0x00, 0x25, 0x00, 0x3C, 0x00, 0x01, 0x00, 0x20, 0x00, 0x17, 0x00, 0x6B, 0x01, 0x1B, 0x00, +/* 0000E7D0 */ 0x4A, 0x00, 0x08, 0x00, 0x3B, 0x00, 0x04, 0x00, 0x70, 0x00, 0x2D, 0x00, 0x7E, 0x00, 0x06, 0x00, +/* 0000E7E0 */ 0x3B, 0x00, 0x00, 0x7E, 0x5C, 0x08, 0xC1, 0x53, 0x50, 0x4B, 0x04, 0xFE, 0x88, 0x0A, 0x14, 0xA0, +/* 0000E7F0 */ 0x41, 0xD1, 0x00, 0xA2, 0xFF, 0xF3, 0xD5, 0x01, 0x00, 0xFF, 0xF3, 0xD5, 0x01, 0x00, 0x06, 0xFE, +/* 0000E800 */ 0x00, 0x90, 0x01, 0x01, 0xFF, 0xF3, 0xD5, 0x01, 0x00, 0xFE, 0xA8, 0x30, 0xFE, 0xA8, 0x30, 0x0B, +/* 0000E810 */ 0x16, 0x1A, 0x09, 0x9B, 0x9B, 0x02, 0x0C, 0x09, 0x1A, 0x1A, 0x1A, 0x1A, 0x05, 0x02, 0x19, 0x1A, +/* 0000E820 */ 0x08, 0x06, 0xFE, 0x27, 0x03, 0x06, 0xFE, 0xE8, 0x03, 0x05, 0xFE, 0xE9, 0x03, 0x05, 0xFE, 0xEA, +/* 0000E830 */ 0x03, 0x05, 0xFE, 0xEB, 0x03, 0x06, 0xFE, 0x38, 0x03, 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, 0x2B, +/* 0000E840 */ 0x03, 0x0B, 0x06, 0xFE, 0x2D, 0x03, 0x07, 0x06, 0xFE, 0xEC, 0x03, 0x0C, 0x06, 0xFE, 0x2C, 0x03, +/* 0000E850 */ 0x06, 0xFE, 0xED, 0x03, 0x06, 0xFE, 0xEE, 0x03, 0x06, 0xFE, 0xF1, 0x03, 0x06, 0xFE, 0x77, 0x03, +/* 0000E860 */ 0x05, 0xFE, 0xF0, 0x03, 0xFE, 0xEF, 0x02, 0xA8, 0x16, 0xA8, 0x17, 0xA8, 0x18, 0x8F, 0x02, 0x32, +/* 0000E870 */ 0x1C, 0x00, 0x00, 0x14, 0x0E, 0x00, 0x1C, 0x03, 0x8F, 0x02, 0x32, 0x1C, 0x00, 0x00, 0x14, 0x03, +/* 0000E880 */ 0x00, 0x1C, 0x04, 0x09, 0xC7, 0x02, 0xE0, 0x00, 0x03, 0x01, 0xB9, 0x1C, 0x00, 0x01, 0x66, 0x01, +/* 0000E890 */ 0x00, 0x16, 0x1C, 0x95, 0x00, 0x02, 0x16, 0x8F, 0x02, 0x03, 0x1D, 0x01, 0x00, 0x6D, 0x1C, 0x1D, +/* 0000E8A0 */ 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x1D, 0x8F, 0x02, 0x23, 0x1E, 0x02, 0x00, 0x07, 0x03, 0x00, +/* 0000E8B0 */ 0x59, 0x00, 0x02, 0x5A, 0x01, 0x05, 0x01, 0x00, 0xB9, 0x20, 0x00, 0x01, 0x66, 0x01, 0x01, 0x1F, +/* 0000E8C0 */ 0x20, 0x5A, 0x02, 0x1F, 0x01, 0x00, 0xF0, 0x03, 0x1E, 0x1E, 0x01, 0x00, 0x5A, 0x01, 0x1E, 0x00, +/* 0000E8D0 */ 0x00, 0x8F, 0x02, 0x03, 0x1E, 0x01, 0x00, 0x5F, 0x1E, 0x1E, 0x01, 0x5F, 0x1E, 0x1E, 0x02, 0x5A, +/* 0000E8E0 */ 0x02, 0x1E, 0x00, 0x00, 0xF4, 0x03, 0xFF, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x02, +/* 0000E8F0 */ 0x32, 0x1C, 0x00, 0x00, 0x14, 0x03, 0x00, 0x1C, 0x03, 0x09, 0x51, 0x02, 0xE0, 0x01, 0x04, 0x02, +/* 0000E900 */ 0xB9, 0x1C, 0x00, 0xB8, 0x01, 0x00, 0x00, 0x00, 0x1C, 0x1C, 0x01, 0x66, 0x01, 0x02, 0x17, 0x1C, +/* 0000E910 */ 0x95, 0x01, 0x02, 0x17, 0x01, 0x66, 0x01, 0x03, 0x18, 0x1C, 0x95, 0x01, 0x03, 0x18, 0x8F, 0x02, +/* 0000E920 */ 0x23, 0x1C, 0x02, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x06, 0x02, 0x00, 0x91, +/* 0000E930 */ 0x01, 0x02, 0x1D, 0x03, 0x00, 0x5A, 0x02, 0x1D, 0x02, 0x00, 0xF0, 0x03, 0xFF, 0x1C, 0x02, 0x00, +/* 0000E940 */ 0x8F, 0x02, 0x23, 0x1C, 0x02, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x07, 0x03, +/* 0000E950 */ 0x00, 0x91, 0x01, 0x03, 0x1D, 0x04, 0x00, 0x5A, 0x02, 0x1D, 0x03, 0x00, 0xF0, 0x03, 0xFF, 0x1C, +/* 0000E960 */ 0x03, 0x00, 0x8F, 0x02, 0x16, 0x1C, 0x05, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x91, 0x01, +/* 0000E970 */ 0x02, 0x1D, 0x03, 0x00, 0x5A, 0x01, 0x1D, 0x04, 0x00, 0x5A, 0x02, 0x08, 0x04, 0x00, 0xCE, 0x00, +/* 0000E980 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0x8F, 0x01, 0x13, 0x1E, 0x06, +/* 0000E990 */ 0x00, 0x4A, 0x1E, 0x7B, 0x1E, 0x1D, 0x03, 0x7B, 0x0B, 0x1D, 0x04, 0x7B, 0x0B, 0x1D, 0x05, 0x5A, +/* 0000E9A0 */ 0x03, 0x1D, 0x04, 0x00, 0xF0, 0x04, 0xFF, 0x1C, 0x04, 0x00, 0x8F, 0x02, 0x16, 0x1C, 0x05, 0x00, +/* 0000E9B0 */ 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x91, 0x01, 0x02, 0x1D, 0x03, 0x00, 0x5A, 0x01, 0x1D, 0x05, +/* 0000E9C0 */ 0x00, 0x5A, 0x02, 0x0E, 0x05, 0x00, 0xCE, 0x14, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1D, +/* 0000E9D0 */ 0x00, 0x00, 0x00, 0x91, 0x01, 0x02, 0x1E, 0x03, 0x00, 0x07, 0x01, 0x00, 0xC5, 0x01, 0x1E, 0x1E, +/* 0000E9E0 */ 0x06, 0x00, 0x7B, 0x1E, 0x1D, 0x06, 0x7B, 0x0F, 0x1D, 0x07, 0x7B, 0x0F, 0x1D, 0x08, 0x7B, 0x0F, +/* 0000E9F0 */ 0x1D, 0x09, 0x5A, 0x03, 0x1D, 0x05, 0x00, 0xF0, 0x04, 0xFF, 0x1C, 0x05, 0x00, 0x8F, 0x02, 0x04, +/* 0000EA00 */ 0x1C, 0x07, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x91, 0x01, 0x02, 0x1D, 0x03, 0x00, 0x5F, +/* 0000EA10 */ 0x1D, 0x1D, 0x0A, 0x5A, 0x01, 0x1D, 0x07, 0x00, 0x8F, 0x02, 0x09, 0x1D, 0x08, 0x00, 0x5F, 0x1D, +/* 0000EA20 */ 0x1D, 0x0B, 0x5A, 0x02, 0x1D, 0x07, 0x00, 0xF0, 0x03, 0xFF, 0x1C, 0x07, 0x00, 0x8F, 0x02, 0x16, +/* 0000EA30 */ 0x1C, 0x05, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x91, 0x01, 0x02, 0x1D, 0x03, 0x00, 0x5F, +/* 0000EA40 */ 0x1D, 0x1D, 0x0C, 0x5A, 0x01, 0x1D, 0x08, 0x00, 0x5A, 0x02, 0x11, 0x08, 0x00, 0xCE, 0x2C, 0x00, +/* 0000EA50 */ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0x91, 0x01, 0x02, 0x1E, 0x03, 0x00, +/* 0000EA60 */ 0x7B, 0x1E, 0x1D, 0x0D, 0x7B, 0x0B, 0x1D, 0x0E, 0x7B, 0x0F, 0x1D, 0x0F, 0x7B, 0x0B, 0x1D, 0x10, +/* 0000EA70 */ 0x5A, 0x03, 0x1D, 0x08, 0x00, 0xF0, 0x04, 0xFF, 0x1C, 0x08, 0x00, 0x8F, 0x02, 0x16, 0x1C, 0x05, +/* 0000EA80 */ 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x91, 0x01, 0x02, 0x1D, 0x03, 0x00, 0x5F, 0x1D, 0x1D, +/* 0000EA90 */ 0x11, 0x5A, 0x01, 0x1D, 0x09, 0x00, 0x5A, 0x02, 0x12, 0x09, 0x00, 0xCE, 0x44, 0x00, 0x00, 0x00, +/* 0000EAA0 */ 0x03, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0xB9, 0x1F, 0x00, 0xB8, 0x01, 0x00, 0x00, 0x00, +/* 0000EAB0 */ 0x1F, 0x1F, 0x01, 0x6A, 0x01, 0x04, 0x1E, 0x1F, 0x1D, 0x7B, 0x1E, 0x1D, 0x12, 0x7B, 0x0B, 0x1D, +/* 0000EAC0 */ 0x13, 0x7B, 0x0F, 0x1D, 0x14, 0x7B, 0x0B, 0x1D, 0x15, 0x5A, 0x03, 0x1D, 0x09, 0x00, 0xF0, 0x04, +/* 0000EAD0 */ 0xFF, 0x1C, 0x09, 0x00, 0x8F, 0x02, 0x16, 0x1C, 0x05, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, +/* 0000EAE0 */ 0x91, 0x01, 0x02, 0x1D, 0x03, 0x00, 0x5F, 0x1D, 0x1D, 0x16, 0x5A, 0x01, 0x1D, 0x0A, 0x00, 0x5A, +/* 0000EAF0 */ 0x02, 0x13, 0x0A, 0x00, 0xCE, 0x5C, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, +/* 0000EB00 */ 0x00, 0x8F, 0x02, 0x23, 0x1E, 0x02, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x15, +/* 0000EB10 */ 0x0B, 0x00, 0xB9, 0x20, 0x00, 0xB8, 0x01, 0x00, 0x00, 0x00, 0x20, 0x20, 0x01, 0x66, 0x01, 0x05, +/* 0000EB20 */ 0x1F, 0x20, 0x5A, 0x02, 0x1F, 0x0B, 0x00, 0xF0, 0x03, 0x1E, 0x1E, 0x0B, 0x00, 0x7B, 0x1E, 0x1D, +/* 0000EB30 */ 0x17, 0x7B, 0x0F, 0x1D, 0x18, 0x7B, 0x0B, 0x1D, 0x19, 0x5A, 0x03, 0x1D, 0x0A, 0x00, 0xF0, 0x04, +/* 0000EB40 */ 0xFF, 0x1C, 0x0A, 0x00, 0x91, 0x01, 0x02, 0x00, 0x03, 0x00, 0x09, 0x07, 0x00, 0xA8, 0x00, 0x09, +/* 0000EB50 */ 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x05, 0x70, 0x00, 0x5C, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, +/* 0000EB60 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, +/* 0000EB70 */ 0x00, 0x44, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, +/* 0000EB80 */ 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x2C, 0x00, 0x00, +/* 0000EB90 */ 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, +/* 0000EBA0 */ 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, +/* 0000EBB0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, +/* 0000EBC0 */ 0x00, 0x95, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0000EBD0 */ 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0xFE, 0x04, 0x02, +/* 0000EBE0 */ 0xFE, 0x2F, 0x02, 0xFE, 0x2E, 0x02, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x95, 0x01, 0xFE, +/* 0000EBF0 */ 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x24, 0x01, 0xFE, 0x24, +/* 0000EC00 */ 0x01, 0xFE, 0x24, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, +/* 0000EC10 */ 0xFE, 0x24, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, +/* 0000EC20 */ 0x24, 0x01, 0xFE, 0x98, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0x02, 0x01, 0x01, 0x00, 0xFE, +/* 0000EC30 */ 0xE5, 0x03, 0x02, 0x02, 0x00, 0xFE, 0x4B, 0x02, 0x01, 0xFE, 0x4F, 0x02, 0xFF, 0x0A, 0xD6, 0x01, +/* 0000EC40 */ 0x00, 0x0E, 0x06, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x1F, 0x17, 0x57, 0x00, 0x17, 0x05, 0x30, 0x00, +/* 0000EC50 */ 0x7A, 0x04, 0x22, 0x00, 0x55, 0x04, 0x22, 0x00, 0x50, 0x00, 0x48, 0x00, 0x93, 0x00, 0x53, 0x00, +/* 0000EC60 */ 0x91, 0x00, 0x30, 0x00, 0x45, 0x00, 0x4E, 0x00, 0x96, 0x00, 0x59, 0x00, 0xA7, 0x05, 0x70, 0x00, +/* 0000EC70 */ 0x03, 0x03, 0x09, 0x00, 0x7C, 0x00, 0x07, 0x00, 0x16, 0x00, 0x00, 0x7D, 0xF5, 0x00, 0x00, 0x6F, +/* 0000EC80 */ 0xF3, 0x00, 0x00, 0x46, 0xF1, 0x00, 0x00, 0x60, 0xEF, 0x00, 0x00, 0x9D, 0xED, 0x00, 0x00, 0x93, +/* 0000EC90 */ 0xEC, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x65, 0x0B, 0x3A, 0xA0, +/* 0000ECA0 */ 0x41, 0xD1, 0x00, 0xA9, 0xFF, 0x75, 0x03, 0x02, 0x00, 0xFF, 0x75, 0x03, 0x02, 0x00, 0x09, 0xFE, +/* 0000ECB0 */ 0x00, 0x90, 0x01, 0x01, 0xFF, 0x75, 0x03, 0x02, 0x00, 0xFE, 0x45, 0x02, 0xFE, 0x45, 0x02, 0x05, +/* 0000ECC0 */ 0x05, 0x08, 0x04, 0x22, 0x21, 0x04, 0x03, 0x01, 0x05, 0x05, 0x05, 0x05, 0x07, 0x06, 0xFE, 0x94, +/* 0000ECD0 */ 0x03, 0x05, 0xFE, 0x09, 0x04, 0x06, 0xFE, 0x2E, 0x03, 0x91, 0x58, 0x05, 0x2A, 0x08, 0x05, 0x15, +/* 0000ECE0 */ 0x03, 0x00, 0x08, 0x02, 0x09, 0x24, 0x00, 0x8F, 0x04, 0x03, 0x09, 0x00, 0x00, 0x6D, 0x08, 0x09, +/* 0000ECF0 */ 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x09, 0x5A, 0x01, 0x03, 0x00, 0x00, 0x5A, 0x02, 0x04, 0x00, +/* 0000ED00 */ 0x00, 0xF4, 0x03, 0xFF, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x04, 0x03, 0x09, 0x00, +/* 0000ED10 */ 0x00, 0x6D, 0x08, 0x09, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x09, 0x5A, 0x01, 0x05, 0x01, 0x00, +/* 0000ED20 */ 0xF4, 0x02, 0x08, 0x08, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, 0x06, 0x08, 0xA8, 0x08, 0x14, +/* 0000ED30 */ 0x08, 0x00, 0x06, 0x08, 0x5F, 0x08, 0x06, 0x02, 0x0F, 0x24, 0x00, 0x08, 0x8F, 0x04, 0x03, 0x09, +/* 0000ED40 */ 0x00, 0x00, 0x6D, 0x08, 0x09, 0x03, 0x07, 0x03, 0x00, 0x59, 0x00, 0x09, 0x5A, 0x01, 0x03, 0x02, +/* 0000ED50 */ 0x00, 0x5A, 0x02, 0x04, 0x02, 0x00, 0xF4, 0x03, 0xFF, 0x08, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, +/* 0000ED60 */ 0x5F, 0x00, 0x06, 0x04, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB6, 0x02, 0xFE, 0x05, +/* 0000ED70 */ 0x02, 0xFE, 0x4E, 0x02, 0xFE, 0xB6, 0x02, 0xFE, 0x4C, 0x02, 0xFF, 0x9B, 0x03, 0x02, 0x00, 0x07, +/* 0000ED80 */ 0x02, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3C, 0x00, 0x24, 0x00, 0x7D, 0x00, 0x22, 0x00, 0x4B, 0x00, +/* 0000ED90 */ 0x0F, 0x00, 0x65, 0x00, 0x24, 0x00, 0x7D, 0x00, 0x09, 0x00, 0x38, 0x00, 0x00, 0x7F, 0x5C, 0x08, +/* 0000EDA0 */ 0xC1, 0x13, 0x10, 0x47, 0x00, 0xFE, 0x4F, 0x0B, 0x1B, 0xA0, 0x41, 0xC3, 0x00, 0xFE, 0xEE, 0x03, +/* 0000EDB0 */ 0xA8, 0xFF, 0x00, 0x00, 0x00, 0x02, 0xFF, 0xB7, 0xFD, 0x01, 0x00, 0xFF, 0xB7, 0xFD, 0x01, 0x00, +/* 0000EDC0 */ 0x09, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFF, 0xB7, 0xFD, 0x01, 0x00, 0xFE, 0xF1, 0x04, 0xFE, 0xF1, +/* 0000EDD0 */ 0x04, 0x05, 0x0D, 0x10, 0x04, 0x30, 0x2F, 0x04, 0x03, 0x01, 0x12, 0x12, 0x12, 0x12, 0x01, 0x0F, +/* 0000EDE0 */ 0x06, 0xFE, 0x94, 0x03, 0x05, 0xFE, 0x0A, 0x04, 0x06, 0xFE, 0x2E, 0x03, 0x06, 0xFE, 0xD7, 0x03, +/* 0000EDF0 */ 0x06, 0xFE, 0xF2, 0x03, 0x06, 0xFE, 0xFE, 0x03, 0x06, 0xFE, 0x03, 0x04, 0x06, 0xFE, 0x05, 0x04, +/* 0000EE00 */ 0x06, 0xFE, 0xF8, 0x03, 0x06, 0xFE, 0xF9, 0x03, 0x07, 0xD2, 0x58, 0x0D, 0x2A, 0x10, 0x0D, 0x15, +/* 0000EE10 */ 0x03, 0x00, 0x10, 0x02, 0x09, 0x24, 0x00, 0x8F, 0x04, 0x03, 0x11, 0x00, 0x00, 0x6D, 0x10, 0x11, +/* 0000EE20 */ 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x11, 0x5A, 0x01, 0x03, 0x00, 0x00, 0x5A, 0x02, 0x04, 0x00, +/* 0000EE30 */ 0x00, 0xF4, 0x03, 0xFF, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x04, 0x03, 0x11, 0x00, +/* 0000EE40 */ 0x00, 0x6D, 0x10, 0x11, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x11, 0x5A, 0x01, 0x0D, 0x01, 0x00, +/* 0000EE50 */ 0xF4, 0x02, 0x10, 0x10, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, 0x0E, 0x10, 0xA8, 0x10, 0x14, +/* 0000EE60 */ 0x08, 0x00, 0x0E, 0x10, 0x5F, 0x10, 0x0E, 0x02, 0x0F, 0x24, 0x00, 0x10, 0x8F, 0x04, 0x03, 0x11, +/* 0000EE70 */ 0x00, 0x00, 0x6D, 0x10, 0x11, 0x03, 0x07, 0x03, 0x00, 0x59, 0x00, 0x11, 0x5A, 0x01, 0x03, 0x02, +/* 0000EE80 */ 0x00, 0x5A, 0x02, 0x04, 0x02, 0x00, 0xF4, 0x03, 0xFF, 0x10, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, +/* 0000EE90 */ 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x10, 0x0E, +/* 0000EEA0 */ 0x04, 0x7B, 0x10, 0x00, 0x05, 0x5F, 0x10, 0x0E, 0x06, 0x7B, 0x10, 0x00, 0x07, 0x5F, 0x10, 0x0E, +/* 0000EEB0 */ 0x08, 0x7B, 0x10, 0x00, 0x09, 0x5F, 0x10, 0x0E, 0x0A, 0x7B, 0x10, 0x00, 0x0B, 0x5F, 0x10, 0x0E, +/* 0000EEC0 */ 0x0C, 0x7B, 0x10, 0x00, 0x0D, 0x5F, 0x10, 0x0E, 0x0E, 0x7B, 0x10, 0x00, 0x0F, 0x5F, 0x10, 0x0E, +/* 0000EED0 */ 0x10, 0x7B, 0x10, 0x00, 0x11, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x01, 0x24, 0x00, 0x00, +/* 0000EEE0 */ 0x00, 0x00, 0x00, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x02, 0x00, 0x00, 0x55, +/* 0000EEF0 */ 0x02, 0x00, 0x00, 0x52, 0x02, 0x00, 0x00, 0x50, 0x02, 0x00, 0x00, 0x05, 0x04, 0x00, 0x00, 0x51, +/* 0000EF00 */ 0x02, 0x00, 0x00, 0xF9, 0x03, 0x00, 0x00, 0xFE, 0xB6, 0x02, 0xFE, 0x05, 0x02, 0xFE, 0x4E, 0x02, +/* 0000EF10 */ 0xFE, 0xB6, 0x02, 0xFE, 0x09, 0x02, 0xFE, 0x0D, 0x02, 0xFE, 0xBE, 0x04, 0xFE, 0x55, 0x02, 0xFE, +/* 0000EF20 */ 0xBF, 0x04, 0xFE, 0x52, 0x02, 0xFE, 0xC0, 0x04, 0xFE, 0x50, 0x02, 0xFE, 0x4D, 0x02, 0xFE, 0x05, +/* 0000EF30 */ 0x04, 0xFE, 0xC2, 0x04, 0xFE, 0x51, 0x02, 0xFE, 0xC1, 0x04, 0xFE, 0xF9, 0x03, 0xFF, 0xEC, 0xFD, +/* 0000EF40 */ 0x01, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3C, 0x00, 0x24, 0x00, 0x84, 0x00, 0x22, +/* 0000EF50 */ 0x00, 0x4B, 0x00, 0x0F, 0x00, 0x65, 0x00, 0x24, 0x00, 0x85, 0x00, 0x4A, 0x00, 0xC6, 0x02, 0x00, +/* 0000EF60 */ 0x7F, 0x5C, 0x0A, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x2E, 0x0B, 0x10, 0xA3, 0x41, 0xC1, 0x00, +/* 0000EF70 */ 0xFE, 0xF1, 0x03, 0xA7, 0xFF, 0xF9, 0xF6, 0x01, 0x00, 0xFF, 0xF9, 0xF6, 0x01, 0x00, 0x09, 0xFE, +/* 0000EF80 */ 0x00, 0x90, 0x03, 0x03, 0xFF, 0xF9, 0xF6, 0x01, 0x00, 0xFE, 0x05, 0x04, 0xFE, 0x05, 0x04, 0x0A, +/* 0000EF90 */ 0x06, 0x0B, 0x0C, 0x49, 0x46, 0x04, 0x02, 0x07, 0x03, 0x0C, 0x0C, 0x0C, 0x0C, 0x0A, 0x06, 0xFE, +/* 0000EFA0 */ 0x94, 0x03, 0x05, 0xFE, 0x09, 0x04, 0x06, 0xFE, 0x2E, 0x03, 0x08, 0xFE, 0x49, 0x01, 0x58, 0x08, +/* 0000EFB0 */ 0x2A, 0x0B, 0x08, 0x15, 0x03, 0x00, 0x0B, 0x02, 0x09, 0x24, 0x00, 0x8F, 0x04, 0x03, 0x0C, 0x00, +/* 0000EFC0 */ 0x00, 0x6D, 0x0B, 0x0C, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0C, 0x5A, 0x01, 0x03, 0x00, 0x00, +/* 0000EFD0 */ 0x5A, 0x02, 0x04, 0x00, 0x00, 0xF4, 0x03, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, +/* 0000EFE0 */ 0x04, 0x03, 0x0C, 0x00, 0x00, 0x6D, 0x0B, 0x0C, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0C, 0x5A, +/* 0000EFF0 */ 0x01, 0x08, 0x01, 0x00, 0xF4, 0x02, 0x0B, 0x0B, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, 0x09, +/* 0000F000 */ 0x0B, 0xA8, 0x0B, 0x14, 0x08, 0x00, 0x09, 0x0B, 0x5F, 0x0B, 0x09, 0x02, 0x0F, 0x24, 0x00, 0x0B, +/* 0000F010 */ 0x8F, 0x04, 0x03, 0x0C, 0x00, 0x00, 0x6D, 0x0B, 0x0C, 0x03, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0C, +/* 0000F020 */ 0x5A, 0x01, 0x03, 0x02, 0x00, 0x5A, 0x02, 0x04, 0x02, 0x00, 0xF4, 0x03, 0xFF, 0x0B, 0x03, 0x00, +/* 0000F030 */ 0x00, 0x00, 0x02, 0x00, 0x8F, 0x04, 0x0C, 0x0B, 0x01, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x05, +/* 0000F040 */ 0x5A, 0x01, 0x06, 0x03, 0x00, 0xF0, 0x02, 0x0B, 0x0B, 0x03, 0x00, 0x45, 0x06, 0x0B, 0x8F, 0x04, +/* 0000F050 */ 0x0C, 0x0B, 0x01, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x05, 0x5A, 0x01, 0x07, 0x04, 0x00, 0xF0, +/* 0000F060 */ 0x02, 0x0B, 0x0B, 0x04, 0x00, 0x45, 0x07, 0x0B, 0x8F, 0x04, 0x0B, 0x0B, 0x02, 0x00, 0x07, 0x02, +/* 0000F070 */ 0x00, 0x59, 0x00, 0x05, 0x8F, 0x04, 0x03, 0x0D, 0x00, 0x00, 0x6D, 0x0C, 0x0D, 0x04, 0x07, 0x08, +/* 0000F080 */ 0x00, 0x59, 0x00, 0x0D, 0x5A, 0x01, 0x06, 0x06, 0x00, 0x5A, 0x02, 0x07, 0x06, 0x00, 0x5F, 0x0E, +/* 0000F090 */ 0x09, 0x05, 0x5A, 0x03, 0x0E, 0x06, 0x00, 0x8F, 0x04, 0x03, 0x0E, 0x00, 0x00, 0x5F, 0x0E, 0x0E, +/* 0000F0A0 */ 0x06, 0x5F, 0x0F, 0x09, 0x07, 0x98, 0x0E, 0x0E, 0x0F, 0x00, 0x00, 0x5A, 0x04, 0x0E, 0x06, 0x00, +/* 0000F0B0 */ 0x5F, 0x0E, 0x09, 0x08, 0x5A, 0x05, 0x0E, 0x06, 0x00, 0x5F, 0x0E, 0x09, 0x09, 0x5A, 0x06, 0x0E, +/* 0000F0C0 */ 0x06, 0x00, 0x8F, 0x04, 0x03, 0x0E, 0x00, 0x00, 0x5F, 0x0E, 0x0E, 0x0A, 0x5F, 0x0F, 0x09, 0x0B, +/* 0000F0D0 */ 0x98, 0x0E, 0x0E, 0x0F, 0x01, 0x00, 0x5A, 0x07, 0x0E, 0x06, 0x00, 0xF4, 0x08, 0x0C, 0x0C, 0x04, +/* 0000F0E0 */ 0x00, 0x00, 0x00, 0x06, 0x00, 0x5A, 0x01, 0x0C, 0x05, 0x00, 0xF0, 0x02, 0x00, 0x0B, 0x05, 0x00, +/* 0000F0F0 */ 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB6, 0x02, 0xFE, 0x05, 0x02, 0xFE, 0x4E, 0x02, +/* 0000F100 */ 0xFE, 0xB6, 0x02, 0xFE, 0xF7, 0x01, 0xFE, 0xBD, 0x04, 0xFE, 0x27, 0x02, 0xFE, 0xBF, 0x04, 0xFE, +/* 0000F110 */ 0xC0, 0x04, 0xFE, 0xC2, 0x04, 0xFE, 0x28, 0x02, 0xFE, 0xC1, 0x04, 0xFF, 0x26, 0xF7, 0x01, 0x00, +/* 0000F120 */ 0x09, 0x02, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x38, 0x00, 0x24, 0x00, 0x75, 0x00, 0x22, 0x00, 0x47, +/* 0000F130 */ 0x00, 0x0F, 0x00, 0x61, 0x00, 0x24, 0x00, 0x75, 0x00, 0x1A, 0x00, 0x23, 0x00, 0x1A, 0x00, 0x24, +/* 0000F140 */ 0x00, 0x8D, 0x00, 0xC6, 0x01, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x13, +/* 0000F150 */ 0x0B, 0x10, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x2E, 0x03, 0xA6, 0xFF, 0x6C, 0xF2, 0x01, 0x00, 0xFF, +/* 0000F160 */ 0x6C, 0xF2, 0x01, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x03, 0x01, 0xFF, 0x6C, 0xF2, 0x01, 0x00, 0xFE, +/* 0000F170 */ 0x3D, 0x04, 0xFE, 0x3D, 0x04, 0x09, 0x05, 0x0B, 0x05, 0x5E, 0x57, 0x04, 0x09, 0x0A, 0x06, 0x06, +/* 0000F180 */ 0x06, 0x06, 0x0A, 0x08, 0x06, 0xFE, 0x2E, 0x03, 0x07, 0xFE, 0x8A, 0x01, 0x58, 0x07, 0x4E, 0x08, +/* 0000F190 */ 0x4E, 0x09, 0x15, 0x05, 0x00, 0x05, 0x02, 0xA8, 0x0B, 0x45, 0x05, 0x0B, 0x15, 0x05, 0x00, 0x06, +/* 0000F1A0 */ 0x02, 0xA8, 0x0B, 0x45, 0x06, 0x0B, 0x4E, 0x08, 0x4E, 0x09, 0x8F, 0x04, 0x07, 0x0B, 0x00, 0x00, +/* 0000F1B0 */ 0x14, 0x0A, 0x00, 0x07, 0x0B, 0xA8, 0x0B, 0x14, 0x03, 0x00, 0x07, 0x0B, 0x09, 0x1E, 0x00, 0x8F, +/* 0000F1C0 */ 0x01, 0x02, 0x0B, 0x01, 0x00, 0x4A, 0x0B, 0x07, 0x03, 0x00, 0x5A, 0x01, 0x05, 0x00, 0x00, 0x5A, +/* 0000F1D0 */ 0x02, 0x06, 0x00, 0x00, 0xC5, 0x03, 0x00, 0x0B, 0x00, 0x00, 0x09, 0x37, 0x01, 0x8F, 0x04, 0x24, +/* 0000F1E0 */ 0x0C, 0x02, 0x00, 0x6D, 0x0B, 0x0C, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0C, 0x5A, 0x01, 0x07, +/* 0000F1F0 */ 0x01, 0x00, 0xF4, 0x02, 0x0B, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, 0x08, 0x0B, 0x8F, +/* 0000F200 */ 0x04, 0x12, 0x0B, 0x03, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x08, 0x02, 0x00, +/* 0000F210 */ 0xF0, 0x02, 0x0B, 0x0B, 0x02, 0x00, 0x0F, 0x1F, 0x00, 0x0B, 0x8F, 0x04, 0x03, 0x0C, 0x04, 0x00, +/* 0000F220 */ 0x6D, 0x0B, 0x0C, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0C, 0x5A, 0x01, 0x03, 0x03, 0x00, 0xF4, +/* 0000F230 */ 0x02, 0xFF, 0x0B, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x8F, 0x04, 0x03, 0x0C, 0x04, 0x00, 0x6D, +/* 0000F240 */ 0x0B, 0x0C, 0x02, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0C, 0x5A, 0x01, 0x08, 0x04, 0x00, 0xF4, 0x02, +/* 0000F250 */ 0x0B, 0x0B, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x45, 0x09, 0x0B, 0xA8, 0x0B, 0x14, 0x03, 0x00, +/* 0000F260 */ 0x09, 0x0B, 0x09, 0x45, 0x00, 0x8F, 0x04, 0x04, 0x0B, 0x05, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 0000F270 */ 0x02, 0xCD, 0x0C, 0x5A, 0x01, 0x0C, 0x05, 0x00, 0x5A, 0x02, 0x04, 0x05, 0x00, 0xF0, 0x03, 0x0B, +/* 0000F280 */ 0x0B, 0x05, 0x00, 0x45, 0x09, 0x0B, 0x8F, 0x04, 0x03, 0x0C, 0x04, 0x00, 0x6D, 0x0B, 0x0C, 0x03, +/* 0000F290 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x0C, 0x5A, 0x01, 0x08, 0x06, 0x00, 0x5A, 0x02, 0x09, 0x06, 0x00, +/* 0000F2A0 */ 0xF4, 0x03, 0xFF, 0x0B, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x8F, 0x02, 0x02, 0x0B, 0x06, 0x00, +/* 0000F2B0 */ 0x4A, 0x0B, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x09, 0x07, 0x00, 0x5A, 0x02, 0x05, +/* 0000F2C0 */ 0x07, 0x00, 0x5A, 0x03, 0x06, 0x07, 0x00, 0xF0, 0x04, 0xFF, 0x0B, 0x07, 0x00, 0x45, 0x0B, 0x09, +/* 0000F2D0 */ 0x8F, 0x04, 0x06, 0x0C, 0x07, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x8F, 0x04, 0x1A, 0x0D, +/* 0000F2E0 */ 0x08, 0x00, 0x5A, 0x01, 0x0D, 0x08, 0x00, 0x8F, 0x01, 0x03, 0x0D, 0x09, 0x00, 0x4A, 0x0D, 0x5A, +/* 0000F2F0 */ 0x02, 0x0D, 0x08, 0x00, 0x5A, 0x03, 0x08, 0x08, 0x00, 0xF0, 0x04, 0x0C, 0x0C, 0x08, 0x00, 0x77, +/* 0000F300 */ 0x0C, 0x0B, 0x04, 0x5F, 0x0B, 0x09, 0x05, 0x82, 0x0B, 0x0B, 0x06, 0x01, 0x45, 0x00, 0x08, 0x09, +/* 0000F310 */ 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x21, 0x03, 0xFE, 0xB2, 0x02, 0xFE, 0x05, 0x02, 0xFE, +/* 0000F320 */ 0x06, 0x02, 0xFE, 0x4C, 0x02, 0xFE, 0x4C, 0x02, 0xFF, 0x7E, 0xF2, 0x01, 0x00, 0x10, 0x06, 0x00, +/* 0000F330 */ 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0E, 0x00, 0x2B, 0x00, 0x15, 0x00, 0x43, 0x00, 0x1E, 0x00, +/* 0000F340 */ 0x52, 0x00, 0x22, 0x00, 0x37, 0x00, 0x1B, 0x00, 0x38, 0x00, 0x1F, 0x00, 0x97, 0x00, 0x22, 0x00, +/* 0000F350 */ 0x47, 0x00, 0x0A, 0x00, 0x3A, 0x00, 0x21, 0x00, 0x3F, 0x00, 0x24, 0x00, 0x58, 0x00, 0x23, 0x00, +/* 0000F360 */ 0x76, 0x00, 0x36, 0x00, 0x68, 0x00, 0x09, 0x00, 0x3D, 0x00, 0x08, 0x00, 0x1C, 0x00, 0x00, 0x7F, +/* 0000F370 */ 0x5C, 0x0A, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0xF9, 0x0A, 0x61, 0xA0, 0x41, 0xF1, 0x00, 0xA5, +/* 0000F380 */ 0xFF, 0x7E, 0xED, 0x01, 0x00, 0xFF, 0x7E, 0xED, 0x01, 0x00, 0x0B, 0xFE, 0x00, 0x90, 0x01, 0x01, +/* 0000F390 */ 0xFF, 0x7E, 0xED, 0x01, 0x00, 0xFE, 0x81, 0x04, 0xFE, 0x81, 0x04, 0x0B, 0x08, 0x0E, 0x0C, 0x54, +/* 0000F3A0 */ 0x50, 0x03, 0x05, 0x08, 0x05, 0x0A, 0x0A, 0x0A, 0x0A, 0x0D, 0x07, 0x01, 0x00, 0x05, 0xFE, 0xE9, +/* 0000F3B0 */ 0x03, 0x08, 0x01, 0x01, 0x01, 0x02, 0xFE, 0x73, 0x01, 0xB1, 0x08, 0x58, 0x0A, 0x98, 0x0E, 0x08, +/* 0000F3C0 */ 0x03, 0x00, 0x00, 0x45, 0x09, 0x0E, 0xA8, 0x0E, 0x14, 0x08, 0x00, 0x0A, 0x0E, 0x14, 0x03, 0x00, +/* 0000F3D0 */ 0x0A, 0x02, 0x09, 0x22, 0x00, 0x8F, 0x03, 0x03, 0x0F, 0x00, 0x00, 0x6D, 0x0E, 0x0F, 0x00, 0x07, +/* 0000F3E0 */ 0x02, 0x00, 0x59, 0x00, 0x0F, 0x5A, 0x01, 0x04, 0x00, 0x00, 0xF4, 0x02, 0xFF, 0x0E, 0x00, 0x00, +/* 0000F3F0 */ 0x00, 0x00, 0x00, 0x00, 0x09, 0x22, 0x00, 0x14, 0x03, 0x00, 0x09, 0x02, 0x09, 0x1A, 0x00, 0x8F, +/* 0000F400 */ 0x03, 0x03, 0x0F, 0x00, 0x00, 0x6D, 0x0E, 0x0F, 0x01, 0x07, 0x01, 0x00, 0x59, 0x00, 0x0F, 0xF4, +/* 0000F410 */ 0x01, 0xFF, 0x0E, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x8F, 0x03, 0x0C, 0x0E, 0x01, 0x00, 0x07, +/* 0000F420 */ 0x02, 0x00, 0x59, 0x00, 0x05, 0x5A, 0x01, 0x0A, 0x02, 0x00, 0xF0, 0x02, 0x0E, 0x0E, 0x02, 0x00, +/* 0000F430 */ 0x45, 0x0B, 0x0E, 0x8F, 0x03, 0x0C, 0x0E, 0x01, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x05, 0x5A, +/* 0000F440 */ 0x01, 0x09, 0x03, 0x00, 0xF0, 0x02, 0x0E, 0x0E, 0x03, 0x00, 0x45, 0x09, 0x0E, 0x8F, 0x03, 0x04, +/* 0000F450 */ 0x0E, 0x02, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x05, 0xCD, 0x0F, 0x5A, 0x01, 0x0F, 0x04, 0x00, +/* 0000F460 */ 0x5A, 0x02, 0x02, 0x04, 0x00, 0xF0, 0x03, 0x0E, 0x0E, 0x04, 0x00, 0x45, 0x0C, 0x0E, 0x8F, 0x01, +/* 0000F470 */ 0x02, 0x0E, 0x03, 0x00, 0x4A, 0x0E, 0x07, 0x04, 0x00, 0x59, 0x00, 0x05, 0x5A, 0x01, 0x0C, 0x05, +/* 0000F480 */ 0x00, 0x98, 0x0F, 0x08, 0x06, 0x01, 0x00, 0x5A, 0x02, 0x0F, 0x05, 0x00, 0x98, 0x0F, 0x08, 0x07, +/* 0000F490 */ 0x02, 0x00, 0x5A, 0x03, 0x0F, 0x05, 0x00, 0xF0, 0x04, 0xFF, 0x0E, 0x05, 0x00, 0x8F, 0x03, 0x0B, +/* 0000F4A0 */ 0x0E, 0x04, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x05, 0x8F, 0x03, 0x03, 0x10, 0x00, 0x00, 0x6D, +/* 0000F4B0 */ 0x0F, 0x10, 0x02, 0x07, 0x08, 0x00, 0x59, 0x00, 0x10, 0x5A, 0x01, 0x0B, 0x07, 0x00, 0x5A, 0x02, +/* 0000F4C0 */ 0x09, 0x07, 0x00, 0x5F, 0x11, 0x0C, 0x03, 0x5A, 0x03, 0x11, 0x07, 0x00, 0x8F, 0x03, 0x03, 0x11, +/* 0000F4D0 */ 0x00, 0x00, 0x5F, 0x11, 0x11, 0x04, 0x5F, 0x12, 0x0C, 0x05, 0x98, 0x11, 0x11, 0x12, 0x03, 0x00, +/* 0000F4E0 */ 0x5A, 0x04, 0x11, 0x07, 0x00, 0x5F, 0x11, 0x0C, 0x06, 0x5A, 0x05, 0x11, 0x07, 0x00, 0x5F, 0x11, +/* 0000F4F0 */ 0x0C, 0x07, 0x5A, 0x06, 0x11, 0x07, 0x00, 0x8F, 0x03, 0x03, 0x11, 0x00, 0x00, 0x5F, 0x11, 0x11, +/* 0000F500 */ 0x08, 0x5F, 0x12, 0x0C, 0x09, 0x98, 0x11, 0x11, 0x12, 0x04, 0x00, 0x5A, 0x07, 0x11, 0x07, 0x00, +/* 0000F510 */ 0xF4, 0x08, 0x0F, 0x0F, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x5A, 0x01, 0x0F, 0x06, 0x00, 0xF0, +/* 0000F520 */ 0x02, 0x00, 0x0E, 0x06, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB0, 0x02, 0xFE, +/* 0000F530 */ 0xAA, 0x02, 0xFE, 0xF7, 0x01, 0xFE, 0xBD, 0x04, 0xFE, 0x27, 0x02, 0xFE, 0xBF, 0x04, 0xFE, 0xC0, +/* 0000F540 */ 0x04, 0xFE, 0xC2, 0x04, 0xFE, 0x28, 0x02, 0xFE, 0xC1, 0x04, 0xFF, 0x9C, 0xED, 0x01, 0x00, 0x0B, +/* 0000F550 */ 0x04, 0x00, 0x00, 0x00, 0x09, 0x00, 0x29, 0x00, 0x0F, 0x00, 0x3F, 0x00, 0x22, 0x00, 0x6D, 0x00, +/* 0000F560 */ 0x08, 0x00, 0x29, 0x00, 0x1A, 0x00, 0xE2, 0x00, 0x1A, 0x00, 0x2C, 0x00, 0x1A, 0x00, 0x29, 0x00, +/* 0000F570 */ 0x21, 0x00, 0x3A, 0x00, 0x2F, 0x00, 0x4D, 0x00, 0x8D, 0x00, 0xA6, 0x01, 0x00, 0x7F, 0x5D, 0x1A, +/* 0000F580 */ 0xC1, 0x43, 0x5A, 0x0B, 0x00, 0xFE, 0x8C, 0x0A, 0x0C, 0xB3, 0x41, 0xC1, 0x00, 0xFE, 0xE5, 0x03, +/* 0000F590 */ 0xA3, 0xFF, 0x4B, 0xD6, 0x01, 0x00, 0xFF, 0x4B, 0xD6, 0x01, 0x00, 0x01, 0x44, 0xFE, 0x00, 0x90, +/* 0000F5A0 */ 0x04, 0x04, 0xFF, 0x4B, 0xD6, 0x01, 0x00, 0xFE, 0xD0, 0x16, 0xFE, 0xD0, 0x16, 0x03, 0xFE, 0xF9, +/* 0000F5B0 */ 0x03, 0xFE, 0x51, 0x02, 0xFE, 0x05, 0x04, 0x15, 0x24, 0x35, 0x09, 0xFE, 0x10, 0x01, 0xFE, 0xFF, +/* 0000F5C0 */ 0x00, 0x03, 0x02, 0x12, 0x05, 0x10, 0x15, 0x15, 0x15, 0x15, 0x01, 0x32, 0x33, 0x34, 0x35, 0x06, +/* 0000F5D0 */ 0xFE, 0x94, 0x03, 0x06, 0xFE, 0xBA, 0x04, 0x08, 0x06, 0xFE, 0x2E, 0x03, 0x0B, 0x06, 0xFE, 0xD6, +/* 0000F5E0 */ 0x03, 0x07, 0x06, 0xFE, 0xE0, 0x03, 0x06, 0xFE, 0xA3, 0x03, 0x05, 0xFE, 0x9C, 0x03, 0x05, 0xFE, +/* 0000F5F0 */ 0xDF, 0x03, 0x06, 0xFE, 0xF2, 0x03, 0x06, 0xFE, 0xF3, 0x03, 0x06, 0xFE, 0xF4, 0x03, 0x06, 0xFE, +/* 0000F600 */ 0xFE, 0x03, 0x06, 0xFE, 0xFF, 0x03, 0x06, 0xFE, 0x00, 0x04, 0x06, 0xFE, 0x01, 0x04, 0x06, 0xFE, +/* 0000F610 */ 0x02, 0x04, 0x06, 0xFE, 0x03, 0x04, 0x06, 0xFE, 0xA2, 0x03, 0x0C, 0x06, 0xFE, 0xF9, 0x03, 0x06, +/* 0000F620 */ 0xFE, 0xFA, 0x03, 0x06, 0xFE, 0xFB, 0x03, 0x06, 0xFE, 0xFC, 0x03, 0x06, 0xFE, 0xF8, 0x03, 0x06, +/* 0000F630 */ 0xFE, 0xFD, 0x03, 0x06, 0xFE, 0x47, 0x03, 0x06, 0xFE, 0x00, 0x03, 0x06, 0xFE, 0xBB, 0x04, 0x06, +/* 0000F640 */ 0xFE, 0xBC, 0x04, 0x01, 0x00, 0x01, 0xFF, 0xFE, 0x60, 0x04, 0xA8, 0x2F, 0xA8, 0x30, 0xA8, 0x31, +/* 0000F650 */ 0x2A, 0x36, 0x24, 0x0D, 0x03, 0x00, 0x36, 0x02, 0x09, 0x1A, 0x00, 0x8F, 0x03, 0x03, 0x37, 0x00, +/* 0000F660 */ 0x00, 0x6D, 0x36, 0x37, 0x00, 0x07, 0x01, 0x00, 0x59, 0x00, 0x37, 0xF4, 0x01, 0xFF, 0x36, 0x00, +/* 0000F670 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x03, 0x06, 0x36, 0x01, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, +/* 0000F680 */ 0x04, 0x8F, 0x03, 0x14, 0x37, 0x02, 0x00, 0x5A, 0x01, 0x37, 0x01, 0x00, 0x5A, 0x02, 0x24, 0x01, +/* 0000F690 */ 0x00, 0x5A, 0x03, 0x03, 0x01, 0x00, 0xF0, 0x04, 0x36, 0x36, 0x01, 0x00, 0x0E, 0x2C, 0x00, 0x36, +/* 0000F6A0 */ 0x5F, 0x36, 0x24, 0x01, 0x0E, 0x24, 0x00, 0x36, 0x8F, 0x03, 0x03, 0x37, 0x00, 0x00, 0x6D, 0x36, +/* 0000F6B0 */ 0x37, 0x02, 0x07, 0x03, 0x00, 0x59, 0x00, 0x37, 0x5A, 0x01, 0x05, 0x02, 0x00, 0x5A, 0x02, 0x05, +/* 0000F6C0 */ 0x02, 0x00, 0xF4, 0x03, 0xFF, 0x36, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x77, 0x06, 0x24, 0x03, +/* 0000F6D0 */ 0x2A, 0x36, 0x26, 0x14, 0x03, 0x00, 0x36, 0x07, 0x09, 0x24, 0x00, 0x8F, 0x03, 0x04, 0x36, 0x03, +/* 0000F6E0 */ 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x04, 0xCD, 0x37, 0x5A, 0x01, 0x37, 0x03, 0x00, 0x5A, 0x02, +/* 0000F6F0 */ 0x08, 0x03, 0x00, 0xF0, 0x03, 0x36, 0x36, 0x03, 0x00, 0x45, 0x26, 0x36, 0x09, 0x22, 0x00, 0x8F, +/* 0000F700 */ 0x03, 0x24, 0x37, 0x04, 0x00, 0x6D, 0x36, 0x37, 0x04, 0x07, 0x02, 0x00, 0x59, 0x00, 0x37, 0x5A, +/* 0000F710 */ 0x01, 0x26, 0x04, 0x00, 0xF4, 0x02, 0x36, 0x36, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x45, 0x26, +/* 0000F720 */ 0x36, 0x8F, 0x02, 0x02, 0x36, 0x05, 0x00, 0x4A, 0x36, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, 0x5A, +/* 0000F730 */ 0x01, 0x26, 0x05, 0x00, 0x5A, 0x02, 0x09, 0x05, 0x00, 0x5A, 0x03, 0x0A, 0x05, 0x00, 0xD0, 0x37, +/* 0000F740 */ 0x02, 0x00, 0x00, 0xA1, 0x00, 0x0B, 0x37, 0xA1, 0x01, 0x0C, 0x37, 0x5A, 0x04, 0x37, 0x05, 0x00, +/* 0000F750 */ 0x5A, 0x05, 0x0C, 0x05, 0x00, 0xF0, 0x06, 0x36, 0x36, 0x05, 0x00, 0x45, 0x28, 0x36, 0x8F, 0x02, +/* 0000F760 */ 0x02, 0x36, 0x05, 0x00, 0x4A, 0x36, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x26, 0x06, +/* 0000F770 */ 0x00, 0x5A, 0x02, 0x0D, 0x06, 0x00, 0x5A, 0x03, 0x0A, 0x06, 0x00, 0xD0, 0x37, 0x02, 0x01, 0x00, +/* 0000F780 */ 0xA1, 0x00, 0x0E, 0x37, 0xA1, 0x01, 0x0F, 0x37, 0x5A, 0x04, 0x37, 0x06, 0x00, 0x5A, 0x05, 0x0E, +/* 0000F790 */ 0x06, 0x00, 0xF0, 0x06, 0x36, 0x36, 0x06, 0x00, 0x45, 0x29, 0x36, 0x8F, 0x02, 0x02, 0x36, 0x05, +/* 0000F7A0 */ 0x00, 0x4A, 0x36, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x26, 0x07, 0x00, 0x5A, 0x02, +/* 0000F7B0 */ 0x10, 0x07, 0x00, 0x5A, 0x03, 0x0A, 0x07, 0x00, 0xD0, 0x37, 0x04, 0x02, 0x00, 0xA1, 0x00, 0x11, +/* 0000F7C0 */ 0x37, 0xA1, 0x01, 0x12, 0x37, 0xA1, 0x02, 0x13, 0x37, 0xA1, 0x03, 0x14, 0x37, 0x5A, 0x04, 0x37, +/* 0000F7D0 */ 0x07, 0x00, 0xA8, 0x37, 0x5A, 0x05, 0x37, 0x07, 0x00, 0xF0, 0x06, 0x36, 0x36, 0x07, 0x00, 0x45, +/* 0000F7E0 */ 0x2A, 0x36, 0x8F, 0x02, 0x02, 0x36, 0x05, 0x00, 0x4A, 0x36, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, +/* 0000F7F0 */ 0x5A, 0x01, 0x26, 0x08, 0x00, 0x5A, 0x02, 0x15, 0x08, 0x00, 0x5A, 0x03, 0x16, 0x08, 0x00, 0xA8, +/* 0000F800 */ 0x37, 0x5A, 0x04, 0x37, 0x08, 0x00, 0x5A, 0x05, 0x17, 0x08, 0x00, 0xF0, 0x06, 0x36, 0x36, 0x08, +/* 0000F810 */ 0x00, 0x45, 0x2B, 0x36, 0x8F, 0x02, 0x02, 0x36, 0x05, 0x00, 0x4A, 0x36, 0x07, 0x06, 0x00, 0x59, +/* 0000F820 */ 0x00, 0x04, 0x5A, 0x01, 0x26, 0x09, 0x00, 0x5A, 0x02, 0x18, 0x09, 0x00, 0x5A, 0x03, 0x0A, 0x09, +/* 0000F830 */ 0x00, 0xD0, 0x37, 0x03, 0x03, 0x00, 0xA1, 0x00, 0x19, 0x37, 0xA1, 0x01, 0x1A, 0x37, 0xA1, 0x02, +/* 0000F840 */ 0x1B, 0x37, 0x5A, 0x04, 0x37, 0x09, 0x00, 0xA8, 0x37, 0x5A, 0x05, 0x37, 0x09, 0x00, 0xF0, 0x06, +/* 0000F850 */ 0x36, 0x36, 0x09, 0x00, 0x96, 0x02, 0x36, 0x8F, 0x02, 0x02, 0x36, 0x05, 0x00, 0x4A, 0x36, 0x07, +/* 0000F860 */ 0x06, 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x26, 0x0A, 0x00, 0x5A, 0x02, 0x1C, 0x0A, 0x00, 0x5A, +/* 0000F870 */ 0x03, 0x16, 0x0A, 0x00, 0xD0, 0x37, 0x02, 0x04, 0x00, 0xA1, 0x00, 0x06, 0x37, 0xA1, 0x01, 0x17, +/* 0000F880 */ 0x37, 0x5A, 0x04, 0x37, 0x0A, 0x00, 0xA8, 0x37, 0x5A, 0x05, 0x37, 0x0A, 0x00, 0xF0, 0x06, 0x36, +/* 0000F890 */ 0x36, 0x0A, 0x00, 0x96, 0x03, 0x36, 0x8F, 0x02, 0x07, 0x36, 0x06, 0x00, 0x4A, 0x36, 0x07, 0x02, +/* 0000F8A0 */ 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x25, 0x0B, 0x00, 0xF0, 0x02, 0x36, 0x36, 0x0B, 0x00, 0x45, +/* 0000F8B0 */ 0x25, 0x36, 0x8F, 0x03, 0x2A, 0x36, 0x07, 0x00, 0x07, 0x05, 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, +/* 0000F8C0 */ 0x25, 0x0C, 0x00, 0x5A, 0x02, 0x28, 0x0C, 0x00, 0xA8, 0x37, 0x5A, 0x03, 0x37, 0x0C, 0x00, 0x8F, +/* 0000F8D0 */ 0x03, 0x31, 0x37, 0x08, 0x00, 0x5A, 0x04, 0x37, 0x0C, 0x00, 0xF0, 0x05, 0x36, 0x36, 0x0C, 0x00, +/* 0000F8E0 */ 0x45, 0x2C, 0x36, 0x96, 0x04, 0x1D, 0x8F, 0x03, 0x27, 0x36, 0x09, 0x00, 0x07, 0x02, 0x00, 0x59, +/* 0000F8F0 */ 0x00, 0x04, 0x5F, 0x37, 0x2C, 0x05, 0x5A, 0x01, 0x37, 0x0D, 0x00, 0xF0, 0x02, 0x36, 0x36, 0x0D, +/* 0000F900 */ 0x00, 0x45, 0x2D, 0x36, 0x45, 0x2E, 0x2D, 0x5F, 0x36, 0x2C, 0x06, 0x0E, 0x2E, 0x00, 0x36, 0x8F, +/* 0000F910 */ 0x03, 0x06, 0x36, 0x01, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x04, 0x8F, 0x03, 0x17, 0x37, 0x0A, +/* 0000F920 */ 0x00, 0x5A, 0x01, 0x37, 0x0E, 0x00, 0x5F, 0x37, 0x2C, 0x07, 0x5A, 0x02, 0x37, 0x0E, 0x00, 0xD6, +/* 0000F930 */ 0x00, 0x37, 0x5A, 0x03, 0x37, 0x0E, 0x00, 0xF0, 0x04, 0xFF, 0x36, 0x0E, 0x00, 0x93, 0x04, 0x36, +/* 0000F940 */ 0x0B, 0x00, 0x15, 0x03, 0x00, 0x36, 0x1D, 0x09, 0x50, 0x00, 0x8F, 0x03, 0x2F, 0x36, 0x0C, 0x00, +/* 0000F950 */ 0x98, 0x36, 0x36, 0x2E, 0x00, 0x00, 0x45, 0x2F, 0x36, 0x45, 0x30, 0x1E, 0xA8, 0x36, 0x15, 0x03, +/* 0000F960 */ 0x00, 0x2F, 0x36, 0x09, 0x31, 0x00, 0x93, 0x04, 0x37, 0x0B, 0x00, 0x98, 0x37, 0x2F, 0x37, 0x01, +/* 0000F970 */ 0x00, 0x45, 0x30, 0x37, 0x45, 0x36, 0x37, 0xA8, 0x37, 0x15, 0x03, 0x00, 0x36, 0x37, 0x09, 0x16, +/* 0000F980 */ 0x00, 0x15, 0x03, 0x00, 0x30, 0x1E, 0x09, 0x0B, 0x00, 0x2D, 0x36, 0x2E, 0x1F, 0x2D, 0x36, 0x36, +/* 0000F990 */ 0x30, 0x45, 0x2E, 0x36, 0x09, 0x03, 0x00, 0x96, 0x04, 0x1D, 0x93, 0x02, 0x36, 0x0D, 0x00, 0xA8, +/* 0000F9A0 */ 0x37, 0x14, 0x03, 0x00, 0x36, 0x37, 0x09, 0xA3, 0x00, 0xE7, 0x4C, 0x00, 0x8F, 0x03, 0x03, 0x37, +/* 0000F9B0 */ 0x00, 0x00, 0x6D, 0x36, 0x37, 0x08, 0x07, 0x08, 0x00, 0x59, 0x00, 0x37, 0x5A, 0x01, 0x20, 0x0F, +/* 0000F9C0 */ 0x00, 0x5A, 0x02, 0x21, 0x0F, 0x00, 0x5A, 0x03, 0x2D, 0x0F, 0x00, 0xA8, 0x38, 0x5A, 0x04, 0x38, +/* 0000F9D0 */ 0x0F, 0x00, 0xA8, 0x38, 0x5A, 0x05, 0x38, 0x0F, 0x00, 0xA8, 0x38, 0x5A, 0x06, 0x38, 0x0F, 0x00, +/* 0000F9E0 */ 0xA8, 0x38, 0x5A, 0x07, 0x38, 0x0F, 0x00, 0xF4, 0x08, 0x36, 0x36, 0x08, 0x00, 0x00, 0x00, 0x0F, +/* 0000F9F0 */ 0x00, 0x45, 0x31, 0x36, 0xEB, 0x09, 0x35, 0x00, 0xE9, 0x27, 0x06, 0x8F, 0x03, 0x22, 0x36, 0x0E, +/* 0000FA00 */ 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x27, 0x10, 0x00, 0xF0, 0x02, 0xFF, 0x36, +/* 0000FA10 */ 0x10, 0x00, 0x8F, 0x03, 0x03, 0x37, 0x00, 0x00, 0x6D, 0x36, 0x37, 0x09, 0x07, 0x01, 0x00, 0x59, +/* 0000FA20 */ 0x00, 0x37, 0xF4, 0x01, 0xFF, 0x36, 0x09, 0x00, 0x00, 0x00, 0x11, 0x00, 0xEB, 0x14, 0x03, 0x00, +/* 0000FA30 */ 0x31, 0x22, 0x09, 0x06, 0x00, 0x96, 0x02, 0x1B, 0x09, 0x11, 0x00, 0x14, 0x03, 0x00, 0x31, 0x23, +/* 0000FA40 */ 0x09, 0x06, 0x00, 0x96, 0x02, 0x19, 0x09, 0x03, 0x00, 0x96, 0x02, 0x1A, 0xA8, 0x36, 0x14, 0x03, +/* 0000FA50 */ 0x00, 0x2A, 0x36, 0x09, 0x03, 0x00, 0x45, 0x2A, 0x14, 0x93, 0x03, 0x36, 0x0F, 0x00, 0xA8, 0x37, +/* 0000FA60 */ 0x14, 0x03, 0x00, 0x36, 0x37, 0x09, 0x03, 0x00, 0x96, 0x03, 0x17, 0x77, 0x28, 0x24, 0x0A, 0x5F, +/* 0000FA70 */ 0x36, 0x2C, 0x0B, 0x77, 0x36, 0x24, 0x0C, 0x77, 0x2E, 0x24, 0x0D, 0x77, 0x29, 0x24, 0x0E, 0x77, +/* 0000FA80 */ 0x2A, 0x24, 0x0F, 0x77, 0x2B, 0x24, 0x10, 0x93, 0x02, 0x36, 0x0D, 0x00, 0x77, 0x36, 0x24, 0x11, +/* 0000FA90 */ 0x93, 0x03, 0x36, 0x0F, 0x00, 0x77, 0x36, 0x24, 0x12, 0x93, 0x04, 0x36, 0x0B, 0x00, 0x77, 0x36, +/* 0000FAA0 */ 0x24, 0x13, 0x77, 0x06, 0x24, 0x14, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xAA, 0x02, 0xFE, 0x08, 0x02, +/* 0000FAB0 */ 0xFE, 0xAB, 0x02, 0xFE, 0x08, 0x02, 0xFE, 0x21, 0x03, 0xFE, 0x0F, 0x02, 0xFE, 0x11, 0x02, 0xFE, +/* 0000FAC0 */ 0x11, 0x02, 0xFE, 0xF7, 0x01, 0xFE, 0xAD, 0x02, 0xFE, 0x5F, 0x02, 0xFE, 0x0F, 0x02, 0xFE, 0x09, +/* 0000FAD0 */ 0x02, 0xFE, 0xBD, 0x04, 0xFE, 0xBE, 0x04, 0xFE, 0xBF, 0x04, 0xFE, 0xC0, 0x04, 0xFE, 0xC1, 0x04, +/* 0000FAE0 */ 0xFE, 0xC2, 0x04, 0xFE, 0x4D, 0x02, 0xFE, 0x4E, 0x02, 0xFF, 0x98, 0xD6, 0x01, 0x00, 0x35, 0x06, +/* 0000FAF0 */ 0x00, 0x00, 0x00, 0x0B, 0x00, 0x37, 0x00, 0x1A, 0x00, 0x3F, 0x00, 0x33, 0x00, 0x93, 0x00, 0x24, +/* 0000FB00 */ 0x00, 0x65, 0x00, 0x04, 0x00, 0x5D, 0x00, 0x0B, 0x00, 0x3A, 0x00, 0x24, 0x00, 0x4F, 0x00, 0x22, +/* 0000FB10 */ 0x00, 0x49, 0x00, 0x3D, 0x00, 0x71, 0x00, 0x3D, 0x00, 0x5F, 0x00, 0x47, 0x00, 0x81, 0x00, 0x32, +/* 0000FB20 */ 0x00, 0x6E, 0x00, 0x43, 0x00, 0x73, 0x00, 0x3F, 0x00, 0x9B, 0x00, 0x1C, 0x00, 0x41, 0x00, 0x31, +/* 0000FB30 */ 0x00, 0x6F, 0x00, 0x03, 0x00, 0x2B, 0x00, 0x1E, 0x00, 0x69, 0x00, 0x03, 0x00, 0x46, 0x00, 0x08, +/* 0000FB40 */ 0x00, 0x36, 0x00, 0x2E, 0x00, 0x33, 0x05, 0x0D, 0x00, 0x33, 0x00, 0x0F, 0x00, 0x6F, 0x00, 0x03, +/* 0000FB50 */ 0x00, 0x2F, 0x00, 0x25, 0x00, 0x92, 0x00, 0x08, 0x00, 0x3B, 0x00, 0x0E, 0x00, 0xB1, 0x00, 0x03, +/* 0000FB60 */ 0x00, 0x7F, 0x00, 0x12, 0x00, 0x51, 0x00, 0x4E, 0x00, 0x84, 0x00, 0x01, 0x00, 0x52, 0x00, 0x17, +/* 0000FB70 */ 0x00, 0x92, 0x01, 0x1B, 0x00, 0x52, 0x00, 0x08, 0x00, 0x29, 0x00, 0x06, 0x00, 0x30, 0x00, 0x08, +/* 0000FB80 */ 0x00, 0x2A, 0x00, 0x06, 0x00, 0x4A, 0x00, 0x03, 0x00, 0x4E, 0x00, 0x0A, 0x00, 0x35, 0x00, 0x03, +/* 0000FB90 */ 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x31, 0x00, 0x03, 0x00, 0x65, 0x00, 0x04, 0x00, 0x2E, 0x00, 0x08, +/* 0000FBA0 */ 0x00, 0x4D, 0x00, 0x04, 0x00, 0x48, 0x00, 0x04, 0x00, 0x2A, 0x00, 0x04, 0x00, 0x36, 0x00, 0x04, +/* 0000FBB0 */ 0x00, 0x42, 0x00, 0x09, 0x00, 0x32, 0x00, 0x09, 0x00, 0x2E, 0x00, 0x09, 0x00, 0x32, 0x00, 0x06, +/* 0000FBC0 */ 0x00, 0x33, 0x00, 0x00, 0xC8, 0xFB, 0x00, 0x00, 0x7F, 0x5C, 0x1A, 0xC1, 0x33, 0x10, 0x43, 0x00, +/* 0000FBD0 */ 0xFE, 0xAE, 0x0A, 0x57, 0xA2, 0x41, 0xD1, 0x00, 0xA4, 0xFF, 0x05, 0xDE, 0x01, 0x00, 0xFF, 0x05, +/* 0000FBE0 */ 0xDE, 0x01, 0x00, 0x41, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0x05, 0xDE, 0x01, 0x00, 0xFE, 0xCB, +/* 0000FBF0 */ 0x04, 0xFE, 0xCB, 0x04, 0x09, 0x15, 0x1A, 0x0B, 0x5F, 0x5B, 0x04, 0x03, 0x05, 0x01, 0x08, 0x03, +/* 0000FC00 */ 0x03, 0x03, 0x03, 0x01, 0x01, 0x19, 0x01, 0x01, 0x01, 0x02, 0x06, 0xFE, 0x47, 0x03, 0x06, 0xFE, +/* 0000FC10 */ 0xF7, 0x03, 0x06, 0xFE, 0xF9, 0x03, 0x07, 0x08, 0x06, 0xFE, 0xA3, 0x03, 0x06, 0xFE, 0xFA, 0x03, +/* 0000FC20 */ 0x06, 0xFE, 0xFB, 0x03, 0x06, 0xFE, 0xFC, 0x03, 0x06, 0xFE, 0xF6, 0x03, 0x06, 0xFE, 0xA1, 0x03, +/* 0000FC30 */ 0x0B, 0x06, 0xFE, 0xF5, 0x03, 0x06, 0xFE, 0xFD, 0x03, 0x06, 0xFE, 0xF4, 0x03, 0x06, 0xFE, 0xF3, +/* 0000FC40 */ 0x03, 0x05, 0xFE, 0xC3, 0x04, 0xFE, 0x90, 0x01, 0x8F, 0x04, 0x03, 0x1B, 0x00, 0x00, 0x6D, 0x1A, +/* 0000FC50 */ 0x1B, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x1B, 0x5A, 0x01, 0x15, 0x00, 0x00, 0xE2, 0x1C, 0x00, +/* 0000FC60 */ 0x5A, 0x02, 0x1C, 0x00, 0x00, 0xF4, 0x03, 0x1A, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, +/* 0000FC70 */ 0x16, 0x1A, 0x98, 0x1A, 0x16, 0x02, 0x00, 0x00, 0x45, 0x17, 0x1A, 0x98, 0x1A, 0x16, 0x03, 0x01, +/* 0000FC80 */ 0x00, 0x14, 0x03, 0x00, 0x1A, 0x04, 0x09, 0x08, 0x00, 0xA8, 0x1B, 0x45, 0x1A, 0x1B, 0x09, 0x09, +/* 0000FC90 */ 0x00, 0x98, 0x1B, 0x16, 0x03, 0x02, 0x00, 0x46, 0x1A, 0x1B, 0x45, 0x18, 0x1A, 0x14, 0x03, 0x00, +/* 0000FCA0 */ 0x17, 0x05, 0x09, 0x84, 0x00, 0x8F, 0x01, 0x02, 0x1A, 0x01, 0x00, 0xA8, 0x1B, 0x14, 0x03, 0x00, +/* 0000FCB0 */ 0x1A, 0x1B, 0x09, 0x74, 0x00, 0x8F, 0x03, 0x02, 0x1A, 0x02, 0x00, 0x4A, 0x1A, 0x07, 0x06, 0x00, +/* 0000FCC0 */ 0x59, 0x00, 0x08, 0x8F, 0x04, 0x04, 0x1B, 0x03, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x08, 0xCE, +/* 0000FCD0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x7B, 0x18, 0x1C, 0x01, +/* 0000FCE0 */ 0x5A, 0x01, 0x1C, 0x02, 0x00, 0x5A, 0x02, 0x07, 0x02, 0x00, 0xF0, 0x03, 0x1B, 0x1B, 0x02, 0x00, +/* 0000FCF0 */ 0x5A, 0x01, 0x1B, 0x01, 0x00, 0x5A, 0x02, 0x06, 0x01, 0x00, 0x5A, 0x03, 0x09, 0x01, 0x00, 0xD0, +/* 0000FD00 */ 0x1B, 0x03, 0x00, 0x00, 0xA1, 0x00, 0x0A, 0x1B, 0xA1, 0x01, 0x0B, 0x1B, 0xA1, 0x02, 0x0C, 0x1B, +/* 0000FD10 */ 0x5A, 0x04, 0x1B, 0x01, 0x00, 0xA8, 0x1B, 0x5A, 0x05, 0x1B, 0x01, 0x00, 0xF0, 0x06, 0x1A, 0x1A, +/* 0000FD20 */ 0x01, 0x00, 0x94, 0x01, 0x02, 0x1A, 0x09, 0xAB, 0x00, 0x14, 0x03, 0x00, 0x17, 0x0D, 0x09, 0x6D, +/* 0000FD30 */ 0x00, 0x8F, 0x01, 0x03, 0x1A, 0x04, 0x00, 0xA8, 0x1B, 0x14, 0x03, 0x00, 0x1A, 0x1B, 0x09, 0x5D, +/* 0000FD40 */ 0x00, 0xA8, 0x1A, 0x15, 0x03, 0x00, 0x18, 0x1A, 0x09, 0x4C, 0x00, 0x8F, 0x04, 0x24, 0x1B, 0x05, +/* 0000FD50 */ 0x00, 0x6D, 0x1A, 0x1B, 0x02, 0x07, 0x02, 0x00, 0x59, 0x00, 0x1B, 0x8F, 0x04, 0x06, 0x1C, 0x06, +/* 0000FD60 */ 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x08, 0x8F, 0x04, 0x1E, 0x1D, 0x07, 0x00, 0x5A, 0x01, 0x1D, +/* 0000FD70 */ 0x04, 0x00, 0x5A, 0x02, 0x18, 0x04, 0x00, 0xF0, 0x03, 0x1C, 0x1C, 0x04, 0x00, 0x41, 0x1C, 0x1C, +/* 0000FD80 */ 0x0E, 0x5A, 0x01, 0x1C, 0x03, 0x00, 0xF4, 0x02, 0x1A, 0x1A, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, +/* 0000FD90 */ 0x94, 0x01, 0x03, 0x1A, 0x09, 0x04, 0x00, 0x94, 0x01, 0x03, 0x0F, 0x09, 0x36, 0x00, 0x14, 0x03, +/* 0000FDA0 */ 0x00, 0x17, 0x10, 0x09, 0x2E, 0x00, 0xA8, 0x1A, 0x15, 0x03, 0x00, 0x18, 0x1A, 0x09, 0x24, 0x00, +/* 0000FDB0 */ 0x15, 0x03, 0x00, 0x18, 0x11, 0x09, 0x1C, 0x00, 0x15, 0x03, 0x00, 0x18, 0x12, 0x09, 0x14, 0x00, +/* 0000FDC0 */ 0x15, 0x03, 0x00, 0x18, 0x13, 0x09, 0x0C, 0x00, 0x15, 0x03, 0x00, 0x18, 0x14, 0x09, 0x04, 0x00, +/* 0000FDD0 */ 0x94, 0x01, 0x04, 0x18, 0xA8, 0x00, 0x24, 0x00, 0x01, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, +/* 0000FDE0 */ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0x03, 0x00, 0x00, 0xFE, 0xC0, 0x02, 0xFE, 0xF9, +/* 0000FDF0 */ 0x03, 0xFE, 0x24, 0x03, 0x0E, 0xFE, 0xA3, 0x04, 0x00, 0xFF, 0x31, 0xDE, 0x01, 0x00, 0x0C, 0x00, +/* 0000FE00 */ 0x00, 0x00, 0x00, 0x2A, 0x00, 0x82, 0x00, 0x09, 0x00, 0x2C, 0x00, 0x22, 0x00, 0x4C, 0x00, 0x18, +/* 0000FE10 */ 0x00, 0x4B, 0x00, 0x74, 0x00, 0x9F, 0x00, 0x18, 0x00, 0x49, 0x00, 0x0A, 0x00, 0x3B, 0x00, 0x4C, +/* 0000FE20 */ 0x00, 0xA9, 0x00, 0x07, 0x00, 0x4D, 0x00, 0x32, 0x00, 0xFF, 0x00, 0x06, 0x00, 0x41, 0x00, 0x00, +/* 0000FE30 */ 0x7F, 0x5C, 0x0A, 0xC1, 0x63, 0x50, 0x0B, 0x00, 0xFE, 0x50, 0x0A, 0x1E, 0xA0, 0x41, 0xC1, 0x00, +/* 0000FE40 */ 0xFE, 0xFB, 0x02, 0xA0, 0xFF, 0xC2, 0xCC, 0x01, 0x00, 0xFF, 0xC2, 0xCC, 0x01, 0x00, 0x01, 0x01, +/* 0000FE50 */ 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFF, 0xC2, 0xCC, 0x01, 0x00, 0xFE, 0xE5, 0x08, 0xFE, 0xE5, 0x08, +/* 0000FE60 */ 0x0C, 0x07, 0x0F, 0x06, 0x79, 0x6C, 0x02, 0x05, 0x08, 0x07, 0x03, 0x03, 0x03, 0x03, 0x02, 0x01, +/* 0000FE70 */ 0x0E, 0x0F, 0x08, 0x01, 0x01, 0x05, 0xFE, 0xB5, 0x04, 0x06, 0xFE, 0x47, 0x03, 0x01, 0x02, 0xFE, +/* 0000FE80 */ 0xE3, 0x01, 0x4E, 0x07, 0x4E, 0x08, 0x4E, 0x0B, 0x4E, 0x0C, 0x4E, 0x0D, 0x4E, 0x09, 0x4E, 0x0A, +/* 0000FE90 */ 0x8F, 0x01, 0x19, 0x10, 0x00, 0x00, 0x4A, 0x10, 0x0E, 0x19, 0x00, 0x10, 0x8F, 0x02, 0x03, 0x10, +/* 0000FEA0 */ 0x01, 0x00, 0x5F, 0x10, 0x10, 0x00, 0x0E, 0x0B, 0x00, 0x10, 0x8F, 0x01, 0x19, 0x00, 0x00, 0x00, +/* 0000FEB0 */ 0x4A, 0x00, 0x09, 0xAE, 0x01, 0xA8, 0x10, 0x45, 0x07, 0x10, 0xA8, 0x10, 0x45, 0x08, 0x10, 0x8F, +/* 0000FEC0 */ 0x02, 0x33, 0x10, 0x02, 0x00, 0x4A, 0x10, 0x0E, 0x8C, 0x00, 0x10, 0x8F, 0x01, 0x0A, 0x10, 0x03, +/* 0000FED0 */ 0x00, 0x4A, 0x10, 0x07, 0x01, 0x00, 0x59, 0x00, 0x02, 0xF0, 0x01, 0x10, 0x10, 0x00, 0x00, 0x45, +/* 0000FEE0 */ 0x07, 0x10, 0x8F, 0x02, 0x03, 0x11, 0x01, 0x00, 0x6D, 0x10, 0x11, 0x01, 0x07, 0x03, 0x00, 0x59, +/* 0000FEF0 */ 0x00, 0x11, 0x5A, 0x01, 0x07, 0x01, 0x00, 0xE2, 0x12, 0x00, 0x5A, 0x02, 0x12, 0x01, 0x00, 0xF4, +/* 0000FF00 */ 0x03, 0x10, 0x10, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, 0x09, 0x10, 0x0E, 0x44, 0x00, 0x09, +/* 0000FF10 */ 0x98, 0x10, 0x09, 0x03, 0x00, 0x00, 0x45, 0x08, 0x10, 0x8F, 0x02, 0x06, 0x10, 0x04, 0x00, 0x07, +/* 0000FF20 */ 0x05, 0x00, 0x59, 0x00, 0x02, 0x8F, 0x02, 0x1D, 0x11, 0x05, 0x00, 0x5A, 0x01, 0x11, 0x02, 0x00, +/* 0000FF30 */ 0x5A, 0x02, 0x07, 0x02, 0x00, 0x45, 0x11, 0x04, 0x01, 0x09, 0x01, 0x12, 0x08, 0x2D, 0x11, 0x11, +/* 0000FF40 */ 0x12, 0x5A, 0x03, 0x11, 0x02, 0x00, 0x5A, 0x04, 0x05, 0x02, 0x00, 0xF0, 0x05, 0x10, 0x10, 0x02, +/* 0000FF50 */ 0x00, 0x45, 0x07, 0x10, 0x09, 0x50, 0x00, 0x8F, 0x02, 0x03, 0x11, 0x01, 0x00, 0x6D, 0x10, 0x11, +/* 0000FF60 */ 0x02, 0x07, 0x03, 0x00, 0x59, 0x00, 0x11, 0x8F, 0x01, 0x0A, 0x12, 0x03, 0x00, 0x4A, 0x12, 0x07, +/* 0000FF70 */ 0x01, 0x00, 0x59, 0x00, 0x02, 0xF0, 0x01, 0x12, 0x12, 0x04, 0x00, 0x5A, 0x01, 0x12, 0x03, 0x00, +/* 0000FF80 */ 0xE2, 0x12, 0x01, 0x5A, 0x02, 0x12, 0x03, 0x00, 0xF4, 0x03, 0x10, 0x10, 0x02, 0x00, 0x00, 0x00, +/* 0000FF90 */ 0x03, 0x00, 0x45, 0x0A, 0x10, 0x98, 0x10, 0x0A, 0x03, 0x01, 0x00, 0x45, 0x07, 0x10, 0x98, 0x10, +/* 0000FFA0 */ 0x0A, 0x06, 0x02, 0x00, 0x45, 0x08, 0x10, 0xA8, 0x10, 0x14, 0x03, 0x00, 0x08, 0x10, 0x09, 0x11, +/* 0000FFB0 */ 0x00, 0x01, 0x43, 0x01, 0x01, 0x19, 0x07, 0x8F, 0x01, 0x19, 0x00, 0x00, 0x00, 0x4A, 0x00, 0x09, +/* 0000FFC0 */ 0xA1, 0x00, 0xD8, 0x00, 0x10, 0x45, 0x0B, 0x10, 0x8F, 0x02, 0x30, 0x10, 0x06, 0x00, 0x98, 0x10, +/* 0000FFD0 */ 0x10, 0x07, 0x03, 0x00, 0x45, 0x0C, 0x10, 0xA8, 0x10, 0x14, 0x03, 0x00, 0x0C, 0x10, 0x09, 0x27, +/* 0000FFE0 */ 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x07, 0x05, 0x00, 0x5A, 0x02, 0x08, 0x05, +/* 0000FFF0 */ 0x00, 0xF0, 0x03, 0x10, 0x0B, 0x05, 0x00, 0x01, 0x43, 0x01, 0x01, 0x19, 0x10, 0x8F, 0x01, 0x19, +/* 00010000 */ 0x00, 0x00, 0x00, 0x4A, 0x00, 0x09, 0x5B, 0x00, 0x98, 0x10, 0x0C, 0x08, 0x04, 0x00, 0x45, 0x0D, +/* 00010010 */ 0x10, 0xA8, 0x10, 0x15, 0x03, 0x00, 0x0D, 0x10, 0x09, 0x1F, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 00010020 */ 0x02, 0x5A, 0x01, 0x07, 0x06, 0x00, 0x5A, 0x02, 0x0D, 0x06, 0x00, 0xF0, 0x03, 0x10, 0x0B, 0x06, +/* 00010030 */ 0x00, 0x01, 0x43, 0x01, 0x01, 0x19, 0x10, 0x09, 0x1C, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, +/* 00010040 */ 0x5A, 0x01, 0x07, 0x07, 0x00, 0x5A, 0x02, 0x08, 0x07, 0x00, 0xF0, 0x03, 0x10, 0x0B, 0x07, 0x00, +/* 00010050 */ 0x01, 0x43, 0x01, 0x01, 0x19, 0x10, 0x8F, 0x01, 0x19, 0x00, 0x00, 0x00, 0x4A, 0x00, 0x09, 0x02, +/* 00010060 */ 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x4D, 0x03, 0xFE, 0xC0, 0x02, 0xFE, 0xC0, 0x02, 0x28, 0xFE, +/* 00010070 */ 0xB6, 0x04, 0x00, 0x0E, 0xFE, 0xB7, 0x04, 0x00, 0xFF, 0xD8, 0xCC, 0x01, 0x00, 0x1B, 0x0E, 0x00, +/* 00010080 */ 0x00, 0x00, 0x1A, 0x00, 0x3F, 0x00, 0x0B, 0x00, 0x31, 0x00, 0x05, 0x00, 0x20, 0x00, 0x05, 0x00, +/* 00010090 */ 0x23, 0x00, 0x0C, 0x00, 0x7A, 0x00, 0x17, 0x00, 0x29, 0x00, 0x2A, 0x00, 0x6A, 0x00, 0x04, 0x00, +/* 000100A0 */ 0xB8, 0x00, 0x09, 0x00, 0x26, 0x00, 0x3E, 0x00, 0xC6, 0x00, 0x3E, 0x00, 0x5C, 0x00, 0x09, 0x00, +/* 000100B0 */ 0x1F, 0x00, 0x09, 0x00, 0x29, 0x00, 0x0A, 0x00, 0x2B, 0x00, 0x06, 0x00, 0x2C, 0x00, 0x0B, 0x00, +/* 000100C0 */ 0x8D, 0x00, 0x06, 0x00, 0x28, 0x01, 0x0F, 0x00, 0x56, 0x00, 0x0A, 0x00, 0x84, 0x00, 0x1C, 0x00, +/* 000100D0 */ 0x54, 0x00, 0x0B, 0x00, 0x31, 0x00, 0x09, 0x00, 0x42, 0x00, 0x0A, 0x00, 0x31, 0x00, 0x1F, 0x00, +/* 000100E0 */ 0x6B, 0x00, 0x1C, 0x00, 0x5B, 0x00, 0x0D, 0x00, 0x22, 0x00, 0x00, 0xEF, 0x00, 0x01, 0x00, 0x7F, +/* 000100F0 */ 0x4C, 0x00, 0x01, 0x00, 0x10, 0x03, 0x00, 0xFE, 0x6E, 0x0A, 0x2C, 0xA2, 0x41, 0xC1, 0x00, 0xFE, +/* 00010100 */ 0xB8, 0x04, 0xA1, 0xFF, 0xE8, 0xD1, 0x01, 0x00, 0xFF, 0xE8, 0xD1, 0x01, 0x00, 0x01, 0xFE, 0x00, +/* 00010110 */ 0x90, 0x03, 0x03, 0xFF, 0xE8, 0xD1, 0x01, 0x00, 0xF9, 0xF9, 0x04, 0x05, 0x08, 0x11, 0x11, 0x02, +/* 00010120 */ 0x01, 0x07, 0x06, 0xFE, 0x47, 0x03, 0x05, 0xFE, 0xB5, 0x04, 0x05, 0xFE, 0xB9, 0x04, 0x3D, 0x8F, +/* 00010130 */ 0x02, 0x33, 0x08, 0x00, 0x00, 0x4A, 0x08, 0x0E, 0x18, 0x00, 0x08, 0x01, 0x09, 0x01, 0x00, 0x05, +/* 00010140 */ 0x2D, 0x00, 0x00, 0x03, 0x01, 0x09, 0x01, 0x08, 0x06, 0x2D, 0x00, 0x00, 0x08, 0x09, 0x1A, 0x00, +/* 00010150 */ 0x09, 0x15, 0x00, 0x01, 0x09, 0x01, 0x00, 0x05, 0x2D, 0x00, 0x00, 0x04, 0x01, 0x09, 0x01, 0x08, +/* 00010160 */ 0x06, 0x2D, 0x00, 0x00, 0x08, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFF, 0x1D, 0xD2, 0x01, +/* 00010170 */ 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x2A, 0x00, 0x18, 0x00, 0x53, 0x00, 0x17, 0x00, +/* 00010180 */ 0x46, 0x00, 0x00, 0x7E, 0x5D, 0x08, 0x01, 0x00, 0x1A, 0x0B, 0x00, 0xFE, 0x3B, 0x0A, 0x32, 0xA0, +/* 00010190 */ 0x41, 0xD1, 0x00, 0x9D, 0xFF, 0xE1, 0xC8, 0x01, 0x00, 0xFF, 0xE1, 0xC8, 0x01, 0x00, 0x01, 0xFE, +/* 000101A0 */ 0x00, 0x90, 0x01, 0x01, 0xFF, 0xE1, 0xC8, 0x01, 0x00, 0xFE, 0x13, 0x03, 0xFE, 0x13, 0x03, 0x01, +/* 000101B0 */ 0xFE, 0xB2, 0x04, 0x06, 0x04, 0x07, 0x08, 0x1E, 0x1E, 0x02, 0x03, 0x06, 0x04, 0x05, 0x06, 0x07, +/* 000101C0 */ 0x08, 0x79, 0x4E, 0x07, 0x96, 0x02, 0x07, 0x8F, 0x02, 0x04, 0x07, 0x00, 0x00, 0x07, 0x03, 0x00, +/* 000101D0 */ 0x59, 0x00, 0x03, 0xCD, 0x08, 0x5A, 0x01, 0x08, 0x00, 0x00, 0x5A, 0x02, 0x02, 0x00, 0x00, 0xF0, +/* 000101E0 */ 0x03, 0x07, 0x07, 0x00, 0x00, 0x96, 0x02, 0x07, 0x8F, 0x02, 0x06, 0x07, 0x01, 0x00, 0x07, 0x04, +/* 000101F0 */ 0x00, 0x59, 0x00, 0x03, 0x8F, 0x02, 0x17, 0x08, 0x02, 0x00, 0x5A, 0x01, 0x08, 0x01, 0x00, 0x8F, +/* 00010200 */ 0x02, 0x13, 0x08, 0x03, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x03, 0x8F, 0x02, 0x2F, 0x09, 0x04, +/* 00010210 */ 0x00, 0x5A, 0x01, 0x09, 0x02, 0x00, 0xF0, 0x02, 0x08, 0x08, 0x02, 0x00, 0x5A, 0x02, 0x08, 0x01, +/* 00010220 */ 0x00, 0xD6, 0x00, 0x08, 0x5A, 0x03, 0x08, 0x01, 0x00, 0xF0, 0x04, 0xFF, 0x07, 0x01, 0x00, 0x93, +/* 00010230 */ 0x02, 0x00, 0x05, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFF, 0xF7, 0xC8, 0x01, 0x00, +/* 00010240 */ 0x04, 0x05, 0x00, 0x00, 0x00, 0x21, 0x00, 0x31, 0x00, 0x47, 0x00, 0xB6, 0x02, 0x0A, 0x00, 0x15, +/* 00010250 */ 0x00, 0x00, 0x56, 0x02, 0x01, 0x00, 0x7F, 0x5D, 0x0E, 0x01, 0x00, 0x1A, 0x0B, 0x00, 0xFE, 0x3D, +/* 00010260 */ 0x0A, 0x6B, 0xA2, 0x41, 0xD1, 0x00, 0x9E, 0xFF, 0x8B, 0xC9, 0x01, 0x00, 0xFF, 0x8B, 0xC9, 0x01, +/* 00010270 */ 0x00, 0x01, 0x40, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0x8B, 0xC9, 0x01, 0x00, 0xFE, 0x48, 0x02, +/* 00010280 */ 0xFE, 0x48, 0x02, 0x02, 0xFE, 0xB3, 0x04, 0xFE, 0xB4, 0x04, 0x07, 0x04, 0x08, 0x08, 0x25, 0x25, +/* 00010290 */ 0x03, 0x01, 0x01, 0x03, 0x08, 0x05, 0x06, 0x07, 0x07, 0x08, 0x97, 0x4E, 0x08, 0x96, 0x02, 0x08, +/* 000102A0 */ 0x4E, 0x08, 0x96, 0x03, 0x08, 0x8F, 0x03, 0x2F, 0x08, 0x00, 0x00, 0x98, 0x08, 0x08, 0x04, 0x00, +/* 000102B0 */ 0x00, 0x96, 0x02, 0x08, 0x8F, 0x03, 0x04, 0x08, 0x01, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x03, +/* 000102C0 */ 0xCD, 0x09, 0x5A, 0x01, 0x09, 0x00, 0x00, 0x5A, 0x02, 0x02, 0x00, 0x00, 0xF0, 0x03, 0x08, 0x08, +/* 000102D0 */ 0x00, 0x00, 0x96, 0x03, 0x08, 0x8F, 0x03, 0x06, 0x08, 0x02, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, +/* 000102E0 */ 0x03, 0x8F, 0x03, 0x17, 0x09, 0x03, 0x00, 0x5A, 0x01, 0x09, 0x01, 0x00, 0x8F, 0x03, 0x13, 0x09, +/* 000102F0 */ 0x04, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x03, 0x93, 0x02, 0x0A, 0x05, 0x00, 0x5A, 0x01, 0x0A, +/* 00010300 */ 0x02, 0x00, 0xF0, 0x02, 0x09, 0x09, 0x02, 0x00, 0x5A, 0x02, 0x09, 0x01, 0x00, 0xD6, 0x00, 0x09, +/* 00010310 */ 0x5A, 0x03, 0x09, 0x01, 0x00, 0xF0, 0x04, 0xFF, 0x08, 0x01, 0x00, 0x8F, 0x01, 0x02, 0x08, 0x06, +/* 00010320 */ 0x00, 0x4A, 0x08, 0x93, 0x03, 0x09, 0x07, 0x00, 0x9D, 0x09, 0x08, 0x04, 0x00, 0x00, 0xA8, 0x00, +/* 00010330 */ 0x24, 0x00, 0xFF, 0xAB, 0xC9, 0x01, 0x00, 0x05, 0x0A, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x56, 0x00, +/* 00010340 */ 0x21, 0x00, 0x45, 0x00, 0x46, 0x00, 0x58, 0x01, 0x15, 0x00, 0x34, 0x00, 0x00, 0x51, 0x03, 0x01, +/* 00010350 */ 0x00, 0x7F, 0x4C, 0x06, 0x01, 0x00, 0x10, 0x03, 0x00, 0xFE, 0x41, 0x0A, 0x68, 0xA2, 0x41, 0xD1, +/* 00010360 */ 0x00, 0x9F, 0xFF, 0xA2, 0xCA, 0x01, 0x00, 0xFF, 0xA2, 0xCA, 0x01, 0x00, 0x41, 0xFE, 0x00, 0x90, +/* 00010370 */ 0x02, 0x02, 0xFF, 0xA2, 0xCA, 0x01, 0x00, 0xEC, 0xEC, 0x04, 0x03, 0x06, 0x0D, 0x0C, 0x04, 0x01, +/* 00010380 */ 0x01, 0x02, 0x05, 0x06, 0xFE, 0x47, 0x03, 0x2D, 0x4E, 0x04, 0x8F, 0x01, 0x02, 0x06, 0x00, 0x00, +/* 00010390 */ 0x4A, 0x06, 0x98, 0x06, 0x06, 0x03, 0x00, 0x00, 0x45, 0x04, 0x06, 0x15, 0x03, 0x00, 0x04, 0x02, +/* 000103A0 */ 0x09, 0x0E, 0x00, 0x8F, 0x01, 0x03, 0x06, 0x01, 0x00, 0x4A, 0x06, 0x9D, 0x03, 0x06, 0x04, 0x00, +/* 000103B0 */ 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFF, 0xC9, 0xCA, 0x01, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00, 0x11, +/* 000103C0 */ 0x00, 0x48, 0x00, 0x08, 0x00, 0x2D, 0x00, 0x10, 0x00, 0x4F, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0x01, +/* 000103D0 */ 0x00, 0x10, 0x03, 0x00, 0xFE, 0x16, 0x0A, 0x08, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0xB1, 0x04, 0x9C, +/* 000103E0 */ 0xFF, 0xB9, 0xBE, 0x01, 0x00, 0xFF, 0xB9, 0xBE, 0x01, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x02, 0x02, +/* 000103F0 */ 0xFF, 0xB9, 0xBE, 0x01, 0x00, 0x96, 0x96, 0x05, 0x03, 0x06, 0x05, 0x0E, 0x0E, 0x02, 0x01, 0x02, +/* 00010400 */ 0x05, 0x08, 0x32, 0x58, 0x04, 0x8F, 0x02, 0x2D, 0x06, 0x00, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, +/* 00010410 */ 0x02, 0x5A, 0x01, 0x04, 0x00, 0x00, 0x8F, 0x01, 0x18, 0x07, 0x01, 0x00, 0x4A, 0x07, 0x5A, 0x02, +/* 00010420 */ 0x07, 0x00, 0x00, 0x5A, 0x03, 0x03, 0x00, 0x00, 0xF0, 0x04, 0x00, 0x06, 0x00, 0x00, 0x09, 0x02, +/* 00010430 */ 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFF, 0xF7, 0xBE, 0x01, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x2E, +/* 00010440 */ 0x00, 0x57, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0x01, 0x00, 0x10, 0x03, 0x00, 0xFE, 0x10, 0x0A, 0x08, +/* 00010450 */ 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0xB0, 0x04, 0x9B, 0xFF, 0x13, 0xBD, 0x01, 0x00, 0xFF, 0x13, 0xBD, +/* 00010460 */ 0x01, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x03, 0x02, 0xFF, 0x13, 0xBD, 0x01, 0x00, 0xCC, 0xCC, 0x06, +/* 00010470 */ 0x03, 0x07, 0x06, 0x12, 0x11, 0x02, 0x01, 0x02, 0x06, 0x08, 0x41, 0x58, 0x05, 0x15, 0x05, 0x00, +/* 00010480 */ 0x04, 0x02, 0xA8, 0x07, 0x45, 0x04, 0x07, 0x8F, 0x02, 0x2C, 0x07, 0x00, 0x00, 0x07, 0x05, 0x00, +/* 00010490 */ 0x59, 0x00, 0x02, 0x5A, 0x01, 0x05, 0x00, 0x00, 0x8F, 0x01, 0x16, 0x08, 0x01, 0x00, 0x4A, 0x08, +/* 000104A0 */ 0x5A, 0x02, 0x08, 0x00, 0x00, 0x5A, 0x03, 0x03, 0x00, 0x00, 0x5A, 0x04, 0x04, 0x00, 0x00, 0xF0, +/* 000104B0 */ 0x05, 0x00, 0x07, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFF, 0x51, 0xBD, 0x01, +/* 000104C0 */ 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x23, 0x00, 0x33, 0x00, 0x6A, 0x00, 0x00, 0x7F, +/* 000104D0 */ 0x5C, 0x08, 0x01, 0x00, 0x10, 0x03, 0x00, 0xFE, 0x0A, 0x0A, 0x08, 0xA2, 0x41, 0xC3, 0x00, 0xFE, +/* 000104E0 */ 0xAF, 0x04, 0x9A, 0xFF, 0x39, 0xBB, 0x01, 0x00, 0xFF, 0x39, 0xBB, 0x01, 0x00, 0x09, 0xFE, 0x00, +/* 000104F0 */ 0x90, 0x03, 0x02, 0xFF, 0x39, 0xBB, 0x01, 0x00, 0xC8, 0xC8, 0x06, 0x03, 0x07, 0x06, 0x12, 0x11, +/* 00010500 */ 0x02, 0x01, 0x02, 0x06, 0x08, 0x41, 0x58, 0x05, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA8, 0x07, 0x45, +/* 00010510 */ 0x04, 0x07, 0x8F, 0x02, 0x2C, 0x07, 0x00, 0x00, 0x07, 0x05, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, +/* 00010520 */ 0x05, 0x00, 0x00, 0x8F, 0x01, 0x14, 0x08, 0x01, 0x00, 0x4A, 0x08, 0x5A, 0x02, 0x08, 0x00, 0x00, +/* 00010530 */ 0x5A, 0x03, 0x03, 0x00, 0x00, 0x5A, 0x04, 0x04, 0x00, 0x00, 0xF0, 0x05, 0x00, 0x07, 0x00, 0x00, +/* 00010540 */ 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFF, 0x75, 0xBB, 0x01, 0x00, 0x03, 0x02, 0x00, 0x00, +/* 00010550 */ 0x00, 0x0A, 0x00, 0x23, 0x00, 0x33, 0x00, 0x68, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0x01, 0x00, 0x10, +/* 00010560 */ 0x03, 0x00, 0xFE, 0x04, 0x0A, 0x08, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0xAE, 0x04, 0x99, 0xFF, 0x6F, +/* 00010570 */ 0xB9, 0x01, 0x00, 0xFF, 0x6F, 0xB9, 0x01, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x03, 0x02, 0xFF, 0x6F, +/* 00010580 */ 0xB9, 0x01, 0x00, 0xC0, 0xC0, 0x06, 0x03, 0x07, 0x06, 0x12, 0x11, 0x02, 0x01, 0x02, 0x06, 0x08, +/* 00010590 */ 0x41, 0x58, 0x05, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA8, 0x07, 0x45, 0x04, 0x07, 0x8F, 0x02, 0x2C, +/* 000105A0 */ 0x07, 0x00, 0x00, 0x07, 0x05, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x05, 0x00, 0x00, 0x8F, 0x01, +/* 000105B0 */ 0x12, 0x08, 0x01, 0x00, 0x4A, 0x08, 0x5A, 0x02, 0x08, 0x00, 0x00, 0x5A, 0x03, 0x03, 0x00, 0x00, +/* 000105C0 */ 0x5A, 0x04, 0x04, 0x00, 0x00, 0xF0, 0x05, 0x00, 0x07, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, +/* 000105D0 */ 0x24, 0x00, 0xFF, 0xA7, 0xB9, 0x01, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x23, 0x00, +/* 000105E0 */ 0x33, 0x00, 0x64, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0xE6, 0x09, +/* 000105F0 */ 0x1D, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x38, 0x03, 0x98, 0xFF, 0xCF, 0xB3, 0x01, 0x00, 0xFF, 0xCF, +/* 00010600 */ 0xB3, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFF, 0xCF, 0xB3, 0x01, 0x00, 0xFE, 0x60, +/* 00010610 */ 0x03, 0xFE, 0x60, 0x03, 0x08, 0x08, 0x0C, 0x0A, 0x52, 0x4F, 0x02, 0x09, 0x08, 0x04, 0x04, 0x04, +/* 00010620 */ 0x04, 0x0B, 0x08, 0x06, 0xFE, 0xD6, 0x03, 0x05, 0xFE, 0x9C, 0x03, 0x05, 0xFE, 0xDF, 0x03, 0x06, +/* 00010630 */ 0xFE, 0xE0, 0x03, 0x05, 0xFE, 0xAD, 0x04, 0xFE, 0x5F, 0x01, 0xA8, 0x0A, 0x8F, 0x01, 0x07, 0x0C, +/* 00010640 */ 0x00, 0x00, 0x4A, 0x0C, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x08, 0x00, 0x00, 0xF0, +/* 00010650 */ 0x02, 0x0C, 0x0C, 0x00, 0x00, 0x45, 0x08, 0x0C, 0x2A, 0x0C, 0x09, 0x15, 0x03, 0x00, 0x0C, 0x03, +/* 00010660 */ 0x09, 0x84, 0x00, 0x5F, 0x0C, 0x09, 0x00, 0x45, 0x0A, 0x0C, 0x2A, 0x0C, 0x0A, 0x15, 0x03, 0x00, +/* 00010670 */ 0x0C, 0x03, 0x09, 0x72, 0x00, 0x8F, 0x02, 0x24, 0x0D, 0x01, 0x00, 0x6D, 0x0C, 0x0D, 0x01, 0x07, +/* 00010680 */ 0x02, 0x00, 0x59, 0x00, 0x0D, 0x5A, 0x01, 0x0A, 0x01, 0x00, 0xF4, 0x02, 0x0C, 0x0C, 0x01, 0x00, +/* 00010690 */ 0x00, 0x00, 0x01, 0x00, 0x45, 0x0A, 0x0C, 0x15, 0x03, 0x00, 0x0A, 0x04, 0x09, 0x48, 0x00, 0x15, +/* 000106A0 */ 0x03, 0x00, 0x0A, 0x05, 0x09, 0x40, 0x00, 0x8F, 0x02, 0x03, 0x0D, 0x02, 0x00, 0x6D, 0x0C, 0x0D, +/* 000106B0 */ 0x02, 0x07, 0x04, 0x00, 0x59, 0x00, 0x0D, 0x8F, 0x02, 0x0C, 0x0E, 0x03, 0x00, 0x07, 0x02, 0x00, +/* 000106C0 */ 0x59, 0x00, 0x02, 0x5A, 0x01, 0x0A, 0x03, 0x00, 0xF0, 0x02, 0x0E, 0x0E, 0x03, 0x00, 0x5A, 0x01, +/* 000106D0 */ 0x0E, 0x02, 0x00, 0x5A, 0x02, 0x06, 0x02, 0x00, 0x5A, 0x03, 0x07, 0x02, 0x00, 0xF4, 0x04, 0xFF, +/* 000106E0 */ 0x0C, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x2A, 0x0C, 0x0A, 0x14, 0x08, 0x00, 0x0C, 0x03, 0x14, +/* 000106F0 */ 0x03, 0x00, 0x0A, 0x05, 0x09, 0x60, 0x00, 0x8F, 0x01, 0x08, 0x0C, 0x04, 0x00, 0x4A, 0x0C, 0x07, +/* 00010700 */ 0x04, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x08, 0x04, 0x00, 0x8F, 0x02, 0x26, 0x0D, 0x05, 0x00, +/* 00010710 */ 0x5A, 0x02, 0x0D, 0x04, 0x00, 0x8F, 0x02, 0x03, 0x0E, 0x02, 0x00, 0x6D, 0x0D, 0x0E, 0x03, 0x07, +/* 00010720 */ 0x02, 0x00, 0x59, 0x00, 0x0E, 0x8F, 0x02, 0x2B, 0x0F, 0x06, 0x00, 0x07, 0x01, 0x00, 0x59, 0x00, +/* 00010730 */ 0x02, 0xF0, 0x01, 0x0F, 0x0F, 0x06, 0x00, 0x5A, 0x01, 0x0F, 0x05, 0x00, 0xF4, 0x02, 0x0D, 0x0D, +/* 00010740 */ 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x5A, 0x03, 0x0D, 0x04, 0x00, 0xF0, 0x04, 0x00, 0x0C, 0x04, +/* 00010750 */ 0x00, 0x09, 0x43, 0x00, 0x09, 0x3E, 0x00, 0x8F, 0x01, 0x08, 0x0C, 0x04, 0x00, 0x4A, 0x0C, 0x07, +/* 00010760 */ 0x04, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x08, 0x07, 0x00, 0x8F, 0x02, 0x27, 0x0D, 0x07, 0x00, +/* 00010770 */ 0x5A, 0x02, 0x0D, 0x07, 0x00, 0x8F, 0x02, 0x2B, 0x0D, 0x06, 0x00, 0x07, 0x01, 0x00, 0x59, 0x00, +/* 00010780 */ 0x02, 0xF0, 0x01, 0x0D, 0x0D, 0x08, 0x00, 0x5A, 0x03, 0x0D, 0x07, 0x00, 0xF0, 0x04, 0x00, 0x0C, +/* 00010790 */ 0x07, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x0E, 0x02, 0xFE, 0x22, 0x03, 0xFE, +/* 000107A0 */ 0xAC, 0x02, 0xFE, 0xEE, 0x01, 0xFF, 0x0A, 0xB4, 0x01, 0x00, 0x0B, 0x02, 0x00, 0x00, 0x00, 0x1C, +/* 000107B0 */ 0x00, 0x34, 0x00, 0x0B, 0x00, 0x32, 0x00, 0x07, 0x00, 0x2E, 0x00, 0x0B, 0x00, 0x36, 0x00, 0x22, +/* 000107C0 */ 0x00, 0x37, 0x00, 0x10, 0x00, 0x4A, 0x00, 0x40, 0x00, 0x96, 0x00, 0x10, 0x00, 0x4C, 0x00, 0x60, +/* 000107D0 */ 0x00, 0x93, 0x00, 0x40, 0x00, 0x64, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x03, 0x00, +/* 000107E0 */ 0xFE, 0xD8, 0x09, 0x28, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xF8, 0x02, 0x97, 0xFF, 0xFB, 0xB1, 0x01, +/* 000107F0 */ 0x00, 0xFF, 0xFB, 0xB1, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x04, 0x04, 0xFF, 0xFB, 0xB1, 0x01, +/* 00010800 */ 0x00, 0xFE, 0x8C, 0x01, 0xFE, 0x8C, 0x01, 0x07, 0x05, 0x0A, 0x03, 0x25, 0x24, 0x02, 0x04, 0x02, +/* 00010810 */ 0x04, 0x04, 0x04, 0x04, 0x09, 0x07, 0x05, 0xFE, 0x33, 0x03, 0x08, 0x9F, 0x14, 0x0A, 0x00, 0x05, +/* 00010820 */ 0x02, 0xA8, 0x0A, 0x14, 0x03, 0x00, 0x05, 0x0A, 0x09, 0x1F, 0x00, 0x8F, 0x02, 0x03, 0x0B, 0x00, +/* 00010830 */ 0x00, 0x6D, 0x0A, 0x0B, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0B, 0x5A, 0x01, 0x06, 0x00, 0x00, +/* 00010840 */ 0xF4, 0x02, 0xFF, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x02, 0x03, 0x0B, 0x00, 0x00, +/* 00010850 */ 0x6D, 0x0A, 0x0B, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0B, 0x5A, 0x01, 0x05, 0x01, 0x00, 0xF4, +/* 00010860 */ 0x02, 0x0A, 0x0A, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, 0x08, 0x0A, 0x0E, 0x0C, 0x00, 0x08, +/* 00010870 */ 0x5F, 0x0A, 0x08, 0x02, 0x15, 0x03, 0x00, 0x0A, 0x03, 0x09, 0x1F, 0x00, 0x8F, 0x02, 0x03, 0x0B, +/* 00010880 */ 0x00, 0x00, 0x6D, 0x0A, 0x0B, 0x03, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0B, 0x5A, 0x01, 0x06, 0x02, +/* 00010890 */ 0x00, 0xF4, 0x02, 0xFF, 0x0A, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x8F, 0x01, 0x07, 0x0A, 0x01, +/* 000108A0 */ 0x00, 0x4A, 0x0A, 0x07, 0x02, 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x07, 0x03, 0x00, 0xF0, 0x02, +/* 000108B0 */ 0x00, 0x0A, 0x03, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB1, 0x02, 0xFE, 0x05, +/* 000108C0 */ 0x02, 0xFE, 0x0C, 0x02, 0xFE, 0xB1, 0x02, 0xFF, 0x2C, 0xB2, 0x01, 0x00, 0x07, 0x00, 0x00, 0x00, +/* 000108D0 */ 0x00, 0x0F, 0x00, 0x37, 0x00, 0x1F, 0x00, 0x40, 0x00, 0x22, 0x00, 0x38, 0x00, 0x10, 0x00, 0x3F, +/* 000108E0 */ 0x00, 0x1F, 0x00, 0x40, 0x00, 0x1E, 0x00, 0x2C, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, +/* 000108F0 */ 0x03, 0x00, 0xFE, 0xCB, 0x09, 0x24, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xF7, 0x02, 0x96, 0xFF, 0x37, +/* 00010900 */ 0xB0, 0x01, 0x00, 0xFF, 0x37, 0xB0, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x05, 0x05, 0xFF, 0x37, +/* 00010910 */ 0xB0, 0x01, 0x00, 0xFE, 0x9A, 0x01, 0xFE, 0x9A, 0x01, 0x08, 0x05, 0x0B, 0x04, 0x25, 0x24, 0x02, +/* 00010920 */ 0x04, 0x02, 0x04, 0x04, 0x04, 0x04, 0x0A, 0x07, 0x05, 0xFE, 0x33, 0x03, 0x08, 0xA2, 0x14, 0x0A, +/* 00010930 */ 0x00, 0x05, 0x02, 0xA8, 0x0B, 0x14, 0x03, 0x00, 0x05, 0x0B, 0x09, 0x1F, 0x00, 0x8F, 0x02, 0x03, +/* 00010940 */ 0x0C, 0x00, 0x00, 0x6D, 0x0B, 0x0C, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0C, 0x5A, 0x01, 0x06, +/* 00010950 */ 0x00, 0x00, 0xF4, 0x02, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x02, 0x03, 0x0C, +/* 00010960 */ 0x00, 0x00, 0x6D, 0x0B, 0x0C, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0C, 0x5A, 0x01, 0x05, 0x01, +/* 00010970 */ 0x00, 0xF4, 0x02, 0x0B, 0x0B, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, 0x09, 0x0B, 0x0E, 0x0C, +/* 00010980 */ 0x00, 0x09, 0x5F, 0x0B, 0x09, 0x02, 0x15, 0x03, 0x00, 0x0B, 0x03, 0x09, 0x1F, 0x00, 0x8F, 0x02, +/* 00010990 */ 0x03, 0x0C, 0x00, 0x00, 0x6D, 0x0B, 0x0C, 0x03, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0C, 0x5A, 0x01, +/* 000109A0 */ 0x06, 0x02, 0x00, 0xF4, 0x02, 0xFF, 0x0B, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x8F, 0x02, 0x2E, +/* 000109B0 */ 0x0B, 0x01, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x07, 0x03, 0x00, 0x5A, 0x02, +/* 000109C0 */ 0x08, 0x03, 0x00, 0xF0, 0x03, 0x00, 0x0B, 0x03, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, +/* 000109D0 */ 0xFE, 0xB1, 0x02, 0xFE, 0x05, 0x02, 0xFE, 0x0C, 0x02, 0xFE, 0xB1, 0x02, 0xFF, 0x71, 0xB0, 0x01, +/* 000109E0 */ 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x37, 0x00, 0x1F, 0x00, 0x40, 0x00, 0x22, 0x00, +/* 000109F0 */ 0x38, 0x00, 0x10, 0x00, 0x3F, 0x00, 0x1F, 0x00, 0x40, 0x00, 0x21, 0x00, 0x31, 0x00, 0x00, 0x7E, +/* 00010A00 */ 0x5D, 0x18, 0xC1, 0x13, 0x1A, 0x4B, 0x00, 0xFE, 0xB8, 0x09, 0x04, 0xA3, 0x41, 0xC1, 0x00, 0xFE, +/* 00010A10 */ 0x61, 0x03, 0x94, 0xFF, 0xA2, 0xAC, 0x01, 0x00, 0xFF, 0xA2, 0xAC, 0x01, 0x00, 0x01, 0xFE, 0x00, +/* 00010A20 */ 0x90, 0x04, 0x04, 0xFF, 0xA2, 0xAC, 0x01, 0x00, 0xFE, 0x6F, 0x03, 0xFE, 0x6F, 0x03, 0x04, 0xFE, +/* 00010A30 */ 0xD9, 0x03, 0xFE, 0xAA, 0x04, 0xFE, 0xAB, 0x04, 0xFE, 0xAC, 0x04, 0x09, 0x0A, 0x10, 0x05, 0x20, +/* 00010A40 */ 0x20, 0x02, 0x02, 0x01, 0x05, 0x03, 0x03, 0x03, 0x03, 0x01, 0x0D, 0x0E, 0x0F, 0x01, 0x00, 0x08, +/* 00010A50 */ 0x06, 0xFE, 0xE1, 0x03, 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, 0x2B, 0x03, 0x0C, 0x06, 0xFE, 0x2D, +/* 00010A60 */ 0x03, 0x07, 0x8B, 0x96, 0x04, 0x0B, 0x96, 0x05, 0x0C, 0xD0, 0x10, 0x00, 0x00, 0x00, 0x96, 0x02, +/* 00010A70 */ 0x10, 0x96, 0x03, 0x02, 0x8F, 0x02, 0x06, 0x10, 0x00, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, +/* 00010A80 */ 0x8F, 0x02, 0x17, 0x11, 0x01, 0x00, 0x5A, 0x01, 0x11, 0x00, 0x00, 0x5A, 0x02, 0x0A, 0x00, 0x00, +/* 00010A90 */ 0xD6, 0x00, 0x11, 0x5A, 0x03, 0x11, 0x00, 0x00, 0xF0, 0x04, 0xFF, 0x10, 0x00, 0x00, 0x8F, 0x02, +/* 00010AA0 */ 0x16, 0x10, 0x02, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, 0x93, 0x02, 0x11, 0x03, 0x00, 0x5A, +/* 00010AB0 */ 0x01, 0x11, 0x01, 0x00, 0x5A, 0x02, 0x04, 0x01, 0x00, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00010AC0 */ 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x93, 0x03, 0x12, 0x04, 0x00, 0x7B, 0x12, 0x11, 0x00, 0x7B, +/* 00010AD0 */ 0x07, 0x11, 0x01, 0x7B, 0x07, 0x11, 0x02, 0x5A, 0x03, 0x11, 0x01, 0x00, 0xF0, 0x04, 0xFF, 0x10, +/* 00010AE0 */ 0x01, 0x00, 0x93, 0x02, 0x00, 0x03, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x01, 0x14, +/* 00010AF0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, +/* 00010B00 */ 0x00, 0x96, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, +/* 00010B10 */ 0x95, 0x01, 0xFF, 0xF5, 0xAC, 0x01, 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 0x08, 0x00, 0x19, 0x00, +/* 00010B20 */ 0x03, 0x00, 0x17, 0x00, 0x2A, 0x00, 0x70, 0x02, 0x44, 0x00, 0x68, 0x00, 0x0A, 0x00, 0x13, 0x00, +/* 00010B30 */ 0x00, 0x35, 0x0B, 0x01, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x53, 0x50, 0x43, 0x00, 0xFE, 0xBB, 0x09, +/* 00010B40 */ 0x41, 0xB2, 0x41, 0xD1, 0x00, 0x95, 0xFF, 0x5E, 0xAD, 0x01, 0x00, 0xFF, 0x5E, 0xAD, 0x01, 0x00, +/* 00010B50 */ 0x45, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0x5E, 0xAD, 0x01, 0x00, 0xFE, 0x2C, 0x02, 0xFE, 0x2C, +/* 00010B60 */ 0x02, 0x08, 0x0B, 0x0F, 0x06, 0x2F, 0x2E, 0x03, 0x03, 0x07, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, +/* 00010B70 */ 0x0E, 0x0F, 0x08, 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, 0x2B, 0x03, 0x0C, 0x06, 0xFE, 0x2D, 0x03, +/* 00010B80 */ 0x06, 0xFE, 0x2C, 0x03, 0x0B, 0x07, 0x01, 0x01, 0xC3, 0xA8, 0x0D, 0xE7, 0x9F, 0x00, 0x8F, 0x03, +/* 00010B90 */ 0x29, 0x10, 0x00, 0x00, 0x07, 0x05, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x0B, 0x00, 0x00, 0x8F, +/* 00010BA0 */ 0x01, 0x04, 0x11, 0x01, 0x00, 0x5A, 0x02, 0x11, 0x00, 0x00, 0xA8, 0x11, 0x5A, 0x03, 0x11, 0x00, +/* 00010BB0 */ 0x00, 0x8F, 0x01, 0x05, 0x11, 0x02, 0x00, 0x5A, 0x04, 0x11, 0x00, 0x00, 0xF0, 0x05, 0x10, 0x10, +/* 00010BC0 */ 0x00, 0x00, 0x45, 0x0D, 0x10, 0x5F, 0x10, 0x0D, 0x00, 0x0E, 0x5C, 0x00, 0x10, 0x8F, 0x03, 0x16, +/* 00010BD0 */ 0x10, 0x03, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x8F, 0x01, 0x02, 0x11, 0x04, 0x00, 0x5A, +/* 00010BE0 */ 0x01, 0x11, 0x01, 0x00, 0x8F, 0x01, 0x03, 0x11, 0x05, 0x00, 0x5A, 0x02, 0x11, 0x01, 0x00, 0xCE, +/* 00010BF0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x5F, 0x12, 0x0D, 0x01, +/* 00010C00 */ 0x7B, 0x12, 0x11, 0x02, 0x7B, 0x05, 0x11, 0x03, 0x7B, 0x05, 0x11, 0x04, 0x7B, 0x08, 0x11, 0x05, +/* 00010C10 */ 0x5A, 0x03, 0x11, 0x01, 0x00, 0xF0, 0x04, 0xFF, 0x10, 0x01, 0x00, 0x8F, 0x01, 0x03, 0x10, 0x05, +/* 00010C20 */ 0x00, 0x2D, 0x10, 0x10, 0x0A, 0x94, 0x01, 0x03, 0x10, 0xEB, 0x09, 0x1B, 0x00, 0xE9, 0x0C, 0x06, +/* 00010C30 */ 0x8F, 0x03, 0x22, 0x10, 0x06, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x0C, 0x02, +/* 00010C40 */ 0x00, 0xF0, 0x02, 0xFF, 0x10, 0x02, 0x00, 0xEB, 0xA8, 0x00, 0x24, 0x00, 0x01, 0x18, 0x00, 0x00, +/* 00010C50 */ 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, +/* 00010C60 */ 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0xFE, 0x0D, 0x02, 0xFE, 0x0D, +/* 00010C70 */ 0x02, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x94, 0x01, 0xFF, 0x94, 0xAD, +/* 00010C80 */ 0x01, 0x00, 0x07, 0x05, 0x00, 0x00, 0x00, 0x37, 0x00, 0x5E, 0x00, 0x08, 0x00, 0x2B, 0x00, 0x4E, +/* 00010C90 */ 0x00, 0x8D, 0x00, 0x14, 0x00, 0x33, 0x00, 0x01, 0x00, 0x1D, 0x00, 0x1A, 0x00, 0x8F, 0x00, 0x00, +/* 00010CA0 */ 0x7E, 0x5D, 0x19, 0xC1, 0x03, 0x1A, 0x0B, 0x00, 0xFE, 0x93, 0x09, 0x04, 0xA3, 0x41, 0xC1, 0x00, +/* 00010CB0 */ 0xFE, 0x60, 0x03, 0x92, 0xFF, 0x27, 0xA8, 0x01, 0x00, 0xFF, 0x27, 0xA8, 0x01, 0x00, 0x01, 0xFE, +/* 00010CC0 */ 0x00, 0x90, 0x02, 0x02, 0xFF, 0x27, 0xA8, 0x01, 0x00, 0xFE, 0x75, 0x04, 0xFE, 0x75, 0x04, 0x02, +/* 00010CD0 */ 0xFE, 0xA8, 0x04, 0xFE, 0xCF, 0x03, 0x08, 0x06, 0x0B, 0x05, 0x2F, 0x2C, 0x02, 0x01, 0x03, 0x03, +/* 00010CE0 */ 0x03, 0x03, 0x03, 0x03, 0x03, 0x08, 0x09, 0x0A, 0x06, 0xFE, 0xD6, 0x03, 0x06, 0xFE, 0xA3, 0x03, +/* 00010CF0 */ 0x01, 0x00, 0x08, 0xBB, 0x4E, 0x07, 0x4E, 0x0B, 0x96, 0x02, 0x0B, 0x4E, 0x0B, 0x96, 0x03, 0x0B, +/* 00010D00 */ 0x2A, 0x0B, 0x06, 0x14, 0x03, 0x00, 0x0B, 0x02, 0x09, 0x08, 0x00, 0xD0, 0x00, 0x00, 0x00, 0x00, +/* 00010D10 */ 0x09, 0x9A, 0x00, 0x2A, 0x0B, 0x06, 0x14, 0x03, 0x00, 0x0B, 0x03, 0x09, 0x0C, 0x00, 0xD0, 0x0B, +/* 00010D20 */ 0x01, 0x01, 0x00, 0xA1, 0x00, 0x06, 0x0B, 0x45, 0x06, 0x0B, 0x8F, 0x02, 0x24, 0x0C, 0x00, 0x00, +/* 00010D30 */ 0x6D, 0x0B, 0x0C, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0C, 0x5A, 0x01, 0x06, 0x00, 0x00, 0xF4, +/* 00010D40 */ 0x02, 0x0B, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x06, 0x0B, 0x8F, 0x02, 0x24, 0x0C, +/* 00010D50 */ 0x00, 0x00, 0x6D, 0x0B, 0x0C, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0C, 0xA7, 0x0D, 0x06, 0x02, +/* 00010D60 */ 0x00, 0x00, 0x5A, 0x01, 0x0D, 0x01, 0x00, 0xF4, 0x02, 0x0B, 0x0B, 0x01, 0x00, 0x00, 0x00, 0x01, +/* 00010D70 */ 0x00, 0x45, 0x07, 0x0B, 0xD0, 0x0B, 0x00, 0x02, 0x00, 0x96, 0x02, 0x0B, 0x96, 0x03, 0x04, 0x8F, +/* 00010D80 */ 0x02, 0x25, 0x0B, 0x01, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x05, 0x5A, 0x01, 0x06, 0x02, 0x00, +/* 00010D90 */ 0x5A, 0x02, 0x07, 0x02, 0x00, 0xD6, 0x00, 0x0C, 0x5A, 0x03, 0x0C, 0x02, 0x00, 0xF0, 0x04, 0xFF, +/* 00010DA0 */ 0x0B, 0x02, 0x00, 0x93, 0x02, 0x00, 0x02, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, +/* 00010DB0 */ 0x21, 0x03, 0xFE, 0xA5, 0x04, 0xD1, 0xFF, 0x5A, 0xA8, 0x01, 0x00, 0x0B, 0x0C, 0x00, 0x00, 0x00, +/* 00010DC0 */ 0x0B, 0x00, 0x32, 0x00, 0x08, 0x00, 0x1E, 0x00, 0x0B, 0x00, 0x2F, 0x00, 0x0C, 0x00, 0x28, 0x00, +/* 00010DD0 */ 0x22, 0x00, 0x2E, 0x00, 0x28, 0x00, 0x70, 0x00, 0x08, 0x00, 0x17, 0x00, 0x03, 0x00, 0x14, 0x00, +/* 00010DE0 */ 0x24, 0x00, 0xC0, 0x02, 0x0A, 0x00, 0x11, 0x00, 0x00, 0xED, 0x0D, 0x01, 0x00, 0x7F, 0x5C, 0x08, +/* 00010DF0 */ 0xC1, 0x13, 0x10, 0x43, 0x00, 0xFE, 0xA3, 0x09, 0x2A, 0xA2, 0x41, 0xD1, 0x00, 0x93, 0xFF, 0xEC, +/* 00010E00 */ 0xA9, 0x01, 0x00, 0xFF, 0xEC, 0xA9, 0x01, 0x00, 0x41, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0xEC, +/* 00010E10 */ 0xA9, 0x01, 0x00, 0xFE, 0x92, 0x02, 0xFE, 0x92, 0x02, 0x07, 0x0E, 0x11, 0x06, 0x55, 0x53, 0x03, +/* 00010E20 */ 0x08, 0x09, 0x09, 0x09, 0x09, 0x09, 0x01, 0x10, 0x06, 0xFE, 0xA3, 0x03, 0x06, 0xFE, 0x94, 0x03, +/* 00010E30 */ 0x07, 0x05, 0xFE, 0xA9, 0x04, 0x08, 0x01, 0xFF, 0x01, 0x01, 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, +/* 00010E40 */ 0x2B, 0x03, 0x0B, 0x06, 0xFE, 0x2C, 0x03, 0x06, 0xFE, 0x2D, 0x03, 0xFE, 0x7D, 0x01, 0x4E, 0x0F, +/* 00010E50 */ 0x2A, 0x11, 0x0E, 0x15, 0x03, 0x00, 0x11, 0x02, 0x09, 0x08, 0x00, 0x2A, 0x11, 0x0E, 0x15, 0x08, +/* 00010E60 */ 0x00, 0x11, 0x03, 0x14, 0x03, 0x00, 0x0E, 0x04, 0x09, 0x1F, 0x00, 0x8F, 0x03, 0x03, 0x12, 0x00, +/* 00010E70 */ 0x00, 0x6D, 0x11, 0x12, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x12, 0x5A, 0x01, 0x05, 0x00, 0x00, +/* 00010E80 */ 0xF4, 0x02, 0xFF, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x03, 0x24, 0x12, 0x01, 0x00, +/* 00010E90 */ 0x6D, 0x11, 0x12, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x12, 0x5A, 0x01, 0x0E, 0x01, 0x00, 0xF4, +/* 00010EA0 */ 0x02, 0x11, 0x11, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, 0x0F, 0x11, 0x8F, 0x02, 0x0C, 0x11, +/* 00010EB0 */ 0x02, 0x00, 0x4A, 0x11, 0x07, 0x02, 0x00, 0x59, 0x00, 0x06, 0x5A, 0x01, 0x0F, 0x02, 0x00, 0xF0, +/* 00010EC0 */ 0x02, 0x11, 0x11, 0x02, 0x00, 0x0F, 0x36, 0x00, 0x11, 0x8F, 0x03, 0x03, 0x12, 0x00, 0x00, 0x6D, +/* 00010ED0 */ 0x11, 0x12, 0x02, 0x07, 0x02, 0x00, 0x59, 0x00, 0x12, 0x8F, 0x03, 0x0C, 0x13, 0x03, 0x00, 0x07, +/* 00010EE0 */ 0x02, 0x00, 0x59, 0x00, 0x06, 0x5A, 0x01, 0x0F, 0x04, 0x00, 0xF0, 0x02, 0x13, 0x13, 0x04, 0x00, +/* 00010EF0 */ 0x5A, 0x01, 0x13, 0x03, 0x00, 0xF4, 0x02, 0xFF, 0x11, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x8F, +/* 00010F00 */ 0x03, 0x03, 0x12, 0x00, 0x00, 0x6D, 0x11, 0x12, 0x03, 0x07, 0x02, 0x00, 0x59, 0x00, 0x12, 0x5A, +/* 00010F10 */ 0x01, 0x0F, 0x05, 0x00, 0xF4, 0x02, 0x11, 0x11, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x45, 0x0F, +/* 00010F20 */ 0x11, 0xA8, 0x11, 0x15, 0x03, 0x00, 0x0F, 0x11, 0x09, 0x9C, 0x00, 0x8F, 0x03, 0x06, 0x11, 0x04, +/* 00010F30 */ 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x06, 0x8F, 0x03, 0x18, 0x12, 0x05, 0x00, 0x5A, 0x01, 0x12, +/* 00010F40 */ 0x06, 0x00, 0x8F, 0x01, 0x02, 0x12, 0x06, 0x00, 0x4A, 0x12, 0x5A, 0x02, 0x12, 0x06, 0x00, 0x5A, +/* 00010F50 */ 0x03, 0x0F, 0x06, 0x00, 0xF0, 0x04, 0x11, 0x11, 0x06, 0x00, 0x14, 0x03, 0x00, 0x11, 0x07, 0x09, +/* 00010F60 */ 0x65, 0x00, 0x8F, 0x03, 0x36, 0x12, 0x07, 0x00, 0x4A, 0x12, 0x6D, 0x11, 0x12, 0x04, 0x07, 0x04, +/* 00010F70 */ 0x00, 0x59, 0x00, 0x12, 0x8F, 0x01, 0x02, 0x13, 0x06, 0x00, 0x4A, 0x13, 0x5A, 0x01, 0x13, 0x07, +/* 00010F80 */ 0x00, 0x8F, 0x01, 0x03, 0x14, 0x08, 0x00, 0x4A, 0x14, 0x43, 0x13, 0x14, 0x2D, 0x14, 0x13, 0x08, +/* 00010F90 */ 0x01, 0x43, 0x01, 0x01, 0x03, 0x14, 0x5A, 0x02, 0x13, 0x07, 0x00, 0xCE, 0x00, 0x00, 0x00, 0x00, +/* 00010FA0 */ 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x7B, 0x0F, 0x13, 0x05, 0x7B, 0x0B, 0x13, 0x06, +/* 00010FB0 */ 0x7B, 0x0B, 0x13, 0x07, 0x7B, 0x0B, 0x13, 0x08, 0x5A, 0x03, 0x13, 0x07, 0x00, 0xF4, 0x04, 0xFF, +/* 00010FC0 */ 0x11, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x01, 0x18, 0x00, 0x00, 0x00, +/* 00010FD0 */ 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, +/* 00010FE0 */ 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0xFE, 0xAE, 0x02, 0xFE, 0x22, 0x03, +/* 00010FF0 */ 0xFE, 0xAF, 0x02, 0xFE, 0xEE, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, +/* 00011000 */ 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFF, 0x0C, 0xAA, 0x01, 0x00, 0x09, 0x02, 0x00, 0x00, 0x00, 0x1B, +/* 00011010 */ 0x00, 0x65, 0x00, 0x1F, 0x00, 0x47, 0x00, 0x22, 0x00, 0x32, 0x00, 0x1D, 0x00, 0x35, 0x00, 0x36, +/* 00011020 */ 0x00, 0x4B, 0x00, 0x22, 0x00, 0x37, 0x00, 0x41, 0x00, 0x65, 0x00, 0x67, 0x00, 0x77, 0x00, 0x00, +/* 00011030 */ 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x88, 0x09, 0x04, 0xA3, 0x41, 0xC1, 0x00, +/* 00011040 */ 0xFE, 0x5E, 0x03, 0x91, 0xFF, 0xB2, 0xA6, 0x01, 0x00, 0xFF, 0xB2, 0xA6, 0x01, 0x00, 0x01, 0xFE, +/* 00011050 */ 0x00, 0x90, 0x02, 0x02, 0xFF, 0xB2, 0xA6, 0x01, 0x00, 0xF8, 0xF8, 0x05, 0x04, 0x06, 0x04, 0x1D, +/* 00011060 */ 0x1C, 0x02, 0x03, 0x04, 0x02, 0x02, 0x02, 0x02, 0x05, 0x08, 0x07, 0x79, 0x8F, 0x02, 0x24, 0x07, +/* 00011070 */ 0x00, 0x00, 0x6D, 0x06, 0x07, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x07, 0x5A, 0x01, 0x04, 0x00, +/* 00011080 */ 0x00, 0xF4, 0x02, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x04, 0x06, 0x8F, 0x01, +/* 00011090 */ 0x0E, 0x06, 0x01, 0x00, 0x4A, 0x06, 0x0F, 0x14, 0x00, 0x06, 0x8F, 0x01, 0x04, 0x06, 0x02, 0x00, +/* 000110A0 */ 0x4A, 0x06, 0x07, 0x01, 0x00, 0x59, 0x00, 0x02, 0xF0, 0x01, 0xFF, 0x06, 0x01, 0x00, 0x8F, 0x02, +/* 000110B0 */ 0x03, 0x07, 0x03, 0x00, 0x6D, 0x06, 0x07, 0x01, 0x07, 0x03, 0x00, 0x59, 0x00, 0x07, 0x5A, 0x01, +/* 000110C0 */ 0x04, 0x02, 0x00, 0x8F, 0x01, 0x0E, 0x08, 0x01, 0x00, 0x4A, 0x08, 0x5A, 0x02, 0x08, 0x02, 0x00, +/* 000110D0 */ 0xF4, 0x03, 0x06, 0x06, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x42, 0x00, 0x06, 0x03, 0x09, 0x02, +/* 000110E0 */ 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x22, 0x03, 0xFE, 0xC0, 0x02, 0xFF, 0xE4, 0xA6, 0x01, 0x00, +/* 000110F0 */ 0x05, 0x00, 0x00, 0x00, 0x00, 0x22, 0x00, 0x29, 0x00, 0x0C, 0x00, 0x25, 0x00, 0x14, 0x00, 0x2F, +/* 00011100 */ 0x00, 0x35, 0x00, 0x48, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0x01, 0x00, 0x10, 0x03, 0x00, 0xFE, 0x4D, +/* 00011110 */ 0x09, 0x04, 0xA1, 0x41, 0xC1, 0x00, 0xFE, 0x66, 0x03, 0x90, 0xFF, 0xAE, 0x93, 0x01, 0x00, 0xFF, +/* 00011120 */ 0xAE, 0x93, 0x01, 0x00, 0x41, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFF, 0xAE, 0x93, 0x01, 0x00, 0xFE, +/* 00011130 */ 0xFE, 0x12, 0xFE, 0xFE, 0x12, 0x16, 0x25, 0x38, 0x04, 0xAD, 0x88, 0x02, 0x03, 0x01, 0x37, 0x05, +/* 00011140 */ 0xFE, 0xAD, 0x03, 0x05, 0xFE, 0xAE, 0x03, 0x05, 0xFE, 0xAF, 0x03, 0x06, 0xFE, 0xB0, 0x03, 0x06, +/* 00011150 */ 0xFE, 0xB1, 0x03, 0x05, 0xFE, 0xB2, 0x03, 0x05, 0xFE, 0xB3, 0x03, 0x05, 0xFE, 0xB4, 0x03, 0x05, +/* 00011160 */ 0xFE, 0xB5, 0x03, 0x05, 0xFE, 0xB6, 0x03, 0x05, 0xFE, 0xB7, 0x03, 0x05, 0xFE, 0xB8, 0x03, 0x05, +/* 00011170 */ 0xFE, 0xB9, 0x03, 0x05, 0xFE, 0xBA, 0x03, 0x05, 0xFE, 0xBB, 0x03, 0x05, 0xFE, 0xBC, 0x03, 0x06, +/* 00011180 */ 0xFE, 0x47, 0x03, 0x05, 0xFE, 0xBD, 0x03, 0x05, 0xFE, 0xBE, 0x03, 0x05, 0xFE, 0xBF, 0x03, 0x05, +/* 00011190 */ 0xFE, 0xC0, 0x03, 0x05, 0xFE, 0xC1, 0x03, 0x05, 0xFE, 0xC2, 0x03, 0x05, 0xFE, 0xC3, 0x03, 0x05, +/* 000111A0 */ 0xFE, 0xC4, 0x03, 0x05, 0xFE, 0xC5, 0x03, 0x05, 0xFE, 0xC6, 0x03, 0x05, 0xFE, 0xC7, 0x03, 0x05, +/* 000111B0 */ 0xFE, 0xC8, 0x03, 0x05, 0xFE, 0xA7, 0x04, 0x05, 0xFE, 0xC9, 0x03, 0x05, 0xFE, 0xCA, 0x03, 0x05, +/* 000111C0 */ 0xFE, 0xCB, 0x03, 0x05, 0xFE, 0xCC, 0x03, 0x06, 0xFE, 0xCF, 0x03, 0xFE, 0x96, 0x02, 0x4E, 0x25, +/* 000111D0 */ 0x4E, 0x26, 0x4E, 0x27, 0x4E, 0x28, 0x4E, 0x29, 0x4E, 0x2A, 0x4E, 0x2B, 0x4E, 0x2C, 0x4E, 0x2D, +/* 000111E0 */ 0x4E, 0x2E, 0x4E, 0x2F, 0x4E, 0x30, 0x4E, 0x31, 0x4E, 0x32, 0x4E, 0x33, 0x4E, 0x34, 0x4E, 0x35, +/* 000111F0 */ 0x4E, 0x36, 0x45, 0x25, 0x02, 0x45, 0x26, 0x03, 0x45, 0x38, 0x04, 0x01, 0x09, 0x01, 0x39, 0x25, +/* 00011200 */ 0x2D, 0x38, 0x38, 0x39, 0x2D, 0x38, 0x38, 0x05, 0x01, 0x09, 0x01, 0x39, 0x26, 0x2D, 0x38, 0x38, +/* 00011210 */ 0x39, 0x2D, 0x38, 0x38, 0x06, 0x45, 0x27, 0x38, 0x45, 0x28, 0x07, 0x2D, 0x38, 0x08, 0x09, 0x45, +/* 00011220 */ 0x29, 0x38, 0x45, 0x38, 0x0A, 0x01, 0x09, 0x01, 0x39, 0x28, 0x2D, 0x38, 0x38, 0x39, 0x2D, 0x38, +/* 00011230 */ 0x38, 0x05, 0x01, 0x09, 0x01, 0x39, 0x29, 0x2D, 0x38, 0x38, 0x39, 0x2D, 0x38, 0x38, 0x0B, 0x45, +/* 00011240 */ 0x2A, 0x38, 0x45, 0x38, 0x0C, 0x01, 0x09, 0x01, 0x39, 0x27, 0x2D, 0x38, 0x38, 0x39, 0x2D, 0x38, +/* 00011250 */ 0x38, 0x0D, 0x45, 0x2B, 0x38, 0x45, 0x38, 0x0A, 0x01, 0x09, 0x01, 0x39, 0x26, 0x2D, 0x38, 0x38, +/* 00011260 */ 0x39, 0x2D, 0x38, 0x38, 0x0E, 0x45, 0x2C, 0x38, 0x45, 0x38, 0x0A, 0x01, 0x09, 0x01, 0x39, 0x2C, +/* 00011270 */ 0x2D, 0x38, 0x38, 0x39, 0x2D, 0x38, 0x38, 0x0F, 0x01, 0x09, 0x01, 0x39, 0x27, 0x2D, 0x38, 0x38, +/* 00011280 */ 0x39, 0x2D, 0x38, 0x38, 0x10, 0x45, 0x2D, 0x38, 0x45, 0x38, 0x0A, 0x01, 0x09, 0x01, 0x39, 0x27, +/* 00011290 */ 0x2D, 0x38, 0x38, 0x39, 0x2D, 0x38, 0x38, 0x11, 0x01, 0x09, 0x01, 0x39, 0x26, 0x2D, 0x38, 0x38, +/* 000112A0 */ 0x39, 0x01, 0x09, 0x01, 0x39, 0x27, 0x2D, 0x38, 0x38, 0x39, 0x2D, 0x38, 0x38, 0x13, 0x45, 0x2E, +/* 000112B0 */ 0x38, 0x45, 0x38, 0x0A, 0x01, 0x09, 0x01, 0x39, 0x25, 0x2D, 0x38, 0x38, 0x39, 0x2D, 0x38, 0x38, +/* 000112C0 */ 0x14, 0x01, 0x09, 0x01, 0x39, 0x26, 0x2D, 0x38, 0x38, 0x39, 0x2D, 0x38, 0x38, 0x13, 0x45, 0x2F, +/* 000112D0 */ 0x38, 0x45, 0x38, 0x0A, 0x01, 0x09, 0x01, 0x39, 0x25, 0x2D, 0x38, 0x38, 0x39, 0x2D, 0x38, 0x38, +/* 000112E0 */ 0x15, 0x45, 0x30, 0x38, 0x45, 0x38, 0x0A, 0x01, 0x09, 0x01, 0x39, 0x25, 0x2D, 0x38, 0x38, 0x39, +/* 000112F0 */ 0x2D, 0x38, 0x38, 0x16, 0x01, 0x09, 0x01, 0x39, 0x25, 0x2D, 0x38, 0x38, 0x39, 0x2D, 0x38, 0x38, +/* 00011300 */ 0x17, 0x45, 0x31, 0x38, 0x01, 0x09, 0x01, 0x38, 0x25, 0x2D, 0x38, 0x38, 0x18, 0x2D, 0x38, 0x0A, +/* 00011310 */ 0x38, 0x45, 0x39, 0x19, 0x01, 0x09, 0x01, 0x3A, 0x31, 0x2D, 0x39, 0x39, 0x3A, 0x2D, 0x39, 0x39, +/* 00011320 */ 0x1A, 0x2D, 0x38, 0x38, 0x39, 0x45, 0x39, 0x05, 0x01, 0x09, 0x01, 0x3A, 0x25, 0x2D, 0x39, 0x39, +/* 00011330 */ 0x3A, 0x2D, 0x39, 0x39, 0x1B, 0x2D, 0x38, 0x38, 0x39, 0x2D, 0x38, 0x38, 0x0B, 0x45, 0x32, 0x38, +/* 00011340 */ 0x45, 0x38, 0x1C, 0x01, 0x09, 0x01, 0x39, 0x32, 0x2D, 0x38, 0x38, 0x39, 0x2D, 0x38, 0x38, 0x0B, +/* 00011350 */ 0x45, 0x39, 0x1D, 0x01, 0x09, 0x01, 0x3A, 0x30, 0x2D, 0x39, 0x39, 0x3A, 0x2D, 0x39, 0x39, 0x1E, +/* 00011360 */ 0x2D, 0x38, 0x38, 0x39, 0x45, 0x39, 0x1D, 0x01, 0x09, 0x01, 0x3A, 0x2F, 0x2D, 0x39, 0x39, 0x3A, +/* 00011370 */ 0x2D, 0x39, 0x39, 0x1E, 0x2D, 0x38, 0x38, 0x39, 0x45, 0x33, 0x38, 0x45, 0x38, 0x19, 0x01, 0x09, +/* 00011380 */ 0x01, 0x39, 0x2E, 0x2D, 0x38, 0x38, 0x39, 0x2D, 0x38, 0x38, 0x1F, 0x45, 0x39, 0x20, 0x01, 0x09, +/* 00011390 */ 0x01, 0x3A, 0x2D, 0x2D, 0x39, 0x39, 0x3A, 0x2D, 0x39, 0x39, 0x21, 0x2D, 0x38, 0x38, 0x39, 0x45, +/* 000113A0 */ 0x39, 0x19, 0x01, 0x09, 0x01, 0x3A, 0x2B, 0x2D, 0x39, 0x39, 0x3A, 0x2D, 0x39, 0x39, 0x22, 0x2D, +/* 000113B0 */ 0x38, 0x38, 0x39, 0x45, 0x34, 0x38, 0x45, 0x38, 0x23, 0x01, 0x09, 0x01, 0x39, 0x33, 0x2D, 0x38, +/* 000113C0 */ 0x38, 0x39, 0x2D, 0x38, 0x38, 0x23, 0x01, 0x09, 0x01, 0x39, 0x34, 0x2D, 0x38, 0x38, 0x39, 0x2D, +/* 000113D0 */ 0x38, 0x38, 0x23, 0x45, 0x35, 0x38, 0x45, 0x38, 0x0A, 0x01, 0x09, 0x01, 0x39, 0x35, 0x2D, 0x38, +/* 000113E0 */ 0x38, 0x39, 0x2D, 0x38, 0x38, 0x05, 0x01, 0x09, 0x01, 0x39, 0x2B, 0x2D, 0x38, 0x38, 0x39, 0x2D, +/* 000113F0 */ 0x38, 0x38, 0x05, 0x01, 0x09, 0x01, 0x39, 0x2A, 0x2D, 0x38, 0x38, 0x39, 0x2D, 0x38, 0x38, 0x0B, +/* 00011400 */ 0x45, 0x36, 0x38, 0x8F, 0x02, 0x0A, 0x38, 0x00, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x01, 0x33, 0x00, +/* 00011410 */ 0x00, 0x5A, 0x02, 0x24, 0x00, 0x00, 0xC5, 0x03, 0x38, 0x38, 0x00, 0x00, 0x01, 0x43, 0x01, 0x01, +/* 00011420 */ 0x0F, 0x38, 0x8F, 0x02, 0x0A, 0x38, 0x00, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x01, 0x34, 0x01, 0x00, +/* 00011430 */ 0x5A, 0x02, 0x24, 0x01, 0x00, 0xC5, 0x03, 0x38, 0x38, 0x01, 0x00, 0x01, 0x43, 0x01, 0x01, 0x10, +/* 00011440 */ 0x38, 0x8F, 0x02, 0x0A, 0x38, 0x00, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x01, 0x36, 0x02, 0x00, 0x5A, +/* 00011450 */ 0x02, 0x24, 0x02, 0x00, 0xC5, 0x03, 0x38, 0x38, 0x02, 0x00, 0x01, 0x43, 0x01, 0x01, 0x11, 0x38, +/* 00011460 */ 0xA8, 0x00, 0x24, 0x00, 0xFF, 0x8E, 0x98, 0x01, 0x00, 0x16, 0x24, 0x00, 0x00, 0x00, 0x03, 0x00, +/* 00011470 */ 0x1F, 0x00, 0x03, 0x00, 0x1F, 0x00, 0x20, 0x00, 0x33, 0x00, 0x03, 0x00, 0x77, 0x00, 0x07, 0x00, +/* 00011480 */ 0xC0, 0x00, 0x20, 0x00, 0x44, 0x00, 0x13, 0x00, 0x7D, 0x00, 0x13, 0x00, 0x94, 0x00, 0x20, 0x00, +/* 00011490 */ 0x83, 0x00, 0x29, 0x00, 0x83, 0x00, 0x20, 0x00, 0x74, 0x00, 0x13, 0x00, 0x6A, 0x00, 0x20, 0x00, +/* 000114A0 */ 0x7A, 0x00, 0x3C, 0x00, 0x00, 0x04, 0x3B, 0x00, 0x4C, 0x01, 0x3B, 0x00, 0x5A, 0x01, 0x20, 0x00, +/* 000114B0 */ 0x4B, 0x00, 0x2D, 0x00, 0x6E, 0x00, 0x1F, 0x00, 0x66, 0x00, 0x1F, 0x00, 0x8B, 0x00, 0x21, 0x00, +/* 000114C0 */ 0x72, 0x00, 0x00, 0x7F, 0x4C, 0x00, 0x00, 0x20, 0x10, 0x03, 0x00, 0xFE, 0x46, 0x09, 0x04, 0xA1, +/* 000114D0 */ 0x41, 0xC1, 0x00, 0xFE, 0x51, 0x03, 0x8F, 0xFF, 0x71, 0x92, 0x01, 0x00, 0xFF, 0x71, 0x92, 0x01, +/* 000114E0 */ 0x00, 0x41, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFF, 0x71, 0x92, 0x01, 0x00, 0x55, 0x55, 0x02, 0x02, +/* 000114F0 */ 0x03, 0x05, 0x05, 0x02, 0x01, 0x02, 0x0D, 0xE2, 0x03, 0x00, 0x01, 0x43, 0x01, 0x01, 0x0E, 0x03, +/* 00011500 */ 0xA8, 0x00, 0x24, 0x00, 0x0A, 0xFE, 0xAB, 0x03, 0x01, 0xFF, 0x9F, 0x92, 0x01, 0x00, 0x02, 0x00, +/* 00011510 */ 0x00, 0x00, 0x00, 0x0B, 0x00, 0x26, 0x00, 0x00, 0x7F, 0x5C, 0x0A, 0xC1, 0x43, 0x50, 0x03, 0x00, +/* 00011520 */ 0xFE, 0x35, 0x09, 0x04, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x5B, 0x03, 0x8E, 0xFF, 0x0C, 0x90, 0x01, +/* 00011530 */ 0x00, 0xFF, 0x0C, 0x90, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x06, 0x06, 0xFF, 0x0C, 0x90, 0x01, +/* 00011540 */ 0x00, 0xFE, 0x45, 0x02, 0xFE, 0x45, 0x02, 0x0C, 0x07, 0x0F, 0x08, 0x3A, 0x37, 0x02, 0x01, 0x06, +/* 00011550 */ 0x05, 0x03, 0x03, 0x03, 0x03, 0x01, 0x0E, 0x0F, 0x06, 0xFE, 0xD6, 0x03, 0x08, 0x06, 0xFE, 0xA8, +/* 00011560 */ 0x03, 0x05, 0xFE, 0xA9, 0x03, 0x06, 0xFE, 0xAA, 0x03, 0xF8, 0x4E, 0x0C, 0x4E, 0x0D, 0x98, 0x10, +/* 00011570 */ 0x07, 0x08, 0x00, 0x00, 0x45, 0x0C, 0x10, 0x2A, 0x10, 0x0C, 0x15, 0x03, 0x00, 0x10, 0x02, 0x09, +/* 00011580 */ 0xD6, 0x00, 0x8F, 0x02, 0x24, 0x11, 0x00, 0x00, 0x6D, 0x10, 0x11, 0x00, 0x07, 0x02, 0x00, 0x59, +/* 00011590 */ 0x00, 0x11, 0x5A, 0x01, 0x0C, 0x00, 0x00, 0xF4, 0x02, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 000115A0 */ 0x00, 0x45, 0x0D, 0x10, 0x8F, 0x02, 0x21, 0x10, 0x01, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x03, +/* 000115B0 */ 0x5A, 0x01, 0x0D, 0x01, 0x00, 0xF0, 0x02, 0x10, 0x10, 0x01, 0x00, 0x0F, 0x0D, 0x00, 0x10, 0x12, +/* 000115C0 */ 0x08, 0x00, 0x0D, 0x09, 0x11, 0x03, 0x00, 0x0D, 0x0A, 0x09, 0x67, 0x00, 0x8F, 0x02, 0x03, 0x11, +/* 000115D0 */ 0x02, 0x00, 0x6D, 0x10, 0x11, 0x01, 0x07, 0x04, 0x00, 0x59, 0x00, 0x11, 0x8F, 0x02, 0x0C, 0x12, +/* 000115E0 */ 0x03, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x03, 0x5A, 0x01, 0x0C, 0x03, 0x00, 0xF0, 0x02, 0x12, +/* 000115F0 */ 0x12, 0x03, 0x00, 0x5A, 0x01, 0x12, 0x02, 0x00, 0x8F, 0x02, 0x0C, 0x12, 0x03, 0x00, 0x07, 0x02, +/* 00011600 */ 0x00, 0x59, 0x00, 0x03, 0x5A, 0x01, 0x08, 0x04, 0x00, 0xF0, 0x02, 0x12, 0x12, 0x04, 0x00, 0x5A, +/* 00011610 */ 0x02, 0x12, 0x02, 0x00, 0x2D, 0x12, 0x04, 0x09, 0x2D, 0x12, 0x12, 0x05, 0x2D, 0x12, 0x12, 0x0A, +/* 00011620 */ 0x2D, 0x12, 0x12, 0x06, 0x5A, 0x03, 0x12, 0x02, 0x00, 0xF4, 0x04, 0xFF, 0x10, 0x01, 0x00, 0x00, +/* 00011630 */ 0x00, 0x02, 0x00, 0x8F, 0x02, 0x10, 0x11, 0x04, 0x00, 0x6D, 0x10, 0x11, 0x02, 0x07, 0x02, 0x00, +/* 00011640 */ 0x59, 0x00, 0x11, 0x5A, 0x01, 0x0D, 0x05, 0x00, 0xF4, 0x02, 0x00, 0x10, 0x02, 0x00, 0x00, 0x00, +/* 00011650 */ 0x05, 0x00, 0x09, 0x0B, 0x00, 0x09, 0x06, 0x00, 0x45, 0x00, 0x0B, 0x09, 0x02, 0x00, 0xA8, 0x00, +/* 00011660 */ 0x24, 0x00, 0xFE, 0x23, 0x03, 0xFE, 0xAC, 0x02, 0x26, 0xFF, 0x5E, 0x90, 0x01, 0x00, 0x08, 0x04, +/* 00011670 */ 0x00, 0x00, 0x00, 0x09, 0x00, 0x2D, 0x00, 0x0B, 0x00, 0x33, 0x00, 0x22, 0x00, 0x41, 0x00, 0x28, +/* 00011680 */ 0x00, 0x65, 0x00, 0x67, 0x00, 0x8D, 0x00, 0x25, 0x00, 0x40, 0x00, 0x08, 0x00, 0x1F, 0x00, 0x00, +/* 00011690 */ 0x7F, 0x5C, 0x0A, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x1B, 0x09, 0x04, 0xA3, 0x41, 0xC1, 0x00, +/* 000116A0 */ 0xFE, 0x50, 0x03, 0x8D, 0xFF, 0xEF, 0x8C, 0x01, 0x00, 0xFF, 0xEF, 0x8C, 0x01, 0x00, 0x01, 0xFE, +/* 000116B0 */ 0x00, 0x90, 0x06, 0x06, 0xFF, 0xEF, 0x8C, 0x01, 0x00, 0xFE, 0x17, 0x03, 0xFE, 0x17, 0x03, 0x0B, +/* 000116C0 */ 0x0A, 0x11, 0x0A, 0x51, 0x4B, 0x02, 0x01, 0x08, 0x06, 0x04, 0x04, 0x04, 0x04, 0x10, 0x06, 0xFE, +/* 000116D0 */ 0xA2, 0x03, 0x06, 0xFE, 0xA3, 0x03, 0x06, 0xFE, 0xA4, 0x03, 0x08, 0x01, 0xFF, 0x05, 0xFE, 0xA5, +/* 000116E0 */ 0x03, 0x05, 0xFE, 0xA7, 0x03, 0x05, 0xFE, 0xA6, 0x03, 0xFE, 0x62, 0x01, 0x4E, 0x0F, 0x98, 0x11, +/* 000116F0 */ 0x0A, 0x0B, 0x00, 0x00, 0x45, 0x0F, 0x11, 0xA8, 0x11, 0x15, 0x03, 0x00, 0x0F, 0x11, 0x09, 0x43, +/* 00011700 */ 0x01, 0x0C, 0x03, 0x00, 0x0C, 0x02, 0x09, 0x22, 0x00, 0x8F, 0x02, 0x24, 0x12, 0x00, 0x00, 0x6D, +/* 00011710 */ 0x11, 0x12, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x12, 0x5A, 0x01, 0x0F, 0x00, 0x00, 0xF4, 0x02, +/* 00011720 */ 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x0F, 0x11, 0x0C, 0x03, 0x00, 0x0C, 0x03, +/* 00011730 */ 0x09, 0x22, 0x00, 0x8F, 0x02, 0x24, 0x12, 0x00, 0x00, 0x6D, 0x11, 0x12, 0x01, 0x07, 0x02, 0x00, +/* 00011740 */ 0x59, 0x00, 0x12, 0x5A, 0x01, 0x0F, 0x01, 0x00, 0xF4, 0x02, 0x11, 0x11, 0x01, 0x00, 0x00, 0x00, +/* 00011750 */ 0x01, 0x00, 0x45, 0x0F, 0x11, 0x0C, 0x03, 0x00, 0x0C, 0x04, 0x09, 0x22, 0x00, 0x8F, 0x02, 0x24, +/* 00011760 */ 0x12, 0x00, 0x00, 0x6D, 0x11, 0x12, 0x02, 0x07, 0x02, 0x00, 0x59, 0x00, 0x12, 0x5A, 0x01, 0x0F, +/* 00011770 */ 0x02, 0x00, 0xF4, 0x02, 0x11, 0x11, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x45, 0x0F, 0x11, 0xA8, +/* 00011780 */ 0x11, 0x15, 0x03, 0x00, 0x0D, 0x11, 0x09, 0xB5, 0x00, 0x8F, 0x02, 0x06, 0x11, 0x01, 0x00, 0x07, +/* 00011790 */ 0x04, 0x00, 0x59, 0x00, 0x05, 0x8F, 0x02, 0x18, 0x12, 0x02, 0x00, 0x5A, 0x01, 0x12, 0x03, 0x00, +/* 000117A0 */ 0x5A, 0x02, 0x0D, 0x03, 0x00, 0x5A, 0x03, 0x0F, 0x03, 0x00, 0xF0, 0x04, 0x11, 0x11, 0x03, 0x00, +/* 000117B0 */ 0x0C, 0x03, 0x00, 0x11, 0x06, 0x09, 0x86, 0x00, 0x8F, 0x02, 0x03, 0x12, 0x03, 0x00, 0x6D, 0x11, +/* 000117C0 */ 0x12, 0x03, 0x07, 0x04, 0x00, 0x59, 0x00, 0x12, 0x8F, 0x02, 0x0C, 0x13, 0x04, 0x00, 0x07, 0x02, +/* 000117D0 */ 0x00, 0x59, 0x00, 0x05, 0x5A, 0x01, 0x0F, 0x05, 0x00, 0xF0, 0x02, 0x13, 0x13, 0x05, 0x00, 0x5A, +/* 000117E0 */ 0x01, 0x13, 0x04, 0x00, 0x8F, 0x02, 0x0C, 0x13, 0x04, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x05, +/* 000117F0 */ 0x5A, 0x01, 0x0B, 0x06, 0x00, 0xF0, 0x02, 0x13, 0x13, 0x06, 0x00, 0x5A, 0x02, 0x13, 0x04, 0x00, +/* 00011800 */ 0x8F, 0x02, 0x06, 0x13, 0x01, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x05, 0x8F, 0x02, 0x19, 0x14, +/* 00011810 */ 0x05, 0x00, 0x5A, 0x01, 0x14, 0x07, 0x00, 0x5A, 0x02, 0x0D, 0x07, 0x00, 0x5A, 0x03, 0x08, 0x07, +/* 00011820 */ 0x00, 0xF0, 0x04, 0x13, 0x13, 0x07, 0x00, 0x2D, 0x13, 0x07, 0x13, 0x2D, 0x13, 0x13, 0x09, 0x5A, +/* 00011830 */ 0x03, 0x13, 0x04, 0x00, 0xF4, 0x04, 0xFF, 0x11, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x45, 0x00, +/* 00011840 */ 0x0F, 0x09, 0x08, 0x00, 0x45, 0x00, 0x0E, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x24, +/* 00011850 */ 0x03, 0xFE, 0x22, 0x03, 0xFE, 0x23, 0x03, 0xFE, 0xAC, 0x02, 0xFF, 0x37, 0x8D, 0x01, 0x00, 0x0D, +/* 00011860 */ 0x02, 0x00, 0x00, 0x00, 0x09, 0x00, 0x28, 0x00, 0x0A, 0x00, 0x27, 0x00, 0x08, 0x00, 0x29, 0x00, +/* 00011870 */ 0x22, 0x00, 0x45, 0x00, 0x08, 0x00, 0x28, 0x00, 0x22, 0x00, 0x3D, 0x00, 0x08, 0x00, 0x28, 0x00, +/* 00011880 */ 0x22, 0x00, 0x3D, 0x00, 0x39, 0x00, 0x6B, 0x00, 0x86, 0x00, 0xA6, 0x00, 0x06, 0x00, 0x21, 0x00, +/* 00011890 */ 0x08, 0x00, 0x15, 0x00, 0x00, 0x7E, 0x5C, 0x08, 0xC1, 0x13, 0x10, 0x4B, 0x00, 0xFE, 0xF0, 0x08, +/* 000118A0 */ 0x14, 0xA0, 0x41, 0xD1, 0x00, 0x86, 0xFF, 0xDE, 0x87, 0x01, 0x00, 0xFF, 0xDE, 0x87, 0x01, 0x00, +/* 000118B0 */ 0x06, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFF, 0xDE, 0x87, 0x01, 0x00, 0xFE, 0xE0, 0x04, 0xFE, 0xE0, +/* 000118C0 */ 0x04, 0x04, 0x0A, 0x0B, 0x04, 0x17, 0x17, 0x02, 0x01, 0x01, 0x06, 0x06, 0x06, 0x06, 0x01, 0x0A, +/* 000118D0 */ 0x08, 0x06, 0xFE, 0x21, 0x03, 0x06, 0xFE, 0x22, 0x03, 0x06, 0xFE, 0x23, 0x03, 0x06, 0xFE, 0x24, +/* 000118E0 */ 0x03, 0x06, 0xFE, 0xA5, 0x04, 0x06, 0xFE, 0xA6, 0x04, 0x07, 0x60, 0x8F, 0x02, 0x04, 0x0B, 0x00, +/* 000118F0 */ 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00011900 */ 0x0C, 0x00, 0x00, 0x00, 0xD9, 0x00, 0x0D, 0x0C, 0x7B, 0x0D, 0x0C, 0x00, 0xD9, 0x01, 0x0D, 0x0C, +/* 00011910 */ 0x7B, 0x0D, 0x0C, 0x01, 0xD9, 0x02, 0x0D, 0x0C, 0x7B, 0x0D, 0x0C, 0x02, 0xD9, 0x03, 0x0D, 0x0C, +/* 00011920 */ 0x7B, 0x0D, 0x0C, 0x03, 0xD9, 0x04, 0x0D, 0x0C, 0x7B, 0x0D, 0x0C, 0x04, 0xD9, 0x05, 0x0D, 0x0C, +/* 00011930 */ 0x7B, 0x0D, 0x0C, 0x05, 0x5A, 0x01, 0x0C, 0x00, 0x00, 0x5A, 0x02, 0x09, 0x00, 0x00, 0xF0, 0x03, +/* 00011940 */ 0x00, 0x0B, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x01, 0x20, 0x00, 0x00, 0x00, +/* 00011950 */ 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x03, 0x00, 0x00, 0x22, 0x03, +/* 00011960 */ 0x00, 0x00, 0x23, 0x03, 0x00, 0x00, 0x24, 0x03, 0x00, 0x00, 0xA5, 0x04, 0x00, 0x00, 0xA6, 0x04, +/* 00011970 */ 0x00, 0x00, 0xFE, 0x21, 0x03, 0xFE, 0x22, 0x03, 0xFE, 0x23, 0x03, 0xFE, 0x24, 0x03, 0xFE, 0xA5, +/* 00011980 */ 0x04, 0xFE, 0xA6, 0x04, 0xFF, 0xF4, 0x87, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x5E, 0x00, +/* 00011990 */ 0xC9, 0x04, 0x00, 0xF7, 0x1C, 0x01, 0x00, 0x79, 0x1C, 0x01, 0x00, 0xFB, 0x1B, 0x01, 0x00, 0x7D, +/* 000119A0 */ 0x1B, 0x01, 0x00, 0x69, 0x1A, 0x01, 0x00, 0xAB, 0x19, 0x01, 0x00, 0x7F, 0x7C, 0x08, 0x03, 0x00, +/* 000119B0 */ 0x10, 0x17, 0x00, 0xFE, 0x0E, 0x09, 0x19, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xA6, 0x04, 0x8C, 0xFF, +/* 000119C0 */ 0x00, 0x00, 0x00, 0x02, 0xFF, 0x72, 0x8B, 0x01, 0x00, 0xFF, 0x72, 0x8B, 0x01, 0x00, 0x01, 0xFE, +/* 000119D0 */ 0x00, 0x90, 0x03, 0x03, 0xFF, 0x72, 0x8B, 0x01, 0x00, 0xFE, 0x35, 0x01, 0xFE, 0x35, 0x01, 0x05, +/* 000119E0 */ 0x04, 0x07, 0x05, 0x1A, 0x18, 0x17, 0x02, 0x02, 0x03, 0x01, 0x06, 0x00, 0x5A, 0x08, 0x0B, 0x5E, +/* 000119F0 */ 0xED, 0x00, 0xEE, 0x00, 0x0E, 0x50, 0x00, 0x04, 0x8F, 0x02, 0x06, 0x07, 0x00, 0x00, 0x07, 0x04, +/* 00011A00 */ 0x00, 0x59, 0x00, 0x02, 0x8F, 0x02, 0x14, 0x08, 0x01, 0x00, 0x5A, 0x01, 0x08, 0x00, 0x00, 0x5A, +/* 00011A10 */ 0x02, 0x04, 0x00, 0x00, 0x5A, 0x03, 0x05, 0x00, 0x00, 0xF0, 0x04, 0x07, 0x07, 0x00, 0x00, 0x0E, +/* 00011A20 */ 0x08, 0x00, 0x07, 0x45, 0x00, 0x03, 0xEF, 0x00, 0x09, 0x21, 0x00, 0x8F, 0x02, 0x11, 0x07, 0x02, +/* 00011A30 */ 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x04, 0x01, 0x00, 0xF0, 0x02, 0x07, 0x07, +/* 00011A40 */ 0x01, 0x00, 0x45, 0x04, 0x07, 0x09, 0xAA, 0xFF, 0xEF, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFF, 0xC7, +/* 00011A50 */ 0x8B, 0x01, 0x00, 0x05, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x19, 0x00, 0x2B, 0x00, 0x54, 0x00, +/* 00011A60 */ 0x08, 0x00, 0x37, 0x00, 0x21, 0x00, 0x3B, 0x00, 0x00, 0x7F, 0x5C, 0x28, 0xC1, 0x03, 0x10, 0x07, +/* 00011A70 */ 0x00, 0xFE, 0x05, 0x09, 0x16, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xA5, 0x04, 0x8B, 0xFF, 0x00, 0x00, +/* 00011A80 */ 0x00, 0x02, 0xFF, 0x5B, 0x8A, 0x01, 0x00, 0xFF, 0x5B, 0x8A, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, +/* 00011A90 */ 0x02, 0x02, 0xFF, 0x5B, 0x8A, 0x01, 0x00, 0xFB, 0xFB, 0x09, 0x06, 0x0A, 0x07, 0x28, 0x23, 0x02, +/* 00011AA0 */ 0x05, 0x01, 0x04, 0x02, 0x02, 0x02, 0x02, 0x09, 0x08, 0x01, 0x00, 0x01, 0x02, 0x01, 0x20, 0xAC, +/* 00011AB0 */ 0x8F, 0x02, 0x0B, 0x0A, 0x00, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x06, 0x00, +/* 00011AC0 */ 0x00, 0xF0, 0x02, 0x0A, 0x0A, 0x00, 0x00, 0x45, 0x07, 0x0A, 0x45, 0x08, 0x03, 0x8F, 0x02, 0x21, +/* 00011AD0 */ 0x0A, 0x01, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x07, 0x01, 0x00, 0xF0, 0x02, +/* 00011AE0 */ 0x0A, 0x0A, 0x01, 0x00, 0x0F, 0x6A, 0x00, 0x0A, 0x8F, 0x02, 0x20, 0x0A, 0x02, 0x00, 0x07, 0x02, +/* 00011AF0 */ 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x07, 0x02, 0x00, 0xF0, 0x02, 0x0A, 0x0A, 0x02, 0x00, 0x0E, +/* 00011B00 */ 0x4F, 0x00, 0x0A, 0x8F, 0x02, 0x10, 0x0B, 0x03, 0x00, 0x6D, 0x0A, 0x0B, 0x00, 0x07, 0x02, 0x00, +/* 00011B10 */ 0x59, 0x00, 0x0B, 0x45, 0x0C, 0x07, 0x8F, 0x02, 0x10, 0x0E, 0x03, 0x00, 0x6D, 0x0D, 0x0E, 0x01, +/* 00011B20 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x0E, 0x5A, 0x01, 0x04, 0x04, 0x00, 0x5A, 0x02, 0x05, 0x04, 0x00, +/* 00011B30 */ 0xF4, 0x03, 0x0D, 0x0D, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x32, 0x0C, 0x0C, 0x0D, 0x00, 0x00, +/* 00011B40 */ 0x5A, 0x01, 0x0C, 0x03, 0x00, 0xF4, 0x02, 0x0A, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x45, +/* 00011B50 */ 0x08, 0x0A, 0x45, 0x00, 0x08, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x1D, 0x2C, 0xFF, 0x7A, +/* 00011B60 */ 0x8A, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x29, 0x00, 0x03, 0x00, 0x19, 0x00, +/* 00011B70 */ 0x36, 0x00, 0x38, 0x00, 0x4F, 0x00, 0x49, 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, 0x7F, 0x5C, 0x08, +/* 00011B80 */ 0x01, 0x00, 0x10, 0x07, 0x00, 0xFE, 0x01, 0x09, 0x1E, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x24, 0x03, +/* 00011B90 */ 0x8A, 0xFF, 0x00, 0x00, 0x00, 0x02, 0xFF, 0xE5, 0x89, 0x01, 0x00, 0xFF, 0xE5, 0x89, 0x01, 0x00, +/* 00011BA0 */ 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0xE5, 0x89, 0x01, 0x00, 0x5D, 0x5D, 0x03, 0x03, 0x05, +/* 00011BB0 */ 0x03, 0x10, 0x0F, 0x02, 0x01, 0x01, 0x04, 0x08, 0x33, 0xA8, 0x05, 0x15, 0x03, 0x00, 0x03, 0x05, +/* 00011BC0 */ 0x09, 0x1D, 0x00, 0x8F, 0x02, 0x08, 0x05, 0x00, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x5A, +/* 00011BD0 */ 0x01, 0x03, 0x00, 0x00, 0xF0, 0x02, 0x05, 0x05, 0x00, 0x00, 0x45, 0x00, 0x05, 0x09, 0x05, 0x00, +/* 00011BE0 */ 0xA8, 0x05, 0x46, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFF, 0x04, 0x8A, 0x01, +/* 00011BF0 */ 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x31, 0x00, 0x3D, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0x01, 0x00, +/* 00011C00 */ 0x10, 0x07, 0x00, 0xFE, 0xFD, 0x08, 0x16, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x23, 0x03, 0x89, 0xFF, +/* 00011C10 */ 0x00, 0x00, 0x00, 0x02, 0xFF, 0x6E, 0x89, 0x01, 0x00, 0xFF, 0x6E, 0x89, 0x01, 0x00, 0x01, 0xFE, +/* 00011C20 */ 0x00, 0x90, 0x02, 0x02, 0xFF, 0x6E, 0x89, 0x01, 0x00, 0x56, 0x56, 0x03, 0x03, 0x05, 0x03, 0x10, +/* 00011C30 */ 0x0F, 0x02, 0x01, 0x01, 0x04, 0x08, 0x33, 0xA8, 0x05, 0x14, 0x03, 0x00, 0x03, 0x05, 0x09, 0x08, +/* 00011C40 */ 0x00, 0xA9, 0x05, 0x45, 0x00, 0x05, 0x09, 0x1A, 0x00, 0x8F, 0x02, 0x0B, 0x05, 0x00, 0x00, 0x07, +/* 00011C50 */ 0x02, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x03, 0x00, 0x00, 0xF0, 0x02, 0x05, 0x05, 0x00, 0x00, +/* 00011C60 */ 0x46, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFF, 0x8D, 0x89, 0x01, 0x00, 0x02, +/* 00011C70 */ 0x00, 0x00, 0x00, 0x00, 0x31, 0x00, 0x36, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0x01, 0x00, 0x10, 0x07, +/* 00011C80 */ 0x00, 0xFE, 0xF9, 0x08, 0x16, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x22, 0x03, 0x88, 0xFF, 0x00, 0x00, +/* 00011C90 */ 0x00, 0x02, 0xFF, 0xF9, 0x88, 0x01, 0x00, 0xFF, 0xF9, 0x88, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, +/* 00011CA0 */ 0x02, 0x02, 0xFF, 0xF9, 0x88, 0x01, 0x00, 0x5C, 0x5C, 0x03, 0x03, 0x05, 0x03, 0x10, 0x0F, 0x02, +/* 00011CB0 */ 0x01, 0x01, 0x04, 0x08, 0x33, 0xA8, 0x05, 0x15, 0x03, 0x00, 0x03, 0x05, 0x09, 0x1D, 0x00, 0x8F, +/* 00011CC0 */ 0x02, 0x0C, 0x05, 0x00, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x03, 0x00, 0x00, +/* 00011CD0 */ 0xF0, 0x02, 0x05, 0x05, 0x00, 0x00, 0x45, 0x00, 0x05, 0x09, 0x05, 0x00, 0xA8, 0x05, 0x46, 0x00, +/* 00011CE0 */ 0x05, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFF, 0x18, 0x89, 0x01, 0x00, 0x02, 0x00, 0x00, +/* 00011CF0 */ 0x00, 0x00, 0x31, 0x00, 0x3C, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x07, 0x00, 0xFE, +/* 00011D00 */ 0xF2, 0x08, 0x16, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x21, 0x03, 0x87, 0xFF, 0x00, 0x00, 0x00, 0x02, +/* 00011D10 */ 0xFF, 0x20, 0x88, 0x01, 0x00, 0xFF, 0x20, 0x88, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, +/* 00011D20 */ 0xFF, 0x20, 0x88, 0x01, 0x00, 0xC0, 0xC0, 0x04, 0x04, 0x06, 0x03, 0x17, 0x16, 0x02, 0x02, 0x02, +/* 00011D30 */ 0x01, 0x01, 0x01, 0x01, 0x05, 0x07, 0x08, 0x55, 0x14, 0x03, 0x00, 0x04, 0x02, 0x09, 0x1A, 0x00, +/* 00011D40 */ 0x8F, 0x02, 0x03, 0x07, 0x00, 0x00, 0x6D, 0x06, 0x07, 0x00, 0x07, 0x01, 0x00, 0x59, 0x00, 0x07, +/* 00011D50 */ 0xF4, 0x01, 0xFF, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0x06, 0x15, 0x03, 0x00, 0x04, +/* 00011D60 */ 0x06, 0x09, 0x1D, 0x00, 0x8F, 0x02, 0x09, 0x06, 0x01, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x03, +/* 00011D70 */ 0x5A, 0x01, 0x04, 0x01, 0x00, 0xF0, 0x02, 0x06, 0x06, 0x01, 0x00, 0x45, 0x00, 0x06, 0x09, 0x05, +/* 00011D80 */ 0x00, 0xA8, 0x06, 0x46, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xAA, 0x02, +/* 00011D90 */ 0xFF, 0x3F, 0x88, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x26, 0x00, 0x1A, 0x00, +/* 00011DA0 */ 0x3E, 0x00, 0x31, 0x00, 0x3C, 0x00, 0x00, 0x7F, 0x5C, 0x0A, 0xC1, 0x63, 0x50, 0x03, 0x00, 0xFE, +/* 00011DB0 */ 0xD5, 0x08, 0x20, 0xA0, 0x41, 0xC1, 0x00, 0xFE, 0xF6, 0x02, 0x85, 0xFF, 0x57, 0x84, 0x01, 0x00, +/* 00011DC0 */ 0xFF, 0x57, 0x84, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFF, 0x57, 0x84, 0x01, 0x00, +/* 00011DD0 */ 0xFE, 0x70, 0x03, 0xFE, 0x70, 0x03, 0x07, 0x05, 0x08, 0x06, 0x3E, 0x3C, 0x02, 0x02, 0x05, 0x06, +/* 00011DE0 */ 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x07, 0x08, 0x08, 0x01, 0x00, 0x01, 0x01, 0xFE, 0xFF, 0x00, +/* 00011DF0 */ 0x4E, 0x05, 0x4E, 0x06, 0x8F, 0x01, 0x0D, 0x09, 0x00, 0x00, 0x4A, 0x09, 0x0E, 0x0B, 0x00, 0x09, +/* 00011E00 */ 0x8F, 0x01, 0x0D, 0x00, 0x00, 0x00, 0x4A, 0x00, 0x09, 0xE2, 0x00, 0x8F, 0x02, 0x33, 0x09, 0x01, +/* 00011E10 */ 0x00, 0x4A, 0x09, 0x0E, 0x82, 0x00, 0x09, 0x8F, 0x01, 0x0F, 0x09, 0x02, 0x00, 0x4A, 0x09, 0x0F, +/* 00011E20 */ 0x14, 0x00, 0x09, 0x8F, 0x01, 0x05, 0x09, 0x03, 0x00, 0x4A, 0x09, 0x07, 0x01, 0x00, 0x59, 0x00, +/* 00011E30 */ 0x02, 0xF0, 0x01, 0xFF, 0x09, 0x00, 0x00, 0x8F, 0x01, 0x0A, 0x09, 0x04, 0x00, 0x4A, 0x09, 0x07, +/* 00011E40 */ 0x01, 0x00, 0x59, 0x00, 0x02, 0xF0, 0x01, 0x09, 0x09, 0x01, 0x00, 0x45, 0x05, 0x09, 0x8F, 0x02, +/* 00011E50 */ 0x03, 0x0A, 0x05, 0x00, 0x6D, 0x09, 0x0A, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0A, 0x5A, 0x01, +/* 00011E60 */ 0x05, 0x02, 0x00, 0x8F, 0x01, 0x0F, 0x0B, 0x02, 0x00, 0x4A, 0x0B, 0x5A, 0x02, 0x0B, 0x02, 0x00, +/* 00011E70 */ 0xF4, 0x03, 0x09, 0x09, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x45, 0x06, 0x09, 0x0E, 0x0F, 0x00, +/* 00011E80 */ 0x06, 0x98, 0x09, 0x06, 0x03, 0x00, 0x00, 0x01, 0x43, 0x01, 0x01, 0x0D, 0x09, 0x09, 0x06, 0x00, +/* 00011E90 */ 0x01, 0x43, 0x01, 0x01, 0x0D, 0x05, 0x09, 0x47, 0x00, 0x8F, 0x02, 0x03, 0x0A, 0x05, 0x00, 0x6D, +/* 00011EA0 */ 0x09, 0x0A, 0x01, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0A, 0x8F, 0x01, 0x0A, 0x0B, 0x04, 0x00, 0x4A, +/* 00011EB0 */ 0x0B, 0x07, 0x01, 0x00, 0x59, 0x00, 0x02, 0xF0, 0x01, 0x0B, 0x0B, 0x04, 0x00, 0x5A, 0x01, 0x0B, +/* 00011EC0 */ 0x03, 0x00, 0xE2, 0x0B, 0x00, 0x5A, 0x02, 0x0B, 0x03, 0x00, 0xF4, 0x03, 0x09, 0x09, 0x01, 0x00, +/* 00011ED0 */ 0x00, 0x00, 0x03, 0x00, 0x98, 0x09, 0x09, 0x04, 0x01, 0x00, 0x01, 0x43, 0x01, 0x01, 0x0D, 0x09, +/* 00011EE0 */ 0x8F, 0x01, 0x0D, 0x00, 0x00, 0x00, 0x4A, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, +/* 00011EF0 */ 0xC0, 0x02, 0xFE, 0xC0, 0x02, 0x09, 0xFE, 0xA4, 0x04, 0x00, 0xFF, 0x6D, 0x84, 0x01, 0x00, 0x0D, +/* 00011F00 */ 0x04, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x2B, 0x00, 0x0B, 0x00, 0x33, 0x00, 0x0C, 0x00, 0x26, 0x00, +/* 00011F10 */ 0x0C, 0x00, 0x29, 0x00, 0x14, 0x00, 0x33, 0x00, 0x17, 0x00, 0x2C, 0x00, 0x2F, 0x00, 0x4D, 0x00, +/* 00011F20 */ 0x04, 0x00, 0x5B, 0x00, 0x0F, 0x00, 0x49, 0x00, 0x09, 0x00, 0xCB, 0x00, 0x47, 0x00, 0x6D, 0x00, +/* 00011F30 */ 0x0D, 0x00, 0x24, 0x00, 0x00, 0x7F, 0x7C, 0x0A, 0xC3, 0x03, 0x10, 0x13, 0x00, 0xFE, 0xC3, 0x08, +/* 00011F40 */ 0x19, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xF5, 0x02, 0x84, 0xFF, 0x34, 0x81, 0x01, 0x00, 0xFF, 0x34, +/* 00011F50 */ 0x81, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x05, 0x05, 0xFF, 0x34, 0x81, 0x01, 0x00, 0xFE, 0x91, +/* 00011F60 */ 0x02, 0xFE, 0x91, 0x02, 0x0C, 0x06, 0x10, 0x06, 0x41, 0x38, 0x18, 0x02, 0x01, 0x04, 0x04, 0x01, +/* 00011F70 */ 0x01, 0x01, 0x01, 0x01, 0x0F, 0x66, 0xBF, 0x05, 0xFE, 0x9C, 0x03, 0x08, 0x01, 0x00, 0x01, 0x01, +/* 00011F80 */ 0xEE, 0xA8, 0x0D, 0xA8, 0x0E, 0x14, 0x03, 0x00, 0x07, 0x02, 0x09, 0x0C, 0x00, 0x8F, 0x02, 0x27, +/* 00011F90 */ 0x11, 0x00, 0x00, 0x45, 0x10, 0x11, 0x09, 0x09, 0x00, 0x8F, 0x02, 0x26, 0x11, 0x01, 0x00, 0x46, +/* 00011FA0 */ 0x10, 0x11, 0x45, 0x0A, 0x10, 0x8F, 0x02, 0x05, 0x10, 0x02, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 00011FB0 */ 0x03, 0x5A, 0x01, 0x06, 0x00, 0x00, 0xF0, 0x02, 0x10, 0x10, 0x00, 0x00, 0x45, 0x0B, 0x10, 0x07, +/* 00011FC0 */ 0x01, 0x00, 0x59, 0x00, 0x03, 0xF0, 0x01, 0x10, 0x09, 0x01, 0x00, 0x45, 0x0C, 0x10, 0xA8, 0x10, +/* 00011FD0 */ 0x15, 0x03, 0x00, 0x0B, 0x10, 0x09, 0x06, 0x00, 0x45, 0x10, 0x0B, 0x09, 0x03, 0x00, 0x46, 0x10, +/* 00011FE0 */ 0x04, 0x45, 0x0B, 0x10, 0x45, 0x0D, 0x04, 0xED, 0x00, 0xEE, 0x00, 0x12, 0x03, 0x00, 0x0D, 0x0B, +/* 00011FF0 */ 0x09, 0x4B, 0x00, 0x8F, 0x02, 0x29, 0x10, 0x03, 0x00, 0x07, 0x05, 0x00, 0x59, 0x00, 0x03, 0x98, +/* 00012000 */ 0x11, 0x06, 0x0D, 0x00, 0x00, 0x5A, 0x01, 0x11, 0x02, 0x00, 0x5A, 0x02, 0x0A, 0x02, 0x00, 0x5A, +/* 00012010 */ 0x03, 0x08, 0x02, 0x00, 0x5A, 0x04, 0x0C, 0x02, 0x00, 0xF0, 0x05, 0x10, 0x10, 0x02, 0x00, 0x45, +/* 00012020 */ 0x0E, 0x10, 0x5F, 0x10, 0x0E, 0x00, 0xA8, 0x11, 0x15, 0x03, 0x00, 0x10, 0x11, 0x09, 0x08, 0x00, +/* 00012030 */ 0x45, 0x00, 0x0E, 0xEF, 0x00, 0x09, 0x35, 0x00, 0x26, 0x0D, 0x0D, 0x09, 0xAB, 0xFF, 0xEF, 0x00, +/* 00012040 */ 0x8F, 0x02, 0x29, 0x10, 0x03, 0x00, 0x07, 0x05, 0x00, 0x59, 0x00, 0x03, 0x5A, 0x01, 0x0C, 0x03, +/* 00012050 */ 0x00, 0x5A, 0x02, 0x0A, 0x03, 0x00, 0xA8, 0x11, 0x5A, 0x03, 0x11, 0x03, 0x00, 0x5A, 0x04, 0x0C, +/* 00012060 */ 0x03, 0x00, 0xF0, 0x05, 0x00, 0x10, 0x03, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, +/* 00012070 */ 0x0D, 0x02, 0xFF, 0x83, 0x81, 0x01, 0x00, 0x0C, 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x58, 0x00, +/* 00012080 */ 0x1A, 0x00, 0x34, 0x00, 0x0F, 0x00, 0x32, 0x00, 0x16, 0x00, 0x39, 0x00, 0x07, 0x00, 0x0B, 0x00, +/* 00012090 */ 0x08, 0x00, 0x1F, 0x00, 0x2F, 0x00, 0x69, 0x00, 0x0E, 0x00, 0x35, 0x00, 0x08, 0x00, 0x4F, 0xFF, +/* 000120A0 */ 0x08, 0x00, 0xE2, 0x00, 0x2D, 0x00, 0x51, 0x00, 0x00, 0x7E, 0x5D, 0x1A, 0xC1, 0x73, 0x5A, 0x4B, +/* 000120B0 */ 0x04, 0xFE, 0x8A, 0x08, 0x1E, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xF4, 0x02, 0x81, 0xFF, 0x40, 0x77, +/* 000120C0 */ 0x01, 0x00, 0xFF, 0x40, 0x77, 0x01, 0x00, 0x02, 0xFE, 0x00, 0x90, 0x05, 0x05, 0xFF, 0x40, 0x77, +/* 000120D0 */ 0x01, 0x00, 0xFE, 0xD9, 0x09, 0xFE, 0xD9, 0x09, 0x03, 0xFE, 0x9D, 0x04, 0xFE, 0x0D, 0x02, 0xFE, +/* 000120E0 */ 0x9E, 0x04, 0x0E, 0x0B, 0x15, 0x05, 0x72, 0x6A, 0x02, 0x01, 0x09, 0x01, 0x0B, 0x05, 0x05, 0x05, +/* 000120F0 */ 0x05, 0x01, 0x01, 0x01, 0x12, 0x13, 0x14, 0x15, 0x07, 0x08, 0x01, 0x01, 0x01, 0x00, 0x06, 0xFE, +/* 00012100 */ 0x95, 0x03, 0x05, 0xFE, 0x9F, 0x04, 0x06, 0xFE, 0xD7, 0x03, 0x06, 0xFE, 0xA0, 0x04, 0x06, 0xFE, +/* 00012110 */ 0xA1, 0x04, 0xFE, 0xEA, 0x01, 0x96, 0x03, 0x0B, 0x96, 0x04, 0x0D, 0x4E, 0x11, 0x8F, 0x02, 0x03, +/* 00012120 */ 0x17, 0x00, 0x00, 0x6D, 0x16, 0x17, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x17, 0x93, 0x03, 0x18, +/* 00012130 */ 0x01, 0x00, 0x5A, 0x01, 0x18, 0x00, 0x00, 0xF4, 0x02, 0x16, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00012140 */ 0x00, 0x45, 0x0F, 0x16, 0x14, 0x03, 0x00, 0x0F, 0x02, 0x09, 0x1F, 0x00, 0x8F, 0x02, 0x28, 0x16, +/* 00012150 */ 0x02, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x03, 0x93, 0x03, 0x17, 0x01, 0x00, 0x5A, 0x01, 0x17, +/* 00012160 */ 0x01, 0x00, 0xF0, 0x02, 0x16, 0x16, 0x01, 0x00, 0x45, 0x0F, 0x16, 0x0E, 0x2A, 0x00, 0x0F, 0x8F, +/* 00012170 */ 0x02, 0x06, 0x16, 0x03, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, 0x8F, 0x02, 0x17, 0x17, 0x04, +/* 00012180 */ 0x00, 0x5A, 0x01, 0x17, 0x02, 0x00, 0x5A, 0x02, 0x0F, 0x02, 0x00, 0xD6, 0x00, 0x17, 0x5A, 0x03, +/* 00012190 */ 0x17, 0x02, 0x00, 0xF0, 0x04, 0xFF, 0x16, 0x02, 0x00, 0x8F, 0x02, 0x03, 0x17, 0x00, 0x00, 0x6D, +/* 000121A0 */ 0x16, 0x17, 0x01, 0x07, 0x03, 0x00, 0x59, 0x00, 0x17, 0x93, 0x03, 0x18, 0x01, 0x00, 0x5A, 0x01, +/* 000121B0 */ 0x18, 0x03, 0x00, 0xE2, 0x18, 0x00, 0x5A, 0x02, 0x18, 0x03, 0x00, 0xF4, 0x03, 0x16, 0x16, 0x01, +/* 000121C0 */ 0x00, 0x00, 0x00, 0x03, 0x00, 0x98, 0x16, 0x16, 0x04, 0x00, 0x00, 0x96, 0x03, 0x16, 0x07, 0x03, +/* 000121D0 */ 0x00, 0x59, 0x00, 0x03, 0x93, 0x03, 0x16, 0x01, 0x00, 0x5A, 0x01, 0x16, 0x04, 0x00, 0x5A, 0x02, +/* 000121E0 */ 0x0E, 0x04, 0x00, 0xF0, 0x03, 0x16, 0x0C, 0x04, 0x00, 0x45, 0x10, 0x16, 0x93, 0x04, 0x16, 0x05, +/* 000121F0 */ 0x00, 0xA8, 0x17, 0x15, 0x03, 0x00, 0x16, 0x17, 0x09, 0x4E, 0x00, 0xE0, 0x00, 0x03, 0x04, 0x4E, +/* 00012200 */ 0x16, 0x95, 0x00, 0x02, 0x16, 0xD0, 0x16, 0x00, 0x00, 0x00, 0x96, 0x02, 0x16, 0x95, 0x00, 0x02, +/* 00012210 */ 0x05, 0x8F, 0x02, 0x06, 0x16, 0x03, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, 0x8F, 0x02, 0x17, +/* 00012220 */ 0x17, 0x04, 0x00, 0x5A, 0x01, 0x17, 0x05, 0x00, 0x5A, 0x02, 0x0F, 0x05, 0x00, 0xB9, 0x18, 0x00, +/* 00012230 */ 0x01, 0x66, 0x01, 0x01, 0x17, 0x18, 0x5A, 0x03, 0x17, 0x05, 0x00, 0xF0, 0x04, 0xFF, 0x16, 0x05, +/* 00012240 */ 0x00, 0x93, 0x02, 0x16, 0x06, 0x00, 0x45, 0x0F, 0x16, 0x45, 0x11, 0x10, 0x0E, 0x6E, 0x00, 0x10, +/* 00012250 */ 0x0E, 0x36, 0x00, 0x0F, 0x8F, 0x02, 0x05, 0x16, 0x07, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x03, +/* 00012260 */ 0x5A, 0x01, 0x0F, 0x06, 0x00, 0xF0, 0x02, 0x16, 0x16, 0x06, 0x00, 0x11, 0x03, 0x00, 0x16, 0x05, +/* 00012270 */ 0x09, 0x17, 0x00, 0x8F, 0x02, 0x33, 0x16, 0x08, 0x00, 0x4A, 0x16, 0x0E, 0x07, 0x00, 0x16, 0x2D, +/* 00012280 */ 0x10, 0x10, 0x06, 0x09, 0x04, 0x00, 0x2D, 0x10, 0x10, 0x07, 0x45, 0x16, 0x10, 0x8F, 0x02, 0x06, +/* 00012290 */ 0x17, 0x03, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, 0x8F, 0x02, 0x19, 0x18, 0x09, 0x00, 0x5A, +/* 000122A0 */ 0x01, 0x18, 0x07, 0x00, 0x5A, 0x02, 0x0F, 0x07, 0x00, 0x5A, 0x03, 0x06, 0x07, 0x00, 0xF0, 0x04, +/* 000122B0 */ 0x17, 0x17, 0x07, 0x00, 0x2D, 0x16, 0x16, 0x17, 0x45, 0x10, 0x16, 0x09, 0x05, 0x00, 0xA8, 0x16, +/* 000122C0 */ 0x45, 0x10, 0x16, 0x8F, 0x02, 0x04, 0x16, 0x0A, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x03, 0xCE, +/* 000122D0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x7B, 0x10, 0x17, 0x02, +/* 000122E0 */ 0x7B, 0x0F, 0x17, 0x03, 0x7B, 0x11, 0x17, 0x04, 0x5A, 0x01, 0x17, 0x08, 0x00, 0x5A, 0x02, 0x02, +/* 000122F0 */ 0x08, 0x00, 0xF0, 0x03, 0x00, 0x16, 0x08, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x01, +/* 00012300 */ 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x02, +/* 00012310 */ 0x00, 0x00, 0x11, 0x02, 0x00, 0x00, 0x0F, 0x02, 0x00, 0x00, 0xFE, 0xF6, 0x01, 0xFE, 0xC0, 0x02, +/* 00012320 */ 0xFE, 0x0D, 0x02, 0xFE, 0x11, 0x02, 0xFE, 0x0F, 0x02, 0x01, 0x04, 0x01, 0x00, 0xFE, 0xCF, 0x03, +/* 00012330 */ 0x0D, 0xFE, 0xA2, 0x04, 0x00, 0xFF, 0x84, 0x77, 0x01, 0x00, 0x16, 0x08, 0x00, 0x00, 0x00, 0x27, +/* 00012340 */ 0x00, 0x36, 0x00, 0x08, 0x00, 0x81, 0x00, 0x1F, 0x00, 0x3A, 0x00, 0x04, 0x00, 0x1B, 0x00, 0x2A, +/* 00012350 */ 0x00, 0x53, 0x02, 0x35, 0x00, 0x49, 0x00, 0x1E, 0x00, 0x37, 0x00, 0x19, 0x00, 0x50, 0x00, 0x08, +/* 00012360 */ 0x00, 0x1F, 0x00, 0x04, 0x00, 0x17, 0x00, 0x30, 0x00, 0xE9, 0x01, 0x08, 0x00, 0xF9, 0x00, 0x03, +/* 00012370 */ 0x00, 0x29, 0x00, 0x04, 0x00, 0x1C, 0x00, 0x23, 0x00, 0x3E, 0x00, 0x0C, 0x00, 0x2E, 0x00, 0x07, +/* 00012380 */ 0x00, 0x3E, 0x00, 0x04, 0x00, 0x40, 0x00, 0x34, 0x00, 0x5C, 0x00, 0x05, 0x00, 0x29, 0x00, 0x3A, +/* 00012390 */ 0x00, 0x99, 0x00, 0x00, 0x11, 0x25, 0x01, 0x00, 0x9C, 0x23, 0x01, 0x00, 0x7F, 0x5C, 0x0A, 0xC1, +/* 000123A0 */ 0x33, 0x10, 0x43, 0x00, 0xFE, 0xA0, 0x08, 0x3D, 0xA2, 0x41, 0xD1, 0x00, 0x83, 0xFF, 0x1A, 0x7C, +/* 000123B0 */ 0x01, 0x00, 0xFF, 0x1A, 0x7C, 0x01, 0x00, 0x41, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0x1A, 0x7C, +/* 000123C0 */ 0x01, 0x00, 0xFE, 0xA8, 0x01, 0xFE, 0xA8, 0x01, 0x08, 0x0B, 0x0F, 0x05, 0x2D, 0x2B, 0x04, 0x01, +/* 000123D0 */ 0x03, 0x07, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x0E, 0x01, 0x01, 0x08, 0x01, 0xFF, 0x06, 0xFE, +/* 000123E0 */ 0x2A, 0x03, 0x06, 0xFE, 0x2C, 0x03, 0x0B, 0x06, 0xFE, 0x2D, 0x03, 0x06, 0xFE, 0x2B, 0x03, 0x07, +/* 000123F0 */ 0xCF, 0x8F, 0x04, 0x03, 0x10, 0x00, 0x00, 0x6D, 0x0F, 0x10, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 00012400 */ 0x10, 0x5A, 0x01, 0x0B, 0x00, 0x00, 0xE2, 0x11, 0x00, 0x5A, 0x02, 0x11, 0x00, 0x00, 0xF4, 0x03, +/* 00012410 */ 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x0C, 0x0F, 0x98, 0x0F, 0x0C, 0x02, 0x00, +/* 00012420 */ 0x00, 0x45, 0x0D, 0x0F, 0x8F, 0x04, 0x06, 0x0F, 0x01, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, +/* 00012430 */ 0x8F, 0x04, 0x18, 0x10, 0x02, 0x00, 0x5A, 0x01, 0x10, 0x01, 0x00, 0x8F, 0x02, 0x04, 0x10, 0x03, +/* 00012440 */ 0x00, 0x5A, 0x02, 0x10, 0x01, 0x00, 0x5A, 0x03, 0x0D, 0x01, 0x00, 0xF0, 0x04, 0x0F, 0x0F, 0x01, +/* 00012450 */ 0x00, 0x15, 0x03, 0x00, 0x0F, 0x04, 0x09, 0x63, 0x00, 0x8F, 0x04, 0x36, 0x10, 0x04, 0x00, 0x4A, +/* 00012460 */ 0x10, 0x6D, 0x0F, 0x10, 0x01, 0x07, 0x04, 0x00, 0x59, 0x00, 0x10, 0x8F, 0x02, 0x02, 0x11, 0x05, +/* 00012470 */ 0x00, 0x5A, 0x01, 0x11, 0x02, 0x00, 0x8F, 0x01, 0x02, 0x12, 0x06, 0x00, 0x4A, 0x12, 0x43, 0x11, +/* 00012480 */ 0x12, 0x2D, 0x12, 0x11, 0x02, 0x01, 0x43, 0x01, 0x01, 0x02, 0x12, 0x5A, 0x02, 0x11, 0x02, 0x00, +/* 00012490 */ 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x7B, 0x0B, 0x11, +/* 000124A0 */ 0x02, 0x7B, 0x07, 0x11, 0x03, 0x7B, 0x07, 0x11, 0x04, 0x7B, 0x07, 0x11, 0x05, 0x5A, 0x03, 0x11, +/* 000124B0 */ 0x02, 0x00, 0xF4, 0x04, 0xFF, 0x0F, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, +/* 000124C0 */ 0x01, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, +/* 000124D0 */ 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0xFE, +/* 000124E0 */ 0xC0, 0x02, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x96, +/* 000124F0 */ 0x01, 0x0E, 0xFE, 0xA3, 0x04, 0x00, 0xFF, 0x3E, 0x7C, 0x01, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, +/* 00012500 */ 0x2A, 0x00, 0x7A, 0x00, 0x09, 0x00, 0x24, 0x00, 0x35, 0x00, 0x5F, 0x00, 0x65, 0x00, 0x86, 0x00, +/* 00012510 */ 0x00, 0x7F, 0x5C, 0x08, 0x01, 0x00, 0x10, 0x03, 0x00, 0xFE, 0x92, 0x08, 0x3C, 0xA2, 0x41, 0xD1, +/* 00012520 */ 0x00, 0x82, 0xFF, 0xC0, 0x78, 0x01, 0x00, 0xFF, 0xC0, 0x78, 0x01, 0x00, 0x41, 0xFE, 0x00, 0x90, +/* 00012530 */ 0x02, 0x02, 0xFF, 0xC0, 0x78, 0x01, 0x00, 0x7D, 0x7D, 0x04, 0x05, 0x07, 0x06, 0x0F, 0x0F, 0x03, +/* 00012540 */ 0x01, 0x03, 0x06, 0x06, 0xFE, 0x95, 0x03, 0x06, 0xFE, 0x47, 0x03, 0x08, 0x3E, 0x8F, 0x03, 0x06, +/* 00012550 */ 0x07, 0x00, 0x00, 0x07, 0x05, 0x00, 0x59, 0x00, 0x04, 0x8F, 0x03, 0x1D, 0x08, 0x01, 0x00, 0x5A, +/* 00012560 */ 0x01, 0x08, 0x00, 0x00, 0x8F, 0x01, 0x03, 0x08, 0x02, 0x00, 0x5A, 0x02, 0x08, 0x00, 0x00, 0x2D, +/* 00012570 */ 0x08, 0x02, 0x05, 0x5A, 0x03, 0x08, 0x00, 0x00, 0x5A, 0x04, 0x03, 0x00, 0x00, 0xF0, 0x05, 0x07, +/* 00012580 */ 0x07, 0x00, 0x00, 0x94, 0x01, 0x03, 0x07, 0xA8, 0x00, 0x24, 0x00, 0xFF, 0xE4, 0x78, 0x01, 0x00, +/* 00012590 */ 0x02, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x58, 0x00, 0x00, 0x7E, 0x5C, 0x0A, 0xC1, 0x03, 0x10, +/* 000125A0 */ 0x0B, 0x00, 0xFE, 0x71, 0x08, 0x1E, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xF3, 0x02, 0x7F, 0xFF, 0x0F, +/* 000125B0 */ 0x73, 0x01, 0x00, 0xFF, 0x0F, 0x73, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0x0F, +/* 000125C0 */ 0x73, 0x01, 0x00, 0xFE, 0x11, 0x04, 0xFE, 0x11, 0x04, 0x07, 0x05, 0x09, 0x04, 0x29, 0x26, 0x02, +/* 000125D0 */ 0x01, 0x04, 0x03, 0x03, 0x03, 0x03, 0x03, 0x08, 0x08, 0x01, 0x00, 0x06, 0xFE, 0x95, 0x03, 0xA4, +/* 000125E0 */ 0x4E, 0x06, 0x4E, 0x07, 0x8F, 0x01, 0x10, 0x09, 0x00, 0x00, 0x4A, 0x09, 0x0F, 0x14, 0x00, 0x09, +/* 000125F0 */ 0x8F, 0x01, 0x05, 0x09, 0x01, 0x00, 0x4A, 0x09, 0x07, 0x01, 0x00, 0x59, 0x00, 0x02, 0xF0, 0x01, +/* 00012600 */ 0xFF, 0x09, 0x00, 0x00, 0x8F, 0x02, 0x03, 0x0A, 0x02, 0x00, 0x6D, 0x09, 0x0A, 0x00, 0x07, 0x03, +/* 00012610 */ 0x00, 0x59, 0x00, 0x0A, 0x5A, 0x01, 0x05, 0x01, 0x00, 0x8F, 0x01, 0x10, 0x0B, 0x00, 0x00, 0x4A, +/* 00012620 */ 0x0B, 0x5A, 0x02, 0x0B, 0x01, 0x00, 0xF4, 0x03, 0x09, 0x09, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, +/* 00012630 */ 0x45, 0x06, 0x09, 0x0F, 0x05, 0x00, 0x06, 0xA8, 0x00, 0x09, 0x46, 0x00, 0x98, 0x0B, 0x06, 0x03, +/* 00012640 */ 0x00, 0x00, 0x6D, 0x0A, 0x0B, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0B, 0x5A, 0x01, 0x04, 0x02, +/* 00012650 */ 0x00, 0xF4, 0x02, 0x0A, 0x0A, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x6D, 0x09, 0x0A, 0x02, 0x07, +/* 00012660 */ 0x02, 0x00, 0x59, 0x00, 0x0A, 0xD6, 0x00, 0x0B, 0x5A, 0x01, 0x0B, 0x03, 0x00, 0xF4, 0x02, 0x09, +/* 00012670 */ 0x09, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x45, 0x07, 0x09, 0x45, 0x00, 0x07, 0x09, 0x02, 0x00, +/* 00012680 */ 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xC0, 0x02, 0xFE, 0x56, 0x01, 0x89, 0xFF, 0x2B, 0x73, 0x01, 0x00, +/* 00012690 */ 0x08, 0x04, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x24, 0x00, 0x14, 0x00, 0x2B, 0x00, 0x2F, 0x00, 0x4B, +/* 000126A0 */ 0x00, 0x04, 0x00, 0x1A, 0x00, 0x05, 0x00, 0x5C, 0x02, 0x3E, 0x00, 0xCD, 0x00, 0x08, 0x00, 0x17, +/* 000126B0 */ 0x00, 0x00, 0xB6, 0x26, 0x01, 0x00, 0x7F, 0x4C, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0xFE, 0x84, +/* 000126C0 */ 0x08, 0x36, 0xA2, 0x41, 0xD0, 0x00, 0x80, 0xFE, 0x01, 0x10, 0xFF, 0x69, 0x76, 0x01, 0x00, 0xFF, +/* 000126D0 */ 0x69, 0x76, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0x69, 0x76, 0x01, 0x00, 0x0A, +/* 000126E0 */ 0x0A, 0x02, 0x02, 0x03, 0x0A, 0x0A, 0x02, 0x17, 0xAD, 0x03, 0x0F, 0x02, 0x00, 0x02, 0xAC, 0x03, +/* 000126F0 */ 0xAD, 0x00, 0x0F, 0x02, 0x00, 0x03, 0xAC, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFF, +/* 00012700 */ 0x70, 0x76, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x03, 0x00, 0x00, 0x7F, 0x5C, +/* 00012710 */ 0x0A, 0xC1, 0x43, 0x50, 0x03, 0x00, 0xFE, 0x5A, 0x08, 0x1E, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x9C, +/* 00012720 */ 0x04, 0x7E, 0xFF, 0x7C, 0x6E, 0x01, 0x00, 0xFF, 0x7C, 0x6E, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, +/* 00012730 */ 0x02, 0x02, 0xFF, 0x7C, 0x6E, 0x01, 0x00, 0xFE, 0x73, 0x04, 0xFE, 0x73, 0x04, 0x09, 0x09, 0x0D, +/* 00012740 */ 0x04, 0x56, 0x4D, 0x02, 0x05, 0x05, 0x04, 0x06, 0x06, 0x06, 0x06, 0x01, 0x0C, 0x0D, 0x07, 0x08, +/* 00012750 */ 0x01, 0x01, 0x01, 0x02, 0x06, 0xFE, 0x95, 0x03, 0x06, 0xFE, 0x47, 0x03, 0x01, 0x03, 0xFE, 0x5D, +/* 00012760 */ 0x01, 0x4E, 0x0A, 0x4E, 0x0B, 0x8F, 0x02, 0x03, 0x0F, 0x00, 0x00, 0x5F, 0x0F, 0x0F, 0x00, 0x6D, +/* 00012770 */ 0x0E, 0x0F, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0F, 0x5A, 0x01, 0x09, 0x00, 0x00, 0xF4, 0x02, +/* 00012780 */ 0x0E, 0x0E, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x0A, 0x0E, 0xA8, 0x0E, 0x14, 0x03, 0x00, +/* 00012790 */ 0x0A, 0x0E, 0x09, 0x0A, 0x01, 0x8F, 0x02, 0x03, 0x0F, 0x00, 0x00, 0x6D, 0x0E, 0x0F, 0x02, 0x07, +/* 000127A0 */ 0x02, 0x00, 0x59, 0x00, 0x0F, 0x5A, 0x01, 0x09, 0x01, 0x00, 0xF4, 0x02, 0x0E, 0x0E, 0x02, 0x00, +/* 000127B0 */ 0x00, 0x00, 0x01, 0x00, 0x45, 0x0A, 0x0E, 0x14, 0x03, 0x00, 0x0A, 0x02, 0x09, 0x9A, 0x00, 0x8F, +/* 000127C0 */ 0x01, 0x0F, 0x0E, 0x01, 0x00, 0x4A, 0x0E, 0x0F, 0x14, 0x00, 0x0E, 0x8F, 0x01, 0x05, 0x0E, 0x02, +/* 000127D0 */ 0x00, 0x4A, 0x0E, 0x07, 0x01, 0x00, 0x59, 0x00, 0x03, 0xF0, 0x01, 0xFF, 0x0E, 0x02, 0x00, 0x8F, +/* 000127E0 */ 0x02, 0x03, 0x0F, 0x00, 0x00, 0x6D, 0x0E, 0x0F, 0x03, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0F, 0x5A, +/* 000127F0 */ 0x01, 0x09, 0x03, 0x00, 0x8F, 0x01, 0x0F, 0x10, 0x01, 0x00, 0x4A, 0x10, 0x5A, 0x02, 0x10, 0x03, +/* 00012800 */ 0x00, 0xF4, 0x03, 0x0E, 0x0E, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x45, 0x0B, 0x0E, 0x98, 0x0E, +/* 00012810 */ 0x0B, 0x04, 0x00, 0x00, 0x98, 0x0F, 0x0B, 0x05, 0x01, 0x00, 0x0E, 0x10, 0x00, 0x0F, 0x98, 0x10, +/* 00012820 */ 0x0B, 0x05, 0x02, 0x00, 0x2D, 0x10, 0x06, 0x10, 0x45, 0x0F, 0x10, 0x09, 0x03, 0x00, 0x46, 0x0F, +/* 00012830 */ 0x07, 0x2D, 0x0E, 0x0E, 0x0F, 0x98, 0x0F, 0x0B, 0x08, 0x03, 0x00, 0x0E, 0x10, 0x00, 0x0F, 0x98, +/* 00012840 */ 0x10, 0x0B, 0x08, 0x04, 0x00, 0x2D, 0x10, 0x06, 0x10, 0x45, 0x0F, 0x10, 0x09, 0x03, 0x00, 0x46, +/* 00012850 */ 0x0F, 0x07, 0x2D, 0x0E, 0x0E, 0x0F, 0x45, 0x0A, 0x0E, 0x8F, 0x02, 0x03, 0x0F, 0x00, 0x00, 0x5F, +/* 00012860 */ 0x0F, 0x0F, 0x04, 0x6D, 0x0E, 0x0F, 0x05, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0F, 0x5A, 0x01, 0x09, +/* 00012870 */ 0x04, 0x00, 0xA8, 0x10, 0x14, 0x03, 0x00, 0x0A, 0x10, 0x09, 0x0E, 0x00, 0x8F, 0x02, 0x34, 0x11, +/* 00012880 */ 0x03, 0x00, 0x4A, 0x11, 0x45, 0x10, 0x11, 0x09, 0x03, 0x00, 0x46, 0x10, 0x0A, 0x5A, 0x02, 0x10, +/* 00012890 */ 0x04, 0x00, 0xF4, 0x03, 0xFF, 0x0E, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x09, 0x15, 0x00, 0x8F, +/* 000128A0 */ 0x02, 0x34, 0x0E, 0x03, 0x00, 0x4A, 0x0E, 0x14, 0x03, 0x00, 0x0A, 0x0E, 0x09, 0x05, 0x00, 0xA8, +/* 000128B0 */ 0x0E, 0x45, 0x0A, 0x0E, 0x45, 0x00, 0x0A, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x4E, +/* 000128C0 */ 0x03, 0xFE, 0x98, 0x01, 0xFE, 0xF3, 0x01, 0xFE, 0xC0, 0x02, 0xFE, 0x4E, 0x03, 0xFE, 0x9B, 0x01, +/* 000128D0 */ 0xFF, 0xA6, 0x6E, 0x01, 0x00, 0x0D, 0x04, 0x00, 0x00, 0x00, 0x26, 0x00, 0x53, 0x00, 0x0A, 0x00, +/* 000128E0 */ 0x30, 0x00, 0x22, 0x00, 0x51, 0x00, 0x08, 0x00, 0x2F, 0x00, 0x0C, 0x00, 0x2D, 0x00, 0x14, 0x00, +/* 000128F0 */ 0x3A, 0x00, 0x2F, 0x00, 0xB1, 0x00, 0x4B, 0x00, 0x34, 0x01, 0x46, 0x00, 0x80, 0x00, 0x10, 0x00, +/* 00012900 */ 0x30, 0x00, 0x05, 0x00, 0x2E, 0x00, 0x08, 0x00, 0x1B, 0x00, 0x00, 0x7F, 0x5C, 0x0A, 0xC1, 0x43, +/* 00012910 */ 0x50, 0x03, 0x00, 0xFE, 0x3F, 0x08, 0x1F, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x9B, 0x04, 0x7D, 0xFF, +/* 00012920 */ 0xD6, 0x69, 0x01, 0x00, 0xFF, 0xD6, 0x69, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFF, +/* 00012930 */ 0xD6, 0x69, 0x01, 0x00, 0xFE, 0x86, 0x04, 0xFE, 0x86, 0x04, 0x0A, 0x09, 0x0E, 0x04, 0x5F, 0x55, +/* 00012940 */ 0x02, 0x05, 0x05, 0x04, 0x06, 0x06, 0x06, 0x06, 0x01, 0x0D, 0x0E, 0x07, 0x08, 0x01, 0x01, 0x01, +/* 00012950 */ 0x02, 0x06, 0xFE, 0x95, 0x03, 0x06, 0xFE, 0x47, 0x03, 0x01, 0x03, 0xFE, 0x7C, 0x01, 0x4E, 0x0C, +/* 00012960 */ 0x8F, 0x02, 0x03, 0x10, 0x00, 0x00, 0x5F, 0x10, 0x10, 0x00, 0x6D, 0x0F, 0x10, 0x01, 0x07, 0x02, +/* 00012970 */ 0x00, 0x59, 0x00, 0x10, 0x5A, 0x01, 0x09, 0x00, 0x00, 0xF4, 0x02, 0x0F, 0x0F, 0x01, 0x00, 0x00, +/* 00012980 */ 0x00, 0x00, 0x00, 0x45, 0x0B, 0x0F, 0xA8, 0x0F, 0x14, 0x03, 0x00, 0x0B, 0x0F, 0x09, 0x0A, 0x01, +/* 00012990 */ 0x8F, 0x02, 0x03, 0x10, 0x00, 0x00, 0x6D, 0x0F, 0x10, 0x02, 0x07, 0x02, 0x00, 0x59, 0x00, 0x10, +/* 000129A0 */ 0x5A, 0x01, 0x09, 0x01, 0x00, 0xF4, 0x02, 0x0F, 0x0F, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, +/* 000129B0 */ 0x0B, 0x0F, 0x14, 0x03, 0x00, 0x0B, 0x02, 0x09, 0x9A, 0x00, 0x8F, 0x01, 0x0F, 0x0F, 0x01, 0x00, +/* 000129C0 */ 0x4A, 0x0F, 0x0F, 0x14, 0x00, 0x0F, 0x8F, 0x01, 0x05, 0x0F, 0x02, 0x00, 0x4A, 0x0F, 0x07, 0x01, +/* 000129D0 */ 0x00, 0x59, 0x00, 0x03, 0xF0, 0x01, 0xFF, 0x0F, 0x02, 0x00, 0x8F, 0x02, 0x03, 0x10, 0x00, 0x00, +/* 000129E0 */ 0x6D, 0x0F, 0x10, 0x03, 0x07, 0x03, 0x00, 0x59, 0x00, 0x10, 0x5A, 0x01, 0x09, 0x03, 0x00, 0x8F, +/* 000129F0 */ 0x01, 0x0F, 0x11, 0x01, 0x00, 0x4A, 0x11, 0x5A, 0x02, 0x11, 0x03, 0x00, 0xF4, 0x03, 0x0F, 0x0F, +/* 00012A00 */ 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x45, 0x0C, 0x0F, 0x98, 0x0F, 0x0C, 0x04, 0x00, 0x00, 0x98, +/* 00012A10 */ 0x10, 0x0C, 0x05, 0x01, 0x00, 0x0E, 0x10, 0x00, 0x10, 0x98, 0x11, 0x0C, 0x05, 0x02, 0x00, 0x2D, +/* 00012A20 */ 0x11, 0x06, 0x11, 0x45, 0x10, 0x11, 0x09, 0x03, 0x00, 0x46, 0x10, 0x07, 0x2D, 0x0F, 0x0F, 0x10, +/* 00012A30 */ 0x98, 0x10, 0x0C, 0x08, 0x03, 0x00, 0x0E, 0x10, 0x00, 0x10, 0x98, 0x11, 0x0C, 0x08, 0x04, 0x00, +/* 00012A40 */ 0x2D, 0x11, 0x06, 0x11, 0x45, 0x10, 0x11, 0x09, 0x03, 0x00, 0x46, 0x10, 0x07, 0x2D, 0x0F, 0x0F, +/* 00012A50 */ 0x10, 0x45, 0x0B, 0x0F, 0x8F, 0x02, 0x03, 0x10, 0x00, 0x00, 0x5F, 0x10, 0x10, 0x04, 0x6D, 0x0F, +/* 00012A60 */ 0x10, 0x05, 0x07, 0x03, 0x00, 0x59, 0x00, 0x10, 0x5A, 0x01, 0x09, 0x04, 0x00, 0xA8, 0x11, 0x14, +/* 00012A70 */ 0x03, 0x00, 0x0B, 0x11, 0x09, 0x0E, 0x00, 0x8F, 0x02, 0x34, 0x12, 0x03, 0x00, 0x4A, 0x12, 0x45, +/* 00012A80 */ 0x11, 0x12, 0x09, 0x03, 0x00, 0x46, 0x11, 0x0B, 0x5A, 0x02, 0x11, 0x04, 0x00, 0xF4, 0x03, 0xFF, +/* 00012A90 */ 0x0F, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x09, 0x15, 0x00, 0x8F, 0x02, 0x34, 0x0F, 0x03, 0x00, +/* 00012AA0 */ 0x4A, 0x0F, 0x14, 0x03, 0x00, 0x0B, 0x0F, 0x09, 0x05, 0x00, 0xA8, 0x0F, 0x45, 0x0B, 0x0F, 0x14, +/* 00012AB0 */ 0x03, 0x00, 0x0A, 0x09, 0x09, 0x09, 0x00, 0x45, 0x00, 0x0B, 0x09, 0x1B, 0x00, 0x09, 0x16, 0x00, +/* 00012AC0 */ 0x14, 0x03, 0x00, 0x0A, 0x0B, 0x09, 0x08, 0x00, 0xA8, 0x00, 0x09, 0x0B, 0x00, 0x09, 0x06, 0x00, +/* 00012AD0 */ 0x45, 0x00, 0x0B, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x4F, 0x03, 0xFE, 0x98, 0x01, +/* 00012AE0 */ 0xFE, 0xF4, 0x01, 0xFE, 0xC0, 0x02, 0xFE, 0x4F, 0x03, 0xFE, 0x9B, 0x01, 0xFF, 0x01, 0x6A, 0x01, +/* 00012AF0 */ 0x00, 0x11, 0x02, 0x00, 0x00, 0x00, 0x26, 0x00, 0x46, 0x00, 0x0A, 0x00, 0x30, 0x00, 0x22, 0x00, +/* 00012B00 */ 0x44, 0x00, 0x08, 0x00, 0x2F, 0x00, 0x0C, 0x00, 0x2D, 0x00, 0x14, 0x00, 0x3A, 0x00, 0x2F, 0x00, +/* 00012B10 */ 0x52, 0x00, 0x4B, 0x00, 0x0C, 0x01, 0x46, 0x00, 0x73, 0x00, 0x10, 0x00, 0x30, 0x00, 0x05, 0x00, +/* 00012B20 */ 0x2F, 0x00, 0x08, 0x00, 0x2C, 0x00, 0x09, 0x00, 0x26, 0x00, 0x08, 0x00, 0x34, 0x00, 0x08, 0x00, +/* 00012B30 */ 0x2F, 0x00, 0x08, 0x00, 0x25, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, +/* 00012B40 */ 0x3B, 0x08, 0x1C, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xF0, 0x02, 0x7C, 0xFF, 0x63, 0x69, 0x01, 0x00, +/* 00012B50 */ 0xFF, 0x63, 0x69, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFF, 0x63, 0x69, 0x01, 0x00, +/* 00012B60 */ 0x51, 0x51, 0x05, 0x02, 0x05, 0x04, 0x0B, 0x0B, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, +/* 00012B70 */ 0x2B, 0x8F, 0x02, 0x03, 0x06, 0x00, 0x00, 0x6D, 0x05, 0x06, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 00012B80 */ 0x06, 0x5A, 0x01, 0x03, 0x00, 0x00, 0x5A, 0x02, 0x02, 0x00, 0x00, 0xF4, 0x03, 0x00, 0x05, 0x00, +/* 00012B90 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xBD, 0x02, 0xFF, +/* 00012BA0 */ 0x80, 0x69, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x33, 0x00, 0x00, 0x7F, 0x4C, +/* 00012BB0 */ 0x00, 0xC0, 0x03, 0x00, 0x03, 0x00, 0xFE, 0x35, 0x08, 0x1C, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xEF, +/* 00012BC0 */ 0x02, 0x7B, 0xFF, 0xC9, 0x68, 0x01, 0x00, 0xFF, 0xC9, 0x68, 0x01, 0x00, 0x41, 0xFE, 0x00, 0x90, +/* 00012BD0 */ 0x02, 0x02, 0xFF, 0xC9, 0x68, 0x01, 0x00, 0x7B, 0x7B, 0x02, 0x04, 0x05, 0x09, 0x09, 0x02, 0x02, +/* 00012BE0 */ 0x02, 0x02, 0x02, 0x03, 0x1C, 0x00, 0x0A, 0x80, 0x03, 0x07, 0x00, 0x0A, 0x80, 0x1B, 0x5F, 0x05, +/* 00012BF0 */ 0x04, 0x00, 0x14, 0x0C, 0x00, 0x05, 0x02, 0x5F, 0x05, 0x04, 0x01, 0x14, 0x03, 0x00, 0x05, 0x03, +/* 00012C00 */ 0x09, 0x02, 0x00, 0x23, 0x04, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x0C, 0x01, 0xFE, 0x0C, 0x01, 0xFF, +/* 00012C10 */ 0xE1, 0x68, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x4A, 0x00, 0x04, 0x00, 0x18, +/* 00012C20 */ 0x00, 0x00, 0x7F, 0x7C, 0x0A, 0x02, 0x00, 0x00, 0x13, 0x00, 0xFE, 0x2A, 0x08, 0x1B, 0xA2, 0x41, +/* 00012C30 */ 0xC1, 0x00, 0xFE, 0xF2, 0x02, 0x7A, 0xFF, 0x70, 0x67, 0x01, 0x00, 0xFF, 0x70, 0x67, 0x01, 0x00, +/* 00012C40 */ 0x41, 0xFE, 0x00, 0x90, 0x04, 0x04, 0xFF, 0x70, 0x67, 0x01, 0x00, 0xD5, 0xD5, 0x06, 0x05, 0x09, +/* 00012C50 */ 0x03, 0x14, 0x12, 0x0F, 0x02, 0x02, 0x01, 0x01, 0x05, 0x3D, 0x01, 0x00, 0x08, 0x01, 0x01, 0x41, +/* 00012C60 */ 0x4E, 0x08, 0x45, 0x08, 0x02, 0xED, 0x00, 0xEE, 0x00, 0x12, 0x03, 0x00, 0x08, 0x06, 0x09, 0x2A, +/* 00012C70 */ 0x00, 0xBC, 0x09, 0x08, 0x05, 0x00, 0x00, 0x0E, 0x1A, 0x00, 0x09, 0x45, 0x09, 0x07, 0x07, 0x02, +/* 00012C80 */ 0x00, 0x59, 0x00, 0x03, 0x98, 0x0A, 0x05, 0x08, 0x01, 0x00, 0x5A, 0x01, 0x0A, 0x00, 0x00, 0xF0, +/* 00012C90 */ 0x02, 0xFF, 0x09, 0x00, 0x00, 0x26, 0x08, 0x08, 0x09, 0xCC, 0xFF, 0xEF, 0x00, 0xA8, 0x00, 0x24, +/* 00012CA0 */ 0x00, 0xFF, 0x97, 0x67, 0x01, 0x00, 0x06, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x20, 0x00, 0x08, +/* 00012CB0 */ 0x00, 0x20, 0x00, 0x0A, 0x00, 0x26, 0x00, 0x1A, 0x00, 0x2E, 0x00, 0x0A, 0x00, 0x19, 0x00, 0x00, +/* 00012CC0 */ 0x7F, 0x5C, 0x08, 0xC1, 0x43, 0x50, 0x03, 0x00, 0xFE, 0x1D, 0x08, 0x22, 0xA2, 0x41, 0xC1, 0x00, +/* 00012CD0 */ 0xFE, 0x68, 0x03, 0x79, 0xFF, 0xE7, 0x65, 0x01, 0x00, 0xFF, 0xE7, 0x65, 0x01, 0x00, 0x01, 0xFE, +/* 00012CE0 */ 0x00, 0x90, 0x02, 0x02, 0xFF, 0xE7, 0x65, 0x01, 0x00, 0xFE, 0x6B, 0x01, 0xFE, 0x6B, 0x01, 0x08, +/* 00012CF0 */ 0x04, 0x08, 0x04, 0x2A, 0x27, 0x02, 0x03, 0x03, 0x02, 0x02, 0x02, 0x02, 0x01, 0x07, 0x08, 0x07, +/* 00012D00 */ 0x08, 0x9D, 0x4E, 0x05, 0x4E, 0x06, 0x8F, 0x02, 0x03, 0x0A, 0x00, 0x00, 0x6D, 0x09, 0x0A, 0x00, +/* 00012D10 */ 0x07, 0x02, 0x00, 0x59, 0x00, 0x0A, 0x5A, 0x01, 0x04, 0x00, 0x00, 0xF4, 0x02, 0x09, 0x09, 0x00, +/* 00012D20 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x05, 0x09, 0x14, 0x03, 0x00, 0x05, 0x02, 0x09, 0x65, 0x00, +/* 00012D30 */ 0x8F, 0x01, 0x11, 0x09, 0x01, 0x00, 0x4A, 0x09, 0x0F, 0x14, 0x00, 0x09, 0x8F, 0x01, 0x05, 0x09, +/* 00012D40 */ 0x02, 0x00, 0x4A, 0x09, 0x07, 0x01, 0x00, 0x59, 0x00, 0x03, 0xF0, 0x01, 0xFF, 0x09, 0x01, 0x00, +/* 00012D50 */ 0x8F, 0x02, 0x03, 0x0A, 0x00, 0x00, 0x6D, 0x09, 0x0A, 0x01, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0A, +/* 00012D60 */ 0x5A, 0x01, 0x04, 0x02, 0x00, 0x8F, 0x01, 0x11, 0x0B, 0x01, 0x00, 0x4A, 0x0B, 0x5A, 0x02, 0x0B, +/* 00012D70 */ 0x02, 0x00, 0xF4, 0x03, 0x09, 0x09, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x45, 0x06, 0x09, 0xAD, +/* 00012D80 */ 0x09, 0x0F, 0x02, 0x00, 0x06, 0xAC, 0x09, 0xAD, 0x00, 0x0F, 0x02, 0x00, 0x09, 0xAC, 0x00, 0x09, +/* 00012D90 */ 0x0B, 0x00, 0x09, 0x06, 0x00, 0x45, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, +/* 00012DA0 */ 0xED, 0x01, 0xFE, 0xC0, 0x02, 0xFF, 0x04, 0x66, 0x01, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x22, +/* 00012DB0 */ 0x00, 0x40, 0x00, 0x08, 0x00, 0x23, 0x00, 0x0C, 0x00, 0x24, 0x00, 0x14, 0x00, 0x32, 0x00, 0x2F, +/* 00012DC0 */ 0x00, 0x4A, 0x00, 0x16, 0x00, 0x2D, 0x00, 0x08, 0x00, 0x1D, 0x00, 0x00, 0x7F, 0x5C, 0x18, 0xC1, +/* 00012DD0 */ 0x03, 0x10, 0x03, 0x00, 0xFE, 0x10, 0x08, 0x1F, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x67, 0x03, 0x78, +/* 00012DE0 */ 0xFF, 0xD8, 0x63, 0x01, 0x00, 0xFF, 0xD8, 0x63, 0x01, 0x00, 0x41, 0xFE, 0x00, 0x90, 0x03, 0x03, +/* 00012DF0 */ 0xFF, 0xD8, 0x63, 0x01, 0x00, 0xFE, 0xEA, 0x01, 0xFE, 0xEA, 0x01, 0x06, 0x05, 0x09, 0x04, 0x14, +/* 00012E00 */ 0x12, 0x02, 0x01, 0x01, 0x01, 0x03, 0x03, 0x03, 0x03, 0x08, 0x07, 0x06, 0xFE, 0x47, 0x03, 0x05, +/* 00012E10 */ 0xFE, 0x9A, 0x04, 0x4D, 0x4E, 0x07, 0x8F, 0x02, 0x03, 0x0A, 0x00, 0x00, 0x6D, 0x09, 0x0A, 0x00, +/* 00012E20 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x0A, 0x5A, 0x01, 0x05, 0x00, 0x00, 0x5A, 0x02, 0x06, 0x00, 0x00, +/* 00012E30 */ 0xF4, 0x03, 0x09, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x07, 0x09, 0x14, 0x03, 0x00, +/* 00012E40 */ 0x07, 0x02, 0x09, 0x18, 0x00, 0x77, 0x03, 0x05, 0x01, 0x45, 0x09, 0x05, 0xD0, 0x0A, 0x02, 0x00, +/* 00012E50 */ 0x00, 0xA1, 0x00, 0x04, 0x0A, 0xA1, 0x01, 0x03, 0x0A, 0x77, 0x0A, 0x09, 0x02, 0xA8, 0x00, 0x24, +/* 00012E60 */ 0x00, 0xFE, 0xFA, 0x01, 0xFE, 0x3D, 0x02, 0xFE, 0x62, 0x02, 0xFF, 0x07, 0x64, 0x01, 0x00, 0x05, +/* 00012E70 */ 0x02, 0x00, 0x00, 0x00, 0x27, 0x00, 0x4F, 0x00, 0x08, 0x00, 0x71, 0x00, 0x04, 0x00, 0x33, 0x00, +/* 00012E80 */ 0x16, 0x00, 0xC7, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0xFF, 0x07, +/* 00012E90 */ 0x1D, 0xA0, 0x41, 0xC1, 0x00, 0xFE, 0x53, 0x03, 0x77, 0xFF, 0xED, 0x61, 0x01, 0x00, 0xFF, 0xED, +/* 00012EA0 */ 0x61, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFF, 0xED, 0x61, 0x01, 0x00, 0xFE, 0xC9, +/* 00012EB0 */ 0x01, 0xFE, 0xC9, 0x01, 0x04, 0x03, 0x05, 0x02, 0x1A, 0x19, 0x02, 0x01, 0x02, 0x02, 0x02, 0x02, +/* 00012EC0 */ 0x02, 0x04, 0x05, 0xFE, 0x93, 0x03, 0x66, 0x4E, 0x03, 0x8F, 0x01, 0x09, 0x05, 0x00, 0x00, 0x4A, +/* 00012ED0 */ 0x05, 0x0E, 0x19, 0x00, 0x05, 0x8F, 0x02, 0x03, 0x05, 0x01, 0x00, 0x5F, 0x05, 0x05, 0x00, 0x0E, +/* 00012EE0 */ 0x0B, 0x00, 0x05, 0x8F, 0x01, 0x09, 0x00, 0x00, 0x00, 0x4A, 0x00, 0x09, 0x3D, 0x00, 0x8F, 0x02, +/* 00012EF0 */ 0x03, 0x06, 0x01, 0x00, 0x6D, 0x05, 0x06, 0x01, 0x07, 0x01, 0x00, 0x59, 0x00, 0x06, 0xF4, 0x01, +/* 00012F00 */ 0x05, 0x05, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x03, 0x05, 0x0F, 0x09, 0x00, 0x03, 0x01, +/* 00012F10 */ 0x43, 0x01, 0x01, 0x09, 0x02, 0x09, 0x06, 0x00, 0x01, 0x43, 0x01, 0x01, 0x09, 0x03, 0x8F, 0x01, +/* 00012F20 */ 0x09, 0x00, 0x00, 0x00, 0x4A, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x4D, 0x03, +/* 00012F30 */ 0xFE, 0xF5, 0x01, 0xFF, 0x03, 0x62, 0x01, 0x00, 0x08, 0x02, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x39, +/* 00012F40 */ 0x00, 0x0B, 0x00, 0x2B, 0x00, 0x1D, 0x00, 0x34, 0x00, 0x04, 0x00, 0x9C, 0x00, 0x09, 0x00, 0x35, +/* 00012F50 */ 0x00, 0x06, 0x00, 0x2D, 0x00, 0x0D, 0x00, 0x1C, 0x00, 0x00, 0x7E, 0x5D, 0x08, 0xC1, 0x13, 0x1A, +/* 00012F60 */ 0x4B, 0x00, 0xFE, 0x4D, 0x07, 0x19, 0xA0, 0x41, 0xD1, 0x00, 0x6F, 0xFF, 0x42, 0x48, 0x01, 0x00, +/* 00012F70 */ 0xFF, 0x42, 0x48, 0x01, 0x00, 0x06, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFF, 0x42, 0x48, 0x01, 0x00, +/* 00012F80 */ 0xFE, 0x4D, 0x15, 0xFE, 0x4D, 0x15, 0x03, 0xFE, 0x8B, 0x04, 0xFE, 0x8C, 0x04, 0xFE, 0x8D, 0x04, +/* 00012F90 */ 0x0B, 0x14, 0x1B, 0x05, 0x87, 0x82, 0x02, 0x09, 0x05, 0x19, 0x19, 0x19, 0x19, 0x05, 0x18, 0x19, +/* 00012FA0 */ 0x1A, 0x06, 0xFE, 0x27, 0x03, 0x07, 0x05, 0xFE, 0x8E, 0x04, 0x08, 0x06, 0xFE, 0xEC, 0x03, 0x06, +/* 00012FB0 */ 0xFE, 0x2A, 0x03, 0x06, 0xFE, 0x2B, 0x03, 0x0C, 0x06, 0xFE, 0x2C, 0x03, 0x06, 0xFE, 0x2D, 0x03, +/* 00012FC0 */ 0x06, 0xFE, 0xED, 0x03, 0x0B, 0x05, 0xFE, 0x8F, 0x04, 0x06, 0xFE, 0x38, 0x03, 0x05, 0xFE, 0x90, +/* 00012FD0 */ 0x04, 0x06, 0xFE, 0x91, 0x04, 0x05, 0xFE, 0x92, 0x04, 0x06, 0xFE, 0xEE, 0x03, 0xFE, 0x4F, 0x02, +/* 00012FE0 */ 0x4E, 0x14, 0x4E, 0x15, 0x4E, 0x16, 0x4E, 0x17, 0x4E, 0x1B, 0x96, 0x02, 0x1B, 0x4E, 0x1B, 0x96, +/* 00012FF0 */ 0x03, 0x1B, 0x4E, 0x1B, 0x96, 0x04, 0x1B, 0x8F, 0x02, 0x32, 0x1B, 0x00, 0x00, 0x15, 0x03, 0x00, +/* 00013000 */ 0x1B, 0x02, 0x09, 0x05, 0x00, 0xA8, 0x00, 0x09, 0x23, 0x02, 0xD6, 0x00, 0x1B, 0x96, 0x02, 0x1B, +/* 00013010 */ 0xD6, 0x01, 0x1B, 0x96, 0x03, 0x1B, 0xCD, 0x1B, 0x96, 0x04, 0x1B, 0x8F, 0x02, 0x23, 0x1B, 0x01, +/* 00013020 */ 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x05, 0x5A, 0x01, 0x04, 0x00, 0x00, 0xD6, 0x02, 0x1C, 0x5A, +/* 00013030 */ 0x02, 0x1C, 0x00, 0x00, 0xF0, 0x03, 0x1B, 0x1B, 0x00, 0x00, 0x45, 0x14, 0x1B, 0x8F, 0x02, 0x36, +/* 00013040 */ 0x1C, 0x02, 0x00, 0x4A, 0x1C, 0x6D, 0x1B, 0x1C, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x1C, 0x5A, +/* 00013050 */ 0x01, 0x14, 0x01, 0x00, 0x5A, 0x02, 0x06, 0x01, 0x00, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00013060 */ 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0x93, 0x04, 0x1E, 0x03, 0x00, 0x7B, 0x1E, 0x1D, 0x01, 0x7B, +/* 00013070 */ 0x09, 0x1D, 0x02, 0x7B, 0x09, 0x1D, 0x03, 0x7B, 0x09, 0x1D, 0x04, 0x5A, 0x03, 0x1D, 0x01, 0x00, +/* 00013080 */ 0xF4, 0x04, 0xFF, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x8F, 0x02, 0x36, 0x1C, 0x02, 0x00, +/* 00013090 */ 0x4A, 0x1C, 0x6D, 0x1B, 0x1C, 0x05, 0x07, 0x04, 0x00, 0x59, 0x00, 0x1C, 0x93, 0x04, 0x1D, 0x03, +/* 000130A0 */ 0x00, 0x5A, 0x01, 0x1D, 0x02, 0x00, 0x5A, 0x02, 0x0C, 0x02, 0x00, 0xCE, 0x18, 0x00, 0x00, 0x00, +/* 000130B0 */ 0x01, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0x7B, 0x14, 0x1D, 0x06, 0x7B, 0x0D, 0x1D, 0x07, +/* 000130C0 */ 0x7B, 0x09, 0x1D, 0x08, 0x7B, 0x0D, 0x1D, 0x09, 0x5A, 0x03, 0x1D, 0x02, 0x00, 0xF4, 0x04, 0xFF, +/* 000130D0 */ 0x1B, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x8F, 0x01, 0x06, 0x1B, 0x04, 0x00, 0x4A, 0x1B, 0x07, +/* 000130E0 */ 0x03, 0x00, 0x59, 0x00, 0x05, 0x5A, 0x01, 0x0E, 0x03, 0x00, 0xD6, 0x03, 0x1C, 0x5A, 0x02, 0x1C, +/* 000130F0 */ 0x03, 0x00, 0xF0, 0x03, 0x1B, 0x1B, 0x03, 0x00, 0x45, 0x15, 0x1B, 0x8F, 0x02, 0x36, 0x1C, 0x02, +/* 00013100 */ 0x00, 0x4A, 0x1C, 0x6D, 0x1B, 0x1C, 0x0A, 0x07, 0x04, 0x00, 0x59, 0x00, 0x1C, 0x5A, 0x01, 0x14, +/* 00013110 */ 0x04, 0x00, 0x5A, 0x02, 0x0F, 0x04, 0x00, 0xCE, 0x30, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, +/* 00013120 */ 0x1D, 0x00, 0x00, 0x00, 0x7B, 0x15, 0x1D, 0x0B, 0x7B, 0x0D, 0x1D, 0x0C, 0x7B, 0x09, 0x1D, 0x0D, +/* 00013130 */ 0x7B, 0x0D, 0x1D, 0x0E, 0x5A, 0x03, 0x1D, 0x04, 0x00, 0xF4, 0x04, 0xFF, 0x1B, 0x0A, 0x00, 0x00, +/* 00013140 */ 0x00, 0x04, 0x00, 0x8F, 0x01, 0x06, 0x1B, 0x04, 0x00, 0x4A, 0x1B, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 00013150 */ 0x05, 0x5A, 0x01, 0x10, 0x05, 0x00, 0xD6, 0x04, 0x1C, 0x5A, 0x02, 0x1C, 0x05, 0x00, 0xF0, 0x03, +/* 00013160 */ 0x1B, 0x1B, 0x05, 0x00, 0x45, 0x16, 0x1B, 0x8F, 0x02, 0x36, 0x1C, 0x02, 0x00, 0x4A, 0x1C, 0x6D, +/* 00013170 */ 0x1B, 0x1C, 0x0F, 0x07, 0x04, 0x00, 0x59, 0x00, 0x1C, 0x93, 0x04, 0x1D, 0x03, 0x00, 0x5A, 0x01, +/* 00013180 */ 0x1D, 0x06, 0x00, 0x5A, 0x02, 0x11, 0x06, 0x00, 0xCE, 0x48, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, +/* 00013190 */ 0x00, 0x1D, 0x00, 0x00, 0x00, 0x7B, 0x16, 0x1D, 0x10, 0x7B, 0x09, 0x1D, 0x11, 0x7B, 0x0D, 0x1D, +/* 000131A0 */ 0x12, 0x7B, 0x0D, 0x1D, 0x13, 0x5A, 0x03, 0x1D, 0x06, 0x00, 0xF4, 0x04, 0xFF, 0x1B, 0x0F, 0x00, +/* 000131B0 */ 0x00, 0x00, 0x06, 0x00, 0x8F, 0x01, 0x06, 0x1B, 0x04, 0x00, 0x4A, 0x1B, 0x07, 0x03, 0x00, 0x59, +/* 000131C0 */ 0x00, 0x05, 0x5A, 0x01, 0x12, 0x07, 0x00, 0xD6, 0x05, 0x1C, 0x5A, 0x02, 0x1C, 0x07, 0x00, 0xF0, +/* 000131D0 */ 0x03, 0x1B, 0x1B, 0x07, 0x00, 0x45, 0x17, 0x1B, 0x8F, 0x02, 0x36, 0x1C, 0x02, 0x00, 0x4A, 0x1C, +/* 000131E0 */ 0x6D, 0x1B, 0x1C, 0x14, 0x07, 0x04, 0x00, 0x59, 0x00, 0x1C, 0x93, 0x04, 0x1D, 0x03, 0x00, 0x5A, +/* 000131F0 */ 0x01, 0x1D, 0x08, 0x00, 0x5A, 0x02, 0x13, 0x08, 0x00, 0xCE, 0x60, 0x00, 0x00, 0x00, 0x04, 0x00, +/* 00013200 */ 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0x7B, 0x17, 0x1D, 0x15, 0x7B, 0x09, 0x1D, 0x16, 0x7B, 0x0D, +/* 00013210 */ 0x1D, 0x17, 0x7B, 0x0D, 0x1D, 0x18, 0x5A, 0x03, 0x1D, 0x08, 0x00, 0xF4, 0x04, 0xFF, 0x1B, 0x14, +/* 00013220 */ 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00, 0x14, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x05, +/* 00013230 */ 0x78, 0x00, 0x60, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, +/* 00013240 */ 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x48, 0x00, +/* 00013250 */ 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x94, 0x01, +/* 00013260 */ 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x03, 0x04, +/* 00013270 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, +/* 00013280 */ 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, +/* 00013290 */ 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, +/* 000132A0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, +/* 000132B0 */ 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0xFE, 0x9C, +/* 000132C0 */ 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, +/* 000132D0 */ 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, +/* 000132E0 */ 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x97, +/* 000132F0 */ 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, +/* 00013300 */ 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x96, 0x01, 0xFF, 0x57, 0x48, 0x01, 0x00, 0x10, 0x17, +/* 00013310 */ 0x00, 0x00, 0x00, 0x0E, 0x00, 0x27, 0x00, 0x05, 0x00, 0x23, 0x01, 0x06, 0x00, 0x02, 0x05, 0x06, +/* 00013320 */ 0x00, 0xD6, 0x00, 0x05, 0x00, 0x7A, 0x00, 0x22, 0x00, 0x85, 0x02, 0x4D, 0x00, 0xC8, 0x00, 0x4D, +/* 00013330 */ 0x00, 0xC7, 0x00, 0x24, 0x00, 0x12, 0x01, 0x48, 0x00, 0x09, 0x01, 0x24, 0x00, 0xAC, 0x01, 0x4D, +/* 00013340 */ 0x00, 0xBE, 0x00, 0x24, 0x00, 0x1A, 0x04, 0x4D, 0x00, 0xD0, 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, +/* 00013350 */ 0x35, 0x39, 0x01, 0x00, 0x86, 0x38, 0x01, 0x00, 0x22, 0x37, 0x01, 0x00, 0x7A, 0x36, 0x01, 0x00, +/* 00013360 */ 0x69, 0x35, 0x01, 0x00, 0x68, 0x33, 0x01, 0x00, 0x7F, 0x5D, 0x18, 0xC1, 0x03, 0x1A, 0x0B, 0x00, +/* 00013370 */ 0xFE, 0xBC, 0x07, 0x61, 0xA0, 0x41, 0xC3, 0x00, 0xFE, 0xEE, 0x03, 0x75, 0xFF, 0xE5, 0x58, 0x01, +/* 00013380 */ 0x00, 0xFF, 0xE5, 0x58, 0x01, 0x00, 0x01, 0x08, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFF, 0xE5, 0x58, +/* 00013390 */ 0x01, 0x00, 0xFE, 0xB6, 0x03, 0xFE, 0xB6, 0x03, 0x01, 0xFE, 0x99, 0x04, 0x06, 0x0D, 0x11, 0x05, +/* 000133A0 */ 0x2D, 0x2D, 0x03, 0x03, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x0E, 0x0F, 0x10, 0x05, 0xFE, 0x90, +/* 000133B0 */ 0x04, 0x06, 0xFE, 0x31, 0x03, 0x06, 0xFE, 0xD7, 0x03, 0x06, 0xFE, 0x93, 0x04, 0x06, 0xFE, 0xDA, +/* 000133C0 */ 0x03, 0x06, 0xFE, 0xDB, 0x03, 0x06, 0xFE, 0xDC, 0x03, 0x06, 0xFE, 0xDD, 0x03, 0x06, 0xFE, 0xDE, +/* 000133D0 */ 0x03, 0x06, 0xFE, 0x96, 0x04, 0x08, 0xBA, 0x58, 0x0D, 0x4E, 0x11, 0x96, 0x02, 0x11, 0x8F, 0x03, +/* 000133E0 */ 0x03, 0x12, 0x00, 0x00, 0x6D, 0x11, 0x12, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x12, 0x5A, 0x01, +/* 000133F0 */ 0x0D, 0x00, 0x00, 0xF4, 0x02, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x02, 0x11, +/* 00013400 */ 0x93, 0x02, 0x11, 0x01, 0x00, 0x0E, 0x0D, 0x00, 0x11, 0x93, 0x02, 0x11, 0x01, 0x00, 0x5F, 0x11, +/* 00013410 */ 0x11, 0x01, 0x0F, 0x24, 0x00, 0x11, 0x8F, 0x03, 0x03, 0x12, 0x00, 0x00, 0x6D, 0x11, 0x12, 0x02, +/* 00013420 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x12, 0x5A, 0x01, 0x02, 0x01, 0x00, 0x5A, 0x02, 0x03, 0x01, 0x00, +/* 00013430 */ 0xF4, 0x03, 0xFF, 0x11, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x8F, 0x02, 0x17, 0x11, 0x02, 0x00, +/* 00013440 */ 0x4A, 0x11, 0x07, 0x04, 0x00, 0x59, 0x00, 0x0C, 0xD0, 0x12, 0x08, 0x00, 0x00, 0xA1, 0x00, 0x04, +/* 00013450 */ 0x12, 0xA1, 0x01, 0x05, 0x12, 0xA1, 0x02, 0x06, 0x12, 0xA1, 0x03, 0x07, 0x12, 0xA1, 0x04, 0x08, +/* 00013460 */ 0x12, 0xA1, 0x05, 0x09, 0x12, 0xA1, 0x06, 0x0A, 0x12, 0xA1, 0x07, 0x0B, 0x12, 0x5A, 0x01, 0x12, +/* 00013470 */ 0x02, 0x00, 0x93, 0x02, 0x12, 0x01, 0x00, 0x5A, 0x02, 0x12, 0x02, 0x00, 0xD6, 0x00, 0x12, 0x5A, +/* 00013480 */ 0x03, 0x12, 0x02, 0x00, 0xF0, 0x04, 0x00, 0x11, 0x02, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, +/* 00013490 */ 0x00, 0xFE, 0x05, 0x02, 0xFE, 0x97, 0x04, 0xFE, 0xB6, 0x02, 0xFF, 0x0E, 0x59, 0x01, 0x00, 0x05, +/* 000134A0 */ 0x07, 0x00, 0x00, 0x00, 0x22, 0x00, 0x37, 0x00, 0x16, 0x00, 0x39, 0x00, 0x24, 0x00, 0x6F, 0x00, +/* 000134B0 */ 0x55, 0x00, 0xAD, 0x02, 0x00, 0xB9, 0x34, 0x01, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x07, +/* 000134C0 */ 0x00, 0xFE, 0xCB, 0x07, 0x13, 0xA2, 0x41, 0xD0, 0x00, 0x76, 0xFE, 0x01, 0x10, 0xFF, 0x46, 0x5B, +/* 000134D0 */ 0x01, 0x00, 0xFF, 0x46, 0x5B, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFF, 0x46, 0x5B, +/* 000134E0 */ 0x01, 0x00, 0xFE, 0x49, 0x01, 0xFE, 0x49, 0x01, 0x07, 0x05, 0x08, 0x04, 0x14, 0x12, 0x04, 0x01, +/* 000134F0 */ 0x02, 0x03, 0x03, 0x03, 0x03, 0x07, 0x06, 0xFE, 0x96, 0x04, 0x01, 0x00, 0x0B, 0x4B, 0x14, 0x03, +/* 00013500 */ 0x00, 0x05, 0x02, 0x09, 0x3F, 0x00, 0x45, 0x08, 0x06, 0x8F, 0x04, 0x36, 0x0A, 0x00, 0x00, 0x4A, +/* 00013510 */ 0x0A, 0x6D, 0x09, 0x0A, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0A, 0x8F, 0x01, 0x02, 0x0B, 0x01, +/* 00013520 */ 0x00, 0x4A, 0x0B, 0x5F, 0x0B, 0x0B, 0x01, 0x5A, 0x01, 0x0B, 0x00, 0x00, 0x5A, 0x02, 0x03, 0x00, +/* 00013530 */ 0x00, 0xF4, 0x03, 0x09, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x09, 0x08, 0x02, 0x45, +/* 00013540 */ 0x00, 0x04, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x50, 0x01, 0xFE, 0x96, 0x04, 0xFE, +/* 00013550 */ 0x96, 0x04, 0xFF, 0x6C, 0x5B, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0xA6, 0x00, +/* 00013560 */ 0x39, 0x00, 0x51, 0x00, 0x08, 0x00, 0x2B, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x03, +/* 00013570 */ 0x00, 0xFE, 0xAC, 0x07, 0x4F, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x91, 0x04, 0x74, 0xFF, 0x69, 0x56, +/* 00013580 */ 0x01, 0x00, 0xFF, 0x69, 0x56, 0x01, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0x69, 0x56, +/* 00013590 */ 0x01, 0x00, 0xFE, 0x5A, 0x01, 0xFE, 0x5A, 0x01, 0x07, 0x05, 0x0A, 0x04, 0x26, 0x24, 0x03, 0x04, +/* 000135A0 */ 0x03, 0x04, 0x04, 0x04, 0x04, 0x09, 0x05, 0xFE, 0x90, 0x04, 0x06, 0xFE, 0x31, 0x03, 0x08, 0x9F, +/* 000135B0 */ 0x58, 0x06, 0x4E, 0x07, 0x4E, 0x08, 0x8F, 0x03, 0x03, 0x0B, 0x00, 0x00, 0x6D, 0x0A, 0x0B, 0x00, +/* 000135C0 */ 0x07, 0x02, 0x00, 0x59, 0x00, 0x0B, 0x5A, 0x01, 0x06, 0x00, 0x00, 0xF4, 0x02, 0x0A, 0x0A, 0x00, +/* 000135D0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x07, 0x0A, 0x0E, 0x08, 0x00, 0x07, 0x5F, 0x0A, 0x07, 0x01, +/* 000135E0 */ 0x0F, 0x24, 0x00, 0x0A, 0x8F, 0x03, 0x03, 0x0B, 0x00, 0x00, 0x6D, 0x0A, 0x0B, 0x02, 0x07, 0x03, +/* 000135F0 */ 0x00, 0x59, 0x00, 0x0B, 0x5A, 0x01, 0x02, 0x01, 0x00, 0x5A, 0x02, 0x03, 0x01, 0x00, 0xF4, 0x03, +/* 00013600 */ 0xFF, 0x0A, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x8F, 0x03, 0x24, 0x0B, 0x01, 0x00, 0x6D, 0x0A, +/* 00013610 */ 0x0B, 0x03, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0B, 0x5A, 0x01, 0x05, 0x02, 0x00, 0xF4, 0x02, 0x0A, +/* 00013620 */ 0x0A, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x45, 0x08, 0x0A, 0x8F, 0x01, 0x03, 0x0A, 0x02, 0x00, +/* 00013630 */ 0x4A, 0x0A, 0x07, 0x03, 0x00, 0x59, 0x00, 0x04, 0x5A, 0x01, 0x07, 0x03, 0x00, 0x5A, 0x02, 0x08, +/* 00013640 */ 0x03, 0x00, 0xF0, 0x03, 0x00, 0x0A, 0x03, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, +/* 00013650 */ 0x05, 0x02, 0xFE, 0x97, 0x04, 0xFE, 0xB6, 0x02, 0xFE, 0x23, 0x03, 0xFF, 0x8E, 0x56, 0x01, 0x00, +/* 00013660 */ 0x06, 0x06, 0x00, 0x00, 0x00, 0x22, 0x00, 0x37, 0x00, 0x0C, 0x00, 0x39, 0x00, 0x24, 0x00, 0x6F, +/* 00013670 */ 0x00, 0x22, 0x00, 0x30, 0x00, 0x23, 0x00, 0x25, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, +/* 00013680 */ 0x03, 0x00, 0xFE, 0xA1, 0x07, 0x5D, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x38, 0x03, 0x73, 0xFF, 0x5C, +/* 00013690 */ 0x54, 0x01, 0x00, 0xFF, 0x5C, 0x54, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x02, 0xFF, 0x5C, +/* 000136A0 */ 0x54, 0x01, 0x00, 0xB2, 0xB2, 0x05, 0x03, 0x06, 0x08, 0x17, 0x16, 0x03, 0x02, 0x03, 0x01, 0x01, +/* 000136B0 */ 0x01, 0x01, 0x05, 0x08, 0x57, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA8, 0x06, 0x45, 0x04, 0x06, 0x8F, +/* 000136C0 */ 0x02, 0x16, 0x06, 0x00, 0x00, 0x4A, 0x06, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x8F, 0x03, 0x03, +/* 000136D0 */ 0x07, 0x01, 0x00, 0x5F, 0x07, 0x07, 0x00, 0x5A, 0x01, 0x07, 0x00, 0x00, 0x8F, 0x02, 0x12, 0x07, +/* 000136E0 */ 0x02, 0x00, 0x4A, 0x07, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x03, 0x01, 0x00, 0xF0, +/* 000136F0 */ 0x02, 0x07, 0x07, 0x01, 0x00, 0x5A, 0x02, 0x07, 0x00, 0x00, 0x5A, 0x03, 0x04, 0x00, 0x00, 0xF0, +/* 00013700 */ 0x04, 0x00, 0x06, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xF2, 0x01, 0xFF, +/* 00013710 */ 0x81, 0x54, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x23, 0x00, 0x4B, 0x00, 0x69, +/* 00013720 */ 0x00, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x83, 0x07, 0x42, 0xA2, 0x41, +/* 00013730 */ 0xC3, 0x00, 0xFE, 0x31, 0x03, 0x72, 0xFF, 0x2D, 0x50, 0x01, 0x00, 0xFF, 0x2D, 0x50, 0x01, 0x00, +/* 00013740 */ 0x01, 0xFE, 0x00, 0x90, 0x03, 0x01, 0xFF, 0x2D, 0x50, 0x01, 0x00, 0xFE, 0x0A, 0x02, 0xFE, 0x0A, +/* 00013750 */ 0x02, 0x08, 0x05, 0x0B, 0x05, 0x3A, 0x35, 0x03, 0x05, 0x05, 0x03, 0x03, 0x03, 0x03, 0x0A, 0x08, +/* 00013760 */ 0x05, 0xFE, 0x8E, 0x04, 0x06, 0xFE, 0x31, 0x03, 0xE7, 0x01, 0x5D, 0x01, 0x07, 0x4E, 0x08, 0x4E, +/* 00013770 */ 0x09, 0x15, 0x05, 0x00, 0x05, 0x02, 0xA8, 0x0B, 0x45, 0x05, 0x0B, 0x15, 0x05, 0x00, 0x06, 0x02, +/* 00013780 */ 0xA8, 0x0B, 0x45, 0x06, 0x0B, 0x4E, 0x08, 0x4E, 0x09, 0xA8, 0x0B, 0x14, 0x03, 0x00, 0x07, 0x0B, +/* 00013790 */ 0x09, 0x24, 0x00, 0x8F, 0x03, 0x03, 0x0C, 0x00, 0x00, 0x6D, 0x0B, 0x0C, 0x00, 0x07, 0x03, 0x00, +/* 000137A0 */ 0x59, 0x00, 0x0C, 0x5A, 0x01, 0x03, 0x00, 0x00, 0x5A, 0x02, 0x04, 0x00, 0x00, 0xF4, 0x03, 0xFF, +/* 000137B0 */ 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x02, 0x07, 0x0B, 0x01, 0x00, 0x4A, 0x0B, 0x07, +/* 000137C0 */ 0x03, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x07, 0x01, 0x00, 0x8F, 0x01, 0x04, 0x0C, 0x02, 0x00, +/* 000137D0 */ 0x4A, 0x0C, 0x5A, 0x02, 0x0C, 0x01, 0x00, 0xF0, 0x03, 0x0B, 0x0B, 0x01, 0x00, 0x45, 0x08, 0x0B, +/* 000137E0 */ 0x8F, 0x03, 0x36, 0x0C, 0x03, 0x00, 0x4A, 0x0C, 0x6D, 0x0B, 0x0C, 0x01, 0x07, 0x01, 0x00, 0x59, +/* 000137F0 */ 0x00, 0x0C, 0xF4, 0x01, 0x0B, 0x0B, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x45, 0x09, 0x0B, 0x8F, +/* 00013800 */ 0x03, 0x03, 0x0C, 0x00, 0x00, 0x6D, 0x0B, 0x0C, 0x02, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0C, 0x5A, +/* 00013810 */ 0x01, 0x08, 0x03, 0x00, 0x5A, 0x02, 0x09, 0x03, 0x00, 0xF4, 0x03, 0xFF, 0x0B, 0x02, 0x00, 0x00, +/* 00013820 */ 0x00, 0x03, 0x00, 0x8F, 0x01, 0x02, 0x0B, 0x04, 0x00, 0x4A, 0x0B, 0x07, 0x04, 0x00, 0x59, 0x00, +/* 00013830 */ 0x02, 0x5A, 0x01, 0x09, 0x04, 0x00, 0x5A, 0x02, 0x05, 0x04, 0x00, 0x5A, 0x03, 0x06, 0x04, 0x00, +/* 00013840 */ 0xF0, 0x04, 0xFF, 0x0B, 0x04, 0x00, 0x45, 0x00, 0x08, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, +/* 00013850 */ 0xFE, 0xB6, 0x02, 0x69, 0xFE, 0x06, 0x02, 0xFF, 0x42, 0x50, 0x01, 0x00, 0x0A, 0x08, 0x00, 0x00, +/* 00013860 */ 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0E, 0x00, 0x23, 0x00, 0x0A, 0x00, 0x30, 0x00, 0x24, 0x00, 0x5E, +/* 00013870 */ 0x00, 0x29, 0x00, 0x62, 0x00, 0x1F, 0x00, 0x2C, 0x00, 0x24, 0x00, 0x41, 0x00, 0x23, 0x00, 0x43, +/* 00013880 */ 0x00, 0x08, 0x00, 0x1C, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x78, +/* 00013890 */ 0x07, 0x1E, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x8C, 0x04, 0x71, 0xFF, 0xB9, 0x4E, 0x01, 0x00, 0xFF, +/* 000138A0 */ 0xB9, 0x4E, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFF, 0xB9, 0x4E, 0x01, 0x00, 0xB5, +/* 000138B0 */ 0xB5, 0x05, 0x03, 0x06, 0x04, 0x15, 0x14, 0x03, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x05, 0x05, +/* 000138C0 */ 0xFE, 0x98, 0x04, 0x56, 0x8F, 0x03, 0x36, 0x07, 0x00, 0x00, 0x4A, 0x07, 0x6D, 0x06, 0x07, 0x00, +/* 000138D0 */ 0x07, 0x02, 0x00, 0x59, 0x00, 0x07, 0x5A, 0x01, 0x04, 0x00, 0x00, 0xF4, 0x02, 0x06, 0x06, 0x00, +/* 000138E0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x06, 0x00, 0x06, 0x45, 0x00, 0x02, 0x09, 0x29, 0x00, 0x8F, +/* 000138F0 */ 0x03, 0x03, 0x07, 0x01, 0x00, 0x6D, 0x06, 0x07, 0x01, 0x07, 0x03, 0x00, 0x59, 0x00, 0x07, 0x5A, +/* 00013900 */ 0x01, 0x03, 0x01, 0x00, 0x5A, 0x02, 0x04, 0x01, 0x00, 0xF4, 0x03, 0x00, 0x06, 0x01, 0x00, 0x00, +/* 00013910 */ 0x00, 0x01, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xC1, 0xFE, 0x02, 0x02, 0xFF, 0xE1, +/* 00013920 */ 0x4E, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x25, 0x00, 0x26, 0x00, 0x06, 0x00, 0x2B, 0x00, +/* 00013930 */ 0x29, 0x00, 0x3B, 0x00, 0x00, 0x7F, 0x5C, 0x18, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x5B, 0x07, +/* 00013940 */ 0x26, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x8B, 0x04, 0x70, 0xFF, 0xBF, 0x49, 0x01, 0x00, 0xFF, 0xBF, +/* 00013950 */ 0x49, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x04, 0x04, 0xFF, 0xBF, 0x49, 0x01, 0x00, 0xFE, 0xAF, +/* 00013960 */ 0x03, 0xFE, 0xAF, 0x03, 0x0A, 0x0D, 0x14, 0x07, 0x67, 0x5F, 0x03, 0x09, 0x03, 0x07, 0x0B, 0x0B, +/* 00013970 */ 0x0B, 0x0B, 0x13, 0x08, 0x06, 0xFE, 0xE0, 0x03, 0x06, 0xFE, 0xA3, 0x03, 0x05, 0xFE, 0x9C, 0x03, +/* 00013980 */ 0x05, 0xFE, 0xDF, 0x03, 0x06, 0xFE, 0x93, 0x04, 0x05, 0xFE, 0x94, 0x04, 0x05, 0xFE, 0x95, 0x04, +/* 00013990 */ 0x01, 0x00, 0x01, 0x03, 0x0B, 0xFE, 0xAF, 0x01, 0x4E, 0x10, 0x4E, 0x11, 0x4E, 0x12, 0x8F, 0x02, +/* 000139A0 */ 0x12, 0x14, 0x00, 0x00, 0x4A, 0x14, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x0E, 0x00, +/* 000139B0 */ 0x00, 0xF0, 0x02, 0x14, 0x14, 0x00, 0x00, 0x45, 0x10, 0x14, 0xA8, 0x14, 0x14, 0x03, 0x00, 0x0F, +/* 000139C0 */ 0x14, 0x09, 0x22, 0x00, 0x8F, 0x03, 0x36, 0x16, 0x01, 0x00, 0x4A, 0x16, 0x6D, 0x15, 0x16, 0x00, +/* 000139D0 */ 0x07, 0x01, 0x00, 0x59, 0x00, 0x16, 0xF4, 0x01, 0x15, 0x15, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, +/* 000139E0 */ 0x45, 0x14, 0x15, 0x09, 0x22, 0x00, 0x8F, 0x03, 0x24, 0x16, 0x02, 0x00, 0x6D, 0x15, 0x16, 0x01, +/* 000139F0 */ 0x07, 0x02, 0x00, 0x59, 0x00, 0x16, 0x5A, 0x01, 0x0F, 0x02, 0x00, 0xF4, 0x02, 0x15, 0x15, 0x01, +/* 00013A00 */ 0x00, 0x00, 0x00, 0x02, 0x00, 0x46, 0x14, 0x15, 0x45, 0x0F, 0x14, 0x8F, 0x03, 0x36, 0x15, 0x01, +/* 00013A10 */ 0x00, 0x4A, 0x15, 0x6D, 0x14, 0x15, 0x02, 0x07, 0x01, 0x00, 0x59, 0x00, 0x15, 0xF4, 0x01, 0x14, +/* 00013A20 */ 0x14, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x45, 0x11, 0x14, 0x45, 0x14, 0x11, 0x8F, 0x02, 0x02, +/* 00013A30 */ 0x15, 0x03, 0x00, 0x4A, 0x15, 0x07, 0x06, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x0F, 0x04, 0x00, +/* 00013A40 */ 0x5A, 0x02, 0x03, 0x04, 0x00, 0x5A, 0x03, 0x04, 0x04, 0x00, 0xD0, 0x16, 0x02, 0x00, 0x00, 0xA1, +/* 00013A50 */ 0x00, 0x05, 0x16, 0xA1, 0x01, 0x06, 0x16, 0x5A, 0x04, 0x16, 0x04, 0x00, 0x5A, 0x05, 0x06, 0x04, +/* 00013A60 */ 0x00, 0xF0, 0x06, 0x15, 0x15, 0x04, 0x00, 0x77, 0x15, 0x14, 0x03, 0x45, 0x14, 0x0D, 0x8F, 0x02, +/* 00013A70 */ 0x02, 0x15, 0x03, 0x00, 0x4A, 0x15, 0x07, 0x06, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x0F, 0x05, +/* 00013A80 */ 0x00, 0x5A, 0x02, 0x07, 0x05, 0x00, 0x5A, 0x03, 0x04, 0x05, 0x00, 0xD0, 0x16, 0x02, 0x01, 0x00, +/* 00013A90 */ 0xA1, 0x00, 0x08, 0x16, 0xA1, 0x01, 0x09, 0x16, 0x5A, 0x04, 0x16, 0x05, 0x00, 0x5A, 0x05, 0x08, +/* 00013AA0 */ 0x05, 0x00, 0xF0, 0x06, 0x15, 0x15, 0x05, 0x00, 0x77, 0x15, 0x14, 0x04, 0x8F, 0x02, 0x15, 0x14, +/* 00013AB0 */ 0x04, 0x00, 0x4A, 0x14, 0x07, 0x05, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x0D, 0x06, 0x00, 0x5A, +/* 00013AC0 */ 0x02, 0x0F, 0x06, 0x00, 0x5A, 0x03, 0x0A, 0x06, 0x00, 0x5A, 0x04, 0x0B, 0x06, 0x00, 0xF0, 0x05, +/* 00013AD0 */ 0xFF, 0x14, 0x06, 0x00, 0x8F, 0x02, 0x0C, 0x14, 0x05, 0x00, 0x4A, 0x14, 0x07, 0x05, 0x00, 0x59, +/* 00013AE0 */ 0x00, 0x02, 0x8F, 0x03, 0x03, 0x15, 0x06, 0x00, 0x5F, 0x15, 0x15, 0x05, 0x5A, 0x01, 0x15, 0x07, +/* 00013AF0 */ 0x00, 0x5A, 0x02, 0x10, 0x07, 0x00, 0x5A, 0x03, 0x11, 0x07, 0x00, 0xD0, 0x15, 0x00, 0x02, 0x00, +/* 00013B00 */ 0x5A, 0x04, 0x15, 0x07, 0x00, 0xF0, 0x05, 0x14, 0x14, 0x07, 0x00, 0x45, 0x12, 0x14, 0x5F, 0x14, +/* 00013B10 */ 0x12, 0x06, 0x77, 0x14, 0x0D, 0x07, 0x8F, 0x03, 0x03, 0x15, 0x06, 0x00, 0x6D, 0x14, 0x15, 0x08, +/* 00013B20 */ 0x07, 0x02, 0x00, 0x59, 0x00, 0x15, 0x5A, 0x01, 0x0D, 0x08, 0x00, 0xF4, 0x02, 0x14, 0x14, 0x08, +/* 00013B30 */ 0x00, 0x00, 0x00, 0x08, 0x00, 0x77, 0x14, 0x0D, 0x09, 0x77, 0x0C, 0x0D, 0x0A, 0x45, 0x00, 0x0D, +/* 00013B40 */ 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x69, 0xFE, 0x21, 0x03, 0x69, 0xFE, 0x04, 0x04, 0xF6, +/* 00013B50 */ 0xFE, 0xF2, 0x01, 0xFE, 0x0D, 0x02, 0xFE, 0x0D, 0x02, 0xFE, 0x03, 0x02, 0xFE, 0x96, 0x04, 0xFE, +/* 00013B60 */ 0x97, 0x04, 0xFF, 0xF6, 0x49, 0x01, 0x00, 0x0C, 0x06, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x46, 0x00, +/* 00013B70 */ 0x51, 0x00, 0x57, 0x00, 0x1F, 0x00, 0x24, 0x00, 0x41, 0x00, 0x6D, 0x00, 0x41, 0x00, 0x6B, 0x00, +/* 00013B80 */ 0x28, 0x00, 0xA9, 0x00, 0x3A, 0x00, 0x5F, 0x00, 0x08, 0x00, 0x2B, 0x00, 0x23, 0x00, 0x57, 0x00, +/* 00013B90 */ 0x04, 0x00, 0x38, 0x00, 0x08, 0x00, 0x1C, 0x00, 0x00, 0x7E, 0x5D, 0x18, 0xC1, 0x13, 0x1A, 0x4B, +/* 00013BA0 */ 0x00, 0xFE, 0xFA, 0x04, 0x1A, 0xA0, 0x41, 0xD1, 0x00, 0x54, 0xFE, 0xE4, 0xD9, 0xFE, 0xE4, 0xD9, +/* 00013BB0 */ 0x0F, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFE, 0xE4, 0xD9, 0xFE, 0x3F, 0x6E, 0xFE, 0x3F, 0x6E, 0x0A, +/* 00013BC0 */ 0xFE, 0x26, 0x04, 0xFE, 0x27, 0x04, 0xFE, 0x28, 0x04, 0xFE, 0x29, 0x04, 0xFE, 0x2A, 0x04, 0xFE, +/* 00013BD0 */ 0x2B, 0x04, 0xFE, 0x2C, 0x04, 0xFE, 0x56, 0x02, 0xFE, 0x2D, 0x04, 0xFE, 0x0B, 0x02, 0x11, 0x35, +/* 00013BE0 */ 0x41, 0x09, 0xFE, 0x54, 0x01, 0xFE, 0x4C, 0x01, 0x02, 0x14, 0x0D, 0x08, 0x30, 0x30, 0x30, 0x30, +/* 00013BF0 */ 0x08, 0x3E, 0x3F, 0x40, 0x06, 0xFE, 0x27, 0x03, 0x06, 0xFE, 0x2E, 0x04, 0x06, 0xFE, 0x2F, 0x04, +/* 00013C00 */ 0x06, 0xFE, 0x30, 0x04, 0x06, 0xFE, 0x31, 0x04, 0x06, 0xFE, 0x32, 0x04, 0x06, 0xFE, 0xF8, 0x03, +/* 00013C10 */ 0x06, 0xFE, 0x33, 0x04, 0x06, 0xFE, 0x34, 0x04, 0x06, 0xFE, 0x35, 0x04, 0x06, 0xFE, 0x36, 0x04, +/* 00013C20 */ 0x06, 0xFE, 0x37, 0x04, 0x06, 0xFE, 0x38, 0x04, 0x06, 0xFE, 0x39, 0x04, 0x06, 0xFE, 0x3A, 0x04, +/* 00013C30 */ 0x06, 0xFE, 0x3B, 0x04, 0x01, 0x01, 0x08, 0x06, 0xFE, 0x21, 0x04, 0x01, 0x00, 0x06, 0xFE, 0x3C, +/* 00013C40 */ 0x04, 0x06, 0xFE, 0x3D, 0x04, 0x01, 0x02, 0x07, 0x05, 0xFE, 0x3E, 0x04, 0x06, 0xFE, 0x3F, 0x04, +/* 00013C50 */ 0x06, 0xFE, 0x40, 0x04, 0x05, 0xFE, 0x41, 0x04, 0x06, 0xFE, 0x42, 0x04, 0x05, 0xFE, 0x43, 0x04, +/* 00013C60 */ 0x05, 0xFE, 0x44, 0x04, 0x05, 0xFE, 0x45, 0x04, 0x05, 0xFE, 0x46, 0x04, 0x05, 0xFE, 0x47, 0x04, +/* 00013C70 */ 0x06, 0xFE, 0xEC, 0x03, 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, 0x2B, 0x03, 0x0C, 0x06, 0xFE, 0x2C, +/* 00013C80 */ 0x03, 0x06, 0xFE, 0x2D, 0x03, 0x06, 0xFE, 0xED, 0x03, 0x0B, 0x05, 0xFE, 0x14, 0x04, 0x06, 0xFE, +/* 00013C90 */ 0x37, 0x03, 0x06, 0xFE, 0x15, 0x04, 0x06, 0xFE, 0x77, 0x03, 0x06, 0xFE, 0x16, 0x04, 0x06, 0xFE, +/* 00013CA0 */ 0xEE, 0x03, 0x05, 0xFE, 0x48, 0x04, 0x05, 0xFE, 0x36, 0x03, 0x06, 0xFE, 0x38, 0x03, 0xFE, 0xB2, +/* 00013CB0 */ 0x05, 0xD6, 0x04, 0x35, 0x96, 0x02, 0x35, 0x4E, 0x36, 0x4E, 0x37, 0x4E, 0x38, 0x4E, 0x39, 0x4E, +/* 00013CC0 */ 0x3A, 0x4E, 0x3B, 0x4E, 0x3C, 0x4E, 0x3D, 0x4E, 0x41, 0x96, 0x03, 0x41, 0x4E, 0x41, 0x96, 0x04, +/* 00013CD0 */ 0x41, 0x4E, 0x41, 0x96, 0x05, 0x41, 0x4E, 0x41, 0x96, 0x06, 0x41, 0x4E, 0x41, 0x96, 0x07, 0x41, +/* 00013CE0 */ 0x4E, 0x41, 0x96, 0x08, 0x41, 0x4E, 0x41, 0x96, 0x09, 0x41, 0x4E, 0x41, 0x96, 0x0A, 0x41, 0x4E, +/* 00013CF0 */ 0x41, 0x96, 0x0B, 0x41, 0x8F, 0x02, 0x32, 0x41, 0x00, 0x00, 0x15, 0x03, 0x00, 0x41, 0x02, 0x09, +/* 00013D00 */ 0x13, 0x00, 0x8F, 0x02, 0x32, 0x41, 0x00, 0x00, 0x15, 0x03, 0x00, 0x41, 0x03, 0x09, 0x05, 0x00, +/* 00013D10 */ 0xA8, 0x00, 0x09, 0x4C, 0x05, 0xD0, 0x41, 0x03, 0x00, 0x00, 0xA1, 0x00, 0x04, 0x41, 0xA1, 0x01, +/* 00013D20 */ 0x05, 0x41, 0xA1, 0x02, 0x06, 0x41, 0x45, 0x36, 0x41, 0xD0, 0x41, 0x02, 0x01, 0x00, 0xA1, 0x00, +/* 00013D30 */ 0x07, 0x41, 0xA1, 0x01, 0x08, 0x41, 0x45, 0x37, 0x41, 0x8F, 0x02, 0x36, 0x42, 0x01, 0x00, 0x4A, +/* 00013D40 */ 0x42, 0x6D, 0x41, 0x42, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x42, 0x5A, 0x01, 0x37, 0x00, 0x00, +/* 00013D50 */ 0x5A, 0x02, 0x36, 0x00, 0x00, 0xF4, 0x03, 0x41, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, +/* 00013D60 */ 0x38, 0x41, 0xD0, 0x41, 0x09, 0x02, 0x00, 0xD0, 0x42, 0x02, 0x03, 0x00, 0xA1, 0x00, 0x09, 0x42, +/* 00013D70 */ 0xA1, 0x01, 0x36, 0x42, 0xA1, 0x00, 0x42, 0x41, 0xD0, 0x42, 0x02, 0x04, 0x00, 0xA1, 0x00, 0x0A, +/* 00013D80 */ 0x42, 0xA1, 0x01, 0x36, 0x42, 0xA1, 0x01, 0x42, 0x41, 0xD0, 0x42, 0x02, 0x05, 0x00, 0xA1, 0x00, +/* 00013D90 */ 0x0B, 0x42, 0xA1, 0x01, 0x37, 0x42, 0xA1, 0x02, 0x42, 0x41, 0xD0, 0x42, 0x02, 0x06, 0x00, 0xA1, +/* 00013DA0 */ 0x00, 0x0C, 0x42, 0xA1, 0x01, 0x38, 0x42, 0xA1, 0x03, 0x42, 0x41, 0xD0, 0x42, 0x02, 0x07, 0x00, +/* 00013DB0 */ 0xA1, 0x00, 0x0D, 0x42, 0xA1, 0x01, 0x37, 0x42, 0xA1, 0x04, 0x42, 0x41, 0xD0, 0x42, 0x02, 0x08, +/* 00013DC0 */ 0x00, 0xA1, 0x00, 0x0E, 0x42, 0xA1, 0x01, 0x37, 0x42, 0xA1, 0x05, 0x42, 0x41, 0xD0, 0x42, 0x02, +/* 00013DD0 */ 0x09, 0x00, 0xA1, 0x00, 0x0F, 0x42, 0xA1, 0x01, 0x37, 0x42, 0xA1, 0x06, 0x42, 0x41, 0xD0, 0x42, +/* 00013DE0 */ 0x02, 0x0A, 0x00, 0xA1, 0x00, 0x10, 0x42, 0xA1, 0x01, 0x37, 0x42, 0xA1, 0x07, 0x42, 0x41, 0xD0, +/* 00013DF0 */ 0x42, 0x02, 0x0B, 0x00, 0xA1, 0x00, 0x11, 0x42, 0x8F, 0x02, 0x36, 0x44, 0x01, 0x00, 0x4A, 0x44, +/* 00013E00 */ 0x6D, 0x43, 0x44, 0x01, 0x07, 0x03, 0x00, 0x59, 0x00, 0x44, 0x5A, 0x01, 0x36, 0x01, 0x00, 0x5A, +/* 00013E10 */ 0x02, 0x12, 0x01, 0x00, 0xF4, 0x03, 0x43, 0x43, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0xA1, 0x01, +/* 00013E20 */ 0x43, 0x42, 0xA1, 0x08, 0x42, 0x41, 0x96, 0x03, 0x41, 0xD6, 0x00, 0x41, 0x07, 0x01, 0x00, 0x59, +/* 00013E30 */ 0x00, 0x13, 0xF0, 0x01, 0x41, 0x41, 0x02, 0x00, 0x96, 0x04, 0x41, 0xD6, 0x01, 0x41, 0x96, 0x05, +/* 00013E40 */ 0x41, 0xD6, 0x02, 0x41, 0x96, 0x06, 0x41, 0xD6, 0x03, 0x41, 0x45, 0x39, 0x41, 0xD0, 0x41, 0x03, +/* 00013E50 */ 0x0C, 0x00, 0xA8, 0x42, 0xA1, 0x00, 0x42, 0x41, 0xA8, 0x42, 0xA1, 0x01, 0x42, 0x41, 0xA8, 0x42, +/* 00013E60 */ 0xA1, 0x02, 0x42, 0x41, 0x96, 0x07, 0x41, 0x8F, 0x02, 0x35, 0x41, 0x02, 0x00, 0x4A, 0x41, 0x07, +/* 00013E70 */ 0x02, 0x00, 0x59, 0x00, 0x13, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, +/* 00013E80 */ 0x00, 0x00, 0x7B, 0x15, 0x42, 0x02, 0x7B, 0x12, 0x42, 0x03, 0x7B, 0x18, 0x42, 0x04, 0x5A, 0x01, +/* 00013E90 */ 0x42, 0x03, 0x00, 0xF0, 0x02, 0x41, 0x41, 0x03, 0x00, 0x45, 0x3A, 0x41, 0xD6, 0x05, 0x41, 0x07, +/* 00013EA0 */ 0x06, 0x00, 0x59, 0x00, 0x13, 0x5A, 0x01, 0x1A, 0x04, 0x00, 0x5A, 0x02, 0x1B, 0x04, 0x00, 0x5A, +/* 00013EB0 */ 0x03, 0x1C, 0x04, 0x00, 0x5F, 0x42, 0x3A, 0x05, 0x5A, 0x04, 0x42, 0x04, 0x00, 0x8F, 0x02, 0x03, +/* 00013EC0 */ 0x42, 0x03, 0x00, 0x5F, 0x42, 0x42, 0x06, 0x5F, 0x42, 0x42, 0x07, 0x5A, 0x05, 0x42, 0x04, 0x00, +/* 00013ED0 */ 0xF0, 0x06, 0xFF, 0x41, 0x04, 0x00, 0xD6, 0x06, 0x41, 0x07, 0x06, 0x00, 0x59, 0x00, 0x13, 0x5A, +/* 00013EE0 */ 0x01, 0x1D, 0x05, 0x00, 0x5A, 0x02, 0x1E, 0x05, 0x00, 0x5A, 0x03, 0x1E, 0x05, 0x00, 0x5F, 0x42, +/* 00013EF0 */ 0x3A, 0x08, 0x5A, 0x04, 0x42, 0x05, 0x00, 0x8F, 0x02, 0x03, 0x42, 0x03, 0x00, 0x5F, 0x42, 0x42, +/* 00013F00 */ 0x09, 0x5F, 0x42, 0x42, 0x0A, 0x5A, 0x05, 0x42, 0x05, 0x00, 0xF0, 0x06, 0xFF, 0x41, 0x05, 0x00, +/* 00013F10 */ 0xD6, 0x07, 0x41, 0x07, 0x06, 0x00, 0x59, 0x00, 0x13, 0x5A, 0x01, 0x1F, 0x06, 0x00, 0x5A, 0x02, +/* 00013F20 */ 0x20, 0x06, 0x00, 0x5A, 0x03, 0x20, 0x06, 0x00, 0x5F, 0x42, 0x3A, 0x0B, 0x5A, 0x04, 0x42, 0x06, +/* 00013F30 */ 0x00, 0x8F, 0x02, 0x03, 0x42, 0x03, 0x00, 0x5F, 0x42, 0x42, 0x0C, 0x5F, 0x42, 0x42, 0x0D, 0x5A, +/* 00013F40 */ 0x05, 0x42, 0x06, 0x00, 0xF0, 0x06, 0xFF, 0x41, 0x06, 0x00, 0x8F, 0x02, 0x32, 0x41, 0x00, 0x00, +/* 00013F50 */ 0x15, 0x03, 0x00, 0x41, 0x02, 0x09, 0x05, 0x00, 0xA8, 0x00, 0x09, 0x04, 0x03, 0xCD, 0x41, 0x96, +/* 00013F60 */ 0x08, 0x41, 0x8F, 0x02, 0x23, 0x41, 0x04, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x13, 0x5A, 0x01, +/* 00013F70 */ 0x21, 0x07, 0x00, 0xD6, 0x08, 0x42, 0x5A, 0x02, 0x42, 0x07, 0x00, 0xF0, 0x03, 0x41, 0x41, 0x07, +/* 00013F80 */ 0x00, 0x96, 0x09, 0x41, 0xD6, 0x09, 0x41, 0x96, 0x0A, 0x41, 0x8F, 0x01, 0x06, 0x41, 0x05, 0x00, +/* 00013F90 */ 0x4A, 0x41, 0x07, 0x03, 0x00, 0x59, 0x00, 0x13, 0x5A, 0x01, 0x22, 0x08, 0x00, 0xD6, 0x0A, 0x42, +/* 00013FA0 */ 0x5A, 0x02, 0x42, 0x08, 0x00, 0xF0, 0x03, 0x41, 0x41, 0x08, 0x00, 0x96, 0x0B, 0x41, 0x8F, 0x01, +/* 00013FB0 */ 0x06, 0x41, 0x05, 0x00, 0x4A, 0x41, 0x07, 0x03, 0x00, 0x59, 0x00, 0x13, 0x5A, 0x01, 0x23, 0x09, +/* 00013FC0 */ 0x00, 0xD6, 0x0B, 0x42, 0x5A, 0x02, 0x42, 0x09, 0x00, 0xF0, 0x03, 0x41, 0x41, 0x09, 0x00, 0x45, +/* 00013FD0 */ 0x3B, 0x41, 0x8F, 0x02, 0x36, 0x42, 0x01, 0x00, 0x4A, 0x42, 0x6D, 0x41, 0x42, 0x0E, 0x07, 0x04, +/* 00013FE0 */ 0x00, 0x59, 0x00, 0x42, 0x93, 0x09, 0x43, 0x06, 0x00, 0x5A, 0x01, 0x43, 0x0A, 0x00, 0x5A, 0x02, +/* 00013FF0 */ 0x24, 0x0A, 0x00, 0xCE, 0x14, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, +/* 00014000 */ 0x93, 0x08, 0x44, 0x07, 0x00, 0x7B, 0x44, 0x43, 0x0F, 0x7B, 0x27, 0x43, 0x10, 0x7B, 0x27, 0x43, +/* 00014010 */ 0x11, 0x7B, 0x27, 0x43, 0x12, 0x5A, 0x03, 0x43, 0x0A, 0x00, 0xF4, 0x04, 0xFF, 0x41, 0x0E, 0x00, +/* 00014020 */ 0x00, 0x00, 0x0A, 0x00, 0x8F, 0x02, 0x36, 0x42, 0x01, 0x00, 0x4A, 0x42, 0x6D, 0x41, 0x42, 0x13, +/* 00014030 */ 0x07, 0x04, 0x00, 0x59, 0x00, 0x42, 0x93, 0x08, 0x43, 0x07, 0x00, 0x5A, 0x01, 0x43, 0x0B, 0x00, +/* 00014040 */ 0x5A, 0x02, 0x2A, 0x0B, 0x00, 0xCE, 0x2C, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x43, 0x00, +/* 00014050 */ 0x00, 0x00, 0x93, 0x09, 0x44, 0x06, 0x00, 0x7B, 0x44, 0x43, 0x14, 0x7B, 0x2B, 0x43, 0x15, 0x7B, +/* 00014060 */ 0x27, 0x43, 0x16, 0x7B, 0x2B, 0x43, 0x17, 0x5A, 0x03, 0x43, 0x0B, 0x00, 0xF4, 0x04, 0xFF, 0x41, +/* 00014070 */ 0x13, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x8F, 0x01, 0x06, 0x41, 0x05, 0x00, 0x4A, 0x41, 0x07, 0x03, +/* 00014080 */ 0x00, 0x59, 0x00, 0x13, 0x5A, 0x01, 0x2C, 0x0C, 0x00, 0xD6, 0x0C, 0x42, 0x5A, 0x02, 0x42, 0x0C, +/* 00014090 */ 0x00, 0xF0, 0x03, 0x41, 0x41, 0x0C, 0x00, 0x45, 0x3C, 0x41, 0x8F, 0x02, 0x36, 0x42, 0x01, 0x00, +/* 000140A0 */ 0x4A, 0x42, 0x6D, 0x41, 0x42, 0x18, 0x07, 0x04, 0x00, 0x59, 0x00, 0x42, 0x5A, 0x01, 0x3C, 0x0D, +/* 000140B0 */ 0x00, 0x5A, 0x02, 0x2D, 0x0D, 0x00, 0xCE, 0x44, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x43, +/* 000140C0 */ 0x00, 0x00, 0x00, 0x7B, 0x2C, 0x43, 0x19, 0x7B, 0x27, 0x43, 0x1A, 0x7B, 0x27, 0x43, 0x1B, 0x7B, +/* 000140D0 */ 0x2B, 0x43, 0x1C, 0x5A, 0x03, 0x43, 0x0D, 0x00, 0xF4, 0x04, 0xFF, 0x41, 0x18, 0x00, 0x00, 0x00, +/* 000140E0 */ 0x0D, 0x00, 0x8F, 0x02, 0x36, 0x42, 0x01, 0x00, 0x4A, 0x42, 0x6D, 0x41, 0x42, 0x1D, 0x07, 0x04, +/* 000140F0 */ 0x00, 0x59, 0x00, 0x42, 0x93, 0x08, 0x43, 0x07, 0x00, 0x5A, 0x01, 0x43, 0x0E, 0x00, 0x5A, 0x02, +/* 00014100 */ 0x2E, 0x0E, 0x00, 0xCE, 0x5C, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, +/* 00014110 */ 0x7B, 0x3C, 0x43, 0x1E, 0x7B, 0x27, 0x43, 0x1F, 0x7B, 0x2B, 0x43, 0x20, 0x5A, 0x03, 0x43, 0x0E, +/* 00014120 */ 0x00, 0xF4, 0x04, 0xFF, 0x41, 0x1D, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x8F, 0x02, 0x36, 0x42, 0x01, +/* 00014130 */ 0x00, 0x4A, 0x42, 0x6D, 0x41, 0x42, 0x21, 0x07, 0x04, 0x00, 0x59, 0x00, 0x42, 0x93, 0x08, 0x43, +/* 00014140 */ 0x07, 0x00, 0x5A, 0x01, 0x43, 0x0F, 0x00, 0x5A, 0x02, 0x30, 0x0F, 0x00, 0xCE, 0x70, 0x00, 0x00, +/* 00014150 */ 0x00, 0x05, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x7B, 0x3B, 0x43, 0x22, 0x7B, 0x27, 0x43, +/* 00014160 */ 0x23, 0x7B, 0x2B, 0x43, 0x24, 0x7B, 0x2B, 0x43, 0x25, 0x5A, 0x03, 0x43, 0x0F, 0x00, 0xF4, 0x04, +/* 00014170 */ 0xFF, 0x41, 0x21, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x8F, 0x02, 0x36, 0x42, 0x01, 0x00, 0x4A, 0x42, +/* 00014180 */ 0x6D, 0x41, 0x42, 0x26, 0x07, 0x04, 0x00, 0x59, 0x00, 0x42, 0x93, 0x08, 0x43, 0x07, 0x00, 0x5A, +/* 00014190 */ 0x01, 0x43, 0x10, 0x00, 0x5A, 0x02, 0x31, 0x10, 0x00, 0xCE, 0x88, 0x00, 0x00, 0x00, 0x06, 0x00, +/* 000141A0 */ 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x8F, 0x01, 0x06, 0x44, 0x05, 0x00, 0x4A, 0x44, 0x07, 0x03, +/* 000141B0 */ 0x00, 0x59, 0x00, 0x13, 0x5A, 0x01, 0x32, 0x11, 0x00, 0xD6, 0x0D, 0x45, 0x5A, 0x02, 0x45, 0x11, +/* 000141C0 */ 0x00, 0xF0, 0x03, 0x44, 0x44, 0x11, 0x00, 0x7B, 0x44, 0x43, 0x27, 0x7B, 0x2B, 0x43, 0x28, 0x7B, +/* 000141D0 */ 0x27, 0x43, 0x29, 0x7B, 0x2B, 0x43, 0x2A, 0x5A, 0x03, 0x43, 0x10, 0x00, 0xF4, 0x04, 0xFF, 0x41, +/* 000141E0 */ 0x26, 0x00, 0x00, 0x00, 0x10, 0x00, 0x8F, 0x01, 0x06, 0x41, 0x05, 0x00, 0x4A, 0x41, 0x07, 0x03, +/* 000141F0 */ 0x00, 0x59, 0x00, 0x13, 0x5A, 0x01, 0x33, 0x12, 0x00, 0xD6, 0x0E, 0x42, 0x5A, 0x02, 0x42, 0x12, +/* 00014200 */ 0x00, 0xF0, 0x03, 0x41, 0x41, 0x12, 0x00, 0x45, 0x3D, 0x41, 0x8F, 0x02, 0x36, 0x42, 0x01, 0x00, +/* 00014210 */ 0x4A, 0x42, 0x6D, 0x41, 0x42, 0x2B, 0x07, 0x04, 0x00, 0x59, 0x00, 0x42, 0x93, 0x09, 0x43, 0x06, +/* 00014220 */ 0x00, 0x5A, 0x01, 0x43, 0x13, 0x00, 0x5A, 0x02, 0x34, 0x13, 0x00, 0xCE, 0xA0, 0x00, 0x00, 0x00, +/* 00014230 */ 0x07, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x7B, 0x3D, 0x43, 0x2C, 0x7B, 0x2B, 0x43, 0x2D, +/* 00014240 */ 0x7B, 0x27, 0x43, 0x2E, 0x7B, 0x2B, 0x43, 0x2F, 0x5A, 0x03, 0x43, 0x13, 0x00, 0xF4, 0x04, 0xFF, +/* 00014250 */ 0x41, 0x2B, 0x00, 0x00, 0x00, 0x13, 0x00, 0x93, 0x09, 0x00, 0x06, 0x00, 0x09, 0x02, 0x00, 0xA8, +/* 00014260 */ 0x00, 0x24, 0x00, 0x08, 0xB8, 0x00, 0xA0, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, +/* 00014270 */ 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, +/* 00014280 */ 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, +/* 00014290 */ 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x70, 0x00, +/* 000142A0 */ 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x94, 0x01, +/* 000142B0 */ 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x5C, 0x00, 0x00, 0x00, 0x03, 0x03, +/* 000142C0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, +/* 000142D0 */ 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, +/* 000142E0 */ 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x2C, 0x00, +/* 000142F0 */ 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, +/* 00014300 */ 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x03, 0x04, +/* 00014310 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, +/* 00014320 */ 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, +/* 00014330 */ 0x00, 0x00, 0x72, 0x01, 0x00, 0x00, 0x70, 0x01, 0x00, 0x00, 0x73, 0x01, 0x00, 0x00, 0x65, 0xFE, +/* 00014340 */ 0x50, 0x01, 0xFE, 0x72, 0x01, 0xFE, 0x70, 0x01, 0xFE, 0x73, 0x01, 0xFE, 0x72, 0x01, 0xFE, 0x2F, +/* 00014350 */ 0x02, 0xFE, 0x2A, 0x02, 0xFE, 0x70, 0x01, 0xFE, 0x2F, 0x02, 0xFE, 0x2B, 0x02, 0xFE, 0x73, 0x01, +/* 00014360 */ 0xFE, 0x2F, 0x02, 0xFE, 0x2C, 0x02, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, +/* 00014370 */ 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, +/* 00014380 */ 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, +/* 00014390 */ 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x98, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, +/* 000143A0 */ 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x9C, +/* 000143B0 */ 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, +/* 000143C0 */ 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0xFA, 0xD9, 0x21, +/* 000143D0 */ 0x43, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x3E, 0x00, 0x05, 0x00, 0x1B, 0x00, 0x14, 0x00, 0x3D, 0x00, +/* 000143E0 */ 0x10, 0x00, 0x38, 0x00, 0x29, 0x00, 0x4C, 0x00, 0xC7, 0x00, 0xA3, 0x03, 0x12, 0x00, 0x44, 0x20, +/* 000143F0 */ 0x06, 0x00, 0x52, 0x0C, 0x06, 0x00, 0x25, 0x07, 0x06, 0x00, 0x78, 0x01, 0x1A, 0x00, 0x5C, 0x00, +/* 00014400 */ 0x35, 0x00, 0xBD, 0x0E, 0x3A, 0x00, 0x34, 0x02, 0x3A, 0x00, 0x46, 0x02, 0x3A, 0x00, 0xA0, 0x02, +/* 00014410 */ 0x0E, 0x00, 0x27, 0x00, 0x05, 0x00, 0x1B, 0x00, 0x05, 0x00, 0x07, 0x01, 0x22, 0x00, 0x29, 0x04, +/* 00014420 */ 0x06, 0x00, 0x3C, 0x03, 0x24, 0x00, 0xDD, 0x02, 0x24, 0x00, 0x05, 0x04, 0x52, 0x00, 0xCD, 0x00, +/* 00014430 */ 0x52, 0x00, 0x4B, 0x01, 0x24, 0x00, 0x28, 0x02, 0x48, 0x00, 0xB7, 0x00, 0x49, 0x00, 0xA5, 0x00, +/* 00014440 */ 0x4D, 0x00, 0xCE, 0x00, 0x6E, 0x00, 0x0A, 0x06, 0x24, 0x00, 0x16, 0x01, 0x4D, 0x00, 0xD0, 0x00, +/* 00014450 */ 0x0A, 0x00, 0x1B, 0x00, 0x00, 0xE2, 0x61, 0x01, 0x00, 0xA9, 0x5D, 0x01, 0x00, 0x83, 0x58, 0x01, +/* 00014460 */ 0x00, 0x8F, 0x57, 0x01, 0x00, 0x97, 0x54, 0x01, 0x00, 0x14, 0x53, 0x01, 0x00, 0x91, 0x51, 0x01, +/* 00014470 */ 0x00, 0x0E, 0x50, 0x01, 0x00, 0xD4, 0x4D, 0x01, 0x00, 0x69, 0x4C, 0x01, 0x00, 0xBF, 0x4A, 0x01, +/* 00014480 */ 0x00, 0xA8, 0x48, 0x01, 0x00, 0x83, 0x47, 0x01, 0x00, 0x39, 0x45, 0x01, 0x00, 0x91, 0x44, 0x01, +/* 00014490 */ 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x40, 0x07, 0x60, 0xA2, 0x41, 0xC3, +/* 000144A0 */ 0x00, 0xFE, 0x38, 0x03, 0x6E, 0xFF, 0x79, 0x46, 0x01, 0x00, 0xFF, 0x79, 0x46, 0x01, 0x00, 0x01, +/* 000144B0 */ 0xFE, 0x00, 0x90, 0x03, 0x02, 0xFF, 0x79, 0x46, 0x01, 0x00, 0xB3, 0xB3, 0x05, 0x03, 0x06, 0x08, +/* 000144C0 */ 0x17, 0x16, 0x03, 0x02, 0x03, 0x01, 0x01, 0x01, 0x01, 0x05, 0x08, 0x57, 0x15, 0x05, 0x00, 0x04, +/* 000144D0 */ 0x02, 0xA8, 0x06, 0x45, 0x04, 0x06, 0x8F, 0x02, 0x16, 0x06, 0x00, 0x00, 0x4A, 0x06, 0x07, 0x04, +/* 000144E0 */ 0x00, 0x59, 0x00, 0x02, 0x8F, 0x03, 0x03, 0x07, 0x01, 0x00, 0x5F, 0x07, 0x07, 0x00, 0x5A, 0x01, +/* 000144F0 */ 0x07, 0x00, 0x00, 0x8F, 0x02, 0x12, 0x07, 0x02, 0x00, 0x4A, 0x07, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 00014500 */ 0x02, 0x5A, 0x01, 0x03, 0x01, 0x00, 0xF0, 0x02, 0x07, 0x07, 0x01, 0x00, 0x5A, 0x02, 0x07, 0x00, +/* 00014510 */ 0x00, 0x5A, 0x03, 0x04, 0x00, 0x00, 0xF0, 0x04, 0x00, 0x06, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, +/* 00014520 */ 0x00, 0x24, 0x00, 0xFE, 0xEF, 0x01, 0xFF, 0x9E, 0x46, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, +/* 00014530 */ 0x0A, 0x00, 0x23, 0x00, 0x4B, 0x00, 0x6A, 0x00, 0x00, 0x7F, 0x5D, 0x18, 0xC1, 0x03, 0x1A, 0x0B, +/* 00014540 */ 0x00, 0xFE, 0x18, 0x07, 0x57, 0xA0, 0x41, 0xC3, 0x00, 0xFE, 0xEE, 0x03, 0x6C, 0xFF, 0xAD, 0x40, +/* 00014550 */ 0x01, 0x00, 0xFF, 0xAD, 0x40, 0x01, 0x00, 0x01, 0x08, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFF, 0xAD, +/* 00014560 */ 0x40, 0x01, 0x00, 0xFE, 0x01, 0x05, 0xFE, 0x01, 0x05, 0x01, 0xFE, 0xE2, 0x03, 0x07, 0x14, 0x19, +/* 00014570 */ 0x05, 0x33, 0x32, 0x03, 0x03, 0x01, 0x04, 0x01, 0x01, 0x01, 0x01, 0x16, 0x17, 0x18, 0x06, 0xFE, +/* 00014580 */ 0x94, 0x03, 0x05, 0xFE, 0x88, 0x04, 0x06, 0xFE, 0x30, 0x03, 0x08, 0x06, 0xFE, 0xD7, 0x03, 0x06, +/* 00014590 */ 0xFE, 0x8A, 0x04, 0x06, 0xFE, 0x24, 0x04, 0x06, 0xFE, 0x77, 0x04, 0x06, 0xFE, 0x73, 0x04, 0x06, +/* 000145A0 */ 0xFE, 0x33, 0x04, 0x06, 0xFE, 0x34, 0x04, 0x06, 0xFE, 0x35, 0x04, 0x06, 0xFE, 0x36, 0x04, 0x06, +/* 000145B0 */ 0xFE, 0x37, 0x04, 0x06, 0xFE, 0x38, 0x04, 0x06, 0xFE, 0x39, 0x04, 0x06, 0xFE, 0x3A, 0x04, 0x06, +/* 000145C0 */ 0xFE, 0x3B, 0x04, 0xC6, 0x58, 0x14, 0x4E, 0x15, 0x4E, 0x19, 0x96, 0x02, 0x19, 0x2A, 0x19, 0x14, +/* 000145D0 */ 0x15, 0x03, 0x00, 0x19, 0x02, 0x09, 0x24, 0x00, 0x8F, 0x03, 0x03, 0x1A, 0x00, 0x00, 0x6D, 0x19, +/* 000145E0 */ 0x1A, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x1A, 0x5A, 0x01, 0x03, 0x00, 0x00, 0x5A, 0x02, 0x04, +/* 000145F0 */ 0x00, 0x00, 0xF4, 0x03, 0xFF, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x01, 0x0A, 0x19, +/* 00014600 */ 0x01, 0x00, 0x4A, 0x19, 0x07, 0x02, 0x00, 0x59, 0x00, 0x05, 0x5A, 0x01, 0x14, 0x01, 0x00, 0xF0, +/* 00014610 */ 0x02, 0x19, 0x19, 0x01, 0x00, 0x96, 0x02, 0x19, 0xD0, 0x19, 0x0E, 0x00, 0x00, 0xA1, 0x00, 0x06, +/* 00014620 */ 0x19, 0xA1, 0x01, 0x07, 0x19, 0xA1, 0x02, 0x08, 0x19, 0xA1, 0x03, 0x09, 0x19, 0xA1, 0x04, 0x0A, +/* 00014630 */ 0x19, 0xA1, 0x05, 0x0B, 0x19, 0xA1, 0x06, 0x0C, 0x19, 0xA1, 0x07, 0x0D, 0x19, 0xA1, 0x08, 0x0E, +/* 00014640 */ 0x19, 0xA1, 0x09, 0x0F, 0x19, 0xA1, 0x0A, 0x10, 0x19, 0xA1, 0x0B, 0x11, 0x19, 0xA1, 0x0C, 0x12, +/* 00014650 */ 0x19, 0xA1, 0x0D, 0x13, 0x19, 0x45, 0x15, 0x19, 0x8F, 0x02, 0x17, 0x19, 0x02, 0x00, 0x4A, 0x19, +/* 00014660 */ 0x07, 0x04, 0x00, 0x59, 0x00, 0x05, 0x5A, 0x01, 0x15, 0x02, 0x00, 0x93, 0x02, 0x1A, 0x03, 0x00, +/* 00014670 */ 0x5A, 0x02, 0x1A, 0x02, 0x00, 0xD6, 0x00, 0x1A, 0x5A, 0x03, 0x1A, 0x02, 0x00, 0xF0, 0x04, 0x00, +/* 00014680 */ 0x19, 0x02, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB6, 0x02, 0xFF, 0xDA, 0x40, +/* 00014690 */ 0x01, 0x00, 0x06, 0x09, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x34, 0x00, 0x24, 0x00, 0x78, 0x00, 0x1C, +/* 000146A0 */ 0x00, 0x41, 0x00, 0x40, 0x00, 0xE6, 0x01, 0x30, 0x00, 0x00, 0x02, 0x00, 0xB0, 0x46, 0x01, 0x00, +/* 000146B0 */ 0x7F, 0x4C, 0x00, 0xC1, 0x43, 0x50, 0x03, 0x00, 0xFE, 0x2F, 0x07, 0x44, 0xA2, 0x41, 0xD1, 0x00, +/* 000146C0 */ 0x6D, 0xFF, 0xE1, 0x43, 0x01, 0x00, 0xFF, 0xE1, 0x43, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x03, +/* 000146D0 */ 0x03, 0xFF, 0xE1, 0x43, 0x01, 0x00, 0xFE, 0xBD, 0x01, 0xFE, 0xBD, 0x01, 0x07, 0x07, 0x0B, 0x1B, +/* 000146E0 */ 0x18, 0x04, 0x01, 0x04, 0x04, 0x04, 0x04, 0x01, 0x0A, 0x0B, 0x06, 0xFE, 0x73, 0x04, 0x07, 0x06, +/* 000146F0 */ 0xFE, 0x6F, 0x04, 0x06, 0xFE, 0x6D, 0x04, 0x0B, 0x5B, 0x4E, 0x09, 0x14, 0x03, 0x00, 0x07, 0x02, +/* 00014700 */ 0x09, 0x4D, 0x00, 0x8F, 0x01, 0x02, 0x0C, 0x00, 0x00, 0x4A, 0x0C, 0x5F, 0x0C, 0x0C, 0x00, 0x45, +/* 00014710 */ 0x09, 0x0C, 0x8F, 0x01, 0x02, 0x0C, 0x00, 0x00, 0x4A, 0x0C, 0x5F, 0x0C, 0x0C, 0x01, 0xA8, 0x0D, +/* 00014720 */ 0x15, 0x03, 0x00, 0x0C, 0x0D, 0x09, 0x22, 0x00, 0x15, 0x03, 0x00, 0x09, 0x03, 0x09, 0x1A, 0x00, +/* 00014730 */ 0x77, 0x09, 0x08, 0x02, 0x41, 0x0D, 0x09, 0x04, 0x45, 0x0C, 0x0D, 0x0F, 0x07, 0x00, 0x0D, 0x41, +/* 00014740 */ 0x0D, 0x09, 0x05, 0x46, 0x0C, 0x0D, 0x77, 0x0C, 0x08, 0x03, 0x45, 0x00, 0x06, 0x09, 0x02, 0x00, +/* 00014750 */ 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x73, 0x04, 0xFE, 0x6E, 0x02, 0xFE, 0x73, 0x04, 0xFE, 0x6F, 0x02, +/* 00014760 */ 0xFF, 0x11, 0x44, 0x01, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x34, 0x00, 0x0F, 0x00, +/* 00014770 */ 0x3B, 0x00, 0x1E, 0x00, 0x52, 0x00, 0x04, 0x00, 0x35, 0x00, 0x16, 0x00, 0x63, 0x00, 0x08, 0x00, +/* 00014780 */ 0x33, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0xF8, 0x06, 0x3B, 0xA0, +/* 00014790 */ 0x41, 0xD1, 0x00, 0x6B, 0xFF, 0xF8, 0x3B, 0x01, 0x00, 0xFF, 0xF8, 0x3B, 0x01, 0x00, 0x09, 0xFE, +/* 000147A0 */ 0x00, 0x90, 0x01, 0x01, 0xFF, 0xF8, 0x3B, 0x01, 0x00, 0xFE, 0xEA, 0x01, 0xFE, 0xEA, 0x01, 0x07, +/* 000147B0 */ 0x06, 0x09, 0x04, 0x2A, 0x28, 0x03, 0x03, 0x04, 0x06, 0x06, 0x06, 0x06, 0x08, 0x06, 0xFE, 0x94, +/* 000147C0 */ 0x03, 0x05, 0xFE, 0x88, 0x04, 0x06, 0xFE, 0x30, 0x03, 0x08, 0xA6, 0x58, 0x06, 0x4E, 0x07, 0x2A, +/* 000147D0 */ 0x09, 0x06, 0x15, 0x03, 0x00, 0x09, 0x02, 0x09, 0x24, 0x00, 0x8F, 0x03, 0x03, 0x0A, 0x00, 0x00, +/* 000147E0 */ 0x6D, 0x09, 0x0A, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0A, 0x5A, 0x01, 0x03, 0x00, 0x00, 0x5A, +/* 000147F0 */ 0x02, 0x04, 0x00, 0x00, 0xF4, 0x03, 0xFF, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x01, +/* 00014800 */ 0x0A, 0x09, 0x01, 0x00, 0x4A, 0x09, 0x07, 0x02, 0x00, 0x59, 0x00, 0x05, 0x5A, 0x01, 0x06, 0x01, +/* 00014810 */ 0x00, 0xF0, 0x02, 0x09, 0x09, 0x01, 0x00, 0x45, 0x07, 0x09, 0x5F, 0x09, 0x07, 0x01, 0xA8, 0x0A, +/* 00014820 */ 0x14, 0x03, 0x00, 0x09, 0x0A, 0x09, 0x3E, 0x00, 0x45, 0x09, 0x07, 0x8F, 0x03, 0x36, 0x0B, 0x02, +/* 00014830 */ 0x00, 0x4A, 0x0B, 0x6D, 0x0A, 0x0B, 0x02, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0B, 0x8F, 0x01, 0x0B, +/* 00014840 */ 0x0C, 0x03, 0x00, 0x4A, 0x0C, 0x5A, 0x01, 0x0C, 0x02, 0x00, 0x5A, 0x02, 0x07, 0x02, 0x00, 0xF4, +/* 00014850 */ 0x03, 0x0A, 0x0A, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x77, 0x0A, 0x09, 0x03, 0x5F, 0x09, 0x07, +/* 00014860 */ 0x04, 0x82, 0x09, 0x09, 0x06, 0x01, 0x5F, 0x00, 0x07, 0x05, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, +/* 00014870 */ 0x00, 0xFE, 0xB6, 0x02, 0xFE, 0x25, 0x04, 0x54, 0xFE, 0x25, 0x04, 0xFE, 0x25, 0x04, 0xFE, 0x25, +/* 00014880 */ 0x04, 0xFF, 0x12, 0x3C, 0x01, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x30, 0x00, 0x24, +/* 00014890 */ 0x00, 0x70, 0x00, 0x1C, 0x00, 0x3E, 0x00, 0x0E, 0x00, 0x3E, 0x00, 0x35, 0x00, 0x49, 0x00, 0x09, +/* 000148A0 */ 0x00, 0x41, 0x00, 0x09, 0x00, 0x29, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x03, 0x00, +/* 000148B0 */ 0xFE, 0xD1, 0x06, 0x60, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x16, 0x04, 0x6A, 0xFF, 0x00, 0x36, 0x01, +/* 000148C0 */ 0x00, 0xFF, 0x00, 0x36, 0x01, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0x00, 0x36, 0x01, +/* 000148D0 */ 0x00, 0xFE, 0xA1, 0x03, 0xFE, 0xA1, 0x03, 0x07, 0x07, 0x0C, 0x06, 0x54, 0x50, 0x03, 0x09, 0x03, +/* 000148E0 */ 0x0A, 0x0A, 0x0A, 0x0A, 0x0B, 0x06, 0xFE, 0x94, 0x03, 0x05, 0xFE, 0x89, 0x04, 0x06, 0xFE, 0x30, +/* 000148F0 */ 0x03, 0x0B, 0x0C, 0xFE, 0x74, 0x01, 0x58, 0x08, 0x4E, 0x09, 0x4E, 0x0A, 0x2A, 0x0C, 0x08, 0x15, +/* 00014900 */ 0x03, 0x00, 0x0C, 0x02, 0x09, 0x24, 0x00, 0x8F, 0x03, 0x03, 0x0D, 0x00, 0x00, 0x6D, 0x0C, 0x0D, +/* 00014910 */ 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0D, 0x5A, 0x01, 0x03, 0x00, 0x00, 0x5A, 0x02, 0x04, 0x00, +/* 00014920 */ 0x00, 0xF4, 0x03, 0xFF, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x03, 0x03, 0x0D, 0x00, +/* 00014930 */ 0x00, 0x6D, 0x0C, 0x0D, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0D, 0x5A, 0x01, 0x08, 0x01, 0x00, +/* 00014940 */ 0xF4, 0x02, 0x0C, 0x0C, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, 0x09, 0x0C, 0xA8, 0x0C, 0x14, +/* 00014950 */ 0x08, 0x00, 0x09, 0x0C, 0x5F, 0x0C, 0x09, 0x02, 0x0F, 0x24, 0x00, 0x0C, 0x8F, 0x03, 0x03, 0x0D, +/* 00014960 */ 0x00, 0x00, 0x6D, 0x0C, 0x0D, 0x03, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0D, 0x5A, 0x01, 0x03, 0x02, +/* 00014970 */ 0x00, 0x5A, 0x02, 0x04, 0x02, 0x00, 0xF4, 0x03, 0xFF, 0x0C, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, +/* 00014980 */ 0xA8, 0x0C, 0x45, 0x0A, 0x0C, 0xA8, 0x0C, 0x14, 0x03, 0x00, 0x07, 0x0C, 0x09, 0x20, 0x00, 0x8F, +/* 00014990 */ 0x03, 0x03, 0x0D, 0x00, 0x00, 0x6D, 0x0C, 0x0D, 0x04, 0x07, 0x01, 0x00, 0x59, 0x00, 0x0D, 0xF4, +/* 000149A0 */ 0x01, 0x0C, 0x0C, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x45, 0x0A, 0x0C, 0x09, 0x86, 0x00, 0x8F, +/* 000149B0 */ 0x03, 0x24, 0x0D, 0x01, 0x00, 0x6D, 0x0C, 0x0D, 0x05, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0D, 0x5A, +/* 000149C0 */ 0x01, 0x07, 0x04, 0x00, 0xF4, 0x02, 0x0C, 0x0C, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x45, 0x0A, +/* 000149D0 */ 0x0C, 0x8F, 0x03, 0x36, 0x0D, 0x02, 0x00, 0x4A, 0x0D, 0x6D, 0x0C, 0x0D, 0x06, 0x07, 0x02, 0x00, +/* 000149E0 */ 0x59, 0x00, 0x0D, 0x5A, 0x01, 0x0A, 0x05, 0x00, 0xF4, 0x02, 0x0C, 0x0C, 0x06, 0x00, 0x00, 0x00, +/* 000149F0 */ 0x05, 0x00, 0x0F, 0x25, 0x00, 0x0C, 0x8F, 0x03, 0x36, 0x0D, 0x02, 0x00, 0x4A, 0x0D, 0x6D, 0x0C, +/* 00014A00 */ 0x0D, 0x07, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0D, 0x5A, 0x01, 0x0A, 0x06, 0x00, 0xF4, 0x02, 0x0C, +/* 00014A10 */ 0x0C, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x0F, 0x1A, 0x00, 0x0C, 0x8F, 0x03, 0x03, 0x0D, 0x00, +/* 00014A20 */ 0x00, 0x6D, 0x0C, 0x0D, 0x08, 0x07, 0x01, 0x00, 0x59, 0x00, 0x0D, 0xF4, 0x01, 0xFF, 0x0C, 0x08, +/* 00014A30 */ 0x00, 0x00, 0x00, 0x07, 0x00, 0x8F, 0x03, 0x03, 0x0D, 0x00, 0x00, 0x6D, 0x0C, 0x0D, 0x09, 0x07, +/* 00014A40 */ 0x05, 0x00, 0x59, 0x00, 0x0D, 0x5A, 0x01, 0x09, 0x08, 0x00, 0x5A, 0x02, 0x0A, 0x08, 0x00, 0x5A, +/* 00014A50 */ 0x03, 0x05, 0x08, 0x00, 0x5A, 0x04, 0x06, 0x08, 0x00, 0xF4, 0x05, 0x00, 0x0C, 0x09, 0x00, 0x00, +/* 00014A60 */ 0x00, 0x08, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB6, 0x02, 0xFE, 0x05, 0x02, +/* 00014A70 */ 0xFE, 0x7E, 0x04, 0xFE, 0xB6, 0x02, 0xFE, 0x9F, 0x02, 0xFE, 0x23, 0x03, 0xC4, 0xC1, 0xFE, 0xB9, +/* 00014A80 */ 0x02, 0xFE, 0xFC, 0x01, 0xFF, 0x2B, 0x36, 0x01, 0x00, 0x0D, 0x06, 0x00, 0x00, 0x00, 0x0B, 0x00, +/* 00014A90 */ 0x30, 0x00, 0x24, 0x00, 0x77, 0x00, 0x22, 0x00, 0x41, 0x00, 0x0F, 0x00, 0x5D, 0x00, 0x24, 0x00, +/* 00014AA0 */ 0x77, 0x00, 0x05, 0x00, 0x13, 0x00, 0x0A, 0x00, 0x2A, 0x00, 0x20, 0x00, 0x53, 0x00, 0x22, 0x00, +/* 00014AB0 */ 0x2E, 0x00, 0x4A, 0x00, 0x38, 0x00, 0x1A, 0x00, 0x4A, 0x00, 0x33, 0x00, 0x79, 0x00, 0x00, 0x7F, +/* 00014AC0 */ 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0xBE, 0x06, 0x52, 0xA2, 0x41, 0xC3, 0x00, 0xFE, +/* 00014AD0 */ 0x15, 0x04, 0x69, 0xFF, 0x15, 0x33, 0x01, 0x00, 0xFF, 0x15, 0x33, 0x01, 0x00, 0x09, 0xFE, 0x00, +/* 00014AE0 */ 0x90, 0x02, 0x02, 0xFF, 0x15, 0x33, 0x01, 0x00, 0xFE, 0x87, 0x02, 0xFE, 0x87, 0x02, 0x06, 0x05, +/* 00014AF0 */ 0x09, 0x06, 0x41, 0x3E, 0x03, 0x07, 0x03, 0x08, 0x08, 0x08, 0x08, 0x08, 0x05, 0xFE, 0x88, 0x04, +/* 00014B00 */ 0x06, 0xFE, 0x30, 0x03, 0x0C, 0xFE, 0x1E, 0x01, 0x58, 0x06, 0x4E, 0x07, 0x0E, 0x08, 0x00, 0x06, +/* 00014B10 */ 0x5F, 0x09, 0x06, 0x00, 0x0F, 0x24, 0x00, 0x09, 0x8F, 0x03, 0x03, 0x0A, 0x00, 0x00, 0x6D, 0x09, +/* 00014B20 */ 0x0A, 0x01, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0A, 0x5A, 0x01, 0x02, 0x00, 0x00, 0x5A, 0x02, 0x03, +/* 00014B30 */ 0x00, 0x00, 0xF4, 0x03, 0xFF, 0x09, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0x09, 0x45, 0x07, +/* 00014B40 */ 0x09, 0xA8, 0x09, 0x14, 0x03, 0x00, 0x05, 0x09, 0x09, 0x20, 0x00, 0x8F, 0x03, 0x03, 0x0A, 0x00, +/* 00014B50 */ 0x00, 0x6D, 0x09, 0x0A, 0x02, 0x07, 0x01, 0x00, 0x59, 0x00, 0x0A, 0xF4, 0x01, 0x09, 0x09, 0x02, +/* 00014B60 */ 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, 0x07, 0x09, 0x09, 0x86, 0x00, 0x8F, 0x03, 0x24, 0x0A, 0x01, +/* 00014B70 */ 0x00, 0x6D, 0x09, 0x0A, 0x03, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0A, 0x5A, 0x01, 0x05, 0x02, 0x00, +/* 00014B80 */ 0xF4, 0x02, 0x09, 0x09, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x45, 0x07, 0x09, 0x8F, 0x03, 0x36, +/* 00014B90 */ 0x0A, 0x02, 0x00, 0x4A, 0x0A, 0x6D, 0x09, 0x0A, 0x04, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0A, 0x5A, +/* 00014BA0 */ 0x01, 0x07, 0x03, 0x00, 0xF4, 0x02, 0x09, 0x09, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x0F, 0x25, +/* 00014BB0 */ 0x00, 0x09, 0x8F, 0x03, 0x36, 0x0A, 0x02, 0x00, 0x4A, 0x0A, 0x6D, 0x09, 0x0A, 0x05, 0x07, 0x02, +/* 00014BC0 */ 0x00, 0x59, 0x00, 0x0A, 0x5A, 0x01, 0x07, 0x04, 0x00, 0xF4, 0x02, 0x09, 0x09, 0x05, 0x00, 0x00, +/* 00014BD0 */ 0x00, 0x04, 0x00, 0x0F, 0x1A, 0x00, 0x09, 0x8F, 0x03, 0x03, 0x0A, 0x00, 0x00, 0x6D, 0x09, 0x0A, +/* 00014BE0 */ 0x06, 0x07, 0x01, 0x00, 0x59, 0x00, 0x0A, 0xF4, 0x01, 0xFF, 0x09, 0x06, 0x00, 0x00, 0x00, 0x05, +/* 00014BF0 */ 0x00, 0x8F, 0x03, 0x03, 0x0A, 0x00, 0x00, 0x6D, 0x09, 0x0A, 0x07, 0x07, 0x05, 0x00, 0x59, 0x00, +/* 00014C00 */ 0x0A, 0x5A, 0x01, 0x06, 0x06, 0x00, 0x5A, 0x02, 0x07, 0x06, 0x00, 0x5A, 0x03, 0x04, 0x06, 0x00, +/* 00014C10 */ 0x5A, 0x04, 0x04, 0x06, 0x00, 0xF4, 0x05, 0x00, 0x09, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x09, +/* 00014C20 */ 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x7E, 0x04, 0xFE, 0xB6, 0x02, 0xFE, 0x9F, 0x02, 0xFE, +/* 00014C30 */ 0x23, 0x03, 0xC4, 0xC1, 0xFE, 0xB9, 0x02, 0xFE, 0xFC, 0x01, 0xFF, 0x39, 0x33, 0x01, 0x00, 0x0A, +/* 00014C40 */ 0x04, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x40, 0x00, 0x24, 0x00, 0x70, 0x00, 0x05, 0x00, 0x13, 0x00, +/* 00014C50 */ 0x0A, 0x00, 0x2A, 0x00, 0x20, 0x00, 0x53, 0x00, 0x22, 0x00, 0x2E, 0x00, 0x4A, 0x00, 0x38, 0x00, +/* 00014C60 */ 0x1A, 0x00, 0x4A, 0x00, 0x33, 0x00, 0x72, 0x00, 0x00, 0x7F, 0x5C, 0x0A, 0xC1, 0x07, 0x10, 0x03, +/* 00014C70 */ 0x00, 0xFE, 0xAB, 0x06, 0x25, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x2D, 0x04, 0x68, 0xFF, 0xAC, 0x2F, +/* 00014C80 */ 0x01, 0x00, 0xFF, 0xAC, 0x2F, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0xAC, 0x2F, +/* 00014C90 */ 0x01, 0x00, 0xFE, 0xB3, 0x02, 0xFE, 0xB3, 0x02, 0x05, 0x05, 0x08, 0x04, 0x32, 0x2E, 0x03, 0x01, +/* 00014CA0 */ 0x04, 0x02, 0x07, 0x07, 0x07, 0x07, 0x01, 0x07, 0x06, 0xFE, 0x94, 0x03, 0x05, 0xFE, 0x88, 0x04, +/* 00014CB0 */ 0x06, 0xFE, 0x30, 0x03, 0xDB, 0x4E, 0x06, 0x8F, 0x03, 0x03, 0x09, 0x00, 0x00, 0x6D, 0x08, 0x09, +/* 00014CC0 */ 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x09, 0x5A, 0x01, 0x05, 0x00, 0x00, 0xF4, 0x02, 0x08, 0x08, +/* 00014CD0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x06, 0x08, 0x0E, 0x08, 0x00, 0x06, 0x5F, 0x08, 0x06, +/* 00014CE0 */ 0x01, 0x0F, 0x24, 0x00, 0x08, 0x8F, 0x01, 0x09, 0x08, 0x01, 0x00, 0x4A, 0x08, 0xE3, 0x08, 0x05, +/* 00014CF0 */ 0x08, 0x00, 0x0E, 0x13, 0x00, 0x08, 0x8F, 0x03, 0x03, 0x08, 0x00, 0x00, 0x5F, 0x08, 0x08, 0x02, +/* 00014D00 */ 0x98, 0x08, 0x05, 0x08, 0x00, 0x00, 0x45, 0x05, 0x08, 0x2A, 0x08, 0x05, 0x15, 0x03, 0x00, 0x08, +/* 00014D10 */ 0x02, 0x09, 0x24, 0x00, 0x8F, 0x03, 0x03, 0x09, 0x00, 0x00, 0x6D, 0x08, 0x09, 0x03, 0x07, 0x03, +/* 00014D20 */ 0x00, 0x59, 0x00, 0x09, 0x5A, 0x01, 0x03, 0x01, 0x00, 0x5A, 0x02, 0x04, 0x01, 0x00, 0xF4, 0x03, +/* 00014D30 */ 0xFF, 0x08, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x8F, 0x03, 0x03, 0x09, 0x00, 0x00, 0x6D, 0x08, +/* 00014D40 */ 0x09, 0x04, 0x07, 0x02, 0x00, 0x59, 0x00, 0x09, 0x5A, 0x01, 0x05, 0x02, 0x00, 0xF4, 0x02, 0x08, +/* 00014D50 */ 0x08, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x45, 0x06, 0x08, 0x5F, 0x08, 0x06, 0x05, 0x0F, 0x24, +/* 00014D60 */ 0x00, 0x08, 0x8F, 0x03, 0x03, 0x09, 0x00, 0x00, 0x6D, 0x08, 0x09, 0x06, 0x07, 0x03, 0x00, 0x59, +/* 00014D70 */ 0x00, 0x09, 0x5A, 0x01, 0x03, 0x03, 0x00, 0x5A, 0x02, 0x04, 0x03, 0x00, 0xF4, 0x03, 0xFF, 0x08, +/* 00014D80 */ 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x45, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, +/* 00014D90 */ 0xFE, 0x05, 0x02, 0xFE, 0x7E, 0x04, 0xFE, 0x30, 0x02, 0xFE, 0xB6, 0x02, 0xFE, 0x05, 0x02, 0xFE, +/* 00014DA0 */ 0x7E, 0x04, 0xFE, 0xB6, 0x02, 0xFF, 0xC9, 0x2F, 0x01, 0x00, 0x0A, 0x02, 0x00, 0x00, 0x00, 0x22, +/* 00014DB0 */ 0x00, 0x3E, 0x00, 0x1D, 0x00, 0x73, 0x00, 0x13, 0x00, 0x3F, 0x00, 0x0B, 0x00, 0x2F, 0x00, 0x24, +/* 00014DC0 */ 0x00, 0x70, 0x00, 0x22, 0x00, 0x3A, 0x00, 0x08, 0x00, 0x3F, 0x00, 0x24, 0x00, 0x70, 0x00, 0x08, +/* 00014DD0 */ 0x00, 0x1D, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x17, 0x10, 0x43, 0x00, 0xFE, 0x91, 0x06, 0x48, +/* 00014DE0 */ 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x30, 0x03, 0x67, 0xFF, 0xA6, 0x2B, 0x01, 0x00, 0xFF, 0xA6, 0x2B, +/* 00014DF0 */ 0x01, 0x00, 0x08, 0xFE, 0x00, 0x90, 0x03, 0x01, 0xFF, 0xA6, 0x2B, 0x01, 0x00, 0xFE, 0xDD, 0x03, +/* 00014E00 */ 0xFE, 0xDD, 0x03, 0x0C, 0x09, 0x12, 0x05, 0x5C, 0x53, 0x03, 0x06, 0x05, 0x09, 0x09, 0x09, 0x09, +/* 00014E10 */ 0x01, 0x01, 0x11, 0x08, 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, 0x2B, 0x03, 0x0C, 0x06, 0xFE, 0x2C, +/* 00014E20 */ 0x03, 0x06, 0xFE, 0x2D, 0x03, 0x07, 0xFE, 0x6E, 0x01, 0x01, 0x5D, 0x01, 0x0B, 0x58, 0x10, 0xC0, +/* 00014E30 */ 0x0C, 0x4E, 0x0D, 0x4E, 0x0E, 0x4E, 0x0F, 0x15, 0x05, 0x00, 0x09, 0x02, 0xA8, 0x12, 0x45, 0x09, +/* 00014E40 */ 0x12, 0x15, 0x05, 0x00, 0x0A, 0x02, 0xA8, 0x12, 0x45, 0x0A, 0x12, 0x4E, 0x0D, 0x4E, 0x0E, 0x4E, +/* 00014E50 */ 0x0F, 0xA8, 0x12, 0x14, 0x03, 0x00, 0x0B, 0x12, 0x09, 0x06, 0x00, 0x45, 0x12, 0x0C, 0x09, 0x03, +/* 00014E60 */ 0x00, 0x46, 0x12, 0x0B, 0x45, 0x0D, 0x12, 0x8F, 0x02, 0x07, 0x12, 0x00, 0x00, 0x4A, 0x12, 0x07, +/* 00014E70 */ 0x03, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x0D, 0x00, 0x00, 0x8F, 0x01, 0x08, 0x13, 0x01, 0x00, +/* 00014E80 */ 0x4A, 0x13, 0x5A, 0x02, 0x13, 0x00, 0x00, 0xF0, 0x03, 0x12, 0x12, 0x00, 0x00, 0x45, 0x0E, 0x12, +/* 00014E90 */ 0x8F, 0x03, 0x03, 0x13, 0x02, 0x00, 0x6D, 0x12, 0x13, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x13, +/* 00014EA0 */ 0x5A, 0x01, 0x0E, 0x01, 0x00, 0xF4, 0x02, 0x12, 0x12, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, +/* 00014EB0 */ 0x0F, 0x12, 0xA8, 0x12, 0x14, 0x03, 0x00, 0x0F, 0x12, 0x09, 0x43, 0x00, 0x8F, 0x03, 0x36, 0x13, +/* 00014EC0 */ 0x03, 0x00, 0x4A, 0x13, 0x6D, 0x12, 0x13, 0x01, 0x07, 0x01, 0x00, 0x59, 0x00, 0x13, 0xF4, 0x01, +/* 00014ED0 */ 0x12, 0x12, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x45, 0x0F, 0x12, 0x8F, 0x03, 0x03, 0x13, 0x02, +/* 00014EE0 */ 0x00, 0x6D, 0x12, 0x13, 0x02, 0x07, 0x03, 0x00, 0x59, 0x00, 0x13, 0x5A, 0x01, 0x0E, 0x03, 0x00, +/* 00014EF0 */ 0x5A, 0x02, 0x0F, 0x03, 0x00, 0xF4, 0x03, 0xFF, 0x12, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x8F, +/* 00014F00 */ 0x01, 0x05, 0x12, 0x04, 0x00, 0x4A, 0x12, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x0F, +/* 00014F10 */ 0x04, 0x00, 0x5A, 0x02, 0x09, 0x04, 0x00, 0x5A, 0x03, 0x0A, 0x04, 0x00, 0xF0, 0x04, 0xFF, 0x12, +/* 00014F20 */ 0x04, 0x00, 0xA8, 0x12, 0x14, 0x03, 0x00, 0x0B, 0x12, 0x09, 0x61, 0x00, 0xE3, 0x12, 0x10, 0x0C, +/* 00014F30 */ 0x00, 0x0E, 0x58, 0x00, 0x12, 0x8F, 0x03, 0x36, 0x13, 0x03, 0x00, 0x4A, 0x13, 0x6D, 0x12, 0x13, +/* 00014F40 */ 0x03, 0x07, 0x04, 0x00, 0x59, 0x00, 0x13, 0x5A, 0x01, 0x10, 0x05, 0x00, 0x8F, 0x03, 0x03, 0x14, +/* 00014F50 */ 0x02, 0x00, 0x5F, 0x14, 0x14, 0x04, 0x5A, 0x02, 0x14, 0x05, 0x00, 0xCE, 0x00, 0x00, 0x00, 0x00, +/* 00014F60 */ 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x7B, 0x0E, 0x14, 0x05, 0x7B, 0x05, 0x14, 0x06, +/* 00014F70 */ 0x7B, 0x05, 0x14, 0x07, 0x7B, 0x05, 0x14, 0x08, 0x5A, 0x03, 0x14, 0x05, 0x00, 0xF4, 0x04, 0xFF, +/* 00014F80 */ 0x12, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x45, 0x00, 0x10, 0x09, 0x08, 0x00, 0x45, 0x00, 0x0E, +/* 00014F90 */ 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x01, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, +/* 00014FA0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, +/* 00014FB0 */ 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0xFE, 0x05, 0x02, 0x69, 0xFE, 0x06, 0x02, 0xFE, 0x9C, 0x01, +/* 00014FC0 */ 0xFE, 0x30, 0x02, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFF, +/* 00014FD0 */ 0xBE, 0x2B, 0x01, 0x00, 0x0E, 0x0E, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x10, 0x00, 0x23, +/* 00014FE0 */ 0x00, 0x16, 0x00, 0x56, 0x00, 0x29, 0x00, 0x67, 0x00, 0x22, 0x00, 0x49, 0x00, 0x0A, 0x00, 0x32, +/* 00014FF0 */ 0x00, 0x1F, 0x00, 0x2B, 0x00, 0x24, 0x00, 0x53, 0x00, 0x23, 0x00, 0x47, 0x00, 0x13, 0x00, 0x52, +/* 00015000 */ 0x00, 0x52, 0x00, 0xF6, 0x00, 0x06, 0x00, 0x28, 0x00, 0x08, 0x00, 0x1F, 0x00, 0x00, 0x7F, 0x5D, +/* 00015010 */ 0x08, 0xC1, 0x03, 0x1A, 0x0B, 0x00, 0xFE, 0x7C, 0x06, 0x09, 0xA2, 0x41, 0xD1, 0x00, 0x65, 0xFF, +/* 00015020 */ 0x7D, 0x27, 0x01, 0x00, 0xFF, 0x7D, 0x27, 0x01, 0x00, 0x01, 0x40, 0xFE, 0x00, 0x90, 0x06, 0x06, +/* 00015030 */ 0xFF, 0x7D, 0x27, 0x01, 0x00, 0xFE, 0x90, 0x01, 0xFE, 0x90, 0x01, 0x04, 0xFE, 0x06, 0x01, 0xFE, +/* 00015040 */ 0x82, 0x04, 0xFE, 0x83, 0x04, 0xFE, 0x84, 0x04, 0x0C, 0x03, 0x0B, 0x08, 0x17, 0x17, 0x03, 0x02, +/* 00015050 */ 0x03, 0x01, 0x01, 0x01, 0x01, 0x08, 0x09, 0x0A, 0x08, 0x5A, 0x96, 0x02, 0x03, 0x96, 0x03, 0x04, +/* 00015060 */ 0x96, 0x04, 0x05, 0x96, 0x05, 0x06, 0x8F, 0x03, 0x03, 0x0C, 0x00, 0x00, 0x6D, 0x0B, 0x0C, 0x00, +/* 00015070 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x0C, 0x8F, 0x02, 0x06, 0x0D, 0x01, 0x00, 0x4A, 0x0D, 0x07, 0x03, +/* 00015080 */ 0x00, 0x59, 0x00, 0x02, 0x93, 0x02, 0x0E, 0x02, 0x00, 0x5A, 0x01, 0x0E, 0x01, 0x00, 0xD6, 0x00, +/* 00015090 */ 0x0E, 0x5A, 0x02, 0x0E, 0x01, 0x00, 0xF0, 0x03, 0x0D, 0x0D, 0x01, 0x00, 0x5A, 0x01, 0x0D, 0x00, +/* 000150A0 */ 0x00, 0x5A, 0x02, 0x07, 0x00, 0x00, 0xF4, 0x03, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 000150B0 */ 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x04, 0x02, 0xFF, 0xCC, 0x27, 0x01, 0x00, 0x02, 0x0C, 0x00, 0x00, +/* 000150C0 */ 0x00, 0x4C, 0x00, 0x40, 0x01, 0x00, 0xCA, 0x50, 0x01, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x83, 0x10, +/* 000150D0 */ 0x03, 0x02, 0xFE, 0x7D, 0x06, 0x46, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x87, 0x04, 0x66, 0xFF, 0x06, +/* 000150E0 */ 0x28, 0x01, 0x00, 0xFF, 0x06, 0x28, 0x01, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x03, 0x01, 0xFF, 0x06, +/* 000150F0 */ 0x28, 0x01, 0x00, 0xE6, 0xE6, 0x07, 0x03, 0x07, 0x09, 0x1B, 0x19, 0x04, 0x01, 0x05, 0x01, 0x01, +/* 00015100 */ 0x01, 0x01, 0x01, 0x06, 0x08, 0x72, 0x58, 0x05, 0x15, 0x05, 0x00, 0x03, 0x02, 0xA8, 0x07, 0x45, +/* 00015110 */ 0x03, 0x07, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA8, 0x07, 0x45, 0x04, 0x07, 0x8F, 0x02, 0x02, 0x08, +/* 00015120 */ 0x00, 0x00, 0x6D, 0x07, 0x08, 0x00, 0x07, 0x08, 0x00, 0x59, 0x00, 0x08, 0x5A, 0x01, 0x05, 0x00, +/* 00015130 */ 0x00, 0x8F, 0x01, 0x02, 0x09, 0x01, 0x00, 0x5A, 0x02, 0x09, 0x00, 0x00, 0x8F, 0x01, 0x03, 0x09, +/* 00015140 */ 0x02, 0x00, 0x5A, 0x03, 0x09, 0x00, 0x00, 0x8F, 0x01, 0x04, 0x09, 0x03, 0x00, 0x5A, 0x04, 0x09, +/* 00015150 */ 0x00, 0x00, 0x8F, 0x01, 0x05, 0x09, 0x04, 0x00, 0x5A, 0x05, 0x09, 0x00, 0x00, 0x5A, 0x06, 0x03, +/* 00015160 */ 0x00, 0x00, 0x5A, 0x07, 0x04, 0x00, 0x00, 0xF4, 0x08, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00015170 */ 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x5A, 0x00, 0xFF, 0x32, 0x28, 0x01, 0x00, 0x04, +/* 00015180 */ 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0A, 0x00, 0x27, 0x00, 0x5A, 0x00, 0x7D, 0x00, +/* 00015190 */ 0x00, 0x7F, 0x5D, 0x08, 0xC1, 0x03, 0x1A, 0x0B, 0x00, 0xFE, 0x76, 0x06, 0x09, 0xA2, 0x41, 0xD1, +/* 000151A0 */ 0x00, 0x63, 0xFF, 0x37, 0x25, 0x01, 0x00, 0xFF, 0x37, 0x25, 0x01, 0x00, 0x01, 0x40, 0xFE, 0x00, +/* 000151B0 */ 0x90, 0x06, 0x06, 0xFF, 0x37, 0x25, 0x01, 0x00, 0xFE, 0x90, 0x01, 0xFE, 0x90, 0x01, 0x04, 0xFE, +/* 000151C0 */ 0x06, 0x01, 0xFE, 0x82, 0x04, 0xFE, 0x83, 0x04, 0xFE, 0x84, 0x04, 0x0C, 0x03, 0x0B, 0x08, 0x17, +/* 000151D0 */ 0x17, 0x03, 0x02, 0x03, 0x01, 0x01, 0x01, 0x01, 0x08, 0x09, 0x0A, 0x08, 0x5A, 0x96, 0x02, 0x03, +/* 000151E0 */ 0x96, 0x03, 0x04, 0x96, 0x04, 0x05, 0x96, 0x05, 0x06, 0x8F, 0x03, 0x03, 0x0C, 0x00, 0x00, 0x6D, +/* 000151F0 */ 0x0B, 0x0C, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0C, 0x8F, 0x02, 0x06, 0x0D, 0x01, 0x00, 0x4A, +/* 00015200 */ 0x0D, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x93, 0x02, 0x0E, 0x02, 0x00, 0x5A, 0x01, 0x0E, 0x01, +/* 00015210 */ 0x00, 0xD6, 0x00, 0x0E, 0x5A, 0x02, 0x0E, 0x01, 0x00, 0xF0, 0x03, 0x0D, 0x0D, 0x01, 0x00, 0x5A, +/* 00015220 */ 0x01, 0x0D, 0x00, 0x00, 0x5A, 0x02, 0x07, 0x00, 0x00, 0xF4, 0x03, 0xFF, 0x0B, 0x00, 0x00, 0x00, +/* 00015230 */ 0x00, 0x00, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x04, 0x02, 0xFF, 0x86, 0x25, 0x01, 0x00, 0x02, +/* 00015240 */ 0x0C, 0x00, 0x00, 0x00, 0x4C, 0x00, 0x40, 0x01, 0x00, 0x4D, 0x52, 0x01, 0x00, 0x7F, 0x5C, 0x08, +/* 00015250 */ 0xC1, 0x83, 0x10, 0x03, 0x02, 0xFE, 0x77, 0x06, 0x46, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x86, 0x04, +/* 00015260 */ 0x64, 0xFF, 0xC0, 0x25, 0x01, 0x00, 0xFF, 0xC0, 0x25, 0x01, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x03, +/* 00015270 */ 0x01, 0xFF, 0xC0, 0x25, 0x01, 0x00, 0xE6, 0xE6, 0x07, 0x03, 0x07, 0x09, 0x1B, 0x19, 0x04, 0x01, +/* 00015280 */ 0x05, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x08, 0x72, 0x58, 0x05, 0x15, 0x05, 0x00, 0x03, 0x02, +/* 00015290 */ 0xA8, 0x07, 0x45, 0x03, 0x07, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA8, 0x07, 0x45, 0x04, 0x07, 0x8F, +/* 000152A0 */ 0x02, 0x02, 0x08, 0x00, 0x00, 0x6D, 0x07, 0x08, 0x00, 0x07, 0x08, 0x00, 0x59, 0x00, 0x08, 0x5A, +/* 000152B0 */ 0x01, 0x05, 0x00, 0x00, 0x8F, 0x01, 0x02, 0x09, 0x01, 0x00, 0x5A, 0x02, 0x09, 0x00, 0x00, 0x8F, +/* 000152C0 */ 0x01, 0x03, 0x09, 0x02, 0x00, 0x5A, 0x03, 0x09, 0x00, 0x00, 0x8F, 0x01, 0x04, 0x09, 0x03, 0x00, +/* 000152D0 */ 0x5A, 0x04, 0x09, 0x00, 0x00, 0x8F, 0x01, 0x05, 0x09, 0x04, 0x00, 0x5A, 0x05, 0x09, 0x00, 0x00, +/* 000152E0 */ 0x5A, 0x06, 0x03, 0x00, 0x00, 0x5A, 0x07, 0x04, 0x00, 0x00, 0xF4, 0x08, 0x00, 0x07, 0x00, 0x00, +/* 000152F0 */ 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x5A, 0x00, 0xFF, 0xEC, 0x25, +/* 00015300 */ 0x01, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0A, 0x00, 0x27, 0x00, 0x5A, +/* 00015310 */ 0x00, 0x7D, 0x00, 0x00, 0x7F, 0x5D, 0x08, 0xC1, 0x03, 0x1A, 0x0B, 0x00, 0xFE, 0x70, 0x06, 0x09, +/* 00015320 */ 0xA2, 0x41, 0xD1, 0x00, 0x61, 0xFF, 0x03, 0x23, 0x01, 0x00, 0xFF, 0x03, 0x23, 0x01, 0x00, 0x01, +/* 00015330 */ 0x40, 0xFE, 0x00, 0x90, 0x06, 0x06, 0xFF, 0x03, 0x23, 0x01, 0x00, 0xFE, 0x8C, 0x01, 0xFE, 0x8C, +/* 00015340 */ 0x01, 0x04, 0xFE, 0x06, 0x01, 0xFE, 0x82, 0x04, 0xFE, 0x83, 0x04, 0xFE, 0x84, 0x04, 0x0C, 0x03, +/* 00015350 */ 0x0B, 0x08, 0x17, 0x17, 0x03, 0x02, 0x03, 0x01, 0x01, 0x01, 0x01, 0x08, 0x09, 0x0A, 0x08, 0x5A, +/* 00015360 */ 0x96, 0x02, 0x03, 0x96, 0x03, 0x04, 0x96, 0x04, 0x05, 0x96, 0x05, 0x06, 0x8F, 0x03, 0x03, 0x0C, +/* 00015370 */ 0x00, 0x00, 0x6D, 0x0B, 0x0C, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0C, 0x8F, 0x02, 0x06, 0x0D, +/* 00015380 */ 0x01, 0x00, 0x4A, 0x0D, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x93, 0x02, 0x0E, 0x02, 0x00, 0x5A, +/* 00015390 */ 0x01, 0x0E, 0x01, 0x00, 0xD6, 0x00, 0x0E, 0x5A, 0x02, 0x0E, 0x01, 0x00, 0xF0, 0x03, 0x0D, 0x0D, +/* 000153A0 */ 0x01, 0x00, 0x5A, 0x01, 0x0D, 0x00, 0x00, 0x5A, 0x02, 0x07, 0x00, 0x00, 0xF4, 0x03, 0xFF, 0x0B, +/* 000153B0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x04, 0x02, 0xFF, 0x52, 0x23, +/* 000153C0 */ 0x01, 0x00, 0x02, 0x0C, 0x00, 0x00, 0x00, 0x4C, 0x00, 0x3C, 0x01, 0x00, 0xD0, 0x53, 0x01, 0x00, +/* 000153D0 */ 0x7F, 0x5C, 0x08, 0xC1, 0x83, 0x10, 0x03, 0x02, 0xFE, 0x71, 0x06, 0x46, 0xA2, 0x41, 0xC3, 0x00, +/* 000153E0 */ 0xFE, 0x85, 0x04, 0x62, 0xFF, 0x8C, 0x23, 0x01, 0x00, 0xFF, 0x8C, 0x23, 0x01, 0x00, 0x09, 0xFE, +/* 000153F0 */ 0x00, 0x90, 0x03, 0x01, 0xFF, 0x8C, 0x23, 0x01, 0x00, 0xE2, 0xE2, 0x07, 0x03, 0x07, 0x09, 0x1B, +/* 00015400 */ 0x19, 0x04, 0x01, 0x05, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x08, 0x72, 0x58, 0x05, 0x15, 0x05, +/* 00015410 */ 0x00, 0x03, 0x02, 0xA8, 0x07, 0x45, 0x03, 0x07, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA8, 0x07, 0x45, +/* 00015420 */ 0x04, 0x07, 0x8F, 0x02, 0x02, 0x08, 0x00, 0x00, 0x6D, 0x07, 0x08, 0x00, 0x07, 0x08, 0x00, 0x59, +/* 00015430 */ 0x00, 0x08, 0x5A, 0x01, 0x05, 0x00, 0x00, 0x8F, 0x01, 0x02, 0x09, 0x01, 0x00, 0x5A, 0x02, 0x09, +/* 00015440 */ 0x00, 0x00, 0x8F, 0x01, 0x03, 0x09, 0x02, 0x00, 0x5A, 0x03, 0x09, 0x00, 0x00, 0x8F, 0x01, 0x04, +/* 00015450 */ 0x09, 0x03, 0x00, 0x5A, 0x04, 0x09, 0x00, 0x00, 0x8F, 0x01, 0x05, 0x09, 0x04, 0x00, 0x5A, 0x05, +/* 00015460 */ 0x09, 0x00, 0x00, 0x5A, 0x06, 0x03, 0x00, 0x00, 0x5A, 0x07, 0x04, 0x00, 0x00, 0xF4, 0x08, 0x00, +/* 00015470 */ 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x5A, 0x00, +/* 00015480 */ 0xFF, 0xB4, 0x23, 0x01, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0A, 0x00, +/* 00015490 */ 0x27, 0x00, 0x5A, 0x00, 0x7D, 0x00, 0x00, 0x7F, 0x5C, 0x0E, 0xC1, 0x07, 0x10, 0x03, 0x00, 0xFE, +/* 000154A0 */ 0x3B, 0x06, 0x08, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x26, 0x04, 0x60, 0xFF, 0xFB, 0x14, 0x01, 0x00, +/* 000154B0 */ 0xFF, 0xFB, 0x14, 0x01, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x07, 0x07, 0xFF, 0xFB, 0x14, 0x01, 0x00, +/* 000154C0 */ 0xFE, 0x16, 0x06, 0xFE, 0x16, 0x06, 0x0E, 0x08, 0x12, 0x0A, 0x88, 0x82, 0x03, 0x02, 0x01, 0x0D, +/* 000154D0 */ 0x07, 0x09, 0x09, 0x09, 0x09, 0x01, 0x11, 0x06, 0xFE, 0x94, 0x03, 0x06, 0xFE, 0x2E, 0x04, 0x05, +/* 000154E0 */ 0xFE, 0x81, 0x04, 0x08, 0x0C, 0x0B, 0xFE, 0x4A, 0x02, 0x58, 0x0E, 0x4E, 0x0F, 0x4E, 0x10, 0x2A, +/* 000154F0 */ 0x12, 0x0E, 0x15, 0x0F, 0x00, 0x12, 0x02, 0x8F, 0x03, 0x0D, 0x12, 0x00, 0x00, 0xE3, 0x12, 0x0E, +/* 00015500 */ 0x12, 0x00, 0x0F, 0x24, 0x00, 0x12, 0x8F, 0x03, 0x03, 0x13, 0x01, 0x00, 0x6D, 0x12, 0x13, 0x00, +/* 00015510 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x13, 0x5A, 0x01, 0x08, 0x00, 0x00, 0x5A, 0x02, 0x03, 0x00, 0x00, +/* 00015520 */ 0xF4, 0x03, 0xFF, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x03, 0x36, 0x13, 0x02, 0x00, +/* 00015530 */ 0x4A, 0x13, 0x6D, 0x12, 0x13, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x13, 0x8F, 0x03, 0x0D, 0x14, +/* 00015540 */ 0x00, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x01, 0x0E, 0x02, 0x00, 0xC5, 0x02, 0x14, 0x14, 0x02, 0x00, +/* 00015550 */ 0x5A, 0x01, 0x14, 0x01, 0x00, 0xF4, 0x02, 0x12, 0x12, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, +/* 00015560 */ 0x0F, 0x12, 0x8F, 0x03, 0x36, 0x13, 0x02, 0x00, 0x4A, 0x13, 0x6D, 0x12, 0x13, 0x02, 0x07, 0x02, +/* 00015570 */ 0x00, 0x59, 0x00, 0x13, 0x5A, 0x01, 0x0F, 0x03, 0x00, 0xF4, 0x02, 0x12, 0x12, 0x02, 0x00, 0x00, +/* 00015580 */ 0x00, 0x03, 0x00, 0x0F, 0x25, 0x00, 0x12, 0x8F, 0x03, 0x36, 0x13, 0x02, 0x00, 0x4A, 0x13, 0x6D, +/* 00015590 */ 0x12, 0x13, 0x03, 0x07, 0x02, 0x00, 0x59, 0x00, 0x13, 0x5A, 0x01, 0x0F, 0x04, 0x00, 0xF4, 0x02, +/* 000155A0 */ 0x12, 0x12, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x0F, 0x06, 0x00, 0x12, 0x45, 0x00, 0x04, 0x09, +/* 000155B0 */ 0x7F, 0x01, 0xA8, 0x12, 0x45, 0x10, 0x12, 0x8F, 0x03, 0x03, 0x12, 0x01, 0x00, 0x5F, 0x12, 0x12, +/* 000155C0 */ 0x04, 0x0E, 0xB1, 0x00, 0x12, 0xA8, 0x12, 0x14, 0x03, 0x00, 0x0C, 0x12, 0x09, 0xA7, 0x00, 0xA8, +/* 000155D0 */ 0x12, 0x14, 0x03, 0x00, 0x0D, 0x12, 0x09, 0x9D, 0x00, 0x8F, 0x01, 0x07, 0x12, 0x03, 0x00, 0x4A, +/* 000155E0 */ 0x12, 0x98, 0x12, 0x12, 0x0B, 0x00, 0x00, 0x0E, 0x14, 0x00, 0x12, 0x8F, 0x01, 0x07, 0x12, 0x03, +/* 000155F0 */ 0x00, 0x4A, 0x12, 0x98, 0x12, 0x12, 0x0B, 0x01, 0x00, 0x45, 0x10, 0x12, 0x09, 0x77, 0x00, 0x8F, +/* 00015600 */ 0x03, 0x36, 0x13, 0x02, 0x00, 0x4A, 0x13, 0x6D, 0x12, 0x13, 0x05, 0x07, 0x01, 0x00, 0x59, 0x00, +/* 00015610 */ 0x13, 0xF4, 0x01, 0x12, 0x12, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x45, 0x10, 0x12, 0x8F, 0x01, +/* 00015620 */ 0x05, 0x12, 0x04, 0x00, 0x4A, 0x12, 0x07, 0x04, 0x00, 0x59, 0x00, 0x05, 0x5A, 0x01, 0x10, 0x06, +/* 00015630 */ 0x00, 0xA8, 0x13, 0x5A, 0x02, 0x13, 0x06, 0x00, 0x8F, 0x01, 0x06, 0x13, 0x05, 0x00, 0x4A, 0x13, +/* 00015640 */ 0x07, 0x04, 0x00, 0x59, 0x00, 0x05, 0xA8, 0x14, 0x5A, 0x01, 0x14, 0x07, 0x00, 0x5A, 0x02, 0x09, +/* 00015650 */ 0x07, 0x00, 0x5A, 0x03, 0x0A, 0x07, 0x00, 0xF0, 0x04, 0x13, 0x13, 0x07, 0x00, 0x5A, 0x03, 0x13, +/* 00015660 */ 0x06, 0x00, 0xF0, 0x04, 0xFF, 0x12, 0x06, 0x00, 0x8F, 0x01, 0x07, 0x12, 0x03, 0x00, 0x4A, 0x12, +/* 00015670 */ 0x9D, 0x10, 0x12, 0x0B, 0x00, 0x00, 0x0F, 0x65, 0x00, 0x10, 0x8F, 0x03, 0x36, 0x13, 0x02, 0x00, +/* 00015680 */ 0x4A, 0x13, 0x6D, 0x12, 0x13, 0x06, 0x07, 0x01, 0x00, 0x59, 0x00, 0x13, 0xF4, 0x01, 0x12, 0x12, +/* 00015690 */ 0x06, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x10, 0x12, 0x8F, 0x01, 0x05, 0x12, 0x04, 0x00, 0x4A, +/* 000156A0 */ 0x12, 0x07, 0x04, 0x00, 0x59, 0x00, 0x05, 0x5A, 0x01, 0x10, 0x09, 0x00, 0x5A, 0x02, 0x0C, 0x09, +/* 000156B0 */ 0x00, 0x8F, 0x01, 0x06, 0x13, 0x05, 0x00, 0x4A, 0x13, 0x07, 0x04, 0x00, 0x59, 0x00, 0x05, 0x5A, +/* 000156C0 */ 0x01, 0x0D, 0x0A, 0x00, 0x5A, 0x02, 0x09, 0x0A, 0x00, 0x5A, 0x03, 0x0A, 0x0A, 0x00, 0xF0, 0x04, +/* 000156D0 */ 0x13, 0x13, 0x0A, 0x00, 0x5A, 0x03, 0x13, 0x09, 0x00, 0xF0, 0x04, 0xFF, 0x12, 0x09, 0x00, 0x8F, +/* 000156E0 */ 0x03, 0x03, 0x13, 0x01, 0x00, 0x6D, 0x12, 0x13, 0x07, 0x07, 0x05, 0x00, 0x59, 0x00, 0x13, 0x5A, +/* 000156F0 */ 0x01, 0x10, 0x0B, 0x00, 0x8F, 0x03, 0x24, 0x15, 0x06, 0x00, 0x6D, 0x14, 0x15, 0x08, 0x07, 0x02, +/* 00015700 */ 0x00, 0x59, 0x00, 0x15, 0x5A, 0x01, 0x0E, 0x0C, 0x00, 0xF4, 0x02, 0x14, 0x14, 0x08, 0x00, 0x00, +/* 00015710 */ 0x00, 0x0C, 0x00, 0x5A, 0x02, 0x14, 0x0B, 0x00, 0x5A, 0x03, 0x06, 0x0B, 0x00, 0x5A, 0x04, 0x07, +/* 00015720 */ 0x0B, 0x00, 0xF4, 0x05, 0x00, 0x12, 0x07, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x09, 0x02, 0x00, 0xA8, +/* 00015730 */ 0x00, 0x24, 0x00, 0xFE, 0xB6, 0x02, 0x9C, 0xC4, 0xC1, 0xFE, 0x4D, 0x03, 0x69, 0x69, 0xFE, 0xFC, +/* 00015740 */ 0x01, 0xFE, 0x23, 0x03, 0xFF, 0x70, 0x15, 0x01, 0x00, 0x11, 0x06, 0x00, 0x00, 0x00, 0x17, 0x00, +/* 00015750 */ 0x4B, 0x00, 0x24, 0x00, 0x48, 0x00, 0x38, 0x00, 0x35, 0x00, 0x4A, 0x00, 0x3C, 0x00, 0x06, 0x00, +/* 00015760 */ 0x32, 0x00, 0x05, 0x00, 0x29, 0x00, 0x22, 0x00, 0xC6, 0x00, 0x12, 0x00, 0x7C, 0x00, 0x14, 0x00, +/* 00015770 */ 0x96, 0x00, 0x1F, 0x00, 0x2E, 0x00, 0x4A, 0x00, 0x76, 0x00, 0x0E, 0x00, 0x70, 0x00, 0x04, 0x00, +/* 00015780 */ 0x24, 0x00, 0x1F, 0x00, 0x2A, 0x00, 0x46, 0x00, 0x79, 0x00, 0x52, 0x00, 0x8E, 0x00, 0x00, 0x7F, +/* 00015790 */ 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x2B, 0x06, 0x26, 0xA2, 0x41, 0xC1, 0x00, 0xFE, +/* 000157A0 */ 0x80, 0x04, 0x5F, 0xFF, 0x90, 0x12, 0x01, 0x00, 0xFF, 0x90, 0x12, 0x01, 0x00, 0x01, 0xFE, 0x00, +/* 000157B0 */ 0x90, 0x03, 0x03, 0xFF, 0x90, 0x12, 0x01, 0x00, 0xFD, 0xFD, 0x05, 0x04, 0x07, 0x06, 0x22, 0x22, +/* 000157C0 */ 0x03, 0x04, 0x02, 0x04, 0x04, 0x04, 0x04, 0x06, 0x0B, 0x0C, 0x99, 0x8F, 0x03, 0x36, 0x08, 0x00, +/* 000157D0 */ 0x00, 0x4A, 0x08, 0x6D, 0x07, 0x08, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x08, 0x5A, 0x01, 0x05, +/* 000157E0 */ 0x00, 0x00, 0xF4, 0x02, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x25, 0x00, 0x07, +/* 000157F0 */ 0x8F, 0x03, 0x36, 0x08, 0x00, 0x00, 0x4A, 0x08, 0x6D, 0x07, 0x08, 0x01, 0x07, 0x02, 0x00, 0x59, +/* 00015800 */ 0x00, 0x08, 0x5A, 0x01, 0x05, 0x01, 0x00, 0xF4, 0x02, 0x07, 0x07, 0x01, 0x00, 0x00, 0x00, 0x01, +/* 00015810 */ 0x00, 0x0F, 0x1A, 0x00, 0x07, 0x8F, 0x03, 0x03, 0x08, 0x01, 0x00, 0x6D, 0x07, 0x08, 0x02, 0x07, +/* 00015820 */ 0x01, 0x00, 0x59, 0x00, 0x08, 0xF4, 0x01, 0xFF, 0x07, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x8F, +/* 00015830 */ 0x03, 0x03, 0x08, 0x01, 0x00, 0x6D, 0x07, 0x08, 0x03, 0x07, 0x05, 0x00, 0x59, 0x00, 0x08, 0x5A, +/* 00015840 */ 0x01, 0x04, 0x03, 0x00, 0x5A, 0x02, 0x05, 0x03, 0x00, 0x5A, 0x03, 0x02, 0x03, 0x00, 0x5A, 0x04, +/* 00015850 */ 0x03, 0x03, 0x00, 0xF4, 0x05, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x09, 0x02, 0x00, +/* 00015860 */ 0xA8, 0x00, 0x24, 0x00, 0xC4, 0xC1, 0xFE, 0xB9, 0x02, 0xFE, 0xFC, 0x01, 0xFF, 0xB0, 0x12, 0x01, +/* 00015870 */ 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x4A, 0x00, 0x34, 0x00, 0x1A, 0x00, 0x38, 0x00, 0x33, 0x00, +/* 00015880 */ 0x70, 0x00, 0x00, 0x7E, 0x5D, 0x18, 0xC1, 0x43, 0x5A, 0x0B, 0x00, 0xFE, 0xFC, 0x05, 0x22, 0xA2, +/* 00015890 */ 0x41, 0xC1, 0x00, 0xFE, 0x2A, 0x04, 0x5A, 0xFF, 0x67, 0x0B, 0x01, 0x00, 0xFF, 0x67, 0x0B, 0x01, +/* 000158A0 */ 0x00, 0x04, 0xFE, 0x00, 0x90, 0x04, 0x04, 0xFF, 0x67, 0x0B, 0x01, 0x00, 0xFE, 0x00, 0x07, 0xFE, +/* 000158B0 */ 0x00, 0x07, 0x02, 0xFE, 0xE0, 0x01, 0xFE, 0x7F, 0x04, 0x0B, 0x0F, 0x15, 0x04, 0x68, 0x67, 0x03, +/* 000158C0 */ 0x06, 0x04, 0x04, 0x06, 0x06, 0x06, 0x06, 0x01, 0x12, 0x13, 0x14, 0x15, 0x07, 0x0B, 0x06, 0xFE, +/* 000158D0 */ 0x42, 0x04, 0x06, 0xFE, 0x3F, 0x04, 0x06, 0xFE, 0x33, 0x04, 0x06, 0xFE, 0x35, 0x04, 0x06, 0xFE, +/* 000158E0 */ 0x36, 0x04, 0x06, 0xFE, 0x37, 0x04, 0x05, 0xFE, 0x44, 0x04, 0x06, 0xFE, 0x38, 0x04, 0x06, 0xFE, +/* 000158F0 */ 0x39, 0x04, 0x06, 0xFE, 0x3A, 0x04, 0x06, 0xFE, 0x40, 0x04, 0xFE, 0xB9, 0x01, 0x96, 0x02, 0x0F, +/* 00015900 */ 0x4E, 0x16, 0x96, 0x03, 0x16, 0x93, 0x02, 0x16, 0x00, 0x00, 0xA8, 0x17, 0x14, 0x03, 0x00, 0x16, +/* 00015910 */ 0x17, 0x09, 0x06, 0x00, 0x45, 0x16, 0x02, 0x09, 0x27, 0x00, 0x8F, 0x03, 0x24, 0x18, 0x01, 0x00, +/* 00015920 */ 0x6D, 0x17, 0x18, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x18, 0x93, 0x02, 0x19, 0x00, 0x00, 0x5A, +/* 00015930 */ 0x01, 0x19, 0x00, 0x00, 0xF4, 0x02, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x16, +/* 00015940 */ 0x17, 0x96, 0x02, 0x16, 0x8F, 0x03, 0x36, 0x17, 0x02, 0x00, 0x4A, 0x17, 0x6D, 0x16, 0x17, 0x01, +/* 00015950 */ 0x07, 0x02, 0x00, 0x59, 0x00, 0x17, 0x93, 0x02, 0x18, 0x00, 0x00, 0x5A, 0x01, 0x18, 0x01, 0x00, +/* 00015960 */ 0xF4, 0x02, 0x16, 0x16, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x96, 0x02, 0x16, 0x96, 0x03, 0x03, +/* 00015970 */ 0x14, 0x08, 0x00, 0x10, 0x04, 0x14, 0x03, 0x00, 0x10, 0x05, 0x09, 0x3E, 0x00, 0x8F, 0x03, 0x36, +/* 00015980 */ 0x17, 0x02, 0x00, 0x4A, 0x17, 0x6D, 0x16, 0x17, 0x02, 0x07, 0x03, 0x00, 0x59, 0x00, 0x17, 0xD0, +/* 00015990 */ 0x18, 0x04, 0x00, 0x00, 0xA1, 0x00, 0x06, 0x18, 0xA1, 0x01, 0x07, 0x18, 0xA1, 0x02, 0x08, 0x18, +/* 000159A0 */ 0xA1, 0x03, 0x09, 0x18, 0x5A, 0x01, 0x18, 0x02, 0x00, 0xD6, 0x00, 0x18, 0x5A, 0x02, 0x18, 0x02, +/* 000159B0 */ 0x00, 0xF4, 0x03, 0xFF, 0x16, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x14, 0x08, 0x00, 0x10, 0x0A, +/* 000159C0 */ 0x14, 0x03, 0x00, 0x10, 0x05, 0x09, 0x3A, 0x00, 0x8F, 0x03, 0x36, 0x17, 0x02, 0x00, 0x4A, 0x17, +/* 000159D0 */ 0x6D, 0x16, 0x17, 0x03, 0x07, 0x03, 0x00, 0x59, 0x00, 0x17, 0xD0, 0x18, 0x03, 0x01, 0x00, 0xA1, +/* 000159E0 */ 0x00, 0x0B, 0x18, 0xA1, 0x01, 0x0C, 0x18, 0xA1, 0x02, 0x0D, 0x18, 0x5A, 0x01, 0x18, 0x03, 0x00, +/* 000159F0 */ 0xD6, 0x01, 0x18, 0x5A, 0x02, 0x18, 0x03, 0x00, 0xF4, 0x03, 0xFF, 0x16, 0x03, 0x00, 0x00, 0x00, +/* 00015A00 */ 0x03, 0x00, 0x93, 0x03, 0x16, 0x03, 0x00, 0x14, 0x03, 0x00, 0x16, 0x03, 0x09, 0x47, 0x00, 0x14, +/* 00015A10 */ 0x08, 0x00, 0x11, 0x04, 0x14, 0x03, 0x00, 0x11, 0x0E, 0x09, 0x3A, 0x00, 0x8F, 0x03, 0x36, 0x17, +/* 00015A20 */ 0x02, 0x00, 0x4A, 0x17, 0x6D, 0x16, 0x17, 0x04, 0x07, 0x03, 0x00, 0x59, 0x00, 0x17, 0xD0, 0x18, +/* 00015A30 */ 0x03, 0x02, 0x00, 0xA1, 0x00, 0x07, 0x18, 0xA1, 0x01, 0x08, 0x18, 0xA1, 0x02, 0x09, 0x18, 0x5A, +/* 00015A40 */ 0x01, 0x18, 0x04, 0x00, 0xD6, 0x02, 0x18, 0x5A, 0x02, 0x18, 0x04, 0x00, 0xF4, 0x03, 0xFF, 0x16, +/* 00015A50 */ 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x93, 0x03, 0x16, 0x03, 0x00, 0x14, 0x03, 0x00, 0x16, 0x03, +/* 00015A60 */ 0x09, 0x47, 0x00, 0x14, 0x08, 0x00, 0x11, 0x0A, 0x14, 0x03, 0x00, 0x11, 0x0E, 0x09, 0x3A, 0x00, +/* 00015A70 */ 0x8F, 0x03, 0x36, 0x17, 0x02, 0x00, 0x4A, 0x17, 0x6D, 0x16, 0x17, 0x05, 0x07, 0x03, 0x00, 0x59, +/* 00015A80 */ 0x00, 0x17, 0xD0, 0x18, 0x03, 0x03, 0x00, 0xA1, 0x00, 0x0B, 0x18, 0xA1, 0x01, 0x0C, 0x18, 0xA1, +/* 00015A90 */ 0x02, 0x0D, 0x18, 0x5A, 0x01, 0x18, 0x05, 0x00, 0xD6, 0x03, 0x18, 0x5A, 0x02, 0x18, 0x05, 0x00, +/* 00015AA0 */ 0xF4, 0x03, 0xFF, 0x16, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x93, 0x02, 0x00, 0x00, 0x00, 0x09, +/* 00015AB0 */ 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x21, 0x03, 0x69, 0x93, 0x93, 0x93, 0x93, 0xFF, 0x9C, +/* 00015AC0 */ 0x0B, 0x01, 0x00, 0x0D, 0x08, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x51, 0x00, 0x29, 0x00, 0x29, 0x00, +/* 00015AD0 */ 0x03, 0x00, 0x25, 0x00, 0x0D, 0x00, 0x41, 0x00, 0x3E, 0x00, 0x14, 0x01, 0x0D, 0x00, 0x41, 0x00, +/* 00015AE0 */ 0x3A, 0x00, 0x0D, 0x01, 0x1A, 0x00, 0x5C, 0x00, 0x3A, 0x00, 0x5A, 0x01, 0x1A, 0x00, 0x5C, 0x00, +/* 00015AF0 */ 0x3A, 0x00, 0x5E, 0x01, 0x0A, 0x00, 0x18, 0x00, 0x00, 0x3A, 0x5D, 0x01, 0x00, 0xCB, 0x5C, 0x01, +/* 00015B00 */ 0x00, 0xEA, 0x5B, 0x01, 0x00, 0x09, 0x5B, 0x01, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x13, 0x10, 0x43, +/* 00015B10 */ 0x00, 0xFE, 0x1E, 0x06, 0x38, 0xA2, 0x41, 0xD1, 0x00, 0x5E, 0xFF, 0x18, 0x11, 0x01, 0x00, 0xFF, +/* 00015B20 */ 0x18, 0x11, 0x01, 0x00, 0x41, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0x18, 0x11, 0x01, 0x00, 0xFE, +/* 00015B30 */ 0x19, 0x01, 0xFE, 0x19, 0x01, 0x05, 0x09, 0x0B, 0x05, 0x12, 0x12, 0x04, 0x01, 0x02, 0x05, 0x05, +/* 00015B40 */ 0x05, 0x05, 0x01, 0x0A, 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, 0xF8, 0x03, 0x06, 0xFE, 0x2B, 0x03, +/* 00015B50 */ 0x0B, 0x06, 0xFE, 0x2C, 0x03, 0x06, 0xFE, 0x2D, 0x03, 0x07, 0x52, 0x8F, 0x04, 0x36, 0x0C, 0x00, +/* 00015B60 */ 0x00, 0x4A, 0x0C, 0x6D, 0x0B, 0x0C, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x0C, 0x8F, 0x01, 0x02, +/* 00015B70 */ 0x0D, 0x01, 0x00, 0x5A, 0x01, 0x0D, 0x00, 0x00, 0x5A, 0x02, 0x09, 0x00, 0x00, 0xCE, 0x00, 0x00, +/* 00015B80 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x7B, 0x03, 0x0D, 0x01, 0x7B, 0x05, +/* 00015B90 */ 0x0D, 0x02, 0x7B, 0x05, 0x0D, 0x03, 0x7B, 0x05, 0x0D, 0x04, 0x5A, 0x03, 0x0D, 0x00, 0x00, 0xF4, +/* 00015BA0 */ 0x04, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x01, 0x18, 0x00, +/* 00015BB0 */ 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, +/* 00015BC0 */ 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0xFE, 0x9C, 0x01, 0xFE, +/* 00015BD0 */ 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFF, 0x3E, 0x11, 0x01, 0x00, +/* 00015BE0 */ 0x02, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0xF2, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x13, 0x10, +/* 00015BF0 */ 0x43, 0x00, 0xFE, 0x13, 0x06, 0x34, 0xA2, 0x41, 0xD1, 0x00, 0x5D, 0xFF, 0x5E, 0x0F, 0x01, 0x00, +/* 00015C00 */ 0xFF, 0x5E, 0x0F, 0x01, 0x00, 0x41, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0x5E, 0x0F, 0x01, 0x00, +/* 00015C10 */ 0xFE, 0x19, 0x01, 0xFE, 0x19, 0x01, 0x05, 0x09, 0x0B, 0x05, 0x12, 0x12, 0x04, 0x01, 0x02, 0x05, +/* 00015C20 */ 0x05, 0x05, 0x05, 0x01, 0x0A, 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, 0xF8, 0x03, 0x06, 0xFE, 0x2B, +/* 00015C30 */ 0x03, 0x0B, 0x06, 0xFE, 0x2C, 0x03, 0x06, 0xFE, 0x2D, 0x03, 0x07, 0x52, 0x8F, 0x04, 0x36, 0x0C, +/* 00015C40 */ 0x00, 0x00, 0x4A, 0x0C, 0x6D, 0x0B, 0x0C, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x0C, 0x8F, 0x01, +/* 00015C50 */ 0x02, 0x0D, 0x01, 0x00, 0x5A, 0x01, 0x0D, 0x00, 0x00, 0x5A, 0x02, 0x09, 0x00, 0x00, 0xCE, 0x00, +/* 00015C60 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x7B, 0x03, 0x0D, 0x01, 0x7B, +/* 00015C70 */ 0x05, 0x0D, 0x02, 0x7B, 0x05, 0x0D, 0x03, 0x7B, 0x05, 0x0D, 0x04, 0x5A, 0x03, 0x0D, 0x00, 0x00, +/* 00015C80 */ 0xF4, 0x04, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x01, 0x18, +/* 00015C90 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, +/* 00015CA0 */ 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0xFE, 0x9C, 0x01, +/* 00015CB0 */ 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFF, 0x84, 0x0F, 0x01, +/* 00015CC0 */ 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0xF2, 0x00, 0x00, 0x7F, 0x4C, 0x02, 0x01, 0x00, +/* 00015CD0 */ 0x10, 0x03, 0x00, 0xFE, 0x0A, 0x06, 0x38, 0xA2, 0x41, 0xD1, 0x00, 0x5C, 0xFF, 0xF9, 0x0D, 0x01, +/* 00015CE0 */ 0x00, 0xFF, 0xF9, 0x0D, 0x01, 0x00, 0x41, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0xF9, 0x0D, 0x01, +/* 00015CF0 */ 0x00, 0xC7, 0xC7, 0x04, 0x03, 0x06, 0x0B, 0x0A, 0x04, 0x01, 0x01, 0x05, 0x0C, 0x25, 0x4E, 0x04, +/* 00015D00 */ 0x8F, 0x01, 0x02, 0x06, 0x00, 0x00, 0x98, 0x06, 0x06, 0x03, 0x00, 0x00, 0x45, 0x04, 0x06, 0xA8, +/* 00015D10 */ 0x06, 0x15, 0x03, 0x00, 0x04, 0x06, 0x09, 0x06, 0x00, 0x01, 0x43, 0x01, 0x01, 0x03, 0x02, 0xA8, +/* 00015D20 */ 0x00, 0x24, 0x00, 0xFF, 0x1F, 0x0E, 0x01, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x31, +/* 00015D30 */ 0x00, 0x0A, 0x00, 0x33, 0x00, 0x08, 0x00, 0x3C, 0x00, 0x00, 0x7F, 0x4C, 0x02, 0x01, 0x00, 0x10, +/* 00015D40 */ 0x03, 0x00, 0xFE, 0x01, 0x06, 0x3F, 0xA2, 0x41, 0xD1, 0x00, 0x5B, 0xFF, 0xAB, 0x0C, 0x01, 0x00, +/* 00015D50 */ 0xFF, 0xAB, 0x0C, 0x01, 0x00, 0x41, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0xAB, 0x0C, 0x01, 0x00, +/* 00015D60 */ 0xC7, 0xC7, 0x04, 0x03, 0x06, 0x0B, 0x0A, 0x04, 0x01, 0x01, 0x05, 0x0C, 0x25, 0x4E, 0x04, 0x8F, +/* 00015D70 */ 0x01, 0x02, 0x06, 0x00, 0x00, 0x98, 0x06, 0x06, 0x03, 0x00, 0x00, 0x45, 0x04, 0x06, 0xA8, 0x06, +/* 00015D80 */ 0x15, 0x03, 0x00, 0x04, 0x06, 0x09, 0x06, 0x00, 0x01, 0x43, 0x01, 0x01, 0x03, 0x02, 0xA8, 0x00, +/* 00015D90 */ 0x24, 0x00, 0xFF, 0xD1, 0x0C, 0x01, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x31, 0x00, +/* 00015DA0 */ 0x0A, 0x00, 0x33, 0x00, 0x08, 0x00, 0x3C, 0x00, 0x00, 0x7F, 0x5C, 0x18, 0xC1, 0x03, 0x10, 0x03, +/* 00015DB0 */ 0x00, 0xFE, 0xBD, 0x05, 0x29, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x29, 0x04, 0x59, 0xFE, 0x1C, 0xFF, +/* 00015DC0 */ 0xFE, 0x1C, 0xFF, 0x01, 0xFE, 0x00, 0x90, 0x04, 0x04, 0xFE, 0x1C, 0xFF, 0xFE, 0xD9, 0x09, 0xFE, +/* 00015DD0 */ 0xD9, 0x09, 0x0F, 0x1D, 0x29, 0x07, 0xB4, 0xA4, 0x03, 0x0D, 0x04, 0x08, 0x14, 0x14, 0x14, 0x14, +/* 00015DE0 */ 0x28, 0x08, 0x06, 0xFE, 0x3F, 0x04, 0x06, 0xFE, 0x42, 0x04, 0x06, 0xFE, 0xE0, 0x03, 0x06, 0xFE, +/* 00015DF0 */ 0xA3, 0x03, 0x05, 0xFE, 0x9C, 0x03, 0x05, 0xFE, 0xDF, 0x03, 0x06, 0xFE, 0x55, 0x04, 0x06, 0xFE, +/* 00015E00 */ 0xA2, 0x03, 0x06, 0xFE, 0x73, 0x04, 0x06, 0xFE, 0x6F, 0x04, 0x06, 0xFE, 0x6D, 0x04, 0x06, 0xFE, +/* 00015E10 */ 0x6E, 0x04, 0x06, 0xFE, 0x70, 0x04, 0x07, 0x06, 0xFE, 0x17, 0x04, 0x06, 0xFE, 0x74, 0x04, 0x06, +/* 00015E20 */ 0xFE, 0x75, 0x04, 0x05, 0xFE, 0x76, 0x04, 0x06, 0xFE, 0x77, 0x04, 0x05, 0xFE, 0x78, 0x04, 0x05, +/* 00015E30 */ 0xFE, 0x79, 0x04, 0x05, 0xFE, 0x7A, 0x04, 0x06, 0xFE, 0x7B, 0x04, 0x05, 0xFE, 0x7C, 0x04, 0x05, +/* 00015E40 */ 0xFE, 0x7D, 0x04, 0x0B, 0xFE, 0xE0, 0x02, 0x4E, 0x20, 0x4E, 0x21, 0x4E, 0x22, 0x4E, 0x23, 0x4E, +/* 00015E50 */ 0x24, 0x4E, 0x25, 0x4E, 0x26, 0x4E, 0x27, 0x8F, 0x02, 0x12, 0x29, 0x00, 0x00, 0x4A, 0x29, 0x07, +/* 00015E60 */ 0x02, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x1E, 0x00, 0x00, 0xF0, 0x02, 0x29, 0x29, 0x00, 0x00, +/* 00015E70 */ 0x45, 0x20, 0x29, 0x8F, 0x01, 0x06, 0x29, 0x01, 0x00, 0x4A, 0x29, 0x07, 0x04, 0x00, 0x59, 0x00, +/* 00015E80 */ 0x02, 0x5A, 0x01, 0x1F, 0x01, 0x00, 0x5A, 0x02, 0x03, 0x01, 0x00, 0x5A, 0x03, 0x04, 0x01, 0x00, +/* 00015E90 */ 0xF0, 0x04, 0x29, 0x29, 0x01, 0x00, 0x45, 0x1F, 0x29, 0x8F, 0x03, 0x36, 0x2A, 0x02, 0x00, 0x4A, +/* 00015EA0 */ 0x2A, 0x6D, 0x29, 0x2A, 0x00, 0x07, 0x01, 0x00, 0x59, 0x00, 0x2A, 0xF4, 0x01, 0x29, 0x29, 0x00, +/* 00015EB0 */ 0x00, 0x00, 0x00, 0x02, 0x00, 0x45, 0x21, 0x29, 0x45, 0x29, 0x21, 0x8F, 0x02, 0x02, 0x2A, 0x03, +/* 00015EC0 */ 0x00, 0x4A, 0x2A, 0x07, 0x06, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x1F, 0x03, 0x00, 0x5A, 0x02, +/* 00015ED0 */ 0x05, 0x03, 0x00, 0x5A, 0x03, 0x06, 0x03, 0x00, 0xD0, 0x2B, 0x02, 0x00, 0x00, 0xA1, 0x00, 0x07, +/* 00015EE0 */ 0x2B, 0xA1, 0x01, 0x08, 0x2B, 0x5A, 0x04, 0x2B, 0x03, 0x00, 0x5A, 0x05, 0x08, 0x03, 0x00, 0xF0, +/* 00015EF0 */ 0x06, 0x2A, 0x2A, 0x03, 0x00, 0x77, 0x2A, 0x29, 0x01, 0x8F, 0x02, 0x02, 0x29, 0x03, 0x00, 0x4A, +/* 00015F00 */ 0x29, 0x07, 0x06, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x1F, 0x04, 0x00, 0x5A, 0x02, 0x09, 0x04, +/* 00015F10 */ 0x00, 0x5A, 0x03, 0x0A, 0x04, 0x00, 0xA8, 0x2A, 0x5A, 0x04, 0x2A, 0x04, 0x00, 0xA8, 0x2A, 0x5A, +/* 00015F20 */ 0x05, 0x2A, 0x04, 0x00, 0xF0, 0x06, 0x29, 0x29, 0x04, 0x00, 0x45, 0x22, 0x29, 0x8F, 0x02, 0x02, +/* 00015F30 */ 0x29, 0x03, 0x00, 0x4A, 0x29, 0x07, 0x06, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x1F, 0x05, 0x00, +/* 00015F40 */ 0x5A, 0x02, 0x0B, 0x05, 0x00, 0x5A, 0x03, 0x06, 0x05, 0x00, 0xD0, 0x2A, 0x04, 0x01, 0x00, 0xA1, +/* 00015F50 */ 0x00, 0x0C, 0x2A, 0xA1, 0x01, 0x0D, 0x2A, 0xA1, 0x02, 0x0E, 0x2A, 0xA1, 0x03, 0x0F, 0x2A, 0x5A, +/* 00015F60 */ 0x04, 0x2A, 0x05, 0x00, 0xA8, 0x2A, 0x5A, 0x05, 0x2A, 0x05, 0x00, 0xF0, 0x06, 0x29, 0x29, 0x05, +/* 00015F70 */ 0x00, 0x45, 0x23, 0x29, 0xA8, 0x29, 0x15, 0x03, 0x00, 0x22, 0x29, 0x09, 0x03, 0x00, 0x45, 0x23, +/* 00015F80 */ 0x10, 0x77, 0x23, 0x21, 0x02, 0x8F, 0x02, 0x0C, 0x29, 0x04, 0x00, 0x4A, 0x29, 0x07, 0x05, 0x00, +/* 00015F90 */ 0x59, 0x00, 0x02, 0x8F, 0x03, 0x03, 0x2A, 0x05, 0x00, 0x5F, 0x2A, 0x2A, 0x03, 0x5A, 0x01, 0x2A, +/* 00015FA0 */ 0x06, 0x00, 0x5A, 0x02, 0x20, 0x06, 0x00, 0x5A, 0x03, 0x21, 0x06, 0x00, 0xD0, 0x2A, 0x03, 0x02, +/* 00015FB0 */ 0x00, 0xA1, 0x00, 0x11, 0x2A, 0xA1, 0x01, 0x12, 0x2A, 0xA1, 0x02, 0x13, 0x2A, 0x5A, 0x04, 0x2A, +/* 00015FC0 */ 0x06, 0x00, 0xF0, 0x05, 0x29, 0x29, 0x06, 0x00, 0x45, 0x24, 0x29, 0x5F, 0x29, 0x24, 0x04, 0x77, +/* 00015FD0 */ 0x29, 0x1D, 0x05, 0x5F, 0x29, 0x24, 0x06, 0x77, 0x29, 0x1D, 0x07, 0x5F, 0x29, 0x24, 0x08, 0x77, +/* 00015FE0 */ 0x29, 0x1D, 0x09, 0x5F, 0x29, 0x24, 0x0A, 0x77, 0x29, 0x1D, 0x0B, 0x5F, 0x29, 0x24, 0x0C, 0x45, +/* 00015FF0 */ 0x25, 0x29, 0x5F, 0x29, 0x1F, 0x0D, 0x45, 0x26, 0x29, 0xA8, 0x29, 0x14, 0x03, 0x00, 0x26, 0x29, +/* 00016000 */ 0x09, 0x20, 0x00, 0x8F, 0x03, 0x03, 0x2A, 0x05, 0x00, 0x6D, 0x29, 0x2A, 0x0E, 0x07, 0x01, 0x00, +/* 00016010 */ 0x59, 0x00, 0x2A, 0xF4, 0x01, 0x29, 0x29, 0x0E, 0x00, 0x00, 0x00, 0x07, 0x00, 0x45, 0x26, 0x29, +/* 00016020 */ 0x09, 0x22, 0x00, 0x8F, 0x03, 0x24, 0x2A, 0x06, 0x00, 0x6D, 0x29, 0x2A, 0x0F, 0x07, 0x02, 0x00, +/* 00016030 */ 0x59, 0x00, 0x2A, 0x5A, 0x01, 0x26, 0x08, 0x00, 0xF4, 0x02, 0x29, 0x29, 0x0F, 0x00, 0x00, 0x00, +/* 00016040 */ 0x08, 0x00, 0x45, 0x26, 0x29, 0x8F, 0x03, 0x03, 0x2A, 0x05, 0x00, 0x6D, 0x29, 0x2A, 0x10, 0x07, +/* 00016050 */ 0x02, 0x00, 0x59, 0x00, 0x2A, 0x5A, 0x01, 0x26, 0x09, 0x00, 0xF4, 0x02, 0x29, 0x29, 0x10, 0x00, +/* 00016060 */ 0x00, 0x00, 0x09, 0x00, 0x45, 0x27, 0x29, 0xA8, 0x29, 0x14, 0x08, 0x00, 0x27, 0x29, 0x14, 0x03, +/* 00016070 */ 0x00, 0x27, 0x14, 0x09, 0x2C, 0x00, 0x8F, 0x03, 0x03, 0x2A, 0x05, 0x00, 0x6D, 0x29, 0x2A, 0x11, +/* 00016080 */ 0x07, 0x04, 0x00, 0x59, 0x00, 0x2A, 0x5A, 0x01, 0x26, 0x0A, 0x00, 0x5A, 0x02, 0x15, 0x0A, 0x00, +/* 00016090 */ 0x5A, 0x03, 0x16, 0x0A, 0x00, 0xF4, 0x04, 0xFF, 0x29, 0x11, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x09, +/* 000160A0 */ 0x16, 0x00, 0x14, 0x08, 0x00, 0x27, 0x17, 0x14, 0x03, 0x00, 0x27, 0x18, 0x09, 0x06, 0x00, 0x45, +/* 000160B0 */ 0x26, 0x19, 0x09, 0x03, 0x00, 0x45, 0x26, 0x27, 0x77, 0x26, 0x1D, 0x12, 0x8F, 0x02, 0x02, 0x29, +/* 000160C0 */ 0x03, 0x00, 0x4A, 0x29, 0x07, 0x06, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x1F, 0x0B, 0x00, 0x5A, +/* 000160D0 */ 0x02, 0x1A, 0x0B, 0x00, 0x5A, 0x03, 0x06, 0x0B, 0x00, 0xD0, 0x2A, 0x02, 0x03, 0x00, 0xA1, 0x00, +/* 000160E0 */ 0x1B, 0x2A, 0xA1, 0x01, 0x08, 0x2A, 0x5A, 0x04, 0x2A, 0x0B, 0x00, 0x5A, 0x05, 0x08, 0x0B, 0x00, +/* 000160F0 */ 0xF0, 0x06, 0xFF, 0x29, 0x0B, 0x00, 0x8F, 0x01, 0x04, 0x29, 0x07, 0x00, 0x4A, 0x29, 0x07, 0x04, +/* 00016100 */ 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x1D, 0x0C, 0x00, 0x5A, 0x02, 0x1F, 0x0C, 0x00, 0x5A, 0x03, +/* 00016110 */ 0x22, 0x0C, 0x00, 0xF0, 0x04, 0xFF, 0x29, 0x0C, 0x00, 0x77, 0x1C, 0x1D, 0x13, 0x45, 0x00, 0x1D, +/* 00016120 */ 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x69, 0xFE, 0x0E, 0x02, 0xFE, 0x1B, 0x02, 0xFE, 0xEF, +/* 00016130 */ 0x01, 0xFE, 0x0D, 0x02, 0xFE, 0x0D, 0x02, 0xFE, 0x1A, 0x02, 0xFE, 0x6B, 0x02, 0xFE, 0x1B, 0x02, +/* 00016140 */ 0xFE, 0x73, 0x04, 0xFE, 0x19, 0x02, 0xFE, 0x49, 0x02, 0xFE, 0x9D, 0x03, 0xFE, 0x74, 0x02, 0xFE, +/* 00016150 */ 0xFE, 0x01, 0xFE, 0x22, 0x03, 0xFE, 0xFD, 0x01, 0xFE, 0xAC, 0x02, 0xFE, 0x74, 0x02, 0xFE, 0x7E, +/* 00016160 */ 0x04, 0xFE, 0x56, 0xFF, 0x1F, 0x10, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x46, 0x00, 0x26, 0x00, 0x42, +/* 00016170 */ 0x00, 0x1F, 0x00, 0x24, 0x00, 0x41, 0x00, 0x30, 0x01, 0x34, 0x00, 0x5A, 0x00, 0x47, 0x00, 0x70, +/* 00016180 */ 0x00, 0x0A, 0x00, 0x2C, 0x00, 0x03, 0x00, 0x2C, 0x00, 0x04, 0x00, 0x21, 0x00, 0x46, 0x00, 0x6F, +/* 00016190 */ 0x00, 0x08, 0x00, 0x2E, 0x00, 0x08, 0x00, 0x2C, 0x00, 0x08, 0x00, 0x2D, 0x00, 0x08, 0x00, 0x34, +/* 000161A0 */ 0x00, 0x07, 0x00, 0x37, 0x00, 0x07, 0x00, 0x27, 0x00, 0x0A, 0x00, 0x28, 0x00, 0x20, 0x00, 0x49, +/* 000161B0 */ 0x00, 0x22, 0x00, 0xEF, 0x00, 0x22, 0x00, 0x4E, 0x00, 0x0F, 0x00, 0x52, 0x00, 0x2C, 0x00, 0x74, +/* 000161C0 */ 0x00, 0x0D, 0x00, 0x4E, 0x00, 0x06, 0x00, 0x31, 0x00, 0x03, 0x00, 0x2D, 0x00, 0x04, 0x00, 0x64, +/* 000161D0 */ 0x00, 0x3A, 0x00, 0xD3, 0x00, 0x23, 0x00, 0x43, 0x00, 0x04, 0x00, 0x3E, 0x00, 0x08, 0x00, 0x1F, +/* 000161E0 */ 0x00, 0x00, 0x7E, 0x4D, 0x00, 0xC0, 0x13, 0x1A, 0x4B, 0x00, 0xFE, 0x15, 0x05, 0x26, 0xA0, 0x41, +/* 000161F0 */ 0xD1, 0x00, 0x55, 0xFE, 0xD5, 0xDE, 0xFE, 0xD5, 0xDE, 0x01, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFE, +/* 00016200 */ 0xD5, 0xDE, 0xFE, 0x58, 0x1E, 0xFE, 0x58, 0x1E, 0x06, 0xFE, 0x49, 0x04, 0xFE, 0x4A, 0x04, 0xFE, +/* 00016210 */ 0x4B, 0x04, 0xFE, 0x4C, 0x04, 0xFE, 0x4D, 0x04, 0xFE, 0x4E, 0x04, 0x04, 0x39, 0x3C, 0x51, 0x51, +/* 00016220 */ 0x03, 0x34, 0x34, 0x34, 0x34, 0x05, 0x39, 0x3A, 0x3B, 0x06, 0xFE, 0x33, 0x04, 0x06, 0xFE, 0x4F, +/* 00016230 */ 0x04, 0x06, 0xFE, 0x34, 0x04, 0x06, 0xFE, 0x50, 0x04, 0x06, 0xFE, 0x35, 0x04, 0x06, 0xFE, 0x51, +/* 00016240 */ 0x04, 0x06, 0xFE, 0x36, 0x04, 0x06, 0xFE, 0x52, 0x04, 0x06, 0xFE, 0x37, 0x04, 0x06, 0xFE, 0x53, +/* 00016250 */ 0x04, 0x06, 0xFE, 0x38, 0x04, 0x06, 0xFE, 0x54, 0x04, 0x06, 0xFE, 0x55, 0x04, 0x06, 0xFE, 0x56, +/* 00016260 */ 0x04, 0x06, 0xFE, 0x57, 0x04, 0x06, 0xFE, 0x58, 0x04, 0x06, 0xFE, 0x39, 0x04, 0x06, 0xFE, 0x59, +/* 00016270 */ 0x04, 0x06, 0xFE, 0x3A, 0x04, 0x06, 0xFE, 0x5A, 0x04, 0x06, 0xFE, 0x3B, 0x04, 0x06, 0xFE, 0x5B, +/* 00016280 */ 0x04, 0x07, 0x06, 0xFE, 0x5C, 0x04, 0x06, 0xFE, 0x5D, 0x04, 0x06, 0xFE, 0xD0, 0x03, 0x06, 0xFE, +/* 00016290 */ 0x5E, 0x04, 0x06, 0xFE, 0x5F, 0x04, 0x06, 0xFE, 0x60, 0x04, 0x06, 0xFE, 0x61, 0x04, 0x06, 0xFE, +/* 000162A0 */ 0x62, 0x04, 0x06, 0xFE, 0x63, 0x04, 0x06, 0xFE, 0x64, 0x04, 0x06, 0xFE, 0x65, 0x04, 0x06, 0xFE, +/* 000162B0 */ 0x66, 0x04, 0x06, 0xFE, 0x67, 0x04, 0x06, 0xFE, 0xF8, 0x03, 0x01, 0x01, 0x06, 0xFE, 0x32, 0x04, +/* 000162C0 */ 0x01, 0x02, 0x06, 0xFE, 0x30, 0x04, 0x01, 0x03, 0x06, 0xFE, 0x31, 0x04, 0x01, 0x04, 0x06, 0xFE, +/* 000162D0 */ 0x2F, 0x04, 0x01, 0x05, 0x06, 0xFE, 0x68, 0x04, 0x06, 0xFE, 0x69, 0x04, 0x06, 0xFE, 0x6A, 0x04, +/* 000162E0 */ 0x06, 0xFE, 0x6B, 0x04, 0x06, 0xFE, 0x6C, 0x04, 0x06, 0xFE, 0x6D, 0x04, 0x06, 0xFE, 0x6E, 0x04, +/* 000162F0 */ 0x06, 0xFE, 0x6F, 0x04, 0x06, 0xFE, 0x70, 0x04, 0xFE, 0x4D, 0x01, 0x4E, 0x3C, 0x96, 0x02, 0x3C, +/* 00016300 */ 0x4E, 0x3C, 0x96, 0x03, 0x3C, 0x4E, 0x3C, 0x96, 0x04, 0x3C, 0x4E, 0x3C, 0x96, 0x05, 0x3C, 0x4E, +/* 00016310 */ 0x3C, 0x96, 0x06, 0x3C, 0x4E, 0x3C, 0x96, 0x07, 0x3C, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00016320 */ 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x7B, 0x03, 0x3C, 0x00, 0x7B, 0x05, 0x3C, 0x01, 0x7B, 0x07, +/* 00016330 */ 0x3C, 0x02, 0x7B, 0x09, 0x3C, 0x03, 0x7B, 0x0B, 0x3C, 0x04, 0x7B, 0x0D, 0x3C, 0x05, 0x7B, 0x0F, +/* 00016340 */ 0x3C, 0x06, 0x7B, 0x11, 0x3C, 0x07, 0x7B, 0x13, 0x3C, 0x08, 0x7B, 0x15, 0x3C, 0x09, 0x7B, 0x17, +/* 00016350 */ 0x3C, 0x0A, 0x96, 0x02, 0x3C, 0xCE, 0x34, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3C, 0x00, +/* 00016360 */ 0x00, 0x00, 0x7B, 0x02, 0x3C, 0x0B, 0x7B, 0x02, 0x3C, 0x0C, 0x7B, 0x02, 0x3C, 0x0D, 0x7B, 0x04, +/* 00016370 */ 0x3C, 0x0E, 0x7B, 0x06, 0x3C, 0x0F, 0x7B, 0x06, 0x3C, 0x10, 0x7B, 0x06, 0x3C, 0x11, 0x7B, 0x08, +/* 00016380 */ 0x3C, 0x12, 0x7B, 0x08, 0x3C, 0x13, 0x7B, 0x0A, 0x3C, 0x14, 0x7B, 0x0C, 0x3C, 0x15, 0x7B, 0x0C, +/* 00016390 */ 0x3C, 0x16, 0x7B, 0x0C, 0x3C, 0x17, 0x7B, 0x0C, 0x3C, 0x18, 0x7B, 0x12, 0x3C, 0x19, 0x7B, 0x14, +/* 000163A0 */ 0x3C, 0x1A, 0x7B, 0x16, 0x3C, 0x1B, 0x7B, 0x16, 0x3C, 0x1C, 0x7B, 0x16, 0x3C, 0x1D, 0x7B, 0x16, +/* 000163B0 */ 0x3C, 0x1E, 0x7B, 0x16, 0x3C, 0x1F, 0x7B, 0x16, 0x3C, 0x20, 0x7B, 0x16, 0x3C, 0x21, 0x96, 0x03, +/* 000163C0 */ 0x3C, 0xCE, 0x98, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x7B, 0x27, +/* 000163D0 */ 0x3C, 0x22, 0x7B, 0x29, 0x3C, 0x23, 0x7B, 0x2B, 0x3C, 0x24, 0x7B, 0x2D, 0x3C, 0x25, 0x7B, 0x2F, +/* 000163E0 */ 0x3C, 0x26, 0x96, 0x04, 0x3C, 0xCD, 0x3C, 0x7B, 0x26, 0x3C, 0x27, 0x7B, 0x28, 0x3C, 0x28, 0x7B, +/* 000163F0 */ 0x2A, 0x3C, 0x29, 0x7B, 0x2C, 0x3C, 0x2A, 0x7B, 0x2E, 0x3C, 0x2B, 0x96, 0x05, 0x3C, 0xCE, 0xB4, +/* 00016400 */ 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x7B, 0x0F, 0x3C, 0x2C, 0x7B, +/* 00016410 */ 0x11, 0x3C, 0x2D, 0x7B, 0x1E, 0x3C, 0x2E, 0x7B, 0x1F, 0x3C, 0x2F, 0x96, 0x06, 0x3C, 0xCE, 0xCC, +/* 00016420 */ 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x7B, 0x35, 0x3C, 0x30, 0x7B, +/* 00016430 */ 0x36, 0x3C, 0x31, 0x7B, 0x37, 0x3C, 0x32, 0x7B, 0x38, 0x3C, 0x33, 0x96, 0x07, 0x3C, 0xD6, 0x00, +/* 00016440 */ 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x05, 0xE4, 0x00, 0xCC, 0x00, 0x00, 0x00, 0x03, +/* 00016450 */ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x04, 0x00, 0x00, 0x58, 0x04, 0x00, 0x00, 0x60, +/* 00016460 */ 0x04, 0x00, 0x00, 0x61, 0x04, 0x00, 0x00, 0xB4, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, +/* 00016470 */ 0x00, 0x00, 0x00, 0x6D, 0x04, 0x00, 0x00, 0x6E, 0x04, 0x00, 0x00, 0x6F, 0x04, 0x00, 0x00, 0x70, +/* 00016480 */ 0x04, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x03, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, +/* 00016490 */ 0x02, 0x00, 0x00, 0x32, 0x04, 0x00, 0x00, 0x30, 0x04, 0x00, 0x00, 0x31, 0x04, 0x00, 0x00, 0x2F, +/* 000164A0 */ 0x04, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x03, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, +/* 000164B0 */ 0x00, 0x00, 0x00, 0x5C, 0x04, 0x00, 0x00, 0x5D, 0x04, 0x00, 0x00, 0x50, 0x04, 0x00, 0x00, 0x51, +/* 000164C0 */ 0x04, 0x00, 0x00, 0xD0, 0x03, 0x00, 0x00, 0x5E, 0x04, 0x00, 0x00, 0x52, 0x04, 0x00, 0x00, 0x5F, +/* 000164D0 */ 0x04, 0x00, 0x00, 0x53, 0x04, 0x00, 0x00, 0x56, 0x04, 0x00, 0x00, 0x58, 0x04, 0x00, 0x00, 0x60, +/* 000164E0 */ 0x04, 0x00, 0x00, 0x61, 0x04, 0x00, 0x00, 0x59, 0x04, 0x00, 0x00, 0x5A, 0x04, 0x00, 0x00, 0x5B, +/* 000164F0 */ 0x04, 0x00, 0x00, 0x62, 0x04, 0x00, 0x00, 0x63, 0x04, 0x00, 0x00, 0x64, 0x04, 0x00, 0x00, 0x65, +/* 00016500 */ 0x04, 0x00, 0x00, 0x66, 0x04, 0x00, 0x00, 0x67, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, +/* 00016510 */ 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x02, 0x00, 0x00, 0x6D, 0x02, 0x00, 0x00, 0x77, +/* 00016520 */ 0x02, 0x00, 0x00, 0x71, 0x02, 0x00, 0x00, 0x6C, 0x02, 0x00, 0x00, 0x6E, 0x02, 0x00, 0x00, 0x6F, +/* 00016530 */ 0x02, 0x00, 0x00, 0x57, 0x04, 0x00, 0x00, 0x70, 0x02, 0x00, 0x00, 0x73, 0x02, 0x00, 0x00, 0x75, +/* 00016540 */ 0x02, 0x00, 0x00, 0xFE, 0x76, 0x02, 0xFE, 0x6D, 0x02, 0xFE, 0x77, 0x02, 0xFE, 0x71, 0x02, 0xFE, +/* 00016550 */ 0x6C, 0x02, 0xFE, 0x6E, 0x02, 0xFE, 0x6F, 0x02, 0xFE, 0x57, 0x04, 0xFE, 0x70, 0x02, 0xFE, 0x73, +/* 00016560 */ 0x02, 0xFE, 0x75, 0x02, 0x75, 0xFE, 0x5C, 0x04, 0xFE, 0x5D, 0x04, 0xFE, 0x50, 0x04, 0xFE, 0x51, +/* 00016570 */ 0x04, 0xFE, 0xD0, 0x03, 0xFE, 0x5E, 0x04, 0xFE, 0x52, 0x04, 0xFE, 0x5F, 0x04, 0xFE, 0x53, 0x04, +/* 00016580 */ 0xFE, 0x56, 0x04, 0xFE, 0x58, 0x04, 0xFE, 0x60, 0x04, 0xFE, 0x61, 0x04, 0xFE, 0x59, 0x04, 0xFE, +/* 00016590 */ 0x5A, 0x04, 0xFE, 0x5B, 0x04, 0xFE, 0x62, 0x04, 0xFE, 0x63, 0x04, 0xFE, 0x64, 0x04, 0xFE, 0x65, +/* 000165A0 */ 0x04, 0xFE, 0x66, 0x04, 0xFE, 0x67, 0x04, 0xFE, 0x51, 0x02, 0xFE, 0x32, 0x04, 0xFE, 0x30, 0x04, +/* 000165B0 */ 0xFE, 0x31, 0x04, 0xFE, 0x2F, 0x04, 0xFE, 0x68, 0x04, 0xFE, 0x69, 0x04, 0xFE, 0x6A, 0x04, 0xFE, +/* 000165C0 */ 0x6B, 0x04, 0xFE, 0x6C, 0x04, 0xFE, 0x6D, 0x04, 0xFE, 0x6E, 0x04, 0xFE, 0x6F, 0x04, 0xFE, 0x70, +/* 000165D0 */ 0x04, 0xFE, 0x56, 0x04, 0xFE, 0x58, 0x04, 0xFE, 0x60, 0x04, 0xFE, 0x61, 0x04, 0xFE, 0x6E, 0xDF, +/* 000165E0 */ 0x08, 0x1E, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x10, 0x02, 0x6C, 0x00, 0xDC, 0x02, 0x24, 0x00, 0xC3, +/* 000165F0 */ 0x00, 0x19, 0x00, 0x00, 0x01, 0x20, 0x00, 0xA1, 0x00, 0x20, 0x00, 0x09, 0x01, 0x08, 0x00, 0x65, +/* 00016600 */ 0x15, 0x00, 0x06, 0x66, 0x01, 0x00, 0x7F, 0x7D, 0x0F, 0xC3, 0x43, 0x5A, 0x1B, 0x00, 0xFE, 0x50, +/* 00016610 */ 0x05, 0x13, 0xA2, 0x41, 0xD1, 0x00, 0x56, 0xFE, 0xCE, 0xE7, 0xFE, 0xCE, 0xE7, 0x02, 0x40, 0xFE, +/* 00016620 */ 0x00, 0x90, 0x04, 0x04, 0xFE, 0xCE, 0xE7, 0xFE, 0x54, 0x15, 0xFE, 0x54, 0x15, 0x04, 0xFE, 0xE0, +/* 00016630 */ 0x01, 0xFE, 0x6F, 0x02, 0xFE, 0x10, 0x02, 0xFE, 0x1B, 0x02, 0x17, 0x0E, 0x1E, 0x08, 0xC2, 0xB2, +/* 00016640 */ 0x7B, 0x04, 0x02, 0x08, 0x01, 0x09, 0x0A, 0x02, 0x0F, 0x0F, 0x0F, 0x0F, 0x02, 0x1B, 0x1C, 0x1D, +/* 00016650 */ 0x1E, 0xFE, 0x08, 0x01, 0xFE, 0x03, 0x03, 0xFE, 0xA7, 0x02, 0xFE, 0xCF, 0x02, 0x06, 0xFE, 0x47, +/* 00016660 */ 0x03, 0x0C, 0x01, 0x00, 0x06, 0xFE, 0x71, 0x04, 0x01, 0x01, 0x0B, 0x06, 0xFE, 0x72, 0x04, 0x06, +/* 00016670 */ 0xFE, 0x56, 0x04, 0x06, 0xFE, 0x58, 0x04, 0x06, 0xFE, 0x60, 0x04, 0x06, 0xFE, 0x61, 0x04, 0x01, +/* 00016680 */ 0x02, 0xFE, 0x0B, 0x03, 0x96, 0x02, 0x0F, 0x96, 0x03, 0x10, 0x4E, 0x11, 0x4E, 0x12, 0x4E, 0x13, +/* 00016690 */ 0x4E, 0x14, 0x4E, 0x15, 0x4E, 0x16, 0x4E, 0x18, 0x4E, 0x19, 0x4E, 0x1A, 0x4E, 0x17, 0x4E, 0x20, +/* 000166A0 */ 0x96, 0x04, 0x20, 0x4E, 0x20, 0x96, 0x05, 0x20, 0x8F, 0x04, 0x36, 0x21, 0x00, 0x00, 0x4A, 0x21, +/* 000166B0 */ 0x6D, 0x20, 0x21, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x21, 0x8F, 0x02, 0x03, 0x22, 0x01, 0x00, +/* 000166C0 */ 0x4A, 0x22, 0x5A, 0x01, 0x22, 0x00, 0x00, 0xD6, 0x00, 0x22, 0x5A, 0x02, 0x22, 0x00, 0x00, 0x8F, +/* 000166D0 */ 0x04, 0x36, 0x23, 0x00, 0x00, 0x4A, 0x23, 0x6D, 0x22, 0x23, 0x01, 0x07, 0x01, 0x00, 0x59, 0x00, +/* 000166E0 */ 0x23, 0xF4, 0x01, 0x22, 0x22, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x5A, 0x03, 0x22, 0x00, 0x00, +/* 000166F0 */ 0xF4, 0x04, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x04, 0x20, 0x5F, 0x20, 0x0E, +/* 00016700 */ 0x02, 0x96, 0x05, 0x20, 0x8F, 0x04, 0x36, 0x21, 0x00, 0x00, 0x4A, 0x21, 0x6D, 0x20, 0x21, 0x03, +/* 00016710 */ 0x07, 0x04, 0x00, 0x59, 0x00, 0x21, 0x8F, 0x04, 0x36, 0x23, 0x00, 0x00, 0x4A, 0x23, 0x6D, 0x22, +/* 00016720 */ 0x23, 0x04, 0x07, 0x02, 0x00, 0x59, 0x00, 0x23, 0x93, 0x04, 0x24, 0x02, 0x00, 0x5A, 0x01, 0x24, +/* 00016730 */ 0x03, 0x00, 0xF4, 0x02, 0x22, 0x22, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x5A, 0x01, 0x22, 0x02, +/* 00016740 */ 0x00, 0xD6, 0x01, 0x22, 0x5A, 0x02, 0x22, 0x02, 0x00, 0x5A, 0x03, 0x02, 0x02, 0x00, 0xF4, 0x04, +/* 00016750 */ 0x20, 0x20, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x45, 0x11, 0x20, 0x8F, 0x04, 0x03, 0x21, 0x03, +/* 00016760 */ 0x00, 0x6D, 0x20, 0x21, 0x05, 0x07, 0x03, 0x00, 0x59, 0x00, 0x21, 0x5F, 0x22, 0x0E, 0x06, 0x5A, +/* 00016770 */ 0x01, 0x22, 0x04, 0x00, 0x5A, 0x02, 0x11, 0x04, 0x00, 0xF4, 0x03, 0x20, 0x20, 0x05, 0x00, 0x00, +/* 00016780 */ 0x00, 0x04, 0x00, 0x45, 0x12, 0x20, 0x45, 0x13, 0x03, 0x45, 0x14, 0x04, 0xED, 0x00, 0xEE, 0x00, +/* 00016790 */ 0xA7, 0x20, 0x12, 0x07, 0x00, 0x00, 0x12, 0x03, 0x00, 0x14, 0x20, 0x09, 0xE7, 0x01, 0x98, 0x20, +/* 000167A0 */ 0x12, 0x14, 0x00, 0x00, 0x45, 0x15, 0x20, 0x41, 0x20, 0x15, 0x05, 0x45, 0x16, 0x20, 0x0E, 0x10, +/* 000167B0 */ 0x00, 0x13, 0x0E, 0x03, 0x00, 0x16, 0x45, 0x13, 0x03, 0x26, 0x14, 0x14, 0x09, 0xC3, 0x01, 0x09, +/* 000167C0 */ 0x1E, 0x00, 0x0E, 0x0C, 0x00, 0x16, 0x45, 0x13, 0x07, 0x26, 0x14, 0x14, 0x09, 0xB3, 0x01, 0x09, +/* 000167D0 */ 0x0E, 0x00, 0x14, 0x03, 0x00, 0x15, 0x08, 0x09, 0x06, 0x00, 0x26, 0x14, 0x14, 0x09, 0xA2, 0x01, +/* 000167E0 */ 0x14, 0x12, 0x00, 0x15, 0x09, 0x14, 0x0D, 0x00, 0x15, 0x0A, 0x14, 0x08, 0x00, 0x15, 0x0B, 0x14, +/* 000167F0 */ 0x03, 0x00, 0x15, 0x0C, 0x09, 0x2D, 0x01, 0x93, 0x05, 0x20, 0x04, 0x00, 0x0E, 0x12, 0x01, 0x20, +/* 00016800 */ 0x93, 0x03, 0x20, 0x05, 0x00, 0xA8, 0x21, 0x14, 0x03, 0x00, 0x20, 0x21, 0x09, 0x03, 0x01, 0x8F, +/* 00016810 */ 0x01, 0x06, 0x20, 0x06, 0x00, 0x4A, 0x20, 0x93, 0x05, 0x21, 0x04, 0x00, 0x98, 0x20, 0x20, 0x21, +/* 00016820 */ 0x01, 0x00, 0x45, 0x17, 0x20, 0x15, 0x03, 0x00, 0x17, 0x15, 0x09, 0xE2, 0x00, 0x2D, 0x20, 0x14, +/* 00016830 */ 0x06, 0x98, 0x20, 0x12, 0x20, 0x02, 0x00, 0x14, 0x03, 0x00, 0x20, 0x15, 0x09, 0x67, 0x00, 0x8F, +/* 00016840 */ 0x04, 0x36, 0x21, 0x00, 0x00, 0x4A, 0x21, 0x6D, 0x20, 0x21, 0x08, 0x07, 0x04, 0x00, 0x59, 0x00, +/* 00016850 */ 0x21, 0x5A, 0x01, 0x12, 0x05, 0x00, 0x5A, 0x02, 0x04, 0x05, 0x00, 0x5A, 0x03, 0x14, 0x05, 0x00, +/* 00016860 */ 0xF4, 0x04, 0x20, 0x20, 0x08, 0x00, 0x00, 0x00, 0x05, 0x00, 0x2D, 0x20, 0x20, 0x17, 0x2D, 0x20, +/* 00016870 */ 0x20, 0x17, 0x8F, 0x04, 0x36, 0x22, 0x00, 0x00, 0x4A, 0x22, 0x6D, 0x21, 0x22, 0x09, 0x07, 0x03, +/* 00016880 */ 0x00, 0x59, 0x00, 0x22, 0x5A, 0x01, 0x12, 0x06, 0x00, 0x2D, 0x23, 0x14, 0x0D, 0x5A, 0x02, 0x23, +/* 00016890 */ 0x06, 0x00, 0xF4, 0x03, 0x21, 0x21, 0x09, 0x00, 0x00, 0x00, 0x06, 0x00, 0x2D, 0x20, 0x20, 0x21, +/* 000168A0 */ 0x45, 0x12, 0x20, 0x09, 0x60, 0x00, 0x8F, 0x04, 0x36, 0x21, 0x00, 0x00, 0x4A, 0x21, 0x6D, 0x20, +/* 000168B0 */ 0x21, 0x0A, 0x07, 0x04, 0x00, 0x59, 0x00, 0x21, 0x5A, 0x01, 0x12, 0x07, 0x00, 0x5A, 0x02, 0x04, +/* 000168C0 */ 0x07, 0x00, 0x5A, 0x03, 0x14, 0x07, 0x00, 0xF4, 0x04, 0x20, 0x20, 0x0A, 0x00, 0x00, 0x00, 0x07, +/* 000168D0 */ 0x00, 0x2D, 0x20, 0x20, 0x17, 0x8F, 0x04, 0x36, 0x22, 0x00, 0x00, 0x4A, 0x22, 0x6D, 0x21, 0x22, +/* 000168E0 */ 0x0B, 0x07, 0x03, 0x00, 0x59, 0x00, 0x22, 0x5A, 0x01, 0x12, 0x08, 0x00, 0x2D, 0x23, 0x14, 0x06, +/* 000168F0 */ 0x5A, 0x02, 0x23, 0x08, 0x00, 0xF4, 0x03, 0x21, 0x21, 0x0B, 0x00, 0x00, 0x00, 0x08, 0x00, 0x2D, +/* 00016900 */ 0x20, 0x20, 0x21, 0x45, 0x12, 0x20, 0x98, 0x20, 0x12, 0x14, 0x03, 0x00, 0x45, 0x15, 0x20, 0x09, +/* 00016910 */ 0x12, 0x00, 0x8F, 0x01, 0x07, 0x20, 0x07, 0x00, 0x4A, 0x20, 0x98, 0x20, 0x20, 0x15, 0x04, 0x00, +/* 00016920 */ 0x77, 0x20, 0x0E, 0x0C, 0x2D, 0x20, 0x14, 0x06, 0x45, 0x18, 0x20, 0xED, 0x01, 0xEE, 0x01, 0xA7, +/* 00016930 */ 0x20, 0x12, 0x0D, 0x01, 0x00, 0x12, 0x03, 0x00, 0x18, 0x20, 0x09, 0x14, 0x00, 0x98, 0x20, 0x12, +/* 00016940 */ 0x18, 0x05, 0x00, 0x14, 0x03, 0x00, 0x20, 0x15, 0x09, 0x06, 0x00, 0x26, 0x18, 0x18, 0x09, 0xDC, +/* 00016950 */ 0xFF, 0xEF, 0x01, 0x8F, 0x01, 0x03, 0x20, 0x08, 0x00, 0x4A, 0x20, 0x98, 0x20, 0x20, 0x15, 0x06, +/* 00016960 */ 0x00, 0x45, 0x19, 0x20, 0x8F, 0x01, 0x05, 0x20, 0x09, 0x00, 0x4A, 0x20, 0x33, 0x21, 0x18, 0x14, +/* 00016970 */ 0x98, 0x20, 0x20, 0x21, 0x07, 0x00, 0x45, 0x1A, 0x20, 0x9D, 0x1A, 0x0E, 0x19, 0x00, 0x00, 0x45, +/* 00016980 */ 0x14, 0x18, 0x09, 0x09, 0xFE, 0xEF, 0x00, 0x77, 0x12, 0x0E, 0x0E, 0xA8, 0x00, 0x24, 0x00, 0xFE, +/* 00016990 */ 0x2C, 0x01, 0x69, 0xFE, 0x73, 0x04, 0xFE, 0x2C, 0x01, 0xCF, 0xFE, 0xFF, 0x01, 0xFE, 0x0D, 0x02, +/* 000169A0 */ 0xD1, 0xFE, 0x5E, 0x01, 0xFE, 0x5E, 0x01, 0xFE, 0x5E, 0x01, 0xFE, 0x5E, 0x01, 0xFE, 0x73, 0x04, +/* 000169B0 */ 0xD1, 0xFE, 0x72, 0x02, 0xFE, 0x00, 0xE8, 0x27, 0x24, 0x00, 0x00, 0x00, 0x55, 0x00, 0xB0, 0x01, +/* 000169C0 */ 0x07, 0x00, 0xB6, 0x00, 0x57, 0x00, 0x43, 0x05, 0x2B, 0x00, 0x0E, 0x02, 0x03, 0x00, 0x27, 0x00, +/* 000169D0 */ 0x07, 0x00, 0x22, 0x00, 0x0E, 0x00, 0x2A, 0x00, 0x09, 0x00, 0x2A, 0x00, 0x07, 0x00, 0x31, 0x00, +/* 000169E0 */ 0x04, 0x00, 0x29, 0x00, 0x04, 0x00, 0x2B, 0x00, 0x03, 0x00, 0x45, 0x00, 0x03, 0x00, 0x1D, 0x00, +/* 000169F0 */ 0x06, 0x00, 0x25, 0x00, 0x04, 0x00, 0x27, 0x00, 0x03, 0x00, 0x2A, 0x00, 0x03, 0x00, 0x1D, 0x00, +/* 00016A00 */ 0x06, 0x00, 0x25, 0x00, 0x08, 0x00, 0x2B, 0x00, 0x03, 0x00, 0x1D, 0x00, 0x03, 0x00, 0x02, 0x01, +/* 00016A10 */ 0x17, 0x00, 0x58, 0x00, 0x18, 0x00, 0x76, 0x01, 0x16, 0x00, 0x49, 0x00, 0x08, 0x00, 0x3B, 0x00, +/* 00016A20 */ 0x12, 0x00, 0x76, 0x00, 0x67, 0x00, 0xE1, 0x00, 0x60, 0x00, 0xED, 0x00, 0x0C, 0x00, 0x38, 0x01, +/* 00016A30 */ 0x12, 0x00, 0x6F, 0x00, 0x0B, 0x00, 0x2A, 0x00, 0x1C, 0x00, 0x44, 0x00, 0x08, 0x00, 0x30, 0x00, +/* 00016A40 */ 0x11, 0x00, 0x3E, 0x00, 0x15, 0x00, 0x48, 0x00, 0x06, 0x00, 0x36, 0x00, 0x08, 0x00, 0x2A, 0x00, +/* 00016A50 */ 0x06, 0x00, 0x23, 0x00, 0x00, 0xBD, 0x6B, 0x01, 0x00, 0x5D, 0x6A, 0x01, 0x00, 0x7F, 0x5C, 0x0A, +/* 00016A60 */ 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x5E, 0x05, 0x43, 0xA2, 0x41, 0xD1, 0x00, 0x58, 0xFE, 0x99, +/* 00016A70 */ 0xEA, 0xFE, 0x99, 0xEA, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, 0x99, 0xEA, 0xFE, 0xF8, 0x04, +/* 00016A80 */ 0xFE, 0xF8, 0x04, 0x08, 0x0B, 0x0F, 0x04, 0x38, 0x34, 0x05, 0x03, 0x01, 0x06, 0x01, 0x01, 0x01, +/* 00016A90 */ 0x01, 0x0E, 0x06, 0xFE, 0x38, 0x04, 0x0B, 0x06, 0xFE, 0x6F, 0x04, 0x06, 0xFE, 0x6D, 0x04, 0x06, +/* 00016AA0 */ 0xFE, 0x55, 0x04, 0x0C, 0x06, 0xFE, 0x6E, 0x04, 0x06, 0xFE, 0x70, 0x04, 0x06, 0xFE, 0x57, 0x04, +/* 00016AB0 */ 0xE4, 0x4E, 0x0D, 0x8F, 0x01, 0x04, 0x0F, 0x00, 0x00, 0x4A, 0x0F, 0x98, 0x0F, 0x0F, 0x0C, 0x00, +/* 00016AC0 */ 0x00, 0x45, 0x0D, 0x0F, 0x14, 0x03, 0x00, 0x0C, 0x02, 0x09, 0x79, 0x00, 0x8F, 0x01, 0x03, 0x0F, +/* 00016AD0 */ 0x01, 0x00, 0x14, 0x2D, 0x00, 0x0F, 0x03, 0x8F, 0x01, 0x03, 0x0F, 0x01, 0x00, 0xA8, 0x10, 0x14, +/* 00016AE0 */ 0x03, 0x00, 0x0F, 0x10, 0x09, 0x23, 0x00, 0x8F, 0x01, 0x05, 0x0F, 0x02, 0x00, 0x4A, 0x0F, 0x14, +/* 00016AF0 */ 0x10, 0x00, 0x0F, 0x04, 0x8F, 0x01, 0x05, 0x0F, 0x02, 0x00, 0x4A, 0x0F, 0x14, 0x03, 0x00, 0x0F, +/* 00016B00 */ 0x05, 0x09, 0x06, 0x00, 0x45, 0x0C, 0x06, 0x09, 0x3B, 0x00, 0x8F, 0x01, 0x03, 0x0F, 0x01, 0x00, +/* 00016B10 */ 0x14, 0x2D, 0x00, 0x0F, 0x07, 0x8F, 0x01, 0x03, 0x0F, 0x01, 0x00, 0xA8, 0x10, 0x14, 0x03, 0x00, +/* 00016B20 */ 0x0F, 0x10, 0x09, 0x20, 0x00, 0x8F, 0x01, 0x05, 0x0F, 0x02, 0x00, 0x4A, 0x0F, 0x14, 0x10, 0x00, +/* 00016B30 */ 0x0F, 0x08, 0x8F, 0x01, 0x05, 0x0F, 0x02, 0x00, 0x4A, 0x0F, 0x14, 0x03, 0x00, 0x0F, 0x09, 0x09, +/* 00016B40 */ 0x03, 0x00, 0x45, 0x0C, 0x0A, 0x45, 0x0F, 0x0B, 0x8F, 0x05, 0x36, 0x11, 0x03, 0x00, 0x4A, 0x11, +/* 00016B50 */ 0x6D, 0x10, 0x11, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x11, 0x8F, 0x02, 0x02, 0x12, 0x04, 0x00, +/* 00016B60 */ 0x4A, 0x12, 0x98, 0x12, 0x12, 0x0C, 0x01, 0x00, 0x5A, 0x01, 0x12, 0x00, 0x00, 0x8F, 0x02, 0x04, +/* 00016B70 */ 0x12, 0x05, 0x00, 0x4A, 0x12, 0x98, 0x12, 0x12, 0x0D, 0x02, 0x00, 0x5A, 0x02, 0x12, 0x00, 0x00, +/* 00016B80 */ 0xF4, 0x03, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x00, 0x0F, 0x10, 0x09, 0x02, +/* 00016B90 */ 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x3A, 0x01, 0xFE, 0xCE, 0xEA, 0x08, 0x02, 0x00, 0x00, 0x00, +/* 00016BA0 */ 0x11, 0x00, 0x42, 0x00, 0x08, 0x00, 0xA5, 0x02, 0x38, 0x00, 0x6F, 0x00, 0x06, 0x00, 0x35, 0x00, +/* 00016BB0 */ 0x38, 0x00, 0x70, 0x00, 0x03, 0x00, 0x5B, 0x00, 0x4E, 0x00, 0x6C, 0x00, 0x00, 0x7F, 0x5C, 0x0E, +/* 00016BC0 */ 0x01, 0x00, 0x10, 0x03, 0x00, 0xFE, 0x51, 0x05, 0x45, 0xA2, 0x41, 0xD1, 0x00, 0x57, 0xFE, 0x35, +/* 00016BD0 */ 0xE8, 0xFE, 0x35, 0xE8, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, 0x35, 0xE8, 0xFE, 0x5B, 0x01, +/* 00016BE0 */ 0xFE, 0x5B, 0x01, 0x07, 0x06, 0x0B, 0x07, 0x1B, 0x18, 0x05, 0x02, 0x01, 0x01, 0x02, 0x0A, 0x01, +/* 00016BF0 */ 0x00, 0x06, 0xFE, 0xA3, 0x03, 0x01, 0x01, 0x08, 0x65, 0x4E, 0x08, 0x4E, 0x09, 0x98, 0x0B, 0x07, +/* 00016C00 */ 0x02, 0x00, 0x00, 0x45, 0x08, 0x0B, 0x8F, 0x04, 0x02, 0x0B, 0x00, 0x00, 0x4A, 0x0B, 0x07, 0x06, +/* 00016C10 */ 0x00, 0x59, 0x00, 0x05, 0x8F, 0x01, 0x02, 0x0C, 0x01, 0x00, 0x5A, 0x01, 0x0C, 0x00, 0x00, 0x5A, +/* 00016C20 */ 0x02, 0x08, 0x00, 0x00, 0x5A, 0x03, 0x03, 0x00, 0x00, 0x98, 0x0C, 0x07, 0x04, 0x01, 0x00, 0x5A, +/* 00016C30 */ 0x04, 0x0C, 0x00, 0x00, 0xA8, 0x0C, 0x5A, 0x05, 0x0C, 0x00, 0x00, 0xF0, 0x06, 0x0B, 0x0B, 0x00, +/* 00016C40 */ 0x00, 0x45, 0x09, 0x0B, 0xA8, 0x0B, 0x15, 0x03, 0x00, 0x09, 0x0B, 0x09, 0x06, 0x00, 0x9D, 0x09, +/* 00016C50 */ 0x06, 0x08, 0x00, 0x00, 0x45, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x6A, +/* 00016C60 */ 0xE8, 0x06, 0x04, 0x00, 0x00, 0x00, 0x09, 0x00, 0x2F, 0x00, 0x3E, 0x00, 0x5F, 0x00, 0x0A, 0x00, +/* 00016C70 */ 0x33, 0x00, 0x06, 0x00, 0x43, 0x00, 0x08, 0x00, 0x21, 0x00, 0x00, 0x7E, 0x5D, 0x08, 0xC1, 0x13, +/* 00016C80 */ 0x1A, 0x4B, 0x00, 0xFE, 0x0F, 0x04, 0x18, 0xA0, 0x41, 0xD1, 0x00, 0x4A, 0xFE, 0x7D, 0xB4, 0xFE, +/* 00016C90 */ 0x7D, 0xB4, 0x09, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFE, 0x7D, 0xB4, 0xFE, 0xC7, 0x24, 0xFE, 0xC7, +/* 00016CA0 */ 0x24, 0x05, 0xFE, 0x0B, 0x04, 0xFE, 0x0C, 0x04, 0xFE, 0x32, 0x02, 0xFE, 0x0B, 0x02, 0xFE, 0x0D, +/* 00016CB0 */ 0x04, 0x0B, 0x1B, 0x21, 0x09, 0xD4, 0xD1, 0x02, 0x0F, 0x07, 0x25, 0x25, 0x25, 0x25, 0x07, 0x1E, +/* 00016CC0 */ 0x1F, 0x20, 0x06, 0xFE, 0x27, 0x03, 0x06, 0xFE, 0x0E, 0x04, 0x05, 0xFE, 0x0F, 0x04, 0x08, 0x07, +/* 00016CD0 */ 0x05, 0xFE, 0x10, 0x04, 0x05, 0xFE, 0x11, 0x04, 0x05, 0xFE, 0x12, 0x04, 0x05, 0xFE, 0x35, 0x03, +/* 00016CE0 */ 0x06, 0xFE, 0x38, 0x03, 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, 0x2B, 0x03, 0x0B, 0x06, 0xFE, 0x2C, +/* 00016CF0 */ 0x03, 0x0C, 0x06, 0xFE, 0x2D, 0x03, 0x06, 0xFE, 0xEC, 0x03, 0x06, 0xFE, 0xED, 0x03, 0x06, 0xFE, +/* 00016D00 */ 0xEE, 0x03, 0x05, 0xFE, 0x13, 0x04, 0x05, 0xFE, 0x14, 0x04, 0x06, 0xFE, 0x37, 0x03, 0x06, 0xFE, +/* 00016D10 */ 0x15, 0x04, 0x06, 0xFE, 0x77, 0x03, 0x06, 0xFE, 0x16, 0x04, 0xFE, 0xB2, 0x03, 0x4E, 0x1B, 0x4E, +/* 00016D20 */ 0x1C, 0x4E, 0x1D, 0x4E, 0x21, 0x96, 0x02, 0x21, 0x4E, 0x21, 0x96, 0x03, 0x21, 0x4E, 0x21, 0x96, +/* 00016D30 */ 0x04, 0x21, 0x4E, 0x21, 0x96, 0x05, 0x21, 0x4E, 0x21, 0x96, 0x06, 0x21, 0x8F, 0x02, 0x32, 0x21, +/* 00016D40 */ 0x00, 0x00, 0x15, 0x03, 0x00, 0x21, 0x02, 0x09, 0x13, 0x00, 0x8F, 0x02, 0x32, 0x21, 0x00, 0x00, +/* 00016D50 */ 0x15, 0x03, 0x00, 0x21, 0x03, 0x09, 0x05, 0x00, 0xA8, 0x00, 0x09, 0x70, 0x03, 0xD6, 0x00, 0x21, +/* 00016D60 */ 0x96, 0x02, 0x21, 0x8F, 0x02, 0x03, 0x22, 0x01, 0x00, 0x6D, 0x21, 0x22, 0x00, 0x07, 0x03, 0x00, +/* 00016D70 */ 0x59, 0x00, 0x22, 0x8F, 0x01, 0x06, 0x23, 0x02, 0x00, 0x4A, 0x23, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 00016D80 */ 0x05, 0x5A, 0x01, 0x04, 0x01, 0x00, 0xD6, 0x01, 0x24, 0x5A, 0x02, 0x24, 0x01, 0x00, 0xF0, 0x03, +/* 00016D90 */ 0x23, 0x23, 0x01, 0x00, 0x5A, 0x01, 0x23, 0x00, 0x00, 0x8F, 0x02, 0x03, 0x23, 0x01, 0x00, 0x5F, +/* 00016DA0 */ 0x23, 0x23, 0x01, 0x5F, 0x23, 0x23, 0x02, 0x5A, 0x02, 0x23, 0x00, 0x00, 0xF4, 0x03, 0xFF, 0x21, +/* 00016DB0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x02, 0x32, 0x21, 0x00, 0x00, 0x14, 0x03, 0x00, 0x21, +/* 00016DC0 */ 0x03, 0x09, 0x05, 0x00, 0xA8, 0x00, 0x09, 0x04, 0x03, 0xCD, 0x21, 0x96, 0x03, 0x21, 0x8F, 0x02, +/* 00016DD0 */ 0x23, 0x21, 0x03, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x05, 0x5A, 0x01, 0x07, 0x02, 0x00, 0xD6, +/* 00016DE0 */ 0x02, 0x22, 0x5A, 0x02, 0x22, 0x02, 0x00, 0xF0, 0x03, 0x21, 0x21, 0x02, 0x00, 0x96, 0x04, 0x21, +/* 00016DF0 */ 0x8F, 0x01, 0x06, 0x21, 0x02, 0x00, 0x4A, 0x21, 0x07, 0x03, 0x00, 0x59, 0x00, 0x05, 0x5A, 0x01, +/* 00016E00 */ 0x08, 0x03, 0x00, 0xD6, 0x03, 0x22, 0x5A, 0x02, 0x22, 0x03, 0x00, 0xF0, 0x03, 0x21, 0x21, 0x03, +/* 00016E10 */ 0x00, 0x96, 0x05, 0x21, 0x8F, 0x01, 0x06, 0x21, 0x02, 0x00, 0x4A, 0x21, 0x07, 0x03, 0x00, 0x59, +/* 00016E20 */ 0x00, 0x05, 0x5A, 0x01, 0x09, 0x04, 0x00, 0xD6, 0x04, 0x22, 0x5A, 0x02, 0x22, 0x04, 0x00, 0xF0, +/* 00016E30 */ 0x03, 0x21, 0x21, 0x04, 0x00, 0x45, 0x1B, 0x21, 0x8F, 0x01, 0x06, 0x21, 0x02, 0x00, 0x4A, 0x21, +/* 00016E40 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x05, 0x5A, 0x01, 0x0A, 0x05, 0x00, 0xD6, 0x05, 0x22, 0x5A, 0x02, +/* 00016E50 */ 0x22, 0x05, 0x00, 0xF0, 0x03, 0x21, 0x21, 0x05, 0x00, 0x45, 0x1C, 0x21, 0x8F, 0x02, 0x36, 0x22, +/* 00016E60 */ 0x04, 0x00, 0x4A, 0x22, 0x6D, 0x21, 0x22, 0x03, 0x07, 0x04, 0x00, 0x59, 0x00, 0x22, 0x93, 0x04, +/* 00016E70 */ 0x23, 0x05, 0x00, 0x5A, 0x01, 0x23, 0x06, 0x00, 0x5A, 0x02, 0x0B, 0x06, 0x00, 0xCE, 0x00, 0x00, +/* 00016E80 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x7B, 0x1C, 0x23, 0x04, 0x7B, 0x0E, +/* 00016E90 */ 0x23, 0x05, 0x7B, 0x10, 0x23, 0x06, 0x7B, 0x0E, 0x23, 0x07, 0x5A, 0x03, 0x23, 0x06, 0x00, 0xF4, +/* 00016EA0 */ 0x04, 0xFF, 0x21, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x8F, 0x02, 0x36, 0x22, 0x04, 0x00, 0x4A, +/* 00016EB0 */ 0x22, 0x6D, 0x21, 0x22, 0x08, 0x07, 0x04, 0x00, 0x59, 0x00, 0x22, 0x93, 0x04, 0x23, 0x05, 0x00, +/* 00016EC0 */ 0x5A, 0x01, 0x23, 0x07, 0x00, 0x5A, 0x02, 0x12, 0x07, 0x00, 0xCE, 0x18, 0x00, 0x00, 0x00, 0x01, +/* 00016ED0 */ 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x93, 0x03, 0x24, 0x06, 0x00, 0x7B, 0x24, 0x23, 0x09, +/* 00016EE0 */ 0x7B, 0x10, 0x23, 0x0A, 0x7B, 0x10, 0x23, 0x0B, 0x7B, 0x10, 0x23, 0x0C, 0x5A, 0x03, 0x23, 0x07, +/* 00016EF0 */ 0x00, 0xF4, 0x04, 0xFF, 0x21, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x8F, 0x02, 0x36, 0x22, 0x04, +/* 00016F00 */ 0x00, 0x4A, 0x22, 0x6D, 0x21, 0x22, 0x0D, 0x07, 0x04, 0x00, 0x59, 0x00, 0x22, 0x93, 0x03, 0x23, +/* 00016F10 */ 0x06, 0x00, 0x5A, 0x01, 0x23, 0x08, 0x00, 0x5A, 0x02, 0x13, 0x08, 0x00, 0xCE, 0x30, 0x00, 0x00, +/* 00016F20 */ 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x93, 0x04, 0x24, 0x05, 0x00, 0x7B, 0x24, +/* 00016F30 */ 0x23, 0x0E, 0x7B, 0x0E, 0x23, 0x0F, 0x7B, 0x10, 0x23, 0x10, 0x7B, 0x0E, 0x23, 0x11, 0x5A, 0x03, +/* 00016F40 */ 0x23, 0x08, 0x00, 0xF4, 0x04, 0xFF, 0x21, 0x0D, 0x00, 0x00, 0x00, 0x08, 0x00, 0xD6, 0x06, 0x21, +/* 00016F50 */ 0x96, 0x06, 0x21, 0x8F, 0x02, 0x36, 0x22, 0x04, 0x00, 0x4A, 0x22, 0x6D, 0x21, 0x22, 0x12, 0x07, +/* 00016F60 */ 0x04, 0x00, 0x59, 0x00, 0x22, 0x93, 0x03, 0x23, 0x06, 0x00, 0x5A, 0x01, 0x23, 0x09, 0x00, 0x5A, +/* 00016F70 */ 0x02, 0x14, 0x09, 0x00, 0xCE, 0x48, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, +/* 00016F80 */ 0x00, 0x8F, 0x01, 0x06, 0x24, 0x02, 0x00, 0x4A, 0x24, 0x07, 0x03, 0x00, 0x59, 0x00, 0x05, 0x5A, +/* 00016F90 */ 0x01, 0x15, 0x0A, 0x00, 0xD6, 0x07, 0x25, 0x5A, 0x02, 0x25, 0x0A, 0x00, 0xF0, 0x03, 0x24, 0x24, +/* 00016FA0 */ 0x0A, 0x00, 0x7B, 0x24, 0x23, 0x13, 0x7B, 0x0E, 0x23, 0x14, 0x7B, 0x10, 0x23, 0x15, 0x7B, 0x0E, +/* 00016FB0 */ 0x23, 0x16, 0x5A, 0x03, 0x23, 0x09, 0x00, 0xF4, 0x04, 0xFF, 0x21, 0x12, 0x00, 0x00, 0x00, 0x09, +/* 00016FC0 */ 0x00, 0x8F, 0x01, 0x06, 0x21, 0x02, 0x00, 0x4A, 0x21, 0x07, 0x03, 0x00, 0x59, 0x00, 0x05, 0x5A, +/* 00016FD0 */ 0x01, 0x16, 0x0B, 0x00, 0xD6, 0x08, 0x22, 0x5A, 0x02, 0x22, 0x0B, 0x00, 0xF0, 0x03, 0x21, 0x21, +/* 00016FE0 */ 0x0B, 0x00, 0x45, 0x1D, 0x21, 0x8F, 0x02, 0x36, 0x22, 0x04, 0x00, 0x4A, 0x22, 0x6D, 0x21, 0x22, +/* 00016FF0 */ 0x17, 0x07, 0x04, 0x00, 0x59, 0x00, 0x22, 0x5A, 0x01, 0x1D, 0x0C, 0x00, 0x5A, 0x02, 0x17, 0x0C, +/* 00017000 */ 0x00, 0xCE, 0x60, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x7B, 0x16, +/* 00017010 */ 0x23, 0x18, 0x7B, 0x10, 0x23, 0x19, 0x7B, 0x10, 0x23, 0x1A, 0x7B, 0x0E, 0x23, 0x1B, 0x5A, 0x03, +/* 00017020 */ 0x23, 0x0C, 0x00, 0xF4, 0x04, 0xFF, 0x21, 0x17, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x8F, 0x02, 0x36, +/* 00017030 */ 0x22, 0x04, 0x00, 0x4A, 0x22, 0x6D, 0x21, 0x22, 0x1C, 0x07, 0x04, 0x00, 0x59, 0x00, 0x22, 0x93, +/* 00017040 */ 0x03, 0x23, 0x06, 0x00, 0x5A, 0x01, 0x23, 0x0D, 0x00, 0x5A, 0x02, 0x18, 0x0D, 0x00, 0xCE, 0x78, +/* 00017050 */ 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x7B, 0x1D, 0x23, 0x1D, 0x7B, +/* 00017060 */ 0x10, 0x23, 0x1E, 0x7B, 0x0E, 0x23, 0x1F, 0x5A, 0x03, 0x23, 0x0D, 0x00, 0xF4, 0x04, 0xFF, 0x21, +/* 00017070 */ 0x1C, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x8F, 0x02, 0x36, 0x22, 0x04, 0x00, 0x4A, 0x22, 0x6D, 0x21, +/* 00017080 */ 0x22, 0x20, 0x07, 0x04, 0x00, 0x59, 0x00, 0x22, 0x93, 0x03, 0x23, 0x06, 0x00, 0x5A, 0x01, 0x23, +/* 00017090 */ 0x0E, 0x00, 0x5A, 0x02, 0x1A, 0x0E, 0x00, 0xCE, 0x8C, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, +/* 000170A0 */ 0x23, 0x00, 0x00, 0x00, 0x7B, 0x1B, 0x23, 0x21, 0x7B, 0x10, 0x23, 0x22, 0x7B, 0x0E, 0x23, 0x23, +/* 000170B0 */ 0x7B, 0x0E, 0x23, 0x24, 0x5A, 0x03, 0x23, 0x0E, 0x00, 0xF4, 0x04, 0xFF, 0x21, 0x20, 0x00, 0x00, +/* 000170C0 */ 0x00, 0x0E, 0x00, 0x93, 0x04, 0x00, 0x05, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x07, +/* 000170D0 */ 0xA4, 0x00, 0x8C, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, +/* 000170E0 */ 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x78, 0x00, +/* 000170F0 */ 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x01, 0x00, 0x00, 0x94, 0x01, +/* 00017100 */ 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, +/* 00017110 */ 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, +/* 00017120 */ 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, +/* 00017130 */ 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x30, 0x00, +/* 00017140 */ 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, +/* 00017150 */ 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x03, 0x04, +/* 00017160 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, +/* 00017170 */ 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, +/* 00017180 */ 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, +/* 00017190 */ 0x00, 0x00, 0xFE, 0x04, 0x02, 0xFE, 0x2F, 0x02, 0xFE, 0x2D, 0x02, 0xFE, 0x9C, 0x01, 0xFE, 0x97, +/* 000171A0 */ 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, +/* 000171B0 */ 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, +/* 000171C0 */ 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, +/* 000171D0 */ 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, +/* 000171E0 */ 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x98, 0x01, 0xFE, 0x94, 0x01, 0xFE, +/* 000171F0 */ 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x96, +/* 00017200 */ 0x01, 0xFE, 0x93, 0xB4, 0x16, 0x1F, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x40, 0x00, 0x05, 0x00, 0x1B, +/* 00017210 */ 0x00, 0x06, 0x00, 0xB8, 0x09, 0x53, 0x00, 0x94, 0x02, 0x0E, 0x00, 0x29, 0x00, 0x05, 0x00, 0x1B, +/* 00017220 */ 0x00, 0x05, 0x00, 0x2B, 0x00, 0x22, 0x00, 0x70, 0x04, 0x24, 0x00, 0xB9, 0x01, 0x24, 0x00, 0xDD, +/* 00017230 */ 0x02, 0x24, 0x00, 0x13, 0x01, 0x4D, 0x00, 0xCE, 0x00, 0x52, 0x00, 0xC9, 0x00, 0x52, 0x00, 0xCA, +/* 00017240 */ 0x00, 0x06, 0x00, 0xC4, 0x02, 0x6E, 0x00, 0xF9, 0x03, 0x24, 0x00, 0x22, 0x02, 0x48, 0x00, 0xB7, +/* 00017250 */ 0x00, 0x49, 0x00, 0xA4, 0x00, 0x4D, 0x00, 0xCD, 0x00, 0x0A, 0x00, 0x19, 0x00, 0x00, 0xBF, 0x7C, +/* 00017260 */ 0x01, 0x00, 0x5B, 0x7B, 0x01, 0x00, 0x29, 0x79, 0x01, 0x00, 0x3A, 0x78, 0x01, 0x00, 0xDE, 0x76, +/* 00017270 */ 0x01, 0x00, 0x3E, 0x76, 0x01, 0x00, 0xDB, 0x74, 0x01, 0x00, 0x9F, 0x73, 0x01, 0x00, 0x82, 0x72, +/* 00017280 */ 0x01, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0xD5, 0x04, 0x3B, 0xA0, 0x41, +/* 00017290 */ 0xD1, 0x00, 0x53, 0xFE, 0x13, 0xD5, 0xFE, 0x13, 0xD5, 0x09, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFE, +/* 000172A0 */ 0x13, 0xD5, 0xFE, 0xE4, 0x01, 0xFE, 0xE4, 0x01, 0x07, 0x06, 0x09, 0x04, 0x2A, 0x28, 0x03, 0x03, +/* 000172B0 */ 0x04, 0x06, 0x06, 0x06, 0x06, 0x08, 0x06, 0xFE, 0x94, 0x03, 0x05, 0xFE, 0x22, 0x04, 0x06, 0xFE, +/* 000172C0 */ 0x2F, 0x03, 0x08, 0xA6, 0x58, 0x06, 0x4E, 0x07, 0x2A, 0x09, 0x06, 0x15, 0x03, 0x00, 0x09, 0x02, +/* 000172D0 */ 0x09, 0x24, 0x00, 0x8F, 0x03, 0x03, 0x0A, 0x00, 0x00, 0x6D, 0x09, 0x0A, 0x00, 0x07, 0x03, 0x00, +/* 000172E0 */ 0x59, 0x00, 0x0A, 0x5A, 0x01, 0x03, 0x00, 0x00, 0x5A, 0x02, 0x04, 0x00, 0x00, 0xF4, 0x03, 0xFF, +/* 000172F0 */ 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x01, 0x06, 0x09, 0x01, 0x00, 0x4A, 0x09, 0x07, +/* 00017300 */ 0x02, 0x00, 0x59, 0x00, 0x05, 0x5A, 0x01, 0x06, 0x01, 0x00, 0xF0, 0x02, 0x09, 0x09, 0x01, 0x00, +/* 00017310 */ 0x45, 0x07, 0x09, 0x5F, 0x09, 0x07, 0x01, 0xA8, 0x0A, 0x14, 0x03, 0x00, 0x09, 0x0A, 0x09, 0x3E, +/* 00017320 */ 0x00, 0x45, 0x09, 0x07, 0x8F, 0x03, 0x36, 0x0B, 0x02, 0x00, 0x4A, 0x0B, 0x6D, 0x0A, 0x0B, 0x02, +/* 00017330 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x0B, 0x8F, 0x01, 0x05, 0x0C, 0x03, 0x00, 0x4A, 0x0C, 0x5A, 0x01, +/* 00017340 */ 0x0C, 0x02, 0x00, 0x5A, 0x02, 0x07, 0x02, 0x00, 0xF4, 0x03, 0x0A, 0x0A, 0x02, 0x00, 0x00, 0x00, +/* 00017350 */ 0x02, 0x00, 0x77, 0x0A, 0x09, 0x03, 0x5F, 0x09, 0x07, 0x04, 0x82, 0x09, 0x09, 0x06, 0x01, 0x5F, +/* 00017360 */ 0x00, 0x07, 0x05, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB6, 0x02, 0xFE, 0x25, 0x04, +/* 00017370 */ 0x54, 0xFE, 0x25, 0x04, 0xFE, 0x25, 0x04, 0xFE, 0x25, 0x04, 0xFE, 0x2D, 0xD5, 0x08, 0x04, 0x00, +/* 00017380 */ 0x00, 0x00, 0x0B, 0x00, 0x30, 0x00, 0x24, 0x00, 0x6C, 0x00, 0x1C, 0x00, 0x3C, 0x00, 0x0E, 0x00, +/* 00017390 */ 0x3E, 0x00, 0x35, 0x00, 0x49, 0x00, 0x09, 0x00, 0x41, 0x00, 0x09, 0x00, 0x29, 0x00, 0x00, 0x7F, +/* 000173A0 */ 0x5C, 0x18, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0xC2, 0x04, 0x55, 0xA0, 0x41, 0xC3, 0x00, 0xFE, +/* 000173B0 */ 0xEE, 0x03, 0x52, 0xFE, 0x79, 0xD1, 0xFE, 0x79, 0xD1, 0x09, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFE, +/* 000173C0 */ 0x79, 0xD1, 0xFE, 0x78, 0x02, 0xFE, 0x78, 0x02, 0x06, 0x11, 0x15, 0x04, 0x2C, 0x2A, 0x03, 0x03, +/* 000173D0 */ 0x01, 0x03, 0x01, 0x01, 0x01, 0x01, 0x14, 0x06, 0xFE, 0x94, 0x03, 0x05, 0xFE, 0x22, 0x04, 0x06, +/* 000173E0 */ 0xFE, 0x2F, 0x03, 0x08, 0x06, 0xFE, 0xD7, 0x03, 0x06, 0xFE, 0x24, 0x04, 0x06, 0xFE, 0x18, 0x04, +/* 000173F0 */ 0x06, 0xFE, 0x1B, 0x04, 0x06, 0xFE, 0x1C, 0x04, 0x06, 0xFE, 0xDA, 0x03, 0x06, 0xFE, 0xDB, 0x03, +/* 00017400 */ 0x06, 0xFE, 0xDC, 0x03, 0x06, 0xFE, 0xDD, 0x03, 0x06, 0xFE, 0xDE, 0x03, 0x06, 0xFE, 0x1F, 0x04, +/* 00017410 */ 0xAA, 0x58, 0x11, 0x4E, 0x12, 0x4E, 0x13, 0x2A, 0x15, 0x11, 0x15, 0x03, 0x00, 0x15, 0x02, 0x09, +/* 00017420 */ 0x24, 0x00, 0x8F, 0x03, 0x03, 0x16, 0x00, 0x00, 0x6D, 0x15, 0x16, 0x00, 0x07, 0x03, 0x00, 0x59, +/* 00017430 */ 0x00, 0x16, 0x5A, 0x01, 0x03, 0x00, 0x00, 0x5A, 0x02, 0x04, 0x00, 0x00, 0xF4, 0x03, 0xFF, 0x15, +/* 00017440 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x01, 0x06, 0x15, 0x01, 0x00, 0x4A, 0x15, 0x07, 0x02, +/* 00017450 */ 0x00, 0x59, 0x00, 0x05, 0x5A, 0x01, 0x11, 0x01, 0x00, 0xF0, 0x02, 0x15, 0x15, 0x01, 0x00, 0x45, +/* 00017460 */ 0x12, 0x15, 0xD0, 0x15, 0x0B, 0x00, 0x00, 0xA1, 0x00, 0x06, 0x15, 0xA1, 0x01, 0x07, 0x15, 0xA1, +/* 00017470 */ 0x02, 0x08, 0x15, 0xA1, 0x03, 0x09, 0x15, 0xA1, 0x04, 0x0A, 0x15, 0xA1, 0x05, 0x0B, 0x15, 0xA1, +/* 00017480 */ 0x06, 0x0C, 0x15, 0xA1, 0x07, 0x0D, 0x15, 0xA1, 0x08, 0x0E, 0x15, 0xA1, 0x09, 0x0F, 0x15, 0xA1, +/* 00017490 */ 0x0A, 0x10, 0x15, 0x45, 0x13, 0x15, 0x8F, 0x02, 0x17, 0x15, 0x02, 0x00, 0x4A, 0x15, 0x07, 0x03, +/* 000174A0 */ 0x00, 0x59, 0x00, 0x05, 0x5A, 0x01, 0x13, 0x02, 0x00, 0x5A, 0x02, 0x12, 0x02, 0x00, 0xF0, 0x03, +/* 000174B0 */ 0x00, 0x15, 0x02, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB6, 0x02, 0xFE, 0xA6, +/* 000174C0 */ 0xD1, 0x06, 0x06, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x34, 0x00, 0x24, 0x00, 0x74, 0x00, 0x1C, 0x00, +/* 000174D0 */ 0x40, 0x00, 0x34, 0x00, 0x21, 0x01, 0x23, 0x00, 0x41, 0x00, 0x00, 0x7F, 0x5C, 0x0A, 0xC1, 0x07, +/* 000174E0 */ 0x10, 0x03, 0x00, 0xFE, 0xAF, 0x04, 0x23, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x0D, 0x04, 0x51, 0xFE, +/* 000174F0 */ 0x3E, 0xCE, 0xFE, 0x3E, 0xCE, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0x3E, 0xCE, 0xFE, 0x9E, +/* 00017500 */ 0x02, 0xFE, 0x9E, 0x02, 0x05, 0x05, 0x08, 0x04, 0x32, 0x2E, 0x03, 0x01, 0x04, 0x02, 0x07, 0x07, +/* 00017510 */ 0x07, 0x07, 0x01, 0x07, 0x06, 0xFE, 0x94, 0x03, 0x05, 0xFE, 0x22, 0x04, 0x06, 0xFE, 0x2F, 0x03, +/* 00017520 */ 0xDB, 0x4E, 0x06, 0x8F, 0x03, 0x03, 0x09, 0x00, 0x00, 0x6D, 0x08, 0x09, 0x00, 0x07, 0x02, 0x00, +/* 00017530 */ 0x59, 0x00, 0x09, 0x5A, 0x01, 0x05, 0x00, 0x00, 0xF4, 0x02, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, +/* 00017540 */ 0x00, 0x00, 0x45, 0x06, 0x08, 0x0E, 0x08, 0x00, 0x06, 0x5F, 0x08, 0x06, 0x01, 0x0F, 0x24, 0x00, +/* 00017550 */ 0x08, 0x8F, 0x01, 0x04, 0x08, 0x01, 0x00, 0x4A, 0x08, 0xE3, 0x08, 0x05, 0x08, 0x00, 0x0E, 0x13, +/* 00017560 */ 0x00, 0x08, 0x8F, 0x03, 0x03, 0x08, 0x00, 0x00, 0x5F, 0x08, 0x08, 0x02, 0x98, 0x08, 0x05, 0x08, +/* 00017570 */ 0x00, 0x00, 0x45, 0x05, 0x08, 0x2A, 0x08, 0x05, 0x15, 0x03, 0x00, 0x08, 0x02, 0x09, 0x24, 0x00, +/* 00017580 */ 0x8F, 0x03, 0x03, 0x09, 0x00, 0x00, 0x6D, 0x08, 0x09, 0x03, 0x07, 0x03, 0x00, 0x59, 0x00, 0x09, +/* 00017590 */ 0x5A, 0x01, 0x03, 0x01, 0x00, 0x5A, 0x02, 0x04, 0x01, 0x00, 0xF4, 0x03, 0xFF, 0x08, 0x03, 0x00, +/* 000175A0 */ 0x00, 0x00, 0x01, 0x00, 0x8F, 0x03, 0x03, 0x09, 0x00, 0x00, 0x6D, 0x08, 0x09, 0x04, 0x07, 0x02, +/* 000175B0 */ 0x00, 0x59, 0x00, 0x09, 0x5A, 0x01, 0x05, 0x02, 0x00, 0xF4, 0x02, 0x08, 0x08, 0x04, 0x00, 0x00, +/* 000175C0 */ 0x00, 0x02, 0x00, 0x45, 0x06, 0x08, 0x5F, 0x08, 0x06, 0x05, 0x0F, 0x24, 0x00, 0x08, 0x8F, 0x03, +/* 000175D0 */ 0x03, 0x09, 0x00, 0x00, 0x6D, 0x08, 0x09, 0x06, 0x07, 0x03, 0x00, 0x59, 0x00, 0x09, 0x5A, 0x01, +/* 000175E0 */ 0x03, 0x03, 0x00, 0x5A, 0x02, 0x04, 0x03, 0x00, 0xF4, 0x03, 0xFF, 0x08, 0x06, 0x00, 0x00, 0x00, +/* 000175F0 */ 0x03, 0x00, 0x45, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x05, 0x02, 0xFE, +/* 00017600 */ 0x20, 0x04, 0xFE, 0x30, 0x02, 0xFE, 0xB6, 0x02, 0xFE, 0x05, 0x02, 0xFE, 0x20, 0x04, 0xFE, 0xB6, +/* 00017610 */ 0x02, 0xFE, 0x5A, 0xCE, 0x0A, 0x02, 0x00, 0x00, 0x00, 0x22, 0x00, 0x3D, 0x00, 0x1D, 0x00, 0x6E, +/* 00017620 */ 0x00, 0x13, 0x00, 0x3D, 0x00, 0x0B, 0x00, 0x2E, 0x00, 0x24, 0x00, 0x6C, 0x00, 0x22, 0x00, 0x39, +/* 00017630 */ 0x00, 0x08, 0x00, 0x3D, 0x00, 0x24, 0x00, 0x6C, 0x00, 0x08, 0x00, 0x1D, 0x00, 0x00, 0x7F, 0x5C, +/* 00017640 */ 0x08, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x97, 0x04, 0x5E, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x38, +/* 00017650 */ 0x03, 0x50, 0xFE, 0x05, 0xCB, 0xFE, 0x05, 0xCB, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x02, 0xFE, 0x05, +/* 00017660 */ 0xCB, 0xB2, 0xB2, 0x05, 0x03, 0x06, 0x08, 0x17, 0x16, 0x03, 0x02, 0x03, 0x01, 0x01, 0x01, 0x01, +/* 00017670 */ 0x05, 0x08, 0x57, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA8, 0x06, 0x45, 0x04, 0x06, 0x8F, 0x02, 0x16, +/* 00017680 */ 0x06, 0x00, 0x00, 0x4A, 0x06, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x8F, 0x03, 0x03, 0x07, 0x01, +/* 00017690 */ 0x00, 0x5F, 0x07, 0x07, 0x00, 0x5A, 0x01, 0x07, 0x00, 0x00, 0x8F, 0x02, 0x12, 0x07, 0x02, 0x00, +/* 000176A0 */ 0x4A, 0x07, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x03, 0x01, 0x00, 0xF0, 0x02, 0x07, +/* 000176B0 */ 0x07, 0x01, 0x00, 0x5A, 0x02, 0x07, 0x00, 0x00, 0x5A, 0x03, 0x04, 0x00, 0x00, 0xF0, 0x04, 0x00, +/* 000176C0 */ 0x06, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xF1, 0x01, 0xFE, 0x2A, 0xCB, +/* 000176D0 */ 0x03, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x23, 0x00, 0x4B, 0x00, 0x69, 0x00, 0x00, 0x7F, 0x5C, +/* 000176E0 */ 0x08, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x88, 0x04, 0x5E, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x16, +/* 000176F0 */ 0x04, 0x4F, 0xFE, 0x28, 0xC8, 0xFE, 0x28, 0xC8, 0x09, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0x28, +/* 00017700 */ 0xC8, 0xFE, 0x7B, 0x02, 0xFE, 0x7B, 0x02, 0x06, 0x07, 0x0B, 0x06, 0x32, 0x30, 0x03, 0x05, 0x02, +/* 00017710 */ 0x06, 0x06, 0x06, 0x06, 0x0A, 0x06, 0xFE, 0x94, 0x03, 0x05, 0xFE, 0x23, 0x04, 0x06, 0xFE, 0x2F, +/* 00017720 */ 0x03, 0x0B, 0x0C, 0xDF, 0x58, 0x08, 0x4E, 0x09, 0x8F, 0x03, 0x24, 0x0C, 0x00, 0x00, 0x6D, 0x0B, +/* 00017730 */ 0x0C, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0C, 0x5A, 0x01, 0x07, 0x00, 0x00, 0xF4, 0x02, 0x0B, +/* 00017740 */ 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x07, 0x0B, 0x2A, 0x0B, 0x08, 0x15, 0x03, 0x00, +/* 00017750 */ 0x0B, 0x02, 0x09, 0x24, 0x00, 0x8F, 0x03, 0x03, 0x0C, 0x01, 0x00, 0x6D, 0x0B, 0x0C, 0x01, 0x07, +/* 00017760 */ 0x03, 0x00, 0x59, 0x00, 0x0C, 0x5A, 0x01, 0x03, 0x01, 0x00, 0x5A, 0x02, 0x04, 0x01, 0x00, 0xF4, +/* 00017770 */ 0x03, 0xFF, 0x0B, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x8F, 0x03, 0x03, 0x0C, 0x01, 0x00, 0x6D, +/* 00017780 */ 0x0B, 0x0C, 0x02, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0C, 0x5A, 0x01, 0x08, 0x02, 0x00, 0xF4, 0x02, +/* 00017790 */ 0x0B, 0x0B, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x45, 0x09, 0x0B, 0xA8, 0x0B, 0x14, 0x08, 0x00, +/* 000177A0 */ 0x09, 0x0B, 0x5F, 0x0B, 0x09, 0x03, 0x0F, 0x24, 0x00, 0x0B, 0x8F, 0x03, 0x03, 0x0C, 0x01, 0x00, +/* 000177B0 */ 0x6D, 0x0B, 0x0C, 0x04, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0C, 0x5A, 0x01, 0x03, 0x03, 0x00, 0x5A, +/* 000177C0 */ 0x02, 0x04, 0x03, 0x00, 0xF4, 0x03, 0xFF, 0x0B, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x8F, 0x03, +/* 000177D0 */ 0x03, 0x0C, 0x01, 0x00, 0x6D, 0x0B, 0x0C, 0x05, 0x07, 0x05, 0x00, 0x59, 0x00, 0x0C, 0x5A, 0x01, +/* 000177E0 */ 0x07, 0x04, 0x00, 0x5A, 0x02, 0x09, 0x04, 0x00, 0x5A, 0x03, 0x05, 0x04, 0x00, 0x5A, 0x04, 0x06, +/* 000177F0 */ 0x04, 0x00, 0xF4, 0x05, 0x00, 0x0B, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x09, 0x02, 0x00, 0xA8, +/* 00017800 */ 0x00, 0x24, 0x00, 0xFE, 0x23, 0x03, 0xFE, 0xB6, 0x02, 0xFE, 0x05, 0x02, 0xFE, 0x20, 0x04, 0xFE, +/* 00017810 */ 0xB6, 0x02, 0xFE, 0xF8, 0x01, 0xFE, 0x50, 0xC8, 0x08, 0x04, 0x00, 0x00, 0x00, 0x22, 0x00, 0x27, +/* 00017820 */ 0x00, 0x0B, 0x00, 0x30, 0x00, 0x24, 0x00, 0x73, 0x00, 0x22, 0x00, 0x41, 0x00, 0x0F, 0x00, 0x5B, +/* 00017830 */ 0x00, 0x24, 0x00, 0x73, 0x00, 0x33, 0x00, 0x79, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, +/* 00017840 */ 0x03, 0x00, 0xFE, 0x7E, 0x04, 0x50, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x15, 0x04, 0x4E, 0xFE, 0x61, +/* 00017850 */ 0xC6, 0xFE, 0x61, 0xC6, 0x09, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0x61, 0xC6, 0xFE, 0x65, 0x01, +/* 00017860 */ 0xFE, 0x65, 0x01, 0x05, 0x05, 0x08, 0x06, 0x1F, 0x1E, 0x03, 0x03, 0x02, 0x04, 0x04, 0x04, 0x04, +/* 00017870 */ 0x07, 0x05, 0xFE, 0x22, 0x04, 0x06, 0xFE, 0x2F, 0x03, 0x0C, 0x89, 0x58, 0x06, 0x8F, 0x03, 0x24, +/* 00017880 */ 0x09, 0x00, 0x00, 0x6D, 0x08, 0x09, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x09, 0x5A, 0x01, 0x05, +/* 00017890 */ 0x00, 0x00, 0xF4, 0x02, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x05, 0x08, 0x0E, +/* 000178A0 */ 0x08, 0x00, 0x06, 0x5F, 0x08, 0x06, 0x01, 0x0F, 0x24, 0x00, 0x08, 0x8F, 0x03, 0x03, 0x09, 0x01, +/* 000178B0 */ 0x00, 0x6D, 0x08, 0x09, 0x02, 0x07, 0x03, 0x00, 0x59, 0x00, 0x09, 0x5A, 0x01, 0x02, 0x01, 0x00, +/* 000178C0 */ 0x5A, 0x02, 0x03, 0x01, 0x00, 0xF4, 0x03, 0xFF, 0x08, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x8F, +/* 000178D0 */ 0x03, 0x03, 0x09, 0x01, 0x00, 0x6D, 0x08, 0x09, 0x03, 0x07, 0x05, 0x00, 0x59, 0x00, 0x09, 0x5A, +/* 000178E0 */ 0x01, 0x05, 0x02, 0x00, 0x5A, 0x02, 0x06, 0x02, 0x00, 0x5A, 0x03, 0x04, 0x02, 0x00, 0x5A, 0x04, +/* 000178F0 */ 0x04, 0x02, 0x00, 0xF4, 0x05, 0x00, 0x08, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x09, 0x02, 0x00, +/* 00017900 */ 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x23, 0x03, 0xFE, 0x20, 0x04, 0xFE, 0xB6, 0x02, 0xFE, 0xF8, 0x01, +/* 00017910 */ 0xFE, 0x82, 0xC6, 0x05, 0x02, 0x00, 0x00, 0x00, 0x22, 0x00, 0x27, 0x00, 0x0C, 0x00, 0x3E, 0x00, +/* 00017920 */ 0x24, 0x00, 0x6C, 0x00, 0x33, 0x00, 0x72, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x17, 0x10, 0x43, +/* 00017930 */ 0x00, 0xFE, 0x63, 0x04, 0x44, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x2F, 0x03, 0x4D, 0xFE, 0xE5, 0xC1, +/* 00017940 */ 0xFE, 0xE5, 0xC1, 0x08, 0xFE, 0x00, 0x90, 0x03, 0x01, 0xFE, 0xE5, 0xC1, 0xFE, 0xC9, 0x03, 0xFE, +/* 00017950 */ 0xC9, 0x03, 0x0C, 0x09, 0x12, 0x05, 0x5C, 0x53, 0x03, 0x06, 0x05, 0x09, 0x09, 0x09, 0x09, 0x01, +/* 00017960 */ 0x01, 0x11, 0x08, 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, 0x2B, 0x03, 0x0C, 0x06, 0xFE, 0x2C, 0x03, +/* 00017970 */ 0x06, 0xFE, 0x2D, 0x03, 0x07, 0xFE, 0x6E, 0x01, 0x01, 0x5D, 0x01, 0x0B, 0x58, 0x10, 0xC0, 0x0C, +/* 00017980 */ 0x4E, 0x0D, 0x4E, 0x0E, 0x4E, 0x0F, 0x15, 0x05, 0x00, 0x09, 0x02, 0xA8, 0x12, 0x45, 0x09, 0x12, +/* 00017990 */ 0x15, 0x05, 0x00, 0x0A, 0x02, 0xA8, 0x12, 0x45, 0x0A, 0x12, 0x4E, 0x0D, 0x4E, 0x0E, 0x4E, 0x0F, +/* 000179A0 */ 0xA8, 0x12, 0x14, 0x03, 0x00, 0x0B, 0x12, 0x09, 0x06, 0x00, 0x45, 0x12, 0x0C, 0x09, 0x03, 0x00, +/* 000179B0 */ 0x46, 0x12, 0x0B, 0x45, 0x0D, 0x12, 0x8F, 0x02, 0x07, 0x12, 0x00, 0x00, 0x4A, 0x12, 0x07, 0x03, +/* 000179C0 */ 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x0D, 0x00, 0x00, 0x8F, 0x01, 0x03, 0x13, 0x01, 0x00, 0x4A, +/* 000179D0 */ 0x13, 0x5A, 0x02, 0x13, 0x00, 0x00, 0xF0, 0x03, 0x12, 0x12, 0x00, 0x00, 0x45, 0x0E, 0x12, 0x8F, +/* 000179E0 */ 0x03, 0x03, 0x13, 0x02, 0x00, 0x6D, 0x12, 0x13, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x13, 0x5A, +/* 000179F0 */ 0x01, 0x0E, 0x01, 0x00, 0xF4, 0x02, 0x12, 0x12, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, 0x0F, +/* 00017A00 */ 0x12, 0xA8, 0x12, 0x14, 0x03, 0x00, 0x0F, 0x12, 0x09, 0x43, 0x00, 0x8F, 0x03, 0x36, 0x13, 0x03, +/* 00017A10 */ 0x00, 0x4A, 0x13, 0x6D, 0x12, 0x13, 0x01, 0x07, 0x01, 0x00, 0x59, 0x00, 0x13, 0xF4, 0x01, 0x12, +/* 00017A20 */ 0x12, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x45, 0x0F, 0x12, 0x8F, 0x03, 0x03, 0x13, 0x02, 0x00, +/* 00017A30 */ 0x6D, 0x12, 0x13, 0x02, 0x07, 0x03, 0x00, 0x59, 0x00, 0x13, 0x5A, 0x01, 0x0E, 0x03, 0x00, 0x5A, +/* 00017A40 */ 0x02, 0x0F, 0x03, 0x00, 0xF4, 0x03, 0xFF, 0x12, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x8F, 0x01, +/* 00017A50 */ 0x02, 0x12, 0x04, 0x00, 0x4A, 0x12, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x0F, 0x04, +/* 00017A60 */ 0x00, 0x5A, 0x02, 0x09, 0x04, 0x00, 0x5A, 0x03, 0x0A, 0x04, 0x00, 0xF0, 0x04, 0xFF, 0x12, 0x04, +/* 00017A70 */ 0x00, 0xA8, 0x12, 0x14, 0x03, 0x00, 0x0B, 0x12, 0x09, 0x61, 0x00, 0xE3, 0x12, 0x10, 0x0C, 0x00, +/* 00017A80 */ 0x0E, 0x58, 0x00, 0x12, 0x8F, 0x03, 0x36, 0x13, 0x03, 0x00, 0x4A, 0x13, 0x6D, 0x12, 0x13, 0x03, +/* 00017A90 */ 0x07, 0x04, 0x00, 0x59, 0x00, 0x13, 0x5A, 0x01, 0x10, 0x05, 0x00, 0x8F, 0x03, 0x03, 0x14, 0x02, +/* 00017AA0 */ 0x00, 0x5F, 0x14, 0x14, 0x04, 0x5A, 0x02, 0x14, 0x05, 0x00, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00017AB0 */ 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x7B, 0x0E, 0x14, 0x05, 0x7B, 0x05, 0x14, 0x06, 0x7B, +/* 00017AC0 */ 0x05, 0x14, 0x07, 0x7B, 0x05, 0x14, 0x08, 0x5A, 0x03, 0x14, 0x05, 0x00, 0xF4, 0x04, 0xFF, 0x12, +/* 00017AD0 */ 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x45, 0x00, 0x10, 0x09, 0x08, 0x00, 0x45, 0x00, 0x0E, 0x09, +/* 00017AE0 */ 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x01, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, +/* 00017AF0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, +/* 00017B00 */ 0x00, 0x95, 0x01, 0x00, 0x00, 0xFE, 0x05, 0x02, 0x69, 0xFE, 0x06, 0x02, 0xFE, 0x9C, 0x01, 0xFE, +/* 00017B10 */ 0x30, 0x02, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0xFB, +/* 00017B20 */ 0xC1, 0x0E, 0x0E, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x10, 0x00, 0x23, 0x00, 0x16, 0x00, +/* 00017B30 */ 0x54, 0x00, 0x29, 0x00, 0x63, 0x00, 0x22, 0x00, 0x47, 0x00, 0x0A, 0x00, 0x32, 0x00, 0x1F, 0x00, +/* 00017B40 */ 0x2B, 0x00, 0x24, 0x00, 0x51, 0x00, 0x23, 0x00, 0x45, 0x00, 0x13, 0x00, 0x50, 0x00, 0x52, 0x00, +/* 00017B50 */ 0xF4, 0x00, 0x06, 0x00, 0x28, 0x00, 0x08, 0x00, 0x1D, 0x00, 0x00, 0x7F, 0x5C, 0x0A, 0xC1, 0x07, +/* 00017B60 */ 0x10, 0x03, 0x00, 0xFE, 0x51, 0x04, 0x5F, 0xA0, 0x41, 0xE3, 0x00, 0xFE, 0x21, 0x04, 0x4C, 0xFE, +/* 00017B70 */ 0xFD, 0xBE, 0xFE, 0xFD, 0xBE, 0x0B, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFE, 0xFD, 0xBE, 0xFE, 0xFF, +/* 00017B80 */ 0x01, 0xFE, 0xFF, 0x01, 0x07, 0x0B, 0x10, 0x06, 0x36, 0x34, 0x03, 0x02, 0x05, 0x05, 0x04, 0x04, +/* 00017B90 */ 0x04, 0x04, 0x01, 0x0F, 0x07, 0x06, 0xFE, 0xA4, 0x03, 0x05, 0xFE, 0x0F, 0x04, 0x06, 0xFE, 0x0E, +/* 00017BA0 */ 0x04, 0x01, 0x00, 0x01, 0x01, 0x08, 0x0C, 0x0B, 0xEB, 0xB1, 0x0D, 0x58, 0x0B, 0x4E, 0x0C, 0x4E, +/* 00017BB0 */ 0x0E, 0x2A, 0x10, 0x0B, 0x15, 0x03, 0x00, 0x10, 0x03, 0x09, 0x33, 0x00, 0x8F, 0x03, 0x0B, 0x10, +/* 00017BC0 */ 0x00, 0x00, 0xE3, 0x10, 0x0B, 0x10, 0x00, 0x0F, 0x24, 0x00, 0x10, 0x8F, 0x03, 0x03, 0x11, 0x01, +/* 00017BD0 */ 0x00, 0x6D, 0x10, 0x11, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x11, 0x5A, 0x01, 0x04, 0x00, 0x00, +/* 00017BE0 */ 0x5A, 0x02, 0x05, 0x00, 0x00, 0xF4, 0x03, 0xFF, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, +/* 00017BF0 */ 0x03, 0x36, 0x11, 0x02, 0x00, 0x4A, 0x11, 0x6D, 0x10, 0x11, 0x01, 0x07, 0x01, 0x00, 0x59, 0x00, +/* 00017C00 */ 0x11, 0xF4, 0x01, 0x10, 0x10, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, 0x0C, 0x10, 0x8F, 0x01, +/* 00017C10 */ 0x02, 0x10, 0x03, 0x00, 0x4A, 0x10, 0x07, 0x04, 0x00, 0x59, 0x00, 0x08, 0x5A, 0x01, 0x0C, 0x02, +/* 00017C20 */ 0x00, 0x98, 0x11, 0x0D, 0x06, 0x00, 0x00, 0x5A, 0x02, 0x11, 0x02, 0x00, 0x98, 0x11, 0x0D, 0x07, +/* 00017C30 */ 0x01, 0x00, 0x5A, 0x03, 0x11, 0x02, 0x00, 0xF0, 0x04, 0xFF, 0x10, 0x02, 0x00, 0x8F, 0x03, 0x24, +/* 00017C40 */ 0x11, 0x04, 0x00, 0x6D, 0x10, 0x11, 0x02, 0x07, 0x02, 0x00, 0x59, 0x00, 0x11, 0x5A, 0x01, 0x0B, +/* 00017C50 */ 0x03, 0x00, 0xF4, 0x02, 0x10, 0x10, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x45, 0x0E, 0x10, 0x8F, +/* 00017C60 */ 0x03, 0x03, 0x11, 0x01, 0x00, 0x6D, 0x10, 0x11, 0x03, 0x07, 0x05, 0x00, 0x59, 0x00, 0x11, 0x5A, +/* 00017C70 */ 0x01, 0x0E, 0x04, 0x00, 0x5A, 0x02, 0x0C, 0x04, 0x00, 0x5A, 0x03, 0x09, 0x04, 0x00, 0x5A, 0x04, +/* 00017C80 */ 0x0A, 0x04, 0x00, 0xF4, 0x05, 0x00, 0x10, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x09, 0x02, 0x00, +/* 00017C90 */ 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB6, 0x02, 0x69, 0xFE, 0x23, 0x03, 0xFE, 0xF8, 0x01, 0xFE, 0x25, +/* 00017CA0 */ 0xBF, 0x07, 0x08, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x4D, 0x00, 0x24, 0x00, 0x68, 0x00, 0x1F, 0x00, +/* 00017CB0 */ 0x2C, 0x00, 0x2F, 0x00, 0x4E, 0x00, 0x22, 0x00, 0x2F, 0x00, 0x33, 0x00, 0x78, 0x00, 0x00, 0x7F, +/* 00017CC0 */ 0x5C, 0x1A, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x14, 0x04, 0x27, 0xA2, 0x41, 0xC1, 0x00, 0xFE, +/* 00017CD0 */ 0x0B, 0x04, 0x4B, 0xFE, 0x0D, 0xB5, 0xFE, 0x0D, 0xB5, 0x01, 0xFE, 0x00, 0x90, 0x04, 0x04, 0xFE, +/* 00017CE0 */ 0x0D, 0xB5, 0xFE, 0x8E, 0x09, 0xFE, 0x8E, 0x09, 0x11, 0x15, 0x23, 0x07, 0xE0, 0xCA, 0x03, 0x02, +/* 00017CF0 */ 0x11, 0x04, 0x08, 0x17, 0x17, 0x17, 0x17, 0x22, 0x08, 0x06, 0xFE, 0xE0, 0x03, 0x06, 0xFE, 0xA3, +/* 00017D00 */ 0x03, 0x05, 0xFE, 0xDF, 0x03, 0x05, 0xFE, 0x9C, 0x03, 0x06, 0xFE, 0x17, 0x04, 0x06, 0xFE, 0x18, +/* 00017D10 */ 0x04, 0x06, 0xFE, 0x19, 0x04, 0x06, 0xFE, 0x1A, 0x04, 0x06, 0xFE, 0x1B, 0x04, 0x01, 0x00, 0x06, +/* 00017D20 */ 0xFE, 0x1C, 0x04, 0x06, 0xFE, 0x1D, 0x04, 0x06, 0xFE, 0x1E, 0x04, 0x06, 0xFE, 0x37, 0x03, 0x01, +/* 00017D30 */ 0x03, 0x06, 0xFE, 0x1F, 0x04, 0x06, 0xFE, 0xA2, 0x03, 0x0B, 0xFE, 0x98, 0x03, 0x4E, 0x18, 0x4E, +/* 00017D40 */ 0x19, 0x4E, 0x1A, 0x4E, 0x1B, 0x4E, 0x1C, 0x4E, 0x1D, 0x4E, 0x1E, 0x4E, 0x1F, 0x4E, 0x20, 0x4E, +/* 00017D50 */ 0x21, 0x8F, 0x02, 0x12, 0x23, 0x00, 0x00, 0x4A, 0x23, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x5A, +/* 00017D60 */ 0x01, 0x16, 0x00, 0x00, 0xF0, 0x02, 0x23, 0x23, 0x00, 0x00, 0x45, 0x18, 0x23, 0xA8, 0x23, 0x14, +/* 00017D70 */ 0x03, 0x00, 0x17, 0x23, 0x09, 0x22, 0x00, 0x8F, 0x03, 0x36, 0x25, 0x01, 0x00, 0x4A, 0x25, 0x6D, +/* 00017D80 */ 0x24, 0x25, 0x00, 0x07, 0x01, 0x00, 0x59, 0x00, 0x25, 0xF4, 0x01, 0x24, 0x24, 0x00, 0x00, 0x00, +/* 00017D90 */ 0x00, 0x01, 0x00, 0x45, 0x23, 0x24, 0x09, 0x22, 0x00, 0x8F, 0x03, 0x24, 0x25, 0x02, 0x00, 0x6D, +/* 00017DA0 */ 0x24, 0x25, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x25, 0x5A, 0x01, 0x17, 0x02, 0x00, 0xF4, 0x02, +/* 00017DB0 */ 0x24, 0x24, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x46, 0x23, 0x24, 0x45, 0x17, 0x23, 0x8F, 0x03, +/* 00017DC0 */ 0x36, 0x24, 0x01, 0x00, 0x4A, 0x24, 0x6D, 0x23, 0x24, 0x02, 0x07, 0x01, 0x00, 0x59, 0x00, 0x24, +/* 00017DD0 */ 0xF4, 0x01, 0x23, 0x23, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x45, 0x19, 0x23, 0x45, 0x23, 0x19, +/* 00017DE0 */ 0x8F, 0x02, 0x02, 0x24, 0x03, 0x00, 0x4A, 0x24, 0x07, 0x06, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, +/* 00017DF0 */ 0x17, 0x04, 0x00, 0x5A, 0x02, 0x03, 0x04, 0x00, 0x5A, 0x03, 0x04, 0x04, 0x00, 0xD0, 0x25, 0x02, +/* 00017E00 */ 0x00, 0x00, 0xA1, 0x00, 0x05, 0x25, 0xA1, 0x01, 0x06, 0x25, 0x5A, 0x04, 0x25, 0x04, 0x00, 0x5A, +/* 00017E10 */ 0x05, 0x05, 0x04, 0x00, 0xF0, 0x06, 0x24, 0x24, 0x04, 0x00, 0x77, 0x24, 0x23, 0x03, 0x8F, 0x02, +/* 00017E20 */ 0x0C, 0x23, 0x04, 0x00, 0x4A, 0x23, 0x07, 0x05, 0x00, 0x59, 0x00, 0x02, 0x8F, 0x03, 0x03, 0x24, +/* 00017E30 */ 0x05, 0x00, 0x5F, 0x24, 0x24, 0x04, 0x5A, 0x01, 0x24, 0x05, 0x00, 0x5A, 0x02, 0x18, 0x05, 0x00, +/* 00017E40 */ 0x5A, 0x03, 0x19, 0x05, 0x00, 0xD0, 0x24, 0x01, 0x01, 0x00, 0xA1, 0x00, 0x07, 0x24, 0x5A, 0x04, +/* 00017E50 */ 0x24, 0x05, 0x00, 0xF0, 0x05, 0x23, 0x23, 0x05, 0x00, 0x45, 0x1A, 0x23, 0x5F, 0x23, 0x1A, 0x05, +/* 00017E60 */ 0x77, 0x23, 0x15, 0x06, 0x5F, 0x23, 0x1A, 0x07, 0x77, 0x23, 0x15, 0x08, 0x8F, 0x02, 0x02, 0x23, +/* 00017E70 */ 0x03, 0x00, 0x4A, 0x23, 0x07, 0x06, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x17, 0x06, 0x00, 0x5A, +/* 00017E80 */ 0x02, 0x08, 0x06, 0x00, 0x5A, 0x03, 0x04, 0x06, 0x00, 0xD0, 0x24, 0x03, 0x02, 0x00, 0xA1, 0x00, +/* 00017E90 */ 0x09, 0x24, 0xA1, 0x01, 0x0A, 0x24, 0xA1, 0x02, 0x0B, 0x24, 0x5A, 0x04, 0x24, 0x06, 0x00, 0x5A, +/* 00017EA0 */ 0x05, 0x09, 0x06, 0x00, 0xF0, 0x06, 0x23, 0x23, 0x06, 0x00, 0x45, 0x1B, 0x23, 0x77, 0x1B, 0x15, +/* 00017EB0 */ 0x09, 0x8F, 0x03, 0x03, 0x23, 0x05, 0x00, 0x5F, 0x23, 0x23, 0x0A, 0x98, 0x23, 0x23, 0x1B, 0x00, +/* 00017EC0 */ 0x00, 0x77, 0x23, 0x15, 0x0B, 0x41, 0x23, 0x1B, 0x0B, 0x45, 0x1C, 0x23, 0x8F, 0x02, 0x02, 0x23, +/* 00017ED0 */ 0x03, 0x00, 0x4A, 0x23, 0x07, 0x06, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x17, 0x07, 0x00, 0x5A, +/* 00017EE0 */ 0x02, 0x0B, 0x07, 0x00, 0x5A, 0x03, 0x04, 0x07, 0x00, 0xA8, 0x24, 0x5A, 0x04, 0x24, 0x07, 0x00, +/* 00017EF0 */ 0xA8, 0x24, 0x5A, 0x05, 0x24, 0x07, 0x00, 0xF0, 0x06, 0x23, 0x23, 0x07, 0x00, 0x45, 0x1D, 0x23, +/* 00017F00 */ 0xA8, 0x23, 0x15, 0x03, 0x00, 0x1D, 0x23, 0x09, 0x3F, 0x00, 0x8F, 0x02, 0x10, 0x23, 0x06, 0x00, +/* 00017F10 */ 0x4A, 0x23, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x1D, 0x08, 0x00, 0xF0, 0x02, 0x23, +/* 00017F20 */ 0x23, 0x08, 0x00, 0x0F, 0x22, 0x00, 0x23, 0x8F, 0x03, 0x03, 0x24, 0x05, 0x00, 0x6D, 0x23, 0x24, +/* 00017F30 */ 0x0C, 0x07, 0x02, 0x00, 0x59, 0x00, 0x24, 0x5A, 0x01, 0x1D, 0x09, 0x00, 0xF4, 0x02, 0xFF, 0x23, +/* 00017F40 */ 0x0C, 0x00, 0x00, 0x00, 0x09, 0x00, 0x09, 0x28, 0x00, 0xA8, 0x23, 0x14, 0x03, 0x00, 0x1D, 0x23, +/* 00017F50 */ 0x09, 0x1E, 0x00, 0x0E, 0x1A, 0x00, 0x1C, 0x8F, 0x03, 0x03, 0x24, 0x05, 0x00, 0x6D, 0x23, 0x24, +/* 00017F60 */ 0x0D, 0x07, 0x01, 0x00, 0x59, 0x00, 0x24, 0xF4, 0x01, 0xFF, 0x23, 0x0D, 0x00, 0x00, 0x00, 0x0A, +/* 00017F70 */ 0x00, 0x45, 0x1E, 0x0C, 0x0E, 0x4A, 0x00, 0x1C, 0x8F, 0x03, 0x36, 0x24, 0x01, 0x00, 0x4A, 0x24, +/* 00017F80 */ 0x6D, 0x23, 0x24, 0x0E, 0x07, 0x02, 0x00, 0x59, 0x00, 0x24, 0x5A, 0x01, 0x1D, 0x0B, 0x00, 0xF4, +/* 00017F90 */ 0x02, 0x23, 0x23, 0x0E, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x45, 0x1D, 0x23, 0x77, 0x1D, 0x15, 0x0F, +/* 00017FA0 */ 0x8F, 0x03, 0x03, 0x24, 0x05, 0x00, 0x6D, 0x23, 0x24, 0x10, 0x07, 0x02, 0x00, 0x59, 0x00, 0x24, +/* 00017FB0 */ 0x5A, 0x01, 0x1D, 0x0C, 0x00, 0xF4, 0x02, 0x23, 0x23, 0x10, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x45, +/* 00017FC0 */ 0x1E, 0x23, 0x8F, 0x02, 0x02, 0x23, 0x03, 0x00, 0x4A, 0x23, 0x07, 0x06, 0x00, 0x59, 0x00, 0x02, +/* 00017FD0 */ 0x5A, 0x01, 0x17, 0x0D, 0x00, 0x5A, 0x02, 0x0D, 0x0D, 0x00, 0x5A, 0x03, 0x04, 0x0D, 0x00, 0xD0, +/* 00017FE0 */ 0x24, 0x03, 0x03, 0x00, 0xA1, 0x00, 0x0E, 0x24, 0xA1, 0x01, 0x0F, 0x24, 0xA1, 0x02, 0x10, 0x24, +/* 00017FF0 */ 0x5A, 0x04, 0x24, 0x0D, 0x00, 0x5A, 0x05, 0x0F, 0x0D, 0x00, 0xF0, 0x06, 0x23, 0x23, 0x0D, 0x00, +/* 00018000 */ 0x45, 0x1F, 0x23, 0x0E, 0x18, 0x00, 0x1C, 0x77, 0x1F, 0x15, 0x11, 0x8F, 0x03, 0x03, 0x23, 0x05, +/* 00018010 */ 0x00, 0x5F, 0x23, 0x23, 0x12, 0x98, 0x23, 0x23, 0x1F, 0x01, 0x00, 0x77, 0x23, 0x15, 0x13, 0xA8, +/* 00018020 */ 0x23, 0x45, 0x20, 0x23, 0xA8, 0x23, 0x45, 0x21, 0x23, 0x0E, 0x09, 0x00, 0x1C, 0x45, 0x20, 0x1E, +/* 00018030 */ 0x45, 0x21, 0x1E, 0x09, 0x14, 0x00, 0x45, 0x20, 0x0C, 0x14, 0x03, 0x00, 0x1B, 0x0A, 0x09, 0x06, +/* 00018040 */ 0x00, 0x45, 0x21, 0x0C, 0x09, 0x03, 0x00, 0x45, 0x21, 0x11, 0x8F, 0x02, 0x15, 0x23, 0x07, 0x00, +/* 00018050 */ 0x4A, 0x23, 0x07, 0x05, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x15, 0x0E, 0x00, 0x5A, 0x02, 0x17, +/* 00018060 */ 0x0E, 0x00, 0x5A, 0x03, 0x20, 0x0E, 0x00, 0x5A, 0x04, 0x21, 0x0E, 0x00, 0xF0, 0x05, 0xFF, 0x23, +/* 00018070 */ 0x0E, 0x00, 0x45, 0x23, 0x15, 0x8F, 0x02, 0x02, 0x24, 0x03, 0x00, 0x4A, 0x24, 0x07, 0x06, 0x00, +/* 00018080 */ 0x59, 0x00, 0x02, 0x5A, 0x01, 0x17, 0x0F, 0x00, 0x5A, 0x02, 0x12, 0x0F, 0x00, 0x5A, 0x03, 0x13, +/* 00018090 */ 0x0F, 0x00, 0xA8, 0x25, 0x5A, 0x04, 0x25, 0x0F, 0x00, 0x5A, 0x05, 0x14, 0x0F, 0x00, 0xF0, 0x06, +/* 000180A0 */ 0x24, 0x24, 0x0F, 0x00, 0x77, 0x24, 0x23, 0x14, 0x77, 0x14, 0x15, 0x15, 0x8F, 0x03, 0x03, 0x24, +/* 000180B0 */ 0x05, 0x00, 0x6D, 0x23, 0x24, 0x16, 0x07, 0x02, 0x00, 0x59, 0x00, 0x24, 0x5A, 0x01, 0x15, 0x10, +/* 000180C0 */ 0x00, 0xF4, 0x02, 0xFF, 0x23, 0x16, 0x00, 0x00, 0x00, 0x10, 0x00, 0x45, 0x00, 0x15, 0x09, 0x02, +/* 000180D0 */ 0x00, 0xA8, 0x00, 0x24, 0x00, 0x69, 0xFE, 0x21, 0x03, 0x69, 0xFE, 0x0E, 0x02, 0xFE, 0xF1, 0x01, +/* 000180E0 */ 0xFE, 0x0D, 0x02, 0xFE, 0x0D, 0x02, 0xFE, 0x19, 0x02, 0xFE, 0x49, 0x02, 0xFE, 0x18, 0x04, 0xFE, +/* 000180F0 */ 0x25, 0x02, 0xFE, 0x43, 0x02, 0xFE, 0xB7, 0x02, 0xFE, 0xB8, 0x02, 0xFE, 0x7B, 0x01, 0xFE, 0x40, +/* 00018100 */ 0x02, 0xFE, 0xFB, 0x01, 0xFE, 0x41, 0x02, 0xFE, 0x26, 0x02, 0xFE, 0x42, 0x02, 0xFE, 0x4A, 0x02, +/* 00018110 */ 0xFE, 0x20, 0x04, 0xFE, 0xF9, 0x01, 0xFE, 0x3B, 0xB5, 0x28, 0x14, 0x00, 0x00, 0x00, 0x1C, 0x00, +/* 00018120 */ 0x46, 0x00, 0x51, 0x00, 0x58, 0x00, 0x1F, 0x00, 0x24, 0x00, 0x41, 0x00, 0x74, 0x00, 0x3E, 0x00, +/* 00018130 */ 0x62, 0x00, 0x08, 0x00, 0x22, 0x00, 0x08, 0x00, 0x28, 0x00, 0x41, 0x00, 0x70, 0x00, 0x04, 0x00, +/* 00018140 */ 0x1E, 0x00, 0x14, 0x00, 0x43, 0x00, 0x07, 0x00, 0x37, 0x00, 0x34, 0x00, 0x5B, 0x00, 0x27, 0x00, +/* 00018150 */ 0x55, 0x00, 0x22, 0x00, 0x40, 0x00, 0x0E, 0x00, 0x3D, 0x00, 0x1A, 0x00, 0x40, 0x00, 0x03, 0x00, +/* 00018160 */ 0x1D, 0x00, 0x04, 0x00, 0x23, 0x00, 0x24, 0x00, 0x34, 0x00, 0x04, 0x00, 0x28, 0x00, 0x22, 0x00, +/* 00018170 */ 0x48, 0x00, 0x41, 0x00, 0x79, 0x00, 0x04, 0x00, 0x23, 0x00, 0x04, 0x00, 0x36, 0x00, 0x14, 0x00, +/* 00018180 */ 0x6C, 0x00, 0x05, 0x00, 0x11, 0x00, 0x05, 0x00, 0x19, 0x00, 0x04, 0x00, 0x23, 0x00, 0x03, 0x00, +/* 00018190 */ 0x27, 0x00, 0x06, 0x00, 0x3C, 0x00, 0x03, 0x00, 0x21, 0x00, 0x08, 0x00, 0x2F, 0x00, 0x06, 0x00, +/* 000181A0 */ 0x3E, 0x00, 0x03, 0x00, 0x3E, 0x00, 0x28, 0x00, 0x51, 0x00, 0x36, 0x00, 0x5D, 0x00, 0x04, 0x00, +/* 000181B0 */ 0x7C, 0x00, 0x1F, 0x00, 0x2D, 0x00, 0x08, 0x00, 0x13, 0x00, 0x00, 0x7E, 0x5D, 0x08, 0xC1, 0x13, +/* 000181C0 */ 0x1A, 0x4B, 0x00, 0xFE, 0x56, 0x03, 0x16, 0xA0, 0x41, 0xD1, 0x00, 0x42, 0xFE, 0x13, 0x92, 0xFE, +/* 000181D0 */ 0x13, 0x92, 0x07, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFE, 0x13, 0x92, 0xFE, 0x12, 0x22, 0xFE, 0x12, +/* 000181E0 */ 0x22, 0x05, 0xFE, 0xE5, 0x03, 0xFE, 0xE6, 0x03, 0xFE, 0xE7, 0x03, 0xFE, 0x4B, 0x02, 0xFE, 0x4F, +/* 000181F0 */ 0x02, 0x0A, 0x18, 0x1D, 0x09, 0xAD, 0xAB, 0x02, 0x0C, 0x07, 0x1B, 0x1B, 0x1B, 0x1B, 0x05, 0x1A, +/* 00018200 */ 0x1B, 0x1C, 0x06, 0xFE, 0x27, 0x03, 0x06, 0xFE, 0xE8, 0x03, 0x05, 0xFE, 0xE9, 0x03, 0x08, 0x07, +/* 00018210 */ 0x05, 0xFE, 0xEA, 0x03, 0x05, 0xFE, 0xEB, 0x03, 0x05, 0xFE, 0x34, 0x03, 0x06, 0xFE, 0x38, 0x03, +/* 00018220 */ 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, 0x2B, 0x03, 0x0B, 0x06, 0xFE, 0x2C, 0x03, 0x0C, 0x06, 0xFE, +/* 00018230 */ 0x2D, 0x03, 0x06, 0xFE, 0xEC, 0x03, 0x06, 0xFE, 0xED, 0x03, 0x06, 0xFE, 0xEE, 0x03, 0x05, 0xFE, +/* 00018240 */ 0xEF, 0x03, 0x05, 0xFE, 0xF0, 0x03, 0x06, 0xFE, 0xF1, 0x03, 0x06, 0xFE, 0x77, 0x03, 0xFE, 0xF6, +/* 00018250 */ 0x02, 0x4E, 0x18, 0x4E, 0x19, 0x4E, 0x1D, 0x96, 0x02, 0x1D, 0x4E, 0x1D, 0x96, 0x03, 0x1D, 0x4E, +/* 00018260 */ 0x1D, 0x96, 0x04, 0x1D, 0x4E, 0x1D, 0x96, 0x05, 0x1D, 0x4E, 0x1D, 0x96, 0x06, 0x1D, 0x8F, 0x02, +/* 00018270 */ 0x32, 0x1D, 0x00, 0x00, 0x15, 0x03, 0x00, 0x1D, 0x02, 0x09, 0x13, 0x00, 0x8F, 0x02, 0x32, 0x1D, +/* 00018280 */ 0x00, 0x00, 0x15, 0x03, 0x00, 0x1D, 0x03, 0x09, 0x05, 0x00, 0xA8, 0x00, 0x09, 0xB6, 0x02, 0xD6, +/* 00018290 */ 0x00, 0x1D, 0x96, 0x02, 0x1D, 0xA8, 0x1D, 0x96, 0x03, 0x1D, 0x8F, 0x02, 0x03, 0x1E, 0x01, 0x00, +/* 000182A0 */ 0x6D, 0x1D, 0x1E, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x1E, 0x8F, 0x01, 0x06, 0x1F, 0x02, 0x00, +/* 000182B0 */ 0x4A, 0x1F, 0x07, 0x03, 0x00, 0x59, 0x00, 0x05, 0x5A, 0x01, 0x04, 0x01, 0x00, 0xD6, 0x01, 0x20, +/* 000182C0 */ 0x5A, 0x02, 0x20, 0x01, 0x00, 0xF0, 0x03, 0x1F, 0x1F, 0x01, 0x00, 0x5A, 0x01, 0x1F, 0x00, 0x00, +/* 000182D0 */ 0x8F, 0x02, 0x03, 0x1F, 0x01, 0x00, 0x5F, 0x1F, 0x1F, 0x01, 0x5F, 0x1F, 0x1F, 0x02, 0x5A, 0x02, +/* 000182E0 */ 0x1F, 0x00, 0x00, 0xF4, 0x03, 0xFF, 0x1D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x02, 0x32, +/* 000182F0 */ 0x1D, 0x00, 0x00, 0x14, 0x03, 0x00, 0x1D, 0x03, 0x09, 0x05, 0x00, 0xA8, 0x00, 0x09, 0x45, 0x02, +/* 00018300 */ 0xCD, 0x1D, 0x96, 0x04, 0x1D, 0x8F, 0x02, 0x23, 0x1D, 0x03, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 00018310 */ 0x05, 0x5A, 0x01, 0x07, 0x02, 0x00, 0xD6, 0x02, 0x1E, 0x5A, 0x02, 0x1E, 0x02, 0x00, 0xF0, 0x03, +/* 00018320 */ 0x1D, 0x1D, 0x02, 0x00, 0x96, 0x05, 0x1D, 0x8F, 0x01, 0x06, 0x1D, 0x02, 0x00, 0x4A, 0x1D, 0x07, +/* 00018330 */ 0x03, 0x00, 0x59, 0x00, 0x05, 0x5A, 0x01, 0x08, 0x03, 0x00, 0xD6, 0x03, 0x1E, 0x5A, 0x02, 0x1E, +/* 00018340 */ 0x03, 0x00, 0xF0, 0x03, 0x1D, 0x1D, 0x03, 0x00, 0x96, 0x06, 0x1D, 0x8F, 0x01, 0x06, 0x1D, 0x02, +/* 00018350 */ 0x00, 0x4A, 0x1D, 0x07, 0x03, 0x00, 0x59, 0x00, 0x05, 0x5A, 0x01, 0x09, 0x04, 0x00, 0xD6, 0x04, +/* 00018360 */ 0x1E, 0x5A, 0x02, 0x1E, 0x04, 0x00, 0xF0, 0x03, 0x1D, 0x1D, 0x04, 0x00, 0x45, 0x18, 0x1D, 0x8F, +/* 00018370 */ 0x02, 0x36, 0x1E, 0x04, 0x00, 0x4A, 0x1E, 0x6D, 0x1D, 0x1E, 0x03, 0x07, 0x04, 0x00, 0x59, 0x00, +/* 00018380 */ 0x1E, 0x93, 0x05, 0x1F, 0x05, 0x00, 0x5A, 0x01, 0x1F, 0x05, 0x00, 0x5A, 0x02, 0x0A, 0x05, 0x00, +/* 00018390 */ 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x7B, 0x18, 0x1F, +/* 000183A0 */ 0x04, 0x7B, 0x0D, 0x1F, 0x05, 0x7B, 0x0F, 0x1F, 0x06, 0x7B, 0x0D, 0x1F, 0x07, 0x5A, 0x03, 0x1F, +/* 000183B0 */ 0x05, 0x00, 0xF4, 0x04, 0xFF, 0x1D, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x8F, 0x02, 0x36, 0x1E, +/* 000183C0 */ 0x04, 0x00, 0x4A, 0x1E, 0x6D, 0x1D, 0x1E, 0x08, 0x07, 0x04, 0x00, 0x59, 0x00, 0x1E, 0x93, 0x05, +/* 000183D0 */ 0x1F, 0x05, 0x00, 0x5A, 0x01, 0x1F, 0x06, 0x00, 0x5A, 0x02, 0x11, 0x06, 0x00, 0xCE, 0x18, 0x00, +/* 000183E0 */ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x93, 0x04, 0x20, 0x06, 0x00, 0x7B, +/* 000183F0 */ 0x20, 0x1F, 0x09, 0x7B, 0x0F, 0x1F, 0x0A, 0x7B, 0x0F, 0x1F, 0x0B, 0x7B, 0x0F, 0x1F, 0x0C, 0x5A, +/* 00018400 */ 0x03, 0x1F, 0x06, 0x00, 0xF4, 0x04, 0xFF, 0x1D, 0x08, 0x00, 0x00, 0x00, 0x06, 0x00, 0x8F, 0x02, +/* 00018410 */ 0x36, 0x1E, 0x04, 0x00, 0x4A, 0x1E, 0x6D, 0x1D, 0x1E, 0x0D, 0x07, 0x04, 0x00, 0x59, 0x00, 0x1E, +/* 00018420 */ 0x93, 0x04, 0x1F, 0x06, 0x00, 0x5A, 0x01, 0x1F, 0x07, 0x00, 0x5A, 0x02, 0x12, 0x07, 0x00, 0xCE, +/* 00018430 */ 0x30, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x93, 0x05, 0x20, 0x05, +/* 00018440 */ 0x00, 0x7B, 0x20, 0x1F, 0x0E, 0x7B, 0x0D, 0x1F, 0x0F, 0x7B, 0x0F, 0x1F, 0x10, 0x7B, 0x0D, 0x1F, +/* 00018450 */ 0x11, 0x5A, 0x03, 0x1F, 0x07, 0x00, 0xF4, 0x04, 0xFF, 0x1D, 0x0D, 0x00, 0x00, 0x00, 0x07, 0x00, +/* 00018460 */ 0x8F, 0x02, 0x36, 0x1E, 0x04, 0x00, 0x4A, 0x1E, 0x6D, 0x1D, 0x1E, 0x12, 0x07, 0x04, 0x00, 0x59, +/* 00018470 */ 0x00, 0x1E, 0x93, 0x04, 0x1F, 0x06, 0x00, 0x5A, 0x01, 0x1F, 0x08, 0x00, 0x5A, 0x02, 0x13, 0x08, +/* 00018480 */ 0x00, 0xCE, 0x48, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x8F, 0x01, +/* 00018490 */ 0x06, 0x20, 0x02, 0x00, 0x4A, 0x20, 0x07, 0x03, 0x00, 0x59, 0x00, 0x05, 0x5A, 0x01, 0x14, 0x09, +/* 000184A0 */ 0x00, 0xD6, 0x05, 0x21, 0x5A, 0x02, 0x21, 0x09, 0x00, 0xF0, 0x03, 0x20, 0x20, 0x09, 0x00, 0x7B, +/* 000184B0 */ 0x20, 0x1F, 0x13, 0x7B, 0x0D, 0x1F, 0x14, 0x7B, 0x0F, 0x1F, 0x15, 0x7B, 0x0D, 0x1F, 0x16, 0x5A, +/* 000184C0 */ 0x03, 0x1F, 0x08, 0x00, 0xF4, 0x04, 0xFF, 0x1D, 0x12, 0x00, 0x00, 0x00, 0x08, 0x00, 0x8F, 0x01, +/* 000184D0 */ 0x06, 0x1D, 0x02, 0x00, 0x4A, 0x1D, 0x07, 0x03, 0x00, 0x59, 0x00, 0x05, 0x5A, 0x01, 0x15, 0x0A, +/* 000184E0 */ 0x00, 0xD6, 0x06, 0x1E, 0x5A, 0x02, 0x1E, 0x0A, 0x00, 0xF0, 0x03, 0x1D, 0x1D, 0x0A, 0x00, 0x45, +/* 000184F0 */ 0x19, 0x1D, 0x8F, 0x02, 0x36, 0x1E, 0x04, 0x00, 0x4A, 0x1E, 0x6D, 0x1D, 0x1E, 0x17, 0x07, 0x04, +/* 00018500 */ 0x00, 0x59, 0x00, 0x1E, 0x93, 0x04, 0x1F, 0x06, 0x00, 0x5A, 0x01, 0x1F, 0x0B, 0x00, 0x5A, 0x02, +/* 00018510 */ 0x16, 0x0B, 0x00, 0xCE, 0x60, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, +/* 00018520 */ 0x7B, 0x19, 0x1F, 0x18, 0x7B, 0x0F, 0x1F, 0x19, 0x7B, 0x0D, 0x1F, 0x1A, 0x5A, 0x03, 0x1F, 0x0B, +/* 00018530 */ 0x00, 0xF4, 0x04, 0xFF, 0x1D, 0x17, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x93, 0x05, 0x00, 0x05, 0x00, +/* 00018540 */ 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x05, 0x74, 0x00, 0x60, 0x00, 0x00, 0x00, 0x03, 0x03, +/* 00018550 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, +/* 00018560 */ 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, +/* 00018570 */ 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x30, 0x00, +/* 00018580 */ 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, +/* 00018590 */ 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x03, 0x04, +/* 000185A0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, +/* 000185B0 */ 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, +/* 000185C0 */ 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, +/* 000185D0 */ 0x00, 0x00, 0xFE, 0x04, 0x02, 0xFE, 0x2F, 0x02, 0xFE, 0x2E, 0x02, 0xFE, 0x9C, 0x01, 0xFE, 0x97, +/* 000185E0 */ 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, +/* 000185F0 */ 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, +/* 00018600 */ 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, +/* 00018610 */ 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x98, 0x01, 0xFE, 0x94, 0x01, +/* 00018620 */ 0xFE, 0x95, 0x01, 0xFE, 0x29, 0x92, 0x13, 0x1D, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x40, 0x00, 0x05, +/* 00018630 */ 0x00, 0x1B, 0x00, 0x06, 0x00, 0x88, 0x0A, 0x05, 0x00, 0x73, 0x00, 0x53, 0x00, 0x89, 0x05, 0x0E, +/* 00018640 */ 0x00, 0x29, 0x00, 0x05, 0x00, 0x1B, 0x00, 0x05, 0x00, 0x27, 0x00, 0x22, 0x00, 0x43, 0x03, 0x24, +/* 00018650 */ 0x00, 0x82, 0x02, 0x24, 0x00, 0x15, 0x01, 0x4D, 0x00, 0xCA, 0x00, 0x52, 0x00, 0xC1, 0x00, 0x52, +/* 00018660 */ 0x00, 0xC0, 0x00, 0x6E, 0x00, 0xBF, 0x04, 0x24, 0x00, 0x17, 0x02, 0x49, 0x00, 0xA1, 0x00, 0x0A, +/* 00018670 */ 0x00, 0x15, 0x00, 0x00, 0xD2, 0x8E, 0x01, 0x00, 0xBF, 0x8C, 0x01, 0x00, 0xFB, 0x8A, 0x01, 0x00, +/* 00018680 */ 0x9A, 0x89, 0x01, 0x00, 0xFA, 0x88, 0x01, 0x00, 0x94, 0x87, 0x01, 0x00, 0x90, 0x86, 0x01, 0x00, +/* 00018690 */ 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0xF9, 0x03, 0x3D, 0xA0, 0x41, 0xD1, 0x00, +/* 000186A0 */ 0x49, 0xFE, 0x8C, 0xB1, 0xFE, 0x8C, 0xB1, 0x09, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFE, 0x8C, 0xB1, +/* 000186B0 */ 0xFE, 0xD7, 0x01, 0xFE, 0xD7, 0x01, 0x05, 0x05, 0x08, 0x04, 0x23, 0x22, 0x03, 0x03, 0x01, 0x05, +/* 000186C0 */ 0x05, 0x05, 0x05, 0x07, 0x06, 0xFE, 0x94, 0x03, 0x05, 0xFE, 0x09, 0x04, 0x06, 0xFE, 0x2E, 0x03, +/* 000186D0 */ 0x93, 0x58, 0x05, 0x4E, 0x06, 0x2A, 0x08, 0x05, 0x15, 0x03, 0x00, 0x08, 0x02, 0x09, 0x24, 0x00, +/* 000186E0 */ 0x8F, 0x03, 0x03, 0x09, 0x00, 0x00, 0x6D, 0x08, 0x09, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x09, +/* 000186F0 */ 0x5A, 0x01, 0x03, 0x00, 0x00, 0x5A, 0x02, 0x04, 0x00, 0x00, 0xF4, 0x03, 0xFF, 0x08, 0x00, 0x00, +/* 00018700 */ 0x00, 0x00, 0x00, 0x00, 0x8F, 0x03, 0x03, 0x09, 0x00, 0x00, 0x6D, 0x08, 0x09, 0x01, 0x07, 0x02, +/* 00018710 */ 0x00, 0x59, 0x00, 0x09, 0x5A, 0x01, 0x05, 0x01, 0x00, 0xF4, 0x02, 0x08, 0x08, 0x01, 0x00, 0x00, +/* 00018720 */ 0x00, 0x01, 0x00, 0x45, 0x06, 0x08, 0xA8, 0x08, 0x14, 0x08, 0x00, 0x06, 0x08, 0x5F, 0x08, 0x06, +/* 00018730 */ 0x02, 0x0F, 0x24, 0x00, 0x08, 0x8F, 0x03, 0x03, 0x09, 0x00, 0x00, 0x6D, 0x08, 0x09, 0x03, 0x07, +/* 00018740 */ 0x03, 0x00, 0x59, 0x00, 0x09, 0x5A, 0x01, 0x03, 0x02, 0x00, 0x5A, 0x02, 0x04, 0x02, 0x00, 0xF4, +/* 00018750 */ 0x03, 0xFF, 0x08, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x5F, 0x00, 0x06, 0x04, 0x09, 0x02, 0x00, +/* 00018760 */ 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB6, 0x02, 0xFE, 0x05, 0x02, 0xFE, 0x06, 0x04, 0xFE, 0xB6, 0x02, +/* 00018770 */ 0xFE, 0x08, 0x04, 0xFE, 0xA6, 0xB1, 0x07, 0x04, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x30, 0x00, 0x24, +/* 00018780 */ 0x00, 0x65, 0x00, 0x22, 0x00, 0x41, 0x00, 0x0F, 0x00, 0x57, 0x00, 0x24, 0x00, 0x65, 0x00, 0x09, +/* 00018790 */ 0x00, 0x2A, 0x00, 0x00, 0x7F, 0x5C, 0x18, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0xDE, 0x03, 0x51, +/* 000187A0 */ 0xA0, 0x41, 0xC3, 0x00, 0xFE, 0xEE, 0x03, 0x48, 0xFE, 0x22, 0xAD, 0xFE, 0x22, 0xAD, 0x09, 0xFE, +/* 000187B0 */ 0x00, 0x90, 0x01, 0x01, 0xFE, 0x22, 0xAD, 0xFE, 0x4A, 0x03, 0xFE, 0x4A, 0x03, 0x06, 0x0D, 0x11, +/* 000187C0 */ 0x04, 0x33, 0x31, 0x03, 0x04, 0x01, 0x02, 0x04, 0x04, 0x04, 0x04, 0x10, 0x06, 0xFE, 0x94, 0x03, +/* 000187D0 */ 0x05, 0xFE, 0x0A, 0x04, 0x06, 0xFE, 0x2E, 0x03, 0x06, 0xFE, 0xD7, 0x03, 0x06, 0xFE, 0xF2, 0x03, +/* 000187E0 */ 0x06, 0xFE, 0xFE, 0x03, 0x06, 0xFE, 0x03, 0x04, 0x06, 0xFE, 0x05, 0x04, 0x06, 0xFE, 0xF8, 0x03, +/* 000187F0 */ 0x06, 0xFE, 0xF9, 0x03, 0x08, 0xD3, 0x58, 0x0D, 0x4E, 0x0E, 0x4E, 0x0F, 0x2A, 0x11, 0x0D, 0x15, +/* 00018800 */ 0x03, 0x00, 0x11, 0x02, 0x09, 0x24, 0x00, 0x8F, 0x03, 0x03, 0x12, 0x00, 0x00, 0x6D, 0x11, 0x12, +/* 00018810 */ 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x12, 0x5A, 0x01, 0x03, 0x00, 0x00, 0x5A, 0x02, 0x04, 0x00, +/* 00018820 */ 0x00, 0xF4, 0x03, 0xFF, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x03, 0x03, 0x12, 0x00, +/* 00018830 */ 0x00, 0x6D, 0x11, 0x12, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x12, 0x5A, 0x01, 0x0D, 0x01, 0x00, +/* 00018840 */ 0xF4, 0x02, 0x11, 0x11, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, 0x0E, 0x11, 0xA8, 0x11, 0x14, +/* 00018850 */ 0x08, 0x00, 0x0E, 0x11, 0x5F, 0x11, 0x0E, 0x02, 0x0F, 0x24, 0x00, 0x11, 0x8F, 0x03, 0x03, 0x12, +/* 00018860 */ 0x00, 0x00, 0x6D, 0x11, 0x12, 0x03, 0x07, 0x03, 0x00, 0x59, 0x00, 0x12, 0x5A, 0x01, 0x03, 0x02, +/* 00018870 */ 0x00, 0x5A, 0x02, 0x04, 0x02, 0x00, 0xF4, 0x03, 0xFF, 0x11, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, +/* 00018880 */ 0xD0, 0x11, 0x07, 0x00, 0x00, 0xA1, 0x00, 0x05, 0x11, 0xA1, 0x01, 0x06, 0x11, 0xA1, 0x02, 0x07, +/* 00018890 */ 0x11, 0xA1, 0x03, 0x08, 0x11, 0xA1, 0x04, 0x09, 0x11, 0xA1, 0x05, 0x0A, 0x11, 0xA1, 0x06, 0x0B, +/* 000188A0 */ 0x11, 0x45, 0x0F, 0x11, 0x8F, 0x02, 0x17, 0x11, 0x01, 0x00, 0x4A, 0x11, 0x07, 0x03, 0x00, 0x59, +/* 000188B0 */ 0x00, 0x0C, 0x5A, 0x01, 0x0F, 0x03, 0x00, 0x5A, 0x02, 0x0E, 0x03, 0x00, 0xF0, 0x03, 0x00, 0x11, +/* 000188C0 */ 0x03, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB6, 0x02, 0xFE, 0x05, 0x02, 0xFE, +/* 000188D0 */ 0x06, 0x04, 0xFE, 0xB6, 0x02, 0xFE, 0x4F, 0xAD, 0x08, 0x06, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x34, +/* 000188E0 */ 0x00, 0x24, 0x00, 0x74, 0x00, 0x22, 0x00, 0x45, 0x00, 0x0F, 0x00, 0x5B, 0x00, 0x24, 0x00, 0x75, +/* 000188F0 */ 0x00, 0x24, 0x00, 0x1E, 0x01, 0x23, 0x00, 0x41, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, +/* 00018900 */ 0x03, 0x00, 0xFE, 0xC6, 0x03, 0x5A, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x38, 0x03, 0x47, 0xFE, 0x8A, +/* 00018910 */ 0xA9, 0xFE, 0x8A, 0xA9, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x02, 0xFE, 0x8A, 0xA9, 0xB8, 0xB8, 0x05, +/* 00018920 */ 0x03, 0x06, 0x08, 0x17, 0x16, 0x03, 0x02, 0x03, 0x01, 0x01, 0x01, 0x01, 0x05, 0x08, 0x57, 0x15, +/* 00018930 */ 0x05, 0x00, 0x04, 0x02, 0xA8, 0x06, 0x45, 0x04, 0x06, 0x8F, 0x02, 0x16, 0x06, 0x00, 0x00, 0x4A, +/* 00018940 */ 0x06, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x8F, 0x03, 0x03, 0x07, 0x01, 0x00, 0x5F, 0x07, 0x07, +/* 00018950 */ 0x00, 0x5A, 0x01, 0x07, 0x00, 0x00, 0x8F, 0x02, 0x12, 0x07, 0x02, 0x00, 0x4A, 0x07, 0x07, 0x02, +/* 00018960 */ 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x03, 0x01, 0x00, 0xF0, 0x02, 0x07, 0x07, 0x01, 0x00, 0x5A, +/* 00018970 */ 0x02, 0x07, 0x00, 0x00, 0x5A, 0x03, 0x04, 0x00, 0x00, 0xF0, 0x04, 0x00, 0x06, 0x00, 0x00, 0x09, +/* 00018980 */ 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xF0, 0x01, 0xFE, 0xAF, 0xA9, 0x03, 0x00, 0x00, 0x00, +/* 00018990 */ 0x00, 0x0A, 0x00, 0x23, 0x00, 0x4B, 0x00, 0x6F, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, +/* 000189A0 */ 0x03, 0x00, 0xFE, 0xB9, 0x03, 0x4E, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0xF1, 0x03, 0x46, 0xFE, 0xFC, +/* 000189B0 */ 0xA6, 0xFE, 0xFC, 0xA6, 0x09, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, 0xFC, 0xA6, 0xFE, 0x30, 0x02, +/* 000189C0 */ 0xFE, 0x30, 0x02, 0x08, 0x07, 0x0C, 0x09, 0x35, 0x34, 0x03, 0x06, 0x02, 0x05, 0x05, 0x05, 0x05, +/* 000189D0 */ 0x0B, 0x06, 0xFE, 0x94, 0x03, 0x05, 0xFE, 0x09, 0x04, 0x06, 0xFE, 0x2E, 0x03, 0x08, 0x0C, 0xEB, +/* 000189E0 */ 0x58, 0x09, 0x4E, 0x0A, 0x2A, 0x0C, 0x09, 0x15, 0x03, 0x00, 0x0C, 0x02, 0x09, 0x24, 0x00, 0x8F, +/* 000189F0 */ 0x03, 0x03, 0x0D, 0x00, 0x00, 0x6D, 0x0C, 0x0D, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0D, 0x5A, +/* 00018A00 */ 0x01, 0x03, 0x00, 0x00, 0x5A, 0x02, 0x04, 0x00, 0x00, 0xF4, 0x03, 0xFF, 0x0C, 0x00, 0x00, 0x00, +/* 00018A10 */ 0x00, 0x00, 0x00, 0x8F, 0x03, 0x03, 0x0D, 0x00, 0x00, 0x6D, 0x0C, 0x0D, 0x01, 0x07, 0x02, 0x00, +/* 00018A20 */ 0x59, 0x00, 0x0D, 0x5A, 0x01, 0x09, 0x01, 0x00, 0xF4, 0x02, 0x0C, 0x0C, 0x01, 0x00, 0x00, 0x00, +/* 00018A30 */ 0x01, 0x00, 0x45, 0x0A, 0x0C, 0xA8, 0x0C, 0x14, 0x08, 0x00, 0x0A, 0x0C, 0x5F, 0x0C, 0x0A, 0x02, +/* 00018A40 */ 0x0F, 0x24, 0x00, 0x0C, 0x8F, 0x03, 0x03, 0x0D, 0x00, 0x00, 0x6D, 0x0C, 0x0D, 0x03, 0x07, 0x03, +/* 00018A50 */ 0x00, 0x59, 0x00, 0x0D, 0x5A, 0x01, 0x03, 0x02, 0x00, 0x5A, 0x02, 0x04, 0x02, 0x00, 0xF4, 0x03, +/* 00018A60 */ 0xFF, 0x0C, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x8F, 0x03, 0x03, 0x0D, 0x00, 0x00, 0x6D, 0x0C, +/* 00018A70 */ 0x0D, 0x04, 0x07, 0x05, 0x00, 0x59, 0x00, 0x0D, 0x8F, 0x03, 0x0C, 0x0E, 0x01, 0x00, 0x07, 0x02, +/* 00018A80 */ 0x00, 0x59, 0x00, 0x05, 0x5A, 0x01, 0x07, 0x04, 0x00, 0xF0, 0x02, 0x0E, 0x0E, 0x04, 0x00, 0x5A, +/* 00018A90 */ 0x01, 0x0E, 0x03, 0x00, 0x8F, 0x03, 0x0C, 0x0E, 0x01, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x05, +/* 00018AA0 */ 0x5A, 0x01, 0x08, 0x05, 0x00, 0xF0, 0x02, 0x0E, 0x0E, 0x05, 0x00, 0x5A, 0x02, 0x0E, 0x03, 0x00, +/* 00018AB0 */ 0x5A, 0x03, 0x0A, 0x03, 0x00, 0x5A, 0x04, 0x06, 0x03, 0x00, 0xF4, 0x05, 0x00, 0x0C, 0x04, 0x00, +/* 00018AC0 */ 0x00, 0x00, 0x03, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB6, 0x02, 0xFE, 0x05, +/* 00018AD0 */ 0x02, 0xFE, 0x06, 0x04, 0xFE, 0xB6, 0x02, 0xFE, 0x01, 0x02, 0xFE, 0x21, 0xA7, 0x07, 0x04, 0x00, +/* 00018AE0 */ 0x00, 0x00, 0x0B, 0x00, 0x30, 0x00, 0x24, 0x00, 0x65, 0x00, 0x22, 0x00, 0x41, 0x00, 0x0F, 0x00, +/* 00018AF0 */ 0x57, 0x00, 0x24, 0x00, 0x65, 0x00, 0x61, 0x00, 0x78, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x03, +/* 00018B00 */ 0x10, 0x03, 0x00, 0xFE, 0xA6, 0x03, 0x3C, 0xA2, 0x41, 0xD1, 0x00, 0x45, 0xFE, 0xA7, 0xA3, 0xFE, +/* 00018B10 */ 0xA7, 0xA3, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x01, 0xFE, 0xA7, 0xA3, 0xFE, 0x03, 0x03, 0xFE, 0x03, +/* 00018B20 */ 0x03, 0x0B, 0x03, 0x0A, 0x05, 0x53, 0x4A, 0x03, 0x06, 0x07, 0x06, 0x06, 0x06, 0x06, 0x09, 0x08, +/* 00018B30 */ 0xFE, 0x45, 0x01, 0x01, 0x5D, 0x01, 0x05, 0x4E, 0x06, 0x4E, 0x07, 0x4E, 0x08, 0x15, 0x05, 0x00, +/* 00018B40 */ 0x03, 0x02, 0xA8, 0x0A, 0x45, 0x03, 0x0A, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA8, 0x0A, 0x45, 0x04, +/* 00018B50 */ 0x0A, 0x4E, 0x06, 0x4E, 0x07, 0x4E, 0x08, 0xA8, 0x0A, 0x14, 0x03, 0x00, 0x05, 0x0A, 0x09, 0x0E, +/* 00018B60 */ 0x00, 0x8F, 0x01, 0x05, 0x0B, 0x00, 0x00, 0x4A, 0x0B, 0x45, 0x0A, 0x0B, 0x09, 0x03, 0x00, 0x46, +/* 00018B70 */ 0x0A, 0x05, 0x45, 0x06, 0x0A, 0x8F, 0x02, 0x07, 0x0A, 0x01, 0x00, 0x4A, 0x0A, 0x07, 0x03, 0x00, +/* 00018B80 */ 0x59, 0x00, 0x02, 0x5A, 0x01, 0x06, 0x00, 0x00, 0x8F, 0x01, 0x04, 0x0B, 0x02, 0x00, 0x4A, 0x0B, +/* 00018B90 */ 0x5A, 0x02, 0x0B, 0x00, 0x00, 0xF0, 0x03, 0x0A, 0x0A, 0x00, 0x00, 0x45, 0x07, 0x0A, 0x8F, 0x03, +/* 00018BA0 */ 0x03, 0x0B, 0x03, 0x00, 0x6D, 0x0A, 0x0B, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0B, 0x5A, 0x01, +/* 00018BB0 */ 0x07, 0x01, 0x00, 0xF4, 0x02, 0x0A, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, 0x08, 0x0A, +/* 00018BC0 */ 0xA8, 0x0A, 0x14, 0x03, 0x00, 0x08, 0x0A, 0x09, 0x43, 0x00, 0x8F, 0x03, 0x36, 0x0B, 0x04, 0x00, +/* 00018BD0 */ 0x4A, 0x0B, 0x6D, 0x0A, 0x0B, 0x01, 0x07, 0x01, 0x00, 0x59, 0x00, 0x0B, 0xF4, 0x01, 0x0A, 0x0A, +/* 00018BE0 */ 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x45, 0x08, 0x0A, 0x8F, 0x03, 0x03, 0x0B, 0x03, 0x00, 0x6D, +/* 00018BF0 */ 0x0A, 0x0B, 0x02, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0B, 0x5A, 0x01, 0x07, 0x03, 0x00, 0x5A, 0x02, +/* 00018C00 */ 0x08, 0x03, 0x00, 0xF4, 0x03, 0xFF, 0x0A, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x8F, 0x01, 0x02, +/* 00018C10 */ 0x0A, 0x05, 0x00, 0x4A, 0x0A, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x08, 0x04, 0x00, +/* 00018C20 */ 0x5A, 0x02, 0x03, 0x04, 0x00, 0x5A, 0x03, 0x04, 0x04, 0x00, 0xF0, 0x04, 0xFF, 0x0A, 0x04, 0x00, +/* 00018C30 */ 0x45, 0x0A, 0x08, 0x8F, 0x03, 0x36, 0x0C, 0x04, 0x00, 0x4A, 0x0C, 0x6D, 0x0B, 0x0C, 0x03, 0x07, +/* 00018C40 */ 0x03, 0x00, 0x59, 0x00, 0x0C, 0x8F, 0x01, 0x06, 0x0D, 0x06, 0x00, 0x4A, 0x0D, 0x5A, 0x01, 0x0D, +/* 00018C50 */ 0x05, 0x00, 0x5A, 0x02, 0x07, 0x05, 0x00, 0xF4, 0x03, 0x0B, 0x0B, 0x03, 0x00, 0x00, 0x00, 0x05, +/* 00018C60 */ 0x00, 0x77, 0x0B, 0x0A, 0x04, 0x5F, 0x0A, 0x08, 0x05, 0x82, 0x0A, 0x0A, 0x06, 0x01, 0x45, 0x00, +/* 00018C70 */ 0x07, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x05, 0x02, 0x69, 0xFE, 0x06, 0x02, 0x54, +/* 00018C80 */ 0xFE, 0x08, 0x04, 0xFE, 0x08, 0x04, 0xFE, 0xB1, 0xA3, 0x0D, 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x00, +/* 00018C90 */ 0x15, 0x00, 0x10, 0x00, 0x23, 0x00, 0x1E, 0x00, 0x50, 0x00, 0x29, 0x00, 0x8E, 0x00, 0x22, 0x00, +/* 00018CA0 */ 0x43, 0x00, 0x0A, 0x00, 0x32, 0x00, 0x1F, 0x00, 0x2B, 0x00, 0x24, 0x00, 0x4D, 0x00, 0x23, 0x00, +/* 00018CB0 */ 0x66, 0x00, 0x35, 0x00, 0x43, 0x00, 0x09, 0x00, 0x33, 0x00, 0x08, 0x00, 0x19, 0x00, 0x00, 0x7F, +/* 00018CC0 */ 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x85, 0x03, 0x5E, 0xA2, 0x41, 0xC3, 0x00, 0xFE, +/* 00018CD0 */ 0x07, 0x04, 0x44, 0xFE, 0xD5, 0x9D, 0xFE, 0xD5, 0x9D, 0x09, 0xFE, 0x00, 0x90, 0x04, 0x02, 0xFE, +/* 00018CE0 */ 0xD5, 0x9D, 0xFE, 0x94, 0x04, 0xFE, 0x94, 0x04, 0x0A, 0x06, 0x0E, 0x06, 0x63, 0x5C, 0x03, 0x08, +/* 00018CF0 */ 0x05, 0x04, 0x04, 0x04, 0x04, 0x0D, 0x08, 0x07, 0x05, 0xFE, 0xE9, 0x03, 0x0B, 0xFE, 0x85, 0x01, +/* 00018D00 */ 0x58, 0x09, 0x4E, 0x0A, 0x4E, 0x0B, 0x4E, 0x0C, 0x15, 0x05, 0x00, 0x07, 0x02, 0xA8, 0x0E, 0x45, +/* 00018D10 */ 0x07, 0x0E, 0x15, 0x05, 0x00, 0x08, 0x02, 0xA8, 0x0E, 0x45, 0x08, 0x0E, 0x4E, 0x0A, 0x4E, 0x0B, +/* 00018D20 */ 0x4E, 0x0C, 0xA8, 0x0E, 0x14, 0x08, 0x00, 0x09, 0x0E, 0x14, 0x03, 0x00, 0x09, 0x03, 0x09, 0x1F, +/* 00018D30 */ 0x00, 0x8F, 0x03, 0x03, 0x0F, 0x00, 0x00, 0x6D, 0x0E, 0x0F, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 00018D40 */ 0x0F, 0x5A, 0x01, 0x04, 0x00, 0x00, 0xF4, 0x02, 0xFF, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00018D50 */ 0x8F, 0x03, 0x0C, 0x0E, 0x01, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x09, 0x01, +/* 00018D60 */ 0x00, 0xF0, 0x02, 0x0E, 0x0E, 0x01, 0x00, 0x45, 0x0A, 0x0E, 0x8F, 0x03, 0x0C, 0x0E, 0x01, 0x00, +/* 00018D70 */ 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x06, 0x02, 0x00, 0xF0, 0x02, 0x0E, 0x0E, 0x02, +/* 00018D80 */ 0x00, 0x45, 0x0B, 0x0E, 0xA8, 0x0E, 0x45, 0x0C, 0x0E, 0xA8, 0x0E, 0x14, 0x03, 0x00, 0x07, 0x0E, +/* 00018D90 */ 0x09, 0x7B, 0x00, 0xA8, 0x0E, 0x14, 0x03, 0x00, 0x08, 0x0E, 0x09, 0x71, 0x00, 0x8F, 0x01, 0x03, +/* 00018DA0 */ 0x0E, 0x02, 0x00, 0x4A, 0x0E, 0xA8, 0x0F, 0x14, 0x03, 0x00, 0x0E, 0x0F, 0x09, 0x51, 0x00, 0x8F, +/* 00018DB0 */ 0x03, 0x36, 0x0F, 0x03, 0x00, 0x4A, 0x0F, 0x6D, 0x0E, 0x0F, 0x01, 0x07, 0x01, 0x00, 0x59, 0x00, +/* 00018DC0 */ 0x0F, 0xF4, 0x01, 0x0E, 0x0E, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x01, 0x43, 0x01, 0x01, 0x03, +/* 00018DD0 */ 0x0E, 0x8F, 0x01, 0x02, 0x0E, 0x04, 0x00, 0x4A, 0x0E, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x8F, +/* 00018DE0 */ 0x01, 0x03, 0x0F, 0x02, 0x00, 0x4A, 0x0F, 0x5A, 0x01, 0x0F, 0x04, 0x00, 0xA8, 0x0F, 0x5A, 0x02, +/* 00018DF0 */ 0x0F, 0x04, 0x00, 0xA8, 0x0F, 0x5A, 0x03, 0x0F, 0x04, 0x00, 0xF0, 0x04, 0xFF, 0x0E, 0x04, 0x00, +/* 00018E00 */ 0x8F, 0x01, 0x03, 0x0E, 0x02, 0x00, 0x4A, 0x0E, 0x45, 0x0C, 0x0E, 0x09, 0x42, 0x00, 0x8F, 0x03, +/* 00018E10 */ 0x36, 0x0F, 0x03, 0x00, 0x4A, 0x0F, 0x6D, 0x0E, 0x0F, 0x02, 0x07, 0x01, 0x00, 0x59, 0x00, 0x0F, +/* 00018E20 */ 0xF4, 0x01, 0x0E, 0x0E, 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x45, 0x0C, 0x0E, 0x8F, 0x01, 0x02, +/* 00018E30 */ 0x0E, 0x04, 0x00, 0x4A, 0x0E, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x0C, 0x06, 0x00, +/* 00018E40 */ 0x5A, 0x02, 0x07, 0x06, 0x00, 0x5A, 0x03, 0x08, 0x06, 0x00, 0xF0, 0x04, 0xFF, 0x0E, 0x06, 0x00, +/* 00018E50 */ 0x8F, 0x03, 0x03, 0x0F, 0x00, 0x00, 0x6D, 0x0E, 0x0F, 0x03, 0x07, 0x05, 0x00, 0x59, 0x00, 0x0F, +/* 00018E60 */ 0x5A, 0x01, 0x0A, 0x07, 0x00, 0x5A, 0x02, 0x0B, 0x07, 0x00, 0x5A, 0x03, 0x0C, 0x07, 0x00, 0x5A, +/* 00018E70 */ 0x04, 0x05, 0x07, 0x00, 0xF4, 0x05, 0x00, 0x0E, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x09, 0x02, +/* 00018E80 */ 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB0, 0x02, 0x69, 0x69, 0xFE, 0x01, 0x02, 0xFE, 0xF2, 0x9D, +/* 00018E90 */ 0x10, 0x08, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x10, 0x00, 0x23, 0x00, 0x0F, 0x00, 0x3B, +/* 00018EA0 */ 0x00, 0x1F, 0x00, 0x61, 0x00, 0x1A, 0x00, 0x2A, 0x00, 0x1A, 0x00, 0xFE, 0x00, 0x05, 0x00, 0x1D, +/* 00018EB0 */ 0x00, 0x14, 0x00, 0x46, 0x00, 0x12, 0x00, 0x41, 0x00, 0x22, 0x00, 0x3A, 0x00, 0x2F, 0x00, 0x66, +/* 00018EC0 */ 0x00, 0x0E, 0x00, 0x4C, 0x00, 0x1F, 0x00, 0x2A, 0x00, 0x23, 0x00, 0x4E, 0x00, 0x33, 0x00, 0x72, +/* 00018ED0 */ 0x00, 0x00, 0x7F, 0x5C, 0x1A, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x5B, 0x03, 0x23, 0xA2, 0x41, +/* 00018EE0 */ 0xC1, 0x00, 0xFE, 0xE5, 0x03, 0x43, 0xFE, 0x9F, 0x92, 0xFE, 0x9F, 0x92, 0x01, 0xFE, 0x00, 0x90, +/* 00018EF0 */ 0x04, 0x04, 0xFE, 0x9F, 0x92, 0xFE, 0x62, 0x0A, 0xFE, 0x62, 0x0A, 0x0C, 0x1E, 0x27, 0x07, 0xC9, +/* 00018F00 */ 0xB9, 0x03, 0x02, 0x0C, 0x06, 0x06, 0x1D, 0x1D, 0x1D, 0x1D, 0x26, 0x08, 0x06, 0xFE, 0xF2, 0x03, +/* 00018F10 */ 0x06, 0xFE, 0xA3, 0x03, 0x06, 0xFE, 0xF3, 0x03, 0x06, 0xFE, 0xF4, 0x03, 0x06, 0xFE, 0xF5, 0x03, +/* 00018F20 */ 0x06, 0xFE, 0xF6, 0x03, 0x06, 0xFE, 0xF7, 0x03, 0x06, 0xFE, 0xE0, 0x03, 0x05, 0xFE, 0x9C, 0x03, +/* 00018F30 */ 0x05, 0xFE, 0xDF, 0x03, 0x06, 0xFE, 0xF8, 0x03, 0x06, 0xFE, 0xA2, 0x03, 0x06, 0xFE, 0xF9, 0x03, +/* 00018F40 */ 0x06, 0xFE, 0xFA, 0x03, 0x06, 0xFE, 0xFB, 0x03, 0x06, 0xFE, 0xFC, 0x03, 0x07, 0x06, 0xFE, 0xFD, +/* 00018F50 */ 0x03, 0x06, 0xFE, 0xA1, 0x03, 0x06, 0xFE, 0xFE, 0x03, 0x06, 0xFE, 0xFF, 0x03, 0x06, 0xFE, 0x00, +/* 00018F60 */ 0x04, 0x06, 0xFE, 0x01, 0x04, 0x06, 0xFE, 0x02, 0x04, 0x06, 0xFE, 0x03, 0x04, 0x0C, 0x0B, 0xFE, +/* 00018F70 */ 0x35, 0x03, 0x4E, 0x21, 0x4E, 0x22, 0x4E, 0x23, 0x4E, 0x24, 0x4E, 0x25, 0x8F, 0x02, 0x12, 0x27, +/* 00018F80 */ 0x00, 0x00, 0x4A, 0x27, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x1F, 0x00, 0x00, 0xF0, +/* 00018F90 */ 0x02, 0x27, 0x27, 0x00, 0x00, 0x45, 0x21, 0x27, 0xA8, 0x27, 0x14, 0x03, 0x00, 0x20, 0x27, 0x09, +/* 00018FA0 */ 0x22, 0x00, 0x8F, 0x03, 0x36, 0x29, 0x01, 0x00, 0x4A, 0x29, 0x6D, 0x28, 0x29, 0x00, 0x07, 0x01, +/* 00018FB0 */ 0x00, 0x59, 0x00, 0x29, 0xF4, 0x01, 0x28, 0x28, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, 0x27, +/* 00018FC0 */ 0x28, 0x09, 0x22, 0x00, 0x8F, 0x03, 0x24, 0x29, 0x02, 0x00, 0x6D, 0x28, 0x29, 0x01, 0x07, 0x02, +/* 00018FD0 */ 0x00, 0x59, 0x00, 0x29, 0x5A, 0x01, 0x20, 0x02, 0x00, 0xF4, 0x02, 0x28, 0x28, 0x01, 0x00, 0x00, +/* 00018FE0 */ 0x00, 0x02, 0x00, 0x46, 0x27, 0x28, 0x45, 0x20, 0x27, 0x45, 0x27, 0x1E, 0x8F, 0x02, 0x02, 0x28, +/* 00018FF0 */ 0x03, 0x00, 0x4A, 0x28, 0x07, 0x06, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x20, 0x03, 0x00, 0x5A, +/* 00019000 */ 0x02, 0x03, 0x03, 0x00, 0x5A, 0x03, 0x04, 0x03, 0x00, 0xD0, 0x29, 0x02, 0x00, 0x00, 0xA1, 0x00, +/* 00019010 */ 0x05, 0x29, 0xA1, 0x01, 0x06, 0x29, 0x5A, 0x04, 0x29, 0x03, 0x00, 0x5A, 0x05, 0x05, 0x03, 0x00, +/* 00019020 */ 0xF0, 0x06, 0x28, 0x28, 0x03, 0x00, 0x77, 0x28, 0x27, 0x02, 0x5F, 0x27, 0x1E, 0x03, 0x14, 0x03, +/* 00019030 */ 0x00, 0x27, 0x05, 0x09, 0x17, 0x00, 0xD0, 0x28, 0x03, 0x01, 0x00, 0xA1, 0x00, 0x07, 0x28, 0xA1, +/* 00019040 */ 0x01, 0x08, 0x28, 0xA1, 0x02, 0x09, 0x28, 0x45, 0x27, 0x28, 0x09, 0x10, 0x00, 0xD0, 0x28, 0x02, +/* 00019050 */ 0x02, 0x00, 0xA1, 0x00, 0x08, 0x28, 0xA1, 0x01, 0x09, 0x28, 0x46, 0x27, 0x28, 0x45, 0x22, 0x27, +/* 00019060 */ 0x8F, 0x03, 0x36, 0x28, 0x01, 0x00, 0x4A, 0x28, 0x6D, 0x27, 0x28, 0x04, 0x07, 0x01, 0x00, 0x59, +/* 00019070 */ 0x00, 0x28, 0xF4, 0x01, 0x27, 0x27, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x45, 0x23, 0x27, 0x45, +/* 00019080 */ 0x27, 0x23, 0x8F, 0x02, 0x02, 0x28, 0x03, 0x00, 0x4A, 0x28, 0x07, 0x06, 0x00, 0x59, 0x00, 0x02, +/* 00019090 */ 0x5A, 0x01, 0x20, 0x05, 0x00, 0x5A, 0x02, 0x0A, 0x05, 0x00, 0x5A, 0x03, 0x04, 0x05, 0x00, 0xD0, +/* 000190A0 */ 0x29, 0x02, 0x03, 0x00, 0xA1, 0x00, 0x0B, 0x29, 0xA1, 0x01, 0x0C, 0x29, 0x5A, 0x04, 0x29, 0x05, +/* 000190B0 */ 0x00, 0x5A, 0x05, 0x0C, 0x05, 0x00, 0xF0, 0x06, 0x28, 0x28, 0x05, 0x00, 0x77, 0x28, 0x27, 0x05, +/* 000190C0 */ 0x8F, 0x02, 0x02, 0x27, 0x03, 0x00, 0x4A, 0x27, 0x07, 0x06, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, +/* 000190D0 */ 0x20, 0x06, 0x00, 0x5A, 0x02, 0x0D, 0x06, 0x00, 0x5A, 0x03, 0x0E, 0x06, 0x00, 0xA8, 0x28, 0x5A, +/* 000190E0 */ 0x04, 0x28, 0x06, 0x00, 0xA8, 0x28, 0x5A, 0x05, 0x28, 0x06, 0x00, 0xF0, 0x06, 0x27, 0x27, 0x06, +/* 000190F0 */ 0x00, 0x45, 0x24, 0x27, 0xA8, 0x27, 0x14, 0x03, 0x00, 0x24, 0x27, 0x09, 0x06, 0x00, 0x45, 0x27, +/* 00019100 */ 0x24, 0x09, 0x22, 0x00, 0x8F, 0x03, 0x24, 0x29, 0x02, 0x00, 0x6D, 0x28, 0x29, 0x06, 0x07, 0x02, +/* 00019110 */ 0x00, 0x59, 0x00, 0x29, 0x5A, 0x01, 0x24, 0x07, 0x00, 0xF4, 0x02, 0x28, 0x28, 0x06, 0x00, 0x00, +/* 00019120 */ 0x00, 0x07, 0x00, 0x46, 0x27, 0x28, 0x77, 0x27, 0x23, 0x07, 0x45, 0x27, 0x23, 0x8F, 0x02, 0x02, +/* 00019130 */ 0x28, 0x03, 0x00, 0x4A, 0x28, 0x07, 0x06, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x20, 0x08, 0x00, +/* 00019140 */ 0x5A, 0x02, 0x0F, 0x08, 0x00, 0x5A, 0x03, 0x04, 0x08, 0x00, 0xD0, 0x29, 0x03, 0x04, 0x00, 0xA1, +/* 00019150 */ 0x00, 0x10, 0x29, 0xA1, 0x01, 0x11, 0x29, 0xA1, 0x02, 0x12, 0x29, 0x5A, 0x04, 0x29, 0x08, 0x00, +/* 00019160 */ 0xA8, 0x29, 0x5A, 0x05, 0x29, 0x08, 0x00, 0xF0, 0x06, 0x28, 0x28, 0x08, 0x00, 0x77, 0x28, 0x27, +/* 00019170 */ 0x08, 0x8F, 0x02, 0x0C, 0x27, 0x04, 0x00, 0x4A, 0x27, 0x07, 0x05, 0x00, 0x59, 0x00, 0x02, 0x8F, +/* 00019180 */ 0x03, 0x03, 0x28, 0x05, 0x00, 0x5F, 0x28, 0x28, 0x09, 0x5A, 0x01, 0x28, 0x09, 0x00, 0x5A, 0x02, +/* 00019190 */ 0x21, 0x09, 0x00, 0x5A, 0x03, 0x23, 0x09, 0x00, 0x5A, 0x04, 0x22, 0x09, 0x00, 0xF0, 0x05, 0x27, +/* 000191A0 */ 0x27, 0x09, 0x00, 0x45, 0x25, 0x27, 0x5F, 0x27, 0x25, 0x0A, 0x77, 0x27, 0x1E, 0x0B, 0x5F, 0x27, +/* 000191B0 */ 0x25, 0x0C, 0x14, 0x0E, 0x00, 0x27, 0x13, 0x5F, 0x27, 0x25, 0x0D, 0xA8, 0x28, 0x14, 0x03, 0x00, +/* 000191C0 */ 0x27, 0x28, 0x09, 0x06, 0x00, 0x45, 0x27, 0x14, 0x09, 0x07, 0x00, 0x5F, 0x28, 0x25, 0x0E, 0x46, +/* 000191D0 */ 0x27, 0x28, 0x77, 0x27, 0x1E, 0x0F, 0x5F, 0x27, 0x25, 0x10, 0x41, 0x27, 0x27, 0x15, 0x77, 0x27, +/* 000191E0 */ 0x1E, 0x11, 0x5F, 0x27, 0x25, 0x12, 0x77, 0x27, 0x1E, 0x13, 0x8F, 0x03, 0x03, 0x27, 0x05, 0x00, +/* 000191F0 */ 0x5F, 0x27, 0x27, 0x14, 0x5F, 0x28, 0x1E, 0x15, 0x98, 0x27, 0x27, 0x28, 0x00, 0x00, 0x77, 0x27, +/* 00019200 */ 0x1E, 0x16, 0x45, 0x27, 0x1E, 0x8F, 0x02, 0x02, 0x28, 0x03, 0x00, 0x4A, 0x28, 0x07, 0x06, 0x00, +/* 00019210 */ 0x59, 0x00, 0x02, 0x5A, 0x01, 0x20, 0x0A, 0x00, 0x5A, 0x02, 0x16, 0x0A, 0x00, 0x5A, 0x03, 0x04, +/* 00019220 */ 0x0A, 0x00, 0xD0, 0x29, 0x04, 0x05, 0x00, 0xA1, 0x00, 0x17, 0x29, 0xA1, 0x01, 0x18, 0x29, 0xA1, +/* 00019230 */ 0x02, 0x19, 0x29, 0xA1, 0x03, 0x1A, 0x29, 0x5A, 0x04, 0x29, 0x0A, 0x00, 0x5A, 0x05, 0x1A, 0x0A, +/* 00019240 */ 0x00, 0xF0, 0x06, 0x28, 0x28, 0x0A, 0x00, 0x77, 0x28, 0x27, 0x17, 0x8F, 0x03, 0x03, 0x27, 0x05, +/* 00019250 */ 0x00, 0x5F, 0x27, 0x27, 0x18, 0x5F, 0x28, 0x1E, 0x19, 0x98, 0x27, 0x27, 0x28, 0x01, 0x00, 0x77, +/* 00019260 */ 0x27, 0x1E, 0x1A, 0x45, 0x27, 0x1E, 0x8F, 0x02, 0x02, 0x28, 0x03, 0x00, 0x4A, 0x28, 0x07, 0x06, +/* 00019270 */ 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x20, 0x0B, 0x00, 0x5A, 0x02, 0x1B, 0x0B, 0x00, 0x5A, 0x03, +/* 00019280 */ 0x0E, 0x0B, 0x00, 0xA8, 0x29, 0x5A, 0x04, 0x29, 0x0B, 0x00, 0x5A, 0x05, 0x1C, 0x0B, 0x00, 0xF0, +/* 00019290 */ 0x06, 0x28, 0x28, 0x0B, 0x00, 0x77, 0x28, 0x27, 0x1B, 0x77, 0x1D, 0x1E, 0x1C, 0x45, 0x00, 0x1E, +/* 000192A0 */ 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x69, 0xFE, 0x21, 0x03, 0xFE, 0x55, 0x02, 0xFE, 0x55, +/* 000192B0 */ 0x02, 0x69, 0xFE, 0x04, 0x04, 0xFE, 0x22, 0x03, 0xFE, 0x17, 0x02, 0xFE, 0x18, 0x02, 0xFE, 0xF0, +/* 000192C0 */ 0x01, 0xFE, 0x0D, 0x02, 0xFE, 0x0D, 0x02, 0xFE, 0x16, 0x02, 0xFE, 0x16, 0x02, 0xFE, 0x16, 0x02, +/* 000192D0 */ 0xFE, 0x05, 0x04, 0xFE, 0x17, 0x02, 0xFE, 0x51, 0x02, 0xFE, 0x18, 0x02, 0xFE, 0xF9, 0x03, 0xFE, +/* 000192E0 */ 0x28, 0x02, 0xFE, 0xF9, 0x03, 0xFE, 0x54, 0x02, 0xFE, 0x52, 0x02, 0xFE, 0x27, 0x02, 0xFE, 0x52, +/* 000192F0 */ 0x02, 0xFE, 0x53, 0x02, 0xFE, 0x50, 0x02, 0xFE, 0x06, 0x04, 0xFE, 0xD3, 0x92, 0x15, 0x0A, 0x00, +/* 00019300 */ 0x00, 0x00, 0x1C, 0x00, 0x46, 0x00, 0x51, 0x00, 0x91, 0x03, 0x41, 0x00, 0x60, 0x00, 0x36, 0x00, +/* 00019310 */ 0x6A, 0x00, 0x1F, 0x00, 0x24, 0x00, 0x41, 0x00, 0x6D, 0x00, 0x34, 0x00, 0x55, 0x00, 0x36, 0x00, +/* 00019320 */ 0x44, 0x00, 0x47, 0x00, 0x69, 0x00, 0x35, 0x00, 0x77, 0x00, 0x08, 0x00, 0xE3, 0x00, 0x28, 0x00, +/* 00019330 */ 0x59, 0x00, 0x0C, 0x00, 0x30, 0x00, 0x08, 0x00, 0x27, 0x00, 0x18, 0x00, 0x56, 0x00, 0x49, 0x00, +/* 00019340 */ 0x82, 0x00, 0x18, 0x00, 0x5C, 0x00, 0x36, 0x00, 0x70, 0x00, 0x04, 0x00, 0x32, 0x00, 0x08, 0x00, +/* 00019350 */ 0x19, 0x00, 0x00, 0x7E, 0x5D, 0x08, 0xC1, 0x03, 0x1A, 0x0B, 0x00, 0xFE, 0x45, 0x03, 0x22, 0xA2, +/* 00019360 */ 0x41, 0xC1, 0x00, 0xFE, 0x65, 0x03, 0x40, 0xFE, 0x93, 0x8F, 0xFE, 0x93, 0x8F, 0x01, 0xFE, 0x00, +/* 00019370 */ 0x90, 0x04, 0x03, 0xFE, 0x93, 0x8F, 0xFE, 0x32, 0x02, 0xFE, 0x32, 0x02, 0x03, 0xFE, 0xE2, 0x03, +/* 00019380 */ 0xFE, 0xE3, 0x03, 0xFE, 0xE4, 0x03, 0x09, 0x04, 0x0A, 0x04, 0x27, 0x27, 0x02, 0x03, 0x03, 0x05, +/* 00019390 */ 0x05, 0x05, 0x05, 0x07, 0x08, 0x09, 0x07, 0x08, 0xA0, 0x96, 0x02, 0x05, 0x96, 0x03, 0x06, 0x96, +/* 000193A0 */ 0x02, 0x05, 0x15, 0x05, 0x00, 0x06, 0x03, 0x01, 0x45, 0x01, 0x03, 0x02, 0x4E, 0x0A, 0x96, 0x04, +/* 000193B0 */ 0x0A, 0x8F, 0x02, 0x36, 0x0B, 0x00, 0x00, 0x4A, 0x0B, 0x6D, 0x0A, 0x0B, 0x00, 0x07, 0x01, 0x00, +/* 000193C0 */ 0x59, 0x00, 0x0B, 0xF4, 0x01, 0x0A, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x04, 0x0A, +/* 000193D0 */ 0x8F, 0x02, 0x36, 0x0B, 0x00, 0x00, 0x4A, 0x0B, 0x6D, 0x0A, 0x0B, 0x01, 0x07, 0x03, 0x00, 0x59, +/* 000193E0 */ 0x00, 0x0B, 0x5A, 0x01, 0x04, 0x01, 0x00, 0xD6, 0x00, 0x0C, 0x5A, 0x02, 0x0C, 0x01, 0x00, 0xF4, +/* 000193F0 */ 0x03, 0xFF, 0x0A, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x8F, 0x02, 0x36, 0x0B, 0x00, 0x00, 0x4A, +/* 00019400 */ 0x0B, 0x6D, 0x0A, 0x0B, 0x02, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0B, 0x93, 0x04, 0x0C, 0x01, 0x00, +/* 00019410 */ 0x5A, 0x01, 0x0C, 0x02, 0x00, 0x8F, 0x02, 0x03, 0x0C, 0x02, 0x00, 0x5F, 0x0C, 0x0C, 0x03, 0x5F, +/* 00019420 */ 0x0C, 0x0C, 0x04, 0x5A, 0x02, 0x0C, 0x02, 0x00, 0xF4, 0x03, 0x00, 0x0A, 0x02, 0x00, 0x00, 0x00, +/* 00019430 */ 0x02, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x69, 0x93, 0xFE, 0x9A, 0x01, 0xFE, 0x11, +/* 00019440 */ 0x01, 0xFE, 0x24, 0x01, 0xFE, 0xB2, 0x8F, 0x05, 0x09, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x17, 0x00, +/* 00019450 */ 0x1F, 0x00, 0x25, 0x00, 0x29, 0x00, 0x94, 0x01, 0x3E, 0x00, 0x42, 0x00, 0x00, 0x61, 0x94, 0x01, +/* 00019460 */ 0x00, 0x7F, 0x5C, 0x0E, 0x01, 0x00, 0x10, 0x03, 0x00, 0xFE, 0x47, 0x03, 0x19, 0xA2, 0x41, 0xD1, +/* 00019470 */ 0x00, 0x41, 0xFE, 0xFF, 0x8F, 0xFE, 0xFF, 0x8F, 0x41, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0xFF, +/* 00019480 */ 0x8F, 0xFE, 0x77, 0x01, 0xFE, 0x77, 0x01, 0x04, 0x06, 0x08, 0x04, 0x1F, 0x1F, 0x03, 0x01, 0x01, +/* 00019490 */ 0x01, 0x03, 0x07, 0x07, 0x08, 0x0B, 0x06, 0xFE, 0xD6, 0x03, 0x77, 0x8F, 0x01, 0x03, 0x08, 0x00, +/* 000194A0 */ 0x00, 0x4A, 0x08, 0x15, 0x03, 0x00, 0x08, 0x02, 0x09, 0x33, 0x00, 0x8F, 0x01, 0x03, 0x08, 0x00, +/* 000194B0 */ 0x00, 0x4A, 0x08, 0x07, 0x03, 0x00, 0x59, 0x00, 0x03, 0x5A, 0x01, 0x06, 0x00, 0x00, 0x8F, 0x01, +/* 000194C0 */ 0x04, 0x09, 0x01, 0x00, 0x4A, 0x09, 0x5A, 0x02, 0x09, 0x00, 0x00, 0xF0, 0x03, 0x08, 0x08, 0x00, +/* 000194D0 */ 0x00, 0x14, 0x03, 0x00, 0x08, 0x04, 0x09, 0x05, 0x00, 0xA8, 0x00, 0x09, 0x32, 0x00, 0x8F, 0x01, +/* 000194E0 */ 0x02, 0x08, 0x02, 0x00, 0x4A, 0x08, 0x2B, 0x08, 0x08, 0x06, 0x15, 0x03, 0x00, 0x08, 0x05, 0x09, +/* 000194F0 */ 0x1C, 0x00, 0x8F, 0x01, 0x04, 0x08, 0x01, 0x00, 0x4A, 0x08, 0x8F, 0x01, 0x02, 0x09, 0x02, 0x00, +/* 00019500 */ 0x4A, 0x09, 0x98, 0x09, 0x09, 0x06, 0x00, 0x00, 0x9D, 0x09, 0x08, 0x06, 0x00, 0x00, 0xA8, 0x00, +/* 00019510 */ 0x24, 0x00, 0xFE, 0x1D, 0x90, 0x05, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0xB9, 0x00, 0x05, 0x00, +/* 00019520 */ 0x23, 0x00, 0x14, 0x00, 0x41, 0x00, 0x1E, 0x00, 0x3B, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0x01, 0x00, +/* 00019530 */ 0x10, 0x03, 0x00, 0xFE, 0x32, 0x03, 0x53, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x29, 0x03, 0x3F, 0xFE, +/* 00019540 */ 0xE0, 0x8B, 0xFE, 0xE0, 0x8B, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0xE0, 0x8B, 0x65, 0x65, +/* 00019550 */ 0x03, 0x03, 0x05, 0x03, 0x0A, 0x0A, 0x02, 0x01, 0x01, 0x04, 0x08, 0x20, 0x8F, 0x01, 0x12, 0x05, +/* 00019560 */ 0x00, 0x00, 0x4A, 0x05, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x03, 0x00, 0x00, 0xF0, +/* 00019570 */ 0x02, 0x00, 0x05, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x14, 0x8C, 0x02, +/* 00019580 */ 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x30, 0x00, 0x00, 0x7F, 0x7C, 0x19, 0xC3, 0x53, 0x50, 0x53, +/* 00019590 */ 0x00, 0xFE, 0x1A, 0x03, 0x1D, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x64, 0x03, 0x3E, 0xFE, 0x83, 0x87, +/* 000195A0 */ 0xFE, 0x83, 0x87, 0x01, 0xFE, 0x00, 0x90, 0x04, 0x04, 0xFE, 0x83, 0x87, 0xFE, 0xE8, 0x03, 0xFE, +/* 000195B0 */ 0xE8, 0x03, 0x0C, 0x0F, 0x16, 0x0A, 0x5E, 0x58, 0x1A, 0x02, 0x01, 0x07, 0x01, 0x05, 0x01, 0x0A, +/* 000195C0 */ 0x0A, 0x0A, 0x0A, 0x02, 0x01, 0x15, 0x16, 0xC8, 0xFE, 0x41, 0x01, 0x05, 0xFE, 0xDF, 0x03, 0x06, +/* 000195D0 */ 0xFE, 0xE0, 0x03, 0x06, 0xFE, 0xA3, 0x03, 0x05, 0xFE, 0x9C, 0x03, 0x08, 0x01, 0x00, 0x01, 0x01, +/* 000195E0 */ 0x06, 0xFE, 0x2D, 0x03, 0x0C, 0x06, 0xFE, 0x2B, 0x03, 0x07, 0x06, 0xFE, 0xE1, 0x03, 0x06, 0xFE, +/* 000195F0 */ 0x2C, 0x03, 0xFE, 0x8F, 0x01, 0x4E, 0x12, 0x4E, 0x13, 0x4E, 0x14, 0xA8, 0x17, 0x14, 0x03, 0x00, +/* 00019600 */ 0x11, 0x17, 0x09, 0x06, 0x00, 0x45, 0x17, 0x02, 0x09, 0x5C, 0x00, 0x8F, 0x01, 0x02, 0x18, 0x00, +/* 00019610 */ 0x00, 0x4A, 0x18, 0x07, 0x06, 0x00, 0x59, 0x00, 0x06, 0x8F, 0x02, 0x24, 0x1A, 0x01, 0x00, 0x6D, +/* 00019620 */ 0x19, 0x1A, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x1A, 0x5A, 0x01, 0x11, 0x01, 0x00, 0xF4, 0x02, +/* 00019630 */ 0x19, 0x19, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x5A, 0x01, 0x19, 0x00, 0x00, 0x5A, 0x02, 0x03, +/* 00019640 */ 0x00, 0x00, 0x5A, 0x03, 0x04, 0x00, 0x00, 0xD0, 0x19, 0x02, 0x00, 0x00, 0xA1, 0x00, 0x02, 0x19, +/* 00019650 */ 0xA1, 0x01, 0x05, 0x19, 0x5A, 0x04, 0x19, 0x00, 0x00, 0x5A, 0x05, 0x02, 0x00, 0x00, 0xF0, 0x06, +/* 00019660 */ 0x18, 0x18, 0x00, 0x00, 0x46, 0x17, 0x18, 0x45, 0x12, 0x17, 0x14, 0x03, 0x00, 0x12, 0x02, 0x09, +/* 00019670 */ 0x24, 0x00, 0x8F, 0x01, 0x14, 0x18, 0x02, 0x00, 0x4A, 0x18, 0x07, 0x03, 0x00, 0x59, 0x00, 0x06, +/* 00019680 */ 0x5A, 0x01, 0x0F, 0x02, 0x00, 0x5A, 0x02, 0x10, 0x02, 0x00, 0xF0, 0x03, 0x18, 0x18, 0x02, 0x00, +/* 00019690 */ 0x45, 0x17, 0x18, 0x09, 0x21, 0x00, 0x8F, 0x01, 0x13, 0x18, 0x03, 0x00, 0x4A, 0x18, 0x07, 0x03, +/* 000196A0 */ 0x00, 0x59, 0x00, 0x06, 0x5A, 0x01, 0x0F, 0x03, 0x00, 0x5A, 0x02, 0x10, 0x03, 0x00, 0xF0, 0x03, +/* 000196B0 */ 0x18, 0x18, 0x03, 0x00, 0x46, 0x17, 0x18, 0x45, 0x13, 0x17, 0x45, 0x14, 0x07, 0xED, 0x00, 0xEE, +/* 000196C0 */ 0x00, 0xA7, 0x17, 0x13, 0x01, 0x00, 0x00, 0x12, 0x03, 0x00, 0x14, 0x17, 0x09, 0x65, 0x00, 0x8F, +/* 000196D0 */ 0x02, 0x36, 0x18, 0x04, 0x00, 0x4A, 0x18, 0x6D, 0x17, 0x18, 0x02, 0x07, 0x04, 0x00, 0x59, 0x00, +/* 000196E0 */ 0x18, 0x5A, 0x01, 0x13, 0x04, 0x00, 0x8F, 0x02, 0x24, 0x1A, 0x01, 0x00, 0x6D, 0x19, 0x1A, 0x03, +/* 000196F0 */ 0x07, 0x02, 0x00, 0x59, 0x00, 0x1A, 0x5A, 0x01, 0x14, 0x05, 0x00, 0xF4, 0x02, 0x19, 0x19, 0x03, +/* 00019700 */ 0x00, 0x00, 0x00, 0x05, 0x00, 0x5A, 0x02, 0x19, 0x04, 0x00, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00019710 */ 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x7B, 0x0A, 0x19, 0x04, 0x7B, 0x0A, 0x19, 0x05, 0x5A, +/* 00019720 */ 0x03, 0x19, 0x04, 0x00, 0xF4, 0x04, 0xFF, 0x17, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x26, 0x14, +/* 00019730 */ 0x14, 0x09, 0x8B, 0xFF, 0xEF, 0x00, 0x8F, 0x02, 0x36, 0x18, 0x04, 0x00, 0x4A, 0x18, 0x6D, 0x17, +/* 00019740 */ 0x18, 0x06, 0x07, 0x04, 0x00, 0x59, 0x00, 0x18, 0x5A, 0x01, 0x13, 0x06, 0x00, 0x5A, 0x02, 0x0D, +/* 00019750 */ 0x06, 0x00, 0xCE, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x7B, +/* 00019760 */ 0x0A, 0x19, 0x07, 0x7B, 0x0A, 0x19, 0x08, 0x7B, 0x0A, 0x19, 0x09, 0x5A, 0x03, 0x19, 0x06, 0x00, +/* 00019770 */ 0xF4, 0x04, 0xFF, 0x17, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x45, 0x00, 0x13, 0x09, 0x02, 0x00, +/* 00019780 */ 0xA8, 0x00, 0x24, 0x00, 0x02, 0x24, 0x00, 0x10, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, +/* 00019790 */ 0x00, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x00, +/* 000197A0 */ 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x96, +/* 000197B0 */ 0x01, 0x00, 0x00, 0xFE, 0x21, 0x03, 0xD1, 0xFE, 0x9C, 0x01, 0xFE, 0x22, 0x03, 0xFE, 0x95, 0x01, +/* 000197C0 */ 0xFE, 0x96, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x94, 0x01, 0xFE, +/* 000197D0 */ 0xC5, 0x87, 0x09, 0x06, 0x00, 0x00, 0x00, 0x6F, 0x00, 0xBB, 0x00, 0x50, 0x00, 0xD4, 0x00, 0x07, +/* 000197E0 */ 0x00, 0x0B, 0x00, 0x0E, 0x00, 0x30, 0x00, 0x5F, 0x00, 0xED, 0xFF, 0x08, 0x00, 0x30, 0x01, 0x44, +/* 000197F0 */ 0x00, 0xA1, 0x00, 0x08, 0x00, 0x1D, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x13, 0x10, 0x43, 0x00, +/* 00019800 */ 0xFE, 0xFB, 0x02, 0x28, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x63, 0x03, 0x3D, 0xFE, 0x1A, 0x81, 0xFE, +/* 00019810 */ 0x1A, 0x81, 0x41, 0xFE, 0x00, 0x90, 0x05, 0x05, 0xFE, 0x1A, 0x81, 0xFE, 0xB9, 0x04, 0xFE, 0xB9, +/* 00019820 */ 0x04, 0x0D, 0x0D, 0x18, 0x07, 0x5B, 0x53, 0x02, 0x06, 0x02, 0x0A, 0x0A, 0x0A, 0x0A, 0x02, 0x17, +/* 00019830 */ 0x06, 0xFE, 0xDA, 0x03, 0x01, 0x01, 0x01, 0x15, 0x08, 0x06, 0xFE, 0xDB, 0x03, 0x01, 0x00, 0x01, +/* 00019840 */ 0x14, 0x06, 0xFE, 0xDC, 0x03, 0x06, 0xFE, 0xDD, 0x03, 0x07, 0x06, 0xFE, 0xDE, 0x03, 0xFE, 0x7E, +/* 00019850 */ 0x01, 0x4E, 0x11, 0x4E, 0x12, 0x4E, 0x13, 0x4E, 0x14, 0x4E, 0x15, 0x4E, 0x16, 0x8F, 0x01, 0x0D, +/* 00019860 */ 0x18, 0x00, 0x00, 0x4A, 0x18, 0x07, 0x06, 0x00, 0x59, 0x00, 0x05, 0x5A, 0x01, 0x0E, 0x00, 0x00, +/* 00019870 */ 0x5A, 0x02, 0x02, 0x00, 0x00, 0x5A, 0x03, 0x03, 0x00, 0x00, 0x5A, 0x04, 0x04, 0x00, 0x00, 0x5A, +/* 00019880 */ 0x05, 0x03, 0x00, 0x00, 0xF0, 0x06, 0x18, 0x18, 0x00, 0x00, 0x45, 0x11, 0x18, 0x8F, 0x01, 0x0D, +/* 00019890 */ 0x18, 0x00, 0x00, 0x4A, 0x18, 0x07, 0x06, 0x00, 0x59, 0x00, 0x05, 0x5A, 0x01, 0x0E, 0x01, 0x00, +/* 000198A0 */ 0x5A, 0x02, 0x06, 0x01, 0x00, 0x5A, 0x03, 0x07, 0x01, 0x00, 0x5A, 0x04, 0x08, 0x01, 0x00, 0x5A, +/* 000198B0 */ 0x05, 0x0F, 0x01, 0x00, 0xF0, 0x06, 0x18, 0x18, 0x01, 0x00, 0x45, 0x12, 0x18, 0x8F, 0x02, 0x36, +/* 000198C0 */ 0x19, 0x01, 0x00, 0x4A, 0x19, 0x6D, 0x18, 0x19, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x19, 0x5A, +/* 000198D0 */ 0x01, 0x12, 0x02, 0x00, 0x5A, 0x02, 0x10, 0x02, 0x00, 0xF4, 0x03, 0x18, 0x18, 0x00, 0x00, 0x00, +/* 000198E0 */ 0x00, 0x02, 0x00, 0x45, 0x13, 0x18, 0x8F, 0x01, 0x0D, 0x18, 0x00, 0x00, 0x4A, 0x18, 0x07, 0x06, +/* 000198F0 */ 0x00, 0x59, 0x00, 0x05, 0x5A, 0x01, 0x0E, 0x03, 0x00, 0x5A, 0x02, 0x09, 0x03, 0x00, 0x5A, 0x03, +/* 00019900 */ 0x12, 0x03, 0x00, 0x5A, 0x04, 0x08, 0x03, 0x00, 0x5A, 0x05, 0x13, 0x03, 0x00, 0xF0, 0x06, 0x18, +/* 00019910 */ 0x18, 0x03, 0x00, 0x45, 0x14, 0x18, 0x77, 0x11, 0x0D, 0x01, 0x77, 0x12, 0x0D, 0x02, 0x77, 0x14, +/* 00019920 */ 0x0D, 0x03, 0x5F, 0x18, 0x0E, 0x04, 0x45, 0x15, 0x18, 0x5F, 0x18, 0x0E, 0x05, 0x45, 0x16, 0x18, +/* 00019930 */ 0xA8, 0x18, 0x15, 0x0A, 0x00, 0x15, 0x18, 0xA8, 0x18, 0x15, 0x03, 0x00, 0x16, 0x18, 0x09, 0x8A, +/* 00019940 */ 0x00, 0x8F, 0x01, 0x0D, 0x18, 0x00, 0x00, 0x4A, 0x18, 0x07, 0x06, 0x00, 0x59, 0x00, 0x05, 0xCE, +/* 00019950 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x7B, 0x15, 0x19, 0x06, +/* 00019960 */ 0x5A, 0x01, 0x19, 0x04, 0x00, 0x5A, 0x02, 0x0A, 0x04, 0x00, 0x5A, 0x03, 0x03, 0x04, 0x00, 0x5A, +/* 00019970 */ 0x04, 0x04, 0x04, 0x00, 0x5A, 0x05, 0x03, 0x04, 0x00, 0xF0, 0x06, 0x18, 0x18, 0x04, 0x00, 0x45, +/* 00019980 */ 0x15, 0x18, 0x8F, 0x01, 0x0D, 0x18, 0x00, 0x00, 0x4A, 0x18, 0x07, 0x06, 0x00, 0x59, 0x00, 0x05, +/* 00019990 */ 0xCE, 0x0C, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x7B, 0x16, 0x19, +/* 000199A0 */ 0x07, 0x5A, 0x01, 0x19, 0x05, 0x00, 0x5A, 0x02, 0x0C, 0x05, 0x00, 0x5A, 0x03, 0x15, 0x05, 0x00, +/* 000199B0 */ 0x5A, 0x04, 0x04, 0x05, 0x00, 0x5A, 0x05, 0x04, 0x05, 0x00, 0xF0, 0x06, 0x18, 0x18, 0x05, 0x00, +/* 000199C0 */ 0x45, 0x16, 0x18, 0x77, 0x15, 0x0D, 0x08, 0x77, 0x16, 0x0D, 0x09, 0xA8, 0x00, 0x24, 0x00, 0x02, +/* 000199D0 */ 0x18, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x02, +/* 000199E0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x02, +/* 000199F0 */ 0x00, 0x00, 0xFE, 0xFE, 0x00, 0xFE, 0x47, 0x02, 0xFE, 0x46, 0x02, 0xFE, 0x44, 0x02, 0xFE, 0x48, +/* 00019A00 */ 0x02, 0xFE, 0x45, 0x02, 0xFE, 0x48, 0x02, 0xFE, 0x45, 0x02, 0xFE, 0x48, 0x02, 0xFE, 0x45, 0x02, +/* 00019A10 */ 0xFE, 0x5A, 0x81, 0x0F, 0x0C, 0x00, 0x00, 0x00, 0x30, 0x00, 0x51, 0x00, 0x30, 0x00, 0x5C, 0x00, +/* 00019A20 */ 0x29, 0x00, 0x3C, 0x00, 0x30, 0x00, 0x65, 0x00, 0x04, 0x00, 0x2D, 0x00, 0x04, 0x00, 0x2E, 0x00, +/* 00019A30 */ 0x04, 0x00, 0x2F, 0x00, 0x07, 0x00, 0x35, 0x00, 0x07, 0x00, 0x35, 0x00, 0x11, 0x00, 0xEA, 0x00, +/* 00019A40 */ 0x41, 0x00, 0x6E, 0x00, 0x41, 0x00, 0x72, 0x00, 0x04, 0x00, 0x35, 0x00, 0x06, 0x00, 0x37, 0x00, +/* 00019A50 */ 0x00, 0x7E, 0x5D, 0x18, 0xC1, 0x03, 0x1A, 0x0B, 0x00, 0xFE, 0xDF, 0x02, 0x23, 0xA2, 0x41, 0xC1, +/* 00019A60 */ 0x00, 0xFE, 0x61, 0x03, 0x3B, 0xFE, 0x33, 0x7C, 0xFE, 0x33, 0x7C, 0x01, 0xFE, 0x00, 0x90, 0x03, +/* 00019A70 */ 0x03, 0xFE, 0x33, 0x7C, 0xFE, 0xE2, 0x01, 0xFE, 0xE2, 0x01, 0x03, 0xFE, 0xD8, 0x03, 0xFE, 0xD9, +/* 00019A80 */ 0x03, 0xFE, 0xCF, 0x03, 0x08, 0x03, 0x08, 0x04, 0x16, 0x16, 0x02, 0x01, 0x01, 0x02, 0x01, 0x01, +/* 00019A90 */ 0x01, 0x01, 0x05, 0x06, 0x07, 0x01, 0x00, 0x4D, 0x96, 0x02, 0x03, 0x4E, 0x08, 0x96, 0x03, 0x08, +/* 00019AA0 */ 0x4E, 0x08, 0x96, 0x04, 0x08, 0xD0, 0x08, 0x00, 0x00, 0x00, 0x96, 0x03, 0x08, 0x96, 0x04, 0x02, +/* 00019AB0 */ 0x8F, 0x02, 0x36, 0x09, 0x00, 0x00, 0x4A, 0x09, 0x6D, 0x08, 0x09, 0x00, 0x07, 0x03, 0x00, 0x59, +/* 00019AC0 */ 0x00, 0x09, 0x5A, 0x01, 0x04, 0x00, 0x00, 0xD6, 0x00, 0x0A, 0x5A, 0x02, 0x0A, 0x00, 0x00, 0xF4, +/* 00019AD0 */ 0x03, 0xFF, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x93, 0x03, 0x00, 0x01, 0x00, 0x09, 0x02, +/* 00019AE0 */ 0x00, 0xA8, 0x00, 0x24, 0x00, 0x93, 0xFE, 0x6C, 0x7C, 0x05, 0x0D, 0x00, 0x00, 0x00, 0x08, 0x00, +/* 00019AF0 */ 0x1B, 0x00, 0x03, 0x00, 0x13, 0x00, 0x29, 0x00, 0x67, 0x01, 0x0A, 0x00, 0x13, 0x00, 0x00, 0x03, +/* 00019B00 */ 0x9B, 0x01, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x13, 0x10, 0x43, 0x00, 0xFE, 0xE2, 0x02, 0x24, 0xA2, +/* 00019B10 */ 0x41, 0xD1, 0x00, 0x3C, 0xFE, 0xB6, 0x7C, 0xFE, 0xB6, 0x7C, 0x41, 0xFE, 0x00, 0x90, 0x02, 0x02, +/* 00019B20 */ 0xFE, 0xB6, 0x7C, 0xFE, 0x3F, 0x01, 0xFE, 0x3F, 0x01, 0x07, 0x0A, 0x0D, 0x05, 0x2C, 0x2B, 0x03, +/* 00019B30 */ 0x03, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x0C, 0x08, 0x01, 0x01, 0x06, 0xFE, 0x2A, 0x03, 0x06, +/* 00019B40 */ 0xFE, 0x2C, 0x03, 0x0B, 0x06, 0xFE, 0x2D, 0x03, 0x06, 0xFE, 0x2B, 0x03, 0x07, 0xB9, 0x4E, 0x0B, +/* 00019B50 */ 0x8F, 0x02, 0x0F, 0x0D, 0x00, 0x00, 0x4A, 0x0D, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, +/* 00019B60 */ 0x0A, 0x00, 0x00, 0xF0, 0x02, 0x0D, 0x0D, 0x00, 0x00, 0x5F, 0x0D, 0x0D, 0x00, 0x45, 0x0B, 0x0D, +/* 00019B70 */ 0x8F, 0x02, 0x08, 0x0D, 0x01, 0x00, 0x4A, 0x0D, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x8F, 0x01, +/* 00019B80 */ 0x02, 0x0E, 0x02, 0x00, 0x5A, 0x01, 0x0E, 0x01, 0x00, 0x5A, 0x02, 0x0B, 0x01, 0x00, 0xF0, 0x03, +/* 00019B90 */ 0x0D, 0x0D, 0x01, 0x00, 0xA8, 0x0E, 0x15, 0x03, 0x00, 0x0D, 0x0E, 0x09, 0x65, 0x00, 0x8F, 0x03, +/* 00019BA0 */ 0x36, 0x0E, 0x03, 0x00, 0x4A, 0x0E, 0x6D, 0x0D, 0x0E, 0x01, 0x07, 0x04, 0x00, 0x59, 0x00, 0x0E, +/* 00019BB0 */ 0x8F, 0x01, 0x03, 0x0F, 0x04, 0x00, 0x4A, 0x0F, 0x5A, 0x01, 0x0F, 0x02, 0x00, 0x8F, 0x01, 0x04, +/* 00019BC0 */ 0x10, 0x05, 0x00, 0x4A, 0x10, 0x43, 0x0F, 0x10, 0x2D, 0x10, 0x0F, 0x03, 0x01, 0x43, 0x01, 0x01, +/* 00019BD0 */ 0x04, 0x10, 0x5A, 0x02, 0x0F, 0x02, 0x00, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00019BE0 */ 0x0F, 0x00, 0x00, 0x00, 0x7B, 0x0A, 0x0F, 0x02, 0x7B, 0x06, 0x0F, 0x03, 0x7B, 0x06, 0x0F, 0x04, +/* 00019BF0 */ 0x7B, 0x06, 0x0F, 0x05, 0x5A, 0x03, 0x0F, 0x02, 0x00, 0xF4, 0x04, 0xFF, 0x0D, 0x01, 0x00, 0x00, +/* 00019C00 */ 0x00, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x01, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, +/* 00019C10 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, +/* 00019C20 */ 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0xFE, 0x1E, 0x02, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, +/* 00019C30 */ 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0xD6, 0x7C, 0x04, 0x02, 0x00, 0x00, 0x00, +/* 00019C40 */ 0x20, 0x00, 0x42, 0x00, 0x2E, 0x00, 0x60, 0x00, 0x67, 0x00, 0x7C, 0x00, 0x00, 0x7F, 0x7C, 0x1B, +/* 00019C50 */ 0xC3, 0x53, 0x50, 0x53, 0x00, 0xFE, 0xB1, 0x02, 0x23, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x60, 0x03, +/* 00019C60 */ 0x3A, 0xFE, 0x4E, 0x75, 0xFE, 0x4E, 0x75, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0x4E, 0x75, +/* 00019C70 */ 0xFE, 0x68, 0x05, 0xFE, 0x68, 0x05, 0x10, 0x10, 0x1B, 0x05, 0x8C, 0x81, 0x5E, 0x02, 0x01, 0x02, +/* 00019C80 */ 0x0B, 0x03, 0x04, 0x01, 0x0F, 0x0F, 0x0F, 0x0F, 0x01, 0x02, 0x1A, 0x1B, 0x9A, 0xFE, 0x47, 0x02, +/* 00019C90 */ 0x06, 0xFE, 0xD6, 0x03, 0x06, 0xFE, 0xA3, 0x03, 0x01, 0x00, 0x06, 0xFE, 0x94, 0x03, 0x07, 0x06, +/* 00019CA0 */ 0xFE, 0xD7, 0x03, 0x08, 0x01, 0xFF, 0x01, 0x01, 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, 0x2C, 0x03, +/* 00019CB0 */ 0x0B, 0x06, 0xFE, 0x2D, 0x03, 0x06, 0xFE, 0x2B, 0x03, 0xFE, 0x51, 0x02, 0x4E, 0x11, 0x4E, 0x12, +/* 00019CC0 */ 0x4E, 0x13, 0x4E, 0x14, 0x4E, 0x15, 0x4E, 0x16, 0x4E, 0x17, 0x4E, 0x18, 0x4E, 0x19, 0x2A, 0x1D, +/* 00019CD0 */ 0x10, 0x14, 0x03, 0x00, 0x1D, 0x02, 0x09, 0x08, 0x00, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x09, 0x2A, +/* 00019CE0 */ 0x02, 0xD0, 0x1D, 0x00, 0x01, 0x00, 0x45, 0x11, 0x1D, 0x2A, 0x1D, 0x10, 0x14, 0x03, 0x00, 0x1D, +/* 00019CF0 */ 0x03, 0x09, 0x0F, 0x00, 0xD0, 0x1E, 0x01, 0x02, 0x00, 0xA1, 0x00, 0x10, 0x1E, 0x45, 0x1D, 0x1E, +/* 00019D00 */ 0x09, 0x22, 0x00, 0x8F, 0x02, 0x24, 0x1F, 0x00, 0x00, 0x6D, 0x1E, 0x1F, 0x00, 0x07, 0x02, 0x00, +/* 00019D10 */ 0x59, 0x00, 0x1F, 0x5A, 0x01, 0x10, 0x00, 0x00, 0xF4, 0x02, 0x1E, 0x1E, 0x00, 0x00, 0x00, 0x00, +/* 00019D20 */ 0x00, 0x00, 0x46, 0x1D, 0x1E, 0x45, 0x12, 0x1D, 0x8F, 0x02, 0x24, 0x1E, 0x00, 0x00, 0x6D, 0x1D, +/* 00019D30 */ 0x1E, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x1E, 0xA7, 0x1F, 0x12, 0x02, 0x00, 0x00, 0x5A, 0x01, +/* 00019D40 */ 0x1F, 0x01, 0x00, 0xF4, 0x02, 0x1D, 0x1D, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, 0x13, 0x1D, +/* 00019D50 */ 0x45, 0x14, 0x04, 0x45, 0x15, 0x04, 0xED, 0x00, 0xEE, 0x00, 0x12, 0x03, 0x00, 0x14, 0x13, 0x09, +/* 00019D60 */ 0x9F, 0x01, 0x8F, 0x02, 0x24, 0x1E, 0x00, 0x00, 0x6D, 0x1D, 0x1E, 0x03, 0x07, 0x02, 0x00, 0x59, +/* 00019D70 */ 0x00, 0x1E, 0x5A, 0x01, 0x14, 0x02, 0x00, 0xF4, 0x02, 0x1D, 0x1D, 0x03, 0x00, 0x00, 0x00, 0x02, +/* 00019D80 */ 0x00, 0x45, 0x16, 0x1D, 0xBC, 0x1D, 0x16, 0x12, 0x00, 0x00, 0x0E, 0x6C, 0x01, 0x1D, 0x98, 0x1D, +/* 00019D90 */ 0x12, 0x16, 0x01, 0x00, 0x45, 0x17, 0x1D, 0x2A, 0x1D, 0x17, 0x15, 0x03, 0x00, 0x1D, 0x03, 0x09, +/* 00019DA0 */ 0x08, 0x00, 0x2A, 0x1D, 0x17, 0x15, 0x08, 0x00, 0x1D, 0x05, 0x14, 0x03, 0x00, 0x17, 0x06, 0x09, +/* 00019DB0 */ 0x1F, 0x00, 0x8F, 0x02, 0x03, 0x1E, 0x01, 0x00, 0x6D, 0x1D, 0x1E, 0x04, 0x07, 0x02, 0x00, 0x59, +/* 00019DC0 */ 0x00, 0x1E, 0x5A, 0x01, 0x07, 0x03, 0x00, 0xF4, 0x02, 0xFF, 0x1D, 0x04, 0x00, 0x00, 0x00, 0x03, +/* 00019DD0 */ 0x00, 0x8F, 0x02, 0x24, 0x1E, 0x00, 0x00, 0x6D, 0x1D, 0x1E, 0x05, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 00019DE0 */ 0x1E, 0x5A, 0x01, 0x17, 0x04, 0x00, 0xF4, 0x02, 0x1D, 0x1D, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, +/* 00019DF0 */ 0x45, 0x18, 0x1D, 0x8F, 0x01, 0x11, 0x1D, 0x02, 0x00, 0x4A, 0x1D, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 00019E00 */ 0x08, 0x5A, 0x01, 0x18, 0x05, 0x00, 0xF0, 0x02, 0x1D, 0x1D, 0x05, 0x00, 0x0F, 0x1F, 0x00, 0x1D, +/* 00019E10 */ 0x8F, 0x02, 0x03, 0x1E, 0x01, 0x00, 0x6D, 0x1D, 0x1E, 0x06, 0x07, 0x02, 0x00, 0x59, 0x00, 0x1E, +/* 00019E20 */ 0x5A, 0x01, 0x18, 0x06, 0x00, 0xF4, 0x02, 0xFF, 0x1D, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x8F, +/* 00019E30 */ 0x02, 0x03, 0x1E, 0x01, 0x00, 0x6D, 0x1D, 0x1E, 0x07, 0x07, 0x02, 0x00, 0x59, 0x00, 0x1E, 0x5A, +/* 00019E40 */ 0x01, 0x18, 0x07, 0x00, 0xF4, 0x02, 0x1D, 0x1D, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x45, 0x19, +/* 00019E50 */ 0x1D, 0xA8, 0x1D, 0x14, 0x03, 0x00, 0x19, 0x1D, 0x09, 0x22, 0x00, 0x8F, 0x02, 0x03, 0x1E, 0x01, +/* 00019E60 */ 0x00, 0x6D, 0x1D, 0x1E, 0x08, 0x07, 0x02, 0x00, 0x59, 0x00, 0x1E, 0x5A, 0x01, 0x18, 0x08, 0x00, +/* 00019E70 */ 0xF4, 0x02, 0xFF, 0x1D, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x09, 0x7D, 0x00, 0x8F, 0x02, 0x36, +/* 00019E80 */ 0x1E, 0x03, 0x00, 0x4A, 0x1E, 0x6D, 0x1D, 0x1E, 0x09, 0x07, 0x03, 0x00, 0x59, 0x00, 0x1E, 0x5A, +/* 00019E90 */ 0x01, 0x11, 0x09, 0x00, 0x5A, 0x02, 0x19, 0x09, 0x00, 0xF4, 0x03, 0x1D, 0x1D, 0x09, 0x00, 0x00, +/* 00019EA0 */ 0x00, 0x09, 0x00, 0x14, 0x03, 0x00, 0x1D, 0x09, 0x09, 0x4F, 0x00, 0x8F, 0x02, 0x36, 0x1E, 0x03, +/* 00019EB0 */ 0x00, 0x4A, 0x1E, 0x6D, 0x1D, 0x1E, 0x0A, 0x07, 0x04, 0x00, 0x59, 0x00, 0x1E, 0x5A, 0x01, 0x11, +/* 00019EC0 */ 0x0A, 0x00, 0x43, 0x1F, 0x15, 0x2D, 0x15, 0x1F, 0x0A, 0x5A, 0x02, 0x1F, 0x0A, 0x00, 0xCE, 0x00, +/* 00019ED0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x7B, 0x19, 0x1F, 0x0B, 0x7B, +/* 00019EE0 */ 0x0D, 0x1F, 0x0C, 0x7B, 0x0D, 0x1F, 0x0D, 0x7B, 0x0D, 0x1F, 0x0E, 0x5A, 0x03, 0x1F, 0x0A, 0x00, +/* 00019EF0 */ 0xF4, 0x04, 0xFF, 0x1D, 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x2D, 0x14, 0x14, 0x0A, 0x09, 0x57, +/* 00019F00 */ 0xFE, 0xEF, 0x00, 0x45, 0x00, 0x11, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x01, 0x18, 0x00, +/* 00019F10 */ 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, +/* 00019F20 */ 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0xFE, 0x21, 0x03, 0xFE, +/* 00019F30 */ 0x26, 0x03, 0xD1, 0xFE, 0x22, 0x03, 0xFE, 0xAE, 0x02, 0xFE, 0x22, 0x03, 0xFE, 0xAF, 0x02, 0xFE, +/* 00019F40 */ 0xEE, 0x01, 0xFE, 0xAF, 0x02, 0xFE, 0x0F, 0x03, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x94, +/* 00019F50 */ 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x6B, 0x75, 0x18, 0x12, 0x00, 0x00, 0x00, 0x0B, +/* 00019F60 */ 0x00, 0x32, 0x00, 0x08, 0x00, 0x1E, 0x00, 0x08, 0x00, 0x19, 0x00, 0x3F, 0x00, 0x58, 0x00, 0x28, +/* 00019F70 */ 0x00, 0x31, 0x00, 0x03, 0x00, 0x0B, 0x00, 0x07, 0x00, 0x18, 0x00, 0x08, 0x00, 0x17, 0x00, 0x22, +/* 00019F80 */ 0x00, 0x2D, 0x00, 0x0A, 0x00, 0x1F, 0x00, 0x09, 0x00, 0x26, 0x00, 0x1B, 0x00, 0x69, 0x00, 0x1F, +/* 00019F90 */ 0x00, 0x4F, 0x00, 0x22, 0x00, 0x37, 0x00, 0x1D, 0x00, 0x40, 0x00, 0x1F, 0x00, 0x4B, 0x00, 0x22, +/* 00019FA0 */ 0x00, 0x4D, 0x00, 0x0A, 0x00, 0x96, 0x00, 0x22, 0x00, 0x3F, 0x00, 0x2E, 0x00, 0x49, 0x00, 0x4F, +/* 00019FB0 */ 0x00, 0x9B, 0x00, 0x09, 0x00, 0x1B, 0x00, 0x08, 0x00, 0x11, 0x00, 0x00, 0x7E, 0x5C, 0x09, 0xC1, +/* 00019FC0 */ 0x43, 0x50, 0x0B, 0x00, 0xFE, 0x8E, 0x02, 0x2B, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x5F, 0x03, 0x37, +/* 00019FD0 */ 0xFE, 0xA2, 0x70, 0xFE, 0xA2, 0x70, 0x02, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0xA2, 0x70, 0xFE, +/* 00019FE0 */ 0x40, 0x03, 0xFE, 0x40, 0x03, 0x0F, 0x07, 0x0F, 0x08, 0x5B, 0x52, 0x02, 0x04, 0x07, 0x02, 0x0E, +/* 00019FF0 */ 0x0E, 0x0E, 0x0E, 0x01, 0x0E, 0x0F, 0x08, 0x07, 0x0C, 0x06, 0xFE, 0x95, 0x03, 0x0B, 0xFE, 0x74, +/* 0001A000 */ 0x01, 0x4E, 0x08, 0x4E, 0x09, 0x4E, 0x0A, 0x4E, 0x0B, 0x4E, 0x0C, 0x4E, 0x0D, 0x8F, 0x01, 0x0F, +/* 0001A010 */ 0x10, 0x00, 0x00, 0x4A, 0x10, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x07, 0x00, 0x00, +/* 0001A020 */ 0xF0, 0x02, 0x10, 0x10, 0x00, 0x00, 0x45, 0x08, 0x10, 0x14, 0x03, 0x00, 0x08, 0x03, 0x09, 0x06, +/* 0001A030 */ 0x00, 0x45, 0x00, 0x04, 0x09, 0x3C, 0x01, 0x5F, 0x10, 0x08, 0x00, 0x0E, 0x6B, 0x00, 0x10, 0x8F, +/* 0001A040 */ 0x02, 0x36, 0x11, 0x01, 0x00, 0x4A, 0x11, 0x6D, 0x10, 0x11, 0x01, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 0001A050 */ 0x11, 0x5F, 0x12, 0x08, 0x02, 0x5A, 0x01, 0x12, 0x01, 0x00, 0x5A, 0x02, 0x05, 0x01, 0x00, 0xF4, +/* 0001A060 */ 0x03, 0x10, 0x10, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, 0x09, 0x10, 0x8F, 0x02, 0x36, 0x11, +/* 0001A070 */ 0x01, 0x00, 0x4A, 0x11, 0x6D, 0x10, 0x11, 0x03, 0x07, 0x02, 0x00, 0x59, 0x00, 0x11, 0x5A, 0x01, +/* 0001A080 */ 0x09, 0x02, 0x00, 0xF4, 0x02, 0x10, 0x10, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x45, 0x0A, 0x10, +/* 0001A090 */ 0xA7, 0x10, 0x09, 0x04, 0x00, 0x00, 0xA7, 0x11, 0x0A, 0x05, 0x01, 0x00, 0x15, 0x03, 0x00, 0x10, +/* 0001A0A0 */ 0x11, 0x09, 0x06, 0x00, 0x45, 0x00, 0x04, 0x09, 0xC9, 0x00, 0x5F, 0x10, 0x08, 0x06, 0x0E, 0xB9, +/* 0001A0B0 */ 0x00, 0x10, 0x8F, 0x02, 0x36, 0x11, 0x01, 0x00, 0x4A, 0x11, 0x6D, 0x10, 0x11, 0x07, 0x07, 0x03, +/* 0001A0C0 */ 0x00, 0x59, 0x00, 0x11, 0x5F, 0x12, 0x08, 0x08, 0x5A, 0x01, 0x12, 0x03, 0x00, 0x5A, 0x02, 0x05, +/* 0001A0D0 */ 0x03, 0x00, 0xF4, 0x03, 0x10, 0x10, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x45, 0x0B, 0x10, 0x8F, +/* 0001A0E0 */ 0x02, 0x36, 0x11, 0x01, 0x00, 0x4A, 0x11, 0x6D, 0x10, 0x11, 0x09, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 0001A0F0 */ 0x11, 0x8F, 0x02, 0x36, 0x13, 0x01, 0x00, 0x4A, 0x13, 0x6D, 0x12, 0x13, 0x0A, 0x07, 0x03, 0x00, +/* 0001A100 */ 0x59, 0x00, 0x13, 0x5A, 0x01, 0x0B, 0x05, 0x00, 0xD6, 0x00, 0x14, 0x5A, 0x02, 0x14, 0x05, 0x00, +/* 0001A110 */ 0xF4, 0x03, 0x12, 0x12, 0x0A, 0x00, 0x00, 0x00, 0x05, 0x00, 0x5A, 0x01, 0x12, 0x04, 0x00, 0xD6, +/* 0001A120 */ 0x01, 0x12, 0x5A, 0x02, 0x12, 0x04, 0x00, 0xF4, 0x03, 0x10, 0x10, 0x09, 0x00, 0x00, 0x00, 0x04, +/* 0001A130 */ 0x00, 0x45, 0x0C, 0x10, 0x8F, 0x02, 0x36, 0x11, 0x01, 0x00, 0x4A, 0x11, 0x6D, 0x10, 0x11, 0x0B, +/* 0001A140 */ 0x07, 0x02, 0x00, 0x59, 0x00, 0x11, 0x5A, 0x01, 0x0C, 0x06, 0x00, 0xF4, 0x02, 0x10, 0x10, 0x0B, +/* 0001A150 */ 0x00, 0x00, 0x00, 0x06, 0x00, 0x45, 0x0D, 0x10, 0xA7, 0x10, 0x0C, 0x0C, 0x02, 0x00, 0xA7, 0x11, +/* 0001A160 */ 0x0D, 0x0D, 0x03, 0x00, 0x41, 0x00, 0x10, 0x11, 0x09, 0x08, 0x00, 0x45, 0x00, 0x06, 0x09, 0x02, +/* 0001A170 */ 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xD4, 0x03, 0xFE, 0x56, 0x01, 0xFE, 0xD4, 0x03, 0xFE, 0x15, +/* 0001A180 */ 0x03, 0xD1, 0xD1, 0xFE, 0xD5, 0x03, 0xFE, 0x56, 0x01, 0xFE, 0xD5, 0x03, 0xD5, 0x89, 0xFE, 0x15, +/* 0001A190 */ 0x03, 0xD1, 0xD1, 0xFE, 0xBE, 0x70, 0x0F, 0x0C, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x2D, 0x00, 0x08, +/* 0001A1A0 */ 0x00, 0x23, 0x00, 0x06, 0x00, 0x45, 0x00, 0x08, 0x00, 0x23, 0x00, 0x2D, 0x00, 0x3C, 0x00, 0x24, +/* 0001A1B0 */ 0x00, 0x38, 0x00, 0x14, 0x00, 0x41, 0x00, 0x06, 0x00, 0x2F, 0x00, 0x08, 0x00, 0x25, 0x00, 0x2D, +/* 0001A1C0 */ 0x00, 0x44, 0x00, 0x55, 0x00, 0x88, 0x00, 0x24, 0x00, 0x3C, 0x00, 0x13, 0x00, 0x49, 0x00, 0x08, +/* 0001A1D0 */ 0x00, 0x11, 0x00, 0x00, 0x48, 0xA2, 0x01, 0x00, 0xDC, 0xA1, 0x01, 0x00, 0x7F, 0x5C, 0x08, 0xC1, +/* 0001A1E0 */ 0x03, 0x10, 0x07, 0x00, 0xFE, 0xA0, 0x02, 0x62, 0xA2, 0x41, 0xD0, 0x00, 0x39, 0xFE, 0x01, 0x10, +/* 0001A1F0 */ 0xFE, 0x19, 0x73, 0xFE, 0x19, 0x73, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0x19, 0x73, 0x23, +/* 0001A200 */ 0x23, 0x04, 0x02, 0x04, 0x03, 0x0B, 0x0B, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x28, +/* 0001A210 */ 0x8F, 0x02, 0x36, 0x05, 0x00, 0x00, 0x4A, 0x05, 0x6D, 0x04, 0x05, 0x00, 0x07, 0x02, 0x00, 0x59, +/* 0001A220 */ 0x00, 0x05, 0x5A, 0x01, 0x02, 0x00, 0x00, 0xF4, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0001A230 */ 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x75, 0x01, 0xFE, 0x26, 0x73, 0x02, 0x00, +/* 0001A240 */ 0x00, 0x00, 0x00, 0x26, 0x00, 0x16, 0x00, 0x00, 0x7F, 0x4C, 0x01, 0xC0, 0x03, 0x00, 0x07, 0x00, +/* 0001A250 */ 0xFE, 0xA0, 0x02, 0x3E, 0xA2, 0x41, 0xD0, 0x00, 0x38, 0xFE, 0x01, 0x10, 0xFE, 0xF5, 0x72, 0xFE, +/* 0001A260 */ 0xF5, 0x72, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0xF5, 0x72, 0x21, 0x21, 0x02, 0x03, 0x04, +/* 0001A270 */ 0x06, 0x06, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x11, 0xA7, 0x04, 0x03, 0x00, 0x00, +/* 0001A280 */ 0x00, 0x41, 0x00, 0x04, 0x02, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xD1, 0xFE, 0x02, 0x73, +/* 0001A290 */ 0x02, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x14, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, +/* 0001A2A0 */ 0x03, 0x00, 0xFE, 0x76, 0x02, 0x25, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x5E, 0x03, 0x36, 0xFE, 0x31, +/* 0001A2B0 */ 0x6D, 0xFE, 0x31, 0x6D, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0x31, 0x6D, 0xE0, 0xE0, 0x05, +/* 0001A2C0 */ 0x04, 0x06, 0x04, 0x1D, 0x1C, 0x02, 0x03, 0x04, 0x02, 0x02, 0x02, 0x02, 0x05, 0x08, 0x07, 0x79, +/* 0001A2D0 */ 0x8F, 0x02, 0x24, 0x07, 0x00, 0x00, 0x6D, 0x06, 0x07, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x07, +/* 0001A2E0 */ 0x5A, 0x01, 0x04, 0x00, 0x00, 0xF4, 0x02, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, +/* 0001A2F0 */ 0x04, 0x06, 0x8F, 0x01, 0x0E, 0x06, 0x01, 0x00, 0x4A, 0x06, 0x0F, 0x14, 0x00, 0x06, 0x8F, 0x01, +/* 0001A300 */ 0x03, 0x06, 0x02, 0x00, 0x4A, 0x06, 0x07, 0x01, 0x00, 0x59, 0x00, 0x02, 0xF0, 0x01, 0xFF, 0x06, +/* 0001A310 */ 0x01, 0x00, 0x8F, 0x02, 0x03, 0x07, 0x03, 0x00, 0x6D, 0x06, 0x07, 0x01, 0x07, 0x03, 0x00, 0x59, +/* 0001A320 */ 0x00, 0x07, 0x5A, 0x01, 0x04, 0x02, 0x00, 0x8F, 0x01, 0x0E, 0x08, 0x01, 0x00, 0x4A, 0x08, 0x5A, +/* 0001A330 */ 0x02, 0x08, 0x02, 0x00, 0xF4, 0x03, 0x06, 0x06, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x42, 0x00, +/* 0001A340 */ 0x06, 0x03, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x22, 0x03, 0xFE, 0xC0, 0x02, 0xFE, +/* 0001A350 */ 0x4B, 0x6D, 0x05, 0x00, 0x00, 0x00, 0x00, 0x22, 0x00, 0x29, 0x00, 0x0C, 0x00, 0x25, 0x00, 0x14, +/* 0001A360 */ 0x00, 0x2F, 0x00, 0x35, 0x00, 0x48, 0x00, 0x00, 0x7E, 0x5D, 0x08, 0x01, 0x00, 0x1A, 0x0B, 0x00, +/* 0001A370 */ 0xFE, 0xFC, 0x01, 0x1A, 0xA0, 0x41, 0xD1, 0x00, 0x34, 0xFE, 0x5E, 0x51, 0xFE, 0x5E, 0x51, 0x01, +/* 0001A380 */ 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFE, 0x5E, 0x51, 0xFE, 0xA8, 0x1B, 0xFE, 0xA8, 0x1B, 0x02, 0xFE, +/* 0001A390 */ 0x6C, 0x03, 0xFE, 0xAC, 0x03, 0x1A, 0x26, 0x3D, 0x04, 0xC5, 0x9B, 0x02, 0x04, 0x02, 0x3A, 0x3B, +/* 0001A3A0 */ 0x3C, 0x05, 0xFE, 0xAD, 0x03, 0x05, 0xFE, 0xAE, 0x03, 0x05, 0xFE, 0xAF, 0x03, 0x06, 0xFE, 0xB0, +/* 0001A3B0 */ 0x03, 0x06, 0xFE, 0xB1, 0x03, 0x05, 0xFE, 0xB2, 0x03, 0x05, 0xFE, 0xB3, 0x03, 0x05, 0xFE, 0xB4, +/* 0001A3C0 */ 0x03, 0x05, 0xFE, 0xB5, 0x03, 0x05, 0xFE, 0xB6, 0x03, 0x05, 0xFE, 0xB7, 0x03, 0x05, 0xFE, 0xB8, +/* 0001A3D0 */ 0x03, 0x05, 0xFE, 0xB9, 0x03, 0x05, 0xFE, 0xBA, 0x03, 0x05, 0xFE, 0xBB, 0x03, 0x05, 0xFE, 0xBC, +/* 0001A3E0 */ 0x03, 0x06, 0xFE, 0x47, 0x03, 0x05, 0xFE, 0xBD, 0x03, 0x05, 0xFE, 0xBE, 0x03, 0x05, 0xFE, 0xBF, +/* 0001A3F0 */ 0x03, 0x05, 0xFE, 0xC0, 0x03, 0x05, 0xFE, 0xC1, 0x03, 0x05, 0xFE, 0xC2, 0x03, 0x05, 0xFE, 0xC3, +/* 0001A400 */ 0x03, 0x05, 0xFE, 0xC4, 0x03, 0x05, 0xFE, 0xC5, 0x03, 0x05, 0xFE, 0xC6, 0x03, 0x05, 0xFE, 0xC7, +/* 0001A410 */ 0x03, 0x05, 0xFE, 0xC8, 0x03, 0x05, 0xFE, 0xC9, 0x03, 0x05, 0xFE, 0xCA, 0x03, 0x05, 0xFE, 0xCB, +/* 0001A420 */ 0x03, 0x05, 0xFE, 0xCC, 0x03, 0x06, 0xFE, 0xCD, 0x03, 0x06, 0xFE, 0xCE, 0x03, 0x06, 0xFE, 0xCF, +/* 0001A430 */ 0x03, 0xFE, 0xE3, 0x02, 0x4E, 0x26, 0x4E, 0x27, 0x4E, 0x28, 0x4E, 0x29, 0x4E, 0x2A, 0x4E, 0x2B, +/* 0001A440 */ 0x4E, 0x2C, 0x4E, 0x2D, 0x4E, 0x2E, 0x4E, 0x2F, 0x4E, 0x30, 0x4E, 0x31, 0x4E, 0x32, 0x4E, 0x33, +/* 0001A450 */ 0x4E, 0x34, 0x4E, 0x35, 0x4E, 0x36, 0x4E, 0x37, 0x4E, 0x38, 0x4E, 0x39, 0x4E, 0x3D, 0x96, 0x02, +/* 0001A460 */ 0x3D, 0x4E, 0x3D, 0x96, 0x03, 0x3D, 0x45, 0x26, 0x02, 0x45, 0x27, 0x03, 0x45, 0x3D, 0x04, 0x01, +/* 0001A470 */ 0x09, 0x01, 0x3E, 0x26, 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, 0x3D, 0x05, 0x01, 0x09, 0x01, 0x3E, +/* 0001A480 */ 0x27, 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, 0x3D, 0x06, 0x45, 0x28, 0x3D, 0x45, 0x29, 0x07, 0x2D, +/* 0001A490 */ 0x3D, 0x08, 0x09, 0x45, 0x2A, 0x3D, 0x45, 0x3D, 0x0A, 0x01, 0x09, 0x01, 0x3E, 0x29, 0x2D, 0x3D, +/* 0001A4A0 */ 0x3D, 0x3E, 0x2D, 0x3D, 0x3D, 0x05, 0x01, 0x09, 0x01, 0x3E, 0x2A, 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, +/* 0001A4B0 */ 0x3D, 0x3D, 0x0B, 0x45, 0x2B, 0x3D, 0x45, 0x3D, 0x0C, 0x01, 0x09, 0x01, 0x3E, 0x28, 0x2D, 0x3D, +/* 0001A4C0 */ 0x3D, 0x3E, 0x2D, 0x3D, 0x3D, 0x0D, 0x45, 0x2C, 0x3D, 0x45, 0x3D, 0x0A, 0x01, 0x09, 0x01, 0x3E, +/* 0001A4D0 */ 0x27, 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, 0x3D, 0x0E, 0x45, 0x2D, 0x3D, 0x45, 0x3D, 0x0A, 0x01, +/* 0001A4E0 */ 0x09, 0x01, 0x3E, 0x2D, 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, 0x3D, 0x0F, 0x01, 0x09, 0x01, 0x3E, +/* 0001A4F0 */ 0x28, 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, 0x3D, 0x10, 0x45, 0x2E, 0x3D, 0x45, 0x3D, 0x0A, 0x01, +/* 0001A500 */ 0x09, 0x01, 0x3E, 0x28, 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, 0x3D, 0x11, 0x01, 0x09, 0x01, 0x3E, +/* 0001A510 */ 0x27, 0x2D, 0x3D, 0x3D, 0x3E, 0x01, 0x09, 0x01, 0x3E, 0x28, 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, +/* 0001A520 */ 0x3D, 0x13, 0x45, 0x2F, 0x3D, 0x45, 0x3D, 0x0A, 0x01, 0x09, 0x01, 0x3E, 0x26, 0x2D, 0x3D, 0x3D, +/* 0001A530 */ 0x3E, 0x2D, 0x3D, 0x3D, 0x14, 0x01, 0x09, 0x01, 0x3E, 0x27, 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, +/* 0001A540 */ 0x3D, 0x13, 0x45, 0x30, 0x3D, 0x45, 0x3D, 0x0A, 0x01, 0x09, 0x01, 0x3E, 0x26, 0x2D, 0x3D, 0x3D, +/* 0001A550 */ 0x3E, 0x2D, 0x3D, 0x3D, 0x15, 0x45, 0x31, 0x3D, 0x45, 0x3D, 0x0A, 0x01, 0x09, 0x01, 0x3E, 0x26, +/* 0001A560 */ 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, 0x3D, 0x16, 0x01, 0x09, 0x01, 0x3E, 0x26, 0x2D, 0x3D, 0x3D, +/* 0001A570 */ 0x3E, 0x2D, 0x3D, 0x3D, 0x17, 0x45, 0x32, 0x3D, 0x01, 0x09, 0x01, 0x3D, 0x26, 0x2D, 0x3D, 0x3D, +/* 0001A580 */ 0x18, 0x2D, 0x3D, 0x0A, 0x3D, 0x45, 0x3E, 0x19, 0x01, 0x09, 0x01, 0x3F, 0x32, 0x2D, 0x3E, 0x3E, +/* 0001A590 */ 0x3F, 0x2D, 0x3E, 0x3E, 0x1A, 0x2D, 0x3D, 0x3D, 0x3E, 0x45, 0x3E, 0x05, 0x01, 0x09, 0x01, 0x3F, +/* 0001A5A0 */ 0x26, 0x2D, 0x3E, 0x3E, 0x3F, 0x2D, 0x3E, 0x3E, 0x1B, 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, 0x3D, +/* 0001A5B0 */ 0x0B, 0x45, 0x33, 0x3D, 0x45, 0x3D, 0x1C, 0x01, 0x09, 0x01, 0x3E, 0x33, 0x2D, 0x3D, 0x3D, 0x3E, +/* 0001A5C0 */ 0x2D, 0x3D, 0x3D, 0x0B, 0x45, 0x3E, 0x1D, 0x01, 0x09, 0x01, 0x3F, 0x31, 0x2D, 0x3E, 0x3E, 0x3F, +/* 0001A5D0 */ 0x2D, 0x3E, 0x3E, 0x1E, 0x2D, 0x3D, 0x3D, 0x3E, 0x45, 0x3E, 0x1D, 0x01, 0x09, 0x01, 0x3F, 0x30, +/* 0001A5E0 */ 0x2D, 0x3E, 0x3E, 0x3F, 0x2D, 0x3E, 0x3E, 0x1E, 0x2D, 0x3D, 0x3D, 0x3E, 0x45, 0x34, 0x3D, 0x45, +/* 0001A5F0 */ 0x3D, 0x1F, 0x01, 0x09, 0x01, 0x3E, 0x2F, 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, 0x3D, 0x20, 0x45, +/* 0001A600 */ 0x3E, 0x1F, 0x01, 0x09, 0x01, 0x3F, 0x2E, 0x2D, 0x3E, 0x3E, 0x3F, 0x2D, 0x3E, 0x3E, 0x20, 0x2D, +/* 0001A610 */ 0x3D, 0x3D, 0x3E, 0x45, 0x3E, 0x19, 0x01, 0x09, 0x01, 0x3F, 0x2C, 0x2D, 0x3E, 0x3E, 0x3F, 0x2D, +/* 0001A620 */ 0x3E, 0x3E, 0x21, 0x2D, 0x3D, 0x3D, 0x3E, 0x45, 0x35, 0x3D, 0x45, 0x3D, 0x22, 0x01, 0x09, 0x01, +/* 0001A630 */ 0x3E, 0x34, 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, 0x3D, 0x22, 0x01, 0x09, 0x01, 0x3E, 0x35, 0x2D, +/* 0001A640 */ 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, 0x3D, 0x22, 0x45, 0x36, 0x3D, 0x45, 0x3D, 0x0A, 0x01, 0x09, 0x01, +/* 0001A650 */ 0x3E, 0x36, 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, 0x3D, 0x05, 0x01, 0x09, 0x01, 0x3E, 0x2C, 0x2D, +/* 0001A660 */ 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, 0x3D, 0x05, 0x01, 0x09, 0x01, 0x3E, 0x2B, 0x2D, 0x3D, 0x3D, 0x3E, +/* 0001A670 */ 0x2D, 0x3D, 0x3D, 0x0B, 0x45, 0x37, 0x3D, 0x8F, 0x02, 0x0A, 0x3D, 0x00, 0x00, 0x07, 0x03, 0x00, +/* 0001A680 */ 0x45, 0x3E, 0x23, 0x01, 0x09, 0x01, 0x3F, 0x34, 0x2D, 0x3E, 0x3E, 0x3F, 0x2D, 0x3E, 0x3E, 0x24, +/* 0001A690 */ 0x5A, 0x01, 0x3E, 0x00, 0x00, 0x5A, 0x02, 0x25, 0x00, 0x00, 0xC5, 0x03, 0x3D, 0x3D, 0x00, 0x00, +/* 0001A6A0 */ 0x45, 0x38, 0x3D, 0x8F, 0x02, 0x0A, 0x3D, 0x00, 0x00, 0x07, 0x03, 0x00, 0x45, 0x3E, 0x23, 0x01, +/* 0001A6B0 */ 0x09, 0x01, 0x3F, 0x35, 0x2D, 0x3E, 0x3E, 0x3F, 0x2D, 0x3E, 0x3E, 0x24, 0x5A, 0x01, 0x3E, 0x01, +/* 0001A6C0 */ 0x00, 0x5A, 0x02, 0x25, 0x01, 0x00, 0xC5, 0x03, 0x3D, 0x3D, 0x01, 0x00, 0x45, 0x39, 0x3D, 0x8F, +/* 0001A6D0 */ 0x02, 0x0A, 0x3D, 0x00, 0x00, 0x07, 0x03, 0x00, 0x45, 0x3E, 0x23, 0x01, 0x09, 0x01, 0x3F, 0x37, +/* 0001A6E0 */ 0x2D, 0x3E, 0x3E, 0x3F, 0x2D, 0x3E, 0x3E, 0x24, 0x5A, 0x01, 0x3E, 0x02, 0x00, 0x5A, 0x02, 0x25, +/* 0001A6F0 */ 0x02, 0x00, 0xC5, 0x03, 0x3D, 0x3D, 0x02, 0x00, 0x96, 0x02, 0x3D, 0x8F, 0x02, 0x02, 0x3D, 0x01, +/* 0001A700 */ 0x00, 0x07, 0x01, 0x00, 0xC5, 0x01, 0x3D, 0x3D, 0x03, 0x00, 0x96, 0x03, 0x3D, 0xD6, 0x00, 0x00, +/* 0001A710 */ 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x2A, 0x56, 0x18, 0x32, 0x00, 0x00, 0x00, 0x03, +/* 0001A720 */ 0x00, 0x1F, 0x00, 0x03, 0x00, 0x1F, 0x00, 0x20, 0x00, 0x33, 0x00, 0x03, 0x00, 0x77, 0x00, 0x07, +/* 0001A730 */ 0x00, 0xC0, 0x00, 0x20, 0x00, 0x44, 0x00, 0x13, 0x00, 0x7D, 0x00, 0x13, 0x00, 0x94, 0x00, 0x20, +/* 0001A740 */ 0x00, 0x83, 0x00, 0x29, 0x00, 0x83, 0x00, 0x20, 0x00, 0x74, 0x00, 0x13, 0x00, 0x6A, 0x00, 0x20, +/* 0001A750 */ 0x00, 0x7A, 0x00, 0x3C, 0x00, 0xAF, 0x03, 0x3B, 0x00, 0x4C, 0x01, 0x3B, 0x00, 0x5A, 0x01, 0x20, +/* 0001A760 */ 0x00, 0x4B, 0x00, 0x2D, 0x00, 0xBA, 0x00, 0x2C, 0x00, 0x74, 0x00, 0x2C, 0x00, 0x92, 0x00, 0x2C, +/* 0001A770 */ 0x00, 0x93, 0x00, 0x12, 0x00, 0x34, 0x00, 0x08, 0x00, 0x59, 0x08, 0x00, 0x80, 0xA7, 0x01, 0x00, +/* 0001A780 */ 0x7F, 0x7C, 0x0B, 0xC3, 0x43, 0x50, 0x13, 0x00, 0xFE, 0x38, 0x02, 0x0F, 0xA2, 0x41, 0xD1, 0x00, +/* 0001A790 */ 0x35, 0xFE, 0xB3, 0x64, 0xFE, 0xB3, 0x64, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0xB3, 0x64, +/* 0001A7A0 */ 0xFE, 0x4C, 0x08, 0xFE, 0x4C, 0x08, 0x10, 0x0B, 0x13, 0x09, 0x8F, 0x84, 0x33, 0x03, 0x03, 0x0F, +/* 0001A7B0 */ 0x07, 0x03, 0x02, 0x15, 0x15, 0x15, 0x15, 0x03, 0x12, 0x13, 0xFE, 0x56, 0x01, 0xFE, 0x22, 0x02, +/* 0001A7C0 */ 0xFE, 0x85, 0x01, 0xFE, 0xB3, 0x01, 0x07, 0x01, 0x01, 0x01, 0x02, 0x06, 0xFE, 0x95, 0x03, 0x01, +/* 0001A7D0 */ 0x03, 0x01, 0x04, 0x01, 0x05, 0x01, 0x00, 0x06, 0xFE, 0xD0, 0x03, 0xFE, 0x52, 0x02, 0x4E, 0x0C, +/* 0001A7E0 */ 0x4E, 0x0D, 0x4E, 0x0E, 0x4E, 0x0F, 0x4E, 0x10, 0x4E, 0x11, 0x8F, 0x01, 0x03, 0x17, 0x00, 0x00, +/* 0001A7F0 */ 0x4A, 0x17, 0x6D, 0x16, 0x17, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x17, 0x5A, 0x01, 0x0B, 0x00, +/* 0001A800 */ 0x00, 0xF4, 0x02, 0x16, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x0C, 0x16, 0x0E, 0x06, +/* 0001A810 */ 0x00, 0x0C, 0x45, 0x00, 0x0C, 0x09, 0x16, 0x02, 0x8F, 0x03, 0x36, 0x17, 0x01, 0x00, 0x4A, 0x17, +/* 0001A820 */ 0x6D, 0x16, 0x17, 0x01, 0x07, 0x03, 0x00, 0x59, 0x00, 0x17, 0x5A, 0x01, 0x0B, 0x01, 0x00, 0x8F, +/* 0001A830 */ 0x01, 0x02, 0x18, 0x02, 0x00, 0x4A, 0x18, 0x5A, 0x02, 0x18, 0x01, 0x00, 0xF4, 0x03, 0x16, 0x16, +/* 0001A840 */ 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, 0x0D, 0x16, 0x0F, 0x06, 0x00, 0x0D, 0x45, 0x00, 0x02, +/* 0001A850 */ 0x09, 0xDB, 0x01, 0x8F, 0x03, 0x36, 0x17, 0x01, 0x00, 0x4A, 0x17, 0x6D, 0x16, 0x17, 0x02, 0x07, +/* 0001A860 */ 0x01, 0x00, 0x59, 0x00, 0x17, 0xF4, 0x01, 0x16, 0x16, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x45, +/* 0001A870 */ 0x0E, 0x16, 0x98, 0x16, 0x0D, 0x03, 0x00, 0x00, 0x77, 0x16, 0x0E, 0x03, 0x98, 0x16, 0x0D, 0x03, +/* 0001A880 */ 0x01, 0x00, 0x77, 0x16, 0x0E, 0x04, 0x98, 0x16, 0x0D, 0x04, 0x02, 0x00, 0x0E, 0x20, 0x00, 0x16, +/* 0001A890 */ 0x98, 0x16, 0x0D, 0x04, 0x03, 0x00, 0x77, 0x16, 0x0E, 0x05, 0x5F, 0x17, 0x0E, 0x06, 0x98, 0x18, +/* 0001A8A0 */ 0x0D, 0x04, 0x04, 0x00, 0x2D, 0x18, 0x05, 0x18, 0x2D, 0x16, 0x17, 0x18, 0x77, 0x16, 0x0E, 0x07, +/* 0001A8B0 */ 0x98, 0x16, 0x0D, 0x06, 0x05, 0x00, 0x0E, 0x20, 0x00, 0x16, 0x98, 0x16, 0x0D, 0x06, 0x06, 0x00, +/* 0001A8C0 */ 0x77, 0x16, 0x0E, 0x08, 0x5F, 0x17, 0x0E, 0x09, 0x98, 0x18, 0x0D, 0x06, 0x07, 0x00, 0x2D, 0x18, +/* 0001A8D0 */ 0x05, 0x18, 0x2D, 0x16, 0x17, 0x18, 0x77, 0x16, 0x0E, 0x0A, 0x98, 0x16, 0x0D, 0x07, 0x08, 0x00, +/* 0001A8E0 */ 0x0E, 0x0A, 0x00, 0x16, 0x98, 0x16, 0x0D, 0x07, 0x09, 0x00, 0x77, 0x16, 0x0E, 0x0B, 0x98, 0x16, +/* 0001A8F0 */ 0x0D, 0x08, 0x0A, 0x00, 0x0E, 0x08, 0x01, 0x16, 0x98, 0x16, 0x0D, 0x08, 0x0B, 0x00, 0x77, 0x16, +/* 0001A900 */ 0x0E, 0x0C, 0x8F, 0x03, 0x36, 0x17, 0x01, 0x00, 0x4A, 0x17, 0x6D, 0x16, 0x17, 0x0D, 0x07, 0x03, +/* 0001A910 */ 0x00, 0x59, 0x00, 0x17, 0x98, 0x18, 0x0D, 0x08, 0x0C, 0x00, 0x5A, 0x01, 0x18, 0x03, 0x00, 0x5A, +/* 0001A920 */ 0x02, 0x05, 0x03, 0x00, 0xF4, 0x03, 0x16, 0x16, 0x0D, 0x00, 0x00, 0x00, 0x03, 0x00, 0x45, 0x0F, +/* 0001A930 */ 0x16, 0x45, 0x10, 0x09, 0xED, 0x00, 0xEE, 0x00, 0xA7, 0x16, 0x0F, 0x0E, 0x00, 0x00, 0x12, 0x03, +/* 0001A940 */ 0x00, 0x10, 0x16, 0x09, 0xB8, 0x00, 0x98, 0x16, 0x0F, 0x10, 0x0D, 0x00, 0x15, 0x03, 0x00, 0x16, +/* 0001A950 */ 0x0A, 0x09, 0x03, 0x00, 0x09, 0xA1, 0x00, 0xA8, 0x16, 0x45, 0x11, 0x16, 0x2D, 0x16, 0x10, 0x03, +/* 0001A960 */ 0x45, 0x11, 0x16, 0xED, 0x01, 0xEE, 0x01, 0xA7, 0x16, 0x0F, 0x0F, 0x01, 0x00, 0x12, 0x03, 0x00, +/* 0001A970 */ 0x11, 0x16, 0x09, 0x1A, 0x00, 0x98, 0x16, 0x0F, 0x11, 0x0E, 0x00, 0xA7, 0x16, 0x16, 0x10, 0x02, +/* 0001A980 */ 0x00, 0x11, 0x03, 0x00, 0x16, 0x03, 0x09, 0x06, 0x00, 0x26, 0x11, 0x11, 0x09, 0xD6, 0xFF, 0xEF, +/* 0001A990 */ 0x01, 0x2D, 0x16, 0x10, 0x03, 0x11, 0x03, 0x00, 0x11, 0x16, 0x09, 0x58, 0x00, 0x45, 0x16, 0x0E, +/* 0001A9A0 */ 0x8F, 0x03, 0x36, 0x18, 0x01, 0x00, 0x4A, 0x18, 0x6D, 0x17, 0x18, 0x11, 0x07, 0x03, 0x00, 0x59, +/* 0001A9B0 */ 0x00, 0x18, 0x8F, 0x03, 0x36, 0x1A, 0x01, 0x00, 0x4A, 0x1A, 0x6D, 0x19, 0x1A, 0x12, 0x07, 0x04, +/* 0001A9C0 */ 0x00, 0x59, 0x00, 0x1A, 0x5A, 0x01, 0x0F, 0x05, 0x00, 0x5A, 0x02, 0x10, 0x05, 0x00, 0x5A, 0x03, +/* 0001A9D0 */ 0x11, 0x05, 0x00, 0xF4, 0x04, 0x19, 0x19, 0x12, 0x00, 0x00, 0x00, 0x05, 0x00, 0x5A, 0x01, 0x19, +/* 0001A9E0 */ 0x04, 0x00, 0x5A, 0x02, 0x05, 0x04, 0x00, 0xF4, 0x03, 0x17, 0x17, 0x11, 0x00, 0x00, 0x00, 0x04, +/* 0001A9F0 */ 0x00, 0x77, 0x17, 0x16, 0x13, 0x09, 0x06, 0x00, 0x26, 0x10, 0x10, 0x09, 0x38, 0xFF, 0xEF, 0x00, +/* 0001AA00 */ 0x8F, 0x01, 0x03, 0x17, 0x00, 0x00, 0x4A, 0x17, 0x6D, 0x16, 0x17, 0x14, 0x07, 0x03, 0x00, 0x59, +/* 0001AA10 */ 0x00, 0x17, 0x5A, 0x01, 0x0B, 0x06, 0x00, 0x5A, 0x02, 0x0E, 0x06, 0x00, 0xF4, 0x03, 0xFF, 0x16, +/* 0001AA20 */ 0x14, 0x00, 0x00, 0x00, 0x06, 0x00, 0x45, 0x00, 0x0E, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, +/* 0001AA30 */ 0xFE, 0x98, 0x01, 0xFE, 0x01, 0x01, 0x69, 0xFE, 0xD1, 0x03, 0xFE, 0x1E, 0x02, 0xFE, 0xD2, 0x03, +/* 0001AA40 */ 0xFE, 0x1E, 0x02, 0xFE, 0x1E, 0x02, 0xFE, 0xD3, 0x03, 0xFE, 0x1E, 0x02, 0xFE, 0x1E, 0x02, 0xFE, +/* 0001AA50 */ 0xD4, 0x03, 0xFE, 0xD5, 0x03, 0xFE, 0x56, 0x01, 0xD1, 0xD1, 0xD1, 0xCC, 0xFE, 0x50, 0x01, 0xFE, +/* 0001AA60 */ 0x96, 0x03, 0xFE, 0x9B, 0x01, 0xFE, 0xD4, 0x64, 0x23, 0x0C, 0x00, 0x00, 0x00, 0x24, 0x00, 0x3C, +/* 0001AA70 */ 0x00, 0x04, 0x00, 0x1E, 0x00, 0x06, 0x00, 0x2A, 0x00, 0x31, 0x00, 0x39, 0x00, 0x04, 0x00, 0x1E, +/* 0001AA80 */ 0x00, 0x06, 0x00, 0x28, 0x00, 0x1F, 0x00, 0x24, 0x00, 0x0A, 0x00, 0x25, 0x00, 0x0A, 0x00, 0x21, +/* 0001AA90 */ 0x00, 0x0A, 0x00, 0x20, 0x00, 0x0A, 0x00, 0x27, 0x00, 0x16, 0x00, 0x37, 0x00, 0x0A, 0x00, 0x20, +/* 0001AAA0 */ 0x00, 0x0A, 0x00, 0x27, 0x00, 0x16, 0x00, 0x37, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x0A, 0x00, 0x34, +/* 0001AAB0 */ 0x00, 0x0A, 0x00, 0x20, 0x00, 0x0A, 0x00, 0x76, 0x00, 0x2F, 0x00, 0x44, 0x00, 0x07, 0x00, 0x0B, +/* 0001AAC0 */ 0x00, 0x0E, 0x00, 0x36, 0x00, 0x0E, 0x00, 0x39, 0x00, 0x03, 0x00, 0x35, 0x00, 0x05, 0x00, 0x20, +/* 0001AAD0 */ 0x00, 0x0B, 0x00, 0x0B, 0x00, 0x22, 0x00, 0x3B, 0x00, 0x08, 0x00, 0x3B, 0x01, 0x0C, 0x00, 0xFC, +/* 0001AAE0 */ 0x00, 0x58, 0x00, 0xCC, 0x00, 0x03, 0x00, 0x0E, 0xFC, 0x08, 0x00, 0x26, 0x04, 0x26, 0x00, 0x33, +/* 0001AAF0 */ 0x00, 0x08, 0x00, 0x14, 0x00, 0x00, 0x7F, 0x4C, 0x00, 0x00, 0x20, 0x10, 0x03, 0x00, 0xFE, 0xF2, +/* 0001AB00 */ 0x01, 0x04, 0xA1, 0x41, 0xC1, 0x00, 0xFE, 0x51, 0x03, 0x33, 0xFE, 0x02, 0x50, 0xFE, 0x02, 0x50, +/* 0001AB10 */ 0x41, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFE, 0x02, 0x50, 0x55, 0x55, 0x02, 0x02, 0x03, 0x05, 0x05, +/* 0001AB20 */ 0x02, 0x01, 0x02, 0x0D, 0xE2, 0x03, 0x00, 0x01, 0x43, 0x01, 0x01, 0x0E, 0x03, 0xA8, 0x00, 0x24, +/* 0001AB30 */ 0x00, 0x0A, 0xFE, 0xAB, 0x03, 0x01, 0xFE, 0x30, 0x50, 0x02, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x00, +/* 0001AB40 */ 0x26, 0x00, 0x00, 0x7F, 0x5C, 0x0A, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0xE4, 0x01, 0x1C, 0xA2, +/* 0001AB50 */ 0x41, 0xC1, 0x00, 0xFE, 0x5B, 0x03, 0x32, 0xFE, 0x1F, 0x4E, 0xFE, 0x1F, 0x4E, 0x01, 0xFE, 0x00, +/* 0001AB60 */ 0x90, 0x06, 0x06, 0xFE, 0x1F, 0x4E, 0xFE, 0xC2, 0x01, 0xFE, 0xC2, 0x01, 0x0B, 0x06, 0x0D, 0x08, +/* 0001AB70 */ 0x39, 0x35, 0x02, 0x01, 0x05, 0x04, 0x04, 0x04, 0x04, 0x04, 0x0C, 0x08, 0x06, 0xFE, 0xA8, 0x03, +/* 0001AB80 */ 0x05, 0xFE, 0xA9, 0x03, 0x06, 0xFE, 0xAA, 0x03, 0xF4, 0x4E, 0x0B, 0x98, 0x0D, 0x06, 0x07, 0x00, +/* 0001AB90 */ 0x00, 0x45, 0x0B, 0x0D, 0xA8, 0x0D, 0x15, 0x03, 0x00, 0x0B, 0x0D, 0x09, 0xD5, 0x00, 0x8F, 0x02, +/* 0001ABA0 */ 0x24, 0x0E, 0x00, 0x00, 0x6D, 0x0D, 0x0E, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0E, 0x5A, 0x01, +/* 0001ABB0 */ 0x0B, 0x00, 0x00, 0xF4, 0x02, 0x0D, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x0B, 0x0D, +/* 0001ABC0 */ 0x8F, 0x02, 0x36, 0x0E, 0x01, 0x00, 0x4A, 0x0E, 0x6D, 0x0D, 0x0E, 0x01, 0x07, 0x02, 0x00, 0x59, +/* 0001ABD0 */ 0x00, 0x0E, 0x5A, 0x01, 0x0B, 0x01, 0x00, 0xF4, 0x02, 0x0D, 0x0D, 0x01, 0x00, 0x00, 0x00, 0x01, +/* 0001ABE0 */ 0x00, 0x0F, 0x0D, 0x00, 0x0D, 0x12, 0x08, 0x00, 0x0B, 0x08, 0x11, 0x03, 0x00, 0x0B, 0x09, 0x09, +/* 0001ABF0 */ 0x5D, 0x00, 0x8F, 0x02, 0x03, 0x0E, 0x02, 0x00, 0x6D, 0x0D, 0x0E, 0x02, 0x07, 0x04, 0x00, 0x59, +/* 0001AC00 */ 0x00, 0x0E, 0x8F, 0x02, 0x0C, 0x0F, 0x03, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, +/* 0001AC10 */ 0x0B, 0x03, 0x00, 0xF0, 0x02, 0x0F, 0x0F, 0x03, 0x00, 0x5A, 0x01, 0x0F, 0x02, 0x00, 0x5A, 0x02, +/* 0001AC20 */ 0x07, 0x02, 0x00, 0x45, 0x0F, 0x03, 0x01, 0x09, 0x01, 0x10, 0x08, 0x2D, 0x0F, 0x0F, 0x10, 0x2D, +/* 0001AC30 */ 0x0F, 0x0F, 0x04, 0x01, 0x09, 0x01, 0x10, 0x09, 0x2D, 0x0F, 0x0F, 0x10, 0x2D, 0x0F, 0x0F, 0x05, +/* 0001AC40 */ 0x5A, 0x03, 0x0F, 0x02, 0x00, 0xF4, 0x04, 0xFF, 0x0D, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x8F, +/* 0001AC50 */ 0x02, 0x36, 0x0E, 0x01, 0x00, 0x4A, 0x0E, 0x6D, 0x0D, 0x0E, 0x03, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 0001AC60 */ 0x0E, 0x5A, 0x01, 0x0B, 0x04, 0x00, 0xF4, 0x02, 0x00, 0x0D, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, +/* 0001AC70 */ 0x09, 0x08, 0x00, 0x45, 0x00, 0x0A, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x23, 0x03, +/* 0001AC80 */ 0xC4, 0xFE, 0xAC, 0x02, 0x26, 0xFE, 0x62, 0x4E, 0x08, 0x02, 0x00, 0x00, 0x00, 0x09, 0x00, 0x27, +/* 0001AC90 */ 0x00, 0x0A, 0x00, 0x27, 0x00, 0x22, 0x00, 0x2E, 0x00, 0x32, 0x00, 0x4C, 0x00, 0x5D, 0x00, 0x77, +/* 0001ACA0 */ 0x00, 0x24, 0x00, 0x2A, 0x00, 0x08, 0x00, 0x15, 0x00, 0x00, 0x7F, 0x5C, 0x0A, 0xC1, 0x03, 0x10, +/* 0001ACB0 */ 0x03, 0x00, 0xFE, 0xB9, 0x01, 0x04, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x50, 0x03, 0x31, 0xFE, 0xB4, +/* 0001ACC0 */ 0x47, 0xFE, 0xB4, 0x47, 0x01, 0xFE, 0x00, 0x90, 0x06, 0x06, 0xFE, 0xB4, 0x47, 0xFE, 0xDD, 0x02, +/* 0001ACD0 */ 0xFE, 0xDD, 0x02, 0x0C, 0x0A, 0x11, 0x09, 0x53, 0x4C, 0x02, 0x01, 0x08, 0x04, 0x06, 0x06, 0x06, +/* 0001ACE0 */ 0x06, 0x10, 0x06, 0xFE, 0xA2, 0x03, 0x06, 0xFE, 0xA3, 0x03, 0x06, 0xFE, 0xA4, 0x03, 0x01, 0xFF, +/* 0001ACF0 */ 0x08, 0x05, 0xFE, 0xA5, 0x03, 0x05, 0xFE, 0xA6, 0x03, 0x05, 0xFE, 0xA7, 0x03, 0xFE, 0x68, 0x01, +/* 0001AD00 */ 0x4E, 0x0F, 0x98, 0x11, 0x0A, 0x0B, 0x00, 0x00, 0x45, 0x0F, 0x11, 0xA8, 0x11, 0x15, 0x03, 0x00, +/* 0001AD10 */ 0x0F, 0x11, 0x09, 0x49, 0x01, 0x0C, 0x03, 0x00, 0x0C, 0x02, 0x09, 0x22, 0x00, 0x8F, 0x02, 0x24, +/* 0001AD20 */ 0x12, 0x00, 0x00, 0x6D, 0x11, 0x12, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x12, 0x5A, 0x01, 0x0F, +/* 0001AD30 */ 0x00, 0x00, 0xF4, 0x02, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x0F, 0x11, 0x0C, +/* 0001AD40 */ 0x03, 0x00, 0x0C, 0x03, 0x09, 0x22, 0x00, 0x8F, 0x02, 0x24, 0x12, 0x00, 0x00, 0x6D, 0x11, 0x12, +/* 0001AD50 */ 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x12, 0x5A, 0x01, 0x0F, 0x01, 0x00, 0xF4, 0x02, 0x11, 0x11, +/* 0001AD60 */ 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, 0x0F, 0x11, 0x0C, 0x03, 0x00, 0x0C, 0x04, 0x09, 0x22, +/* 0001AD70 */ 0x00, 0x8F, 0x02, 0x24, 0x12, 0x00, 0x00, 0x6D, 0x11, 0x12, 0x02, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 0001AD80 */ 0x12, 0x5A, 0x01, 0x0F, 0x02, 0x00, 0xF4, 0x02, 0x11, 0x11, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, +/* 0001AD90 */ 0x45, 0x0F, 0x11, 0xA8, 0x11, 0x15, 0x03, 0x00, 0x0D, 0x11, 0x09, 0xBB, 0x00, 0x8F, 0x02, 0x36, +/* 0001ADA0 */ 0x12, 0x01, 0x00, 0x4A, 0x12, 0x6D, 0x11, 0x12, 0x03, 0x07, 0x03, 0x00, 0x59, 0x00, 0x12, 0x5A, +/* 0001ADB0 */ 0x01, 0x0D, 0x03, 0x00, 0x5A, 0x02, 0x0F, 0x03, 0x00, 0xF4, 0x03, 0x11, 0x11, 0x03, 0x00, 0x00, +/* 0001ADC0 */ 0x00, 0x03, 0x00, 0x0C, 0x03, 0x00, 0x11, 0x05, 0x09, 0x8D, 0x00, 0x8F, 0x02, 0x03, 0x12, 0x02, +/* 0001ADD0 */ 0x00, 0x6D, 0x11, 0x12, 0x04, 0x07, 0x04, 0x00, 0x59, 0x00, 0x12, 0x8F, 0x02, 0x0C, 0x13, 0x03, +/* 0001ADE0 */ 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x06, 0x5A, 0x01, 0x0F, 0x05, 0x00, 0xF0, 0x02, 0x13, 0x13, +/* 0001ADF0 */ 0x05, 0x00, 0x5A, 0x01, 0x13, 0x04, 0x00, 0x8F, 0x02, 0x0C, 0x13, 0x03, 0x00, 0x07, 0x02, 0x00, +/* 0001AE00 */ 0x59, 0x00, 0x06, 0x5A, 0x01, 0x0B, 0x06, 0x00, 0xF0, 0x02, 0x13, 0x13, 0x06, 0x00, 0x5A, 0x02, +/* 0001AE10 */ 0x13, 0x04, 0x00, 0x45, 0x13, 0x07, 0x8F, 0x02, 0x36, 0x15, 0x01, 0x00, 0x4A, 0x15, 0x6D, 0x14, +/* 0001AE20 */ 0x15, 0x05, 0x07, 0x03, 0x00, 0x59, 0x00, 0x15, 0x5A, 0x01, 0x0D, 0x07, 0x00, 0x5A, 0x02, 0x09, +/* 0001AE30 */ 0x07, 0x00, 0xF4, 0x03, 0x14, 0x14, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x01, 0x09, 0x01, 0x15, +/* 0001AE40 */ 0x14, 0x2D, 0x13, 0x13, 0x15, 0x2D, 0x13, 0x13, 0x08, 0x5A, 0x03, 0x13, 0x04, 0x00, 0xF4, 0x04, +/* 0001AE50 */ 0xFF, 0x11, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x45, 0x00, 0x0F, 0x09, 0x08, 0x00, 0x45, 0x00, +/* 0001AE60 */ 0x0E, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x24, 0x03, 0xFE, 0x22, 0x03, 0xFE, 0x23, +/* 0001AE70 */ 0x03, 0xFE, 0x0F, 0x03, 0xFE, 0xAC, 0x02, 0xCC, 0xFE, 0xFC, 0x47, 0x0D, 0x02, 0x00, 0x00, 0x00, +/* 0001AE80 */ 0x09, 0x00, 0x28, 0x00, 0x0A, 0x00, 0x27, 0x00, 0x08, 0x00, 0x29, 0x00, 0x22, 0x00, 0x45, 0x00, +/* 0001AE90 */ 0x08, 0x00, 0x28, 0x00, 0x22, 0x00, 0x3D, 0x00, 0x08, 0x00, 0x28, 0x00, 0x22, 0x00, 0x3D, 0x00, +/* 0001AEA0 */ 0x38, 0x00, 0x53, 0x00, 0x8D, 0x00, 0x84, 0x00, 0x06, 0x00, 0x21, 0x00, 0x08, 0x00, 0x15, 0x00, +/* 0001AEB0 */ 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x07, 0x00, 0xFE, 0xAD, 0x01, 0x08, 0xA2, 0x41, 0xC1, +/* 0001AEC0 */ 0x01, 0xFE, 0x26, 0x03, 0x30, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0xA0, 0x46, 0xFE, 0xA0, 0x46, +/* 0001AED0 */ 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0xA0, 0x46, 0xDF, 0xDF, 0x06, 0x06, 0x0A, 0x04, 0x20, +/* 0001AEE0 */ 0x1C, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x09, 0x01, 0x00, 0x01, 0x02, 0x01, 0x35, 0x01, +/* 0001AEF0 */ 0x01, 0x79, 0x4E, 0x07, 0x4E, 0x08, 0x8F, 0x02, 0x24, 0x0B, 0x00, 0x00, 0x6D, 0x0A, 0x0B, 0x00, +/* 0001AF00 */ 0x07, 0x02, 0x00, 0x59, 0x00, 0x0B, 0x5A, 0x01, 0x06, 0x00, 0x00, 0xF4, 0x02, 0x0A, 0x0A, 0x00, +/* 0001AF10 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x07, 0x0A, 0x13, 0x03, 0x00, 0x07, 0x02, 0x09, 0x06, 0x00, +/* 0001AF20 */ 0x45, 0x00, 0x02, 0x09, 0x43, 0x00, 0x8F, 0x02, 0x36, 0x0B, 0x01, 0x00, 0x4A, 0x0B, 0x6D, 0x0A, +/* 0001AF30 */ 0x0B, 0x01, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0B, 0x5A, 0x01, 0x03, 0x01, 0x00, 0x5A, 0x02, 0x04, +/* 0001AF40 */ 0x01, 0x00, 0xF4, 0x03, 0x0A, 0x0A, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x33, 0x0A, 0x0A, 0x05, +/* 0001AF50 */ 0x45, 0x08, 0x0A, 0x12, 0x03, 0x00, 0x08, 0x07, 0x09, 0x06, 0x00, 0x45, 0x00, 0x08, 0x09, 0x03, +/* 0001AF60 */ 0x00, 0x46, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x25, 0x03, 0x2C, 0xFE, +/* 0001AF70 */ 0xBA, 0x46, 0x06, 0x04, 0x00, 0x00, 0x00, 0x22, 0x00, 0x2F, 0x00, 0x08, 0x00, 0x20, 0x00, 0x06, +/* 0001AF80 */ 0x00, 0x25, 0x00, 0x2D, 0x00, 0x2A, 0x00, 0x16, 0x00, 0x26, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0xC1, +/* 0001AF90 */ 0x03, 0x10, 0x07, 0x00, 0xFE, 0x9D, 0x01, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x25, 0x03, 0x2F, +/* 0001AFA0 */ 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0x09, 0x45, 0xFE, 0x09, 0x45, 0x01, 0xFE, 0x00, 0x90, 0x02, +/* 0001AFB0 */ 0x02, 0xFE, 0x09, 0x45, 0xFE, 0x8C, 0x01, 0xFE, 0x8C, 0x01, 0x08, 0x04, 0x08, 0x06, 0x33, 0x2E, +/* 0001AFC0 */ 0x02, 0x05, 0x04, 0x02, 0x02, 0x02, 0x02, 0x07, 0x08, 0x01, 0x00, 0xC8, 0x4E, 0x05, 0x4E, 0x06, +/* 0001AFD0 */ 0x8F, 0x02, 0x0B, 0x08, 0x00, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x04, 0x00, +/* 0001AFE0 */ 0x00, 0xF0, 0x02, 0x08, 0x08, 0x00, 0x00, 0x45, 0x05, 0x08, 0x8F, 0x02, 0x21, 0x08, 0x01, 0x00, +/* 0001AFF0 */ 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x05, 0x01, 0x00, 0xF0, 0x02, 0x08, 0x08, 0x01, +/* 0001B000 */ 0x00, 0x0E, 0x09, 0x00, 0x08, 0x45, 0x00, 0x03, 0x09, 0x87, 0x00, 0x09, 0x26, 0x00, 0x14, 0x1B, +/* 0001B010 */ 0x00, 0x05, 0x03, 0x8F, 0x02, 0x20, 0x08, 0x02, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x5A, +/* 0001B020 */ 0x01, 0x05, 0x02, 0x00, 0xF0, 0x02, 0x08, 0x08, 0x02, 0x00, 0x0F, 0x06, 0x00, 0x08, 0x45, 0x00, +/* 0001B030 */ 0x05, 0x09, 0x5E, 0x00, 0x8F, 0x02, 0x36, 0x09, 0x03, 0x00, 0x4A, 0x09, 0x6D, 0x08, 0x09, 0x00, +/* 0001B040 */ 0x07, 0x02, 0x00, 0x59, 0x00, 0x09, 0x8F, 0x02, 0x36, 0x0B, 0x03, 0x00, 0x4A, 0x0B, 0x6D, 0x0A, +/* 0001B050 */ 0x0B, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0B, 0x5A, 0x01, 0x05, 0x04, 0x00, 0xF4, 0x02, 0x0A, +/* 0001B060 */ 0x0A, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x5A, 0x01, 0x0A, 0x03, 0x00, 0xF4, 0x02, 0x08, 0x08, +/* 0001B070 */ 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x45, 0x06, 0x08, 0x12, 0x03, 0x00, 0x05, 0x03, 0x09, 0x09, +/* 0001B080 */ 0x00, 0x28, 0x00, 0x06, 0x09, 0x0B, 0x00, 0x09, 0x06, 0x00, 0x45, 0x00, 0x06, 0x09, 0x02, 0x00, +/* 0001B090 */ 0xA8, 0x00, 0x24, 0x00, 0x26, 0x1D, 0xFE, 0x24, 0x45, 0x0A, 0x04, 0x00, 0x00, 0x00, 0x1A, 0x00, +/* 0001B0A0 */ 0x26, 0x00, 0x1B, 0x00, 0x25, 0x00, 0x09, 0x00, 0x1D, 0x00, 0x20, 0x00, 0x39, 0x00, 0x06, 0x00, +/* 0001B0B0 */ 0x2A, 0x00, 0x45, 0x00, 0x30, 0x00, 0x08, 0x00, 0x22, 0x00, 0x09, 0x00, 0x31, 0x00, 0x08, 0x00, +/* 0001B0C0 */ 0x22, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0x01, 0x00, 0x10, 0x07, 0x00, 0xFE, 0x99, 0x01, 0x08, 0xA2, +/* 0001B0D0 */ 0x41, 0xC1, 0x01, 0xFE, 0x24, 0x03, 0x2E, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0xA2, 0x44, 0xFE, +/* 0001B0E0 */ 0xA2, 0x44, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0xA2, 0x44, 0x5C, 0x5C, 0x03, 0x03, 0x05, +/* 0001B0F0 */ 0x03, 0x10, 0x0F, 0x02, 0x01, 0x01, 0x04, 0x08, 0x33, 0xA8, 0x05, 0x15, 0x03, 0x00, 0x03, 0x05, +/* 0001B100 */ 0x09, 0x1D, 0x00, 0x8F, 0x02, 0x08, 0x05, 0x00, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x5A, +/* 0001B110 */ 0x01, 0x03, 0x00, 0x00, 0xF0, 0x02, 0x05, 0x05, 0x00, 0x00, 0x45, 0x00, 0x05, 0x09, 0x05, 0x00, +/* 0001B120 */ 0xA8, 0x05, 0x46, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xC4, 0x44, 0x02, +/* 0001B130 */ 0x00, 0x00, 0x00, 0x00, 0x31, 0x00, 0x39, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0x01, 0x00, 0x10, 0x07, +/* 0001B140 */ 0x00, 0xFE, 0x95, 0x01, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x23, 0x03, 0x2D, 0xFF, 0x01, 0x00, +/* 0001B150 */ 0x40, 0x02, 0xFE, 0x4A, 0x44, 0xFE, 0x4A, 0x44, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0x4A, +/* 0001B160 */ 0x44, 0x4D, 0x4D, 0x03, 0x03, 0x05, 0x03, 0x10, 0x0F, 0x02, 0x01, 0x01, 0x04, 0x08, 0x33, 0xA8, +/* 0001B170 */ 0x05, 0x15, 0x03, 0x00, 0x03, 0x05, 0x09, 0x1D, 0x00, 0x8F, 0x02, 0x0B, 0x05, 0x00, 0x00, 0x07, +/* 0001B180 */ 0x02, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x03, 0x00, 0x00, 0xF0, 0x02, 0x05, 0x05, 0x00, 0x00, +/* 0001B190 */ 0x45, 0x00, 0x05, 0x09, 0x05, 0x00, 0xA9, 0x05, 0x46, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA8, 0x00, +/* 0001B1A0 */ 0x24, 0x00, 0xFE, 0x64, 0x44, 0x02, 0x00, 0x00, 0x00, 0x00, 0x31, 0x00, 0x32, 0x00, 0x00, 0x7F, +/* 0001B1B0 */ 0x5C, 0x08, 0x01, 0x00, 0x10, 0x07, 0x00, 0xFE, 0x91, 0x01, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, +/* 0001B1C0 */ 0x22, 0x03, 0x2C, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0xEC, 0x43, 0xFE, 0xEC, 0x43, 0x01, 0xFE, +/* 0001B1D0 */ 0x00, 0x90, 0x02, 0x02, 0xFE, 0xEC, 0x43, 0x53, 0x53, 0x03, 0x03, 0x05, 0x03, 0x10, 0x0F, 0x02, +/* 0001B1E0 */ 0x01, 0x01, 0x04, 0x08, 0x33, 0xA8, 0x05, 0x15, 0x03, 0x00, 0x03, 0x05, 0x09, 0x1D, 0x00, 0x8F, +/* 0001B1F0 */ 0x02, 0x0C, 0x05, 0x00, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x5A, 0x01, 0x03, 0x00, 0x00, +/* 0001B200 */ 0xF0, 0x02, 0x05, 0x05, 0x00, 0x00, 0x45, 0x00, 0x05, 0x09, 0x05, 0x00, 0xA8, 0x05, 0x46, 0x00, +/* 0001B210 */ 0x05, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x06, 0x44, 0x02, 0x00, 0x00, 0x00, 0x00, +/* 0001B220 */ 0x31, 0x00, 0x38, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x07, 0x00, 0xFE, 0x8A, 0x01, +/* 0001B230 */ 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x21, 0x03, 0x2B, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0x36, +/* 0001B240 */ 0x43, 0xFE, 0x36, 0x43, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0x36, 0x43, 0xAB, 0xAB, 0x04, +/* 0001B250 */ 0x04, 0x06, 0x03, 0x17, 0x16, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x05, 0x07, 0x08, 0x55, +/* 0001B260 */ 0x14, 0x03, 0x00, 0x04, 0x02, 0x09, 0x1A, 0x00, 0x8F, 0x02, 0x03, 0x07, 0x00, 0x00, 0x6D, 0x06, +/* 0001B270 */ 0x07, 0x00, 0x07, 0x01, 0x00, 0x59, 0x00, 0x07, 0xF4, 0x01, 0xFF, 0x06, 0x00, 0x00, 0x00, 0x00, +/* 0001B280 */ 0x00, 0x00, 0xA8, 0x06, 0x15, 0x03, 0x00, 0x04, 0x06, 0x09, 0x1D, 0x00, 0x8F, 0x02, 0x09, 0x06, +/* 0001B290 */ 0x01, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x03, 0x5A, 0x01, 0x04, 0x01, 0x00, 0xF0, 0x02, 0x06, +/* 0001B2A0 */ 0x06, 0x01, 0x00, 0x45, 0x00, 0x06, 0x09, 0x05, 0x00, 0xA8, 0x06, 0x46, 0x00, 0x06, 0x09, 0x02, +/* 0001B2B0 */ 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xAA, 0x02, 0xFE, 0x50, 0x43, 0x04, 0x00, 0x00, 0x00, 0x00, +/* 0001B2C0 */ 0x08, 0x00, 0x22, 0x00, 0x1A, 0x00, 0x36, 0x00, 0x31, 0x00, 0x38, 0x00, 0x00, 0x7E, 0x5D, 0x09, +/* 0001B2D0 */ 0xC1, 0x53, 0x5A, 0x4B, 0x00, 0xFE, 0x4C, 0x01, 0x1A, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x5A, 0x03, +/* 0001B2E0 */ 0x29, 0xFE, 0x6C, 0x39, 0xFE, 0x6C, 0x39, 0x01, 0xFE, 0x00, 0x90, 0x05, 0x05, 0xFE, 0x6C, 0x39, +/* 0001B2F0 */ 0xFE, 0xA5, 0x09, 0xFE, 0xA5, 0x09, 0x05, 0xFE, 0xE0, 0x01, 0xFE, 0x98, 0x03, 0xFE, 0x99, 0x03, +/* 0001B300 */ 0xFE, 0x9A, 0x03, 0xFE, 0x9B, 0x03, 0x10, 0x0B, 0x16, 0x05, 0x7A, 0x76, 0x02, 0x01, 0x08, 0x0A, +/* 0001B310 */ 0x0A, 0x0A, 0x0A, 0x0A, 0x01, 0x02, 0x13, 0x14, 0x15, 0x16, 0x05, 0xFE, 0x9C, 0x03, 0x08, 0x06, +/* 0001B320 */ 0xFE, 0x9D, 0x03, 0x07, 0x05, 0xFE, 0x9E, 0x03, 0x01, 0x02, 0x05, 0xFE, 0x9F, 0x03, 0x01, 0xFF, +/* 0001B330 */ 0x01, 0x00, 0xFE, 0xF6, 0x01, 0x96, 0x02, 0x0D, 0x4E, 0x0F, 0x4E, 0x10, 0x4E, 0x11, 0x4E, 0x12, +/* 0001B340 */ 0x4E, 0x18, 0x96, 0x03, 0x18, 0x4E, 0x18, 0x96, 0x04, 0x18, 0x4E, 0x18, 0x96, 0x05, 0x18, 0x4E, +/* 0001B350 */ 0x18, 0x96, 0x06, 0x18, 0x93, 0x02, 0x18, 0x00, 0x00, 0x5F, 0x18, 0x18, 0x00, 0x45, 0x0F, 0x18, +/* 0001B360 */ 0xA8, 0x18, 0x96, 0x03, 0x18, 0x14, 0x03, 0x00, 0x0F, 0x02, 0x09, 0x24, 0x00, 0x8F, 0x01, 0x09, +/* 0001B370 */ 0x18, 0x01, 0x00, 0x4A, 0x18, 0x07, 0x03, 0x00, 0x59, 0x00, 0x03, 0x5A, 0x01, 0x0B, 0x00, 0x00, +/* 0001B380 */ 0x5A, 0x02, 0x0C, 0x00, 0x00, 0xF0, 0x03, 0x18, 0x18, 0x00, 0x00, 0x96, 0x03, 0x18, 0x09, 0x21, +/* 0001B390 */ 0x00, 0x8F, 0x01, 0x0A, 0x18, 0x02, 0x00, 0x4A, 0x18, 0x07, 0x03, 0x00, 0x59, 0x00, 0x03, 0x5A, +/* 0001B3A0 */ 0x01, 0x0B, 0x01, 0x00, 0x5A, 0x02, 0x0C, 0x01, 0x00, 0xF0, 0x03, 0x18, 0x18, 0x01, 0x00, 0x96, +/* 0001B3B0 */ 0x03, 0x18, 0x93, 0x03, 0x18, 0x03, 0x00, 0x5F, 0x18, 0x18, 0x01, 0x96, 0x04, 0x18, 0x8F, 0x02, +/* 0001B3C0 */ 0x35, 0x18, 0x04, 0x00, 0x4A, 0x18, 0x07, 0x02, 0x00, 0x59, 0x00, 0x03, 0xCE, 0x00, 0x00, 0x00, +/* 0001B3D0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x93, 0x04, 0x1A, 0x05, 0x00, 0x7B, 0x1A, +/* 0001B3E0 */ 0x19, 0x02, 0x5A, 0x01, 0x19, 0x02, 0x00, 0xF0, 0x02, 0x18, 0x18, 0x02, 0x00, 0x96, 0x05, 0x18, +/* 0001B3F0 */ 0x96, 0x06, 0x06, 0x8F, 0x02, 0x36, 0x19, 0x06, 0x00, 0x4A, 0x19, 0x6D, 0x18, 0x19, 0x03, 0x07, +/* 0001B400 */ 0x03, 0x00, 0x59, 0x00, 0x19, 0x5A, 0x01, 0x0E, 0x03, 0x00, 0xD6, 0x00, 0x1A, 0x5A, 0x02, 0x1A, +/* 0001B410 */ 0x03, 0x00, 0xF4, 0x03, 0xFF, 0x18, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x93, 0x06, 0x18, 0x07, +/* 0001B420 */ 0x00, 0xA7, 0x18, 0x18, 0x04, 0x00, 0x00, 0x11, 0x03, 0x00, 0x18, 0x07, 0x09, 0xE2, 0x00, 0x8F, +/* 0001B430 */ 0x02, 0x36, 0x19, 0x06, 0x00, 0x4A, 0x19, 0x6D, 0x18, 0x19, 0x05, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 0001B440 */ 0x19, 0x93, 0x04, 0x1A, 0x05, 0x00, 0x5A, 0x01, 0x1A, 0x04, 0x00, 0x5A, 0x02, 0x08, 0x04, 0x00, +/* 0001B450 */ 0xF4, 0x03, 0x18, 0x18, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x45, 0x10, 0x18, 0x14, 0x03, 0x00, +/* 0001B460 */ 0x10, 0x09, 0x09, 0x14, 0x00, 0x93, 0x04, 0x19, 0x05, 0x00, 0x93, 0x06, 0x1A, 0x07, 0x00, 0x2D, +/* 0001B470 */ 0x18, 0x19, 0x1A, 0x96, 0x04, 0x18, 0x09, 0x71, 0x00, 0x8F, 0x02, 0x36, 0x19, 0x06, 0x00, 0x4A, +/* 0001B480 */ 0x19, 0x6D, 0x18, 0x19, 0x06, 0x07, 0x04, 0x00, 0x59, 0x00, 0x19, 0x93, 0x04, 0x1A, 0x05, 0x00, +/* 0001B490 */ 0x5A, 0x01, 0x1A, 0x05, 0x00, 0x5A, 0x02, 0x0A, 0x05, 0x00, 0x5A, 0x03, 0x10, 0x05, 0x00, 0xF4, +/* 0001B4A0 */ 0x04, 0x18, 0x18, 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, 0x45, 0x11, 0x18, 0x8F, 0x02, 0x36, 0x19, +/* 0001B4B0 */ 0x06, 0x00, 0x4A, 0x19, 0x6D, 0x18, 0x19, 0x07, 0x07, 0x03, 0x00, 0x59, 0x00, 0x19, 0x93, 0x04, +/* 0001B4C0 */ 0x1A, 0x05, 0x00, 0x5A, 0x01, 0x1A, 0x06, 0x00, 0x5A, 0x02, 0x10, 0x06, 0x00, 0xF4, 0x03, 0x18, +/* 0001B4D0 */ 0x18, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x45, 0x12, 0x18, 0x93, 0x06, 0x18, 0x07, 0x00, 0x2D, +/* 0001B4E0 */ 0x18, 0x11, 0x18, 0x2D, 0x18, 0x18, 0x12, 0x96, 0x04, 0x18, 0x8F, 0x02, 0x03, 0x19, 0x08, 0x00, +/* 0001B4F0 */ 0x6D, 0x18, 0x19, 0x08, 0x07, 0x02, 0x00, 0x59, 0x00, 0x19, 0x93, 0x04, 0x1A, 0x05, 0x00, 0x5A, +/* 0001B500 */ 0x01, 0x1A, 0x07, 0x00, 0xF4, 0x02, 0x18, 0x18, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x96, 0x04, +/* 0001B510 */ 0x18, 0x93, 0x05, 0x18, 0x09, 0x00, 0x93, 0x04, 0x19, 0x05, 0x00, 0x77, 0x19, 0x18, 0x09, 0x93, +/* 0001B520 */ 0x05, 0x00, 0x09, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x01, 0x0C, 0x00, 0x00, 0x00, +/* 0001B530 */ 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9D, 0x03, 0x00, 0x00, 0xFE, 0xA0, +/* 0001B540 */ 0x03, 0xFE, 0x0D, 0x02, 0xFE, 0x9D, 0x03, 0x93, 0xD1, 0xFE, 0x0A, 0x03, 0xFE, 0x5E, 0x01, 0xFE, +/* 0001B550 */ 0x5E, 0x01, 0xFE, 0xEE, 0x01, 0xFE, 0x0D, 0x02, 0xFE, 0xC5, 0x39, 0x14, 0x1F, 0x00, 0x00, 0x00, +/* 0001B560 */ 0x0C, 0x00, 0x2F, 0x00, 0x05, 0x00, 0x0F, 0x00, 0x08, 0x00, 0x28, 0x00, 0x24, 0x00, 0x55, 0x00, +/* 0001B570 */ 0x21, 0x00, 0x4C, 0x00, 0x0C, 0x00, 0x24, 0x00, 0x32, 0x00, 0x3A, 0x00, 0x03, 0x00, 0x27, 0x00, +/* 0001B580 */ 0x29, 0x00, 0x56, 0x05, 0x13, 0x00, 0x31, 0x00, 0x2E, 0x00, 0x46, 0x00, 0x08, 0x00, 0x2B, 0x00, +/* 0001B590 */ 0x14, 0x00, 0x48, 0x00, 0x33, 0x00, 0x50, 0x00, 0x2E, 0x00, 0x4E, 0x00, 0x10, 0x00, 0x5C, 0x00, +/* 0001B5A0 */ 0x27, 0x00, 0x4D, 0x00, 0x0E, 0x00, 0x25, 0x00, 0x0A, 0x00, 0x13, 0x00, 0x00, 0xB1, 0xB5, 0x01, +/* 0001B5B0 */ 0x00, 0x7F, 0x5C, 0x0E, 0xC1, 0x43, 0x50, 0x03, 0x00, 0xFE, 0x58, 0x01, 0x29, 0xA2, 0x41, 0xD1, +/* 0001B5C0 */ 0x00, 0x2A, 0xFE, 0x72, 0x3B, 0xFE, 0x72, 0x3B, 0x41, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0x72, +/* 0001B5D0 */ 0x3B, 0xFE, 0x29, 0x05, 0xFE, 0x29, 0x05, 0x0B, 0x08, 0x0F, 0x04, 0x6C, 0x61, 0x03, 0x03, 0x01, +/* 0001B5E0 */ 0x06, 0x08, 0x08, 0x08, 0x08, 0x08, 0x01, 0x0E, 0x0F, 0x01, 0x00, 0x06, 0xFE, 0x47, 0x03, 0x08, +/* 0001B5F0 */ 0x01, 0xFF, 0x06, 0xFE, 0x95, 0x03, 0x06, 0xFE, 0xA1, 0x03, 0xFE, 0xC4, 0x01, 0x4E, 0x09, 0x4E, +/* 0001B600 */ 0x0A, 0x4E, 0x0B, 0x4E, 0x0C, 0x4E, 0x0D, 0x8F, 0x03, 0x03, 0x11, 0x00, 0x00, 0x6D, 0x10, 0x11, +/* 0001B610 */ 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x11, 0x8F, 0x03, 0x03, 0x12, 0x00, 0x00, 0x5F, 0x12, 0x12, +/* 0001B620 */ 0x01, 0x98, 0x12, 0x12, 0x08, 0x00, 0x00, 0x5A, 0x01, 0x12, 0x00, 0x00, 0x8F, 0x01, 0x04, 0x12, +/* 0001B630 */ 0x01, 0x00, 0x4A, 0x12, 0x5A, 0x02, 0x12, 0x00, 0x00, 0xF4, 0x03, 0x10, 0x10, 0x00, 0x00, 0x00, +/* 0001B640 */ 0x00, 0x00, 0x00, 0x45, 0x09, 0x10, 0x98, 0x10, 0x09, 0x02, 0x01, 0x00, 0x45, 0x0A, 0x10, 0x45, +/* 0001B650 */ 0x0B, 0x03, 0x8F, 0x01, 0x03, 0x10, 0x02, 0x00, 0x4A, 0x10, 0x5F, 0x10, 0x10, 0x02, 0x0E, 0xC0, +/* 0001B660 */ 0x00, 0x10, 0x8F, 0x02, 0x0B, 0x10, 0x03, 0x00, 0x4A, 0x10, 0x07, 0x03, 0x00, 0x59, 0x00, 0x04, +/* 0001B670 */ 0x8F, 0x01, 0x03, 0x11, 0x02, 0x00, 0x4A, 0x11, 0x5F, 0x11, 0x11, 0x03, 0x5A, 0x01, 0x11, 0x01, +/* 0001B680 */ 0x00, 0x5A, 0x02, 0x08, 0x01, 0x00, 0xF0, 0x03, 0x10, 0x10, 0x01, 0x00, 0x45, 0x0C, 0x10, 0xA8, +/* 0001B690 */ 0x10, 0x15, 0x03, 0x00, 0x0C, 0x10, 0x09, 0x89, 0x00, 0x15, 0x03, 0x00, 0x0C, 0x03, 0x09, 0x50, +/* 0001B6A0 */ 0x00, 0x8F, 0x03, 0x36, 0x11, 0x04, 0x00, 0x4A, 0x11, 0x6D, 0x10, 0x11, 0x04, 0x07, 0x03, 0x00, +/* 0001B6B0 */ 0x59, 0x00, 0x11, 0x5A, 0x01, 0x09, 0x02, 0x00, 0x5A, 0x02, 0x0C, 0x02, 0x00, 0xF4, 0x03, 0x10, +/* 0001B6C0 */ 0x10, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x15, 0x03, 0x00, 0x10, 0x05, 0x09, 0x1F, 0x00, 0x45, +/* 0001B6D0 */ 0x0A, 0x0C, 0x45, 0x10, 0x06, 0x01, 0x09, 0x01, 0x11, 0x08, 0x2D, 0x10, 0x10, 0x11, 0x2D, 0x10, +/* 0001B6E0 */ 0x10, 0x06, 0x01, 0x09, 0x01, 0x11, 0x0A, 0x2D, 0x10, 0x10, 0x11, 0x45, 0x0B, 0x10, 0x09, 0x31, +/* 0001B6F0 */ 0x00, 0x8F, 0x03, 0x36, 0x11, 0x04, 0x00, 0x4A, 0x11, 0x6D, 0x10, 0x11, 0x05, 0x07, 0x03, 0x00, +/* 0001B700 */ 0x59, 0x00, 0x11, 0x5A, 0x01, 0x09, 0x03, 0x00, 0x5A, 0x02, 0x07, 0x03, 0x00, 0xF4, 0x03, 0x10, +/* 0001B710 */ 0x10, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x15, 0x03, 0x00, 0x10, 0x05, 0x09, 0x03, 0x00, 0x45, +/* 0001B720 */ 0x0A, 0x07, 0x8F, 0x03, 0x36, 0x11, 0x04, 0x00, 0x4A, 0x11, 0x6D, 0x10, 0x11, 0x06, 0x07, 0x03, +/* 0001B730 */ 0x00, 0x59, 0x00, 0x11, 0x8F, 0x01, 0x02, 0x12, 0x05, 0x00, 0x5A, 0x01, 0x12, 0x04, 0x00, 0x5A, +/* 0001B740 */ 0x02, 0x08, 0x04, 0x00, 0xF4, 0x03, 0x10, 0x10, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x0E, 0x4B, +/* 0001B750 */ 0x00, 0x10, 0x8F, 0x01, 0x02, 0x10, 0x05, 0x00, 0x98, 0x10, 0x10, 0x08, 0x02, 0x00, 0x45, 0x0D, +/* 0001B760 */ 0x10, 0x8F, 0x03, 0x36, 0x11, 0x04, 0x00, 0x4A, 0x11, 0x6D, 0x10, 0x11, 0x07, 0x07, 0x03, 0x00, +/* 0001B770 */ 0x59, 0x00, 0x11, 0x5A, 0x01, 0x09, 0x05, 0x00, 0x5A, 0x02, 0x0D, 0x05, 0x00, 0xF4, 0x03, 0x10, +/* 0001B780 */ 0x10, 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, 0x15, 0x03, 0x00, 0x10, 0x05, 0x09, 0x0E, 0x00, 0x15, +/* 0001B790 */ 0x03, 0x00, 0x0D, 0x0A, 0x09, 0x06, 0x00, 0x45, 0x0A, 0x0D, 0x45, 0x0B, 0x03, 0x8F, 0x01, 0x05, +/* 0001B7A0 */ 0x10, 0x06, 0x00, 0x4A, 0x10, 0x9D, 0x0A, 0x10, 0x08, 0x00, 0x00, 0x8F, 0x01, 0x06, 0x11, 0x07, +/* 0001B7B0 */ 0x00, 0x4A, 0x11, 0x2D, 0x10, 0x11, 0x0B, 0x01, 0x43, 0x01, 0x01, 0x06, 0x10, 0xA8, 0x00, 0x24, +/* 0001B7C0 */ 0x00, 0xFE, 0x00, 0x02, 0xFE, 0x29, 0x02, 0xFE, 0x97, 0x03, 0xFE, 0x97, 0x03, 0xFE, 0x0F, 0x03, +/* 0001B7D0 */ 0xFE, 0x0F, 0x03, 0xB7, 0xFE, 0x0F, 0x03, 0xFE, 0x8F, 0x3B, 0x15, 0x0A, 0x00, 0x00, 0x00, 0x3F, +/* 0001B7E0 */ 0x00, 0x65, 0x00, 0x09, 0x00, 0x2A, 0x00, 0x03, 0x00, 0x31, 0x00, 0x10, 0x00, 0x23, 0x00, 0x2D, +/* 0001B7F0 */ 0x00, 0x50, 0x00, 0x0A, 0x00, 0x38, 0x00, 0x08, 0x00, 0x35, 0x00, 0x2E, 0x00, 0x58, 0x00, 0x03, +/* 0001B800 */ 0x00, 0x34, 0x00, 0x1F, 0x00, 0x66, 0x00, 0x2E, 0x00, 0x4C, 0x00, 0x03, 0x00, 0x53, 0x00, 0x30, +/* 0001B810 */ 0x00, 0x36, 0x00, 0x0F, 0x00, 0x33, 0x00, 0x2E, 0x00, 0x4E, 0x00, 0x08, 0x00, 0x36, 0x00, 0x03, +/* 0001B820 */ 0x00, 0x2E, 0x00, 0x03, 0x00, 0x64, 0x00, 0x0E, 0x00, 0x21, 0x00, 0x14, 0x00, 0x3A, 0x00, 0x00, +/* 0001B830 */ 0x7F, 0x7C, 0x09, 0xC3, 0x43, 0x50, 0x13, 0x00, 0xFE, 0x1C, 0x01, 0x22, 0xA2, 0x41, 0xC1, 0x00, +/* 0001B840 */ 0xFE, 0x59, 0x03, 0x28, 0xFE, 0x27, 0x32, 0xFE, 0x27, 0x32, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, +/* 0001B850 */ 0xFE, 0x27, 0x32, 0xFE, 0x1E, 0x04, 0xFE, 0x1E, 0x04, 0x11, 0x0B, 0x16, 0x05, 0x64, 0x52, 0x23, +/* 0001B860 */ 0x02, 0x01, 0x04, 0x01, 0x01, 0x05, 0x05, 0x05, 0x05, 0x02, 0x15, 0x16, 0x6A, 0xEA, 0x06, 0xFE, +/* 0001B870 */ 0x95, 0x03, 0x01, 0xFF, 0x01, 0x04, 0x0C, 0x01, 0x02, 0x0B, 0x01, 0x01, 0x06, 0xFE, 0x47, 0x03, +/* 0001B880 */ 0x01, 0x03, 0xFE, 0x73, 0x01, 0x4E, 0x0D, 0x4E, 0x0E, 0x4E, 0x0F, 0x4E, 0x10, 0x4E, 0x11, 0x4E, +/* 0001B890 */ 0x12, 0x4E, 0x13, 0x4E, 0x14, 0xA7, 0x18, 0x0B, 0x00, 0x00, 0x00, 0x45, 0x0D, 0x18, 0x8F, 0x02, +/* 0001B8A0 */ 0x36, 0x19, 0x00, 0x00, 0x4A, 0x19, 0x6D, 0x18, 0x19, 0x01, 0x07, 0x03, 0x00, 0x59, 0x00, 0x19, +/* 0001B8B0 */ 0x5A, 0x01, 0x0B, 0x00, 0x00, 0x45, 0x1A, 0x02, 0x01, 0x09, 0x01, 0x1B, 0x0C, 0x2D, 0x1A, 0x1A, +/* 0001B8C0 */ 0x1B, 0x2D, 0x1A, 0x1A, 0x02, 0x5A, 0x02, 0x1A, 0x00, 0x00, 0xF4, 0x03, 0x18, 0x18, 0x01, 0x00, +/* 0001B8D0 */ 0x00, 0x00, 0x00, 0x00, 0x45, 0x0E, 0x18, 0x15, 0x03, 0x00, 0x0E, 0x03, 0x09, 0xBE, 0x00, 0x2D, +/* 0001B8E0 */ 0x18, 0x0E, 0x04, 0x45, 0x0F, 0x18, 0x45, 0x10, 0x0F, 0x45, 0x11, 0x0F, 0x45, 0x12, 0x05, 0xED, +/* 0001B8F0 */ 0x00, 0xEE, 0x00, 0x0F, 0x76, 0x00, 0x12, 0x8F, 0x02, 0x36, 0x19, 0x00, 0x00, 0x4A, 0x19, 0x6D, +/* 0001B900 */ 0x18, 0x19, 0x02, 0x07, 0x04, 0x00, 0x59, 0x00, 0x19, 0x5A, 0x01, 0x0B, 0x01, 0x00, 0x5A, 0x02, +/* 0001B910 */ 0x02, 0x01, 0x00, 0x5A, 0x03, 0x11, 0x01, 0x00, 0xF4, 0x04, 0x18, 0x18, 0x02, 0x00, 0x00, 0x00, +/* 0001B920 */ 0x01, 0x00, 0x45, 0x13, 0x18, 0x14, 0x03, 0x00, 0x13, 0x03, 0x09, 0x0A, 0x00, 0x33, 0x19, 0x0D, +/* 0001B930 */ 0x11, 0x45, 0x18, 0x19, 0x09, 0x07, 0x00, 0x33, 0x19, 0x13, 0x11, 0x46, 0x18, 0x19, 0x45, 0x14, +/* 0001B940 */ 0x18, 0x14, 0x03, 0x00, 0x14, 0x06, 0x09, 0x06, 0x00, 0x45, 0x12, 0x07, 0x09, 0x1B, 0x00, 0x14, +/* 0001B950 */ 0x03, 0x00, 0x13, 0x03, 0x09, 0x09, 0x00, 0x45, 0x10, 0x0D, 0x45, 0x12, 0x07, 0x09, 0x0A, 0x00, +/* 0001B960 */ 0x45, 0x10, 0x13, 0x2D, 0x18, 0x13, 0x08, 0x45, 0x11, 0x18, 0x09, 0x84, 0xFF, 0xEF, 0x00, 0x8F, +/* 0001B970 */ 0x02, 0x36, 0x19, 0x00, 0x00, 0x4A, 0x19, 0x6D, 0x18, 0x19, 0x03, 0x07, 0x04, 0x00, 0x59, 0x00, +/* 0001B980 */ 0x19, 0x5A, 0x01, 0x0B, 0x02, 0x00, 0x5A, 0x02, 0x0F, 0x02, 0x00, 0x5A, 0x03, 0x10, 0x02, 0x00, +/* 0001B990 */ 0xF4, 0x04, 0x00, 0x18, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x09, 0x59, 0x00, 0x8F, 0x02, 0x36, +/* 0001B9A0 */ 0x19, 0x00, 0x00, 0x4A, 0x19, 0x6D, 0x18, 0x19, 0x04, 0x07, 0x03, 0x00, 0x59, 0x00, 0x19, 0x5A, +/* 0001B9B0 */ 0x01, 0x0B, 0x03, 0x00, 0x45, 0x1A, 0x02, 0x01, 0x09, 0x01, 0x1B, 0x0C, 0x2D, 0x1A, 0x1A, 0x1B, +/* 0001B9C0 */ 0x5A, 0x02, 0x1A, 0x03, 0x00, 0xF4, 0x03, 0x18, 0x18, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x45, +/* 0001B9D0 */ 0x0E, 0x18, 0x15, 0x03, 0x00, 0x0E, 0x03, 0x09, 0x15, 0x00, 0x2D, 0x18, 0x0E, 0x0A, 0x14, 0x03, +/* 0001B9E0 */ 0x00, 0x18, 0x0D, 0x09, 0x09, 0x00, 0x45, 0x00, 0x09, 0x09, 0x0A, 0x00, 0x09, 0x05, 0x00, 0xA8, +/* 0001B9F0 */ 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xD1, 0xFE, 0x0A, 0x03, 0xFE, 0x0A, 0x03, 0xFE, +/* 0001BA00 */ 0x5E, 0x01, 0xFE, 0x0A, 0x03, 0xFE, 0x4B, 0x32, 0x17, 0x10, 0x00, 0x00, 0x00, 0x09, 0x00, 0x51, +/* 0001BA10 */ 0x00, 0x39, 0x00, 0x3A, 0x00, 0x08, 0x00, 0x1E, 0x00, 0x07, 0x00, 0x23, 0x00, 0x03, 0x00, 0x1D, +/* 0001BA20 */ 0x00, 0x03, 0x00, 0x1B, 0x00, 0x07, 0x00, 0x25, 0x00, 0x04, 0x00, 0x19, 0x00, 0x2E, 0x00, 0x3E, +/* 0001BA30 */ 0x00, 0x1C, 0x00, 0x39, 0x00, 0x08, 0x00, 0x25, 0x00, 0x06, 0x00, 0x24, 0x00, 0x08, 0x00, 0x24, +/* 0001BA40 */ 0x00, 0x03, 0x00, 0x20, 0x00, 0x06, 0x00, 0x3A, 0x00, 0x03, 0x00, 0x1D, 0x00, 0x0C, 0x00, 0x38, +/* 0001BA50 */ 0x00, 0x2E, 0x00, 0x75, 0x00, 0x35, 0x00, 0x35, 0x00, 0x14, 0x00, 0x32, 0x00, 0x09, 0x00, 0x28, +/* 0001BA60 */ 0x00, 0x07, 0x00, 0x20, 0x00, 0x00, 0x7F, 0x7C, 0x0B, 0xC3, 0x43, 0x50, 0x13, 0x00, 0xFB, 0x1A, +/* 0001BA70 */ 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x57, 0x03, 0x27, 0xFE, 0x85, 0x2D, 0xFE, 0x85, 0x2D, 0x01, 0xFE, +/* 0001BA80 */ 0x00, 0x90, 0x03, 0x03, 0xFE, 0x85, 0x2D, 0xFE, 0x06, 0x03, 0xFE, 0x06, 0x03, 0x0B, 0x06, 0x0D, +/* 0001BA90 */ 0x04, 0x40, 0x3A, 0x29, 0x02, 0x01, 0x02, 0x04, 0x04, 0x01, 0x08, 0x08, 0x08, 0x08, 0x02, 0x0C, +/* 0001BAA0 */ 0x0D, 0x2A, 0xC6, 0x01, 0x00, 0x01, 0x01, 0x08, 0x07, 0xE8, 0x4E, 0x08, 0x4E, 0x09, 0x4E, 0x0A, +/* 0001BAB0 */ 0x4E, 0x0B, 0x8F, 0x02, 0x36, 0x10, 0x00, 0x00, 0x4A, 0x10, 0x6D, 0x0F, 0x10, 0x00, 0x07, 0x01, +/* 0001BAC0 */ 0x00, 0x59, 0x00, 0x10, 0xF4, 0x01, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x08, +/* 0001BAD0 */ 0x0F, 0x45, 0x09, 0x02, 0xED, 0x00, 0xEE, 0x00, 0xA7, 0x0F, 0x07, 0x01, 0x00, 0x00, 0x12, 0x03, +/* 0001BAE0 */ 0x00, 0x09, 0x0F, 0x09, 0x88, 0x00, 0x8F, 0x01, 0x0F, 0x0F, 0x01, 0x00, 0x4A, 0x0F, 0x07, 0x02, +/* 0001BAF0 */ 0x00, 0x59, 0x00, 0x04, 0x98, 0x10, 0x07, 0x09, 0x00, 0x00, 0x5A, 0x01, 0x10, 0x01, 0x00, 0xF0, +/* 0001BB00 */ 0x02, 0x0F, 0x0F, 0x01, 0x00, 0x45, 0x0A, 0x0F, 0x14, 0x03, 0x00, 0x0A, 0x05, 0x09, 0x03, 0x00, +/* 0001BB10 */ 0x09, 0x55, 0x00, 0x8F, 0x01, 0x08, 0x0F, 0x02, 0x00, 0x4A, 0x0F, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 0001BB20 */ 0x04, 0x5A, 0x01, 0x06, 0x02, 0x00, 0x5F, 0x10, 0x0A, 0x02, 0x5A, 0x02, 0x10, 0x02, 0x00, 0xF0, +/* 0001BB30 */ 0x03, 0x0F, 0x0F, 0x02, 0x00, 0x45, 0x0B, 0x0F, 0xA8, 0x0F, 0x15, 0x03, 0x00, 0x0B, 0x0F, 0x09, +/* 0001BB40 */ 0x26, 0x00, 0x77, 0x0B, 0x08, 0x03, 0x98, 0x0F, 0x07, 0x09, 0x01, 0x00, 0x5F, 0x10, 0x0A, 0x04, +/* 0001BB50 */ 0x15, 0x03, 0x00, 0x0F, 0x10, 0x09, 0x08, 0x00, 0x5F, 0x0F, 0x0A, 0x05, 0x77, 0x0F, 0x08, 0x06, +/* 0001BB60 */ 0x45, 0x00, 0x08, 0xEF, 0x00, 0x09, 0x28, 0x00, 0x26, 0x09, 0x09, 0x09, 0x68, 0xFF, 0xEF, 0x00, +/* 0001BB70 */ 0x8F, 0x01, 0x05, 0x0F, 0x03, 0x00, 0x4A, 0x0F, 0x07, 0x01, 0x00, 0x59, 0x00, 0x04, 0xF0, 0x01, +/* 0001BB80 */ 0x0F, 0x0F, 0x03, 0x00, 0x77, 0x0F, 0x08, 0x07, 0x45, 0x00, 0x08, 0x09, 0x02, 0x00, 0xA8, 0x00, +/* 0001BB90 */ 0x24, 0x00, 0x69, 0xD1, 0xFE, 0x1E, 0x02, 0xFE, 0x0D, 0x02, 0xFE, 0x1E, 0x02, 0xFE, 0x96, 0x03, +/* 0001BBA0 */ 0xFE, 0x97, 0x03, 0xFE, 0x0D, 0x02, 0xFE, 0xBE, 0x2D, 0x10, 0x08, 0x00, 0x00, 0x00, 0x1F, 0x00, +/* 0001BBB0 */ 0x28, 0x00, 0x07, 0x00, 0x0B, 0x00, 0x0E, 0x00, 0x30, 0x00, 0x22, 0x00, 0x45, 0x00, 0x08, 0x00, +/* 0001BBC0 */ 0x2E, 0x00, 0x03, 0x00, 0x25, 0x00, 0x25, 0x00, 0x60, 0x00, 0x0A, 0x00, 0x35, 0x00, 0x04, 0x00, +/* 0001BBD0 */ 0x31, 0x00, 0x12, 0x00, 0x46, 0x00, 0x08, 0x00, 0x56, 0x00, 0x08, 0x00, 0xF3, 0xFD, 0x08, 0x00, +/* 0001BBE0 */ 0x3D, 0x02, 0x18, 0x00, 0x2C, 0x00, 0x08, 0x00, 0x13, 0x00, 0x00, 0x7F, 0x7C, 0x0B, 0xC3, 0x43, +/* 0001BBF0 */ 0x50, 0x13, 0x00, 0xD0, 0x20, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x56, 0x03, 0x26, 0xFE, 0xCC, 0x27, +/* 0001BC00 */ 0xFE, 0xCC, 0x27, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, 0xCC, 0x27, 0xFE, 0x55, 0x04, 0xFE, +/* 0001BC10 */ 0x55, 0x04, 0x0B, 0x09, 0x10, 0x05, 0x41, 0x3A, 0x33, 0x02, 0x01, 0x02, 0x02, 0x01, 0x02, 0x02, +/* 0001BC20 */ 0x02, 0x02, 0x02, 0x02, 0x0F, 0x10, 0x1D, 0xD9, 0x4E, 0x76, 0x06, 0xFE, 0x95, 0x03, 0x0B, 0x08, +/* 0001BC30 */ 0x01, 0xFF, 0x01, 0x01, 0x01, 0x00, 0x01, 0x02, 0xDD, 0x4E, 0x0B, 0x4E, 0x0C, 0x4E, 0x0D, 0x4E, +/* 0001BC40 */ 0x0E, 0xA8, 0x12, 0x14, 0x03, 0x00, 0x0A, 0x12, 0x09, 0x05, 0x00, 0xA8, 0x00, 0x09, 0xC4, 0x00, +/* 0001BC50 */ 0x45, 0x0B, 0x0A, 0x45, 0x0C, 0x02, 0xED, 0x00, 0xEE, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x04, +/* 0001BC60 */ 0x5A, 0x01, 0x0B, 0x00, 0x00, 0xF0, 0x02, 0x12, 0x09, 0x00, 0x00, 0x0E, 0x08, 0x00, 0x12, 0x45, +/* 0001BC70 */ 0x00, 0x0B, 0xEF, 0x00, 0x09, 0x9D, 0x00, 0x45, 0x0D, 0x05, 0xA7, 0x12, 0x0B, 0x00, 0x00, 0x00, +/* 0001BC80 */ 0x33, 0x12, 0x12, 0x06, 0x45, 0x0E, 0x12, 0xED, 0x01, 0xEE, 0x01, 0x10, 0x03, 0x00, 0x0E, 0x07, +/* 0001BC90 */ 0x09, 0x1A, 0x00, 0x98, 0x12, 0x0B, 0x0E, 0x00, 0x00, 0x14, 0x03, 0x00, 0x12, 0x0C, 0x09, 0x06, +/* 0001BCA0 */ 0x00, 0x45, 0x0D, 0x0E, 0x09, 0x06, 0x00, 0x27, 0x0E, 0x0E, 0x09, 0xDC, 0xFF, 0xEF, 0x01, 0x14, +/* 0001BCB0 */ 0x03, 0x00, 0x0D, 0x05, 0x09, 0x0A, 0x00, 0xA8, 0x00, 0xEF, 0x00, 0x09, 0x56, 0x00, 0x09, 0x1E, +/* 0001BCC0 */ 0x00, 0x10, 0x03, 0x00, 0x0D, 0x08, 0x09, 0x16, 0x00, 0x33, 0x12, 0x0D, 0x08, 0x98, 0x12, 0x0B, +/* 0001BCD0 */ 0x12, 0x01, 0x00, 0x14, 0x03, 0x00, 0x12, 0x0C, 0x09, 0x04, 0x00, 0x33, 0x0D, 0x0D, 0x08, 0x8F, +/* 0001BCE0 */ 0x02, 0x36, 0x13, 0x00, 0x00, 0x4A, 0x13, 0x6D, 0x12, 0x13, 0x01, 0x07, 0x04, 0x00, 0x59, 0x00, +/* 0001BCF0 */ 0x13, 0x5A, 0x01, 0x0B, 0x01, 0x00, 0x5A, 0x02, 0x07, 0x01, 0x00, 0x5A, 0x03, 0x0D, 0x01, 0x00, +/* 0001BD00 */ 0xF4, 0x04, 0x12, 0x12, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, 0x0B, 0x12, 0x09, 0x48, 0xFF, +/* 0001BD10 */ 0xEF, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xD1, 0xFE, 0x5E, 0x01, 0xFE, 0xFB, 0x27, 0x13, 0x08, 0x00, +/* 0001BD20 */ 0x00, 0x00, 0x0A, 0x00, 0x28, 0x00, 0x05, 0x00, 0x25, 0x00, 0x03, 0x00, 0x20, 0x00, 0x07, 0x00, +/* 0001BD30 */ 0x37, 0x00, 0x15, 0x00, 0x34, 0x00, 0x08, 0x00, 0x2D, 0x00, 0x03, 0x00, 0x1F, 0x00, 0x11, 0x00, +/* 0001BD40 */ 0x1E, 0x00, 0x08, 0x00, 0x1F, 0x00, 0x0E, 0x00, 0x33, 0x00, 0x03, 0x00, 0x1D, 0x00, 0x03, 0x00, +/* 0001BD50 */ 0x99, 0xFF, 0x08, 0x00, 0x9B, 0x00, 0x08, 0x00, 0x22, 0x00, 0x0A, 0x00, 0x25, 0x00, 0x1A, 0x00, +/* 0001BD60 */ 0x9A, 0x01, 0x04, 0x00, 0x25, 0x00, 0x35, 0x00, 0x3A, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x03, +/* 0001BD70 */ 0x10, 0x03, 0x00, 0xBE, 0x2A, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x55, 0x03, 0x25, 0xFE, 0x21, 0x25, +/* 0001BD80 */ 0xFE, 0x21, 0x25, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, 0x21, 0x25, 0xDF, 0xDF, 0x06, 0x03, +/* 0001BD90 */ 0x07, 0x03, 0x12, 0x10, 0x02, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x06, 0x06, 0xFE, 0x94, 0x03, +/* 0001BDA0 */ 0x3F, 0x4E, 0x05, 0x5F, 0x07, 0x03, 0x00, 0x45, 0x05, 0x07, 0x2A, 0x07, 0x05, 0x15, 0x03, 0x00, +/* 0001BDB0 */ 0x07, 0x02, 0x09, 0x03, 0x00, 0x45, 0x05, 0x04, 0x8F, 0x02, 0x36, 0x08, 0x00, 0x00, 0x4A, 0x08, +/* 0001BDC0 */ 0x6D, 0x07, 0x08, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x08, 0x5A, 0x01, 0x05, 0x00, 0x00, 0xF4, +/* 0001BDD0 */ 0x02, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, +/* 0001BDE0 */ 0xFE, 0x24, 0x01, 0x69, 0xFE, 0x59, 0x25, 0x05, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x2B, 0x00, +/* 0001BDF0 */ 0x0B, 0x00, 0x2D, 0x00, 0x03, 0x00, 0x32, 0x00, 0x26, 0x00, 0x1C, 0x00, 0x00, 0x7F, 0x5C, 0x08, +/* 0001BE00 */ 0xC1, 0x03, 0x10, 0x03, 0x00, 0xBA, 0x1F, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x54, 0x03, 0x24, 0xFE, +/* 0001BE10 */ 0x9D, 0x24, 0xFE, 0x9D, 0x24, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, 0x9D, 0x24, 0x58, 0x58, +/* 0001BE20 */ 0x05, 0x03, 0x06, 0x05, 0x0C, 0x0C, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x05, 0x0C, 0x30, +/* 0001BE30 */ 0x8F, 0x02, 0x03, 0x07, 0x00, 0x00, 0x6D, 0x06, 0x07, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x07, +/* 0001BE40 */ 0x5A, 0x01, 0x04, 0x00, 0x00, 0x5A, 0x02, 0x03, 0x00, 0x00, 0x5A, 0x03, 0x02, 0x00, 0x00, 0xF4, +/* 0001BE50 */ 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, +/* 0001BE60 */ 0xFE, 0xBD, 0x02, 0xFE, 0xBA, 0x24, 0x02, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x3A, 0x00, 0x00, +/* 0001BE70 */ 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xB6, 0x1C, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xF0, +/* 0001BE80 */ 0x02, 0x23, 0xFE, 0x2A, 0x24, 0xFE, 0x2A, 0x24, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, 0x2A, +/* 0001BE90 */ 0x24, 0x51, 0x51, 0x05, 0x02, 0x05, 0x04, 0x0B, 0x0B, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, +/* 0001BEA0 */ 0x04, 0x2B, 0x8F, 0x02, 0x03, 0x06, 0x00, 0x00, 0x6D, 0x05, 0x06, 0x00, 0x07, 0x03, 0x00, 0x59, +/* 0001BEB0 */ 0x00, 0x06, 0x5A, 0x01, 0x03, 0x00, 0x00, 0x5A, 0x02, 0x02, 0x00, 0x00, 0xF4, 0x03, 0x00, 0x05, +/* 0001BEC0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xBD, 0x02, +/* 0001BED0 */ 0xFE, 0x47, 0x24, 0x02, 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x33, 0x00, 0x00, 0x7F, 0x4C, 0x00, +/* 0001BEE0 */ 0xC0, 0x03, 0x00, 0x03, 0x00, 0xB0, 0x1C, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xEF, 0x02, 0x22, 0xFE, +/* 0001BEF0 */ 0x90, 0x23, 0xFE, 0x90, 0x23, 0x41, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0x90, 0x23, 0x7B, 0x7B, +/* 0001BF00 */ 0x02, 0x04, 0x05, 0x09, 0x09, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x1C, 0x00, 0x0A, 0x80, 0x03, +/* 0001BF10 */ 0x07, 0x00, 0x0A, 0x80, 0x1B, 0x5F, 0x05, 0x04, 0x00, 0x14, 0x0C, 0x00, 0x05, 0x02, 0x5F, 0x05, +/* 0001BF20 */ 0x04, 0x01, 0x14, 0x03, 0x00, 0x05, 0x03, 0x09, 0x02, 0x00, 0x23, 0x04, 0xA8, 0x00, 0x24, 0x00, +/* 0001BF30 */ 0xFE, 0x0C, 0x01, 0xFE, 0x0C, 0x01, 0xFE, 0xA8, 0x23, 0x03, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, +/* 0001BF40 */ 0x4A, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x03, 0x00, 0x9E, +/* 0001BF50 */ 0x1D, 0xA0, 0x41, 0xC1, 0x00, 0xFE, 0x53, 0x03, 0x21, 0xFE, 0x43, 0x21, 0xFE, 0x43, 0x21, 0x01, +/* 0001BF60 */ 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFE, 0x43, 0x21, 0xFE, 0xC9, 0x01, 0xFE, 0xC9, 0x01, 0x04, 0x03, +/* 0001BF70 */ 0x05, 0x02, 0x1A, 0x19, 0x02, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x04, 0x05, 0xFE, 0x93, 0x03, +/* 0001BF80 */ 0x66, 0x4E, 0x03, 0x8F, 0x01, 0x04, 0x05, 0x00, 0x00, 0x4A, 0x05, 0x0E, 0x19, 0x00, 0x05, 0x8F, +/* 0001BF90 */ 0x02, 0x03, 0x05, 0x01, 0x00, 0x5F, 0x05, 0x05, 0x00, 0x0E, 0x0B, 0x00, 0x05, 0x8F, 0x01, 0x04, +/* 0001BFA0 */ 0x00, 0x00, 0x00, 0x4A, 0x00, 0x09, 0x3D, 0x00, 0x8F, 0x02, 0x03, 0x06, 0x01, 0x00, 0x6D, 0x05, +/* 0001BFB0 */ 0x06, 0x01, 0x07, 0x01, 0x00, 0x59, 0x00, 0x06, 0xF4, 0x01, 0x05, 0x05, 0x01, 0x00, 0x00, 0x00, +/* 0001BFC0 */ 0x00, 0x00, 0x45, 0x03, 0x05, 0x0F, 0x09, 0x00, 0x03, 0x01, 0x43, 0x01, 0x01, 0x04, 0x02, 0x09, +/* 0001BFD0 */ 0x06, 0x00, 0x01, 0x43, 0x01, 0x01, 0x04, 0x03, 0x8F, 0x01, 0x04, 0x00, 0x00, 0x00, 0x4A, 0x00, +/* 0001BFE0 */ 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x4D, 0x03, 0xFE, 0xF5, 0x01, 0xFE, 0x59, 0x21, +/* 0001BFF0 */ 0x08, 0x02, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x39, 0x00, 0x0B, 0x00, 0x2B, 0x00, 0x1D, 0x00, 0x34, +/* 0001C000 */ 0x00, 0x04, 0x00, 0x9C, 0x00, 0x09, 0x00, 0x35, 0x00, 0x06, 0x00, 0x2D, 0x00, 0x0D, 0x00, 0x1C, +/* 0001C010 */ 0x00, 0x00, 0xFF, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x07, 0x00, 0x92, 0x08, 0xA2, 0x41, 0xC1, 0x01, +/* 0001C020 */ 0xFE, 0x92, 0x03, 0x20, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0xFA, 0x1D, 0xFE, 0xFA, 0x1D, 0x01, +/* 0001C030 */ 0xFE, 0x00, 0x90, 0x04, 0x04, 0xFE, 0xFA, 0x1D, 0x74, 0x74, 0x02, 0x06, 0x03, 0x07, 0x06, 0x0E, +/* 0001C040 */ 0x0E, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x06, 0x08, 0x37, 0x8F, 0x01, 0x06, 0x07, 0x00, +/* 0001C050 */ 0x00, 0x07, 0x05, 0x00, 0x59, 0x00, 0x02, 0x8F, 0x01, 0x03, 0x08, 0x01, 0x00, 0x5F, 0x08, 0x08, +/* 0001C060 */ 0x00, 0x5A, 0x01, 0x08, 0x00, 0x00, 0x5A, 0x02, 0x03, 0x00, 0x00, 0x5A, 0x03, 0x04, 0x00, 0x00, +/* 0001C070 */ 0x5A, 0x04, 0x05, 0x00, 0x00, 0xF0, 0x05, 0x00, 0x07, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, +/* 0001C080 */ 0x24, 0x00, 0xFE, 0x9D, 0x02, 0xFE, 0x14, 0x1E, 0x02, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x59, +/* 0001C090 */ 0x00, 0x00, 0xFF, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x07, 0x00, 0x91, 0x08, 0xA2, 0x41, 0xC1, 0x01, +/* 0001C0A0 */ 0xFE, 0x91, 0x03, 0x1F, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0x8A, 0x1D, 0xFE, 0x8A, 0x1D, 0x01, +/* 0001C0B0 */ 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, 0x8A, 0x1D, 0x66, 0x66, 0x02, 0x05, 0x03, 0x06, 0x05, 0x0D, +/* 0001C0C0 */ 0x0D, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x05, 0x08, 0x32, 0x8F, 0x01, 0x06, 0x06, 0x00, +/* 0001C0D0 */ 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x8F, 0x01, 0x03, 0x07, 0x01, 0x00, 0x5F, 0x07, 0x07, +/* 0001C0E0 */ 0x00, 0x5A, 0x01, 0x07, 0x00, 0x00, 0x5A, 0x02, 0x03, 0x00, 0x00, 0x5A, 0x03, 0x04, 0x00, 0x00, +/* 0001C0F0 */ 0xF0, 0x04, 0x00, 0x06, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x9C, 0x02, +/* 0001C100 */ 0xFE, 0x9D, 0x1D, 0x02, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x52, 0x00, 0x00, 0xFF, 0x5C, 0x08, +/* 0001C110 */ 0xC1, 0x03, 0x10, 0x07, 0x00, 0x8F, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x90, 0x03, 0x1E, 0xFF, +/* 0001C120 */ 0x01, 0x00, 0x40, 0x02, 0xFE, 0x23, 0x1D, 0xFE, 0x23, 0x1D, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, +/* 0001C130 */ 0xFE, 0x23, 0x1D, 0x5C, 0x5C, 0x02, 0x04, 0x03, 0x05, 0x04, 0x0C, 0x0C, 0x01, 0x01, 0x02, 0x01, +/* 0001C140 */ 0x01, 0x01, 0x01, 0x04, 0x08, 0x2D, 0x8F, 0x01, 0x06, 0x05, 0x00, 0x00, 0x07, 0x03, 0x00, 0x59, +/* 0001C150 */ 0x00, 0x02, 0x8F, 0x01, 0x03, 0x06, 0x01, 0x00, 0x5F, 0x06, 0x06, 0x00, 0x5A, 0x01, 0x06, 0x00, +/* 0001C160 */ 0x00, 0x5A, 0x02, 0x03, 0x00, 0x00, 0xF0, 0x03, 0x00, 0x05, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, +/* 0001C170 */ 0x00, 0x24, 0x00, 0xFE, 0x9E, 0x02, 0xFE, 0x33, 0x1D, 0x02, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x00, +/* 0001C180 */ 0x4B, 0x00, 0x00, 0xFF, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x07, 0x00, 0x88, 0x08, 0xA2, 0x41, 0xC1, +/* 0001C190 */ 0x01, 0xFE, 0x8F, 0x03, 0x1D, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0x11, 0x1C, 0xFE, 0x11, 0x1C, +/* 0001C1A0 */ 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0x11, 0x1C, 0x3E, 0x3E, 0x02, 0x04, 0x03, 0x05, 0x03, +/* 0001C1B0 */ 0x0F, 0x0E, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x01, 0x00, 0x37, 0x14, 0x03, 0x00, +/* 0001C1C0 */ 0x03, 0x02, 0x09, 0x06, 0x00, 0x45, 0x00, 0x02, 0x09, 0x22, 0x00, 0x8F, 0x01, 0x03, 0x06, 0x00, +/* 0001C1D0 */ 0x00, 0x6D, 0x05, 0x06, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x06, 0x5A, 0x01, 0x03, 0x00, 0x00, +/* 0001C1E0 */ 0xF4, 0x02, 0x05, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x05, 0x09, 0x02, 0x00, +/* 0001C1F0 */ 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x8D, 0x02, 0xFE, 0x1C, 0x1C, 0x02, 0x00, 0x00, 0x00, 0x00, 0x35, +/* 0001C200 */ 0x00, 0x32, 0x00, 0x00, 0xFF, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x07, 0x00, 0x84, 0x08, 0xA2, 0x41, +/* 0001C210 */ 0xC1, 0x01, 0xFE, 0x8E, 0x03, 0x1C, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0x24, 0x1B, 0xFE, 0x24, +/* 0001C220 */ 0x1B, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x02, 0xFE, 0x24, 0x1B, 0x5C, 0x5C, 0x02, 0x05, 0x04, 0x07, +/* 0001C230 */ 0x04, 0x0D, 0x0C, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x07, 0x08, 0x33, 0x15, 0x03, +/* 0001C240 */ 0x00, 0x05, 0x03, 0x45, 0x05, 0x02, 0x8F, 0x01, 0x03, 0x08, 0x00, 0x00, 0x6D, 0x07, 0x08, 0x00, +/* 0001C250 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x08, 0x5A, 0x01, 0x04, 0x00, 0x00, 0x5A, 0x02, 0x05, 0x00, 0x00, +/* 0001C260 */ 0xF4, 0x03, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, +/* 0001C270 */ 0x00, 0xFE, 0xBE, 0x02, 0xFE, 0x3B, 0x1B, 0x03, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x10, 0x00, +/* 0001C280 */ 0x29, 0x00, 0x34, 0x00, 0x00, 0xFF, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x07, 0x00, 0x83, 0x08, 0xA2, +/* 0001C290 */ 0x41, 0xC1, 0x01, 0xFE, 0x8D, 0x03, 0x1B, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0xC7, 0x1A, 0xFE, +/* 0001C2A0 */ 0xC7, 0x1A, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x01, 0xFE, 0xC7, 0x1A, 0x53, 0x53, 0x02, 0x04, 0x04, +/* 0001C2B0 */ 0x06, 0x03, 0x0C, 0x0B, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x05, 0x07, 0x08, 0x2E, 0x15, +/* 0001C2C0 */ 0x03, 0x00, 0x04, 0x03, 0x45, 0x04, 0x02, 0x8F, 0x01, 0x03, 0x07, 0x00, 0x00, 0x6D, 0x06, 0x07, +/* 0001C2D0 */ 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x07, 0x5A, 0x01, 0x04, 0x00, 0x00, 0xF4, 0x02, 0x00, 0x06, +/* 0001C2E0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x95, 0x02, +/* 0001C2F0 */ 0xFE, 0xCE, 0x1A, 0x03, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x10, 0x00, 0x24, 0x00, 0x3B, 0x00, +/* 0001C300 */ 0x00, 0xFF, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x07, 0x00, 0x7E, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, +/* 0001C310 */ 0x8C, 0x03, 0x1A, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0xD1, 0x19, 0xFE, 0xD1, 0x19, 0x41, 0xFE, +/* 0001C320 */ 0x00, 0x90, 0x04, 0x04, 0xFE, 0xD1, 0x19, 0xA3, 0xA3, 0x02, 0x06, 0x03, 0x07, 0x05, 0x13, 0x13, +/* 0001C330 */ 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x06, 0x07, 0x53, 0x8F, 0x01, 0x36, 0x08, 0x00, 0x00, +/* 0001C340 */ 0x4A, 0x08, 0x6D, 0x07, 0x08, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x08, 0x5A, 0x01, 0x05, 0x00, +/* 0001C350 */ 0x00, 0x5A, 0x02, 0x02, 0x00, 0x00, 0xF4, 0x03, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0001C360 */ 0x8F, 0x01, 0x03, 0x08, 0x01, 0x00, 0x6D, 0x07, 0x08, 0x01, 0x07, 0x04, 0x00, 0x59, 0x00, 0x08, +/* 0001C370 */ 0x5A, 0x01, 0x03, 0x01, 0x00, 0x5A, 0x02, 0x04, 0x01, 0x00, 0x5A, 0x03, 0x05, 0x01, 0x00, 0xF4, +/* 0001C380 */ 0x04, 0xFF, 0x07, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x9A, 0x01, +/* 0001C390 */ 0xFE, 0x8F, 0x02, 0xFE, 0xFD, 0x19, 0x03, 0x00, 0x00, 0x00, 0x00, 0x26, 0x00, 0x2A, 0x00, 0x2B, +/* 0001C3A0 */ 0x00, 0x4C, 0x00, 0x00, 0xFF, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x07, 0x00, 0x7C, 0x08, 0xA2, 0x41, +/* 0001C3B0 */ 0xC1, 0x01, 0xFE, 0x8B, 0x03, 0x19, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0xC8, 0x18, 0xFE, 0xC8, +/* 0001C3C0 */ 0x18, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, 0xC8, 0x18, 0x72, 0x72, 0x02, 0x05, 0x03, 0x06, +/* 0001C3D0 */ 0x05, 0x0D, 0x0D, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x05, 0x08, 0x32, 0x8F, 0x01, 0x06, +/* 0001C3E0 */ 0x06, 0x00, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x8F, 0x01, 0x03, 0x07, 0x01, 0x00, 0x5F, +/* 0001C3F0 */ 0x07, 0x07, 0x00, 0x5A, 0x01, 0x07, 0x00, 0x00, 0x5A, 0x02, 0x03, 0x00, 0x00, 0x5A, 0x03, 0x04, +/* 0001C400 */ 0x00, 0x00, 0xF0, 0x04, 0x00, 0x06, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, +/* 0001C410 */ 0x93, 0x02, 0xFE, 0xE2, 0x18, 0x02, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x57, 0x00, 0x00, 0xFE, +/* 0001C420 */ 0x5D, 0x08, 0xC1, 0x03, 0x1A, 0x0F, 0x00, 0x79, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x89, 0x03, +/* 0001C430 */ 0x17, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0x31, 0x18, 0xFE, 0x31, 0x18, 0x01, 0xFE, 0x00, 0x90, +/* 0001C440 */ 0x02, 0x02, 0xFE, 0x31, 0x18, 0x53, 0x53, 0x02, 0x01, 0xFE, 0x8A, 0x03, 0x07, 0x02, 0x06, 0x04, +/* 0001C450 */ 0x0F, 0x0F, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x03, 0x04, 0x05, 0x38, 0x96, 0x02, 0x02, +/* 0001C460 */ 0x8F, 0x01, 0x36, 0x07, 0x00, 0x00, 0x4A, 0x07, 0x6D, 0x06, 0x07, 0x00, 0x07, 0x03, 0x00, 0x59, +/* 0001C470 */ 0x00, 0x07, 0x93, 0x02, 0x08, 0x01, 0x00, 0x5A, 0x01, 0x08, 0x00, 0x00, 0xD6, 0x00, 0x08, 0x5A, +/* 0001C480 */ 0x02, 0x08, 0x00, 0x00, 0xF4, 0x03, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, +/* 0001C490 */ 0x00, 0xA8, 0x00, 0x24, 0x00, 0x89, 0xFE, 0x41, 0x18, 0x02, 0x03, 0x00, 0x00, 0x00, 0x33, 0x00, +/* 0001C4A0 */ 0x42, 0x00, 0x00, 0xA7, 0xC4, 0x01, 0x00, 0x7F, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x07, 0x00, 0x79, +/* 0001C4B0 */ 0x2F, 0xA2, 0x41, 0xD0, 0x00, 0x18, 0xFE, 0x01, 0x10, 0xFE, 0x58, 0x18, 0xFE, 0x58, 0x18, 0x01, +/* 0001C4C0 */ 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, 0x58, 0x18, 0x28, 0x28, 0x06, 0x02, 0x05, 0x04, 0x0E, 0x0E, +/* 0001C4D0 */ 0x02, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x04, 0x37, 0x8F, 0x02, 0x36, 0x06, 0x00, 0x00, 0x4A, +/* 0001C4E0 */ 0x06, 0x6D, 0x05, 0x06, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x06, 0x8F, 0x01, 0x02, 0x07, 0x01, +/* 0001C4F0 */ 0x00, 0x5A, 0x01, 0x07, 0x00, 0x00, 0x5A, 0x02, 0x02, 0x00, 0x00, 0xF4, 0x03, 0x05, 0x05, 0x00, +/* 0001C500 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x03, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, +/* 0001C510 */ 0xFE, 0x0F, 0x03, 0xFE, 0x62, 0x18, 0x02, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x1E, 0x00, 0x00, +/* 0001C520 */ 0xFF, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x07, 0x00, 0x78, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x88, +/* 0001C530 */ 0x03, 0x16, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0xC2, 0x17, 0xFE, 0xC2, 0x17, 0x01, 0xFE, 0x00, +/* 0001C540 */ 0x90, 0x03, 0x03, 0xFE, 0xC2, 0x17, 0x65, 0x65, 0x02, 0x05, 0x03, 0x06, 0x05, 0x0D, 0x0D, 0x01, +/* 0001C550 */ 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x05, 0x08, 0x32, 0x8F, 0x01, 0x06, 0x06, 0x00, 0x00, 0x07, +/* 0001C560 */ 0x04, 0x00, 0x59, 0x00, 0x02, 0x8F, 0x01, 0x03, 0x07, 0x01, 0x00, 0x5F, 0x07, 0x07, 0x00, 0x5A, +/* 0001C570 */ 0x01, 0x07, 0x00, 0x00, 0x5A, 0x02, 0x03, 0x00, 0x00, 0x5A, 0x03, 0x04, 0x00, 0x00, 0xF0, 0x04, +/* 0001C580 */ 0x00, 0x06, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x84, 0x02, 0xFE, 0xD8, +/* 0001C590 */ 0x17, 0x02, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x4E, 0x00, 0x00, 0xFF, 0x5C, 0x08, 0xC1, 0x03, +/* 0001C5A0 */ 0x10, 0x47, 0x00, 0x77, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x87, 0x03, 0x15, 0xFF, 0x01, 0x00, +/* 0001C5B0 */ 0x40, 0x02, 0xFE, 0x4B, 0x17, 0xFE, 0x4B, 0x17, 0x81, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0x4B, +/* 0001C5C0 */ 0x17, 0x6D, 0x6D, 0x02, 0x05, 0x03, 0x06, 0x05, 0x0E, 0x0E, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, +/* 0001C5D0 */ 0x01, 0x05, 0x08, 0x3C, 0x8F, 0x01, 0x06, 0x06, 0x00, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, +/* 0001C5E0 */ 0x8F, 0x01, 0x03, 0x07, 0x01, 0x00, 0x5F, 0x07, 0x07, 0x00, 0x5A, 0x01, 0x07, 0x00, 0x00, 0x5A, +/* 0001C5F0 */ 0x02, 0x03, 0x00, 0x00, 0x01, 0x5F, 0x01, 0x07, 0x04, 0x5A, 0x03, 0x07, 0x00, 0x00, 0xF2, 0x04, +/* 0001C600 */ 0x00, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, +/* 0001C610 */ 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, +/* 0001C620 */ 0xFE, 0x9B, 0x02, 0xFE, 0x63, 0x17, 0x02, 0x00, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x54, 0x00, 0x00, +/* 0001C630 */ 0xFF, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x07, 0x00, 0x76, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x86, +/* 0001C640 */ 0x03, 0x14, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0xCE, 0x16, 0xFE, 0xCE, 0x16, 0x01, 0xFE, 0x00, +/* 0001C650 */ 0x90, 0x04, 0x04, 0xFE, 0xCE, 0x16, 0x73, 0x73, 0x02, 0x06, 0x03, 0x07, 0x06, 0x0E, 0x0E, 0x01, +/* 0001C660 */ 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x06, 0x08, 0x37, 0x8F, 0x01, 0x06, 0x07, 0x00, 0x00, 0x07, +/* 0001C670 */ 0x05, 0x00, 0x59, 0x00, 0x02, 0x8F, 0x01, 0x03, 0x08, 0x01, 0x00, 0x5F, 0x08, 0x08, 0x00, 0x5A, +/* 0001C680 */ 0x01, 0x08, 0x00, 0x00, 0x5A, 0x02, 0x03, 0x00, 0x00, 0x5A, 0x03, 0x04, 0x00, 0x00, 0x5A, 0x04, +/* 0001C690 */ 0x05, 0x00, 0x00, 0xF0, 0x05, 0x00, 0x07, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, +/* 0001C6A0 */ 0xFE, 0x9A, 0x02, 0xFE, 0xE9, 0x16, 0x02, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x57, 0x00, 0x00, +/* 0001C6B0 */ 0xFF, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x07, 0x00, 0x75, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x85, +/* 0001C6C0 */ 0x03, 0x13, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0x53, 0x16, 0xFE, 0x53, 0x16, 0x01, 0xFE, 0x00, +/* 0001C6D0 */ 0x90, 0x04, 0x04, 0xFE, 0x53, 0x16, 0x71, 0x71, 0x02, 0x06, 0x03, 0x07, 0x06, 0x0E, 0x0E, 0x01, +/* 0001C6E0 */ 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x06, 0x08, 0x37, 0x8F, 0x01, 0x06, 0x07, 0x00, 0x00, 0x07, +/* 0001C6F0 */ 0x05, 0x00, 0x59, 0x00, 0x02, 0x8F, 0x01, 0x03, 0x08, 0x01, 0x00, 0x5F, 0x08, 0x08, 0x00, 0x5A, +/* 0001C700 */ 0x01, 0x08, 0x00, 0x00, 0x5A, 0x02, 0x03, 0x00, 0x00, 0x5A, 0x03, 0x04, 0x00, 0x00, 0x5A, 0x04, +/* 0001C710 */ 0x05, 0x00, 0x00, 0xF0, 0x05, 0x00, 0x07, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, +/* 0001C720 */ 0xFE, 0x87, 0x02, 0xFE, 0x6F, 0x16, 0x02, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x54, 0x00, 0x00, +/* 0001C730 */ 0xFF, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x07, 0x00, 0x74, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x84, +/* 0001C740 */ 0x03, 0x12, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0xE6, 0x15, 0xFE, 0xE6, 0x15, 0x01, 0xFE, 0x00, +/* 0001C750 */ 0x90, 0x03, 0x03, 0xFE, 0xE6, 0x15, 0x63, 0x63, 0x02, 0x05, 0x03, 0x06, 0x05, 0x0D, 0x0D, 0x01, +/* 0001C760 */ 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x05, 0x08, 0x32, 0x8F, 0x01, 0x06, 0x06, 0x00, 0x00, 0x07, +/* 0001C770 */ 0x04, 0x00, 0x59, 0x00, 0x02, 0x8F, 0x01, 0x03, 0x07, 0x01, 0x00, 0x5F, 0x07, 0x07, 0x00, 0x5A, +/* 0001C780 */ 0x01, 0x07, 0x00, 0x00, 0x5A, 0x02, 0x03, 0x00, 0x00, 0x5A, 0x03, 0x04, 0x00, 0x00, 0xF0, 0x04, +/* 0001C790 */ 0x00, 0x06, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x99, 0x02, 0xFE, 0xF9, +/* 0001C7A0 */ 0x15, 0x02, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x4F, 0x00, 0x00, 0xFF, 0x5C, 0x08, 0x01, 0x00, +/* 0001C7B0 */ 0x10, 0x07, 0x00, 0x73, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x83, 0x03, 0x11, 0xFF, 0x01, 0x00, +/* 0001C7C0 */ 0x40, 0x02, 0xFE, 0x7B, 0x15, 0xFE, 0x7B, 0x15, 0x01, 0xFE, 0x00, 0x90, 0x04, 0x04, 0xFE, 0x7B, +/* 0001C7D0 */ 0x15, 0x61, 0x61, 0x02, 0x06, 0x03, 0x07, 0x06, 0x0D, 0x0D, 0x01, 0x01, 0x02, 0x06, 0x08, 0x33, +/* 0001C7E0 */ 0x8F, 0x01, 0x06, 0x07, 0x00, 0x00, 0x07, 0x05, 0x00, 0x59, 0x00, 0x02, 0x8F, 0x01, 0x18, 0x08, +/* 0001C7F0 */ 0x01, 0x00, 0x5A, 0x01, 0x08, 0x00, 0x00, 0x5A, 0x02, 0x03, 0x00, 0x00, 0x5A, 0x03, 0x04, 0x00, +/* 0001C800 */ 0x00, 0x5A, 0x04, 0x05, 0x00, 0x00, 0xF0, 0x05, 0x00, 0x07, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, +/* 0001C810 */ 0x00, 0x24, 0x00, 0xFE, 0x9B, 0x15, 0x02, 0x00, 0x00, 0x00, 0x00, 0x31, 0x00, 0x40, 0x00, 0x00, +/* 0001C820 */ 0xFF, 0x5C, 0x08, 0x01, 0x00, 0x10, 0x07, 0x00, 0x72, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x82, +/* 0001C830 */ 0x03, 0x10, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0x25, 0x15, 0xFE, 0x25, 0x15, 0x01, 0xFE, 0x00, +/* 0001C840 */ 0x90, 0x03, 0x03, 0xFE, 0x25, 0x15, 0x4C, 0x4C, 0x02, 0x05, 0x03, 0x06, 0x05, 0x0C, 0x0C, 0x01, +/* 0001C850 */ 0x01, 0x02, 0x05, 0x08, 0x2E, 0x8F, 0x01, 0x06, 0x06, 0x00, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, +/* 0001C860 */ 0x02, 0x8F, 0x01, 0x19, 0x07, 0x01, 0x00, 0x5A, 0x01, 0x07, 0x00, 0x00, 0x5A, 0x02, 0x03, 0x00, +/* 0001C870 */ 0x00, 0x5A, 0x03, 0x04, 0x00, 0x00, 0xF0, 0x04, 0x00, 0x06, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, +/* 0001C880 */ 0x00, 0x24, 0x00, 0xFE, 0x38, 0x15, 0x02, 0x00, 0x00, 0x00, 0x00, 0x2C, 0x00, 0x38, 0x00, 0x00, +/* 0001C890 */ 0xFF, 0x5C, 0x08, 0x01, 0x00, 0x10, 0x07, 0x00, 0x71, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x81, +/* 0001C8A0 */ 0x03, 0x0F, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0xC7, 0x14, 0xFE, 0xC7, 0x14, 0x01, 0xFE, 0x00, +/* 0001C8B0 */ 0x90, 0x03, 0x03, 0xFE, 0xC7, 0x14, 0x54, 0x54, 0x02, 0x05, 0x03, 0x06, 0x05, 0x0C, 0x0C, 0x01, +/* 0001C8C0 */ 0x01, 0x02, 0x05, 0x08, 0x2E, 0x8F, 0x01, 0x06, 0x06, 0x00, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, +/* 0001C8D0 */ 0x02, 0x8F, 0x01, 0x17, 0x07, 0x01, 0x00, 0x5A, 0x01, 0x07, 0x00, 0x00, 0x5A, 0x02, 0x03, 0x00, +/* 0001C8E0 */ 0x00, 0x5A, 0x03, 0x04, 0x00, 0x00, 0xF0, 0x04, 0x00, 0x06, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, +/* 0001C8F0 */ 0x00, 0x24, 0x00, 0xFE, 0xDE, 0x14, 0x02, 0x00, 0x00, 0x00, 0x00, 0x2C, 0x00, 0x3C, 0x00, 0x00, +/* 0001C900 */ 0xFF, 0x5C, 0x08, 0xC1, 0x03, 0x10, 0x07, 0x00, 0x6F, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x80, +/* 0001C910 */ 0x03, 0x0E, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0x54, 0x14, 0xFE, 0x54, 0x14, 0x01, 0xFE, 0x00, +/* 0001C920 */ 0x90, 0x03, 0x03, 0xFE, 0x54, 0x14, 0x68, 0x68, 0x02, 0x05, 0x03, 0x06, 0x05, 0x0D, 0x0D, 0x01, +/* 0001C930 */ 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x05, 0x08, 0x32, 0x8F, 0x01, 0x06, 0x06, 0x00, 0x00, 0x07, +/* 0001C940 */ 0x04, 0x00, 0x59, 0x00, 0x02, 0x8F, 0x01, 0x03, 0x07, 0x01, 0x00, 0x5F, 0x07, 0x07, 0x00, 0x5A, +/* 0001C950 */ 0x01, 0x07, 0x00, 0x00, 0x5A, 0x02, 0x03, 0x00, 0x00, 0x5A, 0x03, 0x04, 0x00, 0x00, 0xF0, 0x04, +/* 0001C960 */ 0x00, 0x06, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xA5, 0x02, 0xFE, 0x69, +/* 0001C970 */ 0x14, 0x02, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x52, 0x00, 0x00, 0xFF, 0x5C, 0x08, 0xC1, 0x03, +/* 0001C980 */ 0x10, 0x07, 0x00, 0x6E, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x7F, 0x03, 0x0D, 0xFF, 0x01, 0x00, +/* 0001C990 */ 0x40, 0x02, 0xFE, 0x0C, 0x14, 0xFE, 0x0C, 0x14, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, 0x0C, +/* 0001C9A0 */ 0x14, 0x3E, 0x3E, 0x02, 0x05, 0x02, 0x05, 0x04, 0x0B, 0x0B, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, +/* 0001C9B0 */ 0x01, 0x04, 0x2B, 0x8F, 0x01, 0x03, 0x06, 0x00, 0x00, 0x6D, 0x05, 0x06, 0x00, 0x07, 0x03, 0x00, +/* 0001C9C0 */ 0x59, 0x00, 0x06, 0x5A, 0x01, 0x02, 0x00, 0x00, 0x5A, 0x02, 0x03, 0x00, 0x00, 0xF4, 0x03, 0x00, +/* 0001C9D0 */ 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xC0, +/* 0001C9E0 */ 0x02, 0xFE, 0x1D, 0x14, 0x02, 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x2C, 0x00, 0x00, 0xFF, 0x5C, +/* 0001C9F0 */ 0x08, 0xC1, 0x03, 0x10, 0x07, 0x00, 0x6D, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x7E, 0x03, 0x0C, +/* 0001CA00 */ 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0x8C, 0x13, 0xFE, 0x8C, 0x13, 0x01, 0xFE, 0x00, 0x90, 0x04, +/* 0001CA10 */ 0x04, 0xFE, 0x8C, 0x13, 0x76, 0x76, 0x02, 0x06, 0x03, 0x07, 0x06, 0x0E, 0x0E, 0x01, 0x01, 0x02, +/* 0001CA20 */ 0x01, 0x01, 0x01, 0x01, 0x06, 0x08, 0x37, 0x8F, 0x01, 0x06, 0x07, 0x00, 0x00, 0x07, 0x05, 0x00, +/* 0001CA30 */ 0x59, 0x00, 0x02, 0x8F, 0x01, 0x03, 0x08, 0x01, 0x00, 0x5F, 0x08, 0x08, 0x00, 0x5A, 0x01, 0x08, +/* 0001CA40 */ 0x00, 0x00, 0x5A, 0x02, 0x03, 0x00, 0x00, 0x5A, 0x03, 0x04, 0x00, 0x00, 0x5A, 0x04, 0x05, 0x00, +/* 0001CA50 */ 0x00, 0xF0, 0x05, 0x00, 0x07, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xA6, +/* 0001CA60 */ 0x02, 0xFE, 0xAB, 0x13, 0x02, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x56, 0x00, 0x00, 0xFF, 0x5C, +/* 0001CA70 */ 0x08, 0xC1, 0x03, 0x10, 0x07, 0x00, 0x6C, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x7D, 0x03, 0x0B, +/* 0001CA80 */ 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0x0A, 0x13, 0xFE, 0x0A, 0x13, 0x01, 0xFE, 0x00, 0x90, 0x04, +/* 0001CA90 */ 0x04, 0xFE, 0x0A, 0x13, 0x78, 0x78, 0x02, 0x06, 0x03, 0x07, 0x06, 0x0E, 0x0E, 0x01, 0x01, 0x02, +/* 0001CAA0 */ 0x01, 0x01, 0x01, 0x01, 0x06, 0x08, 0x37, 0x8F, 0x01, 0x06, 0x07, 0x00, 0x00, 0x07, 0x05, 0x00, +/* 0001CAB0 */ 0x59, 0x00, 0x02, 0x8F, 0x01, 0x03, 0x08, 0x01, 0x00, 0x5F, 0x08, 0x08, 0x00, 0x5A, 0x01, 0x08, +/* 0001CAC0 */ 0x00, 0x00, 0x5A, 0x02, 0x03, 0x00, 0x00, 0x5A, 0x03, 0x04, 0x00, 0x00, 0x5A, 0x04, 0x05, 0x00, +/* 0001CAD0 */ 0x00, 0xF0, 0x05, 0x00, 0x07, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xA4, +/* 0001CAE0 */ 0x02, 0xFE, 0x27, 0x13, 0x02, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x5A, 0x00, 0x00, 0xFF, 0x5C, +/* 0001CAF0 */ 0x08, 0xC1, 0x03, 0x10, 0x07, 0x00, 0x6B, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x7C, 0x03, 0x0A, +/* 0001CB00 */ 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0x96, 0x12, 0xFE, 0x96, 0x12, 0x01, 0xFE, 0x00, 0x90, 0x03, +/* 0001CB10 */ 0x03, 0xFE, 0x96, 0x12, 0x6A, 0x6A, 0x02, 0x05, 0x03, 0x06, 0x05, 0x0D, 0x0D, 0x01, 0x01, 0x02, +/* 0001CB20 */ 0x01, 0x01, 0x01, 0x01, 0x05, 0x08, 0x32, 0x8F, 0x01, 0x06, 0x06, 0x00, 0x00, 0x07, 0x04, 0x00, +/* 0001CB30 */ 0x59, 0x00, 0x02, 0x8F, 0x01, 0x03, 0x07, 0x01, 0x00, 0x5F, 0x07, 0x07, 0x00, 0x5A, 0x01, 0x07, +/* 0001CB40 */ 0x00, 0x00, 0x5A, 0x02, 0x03, 0x00, 0x00, 0x5A, 0x03, 0x04, 0x00, 0x00, 0xF0, 0x04, 0x00, 0x06, +/* 0001CB50 */ 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xA3, 0x02, 0xFE, 0xAC, 0x12, 0x02, +/* 0001CB60 */ 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x53, 0x00, 0x00, 0xFF, 0x5C, 0x08, 0x01, 0x00, 0x10, 0x07, +/* 0001CB70 */ 0x00, 0x6A, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x7B, 0x03, 0x09, 0xFF, 0x01, 0x00, 0x40, 0x02, +/* 0001CB80 */ 0xFE, 0x1B, 0x12, 0xFE, 0x1B, 0x12, 0x01, 0xFE, 0x00, 0x90, 0x04, 0x04, 0xFE, 0x1B, 0x12, 0x71, +/* 0001CB90 */ 0x71, 0x02, 0x06, 0x03, 0x07, 0x06, 0x0D, 0x0D, 0x01, 0x01, 0x02, 0x06, 0x08, 0x33, 0x8F, 0x01, +/* 0001CBA0 */ 0x06, 0x07, 0x00, 0x00, 0x07, 0x05, 0x00, 0x59, 0x00, 0x02, 0x8F, 0x01, 0x1D, 0x08, 0x01, 0x00, +/* 0001CBB0 */ 0x5A, 0x01, 0x08, 0x00, 0x00, 0x5A, 0x02, 0x03, 0x00, 0x00, 0x5A, 0x03, 0x04, 0x00, 0x00, 0x5A, +/* 0001CBC0 */ 0x04, 0x05, 0x00, 0x00, 0xF0, 0x05, 0x00, 0x07, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, +/* 0001CBD0 */ 0x00, 0xFE, 0x40, 0x12, 0x02, 0x00, 0x00, 0x00, 0x00, 0x31, 0x00, 0x4B, 0x00, 0x00, 0xFF, 0x5C, +/* 0001CBE0 */ 0x08, 0x01, 0x00, 0x10, 0x07, 0x00, 0x69, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x7A, 0x03, 0x08, +/* 0001CBF0 */ 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0xC4, 0x11, 0xFE, 0xC4, 0x11, 0x01, 0xFE, 0x00, 0x90, 0x02, +/* 0001CC00 */ 0x02, 0xFE, 0xC4, 0x11, 0x4D, 0x4D, 0x02, 0x04, 0x03, 0x05, 0x04, 0x0B, 0x0B, 0x01, 0x01, 0x02, +/* 0001CC10 */ 0x04, 0x08, 0x29, 0x8F, 0x01, 0x06, 0x05, 0x00, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x8F, +/* 0001CC20 */ 0x01, 0x1E, 0x06, 0x01, 0x00, 0x5A, 0x01, 0x06, 0x00, 0x00, 0x5A, 0x02, 0x03, 0x00, 0x00, 0xF0, +/* 0001CC30 */ 0x03, 0x00, 0x05, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xD7, 0x11, 0x02, +/* 0001CC40 */ 0x00, 0x00, 0x00, 0x00, 0x27, 0x00, 0x39, 0x00, 0x00, 0xFF, 0x5C, 0x08, 0x01, 0x00, 0x10, 0x07, +/* 0001CC50 */ 0x00, 0x68, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x79, 0x03, 0x07, 0xFF, 0x01, 0x00, 0x40, 0x02, +/* 0001CC60 */ 0xFE, 0x6D, 0x11, 0xFE, 0x6D, 0x11, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0x6D, 0x11, 0x4D, +/* 0001CC70 */ 0x4D, 0x02, 0x04, 0x03, 0x05, 0x04, 0x0B, 0x0B, 0x01, 0x01, 0x02, 0x04, 0x08, 0x29, 0x8F, 0x01, +/* 0001CC80 */ 0x06, 0x05, 0x00, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x8F, 0x01, 0x1F, 0x06, 0x01, 0x00, +/* 0001CC90 */ 0x5A, 0x01, 0x06, 0x00, 0x00, 0x5A, 0x02, 0x03, 0x00, 0x00, 0xF0, 0x03, 0x00, 0x05, 0x00, 0x00, +/* 0001CCA0 */ 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x80, 0x11, 0x02, 0x00, 0x00, 0x00, 0x00, 0x27, +/* 0001CCB0 */ 0x00, 0x39, 0x00, 0x00, 0x7F, 0x5C, 0x08, 0x01, 0x00, 0x10, 0x03, 0x00, 0x54, 0x1F, 0xA2, 0x41, +/* 0001CCC0 */ 0xC1, 0x00, 0xFE, 0xE5, 0x02, 0x06, 0xFE, 0xC6, 0x0D, 0xFE, 0xC6, 0x0D, 0x41, 0xFE, 0x00, 0x90, +/* 0001CCD0 */ 0x04, 0x04, 0xFE, 0xC6, 0x0D, 0x72, 0x72, 0x06, 0x04, 0x08, 0x09, 0x10, 0x10, 0x01, 0x02, 0x02, +/* 0001CCE0 */ 0x07, 0x07, 0x08, 0x41, 0x8F, 0x01, 0x15, 0x08, 0x00, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, +/* 0001CCF0 */ 0x5A, 0x01, 0x04, 0x00, 0x00, 0x5A, 0x02, 0x05, 0x00, 0x00, 0x8F, 0x01, 0x04, 0x09, 0x01, 0x00, +/* 0001CD00 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x03, 0x5A, 0x01, 0x06, 0x01, 0x00, 0x5A, 0x02, 0x02, 0x01, 0x00, +/* 0001CD10 */ 0xF0, 0x03, 0x09, 0x09, 0x01, 0x00, 0x5A, 0x03, 0x09, 0x00, 0x00, 0xF0, 0x04, 0xFF, 0x08, 0x00, +/* 0001CD20 */ 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xF1, 0x0D, 0x02, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x46, +/* 0001CD30 */ 0x00, 0x00, 0x7E, 0x5C, 0x08, 0xC1, 0x13, 0x10, 0x4B, 0x00, 0x23, 0x04, 0xA3, 0x41, 0xC1, 0x00, +/* 0001CD40 */ 0xFE, 0xDB, 0x02, 0x03, 0xFE, 0x0F, 0x07, 0xFE, 0x0F, 0x07, 0x02, 0xFE, 0x00, 0x90, 0x02, 0x01, +/* 0001CD50 */ 0xFE, 0x0F, 0x07, 0xFE, 0x36, 0x02, 0xFE, 0x36, 0x02, 0x06, 0x09, 0x0B, 0x05, 0x19, 0x18, 0x01, +/* 0001CD60 */ 0x02, 0x02, 0x05, 0x05, 0x05, 0x05, 0x01, 0x0A, 0x08, 0x01, 0x19, 0x06, 0xFE, 0x75, 0x03, 0x06, +/* 0001CD70 */ 0xFE, 0x76, 0x03, 0x06, 0xFE, 0x77, 0x03, 0x06, 0xFE, 0x78, 0x03, 0x07, 0x69, 0x15, 0x03, 0x00, +/* 0001CD80 */ 0x09, 0x02, 0x45, 0x09, 0x03, 0x8F, 0x01, 0x35, 0x0B, 0x00, 0x00, 0x4A, 0x0B, 0x07, 0x02, 0x00, +/* 0001CD90 */ 0x59, 0x00, 0x02, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, +/* 0001CDA0 */ 0x7B, 0x09, 0x0C, 0x00, 0x8F, 0x01, 0x36, 0x0E, 0x01, 0x00, 0x4A, 0x0E, 0x6D, 0x0D, 0x0E, 0x01, +/* 0001CDB0 */ 0x07, 0x01, 0x00, 0x59, 0x00, 0x0E, 0xF4, 0x01, 0x0D, 0x0D, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, +/* 0001CDC0 */ 0x7B, 0x0D, 0x0C, 0x02, 0xD9, 0x00, 0x0D, 0x0C, 0x7B, 0x0D, 0x0C, 0x03, 0xD9, 0x01, 0x0D, 0x0C, +/* 0001CDD0 */ 0x7B, 0x0D, 0x0C, 0x04, 0x5A, 0x01, 0x0C, 0x00, 0x00, 0xF0, 0x02, 0x00, 0x0B, 0x00, 0x00, 0x09, +/* 0001CDE0 */ 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x01, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, +/* 0001CDF0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x03, 0x00, 0x00, 0x76, 0x03, 0x00, 0x00, 0x98, 0x01, 0x00, +/* 0001CE00 */ 0x00, 0x9B, 0x01, 0x00, 0x00, 0xFE, 0x75, 0x03, 0x69, 0xFE, 0x76, 0x03, 0xFE, 0x98, 0x01, 0xFE, +/* 0001CE10 */ 0x9B, 0x01, 0xFE, 0x22, 0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x12, 0x00, 0x5F, 0x00, +/* 0001CE20 */ 0x10, 0x02, 0x00, 0x29, 0xCF, 0x01, 0x00, 0x2B, 0xCE, 0x01, 0x00, 0x7F, 0x5C, 0x0F, 0xC1, 0x03, +/* 0001CE30 */ 0x10, 0x07, 0x00, 0x2C, 0x0C, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x78, 0x03, 0x05, 0xFF, 0x01, 0x00, +/* 0001CE40 */ 0x40, 0x02, 0xFE, 0xF2, 0x07, 0xFE, 0xF2, 0x07, 0x49, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, 0xF2, +/* 0001CE50 */ 0x07, 0xFE, 0x41, 0x01, 0xFE, 0x41, 0x01, 0x07, 0x02, 0x06, 0x03, 0x23, 0x23, 0x01, 0x01, 0x01, +/* 0001CE60 */ 0x01, 0x02, 0x02, 0x09, 0x09, 0x09, 0x09, 0x05, 0x8E, 0x58, 0x04, 0x8F, 0x01, 0x03, 0x06, 0x00, +/* 0001CE70 */ 0x00, 0x5F, 0x06, 0x06, 0x00, 0x0F, 0x05, 0x00, 0x06, 0xA8, 0x00, 0x09, 0x77, 0x00, 0x8F, 0x01, +/* 0001CE80 */ 0x36, 0x07, 0x01, 0x00, 0x4A, 0x07, 0x6D, 0x06, 0x07, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x07, +/* 0001CE90 */ 0x5F, 0x08, 0x04, 0x02, 0x5A, 0x01, 0x08, 0x00, 0x00, 0xF4, 0x02, 0x06, 0x06, 0x01, 0x00, 0x00, +/* 0001CEA0 */ 0x00, 0x00, 0x00, 0xA7, 0x06, 0x06, 0x03, 0x00, 0x00, 0x5F, 0x07, 0x04, 0x04, 0x11, 0x03, 0x00, +/* 0001CEB0 */ 0x06, 0x07, 0x09, 0x34, 0x00, 0x5F, 0x06, 0x04, 0x05, 0x98, 0x06, 0x06, 0x02, 0x00, 0x00, 0xA8, +/* 0001CEC0 */ 0x07, 0x14, 0x03, 0x00, 0x06, 0x07, 0x09, 0x20, 0x00, 0x8F, 0x01, 0x36, 0x07, 0x01, 0x00, 0x4A, +/* 0001CED0 */ 0x07, 0x6D, 0x06, 0x07, 0x06, 0x07, 0x01, 0x00, 0x59, 0x00, 0x07, 0xF4, 0x01, 0x06, 0x06, 0x06, +/* 0001CEE0 */ 0x00, 0x00, 0x00, 0x01, 0x00, 0x77, 0x06, 0x04, 0x07, 0x5F, 0x06, 0x04, 0x08, 0x9D, 0x03, 0x06, +/* 0001CEF0 */ 0x02, 0x00, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x4D, 0x03, 0xCF, 0xFE, 0x76, 0x03, 0xD1, 0xFE, +/* 0001CF00 */ 0x75, 0x03, 0xFE, 0x76, 0x03, 0x69, 0xFE, 0x76, 0x03, 0xFE, 0x76, 0x03, 0xFE, 0x14, 0x08, 0x06, +/* 0001CF10 */ 0x02, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x2F, 0x00, 0x05, 0x00, 0x2B, 0x00, 0x4B, 0x00, 0x61, 0x00, +/* 0001CF20 */ 0x20, 0x00, 0x3D, 0x00, 0x0C, 0x00, 0x26, 0x00, 0x00, 0x7F, 0x4C, 0x02, 0xC1, 0x03, 0x10, 0x07, +/* 0001CF30 */ 0x00, 0x28, 0x0C, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x77, 0x03, 0x04, 0xFF, 0x01, 0x00, 0x40, 0x02, +/* 0001CF40 */ 0xFE, 0x81, 0x07, 0xFE, 0x81, 0x07, 0x09, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0x81, 0x07, 0x62, +/* 0001CF50 */ 0x62, 0x04, 0x02, 0x05, 0x0E, 0x0D, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x04, 0x2C, 0x58, +/* 0001CF60 */ 0x03, 0x8F, 0x01, 0x03, 0x05, 0x00, 0x00, 0x5F, 0x05, 0x05, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x5F, +/* 0001CF70 */ 0x05, 0x03, 0x01, 0x98, 0x05, 0x05, 0x02, 0x00, 0x00, 0x45, 0x00, 0x05, 0x09, 0x05, 0x00, 0xA8, +/* 0001CF80 */ 0x05, 0x46, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x4D, 0x03, 0xFE, 0x76, +/* 0001CF90 */ 0x03, 0xFE, 0x9C, 0x07, 0x02, 0x02, 0x00, 0x00, 0x00, 0x28, 0x00, 0x46, 0x00, 0x00, 0x7F, 0x5C, +/* 0001CFA0 */ 0x08, 0x01, 0x00, 0x10, 0x07, 0x00, 0x1D, 0x11, 0xA2, 0x41, 0xC0, 0x00, 0xFE, 0xFF, 0x02, 0x02, +/* 0001CFB0 */ 0xFE, 0x01, 0x10, 0xFE, 0x0E, 0x05, 0xFE, 0x0E, 0x05, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x01, 0xFE, +/* 0001CFC0 */ 0x0E, 0x05, 0x25, 0x25, 0x03, 0x04, 0x06, 0x04, 0x0D, 0x0C, 0x01, 0x01, 0x01, 0x05, 0x07, 0x08, +/* 0001CFD0 */ 0x2D, 0x15, 0x05, 0x00, 0x04, 0x03, 0xCD, 0x06, 0x45, 0x04, 0x06, 0x8F, 0x01, 0x04, 0x06, 0x00, +/* 0001CFE0 */ 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x03, 0x5A, 0x01, 0x04, 0x00, 0x00, 0x5A, 0x02, 0x02, 0x00, +/* 0001CFF0 */ 0x00, 0xF0, 0x03, 0x00, 0x06, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x0F, +/* 0001D000 */ 0x05, 0x03, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x0D, 0x00, 0x21, 0x00, 0x17, 0x00, 0x00, 0x00}; + +#endif + +} diff --git a/lib/Runtime/Library/InJavascript/JsBuiltIn.nojit.bc.32b.h b/lib/Runtime/Library/InJavascript/JsBuiltIn.nojit.bc.32b.h new file mode 100644 index 00000000000..fb6ecf19192 --- /dev/null +++ b/lib/Runtime/Library/InJavascript/JsBuiltIn.nojit.bc.32b.h @@ -0,0 +1,7742 @@ +//------------------------------------------------------------------------------------------------------- +// Copyright (C) Microsoft. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. +// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. +//------------------------------------------------------------------------------------------------------- + +// Generated Bytecode Header, this file was created by tools/regenByteCode.py +// This file contains: +// a) bytecode for Intl library methods implemented in javascript and +// b) bytecode for other Js library methods, JsBuiltIns, implemented in javascript + +#define JsBuiltIns(VALUE) \ +VALUE(Array, prototype, ArrayPrototype) \ +VALUE(Math, object, MathObject) \ +VALUE(Object, constructor, ObjectConstructor) + +namespace js +{ + +#ifdef ENABLE_JS_BUILTINS + +//Bytecode generated from Array_prototype.js +const char Library_Bytecode_Array_prototype[] = { +/* 00000000 */ 0x43, 0x68, 0x42, 0x63, 0x8D, 0x2D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00000010 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0xFE, 0xD9, 0x02, 0x00, 0xFE, +/* 00000020 */ 0x77, 0x5F, 0xFE, 0x77, 0x5F, 0x35, 0x00, 0x00, 0x00, 0x4E, 0x06, 0x00, 0x00, 0x36, 0x0F, 0x00, +/* 00000030 */ 0x00, 0x8C, 0x2D, 0x00, 0x00, 0x30, 0x2C, 0x01, 0x00, 0x00, 0x00, 0x44, 0x01, 0x00, 0x00, 0x00, +/* 00000040 */ 0x5A, 0x01, 0x00, 0x00, 0x01, 0x76, 0x01, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x8C, +/* 00000050 */ 0x01, 0x00, 0x00, 0x00, 0x9E, 0x01, 0x00, 0x00, 0x00, 0xB4, 0x01, 0x00, 0x00, 0x00, 0xCE, 0x01, +/* 00000060 */ 0x00, 0x00, 0x00, 0xEC, 0x01, 0x00, 0x00, 0x00, 0xFA, 0x01, 0x00, 0x00, 0x00, 0x04, 0x02, 0x00, +/* 00000070 */ 0x00, 0x01, 0x2C, 0x02, 0x00, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x00, 0x44, 0x02, 0x00, 0x00, +/* 00000080 */ 0x00, 0x54, 0x02, 0x00, 0x00, 0x00, 0x64, 0x02, 0x00, 0x00, 0x01, 0x8C, 0x02, 0x00, 0x00, 0x00, +/* 00000090 */ 0x9A, 0x02, 0x00, 0x00, 0x01, 0xBC, 0x02, 0x00, 0x00, 0x01, 0xEA, 0x02, 0x00, 0x00, 0x00, 0xF4, +/* 000000A0 */ 0x02, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x00, 0x00, 0x14, 0x03, 0x00, 0x00, 0x00, 0x1E, 0x03, +/* 000000B0 */ 0x00, 0x00, 0x00, 0x2A, 0x03, 0x00, 0x00, 0x00, 0x3C, 0x03, 0x00, 0x00, 0x00, 0x4A, 0x03, 0x00, +/* 000000C0 */ 0x00, 0x01, 0x68, 0x03, 0x00, 0x00, 0x01, 0x88, 0x03, 0x00, 0x00, 0x01, 0x9E, 0x03, 0x00, 0x00, +/* 000000D0 */ 0x01, 0xC4, 0x03, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0A, 0x04, 0x00, 0x00, 0x00, +/* 000000E0 */ 0x34, 0x04, 0x00, 0x00, 0x00, 0x62, 0x04, 0x00, 0x00, 0x00, 0x92, 0x04, 0x00, 0x00, 0x01, 0x96, +/* 000000F0 */ 0x04, 0x00, 0x00, 0x01, 0x9E, 0x04, 0x00, 0x00, 0x00, 0xCE, 0x04, 0x00, 0x00, 0x00, 0xFC, 0x04, +/* 00000100 */ 0x00, 0x00, 0x00, 0x0E, 0x05, 0x00, 0x00, 0x00, 0x38, 0x05, 0x00, 0x00, 0x00, 0x68, 0x05, 0x00, +/* 00000110 */ 0x00, 0x00, 0x98, 0x05, 0x00, 0x00, 0x00, 0xC2, 0x05, 0x00, 0x00, 0x00, 0xEE, 0x05, 0x00, 0x00, +/* 00000120 */ 0x00, 0x20, 0x06, 0x00, 0x00, 0x00, 0x4E, 0x06, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x6C, 0x00, +/* 00000130 */ 0x6F, 0x00, 0x62, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x20, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x64, 0x00, +/* 00000140 */ 0x65, 0x00, 0x00, 0x00, 0x75, 0x00, 0x73, 0x00, 0x65, 0x00, 0x20, 0x00, 0x73, 0x00, 0x74, 0x00, +/* 00000150 */ 0x72, 0x00, 0x69, 0x00, 0x63, 0x00, 0x74, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, +/* 00000160 */ 0x61, 0x00, 0x79, 0x00, 0x49, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 00000170 */ 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x78, 0x00, 0x74, 0x00, 0x00, 0x00, +/* 00000180 */ 0x76, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x65, 0x00, 0x00, 0x00, 0x77, 0x00, 0x72, 0x00, +/* 00000190 */ 0x69, 0x00, 0x74, 0x00, 0x61, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, +/* 000001A0 */ 0x6E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x72, 0x00, 0x61, 0x00, 0x62, 0x00, 0x6C, 0x00, +/* 000001B0 */ 0x65, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x66, 0x00, 0x69, 0x00, 0x67, 0x00, +/* 000001C0 */ 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x41, 0x00, +/* 000001D0 */ 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x20, 0x00, 0x49, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 000001E0 */ 0x72, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x65, 0x00, +/* 000001F0 */ 0x6E, 0x00, 0x67, 0x00, 0x74, 0x00, 0x68, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6D, 0x00, +/* 00000200 */ 0x65, 0x00, 0x00, 0x00, 0x43, 0x00, 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00000210 */ 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x49, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00000220 */ 0x72, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6B, 0x00, 0x65, 0x00, +/* 00000230 */ 0x79, 0x00, 0x73, 0x00, 0x00, 0x00, 0x76, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x65, 0x00, +/* 00000240 */ 0x73, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x65, 0x00, +/* 00000250 */ 0x73, 0x00, 0x00, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x65, 0x00, 0x78, 0x00, 0x4F, 0x00, +/* 00000260 */ 0x66, 0x00, 0x00, 0x00, 0x43, 0x00, 0x68, 0x00, 0x65, 0x00, 0x63, 0x00, 0x6B, 0x00, 0x41, 0x00, +/* 00000270 */ 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x41, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x47, 0x00, +/* 00000280 */ 0x65, 0x00, 0x74, 0x00, 0x4C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x66, 0x00, 0x69, 0x00, +/* 00000290 */ 0x6C, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x46, 0x00, 0x6C, 0x00, 0x61, 0x00, +/* 000002A0 */ 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6F, 0x00, +/* 000002B0 */ 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x00, 0x00, 0x46, 0x00, 0x6C, 0x00, +/* 000002C0 */ 0x61, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, +/* 000002D0 */ 0x6F, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x4D, 0x00, 0x61, 0x00, +/* 000002E0 */ 0x70, 0x00, 0x70, 0x00, 0x65, 0x00, 0x64, 0x00, 0x00, 0x00, 0x66, 0x00, 0x6C, 0x00, 0x61, 0x00, +/* 000002F0 */ 0x74, 0x00, 0x00, 0x00, 0x66, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x4D, 0x00, 0x61, 0x00, +/* 00000300 */ 0x70, 0x00, 0x00, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x45, 0x00, 0x61, 0x00, 0x63, 0x00, +/* 00000310 */ 0x68, 0x00, 0x00, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, +/* 00000320 */ 0x76, 0x00, 0x65, 0x00, 0x72, 0x00, 0x79, 0x00, 0x00, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x63, 0x00, +/* 00000330 */ 0x6C, 0x00, 0x75, 0x00, 0x64, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, +/* 00000340 */ 0x64, 0x00, 0x75, 0x00, 0x63, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x24, 0x00, +/* 00000350 */ 0x61, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x4F, 0x00, 0x62, 0x00, 0x6A, 0x00, +/* 00000360 */ 0x24, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x24, 0x00, 0x6E, 0x00, +/* 00000370 */ 0x65, 0x00, 0x78, 0x00, 0x74, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x65, 0x00, 0x78, 0x00, +/* 00000380 */ 0x24, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x24, 0x00, 0x6B, 0x00, +/* 00000390 */ 0x69, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x24, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x5F, 0x00, +/* 000003A0 */ 0x5F, 0x00, 0x24, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, +/* 000003B0 */ 0x61, 0x00, 0x6C, 0x00, 0x44, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x24, 0x00, 0x5F, 0x00, +/* 000003C0 */ 0x5F, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x20, 0x00, +/* 000003D0 */ 0x49, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 000003E0 */ 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, +/* 000003F0 */ 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x78, 0x00, 0x74, 0x00, 0x00, 0x00, +/* 00000400 */ 0x64, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, +/* 00000410 */ 0x61, 0x00, 0x79, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, +/* 00000420 */ 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x6B, 0x00, 0x65, 0x00, 0x79, 0x00, +/* 00000430 */ 0x73, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x2E, 0x00, +/* 00000440 */ 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, +/* 00000450 */ 0x65, 0x00, 0x2E, 0x00, 0x76, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x65, 0x00, 0x73, 0x00, +/* 00000460 */ 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x2E, 0x00, 0x70, 0x00, +/* 00000470 */ 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, +/* 00000480 */ 0x2E, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x65, 0x00, 0x73, 0x00, +/* 00000490 */ 0x00, 0x00, 0x6F, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x41, 0x00, +/* 000004A0 */ 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, +/* 000004B0 */ 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x69, 0x00, +/* 000004C0 */ 0x6E, 0x00, 0x64, 0x00, 0x65, 0x00, 0x78, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x41, 0x00, +/* 000004D0 */ 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, +/* 000004E0 */ 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x66, 0x00, +/* 000004F0 */ 0x69, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x66, 0x00, 0x75, 0x00, +/* 00000500 */ 0x6E, 0x00, 0x63, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x41, 0x00, +/* 00000510 */ 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, +/* 00000520 */ 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x66, 0x00, +/* 00000530 */ 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, +/* 00000540 */ 0x79, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, +/* 00000550 */ 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 00000560 */ 0x4D, 0x00, 0x61, 0x00, 0x70, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, +/* 00000570 */ 0x79, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, +/* 00000580 */ 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x45, 0x00, +/* 00000590 */ 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, +/* 000005A0 */ 0x79, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, +/* 000005B0 */ 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x65, 0x00, +/* 000005C0 */ 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x2E, 0x00, 0x70, 0x00, +/* 000005D0 */ 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, +/* 000005E0 */ 0x2E, 0x00, 0x65, 0x00, 0x76, 0x00, 0x65, 0x00, 0x72, 0x00, 0x79, 0x00, 0x00, 0x00, 0x41, 0x00, +/* 000005F0 */ 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, +/* 00000600 */ 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x69, 0x00, +/* 00000610 */ 0x6E, 0x00, 0x63, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x64, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, +/* 00000620 */ 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, +/* 00000630 */ 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, +/* 00000640 */ 0x72, 0x00, 0x65, 0x00, 0x64, 0x00, 0x75, 0x00, 0x63, 0x00, 0x65, 0x00, 0x00, 0x00, 0xFE, 0x39, +/* 00000650 */ 0x02, 0x00, 0x00, 0x00, 0x00, 0x6A, 0x00, 0x00, 0x00, 0x9B, 0x00, 0x00, 0x00, 0xE2, 0x00, 0x00, +/* 00000660 */ 0x00, 0x4C, 0x01, 0x00, 0x00, 0xB6, 0x01, 0x00, 0x00, 0xB7, 0x01, 0x00, 0x00, 0xC5, 0x01, 0x00, +/* 00000670 */ 0x00, 0xC6, 0x01, 0x00, 0x00, 0xDE, 0x01, 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x07, 0x02, 0x00, +/* 00000680 */ 0x00, 0x3C, 0x02, 0x00, 0x00, 0x91, 0x02, 0x00, 0x00, 0xB3, 0x02, 0x00, 0x00, 0xF7, 0x02, 0x00, +/* 00000690 */ 0x00, 0xF8, 0x02, 0x00, 0x00, 0x59, 0x03, 0x00, 0x00, 0xDB, 0x03, 0x00, 0x00, 0x03, 0x04, 0x00, +/* 000006A0 */ 0x00, 0x25, 0x04, 0x00, 0x00, 0x4E, 0x04, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x0A, 0x05, 0x00, +/* 000006B0 */ 0x00, 0x0B, 0x05, 0x00, 0x00, 0x81, 0x05, 0x00, 0x00, 0xBE, 0x05, 0x00, 0x00, 0xE4, 0x05, 0x00, +/* 000006C0 */ 0x00, 0x33, 0x06, 0x00, 0x00, 0x7F, 0x06, 0x00, 0x00, 0xD3, 0x06, 0x00, 0x00, 0x3F, 0x07, 0x00, +/* 000006D0 */ 0x00, 0x87, 0x07, 0x00, 0x00, 0xED, 0x07, 0x00, 0x00, 0xEE, 0x07, 0x00, 0x00, 0x39, 0x08, 0x00, +/* 000006E0 */ 0x00, 0xD2, 0x08, 0x00, 0x00, 0x14, 0x09, 0x00, 0x00, 0x2B, 0x09, 0x00, 0x00, 0x4C, 0x09, 0x00, +/* 000006F0 */ 0x00, 0x6A, 0x09, 0x00, 0x00, 0x6B, 0x09, 0x00, 0x00, 0xB0, 0x09, 0x00, 0x00, 0x1E, 0x0A, 0x00, +/* 00000700 */ 0x00, 0x30, 0x0A, 0x00, 0x00, 0x31, 0x0A, 0x00, 0x00, 0x5B, 0x0A, 0x00, 0x00, 0x5C, 0x0A, 0x00, +/* 00000710 */ 0x00, 0x91, 0x0A, 0x00, 0x00, 0xCE, 0x0A, 0x00, 0x00, 0xE7, 0x0A, 0x00, 0x00, 0x1A, 0x0B, 0x00, +/* 00000720 */ 0x00, 0x7E, 0x0B, 0x00, 0x00, 0x7F, 0x0B, 0x00, 0x00, 0xEB, 0x0B, 0x00, 0x00, 0x20, 0x0C, 0x00, +/* 00000730 */ 0x00, 0x21, 0x0C, 0x00, 0x00, 0x58, 0x0C, 0x00, 0x00, 0x59, 0x0C, 0x00, 0x00, 0xA4, 0x0C, 0x00, +/* 00000740 */ 0x00, 0xE9, 0x0C, 0x00, 0x00, 0x64, 0x0D, 0x00, 0x00, 0xA6, 0x0D, 0x00, 0x00, 0xC7, 0x0D, 0x00, +/* 00000750 */ 0x00, 0xFB, 0x0D, 0x00, 0x00, 0x34, 0x0E, 0x00, 0x00, 0x8B, 0x0E, 0x00, 0x00, 0xA5, 0x0E, 0x00, +/* 00000760 */ 0x00, 0xC2, 0x0E, 0x00, 0x00, 0xF7, 0x0E, 0x00, 0x00, 0x39, 0x0F, 0x00, 0x00, 0x4F, 0x0F, 0x00, +/* 00000770 */ 0x00, 0x61, 0x0F, 0x00, 0x00, 0x70, 0x0F, 0x00, 0x00, 0x8C, 0x0F, 0x00, 0x00, 0xAB, 0x0F, 0x00, +/* 00000780 */ 0x00, 0xCA, 0x0F, 0x00, 0x00, 0xDB, 0x0F, 0x00, 0x00, 0xE2, 0x0F, 0x00, 0x00, 0xE3, 0x0F, 0x00, +/* 00000790 */ 0x00, 0xA4, 0x10, 0x00, 0x00, 0xA5, 0x10, 0x00, 0x00, 0x52, 0x11, 0x00, 0x00, 0x53, 0x11, 0x00, +/* 000007A0 */ 0x00, 0x03, 0x12, 0x00, 0x00, 0x04, 0x12, 0x00, 0x00, 0x6B, 0x12, 0x00, 0x00, 0xB6, 0x12, 0x00, +/* 000007B0 */ 0x00, 0xBE, 0x12, 0x00, 0x00, 0xBF, 0x12, 0x00, 0x00, 0xF3, 0x12, 0x00, 0x00, 0x26, 0x13, 0x00, +/* 000007C0 */ 0x00, 0x75, 0x13, 0x00, 0x00, 0x7F, 0x13, 0x00, 0x00, 0xAD, 0x13, 0x00, 0x00, 0x03, 0x14, 0x00, +/* 000007D0 */ 0x00, 0x0B, 0x14, 0x00, 0x00, 0x0C, 0x14, 0x00, 0x00, 0x42, 0x14, 0x00, 0x00, 0x75, 0x14, 0x00, +/* 000007E0 */ 0x00, 0xC6, 0x14, 0x00, 0x00, 0xD0, 0x14, 0x00, 0x00, 0xFE, 0x14, 0x00, 0x00, 0x56, 0x15, 0x00, +/* 000007F0 */ 0x00, 0x5E, 0x15, 0x00, 0x00, 0x5F, 0x15, 0x00, 0x00, 0x96, 0x15, 0x00, 0x00, 0xC9, 0x15, 0x00, +/* 00000800 */ 0x00, 0x1B, 0x16, 0x00, 0x00, 0x25, 0x16, 0x00, 0x00, 0x53, 0x16, 0x00, 0x00, 0xB1, 0x16, 0x00, +/* 00000810 */ 0x00, 0xB9, 0x16, 0x00, 0x00, 0xBA, 0x16, 0x00, 0x00, 0x15, 0x17, 0x00, 0x00, 0x4D, 0x17, 0x00, +/* 00000820 */ 0x00, 0x4E, 0x17, 0x00, 0x00, 0xAB, 0x17, 0x00, 0x00, 0xAC, 0x17, 0x00, 0x00, 0xC5, 0x17, 0x00, +/* 00000830 */ 0x00, 0xDC, 0x17, 0x00, 0x00, 0xE6, 0x17, 0x00, 0x00, 0xE7, 0x17, 0x00, 0x00, 0x1D, 0x18, 0x00, +/* 00000840 */ 0x00, 0x35, 0x18, 0x00, 0x00, 0x4C, 0x18, 0x00, 0x00, 0x56, 0x18, 0x00, 0x00, 0x57, 0x18, 0x00, +/* 00000850 */ 0x00, 0x66, 0x18, 0x00, 0x00, 0x67, 0x18, 0x00, 0x00, 0xA8, 0x18, 0x00, 0x00, 0xEE, 0x18, 0x00, +/* 00000860 */ 0x00, 0x33, 0x19, 0x00, 0x00, 0x6B, 0x19, 0x00, 0x00, 0xBF, 0x19, 0x00, 0x00, 0xD2, 0x19, 0x00, +/* 00000870 */ 0x00, 0x24, 0x1A, 0x00, 0x00, 0x37, 0x1A, 0x00, 0x00, 0x72, 0x1A, 0x00, 0x00, 0x8B, 0x1A, 0x00, +/* 00000880 */ 0x00, 0x8C, 0x1A, 0x00, 0x00, 0xA5, 0x1A, 0x00, 0x00, 0xBC, 0x1A, 0x00, 0x00, 0xCA, 0x1A, 0x00, +/* 00000890 */ 0x00, 0xD4, 0x1A, 0x00, 0x00, 0xD5, 0x1A, 0x00, 0x00, 0xEF, 0x1A, 0x00, 0x00, 0x09, 0x1B, 0x00, +/* 000008A0 */ 0x00, 0x2E, 0x1B, 0x00, 0x00, 0x2F, 0x1B, 0x00, 0x00, 0x61, 0x1B, 0x00, 0x00, 0x7F, 0x1B, 0x00, +/* 000008B0 */ 0x00, 0x91, 0x1B, 0x00, 0x00, 0x9F, 0x1B, 0x00, 0x00, 0xA0, 0x1B, 0x00, 0x00, 0xB1, 0x1B, 0x00, +/* 000008C0 */ 0x00, 0xBB, 0x1B, 0x00, 0x00, 0xBC, 0x1B, 0x00, 0x00, 0xCF, 0x1B, 0x00, 0x00, 0xD7, 0x1B, 0x00, +/* 000008D0 */ 0x00, 0xD8, 0x1B, 0x00, 0x00, 0x38, 0x1C, 0x00, 0x00, 0x64, 0x1C, 0x00, 0x00, 0x94, 0x1C, 0x00, +/* 000008E0 */ 0x00, 0xA5, 0x1C, 0x00, 0x00, 0xDA, 0x1C, 0x00, 0x00, 0x22, 0x1D, 0x00, 0x00, 0x30, 0x1D, 0x00, +/* 000008F0 */ 0x00, 0x95, 0x1D, 0x00, 0x00, 0x9F, 0x1D, 0x00, 0x00, 0xA7, 0x1D, 0x00, 0x00, 0xA8, 0x1D, 0x00, +/* 00000900 */ 0x00, 0xFD, 0x1D, 0x00, 0x00, 0x34, 0x1E, 0x00, 0x00, 0x35, 0x1E, 0x00, 0x00, 0x91, 0x1E, 0x00, +/* 00000910 */ 0x00, 0x9A, 0x1E, 0x00, 0x00, 0xCA, 0x1E, 0x00, 0x00, 0x24, 0x1F, 0x00, 0x00, 0x2E, 0x1F, 0x00, +/* 00000920 */ 0x00, 0x2F, 0x1F, 0x00, 0x00, 0x69, 0x1F, 0x00, 0x00, 0x7C, 0x1F, 0x00, 0x00, 0x90, 0x1F, 0x00, +/* 00000930 */ 0x00, 0x91, 0x1F, 0x00, 0x00, 0xAB, 0x1F, 0x00, 0x00, 0xC5, 0x1F, 0x00, 0x00, 0xE8, 0x1F, 0x00, +/* 00000940 */ 0x00, 0x4E, 0x20, 0x00, 0x00, 0xA1, 0x20, 0x00, 0x00, 0xBB, 0x20, 0x00, 0x00, 0xCD, 0x20, 0x00, +/* 00000950 */ 0x00, 0xDB, 0x20, 0x00, 0x00, 0xEC, 0x20, 0x00, 0x00, 0xF6, 0x20, 0x00, 0x00, 0xF7, 0x20, 0x00, +/* 00000960 */ 0x00, 0x09, 0x21, 0x00, 0x00, 0x11, 0x21, 0x00, 0x00, 0x12, 0x21, 0x00, 0x00, 0x83, 0x21, 0x00, +/* 00000970 */ 0x00, 0x89, 0x21, 0x00, 0x00, 0xE7, 0x21, 0x00, 0x00, 0x47, 0x22, 0x00, 0x00, 0x48, 0x22, 0x00, +/* 00000980 */ 0x00, 0x6F, 0x22, 0x00, 0x00, 0x90, 0x22, 0x00, 0x00, 0xB3, 0x22, 0x00, 0x00, 0xD0, 0x22, 0x00, +/* 00000990 */ 0x00, 0x03, 0x23, 0x00, 0x00, 0x18, 0x23, 0x00, 0x00, 0x42, 0x23, 0x00, 0x00, 0x76, 0x23, 0x00, +/* 000009A0 */ 0x00, 0xB0, 0x23, 0x00, 0x00, 0xD9, 0x23, 0x00, 0x00, 0x07, 0x24, 0x00, 0x00, 0x3F, 0x24, 0x00, +/* 000009B0 */ 0x00, 0x6E, 0x24, 0x00, 0x00, 0xC3, 0x24, 0x00, 0x00, 0xF8, 0x24, 0x00, 0x00, 0x23, 0x25, 0x00, +/* 000009C0 */ 0x00, 0x67, 0x25, 0x00, 0x00, 0xAC, 0x25, 0x00, 0x00, 0xE5, 0x25, 0x00, 0x00, 0x38, 0x26, 0x00, +/* 000009D0 */ 0x00, 0xAF, 0x26, 0x00, 0x00, 0x46, 0x27, 0x00, 0x00, 0x5F, 0x27, 0x00, 0x00, 0x80, 0x27, 0x00, +/* 000009E0 */ 0x00, 0xD2, 0x27, 0x00, 0x00, 0x1A, 0x28, 0x00, 0x00, 0x6F, 0x28, 0x00, 0x00, 0x85, 0x28, 0x00, +/* 000009F0 */ 0x00, 0xEE, 0x28, 0x00, 0x00, 0x50, 0x29, 0x00, 0x00, 0x85, 0x29, 0x00, 0x00, 0xA8, 0x29, 0x00, +/* 00000A00 */ 0x00, 0xBA, 0x29, 0x00, 0x00, 0xC8, 0x29, 0x00, 0x00, 0xF6, 0x29, 0x00, 0x00, 0x11, 0x2A, 0x00, +/* 00000A10 */ 0x00, 0x1B, 0x2A, 0x00, 0x00, 0x3C, 0x2A, 0x00, 0x00, 0x58, 0x2A, 0x00, 0x00, 0x60, 0x2A, 0x00, +/* 00000A20 */ 0x00, 0x61, 0x2A, 0x00, 0x00, 0xEC, 0x2A, 0x00, 0x00, 0x39, 0x2B, 0x00, 0x00, 0x7E, 0x2B, 0x00, +/* 00000A30 */ 0x00, 0xCF, 0x2B, 0x00, 0x00, 0x20, 0x2C, 0x00, 0x00, 0x63, 0x2C, 0x00, 0x00, 0x8A, 0x2C, 0x00, +/* 00000A40 */ 0x00, 0xAB, 0x2C, 0x00, 0x00, 0xCE, 0x2C, 0x00, 0x00, 0xEB, 0x2C, 0x00, 0x00, 0x1E, 0x2D, 0x00, +/* 00000A50 */ 0x00, 0x1F, 0x2D, 0x00, 0x00, 0x4D, 0x2D, 0x00, 0x00, 0x77, 0x2D, 0x00, 0x00, 0xAB, 0x2D, 0x00, +/* 00000A60 */ 0x00, 0xE5, 0x2D, 0x00, 0x00, 0x0E, 0x2E, 0x00, 0x00, 0x3C, 0x2E, 0x00, 0x00, 0x74, 0x2E, 0x00, +/* 00000A70 */ 0x00, 0xAF, 0x2E, 0x00, 0x00, 0xE6, 0x2E, 0x00, 0x00, 0x50, 0x2F, 0x00, 0x00, 0xDA, 0x2F, 0x00, +/* 00000A80 */ 0x00, 0x0F, 0x30, 0x00, 0x00, 0x3A, 0x30, 0x00, 0x00, 0x7E, 0x30, 0x00, 0x00, 0xB4, 0x30, 0x00, +/* 00000A90 */ 0x00, 0x07, 0x31, 0x00, 0x00, 0x7E, 0x31, 0x00, 0x00, 0xB6, 0x31, 0x00, 0x00, 0x1F, 0x32, 0x00, +/* 00000AA0 */ 0x00, 0x6B, 0x32, 0x00, 0x00, 0x8F, 0x32, 0x00, 0x00, 0xC6, 0x32, 0x00, 0x00, 0xFB, 0x32, 0x00, +/* 00000AB0 */ 0x00, 0x55, 0x33, 0x00, 0x00, 0xA5, 0x33, 0x00, 0x00, 0x05, 0x34, 0x00, 0x00, 0x23, 0x34, 0x00, +/* 00000AC0 */ 0x00, 0x95, 0x34, 0x00, 0x00, 0x0B, 0x35, 0x00, 0x00, 0x49, 0x35, 0x00, 0x00, 0x74, 0x35, 0x00, +/* 00000AD0 */ 0x00, 0x8E, 0x35, 0x00, 0x00, 0xB4, 0x35, 0x00, 0x00, 0xCA, 0x35, 0x00, 0x00, 0xE3, 0x35, 0x00, +/* 00000AE0 */ 0x00, 0x05, 0x36, 0x00, 0x00, 0x5B, 0x36, 0x00, 0x00, 0xA3, 0x36, 0x00, 0x00, 0xFB, 0x36, 0x00, +/* 00000AF0 */ 0x00, 0x11, 0x37, 0x00, 0x00, 0x7B, 0x37, 0x00, 0x00, 0xDD, 0x37, 0x00, 0x00, 0x13, 0x38, 0x00, +/* 00000B00 */ 0x00, 0x36, 0x38, 0x00, 0x00, 0x48, 0x38, 0x00, 0x00, 0x56, 0x38, 0x00, 0x00, 0x84, 0x38, 0x00, +/* 00000B10 */ 0x00, 0x9F, 0x38, 0x00, 0x00, 0xA9, 0x38, 0x00, 0x00, 0xCA, 0x38, 0x00, 0x00, 0xE6, 0x38, 0x00, +/* 00000B20 */ 0x00, 0xEE, 0x38, 0x00, 0x00, 0xEF, 0x38, 0x00, 0x00, 0x34, 0x39, 0x00, 0x00, 0x62, 0x39, 0x00, +/* 00000B30 */ 0x00, 0xA0, 0x39, 0x00, 0x00, 0xFA, 0x39, 0x00, 0x00, 0xFB, 0x39, 0x00, 0x00, 0x1B, 0x3A, 0x00, +/* 00000B40 */ 0x00, 0x48, 0x3A, 0x00, 0x00, 0x79, 0x3A, 0x00, 0x00, 0xCE, 0x3A, 0x00, 0x00, 0x00, 0x3B, 0x00, +/* 00000B50 */ 0x00, 0x3C, 0x3B, 0x00, 0x00, 0x83, 0x3B, 0x00, 0x00, 0xC5, 0x3B, 0x00, 0x00, 0xDC, 0x3B, 0x00, +/* 00000B60 */ 0x00, 0xEE, 0x3B, 0x00, 0x00, 0xF6, 0x3B, 0x00, 0x00, 0xF7, 0x3B, 0x00, 0x00, 0x51, 0x3C, 0x00, +/* 00000B70 */ 0x00, 0x7F, 0x3C, 0x00, 0x00, 0xBD, 0x3C, 0x00, 0x00, 0x1A, 0x3D, 0x00, 0x00, 0x1B, 0x3D, 0x00, +/* 00000B80 */ 0x00, 0x6B, 0x3D, 0x00, 0x00, 0x9F, 0x3D, 0x00, 0x00, 0xFA, 0x3D, 0x00, 0x00, 0x04, 0x3E, 0x00, +/* 00000B90 */ 0x00, 0x52, 0x3E, 0x00, 0x00, 0x84, 0x3E, 0x00, 0x00, 0xC0, 0x3E, 0x00, 0x00, 0x07, 0x3F, 0x00, +/* 00000BA0 */ 0x00, 0x5E, 0x3F, 0x00, 0x00, 0x75, 0x3F, 0x00, 0x00, 0x87, 0x3F, 0x00, 0x00, 0x8F, 0x3F, 0x00, +/* 00000BB0 */ 0x00, 0x90, 0x3F, 0x00, 0x00, 0xE6, 0x3F, 0x00, 0x00, 0x1E, 0x40, 0x00, 0x00, 0x1F, 0x40, 0x00, +/* 00000BC0 */ 0x00, 0x4A, 0x40, 0x00, 0x00, 0x7F, 0x40, 0x00, 0x00, 0xDC, 0x40, 0x00, 0x00, 0xE5, 0x40, 0x00, +/* 00000BD0 */ 0x00, 0x30, 0x41, 0x00, 0x00, 0x60, 0x41, 0x00, 0x00, 0xBB, 0x41, 0x00, 0x00, 0xC5, 0x41, 0x00, +/* 00000BE0 */ 0x00, 0xC6, 0x41, 0x00, 0x00, 0x12, 0x42, 0x00, 0x00, 0x28, 0x42, 0x00, 0x00, 0x3B, 0x42, 0x00, +/* 00000BF0 */ 0x00, 0x3C, 0x42, 0x00, 0x00, 0x5C, 0x42, 0x00, 0x00, 0x76, 0x42, 0x00, 0x00, 0x9D, 0x42, 0x00, +/* 00000C00 */ 0x00, 0xD1, 0x42, 0x00, 0x00, 0xF9, 0x42, 0x00, 0x00, 0x13, 0x43, 0x00, 0x00, 0x41, 0x43, 0x00, +/* 00000C10 */ 0x00, 0x64, 0x43, 0x00, 0x00, 0xA4, 0x43, 0x00, 0x00, 0x04, 0x44, 0x00, 0x00, 0x12, 0x44, 0x00, +/* 00000C20 */ 0x00, 0x31, 0x44, 0x00, 0x00, 0x42, 0x44, 0x00, 0x00, 0x4C, 0x44, 0x00, 0x00, 0x69, 0x44, 0x00, +/* 00000C30 */ 0x00, 0x83, 0x44, 0x00, 0x00, 0x8B, 0x44, 0x00, 0x00, 0x8C, 0x44, 0x00, 0x00, 0xDF, 0x44, 0x00, +/* 00000C40 */ 0x00, 0x14, 0x45, 0x00, 0x00, 0x1D, 0x45, 0x00, 0x00, 0x48, 0x45, 0x00, 0x00, 0x7D, 0x45, 0x00, +/* 00000C50 */ 0x00, 0xD7, 0x45, 0x00, 0x00, 0xD8, 0x45, 0x00, 0x00, 0x23, 0x46, 0x00, 0x00, 0x53, 0x46, 0x00, +/* 00000C60 */ 0x00, 0xAB, 0x46, 0x00, 0x00, 0xB5, 0x46, 0x00, 0x00, 0xB6, 0x46, 0x00, 0x00, 0x02, 0x47, 0x00, +/* 00000C70 */ 0x00, 0x18, 0x47, 0x00, 0x00, 0x2B, 0x47, 0x00, 0x00, 0x2C, 0x47, 0x00, 0x00, 0x4C, 0x47, 0x00, +/* 00000C80 */ 0x00, 0x66, 0x47, 0x00, 0x00, 0x8D, 0x47, 0x00, 0x00, 0xC1, 0x47, 0x00, 0x00, 0xE9, 0x47, 0x00, +/* 00000C90 */ 0x00, 0x03, 0x48, 0x00, 0x00, 0x31, 0x48, 0x00, 0x00, 0x54, 0x48, 0x00, 0x00, 0xA9, 0x48, 0x00, +/* 00000CA0 */ 0x00, 0xDF, 0x48, 0x00, 0x00, 0x45, 0x49, 0x00, 0x00, 0x66, 0x49, 0x00, 0x00, 0x78, 0x49, 0x00, +/* 00000CB0 */ 0x00, 0x86, 0x49, 0x00, 0x00, 0xA5, 0x49, 0x00, 0x00, 0xB6, 0x49, 0x00, 0x00, 0xC0, 0x49, 0x00, +/* 00000CC0 */ 0x00, 0xD9, 0x49, 0x00, 0x00, 0xEF, 0x49, 0x00, 0x00, 0xF7, 0x49, 0x00, 0x00, 0xF8, 0x49, 0x00, +/* 00000CD0 */ 0x00, 0x4C, 0x4A, 0x00, 0x00, 0x82, 0x4A, 0x00, 0x00, 0x8B, 0x4A, 0x00, 0x00, 0xB6, 0x4A, 0x00, +/* 00000CE0 */ 0x00, 0xEB, 0x4A, 0x00, 0x00, 0x46, 0x4B, 0x00, 0x00, 0x47, 0x4B, 0x00, 0x00, 0x92, 0x4B, 0x00, +/* 00000CF0 */ 0x00, 0xC2, 0x4B, 0x00, 0x00, 0x1B, 0x4C, 0x00, 0x00, 0x25, 0x4C, 0x00, 0x00, 0x26, 0x4C, 0x00, +/* 00000D00 */ 0x00, 0x72, 0x4C, 0x00, 0x00, 0x88, 0x4C, 0x00, 0x00, 0x9B, 0x4C, 0x00, 0x00, 0x9C, 0x4C, 0x00, +/* 00000D10 */ 0x00, 0xBC, 0x4C, 0x00, 0x00, 0xD6, 0x4C, 0x00, 0x00, 0xFD, 0x4C, 0x00, 0x00, 0x31, 0x4D, 0x00, +/* 00000D20 */ 0x00, 0x59, 0x4D, 0x00, 0x00, 0x73, 0x4D, 0x00, 0x00, 0xA1, 0x4D, 0x00, 0x00, 0xC4, 0x4D, 0x00, +/* 00000D30 */ 0x00, 0x19, 0x4E, 0x00, 0x00, 0x51, 0x4E, 0x00, 0x00, 0xB8, 0x4E, 0x00, 0x00, 0xDA, 0x4E, 0x00, +/* 00000D40 */ 0x00, 0xEC, 0x4E, 0x00, 0x00, 0xFA, 0x4E, 0x00, 0x00, 0x19, 0x4F, 0x00, 0x00, 0x2A, 0x4F, 0x00, +/* 00000D50 */ 0x00, 0x34, 0x4F, 0x00, 0x00, 0x4C, 0x4F, 0x00, 0x00, 0x61, 0x4F, 0x00, 0x00, 0x69, 0x4F, 0x00, +/* 00000D60 */ 0x00, 0x6A, 0x4F, 0x00, 0x00, 0xC6, 0x4F, 0x00, 0x00, 0xFF, 0x4F, 0x00, 0x00, 0x00, 0x50, 0x00, +/* 00000D70 */ 0x00, 0x2B, 0x50, 0x00, 0x00, 0x60, 0x50, 0x00, 0x00, 0xBD, 0x50, 0x00, 0x00, 0xBE, 0x50, 0x00, +/* 00000D80 */ 0x00, 0xE3, 0x50, 0x00, 0x00, 0xFC, 0x50, 0x00, 0x00, 0x16, 0x51, 0x00, 0x00, 0x20, 0x51, 0x00, +/* 00000D90 */ 0x00, 0x21, 0x51, 0x00, 0x00, 0x4C, 0x51, 0x00, 0x00, 0x86, 0x51, 0x00, 0x00, 0xBC, 0x51, 0x00, +/* 00000DA0 */ 0x00, 0xCB, 0x51, 0x00, 0x00, 0xCC, 0x51, 0x00, 0x00, 0xE6, 0x51, 0x00, 0x00, 0xFE, 0x51, 0x00, +/* 00000DB0 */ 0x00, 0x14, 0x52, 0x00, 0x00, 0x32, 0x52, 0x00, 0x00, 0x54, 0x52, 0x00, 0x00, 0x6A, 0x52, 0x00, +/* 00000DC0 */ 0x00, 0x7D, 0x52, 0x00, 0x00, 0x88, 0x52, 0x00, 0x00, 0x97, 0x52, 0x00, 0x00, 0xB0, 0x52, 0x00, +/* 00000DD0 */ 0x00, 0xB1, 0x52, 0x00, 0x00, 0xCA, 0x52, 0x00, 0x00, 0xE1, 0x52, 0x00, 0x00, 0xEF, 0x52, 0x00, +/* 00000DE0 */ 0x00, 0xF9, 0x52, 0x00, 0x00, 0xFA, 0x52, 0x00, 0x00, 0x1A, 0x53, 0x00, 0x00, 0x34, 0x53, 0x00, +/* 00000DF0 */ 0x00, 0x79, 0x53, 0x00, 0x00, 0x9A, 0x53, 0x00, 0x00, 0xE8, 0x53, 0x00, 0x00, 0x69, 0x54, 0x00, +/* 00000E00 */ 0x00, 0x86, 0x54, 0x00, 0x00, 0x94, 0x54, 0x00, 0x00, 0xB3, 0x54, 0x00, 0x00, 0xC4, 0x54, 0x00, +/* 00000E10 */ 0x00, 0xCE, 0x54, 0x00, 0x00, 0xE7, 0x54, 0x00, 0x00, 0xFD, 0x54, 0x00, 0x00, 0x05, 0x55, 0x00, +/* 00000E20 */ 0x00, 0x06, 0x55, 0x00, 0x00, 0x60, 0x55, 0x00, 0x00, 0x97, 0x55, 0x00, 0x00, 0x98, 0x55, 0x00, +/* 00000E30 */ 0x00, 0xC3, 0x55, 0x00, 0x00, 0xF8, 0x55, 0x00, 0x00, 0x54, 0x56, 0x00, 0x00, 0x55, 0x56, 0x00, +/* 00000E40 */ 0x00, 0xA0, 0x56, 0x00, 0x00, 0xD0, 0x56, 0x00, 0x00, 0x2A, 0x57, 0x00, 0x00, 0x34, 0x57, 0x00, +/* 00000E50 */ 0x00, 0x35, 0x57, 0x00, 0x00, 0x89, 0x57, 0x00, 0x00, 0xC0, 0x57, 0x00, 0x00, 0x1E, 0x58, 0x00, +/* 00000E60 */ 0x00, 0x28, 0x58, 0x00, 0x00, 0x29, 0x58, 0x00, 0x00, 0x3F, 0x58, 0x00, 0x00, 0x67, 0x58, 0x00, +/* 00000E70 */ 0x00, 0x7A, 0x58, 0x00, 0x00, 0x9F, 0x58, 0x00, 0x00, 0xA0, 0x58, 0x00, 0x00, 0xCB, 0x58, 0x00, +/* 00000E80 */ 0x00, 0xF6, 0x58, 0x00, 0x00, 0x6A, 0x59, 0x00, 0x00, 0x92, 0x59, 0x00, 0x00, 0x9C, 0x59, 0x00, +/* 00000E90 */ 0x00, 0xC8, 0x59, 0x00, 0x00, 0xD7, 0x59, 0x00, 0x00, 0xFC, 0x59, 0x00, 0x00, 0x1E, 0x5A, 0x00, +/* 00000EA0 */ 0x00, 0x58, 0x5A, 0x00, 0x00, 0x83, 0x5A, 0x00, 0x00, 0xAE, 0x5A, 0x00, 0x00, 0xE6, 0x5A, 0x00, +/* 00000EB0 */ 0x00, 0x12, 0x5B, 0x00, 0x00, 0x47, 0x5B, 0x00, 0x00, 0x65, 0x5B, 0x00, 0x00, 0x8A, 0x5B, 0x00, +/* 00000EC0 */ 0x00, 0xB2, 0x5B, 0x00, 0x00, 0xC4, 0x5B, 0x00, 0x00, 0xE7, 0x5B, 0x00, 0x00, 0xFC, 0x5B, 0x00, +/* 00000ED0 */ 0x00, 0x0A, 0x5C, 0x00, 0x00, 0x4B, 0x5C, 0x00, 0x00, 0x68, 0x5C, 0x00, 0x00, 0xCA, 0x5C, 0x00, +/* 00000EE0 */ 0x00, 0xD8, 0x5C, 0x00, 0x00, 0xE2, 0x5C, 0x00, 0x00, 0xE3, 0x5C, 0x00, 0x00, 0x03, 0x5D, 0x00, +/* 00000EF0 */ 0x00, 0x1D, 0x5D, 0x00, 0x00, 0x44, 0x5D, 0x00, 0x00, 0x78, 0x5D, 0x00, 0x00, 0xA0, 0x5D, 0x00, +/* 00000F00 */ 0x00, 0xBA, 0x5D, 0x00, 0x00, 0xE8, 0x5D, 0x00, 0x00, 0x0B, 0x5E, 0x00, 0x00, 0x6B, 0x5E, 0x00, +/* 00000F10 */ 0x00, 0xE8, 0x5E, 0x00, 0x00, 0xF6, 0x5E, 0x00, 0x00, 0x15, 0x5F, 0x00, 0x00, 0x26, 0x5F, 0x00, +/* 00000F20 */ 0x00, 0x30, 0x5F, 0x00, 0x00, 0x4F, 0x5F, 0x00, 0x00, 0x6B, 0x5F, 0x00, 0x00, 0x73, 0x5F, 0x00, +/* 00000F30 */ 0x00, 0x77, 0x5F, 0x00, 0x00, 0x00, 0x14, 0x73, 0x0C, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, 0xA8, +/* 00000F40 */ 0x41, 0xC0, 0x00, 0xFE, 0xD9, 0x02, 0x00, 0xFE, 0xB7, 0x01, 0xFE, 0xB7, 0x01, 0x01, 0x40, 0xFE, +/* 00000F50 */ 0x00, 0x90, 0xFE, 0xB7, 0x01, 0xFE, 0xC0, 0x5D, 0xFE, 0xC0, 0x5D, 0x01, 0x04, 0x04, 0x04, 0x04, +/* 00000F60 */ 0x03, 0x05, 0xFE, 0xDA, 0x02, 0x0A, 0x07, 0xA8, 0x00, 0xD6, 0x00, 0x04, 0x24, 0x00, 0x00, 0x01, +/* 00000F70 */ 0x05, 0x00, 0x00, 0x00, 0x00, 0x79, 0x0F, 0x00, 0x00, 0x7F, 0x1C, 0x00, 0xC0, 0x13, 0x10, 0x4B, +/* 00000F80 */ 0x00, 0x08, 0x01, 0xA2, 0x41, 0xD1, 0x00, 0x01, 0xFE, 0xC7, 0x01, 0xFE, 0xC7, 0x01, 0x12, 0x40, +/* 00000F90 */ 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0xC7, 0x01, 0xFE, 0xAD, 0x5D, 0xFE, 0xAD, 0x5D, 0x0C, 0x20, +/* 00000FA0 */ 0x28, 0x09, 0xF7, 0xE9, 0x3E, 0x3E, 0x3E, 0x3E, 0x04, 0x27, 0x08, 0x06, 0xFE, 0xDB, 0x02, 0x06, +/* 00000FB0 */ 0xFE, 0xDC, 0x02, 0x06, 0xFE, 0xDD, 0x02, 0x06, 0xFE, 0xDE, 0x02, 0x0B, 0x06, 0xFE, 0xDF, 0x02, +/* 00000FC0 */ 0x0C, 0x06, 0xFE, 0xE0, 0x02, 0x07, 0x05, 0xFE, 0xE1, 0x02, 0x06, 0xFE, 0xE2, 0x02, 0x01, 0x00, +/* 00000FD0 */ 0x06, 0xFE, 0xE3, 0x02, 0x06, 0xFE, 0xE4, 0x02, 0x06, 0xFE, 0xE5, 0x02, 0x06, 0xFE, 0xE6, 0x02, +/* 00000FE0 */ 0x06, 0xFE, 0xE7, 0x02, 0x06, 0xFE, 0xE8, 0x02, 0x06, 0xFE, 0xE9, 0x02, 0x06, 0xFE, 0xEA, 0x02, +/* 00000FF0 */ 0x06, 0xFE, 0xEB, 0x02, 0x06, 0xFE, 0xEC, 0x02, 0x06, 0xFE, 0xED, 0x02, 0x06, 0xFE, 0xEE, 0x02, +/* 00001000 */ 0x06, 0xFE, 0xEF, 0x02, 0x06, 0xFE, 0xF0, 0x02, 0x06, 0xFE, 0xF1, 0x02, 0x06, 0xFE, 0xF2, 0x02, +/* 00001010 */ 0x06, 0xFE, 0xF3, 0x02, 0xFE, 0x6C, 0x03, 0x5E, 0x28, 0x20, 0x00, 0x45, 0x21, 0x28, 0x5E, 0x28, +/* 00001020 */ 0x21, 0x01, 0x45, 0x22, 0x28, 0x5E, 0x28, 0x21, 0x02, 0x45, 0x23, 0x28, 0x5E, 0x28, 0x21, 0x03, +/* 00001030 */ 0x45, 0x24, 0x28, 0x5E, 0x28, 0x21, 0x04, 0x45, 0x25, 0x28, 0x6C, 0x28, 0x21, 0x05, 0x07, 0x03, +/* 00001040 */ 0x00, 0x59, 0x00, 0x21, 0x59, 0x01, 0x03, 0xD6, 0x00, 0x29, 0x59, 0x02, 0x29, 0x1F, 0x03, 0xFF, +/* 00001050 */ 0x28, 0x6C, 0x28, 0x21, 0x06, 0x07, 0x01, 0x00, 0x59, 0x00, 0x21, 0x1F, 0x01, 0x28, 0x28, 0x45, +/* 00001060 */ 0x26, 0x28, 0x01, 0x58, 0x01, 0x28, 0x5E, 0x28, 0x28, 0x07, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, +/* 00001070 */ 0x59, 0x01, 0x26, 0x1F, 0x02, 0x29, 0x25, 0x76, 0x29, 0x28, 0x08, 0x01, 0x58, 0x01, 0x28, 0x5E, +/* 00001080 */ 0x29, 0x21, 0x09, 0x76, 0x29, 0x28, 0x0A, 0x01, 0x58, 0x01, 0x28, 0x5E, 0x29, 0x21, 0x0B, 0x76, +/* 00001090 */ 0x29, 0x28, 0x0C, 0x01, 0x58, 0x01, 0x28, 0x5E, 0x29, 0x21, 0x0D, 0x76, 0x29, 0x28, 0x0E, 0x01, +/* 000010A0 */ 0x58, 0x01, 0x28, 0x5E, 0x29, 0x21, 0x0F, 0x76, 0x29, 0x28, 0x10, 0x01, 0x58, 0x01, 0x28, 0x5E, +/* 000010B0 */ 0x29, 0x21, 0x11, 0x76, 0x29, 0x28, 0x12, 0x45, 0x28, 0x23, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, +/* 000010C0 */ 0x01, 0x58, 0x01, 0x29, 0x5E, 0x29, 0x29, 0x13, 0x5E, 0x29, 0x29, 0x14, 0x59, 0x01, 0x29, 0x59, +/* 000010D0 */ 0x02, 0x04, 0x45, 0x29, 0x22, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0xCE, 0x00, 0x00, 0x00, 0x00, +/* 000010E0 */ 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x00, 0xD9, 0x01, 0x2B, 0x2A, 0x7A, 0x2B, 0x2A, 0x15, +/* 000010F0 */ 0x7A, 0x07, 0x2A, 0x16, 0x7A, 0x09, 0x2A, 0x17, 0x7A, 0x07, 0x2A, 0x18, 0x59, 0x01, 0x2A, 0x59, +/* 00001100 */ 0x02, 0x0B, 0x1F, 0x03, 0x29, 0x29, 0x59, 0x03, 0x29, 0x1F, 0x04, 0xFF, 0x28, 0x45, 0x28, 0x23, +/* 00001110 */ 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x01, 0x58, 0x01, 0x29, 0x5E, 0x29, 0x29, 0x19, 0x5E, 0x29, +/* 00001120 */ 0x29, 0x1A, 0x59, 0x01, 0x29, 0x5E, 0x29, 0x24, 0x1B, 0x59, 0x02, 0x29, 0x45, 0x29, 0x22, 0x07, +/* 00001130 */ 0x03, 0x00, 0x59, 0x00, 0x02, 0xCE, 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2A, 0x00, +/* 00001140 */ 0x00, 0x00, 0x7A, 0x0C, 0x2A, 0x1C, 0x7A, 0x09, 0x2A, 0x1D, 0x7A, 0x09, 0x2A, 0x1E, 0x7A, 0x07, +/* 00001150 */ 0x2A, 0x1F, 0x59, 0x01, 0x2A, 0x59, 0x02, 0x0B, 0x1F, 0x03, 0x29, 0x29, 0x59, 0x03, 0x29, 0x1F, +/* 00001160 */ 0x04, 0xFF, 0x28, 0x45, 0x28, 0x23, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x01, 0x58, 0x01, 0x29, +/* 00001170 */ 0x5E, 0x29, 0x29, 0x20, 0x5E, 0x29, 0x29, 0x21, 0x5E, 0x29, 0x29, 0x22, 0x59, 0x01, 0x29, 0x59, +/* 00001180 */ 0x02, 0x0D, 0x45, 0x29, 0x22, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0xCE, 0x30, 0x00, 0x00, 0x00, +/* 00001190 */ 0x02, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x7A, 0x0E, 0x2A, 0x23, 0x7A, 0x09, 0x2A, 0x24, +/* 000011A0 */ 0x7A, 0x09, 0x2A, 0x25, 0x7A, 0x07, 0x2A, 0x26, 0x59, 0x01, 0x2A, 0x59, 0x02, 0x0B, 0x1F, 0x03, +/* 000011B0 */ 0x29, 0x29, 0x59, 0x03, 0x29, 0x1F, 0x04, 0xFF, 0x28, 0x45, 0x28, 0x23, 0x07, 0x04, 0x00, 0x59, +/* 000011C0 */ 0x00, 0x02, 0x01, 0x58, 0x01, 0x29, 0x5E, 0x29, 0x29, 0x27, 0x5E, 0x29, 0x29, 0x28, 0x5E, 0x29, +/* 000011D0 */ 0x29, 0x29, 0x59, 0x01, 0x29, 0x59, 0x02, 0x0F, 0x45, 0x29, 0x22, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 000011E0 */ 0x02, 0xCE, 0x48, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x7A, 0x04, +/* 000011F0 */ 0x2A, 0x2A, 0x7A, 0x09, 0x2A, 0x2B, 0x7A, 0x09, 0x2A, 0x2C, 0x7A, 0x07, 0x2A, 0x2D, 0x59, 0x01, +/* 00001200 */ 0x2A, 0x59, 0x02, 0x0B, 0x1F, 0x03, 0x29, 0x29, 0x59, 0x03, 0x29, 0x1F, 0x04, 0xFF, 0x28, 0x6C, +/* 00001210 */ 0x28, 0x21, 0x2E, 0x07, 0x03, 0x00, 0x59, 0x00, 0x21, 0x59, 0x01, 0x10, 0xD6, 0x02, 0x29, 0x59, +/* 00001220 */ 0x02, 0x29, 0x1F, 0x03, 0xFF, 0x28, 0x6C, 0x28, 0x21, 0x2F, 0x07, 0x03, 0x00, 0x59, 0x00, 0x21, +/* 00001230 */ 0x59, 0x01, 0x11, 0xD6, 0x03, 0x29, 0x59, 0x02, 0x29, 0x1F, 0x03, 0xFF, 0x28, 0x6C, 0x28, 0x21, +/* 00001240 */ 0x30, 0x07, 0x03, 0x00, 0x59, 0x00, 0x21, 0x59, 0x01, 0x12, 0xD6, 0x04, 0x29, 0x59, 0x02, 0x29, +/* 00001250 */ 0x1F, 0x03, 0xFF, 0x28, 0x6C, 0x28, 0x21, 0x31, 0x07, 0x03, 0x00, 0x59, 0x00, 0x21, 0x59, 0x01, +/* 00001260 */ 0x13, 0xD6, 0x05, 0x29, 0x59, 0x02, 0x29, 0x1F, 0x03, 0xFF, 0x28, 0x6C, 0x28, 0x21, 0x32, 0x07, +/* 00001270 */ 0x03, 0x00, 0x59, 0x00, 0x21, 0x59, 0x01, 0x14, 0xD6, 0x06, 0x29, 0x59, 0x02, 0x29, 0x1F, 0x03, +/* 00001280 */ 0xFF, 0x28, 0x6C, 0x28, 0x21, 0x33, 0x07, 0x03, 0x00, 0x59, 0x00, 0x21, 0x59, 0x01, 0x15, 0xD6, +/* 00001290 */ 0x07, 0x29, 0x59, 0x02, 0x29, 0x1F, 0x03, 0xFF, 0x28, 0x6C, 0x28, 0x21, 0x34, 0x07, 0x03, 0x00, +/* 000012A0 */ 0x59, 0x00, 0x21, 0x59, 0x01, 0x16, 0xD6, 0x08, 0x29, 0x59, 0x02, 0x29, 0x1F, 0x03, 0xFF, 0x28, +/* 000012B0 */ 0x6C, 0x28, 0x21, 0x35, 0x07, 0x03, 0x00, 0x59, 0x00, 0x21, 0x59, 0x01, 0x17, 0xD6, 0x09, 0x29, +/* 000012C0 */ 0x59, 0x02, 0x29, 0x1F, 0x03, 0xFF, 0x28, 0x6C, 0x28, 0x21, 0x36, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 000012D0 */ 0x21, 0x59, 0x01, 0x18, 0xD6, 0x0A, 0x29, 0x59, 0x02, 0x29, 0x1F, 0x03, 0xFF, 0x28, 0x6C, 0x28, +/* 000012E0 */ 0x21, 0x37, 0x07, 0x03, 0x00, 0x59, 0x00, 0x21, 0x59, 0x01, 0x19, 0xD6, 0x0B, 0x29, 0x59, 0x02, +/* 000012F0 */ 0x29, 0x1F, 0x03, 0xFF, 0x28, 0x6C, 0x28, 0x21, 0x38, 0x07, 0x03, 0x00, 0x59, 0x00, 0x21, 0x59, +/* 00001300 */ 0x01, 0x1A, 0xD6, 0x0C, 0x29, 0x59, 0x02, 0x29, 0x1F, 0x03, 0xFF, 0x28, 0x6C, 0x28, 0x21, 0x39, +/* 00001310 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x21, 0x59, 0x01, 0x1B, 0xD6, 0x0D, 0x29, 0x59, 0x02, 0x29, 0x1F, +/* 00001320 */ 0x03, 0xFF, 0x28, 0x6C, 0x28, 0x21, 0x3A, 0x07, 0x03, 0x00, 0x59, 0x00, 0x21, 0x59, 0x01, 0x1C, +/* 00001330 */ 0xD6, 0x0E, 0x29, 0x59, 0x02, 0x29, 0x1F, 0x03, 0xFF, 0x28, 0x6C, 0x28, 0x21, 0x3B, 0x07, 0x03, +/* 00001340 */ 0x00, 0x59, 0x00, 0x21, 0x59, 0x01, 0x1D, 0xD6, 0x0F, 0x29, 0x59, 0x02, 0x29, 0x1F, 0x03, 0xFF, +/* 00001350 */ 0x28, 0x6C, 0x28, 0x21, 0x3C, 0x07, 0x03, 0x00, 0x59, 0x00, 0x21, 0x59, 0x01, 0x1E, 0xD6, 0x10, +/* 00001360 */ 0x29, 0x59, 0x02, 0x29, 0x1F, 0x03, 0xFF, 0x28, 0x6C, 0x28, 0x21, 0x3D, 0x07, 0x03, 0x00, 0x59, +/* 00001370 */ 0x00, 0x21, 0x59, 0x01, 0x1F, 0xD6, 0x11, 0x29, 0x59, 0x02, 0x29, 0x1F, 0x03, 0xFF, 0x28, 0xA8, +/* 00001380 */ 0x00, 0x24, 0x00, 0x04, 0x60, 0x00, 0x48, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, +/* 00001390 */ 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, +/* 000013A0 */ 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, +/* 000013B0 */ 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x18, 0x00, +/* 000013C0 */ 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, +/* 000013D0 */ 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, +/* 000013E0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, +/* 000013F0 */ 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x59, 0xFE, 0xBE, 0x02, 0xFE, 0x8F, 0x02, 0xFE, 0x66, 0x01, +/* 00001400 */ 0xFE, 0x95, 0x02, 0xFE, 0x7E, 0x02, 0xFE, 0x7B, 0x02, 0xFE, 0xDB, 0x02, 0xFE, 0x24, 0x01, 0xFE, +/* 00001410 */ 0xB6, 0x02, 0xFE, 0xB6, 0x02, 0xFE, 0xB0, 0x02, 0xFE, 0xB0, 0x02, 0xFE, 0xB5, 0x02, 0xFE, 0xB5, +/* 00001420 */ 0x02, 0xFE, 0xB3, 0x02, 0xFE, 0xB3, 0x02, 0xFE, 0xBA, 0x02, 0xFE, 0xBA, 0x02, 0xFE, 0xDB, 0x02, +/* 00001430 */ 0xFE, 0x24, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, +/* 00001440 */ 0xDB, 0x02, 0xFE, 0x24, 0x01, 0xFE, 0x79, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, +/* 00001450 */ 0x01, 0xFE, 0x95, 0x01, 0xFE, 0xDB, 0x02, 0xFE, 0x24, 0x01, 0xFE, 0x07, 0x01, 0xFE, 0x97, 0x01, +/* 00001460 */ 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0xDB, 0x02, 0xFE, 0x24, 0x01, 0xFE, +/* 00001470 */ 0x07, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x7E, +/* 00001480 */ 0x02, 0xFE, 0x7F, 0x02, 0xFE, 0x7F, 0x02, 0xFE, 0x7F, 0x02, 0xFE, 0x7F, 0x02, 0xFE, 0x7E, 0x02, +/* 00001490 */ 0xFE, 0x7F, 0x02, 0xFE, 0x7E, 0x02, 0xFE, 0x7E, 0x02, 0xFE, 0x7F, 0x02, 0xFE, 0x7F, 0x02, 0xFE, +/* 000014A0 */ 0x7F, 0x02, 0xFE, 0x7F, 0x02, 0xFE, 0x7F, 0x02, 0xFE, 0x7F, 0x02, 0xFE, 0x7F, 0x02, 0xFE, 0xE2, +/* 000014B0 */ 0x01, 0x22, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x29, 0x00, 0x07, 0x00, 0x35, 0x00, 0x07, 0x00, +/* 000014C0 */ 0x55, 0x00, 0x07, 0x00, 0x22, 0x00, 0x07, 0x00, 0x45, 0x00, 0x17, 0x00, 0x89, 0x02, 0x11, 0x00, +/* 000014D0 */ 0x63, 0x00, 0x19, 0x00, 0x4F, 0x00, 0x0C, 0x00, 0x4C, 0x00, 0x0C, 0x00, 0x54, 0x00, 0x0C, 0x00, +/* 000014E0 */ 0x6C, 0x00, 0x0C, 0x00, 0x48, 0x00, 0x0C, 0x00, 0x67, 0x00, 0x56, 0x00, 0xF5, 0x07, 0x56, 0x00, +/* 000014F0 */ 0xC2, 0x00, 0x56, 0x00, 0xAE, 0x00, 0x56, 0x00, 0xB1, 0x00, 0x17, 0x00, 0xBB, 0x00, 0x17, 0x00, +/* 00001500 */ 0x4D, 0x01, 0x17, 0x00, 0x53, 0x01, 0x17, 0x00, 0x5B, 0x01, 0x17, 0x00, 0x1E, 0x05, 0x17, 0x00, +/* 00001510 */ 0xD0, 0x01, 0x17, 0x00, 0x6A, 0x03, 0x17, 0x00, 0x4F, 0x09, 0x17, 0x00, 0x8E, 0x0E, 0x17, 0x00, +/* 00001520 */ 0x08, 0x03, 0x17, 0x00, 0x99, 0x03, 0x17, 0x00, 0xFC, 0x04, 0x17, 0x00, 0x6C, 0x05, 0x17, 0x00, +/* 00001530 */ 0x72, 0x05, 0x17, 0x00, 0x9C, 0x05, 0x19, 0x00, 0x69, 0x0A, 0x00, 0xE2, 0x2C, 0x00, 0x00, 0x39, +/* 00001540 */ 0x2A, 0x00, 0x00, 0xE2, 0x29, 0x00, 0x00, 0x2B, 0x29, 0x00, 0x00, 0x74, 0x28, 0x00, 0x00, 0xBD, +/* 00001550 */ 0x27, 0x00, 0x00, 0x11, 0x26, 0x00, 0x00, 0xD2, 0x24, 0x00, 0x00, 0x20, 0x23, 0x00, 0x00, 0xB0, +/* 00001560 */ 0x21, 0x00, 0x00, 0xAE, 0x1F, 0x00, 0x00, 0x76, 0x1E, 0x00, 0x00, 0x44, 0x1D, 0x00, 0x00, 0xF3, +/* 00001570 */ 0x1B, 0x00, 0x00, 0x91, 0x1A, 0x00, 0x00, 0x2F, 0x19, 0x00, 0x00, 0xAF, 0x17, 0x00, 0x00, 0x83, +/* 00001580 */ 0x15, 0x00, 0x00, 0x7F, 0x3C, 0x02, 0xC2, 0x43, 0x40, 0x13, 0x00, 0xFE, 0xF4, 0x01, 0x28, 0xA2, +/* 00001590 */ 0x41, 0xB1, 0x00, 0x13, 0xFE, 0x2E, 0x55, 0xFE, 0x2E, 0x55, 0x0B, 0xFE, 0x00, 0x90, 0x03, 0x02, +/* 000015A0 */ 0xFE, 0x2E, 0x55, 0xFE, 0x42, 0x0A, 0xFE, 0x42, 0x0A, 0x0F, 0x0C, 0x16, 0x08, 0x6A, 0x5C, 0x21, +/* 000015B0 */ 0x02, 0x02, 0x08, 0x08, 0x08, 0x08, 0x01, 0x16, 0xC0, 0xE8, 0xFE, 0x01, 0x01, 0xFE, 0x4B, 0x01, +/* 000015C0 */ 0x07, 0x08, 0x06, 0xFE, 0xFD, 0x02, 0x06, 0xFE, 0xFE, 0x02, 0x05, 0xFE, 0x08, 0x03, 0x01, 0x00, +/* 000015D0 */ 0x06, 0xFE, 0x01, 0x03, 0x01, 0x01, 0x0C, 0x0B, 0xFE, 0x55, 0x01, 0xB2, 0x13, 0x58, 0x10, 0x4E, +/* 000015E0 */ 0x0E, 0x4E, 0x0F, 0x4E, 0x11, 0x4E, 0x12, 0x4E, 0x14, 0x4E, 0x15, 0x15, 0x05, 0x00, 0x0D, 0x03, +/* 000015F0 */ 0xA8, 0x17, 0x45, 0x0D, 0x17, 0x4E, 0x0E, 0x4E, 0x0F, 0x4E, 0x11, 0x4E, 0x12, 0x4E, 0x14, 0x4E, +/* 00001600 */ 0x15, 0x01, 0x58, 0x01, 0x19, 0x6C, 0x18, 0x19, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x19, 0x59, +/* 00001610 */ 0x01, 0x10, 0x59, 0x02, 0x06, 0x1F, 0x03, 0x18, 0x18, 0x45, 0x17, 0x18, 0x45, 0x19, 0x18, 0x0D, +/* 00001620 */ 0x05, 0x00, 0x19, 0x03, 0x01, 0x73, 0x01, 0x10, 0x16, 0x5E, 0x1A, 0x19, 0x01, 0x45, 0x0E, 0x1A, +/* 00001630 */ 0x5E, 0x1A, 0x19, 0x02, 0x45, 0x0F, 0x1A, 0x2A, 0x17, 0x0C, 0x15, 0x03, 0x00, 0x17, 0x08, 0x09, +/* 00001640 */ 0x15, 0x00, 0x01, 0x58, 0x01, 0x18, 0x6C, 0x17, 0x18, 0x03, 0x07, 0x02, 0x00, 0x59, 0x00, 0x18, +/* 00001650 */ 0x59, 0x01, 0x06, 0x1F, 0x02, 0xFF, 0x17, 0x14, 0x03, 0x00, 0x0F, 0x07, 0x09, 0x1F, 0x00, 0xA8, +/* 00001660 */ 0x17, 0x14, 0x03, 0x00, 0x0D, 0x17, 0x09, 0x15, 0x00, 0x01, 0x58, 0x01, 0x18, 0x6C, 0x17, 0x18, +/* 00001670 */ 0x04, 0x07, 0x02, 0x00, 0x59, 0x00, 0x18, 0x59, 0x01, 0x06, 0x1F, 0x02, 0xFF, 0x17, 0x45, 0x11, +/* 00001680 */ 0x07, 0xA8, 0x17, 0x45, 0x12, 0x17, 0xA6, 0x17, 0x13, 0x05, 0x11, 0x03, 0x00, 0x17, 0x09, 0x09, +/* 00001690 */ 0x06, 0x00, 0x45, 0x12, 0x0D, 0x09, 0x44, 0x00, 0x45, 0x14, 0x0A, 0xEC, 0x00, 0x0F, 0x22, 0x00, +/* 000016A0 */ 0x14, 0x12, 0x03, 0x00, 0x11, 0x0F, 0x09, 0x1A, 0x00, 0xBC, 0x17, 0x11, 0x0E, 0x00, 0x00, 0x0E, +/* 000016B0 */ 0x0A, 0x00, 0x17, 0x45, 0x14, 0x0B, 0x97, 0x17, 0x0E, 0x11, 0x45, 0x12, 0x17, 0x26, 0x11, 0x11, +/* 000016C0 */ 0x09, 0xD8, 0xFF, 0x0F, 0x15, 0x00, 0x14, 0x01, 0x58, 0x01, 0x18, 0x6C, 0x17, 0x18, 0x06, 0x07, +/* 000016D0 */ 0x02, 0x00, 0x59, 0x00, 0x18, 0x59, 0x01, 0x06, 0x1F, 0x02, 0xFF, 0x17, 0xEC, 0x01, 0x12, 0x03, +/* 000016E0 */ 0x00, 0x11, 0x0F, 0x09, 0x40, 0x00, 0xBC, 0x17, 0x11, 0x0E, 0x01, 0x00, 0x0E, 0x30, 0x00, 0x17, +/* 000016F0 */ 0x97, 0x17, 0x0E, 0x11, 0x45, 0x15, 0x17, 0x01, 0x58, 0x01, 0x18, 0x6C, 0x17, 0x18, 0x07, 0x07, +/* 00001700 */ 0x07, 0x00, 0x59, 0x00, 0x18, 0x59, 0x01, 0x0C, 0xA8, 0x19, 0x59, 0x02, 0x19, 0x59, 0x03, 0x12, +/* 00001710 */ 0x59, 0x04, 0x15, 0x59, 0x05, 0x11, 0x59, 0x06, 0x0E, 0x1F, 0x07, 0x17, 0x17, 0x45, 0x12, 0x17, +/* 00001720 */ 0x26, 0x11, 0x11, 0x09, 0xB6, 0xFF, 0x45, 0x00, 0x12, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, +/* 00001730 */ 0xFE, 0xE9, 0x02, 0xFE, 0xFD, 0x02, 0xFE, 0xFE, 0x02, 0xFE, 0xBA, 0x02, 0xFE, 0xB5, 0x02, 0xD1, +/* 00001740 */ 0xFE, 0xB5, 0x02, 0xFE, 0x8B, 0x02, 0xFE, 0x44, 0x55, 0x19, 0x10, 0x00, 0x00, 0x00, 0x16, 0x00, +/* 00001750 */ 0xBC, 0x00, 0x36, 0x00, 0xA8, 0x00, 0x0B, 0x00, 0x34, 0x00, 0x15, 0x00, 0xB5, 0x00, 0x12, 0x00, +/* 00001760 */ 0x3B, 0x00, 0x15, 0x00, 0xA3, 0x00, 0x03, 0x00, 0x13, 0x00, 0x05, 0x00, 0x7C, 0x00, 0x0C, 0x00, +/* 00001770 */ 0x78, 0x00, 0x06, 0x00, 0x92, 0x00, 0x05, 0x00, 0x63, 0x00, 0x0C, 0x00, 0xEC, 0x00, 0x0A, 0x00, +/* 00001780 */ 0x22, 0x00, 0x03, 0x00, 0x25, 0x00, 0x07, 0x00, 0x59, 0x00, 0x06, 0x00, 0x60, 0x00, 0x04, 0x00, +/* 00001790 */ 0x21, 0x00, 0x17, 0x00, 0x9A, 0x00, 0x08, 0x00, 0x9A, 0x00, 0x0A, 0x00, 0x4C, 0x00, 0x07, 0x00, +/* 000017A0 */ 0x83, 0x00, 0x29, 0x00, 0xA6, 0x00, 0x06, 0x00, 0x36, 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, 0x7F, +/* 000017B0 */ 0x3C, 0x00, 0xC2, 0x43, 0x40, 0x13, 0x00, 0xFE, 0xC4, 0x01, 0x2A, 0xA2, 0x41, 0xD1, 0x00, 0x12, +/* 000017C0 */ 0xFE, 0x94, 0x4F, 0xFE, 0x94, 0x4F, 0x09, 0xFE, 0x00, 0x90, 0x03, 0x02, 0xFE, 0x94, 0x4F, 0xFE, +/* 000017D0 */ 0x6E, 0x05, 0xFE, 0x6E, 0x05, 0x0D, 0x0A, 0x12, 0x04, 0x46, 0x38, 0x0E, 0x01, 0x04, 0x04, 0x04, +/* 000017E0 */ 0x04, 0x01, 0x12, 0xA1, 0xD3, 0x08, 0x06, 0xFE, 0xFD, 0x02, 0x06, 0xFE, 0xFE, 0x02, 0x05, 0xFE, +/* 000017F0 */ 0x07, 0x03, 0x01, 0x00, 0x0C, 0x0B, 0x01, 0x01, 0xDD, 0x58, 0x0E, 0x4E, 0x0C, 0x4E, 0x0D, 0x4E, +/* 00001800 */ 0x0F, 0x4E, 0x10, 0x4E, 0x11, 0x15, 0x05, 0x00, 0x0B, 0x02, 0xA8, 0x13, 0x45, 0x0B, 0x13, 0x4E, +/* 00001810 */ 0x0C, 0x4E, 0x0D, 0x4E, 0x0F, 0x4E, 0x10, 0x4E, 0x11, 0x01, 0x58, 0x01, 0x15, 0x6C, 0x14, 0x15, +/* 00001820 */ 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x15, 0x59, 0x01, 0x0E, 0x59, 0x02, 0x05, 0x1F, 0x03, 0x14, +/* 00001830 */ 0x14, 0x45, 0x13, 0x14, 0x45, 0x15, 0x14, 0x0D, 0x05, 0x00, 0x15, 0x02, 0x01, 0x73, 0x01, 0x10, +/* 00001840 */ 0x16, 0x5E, 0x16, 0x15, 0x01, 0x45, 0x0C, 0x16, 0x5E, 0x16, 0x15, 0x02, 0x45, 0x0D, 0x16, 0x14, +/* 00001850 */ 0x03, 0x00, 0x0D, 0x06, 0x09, 0x06, 0x00, 0x45, 0x00, 0x07, 0x09, 0x77, 0x00, 0x01, 0x58, 0x01, +/* 00001860 */ 0x14, 0x6C, 0x13, 0x14, 0x03, 0x07, 0x02, 0x00, 0x59, 0x00, 0x14, 0x59, 0x01, 0x0B, 0x1F, 0x02, +/* 00001870 */ 0x13, 0x13, 0x45, 0x0F, 0x13, 0xA8, 0x13, 0x45, 0x10, 0x13, 0x10, 0x03, 0x00, 0x0F, 0x06, 0x09, +/* 00001880 */ 0x06, 0x00, 0x45, 0x10, 0x0F, 0x09, 0x12, 0x00, 0x2D, 0x13, 0x0D, 0x0F, 0x45, 0x10, 0x13, 0x12, +/* 00001890 */ 0x03, 0x00, 0x10, 0x06, 0x09, 0x03, 0x00, 0x45, 0x10, 0x06, 0xEC, 0x00, 0x12, 0x03, 0x00, 0x10, +/* 000018A0 */ 0x0D, 0x09, 0x28, 0x00, 0x97, 0x13, 0x0C, 0x10, 0x45, 0x11, 0x13, 0x14, 0x10, 0x00, 0x0A, 0x11, +/* 000018B0 */ 0x15, 0x03, 0x00, 0x0A, 0x0A, 0x09, 0x0E, 0x00, 0x15, 0x03, 0x00, 0x11, 0x11, 0x09, 0x06, 0x00, +/* 000018C0 */ 0x45, 0x00, 0x08, 0x09, 0x0E, 0x00, 0x26, 0x10, 0x10, 0x09, 0xCE, 0xFF, 0x45, 0x00, 0x07, 0x09, +/* 000018D0 */ 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xE9, 0x02, 0xFE, 0xFD, 0x02, 0xFE, 0xFE, 0x02, 0xFE, +/* 000018E0 */ 0x81, 0x02, 0xFE, 0xAD, 0x4F, 0x12, 0x0C, 0x00, 0x00, 0x00, 0x14, 0x00, 0xBB, 0x00, 0x36, 0x00, +/* 000018F0 */ 0x83, 0x00, 0x08, 0x00, 0x1D, 0x00, 0x06, 0x00, 0x86, 0x00, 0x18, 0x00, 0x36, 0x00, 0x05, 0x00, +/* 00001900 */ 0x98, 0x00, 0x08, 0x00, 0x1A, 0x00, 0x06, 0x00, 0x2D, 0x00, 0x07, 0x00, 0x1A, 0x00, 0x08, 0x00, +/* 00001910 */ 0x1D, 0x00, 0x05, 0x00, 0x4F, 0x00, 0x08, 0x00, 0x5C, 0x00, 0x07, 0x00, 0x6F, 0x00, 0x15, 0x00, +/* 00001920 */ 0x85, 0x00, 0x06, 0x00, 0x46, 0x00, 0x06, 0x00, 0x30, 0x00, 0x08, 0x00, 0x12, 0x00, 0x00, 0x7F, +/* 00001930 */ 0x3C, 0x02, 0xC2, 0x43, 0x40, 0x13, 0x00, 0xFE, 0x9F, 0x01, 0x27, 0xA2, 0x41, 0xD1, 0x00, 0x11, +/* 00001940 */ 0xFE, 0x1F, 0x4A, 0xFE, 0x1F, 0x4A, 0x09, 0xFE, 0x00, 0x90, 0x03, 0x02, 0xFE, 0x1F, 0x4A, 0xFE, +/* 00001950 */ 0x47, 0x05, 0xFE, 0x47, 0x05, 0x0C, 0x0B, 0x12, 0x07, 0x40, 0x37, 0x16, 0x01, 0x01, 0x05, 0x05, +/* 00001960 */ 0x05, 0x05, 0x01, 0x12, 0x75, 0xC1, 0x08, 0x06, 0xFE, 0xFD, 0x02, 0x06, 0xFE, 0xFE, 0x02, 0x05, +/* 00001970 */ 0xFE, 0x06, 0x03, 0x01, 0x00, 0x06, 0xFE, 0x01, 0x03, 0x0C, 0x01, 0x01, 0x0B, 0xCB, 0x58, 0x0F, +/* 00001980 */ 0x4E, 0x0D, 0x4E, 0x0E, 0x4E, 0x10, 0x4E, 0x11, 0x15, 0x05, 0x00, 0x0C, 0x02, 0xA8, 0x13, 0x45, +/* 00001990 */ 0x0C, 0x13, 0x4E, 0x0D, 0x4E, 0x0E, 0x4E, 0x10, 0x4E, 0x11, 0x01, 0x58, 0x01, 0x15, 0x6C, 0x14, +/* 000019A0 */ 0x15, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x15, 0x59, 0x01, 0x0F, 0x59, 0x02, 0x05, 0x1F, 0x03, +/* 000019B0 */ 0x14, 0x14, 0x45, 0x13, 0x14, 0x45, 0x15, 0x14, 0x0D, 0x05, 0x00, 0x15, 0x02, 0x01, 0x73, 0x01, +/* 000019C0 */ 0x10, 0x16, 0x5E, 0x16, 0x15, 0x01, 0x45, 0x0D, 0x16, 0x5E, 0x16, 0x15, 0x02, 0x45, 0x0E, 0x16, +/* 000019D0 */ 0x2A, 0x13, 0x0B, 0x15, 0x03, 0x00, 0x13, 0x07, 0x09, 0x15, 0x00, 0x01, 0x58, 0x01, 0x14, 0x6C, +/* 000019E0 */ 0x13, 0x14, 0x03, 0x07, 0x02, 0x00, 0x59, 0x00, 0x14, 0x59, 0x01, 0x05, 0x1F, 0x02, 0xFF, 0x13, +/* 000019F0 */ 0x45, 0x10, 0x06, 0xEC, 0x00, 0x12, 0x03, 0x00, 0x10, 0x0E, 0x09, 0x42, 0x00, 0xBC, 0x13, 0x10, +/* 00001A00 */ 0x0D, 0x00, 0x00, 0x0E, 0x32, 0x00, 0x13, 0x97, 0x13, 0x0D, 0x10, 0x45, 0x11, 0x13, 0x01, 0x58, +/* 00001A10 */ 0x01, 0x14, 0x6C, 0x13, 0x14, 0x04, 0x07, 0x06, 0x00, 0x59, 0x00, 0x14, 0x59, 0x01, 0x0B, 0x59, +/* 00001A20 */ 0x02, 0x0C, 0x59, 0x03, 0x11, 0x59, 0x04, 0x10, 0x59, 0x05, 0x0D, 0x1F, 0x06, 0x13, 0x13, 0x0F, +/* 00001A30 */ 0x06, 0x00, 0x13, 0x45, 0x00, 0x08, 0x09, 0x0E, 0x00, 0x26, 0x10, 0x10, 0x09, 0xB4, 0xFF, 0x45, +/* 00001A40 */ 0x00, 0x0A, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xE9, 0x02, 0xFE, 0xFD, 0x02, 0xFE, +/* 00001A50 */ 0xFE, 0x02, 0xFE, 0xBA, 0x02, 0xFE, 0x8B, 0x02, 0xFE, 0x35, 0x4A, 0x0D, 0x0A, 0x00, 0x00, 0x00, +/* 00001A60 */ 0x12, 0x00, 0xBE, 0x00, 0x36, 0x00, 0xA7, 0x00, 0x0B, 0x00, 0x34, 0x00, 0x15, 0x00, 0xC2, 0x00, +/* 00001A70 */ 0x05, 0x00, 0x3B, 0x00, 0x08, 0x00, 0x9A, 0x00, 0x0A, 0x00, 0x4C, 0x00, 0x07, 0x00, 0xB0, 0x00, +/* 00001A80 */ 0x25, 0x00, 0x6B, 0x00, 0x06, 0x00, 0x59, 0x00, 0x06, 0x00, 0x2F, 0x00, 0x08, 0x00, 0x11, 0x00, +/* 00001A90 */ 0x00, 0x7F, 0x3C, 0x02, 0xC2, 0x43, 0x40, 0x13, 0x00, 0xFE, 0x7A, 0x01, 0x26, 0xA2, 0x41, 0xD1, +/* 00001AA0 */ 0x00, 0x10, 0xFE, 0xB2, 0x44, 0xFE, 0xB2, 0x44, 0x09, 0xFE, 0x00, 0x90, 0x03, 0x02, 0xFE, 0xB2, +/* 00001AB0 */ 0x44, 0xFE, 0x42, 0x05, 0xFE, 0x42, 0x05, 0x0C, 0x0B, 0x12, 0x07, 0x40, 0x37, 0x16, 0x01, 0x01, +/* 00001AC0 */ 0x05, 0x05, 0x05, 0x05, 0x01, 0x12, 0x75, 0xC1, 0x08, 0x06, 0xFE, 0xFD, 0x02, 0x06, 0xFE, 0xFE, +/* 00001AD0 */ 0x02, 0x05, 0xFE, 0x05, 0x03, 0x01, 0x00, 0x06, 0xFE, 0x01, 0x03, 0x0B, 0x01, 0x01, 0x0C, 0xCB, +/* 00001AE0 */ 0x58, 0x0F, 0x4E, 0x0D, 0x4E, 0x0E, 0x4E, 0x10, 0x4E, 0x11, 0x15, 0x05, 0x00, 0x0C, 0x02, 0xA8, +/* 00001AF0 */ 0x13, 0x45, 0x0C, 0x13, 0x4E, 0x0D, 0x4E, 0x0E, 0x4E, 0x10, 0x4E, 0x11, 0x01, 0x58, 0x01, 0x15, +/* 00001B00 */ 0x6C, 0x14, 0x15, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x15, 0x59, 0x01, 0x0F, 0x59, 0x02, 0x05, +/* 00001B10 */ 0x1F, 0x03, 0x14, 0x14, 0x45, 0x13, 0x14, 0x45, 0x15, 0x14, 0x0D, 0x05, 0x00, 0x15, 0x02, 0x01, +/* 00001B20 */ 0x73, 0x01, 0x10, 0x16, 0x5E, 0x16, 0x15, 0x01, 0x45, 0x0D, 0x16, 0x5E, 0x16, 0x15, 0x02, 0x45, +/* 00001B30 */ 0x0E, 0x16, 0x2A, 0x13, 0x0B, 0x15, 0x03, 0x00, 0x13, 0x07, 0x09, 0x15, 0x00, 0x01, 0x58, 0x01, +/* 00001B40 */ 0x14, 0x6C, 0x13, 0x14, 0x03, 0x07, 0x02, 0x00, 0x59, 0x00, 0x14, 0x59, 0x01, 0x05, 0x1F, 0x02, +/* 00001B50 */ 0xFF, 0x13, 0x45, 0x10, 0x06, 0xEC, 0x00, 0x12, 0x03, 0x00, 0x10, 0x0E, 0x09, 0x42, 0x00, 0xBC, +/* 00001B60 */ 0x13, 0x10, 0x0D, 0x00, 0x00, 0x0E, 0x32, 0x00, 0x13, 0x97, 0x13, 0x0D, 0x10, 0x45, 0x11, 0x13, +/* 00001B70 */ 0x01, 0x58, 0x01, 0x14, 0x6C, 0x13, 0x14, 0x04, 0x07, 0x06, 0x00, 0x59, 0x00, 0x14, 0x59, 0x01, +/* 00001B80 */ 0x0B, 0x59, 0x02, 0x0C, 0x59, 0x03, 0x11, 0x59, 0x04, 0x10, 0x59, 0x05, 0x0D, 0x1F, 0x06, 0x13, +/* 00001B90 */ 0x13, 0x0E, 0x06, 0x00, 0x13, 0x45, 0x00, 0x08, 0x09, 0x0E, 0x00, 0x26, 0x10, 0x10, 0x09, 0xB4, +/* 00001BA0 */ 0xFF, 0x45, 0x00, 0x0A, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xE9, 0x02, 0xFE, 0xFD, +/* 00001BB0 */ 0x02, 0xFE, 0xFE, 0x02, 0xFE, 0xBA, 0x02, 0xFE, 0x8B, 0x02, 0xFE, 0xC8, 0x44, 0x0D, 0x0A, 0x00, +/* 00001BC0 */ 0x00, 0x00, 0x12, 0x00, 0xBD, 0x00, 0x36, 0x00, 0xA6, 0x00, 0x0B, 0x00, 0x34, 0x00, 0x15, 0x00, +/* 00001BD0 */ 0xC1, 0x00, 0x05, 0x00, 0x3B, 0x00, 0x08, 0x00, 0x9A, 0x00, 0x0A, 0x00, 0x4C, 0x00, 0x07, 0x00, +/* 00001BE0 */ 0xAE, 0x00, 0x25, 0x00, 0x6A, 0x00, 0x06, 0x00, 0x58, 0x00, 0x06, 0x00, 0x30, 0x00, 0x08, 0x00, +/* 00001BF0 */ 0x12, 0x00, 0x00, 0x7F, 0x3C, 0x02, 0xC2, 0x43, 0x40, 0x13, 0x00, 0xFE, 0x58, 0x01, 0x29, 0xA2, +/* 00001C00 */ 0x41, 0xD1, 0x00, 0x0F, 0xFE, 0xB9, 0x3F, 0xFE, 0xB9, 0x3F, 0x09, 0xFE, 0x00, 0x90, 0x03, 0x02, +/* 00001C10 */ 0xFE, 0xB9, 0x3F, 0xFE, 0xCF, 0x04, 0xFE, 0xCF, 0x04, 0x0C, 0x09, 0x10, 0x07, 0x3D, 0x36, 0x13, +/* 00001C20 */ 0x01, 0x01, 0x05, 0x05, 0x05, 0x05, 0x01, 0x10, 0x75, 0xB7, 0x08, 0x06, 0xFE, 0xFD, 0x02, 0x06, +/* 00001C30 */ 0xFE, 0xFE, 0x02, 0x05, 0xFE, 0x04, 0x03, 0x01, 0x00, 0x06, 0xFE, 0x01, 0x03, 0x01, 0x01, 0xC0, +/* 00001C40 */ 0x58, 0x0D, 0x4E, 0x0B, 0x4E, 0x0C, 0x4E, 0x0E, 0x4E, 0x0F, 0x15, 0x05, 0x00, 0x0A, 0x02, 0xA8, +/* 00001C50 */ 0x11, 0x45, 0x0A, 0x11, 0x4E, 0x0B, 0x4E, 0x0C, 0x4E, 0x0E, 0x4E, 0x0F, 0x01, 0x58, 0x01, 0x13, +/* 00001C60 */ 0x6C, 0x12, 0x13, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x13, 0x59, 0x01, 0x0D, 0x59, 0x02, 0x05, +/* 00001C70 */ 0x1F, 0x03, 0x12, 0x12, 0x45, 0x11, 0x12, 0x45, 0x13, 0x12, 0x0D, 0x05, 0x00, 0x13, 0x02, 0x01, +/* 00001C80 */ 0x73, 0x01, 0x10, 0x16, 0x5E, 0x14, 0x13, 0x01, 0x45, 0x0B, 0x14, 0x5E, 0x14, 0x13, 0x02, 0x45, +/* 00001C90 */ 0x0C, 0x14, 0x2A, 0x11, 0x09, 0x15, 0x03, 0x00, 0x11, 0x07, 0x09, 0x15, 0x00, 0x01, 0x58, 0x01, +/* 00001CA0 */ 0x12, 0x6C, 0x11, 0x12, 0x03, 0x07, 0x02, 0x00, 0x59, 0x00, 0x12, 0x59, 0x01, 0x05, 0x1F, 0x02, +/* 00001CB0 */ 0xFF, 0x11, 0x45, 0x0E, 0x06, 0xEC, 0x00, 0x12, 0x03, 0x00, 0x0E, 0x0C, 0x09, 0x38, 0x00, 0xBC, +/* 00001CC0 */ 0x11, 0x0E, 0x0B, 0x00, 0x00, 0x0E, 0x28, 0x00, 0x11, 0x97, 0x11, 0x0B, 0x0E, 0x45, 0x0F, 0x11, +/* 00001CD0 */ 0x01, 0x58, 0x01, 0x12, 0x6C, 0x11, 0x12, 0x04, 0x07, 0x06, 0x00, 0x59, 0x00, 0x12, 0x59, 0x01, +/* 00001CE0 */ 0x09, 0x59, 0x02, 0x0A, 0x59, 0x03, 0x0F, 0x59, 0x04, 0x0E, 0x59, 0x05, 0x0B, 0x1F, 0x06, 0xFF, +/* 00001CF0 */ 0x11, 0x26, 0x0E, 0x0E, 0x09, 0xBE, 0xFF, 0xA8, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, +/* 00001D00 */ 0xFE, 0xE9, 0x02, 0xFE, 0xFD, 0x02, 0xFE, 0xFE, 0x02, 0xFE, 0xBA, 0x02, 0xFE, 0x8B, 0x02, 0xFE, +/* 00001D10 */ 0xCF, 0x3F, 0x0C, 0x0A, 0x00, 0x00, 0x00, 0x12, 0x00, 0xB8, 0x00, 0x36, 0x00, 0xB1, 0x00, 0x0B, +/* 00001D20 */ 0x00, 0x34, 0x00, 0x15, 0x00, 0xC4, 0x00, 0x05, 0x00, 0x3B, 0x00, 0x08, 0x00, 0x9A, 0x00, 0x0A, +/* 00001D30 */ 0x00, 0x4C, 0x00, 0x07, 0x00, 0x63, 0x00, 0x21, 0x00, 0x89, 0x00, 0x06, 0x00, 0x34, 0x00, 0x07, +/* 00001D40 */ 0x00, 0x16, 0x00, 0x00, 0x7F, 0x1C, 0x00, 0xC0, 0x03, 0x00, 0x03, 0x00, 0xFE, 0x46, 0x01, 0x29, +/* 00001D50 */ 0xA2, 0x41, 0xD1, 0x00, 0x0E, 0xFE, 0x20, 0x3C, 0xFE, 0x20, 0x3C, 0x09, 0xFE, 0x00, 0x90, 0x03, +/* 00001D60 */ 0x02, 0xFE, 0x20, 0x3C, 0xFE, 0x6C, 0x03, 0xFE, 0x6C, 0x03, 0x0A, 0x08, 0x0E, 0x08, 0x3A, 0x33, +/* 00001D70 */ 0x06, 0x06, 0x06, 0x06, 0x08, 0x06, 0xFE, 0xFD, 0x02, 0x06, 0xFE, 0xFE, 0x02, 0x05, 0xFE, 0x03, +/* 00001D80 */ 0x03, 0x01, 0x00, 0x06, 0xFE, 0x01, 0x03, 0xB7, 0x58, 0x0C, 0x4E, 0x0A, 0x4E, 0x0B, 0x4E, 0x0D, +/* 00001D90 */ 0x15, 0x05, 0x00, 0x09, 0x02, 0xA8, 0x0E, 0x45, 0x09, 0x0E, 0x4E, 0x0A, 0x4E, 0x0B, 0x4E, 0x0D, +/* 00001DA0 */ 0x01, 0x58, 0x01, 0x10, 0x6C, 0x0F, 0x10, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x10, 0x59, 0x01, +/* 00001DB0 */ 0x0C, 0x59, 0x02, 0x05, 0x1F, 0x03, 0x0F, 0x0F, 0x45, 0x0E, 0x0F, 0x45, 0x10, 0x0F, 0x0D, 0x05, +/* 00001DC0 */ 0x00, 0x10, 0x02, 0x01, 0x73, 0x01, 0x10, 0x16, 0x5E, 0x11, 0x10, 0x01, 0x45, 0x0A, 0x11, 0x5E, +/* 00001DD0 */ 0x11, 0x10, 0x02, 0x45, 0x0B, 0x11, 0x2A, 0x0E, 0x08, 0x15, 0x03, 0x00, 0x0E, 0x07, 0x09, 0x15, +/* 00001DE0 */ 0x00, 0x01, 0x58, 0x01, 0x0F, 0x6C, 0x0E, 0x0F, 0x03, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0F, 0x59, +/* 00001DF0 */ 0x01, 0x05, 0x1F, 0x02, 0xFF, 0x0E, 0x01, 0x58, 0x01, 0x0F, 0x6C, 0x0E, 0x0F, 0x04, 0x07, 0x03, +/* 00001E00 */ 0x00, 0x59, 0x00, 0x0F, 0x59, 0x01, 0x0A, 0x59, 0x02, 0x06, 0x1F, 0x03, 0x0E, 0x0E, 0x45, 0x0D, +/* 00001E10 */ 0x0E, 0x01, 0x58, 0x01, 0x0F, 0x6C, 0x0E, 0x0F, 0x05, 0x07, 0x07, 0x00, 0x59, 0x00, 0x0F, 0x59, +/* 00001E20 */ 0x01, 0x0D, 0x59, 0x02, 0x0A, 0x59, 0x03, 0x0B, 0x59, 0x04, 0x06, 0x59, 0x05, 0x08, 0x59, 0x06, +/* 00001E30 */ 0x09, 0x1F, 0x07, 0xFF, 0x0E, 0x45, 0x00, 0x0D, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, +/* 00001E40 */ 0xE9, 0x02, 0xFE, 0xFD, 0x02, 0xFE, 0xFE, 0x02, 0xFE, 0xBA, 0x02, 0xFE, 0x82, 0x02, 0xFE, 0xEC, +/* 00001E50 */ 0x02, 0xFE, 0x3A, 0x3C, 0x08, 0x08, 0x00, 0x00, 0x00, 0x10, 0x00, 0x8B, 0x00, 0x36, 0x00, 0xAE, +/* 00001E60 */ 0x00, 0x0B, 0x00, 0x38, 0x00, 0x15, 0x00, 0xE1, 0x00, 0x1B, 0x00, 0x83, 0x00, 0x24, 0x00, 0x6E, +/* 00001E70 */ 0x00, 0x08, 0x00, 0x0E, 0x00, 0x00, 0x7F, 0x1C, 0x00, 0xC0, 0x03, 0x00, 0x03, 0x00, 0xFE, 0x35, +/* 00001E80 */ 0x01, 0x26, 0xA2, 0x41, 0xD1, 0x00, 0x0D, 0xFE, 0x15, 0x39, 0xFE, 0x15, 0x39, 0x09, 0xFE, 0x00, +/* 00001E90 */ 0x90, 0x02, 0x01, 0xFE, 0x15, 0x39, 0xFE, 0xDE, 0x02, 0xFE, 0xDE, 0x02, 0x0A, 0x08, 0x0E, 0x07, +/* 00001EA0 */ 0x3F, 0x36, 0x06, 0x06, 0x06, 0x06, 0x08, 0x06, 0xFE, 0xFD, 0x02, 0x06, 0xFE, 0xFE, 0x02, 0x05, +/* 00001EB0 */ 0xFE, 0x02, 0x03, 0x01, 0x00, 0x01, 0x01, 0xC3, 0x58, 0x0B, 0x4E, 0x09, 0x4E, 0x0A, 0x4E, 0x0C, +/* 00001EC0 */ 0x4E, 0x0D, 0x15, 0x05, 0x00, 0x08, 0x02, 0xA8, 0x0E, 0x45, 0x08, 0x0E, 0x4E, 0x09, 0x4E, 0x0A, +/* 00001ED0 */ 0x4E, 0x0C, 0x4E, 0x0D, 0x01, 0x58, 0x01, 0x10, 0x6C, 0x0F, 0x10, 0x00, 0x07, 0x03, 0x00, 0x59, +/* 00001EE0 */ 0x00, 0x10, 0x59, 0x01, 0x0B, 0x59, 0x02, 0x05, 0x1F, 0x03, 0x0F, 0x0F, 0x45, 0x0E, 0x0F, 0x45, +/* 00001EF0 */ 0x10, 0x0F, 0x0D, 0x05, 0x00, 0x10, 0x02, 0x01, 0x73, 0x01, 0x10, 0x16, 0x5E, 0x11, 0x10, 0x01, +/* 00001F00 */ 0x45, 0x09, 0x11, 0x5E, 0x11, 0x10, 0x02, 0x45, 0x0A, 0x11, 0xA8, 0x0E, 0x15, 0x03, 0x00, 0x08, +/* 00001F10 */ 0x0E, 0x09, 0x1B, 0x00, 0x01, 0x58, 0x01, 0x10, 0x6C, 0x0F, 0x10, 0x03, 0x07, 0x02, 0x00, 0x59, +/* 00001F20 */ 0x00, 0x10, 0x59, 0x01, 0x08, 0x1F, 0x02, 0x0F, 0x0F, 0x45, 0x0E, 0x0F, 0x09, 0x03, 0x00, 0x46, +/* 00001F30 */ 0x0E, 0x07, 0x45, 0x0C, 0x0E, 0x01, 0x58, 0x01, 0x0F, 0x6C, 0x0E, 0x0F, 0x04, 0x07, 0x03, 0x00, +/* 00001F40 */ 0x59, 0x00, 0x0F, 0x59, 0x01, 0x09, 0x59, 0x02, 0x06, 0x1F, 0x03, 0x0E, 0x0E, 0x45, 0x0D, 0x0E, +/* 00001F50 */ 0x01, 0x58, 0x01, 0x0F, 0x6C, 0x0E, 0x0F, 0x05, 0x07, 0x06, 0x00, 0x59, 0x00, 0x0F, 0x59, 0x01, +/* 00001F60 */ 0x0D, 0x59, 0x02, 0x09, 0x59, 0x03, 0x0A, 0x59, 0x04, 0x06, 0x59, 0x05, 0x0C, 0x1F, 0x06, 0xFF, +/* 00001F70 */ 0x0E, 0x45, 0x00, 0x0D, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xE9, 0x02, 0xFE, 0xFD, +/* 00001F80 */ 0x02, 0xFE, 0xFE, 0x02, 0xFE, 0x81, 0x02, 0xFE, 0x82, 0x02, 0xFE, 0xEB, 0x02, 0xFE, 0x1F, 0x39, +/* 00001F90 */ 0x07, 0x0A, 0x00, 0x00, 0x00, 0x12, 0x00, 0x89, 0x00, 0x36, 0x00, 0xD9, 0x00, 0x2B, 0x00, 0x87, +/* 00001FA0 */ 0x00, 0x1B, 0x00, 0x83, 0x00, 0x21, 0x00, 0x59, 0x00, 0x08, 0x00, 0x0E, 0x00, 0x00, 0x7F, 0x3C, +/* 00001FB0 */ 0x02, 0xC2, 0x03, 0x00, 0x13, 0x00, 0xF4, 0x45, 0xA2, 0x41, 0xD1, 0x00, 0x0C, 0xFE, 0xA6, 0x2A, +/* 00001FC0 */ 0xFE, 0xA6, 0x2A, 0x01, 0xFE, 0x00, 0x90, 0x07, 0x07, 0xFE, 0xA6, 0x2A, 0xFE, 0x45, 0x0E, 0xFE, +/* 00001FD0 */ 0x45, 0x0E, 0x0E, 0x06, 0x11, 0x07, 0x60, 0x57, 0x4E, 0x02, 0x02, 0x08, 0x08, 0x08, 0x08, 0x1F, +/* 00001FE0 */ 0xFE, 0x30, 0x01, 0x93, 0xEC, 0x01, 0x00, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x43, +/* 00001FF0 */ 0x05, 0xFE, 0x03, 0x03, 0x01, 0x01, 0xFE, 0x3A, 0x01, 0x4E, 0x0C, 0x4E, 0x0D, 0x4E, 0x0E, 0x4E, +/* 00002000 */ 0x0F, 0x4E, 0x10, 0x45, 0x0C, 0x09, 0x45, 0x0D, 0x02, 0xA8, 0x11, 0x45, 0x0E, 0x11, 0xA8, 0x11, +/* 00002010 */ 0x45, 0x0F, 0x11, 0xA8, 0x11, 0x45, 0x10, 0x11, 0xEC, 0x00, 0x12, 0x03, 0x00, 0x0D, 0x08, 0x09, +/* 00002020 */ 0x07, 0x01, 0xBC, 0x11, 0x0D, 0x07, 0x00, 0x00, 0x0E, 0xF7, 0x00, 0x11, 0x01, 0x58, 0x01, 0x12, +/* 00002030 */ 0x6C, 0x11, 0x12, 0x00, 0x07, 0x06, 0x00, 0x59, 0x00, 0x12, 0x59, 0x01, 0x0A, 0x59, 0x02, 0x0B, +/* 00002040 */ 0x97, 0x13, 0x07, 0x0D, 0x59, 0x03, 0x13, 0x59, 0x04, 0x0D, 0x59, 0x05, 0x07, 0x1F, 0x06, 0x11, +/* 00002050 */ 0x11, 0x45, 0x0E, 0x11, 0x01, 0x58, 0x01, 0x12, 0x6C, 0x11, 0x12, 0x01, 0x07, 0x02, 0x00, 0x59, +/* 00002060 */ 0x00, 0x12, 0x59, 0x01, 0x0E, 0x1F, 0x02, 0x11, 0x11, 0x0E, 0x7B, 0x00, 0x11, 0x01, 0x58, 0x01, +/* 00002070 */ 0x12, 0x6C, 0x11, 0x12, 0x02, 0x07, 0x02, 0x00, 0x59, 0x00, 0x12, 0xA6, 0x13, 0x0E, 0x03, 0x59, +/* 00002080 */ 0x01, 0x13, 0x1F, 0x02, 0x11, 0x11, 0x45, 0x0F, 0x11, 0x45, 0x10, 0x02, 0xEC, 0x01, 0x12, 0x03, +/* 00002090 */ 0x00, 0x10, 0x0F, 0x09, 0x4F, 0x00, 0xBC, 0x11, 0x10, 0x0E, 0x01, 0x00, 0x0E, 0x3F, 0x00, 0x11, +/* 000020A0 */ 0x10, 0x03, 0x00, 0x0C, 0x03, 0x09, 0x15, 0x00, 0x01, 0x58, 0x01, 0x12, 0x6C, 0x11, 0x12, 0x04, +/* 000020B0 */ 0x07, 0x02, 0x00, 0x59, 0x00, 0x12, 0x59, 0x01, 0x04, 0x1F, 0x02, 0xFF, 0x11, 0x01, 0x58, 0x01, +/* 000020C0 */ 0x12, 0x6C, 0x11, 0x12, 0x05, 0x07, 0x04, 0x00, 0x59, 0x00, 0x12, 0x59, 0x01, 0x06, 0x59, 0x02, +/* 000020D0 */ 0x0C, 0x97, 0x13, 0x0E, 0x10, 0x59, 0x03, 0x13, 0x1F, 0x04, 0xFF, 0x11, 0x26, 0x0C, 0x0C, 0x26, +/* 000020E0 */ 0x10, 0x10, 0x09, 0xA7, 0xFF, 0x09, 0x3B, 0x00, 0x10, 0x03, 0x00, 0x0C, 0x03, 0x09, 0x15, 0x00, +/* 000020F0 */ 0x01, 0x58, 0x01, 0x12, 0x6C, 0x11, 0x12, 0x06, 0x07, 0x02, 0x00, 0x59, 0x00, 0x12, 0x59, 0x01, +/* 00002100 */ 0x04, 0x1F, 0x02, 0xFF, 0x11, 0x01, 0x58, 0x01, 0x12, 0x6C, 0x11, 0x12, 0x07, 0x07, 0x04, 0x00, +/* 00002110 */ 0x59, 0x00, 0x12, 0x59, 0x01, 0x06, 0x59, 0x02, 0x0C, 0x59, 0x03, 0x0E, 0x1F, 0x04, 0xFF, 0x11, +/* 00002120 */ 0x26, 0x0C, 0x0C, 0x26, 0x0D, 0x0D, 0x09, 0xEF, 0xFE, 0x45, 0x00, 0x0C, 0x09, 0x02, 0x00, 0xA8, +/* 00002130 */ 0x00, 0x24, 0x00, 0xFE, 0x8B, 0x02, 0xBE, 0xFE, 0x80, 0x02, 0xD1, 0xFE, 0xB3, 0x02, 0xFE, 0x83, +/* 00002140 */ 0x02, 0xFE, 0xB3, 0x02, 0xFE, 0x83, 0x02, 0xFE, 0x92, 0x2C, 0x19, 0x0A, 0x00, 0x00, 0x00, 0x03, +/* 00002150 */ 0x00, 0x44, 0x00, 0x03, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0D, 0x00, 0x05, 0x00, 0x0D, 0x00, 0x07, +/* 00002160 */ 0x00, 0x1B, 0x00, 0x08, 0x00, 0x95, 0x00, 0x0A, 0x00, 0x6F, 0x01, 0x28, 0x00, 0x2E, 0x02, 0x19, +/* 00002170 */ 0x00, 0xA5, 0x00, 0x1C, 0x00, 0x4C, 0x00, 0x05, 0x00, 0x2B, 0x00, 0x08, 0x00, 0x34, 0x00, 0x0A, +/* 00002180 */ 0x00, 0x93, 0x00, 0x08, 0x00, 0x54, 0x00, 0x15, 0x00, 0xEC, 0x00, 0x1F, 0x00, 0xB4, 0x00, 0x03, +/* 00002190 */ 0x00, 0x41, 0x00, 0x09, 0x00, 0xC9, 0x00, 0x08, 0x00, 0x4C, 0x00, 0x15, 0x00, 0xD4, 0x00, 0x1B, +/* 000021A0 */ 0x00, 0x98, 0x00, 0x03, 0x00, 0x69, 0x00, 0x06, 0x00, 0x42, 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, +/* 000021B0 */ 0x7F, 0x3C, 0x02, 0xC2, 0x03, 0x00, 0x13, 0x00, 0xC6, 0x3F, 0xA2, 0x41, 0xD1, 0x00, 0x0B, 0xFE, +/* 000021C0 */ 0x51, 0x21, 0xFE, 0x51, 0x21, 0x01, 0xFE, 0x00, 0x90, 0x06, 0x06, 0xFE, 0x51, 0x21, 0xFE, 0x0C, +/* 000021D0 */ 0x09, 0xFE, 0x0C, 0x09, 0x0D, 0x06, 0x0E, 0x0A, 0x43, 0x3D, 0x37, 0x01, 0x01, 0x06, 0x06, 0x06, +/* 000021E0 */ 0x06, 0x11, 0xD2, 0x01, 0x00, 0x01, 0x01, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x43, +/* 000021F0 */ 0x05, 0xFE, 0x02, 0x03, 0xDC, 0x4E, 0x0B, 0x4E, 0x0C, 0x4E, 0x0D, 0x45, 0x0B, 0x09, 0x45, 0x0C, +/* 00002200 */ 0x02, 0xA8, 0x0E, 0x45, 0x0D, 0x0E, 0xEC, 0x00, 0x12, 0x03, 0x00, 0x0C, 0x08, 0x09, 0xB7, 0x00, +/* 00002210 */ 0xBC, 0x0E, 0x0C, 0x07, 0x00, 0x00, 0x0E, 0xA7, 0x00, 0x0E, 0x97, 0x0E, 0x07, 0x0C, 0x45, 0x0D, +/* 00002220 */ 0x0E, 0x11, 0x03, 0x00, 0x0A, 0x02, 0x09, 0x5D, 0x00, 0x01, 0x58, 0x01, 0x0F, 0x6C, 0x0E, 0x0F, +/* 00002230 */ 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0F, 0x59, 0x01, 0x0D, 0x1F, 0x02, 0x0E, 0x0E, 0x0E, 0x44, +/* 00002240 */ 0x00, 0x0E, 0x01, 0x58, 0x01, 0x0F, 0x6C, 0x0E, 0x0F, 0x01, 0x07, 0x06, 0x00, 0x59, 0x00, 0x0F, +/* 00002250 */ 0x59, 0x01, 0x06, 0x59, 0x02, 0x0D, 0x01, 0x58, 0x01, 0x11, 0x6C, 0x10, 0x11, 0x02, 0x07, 0x02, +/* 00002260 */ 0x00, 0x59, 0x00, 0x11, 0xA6, 0x12, 0x0D, 0x03, 0x59, 0x01, 0x12, 0x1F, 0x02, 0x10, 0x10, 0x59, +/* 00002270 */ 0x03, 0x10, 0x59, 0x04, 0x0B, 0x33, 0x10, 0x0A, 0x03, 0x59, 0x05, 0x10, 0x1F, 0x06, 0x0E, 0x0E, +/* 00002280 */ 0x45, 0x0B, 0x0E, 0x09, 0x3B, 0x00, 0x10, 0x03, 0x00, 0x0B, 0x04, 0x09, 0x15, 0x00, 0x01, 0x58, +/* 00002290 */ 0x01, 0x0F, 0x6C, 0x0E, 0x0F, 0x04, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0F, 0x59, 0x01, 0x05, 0x1F, +/* 000022A0 */ 0x02, 0xFF, 0x0E, 0x01, 0x58, 0x01, 0x0F, 0x6C, 0x0E, 0x0F, 0x05, 0x07, 0x04, 0x00, 0x59, 0x00, +/* 000022B0 */ 0x0F, 0x59, 0x01, 0x06, 0x59, 0x02, 0x0B, 0x59, 0x03, 0x0D, 0x1F, 0x04, 0xFF, 0x0E, 0x26, 0x0B, +/* 000022C0 */ 0x0B, 0x26, 0x0C, 0x0C, 0x09, 0x3F, 0xFF, 0x45, 0x00, 0x0B, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, +/* 000022D0 */ 0x00, 0xBE, 0xFE, 0xEB, 0x02, 0xFE, 0x80, 0x02, 0xD1, 0xFE, 0xB3, 0x02, 0xFE, 0x83, 0x02, 0xFE, +/* 000022E0 */ 0x77, 0x22, 0x0F, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x44, 0x00, 0x03, 0x00, 0x50, 0x00, 0x07, +/* 000022F0 */ 0x00, 0x1C, 0x00, 0x08, 0x00, 0x95, 0x00, 0x0A, 0x00, 0x93, 0x00, 0x07, 0x00, 0x28, 0x01, 0x21, +/* 00002300 */ 0x00, 0x4C, 0x01, 0x44, 0x00, 0x23, 0x01, 0x08, 0x00, 0x4C, 0x00, 0x15, 0x00, 0xD0, 0x00, 0x1B, +/* 00002310 */ 0x00, 0x97, 0x00, 0x03, 0x00, 0x69, 0x00, 0x06, 0x00, 0x42, 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, +/* 00002320 */ 0x7F, 0x3C, 0x02, 0xC2, 0x43, 0x40, 0x13, 0x00, 0xAB, 0x28, 0xA2, 0x41, 0xD1, 0x00, 0x0A, 0xFE, +/* 00002330 */ 0xD0, 0x1D, 0xFE, 0xD0, 0x1D, 0x09, 0xFE, 0x00, 0x90, 0x03, 0x02, 0xFE, 0xD0, 0x1D, 0xFE, 0x3E, +/* 00002340 */ 0x03, 0xFE, 0x3E, 0x03, 0x0E, 0x09, 0x12, 0x07, 0x54, 0x4A, 0x1D, 0x01, 0x01, 0x07, 0x07, 0x07, +/* 00002350 */ 0x07, 0x01, 0x12, 0x9B, 0xFE, 0xFF, 0x00, 0x08, 0x06, 0xFE, 0xFD, 0x02, 0x06, 0xFE, 0xFE, 0x02, +/* 00002360 */ 0x05, 0xFE, 0x00, 0x03, 0x01, 0x00, 0x06, 0xFE, 0x01, 0x03, 0x01, 0x01, 0xFE, 0x09, 0x01, 0x58, +/* 00002370 */ 0x0D, 0x4E, 0x0B, 0x4E, 0x0C, 0x4E, 0x0E, 0x4E, 0x0F, 0x4E, 0x10, 0x4E, 0x11, 0x15, 0x05, 0x00, +/* 00002380 */ 0x0A, 0x02, 0xA8, 0x13, 0x45, 0x0A, 0x13, 0x4E, 0x0B, 0x4E, 0x0C, 0x4E, 0x0E, 0x4E, 0x0F, 0x4E, +/* 00002390 */ 0x10, 0x4E, 0x11, 0x01, 0x58, 0x01, 0x15, 0x6C, 0x14, 0x15, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 000023A0 */ 0x15, 0x59, 0x01, 0x0D, 0x59, 0x02, 0x05, 0x1F, 0x03, 0x14, 0x14, 0x45, 0x13, 0x14, 0x45, 0x15, +/* 000023B0 */ 0x14, 0x0D, 0x05, 0x00, 0x15, 0x02, 0x01, 0x73, 0x01, 0x10, 0x16, 0x5E, 0x16, 0x15, 0x01, 0x45, +/* 000023C0 */ 0x0B, 0x16, 0x5E, 0x16, 0x15, 0x02, 0x45, 0x0C, 0x16, 0x2A, 0x13, 0x09, 0x15, 0x03, 0x00, 0x13, +/* 000023D0 */ 0x07, 0x09, 0x15, 0x00, 0x01, 0x58, 0x01, 0x14, 0x6C, 0x13, 0x14, 0x03, 0x07, 0x02, 0x00, 0x59, +/* 000023E0 */ 0x00, 0x14, 0x59, 0x01, 0x05, 0x1F, 0x02, 0xFF, 0x13, 0x01, 0x58, 0x01, 0x14, 0x6C, 0x13, 0x14, +/* 000023F0 */ 0x04, 0x07, 0x03, 0x00, 0x59, 0x00, 0x14, 0x59, 0x01, 0x0B, 0x59, 0x02, 0x06, 0x1F, 0x03, 0x13, +/* 00002400 */ 0x13, 0x45, 0x0E, 0x13, 0x45, 0x0F, 0x06, 0x45, 0x10, 0x06, 0xEC, 0x00, 0x12, 0x03, 0x00, 0x0F, +/* 00002410 */ 0x0C, 0x09, 0x5A, 0x00, 0xBC, 0x13, 0x0F, 0x0B, 0x00, 0x00, 0x0E, 0x4A, 0x00, 0x13, 0x97, 0x13, +/* 00002420 */ 0x0B, 0x0F, 0x45, 0x11, 0x13, 0x01, 0x58, 0x01, 0x14, 0x6C, 0x13, 0x14, 0x05, 0x07, 0x06, 0x00, +/* 00002430 */ 0x59, 0x00, 0x14, 0x59, 0x01, 0x09, 0x59, 0x02, 0x0A, 0x59, 0x03, 0x11, 0x59, 0x04, 0x0F, 0x59, +/* 00002440 */ 0x05, 0x0B, 0x1F, 0x06, 0x13, 0x13, 0x0E, 0x1E, 0x00, 0x13, 0x01, 0x58, 0x01, 0x14, 0x6C, 0x13, +/* 00002450 */ 0x14, 0x06, 0x07, 0x04, 0x00, 0x59, 0x00, 0x14, 0x59, 0x01, 0x0E, 0x59, 0x02, 0x10, 0x59, 0x03, +/* 00002460 */ 0x11, 0x1F, 0x04, 0xFF, 0x13, 0x26, 0x10, 0x10, 0x26, 0x0F, 0x0F, 0x09, 0x9C, 0xFF, 0x45, 0x00, +/* 00002470 */ 0x0E, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xE9, 0x02, 0xFE, 0xFD, 0x02, 0xFE, 0xFE, +/* 00002480 */ 0x02, 0xFE, 0xBA, 0x02, 0xFE, 0x82, 0x02, 0xFE, 0x8B, 0x02, 0xFE, 0x83, 0x02, 0xFE, 0xE6, 0x1D, +/* 00002490 */ 0x10, 0x0E, 0x00, 0x00, 0x00, 0x16, 0x00, 0x57, 0x00, 0x36, 0x00, 0x65, 0x00, 0x0B, 0x00, 0x34, +/* 000024A0 */ 0x00, 0x15, 0x00, 0x61, 0x00, 0x1B, 0x00, 0x3A, 0x00, 0x03, 0x00, 0x13, 0x00, 0x05, 0x00, 0x1C, +/* 000024B0 */ 0x00, 0x08, 0x00, 0x17, 0x00, 0x0A, 0x00, 0x1E, 0x00, 0x07, 0x00, 0x23, 0x00, 0x25, 0x00, 0x6A, +/* 000024C0 */ 0x00, 0x1B, 0x00, 0x53, 0x00, 0x03, 0x00, 0x32, 0x00, 0x06, 0x00, 0x18, 0x00, 0x08, 0x00, 0x0E, +/* 000024D0 */ 0x00, 0x00, 0x7F, 0x1C, 0x00, 0xC0, 0x13, 0x00, 0x43, 0x00, 0xA0, 0x42, 0xA2, 0x41, 0xD1, 0x00, +/* 000024E0 */ 0x09, 0xFE, 0x1A, 0x1C, 0xFE, 0x1A, 0x1C, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, 0x1A, 0x1C, +/* 000024F0 */ 0xFE, 0x8A, 0x01, 0xFE, 0x8A, 0x01, 0x05, 0x05, 0x07, 0x03, 0x2B, 0x2B, 0x0A, 0x0A, 0x0A, 0x0A, +/* 00002500 */ 0x02, 0x06, 0xFE, 0xFD, 0x02, 0x06, 0xFE, 0xFE, 0x02, 0x07, 0xA6, 0x01, 0x58, 0x01, 0x08, 0x6C, +/* 00002510 */ 0x07, 0x08, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x08, 0x59, 0x01, 0x05, 0x1F, 0x02, 0x07, 0x07, +/* 00002520 */ 0x0E, 0x1F, 0x00, 0x07, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00002530 */ 0x00, 0x7A, 0x05, 0x00, 0x01, 0xA6, 0x07, 0x05, 0x02, 0x7A, 0x07, 0x00, 0x03, 0x09, 0x6F, 0x00, +/* 00002540 */ 0x09, 0x6A, 0x00, 0x14, 0x0A, 0x00, 0x05, 0x04, 0xA8, 0x07, 0x14, 0x03, 0x00, 0x05, 0x07, 0x09, +/* 00002550 */ 0x15, 0x00, 0x01, 0x58, 0x01, 0x08, 0x6C, 0x07, 0x08, 0x04, 0x07, 0x02, 0x00, 0x59, 0x00, 0x08, +/* 00002560 */ 0x59, 0x01, 0x06, 0x1F, 0x02, 0xFF, 0x07, 0xCE, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, +/* 00002570 */ 0x00, 0x00, 0x00, 0x00, 0x01, 0x58, 0x01, 0x08, 0x6C, 0x07, 0x08, 0x05, 0x07, 0x02, 0x00, 0x59, +/* 00002580 */ 0x00, 0x08, 0x59, 0x01, 0x05, 0x1F, 0x02, 0x07, 0x07, 0x7A, 0x07, 0x00, 0x06, 0x01, 0x58, 0x01, +/* 00002590 */ 0x08, 0x6C, 0x07, 0x08, 0x07, 0x07, 0x02, 0x00, 0x59, 0x00, 0x08, 0xA6, 0x09, 0x05, 0x08, 0x59, +/* 000025A0 */ 0x01, 0x09, 0x1F, 0x02, 0x07, 0x07, 0x7A, 0x07, 0x00, 0x09, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, +/* 000025B0 */ 0x00, 0x02, 0x20, 0x00, 0x10, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 000025C0 */ 0xFD, 0x02, 0x00, 0x00, 0xFE, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, +/* 000025D0 */ 0x00, 0x00, 0x00, 0x00, 0xFD, 0x02, 0x00, 0x00, 0xFE, 0x02, 0x00, 0x00, 0xBE, 0xFE, 0xFD, 0x02, +/* 000025E0 */ 0xD1, 0xFE, 0xFE, 0x02, 0xFE, 0xB0, 0x02, 0xFE, 0x11, 0x01, 0xFE, 0xFD, 0x02, 0xFE, 0x80, 0x02, +/* 000025F0 */ 0xD1, 0xFE, 0xFE, 0x02, 0xFE, 0x40, 0x1C, 0x06, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x30, 0x00, +/* 00002600 */ 0x1F, 0x00, 0x41, 0x00, 0x0F, 0x00, 0x39, 0x00, 0x15, 0x00, 0x52, 0x00, 0x48, 0x00, 0x67, 0x00, +/* 00002610 */ 0x00, 0x7F, 0x3C, 0x02, 0xC2, 0x43, 0x40, 0x13, 0x00, 0x71, 0x29, 0xA2, 0x41, 0xD1, 0x00, 0x08, +/* 00002620 */ 0xFE, 0xE3, 0x16, 0xFE, 0xE3, 0x16, 0x09, 0xFE, 0x00, 0x90, 0x03, 0x02, 0xFE, 0xE3, 0x16, 0xFE, +/* 00002630 */ 0xF1, 0x04, 0xFE, 0xF1, 0x04, 0x0D, 0x09, 0x11, 0x04, 0x4D, 0x3D, 0x0D, 0x01, 0x01, 0x04, 0x04, +/* 00002640 */ 0x04, 0x04, 0x01, 0x11, 0xBD, 0xEC, 0x08, 0x06, 0xFE, 0xFD, 0x02, 0x06, 0xFE, 0xFE, 0x02, 0x05, +/* 00002650 */ 0xFE, 0xFF, 0x02, 0x01, 0x00, 0x01, 0xFF, 0x01, 0x01, 0xF6, 0x58, 0x0D, 0x4E, 0x0B, 0x4E, 0x0C, +/* 00002660 */ 0x4E, 0x0E, 0x4E, 0x0F, 0x4E, 0x10, 0x15, 0x05, 0x00, 0x0A, 0x02, 0xA8, 0x12, 0x45, 0x0A, 0x12, +/* 00002670 */ 0x4E, 0x0B, 0x4E, 0x0C, 0x4E, 0x0E, 0x4E, 0x0F, 0x4E, 0x10, 0x01, 0x58, 0x01, 0x14, 0x6C, 0x13, +/* 00002680 */ 0x14, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x14, 0x59, 0x01, 0x0D, 0x59, 0x02, 0x05, 0x1F, 0x03, +/* 00002690 */ 0x13, 0x13, 0x45, 0x12, 0x13, 0x45, 0x14, 0x13, 0x0D, 0x05, 0x00, 0x14, 0x02, 0x01, 0x73, 0x01, +/* 000026A0 */ 0x10, 0x16, 0x5E, 0x15, 0x14, 0x01, 0x45, 0x0B, 0x15, 0x5E, 0x15, 0x14, 0x02, 0x45, 0x0C, 0x15, +/* 000026B0 */ 0x14, 0x03, 0x00, 0x0C, 0x06, 0x09, 0x06, 0x00, 0x45, 0x00, 0x07, 0x09, 0x90, 0x00, 0x01, 0x58, +/* 000026C0 */ 0x01, 0x13, 0x6C, 0x12, 0x13, 0x03, 0x07, 0x02, 0x00, 0x59, 0x00, 0x13, 0x59, 0x01, 0x0A, 0x1F, +/* 000026D0 */ 0x02, 0x12, 0x12, 0x45, 0x0E, 0x12, 0x10, 0x03, 0x00, 0x0E, 0x0C, 0x09, 0x06, 0x00, 0x45, 0x00, +/* 000026E0 */ 0x07, 0x09, 0x6A, 0x00, 0xA8, 0x12, 0x45, 0x0F, 0x12, 0x14, 0x03, 0x00, 0x0E, 0x06, 0x09, 0x06, +/* 000026F0 */ 0x00, 0x45, 0x0F, 0x06, 0x09, 0x20, 0x00, 0x11, 0x03, 0x00, 0x0E, 0x06, 0x09, 0x06, 0x00, 0x45, +/* 00002700 */ 0x0F, 0x0E, 0x09, 0x12, 0x00, 0x2D, 0x12, 0x0C, 0x0E, 0x45, 0x0F, 0x12, 0x12, 0x03, 0x00, 0x0F, +/* 00002710 */ 0x06, 0x09, 0x03, 0x00, 0x45, 0x0F, 0x06, 0xEC, 0x00, 0x12, 0x03, 0x00, 0x0F, 0x0C, 0x09, 0x25, +/* 00002720 */ 0x00, 0xBC, 0x12, 0x0F, 0x0B, 0x00, 0x00, 0x0E, 0x15, 0x00, 0x12, 0x97, 0x12, 0x0B, 0x0F, 0x45, +/* 00002730 */ 0x10, 0x12, 0x14, 0x03, 0x00, 0x10, 0x09, 0x09, 0x06, 0x00, 0x45, 0x00, 0x0F, 0x09, 0x0E, 0x00, +/* 00002740 */ 0x26, 0x0F, 0x0F, 0x09, 0xD1, 0xFF, 0x45, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, +/* 00002750 */ 0xFE, 0xE9, 0x02, 0xFE, 0xFD, 0x02, 0xFE, 0xFE, 0x02, 0xFE, 0x81, 0x02, 0xFE, 0xFC, 0x16, 0x17, +/* 00002760 */ 0x0C, 0x00, 0x00, 0x00, 0x14, 0x00, 0x5A, 0x00, 0x36, 0x00, 0x5E, 0x00, 0x08, 0x00, 0x1D, 0x00, +/* 00002770 */ 0x06, 0x00, 0x1E, 0x00, 0x18, 0x00, 0x36, 0x00, 0x08, 0x00, 0x1C, 0x00, 0x06, 0x00, 0x1E, 0x00, +/* 00002780 */ 0x05, 0x00, 0x14, 0x01, 0x08, 0x00, 0x58, 0x00, 0x06, 0x00, 0x16, 0x00, 0x08, 0x00, 0x4F, 0x00, +/* 00002790 */ 0x06, 0x00, 0x4E, 0x00, 0x07, 0x00, 0x1A, 0x00, 0x08, 0x00, 0x1D, 0x00, 0x05, 0x00, 0x2F, 0x00, +/* 000027A0 */ 0x08, 0x00, 0x17, 0x00, 0x0A, 0x00, 0x1E, 0x00, 0x07, 0x00, 0x26, 0x00, 0x08, 0x00, 0x36, 0x00, +/* 000027B0 */ 0x06, 0x00, 0x37, 0x00, 0x06, 0x00, 0x18, 0x00, 0x08, 0x00, 0x0F, 0x00, 0x00, 0x7F, 0x1C, 0x00, +/* 000027C0 */ 0xC0, 0x03, 0x00, 0x03, 0x00, 0x69, 0x29, 0xA0, 0x41, 0xD1, 0x00, 0x07, 0xFE, 0x88, 0x15, 0xFE, +/* 000027D0 */ 0x88, 0x15, 0x09, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFE, 0x88, 0x15, 0xFE, 0x2E, 0x01, 0xFE, 0x2E, +/* 000027E0 */ 0x01, 0x04, 0x05, 0x07, 0x04, 0x1E, 0x1D, 0x03, 0x03, 0x03, 0x03, 0x07, 0x05, 0xFE, 0xFC, 0x02, +/* 000027F0 */ 0x01, 0x02, 0x5F, 0x58, 0x05, 0x4E, 0x06, 0x14, 0x0A, 0x00, 0x05, 0x02, 0xA8, 0x07, 0x14, 0x03, +/* 00002800 */ 0x00, 0x05, 0x07, 0x09, 0x15, 0x00, 0x01, 0x58, 0x01, 0x08, 0x6C, 0x07, 0x08, 0x00, 0x07, 0x02, +/* 00002810 */ 0x00, 0x59, 0x00, 0x08, 0x59, 0x01, 0x03, 0x1F, 0x02, 0xFF, 0x07, 0x01, 0x58, 0x01, 0x08, 0x6C, +/* 00002820 */ 0x07, 0x08, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x08, 0x59, 0x01, 0x05, 0x1F, 0x02, 0x07, 0x07, +/* 00002830 */ 0x45, 0x06, 0x07, 0x01, 0x58, 0x01, 0x08, 0x6C, 0x07, 0x08, 0x02, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 00002840 */ 0x08, 0x59, 0x01, 0x06, 0x59, 0x02, 0x04, 0x1F, 0x03, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA8, 0x00, +/* 00002850 */ 0x24, 0x00, 0xFE, 0xB0, 0x02, 0xFE, 0x11, 0x01, 0xFE, 0xE4, 0x02, 0xFE, 0x9E, 0x15, 0x05, 0x04, +/* 00002860 */ 0x00, 0x00, 0x00, 0x0F, 0x00, 0x37, 0x00, 0x15, 0x00, 0x58, 0x00, 0x18, 0x00, 0x2E, 0x00, 0x1D, +/* 00002870 */ 0x00, 0x5A, 0x00, 0x00, 0x7F, 0x1C, 0x00, 0xC0, 0x03, 0x00, 0x03, 0x00, 0x61, 0x28, 0xA0, 0x41, +/* 00002880 */ 0xD1, 0x00, 0x06, 0xFE, 0x34, 0x14, 0xFE, 0x34, 0x14, 0x09, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFE, +/* 00002890 */ 0x34, 0x14, 0xFE, 0x27, 0x01, 0xFE, 0x27, 0x01, 0x04, 0x05, 0x07, 0x04, 0x1E, 0x1D, 0x03, 0x03, +/* 000028A0 */ 0x03, 0x03, 0x07, 0x05, 0xFE, 0xFB, 0x02, 0x01, 0x01, 0x5F, 0x58, 0x05, 0x4E, 0x06, 0x14, 0x0A, +/* 000028B0 */ 0x00, 0x05, 0x02, 0xA8, 0x07, 0x14, 0x03, 0x00, 0x05, 0x07, 0x09, 0x15, 0x00, 0x01, 0x58, 0x01, +/* 000028C0 */ 0x08, 0x6C, 0x07, 0x08, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x08, 0x59, 0x01, 0x03, 0x1F, 0x02, +/* 000028D0 */ 0xFF, 0x07, 0x01, 0x58, 0x01, 0x08, 0x6C, 0x07, 0x08, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x08, +/* 000028E0 */ 0x59, 0x01, 0x05, 0x1F, 0x02, 0x07, 0x07, 0x45, 0x06, 0x07, 0x01, 0x58, 0x01, 0x08, 0x6C, 0x07, +/* 000028F0 */ 0x08, 0x02, 0x07, 0x03, 0x00, 0x59, 0x00, 0x08, 0x59, 0x01, 0x06, 0x59, 0x02, 0x04, 0x1F, 0x03, +/* 00002900 */ 0x00, 0x07, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB0, 0x02, 0xFE, 0x11, 0x01, 0xFE, +/* 00002910 */ 0xE4, 0x02, 0xFE, 0x4A, 0x14, 0x05, 0x04, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x37, 0x00, 0x15, 0x00, +/* 00002920 */ 0x57, 0x00, 0x18, 0x00, 0x2E, 0x00, 0x1D, 0x00, 0x54, 0x00, 0x00, 0x7F, 0x1C, 0x00, 0xC0, 0x03, +/* 00002930 */ 0x00, 0x03, 0x00, 0x59, 0x26, 0xA0, 0x41, 0xD1, 0x00, 0x05, 0xFE, 0xE5, 0x12, 0xFE, 0xE5, 0x12, +/* 00002940 */ 0x09, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFE, 0xE5, 0x12, 0xFE, 0x23, 0x01, 0xFE, 0x23, 0x01, 0x04, +/* 00002950 */ 0x05, 0x07, 0x04, 0x1E, 0x1D, 0x03, 0x03, 0x03, 0x03, 0x07, 0x05, 0xFE, 0xFA, 0x02, 0x01, 0x00, +/* 00002960 */ 0x5F, 0x58, 0x05, 0x4E, 0x06, 0x14, 0x0A, 0x00, 0x05, 0x02, 0xA8, 0x07, 0x14, 0x03, 0x00, 0x05, +/* 00002970 */ 0x07, 0x09, 0x15, 0x00, 0x01, 0x58, 0x01, 0x08, 0x6C, 0x07, 0x08, 0x00, 0x07, 0x02, 0x00, 0x59, +/* 00002980 */ 0x00, 0x08, 0x59, 0x01, 0x03, 0x1F, 0x02, 0xFF, 0x07, 0x01, 0x58, 0x01, 0x08, 0x6C, 0x07, 0x08, +/* 00002990 */ 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x08, 0x59, 0x01, 0x05, 0x1F, 0x02, 0x07, 0x07, 0x45, 0x06, +/* 000029A0 */ 0x07, 0x01, 0x58, 0x01, 0x08, 0x6C, 0x07, 0x08, 0x02, 0x07, 0x03, 0x00, 0x59, 0x00, 0x08, 0x59, +/* 000029B0 */ 0x01, 0x06, 0x59, 0x02, 0x04, 0x1F, 0x03, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, +/* 000029C0 */ 0xFE, 0xB0, 0x02, 0xFE, 0x11, 0x01, 0xFE, 0xE4, 0x02, 0xFE, 0xFB, 0x12, 0x05, 0x04, 0x00, 0x00, +/* 000029D0 */ 0x00, 0x0F, 0x00, 0x37, 0x00, 0x15, 0x00, 0x55, 0x00, 0x18, 0x00, 0x2E, 0x00, 0x1D, 0x00, 0x52, +/* 000029E0 */ 0x00, 0x00, 0x7F, 0x1C, 0x00, 0xC0, 0x03, 0x00, 0x03, 0x00, 0x55, 0x42, 0xA2, 0x41, 0xD1, 0x00, +/* 000029F0 */ 0x04, 0xFE, 0x46, 0x12, 0xFE, 0x46, 0x12, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, 0x46, 0x12, +/* 00002A00 */ 0x75, 0x75, 0x03, 0x02, 0x04, 0x04, 0x0A, 0x0A, 0x01, 0x01, 0x01, 0x01, 0x1C, 0x01, 0x58, 0x01, +/* 00002A10 */ 0x04, 0x5E, 0x04, 0x04, 0x00, 0x07, 0x03, 0x00, 0x59, 0x01, 0x02, 0x59, 0x02, 0x03, 0xC4, 0x03, +/* 00002A20 */ 0x00, 0x04, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xDB, 0x02, 0xFE, 0x73, 0x12, 0x02, +/* 00002A30 */ 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x47, 0x00, 0x00, 0x7F, 0x1C, 0x00, 0xC0, 0x57, 0x40, 0x47, +/* 00002A40 */ 0x00, 0x26, 0x13, 0xA0, 0x41, 0xC1, 0x00, 0xFE, 0xDD, 0x02, 0x03, 0xFF, 0x00, 0x00, 0x00, 0x02, +/* 00002A50 */ 0xFE, 0x3E, 0x09, 0xFE, 0x3E, 0x09, 0x09, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFE, 0x3E, 0x09, 0xFE, +/* 00002A60 */ 0x30, 0x06, 0xFE, 0x30, 0x06, 0x0E, 0x0B, 0x13, 0x04, 0x5C, 0x54, 0x15, 0x15, 0x15, 0x15, 0x01, +/* 00002A70 */ 0x05, 0x03, 0x13, 0x05, 0xFE, 0xF8, 0x02, 0x05, 0xFE, 0xE1, 0x02, 0x0B, 0x06, 0xFE, 0xDD, 0x02, +/* 00002A80 */ 0x06, 0xFE, 0xF9, 0x02, 0x07, 0x01, 0x01, 0x0C, 0x01, 0x00, 0xFE, 0x64, 0x01, 0x58, 0x0B, 0x4E, +/* 00002A90 */ 0x0C, 0x4E, 0x0D, 0x4E, 0x0E, 0x4E, 0x0F, 0x4E, 0x10, 0x4E, 0x11, 0x4E, 0x12, 0x45, 0x0C, 0x0B, +/* 00002AA0 */ 0x01, 0x58, 0x01, 0x16, 0x5E, 0x16, 0x16, 0x00, 0xE3, 0x16, 0x0C, 0x16, 0x00, 0x0F, 0x18, 0x00, +/* 00002AB0 */ 0x16, 0x01, 0x58, 0x01, 0x17, 0x6C, 0x16, 0x17, 0x01, 0x07, 0x03, 0x00, 0x59, 0x00, 0x17, 0x59, +/* 00002AC0 */ 0x01, 0x02, 0x59, 0x02, 0x03, 0x1F, 0x03, 0xFF, 0x16, 0x5E, 0x16, 0x0C, 0x02, 0x45, 0x0D, 0x16, +/* 00002AD0 */ 0x5E, 0x16, 0x0C, 0x03, 0x14, 0x03, 0x00, 0x16, 0x04, 0x09, 0x1D, 0x00, 0xCE, 0x00, 0x00, 0x00, +/* 00002AE0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0x16, 0x7A, 0x16, 0x00, 0x04, 0x7A, +/* 00002AF0 */ 0x04, 0x00, 0x05, 0x09, 0xF9, 0x00, 0x09, 0xF4, 0x00, 0x5E, 0x16, 0x0C, 0x06, 0x45, 0x0E, 0x16, +/* 00002B00 */ 0x01, 0x58, 0x01, 0x17, 0x6C, 0x16, 0x17, 0x07, 0x07, 0x02, 0x00, 0x59, 0x00, 0x17, 0x59, 0x01, +/* 00002B10 */ 0x0D, 0x1F, 0x02, 0x16, 0x16, 0x0E, 0x0A, 0x00, 0x16, 0xA6, 0x17, 0x0D, 0x08, 0x45, 0x16, 0x17, +/* 00002B20 */ 0x09, 0x18, 0x00, 0x01, 0x58, 0x01, 0x18, 0x6C, 0x17, 0x18, 0x09, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 00002B30 */ 0x18, 0x59, 0x01, 0x0D, 0x1F, 0x02, 0x17, 0x17, 0x46, 0x16, 0x17, 0x45, 0x0F, 0x16, 0x12, 0x03, +/* 00002B40 */ 0x00, 0x0E, 0x0F, 0x09, 0x89, 0x00, 0x5E, 0x16, 0x0C, 0x0A, 0x45, 0x10, 0x16, 0x2D, 0x16, 0x0E, +/* 00002B50 */ 0x08, 0x76, 0x16, 0x0C, 0x0B, 0x14, 0x03, 0x00, 0x10, 0x08, 0x09, 0x1F, 0x00, 0xCE, 0x10, 0x00, +/* 00002B60 */ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x16, 0x0D, 0x0E, 0x7A, 0x16, +/* 00002B70 */ 0x00, 0x0C, 0x7A, 0x09, 0x00, 0x0D, 0x09, 0x76, 0x00, 0x09, 0x50, 0x00, 0x14, 0x03, 0x00, 0x10, +/* 00002B80 */ 0x0A, 0x09, 0x1B, 0x00, 0xCE, 0x20, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00002B90 */ 0x00, 0x7A, 0x0E, 0x00, 0x0E, 0x7A, 0x09, 0x00, 0x0F, 0x09, 0x53, 0x00, 0x09, 0x2D, 0x00, 0x45, +/* 00002BA0 */ 0x11, 0x0E, 0x97, 0x16, 0x0D, 0x0E, 0x45, 0x12, 0x16, 0xCE, 0x30, 0x00, 0x00, 0x00, 0x03, 0x00, +/* 00002BB0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCF, 0x16, 0x02, 0xA1, 0x00, 0x11, 0x16, 0xA1, 0x01, 0x12, +/* 00002BC0 */ 0x16, 0x7A, 0x16, 0x00, 0x10, 0x7A, 0x09, 0x00, 0x11, 0x09, 0x23, 0x00, 0x09, 0x1E, 0x00, 0x76, +/* 00002BD0 */ 0x04, 0x0C, 0x12, 0xCE, 0x40, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00002BE0 */ 0xA8, 0x16, 0x7A, 0x16, 0x00, 0x13, 0x7A, 0x04, 0x00, 0x14, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, +/* 00002BF0 */ 0x00, 0x05, 0x50, 0x00, 0x40, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00002C00 */ 0x97, 0x01, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, +/* 00002C10 */ 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, +/* 00002C20 */ 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, +/* 00002C30 */ 0x10, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, +/* 00002C40 */ 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00002C50 */ 0x97, 0x01, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0xFE, 0xDB, 0x02, 0xFE, 0xB6, 0x02, 0xFE, 0xF4, +/* 00002C60 */ 0x02, 0xFE, 0xF7, 0x02, 0xFE, 0x97, 0x01, 0x74, 0xFE, 0xF5, 0x02, 0xBE, 0xD1, 0xFE, 0x7C, 0x02, +/* 00002C70 */ 0xFE, 0xF6, 0x02, 0xFE, 0xF5, 0x02, 0xFE, 0x97, 0x01, 0x74, 0xFE, 0x97, 0x01, 0x74, 0xFE, 0x97, +/* 00002C80 */ 0x01, 0x74, 0xFE, 0xF7, 0x02, 0xFE, 0x97, 0x01, 0x74, 0xFE, 0x5C, 0x09, 0x15, 0x10, 0x00, 0x00, +/* 00002C90 */ 0x00, 0x03, 0x00, 0x1F, 0x00, 0x11, 0x00, 0x49, 0x00, 0x18, 0x00, 0x7D, 0x00, 0x07, 0x00, 0x2B, +/* 00002CA0 */ 0x00, 0x0C, 0x00, 0x39, 0x00, 0x1D, 0x00, 0x56, 0x00, 0x07, 0x00, 0x33, 0x00, 0x3E, 0x00, 0x65, +/* 00002CB0 */ 0x00, 0x08, 0x00, 0x70, 0x00, 0x07, 0x00, 0x36, 0x00, 0x08, 0x00, 0x38, 0x00, 0x08, 0x00, 0x4F, +/* 00002CC0 */ 0x00, 0x1F, 0x00, 0x48, 0x00, 0x08, 0x00, 0x78, 0x00, 0x1B, 0x00, 0x63, 0x00, 0x03, 0x00, 0x34, +/* 00002CD0 */ 0x00, 0x07, 0x00, 0x39, 0x00, 0x26, 0x00, 0x8A, 0x00, 0x04, 0x00, 0x35, 0x00, 0x1C, 0x00, 0x5E, +/* 00002CE0 */ 0x00, 0x00, 0x7F, 0x1C, 0x00, 0xC0, 0x03, 0x00, 0x03, 0x00, 0x10, 0x3C, 0xA2, 0x41, 0xD1, 0x00, +/* 00002CF0 */ 0x02, 0xFE, 0x34, 0x03, 0xFE, 0x34, 0x03, 0x49, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, 0x34, 0x03, +/* 00002D00 */ 0xFE, 0xD3, 0x01, 0xFE, 0xD3, 0x01, 0x05, 0x09, 0x0C, 0x08, 0x13, 0x13, 0x05, 0x05, 0x05, 0x05, +/* 00002D10 */ 0x01, 0x04, 0x06, 0xFE, 0xF4, 0x02, 0x06, 0xFE, 0xF5, 0x02, 0x06, 0xFE, 0xF6, 0x02, 0x06, 0xFE, +/* 00002D20 */ 0xF7, 0x02, 0x01, 0x00, 0x0C, 0x3A, 0x58, 0x0B, 0x01, 0x58, 0x01, 0x0D, 0x6C, 0x0C, 0x0D, 0x00, +/* 00002D30 */ 0x07, 0x07, 0x00, 0x59, 0x00, 0x0D, 0x59, 0x01, 0x0B, 0x59, 0x02, 0x02, 0x59, 0x03, 0x03, 0x59, +/* 00002D40 */ 0x04, 0x04, 0x59, 0x05, 0x05, 0x59, 0x06, 0x06, 0x1F, 0x07, 0xFF, 0x0C, 0x76, 0x09, 0x0B, 0x01, +/* 00002D50 */ 0x76, 0x07, 0x0B, 0x02, 0x76, 0x0A, 0x0B, 0x03, 0x76, 0x08, 0x0B, 0x04, 0xA8, 0x00, 0x24, 0x00, +/* 00002D60 */ 0xFE, 0x7D, 0x02, 0xFE, 0xF4, 0x02, 0xFE, 0xF5, 0x02, 0xFE, 0xF6, 0x02, 0xFE, 0xF7, 0x02, 0xFE, +/* 00002D70 */ 0x61, 0x03, 0x06, 0x02, 0x00, 0x00, 0x00, 0x24, 0x00, 0x82, 0x00, 0x04, 0x00, 0x28, 0x00, 0x04, +/* 00002D80 */ 0x00, 0x22, 0x00, 0x04, 0x00, 0x29, 0x00, 0x06, 0x00, 0xB0, 0x00, 0x00, 0x00}; + +//Bytecode generated from Math_object.js +const char Library_Bytecode_Math_object[] = { +/* 00000000 */ 0x43, 0x68, 0x42, 0x63, 0x62, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00000010 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0xFE, 0xD9, 0x02, 0x00, 0xFE, +/* 00000020 */ 0xC0, 0x0F, 0xFE, 0xC0, 0x0F, 0x35, 0x00, 0x00, 0x00, 0xDC, 0x00, 0x00, 0x00, 0xBA, 0x02, 0x00, +/* 00000030 */ 0x00, 0x61, 0x07, 0x00, 0x00, 0x06, 0x5A, 0x00, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, 0x00, +/* 00000040 */ 0x88, 0x00, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x01, 0xBA, +/* 00000050 */ 0x00, 0x00, 0x00, 0x01, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x6C, 0x00, 0x6F, 0x00, +/* 00000060 */ 0x62, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x20, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x64, 0x00, 0x65, 0x00, +/* 00000070 */ 0x00, 0x00, 0x75, 0x00, 0x73, 0x00, 0x65, 0x00, 0x20, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, +/* 00000080 */ 0x69, 0x00, 0x63, 0x00, 0x74, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x00, 0x00, +/* 00000090 */ 0x6D, 0x00, 0x61, 0x00, 0x78, 0x00, 0x00, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x73, 0x00, 0x69, 0x00, +/* 000000A0 */ 0x74, 0x00, 0x69, 0x00, 0x76, 0x00, 0x65, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x66, 0x00, 0x69, 0x00, +/* 000000B0 */ 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x67, 0x00, +/* 000000C0 */ 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x76, 0x00, 0x65, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x66, 0x00, +/* 000000D0 */ 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, +/* 000000E0 */ 0x00, 0x6A, 0x00, 0x00, 0x00, 0x9B, 0x00, 0x00, 0x00, 0xE2, 0x00, 0x00, 0x00, 0x4C, 0x01, 0x00, +/* 000000F0 */ 0x00, 0xB6, 0x01, 0x00, 0x00, 0xB7, 0x01, 0x00, 0x00, 0xC5, 0x01, 0x00, 0x00, 0xC6, 0x01, 0x00, +/* 00000100 */ 0x00, 0xDE, 0x01, 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x4A, 0x02, 0x00, +/* 00000110 */ 0x00, 0x8D, 0x02, 0x00, 0x00, 0x8E, 0x02, 0x00, 0x00, 0xCF, 0x02, 0x00, 0x00, 0xE8, 0x02, 0x00, +/* 00000120 */ 0x00, 0xE9, 0x02, 0x00, 0x00, 0x2F, 0x03, 0x00, 0x00, 0x63, 0x03, 0x00, 0x00, 0x15, 0x04, 0x00, +/* 00000130 */ 0x00, 0x3B, 0x04, 0x00, 0x00, 0x70, 0x04, 0x00, 0x00, 0x7A, 0x04, 0x00, 0x00, 0x7B, 0x04, 0x00, +/* 00000140 */ 0x00, 0x9A, 0x04, 0x00, 0x00, 0x9B, 0x04, 0x00, 0x00, 0xB5, 0x04, 0x00, 0x00, 0xD6, 0x04, 0x00, +/* 00000150 */ 0x00, 0xF4, 0x04, 0x00, 0x00, 0xFE, 0x04, 0x00, 0x00, 0xFF, 0x04, 0x00, 0x00, 0x25, 0x05, 0x00, +/* 00000160 */ 0x00, 0x40, 0x05, 0x00, 0x00, 0x4A, 0x05, 0x00, 0x00, 0x4B, 0x05, 0x00, 0x00, 0x71, 0x05, 0x00, +/* 00000170 */ 0x00, 0x8F, 0x05, 0x00, 0x00, 0xC1, 0x05, 0x00, 0x00, 0xDD, 0x05, 0x00, 0x00, 0xEB, 0x05, 0x00, +/* 00000180 */ 0x00, 0x6A, 0x06, 0x00, 0x00, 0x89, 0x06, 0x00, 0x00, 0x97, 0x06, 0x00, 0x00, 0xAA, 0x06, 0x00, +/* 00000190 */ 0x00, 0xC9, 0x06, 0x00, 0x00, 0xD7, 0x06, 0x00, 0x00, 0xE1, 0x06, 0x00, 0x00, 0xE2, 0x06, 0x00, +/* 000001A0 */ 0x00, 0xFC, 0x06, 0x00, 0x00, 0x11, 0x07, 0x00, 0x00, 0x12, 0x07, 0x00, 0x00, 0x47, 0x07, 0x00, +/* 000001B0 */ 0x00, 0xA6, 0x07, 0x00, 0x00, 0xDF, 0x07, 0x00, 0x00, 0x0B, 0x08, 0x00, 0x00, 0x2D, 0x08, 0x00, +/* 000001C0 */ 0x00, 0x48, 0x08, 0x00, 0x00, 0x56, 0x08, 0x00, 0x00, 0xD1, 0x08, 0x00, 0x00, 0xF0, 0x08, 0x00, +/* 000001D0 */ 0x00, 0xFE, 0x08, 0x00, 0x00, 0x08, 0x09, 0x00, 0x00, 0x09, 0x09, 0x00, 0x00, 0x1D, 0x09, 0x00, +/* 000001E0 */ 0x00, 0x25, 0x09, 0x00, 0x00, 0x26, 0x09, 0x00, 0x00, 0x67, 0x09, 0x00, 0x00, 0x80, 0x09, 0x00, +/* 000001F0 */ 0x00, 0x81, 0x09, 0x00, 0x00, 0xC7, 0x09, 0x00, 0x00, 0xFB, 0x09, 0x00, 0x00, 0xAC, 0x0A, 0x00, +/* 00000200 */ 0x00, 0xD2, 0x0A, 0x00, 0x00, 0x07, 0x0B, 0x00, 0x00, 0x11, 0x0B, 0x00, 0x00, 0x12, 0x0B, 0x00, +/* 00000210 */ 0x00, 0x31, 0x0B, 0x00, 0x00, 0x32, 0x0B, 0x00, 0x00, 0x4C, 0x0B, 0x00, 0x00, 0x6D, 0x0B, 0x00, +/* 00000220 */ 0x00, 0x8B, 0x0B, 0x00, 0x00, 0x95, 0x0B, 0x00, 0x00, 0x96, 0x0B, 0x00, 0x00, 0xBC, 0x0B, 0x00, +/* 00000230 */ 0x00, 0xD7, 0x0B, 0x00, 0x00, 0xE1, 0x0B, 0x00, 0x00, 0xE2, 0x0B, 0x00, 0x00, 0x08, 0x0C, 0x00, +/* 00000240 */ 0x00, 0x26, 0x0C, 0x00, 0x00, 0x58, 0x0C, 0x00, 0x00, 0x74, 0x0C, 0x00, 0x00, 0x82, 0x0C, 0x00, +/* 00000250 */ 0x00, 0x01, 0x0D, 0x00, 0x00, 0x20, 0x0D, 0x00, 0x00, 0x2E, 0x0D, 0x00, 0x00, 0x41, 0x0D, 0x00, +/* 00000260 */ 0x00, 0x60, 0x0D, 0x00, 0x00, 0x6E, 0x0D, 0x00, 0x00, 0x78, 0x0D, 0x00, 0x00, 0x79, 0x0D, 0x00, +/* 00000270 */ 0x00, 0x93, 0x0D, 0x00, 0x00, 0xA8, 0x0D, 0x00, 0x00, 0xA9, 0x0D, 0x00, 0x00, 0xDE, 0x0D, 0x00, +/* 00000280 */ 0x00, 0x3D, 0x0E, 0x00, 0x00, 0x76, 0x0E, 0x00, 0x00, 0xA2, 0x0E, 0x00, 0x00, 0xC4, 0x0E, 0x00, +/* 00000290 */ 0x00, 0xDF, 0x0E, 0x00, 0x00, 0xED, 0x0E, 0x00, 0x00, 0x68, 0x0F, 0x00, 0x00, 0x87, 0x0F, 0x00, +/* 000002A0 */ 0x00, 0x95, 0x0F, 0x00, 0x00, 0x9F, 0x0F, 0x00, 0x00, 0xA0, 0x0F, 0x00, 0x00, 0xB4, 0x0F, 0x00, +/* 000002B0 */ 0x00, 0xBC, 0x0F, 0x00, 0x00, 0xC0, 0x0F, 0x00, 0x00, 0x00, 0x04, 0x73, 0x0C, 0x00, 0x00, 0x00, +/* 000002C0 */ 0x10, 0x08, 0x00, 0xA8, 0x41, 0xC0, 0x00, 0xFE, 0xD9, 0x02, 0x00, 0xFE, 0xB7, 0x01, 0xFE, 0xB7, +/* 000002D0 */ 0x01, 0x01, 0x40, 0xFE, 0x00, 0x90, 0xFE, 0xB7, 0x01, 0xFE, 0x09, 0x0E, 0xFE, 0x09, 0x0E, 0x01, +/* 000002E0 */ 0x04, 0x04, 0x04, 0x04, 0x03, 0x05, 0xFE, 0xDA, 0x02, 0x0A, 0x07, 0xA8, 0x00, 0xD6, 0x00, 0x04, +/* 000002F0 */ 0x24, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x02, 0x00, 0x00, 0x7F, 0x1C, 0x00, +/* 00000300 */ 0xC0, 0x03, 0x10, 0x0B, 0x00, 0x08, 0x01, 0xA2, 0x41, 0xD1, 0x00, 0x01, 0xFE, 0xC7, 0x01, 0xFE, +/* 00000310 */ 0xC7, 0x01, 0x02, 0x40, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0xC7, 0x01, 0xFE, 0xF6, 0x0D, 0xFE, +/* 00000320 */ 0xF6, 0x0D, 0x05, 0x04, 0x07, 0x04, 0x19, 0x18, 0x07, 0x07, 0x07, 0x07, 0x06, 0x06, 0xFE, 0xDB, +/* 00000330 */ 0x02, 0x06, 0xFE, 0xDC, 0x02, 0x51, 0x5E, 0x07, 0x04, 0x00, 0x45, 0x05, 0x07, 0x01, 0x58, 0x01, +/* 00000340 */ 0x07, 0x5E, 0x08, 0x05, 0x01, 0x76, 0x08, 0x07, 0x02, 0x01, 0x58, 0x01, 0x07, 0x5E, 0x08, 0x05, +/* 00000350 */ 0x03, 0x76, 0x08, 0x07, 0x04, 0x6C, 0x07, 0x05, 0x05, 0x07, 0x03, 0x00, 0x59, 0x00, 0x05, 0x59, +/* 00000360 */ 0x01, 0x02, 0xD6, 0x00, 0x08, 0x59, 0x02, 0x08, 0x1F, 0x03, 0xFF, 0x07, 0x6C, 0x07, 0x05, 0x06, +/* 00000370 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x05, 0x59, 0x01, 0x03, 0xD6, 0x01, 0x08, 0x59, 0x02, 0x08, 0x1F, +/* 00000380 */ 0x03, 0xFF, 0x07, 0xA8, 0x00, 0x24, 0x00, 0x59, 0xFE, 0x21, 0x01, 0xFE, 0xDD, 0x02, 0xFE, 0x0E, +/* 00000390 */ 0x01, 0xFE, 0xDE, 0x02, 0xFE, 0x7F, 0x02, 0xFE, 0x7F, 0x02, 0xFE, 0xE2, 0x01, 0x06, 0x00, 0x00, +/* 000003A0 */ 0x00, 0x00, 0x07, 0x00, 0x29, 0x00, 0x0C, 0x00, 0x43, 0x00, 0x0C, 0x00, 0x44, 0x00, 0x17, 0x00, +/* 000003B0 */ 0x98, 0x06, 0x19, 0x00, 0x92, 0x06, 0x00, 0x90, 0x05, 0x00, 0x00, 0xBF, 0x03, 0x00, 0x00, 0x7F, +/* 000003C0 */ 0x2C, 0x00, 0xC2, 0x43, 0x40, 0x13, 0x00, 0x42, 0x25, 0xA2, 0x41, 0xB1, 0x00, 0x03, 0xFE, 0x4B, +/* 000003D0 */ 0x09, 0xFE, 0x4B, 0x09, 0x03, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, 0x4B, 0x09, 0xFE, 0x6E, 0x06, +/* 000003E0 */ 0xFE, 0x6E, 0x06, 0x0A, 0x08, 0x0F, 0x51, 0x42, 0x1B, 0x01, 0x05, 0x05, 0x05, 0x05, 0x01, 0x0F, +/* 000003F0 */ 0xA6, 0xFE, 0x06, 0x01, 0x07, 0x01, 0x00, 0x0C, 0x0B, 0x01, 0x01, 0x01, 0x02, 0xFE, 0x10, 0x01, +/* 00000400 */ 0xB1, 0x0A, 0x4E, 0x0B, 0x4E, 0x0C, 0x4E, 0x0D, 0x4E, 0x0E, 0xA6, 0x10, 0x0A, 0x00, 0x14, 0x03, +/* 00000410 */ 0x00, 0x10, 0x03, 0x09, 0x0B, 0x00, 0x01, 0x58, 0x01, 0x10, 0x5E, 0x00, 0x10, 0x01, 0x09, 0xED, +/* 00000420 */ 0x00, 0x45, 0x0B, 0x04, 0x43, 0x10, 0x08, 0x45, 0x08, 0x10, 0x15, 0x03, 0x00, 0x08, 0x08, 0x09, +/* 00000430 */ 0x03, 0x00, 0x45, 0x0B, 0x05, 0xA6, 0x10, 0x0A, 0x02, 0x14, 0x03, 0x00, 0x10, 0x06, 0x09, 0x06, +/* 00000440 */ 0x00, 0x45, 0x00, 0x08, 0x09, 0xC7, 0x00, 0xA6, 0x10, 0x0A, 0x03, 0x14, 0x03, 0x00, 0x10, 0x07, +/* 00000450 */ 0x09, 0x48, 0x00, 0x43, 0x10, 0x09, 0x45, 0x09, 0x10, 0x15, 0x04, 0x00, 0x09, 0x09, 0x0E, 0x05, +/* 00000460 */ 0x00, 0x0B, 0xA9, 0x00, 0x09, 0xA7, 0x00, 0x11, 0x20, 0x00, 0x08, 0x09, 0x14, 0x03, 0x00, 0x08, +/* 00000470 */ 0x09, 0x09, 0x21, 0x00, 0x14, 0x03, 0x00, 0x08, 0x03, 0x09, 0x19, 0x00, 0x2E, 0x10, 0x06, 0x08, +/* 00000480 */ 0x2E, 0x11, 0x06, 0x09, 0x11, 0x03, 0x00, 0x10, 0x11, 0x09, 0x09, 0x00, 0x45, 0x00, 0x08, 0x09, +/* 00000490 */ 0x7C, 0x00, 0x09, 0x06, 0x00, 0x45, 0x00, 0x09, 0x09, 0x73, 0x00, 0x45, 0x0C, 0x08, 0xA8, 0x10, +/* 000004A0 */ 0x45, 0x0D, 0x10, 0x45, 0x0E, 0x06, 0xEC, 0x00, 0xA6, 0x10, 0x0A, 0x04, 0x12, 0x03, 0x00, 0x0E, +/* 000004B0 */ 0x10, 0x09, 0x52, 0x00, 0x97, 0x10, 0x0A, 0x0E, 0x43, 0x10, 0x10, 0x45, 0x0D, 0x10, 0x0E, 0x03, +/* 000004C0 */ 0x00, 0x0B, 0x09, 0x3B, 0x00, 0x15, 0x03, 0x00, 0x0D, 0x0D, 0x09, 0x0B, 0x00, 0x45, 0x0B, 0x05, +/* 000004D0 */ 0xA9, 0x10, 0x45, 0x0C, 0x10, 0x09, 0x28, 0x00, 0x12, 0x20, 0x00, 0x0C, 0x0D, 0x14, 0x03, 0x00, +/* 000004E0 */ 0x0C, 0x0D, 0x09, 0x1B, 0x00, 0x14, 0x03, 0x00, 0x0C, 0x03, 0x09, 0x13, 0x00, 0x2E, 0x10, 0x06, +/* 000004F0 */ 0x0C, 0x2E, 0x11, 0x06, 0x0D, 0x12, 0x03, 0x00, 0x10, 0x11, 0x09, 0x03, 0x00, 0x45, 0x0C, 0x0D, +/* 00000500 */ 0x26, 0x0E, 0x0E, 0x09, 0xA0, 0xFF, 0x45, 0x00, 0x0C, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, +/* 00000510 */ 0xD1, 0xFE, 0xDE, 0x02, 0xD1, 0xD1, 0xD1, 0xFE, 0xB4, 0x0A, 0x1D, 0x0A, 0x00, 0x00, 0x00, 0x0C, +/* 00000520 */ 0x00, 0x2A, 0x00, 0x0B, 0x00, 0x3C, 0x00, 0x03, 0x00, 0x20, 0x00, 0x06, 0x00, 0x1A, 0x00, 0x08, +/* 00000530 */ 0x00, 0x25, 0x00, 0x03, 0x00, 0x25, 0x00, 0x0C, 0x00, 0x2A, 0x00, 0x06, 0x00, 0x22, 0x00, 0x0C, +/* 00000540 */ 0x00, 0x2A, 0x00, 0x06, 0x00, 0x1E, 0x00, 0x09, 0x00, 0x36, 0x00, 0x05, 0x00, 0x26, 0x00, 0x25, +/* 00000550 */ 0x00, 0x83, 0x00, 0x09, 0x00, 0x40, 0x00, 0x06, 0x00, 0x30, 0x00, 0x03, 0x00, 0x1A, 0x00, 0x05, +/* 00000560 */ 0x00, 0x1B, 0x00, 0x05, 0x00, 0x0B, 0x00, 0x0C, 0x00, 0x29, 0x00, 0x0A, 0x00, 0x5F, 0x00, 0x07, +/* 00000570 */ 0x00, 0x3E, 0x00, 0x08, 0x00, 0x2B, 0x00, 0x03, 0x00, 0x22, 0x00, 0x08, 0x00, 0x2A, 0x00, 0x25, +/* 00000580 */ 0x00, 0x7A, 0x00, 0x03, 0x00, 0x5F, 0xFE, 0x06, 0x00, 0xD1, 0x01, 0x08, 0x00, 0x10, 0x00, 0x00, +/* 00000590 */ 0x7F, 0x2C, 0x00, 0xC2, 0x43, 0x40, 0x13, 0x00, 0x0E, 0x25, 0xA2, 0x41, 0xB1, 0x00, 0x02, 0xFE, +/* 000005A0 */ 0xB3, 0x02, 0xFE, 0xB3, 0x02, 0x03, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, 0xB3, 0x02, 0xFE, 0x6F, +/* 000005B0 */ 0x06, 0xFE, 0x6F, 0x06, 0x0A, 0x08, 0x0F, 0x51, 0x42, 0x1B, 0x01, 0x05, 0x05, 0x05, 0x05, 0x01, +/* 000005C0 */ 0x0F, 0xA6, 0xFE, 0x06, 0x01, 0x07, 0x01, 0x00, 0x0C, 0x0B, 0x01, 0x01, 0x01, 0x02, 0xFE, 0x10, +/* 000005D0 */ 0x01, 0xB1, 0x0A, 0x4E, 0x0B, 0x4E, 0x0C, 0x4E, 0x0D, 0x4E, 0x0E, 0xA6, 0x10, 0x0A, 0x00, 0x14, +/* 000005E0 */ 0x03, 0x00, 0x10, 0x03, 0x09, 0x0B, 0x00, 0x01, 0x58, 0x01, 0x10, 0x5E, 0x00, 0x10, 0x01, 0x09, +/* 000005F0 */ 0xED, 0x00, 0x45, 0x0B, 0x04, 0x43, 0x10, 0x08, 0x45, 0x08, 0x10, 0x15, 0x03, 0x00, 0x08, 0x08, +/* 00000600 */ 0x09, 0x03, 0x00, 0x45, 0x0B, 0x05, 0xA6, 0x10, 0x0A, 0x02, 0x14, 0x03, 0x00, 0x10, 0x06, 0x09, +/* 00000610 */ 0x06, 0x00, 0x45, 0x00, 0x08, 0x09, 0xC7, 0x00, 0xA6, 0x10, 0x0A, 0x03, 0x14, 0x03, 0x00, 0x10, +/* 00000620 */ 0x07, 0x09, 0x48, 0x00, 0x43, 0x10, 0x09, 0x45, 0x09, 0x10, 0x15, 0x04, 0x00, 0x09, 0x09, 0x0E, +/* 00000630 */ 0x05, 0x00, 0x0B, 0xA9, 0x00, 0x09, 0xA7, 0x00, 0x12, 0x20, 0x00, 0x08, 0x09, 0x14, 0x03, 0x00, +/* 00000640 */ 0x08, 0x09, 0x09, 0x21, 0x00, 0x14, 0x03, 0x00, 0x08, 0x03, 0x09, 0x19, 0x00, 0x2E, 0x10, 0x06, +/* 00000650 */ 0x08, 0x2E, 0x11, 0x06, 0x09, 0x12, 0x03, 0x00, 0x10, 0x11, 0x09, 0x09, 0x00, 0x45, 0x00, 0x08, +/* 00000660 */ 0x09, 0x7C, 0x00, 0x09, 0x06, 0x00, 0x45, 0x00, 0x09, 0x09, 0x73, 0x00, 0x45, 0x0C, 0x08, 0xA8, +/* 00000670 */ 0x10, 0x45, 0x0D, 0x10, 0x45, 0x0E, 0x06, 0xEC, 0x00, 0xA6, 0x10, 0x0A, 0x04, 0x12, 0x03, 0x00, +/* 00000680 */ 0x0E, 0x10, 0x09, 0x52, 0x00, 0x97, 0x10, 0x0A, 0x0E, 0x43, 0x10, 0x10, 0x45, 0x0D, 0x10, 0x0E, +/* 00000690 */ 0x03, 0x00, 0x0B, 0x09, 0x3B, 0x00, 0x15, 0x03, 0x00, 0x0D, 0x0D, 0x09, 0x0B, 0x00, 0x45, 0x0B, +/* 000006A0 */ 0x05, 0xA9, 0x10, 0x45, 0x0C, 0x10, 0x09, 0x28, 0x00, 0x11, 0x20, 0x00, 0x0C, 0x0D, 0x14, 0x03, +/* 000006B0 */ 0x00, 0x0C, 0x0D, 0x09, 0x1B, 0x00, 0x14, 0x03, 0x00, 0x0C, 0x03, 0x09, 0x13, 0x00, 0x2E, 0x10, +/* 000006C0 */ 0x06, 0x0C, 0x2E, 0x11, 0x06, 0x0D, 0x11, 0x03, 0x00, 0x10, 0x11, 0x09, 0x03, 0x00, 0x45, 0x0C, +/* 000006D0 */ 0x0D, 0x26, 0x0E, 0x0E, 0x09, 0xA0, 0xFF, 0x45, 0x00, 0x0C, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, +/* 000006E0 */ 0x00, 0xD1, 0xFE, 0xDD, 0x02, 0xD1, 0xD1, 0xD1, 0xFE, 0x1D, 0x04, 0x1D, 0x0A, 0x00, 0x00, 0x00, +/* 000006F0 */ 0x0C, 0x00, 0x2A, 0x00, 0x0B, 0x00, 0x3C, 0x00, 0x03, 0x00, 0x20, 0x00, 0x06, 0x00, 0x1A, 0x00, +/* 00000700 */ 0x08, 0x00, 0x25, 0x00, 0x03, 0x00, 0x25, 0x00, 0x0C, 0x00, 0x2A, 0x00, 0x06, 0x00, 0x22, 0x00, +/* 00000710 */ 0x0C, 0x00, 0x2A, 0x00, 0x06, 0x00, 0x1E, 0x00, 0x09, 0x00, 0x36, 0x00, 0x05, 0x00, 0x26, 0x00, +/* 00000720 */ 0x25, 0x00, 0x83, 0x00, 0x09, 0x00, 0x40, 0x00, 0x06, 0x00, 0x30, 0x00, 0x03, 0x00, 0x1A, 0x00, +/* 00000730 */ 0x05, 0x00, 0x1B, 0x00, 0x05, 0x00, 0x0B, 0x00, 0x0C, 0x00, 0x29, 0x00, 0x0A, 0x00, 0x5F, 0x00, +/* 00000740 */ 0x07, 0x00, 0x3E, 0x00, 0x08, 0x00, 0x2B, 0x00, 0x03, 0x00, 0x22, 0x00, 0x08, 0x00, 0x2A, 0x00, +/* 00000750 */ 0x25, 0x00, 0x7A, 0x00, 0x03, 0x00, 0x5F, 0xFE, 0x06, 0x00, 0xD1, 0x01, 0x08, 0x00, 0x10, 0x00, +/* 00000760 */ 0x00, 0x00}; + +//Bytecode generated from Object_constructor.js +const char Library_Bytecode_Object_constructor[] = { +/* 00000000 */ 0x43, 0x68, 0x42, 0x63, 0x4F, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00000010 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0xFE, 0xD9, 0x02, 0x00, 0xFE, +/* 00000020 */ 0x44, 0x06, 0xFE, 0x44, 0x06, 0x35, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x0E, 0x02, 0x00, +/* 00000030 */ 0x00, 0x4E, 0x05, 0x00, 0x00, 0x0A, 0x6E, 0x00, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, 0x00, +/* 00000040 */ 0x9C, 0x00, 0x00, 0x00, 0x00, 0xB4, 0x00, 0x00, 0x00, 0x01, 0xDE, 0x00, 0x00, 0x00, 0x00, 0x04, +/* 00000050 */ 0x01, 0x00, 0x00, 0x00, 0x1A, 0x01, 0x00, 0x00, 0x00, 0x34, 0x01, 0x00, 0x00, 0x00, 0x46, 0x01, +/* 00000060 */ 0x00, 0x00, 0x00, 0x52, 0x01, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, +/* 00000070 */ 0x6C, 0x00, 0x6F, 0x00, 0x62, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x20, 0x00, 0x63, 0x00, 0x6F, 0x00, +/* 00000080 */ 0x64, 0x00, 0x65, 0x00, 0x00, 0x00, 0x75, 0x00, 0x73, 0x00, 0x65, 0x00, 0x20, 0x00, 0x73, 0x00, +/* 00000090 */ 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x63, 0x00, 0x74, 0x00, 0x00, 0x00, 0x66, 0x00, 0x72, 0x00, +/* 000000A0 */ 0x6F, 0x00, 0x6D, 0x00, 0x45, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x65, 0x00, +/* 000000B0 */ 0x73, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, +/* 000000C0 */ 0x44, 0x00, 0x65, 0x00, 0x66, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x50, 0x00, 0x72, 0x00, +/* 000000D0 */ 0x6F, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x4F, 0x00, +/* 000000E0 */ 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x72, 0x00, +/* 000000F0 */ 0x6F, 0x00, 0x6D, 0x00, 0x45, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x65, 0x00, +/* 00000100 */ 0x73, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x72, 0x00, +/* 00000110 */ 0x61, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, +/* 00000120 */ 0x66, 0x00, 0x69, 0x00, 0x67, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x62, 0x00, 0x6C, 0x00, +/* 00000130 */ 0x65, 0x00, 0x00, 0x00, 0x77, 0x00, 0x72, 0x00, 0x69, 0x00, 0x74, 0x00, 0x61, 0x00, 0x62, 0x00, +/* 00000140 */ 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x76, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x65, 0x00, +/* 00000150 */ 0x00, 0x00, 0x6F, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x00, 0x00, +/* 00000160 */ 0x2B, 0x00, 0x00, 0x00, 0x00, 0x6A, 0x00, 0x00, 0x00, 0x9B, 0x00, 0x00, 0x00, 0xE7, 0x00, 0x00, +/* 00000170 */ 0x00, 0x51, 0x01, 0x00, 0x00, 0xBB, 0x01, 0x00, 0x00, 0xBC, 0x01, 0x00, 0x00, 0xCA, 0x01, 0x00, +/* 00000180 */ 0x00, 0xCB, 0x01, 0x00, 0x00, 0xE3, 0x01, 0x00, 0x00, 0x0B, 0x02, 0x00, 0x00, 0x0C, 0x02, 0x00, +/* 00000190 */ 0x00, 0x4C, 0x02, 0x00, 0x00, 0xA2, 0x02, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, +/* 000001A0 */ 0x00, 0x46, 0x03, 0x00, 0x00, 0x69, 0x03, 0x00, 0x00, 0xA4, 0x03, 0x00, 0x00, 0xE7, 0x03, 0x00, +/* 000001B0 */ 0x00, 0xF1, 0x03, 0x00, 0x00, 0xF2, 0x03, 0x00, 0x00, 0x08, 0x04, 0x00, 0x00, 0x29, 0x04, 0x00, +/* 000001C0 */ 0x00, 0x48, 0x04, 0x00, 0x00, 0x69, 0x04, 0x00, 0x00, 0x86, 0x04, 0x00, 0x00, 0xA4, 0x04, 0x00, +/* 000001D0 */ 0x00, 0xAF, 0x04, 0x00, 0x00, 0xB0, 0x04, 0x00, 0x00, 0xC1, 0x04, 0x00, 0x00, 0xE9, 0x04, 0x00, +/* 000001E0 */ 0x00, 0x28, 0x05, 0x00, 0x00, 0x7A, 0x05, 0x00, 0x00, 0x88, 0x05, 0x00, 0x00, 0x89, 0x05, 0x00, +/* 000001F0 */ 0x00, 0xA5, 0x05, 0x00, 0x00, 0xD2, 0x05, 0x00, 0x00, 0x1C, 0x06, 0x00, 0x00, 0x26, 0x06, 0x00, +/* 00000200 */ 0x00, 0x38, 0x06, 0x00, 0x00, 0x40, 0x06, 0x00, 0x00, 0x44, 0x06, 0x00, 0x00, 0x00, 0x03, 0x73, +/* 00000210 */ 0x0C, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, 0xA8, 0x41, 0xC0, 0x00, 0xFE, 0xD9, 0x02, 0x00, 0xFE, +/* 00000220 */ 0xBC, 0x01, 0xFE, 0xBC, 0x01, 0x01, 0x40, 0xFE, 0x00, 0x90, 0xFE, 0xBC, 0x01, 0xFE, 0x88, 0x04, +/* 00000230 */ 0xFE, 0x88, 0x04, 0x01, 0x04, 0x04, 0x04, 0x04, 0x03, 0x05, 0xFE, 0xDA, 0x02, 0x0A, 0x07, 0xA8, +/* 00000240 */ 0x00, 0xD6, 0x00, 0x04, 0x24, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x00, 0x00, 0x51, 0x02, 0x00, +/* 00000250 */ 0x00, 0x7F, 0x1C, 0x00, 0xC0, 0x03, 0x10, 0x0B, 0x00, 0x08, 0x01, 0xA2, 0x41, 0xD1, 0x00, 0x01, +/* 00000260 */ 0xFE, 0xCC, 0x01, 0xFE, 0xCC, 0x01, 0x01, 0x40, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0xCC, 0x01, +/* 00000270 */ 0xFE, 0x75, 0x04, 0xFE, 0x75, 0x04, 0x05, 0x03, 0x06, 0x04, 0x15, 0x14, 0x08, 0x08, 0x08, 0x08, +/* 00000280 */ 0x05, 0x06, 0xFE, 0xDB, 0x02, 0x46, 0x5E, 0x06, 0x03, 0x00, 0x45, 0x04, 0x06, 0x01, 0x58, 0x01, +/* 00000290 */ 0x06, 0x5E, 0x07, 0x04, 0x01, 0x76, 0x07, 0x06, 0x02, 0x01, 0x58, 0x01, 0x06, 0x5E, 0x07, 0x04, +/* 000002A0 */ 0x03, 0x76, 0x07, 0x06, 0x04, 0x01, 0x58, 0x01, 0x06, 0x5E, 0x07, 0x04, 0x05, 0x76, 0x07, 0x06, +/* 000002B0 */ 0x06, 0x6C, 0x06, 0x04, 0x07, 0x07, 0x03, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x02, 0xD6, 0x00, +/* 000002C0 */ 0x07, 0x59, 0x02, 0x07, 0x1F, 0x03, 0xFF, 0x06, 0xA8, 0x00, 0x24, 0x00, 0x59, 0xFE, 0xAA, 0x02, +/* 000002D0 */ 0xFE, 0xAA, 0x02, 0xFE, 0xB4, 0x02, 0xFE, 0xB4, 0x02, 0xFE, 0x8F, 0x02, 0xFE, 0xDC, 0x02, 0xFE, +/* 000002E0 */ 0x7F, 0x02, 0xFE, 0xE7, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x29, 0x00, 0x0C, 0x00, +/* 000002F0 */ 0x40, 0x00, 0x0C, 0x00, 0x56, 0x00, 0x0C, 0x00, 0x61, 0x00, 0x19, 0x00, 0x39, 0x03, 0x00, 0x03, +/* 00000300 */ 0x03, 0x00, 0x00, 0x7F, 0x3C, 0x00, 0xC6, 0x53, 0x40, 0x53, 0x00, 0x0F, 0x2D, 0xB2, 0x41, 0xD1, +/* 00000310 */ 0x00, 0x02, 0xFE, 0x30, 0x03, 0xFE, 0x30, 0x03, 0x05, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0x30, +/* 00000320 */ 0x03, 0xFE, 0x0D, 0x03, 0xFE, 0x0D, 0x03, 0x0D, 0x0D, 0x14, 0x09, 0x70, 0x6A, 0x25, 0x01, 0x01, +/* 00000330 */ 0x0E, 0x0E, 0x0E, 0x0E, 0x01, 0x01, 0x14, 0x8A, 0xFE, 0x08, 0x01, 0x07, 0x05, 0xFE, 0xDD, 0x02, +/* 00000340 */ 0x06, 0xFE, 0xDE, 0x02, 0x0B, 0x06, 0xFE, 0xDF, 0x02, 0x06, 0xFE, 0xE0, 0x02, 0x06, 0xFE, 0xE1, +/* 00000350 */ 0x02, 0x06, 0xFE, 0xE2, 0x02, 0x01, 0x00, 0x01, 0x01, 0x08, 0xFE, 0x6F, 0x01, 0x4E, 0x0E, 0x4E, +/* 00000360 */ 0x0F, 0x4E, 0x10, 0x4E, 0x11, 0x14, 0x0A, 0x00, 0x0D, 0x02, 0xA8, 0x15, 0x14, 0x03, 0x00, 0x0D, +/* 00000370 */ 0x15, 0x09, 0x15, 0x00, 0x01, 0x58, 0x01, 0x16, 0x6C, 0x15, 0x16, 0x00, 0x07, 0x02, 0x00, 0x59, +/* 00000380 */ 0x00, 0x16, 0x59, 0x01, 0x03, 0x1F, 0x02, 0xFF, 0x15, 0xCD, 0x15, 0x45, 0x0E, 0x15, 0xCE, 0x00, +/* 00000390 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x7A, 0x05, 0x15, 0x01, 0x7A, +/* 000003A0 */ 0x05, 0x15, 0x02, 0x7A, 0x05, 0x15, 0x03, 0xA8, 0x16, 0x7A, 0x16, 0x15, 0x04, 0x45, 0x0F, 0x15, +/* 000003B0 */ 0xA8, 0x15, 0x45, 0x10, 0x15, 0x0D, 0x05, 0x00, 0x0D, 0x0C, 0x01, 0x73, 0x01, 0x10, 0x16, 0x44, +/* 000003C0 */ 0x18, 0x0D, 0x6C, 0x15, 0x18, 0x05, 0x07, 0x01, 0x00, 0x59, 0x00, 0x18, 0x1F, 0x01, 0x15, 0x15, +/* 000003D0 */ 0x18, 0x05, 0x00, 0x15, 0x01, 0x73, 0x01, 0x8F, 0x13, 0x6C, 0x16, 0x15, 0x06, 0xAD, 0x12, 0xAD, +/* 000003E0 */ 0x13, 0xE8, 0xBA, 0x00, 0xE7, 0x82, 0x00, 0xEC, 0x00, 0xAD, 0x12, 0xAD, 0x13, 0x07, 0x01, 0x00, +/* 000003F0 */ 0x59, 0x00, 0x15, 0x1F, 0x01, 0x17, 0x16, 0x18, 0x05, 0x00, 0x17, 0x01, 0x73, 0x01, 0x8F, 0x13, +/* 00000400 */ 0x5E, 0x18, 0x17, 0x07, 0x0F, 0x5D, 0x00, 0x18, 0x5E, 0x17, 0x17, 0x08, 0xAB, 0x12, 0xAB, 0x13, +/* 00000410 */ 0x45, 0x11, 0x17, 0x2A, 0x18, 0x11, 0x15, 0x08, 0x00, 0x18, 0x09, 0x14, 0x03, 0x00, 0x11, 0x02, +/* 00000420 */ 0x09, 0x15, 0x00, 0x01, 0x58, 0x01, 0x19, 0x6C, 0x18, 0x19, 0x09, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 00000430 */ 0x19, 0x59, 0x01, 0x03, 0x1F, 0x02, 0xFF, 0x18, 0x97, 0x18, 0x11, 0x0A, 0x45, 0x10, 0x18, 0x97, +/* 00000440 */ 0x18, 0x11, 0x0B, 0x76, 0x18, 0x0F, 0x0A, 0x01, 0x58, 0x01, 0x19, 0x6C, 0x18, 0x19, 0x0B, 0x07, +/* 00000450 */ 0x04, 0x00, 0x59, 0x00, 0x19, 0x59, 0x01, 0x0E, 0x59, 0x02, 0x10, 0x59, 0x03, 0x0F, 0x1F, 0x04, +/* 00000460 */ 0xFF, 0x18, 0x09, 0x82, 0xFF, 0xEB, 0x09, 0x31, 0x00, 0xE9, 0x16, 0x0E, 0x28, 0x00, 0x12, 0xAE, +/* 00000470 */ 0x13, 0xE7, 0x20, 0x00, 0x5E, 0x17, 0x15, 0x0C, 0x0C, 0x13, 0x00, 0x17, 0x0C, 0x07, 0x01, 0x00, +/* 00000480 */ 0x59, 0x00, 0x15, 0x1F, 0x01, 0x17, 0x17, 0x18, 0x05, 0x00, 0x17, 0x01, 0x73, 0x01, 0x8F, 0x13, +/* 00000490 */ 0xEB, 0x09, 0x03, 0x00, 0xE9, 0x17, 0xEB, 0x23, 0x16, 0xEB, 0xEB, 0x09, 0x24, 0x00, 0x01, 0x70, +/* 000004A0 */ 0x01, 0x0E, 0x1C, 0x00, 0x13, 0x5E, 0x16, 0x15, 0x0D, 0x0C, 0x13, 0x00, 0x16, 0x0C, 0x07, 0x01, +/* 000004B0 */ 0x00, 0x59, 0x00, 0x15, 0x1F, 0x01, 0x16, 0x16, 0x18, 0x05, 0x00, 0x16, 0x01, 0x73, 0x01, 0x8F, +/* 000004C0 */ 0x13, 0xEA, 0x45, 0x00, 0x0E, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x01, 0x18, 0x00, 0x00, +/* 000004D0 */ 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, +/* 000004E0 */ 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0xFE, 0xAA, 0x02, 0xFE, 0x94, +/* 000004F0 */ 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x97, 0x01, 0x14, 0xFE, 0x07, 0x01, 0x74, 0xFE, +/* 00000500 */ 0x97, 0x01, 0xFE, 0xB4, 0x02, 0xFE, 0x97, 0x01, 0xFE, 0xDC, 0x02, 0xFE, 0x35, 0x01, 0xFE, 0x35, +/* 00000510 */ 0x01, 0xFE, 0x71, 0x03, 0x0E, 0x08, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x3F, 0x00, 0x15, 0x00, 0x4A, +/* 00000520 */ 0x00, 0x05, 0x00, 0x16, 0x00, 0x22, 0x00, 0xA8, 0x00, 0x05, 0x00, 0x11, 0x00, 0x34, 0x00, 0x05, +/* 00000530 */ 0x00, 0x2A, 0x00, 0x27, 0x00, 0x10, 0x00, 0x43, 0x00, 0x15, 0x00, 0x5D, 0x00, 0x07, 0x00, 0x1C, +/* 00000540 */ 0x00, 0x08, 0x00, 0x2D, 0x00, 0x7B, 0x00, 0x50, 0x00, 0x08, 0x00, 0x0E, 0x00, 0x00, 0x00}; + +#endif + +#ifdef ENABLE_INTL_OBJECT + +//Bytecode generated from Intl.js +const char Library_Bytecode_Intl[] = { +/* 00000000 */ 0x43, 0x68, 0x42, 0x63, 0x0F, 0xA7, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00000010 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0xFE, 0xD9, 0x02, 0x00, 0xFF, +/* 00000020 */ 0x2E, 0xB2, 0x02, 0x00, 0xFF, 0x2E, 0xB2, 0x02, 0x00, 0x39, 0x00, 0x00, 0x00, 0xC8, 0x48, 0x00, +/* 00000030 */ 0x00, 0x38, 0x83, 0x00, 0x00, 0x0E, 0xA7, 0x01, 0x00, 0xFE, 0x2C, 0x02, 0x1E, 0x0B, 0x00, 0x00, +/* 00000040 */ 0x00, 0x36, 0x0B, 0x00, 0x00, 0x00, 0x4C, 0x0B, 0x00, 0x00, 0x01, 0x60, 0x0B, 0x00, 0x00, 0x01, +/* 00000050 */ 0x7A, 0x0B, 0x00, 0x00, 0x01, 0x98, 0x0B, 0x00, 0x00, 0x01, 0xBA, 0x0B, 0x00, 0x00, 0x01, 0xD2, +/* 00000060 */ 0x0B, 0x00, 0x00, 0x01, 0xFC, 0x0B, 0x00, 0x00, 0x01, 0x22, 0x0C, 0x00, 0x00, 0x01, 0x56, 0x0C, +/* 00000070 */ 0x00, 0x00, 0x01, 0x90, 0x0C, 0x00, 0x00, 0x01, 0xBC, 0x0C, 0x00, 0x00, 0x01, 0xE6, 0x0C, 0x00, +/* 00000080 */ 0x00, 0x01, 0x10, 0x0D, 0x00, 0x00, 0x01, 0x3A, 0x0D, 0x00, 0x00, 0x01, 0x5E, 0x0D, 0x00, 0x00, +/* 00000090 */ 0x01, 0x88, 0x0D, 0x00, 0x00, 0x01, 0xB0, 0x0D, 0x00, 0x00, 0x01, 0xC0, 0x0D, 0x00, 0x00, 0x01, +/* 000000A0 */ 0xEC, 0x0D, 0x00, 0x00, 0x01, 0x20, 0x0E, 0x00, 0x00, 0x01, 0x54, 0x0E, 0x00, 0x00, 0x01, 0x78, +/* 000000B0 */ 0x0E, 0x00, 0x00, 0x01, 0x9C, 0x0E, 0x00, 0x00, 0x01, 0xAE, 0x0E, 0x00, 0x00, 0x01, 0xD0, 0x0E, +/* 000000C0 */ 0x00, 0x00, 0x01, 0xF8, 0x0E, 0x00, 0x00, 0x01, 0x20, 0x0F, 0x00, 0x00, 0x01, 0x3E, 0x0F, 0x00, +/* 000000D0 */ 0x00, 0x01, 0x6A, 0x0F, 0x00, 0x00, 0x01, 0x9E, 0x0F, 0x00, 0x00, 0x01, 0xDA, 0x0F, 0x00, 0x00, +/* 000000E0 */ 0x01, 0x1A, 0x10, 0x00, 0x00, 0x01, 0x68, 0x10, 0x00, 0x00, 0x01, 0x90, 0x10, 0x00, 0x00, 0x01, +/* 000000F0 */ 0xA2, 0x10, 0x00, 0x00, 0x01, 0xC8, 0x10, 0x00, 0x00, 0x01, 0xDC, 0x10, 0x00, 0x00, 0x01, 0xE6, +/* 00000100 */ 0x10, 0x00, 0x00, 0x01, 0xEA, 0x10, 0x00, 0x00, 0x00, 0xF2, 0x10, 0x00, 0x00, 0x00, 0xFE, 0x10, +/* 00000110 */ 0x00, 0x00, 0x00, 0x06, 0x11, 0x00, 0x00, 0x00, 0x0E, 0x11, 0x00, 0x00, 0x00, 0x26, 0x11, 0x00, +/* 00000120 */ 0x00, 0x00, 0x3E, 0x11, 0x00, 0x00, 0x00, 0x4E, 0x11, 0x00, 0x00, 0x00, 0x5A, 0x11, 0x00, 0x00, +/* 00000130 */ 0x00, 0x6E, 0x11, 0x00, 0x00, 0x01, 0x8A, 0x11, 0x00, 0x00, 0x00, 0x96, 0x11, 0x00, 0x00, 0x00, +/* 00000140 */ 0xA4, 0x11, 0x00, 0x00, 0x00, 0xB4, 0x11, 0x00, 0x00, 0x00, 0xBE, 0x11, 0x00, 0x00, 0x01, 0xD8, +/* 00000150 */ 0x11, 0x00, 0x00, 0x00, 0xE0, 0x11, 0x00, 0x00, 0x00, 0xEE, 0x11, 0x00, 0x00, 0x00, 0xFA, 0x11, +/* 00000160 */ 0x00, 0x00, 0x00, 0x08, 0x12, 0x00, 0x00, 0x00, 0x16, 0x12, 0x00, 0x00, 0x01, 0x24, 0x12, 0x00, +/* 00000170 */ 0x00, 0x00, 0x2E, 0x12, 0x00, 0x00, 0x00, 0x4C, 0x12, 0x00, 0x00, 0x00, 0x6A, 0x12, 0x00, 0x00, +/* 00000180 */ 0x00, 0x84, 0x12, 0x00, 0x00, 0x00, 0x92, 0x12, 0x00, 0x00, 0x00, 0xB0, 0x12, 0x00, 0x00, 0x00, +/* 00000190 */ 0xC2, 0x12, 0x00, 0x00, 0x00, 0xCE, 0x12, 0x00, 0x00, 0x00, 0xDE, 0x12, 0x00, 0x00, 0x00, 0xE8, +/* 000001A0 */ 0x12, 0x00, 0x00, 0x00, 0xF4, 0x12, 0x00, 0x00, 0x01, 0x06, 0x13, 0x00, 0x00, 0x01, 0x18, 0x13, +/* 000001B0 */ 0x00, 0x00, 0x01, 0x2A, 0x13, 0x00, 0x00, 0x01, 0x4C, 0x13, 0x00, 0x00, 0x01, 0x60, 0x13, 0x00, +/* 000001C0 */ 0x00, 0x01, 0x72, 0x13, 0x00, 0x00, 0x00, 0x7C, 0x13, 0x00, 0x00, 0x00, 0xAE, 0x13, 0x00, 0x00, +/* 000001D0 */ 0x00, 0xD6, 0x13, 0x00, 0x00, 0x00, 0xE2, 0x13, 0x00, 0x00, 0x00, 0xF4, 0x13, 0x00, 0x00, 0x00, +/* 000001E0 */ 0x0A, 0x14, 0x00, 0x00, 0x00, 0x24, 0x14, 0x00, 0x00, 0x00, 0x36, 0x14, 0x00, 0x00, 0x00, 0x50, +/* 000001F0 */ 0x14, 0x00, 0x00, 0x00, 0x6E, 0x14, 0x00, 0x00, 0x00, 0x86, 0x14, 0x00, 0x00, 0x00, 0x96, 0x14, +/* 00000200 */ 0x00, 0x00, 0x00, 0xA2, 0x14, 0x00, 0x00, 0x00, 0xE4, 0x14, 0x00, 0x00, 0x00, 0x2E, 0x15, 0x00, +/* 00000210 */ 0x00, 0x00, 0x7C, 0x15, 0x00, 0x00, 0x00, 0x86, 0x15, 0x00, 0x00, 0x00, 0xAC, 0x15, 0x00, 0x00, +/* 00000220 */ 0x01, 0xB8, 0x15, 0x00, 0x00, 0x01, 0xC2, 0x15, 0x00, 0x00, 0x00, 0xD0, 0x15, 0x00, 0x00, 0x01, +/* 00000230 */ 0xDC, 0x15, 0x00, 0x00, 0x01, 0xE8, 0x15, 0x00, 0x00, 0x01, 0xF8, 0x15, 0x00, 0x00, 0x00, 0x06, +/* 00000240 */ 0x16, 0x00, 0x00, 0x01, 0x12, 0x16, 0x00, 0x00, 0x01, 0x20, 0x16, 0x00, 0x00, 0x00, 0x2E, 0x16, +/* 00000250 */ 0x00, 0x00, 0x01, 0x3A, 0x16, 0x00, 0x00, 0x01, 0x4C, 0x16, 0x00, 0x00, 0x00, 0x5A, 0x16, 0x00, +/* 00000260 */ 0x00, 0x01, 0x68, 0x16, 0x00, 0x00, 0x00, 0x6A, 0x16, 0x00, 0x00, 0x01, 0x76, 0x16, 0x00, 0x00, +/* 00000270 */ 0x01, 0x82, 0x16, 0x00, 0x00, 0x01, 0x8E, 0x16, 0x00, 0x00, 0x01, 0x9C, 0x16, 0x00, 0x00, 0x01, +/* 00000280 */ 0xA8, 0x16, 0x00, 0x00, 0x01, 0xBC, 0x16, 0x00, 0x00, 0x01, 0xE0, 0x16, 0x00, 0x00, 0x01, 0x06, +/* 00000290 */ 0x17, 0x00, 0x00, 0x01, 0x1A, 0x17, 0x00, 0x00, 0x01, 0x4C, 0x17, 0x00, 0x00, 0x01, 0x6C, 0x17, +/* 000002A0 */ 0x00, 0x00, 0x01, 0x8E, 0x17, 0x00, 0x00, 0x01, 0xB4, 0x17, 0x00, 0x00, 0x01, 0xF0, 0x17, 0x00, +/* 000002B0 */ 0x00, 0x01, 0x18, 0x18, 0x00, 0x00, 0x01, 0x34, 0x18, 0x00, 0x00, 0x01, 0x52, 0x18, 0x00, 0x00, +/* 000002C0 */ 0x01, 0x7E, 0x18, 0x00, 0x00, 0x01, 0x9A, 0x18, 0x00, 0x00, 0x01, 0xBA, 0x18, 0x00, 0x00, 0x01, +/* 000002D0 */ 0xDC, 0x18, 0x00, 0x00, 0x01, 0xF6, 0x18, 0x00, 0x00, 0x01, 0x28, 0x19, 0x00, 0x00, 0x01, 0x66, +/* 000002E0 */ 0x19, 0x00, 0x00, 0x01, 0x94, 0x19, 0x00, 0x00, 0x01, 0xC2, 0x19, 0x00, 0x00, 0x01, 0xF2, 0x19, +/* 000002F0 */ 0x00, 0x00, 0x01, 0x2A, 0x1A, 0x00, 0x00, 0x01, 0x4C, 0x1A, 0x00, 0x00, 0x01, 0x78, 0x1A, 0x00, +/* 00000300 */ 0x00, 0x01, 0xA2, 0x1A, 0x00, 0x00, 0x01, 0xCC, 0x1A, 0x00, 0x00, 0x01, 0xFC, 0x1A, 0x00, 0x00, +/* 00000310 */ 0x01, 0x2C, 0x1B, 0x00, 0x00, 0x01, 0x4E, 0x1B, 0x00, 0x00, 0x01, 0x6E, 0x1B, 0x00, 0x00, 0x01, +/* 00000320 */ 0x86, 0x1B, 0x00, 0x00, 0x01, 0xC8, 0x1B, 0x00, 0x00, 0x01, 0x00, 0x1C, 0x00, 0x00, 0x01, 0x4A, +/* 00000330 */ 0x1C, 0x00, 0x00, 0x01, 0x8A, 0x1C, 0x00, 0x00, 0x01, 0xD8, 0x1C, 0x00, 0x00, 0x01, 0x1C, 0x1D, +/* 00000340 */ 0x00, 0x00, 0x01, 0x4E, 0x1D, 0x00, 0x00, 0x01, 0x7A, 0x1D, 0x00, 0x00, 0x01, 0x7E, 0x1D, 0x00, +/* 00000350 */ 0x00, 0x01, 0x8C, 0x1D, 0x00, 0x00, 0x00, 0x94, 0x1D, 0x00, 0x00, 0x00, 0x9C, 0x1D, 0x00, 0x00, +/* 00000360 */ 0x00, 0xB8, 0x1D, 0x00, 0x00, 0x00, 0xD4, 0x1D, 0x00, 0x00, 0x00, 0xE8, 0x1D, 0x00, 0x00, 0x00, +/* 00000370 */ 0xF8, 0x1D, 0x00, 0x00, 0x00, 0x10, 0x1E, 0x00, 0x00, 0x00, 0x30, 0x1E, 0x00, 0x00, 0x00, 0x40, +/* 00000380 */ 0x1E, 0x00, 0x00, 0x00, 0x52, 0x1E, 0x00, 0x00, 0x00, 0x66, 0x1E, 0x00, 0x00, 0x00, 0x74, 0x1E, +/* 00000390 */ 0x00, 0x00, 0x00, 0x92, 0x1E, 0x00, 0x00, 0x00, 0x9E, 0x1E, 0x00, 0x00, 0x00, 0xB0, 0x1E, 0x00, +/* 000003A0 */ 0x00, 0x00, 0xC0, 0x1E, 0x00, 0x00, 0x00, 0xD2, 0x1E, 0x00, 0x00, 0x00, 0xE4, 0x1E, 0x00, 0x00, +/* 000003B0 */ 0x00, 0xF6, 0x1E, 0x00, 0x00, 0x01, 0x02, 0x1F, 0x00, 0x00, 0x00, 0x24, 0x1F, 0x00, 0x00, 0x00, +/* 000003C0 */ 0x46, 0x1F, 0x00, 0x00, 0x00, 0x58, 0x1F, 0x00, 0x00, 0x00, 0x7A, 0x1F, 0x00, 0x00, 0x00, 0x8A, +/* 000003D0 */ 0x1F, 0x00, 0x00, 0x00, 0x9E, 0x1F, 0x00, 0x00, 0x00, 0xAC, 0x1F, 0x00, 0x00, 0x00, 0xBC, 0x1F, +/* 000003E0 */ 0x00, 0x00, 0x00, 0xC2, 0x1F, 0x00, 0x00, 0x00, 0xD0, 0x1F, 0x00, 0x00, 0x00, 0xD4, 0x1F, 0x00, +/* 000003F0 */ 0x00, 0x01, 0xF6, 0x1F, 0x00, 0x00, 0x01, 0x0A, 0x20, 0x00, 0x00, 0x01, 0x0E, 0x20, 0x00, 0x00, +/* 00000400 */ 0x01, 0x26, 0x20, 0x00, 0x00, 0x01, 0x34, 0x20, 0x00, 0x00, 0x01, 0x5A, 0x20, 0x00, 0x00, 0x00, +/* 00000410 */ 0x68, 0x20, 0x00, 0x00, 0x01, 0x7E, 0x20, 0x00, 0x00, 0x00, 0x84, 0x20, 0x00, 0x00, 0x00, 0x8C, +/* 00000420 */ 0x20, 0x00, 0x00, 0x01, 0xA8, 0x20, 0x00, 0x00, 0x00, 0xB2, 0x20, 0x00, 0x00, 0x00, 0xC2, 0x20, +/* 00000430 */ 0x00, 0x00, 0x00, 0xD0, 0x20, 0x00, 0x00, 0x00, 0xDE, 0x20, 0x00, 0x00, 0x00, 0xE4, 0x20, 0x00, +/* 00000440 */ 0x00, 0x00, 0xEA, 0x20, 0x00, 0x00, 0x00, 0xF4, 0x20, 0x00, 0x00, 0x00, 0xF8, 0x20, 0x00, 0x00, +/* 00000450 */ 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x04, 0x21, 0x00, 0x00, 0x00, 0x1A, 0x21, 0x00, 0x00, 0x01, +/* 00000460 */ 0x40, 0x21, 0x00, 0x00, 0x00, 0x4C, 0x21, 0x00, 0x00, 0x00, 0x58, 0x21, 0x00, 0x00, 0x00, 0x60, +/* 00000470 */ 0x21, 0x00, 0x00, 0x00, 0x64, 0x21, 0x00, 0x00, 0x00, 0x68, 0x21, 0x00, 0x00, 0x00, 0x1C, 0x22, +/* 00000480 */ 0x00, 0x00, 0x00, 0xB8, 0x22, 0x00, 0x00, 0x00, 0x3E, 0x23, 0x00, 0x00, 0x00, 0x4A, 0x23, 0x00, +/* 00000490 */ 0x00, 0x00, 0x52, 0x23, 0x00, 0x00, 0x00, 0x68, 0x23, 0x00, 0x00, 0x00, 0x82, 0x23, 0x00, 0x00, +/* 000004A0 */ 0x00, 0x9C, 0x23, 0x00, 0x00, 0x00, 0xA6, 0x23, 0x00, 0x00, 0x00, 0xBC, 0x23, 0x00, 0x00, 0x00, +/* 000004B0 */ 0xCA, 0x23, 0x00, 0x00, 0x00, 0xD8, 0x23, 0x00, 0x00, 0x00, 0xE2, 0x23, 0x00, 0x00, 0x00, 0xF0, +/* 000004C0 */ 0x23, 0x00, 0x00, 0x00, 0x04, 0x24, 0x00, 0x00, 0x00, 0x1E, 0x24, 0x00, 0x00, 0x00, 0x2A, 0x24, +/* 000004D0 */ 0x00, 0x00, 0x00, 0x38, 0x24, 0x00, 0x00, 0x00, 0x3E, 0x24, 0x00, 0x00, 0x00, 0x4A, 0x24, 0x00, +/* 000004E0 */ 0x00, 0x00, 0x52, 0x24, 0x00, 0x00, 0x00, 0x62, 0x24, 0x00, 0x00, 0x00, 0x6E, 0x24, 0x00, 0x00, +/* 000004F0 */ 0x00, 0x7E, 0x24, 0x00, 0x00, 0x00, 0x8A, 0x24, 0x00, 0x00, 0x00, 0x94, 0x24, 0x00, 0x00, 0x00, +/* 00000500 */ 0x9A, 0x24, 0x00, 0x00, 0x00, 0x9E, 0x24, 0x00, 0x00, 0x00, 0xA2, 0x24, 0x00, 0x00, 0x01, 0xA6, +/* 00000510 */ 0x24, 0x00, 0x00, 0x01, 0xAA, 0x24, 0x00, 0x00, 0x01, 0xBC, 0x24, 0x00, 0x00, 0x01, 0xCA, 0x24, +/* 00000520 */ 0x00, 0x00, 0x01, 0xD8, 0x24, 0x00, 0x00, 0x01, 0xEA, 0x24, 0x00, 0x00, 0x01, 0x00, 0x25, 0x00, +/* 00000530 */ 0x00, 0x00, 0x14, 0x25, 0x00, 0x00, 0x00, 0x22, 0x25, 0x00, 0x00, 0x01, 0x46, 0x25, 0x00, 0x00, +/* 00000540 */ 0x01, 0x54, 0x25, 0x00, 0x00, 0x00, 0x7E, 0x25, 0x00, 0x00, 0x00, 0xAA, 0x25, 0x00, 0x00, 0x00, +/* 00000550 */ 0xD6, 0x25, 0x00, 0x00, 0x00, 0x08, 0x26, 0x00, 0x00, 0x00, 0x3A, 0x26, 0x00, 0x00, 0x00, 0x4C, +/* 00000560 */ 0x26, 0x00, 0x00, 0x00, 0x68, 0x26, 0x00, 0x00, 0x00, 0x76, 0x26, 0x00, 0x00, 0x01, 0x90, 0x26, +/* 00000570 */ 0x00, 0x00, 0x01, 0x9A, 0x26, 0x00, 0x00, 0x01, 0xAC, 0x26, 0x00, 0x00, 0x01, 0xD2, 0x26, 0x00, +/* 00000580 */ 0x00, 0x01, 0x02, 0x27, 0x00, 0x00, 0x01, 0x26, 0x27, 0x00, 0x00, 0x00, 0x34, 0x27, 0x00, 0x00, +/* 00000590 */ 0x00, 0x72, 0x27, 0x00, 0x00, 0x00, 0x8E, 0x27, 0x00, 0x00, 0x00, 0xCE, 0x27, 0x00, 0x00, 0x00, +/* 000005A0 */ 0xE2, 0x27, 0x00, 0x00, 0x00, 0xFA, 0x27, 0x00, 0x00, 0x00, 0x1A, 0x28, 0x00, 0x00, 0x00, 0x6A, +/* 000005B0 */ 0x28, 0x00, 0x00, 0x00, 0x82, 0x28, 0x00, 0x00, 0x00, 0x92, 0x28, 0x00, 0x00, 0x00, 0x9E, 0x28, +/* 000005C0 */ 0x00, 0x00, 0x00, 0xA8, 0x28, 0x00, 0x00, 0x00, 0xB6, 0x28, 0x00, 0x00, 0x00, 0xBC, 0x28, 0x00, +/* 000005D0 */ 0x00, 0x00, 0xC2, 0x28, 0x00, 0x00, 0x00, 0xC8, 0x28, 0x00, 0x00, 0x00, 0xD8, 0x28, 0x00, 0x00, +/* 000005E0 */ 0x01, 0xEC, 0x28, 0x00, 0x00, 0x00, 0xF8, 0x28, 0x00, 0x00, 0x00, 0x04, 0x29, 0x00, 0x00, 0x00, +/* 000005F0 */ 0x10, 0x29, 0x00, 0x00, 0x00, 0x20, 0x29, 0x00, 0x00, 0x00, 0x38, 0x29, 0x00, 0x00, 0x00, 0x42, +/* 00000600 */ 0x29, 0x00, 0x00, 0x00, 0x50, 0x29, 0x00, 0x00, 0x00, 0x5A, 0x29, 0x00, 0x00, 0x00, 0x6A, 0x29, +/* 00000610 */ 0x00, 0x00, 0x00, 0x8E, 0x29, 0x00, 0x00, 0x01, 0x9E, 0x29, 0x00, 0x00, 0x01, 0xB2, 0x29, 0x00, +/* 00000620 */ 0x00, 0x01, 0xDA, 0x29, 0x00, 0x00, 0x00, 0xF6, 0x29, 0x00, 0x00, 0x01, 0x10, 0x2A, 0x00, 0x00, +/* 00000630 */ 0x00, 0x46, 0x2A, 0x00, 0x00, 0x00, 0x8C, 0x2A, 0x00, 0x00, 0x01, 0xBA, 0x2A, 0x00, 0x00, 0x01, +/* 00000640 */ 0xE6, 0x2A, 0x00, 0x00, 0x01, 0x0C, 0x2B, 0x00, 0x00, 0x00, 0x1A, 0x2B, 0x00, 0x00, 0x00, 0x5A, +/* 00000650 */ 0x2B, 0x00, 0x00, 0x00, 0x7E, 0x2B, 0x00, 0x00, 0x00, 0xC4, 0x2B, 0x00, 0x00, 0x00, 0x18, 0x2C, +/* 00000660 */ 0x00, 0x00, 0x00, 0x70, 0x2C, 0x00, 0x00, 0x00, 0x86, 0x2C, 0x00, 0x00, 0x00, 0x94, 0x2C, 0x00, +/* 00000670 */ 0x00, 0x00, 0xB0, 0x2C, 0x00, 0x00, 0x00, 0xB6, 0x2C, 0x00, 0x00, 0x01, 0xC2, 0x2C, 0x00, 0x00, +/* 00000680 */ 0x00, 0xD2, 0x2C, 0x00, 0x00, 0x00, 0xE2, 0x2C, 0x00, 0x00, 0x00, 0xF4, 0x2C, 0x00, 0x00, 0x00, +/* 00000690 */ 0x14, 0x2D, 0x00, 0x00, 0x00, 0x1E, 0x2D, 0x00, 0x00, 0x00, 0x2C, 0x2D, 0x00, 0x00, 0x00, 0x44, +/* 000006A0 */ 0x2D, 0x00, 0x00, 0x01, 0x74, 0x2D, 0x00, 0x00, 0x00, 0x92, 0x2D, 0x00, 0x00, 0x00, 0xCE, 0x2D, +/* 000006B0 */ 0x00, 0x00, 0x00, 0x18, 0x2E, 0x00, 0x00, 0x00, 0x38, 0x2E, 0x00, 0x00, 0x01, 0x50, 0x2E, 0x00, +/* 000006C0 */ 0x00, 0x01, 0xA2, 0x2E, 0x00, 0x00, 0x01, 0xC8, 0x2E, 0x00, 0x00, 0x01, 0xF2, 0x2E, 0x00, 0x00, +/* 000006D0 */ 0x01, 0x24, 0x2F, 0x00, 0x00, 0x01, 0x48, 0x2F, 0x00, 0x00, 0x01, 0x9A, 0x2F, 0x00, 0x00, 0x01, +/* 000006E0 */ 0xCA, 0x2F, 0x00, 0x00, 0x01, 0xF4, 0x2F, 0x00, 0x00, 0x00, 0xFE, 0x2F, 0x00, 0x00, 0x01, 0x0C, +/* 000006F0 */ 0x30, 0x00, 0x00, 0x01, 0x18, 0x30, 0x00, 0x00, 0x01, 0x22, 0x30, 0x00, 0x00, 0x01, 0x32, 0x30, +/* 00000700 */ 0x00, 0x00, 0x00, 0x42, 0x30, 0x00, 0x00, 0x00, 0x4A, 0x30, 0x00, 0x00, 0x00, 0x54, 0x30, 0x00, +/* 00000710 */ 0x00, 0x00, 0x60, 0x30, 0x00, 0x00, 0x00, 0x68, 0x30, 0x00, 0x00, 0x00, 0x72, 0x30, 0x00, 0x00, +/* 00000720 */ 0x00, 0x80, 0x30, 0x00, 0x00, 0x00, 0x8E, 0x30, 0x00, 0x00, 0x00, 0xA8, 0x30, 0x00, 0x00, 0x00, +/* 00000730 */ 0xCE, 0x30, 0x00, 0x00, 0x00, 0xF4, 0x30, 0x00, 0x00, 0x00, 0x30, 0x31, 0x00, 0x00, 0x00, 0x38, +/* 00000740 */ 0x31, 0x00, 0x00, 0x00, 0x40, 0x31, 0x00, 0x00, 0x00, 0x84, 0x31, 0x00, 0x00, 0x00, 0x8E, 0x31, +/* 00000750 */ 0x00, 0x00, 0x00, 0xD2, 0x31, 0x00, 0x00, 0x00, 0xDC, 0x31, 0x00, 0x00, 0x00, 0x04, 0x32, 0x00, +/* 00000760 */ 0x00, 0x00, 0x4E, 0x32, 0x00, 0x00, 0x00, 0xA6, 0x32, 0x00, 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, +/* 00000770 */ 0x01, 0x22, 0x33, 0x00, 0x00, 0x01, 0x42, 0x33, 0x00, 0x00, 0x01, 0x6E, 0x33, 0x00, 0x00, 0x01, +/* 00000780 */ 0x9A, 0x33, 0x00, 0x00, 0x01, 0xC2, 0x33, 0x00, 0x00, 0x01, 0xEA, 0x33, 0x00, 0x00, 0x00, 0xEE, +/* 00000790 */ 0x33, 0x00, 0x00, 0x01, 0xF2, 0x33, 0x00, 0x00, 0x01, 0xF6, 0x33, 0x00, 0x00, 0x01, 0xFA, 0x33, +/* 000007A0 */ 0x00, 0x00, 0x01, 0xFE, 0x33, 0x00, 0x00, 0x00, 0x02, 0x34, 0x00, 0x00, 0x00, 0x10, 0x34, 0x00, +/* 000007B0 */ 0x00, 0x01, 0x14, 0x34, 0x00, 0x00, 0x01, 0x22, 0x34, 0x00, 0x00, 0x01, 0x26, 0x34, 0x00, 0x00, +/* 000007C0 */ 0x01, 0x2A, 0x34, 0x00, 0x00, 0x01, 0x2E, 0x34, 0x00, 0x00, 0x01, 0x32, 0x34, 0x00, 0x00, 0x01, +/* 000007D0 */ 0x36, 0x34, 0x00, 0x00, 0x01, 0x3A, 0x34, 0x00, 0x00, 0x01, 0x3E, 0x34, 0x00, 0x00, 0x01, 0x42, +/* 000007E0 */ 0x34, 0x00, 0x00, 0x01, 0x46, 0x34, 0x00, 0x00, 0x01, 0x4A, 0x34, 0x00, 0x00, 0x01, 0x4E, 0x34, +/* 000007F0 */ 0x00, 0x00, 0x01, 0x52, 0x34, 0x00, 0x00, 0x01, 0x56, 0x34, 0x00, 0x00, 0x01, 0x5A, 0x34, 0x00, +/* 00000800 */ 0x00, 0x01, 0x5E, 0x34, 0x00, 0x00, 0x01, 0x62, 0x34, 0x00, 0x00, 0x01, 0x66, 0x34, 0x00, 0x00, +/* 00000810 */ 0x01, 0x6A, 0x34, 0x00, 0x00, 0x01, 0x6E, 0x34, 0x00, 0x00, 0x01, 0x72, 0x34, 0x00, 0x00, 0x01, +/* 00000820 */ 0x76, 0x34, 0x00, 0x00, 0x01, 0x7E, 0x34, 0x00, 0x00, 0x01, 0x86, 0x34, 0x00, 0x00, 0x01, 0x8E, +/* 00000830 */ 0x34, 0x00, 0x00, 0x01, 0x96, 0x34, 0x00, 0x00, 0x00, 0x9A, 0x34, 0x00, 0x00, 0x00, 0x9E, 0x34, +/* 00000840 */ 0x00, 0x00, 0x01, 0xB2, 0x34, 0x00, 0x00, 0x00, 0xB8, 0x34, 0x00, 0x00, 0x00, 0xBE, 0x34, 0x00, +/* 00000850 */ 0x00, 0x00, 0xD6, 0x34, 0x00, 0x00, 0x00, 0xE8, 0x34, 0x00, 0x00, 0x00, 0x36, 0x35, 0x00, 0x00, +/* 00000860 */ 0x00, 0x46, 0x35, 0x00, 0x00, 0x00, 0x56, 0x35, 0x00, 0x00, 0x00, 0x5E, 0x35, 0x00, 0x00, 0x00, +/* 00000870 */ 0x7A, 0x35, 0x00, 0x00, 0x00, 0x86, 0x35, 0x00, 0x00, 0x01, 0xBA, 0x35, 0x00, 0x00, 0x01, 0xD4, +/* 00000880 */ 0x35, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x1A, 0x36, 0x00, 0x00, 0x01, 0x2A, 0x36, +/* 00000890 */ 0x00, 0x00, 0x01, 0x3A, 0x36, 0x00, 0x00, 0x01, 0x4E, 0x36, 0x00, 0x00, 0x00, 0x8C, 0x36, 0x00, +/* 000008A0 */ 0x00, 0x00, 0xD2, 0x36, 0x00, 0x00, 0x00, 0x18, 0x37, 0x00, 0x00, 0x00, 0x58, 0x37, 0x00, 0x00, +/* 000008B0 */ 0x00, 0xA6, 0x37, 0x00, 0x00, 0x00, 0xB8, 0x37, 0x00, 0x00, 0x01, 0xE4, 0x37, 0x00, 0x00, 0x01, +/* 000008C0 */ 0x00, 0x38, 0x00, 0x00, 0x01, 0x2A, 0x38, 0x00, 0x00, 0x00, 0x4C, 0x38, 0x00, 0x00, 0x00, 0x94, +/* 000008D0 */ 0x38, 0x00, 0x00, 0x00, 0xD8, 0x38, 0x00, 0x00, 0x00, 0xE6, 0x38, 0x00, 0x00, 0x00, 0x3C, 0x39, +/* 000008E0 */ 0x00, 0x00, 0x00, 0x46, 0x39, 0x00, 0x00, 0x00, 0x58, 0x39, 0x00, 0x00, 0x00, 0x68, 0x39, 0x00, +/* 000008F0 */ 0x00, 0x01, 0x8A, 0x39, 0x00, 0x00, 0x01, 0xB8, 0x39, 0x00, 0x00, 0x00, 0xC4, 0x39, 0x00, 0x00, +/* 00000900 */ 0x01, 0xCA, 0x39, 0x00, 0x00, 0x00, 0x24, 0x3A, 0x00, 0x00, 0x00, 0x4E, 0x3A, 0x00, 0x00, 0x00, +/* 00000910 */ 0x76, 0x3A, 0x00, 0x00, 0x01, 0x88, 0x3A, 0x00, 0x00, 0x01, 0xA8, 0x3A, 0x00, 0x00, 0x00, 0xB0, +/* 00000920 */ 0x3A, 0x00, 0x00, 0x00, 0xC0, 0x3A, 0x00, 0x00, 0x00, 0xEA, 0x3A, 0x00, 0x00, 0x00, 0x06, 0x3B, +/* 00000930 */ 0x00, 0x00, 0x00, 0x24, 0x3B, 0x00, 0x00, 0x00, 0x38, 0x3B, 0x00, 0x00, 0x01, 0x4A, 0x3B, 0x00, +/* 00000940 */ 0x00, 0x01, 0x62, 0x3B, 0x00, 0x00, 0x00, 0x6C, 0x3B, 0x00, 0x00, 0x01, 0x76, 0x3B, 0x00, 0x00, +/* 00000950 */ 0x00, 0x84, 0x3B, 0x00, 0x00, 0x01, 0x90, 0x3B, 0x00, 0x00, 0x01, 0x9E, 0x3B, 0x00, 0x00, 0x01, +/* 00000960 */ 0xBA, 0x3B, 0x00, 0x00, 0x00, 0xE8, 0x3B, 0x00, 0x00, 0x00, 0x34, 0x3C, 0x00, 0x00, 0x00, 0x88, +/* 00000970 */ 0x3C, 0x00, 0x00, 0x00, 0xE0, 0x3C, 0x00, 0x00, 0x00, 0x1C, 0x3D, 0x00, 0x00, 0x01, 0x2E, 0x3D, +/* 00000980 */ 0x00, 0x00, 0x01, 0x60, 0x3D, 0x00, 0x00, 0x01, 0x90, 0x3D, 0x00, 0x00, 0x00, 0x9A, 0x3D, 0x00, +/* 00000990 */ 0x00, 0x00, 0xEC, 0x3D, 0x00, 0x00, 0x00, 0x0A, 0x3E, 0x00, 0x00, 0x00, 0x42, 0x3E, 0x00, 0x00, +/* 000009A0 */ 0x00, 0x50, 0x3E, 0x00, 0x00, 0x00, 0x80, 0x3E, 0x00, 0x00, 0x00, 0x84, 0x3E, 0x00, 0x00, 0x00, +/* 000009B0 */ 0x88, 0x3E, 0x00, 0x00, 0x01, 0xAE, 0x3E, 0x00, 0x00, 0x01, 0xBE, 0x3E, 0x00, 0x00, 0x01, 0xDA, +/* 000009C0 */ 0x3E, 0x00, 0x00, 0x01, 0x02, 0x3F, 0x00, 0x00, 0x01, 0x1A, 0x3F, 0x00, 0x00, 0x01, 0x2E, 0x3F, +/* 000009D0 */ 0x00, 0x00, 0x00, 0x40, 0x3F, 0x00, 0x00, 0x00, 0x4A, 0x3F, 0x00, 0x00, 0x01, 0x6A, 0x3F, 0x00, +/* 000009E0 */ 0x00, 0x00, 0xB8, 0x3F, 0x00, 0x00, 0x00, 0xBE, 0x3F, 0x00, 0x00, 0x01, 0xF0, 0x3F, 0x00, 0x00, +/* 000009F0 */ 0x01, 0x14, 0x40, 0x00, 0x00, 0x00, 0x24, 0x40, 0x00, 0x00, 0x01, 0x42, 0x40, 0x00, 0x00, 0x00, +/* 00000A00 */ 0x50, 0x40, 0x00, 0x00, 0x01, 0x6C, 0x40, 0x00, 0x00, 0x00, 0x7C, 0x40, 0x00, 0x00, 0x01, 0x9E, +/* 00000A10 */ 0x40, 0x00, 0x00, 0x00, 0xB0, 0x40, 0x00, 0x00, 0x01, 0xCE, 0x40, 0x00, 0x00, 0x00, 0xDC, 0x40, +/* 00000A20 */ 0x00, 0x00, 0x01, 0xFA, 0x40, 0x00, 0x00, 0x00, 0x08, 0x41, 0x00, 0x00, 0x01, 0x2A, 0x41, 0x00, +/* 00000A30 */ 0x00, 0x00, 0x46, 0x41, 0x00, 0x00, 0x01, 0x60, 0x41, 0x00, 0x00, 0x00, 0x6A, 0x41, 0x00, 0x00, +/* 00000A40 */ 0x01, 0x88, 0x41, 0x00, 0x00, 0x00, 0x96, 0x41, 0x00, 0x00, 0x01, 0xD0, 0x41, 0x00, 0x00, 0x01, +/* 00000A50 */ 0xFC, 0x41, 0x00, 0x00, 0x01, 0x38, 0x42, 0x00, 0x00, 0x01, 0x86, 0x42, 0x00, 0x00, 0x01, 0xB0, +/* 00000A60 */ 0x42, 0x00, 0x00, 0x01, 0xC2, 0x42, 0x00, 0x00, 0x00, 0xEE, 0x42, 0x00, 0x00, 0x00, 0x0C, 0x43, +/* 00000A70 */ 0x00, 0x00, 0x00, 0x2E, 0x43, 0x00, 0x00, 0x00, 0x42, 0x43, 0x00, 0x00, 0x00, 0x5E, 0x43, 0x00, +/* 00000A80 */ 0x00, 0x00, 0x82, 0x43, 0x00, 0x00, 0x00, 0x98, 0x43, 0x00, 0x00, 0x00, 0xC2, 0x43, 0x00, 0x00, +/* 00000A90 */ 0x00, 0xDE, 0x43, 0x00, 0x00, 0x00, 0xE4, 0x43, 0x00, 0x00, 0x00, 0x30, 0x44, 0x00, 0x00, 0x00, +/* 00000AA0 */ 0xFA, 0x44, 0x00, 0x00, 0x00, 0x10, 0x45, 0x00, 0x00, 0x00, 0x56, 0x45, 0x00, 0x00, 0x00, 0x60, +/* 00000AB0 */ 0x45, 0x00, 0x00, 0x00, 0x64, 0x45, 0x00, 0x00, 0x00, 0x68, 0x45, 0x00, 0x00, 0x00, 0x6C, 0x45, +/* 00000AC0 */ 0x00, 0x00, 0x00, 0x84, 0x45, 0x00, 0x00, 0x00, 0xA2, 0x45, 0x00, 0x00, 0x00, 0xEE, 0x45, 0x00, +/* 00000AD0 */ 0x00, 0x00, 0xCE, 0x46, 0x00, 0x00, 0x00, 0xE8, 0x46, 0x00, 0x00, 0x00, 0xF8, 0x46, 0x00, 0x00, +/* 00000AE0 */ 0x00, 0x0C, 0x47, 0x00, 0x00, 0x00, 0x20, 0x47, 0x00, 0x00, 0x00, 0xA2, 0x47, 0x00, 0x00, 0x00, +/* 00000AF0 */ 0xCE, 0x47, 0x00, 0x00, 0x00, 0xE6, 0x47, 0x00, 0x00, 0x00, 0xF8, 0x47, 0x00, 0x00, 0x00, 0x32, +/* 00000B00 */ 0x48, 0x00, 0x00, 0x00, 0x4A, 0x48, 0x00, 0x00, 0x00, 0x62, 0x48, 0x00, 0x00, 0x00, 0x6C, 0x48, +/* 00000B10 */ 0x00, 0x00, 0x01, 0x76, 0x48, 0x00, 0x00, 0x00, 0xC8, 0x48, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, +/* 00000B20 */ 0x6C, 0x00, 0x6F, 0x00, 0x62, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x20, 0x00, 0x63, 0x00, 0x6F, 0x00, +/* 00000B30 */ 0x64, 0x00, 0x65, 0x00, 0x00, 0x00, 0x75, 0x00, 0x73, 0x00, 0x65, 0x00, 0x20, 0x00, 0x73, 0x00, +/* 00000B40 */ 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x63, 0x00, 0x74, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, +/* 00000B50 */ 0x74, 0x00, 0x6C, 0x00, 0x43, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x00, 0x00, +/* 00000B60 */ 0x73, 0x00, 0x65, 0x00, 0x74, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, +/* 00000B70 */ 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x00, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, +/* 00000B80 */ 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x4C, 0x00, 0x65, 0x00, 0x6E, 0x00, +/* 00000B90 */ 0x67, 0x00, 0x74, 0x00, 0x68, 0x00, 0x00, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x6C, 0x00, +/* 00000BA0 */ 0x49, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, +/* 00000BB0 */ 0x46, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x00, 0x00, 0x52, 0x00, 0x61, 0x00, 0x69, 0x00, +/* 00000BC0 */ 0x73, 0x00, 0x65, 0x00, 0x41, 0x00, 0x73, 0x00, 0x73, 0x00, 0x65, 0x00, 0x72, 0x00, 0x74, 0x00, +/* 00000BD0 */ 0x00, 0x00, 0x4F, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x47, 0x00, +/* 00000BE0 */ 0x65, 0x00, 0x74, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, +/* 00000BF0 */ 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x4F, 0x00, 0x62, 0x00, +/* 00000C00 */ 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x49, 0x00, 0x73, 0x00, 0x45, 0x00, 0x78, 0x00, +/* 00000C10 */ 0x74, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x69, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, +/* 00000C20 */ 0x00, 0x00, 0x4F, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x47, 0x00, +/* 00000C30 */ 0x65, 0x00, 0x74, 0x00, 0x4F, 0x00, 0x77, 0x00, 0x6E, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, +/* 00000C40 */ 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x74, 0x00, 0x79, 0x00, 0x4E, 0x00, 0x61, 0x00, 0x6D, 0x00, +/* 00000C50 */ 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x4F, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, +/* 00000C60 */ 0x74, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, +/* 00000C70 */ 0x65, 0x00, 0x48, 0x00, 0x61, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x77, 0x00, 0x6E, 0x00, 0x50, 0x00, +/* 00000C80 */ 0x72, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, +/* 00000C90 */ 0x5F, 0x00, 0x6F, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x44, 0x00, +/* 00000CA0 */ 0x65, 0x00, 0x66, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, +/* 00000CB0 */ 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x4F, 0x00, 0x62, 0x00, +/* 00000CC0 */ 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x44, 0x00, 0x65, 0x00, 0x66, 0x00, 0x69, 0x00, +/* 00000CD0 */ 0x6E, 0x00, 0x65, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, +/* 00000CE0 */ 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, +/* 00000CF0 */ 0x49, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, +/* 00000D00 */ 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x45, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x00, 0x00, +/* 00000D10 */ 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x73, 0x00, +/* 00000D20 */ 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x64, 0x00, +/* 00000D30 */ 0x65, 0x00, 0x78, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, +/* 00000D40 */ 0x61, 0x00, 0x79, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, +/* 00000D50 */ 0x63, 0x00, 0x65, 0x00, 0x4A, 0x00, 0x6F, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x46, 0x00, +/* 00000D60 */ 0x75, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x49, 0x00, +/* 00000D70 */ 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, 0x42, 0x00, +/* 00000D80 */ 0x69, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x00, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00000D90 */ 0x49, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, +/* 00000DA0 */ 0x47, 0x00, 0x65, 0x00, 0x74, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, +/* 00000DB0 */ 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x4E, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x00, 0x00, +/* 00000DC0 */ 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x49, 0x00, 0x6E, 0x00, +/* 00000DD0 */ 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, 0x52, 0x00, 0x65, 0x00, +/* 00000DE0 */ 0x70, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x63, 0x00, 0x65, 0x00, 0x00, 0x00, 0x53, 0x00, 0x74, 0x00, +/* 00000DF0 */ 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, +/* 00000E00 */ 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, +/* 00000E10 */ 0x77, 0x00, 0x65, 0x00, 0x72, 0x00, 0x43, 0x00, 0x61, 0x00, 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, +/* 00000E20 */ 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x49, 0x00, 0x6E, 0x00, +/* 00000E30 */ 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, 0x54, 0x00, 0x6F, 0x00, +/* 00000E40 */ 0x55, 0x00, 0x70, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x43, 0x00, 0x61, 0x00, 0x73, 0x00, +/* 00000E50 */ 0x65, 0x00, 0x00, 0x00, 0x74, 0x00, 0x68, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x45, 0x00, +/* 00000E60 */ 0x78, 0x00, 0x49, 0x00, 0x66, 0x00, 0x4F, 0x00, 0x4F, 0x00, 0x4D, 0x00, 0x4F, 0x00, 0x72, 0x00, +/* 00000E70 */ 0x53, 0x00, 0x4F, 0x00, 0x45, 0x00, 0x00, 0x00, 0x74, 0x00, 0x61, 0x00, 0x67, 0x00, 0x50, 0x00, +/* 00000E80 */ 0x75, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x63, 0x00, 0x46, 0x00, 0x75, 0x00, 0x6E, 0x00, +/* 00000E90 */ 0x63, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, +/* 00000EA0 */ 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x66, 0x00, +/* 00000EB0 */ 0x6F, 0x00, 0x72, 0x00, 0x45, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x49, 0x00, 0x66, 0x00, +/* 00000EC0 */ 0x50, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x00, 0x00, +/* 00000ED0 */ 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x45, 0x00, 0x78, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6E, 0x00, +/* 00000EE0 */ 0x73, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x53, 0x00, 0x75, 0x00, 0x62, 0x00, 0x74, 0x00, +/* 00000EF0 */ 0x61, 0x00, 0x67, 0x00, 0x73, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, +/* 00000F00 */ 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 00000F10 */ 0x65, 0x00, 0x48, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, +/* 00000F20 */ 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x4C, 0x00, +/* 00000F30 */ 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x73, 0x00, +/* 00000F40 */ 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x70, 0x00, 0x70, 0x00, 0x65, 0x00, 0x64, 0x00, 0x44, 0x00, +/* 00000F50 */ 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x4C, 0x00, 0x6F, 0x00, +/* 00000F60 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, +/* 00000F70 */ 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, +/* 00000F80 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x57, 0x00, +/* 00000F90 */ 0x72, 0x00, 0x61, 0x00, 0x70, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x63, 0x00, +/* 00000FA0 */ 0x61, 0x00, 0x6E, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 00000FB0 */ 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 00000FC0 */ 0x65, 0x00, 0x4C, 0x00, 0x69, 0x00, 0x73, 0x00, 0x74, 0x00, 0x57, 0x00, 0x72, 0x00, 0x61, 0x00, +/* 00000FD0 */ 0x70, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, +/* 00000FE0 */ 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x41, 0x00, 0x63, 0x00, 0x63, 0x00, 0x65, 0x00, +/* 00000FF0 */ 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, +/* 00001000 */ 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x56, 0x00, 0x61, 0x00, +/* 00001010 */ 0x6C, 0x00, 0x75, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, 0x76, 0x00, +/* 00001020 */ 0x65, 0x00, 0x72, 0x00, 0x73, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, +/* 00001030 */ 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x41, 0x00, 0x63, 0x00, 0x63, 0x00, 0x65, 0x00, 0x70, 0x00, +/* 00001040 */ 0x74, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, +/* 00001050 */ 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x56, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 00001060 */ 0x75, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x70, 0x00, 0x70, 0x00, +/* 00001070 */ 0x65, 0x00, 0x64, 0x00, 0x44, 0x00, 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, +/* 00001080 */ 0x74, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, +/* 00001090 */ 0x49, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x54, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, +/* 000010A0 */ 0x00, 0x00, 0x69, 0x00, 0x73, 0x00, 0x50, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x66, 0x00, +/* 000010B0 */ 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x55, 0x00, 0x73, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, +/* 000010C0 */ 0x49, 0x00, 0x43, 0x00, 0x55, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x4F, 0x00, 0x54, 0x00, 0x5F, 0x00, +/* 000010D0 */ 0x46, 0x00, 0x4F, 0x00, 0x55, 0x00, 0x4E, 0x00, 0x44, 0x00, 0x00, 0x00, 0x62, 0x00, 0x61, 0x00, +/* 000010E0 */ 0x72, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x61, 0x00, 0x62, 0x00, 0x73, 0x00, +/* 000010F0 */ 0x00, 0x00, 0x66, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6D, 0x00, +/* 00001100 */ 0x61, 0x00, 0x78, 0x00, 0x00, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x00, 0x00, 0x74, 0x00, +/* 00001110 */ 0x6F, 0x00, 0x55, 0x00, 0x70, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x43, 0x00, 0x61, 0x00, +/* 00001120 */ 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x77, 0x00, +/* 00001130 */ 0x65, 0x00, 0x72, 0x00, 0x43, 0x00, 0x61, 0x00, 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, 0x72, 0x00, +/* 00001140 */ 0x65, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x63, 0x00, 0x65, 0x00, 0x00, 0x00, 0x73, 0x00, +/* 00001150 */ 0x70, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x74, 0x00, 0x00, 0x00, 0x73, 0x00, 0x75, 0x00, 0x62, 0x00, +/* 00001160 */ 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, 0x73, 0x00, +/* 00001170 */ 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x64, 0x00, +/* 00001180 */ 0x65, 0x00, 0x78, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 00001190 */ 0x63, 0x00, 0x68, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, 0x70, 0x00, 0x65, 0x00, 0x61, 0x00, +/* 000011A0 */ 0x74, 0x00, 0x00, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x45, 0x00, 0x61, 0x00, 0x63, 0x00, +/* 000011B0 */ 0x68, 0x00, 0x00, 0x00, 0x6A, 0x00, 0x6F, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x61, 0x00, +/* 000011C0 */ 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x65, 0x00, +/* 000011D0 */ 0x78, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x70, 0x00, 0x00, 0x00, +/* 000011E0 */ 0x72, 0x00, 0x65, 0x00, 0x64, 0x00, 0x75, 0x00, 0x63, 0x00, 0x65, 0x00, 0x00, 0x00, 0x73, 0x00, +/* 000011F0 */ 0x6C, 0x00, 0x69, 0x00, 0x63, 0x00, 0x65, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, +/* 00001200 */ 0x63, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x66, 0x00, 0x69, 0x00, 0x6C, 0x00, 0x74, 0x00, +/* 00001210 */ 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x71, 0x00, 0x75, 0x00, +/* 00001220 */ 0x65, 0x00, 0x00, 0x00, 0x6B, 0x00, 0x65, 0x00, 0x79, 0x00, 0x73, 0x00, 0x00, 0x00, 0x68, 0x00, +/* 00001230 */ 0x61, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x77, 0x00, 0x6E, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, +/* 00001240 */ 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x64, 0x00, 0x65, 0x00, +/* 00001250 */ 0x66, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x70, 0x00, +/* 00001260 */ 0x65, 0x00, 0x72, 0x00, 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x69, 0x00, 0x73, 0x00, 0x45, 0x00, +/* 00001270 */ 0x78, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x69, 0x00, 0x62, 0x00, 0x6C, 0x00, +/* 00001280 */ 0x65, 0x00, 0x00, 0x00, 0x63, 0x00, 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00001290 */ 0x00, 0x00, 0x73, 0x00, 0x65, 0x00, 0x74, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, +/* 000012A0 */ 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, +/* 000012B0 */ 0x69, 0x00, 0x73, 0x00, 0x46, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 000012C0 */ 0x00, 0x00, 0x69, 0x00, 0x73, 0x00, 0x4E, 0x00, 0x61, 0x00, 0x4E, 0x00, 0x00, 0x00, 0x67, 0x00, +/* 000012D0 */ 0x65, 0x00, 0x74, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, 0x62, 0x00, +/* 000012E0 */ 0x69, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x00, 0x00, 0x61, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6C, 0x00, +/* 000012F0 */ 0x79, 0x00, 0x00, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x4F, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, +/* 00001300 */ 0x63, 0x00, 0x74, 0x00, 0x00, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, +/* 00001310 */ 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x4E, 0x00, 0x75, 0x00, +/* 00001320 */ 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x4C, 0x00, +/* 00001330 */ 0x6F, 0x00, 0x67, 0x00, 0x69, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x42, 0x00, 0x6F, 0x00, +/* 00001340 */ 0x6F, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x54, 0x00, 0x6F, 0x00, +/* 00001350 */ 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x65, 0x00, 0x67, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, +/* 00001360 */ 0x54, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x74, 0x00, 0x68, 0x00, +/* 00001370 */ 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, +/* 00001380 */ 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x43, 0x00, 0x61, 0x00, +/* 00001390 */ 0x6E, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x4C, 0x00, +/* 000013A0 */ 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x67, 0x00, +/* 000013B0 */ 0x65, 0x00, 0x74, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x69, 0x00, +/* 000013C0 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 000013D0 */ 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x76, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x65, 0x00, +/* 000013E0 */ 0x00, 0x00, 0x77, 0x00, 0x72, 0x00, 0x69, 0x00, 0x74, 0x00, 0x61, 0x00, 0x62, 0x00, 0x6C, 0x00, +/* 000013F0 */ 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x72, 0x00, +/* 00001400 */ 0x61, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, +/* 00001410 */ 0x66, 0x00, 0x69, 0x00, 0x67, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x62, 0x00, 0x6C, 0x00, +/* 00001420 */ 0x65, 0x00, 0x00, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 00001430 */ 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, +/* 00001440 */ 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, +/* 00001450 */ 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, +/* 00001460 */ 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x50, 0x00, +/* 00001470 */ 0x6C, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x52, 0x00, 0x75, 0x00, 0x6C, 0x00, +/* 00001480 */ 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x69, 0x00, 0x73, 0x00, 0x56, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 00001490 */ 0x69, 0x00, 0x64, 0x00, 0x00, 0x00, 0x56, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x64, 0x00, +/* 000014A0 */ 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x43, 0x00, 0x6F, 0x00, +/* 000014B0 */ 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x2E, 0x00, 0x73, 0x00, +/* 000014C0 */ 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, +/* 000014D0 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, +/* 000014E0 */ 0x66, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x4E, 0x00, +/* 000014F0 */ 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 00001500 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, +/* 00001510 */ 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, +/* 00001520 */ 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x49, 0x00, +/* 00001530 */ 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00001540 */ 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, +/* 00001550 */ 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, +/* 00001560 */ 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, +/* 00001570 */ 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x61, 0x00, +/* 00001580 */ 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, +/* 00001590 */ 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, +/* 000015A0 */ 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x65, 0x00, 0x73, 0x00, +/* 000015B0 */ 0x2D, 0x00, 0x45, 0x00, 0x53, 0x00, 0x00, 0x00, 0x74, 0x00, 0x72, 0x00, 0x61, 0x00, 0x64, 0x00, +/* 000015C0 */ 0x00, 0x00, 0x74, 0x00, 0x72, 0x00, 0x61, 0x00, 0x64, 0x00, 0x6E, 0x00, 0x6C, 0x00, 0x00, 0x00, +/* 000015D0 */ 0x6C, 0x00, 0x76, 0x00, 0x2D, 0x00, 0x4C, 0x00, 0x56, 0x00, 0x00, 0x00, 0x64, 0x00, 0x65, 0x00, +/* 000015E0 */ 0x2D, 0x00, 0x44, 0x00, 0x45, 0x00, 0x00, 0x00, 0x70, 0x00, 0x68, 0x00, 0x6F, 0x00, 0x6E, 0x00, +/* 000015F0 */ 0x65, 0x00, 0x62, 0x00, 0x6B, 0x00, 0x00, 0x00, 0x70, 0x00, 0x68, 0x00, 0x6F, 0x00, 0x6E, 0x00, +/* 00001600 */ 0x65, 0x00, 0x62, 0x00, 0x00, 0x00, 0x6A, 0x00, 0x61, 0x00, 0x2D, 0x00, 0x4A, 0x00, 0x50, 0x00, +/* 00001610 */ 0x00, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x68, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x00, 0x00, +/* 00001620 */ 0x72, 0x00, 0x61, 0x00, 0x64, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x00, 0x00, 0x7A, 0x00, +/* 00001630 */ 0x68, 0x00, 0x2D, 0x00, 0x54, 0x00, 0x57, 0x00, 0x00, 0x00, 0x70, 0x00, 0x68, 0x00, 0x6F, 0x00, +/* 00001640 */ 0x6E, 0x00, 0x65, 0x00, 0x74, 0x00, 0x69, 0x00, 0x63, 0x00, 0x00, 0x00, 0x70, 0x00, 0x72, 0x00, +/* 00001650 */ 0x6F, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, +/* 00001660 */ 0x6F, 0x00, 0x6B, 0x00, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7A, 0x00, 0x68, 0x00, 0x2D, 0x00, +/* 00001670 */ 0x48, 0x00, 0x4B, 0x00, 0x00, 0x00, 0x7A, 0x00, 0x68, 0x00, 0x2D, 0x00, 0x4D, 0x00, 0x4F, 0x00, +/* 00001680 */ 0x00, 0x00, 0x7A, 0x00, 0x68, 0x00, 0x2D, 0x00, 0x43, 0x00, 0x4E, 0x00, 0x00, 0x00, 0x70, 0x00, +/* 00001690 */ 0x69, 0x00, 0x6E, 0x00, 0x79, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x7A, 0x00, 0x68, 0x00, +/* 000016A0 */ 0x2D, 0x00, 0x53, 0x00, 0x47, 0x00, 0x00, 0x00, 0x75, 0x00, 0x73, 0x00, 0x65, 0x00, 0x43, 0x00, +/* 000016B0 */ 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, +/* 000016C0 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x6F, 0x00, 0x6B, 0x00, +/* 000016D0 */ 0x75, 0x00, 0x70, 0x00, 0x43, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x00, 0x00, +/* 000016E0 */ 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x42, 0x00, 0x65, 0x00, +/* 000016F0 */ 0x73, 0x00, 0x74, 0x00, 0x46, 0x00, 0x69, 0x00, 0x74, 0x00, 0x43, 0x00, 0x61, 0x00, 0x63, 0x00, +/* 00001700 */ 0x68, 0x00, 0x65, 0x00, 0x00, 0x00, 0x47, 0x00, 0x65, 0x00, 0x74, 0x00, 0x4F, 0x00, 0x70, 0x00, +/* 00001710 */ 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x69, 0x00, +/* 00001720 */ 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x43, 0x00, +/* 00001730 */ 0x75, 0x00, 0x72, 0x00, 0x72, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x79, 0x00, 0x52, 0x00, +/* 00001740 */ 0x65, 0x00, 0x67, 0x00, 0x45, 0x00, 0x78, 0x00, 0x70, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, +/* 00001750 */ 0x64, 0x00, 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x4C, 0x00, +/* 00001760 */ 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x47, 0x00, 0x65, 0x00, +/* 00001770 */ 0x74, 0x00, 0x44, 0x00, 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x74, 0x00, +/* 00001780 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x63, 0x00, +/* 00001790 */ 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x50, 0x00, 0x75, 0x00, 0x62, 0x00, +/* 000017A0 */ 0x6C, 0x00, 0x69, 0x00, 0x63, 0x00, 0x4D, 0x00, 0x65, 0x00, 0x74, 0x00, 0x68, 0x00, 0x6F, 0x00, +/* 000017B0 */ 0x64, 0x00, 0x00, 0x00, 0x4F, 0x00, 0x72, 0x00, 0x64, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x61, 0x00, +/* 000017C0 */ 0x72, 0x00, 0x79, 0x00, 0x43, 0x00, 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 000017D0 */ 0x46, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, +/* 000017E0 */ 0x74, 0x00, 0x72, 0x00, 0x75, 0x00, 0x63, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, +/* 000017F0 */ 0x42, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x41, 0x00, 0x76, 0x00, 0x61, 0x00, 0x69, 0x00, +/* 00001800 */ 0x6C, 0x00, 0x61, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, +/* 00001810 */ 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x6F, 0x00, 0x6B, 0x00, +/* 00001820 */ 0x75, 0x00, 0x70, 0x00, 0x4D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, +/* 00001830 */ 0x72, 0x00, 0x00, 0x00, 0x42, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x46, 0x00, 0x69, 0x00, +/* 00001840 */ 0x74, 0x00, 0x4D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x72, 0x00, +/* 00001850 */ 0x00, 0x00, 0x55, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x64, 0x00, 0x65, 0x00, +/* 00001860 */ 0x45, 0x00, 0x78, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x69, 0x00, 0x6F, 0x00, +/* 00001870 */ 0x6E, 0x00, 0x56, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x65, 0x00, 0x00, 0x00, 0x52, 0x00, +/* 00001880 */ 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, +/* 00001890 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x47, 0x00, 0x65, 0x00, 0x74, 0x00, +/* 000018A0 */ 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x4F, 0x00, 0x70, 0x00, +/* 000018B0 */ 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x43, 0x00, 0x55, 0x00, 0x52, 0x00, +/* 000018C0 */ 0x52, 0x00, 0x45, 0x00, 0x4E, 0x00, 0x43, 0x00, 0x59, 0x00, 0x5F, 0x00, 0x43, 0x00, 0x4F, 0x00, +/* 000018D0 */ 0x44, 0x00, 0x45, 0x00, 0x5F, 0x00, 0x52, 0x00, 0x45, 0x00, 0x00, 0x00, 0x70, 0x00, 0x61, 0x00, +/* 000018E0 */ 0x72, 0x00, 0x73, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x74, 0x00, +/* 000018F0 */ 0x61, 0x00, 0x67, 0x00, 0x00, 0x00, 0x49, 0x00, 0x73, 0x00, 0x57, 0x00, 0x65, 0x00, 0x6C, 0x00, +/* 00001900 */ 0x6C, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x64, 0x00, 0x43, 0x00, +/* 00001910 */ 0x75, 0x00, 0x72, 0x00, 0x72, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x79, 0x00, 0x43, 0x00, +/* 00001920 */ 0x6F, 0x00, 0x64, 0x00, 0x65, 0x00, 0x00, 0x00, 0x49, 0x00, 0x73, 0x00, 0x53, 0x00, 0x74, 0x00, +/* 00001930 */ 0x72, 0x00, 0x75, 0x00, 0x63, 0x00, 0x74, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 00001940 */ 0x6C, 0x00, 0x79, 0x00, 0x56, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x64, 0x00, 0x4C, 0x00, +/* 00001950 */ 0x61, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x75, 0x00, 0x61, 0x00, 0x67, 0x00, 0x65, 0x00, 0x54, 0x00, +/* 00001960 */ 0x61, 0x00, 0x67, 0x00, 0x00, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x6F, 0x00, 0x6E, 0x00, +/* 00001970 */ 0x69, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x4C, 0x00, +/* 00001980 */ 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x69, 0x00, 0x73, 0x00, +/* 00001990 */ 0x74, 0x00, 0x00, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x6F, 0x00, 0x6B, 0x00, 0x75, 0x00, 0x70, 0x00, +/* 000019A0 */ 0x53, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 000019B0 */ 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, +/* 000019C0 */ 0x00, 0x00, 0x42, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x46, 0x00, 0x69, 0x00, 0x74, 0x00, +/* 000019D0 */ 0x53, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 000019E0 */ 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, +/* 000019F0 */ 0x00, 0x00, 0x53, 0x00, 0x65, 0x00, 0x74, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, +/* 00001A00 */ 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 00001A10 */ 0x44, 0x00, 0x69, 0x00, 0x67, 0x00, 0x69, 0x00, 0x74, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, +/* 00001A20 */ 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x00, 0x00, 0x53, 0x00, 0x75, 0x00, 0x70, 0x00, +/* 00001A30 */ 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, +/* 00001A40 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x63, 0x00, 0x72, 0x00, +/* 00001A50 */ 0x65, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x52, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, +/* 00001A60 */ 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, +/* 00001A70 */ 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, +/* 00001A80 */ 0x69, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x61, 0x00, +/* 00001A90 */ 0x6E, 0x00, 0x67, 0x00, 0x54, 0x00, 0x61, 0x00, 0x67, 0x00, 0x52, 0x00, 0x45, 0x00, 0x73, 0x00, +/* 00001AA0 */ 0x00, 0x00, 0x43, 0x00, 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x44, 0x00, +/* 00001AB0 */ 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, +/* 00001AC0 */ 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x49, 0x00, 0x73, 0x00, +/* 00001AD0 */ 0x57, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, +/* 00001AE0 */ 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x75, 0x00, 0x61, 0x00, +/* 00001AF0 */ 0x67, 0x00, 0x65, 0x00, 0x54, 0x00, 0x61, 0x00, 0x67, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, +/* 00001B00 */ 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x70, 0x00, 0x70, 0x00, 0x65, 0x00, 0x64, 0x00, +/* 00001B10 */ 0x44, 0x00, 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x4C, 0x00, +/* 00001B20 */ 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x4C, 0x00, 0x41, 0x00, +/* 00001B30 */ 0x4E, 0x00, 0x47, 0x00, 0x5F, 0x00, 0x54, 0x00, 0x41, 0x00, 0x47, 0x00, 0x5F, 0x00, 0x42, 0x00, +/* 00001B40 */ 0x41, 0x00, 0x53, 0x00, 0x45, 0x00, 0x5F, 0x00, 0x52, 0x00, 0x45, 0x00, 0x00, 0x00, 0x4C, 0x00, +/* 00001B50 */ 0x41, 0x00, 0x4E, 0x00, 0x47, 0x00, 0x5F, 0x00, 0x54, 0x00, 0x41, 0x00, 0x47, 0x00, 0x5F, 0x00, +/* 00001B60 */ 0x45, 0x00, 0x58, 0x00, 0x54, 0x00, 0x5F, 0x00, 0x52, 0x00, 0x45, 0x00, 0x00, 0x00, 0x4C, 0x00, +/* 00001B70 */ 0x41, 0x00, 0x4E, 0x00, 0x47, 0x00, 0x5F, 0x00, 0x54, 0x00, 0x41, 0x00, 0x47, 0x00, 0x5F, 0x00, +/* 00001B80 */ 0x52, 0x00, 0x45, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, +/* 00001B90 */ 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x5F, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, +/* 00001BA0 */ 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, +/* 00001BB0 */ 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x5F, 0x00, 0x6E, 0x00, +/* 00001BC0 */ 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, +/* 00001BD0 */ 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x5F, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, +/* 00001BE0 */ 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, +/* 00001BF0 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, +/* 00001C00 */ 0x6E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, +/* 00001C10 */ 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x5F, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, +/* 00001C20 */ 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, +/* 00001C30 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x5F, 0x00, +/* 00001C40 */ 0x6E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x6D, 0x00, +/* 00001C50 */ 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, +/* 00001C60 */ 0x74, 0x00, 0x5F, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 00001C70 */ 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 00001C80 */ 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 00001C90 */ 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 00001CA0 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x5F, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, +/* 00001CB0 */ 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, +/* 00001CC0 */ 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x5F, 0x00, 0x6E, 0x00, +/* 00001CD0 */ 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00001CE0 */ 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, +/* 00001CF0 */ 0x61, 0x00, 0x74, 0x00, 0x5F, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, +/* 00001D00 */ 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, +/* 00001D10 */ 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x67, 0x00, 0x65, 0x00, +/* 00001D20 */ 0x74, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x63, 0x00, +/* 00001D30 */ 0x61, 0x00, 0x6C, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, +/* 00001D40 */ 0x73, 0x00, 0x5F, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5F, 0x00, +/* 00001D50 */ 0x5F, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x70, 0x00, 0x70, 0x00, 0x65, 0x00, 0x64, 0x00, 0x44, 0x00, +/* 00001D60 */ 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x4C, 0x00, 0x6F, 0x00, +/* 00001D70 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x5F, 0x00, +/* 00001D80 */ 0x63, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x00, 0x00, 0x67, 0x00, 0x65, 0x00, +/* 00001D90 */ 0x74, 0x00, 0x00, 0x00, 0x73, 0x00, 0x65, 0x00, 0x74, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, +/* 00001DA0 */ 0x74, 0x00, 0x6F, 0x00, 0x55, 0x00, 0x70, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x43, 0x00, +/* 00001DB0 */ 0x61, 0x00, 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x74, 0x00, 0x6F, 0x00, +/* 00001DC0 */ 0x4C, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x65, 0x00, 0x72, 0x00, 0x43, 0x00, 0x61, 0x00, 0x73, 0x00, +/* 00001DD0 */ 0x65, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x72, 0x00, 0x65, 0x00, 0x70, 0x00, 0x6C, 0x00, +/* 00001DE0 */ 0x61, 0x00, 0x63, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x70, 0x00, +/* 00001DF0 */ 0x6C, 0x00, 0x69, 0x00, 0x74, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x75, 0x00, +/* 00001E00 */ 0x62, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, +/* 00001E10 */ 0x5F, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, +/* 00001E20 */ 0x49, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x65, 0x00, 0x78, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, +/* 00001E30 */ 0x5F, 0x00, 0x2E, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x63, 0x00, 0x68, 0x00, 0x00, 0x00, +/* 00001E40 */ 0x5F, 0x00, 0x2E, 0x00, 0x72, 0x00, 0x65, 0x00, 0x70, 0x00, 0x65, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 00001E50 */ 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x45, 0x00, 0x61, 0x00, +/* 00001E60 */ 0x63, 0x00, 0x68, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x6A, 0x00, 0x6F, 0x00, 0x69, 0x00, +/* 00001E70 */ 0x6E, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x61, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, +/* 00001E80 */ 0x79, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x65, 0x00, 0x78, 0x00, 0x4F, 0x00, 0x66, 0x00, +/* 00001E90 */ 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x70, 0x00, 0x00, 0x00, 0x5F, 0x00, +/* 00001EA0 */ 0x2E, 0x00, 0x72, 0x00, 0x65, 0x00, 0x64, 0x00, 0x75, 0x00, 0x63, 0x00, 0x65, 0x00, 0x00, 0x00, +/* 00001EB0 */ 0x5F, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x63, 0x00, 0x65, 0x00, 0x00, 0x00, +/* 00001EC0 */ 0x5F, 0x00, 0x2E, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 00001ED0 */ 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x69, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00001EE0 */ 0x72, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x71, 0x00, +/* 00001EF0 */ 0x75, 0x00, 0x65, 0x00, 0x00, 0x00, 0x61, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, +/* 00001F00 */ 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x68, 0x00, 0x61, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x77, 0x00, +/* 00001F10 */ 0x6E, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x74, 0x00, +/* 00001F20 */ 0x79, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x64, 0x00, 0x65, 0x00, 0x66, 0x00, 0x69, 0x00, +/* 00001F30 */ 0x6E, 0x00, 0x65, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, +/* 00001F40 */ 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x63, 0x00, 0x72, 0x00, 0x65, 0x00, +/* 00001F50 */ 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x65, 0x00, +/* 00001F60 */ 0x74, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, +/* 00001F70 */ 0x70, 0x00, 0x65, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x66, 0x00, +/* 00001F80 */ 0x6C, 0x00, 0x6F, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x67, 0x00, +/* 00001F90 */ 0x65, 0x00, 0x74, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5F, 0x00, +/* 00001FA0 */ 0x2E, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, +/* 00001FB0 */ 0x61, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x79, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6E, 0x00, +/* 00001FC0 */ 0x00, 0x00, 0x6F, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x00, 0x00, +/* 00001FD0 */ 0x2D, 0x00, 0x00, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x64, 0x00, +/* 00001FE0 */ 0x65, 0x00, 0x45, 0x00, 0x78, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x69, 0x00, +/* 00001FF0 */ 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x65, 0x00, 0x78, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6E, 0x00, +/* 00002000 */ 0x73, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, 0x66, 0x00, +/* 00002010 */ 0x6F, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, +/* 00002020 */ 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x75, 0x00, 0x6C, 0x00, +/* 00002030 */ 0x74, 0x00, 0x00, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 00002040 */ 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x45, 0x00, 0x78, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6E, 0x00, +/* 00002050 */ 0x73, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x6F, 0x00, +/* 00002060 */ 0x6B, 0x00, 0x75, 0x00, 0x70, 0x00, 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, 0x61, 0x00, +/* 00002070 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x2D, 0x00, +/* 00002080 */ 0x75, 0x00, 0x00, 0x00, 0x2D, 0x00, 0x78, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, +/* 00002090 */ 0x6F, 0x00, 0x6B, 0x00, 0x75, 0x00, 0x70, 0x00, 0x4D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x63, 0x00, +/* 000020A0 */ 0x68, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x74, 0x00, 0x72, 0x00, 0x75, 0x00, 0x65, 0x00, +/* 000020B0 */ 0x00, 0x00, 0x62, 0x00, 0x6F, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x61, 0x00, 0x6E, 0x00, +/* 000020C0 */ 0x00, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, +/* 000020D0 */ 0x6E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x5B, 0x00, +/* 000020E0 */ 0x27, 0x00, 0x00, 0x00, 0x27, 0x00, 0x5D, 0x00, 0x00, 0x00, 0x27, 0x00, 0x2C, 0x00, 0x20, 0x00, +/* 000020F0 */ 0x27, 0x00, 0x00, 0x00, 0x5B, 0x00, 0x00, 0x00, 0x20, 0x00, 0x2D, 0x00, 0x20, 0x00, 0x00, 0x00, +/* 00002100 */ 0x5D, 0x00, 0x00, 0x00, 0x5E, 0x00, 0x5B, 0x00, 0x41, 0x00, 0x2D, 0x00, 0x5A, 0x00, 0x5D, 0x00, +/* 00002110 */ 0x7B, 0x00, 0x33, 0x00, 0x7D, 0x00, 0x24, 0x00, 0x00, 0x00, 0x70, 0x00, 0x61, 0x00, 0x72, 0x00, +/* 00002120 */ 0x73, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x74, 0x00, +/* 00002130 */ 0x61, 0x00, 0x67, 0x00, 0x43, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x00, 0x00, +/* 00002140 */ 0x5B, 0x00, 0x41, 0x00, 0x2D, 0x00, 0x5A, 0x00, 0x5D, 0x00, 0x00, 0x00, 0x5B, 0x00, 0x30, 0x00, +/* 00002150 */ 0x2D, 0x00, 0x39, 0x00, 0x5D, 0x00, 0x00, 0x00, 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x00, 0x00, +/* 00002160 */ 0x7C, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x28, 0x00, 0x3F, 0x00, +/* 00002170 */ 0x3A, 0x00, 0x61, 0x00, 0x72, 0x00, 0x74, 0x00, 0x2D, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x6A, 0x00, +/* 00002180 */ 0x62, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x7C, 0x00, 0x63, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x2D, 0x00, +/* 00002190 */ 0x67, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x7C, 0x00, +/* 000021A0 */ 0x6E, 0x00, 0x6F, 0x00, 0x2D, 0x00, 0x62, 0x00, 0x6F, 0x00, 0x6B, 0x00, 0x7C, 0x00, 0x6E, 0x00, +/* 000021B0 */ 0x6F, 0x00, 0x2D, 0x00, 0x6E, 0x00, 0x79, 0x00, 0x6E, 0x00, 0x7C, 0x00, 0x7A, 0x00, 0x68, 0x00, +/* 000021C0 */ 0x2D, 0x00, 0x67, 0x00, 0x75, 0x00, 0x6F, 0x00, 0x79, 0x00, 0x75, 0x00, 0x7C, 0x00, 0x7A, 0x00, +/* 000021D0 */ 0x68, 0x00, 0x2D, 0x00, 0x68, 0x00, 0x61, 0x00, 0x6B, 0x00, 0x6B, 0x00, 0x61, 0x00, 0x7C, 0x00, +/* 000021E0 */ 0x7A, 0x00, 0x68, 0x00, 0x2D, 0x00, 0x6D, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x7C, 0x00, 0x7A, 0x00, +/* 000021F0 */ 0x68, 0x00, 0x2D, 0x00, 0x6D, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x2D, 0x00, 0x6E, 0x00, 0x61, 0x00, +/* 00002200 */ 0x6E, 0x00, 0x7C, 0x00, 0x7A, 0x00, 0x68, 0x00, 0x2D, 0x00, 0x78, 0x00, 0x69, 0x00, 0x61, 0x00, +/* 00002210 */ 0x6E, 0x00, 0x67, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x62, 0x00, +/* 00002220 */ 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x2D, 0x00, 0x47, 0x00, 0x42, 0x00, +/* 00002230 */ 0x2D, 0x00, 0x6F, 0x00, 0x65, 0x00, 0x64, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x61, 0x00, +/* 00002240 */ 0x6D, 0x00, 0x69, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x62, 0x00, 0x6E, 0x00, 0x6E, 0x00, +/* 00002250 */ 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x64, 0x00, 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, +/* 00002260 */ 0x6C, 0x00, 0x74, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x6F, 0x00, +/* 00002270 */ 0x63, 0x00, 0x68, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, +/* 00002280 */ 0x68, 0x00, 0x61, 0x00, 0x6B, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x6B, 0x00, 0x6C, 0x00, +/* 00002290 */ 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, +/* 000022A0 */ 0x6C, 0x00, 0x75, 0x00, 0x78, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x6D, 0x00, 0x69, 0x00, +/* 000022B0 */ 0x6E, 0x00, 0x67, 0x00, 0x6F, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x6E, 0x00, +/* 000022C0 */ 0x61, 0x00, 0x76, 0x00, 0x61, 0x00, 0x6A, 0x00, 0x6F, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, +/* 000022D0 */ 0x70, 0x00, 0x77, 0x00, 0x6E, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x74, 0x00, 0x61, 0x00, +/* 000022E0 */ 0x6F, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x74, 0x00, 0x61, 0x00, 0x79, 0x00, 0x7C, 0x00, +/* 000022F0 */ 0x69, 0x00, 0x2D, 0x00, 0x74, 0x00, 0x73, 0x00, 0x75, 0x00, 0x7C, 0x00, 0x73, 0x00, 0x67, 0x00, +/* 00002300 */ 0x6E, 0x00, 0x2D, 0x00, 0x42, 0x00, 0x45, 0x00, 0x2D, 0x00, 0x46, 0x00, 0x52, 0x00, 0x7C, 0x00, +/* 00002310 */ 0x73, 0x00, 0x67, 0x00, 0x6E, 0x00, 0x2D, 0x00, 0x42, 0x00, 0x45, 0x00, 0x2D, 0x00, 0x4E, 0x00, +/* 00002320 */ 0x4C, 0x00, 0x7C, 0x00, 0x73, 0x00, 0x67, 0x00, 0x6E, 0x00, 0x2D, 0x00, 0x43, 0x00, 0x48, 0x00, +/* 00002330 */ 0x2D, 0x00, 0x44, 0x00, 0x45, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x5C, 0x00, +/* 00002340 */ 0x62, 0x00, 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x00, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, +/* 00002350 */ 0x00, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x78, 0x00, 0x28, 0x00, +/* 00002360 */ 0x3F, 0x00, 0x3A, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x31, 0x00, 0x2C, 0x00, 0x38, 0x00, +/* 00002370 */ 0x7D, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x29, 0x00, 0x2B, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, +/* 00002380 */ 0x00, 0x00, 0x7C, 0x00, 0x5B, 0x00, 0x41, 0x00, 0x2D, 0x00, 0x57, 0x00, 0x59, 0x00, 0x2D, 0x00, +/* 00002390 */ 0x5A, 0x00, 0x5D, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x28, 0x00, 0x3F, 0x00, +/* 000023A0 */ 0x3A, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x32, 0x00, 0x2C, 0x00, 0x38, 0x00, 0x7D, 0x00, +/* 000023B0 */ 0x29, 0x00, 0x2B, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x35, 0x00, +/* 000023C0 */ 0x2C, 0x00, 0x38, 0x00, 0x7D, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x33, 0x00, 0x7D, 0x00, +/* 000023D0 */ 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x32, 0x00, 0x7D, 0x00, 0x7C, 0x00, +/* 000023E0 */ 0x00, 0x00, 0x7B, 0x00, 0x34, 0x00, 0x7D, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, +/* 000023F0 */ 0x7B, 0x00, 0x33, 0x00, 0x7D, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, +/* 00002400 */ 0x2D, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x33, 0x00, 0x7D, 0x00, 0x29, 0x00, 0x7B, 0x00, 0x30, 0x00, +/* 00002410 */ 0x2C, 0x00, 0x32, 0x00, 0x7D, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x7B, 0x00, +/* 00002420 */ 0x32, 0x00, 0x2C, 0x00, 0x33, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x28, 0x00, +/* 00002430 */ 0x3F, 0x00, 0x3A, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x7B, 0x00, +/* 00002440 */ 0x34, 0x00, 0x2C, 0x00, 0x38, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x28, 0x00, +/* 00002450 */ 0x00, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x2D, 0x00, 0x28, 0x00, +/* 00002460 */ 0x00, 0x00, 0x29, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x5C, 0x00, +/* 00002470 */ 0x62, 0x00, 0x28, 0x00, 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x29, 0x00, +/* 00002480 */ 0x2A, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x5C, 0x00, +/* 00002490 */ 0x62, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x5E, 0x00, 0x00, 0x00, 0x24, 0x00, +/* 000024A0 */ 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x6E, 0x00, +/* 000024B0 */ 0x67, 0x00, 0x75, 0x00, 0x61, 0x00, 0x67, 0x00, 0x65, 0x00, 0x00, 0x00, 0x73, 0x00, 0x63, 0x00, +/* 000024C0 */ 0x72, 0x00, 0x69, 0x00, 0x70, 0x00, 0x74, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, 0x67, 0x00, +/* 000024D0 */ 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x76, 0x00, 0x61, 0x00, 0x72, 0x00, 0x69, 0x00, +/* 000024E0 */ 0x61, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x65, 0x00, 0x78, 0x00, 0x74, 0x00, +/* 000024F0 */ 0x65, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x00, 0x00, +/* 00002500 */ 0x75, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x65, 0x00, 0x66, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x65, 0x00, +/* 00002510 */ 0x64, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, +/* 00002520 */ 0x00, 0x00, 0x69, 0x00, 0x73, 0x00, 0x41, 0x00, 0x76, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6C, 0x00, +/* 00002530 */ 0x61, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, +/* 00002540 */ 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x73, 0x00, 0x75, 0x00, 0x62, 0x00, 0x73, 0x00, 0x65, 0x00, +/* 00002550 */ 0x74, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x75, 0x00, +/* 00002560 */ 0x6D, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x65, 0x00, 0x67, 0x00, 0x65, 0x00, 0x72, 0x00, +/* 00002570 */ 0x44, 0x00, 0x69, 0x00, 0x67, 0x00, 0x69, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x6D, 0x00, +/* 00002580 */ 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x46, 0x00, 0x72, 0x00, +/* 00002590 */ 0x61, 0x00, 0x63, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x44, 0x00, 0x69, 0x00, +/* 000025A0 */ 0x67, 0x00, 0x69, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x78, 0x00, +/* 000025B0 */ 0x69, 0x00, 0x6D, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x46, 0x00, 0x72, 0x00, 0x61, 0x00, 0x63, 0x00, +/* 000025C0 */ 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x44, 0x00, 0x69, 0x00, 0x67, 0x00, 0x69, 0x00, +/* 000025D0 */ 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x6D, 0x00, +/* 000025E0 */ 0x75, 0x00, 0x6D, 0x00, 0x53, 0x00, 0x69, 0x00, 0x67, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x66, 0x00, +/* 000025F0 */ 0x69, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x44, 0x00, 0x69, 0x00, 0x67, 0x00, +/* 00002600 */ 0x69, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x78, 0x00, 0x69, 0x00, +/* 00002610 */ 0x6D, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x53, 0x00, 0x69, 0x00, 0x67, 0x00, 0x6E, 0x00, 0x69, 0x00, +/* 00002620 */ 0x66, 0x00, 0x69, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x44, 0x00, 0x69, 0x00, +/* 00002630 */ 0x67, 0x00, 0x69, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x62, 0x00, 0x65, 0x00, 0x73, 0x00, +/* 00002640 */ 0x74, 0x00, 0x20, 0x00, 0x66, 0x00, 0x69, 0x00, 0x74, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, +/* 00002650 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x4D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x63, 0x00, +/* 00002660 */ 0x68, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x67, 0x00, +/* 00002670 */ 0x74, 0x00, 0x68, 0x00, 0x00, 0x00, 0x68, 0x00, 0x69, 0x00, 0x64, 0x00, 0x64, 0x00, 0x65, 0x00, +/* 00002680 */ 0x6E, 0x00, 0x4F, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x00, 0x00, +/* 00002690 */ 0x66, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, +/* 000026A0 */ 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x64, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, +/* 000026B0 */ 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, +/* 000026C0 */ 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 000026D0 */ 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x43, 0x00, +/* 000026E0 */ 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00, 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, +/* 000026F0 */ 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x43, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, +/* 00002700 */ 0x00, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, +/* 00002710 */ 0x72, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, +/* 00002720 */ 0x70, 0x00, 0x65, 0x00, 0x00, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, +/* 00002730 */ 0x67, 0x00, 0x00, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, +/* 00002740 */ 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, +/* 00002750 */ 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 00002760 */ 0x65, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00, 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, +/* 00002770 */ 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x43, 0x00, 0x6F, 0x00, +/* 00002780 */ 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x49, 0x00, +/* 00002790 */ 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, +/* 000027A0 */ 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, +/* 000027B0 */ 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x63, 0x00, +/* 000027C0 */ 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00, 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, 0x00, 0x00, 0x70, 0x00, +/* 000027D0 */ 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, +/* 000027E0 */ 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x75, 0x00, +/* 000027F0 */ 0x63, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, +/* 00002800 */ 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, +/* 00002810 */ 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, +/* 00002820 */ 0x6C, 0x00, 0x2E, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 00002830 */ 0x6F, 0x00, 0x72, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, +/* 00002840 */ 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, +/* 00002850 */ 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, +/* 00002860 */ 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x00, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, +/* 00002870 */ 0x20, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00, 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, +/* 00002880 */ 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00, 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, +/* 00002890 */ 0x00, 0x00, 0x75, 0x00, 0x73, 0x00, 0x61, 0x00, 0x67, 0x00, 0x65, 0x00, 0x00, 0x00, 0x73, 0x00, +/* 000028A0 */ 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x00, 0x00, 0x73, 0x00, 0x65, 0x00, 0x61, 0x00, 0x72, 0x00, +/* 000028B0 */ 0x63, 0x00, 0x68, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x00, 0x00, 0x6B, 0x00, 0x6E, 0x00, +/* 000028C0 */ 0x00, 0x00, 0x6B, 0x00, 0x66, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x65, 0x00, +/* 000028D0 */ 0x72, 0x00, 0x69, 0x00, 0x63, 0x00, 0x00, 0x00, 0x63, 0x00, 0x61, 0x00, 0x73, 0x00, 0x65, 0x00, +/* 000028E0 */ 0x46, 0x00, 0x69, 0x00, 0x72, 0x00, 0x73, 0x00, 0x74, 0x00, 0x00, 0x00, 0x75, 0x00, 0x70, 0x00, +/* 000028F0 */ 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x65, 0x00, +/* 00002900 */ 0x72, 0x00, 0x00, 0x00, 0x66, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, +/* 00002910 */ 0x64, 0x00, 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x00, 0x00, +/* 00002920 */ 0x73, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x76, 0x00, +/* 00002930 */ 0x69, 0x00, 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x62, 0x00, 0x61, 0x00, 0x73, 0x00, 0x65, 0x00, +/* 00002940 */ 0x00, 0x00, 0x61, 0x00, 0x63, 0x00, 0x63, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x00, 0x00, +/* 00002950 */ 0x63, 0x00, 0x61, 0x00, 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, 0x76, 0x00, 0x61, 0x00, 0x72, 0x00, +/* 00002960 */ 0x69, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x00, 0x00, 0x69, 0x00, 0x67, 0x00, 0x6E, 0x00, +/* 00002970 */ 0x6F, 0x00, 0x72, 0x00, 0x65, 0x00, 0x50, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x74, 0x00, +/* 00002980 */ 0x75, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x6D, 0x00, +/* 00002990 */ 0x61, 0x00, 0x74, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x63, 0x00, +/* 000029A0 */ 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, +/* 000029B0 */ 0x00, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 000029C0 */ 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x64, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, +/* 000029D0 */ 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, +/* 000029E0 */ 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00, 0x61, 0x00, +/* 000029F0 */ 0x72, 0x00, 0x65, 0x00, 0x00, 0x00, 0x62, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x64, 0x00, +/* 00002A00 */ 0x43, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00, 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, 0x00, 0x00, +/* 00002A10 */ 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 00002A20 */ 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, +/* 00002A30 */ 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00, 0x61, 0x00, +/* 00002A40 */ 0x72, 0x00, 0x65, 0x00, 0x00, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, +/* 00002A50 */ 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, +/* 00002A60 */ 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x72, 0x00, 0x65, 0x00, +/* 00002A70 */ 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4F, 0x00, 0x70, 0x00, +/* 00002A80 */ 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, +/* 00002A90 */ 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, +/* 00002AA0 */ 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, +/* 00002AB0 */ 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, +/* 00002AC0 */ 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, +/* 00002AD0 */ 0x74, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, +/* 00002AE0 */ 0x70, 0x00, 0x65, 0x00, 0x00, 0x00, 0x55, 0x00, 0x6E, 0x00, 0x77, 0x00, 0x72, 0x00, 0x61, 0x00, +/* 00002AF0 */ 0x70, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, +/* 00002B00 */ 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x75, 0x00, +/* 00002B10 */ 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, +/* 00002B20 */ 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, +/* 00002B30 */ 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x74, 0x00, 0x6F, 0x00, +/* 00002B40 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, +/* 00002B50 */ 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, +/* 00002B60 */ 0x6C, 0x00, 0x2E, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, +/* 00002B70 */ 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x49, 0x00, +/* 00002B80 */ 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, +/* 00002B90 */ 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 00002BA0 */ 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, +/* 00002BB0 */ 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, +/* 00002BC0 */ 0x74, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x4E, 0x00, +/* 00002BD0 */ 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 00002BE0 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, +/* 00002BF0 */ 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x6F, 0x00, +/* 00002C00 */ 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x50, 0x00, 0x61, 0x00, +/* 00002C10 */ 0x72, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, +/* 00002C20 */ 0x2E, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, +/* 00002C30 */ 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, +/* 00002C40 */ 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, +/* 00002C50 */ 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x64, 0x00, +/* 00002C60 */ 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x00, 0x00, +/* 00002C70 */ 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x20, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, +/* 00002C80 */ 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, +/* 00002C90 */ 0x74, 0x00, 0x00, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 00002CA0 */ 0x54, 0x00, 0x6F, 0x00, 0x50, 0x00, 0x61, 0x00, 0x72, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, +/* 00002CB0 */ 0x6E, 0x00, 0x75, 0x00, 0x00, 0x00, 0x73, 0x00, 0x74, 0x00, 0x79, 0x00, 0x6C, 0x00, 0x65, 0x00, +/* 00002CC0 */ 0x00, 0x00, 0x64, 0x00, 0x65, 0x00, 0x63, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 00002CD0 */ 0x00, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x63, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, +/* 00002CE0 */ 0x00, 0x00, 0x63, 0x00, 0x75, 0x00, 0x72, 0x00, 0x72, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x63, 0x00, +/* 00002CF0 */ 0x79, 0x00, 0x00, 0x00, 0x63, 0x00, 0x75, 0x00, 0x72, 0x00, 0x72, 0x00, 0x65, 0x00, 0x6E, 0x00, +/* 00002D00 */ 0x63, 0x00, 0x79, 0x00, 0x44, 0x00, 0x69, 0x00, 0x73, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x61, 0x00, +/* 00002D10 */ 0x79, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x64, 0x00, 0x65, 0x00, 0x00, 0x00, 0x73, 0x00, +/* 00002D20 */ 0x79, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x75, 0x00, 0x73, 0x00, +/* 00002D30 */ 0x65, 0x00, 0x47, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x70, 0x00, 0x69, 0x00, 0x6E, 0x00, +/* 00002D40 */ 0x67, 0x00, 0x00, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, +/* 00002D50 */ 0x6C, 0x00, 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, +/* 00002D60 */ 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, +/* 00002D70 */ 0x74, 0x00, 0x00, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, +/* 00002D80 */ 0x6C, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, +/* 00002D90 */ 0x00, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, +/* 00002DA0 */ 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, +/* 00002DB0 */ 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, +/* 00002DC0 */ 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x4E, 0x00, +/* 00002DD0 */ 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 00002DE0 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, +/* 00002DF0 */ 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x6F, 0x00, +/* 00002E00 */ 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x50, 0x00, 0x61, 0x00, +/* 00002E10 */ 0x72, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, +/* 00002E20 */ 0x65, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x53, 0x00, 0x79, 0x00, 0x73, 0x00, +/* 00002E30 */ 0x74, 0x00, 0x65, 0x00, 0x6D, 0x00, 0x00, 0x00, 0x62, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x6E, 0x00, +/* 00002E40 */ 0x64, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, +/* 00002E50 */ 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, +/* 00002E60 */ 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, +/* 00002E70 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, +/* 00002E80 */ 0x6E, 0x00, 0x67, 0x00, 0x49, 0x00, 0x6D, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6D, 0x00, +/* 00002E90 */ 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, +/* 00002EA0 */ 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, +/* 00002EB0 */ 0x65, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x65, 0x00, +/* 00002EC0 */ 0x6E, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x50, 0x00, +/* 00002ED0 */ 0x61, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x46, 0x00, 0x6F, 0x00, +/* 00002EE0 */ 0x72, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, +/* 00002EF0 */ 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 00002F00 */ 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, +/* 00002F10 */ 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, +/* 00002F20 */ 0x74, 0x00, 0x00, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00002F30 */ 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, +/* 00002F40 */ 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x44, 0x00, 0x61, 0x00, +/* 00002F50 */ 0x74, 0x00, 0x65, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, +/* 00002F60 */ 0x63, 0x00, 0x65, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, +/* 00002F70 */ 0x6C, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, +/* 00002F80 */ 0x44, 0x00, 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x43, 0x00, +/* 00002F90 */ 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x00, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 00002FA0 */ 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 00002FB0 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, +/* 00002FC0 */ 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x00, 0x00, 0x55, 0x00, 0x6E, 0x00, 0x77, 0x00, +/* 00002FD0 */ 0x72, 0x00, 0x61, 0x00, 0x70, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, +/* 00002FE0 */ 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, +/* 00002FF0 */ 0x74, 0x00, 0x00, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6E, 0x00, +/* 00003000 */ 0x61, 0x00, 0x72, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x00, 0x00, 0x73, 0x00, 0x68, 0x00, +/* 00003010 */ 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x67, 0x00, +/* 00003020 */ 0x00, 0x00, 0x32, 0x00, 0x2D, 0x00, 0x64, 0x00, 0x69, 0x00, 0x67, 0x00, 0x69, 0x00, 0x74, 0x00, +/* 00003030 */ 0x00, 0x00, 0x77, 0x00, 0x65, 0x00, 0x65, 0x00, 0x6B, 0x00, 0x64, 0x00, 0x61, 0x00, 0x79, 0x00, +/* 00003040 */ 0x00, 0x00, 0x65, 0x00, 0x72, 0x00, 0x61, 0x00, 0x00, 0x00, 0x79, 0x00, 0x65, 0x00, 0x61, 0x00, +/* 00003050 */ 0x72, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x68, 0x00, 0x00, 0x00, +/* 00003060 */ 0x64, 0x00, 0x61, 0x00, 0x79, 0x00, 0x00, 0x00, 0x68, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x72, 0x00, +/* 00003070 */ 0x00, 0x00, 0x6D, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, +/* 00003080 */ 0x73, 0x00, 0x65, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x00, 0x00, 0x74, 0x00, +/* 00003090 */ 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x5A, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x4E, 0x00, +/* 000030A0 */ 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, +/* 000030B0 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 000030C0 */ 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, 0x74, 0x00, +/* 000030D0 */ 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x54, 0x00, +/* 000030E0 */ 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, +/* 000030F0 */ 0x67, 0x00, 0x00, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x70, 0x00, +/* 00003100 */ 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, +/* 00003110 */ 0x2E, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 00003120 */ 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, +/* 00003130 */ 0x61, 0x00, 0x6E, 0x00, 0x79, 0x00, 0x00, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x00, 0x00, +/* 00003140 */ 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, +/* 00003150 */ 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x74, 0x00, +/* 00003160 */ 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x44, 0x00, +/* 00003170 */ 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, +/* 00003180 */ 0x67, 0x00, 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, 0x44, 0x00, +/* 00003190 */ 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, +/* 000031A0 */ 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x74, 0x00, 0x6F, 0x00, +/* 000031B0 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, +/* 000031C0 */ 0x6D, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, +/* 000031D0 */ 0x00, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, +/* 000031E0 */ 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, +/* 000031F0 */ 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, +/* 00003200 */ 0x74, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x44, 0x00, +/* 00003210 */ 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, +/* 00003220 */ 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, +/* 00003230 */ 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, +/* 00003240 */ 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x49, 0x00, +/* 00003250 */ 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00003260 */ 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, +/* 00003270 */ 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, +/* 00003280 */ 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 00003290 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x50, 0x00, 0x61, 0x00, 0x72, 0x00, +/* 000032A0 */ 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, +/* 000032B0 */ 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, +/* 000032C0 */ 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, +/* 000032D0 */ 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, +/* 000032E0 */ 0x2E, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, +/* 000032F0 */ 0x64, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, +/* 00003300 */ 0x00, 0x00, 0x73, 0x00, 0x79, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x46, 0x00, +/* 00003310 */ 0x6F, 0x00, 0x72, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, +/* 00003320 */ 0x00, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x46, 0x00, +/* 00003330 */ 0x6F, 0x00, 0x72, 0x00, 0x53, 0x00, 0x79, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x6F, 0x00, 0x6C, 0x00, +/* 00003340 */ 0x00, 0x00, 0x73, 0x00, 0x79, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x4C, 0x00, +/* 00003350 */ 0x65, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x74, 0x00, 0x68, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 00003360 */ 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x6F, 0x00, +/* 00003370 */ 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 00003380 */ 0x53, 0x00, 0x79, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x4C, 0x00, 0x65, 0x00, +/* 00003390 */ 0x6E, 0x00, 0x67, 0x00, 0x74, 0x00, 0x68, 0x00, 0x00, 0x00, 0x70, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 000033A0 */ 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x48, 0x00, +/* 000033B0 */ 0x6F, 0x00, 0x75, 0x00, 0x72, 0x00, 0x43, 0x00, 0x79, 0x00, 0x63, 0x00, 0x6C, 0x00, 0x65, 0x00, +/* 000033C0 */ 0x00, 0x00, 0x68, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x72, 0x00, 0x43, 0x00, 0x79, 0x00, 0x63, 0x00, +/* 000033D0 */ 0x6C, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x50, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 000033E0 */ 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0x47, 0x00, +/* 000033F0 */ 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x4D, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x6A, 0x00, +/* 00003400 */ 0x00, 0x00, 0x68, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x72, 0x00, 0x31, 0x00, 0x32, 0x00, 0x00, 0x00, +/* 00003410 */ 0x68, 0x00, 0x00, 0x00, 0x68, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x72, 0x00, 0x32, 0x00, 0x34, 0x00, +/* 00003420 */ 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, 0x7A, 0x00, +/* 00003430 */ 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 0x4C, 0x00, +/* 00003440 */ 0x00, 0x00, 0x4B, 0x00, 0x00, 0x00, 0x6B, 0x00, 0x00, 0x00, 0x5A, 0x00, 0x00, 0x00, 0x76, 0x00, +/* 00003450 */ 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x4F, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x78, 0x00, +/* 00003460 */ 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x34, 0x00, +/* 00003470 */ 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x68, 0x00, 0x31, 0x00, 0x32, 0x00, 0x00, 0x00, 0x68, 0x00, +/* 00003480 */ 0x32, 0x00, 0x33, 0x00, 0x00, 0x00, 0x68, 0x00, 0x31, 0x00, 0x31, 0x00, 0x00, 0x00, 0x68, 0x00, +/* 00003490 */ 0x32, 0x00, 0x34, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x68, 0x00, +/* 000034A0 */ 0x6F, 0x00, 0x75, 0x00, 0x72, 0x00, 0x43, 0x00, 0x79, 0x00, 0x63, 0x00, 0x6C, 0x00, 0x65, 0x00, +/* 000034B0 */ 0x00, 0x00, 0x63, 0x00, 0x61, 0x00, 0x00, 0x00, 0x68, 0x00, 0x63, 0x00, 0x00, 0x00, 0x45, 0x00, +/* 000034C0 */ 0x74, 0x00, 0x63, 0x00, 0x2F, 0x00, 0x55, 0x00, 0x6E, 0x00, 0x6B, 0x00, 0x6E, 0x00, 0x6F, 0x00, +/* 000034D0 */ 0x77, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x5A, 0x00, +/* 000034E0 */ 0x6F, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x00, 0x00, 0x49, 0x00, 0x41, 0x00, 0x4E, 0x00, 0x41, 0x00, +/* 000034F0 */ 0x20, 0x00, 0x5A, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x20, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 00003500 */ 0x20, 0x00, 0x4C, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x6B, 0x00, 0x20, 0x00, 0x6E, 0x00, 0x61, 0x00, +/* 00003510 */ 0x6D, 0x00, 0x65, 0x00, 0x20, 0x00, 0x28, 0x00, 0x41, 0x00, 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, +/* 00003520 */ 0x2F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, +/* 00003530 */ 0x6E, 0x00, 0x29, 0x00, 0x00, 0x00, 0x45, 0x00, 0x74, 0x00, 0x63, 0x00, 0x2F, 0x00, 0x55, 0x00, +/* 00003540 */ 0x54, 0x00, 0x43, 0x00, 0x00, 0x00, 0x45, 0x00, 0x74, 0x00, 0x63, 0x00, 0x2F, 0x00, 0x47, 0x00, +/* 00003550 */ 0x4D, 0x00, 0x54, 0x00, 0x00, 0x00, 0x55, 0x00, 0x54, 0x00, 0x43, 0x00, 0x00, 0x00, 0x66, 0x00, +/* 00003560 */ 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x4D, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 00003570 */ 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x62, 0x00, 0x61, 0x00, 0x73, 0x00, +/* 00003580 */ 0x69, 0x00, 0x63, 0x00, 0x00, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, +/* 00003590 */ 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x64, 0x00, 0x44, 0x00, 0x61, 0x00, +/* 000035A0 */ 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, +/* 000035B0 */ 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x65, 0x00, +/* 000035C0 */ 0x64, 0x00, 0x44, 0x00, 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x74, 0x00, +/* 000035D0 */ 0x73, 0x00, 0x00, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 000035E0 */ 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, +/* 000035F0 */ 0x54, 0x00, 0x6F, 0x00, 0x50, 0x00, 0x61, 0x00, 0x72, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, +/* 00003600 */ 0x49, 0x00, 0x6E, 0x00, 0x76, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x64, 0x00, 0x20, 0x00, +/* 00003610 */ 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x74, 0x00, +/* 00003620 */ 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x31, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x74, 0x00, +/* 00003630 */ 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x32, 0x00, 0x00, 0x00, 0x63, 0x00, 0x61, 0x00, 0x63, 0x00, +/* 00003640 */ 0x68, 0x00, 0x65, 0x00, 0x53, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x00, 0x00, 0x64, 0x00, +/* 00003650 */ 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x5F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, +/* 00003660 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, +/* 00003670 */ 0x6E, 0x00, 0x67, 0x00, 0x5F, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x72, 0x00, 0x79, 0x00, +/* 00003680 */ 0x50, 0x00, 0x6F, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, +/* 00003690 */ 0x74, 0x00, 0x65, 0x00, 0x5F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, +/* 000036A0 */ 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x53, 0x00, +/* 000036B0 */ 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x5F, 0x00, 0x65, 0x00, 0x6E, 0x00, +/* 000036C0 */ 0x74, 0x00, 0x72, 0x00, 0x79, 0x00, 0x50, 0x00, 0x6F, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x74, 0x00, +/* 000036D0 */ 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x5F, 0x00, 0x74, 0x00, 0x6F, 0x00, +/* 000036E0 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, +/* 000036F0 */ 0x6D, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, +/* 00003700 */ 0x5F, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x72, 0x00, 0x79, 0x00, 0x50, 0x00, 0x6F, 0x00, +/* 00003710 */ 0x69, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x00, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00003720 */ 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, +/* 00003730 */ 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, +/* 00003740 */ 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 00003750 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00003760 */ 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, +/* 00003770 */ 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, +/* 00003780 */ 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 00003790 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x50, 0x00, 0x61, 0x00, 0x72, 0x00, +/* 000037A0 */ 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, +/* 000037B0 */ 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, +/* 000037C0 */ 0x69, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x50, 0x00, 0x6C, 0x00, +/* 000037D0 */ 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x52, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x65, 0x00, +/* 000037E0 */ 0x73, 0x00, 0x00, 0x00, 0x52, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, +/* 000037F0 */ 0x65, 0x00, 0x50, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x00, 0x00, +/* 00003800 */ 0x50, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x52, 0x00, 0x75, 0x00, +/* 00003810 */ 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, +/* 00003820 */ 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, +/* 00003830 */ 0x6C, 0x00, 0x2E, 0x00, 0x50, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 00003840 */ 0x52, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, +/* 00003850 */ 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x50, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, +/* 00003860 */ 0x6C, 0x00, 0x52, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x2E, 0x00, 0x73, 0x00, +/* 00003870 */ 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, +/* 00003880 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, +/* 00003890 */ 0x66, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x50, 0x00, +/* 000038A0 */ 0x6C, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x52, 0x00, 0x75, 0x00, 0x6C, 0x00, +/* 000038B0 */ 0x65, 0x00, 0x73, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, +/* 000038C0 */ 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x65, 0x00, 0x6C, 0x00, +/* 000038D0 */ 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x00, 0x00, 0x73, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x65, 0x00, +/* 000038E0 */ 0x63, 0x00, 0x74, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, +/* 000038F0 */ 0x50, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x52, 0x00, 0x75, 0x00, +/* 00003900 */ 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, +/* 00003910 */ 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x72, 0x00, 0x65, 0x00, +/* 00003920 */ 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4F, 0x00, 0x70, 0x00, +/* 00003930 */ 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x00, 0x00, 0x74, 0x00, 0x79, 0x00, +/* 00003940 */ 0x70, 0x00, 0x65, 0x00, 0x00, 0x00, 0x63, 0x00, 0x61, 0x00, 0x72, 0x00, 0x64, 0x00, 0x69, 0x00, +/* 00003950 */ 0x6E, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x64, 0x00, 0x69, 0x00, +/* 00003960 */ 0x6E, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x72, 0x00, +/* 00003970 */ 0x61, 0x00, 0x6C, 0x00, 0x43, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x67, 0x00, 0x6F, 0x00, +/* 00003980 */ 0x72, 0x00, 0x69, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, +/* 00003990 */ 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x64, 0x00, +/* 000039A0 */ 0x50, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x52, 0x00, 0x75, 0x00, +/* 000039B0 */ 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x68, 0x00, 0x65, 0x00, +/* 000039C0 */ 0x72, 0x00, 0x00, 0x00, 0x70, 0x00, 0x72, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x6D, 0x00, 0x6F, 0x00, +/* 000039D0 */ 0x6E, 0x00, 0x74, 0x00, 0x68, 0x00, 0x2E, 0x00, 0x61, 0x00, 0x7D, 0x00, 0x7B, 0x00, 0x64, 0x00, +/* 000039E0 */ 0x61, 0x00, 0x79, 0x00, 0x2E, 0x00, 0x62, 0x00, 0x7D, 0x00, 0x7B, 0x00, 0x68, 0x00, 0x6F, 0x00, +/* 000039F0 */ 0x75, 0x00, 0x72, 0x00, 0x2E, 0x00, 0x63, 0x00, 0x7D, 0x00, 0x7B, 0x00, 0x6D, 0x00, 0x69, 0x00, +/* 00003A00 */ 0x6E, 0x00, 0x75, 0x00, 0x74, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x64, 0x00, 0x7D, 0x00, 0x7B, 0x00, +/* 00003A10 */ 0x73, 0x00, 0x65, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x2E, 0x00, 0x65, 0x00, +/* 00003A20 */ 0x7D, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, +/* 00003A30 */ 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x42, 0x00, +/* 00003A40 */ 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x46, 0x00, 0x69, 0x00, 0x74, 0x00, 0x00, 0x00, 0x72, 0x00, +/* 00003A50 */ 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, +/* 00003A60 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x6F, 0x00, 0x6B, 0x00, +/* 00003A70 */ 0x75, 0x00, 0x70, 0x00, 0x00, 0x00, 0x66, 0x00, 0x69, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00003A80 */ 0x72, 0x00, 0x65, 0x00, 0x64, 0x00, 0x00, 0x00, 0x65, 0x00, 0x78, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00003A90 */ 0x6E, 0x00, 0x73, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x46, 0x00, 0x69, 0x00, 0x6C, 0x00, +/* 00003AA0 */ 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x2D, 0x00, 0x75, 0x00, 0x2D, 0x00, 0x00, 0x00, +/* 00003AB0 */ 0x73, 0x00, 0x75, 0x00, 0x62, 0x00, 0x54, 0x00, 0x61, 0x00, 0x67, 0x00, 0x73, 0x00, 0x00, 0x00, +/* 00003AC0 */ 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x57, 0x00, 0x69, 0x00, +/* 00003AD0 */ 0x74, 0x00, 0x68, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x74, 0x00, 0x53, 0x00, 0x75, 0x00, 0x62, 0x00, +/* 00003AE0 */ 0x74, 0x00, 0x61, 0x00, 0x67, 0x00, 0x73, 0x00, 0x00, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x2A, 0x00, +/* 00003AF0 */ 0x3F, 0x00, 0x29, 0x00, 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x2D, 0x00, 0x75, 0x00, 0x29, 0x00, +/* 00003B00 */ 0x3F, 0x00, 0x24, 0x00, 0x00, 0x00, 0x28, 0x00, 0x5B, 0x00, 0x5E, 0x00, 0x2D, 0x00, 0x5D, 0x00, +/* 00003B10 */ 0x2A, 0x00, 0x29, 0x00, 0x2D, 0x00, 0x3F, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x2A, 0x00, 0x29, 0x00, +/* 00003B20 */ 0x3F, 0x00, 0x00, 0x00, 0x28, 0x00, 0x5B, 0x00, 0x5E, 0x00, 0x5F, 0x00, 0x5D, 0x00, 0x2A, 0x00, +/* 00003B30 */ 0x29, 0x00, 0x2E, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x55, 0x00, 0x69, 0x00, +/* 00003B40 */ 0x6E, 0x00, 0x74, 0x00, 0x33, 0x00, 0x32, 0x00, 0x00, 0x00, 0x48, 0x00, 0x61, 0x00, 0x73, 0x00, +/* 00003B50 */ 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x74, 0x00, 0x79, 0x00, +/* 00003B60 */ 0x00, 0x00, 0x29, 0x00, 0x2A, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x73, 0x00, 0x65, 0x00, +/* 00003B70 */ 0x65, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 00003B80 */ 0x65, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x00, 0x00, +/* 00003B90 */ 0x66, 0x00, 0x69, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x64, 0x00, +/* 00003BA0 */ 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x4C, 0x00, 0x6F, 0x00, +/* 00003BB0 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5B, 0x00, 0x27, 0x00, 0x62, 0x00, +/* 00003BC0 */ 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x20, 0x00, 0x66, 0x00, 0x69, 0x00, 0x74, 0x00, 0x27, 0x00, +/* 00003BD0 */ 0x2C, 0x00, 0x20, 0x00, 0x27, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x6F, 0x00, 0x6B, 0x00, 0x75, 0x00, +/* 00003BE0 */ 0x70, 0x00, 0x27, 0x00, 0x5D, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, +/* 00003BF0 */ 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x5F, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, +/* 00003C00 */ 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, +/* 00003C10 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x5F, 0x00, +/* 00003C20 */ 0x64, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x6D, 0x00, 0x79, 0x00, 0x4E, 0x00, 0x61, 0x00, 0x6D, 0x00, +/* 00003C30 */ 0x65, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, +/* 00003C40 */ 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x5F, 0x00, 0x73, 0x00, +/* 00003C50 */ 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, +/* 00003C60 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, +/* 00003C70 */ 0x66, 0x00, 0x5F, 0x00, 0x64, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x6D, 0x00, 0x79, 0x00, 0x4E, 0x00, +/* 00003C80 */ 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00003C90 */ 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, +/* 00003CA0 */ 0x61, 0x00, 0x74, 0x00, 0x5F, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, +/* 00003CB0 */ 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, +/* 00003CC0 */ 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x5F, 0x00, 0x64, 0x00, 0x75, 0x00, +/* 00003CD0 */ 0x6D, 0x00, 0x6D, 0x00, 0x79, 0x00, 0x4E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, +/* 00003CE0 */ 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x6F, 0x00, 0x6E, 0x00, +/* 00003CF0 */ 0x69, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, +/* 00003D00 */ 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x5F, 0x00, 0x64, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x6D, 0x00, +/* 00003D10 */ 0x79, 0x00, 0x4E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x74, 0x00, 0x6F, 0x00, +/* 00003D20 */ 0x52, 0x00, 0x65, 0x00, 0x74, 0x00, 0x75, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x63, 0x00, +/* 00003D30 */ 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, +/* 00003D40 */ 0x56, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x65, 0x00, 0x73, 0x00, 0x46, 0x00, 0x6F, 0x00, +/* 00003D50 */ 0x72, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, +/* 00003D60 */ 0x72, 0x00, 0x65, 0x00, 0x76, 0x00, 0x65, 0x00, 0x72, 0x00, 0x73, 0x00, 0x65, 0x00, 0x64, 0x00, +/* 00003D70 */ 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, +/* 00003D80 */ 0x6E, 0x00, 0x56, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, +/* 00003D90 */ 0x2D, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x2D, 0x00, 0x75, 0x00, 0x28, 0x00, +/* 00003DA0 */ 0x3F, 0x00, 0x3A, 0x00, 0x2D, 0x00, 0x5B, 0x00, 0x5E, 0x00, 0x5C, 0x00, 0x2D, 0x00, 0x5D, 0x00, +/* 00003DB0 */ 0x5B, 0x00, 0x5E, 0x00, 0x5C, 0x00, 0x2D, 0x00, 0x5D, 0x00, 0x3F, 0x00, 0x2D, 0x00, 0x5B, 0x00, +/* 00003DC0 */ 0x5E, 0x00, 0x5C, 0x00, 0x2D, 0x00, 0x5D, 0x00, 0x2B, 0x00, 0x29, 0x00, 0x2A, 0x00, 0x2D, 0x00, +/* 00003DD0 */ 0x63, 0x00, 0x6F, 0x00, 0x2D, 0x00, 0x28, 0x00, 0x5B, 0x00, 0x5E, 0x00, 0x5C, 0x00, 0x2D, 0x00, +/* 00003DE0 */ 0x5D, 0x00, 0x2B, 0x00, 0x29, 0x00, 0x2E, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x28, 0x00, 0x5B, 0x00, +/* 00003DF0 */ 0x5E, 0x00, 0x5F, 0x00, 0x5D, 0x00, 0x2A, 0x00, 0x29, 0x00, 0x5F, 0x00, 0x3F, 0x00, 0x28, 0x00, +/* 00003E00 */ 0x2E, 0x00, 0x2B, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x63, 0x00, 0x72, 0x00, 0x65, 0x00, +/* 00003E10 */ 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 00003E20 */ 0x65, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, +/* 00003E30 */ 0x6F, 0x00, 0x6E, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, +/* 00003E40 */ 0x00, 0x00, 0x2D, 0x00, 0x75, 0x00, 0x2D, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x2D, 0x00, 0x00, 0x00, +/* 00003E50 */ 0x5F, 0x00, 0x5F, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, +/* 00003E60 */ 0x6C, 0x00, 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x64, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, +/* 00003E70 */ 0x6C, 0x00, 0x4F, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x00, 0x00, +/* 00003E80 */ 0x41, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x6C, 0x00, 0x6F, 0x00, +/* 00003E90 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x43, 0x00, +/* 00003EA0 */ 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00, 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5F, 0x00, +/* 00003EB0 */ 0x5F, 0x00, 0x75, 0x00, 0x73, 0x00, 0x61, 0x00, 0x67, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5F, 0x00, +/* 00003EC0 */ 0x5F, 0x00, 0x73, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, +/* 00003ED0 */ 0x76, 0x00, 0x69, 0x00, 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x69, 0x00, +/* 00003EE0 */ 0x67, 0x00, 0x6E, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x65, 0x00, 0x50, 0x00, 0x75, 0x00, 0x6E, 0x00, +/* 00003EF0 */ 0x63, 0x00, 0x74, 0x00, 0x75, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, +/* 00003F00 */ 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x73, 0x00, 0x65, 0x00, 0x46, 0x00, +/* 00003F10 */ 0x69, 0x00, 0x72, 0x00, 0x73, 0x00, 0x74, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x6E, 0x00, +/* 00003F20 */ 0x75, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x72, 0x00, 0x69, 0x00, 0x63, 0x00, 0x00, 0x00, 0x73, 0x00, +/* 00003F30 */ 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x64, 0x00, 0x00, 0x00, +/* 00003F40 */ 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x6C, 0x00, +/* 00003F50 */ 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x4D, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 00003F60 */ 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, +/* 00003F70 */ 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, +/* 00003F80 */ 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, +/* 00003F90 */ 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, +/* 00003FA0 */ 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, +/* 00003FB0 */ 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x57, 0x00, +/* 00003FC0 */ 0x69, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x73, 0x00, 0x54, 0x00, 0x6F, 0x00, +/* 00003FD0 */ 0x45, 0x00, 0x63, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, +/* 00003FE0 */ 0x6E, 0x00, 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x4D, 0x00, 0x61, 0x00, 0x70, 0x00, 0x00, 0x00, +/* 00003FF0 */ 0x47, 0x00, 0x72, 0x00, 0x65, 0x00, 0x67, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x69, 0x00, 0x61, 0x00, +/* 00004000 */ 0x6E, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x61, 0x00, +/* 00004010 */ 0x72, 0x00, 0x00, 0x00, 0x67, 0x00, 0x72, 0x00, 0x65, 0x00, 0x67, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 00004020 */ 0x79, 0x00, 0x00, 0x00, 0x48, 0x00, 0x65, 0x00, 0x62, 0x00, 0x72, 0x00, 0x65, 0x00, 0x77, 0x00, +/* 00004030 */ 0x43, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, +/* 00004040 */ 0x00, 0x00, 0x68, 0x00, 0x65, 0x00, 0x62, 0x00, 0x72, 0x00, 0x65, 0x00, 0x77, 0x00, 0x00, 0x00, +/* 00004050 */ 0x48, 0x00, 0x69, 0x00, 0x6A, 0x00, 0x72, 0x00, 0x69, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 00004060 */ 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x69, 0x00, 0x73, 0x00, +/* 00004070 */ 0x6C, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x69, 0x00, 0x63, 0x00, 0x00, 0x00, 0x4A, 0x00, 0x61, 0x00, +/* 00004080 */ 0x70, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x73, 0x00, 0x65, 0x00, 0x43, 0x00, 0x61, 0x00, +/* 00004090 */ 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6A, 0x00, +/* 000040A0 */ 0x61, 0x00, 0x70, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, +/* 000040B0 */ 0x4A, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x43, 0x00, 0x61, 0x00, +/* 000040C0 */ 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6A, 0x00, +/* 000040D0 */ 0x75, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x4B, 0x00, 0x6F, 0x00, +/* 000040E0 */ 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, +/* 000040F0 */ 0x6E, 0x00, 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6B, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 00004100 */ 0x65, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x55, 0x00, 0x6D, 0x00, 0x41, 0x00, 0x6C, 0x00, +/* 00004110 */ 0x51, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, +/* 00004120 */ 0x6E, 0x00, 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x69, 0x00, 0x73, 0x00, 0x6C, 0x00, +/* 00004130 */ 0x61, 0x00, 0x6D, 0x00, 0x69, 0x00, 0x63, 0x00, 0x2D, 0x00, 0x63, 0x00, 0x69, 0x00, 0x76, 0x00, +/* 00004140 */ 0x69, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x54, 0x00, 0x68, 0x00, 0x61, 0x00, 0x69, 0x00, 0x43, 0x00, +/* 00004150 */ 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, +/* 00004160 */ 0x74, 0x00, 0x68, 0x00, 0x61, 0x00, 0x69, 0x00, 0x00, 0x00, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, +/* 00004170 */ 0x77, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, +/* 00004180 */ 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x74, 0x00, 0x61, 0x00, 0x69, 0x00, 0x77, 0x00, +/* 00004190 */ 0x61, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x45, 0x00, 0x63, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x4F, 0x00, +/* 000041A0 */ 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x54, 0x00, 0x6F, 0x00, +/* 000041B0 */ 0x57, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x73, 0x00, 0x54, 0x00, +/* 000041C0 */ 0x65, 0x00, 0x6D, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, +/* 000041D0 */ 0x57, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x73, 0x00, 0x54, 0x00, +/* 000041E0 */ 0x6F, 0x00, 0x45, 0x00, 0x63, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 000041F0 */ 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, +/* 00004200 */ 0x72, 0x00, 0x72, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x57, 0x00, 0x65, 0x00, 0x65, 0x00, +/* 00004210 */ 0x6B, 0x00, 0x64, 0x00, 0x61, 0x00, 0x79, 0x00, 0x45, 0x00, 0x72, 0x00, 0x61, 0x00, 0x4D, 0x00, +/* 00004220 */ 0x6F, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x68, 0x00, 0x50, 0x00, 0x61, 0x00, 0x74, 0x00, 0x74, 0x00, +/* 00004230 */ 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x72, 0x00, +/* 00004240 */ 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x44, 0x00, 0x61, 0x00, 0x79, 0x00, 0x48, 0x00, 0x6F, 0x00, +/* 00004250 */ 0x75, 0x00, 0x72, 0x00, 0x4D, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00004260 */ 0x53, 0x00, 0x65, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x4D, 0x00, 0x6F, 0x00, +/* 00004270 */ 0x6E, 0x00, 0x74, 0x00, 0x68, 0x00, 0x50, 0x00, 0x61, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00004280 */ 0x72, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x75, 0x00, 0x70, 0x00, 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 00004290 */ 0x65, 0x00, 0x50, 0x00, 0x61, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, +/* 000042A0 */ 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x73, 0x00, 0x00, 0x00, +/* 000042B0 */ 0x74, 0x00, 0x65, 0x00, 0x6D, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 000042C0 */ 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, 0x79, 0x00, 0x6F, 0x00, 0x66, 0x00, 0x77, 0x00, 0x65, 0x00, +/* 000042D0 */ 0x65, 0x00, 0x6B, 0x00, 0x2E, 0x00, 0x61, 0x00, 0x62, 0x00, 0x62, 0x00, 0x72, 0x00, 0x65, 0x00, +/* 000042E0 */ 0x76, 0x00, 0x69, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x00, 0x00, 0x64, 0x00, +/* 000042F0 */ 0x61, 0x00, 0x79, 0x00, 0x6F, 0x00, 0x66, 0x00, 0x77, 0x00, 0x65, 0x00, 0x65, 0x00, 0x6B, 0x00, +/* 00004300 */ 0x2E, 0x00, 0x66, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x79, 0x00, 0x65, 0x00, +/* 00004310 */ 0x61, 0x00, 0x72, 0x00, 0x2E, 0x00, 0x61, 0x00, 0x62, 0x00, 0x62, 0x00, 0x72, 0x00, 0x65, 0x00, +/* 00004320 */ 0x76, 0x00, 0x69, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x00, 0x00, 0x79, 0x00, +/* 00004330 */ 0x65, 0x00, 0x61, 0x00, 0x72, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x6C, 0x00, +/* 00004340 */ 0x00, 0x00, 0x6D, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x68, 0x00, 0x2E, 0x00, 0x6E, 0x00, +/* 00004350 */ 0x75, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x72, 0x00, 0x69, 0x00, 0x63, 0x00, 0x00, 0x00, 0x6D, 0x00, +/* 00004360 */ 0x6F, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x68, 0x00, 0x2E, 0x00, 0x61, 0x00, 0x62, 0x00, 0x62, 0x00, +/* 00004370 */ 0x72, 0x00, 0x65, 0x00, 0x76, 0x00, 0x69, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, +/* 00004380 */ 0x00, 0x00, 0x6D, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x68, 0x00, 0x2E, 0x00, 0x66, 0x00, +/* 00004390 */ 0x75, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, +/* 000043A0 */ 0x7A, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x61, 0x00, 0x62, 0x00, 0x62, 0x00, +/* 000043B0 */ 0x72, 0x00, 0x65, 0x00, 0x76, 0x00, 0x69, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, +/* 000043C0 */ 0x00, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x7A, 0x00, 0x6F, 0x00, 0x6E, 0x00, +/* 000043D0 */ 0x65, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x7B, 0x00, +/* 000043E0 */ 0x28, 0x00, 0x00, 0x00, 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x5C, 0x00, 0x2E, 0x00, 0x73, 0x00, +/* 000043F0 */ 0x6F, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x2E, 0x00, +/* 00004400 */ 0x28, 0x00, 0x5B, 0x00, 0x61, 0x00, 0x2D, 0x00, 0x7A, 0x00, 0x5D, 0x00, 0x2A, 0x00, 0x29, 0x00, +/* 00004410 */ 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x5C, 0x00, 0x28, 0x00, 0x5B, 0x00, 0x30, 0x00, 0x2D, 0x00, +/* 00004420 */ 0x39, 0x00, 0x5D, 0x00, 0x5C, 0x00, 0x29, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x7D, 0x00, 0x00, 0x00, +/* 00004430 */ 0x45, 0x00, 0x72, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x20, 0x00, 0x77, 0x00, 0x68, 0x00, +/* 00004440 */ 0x65, 0x00, 0x6E, 0x00, 0x20, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x72, 0x00, 0x65, 0x00, +/* 00004450 */ 0x63, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x20, 0x00, 0x77, 0x00, 0x69, 0x00, +/* 00004460 */ 0x6E, 0x00, 0x64, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x73, 0x00, 0x20, 0x00, 0x72, 0x00, 0x65, 0x00, +/* 00004470 */ 0x74, 0x00, 0x75, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x64, 0x00, 0x20, 0x00, 0x77, 0x00, +/* 00004480 */ 0x65, 0x00, 0x65, 0x00, 0x6B, 0x00, 0x64, 0x00, 0x61, 0x00, 0x79, 0x00, 0x2F, 0x00, 0x45, 0x00, +/* 00004490 */ 0x72, 0x00, 0x61, 0x00, 0x2F, 0x00, 0x4D, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x68, 0x00, +/* 000044A0 */ 0x20, 0x00, 0x70, 0x00, 0x61, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, +/* 000044B0 */ 0x3B, 0x00, 0x20, 0x00, 0x72, 0x00, 0x65, 0x00, 0x67, 0x00, 0x65, 0x00, 0x78, 0x00, 0x20, 0x00, +/* 000044C0 */ 0x72, 0x00, 0x65, 0x00, 0x74, 0x00, 0x75, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x64, 0x00, +/* 000044D0 */ 0x20, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x20, 0x00, 0x0A, 0x00, +/* 000044E0 */ 0x49, 0x00, 0x6E, 0x00, 0x70, 0x00, 0x75, 0x00, 0x74, 0x00, 0x20, 0x00, 0x77, 0x00, 0x61, 0x00, +/* 000044F0 */ 0x73, 0x00, 0x3A, 0x00, 0x20, 0x00, 0x27, 0x00, 0x00, 0x00, 0x27, 0x00, 0x0A, 0x00, 0x52, 0x00, +/* 00004500 */ 0x65, 0x00, 0x67, 0x00, 0x65, 0x00, 0x78, 0x00, 0x3A, 0x00, 0x20, 0x00, 0x27, 0x00, 0x00, 0x00, +/* 00004510 */ 0x28, 0x00, 0x5C, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x29, 0x00, +/* 00004520 */ 0x3F, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x2E, 0x00, 0x28, 0x00, 0x5B, 0x00, 0x61, 0x00, 0x2D, 0x00, +/* 00004530 */ 0x7A, 0x00, 0x5D, 0x00, 0x2A, 0x00, 0x29, 0x00, 0x28, 0x00, 0x5C, 0x00, 0x28, 0x00, 0x5B, 0x00, +/* 00004540 */ 0x30, 0x00, 0x2D, 0x00, 0x39, 0x00, 0x5D, 0x00, 0x5C, 0x00, 0x29, 0x00, 0x29, 0x00, 0x3F, 0x00, +/* 00004550 */ 0x7D, 0x00, 0x27, 0x00, 0x00, 0x00, 0x66, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x00, 0x00, +/* 00004560 */ 0x7B, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x00, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x61, 0x00, 0x62, 0x00, +/* 00004570 */ 0x62, 0x00, 0x72, 0x00, 0x65, 0x00, 0x76, 0x00, 0x69, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00004580 */ 0x64, 0x00, 0x00, 0x00, 0x61, 0x00, 0x62, 0x00, 0x62, 0x00, 0x72, 0x00, 0x65, 0x00, 0x76, 0x00, +/* 00004590 */ 0x69, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x28, 0x00, 0x31, 0x00, 0x29, 0x00, +/* 000045A0 */ 0x00, 0x00, 0x29, 0x00, 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x5C, 0x00, 0x2E, 0x00, 0x73, 0x00, +/* 000045B0 */ 0x6F, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x5C, 0x00, 0x2E, 0x00, 0x28, 0x00, +/* 000045C0 */ 0x5B, 0x00, 0x61, 0x00, 0x2D, 0x00, 0x7A, 0x00, 0x5D, 0x00, 0x2A, 0x00, 0x29, 0x00, 0x28, 0x00, +/* 000045D0 */ 0x3F, 0x00, 0x3A, 0x00, 0x5C, 0x00, 0x28, 0x00, 0x5B, 0x00, 0x30, 0x00, 0x2D, 0x00, 0x39, 0x00, +/* 000045E0 */ 0x5D, 0x00, 0x5C, 0x00, 0x29, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x45, 0x00, +/* 000045F0 */ 0x72, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x20, 0x00, 0x77, 0x00, 0x68, 0x00, 0x65, 0x00, +/* 00004600 */ 0x6E, 0x00, 0x20, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x72, 0x00, 0x65, 0x00, 0x63, 0x00, +/* 00004610 */ 0x74, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x20, 0x00, 0x77, 0x00, 0x69, 0x00, 0x6E, 0x00, +/* 00004620 */ 0x64, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x73, 0x00, 0x20, 0x00, 0x72, 0x00, 0x65, 0x00, 0x74, 0x00, +/* 00004630 */ 0x75, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x64, 0x00, 0x20, 0x00, 0x64, 0x00, 0x61, 0x00, +/* 00004640 */ 0x79, 0x00, 0x2F, 0x00, 0x68, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x72, 0x00, 0x2F, 0x00, 0x6D, 0x00, +/* 00004650 */ 0x69, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x74, 0x00, 0x65, 0x00, 0x2F, 0x00, 0x73, 0x00, 0x65, 0x00, +/* 00004660 */ 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x2F, 0x00, 0x6D, 0x00, 0x6F, 0x00, 0x6E, 0x00, +/* 00004670 */ 0x74, 0x00, 0x68, 0x00, 0x20, 0x00, 0x70, 0x00, 0x61, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00004680 */ 0x72, 0x00, 0x6E, 0x00, 0x3B, 0x00, 0x20, 0x00, 0x72, 0x00, 0x65, 0x00, 0x67, 0x00, 0x65, 0x00, +/* 00004690 */ 0x78, 0x00, 0x20, 0x00, 0x72, 0x00, 0x65, 0x00, 0x74, 0x00, 0x75, 0x00, 0x72, 0x00, 0x6E, 0x00, +/* 000046A0 */ 0x65, 0x00, 0x64, 0x00, 0x20, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x2E, 0x00, +/* 000046B0 */ 0x20, 0x00, 0x0A, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x70, 0x00, 0x75, 0x00, 0x74, 0x00, 0x20, 0x00, +/* 000046C0 */ 0x77, 0x00, 0x61, 0x00, 0x73, 0x00, 0x3A, 0x00, 0x20, 0x00, 0x27, 0x00, 0x00, 0x00, 0x2E, 0x00, +/* 000046D0 */ 0x69, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x65, 0x00, 0x67, 0x00, 0x65, 0x00, 0x72, 0x00, 0x28, 0x00, +/* 000046E0 */ 0x32, 0x00, 0x29, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 000046F0 */ 0x67, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x74, 0x00, +/* 00004700 */ 0x65, 0x00, 0x67, 0x00, 0x65, 0x00, 0x72, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, +/* 00004710 */ 0x79, 0x00, 0x6F, 0x00, 0x66, 0x00, 0x77, 0x00, 0x65, 0x00, 0x65, 0x00, 0x6B, 0x00, 0x00, 0x00, +/* 00004720 */ 0x45, 0x00, 0x72, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x20, 0x00, 0x77, 0x00, 0x68, 0x00, +/* 00004730 */ 0x65, 0x00, 0x6E, 0x00, 0x20, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x72, 0x00, 0x65, 0x00, +/* 00004740 */ 0x63, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x20, 0x00, 0x77, 0x00, 0x69, 0x00, +/* 00004750 */ 0x6E, 0x00, 0x64, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x73, 0x00, 0x20, 0x00, 0x72, 0x00, 0x65, 0x00, +/* 00004760 */ 0x74, 0x00, 0x75, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x64, 0x00, 0x20, 0x00, 0x79, 0x00, +/* 00004770 */ 0x65, 0x00, 0x61, 0x00, 0x72, 0x00, 0x3B, 0x00, 0x20, 0x00, 0x72, 0x00, 0x65, 0x00, 0x67, 0x00, +/* 00004780 */ 0x65, 0x00, 0x78, 0x00, 0x20, 0x00, 0x72, 0x00, 0x65, 0x00, 0x74, 0x00, 0x75, 0x00, 0x72, 0x00, +/* 00004790 */ 0x6E, 0x00, 0x65, 0x00, 0x64, 0x00, 0x20, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x6C, 0x00, +/* 000047A0 */ 0x00, 0x00, 0x7B, 0x00, 0x79, 0x00, 0x65, 0x00, 0x61, 0x00, 0x72, 0x00, 0x2E, 0x00, 0x61, 0x00, +/* 000047B0 */ 0x62, 0x00, 0x62, 0x00, 0x72, 0x00, 0x65, 0x00, 0x76, 0x00, 0x69, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 000047C0 */ 0x65, 0x00, 0x64, 0x00, 0x28, 0x00, 0x32, 0x00, 0x29, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x7B, 0x00, +/* 000047D0 */ 0x79, 0x00, 0x65, 0x00, 0x61, 0x00, 0x72, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x75, 0x00, 0x6C, 0x00, +/* 000047E0 */ 0x6C, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x7A, 0x00, +/* 000047F0 */ 0x6F, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x7B, 0x00, 0x79, 0x00, 0x65, 0x00, +/* 00004800 */ 0x61, 0x00, 0x72, 0x00, 0x5C, 0x00, 0x2E, 0x00, 0x5B, 0x00, 0x61, 0x00, 0x2D, 0x00, 0x7A, 0x00, +/* 00004810 */ 0x5D, 0x00, 0x2A, 0x00, 0x28, 0x00, 0x5C, 0x00, 0x28, 0x00, 0x5B, 0x00, 0x30, 0x00, 0x2D, 0x00, +/* 00004820 */ 0x39, 0x00, 0x5D, 0x00, 0x5C, 0x00, 0x29, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x5C, 0x00, 0x7D, 0x00, +/* 00004830 */ 0x00, 0x00, 0x31, 0x00, 0x32, 0x00, 0x48, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x72, 0x00, 0x43, 0x00, +/* 00004840 */ 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x6B, 0x00, 0x00, 0x00, 0x32, 0x00, 0x34, 0x00, 0x48, 0x00, +/* 00004850 */ 0x6F, 0x00, 0x75, 0x00, 0x72, 0x00, 0x43, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x6B, 0x00, +/* 00004860 */ 0x00, 0x00, 0x6E, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x00, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00004870 */ 0x6D, 0x00, 0x70, 0x00, 0x00, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, +/* 00004880 */ 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, +/* 00004890 */ 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, +/* 000048A0 */ 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, +/* 000048B0 */ 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, +/* 000048C0 */ 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x00, 0x00, 0xFE, 0x9B, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x6A, +/* 000048D0 */ 0x00, 0x00, 0x00, 0x9B, 0x00, 0x00, 0x00, 0xE7, 0x00, 0x00, 0x00, 0x51, 0x01, 0x00, 0x00, 0xBB, +/* 000048E0 */ 0x01, 0x00, 0x00, 0xBC, 0x01, 0x00, 0x00, 0xCA, 0x01, 0x00, 0x00, 0xDB, 0x01, 0x00, 0x00, 0x03, +/* 000048F0 */ 0x02, 0x00, 0x00, 0x2C, 0x02, 0x00, 0x00, 0x2D, 0x02, 0x00, 0x00, 0xA7, 0x02, 0x00, 0x00, 0xC6, +/* 00004900 */ 0x02, 0x00, 0x00, 0xC7, 0x02, 0x00, 0x00, 0xFA, 0x02, 0x00, 0x00, 0x39, 0x03, 0x00, 0x00, 0x5E, +/* 00004910 */ 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0xC5, 0x03, 0x00, 0x00, 0xC6, 0x03, 0x00, 0x00, 0xD7, +/* 00004920 */ 0x03, 0x00, 0x00, 0xFA, 0x03, 0x00, 0x00, 0xFB, 0x03, 0x00, 0x00, 0x0C, 0x04, 0x00, 0x00, 0x41, +/* 00004930 */ 0x04, 0x00, 0x00, 0x7A, 0x04, 0x00, 0x00, 0xBB, 0x04, 0x00, 0x00, 0xBC, 0x04, 0x00, 0x00, 0xFD, +/* 00004940 */ 0x04, 0x00, 0x00, 0x35, 0x05, 0x00, 0x00, 0x36, 0x05, 0x00, 0x00, 0xB0, 0x05, 0x00, 0x00, 0x11, +/* 00004950 */ 0x06, 0x00, 0x00, 0xA0, 0x06, 0x00, 0x00, 0x0B, 0x07, 0x00, 0x00, 0x2C, 0x07, 0x00, 0x00, 0x42, +/* 00004960 */ 0x07, 0x00, 0x00, 0x54, 0x07, 0x00, 0x00, 0x74, 0x07, 0x00, 0x00, 0x75, 0x07, 0x00, 0x00, 0x8C, +/* 00004970 */ 0x07, 0x00, 0x00, 0xD6, 0x07, 0x00, 0x00, 0xE5, 0x07, 0x00, 0x00, 0xE6, 0x07, 0x00, 0x00, 0x04, +/* 00004980 */ 0x08, 0x00, 0x00, 0x2F, 0x08, 0x00, 0x00, 0x4B, 0x08, 0x00, 0x00, 0x5D, 0x08, 0x00, 0x00, 0x5E, +/* 00004990 */ 0x08, 0x00, 0x00, 0xBB, 0x08, 0x00, 0x00, 0xE9, 0x08, 0x00, 0x00, 0xFB, 0x08, 0x00, 0x00, 0xFC, +/* 000049A0 */ 0x08, 0x00, 0x00, 0x26, 0x09, 0x00, 0x00, 0x34, 0x09, 0x00, 0x00, 0x40, 0x09, 0x00, 0x00, 0x46, +/* 000049B0 */ 0x09, 0x00, 0x00, 0x47, 0x09, 0x00, 0x00, 0x65, 0x09, 0x00, 0x00, 0x66, 0x09, 0x00, 0x00, 0x8A, +/* 000049C0 */ 0x09, 0x00, 0x00, 0xAC, 0x09, 0x00, 0x00, 0xCE, 0x09, 0x00, 0x00, 0xF0, 0x09, 0x00, 0x00, 0x12, +/* 000049D0 */ 0x0A, 0x00, 0x00, 0x30, 0x0A, 0x00, 0x00, 0x50, 0x0A, 0x00, 0x00, 0x51, 0x0A, 0x00, 0x00, 0x7D, +/* 000049E0 */ 0x0A, 0x00, 0x00, 0x7E, 0x0A, 0x00, 0x00, 0x9C, 0x0A, 0x00, 0x00, 0xC2, 0x0A, 0x00, 0x00, 0xEC, +/* 000049F0 */ 0x0A, 0x00, 0x00, 0x1A, 0x0B, 0x00, 0x00, 0x3F, 0x0B, 0x00, 0x00, 0x4D, 0x0B, 0x00, 0x00, 0x4E, +/* 00004A00 */ 0x0B, 0x00, 0x00, 0xA2, 0x0B, 0x00, 0x00, 0xF2, 0x0B, 0x00, 0x00, 0x50, 0x0C, 0x00, 0x00, 0xAC, +/* 00004A10 */ 0x0C, 0x00, 0x00, 0x22, 0x0D, 0x00, 0x00, 0x52, 0x0D, 0x00, 0x00, 0xA7, 0x0D, 0x00, 0x00, 0xE9, +/* 00004A20 */ 0x0D, 0x00, 0x00, 0x33, 0x0E, 0x00, 0x00, 0x3A, 0x0E, 0x00, 0x00, 0x3B, 0x0E, 0x00, 0x00, 0x83, +/* 00004A30 */ 0x0E, 0x00, 0x00, 0xCB, 0x0E, 0x00, 0x00, 0x11, 0x0F, 0x00, 0x00, 0x12, 0x0F, 0x00, 0x00, 0x5E, +/* 00004A40 */ 0x0F, 0x00, 0x00, 0xA8, 0x0F, 0x00, 0x00, 0xE2, 0x0F, 0x00, 0x00, 0xE3, 0x0F, 0x00, 0x00, 0x31, +/* 00004A50 */ 0x10, 0x00, 0x00, 0x87, 0x10, 0x00, 0x00, 0xDD, 0x10, 0x00, 0x00, 0xDE, 0x10, 0x00, 0x00, 0x1C, +/* 00004A60 */ 0x11, 0x00, 0x00, 0x54, 0x11, 0x00, 0x00, 0x55, 0x11, 0x00, 0x00, 0x65, 0x11, 0x00, 0x00, 0xBC, +/* 00004A70 */ 0x11, 0x00, 0x00, 0x13, 0x12, 0x00, 0x00, 0x8E, 0x12, 0x00, 0x00, 0x02, 0x13, 0x00, 0x00, 0x84, +/* 00004A80 */ 0x13, 0x00, 0x00, 0x04, 0x14, 0x00, 0x00, 0x4C, 0x14, 0x00, 0x00, 0xBE, 0x14, 0x00, 0x00, 0xBF, +/* 00004A90 */ 0x14, 0x00, 0x00, 0x1D, 0x15, 0x00, 0x00, 0x73, 0x15, 0x00, 0x00, 0xDE, 0x15, 0x00, 0x00, 0x4B, +/* 00004AA0 */ 0x16, 0x00, 0x00, 0xC6, 0x16, 0x00, 0x00, 0x43, 0x17, 0x00, 0x00, 0xBA, 0x17, 0x00, 0x00, 0x29, +/* 00004AB0 */ 0x18, 0x00, 0x00, 0x86, 0x18, 0x00, 0x00, 0x87, 0x18, 0x00, 0x00, 0xC0, 0x18, 0x00, 0x00, 0x3C, +/* 00004AC0 */ 0x19, 0x00, 0x00, 0xC9, 0x19, 0x00, 0x00, 0xF1, 0x19, 0x00, 0x00, 0x1B, 0x1A, 0x00, 0x00, 0x6B, +/* 00004AD0 */ 0x1A, 0x00, 0x00, 0x76, 0x1A, 0x00, 0x00, 0xBF, 0x1A, 0x00, 0x00, 0x1C, 0x1B, 0x00, 0x00, 0x82, +/* 00004AE0 */ 0x1B, 0x00, 0x00, 0x83, 0x1B, 0x00, 0x00, 0xA9, 0x1B, 0x00, 0x00, 0x09, 0x1C, 0x00, 0x00, 0x51, +/* 00004AF0 */ 0x1C, 0x00, 0x00, 0x7F, 0x1C, 0x00, 0x00, 0xA5, 0x1C, 0x00, 0x00, 0xA6, 0x1C, 0x00, 0x00, 0xE3, +/* 00004B00 */ 0x1C, 0x00, 0x00, 0x1A, 0x1D, 0x00, 0x00, 0x1B, 0x1D, 0x00, 0x00, 0x81, 0x1D, 0x00, 0x00, 0x82, +/* 00004B10 */ 0x1D, 0x00, 0x00, 0xF2, 0x1D, 0x00, 0x00, 0x70, 0x1E, 0x00, 0x00, 0x77, 0x1E, 0x00, 0x00, 0x78, +/* 00004B20 */ 0x1E, 0x00, 0x00, 0xD2, 0x1E, 0x00, 0x00, 0x3F, 0x1F, 0x00, 0x00, 0xAB, 0x1F, 0x00, 0x00, 0x13, +/* 00004B30 */ 0x20, 0x00, 0x00, 0x82, 0x20, 0x00, 0x00, 0xE2, 0x20, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x01, +/* 00004B40 */ 0x21, 0x00, 0x00, 0x26, 0x21, 0x00, 0x00, 0x51, 0x21, 0x00, 0x00, 0x86, 0x21, 0x00, 0x00, 0xAA, +/* 00004B50 */ 0x21, 0x00, 0x00, 0xB4, 0x21, 0x00, 0x00, 0xB5, 0x21, 0x00, 0x00, 0xE9, 0x21, 0x00, 0x00, 0x00, +/* 00004B60 */ 0x22, 0x00, 0x00, 0x4F, 0x22, 0x00, 0x00, 0x81, 0x22, 0x00, 0x00, 0xA5, 0x22, 0x00, 0x00, 0xB6, +/* 00004B70 */ 0x22, 0x00, 0x00, 0xDC, 0x22, 0x00, 0x00, 0xE6, 0x22, 0x00, 0x00, 0xE7, 0x22, 0x00, 0x00, 0x07, +/* 00004B80 */ 0x23, 0x00, 0x00, 0x0E, 0x23, 0x00, 0x00, 0x0F, 0x23, 0x00, 0x00, 0x74, 0x23, 0x00, 0x00, 0xA0, +/* 00004B90 */ 0x23, 0x00, 0x00, 0xE6, 0x23, 0x00, 0x00, 0xFC, 0x23, 0x00, 0x00, 0x06, 0x24, 0x00, 0x00, 0x0D, +/* 00004BA0 */ 0x24, 0x00, 0x00, 0x0E, 0x24, 0x00, 0x00, 0x3F, 0x24, 0x00, 0x00, 0x76, 0x24, 0x00, 0x00, 0x7D, +/* 00004BB0 */ 0x24, 0x00, 0x00, 0x7E, 0x24, 0x00, 0x00, 0xB2, 0x24, 0x00, 0x00, 0xF0, 0x24, 0x00, 0x00, 0xF6, +/* 00004BC0 */ 0x24, 0x00, 0x00, 0xF7, 0x24, 0x00, 0x00, 0x51, 0x25, 0x00, 0x00, 0x7C, 0x25, 0x00, 0x00, 0xA5, +/* 00004BD0 */ 0x25, 0x00, 0x00, 0xD0, 0x25, 0x00, 0x00, 0xDA, 0x25, 0x00, 0x00, 0xDB, 0x25, 0x00, 0x00, 0xFB, +/* 00004BE0 */ 0x25, 0x00, 0x00, 0x02, 0x26, 0x00, 0x00, 0x03, 0x26, 0x00, 0x00, 0x0B, 0x26, 0x00, 0x00, 0x4E, +/* 00004BF0 */ 0x26, 0x00, 0x00, 0x55, 0x26, 0x00, 0x00, 0x7F, 0x26, 0x00, 0x00, 0x86, 0x26, 0x00, 0x00, 0xF7, +/* 00004C00 */ 0x26, 0x00, 0x00, 0x54, 0x27, 0x00, 0x00, 0xA4, 0x27, 0x00, 0x00, 0xAC, 0x27, 0x00, 0x00, 0xF3, +/* 00004C10 */ 0x27, 0x00, 0x00, 0x17, 0x28, 0x00, 0x00, 0x35, 0x28, 0x00, 0x00, 0x3F, 0x28, 0x00, 0x00, 0x40, +/* 00004C20 */ 0x28, 0x00, 0x00, 0x60, 0x28, 0x00, 0x00, 0x7C, 0x28, 0x00, 0x00, 0x93, 0x28, 0x00, 0x00, 0xC3, +/* 00004C30 */ 0x28, 0x00, 0x00, 0xE5, 0x28, 0x00, 0x00, 0xF3, 0x28, 0x00, 0x00, 0xF4, 0x28, 0x00, 0x00, 0x0E, +/* 00004C40 */ 0x29, 0x00, 0x00, 0x4C, 0x29, 0x00, 0x00, 0x7B, 0x29, 0x00, 0x00, 0x98, 0x29, 0x00, 0x00, 0xB3, +/* 00004C50 */ 0x29, 0x00, 0x00, 0xC5, 0x29, 0x00, 0x00, 0xD3, 0x29, 0x00, 0x00, 0xD4, 0x29, 0x00, 0x00, 0xF2, +/* 00004C60 */ 0x29, 0x00, 0x00, 0x14, 0x2A, 0x00, 0x00, 0x58, 0x2A, 0x00, 0x00, 0xA6, 0x2A, 0x00, 0x00, 0xE9, +/* 00004C70 */ 0x2A, 0x00, 0x00, 0x38, 0x2B, 0x00, 0x00, 0x68, 0x2B, 0x00, 0x00, 0xB1, 0x2B, 0x00, 0x00, 0xCB, +/* 00004C80 */ 0x2B, 0x00, 0x00, 0xD9, 0x2B, 0x00, 0x00, 0xDA, 0x2B, 0x00, 0x00, 0x12, 0x2C, 0x00, 0x00, 0x1C, +/* 00004C90 */ 0x2C, 0x00, 0x00, 0x23, 0x2C, 0x00, 0x00, 0x24, 0x2C, 0x00, 0x00, 0x2C, 0x2C, 0x00, 0x00, 0x78, +/* 00004CA0 */ 0x2C, 0x00, 0x00, 0x7F, 0x2C, 0x00, 0x00, 0xA3, 0x2C, 0x00, 0x00, 0xAA, 0x2C, 0x00, 0x00, 0x1B, +/* 00004CB0 */ 0x2D, 0x00, 0x00, 0x63, 0x2D, 0x00, 0x00, 0x6B, 0x2D, 0x00, 0x00, 0xB6, 0x2D, 0x00, 0x00, 0xD9, +/* 00004CC0 */ 0x2D, 0x00, 0x00, 0x15, 0x2E, 0x00, 0x00, 0x5A, 0x2E, 0x00, 0x00, 0x84, 0x2E, 0x00, 0x00, 0x9E, +/* 00004CD0 */ 0x2E, 0x00, 0x00, 0xAC, 0x2E, 0x00, 0x00, 0xAD, 0x2E, 0x00, 0x00, 0x0D, 0x2F, 0x00, 0x00, 0x3E, +/* 00004CE0 */ 0x2F, 0x00, 0x00, 0x6F, 0x2F, 0x00, 0x00, 0xB1, 0x2F, 0x00, 0x00, 0xF8, 0x2F, 0x00, 0x00, 0x0A, +/* 00004CF0 */ 0x30, 0x00, 0x00, 0x0B, 0x30, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x00, 0x38, 0x30, 0x00, 0x00, 0x42, +/* 00004D00 */ 0x30, 0x00, 0x00, 0x43, 0x30, 0x00, 0x00, 0x6F, 0x30, 0x00, 0x00, 0x86, 0x30, 0x00, 0x00, 0x8D, +/* 00004D10 */ 0x30, 0x00, 0x00, 0x8E, 0x30, 0x00, 0x00, 0xB8, 0x30, 0x00, 0x00, 0xB9, 0x30, 0x00, 0x00, 0xC1, +/* 00004D20 */ 0x30, 0x00, 0x00, 0x08, 0x31, 0x00, 0x00, 0x0F, 0x31, 0x00, 0x00, 0x3B, 0x31, 0x00, 0x00, 0x42, +/* 00004D30 */ 0x31, 0x00, 0x00, 0x9F, 0x31, 0x00, 0x00, 0xFD, 0x31, 0x00, 0x00, 0x05, 0x32, 0x00, 0x00, 0x43, +/* 00004D40 */ 0x32, 0x00, 0x00, 0x6A, 0x32, 0x00, 0x00, 0x6B, 0x32, 0x00, 0x00, 0x94, 0x32, 0x00, 0x00, 0xCE, +/* 00004D50 */ 0x32, 0x00, 0x00, 0xE8, 0x32, 0x00, 0x00, 0x0B, 0x33, 0x00, 0x00, 0x28, 0x33, 0x00, 0x00, 0x43, +/* 00004D60 */ 0x33, 0x00, 0x00, 0x61, 0x33, 0x00, 0x00, 0x7D, 0x33, 0x00, 0x00, 0xBB, 0x33, 0x00, 0x00, 0xF4, +/* 00004D70 */ 0x33, 0x00, 0x00, 0x15, 0x34, 0x00, 0x00, 0x36, 0x34, 0x00, 0x00, 0x5D, 0x34, 0x00, 0x00, 0x7D, +/* 00004D80 */ 0x34, 0x00, 0x00, 0x9E, 0x34, 0x00, 0x00, 0xB7, 0x34, 0x00, 0x00, 0xD4, 0x34, 0x00, 0x00, 0xF3, +/* 00004D90 */ 0x34, 0x00, 0x00, 0x05, 0x35, 0x00, 0x00, 0x13, 0x35, 0x00, 0x00, 0x14, 0x35, 0x00, 0x00, 0x4B, +/* 00004DA0 */ 0x35, 0x00, 0x00, 0x55, 0x35, 0x00, 0x00, 0x56, 0x35, 0x00, 0x00, 0x8D, 0x35, 0x00, 0x00, 0xC2, +/* 00004DB0 */ 0x35, 0x00, 0x00, 0xF0, 0x35, 0x00, 0x00, 0x07, 0x36, 0x00, 0x00, 0x18, 0x36, 0x00, 0x00, 0x36, +/* 00004DC0 */ 0x36, 0x00, 0x00, 0x40, 0x36, 0x00, 0x00, 0x47, 0x36, 0x00, 0x00, 0x48, 0x36, 0x00, 0x00, 0x50, +/* 00004DD0 */ 0x36, 0x00, 0x00, 0xAE, 0x36, 0x00, 0x00, 0x03, 0x37, 0x00, 0x00, 0x0A, 0x37, 0x00, 0x00, 0x2E, +/* 00004DE0 */ 0x37, 0x00, 0x00, 0x35, 0x37, 0x00, 0x00, 0xA6, 0x37, 0x00, 0x00, 0x20, 0x38, 0x00, 0x00, 0x9B, +/* 00004DF0 */ 0x38, 0x00, 0x00, 0xCE, 0x38, 0x00, 0x00, 0x4A, 0x39, 0x00, 0x00, 0x52, 0x39, 0x00, 0x00, 0xBD, +/* 00004E00 */ 0x39, 0x00, 0x00, 0xEC, 0x39, 0x00, 0x00, 0xFB, 0x39, 0x00, 0x00, 0x1F, 0x3A, 0x00, 0x00, 0x63, +/* 00004E10 */ 0x3A, 0x00, 0x00, 0x74, 0x3A, 0x00, 0x00, 0xB9, 0x3A, 0x00, 0x00, 0xC3, 0x3A, 0x00, 0x00, 0xC4, +/* 00004E20 */ 0x3A, 0x00, 0x00, 0xE8, 0x3A, 0x00, 0x00, 0x22, 0x3B, 0x00, 0x00, 0x49, 0x3B, 0x00, 0x00, 0x83, +/* 00004E30 */ 0x3B, 0x00, 0x00, 0xE8, 0x3B, 0x00, 0x00, 0x12, 0x3C, 0x00, 0x00, 0x43, 0x3C, 0x00, 0x00, 0x62, +/* 00004E40 */ 0x3C, 0x00, 0x00, 0xB2, 0x3C, 0x00, 0x00, 0xE6, 0x3C, 0x00, 0x00, 0x17, 0x3D, 0x00, 0x00, 0x6B, +/* 00004E50 */ 0x3D, 0x00, 0x00, 0x9F, 0x3D, 0x00, 0x00, 0xEC, 0x3D, 0x00, 0x00, 0x06, 0x3E, 0x00, 0x00, 0x55, +/* 00004E60 */ 0x3E, 0x00, 0x00, 0x7D, 0x3E, 0x00, 0x00, 0x93, 0x3E, 0x00, 0x00, 0xA5, 0x3E, 0x00, 0x00, 0xB3, +/* 00004E70 */ 0x3E, 0x00, 0x00, 0xB4, 0x3E, 0x00, 0x00, 0xE6, 0x3E, 0x00, 0x00, 0x19, 0x3F, 0x00, 0x00, 0x63, +/* 00004E80 */ 0x3F, 0x00, 0x00, 0x95, 0x3F, 0x00, 0x00, 0xC3, 0x3F, 0x00, 0x00, 0xFC, 0x3F, 0x00, 0x00, 0x12, +/* 00004E90 */ 0x40, 0x00, 0x00, 0x24, 0x40, 0x00, 0x00, 0x32, 0x40, 0x00, 0x00, 0x33, 0x40, 0x00, 0x00, 0x54, +/* 00004EA0 */ 0x40, 0x00, 0x00, 0x92, 0x40, 0x00, 0x00, 0x9E, 0x40, 0x00, 0x00, 0x9F, 0x40, 0x00, 0x00, 0xCC, +/* 00004EB0 */ 0x40, 0x00, 0x00, 0x12, 0x41, 0x00, 0x00, 0x39, 0x41, 0x00, 0x00, 0x6C, 0x41, 0x00, 0x00, 0x81, +/* 00004EC0 */ 0x41, 0x00, 0x00, 0xD1, 0x41, 0x00, 0x00, 0x1F, 0x42, 0x00, 0x00, 0x70, 0x42, 0x00, 0x00, 0x7E, +/* 00004ED0 */ 0x42, 0x00, 0x00, 0x7F, 0x42, 0x00, 0x00, 0xC5, 0x42, 0x00, 0x00, 0xCF, 0x42, 0x00, 0x00, 0xD0, +/* 00004EE0 */ 0x42, 0x00, 0x00, 0xF5, 0x42, 0x00, 0x00, 0x0C, 0x43, 0x00, 0x00, 0x13, 0x43, 0x00, 0x00, 0x14, +/* 00004EF0 */ 0x43, 0x00, 0x00, 0x2E, 0x43, 0x00, 0x00, 0x44, 0x43, 0x00, 0x00, 0x62, 0x43, 0x00, 0x00, 0x8E, +/* 00004F00 */ 0x43, 0x00, 0x00, 0x9C, 0x43, 0x00, 0x00, 0xD8, 0x43, 0x00, 0x00, 0xE3, 0x43, 0x00, 0x00, 0xE4, +/* 00004F10 */ 0x43, 0x00, 0x00, 0xFA, 0x43, 0x00, 0x00, 0x36, 0x44, 0x00, 0x00, 0x41, 0x44, 0x00, 0x00, 0x42, +/* 00004F20 */ 0x44, 0x00, 0x00, 0x58, 0x44, 0x00, 0x00, 0x8E, 0x44, 0x00, 0x00, 0x99, 0x44, 0x00, 0x00, 0x9A, +/* 00004F30 */ 0x44, 0x00, 0x00, 0xB8, 0x44, 0x00, 0x00, 0xF5, 0x44, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x01, +/* 00004F40 */ 0x45, 0x00, 0x00, 0x18, 0x45, 0x00, 0x00, 0x3E, 0x45, 0x00, 0x00, 0x5F, 0x45, 0x00, 0x00, 0x79, +/* 00004F50 */ 0x45, 0x00, 0x00, 0xB5, 0x45, 0x00, 0x00, 0xD4, 0x45, 0x00, 0x00, 0xE2, 0x45, 0x00, 0x00, 0xE3, +/* 00004F60 */ 0x45, 0x00, 0x00, 0x13, 0x46, 0x00, 0x00, 0x31, 0x46, 0x00, 0x00, 0x4D, 0x46, 0x00, 0x00, 0x62, +/* 00004F70 */ 0x46, 0x00, 0x00, 0x7E, 0x46, 0x00, 0x00, 0x8C, 0x46, 0x00, 0x00, 0x97, 0x46, 0x00, 0x00, 0x98, +/* 00004F80 */ 0x46, 0x00, 0x00, 0xAE, 0x46, 0x00, 0x00, 0xDD, 0x46, 0x00, 0x00, 0xF9, 0x46, 0x00, 0x00, 0x13, +/* 00004F90 */ 0x47, 0x00, 0x00, 0x21, 0x47, 0x00, 0x00, 0x22, 0x47, 0x00, 0x00, 0x4C, 0x47, 0x00, 0x00, 0x76, +/* 00004FA0 */ 0x47, 0x00, 0x00, 0x80, 0x47, 0x00, 0x00, 0x88, 0x47, 0x00, 0x00, 0x89, 0x47, 0x00, 0x00, 0xB0, +/* 00004FB0 */ 0x47, 0x00, 0x00, 0xF4, 0x47, 0x00, 0x00, 0x1B, 0x48, 0x00, 0x00, 0x1C, 0x48, 0x00, 0x00, 0x3F, +/* 00004FC0 */ 0x48, 0x00, 0x00, 0x64, 0x48, 0x00, 0x00, 0x9E, 0x48, 0x00, 0x00, 0xAC, 0x48, 0x00, 0x00, 0xAD, +/* 00004FD0 */ 0x48, 0x00, 0x00, 0xD1, 0x48, 0x00, 0x00, 0x03, 0x49, 0x00, 0x00, 0x11, 0x49, 0x00, 0x00, 0x12, +/* 00004FE0 */ 0x49, 0x00, 0x00, 0x36, 0x49, 0x00, 0x00, 0x68, 0x49, 0x00, 0x00, 0x76, 0x49, 0x00, 0x00, 0x77, +/* 00004FF0 */ 0x49, 0x00, 0x00, 0xC6, 0x49, 0x00, 0x00, 0x3F, 0x4A, 0x00, 0x00, 0x4D, 0x4A, 0x00, 0x00, 0x4E, +/* 00005000 */ 0x4A, 0x00, 0x00, 0x68, 0x4A, 0x00, 0x00, 0x72, 0x4A, 0x00, 0x00, 0x73, 0x4A, 0x00, 0x00, 0x8C, +/* 00005010 */ 0x4A, 0x00, 0x00, 0x92, 0x4A, 0x00, 0x00, 0x93, 0x4A, 0x00, 0x00, 0x9B, 0x4A, 0x00, 0x00, 0xF6, +/* 00005020 */ 0x4A, 0x00, 0x00, 0x47, 0x4B, 0x00, 0x00, 0x7A, 0x4B, 0x00, 0x00, 0x81, 0x4B, 0x00, 0x00, 0xDA, +/* 00005030 */ 0x4B, 0x00, 0x00, 0x28, 0x4C, 0x00, 0x00, 0x2F, 0x4C, 0x00, 0x00, 0x58, 0x4C, 0x00, 0x00, 0x5F, +/* 00005040 */ 0x4C, 0x00, 0x00, 0x9B, 0x4C, 0x00, 0x00, 0xEE, 0x4C, 0x00, 0x00, 0x3B, 0x4D, 0x00, 0x00, 0x88, +/* 00005050 */ 0x4D, 0x00, 0x00, 0xE2, 0x4D, 0x00, 0x00, 0xFB, 0x4D, 0x00, 0x00, 0x03, 0x4E, 0x00, 0x00, 0x5A, +/* 00005060 */ 0x4E, 0x00, 0x00, 0x81, 0x4E, 0x00, 0x00, 0xA4, 0x4E, 0x00, 0x00, 0xD2, 0x4E, 0x00, 0x00, 0x1A, +/* 00005070 */ 0x4F, 0x00, 0x00, 0x87, 0x4F, 0x00, 0x00, 0x95, 0x4F, 0x00, 0x00, 0xB8, 0x4F, 0x00, 0x00, 0xC2, +/* 00005080 */ 0x4F, 0x00, 0x00, 0xC3, 0x4F, 0x00, 0x00, 0xDC, 0x4F, 0x00, 0x00, 0xE3, 0x4F, 0x00, 0x00, 0xE4, +/* 00005090 */ 0x4F, 0x00, 0x00, 0xFE, 0x4F, 0x00, 0x00, 0x28, 0x50, 0x00, 0x00, 0x52, 0x50, 0x00, 0x00, 0x58, +/* 000050A0 */ 0x50, 0x00, 0x00, 0x59, 0x50, 0x00, 0x00, 0x61, 0x50, 0x00, 0x00, 0xCC, 0x50, 0x00, 0x00, 0xFC, +/* 000050B0 */ 0x50, 0x00, 0x00, 0x03, 0x51, 0x00, 0x00, 0x3C, 0x51, 0x00, 0x00, 0x44, 0x51, 0x00, 0x00, 0x6C, +/* 000050C0 */ 0x51, 0x00, 0x00, 0xB1, 0x51, 0x00, 0x00, 0x15, 0x52, 0x00, 0x00, 0x95, 0x52, 0x00, 0x00, 0x96, +/* 000050D0 */ 0x52, 0x00, 0x00, 0x08, 0x53, 0x00, 0x00, 0x39, 0x53, 0x00, 0x00, 0x88, 0x53, 0x00, 0x00, 0xDA, +/* 000050E0 */ 0x53, 0x00, 0x00, 0x2E, 0x54, 0x00, 0x00, 0x66, 0x54, 0x00, 0x00, 0xB8, 0x54, 0x00, 0x00, 0x0A, +/* 000050F0 */ 0x55, 0x00, 0x00, 0x5F, 0x55, 0x00, 0x00, 0xCB, 0x55, 0x00, 0x00, 0x21, 0x56, 0x00, 0x00, 0x22, +/* 00005100 */ 0x56, 0x00, 0x00, 0x41, 0x56, 0x00, 0x00, 0x60, 0x56, 0x00, 0x00, 0x92, 0x56, 0x00, 0x00, 0x93, +/* 00005110 */ 0x56, 0x00, 0x00, 0x0A, 0x57, 0x00, 0x00, 0x77, 0x57, 0x00, 0x00, 0xCA, 0x57, 0x00, 0x00, 0x0D, +/* 00005120 */ 0x58, 0x00, 0x00, 0x0E, 0x58, 0x00, 0x00, 0x8B, 0x58, 0x00, 0x00, 0x1F, 0x59, 0x00, 0x00, 0xA2, +/* 00005130 */ 0x59, 0x00, 0x00, 0x25, 0x5A, 0x00, 0x00, 0x98, 0x5A, 0x00, 0x00, 0x99, 0x5A, 0x00, 0x00, 0x03, +/* 00005140 */ 0x5B, 0x00, 0x00, 0x7C, 0x5B, 0x00, 0x00, 0x7D, 0x5B, 0x00, 0x00, 0xE0, 0x5B, 0x00, 0x00, 0x6F, +/* 00005150 */ 0x5C, 0x00, 0x00, 0x18, 0x5D, 0x00, 0x00, 0xAC, 0x5D, 0x00, 0x00, 0x43, 0x5E, 0x00, 0x00, 0xE7, +/* 00005160 */ 0x5E, 0x00, 0x00, 0xFB, 0x5E, 0x00, 0x00, 0xFC, 0x5E, 0x00, 0x00, 0x2C, 0x5F, 0x00, 0x00, 0x98, +/* 00005170 */ 0x5F, 0x00, 0x00, 0x08, 0x60, 0x00, 0x00, 0x78, 0x60, 0x00, 0x00, 0xEA, 0x60, 0x00, 0x00, 0x5E, +/* 00005180 */ 0x61, 0x00, 0x00, 0xD2, 0x61, 0x00, 0x00, 0x1C, 0x62, 0x00, 0x00, 0x1D, 0x62, 0x00, 0x00, 0x8A, +/* 00005190 */ 0x62, 0x00, 0x00, 0x8B, 0x62, 0x00, 0x00, 0xD7, 0x62, 0x00, 0x00, 0x4B, 0x63, 0x00, 0x00, 0xDD, +/* 000051A0 */ 0x63, 0x00, 0x00, 0x6F, 0x64, 0x00, 0x00, 0x70, 0x64, 0x00, 0x00, 0xA4, 0x64, 0x00, 0x00, 0xC8, +/* 000051B0 */ 0x64, 0x00, 0x00, 0x04, 0x65, 0x00, 0x00, 0x1E, 0x65, 0x00, 0x00, 0x3D, 0x65, 0x00, 0x00, 0x4B, +/* 000051C0 */ 0x65, 0x00, 0x00, 0x4C, 0x65, 0x00, 0x00, 0x85, 0x65, 0x00, 0x00, 0x9F, 0x65, 0x00, 0x00, 0xBC, +/* 000051D0 */ 0x65, 0x00, 0x00, 0xCA, 0x65, 0x00, 0x00, 0xCB, 0x65, 0x00, 0x00, 0xEF, 0x65, 0x00, 0x00, 0x14, +/* 000051E0 */ 0x66, 0x00, 0x00, 0x35, 0x66, 0x00, 0x00, 0x51, 0x66, 0x00, 0x00, 0x78, 0x66, 0x00, 0x00, 0xA4, +/* 000051F0 */ 0x66, 0x00, 0x00, 0xB2, 0x66, 0x00, 0x00, 0xB3, 0x66, 0x00, 0x00, 0xCF, 0x66, 0x00, 0x00, 0xF6, +/* 00005200 */ 0x66, 0x00, 0x00, 0x22, 0x67, 0x00, 0x00, 0x30, 0x67, 0x00, 0x00, 0x31, 0x67, 0x00, 0x00, 0x4D, +/* 00005210 */ 0x67, 0x00, 0x00, 0x76, 0x67, 0x00, 0x00, 0x84, 0x67, 0x00, 0x00, 0x85, 0x67, 0x00, 0x00, 0xA1, +/* 00005220 */ 0x67, 0x00, 0x00, 0xCC, 0x67, 0x00, 0x00, 0xCD, 0x67, 0x00, 0x00, 0x17, 0x68, 0x00, 0x00, 0x56, +/* 00005230 */ 0x68, 0x00, 0x00, 0x98, 0x68, 0x00, 0x00, 0xCD, 0x68, 0x00, 0x00, 0xEF, 0x68, 0x00, 0x00, 0x05, +/* 00005240 */ 0x69, 0x00, 0x00, 0x06, 0x69, 0x00, 0x00, 0x21, 0x69, 0x00, 0x00, 0x87, 0x69, 0x00, 0x00, 0xF6, +/* 00005250 */ 0x69, 0x00, 0x00, 0x3A, 0x6A, 0x00, 0x00, 0x90, 0x6A, 0x00, 0x00, 0xA6, 0x6A, 0x00, 0x00, 0xA7, +/* 00005260 */ 0x6A, 0x00, 0x00, 0xCC, 0x6A, 0x00, 0x00, 0x3E, 0x6B, 0x00, 0x00, 0x9F, 0x6B, 0x00, 0x00, 0xFA, +/* 00005270 */ 0x6B, 0x00, 0x00, 0x10, 0x6C, 0x00, 0x00, 0x11, 0x6C, 0x00, 0x00, 0x6F, 0x6C, 0x00, 0x00, 0x8A, +/* 00005280 */ 0x6C, 0x00, 0x00, 0x9C, 0x6C, 0x00, 0x00, 0xAA, 0x6C, 0x00, 0x00, 0xAB, 0x6C, 0x00, 0x00, 0xDD, +/* 00005290 */ 0x6C, 0x00, 0x00, 0xDE, 0x6C, 0x00, 0x00, 0xF6, 0x6C, 0x00, 0x00, 0x01, 0x6D, 0x00, 0x00, 0x0B, +/* 000052A0 */ 0x6D, 0x00, 0x00, 0x0C, 0x6D, 0x00, 0x00, 0x43, 0x6D, 0x00, 0x00, 0x6B, 0x6D, 0x00, 0x00, 0x6C, +/* 000052B0 */ 0x6D, 0x00, 0x00, 0x8D, 0x6D, 0x00, 0x00, 0xB5, 0x6D, 0x00, 0x00, 0xBF, 0x6D, 0x00, 0x00, 0xC0, +/* 000052C0 */ 0x6D, 0x00, 0x00, 0x0C, 0x6E, 0x00, 0x00, 0x12, 0x6E, 0x00, 0x00, 0x13, 0x6E, 0x00, 0x00, 0x1B, +/* 000052D0 */ 0x6E, 0x00, 0x00, 0x76, 0x6E, 0x00, 0x00, 0xA5, 0x6E, 0x00, 0x00, 0xAC, 0x6E, 0x00, 0x00, 0xFF, +/* 000052E0 */ 0x6E, 0x00, 0x00, 0x5C, 0x6F, 0x00, 0x00, 0xB7, 0x6F, 0x00, 0x00, 0xE1, 0x6F, 0x00, 0x00, 0xE8, +/* 000052F0 */ 0x6F, 0x00, 0x00, 0x1C, 0x70, 0x00, 0x00, 0x23, 0x70, 0x00, 0x00, 0x55, 0x70, 0x00, 0x00, 0x6F, +/* 00005300 */ 0x70, 0x00, 0x00, 0x77, 0x70, 0x00, 0x00, 0xB6, 0x70, 0x00, 0x00, 0xE3, 0x70, 0x00, 0x00, 0x02, +/* 00005310 */ 0x71, 0x00, 0x00, 0x1C, 0x71, 0x00, 0x00, 0x26, 0x71, 0x00, 0x00, 0x27, 0x71, 0x00, 0x00, 0x4B, +/* 00005320 */ 0x71, 0x00, 0x00, 0x6A, 0x71, 0x00, 0x00, 0xA6, 0x71, 0x00, 0x00, 0xDD, 0x71, 0x00, 0x00, 0xDE, +/* 00005330 */ 0x71, 0x00, 0x00, 0x1B, 0x72, 0x00, 0x00, 0x39, 0x72, 0x00, 0x00, 0x47, 0x72, 0x00, 0x00, 0x51, +/* 00005340 */ 0x72, 0x00, 0x00, 0x52, 0x72, 0x00, 0x00, 0x73, 0x72, 0x00, 0x00, 0xB7, 0x72, 0x00, 0x00, 0x3F, +/* 00005350 */ 0x73, 0x00, 0x00, 0x7A, 0x73, 0x00, 0x00, 0x7B, 0x73, 0x00, 0x00, 0xBD, 0x73, 0x00, 0x00, 0xC7, +/* 00005360 */ 0x73, 0x00, 0x00, 0xC8, 0x73, 0x00, 0x00, 0xDD, 0x73, 0x00, 0x00, 0xE4, 0x73, 0x00, 0x00, 0xE5, +/* 00005370 */ 0x73, 0x00, 0x00, 0xED, 0x73, 0x00, 0x00, 0x46, 0x74, 0x00, 0x00, 0x93, 0x74, 0x00, 0x00, 0x9A, +/* 00005380 */ 0x74, 0x00, 0x00, 0xC6, 0x74, 0x00, 0x00, 0xCD, 0x74, 0x00, 0x00, 0x23, 0x75, 0x00, 0x00, 0x2B, +/* 00005390 */ 0x75, 0x00, 0x00, 0x63, 0x75, 0x00, 0x00, 0x91, 0x75, 0x00, 0x00, 0xA8, 0x75, 0x00, 0x00, 0xB2, +/* 000053A0 */ 0x75, 0x00, 0x00, 0xB3, 0x75, 0x00, 0x00, 0xCC, 0x75, 0x00, 0x00, 0x24, 0x76, 0x00, 0x00, 0x55, +/* 000053B0 */ 0x76, 0x00, 0x00, 0x70, 0x76, 0x00, 0x00, 0x71, 0x76, 0x00, 0x00, 0x8B, 0x76, 0x00, 0x00, 0xB8, +/* 000053C0 */ 0x76, 0x00, 0x00, 0xD3, 0x76, 0x00, 0x00, 0xF9, 0x76, 0x00, 0x00, 0x5E, 0x77, 0x00, 0x00, 0x9E, +/* 000053D0 */ 0x77, 0x00, 0x00, 0xB0, 0x77, 0x00, 0x00, 0xB1, 0x77, 0x00, 0x00, 0xE8, 0x77, 0x00, 0x00, 0x24, +/* 000053E0 */ 0x78, 0x00, 0x00, 0x60, 0x78, 0x00, 0x00, 0x72, 0x78, 0x00, 0x00, 0x73, 0x78, 0x00, 0x00, 0xC0, +/* 000053F0 */ 0x78, 0x00, 0x00, 0xF6, 0x78, 0x00, 0x00, 0x52, 0x79, 0x00, 0x00, 0x8E, 0x79, 0x00, 0x00, 0xDA, +/* 00005400 */ 0x79, 0x00, 0x00, 0x5C, 0x7A, 0x00, 0x00, 0x6E, 0x7A, 0x00, 0x00, 0x7C, 0x7A, 0x00, 0x00, 0x7D, +/* 00005410 */ 0x7A, 0x00, 0x00, 0x91, 0x7A, 0x00, 0x00, 0x9B, 0x7A, 0x00, 0x00, 0x9C, 0x7A, 0x00, 0x00, 0xB1, +/* 00005420 */ 0x7A, 0x00, 0x00, 0xB8, 0x7A, 0x00, 0x00, 0xB9, 0x7A, 0x00, 0x00, 0xC1, 0x7A, 0x00, 0x00, 0x2C, +/* 00005430 */ 0x7B, 0x00, 0x00, 0x33, 0x7B, 0x00, 0x00, 0x5F, 0x7B, 0x00, 0x00, 0x66, 0x7B, 0x00, 0x00, 0xD7, +/* 00005440 */ 0x7B, 0x00, 0x00, 0x08, 0x7C, 0x00, 0x00, 0x10, 0x7C, 0x00, 0x00, 0x64, 0x7C, 0x00, 0x00, 0x7F, +/* 00005450 */ 0x7C, 0x00, 0x00, 0x92, 0x7C, 0x00, 0x00, 0xCA, 0x7C, 0x00, 0x00, 0x0C, 0x7D, 0x00, 0x00, 0x68, +/* 00005460 */ 0x7D, 0x00, 0x00, 0xDE, 0x7D, 0x00, 0x00, 0xEC, 0x7D, 0x00, 0x00, 0xF8, 0x7D, 0x00, 0x00, 0xF9, +/* 00005470 */ 0x7D, 0x00, 0x00, 0x10, 0x7E, 0x00, 0x00, 0x17, 0x7E, 0x00, 0x00, 0x18, 0x7E, 0x00, 0x00, 0x54, +/* 00005480 */ 0x7E, 0x00, 0x00, 0x55, 0x7E, 0x00, 0x00, 0x5D, 0x7E, 0x00, 0x00, 0xAC, 0x7E, 0x00, 0x00, 0xB3, +/* 00005490 */ 0x7E, 0x00, 0x00, 0x0C, 0x7F, 0x00, 0x00, 0x38, 0x7F, 0x00, 0x00, 0x3F, 0x7F, 0x00, 0x00, 0x67, +/* 000054A0 */ 0x7F, 0x00, 0x00, 0x6E, 0x7F, 0x00, 0x00, 0xF2, 0x7F, 0x00, 0x00, 0x60, 0x80, 0x00, 0x00, 0xA5, +/* 000054B0 */ 0x80, 0x00, 0x00, 0xEA, 0x80, 0x00, 0x00, 0xF2, 0x80, 0x00, 0x00, 0x52, 0x81, 0x00, 0x00, 0xA3, +/* 000054C0 */ 0x81, 0x00, 0x00, 0xFF, 0x81, 0x00, 0x00, 0x3B, 0x82, 0x00, 0x00, 0xA0, 0x82, 0x00, 0x00, 0xCD, +/* 000054D0 */ 0x82, 0x00, 0x00, 0xFB, 0x82, 0x00, 0x00, 0x29, 0x83, 0x00, 0x00, 0x2A, 0x83, 0x00, 0x00, 0x5F, +/* 000054E0 */ 0x83, 0x00, 0x00, 0x94, 0x83, 0x00, 0x00, 0xCC, 0x83, 0x00, 0x00, 0x1E, 0x84, 0x00, 0x00, 0x7A, +/* 000054F0 */ 0x84, 0x00, 0x00, 0xE8, 0x84, 0x00, 0x00, 0x5A, 0x85, 0x00, 0x00, 0x8F, 0x85, 0x00, 0x00, 0xC4, +/* 00005500 */ 0x85, 0x00, 0x00, 0xCE, 0x85, 0x00, 0x00, 0xD5, 0x85, 0x00, 0x00, 0xD6, 0x85, 0x00, 0x00, 0xDE, +/* 00005510 */ 0x85, 0x00, 0x00, 0x35, 0x86, 0x00, 0x00, 0x69, 0x86, 0x00, 0x00, 0x70, 0x86, 0x00, 0x00, 0x96, +/* 00005520 */ 0x86, 0x00, 0x00, 0x9D, 0x86, 0x00, 0x00, 0x0E, 0x87, 0x00, 0x00, 0x3F, 0x87, 0x00, 0x00, 0x5E, +/* 00005530 */ 0x87, 0x00, 0x00, 0x66, 0x87, 0x00, 0x00, 0xBD, 0x87, 0x00, 0x00, 0xEB, 0x87, 0x00, 0x00, 0x04, +/* 00005540 */ 0x88, 0x00, 0x00, 0x78, 0x88, 0x00, 0x00, 0xB0, 0x88, 0x00, 0x00, 0xFB, 0x88, 0x00, 0x00, 0x46, +/* 00005550 */ 0x89, 0x00, 0x00, 0x47, 0x89, 0x00, 0x00, 0x83, 0x89, 0x00, 0x00, 0xF3, 0x89, 0x00, 0x00, 0xFD, +/* 00005560 */ 0x89, 0x00, 0x00, 0xFE, 0x89, 0x00, 0x00, 0x4B, 0x8A, 0x00, 0x00, 0xA4, 0x8A, 0x00, 0x00, 0xDB, +/* 00005570 */ 0x8A, 0x00, 0x00, 0xF8, 0x8A, 0x00, 0x00, 0x19, 0x8B, 0x00, 0x00, 0x38, 0x8B, 0x00, 0x00, 0x44, +/* 00005580 */ 0x8B, 0x00, 0x00, 0x45, 0x8B, 0x00, 0x00, 0x66, 0x8B, 0x00, 0x00, 0x6D, 0x8B, 0x00, 0x00, 0x6E, +/* 00005590 */ 0x8B, 0x00, 0x00, 0x8D, 0x8B, 0x00, 0x00, 0x08, 0x8C, 0x00, 0x00, 0x3C, 0x8C, 0x00, 0x00, 0x48, +/* 000055A0 */ 0x8C, 0x00, 0x00, 0x80, 0x8C, 0x00, 0x00, 0xA8, 0x8C, 0x00, 0x00, 0xC4, 0x8C, 0x00, 0x00, 0xE3, +/* 000055B0 */ 0x8C, 0x00, 0x00, 0x02, 0x8D, 0x00, 0x00, 0x0E, 0x8D, 0x00, 0x00, 0x14, 0x8D, 0x00, 0x00, 0x15, +/* 000055C0 */ 0x8D, 0x00, 0x00, 0x1D, 0x8D, 0x00, 0x00, 0x94, 0x8D, 0x00, 0x00, 0x9B, 0x8D, 0x00, 0x00, 0x14, +/* 000055D0 */ 0x8E, 0x00, 0x00, 0x90, 0x8E, 0x00, 0x00, 0x08, 0x8F, 0x00, 0x00, 0x69, 0x8F, 0x00, 0x00, 0x71, +/* 000055E0 */ 0x8F, 0x00, 0x00, 0xC1, 0x8F, 0x00, 0x00, 0xE6, 0x8F, 0x00, 0x00, 0x11, 0x90, 0x00, 0x00, 0x53, +/* 000055F0 */ 0x90, 0x00, 0x00, 0xC6, 0x90, 0x00, 0x00, 0xDE, 0x90, 0x00, 0x00, 0xEC, 0x90, 0x00, 0x00, 0xED, +/* 00005600 */ 0x90, 0x00, 0x00, 0x2A, 0x91, 0x00, 0x00, 0x5F, 0x91, 0x00, 0x00, 0x6D, 0x91, 0x00, 0x00, 0x79, +/* 00005610 */ 0x91, 0x00, 0x00, 0x7A, 0x91, 0x00, 0x00, 0xC0, 0x91, 0x00, 0x00, 0xC7, 0x91, 0x00, 0x00, 0xC8, +/* 00005620 */ 0x91, 0x00, 0x00, 0xFD, 0x91, 0x00, 0x00, 0x21, 0x92, 0x00, 0x00, 0x5D, 0x92, 0x00, 0x00, 0x71, +/* 00005630 */ 0x92, 0x00, 0x00, 0x7B, 0x92, 0x00, 0x00, 0x7C, 0x92, 0x00, 0x00, 0xC7, 0x92, 0x00, 0x00, 0x0D, +/* 00005640 */ 0x93, 0x00, 0x00, 0x64, 0x93, 0x00, 0x00, 0x65, 0x93, 0x00, 0x00, 0xD4, 0x93, 0x00, 0x00, 0x3E, +/* 00005650 */ 0x94, 0x00, 0x00, 0xA9, 0x94, 0x00, 0x00, 0x1D, 0x95, 0x00, 0x00, 0x88, 0x95, 0x00, 0x00, 0x03, +/* 00005660 */ 0x96, 0x00, 0x00, 0x71, 0x96, 0x00, 0x00, 0x9E, 0x96, 0x00, 0x00, 0xFE, 0x96, 0x00, 0x00, 0x67, +/* 00005670 */ 0x97, 0x00, 0x00, 0x68, 0x97, 0x00, 0x00, 0x8C, 0x97, 0x00, 0x00, 0xF9, 0x97, 0x00, 0x00, 0x4E, +/* 00005680 */ 0x98, 0x00, 0x00, 0x92, 0x98, 0x00, 0x00, 0xFA, 0x98, 0x00, 0x00, 0xFB, 0x98, 0x00, 0x00, 0x72, +/* 00005690 */ 0x99, 0x00, 0x00, 0x9A, 0x99, 0x00, 0x00, 0xE5, 0x99, 0x00, 0x00, 0x55, 0x9A, 0x00, 0x00, 0xAE, +/* 000056A0 */ 0x9A, 0x00, 0x00, 0xDE, 0x9A, 0x00, 0x00, 0x05, 0x9B, 0x00, 0x00, 0x5A, 0x9B, 0x00, 0x00, 0x5B, +/* 000056B0 */ 0x9B, 0x00, 0x00, 0xDD, 0x9B, 0x00, 0x00, 0x38, 0x9C, 0x00, 0x00, 0x39, 0x9C, 0x00, 0x00, 0xA8, +/* 000056C0 */ 0x9C, 0x00, 0x00, 0xA9, 0x9C, 0x00, 0x00, 0xDA, 0x9C, 0x00, 0x00, 0xDB, 0x9C, 0x00, 0x00, 0xF8, +/* 000056D0 */ 0x9C, 0x00, 0x00, 0x03, 0x9D, 0x00, 0x00, 0x04, 0x9D, 0x00, 0x00, 0x29, 0x9D, 0x00, 0x00, 0x77, +/* 000056E0 */ 0x9D, 0x00, 0x00, 0x1E, 0x9E, 0x00, 0x00, 0x55, 0x9E, 0x00, 0x00, 0xAB, 0x9E, 0x00, 0x00, 0xB9, +/* 000056F0 */ 0x9E, 0x00, 0x00, 0xBA, 0x9E, 0x00, 0x00, 0xE4, 0x9E, 0x00, 0x00, 0x0E, 0x9F, 0x00, 0x00, 0x0F, +/* 00005700 */ 0x9F, 0x00, 0x00, 0x87, 0x9F, 0x00, 0x00, 0xE2, 0x9F, 0x00, 0x00, 0xFF, 0x9F, 0x00, 0x00, 0x41, +/* 00005710 */ 0xA0, 0x00, 0x00, 0x7E, 0xA0, 0x00, 0x00, 0xB8, 0xA0, 0x00, 0x00, 0x0F, 0xA1, 0x00, 0x00, 0x21, +/* 00005720 */ 0xA1, 0x00, 0x00, 0x22, 0xA1, 0x00, 0x00, 0x59, 0xA1, 0x00, 0x00, 0x6E, 0xA1, 0x00, 0x00, 0x98, +/* 00005730 */ 0xA1, 0x00, 0x00, 0xDB, 0xA1, 0x00, 0x00, 0xE9, 0xA1, 0x00, 0x00, 0xEA, 0xA1, 0x00, 0x00, 0x60, +/* 00005740 */ 0xA2, 0x00, 0x00, 0x9D, 0xA2, 0x00, 0x00, 0x9E, 0xA2, 0x00, 0x00, 0x00, 0xA3, 0x00, 0x00, 0x25, +/* 00005750 */ 0xA3, 0x00, 0x00, 0x39, 0xA3, 0x00, 0x00, 0x43, 0xA3, 0x00, 0x00, 0x44, 0xA3, 0x00, 0x00, 0x6A, +/* 00005760 */ 0xA3, 0x00, 0x00, 0x6B, 0xA3, 0x00, 0x00, 0xDD, 0xA3, 0x00, 0x00, 0x2D, 0xA4, 0x00, 0x00, 0x87, +/* 00005770 */ 0xA4, 0x00, 0x00, 0x88, 0xA4, 0x00, 0x00, 0xBB, 0xA4, 0x00, 0x00, 0xFE, 0xA4, 0x00, 0x00, 0x2C, +/* 00005780 */ 0xA5, 0x00, 0x00, 0x57, 0xA5, 0x00, 0x00, 0x99, 0xA5, 0x00, 0x00, 0xA7, 0xA5, 0x00, 0x00, 0xA8, +/* 00005790 */ 0xA5, 0x00, 0x00, 0xE8, 0xA5, 0x00, 0x00, 0xE9, 0xA5, 0x00, 0x00, 0x0E, 0xA6, 0x00, 0x00, 0x51, +/* 000057A0 */ 0xA6, 0x00, 0x00, 0x84, 0xA6, 0x00, 0x00, 0xA1, 0xA6, 0x00, 0x00, 0xAD, 0xA6, 0x00, 0x00, 0xAE, +/* 000057B0 */ 0xA6, 0x00, 0x00, 0x15, 0xA7, 0x00, 0x00, 0x41, 0xA7, 0x00, 0x00, 0x9B, 0xA7, 0x00, 0x00, 0xA9, +/* 000057C0 */ 0xA7, 0x00, 0x00, 0xAA, 0xA7, 0x00, 0x00, 0xEB, 0xA7, 0x00, 0x00, 0x3E, 0xA8, 0x00, 0x00, 0x98, +/* 000057D0 */ 0xA8, 0x00, 0x00, 0xA6, 0xA8, 0x00, 0x00, 0xA7, 0xA8, 0x00, 0x00, 0x23, 0xA9, 0x00, 0x00, 0x2F, +/* 000057E0 */ 0xA9, 0x00, 0x00, 0x30, 0xA9, 0x00, 0x00, 0xC6, 0xA9, 0x00, 0x00, 0x39, 0xAA, 0x00, 0x00, 0x45, +/* 000057F0 */ 0xAA, 0x00, 0x00, 0x80, 0xAA, 0x00, 0x00, 0xA7, 0xAA, 0x00, 0x00, 0xC3, 0xAA, 0x00, 0x00, 0xE2, +/* 00005800 */ 0xAA, 0x00, 0x00, 0x02, 0xAB, 0x00, 0x00, 0x0E, 0xAB, 0x00, 0x00, 0x0F, 0xAB, 0x00, 0x00, 0x41, +/* 00005810 */ 0xAB, 0x00, 0x00, 0x67, 0xAB, 0x00, 0x00, 0x84, 0xAB, 0x00, 0x00, 0xA3, 0xAB, 0x00, 0x00, 0xC3, +/* 00005820 */ 0xAB, 0x00, 0x00, 0xCF, 0xAB, 0x00, 0x00, 0xD0, 0xAB, 0x00, 0x00, 0x0D, 0xAC, 0x00, 0x00, 0x2A, +/* 00005830 */ 0xAC, 0x00, 0x00, 0x46, 0xAC, 0x00, 0x00, 0x65, 0xAC, 0x00, 0x00, 0x84, 0xAC, 0x00, 0x00, 0x90, +/* 00005840 */ 0xAC, 0x00, 0x00, 0xD1, 0xAC, 0x00, 0x00, 0x3F, 0xAD, 0x00, 0x00, 0x6F, 0xAD, 0x00, 0x00, 0xD5, +/* 00005850 */ 0xAD, 0x00, 0x00, 0xE7, 0xAD, 0x00, 0x00, 0x2C, 0xAE, 0x00, 0x00, 0x83, 0xAE, 0x00, 0x00, 0xE9, +/* 00005860 */ 0xAE, 0x00, 0x00, 0xFB, 0xAE, 0x00, 0x00, 0xFC, 0xAE, 0x00, 0x00, 0x1E, 0xAF, 0x00, 0x00, 0x3C, +/* 00005870 */ 0xAF, 0x00, 0x00, 0x59, 0xAF, 0x00, 0x00, 0x7C, 0xAF, 0x00, 0x00, 0xA5, 0xAF, 0x00, 0x00, 0xC6, +/* 00005880 */ 0xAF, 0x00, 0x00, 0xE5, 0xAF, 0x00, 0x00, 0x06, 0xB0, 0x00, 0x00, 0x19, 0xB0, 0x00, 0x00, 0x1A, +/* 00005890 */ 0xB0, 0x00, 0x00, 0x5F, 0xB0, 0x00, 0x00, 0x6F, 0xB0, 0x00, 0x00, 0x8B, 0xB0, 0x00, 0x00, 0xAA, +/* 000058A0 */ 0xB0, 0x00, 0x00, 0xC9, 0xB0, 0x00, 0x00, 0xD5, 0xB0, 0x00, 0x00, 0xD6, 0xB0, 0x00, 0x00, 0x4F, +/* 000058B0 */ 0xB1, 0x00, 0x00, 0x9A, 0xB1, 0x00, 0x00, 0xC6, 0xB1, 0x00, 0x00, 0x20, 0xB2, 0x00, 0x00, 0x2E, +/* 000058C0 */ 0xB2, 0x00, 0x00, 0x2F, 0xB2, 0x00, 0x00, 0x70, 0xB2, 0x00, 0x00, 0xC3, 0xB2, 0x00, 0x00, 0x1D, +/* 000058D0 */ 0xB3, 0x00, 0x00, 0x2B, 0xB3, 0x00, 0x00, 0x2C, 0xB3, 0x00, 0x00, 0x5A, 0xB3, 0x00, 0x00, 0x66, +/* 000058E0 */ 0xB3, 0x00, 0x00, 0x9F, 0xB3, 0x00, 0x00, 0xBC, 0xB3, 0x00, 0x00, 0xDB, 0xB3, 0x00, 0x00, 0xFA, +/* 000058F0 */ 0xB3, 0x00, 0x00, 0x06, 0xB4, 0x00, 0x00, 0x07, 0xB4, 0x00, 0x00, 0x20, 0xB4, 0x00, 0x00, 0x2A, +/* 00005900 */ 0xB4, 0x00, 0x00, 0x2B, 0xB4, 0x00, 0x00, 0x65, 0xB4, 0x00, 0x00, 0x8B, 0xB4, 0x00, 0x00, 0xC7, +/* 00005910 */ 0xB4, 0x00, 0x00, 0xDB, 0xB4, 0x00, 0x00, 0xE5, 0xB4, 0x00, 0x00, 0xE6, 0xB4, 0x00, 0x00, 0x2F, +/* 00005920 */ 0xB5, 0x00, 0x00, 0x75, 0xB5, 0x00, 0x00, 0xCC, 0xB5, 0x00, 0x00, 0xCD, 0xB5, 0x00, 0x00, 0xF1, +/* 00005930 */ 0xB5, 0x00, 0x00, 0x64, 0xB6, 0x00, 0x00, 0x65, 0xB6, 0x00, 0x00, 0xC7, 0xB6, 0x00, 0x00, 0xE9, +/* 00005940 */ 0xB6, 0x00, 0x00, 0x10, 0xB7, 0x00, 0x00, 0x11, 0xB7, 0x00, 0x00, 0x81, 0xB7, 0x00, 0x00, 0x9F, +/* 00005950 */ 0xB7, 0x00, 0x00, 0xE2, 0xB7, 0x00, 0x00, 0x18, 0xB8, 0x00, 0x00, 0x19, 0xB8, 0x00, 0x00, 0x74, +/* 00005960 */ 0xB8, 0x00, 0x00, 0xC5, 0xB8, 0x00, 0x00, 0x02, 0xB9, 0x00, 0x00, 0x42, 0xB9, 0x00, 0x00, 0x77, +/* 00005970 */ 0xB9, 0x00, 0x00, 0x85, 0xB9, 0x00, 0x00, 0x86, 0xB9, 0x00, 0x00, 0xA3, 0xB9, 0x00, 0x00, 0xC2, +/* 00005980 */ 0xB9, 0x00, 0x00, 0xF6, 0xB9, 0x00, 0x00, 0x1E, 0xBA, 0x00, 0x00, 0x5B, 0xBA, 0x00, 0x00, 0x69, +/* 00005990 */ 0xBA, 0x00, 0x00, 0x6A, 0xBA, 0x00, 0x00, 0xE3, 0xBA, 0x00, 0x00, 0x02, 0xBB, 0x00, 0x00, 0x38, +/* 000059A0 */ 0xBB, 0x00, 0x00, 0x99, 0xBB, 0x00, 0x00, 0xA7, 0xBB, 0x00, 0x00, 0xA8, 0xBB, 0x00, 0x00, 0xD2, +/* 000059B0 */ 0xBB, 0x00, 0x00, 0xF1, 0xBB, 0x00, 0x00, 0x18, 0xBC, 0x00, 0x00, 0x3F, 0xBC, 0x00, 0x00, 0x54, +/* 000059C0 */ 0xBC, 0x00, 0x00, 0x75, 0xBC, 0x00, 0x00, 0xA0, 0xBC, 0x00, 0x00, 0xC5, 0xBC, 0x00, 0x00, 0xDE, +/* 000059D0 */ 0xBC, 0x00, 0x00, 0x03, 0xBD, 0x00, 0x00, 0x15, 0xBD, 0x00, 0x00, 0x23, 0xBD, 0x00, 0x00, 0x24, +/* 000059E0 */ 0xBD, 0x00, 0x00, 0x74, 0xBD, 0x00, 0x00, 0x75, 0xBD, 0x00, 0x00, 0xD1, 0xBD, 0x00, 0x00, 0xD2, +/* 000059F0 */ 0xBD, 0x00, 0x00, 0x01, 0xBE, 0x00, 0x00, 0x02, 0xBE, 0x00, 0x00, 0x4E, 0xBE, 0x00, 0x00, 0x7A, +/* 00005A00 */ 0xBE, 0x00, 0x00, 0x7B, 0xBE, 0x00, 0x00, 0x92, 0xBE, 0x00, 0x00, 0x9D, 0xBE, 0x00, 0x00, 0x9E, +/* 00005A10 */ 0xBE, 0x00, 0x00, 0x19, 0xBF, 0x00, 0x00, 0x62, 0xBF, 0x00, 0x00, 0xBF, 0xBF, 0x00, 0x00, 0xCD, +/* 00005A20 */ 0xBF, 0x00, 0x00, 0xCE, 0xBF, 0x00, 0x00, 0xFA, 0xBF, 0x00, 0x00, 0x47, 0xC0, 0x00, 0x00, 0x48, +/* 00005A30 */ 0xC0, 0x00, 0x00, 0x77, 0xC0, 0x00, 0x00, 0xF3, 0xC0, 0x00, 0x00, 0x31, 0xC1, 0x00, 0x00, 0x32, +/* 00005A40 */ 0xC1, 0x00, 0x00, 0x57, 0xC1, 0x00, 0x00, 0x6B, 0xC1, 0x00, 0x00, 0x75, 0xC1, 0x00, 0x00, 0x76, +/* 00005A50 */ 0xC1, 0x00, 0x00, 0xA0, 0xC1, 0x00, 0x00, 0xA1, 0xC1, 0x00, 0x00, 0x27, 0xC2, 0x00, 0x00, 0x7B, +/* 00005A60 */ 0xC2, 0x00, 0x00, 0xDD, 0xC2, 0x00, 0x00, 0xDE, 0xC2, 0x00, 0x00, 0x25, 0xC3, 0x00, 0x00, 0x53, +/* 00005A70 */ 0xC3, 0x00, 0x00, 0x7E, 0xC3, 0x00, 0x00, 0xC4, 0xC3, 0x00, 0x00, 0xD2, 0xC3, 0x00, 0x00, 0xD3, +/* 00005A80 */ 0xC3, 0x00, 0x00, 0x17, 0xC4, 0x00, 0x00, 0x18, 0xC4, 0x00, 0x00, 0x64, 0xC4, 0x00, 0x00, 0xA6, +/* 00005A90 */ 0xC4, 0x00, 0x00, 0xCF, 0xC4, 0x00, 0x00, 0xF4, 0xC4, 0x00, 0x00, 0x1B, 0xC5, 0x00, 0x00, 0x43, +/* 00005AA0 */ 0xC5, 0x00, 0x00, 0x57, 0xC5, 0x00, 0x00, 0x58, 0xC5, 0x00, 0x00, 0x75, 0xC5, 0x00, 0x00, 0x83, +/* 00005AB0 */ 0xC5, 0x00, 0x00, 0x84, 0xC5, 0x00, 0x00, 0xA5, 0xC5, 0x00, 0x00, 0xB1, 0xC5, 0x00, 0x00, 0xB2, +/* 00005AC0 */ 0xC5, 0x00, 0x00, 0x11, 0xC6, 0x00, 0x00, 0x76, 0xC6, 0x00, 0x00, 0x9C, 0xC6, 0x00, 0x00, 0x9D, +/* 00005AD0 */ 0xC6, 0x00, 0x00, 0xD7, 0xC6, 0x00, 0x00, 0x38, 0xC7, 0x00, 0x00, 0x46, 0xC7, 0x00, 0x00, 0x47, +/* 00005AE0 */ 0xC7, 0x00, 0x00, 0xBD, 0xC7, 0x00, 0x00, 0xC9, 0xC7, 0x00, 0x00, 0xCA, 0xC7, 0x00, 0x00, 0x44, +/* 00005AF0 */ 0xC8, 0x00, 0x00, 0x6A, 0xC8, 0x00, 0x00, 0x6B, 0xC8, 0x00, 0x00, 0x97, 0xC8, 0x00, 0x00, 0xFF, +/* 00005B00 */ 0xC8, 0x00, 0x00, 0x0D, 0xC9, 0x00, 0x00, 0x0E, 0xC9, 0x00, 0x00, 0x4F, 0xC9, 0x00, 0x00, 0xA6, +/* 00005B10 */ 0xC9, 0x00, 0x00, 0x0E, 0xCA, 0x00, 0x00, 0x1C, 0xCA, 0x00, 0x00, 0x1D, 0xCA, 0x00, 0x00, 0x9A, +/* 00005B20 */ 0xCA, 0x00, 0x00, 0xA6, 0xCA, 0x00, 0x00, 0xA7, 0xCA, 0x00, 0x00, 0x41, 0xCB, 0x00, 0x00, 0xAE, +/* 00005B30 */ 0xCB, 0x00, 0x00, 0xBA, 0xCB, 0x00, 0x00, 0xF9, 0xCB, 0x00, 0x00, 0x20, 0xCC, 0x00, 0x00, 0x3C, +/* 00005B40 */ 0xCC, 0x00, 0x00, 0x5B, 0xCC, 0x00, 0x00, 0x7B, 0xCC, 0x00, 0x00, 0x87, 0xCC, 0x00, 0x00, 0x88, +/* 00005B50 */ 0xCC, 0x00, 0x00, 0xBE, 0xCC, 0x00, 0x00, 0xE8, 0xCC, 0x00, 0x00, 0x05, 0xCD, 0x00, 0x00, 0x24, +/* 00005B60 */ 0xCD, 0x00, 0x00, 0x44, 0xCD, 0x00, 0x00, 0x50, 0xCD, 0x00, 0x00, 0x51, 0xCD, 0x00, 0x00, 0x92, +/* 00005B70 */ 0xCD, 0x00, 0x00, 0xB3, 0xCD, 0x00, 0x00, 0xCF, 0xCD, 0x00, 0x00, 0xEE, 0xCD, 0x00, 0x00, 0x0E, +/* 00005B80 */ 0xCE, 0x00, 0x00, 0x1A, 0xCE, 0x00, 0x00, 0x1B, 0xCE, 0x00, 0x00, 0x4E, 0xCE, 0x00, 0x00, 0x8B, +/* 00005B90 */ 0xCE, 0x00, 0x00, 0xF5, 0xCE, 0x00, 0x00, 0x27, 0xCF, 0x00, 0x00, 0x35, 0xCF, 0x00, 0x00, 0x36, +/* 00005BA0 */ 0xCF, 0x00, 0x00, 0x60, 0xCF, 0x00, 0x00, 0xC1, 0xCF, 0x00, 0x00, 0xCF, 0xCF, 0x00, 0x00, 0xD0, +/* 00005BB0 */ 0xCF, 0x00, 0x00, 0x09, 0xD0, 0x00, 0x00, 0x42, 0xD0, 0x00, 0x00, 0xA3, 0xD0, 0x00, 0x00, 0xB1, +/* 00005BC0 */ 0xD0, 0x00, 0x00, 0xB2, 0xD0, 0x00, 0x00, 0xD3, 0xD0, 0x00, 0x00, 0xDE, 0xD0, 0x00, 0x00, 0xDF, +/* 00005BD0 */ 0xD0, 0x00, 0x00, 0x24, 0xD1, 0x00, 0x00, 0x96, 0xD1, 0x00, 0x00, 0xC6, 0xD1, 0x00, 0x00, 0x2B, +/* 00005BE0 */ 0xD2, 0x00, 0x00, 0x3D, 0xD2, 0x00, 0x00, 0x3E, 0xD2, 0x00, 0x00, 0x7D, 0xD2, 0x00, 0x00, 0x7E, +/* 00005BF0 */ 0xD2, 0x00, 0x00, 0xFC, 0xD2, 0x00, 0x00, 0x7A, 0xD3, 0x00, 0x00, 0x9E, 0xD3, 0x00, 0x00, 0x9F, +/* 00005C00 */ 0xD3, 0x00, 0x00, 0xE4, 0xD3, 0x00, 0x00, 0xF4, 0xD3, 0x00, 0x00, 0x10, 0xD4, 0x00, 0x00, 0x2F, +/* 00005C10 */ 0xD4, 0x00, 0x00, 0x4F, 0xD4, 0x00, 0x00, 0x5B, 0xD4, 0x00, 0x00, 0x5C, 0xD4, 0x00, 0x00, 0xD8, +/* 00005C20 */ 0xD4, 0x00, 0x00, 0x21, 0xD5, 0x00, 0x00, 0x4D, 0xD5, 0x00, 0x00, 0xAE, 0xD5, 0x00, 0x00, 0xBC, +/* 00005C30 */ 0xD5, 0x00, 0x00, 0xBD, 0xD5, 0x00, 0x00, 0xF8, 0xD5, 0x00, 0x00, 0xF9, 0xD5, 0x00, 0x00, 0x33, +/* 00005C40 */ 0xD6, 0x00, 0x00, 0x7C, 0xD6, 0x00, 0x00, 0xB2, 0xD6, 0x00, 0x00, 0xC0, 0xD6, 0x00, 0x00, 0xC1, +/* 00005C50 */ 0xD6, 0x00, 0x00, 0xEE, 0xD6, 0x00, 0x00, 0xFA, 0xD6, 0x00, 0x00, 0x28, 0xD7, 0x00, 0x00, 0x49, +/* 00005C60 */ 0xD7, 0x00, 0x00, 0x66, 0xD7, 0x00, 0x00, 0x85, 0xD7, 0x00, 0x00, 0xA5, 0xD7, 0x00, 0x00, 0xB1, +/* 00005C70 */ 0xD7, 0x00, 0x00, 0xED, 0xD7, 0x00, 0x00, 0x09, 0xD8, 0x00, 0x00, 0x28, 0xD8, 0x00, 0x00, 0x48, +/* 00005C80 */ 0xD8, 0x00, 0x00, 0x54, 0xD8, 0x00, 0x00, 0x55, 0xD8, 0x00, 0x00, 0x98, 0xD8, 0x00, 0x00, 0xBA, +/* 00005C90 */ 0xD8, 0x00, 0x00, 0xD9, 0xD8, 0x00, 0x00, 0xF9, 0xD8, 0x00, 0x00, 0x15, 0xD9, 0x00, 0x00, 0x21, +/* 00005CA0 */ 0xD9, 0x00, 0x00, 0x22, 0xD9, 0x00, 0x00, 0x3F, 0xD9, 0x00, 0x00, 0x49, 0xD9, 0x00, 0x00, 0x4A, +/* 00005CB0 */ 0xD9, 0x00, 0x00, 0xCA, 0xD9, 0x00, 0x00, 0xF2, 0xD9, 0x00, 0x00, 0x2C, 0xDA, 0x00, 0x00, 0x40, +/* 00005CC0 */ 0xDA, 0x00, 0x00, 0x4A, 0xDA, 0x00, 0x00, 0x4B, 0xDA, 0x00, 0x00, 0x88, 0xDA, 0x00, 0x00, 0xC0, +/* 00005CD0 */ 0xDA, 0x00, 0x00, 0x0C, 0xDB, 0x00, 0x00, 0x31, 0xDB, 0x00, 0x00, 0x5B, 0xDB, 0x00, 0x00, 0x81, +/* 00005CE0 */ 0xDB, 0x00, 0x00, 0xA8, 0xDB, 0x00, 0x00, 0xFA, 0xDB, 0x00, 0x00, 0x20, 0xDC, 0x00, 0x00, 0x47, +/* 00005CF0 */ 0xDC, 0x00, 0x00, 0x70, 0xDC, 0x00, 0x00, 0x99, 0xDC, 0x00, 0x00, 0x02, 0xDD, 0x00, 0x00, 0x0D, +/* 00005D00 */ 0xDD, 0x00, 0x00, 0x0E, 0xDD, 0x00, 0x00, 0x1A, 0xDD, 0x00, 0x00, 0x86, 0xDD, 0x00, 0x00, 0x03, +/* 00005D10 */ 0xDE, 0x00, 0x00, 0x0E, 0xDE, 0x00, 0x00, 0x50, 0xDE, 0x00, 0x00, 0xA3, 0xDE, 0x00, 0x00, 0xAF, +/* 00005D20 */ 0xDE, 0x00, 0x00, 0xE3, 0xDE, 0x00, 0x00, 0x62, 0xDF, 0x00, 0x00, 0x88, 0xDF, 0x00, 0x00, 0xA6, +/* 00005D30 */ 0xDF, 0x00, 0x00, 0xC0, 0xDF, 0x00, 0x00, 0xDB, 0xDF, 0x00, 0x00, 0xF7, 0xDF, 0x00, 0x00, 0x11, +/* 00005D40 */ 0xE0, 0x00, 0x00, 0x4C, 0xE0, 0x00, 0x00, 0x81, 0xE0, 0x00, 0x00, 0x9E, 0xE0, 0x00, 0x00, 0xBB, +/* 00005D50 */ 0xE0, 0x00, 0x00, 0xDE, 0xE0, 0x00, 0x00, 0xED, 0xE0, 0x00, 0x00, 0x72, 0xE1, 0x00, 0x00, 0x98, +/* 00005D60 */ 0xE1, 0x00, 0x00, 0xD2, 0xE1, 0x00, 0x00, 0xEC, 0xE1, 0x00, 0x00, 0x1D, 0xE2, 0x00, 0x00, 0x45, +/* 00005D70 */ 0xE2, 0x00, 0x00, 0x5F, 0xE2, 0x00, 0x00, 0x9B, 0xE2, 0x00, 0x00, 0xB8, 0xE2, 0x00, 0x00, 0xD5, +/* 00005D80 */ 0xE2, 0x00, 0x00, 0x6A, 0xE3, 0x00, 0x00, 0x79, 0xE3, 0x00, 0x00, 0x7A, 0xE3, 0x00, 0x00, 0xDF, +/* 00005D90 */ 0xE3, 0x00, 0x00, 0x4E, 0xE4, 0x00, 0x00, 0x7A, 0xE4, 0x00, 0x00, 0x96, 0xE4, 0x00, 0x00, 0xB4, +/* 00005DA0 */ 0xE4, 0x00, 0x00, 0xCE, 0xE4, 0x00, 0x00, 0xE7, 0xE4, 0x00, 0x00, 0x02, 0xE5, 0x00, 0x00, 0x11, +/* 00005DB0 */ 0xE5, 0x00, 0x00, 0x3D, 0xE5, 0x00, 0x00, 0x5B, 0xE5, 0x00, 0x00, 0x79, 0xE5, 0x00, 0x00, 0x95, +/* 00005DC0 */ 0xE5, 0x00, 0x00, 0xB0, 0xE5, 0x00, 0x00, 0xCD, 0xE5, 0x00, 0x00, 0xDC, 0xE5, 0x00, 0x00, 0xDD, +/* 00005DD0 */ 0xE5, 0x00, 0x00, 0x11, 0xE6, 0x00, 0x00, 0x3B, 0xE6, 0x00, 0x00, 0x55, 0xE6, 0x00, 0x00, 0x6F, +/* 00005DE0 */ 0xE6, 0x00, 0x00, 0x89, 0xE6, 0x00, 0x00, 0xA3, 0xE6, 0x00, 0x00, 0xB2, 0xE6, 0x00, 0x00, 0xDC, +/* 00005DF0 */ 0xE6, 0x00, 0x00, 0xF6, 0xE6, 0x00, 0x00, 0x10, 0xE7, 0x00, 0x00, 0x2A, 0xE7, 0x00, 0x00, 0x44, +/* 00005E00 */ 0xE7, 0x00, 0x00, 0x53, 0xE7, 0x00, 0x00, 0x54, 0xE7, 0x00, 0x00, 0xBB, 0xE7, 0x00, 0x00, 0xF0, +/* 00005E10 */ 0xE7, 0x00, 0x00, 0x56, 0xE8, 0x00, 0x00, 0x85, 0xE8, 0x00, 0x00, 0xE4, 0xE8, 0x00, 0x00, 0x13, +/* 00005E20 */ 0xE9, 0x00, 0x00, 0x43, 0xE9, 0x00, 0x00, 0x59, 0xE9, 0x00, 0x00, 0x5A, 0xE9, 0x00, 0x00, 0x7F, +/* 00005E30 */ 0xE9, 0x00, 0x00, 0x9F, 0xE9, 0x00, 0x00, 0xA0, 0xE9, 0x00, 0x00, 0xCA, 0xE9, 0x00, 0x00, 0xCB, +/* 00005E40 */ 0xE9, 0x00, 0x00, 0x56, 0xEA, 0x00, 0x00, 0xBA, 0xEA, 0x00, 0x00, 0xFC, 0xEA, 0x00, 0x00, 0x2C, +/* 00005E50 */ 0xEB, 0x00, 0x00, 0x84, 0xEB, 0x00, 0x00, 0xF0, 0xEB, 0x00, 0x00, 0x4D, 0xEC, 0x00, 0x00, 0xC4, +/* 00005E60 */ 0xEC, 0x00, 0x00, 0x47, 0xED, 0x00, 0x00, 0x9D, 0xED, 0x00, 0x00, 0x08, 0xEE, 0x00, 0x00, 0x3A, +/* 00005E70 */ 0xEE, 0x00, 0x00, 0xAD, 0xEE, 0x00, 0x00, 0xDF, 0xEE, 0x00, 0x00, 0xF9, 0xEE, 0x00, 0x00, 0x0F, +/* 00005E80 */ 0xEF, 0x00, 0x00, 0x10, 0xEF, 0x00, 0x00, 0x80, 0xEF, 0x00, 0x00, 0x98, 0xEF, 0x00, 0x00, 0x99, +/* 00005E90 */ 0xEF, 0x00, 0x00, 0xED, 0xEF, 0x00, 0x00, 0xEE, 0xEF, 0x00, 0x00, 0x83, 0xF0, 0x00, 0x00, 0x12, +/* 00005EA0 */ 0xF1, 0x00, 0x00, 0xA7, 0xF1, 0x00, 0x00, 0xCE, 0xF1, 0x00, 0x00, 0xE9, 0xF1, 0x00, 0x00, 0x16, +/* 00005EB0 */ 0xF2, 0x00, 0x00, 0x40, 0xF2, 0x00, 0x00, 0x71, 0xF2, 0x00, 0x00, 0x96, 0xF2, 0x00, 0x00, 0xBD, +/* 00005EC0 */ 0xF2, 0x00, 0x00, 0xEC, 0xF2, 0x00, 0x00, 0x06, 0xF3, 0x00, 0x00, 0x23, 0xF3, 0x00, 0x00, 0x45, +/* 00005ED0 */ 0xF3, 0x00, 0x00, 0x6F, 0xF3, 0x00, 0x00, 0x99, 0xF3, 0x00, 0x00, 0xB6, 0xF3, 0x00, 0x00, 0xD8, +/* 00005EE0 */ 0xF3, 0x00, 0x00, 0x06, 0xF4, 0x00, 0x00, 0x23, 0xF4, 0x00, 0x00, 0x45, 0xF4, 0x00, 0x00, 0x5B, +/* 00005EF0 */ 0xF4, 0x00, 0x00, 0x5C, 0xF4, 0x00, 0x00, 0xC2, 0xF4, 0x00, 0x00, 0x29, 0xF5, 0x00, 0x00, 0x7D, +/* 00005F00 */ 0xF5, 0x00, 0x00, 0xB7, 0xF5, 0x00, 0x00, 0x26, 0xF6, 0x00, 0x00, 0x98, 0xF6, 0x00, 0x00, 0xEF, +/* 00005F10 */ 0xF6, 0x00, 0x00, 0x38, 0xF7, 0x00, 0x00, 0x6F, 0xF7, 0x00, 0x00, 0xAD, 0xF7, 0x00, 0x00, 0xE1, +/* 00005F20 */ 0xF7, 0x00, 0x00, 0x65, 0xF8, 0x00, 0x00, 0x8E, 0xF8, 0x00, 0x00, 0xC2, 0xF8, 0x00, 0x00, 0x38, +/* 00005F30 */ 0xF9, 0x00, 0x00, 0x5A, 0xF9, 0x00, 0x00, 0x5B, 0xF9, 0x00, 0x00, 0xB3, 0xF9, 0x00, 0x00, 0xE5, +/* 00005F40 */ 0xF9, 0x00, 0x00, 0x03, 0xFA, 0x00, 0x00, 0x24, 0xFA, 0x00, 0x00, 0x92, 0xFA, 0x00, 0x00, 0xEF, +/* 00005F50 */ 0xFA, 0x00, 0x00, 0x35, 0xFB, 0x00, 0x00, 0x4F, 0xFB, 0x00, 0x00, 0x65, 0xFB, 0x00, 0x00, 0x66, +/* 00005F60 */ 0xFB, 0x00, 0x00, 0x89, 0xFB, 0x00, 0x00, 0xD0, 0xFB, 0x00, 0x00, 0xED, 0xFB, 0x00, 0x00, 0x03, +/* 00005F70 */ 0xFC, 0x00, 0x00, 0x04, 0xFC, 0x00, 0x00, 0x42, 0xFC, 0x00, 0x00, 0x8A, 0xFC, 0x00, 0x00, 0xC0, +/* 00005F80 */ 0xFC, 0x00, 0x00, 0xDB, 0xFC, 0x00, 0x00, 0xED, 0xFC, 0x00, 0x00, 0xEE, 0xFC, 0x00, 0x00, 0x15, +/* 00005F90 */ 0xFD, 0x00, 0x00, 0x24, 0xFD, 0x00, 0x00, 0x32, 0xFD, 0x00, 0x00, 0x33, 0xFD, 0x00, 0x00, 0x3F, +/* 00005FA0 */ 0xFD, 0x00, 0x00, 0x96, 0xFD, 0x00, 0x00, 0xA1, 0xFD, 0x00, 0x00, 0xD4, 0xFD, 0x00, 0x00, 0xDF, +/* 00005FB0 */ 0xFD, 0x00, 0x00, 0x59, 0xFE, 0x00, 0x00, 0xA5, 0xFE, 0x00, 0x00, 0xE7, 0xFE, 0x00, 0x00, 0xF3, +/* 00005FC0 */ 0xFE, 0x00, 0x00, 0x4A, 0xFF, 0x00, 0x00, 0x90, 0xFF, 0x00, 0x00, 0xD1, 0xFF, 0x00, 0x00, 0xD2, +/* 00005FD0 */ 0xFF, 0x00, 0x00, 0xF6, 0xFF, 0x00, 0x00, 0x69, 0x00, 0x01, 0x00, 0x6A, 0x00, 0x01, 0x00, 0xD9, +/* 00005FE0 */ 0x00, 0x01, 0x00, 0x26, 0x01, 0x01, 0x00, 0x80, 0x01, 0x01, 0x00, 0xF0, 0x01, 0x01, 0x00, 0x18, +/* 00005FF0 */ 0x02, 0x01, 0x00, 0x3A, 0x02, 0x01, 0x00, 0x48, 0x02, 0x01, 0x00, 0x68, 0x02, 0x01, 0x00, 0x69, +/* 00006000 */ 0x02, 0x01, 0x00, 0xD8, 0x02, 0x01, 0x00, 0x06, 0x03, 0x01, 0x00, 0x32, 0x03, 0x01, 0x00, 0x5F, +/* 00006010 */ 0x03, 0x01, 0x00, 0x92, 0x03, 0x01, 0x00, 0x93, 0x03, 0x01, 0x00, 0xCA, 0x03, 0x01, 0x00, 0xF1, +/* 00006020 */ 0x03, 0x01, 0x00, 0x15, 0x04, 0x01, 0x00, 0x49, 0x04, 0x01, 0x00, 0x5E, 0x04, 0x01, 0x00, 0x8A, +/* 00006030 */ 0x04, 0x01, 0x00, 0x98, 0x04, 0x01, 0x00, 0x99, 0x04, 0x01, 0x00, 0x0E, 0x05, 0x01, 0x00, 0x51, +/* 00006040 */ 0x05, 0x01, 0x00, 0x9F, 0x05, 0x01, 0x00, 0xED, 0x05, 0x01, 0x00, 0x5E, 0x06, 0x01, 0x00, 0xAF, +/* 00006050 */ 0x06, 0x01, 0x00, 0xCB, 0x06, 0x01, 0x00, 0xE0, 0x06, 0x01, 0x00, 0x02, 0x07, 0x01, 0x00, 0x10, +/* 00006060 */ 0x07, 0x01, 0x00, 0x11, 0x07, 0x01, 0x00, 0x3B, 0x07, 0x01, 0x00, 0x3C, 0x07, 0x01, 0x00, 0x75, +/* 00006070 */ 0x07, 0x01, 0x00, 0xD3, 0x07, 0x01, 0x00, 0xD4, 0x07, 0x01, 0x00, 0x48, 0x08, 0x01, 0x00, 0x8B, +/* 00006080 */ 0x08, 0x01, 0x00, 0xC8, 0x08, 0x01, 0x00, 0xC9, 0x08, 0x01, 0x00, 0xEC, 0x08, 0x01, 0x00, 0xF7, +/* 00006090 */ 0x08, 0x01, 0x00, 0xF8, 0x08, 0x01, 0x00, 0x04, 0x09, 0x01, 0x00, 0x4C, 0x09, 0x01, 0x00, 0x57, +/* 000060A0 */ 0x09, 0x01, 0x00, 0x83, 0x09, 0x01, 0x00, 0x8E, 0x09, 0x01, 0x00, 0x0F, 0x0A, 0x01, 0x00, 0x89, +/* 000060B0 */ 0x0A, 0x01, 0x00, 0x04, 0x0B, 0x01, 0x00, 0x39, 0x0B, 0x01, 0x00, 0x45, 0x0B, 0x01, 0x00, 0x90, +/* 000060C0 */ 0x0B, 0x01, 0x00, 0xE1, 0x0B, 0x01, 0x00, 0x0A, 0x0C, 0x01, 0x00, 0x2F, 0x0C, 0x01, 0x00, 0x6C, +/* 000060D0 */ 0x0C, 0x01, 0x00, 0xBD, 0x0C, 0x01, 0x00, 0xEE, 0x0C, 0x01, 0x00, 0x1D, 0x0D, 0x01, 0x00, 0x4B, +/* 000060E0 */ 0x0D, 0x01, 0x00, 0x61, 0x0D, 0x01, 0x00, 0x75, 0x0D, 0x01, 0x00, 0x83, 0x0D, 0x01, 0x00, 0x84, +/* 000060F0 */ 0x0D, 0x01, 0x00, 0xC1, 0x0D, 0x01, 0x00, 0x0B, 0x0E, 0x01, 0x00, 0x3C, 0x0E, 0x01, 0x00, 0x6B, +/* 00006100 */ 0x0E, 0x01, 0x00, 0x99, 0x0E, 0x01, 0x00, 0xAF, 0x0E, 0x01, 0x00, 0xC3, 0x0E, 0x01, 0x00, 0xD1, +/* 00006110 */ 0x0E, 0x01, 0x00, 0xD2, 0x0E, 0x01, 0x00, 0x2A, 0x0F, 0x01, 0x00, 0x70, 0x0F, 0x01, 0x00, 0xA6, +/* 00006120 */ 0x0F, 0x01, 0x00, 0xD0, 0x0F, 0x01, 0x00, 0xF8, 0x0F, 0x01, 0x00, 0x22, 0x10, 0x01, 0x00, 0x4E, +/* 00006130 */ 0x10, 0x01, 0x00, 0x66, 0x10, 0x01, 0x00, 0x79, 0x10, 0x01, 0x00, 0x87, 0x10, 0x01, 0x00, 0x88, +/* 00006140 */ 0x10, 0x01, 0x00, 0xE0, 0x10, 0x01, 0x00, 0x2A, 0x11, 0x01, 0x00, 0x60, 0x11, 0x01, 0x00, 0x8A, +/* 00006150 */ 0x11, 0x01, 0x00, 0xB2, 0x11, 0x01, 0x00, 0xDC, 0x11, 0x01, 0x00, 0x08, 0x12, 0x01, 0x00, 0x20, +/* 00006160 */ 0x12, 0x01, 0x00, 0x33, 0x12, 0x01, 0x00, 0x41, 0x12, 0x01, 0x00, 0x42, 0x12, 0x01, 0x00, 0x5E, +/* 00006170 */ 0x12, 0x01, 0x00, 0x69, 0x12, 0x01, 0x00, 0x6A, 0x12, 0x01, 0x00, 0xA4, 0x12, 0x01, 0x00, 0xD4, +/* 00006180 */ 0x12, 0x01, 0x00, 0x01, 0x13, 0x01, 0x00, 0x0F, 0x13, 0x01, 0x00, 0x10, 0x13, 0x01, 0x00, 0x84, +/* 00006190 */ 0x13, 0x01, 0x00, 0x8F, 0x13, 0x01, 0x00, 0x90, 0x13, 0x01, 0x00, 0xE2, 0x13, 0x01, 0x00, 0x3E, +/* 000061A0 */ 0x14, 0x01, 0x00, 0x82, 0x14, 0x01, 0x00, 0xA1, 0x14, 0x01, 0x00, 0xC4, 0x14, 0x01, 0x00, 0xE6, +/* 000061B0 */ 0x14, 0x01, 0x00, 0xF2, 0x14, 0x01, 0x00, 0xF3, 0x14, 0x01, 0x00, 0x64, 0x15, 0x01, 0x00, 0xAB, +/* 000061C0 */ 0x15, 0x01, 0x00, 0xE9, 0x15, 0x01, 0x00, 0xF7, 0x15, 0x01, 0x00, 0x2C, 0x16, 0x01, 0x00, 0x64, +/* 000061D0 */ 0x16, 0x01, 0x00, 0x8B, 0x16, 0x01, 0x00, 0x99, 0x16, 0x01, 0x00, 0x9A, 0x16, 0x01, 0x00, 0xC3, +/* 000061E0 */ 0x16, 0x01, 0x00, 0x1B, 0x17, 0x01, 0x00, 0x85, 0x17, 0x01, 0x00, 0xD0, 0x17, 0x01, 0x00, 0xFD, +/* 000061F0 */ 0x17, 0x01, 0x00, 0x54, 0x18, 0x01, 0x00, 0x6D, 0x18, 0x01, 0x00, 0x93, 0x18, 0x01, 0x00, 0xC1, +/* 00006200 */ 0x18, 0x01, 0x00, 0x37, 0x19, 0x01, 0x00, 0x8E, 0x19, 0x01, 0x00, 0xA0, 0x19, 0x01, 0x00, 0xAE, +/* 00006210 */ 0x19, 0x01, 0x00, 0xAF, 0x19, 0x01, 0x00, 0xCF, 0x19, 0x01, 0x00, 0xF9, 0x19, 0x01, 0x00, 0x67, +/* 00006220 */ 0x1A, 0x01, 0x00, 0x75, 0x1A, 0x01, 0x00, 0x76, 0x1A, 0x01, 0x00, 0x08, 0x1B, 0x01, 0x00, 0x12, +/* 00006230 */ 0x1B, 0x01, 0x00, 0x13, 0x1B, 0x01, 0x00, 0x8D, 0x1B, 0x01, 0x00, 0x16, 0x1C, 0x01, 0x00, 0x91, +/* 00006240 */ 0x1C, 0x01, 0x00, 0x16, 0x1D, 0x01, 0x00, 0x37, 0x1D, 0x01, 0x00, 0x42, 0x1D, 0x01, 0x00, 0xCA, +/* 00006250 */ 0x1D, 0x01, 0x00, 0x4C, 0x1E, 0x01, 0x00, 0xD2, 0x1E, 0x01, 0x00, 0x22, 0x1F, 0x01, 0x00, 0x2D, +/* 00006260 */ 0x1F, 0x01, 0x00, 0xAB, 0x1F, 0x01, 0x00, 0x19, 0x20, 0x01, 0x00, 0x70, 0x20, 0x01, 0x00, 0xD7, +/* 00006270 */ 0x20, 0x01, 0x00, 0x4D, 0x21, 0x01, 0x00, 0x9A, 0x21, 0x01, 0x00, 0xA5, 0x21, 0x01, 0x00, 0x2D, +/* 00006280 */ 0x22, 0x01, 0x00, 0xB2, 0x22, 0x01, 0x00, 0xF9, 0x22, 0x01, 0x00, 0xFA, 0x22, 0x01, 0x00, 0x46, +/* 00006290 */ 0x23, 0x01, 0x00, 0xE0, 0x23, 0x01, 0x00, 0x61, 0x24, 0x01, 0x00, 0x86, 0x24, 0x01, 0x00, 0x2D, +/* 000062A0 */ 0x25, 0x01, 0x00, 0x2E, 0x25, 0x01, 0x00, 0x7A, 0x25, 0x01, 0x00, 0x18, 0x26, 0x01, 0x00, 0x99, +/* 000062B0 */ 0x26, 0x01, 0x00, 0xBE, 0x26, 0x01, 0x00, 0x73, 0x27, 0x01, 0x00, 0x74, 0x27, 0x01, 0x00, 0xC0, +/* 000062C0 */ 0x27, 0x01, 0x00, 0x5E, 0x28, 0x01, 0x00, 0xDF, 0x28, 0x01, 0x00, 0x04, 0x29, 0x01, 0x00, 0xB9, +/* 000062D0 */ 0x29, 0x01, 0x00, 0xBA, 0x29, 0x01, 0x00, 0x15, 0x2A, 0x01, 0x00, 0x38, 0x2A, 0x01, 0x00, 0x4C, +/* 000062E0 */ 0x2A, 0x01, 0x00, 0x56, 0x2A, 0x01, 0x00, 0x57, 0x2A, 0x01, 0x00, 0x83, 0x2A, 0x01, 0x00, 0x84, +/* 000062F0 */ 0x2A, 0x01, 0x00, 0x90, 0x2A, 0x01, 0x00, 0xBF, 0x2A, 0x01, 0x00, 0xCA, 0x2A, 0x01, 0x00, 0xF8, +/* 00006300 */ 0x2A, 0x01, 0x00, 0x03, 0x2B, 0x01, 0x00, 0x2F, 0x2B, 0x01, 0x00, 0x52, 0x2B, 0x01, 0x00, 0x5E, +/* 00006310 */ 0x2B, 0x01, 0x00, 0xEA, 0x2B, 0x01, 0x00, 0x40, 0x2C, 0x01, 0x00, 0xA6, 0x2C, 0x01, 0x00, 0xA7, +/* 00006320 */ 0x2C, 0x01, 0x00, 0xF0, 0x2C, 0x01, 0x00, 0x1E, 0x2D, 0x01, 0x00, 0x49, 0x2D, 0x01, 0x00, 0x91, +/* 00006330 */ 0x2D, 0x01, 0x00, 0x9F, 0x2D, 0x01, 0x00, 0xA0, 0x2D, 0x01, 0x00, 0xE6, 0x2D, 0x01, 0x00, 0xE7, +/* 00006340 */ 0x2D, 0x01, 0x00, 0x35, 0x2E, 0x01, 0x00, 0x77, 0x2E, 0x01, 0x00, 0xA2, 0x2E, 0x01, 0x00, 0xC7, +/* 00006350 */ 0x2E, 0x01, 0x00, 0xEE, 0x2E, 0x01, 0x00, 0x16, 0x2F, 0x01, 0x00, 0x2A, 0x2F, 0x01, 0x00, 0x2B, +/* 00006360 */ 0x2F, 0x01, 0x00, 0x48, 0x2F, 0x01, 0x00, 0x56, 0x2F, 0x01, 0x00, 0x57, 0x2F, 0x01, 0x00, 0x7A, +/* 00006370 */ 0x2F, 0x01, 0x00, 0x86, 0x2F, 0x01, 0x00, 0x87, 0x2F, 0x01, 0x00, 0xBD, 0x2F, 0x01, 0x00, 0xFB, +/* 00006380 */ 0x2F, 0x01, 0x00, 0x6A, 0x30, 0x01, 0x00, 0x9E, 0x30, 0x01, 0x00, 0xAC, 0x30, 0x01, 0x00, 0xAD, +/* 00006390 */ 0x30, 0x01, 0x00, 0xD8, 0x30, 0x01, 0x00, 0x3D, 0x31, 0x01, 0x00, 0x4B, 0x31, 0x01, 0x00, 0x4C, +/* 000063A0 */ 0x31, 0x01, 0x00, 0x86, 0x31, 0x01, 0x00, 0xC1, 0x31, 0x01, 0x00, 0x26, 0x32, 0x01, 0x00, 0x34, +/* 000063B0 */ 0x32, 0x01, 0x00, 0x35, 0x32, 0x01, 0x00, 0x56, 0x32, 0x01, 0x00, 0x61, 0x32, 0x01, 0x00, 0x62, +/* 000063C0 */ 0x32, 0x01, 0x00, 0xC3, 0x32, 0x01, 0x00, 0x2D, 0x33, 0x01, 0x00, 0x69, 0x33, 0x01, 0x00, 0xCE, +/* 000063D0 */ 0x33, 0x01, 0x00, 0xDC, 0x33, 0x01, 0x00, 0xDD, 0x33, 0x01, 0x00, 0xF0, 0x33, 0x01, 0x00, 0x16, +/* 000063E0 */ 0x34, 0x01, 0x00, 0x54, 0x34, 0x01, 0x00, 0x69, 0x34, 0x01, 0x00, 0x96, 0x34, 0x01, 0x00, 0x97, +/* 000063F0 */ 0x34, 0x01, 0x00, 0xCB, 0x34, 0x01, 0x00, 0xFC, 0x34, 0x01, 0x00, 0x0E, 0x35, 0x01, 0x00, 0x1C, +/* 00006400 */ 0x35, 0x01, 0x00, 0x1D, 0x35, 0x01, 0x00, 0x93, 0x35, 0x01, 0x00, 0x9F, 0x35, 0x01, 0x00, 0xA0, +/* 00006410 */ 0x35, 0x01, 0x00, 0x1F, 0x36, 0x01, 0x00, 0x4B, 0x36, 0x01, 0x00, 0xB7, 0x36, 0x01, 0x00, 0xC5, +/* 00006420 */ 0x36, 0x01, 0x00, 0xC6, 0x36, 0x01, 0x00, 0x07, 0x37, 0x01, 0x00, 0x60, 0x37, 0x01, 0x00, 0xCC, +/* 00006430 */ 0x37, 0x01, 0x00, 0xDA, 0x37, 0x01, 0x00, 0xDB, 0x37, 0x01, 0x00, 0xEE, 0x37, 0x01, 0x00, 0x14, +/* 00006440 */ 0x38, 0x01, 0x00, 0x52, 0x38, 0x01, 0x00, 0x67, 0x38, 0x01, 0x00, 0x94, 0x38, 0x01, 0x00, 0x95, +/* 00006450 */ 0x38, 0x01, 0x00, 0xC9, 0x38, 0x01, 0x00, 0xFA, 0x38, 0x01, 0x00, 0x0C, 0x39, 0x01, 0x00, 0x1A, +/* 00006460 */ 0x39, 0x01, 0x00, 0x1B, 0x39, 0x01, 0x00, 0x98, 0x39, 0x01, 0x00, 0xA4, 0x39, 0x01, 0x00, 0xA5, +/* 00006470 */ 0x39, 0x01, 0x00, 0xDD, 0x39, 0x01, 0x00, 0x09, 0x3A, 0x01, 0x00, 0x26, 0x3A, 0x01, 0x00, 0x45, +/* 00006480 */ 0x3A, 0x01, 0x00, 0x65, 0x3A, 0x01, 0x00, 0x71, 0x3A, 0x01, 0x00, 0x72, 0x3A, 0x01, 0x00, 0xB5, +/* 00006490 */ 0x3A, 0x01, 0x00, 0xD8, 0x3A, 0x01, 0x00, 0xF4, 0x3A, 0x01, 0x00, 0x13, 0x3B, 0x01, 0x00, 0x32, +/* 000064A0 */ 0x3B, 0x01, 0x00, 0x3E, 0x3B, 0x01, 0x00, 0x3F, 0x3B, 0x01, 0x00, 0xBD, 0x3B, 0x01, 0x00, 0x06, +/* 000064B0 */ 0x3C, 0x01, 0x00, 0x32, 0x3C, 0x01, 0x00, 0x97, 0x3C, 0x01, 0x00, 0xA5, 0x3C, 0x01, 0x00, 0xA6, +/* 000064C0 */ 0x3C, 0x01, 0x00, 0xE3, 0x3C, 0x01, 0x00, 0xE4, 0x3C, 0x01, 0x00, 0x1E, 0x3D, 0x01, 0x00, 0x67, +/* 000064D0 */ 0x3D, 0x01, 0x00, 0x9D, 0x3D, 0x01, 0x00, 0xAB, 0x3D, 0x01, 0x00, 0xAC, 0x3D, 0x01, 0x00, 0xD9, +/* 000064E0 */ 0x3D, 0x01, 0x00, 0xE5, 0x3D, 0x01, 0x00, 0x13, 0x3E, 0x01, 0x00, 0x34, 0x3E, 0x01, 0x00, 0x51, +/* 000064F0 */ 0x3E, 0x01, 0x00, 0x70, 0x3E, 0x01, 0x00, 0x90, 0x3E, 0x01, 0x00, 0x9C, 0x3E, 0x01, 0x00, 0xDA, +/* 00006500 */ 0x3E, 0x01, 0x00, 0xF6, 0x3E, 0x01, 0x00, 0x15, 0x3F, 0x01, 0x00, 0x35, 0x3F, 0x01, 0x00, 0x41, +/* 00006510 */ 0x3F, 0x01, 0x00, 0x86, 0x3F, 0x01, 0x00, 0xA8, 0x3F, 0x01, 0x00, 0xC7, 0x3F, 0x01, 0x00, 0xE7, +/* 00006520 */ 0x3F, 0x01, 0x00, 0x03, 0x40, 0x01, 0x00, 0x0F, 0x40, 0x01, 0x00, 0x56, 0x40, 0x01, 0x00, 0xCA, +/* 00006530 */ 0x40, 0x01, 0x00, 0xFA, 0x40, 0x01, 0x00, 0x63, 0x41, 0x01, 0x00, 0x75, 0x41, 0x01, 0x00, 0x76, +/* 00006540 */ 0x41, 0x01, 0x00, 0xB7, 0x41, 0x01, 0x00, 0xD9, 0x41, 0x01, 0x00, 0xF7, 0x41, 0x01, 0x00, 0x17, +/* 00006550 */ 0x42, 0x01, 0x00, 0x3E, 0x42, 0x01, 0x00, 0x5E, 0x42, 0x01, 0x00, 0x7F, 0x42, 0x01, 0x00, 0x9E, +/* 00006560 */ 0x42, 0x01, 0x00, 0xB9, 0x42, 0x01, 0x00, 0xD5, 0x42, 0x01, 0x00, 0xF2, 0x42, 0x01, 0x00, 0x0D, +/* 00006570 */ 0x43, 0x01, 0x00, 0x29, 0x43, 0x01, 0x00, 0x47, 0x43, 0x01, 0x00, 0x65, 0x43, 0x01, 0x00, 0x89, +/* 00006580 */ 0x43, 0x01, 0x00, 0x9C, 0x43, 0x01, 0x00, 0x9D, 0x43, 0x01, 0x00, 0xFD, 0x43, 0x01, 0x00, 0x2D, +/* 00006590 */ 0x44, 0x01, 0x00, 0x68, 0x44, 0x01, 0x00, 0xB6, 0x44, 0x01, 0x00, 0xEB, 0x44, 0x01, 0x00, 0x37, +/* 000065A0 */ 0x45, 0x01, 0x00, 0x51, 0x45, 0x01, 0x00, 0x52, 0x45, 0x01, 0x00, 0x77, 0x45, 0x01, 0x00, 0x8D, +/* 000065B0 */ 0x45, 0x01, 0x00, 0xA1, 0x45, 0x01, 0x00, 0xB1, 0x45, 0x01, 0x00, 0xCD, 0x45, 0x01, 0x00, 0xEC, +/* 000065C0 */ 0x45, 0x01, 0x00, 0x0C, 0x46, 0x01, 0x00, 0x18, 0x46, 0x01, 0x00, 0x19, 0x46, 0x01, 0x00, 0xB5, +/* 000065D0 */ 0x46, 0x01, 0x00, 0x23, 0x47, 0x01, 0x00, 0x2F, 0x47, 0x01, 0x00, 0x70, 0x47, 0x01, 0x00, 0x97, +/* 000065E0 */ 0x47, 0x01, 0x00, 0xB3, 0x47, 0x01, 0x00, 0xD2, 0x47, 0x01, 0x00, 0xF2, 0x47, 0x01, 0x00, 0xFE, +/* 000065F0 */ 0x47, 0x01, 0x00, 0xFF, 0x47, 0x01, 0x00, 0x1E, 0x48, 0x01, 0x00, 0x28, 0x48, 0x01, 0x00, 0x29, +/* 00006600 */ 0x48, 0x01, 0x00, 0x4F, 0x48, 0x01, 0x00, 0x72, 0x48, 0x01, 0x00, 0x86, 0x48, 0x01, 0x00, 0x90, +/* 00006610 */ 0x48, 0x01, 0x00, 0x91, 0x48, 0x01, 0x00, 0x9D, 0x48, 0x01, 0x00, 0xD1, 0x48, 0x01, 0x00, 0xDC, +/* 00006620 */ 0x48, 0x01, 0x00, 0x0C, 0x49, 0x01, 0x00, 0x17, 0x49, 0x01, 0x00, 0x3E, 0x49, 0x01, 0x00, 0x6A, +/* 00006630 */ 0x49, 0x01, 0x00, 0x8D, 0x49, 0x01, 0x00, 0x99, 0x49, 0x01, 0x00, 0xEA, 0x49, 0x01, 0x00, 0x30, +/* 00006640 */ 0x4A, 0x01, 0x00, 0x87, 0x4A, 0x01, 0x00, 0xAB, 0x4A, 0x01, 0x00, 0x18, 0x4B, 0x01, 0x00, 0x82, +/* 00006650 */ 0x4B, 0x01, 0x00, 0x83, 0x4B, 0x01, 0x00, 0xC8, 0x4B, 0x01, 0x00, 0xC9, 0x4B, 0x01, 0x00, 0x2C, +/* 00006660 */ 0x4C, 0x01, 0x00, 0x8A, 0x4C, 0x01, 0x00, 0x8B, 0x4C, 0x01, 0x00, 0xB6, 0x4C, 0x01, 0x00, 0x0C, +/* 00006670 */ 0x4D, 0x01, 0x00, 0x0D, 0x4D, 0x01, 0x00, 0x44, 0x4D, 0x01, 0x00, 0x45, 0x4D, 0x01, 0x00, 0x65, +/* 00006680 */ 0x4D, 0x01, 0x00, 0x70, 0x4D, 0x01, 0x00, 0x71, 0x4D, 0x01, 0x00, 0x7D, 0x4D, 0x01, 0x00, 0xCE, +/* 00006690 */ 0x4D, 0x01, 0x00, 0x0D, 0x4E, 0x01, 0x00, 0x18, 0x4E, 0x01, 0x00, 0x40, 0x4E, 0x01, 0x00, 0x4B, +/* 000066A0 */ 0x4E, 0x01, 0x00, 0x72, 0x4E, 0x01, 0x00, 0x8F, 0x4E, 0x01, 0x00, 0x9B, 0x4E, 0x01, 0x00, 0xD5, +/* 000066B0 */ 0x4E, 0x01, 0x00, 0xF7, 0x4E, 0x01, 0x00, 0x17, 0x4F, 0x01, 0x00, 0x25, 0x4F, 0x01, 0x00, 0x26, +/* 000066C0 */ 0x4F, 0x01, 0x00, 0x65, 0x4F, 0x01, 0x00, 0x70, 0x4F, 0x01, 0x00, 0x71, 0x4F, 0x01, 0x00, 0x9A, +/* 000066D0 */ 0x4F, 0x01, 0x00, 0x9B, 0x4F, 0x01, 0x00, 0xEB, 0x4F, 0x01, 0x00, 0x6E, 0x50, 0x01, 0x00, 0x9A, +/* 000066E0 */ 0x50, 0x01, 0x00, 0xED, 0x50, 0x01, 0x00, 0xFB, 0x50, 0x01, 0x00, 0xFC, 0x50, 0x01, 0x00, 0x5D, +/* 000066F0 */ 0x51, 0x01, 0x00, 0x5E, 0x51, 0x01, 0x00, 0x8A, 0x51, 0x01, 0x00, 0xCA, 0x51, 0x01, 0x00, 0xCB, +/* 00006700 */ 0x51, 0x01, 0x00, 0x0D, 0x52, 0x01, 0x00, 0x0E, 0x52, 0x01, 0x00, 0x2E, 0x52, 0x01, 0x00, 0x3A, +/* 00006710 */ 0x52, 0x01, 0x00, 0x3B, 0x52, 0x01, 0x00, 0x70, 0x52, 0x01, 0x00, 0xA5, 0x52, 0x01, 0x00, 0xCE, +/* 00006720 */ 0x52, 0x01, 0x00, 0xEB, 0x52, 0x01, 0x00, 0x0A, 0x53, 0x01, 0x00, 0x2B, 0x53, 0x01, 0x00, 0x37, +/* 00006730 */ 0x53, 0x01, 0x00, 0x38, 0x53, 0x01, 0x00, 0x78, 0x53, 0x01, 0x00, 0x98, 0x53, 0x01, 0x00, 0xB4, +/* 00006740 */ 0x53, 0x01, 0x00, 0xD3, 0x53, 0x01, 0x00, 0xF2, 0x53, 0x01, 0x00, 0xFE, 0x53, 0x01, 0x00, 0xFF, +/* 00006750 */ 0x53, 0x01, 0x00, 0x98, 0x54, 0x01, 0x00, 0x05, 0x55, 0x01, 0x00, 0x11, 0x55, 0x01, 0x00, 0x4F, +/* 00006760 */ 0x55, 0x01, 0x00, 0x76, 0x55, 0x01, 0x00, 0x92, 0x55, 0x01, 0x00, 0xB1, 0x55, 0x01, 0x00, 0xD1, +/* 00006770 */ 0x55, 0x01, 0x00, 0xDD, 0x55, 0x01, 0x00, 0xDE, 0x55, 0x01, 0x00, 0x1A, 0x56, 0x01, 0x00, 0x82, +/* 00006780 */ 0x56, 0x01, 0x00, 0xB9, 0x56, 0x01, 0x00, 0xEE, 0x56, 0x01, 0x00, 0x52, 0x57, 0x01, 0x00, 0x60, +/* 00006790 */ 0x57, 0x01, 0x00, 0x61, 0x57, 0x01, 0x00, 0x91, 0x57, 0x01, 0x00, 0xBA, 0x57, 0x01, 0x00, 0xC6, +/* 000067A0 */ 0x57, 0x01, 0x00, 0x01, 0x58, 0x01, 0x00, 0x1C, 0x58, 0x01, 0x00, 0x3B, 0x58, 0x01, 0x00, 0x5B, +/* 000067B0 */ 0x58, 0x01, 0x00, 0x77, 0x58, 0x01, 0x00, 0x83, 0x58, 0x01, 0x00, 0x84, 0x58, 0x01, 0x00, 0x02, +/* 000067C0 */ 0x59, 0x01, 0x00, 0x39, 0x59, 0x01, 0x00, 0x6E, 0x59, 0x01, 0x00, 0xD2, 0x59, 0x01, 0x00, 0xE0, +/* 000067D0 */ 0x59, 0x01, 0x00, 0xE1, 0x59, 0x01, 0x00, 0x0C, 0x5A, 0x01, 0x00, 0x26, 0x5A, 0x01, 0x00, 0x3E, +/* 000067E0 */ 0x5A, 0x01, 0x00, 0x66, 0x5A, 0x01, 0x00, 0x8F, 0x5A, 0x01, 0x00, 0xB8, 0x5A, 0x01, 0x00, 0xE4, +/* 000067F0 */ 0x5A, 0x01, 0x00, 0x10, 0x5B, 0x01, 0x00, 0x33, 0x5B, 0x01, 0x00, 0x5C, 0x5B, 0x01, 0x00, 0x8F, +/* 00006800 */ 0x5B, 0x01, 0x00, 0xFE, 0x5B, 0x01, 0x00, 0x4F, 0x5C, 0x01, 0x00, 0x70, 0x5C, 0x01, 0x00, 0x82, +/* 00006810 */ 0x5C, 0x01, 0x00, 0x92, 0x5C, 0x01, 0x00, 0x9E, 0x5C, 0x01, 0x00, 0xE2, 0x5C, 0x01, 0x00, 0x06, +/* 00006820 */ 0x5D, 0x01, 0x00, 0x25, 0x5D, 0x01, 0x00, 0x45, 0x5D, 0x01, 0x00, 0x61, 0x5D, 0x01, 0x00, 0x6D, +/* 00006830 */ 0x5D, 0x01, 0x00, 0x6E, 0x5D, 0x01, 0x00, 0x8A, 0x5D, 0x01, 0x00, 0x94, 0x5D, 0x01, 0x00, 0x95, +/* 00006840 */ 0x5D, 0x01, 0x00, 0xC6, 0x5D, 0x01, 0x00, 0xE5, 0x5D, 0x01, 0x00, 0x77, 0x5E, 0x01, 0x00, 0x09, +/* 00006850 */ 0x5F, 0x01, 0x00, 0x9B, 0x5F, 0x01, 0x00, 0x2D, 0x60, 0x01, 0x00, 0x33, 0x60, 0x01, 0x00, 0x34, +/* 00006860 */ 0x60, 0x01, 0x00, 0x3A, 0x60, 0x01, 0x00, 0x42, 0x60, 0x01, 0x00, 0x49, 0x60, 0x01, 0x00, 0x50, +/* 00006870 */ 0x60, 0x01, 0x00, 0x57, 0x60, 0x01, 0x00, 0x5E, 0x60, 0x01, 0x00, 0x65, 0x60, 0x01, 0x00, 0x6C, +/* 00006880 */ 0x60, 0x01, 0x00, 0x8A, 0x60, 0x01, 0x00, 0x91, 0x60, 0x01, 0x00, 0x98, 0x60, 0x01, 0x00, 0x9F, +/* 00006890 */ 0x60, 0x01, 0x00, 0xA6, 0x60, 0x01, 0x00, 0xAD, 0x60, 0x01, 0x00, 0xB4, 0x60, 0x01, 0x00, 0xBC, +/* 000068A0 */ 0x60, 0x01, 0x00, 0xC7, 0x60, 0x01, 0x00, 0xC8, 0x60, 0x01, 0x00, 0xFC, 0x60, 0x01, 0x00, 0x32, +/* 000068B0 */ 0x61, 0x01, 0x00, 0x38, 0x61, 0x01, 0x00, 0x6D, 0x61, 0x01, 0x00, 0xA4, 0x61, 0x01, 0x00, 0xAA, +/* 000068C0 */ 0x61, 0x01, 0x00, 0xAB, 0x61, 0x01, 0x00, 0xD0, 0x61, 0x01, 0x00, 0xFB, 0x61, 0x01, 0x00, 0x30, +/* 000068D0 */ 0x62, 0x01, 0x00, 0x54, 0x62, 0x01, 0x00, 0x5E, 0x62, 0x01, 0x00, 0x5F, 0x62, 0x01, 0x00, 0x93, +/* 000068E0 */ 0x62, 0x01, 0x00, 0xAA, 0x62, 0x01, 0x00, 0xF9, 0x62, 0x01, 0x00, 0x2B, 0x63, 0x01, 0x00, 0x4F, +/* 000068F0 */ 0x63, 0x01, 0x00, 0x60, 0x63, 0x01, 0x00, 0x86, 0x63, 0x01, 0x00, 0x90, 0x63, 0x01, 0x00, 0x91, +/* 00006900 */ 0x63, 0x01, 0x00, 0xB1, 0x63, 0x01, 0x00, 0xB8, 0x63, 0x01, 0x00, 0xB9, 0x63, 0x01, 0x00, 0xFF, +/* 00006910 */ 0x63, 0x01, 0x00, 0x4E, 0x64, 0x01, 0x00, 0x6D, 0x64, 0x01, 0x00, 0xBB, 0x64, 0x01, 0x00, 0xEE, +/* 00006920 */ 0x64, 0x01, 0x00, 0x1E, 0x65, 0x01, 0x00, 0x5E, 0x65, 0x01, 0x00, 0x8A, 0x65, 0x01, 0x00, 0x98, +/* 00006930 */ 0x65, 0x01, 0x00, 0xA2, 0x65, 0x01, 0x00, 0xBD, 0x65, 0x01, 0x00, 0xC4, 0x65, 0x01, 0x00, 0xC5, +/* 00006940 */ 0x65, 0x01, 0x00, 0xFC, 0x65, 0x01, 0x00, 0x3C, 0x66, 0x01, 0x00, 0x5B, 0x66, 0x01, 0x00, 0x7B, +/* 00006950 */ 0x66, 0x01, 0x00, 0xA3, 0x66, 0x01, 0x00, 0xB1, 0x66, 0x01, 0x00, 0xFB, 0x66, 0x01, 0x00, 0x17, +/* 00006960 */ 0x67, 0x01, 0x00, 0x28, 0x67, 0x01, 0x00, 0x43, 0x67, 0x01, 0x00, 0x4D, 0x67, 0x01, 0x00, 0x54, +/* 00006970 */ 0x67, 0x01, 0x00, 0x55, 0x67, 0x01, 0x00, 0x8F, 0x67, 0x01, 0x00, 0xA8, 0x67, 0x01, 0x00, 0xCB, +/* 00006980 */ 0x67, 0x01, 0x00, 0xED, 0x67, 0x01, 0x00, 0x11, 0x68, 0x01, 0x00, 0x1F, 0x68, 0x01, 0x00, 0x36, +/* 00006990 */ 0x68, 0x01, 0x00, 0x40, 0x68, 0x01, 0x00, 0x47, 0x68, 0x01, 0x00, 0x48, 0x68, 0x01, 0x00, 0xAD, +/* 000069A0 */ 0x68, 0x01, 0x00, 0xD9, 0x68, 0x01, 0x00, 0x1F, 0x69, 0x01, 0x00, 0x35, 0x69, 0x01, 0x00, 0x3F, +/* 000069B0 */ 0x69, 0x01, 0x00, 0x46, 0x69, 0x01, 0x00, 0x47, 0x69, 0x01, 0x00, 0x78, 0x69, 0x01, 0x00, 0xAF, +/* 000069C0 */ 0x69, 0x01, 0x00, 0xB6, 0x69, 0x01, 0x00, 0xB7, 0x69, 0x01, 0x00, 0xF9, 0x69, 0x01, 0x00, 0x3F, +/* 000069D0 */ 0x6A, 0x01, 0x00, 0x6B, 0x6A, 0x01, 0x00, 0xAF, 0x6A, 0x01, 0x00, 0xDA, 0x6A, 0x01, 0x00, 0x03, +/* 000069E0 */ 0x6B, 0x01, 0x00, 0x2F, 0x6B, 0x01, 0x00, 0x41, 0x6B, 0x01, 0x00, 0x93, 0x6B, 0x01, 0x00, 0x08, +/* 000069F0 */ 0x6C, 0x01, 0x00, 0x16, 0x6C, 0x01, 0x00, 0x61, 0x6C, 0x01, 0x00, 0xA3, 0x6C, 0x01, 0x00, 0x13, +/* 00006A00 */ 0x6D, 0x01, 0x00, 0x46, 0x6D, 0x01, 0x00, 0x6E, 0x6D, 0x01, 0x00, 0x78, 0x6D, 0x01, 0x00, 0x79, +/* 00006A10 */ 0x6D, 0x01, 0x00, 0xA1, 0x6D, 0x01, 0x00, 0xC4, 0x6D, 0x01, 0x00, 0xFB, 0x6D, 0x01, 0x00, 0x19, +/* 00006A20 */ 0x6E, 0x01, 0x00, 0x2A, 0x6E, 0x01, 0x00, 0x4D, 0x6E, 0x01, 0x00, 0x57, 0x6E, 0x01, 0x00, 0x5D, +/* 00006A30 */ 0x6E, 0x01, 0x00, 0x5E, 0x6E, 0x01, 0x00, 0x9E, 0x6E, 0x01, 0x00, 0xF1, 0x6E, 0x01, 0x00, 0x1D, +/* 00006A40 */ 0x6F, 0x01, 0x00, 0x6E, 0x6F, 0x01, 0x00, 0x99, 0x6F, 0x01, 0x00, 0xC2, 0x6F, 0x01, 0x00, 0xEE, +/* 00006A50 */ 0x6F, 0x01, 0x00, 0x00, 0x70, 0x01, 0x00, 0x60, 0x70, 0x01, 0x00, 0xB1, 0x70, 0x01, 0x00, 0xDB, +/* 00006A60 */ 0x70, 0x01, 0x00, 0x14, 0x71, 0x01, 0x00, 0x4E, 0x71, 0x01, 0x00, 0x5C, 0x71, 0x01, 0x00, 0xA7, +/* 00006A70 */ 0x71, 0x01, 0x00, 0xE9, 0x71, 0x01, 0x00, 0x66, 0x72, 0x01, 0x00, 0x99, 0x72, 0x01, 0x00, 0xC1, +/* 00006A80 */ 0x72, 0x01, 0x00, 0xCB, 0x72, 0x01, 0x00, 0xEA, 0x72, 0x01, 0x00, 0xF0, 0x72, 0x01, 0x00, 0xF1, +/* 00006A90 */ 0x72, 0x01, 0x00, 0x23, 0x73, 0x01, 0x00, 0x43, 0x73, 0x01, 0x00, 0x67, 0x73, 0x01, 0x00, 0x71, +/* 00006AA0 */ 0x73, 0x01, 0x00, 0x72, 0x73, 0x01, 0x00, 0xBD, 0x73, 0x01, 0x00, 0xD3, 0x73, 0x01, 0x00, 0xF1, +/* 00006AB0 */ 0x73, 0x01, 0x00, 0xFB, 0x73, 0x01, 0x00, 0xFC, 0x73, 0x01, 0x00, 0x71, 0x74, 0x01, 0x00, 0xC1, +/* 00006AC0 */ 0x74, 0x01, 0x00, 0x06, 0x75, 0x01, 0x00, 0x07, 0x75, 0x01, 0x00, 0x7A, 0x75, 0x01, 0x00, 0x93, +/* 00006AD0 */ 0x75, 0x01, 0x00, 0xB7, 0x75, 0x01, 0x00, 0xDB, 0x75, 0x01, 0x00, 0x33, 0x76, 0x01, 0x00, 0x76, +/* 00006AE0 */ 0x76, 0x01, 0x00, 0xFF, 0x76, 0x01, 0x00, 0x00, 0x77, 0x01, 0x00, 0x1B, 0x77, 0x01, 0x00, 0x21, +/* 00006AF0 */ 0x77, 0x01, 0x00, 0x22, 0x77, 0x01, 0x00, 0x7C, 0x77, 0x01, 0x00, 0xB2, 0x77, 0x01, 0x00, 0xD2, +/* 00006B00 */ 0x77, 0x01, 0x00, 0x2F, 0x78, 0x01, 0x00, 0x62, 0x78, 0x01, 0x00, 0x6C, 0x78, 0x01, 0x00, 0x6D, +/* 00006B10 */ 0x78, 0x01, 0x00, 0x84, 0x78, 0x01, 0x00, 0xD4, 0x78, 0x01, 0x00, 0x30, 0x79, 0x01, 0x00, 0x40, +/* 00006B20 */ 0x79, 0x01, 0x00, 0x4A, 0x79, 0x01, 0x00, 0x4B, 0x79, 0x01, 0x00, 0xDA, 0x79, 0x01, 0x00, 0x60, +/* 00006B30 */ 0x7A, 0x01, 0x00, 0xDB, 0x7A, 0x01, 0x00, 0x24, 0x7B, 0x01, 0x00, 0x5A, 0x7B, 0x01, 0x00, 0x5B, +/* 00006B40 */ 0x7B, 0x01, 0x00, 0xA7, 0x7B, 0x01, 0x00, 0xC6, 0x7B, 0x01, 0x00, 0xDD, 0x7B, 0x01, 0x00, 0x2E, +/* 00006B50 */ 0x7C, 0x01, 0x00, 0xA8, 0x7C, 0x01, 0x00, 0xCC, 0x7C, 0x01, 0x00, 0x27, 0x7D, 0x01, 0x00, 0xA3, +/* 00006B60 */ 0x7D, 0x01, 0x00, 0xB5, 0x7D, 0x01, 0x00, 0xC6, 0x7D, 0x01, 0x00, 0xE6, 0x7D, 0x01, 0x00, 0xF0, +/* 00006B70 */ 0x7D, 0x01, 0x00, 0xF1, 0x7D, 0x01, 0x00, 0x60, 0x7E, 0x01, 0x00, 0x8E, 0x7E, 0x01, 0x00, 0xC3, +/* 00006B80 */ 0x7E, 0x01, 0x00, 0xEC, 0x7E, 0x01, 0x00, 0x04, 0x7F, 0x01, 0x00, 0x3E, 0x7F, 0x01, 0x00, 0x68, +/* 00006B90 */ 0x7F, 0x01, 0x00, 0x8D, 0x7F, 0x01, 0x00, 0xA6, 0x7F, 0x01, 0x00, 0xCD, 0x7F, 0x01, 0x00, 0xDF, +/* 00006BA0 */ 0x7F, 0x01, 0x00, 0xED, 0x7F, 0x01, 0x00, 0xEE, 0x7F, 0x01, 0x00, 0x39, 0x80, 0x01, 0x00, 0x4A, +/* 00006BB0 */ 0x80, 0x01, 0x00, 0x6C, 0x80, 0x01, 0x00, 0x76, 0x80, 0x01, 0x00, 0x77, 0x80, 0x01, 0x00, 0x95, +/* 00006BC0 */ 0x80, 0x01, 0x00, 0xB3, 0x80, 0x01, 0x00, 0xD1, 0x80, 0x01, 0x00, 0x02, 0x81, 0x01, 0x00, 0x14, +/* 00006BD0 */ 0x81, 0x01, 0x00, 0x1A, 0x81, 0x01, 0x00, 0x1B, 0x81, 0x01, 0x00, 0x7B, 0x81, 0x01, 0x00, 0xD3, +/* 00006BE0 */ 0x81, 0x01, 0x00, 0x06, 0x82, 0x01, 0x00, 0x07, 0x82, 0x01, 0x00, 0x38, 0x82, 0x01, 0x00, 0x39, +/* 00006BF0 */ 0x82, 0x01, 0x00, 0x6D, 0x82, 0x01, 0x00, 0x98, 0x82, 0x01, 0x00, 0x01, 0x83, 0x01, 0x00, 0x32, +/* 00006C00 */ 0x83, 0x01, 0x00, 0x53, 0x83, 0x01, 0x00, 0x61, 0x83, 0x01, 0x00, 0x6B, 0x83, 0x01, 0x00, 0xC0, +/* 00006C10 */ 0x83, 0x01, 0x00, 0xC6, 0x83, 0x01, 0x00, 0xC7, 0x83, 0x01, 0x00, 0x0A, 0x84, 0x01, 0x00, 0x37, +/* 00006C20 */ 0x84, 0x01, 0x00, 0x65, 0x84, 0x01, 0x00, 0x8C, 0x84, 0x01, 0x00, 0xB8, 0x84, 0x01, 0x00, 0xC2, +/* 00006C30 */ 0x84, 0x01, 0x00, 0xC3, 0x84, 0x01, 0x00, 0xE5, 0x84, 0x01, 0x00, 0x0A, 0x85, 0x01, 0x00, 0x32, +/* 00006C40 */ 0x85, 0x01, 0x00, 0x40, 0x85, 0x01, 0x00, 0x41, 0x85, 0x01, 0x00, 0x6D, 0x85, 0x01, 0x00, 0xBA, +/* 00006C50 */ 0x85, 0x01, 0x00, 0xD3, 0x85, 0x01, 0x00, 0x11, 0x86, 0x01, 0x00, 0x45, 0x86, 0x01, 0x00, 0x5A, +/* 00006C60 */ 0x86, 0x01, 0x00, 0x89, 0x86, 0x01, 0x00, 0x97, 0x86, 0x01, 0x00, 0xA8, 0x86, 0x01, 0x00, 0xF9, +/* 00006C70 */ 0x86, 0x01, 0x00, 0x29, 0x87, 0x01, 0x00, 0x8F, 0x87, 0x01, 0x00, 0x99, 0x87, 0x01, 0x00, 0x9A, +/* 00006C80 */ 0x87, 0x01, 0x00, 0xC2, 0x87, 0x01, 0x00, 0xC9, 0x87, 0x01, 0x00, 0xCA, 0x87, 0x01, 0x00, 0xEC, +/* 00006C90 */ 0x87, 0x01, 0x00, 0x0A, 0x88, 0x01, 0x00, 0x2F, 0x88, 0x01, 0x00, 0x51, 0x88, 0x01, 0x00, 0x81, +/* 00006CA0 */ 0x88, 0x01, 0x00, 0x93, 0x88, 0x01, 0x00, 0xD3, 0x88, 0x01, 0x00, 0xE2, 0x88, 0x01, 0x00, 0xE3, +/* 00006CB0 */ 0x88, 0x01, 0x00, 0x08, 0x89, 0x01, 0x00, 0x48, 0x89, 0x01, 0x00, 0x57, 0x89, 0x01, 0x00, 0x58, +/* 00006CC0 */ 0x89, 0x01, 0x00, 0x7D, 0x89, 0x01, 0x00, 0xB7, 0x89, 0x01, 0x00, 0xC6, 0x89, 0x01, 0x00, 0xC7, +/* 00006CD0 */ 0x89, 0x01, 0x00, 0xF4, 0x89, 0x01, 0x00, 0x35, 0x8A, 0x01, 0x00, 0x44, 0x8A, 0x01, 0x00, 0x45, +/* 00006CE0 */ 0x8A, 0x01, 0x00, 0x6A, 0x8A, 0x01, 0x00, 0x8F, 0x8A, 0x01, 0x00, 0xAC, 0x8A, 0x01, 0x00, 0xE0, +/* 00006CF0 */ 0x8A, 0x01, 0x00, 0x1B, 0x8B, 0x01, 0x00, 0x2D, 0x8B, 0x01, 0x00, 0x49, 0x8B, 0x01, 0x00, 0x58, +/* 00006D00 */ 0x8B, 0x01, 0x00, 0x59, 0x8B, 0x01, 0x00, 0x84, 0x8B, 0x01, 0x00, 0xB0, 0x8B, 0x01, 0x00, 0xCC, +/* 00006D10 */ 0x8B, 0x01, 0x00, 0x1C, 0x8C, 0x01, 0x00, 0x41, 0x8C, 0x01, 0x00, 0x57, 0x8C, 0x01, 0x00, 0x88, +/* 00006D20 */ 0x8C, 0x01, 0x00, 0x9A, 0x8C, 0x01, 0x00, 0xA8, 0x8C, 0x01, 0x00, 0xB9, 0x8C, 0x01, 0x00, 0xC3, +/* 00006D30 */ 0x8C, 0x01, 0x00, 0xC4, 0x8C, 0x01, 0x00, 0xEB, 0x8C, 0x01, 0x00, 0x2F, 0x8D, 0x01, 0x00, 0x56, +/* 00006D40 */ 0x8D, 0x01, 0x00, 0x57, 0x8D, 0x01, 0x00, 0x7A, 0x8D, 0x01, 0x00, 0x9F, 0x8D, 0x01, 0x00, 0xD9, +/* 00006D50 */ 0x8D, 0x01, 0x00, 0xE7, 0x8D, 0x01, 0x00, 0xE8, 0x8D, 0x01, 0x00, 0x0C, 0x8E, 0x01, 0x00, 0x3E, +/* 00006D60 */ 0x8E, 0x01, 0x00, 0x4C, 0x8E, 0x01, 0x00, 0x4D, 0x8E, 0x01, 0x00, 0x71, 0x8E, 0x01, 0x00, 0xA3, +/* 00006D70 */ 0x8E, 0x01, 0x00, 0xB1, 0x8E, 0x01, 0x00, 0xB2, 0x8E, 0x01, 0x00, 0x19, 0x8F, 0x01, 0x00, 0xB4, +/* 00006D80 */ 0x8F, 0x01, 0x00, 0xC2, 0x8F, 0x01, 0x00, 0xC3, 0x8F, 0x01, 0x00, 0xDD, 0x8F, 0x01, 0x00, 0xE7, +/* 00006D90 */ 0x8F, 0x01, 0x00, 0xE8, 0x8F, 0x01, 0x00, 0x01, 0x90, 0x01, 0x00, 0x07, 0x90, 0x01, 0x00, 0x08, +/* 00006DA0 */ 0x90, 0x01, 0x00, 0x56, 0x90, 0x01, 0x00, 0x82, 0x90, 0x01, 0x00, 0x83, 0x90, 0x01, 0x00, 0xB2, +/* 00006DB0 */ 0x90, 0x01, 0x00, 0xF2, 0x90, 0x01, 0x00, 0xF3, 0x90, 0x01, 0x00, 0x54, 0x91, 0x01, 0x00, 0xD6, +/* 00006DC0 */ 0x91, 0x01, 0x00, 0xE4, 0x91, 0x01, 0x00, 0xE5, 0x91, 0x01, 0x00, 0x14, 0x92, 0x01, 0x00, 0x25, +/* 00006DD0 */ 0x92, 0x01, 0x00, 0x42, 0x92, 0x01, 0x00, 0x4C, 0x92, 0x01, 0x00, 0x52, 0x92, 0x01, 0x00, 0x53, +/* 00006DE0 */ 0x92, 0x01, 0x00, 0x6D, 0x92, 0x01, 0x00, 0x97, 0x92, 0x01, 0x00, 0xC1, 0x92, 0x01, 0x00, 0xC7, +/* 00006DF0 */ 0x92, 0x01, 0x00, 0xC8, 0x92, 0x01, 0x00, 0x00, 0x93, 0x01, 0x00, 0x4C, 0x93, 0x01, 0x00, 0xAA, +/* 00006E00 */ 0x93, 0x01, 0x00, 0xD0, 0x93, 0x01, 0x00, 0x15, 0x94, 0x01, 0x00, 0x79, 0x94, 0x01, 0x00, 0xF9, +/* 00006E10 */ 0x94, 0x01, 0x00, 0xFA, 0x94, 0x01, 0x00, 0x6C, 0x95, 0x01, 0x00, 0x9D, 0x95, 0x01, 0x00, 0xEC, +/* 00006E20 */ 0x95, 0x01, 0x00, 0x3E, 0x96, 0x01, 0x00, 0x92, 0x96, 0x01, 0x00, 0xCA, 0x96, 0x01, 0x00, 0x1C, +/* 00006E30 */ 0x97, 0x01, 0x00, 0x6E, 0x97, 0x01, 0x00, 0xC3, 0x97, 0x01, 0x00, 0x2F, 0x98, 0x01, 0x00, 0x85, +/* 00006E40 */ 0x98, 0x01, 0x00, 0x86, 0x98, 0x01, 0x00, 0xA5, 0x98, 0x01, 0x00, 0xC4, 0x98, 0x01, 0x00, 0xF6, +/* 00006E50 */ 0x98, 0x01, 0x00, 0xF7, 0x98, 0x01, 0x00, 0x6E, 0x99, 0x01, 0x00, 0xDB, 0x99, 0x01, 0x00, 0x2E, +/* 00006E60 */ 0x9A, 0x01, 0x00, 0x71, 0x9A, 0x01, 0x00, 0x72, 0x9A, 0x01, 0x00, 0xEF, 0x9A, 0x01, 0x00, 0x83, +/* 00006E70 */ 0x9B, 0x01, 0x00, 0x06, 0x9C, 0x01, 0x00, 0x89, 0x9C, 0x01, 0x00, 0xFC, 0x9C, 0x01, 0x00, 0xFD, +/* 00006E80 */ 0x9C, 0x01, 0x00, 0x67, 0x9D, 0x01, 0x00, 0xE0, 0x9D, 0x01, 0x00, 0xE1, 0x9D, 0x01, 0x00, 0x44, +/* 00006E90 */ 0x9E, 0x01, 0x00, 0xD3, 0x9E, 0x01, 0x00, 0x7C, 0x9F, 0x01, 0x00, 0x10, 0xA0, 0x01, 0x00, 0xA7, +/* 00006EA0 */ 0xA0, 0x01, 0x00, 0x4B, 0xA1, 0x01, 0x00, 0x5F, 0xA1, 0x01, 0x00, 0x60, 0xA1, 0x01, 0x00, 0xE1, +/* 00006EB0 */ 0xA1, 0x01, 0x00, 0x4D, 0xA2, 0x01, 0x00, 0xBD, 0xA2, 0x01, 0x00, 0x2D, 0xA3, 0x01, 0x00, 0x9F, +/* 00006EC0 */ 0xA3, 0x01, 0x00, 0x13, 0xA4, 0x01, 0x00, 0x87, 0xA4, 0x01, 0x00, 0xD1, 0xA4, 0x01, 0x00, 0xD2, +/* 00006ED0 */ 0xA4, 0x01, 0x00, 0x3F, 0xA5, 0x01, 0x00, 0x40, 0xA5, 0x01, 0x00, 0xA6, 0xA5, 0x01, 0x00, 0x31, +/* 00006EE0 */ 0xA6, 0x01, 0x00, 0xA7, 0xA6, 0x01, 0x00, 0xAD, 0xA6, 0x01, 0x00, 0xAE, 0xA6, 0x01, 0x00, 0xDC, +/* 00006EF0 */ 0xA6, 0x01, 0x00, 0x04, 0xA7, 0x01, 0x00, 0x05, 0xA7, 0x01, 0x00, 0x26, 0xA7, 0x01, 0x00, 0x4E, +/* 00006F00 */ 0xA7, 0x01, 0x00, 0x58, 0xA7, 0x01, 0x00, 0x59, 0xA7, 0x01, 0x00, 0xA5, 0xA7, 0x01, 0x00, 0xAB, +/* 00006F10 */ 0xA7, 0x01, 0x00, 0xAC, 0xA7, 0x01, 0x00, 0x23, 0xA8, 0x01, 0x00, 0x52, 0xA8, 0x01, 0x00, 0x80, +/* 00006F20 */ 0xA8, 0x01, 0x00, 0x97, 0xA8, 0x01, 0x00, 0xA1, 0xA8, 0x01, 0x00, 0xA2, 0xA8, 0x01, 0x00, 0xCD, +/* 00006F30 */ 0xA8, 0x01, 0x00, 0xEE, 0xA8, 0x01, 0x00, 0xF8, 0xA8, 0x01, 0x00, 0xF9, 0xA8, 0x01, 0x00, 0x27, +/* 00006F40 */ 0xA9, 0x01, 0x00, 0x61, 0xA9, 0x01, 0x00, 0x62, 0xA9, 0x01, 0x00, 0x97, 0xA9, 0x01, 0x00, 0xAE, +/* 00006F50 */ 0xA9, 0x01, 0x00, 0xC1, 0xA9, 0x01, 0x00, 0xC2, 0xA9, 0x01, 0x00, 0x00, 0xAA, 0x01, 0x00, 0x61, +/* 00006F60 */ 0xAA, 0x01, 0x00, 0x9D, 0xAA, 0x01, 0x00, 0xAB, 0xAA, 0x01, 0x00, 0xAC, 0xAA, 0x01, 0x00, 0xDD, +/* 00006F70 */ 0xAA, 0x01, 0x00, 0xDE, 0xAA, 0x01, 0x00, 0x0F, 0xAB, 0x01, 0x00, 0x4F, 0xAB, 0x01, 0x00, 0x5D, +/* 00006F80 */ 0xAB, 0x01, 0x00, 0x5E, 0xAB, 0x01, 0x00, 0x94, 0xAB, 0x01, 0x00, 0x95, 0xAB, 0x01, 0x00, 0xF6, +/* 00006F90 */ 0xAB, 0x01, 0x00, 0x67, 0xAC, 0x01, 0x00, 0x75, 0xAC, 0x01, 0x00, 0x81, 0xAC, 0x01, 0x00, 0x82, +/* 00006FA0 */ 0xAC, 0x01, 0x00, 0x97, 0xAC, 0x01, 0x00, 0x9D, 0xAC, 0x01, 0x00, 0x9E, 0xAC, 0x01, 0x00, 0xED, +/* 00006FB0 */ 0xAC, 0x01, 0x00, 0x06, 0xAD, 0x01, 0x00, 0x1D, 0xAD, 0x01, 0x00, 0x72, 0xAD, 0x01, 0x00, 0x84, +/* 00006FC0 */ 0xAD, 0x01, 0x00, 0xE2, 0xAD, 0x01, 0x00, 0x09, 0xAE, 0x01, 0x00, 0x96, 0xAE, 0x01, 0x00, 0xBD, +/* 00006FD0 */ 0xAE, 0x01, 0x00, 0xCF, 0xAE, 0x01, 0x00, 0xEA, 0xAE, 0x01, 0x00, 0x11, 0xAF, 0x01, 0x00, 0x73, +/* 00006FE0 */ 0xAF, 0x01, 0x00, 0x81, 0xAF, 0x01, 0x00, 0x8D, 0xAF, 0x01, 0x00, 0xF5, 0xAF, 0x01, 0x00, 0x0C, +/* 00006FF0 */ 0xB0, 0x01, 0x00, 0x12, 0xB0, 0x01, 0x00, 0x13, 0xB0, 0x01, 0x00, 0x69, 0xB0, 0x01, 0x00, 0x9C, +/* 00007000 */ 0xB0, 0x01, 0x00, 0xD5, 0xB0, 0x01, 0x00, 0xDF, 0xB0, 0x01, 0x00, 0xE0, 0xB0, 0x01, 0x00, 0x18, +/* 00007010 */ 0xB1, 0x01, 0x00, 0x53, 0xB1, 0x01, 0x00, 0x8C, 0xB1, 0x01, 0x00, 0x96, 0xB1, 0x01, 0x00, 0x97, +/* 00007020 */ 0xB1, 0x01, 0x00, 0xCC, 0xB1, 0x01, 0x00, 0xD2, 0xB1, 0x01, 0x00, 0xD3, 0xB1, 0x01, 0x00, 0x24, +/* 00007030 */ 0xB2, 0x01, 0x00, 0x57, 0xB2, 0x01, 0x00, 0x90, 0xB2, 0x01, 0x00, 0x9A, 0xB2, 0x01, 0x00, 0x9B, +/* 00007040 */ 0xB2, 0x01, 0x00, 0xD3, 0xB2, 0x01, 0x00, 0x0E, 0xB3, 0x01, 0x00, 0x47, 0xB3, 0x01, 0x00, 0x51, +/* 00007050 */ 0xB3, 0x01, 0x00, 0x52, 0xB3, 0x01, 0x00, 0x82, 0xB3, 0x01, 0x00, 0x88, 0xB3, 0x01, 0x00, 0x89, +/* 00007060 */ 0xB3, 0x01, 0x00, 0xB2, 0xB3, 0x01, 0x00, 0xED, 0xB3, 0x01, 0x00, 0x02, 0xB4, 0x01, 0x00, 0x35, +/* 00007070 */ 0xB4, 0x01, 0x00, 0x36, 0xB4, 0x01, 0x00, 0x64, 0xB4, 0x01, 0x00, 0x91, 0xB4, 0x01, 0x00, 0x92, +/* 00007080 */ 0xB4, 0x01, 0x00, 0xC4, 0xB4, 0x01, 0x00, 0xFA, 0xB4, 0x01, 0x00, 0xFB, 0xB4, 0x01, 0x00, 0x41, +/* 00007090 */ 0xB5, 0x01, 0x00, 0xB8, 0xB5, 0x01, 0x00, 0xCA, 0xB5, 0x01, 0x00, 0xD8, 0xB5, 0x01, 0x00, 0xE2, +/* 000070A0 */ 0xB5, 0x01, 0x00, 0xE3, 0xB5, 0x01, 0x00, 0x2B, 0xB6, 0x01, 0x00, 0xAD, 0xB6, 0x01, 0x00, 0xBE, +/* 000070B0 */ 0xB6, 0x01, 0x00, 0x20, 0xB7, 0x01, 0x00, 0x2A, 0xB7, 0x01, 0x00, 0x31, 0xB7, 0x01, 0x00, 0x32, +/* 000070C0 */ 0xB7, 0x01, 0x00, 0x6E, 0xB7, 0x01, 0x00, 0xCF, 0xB7, 0x01, 0x00, 0xD0, 0xB7, 0x01, 0x00, 0x43, +/* 000070D0 */ 0xB8, 0x01, 0x00, 0x93, 0xB8, 0x01, 0x00, 0xE4, 0xB8, 0x01, 0x00, 0x67, 0xB9, 0x01, 0x00, 0xBE, +/* 000070E0 */ 0xB9, 0x01, 0x00, 0x26, 0xBA, 0x01, 0x00, 0x4C, 0xBA, 0x01, 0x00, 0x4D, 0xBA, 0x01, 0x00, 0xA6, +/* 000070F0 */ 0xBA, 0x01, 0x00, 0x31, 0xBB, 0x01, 0x00, 0x8C, 0xBB, 0x01, 0x00, 0xF8, 0xBB, 0x01, 0x00, 0x1E, +/* 00007100 */ 0xBC, 0x01, 0x00, 0x1F, 0xBC, 0x01, 0x00, 0x7C, 0xBC, 0x01, 0x00, 0x0B, 0xBD, 0x01, 0x00, 0x68, +/* 00007110 */ 0xBD, 0x01, 0x00, 0xD6, 0xBD, 0x01, 0x00, 0xFC, 0xBD, 0x01, 0x00, 0xFD, 0xBD, 0x01, 0x00, 0x3E, +/* 00007120 */ 0xBE, 0x01, 0x00, 0xB1, 0xBE, 0x01, 0x00, 0xEB, 0xBE, 0x01, 0x00, 0x46, 0xBF, 0x01, 0x00, 0x6C, +/* 00007130 */ 0xBF, 0x01, 0x00, 0x6D, 0xBF, 0x01, 0x00, 0xC6, 0xBF, 0x01, 0x00, 0x20, 0xC0, 0x01, 0x00, 0x6F, +/* 00007140 */ 0xC0, 0x01, 0x00, 0xEB, 0xC0, 0x01, 0x00, 0x4B, 0xC1, 0x01, 0x00, 0xAF, 0xC1, 0x01, 0x00, 0x15, +/* 00007150 */ 0xC2, 0x01, 0x00, 0x6E, 0xC2, 0x01, 0x00, 0x6F, 0xC2, 0x01, 0x00, 0xD6, 0xC2, 0x01, 0x00, 0x1B, +/* 00007160 */ 0xC3, 0x01, 0x00, 0x5E, 0xC3, 0x01, 0x00, 0x97, 0xC3, 0x01, 0x00, 0xD2, 0xC3, 0x01, 0x00, 0x0D, +/* 00007170 */ 0xC4, 0x01, 0x00, 0x4B, 0xC4, 0x01, 0x00, 0x88, 0xC4, 0x01, 0x00, 0xBD, 0xC4, 0x01, 0x00, 0x1E, +/* 00007180 */ 0xC5, 0x01, 0x00, 0x69, 0xC5, 0x01, 0x00, 0xB4, 0xC5, 0x01, 0x00, 0xFF, 0xC5, 0x01, 0x00, 0x49, +/* 00007190 */ 0xC6, 0x01, 0x00, 0x4A, 0xC6, 0x01, 0x00, 0xC9, 0xC6, 0x01, 0x00, 0x64, 0xC7, 0x01, 0x00, 0x84, +/* 000071A0 */ 0xC7, 0x01, 0x00, 0xA4, 0xC7, 0x01, 0x00, 0xC2, 0xC7, 0x01, 0x00, 0xD0, 0xC7, 0x01, 0x00, 0xD1, +/* 000071B0 */ 0xC7, 0x01, 0x00, 0x34, 0xC8, 0x01, 0x00, 0xAF, 0xC8, 0x01, 0x00, 0xEF, 0xC8, 0x01, 0x00, 0x20, +/* 000071C0 */ 0xC9, 0x01, 0x00, 0x9F, 0xC9, 0x01, 0x00, 0xF5, 0xC9, 0x01, 0x00, 0x39, 0xCA, 0x01, 0x00, 0x3A, +/* 000071D0 */ 0xCA, 0x01, 0x00, 0xB9, 0xCA, 0x01, 0x00, 0x01, 0xCB, 0x01, 0x00, 0x2A, 0xCB, 0x01, 0x00, 0x6F, +/* 000071E0 */ 0xCB, 0x01, 0x00, 0x81, 0xCB, 0x01, 0x00, 0x91, 0xCB, 0x01, 0x00, 0x92, 0xCB, 0x01, 0x00, 0xCA, +/* 000071F0 */ 0xCB, 0x01, 0x00, 0xD6, 0xCB, 0x01, 0x00, 0xEF, 0xCB, 0x01, 0x00, 0xF9, 0xCB, 0x01, 0x00, 0xFA, +/* 00007200 */ 0xCB, 0x01, 0x00, 0x4B, 0xCC, 0x01, 0x00, 0x79, 0xCC, 0x01, 0x00, 0xA4, 0xCC, 0x01, 0x00, 0xD0, +/* 00007210 */ 0xCC, 0x01, 0x00, 0x0B, 0xCD, 0x01, 0x00, 0x35, 0xCD, 0x01, 0x00, 0x3F, 0xCD, 0x01, 0x00, 0x40, +/* 00007220 */ 0xCD, 0x01, 0x00, 0x60, 0xCD, 0x01, 0x00, 0x83, 0xCD, 0x01, 0x00, 0xA5, 0xCD, 0x01, 0x00, 0xF9, +/* 00007230 */ 0xCD, 0x01, 0x00, 0x22, 0xCE, 0x01, 0x00, 0x8C, 0xCE, 0x01, 0x00, 0xA5, 0xCE, 0x01, 0x00, 0xF7, +/* 00007240 */ 0xCE, 0x01, 0x00, 0x40, 0xCF, 0x01, 0x00, 0x66, 0xCF, 0x01, 0x00, 0xC8, 0xCF, 0x01, 0x00, 0xD6, +/* 00007250 */ 0xCF, 0x01, 0x00, 0xE7, 0xCF, 0x01, 0x00, 0x30, 0xD0, 0x01, 0x00, 0x8C, 0xD0, 0x01, 0x00, 0xAB, +/* 00007260 */ 0xD0, 0x01, 0x00, 0xCD, 0xD0, 0x01, 0x00, 0xD7, 0xD0, 0x01, 0x00, 0xD8, 0xD0, 0x01, 0x00, 0xFF, +/* 00007270 */ 0xD0, 0x01, 0x00, 0x2B, 0xD1, 0x01, 0x00, 0x55, 0xD1, 0x01, 0x00, 0x5F, 0xD1, 0x01, 0x00, 0x60, +/* 00007280 */ 0xD1, 0x01, 0x00, 0xBC, 0xD1, 0x01, 0x00, 0x11, 0xD2, 0x01, 0x00, 0x37, 0xD2, 0x01, 0x00, 0x75, +/* 00007290 */ 0xD2, 0x01, 0x00, 0x8A, 0xD2, 0x01, 0x00, 0xCA, 0xD2, 0x01, 0x00, 0xD8, 0xD2, 0x01, 0x00, 0xE3, +/* 000072A0 */ 0xD2, 0x01, 0x00, 0xE4, 0xD2, 0x01, 0x00, 0x3A, 0xD3, 0x01, 0x00, 0x6D, 0xD3, 0x01, 0x00, 0xBA, +/* 000072B0 */ 0xD3, 0x01, 0x00, 0x0E, 0xD4, 0x01, 0x00, 0x38, 0xD4, 0x01, 0x00, 0x42, 0xD4, 0x01, 0x00, 0x43, +/* 000072C0 */ 0xD4, 0x01, 0x00, 0x85, 0xD4, 0x01, 0x00, 0xB2, 0xD4, 0x01, 0x00, 0x0C, 0xD5, 0x01, 0x00, 0x1D, +/* 000072D0 */ 0xD5, 0x01, 0x00, 0x71, 0xD5, 0x01, 0x00, 0x7B, 0xD5, 0x01, 0x00, 0x7C, 0xD5, 0x01, 0x00, 0xA2, +/* 000072E0 */ 0xD5, 0x01, 0x00, 0xA9, 0xD5, 0x01, 0x00, 0xAA, 0xD5, 0x01, 0x00, 0xDF, 0xD5, 0x01, 0x00, 0x01, +/* 000072F0 */ 0xD6, 0x01, 0x00, 0x02, 0xD6, 0x01, 0x00, 0x3E, 0xD6, 0x01, 0x00, 0x3F, 0xD6, 0x01, 0x00, 0x88, +/* 00007300 */ 0xD6, 0x01, 0x00, 0xBB, 0xD6, 0x01, 0x00, 0xEB, 0xD6, 0x01, 0x00, 0xFD, 0xD6, 0x01, 0x00, 0xFE, +/* 00007310 */ 0xD6, 0x01, 0x00, 0x8D, 0xD7, 0x01, 0x00, 0xE3, 0xD7, 0x01, 0x00, 0xF5, 0xD7, 0x01, 0x00, 0xF6, +/* 00007320 */ 0xD7, 0x01, 0x00, 0x2F, 0xD8, 0x01, 0x00, 0x30, 0xD8, 0x01, 0x00, 0x53, 0xD8, 0x01, 0x00, 0x89, +/* 00007330 */ 0xD8, 0x01, 0x00, 0xBF, 0xD8, 0x01, 0x00, 0xD8, 0xD8, 0x01, 0x00, 0x12, 0xD9, 0x01, 0x00, 0x24, +/* 00007340 */ 0xD9, 0x01, 0x00, 0x25, 0xD9, 0x01, 0x00, 0x96, 0xD9, 0x01, 0x00, 0xF5, 0xD9, 0x01, 0x00, 0x76, +/* 00007350 */ 0xDA, 0x01, 0x00, 0xE4, 0xDA, 0x01, 0x00, 0x57, 0xDB, 0x01, 0x00, 0xB9, 0xDB, 0x01, 0x00, 0xBA, +/* 00007360 */ 0xDB, 0x01, 0x00, 0xF2, 0xDB, 0x01, 0x00, 0x33, 0xDC, 0x01, 0x00, 0xA1, 0xDC, 0x01, 0x00, 0xA2, +/* 00007370 */ 0xDC, 0x01, 0x00, 0xCD, 0xDC, 0x01, 0x00, 0x36, 0xDD, 0x01, 0x00, 0x7B, 0xDD, 0x01, 0x00, 0x7C, +/* 00007380 */ 0xDD, 0x01, 0x00, 0xAE, 0xDD, 0x01, 0x00, 0x19, 0xDE, 0x01, 0x00, 0x9B, 0xDE, 0x01, 0x00, 0xC7, +/* 00007390 */ 0xDE, 0x01, 0x00, 0x13, 0xDF, 0x01, 0x00, 0x5A, 0xDF, 0x01, 0x00, 0xF6, 0xDF, 0x01, 0x00, 0x42, +/* 000073A0 */ 0xE0, 0x01, 0x00, 0x79, 0xE0, 0x01, 0x00, 0xFD, 0xE0, 0x01, 0x00, 0x22, 0xE1, 0x01, 0x00, 0x52, +/* 000073B0 */ 0xE1, 0x01, 0x00, 0x70, 0xE1, 0x01, 0x00, 0x13, 0xE2, 0x01, 0x00, 0x72, 0xE2, 0x01, 0x00, 0xA1, +/* 000073C0 */ 0xE2, 0x01, 0x00, 0xBB, 0xE2, 0x01, 0x00, 0xD3, 0xE2, 0x01, 0x00, 0xE5, 0xE2, 0x01, 0x00, 0x14, +/* 000073D0 */ 0xE3, 0x01, 0x00, 0x83, 0xE3, 0x01, 0x00, 0xB2, 0xE3, 0x01, 0x00, 0x40, 0xE4, 0x01, 0x00, 0x77, +/* 000073E0 */ 0xE4, 0x01, 0x00, 0xE1, 0xE4, 0x01, 0x00, 0xFB, 0xE4, 0x01, 0x00, 0x11, 0xE5, 0x01, 0x00, 0x2C, +/* 000073F0 */ 0xE5, 0x01, 0x00, 0x5B, 0xE5, 0x01, 0x00, 0x71, 0xE5, 0x01, 0x00, 0x83, 0xE5, 0x01, 0x00, 0x84, +/* 00007400 */ 0xE5, 0x01, 0x00, 0xB3, 0xE5, 0x01, 0x00, 0xE2, 0xE5, 0x01, 0x00, 0xFC, 0xE5, 0x01, 0x00, 0x82, +/* 00007410 */ 0xE6, 0x01, 0x00, 0xA4, 0xE6, 0x01, 0x00, 0xD2, 0xE6, 0x01, 0x00, 0x00, 0xE7, 0x01, 0x00, 0x01, +/* 00007420 */ 0xE7, 0x01, 0x00, 0x72, 0xE7, 0x01, 0x00, 0xFB, 0xE7, 0x01, 0x00, 0x64, 0xE8, 0x01, 0x00, 0xA3, +/* 00007430 */ 0xE8, 0x01, 0x00, 0xB9, 0xE8, 0x01, 0x00, 0xBA, 0xE8, 0x01, 0x00, 0xDF, 0xE8, 0x01, 0x00, 0x0C, +/* 00007440 */ 0xE9, 0x01, 0x00, 0x39, 0xE9, 0x01, 0x00, 0x66, 0xE9, 0x01, 0x00, 0x83, 0xE9, 0x01, 0x00, 0xB0, +/* 00007450 */ 0xE9, 0x01, 0x00, 0xC6, 0xE9, 0x01, 0x00, 0xD8, 0xE9, 0x01, 0x00, 0xD9, 0xE9, 0x01, 0x00, 0x0A, +/* 00007460 */ 0xEA, 0x01, 0x00, 0x37, 0xEA, 0x01, 0x00, 0x49, 0xEA, 0x01, 0x00, 0x4A, 0xEA, 0x01, 0x00, 0x77, +/* 00007470 */ 0xEA, 0x01, 0x00, 0x9C, 0xEA, 0x01, 0x00, 0xAE, 0xEA, 0x01, 0x00, 0xAF, 0xEA, 0x01, 0x00, 0xE0, +/* 00007480 */ 0xEA, 0x01, 0x00, 0x0E, 0xEB, 0x01, 0x00, 0x5B, 0xEB, 0x01, 0x00, 0xA3, 0xEB, 0x01, 0x00, 0xCD, +/* 00007490 */ 0xEB, 0x01, 0x00, 0x03, 0xEC, 0x01, 0x00, 0x45, 0xEC, 0x01, 0x00, 0x77, 0xEC, 0x01, 0x00, 0xA5, +/* 000074A0 */ 0xEC, 0x01, 0x00, 0xD7, 0xEC, 0x01, 0x00, 0x0E, 0xED, 0x01, 0x00, 0x1C, 0xED, 0x01, 0x00, 0x1D, +/* 000074B0 */ 0xED, 0x01, 0x00, 0x8C, 0xED, 0x01, 0x00, 0xB5, 0xED, 0x01, 0x00, 0xF0, 0xED, 0x01, 0x00, 0x4A, +/* 000074C0 */ 0xEE, 0x01, 0x00, 0x5C, 0xEE, 0x01, 0x00, 0x86, 0xEE, 0x01, 0x00, 0xB6, 0xEE, 0x01, 0x00, 0xC8, +/* 000074D0 */ 0xEE, 0x01, 0x00, 0x6C, 0xEF, 0x01, 0x00, 0x98, 0xEF, 0x01, 0x00, 0xC1, 0xEF, 0x01, 0x00, 0xFB, +/* 000074E0 */ 0xEF, 0x01, 0x00, 0x48, 0xF0, 0x01, 0x00, 0x7E, 0xF0, 0x01, 0x00, 0x9B, 0xF0, 0x01, 0x00, 0xB5, +/* 000074F0 */ 0xF0, 0x01, 0x00, 0xE9, 0xF0, 0x01, 0x00, 0x36, 0xF1, 0x01, 0x00, 0x6B, 0xF1, 0x01, 0x00, 0x96, +/* 00007500 */ 0xF1, 0x01, 0x00, 0xDE, 0xF1, 0x01, 0x00, 0xF2, 0xF1, 0x01, 0x00, 0x33, 0xF2, 0x01, 0x00, 0x34, +/* 00007510 */ 0xF2, 0x01, 0x00, 0x5B, 0xF2, 0x01, 0x00, 0x5C, 0xF2, 0x01, 0x00, 0xAA, 0xF2, 0x01, 0x00, 0xE9, +/* 00007520 */ 0xF2, 0x01, 0x00, 0x28, 0xF3, 0x01, 0x00, 0x3E, 0xF3, 0x01, 0x00, 0x3F, 0xF3, 0x01, 0x00, 0x76, +/* 00007530 */ 0xF3, 0x01, 0x00, 0xAA, 0xF3, 0x01, 0x00, 0xF3, 0xF3, 0x01, 0x00, 0x09, 0xF4, 0x01, 0x00, 0x0A, +/* 00007540 */ 0xF4, 0x01, 0x00, 0x45, 0xF4, 0x01, 0x00, 0x8B, 0xF4, 0x01, 0x00, 0x8C, 0xF4, 0x01, 0x00, 0xC2, +/* 00007550 */ 0xF4, 0x01, 0x00, 0x01, 0xF5, 0x01, 0x00, 0x46, 0xF5, 0x01, 0x00, 0x5C, 0xF5, 0x01, 0x00, 0x5D, +/* 00007560 */ 0xF5, 0x01, 0x00, 0xA5, 0xF5, 0x01, 0x00, 0xA6, 0xF5, 0x01, 0x00, 0xD3, 0xF5, 0x01, 0x00, 0x3B, +/* 00007570 */ 0xF6, 0x01, 0x00, 0x78, 0xF6, 0x01, 0x00, 0x98, 0xF6, 0x01, 0x00, 0xAA, 0xF6, 0x01, 0x00, 0xE8, +/* 00007580 */ 0xF6, 0x01, 0x00, 0xE9, 0xF6, 0x01, 0x00, 0x12, 0xF7, 0x01, 0x00, 0x46, 0xF7, 0x01, 0x00, 0xA8, +/* 00007590 */ 0xF7, 0x01, 0x00, 0xBE, 0xF7, 0x01, 0x00, 0xBF, 0xF7, 0x01, 0x00, 0x06, 0xF8, 0x01, 0x00, 0x63, +/* 000075A0 */ 0xF8, 0x01, 0x00, 0xC5, 0xF8, 0x01, 0x00, 0xDB, 0xF8, 0x01, 0x00, 0xDC, 0xF8, 0x01, 0x00, 0xFF, +/* 000075B0 */ 0xF8, 0x01, 0x00, 0x22, 0xF9, 0x01, 0x00, 0x23, 0xF9, 0x01, 0x00, 0x5D, 0xF9, 0x01, 0x00, 0x78, +/* 000075C0 */ 0xF9, 0x01, 0x00, 0x93, 0xF9, 0x01, 0x00, 0xCC, 0xF9, 0x01, 0x00, 0x1E, 0xFA, 0x01, 0x00, 0x58, +/* 000075D0 */ 0xFA, 0x01, 0x00, 0x88, 0xFA, 0x01, 0x00, 0xD5, 0xFA, 0x01, 0x00, 0xED, 0xFA, 0x01, 0x00, 0xFF, +/* 000075E0 */ 0xFA, 0x01, 0x00, 0x4E, 0xFB, 0x01, 0x00, 0x4F, 0xFB, 0x01, 0x00, 0xE1, 0xFB, 0x01, 0x00, 0xE2, +/* 000075F0 */ 0xFB, 0x01, 0x00, 0x73, 0xFC, 0x01, 0x00, 0xB7, 0xFC, 0x01, 0x00, 0xB8, 0xFC, 0x01, 0x00, 0x4D, +/* 00007600 */ 0xFD, 0x01, 0x00, 0x4E, 0xFD, 0x01, 0x00, 0x9C, 0xFD, 0x01, 0x00, 0xD4, 0xFD, 0x01, 0x00, 0x0C, +/* 00007610 */ 0xFE, 0x01, 0x00, 0x7A, 0xFE, 0x01, 0x00, 0x94, 0xFE, 0x01, 0x00, 0xDF, 0xFE, 0x01, 0x00, 0x40, +/* 00007620 */ 0xFF, 0x01, 0x00, 0xAE, 0xFF, 0x01, 0x00, 0xC8, 0xFF, 0x01, 0x00, 0xC9, 0xFF, 0x01, 0x00, 0xEA, +/* 00007630 */ 0xFF, 0x01, 0x00, 0x25, 0x00, 0x02, 0x00, 0x5E, 0x00, 0x02, 0x00, 0xA3, 0x00, 0x02, 0x00, 0xF4, +/* 00007640 */ 0x00, 0x02, 0x00, 0x4F, 0x01, 0x02, 0x00, 0xE4, 0x01, 0x02, 0x00, 0x79, 0x02, 0x02, 0x00, 0x93, +/* 00007650 */ 0x02, 0x02, 0x00, 0xE0, 0x02, 0x02, 0x00, 0xF4, 0x02, 0x02, 0x00, 0xF5, 0x02, 0x02, 0x00, 0x3B, +/* 00007660 */ 0x03, 0x02, 0x00, 0x83, 0x03, 0x02, 0x00, 0xBB, 0x03, 0x02, 0x00, 0x21, 0x04, 0x02, 0x00, 0x3B, +/* 00007670 */ 0x04, 0x02, 0x00, 0x3C, 0x04, 0x02, 0x00, 0x87, 0x04, 0x02, 0x00, 0xE8, 0x04, 0x02, 0x00, 0x4E, +/* 00007680 */ 0x05, 0x02, 0x00, 0x68, 0x05, 0x02, 0x00, 0x69, 0x05, 0x02, 0x00, 0xA5, 0x05, 0x02, 0x00, 0xE3, +/* 00007690 */ 0x05, 0x02, 0x00, 0xF7, 0x05, 0x02, 0x00, 0xF8, 0x05, 0x02, 0x00, 0x19, 0x06, 0x02, 0x00, 0x27, +/* 000076A0 */ 0x06, 0x02, 0x00, 0x31, 0x06, 0x02, 0x00, 0x7C, 0x06, 0x02, 0x00, 0x96, 0x06, 0x02, 0x00, 0xA0, +/* 000076B0 */ 0x06, 0x02, 0x00, 0xA1, 0x06, 0x02, 0x00, 0xDB, 0x06, 0x02, 0x00, 0x01, 0x07, 0x02, 0x00, 0x3D, +/* 000076C0 */ 0x07, 0x02, 0x00, 0x8E, 0x07, 0x02, 0x00, 0xC5, 0x07, 0x02, 0x00, 0xF5, 0x07, 0x02, 0x00, 0x07, +/* 000076D0 */ 0x08, 0x02, 0x00, 0x08, 0x08, 0x02, 0x00, 0x9F, 0x08, 0x02, 0x00, 0xFD, 0x08, 0x02, 0x00, 0x0F, +/* 000076E0 */ 0x09, 0x02, 0x00, 0x10, 0x09, 0x02, 0x00, 0x4D, 0x09, 0x02, 0x00, 0x4E, 0x09, 0x02, 0x00, 0x71, +/* 000076F0 */ 0x09, 0x02, 0x00, 0xA7, 0x09, 0x02, 0x00, 0xDD, 0x09, 0x02, 0x00, 0xF6, 0x09, 0x02, 0x00, 0x30, +/* 00007700 */ 0x0A, 0x02, 0x00, 0x42, 0x0A, 0x02, 0x00, 0x43, 0x0A, 0x02, 0x00, 0xB4, 0x0A, 0x02, 0x00, 0x26, +/* 00007710 */ 0x0B, 0x02, 0x00, 0x27, 0x0B, 0x02, 0x00, 0x6F, 0x0B, 0x02, 0x00, 0x70, 0x0B, 0x02, 0x00, 0xCF, +/* 00007720 */ 0x0B, 0x02, 0x00, 0x4C, 0x0C, 0x02, 0x00, 0x7C, 0x0C, 0x02, 0x00, 0x7D, 0x0C, 0x02, 0x00, 0xE4, +/* 00007730 */ 0x0C, 0x02, 0x00, 0x1B, 0x0D, 0x02, 0x00, 0x52, 0x0D, 0x02, 0x00, 0x90, 0x0D, 0x02, 0x00, 0x91, +/* 00007740 */ 0x0D, 0x02, 0x00, 0xE2, 0x0D, 0x02, 0x00, 0x33, 0x0E, 0x02, 0x00, 0x34, 0x0E, 0x02, 0x00, 0xAE, +/* 00007750 */ 0x0E, 0x02, 0x00, 0x1D, 0x0F, 0x02, 0x00, 0xA4, 0x0F, 0x02, 0x00, 0xB6, 0x0F, 0x02, 0x00, 0xB7, +/* 00007760 */ 0x0F, 0x02, 0x00, 0x18, 0x10, 0x02, 0x00, 0x19, 0x10, 0x02, 0x00, 0x51, 0x10, 0x02, 0x00, 0x92, +/* 00007770 */ 0x10, 0x02, 0x00, 0xFF, 0x10, 0x02, 0x00, 0x00, 0x11, 0x02, 0x00, 0x34, 0x11, 0x02, 0x00, 0x92, +/* 00007780 */ 0x11, 0x02, 0x00, 0xDB, 0x11, 0x02, 0x00, 0xED, 0x11, 0x02, 0x00, 0xEE, 0x11, 0x02, 0x00, 0x1A, +/* 00007790 */ 0x12, 0x02, 0x00, 0x55, 0x12, 0x02, 0x00, 0x92, 0x12, 0x02, 0x00, 0xA8, 0x12, 0x02, 0x00, 0xFE, +/* 000077A0 */ 0x12, 0x02, 0x00, 0x18, 0x13, 0x02, 0x00, 0x64, 0x13, 0x02, 0x00, 0x86, 0x13, 0x02, 0x00, 0xB4, +/* 000077B0 */ 0x13, 0x02, 0x00, 0x01, 0x14, 0x02, 0x00, 0x17, 0x14, 0x02, 0x00, 0x8D, 0x14, 0x02, 0x00, 0xF1, +/* 000077C0 */ 0x14, 0x02, 0x00, 0x0A, 0x15, 0x02, 0x00, 0x34, 0x15, 0x02, 0x00, 0x65, 0x15, 0x02, 0x00, 0xCE, +/* 000077D0 */ 0x15, 0x02, 0x00, 0xFD, 0x15, 0x02, 0x00, 0x58, 0x16, 0x02, 0x00, 0x75, 0x16, 0x02, 0x00, 0xCF, +/* 000077E0 */ 0x16, 0x02, 0x00, 0xE5, 0x16, 0x02, 0x00, 0xF7, 0x16, 0x02, 0x00, 0xF8, 0x16, 0x02, 0x00, 0x8C, +/* 000077F0 */ 0x17, 0x02, 0x00, 0x8D, 0x17, 0x02, 0x00, 0xBE, 0x17, 0x02, 0x00, 0xF6, 0x17, 0x02, 0x00, 0x39, +/* 00007800 */ 0x18, 0x02, 0x00, 0x67, 0x18, 0x02, 0x00, 0x68, 0x18, 0x02, 0x00, 0x96, 0x18, 0x02, 0x00, 0xCE, +/* 00007810 */ 0x18, 0x02, 0x00, 0xE0, 0x18, 0x02, 0x00, 0xE1, 0x18, 0x02, 0x00, 0x16, 0x19, 0x02, 0x00, 0x5C, +/* 00007820 */ 0x19, 0x02, 0x00, 0xCD, 0x19, 0x02, 0x00, 0xDF, 0x19, 0x02, 0x00, 0xE0, 0x19, 0x02, 0x00, 0x2C, +/* 00007830 */ 0x1A, 0x02, 0x00, 0x7A, 0x1A, 0x02, 0x00, 0xC8, 0x1A, 0x02, 0x00, 0xC9, 0x1A, 0x02, 0x00, 0x07, +/* 00007840 */ 0x1B, 0x02, 0x00, 0x5F, 0x1B, 0x02, 0x00, 0xB7, 0x1B, 0x02, 0x00, 0xC9, 0x1B, 0x02, 0x00, 0xCA, +/* 00007850 */ 0x1B, 0x02, 0x00, 0x0A, 0x1C, 0x02, 0x00, 0x44, 0x1C, 0x02, 0x00, 0x45, 0x1C, 0x02, 0x00, 0x5B, +/* 00007860 */ 0x1C, 0x02, 0x00, 0xAF, 0x1C, 0x02, 0x00, 0xED, 0x1C, 0x02, 0x00, 0x0B, 0x1D, 0x02, 0x00, 0x35, +/* 00007870 */ 0x1D, 0x02, 0x00, 0x8C, 0x1D, 0x02, 0x00, 0x11, 0x1E, 0x02, 0x00, 0x76, 0x1E, 0x02, 0x00, 0xB1, +/* 00007880 */ 0x1E, 0x02, 0x00, 0xC3, 0x1E, 0x02, 0x00, 0xC4, 0x1E, 0x02, 0x00, 0xFB, 0x1E, 0x02, 0x00, 0x5C, +/* 00007890 */ 0x1F, 0x02, 0x00, 0x6E, 0x1F, 0x02, 0x00, 0x6F, 0x1F, 0x02, 0x00, 0xED, 0x1F, 0x02, 0x00, 0x2C, +/* 000078A0 */ 0x20, 0x02, 0x00, 0x3A, 0x20, 0x02, 0x00, 0x3B, 0x20, 0x02, 0x00, 0xAB, 0x20, 0x02, 0x00, 0xFA, +/* 000078B0 */ 0x20, 0x02, 0x00, 0x5B, 0x21, 0x02, 0x00, 0x6D, 0x21, 0x02, 0x00, 0x6E, 0x21, 0x02, 0x00, 0xA8, +/* 000078C0 */ 0x21, 0x02, 0x00, 0xF9, 0x21, 0x02, 0x00, 0xFA, 0x21, 0x02, 0x00, 0x2B, 0x22, 0x02, 0x00, 0x71, +/* 000078D0 */ 0x22, 0x02, 0x00, 0xB3, 0x22, 0x02, 0x00, 0xB4, 0x22, 0x02, 0x00, 0xDB, 0x22, 0x02, 0x00, 0x2D, +/* 000078E0 */ 0x23, 0x02, 0x00, 0x6C, 0x23, 0x02, 0x00, 0xAF, 0x23, 0x02, 0x00, 0xC5, 0x23, 0x02, 0x00, 0xC6, +/* 000078F0 */ 0x23, 0x02, 0x00, 0xFD, 0x23, 0x02, 0x00, 0xFE, 0x23, 0x02, 0x00, 0x32, 0x24, 0x02, 0x00, 0x7F, +/* 00007900 */ 0x24, 0x02, 0x00, 0x95, 0x24, 0x02, 0x00, 0x96, 0x24, 0x02, 0x00, 0xD1, 0x24, 0x02, 0x00, 0x17, +/* 00007910 */ 0x25, 0x02, 0x00, 0x18, 0x25, 0x02, 0x00, 0x4E, 0x25, 0x02, 0x00, 0x8D, 0x25, 0x02, 0x00, 0xD2, +/* 00007920 */ 0x25, 0x02, 0x00, 0xE8, 0x25, 0x02, 0x00, 0xE9, 0x25, 0x02, 0x00, 0x35, 0x26, 0x02, 0x00, 0x36, +/* 00007930 */ 0x26, 0x02, 0x00, 0x9B, 0x26, 0x02, 0x00, 0xD7, 0x26, 0x02, 0x00, 0xD8, 0x26, 0x02, 0x00, 0xF8, +/* 00007940 */ 0x26, 0x02, 0x00, 0x0A, 0x27, 0x02, 0x00, 0x50, 0x27, 0x02, 0x00, 0x51, 0x27, 0x02, 0x00, 0x76, +/* 00007950 */ 0x27, 0x02, 0x00, 0xA4, 0x27, 0x02, 0x00, 0xA5, 0x27, 0x02, 0x00, 0xD9, 0x27, 0x02, 0x00, 0x42, +/* 00007960 */ 0x28, 0x02, 0x00, 0x58, 0x28, 0x02, 0x00, 0x59, 0x28, 0x02, 0x00, 0xA0, 0x28, 0x02, 0x00, 0x01, +/* 00007970 */ 0x29, 0x02, 0x00, 0x6A, 0x29, 0x02, 0x00, 0x80, 0x29, 0x02, 0x00, 0x81, 0x29, 0x02, 0x00, 0xCC, +/* 00007980 */ 0x29, 0x02, 0x00, 0xDE, 0x29, 0x02, 0x00, 0x2F, 0x2A, 0x02, 0x00, 0x30, 0x2A, 0x02, 0x00, 0xCA, +/* 00007990 */ 0x2A, 0x02, 0x00, 0xCB, 0x2A, 0x02, 0x00, 0x47, 0x2B, 0x02, 0x00, 0xC5, 0x2B, 0x02, 0x00, 0xE9, +/* 000079A0 */ 0x2B, 0x02, 0x00, 0xEA, 0x2B, 0x02, 0x00, 0x83, 0x2C, 0x02, 0x00, 0xCB, 0x2C, 0x02, 0x00, 0x68, +/* 000079B0 */ 0x2D, 0x02, 0x00, 0x69, 0x2D, 0x02, 0x00, 0xBB, 0x2D, 0x02, 0x00, 0xF3, 0x2D, 0x02, 0x00, 0x2B, +/* 000079C0 */ 0x2E, 0x02, 0x00, 0xA1, 0x2E, 0x02, 0x00, 0xBB, 0x2E, 0x02, 0x00, 0x06, 0x2F, 0x02, 0x00, 0x6B, +/* 000079D0 */ 0x2F, 0x02, 0x00, 0xE1, 0x2F, 0x02, 0x00, 0xFB, 0x2F, 0x02, 0x00, 0xFC, 0x2F, 0x02, 0x00, 0x42, +/* 000079E0 */ 0x30, 0x02, 0x00, 0x43, 0x30, 0x02, 0x00, 0x9F, 0x30, 0x02, 0x00, 0xF5, 0x30, 0x02, 0x00, 0x4C, +/* 000079F0 */ 0x31, 0x02, 0x00, 0x6A, 0x31, 0x02, 0x00, 0x86, 0x31, 0x02, 0x00, 0x87, 0x31, 0x02, 0x00, 0xC9, +/* 00007A00 */ 0x31, 0x02, 0x00, 0x16, 0x32, 0x02, 0x00, 0x2A, 0x32, 0x02, 0x00, 0x2B, 0x32, 0x02, 0x00, 0x74, +/* 00007A10 */ 0x32, 0x02, 0x00, 0xBB, 0x32, 0x02, 0x00, 0xF3, 0x32, 0x02, 0x00, 0x60, 0x33, 0x02, 0x00, 0x7A, +/* 00007A20 */ 0x33, 0x02, 0x00, 0x7B, 0x33, 0x02, 0x00, 0xC6, 0x33, 0x02, 0x00, 0x2B, 0x34, 0x02, 0x00, 0x98, +/* 00007A30 */ 0x34, 0x02, 0x00, 0xB2, 0x34, 0x02, 0x00, 0xB3, 0x34, 0x02, 0x00, 0xEE, 0x34, 0x02, 0x00, 0x2C, +/* 00007A40 */ 0x35, 0x02, 0x00, 0x40, 0x35, 0x02, 0x00, 0x41, 0x35, 0x02, 0x00, 0x66, 0x35, 0x02, 0x00, 0x74, +/* 00007A50 */ 0x35, 0x02, 0x00, 0x7E, 0x35, 0x02, 0x00, 0xCD, 0x35, 0x02, 0x00, 0xE7, 0x35, 0x02, 0x00, 0xF1, +/* 00007A60 */ 0x35, 0x02, 0x00, 0xF2, 0x35, 0x02, 0x00, 0x72, 0x36, 0x02, 0x00, 0x9A, 0x36, 0x02, 0x00, 0xD4, +/* 00007A70 */ 0x36, 0x02, 0x00, 0x1A, 0x37, 0x02, 0x00, 0x47, 0x37, 0x02, 0x00, 0x7D, 0x37, 0x02, 0x00, 0x96, +/* 00007A80 */ 0x37, 0x02, 0x00, 0xD0, 0x37, 0x02, 0x00, 0xE2, 0x37, 0x02, 0x00, 0xE3, 0x37, 0x02, 0x00, 0x0C, +/* 00007A90 */ 0x38, 0x02, 0x00, 0x4D, 0x38, 0x02, 0x00, 0xE0, 0x38, 0x02, 0x00, 0x0E, 0x39, 0x02, 0x00, 0x24, +/* 00007AA0 */ 0x39, 0x02, 0x00, 0x36, 0x39, 0x02, 0x00, 0x77, 0x39, 0x02, 0x00, 0xED, 0x39, 0x02, 0x00, 0x1B, +/* 00007AB0 */ 0x3A, 0x02, 0x00, 0x31, 0x3A, 0x02, 0x00, 0x43, 0x3A, 0x02, 0x00, 0x44, 0x3A, 0x02, 0x00, 0x97, +/* 00007AC0 */ 0x3A, 0x02, 0x00, 0xD3, 0x3A, 0x02, 0x00, 0x0D, 0x3B, 0x02, 0x00, 0x4A, 0x3B, 0x02, 0x00, 0x62, +/* 00007AD0 */ 0x3B, 0x02, 0x00, 0x9F, 0x3B, 0x02, 0x00, 0xD9, 0x3B, 0x02, 0x00, 0x16, 0x3C, 0x02, 0x00, 0x2E, +/* 00007AE0 */ 0x3C, 0x02, 0x00, 0x69, 0x3C, 0x02, 0x00, 0xA3, 0x3C, 0x02, 0x00, 0xE0, 0x3C, 0x02, 0x00, 0xF8, +/* 00007AF0 */ 0x3C, 0x02, 0x00, 0x0A, 0x3D, 0x02, 0x00, 0x5D, 0x3D, 0x02, 0x00, 0x99, 0x3D, 0x02, 0x00, 0xD3, +/* 00007B00 */ 0x3D, 0x02, 0x00, 0x10, 0x3E, 0x02, 0x00, 0x28, 0x3E, 0x02, 0x00, 0x66, 0x3E, 0x02, 0x00, 0xA0, +/* 00007B10 */ 0x3E, 0x02, 0x00, 0xDD, 0x3E, 0x02, 0x00, 0xF5, 0x3E, 0x02, 0x00, 0x33, 0x3F, 0x02, 0x00, 0x6D, +/* 00007B20 */ 0x3F, 0x02, 0x00, 0xAA, 0x3F, 0x02, 0x00, 0xC2, 0x3F, 0x02, 0x00, 0xD4, 0x3F, 0x02, 0x00, 0xF4, +/* 00007B30 */ 0x3F, 0x02, 0x00, 0x02, 0x40, 0x02, 0x00, 0x03, 0x40, 0x02, 0x00, 0x8D, 0x40, 0x02, 0x00, 0xCA, +/* 00007B40 */ 0x40, 0x02, 0x00, 0xED, 0x40, 0x02, 0x00, 0x18, 0x41, 0x02, 0x00, 0x33, 0x41, 0x02, 0x00, 0x34, +/* 00007B50 */ 0x41, 0x02, 0x00, 0x5B, 0x41, 0x02, 0x00, 0xB2, 0x41, 0x02, 0x00, 0xF3, 0x41, 0x02, 0x00, 0x30, +/* 00007B60 */ 0x42, 0x02, 0x00, 0x6A, 0x42, 0x02, 0x00, 0x80, 0x42, 0x02, 0x00, 0x92, 0x42, 0x02, 0x00, 0x93, +/* 00007B70 */ 0x42, 0x02, 0x00, 0xBE, 0x42, 0x02, 0x00, 0xE2, 0x42, 0x02, 0x00, 0x18, 0x43, 0x02, 0x00, 0x54, +/* 00007B80 */ 0x43, 0x02, 0x00, 0x91, 0x43, 0x02, 0x00, 0xC6, 0x43, 0x02, 0x00, 0xDC, 0x43, 0x02, 0x00, 0xEE, +/* 00007B90 */ 0x43, 0x02, 0x00, 0xEF, 0x43, 0x02, 0x00, 0x14, 0x44, 0x02, 0x00, 0x6A, 0x44, 0x02, 0x00, 0xA3, +/* 00007BA0 */ 0x44, 0x02, 0x00, 0xFD, 0x44, 0x02, 0x00, 0x3A, 0x45, 0x02, 0x00, 0x75, 0x45, 0x02, 0x00, 0xAB, +/* 00007BB0 */ 0x45, 0x02, 0x00, 0xC1, 0x45, 0x02, 0x00, 0xD3, 0x45, 0x02, 0x00, 0xD4, 0x45, 0x02, 0x00, 0xF7, +/* 00007BC0 */ 0x45, 0x02, 0x00, 0x22, 0x46, 0x02, 0x00, 0x34, 0x46, 0x02, 0x00, 0x35, 0x46, 0x02, 0x00, 0x61, +/* 00007BD0 */ 0x46, 0x02, 0x00, 0x9D, 0x46, 0x02, 0x00, 0xDD, 0x46, 0x02, 0x00, 0x1F, 0x47, 0x02, 0x00, 0x58, +/* 00007BE0 */ 0x47, 0x02, 0x00, 0x6E, 0x47, 0x02, 0x00, 0x80, 0x47, 0x02, 0x00, 0x81, 0x47, 0x02, 0x00, 0xE7, +/* 00007BF0 */ 0x47, 0x02, 0x00, 0x0F, 0x48, 0x02, 0x00, 0x3C, 0x48, 0x02, 0x00, 0x52, 0x48, 0x02, 0x00, 0x66, +/* 00007C00 */ 0x48, 0x02, 0x00, 0x67, 0x48, 0x02, 0x00, 0x9D, 0x48, 0x02, 0x00, 0xFC, 0x48, 0x02, 0x00, 0x0A, +/* 00007C10 */ 0x49, 0x02, 0x00, 0x0B, 0x49, 0x02, 0x00, 0x38, 0x49, 0x02, 0x00, 0x68, 0x49, 0x02, 0x00, 0x94, +/* 00007C20 */ 0x49, 0x02, 0x00, 0xC0, 0x49, 0x02, 0x00, 0xF0, 0x49, 0x02, 0x00, 0x1C, 0x4A, 0x02, 0x00, 0x48, +/* 00007C30 */ 0x4A, 0x02, 0x00, 0x7D, 0x4A, 0x02, 0x00, 0xA5, 0x4A, 0x02, 0x00, 0xD0, 0x4A, 0x02, 0x00, 0xDF, +/* 00007C40 */ 0x4A, 0x02, 0x00, 0xE0, 0x4A, 0x02, 0x00, 0x17, 0x4B, 0x02, 0x00, 0x4E, 0x4B, 0x02, 0x00, 0x6D, +/* 00007C50 */ 0x4B, 0x02, 0x00, 0x7F, 0x4B, 0x02, 0x00, 0x80, 0x4B, 0x02, 0x00, 0xC8, 0x4B, 0x02, 0x00, 0xD6, +/* 00007C60 */ 0x4B, 0x02, 0x00, 0xD7, 0x4B, 0x02, 0x00, 0x47, 0x4C, 0x02, 0x00, 0xA3, 0x4C, 0x02, 0x00, 0x19, +/* 00007C70 */ 0x4D, 0x02, 0x00, 0xAA, 0x4D, 0x02, 0x00, 0x28, 0x4E, 0x02, 0x00, 0x4E, 0x4E, 0x02, 0x00, 0x43, +/* 00007C80 */ 0x4F, 0x02, 0x00, 0x6D, 0x4F, 0x02, 0x00, 0x7F, 0x4F, 0x02, 0x00, 0x80, 0x4F, 0x02, 0x00, 0xC3, +/* 00007C90 */ 0x4F, 0x02, 0x00, 0x45, 0x50, 0x02, 0x00, 0x78, 0x50, 0x02, 0x00, 0x2E, 0x51, 0x02, 0x00, 0x40, +/* 00007CA0 */ 0x51, 0x02, 0x00, 0x66, 0x51, 0x02, 0x00, 0x74, 0x51, 0x02, 0x00, 0x75, 0x51, 0x02, 0x00, 0xDA, +/* 00007CB0 */ 0x51, 0x02, 0x00, 0x24, 0x52, 0x02, 0x00, 0x98, 0x52, 0x02, 0x00, 0x29, 0x53, 0x02, 0x00, 0x4F, +/* 00007CC0 */ 0x53, 0x02, 0x00, 0x4F, 0x54, 0x02, 0x00, 0x79, 0x54, 0x02, 0x00, 0x8B, 0x54, 0x02, 0x00, 0x8C, +/* 00007CD0 */ 0x54, 0x02, 0x00, 0xD6, 0x54, 0x02, 0x00, 0x05, 0x55, 0x02, 0x00, 0x83, 0x55, 0x02, 0x00, 0xB8, +/* 00007CE0 */ 0x55, 0x02, 0x00, 0x33, 0x56, 0x02, 0x00, 0x45, 0x56, 0x02, 0x00, 0x46, 0x56, 0x02, 0x00, 0x6C, +/* 00007CF0 */ 0x56, 0x02, 0x00, 0x7A, 0x56, 0x02, 0x00, 0x7B, 0x56, 0x02, 0x00, 0xDD, 0x56, 0x02, 0x00, 0x28, +/* 00007D00 */ 0x57, 0x02, 0x00, 0x66, 0x57, 0x02, 0x00, 0xDF, 0x57, 0x02, 0x00, 0xF1, 0x57, 0x02, 0x00, 0xF2, +/* 00007D10 */ 0x57, 0x02, 0x00, 0x2C, 0x58, 0x02, 0x00, 0x99, 0x58, 0x02, 0x00, 0xF8, 0x58, 0x02, 0x00, 0x6D, +/* 00007D20 */ 0x59, 0x02, 0x00, 0x7F, 0x59, 0x02, 0x00, 0x80, 0x59, 0x02, 0x00, 0xBB, 0x59, 0x02, 0x00, 0x26, +/* 00007D30 */ 0x5A, 0x02, 0x00, 0x50, 0x5A, 0x02, 0x00, 0xC4, 0x5A, 0x02, 0x00, 0xE1, 0x5A, 0x02, 0x00, 0x64, +/* 00007D40 */ 0x5B, 0x02, 0x00, 0x7A, 0x5B, 0x02, 0x00, 0xB9, 0x5B, 0x02, 0x00, 0x24, 0x5C, 0x02, 0x00, 0x4E, +/* 00007D50 */ 0x5C, 0x02, 0x00, 0xC2, 0x5C, 0x02, 0x00, 0xDF, 0x5C, 0x02, 0x00, 0x58, 0x5D, 0x02, 0x00, 0x6E, +/* 00007D60 */ 0x5D, 0x02, 0x00, 0x80, 0x5D, 0x02, 0x00, 0x81, 0x5D, 0x02, 0x00, 0x16, 0x5E, 0x02, 0x00, 0xA2, +/* 00007D70 */ 0x5E, 0x02, 0x00, 0x15, 0x5F, 0x02, 0x00, 0x58, 0x5F, 0x02, 0x00, 0xD4, 0x5F, 0x02, 0x00, 0xE6, +/* 00007D80 */ 0x5F, 0x02, 0x00, 0xE7, 0x5F, 0x02, 0x00, 0x21, 0x60, 0x02, 0x00, 0x99, 0x60, 0x02, 0x00, 0xAB, +/* 00007D90 */ 0x60, 0x02, 0x00, 0xAC, 0x60, 0x02, 0x00, 0xE7, 0x60, 0x02, 0x00, 0x61, 0x61, 0x02, 0x00, 0x73, +/* 00007DA0 */ 0x61, 0x02, 0x00, 0x74, 0x61, 0x02, 0x00, 0xB1, 0x61, 0x02, 0x00, 0x2F, 0x62, 0x02, 0x00, 0x41, +/* 00007DB0 */ 0x62, 0x02, 0x00, 0x42, 0x62, 0x02, 0x00, 0x7F, 0x62, 0x02, 0x00, 0xFD, 0x62, 0x02, 0x00, 0x0F, +/* 00007DC0 */ 0x63, 0x02, 0x00, 0x10, 0x63, 0x02, 0x00, 0x53, 0x63, 0x02, 0x00, 0xD0, 0x63, 0x02, 0x00, 0xE2, +/* 00007DD0 */ 0x63, 0x02, 0x00, 0xE3, 0x63, 0x02, 0x00, 0x09, 0x64, 0x02, 0x00, 0x17, 0x64, 0x02, 0x00, 0x18, +/* 00007DE0 */ 0x64, 0x02, 0x00, 0x6D, 0x64, 0x02, 0x00, 0xA6, 0x64, 0x02, 0x00, 0xD6, 0x64, 0x02, 0x00, 0xE8, +/* 00007DF0 */ 0x64, 0x02, 0x00, 0xE9, 0x64, 0x02, 0x00, 0x84, 0x65, 0x02, 0x00, 0xE6, 0x65, 0x02, 0x00, 0xF8, +/* 00007E00 */ 0x65, 0x02, 0x00, 0xF9, 0x65, 0x02, 0x00, 0x38, 0x66, 0x02, 0x00, 0x39, 0x66, 0x02, 0x00, 0x60, +/* 00007E10 */ 0x66, 0x02, 0x00, 0xA5, 0x66, 0x02, 0x00, 0xA6, 0x66, 0x02, 0x00, 0x17, 0x67, 0x02, 0x00, 0x76, +/* 00007E20 */ 0x67, 0x02, 0x00, 0x77, 0x67, 0x02, 0x00, 0xA5, 0x67, 0x02, 0x00, 0xF8, 0x67, 0x02, 0x00, 0x11, +/* 00007E30 */ 0x68, 0x02, 0x00, 0x4F, 0x68, 0x02, 0x00, 0x61, 0x68, 0x02, 0x00, 0x62, 0x68, 0x02, 0x00, 0x90, +/* 00007E40 */ 0x68, 0x02, 0x00, 0xCB, 0x68, 0x02, 0x00, 0xDD, 0x68, 0x02, 0x00, 0xDE, 0x68, 0x02, 0x00, 0x00, +/* 00007E50 */ 0x69, 0x02, 0x00, 0x6F, 0x69, 0x02, 0x00, 0xD6, 0x69, 0x02, 0x00, 0x3A, 0x6A, 0x02, 0x00, 0xBB, +/* 00007E60 */ 0x6A, 0x02, 0x00, 0x1D, 0x6B, 0x02, 0x00, 0x81, 0x6B, 0x02, 0x00, 0xE9, 0x6B, 0x02, 0x00, 0x51, +/* 00007E70 */ 0x6C, 0x02, 0x00, 0xC0, 0x6C, 0x02, 0x00, 0xC1, 0x6C, 0x02, 0x00, 0x30, 0x6D, 0x02, 0x00, 0xA6, +/* 00007E80 */ 0x6D, 0x02, 0x00, 0xA7, 0x6D, 0x02, 0x00, 0x17, 0x6E, 0x02, 0x00, 0x18, 0x6E, 0x02, 0x00, 0x69, +/* 00007E90 */ 0x6E, 0x02, 0x00, 0x8F, 0x6E, 0x02, 0x00, 0xAD, 0x6E, 0x02, 0x00, 0xCD, 0x6E, 0x02, 0x00, 0xEF, +/* 00007EA0 */ 0x6E, 0x02, 0x00, 0x0D, 0x6F, 0x02, 0x00, 0x2D, 0x6F, 0x02, 0x00, 0x51, 0x6F, 0x02, 0x00, 0x75, +/* 00007EB0 */ 0x6F, 0x02, 0x00, 0xA4, 0x6F, 0x02, 0x00, 0xBF, 0x6F, 0x02, 0x00, 0xC0, 0x6F, 0x02, 0x00, 0xE8, +/* 00007EC0 */ 0x6F, 0x02, 0x00, 0x29, 0x70, 0x02, 0x00, 0x9C, 0x70, 0x02, 0x00, 0x9D, 0x70, 0x02, 0x00, 0xC3, +/* 00007ED0 */ 0x70, 0x02, 0x00, 0xF7, 0x70, 0x02, 0x00, 0x2D, 0x71, 0x02, 0x00, 0x72, 0x71, 0x02, 0x00, 0x73, +/* 00007EE0 */ 0x71, 0x02, 0x00, 0x95, 0x71, 0x02, 0x00, 0xC9, 0x71, 0x02, 0x00, 0xF5, 0x71, 0x02, 0x00, 0x23, +/* 00007EF0 */ 0x72, 0x02, 0x00, 0x53, 0x72, 0x02, 0x00, 0x7F, 0x72, 0x02, 0x00, 0xAD, 0x72, 0x02, 0x00, 0xDF, +/* 00007F00 */ 0x72, 0x02, 0x00, 0x11, 0x73, 0x02, 0x00, 0x4F, 0x73, 0x02, 0x00, 0x50, 0x73, 0x02, 0x00, 0x82, +/* 00007F10 */ 0x73, 0x02, 0x00, 0xC2, 0x73, 0x02, 0x00, 0x00, 0x74, 0x02, 0x00, 0x01, 0x74, 0x02, 0x00, 0x43, +/* 00007F20 */ 0x74, 0x02, 0x00, 0x44, 0x74, 0x02, 0x00, 0x57, 0x74, 0x02, 0x00, 0x73, 0x74, 0x02, 0x00, 0xCB, +/* 00007F30 */ 0x74, 0x02, 0x00, 0x45, 0x75, 0x02, 0x00, 0xEA, 0x75, 0x02, 0x00, 0x91, 0x76, 0x02, 0x00, 0xF9, +/* 00007F40 */ 0x76, 0x02, 0x00, 0x10, 0x77, 0x02, 0x00, 0x39, 0x77, 0x02, 0x00, 0x3A, 0x77, 0x02, 0x00, 0x50, +/* 00007F50 */ 0x77, 0x02, 0x00, 0x9F, 0x77, 0x02, 0x00, 0xE0, 0x77, 0x02, 0x00, 0xFE, 0x77, 0x02, 0x00, 0x28, +/* 00007F60 */ 0x78, 0x02, 0x00, 0x52, 0x78, 0x02, 0x00, 0x53, 0x78, 0x02, 0x00, 0xC1, 0x78, 0x02, 0x00, 0x17, +/* 00007F70 */ 0x79, 0x02, 0x00, 0x6B, 0x79, 0x02, 0x00, 0xD5, 0x79, 0x02, 0x00, 0xFD, 0x79, 0x02, 0x00, 0x0F, +/* 00007F80 */ 0x7A, 0x02, 0x00, 0x10, 0x7A, 0x02, 0x00, 0x34, 0x7A, 0x02, 0x00, 0x66, 0x7A, 0x02, 0x00, 0xE6, +/* 00007F90 */ 0x7A, 0x02, 0x00, 0xF8, 0x7A, 0x02, 0x00, 0xF9, 0x7A, 0x02, 0x00, 0x0F, 0x7B, 0x02, 0x00, 0x44, +/* 00007FA0 */ 0x7B, 0x02, 0x00, 0x84, 0x7B, 0x02, 0x00, 0xA2, 0x7B, 0x02, 0x00, 0xCC, 0x7B, 0x02, 0x00, 0xF6, +/* 00007FB0 */ 0x7B, 0x02, 0x00, 0xF7, 0x7B, 0x02, 0x00, 0x59, 0x7C, 0x02, 0x00, 0xDE, 0x7C, 0x02, 0x00, 0x43, +/* 00007FC0 */ 0x7D, 0x02, 0x00, 0x7E, 0x7D, 0x02, 0x00, 0x90, 0x7D, 0x02, 0x00, 0x91, 0x7D, 0x02, 0x00, 0xBE, +/* 00007FD0 */ 0x7D, 0x02, 0x00, 0x23, 0x7E, 0x02, 0x00, 0x24, 0x7E, 0x02, 0x00, 0xA6, 0x7E, 0x02, 0x00, 0xE1, +/* 00007FE0 */ 0x7E, 0x02, 0x00, 0x40, 0x7F, 0x02, 0x00, 0x52, 0x7F, 0x02, 0x00, 0x95, 0x7F, 0x02, 0x00, 0xA3, +/* 00007FF0 */ 0x7F, 0x02, 0x00, 0xA4, 0x7F, 0x02, 0x00, 0xFA, 0x7F, 0x02, 0x00, 0x58, 0x80, 0x02, 0x00, 0xA8, +/* 00008000 */ 0x80, 0x02, 0x00, 0xCB, 0x80, 0x02, 0x00, 0xF2, 0x80, 0x02, 0x00, 0x18, 0x81, 0x02, 0x00, 0x2E, +/* 00008010 */ 0x81, 0x02, 0x00, 0x2F, 0x81, 0x02, 0x00, 0xA4, 0x81, 0x02, 0x00, 0xEF, 0x81, 0x02, 0x00, 0x31, +/* 00008020 */ 0x82, 0x02, 0x00, 0x43, 0x82, 0x02, 0x00, 0x96, 0x82, 0x02, 0x00, 0xCE, 0x82, 0x02, 0x00, 0xF9, +/* 00008030 */ 0x82, 0x02, 0x00, 0x0B, 0x83, 0x02, 0x00, 0x0C, 0x83, 0x02, 0x00, 0x39, 0x83, 0x02, 0x00, 0x95, +/* 00008040 */ 0x83, 0x02, 0x00, 0x03, 0x84, 0x02, 0x00, 0x52, 0x84, 0x02, 0x00, 0x83, 0x84, 0x02, 0x00, 0xDE, +/* 00008050 */ 0x84, 0x02, 0x00, 0xFB, 0x84, 0x02, 0x00, 0x25, 0x85, 0x02, 0x00, 0x63, 0x85, 0x02, 0x00, 0xDD, +/* 00008060 */ 0x85, 0x02, 0x00, 0x38, 0x86, 0x02, 0x00, 0x4E, 0x86, 0x02, 0x00, 0x60, 0x86, 0x02, 0x00, 0x61, +/* 00008070 */ 0x86, 0x02, 0x00, 0x85, 0x86, 0x02, 0x00, 0xBF, 0x86, 0x02, 0x00, 0x31, 0x87, 0x02, 0x00, 0x43, +/* 00008080 */ 0x87, 0x02, 0x00, 0x44, 0x87, 0x02, 0x00, 0xA2, 0x87, 0x02, 0x00, 0xB0, 0x87, 0x02, 0x00, 0xB1, +/* 00008090 */ 0x87, 0x02, 0x00, 0x2E, 0x88, 0x02, 0x00, 0xBA, 0x88, 0x02, 0x00, 0x39, 0x89, 0x02, 0x00, 0xC2, +/* 000080A0 */ 0x89, 0x02, 0x00, 0xE7, 0x89, 0x02, 0x00, 0xF6, 0x89, 0x02, 0x00, 0x81, 0x8A, 0x02, 0x00, 0x07, +/* 000080B0 */ 0x8B, 0x02, 0x00, 0x91, 0x8B, 0x02, 0x00, 0xE5, 0x8B, 0x02, 0x00, 0xF4, 0x8B, 0x02, 0x00, 0x76, +/* 000080C0 */ 0x8C, 0x02, 0x00, 0xE7, 0x8C, 0x02, 0x00, 0x42, 0x8D, 0x02, 0x00, 0xAD, 0x8D, 0x02, 0x00, 0x27, +/* 000080D0 */ 0x8E, 0x02, 0x00, 0x78, 0x8E, 0x02, 0x00, 0x87, 0x8E, 0x02, 0x00, 0xFD, 0x8E, 0x02, 0x00, 0x0C, +/* 000080E0 */ 0x8F, 0x02, 0x00, 0x98, 0x8F, 0x02, 0x00, 0x21, 0x90, 0x02, 0x00, 0x6C, 0x90, 0x02, 0x00, 0x6D, +/* 000080F0 */ 0x90, 0x02, 0x00, 0xBD, 0x90, 0x02, 0x00, 0x5A, 0x91, 0x02, 0x00, 0xDF, 0x91, 0x02, 0x00, 0x08, +/* 00008100 */ 0x92, 0x02, 0x00, 0xB3, 0x92, 0x02, 0x00, 0xB4, 0x92, 0x02, 0x00, 0x04, 0x93, 0x02, 0x00, 0xA5, +/* 00008110 */ 0x93, 0x02, 0x00, 0x2A, 0x94, 0x02, 0x00, 0x53, 0x94, 0x02, 0x00, 0x0C, 0x95, 0x02, 0x00, 0x0D, +/* 00008120 */ 0x95, 0x02, 0x00, 0x5D, 0x95, 0x02, 0x00, 0xFE, 0x95, 0x02, 0x00, 0x83, 0x96, 0x02, 0x00, 0xAC, +/* 00008130 */ 0x96, 0x02, 0x00, 0x65, 0x97, 0x02, 0x00, 0x66, 0x97, 0x02, 0x00, 0x8D, 0x97, 0x02, 0x00, 0xE1, +/* 00008140 */ 0x97, 0x02, 0x00, 0x20, 0x98, 0x02, 0x00, 0x65, 0x98, 0x02, 0x00, 0x7B, 0x98, 0x02, 0x00, 0x7C, +/* 00008150 */ 0x98, 0x02, 0x00, 0xB3, 0x98, 0x02, 0x00, 0xE7, 0x98, 0x02, 0x00, 0x36, 0x99, 0x02, 0x00, 0x4C, +/* 00008160 */ 0x99, 0x02, 0x00, 0x4D, 0x99, 0x02, 0x00, 0x88, 0x99, 0x02, 0x00, 0xCE, 0x99, 0x02, 0x00, 0xCF, +/* 00008170 */ 0x99, 0x02, 0x00, 0x05, 0x9A, 0x02, 0x00, 0x44, 0x9A, 0x02, 0x00, 0x89, 0x9A, 0x02, 0x00, 0x9F, +/* 00008180 */ 0x9A, 0x02, 0x00, 0xA0, 0x9A, 0x02, 0x00, 0xEE, 0x9A, 0x02, 0x00, 0xEF, 0x9A, 0x02, 0x00, 0x55, +/* 00008190 */ 0x9B, 0x02, 0x00, 0x91, 0x9B, 0x02, 0x00, 0x92, 0x9B, 0x02, 0x00, 0xB2, 0x9B, 0x02, 0x00, 0xC4, +/* 000081A0 */ 0x9B, 0x02, 0x00, 0x0E, 0x9C, 0x02, 0x00, 0x0F, 0x9C, 0x02, 0x00, 0x37, 0x9C, 0x02, 0x00, 0x6B, +/* 000081B0 */ 0x9C, 0x02, 0x00, 0xD8, 0x9C, 0x02, 0x00, 0xEE, 0x9C, 0x02, 0x00, 0x35, 0x9D, 0x02, 0x00, 0x98, +/* 000081C0 */ 0x9D, 0x02, 0x00, 0x05, 0x9E, 0x02, 0x00, 0x1B, 0x9E, 0x02, 0x00, 0x1C, 0x9E, 0x02, 0x00, 0x6E, +/* 000081D0 */ 0x9E, 0x02, 0x00, 0xA3, 0x9E, 0x02, 0x00, 0xB9, 0x9E, 0x02, 0x00, 0xBA, 0x9E, 0x02, 0x00, 0xE9, +/* 000081E0 */ 0x9E, 0x02, 0x00, 0x17, 0x9F, 0x02, 0x00, 0x53, 0x9F, 0x02, 0x00, 0x70, 0x9F, 0x02, 0x00, 0x9F, +/* 000081F0 */ 0x9F, 0x02, 0x00, 0xB5, 0x9F, 0x02, 0x00, 0xB6, 0x9F, 0x02, 0x00, 0x0B, 0xA0, 0x02, 0x00, 0x1D, +/* 00008200 */ 0xA0, 0x02, 0x00, 0x70, 0xA0, 0x02, 0x00, 0x71, 0xA0, 0x02, 0x00, 0xB8, 0xA0, 0x02, 0x00, 0xB9, +/* 00008210 */ 0xA0, 0x02, 0x00, 0x56, 0xA1, 0x02, 0x00, 0xA0, 0xA1, 0x02, 0x00, 0x41, 0xA2, 0x02, 0x00, 0x42, +/* 00008220 */ 0xA2, 0x02, 0x00, 0x8D, 0xA2, 0x02, 0x00, 0xD4, 0xA2, 0x02, 0x00, 0x0C, 0xA3, 0x02, 0x00, 0x7D, +/* 00008230 */ 0xA3, 0x02, 0x00, 0x97, 0xA3, 0x02, 0x00, 0x98, 0xA3, 0x02, 0x00, 0xE3, 0xA3, 0x02, 0x00, 0x4A, +/* 00008240 */ 0xA4, 0x02, 0x00, 0xBB, 0xA4, 0x02, 0x00, 0xD5, 0xA4, 0x02, 0x00, 0xD6, 0xA4, 0x02, 0x00, 0x11, +/* 00008250 */ 0xA5, 0x02, 0x00, 0x4F, 0xA5, 0x02, 0x00, 0x63, 0xA5, 0x02, 0x00, 0x64, 0xA5, 0x02, 0x00, 0xB8, +/* 00008260 */ 0xA5, 0x02, 0x00, 0xF0, 0xA5, 0x02, 0x00, 0x28, 0xA6, 0x02, 0x00, 0xA2, 0xA6, 0x02, 0x00, 0xBC, +/* 00008270 */ 0xA6, 0x02, 0x00, 0x07, 0xA7, 0x02, 0x00, 0x6E, 0xA7, 0x02, 0x00, 0xE8, 0xA7, 0x02, 0x00, 0x02, +/* 00008280 */ 0xA8, 0x02, 0x00, 0x34, 0xA8, 0x02, 0x00, 0x6F, 0xA8, 0x02, 0x00, 0xC6, 0xA8, 0x02, 0x00, 0x2B, +/* 00008290 */ 0xA9, 0x02, 0x00, 0x6A, 0xA9, 0x02, 0x00, 0xA5, 0xA9, 0x02, 0x00, 0xE2, 0xA9, 0x02, 0x00, 0x17, +/* 000082A0 */ 0xAA, 0x02, 0x00, 0x4E, 0xAA, 0x02, 0x00, 0x87, 0xAA, 0x02, 0x00, 0xBC, 0xAA, 0x02, 0x00, 0xF3, +/* 000082B0 */ 0xAA, 0x02, 0x00, 0x2E, 0xAB, 0x02, 0x00, 0x69, 0xAB, 0x02, 0x00, 0xAF, 0xAB, 0x02, 0x00, 0xD0, +/* 000082C0 */ 0xAB, 0x02, 0x00, 0x0E, 0xAC, 0x02, 0x00, 0x80, 0xAC, 0x02, 0x00, 0x22, 0xAD, 0x02, 0x00, 0x5E, +/* 000082D0 */ 0xAD, 0x02, 0x00, 0x7C, 0xAD, 0x02, 0x00, 0xA6, 0xAD, 0x02, 0x00, 0xEE, 0xAD, 0x02, 0x00, 0x3B, +/* 000082E0 */ 0xAE, 0x02, 0x00, 0x4F, 0xAE, 0x02, 0x00, 0x50, 0xAE, 0x02, 0x00, 0xEE, 0xAE, 0x02, 0x00, 0xEF, +/* 000082F0 */ 0xAE, 0x02, 0x00, 0x16, 0xAF, 0x02, 0x00, 0x24, 0xAF, 0x02, 0x00, 0x2E, 0xAF, 0x02, 0x00, 0x7F, +/* 00008300 */ 0xAF, 0x02, 0x00, 0x99, 0xAF, 0x02, 0x00, 0xA3, 0xAF, 0x02, 0x00, 0xA4, 0xAF, 0x02, 0x00, 0xD5, +/* 00008310 */ 0xAF, 0x02, 0x00, 0xF4, 0xAF, 0x02, 0x00, 0x70, 0xB0, 0x02, 0x00, 0xF4, 0xB0, 0x02, 0x00, 0x7C, +/* 00008320 */ 0xB1, 0x02, 0x00, 0x0E, 0xB2, 0x02, 0x00, 0x14, 0xB2, 0x02, 0x00, 0x15, 0xB2, 0x02, 0x00, 0x2A, +/* 00008330 */ 0xB2, 0x02, 0x00, 0x2E, 0xB2, 0x02, 0x00, 0x00, 0xC7, 0x73, 0x0C, 0x00, 0x00, 0x00, 0x10, 0x08, +/* 00008340 */ 0x00, 0xA8, 0x41, 0xC0, 0x00, 0xFE, 0xD9, 0x02, 0x00, 0xFE, 0xBC, 0x01, 0xFE, 0xBC, 0x01, 0x01, +/* 00008350 */ 0x40, 0xFE, 0x00, 0x90, 0xFE, 0xBC, 0x01, 0xFF, 0x72, 0xB0, 0x02, 0x00, 0xFF, 0x72, 0xB0, 0x02, +/* 00008360 */ 0x00, 0x01, 0x04, 0x04, 0x04, 0x04, 0x03, 0x05, 0xFE, 0xDA, 0x02, 0x0A, 0x07, 0xA8, 0x00, 0xD6, +/* 00008370 */ 0x00, 0x04, 0x24, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x83, 0x00, 0x00, 0x7F, +/* 00008380 */ 0x1D, 0x00, 0xC1, 0x53, 0x5A, 0x4B, 0x04, 0x08, 0x01, 0xA2, 0x41, 0xD1, 0x00, 0x01, 0xFE, 0xDC, +/* 00008390 */ 0x01, 0xFE, 0xDC, 0x01, 0x5B, 0x40, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, 0xDC, 0x01, 0xFF, 0x4F, +/* 000083A0 */ 0xB0, 0x02, 0x00, 0xFF, 0x4F, 0xB0, 0x02, 0x00, 0x35, 0xFE, 0xDB, 0x02, 0xFE, 0x14, 0x02, 0xFE, +/* 000083B0 */ 0xDC, 0x02, 0xFE, 0xDD, 0x02, 0xFE, 0xDE, 0x02, 0xBB, 0x58, 0xFE, 0x11, 0x01, 0xFE, 0x39, 0x01, +/* 000083C0 */ 0xFE, 0x0B, 0x01, 0xFE, 0x5C, 0x01, 0x6B, 0x7F, 0xFE, 0xDF, 0x02, 0xD7, 0xFE, 0xE0, 0x02, 0xFE, +/* 000083D0 */ 0xE1, 0x02, 0xFE, 0xE2, 0x02, 0xFE, 0xE3, 0x02, 0xFE, 0xE4, 0x02, 0xFE, 0xE5, 0x02, 0xFE, 0xE6, +/* 000083E0 */ 0x02, 0xFE, 0xE7, 0x02, 0xFE, 0xE8, 0x02, 0xFE, 0xE9, 0x02, 0xFE, 0xEA, 0x02, 0xFE, 0xEB, 0x02, +/* 000083F0 */ 0xFE, 0xEC, 0x02, 0xFE, 0xED, 0x02, 0xFE, 0xEE, 0x02, 0xC1, 0xC4, 0xFE, 0xEF, 0x02, 0xFE, 0xF0, +/* 00008400 */ 0x02, 0xFE, 0xF1, 0x02, 0xFE, 0xF2, 0x02, 0xFE, 0xF4, 0x01, 0xFE, 0xF3, 0x01, 0xFE, 0xF3, 0x02, +/* 00008410 */ 0xFE, 0xF4, 0x02, 0xFE, 0xF5, 0x02, 0xFE, 0xF6, 0x02, 0xFE, 0xF7, 0x02, 0xFE, 0xF8, 0x02, 0xFE, +/* 00008420 */ 0x12, 0x02, 0xFE, 0xF9, 0x02, 0xFE, 0xFA, 0x02, 0xFE, 0xFB, 0x02, 0xFE, 0xFC, 0x02, 0xFE, 0xFD, +/* 00008430 */ 0x02, 0xFE, 0xFE, 0x02, 0xFE, 0xFF, 0x02, 0xFE, 0x00, 0x03, 0x1E, 0x53, 0x6B, 0x09, 0xFE, 0x9D, +/* 00008440 */ 0x03, 0xFE, 0x92, 0x03, 0x16, 0xA0, 0xA0, 0xA0, 0xA0, 0x1B, 0x02, 0x68, 0x69, 0x6A, 0x6B, 0x08, +/* 00008450 */ 0x0B, 0x06, 0xFE, 0xFE, 0x02, 0x06, 0xFE, 0x01, 0x03, 0x06, 0xFE, 0x02, 0x03, 0x06, 0xFE, 0x03, +/* 00008460 */ 0x03, 0x06, 0xFE, 0x04, 0x03, 0x07, 0x06, 0xFE, 0x05, 0x03, 0x06, 0xFE, 0x06, 0x03, 0x06, 0xFE, +/* 00008470 */ 0x07, 0x03, 0x06, 0xFE, 0x08, 0x03, 0x06, 0xFE, 0x09, 0x03, 0x06, 0xFE, 0x0A, 0x03, 0x06, 0xFE, +/* 00008480 */ 0x0B, 0x03, 0x06, 0xFE, 0x0C, 0x03, 0x06, 0xFE, 0x0D, 0x03, 0x06, 0xFE, 0x0E, 0x03, 0x06, 0xFE, +/* 00008490 */ 0x0F, 0x03, 0x06, 0xFE, 0x10, 0x03, 0x06, 0xFE, 0x11, 0x03, 0x06, 0xFE, 0x12, 0x03, 0x06, 0xFE, +/* 000084A0 */ 0x13, 0x03, 0x06, 0xFE, 0x14, 0x03, 0x06, 0xFE, 0x15, 0x03, 0x06, 0xFE, 0x16, 0x03, 0x06, 0xFE, +/* 000084B0 */ 0x17, 0x03, 0x06, 0xFE, 0x18, 0x03, 0x06, 0xFE, 0x19, 0x03, 0x06, 0xFE, 0x1A, 0x03, 0x06, 0xFE, +/* 000084C0 */ 0x1B, 0x03, 0x06, 0xFE, 0x1C, 0x03, 0x06, 0xFE, 0x1D, 0x03, 0x06, 0xFE, 0x1E, 0x03, 0x06, 0xFE, +/* 000084D0 */ 0x1F, 0x03, 0x06, 0xFE, 0x20, 0x03, 0x06, 0xFE, 0x21, 0x03, 0x06, 0xFE, 0x22, 0x03, 0x06, 0xFE, +/* 000084E0 */ 0x23, 0x03, 0x06, 0xFE, 0x24, 0x03, 0x06, 0xFE, 0x25, 0x03, 0x06, 0xFE, 0x26, 0x03, 0x06, 0xFE, +/* 000084F0 */ 0x27, 0x03, 0x05, 0xFE, 0x28, 0x03, 0x06, 0xFE, 0x29, 0x03, 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, +/* 00008500 */ 0x2B, 0x03, 0x06, 0xFE, 0x2C, 0x03, 0x0C, 0x06, 0xFE, 0x2D, 0x03, 0x06, 0xFE, 0x2E, 0x03, 0x06, +/* 00008510 */ 0xFE, 0x2F, 0x03, 0x06, 0xFE, 0x30, 0x03, 0x06, 0xFE, 0x31, 0x03, 0x06, 0xFE, 0x32, 0x03, 0x05, +/* 00008520 */ 0xFE, 0x33, 0x03, 0x05, 0xFE, 0x34, 0x03, 0x05, 0xFE, 0x35, 0x03, 0x05, 0xFE, 0x36, 0x03, 0x06, +/* 00008530 */ 0xFE, 0x37, 0x03, 0x06, 0xFE, 0x38, 0x03, 0x06, 0xFE, 0x39, 0x03, 0x06, 0xFE, 0x3A, 0x03, 0x05, +/* 00008540 */ 0xFE, 0x3B, 0x03, 0x06, 0xFE, 0x3C, 0x03, 0x06, 0xFE, 0x3D, 0x03, 0x06, 0xFE, 0x3E, 0x03, 0x05, +/* 00008550 */ 0xFE, 0x3F, 0x03, 0x06, 0xFE, 0x40, 0x03, 0x06, 0xFE, 0x41, 0x03, 0x05, 0xFE, 0x42, 0x03, 0x06, +/* 00008560 */ 0xFE, 0x43, 0x03, 0x06, 0xFE, 0x44, 0x03, 0x05, 0xFE, 0x45, 0x03, 0x06, 0xFE, 0x46, 0x03, 0x06, +/* 00008570 */ 0xFE, 0x47, 0x03, 0x06, 0xFE, 0x48, 0x03, 0x06, 0xFE, 0x49, 0x03, 0x06, 0xFE, 0x4A, 0x03, 0x06, +/* 00008580 */ 0xFE, 0x4B, 0x03, 0x06, 0xFE, 0x4C, 0x03, 0xFE, 0xAF, 0x0D, 0x96, 0x32, 0x54, 0xA8, 0x62, 0xA8, +/* 00008590 */ 0x63, 0xA8, 0x67, 0xD6, 0x01, 0x55, 0x96, 0x02, 0x55, 0x4E, 0x5F, 0x4E, 0x61, 0x4E, 0x64, 0xA8, +/* 000085A0 */ 0x56, 0xA8, 0x57, 0x4E, 0x60, 0x4E, 0x65, 0x4E, 0x66, 0xA8, 0x58, 0xA8, 0x59, 0xA8, 0x5A, 0xA8, +/* 000085B0 */ 0x5B, 0xA8, 0x5C, 0xA8, 0x5D, 0xA8, 0x5E, 0x4E, 0x6D, 0x96, 0x33, 0x6D, 0x4E, 0x6D, 0x96, 0x34, +/* 000085C0 */ 0x6D, 0x4E, 0x6D, 0x96, 0x35, 0x6D, 0x4E, 0x6D, 0x96, 0x36, 0x6D, 0x5E, 0x6D, 0x53, 0x00, 0x96, +/* 000085D0 */ 0x03, 0x6D, 0x92, 0x03, 0x6D, 0x76, 0x03, 0x6D, 0x01, 0x92, 0x03, 0x6E, 0x5E, 0x6E, 0x6E, 0x02, +/* 000085E0 */ 0xAD, 0x6D, 0x0F, 0x02, 0x00, 0x6E, 0xAC, 0x6D, 0x96, 0x33, 0x6D, 0x92, 0x03, 0x6D, 0x5E, 0x6D, +/* 000085F0 */ 0x6D, 0x03, 0x45, 0x5F, 0x6D, 0x96, 0x34, 0x04, 0x92, 0x03, 0x6D, 0x5E, 0x6D, 0x6D, 0x04, 0x96, +/* 00008600 */ 0x04, 0x6D, 0x92, 0x03, 0x6D, 0x5E, 0x6D, 0x6D, 0x05, 0x96, 0x05, 0x6D, 0x92, 0x03, 0x6D, 0x5E, +/* 00008610 */ 0x6D, 0x6D, 0x06, 0x96, 0x06, 0x6D, 0xD6, 0x00, 0x6D, 0x96, 0x35, 0x6D, 0x92, 0x03, 0x6D, 0x5E, +/* 00008620 */ 0x6D, 0x6D, 0x07, 0x96, 0x07, 0x6D, 0x92, 0x03, 0x6D, 0x5E, 0x6D, 0x6D, 0x08, 0x96, 0x08, 0x6D, +/* 00008630 */ 0x92, 0x03, 0x6D, 0x5E, 0x6D, 0x6D, 0x09, 0x96, 0x09, 0x6D, 0x92, 0x03, 0x6D, 0x5E, 0x6D, 0x6D, +/* 00008640 */ 0x0A, 0x96, 0x0A, 0x6D, 0x92, 0x03, 0x6D, 0x5E, 0x6D, 0x6D, 0x0B, 0x96, 0x0B, 0x6D, 0x92, 0x03, +/* 00008650 */ 0x6D, 0x5E, 0x6D, 0x6D, 0x0C, 0x96, 0x0C, 0x6D, 0x92, 0x03, 0x6D, 0x5E, 0x6D, 0x6D, 0x0D, 0x96, +/* 00008660 */ 0x0D, 0x6D, 0x92, 0x03, 0x6D, 0x5E, 0x6D, 0x6D, 0x0E, 0x96, 0x0E, 0x6D, 0x92, 0x03, 0x6D, 0x5E, +/* 00008670 */ 0x6D, 0x6D, 0x0F, 0x96, 0x0F, 0x6D, 0x92, 0x04, 0x6D, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0xCE, +/* 00008680 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x92, 0x03, 0x6F, 0x5E, +/* 00008690 */ 0x6F, 0x6F, 0x10, 0x7A, 0x6F, 0x6E, 0x11, 0x92, 0x03, 0x6F, 0x5E, 0x6F, 0x6F, 0x12, 0x7A, 0x6F, +/* 000086A0 */ 0x6E, 0x13, 0x92, 0x03, 0x6F, 0x5E, 0x6F, 0x6F, 0x14, 0x7A, 0x6F, 0x6E, 0x15, 0x92, 0x03, 0x6F, +/* 000086B0 */ 0x5E, 0x6F, 0x6F, 0x16, 0x7A, 0x6F, 0x6E, 0x17, 0x59, 0x01, 0x6E, 0x59, 0x02, 0x09, 0x1F, 0x03, +/* 000086C0 */ 0x6D, 0x6D, 0x96, 0x10, 0x6D, 0x92, 0x03, 0x6D, 0x5E, 0x6D, 0x6D, 0x18, 0x96, 0x11, 0x6D, 0x92, +/* 000086D0 */ 0x03, 0x6D, 0x5E, 0x6D, 0x6D, 0x19, 0x96, 0x12, 0x6D, 0x92, 0x03, 0x6D, 0x5E, 0x6D, 0x6D, 0x1A, +/* 000086E0 */ 0x96, 0x13, 0x6D, 0x92, 0x03, 0x6D, 0x5E, 0x6D, 0x6D, 0x1B, 0x96, 0x14, 0x6D, 0x92, 0x03, 0x6D, +/* 000086F0 */ 0x5E, 0x6D, 0x6D, 0x1C, 0x96, 0x15, 0x6D, 0xD6, 0x02, 0x6D, 0x96, 0x16, 0x6D, 0x92, 0x03, 0x6D, +/* 00008700 */ 0x5E, 0x6D, 0x6D, 0x1D, 0x96, 0x17, 0x6D, 0x92, 0x03, 0x6D, 0x5E, 0x6D, 0x6D, 0x1E, 0x96, 0x18, +/* 00008710 */ 0x6D, 0x92, 0x03, 0x6D, 0x5E, 0x6D, 0x6D, 0x1F, 0x96, 0x19, 0x6D, 0x92, 0x03, 0x6D, 0x5E, 0x6D, +/* 00008720 */ 0x6D, 0x20, 0x96, 0x1A, 0x6D, 0x92, 0x03, 0x6D, 0x5E, 0x6D, 0x6D, 0x21, 0x96, 0x1B, 0x6D, 0x92, +/* 00008730 */ 0x03, 0x6D, 0x5E, 0x6D, 0x6D, 0x22, 0x96, 0x1C, 0x6D, 0x92, 0x03, 0x6D, 0x5E, 0x6D, 0x6D, 0x23, +/* 00008740 */ 0x96, 0x1D, 0x6D, 0x92, 0x03, 0x6D, 0x5E, 0x6D, 0x6D, 0x24, 0x96, 0x1E, 0x6D, 0x92, 0x03, 0x6D, +/* 00008750 */ 0x5E, 0x6D, 0x6D, 0x25, 0x96, 0x1F, 0x6D, 0x92, 0x03, 0x6D, 0x5E, 0x6D, 0x6D, 0x26, 0x96, 0x20, +/* 00008760 */ 0x6D, 0x92, 0x03, 0x6D, 0x5E, 0x6D, 0x6D, 0x27, 0x96, 0x21, 0x6D, 0xCE, 0x18, 0x00, 0x00, 0x00, +/* 00008770 */ 0x01, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x00, 0x00, 0xD9, 0x03, 0x6E, 0x6D, 0x7A, 0x6E, 0x6D, 0x28, +/* 00008780 */ 0xD9, 0x04, 0x6E, 0x6D, 0x7A, 0x6E, 0x6D, 0x29, 0xD9, 0x05, 0x6E, 0x6D, 0x7A, 0x6E, 0x6D, 0x2A, +/* 00008790 */ 0xD9, 0x06, 0x6E, 0x6D, 0x7A, 0x6E, 0x6D, 0x2B, 0xD9, 0x07, 0x6E, 0x6D, 0x7A, 0x6E, 0x6D, 0x2C, +/* 000087A0 */ 0xD9, 0x08, 0x6E, 0x6D, 0x7A, 0x6E, 0x6D, 0x2D, 0xD9, 0x09, 0x6E, 0x6D, 0x7A, 0x6E, 0x6D, 0x2E, +/* 000087B0 */ 0xD9, 0x0A, 0x6E, 0x6D, 0x7A, 0x6E, 0x6D, 0x2F, 0xD9, 0x0B, 0x6E, 0x6D, 0x7A, 0x6E, 0x6D, 0x30, +/* 000087C0 */ 0xD9, 0x0C, 0x6E, 0x6D, 0x7A, 0x6E, 0x6D, 0x31, 0xD9, 0x0D, 0x6E, 0x6D, 0x7A, 0x6E, 0x6D, 0x32, +/* 000087D0 */ 0xD9, 0x0E, 0x6E, 0x6D, 0x7A, 0x6E, 0x6D, 0x33, 0xD9, 0x0F, 0x6E, 0x6D, 0x7A, 0x6E, 0x6D, 0x34, +/* 000087E0 */ 0xD9, 0x10, 0x6E, 0x6D, 0x7A, 0x6E, 0x6D, 0x35, 0xD9, 0x11, 0x6E, 0x6D, 0x7A, 0x6E, 0x6D, 0x36, +/* 000087F0 */ 0xD9, 0x12, 0x6E, 0x6D, 0x7A, 0x6E, 0x6D, 0x37, 0xD9, 0x13, 0x6E, 0x6D, 0x7A, 0x6E, 0x6D, 0x38, +/* 00008800 */ 0x92, 0x03, 0x6E, 0x5E, 0x6E, 0x6E, 0x39, 0x7A, 0x6E, 0x6D, 0x3A, 0xD9, 0x14, 0x6E, 0x6D, 0x7A, +/* 00008810 */ 0x6E, 0x6D, 0x3B, 0xD9, 0x15, 0x6E, 0x6D, 0x7A, 0x6E, 0x6D, 0x3C, 0x92, 0x03, 0x6E, 0x5E, 0x6E, +/* 00008820 */ 0x6E, 0x3D, 0x7A, 0x6E, 0x6D, 0x3E, 0xD9, 0x16, 0x6E, 0x6D, 0x7A, 0x6E, 0x6D, 0x3F, 0xD9, 0x17, +/* 00008830 */ 0x6E, 0x6D, 0x7A, 0x6E, 0x6D, 0x40, 0x92, 0x03, 0x6E, 0x5E, 0x6E, 0x6E, 0x41, 0x7A, 0x6E, 0x6D, +/* 00008840 */ 0x42, 0xD9, 0x18, 0x6E, 0x6D, 0x7A, 0x6E, 0x6D, 0x43, 0x92, 0x03, 0x6E, 0x5E, 0x6E, 0x6E, 0x44, +/* 00008850 */ 0x7A, 0x6E, 0x6D, 0x45, 0x92, 0x03, 0x6E, 0x5E, 0x6E, 0x6E, 0x46, 0x7A, 0x6E, 0x6D, 0x47, 0x92, +/* 00008860 */ 0x03, 0x6E, 0x5E, 0x6E, 0x6E, 0x48, 0x7A, 0x6E, 0x6D, 0x49, 0x92, 0x03, 0x6E, 0x5E, 0x6E, 0x6E, +/* 00008870 */ 0x4A, 0x7A, 0x6E, 0x6D, 0x4B, 0xD9, 0x19, 0x6E, 0x6D, 0x7A, 0x6E, 0x6D, 0x4C, 0xD9, 0x1A, 0x6E, +/* 00008880 */ 0x6D, 0x7A, 0x6E, 0x6D, 0x4D, 0xD9, 0x1B, 0x6E, 0x6D, 0x7A, 0x6E, 0x6D, 0x4E, 0x96, 0x36, 0x6D, +/* 00008890 */ 0x92, 0x33, 0x6D, 0x0E, 0xC8, 0x03, 0x6D, 0xE0, 0x00, 0x18, 0x03, 0xB9, 0x6D, 0x00, 0x01, 0x66, +/* 000088A0 */ 0x01, 0x2B, 0x56, 0x6D, 0x95, 0x00, 0x02, 0x56, 0x01, 0x66, 0x01, 0x2D, 0x57, 0x6D, 0x95, 0x00, +/* 000088B0 */ 0x03, 0x57, 0x4E, 0x6D, 0x95, 0x00, 0x04, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x05, 0x6D, 0x4E, 0x6D, +/* 000088C0 */ 0x95, 0x00, 0x06, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x07, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x08, 0x6D, +/* 000088D0 */ 0x4E, 0x6D, 0x95, 0x00, 0x09, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x0A, 0x6D, 0x4E, 0x6D, 0x95, 0x00, +/* 000088E0 */ 0x0B, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x0C, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x0D, 0x6D, 0x4E, 0x6D, +/* 000088F0 */ 0x95, 0x00, 0x0E, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x0F, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x10, 0x6D, +/* 00008900 */ 0x4E, 0x6D, 0x95, 0x00, 0x11, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x12, 0x6D, 0x4E, 0x6D, 0x95, 0x00, +/* 00008910 */ 0x13, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x14, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x15, 0x6D, 0x4E, 0x6D, +/* 00008920 */ 0x95, 0x00, 0x16, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x17, 0x6D, 0xA8, 0x6D, 0x95, 0x00, 0x04, 0x6D, +/* 00008930 */ 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x1C, 0x6D, 0x6E, 0x95, 0x00, 0x05, 0x6D, 0xB9, 0x6E, 0x00, +/* 00008940 */ 0x01, 0x66, 0x01, 0x1D, 0x6D, 0x6E, 0x96, 0x22, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x1E, +/* 00008950 */ 0x6D, 0x6E, 0x96, 0x23, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x1F, 0x6D, 0x6E, 0x95, 0x00, +/* 00008960 */ 0x06, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x20, 0x6D, 0x6E, 0x95, 0x00, 0x07, 0x6D, 0xB9, +/* 00008970 */ 0x6E, 0x00, 0x01, 0x66, 0x01, 0x21, 0x6D, 0x6E, 0x95, 0x00, 0x08, 0x6D, 0xB9, 0x6E, 0x00, 0x01, +/* 00008980 */ 0x66, 0x01, 0x22, 0x6D, 0x6E, 0x95, 0x00, 0x09, 0x6D, 0x90, 0x00, 0x09, 0x6D, 0x95, 0x00, 0x0A, +/* 00008990 */ 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x23, 0x6D, 0x6E, 0x95, 0x00, 0x0B, 0x6D, 0xB9, 0x6E, +/* 000089A0 */ 0x00, 0x01, 0x66, 0x01, 0x24, 0x6D, 0x6E, 0x95, 0x00, 0x0C, 0x6D, 0x92, 0x35, 0x6D, 0x07, 0x02, +/* 000089B0 */ 0x00, 0x59, 0x00, 0x02, 0xCE, 0xA0, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x00, +/* 000089C0 */ 0x00, 0xB9, 0x70, 0x00, 0x01, 0x6A, 0x01, 0x25, 0x6F, 0x70, 0x6E, 0x7A, 0x6F, 0x6E, 0x4F, 0xB9, +/* 000089D0 */ 0x70, 0x00, 0x01, 0x6A, 0x01, 0x26, 0x6F, 0x70, 0x6E, 0x7A, 0x6F, 0x6E, 0x50, 0xB9, 0x70, 0x00, +/* 000089E0 */ 0x01, 0x6A, 0x01, 0x27, 0x6F, 0x70, 0x6E, 0x7A, 0x6F, 0x6E, 0x51, 0xB9, 0x70, 0x00, 0x01, 0x6A, +/* 000089F0 */ 0x01, 0x28, 0x6F, 0x70, 0x6E, 0x7A, 0x6F, 0x6E, 0x52, 0xB9, 0x70, 0x00, 0x01, 0x6A, 0x01, 0x29, +/* 00008A00 */ 0x6F, 0x70, 0x6E, 0x7A, 0x6F, 0x6E, 0x53, 0xB9, 0x70, 0x00, 0x01, 0x6A, 0x01, 0x2A, 0x6F, 0x70, +/* 00008A10 */ 0x6E, 0x7A, 0x6F, 0x6E, 0x54, 0x59, 0x01, 0x6E, 0x1F, 0x02, 0x6D, 0x6D, 0x96, 0x24, 0x6D, 0xB9, +/* 00008A20 */ 0x6E, 0x00, 0x01, 0x66, 0x01, 0x2C, 0x6D, 0x6E, 0x95, 0x00, 0x0D, 0x6D, 0xA8, 0x6D, 0x95, 0x00, +/* 00008A30 */ 0x0E, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x2E, 0x6D, 0x6E, 0x07, 0x01, 0x00, 0x59, 0x00, +/* 00008A40 */ 0x02, 0x1F, 0x01, 0x6D, 0x6D, 0x95, 0x00, 0x0F, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x2F, +/* 00008A50 */ 0x6D, 0x6E, 0x95, 0x00, 0x10, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x30, 0x6D, 0x6E, 0x95, +/* 00008A60 */ 0x00, 0x11, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x31, 0x6D, 0x6E, 0x95, 0x00, 0x12, 0x6D, +/* 00008A70 */ 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x32, 0x6D, 0x6E, 0x95, 0x00, 0x13, 0x6D, 0x90, 0x00, 0x13, +/* 00008A80 */ 0x6D, 0x95, 0x00, 0x14, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x33, 0x6D, 0x6E, 0x95, 0x00, +/* 00008A90 */ 0x15, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x34, 0x6D, 0x6E, 0x95, 0x00, 0x16, 0x6D, 0x92, +/* 00008AA0 */ 0x32, 0x6D, 0x14, 0x03, 0x00, 0x6D, 0x2C, 0x09, 0x5A, 0x00, 0x90, 0x00, 0x06, 0x6D, 0x07, 0x03, +/* 00008AB0 */ 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x2D, 0xB9, 0x6F, 0x00, 0x01, 0x66, 0x01, 0x35, 0x6E, 0x6F, +/* 00008AC0 */ 0x59, 0x02, 0x6E, 0x1F, 0x03, 0x6D, 0x6D, 0x45, 0x60, 0x6D, 0x92, 0x36, 0x6E, 0x6C, 0x6D, 0x6E, +/* 00008AD0 */ 0x55, 0x07, 0x04, 0x00, 0x59, 0x00, 0x6E, 0x92, 0x07, 0x6F, 0x59, 0x01, 0x6F, 0x59, 0x02, 0x2E, +/* 00008AE0 */ 0xCE, 0xC0, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x00, 0x00, 0x7A, 0x60, 0x6F, +/* 00008AF0 */ 0x56, 0x7A, 0x03, 0x6F, 0x57, 0x7A, 0x32, 0x6F, 0x58, 0x7A, 0x03, 0x6F, 0x59, 0x59, 0x03, 0x6F, +/* 00008B00 */ 0x1F, 0x04, 0xFF, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x36, 0x6D, 0x6E, 0x95, 0x00, 0x17, +/* 00008B10 */ 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x37, 0x6D, 0x6E, 0x07, 0x01, 0x00, 0x59, 0x00, 0x02, +/* 00008B20 */ 0x1F, 0x01, 0x6D, 0x6D, 0x45, 0x61, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x38, 0x6D, 0x6E, +/* 00008B30 */ 0x07, 0x01, 0x00, 0x59, 0x00, 0x02, 0x1F, 0x01, 0x6D, 0x6D, 0x45, 0x62, 0x6D, 0xB9, 0x6E, 0x00, +/* 00008B40 */ 0x01, 0x66, 0x01, 0x39, 0x6D, 0x6E, 0x07, 0x01, 0x00, 0x59, 0x00, 0x02, 0x1F, 0x01, 0x6D, 0x6D, +/* 00008B50 */ 0x45, 0x63, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x3A, 0x6D, 0x6E, 0x07, 0x01, 0x00, 0x59, +/* 00008B60 */ 0x00, 0x02, 0x1F, 0x01, 0x6D, 0x6D, 0x45, 0x64, 0x6D, 0x92, 0x32, 0x6D, 0x14, 0x03, 0x00, 0x6D, +/* 00008B70 */ 0x2C, 0x09, 0xE8, 0x00, 0x92, 0x36, 0x6E, 0x6C, 0x6D, 0x6E, 0x5A, 0x07, 0x04, 0x00, 0x59, 0x00, +/* 00008B80 */ 0x6E, 0x92, 0x07, 0x6F, 0x59, 0x01, 0x6F, 0x59, 0x02, 0x34, 0xCE, 0xD8, 0x00, 0x00, 0x00, 0x04, +/* 00008B90 */ 0x00, 0x00, 0x00, 0x6F, 0x00, 0x00, 0x00, 0x7A, 0x61, 0x6F, 0x5B, 0x7A, 0x03, 0x6F, 0x5C, 0x7A, +/* 00008BA0 */ 0x32, 0x6F, 0x5D, 0x7A, 0x03, 0x6F, 0x5E, 0x59, 0x03, 0x6F, 0x1F, 0x04, 0xFF, 0x6D, 0x92, 0x36, +/* 00008BB0 */ 0x6E, 0x6C, 0x6D, 0x6E, 0x5F, 0x07, 0x04, 0x00, 0x59, 0x00, 0x6E, 0x92, 0x07, 0x6F, 0x59, 0x01, +/* 00008BC0 */ 0x6F, 0x59, 0x02, 0x35, 0xCE, 0xF0, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x00, +/* 00008BD0 */ 0x00, 0x7A, 0x62, 0x6F, 0x60, 0x7A, 0x03, 0x6F, 0x61, 0x7A, 0x32, 0x6F, 0x62, 0x7A, 0x03, 0x6F, +/* 00008BE0 */ 0x63, 0x59, 0x03, 0x6F, 0x1F, 0x04, 0xFF, 0x6D, 0x92, 0x36, 0x6E, 0x6C, 0x6D, 0x6E, 0x64, 0x07, +/* 00008BF0 */ 0x04, 0x00, 0x59, 0x00, 0x6E, 0x92, 0x07, 0x6F, 0x59, 0x01, 0x6F, 0x59, 0x02, 0x36, 0xCE, 0x08, +/* 00008C00 */ 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x00, 0x00, 0x7A, 0x63, 0x6F, 0x65, 0x7A, +/* 00008C10 */ 0x03, 0x6F, 0x66, 0x7A, 0x32, 0x6F, 0x67, 0x7A, 0x03, 0x6F, 0x68, 0x59, 0x03, 0x6F, 0x1F, 0x04, +/* 00008C20 */ 0xFF, 0x6D, 0x92, 0x36, 0x6E, 0x6C, 0x6D, 0x6E, 0x69, 0x07, 0x04, 0x00, 0x59, 0x00, 0x6E, 0x92, +/* 00008C30 */ 0x07, 0x6F, 0x59, 0x01, 0x6F, 0x59, 0x02, 0x37, 0xCE, 0x20, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, +/* 00008C40 */ 0x00, 0x6F, 0x00, 0x00, 0x00, 0x7A, 0x64, 0x6F, 0x6A, 0x7A, 0x03, 0x6F, 0x6B, 0x7A, 0x32, 0x6F, +/* 00008C50 */ 0x6C, 0x7A, 0x03, 0x6F, 0x6D, 0x59, 0x03, 0x6F, 0x1F, 0x04, 0xFF, 0x6D, 0x09, 0xD6, 0x06, 0xE0, +/* 00008C60 */ 0x00, 0x1A, 0x06, 0xB9, 0x6D, 0x00, 0x01, 0x66, 0x01, 0x48, 0x58, 0x6D, 0x95, 0x00, 0x02, 0x58, +/* 00008C70 */ 0x01, 0x66, 0x01, 0x49, 0x59, 0x6D, 0x95, 0x00, 0x03, 0x59, 0x01, 0x66, 0x01, 0x4A, 0x5A, 0x6D, +/* 00008C80 */ 0x95, 0x00, 0x04, 0x5A, 0x01, 0x66, 0x01, 0x4B, 0x5B, 0x6D, 0x95, 0x00, 0x05, 0x5B, 0x01, 0x66, +/* 00008C90 */ 0x01, 0x4C, 0x5C, 0x6D, 0x95, 0x00, 0x06, 0x5C, 0x01, 0x66, 0x01, 0x4D, 0x5D, 0x6D, 0x95, 0x00, +/* 00008CA0 */ 0x07, 0x5D, 0x01, 0x66, 0x01, 0x4E, 0x5E, 0x6D, 0x95, 0x00, 0x08, 0x5E, 0x4E, 0x6D, 0x95, 0x00, +/* 00008CB0 */ 0x09, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x0A, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x0B, 0x6D, 0x4E, 0x6D, +/* 00008CC0 */ 0x95, 0x00, 0x0C, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x0D, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x0E, 0x6D, +/* 00008CD0 */ 0x4E, 0x6D, 0x95, 0x00, 0x0F, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x10, 0x6D, 0x4E, 0x6D, 0x95, 0x00, +/* 00008CE0 */ 0x11, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x12, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x13, 0x6D, 0x4E, 0x6D, +/* 00008CF0 */ 0x95, 0x00, 0x14, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x15, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x16, 0x6D, +/* 00008D00 */ 0x4E, 0x6D, 0x95, 0x00, 0x17, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x18, 0x6D, 0x4E, 0x6D, 0x95, 0x00, +/* 00008D10 */ 0x19, 0x6D, 0x92, 0x03, 0x6D, 0x5E, 0x6D, 0x6D, 0x6E, 0xA8, 0x6E, 0x14, 0x03, 0x00, 0x6D, 0x6E, +/* 00008D20 */ 0x09, 0x11, 0x00, 0x92, 0x03, 0x6D, 0x92, 0x02, 0x6E, 0x07, 0x01, 0x00, 0xC4, 0x01, 0x6E, 0x6E, +/* 00008D30 */ 0x76, 0x6E, 0x6D, 0x6F, 0x92, 0x03, 0x6D, 0x5E, 0x6D, 0x6D, 0x70, 0xA8, 0x6E, 0x14, 0x03, 0x00, +/* 00008D40 */ 0x6D, 0x6E, 0x09, 0x11, 0x00, 0x92, 0x03, 0x6D, 0x92, 0x02, 0x6E, 0x07, 0x01, 0x00, 0xC4, 0x01, +/* 00008D50 */ 0x6E, 0x6E, 0x76, 0x6E, 0x6D, 0x71, 0xA8, 0x6D, 0x95, 0x00, 0x09, 0x6D, 0xB9, 0x6E, 0x00, 0x01, +/* 00008D60 */ 0x66, 0x01, 0x3B, 0x6D, 0x6E, 0x95, 0x00, 0x0A, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x3C, +/* 00008D70 */ 0x6D, 0x6E, 0x95, 0x00, 0x0B, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x3D, 0x6D, 0x6E, 0x95, +/* 00008D80 */ 0x00, 0x0C, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x3E, 0x6D, 0x6E, 0x96, 0x25, 0x6D, 0xB9, +/* 00008D90 */ 0x6E, 0x00, 0x01, 0x66, 0x01, 0x3F, 0x6D, 0x6E, 0x96, 0x22, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, +/* 00008DA0 */ 0x01, 0x40, 0x6D, 0x6E, 0x96, 0x23, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x41, 0x6D, 0x6E, +/* 00008DB0 */ 0x96, 0x26, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x42, 0x6D, 0x6E, 0x96, 0x27, 0x6D, 0xB9, +/* 00008DC0 */ 0x6E, 0x00, 0x01, 0x66, 0x01, 0x43, 0x6D, 0x6E, 0x96, 0x28, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, +/* 00008DD0 */ 0x01, 0x44, 0x6D, 0x6E, 0x96, 0x29, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x45, 0x6D, 0x6E, +/* 00008DE0 */ 0x96, 0x2A, 0x6D, 0xA8, 0x6D, 0x95, 0x00, 0x0D, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x46, +/* 00008DF0 */ 0x6D, 0x6E, 0x96, 0x2B, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x47, 0x6D, 0x6E, 0x07, 0x01, +/* 00008E00 */ 0x00, 0x59, 0x00, 0x02, 0x1F, 0x01, 0x6D, 0x6D, 0x96, 0x24, 0x6D, 0xA8, 0x6D, 0x95, 0x00, 0x0E, +/* 00008E10 */ 0x6D, 0xA8, 0x6D, 0x95, 0x00, 0x0F, 0x6D, 0xA8, 0x6D, 0x95, 0x00, 0x10, 0x6D, 0xA8, 0x6D, 0x95, +/* 00008E20 */ 0x00, 0x11, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x4F, 0x6D, 0x6E, 0x96, 0x2C, 0x6D, 0xB9, +/* 00008E30 */ 0x6E, 0x00, 0x01, 0x66, 0x01, 0x50, 0x6D, 0x6E, 0x96, 0x2D, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, +/* 00008E40 */ 0x01, 0x51, 0x6D, 0x6E, 0x96, 0x2E, 0x6D, 0x92, 0x04, 0x6D, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, +/* 00008E50 */ 0xCD, 0x6E, 0x59, 0x01, 0x6E, 0x59, 0x02, 0x09, 0x1F, 0x03, 0x6D, 0x6D, 0x45, 0x65, 0x6D, 0x92, +/* 00008E60 */ 0x03, 0x6E, 0x6C, 0x6D, 0x6E, 0x72, 0x07, 0x03, 0x00, 0x59, 0x00, 0x6E, 0x59, 0x01, 0x65, 0x92, +/* 00008E70 */ 0x04, 0x6F, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0xCE, 0x38, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, +/* 00008E80 */ 0x00, 0x70, 0x00, 0x00, 0x00, 0x7A, 0x39, 0x70, 0x73, 0x59, 0x01, 0x70, 0x59, 0x02, 0x09, 0x1F, +/* 00008E90 */ 0x03, 0x6F, 0x6F, 0x59, 0x02, 0x6F, 0x1F, 0x03, 0xFF, 0x6D, 0x95, 0x00, 0x12, 0x3A, 0x92, 0x06, +/* 00008EA0 */ 0x6D, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x92, 0x1A, 0x6E, 0x59, 0x01, 0x6E, 0x92, 0x23, 0x6E, +/* 00008EB0 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x90, 0x00, 0x12, 0x6F, 0x59, 0x01, 0x6F, 0xB9, 0x70, 0x00, +/* 00008EC0 */ 0x01, 0x66, 0x01, 0x52, 0x6F, 0x70, 0x59, 0x02, 0x6F, 0x1F, 0x03, 0x6E, 0x6E, 0x59, 0x02, 0x6E, +/* 00008ED0 */ 0x59, 0x03, 0x65, 0x1F, 0x04, 0x6D, 0x6D, 0x95, 0x00, 0x13, 0x6D, 0x95, 0x00, 0x14, 0x3B, 0x92, +/* 00008EE0 */ 0x06, 0x6D, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x92, 0x1A, 0x6E, 0x59, 0x01, 0x6E, 0x92, 0x23, +/* 00008EF0 */ 0x6E, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x90, 0x00, 0x14, 0x6F, 0x59, 0x01, 0x6F, 0xB9, 0x70, +/* 00008F00 */ 0x00, 0x01, 0x66, 0x01, 0x53, 0x6F, 0x70, 0x59, 0x02, 0x6F, 0x1F, 0x03, 0x6E, 0x6E, 0x59, 0x02, +/* 00008F10 */ 0x6E, 0x59, 0x03, 0x65, 0x1F, 0x04, 0x6D, 0x6D, 0x95, 0x00, 0x15, 0x6D, 0x95, 0x00, 0x16, 0x3C, +/* 00008F20 */ 0x92, 0x06, 0x6D, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x92, 0x1A, 0x6E, 0x59, 0x01, 0x6E, 0x92, +/* 00008F30 */ 0x23, 0x6E, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x90, 0x00, 0x16, 0x6F, 0x59, 0x01, 0x6F, 0xB9, +/* 00008F40 */ 0x70, 0x00, 0x01, 0x66, 0x01, 0x54, 0x6F, 0x70, 0x59, 0x02, 0x6F, 0x1F, 0x03, 0x6E, 0x6E, 0x59, +/* 00008F50 */ 0x02, 0x6E, 0x59, 0x03, 0x65, 0x1F, 0x04, 0x6D, 0x6D, 0x95, 0x00, 0x17, 0x6D, 0x95, 0x00, 0x18, +/* 00008F60 */ 0x2D, 0x92, 0x06, 0x6D, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x92, 0x1A, 0x6E, 0x59, 0x01, 0x6E, +/* 00008F70 */ 0x92, 0x23, 0x6E, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x90, 0x00, 0x18, 0x6F, 0x59, 0x01, 0x6F, +/* 00008F80 */ 0xB9, 0x70, 0x00, 0x01, 0x66, 0x01, 0x55, 0x6F, 0x70, 0x59, 0x02, 0x6F, 0x1F, 0x03, 0x6E, 0x6E, +/* 00008F90 */ 0x59, 0x02, 0x6E, 0x59, 0x03, 0x65, 0x1F, 0x04, 0x6D, 0x6D, 0x45, 0x66, 0x6D, 0x92, 0x16, 0x6D, +/* 00008FA0 */ 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x90, 0x00, 0x13, 0x6E, 0x59, 0x01, 0x6E, 0x59, 0x02, 0x3D, +/* 00008FB0 */ 0xCE, 0x44, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x7A, 0x3E, 0x6E, +/* 00008FC0 */ 0x74, 0x59, 0x03, 0x6E, 0x1F, 0x04, 0xFF, 0x6D, 0x92, 0x16, 0x6D, 0x07, 0x04, 0x00, 0x59, 0x00, +/* 00008FD0 */ 0x02, 0x90, 0x00, 0x15, 0x6E, 0x59, 0x01, 0x6E, 0x59, 0x02, 0x3D, 0xCE, 0x50, 0x01, 0x00, 0x00, +/* 00008FE0 */ 0x0A, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x7A, 0x3E, 0x6E, 0x75, 0x59, 0x03, 0x6E, 0x1F, +/* 00008FF0 */ 0x04, 0xFF, 0x6D, 0x92, 0x16, 0x6D, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x90, 0x00, 0x17, 0x6E, +/* 00009000 */ 0x59, 0x01, 0x6E, 0x59, 0x02, 0x3D, 0xCE, 0x5C, 0x01, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x6E, +/* 00009010 */ 0x00, 0x00, 0x00, 0x7A, 0x3E, 0x6E, 0x76, 0x59, 0x03, 0x6E, 0x1F, 0x04, 0xFF, 0x6D, 0x92, 0x16, +/* 00009020 */ 0x6D, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x66, 0x59, 0x02, 0x3D, 0xCE, 0x68, 0x01, +/* 00009030 */ 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x7A, 0x2E, 0x6E, 0x77, 0x59, 0x03, +/* 00009040 */ 0x6E, 0x1F, 0x04, 0xFF, 0x6D, 0x92, 0x04, 0x6D, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0xCE, 0x74, +/* 00009050 */ 0x01, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x92, 0x04, 0x6F, 0x07, 0x03, +/* 00009060 */ 0x00, 0x59, 0x00, 0x02, 0xCE, 0xA0, 0x01, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, +/* 00009070 */ 0x00, 0x7A, 0x41, 0x70, 0x78, 0x59, 0x01, 0x70, 0x59, 0x02, 0x09, 0x1F, 0x03, 0x6F, 0x6F, 0x7A, +/* 00009080 */ 0x6F, 0x6E, 0x79, 0x92, 0x04, 0x6F, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0xCE, 0xAC, 0x01, 0x00, +/* 00009090 */ 0x00, 0x0F, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x7A, 0x41, 0x70, 0x7A, 0x59, 0x01, 0x70, +/* 000090A0 */ 0x59, 0x02, 0x09, 0x1F, 0x03, 0x6F, 0x6F, 0x7A, 0x6F, 0x6E, 0x7B, 0x92, 0x04, 0x6F, 0x07, 0x03, +/* 000090B0 */ 0x00, 0x59, 0x00, 0x02, 0xCE, 0xB8, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, +/* 000090C0 */ 0x00, 0x7A, 0x45, 0x70, 0x7C, 0x59, 0x01, 0x70, 0x59, 0x02, 0x09, 0x1F, 0x03, 0x6F, 0x6F, 0x7A, +/* 000090D0 */ 0x6F, 0x6E, 0x7D, 0x92, 0x04, 0x6F, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0xCE, 0xC4, 0x01, 0x00, +/* 000090E0 */ 0x00, 0x11, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x7A, 0x48, 0x70, 0x7E, 0x59, 0x01, 0x70, +/* 000090F0 */ 0x59, 0x02, 0x09, 0x1F, 0x03, 0x6F, 0x6F, 0x7A, 0x6F, 0x6E, 0x7F, 0x92, 0x04, 0x6F, 0x07, 0x03, +/* 00009100 */ 0x00, 0x59, 0x00, 0x02, 0xCE, 0xD0, 0x01, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, +/* 00009110 */ 0x00, 0x7A, 0x4B, 0x70, 0x80, 0x7A, 0x48, 0x70, 0x81, 0x7A, 0x4D, 0x70, 0x82, 0x59, 0x01, 0x70, +/* 00009120 */ 0x59, 0x02, 0x09, 0x1F, 0x03, 0x6F, 0x6F, 0x7A, 0x6F, 0x6E, 0x83, 0x92, 0x04, 0x6F, 0x07, 0x03, +/* 00009130 */ 0x00, 0x59, 0x00, 0x02, 0xCE, 0xE4, 0x01, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, +/* 00009140 */ 0x00, 0x7A, 0x48, 0x70, 0x84, 0x7A, 0x4D, 0x70, 0x85, 0x59, 0x01, 0x70, 0x59, 0x02, 0x09, 0x1F, +/* 00009150 */ 0x03, 0x6F, 0x6F, 0x7A, 0x6F, 0x6E, 0x86, 0x92, 0x04, 0x6F, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, +/* 00009160 */ 0xCE, 0xF4, 0x01, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x7A, 0x48, 0x70, +/* 00009170 */ 0x87, 0x7A, 0x4D, 0x70, 0x88, 0x59, 0x01, 0x70, 0x59, 0x02, 0x09, 0x1F, 0x03, 0x6F, 0x6F, 0x7A, +/* 00009180 */ 0x6F, 0x6E, 0x89, 0x92, 0x04, 0x6F, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0xCE, 0x04, 0x02, 0x00, +/* 00009190 */ 0x00, 0x15, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x7A, 0x4C, 0x70, 0x8A, 0x7A, 0x4D, 0x70, +/* 000091A0 */ 0x8B, 0x59, 0x01, 0x70, 0x59, 0x02, 0x09, 0x1F, 0x03, 0x6F, 0x6F, 0x7A, 0x6F, 0x6E, 0x8C, 0x92, +/* 000091B0 */ 0x04, 0x6F, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0xCE, 0x14, 0x02, 0x00, 0x00, 0x16, 0x00, 0x00, +/* 000091C0 */ 0x00, 0x70, 0x00, 0x00, 0x00, 0x7A, 0x4C, 0x70, 0x8D, 0x7A, 0x4D, 0x70, 0x8E, 0x59, 0x01, 0x70, +/* 000091D0 */ 0x59, 0x02, 0x09, 0x1F, 0x03, 0x6F, 0x6F, 0x7A, 0x6F, 0x6E, 0x8F, 0x59, 0x01, 0x6E, 0x59, 0x02, +/* 000091E0 */ 0x09, 0x1F, 0x03, 0x6D, 0x6D, 0x96, 0x2F, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x56, 0x6D, +/* 000091F0 */ 0x6E, 0x07, 0x01, 0x00, 0x59, 0x00, 0x02, 0x1F, 0x01, 0x6D, 0x6D, 0x96, 0x30, 0x6D, 0xA8, 0x6D, +/* 00009200 */ 0x95, 0x00, 0x19, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x57, 0x6D, 0x6E, 0x96, 0x31, 0x6D, +/* 00009210 */ 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x58, 0x6D, 0x6E, 0x07, 0x01, 0x00, 0x59, 0x00, 0x02, 0x1F, +/* 00009220 */ 0x01, 0x6D, 0x6D, 0x45, 0x67, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x59, 0x6D, 0x6E, 0x07, +/* 00009230 */ 0x01, 0x00, 0x59, 0x00, 0x02, 0x1F, 0x01, 0x6D, 0x6D, 0x45, 0x62, 0x6D, 0xB9, 0x6E, 0x00, 0x01, +/* 00009240 */ 0x66, 0x01, 0x5A, 0x6D, 0x6E, 0x07, 0x01, 0x00, 0x59, 0x00, 0x02, 0x1F, 0x01, 0x6D, 0x6D, 0x45, +/* 00009250 */ 0x63, 0x6D, 0x92, 0x32, 0x6D, 0x14, 0x03, 0x00, 0x6D, 0x2C, 0x09, 0xD8, 0x00, 0x92, 0x16, 0x6D, +/* 00009260 */ 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x92, 0x07, 0x6E, 0x59, 0x01, 0x6E, 0x59, 0x02, 0x34, 0xCE, +/* 00009270 */ 0x24, 0x02, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x7A, 0x67, 0x6E, 0x90, +/* 00009280 */ 0x7A, 0x03, 0x6E, 0x91, 0x7A, 0x32, 0x6E, 0x92, 0x7A, 0x03, 0x6E, 0x93, 0x59, 0x03, 0x6E, 0x1F, +/* 00009290 */ 0x04, 0xFF, 0x6D, 0x92, 0x16, 0x6D, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x92, 0x07, 0x6E, 0x59, +/* 000092A0 */ 0x01, 0x6E, 0x59, 0x02, 0x35, 0xCE, 0x3C, 0x02, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x6E, 0x00, +/* 000092B0 */ 0x00, 0x00, 0x7A, 0x62, 0x6E, 0x94, 0x7A, 0x03, 0x6E, 0x95, 0x7A, 0x32, 0x6E, 0x96, 0x7A, 0x03, +/* 000092C0 */ 0x6E, 0x97, 0x59, 0x03, 0x6E, 0x1F, 0x04, 0xFF, 0x6D, 0x92, 0x16, 0x6D, 0x07, 0x04, 0x00, 0x59, +/* 000092D0 */ 0x00, 0x02, 0x92, 0x07, 0x6E, 0x59, 0x01, 0x6E, 0x59, 0x02, 0x36, 0xCE, 0x54, 0x02, 0x00, 0x00, +/* 000092E0 */ 0x19, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x7A, 0x63, 0x6E, 0x98, 0x7A, 0x03, 0x6E, 0x99, +/* 000092F0 */ 0x7A, 0x32, 0x6E, 0x9A, 0x7A, 0x03, 0x6E, 0x9B, 0x59, 0x03, 0x6E, 0x1F, 0x04, 0xFF, 0x6D, 0x92, +/* 00009300 */ 0x16, 0x6D, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x92, 0x07, 0x6E, 0x59, 0x01, 0x6E, 0x59, 0x02, +/* 00009310 */ 0x2E, 0xCE, 0x6C, 0x02, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x7A, 0x66, +/* 00009320 */ 0x6E, 0x9C, 0x7A, 0x03, 0x6E, 0x9D, 0x7A, 0x32, 0x6E, 0x9E, 0x7A, 0x03, 0x6E, 0x9F, 0x59, 0x03, +/* 00009330 */ 0x6E, 0x1F, 0x04, 0xFF, 0x6D, 0xA8, 0x00, 0x24, 0x00, 0x1B, 0xFE, 0x84, 0x02, 0x00, 0x6C, 0x02, +/* 00009340 */ 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, +/* 00009350 */ 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x54, 0x02, 0x00, 0x00, 0x03, 0x04, +/* 00009360 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, +/* 00009370 */ 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x3C, 0x02, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, +/* 00009380 */ 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, +/* 00009390 */ 0x00, 0x00, 0x24, 0x02, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, +/* 000093A0 */ 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x14, 0x02, +/* 000093B0 */ 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x03, 0x00, 0x00, 0x4B, 0x03, +/* 000093C0 */ 0x00, 0x00, 0x04, 0x02, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x03, +/* 000093D0 */ 0x00, 0x00, 0x4B, 0x03, 0x00, 0x00, 0xF4, 0x01, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, +/* 000093E0 */ 0x00, 0x00, 0x41, 0x03, 0x00, 0x00, 0x46, 0x03, 0x00, 0x00, 0xE4, 0x01, 0x00, 0x00, 0x03, 0x02, +/* 000093F0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x03, 0x00, 0x00, 0x46, 0x03, 0x00, 0x00, 0xD0, 0x01, +/* 00009400 */ 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x03, 0x00, 0x00, 0x41, 0x03, +/* 00009410 */ 0x00, 0x00, 0x46, 0x03, 0x00, 0x00, 0xC4, 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, +/* 00009420 */ 0x00, 0x00, 0x41, 0x03, 0x00, 0x00, 0xB8, 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, +/* 00009430 */ 0x00, 0x00, 0x3E, 0x03, 0x00, 0x00, 0xAC, 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, +/* 00009440 */ 0x00, 0x00, 0x3A, 0x03, 0x00, 0x00, 0xA0, 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, +/* 00009450 */ 0x00, 0x00, 0x3A, 0x03, 0x00, 0x00, 0x74, 0x01, 0x00, 0x00, 0x03, 0x09, 0x00, 0x00, 0x00, 0x00, +/* 00009460 */ 0x00, 0x00, 0x39, 0x03, 0x00, 0x00, 0x3C, 0x03, 0x00, 0x00, 0x3D, 0x03, 0x00, 0x00, 0x40, 0x03, +/* 00009470 */ 0x00, 0x00, 0x43, 0x03, 0x00, 0x00, 0x48, 0x03, 0x00, 0x00, 0x49, 0x03, 0x00, 0x00, 0x4A, 0x03, +/* 00009480 */ 0x00, 0x00, 0x4C, 0x03, 0x00, 0x00, 0x68, 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, +/* 00009490 */ 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x5C, 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, +/* 000094A0 */ 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x50, 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, +/* 000094B0 */ 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x44, 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, +/* 000094C0 */ 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x38, 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, +/* 000094D0 */ 0x00, 0x00, 0x0C, 0x02, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, +/* 000094E0 */ 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, +/* 000094F0 */ 0x00, 0x00, 0x08, 0x01, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, +/* 00009500 */ 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0xF0, 0x00, +/* 00009510 */ 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, +/* 00009520 */ 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0xD8, 0x00, 0x00, 0x00, 0x03, 0x04, +/* 00009530 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, +/* 00009540 */ 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, +/* 00009550 */ 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, +/* 00009560 */ 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x03, +/* 00009570 */ 0x00, 0x00, 0x22, 0x03, 0x00, 0x00, 0x23, 0x03, 0x00, 0x00, 0x24, 0x03, 0x00, 0x00, 0x25, 0x03, +/* 00009580 */ 0x00, 0x00, 0x26, 0x03, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x03, 0x20, 0x00, 0x00, 0x00, 0x00, +/* 00009590 */ 0x00, 0x00, 0x7B, 0x01, 0x00, 0x00, 0x75, 0x01, 0x00, 0x00, 0x33, 0x01, 0x00, 0x00, 0x56, 0x01, +/* 000095A0 */ 0x00, 0x00, 0x5E, 0x01, 0x00, 0x00, 0x0A, 0x03, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x3A, 0x01, +/* 000095B0 */ 0x00, 0x00, 0x93, 0x00, 0x00, 0x00, 0xCC, 0x00, 0x00, 0x00, 0x0F, 0x03, 0x00, 0x00, 0xD5, 0x00, +/* 000095C0 */ 0x00, 0x00, 0x2C, 0x01, 0x00, 0x00, 0x50, 0x01, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x89, 0x00, +/* 000095D0 */ 0x00, 0x00, 0x15, 0x03, 0x00, 0x00, 0xCF, 0x00, 0x00, 0x00, 0xB7, 0x00, 0x00, 0x00, 0x9C, 0x01, +/* 000095E0 */ 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, 0x9A, 0x01, 0x00, 0x00, 0x1D, 0x00, +/* 000095F0 */ 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x2C, 0x00, 0x00, 0x00, 0xC1, 0x00, +/* 00009600 */ 0x00, 0x00, 0xC4, 0x00, 0x00, 0x00, 0x9C, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x4E, 0x00, +/* 00009610 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x00, +/* 00009620 */ 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x2C, 0x00, 0x00, 0x00, 0xBB, 0xFE, +/* 00009630 */ 0x4D, 0x03, 0xFE, 0x13, 0x02, 0xFE, 0x13, 0x02, 0xFE, 0xBE, 0x02, 0xFE, 0xBF, 0x02, 0xFE, 0x8B, +/* 00009640 */ 0x02, 0xBB, 0x58, 0xFE, 0x11, 0x01, 0xFE, 0x39, 0x01, 0xFE, 0x0B, 0x01, 0xFE, 0x5C, 0x01, 0x6B, +/* 00009650 */ 0x7F, 0xFE, 0xEC, 0x01, 0xFE, 0x8C, 0x02, 0x1D, 0xFE, 0x8D, 0x02, 0x26, 0xFE, 0x89, 0x02, 0xFE, +/* 00009660 */ 0xFE, 0x00, 0xFE, 0x8E, 0x02, 0x2C, 0xFE, 0x90, 0x02, 0xFE, 0x91, 0x02, 0xFE, 0x92, 0x02, 0xFE, +/* 00009670 */ 0x93, 0x02, 0xFE, 0x8F, 0x02, 0xFE, 0x85, 0x02, 0xFE, 0x86, 0x02, 0xFE, 0x98, 0x02, 0xFE, 0x9C, +/* 00009680 */ 0x02, 0xFE, 0x9E, 0x02, 0xFE, 0x9F, 0x02, 0xFE, 0xA0, 0x02, 0xFE, 0xA1, 0x02, 0xFE, 0xA2, 0x02, +/* 00009690 */ 0xFE, 0xA7, 0x02, 0xFE, 0xA8, 0x02, 0xFE, 0x7B, 0x01, 0xFE, 0x75, 0x01, 0xFE, 0x33, 0x01, 0xFE, +/* 000096A0 */ 0x56, 0x01, 0xFE, 0x5E, 0x01, 0xFE, 0x0A, 0x03, 0xFE, 0x01, 0x01, 0xFE, 0x3A, 0x01, 0x93, 0xCC, +/* 000096B0 */ 0xFE, 0x0F, 0x03, 0xD5, 0xFE, 0x2C, 0x01, 0xFE, 0x50, 0x01, 0x65, 0x89, 0xFE, 0x15, 0x03, 0xFE, +/* 000096C0 */ 0x94, 0x02, 0xCF, 0xB7, 0xFE, 0x9C, 0x01, 0xFE, 0x91, 0x02, 0xC0, 0x69, 0xFE, 0x9A, 0x01, 0xFE, +/* 000096D0 */ 0x8C, 0x02, 0x1D, 0x26, 0xFE, 0x89, 0x02, 0xFE, 0xFE, 0x00, 0xFE, 0x8E, 0x02, 0x2C, 0xFE, 0xA7, +/* 000096E0 */ 0x02, 0xC1, 0xFE, 0xA8, 0x02, 0xC4, 0x9C, 0x54, 0x4E, 0xFE, 0x21, 0x03, 0xFE, 0x22, 0x03, 0xFE, +/* 000096F0 */ 0x23, 0x03, 0xFE, 0x24, 0x03, 0xFE, 0x25, 0x03, 0xFE, 0x26, 0x03, 0xFE, 0x9C, 0x01, 0xFE, 0x97, +/* 00009700 */ 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, +/* 00009710 */ 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, +/* 00009720 */ 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, +/* 00009730 */ 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, +/* 00009740 */ 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x4E, 0x03, 0xFE, 0x4E, 0x03, 0xFE, 0x4F, 0x03, 0xFE, +/* 00009750 */ 0x4F, 0x03, 0xFE, 0x06, 0x02, 0xFE, 0x0C, 0x02, 0xFE, 0x97, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x97, +/* 00009760 */ 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x3A, 0x03, 0xFE, 0x39, 0x03, 0xFE, 0x3A, 0x03, 0xFE, 0x3C, 0x03, +/* 00009770 */ 0xFE, 0x3E, 0x03, 0xFE, 0x3D, 0x03, 0xFE, 0x41, 0x03, 0xFE, 0x40, 0x03, 0xFE, 0x44, 0x03, 0xFE, +/* 00009780 */ 0x41, 0x03, 0xFE, 0x46, 0x03, 0xFE, 0x43, 0x03, 0xFE, 0x41, 0x03, 0xFE, 0x46, 0x03, 0xFE, 0x48, +/* 00009790 */ 0x03, 0xFE, 0x41, 0x03, 0xFE, 0x46, 0x03, 0xFE, 0x49, 0x03, 0xFE, 0x46, 0x03, 0xFE, 0x4B, 0x03, +/* 000097A0 */ 0xFE, 0x4A, 0x03, 0xFE, 0x46, 0x03, 0xFE, 0x4B, 0x03, 0xFE, 0x4C, 0x03, 0xFE, 0x97, 0x01, 0xFE, +/* 000097B0 */ 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, +/* 000097C0 */ 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, +/* 000097D0 */ 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0x02, 0x03, 0x16, 0x00, +/* 000097E0 */ 0xFE, 0x50, 0x03, 0x01, 0xFE, 0x51, 0x03, 0x02, 0xFE, 0x52, 0x03, 0x03, 0xFE, 0x53, 0x03, 0x04, +/* 000097F0 */ 0xFE, 0x54, 0x03, 0x05, 0xFE, 0x55, 0x03, 0x06, 0xFE, 0x56, 0x03, 0x07, 0xFE, 0x57, 0x03, 0x08, +/* 00009800 */ 0xFE, 0x58, 0x03, 0x09, 0xFE, 0x59, 0x03, 0x0A, 0xFE, 0x5A, 0x03, 0x0B, 0xFE, 0x5B, 0x03, 0x0C, +/* 00009810 */ 0xFE, 0x5C, 0x03, 0x0D, 0xFE, 0x5D, 0x03, 0x0E, 0xFE, 0x5E, 0x03, 0x0F, 0xFE, 0x5F, 0x03, 0x10, +/* 00009820 */ 0xFE, 0x60, 0x03, 0x11, 0xFE, 0x61, 0x03, 0x12, 0xFE, 0x62, 0x03, 0x13, 0xFE, 0x63, 0x03, 0x14, +/* 00009830 */ 0xFE, 0x64, 0x03, 0x15, 0xFE, 0x65, 0x03, 0x06, 0x18, 0x00, 0xFE, 0x50, 0x03, 0x01, 0xFE, 0x5B, +/* 00009840 */ 0x03, 0x02, 0xFE, 0x51, 0x03, 0x03, 0xFE, 0x66, 0x03, 0x04, 0xFE, 0x5E, 0x03, 0x05, 0xFE, 0x60, +/* 00009850 */ 0x03, 0x06, 0xFE, 0x61, 0x03, 0x07, 0xFE, 0x52, 0x03, 0x08, 0xFE, 0x53, 0x03, 0x09, 0xFE, 0x67, +/* 00009860 */ 0x03, 0x0A, 0xFE, 0x68, 0x03, 0x0B, 0xFE, 0x69, 0x03, 0x0C, 0xFE, 0x5C, 0x03, 0x0D, 0xFE, 0x6A, +/* 00009870 */ 0x03, 0x0E, 0xFE, 0x6B, 0x03, 0x0F, 0xFE, 0x6C, 0x03, 0x10, 0xFE, 0x6D, 0x03, 0x11, 0xFE, 0x6E, +/* 00009880 */ 0x03, 0x12, 0xFE, 0x6F, 0x03, 0x13, 0xFE, 0x70, 0x03, 0x14, 0xFE, 0x71, 0x03, 0x15, 0xFE, 0x72, +/* 00009890 */ 0x03, 0x16, 0xFE, 0x73, 0x03, 0x17, 0xFE, 0x74, 0x03, 0xFE, 0x07, 0x02, 0x7E, 0x41, 0x00, 0x00, +/* 000098A0 */ 0x00, 0x07, 0x00, 0xA4, 0x00, 0x07, 0x00, 0xB7, 0x00, 0x12, 0x00, 0x32, 0x00, 0x0A, 0x00, 0x47, +/* 000098B0 */ 0x00, 0x03, 0x00, 0x35, 0x00, 0x0A, 0x00, 0x35, 0x00, 0x0A, 0x00, 0x39, 0x00, 0x0A, 0x00, 0x83, +/* 000098C0 */ 0x00, 0x06, 0x00, 0x4A, 0x04, 0x0A, 0x00, 0x1F, 0x00, 0x0A, 0x00, 0x24, 0x00, 0x0A, 0x00, 0x22, +/* 000098D0 */ 0x00, 0x0A, 0x00, 0x22, 0x00, 0x0A, 0x00, 0x22, 0x00, 0x0A, 0x00, 0x22, 0x00, 0x0A, 0x00, 0x1E, +/* 000098E0 */ 0x00, 0x0A, 0x00, 0x21, 0x00, 0x0A, 0x00, 0x2D, 0x00, 0x4F, 0x00, 0xD0, 0x00, 0x0A, 0x00, 0x54, +/* 000098F0 */ 0x00, 0x0A, 0x00, 0x50, 0x00, 0x0A, 0x00, 0x5E, 0x00, 0x0A, 0x00, 0x02, 0x01, 0x0A, 0x00, 0x55, +/* 00009900 */ 0x00, 0x06, 0x00, 0x94, 0x00, 0x0A, 0x00, 0x48, 0x00, 0x0A, 0x00, 0x48, 0x00, 0x0A, 0x00, 0x47, +/* 00009910 */ 0x00, 0x0A, 0x00, 0x4C, 0x00, 0x0A, 0x00, 0x4A, 0x00, 0x0A, 0x00, 0x3B, 0x00, 0x0A, 0x00, 0x4E, +/* 00009920 */ 0x00, 0x0A, 0x00, 0x56, 0x00, 0x0A, 0x00, 0x57, 0x00, 0x0A, 0x00, 0x3E, 0x00, 0x0A, 0x00, 0x39, +/* 00009930 */ 0x00, 0x25, 0x01, 0x8D, 0x0F, 0x9A, 0x00, 0x1F, 0x00, 0x06, 0x00, 0x25, 0x00, 0x0D, 0x00, 0x4E, +/* 00009940 */ 0x02, 0x0C, 0x00, 0x9A, 0x00, 0x0C, 0x00, 0x70, 0x00, 0x0D, 0x00, 0x79, 0x00, 0x0D, 0x00, 0xB5, +/* 00009950 */ 0x02, 0x0D, 0x00, 0xBF, 0x05, 0x0D, 0x00, 0x23, 0x03, 0x08, 0x00, 0x77, 0x01, 0x0D, 0x00, 0x4D, +/* 00009960 */ 0x07, 0x0D, 0x00, 0xC2, 0x09, 0x74, 0x00, 0xEF, 0x0A, 0x0D, 0x00, 0xE1, 0x01, 0x06, 0x00, 0x60, +/* 00009970 */ 0x01, 0x17, 0x00, 0xC8, 0x1B, 0x0D, 0x00, 0x6B, 0x03, 0x0D, 0x00, 0xB4, 0x04, 0x0D, 0x00, 0xE5, +/* 00009980 */ 0x06, 0x0D, 0x00, 0x08, 0x02, 0x08, 0x00, 0xDA, 0x02, 0x0D, 0x00, 0x74, 0x06, 0x0D, 0x00, 0x08, +/* 00009990 */ 0x04, 0x0B, 0x00, 0x23, 0x00, 0x20, 0x00, 0xBB, 0x00, 0x3A, 0x00, 0x25, 0x03, 0x0D, 0x00, 0x8C, +/* 000099A0 */ 0x02, 0x16, 0x00, 0x68, 0x22, 0x16, 0x00, 0x65, 0x25, 0x16, 0x00, 0x5F, 0x6E, 0x16, 0x00, 0x9D, +/* 000099B0 */ 0x15, 0x0B, 0x00, 0x23, 0x00, 0x3A, 0x00, 0x92, 0x00, 0x3A, 0x00, 0x92, 0x00, 0x3A, 0x00, 0x92, +/* 000099C0 */ 0x00, 0xF0, 0x00, 0x29, 0x01, 0x11, 0x00, 0x38, 0x00, 0x11, 0x00, 0x38, 0x00, 0x11, 0x00, 0x39, +/* 000099D0 */ 0x00, 0x11, 0x00, 0x3A, 0x00, 0x06, 0x00, 0x25, 0x00, 0x0D, 0x00, 0xE9, 0x01, 0x0D, 0x00, 0x0C, +/* 000099E0 */ 0x02, 0x0D, 0x00, 0x90, 0x01, 0x0C, 0x00, 0x58, 0x01, 0x0C, 0x00, 0x9A, 0x00, 0x0C, 0x00, 0x70, +/* 000099F0 */ 0x00, 0x0C, 0x00, 0xA7, 0x04, 0x0C, 0x00, 0x93, 0x04, 0x0C, 0x00, 0x31, 0x04, 0x0C, 0x00, 0xF9, +/* 00009A00 */ 0x09, 0x0C, 0x00, 0xEF, 0x02, 0x06, 0x00, 0x2D, 0x00, 0x0C, 0x00, 0x93, 0x03, 0x16, 0x00, 0x89, +/* 00009A10 */ 0x0A, 0x06, 0x00, 0x75, 0x00, 0x06, 0x00, 0x38, 0x00, 0x06, 0x00, 0x4C, 0x00, 0x06, 0x00, 0xC7, +/* 00009A20 */ 0x1C, 0x0C, 0x00, 0xC0, 0x01, 0x0C, 0x00, 0xDF, 0x01, 0x0C, 0x00, 0x80, 0x03, 0x18, 0x00, 0x3C, +/* 00009A30 */ 0x00, 0x3B, 0x00, 0x25, 0x01, 0x04, 0x00, 0x51, 0x00, 0x3D, 0x00, 0x69, 0x01, 0x04, 0x00, 0x59, +/* 00009A40 */ 0x00, 0x3D, 0x00, 0x79, 0x01, 0x04, 0x00, 0x5D, 0x00, 0x3D, 0x00, 0x81, 0x01, 0x04, 0x00, 0x41, +/* 00009A50 */ 0x00, 0x3C, 0x00, 0xAD, 0x02, 0x2B, 0x00, 0x60, 0x00, 0x2B, 0x00, 0x64, 0x00, 0x2B, 0x00, 0x66, +/* 00009A60 */ 0x00, 0x27, 0x00, 0x49, 0x01, 0xA3, 0x01, 0x51, 0x05, 0x16, 0x00, 0xCA, 0x03, 0x06, 0x00, 0x2B, +/* 00009A70 */ 0x00, 0x0C, 0x00, 0x3B, 0x09, 0x16, 0x00, 0xFC, 0x30, 0x16, 0x00, 0x97, 0x2F, 0x16, 0x00, 0x63, +/* 00009A80 */ 0x79, 0x0B, 0x00, 0x23, 0x00, 0x36, 0x00, 0x7C, 0x00, 0x36, 0x00, 0x84, 0x00, 0x36, 0x00, 0x88, +/* 00009A90 */ 0x00, 0x38, 0x00, 0xA6, 0x00, 0x00, 0xA6, 0xA6, 0x01, 0x00, 0x6C, 0xA4, 0x01, 0x00, 0x01, 0xA4, +/* 00009AA0 */ 0x01, 0x00, 0xA1, 0xA3, 0x01, 0x00, 0x41, 0xA3, 0x01, 0x00, 0xDB, 0xA2, 0x01, 0x00, 0x6D, 0xA2, +/* 00009AB0 */ 0x01, 0x00, 0xFC, 0xA1, 0x01, 0x00, 0x8B, 0xA1, 0x01, 0x00, 0x25, 0xA1, 0x01, 0x00, 0xB7, 0xA0, +/* 00009AC0 */ 0x01, 0x00, 0x54, 0xA0, 0x01, 0x00, 0xF1, 0x9F, 0x01, 0x00, 0x8B, 0x9F, 0x01, 0x00, 0x1D, 0x9F, +/* 00009AD0 */ 0x01, 0x00, 0xAC, 0x9E, 0x01, 0x00, 0x3B, 0x9E, 0x01, 0x00, 0xB3, 0x9D, 0x01, 0x00, 0x45, 0x9D, +/* 00009AE0 */ 0x01, 0x00, 0x62, 0x9C, 0x01, 0x00, 0xF4, 0x9B, 0x01, 0x00, 0x6C, 0x9B, 0x01, 0x00, 0xFB, 0x9A, +/* 00009AF0 */ 0x01, 0x00, 0x87, 0x9A, 0x01, 0x00, 0x11, 0x9A, 0x01, 0x00, 0xA6, 0x99, 0x01, 0x00, 0x38, 0x99, +/* 00009B00 */ 0x01, 0x00, 0xC7, 0x98, 0x01, 0x00, 0x0D, 0x98, 0x01, 0x00, 0x9B, 0x97, 0x01, 0x00, 0x3B, 0x97, +/* 00009B10 */ 0x01, 0x00, 0xD7, 0x96, 0x01, 0x00, 0x50, 0x96, 0x01, 0x00, 0xF7, 0x94, 0x01, 0x00, 0x9B, 0x93, +/* 00009B20 */ 0x01, 0x00, 0xA1, 0x91, 0x01, 0x00, 0x0F, 0x8D, 0x01, 0x00, 0x76, 0x8C, 0x01, 0x00, 0x07, 0x8C, +/* 00009B30 */ 0x01, 0x00, 0x98, 0x8B, 0x01, 0x00, 0x29, 0x8B, 0x01, 0x00, 0x19, 0x8A, 0x01, 0x00, 0x55, 0x89, +/* 00009B40 */ 0x01, 0x00, 0xA2, 0x87, 0x01, 0x00, 0x71, 0x86, 0x01, 0x00, 0x24, 0x86, 0x01, 0x00, 0x36, 0x7F, +/* 00009B50 */ 0x01, 0x00, 0x87, 0x7E, 0x01, 0x00, 0x0B, 0x7C, 0x01, 0x00, 0x1D, 0x79, 0x01, 0x00, 0x56, 0x77, +/* 00009B60 */ 0x01, 0x00, 0x50, 0x75, 0x01, 0x00, 0x3C, 0x73, 0x01, 0x00, 0xE5, 0x72, 0x01, 0x00, 0x4B, 0x71, +/* 00009B70 */ 0x01, 0x00, 0x28, 0x62, 0x01, 0x00, 0xDF, 0x4F, 0x01, 0x00, 0xFF, 0x24, 0x01, 0x00, 0x5A, 0x1A, +/* 00009B80 */ 0x01, 0x00, 0x96, 0x19, 0x01, 0x00, 0xED, 0x18, 0x01, 0x00, 0x00, 0x18, 0x01, 0x00, 0x6D, 0x17, +/* 00009B90 */ 0x01, 0x00, 0xF1, 0x16, 0x01, 0x00, 0x87, 0x16, 0x01, 0x00, 0x9F, 0x14, 0x01, 0x00, 0xE6, 0x12, +/* 00009BA0 */ 0x01, 0x00, 0x9A, 0x11, 0x01, 0x00, 0x53, 0x0D, 0x01, 0x00, 0x0D, 0x0C, 0x01, 0x00, 0xB7, 0x0A, +/* 00009BB0 */ 0x01, 0x00, 0x17, 0x06, 0x01, 0x00, 0x66, 0x04, 0x01, 0x00, 0x26, 0x03, 0x01, 0x00, 0xD1, 0x02, +/* 00009BC0 */ 0x01, 0x00, 0x2F, 0xFF, 0x00, 0x00, 0x78, 0xFE, 0x00, 0x00, 0x68, 0xFB, 0x00, 0x00, 0x0E, 0xF9, +/* 00009BD0 */ 0x00, 0x00, 0x20, 0xF8, 0x00, 0x00, 0x33, 0xF7, 0x00, 0x00, 0x8F, 0xF5, 0x00, 0x00, 0x13, 0xF5, +/* 00009BE0 */ 0x00, 0x00, 0x97, 0xF4, 0x00, 0x00, 0x1B, 0xF4, 0x00, 0x00, 0xB0, 0xF3, 0x00, 0x00, 0xB9, 0xF1, +/* 00009BF0 */ 0x00, 0x00, 0xC4, 0xEE, 0x00, 0x00, 0x8B, 0xDB, 0x00, 0x00, 0xE8, 0xC8, 0x00, 0x00, 0x02, 0x9C, +/* 00009C00 */ 0x00, 0x00, 0x7E, 0x5D, 0x00, 0xC1, 0x53, 0x5A, 0x4B, 0x04, 0xFE, 0x67, 0x0C, 0x1A, 0xA0, 0x41, +/* 00009C10 */ 0xD1, 0x00, 0xB2, 0xFF, 0x8C, 0x36, 0x02, 0x00, 0xFF, 0x8C, 0x36, 0x02, 0x00, 0x0F, 0xFE, 0x00, +/* 00009C20 */ 0x90, 0x01, 0x01, 0xFF, 0x8C, 0x36, 0x02, 0x00, 0xFE, 0x12, 0x79, 0xFE, 0x12, 0x79, 0x01, 0xFE, +/* 00009C30 */ 0xC8, 0x04, 0x15, 0x36, 0x44, 0x09, 0xEE, 0xED, 0x02, 0x09, 0x2D, 0x2D, 0x2D, 0x2D, 0x07, 0x02, +/* 00009C40 */ 0x41, 0x42, 0x43, 0x44, 0x08, 0x06, 0xFE, 0x27, 0x03, 0x06, 0xFE, 0x2E, 0x04, 0x06, 0xFE, 0xC9, +/* 00009C50 */ 0x04, 0x05, 0xFE, 0xCA, 0x04, 0x06, 0xFE, 0xCB, 0x04, 0x05, 0xFE, 0xCC, 0x04, 0x06, 0xFE, 0xCD, +/* 00009C60 */ 0x04, 0x05, 0xFE, 0xCE, 0x04, 0x06, 0xFE, 0xCF, 0x04, 0x05, 0xFE, 0xD0, 0x04, 0x06, 0xFE, 0xD1, +/* 00009C70 */ 0x04, 0x05, 0xFE, 0xD2, 0x04, 0x06, 0xFE, 0xD3, 0x04, 0x05, 0xFE, 0xD4, 0x04, 0x06, 0xFE, 0xD5, +/* 00009C80 */ 0x04, 0x05, 0xFE, 0xD6, 0x04, 0x06, 0xFE, 0xD7, 0x04, 0x05, 0xFE, 0xD8, 0x04, 0x06, 0xFE, 0xD9, +/* 00009C90 */ 0x04, 0x05, 0xFE, 0xDA, 0x04, 0x07, 0x06, 0xFE, 0x21, 0x04, 0x01, 0x00, 0x06, 0xFE, 0x3C, 0x04, +/* 00009CA0 */ 0x01, 0x01, 0x06, 0xFE, 0x3D, 0x04, 0x01, 0x02, 0x05, 0xFE, 0x3E, 0x04, 0x06, 0xFE, 0x3F, 0x04, +/* 00009CB0 */ 0x06, 0xFE, 0x40, 0x04, 0x05, 0xFE, 0x41, 0x04, 0x06, 0xFE, 0x42, 0x04, 0x05, 0xFE, 0x43, 0x04, +/* 00009CC0 */ 0x05, 0xFE, 0x44, 0x04, 0x05, 0xFE, 0x45, 0x04, 0x05, 0xFE, 0x46, 0x04, 0x06, 0xFE, 0x74, 0x04, +/* 00009CD0 */ 0x06, 0xFE, 0x17, 0x04, 0x06, 0xFE, 0xEC, 0x03, 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, 0x2B, 0x03, +/* 00009CE0 */ 0x0C, 0x06, 0xFE, 0x2C, 0x03, 0x06, 0xFE, 0x2D, 0x03, 0x06, 0xFE, 0xED, 0x03, 0x0B, 0x06, 0xFE, +/* 00009CF0 */ 0x15, 0x04, 0x06, 0xFE, 0x77, 0x03, 0x05, 0xFE, 0x14, 0x04, 0x06, 0xFE, 0xEE, 0x03, 0x06, 0xFE, +/* 00009D00 */ 0x38, 0x03, 0xFE, 0xA6, 0x03, 0x4E, 0x40, 0xA8, 0x36, 0xA8, 0x37, 0xA8, 0x38, 0xA8, 0x39, 0xA8, +/* 00009D10 */ 0x3A, 0xA8, 0x3B, 0xA8, 0x3C, 0xA8, 0x3D, 0xA8, 0x3E, 0xA8, 0x3F, 0x8E, 0x02, 0x32, 0x46, 0x14, +/* 00009D20 */ 0x0C, 0x00, 0x46, 0x03, 0x8E, 0x02, 0x32, 0x46, 0x14, 0x03, 0x00, 0x46, 0x04, 0x09, 0x72, 0x03, +/* 00009D30 */ 0xE0, 0x00, 0x0B, 0x01, 0xB9, 0x46, 0x00, 0x01, 0x66, 0x01, 0x00, 0x36, 0x46, 0x95, 0x00, 0x02, +/* 00009D40 */ 0x36, 0x01, 0x66, 0x01, 0x01, 0x37, 0x46, 0x95, 0x00, 0x03, 0x37, 0x01, 0x66, 0x01, 0x02, 0x38, +/* 00009D50 */ 0x46, 0x95, 0x00, 0x04, 0x38, 0x01, 0x66, 0x01, 0x03, 0x39, 0x46, 0x95, 0x00, 0x05, 0x39, 0x01, +/* 00009D60 */ 0x66, 0x01, 0x04, 0x3A, 0x46, 0x95, 0x00, 0x06, 0x3A, 0x01, 0x66, 0x01, 0x05, 0x3B, 0x46, 0x95, +/* 00009D70 */ 0x00, 0x07, 0x3B, 0x01, 0x66, 0x01, 0x06, 0x3C, 0x46, 0x95, 0x00, 0x08, 0x3C, 0x01, 0x66, 0x01, +/* 00009D80 */ 0x07, 0x3D, 0x46, 0x95, 0x00, 0x09, 0x3D, 0x4E, 0x46, 0x95, 0x00, 0x0A, 0x46, 0xCE, 0x00, 0x00, +/* 00009D90 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x7A, 0x06, 0x46, 0x00, 0x7A, 0x08, +/* 00009DA0 */ 0x46, 0x01, 0x7A, 0x0A, 0x46, 0x02, 0x7A, 0x0C, 0x46, 0x03, 0x7A, 0x0E, 0x46, 0x04, 0x7A, 0x10, +/* 00009DB0 */ 0x46, 0x05, 0x7A, 0x12, 0x46, 0x06, 0x7A, 0x14, 0x46, 0x07, 0x7A, 0x16, 0x46, 0x08, 0x96, 0x02, +/* 00009DC0 */ 0x46, 0xCF, 0x46, 0x03, 0xA8, 0x47, 0xA1, 0x00, 0x47, 0x46, 0xA8, 0x47, 0xA1, 0x01, 0x47, 0x46, +/* 00009DD0 */ 0xA8, 0x47, 0xA1, 0x02, 0x47, 0x46, 0x95, 0x00, 0x0A, 0x46, 0x8E, 0x02, 0x04, 0x46, 0x07, 0x03, +/* 00009DE0 */ 0x00, 0x59, 0x00, 0x02, 0xCE, 0x2C, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, +/* 00009DF0 */ 0x00, 0x7A, 0x19, 0x47, 0x09, 0x7A, 0x1B, 0x47, 0x0A, 0x7A, 0x1D, 0x47, 0x0B, 0x59, 0x01, 0x47, +/* 00009E00 */ 0x59, 0x02, 0x17, 0x1F, 0x03, 0x46, 0x46, 0x45, 0x40, 0x46, 0xB9, 0x47, 0x00, 0x01, 0x66, 0x01, +/* 00009E10 */ 0x08, 0x46, 0x47, 0x07, 0x06, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x1E, 0x59, 0x02, 0x1F, 0x59, +/* 00009E20 */ 0x03, 0x20, 0x5E, 0x47, 0x40, 0x0C, 0x59, 0x04, 0x47, 0x8E, 0x02, 0x03, 0x47, 0x5E, 0x47, 0x47, +/* 00009E30 */ 0x0D, 0x5E, 0x47, 0x47, 0x0E, 0x59, 0x05, 0x47, 0x1F, 0x06, 0xFF, 0x46, 0xB9, 0x47, 0x00, 0x01, +/* 00009E40 */ 0x66, 0x01, 0x09, 0x46, 0x47, 0x07, 0x06, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x21, 0x59, 0x02, +/* 00009E50 */ 0x22, 0x59, 0x03, 0x22, 0x5E, 0x47, 0x40, 0x0F, 0x59, 0x04, 0x47, 0x8E, 0x02, 0x03, 0x47, 0x5E, +/* 00009E60 */ 0x47, 0x47, 0x10, 0x5E, 0x47, 0x47, 0x11, 0x59, 0x05, 0x47, 0x1F, 0x06, 0xFF, 0x46, 0xB9, 0x47, +/* 00009E70 */ 0x00, 0x01, 0x66, 0x01, 0x0A, 0x46, 0x47, 0x07, 0x06, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x23, +/* 00009E80 */ 0x59, 0x02, 0x24, 0x59, 0x03, 0x24, 0x5E, 0x47, 0x40, 0x12, 0x59, 0x04, 0x47, 0x8E, 0x02, 0x03, +/* 00009E90 */ 0x47, 0x5E, 0x47, 0x47, 0x13, 0x5E, 0x47, 0x47, 0x14, 0x59, 0x05, 0x47, 0x1F, 0x06, 0xFF, 0x46, +/* 00009EA0 */ 0x8E, 0x02, 0x32, 0x46, 0x14, 0x03, 0x00, 0x46, 0x03, 0x09, 0xF6, 0x01, 0xE0, 0x01, 0x04, 0x03, +/* 00009EB0 */ 0xB9, 0x46, 0x00, 0xB8, 0x01, 0x00, 0x00, 0x00, 0x46, 0x46, 0x01, 0x66, 0x01, 0x0B, 0x3E, 0x46, +/* 00009EC0 */ 0x95, 0x01, 0x02, 0x3E, 0x01, 0x66, 0x01, 0x0C, 0x3F, 0x46, 0x95, 0x01, 0x03, 0x3F, 0x8E, 0x02, +/* 00009ED0 */ 0x23, 0x46, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x25, 0x90, 0x01, 0x02, 0x47, 0x59, +/* 00009EE0 */ 0x02, 0x47, 0x1F, 0x03, 0xFF, 0x46, 0x8E, 0x02, 0x23, 0x46, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, +/* 00009EF0 */ 0x59, 0x01, 0x26, 0x90, 0x01, 0x03, 0x47, 0x59, 0x02, 0x47, 0x1F, 0x03, 0xFF, 0x46, 0x90, 0x01, +/* 00009F00 */ 0x02, 0x46, 0xCF, 0x47, 0x02, 0xA1, 0x00, 0x27, 0x47, 0xA1, 0x01, 0x28, 0x47, 0x76, 0x47, 0x46, +/* 00009F10 */ 0x15, 0x8E, 0x02, 0x16, 0x46, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x90, 0x01, 0x02, 0x47, 0x59, +/* 00009F20 */ 0x01, 0x47, 0x59, 0x02, 0x29, 0xCE, 0x40, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, +/* 00009F30 */ 0x00, 0x00, 0x90, 0x01, 0x02, 0x48, 0x07, 0x01, 0x00, 0xC4, 0x01, 0x48, 0x48, 0x7A, 0x48, 0x47, +/* 00009F40 */ 0x16, 0x7A, 0x2C, 0x47, 0x17, 0x7A, 0x2C, 0x47, 0x18, 0x7A, 0x2C, 0x47, 0x19, 0x59, 0x03, 0x47, +/* 00009F50 */ 0x1F, 0x04, 0xFF, 0x46, 0x8E, 0x02, 0x04, 0x46, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x90, 0x01, +/* 00009F60 */ 0x02, 0x47, 0x5E, 0x47, 0x47, 0x1A, 0x59, 0x01, 0x47, 0x8E, 0x02, 0x09, 0x47, 0x5E, 0x47, 0x47, +/* 00009F70 */ 0x1B, 0x59, 0x02, 0x47, 0x1F, 0x03, 0xFF, 0x46, 0x8E, 0x02, 0x16, 0x46, 0x07, 0x04, 0x00, 0x59, +/* 00009F80 */ 0x00, 0x02, 0x90, 0x01, 0x02, 0x47, 0x5E, 0x47, 0x47, 0x1C, 0x59, 0x01, 0x47, 0x59, 0x02, 0x2F, +/* 00009F90 */ 0xCE, 0x58, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0x90, 0x01, 0x02, +/* 00009FA0 */ 0x48, 0x7A, 0x48, 0x47, 0x1D, 0x7A, 0x30, 0x47, 0x1E, 0x7A, 0x2C, 0x47, 0x1F, 0x7A, 0x30, 0x47, +/* 00009FB0 */ 0x20, 0x59, 0x03, 0x47, 0x1F, 0x04, 0xFF, 0x46, 0x8E, 0x02, 0x16, 0x46, 0x07, 0x04, 0x00, 0x59, +/* 00009FC0 */ 0x00, 0x02, 0x90, 0x01, 0x02, 0x47, 0x5E, 0x47, 0x47, 0x21, 0x59, 0x01, 0x47, 0x59, 0x02, 0x31, +/* 00009FD0 */ 0xCE, 0x70, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0x8E, 0x02, 0x23, +/* 00009FE0 */ 0x48, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x33, 0xB9, 0x4A, 0x00, 0xB8, 0x01, 0x00, +/* 00009FF0 */ 0x00, 0x00, 0x4A, 0x4A, 0x01, 0x66, 0x01, 0x0D, 0x49, 0x4A, 0x59, 0x02, 0x49, 0x1F, 0x03, 0x48, +/* 0000A000 */ 0x48, 0x7A, 0x48, 0x47, 0x22, 0x7A, 0x2C, 0x47, 0x23, 0x7A, 0x30, 0x47, 0x24, 0x59, 0x03, 0x47, +/* 0000A010 */ 0x1F, 0x04, 0xFF, 0x46, 0x8E, 0x02, 0x16, 0x46, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x90, 0x01, +/* 0000A020 */ 0x02, 0x47, 0x5E, 0x47, 0x47, 0x25, 0x59, 0x01, 0x47, 0x59, 0x02, 0x34, 0xCE, 0x84, 0x00, 0x00, +/* 0000A030 */ 0x00, 0x05, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0xB9, 0x49, 0x00, 0xB8, 0x01, 0x00, 0x00, +/* 0000A040 */ 0x00, 0x49, 0x49, 0x01, 0x6A, 0x01, 0x0E, 0x48, 0x49, 0x47, 0x7A, 0x48, 0x47, 0x26, 0x7A, 0x30, +/* 0000A050 */ 0x47, 0x27, 0x7A, 0x2C, 0x47, 0x28, 0x7A, 0x30, 0x47, 0x29, 0x59, 0x03, 0x47, 0x1F, 0x04, 0xFF, +/* 0000A060 */ 0x46, 0x8E, 0x02, 0x16, 0x46, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x90, 0x01, 0x02, 0x47, 0x59, +/* 0000A070 */ 0x01, 0x47, 0x59, 0x02, 0x35, 0xCE, 0x9C, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x47, 0x00, +/* 0000A080 */ 0x00, 0x00, 0x8E, 0x01, 0x17, 0x48, 0x4A, 0x48, 0x7A, 0x48, 0x47, 0x2A, 0x7A, 0x30, 0x47, 0x2B, +/* 0000A090 */ 0x7A, 0x30, 0x47, 0x2C, 0x59, 0x03, 0x47, 0x1F, 0x04, 0xFF, 0x46, 0x90, 0x01, 0x02, 0x00, 0x09, +/* 0000A0A0 */ 0x07, 0x00, 0xA8, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x07, 0xB0, 0x00, 0x9C, 0x00, +/* 0000A0B0 */ 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, +/* 0000A0C0 */ 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, +/* 0000A0D0 */ 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, +/* 0000A0E0 */ 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x01, +/* 0000A0F0 */ 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x03, 0x04, +/* 0000A100 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, +/* 0000A110 */ 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, +/* 0000A120 */ 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, +/* 0000A130 */ 0x00, 0x00, 0x2C, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x72, 0x01, +/* 0000A140 */ 0x00, 0x00, 0x70, 0x01, 0x00, 0x00, 0x73, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x09, +/* 0000A150 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC9, 0x04, 0x00, 0x00, 0xCB, 0x04, 0x00, 0x00, 0xCD, 0x04, +/* 0000A160 */ 0x00, 0x00, 0xCF, 0x04, 0x00, 0x00, 0xD1, 0x04, 0x00, 0x00, 0xD3, 0x04, 0x00, 0x00, 0xD5, 0x04, +/* 0000A170 */ 0x00, 0x00, 0xD7, 0x04, 0x00, 0x00, 0xD9, 0x04, 0x00, 0x00, 0xFE, 0xC9, 0x04, 0xFE, 0xCB, 0x04, +/* 0000A180 */ 0xFE, 0xCD, 0x04, 0xFE, 0xCF, 0x04, 0xFE, 0xD1, 0x04, 0xFE, 0xD3, 0x04, 0xFE, 0xD5, 0x04, 0xFE, +/* 0000A190 */ 0xD7, 0x04, 0xFE, 0xD9, 0x04, 0xFE, 0x72, 0x01, 0xFE, 0x70, 0x01, 0xFE, 0x73, 0x01, 0xFE, 0x72, +/* 0000A1A0 */ 0x01, 0xFE, 0x2F, 0x02, 0xFE, 0x2A, 0x02, 0xFE, 0x70, 0x01, 0xFE, 0x2F, 0x02, 0xFE, 0x2B, 0x02, +/* 0000A1B0 */ 0xFE, 0x73, 0x01, 0xFE, 0x2F, 0x02, 0xFE, 0x2C, 0x02, 0xFE, 0x0A, 0x02, 0xFE, 0x97, 0x01, 0xFE, +/* 0000A1C0 */ 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x24, 0x01, 0xFE, 0x24, 0x01, 0xFE, 0x24, +/* 0000A1D0 */ 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x24, 0x01, +/* 0000A1E0 */ 0xFE, 0x98, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x24, 0x01, 0xFE, 0x97, 0x01, 0xFE, +/* 0000A1F0 */ 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x95, +/* 0000A200 */ 0x01, 0x02, 0x01, 0x09, 0x00, 0xFE, 0x2A, 0x04, 0x01, 0xFE, 0xDB, 0x04, 0x02, 0xFE, 0xDC, 0x04, +/* 0000A210 */ 0x03, 0xFE, 0xDD, 0x04, 0x04, 0xFE, 0xDE, 0x04, 0x05, 0xFE, 0xDF, 0x04, 0x06, 0xFE, 0x29, 0x04, +/* 0000A220 */ 0x07, 0xFE, 0x26, 0x04, 0x08, 0xFE, 0x2B, 0x04, 0x03, 0x02, 0x00, 0xFE, 0x56, 0x02, 0x01, 0xFE, +/* 0000A230 */ 0x0B, 0x02, 0xFF, 0xA2, 0x36, 0x02, 0x00, 0x14, 0x16, 0x00, 0x00, 0x00, 0x72, 0x00, 0x75, 0x12, +/* 0000A240 */ 0x34, 0x00, 0xEF, 0x36, 0x19, 0x00, 0x5E, 0x00, 0x30, 0x00, 0x16, 0x10, 0x32, 0x00, 0x47, 0x02, +/* 0000A250 */ 0x32, 0x00, 0x59, 0x02, 0x32, 0x00, 0x58, 0x02, 0x2E, 0x00, 0x62, 0x04, 0x18, 0x00, 0x59, 0x04, +/* 0000A260 */ 0x18, 0x00, 0x54, 0x00, 0x13, 0x00, 0x48, 0x00, 0x43, 0x00, 0x9D, 0x00, 0x24, 0x00, 0x4A, 0x00, +/* 0000A270 */ 0x40, 0x00, 0xA2, 0x00, 0x5C, 0x00, 0x22, 0x03, 0x4D, 0x00, 0xEC, 0x08, 0x3A, 0x00, 0x9F, 0x00, +/* 0000A280 */ 0x07, 0x00, 0x88, 0x00, 0x07, 0x00, 0x16, 0x00, 0x00, 0xEE, 0xC4, 0x00, 0x00, 0xEE, 0xC0, 0x00, +/* 0000A290 */ 0x00, 0x6D, 0xC0, 0x00, 0x00, 0xA7, 0xBE, 0x00, 0x00, 0x1E, 0xBD, 0x00, 0x00, 0x42, 0xB9, 0x00, +/* 0000A2A0 */ 0x00, 0x29, 0xB1, 0x00, 0x00, 0xC8, 0xAE, 0x00, 0x00, 0x7D, 0xAD, 0x00, 0x00, 0x32, 0xAC, 0x00, +/* 0000A2B0 */ 0x00, 0xE7, 0xAA, 0x00, 0x00, 0x19, 0xA9, 0x00, 0x00, 0x64, 0xA7, 0x00, 0x00, 0x7D, 0xA6, 0x00, +/* 0000A2C0 */ 0x00, 0xC5, 0xA2, 0x00, 0x00, 0x7F, 0x5D, 0x00, 0xC1, 0x13, 0x1A, 0x4F, 0x00, 0xFE, 0x65, 0x0E, +/* 0000A2D0 */ 0x1B, 0xA0, 0x41, 0xC3, 0x00, 0xFE, 0xEE, 0x03, 0xC5, 0xFF, 0x00, 0x00, 0x00, 0x02, 0xFF, 0xD3, +/* 0000A2E0 */ 0xA5, 0x02, 0x00, 0xFF, 0xD3, 0xA5, 0x02, 0x00, 0x01, 0x08, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFF, +/* 0000A2F0 */ 0xD3, 0xA5, 0x02, 0x00, 0xFE, 0x30, 0x08, 0xFE, 0x30, 0x08, 0x03, 0xFE, 0xE2, 0x03, 0xFE, 0x03, +/* 0000A300 */ 0x05, 0xFE, 0xE0, 0x01, 0x07, 0x15, 0x19, 0x09, 0x77, 0x77, 0x05, 0x09, 0x21, 0x21, 0x21, 0x21, +/* 0000A310 */ 0x01, 0x16, 0x17, 0x18, 0x06, 0xFE, 0x94, 0x03, 0x05, 0xFE, 0x04, 0x05, 0x06, 0xFE, 0x30, 0x03, +/* 0000A320 */ 0x06, 0xFE, 0xD7, 0x03, 0x06, 0xFE, 0x8A, 0x04, 0x06, 0xFE, 0x24, 0x04, 0x06, 0xFE, 0x77, 0x04, +/* 0000A330 */ 0x06, 0xFE, 0x55, 0x04, 0x06, 0xFE, 0x33, 0x04, 0x06, 0xFE, 0x34, 0x04, 0x06, 0xFE, 0x35, 0x04, +/* 0000A340 */ 0x06, 0xFE, 0x36, 0x04, 0x06, 0xFE, 0x37, 0x04, 0x06, 0xFE, 0x38, 0x04, 0x06, 0xFE, 0x39, 0x04, +/* 0000A350 */ 0x06, 0xFE, 0x3A, 0x04, 0x06, 0xFE, 0x3B, 0x04, 0x07, 0x08, 0xFE, 0x9F, 0x01, 0x58, 0x15, 0x2A, +/* 0000A360 */ 0x19, 0x15, 0x15, 0x03, 0x00, 0x19, 0x02, 0x09, 0x18, 0x00, 0x8E, 0x05, 0x03, 0x1A, 0x6C, 0x19, +/* 0000A370 */ 0x1A, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x1A, 0x59, 0x01, 0x03, 0x59, 0x02, 0x04, 0x1F, 0x03, +/* 0000A380 */ 0xFF, 0x19, 0x8E, 0x05, 0x03, 0x1A, 0x6C, 0x19, 0x1A, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x1A, +/* 0000A390 */ 0x59, 0x01, 0x15, 0x1F, 0x02, 0x19, 0x19, 0x96, 0x02, 0x19, 0x92, 0x02, 0x19, 0xA8, 0x1A, 0x14, +/* 0000A3A0 */ 0x0B, 0x00, 0x19, 0x1A, 0x92, 0x02, 0x19, 0x5E, 0x19, 0x19, 0x02, 0x0F, 0x18, 0x00, 0x19, 0x8E, +/* 0000A3B0 */ 0x05, 0x03, 0x1A, 0x6C, 0x19, 0x1A, 0x03, 0x07, 0x03, 0x00, 0x59, 0x00, 0x1A, 0x59, 0x01, 0x03, +/* 0000A3C0 */ 0x59, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x19, 0x8E, 0x05, 0x04, 0x19, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 0000A3D0 */ 0x14, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00, 0x92, 0x02, +/* 0000A3E0 */ 0x1B, 0x5E, 0x1B, 0x1B, 0x04, 0x7A, 0x1B, 0x1A, 0x05, 0x92, 0x02, 0x1B, 0x5E, 0x1B, 0x1B, 0x06, +/* 0000A3F0 */ 0x7A, 0x1B, 0x1A, 0x07, 0x92, 0x02, 0x1B, 0x5E, 0x1B, 0x1B, 0x08, 0x7A, 0x1B, 0x1A, 0x09, 0x92, +/* 0000A400 */ 0x02, 0x1B, 0x5E, 0x1B, 0x1B, 0x0A, 0x7A, 0x1B, 0x1A, 0x0B, 0x92, 0x02, 0x1B, 0x5E, 0x1B, 0x1B, +/* 0000A410 */ 0x0C, 0x7A, 0x1B, 0x1A, 0x0D, 0x92, 0x02, 0x1B, 0x5E, 0x1B, 0x1B, 0x0E, 0x7A, 0x1B, 0x1A, 0x0F, +/* 0000A420 */ 0x92, 0x02, 0x1B, 0x5E, 0x1B, 0x1B, 0x10, 0x7A, 0x1B, 0x1A, 0x11, 0x92, 0x02, 0x1B, 0x5E, 0x1B, +/* 0000A430 */ 0x1B, 0x12, 0x7A, 0x1B, 0x1A, 0x13, 0x92, 0x02, 0x1B, 0x5E, 0x1B, 0x1B, 0x14, 0x7A, 0x1B, 0x1A, +/* 0000A440 */ 0x15, 0x92, 0x02, 0x1B, 0x5E, 0x1B, 0x1B, 0x16, 0x7A, 0x1B, 0x1A, 0x17, 0x92, 0x02, 0x1B, 0x5E, +/* 0000A450 */ 0x1B, 0x1B, 0x18, 0x7A, 0x1B, 0x1A, 0x19, 0x92, 0x02, 0x1B, 0x5E, 0x1B, 0x1B, 0x1A, 0x7A, 0x1B, +/* 0000A460 */ 0x1A, 0x1B, 0x92, 0x02, 0x1B, 0x5E, 0x1B, 0x1B, 0x1C, 0x7A, 0x1B, 0x1A, 0x1D, 0x92, 0x02, 0x1B, +/* 0000A470 */ 0x5E, 0x1B, 0x1B, 0x1E, 0x7A, 0x1B, 0x1A, 0x1F, 0x59, 0x01, 0x1A, 0x59, 0x02, 0x13, 0x1F, 0x03, +/* 0000A480 */ 0x19, 0x19, 0x96, 0x03, 0x19, 0x8E, 0x05, 0x04, 0x19, 0x07, 0x03, 0x00, 0x59, 0x00, 0x14, 0xCD, +/* 0000A490 */ 0x1A, 0x59, 0x01, 0x1A, 0x59, 0x02, 0x13, 0x1F, 0x03, 0x19, 0x19, 0x96, 0x04, 0x19, 0x8E, 0x05, +/* 0000A4A0 */ 0x06, 0x19, 0x07, 0x05, 0x00, 0x59, 0x00, 0x14, 0x8E, 0x05, 0x17, 0x1A, 0x59, 0x01, 0x1A, 0x8E, +/* 0000A4B0 */ 0x05, 0x13, 0x1A, 0x07, 0x02, 0x00, 0x59, 0x00, 0x14, 0x92, 0x03, 0x1B, 0x59, 0x01, 0x1B, 0x1F, +/* 0000A4C0 */ 0x02, 0x1A, 0x1A, 0x59, 0x02, 0x1A, 0xD6, 0x00, 0x1A, 0x59, 0x03, 0x1A, 0x92, 0x02, 0x1A, 0x59, +/* 0000A4D0 */ 0x04, 0x1A, 0x1F, 0x05, 0xFF, 0x19, 0x8E, 0x05, 0x04, 0x19, 0x07, 0x03, 0x00, 0x59, 0x00, 0x14, +/* 0000A4E0 */ 0x92, 0x04, 0x1A, 0x59, 0x01, 0x1A, 0x8E, 0x05, 0x09, 0x1A, 0x5E, 0x1A, 0x1A, 0x20, 0x59, 0x02, +/* 0000A4F0 */ 0x1A, 0x1F, 0x03, 0x00, 0x19, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x01, 0x40, 0x00, 0x00, +/* 0000A500 */ 0x00, 0x00, 0x00, 0x03, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x02, 0x00, 0x00, 0x6B, +/* 0000A510 */ 0x02, 0x00, 0x00, 0x49, 0x02, 0x00, 0x00, 0x74, 0x02, 0x00, 0x00, 0x6F, 0x02, 0x00, 0x00, 0x76, +/* 0000A520 */ 0x02, 0x00, 0x00, 0x6D, 0x02, 0x00, 0x00, 0x77, 0x02, 0x00, 0x00, 0x71, 0x02, 0x00, 0x00, 0x6C, +/* 0000A530 */ 0x02, 0x00, 0x00, 0x6E, 0x02, 0x00, 0x00, 0x70, 0x02, 0x00, 0x00, 0x73, 0x02, 0x00, 0x00, 0x75, +/* 0000A540 */ 0x02, 0x00, 0x00, 0xFE, 0xB6, 0x02, 0xFE, 0x05, 0x02, 0xFE, 0x5E, 0x02, 0xFE, 0xB6, 0x02, 0xFE, +/* 0000A550 */ 0x09, 0x02, 0xFE, 0x0D, 0x02, 0xFE, 0x58, 0x02, 0xFE, 0x6B, 0x02, 0xFE, 0x3D, 0x02, 0xFE, 0x49, +/* 0000A560 */ 0x02, 0xFE, 0x65, 0x02, 0xFE, 0x74, 0x02, 0xFE, 0x5D, 0x02, 0xFE, 0x6F, 0x02, 0xFE, 0x67, 0x02, +/* 0000A570 */ 0xFE, 0x76, 0x02, 0xFE, 0x5A, 0x02, 0xFE, 0x6D, 0x02, 0xFE, 0x6A, 0x02, 0xFE, 0x77, 0x02, 0xFE, +/* 0000A580 */ 0x61, 0x02, 0xFE, 0x71, 0x02, 0xFE, 0x59, 0x02, 0xFE, 0x6C, 0x02, 0xFE, 0x5C, 0x02, 0xFE, 0x6E, +/* 0000A590 */ 0x02, 0xFE, 0x60, 0x02, 0xFE, 0x70, 0x02, 0xFE, 0x63, 0x02, 0xFE, 0x73, 0x02, 0xFE, 0x66, 0x02, +/* 0000A5A0 */ 0xFE, 0x75, 0x02, 0xFE, 0x24, 0x01, 0xFF, 0x08, 0xA6, 0x02, 0x00, 0x0A, 0x02, 0x00, 0x00, 0x00, +/* 0000A5B0 */ 0x0B, 0x00, 0x3C, 0x00, 0x18, 0x00, 0x90, 0x00, 0x18, 0x00, 0x4B, 0x00, 0x15, 0x00, 0x6B, 0x00, +/* 0000A5C0 */ 0x18, 0x00, 0x90, 0x00, 0xBE, 0x00, 0xCE, 0x03, 0x19, 0x00, 0x3E, 0x00, 0x38, 0x00, 0x98, 0x01, +/* 0000A5D0 */ 0x24, 0x00, 0x44, 0x00, 0x00, 0xD9, 0xA5, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0x01, 0x00, 0x10, 0x03, +/* 0000A5E0 */ 0x00, 0xFE, 0x7E, 0x0E, 0x60, 0xA2, 0x41, 0xD1, 0x00, 0xC6, 0xFF, 0x6E, 0xAC, 0x02, 0x00, 0xFF, +/* 0000A5F0 */ 0x6E, 0xAC, 0x02, 0x00, 0x41, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0x6E, 0xAC, 0x02, 0x00, 0xFE, +/* 0000A600 */ 0x27, 0x01, 0xFE, 0x27, 0x01, 0x04, 0x05, 0x07, 0x05, 0x18, 0x18, 0x06, 0x05, 0x06, 0x06, 0xFE, +/* 0000A610 */ 0x77, 0x04, 0x05, 0xFE, 0xC7, 0x04, 0x08, 0x52, 0x8E, 0x01, 0x03, 0x07, 0x97, 0x07, 0x07, 0x05, +/* 0000A620 */ 0xA8, 0x08, 0x15, 0x08, 0x00, 0x07, 0x08, 0x14, 0x03, 0x00, 0x05, 0x02, 0x09, 0x37, 0x00, 0x8E, +/* 0000A630 */ 0x06, 0x06, 0x07, 0x07, 0x04, 0x00, 0x59, 0x00, 0x04, 0x8E, 0x06, 0x14, 0x08, 0x59, 0x01, 0x08, +/* 0000A640 */ 0x8E, 0x01, 0x02, 0x08, 0x59, 0x02, 0x08, 0x2D, 0x08, 0x03, 0x05, 0x59, 0x03, 0x08, 0x1F, 0x04, +/* 0000A650 */ 0x07, 0x07, 0x0E, 0x10, 0x00, 0x07, 0x8E, 0x01, 0x04, 0x07, 0x8E, 0x01, 0x03, 0x08, 0x97, 0x08, +/* 0000A660 */ 0x08, 0x05, 0x9C, 0x08, 0x07, 0x05, 0xA8, 0x00, 0x24, 0x00, 0xFF, 0x9C, 0xAC, 0x02, 0x00, 0x03, +/* 0000A670 */ 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0xA6, 0x00, 0x12, 0x00, 0x52, 0x00, 0x00, 0x7F, 0x5C, 0x00, +/* 0000A680 */ 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x56, 0x0E, 0x39, 0xA0, 0x41, 0xD1, 0x00, 0xC4, 0xFF, 0xC6, +/* 0000A690 */ 0xA2, 0x02, 0x00, 0xFF, 0xC6, 0xA2, 0x02, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFF, 0xC6, +/* 0000A6A0 */ 0xA2, 0x02, 0x00, 0xFE, 0x60, 0x02, 0xFE, 0x60, 0x02, 0x05, 0x05, 0x08, 0x04, 0x22, 0x21, 0x05, +/* 0000A6B0 */ 0x01, 0x05, 0x05, 0x05, 0x05, 0x07, 0x06, 0xFE, 0x94, 0x03, 0x05, 0xFE, 0x88, 0x04, 0x06, 0xFE, +/* 0000A6C0 */ 0x30, 0x03, 0x6F, 0x58, 0x05, 0x2A, 0x08, 0x05, 0x15, 0x03, 0x00, 0x08, 0x02, 0x09, 0x18, 0x00, +/* 0000A6D0 */ 0x8E, 0x05, 0x03, 0x09, 0x6C, 0x08, 0x09, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x09, 0x59, 0x01, +/* 0000A6E0 */ 0x03, 0x59, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x08, 0x8E, 0x05, 0x03, 0x09, 0x6C, 0x08, 0x09, 0x01, +/* 0000A6F0 */ 0x07, 0x02, 0x00, 0x59, 0x00, 0x09, 0x59, 0x01, 0x05, 0x1F, 0x02, 0x08, 0x08, 0x45, 0x06, 0x08, +/* 0000A700 */ 0xA8, 0x08, 0x14, 0x08, 0x00, 0x06, 0x08, 0x5E, 0x08, 0x06, 0x02, 0x0F, 0x18, 0x00, 0x08, 0x8E, +/* 0000A710 */ 0x05, 0x03, 0x09, 0x6C, 0x08, 0x09, 0x03, 0x07, 0x03, 0x00, 0x59, 0x00, 0x09, 0x59, 0x01, 0x03, +/* 0000A720 */ 0x59, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x08, 0x5E, 0x00, 0x06, 0x04, 0x09, 0x02, 0x00, 0xA8, 0x00, +/* 0000A730 */ 0x24, 0x00, 0xFE, 0xB6, 0x02, 0xFE, 0x05, 0x02, 0xFE, 0x5E, 0x02, 0xFE, 0xB6, 0x02, 0xFE, 0x57, +/* 0000A740 */ 0x02, 0xFF, 0xEC, 0xA2, 0x02, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3C, 0x00, 0x18, +/* 0000A750 */ 0x00, 0x88, 0x00, 0x18, 0x00, 0x4B, 0x00, 0x0F, 0x00, 0x6B, 0x00, 0x18, 0x00, 0x88, 0x00, 0x09, +/* 0000A760 */ 0x00, 0x37, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x37, 0x0E, 0x10, +/* 0000A770 */ 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x15, 0x04, 0xC3, 0xFF, 0x1F, 0x9C, 0x02, 0x00, 0xFF, 0x1F, 0x9C, +/* 0000A780 */ 0x02, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0x1F, 0x9C, 0x02, 0x00, 0xFE, 0xFD, 0x03, +/* 0000A790 */ 0xFE, 0xFD, 0x03, 0x08, 0x06, 0x0B, 0x07, 0x55, 0x51, 0x05, 0x06, 0x07, 0x07, 0x07, 0x07, 0x0A, +/* 0000A7A0 */ 0x06, 0xFE, 0x94, 0x03, 0x05, 0xFE, 0x88, 0x04, 0x06, 0xFE, 0x30, 0x03, 0x08, 0xFE, 0x19, 0x01, +/* 0000A7B0 */ 0x58, 0x07, 0x4E, 0x08, 0x4E, 0x09, 0x2A, 0x0B, 0x07, 0x15, 0x03, 0x00, 0x0B, 0x02, 0x09, 0x18, +/* 0000A7C0 */ 0x00, 0x8E, 0x05, 0x03, 0x0C, 0x6C, 0x0B, 0x0C, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0C, 0x59, +/* 0000A7D0 */ 0x01, 0x03, 0x59, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x0B, 0x8E, 0x05, 0x03, 0x0C, 0x6C, 0x0B, 0x0C, +/* 0000A7E0 */ 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0C, 0x59, 0x01, 0x07, 0x1F, 0x02, 0x0B, 0x0B, 0x45, 0x08, +/* 0000A7F0 */ 0x0B, 0xA8, 0x0B, 0x14, 0x08, 0x00, 0x08, 0x0B, 0x5E, 0x0B, 0x08, 0x02, 0x0F, 0x18, 0x00, 0x0B, +/* 0000A800 */ 0x8E, 0x05, 0x03, 0x0C, 0x6C, 0x0B, 0x0C, 0x03, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0C, 0x59, 0x01, +/* 0000A810 */ 0x03, 0x59, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x0B, 0xA8, 0x0B, 0x15, 0x03, 0x00, 0x06, 0x0B, 0x09, +/* 0000A820 */ 0x3C, 0x00, 0x8E, 0x05, 0x21, 0x0B, 0x07, 0x02, 0x00, 0x59, 0x00, 0x05, 0x59, 0x01, 0x06, 0x1F, +/* 0000A830 */ 0x02, 0x0B, 0x0B, 0x0F, 0x15, 0x00, 0x0B, 0x8E, 0x05, 0x20, 0x0B, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 0000A840 */ 0x05, 0x59, 0x01, 0x06, 0x1F, 0x02, 0x0B, 0x0B, 0x0F, 0x12, 0x00, 0x0B, 0x8E, 0x05, 0x03, 0x0C, +/* 0000A850 */ 0x6C, 0x0B, 0x0C, 0x04, 0x07, 0x01, 0x00, 0x59, 0x00, 0x0C, 0x1F, 0x01, 0xFF, 0x0B, 0xA8, 0x0B, +/* 0000A860 */ 0x45, 0x09, 0x0B, 0xA8, 0x0B, 0x15, 0x03, 0x00, 0x06, 0x0B, 0x09, 0x1B, 0x00, 0x8E, 0x05, 0x24, +/* 0000A870 */ 0x0C, 0x6C, 0x0B, 0x0C, 0x05, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0C, 0x59, 0x01, 0x06, 0x1F, 0x02, +/* 0000A880 */ 0x0B, 0x0B, 0x45, 0x09, 0x0B, 0x09, 0x11, 0x00, 0x8E, 0x05, 0x1C, 0x0B, 0x07, 0x01, 0x00, 0x59, +/* 0000A890 */ 0x00, 0x05, 0x1F, 0x01, 0x0B, 0x0B, 0x45, 0x09, 0x0B, 0x8E, 0x05, 0x0C, 0x0B, 0x07, 0x02, 0x00, +/* 0000A8A0 */ 0x59, 0x00, 0x05, 0x8E, 0x05, 0x03, 0x0D, 0x6C, 0x0C, 0x0D, 0x06, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 0000A8B0 */ 0x0D, 0x59, 0x01, 0x09, 0x59, 0x02, 0x08, 0x1F, 0x03, 0x0C, 0x0C, 0x59, 0x01, 0x0C, 0x1F, 0x02, +/* 0000A8C0 */ 0x00, 0x0B, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB6, 0x02, 0xFE, 0x05, 0x02, 0xFE, +/* 0000A8D0 */ 0x5E, 0x02, 0xFE, 0xB6, 0x02, 0xFE, 0xB9, 0x02, 0xFE, 0x23, 0x03, 0xFE, 0xFC, 0x01, 0xFF, 0x4B, +/* 0000A8E0 */ 0x9C, 0x02, 0x00, 0x0D, 0x06, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x38, 0x00, 0x18, 0x00, 0x7F, 0x00, +/* 0000A8F0 */ 0x18, 0x00, 0x47, 0x00, 0x0F, 0x00, 0x67, 0x00, 0x18, 0x00, 0x80, 0x00, 0x34, 0x00, 0x56, 0x00, +/* 0000A900 */ 0x12, 0x00, 0x48, 0x00, 0x05, 0x00, 0x2F, 0x00, 0x0A, 0x00, 0x32, 0x00, 0x1B, 0x00, 0x59, 0x00, +/* 0000A910 */ 0x11, 0x00, 0x42, 0x00, 0x2E, 0x00, 0x51, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, +/* 0000A920 */ 0x00, 0xFE, 0x1C, 0x0E, 0x10, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x30, 0x03, 0xC2, 0xFF, 0x9D, 0x97, +/* 0000A930 */ 0x02, 0x00, 0xFF, 0x9D, 0x97, 0x02, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x03, 0x01, 0xFF, 0x9D, 0x97, +/* 0000A940 */ 0x02, 0x00, 0xFE, 0x26, 0x04, 0xFE, 0x26, 0x04, 0x09, 0x05, 0x0B, 0x05, 0x5E, 0x57, 0x05, 0x0A, +/* 0000A950 */ 0x06, 0x06, 0x06, 0x06, 0x0A, 0x08, 0x06, 0xFE, 0x30, 0x03, 0x07, 0xFE, 0x30, 0x01, 0x58, 0x07, +/* 0000A960 */ 0x4E, 0x08, 0x4E, 0x09, 0x15, 0x05, 0x00, 0x05, 0x02, 0xA8, 0x0B, 0x45, 0x05, 0x0B, 0x15, 0x05, +/* 0000A970 */ 0x00, 0x06, 0x02, 0xA8, 0x0B, 0x45, 0x06, 0x0B, 0x4E, 0x08, 0x4E, 0x09, 0x8E, 0x05, 0x07, 0x0B, +/* 0000A980 */ 0x14, 0x0A, 0x00, 0x07, 0x0B, 0xA8, 0x0B, 0x14, 0x03, 0x00, 0x07, 0x0B, 0x09, 0x16, 0x00, 0x8E, +/* 0000A990 */ 0x01, 0x02, 0x0B, 0x4A, 0x0B, 0x07, 0x03, 0x00, 0x59, 0x01, 0x05, 0x59, 0x02, 0x06, 0xC4, 0x03, +/* 0000A9A0 */ 0x00, 0x0B, 0x09, 0xE7, 0x00, 0x8E, 0x05, 0x24, 0x0C, 0x6C, 0x0B, 0x0C, 0x00, 0x07, 0x02, 0x00, +/* 0000A9B0 */ 0x59, 0x00, 0x0C, 0x59, 0x01, 0x07, 0x1F, 0x02, 0x0B, 0x0B, 0x45, 0x08, 0x0B, 0x8E, 0x05, 0x12, +/* 0000A9C0 */ 0x0B, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x08, 0x1F, 0x02, 0x0B, 0x0B, 0x0F, 0x15, +/* 0000A9D0 */ 0x00, 0x0B, 0x8E, 0x05, 0x03, 0x0C, 0x6C, 0x0B, 0x0C, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0C, +/* 0000A9E0 */ 0x59, 0x01, 0x03, 0x1F, 0x02, 0xFF, 0x0B, 0x8E, 0x05, 0x03, 0x0C, 0x6C, 0x0B, 0x0C, 0x02, 0x07, +/* 0000A9F0 */ 0x02, 0x00, 0x59, 0x00, 0x0C, 0x59, 0x01, 0x08, 0x1F, 0x02, 0x0B, 0x0B, 0x45, 0x09, 0x0B, 0xA8, +/* 0000AA00 */ 0x0B, 0x14, 0x03, 0x00, 0x09, 0x0B, 0x09, 0x31, 0x00, 0x8E, 0x05, 0x04, 0x0B, 0x07, 0x03, 0x00, +/* 0000AA10 */ 0x59, 0x00, 0x02, 0xCD, 0x0C, 0x59, 0x01, 0x0C, 0x59, 0x02, 0x04, 0x1F, 0x03, 0x0B, 0x0B, 0x45, +/* 0000AA20 */ 0x09, 0x0B, 0x8E, 0x05, 0x03, 0x0C, 0x6C, 0x0B, 0x0C, 0x03, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0C, +/* 0000AA30 */ 0x59, 0x01, 0x08, 0x59, 0x02, 0x09, 0x1F, 0x03, 0xFF, 0x0B, 0x8E, 0x02, 0x08, 0x0B, 0x4A, 0x0B, +/* 0000AA40 */ 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x09, 0x59, 0x02, 0x05, 0x59, 0x03, 0x06, 0x1F, +/* 0000AA50 */ 0x04, 0xFF, 0x0B, 0x45, 0x0B, 0x09, 0x8E, 0x05, 0x06, 0x0C, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, +/* 0000AA60 */ 0x8E, 0x05, 0x1A, 0x0D, 0x59, 0x01, 0x0D, 0x8E, 0x01, 0x03, 0x0D, 0x4A, 0x0D, 0x59, 0x02, 0x0D, +/* 0000AA70 */ 0x59, 0x03, 0x08, 0x1F, 0x04, 0x0C, 0x0C, 0x76, 0x0C, 0x0B, 0x04, 0x5E, 0x0B, 0x09, 0x05, 0x82, +/* 0000AA80 */ 0x0B, 0x0B, 0x06, 0x01, 0x45, 0x00, 0x08, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x21, +/* 0000AA90 */ 0x03, 0xFE, 0xB2, 0x02, 0xFE, 0x05, 0x02, 0xFE, 0x06, 0x02, 0xFE, 0x57, 0x02, 0xFE, 0x57, 0x02, +/* 0000AAA0 */ 0xFF, 0xB5, 0x97, 0x02, 0x00, 0x10, 0x06, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0E, 0x00, +/* 0000AAB0 */ 0x2B, 0x00, 0x13, 0x00, 0x43, 0x00, 0x16, 0x00, 0x58, 0x00, 0x18, 0x00, 0x37, 0x00, 0x15, 0x00, +/* 0000AAC0 */ 0x38, 0x00, 0x15, 0x00, 0x9D, 0x00, 0x18, 0x00, 0x47, 0x00, 0x0A, 0x00, 0x3A, 0x00, 0x19, 0x00, +/* 0000AAD0 */ 0x3F, 0x00, 0x18, 0x00, 0x58, 0x00, 0x19, 0x00, 0x4F, 0x00, 0x28, 0x00, 0x66, 0x00, 0x09, 0x00, +/* 0000AAE0 */ 0x3D, 0x00, 0x08, 0x00, 0x1C, 0x00, 0x00, 0x7F, 0x5D, 0x00, 0xC1, 0x03, 0x1A, 0x0B, 0x00, 0xFE, +/* 0000AAF0 */ 0x15, 0x0E, 0x0D, 0xA2, 0x41, 0xD1, 0x00, 0xC0, 0xFF, 0x1A, 0x95, 0x02, 0x00, 0xFF, 0x1A, 0x95, +/* 0000AB00 */ 0x02, 0x00, 0x01, 0x40, 0xFE, 0x00, 0x90, 0x06, 0x06, 0xFF, 0x1A, 0x95, 0x02, 0x00, 0xFE, 0x9F, +/* 0000AB10 */ 0x01, 0xFE, 0x9F, 0x01, 0x04, 0xFE, 0x06, 0x01, 0xFE, 0x82, 0x04, 0xFE, 0x83, 0x04, 0xFE, 0x84, +/* 0000AB20 */ 0x04, 0x0C, 0x03, 0x0B, 0x08, 0x16, 0x16, 0x04, 0x03, 0x01, 0x01, 0x01, 0x01, 0x08, 0x09, 0x0A, +/* 0000AB30 */ 0x08, 0x42, 0x96, 0x02, 0x03, 0x96, 0x03, 0x04, 0x96, 0x04, 0x05, 0x96, 0x05, 0x06, 0x8E, 0x04, +/* 0000AB40 */ 0x03, 0x0C, 0x6C, 0x0B, 0x0C, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0C, 0x8E, 0x04, 0x23, 0x0D, +/* 0000AB50 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x92, 0x02, 0x0E, 0x59, 0x01, 0x0E, 0xD6, 0x00, 0x0E, 0x59, +/* 0000AB60 */ 0x02, 0x0E, 0x1F, 0x03, 0x0D, 0x0D, 0x59, 0x01, 0x0D, 0x59, 0x02, 0x07, 0x1F, 0x03, 0xFF, 0x0B, +/* 0000AB70 */ 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x04, 0x02, 0xFF, 0x6D, 0x95, 0x02, 0x00, 0x02, 0x0C, 0x00, 0x00, +/* 0000AB80 */ 0x00, 0x34, 0x00, 0x4B, 0x01, 0x00, 0x8A, 0xAB, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, +/* 0000AB90 */ 0x03, 0x00, 0xFE, 0x16, 0x0E, 0x49, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x87, 0x04, 0xC1, 0xFF, 0xA6, +/* 0000ABA0 */ 0x95, 0x02, 0x00, 0xFF, 0xA6, 0x95, 0x02, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x03, 0x01, 0xFF, 0xA6, +/* 0000ABB0 */ 0x95, 0x02, 0x00, 0xEE, 0xEE, 0x07, 0x03, 0x07, 0x09, 0x1C, 0x1A, 0x05, 0x05, 0x01, 0x01, 0x01, +/* 0000ABC0 */ 0x01, 0x06, 0x08, 0x56, 0x58, 0x05, 0x15, 0x05, 0x00, 0x03, 0x02, 0xA8, 0x07, 0x45, 0x03, 0x07, +/* 0000ABD0 */ 0x15, 0x05, 0x00, 0x04, 0x02, 0xA8, 0x07, 0x45, 0x04, 0x07, 0x8E, 0x02, 0x09, 0x08, 0x4A, 0x08, +/* 0000ABE0 */ 0x6C, 0x07, 0x08, 0x00, 0x07, 0x08, 0x00, 0x59, 0x00, 0x08, 0x59, 0x01, 0x05, 0x8E, 0x01, 0x02, +/* 0000ABF0 */ 0x09, 0x59, 0x02, 0x09, 0x8E, 0x01, 0x03, 0x09, 0x59, 0x03, 0x09, 0x8E, 0x01, 0x04, 0x09, 0x59, +/* 0000AC00 */ 0x04, 0x09, 0x8E, 0x01, 0x05, 0x09, 0x59, 0x05, 0x09, 0x59, 0x06, 0x03, 0x59, 0x07, 0x04, 0x1F, +/* 0000AC10 */ 0x08, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x5A, 0xFF, 0xD2, 0x95, 0x02, 0x00, +/* 0000AC20 */ 0x04, 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0A, 0x00, 0x2B, 0x00, 0x3E, 0x00, 0x81, +/* 0000AC30 */ 0x00, 0x00, 0x7F, 0x5D, 0x00, 0xC1, 0x03, 0x1A, 0x0B, 0x00, 0xFE, 0x0F, 0x0E, 0x0D, 0xA2, 0x41, +/* 0000AC40 */ 0xD1, 0x00, 0xBE, 0xFF, 0xC1, 0x92, 0x02, 0x00, 0xFF, 0xC1, 0x92, 0x02, 0x00, 0x01, 0x40, 0xFE, +/* 0000AC50 */ 0x00, 0x90, 0x06, 0x06, 0xFF, 0xC1, 0x92, 0x02, 0x00, 0xFE, 0x9F, 0x01, 0xFE, 0x9F, 0x01, 0x04, +/* 0000AC60 */ 0xFE, 0x06, 0x01, 0xFE, 0x82, 0x04, 0xFE, 0x83, 0x04, 0xFE, 0x84, 0x04, 0x0C, 0x03, 0x0B, 0x08, +/* 0000AC70 */ 0x16, 0x16, 0x04, 0x03, 0x01, 0x01, 0x01, 0x01, 0x08, 0x09, 0x0A, 0x08, 0x42, 0x96, 0x02, 0x03, +/* 0000AC80 */ 0x96, 0x03, 0x04, 0x96, 0x04, 0x05, 0x96, 0x05, 0x06, 0x8E, 0x04, 0x03, 0x0C, 0x6C, 0x0B, 0x0C, +/* 0000AC90 */ 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0C, 0x8E, 0x04, 0x23, 0x0D, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 0000ACA0 */ 0x02, 0x92, 0x02, 0x0E, 0x59, 0x01, 0x0E, 0xD6, 0x00, 0x0E, 0x59, 0x02, 0x0E, 0x1F, 0x03, 0x0D, +/* 0000ACB0 */ 0x0D, 0x59, 0x01, 0x0D, 0x59, 0x02, 0x07, 0x1F, 0x03, 0xFF, 0x0B, 0xA8, 0x00, 0x24, 0x00, 0xFE, +/* 0000ACC0 */ 0x04, 0x02, 0xFF, 0x14, 0x93, 0x02, 0x00, 0x02, 0x0C, 0x00, 0x00, 0x00, 0x34, 0x00, 0x4B, 0x01, +/* 0000ACD0 */ 0x00, 0xD5, 0xAC, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x10, 0x0E, +/* 0000ACE0 */ 0x49, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x86, 0x04, 0xBF, 0xFF, 0x4D, 0x93, 0x02, 0x00, 0xFF, 0x4D, +/* 0000ACF0 */ 0x93, 0x02, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x03, 0x01, 0xFF, 0x4D, 0x93, 0x02, 0x00, 0xEE, 0xEE, +/* 0000AD00 */ 0x07, 0x03, 0x07, 0x09, 0x1C, 0x1A, 0x05, 0x05, 0x01, 0x01, 0x01, 0x01, 0x06, 0x08, 0x56, 0x58, +/* 0000AD10 */ 0x05, 0x15, 0x05, 0x00, 0x03, 0x02, 0xA8, 0x07, 0x45, 0x03, 0x07, 0x15, 0x05, 0x00, 0x04, 0x02, +/* 0000AD20 */ 0xA8, 0x07, 0x45, 0x04, 0x07, 0x8E, 0x02, 0x09, 0x08, 0x4A, 0x08, 0x6C, 0x07, 0x08, 0x00, 0x07, +/* 0000AD30 */ 0x08, 0x00, 0x59, 0x00, 0x08, 0x59, 0x01, 0x05, 0x8E, 0x01, 0x02, 0x09, 0x59, 0x02, 0x09, 0x8E, +/* 0000AD40 */ 0x01, 0x03, 0x09, 0x59, 0x03, 0x09, 0x8E, 0x01, 0x04, 0x09, 0x59, 0x04, 0x09, 0x8E, 0x01, 0x05, +/* 0000AD50 */ 0x09, 0x59, 0x05, 0x09, 0x59, 0x06, 0x03, 0x59, 0x07, 0x04, 0x1F, 0x08, 0x00, 0x07, 0x09, 0x02, +/* 0000AD60 */ 0x00, 0xA8, 0x00, 0x24, 0x00, 0x5A, 0xFF, 0x79, 0x93, 0x02, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00, +/* 0000AD70 */ 0x0A, 0x00, 0x15, 0x00, 0x0A, 0x00, 0x2B, 0x00, 0x3E, 0x00, 0x81, 0x00, 0x00, 0x7F, 0x5D, 0x00, +/* 0000AD80 */ 0xC1, 0x03, 0x1A, 0x0B, 0x00, 0xFE, 0x09, 0x0E, 0x0D, 0xA2, 0x41, 0xD1, 0x00, 0xBC, 0xFF, 0x7A, +/* 0000AD90 */ 0x90, 0x02, 0x00, 0xFF, 0x7A, 0x90, 0x02, 0x00, 0x01, 0x40, 0xFE, 0x00, 0x90, 0x06, 0x06, 0xFF, +/* 0000ADA0 */ 0x7A, 0x90, 0x02, 0x00, 0xFE, 0x9B, 0x01, 0xFE, 0x9B, 0x01, 0x04, 0xFE, 0x06, 0x01, 0xFE, 0x82, +/* 0000ADB0 */ 0x04, 0xFE, 0x83, 0x04, 0xFE, 0x84, 0x04, 0x0C, 0x03, 0x0B, 0x08, 0x16, 0x16, 0x04, 0x03, 0x01, +/* 0000ADC0 */ 0x01, 0x01, 0x01, 0x08, 0x09, 0x0A, 0x08, 0x42, 0x96, 0x02, 0x03, 0x96, 0x03, 0x04, 0x96, 0x04, +/* 0000ADD0 */ 0x05, 0x96, 0x05, 0x06, 0x8E, 0x04, 0x03, 0x0C, 0x6C, 0x0B, 0x0C, 0x00, 0x07, 0x03, 0x00, 0x59, +/* 0000ADE0 */ 0x00, 0x0C, 0x8E, 0x04, 0x23, 0x0D, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x92, 0x02, 0x0E, 0x59, +/* 0000ADF0 */ 0x01, 0x0E, 0xD6, 0x00, 0x0E, 0x59, 0x02, 0x0E, 0x1F, 0x03, 0x0D, 0x0D, 0x59, 0x01, 0x0D, 0x59, +/* 0000AE00 */ 0x02, 0x07, 0x1F, 0x03, 0xFF, 0x0B, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x04, 0x02, 0xFF, 0xCD, 0x90, +/* 0000AE10 */ 0x02, 0x00, 0x02, 0x0C, 0x00, 0x00, 0x00, 0x34, 0x00, 0x47, 0x01, 0x00, 0x20, 0xAE, 0x00, 0x00, +/* 0000AE20 */ 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x0A, 0x0E, 0x49, 0xA2, 0x41, 0xC3, 0x00, +/* 0000AE30 */ 0xFE, 0x85, 0x04, 0xBD, 0xFF, 0x06, 0x91, 0x02, 0x00, 0xFF, 0x06, 0x91, 0x02, 0x00, 0x09, 0xFE, +/* 0000AE40 */ 0x00, 0x90, 0x03, 0x01, 0xFF, 0x06, 0x91, 0x02, 0x00, 0xEA, 0xEA, 0x07, 0x03, 0x07, 0x09, 0x1C, +/* 0000AE50 */ 0x1A, 0x05, 0x05, 0x01, 0x01, 0x01, 0x01, 0x06, 0x08, 0x56, 0x58, 0x05, 0x15, 0x05, 0x00, 0x03, +/* 0000AE60 */ 0x02, 0xA8, 0x07, 0x45, 0x03, 0x07, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA8, 0x07, 0x45, 0x04, 0x07, +/* 0000AE70 */ 0x8E, 0x02, 0x09, 0x08, 0x4A, 0x08, 0x6C, 0x07, 0x08, 0x00, 0x07, 0x08, 0x00, 0x59, 0x00, 0x08, +/* 0000AE80 */ 0x59, 0x01, 0x05, 0x8E, 0x01, 0x02, 0x09, 0x59, 0x02, 0x09, 0x8E, 0x01, 0x03, 0x09, 0x59, 0x03, +/* 0000AE90 */ 0x09, 0x8E, 0x01, 0x04, 0x09, 0x59, 0x04, 0x09, 0x8E, 0x01, 0x05, 0x09, 0x59, 0x05, 0x09, 0x59, +/* 0000AEA0 */ 0x06, 0x03, 0x59, 0x07, 0x04, 0x1F, 0x08, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, +/* 0000AEB0 */ 0x5A, 0xFF, 0x2E, 0x91, 0x02, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0A, +/* 0000AEC0 */ 0x00, 0x2B, 0x00, 0x3E, 0x00, 0x81, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x07, 0x10, 0x03, 0x00, +/* 0000AED0 */ 0xFE, 0xD2, 0x0D, 0x0C, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x26, 0x04, 0xBB, 0xFF, 0x3B, 0x81, 0x02, +/* 0000AEE0 */ 0x00, 0xFF, 0x3B, 0x81, 0x02, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x07, 0x07, 0xFF, 0x3B, 0x81, 0x02, +/* 0000AEF0 */ 0x00, 0xFE, 0x74, 0x06, 0xFE, 0x74, 0x06, 0x0F, 0x07, 0x11, 0x0A, 0x89, 0x83, 0x04, 0x0C, 0x04, +/* 0000AF00 */ 0x04, 0x04, 0x04, 0x01, 0x10, 0x06, 0xFE, 0x94, 0x03, 0x06, 0xFE, 0x2E, 0x04, 0x08, 0x05, 0xFE, +/* 0000AF10 */ 0x81, 0x04, 0x07, 0xFE, 0xBC, 0x01, 0x58, 0x0D, 0x4E, 0x0E, 0x4E, 0x0F, 0x2A, 0x11, 0x0D, 0x15, +/* 0000AF20 */ 0x0D, 0x00, 0x11, 0x02, 0x8E, 0x04, 0x0D, 0x11, 0xE3, 0x11, 0x0D, 0x11, 0x00, 0x0F, 0x18, 0x00, +/* 0000AF30 */ 0x11, 0x8E, 0x04, 0x03, 0x12, 0x6C, 0x11, 0x12, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x12, 0x59, +/* 0000AF40 */ 0x01, 0x07, 0x59, 0x02, 0x03, 0x1F, 0x03, 0xFF, 0x11, 0x8E, 0x04, 0x06, 0x11, 0x07, 0x03, 0x00, +/* 0000AF50 */ 0x59, 0x00, 0x04, 0x8E, 0x04, 0x1B, 0x12, 0x59, 0x01, 0x12, 0x8E, 0x04, 0x0D, 0x12, 0x07, 0x02, +/* 0000AF60 */ 0x00, 0x59, 0x01, 0x0D, 0xC4, 0x02, 0x12, 0x12, 0x59, 0x02, 0x12, 0x1F, 0x03, 0x11, 0x11, 0x45, +/* 0000AF70 */ 0x0E, 0x11, 0x8E, 0x04, 0x21, 0x11, 0x07, 0x02, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x0E, 0x1F, +/* 0000AF80 */ 0x02, 0x11, 0x11, 0x0F, 0x15, 0x00, 0x11, 0x8E, 0x04, 0x20, 0x11, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 0000AF90 */ 0x04, 0x59, 0x01, 0x0E, 0x1F, 0x02, 0x11, 0x11, 0x0F, 0x06, 0x00, 0x11, 0x45, 0x00, 0x05, 0x09, +/* 0000AFA0 */ 0x2E, 0x01, 0xA8, 0x11, 0x45, 0x0F, 0x11, 0x8E, 0x04, 0x03, 0x11, 0x5E, 0x11, 0x11, 0x01, 0x0E, +/* 0000AFB0 */ 0x8B, 0x00, 0x11, 0xA8, 0x11, 0x14, 0x03, 0x00, 0x0B, 0x11, 0x09, 0x81, 0x00, 0xA8, 0x11, 0x14, +/* 0000AFC0 */ 0x03, 0x00, 0x0C, 0x11, 0x09, 0x77, 0x00, 0x8E, 0x01, 0x0A, 0x11, 0x4A, 0x11, 0x97, 0x11, 0x11, +/* 0000AFD0 */ 0x0A, 0x0E, 0x10, 0x00, 0x11, 0x8E, 0x01, 0x0A, 0x11, 0x4A, 0x11, 0x97, 0x11, 0x11, 0x0A, 0x45, +/* 0000AFE0 */ 0x0F, 0x11, 0x09, 0x59, 0x00, 0x8E, 0x04, 0x04, 0x11, 0x07, 0x03, 0x00, 0x59, 0x00, 0x04, 0xCD, +/* 0000AFF0 */ 0x12, 0x59, 0x01, 0x12, 0x59, 0x02, 0x06, 0x1F, 0x03, 0x11, 0x11, 0x45, 0x0F, 0x11, 0x8E, 0x01, +/* 0000B000 */ 0x08, 0x11, 0x4A, 0x11, 0x07, 0x04, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x0F, 0xA8, 0x12, 0x59, +/* 0000B010 */ 0x02, 0x12, 0x8E, 0x01, 0x02, 0x12, 0x4A, 0x12, 0x07, 0x04, 0x00, 0x59, 0x00, 0x04, 0xA8, 0x13, +/* 0000B020 */ 0x59, 0x01, 0x13, 0x59, 0x02, 0x08, 0x59, 0x03, 0x09, 0x1F, 0x04, 0x12, 0x12, 0x59, 0x03, 0x12, +/* 0000B030 */ 0x1F, 0x04, 0xFF, 0x11, 0x8E, 0x01, 0x0A, 0x11, 0x4A, 0x11, 0x9C, 0x0F, 0x11, 0x0A, 0x0F, 0x4B, +/* 0000B040 */ 0x00, 0x0F, 0x8E, 0x04, 0x04, 0x11, 0x07, 0x03, 0x00, 0x59, 0x00, 0x04, 0xCD, 0x12, 0x59, 0x01, +/* 0000B050 */ 0x12, 0x59, 0x02, 0x06, 0x1F, 0x03, 0x11, 0x11, 0x45, 0x0F, 0x11, 0x8E, 0x01, 0x08, 0x11, 0x4A, +/* 0000B060 */ 0x11, 0x07, 0x04, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x0F, 0x59, 0x02, 0x0B, 0x8E, 0x01, 0x02, +/* 0000B070 */ 0x12, 0x4A, 0x12, 0x07, 0x04, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x0C, 0x59, 0x02, 0x08, 0x59, +/* 0000B080 */ 0x03, 0x09, 0x1F, 0x04, 0x12, 0x12, 0x59, 0x03, 0x12, 0x1F, 0x04, 0xFF, 0x11, 0x8E, 0x04, 0x0C, +/* 0000B090 */ 0x11, 0x07, 0x02, 0x00, 0x59, 0x00, 0x04, 0x8E, 0x04, 0x03, 0x13, 0x6C, 0x12, 0x13, 0x02, 0x07, +/* 0000B0A0 */ 0x03, 0x00, 0x59, 0x00, 0x13, 0x8E, 0x04, 0x24, 0x15, 0x6C, 0x14, 0x15, 0x03, 0x07, 0x02, 0x00, +/* 0000B0B0 */ 0x59, 0x00, 0x15, 0x59, 0x01, 0x0D, 0x1F, 0x02, 0x14, 0x14, 0x59, 0x01, 0x14, 0x59, 0x02, 0x0F, +/* 0000B0C0 */ 0x1F, 0x03, 0x12, 0x12, 0x59, 0x01, 0x12, 0x1F, 0x02, 0x00, 0x11, 0x09, 0x02, 0x00, 0xA8, 0x00, +/* 0000B0D0 */ 0x24, 0x00, 0xFE, 0xB6, 0x02, 0xFE, 0x4D, 0x03, 0xFE, 0xFC, 0x01, 0xFE, 0x23, 0x03, 0xFF, 0xB4, +/* 0000B0E0 */ 0x81, 0x02, 0x00, 0x11, 0x06, 0x00, 0x00, 0x00, 0x15, 0x00, 0x4F, 0x00, 0x18, 0x00, 0x50, 0x00, +/* 0000B0F0 */ 0x29, 0x00, 0x53, 0x00, 0x2A, 0x00, 0x3C, 0x00, 0x06, 0x00, 0x3A, 0x00, 0x05, 0x00, 0x2D, 0x00, +/* 0000B100 */ 0x20, 0x00, 0xCE, 0x00, 0x0E, 0x00, 0x84, 0x00, 0x10, 0x00, 0xA2, 0x00, 0x19, 0x00, 0x3E, 0x00, +/* 0000B110 */ 0x36, 0x00, 0x7A, 0x00, 0x0A, 0x00, 0x7C, 0x00, 0x04, 0x00, 0x28, 0x00, 0x19, 0x00, 0x3A, 0x00, +/* 0000B120 */ 0x32, 0x00, 0x81, 0x00, 0x43, 0x00, 0x5A, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x53, 0x50, 0x43, +/* 0000B130 */ 0x00, 0xFE, 0x45, 0x0D, 0x0C, 0xB3, 0x41, 0xC1, 0x00, 0xFE, 0x29, 0x04, 0xBA, 0xFF, 0x24, 0x64, +/* 0000B140 */ 0x02, 0x00, 0xFF, 0x24, 0x64, 0x02, 0x00, 0x45, 0xFE, 0x00, 0x90, 0x04, 0x04, 0xFF, 0x24, 0x64, +/* 0000B150 */ 0x02, 0x00, 0xFE, 0x7E, 0x1B, 0xFE, 0x7E, 0x1B, 0x1C, 0x29, 0x41, 0x07, 0xFE, 0xB3, 0x01, 0xFE, +/* 0000B160 */ 0x96, 0x01, 0x04, 0x0F, 0x2D, 0x2D, 0x2D, 0x2D, 0x01, 0x01, 0x40, 0x41, 0x06, 0xFE, 0x94, 0x03, +/* 0000B170 */ 0x06, 0xFE, 0xBA, 0x04, 0x08, 0x06, 0xFE, 0x30, 0x03, 0x0B, 0x06, 0xFE, 0x3F, 0x04, 0x06, 0xFE, +/* 0000B180 */ 0x42, 0x04, 0x06, 0xFE, 0xE0, 0x03, 0x06, 0xFE, 0xA3, 0x03, 0x05, 0xFE, 0x9C, 0x03, 0x05, 0xFE, +/* 0000B190 */ 0xDF, 0x03, 0x06, 0xFE, 0x77, 0x04, 0x06, 0xFE, 0x33, 0x04, 0x06, 0xFE, 0x2F, 0x04, 0x06, 0xFE, +/* 0000B1A0 */ 0x30, 0x04, 0x06, 0xFE, 0x31, 0x04, 0x06, 0xFE, 0x34, 0x04, 0x06, 0xFE, 0x35, 0x04, 0x06, 0xFE, +/* 0000B1B0 */ 0x32, 0x04, 0x06, 0xFE, 0xF8, 0x03, 0x06, 0xFE, 0x36, 0x04, 0x06, 0xFE, 0x37, 0x04, 0x06, 0xFE, +/* 0000B1C0 */ 0x38, 0x04, 0x06, 0xFE, 0x39, 0x04, 0x06, 0xFE, 0x3A, 0x04, 0x06, 0xFE, 0x3B, 0x04, 0x06, 0xFE, +/* 0000B1D0 */ 0x55, 0x04, 0x06, 0xFE, 0xA2, 0x03, 0x05, 0xFE, 0x7C, 0x04, 0x05, 0xFE, 0x7D, 0x04, 0x05, 0xFE, +/* 0000B1E0 */ 0x00, 0x05, 0x05, 0xFE, 0x01, 0x05, 0x07, 0x06, 0xFE, 0x17, 0x04, 0x06, 0xFE, 0x74, 0x04, 0x0C, +/* 0000B1F0 */ 0x05, 0xFE, 0x02, 0x05, 0x06, 0xFE, 0x40, 0x04, 0x01, 0x00, 0xFE, 0x88, 0x05, 0xA8, 0x3F, 0x2A, +/* 0000B200 */ 0x42, 0x29, 0x0D, 0x03, 0x00, 0x42, 0x02, 0x09, 0x12, 0x00, 0x8E, 0x04, 0x03, 0x43, 0x6C, 0x42, +/* 0000B210 */ 0x43, 0x00, 0x07, 0x01, 0x00, 0x59, 0x00, 0x43, 0x1F, 0x01, 0xFF, 0x42, 0x8E, 0x04, 0x06, 0x42, +/* 0000B220 */ 0x07, 0x04, 0x00, 0x59, 0x00, 0x04, 0x8E, 0x04, 0x14, 0x43, 0x59, 0x01, 0x43, 0x59, 0x02, 0x29, +/* 0000B230 */ 0x59, 0x03, 0x03, 0x1F, 0x04, 0x42, 0x42, 0x0E, 0x20, 0x00, 0x42, 0x5E, 0x42, 0x29, 0x01, 0x0E, +/* 0000B240 */ 0x18, 0x00, 0x42, 0x8E, 0x04, 0x03, 0x43, 0x6C, 0x42, 0x43, 0x02, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 0000B250 */ 0x43, 0x59, 0x01, 0x05, 0x59, 0x02, 0x05, 0x1F, 0x03, 0xFF, 0x42, 0x76, 0x06, 0x29, 0x03, 0x8E, +/* 0000B260 */ 0x01, 0x02, 0x42, 0x4A, 0x42, 0x07, 0x04, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x2B, 0x59, 0x02, +/* 0000B270 */ 0x07, 0x59, 0x03, 0x08, 0x1F, 0x04, 0x42, 0x42, 0x45, 0x2B, 0x42, 0x8E, 0x03, 0x02, 0x42, 0x4A, +/* 0000B280 */ 0x42, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x2B, 0x59, 0x02, 0x09, 0x59, 0x03, 0x0A, +/* 0000B290 */ 0xCF, 0x43, 0x02, 0xA1, 0x00, 0x0B, 0x43, 0xA1, 0x01, 0x0C, 0x43, 0x59, 0x04, 0x43, 0x59, 0x05, +/* 0000B2A0 */ 0x0C, 0x1F, 0x06, 0x42, 0x42, 0x45, 0x2E, 0x42, 0x8E, 0x03, 0x02, 0x42, 0x4A, 0x42, 0x07, 0x06, +/* 0000B2B0 */ 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x2B, 0x59, 0x02, 0x0D, 0x59, 0x03, 0x0A, 0xA8, 0x43, 0x59, +/* 0000B2C0 */ 0x04, 0x43, 0xA8, 0x43, 0x59, 0x05, 0x43, 0x1F, 0x06, 0x42, 0x42, 0x45, 0x2F, 0x42, 0xA8, 0x42, +/* 0000B2D0 */ 0x15, 0x03, 0x00, 0x2F, 0x42, 0x09, 0x1B, 0x00, 0x8E, 0x04, 0x03, 0x43, 0x6C, 0x42, 0x43, 0x04, +/* 0000B2E0 */ 0x07, 0x02, 0x00, 0x59, 0x00, 0x43, 0x59, 0x01, 0x2F, 0x1F, 0x02, 0x42, 0x42, 0x45, 0x2F, 0x42, +/* 0000B2F0 */ 0x09, 0x15, 0x00, 0x8E, 0x04, 0x03, 0x43, 0x6C, 0x42, 0x43, 0x05, 0x07, 0x01, 0x00, 0x59, 0x00, +/* 0000B300 */ 0x43, 0x1F, 0x01, 0x42, 0x42, 0x45, 0x2F, 0x42, 0xA8, 0x42, 0x14, 0x03, 0x00, 0x2F, 0x42, 0x09, +/* 0000B310 */ 0x12, 0x00, 0x8E, 0x04, 0x03, 0x43, 0x6C, 0x42, 0x43, 0x06, 0x07, 0x01, 0x00, 0x59, 0x00, 0x43, +/* 0000B320 */ 0x1F, 0x01, 0xFF, 0x42, 0x8E, 0x03, 0x02, 0x42, 0x4A, 0x42, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, +/* 0000B330 */ 0x59, 0x01, 0x2B, 0x59, 0x02, 0x0E, 0x59, 0x03, 0x0A, 0xCF, 0x43, 0x03, 0xA1, 0x00, 0x0F, 0x43, +/* 0000B340 */ 0xA1, 0x01, 0x10, 0x43, 0xA1, 0x02, 0x11, 0x43, 0x59, 0x04, 0x43, 0xA8, 0x43, 0x59, 0x05, 0x43, +/* 0000B350 */ 0x1F, 0x06, 0x42, 0x42, 0x45, 0x30, 0x42, 0x8E, 0x03, 0x02, 0x42, 0x4A, 0x42, 0x07, 0x06, 0x00, +/* 0000B360 */ 0x59, 0x00, 0x04, 0x59, 0x01, 0x2B, 0x59, 0x02, 0x12, 0x59, 0x03, 0x0A, 0xCF, 0x43, 0x03, 0xA1, +/* 0000B370 */ 0x00, 0x0F, 0x43, 0xA1, 0x01, 0x10, 0x43, 0xA1, 0x02, 0x11, 0x43, 0x59, 0x04, 0x43, 0xA8, 0x43, +/* 0000B380 */ 0x59, 0x05, 0x43, 0x1F, 0x06, 0x42, 0x42, 0x45, 0x31, 0x42, 0x8E, 0x03, 0x02, 0x42, 0x4A, 0x42, +/* 0000B390 */ 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x2B, 0x59, 0x02, 0x13, 0x59, 0x03, 0x0A, 0xCF, +/* 0000B3A0 */ 0x43, 0x02, 0xA1, 0x00, 0x14, 0x43, 0xA1, 0x01, 0x15, 0x43, 0x59, 0x04, 0x43, 0xA8, 0x43, 0x59, +/* 0000B3B0 */ 0x05, 0x43, 0x1F, 0x06, 0x42, 0x42, 0x45, 0x32, 0x42, 0x8E, 0x03, 0x02, 0x42, 0x4A, 0x42, 0x07, +/* 0000B3C0 */ 0x06, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x2B, 0x59, 0x02, 0x16, 0x59, 0x03, 0x0A, 0xCF, 0x43, +/* 0000B3D0 */ 0x05, 0xA1, 0x00, 0x14, 0x43, 0xA1, 0x01, 0x15, 0x43, 0xA1, 0x02, 0x0F, 0x43, 0xA1, 0x03, 0x10, +/* 0000B3E0 */ 0x43, 0xA1, 0x04, 0x11, 0x43, 0x59, 0x04, 0x43, 0xA8, 0x43, 0x59, 0x05, 0x43, 0x1F, 0x06, 0x42, +/* 0000B3F0 */ 0x42, 0x45, 0x33, 0x42, 0x8E, 0x03, 0x02, 0x42, 0x4A, 0x42, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, +/* 0000B400 */ 0x59, 0x01, 0x2B, 0x59, 0x02, 0x17, 0x59, 0x03, 0x0A, 0xCF, 0x43, 0x02, 0xA1, 0x00, 0x14, 0x43, +/* 0000B410 */ 0xA1, 0x01, 0x15, 0x43, 0x59, 0x04, 0x43, 0xA8, 0x43, 0x59, 0x05, 0x43, 0x1F, 0x06, 0x42, 0x42, +/* 0000B420 */ 0x45, 0x34, 0x42, 0x8E, 0x03, 0x02, 0x42, 0x4A, 0x42, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, 0x59, +/* 0000B430 */ 0x01, 0x2B, 0x59, 0x02, 0x18, 0x59, 0x03, 0x0A, 0xCF, 0x43, 0x02, 0xA1, 0x00, 0x14, 0x43, 0xA1, +/* 0000B440 */ 0x01, 0x15, 0x43, 0x59, 0x04, 0x43, 0xA8, 0x43, 0x59, 0x05, 0x43, 0x1F, 0x06, 0x42, 0x42, 0x45, +/* 0000B450 */ 0x35, 0x42, 0x8E, 0x03, 0x02, 0x42, 0x4A, 0x42, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, +/* 0000B460 */ 0x2B, 0x59, 0x02, 0x19, 0x59, 0x03, 0x0A, 0xCF, 0x43, 0x02, 0xA1, 0x00, 0x14, 0x43, 0xA1, 0x01, +/* 0000B470 */ 0x15, 0x43, 0x59, 0x04, 0x43, 0xA8, 0x43, 0x59, 0x05, 0x43, 0x1F, 0x06, 0x42, 0x42, 0x45, 0x36, +/* 0000B480 */ 0x42, 0x8E, 0x03, 0x02, 0x42, 0x4A, 0x42, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x2B, +/* 0000B490 */ 0x59, 0x02, 0x1A, 0x59, 0x03, 0x0A, 0xCF, 0x43, 0x02, 0xA1, 0x00, 0x14, 0x43, 0xA1, 0x01, 0x15, +/* 0000B4A0 */ 0x43, 0x59, 0x04, 0x43, 0xA8, 0x43, 0x59, 0x05, 0x43, 0x1F, 0x06, 0x42, 0x42, 0x45, 0x37, 0x42, +/* 0000B4B0 */ 0x8E, 0x03, 0x02, 0x42, 0x4A, 0x42, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x2B, 0x59, +/* 0000B4C0 */ 0x02, 0x1B, 0x59, 0x03, 0x0A, 0xCF, 0x43, 0x02, 0xA1, 0x00, 0x10, 0x43, 0xA1, 0x01, 0x11, 0x43, +/* 0000B4D0 */ 0x59, 0x04, 0x43, 0xA8, 0x43, 0x59, 0x05, 0x43, 0x1F, 0x06, 0x42, 0x42, 0x45, 0x38, 0x42, 0x0E, +/* 0000B4E0 */ 0x29, 0x00, 0x35, 0x8E, 0x03, 0x02, 0x43, 0x4A, 0x43, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, 0x59, +/* 0000B4F0 */ 0x01, 0x2B, 0x59, 0x02, 0x1C, 0x59, 0x03, 0x1D, 0xA8, 0x44, 0x59, 0x04, 0x44, 0xA8, 0x44, 0x59, +/* 0000B500 */ 0x05, 0x44, 0x1F, 0x06, 0x43, 0x43, 0x45, 0x42, 0x43, 0x09, 0x05, 0x00, 0xA8, 0x43, 0x46, 0x42, +/* 0000B510 */ 0x43, 0x45, 0x39, 0x42, 0x8E, 0x03, 0x02, 0x42, 0x4A, 0x42, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, +/* 0000B520 */ 0x59, 0x01, 0x2B, 0x59, 0x02, 0x1E, 0x59, 0x03, 0x0A, 0xCF, 0x43, 0x02, 0xA1, 0x00, 0x1F, 0x43, +/* 0000B530 */ 0xA1, 0x01, 0x0C, 0x43, 0x59, 0x04, 0x43, 0x59, 0x05, 0x0C, 0x1F, 0x06, 0x42, 0x42, 0x45, 0x3A, +/* 0000B540 */ 0x42, 0xA8, 0x42, 0x15, 0x03, 0x00, 0x39, 0x42, 0x09, 0x13, 0x00, 0x0E, 0x06, 0x00, 0x39, 0x45, +/* 0000B550 */ 0x43, 0x20, 0x09, 0x03, 0x00, 0x46, 0x43, 0x21, 0x45, 0x42, 0x43, 0x09, 0x05, 0x00, 0xA8, 0x43, +/* 0000B560 */ 0x46, 0x42, 0x43, 0x45, 0x3B, 0x42, 0x8E, 0x01, 0x03, 0x42, 0x4A, 0x42, 0x07, 0x02, 0x00, 0x59, +/* 0000B570 */ 0x00, 0x04, 0x8E, 0x04, 0x04, 0x43, 0x07, 0x03, 0x00, 0x59, 0x00, 0x04, 0xCE, 0x00, 0x00, 0x00, +/* 0000B580 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x7A, 0x30, 0x44, 0x07, 0x7A, 0x31, 0x44, +/* 0000B590 */ 0x08, 0x7A, 0x32, 0x44, 0x09, 0x7A, 0x33, 0x44, 0x0A, 0x7A, 0x34, 0x44, 0x0B, 0x7A, 0x35, 0x44, +/* 0000B5A0 */ 0x0C, 0x7A, 0x36, 0x44, 0x0D, 0x7A, 0x37, 0x44, 0x0E, 0x7A, 0x38, 0x44, 0x0F, 0x59, 0x01, 0x44, +/* 0000B5B0 */ 0x59, 0x02, 0x22, 0x1F, 0x03, 0x43, 0x43, 0x59, 0x01, 0x43, 0x1F, 0x02, 0x42, 0x42, 0x45, 0x3C, +/* 0000B5C0 */ 0x42, 0x8E, 0x03, 0x07, 0x42, 0x4A, 0x42, 0x07, 0x02, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x2A, +/* 0000B5D0 */ 0x1F, 0x02, 0x42, 0x42, 0x45, 0x2A, 0x42, 0x8E, 0x04, 0x2A, 0x42, 0x07, 0x05, 0x00, 0x59, 0x00, +/* 0000B5E0 */ 0x04, 0x59, 0x01, 0x2A, 0x59, 0x02, 0x2E, 0xCF, 0x43, 0x02, 0xA1, 0x00, 0x23, 0x43, 0xA1, 0x01, +/* 0000B5F0 */ 0x24, 0x43, 0x59, 0x03, 0x43, 0x8E, 0x04, 0x2B, 0x43, 0x59, 0x04, 0x43, 0x1F, 0x05, 0x42, 0x42, +/* 0000B600 */ 0x45, 0x3D, 0x42, 0x76, 0x2E, 0x29, 0x10, 0x76, 0x2F, 0x29, 0x11, 0x5E, 0x42, 0x3D, 0x12, 0x76, +/* 0000B610 */ 0x42, 0x29, 0x13, 0x76, 0x30, 0x29, 0x14, 0x76, 0x31, 0x29, 0x15, 0x76, 0x32, 0x29, 0x16, 0x76, +/* 0000B620 */ 0x33, 0x29, 0x17, 0x76, 0x34, 0x29, 0x18, 0x76, 0x35, 0x29, 0x19, 0x76, 0x36, 0x29, 0x1A, 0x76, +/* 0000B630 */ 0x37, 0x29, 0x1B, 0x76, 0x38, 0x29, 0x1C, 0x76, 0x39, 0x29, 0x1D, 0x76, 0x3A, 0x29, 0x1E, 0x76, +/* 0000B640 */ 0x3B, 0x29, 0x1F, 0x76, 0x3C, 0x29, 0x20, 0x45, 0x3E, 0x25, 0xE7, 0x1A, 0x00, 0x8E, 0x03, 0x0B, +/* 0000B650 */ 0x42, 0x4A, 0x42, 0x07, 0x03, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x29, 0x59, 0x02, 0x25, 0x1F, +/* 0000B660 */ 0x03, 0xFF, 0x42, 0xEB, 0x09, 0x51, 0x00, 0xE9, 0x2C, 0x06, 0x8E, 0x04, 0x22, 0x42, 0x07, 0x02, +/* 0000B670 */ 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x2C, 0x1F, 0x02, 0xFF, 0x42, 0x8E, 0x01, 0x02, 0x42, 0x4A, +/* 0000B680 */ 0x42, 0x07, 0x04, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x2B, 0x59, 0x02, 0x26, 0x59, 0x03, 0x27, +/* 0000B690 */ 0x1F, 0x04, 0x42, 0x42, 0x45, 0x3F, 0x42, 0x45, 0x42, 0x29, 0x8E, 0x01, 0x03, 0x43, 0x4A, 0x43, +/* 0000B6A0 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x3F, 0x59, 0x02, 0x22, 0x1F, 0x03, 0x43, 0x43, +/* 0000B6B0 */ 0x76, 0x43, 0x42, 0x21, 0x45, 0x3E, 0x06, 0xEB, 0x0F, 0x25, 0x00, 0x3E, 0x45, 0x42, 0x29, 0x8E, +/* 0000B6C0 */ 0x01, 0x07, 0x43, 0x4A, 0x43, 0x07, 0x03, 0x00, 0x59, 0x00, 0x04, 0x5E, 0x44, 0x29, 0x22, 0x97, +/* 0000B6D0 */ 0x44, 0x44, 0x28, 0x59, 0x01, 0x44, 0x59, 0x02, 0x29, 0x1F, 0x03, 0x43, 0x43, 0x76, 0x43, 0x42, +/* 0000B6E0 */ 0x23, 0xE7, 0x1A, 0x00, 0x8E, 0x03, 0x0B, 0x42, 0x4A, 0x42, 0x07, 0x03, 0x00, 0x59, 0x00, 0x04, +/* 0000B6F0 */ 0x59, 0x01, 0x29, 0x59, 0x02, 0x06, 0x1F, 0x03, 0xFF, 0x42, 0xEB, 0x09, 0x27, 0x00, 0xE9, 0x2D, +/* 0000B700 */ 0x06, 0x8E, 0x04, 0x22, 0x42, 0x07, 0x02, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x2D, 0x1F, 0x02, +/* 0000B710 */ 0xFF, 0x42, 0x8E, 0x04, 0x03, 0x43, 0x6C, 0x42, 0x43, 0x24, 0x07, 0x01, 0x00, 0x59, 0x00, 0x43, +/* 0000B720 */ 0x1F, 0x01, 0xFF, 0x42, 0xEB, 0x8E, 0x01, 0x04, 0x42, 0x4A, 0x42, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 0000B730 */ 0x04, 0x5E, 0x43, 0x29, 0x25, 0x59, 0x01, 0x43, 0x1F, 0x02, 0x42, 0x42, 0x76, 0x42, 0x29, 0x26, +/* 0000B740 */ 0x45, 0x42, 0x29, 0x8E, 0x04, 0x06, 0x43, 0x07, 0x03, 0x00, 0x59, 0x00, 0x04, 0x8E, 0x04, 0x1E, +/* 0000B750 */ 0x44, 0x59, 0x01, 0x44, 0x5E, 0x44, 0x29, 0x27, 0x59, 0x02, 0x44, 0x1F, 0x03, 0x43, 0x43, 0x76, +/* 0000B760 */ 0x43, 0x42, 0x28, 0x5E, 0x42, 0x29, 0x29, 0xA8, 0x43, 0x15, 0x03, 0x00, 0x42, 0x43, 0x09, 0x0C, +/* 0000B770 */ 0x00, 0x5E, 0x42, 0x29, 0x2A, 0x41, 0x42, 0x42, 0x20, 0x76, 0x42, 0x29, 0x2B, 0x76, 0x06, 0x29, +/* 0000B780 */ 0x2C, 0xA8, 0x00, 0x24, 0x00, 0x01, 0x2C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x09, 0x00, 0x00, +/* 0000B790 */ 0x00, 0x00, 0x00, 0x00, 0x76, 0x02, 0x00, 0x00, 0x6D, 0x02, 0x00, 0x00, 0x77, 0x02, 0x00, 0x00, +/* 0000B7A0 */ 0x71, 0x02, 0x00, 0x00, 0x6C, 0x02, 0x00, 0x00, 0x6E, 0x02, 0x00, 0x00, 0x70, 0x02, 0x00, 0x00, +/* 0000B7B0 */ 0x73, 0x02, 0x00, 0x00, 0x75, 0x02, 0x00, 0x00, 0xFE, 0xAA, 0x02, 0xFE, 0x08, 0x02, 0xFE, 0xAB, +/* 0000B7C0 */ 0x02, 0xFE, 0x08, 0x02, 0xFE, 0xFD, 0x01, 0xFE, 0xFE, 0x01, 0xFE, 0xAD, 0x02, 0xFE, 0x76, 0x02, +/* 0000B7D0 */ 0xFE, 0x6D, 0x02, 0xFE, 0x77, 0x02, 0xFE, 0x71, 0x02, 0xFE, 0x6C, 0x02, 0xFE, 0x6E, 0x02, 0xFE, +/* 0000B7E0 */ 0x70, 0x02, 0xFE, 0x73, 0x02, 0xFE, 0x75, 0x02, 0xFE, 0x5F, 0x02, 0xFE, 0x65, 0x02, 0xFE, 0x0D, +/* 0000B7F0 */ 0x02, 0xFE, 0x09, 0x02, 0xFE, 0x67, 0x02, 0xFE, 0x5A, 0x02, 0xFE, 0x6A, 0x02, 0xFE, 0x61, 0x02, +/* 0000B800 */ 0xFE, 0x59, 0x02, 0xFE, 0x5C, 0x02, 0xFE, 0x60, 0x02, 0xFE, 0x63, 0x02, 0xFE, 0x66, 0x02, 0xFE, +/* 0000B810 */ 0x5D, 0x02, 0xFE, 0x5B, 0x02, 0xFE, 0x69, 0x02, 0xFE, 0x3E, 0x02, 0xFE, 0x3E, 0x02, 0xFE, 0x62, +/* 0000B820 */ 0x02, 0xFE, 0x3E, 0x02, 0xFE, 0xAD, 0x02, 0xFE, 0x68, 0x02, 0xFE, 0x58, 0x02, 0xFE, 0x3D, 0x02, +/* 0000B830 */ 0xFE, 0x3D, 0x02, 0xFE, 0x5C, 0x02, 0xFE, 0x69, 0x02, 0xFE, 0x5D, 0x02, 0xFE, 0x5E, 0x02, 0xFF, +/* 0000B840 */ 0x7D, 0x64, 0x02, 0x00, 0x3F, 0x02, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3D, 0x00, 0x12, 0x00, 0x3F, +/* 0000B850 */ 0x00, 0x27, 0x00, 0x9F, 0x00, 0x18, 0x00, 0x71, 0x00, 0x04, 0x00, 0x67, 0x00, 0x1C, 0x00, 0x46, +/* 0000B860 */ 0x00, 0x2D, 0x00, 0x71, 0x00, 0x26, 0x00, 0x60, 0x00, 0x0A, 0x00, 0x32, 0x00, 0x1B, 0x00, 0x6C, +/* 0000B870 */ 0x00, 0x15, 0x00, 0x4D, 0x00, 0x0A, 0x00, 0x32, 0x00, 0x12, 0x00, 0x6C, 0x00, 0x33, 0x00, 0x6F, +/* 0000B880 */ 0x00, 0x33, 0x00, 0x67, 0x00, 0x2F, 0x00, 0x64, 0x00, 0x3B, 0x00, 0x81, 0x00, 0x2F, 0x00, 0x62, +/* 0000B890 */ 0x00, 0x2F, 0x00, 0x64, 0x00, 0x2F, 0x00, 0x68, 0x00, 0x2F, 0x00, 0x68, 0x00, 0x2F, 0x00, 0x70, +/* 0000B8A0 */ 0x00, 0x35, 0x00, 0x6F, 0x00, 0x2D, 0x00, 0x77, 0x00, 0x25, 0x00, 0x71, 0x00, 0x5B, 0x00, 0xD0, +/* 0000B8B0 */ 0x01, 0x16, 0x00, 0x41, 0x00, 0x2C, 0x00, 0x9A, 0x00, 0x04, 0x00, 0x34, 0x00, 0x04, 0x00, 0x36, +/* 0000B8C0 */ 0x00, 0x08, 0x00, 0x68, 0x00, 0x04, 0x00, 0x34, 0x00, 0x04, 0x00, 0x2C, 0x00, 0x04, 0x00, 0x2E, +/* 0000B8D0 */ 0x00, 0x04, 0x00, 0x30, 0x00, 0x04, 0x00, 0x2C, 0x00, 0x04, 0x00, 0x2E, 0x00, 0x04, 0x00, 0x32, +/* 0000B8E0 */ 0x00, 0x04, 0x00, 0x32, 0x00, 0x04, 0x00, 0x3F, 0x00, 0x04, 0x00, 0x32, 0x00, 0x04, 0x00, 0x40, +/* 0000B8F0 */ 0x00, 0x04, 0x00, 0x3F, 0x00, 0x04, 0x00, 0x0F, 0x03, 0x06, 0x00, 0x93, 0x00, 0x1C, 0x00, 0x3F, +/* 0000B900 */ 0x00, 0x01, 0x00, 0x4A, 0x00, 0x11, 0x00, 0xEF, 0x00, 0x1C, 0x00, 0x54, 0x00, 0x1D, 0x00, 0x6A, +/* 0000B910 */ 0x00, 0x04, 0x00, 0x37, 0x00, 0x04, 0x00, 0x5A, 0x00, 0x28, 0x00, 0xDE, 0x00, 0x1C, 0x00, 0x3E, +/* 0000B920 */ 0x00, 0x01, 0x00, 0x4A, 0x00, 0x11, 0x00, 0x77, 0x01, 0x13, 0x00, 0x77, 0x00, 0x1B, 0x00, 0x66, +/* 0000B930 */ 0x00, 0x23, 0x00, 0x82, 0x00, 0x0E, 0x00, 0x3F, 0x00, 0x0C, 0x00, 0x6D, 0x00, 0x06, 0x00, 0x3F, +/* 0000B940 */ 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x23, 0x10, 0x03, 0x00, 0xFE, 0x0C, 0x0D, 0x0C, 0xA3, 0x41, +/* 0000B950 */ 0xC1, 0x00, 0xFE, 0xDF, 0x04, 0xB9, 0xFF, 0xE9, 0x56, 0x02, 0x00, 0xFF, 0xE9, 0x56, 0x02, 0x00, +/* 0000B960 */ 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFF, 0xE9, 0x56, 0x02, 0x00, 0xFE, 0x2D, 0x0D, 0xFE, 0x2D, +/* 0000B970 */ 0x0D, 0x07, 0x12, 0x16, 0x06, 0xC8, 0xBB, 0x04, 0x07, 0x17, 0x17, 0x17, 0x17, 0x02, 0x15, 0x05, +/* 0000B980 */ 0xFE, 0xFA, 0x04, 0x08, 0x06, 0xFE, 0x32, 0x04, 0x07, 0x05, 0xFE, 0xFB, 0x04, 0x01, 0x00, 0x05, +/* 0000B990 */ 0xFE, 0xFC, 0x04, 0x05, 0xFE, 0xEF, 0x04, 0x05, 0xFE, 0xFD, 0x04, 0x06, 0xFE, 0xF8, 0x03, 0x06, +/* 0000B9A0 */ 0xFE, 0x36, 0x04, 0x06, 0xFE, 0x37, 0x04, 0x06, 0xFE, 0x38, 0x04, 0x06, 0xFE, 0x39, 0x04, 0x06, +/* 0000B9B0 */ 0xFE, 0x3A, 0x04, 0x05, 0xFE, 0xFE, 0x04, 0xFE, 0x9A, 0x02, 0xA8, 0x14, 0x5E, 0x16, 0x13, 0x00, +/* 0000B9C0 */ 0xA8, 0x17, 0x15, 0x03, 0x00, 0x16, 0x17, 0x09, 0x20, 0x00, 0x8E, 0x01, 0x05, 0x16, 0x4A, 0x16, +/* 0000B9D0 */ 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, 0x59, 0x01, 0x12, 0x5E, 0x17, 0x13, 0x01, 0x59, 0x02, 0x17, +/* 0000B9E0 */ 0x59, 0x03, 0x02, 0x1F, 0x04, 0x16, 0x16, 0x45, 0x12, 0x16, 0x5E, 0x16, 0x13, 0x02, 0xA8, 0x17, +/* 0000B9F0 */ 0x15, 0x03, 0x00, 0x16, 0x17, 0x09, 0x00, 0x00, 0x5E, 0x16, 0x13, 0x03, 0x14, 0x03, 0x00, 0x16, +/* 0000BA00 */ 0x04, 0x09, 0x70, 0x00, 0x8E, 0x04, 0x03, 0x17, 0x6C, 0x16, 0x17, 0x04, 0x07, 0x03, 0x00, 0x59, +/* 0000BA10 */ 0x00, 0x17, 0x59, 0x01, 0x12, 0xE2, 0x18, 0x00, 0x59, 0x02, 0x18, 0x1F, 0x03, 0x16, 0x16, 0x45, +/* 0000BA20 */ 0x14, 0x16, 0x14, 0x03, 0x00, 0x14, 0x05, 0x09, 0x22, 0x00, 0x8E, 0x04, 0x0F, 0x16, 0x07, 0x02, +/* 0000BA30 */ 0x00, 0x59, 0x00, 0x03, 0x8E, 0x04, 0x0E, 0x17, 0x07, 0x02, 0x00, 0x59, 0x01, 0x06, 0xC4, 0x02, +/* 0000BA40 */ 0x17, 0x17, 0x59, 0x01, 0x17, 0x1F, 0x02, 0xFF, 0x16, 0x09, 0x25, 0x00, 0x8E, 0x04, 0x06, 0x16, +/* 0000BA50 */ 0x07, 0x05, 0x00, 0x59, 0x00, 0x03, 0x8E, 0x04, 0x1D, 0x17, 0x59, 0x01, 0x17, 0x59, 0x02, 0x12, +/* 0000BA60 */ 0x97, 0x17, 0x14, 0x07, 0x59, 0x03, 0x17, 0x59, 0x04, 0x08, 0x1F, 0x05, 0x16, 0x16, 0x45, 0x12, +/* 0000BA70 */ 0x16, 0x09, 0x79, 0x00, 0x5E, 0x16, 0x13, 0x05, 0x14, 0x03, 0x00, 0x16, 0x09, 0x09, 0x6D, 0x00, +/* 0000BA80 */ 0x8E, 0x04, 0x03, 0x17, 0x6C, 0x16, 0x17, 0x06, 0x07, 0x03, 0x00, 0x59, 0x00, 0x17, 0x59, 0x01, +/* 0000BA90 */ 0x12, 0xE2, 0x18, 0x01, 0x59, 0x02, 0x18, 0x1F, 0x03, 0x16, 0x16, 0x45, 0x14, 0x16, 0x14, 0x03, +/* 0000BAA0 */ 0x00, 0x14, 0x05, 0x09, 0x22, 0x00, 0x8E, 0x04, 0x0F, 0x16, 0x07, 0x02, 0x00, 0x59, 0x00, 0x03, +/* 0000BAB0 */ 0x8E, 0x04, 0x0E, 0x17, 0x07, 0x02, 0x00, 0x59, 0x01, 0x06, 0xC4, 0x02, 0x17, 0x17, 0x59, 0x01, +/* 0000BAC0 */ 0x17, 0x1F, 0x02, 0xFF, 0x16, 0x09, 0x25, 0x00, 0x8E, 0x04, 0x06, 0x16, 0x07, 0x05, 0x00, 0x59, +/* 0000BAD0 */ 0x00, 0x03, 0x8E, 0x04, 0x1D, 0x17, 0x59, 0x01, 0x17, 0x59, 0x02, 0x12, 0x97, 0x17, 0x14, 0x07, +/* 0000BAE0 */ 0x59, 0x03, 0x17, 0x59, 0x04, 0x0A, 0x1F, 0x05, 0x16, 0x16, 0x45, 0x12, 0x16, 0x5E, 0x16, 0x13, +/* 0000BAF0 */ 0x07, 0xA8, 0x17, 0x15, 0x03, 0x00, 0x16, 0x17, 0x09, 0x3B, 0x00, 0x5E, 0x16, 0x13, 0x08, 0x15, +/* 0000BB00 */ 0x03, 0x00, 0x16, 0x04, 0x09, 0x2F, 0x00, 0x5E, 0x16, 0x13, 0x09, 0x15, 0x03, 0x00, 0x16, 0x0B, +/* 0000BB10 */ 0x09, 0x23, 0x00, 0x8E, 0x01, 0x05, 0x16, 0x4A, 0x16, 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, 0x59, +/* 0000BB20 */ 0x01, 0x12, 0x5E, 0x17, 0x13, 0x0A, 0x59, 0x02, 0x17, 0x59, 0x03, 0x0C, 0x1F, 0x04, 0x16, 0x16, +/* 0000BB30 */ 0x45, 0x12, 0x16, 0x09, 0x2E, 0x00, 0x5E, 0x16, 0x13, 0x0B, 0xA8, 0x17, 0x15, 0x03, 0x00, 0x16, +/* 0000BB40 */ 0x17, 0x09, 0x20, 0x00, 0x8E, 0x01, 0x06, 0x16, 0x4A, 0x16, 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, +/* 0000BB50 */ 0x59, 0x01, 0x12, 0x5E, 0x17, 0x13, 0x0C, 0x59, 0x02, 0x17, 0x59, 0x03, 0x0C, 0x1F, 0x04, 0x16, +/* 0000BB60 */ 0x16, 0x45, 0x12, 0x16, 0x5E, 0x16, 0x13, 0x0D, 0xA8, 0x17, 0x15, 0x03, 0x00, 0x16, 0x17, 0x09, +/* 0000BB70 */ 0x20, 0x00, 0x8E, 0x01, 0x06, 0x16, 0x4A, 0x16, 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, 0x59, 0x01, +/* 0000BB80 */ 0x12, 0x5E, 0x17, 0x13, 0x0E, 0x59, 0x02, 0x17, 0x59, 0x03, 0x0D, 0x1F, 0x04, 0x16, 0x16, 0x45, +/* 0000BB90 */ 0x12, 0x16, 0x5E, 0x16, 0x13, 0x0F, 0xA8, 0x17, 0x15, 0x03, 0x00, 0x16, 0x17, 0x09, 0x20, 0x00, +/* 0000BBA0 */ 0x8E, 0x01, 0x06, 0x16, 0x4A, 0x16, 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, 0x59, 0x01, 0x12, 0x5E, +/* 0000BBB0 */ 0x17, 0x13, 0x10, 0x59, 0x02, 0x17, 0x59, 0x03, 0x0E, 0x1F, 0x04, 0x16, 0x16, 0x45, 0x12, 0x16, +/* 0000BBC0 */ 0x5E, 0x16, 0x13, 0x11, 0xA8, 0x17, 0x15, 0x03, 0x00, 0x16, 0x17, 0x09, 0x20, 0x00, 0x8E, 0x01, +/* 0000BBD0 */ 0x06, 0x16, 0x4A, 0x16, 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, 0x59, 0x01, 0x12, 0x5E, 0x17, 0x13, +/* 0000BBE0 */ 0x12, 0x59, 0x02, 0x17, 0x59, 0x03, 0x0F, 0x1F, 0x04, 0x16, 0x16, 0x45, 0x12, 0x16, 0x5E, 0x16, +/* 0000BBF0 */ 0x13, 0x13, 0xA8, 0x17, 0x15, 0x03, 0x00, 0x16, 0x17, 0x09, 0x20, 0x00, 0x8E, 0x01, 0x06, 0x16, +/* 0000BC00 */ 0x4A, 0x16, 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, 0x59, 0x01, 0x12, 0x5E, 0x17, 0x13, 0x14, 0x59, +/* 0000BC10 */ 0x02, 0x17, 0x59, 0x03, 0x10, 0x1F, 0x04, 0x16, 0x16, 0x45, 0x12, 0x16, 0x5E, 0x16, 0x13, 0x15, +/* 0000BC20 */ 0xA8, 0x17, 0x15, 0x03, 0x00, 0x16, 0x17, 0x09, 0x20, 0x00, 0x8E, 0x01, 0x05, 0x16, 0x4A, 0x16, +/* 0000BC30 */ 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, 0x59, 0x01, 0x12, 0x5E, 0x17, 0x13, 0x16, 0x59, 0x02, 0x17, +/* 0000BC40 */ 0x59, 0x03, 0x11, 0x1F, 0x04, 0x16, 0x16, 0x45, 0x12, 0x16, 0x45, 0x00, 0x12, 0x09, 0x02, 0x00, +/* 0000BC50 */ 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x67, 0x02, 0xFE, 0x67, 0x02, 0xFE, 0x5A, 0x02, 0xFE, 0x6A, 0x02, +/* 0000BC60 */ 0xFE, 0xC0, 0x02, 0xFE, 0x6A, 0x02, 0xFE, 0xC0, 0x02, 0xFE, 0x61, 0x02, 0xFE, 0x61, 0x02, 0xFE, +/* 0000BC70 */ 0x61, 0x02, 0xFE, 0x61, 0x02, 0xFE, 0x61, 0x02, 0xFE, 0x61, 0x02, 0xFE, 0x59, 0x02, 0xFE, 0x59, +/* 0000BC80 */ 0x02, 0xFE, 0x5C, 0x02, 0xFE, 0x5C, 0x02, 0xFE, 0x60, 0x02, 0xFE, 0x60, 0x02, 0xFE, 0x63, 0x02, +/* 0000BC90 */ 0xFE, 0x63, 0x02, 0xFE, 0x66, 0x02, 0xFE, 0x66, 0x02, 0x1C, 0xFE, 0xFF, 0x04, 0x00, 0x1C, 0xFE, +/* 0000BCA0 */ 0xFF, 0x04, 0x00, 0xFF, 0x38, 0x57, 0x02, 0x00, 0x1D, 0x02, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x42, +/* 0000BCB0 */ 0x00, 0x20, 0x00, 0x88, 0x00, 0x0E, 0x00, 0x8E, 0x01, 0x0C, 0x00, 0x3F, 0x00, 0x1E, 0x00, 0x6B, +/* 0000BCC0 */ 0x00, 0x08, 0x00, 0x2E, 0x00, 0x22, 0x00, 0x91, 0x00, 0x28, 0x00, 0x98, 0x00, 0x0C, 0x00, 0x3C, +/* 0000BCD0 */ 0x00, 0x1E, 0x00, 0x6B, 0x00, 0x08, 0x00, 0x2E, 0x00, 0x22, 0x00, 0x91, 0x00, 0x25, 0x00, 0x2F, +/* 0000BCE0 */ 0x01, 0x26, 0x00, 0x90, 0x00, 0x23, 0x00, 0x76, 0x00, 0x0E, 0x00, 0x40, 0x00, 0x20, 0x00, 0x8B, +/* 0000BCF0 */ 0x00, 0x0E, 0x00, 0x3E, 0x00, 0x20, 0x00, 0x87, 0x00, 0x0E, 0x00, 0x3F, 0x00, 0x20, 0x00, 0x89, +/* 0000BD00 */ 0x00, 0x0E, 0x00, 0x41, 0x00, 0x20, 0x00, 0x8D, 0x00, 0x0E, 0x00, 0x41, 0x00, 0x20, 0x00, 0x8D, +/* 0000BD10 */ 0x00, 0x0E, 0x00, 0x47, 0x00, 0x20, 0x00, 0x8C, 0x00, 0x08, 0x00, 0x22, 0x00, 0x00, 0x7F, 0x5C, +/* 0000BD20 */ 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0xF8, 0x0C, 0x0C, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0xDE, +/* 0000BD30 */ 0x04, 0xB8, 0xFF, 0x81, 0x51, 0x02, 0x00, 0xFF, 0x81, 0x51, 0x02, 0x00, 0x01, 0xFE, 0x00, 0x90, +/* 0000BD40 */ 0x04, 0x04, 0xFF, 0x81, 0x51, 0x02, 0x00, 0xFE, 0xF8, 0x04, 0xFE, 0xF8, 0x04, 0x09, 0x11, 0x16, +/* 0000BD50 */ 0x07, 0x43, 0x40, 0x04, 0x06, 0x01, 0x01, 0x01, 0x01, 0x15, 0x05, 0xFE, 0xEA, 0x04, 0x05, 0xFE, +/* 0000BD60 */ 0xF5, 0x04, 0x08, 0x07, 0x05, 0xFE, 0xF6, 0x04, 0x05, 0xFE, 0xED, 0x04, 0x05, 0xFE, 0xEE, 0x04, +/* 0000BD70 */ 0x06, 0xFE, 0x32, 0x04, 0x01, 0x00, 0x06, 0xFE, 0xF0, 0x04, 0x01, 0x01, 0x05, 0xFE, 0xF7, 0x04, +/* 0000BD80 */ 0x01, 0x02, 0x05, 0xFE, 0xF8, 0x04, 0x05, 0xFE, 0xF9, 0x04, 0xEA, 0x8E, 0x04, 0x03, 0x17, 0x6C, +/* 0000BD90 */ 0x16, 0x17, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x17, 0x59, 0x01, 0x11, 0x8E, 0x04, 0x0A, 0x18, +/* 0000BDA0 */ 0x07, 0x02, 0x00, 0x59, 0x00, 0x04, 0xFC, 0x19, 0x02, 0x13, 0x03, 0x59, 0x01, 0x19, 0x1F, 0x02, +/* 0000BDB0 */ 0x18, 0x18, 0x59, 0x02, 0x18, 0x1F, 0x03, 0x16, 0x16, 0x45, 0x14, 0x16, 0x14, 0x03, 0x00, 0x14, +/* 0000BDC0 */ 0x05, 0x09, 0x34, 0x00, 0x8E, 0x04, 0x0F, 0x16, 0x07, 0x02, 0x00, 0x59, 0x00, 0x04, 0x8E, 0x04, +/* 0000BDD0 */ 0x0E, 0x17, 0x07, 0x02, 0x00, 0xFD, 0x18, 0x06, 0x11, 0x06, 0xFF, 0x18, 0x07, 0x02, 0x02, 0xFF, +/* 0000BDE0 */ 0x18, 0x13, 0x08, 0x04, 0x59, 0x01, 0x18, 0xC4, 0x02, 0x17, 0x17, 0x59, 0x01, 0x17, 0x1F, 0x02, +/* 0000BDF0 */ 0xFF, 0x16, 0x45, 0x00, 0x11, 0x09, 0x7B, 0x00, 0x14, 0x03, 0x00, 0x12, 0x09, 0x09, 0x31, 0x00, +/* 0000BE00 */ 0x8E, 0x04, 0x06, 0x16, 0x07, 0x05, 0x00, 0x59, 0x00, 0x04, 0x8E, 0x04, 0x1D, 0x17, 0x59, 0x01, +/* 0000BE10 */ 0x17, 0x59, 0x02, 0x11, 0x97, 0x17, 0x14, 0x0A, 0x59, 0x03, 0x17, 0x97, 0x17, 0x14, 0x0C, 0xFC, +/* 0000BE20 */ 0x17, 0x0B, 0x17, 0x0D, 0x59, 0x04, 0x17, 0x1F, 0x05, 0x00, 0x16, 0x09, 0x45, 0x00, 0x09, 0x3A, +/* 0000BE30 */ 0x00, 0x97, 0x16, 0x14, 0x0E, 0x15, 0x03, 0x00, 0x16, 0x0F, 0x09, 0x2E, 0x00, 0x8E, 0x04, 0x06, +/* 0000BE40 */ 0x16, 0x07, 0x05, 0x00, 0x59, 0x00, 0x04, 0x8E, 0x04, 0x1D, 0x17, 0x59, 0x01, 0x17, 0x59, 0x02, +/* 0000BE50 */ 0x11, 0x97, 0x17, 0x14, 0x0A, 0x59, 0x03, 0x17, 0x97, 0x17, 0x14, 0x0C, 0xFC, 0x17, 0x0B, 0x17, +/* 0000BE60 */ 0x10, 0x59, 0x04, 0x17, 0x1F, 0x05, 0x00, 0x16, 0x09, 0x08, 0x00, 0x45, 0x00, 0x11, 0x09, 0x02, +/* 0000BE70 */ 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xC0, 0x02, 0xFF, 0xA8, 0x52, 0x02, 0x00, 0x0A, 0x00, 0x00, +/* 0000BE80 */ 0x00, 0x00, 0x31, 0x00, 0x91, 0x00, 0x08, 0x00, 0x2A, 0x00, 0x2E, 0x00, 0x00, 0x01, 0x06, 0x00, +/* 0000BE90 */ 0x83, 0x00, 0x08, 0x00, 0x33, 0x00, 0x31, 0x00, 0x81, 0x00, 0x0C, 0x00, 0x32, 0x00, 0x2E, 0x00, +/* 0000BEA0 */ 0x8A, 0x00, 0x08, 0x00, 0x22, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, +/* 0000BEB0 */ 0xE7, 0x0C, 0x0C, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0xDD, 0x04, 0xB7, 0xFF, 0x53, 0x4C, 0x02, 0x00, +/* 0000BEC0 */ 0xFF, 0x53, 0x4C, 0x02, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x04, 0x04, 0xFF, 0x53, 0x4C, 0x02, 0x00, +/* 0000BED0 */ 0xFE, 0x20, 0x05, 0xFE, 0x20, 0x05, 0x09, 0x14, 0x19, 0x07, 0x50, 0x4C, 0x04, 0x06, 0x01, 0x01, +/* 0000BEE0 */ 0x01, 0x01, 0x18, 0x05, 0xFE, 0xEA, 0x04, 0x05, 0xFE, 0xEB, 0x04, 0x08, 0x07, 0x05, 0xFE, 0xEC, +/* 0000BEF0 */ 0x04, 0x05, 0xFE, 0xED, 0x04, 0x05, 0xFE, 0xEE, 0x04, 0x01, 0x02, 0x05, 0xFE, 0xEF, 0x04, 0x06, +/* 0000BF00 */ 0xFE, 0x31, 0x04, 0x01, 0x00, 0x06, 0xFE, 0xF0, 0x04, 0x01, 0x01, 0x06, 0xFE, 0xF1, 0x04, 0x06, +/* 0000BF10 */ 0xFE, 0xF2, 0x04, 0x06, 0xFE, 0x30, 0x04, 0x05, 0xFE, 0xF3, 0x04, 0x05, 0xFE, 0xF4, 0x04, 0xFE, +/* 0000BF20 */ 0x19, 0x01, 0x8E, 0x04, 0x03, 0x1A, 0x6C, 0x19, 0x1A, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x1A, +/* 0000BF30 */ 0x59, 0x01, 0x14, 0x8E, 0x04, 0x0A, 0x1B, 0x07, 0x02, 0x00, 0x59, 0x00, 0x04, 0xFC, 0x1C, 0x02, +/* 0000BF40 */ 0x16, 0x03, 0x59, 0x01, 0x1C, 0x1F, 0x02, 0x1B, 0x1B, 0x59, 0x02, 0x1B, 0x1F, 0x03, 0x19, 0x19, +/* 0000BF50 */ 0x45, 0x17, 0x19, 0x14, 0x03, 0x00, 0x17, 0x05, 0x09, 0x34, 0x00, 0x8E, 0x04, 0x0F, 0x19, 0x07, +/* 0000BF60 */ 0x02, 0x00, 0x59, 0x00, 0x04, 0x8E, 0x04, 0x0E, 0x1A, 0x07, 0x02, 0x00, 0xFD, 0x1B, 0x06, 0x14, +/* 0000BF70 */ 0x06, 0xFF, 0x1B, 0x07, 0x02, 0x02, 0xFF, 0x1B, 0x16, 0x08, 0x04, 0x59, 0x01, 0x1B, 0xC4, 0x02, +/* 0000BF80 */ 0x1A, 0x1A, 0x59, 0x01, 0x1A, 0x1F, 0x02, 0xFF, 0x19, 0x45, 0x00, 0x14, 0x09, 0xAA, 0x00, 0x97, +/* 0000BF90 */ 0x19, 0x17, 0x09, 0x15, 0x03, 0x00, 0x19, 0x0A, 0x09, 0x44, 0x00, 0x14, 0x03, 0x00, 0x15, 0x0B, +/* 0000BFA0 */ 0x09, 0x3C, 0x00, 0x8E, 0x04, 0x06, 0x19, 0x07, 0x05, 0x00, 0x59, 0x00, 0x04, 0x8E, 0x04, 0x1D, +/* 0000BFB0 */ 0x1A, 0x59, 0x01, 0x1A, 0x59, 0x02, 0x14, 0x97, 0x1A, 0x17, 0x0C, 0x59, 0x03, 0x1A, 0x97, 0x1A, +/* 0000BFC0 */ 0x17, 0x0E, 0x2D, 0x1A, 0x0D, 0x1A, 0x2D, 0x1A, 0x1A, 0x0F, 0x2D, 0x1A, 0x1A, 0x0A, 0x2D, 0x1A, +/* 0000BFD0 */ 0x1A, 0x10, 0x59, 0x04, 0x1A, 0x1F, 0x05, 0x00, 0x19, 0x09, 0x5D, 0x00, 0x09, 0x52, 0x00, 0x15, +/* 0000BFE0 */ 0x03, 0x00, 0x15, 0x0B, 0x09, 0x4A, 0x00, 0x8E, 0x04, 0x06, 0x19, 0x07, 0x05, 0x00, 0x59, 0x00, +/* 0000BFF0 */ 0x04, 0x8E, 0x04, 0x1D, 0x1A, 0x59, 0x01, 0x1A, 0x59, 0x02, 0x14, 0x97, 0x1A, 0x17, 0x0C, 0x59, +/* 0000C000 */ 0x03, 0x1A, 0x97, 0x1A, 0x17, 0x0E, 0x2D, 0x1A, 0x0D, 0x1A, 0x2D, 0x1A, 0x1A, 0x0F, 0x14, 0x03, +/* 0000C010 */ 0x00, 0x15, 0x11, 0x09, 0x06, 0x00, 0x45, 0x1B, 0x12, 0x09, 0x03, 0x00, 0x46, 0x1B, 0x13, 0x2D, +/* 0000C020 */ 0x1A, 0x1A, 0x1B, 0x2D, 0x1A, 0x1A, 0x10, 0x59, 0x04, 0x1A, 0x1F, 0x05, 0x00, 0x19, 0x09, 0x08, +/* 0000C030 */ 0x00, 0x45, 0x00, 0x14, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xC0, 0x02, 0xFF, 0x29, +/* 0000C040 */ 0x4D, 0x02, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x31, 0x00, 0x0F, 0x01, 0x08, 0x00, 0x2A, 0x00, +/* 0000C050 */ 0x2E, 0x00, 0xF5, 0x00, 0x06, 0x00, 0x39, 0x00, 0x14, 0x00, 0x47, 0x00, 0x3C, 0x00, 0x85, 0x00, +/* 0000C060 */ 0x08, 0x00, 0x30, 0x00, 0x4A, 0x00, 0xC4, 0x00, 0x08, 0x00, 0x22, 0x00, 0x00, 0x7F, 0x4C, 0x00, +/* 0000C070 */ 0x01, 0x00, 0x10, 0x03, 0x00, 0xFE, 0xDE, 0x0C, 0x0C, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0xDC, 0x04, +/* 0000C080 */ 0xB6, 0xFF, 0xEC, 0x4A, 0x02, 0x00, 0xFF, 0xEC, 0x4A, 0x02, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x02, +/* 0000C090 */ 0x02, 0xFF, 0xEC, 0x4A, 0x02, 0x00, 0xE9, 0xE9, 0x03, 0x05, 0x07, 0x0E, 0x0C, 0x04, 0x01, 0x06, +/* 0000C0A0 */ 0x06, 0xFE, 0xD6, 0x03, 0x06, 0xFE, 0x47, 0x03, 0x05, 0xFE, 0xCA, 0x04, 0x2A, 0x2A, 0x07, 0x05, +/* 0000C0B0 */ 0x14, 0x03, 0x00, 0x07, 0x02, 0x09, 0x06, 0x00, 0x45, 0x00, 0x03, 0x09, 0x17, 0x00, 0x8E, 0x02, +/* 0000C0C0 */ 0x02, 0x07, 0x97, 0x07, 0x07, 0x05, 0x45, 0x00, 0x07, 0x0F, 0x03, 0x00, 0x07, 0x46, 0x00, 0x04, +/* 0000C0D0 */ 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFF, 0x27, 0x4B, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, +/* 0000C0E0 */ 0x00, 0x0B, 0x00, 0x3B, 0x00, 0x06, 0x00, 0x2E, 0x00, 0x17, 0x00, 0x44, 0x00, 0x00, 0x7E, 0x5D, +/* 0000C0F0 */ 0x00, 0xC1, 0x03, 0x1A, 0x0B, 0x00, 0xFE, 0x9C, 0x0C, 0x0C, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0xDB, +/* 0000C100 */ 0x04, 0xB4, 0xFF, 0x99, 0x40, 0x02, 0x00, 0xFF, 0x99, 0x40, 0x02, 0x00, 0x01, 0xFE, 0x00, 0x90, +/* 0000C110 */ 0x02, 0x02, 0xFF, 0x99, 0x40, 0x02, 0x00, 0xFE, 0x70, 0x08, 0xFE, 0x70, 0x08, 0x03, 0xFE, 0xE0, +/* 0000C120 */ 0x04, 0xFE, 0xE0, 0x01, 0xFE, 0xCF, 0x03, 0x07, 0x19, 0x1D, 0x05, 0xA6, 0xA5, 0x04, 0x06, 0x12, +/* 0000C130 */ 0x12, 0x12, 0x12, 0x1A, 0x1B, 0x1C, 0x07, 0x01, 0x00, 0x06, 0xFE, 0x2F, 0x04, 0x06, 0xFE, 0x30, +/* 0000C140 */ 0x04, 0x01, 0x01, 0x05, 0xFE, 0xE1, 0x04, 0x06, 0xFE, 0x31, 0x04, 0x05, 0xFE, 0xE2, 0x04, 0x06, +/* 0000C150 */ 0xFE, 0x32, 0x04, 0x05, 0xFE, 0xE3, 0x04, 0x06, 0xFE, 0xF8, 0x03, 0x05, 0xFE, 0xE4, 0x04, 0x05, +/* 0000C160 */ 0xFE, 0xE5, 0x04, 0x05, 0xFE, 0xE6, 0x04, 0x05, 0xFE, 0xE7, 0x04, 0x06, 0xFE, 0x37, 0x04, 0x05, +/* 0000C170 */ 0xFE, 0xE8, 0x04, 0x05, 0xFE, 0xE9, 0x04, 0x06, 0xFE, 0x38, 0x04, 0x06, 0xFE, 0x39, 0x04, 0x06, +/* 0000C180 */ 0xFE, 0x3A, 0x04, 0x08, 0x06, 0xFE, 0x72, 0x04, 0xFE, 0x39, 0x02, 0x96, 0x03, 0x19, 0x4E, 0x1D, +/* 0000C190 */ 0x96, 0x04, 0x1D, 0xCF, 0x1D, 0x00, 0x96, 0x02, 0x1D, 0x92, 0x02, 0x1D, 0x76, 0x02, 0x1D, 0x00, +/* 0000C1A0 */ 0x96, 0x04, 0x03, 0x92, 0x03, 0x1D, 0x5E, 0x1D, 0x1D, 0x01, 0x0E, 0x55, 0x00, 0x1D, 0x92, 0x03, +/* 0000C1B0 */ 0x1D, 0x5E, 0x1D, 0x1D, 0x02, 0x14, 0x0F, 0x00, 0x1D, 0x04, 0x92, 0x03, 0x1D, 0x5E, 0x1D, 0x1D, +/* 0000C1C0 */ 0x03, 0x14, 0x03, 0x00, 0x1D, 0x05, 0x09, 0x17, 0x00, 0x92, 0x02, 0x1D, 0x92, 0x04, 0x1F, 0x43, +/* 0000C1D0 */ 0x1E, 0x1F, 0x2D, 0x1F, 0x1E, 0x06, 0x96, 0x04, 0x1F, 0x9C, 0x07, 0x1D, 0x1E, 0x09, 0x23, 0x00, +/* 0000C1E0 */ 0x92, 0x03, 0x1D, 0x5E, 0x1D, 0x1D, 0x04, 0x14, 0x03, 0x00, 0x1D, 0x08, 0x09, 0x14, 0x00, 0x92, +/* 0000C1F0 */ 0x02, 0x1D, 0x92, 0x04, 0x1F, 0x43, 0x1E, 0x1F, 0x2D, 0x1F, 0x1E, 0x06, 0x96, 0x04, 0x1F, 0x9C, +/* 0000C200 */ 0x09, 0x1D, 0x1E, 0x92, 0x03, 0x1D, 0x5E, 0x1D, 0x1D, 0x05, 0x0E, 0x49, 0x00, 0x1D, 0x92, 0x03, +/* 0000C210 */ 0x1D, 0x5E, 0x1D, 0x1D, 0x06, 0x14, 0x03, 0x00, 0x1D, 0x0A, 0x09, 0x17, 0x00, 0x92, 0x02, 0x1D, +/* 0000C220 */ 0x92, 0x04, 0x1F, 0x43, 0x1E, 0x1F, 0x2D, 0x1F, 0x1E, 0x06, 0x96, 0x04, 0x1F, 0x9C, 0x0B, 0x1D, +/* 0000C230 */ 0x1E, 0x09, 0x23, 0x00, 0x92, 0x03, 0x1D, 0x5E, 0x1D, 0x1D, 0x07, 0x14, 0x03, 0x00, 0x1D, 0x0C, +/* 0000C240 */ 0x09, 0x14, 0x00, 0x92, 0x02, 0x1D, 0x92, 0x04, 0x1F, 0x43, 0x1E, 0x1F, 0x2D, 0x1F, 0x1E, 0x06, +/* 0000C250 */ 0x96, 0x04, 0x1F, 0x9C, 0x0D, 0x1D, 0x1E, 0x92, 0x03, 0x1D, 0x5E, 0x1D, 0x1D, 0x08, 0x0E, 0x87, +/* 0000C260 */ 0x00, 0x1D, 0x92, 0x03, 0x1D, 0x5E, 0x1D, 0x1D, 0x09, 0x14, 0x0F, 0x00, 0x1D, 0x0A, 0x92, 0x03, +/* 0000C270 */ 0x1D, 0x5E, 0x1D, 0x1D, 0x0A, 0x14, 0x03, 0x00, 0x1D, 0x0C, 0x09, 0x17, 0x00, 0x92, 0x02, 0x1D, +/* 0000C280 */ 0x92, 0x04, 0x1F, 0x43, 0x1E, 0x1F, 0x2D, 0x1F, 0x1E, 0x06, 0x96, 0x04, 0x1F, 0x9C, 0x0E, 0x1D, +/* 0000C290 */ 0x1E, 0x09, 0x55, 0x00, 0x92, 0x03, 0x1D, 0x5E, 0x1D, 0x1D, 0x0B, 0x14, 0x0F, 0x00, 0x1D, 0x05, +/* 0000C2A0 */ 0x92, 0x03, 0x1D, 0x5E, 0x1D, 0x1D, 0x0C, 0x14, 0x03, 0x00, 0x1D, 0x04, 0x09, 0x17, 0x00, 0x92, +/* 0000C2B0 */ 0x02, 0x1D, 0x92, 0x04, 0x1F, 0x43, 0x1E, 0x1F, 0x2D, 0x1F, 0x1E, 0x06, 0x96, 0x04, 0x1F, 0x9C, +/* 0000C2C0 */ 0x0F, 0x1D, 0x1E, 0x09, 0x23, 0x00, 0x92, 0x03, 0x1D, 0x5E, 0x1D, 0x1D, 0x0D, 0x14, 0x03, 0x00, +/* 0000C2D0 */ 0x1D, 0x08, 0x09, 0x14, 0x00, 0x92, 0x02, 0x1D, 0x92, 0x04, 0x1F, 0x43, 0x1E, 0x1F, 0x2D, 0x1F, +/* 0000C2E0 */ 0x1E, 0x06, 0x96, 0x04, 0x1F, 0x9C, 0x10, 0x1D, 0x1E, 0x92, 0x03, 0x1D, 0x5E, 0x1D, 0x1D, 0x0E, +/* 0000C2F0 */ 0x0E, 0x14, 0x00, 0x1D, 0x92, 0x02, 0x1D, 0x92, 0x04, 0x1F, 0x43, 0x1E, 0x1F, 0x2D, 0x1F, 0x1E, +/* 0000C300 */ 0x06, 0x96, 0x04, 0x1F, 0x9C, 0x11, 0x1D, 0x1E, 0x92, 0x03, 0x1D, 0x5E, 0x1D, 0x1D, 0x0F, 0x0E, +/* 0000C310 */ 0x49, 0x00, 0x1D, 0x92, 0x03, 0x1D, 0x5E, 0x1D, 0x1D, 0x10, 0x14, 0x03, 0x00, 0x1D, 0x05, 0x09, +/* 0000C320 */ 0x17, 0x00, 0x92, 0x02, 0x1D, 0x92, 0x04, 0x1F, 0x43, 0x1E, 0x1F, 0x2D, 0x1F, 0x1E, 0x06, 0x96, +/* 0000C330 */ 0x04, 0x1F, 0x9C, 0x12, 0x1D, 0x1E, 0x09, 0x23, 0x00, 0x92, 0x03, 0x1D, 0x5E, 0x1D, 0x1D, 0x11, +/* 0000C340 */ 0x14, 0x03, 0x00, 0x1D, 0x08, 0x09, 0x14, 0x00, 0x92, 0x02, 0x1D, 0x92, 0x04, 0x1F, 0x43, 0x1E, +/* 0000C350 */ 0x1F, 0x2D, 0x1F, 0x1E, 0x06, 0x96, 0x04, 0x1F, 0x9C, 0x13, 0x1D, 0x1E, 0x8E, 0x04, 0x06, 0x1D, +/* 0000C360 */ 0x07, 0x04, 0x00, 0x59, 0x00, 0x17, 0x8E, 0x04, 0x17, 0x1E, 0x59, 0x01, 0x1E, 0xCF, 0x1E, 0x03, +/* 0000C370 */ 0xA1, 0x00, 0x14, 0x1E, 0xA1, 0x01, 0x15, 0x1E, 0xA1, 0x02, 0x16, 0x1E, 0x59, 0x02, 0x1E, 0xD6, +/* 0000C380 */ 0x00, 0x1E, 0x59, 0x03, 0x1E, 0x1F, 0x04, 0xFF, 0x1D, 0x92, 0x04, 0x1D, 0x11, 0x03, 0x00, 0x1D, +/* 0000C390 */ 0x03, 0x09, 0x24, 0x00, 0x8E, 0x04, 0x06, 0x1D, 0x07, 0x04, 0x00, 0x59, 0x00, 0x17, 0x8E, 0x04, +/* 0000C3A0 */ 0x19, 0x1E, 0x59, 0x01, 0x1E, 0x92, 0x02, 0x1E, 0x59, 0x02, 0x1E, 0x59, 0x03, 0x18, 0x1F, 0x04, +/* 0000C3B0 */ 0x1D, 0x1D, 0x45, 0x00, 0x1D, 0x09, 0x05, 0x00, 0xA8, 0x1D, 0x46, 0x00, 0x1D, 0x09, 0x02, 0x00, +/* 0000C3C0 */ 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xEB, 0x01, 0xFE, 0x76, 0x02, 0xFE, 0x76, 0x02, 0xFE, 0x76, 0x02, +/* 0000C3D0 */ 0xFE, 0x76, 0x02, 0xFE, 0x77, 0x02, 0xFE, 0x77, 0x02, 0xFE, 0x77, 0x02, 0xFE, 0x71, 0x02, 0xFE, +/* 0000C3E0 */ 0x71, 0x02, 0xFE, 0x71, 0x02, 0xFE, 0x71, 0x02, 0xFE, 0x71, 0x02, 0xFE, 0x71, 0x02, 0xFE, 0x6C, +/* 0000C3F0 */ 0x02, 0xFE, 0x75, 0x02, 0xFE, 0x75, 0x02, 0xFE, 0x75, 0x02, 0xFF, 0xDA, 0x40, 0x02, 0x00, 0x1E, +/* 0000C400 */ 0x08, 0x00, 0x00, 0x00, 0x06, 0x00, 0x23, 0x00, 0x07, 0x00, 0x2B, 0x00, 0x03, 0x00, 0x1C, 0x00, +/* 0000C410 */ 0x0B, 0x00, 0x2B, 0x00, 0x1B, 0x00, 0x5B, 0x00, 0x17, 0x00, 0x44, 0x00, 0x0F, 0x00, 0x3A, 0x00, +/* 0000C420 */ 0x14, 0x00, 0x86, 0x00, 0x0B, 0x00, 0x28, 0x00, 0x0F, 0x00, 0x3A, 0x00, 0x17, 0x00, 0x3F, 0x00, +/* 0000C430 */ 0x0F, 0x00, 0x3A, 0x00, 0x14, 0x00, 0x56, 0x00, 0x0B, 0x00, 0x29, 0x00, 0x1B, 0x00, 0x5A, 0x00, +/* 0000C440 */ 0x17, 0x00, 0x3C, 0x00, 0x1B, 0x00, 0x57, 0x00, 0x17, 0x00, 0x40, 0x00, 0x0F, 0x00, 0x38, 0x00, +/* 0000C450 */ 0x14, 0x00, 0x57, 0x00, 0x0B, 0x00, 0x27, 0x00, 0x14, 0x00, 0x3A, 0x00, 0x0B, 0x00, 0x30, 0x00, +/* 0000C460 */ 0x0F, 0x00, 0x40, 0x00, 0x17, 0x00, 0x43, 0x00, 0x0F, 0x00, 0x3F, 0x00, 0x14, 0x00, 0x5A, 0x00, +/* 0000C470 */ 0x2D, 0x00, 0x1C, 0x01, 0x39, 0x00, 0x5B, 0x00, 0x00, 0x7D, 0xC4, 0x00, 0x00, 0x7F, 0x4C, 0x00, +/* 0000C480 */ 0x01, 0x00, 0x10, 0x03, 0x00, 0xFE, 0xC8, 0x0C, 0x55, 0xA2, 0x41, 0xD1, 0x00, 0xB5, 0xFF, 0xD6, +/* 0000C490 */ 0x47, 0x02, 0x00, 0xFF, 0xD6, 0x47, 0x02, 0x00, 0x41, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0xD6, +/* 0000C4A0 */ 0x47, 0x02, 0x00, 0x8D, 0x8D, 0x05, 0x03, 0x05, 0x0D, 0x0D, 0x05, 0x03, 0x04, 0x01, 0x01, 0x2B, +/* 0000C4B0 */ 0x8E, 0x01, 0x03, 0x05, 0x97, 0x05, 0x05, 0x03, 0x0E, 0x1B, 0x00, 0x05, 0x8E, 0x01, 0x02, 0x05, +/* 0000C4C0 */ 0x8E, 0x01, 0x04, 0x07, 0x4A, 0x07, 0x43, 0x06, 0x07, 0x2D, 0x07, 0x06, 0x02, 0x01, 0x43, 0x01, +/* 0000C4D0 */ 0x01, 0x04, 0x07, 0x9C, 0x03, 0x05, 0x06, 0xA8, 0x00, 0x24, 0x00, 0xFF, 0xFB, 0x47, 0x02, 0x00, +/* 0000C4E0 */ 0x03, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x2C, 0x00, 0x1D, 0x00, 0x3B, 0x00, 0x00, 0x7F, 0x5C, +/* 0000C4F0 */ 0x00, 0xC1, 0x13, 0x10, 0x43, 0x00, 0xFE, 0x69, 0x0C, 0x0C, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x2A, +/* 0000C500 */ 0x04, 0xB3, 0xFF, 0xE0, 0x36, 0x02, 0x00, 0xFF, 0xE0, 0x36, 0x02, 0x00, 0x01, 0xFE, 0x00, 0x90, +/* 0000C510 */ 0x04, 0x04, 0xFF, 0xE0, 0x36, 0x02, 0x00, 0xFE, 0x21, 0x09, 0xFE, 0x21, 0x09, 0x07, 0x15, 0x1A, +/* 0000C520 */ 0x05, 0x88, 0x82, 0x04, 0x03, 0x20, 0x20, 0x20, 0x20, 0x06, 0x19, 0x07, 0x08, 0x0B, 0x06, 0xFE, +/* 0000C530 */ 0x42, 0x04, 0x06, 0xFE, 0x3F, 0x04, 0x0C, 0x05, 0xFE, 0x44, 0x04, 0x06, 0xFE, 0x40, 0x04, 0x06, +/* 0000C540 */ 0xFE, 0x35, 0x04, 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, 0xF8, 0x03, 0x06, 0xFE, 0x2B, 0x03, 0x06, +/* 0000C550 */ 0xFE, 0x2C, 0x03, 0x06, 0xFE, 0x2D, 0x03, 0x06, 0xFE, 0x36, 0x04, 0x06, 0xFE, 0x37, 0x04, 0x06, +/* 0000C560 */ 0xFE, 0x38, 0x04, 0x06, 0xFE, 0x39, 0x04, 0x06, 0xFE, 0x3A, 0x04, 0xFE, 0x18, 0x02, 0xA8, 0x1A, +/* 0000C570 */ 0x14, 0x03, 0x00, 0x15, 0x1A, 0x09, 0x1C, 0x00, 0x8E, 0x04, 0x04, 0x1A, 0x07, 0x03, 0x00, 0x59, +/* 0000C580 */ 0x00, 0x03, 0xCD, 0x1B, 0x59, 0x01, 0x1B, 0x59, 0x02, 0x02, 0x1F, 0x03, 0x1A, 0x1A, 0x45, 0x15, +/* 0000C590 */ 0x1A, 0x09, 0x18, 0x00, 0x8E, 0x04, 0x24, 0x1B, 0x6C, 0x1A, 0x1B, 0x00, 0x07, 0x02, 0x00, 0x59, +/* 0000C5A0 */ 0x00, 0x1B, 0x59, 0x01, 0x15, 0x1F, 0x02, 0x1A, 0x1A, 0x45, 0x15, 0x1A, 0x45, 0x18, 0x04, 0x14, +/* 0000C5B0 */ 0x08, 0x00, 0x16, 0x05, 0x14, 0x03, 0x00, 0x16, 0x06, 0x09, 0x32, 0x00, 0x5E, 0x1A, 0x15, 0x01, +/* 0000C5C0 */ 0xA8, 0x1B, 0x15, 0x24, 0x00, 0x1A, 0x1B, 0x5E, 0x1A, 0x15, 0x02, 0xA8, 0x1B, 0x15, 0x19, 0x00, +/* 0000C5D0 */ 0x1A, 0x1B, 0x5E, 0x1A, 0x15, 0x03, 0xA8, 0x1B, 0x15, 0x0E, 0x00, 0x1A, 0x1B, 0x5E, 0x1A, 0x15, +/* 0000C5E0 */ 0x04, 0xA8, 0x1B, 0x15, 0x03, 0x00, 0x1A, 0x1B, 0x09, 0x03, 0x00, 0x45, 0x18, 0x07, 0x14, 0x08, +/* 0000C5F0 */ 0x00, 0x16, 0x08, 0x14, 0x03, 0x00, 0x16, 0x06, 0x09, 0x27, 0x00, 0x5E, 0x1A, 0x15, 0x05, 0xA8, +/* 0000C600 */ 0x1B, 0x15, 0x19, 0x00, 0x1A, 0x1B, 0x5E, 0x1A, 0x15, 0x06, 0xA8, 0x1B, 0x15, 0x0E, 0x00, 0x1A, +/* 0000C610 */ 0x1B, 0x5E, 0x1A, 0x15, 0x07, 0xA8, 0x1B, 0x15, 0x03, 0x00, 0x1A, 0x1B, 0x09, 0x03, 0x00, 0x45, +/* 0000C620 */ 0x18, 0x07, 0x0E, 0xA9, 0x00, 0x18, 0x14, 0x08, 0x00, 0x17, 0x05, 0x14, 0x03, 0x00, 0x17, 0x09, +/* 0000C630 */ 0x09, 0x9C, 0x00, 0x8E, 0x04, 0x16, 0x1A, 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, 0x59, 0x01, 0x15, +/* 0000C640 */ 0x59, 0x02, 0x0A, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00, +/* 0000C650 */ 0x7A, 0x0C, 0x1B, 0x08, 0x7A, 0x04, 0x1B, 0x09, 0x7A, 0x04, 0x1B, 0x0A, 0x7A, 0x04, 0x1B, 0x0B, +/* 0000C660 */ 0x59, 0x03, 0x1B, 0x1F, 0x04, 0xFF, 0x1A, 0x8E, 0x04, 0x16, 0x1A, 0x07, 0x04, 0x00, 0x59, 0x00, +/* 0000C670 */ 0x03, 0x59, 0x01, 0x15, 0x59, 0x02, 0x10, 0xCE, 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, +/* 0000C680 */ 0x1B, 0x00, 0x00, 0x00, 0x7A, 0x0C, 0x1B, 0x0C, 0x7A, 0x04, 0x1B, 0x0D, 0x7A, 0x04, 0x1B, 0x0E, +/* 0000C690 */ 0x7A, 0x04, 0x1B, 0x0F, 0x59, 0x03, 0x1B, 0x1F, 0x04, 0xFF, 0x1A, 0x8E, 0x04, 0x16, 0x1A, 0x07, +/* 0000C6A0 */ 0x04, 0x00, 0x59, 0x00, 0x03, 0x59, 0x01, 0x15, 0x59, 0x02, 0x11, 0xCE, 0x30, 0x00, 0x00, 0x00, +/* 0000C6B0 */ 0x02, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00, 0x7A, 0x0C, 0x1B, 0x10, 0x7A, 0x04, 0x1B, 0x11, +/* 0000C6C0 */ 0x7A, 0x04, 0x1B, 0x12, 0x7A, 0x04, 0x1B, 0x13, 0x59, 0x03, 0x1B, 0x1F, 0x04, 0xFF, 0x1A, 0x0E, +/* 0000C6D0 */ 0xA9, 0x00, 0x18, 0x14, 0x08, 0x00, 0x17, 0x08, 0x14, 0x03, 0x00, 0x17, 0x09, 0x09, 0x9C, 0x00, +/* 0000C6E0 */ 0x8E, 0x04, 0x16, 0x1A, 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, 0x59, 0x01, 0x15, 0x59, 0x02, 0x12, +/* 0000C6F0 */ 0xCE, 0x48, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00, 0x7A, 0x0C, 0x1B, +/* 0000C700 */ 0x14, 0x7A, 0x04, 0x1B, 0x15, 0x7A, 0x04, 0x1B, 0x16, 0x7A, 0x04, 0x1B, 0x17, 0x59, 0x03, 0x1B, +/* 0000C710 */ 0x1F, 0x04, 0xFF, 0x1A, 0x8E, 0x04, 0x16, 0x1A, 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, 0x59, 0x01, +/* 0000C720 */ 0x15, 0x59, 0x02, 0x13, 0xCE, 0x60, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, +/* 0000C730 */ 0x00, 0x7A, 0x0C, 0x1B, 0x18, 0x7A, 0x04, 0x1B, 0x19, 0x7A, 0x04, 0x1B, 0x1A, 0x7A, 0x04, 0x1B, +/* 0000C740 */ 0x1B, 0x59, 0x03, 0x1B, 0x1F, 0x04, 0xFF, 0x1A, 0x8E, 0x04, 0x16, 0x1A, 0x07, 0x04, 0x00, 0x59, +/* 0000C750 */ 0x00, 0x03, 0x59, 0x01, 0x15, 0x59, 0x02, 0x14, 0xCE, 0x78, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, +/* 0000C760 */ 0x00, 0x1B, 0x00, 0x00, 0x00, 0x7A, 0x0C, 0x1B, 0x1C, 0x7A, 0x04, 0x1B, 0x1D, 0x7A, 0x04, 0x1B, +/* 0000C770 */ 0x1E, 0x7A, 0x04, 0x1B, 0x1F, 0x59, 0x03, 0x1B, 0x1F, 0x04, 0xFF, 0x1A, 0x45, 0x00, 0x15, 0x09, +/* 0000C780 */ 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x06, 0x90, 0x00, 0x78, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, +/* 0000C790 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, +/* 0000C7A0 */ 0x00, 0x95, 0x01, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0000C7B0 */ 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, +/* 0000C7C0 */ 0x00, 0x48, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, +/* 0000C7D0 */ 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x30, 0x00, 0x00, +/* 0000C7E0 */ 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, +/* 0000C7F0 */ 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, +/* 0000C800 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, +/* 0000C810 */ 0x00, 0x95, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0000C820 */ 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, +/* 0000C830 */ 0x00, 0xFE, 0x21, 0x03, 0xFE, 0x76, 0x02, 0xFE, 0x77, 0x02, 0xFE, 0x71, 0x02, 0xFE, 0x6C, 0x02, +/* 0000C840 */ 0xFE, 0x6E, 0x02, 0xFE, 0x70, 0x02, 0xFE, 0x73, 0x02, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, +/* 0000C850 */ 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, +/* 0000C860 */ 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x97, 0x01, +/* 0000C870 */ 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, +/* 0000C880 */ 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, +/* 0000C890 */ 0x01, 0xFF, 0x2A, 0x37, 0x02, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x31, 0x00, 0x1C, +/* 0000C8A0 */ 0x00, 0x4F, 0x00, 0x18, 0x00, 0x49, 0x00, 0x03, 0x00, 0x29, 0x00, 0x0D, 0x00, 0x45, 0x00, 0x2F, +/* 0000C8B0 */ 0x00, 0x97, 0x00, 0x03, 0x00, 0x4E, 0x00, 0x0D, 0x00, 0x45, 0x00, 0x24, 0x00, 0x7A, 0x00, 0x03, +/* 0000C8C0 */ 0x00, 0x4F, 0x00, 0x11, 0x00, 0x57, 0x00, 0x34, 0x00, 0xCB, 0x00, 0x34, 0x00, 0xCC, 0x00, 0x34, +/* 0000C8D0 */ 0x00, 0xD8, 0x00, 0x11, 0x00, 0x57, 0x00, 0x34, 0x00, 0xCB, 0x00, 0x34, 0x00, 0xCD, 0x00, 0x34, +/* 0000C8E0 */ 0x00, 0xDB, 0x00, 0x08, 0x00, 0x1C, 0x00, 0x00, 0x7E, 0x5D, 0x00, 0xC1, 0x53, 0x5A, 0x4B, 0x04, +/* 0000C8F0 */ 0xFE, 0x7B, 0x0B, 0x18, 0xA0, 0x41, 0xD1, 0x00, 0xAA, 0xFF, 0xF3, 0x06, 0x02, 0x00, 0xFF, 0xF3, +/* 0000C900 */ 0x06, 0x02, 0x00, 0x06, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFF, 0xF3, 0x06, 0x02, 0x00, 0xFE, 0xF9, +/* 0000C910 */ 0x2E, 0xFE, 0xF9, 0x2E, 0x01, 0xFE, 0xE0, 0x01, 0x0D, 0x21, 0x27, 0x09, 0xA8, 0xA8, 0x02, 0x09, +/* 0000C920 */ 0x1A, 0x1A, 0x1A, 0x1A, 0x05, 0x02, 0x24, 0x25, 0x26, 0x27, 0x08, 0x06, 0xFE, 0x27, 0x03, 0x06, +/* 0000C930 */ 0xFE, 0x0E, 0x04, 0x05, 0xFE, 0x0F, 0x04, 0x05, 0xFE, 0x10, 0x04, 0x05, 0xFE, 0x11, 0x04, 0x06, +/* 0000C940 */ 0xFE, 0x38, 0x03, 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, 0x2B, 0x03, 0x0B, 0x06, 0xFE, 0x2D, 0x03, +/* 0000C950 */ 0x07, 0x06, 0xFE, 0xD7, 0x03, 0x06, 0xFE, 0x24, 0x04, 0x06, 0xFE, 0x18, 0x04, 0x06, 0xFE, 0x1B, +/* 0000C960 */ 0x04, 0x06, 0xFE, 0x1C, 0x04, 0x06, 0xFE, 0xDA, 0x03, 0x06, 0xFE, 0xDB, 0x03, 0x06, 0xFE, 0xDC, +/* 0000C970 */ 0x03, 0x06, 0xFE, 0xDD, 0x03, 0x06, 0xFE, 0xDE, 0x03, 0x06, 0xFE, 0x1F, 0x04, 0x06, 0xFE, 0xEC, +/* 0000C980 */ 0x03, 0x0C, 0x06, 0xFE, 0x2C, 0x03, 0x06, 0xFE, 0xED, 0x03, 0x06, 0xFE, 0xEE, 0x03, 0x06, 0xFE, +/* 0000C990 */ 0x15, 0x04, 0x06, 0xFE, 0x77, 0x03, 0x05, 0xFE, 0x14, 0x04, 0xFE, 0x97, 0x02, 0xA8, 0x21, 0xA8, +/* 0000C9A0 */ 0x22, 0xA8, 0x23, 0x8E, 0x02, 0x32, 0x29, 0x14, 0x0C, 0x00, 0x29, 0x03, 0x8E, 0x02, 0x32, 0x29, +/* 0000C9B0 */ 0x14, 0x03, 0x00, 0x29, 0x04, 0x09, 0x73, 0x02, 0xE0, 0x00, 0x03, 0x01, 0xB9, 0x29, 0x00, 0x01, +/* 0000C9C0 */ 0x66, 0x01, 0x00, 0x21, 0x29, 0x95, 0x00, 0x02, 0x21, 0x8E, 0x02, 0x03, 0x2A, 0x6C, 0x29, 0x2A, +/* 0000C9D0 */ 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x2A, 0x8E, 0x02, 0x23, 0x2B, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 0000C9E0 */ 0x02, 0x59, 0x01, 0x05, 0xB9, 0x2D, 0x00, 0x01, 0x66, 0x01, 0x01, 0x2C, 0x2D, 0x59, 0x02, 0x2C, +/* 0000C9F0 */ 0x1F, 0x03, 0x2B, 0x2B, 0x59, 0x01, 0x2B, 0x8E, 0x02, 0x03, 0x2B, 0x5E, 0x2B, 0x2B, 0x01, 0x5E, +/* 0000CA00 */ 0x2B, 0x2B, 0x02, 0x59, 0x02, 0x2B, 0x1F, 0x03, 0xFF, 0x29, 0x8E, 0x02, 0x32, 0x29, 0x14, 0x03, +/* 0000CA10 */ 0x00, 0x29, 0x03, 0x09, 0x15, 0x02, 0xE0, 0x01, 0x04, 0x02, 0xB9, 0x29, 0x00, 0xB8, 0x01, 0x00, +/* 0000CA20 */ 0x00, 0x00, 0x29, 0x29, 0x01, 0x66, 0x01, 0x02, 0x22, 0x29, 0x95, 0x01, 0x02, 0x22, 0x01, 0x66, +/* 0000CA30 */ 0x01, 0x03, 0x23, 0x29, 0x95, 0x01, 0x03, 0x23, 0x8E, 0x02, 0x23, 0x29, 0x07, 0x03, 0x00, 0x59, +/* 0000CA40 */ 0x00, 0x02, 0x59, 0x01, 0x06, 0x90, 0x01, 0x02, 0x2A, 0x59, 0x02, 0x2A, 0x1F, 0x03, 0xFF, 0x29, +/* 0000CA50 */ 0x8E, 0x02, 0x23, 0x29, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x07, 0x90, 0x01, 0x03, +/* 0000CA60 */ 0x2A, 0x59, 0x02, 0x2A, 0x1F, 0x03, 0xFF, 0x29, 0x8E, 0x02, 0x16, 0x29, 0x07, 0x04, 0x00, 0x59, +/* 0000CA70 */ 0x00, 0x02, 0x90, 0x01, 0x02, 0x2A, 0x59, 0x01, 0x2A, 0x59, 0x02, 0x08, 0xCE, 0x00, 0x00, 0x00, +/* 0000CA80 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x8E, 0x01, 0x15, 0x2B, 0x4A, 0x2B, 0x7A, +/* 0000CA90 */ 0x2B, 0x2A, 0x03, 0x7A, 0x0B, 0x2A, 0x04, 0x7A, 0x0B, 0x2A, 0x05, 0x59, 0x03, 0x2A, 0x1F, 0x04, +/* 0000CAA0 */ 0xFF, 0x29, 0xCF, 0x29, 0x0B, 0xA1, 0x00, 0x0E, 0x29, 0xA1, 0x01, 0x0F, 0x29, 0xA1, 0x02, 0x10, +/* 0000CAB0 */ 0x29, 0xA1, 0x03, 0x11, 0x29, 0xA1, 0x04, 0x12, 0x29, 0xA1, 0x05, 0x13, 0x29, 0xA1, 0x06, 0x14, +/* 0000CAC0 */ 0x29, 0xA1, 0x07, 0x15, 0x29, 0xA1, 0x08, 0x16, 0x29, 0xA1, 0x09, 0x17, 0x29, 0xA1, 0x0A, 0x18, +/* 0000CAD0 */ 0x29, 0x96, 0x02, 0x29, 0x8E, 0x02, 0x16, 0x29, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x90, 0x01, +/* 0000CAE0 */ 0x02, 0x2A, 0x59, 0x01, 0x2A, 0x59, 0x02, 0x19, 0xCE, 0x14, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, +/* 0000CAF0 */ 0x00, 0x2A, 0x00, 0x00, 0x00, 0x90, 0x01, 0x02, 0x2B, 0x07, 0x01, 0x00, 0xC4, 0x01, 0x2B, 0x2B, +/* 0000CB00 */ 0x7A, 0x2B, 0x2A, 0x06, 0x7A, 0x1A, 0x2A, 0x07, 0x7A, 0x1A, 0x2A, 0x08, 0x7A, 0x1A, 0x2A, 0x09, +/* 0000CB10 */ 0x59, 0x03, 0x2A, 0x1F, 0x04, 0xFF, 0x29, 0x8E, 0x02, 0x04, 0x29, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 0000CB20 */ 0x02, 0x90, 0x01, 0x02, 0x2A, 0x5E, 0x2A, 0x2A, 0x0A, 0x59, 0x01, 0x2A, 0x8E, 0x02, 0x09, 0x2A, +/* 0000CB30 */ 0x5E, 0x2A, 0x2A, 0x0B, 0x59, 0x02, 0x2A, 0x1F, 0x03, 0xFF, 0x29, 0x8E, 0x02, 0x16, 0x29, 0x07, +/* 0000CB40 */ 0x04, 0x00, 0x59, 0x00, 0x02, 0x90, 0x01, 0x02, 0x2A, 0x5E, 0x2A, 0x2A, 0x0C, 0x59, 0x01, 0x2A, +/* 0000CB50 */ 0x59, 0x02, 0x1C, 0xCE, 0x2C, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x00, +/* 0000CB60 */ 0x90, 0x01, 0x02, 0x2B, 0x7A, 0x2B, 0x2A, 0x0D, 0x7A, 0x0B, 0x2A, 0x0E, 0x7A, 0x1A, 0x2A, 0x0F, +/* 0000CB70 */ 0x7A, 0x0B, 0x2A, 0x10, 0x59, 0x03, 0x2A, 0x1F, 0x04, 0xFF, 0x29, 0x8E, 0x02, 0x16, 0x29, 0x07, +/* 0000CB80 */ 0x04, 0x00, 0x59, 0x00, 0x02, 0x90, 0x01, 0x02, 0x2A, 0x5E, 0x2A, 0x2A, 0x11, 0x59, 0x01, 0x2A, +/* 0000CB90 */ 0x59, 0x02, 0x1D, 0xCE, 0x44, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x00, +/* 0000CBA0 */ 0xB9, 0x2C, 0x00, 0xB8, 0x01, 0x00, 0x00, 0x00, 0x2C, 0x2C, 0x01, 0x6A, 0x01, 0x04, 0x2B, 0x2C, +/* 0000CBB0 */ 0x2A, 0x7A, 0x2B, 0x2A, 0x12, 0x7A, 0x0B, 0x2A, 0x13, 0x7A, 0x1A, 0x2A, 0x14, 0x7A, 0x0B, 0x2A, +/* 0000CBC0 */ 0x15, 0x59, 0x03, 0x2A, 0x1F, 0x04, 0xFF, 0x29, 0x8E, 0x02, 0x16, 0x29, 0x07, 0x04, 0x00, 0x59, +/* 0000CBD0 */ 0x00, 0x02, 0x90, 0x01, 0x02, 0x2A, 0x5E, 0x2A, 0x2A, 0x16, 0x59, 0x01, 0x2A, 0x59, 0x02, 0x1E, +/* 0000CBE0 */ 0xCE, 0x5C, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x8E, 0x02, 0x23, +/* 0000CBF0 */ 0x2B, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x20, 0xB9, 0x2D, 0x00, 0xB8, 0x01, 0x00, +/* 0000CC00 */ 0x00, 0x00, 0x2D, 0x2D, 0x01, 0x66, 0x01, 0x05, 0x2C, 0x2D, 0x59, 0x02, 0x2C, 0x1F, 0x03, 0x2B, +/* 0000CC10 */ 0x2B, 0x7A, 0x2B, 0x2A, 0x17, 0x7A, 0x1A, 0x2A, 0x18, 0x7A, 0x0B, 0x2A, 0x19, 0x59, 0x03, 0x2A, +/* 0000CC20 */ 0x1F, 0x04, 0xFF, 0x29, 0x90, 0x01, 0x02, 0x00, 0x09, 0x07, 0x00, 0xA8, 0x00, 0x09, 0x02, 0x00, +/* 0000CC30 */ 0xA8, 0x00, 0x24, 0x00, 0x05, 0x70, 0x00, 0x5C, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, +/* 0000CC40 */ 0x00, 0x00, 0x00, 0x98, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x44, +/* 0000CC50 */ 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, +/* 0000CC60 */ 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x2C, 0x00, 0x00, 0x00, 0x03, +/* 0000CC70 */ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, +/* 0000CC80 */ 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, +/* 0000CC90 */ 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, +/* 0000CCA0 */ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, +/* 0000CCB0 */ 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0xFE, 0x04, 0x02, 0xFE, 0x2F, +/* 0000CCC0 */ 0x02, 0xFE, 0x2D, 0x02, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x97, 0x01, +/* 0000CCD0 */ 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x24, 0x01, 0xFE, 0x24, 0x01, 0xFE, +/* 0000CCE0 */ 0x24, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x24, +/* 0000CCF0 */ 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x24, 0x01, +/* 0000CD00 */ 0xFE, 0x98, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0x02, 0x01, 0x01, 0x00, 0xFE, 0x0B, 0x04, +/* 0000CD10 */ 0x02, 0x02, 0x00, 0xFE, 0x32, 0x02, 0x01, 0xFE, 0x0B, 0x02, 0xFF, 0x09, 0x07, 0x02, 0x00, 0x0F, +/* 0000CD20 */ 0x06, 0x00, 0x00, 0x00, 0x26, 0x00, 0x3E, 0x19, 0x41, 0x00, 0x79, 0x02, 0x2E, 0x00, 0x5A, 0x04, +/* 0000CD30 */ 0x18, 0x00, 0xD4, 0x02, 0x18, 0x00, 0x52, 0x00, 0x3A, 0x00, 0x9B, 0x00, 0x32, 0x00, 0x1F, 0x01, +/* 0000CD40 */ 0x43, 0x00, 0x99, 0x00, 0x24, 0x00, 0x48, 0x00, 0x40, 0x00, 0x9E, 0x00, 0x4D, 0x00, 0xC2, 0x04, +/* 0000CD50 */ 0x5C, 0x00, 0x16, 0x03, 0x07, 0x00, 0x84, 0x00, 0x07, 0x00, 0x16, 0x00, 0x00, 0x5A, 0xD4, 0x00, +/* 0000CD60 */ 0x00, 0x2B, 0xD3, 0x00, 0x00, 0x5D, 0xD1, 0x00, 0x00, 0x2E, 0xD0, 0x00, 0x00, 0x5C, 0xCE, 0x00, +/* 0000CD70 */ 0x00, 0x75, 0xCD, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x51, 0x0C, +/* 0000CD80 */ 0x39, 0xA0, 0x41, 0xD1, 0x00, 0xB1, 0xFF, 0xAD, 0x32, 0x02, 0x00, 0xFF, 0xAD, 0x32, 0x02, 0x00, +/* 0000CD90 */ 0x09, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFF, 0xAD, 0x32, 0x02, 0x00, 0xFE, 0x56, 0x02, 0xFE, 0x56, +/* 0000CDA0 */ 0x02, 0x05, 0x05, 0x08, 0x04, 0x22, 0x21, 0x05, 0x01, 0x05, 0x05, 0x05, 0x05, 0x07, 0x06, 0xFE, +/* 0000CDB0 */ 0x94, 0x03, 0x05, 0xFE, 0x22, 0x04, 0x06, 0xFE, 0x2F, 0x03, 0x6F, 0x58, 0x05, 0x2A, 0x08, 0x05, +/* 0000CDC0 */ 0x15, 0x03, 0x00, 0x08, 0x02, 0x09, 0x18, 0x00, 0x8E, 0x05, 0x03, 0x09, 0x6C, 0x08, 0x09, 0x00, +/* 0000CDD0 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x09, 0x59, 0x01, 0x03, 0x59, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x08, +/* 0000CDE0 */ 0x8E, 0x05, 0x03, 0x09, 0x6C, 0x08, 0x09, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x09, 0x59, 0x01, +/* 0000CDF0 */ 0x05, 0x1F, 0x02, 0x08, 0x08, 0x45, 0x06, 0x08, 0xA8, 0x08, 0x14, 0x08, 0x00, 0x06, 0x08, 0x5E, +/* 0000CE00 */ 0x08, 0x06, 0x02, 0x0F, 0x18, 0x00, 0x08, 0x8E, 0x05, 0x03, 0x09, 0x6C, 0x08, 0x09, 0x03, 0x07, +/* 0000CE10 */ 0x03, 0x00, 0x59, 0x00, 0x09, 0x59, 0x01, 0x03, 0x59, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x08, 0x5E, +/* 0000CE20 */ 0x00, 0x06, 0x04, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB6, 0x02, 0xFE, 0x05, 0x02, +/* 0000CE30 */ 0xFE, 0x37, 0x02, 0xFE, 0xB6, 0x02, 0xFE, 0x57, 0x02, 0xFF, 0xD3, 0x32, 0x02, 0x00, 0x07, 0x02, +/* 0000CE40 */ 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3C, 0x00, 0x18, 0x00, 0x84, 0x00, 0x18, 0x00, 0x4B, 0x00, 0x0F, +/* 0000CE50 */ 0x00, 0x69, 0x00, 0x18, 0x00, 0x84, 0x00, 0x09, 0x00, 0x37, 0x00, 0x00, 0x7F, 0x5D, 0x00, 0xC1, +/* 0000CE60 */ 0x03, 0x1A, 0x0F, 0x00, 0xFE, 0x3B, 0x0C, 0x1B, 0xA0, 0x41, 0xC3, 0x00, 0xFE, 0xEE, 0x03, 0xAF, +/* 0000CE70 */ 0xFF, 0x00, 0x00, 0x00, 0x02, 0xFF, 0xD6, 0x2D, 0x02, 0x00, 0xFF, 0xD6, 0x2D, 0x02, 0x00, 0x01, +/* 0000CE80 */ 0x08, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFF, 0xD6, 0x2D, 0x02, 0x00, 0xFE, 0x08, 0x04, 0xFE, 0x08, +/* 0000CE90 */ 0x04, 0x02, 0xFE, 0xE2, 0x03, 0xFE, 0x10, 0x02, 0x06, 0x07, 0x0B, 0x05, 0x3D, 0x3D, 0x05, 0x07, +/* 0000CEA0 */ 0x04, 0x04, 0x04, 0x04, 0x08, 0x09, 0x0A, 0x06, 0xFE, 0x94, 0x03, 0x05, 0xFE, 0xC6, 0x04, 0x06, +/* 0000CEB0 */ 0xFE, 0x2F, 0x03, 0x07, 0x08, 0xC5, 0x58, 0x07, 0x2A, 0x0B, 0x07, 0x15, 0x03, 0x00, 0x0B, 0x02, +/* 0000CEC0 */ 0x09, 0x18, 0x00, 0x8E, 0x05, 0x03, 0x0C, 0x6C, 0x0B, 0x0C, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 0000CED0 */ 0x0C, 0x59, 0x01, 0x03, 0x59, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x0B, 0x8E, 0x05, 0x03, 0x0C, 0x6C, +/* 0000CEE0 */ 0x0B, 0x0C, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0C, 0x59, 0x01, 0x07, 0x1F, 0x02, 0x0B, 0x0B, +/* 0000CEF0 */ 0x96, 0x02, 0x0B, 0x92, 0x02, 0x0B, 0xA8, 0x0C, 0x14, 0x0B, 0x00, 0x0B, 0x0C, 0x92, 0x02, 0x0B, +/* 0000CF00 */ 0x5E, 0x0B, 0x0B, 0x02, 0x0F, 0x18, 0x00, 0x0B, 0x8E, 0x05, 0x03, 0x0C, 0x6C, 0x0B, 0x0C, 0x03, +/* 0000CF10 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x0C, 0x59, 0x01, 0x03, 0x59, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x0B, +/* 0000CF20 */ 0x8E, 0x05, 0x04, 0x0B, 0x07, 0x03, 0x00, 0x59, 0x00, 0x06, 0xCD, 0x0C, 0x59, 0x01, 0x0C, 0x59, +/* 0000CF30 */ 0x02, 0x05, 0x1F, 0x03, 0x0B, 0x0B, 0x96, 0x03, 0x0B, 0x8E, 0x05, 0x06, 0x0B, 0x07, 0x04, 0x00, +/* 0000CF40 */ 0x59, 0x00, 0x06, 0x8E, 0x05, 0x17, 0x0C, 0x59, 0x01, 0x0C, 0x8E, 0x03, 0x02, 0x0C, 0x59, 0x02, +/* 0000CF50 */ 0x0C, 0xD6, 0x00, 0x0C, 0x59, 0x03, 0x0C, 0x1F, 0x04, 0xFF, 0x0B, 0x8E, 0x05, 0x04, 0x0B, 0x07, +/* 0000CF60 */ 0x03, 0x00, 0x59, 0x00, 0x06, 0x92, 0x03, 0x0C, 0x59, 0x01, 0x0C, 0xCD, 0x0C, 0x59, 0x02, 0x0C, +/* 0000CF70 */ 0x1F, 0x03, 0x00, 0x0B, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB6, 0x02, 0xFE, 0x05, +/* 0000CF80 */ 0x02, 0xFE, 0x37, 0x02, 0xFE, 0xB6, 0x02, 0xFF, 0x0B, 0x2E, 0x02, 0x00, 0x09, 0x02, 0x00, 0x00, +/* 0000CF90 */ 0x00, 0x0B, 0x00, 0x3C, 0x00, 0x18, 0x00, 0x8C, 0x00, 0x18, 0x00, 0x4B, 0x00, 0x15, 0x00, 0x69, +/* 0000CFA0 */ 0x00, 0x18, 0x00, 0x8D, 0x00, 0x19, 0x00, 0x47, 0x00, 0x22, 0x00, 0x44, 0x01, 0x1E, 0x00, 0x3E, +/* 0000CFB0 */ 0x00, 0x00, 0xB6, 0xCF, 0x00, 0x00, 0x7F, 0x4C, 0x00, 0x01, 0x00, 0x10, 0x03, 0x00, 0xFE, 0x46, +/* 0000CFC0 */ 0x0C, 0x48, 0xA2, 0x41, 0xD1, 0x00, 0xB0, 0xFF, 0x8B, 0x30, 0x02, 0x00, 0xFF, 0x8B, 0x30, 0x02, +/* 0000CFD0 */ 0x00, 0x41, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0x8B, 0x30, 0x02, 0x00, 0xF8, 0xF8, 0x05, 0x04, +/* 0000CFE0 */ 0x06, 0x0D, 0x0D, 0x06, 0x02, 0x05, 0x05, 0xFE, 0xC7, 0x04, 0x06, 0xFE, 0xD6, 0x03, 0x2C, 0x8E, +/* 0000CFF0 */ 0x01, 0x02, 0x06, 0x2D, 0x07, 0x02, 0x04, 0x2B, 0x06, 0x06, 0x07, 0x15, 0x03, 0x00, 0x06, 0x03, +/* 0000D000 */ 0x09, 0x14, 0x00, 0x8E, 0x01, 0x03, 0x06, 0x8E, 0x01, 0x02, 0x07, 0x2D, 0x08, 0x02, 0x04, 0x97, +/* 0000D010 */ 0x07, 0x07, 0x08, 0x9C, 0x07, 0x06, 0x04, 0xA8, 0x00, 0x24, 0x00, 0xFF, 0xBB, 0x30, 0x02, 0x00, +/* 0000D020 */ 0x03, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x5A, 0x00, 0x16, 0x00, 0x6D, 0x00, 0x00, 0x7F, 0x5C, +/* 0000D030 */ 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x20, 0x0C, 0x10, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x15, +/* 0000D040 */ 0x04, 0xAE, 0xFF, 0x61, 0x27, 0x02, 0x00, 0xFF, 0x61, 0x27, 0x02, 0x00, 0x09, 0xFE, 0x00, 0x90, +/* 0000D050 */ 0x02, 0x02, 0xFF, 0x61, 0x27, 0x02, 0x00, 0xFE, 0x7C, 0x02, 0xFE, 0x7C, 0x02, 0x07, 0x06, 0x0A, +/* 0000D060 */ 0x07, 0x34, 0x32, 0x05, 0x03, 0x06, 0x06, 0x06, 0x06, 0x09, 0x06, 0xFE, 0x94, 0x03, 0x05, 0xFE, +/* 0000D070 */ 0x22, 0x04, 0x06, 0xFE, 0x2F, 0x03, 0x08, 0xAC, 0x58, 0x07, 0x8E, 0x05, 0x24, 0x0B, 0x6C, 0x0A, +/* 0000D080 */ 0x0B, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0B, 0x59, 0x01, 0x06, 0x1F, 0x02, 0x0A, 0x0A, 0x45, +/* 0000D090 */ 0x06, 0x0A, 0x2A, 0x0A, 0x07, 0x15, 0x03, 0x00, 0x0A, 0x02, 0x09, 0x18, 0x00, 0x8E, 0x05, 0x03, +/* 0000D0A0 */ 0x0B, 0x6C, 0x0A, 0x0B, 0x01, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0B, 0x59, 0x01, 0x03, 0x59, 0x02, +/* 0000D0B0 */ 0x04, 0x1F, 0x03, 0xFF, 0x0A, 0x8E, 0x05, 0x03, 0x0B, 0x6C, 0x0A, 0x0B, 0x02, 0x07, 0x02, 0x00, +/* 0000D0C0 */ 0x59, 0x00, 0x0B, 0x59, 0x01, 0x07, 0x1F, 0x02, 0x0A, 0x0A, 0x45, 0x08, 0x0A, 0xA8, 0x0A, 0x14, +/* 0000D0D0 */ 0x08, 0x00, 0x08, 0x0A, 0x5E, 0x0A, 0x08, 0x03, 0x0F, 0x18, 0x00, 0x0A, 0x8E, 0x05, 0x03, 0x0B, +/* 0000D0E0 */ 0x6C, 0x0A, 0x0B, 0x04, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0B, 0x59, 0x01, 0x03, 0x59, 0x02, 0x04, +/* 0000D0F0 */ 0x1F, 0x03, 0xFF, 0x0A, 0x8E, 0x05, 0x0C, 0x0A, 0x07, 0x02, 0x00, 0x59, 0x00, 0x05, 0x8E, 0x05, +/* 0000D100 */ 0x03, 0x0C, 0x6C, 0x0B, 0x0C, 0x05, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0C, 0x59, 0x01, 0x06, 0x59, +/* 0000D110 */ 0x02, 0x08, 0x1F, 0x03, 0x0B, 0x0B, 0x59, 0x01, 0x0B, 0x1F, 0x02, 0x00, 0x0A, 0x09, 0x02, 0x00, +/* 0000D120 */ 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x23, 0x03, 0xFE, 0xB6, 0x02, 0xFE, 0x05, 0x02, 0xFE, 0x37, 0x02, +/* 0000D130 */ 0xFE, 0xB6, 0x02, 0xFE, 0xF8, 0x01, 0xFF, 0x8A, 0x27, 0x02, 0x00, 0x08, 0x02, 0x00, 0x00, 0x00, +/* 0000D140 */ 0x18, 0x00, 0x2F, 0x00, 0x0B, 0x00, 0x38, 0x00, 0x18, 0x00, 0x7C, 0x00, 0x18, 0x00, 0x47, 0x00, +/* 0000D150 */ 0x0F, 0x00, 0x65, 0x00, 0x18, 0x00, 0x7C, 0x00, 0x2E, 0x00, 0x47, 0x00, 0x00, 0x7F, 0x5C, 0x00, +/* 0000D160 */ 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x04, 0x0C, 0x10, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x2F, 0x03, +/* 0000D170 */ 0xAD, 0xFF, 0xEB, 0x22, 0x02, 0x00, 0xFF, 0xEB, 0x22, 0x02, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x03, +/* 0000D180 */ 0x01, 0xFF, 0xEB, 0x22, 0x02, 0x00, 0xFE, 0x1E, 0x04, 0xFE, 0x1E, 0x04, 0x09, 0x05, 0x0B, 0x05, +/* 0000D190 */ 0x5E, 0x57, 0x05, 0x0A, 0x06, 0x06, 0x06, 0x06, 0x0A, 0x08, 0x06, 0xFE, 0x2F, 0x03, 0x07, 0xFE, +/* 0000D1A0 */ 0x30, 0x01, 0x58, 0x07, 0x4E, 0x08, 0x4E, 0x09, 0x15, 0x05, 0x00, 0x05, 0x02, 0xA8, 0x0B, 0x45, +/* 0000D1B0 */ 0x05, 0x0B, 0x15, 0x05, 0x00, 0x06, 0x02, 0xA8, 0x0B, 0x45, 0x06, 0x0B, 0x4E, 0x08, 0x4E, 0x09, +/* 0000D1C0 */ 0x8E, 0x05, 0x07, 0x0B, 0x14, 0x0A, 0x00, 0x07, 0x0B, 0xA8, 0x0B, 0x14, 0x03, 0x00, 0x07, 0x0B, +/* 0000D1D0 */ 0x09, 0x16, 0x00, 0x8E, 0x01, 0x02, 0x0B, 0x4A, 0x0B, 0x07, 0x03, 0x00, 0x59, 0x01, 0x05, 0x59, +/* 0000D1E0 */ 0x02, 0x06, 0xC4, 0x03, 0x00, 0x0B, 0x09, 0xE7, 0x00, 0x8E, 0x05, 0x24, 0x0C, 0x6C, 0x0B, 0x0C, +/* 0000D1F0 */ 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0C, 0x59, 0x01, 0x07, 0x1F, 0x02, 0x0B, 0x0B, 0x45, 0x08, +/* 0000D200 */ 0x0B, 0x8E, 0x05, 0x12, 0x0B, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x08, 0x1F, 0x02, +/* 0000D210 */ 0x0B, 0x0B, 0x0F, 0x15, 0x00, 0x0B, 0x8E, 0x05, 0x03, 0x0C, 0x6C, 0x0B, 0x0C, 0x01, 0x07, 0x02, +/* 0000D220 */ 0x00, 0x59, 0x00, 0x0C, 0x59, 0x01, 0x03, 0x1F, 0x02, 0xFF, 0x0B, 0x8E, 0x05, 0x03, 0x0C, 0x6C, +/* 0000D230 */ 0x0B, 0x0C, 0x02, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0C, 0x59, 0x01, 0x08, 0x1F, 0x02, 0x0B, 0x0B, +/* 0000D240 */ 0x45, 0x09, 0x0B, 0xA8, 0x0B, 0x14, 0x03, 0x00, 0x09, 0x0B, 0x09, 0x31, 0x00, 0x8E, 0x05, 0x04, +/* 0000D250 */ 0x0B, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0xCD, 0x0C, 0x59, 0x01, 0x0C, 0x59, 0x02, 0x04, 0x1F, +/* 0000D260 */ 0x03, 0x0B, 0x0B, 0x45, 0x09, 0x0B, 0x8E, 0x05, 0x03, 0x0C, 0x6C, 0x0B, 0x0C, 0x03, 0x07, 0x03, +/* 0000D270 */ 0x00, 0x59, 0x00, 0x0C, 0x59, 0x01, 0x08, 0x59, 0x02, 0x09, 0x1F, 0x03, 0xFF, 0x0B, 0x8E, 0x02, +/* 0000D280 */ 0x02, 0x0B, 0x4A, 0x0B, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x09, 0x59, 0x02, 0x05, +/* 0000D290 */ 0x59, 0x03, 0x06, 0x1F, 0x04, 0xFF, 0x0B, 0x45, 0x0B, 0x09, 0x8E, 0x05, 0x06, 0x0C, 0x07, 0x04, +/* 0000D2A0 */ 0x00, 0x59, 0x00, 0x02, 0x8E, 0x05, 0x1A, 0x0D, 0x59, 0x01, 0x0D, 0x8E, 0x01, 0x03, 0x0D, 0x4A, +/* 0000D2B0 */ 0x0D, 0x59, 0x02, 0x0D, 0x59, 0x03, 0x08, 0x1F, 0x04, 0x0C, 0x0C, 0x76, 0x0C, 0x0B, 0x04, 0x5E, +/* 0000D2C0 */ 0x0B, 0x09, 0x05, 0x82, 0x0B, 0x0B, 0x06, 0x01, 0x45, 0x00, 0x08, 0x09, 0x02, 0x00, 0xA8, 0x00, +/* 0000D2D0 */ 0x24, 0x00, 0xFE, 0x21, 0x03, 0xFE, 0xB2, 0x02, 0xFE, 0x05, 0x02, 0xFE, 0x06, 0x02, 0xFE, 0x57, +/* 0000D2E0 */ 0x02, 0xFE, 0x57, 0x02, 0xFF, 0x01, 0x23, 0x02, 0x00, 0x10, 0x06, 0x00, 0x00, 0x00, 0x0A, 0x00, +/* 0000D2F0 */ 0x15, 0x00, 0x0E, 0x00, 0x2B, 0x00, 0x13, 0x00, 0x43, 0x00, 0x16, 0x00, 0x56, 0x00, 0x18, 0x00, +/* 0000D300 */ 0x38, 0x00, 0x15, 0x00, 0x38, 0x00, 0x15, 0x00, 0x9B, 0x00, 0x18, 0x00, 0x47, 0x00, 0x0A, 0x00, +/* 0000D310 */ 0x3A, 0x00, 0x19, 0x00, 0x3F, 0x00, 0x18, 0x00, 0x58, 0x00, 0x19, 0x00, 0x4D, 0x00, 0x28, 0x00, +/* 0000D320 */ 0x65, 0x00, 0x09, 0x00, 0x3D, 0x00, 0x08, 0x00, 0x1C, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x07, +/* 0000D330 */ 0x10, 0x03, 0x00, 0xFE, 0xF7, 0x0B, 0x62, 0xA0, 0x41, 0xF1, 0x00, 0xAC, 0xFF, 0x9D, 0x20, 0x02, +/* 0000D340 */ 0x00, 0xFF, 0x9D, 0x20, 0x02, 0x00, 0x0B, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFF, 0x9D, 0x20, 0x02, +/* 0000D350 */ 0x00, 0xFE, 0xE1, 0x01, 0xFE, 0xE1, 0x01, 0x08, 0x09, 0x0E, 0x07, 0x38, 0x36, 0x04, 0x06, 0x03, +/* 0000D360 */ 0x03, 0x03, 0x03, 0x01, 0x0D, 0x07, 0x06, 0xFE, 0xA4, 0x03, 0x05, 0xFE, 0x0F, 0x04, 0x06, 0xFE, +/* 0000D370 */ 0x0E, 0x04, 0x08, 0x01, 0x00, 0x01, 0x01, 0xB6, 0xB1, 0x0B, 0x58, 0x09, 0x2A, 0x0E, 0x09, 0x15, +/* 0000D380 */ 0x03, 0x00, 0x0E, 0x03, 0x09, 0x25, 0x00, 0x8E, 0x04, 0x0B, 0x0E, 0xE3, 0x0E, 0x09, 0x0E, 0x00, +/* 0000D390 */ 0x0F, 0x18, 0x00, 0x0E, 0x8E, 0x04, 0x03, 0x0F, 0x6C, 0x0E, 0x0F, 0x00, 0x07, 0x03, 0x00, 0x59, +/* 0000D3A0 */ 0x00, 0x0F, 0x59, 0x01, 0x04, 0x59, 0x02, 0x05, 0x1F, 0x03, 0xFF, 0x0E, 0x8E, 0x04, 0x04, 0x0E, +/* 0000D3B0 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x06, 0xCD, 0x0F, 0x59, 0x01, 0x0F, 0x59, 0x02, 0x02, 0x1F, 0x03, +/* 0000D3C0 */ 0x0E, 0x0E, 0x45, 0x0A, 0x0E, 0x8E, 0x01, 0x02, 0x0E, 0x4A, 0x0E, 0x07, 0x04, 0x00, 0x59, 0x00, +/* 0000D3D0 */ 0x06, 0x59, 0x01, 0x0A, 0x97, 0x0F, 0x0B, 0x07, 0x59, 0x02, 0x0F, 0x97, 0x0F, 0x0B, 0x08, 0x59, +/* 0000D3E0 */ 0x03, 0x0F, 0x1F, 0x04, 0xFF, 0x0E, 0x8E, 0x04, 0x24, 0x0F, 0x6C, 0x0E, 0x0F, 0x01, 0x07, 0x02, +/* 0000D3F0 */ 0x00, 0x59, 0x00, 0x0F, 0x59, 0x01, 0x09, 0x1F, 0x02, 0x0E, 0x0E, 0x45, 0x0C, 0x0E, 0x8E, 0x04, +/* 0000D400 */ 0x0C, 0x0E, 0x07, 0x02, 0x00, 0x59, 0x00, 0x06, 0x8E, 0x04, 0x03, 0x10, 0x6C, 0x0F, 0x10, 0x02, +/* 0000D410 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x10, 0x59, 0x01, 0x0C, 0x59, 0x02, 0x0A, 0x1F, 0x03, 0x0F, 0x0F, +/* 0000D420 */ 0x59, 0x01, 0x0F, 0x1F, 0x02, 0x00, 0x0E, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB6, +/* 0000D430 */ 0x02, 0xFE, 0x23, 0x03, 0xFE, 0xF8, 0x01, 0xFF, 0xBB, 0x20, 0x02, 0x00, 0x07, 0x04, 0x00, 0x00, +/* 0000D440 */ 0x00, 0x18, 0x00, 0x53, 0x00, 0x18, 0x00, 0x70, 0x00, 0x19, 0x00, 0x3A, 0x00, 0x21, 0x00, 0x52, +/* 0000D450 */ 0x00, 0x18, 0x00, 0x31, 0x00, 0x2E, 0x00, 0x42, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x43, 0x50, +/* 0000D460 */ 0x03, 0x00, 0xFE, 0x7D, 0x0B, 0x0C, 0xB3, 0x41, 0xC1, 0x00, 0xFE, 0x0B, 0x04, 0xAB, 0xFF, 0x49, +/* 0000D470 */ 0x07, 0x02, 0x00, 0xFF, 0x49, 0x07, 0x02, 0x00, 0x45, 0xFE, 0x00, 0x90, 0x04, 0x04, 0xFF, 0x49, +/* 0000D480 */ 0x07, 0x02, 0x00, 0xFE, 0xF0, 0x18, 0xFE, 0xF0, 0x18, 0x18, 0x23, 0x37, 0x07, 0xFE, 0x82, 0x01, +/* 0000D490 */ 0xFE, 0x64, 0x01, 0x04, 0x10, 0x25, 0x25, 0x25, 0x25, 0x01, 0x36, 0x37, 0x06, 0xFE, 0x94, 0x03, +/* 0000D4A0 */ 0x06, 0xFE, 0xBA, 0x04, 0x08, 0x06, 0xFE, 0x2F, 0x03, 0x0B, 0x06, 0xFE, 0xD6, 0x03, 0x07, 0x06, +/* 0000D4B0 */ 0xFE, 0xE0, 0x03, 0x06, 0xFE, 0xA3, 0x03, 0x05, 0xFE, 0x9C, 0x03, 0x05, 0xFE, 0xDF, 0x03, 0x06, +/* 0000D4C0 */ 0xFE, 0x18, 0x04, 0x06, 0xFE, 0x19, 0x04, 0x06, 0xFE, 0x1A, 0x04, 0x06, 0xFE, 0x1B, 0x04, 0x06, +/* 0000D4D0 */ 0xFE, 0x1C, 0x04, 0x06, 0xFE, 0x1D, 0x04, 0x06, 0xFE, 0x1E, 0x04, 0x06, 0xFE, 0x37, 0x03, 0x06, +/* 0000D4E0 */ 0xFE, 0xDA, 0x03, 0x01, 0x01, 0x01, 0x15, 0x06, 0xFE, 0xDD, 0x03, 0x06, 0xFE, 0xDE, 0x03, 0x06, +/* 0000D4F0 */ 0xFE, 0x1F, 0x04, 0x06, 0xFE, 0xA2, 0x03, 0x06, 0xFE, 0x17, 0x04, 0x06, 0xFE, 0xDB, 0x03, 0x01, +/* 0000D500 */ 0x00, 0x01, 0x14, 0x01, 0x03, 0x06, 0xFE, 0xDC, 0x03, 0x05, 0xFE, 0xC4, 0x04, 0xFE, 0xED, 0x04, +/* 0000D510 */ 0x2A, 0x38, 0x23, 0x0D, 0x03, 0x00, 0x38, 0x02, 0x09, 0x12, 0x00, 0x8E, 0x04, 0x03, 0x39, 0x6C, +/* 0000D520 */ 0x38, 0x39, 0x00, 0x07, 0x01, 0x00, 0x59, 0x00, 0x39, 0x1F, 0x01, 0xFF, 0x38, 0x8E, 0x04, 0x06, +/* 0000D530 */ 0x38, 0x07, 0x04, 0x00, 0x59, 0x00, 0x04, 0x8E, 0x04, 0x14, 0x39, 0x59, 0x01, 0x39, 0x59, 0x02, +/* 0000D540 */ 0x23, 0x59, 0x03, 0x03, 0x1F, 0x04, 0x38, 0x38, 0x0E, 0x20, 0x00, 0x38, 0x5E, 0x38, 0x23, 0x01, +/* 0000D550 */ 0x0E, 0x18, 0x00, 0x38, 0x8E, 0x04, 0x03, 0x39, 0x6C, 0x38, 0x39, 0x02, 0x07, 0x03, 0x00, 0x59, +/* 0000D560 */ 0x00, 0x39, 0x59, 0x01, 0x05, 0x59, 0x02, 0x05, 0x1F, 0x03, 0xFF, 0x38, 0x76, 0x06, 0x23, 0x03, +/* 0000D570 */ 0x2A, 0x38, 0x25, 0x14, 0x03, 0x00, 0x38, 0x07, 0x09, 0x1C, 0x00, 0x8E, 0x04, 0x04, 0x38, 0x07, +/* 0000D580 */ 0x03, 0x00, 0x59, 0x00, 0x04, 0xCD, 0x39, 0x59, 0x01, 0x39, 0x59, 0x02, 0x08, 0x1F, 0x03, 0x38, +/* 0000D590 */ 0x38, 0x45, 0x25, 0x38, 0x09, 0x18, 0x00, 0x8E, 0x04, 0x24, 0x39, 0x6C, 0x38, 0x39, 0x04, 0x07, +/* 0000D5A0 */ 0x02, 0x00, 0x59, 0x00, 0x39, 0x59, 0x01, 0x25, 0x1F, 0x02, 0x38, 0x38, 0x45, 0x25, 0x38, 0x8E, +/* 0000D5B0 */ 0x03, 0x02, 0x38, 0x4A, 0x38, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x25, 0x59, 0x02, +/* 0000D5C0 */ 0x09, 0x59, 0x03, 0x0A, 0xCF, 0x39, 0x02, 0xA1, 0x00, 0x0B, 0x39, 0xA1, 0x01, 0x0C, 0x39, 0x59, +/* 0000D5D0 */ 0x04, 0x39, 0x59, 0x05, 0x0C, 0x1F, 0x06, 0x38, 0x38, 0x45, 0x28, 0x38, 0x8E, 0x03, 0x02, 0x38, +/* 0000D5E0 */ 0x4A, 0x38, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x25, 0x59, 0x02, 0x0D, 0x59, 0x03, +/* 0000D5F0 */ 0x0A, 0xCF, 0x39, 0x03, 0xA1, 0x00, 0x0E, 0x39, 0xA1, 0x01, 0x0F, 0x39, 0xA1, 0x02, 0x10, 0x39, +/* 0000D600 */ 0x59, 0x04, 0x39, 0x59, 0x05, 0x0E, 0x1F, 0x06, 0x38, 0x38, 0x45, 0x29, 0x38, 0x8E, 0x04, 0x03, +/* 0000D610 */ 0x38, 0x5E, 0x38, 0x38, 0x05, 0x97, 0x38, 0x38, 0x29, 0x45, 0x2A, 0x38, 0x8E, 0x03, 0x02, 0x38, +/* 0000D620 */ 0x4A, 0x38, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x25, 0x59, 0x02, 0x10, 0x59, 0x03, +/* 0000D630 */ 0x0A, 0xA8, 0x39, 0x59, 0x04, 0x39, 0xA8, 0x39, 0x59, 0x05, 0x39, 0x1F, 0x06, 0x38, 0x38, 0x45, +/* 0000D640 */ 0x2B, 0x38, 0x8E, 0x03, 0x02, 0x38, 0x4A, 0x38, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, +/* 0000D650 */ 0x25, 0x59, 0x02, 0x11, 0x59, 0x03, 0x0A, 0xCF, 0x39, 0x03, 0xA1, 0x00, 0x12, 0x39, 0xA1, 0x01, +/* 0000D660 */ 0x13, 0x39, 0xA1, 0x02, 0x14, 0x39, 0x59, 0x04, 0x39, 0x59, 0x05, 0x13, 0x1F, 0x06, 0x38, 0x38, +/* 0000D670 */ 0x45, 0x2C, 0x38, 0xA8, 0x38, 0x45, 0x2D, 0x38, 0x8E, 0x03, 0x03, 0x38, 0x4A, 0x38, 0x07, 0x06, +/* 0000D680 */ 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x25, 0x59, 0x02, 0x15, 0x59, 0x03, 0x16, 0x59, 0x04, 0x17, +/* 0000D690 */ 0x59, 0x05, 0x16, 0x1F, 0x06, 0x38, 0x38, 0x45, 0x2E, 0x38, 0xA8, 0x38, 0x45, 0x2F, 0x38, 0xA8, +/* 0000D6A0 */ 0x38, 0x45, 0x30, 0x38, 0xA8, 0x38, 0x45, 0x31, 0x38, 0x5E, 0x38, 0x25, 0x06, 0x45, 0x32, 0x38, +/* 0000D6B0 */ 0x5E, 0x38, 0x25, 0x07, 0x45, 0x33, 0x38, 0x2A, 0x38, 0x32, 0x15, 0x0B, 0x00, 0x38, 0x07, 0x2A, +/* 0000D6C0 */ 0x38, 0x33, 0x15, 0x03, 0x00, 0x38, 0x07, 0x09, 0x44, 0x00, 0x8E, 0x03, 0x03, 0x38, 0x4A, 0x38, +/* 0000D6D0 */ 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x25, 0x59, 0x02, 0x18, 0x59, 0x03, 0x16, 0x59, +/* 0000D6E0 */ 0x04, 0x17, 0x59, 0x05, 0x16, 0x1F, 0x06, 0x38, 0x38, 0x45, 0x32, 0x38, 0x8E, 0x03, 0x03, 0x38, +/* 0000D6F0 */ 0x4A, 0x38, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x25, 0x59, 0x02, 0x19, 0x59, 0x03, +/* 0000D700 */ 0x32, 0x59, 0x04, 0x17, 0x59, 0x05, 0x17, 0x1F, 0x06, 0x38, 0x38, 0x45, 0x33, 0x38, 0x8E, 0x03, +/* 0000D710 */ 0x02, 0x38, 0x4A, 0x38, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x25, 0x59, 0x02, 0x1A, +/* 0000D720 */ 0x59, 0x03, 0x1B, 0xA8, 0x39, 0x59, 0x04, 0x39, 0x59, 0x05, 0x06, 0x1F, 0x06, 0x38, 0x38, 0x45, +/* 0000D730 */ 0x34, 0x38, 0x8E, 0x03, 0x07, 0x38, 0x4A, 0x38, 0x07, 0x02, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, +/* 0000D740 */ 0x24, 0x1F, 0x02, 0x38, 0x38, 0x45, 0x24, 0x38, 0x8E, 0x04, 0x2A, 0x38, 0x07, 0x05, 0x00, 0x59, +/* 0000D750 */ 0x00, 0x04, 0x59, 0x01, 0x24, 0x59, 0x02, 0x28, 0xCF, 0x39, 0x01, 0xA1, 0x00, 0x1C, 0x39, 0x59, +/* 0000D760 */ 0x03, 0x39, 0x8E, 0x04, 0x2B, 0x39, 0x59, 0x04, 0x39, 0x1F, 0x05, 0x38, 0x38, 0x45, 0x35, 0x38, +/* 0000D770 */ 0x2A, 0x38, 0x2B, 0x15, 0x03, 0x00, 0x38, 0x07, 0x09, 0x3D, 0x00, 0x8E, 0x03, 0x06, 0x38, 0x4A, +/* 0000D780 */ 0x38, 0x07, 0x02, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x2B, 0x1F, 0x02, 0x38, 0x38, 0x0F, 0x26, +/* 0000D790 */ 0x00, 0x38, 0x8E, 0x04, 0x03, 0x39, 0x6C, 0x38, 0x39, 0x08, 0x07, 0x02, 0x00, 0x59, 0x00, 0x39, +/* 0000D7A0 */ 0x8E, 0x04, 0x0C, 0x3A, 0x07, 0x02, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x2B, 0x1F, 0x02, 0x3A, +/* 0000D7B0 */ 0x3A, 0x59, 0x01, 0x3A, 0x1F, 0x02, 0xFF, 0x38, 0x14, 0x03, 0x00, 0x29, 0x10, 0x09, 0xD2, 0x00, +/* 0000D7C0 */ 0x2A, 0x38, 0x2B, 0x14, 0x03, 0x00, 0x38, 0x07, 0x09, 0x12, 0x00, 0x8E, 0x04, 0x03, 0x39, 0x6C, +/* 0000D7D0 */ 0x38, 0x39, 0x09, 0x07, 0x01, 0x00, 0x59, 0x00, 0x39, 0x1F, 0x01, 0xFF, 0x38, 0x8E, 0x04, 0x06, +/* 0000D7E0 */ 0x38, 0x07, 0x03, 0x00, 0x59, 0x00, 0x04, 0x8E, 0x04, 0x1F, 0x39, 0x59, 0x01, 0x39, 0x59, 0x02, +/* 0000D7F0 */ 0x2B, 0x1F, 0x03, 0x38, 0x38, 0x45, 0x2B, 0x38, 0xE7, 0x1C, 0x00, 0x8E, 0x04, 0x03, 0x39, 0x6C, +/* 0000D800 */ 0x38, 0x39, 0x0A, 0x07, 0x02, 0x00, 0x59, 0x00, 0x39, 0x59, 0x01, 0x2B, 0x1F, 0x02, 0x38, 0x38, +/* 0000D810 */ 0x45, 0x2D, 0x38, 0xEB, 0x09, 0x3B, 0x00, 0xE9, 0x26, 0x06, 0x8E, 0x04, 0x22, 0x38, 0x07, 0x02, +/* 0000D820 */ 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x26, 0x1F, 0x02, 0xFF, 0x38, 0x8E, 0x04, 0x03, 0x39, 0x6C, +/* 0000D830 */ 0x38, 0x39, 0x0B, 0x07, 0x02, 0x00, 0x59, 0x00, 0x39, 0x8E, 0x04, 0x0C, 0x3A, 0x07, 0x02, 0x00, +/* 0000D840 */ 0x59, 0x00, 0x04, 0x59, 0x01, 0x2B, 0x1F, 0x02, 0x3A, 0x3A, 0x59, 0x01, 0x3A, 0x1F, 0x02, 0xFF, +/* 0000D850 */ 0x38, 0xEB, 0x8E, 0x03, 0x03, 0x38, 0x4A, 0x38, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, +/* 0000D860 */ 0x25, 0x59, 0x02, 0x1D, 0x59, 0x03, 0x1E, 0x59, 0x04, 0x1F, 0x59, 0x05, 0x2D, 0x1F, 0x06, 0x38, +/* 0000D870 */ 0x38, 0x45, 0x2F, 0x38, 0x8E, 0x04, 0x10, 0x39, 0x6C, 0x38, 0x39, 0x0C, 0x07, 0x03, 0x00, 0x59, +/* 0000D880 */ 0x00, 0x39, 0x59, 0x01, 0x2D, 0x59, 0x02, 0x2F, 0x1F, 0x03, 0x38, 0x38, 0x45, 0x31, 0x38, 0x09, +/* 0000D890 */ 0x6D, 0x00, 0xA8, 0x38, 0x45, 0x2B, 0x38, 0xA8, 0x38, 0x45, 0x2C, 0x38, 0x8E, 0x03, 0x03, 0x38, +/* 0000D8A0 */ 0x4A, 0x38, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x25, 0x59, 0x02, 0x1D, 0x59, 0x03, +/* 0000D8B0 */ 0x1E, 0x59, 0x04, 0x1F, 0x59, 0x05, 0x1E, 0x1F, 0x06, 0x38, 0x38, 0x45, 0x2F, 0x38, 0x14, 0x03, +/* 0000D8C0 */ 0x00, 0x29, 0x0F, 0x09, 0x1E, 0x00, 0x8E, 0x04, 0x10, 0x39, 0x6C, 0x38, 0x39, 0x0D, 0x07, 0x03, +/* 0000D8D0 */ 0x00, 0x59, 0x00, 0x39, 0x59, 0x01, 0x2F, 0x59, 0x02, 0x1E, 0x1F, 0x03, 0x38, 0x38, 0x45, 0x31, +/* 0000D8E0 */ 0x38, 0x09, 0x1B, 0x00, 0x8E, 0x04, 0x10, 0x39, 0x6C, 0x38, 0x39, 0x0E, 0x07, 0x03, 0x00, 0x59, +/* 0000D8F0 */ 0x00, 0x39, 0x59, 0x01, 0x2F, 0x59, 0x02, 0x20, 0x1F, 0x03, 0x38, 0x38, 0x45, 0x31, 0x38, 0x8E, +/* 0000D900 */ 0x03, 0x03, 0x38, 0x4A, 0x38, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x25, 0x59, 0x02, +/* 0000D910 */ 0x21, 0x59, 0x03, 0x2F, 0x59, 0x04, 0x1F, 0x59, 0x05, 0x31, 0x1F, 0x06, 0x38, 0x38, 0x45, 0x30, +/* 0000D920 */ 0x38, 0x76, 0x28, 0x23, 0x0F, 0x5E, 0x38, 0x35, 0x10, 0x76, 0x38, 0x23, 0x11, 0x76, 0x29, 0x23, +/* 0000D930 */ 0x12, 0xA8, 0x38, 0x15, 0x03, 0x00, 0x2B, 0x38, 0x09, 0x04, 0x00, 0x76, 0x2B, 0x23, 0x13, 0xA8, +/* 0000D940 */ 0x38, 0x15, 0x03, 0x00, 0x2C, 0x38, 0x09, 0x14, 0x00, 0x76, 0x2C, 0x23, 0x14, 0x8E, 0x04, 0x03, +/* 0000D950 */ 0x38, 0x5E, 0x38, 0x38, 0x15, 0x97, 0x38, 0x38, 0x2C, 0x76, 0x38, 0x23, 0x16, 0x76, 0x2E, 0x23, +/* 0000D960 */ 0x17, 0x76, 0x2F, 0x23, 0x18, 0x76, 0x30, 0x23, 0x19, 0xA8, 0x38, 0x15, 0x03, 0x00, 0x33, 0x38, +/* 0000D970 */ 0x09, 0x08, 0x00, 0x76, 0x32, 0x23, 0x1A, 0x76, 0x33, 0x23, 0x1B, 0x76, 0x2A, 0x23, 0x1C, 0x76, +/* 0000D980 */ 0x34, 0x23, 0x1D, 0xE7, 0x19, 0x00, 0x8E, 0x04, 0x03, 0x39, 0x6C, 0x38, 0x39, 0x1E, 0x07, 0x02, +/* 0000D990 */ 0x00, 0x59, 0x00, 0x39, 0x59, 0x01, 0x23, 0x1F, 0x02, 0xFF, 0x38, 0xEB, 0x09, 0x27, 0x00, 0xE9, +/* 0000D9A0 */ 0x27, 0x06, 0x8E, 0x04, 0x22, 0x38, 0x07, 0x02, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x27, 0x1F, +/* 0000D9B0 */ 0x02, 0xFF, 0x38, 0x8E, 0x04, 0x03, 0x39, 0x6C, 0x38, 0x39, 0x1F, 0x07, 0x01, 0x00, 0x59, 0x00, +/* 0000D9C0 */ 0x39, 0x1F, 0x01, 0xFF, 0x38, 0xEB, 0x5E, 0x38, 0x23, 0x20, 0x0F, 0x04, 0x00, 0x38, 0x76, 0x22, +/* 0000D9D0 */ 0x23, 0x21, 0x45, 0x38, 0x23, 0x8E, 0x04, 0x06, 0x39, 0x07, 0x03, 0x00, 0x59, 0x00, 0x04, 0x8E, +/* 0000D9E0 */ 0x04, 0x1E, 0x3A, 0x59, 0x01, 0x3A, 0x5E, 0x3A, 0x23, 0x22, 0x59, 0x02, 0x3A, 0x1F, 0x03, 0x39, +/* 0000D9F0 */ 0x39, 0x76, 0x39, 0x38, 0x23, 0x76, 0x06, 0x23, 0x24, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xAA, 0x02, +/* 0000DA00 */ 0xFE, 0x08, 0x02, 0xFE, 0xAB, 0x02, 0xFE, 0x08, 0x02, 0xFE, 0x21, 0x03, 0xFE, 0x25, 0x02, 0xFE, +/* 0000DA10 */ 0x48, 0x02, 0xFE, 0x45, 0x02, 0xFE, 0xB7, 0x02, 0xFE, 0xB8, 0x02, 0xFE, 0xFB, 0x01, 0xFE, 0xB7, +/* 0000DA20 */ 0x02, 0xFE, 0xFE, 0x00, 0xFE, 0xFE, 0x00, 0xFE, 0xFE, 0x00, 0xFE, 0xC5, 0x04, 0xFE, 0x0D, 0x02, +/* 0000DA30 */ 0xFE, 0x09, 0x02, 0xFE, 0x64, 0x02, 0xFE, 0x33, 0x02, 0xFE, 0x34, 0x02, 0xFE, 0x26, 0x02, 0xFE, +/* 0000DA40 */ 0x35, 0x02, 0xFE, 0x3B, 0x02, 0xFE, 0x3A, 0x02, 0xFE, 0x38, 0x02, 0xFE, 0x3C, 0x02, 0xFE, 0x39, +/* 0000DA50 */ 0x02, 0xFE, 0x36, 0x02, 0xFE, 0x3F, 0x02, 0xFE, 0xF9, 0x01, 0xFE, 0xAD, 0x02, 0xFE, 0x3D, 0x02, +/* 0000DA60 */ 0xFE, 0x3D, 0x02, 0xFE, 0x3D, 0x02, 0xFE, 0x3D, 0x02, 0xFE, 0x37, 0x02, 0xFF, 0x9E, 0x07, 0x02, +/* 0000DA70 */ 0x00, 0x46, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3B, 0x00, 0x12, 0x00, 0x3F, 0x00, 0x27, 0x00, +/* 0000DA80 */ 0x9B, 0x00, 0x18, 0x00, 0x6D, 0x00, 0x04, 0x00, 0x61, 0x00, 0x0B, 0x00, 0x3A, 0x00, 0x1C, 0x00, +/* 0000DA90 */ 0x4F, 0x00, 0x18, 0x00, 0x49, 0x00, 0x2D, 0x00, 0x71, 0x00, 0x31, 0x00, 0x73, 0x00, 0x0F, 0x00, +/* 0000DAA0 */ 0x49, 0x00, 0x26, 0x00, 0x5F, 0x00, 0x31, 0x00, 0x7D, 0x00, 0x05, 0x00, 0x31, 0x00, 0x22, 0x00, +/* 0000DAB0 */ 0x67, 0x00, 0x05, 0x00, 0x37, 0x00, 0x05, 0x00, 0x37, 0x00, 0x05, 0x00, 0x3F, 0x00, 0x07, 0x00, +/* 0000DAC0 */ 0x51, 0x00, 0x07, 0x00, 0x52, 0x00, 0x13, 0x00, 0x7E, 0x00, 0x22, 0x00, 0x6F, 0x00, 0x22, 0x00, +/* 0000DAD0 */ 0x96, 0x00, 0x24, 0x00, 0x9A, 0x00, 0x16, 0x00, 0x41, 0x00, 0x28, 0x00, 0xA2, 0x00, 0x22, 0x00, +/* 0000DAE0 */ 0x62, 0x00, 0x26, 0x00, 0x58, 0x00, 0x08, 0x00, 0x30, 0x00, 0x0B, 0x00, 0x3F, 0x00, 0x12, 0x00, +/* 0000DAF0 */ 0x4F, 0x00, 0x1E, 0x00, 0x74, 0x00, 0x1E, 0x00, 0x4A, 0x00, 0x01, 0x00, 0x24, 0x00, 0x11, 0x00, +/* 0000DB00 */ 0x2E, 0x00, 0x27, 0x00, 0x5F, 0x00, 0x22, 0x00, 0x76, 0x00, 0x1E, 0x00, 0x7D, 0x00, 0x05, 0x00, +/* 0000DB10 */ 0x2A, 0x00, 0x05, 0x00, 0x31, 0x00, 0x22, 0x00, 0x69, 0x00, 0x08, 0x00, 0x33, 0x00, 0x1E, 0x00, +/* 0000DB20 */ 0x78, 0x00, 0x1B, 0x00, 0x7B, 0x00, 0x22, 0x00, 0xC6, 0x00, 0x04, 0x00, 0x38, 0x00, 0x08, 0x00, +/* 0000DB30 */ 0x43, 0x00, 0x04, 0x00, 0x2F, 0x00, 0x0A, 0x00, 0x32, 0x00, 0x04, 0x00, 0x47, 0x00, 0x0A, 0x00, +/* 0000DB40 */ 0x39, 0x00, 0x04, 0x00, 0x46, 0x00, 0x10, 0x00, 0x80, 0x00, 0x04, 0x00, 0x4C, 0x00, 0x04, 0x00, +/* 0000DB50 */ 0x4E, 0x00, 0x04, 0x00, 0x4F, 0x00, 0x0A, 0x00, 0x42, 0x00, 0x04, 0x00, 0x58, 0x00, 0x04, 0x00, +/* 0000DB60 */ 0x67, 0x00, 0x04, 0x00, 0x40, 0x00, 0x07, 0x00, 0xA9, 0x00, 0x1B, 0x00, 0x3C, 0x00, 0x01, 0x00, +/* 0000DB70 */ 0x20, 0x00, 0x11, 0x00, 0x6B, 0x01, 0x13, 0x00, 0x4A, 0x00, 0x08, 0x00, 0x3B, 0x00, 0x04, 0x00, +/* 0000DB80 */ 0x70, 0x00, 0x23, 0x00, 0x7E, 0x00, 0x06, 0x00, 0x3B, 0x00, 0x00, 0x7E, 0x5C, 0x00, 0xC1, 0x53, +/* 0000DB90 */ 0x50, 0x4B, 0x04, 0xFE, 0x88, 0x0A, 0x14, 0xA0, 0x41, 0xD1, 0x00, 0xA2, 0xFF, 0xF3, 0xD5, 0x01, +/* 0000DBA0 */ 0x00, 0xFF, 0xF3, 0xD5, 0x01, 0x00, 0x06, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFF, 0xF3, 0xD5, 0x01, +/* 0000DBB0 */ 0x00, 0xFE, 0xA8, 0x30, 0xFE, 0xA8, 0x30, 0x0B, 0x16, 0x1A, 0x09, 0x9B, 0x9B, 0x02, 0x09, 0x1A, +/* 0000DBC0 */ 0x1A, 0x1A, 0x1A, 0x05, 0x02, 0x19, 0x1A, 0x08, 0x06, 0xFE, 0x27, 0x03, 0x06, 0xFE, 0xE8, 0x03, +/* 0000DBD0 */ 0x05, 0xFE, 0xE9, 0x03, 0x05, 0xFE, 0xEA, 0x03, 0x05, 0xFE, 0xEB, 0x03, 0x06, 0xFE, 0x38, 0x03, +/* 0000DBE0 */ 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, 0x2B, 0x03, 0x0B, 0x06, 0xFE, 0x2D, 0x03, 0x07, 0x06, 0xFE, +/* 0000DBF0 */ 0xEC, 0x03, 0x0C, 0x06, 0xFE, 0x2C, 0x03, 0x06, 0xFE, 0xED, 0x03, 0x06, 0xFE, 0xEE, 0x03, 0x06, +/* 0000DC00 */ 0xFE, 0xF1, 0x03, 0x06, 0xFE, 0x77, 0x03, 0x05, 0xFE, 0xF0, 0x03, 0xFE, 0x65, 0x02, 0xA8, 0x16, +/* 0000DC10 */ 0xA8, 0x17, 0xA8, 0x18, 0x8E, 0x02, 0x32, 0x1C, 0x14, 0x0C, 0x00, 0x1C, 0x03, 0x8E, 0x02, 0x32, +/* 0000DC20 */ 0x1C, 0x14, 0x03, 0x00, 0x1C, 0x04, 0x09, 0x41, 0x02, 0xE0, 0x00, 0x03, 0x01, 0xB9, 0x1C, 0x00, +/* 0000DC30 */ 0x01, 0x66, 0x01, 0x00, 0x16, 0x1C, 0x95, 0x00, 0x02, 0x16, 0x8E, 0x02, 0x03, 0x1D, 0x6C, 0x1C, +/* 0000DC40 */ 0x1D, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x1D, 0x8E, 0x02, 0x23, 0x1E, 0x07, 0x03, 0x00, 0x59, +/* 0000DC50 */ 0x00, 0x02, 0x59, 0x01, 0x05, 0xB9, 0x20, 0x00, 0x01, 0x66, 0x01, 0x01, 0x1F, 0x20, 0x59, 0x02, +/* 0000DC60 */ 0x1F, 0x1F, 0x03, 0x1E, 0x1E, 0x59, 0x01, 0x1E, 0x8E, 0x02, 0x03, 0x1E, 0x5E, 0x1E, 0x1E, 0x01, +/* 0000DC70 */ 0x5E, 0x1E, 0x1E, 0x02, 0x59, 0x02, 0x1E, 0x1F, 0x03, 0xFF, 0x1C, 0x8E, 0x02, 0x32, 0x1C, 0x14, +/* 0000DC80 */ 0x03, 0x00, 0x1C, 0x03, 0x09, 0xE3, 0x01, 0xE0, 0x01, 0x04, 0x02, 0xB9, 0x1C, 0x00, 0xB8, 0x01, +/* 0000DC90 */ 0x00, 0x00, 0x00, 0x1C, 0x1C, 0x01, 0x66, 0x01, 0x02, 0x17, 0x1C, 0x95, 0x01, 0x02, 0x17, 0x01, +/* 0000DCA0 */ 0x66, 0x01, 0x03, 0x18, 0x1C, 0x95, 0x01, 0x03, 0x18, 0x8E, 0x02, 0x23, 0x1C, 0x07, 0x03, 0x00, +/* 0000DCB0 */ 0x59, 0x00, 0x02, 0x59, 0x01, 0x06, 0x90, 0x01, 0x02, 0x1D, 0x59, 0x02, 0x1D, 0x1F, 0x03, 0xFF, +/* 0000DCC0 */ 0x1C, 0x8E, 0x02, 0x23, 0x1C, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x07, 0x90, 0x01, +/* 0000DCD0 */ 0x03, 0x1D, 0x59, 0x02, 0x1D, 0x1F, 0x03, 0xFF, 0x1C, 0x8E, 0x02, 0x16, 0x1C, 0x07, 0x04, 0x00, +/* 0000DCE0 */ 0x59, 0x00, 0x02, 0x90, 0x01, 0x02, 0x1D, 0x59, 0x01, 0x1D, 0x59, 0x02, 0x08, 0xCE, 0x00, 0x00, +/* 0000DCF0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0x8E, 0x01, 0x13, 0x1E, 0x4A, 0x1E, +/* 0000DD00 */ 0x7A, 0x1E, 0x1D, 0x03, 0x7A, 0x0B, 0x1D, 0x04, 0x7A, 0x0B, 0x1D, 0x05, 0x59, 0x03, 0x1D, 0x1F, +/* 0000DD10 */ 0x04, 0xFF, 0x1C, 0x8E, 0x02, 0x16, 0x1C, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x90, 0x01, 0x02, +/* 0000DD20 */ 0x1D, 0x59, 0x01, 0x1D, 0x59, 0x02, 0x0E, 0xCE, 0x14, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, +/* 0000DD30 */ 0x1D, 0x00, 0x00, 0x00, 0x90, 0x01, 0x02, 0x1E, 0x07, 0x01, 0x00, 0xC4, 0x01, 0x1E, 0x1E, 0x7A, +/* 0000DD40 */ 0x1E, 0x1D, 0x06, 0x7A, 0x0F, 0x1D, 0x07, 0x7A, 0x0F, 0x1D, 0x08, 0x7A, 0x0F, 0x1D, 0x09, 0x59, +/* 0000DD50 */ 0x03, 0x1D, 0x1F, 0x04, 0xFF, 0x1C, 0x8E, 0x02, 0x04, 0x1C, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, +/* 0000DD60 */ 0x90, 0x01, 0x02, 0x1D, 0x5E, 0x1D, 0x1D, 0x0A, 0x59, 0x01, 0x1D, 0x8E, 0x02, 0x09, 0x1D, 0x5E, +/* 0000DD70 */ 0x1D, 0x1D, 0x0B, 0x59, 0x02, 0x1D, 0x1F, 0x03, 0xFF, 0x1C, 0x8E, 0x02, 0x16, 0x1C, 0x07, 0x04, +/* 0000DD80 */ 0x00, 0x59, 0x00, 0x02, 0x90, 0x01, 0x02, 0x1D, 0x5E, 0x1D, 0x1D, 0x0C, 0x59, 0x01, 0x1D, 0x59, +/* 0000DD90 */ 0x02, 0x11, 0xCE, 0x2C, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0x90, +/* 0000DDA0 */ 0x01, 0x02, 0x1E, 0x7A, 0x1E, 0x1D, 0x0D, 0x7A, 0x0B, 0x1D, 0x0E, 0x7A, 0x0F, 0x1D, 0x0F, 0x7A, +/* 0000DDB0 */ 0x0B, 0x1D, 0x10, 0x59, 0x03, 0x1D, 0x1F, 0x04, 0xFF, 0x1C, 0x8E, 0x02, 0x16, 0x1C, 0x07, 0x04, +/* 0000DDC0 */ 0x00, 0x59, 0x00, 0x02, 0x90, 0x01, 0x02, 0x1D, 0x5E, 0x1D, 0x1D, 0x11, 0x59, 0x01, 0x1D, 0x59, +/* 0000DDD0 */ 0x02, 0x12, 0xCE, 0x44, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0xB9, +/* 0000DDE0 */ 0x1F, 0x00, 0xB8, 0x01, 0x00, 0x00, 0x00, 0x1F, 0x1F, 0x01, 0x6A, 0x01, 0x04, 0x1E, 0x1F, 0x1D, +/* 0000DDF0 */ 0x7A, 0x1E, 0x1D, 0x12, 0x7A, 0x0B, 0x1D, 0x13, 0x7A, 0x0F, 0x1D, 0x14, 0x7A, 0x0B, 0x1D, 0x15, +/* 0000DE00 */ 0x59, 0x03, 0x1D, 0x1F, 0x04, 0xFF, 0x1C, 0x8E, 0x02, 0x16, 0x1C, 0x07, 0x04, 0x00, 0x59, 0x00, +/* 0000DE10 */ 0x02, 0x90, 0x01, 0x02, 0x1D, 0x5E, 0x1D, 0x1D, 0x16, 0x59, 0x01, 0x1D, 0x59, 0x02, 0x13, 0xCE, +/* 0000DE20 */ 0x5C, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0x8E, 0x02, 0x23, 0x1E, +/* 0000DE30 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x15, 0xB9, 0x20, 0x00, 0xB8, 0x01, 0x00, 0x00, +/* 0000DE40 */ 0x00, 0x20, 0x20, 0x01, 0x66, 0x01, 0x05, 0x1F, 0x20, 0x59, 0x02, 0x1F, 0x1F, 0x03, 0x1E, 0x1E, +/* 0000DE50 */ 0x7A, 0x1E, 0x1D, 0x17, 0x7A, 0x0F, 0x1D, 0x18, 0x7A, 0x0B, 0x1D, 0x19, 0x59, 0x03, 0x1D, 0x1F, +/* 0000DE60 */ 0x04, 0xFF, 0x1C, 0x90, 0x01, 0x02, 0x00, 0x09, 0x07, 0x00, 0xA8, 0x00, 0x09, 0x02, 0x00, 0xA8, +/* 0000DE70 */ 0x00, 0x24, 0x00, 0x05, 0x70, 0x00, 0x5C, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, +/* 0000DE80 */ 0x00, 0x00, 0x98, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x44, 0x00, +/* 0000DE90 */ 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, +/* 0000DEA0 */ 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x2C, 0x00, 0x00, 0x00, 0x03, 0x04, +/* 0000DEB0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, +/* 0000DEC0 */ 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, +/* 0000DED0 */ 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, +/* 0000DEE0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, +/* 0000DEF0 */ 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0xFE, 0x04, 0x02, 0xFE, 0x2F, 0x02, +/* 0000DF00 */ 0xFE, 0x2E, 0x02, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x97, 0x01, 0xFE, +/* 0000DF10 */ 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x24, 0x01, 0xFE, 0x24, 0x01, 0xFE, 0x24, +/* 0000DF20 */ 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x24, 0x01, +/* 0000DF30 */ 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x24, 0x01, 0xFE, +/* 0000DF40 */ 0x98, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0x02, 0x01, 0x01, 0x00, 0xFE, 0xE5, 0x03, 0x02, +/* 0000DF50 */ 0x02, 0x00, 0xFE, 0x4B, 0x02, 0x01, 0xFE, 0x4F, 0x02, 0xFF, 0x0A, 0xD6, 0x01, 0x00, 0x0E, 0x06, +/* 0000DF60 */ 0x00, 0x00, 0x00, 0x26, 0x00, 0x1F, 0x17, 0x41, 0x00, 0x17, 0x05, 0x2E, 0x00, 0x7A, 0x04, 0x18, +/* 0000DF70 */ 0x00, 0x55, 0x04, 0x18, 0x00, 0x50, 0x00, 0x3A, 0x00, 0x93, 0x00, 0x43, 0x00, 0x91, 0x00, 0x24, +/* 0000DF80 */ 0x00, 0x45, 0x00, 0x40, 0x00, 0x96, 0x00, 0x4D, 0x00, 0xA7, 0x05, 0x5C, 0x00, 0x03, 0x03, 0x07, +/* 0000DF90 */ 0x00, 0x7C, 0x00, 0x07, 0x00, 0x16, 0x00, 0x00, 0x47, 0xE7, 0x00, 0x00, 0x95, 0xE5, 0x00, 0x00, +/* 0000DFA0 */ 0xC7, 0xE3, 0x00, 0x00, 0x37, 0xE2, 0x00, 0x00, 0x97, 0xE0, 0x00, 0x00, 0xB0, 0xDF, 0x00, 0x00, +/* 0000DFB0 */ 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x65, 0x0B, 0x3A, 0xA0, 0x41, 0xD1, 0x00, +/* 0000DFC0 */ 0xA9, 0xFF, 0x75, 0x03, 0x02, 0x00, 0xFF, 0x75, 0x03, 0x02, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x01, +/* 0000DFD0 */ 0x01, 0xFF, 0x75, 0x03, 0x02, 0x00, 0xFE, 0x45, 0x02, 0xFE, 0x45, 0x02, 0x05, 0x05, 0x08, 0x04, +/* 0000DFE0 */ 0x22, 0x21, 0x04, 0x01, 0x05, 0x05, 0x05, 0x05, 0x07, 0x06, 0xFE, 0x94, 0x03, 0x05, 0xFE, 0x09, +/* 0000DFF0 */ 0x04, 0x06, 0xFE, 0x2E, 0x03, 0x6F, 0x58, 0x05, 0x2A, 0x08, 0x05, 0x15, 0x03, 0x00, 0x08, 0x02, +/* 0000E000 */ 0x09, 0x18, 0x00, 0x8E, 0x04, 0x03, 0x09, 0x6C, 0x08, 0x09, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 0000E010 */ 0x09, 0x59, 0x01, 0x03, 0x59, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x08, 0x8E, 0x04, 0x03, 0x09, 0x6C, +/* 0000E020 */ 0x08, 0x09, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x09, 0x59, 0x01, 0x05, 0x1F, 0x02, 0x08, 0x08, +/* 0000E030 */ 0x45, 0x06, 0x08, 0xA8, 0x08, 0x14, 0x08, 0x00, 0x06, 0x08, 0x5E, 0x08, 0x06, 0x02, 0x0F, 0x18, +/* 0000E040 */ 0x00, 0x08, 0x8E, 0x04, 0x03, 0x09, 0x6C, 0x08, 0x09, 0x03, 0x07, 0x03, 0x00, 0x59, 0x00, 0x09, +/* 0000E050 */ 0x59, 0x01, 0x03, 0x59, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x08, 0x5E, 0x00, 0x06, 0x04, 0x09, 0x02, +/* 0000E060 */ 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB6, 0x02, 0xFE, 0x05, 0x02, 0xFE, 0x4E, 0x02, 0xFE, 0xB6, +/* 0000E070 */ 0x02, 0xFE, 0x4C, 0x02, 0xFF, 0x9B, 0x03, 0x02, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x0B, 0x00, +/* 0000E080 */ 0x3C, 0x00, 0x18, 0x00, 0x7D, 0x00, 0x18, 0x00, 0x4B, 0x00, 0x0F, 0x00, 0x65, 0x00, 0x18, 0x00, +/* 0000E090 */ 0x7D, 0x00, 0x09, 0x00, 0x38, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x13, 0x10, 0x47, 0x00, 0xFE, +/* 0000E0A0 */ 0x4F, 0x0B, 0x1B, 0xA0, 0x41, 0xC3, 0x00, 0xFE, 0xEE, 0x03, 0xA8, 0xFF, 0x00, 0x00, 0x00, 0x02, +/* 0000E0B0 */ 0xFF, 0xB7, 0xFD, 0x01, 0x00, 0xFF, 0xB7, 0xFD, 0x01, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x01, 0x01, +/* 0000E0C0 */ 0xFF, 0xB7, 0xFD, 0x01, 0x00, 0xFE, 0xF1, 0x04, 0xFE, 0xF1, 0x04, 0x05, 0x0D, 0x10, 0x04, 0x30, +/* 0000E0D0 */ 0x2F, 0x04, 0x01, 0x12, 0x12, 0x12, 0x12, 0x01, 0x0F, 0x06, 0xFE, 0x94, 0x03, 0x05, 0xFE, 0x0A, +/* 0000E0E0 */ 0x04, 0x06, 0xFE, 0x2E, 0x03, 0x06, 0xFE, 0xD7, 0x03, 0x06, 0xFE, 0xF2, 0x03, 0x06, 0xFE, 0xFE, +/* 0000E0F0 */ 0x03, 0x06, 0xFE, 0x03, 0x04, 0x06, 0xFE, 0x05, 0x04, 0x06, 0xFE, 0xF8, 0x03, 0x06, 0xFE, 0xF9, +/* 0000E100 */ 0x03, 0x07, 0xB0, 0x58, 0x0D, 0x2A, 0x10, 0x0D, 0x15, 0x03, 0x00, 0x10, 0x02, 0x09, 0x18, 0x00, +/* 0000E110 */ 0x8E, 0x04, 0x03, 0x11, 0x6C, 0x10, 0x11, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x11, 0x59, 0x01, +/* 0000E120 */ 0x03, 0x59, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x10, 0x8E, 0x04, 0x03, 0x11, 0x6C, 0x10, 0x11, 0x01, +/* 0000E130 */ 0x07, 0x02, 0x00, 0x59, 0x00, 0x11, 0x59, 0x01, 0x0D, 0x1F, 0x02, 0x10, 0x10, 0x45, 0x0E, 0x10, +/* 0000E140 */ 0xA8, 0x10, 0x14, 0x08, 0x00, 0x0E, 0x10, 0x5E, 0x10, 0x0E, 0x02, 0x0F, 0x18, 0x00, 0x10, 0x8E, +/* 0000E150 */ 0x04, 0x03, 0x11, 0x6C, 0x10, 0x11, 0x03, 0x07, 0x03, 0x00, 0x59, 0x00, 0x11, 0x59, 0x01, 0x03, +/* 0000E160 */ 0x59, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x10, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0000E170 */ 0x00, 0x00, 0x00, 0x00, 0x5E, 0x10, 0x0E, 0x04, 0x7A, 0x10, 0x00, 0x05, 0x5E, 0x10, 0x0E, 0x06, +/* 0000E180 */ 0x7A, 0x10, 0x00, 0x07, 0x5E, 0x10, 0x0E, 0x08, 0x7A, 0x10, 0x00, 0x09, 0x5E, 0x10, 0x0E, 0x0A, +/* 0000E190 */ 0x7A, 0x10, 0x00, 0x0B, 0x5E, 0x10, 0x0E, 0x0C, 0x7A, 0x10, 0x00, 0x0D, 0x5E, 0x10, 0x0E, 0x0E, +/* 0000E1A0 */ 0x7A, 0x10, 0x00, 0x0F, 0x5E, 0x10, 0x0E, 0x10, 0x7A, 0x10, 0x00, 0x11, 0x09, 0x02, 0x00, 0xA8, +/* 0000E1B0 */ 0x00, 0x24, 0x00, 0x01, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, +/* 0000E1C0 */ 0x00, 0x00, 0x0D, 0x02, 0x00, 0x00, 0x55, 0x02, 0x00, 0x00, 0x52, 0x02, 0x00, 0x00, 0x50, 0x02, +/* 0000E1D0 */ 0x00, 0x00, 0x05, 0x04, 0x00, 0x00, 0x51, 0x02, 0x00, 0x00, 0xF9, 0x03, 0x00, 0x00, 0xFE, 0xB6, +/* 0000E1E0 */ 0x02, 0xFE, 0x05, 0x02, 0xFE, 0x4E, 0x02, 0xFE, 0xB6, 0x02, 0xFE, 0x09, 0x02, 0xFE, 0x0D, 0x02, +/* 0000E1F0 */ 0xFE, 0xBE, 0x04, 0xFE, 0x55, 0x02, 0xFE, 0xBF, 0x04, 0xFE, 0x52, 0x02, 0xFE, 0xC0, 0x04, 0xFE, +/* 0000E200 */ 0x50, 0x02, 0xFE, 0x4D, 0x02, 0xFE, 0x05, 0x04, 0xFE, 0xC2, 0x04, 0xFE, 0x51, 0x02, 0xFE, 0xC1, +/* 0000E210 */ 0x04, 0xFE, 0xF9, 0x03, 0xFF, 0xEC, 0xFD, 0x01, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x0B, 0x00, +/* 0000E220 */ 0x3C, 0x00, 0x18, 0x00, 0x84, 0x00, 0x18, 0x00, 0x4B, 0x00, 0x0F, 0x00, 0x65, 0x00, 0x18, 0x00, +/* 0000E230 */ 0x85, 0x00, 0x4A, 0x00, 0xC6, 0x02, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, +/* 0000E240 */ 0x2E, 0x0B, 0x10, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0xF1, 0x03, 0xA7, 0xFF, 0xF9, 0xF6, 0x01, 0x00, +/* 0000E250 */ 0xFF, 0xF9, 0xF6, 0x01, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFF, 0xF9, 0xF6, 0x01, 0x00, +/* 0000E260 */ 0xFE, 0x05, 0x04, 0xFE, 0x05, 0x04, 0x0A, 0x06, 0x0B, 0x0C, 0x49, 0x46, 0x04, 0x03, 0x0C, 0x0C, +/* 0000E270 */ 0x0C, 0x0C, 0x0A, 0x06, 0xFE, 0x94, 0x03, 0x05, 0xFE, 0x09, 0x04, 0x06, 0xFE, 0x2E, 0x03, 0x08, +/* 0000E280 */ 0xF7, 0x58, 0x08, 0x2A, 0x0B, 0x08, 0x15, 0x03, 0x00, 0x0B, 0x02, 0x09, 0x18, 0x00, 0x8E, 0x04, +/* 0000E290 */ 0x03, 0x0C, 0x6C, 0x0B, 0x0C, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0C, 0x59, 0x01, 0x03, 0x59, +/* 0000E2A0 */ 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x0B, 0x8E, 0x04, 0x03, 0x0C, 0x6C, 0x0B, 0x0C, 0x01, 0x07, 0x02, +/* 0000E2B0 */ 0x00, 0x59, 0x00, 0x0C, 0x59, 0x01, 0x08, 0x1F, 0x02, 0x0B, 0x0B, 0x45, 0x09, 0x0B, 0xA8, 0x0B, +/* 0000E2C0 */ 0x14, 0x08, 0x00, 0x09, 0x0B, 0x5E, 0x0B, 0x09, 0x02, 0x0F, 0x18, 0x00, 0x0B, 0x8E, 0x04, 0x03, +/* 0000E2D0 */ 0x0C, 0x6C, 0x0B, 0x0C, 0x03, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0C, 0x59, 0x01, 0x03, 0x59, 0x02, +/* 0000E2E0 */ 0x04, 0x1F, 0x03, 0xFF, 0x0B, 0x8E, 0x04, 0x0C, 0x0B, 0x07, 0x02, 0x00, 0x59, 0x00, 0x05, 0x59, +/* 0000E2F0 */ 0x01, 0x06, 0x1F, 0x02, 0x0B, 0x0B, 0x45, 0x06, 0x0B, 0x8E, 0x04, 0x0C, 0x0B, 0x07, 0x02, 0x00, +/* 0000E300 */ 0x59, 0x00, 0x05, 0x59, 0x01, 0x07, 0x1F, 0x02, 0x0B, 0x0B, 0x45, 0x07, 0x0B, 0x8E, 0x04, 0x0B, +/* 0000E310 */ 0x0B, 0x07, 0x02, 0x00, 0x59, 0x00, 0x05, 0x8E, 0x04, 0x03, 0x0D, 0x6C, 0x0C, 0x0D, 0x04, 0x07, +/* 0000E320 */ 0x08, 0x00, 0x59, 0x00, 0x0D, 0x59, 0x01, 0x06, 0x59, 0x02, 0x07, 0x5E, 0x0E, 0x09, 0x05, 0x59, +/* 0000E330 */ 0x03, 0x0E, 0x8E, 0x04, 0x03, 0x0E, 0x5E, 0x0E, 0x0E, 0x06, 0x5E, 0x0F, 0x09, 0x07, 0x97, 0x0E, +/* 0000E340 */ 0x0E, 0x0F, 0x59, 0x04, 0x0E, 0x5E, 0x0E, 0x09, 0x08, 0x59, 0x05, 0x0E, 0x5E, 0x0E, 0x09, 0x09, +/* 0000E350 */ 0x59, 0x06, 0x0E, 0x8E, 0x04, 0x03, 0x0E, 0x5E, 0x0E, 0x0E, 0x0A, 0x5E, 0x0F, 0x09, 0x0B, 0x97, +/* 0000E360 */ 0x0E, 0x0E, 0x0F, 0x59, 0x07, 0x0E, 0x1F, 0x08, 0x0C, 0x0C, 0x59, 0x01, 0x0C, 0x1F, 0x02, 0x00, +/* 0000E370 */ 0x0B, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB6, 0x02, 0xFE, 0x05, 0x02, 0xFE, 0x4E, +/* 0000E380 */ 0x02, 0xFE, 0xB6, 0x02, 0xFE, 0xF7, 0x01, 0xFE, 0xBD, 0x04, 0xFE, 0x27, 0x02, 0xFE, 0xBF, 0x04, +/* 0000E390 */ 0xFE, 0xC0, 0x04, 0xFE, 0xC2, 0x04, 0xFE, 0x28, 0x02, 0xFE, 0xC1, 0x04, 0xFF, 0x26, 0xF7, 0x01, +/* 0000E3A0 */ 0x00, 0x09, 0x02, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x38, 0x00, 0x18, 0x00, 0x75, 0x00, 0x18, 0x00, +/* 0000E3B0 */ 0x47, 0x00, 0x0F, 0x00, 0x61, 0x00, 0x18, 0x00, 0x75, 0x00, 0x14, 0x00, 0x23, 0x00, 0x14, 0x00, +/* 0000E3C0 */ 0x24, 0x00, 0x69, 0x00, 0xC6, 0x01, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, +/* 0000E3D0 */ 0x13, 0x0B, 0x10, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x2E, 0x03, 0xA6, 0xFF, 0x6C, 0xF2, 0x01, 0x00, +/* 0000E3E0 */ 0xFF, 0x6C, 0xF2, 0x01, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x03, 0x01, 0xFF, 0x6C, 0xF2, 0x01, 0x00, +/* 0000E3F0 */ 0xFE, 0x3D, 0x04, 0xFE, 0x3D, 0x04, 0x09, 0x05, 0x0B, 0x05, 0x5E, 0x57, 0x04, 0x0A, 0x06, 0x06, +/* 0000E400 */ 0x06, 0x06, 0x0A, 0x08, 0x06, 0xFE, 0x2E, 0x03, 0x07, 0xFE, 0x30, 0x01, 0x58, 0x07, 0x4E, 0x08, +/* 0000E410 */ 0x4E, 0x09, 0x15, 0x05, 0x00, 0x05, 0x02, 0xA8, 0x0B, 0x45, 0x05, 0x0B, 0x15, 0x05, 0x00, 0x06, +/* 0000E420 */ 0x02, 0xA8, 0x0B, 0x45, 0x06, 0x0B, 0x4E, 0x08, 0x4E, 0x09, 0x8E, 0x04, 0x07, 0x0B, 0x14, 0x0A, +/* 0000E430 */ 0x00, 0x07, 0x0B, 0xA8, 0x0B, 0x14, 0x03, 0x00, 0x07, 0x0B, 0x09, 0x16, 0x00, 0x8E, 0x01, 0x02, +/* 0000E440 */ 0x0B, 0x4A, 0x0B, 0x07, 0x03, 0x00, 0x59, 0x01, 0x05, 0x59, 0x02, 0x06, 0xC4, 0x03, 0x00, 0x0B, +/* 0000E450 */ 0x09, 0xE7, 0x00, 0x8E, 0x04, 0x24, 0x0C, 0x6C, 0x0B, 0x0C, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 0000E460 */ 0x0C, 0x59, 0x01, 0x07, 0x1F, 0x02, 0x0B, 0x0B, 0x45, 0x08, 0x0B, 0x8E, 0x04, 0x12, 0x0B, 0x07, +/* 0000E470 */ 0x02, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x08, 0x1F, 0x02, 0x0B, 0x0B, 0x0F, 0x15, 0x00, 0x0B, +/* 0000E480 */ 0x8E, 0x04, 0x03, 0x0C, 0x6C, 0x0B, 0x0C, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0C, 0x59, 0x01, +/* 0000E490 */ 0x03, 0x1F, 0x02, 0xFF, 0x0B, 0x8E, 0x04, 0x03, 0x0C, 0x6C, 0x0B, 0x0C, 0x02, 0x07, 0x02, 0x00, +/* 0000E4A0 */ 0x59, 0x00, 0x0C, 0x59, 0x01, 0x08, 0x1F, 0x02, 0x0B, 0x0B, 0x45, 0x09, 0x0B, 0xA8, 0x0B, 0x14, +/* 0000E4B0 */ 0x03, 0x00, 0x09, 0x0B, 0x09, 0x31, 0x00, 0x8E, 0x04, 0x04, 0x0B, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 0000E4C0 */ 0x02, 0xCD, 0x0C, 0x59, 0x01, 0x0C, 0x59, 0x02, 0x04, 0x1F, 0x03, 0x0B, 0x0B, 0x45, 0x09, 0x0B, +/* 0000E4D0 */ 0x8E, 0x04, 0x03, 0x0C, 0x6C, 0x0B, 0x0C, 0x03, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0C, 0x59, 0x01, +/* 0000E4E0 */ 0x08, 0x59, 0x02, 0x09, 0x1F, 0x03, 0xFF, 0x0B, 0x8E, 0x02, 0x02, 0x0B, 0x4A, 0x0B, 0x07, 0x04, +/* 0000E4F0 */ 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x09, 0x59, 0x02, 0x05, 0x59, 0x03, 0x06, 0x1F, 0x04, 0xFF, +/* 0000E500 */ 0x0B, 0x45, 0x0B, 0x09, 0x8E, 0x04, 0x06, 0x0C, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x8E, 0x04, +/* 0000E510 */ 0x1A, 0x0D, 0x59, 0x01, 0x0D, 0x8E, 0x01, 0x03, 0x0D, 0x4A, 0x0D, 0x59, 0x02, 0x0D, 0x59, 0x03, +/* 0000E520 */ 0x08, 0x1F, 0x04, 0x0C, 0x0C, 0x76, 0x0C, 0x0B, 0x04, 0x5E, 0x0B, 0x09, 0x05, 0x82, 0x0B, 0x0B, +/* 0000E530 */ 0x06, 0x01, 0x45, 0x00, 0x08, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x21, 0x03, 0xFE, +/* 0000E540 */ 0xB2, 0x02, 0xFE, 0x05, 0x02, 0xFE, 0x06, 0x02, 0xFE, 0x4C, 0x02, 0xFE, 0x4C, 0x02, 0xFF, 0x7E, +/* 0000E550 */ 0xF2, 0x01, 0x00, 0x10, 0x06, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0E, 0x00, 0x2B, 0x00, +/* 0000E560 */ 0x13, 0x00, 0x43, 0x00, 0x16, 0x00, 0x52, 0x00, 0x18, 0x00, 0x37, 0x00, 0x15, 0x00, 0x38, 0x00, +/* 0000E570 */ 0x15, 0x00, 0x97, 0x00, 0x18, 0x00, 0x47, 0x00, 0x0A, 0x00, 0x3A, 0x00, 0x19, 0x00, 0x3F, 0x00, +/* 0000E580 */ 0x18, 0x00, 0x58, 0x00, 0x19, 0x00, 0x76, 0x00, 0x28, 0x00, 0x68, 0x00, 0x09, 0x00, 0x3D, 0x00, +/* 0000E590 */ 0x08, 0x00, 0x1C, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0xF9, 0x0A, +/* 0000E5A0 */ 0x61, 0xA0, 0x41, 0xF1, 0x00, 0xA5, 0xFF, 0x7E, 0xED, 0x01, 0x00, 0xFF, 0x7E, 0xED, 0x01, 0x00, +/* 0000E5B0 */ 0x0B, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFF, 0x7E, 0xED, 0x01, 0x00, 0xFE, 0x81, 0x04, 0xFE, 0x81, +/* 0000E5C0 */ 0x04, 0x0B, 0x08, 0x0E, 0x0C, 0x54, 0x50, 0x03, 0x05, 0x0A, 0x0A, 0x0A, 0x0A, 0x0D, 0x07, 0x01, +/* 0000E5D0 */ 0x00, 0x05, 0xFE, 0xE9, 0x03, 0x08, 0x01, 0x01, 0x01, 0x02, 0xFE, 0x19, 0x01, 0xB1, 0x08, 0x58, +/* 0000E5E0 */ 0x0A, 0x97, 0x0E, 0x08, 0x03, 0x45, 0x09, 0x0E, 0xA8, 0x0E, 0x14, 0x08, 0x00, 0x0A, 0x0E, 0x14, +/* 0000E5F0 */ 0x03, 0x00, 0x0A, 0x02, 0x09, 0x18, 0x00, 0x8E, 0x03, 0x03, 0x0F, 0x6C, 0x0E, 0x0F, 0x00, 0x07, +/* 0000E600 */ 0x02, 0x00, 0x59, 0x00, 0x0F, 0x59, 0x01, 0x04, 0x1F, 0x02, 0xFF, 0x0E, 0x09, 0x1A, 0x00, 0x14, +/* 0000E610 */ 0x03, 0x00, 0x09, 0x02, 0x09, 0x12, 0x00, 0x8E, 0x03, 0x03, 0x0F, 0x6C, 0x0E, 0x0F, 0x01, 0x07, +/* 0000E620 */ 0x01, 0x00, 0x59, 0x00, 0x0F, 0x1F, 0x01, 0xFF, 0x0E, 0x8E, 0x03, 0x0C, 0x0E, 0x07, 0x02, 0x00, +/* 0000E630 */ 0x59, 0x00, 0x05, 0x59, 0x01, 0x0A, 0x1F, 0x02, 0x0E, 0x0E, 0x45, 0x0B, 0x0E, 0x8E, 0x03, 0x0C, +/* 0000E640 */ 0x0E, 0x07, 0x02, 0x00, 0x59, 0x00, 0x05, 0x59, 0x01, 0x09, 0x1F, 0x02, 0x0E, 0x0E, 0x45, 0x09, +/* 0000E650 */ 0x0E, 0x8E, 0x03, 0x04, 0x0E, 0x07, 0x03, 0x00, 0x59, 0x00, 0x05, 0xCD, 0x0F, 0x59, 0x01, 0x0F, +/* 0000E660 */ 0x59, 0x02, 0x02, 0x1F, 0x03, 0x0E, 0x0E, 0x45, 0x0C, 0x0E, 0x8E, 0x01, 0x02, 0x0E, 0x4A, 0x0E, +/* 0000E670 */ 0x07, 0x04, 0x00, 0x59, 0x00, 0x05, 0x59, 0x01, 0x0C, 0x97, 0x0F, 0x08, 0x06, 0x59, 0x02, 0x0F, +/* 0000E680 */ 0x97, 0x0F, 0x08, 0x07, 0x59, 0x03, 0x0F, 0x1F, 0x04, 0xFF, 0x0E, 0x8E, 0x03, 0x0B, 0x0E, 0x07, +/* 0000E690 */ 0x02, 0x00, 0x59, 0x00, 0x05, 0x8E, 0x03, 0x03, 0x10, 0x6C, 0x0F, 0x10, 0x02, 0x07, 0x08, 0x00, +/* 0000E6A0 */ 0x59, 0x00, 0x10, 0x59, 0x01, 0x0B, 0x59, 0x02, 0x09, 0x5E, 0x11, 0x0C, 0x03, 0x59, 0x03, 0x11, +/* 0000E6B0 */ 0x8E, 0x03, 0x03, 0x11, 0x5E, 0x11, 0x11, 0x04, 0x5E, 0x12, 0x0C, 0x05, 0x97, 0x11, 0x11, 0x12, +/* 0000E6C0 */ 0x59, 0x04, 0x11, 0x5E, 0x11, 0x0C, 0x06, 0x59, 0x05, 0x11, 0x5E, 0x11, 0x0C, 0x07, 0x59, 0x06, +/* 0000E6D0 */ 0x11, 0x8E, 0x03, 0x03, 0x11, 0x5E, 0x11, 0x11, 0x08, 0x5E, 0x12, 0x0C, 0x09, 0x97, 0x11, 0x11, +/* 0000E6E0 */ 0x12, 0x59, 0x07, 0x11, 0x1F, 0x08, 0x0F, 0x0F, 0x59, 0x01, 0x0F, 0x1F, 0x02, 0x00, 0x0E, 0x09, +/* 0000E6F0 */ 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB0, 0x02, 0xFE, 0xAA, 0x02, 0xFE, 0xF7, 0x01, 0xFE, +/* 0000E700 */ 0xBD, 0x04, 0xFE, 0x27, 0x02, 0xFE, 0xBF, 0x04, 0xFE, 0xC0, 0x04, 0xFE, 0xC2, 0x04, 0xFE, 0x28, +/* 0000E710 */ 0x02, 0xFE, 0xC1, 0x04, 0xFF, 0x9C, 0xED, 0x01, 0x00, 0x0B, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, +/* 0000E720 */ 0x29, 0x00, 0x0F, 0x00, 0x3F, 0x00, 0x18, 0x00, 0x6D, 0x00, 0x08, 0x00, 0x29, 0x00, 0x12, 0x00, +/* 0000E730 */ 0xE2, 0x00, 0x14, 0x00, 0x2C, 0x00, 0x14, 0x00, 0x29, 0x00, 0x19, 0x00, 0x3A, 0x00, 0x21, 0x00, +/* 0000E740 */ 0x4D, 0x00, 0x69, 0x00, 0xA6, 0x01, 0x00, 0x7F, 0x5D, 0x00, 0xC1, 0x43, 0x5A, 0x0B, 0x00, 0xFE, +/* 0000E750 */ 0x8C, 0x0A, 0x0C, 0xB3, 0x41, 0xC1, 0x00, 0xFE, 0xE5, 0x03, 0xA3, 0xFF, 0x4B, 0xD6, 0x01, 0x00, +/* 0000E760 */ 0xFF, 0x4B, 0xD6, 0x01, 0x00, 0x01, 0x44, 0xFE, 0x00, 0x90, 0x04, 0x04, 0xFF, 0x4B, 0xD6, 0x01, +/* 0000E770 */ 0x00, 0xFE, 0xD0, 0x16, 0xFE, 0xD0, 0x16, 0x03, 0xFE, 0xF9, 0x03, 0xFE, 0x51, 0x02, 0xFE, 0x05, +/* 0000E780 */ 0x04, 0x15, 0x24, 0x35, 0x09, 0xFE, 0x10, 0x01, 0xFE, 0xFF, 0x00, 0x03, 0x10, 0x15, 0x15, 0x15, +/* 0000E790 */ 0x15, 0x01, 0x32, 0x33, 0x34, 0x35, 0x06, 0xFE, 0x94, 0x03, 0x06, 0xFE, 0xBA, 0x04, 0x08, 0x06, +/* 0000E7A0 */ 0xFE, 0x2E, 0x03, 0x0B, 0x06, 0xFE, 0xD6, 0x03, 0x07, 0x06, 0xFE, 0xE0, 0x03, 0x06, 0xFE, 0xA3, +/* 0000E7B0 */ 0x03, 0x05, 0xFE, 0x9C, 0x03, 0x05, 0xFE, 0xDF, 0x03, 0x06, 0xFE, 0xF2, 0x03, 0x06, 0xFE, 0xF3, +/* 0000E7C0 */ 0x03, 0x06, 0xFE, 0xF4, 0x03, 0x06, 0xFE, 0xFE, 0x03, 0x06, 0xFE, 0xFF, 0x03, 0x06, 0xFE, 0x00, +/* 0000E7D0 */ 0x04, 0x06, 0xFE, 0x01, 0x04, 0x06, 0xFE, 0x02, 0x04, 0x06, 0xFE, 0x03, 0x04, 0x06, 0xFE, 0xA2, +/* 0000E7E0 */ 0x03, 0x0C, 0x06, 0xFE, 0xF9, 0x03, 0x06, 0xFE, 0xFA, 0x03, 0x06, 0xFE, 0xFB, 0x03, 0x06, 0xFE, +/* 0000E7F0 */ 0xFC, 0x03, 0x06, 0xFE, 0xF8, 0x03, 0x06, 0xFE, 0xFD, 0x03, 0x06, 0xFE, 0x47, 0x03, 0x06, 0xFE, +/* 0000E800 */ 0x00, 0x03, 0x06, 0xFE, 0xBB, 0x04, 0x06, 0xFE, 0xBC, 0x04, 0x01, 0x00, 0x01, 0xFF, 0xFE, 0x72, +/* 0000E810 */ 0x03, 0xA8, 0x2F, 0xA8, 0x30, 0xA8, 0x31, 0x2A, 0x36, 0x24, 0x0D, 0x03, 0x00, 0x36, 0x02, 0x09, +/* 0000E820 */ 0x12, 0x00, 0x8E, 0x03, 0x03, 0x37, 0x6C, 0x36, 0x37, 0x00, 0x07, 0x01, 0x00, 0x59, 0x00, 0x37, +/* 0000E830 */ 0x1F, 0x01, 0xFF, 0x36, 0x8E, 0x03, 0x06, 0x36, 0x07, 0x04, 0x00, 0x59, 0x00, 0x04, 0x8E, 0x03, +/* 0000E840 */ 0x14, 0x37, 0x59, 0x01, 0x37, 0x59, 0x02, 0x24, 0x59, 0x03, 0x03, 0x1F, 0x04, 0x36, 0x36, 0x0E, +/* 0000E850 */ 0x20, 0x00, 0x36, 0x5E, 0x36, 0x24, 0x01, 0x0E, 0x18, 0x00, 0x36, 0x8E, 0x03, 0x03, 0x37, 0x6C, +/* 0000E860 */ 0x36, 0x37, 0x02, 0x07, 0x03, 0x00, 0x59, 0x00, 0x37, 0x59, 0x01, 0x05, 0x59, 0x02, 0x05, 0x1F, +/* 0000E870 */ 0x03, 0xFF, 0x36, 0x76, 0x06, 0x24, 0x03, 0x2A, 0x36, 0x26, 0x14, 0x03, 0x00, 0x36, 0x07, 0x09, +/* 0000E880 */ 0x1C, 0x00, 0x8E, 0x03, 0x04, 0x36, 0x07, 0x03, 0x00, 0x59, 0x00, 0x04, 0xCD, 0x37, 0x59, 0x01, +/* 0000E890 */ 0x37, 0x59, 0x02, 0x08, 0x1F, 0x03, 0x36, 0x36, 0x45, 0x26, 0x36, 0x09, 0x18, 0x00, 0x8E, 0x03, +/* 0000E8A0 */ 0x24, 0x37, 0x6C, 0x36, 0x37, 0x04, 0x07, 0x02, 0x00, 0x59, 0x00, 0x37, 0x59, 0x01, 0x26, 0x1F, +/* 0000E8B0 */ 0x02, 0x36, 0x36, 0x45, 0x26, 0x36, 0x8E, 0x02, 0x02, 0x36, 0x4A, 0x36, 0x07, 0x06, 0x00, 0x59, +/* 0000E8C0 */ 0x00, 0x04, 0x59, 0x01, 0x26, 0x59, 0x02, 0x09, 0x59, 0x03, 0x0A, 0xCF, 0x37, 0x02, 0xA1, 0x00, +/* 0000E8D0 */ 0x0B, 0x37, 0xA1, 0x01, 0x0C, 0x37, 0x59, 0x04, 0x37, 0x59, 0x05, 0x0C, 0x1F, 0x06, 0x36, 0x36, +/* 0000E8E0 */ 0x45, 0x28, 0x36, 0x8E, 0x02, 0x02, 0x36, 0x4A, 0x36, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, 0x59, +/* 0000E8F0 */ 0x01, 0x26, 0x59, 0x02, 0x0D, 0x59, 0x03, 0x0A, 0xCF, 0x37, 0x02, 0xA1, 0x00, 0x0E, 0x37, 0xA1, +/* 0000E900 */ 0x01, 0x0F, 0x37, 0x59, 0x04, 0x37, 0x59, 0x05, 0x0E, 0x1F, 0x06, 0x36, 0x36, 0x45, 0x29, 0x36, +/* 0000E910 */ 0x8E, 0x02, 0x02, 0x36, 0x4A, 0x36, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x26, 0x59, +/* 0000E920 */ 0x02, 0x10, 0x59, 0x03, 0x0A, 0xCF, 0x37, 0x04, 0xA1, 0x00, 0x11, 0x37, 0xA1, 0x01, 0x12, 0x37, +/* 0000E930 */ 0xA1, 0x02, 0x13, 0x37, 0xA1, 0x03, 0x14, 0x37, 0x59, 0x04, 0x37, 0xA8, 0x37, 0x59, 0x05, 0x37, +/* 0000E940 */ 0x1F, 0x06, 0x36, 0x36, 0x45, 0x2A, 0x36, 0x8E, 0x02, 0x02, 0x36, 0x4A, 0x36, 0x07, 0x06, 0x00, +/* 0000E950 */ 0x59, 0x00, 0x04, 0x59, 0x01, 0x26, 0x59, 0x02, 0x15, 0x59, 0x03, 0x16, 0xA8, 0x37, 0x59, 0x04, +/* 0000E960 */ 0x37, 0x59, 0x05, 0x17, 0x1F, 0x06, 0x36, 0x36, 0x45, 0x2B, 0x36, 0x8E, 0x02, 0x02, 0x36, 0x4A, +/* 0000E970 */ 0x36, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x26, 0x59, 0x02, 0x18, 0x59, 0x03, 0x0A, +/* 0000E980 */ 0xCF, 0x37, 0x03, 0xA1, 0x00, 0x19, 0x37, 0xA1, 0x01, 0x1A, 0x37, 0xA1, 0x02, 0x1B, 0x37, 0x59, +/* 0000E990 */ 0x04, 0x37, 0xA8, 0x37, 0x59, 0x05, 0x37, 0x1F, 0x06, 0x36, 0x36, 0x96, 0x02, 0x36, 0x8E, 0x02, +/* 0000E9A0 */ 0x02, 0x36, 0x4A, 0x36, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x26, 0x59, 0x02, 0x1C, +/* 0000E9B0 */ 0x59, 0x03, 0x16, 0xCF, 0x37, 0x02, 0xA1, 0x00, 0x06, 0x37, 0xA1, 0x01, 0x17, 0x37, 0x59, 0x04, +/* 0000E9C0 */ 0x37, 0xA8, 0x37, 0x59, 0x05, 0x37, 0x1F, 0x06, 0x36, 0x36, 0x96, 0x03, 0x36, 0x8E, 0x02, 0x07, +/* 0000E9D0 */ 0x36, 0x4A, 0x36, 0x07, 0x02, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x25, 0x1F, 0x02, 0x36, 0x36, +/* 0000E9E0 */ 0x45, 0x25, 0x36, 0x8E, 0x03, 0x2A, 0x36, 0x07, 0x05, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x25, +/* 0000E9F0 */ 0x59, 0x02, 0x28, 0xA8, 0x37, 0x59, 0x03, 0x37, 0x8E, 0x03, 0x31, 0x37, 0x59, 0x04, 0x37, 0x1F, +/* 0000EA00 */ 0x05, 0x36, 0x36, 0x45, 0x2C, 0x36, 0x96, 0x04, 0x1D, 0x8E, 0x03, 0x27, 0x36, 0x07, 0x02, 0x00, +/* 0000EA10 */ 0x59, 0x00, 0x04, 0x5E, 0x37, 0x2C, 0x05, 0x59, 0x01, 0x37, 0x1F, 0x02, 0x36, 0x36, 0x45, 0x2D, +/* 0000EA20 */ 0x36, 0x45, 0x2E, 0x2D, 0x5E, 0x36, 0x2C, 0x06, 0x0E, 0x22, 0x00, 0x36, 0x8E, 0x03, 0x06, 0x36, +/* 0000EA30 */ 0x07, 0x04, 0x00, 0x59, 0x00, 0x04, 0x8E, 0x03, 0x17, 0x37, 0x59, 0x01, 0x37, 0x5E, 0x37, 0x2C, +/* 0000EA40 */ 0x07, 0x59, 0x02, 0x37, 0xD6, 0x00, 0x37, 0x59, 0x03, 0x37, 0x1F, 0x04, 0xFF, 0x36, 0x92, 0x04, +/* 0000EA50 */ 0x36, 0x15, 0x03, 0x00, 0x36, 0x1D, 0x09, 0x48, 0x00, 0x8E, 0x03, 0x2F, 0x36, 0x97, 0x36, 0x36, +/* 0000EA60 */ 0x2E, 0x45, 0x2F, 0x36, 0x45, 0x30, 0x1E, 0xA8, 0x36, 0x15, 0x03, 0x00, 0x2F, 0x36, 0x09, 0x2D, +/* 0000EA70 */ 0x00, 0x92, 0x04, 0x37, 0x97, 0x37, 0x2F, 0x37, 0x45, 0x30, 0x37, 0x45, 0x36, 0x37, 0xA8, 0x37, +/* 0000EA80 */ 0x15, 0x03, 0x00, 0x36, 0x37, 0x09, 0x16, 0x00, 0x15, 0x03, 0x00, 0x30, 0x1E, 0x09, 0x0B, 0x00, +/* 0000EA90 */ 0x2D, 0x36, 0x2E, 0x1F, 0x2D, 0x36, 0x36, 0x30, 0x45, 0x2E, 0x36, 0x09, 0x03, 0x00, 0x96, 0x04, +/* 0000EAA0 */ 0x1D, 0x92, 0x02, 0x36, 0xA8, 0x37, 0x14, 0x03, 0x00, 0x36, 0x37, 0x09, 0x7F, 0x00, 0xE7, 0x36, +/* 0000EAB0 */ 0x00, 0x8E, 0x03, 0x03, 0x37, 0x6C, 0x36, 0x37, 0x08, 0x07, 0x08, 0x00, 0x59, 0x00, 0x37, 0x59, +/* 0000EAC0 */ 0x01, 0x20, 0x59, 0x02, 0x21, 0x59, 0x03, 0x2D, 0xA8, 0x38, 0x59, 0x04, 0x38, 0xA8, 0x38, 0x59, +/* 0000EAD0 */ 0x05, 0x38, 0xA8, 0x38, 0x59, 0x06, 0x38, 0xA8, 0x38, 0x59, 0x07, 0x38, 0x1F, 0x08, 0x36, 0x36, +/* 0000EAE0 */ 0x45, 0x31, 0x36, 0xEB, 0x09, 0x27, 0x00, 0xE9, 0x27, 0x06, 0x8E, 0x03, 0x22, 0x36, 0x07, 0x02, +/* 0000EAF0 */ 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x27, 0x1F, 0x02, 0xFF, 0x36, 0x8E, 0x03, 0x03, 0x37, 0x6C, +/* 0000EB00 */ 0x36, 0x37, 0x09, 0x07, 0x01, 0x00, 0x59, 0x00, 0x37, 0x1F, 0x01, 0xFF, 0x36, 0xEB, 0x14, 0x03, +/* 0000EB10 */ 0x00, 0x31, 0x22, 0x09, 0x06, 0x00, 0x96, 0x02, 0x1B, 0x09, 0x11, 0x00, 0x14, 0x03, 0x00, 0x31, +/* 0000EB20 */ 0x23, 0x09, 0x06, 0x00, 0x96, 0x02, 0x19, 0x09, 0x03, 0x00, 0x96, 0x02, 0x1A, 0xA8, 0x36, 0x14, +/* 0000EB30 */ 0x03, 0x00, 0x2A, 0x36, 0x09, 0x03, 0x00, 0x45, 0x2A, 0x14, 0x92, 0x03, 0x36, 0xA8, 0x37, 0x14, +/* 0000EB40 */ 0x03, 0x00, 0x36, 0x37, 0x09, 0x03, 0x00, 0x96, 0x03, 0x17, 0x76, 0x28, 0x24, 0x0A, 0x5E, 0x36, +/* 0000EB50 */ 0x2C, 0x0B, 0x76, 0x36, 0x24, 0x0C, 0x76, 0x2E, 0x24, 0x0D, 0x76, 0x29, 0x24, 0x0E, 0x76, 0x2A, +/* 0000EB60 */ 0x24, 0x0F, 0x76, 0x2B, 0x24, 0x10, 0x92, 0x02, 0x36, 0x76, 0x36, 0x24, 0x11, 0x92, 0x03, 0x36, +/* 0000EB70 */ 0x76, 0x36, 0x24, 0x12, 0x92, 0x04, 0x36, 0x76, 0x36, 0x24, 0x13, 0x76, 0x06, 0x24, 0x14, 0xA8, +/* 0000EB80 */ 0x00, 0x24, 0x00, 0xFE, 0xAA, 0x02, 0xFE, 0x08, 0x02, 0xFE, 0xAB, 0x02, 0xFE, 0x08, 0x02, 0xFE, +/* 0000EB90 */ 0x21, 0x03, 0xFE, 0x0F, 0x02, 0xFE, 0x11, 0x02, 0xFE, 0x11, 0x02, 0xFE, 0xF7, 0x01, 0xFE, 0xAD, +/* 0000EBA0 */ 0x02, 0xFE, 0x5F, 0x02, 0xFE, 0x0F, 0x02, 0xFE, 0x09, 0x02, 0xFE, 0xBD, 0x04, 0xFE, 0xBE, 0x04, +/* 0000EBB0 */ 0xFE, 0xBF, 0x04, 0xFE, 0xC0, 0x04, 0xFE, 0xC1, 0x04, 0xFE, 0xC2, 0x04, 0xFE, 0x4D, 0x02, 0xFE, +/* 0000EBC0 */ 0x4E, 0x02, 0xFF, 0x98, 0xD6, 0x01, 0x00, 0x35, 0x06, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x37, 0x00, +/* 0000EBD0 */ 0x12, 0x00, 0x3F, 0x00, 0x27, 0x00, 0x93, 0x00, 0x18, 0x00, 0x65, 0x00, 0x04, 0x00, 0x5D, 0x00, +/* 0000EBE0 */ 0x0B, 0x00, 0x3A, 0x00, 0x1C, 0x00, 0x4F, 0x00, 0x18, 0x00, 0x49, 0x00, 0x2D, 0x00, 0x71, 0x00, +/* 0000EBF0 */ 0x2D, 0x00, 0x5F, 0x00, 0x37, 0x00, 0x81, 0x00, 0x24, 0x00, 0x6E, 0x00, 0x33, 0x00, 0x73, 0x00, +/* 0000EC00 */ 0x2F, 0x00, 0x9B, 0x00, 0x16, 0x00, 0x41, 0x00, 0x23, 0x00, 0x6F, 0x00, 0x03, 0x00, 0x2B, 0x00, +/* 0000EC10 */ 0x18, 0x00, 0x69, 0x00, 0x03, 0x00, 0x46, 0x00, 0x08, 0x00, 0x36, 0x00, 0x22, 0x00, 0x33, 0x05, +/* 0000EC20 */ 0x0B, 0x00, 0x33, 0x00, 0x0B, 0x00, 0x6F, 0x00, 0x03, 0x00, 0x2F, 0x00, 0x21, 0x00, 0x92, 0x00, +/* 0000EC30 */ 0x08, 0x00, 0x3B, 0x00, 0x0E, 0x00, 0xB1, 0x00, 0x03, 0x00, 0x7F, 0x00, 0x10, 0x00, 0x51, 0x00, +/* 0000EC40 */ 0x38, 0x00, 0x84, 0x00, 0x01, 0x00, 0x52, 0x00, 0x11, 0x00, 0x92, 0x01, 0x13, 0x00, 0x52, 0x00, +/* 0000EC50 */ 0x08, 0x00, 0x29, 0x00, 0x06, 0x00, 0x30, 0x00, 0x08, 0x00, 0x2A, 0x00, 0x06, 0x00, 0x4A, 0x00, +/* 0000EC60 */ 0x03, 0x00, 0x4E, 0x00, 0x0A, 0x00, 0x35, 0x00, 0x03, 0x00, 0x3C, 0x00, 0x0D, 0x00, 0x31, 0x00, +/* 0000EC70 */ 0x03, 0x00, 0x65, 0x00, 0x04, 0x00, 0x2E, 0x00, 0x08, 0x00, 0x4D, 0x00, 0x04, 0x00, 0x48, 0x00, +/* 0000EC80 */ 0x04, 0x00, 0x2A, 0x00, 0x04, 0x00, 0x36, 0x00, 0x04, 0x00, 0x42, 0x00, 0x07, 0x00, 0x32, 0x00, +/* 0000EC90 */ 0x07, 0x00, 0x2E, 0x00, 0x07, 0x00, 0x32, 0x00, 0x06, 0x00, 0x33, 0x00, 0x00, 0xA1, 0xEC, 0x00, +/* 0000ECA0 */ 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x33, 0x10, 0x43, 0x00, 0xFE, 0xAE, 0x0A, 0x57, 0xA2, 0x41, 0xD1, +/* 0000ECB0 */ 0x00, 0xA4, 0xFF, 0x05, 0xDE, 0x01, 0x00, 0xFF, 0x05, 0xDE, 0x01, 0x00, 0x41, 0xFE, 0x00, 0x90, +/* 0000ECC0 */ 0x02, 0x02, 0xFF, 0x05, 0xDE, 0x01, 0x00, 0xFE, 0xCB, 0x04, 0xFE, 0xCB, 0x04, 0x09, 0x15, 0x1A, +/* 0000ECD0 */ 0x0B, 0x5F, 0x5B, 0x04, 0x08, 0x03, 0x03, 0x03, 0x03, 0x01, 0x01, 0x19, 0x01, 0x01, 0x01, 0x02, +/* 0000ECE0 */ 0x06, 0xFE, 0x47, 0x03, 0x06, 0xFE, 0xF7, 0x03, 0x06, 0xFE, 0xF9, 0x03, 0x07, 0x08, 0x06, 0xFE, +/* 0000ECF0 */ 0xA3, 0x03, 0x06, 0xFE, 0xFA, 0x03, 0x06, 0xFE, 0xFB, 0x03, 0x06, 0xFE, 0xFC, 0x03, 0x06, 0xFE, +/* 0000ED00 */ 0xF6, 0x03, 0x06, 0xFE, 0xA1, 0x03, 0x0B, 0x06, 0xFE, 0xF5, 0x03, 0x06, 0xFE, 0xFD, 0x03, 0x06, +/* 0000ED10 */ 0xFE, 0xF4, 0x03, 0x06, 0xFE, 0xF3, 0x03, 0x05, 0xFE, 0xC3, 0x04, 0xFE, 0x4E, 0x01, 0x8E, 0x04, +/* 0000ED20 */ 0x03, 0x1B, 0x6C, 0x1A, 0x1B, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x1B, 0x59, 0x01, 0x15, 0xE2, +/* 0000ED30 */ 0x1C, 0x00, 0x59, 0x02, 0x1C, 0x1F, 0x03, 0x1A, 0x1A, 0x45, 0x16, 0x1A, 0x97, 0x1A, 0x16, 0x02, +/* 0000ED40 */ 0x45, 0x17, 0x1A, 0x97, 0x1A, 0x16, 0x03, 0x14, 0x03, 0x00, 0x1A, 0x04, 0x09, 0x08, 0x00, 0xA8, +/* 0000ED50 */ 0x1B, 0x45, 0x1A, 0x1B, 0x09, 0x07, 0x00, 0x97, 0x1B, 0x16, 0x03, 0x46, 0x1A, 0x1B, 0x45, 0x18, +/* 0000ED60 */ 0x1A, 0x14, 0x03, 0x00, 0x17, 0x05, 0x09, 0x6A, 0x00, 0x8E, 0x01, 0x02, 0x1A, 0xA8, 0x1B, 0x14, +/* 0000ED70 */ 0x03, 0x00, 0x1A, 0x1B, 0x09, 0x5C, 0x00, 0x8E, 0x03, 0x02, 0x1A, 0x4A, 0x1A, 0x07, 0x06, 0x00, +/* 0000ED80 */ 0x59, 0x00, 0x08, 0x8E, 0x04, 0x04, 0x1B, 0x07, 0x03, 0x00, 0x59, 0x00, 0x08, 0xCE, 0x00, 0x00, +/* 0000ED90 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x7A, 0x18, 0x1C, 0x01, 0x59, 0x01, +/* 0000EDA0 */ 0x1C, 0x59, 0x02, 0x07, 0x1F, 0x03, 0x1B, 0x1B, 0x59, 0x01, 0x1B, 0x59, 0x02, 0x06, 0x59, 0x03, +/* 0000EDB0 */ 0x09, 0xCF, 0x1B, 0x03, 0xA1, 0x00, 0x0A, 0x1B, 0xA1, 0x01, 0x0B, 0x1B, 0xA1, 0x02, 0x0C, 0x1B, +/* 0000EDC0 */ 0x59, 0x04, 0x1B, 0xA8, 0x1B, 0x59, 0x05, 0x1B, 0x1F, 0x06, 0x1A, 0x1A, 0x94, 0x01, 0x02, 0x1A, +/* 0000EDD0 */ 0x09, 0x95, 0x00, 0x14, 0x03, 0x00, 0x17, 0x0D, 0x09, 0x57, 0x00, 0x8E, 0x01, 0x03, 0x1A, 0xA8, +/* 0000EDE0 */ 0x1B, 0x14, 0x03, 0x00, 0x1A, 0x1B, 0x09, 0x49, 0x00, 0xA8, 0x1A, 0x15, 0x03, 0x00, 0x18, 0x1A, +/* 0000EDF0 */ 0x09, 0x38, 0x00, 0x8E, 0x04, 0x24, 0x1B, 0x6C, 0x1A, 0x1B, 0x02, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 0000EE00 */ 0x1B, 0x8E, 0x04, 0x06, 0x1C, 0x07, 0x03, 0x00, 0x59, 0x00, 0x08, 0x8E, 0x04, 0x1E, 0x1D, 0x59, +/* 0000EE10 */ 0x01, 0x1D, 0x59, 0x02, 0x18, 0x1F, 0x03, 0x1C, 0x1C, 0x41, 0x1C, 0x1C, 0x0E, 0x59, 0x01, 0x1C, +/* 0000EE20 */ 0x1F, 0x02, 0x1A, 0x1A, 0x94, 0x01, 0x03, 0x1A, 0x09, 0x04, 0x00, 0x94, 0x01, 0x03, 0x0F, 0x09, +/* 0000EE30 */ 0x36, 0x00, 0x14, 0x03, 0x00, 0x17, 0x10, 0x09, 0x2E, 0x00, 0xA8, 0x1A, 0x15, 0x03, 0x00, 0x18, +/* 0000EE40 */ 0x1A, 0x09, 0x24, 0x00, 0x15, 0x03, 0x00, 0x18, 0x11, 0x09, 0x1C, 0x00, 0x15, 0x03, 0x00, 0x18, +/* 0000EE50 */ 0x12, 0x09, 0x14, 0x00, 0x15, 0x03, 0x00, 0x18, 0x13, 0x09, 0x0C, 0x00, 0x15, 0x03, 0x00, 0x18, +/* 0000EE60 */ 0x14, 0x09, 0x04, 0x00, 0x94, 0x01, 0x04, 0x18, 0xA8, 0x00, 0x24, 0x00, 0x01, 0x0C, 0x00, 0x00, +/* 0000EE70 */ 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0x03, 0x00, 0x00, 0xFE, +/* 0000EE80 */ 0xC0, 0x02, 0xFE, 0xF9, 0x03, 0xFE, 0x24, 0x03, 0x0E, 0xFE, 0xA3, 0x04, 0x00, 0xFF, 0x31, 0xDE, +/* 0000EE90 */ 0x01, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x82, 0x00, 0x07, 0x00, 0x2C, 0x00, 0x1E, +/* 0000EEA0 */ 0x00, 0x4C, 0x00, 0x16, 0x00, 0x4B, 0x00, 0x5C, 0x00, 0x9F, 0x00, 0x16, 0x00, 0x49, 0x00, 0x0A, +/* 0000EEB0 */ 0x00, 0x3B, 0x00, 0x38, 0x00, 0xA9, 0x00, 0x07, 0x00, 0x4D, 0x00, 0x32, 0x00, 0xFF, 0x00, 0x06, +/* 0000EEC0 */ 0x00, 0x41, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x63, 0x50, 0x0B, 0x00, 0xFE, 0x50, 0x0A, 0x1E, +/* 0000EED0 */ 0xA0, 0x41, 0xC1, 0x00, 0xFE, 0xFB, 0x02, 0xA0, 0xFF, 0xC2, 0xCC, 0x01, 0x00, 0xFF, 0xC2, 0xCC, +/* 0000EEE0 */ 0x01, 0x00, 0x01, 0x01, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFF, 0xC2, 0xCC, 0x01, 0x00, 0xFE, 0xE5, +/* 0000EEF0 */ 0x08, 0xFE, 0xE5, 0x08, 0x0C, 0x07, 0x0F, 0x06, 0x79, 0x6C, 0x02, 0x07, 0x03, 0x03, 0x03, 0x03, +/* 0000EF00 */ 0x02, 0x01, 0x0E, 0x0F, 0x08, 0x01, 0x01, 0x05, 0xFE, 0xB5, 0x04, 0x06, 0xFE, 0x47, 0x03, 0x01, +/* 0000EF10 */ 0x02, 0xFE, 0x89, 0x01, 0x4E, 0x07, 0x4E, 0x08, 0x4E, 0x0B, 0x4E, 0x0C, 0x4E, 0x0D, 0x4E, 0x09, +/* 0000EF20 */ 0x4E, 0x0A, 0x8E, 0x01, 0x19, 0x10, 0x4A, 0x10, 0x0E, 0x15, 0x00, 0x10, 0x8E, 0x02, 0x03, 0x10, +/* 0000EF30 */ 0x5E, 0x10, 0x10, 0x00, 0x0E, 0x09, 0x00, 0x10, 0x8E, 0x01, 0x19, 0x00, 0x4A, 0x00, 0x09, 0x5A, +/* 0000EF40 */ 0x01, 0xA8, 0x10, 0x45, 0x07, 0x10, 0xA8, 0x10, 0x45, 0x08, 0x10, 0x8E, 0x02, 0x33, 0x10, 0x4A, +/* 0000EF50 */ 0x10, 0x0E, 0x6C, 0x00, 0x10, 0x8E, 0x01, 0x0A, 0x10, 0x4A, 0x10, 0x07, 0x01, 0x00, 0x59, 0x00, +/* 0000EF60 */ 0x02, 0x1F, 0x01, 0x10, 0x10, 0x45, 0x07, 0x10, 0x8E, 0x02, 0x03, 0x11, 0x6C, 0x10, 0x11, 0x01, +/* 0000EF70 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x11, 0x59, 0x01, 0x07, 0xE2, 0x12, 0x00, 0x59, 0x02, 0x12, 0x1F, +/* 0000EF80 */ 0x03, 0x10, 0x10, 0x45, 0x09, 0x10, 0x0E, 0x34, 0x00, 0x09, 0x97, 0x10, 0x09, 0x03, 0x45, 0x08, +/* 0000EF90 */ 0x10, 0x8E, 0x02, 0x06, 0x10, 0x07, 0x05, 0x00, 0x59, 0x00, 0x02, 0x8E, 0x02, 0x1D, 0x11, 0x59, +/* 0000EFA0 */ 0x01, 0x11, 0x59, 0x02, 0x07, 0x45, 0x11, 0x04, 0x01, 0x09, 0x01, 0x12, 0x08, 0x2D, 0x11, 0x11, +/* 0000EFB0 */ 0x12, 0x59, 0x03, 0x11, 0x59, 0x04, 0x05, 0x1F, 0x05, 0x10, 0x10, 0x45, 0x07, 0x10, 0x09, 0x3C, +/* 0000EFC0 */ 0x00, 0x8E, 0x02, 0x03, 0x11, 0x6C, 0x10, 0x11, 0x02, 0x07, 0x03, 0x00, 0x59, 0x00, 0x11, 0x8E, +/* 0000EFD0 */ 0x01, 0x0A, 0x12, 0x4A, 0x12, 0x07, 0x01, 0x00, 0x59, 0x00, 0x02, 0x1F, 0x01, 0x12, 0x12, 0x59, +/* 0000EFE0 */ 0x01, 0x12, 0xE2, 0x12, 0x01, 0x59, 0x02, 0x12, 0x1F, 0x03, 0x10, 0x10, 0x45, 0x0A, 0x10, 0x97, +/* 0000EFF0 */ 0x10, 0x0A, 0x03, 0x45, 0x07, 0x10, 0x97, 0x10, 0x0A, 0x06, 0x45, 0x08, 0x10, 0xA8, 0x10, 0x14, +/* 0000F000 */ 0x03, 0x00, 0x08, 0x10, 0x09, 0x0F, 0x00, 0x01, 0x43, 0x01, 0x01, 0x19, 0x07, 0x8E, 0x01, 0x19, +/* 0000F010 */ 0x00, 0x4A, 0x00, 0x09, 0x85, 0x00, 0xD8, 0x00, 0x10, 0x45, 0x0B, 0x10, 0x8E, 0x02, 0x30, 0x10, +/* 0000F020 */ 0x97, 0x10, 0x10, 0x07, 0x45, 0x0C, 0x10, 0xA8, 0x10, 0x14, 0x03, 0x00, 0x0C, 0x10, 0x09, 0x1F, +/* 0000F030 */ 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x07, 0x59, 0x02, 0x08, 0x1F, 0x03, 0x10, +/* 0000F040 */ 0x0B, 0x01, 0x43, 0x01, 0x01, 0x19, 0x10, 0x8E, 0x01, 0x19, 0x00, 0x4A, 0x00, 0x09, 0x4B, 0x00, +/* 0000F050 */ 0x97, 0x10, 0x0C, 0x08, 0x45, 0x0D, 0x10, 0xA8, 0x10, 0x15, 0x03, 0x00, 0x0D, 0x10, 0x09, 0x19, +/* 0000F060 */ 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x07, 0x59, 0x02, 0x0D, 0x1F, 0x03, 0x10, +/* 0000F070 */ 0x0B, 0x01, 0x43, 0x01, 0x01, 0x19, 0x10, 0x09, 0x16, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, +/* 0000F080 */ 0x59, 0x01, 0x07, 0x59, 0x02, 0x08, 0x1F, 0x03, 0x10, 0x0B, 0x01, 0x43, 0x01, 0x01, 0x19, 0x10, +/* 0000F090 */ 0x8E, 0x01, 0x19, 0x00, 0x4A, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x4D, 0x03, +/* 0000F0A0 */ 0xFE, 0xC0, 0x02, 0xFE, 0xC0, 0x02, 0x28, 0xFE, 0xB6, 0x04, 0x00, 0x0E, 0xFE, 0xB7, 0x04, 0x00, +/* 0000F0B0 */ 0xFF, 0xD8, 0xCC, 0x01, 0x00, 0x1B, 0x0E, 0x00, 0x00, 0x00, 0x16, 0x00, 0x3F, 0x00, 0x09, 0x00, +/* 0000F0C0 */ 0x31, 0x00, 0x05, 0x00, 0x20, 0x00, 0x05, 0x00, 0x23, 0x00, 0x0A, 0x00, 0x7A, 0x00, 0x13, 0x00, +/* 0000F0D0 */ 0x29, 0x00, 0x1E, 0x00, 0x6A, 0x00, 0x04, 0x00, 0xB8, 0x00, 0x07, 0x00, 0x26, 0x00, 0x30, 0x00, +/* 0000F0E0 */ 0xC6, 0x00, 0x2E, 0x00, 0x5C, 0x00, 0x07, 0x00, 0x1F, 0x00, 0x07, 0x00, 0x29, 0x00, 0x0A, 0x00, +/* 0000F0F0 */ 0x2B, 0x00, 0x06, 0x00, 0x2C, 0x00, 0x09, 0x00, 0x8D, 0x00, 0x06, 0x00, 0x28, 0x01, 0x0B, 0x00, +/* 0000F100 */ 0x56, 0x00, 0x0A, 0x00, 0x84, 0x00, 0x16, 0x00, 0x54, 0x00, 0x09, 0x00, 0x31, 0x00, 0x07, 0x00, +/* 0000F110 */ 0x42, 0x00, 0x0A, 0x00, 0x31, 0x00, 0x19, 0x00, 0x6B, 0x00, 0x16, 0x00, 0x5B, 0x00, 0x0B, 0x00, +/* 0000F120 */ 0x22, 0x00, 0x00, 0x27, 0xF1, 0x00, 0x00, 0x7F, 0x4C, 0x00, 0x01, 0x00, 0x10, 0x03, 0x00, 0xFE, +/* 0000F130 */ 0x6E, 0x0A, 0x2C, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xB8, 0x04, 0xA1, 0xFF, 0xE8, 0xD1, 0x01, 0x00, +/* 0000F140 */ 0xFF, 0xE8, 0xD1, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFF, 0xE8, 0xD1, 0x01, 0x00, +/* 0000F150 */ 0xF9, 0xF9, 0x04, 0x05, 0x08, 0x11, 0x11, 0x02, 0x01, 0x07, 0x06, 0xFE, 0x47, 0x03, 0x05, 0xFE, +/* 0000F160 */ 0xB5, 0x04, 0x05, 0xFE, 0xB9, 0x04, 0x3B, 0x8E, 0x02, 0x33, 0x08, 0x4A, 0x08, 0x0E, 0x18, 0x00, +/* 0000F170 */ 0x08, 0x01, 0x09, 0x01, 0x00, 0x05, 0x2D, 0x00, 0x00, 0x03, 0x01, 0x09, 0x01, 0x08, 0x06, 0x2D, +/* 0000F180 */ 0x00, 0x00, 0x08, 0x09, 0x1A, 0x00, 0x09, 0x15, 0x00, 0x01, 0x09, 0x01, 0x00, 0x05, 0x2D, 0x00, +/* 0000F190 */ 0x00, 0x04, 0x01, 0x09, 0x01, 0x08, 0x06, 0x2D, 0x00, 0x00, 0x08, 0x09, 0x02, 0x00, 0xA8, 0x00, +/* 0000F1A0 */ 0x24, 0x00, 0xFF, 0x1D, 0xD2, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x2A, 0x00, +/* 0000F1B0 */ 0x18, 0x00, 0x53, 0x00, 0x17, 0x00, 0x46, 0x00, 0x00, 0x7E, 0x5D, 0x00, 0x01, 0x00, 0x1A, 0x0B, +/* 0000F1C0 */ 0x00, 0xFE, 0x3B, 0x0A, 0x32, 0xA0, 0x41, 0xD1, 0x00, 0x9D, 0xFF, 0xE1, 0xC8, 0x01, 0x00, 0xFF, +/* 0000F1D0 */ 0xE1, 0xC8, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFF, 0xE1, 0xC8, 0x01, 0x00, 0xFE, +/* 0000F1E0 */ 0x13, 0x03, 0xFE, 0x13, 0x03, 0x01, 0xFE, 0xB2, 0x04, 0x06, 0x04, 0x07, 0x08, 0x1E, 0x1E, 0x02, +/* 0000F1F0 */ 0x06, 0x04, 0x05, 0x06, 0x07, 0x08, 0x5B, 0x4E, 0x07, 0x96, 0x02, 0x07, 0x8E, 0x02, 0x04, 0x07, +/* 0000F200 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x03, 0xCD, 0x08, 0x59, 0x01, 0x08, 0x59, 0x02, 0x02, 0x1F, 0x03, +/* 0000F210 */ 0x07, 0x07, 0x96, 0x02, 0x07, 0x8E, 0x02, 0x06, 0x07, 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, 0x8E, +/* 0000F220 */ 0x02, 0x17, 0x08, 0x59, 0x01, 0x08, 0x8E, 0x02, 0x13, 0x08, 0x07, 0x02, 0x00, 0x59, 0x00, 0x03, +/* 0000F230 */ 0x8E, 0x02, 0x2F, 0x09, 0x59, 0x01, 0x09, 0x1F, 0x02, 0x08, 0x08, 0x59, 0x02, 0x08, 0xD6, 0x00, +/* 0000F240 */ 0x08, 0x59, 0x03, 0x08, 0x1F, 0x04, 0xFF, 0x07, 0x92, 0x02, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, +/* 0000F250 */ 0x24, 0x00, 0xFF, 0xF7, 0xC8, 0x01, 0x00, 0x04, 0x05, 0x00, 0x00, 0x00, 0x19, 0x00, 0x31, 0x00, +/* 0000F260 */ 0x33, 0x00, 0xB6, 0x02, 0x08, 0x00, 0x15, 0x00, 0x00, 0x6D, 0xF2, 0x00, 0x00, 0x7F, 0x5D, 0x00, +/* 0000F270 */ 0x01, 0x00, 0x1A, 0x0B, 0x00, 0xFE, 0x3D, 0x0A, 0x6B, 0xA2, 0x41, 0xD1, 0x00, 0x9E, 0xFF, 0x8B, +/* 0000F280 */ 0xC9, 0x01, 0x00, 0xFF, 0x8B, 0xC9, 0x01, 0x00, 0x01, 0x40, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, +/* 0000F290 */ 0x8B, 0xC9, 0x01, 0x00, 0xFE, 0x48, 0x02, 0xFE, 0x48, 0x02, 0x02, 0xFE, 0xB3, 0x04, 0xFE, 0xB4, +/* 0000F2A0 */ 0x04, 0x07, 0x04, 0x08, 0x08, 0x25, 0x25, 0x03, 0x08, 0x05, 0x06, 0x07, 0x07, 0x08, 0x71, 0x4E, +/* 0000F2B0 */ 0x08, 0x96, 0x02, 0x08, 0x4E, 0x08, 0x96, 0x03, 0x08, 0x8E, 0x03, 0x2F, 0x08, 0x97, 0x08, 0x08, +/* 0000F2C0 */ 0x04, 0x96, 0x02, 0x08, 0x8E, 0x03, 0x04, 0x08, 0x07, 0x03, 0x00, 0x59, 0x00, 0x03, 0xCD, 0x09, +/* 0000F2D0 */ 0x59, 0x01, 0x09, 0x59, 0x02, 0x02, 0x1F, 0x03, 0x08, 0x08, 0x96, 0x03, 0x08, 0x8E, 0x03, 0x06, +/* 0000F2E0 */ 0x08, 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, 0x8E, 0x03, 0x17, 0x09, 0x59, 0x01, 0x09, 0x8E, 0x03, +/* 0000F2F0 */ 0x13, 0x09, 0x07, 0x02, 0x00, 0x59, 0x00, 0x03, 0x92, 0x02, 0x0A, 0x59, 0x01, 0x0A, 0x1F, 0x02, +/* 0000F300 */ 0x09, 0x09, 0x59, 0x02, 0x09, 0xD6, 0x00, 0x09, 0x59, 0x03, 0x09, 0x1F, 0x04, 0xFF, 0x08, 0x8E, +/* 0000F310 */ 0x01, 0x02, 0x08, 0x4A, 0x08, 0x92, 0x03, 0x09, 0x9C, 0x09, 0x08, 0x04, 0xA8, 0x00, 0x24, 0x00, +/* 0000F320 */ 0xFF, 0xAB, 0xC9, 0x01, 0x00, 0x05, 0x0A, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x56, 0x00, 0x19, 0x00, +/* 0000F330 */ 0x45, 0x00, 0x32, 0x00, 0x58, 0x01, 0x0F, 0x00, 0x34, 0x00, 0x00, 0x3F, 0xF3, 0x00, 0x00, 0x7F, +/* 0000F340 */ 0x4C, 0x00, 0x01, 0x00, 0x10, 0x03, 0x00, 0xFE, 0x41, 0x0A, 0x68, 0xA2, 0x41, 0xD1, 0x00, 0x9F, +/* 0000F350 */ 0xFF, 0xA2, 0xCA, 0x01, 0x00, 0xFF, 0xA2, 0xCA, 0x01, 0x00, 0x41, 0xFE, 0x00, 0x90, 0x02, 0x02, +/* 0000F360 */ 0xFF, 0xA2, 0xCA, 0x01, 0x00, 0xEC, 0xEC, 0x04, 0x03, 0x06, 0x0D, 0x0C, 0x04, 0x02, 0x05, 0x06, +/* 0000F370 */ 0xFE, 0x47, 0x03, 0x25, 0x4E, 0x04, 0x8E, 0x01, 0x02, 0x06, 0x4A, 0x06, 0x97, 0x06, 0x06, 0x03, +/* 0000F380 */ 0x45, 0x04, 0x06, 0x15, 0x03, 0x00, 0x04, 0x02, 0x09, 0x0A, 0x00, 0x8E, 0x01, 0x03, 0x06, 0x4A, +/* 0000F390 */ 0x06, 0x9C, 0x03, 0x06, 0x04, 0xA8, 0x00, 0x24, 0x00, 0xFF, 0xC9, 0xCA, 0x01, 0x00, 0x04, 0x02, +/* 0000F3A0 */ 0x00, 0x00, 0x00, 0x0D, 0x00, 0x48, 0x00, 0x08, 0x00, 0x2D, 0x00, 0x0C, 0x00, 0x4F, 0x00, 0x00, +/* 0000F3B0 */ 0x7F, 0x5C, 0x00, 0x01, 0x00, 0x10, 0x03, 0x00, 0xFE, 0x16, 0x0A, 0x08, 0xA2, 0x41, 0xC3, 0x00, +/* 0000F3C0 */ 0xFE, 0xB1, 0x04, 0x9C, 0xFF, 0xB9, 0xBE, 0x01, 0x00, 0xFF, 0xB9, 0xBE, 0x01, 0x00, 0x09, 0xFE, +/* 0000F3D0 */ 0x00, 0x90, 0x02, 0x02, 0xFF, 0xB9, 0xBE, 0x01, 0x00, 0x96, 0x96, 0x05, 0x03, 0x06, 0x05, 0x0E, +/* 0000F3E0 */ 0x0E, 0x02, 0x02, 0x05, 0x08, 0x26, 0x58, 0x04, 0x8E, 0x02, 0x2D, 0x06, 0x07, 0x04, 0x00, 0x59, +/* 0000F3F0 */ 0x00, 0x02, 0x59, 0x01, 0x04, 0x8E, 0x01, 0x18, 0x07, 0x4A, 0x07, 0x59, 0x02, 0x07, 0x59, 0x03, +/* 0000F400 */ 0x03, 0x1F, 0x04, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFF, 0xF7, 0xBE, 0x01, +/* 0000F410 */ 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x22, 0x00, 0x57, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0x01, 0x00, +/* 0000F420 */ 0x10, 0x03, 0x00, 0xFE, 0x10, 0x0A, 0x08, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0xB0, 0x04, 0x9B, 0xFF, +/* 0000F430 */ 0x13, 0xBD, 0x01, 0x00, 0xFF, 0x13, 0xBD, 0x01, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x03, 0x02, 0xFF, +/* 0000F440 */ 0x13, 0xBD, 0x01, 0x00, 0xCC, 0xCC, 0x06, 0x03, 0x07, 0x06, 0x12, 0x11, 0x02, 0x02, 0x06, 0x08, +/* 0000F450 */ 0x33, 0x58, 0x05, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA8, 0x07, 0x45, 0x04, 0x07, 0x8E, 0x02, 0x2C, +/* 0000F460 */ 0x07, 0x07, 0x05, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x05, 0x8E, 0x01, 0x16, 0x08, 0x4A, 0x08, +/* 0000F470 */ 0x59, 0x02, 0x08, 0x59, 0x03, 0x03, 0x59, 0x04, 0x04, 0x1F, 0x05, 0x00, 0x07, 0x09, 0x02, 0x00, +/* 0000F480 */ 0xA8, 0x00, 0x24, 0x00, 0xFF, 0x51, 0xBD, 0x01, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, +/* 0000F490 */ 0x23, 0x00, 0x25, 0x00, 0x6A, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0x01, 0x00, 0x10, 0x03, 0x00, 0xFE, +/* 0000F4A0 */ 0x0A, 0x0A, 0x08, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0xAF, 0x04, 0x9A, 0xFF, 0x39, 0xBB, 0x01, 0x00, +/* 0000F4B0 */ 0xFF, 0x39, 0xBB, 0x01, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x03, 0x02, 0xFF, 0x39, 0xBB, 0x01, 0x00, +/* 0000F4C0 */ 0xC8, 0xC8, 0x06, 0x03, 0x07, 0x06, 0x12, 0x11, 0x02, 0x02, 0x06, 0x08, 0x33, 0x58, 0x05, 0x15, +/* 0000F4D0 */ 0x05, 0x00, 0x04, 0x02, 0xA8, 0x07, 0x45, 0x04, 0x07, 0x8E, 0x02, 0x2C, 0x07, 0x07, 0x05, 0x00, +/* 0000F4E0 */ 0x59, 0x00, 0x02, 0x59, 0x01, 0x05, 0x8E, 0x01, 0x14, 0x08, 0x4A, 0x08, 0x59, 0x02, 0x08, 0x59, +/* 0000F4F0 */ 0x03, 0x03, 0x59, 0x04, 0x04, 0x1F, 0x05, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, +/* 0000F500 */ 0xFF, 0x75, 0xBB, 0x01, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x23, 0x00, 0x25, 0x00, +/* 0000F510 */ 0x68, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0x01, 0x00, 0x10, 0x03, 0x00, 0xFE, 0x04, 0x0A, 0x08, 0xA2, +/* 0000F520 */ 0x41, 0xC3, 0x00, 0xFE, 0xAE, 0x04, 0x99, 0xFF, 0x6F, 0xB9, 0x01, 0x00, 0xFF, 0x6F, 0xB9, 0x01, +/* 0000F530 */ 0x00, 0x09, 0xFE, 0x00, 0x90, 0x03, 0x02, 0xFF, 0x6F, 0xB9, 0x01, 0x00, 0xC0, 0xC0, 0x06, 0x03, +/* 0000F540 */ 0x07, 0x06, 0x12, 0x11, 0x02, 0x02, 0x06, 0x08, 0x33, 0x58, 0x05, 0x15, 0x05, 0x00, 0x04, 0x02, +/* 0000F550 */ 0xA8, 0x07, 0x45, 0x04, 0x07, 0x8E, 0x02, 0x2C, 0x07, 0x07, 0x05, 0x00, 0x59, 0x00, 0x02, 0x59, +/* 0000F560 */ 0x01, 0x05, 0x8E, 0x01, 0x12, 0x08, 0x4A, 0x08, 0x59, 0x02, 0x08, 0x59, 0x03, 0x03, 0x59, 0x04, +/* 0000F570 */ 0x04, 0x1F, 0x05, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFF, 0xA7, 0xB9, 0x01, +/* 0000F580 */ 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x23, 0x00, 0x25, 0x00, 0x64, 0x00, 0x00, 0x7F, +/* 0000F590 */ 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0xE6, 0x09, 0x1D, 0xA2, 0x41, 0xC1, 0x00, 0xFE, +/* 0000F5A0 */ 0x38, 0x03, 0x98, 0xFF, 0xCF, 0xB3, 0x01, 0x00, 0xFF, 0xCF, 0xB3, 0x01, 0x00, 0x01, 0xFE, 0x00, +/* 0000F5B0 */ 0x90, 0x03, 0x03, 0xFF, 0xCF, 0xB3, 0x01, 0x00, 0xFE, 0x60, 0x03, 0xFE, 0x60, 0x03, 0x08, 0x08, +/* 0000F5C0 */ 0x0C, 0x0A, 0x52, 0x4F, 0x02, 0x08, 0x04, 0x04, 0x04, 0x04, 0x0B, 0x08, 0x06, 0xFE, 0xD6, 0x03, +/* 0000F5D0 */ 0x05, 0xFE, 0x9C, 0x03, 0x05, 0xFE, 0xDF, 0x03, 0x06, 0xFE, 0xE0, 0x03, 0x05, 0xFE, 0xAD, 0x04, +/* 0000F5E0 */ 0xFE, 0x11, 0x01, 0xA8, 0x0A, 0x8E, 0x01, 0x07, 0x0C, 0x4A, 0x0C, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 0000F5F0 */ 0x02, 0x59, 0x01, 0x08, 0x1F, 0x02, 0x0C, 0x0C, 0x45, 0x08, 0x0C, 0x2A, 0x0C, 0x09, 0x15, 0x03, +/* 0000F600 */ 0x00, 0x0C, 0x03, 0x09, 0x66, 0x00, 0x5E, 0x0C, 0x09, 0x00, 0x45, 0x0A, 0x0C, 0x2A, 0x0C, 0x0A, +/* 0000F610 */ 0x15, 0x03, 0x00, 0x0C, 0x03, 0x09, 0x54, 0x00, 0x8E, 0x02, 0x24, 0x0D, 0x6C, 0x0C, 0x0D, 0x01, +/* 0000F620 */ 0x07, 0x02, 0x00, 0x59, 0x00, 0x0D, 0x59, 0x01, 0x0A, 0x1F, 0x02, 0x0C, 0x0C, 0x45, 0x0A, 0x0C, +/* 0000F630 */ 0x15, 0x03, 0x00, 0x0A, 0x04, 0x09, 0x34, 0x00, 0x15, 0x03, 0x00, 0x0A, 0x05, 0x09, 0x2C, 0x00, +/* 0000F640 */ 0x8E, 0x02, 0x03, 0x0D, 0x6C, 0x0C, 0x0D, 0x02, 0x07, 0x04, 0x00, 0x59, 0x00, 0x0D, 0x8E, 0x02, +/* 0000F650 */ 0x0C, 0x0E, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x0A, 0x1F, 0x02, 0x0E, 0x0E, 0x59, +/* 0000F660 */ 0x01, 0x0E, 0x59, 0x02, 0x06, 0x59, 0x03, 0x07, 0x1F, 0x04, 0xFF, 0x0C, 0x2A, 0x0C, 0x0A, 0x14, +/* 0000F670 */ 0x08, 0x00, 0x0C, 0x03, 0x14, 0x03, 0x00, 0x0A, 0x05, 0x09, 0x46, 0x00, 0x8E, 0x01, 0x08, 0x0C, +/* 0000F680 */ 0x4A, 0x0C, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x08, 0x8E, 0x02, 0x26, 0x0D, 0x59, +/* 0000F690 */ 0x02, 0x0D, 0x8E, 0x02, 0x03, 0x0E, 0x6C, 0x0D, 0x0E, 0x03, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0E, +/* 0000F6A0 */ 0x8E, 0x02, 0x2B, 0x0F, 0x07, 0x01, 0x00, 0x59, 0x00, 0x02, 0x1F, 0x01, 0x0F, 0x0F, 0x59, 0x01, +/* 0000F6B0 */ 0x0F, 0x1F, 0x02, 0x0D, 0x0D, 0x59, 0x03, 0x0D, 0x1F, 0x04, 0x00, 0x0C, 0x09, 0x33, 0x00, 0x09, +/* 0000F6C0 */ 0x2E, 0x00, 0x8E, 0x01, 0x08, 0x0C, 0x4A, 0x0C, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, +/* 0000F6D0 */ 0x08, 0x8E, 0x02, 0x27, 0x0D, 0x59, 0x02, 0x0D, 0x8E, 0x02, 0x2B, 0x0D, 0x07, 0x01, 0x00, 0x59, +/* 0000F6E0 */ 0x00, 0x02, 0x1F, 0x01, 0x0D, 0x0D, 0x59, 0x03, 0x0D, 0x1F, 0x04, 0x00, 0x0C, 0x09, 0x02, 0x00, +/* 0000F6F0 */ 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x0E, 0x02, 0xFE, 0x22, 0x03, 0xFE, 0xAC, 0x02, 0xFE, 0xEE, 0x01, +/* 0000F700 */ 0xFF, 0x0A, 0xB4, 0x01, 0x00, 0x0B, 0x02, 0x00, 0x00, 0x00, 0x16, 0x00, 0x34, 0x00, 0x0B, 0x00, +/* 0000F710 */ 0x32, 0x00, 0x07, 0x00, 0x2E, 0x00, 0x0B, 0x00, 0x36, 0x00, 0x18, 0x00, 0x37, 0x00, 0x10, 0x00, +/* 0000F720 */ 0x4A, 0x00, 0x2C, 0x00, 0x96, 0x00, 0x10, 0x00, 0x4C, 0x00, 0x46, 0x00, 0x93, 0x00, 0x30, 0x00, +/* 0000F730 */ 0x64, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0xD8, 0x09, 0x28, 0xA2, +/* 0000F740 */ 0x41, 0xC1, 0x00, 0xFE, 0xF8, 0x02, 0x97, 0xFF, 0xFB, 0xB1, 0x01, 0x00, 0xFF, 0xFB, 0xB1, 0x01, +/* 0000F750 */ 0x00, 0x01, 0xFE, 0x00, 0x90, 0x04, 0x04, 0xFF, 0xFB, 0xB1, 0x01, 0x00, 0xFE, 0x8C, 0x01, 0xFE, +/* 0000F760 */ 0x8C, 0x01, 0x07, 0x05, 0x0A, 0x03, 0x25, 0x24, 0x02, 0x02, 0x04, 0x04, 0x04, 0x04, 0x09, 0x07, +/* 0000F770 */ 0x05, 0xFE, 0x33, 0x03, 0x08, 0x7B, 0x14, 0x0A, 0x00, 0x05, 0x02, 0xA8, 0x0A, 0x14, 0x03, 0x00, +/* 0000F780 */ 0x05, 0x0A, 0x09, 0x15, 0x00, 0x8E, 0x02, 0x03, 0x0B, 0x6C, 0x0A, 0x0B, 0x00, 0x07, 0x02, 0x00, +/* 0000F790 */ 0x59, 0x00, 0x0B, 0x59, 0x01, 0x06, 0x1F, 0x02, 0xFF, 0x0A, 0x8E, 0x02, 0x03, 0x0B, 0x6C, 0x0A, +/* 0000F7A0 */ 0x0B, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0B, 0x59, 0x01, 0x05, 0x1F, 0x02, 0x0A, 0x0A, 0x45, +/* 0000F7B0 */ 0x08, 0x0A, 0x0E, 0x0C, 0x00, 0x08, 0x5E, 0x0A, 0x08, 0x02, 0x15, 0x03, 0x00, 0x0A, 0x03, 0x09, +/* 0000F7C0 */ 0x15, 0x00, 0x8E, 0x02, 0x03, 0x0B, 0x6C, 0x0A, 0x0B, 0x03, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0B, +/* 0000F7D0 */ 0x59, 0x01, 0x06, 0x1F, 0x02, 0xFF, 0x0A, 0x8E, 0x01, 0x07, 0x0A, 0x4A, 0x0A, 0x07, 0x02, 0x00, +/* 0000F7E0 */ 0x59, 0x00, 0x04, 0x59, 0x01, 0x07, 0x1F, 0x02, 0x00, 0x0A, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, +/* 0000F7F0 */ 0x00, 0xFE, 0xB1, 0x02, 0xFE, 0x05, 0x02, 0xFE, 0x0C, 0x02, 0xFE, 0xB1, 0x02, 0xFF, 0x2C, 0xB2, +/* 0000F800 */ 0x01, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x37, 0x00, 0x15, 0x00, 0x40, 0x00, 0x18, +/* 0000F810 */ 0x00, 0x38, 0x00, 0x10, 0x00, 0x3F, 0x00, 0x15, 0x00, 0x40, 0x00, 0x18, 0x00, 0x2C, 0x00, 0x00, +/* 0000F820 */ 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0xCB, 0x09, 0x24, 0xA2, 0x41, 0xC1, 0x00, +/* 0000F830 */ 0xFE, 0xF7, 0x02, 0x96, 0xFF, 0x37, 0xB0, 0x01, 0x00, 0xFF, 0x37, 0xB0, 0x01, 0x00, 0x01, 0xFE, +/* 0000F840 */ 0x00, 0x90, 0x05, 0x05, 0xFF, 0x37, 0xB0, 0x01, 0x00, 0xFE, 0x9A, 0x01, 0xFE, 0x9A, 0x01, 0x08, +/* 0000F850 */ 0x05, 0x0B, 0x04, 0x25, 0x24, 0x02, 0x02, 0x04, 0x04, 0x04, 0x04, 0x0A, 0x07, 0x05, 0xFE, 0x33, +/* 0000F860 */ 0x03, 0x08, 0x7C, 0x14, 0x0A, 0x00, 0x05, 0x02, 0xA8, 0x0B, 0x14, 0x03, 0x00, 0x05, 0x0B, 0x09, +/* 0000F870 */ 0x15, 0x00, 0x8E, 0x02, 0x03, 0x0C, 0x6C, 0x0B, 0x0C, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0C, +/* 0000F880 */ 0x59, 0x01, 0x06, 0x1F, 0x02, 0xFF, 0x0B, 0x8E, 0x02, 0x03, 0x0C, 0x6C, 0x0B, 0x0C, 0x01, 0x07, +/* 0000F890 */ 0x02, 0x00, 0x59, 0x00, 0x0C, 0x59, 0x01, 0x05, 0x1F, 0x02, 0x0B, 0x0B, 0x45, 0x09, 0x0B, 0x0E, +/* 0000F8A0 */ 0x0C, 0x00, 0x09, 0x5E, 0x0B, 0x09, 0x02, 0x15, 0x03, 0x00, 0x0B, 0x03, 0x09, 0x15, 0x00, 0x8E, +/* 0000F8B0 */ 0x02, 0x03, 0x0C, 0x6C, 0x0B, 0x0C, 0x03, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0C, 0x59, 0x01, 0x06, +/* 0000F8C0 */ 0x1F, 0x02, 0xFF, 0x0B, 0x8E, 0x02, 0x2E, 0x0B, 0x07, 0x03, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, +/* 0000F8D0 */ 0x07, 0x59, 0x02, 0x08, 0x1F, 0x03, 0x00, 0x0B, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, +/* 0000F8E0 */ 0xB1, 0x02, 0xFE, 0x05, 0x02, 0xFE, 0x0C, 0x02, 0xFE, 0xB1, 0x02, 0xFF, 0x71, 0xB0, 0x01, 0x00, +/* 0000F8F0 */ 0x07, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x37, 0x00, 0x15, 0x00, 0x40, 0x00, 0x18, 0x00, 0x38, +/* 0000F900 */ 0x00, 0x10, 0x00, 0x3F, 0x00, 0x15, 0x00, 0x40, 0x00, 0x19, 0x00, 0x31, 0x00, 0x00, 0x7E, 0x5D, +/* 0000F910 */ 0x00, 0xC1, 0x13, 0x1A, 0x4B, 0x00, 0xFE, 0xB8, 0x09, 0x04, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x61, +/* 0000F920 */ 0x03, 0x94, 0xFF, 0xA2, 0xAC, 0x01, 0x00, 0xFF, 0xA2, 0xAC, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, +/* 0000F930 */ 0x04, 0x04, 0xFF, 0xA2, 0xAC, 0x01, 0x00, 0xFE, 0x6F, 0x03, 0xFE, 0x6F, 0x03, 0x04, 0xFE, 0xD9, +/* 0000F940 */ 0x03, 0xFE, 0xAA, 0x04, 0xFE, 0xAB, 0x04, 0xFE, 0xAC, 0x04, 0x09, 0x0A, 0x10, 0x05, 0x20, 0x20, +/* 0000F950 */ 0x02, 0x05, 0x03, 0x03, 0x03, 0x03, 0x01, 0x0D, 0x0E, 0x0F, 0x01, 0x00, 0x08, 0x06, 0xFE, 0xE1, +/* 0000F960 */ 0x03, 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, 0x2B, 0x03, 0x0C, 0x06, 0xFE, 0x2D, 0x03, 0x07, 0x6D, +/* 0000F970 */ 0x96, 0x04, 0x0B, 0x96, 0x05, 0x0C, 0xCF, 0x10, 0x00, 0x96, 0x02, 0x10, 0x96, 0x03, 0x02, 0x8E, +/* 0000F980 */ 0x02, 0x06, 0x10, 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, 0x8E, 0x02, 0x17, 0x11, 0x59, 0x01, 0x11, +/* 0000F990 */ 0x59, 0x02, 0x0A, 0xD6, 0x00, 0x11, 0x59, 0x03, 0x11, 0x1F, 0x04, 0xFF, 0x10, 0x8E, 0x02, 0x16, +/* 0000F9A0 */ 0x10, 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, 0x92, 0x02, 0x11, 0x59, 0x01, 0x11, 0x59, 0x02, 0x04, +/* 0000F9B0 */ 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x92, 0x03, 0x12, +/* 0000F9C0 */ 0x7A, 0x12, 0x11, 0x00, 0x7A, 0x07, 0x11, 0x01, 0x7A, 0x07, 0x11, 0x02, 0x59, 0x03, 0x11, 0x1F, +/* 0000F9D0 */ 0x04, 0xFF, 0x10, 0x92, 0x02, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x01, 0x14, 0x00, +/* 0000F9E0 */ 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, +/* 0000F9F0 */ 0x96, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x95, +/* 0000FA00 */ 0x01, 0xFF, 0xF5, 0xAC, 0x01, 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x19, 0x00, 0x03, +/* 0000FA10 */ 0x00, 0x17, 0x00, 0x1E, 0x00, 0x70, 0x02, 0x36, 0x00, 0x68, 0x00, 0x08, 0x00, 0x13, 0x00, 0x00, +/* 0000FA20 */ 0x24, 0xFA, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x53, 0x50, 0x43, 0x00, 0xFE, 0xBB, 0x09, 0x41, +/* 0000FA30 */ 0xB2, 0x41, 0xD1, 0x00, 0x95, 0xFF, 0x5E, 0xAD, 0x01, 0x00, 0xFF, 0x5E, 0xAD, 0x01, 0x00, 0x45, +/* 0000FA40 */ 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0x5E, 0xAD, 0x01, 0x00, 0xFE, 0x2C, 0x02, 0xFE, 0x2C, 0x02, +/* 0000FA50 */ 0x08, 0x0B, 0x0F, 0x06, 0x2F, 0x2E, 0x03, 0x07, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x0E, 0x0F, +/* 0000FA60 */ 0x08, 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, 0x2B, 0x03, 0x0C, 0x06, 0xFE, 0x2D, 0x03, 0x06, 0xFE, +/* 0000FA70 */ 0x2C, 0x03, 0x0B, 0x07, 0x01, 0x01, 0x9D, 0xA8, 0x0D, 0xE7, 0x7F, 0x00, 0x8E, 0x03, 0x29, 0x10, +/* 0000FA80 */ 0x07, 0x05, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x0B, 0x8E, 0x01, 0x04, 0x11, 0x59, 0x02, 0x11, +/* 0000FA90 */ 0xA8, 0x11, 0x59, 0x03, 0x11, 0x8E, 0x01, 0x05, 0x11, 0x59, 0x04, 0x11, 0x1F, 0x05, 0x10, 0x10, +/* 0000FAA0 */ 0x45, 0x0D, 0x10, 0x5E, 0x10, 0x0D, 0x00, 0x0E, 0x4C, 0x00, 0x10, 0x8E, 0x03, 0x16, 0x10, 0x07, +/* 0000FAB0 */ 0x04, 0x00, 0x59, 0x00, 0x02, 0x8E, 0x01, 0x02, 0x11, 0x59, 0x01, 0x11, 0x8E, 0x01, 0x03, 0x11, +/* 0000FAC0 */ 0x59, 0x02, 0x11, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, +/* 0000FAD0 */ 0x5E, 0x12, 0x0D, 0x01, 0x7A, 0x12, 0x11, 0x02, 0x7A, 0x05, 0x11, 0x03, 0x7A, 0x05, 0x11, 0x04, +/* 0000FAE0 */ 0x7A, 0x08, 0x11, 0x05, 0x59, 0x03, 0x11, 0x1F, 0x04, 0xFF, 0x10, 0x8E, 0x01, 0x03, 0x10, 0x2D, +/* 0000FAF0 */ 0x10, 0x10, 0x0A, 0x94, 0x01, 0x03, 0x10, 0xEB, 0x09, 0x15, 0x00, 0xE9, 0x0C, 0x06, 0x8E, 0x03, +/* 0000FB00 */ 0x22, 0x10, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x0C, 0x1F, 0x02, 0xFF, 0x10, 0xEB, +/* 0000FB10 */ 0xA8, 0x00, 0x24, 0x00, 0x01, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, +/* 0000FB20 */ 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x94, +/* 0000FB30 */ 0x01, 0x00, 0x00, 0xFE, 0x0D, 0x02, 0xFE, 0x0D, 0x02, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, +/* 0000FB40 */ 0x95, 0x01, 0xFE, 0x94, 0x01, 0xFF, 0x94, 0xAD, 0x01, 0x00, 0x07, 0x05, 0x00, 0x00, 0x00, 0x27, +/* 0000FB50 */ 0x00, 0x5E, 0x00, 0x08, 0x00, 0x2B, 0x00, 0x40, 0x00, 0x8D, 0x00, 0x12, 0x00, 0x33, 0x00, 0x01, +/* 0000FB60 */ 0x00, 0x1D, 0x00, 0x14, 0x00, 0x8F, 0x00, 0x00, 0x7E, 0x5D, 0x00, 0xC1, 0x03, 0x1A, 0x0B, 0x00, +/* 0000FB70 */ 0xFE, 0x93, 0x09, 0x04, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x60, 0x03, 0x92, 0xFF, 0x27, 0xA8, 0x01, +/* 0000FB80 */ 0x00, 0xFF, 0x27, 0xA8, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0x27, 0xA8, 0x01, +/* 0000FB90 */ 0x00, 0xFE, 0x75, 0x04, 0xFE, 0x75, 0x04, 0x02, 0xFE, 0xA8, 0x04, 0xFE, 0xCF, 0x03, 0x08, 0x06, +/* 0000FBA0 */ 0x0B, 0x05, 0x2F, 0x2C, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x08, 0x09, 0x0A, 0x06, 0xFE, 0xD6, +/* 0000FBB0 */ 0x03, 0x06, 0xFE, 0xA3, 0x03, 0x01, 0x00, 0x08, 0x93, 0x4E, 0x07, 0x4E, 0x0B, 0x96, 0x02, 0x0B, +/* 0000FBC0 */ 0x4E, 0x0B, 0x96, 0x03, 0x0B, 0x2A, 0x0B, 0x06, 0x14, 0x03, 0x00, 0x0B, 0x02, 0x09, 0x06, 0x00, +/* 0000FBD0 */ 0xCF, 0x00, 0x00, 0x09, 0x74, 0x00, 0x2A, 0x0B, 0x06, 0x14, 0x03, 0x00, 0x0B, 0x03, 0x09, 0x0A, +/* 0000FBE0 */ 0x00, 0xCF, 0x0B, 0x01, 0xA1, 0x00, 0x06, 0x0B, 0x45, 0x06, 0x0B, 0x8E, 0x02, 0x24, 0x0C, 0x6C, +/* 0000FBF0 */ 0x0B, 0x0C, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0C, 0x59, 0x01, 0x06, 0x1F, 0x02, 0x0B, 0x0B, +/* 0000FC00 */ 0x45, 0x06, 0x0B, 0x8E, 0x02, 0x24, 0x0C, 0x6C, 0x0B, 0x0C, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 0000FC10 */ 0x0C, 0xA6, 0x0D, 0x06, 0x02, 0x59, 0x01, 0x0D, 0x1F, 0x02, 0x0B, 0x0B, 0x45, 0x07, 0x0B, 0xCF, +/* 0000FC20 */ 0x0B, 0x00, 0x96, 0x02, 0x0B, 0x96, 0x03, 0x04, 0x8E, 0x02, 0x25, 0x0B, 0x07, 0x04, 0x00, 0x59, +/* 0000FC30 */ 0x00, 0x05, 0x59, 0x01, 0x06, 0x59, 0x02, 0x07, 0xD6, 0x00, 0x0C, 0x59, 0x03, 0x0C, 0x1F, 0x04, +/* 0000FC40 */ 0xFF, 0x0B, 0x92, 0x02, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x21, 0x03, 0xFE, +/* 0000FC50 */ 0xA5, 0x04, 0xD1, 0xFF, 0x5A, 0xA8, 0x01, 0x00, 0x0B, 0x0C, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x32, +/* 0000FC60 */ 0x00, 0x06, 0x00, 0x1E, 0x00, 0x0B, 0x00, 0x2F, 0x00, 0x0A, 0x00, 0x28, 0x00, 0x18, 0x00, 0x2E, +/* 0000FC70 */ 0x00, 0x1C, 0x00, 0x70, 0x00, 0x06, 0x00, 0x17, 0x00, 0x03, 0x00, 0x14, 0x00, 0x1A, 0x00, 0xC0, +/* 0000FC80 */ 0x02, 0x08, 0x00, 0x11, 0x00, 0x00, 0x8A, 0xFC, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x13, 0x10, +/* 0000FC90 */ 0x43, 0x00, 0xFE, 0xA3, 0x09, 0x2A, 0xA2, 0x41, 0xD1, 0x00, 0x93, 0xFF, 0xEC, 0xA9, 0x01, 0x00, +/* 0000FCA0 */ 0xFF, 0xEC, 0xA9, 0x01, 0x00, 0x41, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0xEC, 0xA9, 0x01, 0x00, +/* 0000FCB0 */ 0xFE, 0x92, 0x02, 0xFE, 0x92, 0x02, 0x07, 0x0E, 0x11, 0x06, 0x55, 0x53, 0x03, 0x09, 0x09, 0x09, +/* 0000FCC0 */ 0x09, 0x09, 0x01, 0x10, 0x06, 0xFE, 0xA3, 0x03, 0x06, 0xFE, 0x94, 0x03, 0x07, 0x05, 0xFE, 0xA9, +/* 0000FCD0 */ 0x04, 0x08, 0x01, 0xFF, 0x01, 0x01, 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, 0x2B, 0x03, 0x0B, 0x06, +/* 0000FCE0 */ 0xFE, 0x2C, 0x03, 0x06, 0xFE, 0x2D, 0x03, 0xFE, 0x29, 0x01, 0x4E, 0x0F, 0x2A, 0x11, 0x0E, 0x15, +/* 0000FCF0 */ 0x03, 0x00, 0x11, 0x02, 0x09, 0x08, 0x00, 0x2A, 0x11, 0x0E, 0x15, 0x08, 0x00, 0x11, 0x03, 0x14, +/* 0000FD00 */ 0x03, 0x00, 0x0E, 0x04, 0x09, 0x15, 0x00, 0x8E, 0x03, 0x03, 0x12, 0x6C, 0x11, 0x12, 0x00, 0x07, +/* 0000FD10 */ 0x02, 0x00, 0x59, 0x00, 0x12, 0x59, 0x01, 0x05, 0x1F, 0x02, 0xFF, 0x11, 0x8E, 0x03, 0x24, 0x12, +/* 0000FD20 */ 0x6C, 0x11, 0x12, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x12, 0x59, 0x01, 0x0E, 0x1F, 0x02, 0x11, +/* 0000FD30 */ 0x11, 0x45, 0x0F, 0x11, 0x8E, 0x02, 0x0C, 0x11, 0x4A, 0x11, 0x07, 0x02, 0x00, 0x59, 0x00, 0x06, +/* 0000FD40 */ 0x59, 0x01, 0x0F, 0x1F, 0x02, 0x11, 0x11, 0x0F, 0x26, 0x00, 0x11, 0x8E, 0x03, 0x03, 0x12, 0x6C, +/* 0000FD50 */ 0x11, 0x12, 0x02, 0x07, 0x02, 0x00, 0x59, 0x00, 0x12, 0x8E, 0x03, 0x0C, 0x13, 0x07, 0x02, 0x00, +/* 0000FD60 */ 0x59, 0x00, 0x06, 0x59, 0x01, 0x0F, 0x1F, 0x02, 0x13, 0x13, 0x59, 0x01, 0x13, 0x1F, 0x02, 0xFF, +/* 0000FD70 */ 0x11, 0x8E, 0x03, 0x03, 0x12, 0x6C, 0x11, 0x12, 0x03, 0x07, 0x02, 0x00, 0x59, 0x00, 0x12, 0x59, +/* 0000FD80 */ 0x01, 0x0F, 0x1F, 0x02, 0x11, 0x11, 0x45, 0x0F, 0x11, 0xA8, 0x11, 0x15, 0x03, 0x00, 0x0F, 0x11, +/* 0000FD90 */ 0x09, 0x7C, 0x00, 0x8E, 0x03, 0x06, 0x11, 0x07, 0x04, 0x00, 0x59, 0x00, 0x06, 0x8E, 0x03, 0x18, +/* 0000FDA0 */ 0x12, 0x59, 0x01, 0x12, 0x8E, 0x01, 0x02, 0x12, 0x4A, 0x12, 0x59, 0x02, 0x12, 0x59, 0x03, 0x0F, +/* 0000FDB0 */ 0x1F, 0x04, 0x11, 0x11, 0x14, 0x03, 0x00, 0x11, 0x07, 0x09, 0x53, 0x00, 0x8E, 0x03, 0x36, 0x12, +/* 0000FDC0 */ 0x4A, 0x12, 0x6C, 0x11, 0x12, 0x04, 0x07, 0x04, 0x00, 0x59, 0x00, 0x12, 0x8E, 0x01, 0x02, 0x13, +/* 0000FDD0 */ 0x4A, 0x13, 0x59, 0x01, 0x13, 0x8E, 0x01, 0x03, 0x14, 0x4A, 0x14, 0x43, 0x13, 0x14, 0x2D, 0x14, +/* 0000FDE0 */ 0x13, 0x08, 0x01, 0x43, 0x01, 0x01, 0x03, 0x14, 0x59, 0x02, 0x13, 0xCE, 0x00, 0x00, 0x00, 0x00, +/* 0000FDF0 */ 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x7A, 0x0F, 0x13, 0x05, 0x7A, 0x0B, 0x13, 0x06, +/* 0000FE00 */ 0x7A, 0x0B, 0x13, 0x07, 0x7A, 0x0B, 0x13, 0x08, 0x59, 0x03, 0x13, 0x1F, 0x04, 0xFF, 0x11, 0xA8, +/* 0000FE10 */ 0x00, 0x24, 0x00, 0x01, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, +/* 0000FE20 */ 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, +/* 0000FE30 */ 0x00, 0x00, 0xFE, 0xAE, 0x02, 0xFE, 0x22, 0x03, 0xFE, 0xAF, 0x02, 0xFE, 0xEE, 0x01, 0xFE, 0x9C, +/* 0000FE40 */ 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFF, 0x0C, 0xAA, +/* 0000FE50 */ 0x01, 0x00, 0x09, 0x02, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x65, 0x00, 0x15, 0x00, 0x47, 0x00, 0x18, +/* 0000FE60 */ 0x00, 0x32, 0x00, 0x17, 0x00, 0x35, 0x00, 0x26, 0x00, 0x4B, 0x00, 0x18, 0x00, 0x37, 0x00, 0x33, +/* 0000FE70 */ 0x00, 0x65, 0x00, 0x55, 0x00, 0x77, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, +/* 0000FE80 */ 0xFE, 0x88, 0x09, 0x04, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x5E, 0x03, 0x91, 0xFF, 0xB2, 0xA6, 0x01, +/* 0000FE90 */ 0x00, 0xFF, 0xB2, 0xA6, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0xB2, 0xA6, 0x01, +/* 0000FEA0 */ 0x00, 0xF8, 0xF8, 0x05, 0x04, 0x06, 0x04, 0x1D, 0x1C, 0x02, 0x04, 0x02, 0x02, 0x02, 0x02, 0x05, +/* 0000FEB0 */ 0x08, 0x07, 0x5B, 0x8E, 0x02, 0x24, 0x07, 0x6C, 0x06, 0x07, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 0000FEC0 */ 0x07, 0x59, 0x01, 0x04, 0x1F, 0x02, 0x06, 0x06, 0x45, 0x04, 0x06, 0x8E, 0x01, 0x0E, 0x06, 0x4A, +/* 0000FED0 */ 0x06, 0x0F, 0x10, 0x00, 0x06, 0x8E, 0x01, 0x04, 0x06, 0x4A, 0x06, 0x07, 0x01, 0x00, 0x59, 0x00, +/* 0000FEE0 */ 0x02, 0x1F, 0x01, 0xFF, 0x06, 0x8E, 0x02, 0x03, 0x07, 0x6C, 0x06, 0x07, 0x01, 0x07, 0x03, 0x00, +/* 0000FEF0 */ 0x59, 0x00, 0x07, 0x59, 0x01, 0x04, 0x8E, 0x01, 0x0E, 0x08, 0x4A, 0x08, 0x59, 0x02, 0x08, 0x1F, +/* 0000FF00 */ 0x03, 0x06, 0x06, 0x42, 0x00, 0x06, 0x03, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x22, +/* 0000FF10 */ 0x03, 0xFE, 0xC0, 0x02, 0xFF, 0xE4, 0xA6, 0x01, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, +/* 0000FF20 */ 0x29, 0x00, 0x0A, 0x00, 0x25, 0x00, 0x10, 0x00, 0x2F, 0x00, 0x27, 0x00, 0x48, 0x00, 0x00, 0x7F, +/* 0000FF30 */ 0x5C, 0x00, 0x01, 0x00, 0x10, 0x03, 0x00, 0xFE, 0x4D, 0x09, 0x04, 0xA1, 0x41, 0xC1, 0x00, 0xFE, +/* 0000FF40 */ 0x66, 0x03, 0x90, 0xFF, 0xAE, 0x93, 0x01, 0x00, 0xFF, 0xAE, 0x93, 0x01, 0x00, 0x41, 0xFE, 0x00, +/* 0000FF50 */ 0x90, 0x01, 0x01, 0xFF, 0xAE, 0x93, 0x01, 0x00, 0xFE, 0xFE, 0x12, 0xFE, 0xFE, 0x12, 0x17, 0x25, +/* 0000FF60 */ 0x38, 0x04, 0xAC, 0x87, 0x02, 0x01, 0x37, 0x05, 0xFE, 0xAD, 0x03, 0x05, 0xFE, 0xAE, 0x03, 0x05, +/* 0000FF70 */ 0xFE, 0xAF, 0x03, 0x06, 0xFE, 0xB0, 0x03, 0x06, 0xFE, 0xB1, 0x03, 0x05, 0xFE, 0xB2, 0x03, 0x05, +/* 0000FF80 */ 0xFE, 0xB3, 0x03, 0x05, 0xFE, 0xB4, 0x03, 0x05, 0xFE, 0xB5, 0x03, 0x05, 0xFE, 0xB6, 0x03, 0x05, +/* 0000FF90 */ 0xFE, 0xB7, 0x03, 0x05, 0xFE, 0xB8, 0x03, 0x05, 0xFE, 0xB9, 0x03, 0x05, 0xFE, 0xBA, 0x03, 0x05, +/* 0000FFA0 */ 0xFE, 0xBB, 0x03, 0x05, 0xFE, 0xBC, 0x03, 0x06, 0xFE, 0x47, 0x03, 0x05, 0xFE, 0xBD, 0x03, 0x05, +/* 0000FFB0 */ 0xFE, 0xBE, 0x03, 0x05, 0xFE, 0xBF, 0x03, 0x05, 0xFE, 0xC0, 0x03, 0x05, 0xFE, 0xC1, 0x03, 0x05, +/* 0000FFC0 */ 0xFE, 0xC2, 0x03, 0x05, 0xFE, 0xC3, 0x03, 0x05, 0xFE, 0xC4, 0x03, 0x05, 0xFE, 0xC5, 0x03, 0x05, +/* 0000FFD0 */ 0xFE, 0xC6, 0x03, 0x05, 0xFE, 0xC7, 0x03, 0x05, 0xFE, 0xC8, 0x03, 0x05, 0xFE, 0xA7, 0x04, 0x05, +/* 0000FFE0 */ 0xFE, 0xC9, 0x03, 0x05, 0xFE, 0xCA, 0x03, 0x05, 0xFE, 0xCB, 0x03, 0x05, 0xFE, 0xCC, 0x03, 0x06, +/* 0000FFF0 */ 0xFE, 0xCF, 0x03, 0xFE, 0x7C, 0x02, 0x4E, 0x25, 0x4E, 0x26, 0x4E, 0x27, 0x4E, 0x28, 0x4E, 0x29, +/* 00010000 */ 0x4E, 0x2A, 0x4E, 0x2B, 0x4E, 0x2C, 0x4E, 0x2D, 0x4E, 0x2E, 0x4E, 0x2F, 0x4E, 0x30, 0x4E, 0x31, +/* 00010010 */ 0x4E, 0x32, 0x4E, 0x33, 0x4E, 0x34, 0x4E, 0x35, 0x4E, 0x36, 0x45, 0x25, 0x02, 0x45, 0x26, 0x03, +/* 00010020 */ 0x45, 0x38, 0x04, 0x01, 0x09, 0x01, 0x39, 0x25, 0x2D, 0x38, 0x38, 0x39, 0x2D, 0x38, 0x38, 0x05, +/* 00010030 */ 0x01, 0x09, 0x01, 0x39, 0x26, 0x2D, 0x38, 0x38, 0x39, 0x2D, 0x38, 0x38, 0x06, 0x45, 0x27, 0x38, +/* 00010040 */ 0x45, 0x28, 0x07, 0x2D, 0x38, 0x08, 0x09, 0x45, 0x29, 0x38, 0x45, 0x38, 0x0A, 0x01, 0x09, 0x01, +/* 00010050 */ 0x39, 0x28, 0x2D, 0x38, 0x38, 0x39, 0x2D, 0x38, 0x38, 0x05, 0x01, 0x09, 0x01, 0x39, 0x29, 0x2D, +/* 00010060 */ 0x38, 0x38, 0x39, 0x2D, 0x38, 0x38, 0x0B, 0x45, 0x2A, 0x38, 0x45, 0x38, 0x0C, 0x01, 0x09, 0x01, +/* 00010070 */ 0x39, 0x27, 0x2D, 0x38, 0x38, 0x39, 0x2D, 0x38, 0x38, 0x0D, 0x45, 0x2B, 0x38, 0x45, 0x38, 0x0A, +/* 00010080 */ 0x01, 0x09, 0x01, 0x39, 0x26, 0x2D, 0x38, 0x38, 0x39, 0x2D, 0x38, 0x38, 0x0E, 0x45, 0x2C, 0x38, +/* 00010090 */ 0x45, 0x38, 0x0A, 0x01, 0x09, 0x01, 0x39, 0x2C, 0x2D, 0x38, 0x38, 0x39, 0x2D, 0x38, 0x38, 0x0F, +/* 000100A0 */ 0x01, 0x09, 0x01, 0x39, 0x27, 0x2D, 0x38, 0x38, 0x39, 0x2D, 0x38, 0x38, 0x10, 0x45, 0x2D, 0x38, +/* 000100B0 */ 0x45, 0x38, 0x0A, 0x01, 0x09, 0x01, 0x39, 0x27, 0x2D, 0x38, 0x38, 0x39, 0x2D, 0x38, 0x38, 0x11, +/* 000100C0 */ 0x01, 0x09, 0x01, 0x39, 0x26, 0x2D, 0x38, 0x38, 0x39, 0x01, 0x09, 0x01, 0x39, 0x27, 0x2D, 0x38, +/* 000100D0 */ 0x38, 0x39, 0x2D, 0x38, 0x38, 0x13, 0x45, 0x2E, 0x38, 0x45, 0x38, 0x0A, 0x01, 0x09, 0x01, 0x39, +/* 000100E0 */ 0x25, 0x2D, 0x38, 0x38, 0x39, 0x2D, 0x38, 0x38, 0x14, 0x01, 0x09, 0x01, 0x39, 0x26, 0x2D, 0x38, +/* 000100F0 */ 0x38, 0x39, 0x2D, 0x38, 0x38, 0x13, 0x45, 0x2F, 0x38, 0x45, 0x38, 0x0A, 0x01, 0x09, 0x01, 0x39, +/* 00010100 */ 0x25, 0x2D, 0x38, 0x38, 0x39, 0x2D, 0x38, 0x38, 0x15, 0x45, 0x30, 0x38, 0x45, 0x38, 0x0A, 0x01, +/* 00010110 */ 0x09, 0x01, 0x39, 0x25, 0x2D, 0x38, 0x38, 0x39, 0x2D, 0x38, 0x38, 0x16, 0x01, 0x09, 0x01, 0x39, +/* 00010120 */ 0x25, 0x2D, 0x38, 0x38, 0x39, 0x2D, 0x38, 0x38, 0x17, 0x45, 0x31, 0x38, 0x01, 0x09, 0x01, 0x39, +/* 00010130 */ 0x25, 0x2D, 0x39, 0x39, 0x18, 0xFD, 0x38, 0x0A, 0x39, 0x05, 0x45, 0x39, 0x19, 0x01, 0x09, 0x01, +/* 00010140 */ 0x3A, 0x31, 0x2D, 0x39, 0x39, 0x3A, 0x2D, 0x39, 0x39, 0x1A, 0x45, 0x3A, 0x05, 0x01, 0x09, 0x01, +/* 00010150 */ 0x3B, 0x25, 0x2D, 0x3A, 0x3A, 0x3B, 0x2D, 0x3A, 0x3A, 0x1B, 0xFF, 0x38, 0x39, 0x3A, 0x02, 0xFE, +/* 00010160 */ 0x38, 0x0B, 0x04, 0x45, 0x32, 0x38, 0x45, 0x38, 0x1C, 0x01, 0x09, 0x01, 0x39, 0x32, 0x2D, 0x38, +/* 00010170 */ 0x38, 0x39, 0x2D, 0x38, 0x38, 0x0B, 0x45, 0x39, 0x1D, 0x01, 0x09, 0x01, 0x3A, 0x30, 0x2D, 0x39, +/* 00010180 */ 0x39, 0x3A, 0x2D, 0x39, 0x39, 0x1E, 0x2D, 0x38, 0x38, 0x39, 0x45, 0x39, 0x1D, 0x01, 0x09, 0x01, +/* 00010190 */ 0x3A, 0x2F, 0x2D, 0x39, 0x39, 0x3A, 0x2D, 0x39, 0x39, 0x1E, 0x2D, 0x38, 0x38, 0x39, 0x45, 0x33, +/* 000101A0 */ 0x38, 0x45, 0x38, 0x19, 0x01, 0x09, 0x01, 0x39, 0x2E, 0x2D, 0x38, 0x38, 0x39, 0x2D, 0x38, 0x38, +/* 000101B0 */ 0x1F, 0x45, 0x39, 0x20, 0x01, 0x09, 0x01, 0x3A, 0x2D, 0x2D, 0x39, 0x39, 0x3A, 0x2D, 0x39, 0x39, +/* 000101C0 */ 0x21, 0x2D, 0x38, 0x38, 0x39, 0x45, 0x39, 0x19, 0x01, 0x09, 0x01, 0x3A, 0x2B, 0x2D, 0x39, 0x39, +/* 000101D0 */ 0x3A, 0x2D, 0x39, 0x39, 0x22, 0x2D, 0x38, 0x38, 0x39, 0x45, 0x34, 0x38, 0x45, 0x38, 0x23, 0x01, +/* 000101E0 */ 0x09, 0x01, 0x39, 0x33, 0x2D, 0x38, 0x38, 0x39, 0x2D, 0x38, 0x38, 0x23, 0x01, 0x09, 0x01, 0x39, +/* 000101F0 */ 0x34, 0x2D, 0x38, 0x38, 0x39, 0x2D, 0x38, 0x38, 0x23, 0x45, 0x35, 0x38, 0x45, 0x38, 0x0A, 0x01, +/* 00010200 */ 0x09, 0x01, 0x39, 0x35, 0x2D, 0x38, 0x38, 0x39, 0x2D, 0x38, 0x38, 0x05, 0x01, 0x09, 0x01, 0x39, +/* 00010210 */ 0x2B, 0x2D, 0x38, 0x38, 0x39, 0x2D, 0x38, 0x38, 0x05, 0x01, 0x09, 0x01, 0x39, 0x2A, 0x2D, 0x38, +/* 00010220 */ 0x38, 0x39, 0x2D, 0x38, 0x38, 0x0B, 0x45, 0x36, 0x38, 0x8E, 0x02, 0x0A, 0x38, 0x07, 0x03, 0x00, +/* 00010230 */ 0x59, 0x01, 0x33, 0x59, 0x02, 0x24, 0xC4, 0x03, 0x38, 0x38, 0x01, 0x43, 0x01, 0x01, 0x0F, 0x38, +/* 00010240 */ 0x8E, 0x02, 0x0A, 0x38, 0x07, 0x03, 0x00, 0x59, 0x01, 0x34, 0x59, 0x02, 0x24, 0xC4, 0x03, 0x38, +/* 00010250 */ 0x38, 0x01, 0x43, 0x01, 0x01, 0x10, 0x38, 0x8E, 0x02, 0x0A, 0x38, 0x07, 0x03, 0x00, 0x59, 0x01, +/* 00010260 */ 0x36, 0x59, 0x02, 0x24, 0xC4, 0x03, 0x38, 0x38, 0x01, 0x43, 0x01, 0x01, 0x11, 0x38, 0xA8, 0x00, +/* 00010270 */ 0x24, 0x00, 0xFF, 0x8E, 0x98, 0x01, 0x00, 0x16, 0x24, 0x00, 0x00, 0x00, 0x03, 0x00, 0x1F, 0x00, +/* 00010280 */ 0x03, 0x00, 0x1F, 0x00, 0x20, 0x00, 0x33, 0x00, 0x03, 0x00, 0x77, 0x00, 0x07, 0x00, 0xC0, 0x00, +/* 00010290 */ 0x20, 0x00, 0x44, 0x00, 0x13, 0x00, 0x7D, 0x00, 0x13, 0x00, 0x94, 0x00, 0x20, 0x00, 0x83, 0x00, +/* 000102A0 */ 0x29, 0x00, 0x83, 0x00, 0x20, 0x00, 0x74, 0x00, 0x13, 0x00, 0x6A, 0x00, 0x20, 0x00, 0x7A, 0x00, +/* 000102B0 */ 0x3A, 0x00, 0x00, 0x04, 0x3B, 0x00, 0x4C, 0x01, 0x3B, 0x00, 0x5A, 0x01, 0x20, 0x00, 0x4B, 0x00, +/* 000102C0 */ 0x2D, 0x00, 0x6E, 0x00, 0x17, 0x00, 0x66, 0x00, 0x17, 0x00, 0x8B, 0x00, 0x19, 0x00, 0x72, 0x00, +/* 000102D0 */ 0x00, 0x7F, 0x4C, 0x00, 0x00, 0x20, 0x10, 0x03, 0x00, 0xFE, 0x46, 0x09, 0x04, 0xA1, 0x41, 0xC1, +/* 000102E0 */ 0x00, 0xFE, 0x51, 0x03, 0x8F, 0xFF, 0x71, 0x92, 0x01, 0x00, 0xFF, 0x71, 0x92, 0x01, 0x00, 0x41, +/* 000102F0 */ 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFF, 0x71, 0x92, 0x01, 0x00, 0x55, 0x55, 0x02, 0x02, 0x03, 0x05, +/* 00010300 */ 0x05, 0x02, 0x01, 0x02, 0x0D, 0xE2, 0x03, 0x00, 0x01, 0x43, 0x01, 0x01, 0x0E, 0x03, 0xA8, 0x00, +/* 00010310 */ 0x24, 0x00, 0x0A, 0xFE, 0xAB, 0x03, 0x01, 0xFF, 0x9F, 0x92, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, +/* 00010320 */ 0x00, 0x0B, 0x00, 0x26, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x43, 0x50, 0x03, 0x00, 0xFE, 0x35, +/* 00010330 */ 0x09, 0x04, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x5B, 0x03, 0x8E, 0xFF, 0x0C, 0x90, 0x01, 0x00, 0xFF, +/* 00010340 */ 0x0C, 0x90, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x06, 0x06, 0xFF, 0x0C, 0x90, 0x01, 0x00, 0xFE, +/* 00010350 */ 0x45, 0x02, 0xFE, 0x45, 0x02, 0x0C, 0x07, 0x0F, 0x08, 0x3A, 0x37, 0x02, 0x05, 0x03, 0x03, 0x03, +/* 00010360 */ 0x03, 0x01, 0x0E, 0x0F, 0x06, 0xFE, 0xD6, 0x03, 0x08, 0x06, 0xFE, 0xA8, 0x03, 0x05, 0xFE, 0xA9, +/* 00010370 */ 0x03, 0x06, 0xFE, 0xAA, 0x03, 0xC2, 0x4E, 0x0C, 0x4E, 0x0D, 0x97, 0x10, 0x07, 0x08, 0x45, 0x0C, +/* 00010380 */ 0x10, 0x2A, 0x10, 0x0C, 0x15, 0x03, 0x00, 0x10, 0x02, 0x09, 0xA2, 0x00, 0x8E, 0x02, 0x24, 0x11, +/* 00010390 */ 0x6C, 0x10, 0x11, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x11, 0x59, 0x01, 0x0C, 0x1F, 0x02, 0x10, +/* 000103A0 */ 0x10, 0x45, 0x0D, 0x10, 0x8E, 0x02, 0x21, 0x10, 0x07, 0x02, 0x00, 0x59, 0x00, 0x03, 0x59, 0x01, +/* 000103B0 */ 0x0D, 0x1F, 0x02, 0x10, 0x10, 0x0F, 0x0D, 0x00, 0x10, 0x12, 0x08, 0x00, 0x0D, 0x09, 0x11, 0x03, +/* 000103C0 */ 0x00, 0x0D, 0x0A, 0x09, 0x4D, 0x00, 0x8E, 0x02, 0x03, 0x11, 0x6C, 0x10, 0x11, 0x01, 0x07, 0x04, +/* 000103D0 */ 0x00, 0x59, 0x00, 0x11, 0x8E, 0x02, 0x0C, 0x12, 0x07, 0x02, 0x00, 0x59, 0x00, 0x03, 0x59, 0x01, +/* 000103E0 */ 0x0C, 0x1F, 0x02, 0x12, 0x12, 0x59, 0x01, 0x12, 0x8E, 0x02, 0x0C, 0x12, 0x07, 0x02, 0x00, 0x59, +/* 000103F0 */ 0x00, 0x03, 0x59, 0x01, 0x08, 0x1F, 0x02, 0x12, 0x12, 0x59, 0x02, 0x12, 0x2D, 0x12, 0x04, 0x09, +/* 00010400 */ 0x2D, 0x12, 0x12, 0x05, 0x2D, 0x12, 0x12, 0x0A, 0x2D, 0x12, 0x12, 0x06, 0x59, 0x03, 0x12, 0x1F, +/* 00010410 */ 0x04, 0xFF, 0x10, 0x8E, 0x02, 0x10, 0x11, 0x6C, 0x10, 0x11, 0x02, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 00010420 */ 0x11, 0x59, 0x01, 0x0D, 0x1F, 0x02, 0x00, 0x10, 0x09, 0x0B, 0x00, 0x09, 0x06, 0x00, 0x45, 0x00, +/* 00010430 */ 0x0B, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x23, 0x03, 0xFE, 0xAC, 0x02, 0x26, 0xFF, +/* 00010440 */ 0x5E, 0x90, 0x01, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x2D, 0x00, 0x0B, 0x00, 0x33, +/* 00010450 */ 0x00, 0x18, 0x00, 0x41, 0x00, 0x22, 0x00, 0x65, 0x00, 0x4D, 0x00, 0x8D, 0x00, 0x1B, 0x00, 0x40, +/* 00010460 */ 0x00, 0x08, 0x00, 0x1F, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x1B, +/* 00010470 */ 0x09, 0x04, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x50, 0x03, 0x8D, 0xFF, 0xEF, 0x8C, 0x01, 0x00, 0xFF, +/* 00010480 */ 0xEF, 0x8C, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x06, 0x06, 0xFF, 0xEF, 0x8C, 0x01, 0x00, 0xFE, +/* 00010490 */ 0x17, 0x03, 0xFE, 0x17, 0x03, 0x0B, 0x0A, 0x11, 0x0A, 0x51, 0x4B, 0x02, 0x06, 0x04, 0x04, 0x04, +/* 000104A0 */ 0x04, 0x10, 0x06, 0xFE, 0xA2, 0x03, 0x06, 0xFE, 0xA3, 0x03, 0x06, 0xFE, 0xA4, 0x03, 0x08, 0x01, +/* 000104B0 */ 0xFF, 0x05, 0xFE, 0xA5, 0x03, 0x05, 0xFE, 0xA7, 0x03, 0x05, 0xFE, 0xA6, 0x03, 0xFE, 0x10, 0x01, +/* 000104C0 */ 0x4E, 0x0F, 0x97, 0x11, 0x0A, 0x0B, 0x45, 0x0F, 0x11, 0xA8, 0x11, 0x15, 0x03, 0x00, 0x0F, 0x11, +/* 000104D0 */ 0x09, 0xF3, 0x00, 0x0C, 0x03, 0x00, 0x0C, 0x02, 0x09, 0x18, 0x00, 0x8E, 0x02, 0x24, 0x12, 0x6C, +/* 000104E0 */ 0x11, 0x12, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x12, 0x59, 0x01, 0x0F, 0x1F, 0x02, 0x11, 0x11, +/* 000104F0 */ 0x45, 0x0F, 0x11, 0x0C, 0x03, 0x00, 0x0C, 0x03, 0x09, 0x18, 0x00, 0x8E, 0x02, 0x24, 0x12, 0x6C, +/* 00010500 */ 0x11, 0x12, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x12, 0x59, 0x01, 0x0F, 0x1F, 0x02, 0x11, 0x11, +/* 00010510 */ 0x45, 0x0F, 0x11, 0x0C, 0x03, 0x00, 0x0C, 0x04, 0x09, 0x18, 0x00, 0x8E, 0x02, 0x24, 0x12, 0x6C, +/* 00010520 */ 0x11, 0x12, 0x02, 0x07, 0x02, 0x00, 0x59, 0x00, 0x12, 0x59, 0x01, 0x0F, 0x1F, 0x02, 0x11, 0x11, +/* 00010530 */ 0x45, 0x0F, 0x11, 0xA8, 0x11, 0x15, 0x03, 0x00, 0x0D, 0x11, 0x09, 0x83, 0x00, 0x8E, 0x02, 0x06, +/* 00010540 */ 0x11, 0x07, 0x04, 0x00, 0x59, 0x00, 0x05, 0x8E, 0x02, 0x18, 0x12, 0x59, 0x01, 0x12, 0x59, 0x02, +/* 00010550 */ 0x0D, 0x59, 0x03, 0x0F, 0x1F, 0x04, 0x11, 0x11, 0x0C, 0x03, 0x00, 0x11, 0x06, 0x09, 0x60, 0x00, +/* 00010560 */ 0x8E, 0x02, 0x03, 0x12, 0x6C, 0x11, 0x12, 0x03, 0x07, 0x04, 0x00, 0x59, 0x00, 0x12, 0x8E, 0x02, +/* 00010570 */ 0x0C, 0x13, 0x07, 0x02, 0x00, 0x59, 0x00, 0x05, 0x59, 0x01, 0x0F, 0x1F, 0x02, 0x13, 0x13, 0x59, +/* 00010580 */ 0x01, 0x13, 0x8E, 0x02, 0x0C, 0x13, 0x07, 0x02, 0x00, 0x59, 0x00, 0x05, 0x59, 0x01, 0x0B, 0x1F, +/* 00010590 */ 0x02, 0x13, 0x13, 0x59, 0x02, 0x13, 0x8E, 0x02, 0x06, 0x13, 0x07, 0x04, 0x00, 0x59, 0x00, 0x05, +/* 000105A0 */ 0x8E, 0x02, 0x19, 0x14, 0x59, 0x01, 0x14, 0x59, 0x02, 0x0D, 0x59, 0x03, 0x08, 0x1F, 0x04, 0x13, +/* 000105B0 */ 0x13, 0x2D, 0x13, 0x07, 0x13, 0x2D, 0x13, 0x13, 0x09, 0x59, 0x03, 0x13, 0x1F, 0x04, 0xFF, 0x11, +/* 000105C0 */ 0x45, 0x00, 0x0F, 0x09, 0x08, 0x00, 0x45, 0x00, 0x0E, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, +/* 000105D0 */ 0xFE, 0x24, 0x03, 0xFE, 0x22, 0x03, 0xFE, 0x23, 0x03, 0xFE, 0xAC, 0x02, 0xFF, 0x37, 0x8D, 0x01, +/* 000105E0 */ 0x00, 0x0D, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x28, 0x00, 0x0A, 0x00, 0x27, 0x00, 0x08, 0x00, +/* 000105F0 */ 0x29, 0x00, 0x18, 0x00, 0x45, 0x00, 0x08, 0x00, 0x28, 0x00, 0x18, 0x00, 0x3D, 0x00, 0x08, 0x00, +/* 00010600 */ 0x28, 0x00, 0x18, 0x00, 0x3D, 0x00, 0x2D, 0x00, 0x6B, 0x00, 0x60, 0x00, 0xA6, 0x00, 0x06, 0x00, +/* 00010610 */ 0x21, 0x00, 0x08, 0x00, 0x15, 0x00, 0x00, 0x7E, 0x5C, 0x00, 0xC1, 0x13, 0x10, 0x4B, 0x00, 0xFE, +/* 00010620 */ 0xF0, 0x08, 0x14, 0xA0, 0x41, 0xD1, 0x00, 0x86, 0xFF, 0xDE, 0x87, 0x01, 0x00, 0xFF, 0xDE, 0x87, +/* 00010630 */ 0x01, 0x00, 0x06, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFF, 0xDE, 0x87, 0x01, 0x00, 0xFE, 0xE0, 0x04, +/* 00010640 */ 0xFE, 0xE0, 0x04, 0x04, 0x0A, 0x0B, 0x04, 0x17, 0x17, 0x02, 0x01, 0x06, 0x06, 0x06, 0x06, 0x01, +/* 00010650 */ 0x0A, 0x08, 0x06, 0xFE, 0x21, 0x03, 0x06, 0xFE, 0x22, 0x03, 0x06, 0xFE, 0x23, 0x03, 0x06, 0xFE, +/* 00010660 */ 0x24, 0x03, 0x06, 0xFE, 0xA5, 0x04, 0x06, 0xFE, 0xA6, 0x04, 0x07, 0x58, 0x8E, 0x02, 0x04, 0x0B, +/* 00010670 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, +/* 00010680 */ 0x00, 0x00, 0x00, 0xD9, 0x00, 0x0D, 0x0C, 0x7A, 0x0D, 0x0C, 0x00, 0xD9, 0x01, 0x0D, 0x0C, 0x7A, +/* 00010690 */ 0x0D, 0x0C, 0x01, 0xD9, 0x02, 0x0D, 0x0C, 0x7A, 0x0D, 0x0C, 0x02, 0xD9, 0x03, 0x0D, 0x0C, 0x7A, +/* 000106A0 */ 0x0D, 0x0C, 0x03, 0xD9, 0x04, 0x0D, 0x0C, 0x7A, 0x0D, 0x0C, 0x04, 0xD9, 0x05, 0x0D, 0x0C, 0x7A, +/* 000106B0 */ 0x0D, 0x0C, 0x05, 0x59, 0x01, 0x0C, 0x59, 0x02, 0x09, 0x1F, 0x03, 0x00, 0x0B, 0x09, 0x02, 0x00, +/* 000106C0 */ 0xA8, 0x00, 0x24, 0x00, 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x00, +/* 000106D0 */ 0x00, 0x00, 0x00, 0x21, 0x03, 0x00, 0x00, 0x22, 0x03, 0x00, 0x00, 0x23, 0x03, 0x00, 0x00, 0x24, +/* 000106E0 */ 0x03, 0x00, 0x00, 0xA5, 0x04, 0x00, 0x00, 0xA6, 0x04, 0x00, 0x00, 0xFE, 0x21, 0x03, 0xFE, 0x22, +/* 000106F0 */ 0x03, 0xFE, 0x23, 0x03, 0xFE, 0x24, 0x03, 0xFE, 0xA5, 0x04, 0xFE, 0xA6, 0x04, 0xFF, 0xF4, 0x87, +/* 00010700 */ 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x56, 0x00, 0xC9, 0x04, 0x00, 0x16, 0x0A, 0x01, 0x00, +/* 00010710 */ 0x9F, 0x09, 0x01, 0x00, 0x28, 0x09, 0x01, 0x00, 0xB1, 0x08, 0x01, 0x00, 0xC9, 0x07, 0x01, 0x00, +/* 00010720 */ 0x24, 0x07, 0x01, 0x00, 0x7F, 0x7C, 0x00, 0x03, 0x00, 0x10, 0x17, 0x00, 0xFE, 0x0E, 0x09, 0x19, +/* 00010730 */ 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xA6, 0x04, 0x8C, 0xFF, 0x00, 0x00, 0x00, 0x02, 0xFF, 0x72, 0x8B, +/* 00010740 */ 0x01, 0x00, 0xFF, 0x72, 0x8B, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFF, 0x72, 0x8B, +/* 00010750 */ 0x01, 0x00, 0xFE, 0x35, 0x01, 0xFE, 0x35, 0x01, 0x05, 0x04, 0x07, 0x05, 0x17, 0x15, 0x14, 0x02, +/* 00010760 */ 0x03, 0x01, 0x06, 0x00, 0x42, 0x08, 0x0B, 0x46, 0xEC, 0x00, 0x0E, 0x3C, 0x00, 0x04, 0x8E, 0x02, +/* 00010770 */ 0x06, 0x07, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x8E, 0x02, 0x14, 0x08, 0x59, 0x01, 0x08, 0x59, +/* 00010780 */ 0x02, 0x04, 0x59, 0x03, 0x05, 0x1F, 0x04, 0x07, 0x07, 0x0E, 0x06, 0x00, 0x07, 0x45, 0x00, 0x03, +/* 00010790 */ 0x09, 0x19, 0x00, 0x8E, 0x02, 0x11, 0x07, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x04, +/* 000107A0 */ 0x1F, 0x02, 0x07, 0x07, 0x45, 0x04, 0x07, 0x09, 0xBE, 0xFF, 0xA8, 0x00, 0x24, 0x00, 0xFF, 0xC7, +/* 000107B0 */ 0x8B, 0x01, 0x00, 0x05, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x19, 0x00, 0x1F, 0x00, 0x54, 0x00, +/* 000107C0 */ 0x06, 0x00, 0x37, 0x00, 0x19, 0x00, 0x3B, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x07, +/* 000107D0 */ 0x00, 0xFE, 0x05, 0x09, 0x16, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xA5, 0x04, 0x8B, 0xFF, 0x00, 0x00, +/* 000107E0 */ 0x00, 0x02, 0xFF, 0x5B, 0x8A, 0x01, 0x00, 0xFF, 0x5B, 0x8A, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, +/* 000107F0 */ 0x02, 0x02, 0xFF, 0x5B, 0x8A, 0x01, 0x00, 0xFB, 0xFB, 0x09, 0x06, 0x0A, 0x07, 0x28, 0x23, 0x02, +/* 00010800 */ 0x04, 0x02, 0x02, 0x02, 0x02, 0x09, 0x08, 0x01, 0x00, 0x01, 0x02, 0x01, 0x20, 0x82, 0x8E, 0x02, +/* 00010810 */ 0x0B, 0x0A, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x06, 0x1F, 0x02, 0x0A, 0x0A, 0x45, +/* 00010820 */ 0x07, 0x0A, 0x45, 0x08, 0x03, 0x8E, 0x02, 0x21, 0x0A, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x59, +/* 00010830 */ 0x01, 0x07, 0x1F, 0x02, 0x0A, 0x0A, 0x0F, 0x4C, 0x00, 0x0A, 0x8E, 0x02, 0x20, 0x0A, 0x07, 0x02, +/* 00010840 */ 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x07, 0x1F, 0x02, 0x0A, 0x0A, 0x0E, 0x37, 0x00, 0x0A, 0x8E, +/* 00010850 */ 0x02, 0x10, 0x0B, 0x6C, 0x0A, 0x0B, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0B, 0x45, 0x0C, 0x07, +/* 00010860 */ 0x8E, 0x02, 0x10, 0x0E, 0x6C, 0x0D, 0x0E, 0x01, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0E, 0x59, 0x01, +/* 00010870 */ 0x04, 0x59, 0x02, 0x05, 0x1F, 0x03, 0x0D, 0x0D, 0x31, 0x0C, 0x0C, 0x0D, 0x59, 0x01, 0x0C, 0x1F, +/* 00010880 */ 0x02, 0x0A, 0x0A, 0x45, 0x08, 0x0A, 0x45, 0x00, 0x08, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, +/* 00010890 */ 0x1D, 0x2C, 0xFF, 0x7A, 0x8A, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x29, 0x00, +/* 000108A0 */ 0x03, 0x00, 0x19, 0x00, 0x2A, 0x00, 0x38, 0x00, 0x37, 0x00, 0x49, 0x00, 0x08, 0x00, 0x18, 0x00, +/* 000108B0 */ 0x00, 0x7F, 0x5C, 0x00, 0x01, 0x00, 0x10, 0x07, 0x00, 0xFE, 0x01, 0x09, 0x1E, 0xA2, 0x41, 0xC1, +/* 000108C0 */ 0x00, 0xFE, 0x24, 0x03, 0x8A, 0xFF, 0x00, 0x00, 0x00, 0x02, 0xFF, 0xE5, 0x89, 0x01, 0x00, 0xFF, +/* 000108D0 */ 0xE5, 0x89, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0xE5, 0x89, 0x01, 0x00, 0x5D, +/* 000108E0 */ 0x5D, 0x03, 0x03, 0x05, 0x03, 0x10, 0x0F, 0x02, 0x01, 0x04, 0x08, 0x2D, 0xA8, 0x05, 0x15, 0x03, +/* 000108F0 */ 0x00, 0x03, 0x05, 0x09, 0x17, 0x00, 0x8E, 0x02, 0x08, 0x05, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, +/* 00010900 */ 0x59, 0x01, 0x03, 0x1F, 0x02, 0x05, 0x05, 0x45, 0x00, 0x05, 0x09, 0x05, 0x00, 0xA8, 0x05, 0x46, +/* 00010910 */ 0x00, 0x05, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFF, 0x04, 0x8A, 0x01, 0x00, 0x02, 0x00, +/* 00010920 */ 0x00, 0x00, 0x00, 0x2B, 0x00, 0x3D, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0x01, 0x00, 0x10, 0x07, 0x00, +/* 00010930 */ 0xFE, 0xFD, 0x08, 0x16, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x23, 0x03, 0x89, 0xFF, 0x00, 0x00, 0x00, +/* 00010940 */ 0x02, 0xFF, 0x6E, 0x89, 0x01, 0x00, 0xFF, 0x6E, 0x89, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x02, +/* 00010950 */ 0x02, 0xFF, 0x6E, 0x89, 0x01, 0x00, 0x56, 0x56, 0x03, 0x03, 0x05, 0x03, 0x10, 0x0F, 0x02, 0x01, +/* 00010960 */ 0x04, 0x08, 0x2D, 0xA8, 0x05, 0x14, 0x03, 0x00, 0x03, 0x05, 0x09, 0x08, 0x00, 0xA9, 0x05, 0x45, +/* 00010970 */ 0x00, 0x05, 0x09, 0x14, 0x00, 0x8E, 0x02, 0x0B, 0x05, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x59, +/* 00010980 */ 0x01, 0x03, 0x1F, 0x02, 0x05, 0x05, 0x46, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, +/* 00010990 */ 0xFF, 0x8D, 0x89, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x36, 0x00, 0x00, 0x7F, +/* 000109A0 */ 0x5C, 0x00, 0x01, 0x00, 0x10, 0x07, 0x00, 0xFE, 0xF9, 0x08, 0x16, 0xA2, 0x41, 0xC1, 0x00, 0xFE, +/* 000109B0 */ 0x22, 0x03, 0x88, 0xFF, 0x00, 0x00, 0x00, 0x02, 0xFF, 0xF9, 0x88, 0x01, 0x00, 0xFF, 0xF9, 0x88, +/* 000109C0 */ 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0xF9, 0x88, 0x01, 0x00, 0x5C, 0x5C, 0x03, +/* 000109D0 */ 0x03, 0x05, 0x03, 0x10, 0x0F, 0x02, 0x01, 0x04, 0x08, 0x2D, 0xA8, 0x05, 0x15, 0x03, 0x00, 0x03, +/* 000109E0 */ 0x05, 0x09, 0x17, 0x00, 0x8E, 0x02, 0x0C, 0x05, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, +/* 000109F0 */ 0x03, 0x1F, 0x02, 0x05, 0x05, 0x45, 0x00, 0x05, 0x09, 0x05, 0x00, 0xA8, 0x05, 0x46, 0x00, 0x05, +/* 00010A00 */ 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFF, 0x18, 0x89, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, +/* 00010A10 */ 0x00, 0x2B, 0x00, 0x3C, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x07, 0x00, 0xFE, 0xF2, +/* 00010A20 */ 0x08, 0x16, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x21, 0x03, 0x87, 0xFF, 0x00, 0x00, 0x00, 0x02, 0xFF, +/* 00010A30 */ 0x20, 0x88, 0x01, 0x00, 0xFF, 0x20, 0x88, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, +/* 00010A40 */ 0x20, 0x88, 0x01, 0x00, 0xC0, 0xC0, 0x04, 0x04, 0x06, 0x03, 0x17, 0x16, 0x02, 0x02, 0x01, 0x01, +/* 00010A50 */ 0x01, 0x01, 0x05, 0x07, 0x08, 0x47, 0x14, 0x03, 0x00, 0x04, 0x02, 0x09, 0x12, 0x00, 0x8E, 0x02, +/* 00010A60 */ 0x03, 0x07, 0x6C, 0x06, 0x07, 0x00, 0x07, 0x01, 0x00, 0x59, 0x00, 0x07, 0x1F, 0x01, 0xFF, 0x06, +/* 00010A70 */ 0xA8, 0x06, 0x15, 0x03, 0x00, 0x04, 0x06, 0x09, 0x17, 0x00, 0x8E, 0x02, 0x09, 0x06, 0x07, 0x02, +/* 00010A80 */ 0x00, 0x59, 0x00, 0x03, 0x59, 0x01, 0x04, 0x1F, 0x02, 0x06, 0x06, 0x45, 0x00, 0x06, 0x09, 0x05, +/* 00010A90 */ 0x00, 0xA8, 0x06, 0x46, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xAA, 0x02, +/* 00010AA0 */ 0xFF, 0x3F, 0x88, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x26, 0x00, 0x12, 0x00, +/* 00010AB0 */ 0x3E, 0x00, 0x2B, 0x00, 0x3C, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x63, 0x50, 0x03, 0x00, 0xFE, +/* 00010AC0 */ 0xD5, 0x08, 0x20, 0xA0, 0x41, 0xC1, 0x00, 0xFE, 0xF6, 0x02, 0x85, 0xFF, 0x57, 0x84, 0x01, 0x00, +/* 00010AD0 */ 0xFF, 0x57, 0x84, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFF, 0x57, 0x84, 0x01, 0x00, +/* 00010AE0 */ 0xFE, 0x70, 0x03, 0xFE, 0x70, 0x03, 0x07, 0x05, 0x08, 0x06, 0x3E, 0x3C, 0x02, 0x06, 0x02, 0x02, +/* 00010AF0 */ 0x02, 0x02, 0x01, 0x01, 0x07, 0x08, 0x08, 0x01, 0x00, 0x01, 0x01, 0xCB, 0x4E, 0x05, 0x4E, 0x06, +/* 00010B00 */ 0x8E, 0x01, 0x0D, 0x09, 0x4A, 0x09, 0x0E, 0x09, 0x00, 0x09, 0x8E, 0x01, 0x0D, 0x00, 0x4A, 0x00, +/* 00010B10 */ 0x09, 0xB2, 0x00, 0x8E, 0x02, 0x33, 0x09, 0x4A, 0x09, 0x0E, 0x68, 0x00, 0x09, 0x8E, 0x01, 0x0F, +/* 00010B20 */ 0x09, 0x4A, 0x09, 0x0F, 0x10, 0x00, 0x09, 0x8E, 0x01, 0x05, 0x09, 0x4A, 0x09, 0x07, 0x01, 0x00, +/* 00010B30 */ 0x59, 0x00, 0x02, 0x1F, 0x01, 0xFF, 0x09, 0x8E, 0x01, 0x0A, 0x09, 0x4A, 0x09, 0x07, 0x01, 0x00, +/* 00010B40 */ 0x59, 0x00, 0x02, 0x1F, 0x01, 0x09, 0x09, 0x45, 0x05, 0x09, 0x8E, 0x02, 0x03, 0x0A, 0x6C, 0x09, +/* 00010B50 */ 0x0A, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0A, 0x59, 0x01, 0x05, 0x8E, 0x01, 0x0F, 0x0B, 0x4A, +/* 00010B60 */ 0x0B, 0x59, 0x02, 0x0B, 0x1F, 0x03, 0x09, 0x09, 0x45, 0x06, 0x09, 0x0E, 0x0D, 0x00, 0x06, 0x97, +/* 00010B70 */ 0x09, 0x06, 0x03, 0x01, 0x43, 0x01, 0x01, 0x0D, 0x09, 0x09, 0x06, 0x00, 0x01, 0x43, 0x01, 0x01, +/* 00010B80 */ 0x0D, 0x05, 0x09, 0x35, 0x00, 0x8E, 0x02, 0x03, 0x0A, 0x6C, 0x09, 0x0A, 0x01, 0x07, 0x03, 0x00, +/* 00010B90 */ 0x59, 0x00, 0x0A, 0x8E, 0x01, 0x0A, 0x0B, 0x4A, 0x0B, 0x07, 0x01, 0x00, 0x59, 0x00, 0x02, 0x1F, +/* 00010BA0 */ 0x01, 0x0B, 0x0B, 0x59, 0x01, 0x0B, 0xE2, 0x0B, 0x00, 0x59, 0x02, 0x0B, 0x1F, 0x03, 0x09, 0x09, +/* 00010BB0 */ 0x97, 0x09, 0x09, 0x04, 0x01, 0x43, 0x01, 0x01, 0x0D, 0x09, 0x8E, 0x01, 0x0D, 0x00, 0x4A, 0x00, +/* 00010BC0 */ 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xC0, 0x02, 0xFE, 0xC0, 0x02, 0x09, 0xFE, 0xA4, +/* 00010BD0 */ 0x04, 0x00, 0xFF, 0x6D, 0x84, 0x01, 0x00, 0x0D, 0x04, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x2B, 0x00, +/* 00010BE0 */ 0x09, 0x00, 0x33, 0x00, 0x0A, 0x00, 0x26, 0x00, 0x0A, 0x00, 0x29, 0x00, 0x10, 0x00, 0x33, 0x00, +/* 00010BF0 */ 0x13, 0x00, 0x2C, 0x00, 0x21, 0x00, 0x4D, 0x00, 0x04, 0x00, 0x5B, 0x00, 0x0D, 0x00, 0x49, 0x00, +/* 00010C00 */ 0x09, 0x00, 0xCB, 0x00, 0x35, 0x00, 0x6D, 0x00, 0x0B, 0x00, 0x24, 0x00, 0x00, 0x7F, 0x7C, 0x00, +/* 00010C10 */ 0xC3, 0x03, 0x10, 0x13, 0x00, 0xFE, 0xC3, 0x08, 0x19, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xF5, 0x02, +/* 00010C20 */ 0x84, 0xFF, 0x34, 0x81, 0x01, 0x00, 0xFF, 0x34, 0x81, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x05, +/* 00010C30 */ 0x05, 0xFF, 0x34, 0x81, 0x01, 0x00, 0xFE, 0x91, 0x02, 0xFE, 0x91, 0x02, 0x0C, 0x06, 0x10, 0x06, +/* 00010C40 */ 0x3E, 0x35, 0x15, 0x02, 0x04, 0x01, 0x01, 0x01, 0x01, 0x01, 0x0F, 0x5A, 0x9F, 0x05, 0xFE, 0x9C, +/* 00010C50 */ 0x03, 0x08, 0x01, 0x00, 0x01, 0x01, 0xC2, 0xA8, 0x0D, 0xA8, 0x0E, 0x14, 0x03, 0x00, 0x07, 0x02, +/* 00010C60 */ 0x09, 0x0A, 0x00, 0x8E, 0x02, 0x27, 0x11, 0x45, 0x10, 0x11, 0x09, 0x07, 0x00, 0x8E, 0x02, 0x26, +/* 00010C70 */ 0x11, 0x46, 0x10, 0x11, 0x45, 0x0A, 0x10, 0x8E, 0x02, 0x05, 0x10, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 00010C80 */ 0x03, 0x59, 0x01, 0x06, 0x1F, 0x02, 0x10, 0x10, 0x45, 0x0B, 0x10, 0x07, 0x01, 0x00, 0x59, 0x00, +/* 00010C90 */ 0x03, 0x1F, 0x01, 0x10, 0x09, 0x45, 0x0C, 0x10, 0xA8, 0x10, 0x15, 0x03, 0x00, 0x0B, 0x10, 0x09, +/* 00010CA0 */ 0x06, 0x00, 0x45, 0x10, 0x0B, 0x09, 0x03, 0x00, 0x46, 0x10, 0x04, 0x45, 0x0B, 0x10, 0x45, 0x0D, +/* 00010CB0 */ 0x04, 0xEC, 0x00, 0x12, 0x03, 0x00, 0x0D, 0x0B, 0x09, 0x3B, 0x00, 0x8E, 0x02, 0x29, 0x10, 0x07, +/* 00010CC0 */ 0x05, 0x00, 0x59, 0x00, 0x03, 0x97, 0x11, 0x06, 0x0D, 0x59, 0x01, 0x11, 0x59, 0x02, 0x0A, 0x59, +/* 00010CD0 */ 0x03, 0x08, 0x59, 0x04, 0x0C, 0x1F, 0x05, 0x10, 0x10, 0x45, 0x0E, 0x10, 0x5E, 0x10, 0x0E, 0x00, +/* 00010CE0 */ 0xA8, 0x11, 0x15, 0x03, 0x00, 0x10, 0x11, 0x09, 0x06, 0x00, 0x45, 0x00, 0x0E, 0x09, 0x27, 0x00, +/* 00010CF0 */ 0x26, 0x0D, 0x0D, 0x09, 0xBB, 0xFF, 0x8E, 0x02, 0x29, 0x10, 0x07, 0x05, 0x00, 0x59, 0x00, 0x03, +/* 00010D00 */ 0x59, 0x01, 0x0C, 0x59, 0x02, 0x0A, 0xA8, 0x11, 0x59, 0x03, 0x11, 0x59, 0x04, 0x0C, 0x1F, 0x05, +/* 00010D10 */ 0x00, 0x10, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x0D, 0x02, 0xFF, 0x83, 0x81, 0x01, +/* 00010D20 */ 0x00, 0x0C, 0x04, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x58, 0x00, 0x14, 0x00, 0x34, 0x00, 0x0D, 0x00, +/* 00010D30 */ 0x32, 0x00, 0x16, 0x00, 0x39, 0x00, 0x05, 0x00, 0x0B, 0x00, 0x08, 0x00, 0x1F, 0x00, 0x21, 0x00, +/* 00010D40 */ 0x69, 0x00, 0x0E, 0x00, 0x35, 0x00, 0x06, 0x00, 0x4F, 0xFF, 0x06, 0x00, 0xE2, 0x00, 0x21, 0x00, +/* 00010D50 */ 0x51, 0x00, 0x00, 0x7E, 0x5D, 0x00, 0xC1, 0x73, 0x5A, 0x4B, 0x04, 0xFE, 0x8A, 0x08, 0x1E, 0xA2, +/* 00010D60 */ 0x41, 0xC1, 0x00, 0xFE, 0xF4, 0x02, 0x81, 0xFF, 0x40, 0x77, 0x01, 0x00, 0xFF, 0x40, 0x77, 0x01, +/* 00010D70 */ 0x00, 0x02, 0xFE, 0x00, 0x90, 0x05, 0x05, 0xFF, 0x40, 0x77, 0x01, 0x00, 0xFE, 0xD9, 0x09, 0xFE, +/* 00010D80 */ 0xD9, 0x09, 0x03, 0xFE, 0x9D, 0x04, 0xFE, 0x0D, 0x02, 0xFE, 0x9E, 0x04, 0x0E, 0x0B, 0x15, 0x05, +/* 00010D90 */ 0x72, 0x6A, 0x02, 0x0B, 0x05, 0x05, 0x05, 0x05, 0x01, 0x01, 0x01, 0x12, 0x13, 0x14, 0x15, 0x07, +/* 00010DA0 */ 0x08, 0x01, 0x01, 0x01, 0x00, 0x06, 0xFE, 0x95, 0x03, 0x05, 0xFE, 0x9F, 0x04, 0x06, 0xFE, 0xD7, +/* 00010DB0 */ 0x03, 0x06, 0xFE, 0xA0, 0x04, 0x06, 0xFE, 0xA1, 0x04, 0xFE, 0x84, 0x01, 0x96, 0x03, 0x0B, 0x96, +/* 00010DC0 */ 0x04, 0x0D, 0x4E, 0x11, 0x8E, 0x02, 0x03, 0x17, 0x6C, 0x16, 0x17, 0x00, 0x07, 0x02, 0x00, 0x59, +/* 00010DD0 */ 0x00, 0x17, 0x92, 0x03, 0x18, 0x59, 0x01, 0x18, 0x1F, 0x02, 0x16, 0x16, 0x45, 0x0F, 0x16, 0x14, +/* 00010DE0 */ 0x03, 0x00, 0x0F, 0x02, 0x09, 0x17, 0x00, 0x8E, 0x02, 0x28, 0x16, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 00010DF0 */ 0x03, 0x92, 0x03, 0x17, 0x59, 0x01, 0x17, 0x1F, 0x02, 0x16, 0x16, 0x45, 0x0F, 0x16, 0x0E, 0x1E, +/* 00010E00 */ 0x00, 0x0F, 0x8E, 0x02, 0x06, 0x16, 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, 0x8E, 0x02, 0x17, 0x17, +/* 00010E10 */ 0x59, 0x01, 0x17, 0x59, 0x02, 0x0F, 0xD6, 0x00, 0x17, 0x59, 0x03, 0x17, 0x1F, 0x04, 0xFF, 0x16, +/* 00010E20 */ 0x8E, 0x02, 0x03, 0x17, 0x6C, 0x16, 0x17, 0x01, 0x07, 0x03, 0x00, 0x59, 0x00, 0x17, 0x92, 0x03, +/* 00010E30 */ 0x18, 0x59, 0x01, 0x18, 0xE2, 0x18, 0x00, 0x59, 0x02, 0x18, 0x1F, 0x03, 0x16, 0x16, 0x97, 0x16, +/* 00010E40 */ 0x16, 0x04, 0x96, 0x03, 0x16, 0x07, 0x03, 0x00, 0x59, 0x00, 0x03, 0x92, 0x03, 0x16, 0x59, 0x01, +/* 00010E50 */ 0x16, 0x59, 0x02, 0x0E, 0x1F, 0x03, 0x16, 0x0C, 0x45, 0x10, 0x16, 0x92, 0x04, 0x16, 0xA8, 0x17, +/* 00010E60 */ 0x15, 0x03, 0x00, 0x16, 0x17, 0x09, 0x3E, 0x00, 0xE0, 0x00, 0x03, 0x04, 0x4E, 0x16, 0x95, 0x00, +/* 00010E70 */ 0x02, 0x16, 0xCF, 0x16, 0x00, 0x96, 0x02, 0x16, 0x95, 0x00, 0x02, 0x05, 0x8E, 0x02, 0x06, 0x16, +/* 00010E80 */ 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, 0x8E, 0x02, 0x17, 0x17, 0x59, 0x01, 0x17, 0x59, 0x02, 0x0F, +/* 00010E90 */ 0xB9, 0x18, 0x00, 0x01, 0x66, 0x01, 0x01, 0x17, 0x18, 0x59, 0x03, 0x17, 0x1F, 0x04, 0xFF, 0x16, +/* 00010EA0 */ 0x92, 0x02, 0x16, 0x45, 0x0F, 0x16, 0x45, 0x11, 0x10, 0x0E, 0x5A, 0x00, 0x10, 0x0E, 0x2E, 0x00, +/* 00010EB0 */ 0x0F, 0x8E, 0x02, 0x05, 0x16, 0x07, 0x02, 0x00, 0x59, 0x00, 0x03, 0x59, 0x01, 0x0F, 0x1F, 0x02, +/* 00010EC0 */ 0x16, 0x16, 0x11, 0x03, 0x00, 0x16, 0x05, 0x09, 0x15, 0x00, 0x8E, 0x02, 0x33, 0x16, 0x4A, 0x16, +/* 00010ED0 */ 0x0E, 0x07, 0x00, 0x16, 0x2D, 0x10, 0x10, 0x06, 0x09, 0x04, 0x00, 0x2D, 0x10, 0x10, 0x07, 0x45, +/* 00010EE0 */ 0x16, 0x10, 0x8E, 0x02, 0x06, 0x17, 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, 0x8E, 0x02, 0x19, 0x18, +/* 00010EF0 */ 0x59, 0x01, 0x18, 0x59, 0x02, 0x0F, 0x59, 0x03, 0x06, 0x1F, 0x04, 0x17, 0x17, 0x2D, 0x16, 0x16, +/* 00010F00 */ 0x17, 0x45, 0x10, 0x16, 0x09, 0x05, 0x00, 0xA8, 0x16, 0x45, 0x10, 0x16, 0x8E, 0x02, 0x04, 0x16, +/* 00010F10 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x03, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, +/* 00010F20 */ 0x00, 0x00, 0x00, 0x7A, 0x10, 0x17, 0x02, 0x7A, 0x0F, 0x17, 0x03, 0x7A, 0x11, 0x17, 0x04, 0x59, +/* 00010F30 */ 0x01, 0x17, 0x59, 0x02, 0x02, 0x1F, 0x03, 0x00, 0x16, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, +/* 00010F40 */ 0x01, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, +/* 00010F50 */ 0x02, 0x00, 0x00, 0x11, 0x02, 0x00, 0x00, 0x0F, 0x02, 0x00, 0x00, 0xFE, 0xF6, 0x01, 0xFE, 0xC0, +/* 00010F60 */ 0x02, 0xFE, 0x0D, 0x02, 0xFE, 0x11, 0x02, 0xFE, 0x0F, 0x02, 0x01, 0x04, 0x01, 0x00, 0xFE, 0xCF, +/* 00010F70 */ 0x03, 0x0D, 0xFE, 0xA2, 0x04, 0x00, 0xFF, 0x84, 0x77, 0x01, 0x00, 0x16, 0x08, 0x00, 0x00, 0x00, +/* 00010F80 */ 0x1B, 0x00, 0x36, 0x00, 0x08, 0x00, 0x81, 0x00, 0x17, 0x00, 0x3A, 0x00, 0x04, 0x00, 0x1B, 0x00, +/* 00010F90 */ 0x1E, 0x00, 0x53, 0x02, 0x25, 0x00, 0x49, 0x00, 0x16, 0x00, 0x37, 0x00, 0x17, 0x00, 0x50, 0x00, +/* 00010FA0 */ 0x06, 0x00, 0x1F, 0x00, 0x04, 0x00, 0x17, 0x00, 0x24, 0x00, 0xE9, 0x01, 0x06, 0x00, 0xF9, 0x00, +/* 00010FB0 */ 0x03, 0x00, 0x29, 0x00, 0x04, 0x00, 0x1C, 0x00, 0x1D, 0x00, 0x3E, 0x00, 0x0A, 0x00, 0x2E, 0x00, +/* 00010FC0 */ 0x07, 0x00, 0x3E, 0x00, 0x04, 0x00, 0x40, 0x00, 0x28, 0x00, 0x5C, 0x00, 0x05, 0x00, 0x29, 0x00, +/* 00010FD0 */ 0x32, 0x00, 0x99, 0x00, 0x00, 0x22, 0x11, 0x01, 0x00, 0xDD, 0x0F, 0x01, 0x00, 0x7F, 0x5C, 0x00, +/* 00010FE0 */ 0xC1, 0x33, 0x10, 0x43, 0x00, 0xFE, 0xA0, 0x08, 0x3D, 0xA2, 0x41, 0xD1, 0x00, 0x83, 0xFF, 0x1A, +/* 00010FF0 */ 0x7C, 0x01, 0x00, 0xFF, 0x1A, 0x7C, 0x01, 0x00, 0x41, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0x1A, +/* 00011000 */ 0x7C, 0x01, 0x00, 0xFE, 0xA8, 0x01, 0xFE, 0xA8, 0x01, 0x08, 0x0B, 0x0F, 0x05, 0x2D, 0x2B, 0x04, +/* 00011010 */ 0x07, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x0E, 0x01, 0x01, 0x08, 0x01, 0xFF, 0x06, 0xFE, 0x2A, +/* 00011020 */ 0x03, 0x06, 0xFE, 0x2C, 0x03, 0x0B, 0x06, 0xFE, 0x2D, 0x03, 0x06, 0xFE, 0x2B, 0x03, 0x07, 0xA1, +/* 00011030 */ 0x8E, 0x04, 0x03, 0x10, 0x6C, 0x0F, 0x10, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x10, 0x59, 0x01, +/* 00011040 */ 0x0B, 0xE2, 0x11, 0x00, 0x59, 0x02, 0x11, 0x1F, 0x03, 0x0F, 0x0F, 0x45, 0x0C, 0x0F, 0x97, 0x0F, +/* 00011050 */ 0x0C, 0x02, 0x45, 0x0D, 0x0F, 0x8E, 0x04, 0x06, 0x0F, 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, 0x8E, +/* 00011060 */ 0x04, 0x18, 0x10, 0x59, 0x01, 0x10, 0x8E, 0x02, 0x04, 0x10, 0x59, 0x02, 0x10, 0x59, 0x03, 0x0D, +/* 00011070 */ 0x1F, 0x04, 0x0F, 0x0F, 0x15, 0x03, 0x00, 0x0F, 0x04, 0x09, 0x51, 0x00, 0x8E, 0x04, 0x36, 0x10, +/* 00011080 */ 0x4A, 0x10, 0x6C, 0x0F, 0x10, 0x01, 0x07, 0x04, 0x00, 0x59, 0x00, 0x10, 0x8E, 0x02, 0x02, 0x11, +/* 00011090 */ 0x59, 0x01, 0x11, 0x8E, 0x01, 0x02, 0x12, 0x4A, 0x12, 0x43, 0x11, 0x12, 0x2D, 0x12, 0x11, 0x02, +/* 000110A0 */ 0x01, 0x43, 0x01, 0x01, 0x02, 0x12, 0x59, 0x02, 0x11, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 000110B0 */ 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x7A, 0x0B, 0x11, 0x02, 0x7A, 0x07, 0x11, 0x03, 0x7A, 0x07, +/* 000110C0 */ 0x11, 0x04, 0x7A, 0x07, 0x11, 0x05, 0x59, 0x03, 0x11, 0x1F, 0x04, 0xFF, 0x0F, 0xA8, 0x00, 0x24, +/* 000110D0 */ 0x00, 0x01, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 000110E0 */ 0x97, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, +/* 000110F0 */ 0xFE, 0xC0, 0x02, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, +/* 00011100 */ 0x96, 0x01, 0x0E, 0xFE, 0xA3, 0x04, 0x00, 0xFF, 0x3E, 0x7C, 0x01, 0x00, 0x05, 0x00, 0x00, 0x00, +/* 00011110 */ 0x00, 0x1E, 0x00, 0x7A, 0x00, 0x07, 0x00, 0x24, 0x00, 0x27, 0x00, 0x5F, 0x00, 0x53, 0x00, 0x86, +/* 00011120 */ 0x00, 0x00, 0x7F, 0x5C, 0x00, 0x01, 0x00, 0x10, 0x03, 0x00, 0xFE, 0x92, 0x08, 0x3C, 0xA2, 0x41, +/* 00011130 */ 0xD1, 0x00, 0x82, 0xFF, 0xC0, 0x78, 0x01, 0x00, 0xFF, 0xC0, 0x78, 0x01, 0x00, 0x41, 0xFE, 0x00, +/* 00011140 */ 0x90, 0x02, 0x02, 0xFF, 0xC0, 0x78, 0x01, 0x00, 0x7D, 0x7D, 0x04, 0x05, 0x07, 0x06, 0x0F, 0x0F, +/* 00011150 */ 0x03, 0x03, 0x06, 0x06, 0xFE, 0x95, 0x03, 0x06, 0xFE, 0x47, 0x03, 0x08, 0x2E, 0x8E, 0x03, 0x06, +/* 00011160 */ 0x07, 0x07, 0x05, 0x00, 0x59, 0x00, 0x04, 0x8E, 0x03, 0x1D, 0x08, 0x59, 0x01, 0x08, 0x8E, 0x01, +/* 00011170 */ 0x03, 0x08, 0x59, 0x02, 0x08, 0x2D, 0x08, 0x02, 0x05, 0x59, 0x03, 0x08, 0x59, 0x04, 0x03, 0x1F, +/* 00011180 */ 0x05, 0x07, 0x07, 0x94, 0x01, 0x03, 0x07, 0xA8, 0x00, 0x24, 0x00, 0xFF, 0xE4, 0x78, 0x01, 0x00, +/* 00011190 */ 0x02, 0x00, 0x00, 0x00, 0x00, 0x2C, 0x00, 0x58, 0x00, 0x00, 0x7E, 0x5C, 0x00, 0xC1, 0x03, 0x10, +/* 000111A0 */ 0x0B, 0x00, 0xFE, 0x71, 0x08, 0x1E, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xF3, 0x02, 0x7F, 0xFF, 0x0F, +/* 000111B0 */ 0x73, 0x01, 0x00, 0xFF, 0x0F, 0x73, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0x0F, +/* 000111C0 */ 0x73, 0x01, 0x00, 0xFE, 0x11, 0x04, 0xFE, 0x11, 0x04, 0x07, 0x05, 0x09, 0x04, 0x29, 0x26, 0x02, +/* 000111D0 */ 0x03, 0x03, 0x03, 0x03, 0x03, 0x08, 0x08, 0x01, 0x00, 0x06, 0xFE, 0x95, 0x03, 0x7E, 0x4E, 0x06, +/* 000111E0 */ 0x4E, 0x07, 0x8E, 0x01, 0x10, 0x09, 0x4A, 0x09, 0x0F, 0x10, 0x00, 0x09, 0x8E, 0x01, 0x05, 0x09, +/* 000111F0 */ 0x4A, 0x09, 0x07, 0x01, 0x00, 0x59, 0x00, 0x02, 0x1F, 0x01, 0xFF, 0x09, 0x8E, 0x02, 0x03, 0x0A, +/* 00011200 */ 0x6C, 0x09, 0x0A, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0A, 0x59, 0x01, 0x05, 0x8E, 0x01, 0x10, +/* 00011210 */ 0x0B, 0x4A, 0x0B, 0x59, 0x02, 0x0B, 0x1F, 0x03, 0x09, 0x09, 0x45, 0x06, 0x09, 0x0F, 0x05, 0x00, +/* 00011220 */ 0x06, 0xA8, 0x00, 0x09, 0x34, 0x00, 0x97, 0x0B, 0x06, 0x03, 0x6C, 0x0A, 0x0B, 0x01, 0x07, 0x02, +/* 00011230 */ 0x00, 0x59, 0x00, 0x0B, 0x59, 0x01, 0x04, 0x1F, 0x02, 0x0A, 0x0A, 0x6C, 0x09, 0x0A, 0x02, 0x07, +/* 00011240 */ 0x02, 0x00, 0x59, 0x00, 0x0A, 0xD6, 0x00, 0x0B, 0x59, 0x01, 0x0B, 0x1F, 0x02, 0x09, 0x09, 0x45, +/* 00011250 */ 0x07, 0x09, 0x45, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xC0, 0x02, 0xFE, +/* 00011260 */ 0x56, 0x01, 0x89, 0xFF, 0x2B, 0x73, 0x01, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x24, +/* 00011270 */ 0x00, 0x10, 0x00, 0x2B, 0x00, 0x21, 0x00, 0x4B, 0x00, 0x04, 0x00, 0x1A, 0x00, 0x05, 0x00, 0x5C, +/* 00011280 */ 0x02, 0x2C, 0x00, 0xCD, 0x00, 0x08, 0x00, 0x17, 0x00, 0x00, 0x8E, 0x12, 0x01, 0x00, 0x7F, 0x4C, +/* 00011290 */ 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0xFE, 0x84, 0x08, 0x36, 0xA2, 0x41, 0xD0, 0x00, 0x80, 0xFE, +/* 000112A0 */ 0x01, 0x10, 0xFF, 0x69, 0x76, 0x01, 0x00, 0xFF, 0x69, 0x76, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, +/* 000112B0 */ 0x02, 0x02, 0xFF, 0x69, 0x76, 0x01, 0x00, 0x0A, 0x0A, 0x02, 0x02, 0x03, 0x0A, 0x0A, 0x02, 0x17, +/* 000112C0 */ 0xAD, 0x03, 0x0F, 0x02, 0x00, 0x02, 0xAC, 0x03, 0xAD, 0x00, 0x0F, 0x02, 0x00, 0x03, 0xAC, 0x00, +/* 000112D0 */ 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFF, 0x70, 0x76, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, +/* 000112E0 */ 0x00, 0x15, 0x00, 0x03, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x43, 0x50, 0x03, 0x00, 0xFE, 0x5A, +/* 000112F0 */ 0x08, 0x1E, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x9C, 0x04, 0x7E, 0xFF, 0x7C, 0x6E, 0x01, 0x00, 0xFF, +/* 00011300 */ 0x7C, 0x6E, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0x7C, 0x6E, 0x01, 0x00, 0xFE, +/* 00011310 */ 0x73, 0x04, 0xFE, 0x73, 0x04, 0x09, 0x09, 0x0D, 0x04, 0x56, 0x4D, 0x02, 0x04, 0x06, 0x06, 0x06, +/* 00011320 */ 0x06, 0x01, 0x0C, 0x0D, 0x07, 0x08, 0x01, 0x01, 0x01, 0x02, 0x06, 0xFE, 0x95, 0x03, 0x06, 0xFE, +/* 00011330 */ 0x47, 0x03, 0x01, 0x03, 0xFE, 0x1B, 0x01, 0x4E, 0x0A, 0x4E, 0x0B, 0x8E, 0x02, 0x03, 0x0F, 0x5E, +/* 00011340 */ 0x0F, 0x0F, 0x00, 0x6C, 0x0E, 0x0F, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0F, 0x59, 0x01, 0x09, +/* 00011350 */ 0x1F, 0x02, 0x0E, 0x0E, 0x45, 0x0A, 0x0E, 0xA8, 0x0E, 0x14, 0x03, 0x00, 0x0A, 0x0E, 0x09, 0xD4, +/* 00011360 */ 0x00, 0x8E, 0x02, 0x03, 0x0F, 0x6C, 0x0E, 0x0F, 0x02, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0F, 0x59, +/* 00011370 */ 0x01, 0x09, 0x1F, 0x02, 0x0E, 0x0E, 0x45, 0x0A, 0x0E, 0x14, 0x03, 0x00, 0x0A, 0x02, 0x09, 0x7C, +/* 00011380 */ 0x00, 0x8E, 0x01, 0x0F, 0x0E, 0x4A, 0x0E, 0x0F, 0x10, 0x00, 0x0E, 0x8E, 0x01, 0x05, 0x0E, 0x4A, +/* 00011390 */ 0x0E, 0x07, 0x01, 0x00, 0x59, 0x00, 0x03, 0x1F, 0x01, 0xFF, 0x0E, 0x8E, 0x02, 0x03, 0x0F, 0x6C, +/* 000113A0 */ 0x0E, 0x0F, 0x03, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0F, 0x59, 0x01, 0x09, 0x8E, 0x01, 0x0F, 0x10, +/* 000113B0 */ 0x4A, 0x10, 0x59, 0x02, 0x10, 0x1F, 0x03, 0x0E, 0x0E, 0x45, 0x0B, 0x0E, 0x97, 0x0E, 0x0B, 0x04, +/* 000113C0 */ 0x97, 0x0F, 0x0B, 0x05, 0x0E, 0x0E, 0x00, 0x0F, 0x97, 0x10, 0x0B, 0x05, 0x2D, 0x10, 0x06, 0x10, +/* 000113D0 */ 0x45, 0x0F, 0x10, 0x09, 0x03, 0x00, 0x46, 0x0F, 0x07, 0x2D, 0x0E, 0x0E, 0x0F, 0x97, 0x0F, 0x0B, +/* 000113E0 */ 0x08, 0x0E, 0x0E, 0x00, 0x0F, 0x97, 0x10, 0x0B, 0x08, 0x2D, 0x10, 0x06, 0x10, 0x45, 0x0F, 0x10, +/* 000113F0 */ 0x09, 0x03, 0x00, 0x46, 0x0F, 0x07, 0x2D, 0x0E, 0x0E, 0x0F, 0x45, 0x0A, 0x0E, 0x8E, 0x02, 0x03, +/* 00011400 */ 0x0F, 0x5E, 0x0F, 0x0F, 0x04, 0x6C, 0x0E, 0x0F, 0x05, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0F, 0x59, +/* 00011410 */ 0x01, 0x09, 0xA8, 0x10, 0x14, 0x03, 0x00, 0x0A, 0x10, 0x09, 0x0C, 0x00, 0x8E, 0x02, 0x34, 0x11, +/* 00011420 */ 0x4A, 0x11, 0x45, 0x10, 0x11, 0x09, 0x03, 0x00, 0x46, 0x10, 0x0A, 0x59, 0x02, 0x10, 0x1F, 0x03, +/* 00011430 */ 0xFF, 0x0E, 0x09, 0x13, 0x00, 0x8E, 0x02, 0x34, 0x0E, 0x4A, 0x0E, 0x14, 0x03, 0x00, 0x0A, 0x0E, +/* 00011440 */ 0x09, 0x05, 0x00, 0xA8, 0x0E, 0x45, 0x0A, 0x0E, 0x45, 0x00, 0x0A, 0x09, 0x02, 0x00, 0xA8, 0x00, +/* 00011450 */ 0x24, 0x00, 0xFE, 0x4E, 0x03, 0xFE, 0x98, 0x01, 0xFE, 0xF3, 0x01, 0xFE, 0xC0, 0x02, 0xFE, 0x4E, +/* 00011460 */ 0x03, 0xFE, 0x9B, 0x01, 0xFF, 0xA6, 0x6E, 0x01, 0x00, 0x0D, 0x04, 0x00, 0x00, 0x00, 0x1C, 0x00, +/* 00011470 */ 0x53, 0x00, 0x0A, 0x00, 0x30, 0x00, 0x18, 0x00, 0x51, 0x00, 0x08, 0x00, 0x2F, 0x00, 0x0A, 0x00, +/* 00011480 */ 0x2D, 0x00, 0x10, 0x00, 0x3A, 0x00, 0x21, 0x00, 0xB1, 0x00, 0x41, 0x00, 0x34, 0x01, 0x38, 0x00, +/* 00011490 */ 0x80, 0x00, 0x0E, 0x00, 0x30, 0x00, 0x05, 0x00, 0x2E, 0x00, 0x08, 0x00, 0x1B, 0x00, 0x00, 0x7F, +/* 000114A0 */ 0x5C, 0x00, 0xC1, 0x43, 0x50, 0x03, 0x00, 0xFE, 0x3F, 0x08, 0x1F, 0xA2, 0x41, 0xC1, 0x00, 0xFE, +/* 000114B0 */ 0x9B, 0x04, 0x7D, 0xFF, 0xD6, 0x69, 0x01, 0x00, 0xFF, 0xD6, 0x69, 0x01, 0x00, 0x01, 0xFE, 0x00, +/* 000114C0 */ 0x90, 0x03, 0x03, 0xFF, 0xD6, 0x69, 0x01, 0x00, 0xFE, 0x86, 0x04, 0xFE, 0x86, 0x04, 0x0A, 0x09, +/* 000114D0 */ 0x0E, 0x04, 0x5F, 0x55, 0x02, 0x04, 0x06, 0x06, 0x06, 0x06, 0x01, 0x0D, 0x0E, 0x07, 0x08, 0x01, +/* 000114E0 */ 0x01, 0x01, 0x02, 0x06, 0xFE, 0x95, 0x03, 0x06, 0xFE, 0x47, 0x03, 0x01, 0x03, 0xFE, 0x3A, 0x01, +/* 000114F0 */ 0x4E, 0x0C, 0x8E, 0x02, 0x03, 0x10, 0x5E, 0x10, 0x10, 0x00, 0x6C, 0x0F, 0x10, 0x01, 0x07, 0x02, +/* 00011500 */ 0x00, 0x59, 0x00, 0x10, 0x59, 0x01, 0x09, 0x1F, 0x02, 0x0F, 0x0F, 0x45, 0x0B, 0x0F, 0xA8, 0x0F, +/* 00011510 */ 0x14, 0x03, 0x00, 0x0B, 0x0F, 0x09, 0xD4, 0x00, 0x8E, 0x02, 0x03, 0x10, 0x6C, 0x0F, 0x10, 0x02, +/* 00011520 */ 0x07, 0x02, 0x00, 0x59, 0x00, 0x10, 0x59, 0x01, 0x09, 0x1F, 0x02, 0x0F, 0x0F, 0x45, 0x0B, 0x0F, +/* 00011530 */ 0x14, 0x03, 0x00, 0x0B, 0x02, 0x09, 0x7C, 0x00, 0x8E, 0x01, 0x0F, 0x0F, 0x4A, 0x0F, 0x0F, 0x10, +/* 00011540 */ 0x00, 0x0F, 0x8E, 0x01, 0x05, 0x0F, 0x4A, 0x0F, 0x07, 0x01, 0x00, 0x59, 0x00, 0x03, 0x1F, 0x01, +/* 00011550 */ 0xFF, 0x0F, 0x8E, 0x02, 0x03, 0x10, 0x6C, 0x0F, 0x10, 0x03, 0x07, 0x03, 0x00, 0x59, 0x00, 0x10, +/* 00011560 */ 0x59, 0x01, 0x09, 0x8E, 0x01, 0x0F, 0x11, 0x4A, 0x11, 0x59, 0x02, 0x11, 0x1F, 0x03, 0x0F, 0x0F, +/* 00011570 */ 0x45, 0x0C, 0x0F, 0x97, 0x0F, 0x0C, 0x04, 0x97, 0x10, 0x0C, 0x05, 0x0E, 0x0E, 0x00, 0x10, 0x97, +/* 00011580 */ 0x11, 0x0C, 0x05, 0x2D, 0x11, 0x06, 0x11, 0x45, 0x10, 0x11, 0x09, 0x03, 0x00, 0x46, 0x10, 0x07, +/* 00011590 */ 0x2D, 0x0F, 0x0F, 0x10, 0x97, 0x10, 0x0C, 0x08, 0x0E, 0x0E, 0x00, 0x10, 0x97, 0x11, 0x0C, 0x08, +/* 000115A0 */ 0x2D, 0x11, 0x06, 0x11, 0x45, 0x10, 0x11, 0x09, 0x03, 0x00, 0x46, 0x10, 0x07, 0x2D, 0x0F, 0x0F, +/* 000115B0 */ 0x10, 0x45, 0x0B, 0x0F, 0x8E, 0x02, 0x03, 0x10, 0x5E, 0x10, 0x10, 0x04, 0x6C, 0x0F, 0x10, 0x05, +/* 000115C0 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x10, 0x59, 0x01, 0x09, 0xA8, 0x11, 0x14, 0x03, 0x00, 0x0B, 0x11, +/* 000115D0 */ 0x09, 0x0C, 0x00, 0x8E, 0x02, 0x34, 0x12, 0x4A, 0x12, 0x45, 0x11, 0x12, 0x09, 0x03, 0x00, 0x46, +/* 000115E0 */ 0x11, 0x0B, 0x59, 0x02, 0x11, 0x1F, 0x03, 0xFF, 0x0F, 0x09, 0x13, 0x00, 0x8E, 0x02, 0x34, 0x0F, +/* 000115F0 */ 0x4A, 0x0F, 0x14, 0x03, 0x00, 0x0B, 0x0F, 0x09, 0x05, 0x00, 0xA8, 0x0F, 0x45, 0x0B, 0x0F, 0x14, +/* 00011600 */ 0x03, 0x00, 0x0A, 0x09, 0x09, 0x09, 0x00, 0x45, 0x00, 0x0B, 0x09, 0x1B, 0x00, 0x09, 0x16, 0x00, +/* 00011610 */ 0x14, 0x03, 0x00, 0x0A, 0x0B, 0x09, 0x08, 0x00, 0xA8, 0x00, 0x09, 0x0B, 0x00, 0x09, 0x06, 0x00, +/* 00011620 */ 0x45, 0x00, 0x0B, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x4F, 0x03, 0xFE, 0x98, 0x01, +/* 00011630 */ 0xFE, 0xF4, 0x01, 0xFE, 0xC0, 0x02, 0xFE, 0x4F, 0x03, 0xFE, 0x9B, 0x01, 0xFF, 0x01, 0x6A, 0x01, +/* 00011640 */ 0x00, 0x11, 0x02, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x46, 0x00, 0x0A, 0x00, 0x30, 0x00, 0x18, 0x00, +/* 00011650 */ 0x44, 0x00, 0x08, 0x00, 0x2F, 0x00, 0x0A, 0x00, 0x2D, 0x00, 0x10, 0x00, 0x3A, 0x00, 0x21, 0x00, +/* 00011660 */ 0x52, 0x00, 0x41, 0x00, 0x0C, 0x01, 0x38, 0x00, 0x73, 0x00, 0x0E, 0x00, 0x30, 0x00, 0x05, 0x00, +/* 00011670 */ 0x2F, 0x00, 0x08, 0x00, 0x2C, 0x00, 0x09, 0x00, 0x26, 0x00, 0x08, 0x00, 0x34, 0x00, 0x08, 0x00, +/* 00011680 */ 0x2F, 0x00, 0x08, 0x00, 0x25, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, +/* 00011690 */ 0x3B, 0x08, 0x1C, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xF0, 0x02, 0x7C, 0xFF, 0x63, 0x69, 0x01, 0x00, +/* 000116A0 */ 0xFF, 0x63, 0x69, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFF, 0x63, 0x69, 0x01, 0x00, +/* 000116B0 */ 0x51, 0x51, 0x05, 0x02, 0x05, 0x04, 0x0B, 0x0B, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x1F, +/* 000116C0 */ 0x8E, 0x02, 0x03, 0x06, 0x6C, 0x05, 0x06, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x06, 0x59, 0x01, +/* 000116D0 */ 0x03, 0x59, 0x02, 0x02, 0x1F, 0x03, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, +/* 000116E0 */ 0xBD, 0x02, 0xFF, 0x80, 0x69, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x33, 0x00, +/* 000116F0 */ 0x00, 0x7F, 0x4C, 0x00, 0xC0, 0x03, 0x00, 0x03, 0x00, 0xFE, 0x35, 0x08, 0x1C, 0xA2, 0x41, 0xC1, +/* 00011700 */ 0x00, 0xFE, 0xEF, 0x02, 0x7B, 0xFF, 0xC9, 0x68, 0x01, 0x00, 0xFF, 0xC9, 0x68, 0x01, 0x00, 0x41, +/* 00011710 */ 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0xC9, 0x68, 0x01, 0x00, 0x7B, 0x7B, 0x02, 0x04, 0x05, 0x09, +/* 00011720 */ 0x09, 0x02, 0x02, 0x02, 0x02, 0x02, 0x04, 0x00, 0x00, 0x00, 0xF9, 0x7F, 0xFD, 0xDF, 0xC1, 0x04, +/* 00011730 */ 0x00, 0x00, 0x40, 0xFE, 0x7F, 0xFD, 0xDF, 0xC1, 0x1B, 0x5E, 0x05, 0x04, 0x00, 0x14, 0x0C, 0x00, +/* 00011740 */ 0x05, 0x02, 0x5E, 0x05, 0x04, 0x01, 0x14, 0x03, 0x00, 0x05, 0x03, 0x09, 0x02, 0x00, 0x23, 0x04, +/* 00011750 */ 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x0C, 0x01, 0xFE, 0x0C, 0x01, 0xFF, 0xE1, 0x68, 0x01, 0x00, 0x03, +/* 00011760 */ 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x4A, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x7F, 0x7C, 0x02, +/* 00011770 */ 0x02, 0x00, 0x00, 0x13, 0x00, 0xFE, 0x2A, 0x08, 0x1B, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xF2, 0x02, +/* 00011780 */ 0x7A, 0xFF, 0x70, 0x67, 0x01, 0x00, 0xFF, 0x70, 0x67, 0x01, 0x00, 0x41, 0xFE, 0x00, 0x90, 0x04, +/* 00011790 */ 0x04, 0xFF, 0x70, 0x67, 0x01, 0x00, 0xD5, 0xD5, 0x06, 0x05, 0x09, 0x03, 0x12, 0x10, 0x0D, 0x02, +/* 000117A0 */ 0x01, 0x01, 0x05, 0x33, 0x01, 0x00, 0x08, 0x01, 0x01, 0x37, 0x4E, 0x08, 0x45, 0x08, 0x02, 0xEC, +/* 000117B0 */ 0x00, 0x12, 0x03, 0x00, 0x08, 0x06, 0x09, 0x24, 0x00, 0xBC, 0x09, 0x08, 0x05, 0x00, 0x00, 0x0E, +/* 000117C0 */ 0x14, 0x00, 0x09, 0x45, 0x09, 0x07, 0x07, 0x02, 0x00, 0x59, 0x00, 0x03, 0x97, 0x0A, 0x05, 0x08, +/* 000117D0 */ 0x59, 0x01, 0x0A, 0x1F, 0x02, 0xFF, 0x09, 0x26, 0x08, 0x08, 0x09, 0xD2, 0xFF, 0xA8, 0x00, 0x24, +/* 000117E0 */ 0x00, 0xFF, 0x97, 0x67, 0x01, 0x00, 0x06, 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x20, 0x00, 0x08, +/* 000117F0 */ 0x00, 0x20, 0x00, 0x0A, 0x00, 0x26, 0x00, 0x14, 0x00, 0x2E, 0x00, 0x08, 0x00, 0x19, 0x00, 0x00, +/* 00011800 */ 0x7F, 0x5C, 0x00, 0xC1, 0x43, 0x50, 0x03, 0x00, 0xFE, 0x1D, 0x08, 0x22, 0xA2, 0x41, 0xC1, 0x00, +/* 00011810 */ 0xFE, 0x68, 0x03, 0x79, 0xFF, 0xE7, 0x65, 0x01, 0x00, 0xFF, 0xE7, 0x65, 0x01, 0x00, 0x01, 0xFE, +/* 00011820 */ 0x00, 0x90, 0x02, 0x02, 0xFF, 0xE7, 0x65, 0x01, 0x00, 0xFE, 0x6B, 0x01, 0xFE, 0x6B, 0x01, 0x08, +/* 00011830 */ 0x04, 0x08, 0x04, 0x2A, 0x27, 0x02, 0x03, 0x02, 0x02, 0x02, 0x02, 0x01, 0x07, 0x08, 0x07, 0x08, +/* 00011840 */ 0x7F, 0x4E, 0x05, 0x4E, 0x06, 0x8E, 0x02, 0x03, 0x0A, 0x6C, 0x09, 0x0A, 0x00, 0x07, 0x02, 0x00, +/* 00011850 */ 0x59, 0x00, 0x0A, 0x59, 0x01, 0x04, 0x1F, 0x02, 0x09, 0x09, 0x45, 0x05, 0x09, 0x14, 0x03, 0x00, +/* 00011860 */ 0x05, 0x02, 0x09, 0x51, 0x00, 0x8E, 0x01, 0x11, 0x09, 0x4A, 0x09, 0x0F, 0x10, 0x00, 0x09, 0x8E, +/* 00011870 */ 0x01, 0x05, 0x09, 0x4A, 0x09, 0x07, 0x01, 0x00, 0x59, 0x00, 0x03, 0x1F, 0x01, 0xFF, 0x09, 0x8E, +/* 00011880 */ 0x02, 0x03, 0x0A, 0x6C, 0x09, 0x0A, 0x01, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0A, 0x59, 0x01, 0x04, +/* 00011890 */ 0x8E, 0x01, 0x11, 0x0B, 0x4A, 0x0B, 0x59, 0x02, 0x0B, 0x1F, 0x03, 0x09, 0x09, 0x45, 0x06, 0x09, +/* 000118A0 */ 0xAD, 0x09, 0x0F, 0x02, 0x00, 0x06, 0xAC, 0x09, 0xAD, 0x00, 0x0F, 0x02, 0x00, 0x09, 0xAC, 0x00, +/* 000118B0 */ 0x09, 0x0B, 0x00, 0x09, 0x06, 0x00, 0x45, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, +/* 000118C0 */ 0xFE, 0xED, 0x01, 0xFE, 0xC0, 0x02, 0xFF, 0x04, 0x66, 0x01, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, +/* 000118D0 */ 0x18, 0x00, 0x40, 0x00, 0x08, 0x00, 0x23, 0x00, 0x0A, 0x00, 0x24, 0x00, 0x10, 0x00, 0x32, 0x00, +/* 000118E0 */ 0x21, 0x00, 0x4A, 0x00, 0x16, 0x00, 0x2D, 0x00, 0x08, 0x00, 0x1D, 0x00, 0x00, 0x7F, 0x5C, 0x00, +/* 000118F0 */ 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x10, 0x08, 0x1F, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x67, 0x03, +/* 00011900 */ 0x78, 0xFF, 0xD8, 0x63, 0x01, 0x00, 0xFF, 0xD8, 0x63, 0x01, 0x00, 0x41, 0xFE, 0x00, 0x90, 0x03, +/* 00011910 */ 0x03, 0xFF, 0xD8, 0x63, 0x01, 0x00, 0xFE, 0xEA, 0x01, 0xFE, 0xEA, 0x01, 0x06, 0x05, 0x09, 0x04, +/* 00011920 */ 0x14, 0x12, 0x02, 0x01, 0x03, 0x03, 0x03, 0x03, 0x08, 0x07, 0x06, 0xFE, 0x47, 0x03, 0x05, 0xFE, +/* 00011930 */ 0x9A, 0x04, 0x3F, 0x4E, 0x07, 0x8E, 0x02, 0x03, 0x0A, 0x6C, 0x09, 0x0A, 0x00, 0x07, 0x03, 0x00, +/* 00011940 */ 0x59, 0x00, 0x0A, 0x59, 0x01, 0x05, 0x59, 0x02, 0x06, 0x1F, 0x03, 0x09, 0x09, 0x45, 0x07, 0x09, +/* 00011950 */ 0x14, 0x03, 0x00, 0x07, 0x02, 0x09, 0x16, 0x00, 0x76, 0x03, 0x05, 0x01, 0x45, 0x09, 0x05, 0xCF, +/* 00011960 */ 0x0A, 0x02, 0xA1, 0x00, 0x04, 0x0A, 0xA1, 0x01, 0x03, 0x0A, 0x76, 0x0A, 0x09, 0x02, 0xA8, 0x00, +/* 00011970 */ 0x24, 0x00, 0xFE, 0xFA, 0x01, 0xFE, 0x3D, 0x02, 0xFE, 0x62, 0x02, 0xFF, 0x07, 0x64, 0x01, 0x00, +/* 00011980 */ 0x05, 0x02, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x4F, 0x00, 0x08, 0x00, 0x71, 0x00, 0x04, 0x00, 0x33, +/* 00011990 */ 0x00, 0x14, 0x00, 0xC7, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0xFF, +/* 000119A0 */ 0x07, 0x1D, 0xA0, 0x41, 0xC1, 0x00, 0xFE, 0x53, 0x03, 0x77, 0xFF, 0xED, 0x61, 0x01, 0x00, 0xFF, +/* 000119B0 */ 0xED, 0x61, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFF, 0xED, 0x61, 0x01, 0x00, 0xFE, +/* 000119C0 */ 0xC9, 0x01, 0xFE, 0xC9, 0x01, 0x04, 0x03, 0x05, 0x02, 0x1A, 0x19, 0x02, 0x02, 0x02, 0x02, 0x02, +/* 000119D0 */ 0x02, 0x04, 0x05, 0xFE, 0x93, 0x03, 0x56, 0x4E, 0x03, 0x8E, 0x01, 0x09, 0x05, 0x4A, 0x05, 0x0E, +/* 000119E0 */ 0x15, 0x00, 0x05, 0x8E, 0x02, 0x03, 0x05, 0x5E, 0x05, 0x05, 0x00, 0x0E, 0x09, 0x00, 0x05, 0x8E, +/* 000119F0 */ 0x01, 0x09, 0x00, 0x4A, 0x00, 0x09, 0x33, 0x00, 0x8E, 0x02, 0x03, 0x06, 0x6C, 0x05, 0x06, 0x01, +/* 00011A00 */ 0x07, 0x01, 0x00, 0x59, 0x00, 0x06, 0x1F, 0x01, 0x05, 0x05, 0x45, 0x03, 0x05, 0x0F, 0x09, 0x00, +/* 00011A10 */ 0x03, 0x01, 0x43, 0x01, 0x01, 0x09, 0x02, 0x09, 0x06, 0x00, 0x01, 0x43, 0x01, 0x01, 0x09, 0x03, +/* 00011A20 */ 0x8E, 0x01, 0x09, 0x00, 0x4A, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x4D, 0x03, +/* 00011A30 */ 0xFE, 0xF5, 0x01, 0xFF, 0x03, 0x62, 0x01, 0x00, 0x08, 0x02, 0x00, 0x00, 0x00, 0x16, 0x00, 0x39, +/* 00011A40 */ 0x00, 0x09, 0x00, 0x2B, 0x00, 0x15, 0x00, 0x34, 0x00, 0x04, 0x00, 0x9C, 0x00, 0x09, 0x00, 0x35, +/* 00011A50 */ 0x00, 0x06, 0x00, 0x2D, 0x00, 0x0B, 0x00, 0x1C, 0x00, 0x00, 0x7E, 0x5D, 0x00, 0xC1, 0x13, 0x1A, +/* 00011A60 */ 0x4B, 0x00, 0xFE, 0x4D, 0x07, 0x19, 0xA0, 0x41, 0xD1, 0x00, 0x6F, 0xFF, 0x42, 0x48, 0x01, 0x00, +/* 00011A70 */ 0xFF, 0x42, 0x48, 0x01, 0x00, 0x06, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFF, 0x42, 0x48, 0x01, 0x00, +/* 00011A80 */ 0xFE, 0x4D, 0x15, 0xFE, 0x4D, 0x15, 0x03, 0xFE, 0x8B, 0x04, 0xFE, 0x8C, 0x04, 0xFE, 0x8D, 0x04, +/* 00011A90 */ 0x0B, 0x14, 0x1B, 0x05, 0x87, 0x82, 0x02, 0x05, 0x19, 0x19, 0x19, 0x19, 0x05, 0x18, 0x19, 0x1A, +/* 00011AA0 */ 0x06, 0xFE, 0x27, 0x03, 0x07, 0x05, 0xFE, 0x8E, 0x04, 0x08, 0x06, 0xFE, 0xEC, 0x03, 0x06, 0xFE, +/* 00011AB0 */ 0x2A, 0x03, 0x06, 0xFE, 0x2B, 0x03, 0x0C, 0x06, 0xFE, 0x2C, 0x03, 0x06, 0xFE, 0x2D, 0x03, 0x06, +/* 00011AC0 */ 0xFE, 0xED, 0x03, 0x0B, 0x05, 0xFE, 0x8F, 0x04, 0x06, 0xFE, 0x38, 0x03, 0x05, 0xFE, 0x90, 0x04, +/* 00011AD0 */ 0x06, 0xFE, 0x91, 0x04, 0x05, 0xFE, 0x92, 0x04, 0x06, 0xFE, 0xEE, 0x03, 0xFE, 0xDF, 0x01, 0x4E, +/* 00011AE0 */ 0x14, 0x4E, 0x15, 0x4E, 0x16, 0x4E, 0x17, 0x4E, 0x1B, 0x96, 0x02, 0x1B, 0x4E, 0x1B, 0x96, 0x03, +/* 00011AF0 */ 0x1B, 0x4E, 0x1B, 0x96, 0x04, 0x1B, 0x8E, 0x02, 0x32, 0x1B, 0x15, 0x03, 0x00, 0x1B, 0x02, 0x09, +/* 00011B00 */ 0x05, 0x00, 0xA8, 0x00, 0x09, 0xB5, 0x01, 0xD6, 0x00, 0x1B, 0x96, 0x02, 0x1B, 0xD6, 0x01, 0x1B, +/* 00011B10 */ 0x96, 0x03, 0x1B, 0xCD, 0x1B, 0x96, 0x04, 0x1B, 0x8E, 0x02, 0x23, 0x1B, 0x07, 0x03, 0x00, 0x59, +/* 00011B20 */ 0x00, 0x05, 0x59, 0x01, 0x04, 0xD6, 0x02, 0x1C, 0x59, 0x02, 0x1C, 0x1F, 0x03, 0x1B, 0x1B, 0x45, +/* 00011B30 */ 0x14, 0x1B, 0x8E, 0x02, 0x36, 0x1C, 0x4A, 0x1C, 0x6C, 0x1B, 0x1C, 0x00, 0x07, 0x04, 0x00, 0x59, +/* 00011B40 */ 0x00, 0x1C, 0x59, 0x01, 0x14, 0x59, 0x02, 0x06, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00011B50 */ 0x00, 0x1D, 0x00, 0x00, 0x00, 0x92, 0x04, 0x1E, 0x7A, 0x1E, 0x1D, 0x01, 0x7A, 0x09, 0x1D, 0x02, +/* 00011B60 */ 0x7A, 0x09, 0x1D, 0x03, 0x7A, 0x09, 0x1D, 0x04, 0x59, 0x03, 0x1D, 0x1F, 0x04, 0xFF, 0x1B, 0x8E, +/* 00011B70 */ 0x02, 0x36, 0x1C, 0x4A, 0x1C, 0x6C, 0x1B, 0x1C, 0x05, 0x07, 0x04, 0x00, 0x59, 0x00, 0x1C, 0x92, +/* 00011B80 */ 0x04, 0x1D, 0x59, 0x01, 0x1D, 0x59, 0x02, 0x0C, 0xCE, 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, +/* 00011B90 */ 0x00, 0x1D, 0x00, 0x00, 0x00, 0x7A, 0x14, 0x1D, 0x06, 0x7A, 0x0D, 0x1D, 0x07, 0x7A, 0x09, 0x1D, +/* 00011BA0 */ 0x08, 0x7A, 0x0D, 0x1D, 0x09, 0x59, 0x03, 0x1D, 0x1F, 0x04, 0xFF, 0x1B, 0x8E, 0x01, 0x06, 0x1B, +/* 00011BB0 */ 0x4A, 0x1B, 0x07, 0x03, 0x00, 0x59, 0x00, 0x05, 0x59, 0x01, 0x0E, 0xD6, 0x03, 0x1C, 0x59, 0x02, +/* 00011BC0 */ 0x1C, 0x1F, 0x03, 0x1B, 0x1B, 0x45, 0x15, 0x1B, 0x8E, 0x02, 0x36, 0x1C, 0x4A, 0x1C, 0x6C, 0x1B, +/* 00011BD0 */ 0x1C, 0x0A, 0x07, 0x04, 0x00, 0x59, 0x00, 0x1C, 0x59, 0x01, 0x14, 0x59, 0x02, 0x0F, 0xCE, 0x30, +/* 00011BE0 */ 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0x7A, 0x15, 0x1D, 0x0B, 0x7A, +/* 00011BF0 */ 0x0D, 0x1D, 0x0C, 0x7A, 0x09, 0x1D, 0x0D, 0x7A, 0x0D, 0x1D, 0x0E, 0x59, 0x03, 0x1D, 0x1F, 0x04, +/* 00011C00 */ 0xFF, 0x1B, 0x8E, 0x01, 0x06, 0x1B, 0x4A, 0x1B, 0x07, 0x03, 0x00, 0x59, 0x00, 0x05, 0x59, 0x01, +/* 00011C10 */ 0x10, 0xD6, 0x04, 0x1C, 0x59, 0x02, 0x1C, 0x1F, 0x03, 0x1B, 0x1B, 0x45, 0x16, 0x1B, 0x8E, 0x02, +/* 00011C20 */ 0x36, 0x1C, 0x4A, 0x1C, 0x6C, 0x1B, 0x1C, 0x0F, 0x07, 0x04, 0x00, 0x59, 0x00, 0x1C, 0x92, 0x04, +/* 00011C30 */ 0x1D, 0x59, 0x01, 0x1D, 0x59, 0x02, 0x11, 0xCE, 0x48, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, +/* 00011C40 */ 0x1D, 0x00, 0x00, 0x00, 0x7A, 0x16, 0x1D, 0x10, 0x7A, 0x09, 0x1D, 0x11, 0x7A, 0x0D, 0x1D, 0x12, +/* 00011C50 */ 0x7A, 0x0D, 0x1D, 0x13, 0x59, 0x03, 0x1D, 0x1F, 0x04, 0xFF, 0x1B, 0x8E, 0x01, 0x06, 0x1B, 0x4A, +/* 00011C60 */ 0x1B, 0x07, 0x03, 0x00, 0x59, 0x00, 0x05, 0x59, 0x01, 0x12, 0xD6, 0x05, 0x1C, 0x59, 0x02, 0x1C, +/* 00011C70 */ 0x1F, 0x03, 0x1B, 0x1B, 0x45, 0x17, 0x1B, 0x8E, 0x02, 0x36, 0x1C, 0x4A, 0x1C, 0x6C, 0x1B, 0x1C, +/* 00011C80 */ 0x14, 0x07, 0x04, 0x00, 0x59, 0x00, 0x1C, 0x92, 0x04, 0x1D, 0x59, 0x01, 0x1D, 0x59, 0x02, 0x13, +/* 00011C90 */ 0xCE, 0x60, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0x7A, 0x17, 0x1D, +/* 00011CA0 */ 0x15, 0x7A, 0x09, 0x1D, 0x16, 0x7A, 0x0D, 0x1D, 0x17, 0x7A, 0x0D, 0x1D, 0x18, 0x59, 0x03, 0x1D, +/* 00011CB0 */ 0x1F, 0x04, 0xFF, 0x1B, 0x45, 0x00, 0x14, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x05, 0x78, +/* 00011CC0 */ 0x00, 0x60, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, +/* 00011CD0 */ 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x48, 0x00, 0x00, +/* 00011CE0 */ 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, +/* 00011CF0 */ 0x00, 0x95, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, +/* 00011D00 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, +/* 00011D10 */ 0x00, 0x95, 0x01, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00011D20 */ 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, +/* 00011D30 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, +/* 00011D40 */ 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0xFE, 0x9C, 0x01, +/* 00011D50 */ 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, +/* 00011D60 */ 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x97, +/* 00011D70 */ 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, +/* 00011D80 */ 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, +/* 00011D90 */ 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x96, 0x01, 0xFF, 0x57, 0x48, 0x01, 0x00, 0x10, 0x17, 0x00, +/* 00011DA0 */ 0x00, 0x00, 0x0C, 0x00, 0x27, 0x00, 0x05, 0x00, 0x23, 0x01, 0x06, 0x00, 0x02, 0x05, 0x06, 0x00, +/* 00011DB0 */ 0xD6, 0x00, 0x05, 0x00, 0x7A, 0x00, 0x1A, 0x00, 0x85, 0x02, 0x3D, 0x00, 0xC8, 0x00, 0x3D, 0x00, +/* 00011DC0 */ 0xC7, 0x00, 0x1C, 0x00, 0x12, 0x01, 0x3A, 0x00, 0x09, 0x01, 0x1C, 0x00, 0xAC, 0x01, 0x3D, 0x00, +/* 00011DD0 */ 0xBE, 0x00, 0x1C, 0x00, 0x1A, 0x04, 0x3D, 0x00, 0xD0, 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, 0x03, +/* 00011DE0 */ 0x23, 0x01, 0x00, 0x6B, 0x22, 0x01, 0x00, 0x3C, 0x21, 0x01, 0x00, 0xA7, 0x20, 0x01, 0x00, 0xBF, +/* 00011DF0 */ 0x1F, 0x01, 0x00, 0xF7, 0x1D, 0x01, 0x00, 0x7F, 0x5D, 0x00, 0xC1, 0x03, 0x1A, 0x0B, 0x00, 0xFE, +/* 00011E00 */ 0xBC, 0x07, 0x61, 0xA0, 0x41, 0xC3, 0x00, 0xFE, 0xEE, 0x03, 0x75, 0xFF, 0xE5, 0x58, 0x01, 0x00, +/* 00011E10 */ 0xFF, 0xE5, 0x58, 0x01, 0x00, 0x01, 0x08, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFF, 0xE5, 0x58, 0x01, +/* 00011E20 */ 0x00, 0xFE, 0xB6, 0x03, 0xFE, 0xB6, 0x03, 0x01, 0xFE, 0x99, 0x04, 0x06, 0x0D, 0x11, 0x05, 0x2D, +/* 00011E30 */ 0x2D, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x0E, 0x0F, 0x10, 0x05, 0xFE, 0x90, 0x04, 0x06, 0xFE, +/* 00011E40 */ 0x31, 0x03, 0x06, 0xFE, 0xD7, 0x03, 0x06, 0xFE, 0x93, 0x04, 0x06, 0xFE, 0xDA, 0x03, 0x06, 0xFE, +/* 00011E50 */ 0xDB, 0x03, 0x06, 0xFE, 0xDC, 0x03, 0x06, 0xFE, 0xDD, 0x03, 0x06, 0xFE, 0xDE, 0x03, 0x06, 0xFE, +/* 00011E60 */ 0x96, 0x04, 0x08, 0x92, 0x58, 0x0D, 0x4E, 0x11, 0x96, 0x02, 0x11, 0x8E, 0x03, 0x03, 0x12, 0x6C, +/* 00011E70 */ 0x11, 0x12, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x12, 0x59, 0x01, 0x0D, 0x1F, 0x02, 0x11, 0x11, +/* 00011E80 */ 0x96, 0x02, 0x11, 0x92, 0x02, 0x11, 0x0E, 0x0B, 0x00, 0x11, 0x92, 0x02, 0x11, 0x5E, 0x11, 0x11, +/* 00011E90 */ 0x01, 0x0F, 0x18, 0x00, 0x11, 0x8E, 0x03, 0x03, 0x12, 0x6C, 0x11, 0x12, 0x02, 0x07, 0x03, 0x00, +/* 00011EA0 */ 0x59, 0x00, 0x12, 0x59, 0x01, 0x02, 0x59, 0x02, 0x03, 0x1F, 0x03, 0xFF, 0x11, 0x8E, 0x02, 0x17, +/* 00011EB0 */ 0x11, 0x4A, 0x11, 0x07, 0x04, 0x00, 0x59, 0x00, 0x0C, 0xCF, 0x12, 0x08, 0xA1, 0x00, 0x04, 0x12, +/* 00011EC0 */ 0xA1, 0x01, 0x05, 0x12, 0xA1, 0x02, 0x06, 0x12, 0xA1, 0x03, 0x07, 0x12, 0xA1, 0x04, 0x08, 0x12, +/* 00011ED0 */ 0xA1, 0x05, 0x09, 0x12, 0xA1, 0x06, 0x0A, 0x12, 0xA1, 0x07, 0x0B, 0x12, 0x59, 0x01, 0x12, 0x92, +/* 00011EE0 */ 0x02, 0x12, 0x59, 0x02, 0x12, 0xD6, 0x00, 0x12, 0x59, 0x03, 0x12, 0x1F, 0x04, 0x00, 0x11, 0x09, +/* 00011EF0 */ 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x05, 0x02, 0xFE, 0x97, 0x04, 0xFE, 0xB6, 0x02, 0xFF, +/* 00011F00 */ 0x0E, 0x59, 0x01, 0x00, 0x05, 0x07, 0x00, 0x00, 0x00, 0x18, 0x00, 0x37, 0x00, 0x12, 0x00, 0x39, +/* 00011F10 */ 0x00, 0x18, 0x00, 0x6F, 0x00, 0x47, 0x00, 0xAD, 0x02, 0x00, 0x1E, 0x1F, 0x01, 0x00, 0x7F, 0x5C, +/* 00011F20 */ 0x00, 0xC1, 0x03, 0x10, 0x07, 0x00, 0xFE, 0xCB, 0x07, 0x13, 0xA2, 0x41, 0xD0, 0x00, 0x76, 0xFE, +/* 00011F30 */ 0x01, 0x10, 0xFF, 0x46, 0x5B, 0x01, 0x00, 0xFF, 0x46, 0x5B, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, +/* 00011F40 */ 0x03, 0x03, 0xFF, 0x46, 0x5B, 0x01, 0x00, 0xFE, 0x49, 0x01, 0xFE, 0x49, 0x01, 0x07, 0x05, 0x08, +/* 00011F50 */ 0x04, 0x14, 0x12, 0x04, 0x02, 0x03, 0x03, 0x03, 0x03, 0x07, 0x06, 0xFE, 0x96, 0x04, 0x01, 0x00, +/* 00011F60 */ 0x0B, 0x3D, 0x14, 0x03, 0x00, 0x05, 0x02, 0x09, 0x31, 0x00, 0x45, 0x08, 0x06, 0x8E, 0x04, 0x36, +/* 00011F70 */ 0x0A, 0x4A, 0x0A, 0x6C, 0x09, 0x0A, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0A, 0x8E, 0x01, 0x02, +/* 00011F80 */ 0x0B, 0x4A, 0x0B, 0x5E, 0x0B, 0x0B, 0x01, 0x59, 0x01, 0x0B, 0x59, 0x02, 0x03, 0x1F, 0x03, 0x09, +/* 00011F90 */ 0x09, 0x76, 0x09, 0x08, 0x02, 0x45, 0x00, 0x04, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, +/* 00011FA0 */ 0x50, 0x01, 0xFE, 0x96, 0x04, 0xFE, 0x96, 0x04, 0xFF, 0x6C, 0x5B, 0x01, 0x00, 0x04, 0x00, 0x00, +/* 00011FB0 */ 0x00, 0x00, 0x08, 0x00, 0xA6, 0x00, 0x2B, 0x00, 0x51, 0x00, 0x08, 0x00, 0x2B, 0x00, 0x00, 0x7F, +/* 00011FC0 */ 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0xAC, 0x07, 0x4F, 0xA2, 0x41, 0xC3, 0x00, 0xFE, +/* 00011FD0 */ 0x91, 0x04, 0x74, 0xFF, 0x69, 0x56, 0x01, 0x00, 0xFF, 0x69, 0x56, 0x01, 0x00, 0x09, 0xFE, 0x00, +/* 00011FE0 */ 0x90, 0x02, 0x02, 0xFF, 0x69, 0x56, 0x01, 0x00, 0xFE, 0x5A, 0x01, 0xFE, 0x5A, 0x01, 0x07, 0x05, +/* 00011FF0 */ 0x0A, 0x04, 0x26, 0x24, 0x03, 0x03, 0x04, 0x04, 0x04, 0x04, 0x09, 0x05, 0xFE, 0x90, 0x04, 0x06, +/* 00012000 */ 0xFE, 0x31, 0x03, 0x08, 0x77, 0x58, 0x06, 0x4E, 0x07, 0x4E, 0x08, 0x8E, 0x03, 0x03, 0x0B, 0x6C, +/* 00012010 */ 0x0A, 0x0B, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0B, 0x59, 0x01, 0x06, 0x1F, 0x02, 0x0A, 0x0A, +/* 00012020 */ 0x45, 0x07, 0x0A, 0x0E, 0x08, 0x00, 0x07, 0x5E, 0x0A, 0x07, 0x01, 0x0F, 0x18, 0x00, 0x0A, 0x8E, +/* 00012030 */ 0x03, 0x03, 0x0B, 0x6C, 0x0A, 0x0B, 0x02, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0B, 0x59, 0x01, 0x02, +/* 00012040 */ 0x59, 0x02, 0x03, 0x1F, 0x03, 0xFF, 0x0A, 0x8E, 0x03, 0x24, 0x0B, 0x6C, 0x0A, 0x0B, 0x03, 0x07, +/* 00012050 */ 0x02, 0x00, 0x59, 0x00, 0x0B, 0x59, 0x01, 0x05, 0x1F, 0x02, 0x0A, 0x0A, 0x45, 0x08, 0x0A, 0x8E, +/* 00012060 */ 0x01, 0x03, 0x0A, 0x4A, 0x0A, 0x07, 0x03, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x07, 0x59, 0x02, +/* 00012070 */ 0x08, 0x1F, 0x03, 0x00, 0x0A, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x05, 0x02, 0xFE, +/* 00012080 */ 0x97, 0x04, 0xFE, 0xB6, 0x02, 0xFE, 0x23, 0x03, 0xFF, 0x8E, 0x56, 0x01, 0x00, 0x06, 0x06, 0x00, +/* 00012090 */ 0x00, 0x00, 0x18, 0x00, 0x37, 0x00, 0x0C, 0x00, 0x39, 0x00, 0x18, 0x00, 0x6F, 0x00, 0x18, 0x00, +/* 000120A0 */ 0x30, 0x00, 0x1B, 0x00, 0x25, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, +/* 000120B0 */ 0xA1, 0x07, 0x5D, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x38, 0x03, 0x73, 0xFF, 0x5C, 0x54, 0x01, 0x00, +/* 000120C0 */ 0xFF, 0x5C, 0x54, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x02, 0xFF, 0x5C, 0x54, 0x01, 0x00, +/* 000120D0 */ 0xB2, 0xB2, 0x05, 0x03, 0x06, 0x08, 0x17, 0x16, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x05, 0x08, +/* 000120E0 */ 0x45, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA8, 0x06, 0x45, 0x04, 0x06, 0x8E, 0x02, 0x16, 0x06, 0x4A, +/* 000120F0 */ 0x06, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x8E, 0x03, 0x03, 0x07, 0x5E, 0x07, 0x07, 0x00, 0x59, +/* 00012100 */ 0x01, 0x07, 0x8E, 0x02, 0x12, 0x07, 0x4A, 0x07, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, +/* 00012110 */ 0x03, 0x1F, 0x02, 0x07, 0x07, 0x59, 0x02, 0x07, 0x59, 0x03, 0x04, 0x1F, 0x04, 0x00, 0x06, 0x09, +/* 00012120 */ 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xF2, 0x01, 0xFF, 0x81, 0x54, 0x01, 0x00, 0x03, 0x00, +/* 00012130 */ 0x00, 0x00, 0x00, 0x0A, 0x00, 0x23, 0x00, 0x39, 0x00, 0x69, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, +/* 00012140 */ 0x03, 0x10, 0x03, 0x00, 0xFE, 0x83, 0x07, 0x42, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x31, 0x03, 0x72, +/* 00012150 */ 0xFF, 0x2D, 0x50, 0x01, 0x00, 0xFF, 0x2D, 0x50, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x01, +/* 00012160 */ 0xFF, 0x2D, 0x50, 0x01, 0x00, 0xFE, 0x0A, 0x02, 0xFE, 0x0A, 0x02, 0x08, 0x05, 0x0B, 0x05, 0x3A, +/* 00012170 */ 0x35, 0x03, 0x05, 0x03, 0x03, 0x03, 0x03, 0x0A, 0x08, 0x05, 0xFE, 0x8E, 0x04, 0x06, 0xFE, 0x31, +/* 00012180 */ 0x03, 0xB3, 0x01, 0x5D, 0x01, 0x07, 0x4E, 0x08, 0x4E, 0x09, 0x15, 0x05, 0x00, 0x05, 0x02, 0xA8, +/* 00012190 */ 0x0B, 0x45, 0x05, 0x0B, 0x15, 0x05, 0x00, 0x06, 0x02, 0xA8, 0x0B, 0x45, 0x06, 0x0B, 0x4E, 0x08, +/* 000121A0 */ 0x4E, 0x09, 0xA8, 0x0B, 0x14, 0x03, 0x00, 0x07, 0x0B, 0x09, 0x18, 0x00, 0x8E, 0x03, 0x03, 0x0C, +/* 000121B0 */ 0x6C, 0x0B, 0x0C, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0C, 0x59, 0x01, 0x03, 0x59, 0x02, 0x04, +/* 000121C0 */ 0x1F, 0x03, 0xFF, 0x0B, 0x8E, 0x02, 0x07, 0x0B, 0x4A, 0x0B, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, +/* 000121D0 */ 0x59, 0x01, 0x07, 0x8E, 0x01, 0x04, 0x0C, 0x4A, 0x0C, 0x59, 0x02, 0x0C, 0x1F, 0x03, 0x0B, 0x0B, +/* 000121E0 */ 0x45, 0x08, 0x0B, 0x8E, 0x03, 0x36, 0x0C, 0x4A, 0x0C, 0x6C, 0x0B, 0x0C, 0x01, 0x07, 0x01, 0x00, +/* 000121F0 */ 0x59, 0x00, 0x0C, 0x1F, 0x01, 0x0B, 0x0B, 0x45, 0x09, 0x0B, 0x8E, 0x03, 0x03, 0x0C, 0x6C, 0x0B, +/* 00012200 */ 0x0C, 0x02, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0C, 0x59, 0x01, 0x08, 0x59, 0x02, 0x09, 0x1F, 0x03, +/* 00012210 */ 0xFF, 0x0B, 0x8E, 0x01, 0x02, 0x0B, 0x4A, 0x0B, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, +/* 00012220 */ 0x09, 0x59, 0x02, 0x05, 0x59, 0x03, 0x06, 0x1F, 0x04, 0xFF, 0x0B, 0x45, 0x00, 0x08, 0x09, 0x02, +/* 00012230 */ 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB6, 0x02, 0x69, 0xFE, 0x06, 0x02, 0xFF, 0x42, 0x50, 0x01, +/* 00012240 */ 0x00, 0x0A, 0x08, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0E, 0x00, 0x23, 0x00, 0x0A, 0x00, +/* 00012250 */ 0x30, 0x00, 0x18, 0x00, 0x5E, 0x00, 0x1F, 0x00, 0x62, 0x00, 0x17, 0x00, 0x2C, 0x00, 0x18, 0x00, +/* 00012260 */ 0x41, 0x00, 0x19, 0x00, 0x43, 0x00, 0x08, 0x00, 0x1C, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, +/* 00012270 */ 0x10, 0x03, 0x00, 0xFE, 0x78, 0x07, 0x1E, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x8C, 0x04, 0x71, 0xFF, +/* 00012280 */ 0xB9, 0x4E, 0x01, 0x00, 0xFF, 0xB9, 0x4E, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFF, +/* 00012290 */ 0xB9, 0x4E, 0x01, 0x00, 0xB5, 0xB5, 0x05, 0x03, 0x06, 0x04, 0x15, 0x14, 0x03, 0x02, 0x02, 0x02, +/* 000122A0 */ 0x02, 0x02, 0x05, 0x05, 0xFE, 0x98, 0x04, 0x40, 0x8E, 0x03, 0x36, 0x07, 0x4A, 0x07, 0x6C, 0x06, +/* 000122B0 */ 0x07, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x07, 0x59, 0x01, 0x04, 0x1F, 0x02, 0x06, 0x06, 0x0F, +/* 000122C0 */ 0x06, 0x00, 0x06, 0x45, 0x00, 0x02, 0x09, 0x1D, 0x00, 0x8E, 0x03, 0x03, 0x07, 0x6C, 0x06, 0x07, +/* 000122D0 */ 0x01, 0x07, 0x03, 0x00, 0x59, 0x00, 0x07, 0x59, 0x01, 0x03, 0x59, 0x02, 0x04, 0x1F, 0x03, 0x00, +/* 000122E0 */ 0x06, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xC1, 0xFE, 0x02, 0x02, 0xFF, 0xE1, 0x4E, 0x01, +/* 000122F0 */ 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x26, 0x00, 0x06, 0x00, 0x2B, 0x00, 0x1D, 0x00, +/* 00012300 */ 0x3B, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x5B, 0x07, 0x26, 0xA2, +/* 00012310 */ 0x41, 0xC1, 0x00, 0xFE, 0x8B, 0x04, 0x70, 0xFF, 0xBF, 0x49, 0x01, 0x00, 0xFF, 0xBF, 0x49, 0x01, +/* 00012320 */ 0x00, 0x01, 0xFE, 0x00, 0x90, 0x04, 0x04, 0xFF, 0xBF, 0x49, 0x01, 0x00, 0xFE, 0xAF, 0x03, 0xFE, +/* 00012330 */ 0xAF, 0x03, 0x0A, 0x0D, 0x14, 0x07, 0x67, 0x5F, 0x03, 0x07, 0x0B, 0x0B, 0x0B, 0x0B, 0x13, 0x08, +/* 00012340 */ 0x06, 0xFE, 0xE0, 0x03, 0x06, 0xFE, 0xA3, 0x03, 0x05, 0xFE, 0x9C, 0x03, 0x05, 0xFE, 0xDF, 0x03, +/* 00012350 */ 0x06, 0xFE, 0x93, 0x04, 0x05, 0xFE, 0x94, 0x04, 0x05, 0xFE, 0x95, 0x04, 0x01, 0x00, 0x01, 0x03, +/* 00012360 */ 0x0B, 0xFE, 0x49, 0x01, 0x4E, 0x10, 0x4E, 0x11, 0x4E, 0x12, 0x8E, 0x02, 0x12, 0x14, 0x4A, 0x14, +/* 00012370 */ 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x0E, 0x1F, 0x02, 0x14, 0x14, 0x45, 0x10, 0x14, +/* 00012380 */ 0xA8, 0x14, 0x14, 0x03, 0x00, 0x0F, 0x14, 0x09, 0x1A, 0x00, 0x8E, 0x03, 0x36, 0x16, 0x4A, 0x16, +/* 00012390 */ 0x6C, 0x15, 0x16, 0x00, 0x07, 0x01, 0x00, 0x59, 0x00, 0x16, 0x1F, 0x01, 0x15, 0x15, 0x45, 0x14, +/* 000123A0 */ 0x15, 0x09, 0x18, 0x00, 0x8E, 0x03, 0x24, 0x16, 0x6C, 0x15, 0x16, 0x01, 0x07, 0x02, 0x00, 0x59, +/* 000123B0 */ 0x00, 0x16, 0x59, 0x01, 0x0F, 0x1F, 0x02, 0x15, 0x15, 0x46, 0x14, 0x15, 0x45, 0x0F, 0x14, 0x8E, +/* 000123C0 */ 0x03, 0x36, 0x15, 0x4A, 0x15, 0x6C, 0x14, 0x15, 0x02, 0x07, 0x01, 0x00, 0x59, 0x00, 0x15, 0x1F, +/* 000123D0 */ 0x01, 0x14, 0x14, 0x45, 0x11, 0x14, 0x45, 0x14, 0x11, 0x8E, 0x02, 0x02, 0x15, 0x4A, 0x15, 0x07, +/* 000123E0 */ 0x06, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x0F, 0x59, 0x02, 0x03, 0x59, 0x03, 0x04, 0xCF, 0x16, +/* 000123F0 */ 0x02, 0xA1, 0x00, 0x05, 0x16, 0xA1, 0x01, 0x06, 0x16, 0x59, 0x04, 0x16, 0x59, 0x05, 0x06, 0x1F, +/* 00012400 */ 0x06, 0x15, 0x15, 0x76, 0x15, 0x14, 0x03, 0x45, 0x14, 0x0D, 0x8E, 0x02, 0x02, 0x15, 0x4A, 0x15, +/* 00012410 */ 0x07, 0x06, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x0F, 0x59, 0x02, 0x07, 0x59, 0x03, 0x04, 0xCF, +/* 00012420 */ 0x16, 0x02, 0xA1, 0x00, 0x08, 0x16, 0xA1, 0x01, 0x09, 0x16, 0x59, 0x04, 0x16, 0x59, 0x05, 0x08, +/* 00012430 */ 0x1F, 0x06, 0x15, 0x15, 0x76, 0x15, 0x14, 0x04, 0x8E, 0x02, 0x15, 0x14, 0x4A, 0x14, 0x07, 0x05, +/* 00012440 */ 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x0D, 0x59, 0x02, 0x0F, 0x59, 0x03, 0x0A, 0x59, 0x04, 0x0B, +/* 00012450 */ 0x1F, 0x05, 0xFF, 0x14, 0x8E, 0x02, 0x0C, 0x14, 0x4A, 0x14, 0x07, 0x05, 0x00, 0x59, 0x00, 0x02, +/* 00012460 */ 0x8E, 0x03, 0x03, 0x15, 0x5E, 0x15, 0x15, 0x05, 0x59, 0x01, 0x15, 0x59, 0x02, 0x10, 0x59, 0x03, +/* 00012470 */ 0x11, 0xCF, 0x15, 0x00, 0x59, 0x04, 0x15, 0x1F, 0x05, 0x14, 0x14, 0x45, 0x12, 0x14, 0x5E, 0x14, +/* 00012480 */ 0x12, 0x06, 0x76, 0x14, 0x0D, 0x07, 0x8E, 0x03, 0x03, 0x15, 0x6C, 0x14, 0x15, 0x08, 0x07, 0x02, +/* 00012490 */ 0x00, 0x59, 0x00, 0x15, 0x59, 0x01, 0x0D, 0x1F, 0x02, 0x14, 0x14, 0x76, 0x14, 0x0D, 0x09, 0x76, +/* 000124A0 */ 0x0C, 0x0D, 0x0A, 0x45, 0x00, 0x0D, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x69, 0xFE, 0x21, +/* 000124B0 */ 0x03, 0x69, 0xFE, 0x04, 0x04, 0xF6, 0xFE, 0xF2, 0x01, 0xFE, 0x0D, 0x02, 0xFE, 0x0D, 0x02, 0xFE, +/* 000124C0 */ 0x03, 0x02, 0xFE, 0x96, 0x04, 0xFE, 0x97, 0x04, 0xFF, 0xF6, 0x49, 0x01, 0x00, 0x0C, 0x06, 0x00, +/* 000124D0 */ 0x00, 0x00, 0x16, 0x00, 0x46, 0x00, 0x3F, 0x00, 0x57, 0x00, 0x17, 0x00, 0x24, 0x00, 0x31, 0x00, +/* 000124E0 */ 0x6D, 0x00, 0x31, 0x00, 0x6B, 0x00, 0x1C, 0x00, 0xA9, 0x00, 0x2A, 0x00, 0x5F, 0x00, 0x08, 0x00, +/* 000124F0 */ 0x2B, 0x00, 0x19, 0x00, 0x57, 0x00, 0x04, 0x00, 0x38, 0x00, 0x08, 0x00, 0x1C, 0x00, 0x00, 0x7E, +/* 00012500 */ 0x5D, 0x00, 0xC1, 0x13, 0x1A, 0x4B, 0x00, 0xFE, 0xFA, 0x04, 0x1A, 0xA0, 0x41, 0xD1, 0x00, 0x54, +/* 00012510 */ 0xFE, 0xE4, 0xD9, 0xFE, 0xE4, 0xD9, 0x0F, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFE, 0xE4, 0xD9, 0xFE, +/* 00012520 */ 0x3F, 0x6E, 0xFE, 0x3F, 0x6E, 0x0A, 0xFE, 0x26, 0x04, 0xFE, 0x27, 0x04, 0xFE, 0x28, 0x04, 0xFE, +/* 00012530 */ 0x29, 0x04, 0xFE, 0x2A, 0x04, 0xFE, 0x2B, 0x04, 0xFE, 0x2C, 0x04, 0xFE, 0x56, 0x02, 0xFE, 0x2D, +/* 00012540 */ 0x04, 0xFE, 0x0B, 0x02, 0x11, 0x35, 0x41, 0x09, 0xFE, 0x54, 0x01, 0xFE, 0x4C, 0x01, 0x02, 0x08, +/* 00012550 */ 0x30, 0x30, 0x30, 0x30, 0x08, 0x3E, 0x3F, 0x40, 0x06, 0xFE, 0x27, 0x03, 0x06, 0xFE, 0x2E, 0x04, +/* 00012560 */ 0x06, 0xFE, 0x2F, 0x04, 0x06, 0xFE, 0x30, 0x04, 0x06, 0xFE, 0x31, 0x04, 0x06, 0xFE, 0x32, 0x04, +/* 00012570 */ 0x06, 0xFE, 0xF8, 0x03, 0x06, 0xFE, 0x33, 0x04, 0x06, 0xFE, 0x34, 0x04, 0x06, 0xFE, 0x35, 0x04, +/* 00012580 */ 0x06, 0xFE, 0x36, 0x04, 0x06, 0xFE, 0x37, 0x04, 0x06, 0xFE, 0x38, 0x04, 0x06, 0xFE, 0x39, 0x04, +/* 00012590 */ 0x06, 0xFE, 0x3A, 0x04, 0x06, 0xFE, 0x3B, 0x04, 0x01, 0x01, 0x08, 0x06, 0xFE, 0x21, 0x04, 0x01, +/* 000125A0 */ 0x00, 0x06, 0xFE, 0x3C, 0x04, 0x06, 0xFE, 0x3D, 0x04, 0x01, 0x02, 0x07, 0x05, 0xFE, 0x3E, 0x04, +/* 000125B0 */ 0x06, 0xFE, 0x3F, 0x04, 0x06, 0xFE, 0x40, 0x04, 0x05, 0xFE, 0x41, 0x04, 0x06, 0xFE, 0x42, 0x04, +/* 000125C0 */ 0x05, 0xFE, 0x43, 0x04, 0x05, 0xFE, 0x44, 0x04, 0x05, 0xFE, 0x45, 0x04, 0x05, 0xFE, 0x46, 0x04, +/* 000125D0 */ 0x05, 0xFE, 0x47, 0x04, 0x06, 0xFE, 0xEC, 0x03, 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, 0x2B, 0x03, +/* 000125E0 */ 0x0C, 0x06, 0xFE, 0x2C, 0x03, 0x06, 0xFE, 0x2D, 0x03, 0x06, 0xFE, 0xED, 0x03, 0x0B, 0x05, 0xFE, +/* 000125F0 */ 0x14, 0x04, 0x06, 0xFE, 0x37, 0x03, 0x06, 0xFE, 0x15, 0x04, 0x06, 0xFE, 0x77, 0x03, 0x06, 0xFE, +/* 00012600 */ 0x16, 0x04, 0x06, 0xFE, 0xEE, 0x03, 0x05, 0xFE, 0x48, 0x04, 0x05, 0xFE, 0x36, 0x03, 0x06, 0xFE, +/* 00012610 */ 0x38, 0x03, 0xFE, 0xA4, 0x04, 0xD6, 0x04, 0x35, 0x96, 0x02, 0x35, 0x4E, 0x36, 0x4E, 0x37, 0x4E, +/* 00012620 */ 0x38, 0x4E, 0x39, 0x4E, 0x3A, 0x4E, 0x3B, 0x4E, 0x3C, 0x4E, 0x3D, 0x4E, 0x41, 0x96, 0x03, 0x41, +/* 00012630 */ 0x4E, 0x41, 0x96, 0x04, 0x41, 0x4E, 0x41, 0x96, 0x05, 0x41, 0x4E, 0x41, 0x96, 0x06, 0x41, 0x4E, +/* 00012640 */ 0x41, 0x96, 0x07, 0x41, 0x4E, 0x41, 0x96, 0x08, 0x41, 0x4E, 0x41, 0x96, 0x09, 0x41, 0x4E, 0x41, +/* 00012650 */ 0x96, 0x0A, 0x41, 0x4E, 0x41, 0x96, 0x0B, 0x41, 0x8E, 0x02, 0x32, 0x41, 0x15, 0x03, 0x00, 0x41, +/* 00012660 */ 0x02, 0x09, 0x11, 0x00, 0x8E, 0x02, 0x32, 0x41, 0x15, 0x03, 0x00, 0x41, 0x03, 0x09, 0x05, 0x00, +/* 00012670 */ 0xA8, 0x00, 0x09, 0x42, 0x04, 0xCF, 0x41, 0x03, 0xA1, 0x00, 0x04, 0x41, 0xA1, 0x01, 0x05, 0x41, +/* 00012680 */ 0xA1, 0x02, 0x06, 0x41, 0x45, 0x36, 0x41, 0xCF, 0x41, 0x02, 0xA1, 0x00, 0x07, 0x41, 0xA1, 0x01, +/* 00012690 */ 0x08, 0x41, 0x45, 0x37, 0x41, 0x8E, 0x02, 0x36, 0x42, 0x4A, 0x42, 0x6C, 0x41, 0x42, 0x00, 0x07, +/* 000126A0 */ 0x03, 0x00, 0x59, 0x00, 0x42, 0x59, 0x01, 0x37, 0x59, 0x02, 0x36, 0x1F, 0x03, 0x41, 0x41, 0x45, +/* 000126B0 */ 0x38, 0x41, 0xCF, 0x41, 0x09, 0xCF, 0x42, 0x02, 0xA1, 0x00, 0x09, 0x42, 0xA1, 0x01, 0x36, 0x42, +/* 000126C0 */ 0xA1, 0x00, 0x42, 0x41, 0xCF, 0x42, 0x02, 0xA1, 0x00, 0x0A, 0x42, 0xA1, 0x01, 0x36, 0x42, 0xA1, +/* 000126D0 */ 0x01, 0x42, 0x41, 0xCF, 0x42, 0x02, 0xA1, 0x00, 0x0B, 0x42, 0xA1, 0x01, 0x37, 0x42, 0xA1, 0x02, +/* 000126E0 */ 0x42, 0x41, 0xCF, 0x42, 0x02, 0xA1, 0x00, 0x0C, 0x42, 0xA1, 0x01, 0x38, 0x42, 0xA1, 0x03, 0x42, +/* 000126F0 */ 0x41, 0xCF, 0x42, 0x02, 0xA1, 0x00, 0x0D, 0x42, 0xA1, 0x01, 0x37, 0x42, 0xA1, 0x04, 0x42, 0x41, +/* 00012700 */ 0xCF, 0x42, 0x02, 0xA1, 0x00, 0x0E, 0x42, 0xA1, 0x01, 0x37, 0x42, 0xA1, 0x05, 0x42, 0x41, 0xCF, +/* 00012710 */ 0x42, 0x02, 0xA1, 0x00, 0x0F, 0x42, 0xA1, 0x01, 0x37, 0x42, 0xA1, 0x06, 0x42, 0x41, 0xCF, 0x42, +/* 00012720 */ 0x02, 0xA1, 0x00, 0x10, 0x42, 0xA1, 0x01, 0x37, 0x42, 0xA1, 0x07, 0x42, 0x41, 0xCF, 0x42, 0x02, +/* 00012730 */ 0xA1, 0x00, 0x11, 0x42, 0x8E, 0x02, 0x36, 0x44, 0x4A, 0x44, 0x6C, 0x43, 0x44, 0x01, 0x07, 0x03, +/* 00012740 */ 0x00, 0x59, 0x00, 0x44, 0x59, 0x01, 0x36, 0x59, 0x02, 0x12, 0x1F, 0x03, 0x43, 0x43, 0xA1, 0x01, +/* 00012750 */ 0x43, 0x42, 0xA1, 0x08, 0x42, 0x41, 0x96, 0x03, 0x41, 0xD6, 0x00, 0x41, 0x07, 0x01, 0x00, 0x59, +/* 00012760 */ 0x00, 0x13, 0x1F, 0x01, 0x41, 0x41, 0x96, 0x04, 0x41, 0xD6, 0x01, 0x41, 0x96, 0x05, 0x41, 0xD6, +/* 00012770 */ 0x02, 0x41, 0x96, 0x06, 0x41, 0xD6, 0x03, 0x41, 0x45, 0x39, 0x41, 0xCF, 0x41, 0x03, 0xA8, 0x42, +/* 00012780 */ 0xA1, 0x00, 0x42, 0x41, 0xA8, 0x42, 0xA1, 0x01, 0x42, 0x41, 0xA8, 0x42, 0xA1, 0x02, 0x42, 0x41, +/* 00012790 */ 0x96, 0x07, 0x41, 0x8E, 0x02, 0x35, 0x41, 0x4A, 0x41, 0x07, 0x02, 0x00, 0x59, 0x00, 0x13, 0xCE, +/* 000127A0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x7A, 0x15, 0x42, 0x02, +/* 000127B0 */ 0x7A, 0x12, 0x42, 0x03, 0x7A, 0x18, 0x42, 0x04, 0x59, 0x01, 0x42, 0x1F, 0x02, 0x41, 0x41, 0x45, +/* 000127C0 */ 0x3A, 0x41, 0xD6, 0x05, 0x41, 0x07, 0x06, 0x00, 0x59, 0x00, 0x13, 0x59, 0x01, 0x1A, 0x59, 0x02, +/* 000127D0 */ 0x1B, 0x59, 0x03, 0x1C, 0x5E, 0x42, 0x3A, 0x05, 0x59, 0x04, 0x42, 0x8E, 0x02, 0x03, 0x42, 0x5E, +/* 000127E0 */ 0x42, 0x42, 0x06, 0x5E, 0x42, 0x42, 0x07, 0x59, 0x05, 0x42, 0x1F, 0x06, 0xFF, 0x41, 0xD6, 0x06, +/* 000127F0 */ 0x41, 0x07, 0x06, 0x00, 0x59, 0x00, 0x13, 0x59, 0x01, 0x1D, 0x59, 0x02, 0x1E, 0x59, 0x03, 0x1E, +/* 00012800 */ 0x5E, 0x42, 0x3A, 0x08, 0x59, 0x04, 0x42, 0x8E, 0x02, 0x03, 0x42, 0x5E, 0x42, 0x42, 0x09, 0x5E, +/* 00012810 */ 0x42, 0x42, 0x0A, 0x59, 0x05, 0x42, 0x1F, 0x06, 0xFF, 0x41, 0xD6, 0x07, 0x41, 0x07, 0x06, 0x00, +/* 00012820 */ 0x59, 0x00, 0x13, 0x59, 0x01, 0x1F, 0x59, 0x02, 0x20, 0x59, 0x03, 0x20, 0x5E, 0x42, 0x3A, 0x0B, +/* 00012830 */ 0x59, 0x04, 0x42, 0x8E, 0x02, 0x03, 0x42, 0x5E, 0x42, 0x42, 0x0C, 0x5E, 0x42, 0x42, 0x0D, 0x59, +/* 00012840 */ 0x05, 0x42, 0x1F, 0x06, 0xFF, 0x41, 0x8E, 0x02, 0x32, 0x41, 0x15, 0x03, 0x00, 0x41, 0x02, 0x09, +/* 00012850 */ 0x05, 0x00, 0xA8, 0x00, 0x09, 0x60, 0x02, 0xCD, 0x41, 0x96, 0x08, 0x41, 0x8E, 0x02, 0x23, 0x41, +/* 00012860 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x13, 0x59, 0x01, 0x21, 0xD6, 0x08, 0x42, 0x59, 0x02, 0x42, 0x1F, +/* 00012870 */ 0x03, 0x41, 0x41, 0x96, 0x09, 0x41, 0xD6, 0x09, 0x41, 0x96, 0x0A, 0x41, 0x8E, 0x01, 0x06, 0x41, +/* 00012880 */ 0x4A, 0x41, 0x07, 0x03, 0x00, 0x59, 0x00, 0x13, 0x59, 0x01, 0x22, 0xD6, 0x0A, 0x42, 0x59, 0x02, +/* 00012890 */ 0x42, 0x1F, 0x03, 0x41, 0x41, 0x96, 0x0B, 0x41, 0x8E, 0x01, 0x06, 0x41, 0x4A, 0x41, 0x07, 0x03, +/* 000128A0 */ 0x00, 0x59, 0x00, 0x13, 0x59, 0x01, 0x23, 0xD6, 0x0B, 0x42, 0x59, 0x02, 0x42, 0x1F, 0x03, 0x41, +/* 000128B0 */ 0x41, 0x45, 0x3B, 0x41, 0x8E, 0x02, 0x36, 0x42, 0x4A, 0x42, 0x6C, 0x41, 0x42, 0x0E, 0x07, 0x04, +/* 000128C0 */ 0x00, 0x59, 0x00, 0x42, 0x92, 0x09, 0x43, 0x59, 0x01, 0x43, 0x59, 0x02, 0x24, 0xCE, 0x14, 0x00, +/* 000128D0 */ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x92, 0x08, 0x44, 0x7A, 0x44, 0x43, +/* 000128E0 */ 0x0F, 0x7A, 0x27, 0x43, 0x10, 0x7A, 0x27, 0x43, 0x11, 0x7A, 0x27, 0x43, 0x12, 0x59, 0x03, 0x43, +/* 000128F0 */ 0x1F, 0x04, 0xFF, 0x41, 0x8E, 0x02, 0x36, 0x42, 0x4A, 0x42, 0x6C, 0x41, 0x42, 0x13, 0x07, 0x04, +/* 00012900 */ 0x00, 0x59, 0x00, 0x42, 0x92, 0x08, 0x43, 0x59, 0x01, 0x43, 0x59, 0x02, 0x2A, 0xCE, 0x2C, 0x00, +/* 00012910 */ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x92, 0x09, 0x44, 0x7A, 0x44, 0x43, +/* 00012920 */ 0x14, 0x7A, 0x2B, 0x43, 0x15, 0x7A, 0x27, 0x43, 0x16, 0x7A, 0x2B, 0x43, 0x17, 0x59, 0x03, 0x43, +/* 00012930 */ 0x1F, 0x04, 0xFF, 0x41, 0x8E, 0x01, 0x06, 0x41, 0x4A, 0x41, 0x07, 0x03, 0x00, 0x59, 0x00, 0x13, +/* 00012940 */ 0x59, 0x01, 0x2C, 0xD6, 0x0C, 0x42, 0x59, 0x02, 0x42, 0x1F, 0x03, 0x41, 0x41, 0x45, 0x3C, 0x41, +/* 00012950 */ 0x8E, 0x02, 0x36, 0x42, 0x4A, 0x42, 0x6C, 0x41, 0x42, 0x18, 0x07, 0x04, 0x00, 0x59, 0x00, 0x42, +/* 00012960 */ 0x59, 0x01, 0x3C, 0x59, 0x02, 0x2D, 0xCE, 0x44, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x43, +/* 00012970 */ 0x00, 0x00, 0x00, 0x7A, 0x2C, 0x43, 0x19, 0x7A, 0x27, 0x43, 0x1A, 0x7A, 0x27, 0x43, 0x1B, 0x7A, +/* 00012980 */ 0x2B, 0x43, 0x1C, 0x59, 0x03, 0x43, 0x1F, 0x04, 0xFF, 0x41, 0x8E, 0x02, 0x36, 0x42, 0x4A, 0x42, +/* 00012990 */ 0x6C, 0x41, 0x42, 0x1D, 0x07, 0x04, 0x00, 0x59, 0x00, 0x42, 0x92, 0x08, 0x43, 0x59, 0x01, 0x43, +/* 000129A0 */ 0x59, 0x02, 0x2E, 0xCE, 0x5C, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, +/* 000129B0 */ 0x7A, 0x3C, 0x43, 0x1E, 0x7A, 0x27, 0x43, 0x1F, 0x7A, 0x2B, 0x43, 0x20, 0x59, 0x03, 0x43, 0x1F, +/* 000129C0 */ 0x04, 0xFF, 0x41, 0x8E, 0x02, 0x36, 0x42, 0x4A, 0x42, 0x6C, 0x41, 0x42, 0x21, 0x07, 0x04, 0x00, +/* 000129D0 */ 0x59, 0x00, 0x42, 0x92, 0x08, 0x43, 0x59, 0x01, 0x43, 0x59, 0x02, 0x30, 0xCE, 0x70, 0x00, 0x00, +/* 000129E0 */ 0x00, 0x05, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x7A, 0x3B, 0x43, 0x22, 0x7A, 0x27, 0x43, +/* 000129F0 */ 0x23, 0x7A, 0x2B, 0x43, 0x24, 0x7A, 0x2B, 0x43, 0x25, 0x59, 0x03, 0x43, 0x1F, 0x04, 0xFF, 0x41, +/* 00012A00 */ 0x8E, 0x02, 0x36, 0x42, 0x4A, 0x42, 0x6C, 0x41, 0x42, 0x26, 0x07, 0x04, 0x00, 0x59, 0x00, 0x42, +/* 00012A10 */ 0x92, 0x08, 0x43, 0x59, 0x01, 0x43, 0x59, 0x02, 0x31, 0xCE, 0x88, 0x00, 0x00, 0x00, 0x06, 0x00, +/* 00012A20 */ 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x8E, 0x01, 0x06, 0x44, 0x4A, 0x44, 0x07, 0x03, 0x00, 0x59, +/* 00012A30 */ 0x00, 0x13, 0x59, 0x01, 0x32, 0xD6, 0x0D, 0x45, 0x59, 0x02, 0x45, 0x1F, 0x03, 0x44, 0x44, 0x7A, +/* 00012A40 */ 0x44, 0x43, 0x27, 0x7A, 0x2B, 0x43, 0x28, 0x7A, 0x27, 0x43, 0x29, 0x7A, 0x2B, 0x43, 0x2A, 0x59, +/* 00012A50 */ 0x03, 0x43, 0x1F, 0x04, 0xFF, 0x41, 0x8E, 0x01, 0x06, 0x41, 0x4A, 0x41, 0x07, 0x03, 0x00, 0x59, +/* 00012A60 */ 0x00, 0x13, 0x59, 0x01, 0x33, 0xD6, 0x0E, 0x42, 0x59, 0x02, 0x42, 0x1F, 0x03, 0x41, 0x41, 0x45, +/* 00012A70 */ 0x3D, 0x41, 0x8E, 0x02, 0x36, 0x42, 0x4A, 0x42, 0x6C, 0x41, 0x42, 0x2B, 0x07, 0x04, 0x00, 0x59, +/* 00012A80 */ 0x00, 0x42, 0x92, 0x09, 0x43, 0x59, 0x01, 0x43, 0x59, 0x02, 0x34, 0xCE, 0xA0, 0x00, 0x00, 0x00, +/* 00012A90 */ 0x07, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x7A, 0x3D, 0x43, 0x2C, 0x7A, 0x2B, 0x43, 0x2D, +/* 00012AA0 */ 0x7A, 0x27, 0x43, 0x2E, 0x7A, 0x2B, 0x43, 0x2F, 0x59, 0x03, 0x43, 0x1F, 0x04, 0xFF, 0x41, 0x92, +/* 00012AB0 */ 0x09, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x08, 0xB8, 0x00, 0xA0, 0x00, 0x00, 0x00, +/* 00012AC0 */ 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, +/* 00012AD0 */ 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, +/* 00012AE0 */ 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, +/* 00012AF0 */ 0x95, 0x01, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00012B00 */ 0x97, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, +/* 00012B10 */ 0x5C, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x01, 0x00, 0x00, +/* 00012B20 */ 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, +/* 00012B30 */ 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, +/* 00012B40 */ 0x95, 0x01, 0x00, 0x00, 0x2C, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00012B50 */ 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, +/* 00012B60 */ 0x14, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, +/* 00012B70 */ 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00012B80 */ 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x72, 0x01, 0x00, 0x00, 0x70, 0x01, 0x00, 0x00, +/* 00012B90 */ 0x73, 0x01, 0x00, 0x00, 0x65, 0xFE, 0x50, 0x01, 0xFE, 0x72, 0x01, 0xFE, 0x70, 0x01, 0xFE, 0x73, +/* 00012BA0 */ 0x01, 0xFE, 0x72, 0x01, 0xFE, 0x2F, 0x02, 0xFE, 0x2A, 0x02, 0xFE, 0x70, 0x01, 0xFE, 0x2F, 0x02, +/* 00012BB0 */ 0xFE, 0x2B, 0x02, 0xFE, 0x73, 0x01, 0xFE, 0x2F, 0x02, 0xFE, 0x2C, 0x02, 0xFE, 0x9C, 0x01, 0xFE, +/* 00012BC0 */ 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x97, +/* 00012BD0 */ 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, +/* 00012BE0 */ 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x98, 0x01, 0xFE, +/* 00012BF0 */ 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, +/* 00012C00 */ 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, +/* 00012C10 */ 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, +/* 00012C20 */ 0x95, 0x01, 0xFE, 0xFA, 0xD9, 0x21, 0x43, 0x00, 0x00, 0x00, 0x18, 0x00, 0x3E, 0x00, 0x05, 0x00, +/* 00012C30 */ 0x1B, 0x00, 0x12, 0x00, 0x3D, 0x00, 0x0E, 0x00, 0x38, 0x00, 0x1D, 0x00, 0x4C, 0x00, 0xA7, 0x00, +/* 00012C40 */ 0xA3, 0x03, 0x10, 0x00, 0x44, 0x20, 0x06, 0x00, 0x52, 0x0C, 0x06, 0x00, 0x25, 0x07, 0x06, 0x00, +/* 00012C50 */ 0x78, 0x01, 0x18, 0x00, 0x5C, 0x00, 0x2F, 0x00, 0xBD, 0x0E, 0x2C, 0x00, 0x34, 0x02, 0x2C, 0x00, +/* 00012C60 */ 0x46, 0x02, 0x2C, 0x00, 0xA0, 0x02, 0x0C, 0x00, 0x27, 0x00, 0x05, 0x00, 0x1B, 0x00, 0x05, 0x00, +/* 00012C70 */ 0x07, 0x01, 0x1A, 0x00, 0x29, 0x04, 0x06, 0x00, 0x3C, 0x03, 0x1C, 0x00, 0xDD, 0x02, 0x1C, 0x00, +/* 00012C80 */ 0x05, 0x04, 0x40, 0x00, 0xCD, 0x00, 0x40, 0x00, 0x4B, 0x01, 0x1C, 0x00, 0x28, 0x02, 0x3A, 0x00, +/* 00012C90 */ 0xB7, 0x00, 0x39, 0x00, 0xA5, 0x00, 0x3D, 0x00, 0xCE, 0x00, 0x56, 0x00, 0x0A, 0x06, 0x1C, 0x00, +/* 00012CA0 */ 0x16, 0x01, 0x3D, 0x00, 0xD0, 0x00, 0x08, 0x00, 0x1B, 0x00, 0x00, 0x2D, 0x46, 0x01, 0x00, 0x90, +/* 00012CB0 */ 0x42, 0x01, 0x00, 0xF0, 0x3D, 0x01, 0x00, 0x29, 0x3D, 0x01, 0x00, 0xC6, 0x3A, 0x01, 0x00, 0x7B, +/* 00012CC0 */ 0x39, 0x01, 0x00, 0x30, 0x38, 0x01, 0x00, 0xE5, 0x36, 0x01, 0x00, 0xEE, 0x34, 0x01, 0x00, 0xB7, +/* 00012CD0 */ 0x33, 0x01, 0x00, 0x5A, 0x32, 0x01, 0x00, 0xA4, 0x30, 0x01, 0x00, 0xA0, 0x2F, 0x01, 0x00, 0x7C, +/* 00012CE0 */ 0x2D, 0x01, 0x00, 0xE7, 0x2C, 0x01, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, +/* 00012CF0 */ 0x40, 0x07, 0x60, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x38, 0x03, 0x6E, 0xFF, 0x79, 0x46, 0x01, 0x00, +/* 00012D00 */ 0xFF, 0x79, 0x46, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x02, 0xFF, 0x79, 0x46, 0x01, 0x00, +/* 00012D10 */ 0xB3, 0xB3, 0x05, 0x03, 0x06, 0x08, 0x17, 0x16, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x05, 0x08, +/* 00012D20 */ 0x45, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA8, 0x06, 0x45, 0x04, 0x06, 0x8E, 0x02, 0x16, 0x06, 0x4A, +/* 00012D30 */ 0x06, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x8E, 0x03, 0x03, 0x07, 0x5E, 0x07, 0x07, 0x00, 0x59, +/* 00012D40 */ 0x01, 0x07, 0x8E, 0x02, 0x12, 0x07, 0x4A, 0x07, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, +/* 00012D50 */ 0x03, 0x1F, 0x02, 0x07, 0x07, 0x59, 0x02, 0x07, 0x59, 0x03, 0x04, 0x1F, 0x04, 0x00, 0x06, 0x09, +/* 00012D60 */ 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xEF, 0x01, 0xFF, 0x9E, 0x46, 0x01, 0x00, 0x03, 0x00, +/* 00012D70 */ 0x00, 0x00, 0x00, 0x0A, 0x00, 0x23, 0x00, 0x39, 0x00, 0x6A, 0x00, 0x00, 0x7F, 0x5D, 0x00, 0xC1, +/* 00012D80 */ 0x03, 0x1A, 0x0B, 0x00, 0xFE, 0x18, 0x07, 0x57, 0xA0, 0x41, 0xC3, 0x00, 0xFE, 0xEE, 0x03, 0x6C, +/* 00012D90 */ 0xFF, 0xAD, 0x40, 0x01, 0x00, 0xFF, 0xAD, 0x40, 0x01, 0x00, 0x01, 0x08, 0xFE, 0x00, 0x90, 0x01, +/* 00012DA0 */ 0x01, 0xFF, 0xAD, 0x40, 0x01, 0x00, 0xFE, 0x01, 0x05, 0xFE, 0x01, 0x05, 0x01, 0xFE, 0xE2, 0x03, +/* 00012DB0 */ 0x07, 0x14, 0x19, 0x05, 0x33, 0x32, 0x03, 0x04, 0x01, 0x01, 0x01, 0x01, 0x16, 0x17, 0x18, 0x06, +/* 00012DC0 */ 0xFE, 0x94, 0x03, 0x05, 0xFE, 0x88, 0x04, 0x06, 0xFE, 0x30, 0x03, 0x08, 0x06, 0xFE, 0xD7, 0x03, +/* 00012DD0 */ 0x06, 0xFE, 0x8A, 0x04, 0x06, 0xFE, 0x24, 0x04, 0x06, 0xFE, 0x77, 0x04, 0x06, 0xFE, 0x73, 0x04, +/* 00012DE0 */ 0x06, 0xFE, 0x33, 0x04, 0x06, 0xFE, 0x34, 0x04, 0x06, 0xFE, 0x35, 0x04, 0x06, 0xFE, 0x36, 0x04, +/* 00012DF0 */ 0x06, 0xFE, 0x37, 0x04, 0x06, 0xFE, 0x38, 0x04, 0x06, 0xFE, 0x39, 0x04, 0x06, 0xFE, 0x3A, 0x04, +/* 00012E00 */ 0x06, 0xFE, 0x3B, 0x04, 0xA6, 0x58, 0x14, 0x4E, 0x15, 0x4E, 0x19, 0x96, 0x02, 0x19, 0x2A, 0x19, +/* 00012E10 */ 0x14, 0x15, 0x03, 0x00, 0x19, 0x02, 0x09, 0x18, 0x00, 0x8E, 0x03, 0x03, 0x1A, 0x6C, 0x19, 0x1A, +/* 00012E20 */ 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x1A, 0x59, 0x01, 0x03, 0x59, 0x02, 0x04, 0x1F, 0x03, 0xFF, +/* 00012E30 */ 0x19, 0x8E, 0x01, 0x0A, 0x19, 0x4A, 0x19, 0x07, 0x02, 0x00, 0x59, 0x00, 0x05, 0x59, 0x01, 0x14, +/* 00012E40 */ 0x1F, 0x02, 0x19, 0x19, 0x96, 0x02, 0x19, 0xCF, 0x19, 0x0E, 0xA1, 0x00, 0x06, 0x19, 0xA1, 0x01, +/* 00012E50 */ 0x07, 0x19, 0xA1, 0x02, 0x08, 0x19, 0xA1, 0x03, 0x09, 0x19, 0xA1, 0x04, 0x0A, 0x19, 0xA1, 0x05, +/* 00012E60 */ 0x0B, 0x19, 0xA1, 0x06, 0x0C, 0x19, 0xA1, 0x07, 0x0D, 0x19, 0xA1, 0x08, 0x0E, 0x19, 0xA1, 0x09, +/* 00012E70 */ 0x0F, 0x19, 0xA1, 0x0A, 0x10, 0x19, 0xA1, 0x0B, 0x11, 0x19, 0xA1, 0x0C, 0x12, 0x19, 0xA1, 0x0D, +/* 00012E80 */ 0x13, 0x19, 0x45, 0x15, 0x19, 0x8E, 0x02, 0x17, 0x19, 0x4A, 0x19, 0x07, 0x04, 0x00, 0x59, 0x00, +/* 00012E90 */ 0x05, 0x59, 0x01, 0x15, 0x92, 0x02, 0x1A, 0x59, 0x02, 0x1A, 0xD6, 0x00, 0x1A, 0x59, 0x03, 0x1A, +/* 00012EA0 */ 0x1F, 0x04, 0x00, 0x19, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB6, 0x02, 0xFF, 0xDA, +/* 00012EB0 */ 0x40, 0x01, 0x00, 0x06, 0x09, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x34, 0x00, 0x18, 0x00, 0x78, 0x00, +/* 00012EC0 */ 0x16, 0x00, 0x41, 0x00, 0x3E, 0x00, 0xE6, 0x01, 0x24, 0x00, 0x00, 0x02, 0x00, 0xD1, 0x2E, 0x01, +/* 00012ED0 */ 0x00, 0x7F, 0x4C, 0x00, 0xC1, 0x43, 0x50, 0x03, 0x00, 0xFE, 0x2F, 0x07, 0x44, 0xA2, 0x41, 0xD1, +/* 00012EE0 */ 0x00, 0x6D, 0xFF, 0xE1, 0x43, 0x01, 0x00, 0xFF, 0xE1, 0x43, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, +/* 00012EF0 */ 0x03, 0x03, 0xFF, 0xE1, 0x43, 0x01, 0x00, 0xFE, 0xBD, 0x01, 0xFE, 0xBD, 0x01, 0x07, 0x07, 0x0B, +/* 00012F00 */ 0x1B, 0x18, 0x04, 0x01, 0x04, 0x04, 0x04, 0x04, 0x01, 0x0A, 0x0B, 0x06, 0xFE, 0x73, 0x04, 0x07, +/* 00012F10 */ 0x06, 0xFE, 0x6F, 0x04, 0x06, 0xFE, 0x6D, 0x04, 0x0B, 0x57, 0x4E, 0x09, 0x14, 0x03, 0x00, 0x07, +/* 00012F20 */ 0x02, 0x09, 0x49, 0x00, 0x8E, 0x01, 0x02, 0x0C, 0x4A, 0x0C, 0x5E, 0x0C, 0x0C, 0x00, 0x45, 0x09, +/* 00012F30 */ 0x0C, 0x8E, 0x01, 0x02, 0x0C, 0x4A, 0x0C, 0x5E, 0x0C, 0x0C, 0x01, 0xA8, 0x0D, 0x15, 0x03, 0x00, +/* 00012F40 */ 0x0C, 0x0D, 0x09, 0x22, 0x00, 0x15, 0x03, 0x00, 0x09, 0x03, 0x09, 0x1A, 0x00, 0x76, 0x09, 0x08, +/* 00012F50 */ 0x02, 0x41, 0x0D, 0x09, 0x04, 0x45, 0x0C, 0x0D, 0x0F, 0x07, 0x00, 0x0D, 0x41, 0x0D, 0x09, 0x05, +/* 00012F60 */ 0x46, 0x0C, 0x0D, 0x76, 0x0C, 0x08, 0x03, 0x45, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, +/* 00012F70 */ 0x00, 0xFE, 0x73, 0x04, 0xFE, 0x6E, 0x02, 0xFE, 0x73, 0x04, 0xFE, 0x6F, 0x02, 0xFF, 0x11, 0x44, +/* 00012F80 */ 0x01, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x34, 0x00, 0x0D, 0x00, 0x3B, 0x00, 0x1C, +/* 00012F90 */ 0x00, 0x52, 0x00, 0x04, 0x00, 0x35, 0x00, 0x16, 0x00, 0x63, 0x00, 0x08, 0x00, 0x33, 0x00, 0x00, +/* 00012FA0 */ 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0xF8, 0x06, 0x3B, 0xA0, 0x41, 0xD1, 0x00, +/* 00012FB0 */ 0x6B, 0xFF, 0xF8, 0x3B, 0x01, 0x00, 0xFF, 0xF8, 0x3B, 0x01, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x01, +/* 00012FC0 */ 0x01, 0xFF, 0xF8, 0x3B, 0x01, 0x00, 0xFE, 0xEA, 0x01, 0xFE, 0xEA, 0x01, 0x07, 0x06, 0x09, 0x04, +/* 00012FD0 */ 0x2A, 0x28, 0x03, 0x04, 0x06, 0x06, 0x06, 0x06, 0x08, 0x06, 0xFE, 0x94, 0x03, 0x05, 0xFE, 0x88, +/* 00012FE0 */ 0x04, 0x06, 0xFE, 0x30, 0x03, 0x08, 0x86, 0x58, 0x06, 0x4E, 0x07, 0x2A, 0x09, 0x06, 0x15, 0x03, +/* 00012FF0 */ 0x00, 0x09, 0x02, 0x09, 0x18, 0x00, 0x8E, 0x03, 0x03, 0x0A, 0x6C, 0x09, 0x0A, 0x00, 0x07, 0x03, +/* 00013000 */ 0x00, 0x59, 0x00, 0x0A, 0x59, 0x01, 0x03, 0x59, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x09, 0x8E, 0x01, +/* 00013010 */ 0x0A, 0x09, 0x4A, 0x09, 0x07, 0x02, 0x00, 0x59, 0x00, 0x05, 0x59, 0x01, 0x06, 0x1F, 0x02, 0x09, +/* 00013020 */ 0x09, 0x45, 0x07, 0x09, 0x5E, 0x09, 0x07, 0x01, 0xA8, 0x0A, 0x14, 0x03, 0x00, 0x09, 0x0A, 0x09, +/* 00013030 */ 0x30, 0x00, 0x45, 0x09, 0x07, 0x8E, 0x03, 0x36, 0x0B, 0x4A, 0x0B, 0x6C, 0x0A, 0x0B, 0x02, 0x07, +/* 00013040 */ 0x03, 0x00, 0x59, 0x00, 0x0B, 0x8E, 0x01, 0x0B, 0x0C, 0x4A, 0x0C, 0x59, 0x01, 0x0C, 0x59, 0x02, +/* 00013050 */ 0x07, 0x1F, 0x03, 0x0A, 0x0A, 0x76, 0x0A, 0x09, 0x03, 0x5E, 0x09, 0x07, 0x04, 0x82, 0x09, 0x09, +/* 00013060 */ 0x06, 0x01, 0x5E, 0x00, 0x07, 0x05, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB6, 0x02, +/* 00013070 */ 0xFE, 0x25, 0x04, 0x54, 0xFE, 0x25, 0x04, 0xFE, 0x25, 0x04, 0xFE, 0x25, 0x04, 0xFF, 0x12, 0x3C, +/* 00013080 */ 0x01, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x30, 0x00, 0x18, 0x00, 0x70, 0x00, 0x16, +/* 00013090 */ 0x00, 0x3E, 0x00, 0x0E, 0x00, 0x3E, 0x00, 0x27, 0x00, 0x49, 0x00, 0x09, 0x00, 0x41, 0x00, 0x09, +/* 000130A0 */ 0x00, 0x29, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0xD1, 0x06, 0x60, +/* 000130B0 */ 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x16, 0x04, 0x6A, 0xFF, 0x00, 0x36, 0x01, 0x00, 0xFF, 0x00, 0x36, +/* 000130C0 */ 0x01, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0x00, 0x36, 0x01, 0x00, 0xFE, 0xA1, 0x03, +/* 000130D0 */ 0xFE, 0xA1, 0x03, 0x07, 0x07, 0x0C, 0x06, 0x54, 0x50, 0x03, 0x03, 0x0A, 0x0A, 0x0A, 0x0A, 0x0B, +/* 000130E0 */ 0x06, 0xFE, 0x94, 0x03, 0x05, 0xFE, 0x89, 0x04, 0x06, 0xFE, 0x30, 0x03, 0x0B, 0x0C, 0xFE, 0x14, +/* 000130F0 */ 0x01, 0x58, 0x08, 0x4E, 0x09, 0x4E, 0x0A, 0x2A, 0x0C, 0x08, 0x15, 0x03, 0x00, 0x0C, 0x02, 0x09, +/* 00013100 */ 0x18, 0x00, 0x8E, 0x03, 0x03, 0x0D, 0x6C, 0x0C, 0x0D, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0D, +/* 00013110 */ 0x59, 0x01, 0x03, 0x59, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x0C, 0x8E, 0x03, 0x03, 0x0D, 0x6C, 0x0C, +/* 00013120 */ 0x0D, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0D, 0x59, 0x01, 0x08, 0x1F, 0x02, 0x0C, 0x0C, 0x45, +/* 00013130 */ 0x09, 0x0C, 0xA8, 0x0C, 0x14, 0x08, 0x00, 0x09, 0x0C, 0x5E, 0x0C, 0x09, 0x02, 0x0F, 0x18, 0x00, +/* 00013140 */ 0x0C, 0x8E, 0x03, 0x03, 0x0D, 0x6C, 0x0C, 0x0D, 0x03, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0D, 0x59, +/* 00013150 */ 0x01, 0x03, 0x59, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x0C, 0xA8, 0x0C, 0x45, 0x0A, 0x0C, 0xA8, 0x0C, +/* 00013160 */ 0x14, 0x03, 0x00, 0x07, 0x0C, 0x09, 0x18, 0x00, 0x8E, 0x03, 0x03, 0x0D, 0x6C, 0x0C, 0x0D, 0x04, +/* 00013170 */ 0x07, 0x01, 0x00, 0x59, 0x00, 0x0D, 0x1F, 0x01, 0x0C, 0x0C, 0x45, 0x0A, 0x0C, 0x09, 0x60, 0x00, +/* 00013180 */ 0x8E, 0x03, 0x24, 0x0D, 0x6C, 0x0C, 0x0D, 0x05, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0D, 0x59, 0x01, +/* 00013190 */ 0x07, 0x1F, 0x02, 0x0C, 0x0C, 0x45, 0x0A, 0x0C, 0x8E, 0x03, 0x36, 0x0D, 0x4A, 0x0D, 0x6C, 0x0C, +/* 000131A0 */ 0x0D, 0x06, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0D, 0x59, 0x01, 0x0A, 0x1F, 0x02, 0x0C, 0x0C, 0x0F, +/* 000131B0 */ 0x1B, 0x00, 0x0C, 0x8E, 0x03, 0x36, 0x0D, 0x4A, 0x0D, 0x6C, 0x0C, 0x0D, 0x07, 0x07, 0x02, 0x00, +/* 000131C0 */ 0x59, 0x00, 0x0D, 0x59, 0x01, 0x0A, 0x1F, 0x02, 0x0C, 0x0C, 0x0F, 0x12, 0x00, 0x0C, 0x8E, 0x03, +/* 000131D0 */ 0x03, 0x0D, 0x6C, 0x0C, 0x0D, 0x08, 0x07, 0x01, 0x00, 0x59, 0x00, 0x0D, 0x1F, 0x01, 0xFF, 0x0C, +/* 000131E0 */ 0x8E, 0x03, 0x03, 0x0D, 0x6C, 0x0C, 0x0D, 0x09, 0x07, 0x05, 0x00, 0x59, 0x00, 0x0D, 0x59, 0x01, +/* 000131F0 */ 0x09, 0x59, 0x02, 0x0A, 0x59, 0x03, 0x05, 0x59, 0x04, 0x06, 0x1F, 0x05, 0x00, 0x0C, 0x09, 0x02, +/* 00013200 */ 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB6, 0x02, 0xFE, 0x05, 0x02, 0xFE, 0x7E, 0x04, 0xFE, 0xB6, +/* 00013210 */ 0x02, 0xFE, 0x9F, 0x02, 0xFE, 0x23, 0x03, 0xC4, 0xC1, 0xFE, 0xB9, 0x02, 0xFE, 0xFC, 0x01, 0xFF, +/* 00013220 */ 0x2B, 0x36, 0x01, 0x00, 0x0D, 0x06, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x30, 0x00, 0x18, 0x00, 0x77, +/* 00013230 */ 0x00, 0x18, 0x00, 0x41, 0x00, 0x0F, 0x00, 0x5D, 0x00, 0x18, 0x00, 0x77, 0x00, 0x05, 0x00, 0x13, +/* 00013240 */ 0x00, 0x0A, 0x00, 0x2A, 0x00, 0x18, 0x00, 0x53, 0x00, 0x18, 0x00, 0x2E, 0x00, 0x36, 0x00, 0x38, +/* 00013250 */ 0x00, 0x12, 0x00, 0x4A, 0x00, 0x23, 0x00, 0x79, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, +/* 00013260 */ 0x03, 0x00, 0xFE, 0xBE, 0x06, 0x52, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x15, 0x04, 0x69, 0xFF, 0x15, +/* 00013270 */ 0x33, 0x01, 0x00, 0xFF, 0x15, 0x33, 0x01, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0x15, +/* 00013280 */ 0x33, 0x01, 0x00, 0xFE, 0x87, 0x02, 0xFE, 0x87, 0x02, 0x06, 0x05, 0x09, 0x06, 0x41, 0x3E, 0x03, +/* 00013290 */ 0x03, 0x08, 0x08, 0x08, 0x08, 0x08, 0x05, 0xFE, 0x88, 0x04, 0x06, 0xFE, 0x30, 0x03, 0x0C, 0xD4, +/* 000132A0 */ 0x58, 0x06, 0x4E, 0x07, 0x0E, 0x08, 0x00, 0x06, 0x5E, 0x09, 0x06, 0x00, 0x0F, 0x18, 0x00, 0x09, +/* 000132B0 */ 0x8E, 0x03, 0x03, 0x0A, 0x6C, 0x09, 0x0A, 0x01, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0A, 0x59, 0x01, +/* 000132C0 */ 0x02, 0x59, 0x02, 0x03, 0x1F, 0x03, 0xFF, 0x09, 0xA8, 0x09, 0x45, 0x07, 0x09, 0xA8, 0x09, 0x14, +/* 000132D0 */ 0x03, 0x00, 0x05, 0x09, 0x09, 0x18, 0x00, 0x8E, 0x03, 0x03, 0x0A, 0x6C, 0x09, 0x0A, 0x02, 0x07, +/* 000132E0 */ 0x01, 0x00, 0x59, 0x00, 0x0A, 0x1F, 0x01, 0x09, 0x09, 0x45, 0x07, 0x09, 0x09, 0x60, 0x00, 0x8E, +/* 000132F0 */ 0x03, 0x24, 0x0A, 0x6C, 0x09, 0x0A, 0x03, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0A, 0x59, 0x01, 0x05, +/* 00013300 */ 0x1F, 0x02, 0x09, 0x09, 0x45, 0x07, 0x09, 0x8E, 0x03, 0x36, 0x0A, 0x4A, 0x0A, 0x6C, 0x09, 0x0A, +/* 00013310 */ 0x04, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0A, 0x59, 0x01, 0x07, 0x1F, 0x02, 0x09, 0x09, 0x0F, 0x1B, +/* 00013320 */ 0x00, 0x09, 0x8E, 0x03, 0x36, 0x0A, 0x4A, 0x0A, 0x6C, 0x09, 0x0A, 0x05, 0x07, 0x02, 0x00, 0x59, +/* 00013330 */ 0x00, 0x0A, 0x59, 0x01, 0x07, 0x1F, 0x02, 0x09, 0x09, 0x0F, 0x12, 0x00, 0x09, 0x8E, 0x03, 0x03, +/* 00013340 */ 0x0A, 0x6C, 0x09, 0x0A, 0x06, 0x07, 0x01, 0x00, 0x59, 0x00, 0x0A, 0x1F, 0x01, 0xFF, 0x09, 0x8E, +/* 00013350 */ 0x03, 0x03, 0x0A, 0x6C, 0x09, 0x0A, 0x07, 0x07, 0x05, 0x00, 0x59, 0x00, 0x0A, 0x59, 0x01, 0x06, +/* 00013360 */ 0x59, 0x02, 0x07, 0x59, 0x03, 0x04, 0x59, 0x04, 0x04, 0x1F, 0x05, 0x00, 0x09, 0x09, 0x02, 0x00, +/* 00013370 */ 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x7E, 0x04, 0xFE, 0xB6, 0x02, 0xFE, 0x9F, 0x02, 0xFE, 0x23, 0x03, +/* 00013380 */ 0xC4, 0xC1, 0xFE, 0xB9, 0x02, 0xFE, 0xFC, 0x01, 0xFF, 0x39, 0x33, 0x01, 0x00, 0x0A, 0x04, 0x00, +/* 00013390 */ 0x00, 0x00, 0x0C, 0x00, 0x40, 0x00, 0x18, 0x00, 0x70, 0x00, 0x05, 0x00, 0x13, 0x00, 0x0A, 0x00, +/* 000133A0 */ 0x2A, 0x00, 0x18, 0x00, 0x53, 0x00, 0x18, 0x00, 0x2E, 0x00, 0x36, 0x00, 0x38, 0x00, 0x12, 0x00, +/* 000133B0 */ 0x4A, 0x00, 0x23, 0x00, 0x72, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x07, 0x10, 0x03, 0x00, 0xFE, +/* 000133C0 */ 0xAB, 0x06, 0x25, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x2D, 0x04, 0x68, 0xFF, 0xAC, 0x2F, 0x01, 0x00, +/* 000133D0 */ 0xFF, 0xAC, 0x2F, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0xAC, 0x2F, 0x01, 0x00, +/* 000133E0 */ 0xFE, 0xB3, 0x02, 0xFE, 0xB3, 0x02, 0x05, 0x05, 0x08, 0x04, 0x32, 0x2E, 0x03, 0x02, 0x07, 0x07, +/* 000133F0 */ 0x07, 0x07, 0x01, 0x07, 0x06, 0xFE, 0x94, 0x03, 0x05, 0xFE, 0x88, 0x04, 0x06, 0xFE, 0x30, 0x03, +/* 00013400 */ 0xA9, 0x4E, 0x06, 0x8E, 0x03, 0x03, 0x09, 0x6C, 0x08, 0x09, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 00013410 */ 0x09, 0x59, 0x01, 0x05, 0x1F, 0x02, 0x08, 0x08, 0x45, 0x06, 0x08, 0x0E, 0x08, 0x00, 0x06, 0x5E, +/* 00013420 */ 0x08, 0x06, 0x01, 0x0F, 0x1E, 0x00, 0x08, 0x8E, 0x01, 0x09, 0x08, 0x4A, 0x08, 0xE3, 0x08, 0x05, +/* 00013430 */ 0x08, 0x00, 0x0E, 0x0F, 0x00, 0x08, 0x8E, 0x03, 0x03, 0x08, 0x5E, 0x08, 0x08, 0x02, 0x97, 0x08, +/* 00013440 */ 0x05, 0x08, 0x45, 0x05, 0x08, 0x2A, 0x08, 0x05, 0x15, 0x03, 0x00, 0x08, 0x02, 0x09, 0x18, 0x00, +/* 00013450 */ 0x8E, 0x03, 0x03, 0x09, 0x6C, 0x08, 0x09, 0x03, 0x07, 0x03, 0x00, 0x59, 0x00, 0x09, 0x59, 0x01, +/* 00013460 */ 0x03, 0x59, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x08, 0x8E, 0x03, 0x03, 0x09, 0x6C, 0x08, 0x09, 0x04, +/* 00013470 */ 0x07, 0x02, 0x00, 0x59, 0x00, 0x09, 0x59, 0x01, 0x05, 0x1F, 0x02, 0x08, 0x08, 0x45, 0x06, 0x08, +/* 00013480 */ 0x5E, 0x08, 0x06, 0x05, 0x0F, 0x18, 0x00, 0x08, 0x8E, 0x03, 0x03, 0x09, 0x6C, 0x08, 0x09, 0x06, +/* 00013490 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x09, 0x59, 0x01, 0x03, 0x59, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x08, +/* 000134A0 */ 0x45, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x05, 0x02, 0xFE, 0x7E, 0x04, +/* 000134B0 */ 0xFE, 0x30, 0x02, 0xFE, 0xB6, 0x02, 0xFE, 0x05, 0x02, 0xFE, 0x7E, 0x04, 0xFE, 0xB6, 0x02, 0xFF, +/* 000134C0 */ 0xC9, 0x2F, 0x01, 0x00, 0x0A, 0x02, 0x00, 0x00, 0x00, 0x18, 0x00, 0x3E, 0x00, 0x1B, 0x00, 0x73, +/* 000134D0 */ 0x00, 0x0F, 0x00, 0x3F, 0x00, 0x0B, 0x00, 0x2F, 0x00, 0x18, 0x00, 0x70, 0x00, 0x18, 0x00, 0x3A, +/* 000134E0 */ 0x00, 0x08, 0x00, 0x3F, 0x00, 0x18, 0x00, 0x70, 0x00, 0x08, 0x00, 0x1D, 0x00, 0x00, 0x7F, 0x5C, +/* 000134F0 */ 0x00, 0xC1, 0x17, 0x10, 0x43, 0x00, 0xFE, 0x91, 0x06, 0x48, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x30, +/* 00013500 */ 0x03, 0x67, 0xFF, 0xA6, 0x2B, 0x01, 0x00, 0xFF, 0xA6, 0x2B, 0x01, 0x00, 0x08, 0xFE, 0x00, 0x90, +/* 00013510 */ 0x03, 0x01, 0xFF, 0xA6, 0x2B, 0x01, 0x00, 0xFE, 0xDD, 0x03, 0xFE, 0xDD, 0x03, 0x0C, 0x09, 0x12, +/* 00013520 */ 0x05, 0x5C, 0x53, 0x03, 0x05, 0x09, 0x09, 0x09, 0x09, 0x01, 0x01, 0x11, 0x08, 0x06, 0xFE, 0x2A, +/* 00013530 */ 0x03, 0x06, 0xFE, 0x2B, 0x03, 0x0C, 0x06, 0xFE, 0x2C, 0x03, 0x06, 0xFE, 0x2D, 0x03, 0x07, 0xFE, +/* 00013540 */ 0x2C, 0x01, 0x01, 0x5D, 0x01, 0x0B, 0x58, 0x10, 0xC0, 0x0C, 0x4E, 0x0D, 0x4E, 0x0E, 0x4E, 0x0F, +/* 00013550 */ 0x15, 0x05, 0x00, 0x09, 0x02, 0xA8, 0x12, 0x45, 0x09, 0x12, 0x15, 0x05, 0x00, 0x0A, 0x02, 0xA8, +/* 00013560 */ 0x12, 0x45, 0x0A, 0x12, 0x4E, 0x0D, 0x4E, 0x0E, 0x4E, 0x0F, 0xA8, 0x12, 0x14, 0x03, 0x00, 0x0B, +/* 00013570 */ 0x12, 0x09, 0x06, 0x00, 0x45, 0x12, 0x0C, 0x09, 0x03, 0x00, 0x46, 0x12, 0x0B, 0x45, 0x0D, 0x12, +/* 00013580 */ 0x8E, 0x02, 0x07, 0x12, 0x4A, 0x12, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x0D, 0x8E, +/* 00013590 */ 0x01, 0x08, 0x13, 0x4A, 0x13, 0x59, 0x02, 0x13, 0x1F, 0x03, 0x12, 0x12, 0x45, 0x0E, 0x12, 0x8E, +/* 000135A0 */ 0x03, 0x03, 0x13, 0x6C, 0x12, 0x13, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x13, 0x59, 0x01, 0x0E, +/* 000135B0 */ 0x1F, 0x02, 0x12, 0x12, 0x45, 0x0F, 0x12, 0xA8, 0x12, 0x14, 0x03, 0x00, 0x0F, 0x12, 0x09, 0x2F, +/* 000135C0 */ 0x00, 0x8E, 0x03, 0x36, 0x13, 0x4A, 0x13, 0x6C, 0x12, 0x13, 0x01, 0x07, 0x01, 0x00, 0x59, 0x00, +/* 000135D0 */ 0x13, 0x1F, 0x01, 0x12, 0x12, 0x45, 0x0F, 0x12, 0x8E, 0x03, 0x03, 0x13, 0x6C, 0x12, 0x13, 0x02, +/* 000135E0 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x13, 0x59, 0x01, 0x0E, 0x59, 0x02, 0x0F, 0x1F, 0x03, 0xFF, 0x12, +/* 000135F0 */ 0x8E, 0x01, 0x05, 0x12, 0x4A, 0x12, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x0F, 0x59, +/* 00013600 */ 0x02, 0x09, 0x59, 0x03, 0x0A, 0x1F, 0x04, 0xFF, 0x12, 0xA8, 0x12, 0x14, 0x03, 0x00, 0x0B, 0x12, +/* 00013610 */ 0x09, 0x51, 0x00, 0xE3, 0x12, 0x10, 0x0C, 0x00, 0x0E, 0x48, 0x00, 0x12, 0x8E, 0x03, 0x36, 0x13, +/* 00013620 */ 0x4A, 0x13, 0x6C, 0x12, 0x13, 0x03, 0x07, 0x04, 0x00, 0x59, 0x00, 0x13, 0x59, 0x01, 0x10, 0x8E, +/* 00013630 */ 0x03, 0x03, 0x14, 0x5E, 0x14, 0x14, 0x04, 0x59, 0x02, 0x14, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00013640 */ 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x7A, 0x0E, 0x14, 0x05, 0x7A, 0x05, 0x14, 0x06, 0x7A, +/* 00013650 */ 0x05, 0x14, 0x07, 0x7A, 0x05, 0x14, 0x08, 0x59, 0x03, 0x14, 0x1F, 0x04, 0xFF, 0x12, 0x45, 0x00, +/* 00013660 */ 0x10, 0x09, 0x08, 0x00, 0x45, 0x00, 0x0E, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x01, 0x18, +/* 00013670 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, +/* 00013680 */ 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0xFE, 0x05, 0x02, +/* 00013690 */ 0x69, 0xFE, 0x06, 0x02, 0xFE, 0x9C, 0x01, 0xFE, 0x30, 0x02, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, +/* 000136A0 */ 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFF, 0xBE, 0x2B, 0x01, 0x00, 0x0E, 0x0E, 0x00, 0x00, 0x00, +/* 000136B0 */ 0x0A, 0x00, 0x15, 0x00, 0x10, 0x00, 0x23, 0x00, 0x16, 0x00, 0x56, 0x00, 0x1F, 0x00, 0x67, 0x00, +/* 000136C0 */ 0x18, 0x00, 0x49, 0x00, 0x0A, 0x00, 0x32, 0x00, 0x17, 0x00, 0x2B, 0x00, 0x18, 0x00, 0x53, 0x00, +/* 000136D0 */ 0x19, 0x00, 0x47, 0x00, 0x13, 0x00, 0x52, 0x00, 0x42, 0x00, 0xF6, 0x00, 0x06, 0x00, 0x28, 0x00, +/* 000136E0 */ 0x08, 0x00, 0x1F, 0x00, 0x00, 0x7F, 0x5D, 0x00, 0xC1, 0x03, 0x1A, 0x0B, 0x00, 0xFE, 0x7C, 0x06, +/* 000136F0 */ 0x09, 0xA2, 0x41, 0xD1, 0x00, 0x65, 0xFF, 0x7D, 0x27, 0x01, 0x00, 0xFF, 0x7D, 0x27, 0x01, 0x00, +/* 00013700 */ 0x01, 0x40, 0xFE, 0x00, 0x90, 0x06, 0x06, 0xFF, 0x7D, 0x27, 0x01, 0x00, 0xFE, 0x90, 0x01, 0xFE, +/* 00013710 */ 0x90, 0x01, 0x04, 0xFE, 0x06, 0x01, 0xFE, 0x82, 0x04, 0xFE, 0x83, 0x04, 0xFE, 0x84, 0x04, 0x0C, +/* 00013720 */ 0x03, 0x0B, 0x08, 0x17, 0x17, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x08, 0x09, 0x0A, 0x08, 0x44, +/* 00013730 */ 0x96, 0x02, 0x03, 0x96, 0x03, 0x04, 0x96, 0x04, 0x05, 0x96, 0x05, 0x06, 0x8E, 0x03, 0x03, 0x0C, +/* 00013740 */ 0x6C, 0x0B, 0x0C, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0C, 0x8E, 0x02, 0x06, 0x0D, 0x4A, 0x0D, +/* 00013750 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x92, 0x02, 0x0E, 0x59, 0x01, 0x0E, 0xD6, 0x00, 0x0E, 0x59, +/* 00013760 */ 0x02, 0x0E, 0x1F, 0x03, 0x0D, 0x0D, 0x59, 0x01, 0x0D, 0x59, 0x02, 0x07, 0x1F, 0x03, 0xFF, 0x0B, +/* 00013770 */ 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x04, 0x02, 0xFF, 0xCC, 0x27, 0x01, 0x00, 0x02, 0x0C, 0x00, 0x00, +/* 00013780 */ 0x00, 0x36, 0x00, 0x40, 0x01, 0x00, 0x8A, 0x37, 0x01, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, +/* 00013790 */ 0x03, 0x00, 0xFE, 0x7D, 0x06, 0x46, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x87, 0x04, 0x66, 0xFF, 0x06, +/* 000137A0 */ 0x28, 0x01, 0x00, 0xFF, 0x06, 0x28, 0x01, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x03, 0x01, 0xFF, 0x06, +/* 000137B0 */ 0x28, 0x01, 0x00, 0xE6, 0xE6, 0x07, 0x03, 0x07, 0x09, 0x1B, 0x19, 0x04, 0x05, 0x01, 0x01, 0x01, +/* 000137C0 */ 0x01, 0x06, 0x08, 0x54, 0x58, 0x05, 0x15, 0x05, 0x00, 0x03, 0x02, 0xA8, 0x07, 0x45, 0x03, 0x07, +/* 000137D0 */ 0x15, 0x05, 0x00, 0x04, 0x02, 0xA8, 0x07, 0x45, 0x04, 0x07, 0x8E, 0x02, 0x02, 0x08, 0x6C, 0x07, +/* 000137E0 */ 0x08, 0x00, 0x07, 0x08, 0x00, 0x59, 0x00, 0x08, 0x59, 0x01, 0x05, 0x8E, 0x01, 0x02, 0x09, 0x59, +/* 000137F0 */ 0x02, 0x09, 0x8E, 0x01, 0x03, 0x09, 0x59, 0x03, 0x09, 0x8E, 0x01, 0x04, 0x09, 0x59, 0x04, 0x09, +/* 00013800 */ 0x8E, 0x01, 0x05, 0x09, 0x59, 0x05, 0x09, 0x59, 0x06, 0x03, 0x59, 0x07, 0x04, 0x1F, 0x08, 0x00, +/* 00013810 */ 0x07, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x5A, 0xFF, 0x32, 0x28, 0x01, 0x00, 0x04, 0x02, +/* 00013820 */ 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0A, 0x00, 0x27, 0x00, 0x3C, 0x00, 0x7D, 0x00, 0x00, +/* 00013830 */ 0x7F, 0x5D, 0x00, 0xC1, 0x03, 0x1A, 0x0B, 0x00, 0xFE, 0x76, 0x06, 0x09, 0xA2, 0x41, 0xD1, 0x00, +/* 00013840 */ 0x63, 0xFF, 0x37, 0x25, 0x01, 0x00, 0xFF, 0x37, 0x25, 0x01, 0x00, 0x01, 0x40, 0xFE, 0x00, 0x90, +/* 00013850 */ 0x06, 0x06, 0xFF, 0x37, 0x25, 0x01, 0x00, 0xFE, 0x90, 0x01, 0xFE, 0x90, 0x01, 0x04, 0xFE, 0x06, +/* 00013860 */ 0x01, 0xFE, 0x82, 0x04, 0xFE, 0x83, 0x04, 0xFE, 0x84, 0x04, 0x0C, 0x03, 0x0B, 0x08, 0x17, 0x17, +/* 00013870 */ 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x08, 0x09, 0x0A, 0x08, 0x44, 0x96, 0x02, 0x03, 0x96, 0x03, +/* 00013880 */ 0x04, 0x96, 0x04, 0x05, 0x96, 0x05, 0x06, 0x8E, 0x03, 0x03, 0x0C, 0x6C, 0x0B, 0x0C, 0x00, 0x07, +/* 00013890 */ 0x03, 0x00, 0x59, 0x00, 0x0C, 0x8E, 0x02, 0x06, 0x0D, 0x4A, 0x0D, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 000138A0 */ 0x02, 0x92, 0x02, 0x0E, 0x59, 0x01, 0x0E, 0xD6, 0x00, 0x0E, 0x59, 0x02, 0x0E, 0x1F, 0x03, 0x0D, +/* 000138B0 */ 0x0D, 0x59, 0x01, 0x0D, 0x59, 0x02, 0x07, 0x1F, 0x03, 0xFF, 0x0B, 0xA8, 0x00, 0x24, 0x00, 0xFE, +/* 000138C0 */ 0x04, 0x02, 0xFF, 0x86, 0x25, 0x01, 0x00, 0x02, 0x0C, 0x00, 0x00, 0x00, 0x36, 0x00, 0x40, 0x01, +/* 000138D0 */ 0x00, 0xD5, 0x38, 0x01, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x77, 0x06, +/* 000138E0 */ 0x46, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x86, 0x04, 0x64, 0xFF, 0xC0, 0x25, 0x01, 0x00, 0xFF, 0xC0, +/* 000138F0 */ 0x25, 0x01, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x03, 0x01, 0xFF, 0xC0, 0x25, 0x01, 0x00, 0xE6, 0xE6, +/* 00013900 */ 0x07, 0x03, 0x07, 0x09, 0x1B, 0x19, 0x04, 0x05, 0x01, 0x01, 0x01, 0x01, 0x06, 0x08, 0x54, 0x58, +/* 00013910 */ 0x05, 0x15, 0x05, 0x00, 0x03, 0x02, 0xA8, 0x07, 0x45, 0x03, 0x07, 0x15, 0x05, 0x00, 0x04, 0x02, +/* 00013920 */ 0xA8, 0x07, 0x45, 0x04, 0x07, 0x8E, 0x02, 0x02, 0x08, 0x6C, 0x07, 0x08, 0x00, 0x07, 0x08, 0x00, +/* 00013930 */ 0x59, 0x00, 0x08, 0x59, 0x01, 0x05, 0x8E, 0x01, 0x02, 0x09, 0x59, 0x02, 0x09, 0x8E, 0x01, 0x03, +/* 00013940 */ 0x09, 0x59, 0x03, 0x09, 0x8E, 0x01, 0x04, 0x09, 0x59, 0x04, 0x09, 0x8E, 0x01, 0x05, 0x09, 0x59, +/* 00013950 */ 0x05, 0x09, 0x59, 0x06, 0x03, 0x59, 0x07, 0x04, 0x1F, 0x08, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA8, +/* 00013960 */ 0x00, 0x24, 0x00, 0x5A, 0xFF, 0xEC, 0x25, 0x01, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, +/* 00013970 */ 0x15, 0x00, 0x0A, 0x00, 0x27, 0x00, 0x3C, 0x00, 0x7D, 0x00, 0x00, 0x7F, 0x5D, 0x00, 0xC1, 0x03, +/* 00013980 */ 0x1A, 0x0B, 0x00, 0xFE, 0x70, 0x06, 0x09, 0xA2, 0x41, 0xD1, 0x00, 0x61, 0xFF, 0x03, 0x23, 0x01, +/* 00013990 */ 0x00, 0xFF, 0x03, 0x23, 0x01, 0x00, 0x01, 0x40, 0xFE, 0x00, 0x90, 0x06, 0x06, 0xFF, 0x03, 0x23, +/* 000139A0 */ 0x01, 0x00, 0xFE, 0x8C, 0x01, 0xFE, 0x8C, 0x01, 0x04, 0xFE, 0x06, 0x01, 0xFE, 0x82, 0x04, 0xFE, +/* 000139B0 */ 0x83, 0x04, 0xFE, 0x84, 0x04, 0x0C, 0x03, 0x0B, 0x08, 0x17, 0x17, 0x03, 0x03, 0x01, 0x01, 0x01, +/* 000139C0 */ 0x01, 0x08, 0x09, 0x0A, 0x08, 0x44, 0x96, 0x02, 0x03, 0x96, 0x03, 0x04, 0x96, 0x04, 0x05, 0x96, +/* 000139D0 */ 0x05, 0x06, 0x8E, 0x03, 0x03, 0x0C, 0x6C, 0x0B, 0x0C, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0C, +/* 000139E0 */ 0x8E, 0x02, 0x06, 0x0D, 0x4A, 0x0D, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x92, 0x02, 0x0E, 0x59, +/* 000139F0 */ 0x01, 0x0E, 0xD6, 0x00, 0x0E, 0x59, 0x02, 0x0E, 0x1F, 0x03, 0x0D, 0x0D, 0x59, 0x01, 0x0D, 0x59, +/* 00013A00 */ 0x02, 0x07, 0x1F, 0x03, 0xFF, 0x0B, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x04, 0x02, 0xFF, 0x52, 0x23, +/* 00013A10 */ 0x01, 0x00, 0x02, 0x0C, 0x00, 0x00, 0x00, 0x36, 0x00, 0x3C, 0x01, 0x00, 0x20, 0x3A, 0x01, 0x00, +/* 00013A20 */ 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x71, 0x06, 0x46, 0xA2, 0x41, 0xC3, 0x00, +/* 00013A30 */ 0xFE, 0x85, 0x04, 0x62, 0xFF, 0x8C, 0x23, 0x01, 0x00, 0xFF, 0x8C, 0x23, 0x01, 0x00, 0x09, 0xFE, +/* 00013A40 */ 0x00, 0x90, 0x03, 0x01, 0xFF, 0x8C, 0x23, 0x01, 0x00, 0xE2, 0xE2, 0x07, 0x03, 0x07, 0x09, 0x1B, +/* 00013A50 */ 0x19, 0x04, 0x05, 0x01, 0x01, 0x01, 0x01, 0x06, 0x08, 0x54, 0x58, 0x05, 0x15, 0x05, 0x00, 0x03, +/* 00013A60 */ 0x02, 0xA8, 0x07, 0x45, 0x03, 0x07, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA8, 0x07, 0x45, 0x04, 0x07, +/* 00013A70 */ 0x8E, 0x02, 0x02, 0x08, 0x6C, 0x07, 0x08, 0x00, 0x07, 0x08, 0x00, 0x59, 0x00, 0x08, 0x59, 0x01, +/* 00013A80 */ 0x05, 0x8E, 0x01, 0x02, 0x09, 0x59, 0x02, 0x09, 0x8E, 0x01, 0x03, 0x09, 0x59, 0x03, 0x09, 0x8E, +/* 00013A90 */ 0x01, 0x04, 0x09, 0x59, 0x04, 0x09, 0x8E, 0x01, 0x05, 0x09, 0x59, 0x05, 0x09, 0x59, 0x06, 0x03, +/* 00013AA0 */ 0x59, 0x07, 0x04, 0x1F, 0x08, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x5A, 0xFF, +/* 00013AB0 */ 0xB4, 0x23, 0x01, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0A, 0x00, 0x27, +/* 00013AC0 */ 0x00, 0x3C, 0x00, 0x7D, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x07, 0x10, 0x03, 0x00, 0xFE, 0x3B, +/* 00013AD0 */ 0x06, 0x08, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x26, 0x04, 0x60, 0xFF, 0xFB, 0x14, 0x01, 0x00, 0xFF, +/* 00013AE0 */ 0xFB, 0x14, 0x01, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x07, 0x07, 0xFF, 0xFB, 0x14, 0x01, 0x00, 0xFE, +/* 00013AF0 */ 0x16, 0x06, 0xFE, 0x16, 0x06, 0x0E, 0x08, 0x12, 0x0A, 0x88, 0x82, 0x03, 0x07, 0x09, 0x09, 0x09, +/* 00013B00 */ 0x09, 0x01, 0x11, 0x06, 0xFE, 0x94, 0x03, 0x06, 0xFE, 0x2E, 0x04, 0x05, 0xFE, 0x81, 0x04, 0x08, +/* 00013B10 */ 0x0C, 0x0B, 0xFE, 0xB8, 0x01, 0x58, 0x0E, 0x4E, 0x0F, 0x4E, 0x10, 0x2A, 0x12, 0x0E, 0x15, 0x0D, +/* 00013B20 */ 0x00, 0x12, 0x02, 0x8E, 0x03, 0x0D, 0x12, 0xE3, 0x12, 0x0E, 0x12, 0x00, 0x0F, 0x18, 0x00, 0x12, +/* 00013B30 */ 0x8E, 0x03, 0x03, 0x13, 0x6C, 0x12, 0x13, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x13, 0x59, 0x01, +/* 00013B40 */ 0x08, 0x59, 0x02, 0x03, 0x1F, 0x03, 0xFF, 0x12, 0x8E, 0x03, 0x36, 0x13, 0x4A, 0x13, 0x6C, 0x12, +/* 00013B50 */ 0x13, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x13, 0x8E, 0x03, 0x0D, 0x14, 0x07, 0x02, 0x00, 0x59, +/* 00013B60 */ 0x01, 0x0E, 0xC4, 0x02, 0x14, 0x14, 0x59, 0x01, 0x14, 0x1F, 0x02, 0x12, 0x12, 0x45, 0x0F, 0x12, +/* 00013B70 */ 0x8E, 0x03, 0x36, 0x13, 0x4A, 0x13, 0x6C, 0x12, 0x13, 0x02, 0x07, 0x02, 0x00, 0x59, 0x00, 0x13, +/* 00013B80 */ 0x59, 0x01, 0x0F, 0x1F, 0x02, 0x12, 0x12, 0x0F, 0x1B, 0x00, 0x12, 0x8E, 0x03, 0x36, 0x13, 0x4A, +/* 00013B90 */ 0x13, 0x6C, 0x12, 0x13, 0x03, 0x07, 0x02, 0x00, 0x59, 0x00, 0x13, 0x59, 0x01, 0x0F, 0x1F, 0x02, +/* 00013BA0 */ 0x12, 0x12, 0x0F, 0x06, 0x00, 0x12, 0x45, 0x00, 0x04, 0x09, 0x1F, 0x01, 0xA8, 0x12, 0x45, 0x10, +/* 00013BB0 */ 0x12, 0x8E, 0x03, 0x03, 0x12, 0x5E, 0x12, 0x12, 0x04, 0x0E, 0x89, 0x00, 0x12, 0xA8, 0x12, 0x14, +/* 00013BC0 */ 0x03, 0x00, 0x0C, 0x12, 0x09, 0x7F, 0x00, 0xA8, 0x12, 0x14, 0x03, 0x00, 0x0D, 0x12, 0x09, 0x75, +/* 00013BD0 */ 0x00, 0x8E, 0x01, 0x07, 0x12, 0x4A, 0x12, 0x97, 0x12, 0x12, 0x0B, 0x0E, 0x10, 0x00, 0x12, 0x8E, +/* 00013BE0 */ 0x01, 0x07, 0x12, 0x4A, 0x12, 0x97, 0x12, 0x12, 0x0B, 0x45, 0x10, 0x12, 0x09, 0x57, 0x00, 0x8E, +/* 00013BF0 */ 0x03, 0x36, 0x13, 0x4A, 0x13, 0x6C, 0x12, 0x13, 0x05, 0x07, 0x01, 0x00, 0x59, 0x00, 0x13, 0x1F, +/* 00013C00 */ 0x01, 0x12, 0x12, 0x45, 0x10, 0x12, 0x8E, 0x01, 0x05, 0x12, 0x4A, 0x12, 0x07, 0x04, 0x00, 0x59, +/* 00013C10 */ 0x00, 0x05, 0x59, 0x01, 0x10, 0xA8, 0x13, 0x59, 0x02, 0x13, 0x8E, 0x01, 0x06, 0x13, 0x4A, 0x13, +/* 00013C20 */ 0x07, 0x04, 0x00, 0x59, 0x00, 0x05, 0xA8, 0x14, 0x59, 0x01, 0x14, 0x59, 0x02, 0x09, 0x59, 0x03, +/* 00013C30 */ 0x0A, 0x1F, 0x04, 0x13, 0x13, 0x59, 0x03, 0x13, 0x1F, 0x04, 0xFF, 0x12, 0x8E, 0x01, 0x07, 0x12, +/* 00013C40 */ 0x4A, 0x12, 0x9C, 0x10, 0x12, 0x0B, 0x0F, 0x49, 0x00, 0x10, 0x8E, 0x03, 0x36, 0x13, 0x4A, 0x13, +/* 00013C50 */ 0x6C, 0x12, 0x13, 0x06, 0x07, 0x01, 0x00, 0x59, 0x00, 0x13, 0x1F, 0x01, 0x12, 0x12, 0x45, 0x10, +/* 00013C60 */ 0x12, 0x8E, 0x01, 0x05, 0x12, 0x4A, 0x12, 0x07, 0x04, 0x00, 0x59, 0x00, 0x05, 0x59, 0x01, 0x10, +/* 00013C70 */ 0x59, 0x02, 0x0C, 0x8E, 0x01, 0x06, 0x13, 0x4A, 0x13, 0x07, 0x04, 0x00, 0x59, 0x00, 0x05, 0x59, +/* 00013C80 */ 0x01, 0x0D, 0x59, 0x02, 0x09, 0x59, 0x03, 0x0A, 0x1F, 0x04, 0x13, 0x13, 0x59, 0x03, 0x13, 0x1F, +/* 00013C90 */ 0x04, 0xFF, 0x12, 0x8E, 0x03, 0x03, 0x13, 0x6C, 0x12, 0x13, 0x07, 0x07, 0x05, 0x00, 0x59, 0x00, +/* 00013CA0 */ 0x13, 0x59, 0x01, 0x10, 0x8E, 0x03, 0x24, 0x15, 0x6C, 0x14, 0x15, 0x08, 0x07, 0x02, 0x00, 0x59, +/* 00013CB0 */ 0x00, 0x15, 0x59, 0x01, 0x0E, 0x1F, 0x02, 0x14, 0x14, 0x59, 0x02, 0x14, 0x59, 0x03, 0x06, 0x59, +/* 00013CC0 */ 0x04, 0x07, 0x1F, 0x05, 0x00, 0x12, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB6, 0x02, +/* 00013CD0 */ 0x9C, 0xC4, 0xC1, 0xFE, 0x4D, 0x03, 0x69, 0x69, 0xFE, 0xFC, 0x01, 0xFE, 0x23, 0x03, 0xFF, 0x70, +/* 00013CE0 */ 0x15, 0x01, 0x00, 0x11, 0x06, 0x00, 0x00, 0x00, 0x15, 0x00, 0x4B, 0x00, 0x18, 0x00, 0x48, 0x00, +/* 00013CF0 */ 0x28, 0x00, 0x35, 0x00, 0x36, 0x00, 0x3C, 0x00, 0x06, 0x00, 0x32, 0x00, 0x05, 0x00, 0x29, 0x00, +/* 00013D00 */ 0x20, 0x00, 0xC6, 0x00, 0x0E, 0x00, 0x7C, 0x00, 0x10, 0x00, 0x96, 0x00, 0x17, 0x00, 0x2E, 0x00, +/* 00013D10 */ 0x36, 0x00, 0x76, 0x00, 0x0A, 0x00, 0x70, 0x00, 0x04, 0x00, 0x24, 0x00, 0x17, 0x00, 0x2A, 0x00, +/* 00013D20 */ 0x32, 0x00, 0x79, 0x00, 0x38, 0x00, 0x8E, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, +/* 00013D30 */ 0x00, 0xFE, 0x2B, 0x06, 0x26, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x80, 0x04, 0x5F, 0xFF, 0x90, 0x12, +/* 00013D40 */ 0x01, 0x00, 0xFF, 0x90, 0x12, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFF, 0x90, 0x12, +/* 00013D50 */ 0x01, 0x00, 0xFD, 0xFD, 0x05, 0x04, 0x07, 0x06, 0x22, 0x22, 0x03, 0x02, 0x04, 0x04, 0x04, 0x04, +/* 00013D60 */ 0x06, 0x0B, 0x0C, 0x6D, 0x8E, 0x03, 0x36, 0x08, 0x4A, 0x08, 0x6C, 0x07, 0x08, 0x00, 0x07, 0x02, +/* 00013D70 */ 0x00, 0x59, 0x00, 0x08, 0x59, 0x01, 0x05, 0x1F, 0x02, 0x07, 0x07, 0x0F, 0x1B, 0x00, 0x07, 0x8E, +/* 00013D80 */ 0x03, 0x36, 0x08, 0x4A, 0x08, 0x6C, 0x07, 0x08, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x08, 0x59, +/* 00013D90 */ 0x01, 0x05, 0x1F, 0x02, 0x07, 0x07, 0x0F, 0x12, 0x00, 0x07, 0x8E, 0x03, 0x03, 0x08, 0x6C, 0x07, +/* 00013DA0 */ 0x08, 0x02, 0x07, 0x01, 0x00, 0x59, 0x00, 0x08, 0x1F, 0x01, 0xFF, 0x07, 0x8E, 0x03, 0x03, 0x08, +/* 00013DB0 */ 0x6C, 0x07, 0x08, 0x03, 0x07, 0x05, 0x00, 0x59, 0x00, 0x08, 0x59, 0x01, 0x04, 0x59, 0x02, 0x05, +/* 00013DC0 */ 0x59, 0x03, 0x02, 0x59, 0x04, 0x03, 0x1F, 0x05, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, +/* 00013DD0 */ 0x00, 0xC4, 0xC1, 0xFE, 0xB9, 0x02, 0xFE, 0xFC, 0x01, 0xFF, 0xB0, 0x12, 0x01, 0x00, 0x04, 0x00, +/* 00013DE0 */ 0x00, 0x00, 0x00, 0x36, 0x00, 0x34, 0x00, 0x12, 0x00, 0x38, 0x00, 0x23, 0x00, 0x70, 0x00, 0x00, +/* 00013DF0 */ 0x7E, 0x5D, 0x00, 0xC1, 0x43, 0x5A, 0x0B, 0x00, 0xFE, 0xFC, 0x05, 0x22, 0xA2, 0x41, 0xC1, 0x00, +/* 00013E00 */ 0xFE, 0x2A, 0x04, 0x5A, 0xFF, 0x67, 0x0B, 0x01, 0x00, 0xFF, 0x67, 0x0B, 0x01, 0x00, 0x04, 0xFE, +/* 00013E10 */ 0x00, 0x90, 0x04, 0x04, 0xFF, 0x67, 0x0B, 0x01, 0x00, 0xFE, 0x00, 0x07, 0xFE, 0x00, 0x07, 0x02, +/* 00013E20 */ 0xFE, 0xE0, 0x01, 0xFE, 0x7F, 0x04, 0x0B, 0x0F, 0x15, 0x04, 0x68, 0x67, 0x03, 0x04, 0x06, 0x06, +/* 00013E30 */ 0x06, 0x06, 0x01, 0x12, 0x13, 0x14, 0x15, 0x07, 0x0B, 0x06, 0xFE, 0x42, 0x04, 0x06, 0xFE, 0x3F, +/* 00013E40 */ 0x04, 0x06, 0xFE, 0x33, 0x04, 0x06, 0xFE, 0x35, 0x04, 0x06, 0xFE, 0x36, 0x04, 0x06, 0xFE, 0x37, +/* 00013E50 */ 0x04, 0x05, 0xFE, 0x44, 0x04, 0x06, 0xFE, 0x38, 0x04, 0x06, 0xFE, 0x39, 0x04, 0x06, 0xFE, 0x3A, +/* 00013E60 */ 0x04, 0x06, 0xFE, 0x40, 0x04, 0xFE, 0x61, 0x01, 0x96, 0x02, 0x0F, 0x4E, 0x16, 0x96, 0x03, 0x16, +/* 00013E70 */ 0x92, 0x02, 0x16, 0xA8, 0x17, 0x14, 0x03, 0x00, 0x16, 0x17, 0x09, 0x06, 0x00, 0x45, 0x16, 0x02, +/* 00013E80 */ 0x09, 0x1B, 0x00, 0x8E, 0x03, 0x24, 0x18, 0x6C, 0x17, 0x18, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 00013E90 */ 0x18, 0x92, 0x02, 0x19, 0x59, 0x01, 0x19, 0x1F, 0x02, 0x17, 0x17, 0x46, 0x16, 0x17, 0x96, 0x02, +/* 00013EA0 */ 0x16, 0x8E, 0x03, 0x36, 0x17, 0x4A, 0x17, 0x6C, 0x16, 0x17, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 00013EB0 */ 0x17, 0x92, 0x02, 0x18, 0x59, 0x01, 0x18, 0x1F, 0x02, 0x16, 0x16, 0x96, 0x02, 0x16, 0x96, 0x03, +/* 00013EC0 */ 0x03, 0x14, 0x08, 0x00, 0x10, 0x04, 0x14, 0x03, 0x00, 0x10, 0x05, 0x09, 0x30, 0x00, 0x8E, 0x03, +/* 00013ED0 */ 0x36, 0x17, 0x4A, 0x17, 0x6C, 0x16, 0x17, 0x02, 0x07, 0x03, 0x00, 0x59, 0x00, 0x17, 0xCF, 0x18, +/* 00013EE0 */ 0x04, 0xA1, 0x00, 0x06, 0x18, 0xA1, 0x01, 0x07, 0x18, 0xA1, 0x02, 0x08, 0x18, 0xA1, 0x03, 0x09, +/* 00013EF0 */ 0x18, 0x59, 0x01, 0x18, 0xD6, 0x00, 0x18, 0x59, 0x02, 0x18, 0x1F, 0x03, 0xFF, 0x16, 0x14, 0x08, +/* 00013F00 */ 0x00, 0x10, 0x0A, 0x14, 0x03, 0x00, 0x10, 0x05, 0x09, 0x2C, 0x00, 0x8E, 0x03, 0x36, 0x17, 0x4A, +/* 00013F10 */ 0x17, 0x6C, 0x16, 0x17, 0x03, 0x07, 0x03, 0x00, 0x59, 0x00, 0x17, 0xCF, 0x18, 0x03, 0xA1, 0x00, +/* 00013F20 */ 0x0B, 0x18, 0xA1, 0x01, 0x0C, 0x18, 0xA1, 0x02, 0x0D, 0x18, 0x59, 0x01, 0x18, 0xD6, 0x01, 0x18, +/* 00013F30 */ 0x59, 0x02, 0x18, 0x1F, 0x03, 0xFF, 0x16, 0x92, 0x03, 0x16, 0x14, 0x03, 0x00, 0x16, 0x03, 0x09, +/* 00013F40 */ 0x39, 0x00, 0x14, 0x08, 0x00, 0x11, 0x04, 0x14, 0x03, 0x00, 0x11, 0x0E, 0x09, 0x2C, 0x00, 0x8E, +/* 00013F50 */ 0x03, 0x36, 0x17, 0x4A, 0x17, 0x6C, 0x16, 0x17, 0x04, 0x07, 0x03, 0x00, 0x59, 0x00, 0x17, 0xCF, +/* 00013F60 */ 0x18, 0x03, 0xA1, 0x00, 0x07, 0x18, 0xA1, 0x01, 0x08, 0x18, 0xA1, 0x02, 0x09, 0x18, 0x59, 0x01, +/* 00013F70 */ 0x18, 0xD6, 0x02, 0x18, 0x59, 0x02, 0x18, 0x1F, 0x03, 0xFF, 0x16, 0x92, 0x03, 0x16, 0x14, 0x03, +/* 00013F80 */ 0x00, 0x16, 0x03, 0x09, 0x39, 0x00, 0x14, 0x08, 0x00, 0x11, 0x0A, 0x14, 0x03, 0x00, 0x11, 0x0E, +/* 00013F90 */ 0x09, 0x2C, 0x00, 0x8E, 0x03, 0x36, 0x17, 0x4A, 0x17, 0x6C, 0x16, 0x17, 0x05, 0x07, 0x03, 0x00, +/* 00013FA0 */ 0x59, 0x00, 0x17, 0xCF, 0x18, 0x03, 0xA1, 0x00, 0x0B, 0x18, 0xA1, 0x01, 0x0C, 0x18, 0xA1, 0x02, +/* 00013FB0 */ 0x0D, 0x18, 0x59, 0x01, 0x18, 0xD6, 0x03, 0x18, 0x59, 0x02, 0x18, 0x1F, 0x03, 0xFF, 0x16, 0x92, +/* 00013FC0 */ 0x02, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x21, 0x03, 0x69, 0x93, 0x93, 0x93, +/* 00013FD0 */ 0x93, 0xFF, 0x9C, 0x0B, 0x01, 0x00, 0x0D, 0x08, 0x00, 0x00, 0x00, 0x31, 0x00, 0x51, 0x00, 0x1D, +/* 00013FE0 */ 0x00, 0x29, 0x00, 0x03, 0x00, 0x25, 0x00, 0x0D, 0x00, 0x41, 0x00, 0x30, 0x00, 0x14, 0x01, 0x0D, +/* 00013FF0 */ 0x00, 0x41, 0x00, 0x2C, 0x00, 0x0D, 0x01, 0x18, 0x00, 0x5C, 0x00, 0x2C, 0x00, 0x5A, 0x01, 0x18, +/* 00014000 */ 0x00, 0x5C, 0x00, 0x2C, 0x00, 0x5E, 0x01, 0x08, 0x00, 0x18, 0x00, 0x00, 0x26, 0x42, 0x01, 0x00, +/* 00014010 */ 0xBC, 0x41, 0x01, 0x00, 0xEC, 0x40, 0x01, 0x00, 0x1C, 0x40, 0x01, 0x00, 0x7F, 0x5C, 0x00, 0xC1, +/* 00014020 */ 0x13, 0x10, 0x43, 0x00, 0xFE, 0x1E, 0x06, 0x38, 0xA2, 0x41, 0xD1, 0x00, 0x5E, 0xFF, 0x18, 0x11, +/* 00014030 */ 0x01, 0x00, 0xFF, 0x18, 0x11, 0x01, 0x00, 0x41, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0x18, 0x11, +/* 00014040 */ 0x01, 0x00, 0xFE, 0x19, 0x01, 0xFE, 0x19, 0x01, 0x05, 0x09, 0x0B, 0x05, 0x12, 0x12, 0x04, 0x02, +/* 00014050 */ 0x05, 0x05, 0x05, 0x05, 0x01, 0x0A, 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, 0xF8, 0x03, 0x06, 0xFE, +/* 00014060 */ 0x2B, 0x03, 0x0B, 0x06, 0xFE, 0x2C, 0x03, 0x06, 0xFE, 0x2D, 0x03, 0x07, 0x42, 0x8E, 0x04, 0x36, +/* 00014070 */ 0x0C, 0x4A, 0x0C, 0x6C, 0x0B, 0x0C, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x0C, 0x8E, 0x01, 0x02, +/* 00014080 */ 0x0D, 0x59, 0x01, 0x0D, 0x59, 0x02, 0x09, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00014090 */ 0x0D, 0x00, 0x00, 0x00, 0x7A, 0x03, 0x0D, 0x01, 0x7A, 0x05, 0x0D, 0x02, 0x7A, 0x05, 0x0D, 0x03, +/* 000140A0 */ 0x7A, 0x05, 0x0D, 0x04, 0x59, 0x03, 0x0D, 0x1F, 0x04, 0xFF, 0x0B, 0xA8, 0x00, 0x24, 0x00, 0x01, +/* 000140B0 */ 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, +/* 000140C0 */ 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0xFE, 0x9C, +/* 000140D0 */ 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFF, 0x3E, 0x11, +/* 000140E0 */ 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0xF2, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, +/* 000140F0 */ 0x13, 0x10, 0x43, 0x00, 0xFE, 0x13, 0x06, 0x34, 0xA2, 0x41, 0xD1, 0x00, 0x5D, 0xFF, 0x5E, 0x0F, +/* 00014100 */ 0x01, 0x00, 0xFF, 0x5E, 0x0F, 0x01, 0x00, 0x41, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0x5E, 0x0F, +/* 00014110 */ 0x01, 0x00, 0xFE, 0x19, 0x01, 0xFE, 0x19, 0x01, 0x05, 0x09, 0x0B, 0x05, 0x12, 0x12, 0x04, 0x02, +/* 00014120 */ 0x05, 0x05, 0x05, 0x05, 0x01, 0x0A, 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, 0xF8, 0x03, 0x06, 0xFE, +/* 00014130 */ 0x2B, 0x03, 0x0B, 0x06, 0xFE, 0x2C, 0x03, 0x06, 0xFE, 0x2D, 0x03, 0x07, 0x42, 0x8E, 0x04, 0x36, +/* 00014140 */ 0x0C, 0x4A, 0x0C, 0x6C, 0x0B, 0x0C, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x0C, 0x8E, 0x01, 0x02, +/* 00014150 */ 0x0D, 0x59, 0x01, 0x0D, 0x59, 0x02, 0x09, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00014160 */ 0x0D, 0x00, 0x00, 0x00, 0x7A, 0x03, 0x0D, 0x01, 0x7A, 0x05, 0x0D, 0x02, 0x7A, 0x05, 0x0D, 0x03, +/* 00014170 */ 0x7A, 0x05, 0x0D, 0x04, 0x59, 0x03, 0x0D, 0x1F, 0x04, 0xFF, 0x0B, 0xA8, 0x00, 0x24, 0x00, 0x01, +/* 00014180 */ 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, +/* 00014190 */ 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0xFE, 0x9C, +/* 000141A0 */ 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFF, 0x84, 0x0F, +/* 000141B0 */ 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0xF2, 0x00, 0x00, 0x7F, 0x4C, 0x00, 0x01, +/* 000141C0 */ 0x00, 0x10, 0x03, 0x00, 0xFE, 0x0A, 0x06, 0x38, 0xA2, 0x41, 0xD1, 0x00, 0x5C, 0xFF, 0xF9, 0x0D, +/* 000141D0 */ 0x01, 0x00, 0xFF, 0xF9, 0x0D, 0x01, 0x00, 0x41, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0xF9, 0x0D, +/* 000141E0 */ 0x01, 0x00, 0xC7, 0xC7, 0x04, 0x03, 0x06, 0x0B, 0x0A, 0x04, 0x01, 0x05, 0x0C, 0x21, 0x4E, 0x04, +/* 000141F0 */ 0x8E, 0x01, 0x02, 0x06, 0x97, 0x06, 0x06, 0x03, 0x45, 0x04, 0x06, 0xA8, 0x06, 0x15, 0x03, 0x00, +/* 00014200 */ 0x04, 0x06, 0x09, 0x06, 0x00, 0x01, 0x43, 0x01, 0x01, 0x03, 0x02, 0xA8, 0x00, 0x24, 0x00, 0xFF, +/* 00014210 */ 0x1F, 0x0E, 0x01, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x31, 0x00, 0x0A, 0x00, 0x33, +/* 00014220 */ 0x00, 0x08, 0x00, 0x3C, 0x00, 0x00, 0x7F, 0x4C, 0x00, 0x01, 0x00, 0x10, 0x03, 0x00, 0xFE, 0x01, +/* 00014230 */ 0x06, 0x3F, 0xA2, 0x41, 0xD1, 0x00, 0x5B, 0xFF, 0xAB, 0x0C, 0x01, 0x00, 0xFF, 0xAB, 0x0C, 0x01, +/* 00014240 */ 0x00, 0x41, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0xAB, 0x0C, 0x01, 0x00, 0xC7, 0xC7, 0x04, 0x03, +/* 00014250 */ 0x06, 0x0B, 0x0A, 0x04, 0x01, 0x05, 0x0C, 0x21, 0x4E, 0x04, 0x8E, 0x01, 0x02, 0x06, 0x97, 0x06, +/* 00014260 */ 0x06, 0x03, 0x45, 0x04, 0x06, 0xA8, 0x06, 0x15, 0x03, 0x00, 0x04, 0x06, 0x09, 0x06, 0x00, 0x01, +/* 00014270 */ 0x43, 0x01, 0x01, 0x03, 0x02, 0xA8, 0x00, 0x24, 0x00, 0xFF, 0xD1, 0x0C, 0x01, 0x00, 0x04, 0x02, +/* 00014280 */ 0x00, 0x00, 0x00, 0x0B, 0x00, 0x31, 0x00, 0x0A, 0x00, 0x33, 0x00, 0x08, 0x00, 0x3C, 0x00, 0x00, +/* 00014290 */ 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0xBD, 0x05, 0x29, 0xA2, 0x41, 0xC1, 0x00, +/* 000142A0 */ 0xFE, 0x29, 0x04, 0x59, 0xFE, 0x1C, 0xFF, 0xFE, 0x1C, 0xFF, 0x01, 0xFE, 0x00, 0x90, 0x04, 0x04, +/* 000142B0 */ 0xFE, 0x1C, 0xFF, 0xFE, 0xD9, 0x09, 0xFE, 0xD9, 0x09, 0x0F, 0x1D, 0x29, 0x07, 0xB4, 0xA4, 0x03, +/* 000142C0 */ 0x08, 0x14, 0x14, 0x14, 0x14, 0x28, 0x08, 0x06, 0xFE, 0x3F, 0x04, 0x06, 0xFE, 0x42, 0x04, 0x06, +/* 000142D0 */ 0xFE, 0xE0, 0x03, 0x06, 0xFE, 0xA3, 0x03, 0x05, 0xFE, 0x9C, 0x03, 0x05, 0xFE, 0xDF, 0x03, 0x06, +/* 000142E0 */ 0xFE, 0x55, 0x04, 0x06, 0xFE, 0xA2, 0x03, 0x06, 0xFE, 0x73, 0x04, 0x06, 0xFE, 0x6F, 0x04, 0x06, +/* 000142F0 */ 0xFE, 0x6D, 0x04, 0x06, 0xFE, 0x6E, 0x04, 0x06, 0xFE, 0x70, 0x04, 0x07, 0x06, 0xFE, 0x17, 0x04, +/* 00014300 */ 0x06, 0xFE, 0x74, 0x04, 0x06, 0xFE, 0x75, 0x04, 0x05, 0xFE, 0x76, 0x04, 0x06, 0xFE, 0x77, 0x04, +/* 00014310 */ 0x05, 0xFE, 0x78, 0x04, 0x05, 0xFE, 0x79, 0x04, 0x05, 0xFE, 0x7A, 0x04, 0x06, 0xFE, 0x7B, 0x04, +/* 00014320 */ 0x05, 0xFE, 0x7C, 0x04, 0x05, 0xFE, 0x7D, 0x04, 0x0B, 0xFE, 0x46, 0x02, 0x4E, 0x20, 0x4E, 0x21, +/* 00014330 */ 0x4E, 0x22, 0x4E, 0x23, 0x4E, 0x24, 0x4E, 0x25, 0x4E, 0x26, 0x4E, 0x27, 0x8E, 0x02, 0x12, 0x29, +/* 00014340 */ 0x4A, 0x29, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x1E, 0x1F, 0x02, 0x29, 0x29, 0x45, +/* 00014350 */ 0x20, 0x29, 0x8E, 0x01, 0x06, 0x29, 0x4A, 0x29, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, +/* 00014360 */ 0x1F, 0x59, 0x02, 0x03, 0x59, 0x03, 0x04, 0x1F, 0x04, 0x29, 0x29, 0x45, 0x1F, 0x29, 0x8E, 0x03, +/* 00014370 */ 0x36, 0x2A, 0x4A, 0x2A, 0x6C, 0x29, 0x2A, 0x00, 0x07, 0x01, 0x00, 0x59, 0x00, 0x2A, 0x1F, 0x01, +/* 00014380 */ 0x29, 0x29, 0x45, 0x21, 0x29, 0x45, 0x29, 0x21, 0x8E, 0x02, 0x02, 0x2A, 0x4A, 0x2A, 0x07, 0x06, +/* 00014390 */ 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x1F, 0x59, 0x02, 0x05, 0x59, 0x03, 0x06, 0xCF, 0x2B, 0x02, +/* 000143A0 */ 0xA1, 0x00, 0x07, 0x2B, 0xA1, 0x01, 0x08, 0x2B, 0x59, 0x04, 0x2B, 0x59, 0x05, 0x08, 0x1F, 0x06, +/* 000143B0 */ 0x2A, 0x2A, 0x76, 0x2A, 0x29, 0x01, 0x8E, 0x02, 0x02, 0x29, 0x4A, 0x29, 0x07, 0x06, 0x00, 0x59, +/* 000143C0 */ 0x00, 0x02, 0x59, 0x01, 0x1F, 0x59, 0x02, 0x09, 0x59, 0x03, 0x0A, 0xA8, 0x2A, 0x59, 0x04, 0x2A, +/* 000143D0 */ 0xA8, 0x2A, 0x59, 0x05, 0x2A, 0x1F, 0x06, 0x29, 0x29, 0x45, 0x22, 0x29, 0x8E, 0x02, 0x02, 0x29, +/* 000143E0 */ 0x4A, 0x29, 0x07, 0x06, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x1F, 0x59, 0x02, 0x0B, 0x59, 0x03, +/* 000143F0 */ 0x06, 0xCF, 0x2A, 0x04, 0xA1, 0x00, 0x0C, 0x2A, 0xA1, 0x01, 0x0D, 0x2A, 0xA1, 0x02, 0x0E, 0x2A, +/* 00014400 */ 0xA1, 0x03, 0x0F, 0x2A, 0x59, 0x04, 0x2A, 0xA8, 0x2A, 0x59, 0x05, 0x2A, 0x1F, 0x06, 0x29, 0x29, +/* 00014410 */ 0x45, 0x23, 0x29, 0xA8, 0x29, 0x15, 0x03, 0x00, 0x22, 0x29, 0x09, 0x03, 0x00, 0x45, 0x23, 0x10, +/* 00014420 */ 0x76, 0x23, 0x21, 0x02, 0x8E, 0x02, 0x0C, 0x29, 0x4A, 0x29, 0x07, 0x05, 0x00, 0x59, 0x00, 0x02, +/* 00014430 */ 0x8E, 0x03, 0x03, 0x2A, 0x5E, 0x2A, 0x2A, 0x03, 0x59, 0x01, 0x2A, 0x59, 0x02, 0x20, 0x59, 0x03, +/* 00014440 */ 0x21, 0xCF, 0x2A, 0x03, 0xA1, 0x00, 0x11, 0x2A, 0xA1, 0x01, 0x12, 0x2A, 0xA1, 0x02, 0x13, 0x2A, +/* 00014450 */ 0x59, 0x04, 0x2A, 0x1F, 0x05, 0x29, 0x29, 0x45, 0x24, 0x29, 0x5E, 0x29, 0x24, 0x04, 0x76, 0x29, +/* 00014460 */ 0x1D, 0x05, 0x5E, 0x29, 0x24, 0x06, 0x76, 0x29, 0x1D, 0x07, 0x5E, 0x29, 0x24, 0x08, 0x76, 0x29, +/* 00014470 */ 0x1D, 0x09, 0x5E, 0x29, 0x24, 0x0A, 0x76, 0x29, 0x1D, 0x0B, 0x5E, 0x29, 0x24, 0x0C, 0x45, 0x25, +/* 00014480 */ 0x29, 0x5E, 0x29, 0x1F, 0x0D, 0x45, 0x26, 0x29, 0xA8, 0x29, 0x14, 0x03, 0x00, 0x26, 0x29, 0x09, +/* 00014490 */ 0x18, 0x00, 0x8E, 0x03, 0x03, 0x2A, 0x6C, 0x29, 0x2A, 0x0E, 0x07, 0x01, 0x00, 0x59, 0x00, 0x2A, +/* 000144A0 */ 0x1F, 0x01, 0x29, 0x29, 0x45, 0x26, 0x29, 0x09, 0x18, 0x00, 0x8E, 0x03, 0x24, 0x2A, 0x6C, 0x29, +/* 000144B0 */ 0x2A, 0x0F, 0x07, 0x02, 0x00, 0x59, 0x00, 0x2A, 0x59, 0x01, 0x26, 0x1F, 0x02, 0x29, 0x29, 0x45, +/* 000144C0 */ 0x26, 0x29, 0x8E, 0x03, 0x03, 0x2A, 0x6C, 0x29, 0x2A, 0x10, 0x07, 0x02, 0x00, 0x59, 0x00, 0x2A, +/* 000144D0 */ 0x59, 0x01, 0x26, 0x1F, 0x02, 0x29, 0x29, 0x45, 0x27, 0x29, 0xA8, 0x29, 0x14, 0x08, 0x00, 0x27, +/* 000144E0 */ 0x29, 0x14, 0x03, 0x00, 0x27, 0x14, 0x09, 0x1E, 0x00, 0x8E, 0x03, 0x03, 0x2A, 0x6C, 0x29, 0x2A, +/* 000144F0 */ 0x11, 0x07, 0x04, 0x00, 0x59, 0x00, 0x2A, 0x59, 0x01, 0x26, 0x59, 0x02, 0x15, 0x59, 0x03, 0x16, +/* 00014500 */ 0x1F, 0x04, 0xFF, 0x29, 0x09, 0x16, 0x00, 0x14, 0x08, 0x00, 0x27, 0x17, 0x14, 0x03, 0x00, 0x27, +/* 00014510 */ 0x18, 0x09, 0x06, 0x00, 0x45, 0x26, 0x19, 0x09, 0x03, 0x00, 0x45, 0x26, 0x27, 0x76, 0x26, 0x1D, +/* 00014520 */ 0x12, 0x8E, 0x02, 0x02, 0x29, 0x4A, 0x29, 0x07, 0x06, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x1F, +/* 00014530 */ 0x59, 0x02, 0x1A, 0x59, 0x03, 0x06, 0xCF, 0x2A, 0x02, 0xA1, 0x00, 0x1B, 0x2A, 0xA1, 0x01, 0x08, +/* 00014540 */ 0x2A, 0x59, 0x04, 0x2A, 0x59, 0x05, 0x08, 0x1F, 0x06, 0xFF, 0x29, 0x8E, 0x01, 0x04, 0x29, 0x4A, +/* 00014550 */ 0x29, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x1D, 0x59, 0x02, 0x1F, 0x59, 0x03, 0x22, +/* 00014560 */ 0x1F, 0x04, 0xFF, 0x29, 0x76, 0x1C, 0x1D, 0x13, 0x45, 0x00, 0x1D, 0x09, 0x02, 0x00, 0xA8, 0x00, +/* 00014570 */ 0x24, 0x00, 0x69, 0xFE, 0x0E, 0x02, 0xFE, 0x1B, 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0x0D, 0x02, 0xFE, +/* 00014580 */ 0x0D, 0x02, 0xFE, 0x1A, 0x02, 0xFE, 0x6B, 0x02, 0xFE, 0x1B, 0x02, 0xFE, 0x73, 0x04, 0xFE, 0x19, +/* 00014590 */ 0x02, 0xFE, 0x49, 0x02, 0xFE, 0x9D, 0x03, 0xFE, 0x74, 0x02, 0xFE, 0xFE, 0x01, 0xFE, 0x22, 0x03, +/* 000145A0 */ 0xFE, 0xFD, 0x01, 0xFE, 0xAC, 0x02, 0xFE, 0x74, 0x02, 0xFE, 0x7E, 0x04, 0xFE, 0x56, 0xFF, 0x1F, +/* 000145B0 */ 0x10, 0x00, 0x00, 0x00, 0x16, 0x00, 0x46, 0x00, 0x1C, 0x00, 0x42, 0x00, 0x17, 0x00, 0x24, 0x00, +/* 000145C0 */ 0x31, 0x00, 0x30, 0x01, 0x26, 0x00, 0x5A, 0x00, 0x37, 0x00, 0x70, 0x00, 0x0A, 0x00, 0x2C, 0x00, +/* 000145D0 */ 0x03, 0x00, 0x2C, 0x00, 0x04, 0x00, 0x21, 0x00, 0x36, 0x00, 0x6F, 0x00, 0x08, 0x00, 0x2E, 0x00, +/* 000145E0 */ 0x08, 0x00, 0x2C, 0x00, 0x08, 0x00, 0x2D, 0x00, 0x08, 0x00, 0x34, 0x00, 0x07, 0x00, 0x37, 0x00, +/* 000145F0 */ 0x07, 0x00, 0x27, 0x00, 0x0A, 0x00, 0x28, 0x00, 0x18, 0x00, 0x49, 0x00, 0x18, 0x00, 0xEF, 0x00, +/* 00014600 */ 0x18, 0x00, 0x4E, 0x00, 0x0F, 0x00, 0x52, 0x00, 0x1E, 0x00, 0x74, 0x00, 0x0D, 0x00, 0x4E, 0x00, +/* 00014610 */ 0x06, 0x00, 0x31, 0x00, 0x03, 0x00, 0x2D, 0x00, 0x04, 0x00, 0x64, 0x00, 0x2A, 0x00, 0xD3, 0x00, +/* 00014620 */ 0x19, 0x00, 0x43, 0x00, 0x04, 0x00, 0x3E, 0x00, 0x08, 0x00, 0x1F, 0x00, 0x00, 0x7E, 0x4D, 0x00, +/* 00014630 */ 0xC0, 0x13, 0x1A, 0x4B, 0x00, 0xFE, 0x15, 0x05, 0x26, 0xA0, 0x41, 0xD1, 0x00, 0x55, 0xFE, 0xD5, +/* 00014640 */ 0xDE, 0xFE, 0xD5, 0xDE, 0x01, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFE, 0xD5, 0xDE, 0xFE, 0x58, 0x1E, +/* 00014650 */ 0xFE, 0x58, 0x1E, 0x06, 0xFE, 0x49, 0x04, 0xFE, 0x4A, 0x04, 0xFE, 0x4B, 0x04, 0xFE, 0x4C, 0x04, +/* 00014660 */ 0xFE, 0x4D, 0x04, 0xFE, 0x4E, 0x04, 0x04, 0x39, 0x3C, 0x51, 0x51, 0x03, 0x34, 0x34, 0x34, 0x34, +/* 00014670 */ 0x05, 0x39, 0x3A, 0x3B, 0x06, 0xFE, 0x33, 0x04, 0x06, 0xFE, 0x4F, 0x04, 0x06, 0xFE, 0x34, 0x04, +/* 00014680 */ 0x06, 0xFE, 0x50, 0x04, 0x06, 0xFE, 0x35, 0x04, 0x06, 0xFE, 0x51, 0x04, 0x06, 0xFE, 0x36, 0x04, +/* 00014690 */ 0x06, 0xFE, 0x52, 0x04, 0x06, 0xFE, 0x37, 0x04, 0x06, 0xFE, 0x53, 0x04, 0x06, 0xFE, 0x38, 0x04, +/* 000146A0 */ 0x06, 0xFE, 0x54, 0x04, 0x06, 0xFE, 0x55, 0x04, 0x06, 0xFE, 0x56, 0x04, 0x06, 0xFE, 0x57, 0x04, +/* 000146B0 */ 0x06, 0xFE, 0x58, 0x04, 0x06, 0xFE, 0x39, 0x04, 0x06, 0xFE, 0x59, 0x04, 0x06, 0xFE, 0x3A, 0x04, +/* 000146C0 */ 0x06, 0xFE, 0x5A, 0x04, 0x06, 0xFE, 0x3B, 0x04, 0x06, 0xFE, 0x5B, 0x04, 0x07, 0x06, 0xFE, 0x5C, +/* 000146D0 */ 0x04, 0x06, 0xFE, 0x5D, 0x04, 0x06, 0xFE, 0xD0, 0x03, 0x06, 0xFE, 0x5E, 0x04, 0x06, 0xFE, 0x5F, +/* 000146E0 */ 0x04, 0x06, 0xFE, 0x60, 0x04, 0x06, 0xFE, 0x61, 0x04, 0x06, 0xFE, 0x62, 0x04, 0x06, 0xFE, 0x63, +/* 000146F0 */ 0x04, 0x06, 0xFE, 0x64, 0x04, 0x06, 0xFE, 0x65, 0x04, 0x06, 0xFE, 0x66, 0x04, 0x06, 0xFE, 0x67, +/* 00014700 */ 0x04, 0x06, 0xFE, 0xF8, 0x03, 0x01, 0x01, 0x06, 0xFE, 0x32, 0x04, 0x01, 0x02, 0x06, 0xFE, 0x30, +/* 00014710 */ 0x04, 0x01, 0x03, 0x06, 0xFE, 0x31, 0x04, 0x01, 0x04, 0x06, 0xFE, 0x2F, 0x04, 0x01, 0x05, 0x06, +/* 00014720 */ 0xFE, 0x68, 0x04, 0x06, 0xFE, 0x69, 0x04, 0x06, 0xFE, 0x6A, 0x04, 0x06, 0xFE, 0x6B, 0x04, 0x06, +/* 00014730 */ 0xFE, 0x6C, 0x04, 0x06, 0xFE, 0x6D, 0x04, 0x06, 0xFE, 0x6E, 0x04, 0x06, 0xFE, 0x6F, 0x04, 0x06, +/* 00014740 */ 0xFE, 0x70, 0x04, 0xFE, 0x4D, 0x01, 0x4E, 0x3C, 0x96, 0x02, 0x3C, 0x4E, 0x3C, 0x96, 0x03, 0x3C, +/* 00014750 */ 0x4E, 0x3C, 0x96, 0x04, 0x3C, 0x4E, 0x3C, 0x96, 0x05, 0x3C, 0x4E, 0x3C, 0x96, 0x06, 0x3C, 0x4E, +/* 00014760 */ 0x3C, 0x96, 0x07, 0x3C, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, +/* 00014770 */ 0x00, 0x7A, 0x03, 0x3C, 0x00, 0x7A, 0x05, 0x3C, 0x01, 0x7A, 0x07, 0x3C, 0x02, 0x7A, 0x09, 0x3C, +/* 00014780 */ 0x03, 0x7A, 0x0B, 0x3C, 0x04, 0x7A, 0x0D, 0x3C, 0x05, 0x7A, 0x0F, 0x3C, 0x06, 0x7A, 0x11, 0x3C, +/* 00014790 */ 0x07, 0x7A, 0x13, 0x3C, 0x08, 0x7A, 0x15, 0x3C, 0x09, 0x7A, 0x17, 0x3C, 0x0A, 0x96, 0x02, 0x3C, +/* 000147A0 */ 0xCE, 0x34, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x7A, 0x02, 0x3C, +/* 000147B0 */ 0x0B, 0x7A, 0x02, 0x3C, 0x0C, 0x7A, 0x02, 0x3C, 0x0D, 0x7A, 0x04, 0x3C, 0x0E, 0x7A, 0x06, 0x3C, +/* 000147C0 */ 0x0F, 0x7A, 0x06, 0x3C, 0x10, 0x7A, 0x06, 0x3C, 0x11, 0x7A, 0x08, 0x3C, 0x12, 0x7A, 0x08, 0x3C, +/* 000147D0 */ 0x13, 0x7A, 0x0A, 0x3C, 0x14, 0x7A, 0x0C, 0x3C, 0x15, 0x7A, 0x0C, 0x3C, 0x16, 0x7A, 0x0C, 0x3C, +/* 000147E0 */ 0x17, 0x7A, 0x0C, 0x3C, 0x18, 0x7A, 0x12, 0x3C, 0x19, 0x7A, 0x14, 0x3C, 0x1A, 0x7A, 0x16, 0x3C, +/* 000147F0 */ 0x1B, 0x7A, 0x16, 0x3C, 0x1C, 0x7A, 0x16, 0x3C, 0x1D, 0x7A, 0x16, 0x3C, 0x1E, 0x7A, 0x16, 0x3C, +/* 00014800 */ 0x1F, 0x7A, 0x16, 0x3C, 0x20, 0x7A, 0x16, 0x3C, 0x21, 0x96, 0x03, 0x3C, 0xCE, 0x98, 0x00, 0x00, +/* 00014810 */ 0x00, 0x02, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x7A, 0x27, 0x3C, 0x22, 0x7A, 0x29, 0x3C, +/* 00014820 */ 0x23, 0x7A, 0x2B, 0x3C, 0x24, 0x7A, 0x2D, 0x3C, 0x25, 0x7A, 0x2F, 0x3C, 0x26, 0x96, 0x04, 0x3C, +/* 00014830 */ 0xCD, 0x3C, 0x7A, 0x26, 0x3C, 0x27, 0x7A, 0x28, 0x3C, 0x28, 0x7A, 0x2A, 0x3C, 0x29, 0x7A, 0x2C, +/* 00014840 */ 0x3C, 0x2A, 0x7A, 0x2E, 0x3C, 0x2B, 0x96, 0x05, 0x3C, 0xCE, 0xB4, 0x00, 0x00, 0x00, 0x03, 0x00, +/* 00014850 */ 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x7A, 0x0F, 0x3C, 0x2C, 0x7A, 0x11, 0x3C, 0x2D, 0x7A, 0x1E, +/* 00014860 */ 0x3C, 0x2E, 0x7A, 0x1F, 0x3C, 0x2F, 0x96, 0x06, 0x3C, 0xCE, 0xCC, 0x00, 0x00, 0x00, 0x04, 0x00, +/* 00014870 */ 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x7A, 0x35, 0x3C, 0x30, 0x7A, 0x36, 0x3C, 0x31, 0x7A, 0x37, +/* 00014880 */ 0x3C, 0x32, 0x7A, 0x38, 0x3C, 0x33, 0x96, 0x07, 0x3C, 0xD6, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, +/* 00014890 */ 0x00, 0x24, 0x00, 0x05, 0xE4, 0x00, 0xCC, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, +/* 000148A0 */ 0x00, 0x00, 0x56, 0x04, 0x00, 0x00, 0x58, 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x61, 0x04, +/* 000148B0 */ 0x00, 0x00, 0xB4, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6D, 0x04, +/* 000148C0 */ 0x00, 0x00, 0x6E, 0x04, 0x00, 0x00, 0x6F, 0x04, 0x00, 0x00, 0x70, 0x04, 0x00, 0x00, 0x98, 0x00, +/* 000148D0 */ 0x00, 0x00, 0x03, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x02, 0x00, 0x00, 0x32, 0x04, +/* 000148E0 */ 0x00, 0x00, 0x30, 0x04, 0x00, 0x00, 0x31, 0x04, 0x00, 0x00, 0x2F, 0x04, 0x00, 0x00, 0x34, 0x00, +/* 000148F0 */ 0x00, 0x00, 0x03, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x5C, 0x04, +/* 00014900 */ 0x00, 0x00, 0x5D, 0x04, 0x00, 0x00, 0x50, 0x04, 0x00, 0x00, 0x51, 0x04, 0x00, 0x00, 0xD0, 0x03, +/* 00014910 */ 0x00, 0x00, 0x5E, 0x04, 0x00, 0x00, 0x52, 0x04, 0x00, 0x00, 0x5F, 0x04, 0x00, 0x00, 0x53, 0x04, +/* 00014920 */ 0x00, 0x00, 0x56, 0x04, 0x00, 0x00, 0x58, 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x61, 0x04, +/* 00014930 */ 0x00, 0x00, 0x59, 0x04, 0x00, 0x00, 0x5A, 0x04, 0x00, 0x00, 0x5B, 0x04, 0x00, 0x00, 0x62, 0x04, +/* 00014940 */ 0x00, 0x00, 0x63, 0x04, 0x00, 0x00, 0x64, 0x04, 0x00, 0x00, 0x65, 0x04, 0x00, 0x00, 0x66, 0x04, +/* 00014950 */ 0x00, 0x00, 0x67, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0B, 0x00, 0x00, 0x00, 0x00, +/* 00014960 */ 0x00, 0x00, 0x76, 0x02, 0x00, 0x00, 0x6D, 0x02, 0x00, 0x00, 0x77, 0x02, 0x00, 0x00, 0x71, 0x02, +/* 00014970 */ 0x00, 0x00, 0x6C, 0x02, 0x00, 0x00, 0x6E, 0x02, 0x00, 0x00, 0x6F, 0x02, 0x00, 0x00, 0x57, 0x04, +/* 00014980 */ 0x00, 0x00, 0x70, 0x02, 0x00, 0x00, 0x73, 0x02, 0x00, 0x00, 0x75, 0x02, 0x00, 0x00, 0xFE, 0x76, +/* 00014990 */ 0x02, 0xFE, 0x6D, 0x02, 0xFE, 0x77, 0x02, 0xFE, 0x71, 0x02, 0xFE, 0x6C, 0x02, 0xFE, 0x6E, 0x02, +/* 000149A0 */ 0xFE, 0x6F, 0x02, 0xFE, 0x57, 0x04, 0xFE, 0x70, 0x02, 0xFE, 0x73, 0x02, 0xFE, 0x75, 0x02, 0x75, +/* 000149B0 */ 0xFE, 0x5C, 0x04, 0xFE, 0x5D, 0x04, 0xFE, 0x50, 0x04, 0xFE, 0x51, 0x04, 0xFE, 0xD0, 0x03, 0xFE, +/* 000149C0 */ 0x5E, 0x04, 0xFE, 0x52, 0x04, 0xFE, 0x5F, 0x04, 0xFE, 0x53, 0x04, 0xFE, 0x56, 0x04, 0xFE, 0x58, +/* 000149D0 */ 0x04, 0xFE, 0x60, 0x04, 0xFE, 0x61, 0x04, 0xFE, 0x59, 0x04, 0xFE, 0x5A, 0x04, 0xFE, 0x5B, 0x04, +/* 000149E0 */ 0xFE, 0x62, 0x04, 0xFE, 0x63, 0x04, 0xFE, 0x64, 0x04, 0xFE, 0x65, 0x04, 0xFE, 0x66, 0x04, 0xFE, +/* 000149F0 */ 0x67, 0x04, 0xFE, 0x51, 0x02, 0xFE, 0x32, 0x04, 0xFE, 0x30, 0x04, 0xFE, 0x31, 0x04, 0xFE, 0x2F, +/* 00014A00 */ 0x04, 0xFE, 0x68, 0x04, 0xFE, 0x69, 0x04, 0xFE, 0x6A, 0x04, 0xFE, 0x6B, 0x04, 0xFE, 0x6C, 0x04, +/* 00014A10 */ 0xFE, 0x6D, 0x04, 0xFE, 0x6E, 0x04, 0xFE, 0x6F, 0x04, 0xFE, 0x70, 0x04, 0xFE, 0x56, 0x04, 0xFE, +/* 00014A20 */ 0x58, 0x04, 0xFE, 0x60, 0x04, 0xFE, 0x61, 0x04, 0xFE, 0x6E, 0xDF, 0x08, 0x1E, 0x00, 0x00, 0x00, +/* 00014A30 */ 0x3C, 0x00, 0x10, 0x02, 0x6C, 0x00, 0xDC, 0x02, 0x24, 0x00, 0xC3, 0x00, 0x19, 0x00, 0x00, 0x01, +/* 00014A40 */ 0x20, 0x00, 0xA1, 0x00, 0x20, 0x00, 0x09, 0x01, 0x08, 0x00, 0x65, 0x15, 0x00, 0x51, 0x4A, 0x01, +/* 00014A50 */ 0x00, 0x7F, 0x7D, 0x00, 0xC3, 0x43, 0x5A, 0x1B, 0x00, 0xFE, 0x50, 0x05, 0x13, 0xA2, 0x41, 0xD1, +/* 00014A60 */ 0x00, 0x56, 0xFE, 0xCE, 0xE7, 0xFE, 0xCE, 0xE7, 0x02, 0x40, 0xFE, 0x00, 0x90, 0x04, 0x04, 0xFE, +/* 00014A70 */ 0xCE, 0xE7, 0xFE, 0x54, 0x15, 0xFE, 0x54, 0x15, 0x04, 0xFE, 0xE0, 0x01, 0xFE, 0x6F, 0x02, 0xFE, +/* 00014A80 */ 0x10, 0x02, 0xFE, 0x1B, 0x02, 0x17, 0x0E, 0x1E, 0x08, 0xBE, 0xAE, 0x77, 0x04, 0x0A, 0x02, 0x0F, +/* 00014A90 */ 0x0F, 0x0F, 0x0F, 0x02, 0x1B, 0x1C, 0x1D, 0x1E, 0xCA, 0xFE, 0x65, 0x02, 0xFE, 0x1D, 0x02, 0xFE, +/* 00014AA0 */ 0x3D, 0x02, 0x06, 0xFE, 0x47, 0x03, 0x0C, 0x01, 0x00, 0x06, 0xFE, 0x71, 0x04, 0x01, 0x01, 0x0B, +/* 00014AB0 */ 0x06, 0xFE, 0x72, 0x04, 0x06, 0xFE, 0x56, 0x04, 0x06, 0xFE, 0x58, 0x04, 0x06, 0xFE, 0x60, 0x04, +/* 00014AC0 */ 0x06, 0xFE, 0x61, 0x04, 0x01, 0x02, 0xFE, 0x6D, 0x02, 0x96, 0x02, 0x0F, 0x96, 0x03, 0x10, 0x4E, +/* 00014AD0 */ 0x11, 0x4E, 0x12, 0x4E, 0x13, 0x4E, 0x14, 0x4E, 0x15, 0x4E, 0x16, 0x4E, 0x18, 0x4E, 0x19, 0x4E, +/* 00014AE0 */ 0x1A, 0x4E, 0x17, 0x4E, 0x20, 0x96, 0x04, 0x20, 0x4E, 0x20, 0x96, 0x05, 0x20, 0x8E, 0x04, 0x36, +/* 00014AF0 */ 0x21, 0x4A, 0x21, 0x6C, 0x20, 0x21, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x21, 0x8E, 0x02, 0x03, +/* 00014B00 */ 0x22, 0x4A, 0x22, 0x59, 0x01, 0x22, 0xD6, 0x00, 0x22, 0x59, 0x02, 0x22, 0x8E, 0x04, 0x36, 0x23, +/* 00014B10 */ 0x4A, 0x23, 0x6C, 0x22, 0x23, 0x01, 0x07, 0x01, 0x00, 0x59, 0x00, 0x23, 0x1F, 0x01, 0x22, 0x22, +/* 00014B20 */ 0x59, 0x03, 0x22, 0x1F, 0x04, 0x20, 0x20, 0x96, 0x04, 0x20, 0x5E, 0x20, 0x0E, 0x02, 0x96, 0x05, +/* 00014B30 */ 0x20, 0x8E, 0x04, 0x36, 0x21, 0x4A, 0x21, 0x6C, 0x20, 0x21, 0x03, 0x07, 0x04, 0x00, 0x59, 0x00, +/* 00014B40 */ 0x21, 0x8E, 0x04, 0x36, 0x23, 0x4A, 0x23, 0x6C, 0x22, 0x23, 0x04, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 00014B50 */ 0x23, 0x92, 0x04, 0x24, 0x59, 0x01, 0x24, 0x1F, 0x02, 0x22, 0x22, 0x59, 0x01, 0x22, 0xD6, 0x01, +/* 00014B60 */ 0x22, 0x59, 0x02, 0x22, 0x59, 0x03, 0x02, 0x1F, 0x04, 0x20, 0x20, 0x45, 0x11, 0x20, 0x8E, 0x04, +/* 00014B70 */ 0x03, 0x21, 0x6C, 0x20, 0x21, 0x05, 0x07, 0x03, 0x00, 0x59, 0x00, 0x21, 0x5E, 0x22, 0x0E, 0x06, +/* 00014B80 */ 0x59, 0x01, 0x22, 0x59, 0x02, 0x11, 0x1F, 0x03, 0x20, 0x20, 0x45, 0x12, 0x20, 0x45, 0x13, 0x03, +/* 00014B90 */ 0x45, 0x14, 0x04, 0xEC, 0x00, 0xA6, 0x20, 0x12, 0x07, 0x12, 0x03, 0x00, 0x14, 0x20, 0x09, 0x8D, +/* 00014BA0 */ 0x01, 0x97, 0x20, 0x12, 0x14, 0x45, 0x15, 0x20, 0x41, 0x20, 0x15, 0x05, 0x45, 0x16, 0x20, 0x0E, +/* 00014BB0 */ 0x10, 0x00, 0x13, 0x0E, 0x03, 0x00, 0x16, 0x45, 0x13, 0x03, 0x26, 0x14, 0x14, 0x09, 0x6B, 0x01, +/* 00014BC0 */ 0x09, 0x1E, 0x00, 0x0E, 0x0C, 0x00, 0x16, 0x45, 0x13, 0x07, 0x26, 0x14, 0x14, 0x09, 0x5B, 0x01, +/* 00014BD0 */ 0x09, 0x0E, 0x00, 0x14, 0x03, 0x00, 0x15, 0x08, 0x09, 0x06, 0x00, 0x26, 0x14, 0x14, 0x09, 0x4A, +/* 00014BE0 */ 0x01, 0x14, 0x12, 0x00, 0x15, 0x09, 0x14, 0x0D, 0x00, 0x15, 0x0A, 0x14, 0x08, 0x00, 0x15, 0x0B, +/* 00014BF0 */ 0x14, 0x03, 0x00, 0x15, 0x0C, 0x09, 0xE7, 0x00, 0x92, 0x05, 0x20, 0x0E, 0xD2, 0x00, 0x20, 0x92, +/* 00014C00 */ 0x03, 0x20, 0xA8, 0x21, 0x14, 0x03, 0x00, 0x20, 0x21, 0x09, 0xC5, 0x00, 0x8E, 0x01, 0x06, 0x20, +/* 00014C10 */ 0x4A, 0x20, 0x92, 0x05, 0x21, 0x97, 0x20, 0x20, 0x21, 0x45, 0x17, 0x20, 0x15, 0x03, 0x00, 0x17, +/* 00014C20 */ 0x15, 0x09, 0xAA, 0x00, 0x2D, 0x20, 0x14, 0x06, 0x97, 0x20, 0x12, 0x20, 0x14, 0x03, 0x00, 0x20, +/* 00014C30 */ 0x15, 0x09, 0x4D, 0x00, 0x8E, 0x04, 0x36, 0x21, 0x4A, 0x21, 0x6C, 0x20, 0x21, 0x08, 0x07, 0x04, +/* 00014C40 */ 0x00, 0x59, 0x00, 0x21, 0x59, 0x01, 0x12, 0x59, 0x02, 0x04, 0x59, 0x03, 0x14, 0x1F, 0x04, 0x20, +/* 00014C50 */ 0x20, 0x2D, 0x20, 0x20, 0x17, 0x2D, 0x20, 0x20, 0x17, 0x8E, 0x04, 0x36, 0x22, 0x4A, 0x22, 0x6C, +/* 00014C60 */ 0x21, 0x22, 0x09, 0x07, 0x03, 0x00, 0x59, 0x00, 0x22, 0x59, 0x01, 0x12, 0x2D, 0x23, 0x14, 0x0D, +/* 00014C70 */ 0x59, 0x02, 0x23, 0x1F, 0x03, 0x21, 0x21, 0x2D, 0x20, 0x20, 0x21, 0x45, 0x12, 0x20, 0x09, 0x46, +/* 00014C80 */ 0x00, 0x8E, 0x04, 0x36, 0x21, 0x4A, 0x21, 0x6C, 0x20, 0x21, 0x0A, 0x07, 0x04, 0x00, 0x59, 0x00, +/* 00014C90 */ 0x21, 0x59, 0x01, 0x12, 0x59, 0x02, 0x04, 0x59, 0x03, 0x14, 0x1F, 0x04, 0x20, 0x20, 0x2D, 0x20, +/* 00014CA0 */ 0x20, 0x17, 0x8E, 0x04, 0x36, 0x22, 0x4A, 0x22, 0x6C, 0x21, 0x22, 0x0B, 0x07, 0x03, 0x00, 0x59, +/* 00014CB0 */ 0x00, 0x22, 0x59, 0x01, 0x12, 0x2D, 0x23, 0x14, 0x06, 0x59, 0x02, 0x23, 0x1F, 0x03, 0x21, 0x21, +/* 00014CC0 */ 0x2D, 0x20, 0x20, 0x21, 0x45, 0x12, 0x20, 0x97, 0x20, 0x12, 0x14, 0x45, 0x15, 0x20, 0x09, 0x0E, +/* 00014CD0 */ 0x00, 0x8E, 0x01, 0x07, 0x20, 0x4A, 0x20, 0x97, 0x20, 0x20, 0x15, 0x76, 0x20, 0x0E, 0x0C, 0x2D, +/* 00014CE0 */ 0x20, 0x14, 0x06, 0x45, 0x18, 0x20, 0xEC, 0x01, 0xA6, 0x20, 0x12, 0x0D, 0x12, 0x03, 0x00, 0x18, +/* 00014CF0 */ 0x20, 0x09, 0x12, 0x00, 0x97, 0x20, 0x12, 0x18, 0x14, 0x03, 0x00, 0x20, 0x15, 0x09, 0x06, 0x00, +/* 00014D00 */ 0x26, 0x18, 0x18, 0x09, 0xE0, 0xFF, 0x8E, 0x01, 0x03, 0x20, 0x4A, 0x20, 0x97, 0x20, 0x20, 0x15, +/* 00014D10 */ 0x45, 0x19, 0x20, 0x8E, 0x01, 0x05, 0x20, 0x4A, 0x20, 0x33, 0x21, 0x18, 0x14, 0x97, 0x20, 0x20, +/* 00014D20 */ 0x21, 0x45, 0x1A, 0x20, 0x9C, 0x1A, 0x0E, 0x19, 0x45, 0x14, 0x18, 0x09, 0x65, 0xFE, 0x76, 0x12, +/* 00014D30 */ 0x0E, 0x0E, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x2C, 0x01, 0x69, 0xFE, 0x73, 0x04, 0xFE, 0x2C, 0x01, +/* 00014D40 */ 0xCF, 0xFE, 0xFF, 0x01, 0xFE, 0x0D, 0x02, 0xD1, 0xFE, 0x5E, 0x01, 0xFE, 0x5E, 0x01, 0xFE, 0x5E, +/* 00014D50 */ 0x01, 0xFE, 0x5E, 0x01, 0xFE, 0x73, 0x04, 0xD1, 0xFE, 0x72, 0x02, 0xFE, 0x00, 0xE8, 0x27, 0x24, +/* 00014D60 */ 0x00, 0x00, 0x00, 0x3D, 0x00, 0xB0, 0x01, 0x07, 0x00, 0xB6, 0x00, 0x3D, 0x00, 0x43, 0x05, 0x1F, +/* 00014D70 */ 0x00, 0x0E, 0x02, 0x03, 0x00, 0x27, 0x00, 0x05, 0x00, 0x22, 0x00, 0x0C, 0x00, 0x2A, 0x00, 0x07, +/* 00014D80 */ 0x00, 0x2A, 0x00, 0x07, 0x00, 0x31, 0x00, 0x04, 0x00, 0x29, 0x00, 0x04, 0x00, 0x2B, 0x00, 0x03, +/* 00014D90 */ 0x00, 0x45, 0x00, 0x03, 0x00, 0x1D, 0x00, 0x06, 0x00, 0x25, 0x00, 0x04, 0x00, 0x27, 0x00, 0x03, +/* 00014DA0 */ 0x00, 0x2A, 0x00, 0x03, 0x00, 0x1D, 0x00, 0x06, 0x00, 0x25, 0x00, 0x08, 0x00, 0x2B, 0x00, 0x03, +/* 00014DB0 */ 0x00, 0x1D, 0x00, 0x03, 0x00, 0x02, 0x01, 0x17, 0x00, 0x58, 0x00, 0x14, 0x00, 0x76, 0x01, 0x10, +/* 00014DC0 */ 0x00, 0x49, 0x00, 0x08, 0x00, 0x3B, 0x00, 0x10, 0x00, 0x76, 0x00, 0x4D, 0x00, 0xE1, 0x00, 0x46, +/* 00014DD0 */ 0x00, 0xED, 0x00, 0x0A, 0x00, 0x38, 0x01, 0x0E, 0x00, 0x6F, 0x00, 0x09, 0x00, 0x2A, 0x00, 0x18, +/* 00014DE0 */ 0x00, 0x44, 0x00, 0x06, 0x00, 0x30, 0x00, 0x0D, 0x00, 0x3E, 0x00, 0x11, 0x00, 0x48, 0x00, 0x04, +/* 00014DF0 */ 0x00, 0x36, 0x00, 0x06, 0x00, 0x2A, 0x00, 0x06, 0x00, 0x23, 0x00, 0x00, 0x3A, 0x4F, 0x01, 0x00, +/* 00014E00 */ 0x04, 0x4E, 0x01, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x5E, 0x05, 0x43, +/* 00014E10 */ 0xA2, 0x41, 0xD1, 0x00, 0x58, 0xFE, 0x99, 0xEA, 0xFE, 0x99, 0xEA, 0x01, 0xFE, 0x00, 0x90, 0x03, +/* 00014E20 */ 0x03, 0xFE, 0x99, 0xEA, 0xFE, 0xF8, 0x04, 0xFE, 0xF8, 0x04, 0x08, 0x0B, 0x0F, 0x04, 0x38, 0x34, +/* 00014E30 */ 0x05, 0x06, 0x01, 0x01, 0x01, 0x01, 0x0E, 0x06, 0xFE, 0x38, 0x04, 0x0B, 0x06, 0xFE, 0x6F, 0x04, +/* 00014E40 */ 0x06, 0xFE, 0x6D, 0x04, 0x06, 0xFE, 0x55, 0x04, 0x0C, 0x06, 0xFE, 0x6E, 0x04, 0x06, 0xFE, 0x70, +/* 00014E50 */ 0x04, 0x06, 0xFE, 0x57, 0x04, 0xBC, 0x4E, 0x0D, 0x8E, 0x01, 0x04, 0x0F, 0x4A, 0x0F, 0x97, 0x0F, +/* 00014E60 */ 0x0F, 0x0C, 0x45, 0x0D, 0x0F, 0x14, 0x03, 0x00, 0x0C, 0x02, 0x09, 0x69, 0x00, 0x8E, 0x01, 0x03, +/* 00014E70 */ 0x0F, 0x14, 0x27, 0x00, 0x0F, 0x03, 0x8E, 0x01, 0x03, 0x0F, 0xA8, 0x10, 0x14, 0x03, 0x00, 0x0F, +/* 00014E80 */ 0x10, 0x09, 0x1F, 0x00, 0x8E, 0x01, 0x05, 0x0F, 0x4A, 0x0F, 0x14, 0x0E, 0x00, 0x0F, 0x04, 0x8E, +/* 00014E90 */ 0x01, 0x05, 0x0F, 0x4A, 0x0F, 0x14, 0x03, 0x00, 0x0F, 0x05, 0x09, 0x06, 0x00, 0x45, 0x0C, 0x06, +/* 00014EA0 */ 0x09, 0x33, 0x00, 0x8E, 0x01, 0x03, 0x0F, 0x14, 0x27, 0x00, 0x0F, 0x07, 0x8E, 0x01, 0x03, 0x0F, +/* 00014EB0 */ 0xA8, 0x10, 0x14, 0x03, 0x00, 0x0F, 0x10, 0x09, 0x1C, 0x00, 0x8E, 0x01, 0x05, 0x0F, 0x4A, 0x0F, +/* 00014EC0 */ 0x14, 0x0E, 0x00, 0x0F, 0x08, 0x8E, 0x01, 0x05, 0x0F, 0x4A, 0x0F, 0x14, 0x03, 0x00, 0x0F, 0x09, +/* 00014ED0 */ 0x09, 0x03, 0x00, 0x45, 0x0C, 0x0A, 0x45, 0x0F, 0x0B, 0x8E, 0x05, 0x36, 0x11, 0x4A, 0x11, 0x6C, +/* 00014EE0 */ 0x10, 0x11, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x11, 0x8E, 0x02, 0x02, 0x12, 0x4A, 0x12, 0x97, +/* 00014EF0 */ 0x12, 0x12, 0x0C, 0x59, 0x01, 0x12, 0x8E, 0x02, 0x04, 0x12, 0x4A, 0x12, 0x97, 0x12, 0x12, 0x0D, +/* 00014F00 */ 0x59, 0x02, 0x12, 0x1F, 0x03, 0x10, 0x10, 0x2D, 0x00, 0x0F, 0x10, 0x09, 0x02, 0x00, 0xA8, 0x00, +/* 00014F10 */ 0x24, 0x00, 0xFE, 0x3A, 0x01, 0xFE, 0xCE, 0xEA, 0x08, 0x02, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x42, +/* 00014F20 */ 0x00, 0x08, 0x00, 0xA5, 0x02, 0x30, 0x00, 0x6F, 0x00, 0x06, 0x00, 0x35, 0x00, 0x30, 0x00, 0x70, +/* 00014F30 */ 0x00, 0x03, 0x00, 0x5B, 0x00, 0x3A, 0x00, 0x6C, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0x01, 0x00, 0x10, +/* 00014F40 */ 0x03, 0x00, 0xFE, 0x51, 0x05, 0x45, 0xA2, 0x41, 0xD1, 0x00, 0x57, 0xFE, 0x35, 0xE8, 0xFE, 0x35, +/* 00014F50 */ 0xE8, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, 0x35, 0xE8, 0xFE, 0x5B, 0x01, 0xFE, 0x5B, 0x01, +/* 00014F60 */ 0x07, 0x06, 0x0B, 0x07, 0x1B, 0x18, 0x05, 0x02, 0x0A, 0x01, 0x00, 0x06, 0xFE, 0xA3, 0x03, 0x01, +/* 00014F70 */ 0x01, 0x08, 0x4F, 0x4E, 0x08, 0x4E, 0x09, 0x97, 0x0B, 0x07, 0x02, 0x45, 0x08, 0x0B, 0x8E, 0x04, +/* 00014F80 */ 0x02, 0x0B, 0x4A, 0x0B, 0x07, 0x06, 0x00, 0x59, 0x00, 0x05, 0x8E, 0x01, 0x02, 0x0C, 0x59, 0x01, +/* 00014F90 */ 0x0C, 0x59, 0x02, 0x08, 0x59, 0x03, 0x03, 0x97, 0x0C, 0x07, 0x04, 0x59, 0x04, 0x0C, 0xA8, 0x0C, +/* 00014FA0 */ 0x59, 0x05, 0x0C, 0x1F, 0x06, 0x0B, 0x0B, 0x45, 0x09, 0x0B, 0xA8, 0x0B, 0x15, 0x03, 0x00, 0x09, +/* 00014FB0 */ 0x0B, 0x09, 0x04, 0x00, 0x9C, 0x09, 0x06, 0x08, 0x45, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA8, 0x00, +/* 00014FC0 */ 0x24, 0x00, 0xFE, 0x6A, 0xE8, 0x06, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x2F, 0x00, 0x2C, 0x00, +/* 00014FD0 */ 0x5F, 0x00, 0x0A, 0x00, 0x33, 0x00, 0x04, 0x00, 0x43, 0x00, 0x08, 0x00, 0x21, 0x00, 0x00, 0x7E, +/* 00014FE0 */ 0x5D, 0x00, 0xC1, 0x13, 0x1A, 0x4B, 0x00, 0xFE, 0x0F, 0x04, 0x18, 0xA0, 0x41, 0xD1, 0x00, 0x4A, +/* 00014FF0 */ 0xFE, 0x7D, 0xB4, 0xFE, 0x7D, 0xB4, 0x09, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFE, 0x7D, 0xB4, 0xFE, +/* 00015000 */ 0xC7, 0x24, 0xFE, 0xC7, 0x24, 0x05, 0xFE, 0x0B, 0x04, 0xFE, 0x0C, 0x04, 0xFE, 0x32, 0x02, 0xFE, +/* 00015010 */ 0x0B, 0x02, 0xFE, 0x0D, 0x04, 0x0B, 0x1B, 0x21, 0x09, 0xD4, 0xD1, 0x02, 0x07, 0x25, 0x25, 0x25, +/* 00015020 */ 0x25, 0x07, 0x1E, 0x1F, 0x20, 0x06, 0xFE, 0x27, 0x03, 0x06, 0xFE, 0x0E, 0x04, 0x05, 0xFE, 0x0F, +/* 00015030 */ 0x04, 0x08, 0x07, 0x05, 0xFE, 0x10, 0x04, 0x05, 0xFE, 0x11, 0x04, 0x05, 0xFE, 0x12, 0x04, 0x05, +/* 00015040 */ 0xFE, 0x35, 0x03, 0x06, 0xFE, 0x38, 0x03, 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, 0x2B, 0x03, 0x0B, +/* 00015050 */ 0x06, 0xFE, 0x2C, 0x03, 0x0C, 0x06, 0xFE, 0x2D, 0x03, 0x06, 0xFE, 0xEC, 0x03, 0x06, 0xFE, 0xED, +/* 00015060 */ 0x03, 0x06, 0xFE, 0xEE, 0x03, 0x05, 0xFE, 0x13, 0x04, 0x05, 0xFE, 0x14, 0x04, 0x06, 0xFE, 0x37, +/* 00015070 */ 0x03, 0x06, 0xFE, 0x15, 0x04, 0x06, 0xFE, 0x77, 0x03, 0x06, 0xFE, 0x16, 0x04, 0xFE, 0xF2, 0x02, +/* 00015080 */ 0x4E, 0x1B, 0x4E, 0x1C, 0x4E, 0x1D, 0x4E, 0x21, 0x96, 0x02, 0x21, 0x4E, 0x21, 0x96, 0x03, 0x21, +/* 00015090 */ 0x4E, 0x21, 0x96, 0x04, 0x21, 0x4E, 0x21, 0x96, 0x05, 0x21, 0x4E, 0x21, 0x96, 0x06, 0x21, 0x8E, +/* 000150A0 */ 0x02, 0x32, 0x21, 0x15, 0x03, 0x00, 0x21, 0x02, 0x09, 0x11, 0x00, 0x8E, 0x02, 0x32, 0x21, 0x15, +/* 000150B0 */ 0x03, 0x00, 0x21, 0x03, 0x09, 0x05, 0x00, 0xA8, 0x00, 0x09, 0xB4, 0x02, 0xD6, 0x00, 0x21, 0x96, +/* 000150C0 */ 0x02, 0x21, 0x8E, 0x02, 0x03, 0x22, 0x6C, 0x21, 0x22, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x22, +/* 000150D0 */ 0x8E, 0x01, 0x06, 0x23, 0x4A, 0x23, 0x07, 0x03, 0x00, 0x59, 0x00, 0x05, 0x59, 0x01, 0x04, 0xD6, +/* 000150E0 */ 0x01, 0x24, 0x59, 0x02, 0x24, 0x1F, 0x03, 0x23, 0x23, 0x59, 0x01, 0x23, 0x8E, 0x02, 0x03, 0x23, +/* 000150F0 */ 0x5E, 0x23, 0x23, 0x01, 0x5E, 0x23, 0x23, 0x02, 0x59, 0x02, 0x23, 0x1F, 0x03, 0xFF, 0x21, 0x8E, +/* 00015100 */ 0x02, 0x32, 0x21, 0x14, 0x03, 0x00, 0x21, 0x03, 0x09, 0x05, 0x00, 0xA8, 0x00, 0x09, 0x60, 0x02, +/* 00015110 */ 0xCD, 0x21, 0x96, 0x03, 0x21, 0x8E, 0x02, 0x23, 0x21, 0x07, 0x03, 0x00, 0x59, 0x00, 0x05, 0x59, +/* 00015120 */ 0x01, 0x07, 0xD6, 0x02, 0x22, 0x59, 0x02, 0x22, 0x1F, 0x03, 0x21, 0x21, 0x96, 0x04, 0x21, 0x8E, +/* 00015130 */ 0x01, 0x06, 0x21, 0x4A, 0x21, 0x07, 0x03, 0x00, 0x59, 0x00, 0x05, 0x59, 0x01, 0x08, 0xD6, 0x03, +/* 00015140 */ 0x22, 0x59, 0x02, 0x22, 0x1F, 0x03, 0x21, 0x21, 0x96, 0x05, 0x21, 0x8E, 0x01, 0x06, 0x21, 0x4A, +/* 00015150 */ 0x21, 0x07, 0x03, 0x00, 0x59, 0x00, 0x05, 0x59, 0x01, 0x09, 0xD6, 0x04, 0x22, 0x59, 0x02, 0x22, +/* 00015160 */ 0x1F, 0x03, 0x21, 0x21, 0x45, 0x1B, 0x21, 0x8E, 0x01, 0x06, 0x21, 0x4A, 0x21, 0x07, 0x03, 0x00, +/* 00015170 */ 0x59, 0x00, 0x05, 0x59, 0x01, 0x0A, 0xD6, 0x05, 0x22, 0x59, 0x02, 0x22, 0x1F, 0x03, 0x21, 0x21, +/* 00015180 */ 0x45, 0x1C, 0x21, 0x8E, 0x02, 0x36, 0x22, 0x4A, 0x22, 0x6C, 0x21, 0x22, 0x03, 0x07, 0x04, 0x00, +/* 00015190 */ 0x59, 0x00, 0x22, 0x92, 0x04, 0x23, 0x59, 0x01, 0x23, 0x59, 0x02, 0x0B, 0xCE, 0x00, 0x00, 0x00, +/* 000151A0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x7A, 0x1C, 0x23, 0x04, 0x7A, 0x0E, 0x23, +/* 000151B0 */ 0x05, 0x7A, 0x10, 0x23, 0x06, 0x7A, 0x0E, 0x23, 0x07, 0x59, 0x03, 0x23, 0x1F, 0x04, 0xFF, 0x21, +/* 000151C0 */ 0x8E, 0x02, 0x36, 0x22, 0x4A, 0x22, 0x6C, 0x21, 0x22, 0x08, 0x07, 0x04, 0x00, 0x59, 0x00, 0x22, +/* 000151D0 */ 0x92, 0x04, 0x23, 0x59, 0x01, 0x23, 0x59, 0x02, 0x12, 0xCE, 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, +/* 000151E0 */ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x92, 0x03, 0x24, 0x7A, 0x24, 0x23, 0x09, 0x7A, 0x10, 0x23, +/* 000151F0 */ 0x0A, 0x7A, 0x10, 0x23, 0x0B, 0x7A, 0x10, 0x23, 0x0C, 0x59, 0x03, 0x23, 0x1F, 0x04, 0xFF, 0x21, +/* 00015200 */ 0x8E, 0x02, 0x36, 0x22, 0x4A, 0x22, 0x6C, 0x21, 0x22, 0x0D, 0x07, 0x04, 0x00, 0x59, 0x00, 0x22, +/* 00015210 */ 0x92, 0x03, 0x23, 0x59, 0x01, 0x23, 0x59, 0x02, 0x13, 0xCE, 0x30, 0x00, 0x00, 0x00, 0x02, 0x00, +/* 00015220 */ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x92, 0x04, 0x24, 0x7A, 0x24, 0x23, 0x0E, 0x7A, 0x0E, 0x23, +/* 00015230 */ 0x0F, 0x7A, 0x10, 0x23, 0x10, 0x7A, 0x0E, 0x23, 0x11, 0x59, 0x03, 0x23, 0x1F, 0x04, 0xFF, 0x21, +/* 00015240 */ 0xD6, 0x06, 0x21, 0x96, 0x06, 0x21, 0x8E, 0x02, 0x36, 0x22, 0x4A, 0x22, 0x6C, 0x21, 0x22, 0x12, +/* 00015250 */ 0x07, 0x04, 0x00, 0x59, 0x00, 0x22, 0x92, 0x03, 0x23, 0x59, 0x01, 0x23, 0x59, 0x02, 0x14, 0xCE, +/* 00015260 */ 0x48, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x8E, 0x01, 0x06, 0x24, +/* 00015270 */ 0x4A, 0x24, 0x07, 0x03, 0x00, 0x59, 0x00, 0x05, 0x59, 0x01, 0x15, 0xD6, 0x07, 0x25, 0x59, 0x02, +/* 00015280 */ 0x25, 0x1F, 0x03, 0x24, 0x24, 0x7A, 0x24, 0x23, 0x13, 0x7A, 0x0E, 0x23, 0x14, 0x7A, 0x10, 0x23, +/* 00015290 */ 0x15, 0x7A, 0x0E, 0x23, 0x16, 0x59, 0x03, 0x23, 0x1F, 0x04, 0xFF, 0x21, 0x8E, 0x01, 0x06, 0x21, +/* 000152A0 */ 0x4A, 0x21, 0x07, 0x03, 0x00, 0x59, 0x00, 0x05, 0x59, 0x01, 0x16, 0xD6, 0x08, 0x22, 0x59, 0x02, +/* 000152B0 */ 0x22, 0x1F, 0x03, 0x21, 0x21, 0x45, 0x1D, 0x21, 0x8E, 0x02, 0x36, 0x22, 0x4A, 0x22, 0x6C, 0x21, +/* 000152C0 */ 0x22, 0x17, 0x07, 0x04, 0x00, 0x59, 0x00, 0x22, 0x59, 0x01, 0x1D, 0x59, 0x02, 0x17, 0xCE, 0x60, +/* 000152D0 */ 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x7A, 0x16, 0x23, 0x18, 0x7A, +/* 000152E0 */ 0x10, 0x23, 0x19, 0x7A, 0x10, 0x23, 0x1A, 0x7A, 0x0E, 0x23, 0x1B, 0x59, 0x03, 0x23, 0x1F, 0x04, +/* 000152F0 */ 0xFF, 0x21, 0x8E, 0x02, 0x36, 0x22, 0x4A, 0x22, 0x6C, 0x21, 0x22, 0x1C, 0x07, 0x04, 0x00, 0x59, +/* 00015300 */ 0x00, 0x22, 0x92, 0x03, 0x23, 0x59, 0x01, 0x23, 0x59, 0x02, 0x18, 0xCE, 0x78, 0x00, 0x00, 0x00, +/* 00015310 */ 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x7A, 0x1D, 0x23, 0x1D, 0x7A, 0x10, 0x23, 0x1E, +/* 00015320 */ 0x7A, 0x0E, 0x23, 0x1F, 0x59, 0x03, 0x23, 0x1F, 0x04, 0xFF, 0x21, 0x8E, 0x02, 0x36, 0x22, 0x4A, +/* 00015330 */ 0x22, 0x6C, 0x21, 0x22, 0x20, 0x07, 0x04, 0x00, 0x59, 0x00, 0x22, 0x92, 0x03, 0x23, 0x59, 0x01, +/* 00015340 */ 0x23, 0x59, 0x02, 0x1A, 0xCE, 0x8C, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, +/* 00015350 */ 0x00, 0x7A, 0x1B, 0x23, 0x21, 0x7A, 0x10, 0x23, 0x22, 0x7A, 0x0E, 0x23, 0x23, 0x7A, 0x0E, 0x23, +/* 00015360 */ 0x24, 0x59, 0x03, 0x23, 0x1F, 0x04, 0xFF, 0x21, 0x92, 0x04, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, +/* 00015370 */ 0x24, 0x00, 0x07, 0xA4, 0x00, 0x8C, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00015380 */ 0x00, 0x97, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, +/* 00015390 */ 0x00, 0x78, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x01, 0x00, +/* 000153A0 */ 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, +/* 000153B0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, +/* 000153C0 */ 0x00, 0x95, 0x01, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 000153D0 */ 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, +/* 000153E0 */ 0x00, 0x30, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, +/* 000153F0 */ 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x18, 0x00, 0x00, +/* 00015400 */ 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, +/* 00015410 */ 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, +/* 00015420 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, +/* 00015430 */ 0x00, 0x95, 0x01, 0x00, 0x00, 0xFE, 0x04, 0x02, 0xFE, 0x2F, 0x02, 0xFE, 0x2D, 0x02, 0xFE, 0x9C, +/* 00015440 */ 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, +/* 00015450 */ 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, +/* 00015460 */ 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x97, +/* 00015470 */ 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, +/* 00015480 */ 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x98, 0x01, 0xFE, +/* 00015490 */ 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, +/* 000154A0 */ 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x93, 0xB4, 0x16, 0x1F, 0x00, 0x00, 0x00, 0x18, 0x00, 0x40, 0x00, +/* 000154B0 */ 0x05, 0x00, 0x1B, 0x00, 0x06, 0x00, 0xB8, 0x09, 0x3D, 0x00, 0x94, 0x02, 0x0C, 0x00, 0x29, 0x00, +/* 000154C0 */ 0x05, 0x00, 0x1B, 0x00, 0x05, 0x00, 0x2B, 0x00, 0x1A, 0x00, 0x70, 0x04, 0x1C, 0x00, 0xB9, 0x01, +/* 000154D0 */ 0x1C, 0x00, 0xDD, 0x02, 0x1C, 0x00, 0x13, 0x01, 0x3D, 0x00, 0xCE, 0x00, 0x40, 0x00, 0xC9, 0x00, +/* 000154E0 */ 0x40, 0x00, 0xCA, 0x00, 0x06, 0x00, 0xC4, 0x02, 0x56, 0x00, 0xF9, 0x03, 0x1C, 0x00, 0x22, 0x02, +/* 000154F0 */ 0x3A, 0x00, 0xB7, 0x00, 0x39, 0x00, 0xA4, 0x00, 0x3D, 0x00, 0xCD, 0x00, 0x08, 0x00, 0x19, 0x00, +/* 00015500 */ 0x00, 0xF5, 0x5D, 0x01, 0x00, 0xD1, 0x5C, 0x01, 0x00, 0xE2, 0x5A, 0x01, 0x00, 0x1A, 0x5A, 0x01, +/* 00015510 */ 0x00, 0xFB, 0x58, 0x01, 0x00, 0x6E, 0x58, 0x01, 0x00, 0x3F, 0x57, 0x01, 0x00, 0x21, 0x56, 0x01, +/* 00015520 */ 0x00, 0x25, 0x55, 0x01, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0xD5, 0x04, +/* 00015530 */ 0x3B, 0xA0, 0x41, 0xD1, 0x00, 0x53, 0xFE, 0x13, 0xD5, 0xFE, 0x13, 0xD5, 0x09, 0xFE, 0x00, 0x90, +/* 00015540 */ 0x01, 0x01, 0xFE, 0x13, 0xD5, 0xFE, 0xE4, 0x01, 0xFE, 0xE4, 0x01, 0x07, 0x06, 0x09, 0x04, 0x2A, +/* 00015550 */ 0x28, 0x03, 0x04, 0x06, 0x06, 0x06, 0x06, 0x08, 0x06, 0xFE, 0x94, 0x03, 0x05, 0xFE, 0x22, 0x04, +/* 00015560 */ 0x06, 0xFE, 0x2F, 0x03, 0x08, 0x86, 0x58, 0x06, 0x4E, 0x07, 0x2A, 0x09, 0x06, 0x15, 0x03, 0x00, +/* 00015570 */ 0x09, 0x02, 0x09, 0x18, 0x00, 0x8E, 0x03, 0x03, 0x0A, 0x6C, 0x09, 0x0A, 0x00, 0x07, 0x03, 0x00, +/* 00015580 */ 0x59, 0x00, 0x0A, 0x59, 0x01, 0x03, 0x59, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x09, 0x8E, 0x01, 0x06, +/* 00015590 */ 0x09, 0x4A, 0x09, 0x07, 0x02, 0x00, 0x59, 0x00, 0x05, 0x59, 0x01, 0x06, 0x1F, 0x02, 0x09, 0x09, +/* 000155A0 */ 0x45, 0x07, 0x09, 0x5E, 0x09, 0x07, 0x01, 0xA8, 0x0A, 0x14, 0x03, 0x00, 0x09, 0x0A, 0x09, 0x30, +/* 000155B0 */ 0x00, 0x45, 0x09, 0x07, 0x8E, 0x03, 0x36, 0x0B, 0x4A, 0x0B, 0x6C, 0x0A, 0x0B, 0x02, 0x07, 0x03, +/* 000155C0 */ 0x00, 0x59, 0x00, 0x0B, 0x8E, 0x01, 0x05, 0x0C, 0x4A, 0x0C, 0x59, 0x01, 0x0C, 0x59, 0x02, 0x07, +/* 000155D0 */ 0x1F, 0x03, 0x0A, 0x0A, 0x76, 0x0A, 0x09, 0x03, 0x5E, 0x09, 0x07, 0x04, 0x82, 0x09, 0x09, 0x06, +/* 000155E0 */ 0x01, 0x5E, 0x00, 0x07, 0x05, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB6, 0x02, 0xFE, +/* 000155F0 */ 0x25, 0x04, 0x54, 0xFE, 0x25, 0x04, 0xFE, 0x25, 0x04, 0xFE, 0x25, 0x04, 0xFE, 0x2D, 0xD5, 0x08, +/* 00015600 */ 0x04, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x30, 0x00, 0x18, 0x00, 0x6C, 0x00, 0x16, 0x00, 0x3C, 0x00, +/* 00015610 */ 0x0E, 0x00, 0x3E, 0x00, 0x27, 0x00, 0x49, 0x00, 0x09, 0x00, 0x41, 0x00, 0x09, 0x00, 0x29, 0x00, +/* 00015620 */ 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0xC2, 0x04, 0x55, 0xA0, 0x41, 0xC3, +/* 00015630 */ 0x00, 0xFE, 0xEE, 0x03, 0x52, 0xFE, 0x79, 0xD1, 0xFE, 0x79, 0xD1, 0x09, 0xFE, 0x00, 0x90, 0x01, +/* 00015640 */ 0x01, 0xFE, 0x79, 0xD1, 0xFE, 0x78, 0x02, 0xFE, 0x78, 0x02, 0x06, 0x11, 0x15, 0x04, 0x2C, 0x2A, +/* 00015650 */ 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x14, 0x06, 0xFE, 0x94, 0x03, 0x05, 0xFE, 0x22, 0x04, 0x06, +/* 00015660 */ 0xFE, 0x2F, 0x03, 0x08, 0x06, 0xFE, 0xD7, 0x03, 0x06, 0xFE, 0x24, 0x04, 0x06, 0xFE, 0x18, 0x04, +/* 00015670 */ 0x06, 0xFE, 0x1B, 0x04, 0x06, 0xFE, 0x1C, 0x04, 0x06, 0xFE, 0xDA, 0x03, 0x06, 0xFE, 0xDB, 0x03, +/* 00015680 */ 0x06, 0xFE, 0xDC, 0x03, 0x06, 0xFE, 0xDD, 0x03, 0x06, 0xFE, 0xDE, 0x03, 0x06, 0xFE, 0x1F, 0x04, +/* 00015690 */ 0x8E, 0x58, 0x11, 0x4E, 0x12, 0x4E, 0x13, 0x2A, 0x15, 0x11, 0x15, 0x03, 0x00, 0x15, 0x02, 0x09, +/* 000156A0 */ 0x18, 0x00, 0x8E, 0x03, 0x03, 0x16, 0x6C, 0x15, 0x16, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x16, +/* 000156B0 */ 0x59, 0x01, 0x03, 0x59, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x15, 0x8E, 0x01, 0x06, 0x15, 0x4A, 0x15, +/* 000156C0 */ 0x07, 0x02, 0x00, 0x59, 0x00, 0x05, 0x59, 0x01, 0x11, 0x1F, 0x02, 0x15, 0x15, 0x45, 0x12, 0x15, +/* 000156D0 */ 0xCF, 0x15, 0x0B, 0xA1, 0x00, 0x06, 0x15, 0xA1, 0x01, 0x07, 0x15, 0xA1, 0x02, 0x08, 0x15, 0xA1, +/* 000156E0 */ 0x03, 0x09, 0x15, 0xA1, 0x04, 0x0A, 0x15, 0xA1, 0x05, 0x0B, 0x15, 0xA1, 0x06, 0x0C, 0x15, 0xA1, +/* 000156F0 */ 0x07, 0x0D, 0x15, 0xA1, 0x08, 0x0E, 0x15, 0xA1, 0x09, 0x0F, 0x15, 0xA1, 0x0A, 0x10, 0x15, 0x45, +/* 00015700 */ 0x13, 0x15, 0x8E, 0x02, 0x17, 0x15, 0x4A, 0x15, 0x07, 0x03, 0x00, 0x59, 0x00, 0x05, 0x59, 0x01, +/* 00015710 */ 0x13, 0x59, 0x02, 0x12, 0x1F, 0x03, 0x00, 0x15, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, +/* 00015720 */ 0xB6, 0x02, 0xFE, 0xA6, 0xD1, 0x06, 0x06, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x34, 0x00, 0x18, 0x00, +/* 00015730 */ 0x74, 0x00, 0x16, 0x00, 0x40, 0x00, 0x32, 0x00, 0x21, 0x01, 0x1B, 0x00, 0x41, 0x00, 0x00, 0x7F, +/* 00015740 */ 0x5C, 0x00, 0xC1, 0x07, 0x10, 0x03, 0x00, 0xFE, 0xAF, 0x04, 0x23, 0xA2, 0x41, 0xC1, 0x00, 0xFE, +/* 00015750 */ 0x0D, 0x04, 0x51, 0xFE, 0x3E, 0xCE, 0xFE, 0x3E, 0xCE, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, +/* 00015760 */ 0x3E, 0xCE, 0xFE, 0x9E, 0x02, 0xFE, 0x9E, 0x02, 0x05, 0x05, 0x08, 0x04, 0x32, 0x2E, 0x03, 0x02, +/* 00015770 */ 0x07, 0x07, 0x07, 0x07, 0x01, 0x07, 0x06, 0xFE, 0x94, 0x03, 0x05, 0xFE, 0x22, 0x04, 0x06, 0xFE, +/* 00015780 */ 0x2F, 0x03, 0xA9, 0x4E, 0x06, 0x8E, 0x03, 0x03, 0x09, 0x6C, 0x08, 0x09, 0x00, 0x07, 0x02, 0x00, +/* 00015790 */ 0x59, 0x00, 0x09, 0x59, 0x01, 0x05, 0x1F, 0x02, 0x08, 0x08, 0x45, 0x06, 0x08, 0x0E, 0x08, 0x00, +/* 000157A0 */ 0x06, 0x5E, 0x08, 0x06, 0x01, 0x0F, 0x1E, 0x00, 0x08, 0x8E, 0x01, 0x04, 0x08, 0x4A, 0x08, 0xE3, +/* 000157B0 */ 0x08, 0x05, 0x08, 0x00, 0x0E, 0x0F, 0x00, 0x08, 0x8E, 0x03, 0x03, 0x08, 0x5E, 0x08, 0x08, 0x02, +/* 000157C0 */ 0x97, 0x08, 0x05, 0x08, 0x45, 0x05, 0x08, 0x2A, 0x08, 0x05, 0x15, 0x03, 0x00, 0x08, 0x02, 0x09, +/* 000157D0 */ 0x18, 0x00, 0x8E, 0x03, 0x03, 0x09, 0x6C, 0x08, 0x09, 0x03, 0x07, 0x03, 0x00, 0x59, 0x00, 0x09, +/* 000157E0 */ 0x59, 0x01, 0x03, 0x59, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x08, 0x8E, 0x03, 0x03, 0x09, 0x6C, 0x08, +/* 000157F0 */ 0x09, 0x04, 0x07, 0x02, 0x00, 0x59, 0x00, 0x09, 0x59, 0x01, 0x05, 0x1F, 0x02, 0x08, 0x08, 0x45, +/* 00015800 */ 0x06, 0x08, 0x5E, 0x08, 0x06, 0x05, 0x0F, 0x18, 0x00, 0x08, 0x8E, 0x03, 0x03, 0x09, 0x6C, 0x08, +/* 00015810 */ 0x09, 0x06, 0x07, 0x03, 0x00, 0x59, 0x00, 0x09, 0x59, 0x01, 0x03, 0x59, 0x02, 0x04, 0x1F, 0x03, +/* 00015820 */ 0xFF, 0x08, 0x45, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x05, 0x02, 0xFE, +/* 00015830 */ 0x20, 0x04, 0xFE, 0x30, 0x02, 0xFE, 0xB6, 0x02, 0xFE, 0x05, 0x02, 0xFE, 0x20, 0x04, 0xFE, 0xB6, +/* 00015840 */ 0x02, 0xFE, 0x5A, 0xCE, 0x0A, 0x02, 0x00, 0x00, 0x00, 0x18, 0x00, 0x3D, 0x00, 0x1B, 0x00, 0x6E, +/* 00015850 */ 0x00, 0x0F, 0x00, 0x3D, 0x00, 0x0B, 0x00, 0x2E, 0x00, 0x18, 0x00, 0x6C, 0x00, 0x18, 0x00, 0x39, +/* 00015860 */ 0x00, 0x08, 0x00, 0x3D, 0x00, 0x18, 0x00, 0x6C, 0x00, 0x08, 0x00, 0x1D, 0x00, 0x00, 0x7F, 0x5C, +/* 00015870 */ 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x97, 0x04, 0x5E, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x38, +/* 00015880 */ 0x03, 0x50, 0xFE, 0x05, 0xCB, 0xFE, 0x05, 0xCB, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x02, 0xFE, 0x05, +/* 00015890 */ 0xCB, 0xB2, 0xB2, 0x05, 0x03, 0x06, 0x08, 0x17, 0x16, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x05, +/* 000158A0 */ 0x08, 0x45, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA8, 0x06, 0x45, 0x04, 0x06, 0x8E, 0x02, 0x16, 0x06, +/* 000158B0 */ 0x4A, 0x06, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x8E, 0x03, 0x03, 0x07, 0x5E, 0x07, 0x07, 0x00, +/* 000158C0 */ 0x59, 0x01, 0x07, 0x8E, 0x02, 0x12, 0x07, 0x4A, 0x07, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x59, +/* 000158D0 */ 0x01, 0x03, 0x1F, 0x02, 0x07, 0x07, 0x59, 0x02, 0x07, 0x59, 0x03, 0x04, 0x1F, 0x04, 0x00, 0x06, +/* 000158E0 */ 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xF1, 0x01, 0xFE, 0x2A, 0xCB, 0x03, 0x00, 0x00, +/* 000158F0 */ 0x00, 0x00, 0x0A, 0x00, 0x23, 0x00, 0x39, 0x00, 0x69, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, +/* 00015900 */ 0x10, 0x03, 0x00, 0xFE, 0x88, 0x04, 0x5E, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x16, 0x04, 0x4F, 0xFE, +/* 00015910 */ 0x28, 0xC8, 0xFE, 0x28, 0xC8, 0x09, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0x28, 0xC8, 0xFE, 0x7B, +/* 00015920 */ 0x02, 0xFE, 0x7B, 0x02, 0x06, 0x07, 0x0B, 0x06, 0x32, 0x30, 0x03, 0x02, 0x06, 0x06, 0x06, 0x06, +/* 00015930 */ 0x0A, 0x06, 0xFE, 0x94, 0x03, 0x05, 0xFE, 0x23, 0x04, 0x06, 0xFE, 0x2F, 0x03, 0x0B, 0x0C, 0xA3, +/* 00015940 */ 0x58, 0x08, 0x4E, 0x09, 0x8E, 0x03, 0x24, 0x0C, 0x6C, 0x0B, 0x0C, 0x00, 0x07, 0x02, 0x00, 0x59, +/* 00015950 */ 0x00, 0x0C, 0x59, 0x01, 0x07, 0x1F, 0x02, 0x0B, 0x0B, 0x45, 0x07, 0x0B, 0x2A, 0x0B, 0x08, 0x15, +/* 00015960 */ 0x03, 0x00, 0x0B, 0x02, 0x09, 0x18, 0x00, 0x8E, 0x03, 0x03, 0x0C, 0x6C, 0x0B, 0x0C, 0x01, 0x07, +/* 00015970 */ 0x03, 0x00, 0x59, 0x00, 0x0C, 0x59, 0x01, 0x03, 0x59, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x0B, 0x8E, +/* 00015980 */ 0x03, 0x03, 0x0C, 0x6C, 0x0B, 0x0C, 0x02, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0C, 0x59, 0x01, 0x08, +/* 00015990 */ 0x1F, 0x02, 0x0B, 0x0B, 0x45, 0x09, 0x0B, 0xA8, 0x0B, 0x14, 0x08, 0x00, 0x09, 0x0B, 0x5E, 0x0B, +/* 000159A0 */ 0x09, 0x03, 0x0F, 0x18, 0x00, 0x0B, 0x8E, 0x03, 0x03, 0x0C, 0x6C, 0x0B, 0x0C, 0x04, 0x07, 0x03, +/* 000159B0 */ 0x00, 0x59, 0x00, 0x0C, 0x59, 0x01, 0x03, 0x59, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x0B, 0x8E, 0x03, +/* 000159C0 */ 0x03, 0x0C, 0x6C, 0x0B, 0x0C, 0x05, 0x07, 0x05, 0x00, 0x59, 0x00, 0x0C, 0x59, 0x01, 0x07, 0x59, +/* 000159D0 */ 0x02, 0x09, 0x59, 0x03, 0x05, 0x59, 0x04, 0x06, 0x1F, 0x05, 0x00, 0x0B, 0x09, 0x02, 0x00, 0xA8, +/* 000159E0 */ 0x00, 0x24, 0x00, 0xFE, 0x23, 0x03, 0xFE, 0xB6, 0x02, 0xFE, 0x05, 0x02, 0xFE, 0x20, 0x04, 0xFE, +/* 000159F0 */ 0xB6, 0x02, 0xFE, 0xF8, 0x01, 0xFE, 0x50, 0xC8, 0x08, 0x04, 0x00, 0x00, 0x00, 0x18, 0x00, 0x27, +/* 00015A00 */ 0x00, 0x0B, 0x00, 0x30, 0x00, 0x18, 0x00, 0x73, 0x00, 0x18, 0x00, 0x41, 0x00, 0x0F, 0x00, 0x5B, +/* 00015A10 */ 0x00, 0x18, 0x00, 0x73, 0x00, 0x23, 0x00, 0x79, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, +/* 00015A20 */ 0x03, 0x00, 0xFE, 0x7E, 0x04, 0x50, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x15, 0x04, 0x4E, 0xFE, 0x61, +/* 00015A30 */ 0xC6, 0xFE, 0x61, 0xC6, 0x09, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0x61, 0xC6, 0xFE, 0x65, 0x01, +/* 00015A40 */ 0xFE, 0x65, 0x01, 0x05, 0x05, 0x08, 0x06, 0x1F, 0x1E, 0x03, 0x02, 0x04, 0x04, 0x04, 0x04, 0x07, +/* 00015A50 */ 0x05, 0xFE, 0x22, 0x04, 0x06, 0xFE, 0x2F, 0x03, 0x0C, 0x63, 0x58, 0x06, 0x8E, 0x03, 0x24, 0x09, +/* 00015A60 */ 0x6C, 0x08, 0x09, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x09, 0x59, 0x01, 0x05, 0x1F, 0x02, 0x08, +/* 00015A70 */ 0x08, 0x45, 0x05, 0x08, 0x0E, 0x08, 0x00, 0x06, 0x5E, 0x08, 0x06, 0x01, 0x0F, 0x18, 0x00, 0x08, +/* 00015A80 */ 0x8E, 0x03, 0x03, 0x09, 0x6C, 0x08, 0x09, 0x02, 0x07, 0x03, 0x00, 0x59, 0x00, 0x09, 0x59, 0x01, +/* 00015A90 */ 0x02, 0x59, 0x02, 0x03, 0x1F, 0x03, 0xFF, 0x08, 0x8E, 0x03, 0x03, 0x09, 0x6C, 0x08, 0x09, 0x03, +/* 00015AA0 */ 0x07, 0x05, 0x00, 0x59, 0x00, 0x09, 0x59, 0x01, 0x05, 0x59, 0x02, 0x06, 0x59, 0x03, 0x04, 0x59, +/* 00015AB0 */ 0x04, 0x04, 0x1F, 0x05, 0x00, 0x08, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x23, 0x03, +/* 00015AC0 */ 0xFE, 0x20, 0x04, 0xFE, 0xB6, 0x02, 0xFE, 0xF8, 0x01, 0xFE, 0x82, 0xC6, 0x05, 0x02, 0x00, 0x00, +/* 00015AD0 */ 0x00, 0x18, 0x00, 0x27, 0x00, 0x0C, 0x00, 0x3E, 0x00, 0x18, 0x00, 0x6C, 0x00, 0x23, 0x00, 0x72, +/* 00015AE0 */ 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x17, 0x10, 0x43, 0x00, 0xFE, 0x63, 0x04, 0x44, 0xA2, 0x41, +/* 00015AF0 */ 0xC3, 0x00, 0xFE, 0x2F, 0x03, 0x4D, 0xFE, 0xE5, 0xC1, 0xFE, 0xE5, 0xC1, 0x08, 0xFE, 0x00, 0x90, +/* 00015B00 */ 0x03, 0x01, 0xFE, 0xE5, 0xC1, 0xFE, 0xC9, 0x03, 0xFE, 0xC9, 0x03, 0x0C, 0x09, 0x12, 0x05, 0x5C, +/* 00015B10 */ 0x53, 0x03, 0x05, 0x09, 0x09, 0x09, 0x09, 0x01, 0x01, 0x11, 0x08, 0x06, 0xFE, 0x2A, 0x03, 0x06, +/* 00015B20 */ 0xFE, 0x2B, 0x03, 0x0C, 0x06, 0xFE, 0x2C, 0x03, 0x06, 0xFE, 0x2D, 0x03, 0x07, 0xFE, 0x2C, 0x01, +/* 00015B30 */ 0x01, 0x5D, 0x01, 0x0B, 0x58, 0x10, 0xC0, 0x0C, 0x4E, 0x0D, 0x4E, 0x0E, 0x4E, 0x0F, 0x15, 0x05, +/* 00015B40 */ 0x00, 0x09, 0x02, 0xA8, 0x12, 0x45, 0x09, 0x12, 0x15, 0x05, 0x00, 0x0A, 0x02, 0xA8, 0x12, 0x45, +/* 00015B50 */ 0x0A, 0x12, 0x4E, 0x0D, 0x4E, 0x0E, 0x4E, 0x0F, 0xA8, 0x12, 0x14, 0x03, 0x00, 0x0B, 0x12, 0x09, +/* 00015B60 */ 0x06, 0x00, 0x45, 0x12, 0x0C, 0x09, 0x03, 0x00, 0x46, 0x12, 0x0B, 0x45, 0x0D, 0x12, 0x8E, 0x02, +/* 00015B70 */ 0x07, 0x12, 0x4A, 0x12, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x0D, 0x8E, 0x01, 0x03, +/* 00015B80 */ 0x13, 0x4A, 0x13, 0x59, 0x02, 0x13, 0x1F, 0x03, 0x12, 0x12, 0x45, 0x0E, 0x12, 0x8E, 0x03, 0x03, +/* 00015B90 */ 0x13, 0x6C, 0x12, 0x13, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x13, 0x59, 0x01, 0x0E, 0x1F, 0x02, +/* 00015BA0 */ 0x12, 0x12, 0x45, 0x0F, 0x12, 0xA8, 0x12, 0x14, 0x03, 0x00, 0x0F, 0x12, 0x09, 0x2F, 0x00, 0x8E, +/* 00015BB0 */ 0x03, 0x36, 0x13, 0x4A, 0x13, 0x6C, 0x12, 0x13, 0x01, 0x07, 0x01, 0x00, 0x59, 0x00, 0x13, 0x1F, +/* 00015BC0 */ 0x01, 0x12, 0x12, 0x45, 0x0F, 0x12, 0x8E, 0x03, 0x03, 0x13, 0x6C, 0x12, 0x13, 0x02, 0x07, 0x03, +/* 00015BD0 */ 0x00, 0x59, 0x00, 0x13, 0x59, 0x01, 0x0E, 0x59, 0x02, 0x0F, 0x1F, 0x03, 0xFF, 0x12, 0x8E, 0x01, +/* 00015BE0 */ 0x02, 0x12, 0x4A, 0x12, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x0F, 0x59, 0x02, 0x09, +/* 00015BF0 */ 0x59, 0x03, 0x0A, 0x1F, 0x04, 0xFF, 0x12, 0xA8, 0x12, 0x14, 0x03, 0x00, 0x0B, 0x12, 0x09, 0x51, +/* 00015C00 */ 0x00, 0xE3, 0x12, 0x10, 0x0C, 0x00, 0x0E, 0x48, 0x00, 0x12, 0x8E, 0x03, 0x36, 0x13, 0x4A, 0x13, +/* 00015C10 */ 0x6C, 0x12, 0x13, 0x03, 0x07, 0x04, 0x00, 0x59, 0x00, 0x13, 0x59, 0x01, 0x10, 0x8E, 0x03, 0x03, +/* 00015C20 */ 0x14, 0x5E, 0x14, 0x14, 0x04, 0x59, 0x02, 0x14, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00015C30 */ 0x00, 0x14, 0x00, 0x00, 0x00, 0x7A, 0x0E, 0x14, 0x05, 0x7A, 0x05, 0x14, 0x06, 0x7A, 0x05, 0x14, +/* 00015C40 */ 0x07, 0x7A, 0x05, 0x14, 0x08, 0x59, 0x03, 0x14, 0x1F, 0x04, 0xFF, 0x12, 0x45, 0x00, 0x10, 0x09, +/* 00015C50 */ 0x08, 0x00, 0x45, 0x00, 0x0E, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x01, 0x18, 0x00, 0x00, +/* 00015C60 */ 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, +/* 00015C70 */ 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0xFE, 0x05, 0x02, 0x69, 0xFE, +/* 00015C80 */ 0x06, 0x02, 0xFE, 0x9C, 0x01, 0xFE, 0x30, 0x02, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, +/* 00015C90 */ 0x01, 0xFE, 0x95, 0x01, 0xFE, 0xFB, 0xC1, 0x0E, 0x0E, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, +/* 00015CA0 */ 0x10, 0x00, 0x23, 0x00, 0x16, 0x00, 0x54, 0x00, 0x1F, 0x00, 0x63, 0x00, 0x18, 0x00, 0x47, 0x00, +/* 00015CB0 */ 0x0A, 0x00, 0x32, 0x00, 0x17, 0x00, 0x2B, 0x00, 0x18, 0x00, 0x51, 0x00, 0x19, 0x00, 0x45, 0x00, +/* 00015CC0 */ 0x13, 0x00, 0x50, 0x00, 0x42, 0x00, 0xF4, 0x00, 0x06, 0x00, 0x28, 0x00, 0x08, 0x00, 0x1D, 0x00, +/* 00015CD0 */ 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x07, 0x10, 0x03, 0x00, 0xFE, 0x51, 0x04, 0x5F, 0xA0, 0x41, 0xE3, +/* 00015CE0 */ 0x00, 0xFE, 0x21, 0x04, 0x4C, 0xFE, 0xFD, 0xBE, 0xFE, 0xFD, 0xBE, 0x0B, 0xFE, 0x00, 0x90, 0x01, +/* 00015CF0 */ 0x01, 0xFE, 0xFD, 0xBE, 0xFE, 0xFF, 0x01, 0xFE, 0xFF, 0x01, 0x07, 0x0B, 0x10, 0x06, 0x36, 0x34, +/* 00015D00 */ 0x03, 0x05, 0x04, 0x04, 0x04, 0x04, 0x01, 0x0F, 0x07, 0x06, 0xFE, 0xA4, 0x03, 0x05, 0xFE, 0x0F, +/* 00015D10 */ 0x04, 0x06, 0xFE, 0x0E, 0x04, 0x01, 0x00, 0x01, 0x01, 0x08, 0x0C, 0x0B, 0xAD, 0xB1, 0x0D, 0x58, +/* 00015D20 */ 0x0B, 0x4E, 0x0C, 0x4E, 0x0E, 0x2A, 0x10, 0x0B, 0x15, 0x03, 0x00, 0x10, 0x03, 0x09, 0x25, 0x00, +/* 00015D30 */ 0x8E, 0x03, 0x0B, 0x10, 0xE3, 0x10, 0x0B, 0x10, 0x00, 0x0F, 0x18, 0x00, 0x10, 0x8E, 0x03, 0x03, +/* 00015D40 */ 0x11, 0x6C, 0x10, 0x11, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x11, 0x59, 0x01, 0x04, 0x59, 0x02, +/* 00015D50 */ 0x05, 0x1F, 0x03, 0xFF, 0x10, 0x8E, 0x03, 0x36, 0x11, 0x4A, 0x11, 0x6C, 0x10, 0x11, 0x01, 0x07, +/* 00015D60 */ 0x01, 0x00, 0x59, 0x00, 0x11, 0x1F, 0x01, 0x10, 0x10, 0x45, 0x0C, 0x10, 0x8E, 0x01, 0x02, 0x10, +/* 00015D70 */ 0x4A, 0x10, 0x07, 0x04, 0x00, 0x59, 0x00, 0x08, 0x59, 0x01, 0x0C, 0x97, 0x11, 0x0D, 0x06, 0x59, +/* 00015D80 */ 0x02, 0x11, 0x97, 0x11, 0x0D, 0x07, 0x59, 0x03, 0x11, 0x1F, 0x04, 0xFF, 0x10, 0x8E, 0x03, 0x24, +/* 00015D90 */ 0x11, 0x6C, 0x10, 0x11, 0x02, 0x07, 0x02, 0x00, 0x59, 0x00, 0x11, 0x59, 0x01, 0x0B, 0x1F, 0x02, +/* 00015DA0 */ 0x10, 0x10, 0x45, 0x0E, 0x10, 0x8E, 0x03, 0x03, 0x11, 0x6C, 0x10, 0x11, 0x03, 0x07, 0x05, 0x00, +/* 00015DB0 */ 0x59, 0x00, 0x11, 0x59, 0x01, 0x0E, 0x59, 0x02, 0x0C, 0x59, 0x03, 0x09, 0x59, 0x04, 0x0A, 0x1F, +/* 00015DC0 */ 0x05, 0x00, 0x10, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB6, 0x02, 0x69, 0xFE, 0x23, +/* 00015DD0 */ 0x03, 0xFE, 0xF8, 0x01, 0xFE, 0x25, 0xBF, 0x07, 0x08, 0x00, 0x00, 0x00, 0x18, 0x00, 0x4D, 0x00, +/* 00015DE0 */ 0x18, 0x00, 0x68, 0x00, 0x17, 0x00, 0x2C, 0x00, 0x21, 0x00, 0x4E, 0x00, 0x18, 0x00, 0x2F, 0x00, +/* 00015DF0 */ 0x23, 0x00, 0x78, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x14, 0x04, +/* 00015E00 */ 0x27, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x0B, 0x04, 0x4B, 0xFE, 0x0D, 0xB5, 0xFE, 0x0D, 0xB5, 0x01, +/* 00015E10 */ 0xFE, 0x00, 0x90, 0x04, 0x04, 0xFE, 0x0D, 0xB5, 0xFE, 0x8E, 0x09, 0xFE, 0x8E, 0x09, 0x11, 0x15, +/* 00015E20 */ 0x23, 0x07, 0xE0, 0xCA, 0x03, 0x08, 0x17, 0x17, 0x17, 0x17, 0x22, 0x08, 0x06, 0xFE, 0xE0, 0x03, +/* 00015E30 */ 0x06, 0xFE, 0xA3, 0x03, 0x05, 0xFE, 0xDF, 0x03, 0x05, 0xFE, 0x9C, 0x03, 0x06, 0xFE, 0x17, 0x04, +/* 00015E40 */ 0x06, 0xFE, 0x18, 0x04, 0x06, 0xFE, 0x19, 0x04, 0x06, 0xFE, 0x1A, 0x04, 0x06, 0xFE, 0x1B, 0x04, +/* 00015E50 */ 0x01, 0x00, 0x06, 0xFE, 0x1C, 0x04, 0x06, 0xFE, 0x1D, 0x04, 0x06, 0xFE, 0x1E, 0x04, 0x06, 0xFE, +/* 00015E60 */ 0x37, 0x03, 0x01, 0x03, 0x06, 0xFE, 0x1F, 0x04, 0x06, 0xFE, 0xA2, 0x03, 0x0B, 0xFE, 0xD2, 0x02, +/* 00015E70 */ 0x4E, 0x18, 0x4E, 0x19, 0x4E, 0x1A, 0x4E, 0x1B, 0x4E, 0x1C, 0x4E, 0x1D, 0x4E, 0x1E, 0x4E, 0x1F, +/* 00015E80 */ 0x4E, 0x20, 0x4E, 0x21, 0x8E, 0x02, 0x12, 0x23, 0x4A, 0x23, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, +/* 00015E90 */ 0x59, 0x01, 0x16, 0x1F, 0x02, 0x23, 0x23, 0x45, 0x18, 0x23, 0xA8, 0x23, 0x14, 0x03, 0x00, 0x17, +/* 00015EA0 */ 0x23, 0x09, 0x1A, 0x00, 0x8E, 0x03, 0x36, 0x25, 0x4A, 0x25, 0x6C, 0x24, 0x25, 0x00, 0x07, 0x01, +/* 00015EB0 */ 0x00, 0x59, 0x00, 0x25, 0x1F, 0x01, 0x24, 0x24, 0x45, 0x23, 0x24, 0x09, 0x18, 0x00, 0x8E, 0x03, +/* 00015EC0 */ 0x24, 0x25, 0x6C, 0x24, 0x25, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x25, 0x59, 0x01, 0x17, 0x1F, +/* 00015ED0 */ 0x02, 0x24, 0x24, 0x46, 0x23, 0x24, 0x45, 0x17, 0x23, 0x8E, 0x03, 0x36, 0x24, 0x4A, 0x24, 0x6C, +/* 00015EE0 */ 0x23, 0x24, 0x02, 0x07, 0x01, 0x00, 0x59, 0x00, 0x24, 0x1F, 0x01, 0x23, 0x23, 0x45, 0x19, 0x23, +/* 00015EF0 */ 0x45, 0x23, 0x19, 0x8E, 0x02, 0x02, 0x24, 0x4A, 0x24, 0x07, 0x06, 0x00, 0x59, 0x00, 0x02, 0x59, +/* 00015F00 */ 0x01, 0x17, 0x59, 0x02, 0x03, 0x59, 0x03, 0x04, 0xCF, 0x25, 0x02, 0xA1, 0x00, 0x05, 0x25, 0xA1, +/* 00015F10 */ 0x01, 0x06, 0x25, 0x59, 0x04, 0x25, 0x59, 0x05, 0x05, 0x1F, 0x06, 0x24, 0x24, 0x76, 0x24, 0x23, +/* 00015F20 */ 0x03, 0x8E, 0x02, 0x0C, 0x23, 0x4A, 0x23, 0x07, 0x05, 0x00, 0x59, 0x00, 0x02, 0x8E, 0x03, 0x03, +/* 00015F30 */ 0x24, 0x5E, 0x24, 0x24, 0x04, 0x59, 0x01, 0x24, 0x59, 0x02, 0x18, 0x59, 0x03, 0x19, 0xCF, 0x24, +/* 00015F40 */ 0x01, 0xA1, 0x00, 0x07, 0x24, 0x59, 0x04, 0x24, 0x1F, 0x05, 0x23, 0x23, 0x45, 0x1A, 0x23, 0x5E, +/* 00015F50 */ 0x23, 0x1A, 0x05, 0x76, 0x23, 0x15, 0x06, 0x5E, 0x23, 0x1A, 0x07, 0x76, 0x23, 0x15, 0x08, 0x8E, +/* 00015F60 */ 0x02, 0x02, 0x23, 0x4A, 0x23, 0x07, 0x06, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x17, 0x59, 0x02, +/* 00015F70 */ 0x08, 0x59, 0x03, 0x04, 0xCF, 0x24, 0x03, 0xA1, 0x00, 0x09, 0x24, 0xA1, 0x01, 0x0A, 0x24, 0xA1, +/* 00015F80 */ 0x02, 0x0B, 0x24, 0x59, 0x04, 0x24, 0x59, 0x05, 0x09, 0x1F, 0x06, 0x23, 0x23, 0x45, 0x1B, 0x23, +/* 00015F90 */ 0x76, 0x1B, 0x15, 0x09, 0x8E, 0x03, 0x03, 0x23, 0x5E, 0x23, 0x23, 0x0A, 0x97, 0x23, 0x23, 0x1B, +/* 00015FA0 */ 0x76, 0x23, 0x15, 0x0B, 0x41, 0x23, 0x1B, 0x0B, 0x45, 0x1C, 0x23, 0x8E, 0x02, 0x02, 0x23, 0x4A, +/* 00015FB0 */ 0x23, 0x07, 0x06, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x17, 0x59, 0x02, 0x0B, 0x59, 0x03, 0x04, +/* 00015FC0 */ 0xA8, 0x24, 0x59, 0x04, 0x24, 0xA8, 0x24, 0x59, 0x05, 0x24, 0x1F, 0x06, 0x23, 0x23, 0x45, 0x1D, +/* 00015FD0 */ 0x23, 0xA8, 0x23, 0x15, 0x03, 0x00, 0x1D, 0x23, 0x09, 0x2F, 0x00, 0x8E, 0x02, 0x10, 0x23, 0x4A, +/* 00015FE0 */ 0x23, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x1D, 0x1F, 0x02, 0x23, 0x23, 0x0F, 0x18, +/* 00015FF0 */ 0x00, 0x23, 0x8E, 0x03, 0x03, 0x24, 0x6C, 0x23, 0x24, 0x0C, 0x07, 0x02, 0x00, 0x59, 0x00, 0x24, +/* 00016000 */ 0x59, 0x01, 0x1D, 0x1F, 0x02, 0xFF, 0x23, 0x09, 0x20, 0x00, 0xA8, 0x23, 0x14, 0x03, 0x00, 0x1D, +/* 00016010 */ 0x23, 0x09, 0x16, 0x00, 0x0E, 0x12, 0x00, 0x1C, 0x8E, 0x03, 0x03, 0x24, 0x6C, 0x23, 0x24, 0x0D, +/* 00016020 */ 0x07, 0x01, 0x00, 0x59, 0x00, 0x24, 0x1F, 0x01, 0xFF, 0x23, 0x45, 0x1E, 0x0C, 0x0E, 0x36, 0x00, +/* 00016030 */ 0x1C, 0x8E, 0x03, 0x36, 0x24, 0x4A, 0x24, 0x6C, 0x23, 0x24, 0x0E, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 00016040 */ 0x24, 0x59, 0x01, 0x1D, 0x1F, 0x02, 0x23, 0x23, 0x45, 0x1D, 0x23, 0x76, 0x1D, 0x15, 0x0F, 0x8E, +/* 00016050 */ 0x03, 0x03, 0x24, 0x6C, 0x23, 0x24, 0x10, 0x07, 0x02, 0x00, 0x59, 0x00, 0x24, 0x59, 0x01, 0x1D, +/* 00016060 */ 0x1F, 0x02, 0x23, 0x23, 0x45, 0x1E, 0x23, 0x8E, 0x02, 0x02, 0x23, 0x4A, 0x23, 0x07, 0x06, 0x00, +/* 00016070 */ 0x59, 0x00, 0x02, 0x59, 0x01, 0x17, 0x59, 0x02, 0x0D, 0x59, 0x03, 0x04, 0xCF, 0x24, 0x03, 0xA1, +/* 00016080 */ 0x00, 0x0E, 0x24, 0xA1, 0x01, 0x0F, 0x24, 0xA1, 0x02, 0x10, 0x24, 0x59, 0x04, 0x24, 0x59, 0x05, +/* 00016090 */ 0x0F, 0x1F, 0x06, 0x23, 0x23, 0x45, 0x1F, 0x23, 0x0E, 0x14, 0x00, 0x1C, 0x76, 0x1F, 0x15, 0x11, +/* 000160A0 */ 0x8E, 0x03, 0x03, 0x23, 0x5E, 0x23, 0x23, 0x12, 0x97, 0x23, 0x23, 0x1F, 0x76, 0x23, 0x15, 0x13, +/* 000160B0 */ 0xA8, 0x23, 0x45, 0x20, 0x23, 0xA8, 0x23, 0x45, 0x21, 0x23, 0x0E, 0x09, 0x00, 0x1C, 0x45, 0x20, +/* 000160C0 */ 0x1E, 0x45, 0x21, 0x1E, 0x09, 0x14, 0x00, 0x45, 0x20, 0x0C, 0x14, 0x03, 0x00, 0x1B, 0x0A, 0x09, +/* 000160D0 */ 0x06, 0x00, 0x45, 0x21, 0x0C, 0x09, 0x03, 0x00, 0x45, 0x21, 0x11, 0x8E, 0x02, 0x15, 0x23, 0x4A, +/* 000160E0 */ 0x23, 0x07, 0x05, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x15, 0x59, 0x02, 0x17, 0x59, 0x03, 0x20, +/* 000160F0 */ 0x59, 0x04, 0x21, 0x1F, 0x05, 0xFF, 0x23, 0x45, 0x23, 0x15, 0x8E, 0x02, 0x02, 0x24, 0x4A, 0x24, +/* 00016100 */ 0x07, 0x06, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x17, 0x59, 0x02, 0x12, 0x59, 0x03, 0x13, 0xA8, +/* 00016110 */ 0x25, 0x59, 0x04, 0x25, 0x59, 0x05, 0x14, 0x1F, 0x06, 0x24, 0x24, 0x76, 0x24, 0x23, 0x14, 0x76, +/* 00016120 */ 0x14, 0x15, 0x15, 0x8E, 0x03, 0x03, 0x24, 0x6C, 0x23, 0x24, 0x16, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 00016130 */ 0x24, 0x59, 0x01, 0x15, 0x1F, 0x02, 0xFF, 0x23, 0x45, 0x00, 0x15, 0x09, 0x02, 0x00, 0xA8, 0x00, +/* 00016140 */ 0x24, 0x00, 0x69, 0xFE, 0x21, 0x03, 0x69, 0xFE, 0x0E, 0x02, 0xFE, 0xF1, 0x01, 0xFE, 0x0D, 0x02, +/* 00016150 */ 0xFE, 0x0D, 0x02, 0xFE, 0x19, 0x02, 0xFE, 0x49, 0x02, 0xFE, 0x18, 0x04, 0xFE, 0x25, 0x02, 0xFE, +/* 00016160 */ 0x43, 0x02, 0xFE, 0xB7, 0x02, 0xFE, 0xB8, 0x02, 0xFE, 0x7B, 0x01, 0xFE, 0x40, 0x02, 0xFE, 0xFB, +/* 00016170 */ 0x01, 0xFE, 0x41, 0x02, 0xFE, 0x26, 0x02, 0xFE, 0x42, 0x02, 0xFE, 0x4A, 0x02, 0xFE, 0x20, 0x04, +/* 00016180 */ 0xFE, 0xF9, 0x01, 0xFE, 0x3B, 0xB5, 0x28, 0x14, 0x00, 0x00, 0x00, 0x16, 0x00, 0x46, 0x00, 0x3F, +/* 00016190 */ 0x00, 0x58, 0x00, 0x17, 0x00, 0x24, 0x00, 0x31, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x62, 0x00, 0x08, +/* 000161A0 */ 0x00, 0x22, 0x00, 0x08, 0x00, 0x28, 0x00, 0x31, 0x00, 0x70, 0x00, 0x04, 0x00, 0x1E, 0x00, 0x10, +/* 000161B0 */ 0x00, 0x43, 0x00, 0x07, 0x00, 0x37, 0x00, 0x26, 0x00, 0x5B, 0x00, 0x21, 0x00, 0x55, 0x00, 0x18, +/* 000161C0 */ 0x00, 0x40, 0x00, 0x0E, 0x00, 0x3D, 0x00, 0x12, 0x00, 0x40, 0x00, 0x03, 0x00, 0x1D, 0x00, 0x04, +/* 000161D0 */ 0x00, 0x23, 0x00, 0x1A, 0x00, 0x34, 0x00, 0x04, 0x00, 0x28, 0x00, 0x18, 0x00, 0x48, 0x00, 0x31, +/* 000161E0 */ 0x00, 0x79, 0x00, 0x04, 0x00, 0x23, 0x00, 0x04, 0x00, 0x36, 0x00, 0x10, 0x00, 0x6C, 0x00, 0x05, +/* 000161F0 */ 0x00, 0x11, 0x00, 0x05, 0x00, 0x19, 0x00, 0x04, 0x00, 0x23, 0x00, 0x03, 0x00, 0x27, 0x00, 0x06, +/* 00016200 */ 0x00, 0x3C, 0x00, 0x03, 0x00, 0x21, 0x00, 0x08, 0x00, 0x2F, 0x00, 0x06, 0x00, 0x3E, 0x00, 0x03, +/* 00016210 */ 0x00, 0x3E, 0x00, 0x1C, 0x00, 0x51, 0x00, 0x28, 0x00, 0x5D, 0x00, 0x04, 0x00, 0x7C, 0x00, 0x15, +/* 00016220 */ 0x00, 0x2D, 0x00, 0x08, 0x00, 0x13, 0x00, 0x00, 0x7E, 0x5D, 0x00, 0xC1, 0x13, 0x1A, 0x4B, 0x00, +/* 00016230 */ 0xFE, 0x56, 0x03, 0x16, 0xA0, 0x41, 0xD1, 0x00, 0x42, 0xFE, 0x13, 0x92, 0xFE, 0x13, 0x92, 0x07, +/* 00016240 */ 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFE, 0x13, 0x92, 0xFE, 0x12, 0x22, 0xFE, 0x12, 0x22, 0x05, 0xFE, +/* 00016250 */ 0xE5, 0x03, 0xFE, 0xE6, 0x03, 0xFE, 0xE7, 0x03, 0xFE, 0x4B, 0x02, 0xFE, 0x4F, 0x02, 0x0A, 0x18, +/* 00016260 */ 0x1D, 0x09, 0xAD, 0xAB, 0x02, 0x07, 0x1B, 0x1B, 0x1B, 0x1B, 0x05, 0x1A, 0x1B, 0x1C, 0x06, 0xFE, +/* 00016270 */ 0x27, 0x03, 0x06, 0xFE, 0xE8, 0x03, 0x05, 0xFE, 0xE9, 0x03, 0x08, 0x07, 0x05, 0xFE, 0xEA, 0x03, +/* 00016280 */ 0x05, 0xFE, 0xEB, 0x03, 0x05, 0xFE, 0x34, 0x03, 0x06, 0xFE, 0x38, 0x03, 0x06, 0xFE, 0x2A, 0x03, +/* 00016290 */ 0x06, 0xFE, 0x2B, 0x03, 0x0B, 0x06, 0xFE, 0x2C, 0x03, 0x0C, 0x06, 0xFE, 0x2D, 0x03, 0x06, 0xFE, +/* 000162A0 */ 0xEC, 0x03, 0x06, 0xFE, 0xED, 0x03, 0x06, 0xFE, 0xEE, 0x03, 0x05, 0xFE, 0xEF, 0x03, 0x05, 0xFE, +/* 000162B0 */ 0xF0, 0x03, 0x06, 0xFE, 0xF1, 0x03, 0x06, 0xFE, 0x77, 0x03, 0xFE, 0x5C, 0x02, 0x4E, 0x18, 0x4E, +/* 000162C0 */ 0x19, 0x4E, 0x1D, 0x96, 0x02, 0x1D, 0x4E, 0x1D, 0x96, 0x03, 0x1D, 0x4E, 0x1D, 0x96, 0x04, 0x1D, +/* 000162D0 */ 0x4E, 0x1D, 0x96, 0x05, 0x1D, 0x4E, 0x1D, 0x96, 0x06, 0x1D, 0x8E, 0x02, 0x32, 0x1D, 0x15, 0x03, +/* 000162E0 */ 0x00, 0x1D, 0x02, 0x09, 0x11, 0x00, 0x8E, 0x02, 0x32, 0x1D, 0x15, 0x03, 0x00, 0x1D, 0x03, 0x09, +/* 000162F0 */ 0x05, 0x00, 0xA8, 0x00, 0x09, 0x20, 0x02, 0xD6, 0x00, 0x1D, 0x96, 0x02, 0x1D, 0xA8, 0x1D, 0x96, +/* 00016300 */ 0x03, 0x1D, 0x8E, 0x02, 0x03, 0x1E, 0x6C, 0x1D, 0x1E, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x1E, +/* 00016310 */ 0x8E, 0x01, 0x06, 0x1F, 0x4A, 0x1F, 0x07, 0x03, 0x00, 0x59, 0x00, 0x05, 0x59, 0x01, 0x04, 0xD6, +/* 00016320 */ 0x01, 0x20, 0x59, 0x02, 0x20, 0x1F, 0x03, 0x1F, 0x1F, 0x59, 0x01, 0x1F, 0x8E, 0x02, 0x03, 0x1F, +/* 00016330 */ 0x5E, 0x1F, 0x1F, 0x01, 0x5E, 0x1F, 0x1F, 0x02, 0x59, 0x02, 0x1F, 0x1F, 0x03, 0xFF, 0x1D, 0x8E, +/* 00016340 */ 0x02, 0x32, 0x1D, 0x14, 0x03, 0x00, 0x1D, 0x03, 0x09, 0x05, 0x00, 0xA8, 0x00, 0x09, 0xC7, 0x01, +/* 00016350 */ 0xCD, 0x1D, 0x96, 0x04, 0x1D, 0x8E, 0x02, 0x23, 0x1D, 0x07, 0x03, 0x00, 0x59, 0x00, 0x05, 0x59, +/* 00016360 */ 0x01, 0x07, 0xD6, 0x02, 0x1E, 0x59, 0x02, 0x1E, 0x1F, 0x03, 0x1D, 0x1D, 0x96, 0x05, 0x1D, 0x8E, +/* 00016370 */ 0x01, 0x06, 0x1D, 0x4A, 0x1D, 0x07, 0x03, 0x00, 0x59, 0x00, 0x05, 0x59, 0x01, 0x08, 0xD6, 0x03, +/* 00016380 */ 0x1E, 0x59, 0x02, 0x1E, 0x1F, 0x03, 0x1D, 0x1D, 0x96, 0x06, 0x1D, 0x8E, 0x01, 0x06, 0x1D, 0x4A, +/* 00016390 */ 0x1D, 0x07, 0x03, 0x00, 0x59, 0x00, 0x05, 0x59, 0x01, 0x09, 0xD6, 0x04, 0x1E, 0x59, 0x02, 0x1E, +/* 000163A0 */ 0x1F, 0x03, 0x1D, 0x1D, 0x45, 0x18, 0x1D, 0x8E, 0x02, 0x36, 0x1E, 0x4A, 0x1E, 0x6C, 0x1D, 0x1E, +/* 000163B0 */ 0x03, 0x07, 0x04, 0x00, 0x59, 0x00, 0x1E, 0x92, 0x05, 0x1F, 0x59, 0x01, 0x1F, 0x59, 0x02, 0x0A, +/* 000163C0 */ 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x7A, 0x18, 0x1F, +/* 000163D0 */ 0x04, 0x7A, 0x0D, 0x1F, 0x05, 0x7A, 0x0F, 0x1F, 0x06, 0x7A, 0x0D, 0x1F, 0x07, 0x59, 0x03, 0x1F, +/* 000163E0 */ 0x1F, 0x04, 0xFF, 0x1D, 0x8E, 0x02, 0x36, 0x1E, 0x4A, 0x1E, 0x6C, 0x1D, 0x1E, 0x08, 0x07, 0x04, +/* 000163F0 */ 0x00, 0x59, 0x00, 0x1E, 0x92, 0x05, 0x1F, 0x59, 0x01, 0x1F, 0x59, 0x02, 0x11, 0xCE, 0x18, 0x00, +/* 00016400 */ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x92, 0x04, 0x20, 0x7A, 0x20, 0x1F, +/* 00016410 */ 0x09, 0x7A, 0x0F, 0x1F, 0x0A, 0x7A, 0x0F, 0x1F, 0x0B, 0x7A, 0x0F, 0x1F, 0x0C, 0x59, 0x03, 0x1F, +/* 00016420 */ 0x1F, 0x04, 0xFF, 0x1D, 0x8E, 0x02, 0x36, 0x1E, 0x4A, 0x1E, 0x6C, 0x1D, 0x1E, 0x0D, 0x07, 0x04, +/* 00016430 */ 0x00, 0x59, 0x00, 0x1E, 0x92, 0x04, 0x1F, 0x59, 0x01, 0x1F, 0x59, 0x02, 0x12, 0xCE, 0x30, 0x00, +/* 00016440 */ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x92, 0x05, 0x20, 0x7A, 0x20, 0x1F, +/* 00016450 */ 0x0E, 0x7A, 0x0D, 0x1F, 0x0F, 0x7A, 0x0F, 0x1F, 0x10, 0x7A, 0x0D, 0x1F, 0x11, 0x59, 0x03, 0x1F, +/* 00016460 */ 0x1F, 0x04, 0xFF, 0x1D, 0x8E, 0x02, 0x36, 0x1E, 0x4A, 0x1E, 0x6C, 0x1D, 0x1E, 0x12, 0x07, 0x04, +/* 00016470 */ 0x00, 0x59, 0x00, 0x1E, 0x92, 0x04, 0x1F, 0x59, 0x01, 0x1F, 0x59, 0x02, 0x13, 0xCE, 0x48, 0x00, +/* 00016480 */ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x8E, 0x01, 0x06, 0x20, 0x4A, 0x20, +/* 00016490 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x05, 0x59, 0x01, 0x14, 0xD6, 0x05, 0x21, 0x59, 0x02, 0x21, 0x1F, +/* 000164A0 */ 0x03, 0x20, 0x20, 0x7A, 0x20, 0x1F, 0x13, 0x7A, 0x0D, 0x1F, 0x14, 0x7A, 0x0F, 0x1F, 0x15, 0x7A, +/* 000164B0 */ 0x0D, 0x1F, 0x16, 0x59, 0x03, 0x1F, 0x1F, 0x04, 0xFF, 0x1D, 0x8E, 0x01, 0x06, 0x1D, 0x4A, 0x1D, +/* 000164C0 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x05, 0x59, 0x01, 0x15, 0xD6, 0x06, 0x1E, 0x59, 0x02, 0x1E, 0x1F, +/* 000164D0 */ 0x03, 0x1D, 0x1D, 0x45, 0x19, 0x1D, 0x8E, 0x02, 0x36, 0x1E, 0x4A, 0x1E, 0x6C, 0x1D, 0x1E, 0x17, +/* 000164E0 */ 0x07, 0x04, 0x00, 0x59, 0x00, 0x1E, 0x92, 0x04, 0x1F, 0x59, 0x01, 0x1F, 0x59, 0x02, 0x16, 0xCE, +/* 000164F0 */ 0x60, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x7A, 0x19, 0x1F, 0x18, +/* 00016500 */ 0x7A, 0x0F, 0x1F, 0x19, 0x7A, 0x0D, 0x1F, 0x1A, 0x59, 0x03, 0x1F, 0x1F, 0x04, 0xFF, 0x1D, 0x92, +/* 00016510 */ 0x05, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x05, 0x74, 0x00, 0x60, 0x00, 0x00, 0x00, +/* 00016520 */ 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, +/* 00016530 */ 0x95, 0x01, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00016540 */ 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, +/* 00016550 */ 0x30, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, +/* 00016560 */ 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, +/* 00016570 */ 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, +/* 00016580 */ 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, +/* 00016590 */ 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, +/* 000165A0 */ 0x95, 0x01, 0x00, 0x00, 0xFE, 0x04, 0x02, 0xFE, 0x2F, 0x02, 0xFE, 0x2E, 0x02, 0xFE, 0x9C, 0x01, +/* 000165B0 */ 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, +/* 000165C0 */ 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x97, +/* 000165D0 */ 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, +/* 000165E0 */ 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x98, 0x01, 0xFE, +/* 000165F0 */ 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x29, 0x92, 0x13, 0x1D, 0x00, 0x00, 0x00, 0x18, 0x00, 0x40, +/* 00016600 */ 0x00, 0x05, 0x00, 0x1B, 0x00, 0x06, 0x00, 0x88, 0x0A, 0x05, 0x00, 0x73, 0x00, 0x3D, 0x00, 0x89, +/* 00016610 */ 0x05, 0x0C, 0x00, 0x29, 0x00, 0x05, 0x00, 0x1B, 0x00, 0x05, 0x00, 0x27, 0x00, 0x1A, 0x00, 0x43, +/* 00016620 */ 0x03, 0x1C, 0x00, 0x82, 0x02, 0x1C, 0x00, 0x15, 0x01, 0x3D, 0x00, 0xCA, 0x00, 0x40, 0x00, 0xC1, +/* 00016630 */ 0x00, 0x40, 0x00, 0xC0, 0x00, 0x56, 0x00, 0xBF, 0x04, 0x1C, 0x00, 0x17, 0x02, 0x39, 0x00, 0xA1, +/* 00016640 */ 0x00, 0x08, 0x00, 0x15, 0x00, 0x00, 0x6D, 0x6D, 0x01, 0x00, 0xAB, 0x6B, 0x01, 0x00, 0x2A, 0x6A, +/* 00016650 */ 0x01, 0x00, 0x08, 0x69, 0x01, 0x00, 0x7B, 0x68, 0x01, 0x00, 0x43, 0x67, 0x01, 0x00, 0x62, 0x66, +/* 00016660 */ 0x01, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0xF9, 0x03, 0x3D, 0xA0, 0x41, +/* 00016670 */ 0xD1, 0x00, 0x49, 0xFE, 0x8C, 0xB1, 0xFE, 0x8C, 0xB1, 0x09, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFE, +/* 00016680 */ 0x8C, 0xB1, 0xFE, 0xD7, 0x01, 0xFE, 0xD7, 0x01, 0x05, 0x05, 0x08, 0x04, 0x23, 0x22, 0x03, 0x01, +/* 00016690 */ 0x05, 0x05, 0x05, 0x05, 0x07, 0x06, 0xFE, 0x94, 0x03, 0x05, 0xFE, 0x09, 0x04, 0x06, 0xFE, 0x2E, +/* 000166A0 */ 0x03, 0x71, 0x58, 0x05, 0x4E, 0x06, 0x2A, 0x08, 0x05, 0x15, 0x03, 0x00, 0x08, 0x02, 0x09, 0x18, +/* 000166B0 */ 0x00, 0x8E, 0x03, 0x03, 0x09, 0x6C, 0x08, 0x09, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x09, 0x59, +/* 000166C0 */ 0x01, 0x03, 0x59, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x08, 0x8E, 0x03, 0x03, 0x09, 0x6C, 0x08, 0x09, +/* 000166D0 */ 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x09, 0x59, 0x01, 0x05, 0x1F, 0x02, 0x08, 0x08, 0x45, 0x06, +/* 000166E0 */ 0x08, 0xA8, 0x08, 0x14, 0x08, 0x00, 0x06, 0x08, 0x5E, 0x08, 0x06, 0x02, 0x0F, 0x18, 0x00, 0x08, +/* 000166F0 */ 0x8E, 0x03, 0x03, 0x09, 0x6C, 0x08, 0x09, 0x03, 0x07, 0x03, 0x00, 0x59, 0x00, 0x09, 0x59, 0x01, +/* 00016700 */ 0x03, 0x59, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x08, 0x5E, 0x00, 0x06, 0x04, 0x09, 0x02, 0x00, 0xA8, +/* 00016710 */ 0x00, 0x24, 0x00, 0xFE, 0xB6, 0x02, 0xFE, 0x05, 0x02, 0xFE, 0x06, 0x04, 0xFE, 0xB6, 0x02, 0xFE, +/* 00016720 */ 0x08, 0x04, 0xFE, 0xA6, 0xB1, 0x07, 0x04, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x30, 0x00, 0x18, 0x00, +/* 00016730 */ 0x65, 0x00, 0x18, 0x00, 0x41, 0x00, 0x0F, 0x00, 0x57, 0x00, 0x18, 0x00, 0x65, 0x00, 0x09, 0x00, +/* 00016740 */ 0x2A, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0xDE, 0x03, 0x51, 0xA0, +/* 00016750 */ 0x41, 0xC3, 0x00, 0xFE, 0xEE, 0x03, 0x48, 0xFE, 0x22, 0xAD, 0xFE, 0x22, 0xAD, 0x09, 0xFE, 0x00, +/* 00016760 */ 0x90, 0x01, 0x01, 0xFE, 0x22, 0xAD, 0xFE, 0x4A, 0x03, 0xFE, 0x4A, 0x03, 0x06, 0x0D, 0x11, 0x04, +/* 00016770 */ 0x33, 0x31, 0x03, 0x02, 0x04, 0x04, 0x04, 0x04, 0x10, 0x06, 0xFE, 0x94, 0x03, 0x05, 0xFE, 0x0A, +/* 00016780 */ 0x04, 0x06, 0xFE, 0x2E, 0x03, 0x06, 0xFE, 0xD7, 0x03, 0x06, 0xFE, 0xF2, 0x03, 0x06, 0xFE, 0xFE, +/* 00016790 */ 0x03, 0x06, 0xFE, 0x03, 0x04, 0x06, 0xFE, 0x05, 0x04, 0x06, 0xFE, 0xF8, 0x03, 0x06, 0xFE, 0xF9, +/* 000167A0 */ 0x03, 0x08, 0xA7, 0x58, 0x0D, 0x4E, 0x0E, 0x4E, 0x0F, 0x2A, 0x11, 0x0D, 0x15, 0x03, 0x00, 0x11, +/* 000167B0 */ 0x02, 0x09, 0x18, 0x00, 0x8E, 0x03, 0x03, 0x12, 0x6C, 0x11, 0x12, 0x00, 0x07, 0x03, 0x00, 0x59, +/* 000167C0 */ 0x00, 0x12, 0x59, 0x01, 0x03, 0x59, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x11, 0x8E, 0x03, 0x03, 0x12, +/* 000167D0 */ 0x6C, 0x11, 0x12, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x12, 0x59, 0x01, 0x0D, 0x1F, 0x02, 0x11, +/* 000167E0 */ 0x11, 0x45, 0x0E, 0x11, 0xA8, 0x11, 0x14, 0x08, 0x00, 0x0E, 0x11, 0x5E, 0x11, 0x0E, 0x02, 0x0F, +/* 000167F0 */ 0x18, 0x00, 0x11, 0x8E, 0x03, 0x03, 0x12, 0x6C, 0x11, 0x12, 0x03, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 00016800 */ 0x12, 0x59, 0x01, 0x03, 0x59, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x11, 0xCF, 0x11, 0x07, 0xA1, 0x00, +/* 00016810 */ 0x05, 0x11, 0xA1, 0x01, 0x06, 0x11, 0xA1, 0x02, 0x07, 0x11, 0xA1, 0x03, 0x08, 0x11, 0xA1, 0x04, +/* 00016820 */ 0x09, 0x11, 0xA1, 0x05, 0x0A, 0x11, 0xA1, 0x06, 0x0B, 0x11, 0x45, 0x0F, 0x11, 0x8E, 0x02, 0x17, +/* 00016830 */ 0x11, 0x4A, 0x11, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0C, 0x59, 0x01, 0x0F, 0x59, 0x02, 0x0E, 0x1F, +/* 00016840 */ 0x03, 0x00, 0x11, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB6, 0x02, 0xFE, 0x05, 0x02, +/* 00016850 */ 0xFE, 0x06, 0x04, 0xFE, 0xB6, 0x02, 0xFE, 0x4F, 0xAD, 0x08, 0x06, 0x00, 0x00, 0x00, 0x0B, 0x00, +/* 00016860 */ 0x34, 0x00, 0x18, 0x00, 0x74, 0x00, 0x18, 0x00, 0x45, 0x00, 0x0F, 0x00, 0x5B, 0x00, 0x18, 0x00, +/* 00016870 */ 0x75, 0x00, 0x22, 0x00, 0x1E, 0x01, 0x1B, 0x00, 0x41, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, +/* 00016880 */ 0x10, 0x03, 0x00, 0xFE, 0xC6, 0x03, 0x5A, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x38, 0x03, 0x47, 0xFE, +/* 00016890 */ 0x8A, 0xA9, 0xFE, 0x8A, 0xA9, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x02, 0xFE, 0x8A, 0xA9, 0xB8, 0xB8, +/* 000168A0 */ 0x05, 0x03, 0x06, 0x08, 0x17, 0x16, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x05, 0x08, 0x45, 0x15, +/* 000168B0 */ 0x05, 0x00, 0x04, 0x02, 0xA8, 0x06, 0x45, 0x04, 0x06, 0x8E, 0x02, 0x16, 0x06, 0x4A, 0x06, 0x07, +/* 000168C0 */ 0x04, 0x00, 0x59, 0x00, 0x02, 0x8E, 0x03, 0x03, 0x07, 0x5E, 0x07, 0x07, 0x00, 0x59, 0x01, 0x07, +/* 000168D0 */ 0x8E, 0x02, 0x12, 0x07, 0x4A, 0x07, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x03, 0x1F, +/* 000168E0 */ 0x02, 0x07, 0x07, 0x59, 0x02, 0x07, 0x59, 0x03, 0x04, 0x1F, 0x04, 0x00, 0x06, 0x09, 0x02, 0x00, +/* 000168F0 */ 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xF0, 0x01, 0xFE, 0xAF, 0xA9, 0x03, 0x00, 0x00, 0x00, 0x00, 0x0A, +/* 00016900 */ 0x00, 0x23, 0x00, 0x39, 0x00, 0x6F, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, +/* 00016910 */ 0xFE, 0xB9, 0x03, 0x4E, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0xF1, 0x03, 0x46, 0xFE, 0xFC, 0xA6, 0xFE, +/* 00016920 */ 0xFC, 0xA6, 0x09, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, 0xFC, 0xA6, 0xFE, 0x30, 0x02, 0xFE, 0x30, +/* 00016930 */ 0x02, 0x08, 0x07, 0x0C, 0x09, 0x35, 0x34, 0x03, 0x02, 0x05, 0x05, 0x05, 0x05, 0x0B, 0x06, 0xFE, +/* 00016940 */ 0x94, 0x03, 0x05, 0xFE, 0x09, 0x04, 0x06, 0xFE, 0x2E, 0x03, 0x08, 0x0C, 0xAD, 0x58, 0x09, 0x4E, +/* 00016950 */ 0x0A, 0x2A, 0x0C, 0x09, 0x15, 0x03, 0x00, 0x0C, 0x02, 0x09, 0x18, 0x00, 0x8E, 0x03, 0x03, 0x0D, +/* 00016960 */ 0x6C, 0x0C, 0x0D, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0D, 0x59, 0x01, 0x03, 0x59, 0x02, 0x04, +/* 00016970 */ 0x1F, 0x03, 0xFF, 0x0C, 0x8E, 0x03, 0x03, 0x0D, 0x6C, 0x0C, 0x0D, 0x01, 0x07, 0x02, 0x00, 0x59, +/* 00016980 */ 0x00, 0x0D, 0x59, 0x01, 0x09, 0x1F, 0x02, 0x0C, 0x0C, 0x45, 0x0A, 0x0C, 0xA8, 0x0C, 0x14, 0x08, +/* 00016990 */ 0x00, 0x0A, 0x0C, 0x5E, 0x0C, 0x0A, 0x02, 0x0F, 0x18, 0x00, 0x0C, 0x8E, 0x03, 0x03, 0x0D, 0x6C, +/* 000169A0 */ 0x0C, 0x0D, 0x03, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0D, 0x59, 0x01, 0x03, 0x59, 0x02, 0x04, 0x1F, +/* 000169B0 */ 0x03, 0xFF, 0x0C, 0x8E, 0x03, 0x03, 0x0D, 0x6C, 0x0C, 0x0D, 0x04, 0x07, 0x05, 0x00, 0x59, 0x00, +/* 000169C0 */ 0x0D, 0x8E, 0x03, 0x0C, 0x0E, 0x07, 0x02, 0x00, 0x59, 0x00, 0x05, 0x59, 0x01, 0x07, 0x1F, 0x02, +/* 000169D0 */ 0x0E, 0x0E, 0x59, 0x01, 0x0E, 0x8E, 0x03, 0x0C, 0x0E, 0x07, 0x02, 0x00, 0x59, 0x00, 0x05, 0x59, +/* 000169E0 */ 0x01, 0x08, 0x1F, 0x02, 0x0E, 0x0E, 0x59, 0x02, 0x0E, 0x59, 0x03, 0x0A, 0x59, 0x04, 0x06, 0x1F, +/* 000169F0 */ 0x05, 0x00, 0x0C, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB6, 0x02, 0xFE, 0x05, 0x02, +/* 00016A00 */ 0xFE, 0x06, 0x04, 0xFE, 0xB6, 0x02, 0xFE, 0x01, 0x02, 0xFE, 0x21, 0xA7, 0x07, 0x04, 0x00, 0x00, +/* 00016A10 */ 0x00, 0x0B, 0x00, 0x30, 0x00, 0x18, 0x00, 0x65, 0x00, 0x18, 0x00, 0x41, 0x00, 0x0F, 0x00, 0x57, +/* 00016A20 */ 0x00, 0x18, 0x00, 0x65, 0x00, 0x45, 0x00, 0x78, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, +/* 00016A30 */ 0x03, 0x00, 0xFE, 0xA6, 0x03, 0x3C, 0xA2, 0x41, 0xD1, 0x00, 0x45, 0xFE, 0xA7, 0xA3, 0xFE, 0xA7, +/* 00016A40 */ 0xA3, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x01, 0xFE, 0xA7, 0xA3, 0xFE, 0x03, 0x03, 0xFE, 0x03, 0x03, +/* 00016A50 */ 0x0B, 0x03, 0x0A, 0x05, 0x53, 0x4A, 0x03, 0x07, 0x06, 0x06, 0x06, 0x06, 0x09, 0x08, 0xFE, 0x03, +/* 00016A60 */ 0x01, 0x01, 0x5D, 0x01, 0x05, 0x4E, 0x06, 0x4E, 0x07, 0x4E, 0x08, 0x15, 0x05, 0x00, 0x03, 0x02, +/* 00016A70 */ 0xA8, 0x0A, 0x45, 0x03, 0x0A, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA8, 0x0A, 0x45, 0x04, 0x0A, 0x4E, +/* 00016A80 */ 0x06, 0x4E, 0x07, 0x4E, 0x08, 0xA8, 0x0A, 0x14, 0x03, 0x00, 0x05, 0x0A, 0x09, 0x0C, 0x00, 0x8E, +/* 00016A90 */ 0x01, 0x05, 0x0B, 0x4A, 0x0B, 0x45, 0x0A, 0x0B, 0x09, 0x03, 0x00, 0x46, 0x0A, 0x05, 0x45, 0x06, +/* 00016AA0 */ 0x0A, 0x8E, 0x02, 0x07, 0x0A, 0x4A, 0x0A, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x06, +/* 00016AB0 */ 0x8E, 0x01, 0x04, 0x0B, 0x4A, 0x0B, 0x59, 0x02, 0x0B, 0x1F, 0x03, 0x0A, 0x0A, 0x45, 0x07, 0x0A, +/* 00016AC0 */ 0x8E, 0x03, 0x03, 0x0B, 0x6C, 0x0A, 0x0B, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0B, 0x59, 0x01, +/* 00016AD0 */ 0x07, 0x1F, 0x02, 0x0A, 0x0A, 0x45, 0x08, 0x0A, 0xA8, 0x0A, 0x14, 0x03, 0x00, 0x08, 0x0A, 0x09, +/* 00016AE0 */ 0x2F, 0x00, 0x8E, 0x03, 0x36, 0x0B, 0x4A, 0x0B, 0x6C, 0x0A, 0x0B, 0x01, 0x07, 0x01, 0x00, 0x59, +/* 00016AF0 */ 0x00, 0x0B, 0x1F, 0x01, 0x0A, 0x0A, 0x45, 0x08, 0x0A, 0x8E, 0x03, 0x03, 0x0B, 0x6C, 0x0A, 0x0B, +/* 00016B00 */ 0x02, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0B, 0x59, 0x01, 0x07, 0x59, 0x02, 0x08, 0x1F, 0x03, 0xFF, +/* 00016B10 */ 0x0A, 0x8E, 0x01, 0x02, 0x0A, 0x4A, 0x0A, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x08, +/* 00016B20 */ 0x59, 0x02, 0x03, 0x59, 0x03, 0x04, 0x1F, 0x04, 0xFF, 0x0A, 0x45, 0x0A, 0x08, 0x8E, 0x03, 0x36, +/* 00016B30 */ 0x0C, 0x4A, 0x0C, 0x6C, 0x0B, 0x0C, 0x03, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0C, 0x8E, 0x01, 0x06, +/* 00016B40 */ 0x0D, 0x4A, 0x0D, 0x59, 0x01, 0x0D, 0x59, 0x02, 0x07, 0x1F, 0x03, 0x0B, 0x0B, 0x76, 0x0B, 0x0A, +/* 00016B50 */ 0x04, 0x5E, 0x0A, 0x08, 0x05, 0x82, 0x0A, 0x0A, 0x06, 0x01, 0x45, 0x00, 0x07, 0x09, 0x02, 0x00, +/* 00016B60 */ 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x05, 0x02, 0x69, 0xFE, 0x06, 0x02, 0x54, 0xFE, 0x08, 0x04, 0xFE, +/* 00016B70 */ 0x08, 0x04, 0xFE, 0xB1, 0xA3, 0x0D, 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x10, 0x00, +/* 00016B80 */ 0x23, 0x00, 0x1C, 0x00, 0x50, 0x00, 0x1F, 0x00, 0x8E, 0x00, 0x18, 0x00, 0x43, 0x00, 0x0A, 0x00, +/* 00016B90 */ 0x32, 0x00, 0x17, 0x00, 0x2B, 0x00, 0x18, 0x00, 0x4D, 0x00, 0x19, 0x00, 0x66, 0x00, 0x27, 0x00, +/* 00016BA0 */ 0x43, 0x00, 0x09, 0x00, 0x33, 0x00, 0x08, 0x00, 0x19, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, +/* 00016BB0 */ 0x10, 0x03, 0x00, 0xFE, 0x85, 0x03, 0x5E, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x07, 0x04, 0x44, 0xFE, +/* 00016BC0 */ 0xD5, 0x9D, 0xFE, 0xD5, 0x9D, 0x09, 0xFE, 0x00, 0x90, 0x04, 0x02, 0xFE, 0xD5, 0x9D, 0xFE, 0x94, +/* 00016BD0 */ 0x04, 0xFE, 0x94, 0x04, 0x0A, 0x06, 0x0E, 0x06, 0x63, 0x5C, 0x03, 0x05, 0x04, 0x04, 0x04, 0x04, +/* 00016BE0 */ 0x0D, 0x08, 0x07, 0x05, 0xFE, 0xE9, 0x03, 0x0B, 0xFE, 0x35, 0x01, 0x58, 0x09, 0x4E, 0x0A, 0x4E, +/* 00016BF0 */ 0x0B, 0x4E, 0x0C, 0x15, 0x05, 0x00, 0x07, 0x02, 0xA8, 0x0E, 0x45, 0x07, 0x0E, 0x15, 0x05, 0x00, +/* 00016C00 */ 0x08, 0x02, 0xA8, 0x0E, 0x45, 0x08, 0x0E, 0x4E, 0x0A, 0x4E, 0x0B, 0x4E, 0x0C, 0xA8, 0x0E, 0x14, +/* 00016C10 */ 0x08, 0x00, 0x09, 0x0E, 0x14, 0x03, 0x00, 0x09, 0x03, 0x09, 0x15, 0x00, 0x8E, 0x03, 0x03, 0x0F, +/* 00016C20 */ 0x6C, 0x0E, 0x0F, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0F, 0x59, 0x01, 0x04, 0x1F, 0x02, 0xFF, +/* 00016C30 */ 0x0E, 0x8E, 0x03, 0x0C, 0x0E, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x09, 0x1F, 0x02, +/* 00016C40 */ 0x0E, 0x0E, 0x45, 0x0A, 0x0E, 0x8E, 0x03, 0x0C, 0x0E, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x59, +/* 00016C50 */ 0x01, 0x06, 0x1F, 0x02, 0x0E, 0x0E, 0x45, 0x0B, 0x0E, 0xA8, 0x0E, 0x45, 0x0C, 0x0E, 0xA8, 0x0E, +/* 00016C60 */ 0x14, 0x03, 0x00, 0x07, 0x0E, 0x09, 0x63, 0x00, 0xA8, 0x0E, 0x14, 0x03, 0x00, 0x08, 0x0E, 0x09, +/* 00016C70 */ 0x59, 0x00, 0x8E, 0x01, 0x03, 0x0E, 0x4A, 0x0E, 0xA8, 0x0F, 0x14, 0x03, 0x00, 0x0E, 0x0F, 0x09, +/* 00016C80 */ 0x3D, 0x00, 0x8E, 0x03, 0x36, 0x0F, 0x4A, 0x0F, 0x6C, 0x0E, 0x0F, 0x01, 0x07, 0x01, 0x00, 0x59, +/* 00016C90 */ 0x00, 0x0F, 0x1F, 0x01, 0x0E, 0x0E, 0x01, 0x43, 0x01, 0x01, 0x03, 0x0E, 0x8E, 0x01, 0x02, 0x0E, +/* 00016CA0 */ 0x4A, 0x0E, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x8E, 0x01, 0x03, 0x0F, 0x4A, 0x0F, 0x59, 0x01, +/* 00016CB0 */ 0x0F, 0xA8, 0x0F, 0x59, 0x02, 0x0F, 0xA8, 0x0F, 0x59, 0x03, 0x0F, 0x1F, 0x04, 0xFF, 0x0E, 0x8E, +/* 00016CC0 */ 0x01, 0x03, 0x0E, 0x4A, 0x0E, 0x45, 0x0C, 0x0E, 0x09, 0x30, 0x00, 0x8E, 0x03, 0x36, 0x0F, 0x4A, +/* 00016CD0 */ 0x0F, 0x6C, 0x0E, 0x0F, 0x02, 0x07, 0x01, 0x00, 0x59, 0x00, 0x0F, 0x1F, 0x01, 0x0E, 0x0E, 0x45, +/* 00016CE0 */ 0x0C, 0x0E, 0x8E, 0x01, 0x02, 0x0E, 0x4A, 0x0E, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, +/* 00016CF0 */ 0x0C, 0x59, 0x02, 0x07, 0x59, 0x03, 0x08, 0x1F, 0x04, 0xFF, 0x0E, 0x8E, 0x03, 0x03, 0x0F, 0x6C, +/* 00016D00 */ 0x0E, 0x0F, 0x03, 0x07, 0x05, 0x00, 0x59, 0x00, 0x0F, 0x59, 0x01, 0x0A, 0x59, 0x02, 0x0B, 0x59, +/* 00016D10 */ 0x03, 0x0C, 0x59, 0x04, 0x05, 0x1F, 0x05, 0x00, 0x0E, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, +/* 00016D20 */ 0xFE, 0xB0, 0x02, 0x69, 0x69, 0xFE, 0x01, 0x02, 0xFE, 0xF2, 0x9D, 0x10, 0x08, 0x00, 0x00, 0x00, +/* 00016D30 */ 0x0A, 0x00, 0x15, 0x00, 0x10, 0x00, 0x23, 0x00, 0x0F, 0x00, 0x3B, 0x00, 0x15, 0x00, 0x61, 0x00, +/* 00016D40 */ 0x14, 0x00, 0x2A, 0x00, 0x14, 0x00, 0xFE, 0x00, 0x05, 0x00, 0x1D, 0x00, 0x14, 0x00, 0x46, 0x00, +/* 00016D50 */ 0x10, 0x00, 0x41, 0x00, 0x1A, 0x00, 0x3A, 0x00, 0x23, 0x00, 0x66, 0x00, 0x0C, 0x00, 0x4C, 0x00, +/* 00016D60 */ 0x17, 0x00, 0x2A, 0x00, 0x19, 0x00, 0x4E, 0x00, 0x23, 0x00, 0x72, 0x00, 0x00, 0x7F, 0x5C, 0x00, +/* 00016D70 */ 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x5B, 0x03, 0x23, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xE5, 0x03, +/* 00016D80 */ 0x43, 0xFE, 0x9F, 0x92, 0xFE, 0x9F, 0x92, 0x01, 0xFE, 0x00, 0x90, 0x04, 0x04, 0xFE, 0x9F, 0x92, +/* 00016D90 */ 0xFE, 0x62, 0x0A, 0xFE, 0x62, 0x0A, 0x0C, 0x1E, 0x27, 0x07, 0xC9, 0xB9, 0x03, 0x06, 0x1D, 0x1D, +/* 00016DA0 */ 0x1D, 0x1D, 0x26, 0x08, 0x06, 0xFE, 0xF2, 0x03, 0x06, 0xFE, 0xA3, 0x03, 0x06, 0xFE, 0xF3, 0x03, +/* 00016DB0 */ 0x06, 0xFE, 0xF4, 0x03, 0x06, 0xFE, 0xF5, 0x03, 0x06, 0xFE, 0xF6, 0x03, 0x06, 0xFE, 0xF7, 0x03, +/* 00016DC0 */ 0x06, 0xFE, 0xE0, 0x03, 0x05, 0xFE, 0x9C, 0x03, 0x05, 0xFE, 0xDF, 0x03, 0x06, 0xFE, 0xF8, 0x03, +/* 00016DD0 */ 0x06, 0xFE, 0xA2, 0x03, 0x06, 0xFE, 0xF9, 0x03, 0x06, 0xFE, 0xFA, 0x03, 0x06, 0xFE, 0xFB, 0x03, +/* 00016DE0 */ 0x06, 0xFE, 0xFC, 0x03, 0x07, 0x06, 0xFE, 0xFD, 0x03, 0x06, 0xFE, 0xA1, 0x03, 0x06, 0xFE, 0xFE, +/* 00016DF0 */ 0x03, 0x06, 0xFE, 0xFF, 0x03, 0x06, 0xFE, 0x00, 0x04, 0x06, 0xFE, 0x01, 0x04, 0x06, 0xFE, 0x02, +/* 00016E00 */ 0x04, 0x06, 0xFE, 0x03, 0x04, 0x0C, 0x0B, 0xFE, 0x95, 0x02, 0x4E, 0x21, 0x4E, 0x22, 0x4E, 0x23, +/* 00016E10 */ 0x4E, 0x24, 0x4E, 0x25, 0x8E, 0x02, 0x12, 0x27, 0x4A, 0x27, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, +/* 00016E20 */ 0x59, 0x01, 0x1F, 0x1F, 0x02, 0x27, 0x27, 0x45, 0x21, 0x27, 0xA8, 0x27, 0x14, 0x03, 0x00, 0x20, +/* 00016E30 */ 0x27, 0x09, 0x1A, 0x00, 0x8E, 0x03, 0x36, 0x29, 0x4A, 0x29, 0x6C, 0x28, 0x29, 0x00, 0x07, 0x01, +/* 00016E40 */ 0x00, 0x59, 0x00, 0x29, 0x1F, 0x01, 0x28, 0x28, 0x45, 0x27, 0x28, 0x09, 0x18, 0x00, 0x8E, 0x03, +/* 00016E50 */ 0x24, 0x29, 0x6C, 0x28, 0x29, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x29, 0x59, 0x01, 0x20, 0x1F, +/* 00016E60 */ 0x02, 0x28, 0x28, 0x46, 0x27, 0x28, 0x45, 0x20, 0x27, 0x45, 0x27, 0x1E, 0x8E, 0x02, 0x02, 0x28, +/* 00016E70 */ 0x4A, 0x28, 0x07, 0x06, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x20, 0x59, 0x02, 0x03, 0x59, 0x03, +/* 00016E80 */ 0x04, 0xCF, 0x29, 0x02, 0xA1, 0x00, 0x05, 0x29, 0xA1, 0x01, 0x06, 0x29, 0x59, 0x04, 0x29, 0x59, +/* 00016E90 */ 0x05, 0x05, 0x1F, 0x06, 0x28, 0x28, 0x76, 0x28, 0x27, 0x02, 0x5E, 0x27, 0x1E, 0x03, 0x14, 0x03, +/* 00016EA0 */ 0x00, 0x27, 0x05, 0x09, 0x15, 0x00, 0xCF, 0x28, 0x03, 0xA1, 0x00, 0x07, 0x28, 0xA1, 0x01, 0x08, +/* 00016EB0 */ 0x28, 0xA1, 0x02, 0x09, 0x28, 0x45, 0x27, 0x28, 0x09, 0x0E, 0x00, 0xCF, 0x28, 0x02, 0xA1, 0x00, +/* 00016EC0 */ 0x08, 0x28, 0xA1, 0x01, 0x09, 0x28, 0x46, 0x27, 0x28, 0x45, 0x22, 0x27, 0x8E, 0x03, 0x36, 0x28, +/* 00016ED0 */ 0x4A, 0x28, 0x6C, 0x27, 0x28, 0x04, 0x07, 0x01, 0x00, 0x59, 0x00, 0x28, 0x1F, 0x01, 0x27, 0x27, +/* 00016EE0 */ 0x45, 0x23, 0x27, 0x45, 0x27, 0x23, 0x8E, 0x02, 0x02, 0x28, 0x4A, 0x28, 0x07, 0x06, 0x00, 0x59, +/* 00016EF0 */ 0x00, 0x02, 0x59, 0x01, 0x20, 0x59, 0x02, 0x0A, 0x59, 0x03, 0x04, 0xCF, 0x29, 0x02, 0xA1, 0x00, +/* 00016F00 */ 0x0B, 0x29, 0xA1, 0x01, 0x0C, 0x29, 0x59, 0x04, 0x29, 0x59, 0x05, 0x0C, 0x1F, 0x06, 0x28, 0x28, +/* 00016F10 */ 0x76, 0x28, 0x27, 0x05, 0x8E, 0x02, 0x02, 0x27, 0x4A, 0x27, 0x07, 0x06, 0x00, 0x59, 0x00, 0x02, +/* 00016F20 */ 0x59, 0x01, 0x20, 0x59, 0x02, 0x0D, 0x59, 0x03, 0x0E, 0xA8, 0x28, 0x59, 0x04, 0x28, 0xA8, 0x28, +/* 00016F30 */ 0x59, 0x05, 0x28, 0x1F, 0x06, 0x27, 0x27, 0x45, 0x24, 0x27, 0xA8, 0x27, 0x14, 0x03, 0x00, 0x24, +/* 00016F40 */ 0x27, 0x09, 0x06, 0x00, 0x45, 0x27, 0x24, 0x09, 0x18, 0x00, 0x8E, 0x03, 0x24, 0x29, 0x6C, 0x28, +/* 00016F50 */ 0x29, 0x06, 0x07, 0x02, 0x00, 0x59, 0x00, 0x29, 0x59, 0x01, 0x24, 0x1F, 0x02, 0x28, 0x28, 0x46, +/* 00016F60 */ 0x27, 0x28, 0x76, 0x27, 0x23, 0x07, 0x45, 0x27, 0x23, 0x8E, 0x02, 0x02, 0x28, 0x4A, 0x28, 0x07, +/* 00016F70 */ 0x06, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x20, 0x59, 0x02, 0x0F, 0x59, 0x03, 0x04, 0xCF, 0x29, +/* 00016F80 */ 0x03, 0xA1, 0x00, 0x10, 0x29, 0xA1, 0x01, 0x11, 0x29, 0xA1, 0x02, 0x12, 0x29, 0x59, 0x04, 0x29, +/* 00016F90 */ 0xA8, 0x29, 0x59, 0x05, 0x29, 0x1F, 0x06, 0x28, 0x28, 0x76, 0x28, 0x27, 0x08, 0x8E, 0x02, 0x0C, +/* 00016FA0 */ 0x27, 0x4A, 0x27, 0x07, 0x05, 0x00, 0x59, 0x00, 0x02, 0x8E, 0x03, 0x03, 0x28, 0x5E, 0x28, 0x28, +/* 00016FB0 */ 0x09, 0x59, 0x01, 0x28, 0x59, 0x02, 0x21, 0x59, 0x03, 0x23, 0x59, 0x04, 0x22, 0x1F, 0x05, 0x27, +/* 00016FC0 */ 0x27, 0x45, 0x25, 0x27, 0x5E, 0x27, 0x25, 0x0A, 0x76, 0x27, 0x1E, 0x0B, 0x5E, 0x27, 0x25, 0x0C, +/* 00016FD0 */ 0x14, 0x0E, 0x00, 0x27, 0x13, 0x5E, 0x27, 0x25, 0x0D, 0xA8, 0x28, 0x14, 0x03, 0x00, 0x27, 0x28, +/* 00016FE0 */ 0x09, 0x06, 0x00, 0x45, 0x27, 0x14, 0x09, 0x07, 0x00, 0x5E, 0x28, 0x25, 0x0E, 0x46, 0x27, 0x28, +/* 00016FF0 */ 0x76, 0x27, 0x1E, 0x0F, 0x5E, 0x27, 0x25, 0x10, 0x41, 0x27, 0x27, 0x15, 0x76, 0x27, 0x1E, 0x11, +/* 00017000 */ 0x5E, 0x27, 0x25, 0x12, 0x76, 0x27, 0x1E, 0x13, 0x8E, 0x03, 0x03, 0x27, 0x5E, 0x27, 0x27, 0x14, +/* 00017010 */ 0x5E, 0x28, 0x1E, 0x15, 0x97, 0x27, 0x27, 0x28, 0x76, 0x27, 0x1E, 0x16, 0x45, 0x27, 0x1E, 0x8E, +/* 00017020 */ 0x02, 0x02, 0x28, 0x4A, 0x28, 0x07, 0x06, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x20, 0x59, 0x02, +/* 00017030 */ 0x16, 0x59, 0x03, 0x04, 0xCF, 0x29, 0x04, 0xA1, 0x00, 0x17, 0x29, 0xA1, 0x01, 0x18, 0x29, 0xA1, +/* 00017040 */ 0x02, 0x19, 0x29, 0xA1, 0x03, 0x1A, 0x29, 0x59, 0x04, 0x29, 0x59, 0x05, 0x1A, 0x1F, 0x06, 0x28, +/* 00017050 */ 0x28, 0x76, 0x28, 0x27, 0x17, 0x8E, 0x03, 0x03, 0x27, 0x5E, 0x27, 0x27, 0x18, 0x5E, 0x28, 0x1E, +/* 00017060 */ 0x19, 0x97, 0x27, 0x27, 0x28, 0x76, 0x27, 0x1E, 0x1A, 0x45, 0x27, 0x1E, 0x8E, 0x02, 0x02, 0x28, +/* 00017070 */ 0x4A, 0x28, 0x07, 0x06, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x20, 0x59, 0x02, 0x1B, 0x59, 0x03, +/* 00017080 */ 0x0E, 0xA8, 0x29, 0x59, 0x04, 0x29, 0x59, 0x05, 0x1C, 0x1F, 0x06, 0x28, 0x28, 0x76, 0x28, 0x27, +/* 00017090 */ 0x1B, 0x76, 0x1D, 0x1E, 0x1C, 0x45, 0x00, 0x1E, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x69, +/* 000170A0 */ 0xFE, 0x21, 0x03, 0xFE, 0x55, 0x02, 0xFE, 0x55, 0x02, 0x69, 0xFE, 0x04, 0x04, 0xFE, 0x22, 0x03, +/* 000170B0 */ 0xFE, 0x17, 0x02, 0xFE, 0x18, 0x02, 0xFE, 0xF0, 0x01, 0xFE, 0x0D, 0x02, 0xFE, 0x0D, 0x02, 0xFE, +/* 000170C0 */ 0x16, 0x02, 0xFE, 0x16, 0x02, 0xFE, 0x16, 0x02, 0xFE, 0x05, 0x04, 0xFE, 0x17, 0x02, 0xFE, 0x51, +/* 000170D0 */ 0x02, 0xFE, 0x18, 0x02, 0xFE, 0xF9, 0x03, 0xFE, 0x28, 0x02, 0xFE, 0xF9, 0x03, 0xFE, 0x54, 0x02, +/* 000170E0 */ 0xFE, 0x52, 0x02, 0xFE, 0x27, 0x02, 0xFE, 0x52, 0x02, 0xFE, 0x53, 0x02, 0xFE, 0x50, 0x02, 0xFE, +/* 000170F0 */ 0x06, 0x04, 0xFE, 0xD3, 0x92, 0x15, 0x0A, 0x00, 0x00, 0x00, 0x16, 0x00, 0x46, 0x00, 0x3F, 0x00, +/* 00017100 */ 0x91, 0x03, 0x31, 0x00, 0x60, 0x00, 0x32, 0x00, 0x6A, 0x00, 0x17, 0x00, 0x24, 0x00, 0x31, 0x00, +/* 00017110 */ 0x6D, 0x00, 0x26, 0x00, 0x55, 0x00, 0x2C, 0x00, 0x44, 0x00, 0x37, 0x00, 0x69, 0x00, 0x27, 0x00, +/* 00017120 */ 0x77, 0x00, 0x08, 0x00, 0xE3, 0x00, 0x28, 0x00, 0x59, 0x00, 0x0C, 0x00, 0x30, 0x00, 0x08, 0x00, +/* 00017130 */ 0x27, 0x00, 0x14, 0x00, 0x56, 0x00, 0x39, 0x00, 0x82, 0x00, 0x14, 0x00, 0x5C, 0x00, 0x28, 0x00, +/* 00017140 */ 0x70, 0x00, 0x04, 0x00, 0x32, 0x00, 0x08, 0x00, 0x19, 0x00, 0x00, 0x7E, 0x5D, 0x00, 0xC1, 0x03, +/* 00017150 */ 0x1A, 0x0B, 0x00, 0xFE, 0x45, 0x03, 0x22, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x65, 0x03, 0x40, 0xFE, +/* 00017160 */ 0x93, 0x8F, 0xFE, 0x93, 0x8F, 0x01, 0xFE, 0x00, 0x90, 0x04, 0x03, 0xFE, 0x93, 0x8F, 0xFE, 0x32, +/* 00017170 */ 0x02, 0xFE, 0x32, 0x02, 0x03, 0xFE, 0xE2, 0x03, 0xFE, 0xE3, 0x03, 0xFE, 0xE4, 0x03, 0x09, 0x04, +/* 00017180 */ 0x0A, 0x04, 0x27, 0x27, 0x02, 0x03, 0x05, 0x05, 0x05, 0x05, 0x07, 0x08, 0x09, 0x07, 0x08, 0x7C, +/* 00017190 */ 0x96, 0x02, 0x05, 0x96, 0x03, 0x06, 0x96, 0x02, 0x05, 0x15, 0x05, 0x00, 0x06, 0x03, 0x01, 0x45, +/* 000171A0 */ 0x01, 0x03, 0x02, 0x4E, 0x0A, 0x96, 0x04, 0x0A, 0x8E, 0x02, 0x36, 0x0B, 0x4A, 0x0B, 0x6C, 0x0A, +/* 000171B0 */ 0x0B, 0x00, 0x07, 0x01, 0x00, 0x59, 0x00, 0x0B, 0x1F, 0x01, 0x0A, 0x0A, 0x96, 0x04, 0x0A, 0x8E, +/* 000171C0 */ 0x02, 0x36, 0x0B, 0x4A, 0x0B, 0x6C, 0x0A, 0x0B, 0x01, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0B, 0x59, +/* 000171D0 */ 0x01, 0x04, 0xD6, 0x00, 0x0C, 0x59, 0x02, 0x0C, 0x1F, 0x03, 0xFF, 0x0A, 0x8E, 0x02, 0x36, 0x0B, +/* 000171E0 */ 0x4A, 0x0B, 0x6C, 0x0A, 0x0B, 0x02, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0B, 0x92, 0x04, 0x0C, 0x59, +/* 000171F0 */ 0x01, 0x0C, 0x8E, 0x02, 0x03, 0x0C, 0x5E, 0x0C, 0x0C, 0x03, 0x5E, 0x0C, 0x0C, 0x04, 0x59, 0x02, +/* 00017200 */ 0x0C, 0x1F, 0x03, 0x00, 0x0A, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x69, 0x93, 0xFE, 0x9A, +/* 00017210 */ 0x01, 0xFE, 0x11, 0x01, 0xFE, 0x24, 0x01, 0xFE, 0xB2, 0x8F, 0x05, 0x09, 0x00, 0x00, 0x00, 0x0F, +/* 00017220 */ 0x00, 0x17, 0x00, 0x17, 0x00, 0x25, 0x00, 0x1D, 0x00, 0x94, 0x01, 0x2E, 0x00, 0x42, 0x00, 0x00, +/* 00017230 */ 0x34, 0x72, 0x01, 0x00, 0x7F, 0x5C, 0x00, 0x01, 0x00, 0x10, 0x03, 0x00, 0xFE, 0x47, 0x03, 0x19, +/* 00017240 */ 0xA2, 0x41, 0xD1, 0x00, 0x41, 0xFE, 0xFF, 0x8F, 0xFE, 0xFF, 0x8F, 0x41, 0xFE, 0x00, 0x90, 0x02, +/* 00017250 */ 0x02, 0xFE, 0xFF, 0x8F, 0xFE, 0x77, 0x01, 0xFE, 0x77, 0x01, 0x04, 0x06, 0x08, 0x04, 0x1F, 0x1F, +/* 00017260 */ 0x03, 0x03, 0x07, 0x07, 0x08, 0x0B, 0x06, 0xFE, 0xD6, 0x03, 0x61, 0x8E, 0x01, 0x03, 0x08, 0x4A, +/* 00017270 */ 0x08, 0x15, 0x03, 0x00, 0x08, 0x02, 0x09, 0x29, 0x00, 0x8E, 0x01, 0x03, 0x08, 0x4A, 0x08, 0x07, +/* 00017280 */ 0x03, 0x00, 0x59, 0x00, 0x03, 0x59, 0x01, 0x06, 0x8E, 0x01, 0x04, 0x09, 0x4A, 0x09, 0x59, 0x02, +/* 00017290 */ 0x09, 0x1F, 0x03, 0x08, 0x08, 0x14, 0x03, 0x00, 0x08, 0x04, 0x09, 0x05, 0x00, 0xA8, 0x00, 0x09, +/* 000172A0 */ 0x28, 0x00, 0x8E, 0x01, 0x02, 0x08, 0x4A, 0x08, 0x2B, 0x08, 0x08, 0x06, 0x15, 0x03, 0x00, 0x08, +/* 000172B0 */ 0x05, 0x09, 0x14, 0x00, 0x8E, 0x01, 0x04, 0x08, 0x4A, 0x08, 0x8E, 0x01, 0x02, 0x09, 0x4A, 0x09, +/* 000172C0 */ 0x97, 0x09, 0x09, 0x06, 0x9C, 0x09, 0x08, 0x06, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x1D, 0x90, 0x05, +/* 000172D0 */ 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0xB9, 0x00, 0x05, 0x00, 0x23, 0x00, 0x12, 0x00, 0x41, 0x00, +/* 000172E0 */ 0x16, 0x00, 0x3B, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0x01, 0x00, 0x10, 0x03, 0x00, 0xFE, 0x32, 0x03, +/* 000172F0 */ 0x53, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x29, 0x03, 0x3F, 0xFE, 0xE0, 0x8B, 0xFE, 0xE0, 0x8B, 0x01, +/* 00017300 */ 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0xE0, 0x8B, 0x65, 0x65, 0x03, 0x03, 0x05, 0x03, 0x0A, 0x0A, +/* 00017310 */ 0x02, 0x01, 0x04, 0x08, 0x1A, 0x8E, 0x01, 0x12, 0x05, 0x4A, 0x05, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 00017320 */ 0x02, 0x59, 0x01, 0x03, 0x1F, 0x02, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, +/* 00017330 */ 0x14, 0x8C, 0x02, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x30, 0x00, 0x00, 0x7F, 0x7C, 0x00, 0xC3, +/* 00017340 */ 0x53, 0x50, 0x53, 0x00, 0xFE, 0x1A, 0x03, 0x1D, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x64, 0x03, 0x3E, +/* 00017350 */ 0xFE, 0x83, 0x87, 0xFE, 0x83, 0x87, 0x01, 0xFE, 0x00, 0x90, 0x04, 0x04, 0xFE, 0x83, 0x87, 0xFE, +/* 00017360 */ 0xE8, 0x03, 0xFE, 0xE8, 0x03, 0x0C, 0x0F, 0x16, 0x0A, 0x5C, 0x56, 0x18, 0x02, 0x05, 0x01, 0x0A, +/* 00017370 */ 0x0A, 0x0A, 0x0A, 0x02, 0x01, 0x15, 0x16, 0x9E, 0xF9, 0x05, 0xFE, 0xDF, 0x03, 0x06, 0xFE, 0xE0, +/* 00017380 */ 0x03, 0x06, 0xFE, 0xA3, 0x03, 0x05, 0xFE, 0x9C, 0x03, 0x08, 0x01, 0x00, 0x01, 0x01, 0x06, 0xFE, +/* 00017390 */ 0x2D, 0x03, 0x0C, 0x06, 0xFE, 0x2B, 0x03, 0x07, 0x06, 0xFE, 0xE1, 0x03, 0x06, 0xFE, 0x2C, 0x03, +/* 000173A0 */ 0xFE, 0x39, 0x01, 0x4E, 0x12, 0x4E, 0x13, 0x4E, 0x14, 0xA8, 0x17, 0x14, 0x03, 0x00, 0x11, 0x17, +/* 000173B0 */ 0x09, 0x06, 0x00, 0x45, 0x17, 0x02, 0x09, 0x42, 0x00, 0x8E, 0x01, 0x02, 0x18, 0x4A, 0x18, 0x07, +/* 000173C0 */ 0x06, 0x00, 0x59, 0x00, 0x06, 0x8E, 0x02, 0x24, 0x1A, 0x6C, 0x19, 0x1A, 0x00, 0x07, 0x02, 0x00, +/* 000173D0 */ 0x59, 0x00, 0x1A, 0x59, 0x01, 0x11, 0x1F, 0x02, 0x19, 0x19, 0x59, 0x01, 0x19, 0x59, 0x02, 0x03, +/* 000173E0 */ 0x59, 0x03, 0x04, 0xCF, 0x19, 0x02, 0xA1, 0x00, 0x02, 0x19, 0xA1, 0x01, 0x05, 0x19, 0x59, 0x04, +/* 000173F0 */ 0x19, 0x59, 0x05, 0x02, 0x1F, 0x06, 0x18, 0x18, 0x46, 0x17, 0x18, 0x45, 0x12, 0x17, 0x14, 0x03, +/* 00017400 */ 0x00, 0x12, 0x02, 0x09, 0x1C, 0x00, 0x8E, 0x01, 0x14, 0x18, 0x4A, 0x18, 0x07, 0x03, 0x00, 0x59, +/* 00017410 */ 0x00, 0x06, 0x59, 0x01, 0x0F, 0x59, 0x02, 0x10, 0x1F, 0x03, 0x18, 0x18, 0x45, 0x17, 0x18, 0x09, +/* 00017420 */ 0x19, 0x00, 0x8E, 0x01, 0x13, 0x18, 0x4A, 0x18, 0x07, 0x03, 0x00, 0x59, 0x00, 0x06, 0x59, 0x01, +/* 00017430 */ 0x0F, 0x59, 0x02, 0x10, 0x1F, 0x03, 0x18, 0x18, 0x46, 0x17, 0x18, 0x45, 0x13, 0x17, 0x45, 0x14, +/* 00017440 */ 0x07, 0xEC, 0x00, 0xA6, 0x17, 0x13, 0x01, 0x12, 0x03, 0x00, 0x14, 0x17, 0x09, 0x4D, 0x00, 0x8E, +/* 00017450 */ 0x02, 0x36, 0x18, 0x4A, 0x18, 0x6C, 0x17, 0x18, 0x02, 0x07, 0x04, 0x00, 0x59, 0x00, 0x18, 0x59, +/* 00017460 */ 0x01, 0x13, 0x8E, 0x02, 0x24, 0x1A, 0x6C, 0x19, 0x1A, 0x03, 0x07, 0x02, 0x00, 0x59, 0x00, 0x1A, +/* 00017470 */ 0x59, 0x01, 0x14, 0x1F, 0x02, 0x19, 0x19, 0x59, 0x02, 0x19, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00017480 */ 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x7A, 0x0A, 0x19, 0x04, 0x7A, 0x0A, 0x19, 0x05, 0x59, +/* 00017490 */ 0x03, 0x19, 0x1F, 0x04, 0xFF, 0x17, 0x26, 0x14, 0x14, 0x09, 0xA5, 0xFF, 0x8E, 0x02, 0x36, 0x18, +/* 000174A0 */ 0x4A, 0x18, 0x6C, 0x17, 0x18, 0x06, 0x07, 0x04, 0x00, 0x59, 0x00, 0x18, 0x59, 0x01, 0x13, 0x59, +/* 000174B0 */ 0x02, 0x0D, 0xCE, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x7A, +/* 000174C0 */ 0x0A, 0x19, 0x07, 0x7A, 0x0A, 0x19, 0x08, 0x7A, 0x0A, 0x19, 0x09, 0x59, 0x03, 0x19, 0x1F, 0x04, +/* 000174D0 */ 0xFF, 0x17, 0x45, 0x00, 0x13, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x02, 0x24, 0x00, 0x10, +/* 000174E0 */ 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x95, +/* 000174F0 */ 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, +/* 00017500 */ 0x00, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0xFE, 0x21, 0x03, 0xD1, 0xFE, +/* 00017510 */ 0x9C, 0x01, 0xFE, 0x22, 0x03, 0xFE, 0x95, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x96, +/* 00017520 */ 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0xC5, 0x87, 0x09, 0x06, 0x00, 0x00, 0x00, 0x55, +/* 00017530 */ 0x00, 0xBB, 0x00, 0x40, 0x00, 0xD4, 0x00, 0x05, 0x00, 0x0B, 0x00, 0x0C, 0x00, 0x30, 0x00, 0x47, +/* 00017540 */ 0x00, 0xED, 0xFF, 0x06, 0x00, 0x30, 0x01, 0x36, 0x00, 0xA1, 0x00, 0x08, 0x00, 0x1D, 0x00, 0x00, +/* 00017550 */ 0x7F, 0x5C, 0x00, 0xC1, 0x13, 0x10, 0x43, 0x00, 0xFE, 0xFB, 0x02, 0x28, 0xA2, 0x41, 0xC1, 0x00, +/* 00017560 */ 0xFE, 0x63, 0x03, 0x3D, 0xFE, 0x1A, 0x81, 0xFE, 0x1A, 0x81, 0x41, 0xFE, 0x00, 0x90, 0x05, 0x05, +/* 00017570 */ 0xFE, 0x1A, 0x81, 0xFE, 0xB9, 0x04, 0xFE, 0xB9, 0x04, 0x0D, 0x0D, 0x18, 0x07, 0x5B, 0x53, 0x02, +/* 00017580 */ 0x02, 0x0A, 0x0A, 0x0A, 0x0A, 0x02, 0x17, 0x06, 0xFE, 0xDA, 0x03, 0x01, 0x01, 0x01, 0x15, 0x08, +/* 00017590 */ 0x06, 0xFE, 0xDB, 0x03, 0x01, 0x00, 0x01, 0x14, 0x06, 0xFE, 0xDC, 0x03, 0x06, 0xFE, 0xDD, 0x03, +/* 000175A0 */ 0x07, 0x06, 0xFE, 0xDE, 0x03, 0xFE, 0x2C, 0x01, 0x4E, 0x11, 0x4E, 0x12, 0x4E, 0x13, 0x4E, 0x14, +/* 000175B0 */ 0x4E, 0x15, 0x4E, 0x16, 0x8E, 0x01, 0x0D, 0x18, 0x4A, 0x18, 0x07, 0x06, 0x00, 0x59, 0x00, 0x05, +/* 000175C0 */ 0x59, 0x01, 0x0E, 0x59, 0x02, 0x02, 0x59, 0x03, 0x03, 0x59, 0x04, 0x04, 0x59, 0x05, 0x03, 0x1F, +/* 000175D0 */ 0x06, 0x18, 0x18, 0x45, 0x11, 0x18, 0x8E, 0x01, 0x0D, 0x18, 0x4A, 0x18, 0x07, 0x06, 0x00, 0x59, +/* 000175E0 */ 0x00, 0x05, 0x59, 0x01, 0x0E, 0x59, 0x02, 0x06, 0x59, 0x03, 0x07, 0x59, 0x04, 0x08, 0x59, 0x05, +/* 000175F0 */ 0x0F, 0x1F, 0x06, 0x18, 0x18, 0x45, 0x12, 0x18, 0x8E, 0x02, 0x36, 0x19, 0x4A, 0x19, 0x6C, 0x18, +/* 00017600 */ 0x19, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x19, 0x59, 0x01, 0x12, 0x59, 0x02, 0x10, 0x1F, 0x03, +/* 00017610 */ 0x18, 0x18, 0x45, 0x13, 0x18, 0x8E, 0x01, 0x0D, 0x18, 0x4A, 0x18, 0x07, 0x06, 0x00, 0x59, 0x00, +/* 00017620 */ 0x05, 0x59, 0x01, 0x0E, 0x59, 0x02, 0x09, 0x59, 0x03, 0x12, 0x59, 0x04, 0x08, 0x59, 0x05, 0x13, +/* 00017630 */ 0x1F, 0x06, 0x18, 0x18, 0x45, 0x14, 0x18, 0x76, 0x11, 0x0D, 0x01, 0x76, 0x12, 0x0D, 0x02, 0x76, +/* 00017640 */ 0x14, 0x0D, 0x03, 0x5E, 0x18, 0x0E, 0x04, 0x45, 0x15, 0x18, 0x5E, 0x18, 0x0E, 0x05, 0x45, 0x16, +/* 00017650 */ 0x18, 0xA8, 0x18, 0x15, 0x0A, 0x00, 0x15, 0x18, 0xA8, 0x18, 0x15, 0x03, 0x00, 0x16, 0x18, 0x09, +/* 00017660 */ 0x6E, 0x00, 0x8E, 0x01, 0x0D, 0x18, 0x4A, 0x18, 0x07, 0x06, 0x00, 0x59, 0x00, 0x05, 0xCE, 0x00, +/* 00017670 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x7A, 0x15, 0x19, 0x06, 0x59, +/* 00017680 */ 0x01, 0x19, 0x59, 0x02, 0x0A, 0x59, 0x03, 0x03, 0x59, 0x04, 0x04, 0x59, 0x05, 0x03, 0x1F, 0x06, +/* 00017690 */ 0x18, 0x18, 0x45, 0x15, 0x18, 0x8E, 0x01, 0x0D, 0x18, 0x4A, 0x18, 0x07, 0x06, 0x00, 0x59, 0x00, +/* 000176A0 */ 0x05, 0xCE, 0x0C, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x7A, 0x16, +/* 000176B0 */ 0x19, 0x07, 0x59, 0x01, 0x19, 0x59, 0x02, 0x0C, 0x59, 0x03, 0x15, 0x59, 0x04, 0x04, 0x59, 0x05, +/* 000176C0 */ 0x04, 0x1F, 0x06, 0x18, 0x18, 0x45, 0x16, 0x18, 0x76, 0x15, 0x0D, 0x08, 0x76, 0x16, 0x0D, 0x09, +/* 000176D0 */ 0xA8, 0x00, 0x24, 0x00, 0x02, 0x18, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, +/* 000176E0 */ 0x00, 0x00, 0x00, 0x45, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, +/* 000176F0 */ 0x00, 0x00, 0x00, 0x48, 0x02, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0xFE, 0x47, 0x02, 0xFE, 0x46, 0x02, +/* 00017700 */ 0xFE, 0x44, 0x02, 0xFE, 0x48, 0x02, 0xFE, 0x45, 0x02, 0xFE, 0x48, 0x02, 0xFE, 0x45, 0x02, 0xFE, +/* 00017710 */ 0x48, 0x02, 0xFE, 0x45, 0x02, 0xFE, 0x5A, 0x81, 0x0F, 0x0C, 0x00, 0x00, 0x00, 0x22, 0x00, 0x51, +/* 00017720 */ 0x00, 0x22, 0x00, 0x5C, 0x00, 0x1D, 0x00, 0x3C, 0x00, 0x22, 0x00, 0x65, 0x00, 0x04, 0x00, 0x2D, +/* 00017730 */ 0x00, 0x04, 0x00, 0x2E, 0x00, 0x04, 0x00, 0x2F, 0x00, 0x07, 0x00, 0x35, 0x00, 0x07, 0x00, 0x35, +/* 00017740 */ 0x00, 0x11, 0x00, 0xEA, 0x00, 0x33, 0x00, 0x6E, 0x00, 0x33, 0x00, 0x72, 0x00, 0x04, 0x00, 0x35, +/* 00017750 */ 0x00, 0x06, 0x00, 0x37, 0x00, 0x00, 0x7E, 0x5D, 0x00, 0xC1, 0x03, 0x1A, 0x0B, 0x00, 0xFE, 0xDF, +/* 00017760 */ 0x02, 0x23, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x61, 0x03, 0x3B, 0xFE, 0x33, 0x7C, 0xFE, 0x33, 0x7C, +/* 00017770 */ 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, 0x33, 0x7C, 0xFE, 0xE2, 0x01, 0xFE, 0xE2, 0x01, 0x03, +/* 00017780 */ 0xFE, 0xD8, 0x03, 0xFE, 0xD9, 0x03, 0xFE, 0xCF, 0x03, 0x08, 0x03, 0x08, 0x04, 0x16, 0x16, 0x02, +/* 00017790 */ 0x02, 0x01, 0x01, 0x01, 0x01, 0x05, 0x06, 0x07, 0x01, 0x00, 0x3D, 0x96, 0x02, 0x03, 0x4E, 0x08, +/* 000177A0 */ 0x96, 0x03, 0x08, 0x4E, 0x08, 0x96, 0x04, 0x08, 0xCF, 0x08, 0x00, 0x96, 0x03, 0x08, 0x96, 0x04, +/* 000177B0 */ 0x02, 0x8E, 0x02, 0x36, 0x09, 0x4A, 0x09, 0x6C, 0x08, 0x09, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 000177C0 */ 0x09, 0x59, 0x01, 0x04, 0xD6, 0x00, 0x0A, 0x59, 0x02, 0x0A, 0x1F, 0x03, 0xFF, 0x08, 0x92, 0x03, +/* 000177D0 */ 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x93, 0xFE, 0x6C, 0x7C, 0x05, 0x0D, 0x00, 0x00, +/* 000177E0 */ 0x00, 0x06, 0x00, 0x1B, 0x00, 0x03, 0x00, 0x13, 0x00, 0x1D, 0x00, 0x67, 0x01, 0x08, 0x00, 0x13, +/* 000177F0 */ 0x00, 0x00, 0xF6, 0x77, 0x01, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x13, 0x10, 0x43, 0x00, 0xFE, 0xE2, +/* 00017800 */ 0x02, 0x24, 0xA2, 0x41, 0xD1, 0x00, 0x3C, 0xFE, 0xB6, 0x7C, 0xFE, 0xB6, 0x7C, 0x41, 0xFE, 0x00, +/* 00017810 */ 0x90, 0x02, 0x02, 0xFE, 0xB6, 0x7C, 0xFE, 0x3F, 0x01, 0xFE, 0x3F, 0x01, 0x07, 0x0A, 0x0D, 0x05, +/* 00017820 */ 0x2C, 0x2B, 0x03, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x0C, 0x08, 0x01, 0x01, 0x06, 0xFE, 0x2A, +/* 00017830 */ 0x03, 0x06, 0xFE, 0x2C, 0x03, 0x0B, 0x06, 0xFE, 0x2D, 0x03, 0x06, 0xFE, 0x2B, 0x03, 0x07, 0x97, +/* 00017840 */ 0x4E, 0x0B, 0x8E, 0x02, 0x0F, 0x0D, 0x4A, 0x0D, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, +/* 00017850 */ 0x0A, 0x1F, 0x02, 0x0D, 0x0D, 0x5E, 0x0D, 0x0D, 0x00, 0x45, 0x0B, 0x0D, 0x8E, 0x02, 0x08, 0x0D, +/* 00017860 */ 0x4A, 0x0D, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x8E, 0x01, 0x02, 0x0E, 0x59, 0x01, 0x0E, 0x59, +/* 00017870 */ 0x02, 0x0B, 0x1F, 0x03, 0x0D, 0x0D, 0xA8, 0x0E, 0x15, 0x03, 0x00, 0x0D, 0x0E, 0x09, 0x53, 0x00, +/* 00017880 */ 0x8E, 0x03, 0x36, 0x0E, 0x4A, 0x0E, 0x6C, 0x0D, 0x0E, 0x01, 0x07, 0x04, 0x00, 0x59, 0x00, 0x0E, +/* 00017890 */ 0x8E, 0x01, 0x03, 0x0F, 0x4A, 0x0F, 0x59, 0x01, 0x0F, 0x8E, 0x01, 0x04, 0x10, 0x4A, 0x10, 0x43, +/* 000178A0 */ 0x0F, 0x10, 0x2D, 0x10, 0x0F, 0x03, 0x01, 0x43, 0x01, 0x01, 0x04, 0x10, 0x59, 0x02, 0x0F, 0xCE, +/* 000178B0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x7A, 0x0A, 0x0F, 0x02, +/* 000178C0 */ 0x7A, 0x06, 0x0F, 0x03, 0x7A, 0x06, 0x0F, 0x04, 0x7A, 0x06, 0x0F, 0x05, 0x59, 0x03, 0x0F, 0x1F, +/* 000178D0 */ 0x04, 0xFF, 0x0D, 0xA8, 0x00, 0x24, 0x00, 0x01, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, +/* 000178E0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, +/* 000178F0 */ 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0xFE, 0x1E, 0x02, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, +/* 00017900 */ 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0xD6, 0x7C, 0x04, 0x02, 0x00, 0x00, 0x00, +/* 00017910 */ 0x1A, 0x00, 0x42, 0x00, 0x24, 0x00, 0x60, 0x00, 0x55, 0x00, 0x7C, 0x00, 0x00, 0x7F, 0x7C, 0x02, +/* 00017920 */ 0xC3, 0x53, 0x50, 0x53, 0x00, 0xFE, 0xB1, 0x02, 0x23, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x60, 0x03, +/* 00017930 */ 0x3A, 0xFE, 0x4E, 0x75, 0xFE, 0x4E, 0x75, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0x4E, 0x75, +/* 00017940 */ 0xFE, 0x68, 0x05, 0xFE, 0x68, 0x05, 0x10, 0x10, 0x1B, 0x05, 0x8A, 0x7F, 0x5C, 0x02, 0x01, 0x04, +/* 00017950 */ 0x01, 0x0F, 0x0F, 0x0F, 0x0F, 0x01, 0x02, 0x1A, 0x1B, 0x7E, 0xFE, 0xC9, 0x01, 0x06, 0xFE, 0xD6, +/* 00017960 */ 0x03, 0x06, 0xFE, 0xA3, 0x03, 0x01, 0x00, 0x06, 0xFE, 0x94, 0x03, 0x07, 0x06, 0xFE, 0xD7, 0x03, +/* 00017970 */ 0x08, 0x01, 0xFF, 0x01, 0x01, 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, 0x2C, 0x03, 0x0B, 0x06, 0xFE, +/* 00017980 */ 0x2D, 0x03, 0x06, 0xFE, 0x2B, 0x03, 0xFE, 0xD3, 0x01, 0x4E, 0x11, 0x4E, 0x12, 0x4E, 0x13, 0x4E, +/* 00017990 */ 0x14, 0x4E, 0x15, 0x4E, 0x16, 0x4E, 0x17, 0x4E, 0x18, 0x4E, 0x19, 0x2A, 0x1D, 0x10, 0x14, 0x03, +/* 000179A0 */ 0x00, 0x1D, 0x02, 0x09, 0x06, 0x00, 0xCF, 0x00, 0x00, 0x09, 0xAE, 0x01, 0xCF, 0x1D, 0x00, 0x45, +/* 000179B0 */ 0x11, 0x1D, 0x2A, 0x1D, 0x10, 0x14, 0x03, 0x00, 0x1D, 0x03, 0x09, 0x0D, 0x00, 0xCF, 0x1E, 0x01, +/* 000179C0 */ 0xA1, 0x00, 0x10, 0x1E, 0x45, 0x1D, 0x1E, 0x09, 0x18, 0x00, 0x8E, 0x02, 0x24, 0x1F, 0x6C, 0x1E, +/* 000179D0 */ 0x1F, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x1F, 0x59, 0x01, 0x10, 0x1F, 0x02, 0x1E, 0x1E, 0x46, +/* 000179E0 */ 0x1D, 0x1E, 0x45, 0x12, 0x1D, 0x8E, 0x02, 0x24, 0x1E, 0x6C, 0x1D, 0x1E, 0x01, 0x07, 0x02, 0x00, +/* 000179F0 */ 0x59, 0x00, 0x1E, 0xA6, 0x1F, 0x12, 0x02, 0x59, 0x01, 0x1F, 0x1F, 0x02, 0x1D, 0x1D, 0x45, 0x13, +/* 00017A00 */ 0x1D, 0x45, 0x14, 0x04, 0x45, 0x15, 0x04, 0xEC, 0x00, 0x12, 0x03, 0x00, 0x14, 0x13, 0x09, 0x41, +/* 00017A10 */ 0x01, 0x8E, 0x02, 0x24, 0x1E, 0x6C, 0x1D, 0x1E, 0x03, 0x07, 0x02, 0x00, 0x59, 0x00, 0x1E, 0x59, +/* 00017A20 */ 0x01, 0x14, 0x1F, 0x02, 0x1D, 0x1D, 0x45, 0x16, 0x1D, 0xBC, 0x1D, 0x16, 0x12, 0x00, 0x00, 0x0E, +/* 00017A30 */ 0x18, 0x01, 0x1D, 0x97, 0x1D, 0x12, 0x16, 0x45, 0x17, 0x1D, 0x2A, 0x1D, 0x17, 0x15, 0x03, 0x00, +/* 00017A40 */ 0x1D, 0x03, 0x09, 0x08, 0x00, 0x2A, 0x1D, 0x17, 0x15, 0x08, 0x00, 0x1D, 0x05, 0x14, 0x03, 0x00, +/* 00017A50 */ 0x17, 0x06, 0x09, 0x15, 0x00, 0x8E, 0x02, 0x03, 0x1E, 0x6C, 0x1D, 0x1E, 0x04, 0x07, 0x02, 0x00, +/* 00017A60 */ 0x59, 0x00, 0x1E, 0x59, 0x01, 0x07, 0x1F, 0x02, 0xFF, 0x1D, 0x8E, 0x02, 0x24, 0x1E, 0x6C, 0x1D, +/* 00017A70 */ 0x1E, 0x05, 0x07, 0x02, 0x00, 0x59, 0x00, 0x1E, 0x59, 0x01, 0x17, 0x1F, 0x02, 0x1D, 0x1D, 0x45, +/* 00017A80 */ 0x18, 0x1D, 0x8E, 0x01, 0x11, 0x1D, 0x4A, 0x1D, 0x07, 0x02, 0x00, 0x59, 0x00, 0x08, 0x59, 0x01, +/* 00017A90 */ 0x18, 0x1F, 0x02, 0x1D, 0x1D, 0x0F, 0x15, 0x00, 0x1D, 0x8E, 0x02, 0x03, 0x1E, 0x6C, 0x1D, 0x1E, +/* 00017AA0 */ 0x06, 0x07, 0x02, 0x00, 0x59, 0x00, 0x1E, 0x59, 0x01, 0x18, 0x1F, 0x02, 0xFF, 0x1D, 0x8E, 0x02, +/* 00017AB0 */ 0x03, 0x1E, 0x6C, 0x1D, 0x1E, 0x07, 0x07, 0x02, 0x00, 0x59, 0x00, 0x1E, 0x59, 0x01, 0x18, 0x1F, +/* 00017AC0 */ 0x02, 0x1D, 0x1D, 0x45, 0x19, 0x1D, 0xA8, 0x1D, 0x14, 0x03, 0x00, 0x19, 0x1D, 0x09, 0x18, 0x00, +/* 00017AD0 */ 0x8E, 0x02, 0x03, 0x1E, 0x6C, 0x1D, 0x1E, 0x08, 0x07, 0x02, 0x00, 0x59, 0x00, 0x1E, 0x59, 0x01, +/* 00017AE0 */ 0x18, 0x1F, 0x02, 0xFF, 0x1D, 0x09, 0x63, 0x00, 0x8E, 0x02, 0x36, 0x1E, 0x4A, 0x1E, 0x6C, 0x1D, +/* 00017AF0 */ 0x1E, 0x09, 0x07, 0x03, 0x00, 0x59, 0x00, 0x1E, 0x59, 0x01, 0x11, 0x59, 0x02, 0x19, 0x1F, 0x03, +/* 00017B00 */ 0x1D, 0x1D, 0x14, 0x03, 0x00, 0x1D, 0x09, 0x09, 0x41, 0x00, 0x8E, 0x02, 0x36, 0x1E, 0x4A, 0x1E, +/* 00017B10 */ 0x6C, 0x1D, 0x1E, 0x0A, 0x07, 0x04, 0x00, 0x59, 0x00, 0x1E, 0x59, 0x01, 0x11, 0x43, 0x1F, 0x15, +/* 00017B20 */ 0x2D, 0x15, 0x1F, 0x0A, 0x59, 0x02, 0x1F, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00017B30 */ 0x1F, 0x00, 0x00, 0x00, 0x7A, 0x19, 0x1F, 0x0B, 0x7A, 0x0D, 0x1F, 0x0C, 0x7A, 0x0D, 0x1F, 0x0D, +/* 00017B40 */ 0x7A, 0x0D, 0x1F, 0x0E, 0x59, 0x03, 0x1F, 0x1F, 0x04, 0xFF, 0x1D, 0x2D, 0x14, 0x14, 0x0A, 0x09, +/* 00017B50 */ 0xB5, 0xFE, 0x45, 0x00, 0x11, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x01, 0x18, 0x00, 0x00, +/* 00017B60 */ 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x94, +/* 00017B70 */ 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0xFE, 0x21, 0x03, 0xFE, 0x26, +/* 00017B80 */ 0x03, 0xD1, 0xFE, 0x22, 0x03, 0xFE, 0xAE, 0x02, 0xFE, 0x22, 0x03, 0xFE, 0xAF, 0x02, 0xFE, 0xEE, +/* 00017B90 */ 0x01, 0xFE, 0xAF, 0x02, 0xFE, 0x0F, 0x03, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x94, 0x01, +/* 00017BA0 */ 0xFE, 0x95, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x6B, 0x75, 0x18, 0x12, 0x00, 0x00, 0x00, 0x0B, 0x00, +/* 00017BB0 */ 0x32, 0x00, 0x06, 0x00, 0x1E, 0x00, 0x06, 0x00, 0x19, 0x00, 0x33, 0x00, 0x58, 0x00, 0x1C, 0x00, +/* 00017BC0 */ 0x31, 0x00, 0x03, 0x00, 0x0B, 0x00, 0x05, 0x00, 0x18, 0x00, 0x08, 0x00, 0x17, 0x00, 0x18, 0x00, +/* 00017BD0 */ 0x2D, 0x00, 0x0A, 0x00, 0x1F, 0x00, 0x07, 0x00, 0x26, 0x00, 0x1B, 0x00, 0x69, 0x00, 0x15, 0x00, +/* 00017BE0 */ 0x4F, 0x00, 0x18, 0x00, 0x37, 0x00, 0x17, 0x00, 0x40, 0x00, 0x15, 0x00, 0x4B, 0x00, 0x18, 0x00, +/* 00017BF0 */ 0x4D, 0x00, 0x0A, 0x00, 0x96, 0x00, 0x18, 0x00, 0x3F, 0x00, 0x22, 0x00, 0x49, 0x00, 0x41, 0x00, +/* 00017C00 */ 0x9B, 0x00, 0x07, 0x00, 0x1B, 0x00, 0x08, 0x00, 0x11, 0x00, 0x00, 0x7E, 0x5C, 0x00, 0xC1, 0x43, +/* 00017C10 */ 0x50, 0x0B, 0x00, 0xFE, 0x8E, 0x02, 0x2B, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x5F, 0x03, 0x37, 0xFE, +/* 00017C20 */ 0xA2, 0x70, 0xFE, 0xA2, 0x70, 0x02, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0xA2, 0x70, 0xFE, 0x40, +/* 00017C30 */ 0x03, 0xFE, 0x40, 0x03, 0x0F, 0x07, 0x0F, 0x08, 0x5B, 0x52, 0x02, 0x02, 0x0E, 0x0E, 0x0E, 0x0E, +/* 00017C40 */ 0x01, 0x0E, 0x0F, 0x08, 0x07, 0x0C, 0x06, 0xFE, 0x95, 0x03, 0x0B, 0xFE, 0x22, 0x01, 0x4E, 0x08, +/* 00017C50 */ 0x4E, 0x09, 0x4E, 0x0A, 0x4E, 0x0B, 0x4E, 0x0C, 0x4E, 0x0D, 0x8E, 0x01, 0x0F, 0x10, 0x4A, 0x10, +/* 00017C60 */ 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x07, 0x1F, 0x02, 0x10, 0x10, 0x45, 0x08, 0x10, +/* 00017C70 */ 0x14, 0x03, 0x00, 0x08, 0x03, 0x09, 0x06, 0x00, 0x45, 0x00, 0x04, 0x09, 0xF0, 0x00, 0x5E, 0x10, +/* 00017C80 */ 0x08, 0x00, 0x0E, 0x51, 0x00, 0x10, 0x8E, 0x02, 0x36, 0x11, 0x4A, 0x11, 0x6C, 0x10, 0x11, 0x01, +/* 00017C90 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x11, 0x5E, 0x12, 0x08, 0x02, 0x59, 0x01, 0x12, 0x59, 0x02, 0x05, +/* 00017CA0 */ 0x1F, 0x03, 0x10, 0x10, 0x45, 0x09, 0x10, 0x8E, 0x02, 0x36, 0x11, 0x4A, 0x11, 0x6C, 0x10, 0x11, +/* 00017CB0 */ 0x03, 0x07, 0x02, 0x00, 0x59, 0x00, 0x11, 0x59, 0x01, 0x09, 0x1F, 0x02, 0x10, 0x10, 0x45, 0x0A, +/* 00017CC0 */ 0x10, 0xA6, 0x10, 0x09, 0x04, 0xA6, 0x11, 0x0A, 0x05, 0x15, 0x03, 0x00, 0x10, 0x11, 0x09, 0x06, +/* 00017CD0 */ 0x00, 0x45, 0x00, 0x04, 0x09, 0x97, 0x00, 0x5E, 0x10, 0x08, 0x06, 0x0E, 0x87, 0x00, 0x10, 0x8E, +/* 00017CE0 */ 0x02, 0x36, 0x11, 0x4A, 0x11, 0x6C, 0x10, 0x11, 0x07, 0x07, 0x03, 0x00, 0x59, 0x00, 0x11, 0x5E, +/* 00017CF0 */ 0x12, 0x08, 0x08, 0x59, 0x01, 0x12, 0x59, 0x02, 0x05, 0x1F, 0x03, 0x10, 0x10, 0x45, 0x0B, 0x10, +/* 00017D00 */ 0x8E, 0x02, 0x36, 0x11, 0x4A, 0x11, 0x6C, 0x10, 0x11, 0x09, 0x07, 0x03, 0x00, 0x59, 0x00, 0x11, +/* 00017D10 */ 0x8E, 0x02, 0x36, 0x13, 0x4A, 0x13, 0x6C, 0x12, 0x13, 0x0A, 0x07, 0x03, 0x00, 0x59, 0x00, 0x13, +/* 00017D20 */ 0x59, 0x01, 0x0B, 0xD6, 0x00, 0x14, 0x59, 0x02, 0x14, 0x1F, 0x03, 0x12, 0x12, 0x59, 0x01, 0x12, +/* 00017D30 */ 0xD6, 0x01, 0x12, 0x59, 0x02, 0x12, 0x1F, 0x03, 0x10, 0x10, 0x45, 0x0C, 0x10, 0x8E, 0x02, 0x36, +/* 00017D40 */ 0x11, 0x4A, 0x11, 0x6C, 0x10, 0x11, 0x0B, 0x07, 0x02, 0x00, 0x59, 0x00, 0x11, 0x59, 0x01, 0x0C, +/* 00017D50 */ 0x1F, 0x02, 0x10, 0x10, 0x45, 0x0D, 0x10, 0xA6, 0x10, 0x0C, 0x0C, 0xA6, 0x11, 0x0D, 0x0D, 0x41, +/* 00017D60 */ 0x00, 0x10, 0x11, 0x09, 0x08, 0x00, 0x45, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, +/* 00017D70 */ 0xFE, 0xD4, 0x03, 0xFE, 0x56, 0x01, 0xFE, 0xD4, 0x03, 0xFE, 0x15, 0x03, 0xD1, 0xD1, 0xFE, 0xD5, +/* 00017D80 */ 0x03, 0xFE, 0x56, 0x01, 0xFE, 0xD5, 0x03, 0xD5, 0x89, 0xFE, 0x15, 0x03, 0xD1, 0xD1, 0xFE, 0xBE, +/* 00017D90 */ 0x70, 0x0F, 0x0C, 0x00, 0x00, 0x00, 0x16, 0x00, 0x2D, 0x00, 0x08, 0x00, 0x23, 0x00, 0x06, 0x00, +/* 00017DA0 */ 0x45, 0x00, 0x08, 0x00, 0x23, 0x00, 0x21, 0x00, 0x3C, 0x00, 0x1A, 0x00, 0x38, 0x00, 0x10, 0x00, +/* 00017DB0 */ 0x41, 0x00, 0x06, 0x00, 0x2F, 0x00, 0x08, 0x00, 0x25, 0x00, 0x21, 0x00, 0x44, 0x00, 0x3D, 0x00, +/* 00017DC0 */ 0x88, 0x00, 0x1A, 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x49, 0x00, 0x08, 0x00, 0x11, 0x00, 0x00, 0x38, +/* 00017DD0 */ 0x7E, 0x01, 0x00, 0xD7, 0x7D, 0x01, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x07, 0x00, 0xFE, +/* 00017DE0 */ 0xA0, 0x02, 0x62, 0xA2, 0x41, 0xD0, 0x00, 0x39, 0xFE, 0x01, 0x10, 0xFE, 0x19, 0x73, 0xFE, 0x19, +/* 00017DF0 */ 0x73, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0x19, 0x73, 0x23, 0x23, 0x04, 0x02, 0x04, 0x03, +/* 00017E00 */ 0x0B, 0x0B, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x1E, 0x8E, 0x02, 0x36, 0x05, 0x4A, 0x05, +/* 00017E10 */ 0x6C, 0x04, 0x05, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x05, 0x59, 0x01, 0x02, 0x1F, 0x02, 0x00, +/* 00017E20 */ 0x04, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x75, 0x01, 0xFE, 0x26, 0x73, 0x02, 0x00, +/* 00017E30 */ 0x00, 0x00, 0x00, 0x1C, 0x00, 0x16, 0x00, 0x00, 0x7F, 0x4C, 0x00, 0xC0, 0x03, 0x00, 0x07, 0x00, +/* 00017E40 */ 0xFE, 0xA0, 0x02, 0x3E, 0xA2, 0x41, 0xD0, 0x00, 0x38, 0xFE, 0x01, 0x10, 0xFE, 0xF5, 0x72, 0xFE, +/* 00017E50 */ 0xF5, 0x72, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0xF5, 0x72, 0x21, 0x21, 0x02, 0x03, 0x04, +/* 00017E60 */ 0x06, 0x06, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x0F, 0xA6, 0x04, 0x03, 0x00, 0x41, 0x00, +/* 00017E70 */ 0x04, 0x02, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xD1, 0xFE, 0x02, 0x73, 0x02, 0x00, 0x00, +/* 00017E80 */ 0x00, 0x00, 0x0D, 0x00, 0x14, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, +/* 00017E90 */ 0x76, 0x02, 0x25, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x5E, 0x03, 0x36, 0xFE, 0x31, 0x6D, 0xFE, 0x31, +/* 00017EA0 */ 0x6D, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0x31, 0x6D, 0xE0, 0xE0, 0x05, 0x04, 0x06, 0x04, +/* 00017EB0 */ 0x1D, 0x1C, 0x02, 0x04, 0x02, 0x02, 0x02, 0x02, 0x05, 0x08, 0x07, 0x5B, 0x8E, 0x02, 0x24, 0x07, +/* 00017EC0 */ 0x6C, 0x06, 0x07, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x07, 0x59, 0x01, 0x04, 0x1F, 0x02, 0x06, +/* 00017ED0 */ 0x06, 0x45, 0x04, 0x06, 0x8E, 0x01, 0x0E, 0x06, 0x4A, 0x06, 0x0F, 0x10, 0x00, 0x06, 0x8E, 0x01, +/* 00017EE0 */ 0x03, 0x06, 0x4A, 0x06, 0x07, 0x01, 0x00, 0x59, 0x00, 0x02, 0x1F, 0x01, 0xFF, 0x06, 0x8E, 0x02, +/* 00017EF0 */ 0x03, 0x07, 0x6C, 0x06, 0x07, 0x01, 0x07, 0x03, 0x00, 0x59, 0x00, 0x07, 0x59, 0x01, 0x04, 0x8E, +/* 00017F00 */ 0x01, 0x0E, 0x08, 0x4A, 0x08, 0x59, 0x02, 0x08, 0x1F, 0x03, 0x06, 0x06, 0x42, 0x00, 0x06, 0x03, +/* 00017F10 */ 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x22, 0x03, 0xFE, 0xC0, 0x02, 0xFE, 0x4B, 0x6D, +/* 00017F20 */ 0x05, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x29, 0x00, 0x0A, 0x00, 0x25, 0x00, 0x10, 0x00, 0x2F, +/* 00017F30 */ 0x00, 0x27, 0x00, 0x48, 0x00, 0x00, 0x7E, 0x5D, 0x00, 0x01, 0x00, 0x1A, 0x0B, 0x00, 0xFE, 0xFC, +/* 00017F40 */ 0x01, 0x1A, 0xA0, 0x41, 0xD1, 0x00, 0x34, 0xFE, 0x5E, 0x51, 0xFE, 0x5E, 0x51, 0x01, 0xFE, 0x00, +/* 00017F50 */ 0x90, 0x01, 0x01, 0xFE, 0x5E, 0x51, 0xFE, 0xA8, 0x1B, 0xFE, 0xA8, 0x1B, 0x02, 0xFE, 0x6C, 0x03, +/* 00017F60 */ 0xFE, 0xAC, 0x03, 0x1B, 0x26, 0x3D, 0x04, 0xC4, 0x9A, 0x02, 0x02, 0x3A, 0x3B, 0x3C, 0x05, 0xFE, +/* 00017F70 */ 0xAD, 0x03, 0x05, 0xFE, 0xAE, 0x03, 0x05, 0xFE, 0xAF, 0x03, 0x06, 0xFE, 0xB0, 0x03, 0x06, 0xFE, +/* 00017F80 */ 0xB1, 0x03, 0x05, 0xFE, 0xB2, 0x03, 0x05, 0xFE, 0xB3, 0x03, 0x05, 0xFE, 0xB4, 0x03, 0x05, 0xFE, +/* 00017F90 */ 0xB5, 0x03, 0x05, 0xFE, 0xB6, 0x03, 0x05, 0xFE, 0xB7, 0x03, 0x05, 0xFE, 0xB8, 0x03, 0x05, 0xFE, +/* 00017FA0 */ 0xB9, 0x03, 0x05, 0xFE, 0xBA, 0x03, 0x05, 0xFE, 0xBB, 0x03, 0x05, 0xFE, 0xBC, 0x03, 0x06, 0xFE, +/* 00017FB0 */ 0x47, 0x03, 0x05, 0xFE, 0xBD, 0x03, 0x05, 0xFE, 0xBE, 0x03, 0x05, 0xFE, 0xBF, 0x03, 0x05, 0xFE, +/* 00017FC0 */ 0xC0, 0x03, 0x05, 0xFE, 0xC1, 0x03, 0x05, 0xFE, 0xC2, 0x03, 0x05, 0xFE, 0xC3, 0x03, 0x05, 0xFE, +/* 00017FD0 */ 0xC4, 0x03, 0x05, 0xFE, 0xC5, 0x03, 0x05, 0xFE, 0xC6, 0x03, 0x05, 0xFE, 0xC7, 0x03, 0x05, 0xFE, +/* 00017FE0 */ 0xC8, 0x03, 0x05, 0xFE, 0xC9, 0x03, 0x05, 0xFE, 0xCA, 0x03, 0x05, 0xFE, 0xCB, 0x03, 0x05, 0xFE, +/* 00017FF0 */ 0xCC, 0x03, 0x06, 0xFE, 0xCD, 0x03, 0x06, 0xFE, 0xCE, 0x03, 0x06, 0xFE, 0xCF, 0x03, 0xFE, 0xC5, +/* 00018000 */ 0x02, 0x4E, 0x26, 0x4E, 0x27, 0x4E, 0x28, 0x4E, 0x29, 0x4E, 0x2A, 0x4E, 0x2B, 0x4E, 0x2C, 0x4E, +/* 00018010 */ 0x2D, 0x4E, 0x2E, 0x4E, 0x2F, 0x4E, 0x30, 0x4E, 0x31, 0x4E, 0x32, 0x4E, 0x33, 0x4E, 0x34, 0x4E, +/* 00018020 */ 0x35, 0x4E, 0x36, 0x4E, 0x37, 0x4E, 0x38, 0x4E, 0x39, 0x4E, 0x3D, 0x96, 0x02, 0x3D, 0x4E, 0x3D, +/* 00018030 */ 0x96, 0x03, 0x3D, 0x45, 0x26, 0x02, 0x45, 0x27, 0x03, 0x45, 0x3D, 0x04, 0x01, 0x09, 0x01, 0x3E, +/* 00018040 */ 0x26, 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, 0x3D, 0x05, 0x01, 0x09, 0x01, 0x3E, 0x27, 0x2D, 0x3D, +/* 00018050 */ 0x3D, 0x3E, 0x2D, 0x3D, 0x3D, 0x06, 0x45, 0x28, 0x3D, 0x45, 0x29, 0x07, 0x2D, 0x3D, 0x08, 0x09, +/* 00018060 */ 0x45, 0x2A, 0x3D, 0x45, 0x3D, 0x0A, 0x01, 0x09, 0x01, 0x3E, 0x29, 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, +/* 00018070 */ 0x3D, 0x3D, 0x05, 0x01, 0x09, 0x01, 0x3E, 0x2A, 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, 0x3D, 0x0B, +/* 00018080 */ 0x45, 0x2B, 0x3D, 0x45, 0x3D, 0x0C, 0x01, 0x09, 0x01, 0x3E, 0x28, 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, +/* 00018090 */ 0x3D, 0x3D, 0x0D, 0x45, 0x2C, 0x3D, 0x45, 0x3D, 0x0A, 0x01, 0x09, 0x01, 0x3E, 0x27, 0x2D, 0x3D, +/* 000180A0 */ 0x3D, 0x3E, 0x2D, 0x3D, 0x3D, 0x0E, 0x45, 0x2D, 0x3D, 0x45, 0x3D, 0x0A, 0x01, 0x09, 0x01, 0x3E, +/* 000180B0 */ 0x2D, 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, 0x3D, 0x0F, 0x01, 0x09, 0x01, 0x3E, 0x28, 0x2D, 0x3D, +/* 000180C0 */ 0x3D, 0x3E, 0x2D, 0x3D, 0x3D, 0x10, 0x45, 0x2E, 0x3D, 0x45, 0x3D, 0x0A, 0x01, 0x09, 0x01, 0x3E, +/* 000180D0 */ 0x28, 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, 0x3D, 0x11, 0x01, 0x09, 0x01, 0x3E, 0x27, 0x2D, 0x3D, +/* 000180E0 */ 0x3D, 0x3E, 0x01, 0x09, 0x01, 0x3E, 0x28, 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, 0x3D, 0x13, 0x45, +/* 000180F0 */ 0x2F, 0x3D, 0x45, 0x3D, 0x0A, 0x01, 0x09, 0x01, 0x3E, 0x26, 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, +/* 00018100 */ 0x3D, 0x14, 0x01, 0x09, 0x01, 0x3E, 0x27, 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, 0x3D, 0x13, 0x45, +/* 00018110 */ 0x30, 0x3D, 0x45, 0x3D, 0x0A, 0x01, 0x09, 0x01, 0x3E, 0x26, 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, +/* 00018120 */ 0x3D, 0x15, 0x45, 0x31, 0x3D, 0x45, 0x3D, 0x0A, 0x01, 0x09, 0x01, 0x3E, 0x26, 0x2D, 0x3D, 0x3D, +/* 00018130 */ 0x3E, 0x2D, 0x3D, 0x3D, 0x16, 0x01, 0x09, 0x01, 0x3E, 0x26, 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, +/* 00018140 */ 0x3D, 0x17, 0x45, 0x32, 0x3D, 0x01, 0x09, 0x01, 0x3E, 0x26, 0x2D, 0x3E, 0x3E, 0x18, 0xFD, 0x3D, +/* 00018150 */ 0x0A, 0x3E, 0x05, 0x45, 0x3E, 0x19, 0x01, 0x09, 0x01, 0x3F, 0x32, 0x2D, 0x3E, 0x3E, 0x3F, 0x2D, +/* 00018160 */ 0x3E, 0x3E, 0x1A, 0x45, 0x3F, 0x05, 0x01, 0x09, 0x01, 0x40, 0x26, 0x2D, 0x3F, 0x3F, 0x40, 0x2D, +/* 00018170 */ 0x3F, 0x3F, 0x1B, 0xFF, 0x3D, 0x3E, 0x3F, 0x02, 0xFE, 0x3D, 0x0B, 0x04, 0x45, 0x33, 0x3D, 0x45, +/* 00018180 */ 0x3D, 0x1C, 0x01, 0x09, 0x01, 0x3E, 0x33, 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, 0x3D, 0x0B, 0x45, +/* 00018190 */ 0x3E, 0x1D, 0x01, 0x09, 0x01, 0x3F, 0x31, 0x2D, 0x3E, 0x3E, 0x3F, 0x2D, 0x3E, 0x3E, 0x1E, 0x2D, +/* 000181A0 */ 0x3D, 0x3D, 0x3E, 0x45, 0x3E, 0x1D, 0x01, 0x09, 0x01, 0x3F, 0x30, 0x2D, 0x3E, 0x3E, 0x3F, 0x2D, +/* 000181B0 */ 0x3E, 0x3E, 0x1E, 0x2D, 0x3D, 0x3D, 0x3E, 0x45, 0x34, 0x3D, 0x45, 0x3D, 0x1F, 0x01, 0x09, 0x01, +/* 000181C0 */ 0x3E, 0x2F, 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, 0x3D, 0x20, 0x45, 0x3E, 0x1F, 0x01, 0x09, 0x01, +/* 000181D0 */ 0x3F, 0x2E, 0x2D, 0x3E, 0x3E, 0x3F, 0x2D, 0x3E, 0x3E, 0x20, 0x2D, 0x3D, 0x3D, 0x3E, 0x45, 0x3E, +/* 000181E0 */ 0x19, 0x01, 0x09, 0x01, 0x3F, 0x2C, 0x2D, 0x3E, 0x3E, 0x3F, 0x2D, 0x3E, 0x3E, 0x21, 0x2D, 0x3D, +/* 000181F0 */ 0x3D, 0x3E, 0x45, 0x35, 0x3D, 0x45, 0x3D, 0x22, 0x01, 0x09, 0x01, 0x3E, 0x34, 0x2D, 0x3D, 0x3D, +/* 00018200 */ 0x3E, 0x2D, 0x3D, 0x3D, 0x22, 0x01, 0x09, 0x01, 0x3E, 0x35, 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, +/* 00018210 */ 0x3D, 0x22, 0x45, 0x36, 0x3D, 0x45, 0x3D, 0x0A, 0x01, 0x09, 0x01, 0x3E, 0x36, 0x2D, 0x3D, 0x3D, +/* 00018220 */ 0x3E, 0x2D, 0x3D, 0x3D, 0x05, 0x01, 0x09, 0x01, 0x3E, 0x2C, 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, +/* 00018230 */ 0x3D, 0x05, 0x01, 0x09, 0x01, 0x3E, 0x2B, 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, 0x3D, 0x0B, 0x45, +/* 00018240 */ 0x37, 0x3D, 0x8E, 0x02, 0x0A, 0x3D, 0x07, 0x03, 0x00, 0x45, 0x3E, 0x23, 0x01, 0x09, 0x01, 0x3F, +/* 00018250 */ 0x34, 0x2D, 0x3E, 0x3E, 0x3F, 0x2D, 0x3E, 0x3E, 0x24, 0x59, 0x01, 0x3E, 0x59, 0x02, 0x25, 0xC4, +/* 00018260 */ 0x03, 0x3D, 0x3D, 0x45, 0x38, 0x3D, 0x8E, 0x02, 0x0A, 0x3D, 0x07, 0x03, 0x00, 0x45, 0x3E, 0x23, +/* 00018270 */ 0x01, 0x09, 0x01, 0x3F, 0x35, 0x2D, 0x3E, 0x3E, 0x3F, 0x2D, 0x3E, 0x3E, 0x24, 0x59, 0x01, 0x3E, +/* 00018280 */ 0x59, 0x02, 0x25, 0xC4, 0x03, 0x3D, 0x3D, 0x45, 0x39, 0x3D, 0x8E, 0x02, 0x0A, 0x3D, 0x07, 0x03, +/* 00018290 */ 0x00, 0x45, 0x3E, 0x23, 0x01, 0x09, 0x01, 0x3F, 0x37, 0x2D, 0x3E, 0x3E, 0x3F, 0x2D, 0x3E, 0x3E, +/* 000182A0 */ 0x24, 0x59, 0x01, 0x3E, 0x59, 0x02, 0x25, 0xC4, 0x03, 0x3D, 0x3D, 0x96, 0x02, 0x3D, 0x8E, 0x02, +/* 000182B0 */ 0x02, 0x3D, 0x07, 0x01, 0x00, 0xC4, 0x01, 0x3D, 0x3D, 0x96, 0x03, 0x3D, 0xD6, 0x00, 0x00, 0x09, +/* 000182C0 */ 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x2A, 0x56, 0x18, 0x32, 0x00, 0x00, 0x00, 0x03, 0x00, +/* 000182D0 */ 0x1F, 0x00, 0x03, 0x00, 0x1F, 0x00, 0x20, 0x00, 0x33, 0x00, 0x03, 0x00, 0x77, 0x00, 0x07, 0x00, +/* 000182E0 */ 0xC0, 0x00, 0x20, 0x00, 0x44, 0x00, 0x13, 0x00, 0x7D, 0x00, 0x13, 0x00, 0x94, 0x00, 0x20, 0x00, +/* 000182F0 */ 0x83, 0x00, 0x29, 0x00, 0x83, 0x00, 0x20, 0x00, 0x74, 0x00, 0x13, 0x00, 0x6A, 0x00, 0x20, 0x00, +/* 00018300 */ 0x7A, 0x00, 0x3A, 0x00, 0xAF, 0x03, 0x3B, 0x00, 0x4C, 0x01, 0x3B, 0x00, 0x5A, 0x01, 0x20, 0x00, +/* 00018310 */ 0x4B, 0x00, 0x2D, 0x00, 0xBA, 0x00, 0x24, 0x00, 0x74, 0x00, 0x24, 0x00, 0x92, 0x00, 0x24, 0x00, +/* 00018320 */ 0x93, 0x00, 0x0E, 0x00, 0x34, 0x00, 0x08, 0x00, 0x59, 0x08, 0x00, 0x2F, 0x83, 0x01, 0x00, 0x7F, +/* 00018330 */ 0x7C, 0x00, 0xC3, 0x43, 0x50, 0x13, 0x00, 0xFE, 0x38, 0x02, 0x0F, 0xA2, 0x41, 0xD1, 0x00, 0x35, +/* 00018340 */ 0xFE, 0xB3, 0x64, 0xFE, 0xB3, 0x64, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0xB3, 0x64, 0xFE, +/* 00018350 */ 0x4C, 0x08, 0xFE, 0x4C, 0x08, 0x10, 0x0B, 0x13, 0x09, 0x8B, 0x80, 0x2F, 0x03, 0x03, 0x02, 0x15, +/* 00018360 */ 0x15, 0x15, 0x15, 0x03, 0x12, 0x13, 0xFE, 0x10, 0x01, 0xFE, 0xB0, 0x01, 0xFE, 0x39, 0x01, 0xFE, +/* 00018370 */ 0x5D, 0x01, 0x07, 0x01, 0x01, 0x01, 0x02, 0x06, 0xFE, 0x95, 0x03, 0x01, 0x03, 0x01, 0x04, 0x01, +/* 00018380 */ 0x05, 0x01, 0x00, 0x06, 0xFE, 0xD0, 0x03, 0xFE, 0xD4, 0x01, 0x4E, 0x0C, 0x4E, 0x0D, 0x4E, 0x0E, +/* 00018390 */ 0x4E, 0x0F, 0x4E, 0x10, 0x4E, 0x11, 0x8E, 0x01, 0x03, 0x17, 0x4A, 0x17, 0x6C, 0x16, 0x17, 0x00, +/* 000183A0 */ 0x07, 0x02, 0x00, 0x59, 0x00, 0x17, 0x59, 0x01, 0x0B, 0x1F, 0x02, 0x16, 0x16, 0x45, 0x0C, 0x16, +/* 000183B0 */ 0x0E, 0x06, 0x00, 0x0C, 0x45, 0x00, 0x0C, 0x09, 0xA2, 0x01, 0x8E, 0x03, 0x36, 0x17, 0x4A, 0x17, +/* 000183C0 */ 0x6C, 0x16, 0x17, 0x01, 0x07, 0x03, 0x00, 0x59, 0x00, 0x17, 0x59, 0x01, 0x0B, 0x8E, 0x01, 0x02, +/* 000183D0 */ 0x18, 0x4A, 0x18, 0x59, 0x02, 0x18, 0x1F, 0x03, 0x16, 0x16, 0x45, 0x0D, 0x16, 0x0F, 0x06, 0x00, +/* 000183E0 */ 0x0D, 0x45, 0x00, 0x02, 0x09, 0x75, 0x01, 0x8E, 0x03, 0x36, 0x17, 0x4A, 0x17, 0x6C, 0x16, 0x17, +/* 000183F0 */ 0x02, 0x07, 0x01, 0x00, 0x59, 0x00, 0x17, 0x1F, 0x01, 0x16, 0x16, 0x45, 0x0E, 0x16, 0x97, 0x16, +/* 00018400 */ 0x0D, 0x03, 0x76, 0x16, 0x0E, 0x03, 0x97, 0x16, 0x0D, 0x03, 0x76, 0x16, 0x0E, 0x04, 0x97, 0x16, +/* 00018410 */ 0x0D, 0x04, 0x0E, 0x1C, 0x00, 0x16, 0x97, 0x16, 0x0D, 0x04, 0x76, 0x16, 0x0E, 0x05, 0x5E, 0x17, +/* 00018420 */ 0x0E, 0x06, 0x97, 0x18, 0x0D, 0x04, 0x2D, 0x18, 0x05, 0x18, 0x2D, 0x16, 0x17, 0x18, 0x76, 0x16, +/* 00018430 */ 0x0E, 0x07, 0x97, 0x16, 0x0D, 0x06, 0x0E, 0x1C, 0x00, 0x16, 0x97, 0x16, 0x0D, 0x06, 0x76, 0x16, +/* 00018440 */ 0x0E, 0x08, 0x5E, 0x17, 0x0E, 0x09, 0x97, 0x18, 0x0D, 0x06, 0x2D, 0x18, 0x05, 0x18, 0x2D, 0x16, +/* 00018450 */ 0x17, 0x18, 0x76, 0x16, 0x0E, 0x0A, 0x97, 0x16, 0x0D, 0x07, 0x0E, 0x08, 0x00, 0x16, 0x97, 0x16, +/* 00018460 */ 0x0D, 0x07, 0x76, 0x16, 0x0E, 0x0B, 0x97, 0x16, 0x0D, 0x08, 0x0E, 0xCC, 0x00, 0x16, 0x97, 0x16, +/* 00018470 */ 0x0D, 0x08, 0x76, 0x16, 0x0E, 0x0C, 0x8E, 0x03, 0x36, 0x17, 0x4A, 0x17, 0x6C, 0x16, 0x17, 0x0D, +/* 00018480 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x17, 0x97, 0x18, 0x0D, 0x08, 0x59, 0x01, 0x18, 0x59, 0x02, 0x05, +/* 00018490 */ 0x1F, 0x03, 0x16, 0x16, 0x45, 0x0F, 0x16, 0x45, 0x10, 0x09, 0xEC, 0x00, 0xA6, 0x16, 0x0F, 0x0E, +/* 000184A0 */ 0x12, 0x03, 0x00, 0x10, 0x16, 0x09, 0x92, 0x00, 0x97, 0x16, 0x0F, 0x10, 0x15, 0x03, 0x00, 0x16, +/* 000184B0 */ 0x0A, 0x09, 0x03, 0x00, 0x09, 0x7D, 0x00, 0xA8, 0x16, 0x45, 0x11, 0x16, 0x2D, 0x16, 0x10, 0x03, +/* 000184C0 */ 0x45, 0x11, 0x16, 0xEC, 0x01, 0xA6, 0x16, 0x0F, 0x0F, 0x12, 0x03, 0x00, 0x11, 0x16, 0x09, 0x16, +/* 000184D0 */ 0x00, 0x97, 0x16, 0x0F, 0x11, 0xA6, 0x16, 0x16, 0x10, 0x11, 0x03, 0x00, 0x16, 0x03, 0x09, 0x06, +/* 000184E0 */ 0x00, 0x26, 0x11, 0x11, 0x09, 0xDC, 0xFF, 0x2D, 0x16, 0x10, 0x03, 0x11, 0x03, 0x00, 0x11, 0x16, +/* 000184F0 */ 0x09, 0x3E, 0x00, 0x45, 0x16, 0x0E, 0x8E, 0x03, 0x36, 0x18, 0x4A, 0x18, 0x6C, 0x17, 0x18, 0x11, +/* 00018500 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x18, 0x8E, 0x03, 0x36, 0x1A, 0x4A, 0x1A, 0x6C, 0x19, 0x1A, 0x12, +/* 00018510 */ 0x07, 0x04, 0x00, 0x59, 0x00, 0x1A, 0x59, 0x01, 0x0F, 0x59, 0x02, 0x10, 0x59, 0x03, 0x11, 0x1F, +/* 00018520 */ 0x04, 0x19, 0x19, 0x59, 0x01, 0x19, 0x59, 0x02, 0x05, 0x1F, 0x03, 0x17, 0x17, 0x76, 0x17, 0x16, +/* 00018530 */ 0x13, 0x09, 0x06, 0x00, 0x26, 0x10, 0x10, 0x09, 0x60, 0xFF, 0x8E, 0x01, 0x03, 0x17, 0x4A, 0x17, +/* 00018540 */ 0x6C, 0x16, 0x17, 0x14, 0x07, 0x03, 0x00, 0x59, 0x00, 0x17, 0x59, 0x01, 0x0B, 0x59, 0x02, 0x0E, +/* 00018550 */ 0x1F, 0x03, 0xFF, 0x16, 0x45, 0x00, 0x0E, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x98, +/* 00018560 */ 0x01, 0xFE, 0x01, 0x01, 0x69, 0xFE, 0xD1, 0x03, 0xFE, 0x1E, 0x02, 0xFE, 0xD2, 0x03, 0xFE, 0x1E, +/* 00018570 */ 0x02, 0xFE, 0x1E, 0x02, 0xFE, 0xD3, 0x03, 0xFE, 0x1E, 0x02, 0xFE, 0x1E, 0x02, 0xFE, 0xD4, 0x03, +/* 00018580 */ 0xFE, 0xD5, 0x03, 0xFE, 0x56, 0x01, 0xD1, 0xD1, 0xD1, 0xCC, 0xFE, 0x50, 0x01, 0xFE, 0x96, 0x03, +/* 00018590 */ 0xFE, 0x9B, 0x01, 0xFE, 0xD4, 0x64, 0x23, 0x0C, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x3C, 0x00, 0x04, +/* 000185A0 */ 0x00, 0x1E, 0x00, 0x06, 0x00, 0x2A, 0x00, 0x23, 0x00, 0x39, 0x00, 0x04, 0x00, 0x1E, 0x00, 0x06, +/* 000185B0 */ 0x00, 0x28, 0x00, 0x17, 0x00, 0x24, 0x00, 0x08, 0x00, 0x25, 0x00, 0x08, 0x00, 0x21, 0x00, 0x08, +/* 000185C0 */ 0x00, 0x20, 0x00, 0x08, 0x00, 0x27, 0x00, 0x14, 0x00, 0x37, 0x00, 0x08, 0x00, 0x20, 0x00, 0x08, +/* 000185D0 */ 0x00, 0x27, 0x00, 0x14, 0x00, 0x37, 0x00, 0x08, 0x00, 0x20, 0x00, 0x08, 0x00, 0x34, 0x00, 0x08, +/* 000185E0 */ 0x00, 0x20, 0x00, 0x08, 0x00, 0x76, 0x00, 0x21, 0x00, 0x44, 0x00, 0x05, 0x00, 0x0B, 0x00, 0x0C, +/* 000185F0 */ 0x00, 0x36, 0x00, 0x0C, 0x00, 0x39, 0x00, 0x03, 0x00, 0x35, 0x00, 0x05, 0x00, 0x20, 0x00, 0x09, +/* 00018600 */ 0x00, 0x0B, 0x00, 0x1C, 0x00, 0x3B, 0x00, 0x06, 0x00, 0x3B, 0x01, 0x0C, 0x00, 0xFC, 0x00, 0x3E, +/* 00018610 */ 0x00, 0xCC, 0x00, 0x03, 0x00, 0x0E, 0xFC, 0x06, 0x00, 0x26, 0x04, 0x1A, 0x00, 0x33, 0x00, 0x08, +/* 00018620 */ 0x00, 0x14, 0x00, 0x00, 0x7F, 0x4C, 0x00, 0x00, 0x20, 0x10, 0x03, 0x00, 0xFE, 0xF2, 0x01, 0x04, +/* 00018630 */ 0xA1, 0x41, 0xC1, 0x00, 0xFE, 0x51, 0x03, 0x33, 0xFE, 0x02, 0x50, 0xFE, 0x02, 0x50, 0x41, 0xFE, +/* 00018640 */ 0x00, 0x90, 0x01, 0x01, 0xFE, 0x02, 0x50, 0x55, 0x55, 0x02, 0x02, 0x03, 0x05, 0x05, 0x02, 0x01, +/* 00018650 */ 0x02, 0x0D, 0xE2, 0x03, 0x00, 0x01, 0x43, 0x01, 0x01, 0x0E, 0x03, 0xA8, 0x00, 0x24, 0x00, 0x0A, +/* 00018660 */ 0xFE, 0xAB, 0x03, 0x01, 0xFE, 0x30, 0x50, 0x02, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x26, 0x00, +/* 00018670 */ 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0xE4, 0x01, 0x1C, 0xA2, 0x41, 0xC1, +/* 00018680 */ 0x00, 0xFE, 0x5B, 0x03, 0x32, 0xFE, 0x1F, 0x4E, 0xFE, 0x1F, 0x4E, 0x01, 0xFE, 0x00, 0x90, 0x06, +/* 00018690 */ 0x06, 0xFE, 0x1F, 0x4E, 0xFE, 0xC2, 0x01, 0xFE, 0xC2, 0x01, 0x0B, 0x06, 0x0D, 0x08, 0x39, 0x35, +/* 000186A0 */ 0x02, 0x04, 0x04, 0x04, 0x04, 0x04, 0x0C, 0x08, 0x06, 0xFE, 0xA8, 0x03, 0x05, 0xFE, 0xA9, 0x03, +/* 000186B0 */ 0x06, 0xFE, 0xAA, 0x03, 0xC0, 0x4E, 0x0B, 0x97, 0x0D, 0x06, 0x07, 0x45, 0x0B, 0x0D, 0xA8, 0x0D, +/* 000186C0 */ 0x15, 0x03, 0x00, 0x0B, 0x0D, 0x09, 0xA3, 0x00, 0x8E, 0x02, 0x24, 0x0E, 0x6C, 0x0D, 0x0E, 0x00, +/* 000186D0 */ 0x07, 0x02, 0x00, 0x59, 0x00, 0x0E, 0x59, 0x01, 0x0B, 0x1F, 0x02, 0x0D, 0x0D, 0x45, 0x0B, 0x0D, +/* 000186E0 */ 0x8E, 0x02, 0x36, 0x0E, 0x4A, 0x0E, 0x6C, 0x0D, 0x0E, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0E, +/* 000186F0 */ 0x59, 0x01, 0x0B, 0x1F, 0x02, 0x0D, 0x0D, 0x0F, 0x0D, 0x00, 0x0D, 0x12, 0x08, 0x00, 0x0B, 0x08, +/* 00018700 */ 0x11, 0x03, 0x00, 0x0B, 0x09, 0x09, 0x49, 0x00, 0x8E, 0x02, 0x03, 0x0E, 0x6C, 0x0D, 0x0E, 0x02, +/* 00018710 */ 0x07, 0x04, 0x00, 0x59, 0x00, 0x0E, 0x8E, 0x02, 0x0C, 0x0F, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, +/* 00018720 */ 0x59, 0x01, 0x0B, 0x1F, 0x02, 0x0F, 0x0F, 0x59, 0x01, 0x0F, 0x59, 0x02, 0x07, 0x45, 0x0F, 0x03, +/* 00018730 */ 0x01, 0x09, 0x01, 0x10, 0x08, 0x2D, 0x0F, 0x0F, 0x10, 0x2D, 0x0F, 0x0F, 0x04, 0x01, 0x09, 0x01, +/* 00018740 */ 0x10, 0x09, 0x2D, 0x0F, 0x0F, 0x10, 0x2D, 0x0F, 0x0F, 0x05, 0x59, 0x03, 0x0F, 0x1F, 0x04, 0xFF, +/* 00018750 */ 0x0D, 0x8E, 0x02, 0x36, 0x0E, 0x4A, 0x0E, 0x6C, 0x0D, 0x0E, 0x03, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 00018760 */ 0x0E, 0x59, 0x01, 0x0B, 0x1F, 0x02, 0x00, 0x0D, 0x09, 0x08, 0x00, 0x45, 0x00, 0x0A, 0x09, 0x02, +/* 00018770 */ 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x23, 0x03, 0xC4, 0xFE, 0xAC, 0x02, 0x26, 0xFE, 0x62, 0x4E, +/* 00018780 */ 0x08, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x27, 0x00, 0x0A, 0x00, 0x27, 0x00, 0x18, 0x00, 0x2E, +/* 00018790 */ 0x00, 0x28, 0x00, 0x4C, 0x00, 0x49, 0x00, 0x77, 0x00, 0x1A, 0x00, 0x2A, 0x00, 0x08, 0x00, 0x15, +/* 000187A0 */ 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0xB9, 0x01, 0x04, 0xA3, 0x41, +/* 000187B0 */ 0xC1, 0x00, 0xFE, 0x50, 0x03, 0x31, 0xFE, 0xB4, 0x47, 0xFE, 0xB4, 0x47, 0x01, 0xFE, 0x00, 0x90, +/* 000187C0 */ 0x06, 0x06, 0xFE, 0xB4, 0x47, 0xFE, 0xDD, 0x02, 0xFE, 0xDD, 0x02, 0x0C, 0x0A, 0x11, 0x09, 0x53, +/* 000187D0 */ 0x4C, 0x02, 0x04, 0x06, 0x06, 0x06, 0x06, 0x10, 0x06, 0xFE, 0xA2, 0x03, 0x06, 0xFE, 0xA3, 0x03, +/* 000187E0 */ 0x06, 0xFE, 0xA4, 0x03, 0x01, 0xFF, 0x08, 0x05, 0xFE, 0xA5, 0x03, 0x05, 0xFE, 0xA6, 0x03, 0x05, +/* 000187F0 */ 0xFE, 0xA7, 0x03, 0xFE, 0x16, 0x01, 0x4E, 0x0F, 0x97, 0x11, 0x0A, 0x0B, 0x45, 0x0F, 0x11, 0xA8, +/* 00018800 */ 0x11, 0x15, 0x03, 0x00, 0x0F, 0x11, 0x09, 0xF9, 0x00, 0x0C, 0x03, 0x00, 0x0C, 0x02, 0x09, 0x18, +/* 00018810 */ 0x00, 0x8E, 0x02, 0x24, 0x12, 0x6C, 0x11, 0x12, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x12, 0x59, +/* 00018820 */ 0x01, 0x0F, 0x1F, 0x02, 0x11, 0x11, 0x45, 0x0F, 0x11, 0x0C, 0x03, 0x00, 0x0C, 0x03, 0x09, 0x18, +/* 00018830 */ 0x00, 0x8E, 0x02, 0x24, 0x12, 0x6C, 0x11, 0x12, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x12, 0x59, +/* 00018840 */ 0x01, 0x0F, 0x1F, 0x02, 0x11, 0x11, 0x45, 0x0F, 0x11, 0x0C, 0x03, 0x00, 0x0C, 0x04, 0x09, 0x18, +/* 00018850 */ 0x00, 0x8E, 0x02, 0x24, 0x12, 0x6C, 0x11, 0x12, 0x02, 0x07, 0x02, 0x00, 0x59, 0x00, 0x12, 0x59, +/* 00018860 */ 0x01, 0x0F, 0x1F, 0x02, 0x11, 0x11, 0x45, 0x0F, 0x11, 0xA8, 0x11, 0x15, 0x03, 0x00, 0x0D, 0x11, +/* 00018870 */ 0x09, 0x89, 0x00, 0x8E, 0x02, 0x36, 0x12, 0x4A, 0x12, 0x6C, 0x11, 0x12, 0x03, 0x07, 0x03, 0x00, +/* 00018880 */ 0x59, 0x00, 0x12, 0x59, 0x01, 0x0D, 0x59, 0x02, 0x0F, 0x1F, 0x03, 0x11, 0x11, 0x0C, 0x03, 0x00, +/* 00018890 */ 0x11, 0x05, 0x09, 0x67, 0x00, 0x8E, 0x02, 0x03, 0x12, 0x6C, 0x11, 0x12, 0x04, 0x07, 0x04, 0x00, +/* 000188A0 */ 0x59, 0x00, 0x12, 0x8E, 0x02, 0x0C, 0x13, 0x07, 0x02, 0x00, 0x59, 0x00, 0x06, 0x59, 0x01, 0x0F, +/* 000188B0 */ 0x1F, 0x02, 0x13, 0x13, 0x59, 0x01, 0x13, 0x8E, 0x02, 0x0C, 0x13, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 000188C0 */ 0x06, 0x59, 0x01, 0x0B, 0x1F, 0x02, 0x13, 0x13, 0x59, 0x02, 0x13, 0x45, 0x13, 0x07, 0x8E, 0x02, +/* 000188D0 */ 0x36, 0x15, 0x4A, 0x15, 0x6C, 0x14, 0x15, 0x05, 0x07, 0x03, 0x00, 0x59, 0x00, 0x15, 0x59, 0x01, +/* 000188E0 */ 0x0D, 0x59, 0x02, 0x09, 0x1F, 0x03, 0x14, 0x14, 0x01, 0x09, 0x01, 0x15, 0x14, 0x2D, 0x13, 0x13, +/* 000188F0 */ 0x15, 0x2D, 0x13, 0x13, 0x08, 0x59, 0x03, 0x13, 0x1F, 0x04, 0xFF, 0x11, 0x45, 0x00, 0x0F, 0x09, +/* 00018900 */ 0x08, 0x00, 0x45, 0x00, 0x0E, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x24, 0x03, 0xFE, +/* 00018910 */ 0x22, 0x03, 0xFE, 0x23, 0x03, 0xFE, 0x0F, 0x03, 0xFE, 0xAC, 0x02, 0xCC, 0xFE, 0xFC, 0x47, 0x0D, +/* 00018920 */ 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x28, 0x00, 0x0A, 0x00, 0x27, 0x00, 0x08, 0x00, 0x29, 0x00, +/* 00018930 */ 0x18, 0x00, 0x45, 0x00, 0x08, 0x00, 0x28, 0x00, 0x18, 0x00, 0x3D, 0x00, 0x08, 0x00, 0x28, 0x00, +/* 00018940 */ 0x18, 0x00, 0x3D, 0x00, 0x2C, 0x00, 0x53, 0x00, 0x67, 0x00, 0x84, 0x00, 0x06, 0x00, 0x21, 0x00, +/* 00018950 */ 0x08, 0x00, 0x15, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x07, 0x00, 0xFE, 0xAD, 0x01, +/* 00018960 */ 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x26, 0x03, 0x30, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0xA0, +/* 00018970 */ 0x46, 0xFE, 0xA0, 0x46, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0xA0, 0x46, 0xDF, 0xDF, 0x06, +/* 00018980 */ 0x06, 0x0A, 0x04, 0x20, 0x1C, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x09, 0x01, 0x00, 0x01, 0x02, +/* 00018990 */ 0x01, 0x35, 0x01, 0x01, 0x63, 0x4E, 0x07, 0x4E, 0x08, 0x8E, 0x02, 0x24, 0x0B, 0x6C, 0x0A, 0x0B, +/* 000189A0 */ 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0B, 0x59, 0x01, 0x06, 0x1F, 0x02, 0x0A, 0x0A, 0x45, 0x07, +/* 000189B0 */ 0x0A, 0x13, 0x03, 0x00, 0x07, 0x02, 0x09, 0x06, 0x00, 0x45, 0x00, 0x02, 0x09, 0x37, 0x00, 0x8E, +/* 000189C0 */ 0x02, 0x36, 0x0B, 0x4A, 0x0B, 0x6C, 0x0A, 0x0B, 0x01, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0B, 0x59, +/* 000189D0 */ 0x01, 0x03, 0x59, 0x02, 0x04, 0x1F, 0x03, 0x0A, 0x0A, 0x33, 0x0A, 0x0A, 0x05, 0x45, 0x08, 0x0A, +/* 000189E0 */ 0x12, 0x03, 0x00, 0x08, 0x07, 0x09, 0x06, 0x00, 0x45, 0x00, 0x08, 0x09, 0x03, 0x00, 0x46, 0x00, +/* 000189F0 */ 0x07, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x25, 0x03, 0x2C, 0xFE, 0xBA, 0x46, 0x06, +/* 00018A00 */ 0x04, 0x00, 0x00, 0x00, 0x18, 0x00, 0x2F, 0x00, 0x08, 0x00, 0x20, 0x00, 0x06, 0x00, 0x25, 0x00, +/* 00018A10 */ 0x21, 0x00, 0x2A, 0x00, 0x16, 0x00, 0x26, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x07, +/* 00018A20 */ 0x00, 0xFE, 0x9D, 0x01, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x25, 0x03, 0x2F, 0xFF, 0x01, 0x00, +/* 00018A30 */ 0x40, 0x02, 0xFE, 0x09, 0x45, 0xFE, 0x09, 0x45, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0x09, +/* 00018A40 */ 0x45, 0xFE, 0x8C, 0x01, 0xFE, 0x8C, 0x01, 0x08, 0x04, 0x08, 0x06, 0x33, 0x2E, 0x02, 0x04, 0x02, +/* 00018A50 */ 0x02, 0x02, 0x02, 0x07, 0x08, 0x01, 0x00, 0xA2, 0x4E, 0x05, 0x4E, 0x06, 0x8E, 0x02, 0x0B, 0x08, +/* 00018A60 */ 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x04, 0x1F, 0x02, 0x08, 0x08, 0x45, 0x05, 0x08, +/* 00018A70 */ 0x8E, 0x02, 0x21, 0x08, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x05, 0x1F, 0x02, 0x08, +/* 00018A80 */ 0x08, 0x0E, 0x09, 0x00, 0x08, 0x45, 0x00, 0x03, 0x09, 0x6D, 0x00, 0x09, 0x20, 0x00, 0x14, 0x15, +/* 00018A90 */ 0x00, 0x05, 0x03, 0x8E, 0x02, 0x20, 0x08, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x05, +/* 00018AA0 */ 0x1F, 0x02, 0x08, 0x08, 0x0F, 0x06, 0x00, 0x08, 0x45, 0x00, 0x05, 0x09, 0x4A, 0x00, 0x8E, 0x02, +/* 00018AB0 */ 0x36, 0x09, 0x4A, 0x09, 0x6C, 0x08, 0x09, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x09, 0x8E, 0x02, +/* 00018AC0 */ 0x36, 0x0B, 0x4A, 0x0B, 0x6C, 0x0A, 0x0B, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0B, 0x59, 0x01, +/* 00018AD0 */ 0x05, 0x1F, 0x02, 0x0A, 0x0A, 0x59, 0x01, 0x0A, 0x1F, 0x02, 0x08, 0x08, 0x45, 0x06, 0x08, 0x12, +/* 00018AE0 */ 0x03, 0x00, 0x05, 0x03, 0x09, 0x09, 0x00, 0x28, 0x00, 0x06, 0x09, 0x0B, 0x00, 0x09, 0x06, 0x00, +/* 00018AF0 */ 0x45, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x26, 0x1D, 0xFE, 0x24, 0x45, 0x0A, +/* 00018B00 */ 0x04, 0x00, 0x00, 0x00, 0x14, 0x00, 0x26, 0x00, 0x15, 0x00, 0x25, 0x00, 0x09, 0x00, 0x1D, 0x00, +/* 00018B10 */ 0x1A, 0x00, 0x39, 0x00, 0x06, 0x00, 0x2A, 0x00, 0x31, 0x00, 0x30, 0x00, 0x08, 0x00, 0x22, 0x00, +/* 00018B20 */ 0x09, 0x00, 0x31, 0x00, 0x08, 0x00, 0x22, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0x01, 0x00, 0x10, 0x07, +/* 00018B30 */ 0x00, 0xFE, 0x99, 0x01, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x24, 0x03, 0x2E, 0xFF, 0x01, 0x00, +/* 00018B40 */ 0x40, 0x02, 0xFE, 0xA2, 0x44, 0xFE, 0xA2, 0x44, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0xA2, +/* 00018B50 */ 0x44, 0x5C, 0x5C, 0x03, 0x03, 0x05, 0x03, 0x10, 0x0F, 0x02, 0x01, 0x04, 0x08, 0x2D, 0xA8, 0x05, +/* 00018B60 */ 0x15, 0x03, 0x00, 0x03, 0x05, 0x09, 0x17, 0x00, 0x8E, 0x02, 0x08, 0x05, 0x07, 0x02, 0x00, 0x59, +/* 00018B70 */ 0x00, 0x02, 0x59, 0x01, 0x03, 0x1F, 0x02, 0x05, 0x05, 0x45, 0x00, 0x05, 0x09, 0x05, 0x00, 0xA8, +/* 00018B80 */ 0x05, 0x46, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xC4, 0x44, 0x02, 0x00, +/* 00018B90 */ 0x00, 0x00, 0x00, 0x2B, 0x00, 0x39, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0x01, 0x00, 0x10, 0x07, 0x00, +/* 00018BA0 */ 0xFE, 0x95, 0x01, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x23, 0x03, 0x2D, 0xFF, 0x01, 0x00, 0x40, +/* 00018BB0 */ 0x02, 0xFE, 0x4A, 0x44, 0xFE, 0x4A, 0x44, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0x4A, 0x44, +/* 00018BC0 */ 0x4D, 0x4D, 0x03, 0x03, 0x05, 0x03, 0x10, 0x0F, 0x02, 0x01, 0x04, 0x08, 0x2D, 0xA8, 0x05, 0x15, +/* 00018BD0 */ 0x03, 0x00, 0x03, 0x05, 0x09, 0x17, 0x00, 0x8E, 0x02, 0x0B, 0x05, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 00018BE0 */ 0x02, 0x59, 0x01, 0x03, 0x1F, 0x02, 0x05, 0x05, 0x45, 0x00, 0x05, 0x09, 0x05, 0x00, 0xA9, 0x05, +/* 00018BF0 */ 0x46, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x64, 0x44, 0x02, 0x00, 0x00, +/* 00018C00 */ 0x00, 0x00, 0x2B, 0x00, 0x32, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0x01, 0x00, 0x10, 0x07, 0x00, 0xFE, +/* 00018C10 */ 0x91, 0x01, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x22, 0x03, 0x2C, 0xFF, 0x01, 0x00, 0x40, 0x02, +/* 00018C20 */ 0xFE, 0xEC, 0x43, 0xFE, 0xEC, 0x43, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0xEC, 0x43, 0x53, +/* 00018C30 */ 0x53, 0x03, 0x03, 0x05, 0x03, 0x10, 0x0F, 0x02, 0x01, 0x04, 0x08, 0x2D, 0xA8, 0x05, 0x15, 0x03, +/* 00018C40 */ 0x00, 0x03, 0x05, 0x09, 0x17, 0x00, 0x8E, 0x02, 0x0C, 0x05, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, +/* 00018C50 */ 0x59, 0x01, 0x03, 0x1F, 0x02, 0x05, 0x05, 0x45, 0x00, 0x05, 0x09, 0x05, 0x00, 0xA8, 0x05, 0x46, +/* 00018C60 */ 0x00, 0x05, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x06, 0x44, 0x02, 0x00, 0x00, 0x00, +/* 00018C70 */ 0x00, 0x2B, 0x00, 0x38, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x07, 0x00, 0xFE, 0x8A, +/* 00018C80 */ 0x01, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x21, 0x03, 0x2B, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, +/* 00018C90 */ 0x36, 0x43, 0xFE, 0x36, 0x43, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0x36, 0x43, 0xAB, 0xAB, +/* 00018CA0 */ 0x04, 0x04, 0x06, 0x03, 0x17, 0x16, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x05, 0x07, 0x08, 0x47, +/* 00018CB0 */ 0x14, 0x03, 0x00, 0x04, 0x02, 0x09, 0x12, 0x00, 0x8E, 0x02, 0x03, 0x07, 0x6C, 0x06, 0x07, 0x00, +/* 00018CC0 */ 0x07, 0x01, 0x00, 0x59, 0x00, 0x07, 0x1F, 0x01, 0xFF, 0x06, 0xA8, 0x06, 0x15, 0x03, 0x00, 0x04, +/* 00018CD0 */ 0x06, 0x09, 0x17, 0x00, 0x8E, 0x02, 0x09, 0x06, 0x07, 0x02, 0x00, 0x59, 0x00, 0x03, 0x59, 0x01, +/* 00018CE0 */ 0x04, 0x1F, 0x02, 0x06, 0x06, 0x45, 0x00, 0x06, 0x09, 0x05, 0x00, 0xA8, 0x06, 0x46, 0x00, 0x06, +/* 00018CF0 */ 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xAA, 0x02, 0xFE, 0x50, 0x43, 0x04, 0x00, 0x00, +/* 00018D00 */ 0x00, 0x00, 0x08, 0x00, 0x22, 0x00, 0x12, 0x00, 0x36, 0x00, 0x2B, 0x00, 0x38, 0x00, 0x00, 0x7E, +/* 00018D10 */ 0x5D, 0x00, 0xC1, 0x53, 0x5A, 0x4B, 0x00, 0xFE, 0x4C, 0x01, 0x1A, 0xA2, 0x41, 0xC1, 0x00, 0xFE, +/* 00018D20 */ 0x5A, 0x03, 0x29, 0xFE, 0x6C, 0x39, 0xFE, 0x6C, 0x39, 0x01, 0xFE, 0x00, 0x90, 0x05, 0x05, 0xFE, +/* 00018D30 */ 0x6C, 0x39, 0xFE, 0xA5, 0x09, 0xFE, 0xA5, 0x09, 0x05, 0xFE, 0xE0, 0x01, 0xFE, 0x98, 0x03, 0xFE, +/* 00018D40 */ 0x99, 0x03, 0xFE, 0x9A, 0x03, 0xFE, 0x9B, 0x03, 0x10, 0x0B, 0x16, 0x05, 0x7A, 0x76, 0x02, 0x0A, +/* 00018D50 */ 0x0A, 0x0A, 0x0A, 0x0A, 0x01, 0x02, 0x13, 0x14, 0x15, 0x16, 0x05, 0xFE, 0x9C, 0x03, 0x08, 0x06, +/* 00018D60 */ 0xFE, 0x9D, 0x03, 0x07, 0x05, 0xFE, 0x9E, 0x03, 0x01, 0x02, 0x05, 0xFE, 0x9F, 0x03, 0x01, 0xFF, +/* 00018D70 */ 0x01, 0x00, 0xFE, 0x86, 0x01, 0x96, 0x02, 0x0D, 0x4E, 0x0F, 0x4E, 0x10, 0x4E, 0x11, 0x4E, 0x12, +/* 00018D80 */ 0x4E, 0x18, 0x96, 0x03, 0x18, 0x4E, 0x18, 0x96, 0x04, 0x18, 0x4E, 0x18, 0x96, 0x05, 0x18, 0x4E, +/* 00018D90 */ 0x18, 0x96, 0x06, 0x18, 0x92, 0x02, 0x18, 0x5E, 0x18, 0x18, 0x00, 0x45, 0x0F, 0x18, 0xA8, 0x18, +/* 00018DA0 */ 0x96, 0x03, 0x18, 0x14, 0x03, 0x00, 0x0F, 0x02, 0x09, 0x1C, 0x00, 0x8E, 0x01, 0x09, 0x18, 0x4A, +/* 00018DB0 */ 0x18, 0x07, 0x03, 0x00, 0x59, 0x00, 0x03, 0x59, 0x01, 0x0B, 0x59, 0x02, 0x0C, 0x1F, 0x03, 0x18, +/* 00018DC0 */ 0x18, 0x96, 0x03, 0x18, 0x09, 0x19, 0x00, 0x8E, 0x01, 0x0A, 0x18, 0x4A, 0x18, 0x07, 0x03, 0x00, +/* 00018DD0 */ 0x59, 0x00, 0x03, 0x59, 0x01, 0x0B, 0x59, 0x02, 0x0C, 0x1F, 0x03, 0x18, 0x18, 0x96, 0x03, 0x18, +/* 00018DE0 */ 0x92, 0x03, 0x18, 0x5E, 0x18, 0x18, 0x01, 0x96, 0x04, 0x18, 0x8E, 0x02, 0x35, 0x18, 0x4A, 0x18, +/* 00018DF0 */ 0x07, 0x02, 0x00, 0x59, 0x00, 0x03, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, +/* 00018E00 */ 0x00, 0x00, 0x00, 0x92, 0x04, 0x1A, 0x7A, 0x1A, 0x19, 0x02, 0x59, 0x01, 0x19, 0x1F, 0x02, 0x18, +/* 00018E10 */ 0x18, 0x96, 0x05, 0x18, 0x96, 0x06, 0x06, 0x8E, 0x02, 0x36, 0x19, 0x4A, 0x19, 0x6C, 0x18, 0x19, +/* 00018E20 */ 0x03, 0x07, 0x03, 0x00, 0x59, 0x00, 0x19, 0x59, 0x01, 0x0E, 0xD6, 0x00, 0x1A, 0x59, 0x02, 0x1A, +/* 00018E30 */ 0x1F, 0x03, 0xFF, 0x18, 0x92, 0x06, 0x18, 0xA6, 0x18, 0x18, 0x04, 0x11, 0x03, 0x00, 0x18, 0x07, +/* 00018E40 */ 0x09, 0xA4, 0x00, 0x8E, 0x02, 0x36, 0x19, 0x4A, 0x19, 0x6C, 0x18, 0x19, 0x05, 0x07, 0x03, 0x00, +/* 00018E50 */ 0x59, 0x00, 0x19, 0x92, 0x04, 0x1A, 0x59, 0x01, 0x1A, 0x59, 0x02, 0x08, 0x1F, 0x03, 0x18, 0x18, +/* 00018E60 */ 0x45, 0x10, 0x18, 0x14, 0x03, 0x00, 0x10, 0x09, 0x09, 0x10, 0x00, 0x92, 0x04, 0x19, 0x92, 0x06, +/* 00018E70 */ 0x1A, 0x2D, 0x18, 0x19, 0x1A, 0x96, 0x04, 0x18, 0x09, 0x51, 0x00, 0x8E, 0x02, 0x36, 0x19, 0x4A, +/* 00018E80 */ 0x19, 0x6C, 0x18, 0x19, 0x06, 0x07, 0x04, 0x00, 0x59, 0x00, 0x19, 0x92, 0x04, 0x1A, 0x59, 0x01, +/* 00018E90 */ 0x1A, 0x59, 0x02, 0x0A, 0x59, 0x03, 0x10, 0x1F, 0x04, 0x18, 0x18, 0x45, 0x11, 0x18, 0x8E, 0x02, +/* 00018EA0 */ 0x36, 0x19, 0x4A, 0x19, 0x6C, 0x18, 0x19, 0x07, 0x07, 0x03, 0x00, 0x59, 0x00, 0x19, 0x92, 0x04, +/* 00018EB0 */ 0x1A, 0x59, 0x01, 0x1A, 0x59, 0x02, 0x10, 0x1F, 0x03, 0x18, 0x18, 0x45, 0x12, 0x18, 0x92, 0x06, +/* 00018EC0 */ 0x18, 0x2D, 0x18, 0x11, 0x18, 0x2D, 0x18, 0x18, 0x12, 0x96, 0x04, 0x18, 0x8E, 0x02, 0x03, 0x19, +/* 00018ED0 */ 0x6C, 0x18, 0x19, 0x08, 0x07, 0x02, 0x00, 0x59, 0x00, 0x19, 0x92, 0x04, 0x1A, 0x59, 0x01, 0x1A, +/* 00018EE0 */ 0x1F, 0x02, 0x18, 0x18, 0x96, 0x04, 0x18, 0x92, 0x05, 0x18, 0x92, 0x04, 0x19, 0x76, 0x19, 0x18, +/* 00018EF0 */ 0x09, 0x92, 0x05, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x01, 0x0C, 0x00, 0x00, 0x00, +/* 00018F00 */ 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9D, 0x03, 0x00, 0x00, 0xFE, 0xA0, +/* 00018F10 */ 0x03, 0xFE, 0x0D, 0x02, 0xFE, 0x9D, 0x03, 0x93, 0xD1, 0xFE, 0x0A, 0x03, 0xFE, 0x5E, 0x01, 0xFE, +/* 00018F20 */ 0x5E, 0x01, 0xFE, 0xEE, 0x01, 0xFE, 0x0D, 0x02, 0xFE, 0xC5, 0x39, 0x14, 0x1F, 0x00, 0x00, 0x00, +/* 00018F30 */ 0x0A, 0x00, 0x2F, 0x00, 0x05, 0x00, 0x0F, 0x00, 0x08, 0x00, 0x28, 0x00, 0x1C, 0x00, 0x55, 0x00, +/* 00018F40 */ 0x19, 0x00, 0x4C, 0x00, 0x0A, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x3A, 0x00, 0x03, 0x00, 0x27, 0x00, +/* 00018F50 */ 0x1D, 0x00, 0x56, 0x05, 0x0F, 0x00, 0x31, 0x00, 0x20, 0x00, 0x46, 0x00, 0x08, 0x00, 0x2B, 0x00, +/* 00018F60 */ 0x10, 0x00, 0x48, 0x00, 0x23, 0x00, 0x50, 0x00, 0x20, 0x00, 0x4E, 0x00, 0x0E, 0x00, 0x5C, 0x00, +/* 00018F70 */ 0x1B, 0x00, 0x4D, 0x00, 0x0A, 0x00, 0x25, 0x00, 0x08, 0x00, 0x13, 0x00, 0x00, 0x81, 0x8F, 0x01, +/* 00018F80 */ 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x43, 0x50, 0x03, 0x00, 0xFE, 0x58, 0x01, 0x29, 0xA2, 0x41, 0xD1, +/* 00018F90 */ 0x00, 0x2A, 0xFE, 0x72, 0x3B, 0xFE, 0x72, 0x3B, 0x41, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0x72, +/* 00018FA0 */ 0x3B, 0xFE, 0x29, 0x05, 0xFE, 0x29, 0x05, 0x0B, 0x08, 0x0F, 0x04, 0x6C, 0x61, 0x03, 0x08, 0x08, +/* 00018FB0 */ 0x08, 0x08, 0x08, 0x01, 0x0E, 0x0F, 0x01, 0x00, 0x06, 0xFE, 0x47, 0x03, 0x08, 0x01, 0xFF, 0x06, +/* 00018FC0 */ 0xFE, 0x95, 0x03, 0x06, 0xFE, 0xA1, 0x03, 0xFE, 0x68, 0x01, 0x4E, 0x09, 0x4E, 0x0A, 0x4E, 0x0B, +/* 00018FD0 */ 0x4E, 0x0C, 0x4E, 0x0D, 0x8E, 0x03, 0x03, 0x11, 0x6C, 0x10, 0x11, 0x00, 0x07, 0x03, 0x00, 0x59, +/* 00018FE0 */ 0x00, 0x11, 0x8E, 0x03, 0x03, 0x12, 0x5E, 0x12, 0x12, 0x01, 0x97, 0x12, 0x12, 0x08, 0x59, 0x01, +/* 00018FF0 */ 0x12, 0x8E, 0x01, 0x04, 0x12, 0x4A, 0x12, 0x59, 0x02, 0x12, 0x1F, 0x03, 0x10, 0x10, 0x45, 0x09, +/* 00019000 */ 0x10, 0x97, 0x10, 0x09, 0x02, 0x45, 0x0A, 0x10, 0x45, 0x0B, 0x03, 0x8E, 0x01, 0x03, 0x10, 0x4A, +/* 00019010 */ 0x10, 0x5E, 0x10, 0x10, 0x02, 0x0E, 0x9E, 0x00, 0x10, 0x8E, 0x02, 0x0B, 0x10, 0x4A, 0x10, 0x07, +/* 00019020 */ 0x03, 0x00, 0x59, 0x00, 0x04, 0x8E, 0x01, 0x03, 0x11, 0x4A, 0x11, 0x5E, 0x11, 0x11, 0x03, 0x59, +/* 00019030 */ 0x01, 0x11, 0x59, 0x02, 0x08, 0x1F, 0x03, 0x10, 0x10, 0x45, 0x0C, 0x10, 0xA8, 0x10, 0x15, 0x03, +/* 00019040 */ 0x00, 0x0C, 0x10, 0x09, 0x71, 0x00, 0x15, 0x03, 0x00, 0x0C, 0x03, 0x09, 0x44, 0x00, 0x8E, 0x03, +/* 00019050 */ 0x36, 0x11, 0x4A, 0x11, 0x6C, 0x10, 0x11, 0x04, 0x07, 0x03, 0x00, 0x59, 0x00, 0x11, 0x59, 0x01, +/* 00019060 */ 0x09, 0x59, 0x02, 0x0C, 0x1F, 0x03, 0x10, 0x10, 0x15, 0x03, 0x00, 0x10, 0x05, 0x09, 0x1F, 0x00, +/* 00019070 */ 0x45, 0x0A, 0x0C, 0x45, 0x10, 0x06, 0x01, 0x09, 0x01, 0x11, 0x08, 0x2D, 0x10, 0x10, 0x11, 0x2D, +/* 00019080 */ 0x10, 0x10, 0x06, 0x01, 0x09, 0x01, 0x11, 0x0A, 0x2D, 0x10, 0x10, 0x11, 0x45, 0x0B, 0x10, 0x09, +/* 00019090 */ 0x25, 0x00, 0x8E, 0x03, 0x36, 0x11, 0x4A, 0x11, 0x6C, 0x10, 0x11, 0x05, 0x07, 0x03, 0x00, 0x59, +/* 000190A0 */ 0x00, 0x11, 0x59, 0x01, 0x09, 0x59, 0x02, 0x07, 0x1F, 0x03, 0x10, 0x10, 0x15, 0x03, 0x00, 0x10, +/* 000190B0 */ 0x05, 0x09, 0x03, 0x00, 0x45, 0x0A, 0x07, 0x8E, 0x03, 0x36, 0x11, 0x4A, 0x11, 0x6C, 0x10, 0x11, +/* 000190C0 */ 0x06, 0x07, 0x03, 0x00, 0x59, 0x00, 0x11, 0x8E, 0x01, 0x02, 0x12, 0x59, 0x01, 0x12, 0x59, 0x02, +/* 000190D0 */ 0x08, 0x1F, 0x03, 0x10, 0x10, 0x0E, 0x3B, 0x00, 0x10, 0x8E, 0x01, 0x02, 0x10, 0x97, 0x10, 0x10, +/* 000190E0 */ 0x08, 0x45, 0x0D, 0x10, 0x8E, 0x03, 0x36, 0x11, 0x4A, 0x11, 0x6C, 0x10, 0x11, 0x07, 0x07, 0x03, +/* 000190F0 */ 0x00, 0x59, 0x00, 0x11, 0x59, 0x01, 0x09, 0x59, 0x02, 0x0D, 0x1F, 0x03, 0x10, 0x10, 0x15, 0x03, +/* 00019100 */ 0x00, 0x10, 0x05, 0x09, 0x0E, 0x00, 0x15, 0x03, 0x00, 0x0D, 0x0A, 0x09, 0x06, 0x00, 0x45, 0x0A, +/* 00019110 */ 0x0D, 0x45, 0x0B, 0x03, 0x8E, 0x01, 0x05, 0x10, 0x4A, 0x10, 0x9C, 0x0A, 0x10, 0x08, 0x8E, 0x01, +/* 00019120 */ 0x06, 0x11, 0x4A, 0x11, 0x2D, 0x10, 0x11, 0x0B, 0x01, 0x43, 0x01, 0x01, 0x06, 0x10, 0xA8, 0x00, +/* 00019130 */ 0x24, 0x00, 0xFE, 0x00, 0x02, 0xFE, 0x29, 0x02, 0xFE, 0x97, 0x03, 0xFE, 0x97, 0x03, 0xFE, 0x0F, +/* 00019140 */ 0x03, 0xFE, 0x0F, 0x03, 0xB7, 0xFE, 0x0F, 0x03, 0xFE, 0x8F, 0x3B, 0x15, 0x0A, 0x00, 0x00, 0x00, +/* 00019150 */ 0x2D, 0x00, 0x65, 0x00, 0x07, 0x00, 0x2A, 0x00, 0x03, 0x00, 0x31, 0x00, 0x0E, 0x00, 0x23, 0x00, +/* 00019160 */ 0x23, 0x00, 0x50, 0x00, 0x0A, 0x00, 0x38, 0x00, 0x08, 0x00, 0x35, 0x00, 0x22, 0x00, 0x58, 0x00, +/* 00019170 */ 0x03, 0x00, 0x34, 0x00, 0x1F, 0x00, 0x66, 0x00, 0x22, 0x00, 0x4C, 0x00, 0x03, 0x00, 0x53, 0x00, +/* 00019180 */ 0x22, 0x00, 0x36, 0x00, 0x0B, 0x00, 0x33, 0x00, 0x22, 0x00, 0x4E, 0x00, 0x08, 0x00, 0x36, 0x00, +/* 00019190 */ 0x03, 0x00, 0x2E, 0x00, 0x03, 0x00, 0x64, 0x00, 0x0A, 0x00, 0x21, 0x00, 0x12, 0x00, 0x3A, 0x00, +/* 000191A0 */ 0x00, 0x7F, 0x7C, 0x00, 0xC3, 0x43, 0x50, 0x13, 0x00, 0xFE, 0x1C, 0x01, 0x22, 0xA2, 0x41, 0xC1, +/* 000191B0 */ 0x00, 0xFE, 0x59, 0x03, 0x28, 0xFE, 0x27, 0x32, 0xFE, 0x27, 0x32, 0x01, 0xFE, 0x00, 0x90, 0x03, +/* 000191C0 */ 0x03, 0xFE, 0x27, 0x32, 0xFE, 0x1E, 0x04, 0xFE, 0x1E, 0x04, 0x11, 0x0B, 0x16, 0x05, 0x62, 0x50, +/* 000191D0 */ 0x21, 0x02, 0x01, 0x01, 0x05, 0x05, 0x05, 0x05, 0x02, 0x15, 0x16, 0x5C, 0xCA, 0x06, 0xFE, 0x95, +/* 000191E0 */ 0x03, 0x01, 0xFF, 0x01, 0x04, 0x0C, 0x01, 0x02, 0x0B, 0x01, 0x01, 0x06, 0xFE, 0x47, 0x03, 0x01, +/* 000191F0 */ 0x03, 0xFE, 0x39, 0x01, 0x4E, 0x0D, 0x4E, 0x0E, 0x4E, 0x0F, 0x4E, 0x10, 0x4E, 0x11, 0x4E, 0x12, +/* 00019200 */ 0x4E, 0x13, 0x4E, 0x14, 0xA6, 0x18, 0x0B, 0x00, 0x45, 0x0D, 0x18, 0x8E, 0x02, 0x36, 0x19, 0x4A, +/* 00019210 */ 0x19, 0x6C, 0x18, 0x19, 0x01, 0x07, 0x03, 0x00, 0x59, 0x00, 0x19, 0x59, 0x01, 0x0B, 0x45, 0x1A, +/* 00019220 */ 0x02, 0x01, 0x09, 0x01, 0x1B, 0x0C, 0x2D, 0x1A, 0x1A, 0x1B, 0x2D, 0x1A, 0x1A, 0x02, 0x59, 0x02, +/* 00019230 */ 0x1A, 0x1F, 0x03, 0x18, 0x18, 0x45, 0x0E, 0x18, 0x15, 0x03, 0x00, 0x0E, 0x03, 0x09, 0x9E, 0x00, +/* 00019240 */ 0x2D, 0x18, 0x0E, 0x04, 0x45, 0x0F, 0x18, 0x45, 0x10, 0x0F, 0x45, 0x11, 0x0F, 0x45, 0x12, 0x05, +/* 00019250 */ 0xEC, 0x00, 0x0F, 0x68, 0x00, 0x12, 0x8E, 0x02, 0x36, 0x19, 0x4A, 0x19, 0x6C, 0x18, 0x19, 0x02, +/* 00019260 */ 0x07, 0x04, 0x00, 0x59, 0x00, 0x19, 0x59, 0x01, 0x0B, 0x59, 0x02, 0x02, 0x59, 0x03, 0x11, 0x1F, +/* 00019270 */ 0x04, 0x18, 0x18, 0x45, 0x13, 0x18, 0x14, 0x03, 0x00, 0x13, 0x03, 0x09, 0x0A, 0x00, 0x33, 0x19, +/* 00019280 */ 0x0D, 0x11, 0x45, 0x18, 0x19, 0x09, 0x07, 0x00, 0x33, 0x19, 0x13, 0x11, 0x46, 0x18, 0x19, 0x45, +/* 00019290 */ 0x14, 0x18, 0x14, 0x03, 0x00, 0x14, 0x06, 0x09, 0x06, 0x00, 0x45, 0x12, 0x07, 0x09, 0x1B, 0x00, +/* 000192A0 */ 0x14, 0x03, 0x00, 0x13, 0x03, 0x09, 0x09, 0x00, 0x45, 0x10, 0x0D, 0x45, 0x12, 0x07, 0x09, 0x0A, +/* 000192B0 */ 0x00, 0x45, 0x10, 0x13, 0x2D, 0x18, 0x13, 0x08, 0x45, 0x11, 0x18, 0x09, 0x92, 0xFF, 0x8E, 0x02, +/* 000192C0 */ 0x36, 0x19, 0x4A, 0x19, 0x6C, 0x18, 0x19, 0x03, 0x07, 0x04, 0x00, 0x59, 0x00, 0x19, 0x59, 0x01, +/* 000192D0 */ 0x0B, 0x59, 0x02, 0x0F, 0x59, 0x03, 0x10, 0x1F, 0x04, 0x00, 0x18, 0x09, 0x4D, 0x00, 0x8E, 0x02, +/* 000192E0 */ 0x36, 0x19, 0x4A, 0x19, 0x6C, 0x18, 0x19, 0x04, 0x07, 0x03, 0x00, 0x59, 0x00, 0x19, 0x59, 0x01, +/* 000192F0 */ 0x0B, 0x45, 0x1A, 0x02, 0x01, 0x09, 0x01, 0x1B, 0x0C, 0x2D, 0x1A, 0x1A, 0x1B, 0x59, 0x02, 0x1A, +/* 00019300 */ 0x1F, 0x03, 0x18, 0x18, 0x45, 0x0E, 0x18, 0x15, 0x03, 0x00, 0x0E, 0x03, 0x09, 0x15, 0x00, 0x2D, +/* 00019310 */ 0x18, 0x0E, 0x0A, 0x14, 0x03, 0x00, 0x18, 0x0D, 0x09, 0x09, 0x00, 0x45, 0x00, 0x09, 0x09, 0x0A, +/* 00019320 */ 0x00, 0x09, 0x05, 0x00, 0xA8, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xD1, 0xFE, 0x0A, +/* 00019330 */ 0x03, 0xFE, 0x0A, 0x03, 0xFE, 0x5E, 0x01, 0xFE, 0x0A, 0x03, 0xFE, 0x4B, 0x32, 0x17, 0x10, 0x00, +/* 00019340 */ 0x00, 0x00, 0x07, 0x00, 0x51, 0x00, 0x2D, 0x00, 0x3A, 0x00, 0x08, 0x00, 0x1E, 0x00, 0x07, 0x00, +/* 00019350 */ 0x23, 0x00, 0x03, 0x00, 0x1D, 0x00, 0x03, 0x00, 0x1B, 0x00, 0x05, 0x00, 0x25, 0x00, 0x04, 0x00, +/* 00019360 */ 0x19, 0x00, 0x20, 0x00, 0x3E, 0x00, 0x1C, 0x00, 0x39, 0x00, 0x08, 0x00, 0x25, 0x00, 0x06, 0x00, +/* 00019370 */ 0x24, 0x00, 0x08, 0x00, 0x24, 0x00, 0x03, 0x00, 0x20, 0x00, 0x06, 0x00, 0x3A, 0x00, 0x03, 0x00, +/* 00019380 */ 0x1D, 0x00, 0x0A, 0x00, 0x38, 0x00, 0x20, 0x00, 0x75, 0x00, 0x29, 0x00, 0x35, 0x00, 0x14, 0x00, +/* 00019390 */ 0x32, 0x00, 0x09, 0x00, 0x28, 0x00, 0x07, 0x00, 0x20, 0x00, 0x00, 0x7F, 0x7C, 0x00, 0xC3, 0x43, +/* 000193A0 */ 0x50, 0x13, 0x00, 0xFB, 0x1A, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x57, 0x03, 0x27, 0xFE, 0x85, 0x2D, +/* 000193B0 */ 0xFE, 0x85, 0x2D, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, 0x85, 0x2D, 0xFE, 0x06, 0x03, 0xFE, +/* 000193C0 */ 0x06, 0x03, 0x0B, 0x06, 0x0D, 0x04, 0x3D, 0x37, 0x26, 0x02, 0x04, 0x01, 0x08, 0x08, 0x08, 0x08, +/* 000193D0 */ 0x02, 0x0C, 0x0D, 0x22, 0xA4, 0x01, 0x00, 0x01, 0x01, 0x08, 0x07, 0xC2, 0x4E, 0x08, 0x4E, 0x09, +/* 000193E0 */ 0x4E, 0x0A, 0x4E, 0x0B, 0x8E, 0x02, 0x36, 0x10, 0x4A, 0x10, 0x6C, 0x0F, 0x10, 0x00, 0x07, 0x01, +/* 000193F0 */ 0x00, 0x59, 0x00, 0x10, 0x1F, 0x01, 0x0F, 0x0F, 0x45, 0x08, 0x0F, 0x45, 0x09, 0x02, 0xEC, 0x00, +/* 00019400 */ 0xA6, 0x0F, 0x07, 0x01, 0x12, 0x03, 0x00, 0x09, 0x0F, 0x09, 0x74, 0x00, 0x8E, 0x01, 0x0F, 0x0F, +/* 00019410 */ 0x4A, 0x0F, 0x07, 0x02, 0x00, 0x59, 0x00, 0x04, 0x97, 0x10, 0x07, 0x09, 0x59, 0x01, 0x10, 0x1F, +/* 00019420 */ 0x02, 0x0F, 0x0F, 0x45, 0x0A, 0x0F, 0x14, 0x03, 0x00, 0x0A, 0x05, 0x09, 0x03, 0x00, 0x09, 0x49, +/* 00019430 */ 0x00, 0x8E, 0x01, 0x08, 0x0F, 0x4A, 0x0F, 0x07, 0x03, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x06, +/* 00019440 */ 0x5E, 0x10, 0x0A, 0x02, 0x59, 0x02, 0x10, 0x1F, 0x03, 0x0F, 0x0F, 0x45, 0x0B, 0x0F, 0xA8, 0x0F, +/* 00019450 */ 0x15, 0x03, 0x00, 0x0B, 0x0F, 0x09, 0x22, 0x00, 0x76, 0x0B, 0x08, 0x03, 0x97, 0x0F, 0x07, 0x09, +/* 00019460 */ 0x5E, 0x10, 0x0A, 0x04, 0x15, 0x03, 0x00, 0x0F, 0x10, 0x09, 0x08, 0x00, 0x5E, 0x0F, 0x0A, 0x05, +/* 00019470 */ 0x76, 0x0F, 0x08, 0x06, 0x45, 0x00, 0x08, 0x09, 0x22, 0x00, 0x26, 0x09, 0x09, 0x09, 0x7E, 0xFF, +/* 00019480 */ 0x8E, 0x01, 0x05, 0x0F, 0x4A, 0x0F, 0x07, 0x01, 0x00, 0x59, 0x00, 0x04, 0x1F, 0x01, 0x0F, 0x0F, +/* 00019490 */ 0x76, 0x0F, 0x08, 0x07, 0x45, 0x00, 0x08, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x69, 0xD1, +/* 000194A0 */ 0xFE, 0x1E, 0x02, 0xFE, 0x0D, 0x02, 0xFE, 0x1E, 0x02, 0xFE, 0x96, 0x03, 0xFE, 0x97, 0x03, 0xFE, +/* 000194B0 */ 0x0D, 0x02, 0xFE, 0xBE, 0x2D, 0x10, 0x08, 0x00, 0x00, 0x00, 0x17, 0x00, 0x28, 0x00, 0x05, 0x00, +/* 000194C0 */ 0x0B, 0x00, 0x0C, 0x00, 0x30, 0x00, 0x1A, 0x00, 0x45, 0x00, 0x08, 0x00, 0x2E, 0x00, 0x03, 0x00, +/* 000194D0 */ 0x25, 0x00, 0x1D, 0x00, 0x60, 0x00, 0x0A, 0x00, 0x35, 0x00, 0x04, 0x00, 0x31, 0x00, 0x10, 0x00, +/* 000194E0 */ 0x46, 0x00, 0x08, 0x00, 0x56, 0x00, 0x06, 0x00, 0xF3, 0xFD, 0x06, 0x00, 0x3D, 0x02, 0x14, 0x00, +/* 000194F0 */ 0x2C, 0x00, 0x08, 0x00, 0x13, 0x00, 0x00, 0x7F, 0x7C, 0x00, 0xC3, 0x43, 0x50, 0x13, 0x00, 0xD0, +/* 00019500 */ 0x20, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x56, 0x03, 0x26, 0xFE, 0xCC, 0x27, 0xFE, 0xCC, 0x27, 0x01, +/* 00019510 */ 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, 0xCC, 0x27, 0xFE, 0x55, 0x04, 0xFE, 0x55, 0x04, 0x0B, 0x09, +/* 00019520 */ 0x10, 0x05, 0x3B, 0x34, 0x2D, 0x02, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x0F, 0x10, 0x1D, +/* 00019530 */ 0xB5, 0x44, 0x66, 0x06, 0xFE, 0x95, 0x03, 0x0B, 0x08, 0x01, 0xFF, 0x01, 0x01, 0x01, 0x00, 0x01, +/* 00019540 */ 0x02, 0xB9, 0x4E, 0x0B, 0x4E, 0x0C, 0x4E, 0x0D, 0x4E, 0x0E, 0xA8, 0x12, 0x14, 0x03, 0x00, 0x0A, +/* 00019550 */ 0x12, 0x09, 0x05, 0x00, 0xA8, 0x00, 0x09, 0xA0, 0x00, 0x45, 0x0B, 0x0A, 0x45, 0x0C, 0x02, 0xEC, +/* 00019560 */ 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x0B, 0x1F, 0x02, 0x12, 0x09, 0x0E, 0x06, +/* 00019570 */ 0x00, 0x12, 0x45, 0x00, 0x0B, 0x09, 0x81, 0x00, 0x45, 0x0D, 0x05, 0xA6, 0x12, 0x0B, 0x00, 0x33, +/* 00019580 */ 0x12, 0x12, 0x06, 0x45, 0x0E, 0x12, 0xEC, 0x01, 0x10, 0x03, 0x00, 0x0E, 0x07, 0x09, 0x18, 0x00, +/* 00019590 */ 0x97, 0x12, 0x0B, 0x0E, 0x14, 0x03, 0x00, 0x12, 0x0C, 0x09, 0x06, 0x00, 0x45, 0x0D, 0x0E, 0x09, +/* 000195A0 */ 0x06, 0x00, 0x27, 0x0E, 0x0E, 0x09, 0xDE, 0xFF, 0x14, 0x03, 0x00, 0x0D, 0x05, 0x09, 0x08, 0x00, +/* 000195B0 */ 0xA8, 0x00, 0x09, 0x44, 0x00, 0x09, 0x1C, 0x00, 0x10, 0x03, 0x00, 0x0D, 0x08, 0x09, 0x14, 0x00, +/* 000195C0 */ 0x33, 0x12, 0x0D, 0x08, 0x97, 0x12, 0x0B, 0x12, 0x14, 0x03, 0x00, 0x12, 0x0C, 0x09, 0x04, 0x00, +/* 000195D0 */ 0x33, 0x0D, 0x0D, 0x08, 0x8E, 0x02, 0x36, 0x13, 0x4A, 0x13, 0x6C, 0x12, 0x13, 0x01, 0x07, 0x04, +/* 000195E0 */ 0x00, 0x59, 0x00, 0x13, 0x59, 0x01, 0x0B, 0x59, 0x02, 0x07, 0x59, 0x03, 0x0D, 0x1F, 0x04, 0x12, +/* 000195F0 */ 0x12, 0x45, 0x0B, 0x12, 0x09, 0x68, 0xFF, 0xA8, 0x00, 0x24, 0x00, 0xD1, 0xFE, 0x5E, 0x01, 0xFE, +/* 00019600 */ 0xFB, 0x27, 0x13, 0x08, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x28, 0x00, 0x05, 0x00, 0x25, 0x00, 0x03, +/* 00019610 */ 0x00, 0x20, 0x00, 0x05, 0x00, 0x37, 0x00, 0x11, 0x00, 0x34, 0x00, 0x06, 0x00, 0x2D, 0x00, 0x03, +/* 00019620 */ 0x00, 0x1F, 0x00, 0x0D, 0x00, 0x1E, 0x00, 0x08, 0x00, 0x1F, 0x00, 0x0C, 0x00, 0x33, 0x00, 0x03, +/* 00019630 */ 0x00, 0x1D, 0x00, 0x03, 0x00, 0x99, 0xFF, 0x06, 0x00, 0x9B, 0x00, 0x08, 0x00, 0x22, 0x00, 0x08, +/* 00019640 */ 0x00, 0x25, 0x00, 0x18, 0x00, 0x9A, 0x01, 0x04, 0x00, 0x25, 0x00, 0x25, 0x00, 0x3A, 0x00, 0x00, +/* 00019650 */ 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xBE, 0x2A, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x55, +/* 00019660 */ 0x03, 0x25, 0xFE, 0x21, 0x25, 0xFE, 0x21, 0x25, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, 0x21, +/* 00019670 */ 0x25, 0xDF, 0xDF, 0x06, 0x03, 0x07, 0x03, 0x12, 0x10, 0x02, 0x01, 0x02, 0x02, 0x02, 0x02, 0x06, +/* 00019680 */ 0x06, 0xFE, 0x94, 0x03, 0x35, 0x4E, 0x05, 0x5E, 0x07, 0x03, 0x00, 0x45, 0x05, 0x07, 0x2A, 0x07, +/* 00019690 */ 0x05, 0x15, 0x03, 0x00, 0x07, 0x02, 0x09, 0x03, 0x00, 0x45, 0x05, 0x04, 0x8E, 0x02, 0x36, 0x08, +/* 000196A0 */ 0x4A, 0x08, 0x6C, 0x07, 0x08, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x08, 0x59, 0x01, 0x05, 0x1F, +/* 000196B0 */ 0x02, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x24, 0x01, 0x69, 0xFE, 0x59, +/* 000196C0 */ 0x25, 0x05, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x2B, 0x00, 0x0B, 0x00, 0x2D, 0x00, 0x03, 0x00, +/* 000196D0 */ 0x32, 0x00, 0x1C, 0x00, 0x1C, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xBA, +/* 000196E0 */ 0x1F, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x54, 0x03, 0x24, 0xFE, 0x9D, 0x24, 0xFE, 0x9D, 0x24, 0x01, +/* 000196F0 */ 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, 0x9D, 0x24, 0x58, 0x58, 0x05, 0x03, 0x06, 0x05, 0x0C, 0x0C, +/* 00019700 */ 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x05, 0x0C, 0x22, 0x8E, 0x02, 0x03, 0x07, 0x6C, 0x06, 0x07, +/* 00019710 */ 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x07, 0x59, 0x01, 0x04, 0x59, 0x02, 0x03, 0x59, 0x03, 0x02, +/* 00019720 */ 0x1F, 0x04, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xBD, 0x02, 0xFE, 0xBA, +/* 00019730 */ 0x24, 0x02, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x3A, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, +/* 00019740 */ 0x10, 0x03, 0x00, 0xB6, 0x1C, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xF0, 0x02, 0x23, 0xFE, 0x2A, 0x24, +/* 00019750 */ 0xFE, 0x2A, 0x24, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, 0x2A, 0x24, 0x51, 0x51, 0x05, 0x02, +/* 00019760 */ 0x05, 0x04, 0x0B, 0x0B, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x1F, 0x8E, 0x02, 0x03, 0x06, +/* 00019770 */ 0x6C, 0x05, 0x06, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x06, 0x59, 0x01, 0x03, 0x59, 0x02, 0x02, +/* 00019780 */ 0x1F, 0x03, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xBD, 0x02, 0xFE, 0x47, +/* 00019790 */ 0x24, 0x02, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x33, 0x00, 0x00, 0x7F, 0x4C, 0x00, 0xC0, 0x03, +/* 000197A0 */ 0x00, 0x03, 0x00, 0xB0, 0x1C, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xEF, 0x02, 0x22, 0xFE, 0x90, 0x23, +/* 000197B0 */ 0xFE, 0x90, 0x23, 0x41, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0x90, 0x23, 0x7B, 0x7B, 0x02, 0x04, +/* 000197C0 */ 0x05, 0x09, 0x09, 0x02, 0x02, 0x02, 0x02, 0x02, 0x04, 0x00, 0x00, 0x00, 0xF9, 0x7F, 0xFD, 0xDF, +/* 000197D0 */ 0xC1, 0x04, 0x00, 0x00, 0x40, 0xFE, 0x7F, 0xFD, 0xDF, 0xC1, 0x1B, 0x5E, 0x05, 0x04, 0x00, 0x14, +/* 000197E0 */ 0x0C, 0x00, 0x05, 0x02, 0x5E, 0x05, 0x04, 0x01, 0x14, 0x03, 0x00, 0x05, 0x03, 0x09, 0x02, 0x00, +/* 000197F0 */ 0x23, 0x04, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x0C, 0x01, 0xFE, 0x0C, 0x01, 0xFE, 0xA8, 0x23, 0x03, +/* 00019800 */ 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x4A, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x7F, 0x5C, 0x00, +/* 00019810 */ 0xC1, 0x03, 0x10, 0x03, 0x00, 0x9E, 0x1D, 0xA0, 0x41, 0xC1, 0x00, 0xFE, 0x53, 0x03, 0x21, 0xFE, +/* 00019820 */ 0x43, 0x21, 0xFE, 0x43, 0x21, 0x01, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFE, 0x43, 0x21, 0xFE, 0xC9, +/* 00019830 */ 0x01, 0xFE, 0xC9, 0x01, 0x04, 0x03, 0x05, 0x02, 0x1A, 0x19, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, +/* 00019840 */ 0x04, 0x05, 0xFE, 0x93, 0x03, 0x56, 0x4E, 0x03, 0x8E, 0x01, 0x04, 0x05, 0x4A, 0x05, 0x0E, 0x15, +/* 00019850 */ 0x00, 0x05, 0x8E, 0x02, 0x03, 0x05, 0x5E, 0x05, 0x05, 0x00, 0x0E, 0x09, 0x00, 0x05, 0x8E, 0x01, +/* 00019860 */ 0x04, 0x00, 0x4A, 0x00, 0x09, 0x33, 0x00, 0x8E, 0x02, 0x03, 0x06, 0x6C, 0x05, 0x06, 0x01, 0x07, +/* 00019870 */ 0x01, 0x00, 0x59, 0x00, 0x06, 0x1F, 0x01, 0x05, 0x05, 0x45, 0x03, 0x05, 0x0F, 0x09, 0x00, 0x03, +/* 00019880 */ 0x01, 0x43, 0x01, 0x01, 0x04, 0x02, 0x09, 0x06, 0x00, 0x01, 0x43, 0x01, 0x01, 0x04, 0x03, 0x8E, +/* 00019890 */ 0x01, 0x04, 0x00, 0x4A, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x4D, 0x03, 0xFE, +/* 000198A0 */ 0xF5, 0x01, 0xFE, 0x59, 0x21, 0x08, 0x02, 0x00, 0x00, 0x00, 0x16, 0x00, 0x39, 0x00, 0x09, 0x00, +/* 000198B0 */ 0x2B, 0x00, 0x15, 0x00, 0x34, 0x00, 0x04, 0x00, 0x9C, 0x00, 0x09, 0x00, 0x35, 0x00, 0x06, 0x00, +/* 000198C0 */ 0x2D, 0x00, 0x0B, 0x00, 0x1C, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x07, 0x00, 0x92, +/* 000198D0 */ 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x92, 0x03, 0x20, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0xFA, +/* 000198E0 */ 0x1D, 0xFE, 0xFA, 0x1D, 0x01, 0xFE, 0x00, 0x90, 0x04, 0x04, 0xFE, 0xFA, 0x1D, 0x74, 0x74, 0x02, +/* 000198F0 */ 0x06, 0x03, 0x07, 0x06, 0x0E, 0x0E, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x06, 0x08, 0x29, 0x8E, +/* 00019900 */ 0x01, 0x06, 0x07, 0x07, 0x05, 0x00, 0x59, 0x00, 0x02, 0x8E, 0x01, 0x03, 0x08, 0x5E, 0x08, 0x08, +/* 00019910 */ 0x00, 0x59, 0x01, 0x08, 0x59, 0x02, 0x03, 0x59, 0x03, 0x04, 0x59, 0x04, 0x05, 0x1F, 0x05, 0x00, +/* 00019920 */ 0x07, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x9D, 0x02, 0xFE, 0x14, 0x1E, 0x02, 0x00, +/* 00019930 */ 0x00, 0x00, 0x00, 0x27, 0x00, 0x59, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x07, 0x00, +/* 00019940 */ 0x91, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x91, 0x03, 0x1F, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, +/* 00019950 */ 0x8A, 0x1D, 0xFE, 0x8A, 0x1D, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, 0x8A, 0x1D, 0x66, 0x66, +/* 00019960 */ 0x02, 0x05, 0x03, 0x06, 0x05, 0x0D, 0x0D, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x05, 0x08, 0x26, +/* 00019970 */ 0x8E, 0x01, 0x06, 0x06, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x8E, 0x01, 0x03, 0x07, 0x5E, 0x07, +/* 00019980 */ 0x07, 0x00, 0x59, 0x01, 0x07, 0x59, 0x02, 0x03, 0x59, 0x03, 0x04, 0x1F, 0x04, 0x00, 0x06, 0x09, +/* 00019990 */ 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x9C, 0x02, 0xFE, 0x9D, 0x1D, 0x02, 0x00, 0x00, 0x00, +/* 000199A0 */ 0x00, 0x24, 0x00, 0x52, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x07, 0x00, 0x8F, 0x08, +/* 000199B0 */ 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x90, 0x03, 0x1E, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0x23, 0x1D, +/* 000199C0 */ 0xFE, 0x23, 0x1D, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0x23, 0x1D, 0x5C, 0x5C, 0x02, 0x04, +/* 000199D0 */ 0x03, 0x05, 0x04, 0x0C, 0x0C, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x04, 0x08, 0x23, 0x8E, 0x01, +/* 000199E0 */ 0x06, 0x05, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x8E, 0x01, 0x03, 0x06, 0x5E, 0x06, 0x06, 0x00, +/* 000199F0 */ 0x59, 0x01, 0x06, 0x59, 0x02, 0x03, 0x1F, 0x03, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, +/* 00019A00 */ 0x00, 0xFE, 0x9E, 0x02, 0xFE, 0x33, 0x1D, 0x02, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x4B, 0x00, +/* 00019A10 */ 0x00, 0xFF, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x07, 0x00, 0x88, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, +/* 00019A20 */ 0x8F, 0x03, 0x1D, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0x11, 0x1C, 0xFE, 0x11, 0x1C, 0x01, 0xFE, +/* 00019A30 */ 0x00, 0x90, 0x02, 0x02, 0xFE, 0x11, 0x1C, 0x3E, 0x3E, 0x02, 0x04, 0x03, 0x05, 0x03, 0x0F, 0x0E, +/* 00019A40 */ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x01, 0x00, 0x2D, 0x14, 0x03, 0x00, 0x03, 0x02, 0x09, +/* 00019A50 */ 0x06, 0x00, 0x45, 0x00, 0x02, 0x09, 0x18, 0x00, 0x8E, 0x01, 0x03, 0x06, 0x6C, 0x05, 0x06, 0x00, +/* 00019A60 */ 0x07, 0x02, 0x00, 0x59, 0x00, 0x06, 0x59, 0x01, 0x03, 0x1F, 0x02, 0x05, 0x05, 0x46, 0x00, 0x05, +/* 00019A70 */ 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x8D, 0x02, 0xFE, 0x1C, 0x1C, 0x02, 0x00, 0x00, +/* 00019A80 */ 0x00, 0x00, 0x2B, 0x00, 0x32, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x07, 0x00, 0x84, +/* 00019A90 */ 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x8E, 0x03, 0x1C, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0x24, +/* 00019AA0 */ 0x1B, 0xFE, 0x24, 0x1B, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x02, 0xFE, 0x24, 0x1B, 0x5C, 0x5C, 0x02, +/* 00019AB0 */ 0x05, 0x04, 0x07, 0x04, 0x0D, 0x0C, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x07, 0x08, 0x27, +/* 00019AC0 */ 0x15, 0x03, 0x00, 0x05, 0x03, 0x45, 0x05, 0x02, 0x8E, 0x01, 0x03, 0x08, 0x6C, 0x07, 0x08, 0x00, +/* 00019AD0 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x08, 0x59, 0x01, 0x04, 0x59, 0x02, 0x05, 0x1F, 0x03, 0x00, 0x07, +/* 00019AE0 */ 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xBE, 0x02, 0xFE, 0x3B, 0x1B, 0x03, 0x00, 0x00, +/* 00019AF0 */ 0x00, 0x00, 0x08, 0x00, 0x10, 0x00, 0x1D, 0x00, 0x34, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0xC1, 0x03, +/* 00019B00 */ 0x10, 0x07, 0x00, 0x83, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x8D, 0x03, 0x1B, 0xFF, 0x01, 0x00, +/* 00019B10 */ 0x40, 0x02, 0xFE, 0xC7, 0x1A, 0xFE, 0xC7, 0x1A, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x01, 0xFE, 0xC7, +/* 00019B20 */ 0x1A, 0x53, 0x53, 0x02, 0x04, 0x04, 0x06, 0x03, 0x0C, 0x0B, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, +/* 00019B30 */ 0x05, 0x07, 0x08, 0x24, 0x15, 0x03, 0x00, 0x04, 0x03, 0x45, 0x04, 0x02, 0x8E, 0x01, 0x03, 0x07, +/* 00019B40 */ 0x6C, 0x06, 0x07, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x07, 0x59, 0x01, 0x04, 0x1F, 0x02, 0x00, +/* 00019B50 */ 0x06, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x95, 0x02, 0xFE, 0xCE, 0x1A, 0x03, 0x00, +/* 00019B60 */ 0x00, 0x00, 0x00, 0x08, 0x00, 0x10, 0x00, 0x1A, 0x00, 0x3B, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0xC1, +/* 00019B70 */ 0x03, 0x10, 0x07, 0x00, 0x7E, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x8C, 0x03, 0x1A, 0xFF, 0x01, +/* 00019B80 */ 0x00, 0x40, 0x02, 0xFE, 0xD1, 0x19, 0xFE, 0xD1, 0x19, 0x41, 0xFE, 0x00, 0x90, 0x04, 0x04, 0xFE, +/* 00019B90 */ 0xD1, 0x19, 0xA3, 0xA3, 0x02, 0x06, 0x03, 0x07, 0x05, 0x13, 0x13, 0x01, 0x02, 0x02, 0x02, 0x02, +/* 00019BA0 */ 0x02, 0x06, 0x07, 0x39, 0x8E, 0x01, 0x36, 0x08, 0x4A, 0x08, 0x6C, 0x07, 0x08, 0x00, 0x07, 0x03, +/* 00019BB0 */ 0x00, 0x59, 0x00, 0x08, 0x59, 0x01, 0x05, 0x59, 0x02, 0x02, 0x1F, 0x03, 0xFF, 0x07, 0x8E, 0x01, +/* 00019BC0 */ 0x03, 0x08, 0x6C, 0x07, 0x08, 0x01, 0x07, 0x04, 0x00, 0x59, 0x00, 0x08, 0x59, 0x01, 0x03, 0x59, +/* 00019BD0 */ 0x02, 0x04, 0x59, 0x03, 0x05, 0x1F, 0x04, 0xFF, 0x07, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x9A, 0x01, +/* 00019BE0 */ 0xFE, 0x8F, 0x02, 0xFE, 0xFD, 0x19, 0x03, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x2A, 0x00, 0x1D, +/* 00019BF0 */ 0x00, 0x4C, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x07, 0x00, 0x7C, 0x08, 0xA2, 0x41, +/* 00019C00 */ 0xC1, 0x01, 0xFE, 0x8B, 0x03, 0x19, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0xC8, 0x18, 0xFE, 0xC8, +/* 00019C10 */ 0x18, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, 0xC8, 0x18, 0x72, 0x72, 0x02, 0x05, 0x03, 0x06, +/* 00019C20 */ 0x05, 0x0D, 0x0D, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x05, 0x08, 0x26, 0x8E, 0x01, 0x06, 0x06, +/* 00019C30 */ 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x8E, 0x01, 0x03, 0x07, 0x5E, 0x07, 0x07, 0x00, 0x59, 0x01, +/* 00019C40 */ 0x07, 0x59, 0x02, 0x03, 0x59, 0x03, 0x04, 0x1F, 0x04, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA8, 0x00, +/* 00019C50 */ 0x24, 0x00, 0xFE, 0x93, 0x02, 0xFE, 0xE2, 0x18, 0x02, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x57, +/* 00019C60 */ 0x00, 0x00, 0xFE, 0x5D, 0x00, 0xC1, 0x03, 0x1A, 0x0F, 0x00, 0x79, 0x08, 0xA2, 0x41, 0xC1, 0x01, +/* 00019C70 */ 0xFE, 0x89, 0x03, 0x17, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0x31, 0x18, 0xFE, 0x31, 0x18, 0x01, +/* 00019C80 */ 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0x31, 0x18, 0x53, 0x53, 0x02, 0x01, 0xFE, 0x8A, 0x03, 0x07, +/* 00019C90 */ 0x02, 0x06, 0x04, 0x0F, 0x0F, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x03, 0x04, 0x05, 0x2A, 0x96, +/* 00019CA0 */ 0x02, 0x02, 0x8E, 0x01, 0x36, 0x07, 0x4A, 0x07, 0x6C, 0x06, 0x07, 0x00, 0x07, 0x03, 0x00, 0x59, +/* 00019CB0 */ 0x00, 0x07, 0x92, 0x02, 0x08, 0x59, 0x01, 0x08, 0xD6, 0x00, 0x08, 0x59, 0x02, 0x08, 0x1F, 0x03, +/* 00019CC0 */ 0x00, 0x06, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x89, 0xFE, 0x41, 0x18, 0x02, 0x03, 0x00, +/* 00019CD0 */ 0x00, 0x00, 0x25, 0x00, 0x42, 0x00, 0x00, 0xDB, 0x9C, 0x01, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, +/* 00019CE0 */ 0x10, 0x07, 0x00, 0x79, 0x2F, 0xA2, 0x41, 0xD0, 0x00, 0x18, 0xFE, 0x01, 0x10, 0xFE, 0x58, 0x18, +/* 00019CF0 */ 0xFE, 0x58, 0x18, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, 0x58, 0x18, 0x28, 0x28, 0x06, 0x02, +/* 00019D00 */ 0x05, 0x04, 0x0E, 0x0E, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x04, 0x29, 0x8E, 0x02, 0x36, 0x06, +/* 00019D10 */ 0x4A, 0x06, 0x6C, 0x05, 0x06, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x06, 0x8E, 0x01, 0x02, 0x07, +/* 00019D20 */ 0x59, 0x01, 0x07, 0x59, 0x02, 0x02, 0x1F, 0x03, 0x05, 0x05, 0x41, 0x00, 0x05, 0x03, 0x09, 0x02, +/* 00019D30 */ 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x0F, 0x03, 0xFE, 0x62, 0x18, 0x02, 0x00, 0x00, 0x00, 0x00, +/* 00019D40 */ 0x27, 0x00, 0x1E, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x07, 0x00, 0x78, 0x08, 0xA2, +/* 00019D50 */ 0x41, 0xC1, 0x01, 0xFE, 0x88, 0x03, 0x16, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0xC2, 0x17, 0xFE, +/* 00019D60 */ 0xC2, 0x17, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, 0xC2, 0x17, 0x65, 0x65, 0x02, 0x05, 0x03, +/* 00019D70 */ 0x06, 0x05, 0x0D, 0x0D, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x05, 0x08, 0x26, 0x8E, 0x01, 0x06, +/* 00019D80 */ 0x06, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x8E, 0x01, 0x03, 0x07, 0x5E, 0x07, 0x07, 0x00, 0x59, +/* 00019D90 */ 0x01, 0x07, 0x59, 0x02, 0x03, 0x59, 0x03, 0x04, 0x1F, 0x04, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA8, +/* 00019DA0 */ 0x00, 0x24, 0x00, 0xFE, 0x84, 0x02, 0xFE, 0xD8, 0x17, 0x02, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, +/* 00019DB0 */ 0x4E, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x47, 0x00, 0x77, 0x08, 0xA2, 0x41, 0xC1, +/* 00019DC0 */ 0x01, 0xFE, 0x87, 0x03, 0x15, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0x4B, 0x17, 0xFE, 0x4B, 0x17, +/* 00019DD0 */ 0x81, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0x4B, 0x17, 0x6D, 0x6D, 0x02, 0x05, 0x03, 0x06, 0x05, +/* 00019DE0 */ 0x0E, 0x0E, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x05, 0x08, 0x30, 0x8E, 0x01, 0x06, 0x06, 0x07, +/* 00019DF0 */ 0x04, 0x00, 0x59, 0x00, 0x02, 0x8E, 0x01, 0x03, 0x07, 0x5E, 0x07, 0x07, 0x00, 0x59, 0x01, 0x07, +/* 00019E00 */ 0x59, 0x02, 0x03, 0x01, 0x5F, 0x01, 0x07, 0x04, 0x59, 0x03, 0x07, 0x21, 0x04, 0x00, 0x06, 0x01, +/* 00019E10 */ 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x01, 0x08, 0x00, 0x00, 0x00, +/* 00019E20 */ 0x00, 0x00, 0x05, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xFE, 0x9B, 0x02, 0xFE, 0x63, +/* 00019E30 */ 0x17, 0x02, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x54, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0xC1, 0x03, +/* 00019E40 */ 0x10, 0x07, 0x00, 0x76, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x86, 0x03, 0x14, 0xFF, 0x01, 0x00, +/* 00019E50 */ 0x40, 0x02, 0xFE, 0xCE, 0x16, 0xFE, 0xCE, 0x16, 0x01, 0xFE, 0x00, 0x90, 0x04, 0x04, 0xFE, 0xCE, +/* 00019E60 */ 0x16, 0x73, 0x73, 0x02, 0x06, 0x03, 0x07, 0x06, 0x0E, 0x0E, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, +/* 00019E70 */ 0x06, 0x08, 0x29, 0x8E, 0x01, 0x06, 0x07, 0x07, 0x05, 0x00, 0x59, 0x00, 0x02, 0x8E, 0x01, 0x03, +/* 00019E80 */ 0x08, 0x5E, 0x08, 0x08, 0x00, 0x59, 0x01, 0x08, 0x59, 0x02, 0x03, 0x59, 0x03, 0x04, 0x59, 0x04, +/* 00019E90 */ 0x05, 0x1F, 0x05, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x9A, 0x02, 0xFE, +/* 00019EA0 */ 0xE9, 0x16, 0x02, 0x00, 0x00, 0x00, 0x00, 0x27, 0x00, 0x57, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0xC1, +/* 00019EB0 */ 0x03, 0x10, 0x07, 0x00, 0x75, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x85, 0x03, 0x13, 0xFF, 0x01, +/* 00019EC0 */ 0x00, 0x40, 0x02, 0xFE, 0x53, 0x16, 0xFE, 0x53, 0x16, 0x01, 0xFE, 0x00, 0x90, 0x04, 0x04, 0xFE, +/* 00019ED0 */ 0x53, 0x16, 0x71, 0x71, 0x02, 0x06, 0x03, 0x07, 0x06, 0x0E, 0x0E, 0x01, 0x02, 0x01, 0x01, 0x01, +/* 00019EE0 */ 0x01, 0x06, 0x08, 0x29, 0x8E, 0x01, 0x06, 0x07, 0x07, 0x05, 0x00, 0x59, 0x00, 0x02, 0x8E, 0x01, +/* 00019EF0 */ 0x03, 0x08, 0x5E, 0x08, 0x08, 0x00, 0x59, 0x01, 0x08, 0x59, 0x02, 0x03, 0x59, 0x03, 0x04, 0x59, +/* 00019F00 */ 0x04, 0x05, 0x1F, 0x05, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x87, 0x02, +/* 00019F10 */ 0xFE, 0x6F, 0x16, 0x02, 0x00, 0x00, 0x00, 0x00, 0x27, 0x00, 0x54, 0x00, 0x00, 0xFF, 0x5C, 0x00, +/* 00019F20 */ 0xC1, 0x03, 0x10, 0x07, 0x00, 0x74, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x84, 0x03, 0x12, 0xFF, +/* 00019F30 */ 0x01, 0x00, 0x40, 0x02, 0xFE, 0xE6, 0x15, 0xFE, 0xE6, 0x15, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, +/* 00019F40 */ 0xFE, 0xE6, 0x15, 0x63, 0x63, 0x02, 0x05, 0x03, 0x06, 0x05, 0x0D, 0x0D, 0x01, 0x02, 0x01, 0x01, +/* 00019F50 */ 0x01, 0x01, 0x05, 0x08, 0x26, 0x8E, 0x01, 0x06, 0x06, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x8E, +/* 00019F60 */ 0x01, 0x03, 0x07, 0x5E, 0x07, 0x07, 0x00, 0x59, 0x01, 0x07, 0x59, 0x02, 0x03, 0x59, 0x03, 0x04, +/* 00019F70 */ 0x1F, 0x04, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x99, 0x02, 0xFE, 0xF9, +/* 00019F80 */ 0x15, 0x02, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x4F, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0x01, 0x00, +/* 00019F90 */ 0x10, 0x07, 0x00, 0x73, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x83, 0x03, 0x11, 0xFF, 0x01, 0x00, +/* 00019FA0 */ 0x40, 0x02, 0xFE, 0x7B, 0x15, 0xFE, 0x7B, 0x15, 0x01, 0xFE, 0x00, 0x90, 0x04, 0x04, 0xFE, 0x7B, +/* 00019FB0 */ 0x15, 0x61, 0x61, 0x02, 0x06, 0x03, 0x07, 0x06, 0x0D, 0x0D, 0x01, 0x02, 0x06, 0x08, 0x25, 0x8E, +/* 00019FC0 */ 0x01, 0x06, 0x07, 0x07, 0x05, 0x00, 0x59, 0x00, 0x02, 0x8E, 0x01, 0x18, 0x08, 0x59, 0x01, 0x08, +/* 00019FD0 */ 0x59, 0x02, 0x03, 0x59, 0x03, 0x04, 0x59, 0x04, 0x05, 0x1F, 0x05, 0x00, 0x07, 0x09, 0x02, 0x00, +/* 00019FE0 */ 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x9B, 0x15, 0x02, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x40, 0x00, +/* 00019FF0 */ 0x00, 0xFF, 0x5C, 0x00, 0x01, 0x00, 0x10, 0x07, 0x00, 0x72, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, +/* 0001A000 */ 0x82, 0x03, 0x10, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0x25, 0x15, 0xFE, 0x25, 0x15, 0x01, 0xFE, +/* 0001A010 */ 0x00, 0x90, 0x03, 0x03, 0xFE, 0x25, 0x15, 0x4C, 0x4C, 0x02, 0x05, 0x03, 0x06, 0x05, 0x0C, 0x0C, +/* 0001A020 */ 0x01, 0x02, 0x05, 0x08, 0x22, 0x8E, 0x01, 0x06, 0x06, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x8E, +/* 0001A030 */ 0x01, 0x19, 0x07, 0x59, 0x01, 0x07, 0x59, 0x02, 0x03, 0x59, 0x03, 0x04, 0x1F, 0x04, 0x00, 0x06, +/* 0001A040 */ 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x38, 0x15, 0x02, 0x00, 0x00, 0x00, 0x00, 0x20, +/* 0001A050 */ 0x00, 0x38, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0x01, 0x00, 0x10, 0x07, 0x00, 0x71, 0x08, 0xA2, 0x41, +/* 0001A060 */ 0xC1, 0x01, 0xFE, 0x81, 0x03, 0x0F, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0xC7, 0x14, 0xFE, 0xC7, +/* 0001A070 */ 0x14, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, 0xC7, 0x14, 0x54, 0x54, 0x02, 0x05, 0x03, 0x06, +/* 0001A080 */ 0x05, 0x0C, 0x0C, 0x01, 0x02, 0x05, 0x08, 0x22, 0x8E, 0x01, 0x06, 0x06, 0x07, 0x04, 0x00, 0x59, +/* 0001A090 */ 0x00, 0x02, 0x8E, 0x01, 0x17, 0x07, 0x59, 0x01, 0x07, 0x59, 0x02, 0x03, 0x59, 0x03, 0x04, 0x1F, +/* 0001A0A0 */ 0x04, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xDE, 0x14, 0x02, 0x00, 0x00, +/* 0001A0B0 */ 0x00, 0x00, 0x20, 0x00, 0x3C, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x07, 0x00, 0x6F, +/* 0001A0C0 */ 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x80, 0x03, 0x0E, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0x54, +/* 0001A0D0 */ 0x14, 0xFE, 0x54, 0x14, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, 0x54, 0x14, 0x68, 0x68, 0x02, +/* 0001A0E0 */ 0x05, 0x03, 0x06, 0x05, 0x0D, 0x0D, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x05, 0x08, 0x26, 0x8E, +/* 0001A0F0 */ 0x01, 0x06, 0x06, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x8E, 0x01, 0x03, 0x07, 0x5E, 0x07, 0x07, +/* 0001A100 */ 0x00, 0x59, 0x01, 0x07, 0x59, 0x02, 0x03, 0x59, 0x03, 0x04, 0x1F, 0x04, 0x00, 0x06, 0x09, 0x02, +/* 0001A110 */ 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xA5, 0x02, 0xFE, 0x69, 0x14, 0x02, 0x00, 0x00, 0x00, 0x00, +/* 0001A120 */ 0x24, 0x00, 0x52, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x07, 0x00, 0x6E, 0x08, 0xA2, +/* 0001A130 */ 0x41, 0xC1, 0x01, 0xFE, 0x7F, 0x03, 0x0D, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0x0C, 0x14, 0xFE, +/* 0001A140 */ 0x0C, 0x14, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, 0x0C, 0x14, 0x3E, 0x3E, 0x02, 0x05, 0x02, +/* 0001A150 */ 0x05, 0x04, 0x0B, 0x0B, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x1F, 0x8E, 0x01, 0x03, 0x06, +/* 0001A160 */ 0x6C, 0x05, 0x06, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x06, 0x59, 0x01, 0x02, 0x59, 0x02, 0x03, +/* 0001A170 */ 0x1F, 0x03, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xC0, 0x02, 0xFE, 0x1D, +/* 0001A180 */ 0x14, 0x02, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x2C, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0xC1, 0x03, +/* 0001A190 */ 0x10, 0x07, 0x00, 0x6D, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x7E, 0x03, 0x0C, 0xFF, 0x01, 0x00, +/* 0001A1A0 */ 0x40, 0x02, 0xFE, 0x8C, 0x13, 0xFE, 0x8C, 0x13, 0x01, 0xFE, 0x00, 0x90, 0x04, 0x04, 0xFE, 0x8C, +/* 0001A1B0 */ 0x13, 0x76, 0x76, 0x02, 0x06, 0x03, 0x07, 0x06, 0x0E, 0x0E, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, +/* 0001A1C0 */ 0x06, 0x08, 0x29, 0x8E, 0x01, 0x06, 0x07, 0x07, 0x05, 0x00, 0x59, 0x00, 0x02, 0x8E, 0x01, 0x03, +/* 0001A1D0 */ 0x08, 0x5E, 0x08, 0x08, 0x00, 0x59, 0x01, 0x08, 0x59, 0x02, 0x03, 0x59, 0x03, 0x04, 0x59, 0x04, +/* 0001A1E0 */ 0x05, 0x1F, 0x05, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xA6, 0x02, 0xFE, +/* 0001A1F0 */ 0xAB, 0x13, 0x02, 0x00, 0x00, 0x00, 0x00, 0x27, 0x00, 0x56, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0xC1, +/* 0001A200 */ 0x03, 0x10, 0x07, 0x00, 0x6C, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x7D, 0x03, 0x0B, 0xFF, 0x01, +/* 0001A210 */ 0x00, 0x40, 0x02, 0xFE, 0x0A, 0x13, 0xFE, 0x0A, 0x13, 0x01, 0xFE, 0x00, 0x90, 0x04, 0x04, 0xFE, +/* 0001A220 */ 0x0A, 0x13, 0x78, 0x78, 0x02, 0x06, 0x03, 0x07, 0x06, 0x0E, 0x0E, 0x01, 0x02, 0x01, 0x01, 0x01, +/* 0001A230 */ 0x01, 0x06, 0x08, 0x29, 0x8E, 0x01, 0x06, 0x07, 0x07, 0x05, 0x00, 0x59, 0x00, 0x02, 0x8E, 0x01, +/* 0001A240 */ 0x03, 0x08, 0x5E, 0x08, 0x08, 0x00, 0x59, 0x01, 0x08, 0x59, 0x02, 0x03, 0x59, 0x03, 0x04, 0x59, +/* 0001A250 */ 0x04, 0x05, 0x1F, 0x05, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xA4, 0x02, +/* 0001A260 */ 0xFE, 0x27, 0x13, 0x02, 0x00, 0x00, 0x00, 0x00, 0x27, 0x00, 0x5A, 0x00, 0x00, 0xFF, 0x5C, 0x00, +/* 0001A270 */ 0xC1, 0x03, 0x10, 0x07, 0x00, 0x6B, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x7C, 0x03, 0x0A, 0xFF, +/* 0001A280 */ 0x01, 0x00, 0x40, 0x02, 0xFE, 0x96, 0x12, 0xFE, 0x96, 0x12, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, +/* 0001A290 */ 0xFE, 0x96, 0x12, 0x6A, 0x6A, 0x02, 0x05, 0x03, 0x06, 0x05, 0x0D, 0x0D, 0x01, 0x02, 0x01, 0x01, +/* 0001A2A0 */ 0x01, 0x01, 0x05, 0x08, 0x26, 0x8E, 0x01, 0x06, 0x06, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x8E, +/* 0001A2B0 */ 0x01, 0x03, 0x07, 0x5E, 0x07, 0x07, 0x00, 0x59, 0x01, 0x07, 0x59, 0x02, 0x03, 0x59, 0x03, 0x04, +/* 0001A2C0 */ 0x1F, 0x04, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xA3, 0x02, 0xFE, 0xAC, +/* 0001A2D0 */ 0x12, 0x02, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x53, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0x01, 0x00, +/* 0001A2E0 */ 0x10, 0x07, 0x00, 0x6A, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x7B, 0x03, 0x09, 0xFF, 0x01, 0x00, +/* 0001A2F0 */ 0x40, 0x02, 0xFE, 0x1B, 0x12, 0xFE, 0x1B, 0x12, 0x01, 0xFE, 0x00, 0x90, 0x04, 0x04, 0xFE, 0x1B, +/* 0001A300 */ 0x12, 0x71, 0x71, 0x02, 0x06, 0x03, 0x07, 0x06, 0x0D, 0x0D, 0x01, 0x02, 0x06, 0x08, 0x25, 0x8E, +/* 0001A310 */ 0x01, 0x06, 0x07, 0x07, 0x05, 0x00, 0x59, 0x00, 0x02, 0x8E, 0x01, 0x1D, 0x08, 0x59, 0x01, 0x08, +/* 0001A320 */ 0x59, 0x02, 0x03, 0x59, 0x03, 0x04, 0x59, 0x04, 0x05, 0x1F, 0x05, 0x00, 0x07, 0x09, 0x02, 0x00, +/* 0001A330 */ 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x40, 0x12, 0x02, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x4B, 0x00, +/* 0001A340 */ 0x00, 0xFF, 0x5C, 0x00, 0x01, 0x00, 0x10, 0x07, 0x00, 0x69, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, +/* 0001A350 */ 0x7A, 0x03, 0x08, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0xC4, 0x11, 0xFE, 0xC4, 0x11, 0x01, 0xFE, +/* 0001A360 */ 0x00, 0x90, 0x02, 0x02, 0xFE, 0xC4, 0x11, 0x4D, 0x4D, 0x02, 0x04, 0x03, 0x05, 0x04, 0x0B, 0x0B, +/* 0001A370 */ 0x01, 0x02, 0x04, 0x08, 0x1F, 0x8E, 0x01, 0x06, 0x05, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x8E, +/* 0001A380 */ 0x01, 0x1E, 0x06, 0x59, 0x01, 0x06, 0x59, 0x02, 0x03, 0x1F, 0x03, 0x00, 0x05, 0x09, 0x02, 0x00, +/* 0001A390 */ 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xD7, 0x11, 0x02, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x39, 0x00, +/* 0001A3A0 */ 0x00, 0xFF, 0x5C, 0x00, 0x01, 0x00, 0x10, 0x07, 0x00, 0x68, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, +/* 0001A3B0 */ 0x79, 0x03, 0x07, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0x6D, 0x11, 0xFE, 0x6D, 0x11, 0x01, 0xFE, +/* 0001A3C0 */ 0x00, 0x90, 0x02, 0x02, 0xFE, 0x6D, 0x11, 0x4D, 0x4D, 0x02, 0x04, 0x03, 0x05, 0x04, 0x0B, 0x0B, +/* 0001A3D0 */ 0x01, 0x02, 0x04, 0x08, 0x1F, 0x8E, 0x01, 0x06, 0x05, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x8E, +/* 0001A3E0 */ 0x01, 0x1F, 0x06, 0x59, 0x01, 0x06, 0x59, 0x02, 0x03, 0x1F, 0x03, 0x00, 0x05, 0x09, 0x02, 0x00, +/* 0001A3F0 */ 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x80, 0x11, 0x02, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x39, 0x00, +/* 0001A400 */ 0x00, 0x7F, 0x5C, 0x00, 0x01, 0x00, 0x10, 0x03, 0x00, 0x54, 0x1F, 0xA2, 0x41, 0xC1, 0x00, 0xFE, +/* 0001A410 */ 0xE5, 0x02, 0x06, 0xFE, 0xC6, 0x0D, 0xFE, 0xC6, 0x0D, 0x41, 0xFE, 0x00, 0x90, 0x04, 0x04, 0xFE, +/* 0001A420 */ 0xC6, 0x0D, 0x72, 0x72, 0x06, 0x04, 0x08, 0x09, 0x10, 0x10, 0x01, 0x02, 0x07, 0x07, 0x08, 0x2F, +/* 0001A430 */ 0x8E, 0x01, 0x15, 0x08, 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, 0x59, 0x01, 0x04, 0x59, 0x02, 0x05, +/* 0001A440 */ 0x8E, 0x01, 0x04, 0x09, 0x07, 0x03, 0x00, 0x59, 0x00, 0x03, 0x59, 0x01, 0x06, 0x59, 0x02, 0x02, +/* 0001A450 */ 0x1F, 0x03, 0x09, 0x09, 0x59, 0x03, 0x09, 0x1F, 0x04, 0xFF, 0x08, 0xA8, 0x00, 0x24, 0x00, 0xFE, +/* 0001A460 */ 0xF1, 0x0D, 0x02, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x00, 0x46, 0x00, 0x00, 0x7E, 0x5C, 0x00, 0xC1, +/* 0001A470 */ 0x13, 0x10, 0x4B, 0x00, 0x23, 0x04, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0xDB, 0x02, 0x03, 0xFE, 0x0F, +/* 0001A480 */ 0x07, 0xFE, 0x0F, 0x07, 0x02, 0xFE, 0x00, 0x90, 0x02, 0x01, 0xFE, 0x0F, 0x07, 0xFE, 0x36, 0x02, +/* 0001A490 */ 0xFE, 0x36, 0x02, 0x06, 0x09, 0x0B, 0x05, 0x19, 0x18, 0x01, 0x02, 0x05, 0x05, 0x05, 0x05, 0x01, +/* 0001A4A0 */ 0x0A, 0x08, 0x01, 0x19, 0x06, 0xFE, 0x75, 0x03, 0x06, 0xFE, 0x76, 0x03, 0x06, 0xFE, 0x77, 0x03, +/* 0001A4B0 */ 0x06, 0xFE, 0x78, 0x03, 0x07, 0x5B, 0x15, 0x03, 0x00, 0x09, 0x02, 0x45, 0x09, 0x03, 0x8E, 0x01, +/* 0001A4C0 */ 0x35, 0x0B, 0x4A, 0x0B, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0001A4D0 */ 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x7A, 0x09, 0x0C, 0x00, 0x8E, 0x01, 0x36, 0x0E, 0x4A, +/* 0001A4E0 */ 0x0E, 0x6C, 0x0D, 0x0E, 0x01, 0x07, 0x01, 0x00, 0x59, 0x00, 0x0E, 0x1F, 0x01, 0x0D, 0x0D, 0x7A, +/* 0001A4F0 */ 0x0D, 0x0C, 0x02, 0xD9, 0x00, 0x0D, 0x0C, 0x7A, 0x0D, 0x0C, 0x03, 0xD9, 0x01, 0x0D, 0x0C, 0x7A, +/* 0001A500 */ 0x0D, 0x0C, 0x04, 0x59, 0x01, 0x0C, 0x1F, 0x02, 0x00, 0x0B, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, +/* 0001A510 */ 0x00, 0x01, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0001A520 */ 0x75, 0x03, 0x00, 0x00, 0x76, 0x03, 0x00, 0x00, 0x98, 0x01, 0x00, 0x00, 0x9B, 0x01, 0x00, 0x00, +/* 0001A530 */ 0xFE, 0x75, 0x03, 0x69, 0xFE, 0x76, 0x03, 0xFE, 0x98, 0x01, 0xFE, 0x9B, 0x01, 0xFE, 0x22, 0x07, +/* 0001A540 */ 0x03, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x12, 0x00, 0x51, 0x00, 0x10, 0x02, 0x00, 0x36, 0xA6, +/* 0001A550 */ 0x01, 0x00, 0x56, 0xA5, 0x01, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x07, 0x00, 0x2C, 0x0C, +/* 0001A560 */ 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x78, 0x03, 0x05, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0xF2, 0x07, +/* 0001A570 */ 0xFE, 0xF2, 0x07, 0x49, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, 0xF2, 0x07, 0xFE, 0x41, 0x01, 0xFE, +/* 0001A580 */ 0x41, 0x01, 0x07, 0x02, 0x06, 0x03, 0x23, 0x23, 0x01, 0x02, 0x09, 0x09, 0x09, 0x09, 0x05, 0x74, +/* 0001A590 */ 0x58, 0x04, 0x8E, 0x01, 0x03, 0x06, 0x5E, 0x06, 0x06, 0x00, 0x0F, 0x05, 0x00, 0x06, 0xA8, 0x00, +/* 0001A5A0 */ 0x09, 0x5F, 0x00, 0x8E, 0x01, 0x36, 0x07, 0x4A, 0x07, 0x6C, 0x06, 0x07, 0x01, 0x07, 0x02, 0x00, +/* 0001A5B0 */ 0x59, 0x00, 0x07, 0x5E, 0x08, 0x04, 0x02, 0x59, 0x01, 0x08, 0x1F, 0x02, 0x06, 0x06, 0xA6, 0x06, +/* 0001A5C0 */ 0x06, 0x03, 0x5E, 0x07, 0x04, 0x04, 0x11, 0x03, 0x00, 0x06, 0x07, 0x09, 0x2A, 0x00, 0x5E, 0x06, +/* 0001A5D0 */ 0x04, 0x05, 0x97, 0x06, 0x06, 0x02, 0xA8, 0x07, 0x14, 0x03, 0x00, 0x06, 0x07, 0x09, 0x18, 0x00, +/* 0001A5E0 */ 0x8E, 0x01, 0x36, 0x07, 0x4A, 0x07, 0x6C, 0x06, 0x07, 0x06, 0x07, 0x01, 0x00, 0x59, 0x00, 0x07, +/* 0001A5F0 */ 0x1F, 0x01, 0x06, 0x06, 0x76, 0x06, 0x04, 0x07, 0x5E, 0x06, 0x04, 0x08, 0x9C, 0x03, 0x06, 0x02, +/* 0001A600 */ 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x4D, 0x03, 0xCF, 0xFE, 0x76, 0x03, 0xD1, 0xFE, 0x75, 0x03, 0xFE, +/* 0001A610 */ 0x76, 0x03, 0x69, 0xFE, 0x76, 0x03, 0xFE, 0x76, 0x03, 0xFE, 0x14, 0x08, 0x06, 0x02, 0x00, 0x00, +/* 0001A620 */ 0x00, 0x0C, 0x00, 0x2F, 0x00, 0x05, 0x00, 0x2B, 0x00, 0x3D, 0x00, 0x61, 0x00, 0x18, 0x00, 0x3D, +/* 0001A630 */ 0x00, 0x0A, 0x00, 0x26, 0x00, 0x00, 0x7F, 0x4C, 0x00, 0xC1, 0x03, 0x10, 0x07, 0x00, 0x28, 0x0C, +/* 0001A640 */ 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x77, 0x03, 0x04, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0x81, 0x07, +/* 0001A650 */ 0xFE, 0x81, 0x07, 0x09, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0x81, 0x07, 0x62, 0x62, 0x04, 0x02, +/* 0001A660 */ 0x05, 0x0E, 0x0D, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x04, 0x28, 0x58, 0x03, 0x8E, 0x01, 0x03, +/* 0001A670 */ 0x05, 0x5E, 0x05, 0x05, 0x00, 0x0E, 0x0E, 0x00, 0x05, 0x5E, 0x05, 0x03, 0x01, 0x97, 0x05, 0x05, +/* 0001A680 */ 0x02, 0x45, 0x00, 0x05, 0x09, 0x05, 0x00, 0xA8, 0x05, 0x46, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA8, +/* 0001A690 */ 0x00, 0x24, 0x00, 0xFE, 0x4D, 0x03, 0xFE, 0x76, 0x03, 0xFE, 0x9C, 0x07, 0x02, 0x02, 0x00, 0x00, +/* 0001A6A0 */ 0x00, 0x24, 0x00, 0x46, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0x01, 0x00, 0x10, 0x07, 0x00, 0x1D, 0x11, +/* 0001A6B0 */ 0xA2, 0x41, 0xC0, 0x00, 0xFE, 0xFF, 0x02, 0x02, 0xFE, 0x01, 0x10, 0xFE, 0x0E, 0x05, 0xFE, 0x0E, +/* 0001A6C0 */ 0x05, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x01, 0xFE, 0x0E, 0x05, 0x25, 0x25, 0x03, 0x04, 0x06, 0x04, +/* 0001A6D0 */ 0x0D, 0x0C, 0x01, 0x01, 0x05, 0x07, 0x08, 0x25, 0x15, 0x05, 0x00, 0x04, 0x03, 0xCD, 0x06, 0x45, +/* 0001A6E0 */ 0x04, 0x06, 0x8E, 0x01, 0x04, 0x06, 0x07, 0x03, 0x00, 0x59, 0x00, 0x03, 0x59, 0x01, 0x04, 0x59, +/* 0001A6F0 */ 0x02, 0x02, 0x1F, 0x03, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x0F, 0x05, +/* 0001A700 */ 0x03, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x0D, 0x00, 0x19, 0x00, 0x17, 0x00, 0x00, 0x00}; + +#endif + +} diff --git a/lib/Runtime/Library/InJavascript/JsBuiltIn.nojit.bc.64b.h b/lib/Runtime/Library/InJavascript/JsBuiltIn.nojit.bc.64b.h new file mode 100644 index 00000000000..0510a6012c8 --- /dev/null +++ b/lib/Runtime/Library/InJavascript/JsBuiltIn.nojit.bc.64b.h @@ -0,0 +1,7742 @@ +//------------------------------------------------------------------------------------------------------- +// Copyright (C) Microsoft. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. +// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. +//------------------------------------------------------------------------------------------------------- + +// Generated Bytecode Header, this file was created by tools/regenByteCode.py +// This file contains: +// a) bytecode for Intl library methods implemented in javascript and +// b) bytecode for other Js library methods, JsBuiltIns, implemented in javascript + +#define JsBuiltIns(VALUE) \ +VALUE(Array, prototype, ArrayPrototype) \ +VALUE(Math, object, MathObject) \ +VALUE(Object, constructor, ObjectConstructor) + +namespace js +{ + +#ifdef ENABLE_JS_BUILTINS + +//Bytecode generated from Array_prototype.js +const char Library_Bytecode_Array_prototype[] = { +/* 00000000 */ 0x43, 0x68, 0x42, 0x63, 0x8D, 0x2D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00000010 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0xFE, 0xD9, 0x02, 0x00, 0xFE, +/* 00000020 */ 0x77, 0x5F, 0xFE, 0x77, 0x5F, 0x35, 0x00, 0x00, 0x00, 0x4E, 0x06, 0x00, 0x00, 0x36, 0x0F, 0x00, +/* 00000030 */ 0x00, 0x8C, 0x2D, 0x00, 0x00, 0x30, 0x2C, 0x01, 0x00, 0x00, 0x00, 0x44, 0x01, 0x00, 0x00, 0x00, +/* 00000040 */ 0x5A, 0x01, 0x00, 0x00, 0x01, 0x76, 0x01, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x8C, +/* 00000050 */ 0x01, 0x00, 0x00, 0x00, 0x9E, 0x01, 0x00, 0x00, 0x00, 0xB4, 0x01, 0x00, 0x00, 0x00, 0xCE, 0x01, +/* 00000060 */ 0x00, 0x00, 0x00, 0xEC, 0x01, 0x00, 0x00, 0x00, 0xFA, 0x01, 0x00, 0x00, 0x00, 0x04, 0x02, 0x00, +/* 00000070 */ 0x00, 0x01, 0x2C, 0x02, 0x00, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x00, 0x44, 0x02, 0x00, 0x00, +/* 00000080 */ 0x00, 0x54, 0x02, 0x00, 0x00, 0x00, 0x64, 0x02, 0x00, 0x00, 0x01, 0x8C, 0x02, 0x00, 0x00, 0x00, +/* 00000090 */ 0x9A, 0x02, 0x00, 0x00, 0x01, 0xBC, 0x02, 0x00, 0x00, 0x01, 0xEA, 0x02, 0x00, 0x00, 0x00, 0xF4, +/* 000000A0 */ 0x02, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x00, 0x00, 0x14, 0x03, 0x00, 0x00, 0x00, 0x1E, 0x03, +/* 000000B0 */ 0x00, 0x00, 0x00, 0x2A, 0x03, 0x00, 0x00, 0x00, 0x3C, 0x03, 0x00, 0x00, 0x00, 0x4A, 0x03, 0x00, +/* 000000C0 */ 0x00, 0x01, 0x68, 0x03, 0x00, 0x00, 0x01, 0x88, 0x03, 0x00, 0x00, 0x01, 0x9E, 0x03, 0x00, 0x00, +/* 000000D0 */ 0x01, 0xC4, 0x03, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0A, 0x04, 0x00, 0x00, 0x00, +/* 000000E0 */ 0x34, 0x04, 0x00, 0x00, 0x00, 0x62, 0x04, 0x00, 0x00, 0x00, 0x92, 0x04, 0x00, 0x00, 0x01, 0x96, +/* 000000F0 */ 0x04, 0x00, 0x00, 0x01, 0x9E, 0x04, 0x00, 0x00, 0x00, 0xCE, 0x04, 0x00, 0x00, 0x00, 0xFC, 0x04, +/* 00000100 */ 0x00, 0x00, 0x00, 0x0E, 0x05, 0x00, 0x00, 0x00, 0x38, 0x05, 0x00, 0x00, 0x00, 0x68, 0x05, 0x00, +/* 00000110 */ 0x00, 0x00, 0x98, 0x05, 0x00, 0x00, 0x00, 0xC2, 0x05, 0x00, 0x00, 0x00, 0xEE, 0x05, 0x00, 0x00, +/* 00000120 */ 0x00, 0x20, 0x06, 0x00, 0x00, 0x00, 0x4E, 0x06, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x6C, 0x00, +/* 00000130 */ 0x6F, 0x00, 0x62, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x20, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x64, 0x00, +/* 00000140 */ 0x65, 0x00, 0x00, 0x00, 0x75, 0x00, 0x73, 0x00, 0x65, 0x00, 0x20, 0x00, 0x73, 0x00, 0x74, 0x00, +/* 00000150 */ 0x72, 0x00, 0x69, 0x00, 0x63, 0x00, 0x74, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, +/* 00000160 */ 0x61, 0x00, 0x79, 0x00, 0x49, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 00000170 */ 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x78, 0x00, 0x74, 0x00, 0x00, 0x00, +/* 00000180 */ 0x76, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x65, 0x00, 0x00, 0x00, 0x77, 0x00, 0x72, 0x00, +/* 00000190 */ 0x69, 0x00, 0x74, 0x00, 0x61, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, +/* 000001A0 */ 0x6E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x72, 0x00, 0x61, 0x00, 0x62, 0x00, 0x6C, 0x00, +/* 000001B0 */ 0x65, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x66, 0x00, 0x69, 0x00, 0x67, 0x00, +/* 000001C0 */ 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x41, 0x00, +/* 000001D0 */ 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x20, 0x00, 0x49, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 000001E0 */ 0x72, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x65, 0x00, +/* 000001F0 */ 0x6E, 0x00, 0x67, 0x00, 0x74, 0x00, 0x68, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6D, 0x00, +/* 00000200 */ 0x65, 0x00, 0x00, 0x00, 0x43, 0x00, 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00000210 */ 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x49, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00000220 */ 0x72, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6B, 0x00, 0x65, 0x00, +/* 00000230 */ 0x79, 0x00, 0x73, 0x00, 0x00, 0x00, 0x76, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x65, 0x00, +/* 00000240 */ 0x73, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x65, 0x00, +/* 00000250 */ 0x73, 0x00, 0x00, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x65, 0x00, 0x78, 0x00, 0x4F, 0x00, +/* 00000260 */ 0x66, 0x00, 0x00, 0x00, 0x43, 0x00, 0x68, 0x00, 0x65, 0x00, 0x63, 0x00, 0x6B, 0x00, 0x41, 0x00, +/* 00000270 */ 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x41, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x47, 0x00, +/* 00000280 */ 0x65, 0x00, 0x74, 0x00, 0x4C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x66, 0x00, 0x69, 0x00, +/* 00000290 */ 0x6C, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x46, 0x00, 0x6C, 0x00, 0x61, 0x00, +/* 000002A0 */ 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6F, 0x00, +/* 000002B0 */ 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x00, 0x00, 0x46, 0x00, 0x6C, 0x00, +/* 000002C0 */ 0x61, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, +/* 000002D0 */ 0x6F, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x4D, 0x00, 0x61, 0x00, +/* 000002E0 */ 0x70, 0x00, 0x70, 0x00, 0x65, 0x00, 0x64, 0x00, 0x00, 0x00, 0x66, 0x00, 0x6C, 0x00, 0x61, 0x00, +/* 000002F0 */ 0x74, 0x00, 0x00, 0x00, 0x66, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x4D, 0x00, 0x61, 0x00, +/* 00000300 */ 0x70, 0x00, 0x00, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x45, 0x00, 0x61, 0x00, 0x63, 0x00, +/* 00000310 */ 0x68, 0x00, 0x00, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, +/* 00000320 */ 0x76, 0x00, 0x65, 0x00, 0x72, 0x00, 0x79, 0x00, 0x00, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x63, 0x00, +/* 00000330 */ 0x6C, 0x00, 0x75, 0x00, 0x64, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, +/* 00000340 */ 0x64, 0x00, 0x75, 0x00, 0x63, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x24, 0x00, +/* 00000350 */ 0x61, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x4F, 0x00, 0x62, 0x00, 0x6A, 0x00, +/* 00000360 */ 0x24, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x24, 0x00, 0x6E, 0x00, +/* 00000370 */ 0x65, 0x00, 0x78, 0x00, 0x74, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x65, 0x00, 0x78, 0x00, +/* 00000380 */ 0x24, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x24, 0x00, 0x6B, 0x00, +/* 00000390 */ 0x69, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x24, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x5F, 0x00, +/* 000003A0 */ 0x5F, 0x00, 0x24, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, +/* 000003B0 */ 0x61, 0x00, 0x6C, 0x00, 0x44, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x24, 0x00, 0x5F, 0x00, +/* 000003C0 */ 0x5F, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x20, 0x00, +/* 000003D0 */ 0x49, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 000003E0 */ 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, +/* 000003F0 */ 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x78, 0x00, 0x74, 0x00, 0x00, 0x00, +/* 00000400 */ 0x64, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, +/* 00000410 */ 0x61, 0x00, 0x79, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, +/* 00000420 */ 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x6B, 0x00, 0x65, 0x00, 0x79, 0x00, +/* 00000430 */ 0x73, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x2E, 0x00, +/* 00000440 */ 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, +/* 00000450 */ 0x65, 0x00, 0x2E, 0x00, 0x76, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x65, 0x00, 0x73, 0x00, +/* 00000460 */ 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x2E, 0x00, 0x70, 0x00, +/* 00000470 */ 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, +/* 00000480 */ 0x2E, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x65, 0x00, 0x73, 0x00, +/* 00000490 */ 0x00, 0x00, 0x6F, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x41, 0x00, +/* 000004A0 */ 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, +/* 000004B0 */ 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x69, 0x00, +/* 000004C0 */ 0x6E, 0x00, 0x64, 0x00, 0x65, 0x00, 0x78, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x41, 0x00, +/* 000004D0 */ 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, +/* 000004E0 */ 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x66, 0x00, +/* 000004F0 */ 0x69, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x66, 0x00, 0x75, 0x00, +/* 00000500 */ 0x6E, 0x00, 0x63, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x41, 0x00, +/* 00000510 */ 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, +/* 00000520 */ 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x66, 0x00, +/* 00000530 */ 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, +/* 00000540 */ 0x79, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, +/* 00000550 */ 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 00000560 */ 0x4D, 0x00, 0x61, 0x00, 0x70, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, +/* 00000570 */ 0x79, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, +/* 00000580 */ 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x45, 0x00, +/* 00000590 */ 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, +/* 000005A0 */ 0x79, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, +/* 000005B0 */ 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x65, 0x00, +/* 000005C0 */ 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x2E, 0x00, 0x70, 0x00, +/* 000005D0 */ 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, +/* 000005E0 */ 0x2E, 0x00, 0x65, 0x00, 0x76, 0x00, 0x65, 0x00, 0x72, 0x00, 0x79, 0x00, 0x00, 0x00, 0x41, 0x00, +/* 000005F0 */ 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, +/* 00000600 */ 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x69, 0x00, +/* 00000610 */ 0x6E, 0x00, 0x63, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x64, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, +/* 00000620 */ 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, +/* 00000630 */ 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, +/* 00000640 */ 0x72, 0x00, 0x65, 0x00, 0x64, 0x00, 0x75, 0x00, 0x63, 0x00, 0x65, 0x00, 0x00, 0x00, 0xFE, 0x39, +/* 00000650 */ 0x02, 0x00, 0x00, 0x00, 0x00, 0x6A, 0x00, 0x00, 0x00, 0x9B, 0x00, 0x00, 0x00, 0xE2, 0x00, 0x00, +/* 00000660 */ 0x00, 0x4C, 0x01, 0x00, 0x00, 0xB6, 0x01, 0x00, 0x00, 0xB7, 0x01, 0x00, 0x00, 0xC5, 0x01, 0x00, +/* 00000670 */ 0x00, 0xC6, 0x01, 0x00, 0x00, 0xDE, 0x01, 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x07, 0x02, 0x00, +/* 00000680 */ 0x00, 0x3C, 0x02, 0x00, 0x00, 0x91, 0x02, 0x00, 0x00, 0xB3, 0x02, 0x00, 0x00, 0xF7, 0x02, 0x00, +/* 00000690 */ 0x00, 0xF8, 0x02, 0x00, 0x00, 0x59, 0x03, 0x00, 0x00, 0xDB, 0x03, 0x00, 0x00, 0x03, 0x04, 0x00, +/* 000006A0 */ 0x00, 0x25, 0x04, 0x00, 0x00, 0x4E, 0x04, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x0A, 0x05, 0x00, +/* 000006B0 */ 0x00, 0x0B, 0x05, 0x00, 0x00, 0x81, 0x05, 0x00, 0x00, 0xBE, 0x05, 0x00, 0x00, 0xE4, 0x05, 0x00, +/* 000006C0 */ 0x00, 0x33, 0x06, 0x00, 0x00, 0x7F, 0x06, 0x00, 0x00, 0xD3, 0x06, 0x00, 0x00, 0x3F, 0x07, 0x00, +/* 000006D0 */ 0x00, 0x87, 0x07, 0x00, 0x00, 0xED, 0x07, 0x00, 0x00, 0xEE, 0x07, 0x00, 0x00, 0x39, 0x08, 0x00, +/* 000006E0 */ 0x00, 0xD2, 0x08, 0x00, 0x00, 0x14, 0x09, 0x00, 0x00, 0x2B, 0x09, 0x00, 0x00, 0x4C, 0x09, 0x00, +/* 000006F0 */ 0x00, 0x6A, 0x09, 0x00, 0x00, 0x6B, 0x09, 0x00, 0x00, 0xB0, 0x09, 0x00, 0x00, 0x1E, 0x0A, 0x00, +/* 00000700 */ 0x00, 0x30, 0x0A, 0x00, 0x00, 0x31, 0x0A, 0x00, 0x00, 0x5B, 0x0A, 0x00, 0x00, 0x5C, 0x0A, 0x00, +/* 00000710 */ 0x00, 0x91, 0x0A, 0x00, 0x00, 0xCE, 0x0A, 0x00, 0x00, 0xE7, 0x0A, 0x00, 0x00, 0x1A, 0x0B, 0x00, +/* 00000720 */ 0x00, 0x7E, 0x0B, 0x00, 0x00, 0x7F, 0x0B, 0x00, 0x00, 0xEB, 0x0B, 0x00, 0x00, 0x20, 0x0C, 0x00, +/* 00000730 */ 0x00, 0x21, 0x0C, 0x00, 0x00, 0x58, 0x0C, 0x00, 0x00, 0x59, 0x0C, 0x00, 0x00, 0xA4, 0x0C, 0x00, +/* 00000740 */ 0x00, 0xE9, 0x0C, 0x00, 0x00, 0x64, 0x0D, 0x00, 0x00, 0xA6, 0x0D, 0x00, 0x00, 0xC7, 0x0D, 0x00, +/* 00000750 */ 0x00, 0xFB, 0x0D, 0x00, 0x00, 0x34, 0x0E, 0x00, 0x00, 0x8B, 0x0E, 0x00, 0x00, 0xA5, 0x0E, 0x00, +/* 00000760 */ 0x00, 0xC2, 0x0E, 0x00, 0x00, 0xF7, 0x0E, 0x00, 0x00, 0x39, 0x0F, 0x00, 0x00, 0x4F, 0x0F, 0x00, +/* 00000770 */ 0x00, 0x61, 0x0F, 0x00, 0x00, 0x70, 0x0F, 0x00, 0x00, 0x8C, 0x0F, 0x00, 0x00, 0xAB, 0x0F, 0x00, +/* 00000780 */ 0x00, 0xCA, 0x0F, 0x00, 0x00, 0xDB, 0x0F, 0x00, 0x00, 0xE2, 0x0F, 0x00, 0x00, 0xE3, 0x0F, 0x00, +/* 00000790 */ 0x00, 0xA4, 0x10, 0x00, 0x00, 0xA5, 0x10, 0x00, 0x00, 0x52, 0x11, 0x00, 0x00, 0x53, 0x11, 0x00, +/* 000007A0 */ 0x00, 0x03, 0x12, 0x00, 0x00, 0x04, 0x12, 0x00, 0x00, 0x6B, 0x12, 0x00, 0x00, 0xB6, 0x12, 0x00, +/* 000007B0 */ 0x00, 0xBE, 0x12, 0x00, 0x00, 0xBF, 0x12, 0x00, 0x00, 0xF3, 0x12, 0x00, 0x00, 0x26, 0x13, 0x00, +/* 000007C0 */ 0x00, 0x75, 0x13, 0x00, 0x00, 0x7F, 0x13, 0x00, 0x00, 0xAD, 0x13, 0x00, 0x00, 0x03, 0x14, 0x00, +/* 000007D0 */ 0x00, 0x0B, 0x14, 0x00, 0x00, 0x0C, 0x14, 0x00, 0x00, 0x42, 0x14, 0x00, 0x00, 0x75, 0x14, 0x00, +/* 000007E0 */ 0x00, 0xC6, 0x14, 0x00, 0x00, 0xD0, 0x14, 0x00, 0x00, 0xFE, 0x14, 0x00, 0x00, 0x56, 0x15, 0x00, +/* 000007F0 */ 0x00, 0x5E, 0x15, 0x00, 0x00, 0x5F, 0x15, 0x00, 0x00, 0x96, 0x15, 0x00, 0x00, 0xC9, 0x15, 0x00, +/* 00000800 */ 0x00, 0x1B, 0x16, 0x00, 0x00, 0x25, 0x16, 0x00, 0x00, 0x53, 0x16, 0x00, 0x00, 0xB1, 0x16, 0x00, +/* 00000810 */ 0x00, 0xB9, 0x16, 0x00, 0x00, 0xBA, 0x16, 0x00, 0x00, 0x15, 0x17, 0x00, 0x00, 0x4D, 0x17, 0x00, +/* 00000820 */ 0x00, 0x4E, 0x17, 0x00, 0x00, 0xAB, 0x17, 0x00, 0x00, 0xAC, 0x17, 0x00, 0x00, 0xC5, 0x17, 0x00, +/* 00000830 */ 0x00, 0xDC, 0x17, 0x00, 0x00, 0xE6, 0x17, 0x00, 0x00, 0xE7, 0x17, 0x00, 0x00, 0x1D, 0x18, 0x00, +/* 00000840 */ 0x00, 0x35, 0x18, 0x00, 0x00, 0x4C, 0x18, 0x00, 0x00, 0x56, 0x18, 0x00, 0x00, 0x57, 0x18, 0x00, +/* 00000850 */ 0x00, 0x66, 0x18, 0x00, 0x00, 0x67, 0x18, 0x00, 0x00, 0xA8, 0x18, 0x00, 0x00, 0xEE, 0x18, 0x00, +/* 00000860 */ 0x00, 0x33, 0x19, 0x00, 0x00, 0x6B, 0x19, 0x00, 0x00, 0xBF, 0x19, 0x00, 0x00, 0xD2, 0x19, 0x00, +/* 00000870 */ 0x00, 0x24, 0x1A, 0x00, 0x00, 0x37, 0x1A, 0x00, 0x00, 0x72, 0x1A, 0x00, 0x00, 0x8B, 0x1A, 0x00, +/* 00000880 */ 0x00, 0x8C, 0x1A, 0x00, 0x00, 0xA5, 0x1A, 0x00, 0x00, 0xBC, 0x1A, 0x00, 0x00, 0xCA, 0x1A, 0x00, +/* 00000890 */ 0x00, 0xD4, 0x1A, 0x00, 0x00, 0xD5, 0x1A, 0x00, 0x00, 0xEF, 0x1A, 0x00, 0x00, 0x09, 0x1B, 0x00, +/* 000008A0 */ 0x00, 0x2E, 0x1B, 0x00, 0x00, 0x2F, 0x1B, 0x00, 0x00, 0x61, 0x1B, 0x00, 0x00, 0x7F, 0x1B, 0x00, +/* 000008B0 */ 0x00, 0x91, 0x1B, 0x00, 0x00, 0x9F, 0x1B, 0x00, 0x00, 0xA0, 0x1B, 0x00, 0x00, 0xB1, 0x1B, 0x00, +/* 000008C0 */ 0x00, 0xBB, 0x1B, 0x00, 0x00, 0xBC, 0x1B, 0x00, 0x00, 0xCF, 0x1B, 0x00, 0x00, 0xD7, 0x1B, 0x00, +/* 000008D0 */ 0x00, 0xD8, 0x1B, 0x00, 0x00, 0x38, 0x1C, 0x00, 0x00, 0x64, 0x1C, 0x00, 0x00, 0x94, 0x1C, 0x00, +/* 000008E0 */ 0x00, 0xA5, 0x1C, 0x00, 0x00, 0xDA, 0x1C, 0x00, 0x00, 0x22, 0x1D, 0x00, 0x00, 0x30, 0x1D, 0x00, +/* 000008F0 */ 0x00, 0x95, 0x1D, 0x00, 0x00, 0x9F, 0x1D, 0x00, 0x00, 0xA7, 0x1D, 0x00, 0x00, 0xA8, 0x1D, 0x00, +/* 00000900 */ 0x00, 0xFD, 0x1D, 0x00, 0x00, 0x34, 0x1E, 0x00, 0x00, 0x35, 0x1E, 0x00, 0x00, 0x91, 0x1E, 0x00, +/* 00000910 */ 0x00, 0x9A, 0x1E, 0x00, 0x00, 0xCA, 0x1E, 0x00, 0x00, 0x24, 0x1F, 0x00, 0x00, 0x2E, 0x1F, 0x00, +/* 00000920 */ 0x00, 0x2F, 0x1F, 0x00, 0x00, 0x69, 0x1F, 0x00, 0x00, 0x7C, 0x1F, 0x00, 0x00, 0x90, 0x1F, 0x00, +/* 00000930 */ 0x00, 0x91, 0x1F, 0x00, 0x00, 0xAB, 0x1F, 0x00, 0x00, 0xC5, 0x1F, 0x00, 0x00, 0xE8, 0x1F, 0x00, +/* 00000940 */ 0x00, 0x4E, 0x20, 0x00, 0x00, 0xA1, 0x20, 0x00, 0x00, 0xBB, 0x20, 0x00, 0x00, 0xCD, 0x20, 0x00, +/* 00000950 */ 0x00, 0xDB, 0x20, 0x00, 0x00, 0xEC, 0x20, 0x00, 0x00, 0xF6, 0x20, 0x00, 0x00, 0xF7, 0x20, 0x00, +/* 00000960 */ 0x00, 0x09, 0x21, 0x00, 0x00, 0x11, 0x21, 0x00, 0x00, 0x12, 0x21, 0x00, 0x00, 0x83, 0x21, 0x00, +/* 00000970 */ 0x00, 0x89, 0x21, 0x00, 0x00, 0xE7, 0x21, 0x00, 0x00, 0x47, 0x22, 0x00, 0x00, 0x48, 0x22, 0x00, +/* 00000980 */ 0x00, 0x6F, 0x22, 0x00, 0x00, 0x90, 0x22, 0x00, 0x00, 0xB3, 0x22, 0x00, 0x00, 0xD0, 0x22, 0x00, +/* 00000990 */ 0x00, 0x03, 0x23, 0x00, 0x00, 0x18, 0x23, 0x00, 0x00, 0x42, 0x23, 0x00, 0x00, 0x76, 0x23, 0x00, +/* 000009A0 */ 0x00, 0xB0, 0x23, 0x00, 0x00, 0xD9, 0x23, 0x00, 0x00, 0x07, 0x24, 0x00, 0x00, 0x3F, 0x24, 0x00, +/* 000009B0 */ 0x00, 0x6E, 0x24, 0x00, 0x00, 0xC3, 0x24, 0x00, 0x00, 0xF8, 0x24, 0x00, 0x00, 0x23, 0x25, 0x00, +/* 000009C0 */ 0x00, 0x67, 0x25, 0x00, 0x00, 0xAC, 0x25, 0x00, 0x00, 0xE5, 0x25, 0x00, 0x00, 0x38, 0x26, 0x00, +/* 000009D0 */ 0x00, 0xAF, 0x26, 0x00, 0x00, 0x46, 0x27, 0x00, 0x00, 0x5F, 0x27, 0x00, 0x00, 0x80, 0x27, 0x00, +/* 000009E0 */ 0x00, 0xD2, 0x27, 0x00, 0x00, 0x1A, 0x28, 0x00, 0x00, 0x6F, 0x28, 0x00, 0x00, 0x85, 0x28, 0x00, +/* 000009F0 */ 0x00, 0xEE, 0x28, 0x00, 0x00, 0x50, 0x29, 0x00, 0x00, 0x85, 0x29, 0x00, 0x00, 0xA8, 0x29, 0x00, +/* 00000A00 */ 0x00, 0xBA, 0x29, 0x00, 0x00, 0xC8, 0x29, 0x00, 0x00, 0xF6, 0x29, 0x00, 0x00, 0x11, 0x2A, 0x00, +/* 00000A10 */ 0x00, 0x1B, 0x2A, 0x00, 0x00, 0x3C, 0x2A, 0x00, 0x00, 0x58, 0x2A, 0x00, 0x00, 0x60, 0x2A, 0x00, +/* 00000A20 */ 0x00, 0x61, 0x2A, 0x00, 0x00, 0xEC, 0x2A, 0x00, 0x00, 0x39, 0x2B, 0x00, 0x00, 0x7E, 0x2B, 0x00, +/* 00000A30 */ 0x00, 0xCF, 0x2B, 0x00, 0x00, 0x20, 0x2C, 0x00, 0x00, 0x63, 0x2C, 0x00, 0x00, 0x8A, 0x2C, 0x00, +/* 00000A40 */ 0x00, 0xAB, 0x2C, 0x00, 0x00, 0xCE, 0x2C, 0x00, 0x00, 0xEB, 0x2C, 0x00, 0x00, 0x1E, 0x2D, 0x00, +/* 00000A50 */ 0x00, 0x1F, 0x2D, 0x00, 0x00, 0x4D, 0x2D, 0x00, 0x00, 0x77, 0x2D, 0x00, 0x00, 0xAB, 0x2D, 0x00, +/* 00000A60 */ 0x00, 0xE5, 0x2D, 0x00, 0x00, 0x0E, 0x2E, 0x00, 0x00, 0x3C, 0x2E, 0x00, 0x00, 0x74, 0x2E, 0x00, +/* 00000A70 */ 0x00, 0xAF, 0x2E, 0x00, 0x00, 0xE6, 0x2E, 0x00, 0x00, 0x50, 0x2F, 0x00, 0x00, 0xDA, 0x2F, 0x00, +/* 00000A80 */ 0x00, 0x0F, 0x30, 0x00, 0x00, 0x3A, 0x30, 0x00, 0x00, 0x7E, 0x30, 0x00, 0x00, 0xB4, 0x30, 0x00, +/* 00000A90 */ 0x00, 0x07, 0x31, 0x00, 0x00, 0x7E, 0x31, 0x00, 0x00, 0xB6, 0x31, 0x00, 0x00, 0x1F, 0x32, 0x00, +/* 00000AA0 */ 0x00, 0x6B, 0x32, 0x00, 0x00, 0x8F, 0x32, 0x00, 0x00, 0xC6, 0x32, 0x00, 0x00, 0xFB, 0x32, 0x00, +/* 00000AB0 */ 0x00, 0x55, 0x33, 0x00, 0x00, 0xA5, 0x33, 0x00, 0x00, 0x05, 0x34, 0x00, 0x00, 0x23, 0x34, 0x00, +/* 00000AC0 */ 0x00, 0x95, 0x34, 0x00, 0x00, 0x0B, 0x35, 0x00, 0x00, 0x49, 0x35, 0x00, 0x00, 0x74, 0x35, 0x00, +/* 00000AD0 */ 0x00, 0x8E, 0x35, 0x00, 0x00, 0xB4, 0x35, 0x00, 0x00, 0xCA, 0x35, 0x00, 0x00, 0xE3, 0x35, 0x00, +/* 00000AE0 */ 0x00, 0x05, 0x36, 0x00, 0x00, 0x5B, 0x36, 0x00, 0x00, 0xA3, 0x36, 0x00, 0x00, 0xFB, 0x36, 0x00, +/* 00000AF0 */ 0x00, 0x11, 0x37, 0x00, 0x00, 0x7B, 0x37, 0x00, 0x00, 0xDD, 0x37, 0x00, 0x00, 0x13, 0x38, 0x00, +/* 00000B00 */ 0x00, 0x36, 0x38, 0x00, 0x00, 0x48, 0x38, 0x00, 0x00, 0x56, 0x38, 0x00, 0x00, 0x84, 0x38, 0x00, +/* 00000B10 */ 0x00, 0x9F, 0x38, 0x00, 0x00, 0xA9, 0x38, 0x00, 0x00, 0xCA, 0x38, 0x00, 0x00, 0xE6, 0x38, 0x00, +/* 00000B20 */ 0x00, 0xEE, 0x38, 0x00, 0x00, 0xEF, 0x38, 0x00, 0x00, 0x34, 0x39, 0x00, 0x00, 0x62, 0x39, 0x00, +/* 00000B30 */ 0x00, 0xA0, 0x39, 0x00, 0x00, 0xFA, 0x39, 0x00, 0x00, 0xFB, 0x39, 0x00, 0x00, 0x1B, 0x3A, 0x00, +/* 00000B40 */ 0x00, 0x48, 0x3A, 0x00, 0x00, 0x79, 0x3A, 0x00, 0x00, 0xCE, 0x3A, 0x00, 0x00, 0x00, 0x3B, 0x00, +/* 00000B50 */ 0x00, 0x3C, 0x3B, 0x00, 0x00, 0x83, 0x3B, 0x00, 0x00, 0xC5, 0x3B, 0x00, 0x00, 0xDC, 0x3B, 0x00, +/* 00000B60 */ 0x00, 0xEE, 0x3B, 0x00, 0x00, 0xF6, 0x3B, 0x00, 0x00, 0xF7, 0x3B, 0x00, 0x00, 0x51, 0x3C, 0x00, +/* 00000B70 */ 0x00, 0x7F, 0x3C, 0x00, 0x00, 0xBD, 0x3C, 0x00, 0x00, 0x1A, 0x3D, 0x00, 0x00, 0x1B, 0x3D, 0x00, +/* 00000B80 */ 0x00, 0x6B, 0x3D, 0x00, 0x00, 0x9F, 0x3D, 0x00, 0x00, 0xFA, 0x3D, 0x00, 0x00, 0x04, 0x3E, 0x00, +/* 00000B90 */ 0x00, 0x52, 0x3E, 0x00, 0x00, 0x84, 0x3E, 0x00, 0x00, 0xC0, 0x3E, 0x00, 0x00, 0x07, 0x3F, 0x00, +/* 00000BA0 */ 0x00, 0x5E, 0x3F, 0x00, 0x00, 0x75, 0x3F, 0x00, 0x00, 0x87, 0x3F, 0x00, 0x00, 0x8F, 0x3F, 0x00, +/* 00000BB0 */ 0x00, 0x90, 0x3F, 0x00, 0x00, 0xE6, 0x3F, 0x00, 0x00, 0x1E, 0x40, 0x00, 0x00, 0x1F, 0x40, 0x00, +/* 00000BC0 */ 0x00, 0x4A, 0x40, 0x00, 0x00, 0x7F, 0x40, 0x00, 0x00, 0xDC, 0x40, 0x00, 0x00, 0xE5, 0x40, 0x00, +/* 00000BD0 */ 0x00, 0x30, 0x41, 0x00, 0x00, 0x60, 0x41, 0x00, 0x00, 0xBB, 0x41, 0x00, 0x00, 0xC5, 0x41, 0x00, +/* 00000BE0 */ 0x00, 0xC6, 0x41, 0x00, 0x00, 0x12, 0x42, 0x00, 0x00, 0x28, 0x42, 0x00, 0x00, 0x3B, 0x42, 0x00, +/* 00000BF0 */ 0x00, 0x3C, 0x42, 0x00, 0x00, 0x5C, 0x42, 0x00, 0x00, 0x76, 0x42, 0x00, 0x00, 0x9D, 0x42, 0x00, +/* 00000C00 */ 0x00, 0xD1, 0x42, 0x00, 0x00, 0xF9, 0x42, 0x00, 0x00, 0x13, 0x43, 0x00, 0x00, 0x41, 0x43, 0x00, +/* 00000C10 */ 0x00, 0x64, 0x43, 0x00, 0x00, 0xA4, 0x43, 0x00, 0x00, 0x04, 0x44, 0x00, 0x00, 0x12, 0x44, 0x00, +/* 00000C20 */ 0x00, 0x31, 0x44, 0x00, 0x00, 0x42, 0x44, 0x00, 0x00, 0x4C, 0x44, 0x00, 0x00, 0x69, 0x44, 0x00, +/* 00000C30 */ 0x00, 0x83, 0x44, 0x00, 0x00, 0x8B, 0x44, 0x00, 0x00, 0x8C, 0x44, 0x00, 0x00, 0xDF, 0x44, 0x00, +/* 00000C40 */ 0x00, 0x14, 0x45, 0x00, 0x00, 0x1D, 0x45, 0x00, 0x00, 0x48, 0x45, 0x00, 0x00, 0x7D, 0x45, 0x00, +/* 00000C50 */ 0x00, 0xD7, 0x45, 0x00, 0x00, 0xD8, 0x45, 0x00, 0x00, 0x23, 0x46, 0x00, 0x00, 0x53, 0x46, 0x00, +/* 00000C60 */ 0x00, 0xAB, 0x46, 0x00, 0x00, 0xB5, 0x46, 0x00, 0x00, 0xB6, 0x46, 0x00, 0x00, 0x02, 0x47, 0x00, +/* 00000C70 */ 0x00, 0x18, 0x47, 0x00, 0x00, 0x2B, 0x47, 0x00, 0x00, 0x2C, 0x47, 0x00, 0x00, 0x4C, 0x47, 0x00, +/* 00000C80 */ 0x00, 0x66, 0x47, 0x00, 0x00, 0x8D, 0x47, 0x00, 0x00, 0xC1, 0x47, 0x00, 0x00, 0xE9, 0x47, 0x00, +/* 00000C90 */ 0x00, 0x03, 0x48, 0x00, 0x00, 0x31, 0x48, 0x00, 0x00, 0x54, 0x48, 0x00, 0x00, 0xA9, 0x48, 0x00, +/* 00000CA0 */ 0x00, 0xDF, 0x48, 0x00, 0x00, 0x45, 0x49, 0x00, 0x00, 0x66, 0x49, 0x00, 0x00, 0x78, 0x49, 0x00, +/* 00000CB0 */ 0x00, 0x86, 0x49, 0x00, 0x00, 0xA5, 0x49, 0x00, 0x00, 0xB6, 0x49, 0x00, 0x00, 0xC0, 0x49, 0x00, +/* 00000CC0 */ 0x00, 0xD9, 0x49, 0x00, 0x00, 0xEF, 0x49, 0x00, 0x00, 0xF7, 0x49, 0x00, 0x00, 0xF8, 0x49, 0x00, +/* 00000CD0 */ 0x00, 0x4C, 0x4A, 0x00, 0x00, 0x82, 0x4A, 0x00, 0x00, 0x8B, 0x4A, 0x00, 0x00, 0xB6, 0x4A, 0x00, +/* 00000CE0 */ 0x00, 0xEB, 0x4A, 0x00, 0x00, 0x46, 0x4B, 0x00, 0x00, 0x47, 0x4B, 0x00, 0x00, 0x92, 0x4B, 0x00, +/* 00000CF0 */ 0x00, 0xC2, 0x4B, 0x00, 0x00, 0x1B, 0x4C, 0x00, 0x00, 0x25, 0x4C, 0x00, 0x00, 0x26, 0x4C, 0x00, +/* 00000D00 */ 0x00, 0x72, 0x4C, 0x00, 0x00, 0x88, 0x4C, 0x00, 0x00, 0x9B, 0x4C, 0x00, 0x00, 0x9C, 0x4C, 0x00, +/* 00000D10 */ 0x00, 0xBC, 0x4C, 0x00, 0x00, 0xD6, 0x4C, 0x00, 0x00, 0xFD, 0x4C, 0x00, 0x00, 0x31, 0x4D, 0x00, +/* 00000D20 */ 0x00, 0x59, 0x4D, 0x00, 0x00, 0x73, 0x4D, 0x00, 0x00, 0xA1, 0x4D, 0x00, 0x00, 0xC4, 0x4D, 0x00, +/* 00000D30 */ 0x00, 0x19, 0x4E, 0x00, 0x00, 0x51, 0x4E, 0x00, 0x00, 0xB8, 0x4E, 0x00, 0x00, 0xDA, 0x4E, 0x00, +/* 00000D40 */ 0x00, 0xEC, 0x4E, 0x00, 0x00, 0xFA, 0x4E, 0x00, 0x00, 0x19, 0x4F, 0x00, 0x00, 0x2A, 0x4F, 0x00, +/* 00000D50 */ 0x00, 0x34, 0x4F, 0x00, 0x00, 0x4C, 0x4F, 0x00, 0x00, 0x61, 0x4F, 0x00, 0x00, 0x69, 0x4F, 0x00, +/* 00000D60 */ 0x00, 0x6A, 0x4F, 0x00, 0x00, 0xC6, 0x4F, 0x00, 0x00, 0xFF, 0x4F, 0x00, 0x00, 0x00, 0x50, 0x00, +/* 00000D70 */ 0x00, 0x2B, 0x50, 0x00, 0x00, 0x60, 0x50, 0x00, 0x00, 0xBD, 0x50, 0x00, 0x00, 0xBE, 0x50, 0x00, +/* 00000D80 */ 0x00, 0xE3, 0x50, 0x00, 0x00, 0xFC, 0x50, 0x00, 0x00, 0x16, 0x51, 0x00, 0x00, 0x20, 0x51, 0x00, +/* 00000D90 */ 0x00, 0x21, 0x51, 0x00, 0x00, 0x4C, 0x51, 0x00, 0x00, 0x86, 0x51, 0x00, 0x00, 0xBC, 0x51, 0x00, +/* 00000DA0 */ 0x00, 0xCB, 0x51, 0x00, 0x00, 0xCC, 0x51, 0x00, 0x00, 0xE6, 0x51, 0x00, 0x00, 0xFE, 0x51, 0x00, +/* 00000DB0 */ 0x00, 0x14, 0x52, 0x00, 0x00, 0x32, 0x52, 0x00, 0x00, 0x54, 0x52, 0x00, 0x00, 0x6A, 0x52, 0x00, +/* 00000DC0 */ 0x00, 0x7D, 0x52, 0x00, 0x00, 0x88, 0x52, 0x00, 0x00, 0x97, 0x52, 0x00, 0x00, 0xB0, 0x52, 0x00, +/* 00000DD0 */ 0x00, 0xB1, 0x52, 0x00, 0x00, 0xCA, 0x52, 0x00, 0x00, 0xE1, 0x52, 0x00, 0x00, 0xEF, 0x52, 0x00, +/* 00000DE0 */ 0x00, 0xF9, 0x52, 0x00, 0x00, 0xFA, 0x52, 0x00, 0x00, 0x1A, 0x53, 0x00, 0x00, 0x34, 0x53, 0x00, +/* 00000DF0 */ 0x00, 0x79, 0x53, 0x00, 0x00, 0x9A, 0x53, 0x00, 0x00, 0xE8, 0x53, 0x00, 0x00, 0x69, 0x54, 0x00, +/* 00000E00 */ 0x00, 0x86, 0x54, 0x00, 0x00, 0x94, 0x54, 0x00, 0x00, 0xB3, 0x54, 0x00, 0x00, 0xC4, 0x54, 0x00, +/* 00000E10 */ 0x00, 0xCE, 0x54, 0x00, 0x00, 0xE7, 0x54, 0x00, 0x00, 0xFD, 0x54, 0x00, 0x00, 0x05, 0x55, 0x00, +/* 00000E20 */ 0x00, 0x06, 0x55, 0x00, 0x00, 0x60, 0x55, 0x00, 0x00, 0x97, 0x55, 0x00, 0x00, 0x98, 0x55, 0x00, +/* 00000E30 */ 0x00, 0xC3, 0x55, 0x00, 0x00, 0xF8, 0x55, 0x00, 0x00, 0x54, 0x56, 0x00, 0x00, 0x55, 0x56, 0x00, +/* 00000E40 */ 0x00, 0xA0, 0x56, 0x00, 0x00, 0xD0, 0x56, 0x00, 0x00, 0x2A, 0x57, 0x00, 0x00, 0x34, 0x57, 0x00, +/* 00000E50 */ 0x00, 0x35, 0x57, 0x00, 0x00, 0x89, 0x57, 0x00, 0x00, 0xC0, 0x57, 0x00, 0x00, 0x1E, 0x58, 0x00, +/* 00000E60 */ 0x00, 0x28, 0x58, 0x00, 0x00, 0x29, 0x58, 0x00, 0x00, 0x3F, 0x58, 0x00, 0x00, 0x67, 0x58, 0x00, +/* 00000E70 */ 0x00, 0x7A, 0x58, 0x00, 0x00, 0x9F, 0x58, 0x00, 0x00, 0xA0, 0x58, 0x00, 0x00, 0xCB, 0x58, 0x00, +/* 00000E80 */ 0x00, 0xF6, 0x58, 0x00, 0x00, 0x6A, 0x59, 0x00, 0x00, 0x92, 0x59, 0x00, 0x00, 0x9C, 0x59, 0x00, +/* 00000E90 */ 0x00, 0xC8, 0x59, 0x00, 0x00, 0xD7, 0x59, 0x00, 0x00, 0xFC, 0x59, 0x00, 0x00, 0x1E, 0x5A, 0x00, +/* 00000EA0 */ 0x00, 0x58, 0x5A, 0x00, 0x00, 0x83, 0x5A, 0x00, 0x00, 0xAE, 0x5A, 0x00, 0x00, 0xE6, 0x5A, 0x00, +/* 00000EB0 */ 0x00, 0x12, 0x5B, 0x00, 0x00, 0x47, 0x5B, 0x00, 0x00, 0x65, 0x5B, 0x00, 0x00, 0x8A, 0x5B, 0x00, +/* 00000EC0 */ 0x00, 0xB2, 0x5B, 0x00, 0x00, 0xC4, 0x5B, 0x00, 0x00, 0xE7, 0x5B, 0x00, 0x00, 0xFC, 0x5B, 0x00, +/* 00000ED0 */ 0x00, 0x0A, 0x5C, 0x00, 0x00, 0x4B, 0x5C, 0x00, 0x00, 0x68, 0x5C, 0x00, 0x00, 0xCA, 0x5C, 0x00, +/* 00000EE0 */ 0x00, 0xD8, 0x5C, 0x00, 0x00, 0xE2, 0x5C, 0x00, 0x00, 0xE3, 0x5C, 0x00, 0x00, 0x03, 0x5D, 0x00, +/* 00000EF0 */ 0x00, 0x1D, 0x5D, 0x00, 0x00, 0x44, 0x5D, 0x00, 0x00, 0x78, 0x5D, 0x00, 0x00, 0xA0, 0x5D, 0x00, +/* 00000F00 */ 0x00, 0xBA, 0x5D, 0x00, 0x00, 0xE8, 0x5D, 0x00, 0x00, 0x0B, 0x5E, 0x00, 0x00, 0x6B, 0x5E, 0x00, +/* 00000F10 */ 0x00, 0xE8, 0x5E, 0x00, 0x00, 0xF6, 0x5E, 0x00, 0x00, 0x15, 0x5F, 0x00, 0x00, 0x26, 0x5F, 0x00, +/* 00000F20 */ 0x00, 0x30, 0x5F, 0x00, 0x00, 0x4F, 0x5F, 0x00, 0x00, 0x6B, 0x5F, 0x00, 0x00, 0x73, 0x5F, 0x00, +/* 00000F30 */ 0x00, 0x77, 0x5F, 0x00, 0x00, 0x00, 0x14, 0x73, 0x0C, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, 0xA8, +/* 00000F40 */ 0x41, 0xC0, 0x00, 0xFE, 0xD9, 0x02, 0x00, 0xFE, 0xB7, 0x01, 0xFE, 0xB7, 0x01, 0x01, 0x40, 0xFE, +/* 00000F50 */ 0x00, 0x90, 0xFE, 0xB7, 0x01, 0xFE, 0xC0, 0x5D, 0xFE, 0xC0, 0x5D, 0x01, 0x04, 0x04, 0x04, 0x04, +/* 00000F60 */ 0x03, 0x05, 0xFE, 0xDA, 0x02, 0x0A, 0x07, 0xA8, 0x00, 0xD6, 0x00, 0x04, 0x24, 0x00, 0x00, 0x01, +/* 00000F70 */ 0x05, 0x00, 0x00, 0x00, 0x00, 0x79, 0x0F, 0x00, 0x00, 0x7F, 0x1C, 0x00, 0xC0, 0x13, 0x10, 0x4B, +/* 00000F80 */ 0x00, 0x08, 0x01, 0xA2, 0x41, 0xD1, 0x00, 0x01, 0xFE, 0xC7, 0x01, 0xFE, 0xC7, 0x01, 0x12, 0x40, +/* 00000F90 */ 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0xC7, 0x01, 0xFE, 0xAD, 0x5D, 0xFE, 0xAD, 0x5D, 0x0C, 0x20, +/* 00000FA0 */ 0x28, 0x09, 0xF7, 0xE9, 0x3E, 0x3E, 0x3E, 0x3E, 0x04, 0x27, 0x08, 0x06, 0xFE, 0xDB, 0x02, 0x06, +/* 00000FB0 */ 0xFE, 0xDC, 0x02, 0x06, 0xFE, 0xDD, 0x02, 0x06, 0xFE, 0xDE, 0x02, 0x0B, 0x06, 0xFE, 0xDF, 0x02, +/* 00000FC0 */ 0x0C, 0x06, 0xFE, 0xE0, 0x02, 0x07, 0x05, 0xFE, 0xE1, 0x02, 0x06, 0xFE, 0xE2, 0x02, 0x01, 0x00, +/* 00000FD0 */ 0x06, 0xFE, 0xE3, 0x02, 0x06, 0xFE, 0xE4, 0x02, 0x06, 0xFE, 0xE5, 0x02, 0x06, 0xFE, 0xE6, 0x02, +/* 00000FE0 */ 0x06, 0xFE, 0xE7, 0x02, 0x06, 0xFE, 0xE8, 0x02, 0x06, 0xFE, 0xE9, 0x02, 0x06, 0xFE, 0xEA, 0x02, +/* 00000FF0 */ 0x06, 0xFE, 0xEB, 0x02, 0x06, 0xFE, 0xEC, 0x02, 0x06, 0xFE, 0xED, 0x02, 0x06, 0xFE, 0xEE, 0x02, +/* 00001000 */ 0x06, 0xFE, 0xEF, 0x02, 0x06, 0xFE, 0xF0, 0x02, 0x06, 0xFE, 0xF1, 0x02, 0x06, 0xFE, 0xF2, 0x02, +/* 00001010 */ 0x06, 0xFE, 0xF3, 0x02, 0xFE, 0x6C, 0x03, 0x5E, 0x28, 0x20, 0x00, 0x45, 0x21, 0x28, 0x5E, 0x28, +/* 00001020 */ 0x21, 0x01, 0x45, 0x22, 0x28, 0x5E, 0x28, 0x21, 0x02, 0x45, 0x23, 0x28, 0x5E, 0x28, 0x21, 0x03, +/* 00001030 */ 0x45, 0x24, 0x28, 0x5E, 0x28, 0x21, 0x04, 0x45, 0x25, 0x28, 0x6C, 0x28, 0x21, 0x05, 0x07, 0x03, +/* 00001040 */ 0x00, 0x59, 0x00, 0x21, 0x59, 0x01, 0x03, 0xD6, 0x00, 0x29, 0x59, 0x02, 0x29, 0x1F, 0x03, 0xFF, +/* 00001050 */ 0x28, 0x6C, 0x28, 0x21, 0x06, 0x07, 0x01, 0x00, 0x59, 0x00, 0x21, 0x1F, 0x01, 0x28, 0x28, 0x45, +/* 00001060 */ 0x26, 0x28, 0x01, 0x58, 0x01, 0x28, 0x5E, 0x28, 0x28, 0x07, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, +/* 00001070 */ 0x59, 0x01, 0x26, 0x1F, 0x02, 0x29, 0x25, 0x76, 0x29, 0x28, 0x08, 0x01, 0x58, 0x01, 0x28, 0x5E, +/* 00001080 */ 0x29, 0x21, 0x09, 0x76, 0x29, 0x28, 0x0A, 0x01, 0x58, 0x01, 0x28, 0x5E, 0x29, 0x21, 0x0B, 0x76, +/* 00001090 */ 0x29, 0x28, 0x0C, 0x01, 0x58, 0x01, 0x28, 0x5E, 0x29, 0x21, 0x0D, 0x76, 0x29, 0x28, 0x0E, 0x01, +/* 000010A0 */ 0x58, 0x01, 0x28, 0x5E, 0x29, 0x21, 0x0F, 0x76, 0x29, 0x28, 0x10, 0x01, 0x58, 0x01, 0x28, 0x5E, +/* 000010B0 */ 0x29, 0x21, 0x11, 0x76, 0x29, 0x28, 0x12, 0x45, 0x28, 0x23, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, +/* 000010C0 */ 0x01, 0x58, 0x01, 0x29, 0x5E, 0x29, 0x29, 0x13, 0x5E, 0x29, 0x29, 0x14, 0x59, 0x01, 0x29, 0x59, +/* 000010D0 */ 0x02, 0x04, 0x45, 0x29, 0x22, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0xCE, 0x00, 0x00, 0x00, 0x00, +/* 000010E0 */ 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x00, 0xD9, 0x01, 0x2B, 0x2A, 0x7A, 0x2B, 0x2A, 0x15, +/* 000010F0 */ 0x7A, 0x07, 0x2A, 0x16, 0x7A, 0x09, 0x2A, 0x17, 0x7A, 0x07, 0x2A, 0x18, 0x59, 0x01, 0x2A, 0x59, +/* 00001100 */ 0x02, 0x0B, 0x1F, 0x03, 0x29, 0x29, 0x59, 0x03, 0x29, 0x1F, 0x04, 0xFF, 0x28, 0x45, 0x28, 0x23, +/* 00001110 */ 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x01, 0x58, 0x01, 0x29, 0x5E, 0x29, 0x29, 0x19, 0x5E, 0x29, +/* 00001120 */ 0x29, 0x1A, 0x59, 0x01, 0x29, 0x5E, 0x29, 0x24, 0x1B, 0x59, 0x02, 0x29, 0x45, 0x29, 0x22, 0x07, +/* 00001130 */ 0x03, 0x00, 0x59, 0x00, 0x02, 0xCE, 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2A, 0x00, +/* 00001140 */ 0x00, 0x00, 0x7A, 0x0C, 0x2A, 0x1C, 0x7A, 0x09, 0x2A, 0x1D, 0x7A, 0x09, 0x2A, 0x1E, 0x7A, 0x07, +/* 00001150 */ 0x2A, 0x1F, 0x59, 0x01, 0x2A, 0x59, 0x02, 0x0B, 0x1F, 0x03, 0x29, 0x29, 0x59, 0x03, 0x29, 0x1F, +/* 00001160 */ 0x04, 0xFF, 0x28, 0x45, 0x28, 0x23, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x01, 0x58, 0x01, 0x29, +/* 00001170 */ 0x5E, 0x29, 0x29, 0x20, 0x5E, 0x29, 0x29, 0x21, 0x5E, 0x29, 0x29, 0x22, 0x59, 0x01, 0x29, 0x59, +/* 00001180 */ 0x02, 0x0D, 0x45, 0x29, 0x22, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0xCE, 0x30, 0x00, 0x00, 0x00, +/* 00001190 */ 0x02, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x7A, 0x0E, 0x2A, 0x23, 0x7A, 0x09, 0x2A, 0x24, +/* 000011A0 */ 0x7A, 0x09, 0x2A, 0x25, 0x7A, 0x07, 0x2A, 0x26, 0x59, 0x01, 0x2A, 0x59, 0x02, 0x0B, 0x1F, 0x03, +/* 000011B0 */ 0x29, 0x29, 0x59, 0x03, 0x29, 0x1F, 0x04, 0xFF, 0x28, 0x45, 0x28, 0x23, 0x07, 0x04, 0x00, 0x59, +/* 000011C0 */ 0x00, 0x02, 0x01, 0x58, 0x01, 0x29, 0x5E, 0x29, 0x29, 0x27, 0x5E, 0x29, 0x29, 0x28, 0x5E, 0x29, +/* 000011D0 */ 0x29, 0x29, 0x59, 0x01, 0x29, 0x59, 0x02, 0x0F, 0x45, 0x29, 0x22, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 000011E0 */ 0x02, 0xCE, 0x48, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x7A, 0x04, +/* 000011F0 */ 0x2A, 0x2A, 0x7A, 0x09, 0x2A, 0x2B, 0x7A, 0x09, 0x2A, 0x2C, 0x7A, 0x07, 0x2A, 0x2D, 0x59, 0x01, +/* 00001200 */ 0x2A, 0x59, 0x02, 0x0B, 0x1F, 0x03, 0x29, 0x29, 0x59, 0x03, 0x29, 0x1F, 0x04, 0xFF, 0x28, 0x6C, +/* 00001210 */ 0x28, 0x21, 0x2E, 0x07, 0x03, 0x00, 0x59, 0x00, 0x21, 0x59, 0x01, 0x10, 0xD6, 0x02, 0x29, 0x59, +/* 00001220 */ 0x02, 0x29, 0x1F, 0x03, 0xFF, 0x28, 0x6C, 0x28, 0x21, 0x2F, 0x07, 0x03, 0x00, 0x59, 0x00, 0x21, +/* 00001230 */ 0x59, 0x01, 0x11, 0xD6, 0x03, 0x29, 0x59, 0x02, 0x29, 0x1F, 0x03, 0xFF, 0x28, 0x6C, 0x28, 0x21, +/* 00001240 */ 0x30, 0x07, 0x03, 0x00, 0x59, 0x00, 0x21, 0x59, 0x01, 0x12, 0xD6, 0x04, 0x29, 0x59, 0x02, 0x29, +/* 00001250 */ 0x1F, 0x03, 0xFF, 0x28, 0x6C, 0x28, 0x21, 0x31, 0x07, 0x03, 0x00, 0x59, 0x00, 0x21, 0x59, 0x01, +/* 00001260 */ 0x13, 0xD6, 0x05, 0x29, 0x59, 0x02, 0x29, 0x1F, 0x03, 0xFF, 0x28, 0x6C, 0x28, 0x21, 0x32, 0x07, +/* 00001270 */ 0x03, 0x00, 0x59, 0x00, 0x21, 0x59, 0x01, 0x14, 0xD6, 0x06, 0x29, 0x59, 0x02, 0x29, 0x1F, 0x03, +/* 00001280 */ 0xFF, 0x28, 0x6C, 0x28, 0x21, 0x33, 0x07, 0x03, 0x00, 0x59, 0x00, 0x21, 0x59, 0x01, 0x15, 0xD6, +/* 00001290 */ 0x07, 0x29, 0x59, 0x02, 0x29, 0x1F, 0x03, 0xFF, 0x28, 0x6C, 0x28, 0x21, 0x34, 0x07, 0x03, 0x00, +/* 000012A0 */ 0x59, 0x00, 0x21, 0x59, 0x01, 0x16, 0xD6, 0x08, 0x29, 0x59, 0x02, 0x29, 0x1F, 0x03, 0xFF, 0x28, +/* 000012B0 */ 0x6C, 0x28, 0x21, 0x35, 0x07, 0x03, 0x00, 0x59, 0x00, 0x21, 0x59, 0x01, 0x17, 0xD6, 0x09, 0x29, +/* 000012C0 */ 0x59, 0x02, 0x29, 0x1F, 0x03, 0xFF, 0x28, 0x6C, 0x28, 0x21, 0x36, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 000012D0 */ 0x21, 0x59, 0x01, 0x18, 0xD6, 0x0A, 0x29, 0x59, 0x02, 0x29, 0x1F, 0x03, 0xFF, 0x28, 0x6C, 0x28, +/* 000012E0 */ 0x21, 0x37, 0x07, 0x03, 0x00, 0x59, 0x00, 0x21, 0x59, 0x01, 0x19, 0xD6, 0x0B, 0x29, 0x59, 0x02, +/* 000012F0 */ 0x29, 0x1F, 0x03, 0xFF, 0x28, 0x6C, 0x28, 0x21, 0x38, 0x07, 0x03, 0x00, 0x59, 0x00, 0x21, 0x59, +/* 00001300 */ 0x01, 0x1A, 0xD6, 0x0C, 0x29, 0x59, 0x02, 0x29, 0x1F, 0x03, 0xFF, 0x28, 0x6C, 0x28, 0x21, 0x39, +/* 00001310 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x21, 0x59, 0x01, 0x1B, 0xD6, 0x0D, 0x29, 0x59, 0x02, 0x29, 0x1F, +/* 00001320 */ 0x03, 0xFF, 0x28, 0x6C, 0x28, 0x21, 0x3A, 0x07, 0x03, 0x00, 0x59, 0x00, 0x21, 0x59, 0x01, 0x1C, +/* 00001330 */ 0xD6, 0x0E, 0x29, 0x59, 0x02, 0x29, 0x1F, 0x03, 0xFF, 0x28, 0x6C, 0x28, 0x21, 0x3B, 0x07, 0x03, +/* 00001340 */ 0x00, 0x59, 0x00, 0x21, 0x59, 0x01, 0x1D, 0xD6, 0x0F, 0x29, 0x59, 0x02, 0x29, 0x1F, 0x03, 0xFF, +/* 00001350 */ 0x28, 0x6C, 0x28, 0x21, 0x3C, 0x07, 0x03, 0x00, 0x59, 0x00, 0x21, 0x59, 0x01, 0x1E, 0xD6, 0x10, +/* 00001360 */ 0x29, 0x59, 0x02, 0x29, 0x1F, 0x03, 0xFF, 0x28, 0x6C, 0x28, 0x21, 0x3D, 0x07, 0x03, 0x00, 0x59, +/* 00001370 */ 0x00, 0x21, 0x59, 0x01, 0x1F, 0xD6, 0x11, 0x29, 0x59, 0x02, 0x29, 0x1F, 0x03, 0xFF, 0x28, 0xA8, +/* 00001380 */ 0x00, 0x24, 0x00, 0x04, 0x60, 0x00, 0x48, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, +/* 00001390 */ 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, +/* 000013A0 */ 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, +/* 000013B0 */ 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x18, 0x00, +/* 000013C0 */ 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, +/* 000013D0 */ 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, +/* 000013E0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, +/* 000013F0 */ 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x59, 0xFE, 0xBE, 0x02, 0xFE, 0x8F, 0x02, 0xFE, 0x66, 0x01, +/* 00001400 */ 0xFE, 0x95, 0x02, 0xFE, 0x7E, 0x02, 0xFE, 0x7B, 0x02, 0xFE, 0xDB, 0x02, 0xFE, 0x24, 0x01, 0xFE, +/* 00001410 */ 0xB6, 0x02, 0xFE, 0xB6, 0x02, 0xFE, 0xB0, 0x02, 0xFE, 0xB0, 0x02, 0xFE, 0xB5, 0x02, 0xFE, 0xB5, +/* 00001420 */ 0x02, 0xFE, 0xB3, 0x02, 0xFE, 0xB3, 0x02, 0xFE, 0xBA, 0x02, 0xFE, 0xBA, 0x02, 0xFE, 0xDB, 0x02, +/* 00001430 */ 0xFE, 0x24, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, +/* 00001440 */ 0xDB, 0x02, 0xFE, 0x24, 0x01, 0xFE, 0x79, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, +/* 00001450 */ 0x01, 0xFE, 0x95, 0x01, 0xFE, 0xDB, 0x02, 0xFE, 0x24, 0x01, 0xFE, 0x07, 0x01, 0xFE, 0x97, 0x01, +/* 00001460 */ 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0xDB, 0x02, 0xFE, 0x24, 0x01, 0xFE, +/* 00001470 */ 0x07, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x7E, +/* 00001480 */ 0x02, 0xFE, 0x7F, 0x02, 0xFE, 0x7F, 0x02, 0xFE, 0x7F, 0x02, 0xFE, 0x7F, 0x02, 0xFE, 0x7E, 0x02, +/* 00001490 */ 0xFE, 0x7F, 0x02, 0xFE, 0x7E, 0x02, 0xFE, 0x7E, 0x02, 0xFE, 0x7F, 0x02, 0xFE, 0x7F, 0x02, 0xFE, +/* 000014A0 */ 0x7F, 0x02, 0xFE, 0x7F, 0x02, 0xFE, 0x7F, 0x02, 0xFE, 0x7F, 0x02, 0xFE, 0x7F, 0x02, 0xFE, 0xE2, +/* 000014B0 */ 0x01, 0x22, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x29, 0x00, 0x07, 0x00, 0x35, 0x00, 0x07, 0x00, +/* 000014C0 */ 0x55, 0x00, 0x07, 0x00, 0x22, 0x00, 0x07, 0x00, 0x45, 0x00, 0x17, 0x00, 0x89, 0x02, 0x11, 0x00, +/* 000014D0 */ 0x63, 0x00, 0x19, 0x00, 0x4F, 0x00, 0x0C, 0x00, 0x4C, 0x00, 0x0C, 0x00, 0x54, 0x00, 0x0C, 0x00, +/* 000014E0 */ 0x6C, 0x00, 0x0C, 0x00, 0x48, 0x00, 0x0C, 0x00, 0x67, 0x00, 0x56, 0x00, 0xF5, 0x07, 0x56, 0x00, +/* 000014F0 */ 0xC2, 0x00, 0x56, 0x00, 0xAE, 0x00, 0x56, 0x00, 0xB1, 0x00, 0x17, 0x00, 0xBB, 0x00, 0x17, 0x00, +/* 00001500 */ 0x4D, 0x01, 0x17, 0x00, 0x53, 0x01, 0x17, 0x00, 0x5B, 0x01, 0x17, 0x00, 0x1E, 0x05, 0x17, 0x00, +/* 00001510 */ 0xD0, 0x01, 0x17, 0x00, 0x6A, 0x03, 0x17, 0x00, 0x4F, 0x09, 0x17, 0x00, 0x8E, 0x0E, 0x17, 0x00, +/* 00001520 */ 0x08, 0x03, 0x17, 0x00, 0x99, 0x03, 0x17, 0x00, 0xFC, 0x04, 0x17, 0x00, 0x6C, 0x05, 0x17, 0x00, +/* 00001530 */ 0x72, 0x05, 0x17, 0x00, 0x9C, 0x05, 0x19, 0x00, 0x69, 0x0A, 0x00, 0xE2, 0x2C, 0x00, 0x00, 0x39, +/* 00001540 */ 0x2A, 0x00, 0x00, 0xE2, 0x29, 0x00, 0x00, 0x2B, 0x29, 0x00, 0x00, 0x74, 0x28, 0x00, 0x00, 0xBD, +/* 00001550 */ 0x27, 0x00, 0x00, 0x11, 0x26, 0x00, 0x00, 0xD2, 0x24, 0x00, 0x00, 0x20, 0x23, 0x00, 0x00, 0xB0, +/* 00001560 */ 0x21, 0x00, 0x00, 0xAE, 0x1F, 0x00, 0x00, 0x76, 0x1E, 0x00, 0x00, 0x44, 0x1D, 0x00, 0x00, 0xF3, +/* 00001570 */ 0x1B, 0x00, 0x00, 0x91, 0x1A, 0x00, 0x00, 0x2F, 0x19, 0x00, 0x00, 0xAF, 0x17, 0x00, 0x00, 0x83, +/* 00001580 */ 0x15, 0x00, 0x00, 0x7F, 0x3C, 0x02, 0xC2, 0x43, 0x40, 0x13, 0x00, 0xFE, 0xF4, 0x01, 0x28, 0xA2, +/* 00001590 */ 0x41, 0xB1, 0x00, 0x13, 0xFE, 0x2E, 0x55, 0xFE, 0x2E, 0x55, 0x0B, 0xFE, 0x00, 0x90, 0x03, 0x02, +/* 000015A0 */ 0xFE, 0x2E, 0x55, 0xFE, 0x42, 0x0A, 0xFE, 0x42, 0x0A, 0x0F, 0x0C, 0x16, 0x08, 0x6A, 0x5C, 0x21, +/* 000015B0 */ 0x02, 0x02, 0x08, 0x08, 0x08, 0x08, 0x01, 0x16, 0xC0, 0xE8, 0xFE, 0x01, 0x01, 0xFE, 0x4B, 0x01, +/* 000015C0 */ 0x07, 0x08, 0x06, 0xFE, 0xFD, 0x02, 0x06, 0xFE, 0xFE, 0x02, 0x05, 0xFE, 0x08, 0x03, 0x01, 0x00, +/* 000015D0 */ 0x06, 0xFE, 0x01, 0x03, 0x01, 0x01, 0x0C, 0x0B, 0xFE, 0x55, 0x01, 0xB2, 0x13, 0x58, 0x10, 0x4E, +/* 000015E0 */ 0x0E, 0x4E, 0x0F, 0x4E, 0x11, 0x4E, 0x12, 0x4E, 0x14, 0x4E, 0x15, 0x15, 0x05, 0x00, 0x0D, 0x03, +/* 000015F0 */ 0xA8, 0x17, 0x45, 0x0D, 0x17, 0x4E, 0x0E, 0x4E, 0x0F, 0x4E, 0x11, 0x4E, 0x12, 0x4E, 0x14, 0x4E, +/* 00001600 */ 0x15, 0x01, 0x58, 0x01, 0x19, 0x6C, 0x18, 0x19, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x19, 0x59, +/* 00001610 */ 0x01, 0x10, 0x59, 0x02, 0x06, 0x1F, 0x03, 0x18, 0x18, 0x45, 0x17, 0x18, 0x45, 0x19, 0x18, 0x0D, +/* 00001620 */ 0x05, 0x00, 0x19, 0x03, 0x01, 0x73, 0x01, 0x10, 0x16, 0x5E, 0x1A, 0x19, 0x01, 0x45, 0x0E, 0x1A, +/* 00001630 */ 0x5E, 0x1A, 0x19, 0x02, 0x45, 0x0F, 0x1A, 0x2A, 0x17, 0x0C, 0x15, 0x03, 0x00, 0x17, 0x08, 0x09, +/* 00001640 */ 0x15, 0x00, 0x01, 0x58, 0x01, 0x18, 0x6C, 0x17, 0x18, 0x03, 0x07, 0x02, 0x00, 0x59, 0x00, 0x18, +/* 00001650 */ 0x59, 0x01, 0x06, 0x1F, 0x02, 0xFF, 0x17, 0x14, 0x03, 0x00, 0x0F, 0x07, 0x09, 0x1F, 0x00, 0xA8, +/* 00001660 */ 0x17, 0x14, 0x03, 0x00, 0x0D, 0x17, 0x09, 0x15, 0x00, 0x01, 0x58, 0x01, 0x18, 0x6C, 0x17, 0x18, +/* 00001670 */ 0x04, 0x07, 0x02, 0x00, 0x59, 0x00, 0x18, 0x59, 0x01, 0x06, 0x1F, 0x02, 0xFF, 0x17, 0x45, 0x11, +/* 00001680 */ 0x07, 0xA8, 0x17, 0x45, 0x12, 0x17, 0xA6, 0x17, 0x13, 0x05, 0x11, 0x03, 0x00, 0x17, 0x09, 0x09, +/* 00001690 */ 0x06, 0x00, 0x45, 0x12, 0x0D, 0x09, 0x44, 0x00, 0x45, 0x14, 0x0A, 0xEC, 0x00, 0x0F, 0x22, 0x00, +/* 000016A0 */ 0x14, 0x12, 0x03, 0x00, 0x11, 0x0F, 0x09, 0x1A, 0x00, 0xBC, 0x17, 0x11, 0x0E, 0x00, 0x00, 0x0E, +/* 000016B0 */ 0x0A, 0x00, 0x17, 0x45, 0x14, 0x0B, 0x97, 0x17, 0x0E, 0x11, 0x45, 0x12, 0x17, 0x26, 0x11, 0x11, +/* 000016C0 */ 0x09, 0xD8, 0xFF, 0x0F, 0x15, 0x00, 0x14, 0x01, 0x58, 0x01, 0x18, 0x6C, 0x17, 0x18, 0x06, 0x07, +/* 000016D0 */ 0x02, 0x00, 0x59, 0x00, 0x18, 0x59, 0x01, 0x06, 0x1F, 0x02, 0xFF, 0x17, 0xEC, 0x01, 0x12, 0x03, +/* 000016E0 */ 0x00, 0x11, 0x0F, 0x09, 0x40, 0x00, 0xBC, 0x17, 0x11, 0x0E, 0x01, 0x00, 0x0E, 0x30, 0x00, 0x17, +/* 000016F0 */ 0x97, 0x17, 0x0E, 0x11, 0x45, 0x15, 0x17, 0x01, 0x58, 0x01, 0x18, 0x6C, 0x17, 0x18, 0x07, 0x07, +/* 00001700 */ 0x07, 0x00, 0x59, 0x00, 0x18, 0x59, 0x01, 0x0C, 0xA8, 0x19, 0x59, 0x02, 0x19, 0x59, 0x03, 0x12, +/* 00001710 */ 0x59, 0x04, 0x15, 0x59, 0x05, 0x11, 0x59, 0x06, 0x0E, 0x1F, 0x07, 0x17, 0x17, 0x45, 0x12, 0x17, +/* 00001720 */ 0x26, 0x11, 0x11, 0x09, 0xB6, 0xFF, 0x45, 0x00, 0x12, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, +/* 00001730 */ 0xFE, 0xE9, 0x02, 0xFE, 0xFD, 0x02, 0xFE, 0xFE, 0x02, 0xFE, 0xBA, 0x02, 0xFE, 0xB5, 0x02, 0xD1, +/* 00001740 */ 0xFE, 0xB5, 0x02, 0xFE, 0x8B, 0x02, 0xFE, 0x44, 0x55, 0x19, 0x10, 0x00, 0x00, 0x00, 0x16, 0x00, +/* 00001750 */ 0xBC, 0x00, 0x36, 0x00, 0xA8, 0x00, 0x0B, 0x00, 0x34, 0x00, 0x15, 0x00, 0xB5, 0x00, 0x12, 0x00, +/* 00001760 */ 0x3B, 0x00, 0x15, 0x00, 0xA3, 0x00, 0x03, 0x00, 0x13, 0x00, 0x05, 0x00, 0x7C, 0x00, 0x0C, 0x00, +/* 00001770 */ 0x78, 0x00, 0x06, 0x00, 0x92, 0x00, 0x05, 0x00, 0x63, 0x00, 0x0C, 0x00, 0xEC, 0x00, 0x0A, 0x00, +/* 00001780 */ 0x22, 0x00, 0x03, 0x00, 0x25, 0x00, 0x07, 0x00, 0x59, 0x00, 0x06, 0x00, 0x60, 0x00, 0x04, 0x00, +/* 00001790 */ 0x21, 0x00, 0x17, 0x00, 0x9A, 0x00, 0x08, 0x00, 0x9A, 0x00, 0x0A, 0x00, 0x4C, 0x00, 0x07, 0x00, +/* 000017A0 */ 0x83, 0x00, 0x29, 0x00, 0xA6, 0x00, 0x06, 0x00, 0x36, 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, 0x7F, +/* 000017B0 */ 0x3C, 0x00, 0xC2, 0x43, 0x40, 0x13, 0x00, 0xFE, 0xC4, 0x01, 0x2A, 0xA2, 0x41, 0xD1, 0x00, 0x12, +/* 000017C0 */ 0xFE, 0x94, 0x4F, 0xFE, 0x94, 0x4F, 0x09, 0xFE, 0x00, 0x90, 0x03, 0x02, 0xFE, 0x94, 0x4F, 0xFE, +/* 000017D0 */ 0x6E, 0x05, 0xFE, 0x6E, 0x05, 0x0D, 0x0A, 0x12, 0x04, 0x46, 0x38, 0x0E, 0x01, 0x04, 0x04, 0x04, +/* 000017E0 */ 0x04, 0x01, 0x12, 0xA1, 0xD3, 0x08, 0x06, 0xFE, 0xFD, 0x02, 0x06, 0xFE, 0xFE, 0x02, 0x05, 0xFE, +/* 000017F0 */ 0x07, 0x03, 0x01, 0x00, 0x0C, 0x0B, 0x01, 0x01, 0xDD, 0x58, 0x0E, 0x4E, 0x0C, 0x4E, 0x0D, 0x4E, +/* 00001800 */ 0x0F, 0x4E, 0x10, 0x4E, 0x11, 0x15, 0x05, 0x00, 0x0B, 0x02, 0xA8, 0x13, 0x45, 0x0B, 0x13, 0x4E, +/* 00001810 */ 0x0C, 0x4E, 0x0D, 0x4E, 0x0F, 0x4E, 0x10, 0x4E, 0x11, 0x01, 0x58, 0x01, 0x15, 0x6C, 0x14, 0x15, +/* 00001820 */ 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x15, 0x59, 0x01, 0x0E, 0x59, 0x02, 0x05, 0x1F, 0x03, 0x14, +/* 00001830 */ 0x14, 0x45, 0x13, 0x14, 0x45, 0x15, 0x14, 0x0D, 0x05, 0x00, 0x15, 0x02, 0x01, 0x73, 0x01, 0x10, +/* 00001840 */ 0x16, 0x5E, 0x16, 0x15, 0x01, 0x45, 0x0C, 0x16, 0x5E, 0x16, 0x15, 0x02, 0x45, 0x0D, 0x16, 0x14, +/* 00001850 */ 0x03, 0x00, 0x0D, 0x06, 0x09, 0x06, 0x00, 0x45, 0x00, 0x07, 0x09, 0x77, 0x00, 0x01, 0x58, 0x01, +/* 00001860 */ 0x14, 0x6C, 0x13, 0x14, 0x03, 0x07, 0x02, 0x00, 0x59, 0x00, 0x14, 0x59, 0x01, 0x0B, 0x1F, 0x02, +/* 00001870 */ 0x13, 0x13, 0x45, 0x0F, 0x13, 0xA8, 0x13, 0x45, 0x10, 0x13, 0x10, 0x03, 0x00, 0x0F, 0x06, 0x09, +/* 00001880 */ 0x06, 0x00, 0x45, 0x10, 0x0F, 0x09, 0x12, 0x00, 0x2D, 0x13, 0x0D, 0x0F, 0x45, 0x10, 0x13, 0x12, +/* 00001890 */ 0x03, 0x00, 0x10, 0x06, 0x09, 0x03, 0x00, 0x45, 0x10, 0x06, 0xEC, 0x00, 0x12, 0x03, 0x00, 0x10, +/* 000018A0 */ 0x0D, 0x09, 0x28, 0x00, 0x97, 0x13, 0x0C, 0x10, 0x45, 0x11, 0x13, 0x14, 0x10, 0x00, 0x0A, 0x11, +/* 000018B0 */ 0x15, 0x03, 0x00, 0x0A, 0x0A, 0x09, 0x0E, 0x00, 0x15, 0x03, 0x00, 0x11, 0x11, 0x09, 0x06, 0x00, +/* 000018C0 */ 0x45, 0x00, 0x08, 0x09, 0x0E, 0x00, 0x26, 0x10, 0x10, 0x09, 0xCE, 0xFF, 0x45, 0x00, 0x07, 0x09, +/* 000018D0 */ 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xE9, 0x02, 0xFE, 0xFD, 0x02, 0xFE, 0xFE, 0x02, 0xFE, +/* 000018E0 */ 0x81, 0x02, 0xFE, 0xAD, 0x4F, 0x12, 0x0C, 0x00, 0x00, 0x00, 0x14, 0x00, 0xBB, 0x00, 0x36, 0x00, +/* 000018F0 */ 0x83, 0x00, 0x08, 0x00, 0x1D, 0x00, 0x06, 0x00, 0x86, 0x00, 0x18, 0x00, 0x36, 0x00, 0x05, 0x00, +/* 00001900 */ 0x98, 0x00, 0x08, 0x00, 0x1A, 0x00, 0x06, 0x00, 0x2D, 0x00, 0x07, 0x00, 0x1A, 0x00, 0x08, 0x00, +/* 00001910 */ 0x1D, 0x00, 0x05, 0x00, 0x4F, 0x00, 0x08, 0x00, 0x5C, 0x00, 0x07, 0x00, 0x6F, 0x00, 0x15, 0x00, +/* 00001920 */ 0x85, 0x00, 0x06, 0x00, 0x46, 0x00, 0x06, 0x00, 0x30, 0x00, 0x08, 0x00, 0x12, 0x00, 0x00, 0x7F, +/* 00001930 */ 0x3C, 0x02, 0xC2, 0x43, 0x40, 0x13, 0x00, 0xFE, 0x9F, 0x01, 0x27, 0xA2, 0x41, 0xD1, 0x00, 0x11, +/* 00001940 */ 0xFE, 0x1F, 0x4A, 0xFE, 0x1F, 0x4A, 0x09, 0xFE, 0x00, 0x90, 0x03, 0x02, 0xFE, 0x1F, 0x4A, 0xFE, +/* 00001950 */ 0x47, 0x05, 0xFE, 0x47, 0x05, 0x0C, 0x0B, 0x12, 0x07, 0x40, 0x37, 0x16, 0x01, 0x01, 0x05, 0x05, +/* 00001960 */ 0x05, 0x05, 0x01, 0x12, 0x75, 0xC1, 0x08, 0x06, 0xFE, 0xFD, 0x02, 0x06, 0xFE, 0xFE, 0x02, 0x05, +/* 00001970 */ 0xFE, 0x06, 0x03, 0x01, 0x00, 0x06, 0xFE, 0x01, 0x03, 0x0C, 0x01, 0x01, 0x0B, 0xCB, 0x58, 0x0F, +/* 00001980 */ 0x4E, 0x0D, 0x4E, 0x0E, 0x4E, 0x10, 0x4E, 0x11, 0x15, 0x05, 0x00, 0x0C, 0x02, 0xA8, 0x13, 0x45, +/* 00001990 */ 0x0C, 0x13, 0x4E, 0x0D, 0x4E, 0x0E, 0x4E, 0x10, 0x4E, 0x11, 0x01, 0x58, 0x01, 0x15, 0x6C, 0x14, +/* 000019A0 */ 0x15, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x15, 0x59, 0x01, 0x0F, 0x59, 0x02, 0x05, 0x1F, 0x03, +/* 000019B0 */ 0x14, 0x14, 0x45, 0x13, 0x14, 0x45, 0x15, 0x14, 0x0D, 0x05, 0x00, 0x15, 0x02, 0x01, 0x73, 0x01, +/* 000019C0 */ 0x10, 0x16, 0x5E, 0x16, 0x15, 0x01, 0x45, 0x0D, 0x16, 0x5E, 0x16, 0x15, 0x02, 0x45, 0x0E, 0x16, +/* 000019D0 */ 0x2A, 0x13, 0x0B, 0x15, 0x03, 0x00, 0x13, 0x07, 0x09, 0x15, 0x00, 0x01, 0x58, 0x01, 0x14, 0x6C, +/* 000019E0 */ 0x13, 0x14, 0x03, 0x07, 0x02, 0x00, 0x59, 0x00, 0x14, 0x59, 0x01, 0x05, 0x1F, 0x02, 0xFF, 0x13, +/* 000019F0 */ 0x45, 0x10, 0x06, 0xEC, 0x00, 0x12, 0x03, 0x00, 0x10, 0x0E, 0x09, 0x42, 0x00, 0xBC, 0x13, 0x10, +/* 00001A00 */ 0x0D, 0x00, 0x00, 0x0E, 0x32, 0x00, 0x13, 0x97, 0x13, 0x0D, 0x10, 0x45, 0x11, 0x13, 0x01, 0x58, +/* 00001A10 */ 0x01, 0x14, 0x6C, 0x13, 0x14, 0x04, 0x07, 0x06, 0x00, 0x59, 0x00, 0x14, 0x59, 0x01, 0x0B, 0x59, +/* 00001A20 */ 0x02, 0x0C, 0x59, 0x03, 0x11, 0x59, 0x04, 0x10, 0x59, 0x05, 0x0D, 0x1F, 0x06, 0x13, 0x13, 0x0F, +/* 00001A30 */ 0x06, 0x00, 0x13, 0x45, 0x00, 0x08, 0x09, 0x0E, 0x00, 0x26, 0x10, 0x10, 0x09, 0xB4, 0xFF, 0x45, +/* 00001A40 */ 0x00, 0x0A, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xE9, 0x02, 0xFE, 0xFD, 0x02, 0xFE, +/* 00001A50 */ 0xFE, 0x02, 0xFE, 0xBA, 0x02, 0xFE, 0x8B, 0x02, 0xFE, 0x35, 0x4A, 0x0D, 0x0A, 0x00, 0x00, 0x00, +/* 00001A60 */ 0x12, 0x00, 0xBE, 0x00, 0x36, 0x00, 0xA7, 0x00, 0x0B, 0x00, 0x34, 0x00, 0x15, 0x00, 0xC2, 0x00, +/* 00001A70 */ 0x05, 0x00, 0x3B, 0x00, 0x08, 0x00, 0x9A, 0x00, 0x0A, 0x00, 0x4C, 0x00, 0x07, 0x00, 0xB0, 0x00, +/* 00001A80 */ 0x25, 0x00, 0x6B, 0x00, 0x06, 0x00, 0x59, 0x00, 0x06, 0x00, 0x2F, 0x00, 0x08, 0x00, 0x11, 0x00, +/* 00001A90 */ 0x00, 0x7F, 0x3C, 0x02, 0xC2, 0x43, 0x40, 0x13, 0x00, 0xFE, 0x7A, 0x01, 0x26, 0xA2, 0x41, 0xD1, +/* 00001AA0 */ 0x00, 0x10, 0xFE, 0xB2, 0x44, 0xFE, 0xB2, 0x44, 0x09, 0xFE, 0x00, 0x90, 0x03, 0x02, 0xFE, 0xB2, +/* 00001AB0 */ 0x44, 0xFE, 0x42, 0x05, 0xFE, 0x42, 0x05, 0x0C, 0x0B, 0x12, 0x07, 0x40, 0x37, 0x16, 0x01, 0x01, +/* 00001AC0 */ 0x05, 0x05, 0x05, 0x05, 0x01, 0x12, 0x75, 0xC1, 0x08, 0x06, 0xFE, 0xFD, 0x02, 0x06, 0xFE, 0xFE, +/* 00001AD0 */ 0x02, 0x05, 0xFE, 0x05, 0x03, 0x01, 0x00, 0x06, 0xFE, 0x01, 0x03, 0x0B, 0x01, 0x01, 0x0C, 0xCB, +/* 00001AE0 */ 0x58, 0x0F, 0x4E, 0x0D, 0x4E, 0x0E, 0x4E, 0x10, 0x4E, 0x11, 0x15, 0x05, 0x00, 0x0C, 0x02, 0xA8, +/* 00001AF0 */ 0x13, 0x45, 0x0C, 0x13, 0x4E, 0x0D, 0x4E, 0x0E, 0x4E, 0x10, 0x4E, 0x11, 0x01, 0x58, 0x01, 0x15, +/* 00001B00 */ 0x6C, 0x14, 0x15, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x15, 0x59, 0x01, 0x0F, 0x59, 0x02, 0x05, +/* 00001B10 */ 0x1F, 0x03, 0x14, 0x14, 0x45, 0x13, 0x14, 0x45, 0x15, 0x14, 0x0D, 0x05, 0x00, 0x15, 0x02, 0x01, +/* 00001B20 */ 0x73, 0x01, 0x10, 0x16, 0x5E, 0x16, 0x15, 0x01, 0x45, 0x0D, 0x16, 0x5E, 0x16, 0x15, 0x02, 0x45, +/* 00001B30 */ 0x0E, 0x16, 0x2A, 0x13, 0x0B, 0x15, 0x03, 0x00, 0x13, 0x07, 0x09, 0x15, 0x00, 0x01, 0x58, 0x01, +/* 00001B40 */ 0x14, 0x6C, 0x13, 0x14, 0x03, 0x07, 0x02, 0x00, 0x59, 0x00, 0x14, 0x59, 0x01, 0x05, 0x1F, 0x02, +/* 00001B50 */ 0xFF, 0x13, 0x45, 0x10, 0x06, 0xEC, 0x00, 0x12, 0x03, 0x00, 0x10, 0x0E, 0x09, 0x42, 0x00, 0xBC, +/* 00001B60 */ 0x13, 0x10, 0x0D, 0x00, 0x00, 0x0E, 0x32, 0x00, 0x13, 0x97, 0x13, 0x0D, 0x10, 0x45, 0x11, 0x13, +/* 00001B70 */ 0x01, 0x58, 0x01, 0x14, 0x6C, 0x13, 0x14, 0x04, 0x07, 0x06, 0x00, 0x59, 0x00, 0x14, 0x59, 0x01, +/* 00001B80 */ 0x0B, 0x59, 0x02, 0x0C, 0x59, 0x03, 0x11, 0x59, 0x04, 0x10, 0x59, 0x05, 0x0D, 0x1F, 0x06, 0x13, +/* 00001B90 */ 0x13, 0x0E, 0x06, 0x00, 0x13, 0x45, 0x00, 0x08, 0x09, 0x0E, 0x00, 0x26, 0x10, 0x10, 0x09, 0xB4, +/* 00001BA0 */ 0xFF, 0x45, 0x00, 0x0A, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xE9, 0x02, 0xFE, 0xFD, +/* 00001BB0 */ 0x02, 0xFE, 0xFE, 0x02, 0xFE, 0xBA, 0x02, 0xFE, 0x8B, 0x02, 0xFE, 0xC8, 0x44, 0x0D, 0x0A, 0x00, +/* 00001BC0 */ 0x00, 0x00, 0x12, 0x00, 0xBD, 0x00, 0x36, 0x00, 0xA6, 0x00, 0x0B, 0x00, 0x34, 0x00, 0x15, 0x00, +/* 00001BD0 */ 0xC1, 0x00, 0x05, 0x00, 0x3B, 0x00, 0x08, 0x00, 0x9A, 0x00, 0x0A, 0x00, 0x4C, 0x00, 0x07, 0x00, +/* 00001BE0 */ 0xAE, 0x00, 0x25, 0x00, 0x6A, 0x00, 0x06, 0x00, 0x58, 0x00, 0x06, 0x00, 0x30, 0x00, 0x08, 0x00, +/* 00001BF0 */ 0x12, 0x00, 0x00, 0x7F, 0x3C, 0x02, 0xC2, 0x43, 0x40, 0x13, 0x00, 0xFE, 0x58, 0x01, 0x29, 0xA2, +/* 00001C00 */ 0x41, 0xD1, 0x00, 0x0F, 0xFE, 0xB9, 0x3F, 0xFE, 0xB9, 0x3F, 0x09, 0xFE, 0x00, 0x90, 0x03, 0x02, +/* 00001C10 */ 0xFE, 0xB9, 0x3F, 0xFE, 0xCF, 0x04, 0xFE, 0xCF, 0x04, 0x0C, 0x09, 0x10, 0x07, 0x3D, 0x36, 0x13, +/* 00001C20 */ 0x01, 0x01, 0x05, 0x05, 0x05, 0x05, 0x01, 0x10, 0x75, 0xB7, 0x08, 0x06, 0xFE, 0xFD, 0x02, 0x06, +/* 00001C30 */ 0xFE, 0xFE, 0x02, 0x05, 0xFE, 0x04, 0x03, 0x01, 0x00, 0x06, 0xFE, 0x01, 0x03, 0x01, 0x01, 0xC0, +/* 00001C40 */ 0x58, 0x0D, 0x4E, 0x0B, 0x4E, 0x0C, 0x4E, 0x0E, 0x4E, 0x0F, 0x15, 0x05, 0x00, 0x0A, 0x02, 0xA8, +/* 00001C50 */ 0x11, 0x45, 0x0A, 0x11, 0x4E, 0x0B, 0x4E, 0x0C, 0x4E, 0x0E, 0x4E, 0x0F, 0x01, 0x58, 0x01, 0x13, +/* 00001C60 */ 0x6C, 0x12, 0x13, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x13, 0x59, 0x01, 0x0D, 0x59, 0x02, 0x05, +/* 00001C70 */ 0x1F, 0x03, 0x12, 0x12, 0x45, 0x11, 0x12, 0x45, 0x13, 0x12, 0x0D, 0x05, 0x00, 0x13, 0x02, 0x01, +/* 00001C80 */ 0x73, 0x01, 0x10, 0x16, 0x5E, 0x14, 0x13, 0x01, 0x45, 0x0B, 0x14, 0x5E, 0x14, 0x13, 0x02, 0x45, +/* 00001C90 */ 0x0C, 0x14, 0x2A, 0x11, 0x09, 0x15, 0x03, 0x00, 0x11, 0x07, 0x09, 0x15, 0x00, 0x01, 0x58, 0x01, +/* 00001CA0 */ 0x12, 0x6C, 0x11, 0x12, 0x03, 0x07, 0x02, 0x00, 0x59, 0x00, 0x12, 0x59, 0x01, 0x05, 0x1F, 0x02, +/* 00001CB0 */ 0xFF, 0x11, 0x45, 0x0E, 0x06, 0xEC, 0x00, 0x12, 0x03, 0x00, 0x0E, 0x0C, 0x09, 0x38, 0x00, 0xBC, +/* 00001CC0 */ 0x11, 0x0E, 0x0B, 0x00, 0x00, 0x0E, 0x28, 0x00, 0x11, 0x97, 0x11, 0x0B, 0x0E, 0x45, 0x0F, 0x11, +/* 00001CD0 */ 0x01, 0x58, 0x01, 0x12, 0x6C, 0x11, 0x12, 0x04, 0x07, 0x06, 0x00, 0x59, 0x00, 0x12, 0x59, 0x01, +/* 00001CE0 */ 0x09, 0x59, 0x02, 0x0A, 0x59, 0x03, 0x0F, 0x59, 0x04, 0x0E, 0x59, 0x05, 0x0B, 0x1F, 0x06, 0xFF, +/* 00001CF0 */ 0x11, 0x26, 0x0E, 0x0E, 0x09, 0xBE, 0xFF, 0xA8, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, +/* 00001D00 */ 0xFE, 0xE9, 0x02, 0xFE, 0xFD, 0x02, 0xFE, 0xFE, 0x02, 0xFE, 0xBA, 0x02, 0xFE, 0x8B, 0x02, 0xFE, +/* 00001D10 */ 0xCF, 0x3F, 0x0C, 0x0A, 0x00, 0x00, 0x00, 0x12, 0x00, 0xB8, 0x00, 0x36, 0x00, 0xB1, 0x00, 0x0B, +/* 00001D20 */ 0x00, 0x34, 0x00, 0x15, 0x00, 0xC4, 0x00, 0x05, 0x00, 0x3B, 0x00, 0x08, 0x00, 0x9A, 0x00, 0x0A, +/* 00001D30 */ 0x00, 0x4C, 0x00, 0x07, 0x00, 0x63, 0x00, 0x21, 0x00, 0x89, 0x00, 0x06, 0x00, 0x34, 0x00, 0x07, +/* 00001D40 */ 0x00, 0x16, 0x00, 0x00, 0x7F, 0x1C, 0x00, 0xC0, 0x03, 0x00, 0x03, 0x00, 0xFE, 0x46, 0x01, 0x29, +/* 00001D50 */ 0xA2, 0x41, 0xD1, 0x00, 0x0E, 0xFE, 0x20, 0x3C, 0xFE, 0x20, 0x3C, 0x09, 0xFE, 0x00, 0x90, 0x03, +/* 00001D60 */ 0x02, 0xFE, 0x20, 0x3C, 0xFE, 0x6C, 0x03, 0xFE, 0x6C, 0x03, 0x0A, 0x08, 0x0E, 0x08, 0x3A, 0x33, +/* 00001D70 */ 0x06, 0x06, 0x06, 0x06, 0x08, 0x06, 0xFE, 0xFD, 0x02, 0x06, 0xFE, 0xFE, 0x02, 0x05, 0xFE, 0x03, +/* 00001D80 */ 0x03, 0x01, 0x00, 0x06, 0xFE, 0x01, 0x03, 0xB7, 0x58, 0x0C, 0x4E, 0x0A, 0x4E, 0x0B, 0x4E, 0x0D, +/* 00001D90 */ 0x15, 0x05, 0x00, 0x09, 0x02, 0xA8, 0x0E, 0x45, 0x09, 0x0E, 0x4E, 0x0A, 0x4E, 0x0B, 0x4E, 0x0D, +/* 00001DA0 */ 0x01, 0x58, 0x01, 0x10, 0x6C, 0x0F, 0x10, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x10, 0x59, 0x01, +/* 00001DB0 */ 0x0C, 0x59, 0x02, 0x05, 0x1F, 0x03, 0x0F, 0x0F, 0x45, 0x0E, 0x0F, 0x45, 0x10, 0x0F, 0x0D, 0x05, +/* 00001DC0 */ 0x00, 0x10, 0x02, 0x01, 0x73, 0x01, 0x10, 0x16, 0x5E, 0x11, 0x10, 0x01, 0x45, 0x0A, 0x11, 0x5E, +/* 00001DD0 */ 0x11, 0x10, 0x02, 0x45, 0x0B, 0x11, 0x2A, 0x0E, 0x08, 0x15, 0x03, 0x00, 0x0E, 0x07, 0x09, 0x15, +/* 00001DE0 */ 0x00, 0x01, 0x58, 0x01, 0x0F, 0x6C, 0x0E, 0x0F, 0x03, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0F, 0x59, +/* 00001DF0 */ 0x01, 0x05, 0x1F, 0x02, 0xFF, 0x0E, 0x01, 0x58, 0x01, 0x0F, 0x6C, 0x0E, 0x0F, 0x04, 0x07, 0x03, +/* 00001E00 */ 0x00, 0x59, 0x00, 0x0F, 0x59, 0x01, 0x0A, 0x59, 0x02, 0x06, 0x1F, 0x03, 0x0E, 0x0E, 0x45, 0x0D, +/* 00001E10 */ 0x0E, 0x01, 0x58, 0x01, 0x0F, 0x6C, 0x0E, 0x0F, 0x05, 0x07, 0x07, 0x00, 0x59, 0x00, 0x0F, 0x59, +/* 00001E20 */ 0x01, 0x0D, 0x59, 0x02, 0x0A, 0x59, 0x03, 0x0B, 0x59, 0x04, 0x06, 0x59, 0x05, 0x08, 0x59, 0x06, +/* 00001E30 */ 0x09, 0x1F, 0x07, 0xFF, 0x0E, 0x45, 0x00, 0x0D, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, +/* 00001E40 */ 0xE9, 0x02, 0xFE, 0xFD, 0x02, 0xFE, 0xFE, 0x02, 0xFE, 0xBA, 0x02, 0xFE, 0x82, 0x02, 0xFE, 0xEC, +/* 00001E50 */ 0x02, 0xFE, 0x3A, 0x3C, 0x08, 0x08, 0x00, 0x00, 0x00, 0x10, 0x00, 0x8B, 0x00, 0x36, 0x00, 0xAE, +/* 00001E60 */ 0x00, 0x0B, 0x00, 0x38, 0x00, 0x15, 0x00, 0xE1, 0x00, 0x1B, 0x00, 0x83, 0x00, 0x24, 0x00, 0x6E, +/* 00001E70 */ 0x00, 0x08, 0x00, 0x0E, 0x00, 0x00, 0x7F, 0x1C, 0x00, 0xC0, 0x03, 0x00, 0x03, 0x00, 0xFE, 0x35, +/* 00001E80 */ 0x01, 0x26, 0xA2, 0x41, 0xD1, 0x00, 0x0D, 0xFE, 0x15, 0x39, 0xFE, 0x15, 0x39, 0x09, 0xFE, 0x00, +/* 00001E90 */ 0x90, 0x02, 0x01, 0xFE, 0x15, 0x39, 0xFE, 0xDE, 0x02, 0xFE, 0xDE, 0x02, 0x0A, 0x08, 0x0E, 0x07, +/* 00001EA0 */ 0x3F, 0x36, 0x06, 0x06, 0x06, 0x06, 0x08, 0x06, 0xFE, 0xFD, 0x02, 0x06, 0xFE, 0xFE, 0x02, 0x05, +/* 00001EB0 */ 0xFE, 0x02, 0x03, 0x01, 0x00, 0x01, 0x01, 0xC3, 0x58, 0x0B, 0x4E, 0x09, 0x4E, 0x0A, 0x4E, 0x0C, +/* 00001EC0 */ 0x4E, 0x0D, 0x15, 0x05, 0x00, 0x08, 0x02, 0xA8, 0x0E, 0x45, 0x08, 0x0E, 0x4E, 0x09, 0x4E, 0x0A, +/* 00001ED0 */ 0x4E, 0x0C, 0x4E, 0x0D, 0x01, 0x58, 0x01, 0x10, 0x6C, 0x0F, 0x10, 0x00, 0x07, 0x03, 0x00, 0x59, +/* 00001EE0 */ 0x00, 0x10, 0x59, 0x01, 0x0B, 0x59, 0x02, 0x05, 0x1F, 0x03, 0x0F, 0x0F, 0x45, 0x0E, 0x0F, 0x45, +/* 00001EF0 */ 0x10, 0x0F, 0x0D, 0x05, 0x00, 0x10, 0x02, 0x01, 0x73, 0x01, 0x10, 0x16, 0x5E, 0x11, 0x10, 0x01, +/* 00001F00 */ 0x45, 0x09, 0x11, 0x5E, 0x11, 0x10, 0x02, 0x45, 0x0A, 0x11, 0xA8, 0x0E, 0x15, 0x03, 0x00, 0x08, +/* 00001F10 */ 0x0E, 0x09, 0x1B, 0x00, 0x01, 0x58, 0x01, 0x10, 0x6C, 0x0F, 0x10, 0x03, 0x07, 0x02, 0x00, 0x59, +/* 00001F20 */ 0x00, 0x10, 0x59, 0x01, 0x08, 0x1F, 0x02, 0x0F, 0x0F, 0x45, 0x0E, 0x0F, 0x09, 0x03, 0x00, 0x46, +/* 00001F30 */ 0x0E, 0x07, 0x45, 0x0C, 0x0E, 0x01, 0x58, 0x01, 0x0F, 0x6C, 0x0E, 0x0F, 0x04, 0x07, 0x03, 0x00, +/* 00001F40 */ 0x59, 0x00, 0x0F, 0x59, 0x01, 0x09, 0x59, 0x02, 0x06, 0x1F, 0x03, 0x0E, 0x0E, 0x45, 0x0D, 0x0E, +/* 00001F50 */ 0x01, 0x58, 0x01, 0x0F, 0x6C, 0x0E, 0x0F, 0x05, 0x07, 0x06, 0x00, 0x59, 0x00, 0x0F, 0x59, 0x01, +/* 00001F60 */ 0x0D, 0x59, 0x02, 0x09, 0x59, 0x03, 0x0A, 0x59, 0x04, 0x06, 0x59, 0x05, 0x0C, 0x1F, 0x06, 0xFF, +/* 00001F70 */ 0x0E, 0x45, 0x00, 0x0D, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xE9, 0x02, 0xFE, 0xFD, +/* 00001F80 */ 0x02, 0xFE, 0xFE, 0x02, 0xFE, 0x81, 0x02, 0xFE, 0x82, 0x02, 0xFE, 0xEB, 0x02, 0xFE, 0x1F, 0x39, +/* 00001F90 */ 0x07, 0x0A, 0x00, 0x00, 0x00, 0x12, 0x00, 0x89, 0x00, 0x36, 0x00, 0xD9, 0x00, 0x2B, 0x00, 0x87, +/* 00001FA0 */ 0x00, 0x1B, 0x00, 0x83, 0x00, 0x21, 0x00, 0x59, 0x00, 0x08, 0x00, 0x0E, 0x00, 0x00, 0x7F, 0x3C, +/* 00001FB0 */ 0x02, 0xC2, 0x03, 0x00, 0x13, 0x00, 0xF4, 0x45, 0xA2, 0x41, 0xD1, 0x00, 0x0C, 0xFE, 0xA6, 0x2A, +/* 00001FC0 */ 0xFE, 0xA6, 0x2A, 0x01, 0xFE, 0x00, 0x90, 0x07, 0x07, 0xFE, 0xA6, 0x2A, 0xFE, 0x45, 0x0E, 0xFE, +/* 00001FD0 */ 0x45, 0x0E, 0x0E, 0x06, 0x11, 0x07, 0x60, 0x57, 0x4E, 0x02, 0x02, 0x08, 0x08, 0x08, 0x08, 0x1F, +/* 00001FE0 */ 0xFE, 0x30, 0x01, 0x93, 0xEC, 0x01, 0x00, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x43, +/* 00001FF0 */ 0x05, 0xFE, 0x03, 0x03, 0x01, 0x01, 0xFE, 0x3A, 0x01, 0x4E, 0x0C, 0x4E, 0x0D, 0x4E, 0x0E, 0x4E, +/* 00002000 */ 0x0F, 0x4E, 0x10, 0x45, 0x0C, 0x09, 0x45, 0x0D, 0x02, 0xA8, 0x11, 0x45, 0x0E, 0x11, 0xA8, 0x11, +/* 00002010 */ 0x45, 0x0F, 0x11, 0xA8, 0x11, 0x45, 0x10, 0x11, 0xEC, 0x00, 0x12, 0x03, 0x00, 0x0D, 0x08, 0x09, +/* 00002020 */ 0x07, 0x01, 0xBC, 0x11, 0x0D, 0x07, 0x00, 0x00, 0x0E, 0xF7, 0x00, 0x11, 0x01, 0x58, 0x01, 0x12, +/* 00002030 */ 0x6C, 0x11, 0x12, 0x00, 0x07, 0x06, 0x00, 0x59, 0x00, 0x12, 0x59, 0x01, 0x0A, 0x59, 0x02, 0x0B, +/* 00002040 */ 0x97, 0x13, 0x07, 0x0D, 0x59, 0x03, 0x13, 0x59, 0x04, 0x0D, 0x59, 0x05, 0x07, 0x1F, 0x06, 0x11, +/* 00002050 */ 0x11, 0x45, 0x0E, 0x11, 0x01, 0x58, 0x01, 0x12, 0x6C, 0x11, 0x12, 0x01, 0x07, 0x02, 0x00, 0x59, +/* 00002060 */ 0x00, 0x12, 0x59, 0x01, 0x0E, 0x1F, 0x02, 0x11, 0x11, 0x0E, 0x7B, 0x00, 0x11, 0x01, 0x58, 0x01, +/* 00002070 */ 0x12, 0x6C, 0x11, 0x12, 0x02, 0x07, 0x02, 0x00, 0x59, 0x00, 0x12, 0xA6, 0x13, 0x0E, 0x03, 0x59, +/* 00002080 */ 0x01, 0x13, 0x1F, 0x02, 0x11, 0x11, 0x45, 0x0F, 0x11, 0x45, 0x10, 0x02, 0xEC, 0x01, 0x12, 0x03, +/* 00002090 */ 0x00, 0x10, 0x0F, 0x09, 0x4F, 0x00, 0xBC, 0x11, 0x10, 0x0E, 0x01, 0x00, 0x0E, 0x3F, 0x00, 0x11, +/* 000020A0 */ 0x10, 0x03, 0x00, 0x0C, 0x03, 0x09, 0x15, 0x00, 0x01, 0x58, 0x01, 0x12, 0x6C, 0x11, 0x12, 0x04, +/* 000020B0 */ 0x07, 0x02, 0x00, 0x59, 0x00, 0x12, 0x59, 0x01, 0x04, 0x1F, 0x02, 0xFF, 0x11, 0x01, 0x58, 0x01, +/* 000020C0 */ 0x12, 0x6C, 0x11, 0x12, 0x05, 0x07, 0x04, 0x00, 0x59, 0x00, 0x12, 0x59, 0x01, 0x06, 0x59, 0x02, +/* 000020D0 */ 0x0C, 0x97, 0x13, 0x0E, 0x10, 0x59, 0x03, 0x13, 0x1F, 0x04, 0xFF, 0x11, 0x26, 0x0C, 0x0C, 0x26, +/* 000020E0 */ 0x10, 0x10, 0x09, 0xA7, 0xFF, 0x09, 0x3B, 0x00, 0x10, 0x03, 0x00, 0x0C, 0x03, 0x09, 0x15, 0x00, +/* 000020F0 */ 0x01, 0x58, 0x01, 0x12, 0x6C, 0x11, 0x12, 0x06, 0x07, 0x02, 0x00, 0x59, 0x00, 0x12, 0x59, 0x01, +/* 00002100 */ 0x04, 0x1F, 0x02, 0xFF, 0x11, 0x01, 0x58, 0x01, 0x12, 0x6C, 0x11, 0x12, 0x07, 0x07, 0x04, 0x00, +/* 00002110 */ 0x59, 0x00, 0x12, 0x59, 0x01, 0x06, 0x59, 0x02, 0x0C, 0x59, 0x03, 0x0E, 0x1F, 0x04, 0xFF, 0x11, +/* 00002120 */ 0x26, 0x0C, 0x0C, 0x26, 0x0D, 0x0D, 0x09, 0xEF, 0xFE, 0x45, 0x00, 0x0C, 0x09, 0x02, 0x00, 0xA8, +/* 00002130 */ 0x00, 0x24, 0x00, 0xFE, 0x8B, 0x02, 0xBE, 0xFE, 0x80, 0x02, 0xD1, 0xFE, 0xB3, 0x02, 0xFE, 0x83, +/* 00002140 */ 0x02, 0xFE, 0xB3, 0x02, 0xFE, 0x83, 0x02, 0xFE, 0x92, 0x2C, 0x19, 0x0A, 0x00, 0x00, 0x00, 0x03, +/* 00002150 */ 0x00, 0x44, 0x00, 0x03, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0D, 0x00, 0x05, 0x00, 0x0D, 0x00, 0x07, +/* 00002160 */ 0x00, 0x1B, 0x00, 0x08, 0x00, 0x95, 0x00, 0x0A, 0x00, 0x6F, 0x01, 0x28, 0x00, 0x2E, 0x02, 0x19, +/* 00002170 */ 0x00, 0xA5, 0x00, 0x1C, 0x00, 0x4C, 0x00, 0x05, 0x00, 0x2B, 0x00, 0x08, 0x00, 0x34, 0x00, 0x0A, +/* 00002180 */ 0x00, 0x93, 0x00, 0x08, 0x00, 0x54, 0x00, 0x15, 0x00, 0xEC, 0x00, 0x1F, 0x00, 0xB4, 0x00, 0x03, +/* 00002190 */ 0x00, 0x41, 0x00, 0x09, 0x00, 0xC9, 0x00, 0x08, 0x00, 0x4C, 0x00, 0x15, 0x00, 0xD4, 0x00, 0x1B, +/* 000021A0 */ 0x00, 0x98, 0x00, 0x03, 0x00, 0x69, 0x00, 0x06, 0x00, 0x42, 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, +/* 000021B0 */ 0x7F, 0x3C, 0x02, 0xC2, 0x03, 0x00, 0x13, 0x00, 0xC6, 0x3F, 0xA2, 0x41, 0xD1, 0x00, 0x0B, 0xFE, +/* 000021C0 */ 0x51, 0x21, 0xFE, 0x51, 0x21, 0x01, 0xFE, 0x00, 0x90, 0x06, 0x06, 0xFE, 0x51, 0x21, 0xFE, 0x0C, +/* 000021D0 */ 0x09, 0xFE, 0x0C, 0x09, 0x0D, 0x06, 0x0E, 0x0A, 0x43, 0x3D, 0x37, 0x01, 0x01, 0x06, 0x06, 0x06, +/* 000021E0 */ 0x06, 0x11, 0xD2, 0x01, 0x00, 0x01, 0x01, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x43, +/* 000021F0 */ 0x05, 0xFE, 0x02, 0x03, 0xDC, 0x4E, 0x0B, 0x4E, 0x0C, 0x4E, 0x0D, 0x45, 0x0B, 0x09, 0x45, 0x0C, +/* 00002200 */ 0x02, 0xA8, 0x0E, 0x45, 0x0D, 0x0E, 0xEC, 0x00, 0x12, 0x03, 0x00, 0x0C, 0x08, 0x09, 0xB7, 0x00, +/* 00002210 */ 0xBC, 0x0E, 0x0C, 0x07, 0x00, 0x00, 0x0E, 0xA7, 0x00, 0x0E, 0x97, 0x0E, 0x07, 0x0C, 0x45, 0x0D, +/* 00002220 */ 0x0E, 0x11, 0x03, 0x00, 0x0A, 0x02, 0x09, 0x5D, 0x00, 0x01, 0x58, 0x01, 0x0F, 0x6C, 0x0E, 0x0F, +/* 00002230 */ 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0F, 0x59, 0x01, 0x0D, 0x1F, 0x02, 0x0E, 0x0E, 0x0E, 0x44, +/* 00002240 */ 0x00, 0x0E, 0x01, 0x58, 0x01, 0x0F, 0x6C, 0x0E, 0x0F, 0x01, 0x07, 0x06, 0x00, 0x59, 0x00, 0x0F, +/* 00002250 */ 0x59, 0x01, 0x06, 0x59, 0x02, 0x0D, 0x01, 0x58, 0x01, 0x11, 0x6C, 0x10, 0x11, 0x02, 0x07, 0x02, +/* 00002260 */ 0x00, 0x59, 0x00, 0x11, 0xA6, 0x12, 0x0D, 0x03, 0x59, 0x01, 0x12, 0x1F, 0x02, 0x10, 0x10, 0x59, +/* 00002270 */ 0x03, 0x10, 0x59, 0x04, 0x0B, 0x33, 0x10, 0x0A, 0x03, 0x59, 0x05, 0x10, 0x1F, 0x06, 0x0E, 0x0E, +/* 00002280 */ 0x45, 0x0B, 0x0E, 0x09, 0x3B, 0x00, 0x10, 0x03, 0x00, 0x0B, 0x04, 0x09, 0x15, 0x00, 0x01, 0x58, +/* 00002290 */ 0x01, 0x0F, 0x6C, 0x0E, 0x0F, 0x04, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0F, 0x59, 0x01, 0x05, 0x1F, +/* 000022A0 */ 0x02, 0xFF, 0x0E, 0x01, 0x58, 0x01, 0x0F, 0x6C, 0x0E, 0x0F, 0x05, 0x07, 0x04, 0x00, 0x59, 0x00, +/* 000022B0 */ 0x0F, 0x59, 0x01, 0x06, 0x59, 0x02, 0x0B, 0x59, 0x03, 0x0D, 0x1F, 0x04, 0xFF, 0x0E, 0x26, 0x0B, +/* 000022C0 */ 0x0B, 0x26, 0x0C, 0x0C, 0x09, 0x3F, 0xFF, 0x45, 0x00, 0x0B, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, +/* 000022D0 */ 0x00, 0xBE, 0xFE, 0xEB, 0x02, 0xFE, 0x80, 0x02, 0xD1, 0xFE, 0xB3, 0x02, 0xFE, 0x83, 0x02, 0xFE, +/* 000022E0 */ 0x77, 0x22, 0x0F, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x44, 0x00, 0x03, 0x00, 0x50, 0x00, 0x07, +/* 000022F0 */ 0x00, 0x1C, 0x00, 0x08, 0x00, 0x95, 0x00, 0x0A, 0x00, 0x93, 0x00, 0x07, 0x00, 0x28, 0x01, 0x21, +/* 00002300 */ 0x00, 0x4C, 0x01, 0x44, 0x00, 0x23, 0x01, 0x08, 0x00, 0x4C, 0x00, 0x15, 0x00, 0xD0, 0x00, 0x1B, +/* 00002310 */ 0x00, 0x97, 0x00, 0x03, 0x00, 0x69, 0x00, 0x06, 0x00, 0x42, 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, +/* 00002320 */ 0x7F, 0x3C, 0x02, 0xC2, 0x43, 0x40, 0x13, 0x00, 0xAB, 0x28, 0xA2, 0x41, 0xD1, 0x00, 0x0A, 0xFE, +/* 00002330 */ 0xD0, 0x1D, 0xFE, 0xD0, 0x1D, 0x09, 0xFE, 0x00, 0x90, 0x03, 0x02, 0xFE, 0xD0, 0x1D, 0xFE, 0x3E, +/* 00002340 */ 0x03, 0xFE, 0x3E, 0x03, 0x0E, 0x09, 0x12, 0x07, 0x54, 0x4A, 0x1D, 0x01, 0x01, 0x07, 0x07, 0x07, +/* 00002350 */ 0x07, 0x01, 0x12, 0x9B, 0xFE, 0xFF, 0x00, 0x08, 0x06, 0xFE, 0xFD, 0x02, 0x06, 0xFE, 0xFE, 0x02, +/* 00002360 */ 0x05, 0xFE, 0x00, 0x03, 0x01, 0x00, 0x06, 0xFE, 0x01, 0x03, 0x01, 0x01, 0xFE, 0x09, 0x01, 0x58, +/* 00002370 */ 0x0D, 0x4E, 0x0B, 0x4E, 0x0C, 0x4E, 0x0E, 0x4E, 0x0F, 0x4E, 0x10, 0x4E, 0x11, 0x15, 0x05, 0x00, +/* 00002380 */ 0x0A, 0x02, 0xA8, 0x13, 0x45, 0x0A, 0x13, 0x4E, 0x0B, 0x4E, 0x0C, 0x4E, 0x0E, 0x4E, 0x0F, 0x4E, +/* 00002390 */ 0x10, 0x4E, 0x11, 0x01, 0x58, 0x01, 0x15, 0x6C, 0x14, 0x15, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 000023A0 */ 0x15, 0x59, 0x01, 0x0D, 0x59, 0x02, 0x05, 0x1F, 0x03, 0x14, 0x14, 0x45, 0x13, 0x14, 0x45, 0x15, +/* 000023B0 */ 0x14, 0x0D, 0x05, 0x00, 0x15, 0x02, 0x01, 0x73, 0x01, 0x10, 0x16, 0x5E, 0x16, 0x15, 0x01, 0x45, +/* 000023C0 */ 0x0B, 0x16, 0x5E, 0x16, 0x15, 0x02, 0x45, 0x0C, 0x16, 0x2A, 0x13, 0x09, 0x15, 0x03, 0x00, 0x13, +/* 000023D0 */ 0x07, 0x09, 0x15, 0x00, 0x01, 0x58, 0x01, 0x14, 0x6C, 0x13, 0x14, 0x03, 0x07, 0x02, 0x00, 0x59, +/* 000023E0 */ 0x00, 0x14, 0x59, 0x01, 0x05, 0x1F, 0x02, 0xFF, 0x13, 0x01, 0x58, 0x01, 0x14, 0x6C, 0x13, 0x14, +/* 000023F0 */ 0x04, 0x07, 0x03, 0x00, 0x59, 0x00, 0x14, 0x59, 0x01, 0x0B, 0x59, 0x02, 0x06, 0x1F, 0x03, 0x13, +/* 00002400 */ 0x13, 0x45, 0x0E, 0x13, 0x45, 0x0F, 0x06, 0x45, 0x10, 0x06, 0xEC, 0x00, 0x12, 0x03, 0x00, 0x0F, +/* 00002410 */ 0x0C, 0x09, 0x5A, 0x00, 0xBC, 0x13, 0x0F, 0x0B, 0x00, 0x00, 0x0E, 0x4A, 0x00, 0x13, 0x97, 0x13, +/* 00002420 */ 0x0B, 0x0F, 0x45, 0x11, 0x13, 0x01, 0x58, 0x01, 0x14, 0x6C, 0x13, 0x14, 0x05, 0x07, 0x06, 0x00, +/* 00002430 */ 0x59, 0x00, 0x14, 0x59, 0x01, 0x09, 0x59, 0x02, 0x0A, 0x59, 0x03, 0x11, 0x59, 0x04, 0x0F, 0x59, +/* 00002440 */ 0x05, 0x0B, 0x1F, 0x06, 0x13, 0x13, 0x0E, 0x1E, 0x00, 0x13, 0x01, 0x58, 0x01, 0x14, 0x6C, 0x13, +/* 00002450 */ 0x14, 0x06, 0x07, 0x04, 0x00, 0x59, 0x00, 0x14, 0x59, 0x01, 0x0E, 0x59, 0x02, 0x10, 0x59, 0x03, +/* 00002460 */ 0x11, 0x1F, 0x04, 0xFF, 0x13, 0x26, 0x10, 0x10, 0x26, 0x0F, 0x0F, 0x09, 0x9C, 0xFF, 0x45, 0x00, +/* 00002470 */ 0x0E, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xE9, 0x02, 0xFE, 0xFD, 0x02, 0xFE, 0xFE, +/* 00002480 */ 0x02, 0xFE, 0xBA, 0x02, 0xFE, 0x82, 0x02, 0xFE, 0x8B, 0x02, 0xFE, 0x83, 0x02, 0xFE, 0xE6, 0x1D, +/* 00002490 */ 0x10, 0x0E, 0x00, 0x00, 0x00, 0x16, 0x00, 0x57, 0x00, 0x36, 0x00, 0x65, 0x00, 0x0B, 0x00, 0x34, +/* 000024A0 */ 0x00, 0x15, 0x00, 0x61, 0x00, 0x1B, 0x00, 0x3A, 0x00, 0x03, 0x00, 0x13, 0x00, 0x05, 0x00, 0x1C, +/* 000024B0 */ 0x00, 0x08, 0x00, 0x17, 0x00, 0x0A, 0x00, 0x1E, 0x00, 0x07, 0x00, 0x23, 0x00, 0x25, 0x00, 0x6A, +/* 000024C0 */ 0x00, 0x1B, 0x00, 0x53, 0x00, 0x03, 0x00, 0x32, 0x00, 0x06, 0x00, 0x18, 0x00, 0x08, 0x00, 0x0E, +/* 000024D0 */ 0x00, 0x00, 0x7F, 0x1C, 0x00, 0xC0, 0x13, 0x00, 0x43, 0x00, 0xA0, 0x42, 0xA2, 0x41, 0xD1, 0x00, +/* 000024E0 */ 0x09, 0xFE, 0x1A, 0x1C, 0xFE, 0x1A, 0x1C, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, 0x1A, 0x1C, +/* 000024F0 */ 0xFE, 0x8A, 0x01, 0xFE, 0x8A, 0x01, 0x05, 0x05, 0x07, 0x03, 0x2B, 0x2B, 0x0A, 0x0A, 0x0A, 0x0A, +/* 00002500 */ 0x02, 0x06, 0xFE, 0xFD, 0x02, 0x06, 0xFE, 0xFE, 0x02, 0x07, 0xA6, 0x01, 0x58, 0x01, 0x08, 0x6C, +/* 00002510 */ 0x07, 0x08, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x08, 0x59, 0x01, 0x05, 0x1F, 0x02, 0x07, 0x07, +/* 00002520 */ 0x0E, 0x1F, 0x00, 0x07, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00002530 */ 0x00, 0x7A, 0x05, 0x00, 0x01, 0xA6, 0x07, 0x05, 0x02, 0x7A, 0x07, 0x00, 0x03, 0x09, 0x6F, 0x00, +/* 00002540 */ 0x09, 0x6A, 0x00, 0x14, 0x0A, 0x00, 0x05, 0x04, 0xA8, 0x07, 0x14, 0x03, 0x00, 0x05, 0x07, 0x09, +/* 00002550 */ 0x15, 0x00, 0x01, 0x58, 0x01, 0x08, 0x6C, 0x07, 0x08, 0x04, 0x07, 0x02, 0x00, 0x59, 0x00, 0x08, +/* 00002560 */ 0x59, 0x01, 0x06, 0x1F, 0x02, 0xFF, 0x07, 0xCE, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, +/* 00002570 */ 0x00, 0x00, 0x00, 0x00, 0x01, 0x58, 0x01, 0x08, 0x6C, 0x07, 0x08, 0x05, 0x07, 0x02, 0x00, 0x59, +/* 00002580 */ 0x00, 0x08, 0x59, 0x01, 0x05, 0x1F, 0x02, 0x07, 0x07, 0x7A, 0x07, 0x00, 0x06, 0x01, 0x58, 0x01, +/* 00002590 */ 0x08, 0x6C, 0x07, 0x08, 0x07, 0x07, 0x02, 0x00, 0x59, 0x00, 0x08, 0xA6, 0x09, 0x05, 0x08, 0x59, +/* 000025A0 */ 0x01, 0x09, 0x1F, 0x02, 0x07, 0x07, 0x7A, 0x07, 0x00, 0x09, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, +/* 000025B0 */ 0x00, 0x02, 0x20, 0x00, 0x10, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 000025C0 */ 0xFD, 0x02, 0x00, 0x00, 0xFE, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, +/* 000025D0 */ 0x00, 0x00, 0x00, 0x00, 0xFD, 0x02, 0x00, 0x00, 0xFE, 0x02, 0x00, 0x00, 0xBE, 0xFE, 0xFD, 0x02, +/* 000025E0 */ 0xD1, 0xFE, 0xFE, 0x02, 0xFE, 0xB0, 0x02, 0xFE, 0x11, 0x01, 0xFE, 0xFD, 0x02, 0xFE, 0x80, 0x02, +/* 000025F0 */ 0xD1, 0xFE, 0xFE, 0x02, 0xFE, 0x40, 0x1C, 0x06, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x30, 0x00, +/* 00002600 */ 0x1F, 0x00, 0x41, 0x00, 0x0F, 0x00, 0x39, 0x00, 0x15, 0x00, 0x52, 0x00, 0x48, 0x00, 0x67, 0x00, +/* 00002610 */ 0x00, 0x7F, 0x3C, 0x02, 0xC2, 0x43, 0x40, 0x13, 0x00, 0x71, 0x29, 0xA2, 0x41, 0xD1, 0x00, 0x08, +/* 00002620 */ 0xFE, 0xE3, 0x16, 0xFE, 0xE3, 0x16, 0x09, 0xFE, 0x00, 0x90, 0x03, 0x02, 0xFE, 0xE3, 0x16, 0xFE, +/* 00002630 */ 0xF1, 0x04, 0xFE, 0xF1, 0x04, 0x0D, 0x09, 0x11, 0x04, 0x4D, 0x3D, 0x0D, 0x01, 0x01, 0x04, 0x04, +/* 00002640 */ 0x04, 0x04, 0x01, 0x11, 0xBD, 0xEC, 0x08, 0x06, 0xFE, 0xFD, 0x02, 0x06, 0xFE, 0xFE, 0x02, 0x05, +/* 00002650 */ 0xFE, 0xFF, 0x02, 0x01, 0x00, 0x01, 0xFF, 0x01, 0x01, 0xF6, 0x58, 0x0D, 0x4E, 0x0B, 0x4E, 0x0C, +/* 00002660 */ 0x4E, 0x0E, 0x4E, 0x0F, 0x4E, 0x10, 0x15, 0x05, 0x00, 0x0A, 0x02, 0xA8, 0x12, 0x45, 0x0A, 0x12, +/* 00002670 */ 0x4E, 0x0B, 0x4E, 0x0C, 0x4E, 0x0E, 0x4E, 0x0F, 0x4E, 0x10, 0x01, 0x58, 0x01, 0x14, 0x6C, 0x13, +/* 00002680 */ 0x14, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x14, 0x59, 0x01, 0x0D, 0x59, 0x02, 0x05, 0x1F, 0x03, +/* 00002690 */ 0x13, 0x13, 0x45, 0x12, 0x13, 0x45, 0x14, 0x13, 0x0D, 0x05, 0x00, 0x14, 0x02, 0x01, 0x73, 0x01, +/* 000026A0 */ 0x10, 0x16, 0x5E, 0x15, 0x14, 0x01, 0x45, 0x0B, 0x15, 0x5E, 0x15, 0x14, 0x02, 0x45, 0x0C, 0x15, +/* 000026B0 */ 0x14, 0x03, 0x00, 0x0C, 0x06, 0x09, 0x06, 0x00, 0x45, 0x00, 0x07, 0x09, 0x90, 0x00, 0x01, 0x58, +/* 000026C0 */ 0x01, 0x13, 0x6C, 0x12, 0x13, 0x03, 0x07, 0x02, 0x00, 0x59, 0x00, 0x13, 0x59, 0x01, 0x0A, 0x1F, +/* 000026D0 */ 0x02, 0x12, 0x12, 0x45, 0x0E, 0x12, 0x10, 0x03, 0x00, 0x0E, 0x0C, 0x09, 0x06, 0x00, 0x45, 0x00, +/* 000026E0 */ 0x07, 0x09, 0x6A, 0x00, 0xA8, 0x12, 0x45, 0x0F, 0x12, 0x14, 0x03, 0x00, 0x0E, 0x06, 0x09, 0x06, +/* 000026F0 */ 0x00, 0x45, 0x0F, 0x06, 0x09, 0x20, 0x00, 0x11, 0x03, 0x00, 0x0E, 0x06, 0x09, 0x06, 0x00, 0x45, +/* 00002700 */ 0x0F, 0x0E, 0x09, 0x12, 0x00, 0x2D, 0x12, 0x0C, 0x0E, 0x45, 0x0F, 0x12, 0x12, 0x03, 0x00, 0x0F, +/* 00002710 */ 0x06, 0x09, 0x03, 0x00, 0x45, 0x0F, 0x06, 0xEC, 0x00, 0x12, 0x03, 0x00, 0x0F, 0x0C, 0x09, 0x25, +/* 00002720 */ 0x00, 0xBC, 0x12, 0x0F, 0x0B, 0x00, 0x00, 0x0E, 0x15, 0x00, 0x12, 0x97, 0x12, 0x0B, 0x0F, 0x45, +/* 00002730 */ 0x10, 0x12, 0x14, 0x03, 0x00, 0x10, 0x09, 0x09, 0x06, 0x00, 0x45, 0x00, 0x0F, 0x09, 0x0E, 0x00, +/* 00002740 */ 0x26, 0x0F, 0x0F, 0x09, 0xD1, 0xFF, 0x45, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, +/* 00002750 */ 0xFE, 0xE9, 0x02, 0xFE, 0xFD, 0x02, 0xFE, 0xFE, 0x02, 0xFE, 0x81, 0x02, 0xFE, 0xFC, 0x16, 0x17, +/* 00002760 */ 0x0C, 0x00, 0x00, 0x00, 0x14, 0x00, 0x5A, 0x00, 0x36, 0x00, 0x5E, 0x00, 0x08, 0x00, 0x1D, 0x00, +/* 00002770 */ 0x06, 0x00, 0x1E, 0x00, 0x18, 0x00, 0x36, 0x00, 0x08, 0x00, 0x1C, 0x00, 0x06, 0x00, 0x1E, 0x00, +/* 00002780 */ 0x05, 0x00, 0x14, 0x01, 0x08, 0x00, 0x58, 0x00, 0x06, 0x00, 0x16, 0x00, 0x08, 0x00, 0x4F, 0x00, +/* 00002790 */ 0x06, 0x00, 0x4E, 0x00, 0x07, 0x00, 0x1A, 0x00, 0x08, 0x00, 0x1D, 0x00, 0x05, 0x00, 0x2F, 0x00, +/* 000027A0 */ 0x08, 0x00, 0x17, 0x00, 0x0A, 0x00, 0x1E, 0x00, 0x07, 0x00, 0x26, 0x00, 0x08, 0x00, 0x36, 0x00, +/* 000027B0 */ 0x06, 0x00, 0x37, 0x00, 0x06, 0x00, 0x18, 0x00, 0x08, 0x00, 0x0F, 0x00, 0x00, 0x7F, 0x1C, 0x00, +/* 000027C0 */ 0xC0, 0x03, 0x00, 0x03, 0x00, 0x69, 0x29, 0xA0, 0x41, 0xD1, 0x00, 0x07, 0xFE, 0x88, 0x15, 0xFE, +/* 000027D0 */ 0x88, 0x15, 0x09, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFE, 0x88, 0x15, 0xFE, 0x2E, 0x01, 0xFE, 0x2E, +/* 000027E0 */ 0x01, 0x04, 0x05, 0x07, 0x04, 0x1E, 0x1D, 0x03, 0x03, 0x03, 0x03, 0x07, 0x05, 0xFE, 0xFC, 0x02, +/* 000027F0 */ 0x01, 0x02, 0x5F, 0x58, 0x05, 0x4E, 0x06, 0x14, 0x0A, 0x00, 0x05, 0x02, 0xA8, 0x07, 0x14, 0x03, +/* 00002800 */ 0x00, 0x05, 0x07, 0x09, 0x15, 0x00, 0x01, 0x58, 0x01, 0x08, 0x6C, 0x07, 0x08, 0x00, 0x07, 0x02, +/* 00002810 */ 0x00, 0x59, 0x00, 0x08, 0x59, 0x01, 0x03, 0x1F, 0x02, 0xFF, 0x07, 0x01, 0x58, 0x01, 0x08, 0x6C, +/* 00002820 */ 0x07, 0x08, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x08, 0x59, 0x01, 0x05, 0x1F, 0x02, 0x07, 0x07, +/* 00002830 */ 0x45, 0x06, 0x07, 0x01, 0x58, 0x01, 0x08, 0x6C, 0x07, 0x08, 0x02, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 00002840 */ 0x08, 0x59, 0x01, 0x06, 0x59, 0x02, 0x04, 0x1F, 0x03, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA8, 0x00, +/* 00002850 */ 0x24, 0x00, 0xFE, 0xB0, 0x02, 0xFE, 0x11, 0x01, 0xFE, 0xE4, 0x02, 0xFE, 0x9E, 0x15, 0x05, 0x04, +/* 00002860 */ 0x00, 0x00, 0x00, 0x0F, 0x00, 0x37, 0x00, 0x15, 0x00, 0x58, 0x00, 0x18, 0x00, 0x2E, 0x00, 0x1D, +/* 00002870 */ 0x00, 0x5A, 0x00, 0x00, 0x7F, 0x1C, 0x00, 0xC0, 0x03, 0x00, 0x03, 0x00, 0x61, 0x28, 0xA0, 0x41, +/* 00002880 */ 0xD1, 0x00, 0x06, 0xFE, 0x34, 0x14, 0xFE, 0x34, 0x14, 0x09, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFE, +/* 00002890 */ 0x34, 0x14, 0xFE, 0x27, 0x01, 0xFE, 0x27, 0x01, 0x04, 0x05, 0x07, 0x04, 0x1E, 0x1D, 0x03, 0x03, +/* 000028A0 */ 0x03, 0x03, 0x07, 0x05, 0xFE, 0xFB, 0x02, 0x01, 0x01, 0x5F, 0x58, 0x05, 0x4E, 0x06, 0x14, 0x0A, +/* 000028B0 */ 0x00, 0x05, 0x02, 0xA8, 0x07, 0x14, 0x03, 0x00, 0x05, 0x07, 0x09, 0x15, 0x00, 0x01, 0x58, 0x01, +/* 000028C0 */ 0x08, 0x6C, 0x07, 0x08, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x08, 0x59, 0x01, 0x03, 0x1F, 0x02, +/* 000028D0 */ 0xFF, 0x07, 0x01, 0x58, 0x01, 0x08, 0x6C, 0x07, 0x08, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x08, +/* 000028E0 */ 0x59, 0x01, 0x05, 0x1F, 0x02, 0x07, 0x07, 0x45, 0x06, 0x07, 0x01, 0x58, 0x01, 0x08, 0x6C, 0x07, +/* 000028F0 */ 0x08, 0x02, 0x07, 0x03, 0x00, 0x59, 0x00, 0x08, 0x59, 0x01, 0x06, 0x59, 0x02, 0x04, 0x1F, 0x03, +/* 00002900 */ 0x00, 0x07, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB0, 0x02, 0xFE, 0x11, 0x01, 0xFE, +/* 00002910 */ 0xE4, 0x02, 0xFE, 0x4A, 0x14, 0x05, 0x04, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x37, 0x00, 0x15, 0x00, +/* 00002920 */ 0x57, 0x00, 0x18, 0x00, 0x2E, 0x00, 0x1D, 0x00, 0x54, 0x00, 0x00, 0x7F, 0x1C, 0x00, 0xC0, 0x03, +/* 00002930 */ 0x00, 0x03, 0x00, 0x59, 0x26, 0xA0, 0x41, 0xD1, 0x00, 0x05, 0xFE, 0xE5, 0x12, 0xFE, 0xE5, 0x12, +/* 00002940 */ 0x09, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFE, 0xE5, 0x12, 0xFE, 0x23, 0x01, 0xFE, 0x23, 0x01, 0x04, +/* 00002950 */ 0x05, 0x07, 0x04, 0x1E, 0x1D, 0x03, 0x03, 0x03, 0x03, 0x07, 0x05, 0xFE, 0xFA, 0x02, 0x01, 0x00, +/* 00002960 */ 0x5F, 0x58, 0x05, 0x4E, 0x06, 0x14, 0x0A, 0x00, 0x05, 0x02, 0xA8, 0x07, 0x14, 0x03, 0x00, 0x05, +/* 00002970 */ 0x07, 0x09, 0x15, 0x00, 0x01, 0x58, 0x01, 0x08, 0x6C, 0x07, 0x08, 0x00, 0x07, 0x02, 0x00, 0x59, +/* 00002980 */ 0x00, 0x08, 0x59, 0x01, 0x03, 0x1F, 0x02, 0xFF, 0x07, 0x01, 0x58, 0x01, 0x08, 0x6C, 0x07, 0x08, +/* 00002990 */ 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x08, 0x59, 0x01, 0x05, 0x1F, 0x02, 0x07, 0x07, 0x45, 0x06, +/* 000029A0 */ 0x07, 0x01, 0x58, 0x01, 0x08, 0x6C, 0x07, 0x08, 0x02, 0x07, 0x03, 0x00, 0x59, 0x00, 0x08, 0x59, +/* 000029B0 */ 0x01, 0x06, 0x59, 0x02, 0x04, 0x1F, 0x03, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, +/* 000029C0 */ 0xFE, 0xB0, 0x02, 0xFE, 0x11, 0x01, 0xFE, 0xE4, 0x02, 0xFE, 0xFB, 0x12, 0x05, 0x04, 0x00, 0x00, +/* 000029D0 */ 0x00, 0x0F, 0x00, 0x37, 0x00, 0x15, 0x00, 0x55, 0x00, 0x18, 0x00, 0x2E, 0x00, 0x1D, 0x00, 0x52, +/* 000029E0 */ 0x00, 0x00, 0x7F, 0x1C, 0x00, 0xC0, 0x03, 0x00, 0x03, 0x00, 0x55, 0x42, 0xA2, 0x41, 0xD1, 0x00, +/* 000029F0 */ 0x04, 0xFE, 0x46, 0x12, 0xFE, 0x46, 0x12, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, 0x46, 0x12, +/* 00002A00 */ 0x75, 0x75, 0x03, 0x02, 0x04, 0x04, 0x0A, 0x0A, 0x01, 0x01, 0x01, 0x01, 0x1C, 0x01, 0x58, 0x01, +/* 00002A10 */ 0x04, 0x5E, 0x04, 0x04, 0x00, 0x07, 0x03, 0x00, 0x59, 0x01, 0x02, 0x59, 0x02, 0x03, 0xC4, 0x03, +/* 00002A20 */ 0x00, 0x04, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xDB, 0x02, 0xFE, 0x73, 0x12, 0x02, +/* 00002A30 */ 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x47, 0x00, 0x00, 0x7F, 0x1C, 0x00, 0xC0, 0x57, 0x40, 0x47, +/* 00002A40 */ 0x00, 0x26, 0x13, 0xA0, 0x41, 0xC1, 0x00, 0xFE, 0xDD, 0x02, 0x03, 0xFF, 0x00, 0x00, 0x00, 0x02, +/* 00002A50 */ 0xFE, 0x3E, 0x09, 0xFE, 0x3E, 0x09, 0x09, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFE, 0x3E, 0x09, 0xFE, +/* 00002A60 */ 0x30, 0x06, 0xFE, 0x30, 0x06, 0x0E, 0x0B, 0x13, 0x04, 0x5C, 0x54, 0x15, 0x15, 0x15, 0x15, 0x01, +/* 00002A70 */ 0x05, 0x03, 0x13, 0x05, 0xFE, 0xF8, 0x02, 0x05, 0xFE, 0xE1, 0x02, 0x0B, 0x06, 0xFE, 0xDD, 0x02, +/* 00002A80 */ 0x06, 0xFE, 0xF9, 0x02, 0x07, 0x01, 0x01, 0x0C, 0x01, 0x00, 0xFE, 0x64, 0x01, 0x58, 0x0B, 0x4E, +/* 00002A90 */ 0x0C, 0x4E, 0x0D, 0x4E, 0x0E, 0x4E, 0x0F, 0x4E, 0x10, 0x4E, 0x11, 0x4E, 0x12, 0x45, 0x0C, 0x0B, +/* 00002AA0 */ 0x01, 0x58, 0x01, 0x16, 0x5E, 0x16, 0x16, 0x00, 0xE3, 0x16, 0x0C, 0x16, 0x00, 0x0F, 0x18, 0x00, +/* 00002AB0 */ 0x16, 0x01, 0x58, 0x01, 0x17, 0x6C, 0x16, 0x17, 0x01, 0x07, 0x03, 0x00, 0x59, 0x00, 0x17, 0x59, +/* 00002AC0 */ 0x01, 0x02, 0x59, 0x02, 0x03, 0x1F, 0x03, 0xFF, 0x16, 0x5E, 0x16, 0x0C, 0x02, 0x45, 0x0D, 0x16, +/* 00002AD0 */ 0x5E, 0x16, 0x0C, 0x03, 0x14, 0x03, 0x00, 0x16, 0x04, 0x09, 0x1D, 0x00, 0xCE, 0x00, 0x00, 0x00, +/* 00002AE0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0x16, 0x7A, 0x16, 0x00, 0x04, 0x7A, +/* 00002AF0 */ 0x04, 0x00, 0x05, 0x09, 0xF9, 0x00, 0x09, 0xF4, 0x00, 0x5E, 0x16, 0x0C, 0x06, 0x45, 0x0E, 0x16, +/* 00002B00 */ 0x01, 0x58, 0x01, 0x17, 0x6C, 0x16, 0x17, 0x07, 0x07, 0x02, 0x00, 0x59, 0x00, 0x17, 0x59, 0x01, +/* 00002B10 */ 0x0D, 0x1F, 0x02, 0x16, 0x16, 0x0E, 0x0A, 0x00, 0x16, 0xA6, 0x17, 0x0D, 0x08, 0x45, 0x16, 0x17, +/* 00002B20 */ 0x09, 0x18, 0x00, 0x01, 0x58, 0x01, 0x18, 0x6C, 0x17, 0x18, 0x09, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 00002B30 */ 0x18, 0x59, 0x01, 0x0D, 0x1F, 0x02, 0x17, 0x17, 0x46, 0x16, 0x17, 0x45, 0x0F, 0x16, 0x12, 0x03, +/* 00002B40 */ 0x00, 0x0E, 0x0F, 0x09, 0x89, 0x00, 0x5E, 0x16, 0x0C, 0x0A, 0x45, 0x10, 0x16, 0x2D, 0x16, 0x0E, +/* 00002B50 */ 0x08, 0x76, 0x16, 0x0C, 0x0B, 0x14, 0x03, 0x00, 0x10, 0x08, 0x09, 0x1F, 0x00, 0xCE, 0x10, 0x00, +/* 00002B60 */ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x16, 0x0D, 0x0E, 0x7A, 0x16, +/* 00002B70 */ 0x00, 0x0C, 0x7A, 0x09, 0x00, 0x0D, 0x09, 0x76, 0x00, 0x09, 0x50, 0x00, 0x14, 0x03, 0x00, 0x10, +/* 00002B80 */ 0x0A, 0x09, 0x1B, 0x00, 0xCE, 0x20, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00002B90 */ 0x00, 0x7A, 0x0E, 0x00, 0x0E, 0x7A, 0x09, 0x00, 0x0F, 0x09, 0x53, 0x00, 0x09, 0x2D, 0x00, 0x45, +/* 00002BA0 */ 0x11, 0x0E, 0x97, 0x16, 0x0D, 0x0E, 0x45, 0x12, 0x16, 0xCE, 0x30, 0x00, 0x00, 0x00, 0x03, 0x00, +/* 00002BB0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCF, 0x16, 0x02, 0xA1, 0x00, 0x11, 0x16, 0xA1, 0x01, 0x12, +/* 00002BC0 */ 0x16, 0x7A, 0x16, 0x00, 0x10, 0x7A, 0x09, 0x00, 0x11, 0x09, 0x23, 0x00, 0x09, 0x1E, 0x00, 0x76, +/* 00002BD0 */ 0x04, 0x0C, 0x12, 0xCE, 0x40, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00002BE0 */ 0xA8, 0x16, 0x7A, 0x16, 0x00, 0x13, 0x7A, 0x04, 0x00, 0x14, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, +/* 00002BF0 */ 0x00, 0x05, 0x50, 0x00, 0x40, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00002C00 */ 0x97, 0x01, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, +/* 00002C10 */ 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, +/* 00002C20 */ 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, +/* 00002C30 */ 0x10, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, +/* 00002C40 */ 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00002C50 */ 0x97, 0x01, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0xFE, 0xDB, 0x02, 0xFE, 0xB6, 0x02, 0xFE, 0xF4, +/* 00002C60 */ 0x02, 0xFE, 0xF7, 0x02, 0xFE, 0x97, 0x01, 0x74, 0xFE, 0xF5, 0x02, 0xBE, 0xD1, 0xFE, 0x7C, 0x02, +/* 00002C70 */ 0xFE, 0xF6, 0x02, 0xFE, 0xF5, 0x02, 0xFE, 0x97, 0x01, 0x74, 0xFE, 0x97, 0x01, 0x74, 0xFE, 0x97, +/* 00002C80 */ 0x01, 0x74, 0xFE, 0xF7, 0x02, 0xFE, 0x97, 0x01, 0x74, 0xFE, 0x5C, 0x09, 0x15, 0x10, 0x00, 0x00, +/* 00002C90 */ 0x00, 0x03, 0x00, 0x1F, 0x00, 0x11, 0x00, 0x49, 0x00, 0x18, 0x00, 0x7D, 0x00, 0x07, 0x00, 0x2B, +/* 00002CA0 */ 0x00, 0x0C, 0x00, 0x39, 0x00, 0x1D, 0x00, 0x56, 0x00, 0x07, 0x00, 0x33, 0x00, 0x3E, 0x00, 0x65, +/* 00002CB0 */ 0x00, 0x08, 0x00, 0x70, 0x00, 0x07, 0x00, 0x36, 0x00, 0x08, 0x00, 0x38, 0x00, 0x08, 0x00, 0x4F, +/* 00002CC0 */ 0x00, 0x1F, 0x00, 0x48, 0x00, 0x08, 0x00, 0x78, 0x00, 0x1B, 0x00, 0x63, 0x00, 0x03, 0x00, 0x34, +/* 00002CD0 */ 0x00, 0x07, 0x00, 0x39, 0x00, 0x26, 0x00, 0x8A, 0x00, 0x04, 0x00, 0x35, 0x00, 0x1C, 0x00, 0x5E, +/* 00002CE0 */ 0x00, 0x00, 0x7F, 0x1C, 0x00, 0xC0, 0x03, 0x00, 0x03, 0x00, 0x10, 0x3C, 0xA2, 0x41, 0xD1, 0x00, +/* 00002CF0 */ 0x02, 0xFE, 0x34, 0x03, 0xFE, 0x34, 0x03, 0x49, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, 0x34, 0x03, +/* 00002D00 */ 0xFE, 0xD3, 0x01, 0xFE, 0xD3, 0x01, 0x05, 0x09, 0x0C, 0x08, 0x13, 0x13, 0x05, 0x05, 0x05, 0x05, +/* 00002D10 */ 0x01, 0x04, 0x06, 0xFE, 0xF4, 0x02, 0x06, 0xFE, 0xF5, 0x02, 0x06, 0xFE, 0xF6, 0x02, 0x06, 0xFE, +/* 00002D20 */ 0xF7, 0x02, 0x01, 0x00, 0x0C, 0x3A, 0x58, 0x0B, 0x01, 0x58, 0x01, 0x0D, 0x6C, 0x0C, 0x0D, 0x00, +/* 00002D30 */ 0x07, 0x07, 0x00, 0x59, 0x00, 0x0D, 0x59, 0x01, 0x0B, 0x59, 0x02, 0x02, 0x59, 0x03, 0x03, 0x59, +/* 00002D40 */ 0x04, 0x04, 0x59, 0x05, 0x05, 0x59, 0x06, 0x06, 0x1F, 0x07, 0xFF, 0x0C, 0x76, 0x09, 0x0B, 0x01, +/* 00002D50 */ 0x76, 0x07, 0x0B, 0x02, 0x76, 0x0A, 0x0B, 0x03, 0x76, 0x08, 0x0B, 0x04, 0xA8, 0x00, 0x24, 0x00, +/* 00002D60 */ 0xFE, 0x7D, 0x02, 0xFE, 0xF4, 0x02, 0xFE, 0xF5, 0x02, 0xFE, 0xF6, 0x02, 0xFE, 0xF7, 0x02, 0xFE, +/* 00002D70 */ 0x61, 0x03, 0x06, 0x02, 0x00, 0x00, 0x00, 0x24, 0x00, 0x82, 0x00, 0x04, 0x00, 0x28, 0x00, 0x04, +/* 00002D80 */ 0x00, 0x22, 0x00, 0x04, 0x00, 0x29, 0x00, 0x06, 0x00, 0xB0, 0x00, 0x00, 0x00}; + +//Bytecode generated from Math_object.js +const char Library_Bytecode_Math_object[] = { +/* 00000000 */ 0x43, 0x68, 0x42, 0x63, 0x62, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00000010 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0xFE, 0xD9, 0x02, 0x00, 0xFE, +/* 00000020 */ 0xC0, 0x0F, 0xFE, 0xC0, 0x0F, 0x35, 0x00, 0x00, 0x00, 0xDC, 0x00, 0x00, 0x00, 0xBA, 0x02, 0x00, +/* 00000030 */ 0x00, 0x61, 0x07, 0x00, 0x00, 0x06, 0x5A, 0x00, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, 0x00, +/* 00000040 */ 0x88, 0x00, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x01, 0xBA, +/* 00000050 */ 0x00, 0x00, 0x00, 0x01, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x6C, 0x00, 0x6F, 0x00, +/* 00000060 */ 0x62, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x20, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x64, 0x00, 0x65, 0x00, +/* 00000070 */ 0x00, 0x00, 0x75, 0x00, 0x73, 0x00, 0x65, 0x00, 0x20, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, +/* 00000080 */ 0x69, 0x00, 0x63, 0x00, 0x74, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x00, 0x00, +/* 00000090 */ 0x6D, 0x00, 0x61, 0x00, 0x78, 0x00, 0x00, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x73, 0x00, 0x69, 0x00, +/* 000000A0 */ 0x74, 0x00, 0x69, 0x00, 0x76, 0x00, 0x65, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x66, 0x00, 0x69, 0x00, +/* 000000B0 */ 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x67, 0x00, +/* 000000C0 */ 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x76, 0x00, 0x65, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x66, 0x00, +/* 000000D0 */ 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, +/* 000000E0 */ 0x00, 0x6A, 0x00, 0x00, 0x00, 0x9B, 0x00, 0x00, 0x00, 0xE2, 0x00, 0x00, 0x00, 0x4C, 0x01, 0x00, +/* 000000F0 */ 0x00, 0xB6, 0x01, 0x00, 0x00, 0xB7, 0x01, 0x00, 0x00, 0xC5, 0x01, 0x00, 0x00, 0xC6, 0x01, 0x00, +/* 00000100 */ 0x00, 0xDE, 0x01, 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x4A, 0x02, 0x00, +/* 00000110 */ 0x00, 0x8D, 0x02, 0x00, 0x00, 0x8E, 0x02, 0x00, 0x00, 0xCF, 0x02, 0x00, 0x00, 0xE8, 0x02, 0x00, +/* 00000120 */ 0x00, 0xE9, 0x02, 0x00, 0x00, 0x2F, 0x03, 0x00, 0x00, 0x63, 0x03, 0x00, 0x00, 0x15, 0x04, 0x00, +/* 00000130 */ 0x00, 0x3B, 0x04, 0x00, 0x00, 0x70, 0x04, 0x00, 0x00, 0x7A, 0x04, 0x00, 0x00, 0x7B, 0x04, 0x00, +/* 00000140 */ 0x00, 0x9A, 0x04, 0x00, 0x00, 0x9B, 0x04, 0x00, 0x00, 0xB5, 0x04, 0x00, 0x00, 0xD6, 0x04, 0x00, +/* 00000150 */ 0x00, 0xF4, 0x04, 0x00, 0x00, 0xFE, 0x04, 0x00, 0x00, 0xFF, 0x04, 0x00, 0x00, 0x25, 0x05, 0x00, +/* 00000160 */ 0x00, 0x40, 0x05, 0x00, 0x00, 0x4A, 0x05, 0x00, 0x00, 0x4B, 0x05, 0x00, 0x00, 0x71, 0x05, 0x00, +/* 00000170 */ 0x00, 0x8F, 0x05, 0x00, 0x00, 0xC1, 0x05, 0x00, 0x00, 0xDD, 0x05, 0x00, 0x00, 0xEB, 0x05, 0x00, +/* 00000180 */ 0x00, 0x6A, 0x06, 0x00, 0x00, 0x89, 0x06, 0x00, 0x00, 0x97, 0x06, 0x00, 0x00, 0xAA, 0x06, 0x00, +/* 00000190 */ 0x00, 0xC9, 0x06, 0x00, 0x00, 0xD7, 0x06, 0x00, 0x00, 0xE1, 0x06, 0x00, 0x00, 0xE2, 0x06, 0x00, +/* 000001A0 */ 0x00, 0xFC, 0x06, 0x00, 0x00, 0x11, 0x07, 0x00, 0x00, 0x12, 0x07, 0x00, 0x00, 0x47, 0x07, 0x00, +/* 000001B0 */ 0x00, 0xA6, 0x07, 0x00, 0x00, 0xDF, 0x07, 0x00, 0x00, 0x0B, 0x08, 0x00, 0x00, 0x2D, 0x08, 0x00, +/* 000001C0 */ 0x00, 0x48, 0x08, 0x00, 0x00, 0x56, 0x08, 0x00, 0x00, 0xD1, 0x08, 0x00, 0x00, 0xF0, 0x08, 0x00, +/* 000001D0 */ 0x00, 0xFE, 0x08, 0x00, 0x00, 0x08, 0x09, 0x00, 0x00, 0x09, 0x09, 0x00, 0x00, 0x1D, 0x09, 0x00, +/* 000001E0 */ 0x00, 0x25, 0x09, 0x00, 0x00, 0x26, 0x09, 0x00, 0x00, 0x67, 0x09, 0x00, 0x00, 0x80, 0x09, 0x00, +/* 000001F0 */ 0x00, 0x81, 0x09, 0x00, 0x00, 0xC7, 0x09, 0x00, 0x00, 0xFB, 0x09, 0x00, 0x00, 0xAC, 0x0A, 0x00, +/* 00000200 */ 0x00, 0xD2, 0x0A, 0x00, 0x00, 0x07, 0x0B, 0x00, 0x00, 0x11, 0x0B, 0x00, 0x00, 0x12, 0x0B, 0x00, +/* 00000210 */ 0x00, 0x31, 0x0B, 0x00, 0x00, 0x32, 0x0B, 0x00, 0x00, 0x4C, 0x0B, 0x00, 0x00, 0x6D, 0x0B, 0x00, +/* 00000220 */ 0x00, 0x8B, 0x0B, 0x00, 0x00, 0x95, 0x0B, 0x00, 0x00, 0x96, 0x0B, 0x00, 0x00, 0xBC, 0x0B, 0x00, +/* 00000230 */ 0x00, 0xD7, 0x0B, 0x00, 0x00, 0xE1, 0x0B, 0x00, 0x00, 0xE2, 0x0B, 0x00, 0x00, 0x08, 0x0C, 0x00, +/* 00000240 */ 0x00, 0x26, 0x0C, 0x00, 0x00, 0x58, 0x0C, 0x00, 0x00, 0x74, 0x0C, 0x00, 0x00, 0x82, 0x0C, 0x00, +/* 00000250 */ 0x00, 0x01, 0x0D, 0x00, 0x00, 0x20, 0x0D, 0x00, 0x00, 0x2E, 0x0D, 0x00, 0x00, 0x41, 0x0D, 0x00, +/* 00000260 */ 0x00, 0x60, 0x0D, 0x00, 0x00, 0x6E, 0x0D, 0x00, 0x00, 0x78, 0x0D, 0x00, 0x00, 0x79, 0x0D, 0x00, +/* 00000270 */ 0x00, 0x93, 0x0D, 0x00, 0x00, 0xA8, 0x0D, 0x00, 0x00, 0xA9, 0x0D, 0x00, 0x00, 0xDE, 0x0D, 0x00, +/* 00000280 */ 0x00, 0x3D, 0x0E, 0x00, 0x00, 0x76, 0x0E, 0x00, 0x00, 0xA2, 0x0E, 0x00, 0x00, 0xC4, 0x0E, 0x00, +/* 00000290 */ 0x00, 0xDF, 0x0E, 0x00, 0x00, 0xED, 0x0E, 0x00, 0x00, 0x68, 0x0F, 0x00, 0x00, 0x87, 0x0F, 0x00, +/* 000002A0 */ 0x00, 0x95, 0x0F, 0x00, 0x00, 0x9F, 0x0F, 0x00, 0x00, 0xA0, 0x0F, 0x00, 0x00, 0xB4, 0x0F, 0x00, +/* 000002B0 */ 0x00, 0xBC, 0x0F, 0x00, 0x00, 0xC0, 0x0F, 0x00, 0x00, 0x00, 0x04, 0x73, 0x0C, 0x00, 0x00, 0x00, +/* 000002C0 */ 0x10, 0x08, 0x00, 0xA8, 0x41, 0xC0, 0x00, 0xFE, 0xD9, 0x02, 0x00, 0xFE, 0xB7, 0x01, 0xFE, 0xB7, +/* 000002D0 */ 0x01, 0x01, 0x40, 0xFE, 0x00, 0x90, 0xFE, 0xB7, 0x01, 0xFE, 0x09, 0x0E, 0xFE, 0x09, 0x0E, 0x01, +/* 000002E0 */ 0x04, 0x04, 0x04, 0x04, 0x03, 0x05, 0xFE, 0xDA, 0x02, 0x0A, 0x07, 0xA8, 0x00, 0xD6, 0x00, 0x04, +/* 000002F0 */ 0x24, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x02, 0x00, 0x00, 0x7F, 0x1C, 0x00, +/* 00000300 */ 0xC0, 0x03, 0x10, 0x0B, 0x00, 0x08, 0x01, 0xA2, 0x41, 0xD1, 0x00, 0x01, 0xFE, 0xC7, 0x01, 0xFE, +/* 00000310 */ 0xC7, 0x01, 0x02, 0x40, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0xC7, 0x01, 0xFE, 0xF6, 0x0D, 0xFE, +/* 00000320 */ 0xF6, 0x0D, 0x05, 0x04, 0x07, 0x04, 0x19, 0x18, 0x07, 0x07, 0x07, 0x07, 0x06, 0x06, 0xFE, 0xDB, +/* 00000330 */ 0x02, 0x06, 0xFE, 0xDC, 0x02, 0x51, 0x5E, 0x07, 0x04, 0x00, 0x45, 0x05, 0x07, 0x01, 0x58, 0x01, +/* 00000340 */ 0x07, 0x5E, 0x08, 0x05, 0x01, 0x76, 0x08, 0x07, 0x02, 0x01, 0x58, 0x01, 0x07, 0x5E, 0x08, 0x05, +/* 00000350 */ 0x03, 0x76, 0x08, 0x07, 0x04, 0x6C, 0x07, 0x05, 0x05, 0x07, 0x03, 0x00, 0x59, 0x00, 0x05, 0x59, +/* 00000360 */ 0x01, 0x02, 0xD6, 0x00, 0x08, 0x59, 0x02, 0x08, 0x1F, 0x03, 0xFF, 0x07, 0x6C, 0x07, 0x05, 0x06, +/* 00000370 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x05, 0x59, 0x01, 0x03, 0xD6, 0x01, 0x08, 0x59, 0x02, 0x08, 0x1F, +/* 00000380 */ 0x03, 0xFF, 0x07, 0xA8, 0x00, 0x24, 0x00, 0x59, 0xFE, 0x21, 0x01, 0xFE, 0xDD, 0x02, 0xFE, 0x0E, +/* 00000390 */ 0x01, 0xFE, 0xDE, 0x02, 0xFE, 0x7F, 0x02, 0xFE, 0x7F, 0x02, 0xFE, 0xE2, 0x01, 0x06, 0x00, 0x00, +/* 000003A0 */ 0x00, 0x00, 0x07, 0x00, 0x29, 0x00, 0x0C, 0x00, 0x43, 0x00, 0x0C, 0x00, 0x44, 0x00, 0x17, 0x00, +/* 000003B0 */ 0x98, 0x06, 0x19, 0x00, 0x92, 0x06, 0x00, 0x90, 0x05, 0x00, 0x00, 0xBF, 0x03, 0x00, 0x00, 0x7F, +/* 000003C0 */ 0x2C, 0x00, 0xC2, 0x43, 0x40, 0x13, 0x00, 0x42, 0x25, 0xA2, 0x41, 0xB1, 0x00, 0x03, 0xFE, 0x4B, +/* 000003D0 */ 0x09, 0xFE, 0x4B, 0x09, 0x03, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, 0x4B, 0x09, 0xFE, 0x6E, 0x06, +/* 000003E0 */ 0xFE, 0x6E, 0x06, 0x0A, 0x08, 0x0F, 0x51, 0x42, 0x1B, 0x01, 0x05, 0x05, 0x05, 0x05, 0x01, 0x0F, +/* 000003F0 */ 0xA6, 0xFE, 0x06, 0x01, 0x07, 0x01, 0x00, 0x0C, 0x0B, 0x01, 0x01, 0x01, 0x02, 0xFE, 0x10, 0x01, +/* 00000400 */ 0xB1, 0x0A, 0x4E, 0x0B, 0x4E, 0x0C, 0x4E, 0x0D, 0x4E, 0x0E, 0xA6, 0x10, 0x0A, 0x00, 0x14, 0x03, +/* 00000410 */ 0x00, 0x10, 0x03, 0x09, 0x0B, 0x00, 0x01, 0x58, 0x01, 0x10, 0x5E, 0x00, 0x10, 0x01, 0x09, 0xED, +/* 00000420 */ 0x00, 0x45, 0x0B, 0x04, 0x43, 0x10, 0x08, 0x45, 0x08, 0x10, 0x15, 0x03, 0x00, 0x08, 0x08, 0x09, +/* 00000430 */ 0x03, 0x00, 0x45, 0x0B, 0x05, 0xA6, 0x10, 0x0A, 0x02, 0x14, 0x03, 0x00, 0x10, 0x06, 0x09, 0x06, +/* 00000440 */ 0x00, 0x45, 0x00, 0x08, 0x09, 0xC7, 0x00, 0xA6, 0x10, 0x0A, 0x03, 0x14, 0x03, 0x00, 0x10, 0x07, +/* 00000450 */ 0x09, 0x48, 0x00, 0x43, 0x10, 0x09, 0x45, 0x09, 0x10, 0x15, 0x04, 0x00, 0x09, 0x09, 0x0E, 0x05, +/* 00000460 */ 0x00, 0x0B, 0xA9, 0x00, 0x09, 0xA7, 0x00, 0x11, 0x20, 0x00, 0x08, 0x09, 0x14, 0x03, 0x00, 0x08, +/* 00000470 */ 0x09, 0x09, 0x21, 0x00, 0x14, 0x03, 0x00, 0x08, 0x03, 0x09, 0x19, 0x00, 0x2E, 0x10, 0x06, 0x08, +/* 00000480 */ 0x2E, 0x11, 0x06, 0x09, 0x11, 0x03, 0x00, 0x10, 0x11, 0x09, 0x09, 0x00, 0x45, 0x00, 0x08, 0x09, +/* 00000490 */ 0x7C, 0x00, 0x09, 0x06, 0x00, 0x45, 0x00, 0x09, 0x09, 0x73, 0x00, 0x45, 0x0C, 0x08, 0xA8, 0x10, +/* 000004A0 */ 0x45, 0x0D, 0x10, 0x45, 0x0E, 0x06, 0xEC, 0x00, 0xA6, 0x10, 0x0A, 0x04, 0x12, 0x03, 0x00, 0x0E, +/* 000004B0 */ 0x10, 0x09, 0x52, 0x00, 0x97, 0x10, 0x0A, 0x0E, 0x43, 0x10, 0x10, 0x45, 0x0D, 0x10, 0x0E, 0x03, +/* 000004C0 */ 0x00, 0x0B, 0x09, 0x3B, 0x00, 0x15, 0x03, 0x00, 0x0D, 0x0D, 0x09, 0x0B, 0x00, 0x45, 0x0B, 0x05, +/* 000004D0 */ 0xA9, 0x10, 0x45, 0x0C, 0x10, 0x09, 0x28, 0x00, 0x12, 0x20, 0x00, 0x0C, 0x0D, 0x14, 0x03, 0x00, +/* 000004E0 */ 0x0C, 0x0D, 0x09, 0x1B, 0x00, 0x14, 0x03, 0x00, 0x0C, 0x03, 0x09, 0x13, 0x00, 0x2E, 0x10, 0x06, +/* 000004F0 */ 0x0C, 0x2E, 0x11, 0x06, 0x0D, 0x12, 0x03, 0x00, 0x10, 0x11, 0x09, 0x03, 0x00, 0x45, 0x0C, 0x0D, +/* 00000500 */ 0x26, 0x0E, 0x0E, 0x09, 0xA0, 0xFF, 0x45, 0x00, 0x0C, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, +/* 00000510 */ 0xD1, 0xFE, 0xDE, 0x02, 0xD1, 0xD1, 0xD1, 0xFE, 0xB4, 0x0A, 0x1D, 0x0A, 0x00, 0x00, 0x00, 0x0C, +/* 00000520 */ 0x00, 0x2A, 0x00, 0x0B, 0x00, 0x3C, 0x00, 0x03, 0x00, 0x20, 0x00, 0x06, 0x00, 0x1A, 0x00, 0x08, +/* 00000530 */ 0x00, 0x25, 0x00, 0x03, 0x00, 0x25, 0x00, 0x0C, 0x00, 0x2A, 0x00, 0x06, 0x00, 0x22, 0x00, 0x0C, +/* 00000540 */ 0x00, 0x2A, 0x00, 0x06, 0x00, 0x1E, 0x00, 0x09, 0x00, 0x36, 0x00, 0x05, 0x00, 0x26, 0x00, 0x25, +/* 00000550 */ 0x00, 0x83, 0x00, 0x09, 0x00, 0x40, 0x00, 0x06, 0x00, 0x30, 0x00, 0x03, 0x00, 0x1A, 0x00, 0x05, +/* 00000560 */ 0x00, 0x1B, 0x00, 0x05, 0x00, 0x0B, 0x00, 0x0C, 0x00, 0x29, 0x00, 0x0A, 0x00, 0x5F, 0x00, 0x07, +/* 00000570 */ 0x00, 0x3E, 0x00, 0x08, 0x00, 0x2B, 0x00, 0x03, 0x00, 0x22, 0x00, 0x08, 0x00, 0x2A, 0x00, 0x25, +/* 00000580 */ 0x00, 0x7A, 0x00, 0x03, 0x00, 0x5F, 0xFE, 0x06, 0x00, 0xD1, 0x01, 0x08, 0x00, 0x10, 0x00, 0x00, +/* 00000590 */ 0x7F, 0x2C, 0x00, 0xC2, 0x43, 0x40, 0x13, 0x00, 0x0E, 0x25, 0xA2, 0x41, 0xB1, 0x00, 0x02, 0xFE, +/* 000005A0 */ 0xB3, 0x02, 0xFE, 0xB3, 0x02, 0x03, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, 0xB3, 0x02, 0xFE, 0x6F, +/* 000005B0 */ 0x06, 0xFE, 0x6F, 0x06, 0x0A, 0x08, 0x0F, 0x51, 0x42, 0x1B, 0x01, 0x05, 0x05, 0x05, 0x05, 0x01, +/* 000005C0 */ 0x0F, 0xA6, 0xFE, 0x06, 0x01, 0x07, 0x01, 0x00, 0x0C, 0x0B, 0x01, 0x01, 0x01, 0x02, 0xFE, 0x10, +/* 000005D0 */ 0x01, 0xB1, 0x0A, 0x4E, 0x0B, 0x4E, 0x0C, 0x4E, 0x0D, 0x4E, 0x0E, 0xA6, 0x10, 0x0A, 0x00, 0x14, +/* 000005E0 */ 0x03, 0x00, 0x10, 0x03, 0x09, 0x0B, 0x00, 0x01, 0x58, 0x01, 0x10, 0x5E, 0x00, 0x10, 0x01, 0x09, +/* 000005F0 */ 0xED, 0x00, 0x45, 0x0B, 0x04, 0x43, 0x10, 0x08, 0x45, 0x08, 0x10, 0x15, 0x03, 0x00, 0x08, 0x08, +/* 00000600 */ 0x09, 0x03, 0x00, 0x45, 0x0B, 0x05, 0xA6, 0x10, 0x0A, 0x02, 0x14, 0x03, 0x00, 0x10, 0x06, 0x09, +/* 00000610 */ 0x06, 0x00, 0x45, 0x00, 0x08, 0x09, 0xC7, 0x00, 0xA6, 0x10, 0x0A, 0x03, 0x14, 0x03, 0x00, 0x10, +/* 00000620 */ 0x07, 0x09, 0x48, 0x00, 0x43, 0x10, 0x09, 0x45, 0x09, 0x10, 0x15, 0x04, 0x00, 0x09, 0x09, 0x0E, +/* 00000630 */ 0x05, 0x00, 0x0B, 0xA9, 0x00, 0x09, 0xA7, 0x00, 0x12, 0x20, 0x00, 0x08, 0x09, 0x14, 0x03, 0x00, +/* 00000640 */ 0x08, 0x09, 0x09, 0x21, 0x00, 0x14, 0x03, 0x00, 0x08, 0x03, 0x09, 0x19, 0x00, 0x2E, 0x10, 0x06, +/* 00000650 */ 0x08, 0x2E, 0x11, 0x06, 0x09, 0x12, 0x03, 0x00, 0x10, 0x11, 0x09, 0x09, 0x00, 0x45, 0x00, 0x08, +/* 00000660 */ 0x09, 0x7C, 0x00, 0x09, 0x06, 0x00, 0x45, 0x00, 0x09, 0x09, 0x73, 0x00, 0x45, 0x0C, 0x08, 0xA8, +/* 00000670 */ 0x10, 0x45, 0x0D, 0x10, 0x45, 0x0E, 0x06, 0xEC, 0x00, 0xA6, 0x10, 0x0A, 0x04, 0x12, 0x03, 0x00, +/* 00000680 */ 0x0E, 0x10, 0x09, 0x52, 0x00, 0x97, 0x10, 0x0A, 0x0E, 0x43, 0x10, 0x10, 0x45, 0x0D, 0x10, 0x0E, +/* 00000690 */ 0x03, 0x00, 0x0B, 0x09, 0x3B, 0x00, 0x15, 0x03, 0x00, 0x0D, 0x0D, 0x09, 0x0B, 0x00, 0x45, 0x0B, +/* 000006A0 */ 0x05, 0xA9, 0x10, 0x45, 0x0C, 0x10, 0x09, 0x28, 0x00, 0x11, 0x20, 0x00, 0x0C, 0x0D, 0x14, 0x03, +/* 000006B0 */ 0x00, 0x0C, 0x0D, 0x09, 0x1B, 0x00, 0x14, 0x03, 0x00, 0x0C, 0x03, 0x09, 0x13, 0x00, 0x2E, 0x10, +/* 000006C0 */ 0x06, 0x0C, 0x2E, 0x11, 0x06, 0x0D, 0x11, 0x03, 0x00, 0x10, 0x11, 0x09, 0x03, 0x00, 0x45, 0x0C, +/* 000006D0 */ 0x0D, 0x26, 0x0E, 0x0E, 0x09, 0xA0, 0xFF, 0x45, 0x00, 0x0C, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, +/* 000006E0 */ 0x00, 0xD1, 0xFE, 0xDD, 0x02, 0xD1, 0xD1, 0xD1, 0xFE, 0x1D, 0x04, 0x1D, 0x0A, 0x00, 0x00, 0x00, +/* 000006F0 */ 0x0C, 0x00, 0x2A, 0x00, 0x0B, 0x00, 0x3C, 0x00, 0x03, 0x00, 0x20, 0x00, 0x06, 0x00, 0x1A, 0x00, +/* 00000700 */ 0x08, 0x00, 0x25, 0x00, 0x03, 0x00, 0x25, 0x00, 0x0C, 0x00, 0x2A, 0x00, 0x06, 0x00, 0x22, 0x00, +/* 00000710 */ 0x0C, 0x00, 0x2A, 0x00, 0x06, 0x00, 0x1E, 0x00, 0x09, 0x00, 0x36, 0x00, 0x05, 0x00, 0x26, 0x00, +/* 00000720 */ 0x25, 0x00, 0x83, 0x00, 0x09, 0x00, 0x40, 0x00, 0x06, 0x00, 0x30, 0x00, 0x03, 0x00, 0x1A, 0x00, +/* 00000730 */ 0x05, 0x00, 0x1B, 0x00, 0x05, 0x00, 0x0B, 0x00, 0x0C, 0x00, 0x29, 0x00, 0x0A, 0x00, 0x5F, 0x00, +/* 00000740 */ 0x07, 0x00, 0x3E, 0x00, 0x08, 0x00, 0x2B, 0x00, 0x03, 0x00, 0x22, 0x00, 0x08, 0x00, 0x2A, 0x00, +/* 00000750 */ 0x25, 0x00, 0x7A, 0x00, 0x03, 0x00, 0x5F, 0xFE, 0x06, 0x00, 0xD1, 0x01, 0x08, 0x00, 0x10, 0x00, +/* 00000760 */ 0x00, 0x00}; + +//Bytecode generated from Object_constructor.js +const char Library_Bytecode_Object_constructor[] = { +/* 00000000 */ 0x43, 0x68, 0x42, 0x63, 0x4F, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00000010 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0xFE, 0xD9, 0x02, 0x00, 0xFE, +/* 00000020 */ 0x44, 0x06, 0xFE, 0x44, 0x06, 0x35, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x0E, 0x02, 0x00, +/* 00000030 */ 0x00, 0x4E, 0x05, 0x00, 0x00, 0x0A, 0x6E, 0x00, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, 0x00, +/* 00000040 */ 0x9C, 0x00, 0x00, 0x00, 0x00, 0xB4, 0x00, 0x00, 0x00, 0x01, 0xDE, 0x00, 0x00, 0x00, 0x00, 0x04, +/* 00000050 */ 0x01, 0x00, 0x00, 0x00, 0x1A, 0x01, 0x00, 0x00, 0x00, 0x34, 0x01, 0x00, 0x00, 0x00, 0x46, 0x01, +/* 00000060 */ 0x00, 0x00, 0x00, 0x52, 0x01, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, +/* 00000070 */ 0x6C, 0x00, 0x6F, 0x00, 0x62, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x20, 0x00, 0x63, 0x00, 0x6F, 0x00, +/* 00000080 */ 0x64, 0x00, 0x65, 0x00, 0x00, 0x00, 0x75, 0x00, 0x73, 0x00, 0x65, 0x00, 0x20, 0x00, 0x73, 0x00, +/* 00000090 */ 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x63, 0x00, 0x74, 0x00, 0x00, 0x00, 0x66, 0x00, 0x72, 0x00, +/* 000000A0 */ 0x6F, 0x00, 0x6D, 0x00, 0x45, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x65, 0x00, +/* 000000B0 */ 0x73, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, +/* 000000C0 */ 0x44, 0x00, 0x65, 0x00, 0x66, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x50, 0x00, 0x72, 0x00, +/* 000000D0 */ 0x6F, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x4F, 0x00, +/* 000000E0 */ 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x72, 0x00, +/* 000000F0 */ 0x6F, 0x00, 0x6D, 0x00, 0x45, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x65, 0x00, +/* 00000100 */ 0x73, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x72, 0x00, +/* 00000110 */ 0x61, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, +/* 00000120 */ 0x66, 0x00, 0x69, 0x00, 0x67, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x62, 0x00, 0x6C, 0x00, +/* 00000130 */ 0x65, 0x00, 0x00, 0x00, 0x77, 0x00, 0x72, 0x00, 0x69, 0x00, 0x74, 0x00, 0x61, 0x00, 0x62, 0x00, +/* 00000140 */ 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x76, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x65, 0x00, +/* 00000150 */ 0x00, 0x00, 0x6F, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x00, 0x00, +/* 00000160 */ 0x2B, 0x00, 0x00, 0x00, 0x00, 0x6A, 0x00, 0x00, 0x00, 0x9B, 0x00, 0x00, 0x00, 0xE7, 0x00, 0x00, +/* 00000170 */ 0x00, 0x51, 0x01, 0x00, 0x00, 0xBB, 0x01, 0x00, 0x00, 0xBC, 0x01, 0x00, 0x00, 0xCA, 0x01, 0x00, +/* 00000180 */ 0x00, 0xCB, 0x01, 0x00, 0x00, 0xE3, 0x01, 0x00, 0x00, 0x0B, 0x02, 0x00, 0x00, 0x0C, 0x02, 0x00, +/* 00000190 */ 0x00, 0x4C, 0x02, 0x00, 0x00, 0xA2, 0x02, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, +/* 000001A0 */ 0x00, 0x46, 0x03, 0x00, 0x00, 0x69, 0x03, 0x00, 0x00, 0xA4, 0x03, 0x00, 0x00, 0xE7, 0x03, 0x00, +/* 000001B0 */ 0x00, 0xF1, 0x03, 0x00, 0x00, 0xF2, 0x03, 0x00, 0x00, 0x08, 0x04, 0x00, 0x00, 0x29, 0x04, 0x00, +/* 000001C0 */ 0x00, 0x48, 0x04, 0x00, 0x00, 0x69, 0x04, 0x00, 0x00, 0x86, 0x04, 0x00, 0x00, 0xA4, 0x04, 0x00, +/* 000001D0 */ 0x00, 0xAF, 0x04, 0x00, 0x00, 0xB0, 0x04, 0x00, 0x00, 0xC1, 0x04, 0x00, 0x00, 0xE9, 0x04, 0x00, +/* 000001E0 */ 0x00, 0x28, 0x05, 0x00, 0x00, 0x7A, 0x05, 0x00, 0x00, 0x88, 0x05, 0x00, 0x00, 0x89, 0x05, 0x00, +/* 000001F0 */ 0x00, 0xA5, 0x05, 0x00, 0x00, 0xD2, 0x05, 0x00, 0x00, 0x1C, 0x06, 0x00, 0x00, 0x26, 0x06, 0x00, +/* 00000200 */ 0x00, 0x38, 0x06, 0x00, 0x00, 0x40, 0x06, 0x00, 0x00, 0x44, 0x06, 0x00, 0x00, 0x00, 0x03, 0x73, +/* 00000210 */ 0x0C, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, 0xA8, 0x41, 0xC0, 0x00, 0xFE, 0xD9, 0x02, 0x00, 0xFE, +/* 00000220 */ 0xBC, 0x01, 0xFE, 0xBC, 0x01, 0x01, 0x40, 0xFE, 0x00, 0x90, 0xFE, 0xBC, 0x01, 0xFE, 0x88, 0x04, +/* 00000230 */ 0xFE, 0x88, 0x04, 0x01, 0x04, 0x04, 0x04, 0x04, 0x03, 0x05, 0xFE, 0xDA, 0x02, 0x0A, 0x07, 0xA8, +/* 00000240 */ 0x00, 0xD6, 0x00, 0x04, 0x24, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x00, 0x00, 0x51, 0x02, 0x00, +/* 00000250 */ 0x00, 0x7F, 0x1C, 0x00, 0xC0, 0x03, 0x10, 0x0B, 0x00, 0x08, 0x01, 0xA2, 0x41, 0xD1, 0x00, 0x01, +/* 00000260 */ 0xFE, 0xCC, 0x01, 0xFE, 0xCC, 0x01, 0x01, 0x40, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0xCC, 0x01, +/* 00000270 */ 0xFE, 0x75, 0x04, 0xFE, 0x75, 0x04, 0x05, 0x03, 0x06, 0x04, 0x15, 0x14, 0x08, 0x08, 0x08, 0x08, +/* 00000280 */ 0x05, 0x06, 0xFE, 0xDB, 0x02, 0x46, 0x5E, 0x06, 0x03, 0x00, 0x45, 0x04, 0x06, 0x01, 0x58, 0x01, +/* 00000290 */ 0x06, 0x5E, 0x07, 0x04, 0x01, 0x76, 0x07, 0x06, 0x02, 0x01, 0x58, 0x01, 0x06, 0x5E, 0x07, 0x04, +/* 000002A0 */ 0x03, 0x76, 0x07, 0x06, 0x04, 0x01, 0x58, 0x01, 0x06, 0x5E, 0x07, 0x04, 0x05, 0x76, 0x07, 0x06, +/* 000002B0 */ 0x06, 0x6C, 0x06, 0x04, 0x07, 0x07, 0x03, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x02, 0xD6, 0x00, +/* 000002C0 */ 0x07, 0x59, 0x02, 0x07, 0x1F, 0x03, 0xFF, 0x06, 0xA8, 0x00, 0x24, 0x00, 0x59, 0xFE, 0xAA, 0x02, +/* 000002D0 */ 0xFE, 0xAA, 0x02, 0xFE, 0xB4, 0x02, 0xFE, 0xB4, 0x02, 0xFE, 0x8F, 0x02, 0xFE, 0xDC, 0x02, 0xFE, +/* 000002E0 */ 0x7F, 0x02, 0xFE, 0xE7, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x29, 0x00, 0x0C, 0x00, +/* 000002F0 */ 0x40, 0x00, 0x0C, 0x00, 0x56, 0x00, 0x0C, 0x00, 0x61, 0x00, 0x19, 0x00, 0x39, 0x03, 0x00, 0x03, +/* 00000300 */ 0x03, 0x00, 0x00, 0x7F, 0x3C, 0x00, 0xC6, 0x53, 0x40, 0x53, 0x00, 0x0F, 0x2D, 0xB2, 0x41, 0xD1, +/* 00000310 */ 0x00, 0x02, 0xFE, 0x30, 0x03, 0xFE, 0x30, 0x03, 0x05, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0x30, +/* 00000320 */ 0x03, 0xFE, 0x0D, 0x03, 0xFE, 0x0D, 0x03, 0x0D, 0x0D, 0x14, 0x09, 0x70, 0x6A, 0x25, 0x01, 0x01, +/* 00000330 */ 0x0E, 0x0E, 0x0E, 0x0E, 0x01, 0x01, 0x14, 0x8A, 0xFE, 0x08, 0x01, 0x07, 0x05, 0xFE, 0xDD, 0x02, +/* 00000340 */ 0x06, 0xFE, 0xDE, 0x02, 0x0B, 0x06, 0xFE, 0xDF, 0x02, 0x06, 0xFE, 0xE0, 0x02, 0x06, 0xFE, 0xE1, +/* 00000350 */ 0x02, 0x06, 0xFE, 0xE2, 0x02, 0x01, 0x00, 0x01, 0x01, 0x08, 0xFE, 0x6F, 0x01, 0x4E, 0x0E, 0x4E, +/* 00000360 */ 0x0F, 0x4E, 0x10, 0x4E, 0x11, 0x14, 0x0A, 0x00, 0x0D, 0x02, 0xA8, 0x15, 0x14, 0x03, 0x00, 0x0D, +/* 00000370 */ 0x15, 0x09, 0x15, 0x00, 0x01, 0x58, 0x01, 0x16, 0x6C, 0x15, 0x16, 0x00, 0x07, 0x02, 0x00, 0x59, +/* 00000380 */ 0x00, 0x16, 0x59, 0x01, 0x03, 0x1F, 0x02, 0xFF, 0x15, 0xCD, 0x15, 0x45, 0x0E, 0x15, 0xCE, 0x00, +/* 00000390 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x7A, 0x05, 0x15, 0x01, 0x7A, +/* 000003A0 */ 0x05, 0x15, 0x02, 0x7A, 0x05, 0x15, 0x03, 0xA8, 0x16, 0x7A, 0x16, 0x15, 0x04, 0x45, 0x0F, 0x15, +/* 000003B0 */ 0xA8, 0x15, 0x45, 0x10, 0x15, 0x0D, 0x05, 0x00, 0x0D, 0x0C, 0x01, 0x73, 0x01, 0x10, 0x16, 0x44, +/* 000003C0 */ 0x18, 0x0D, 0x6C, 0x15, 0x18, 0x05, 0x07, 0x01, 0x00, 0x59, 0x00, 0x18, 0x1F, 0x01, 0x15, 0x15, +/* 000003D0 */ 0x18, 0x05, 0x00, 0x15, 0x01, 0x73, 0x01, 0x8F, 0x13, 0x6C, 0x16, 0x15, 0x06, 0xAD, 0x12, 0xAD, +/* 000003E0 */ 0x13, 0xE8, 0xBA, 0x00, 0xE7, 0x82, 0x00, 0xEC, 0x00, 0xAD, 0x12, 0xAD, 0x13, 0x07, 0x01, 0x00, +/* 000003F0 */ 0x59, 0x00, 0x15, 0x1F, 0x01, 0x17, 0x16, 0x18, 0x05, 0x00, 0x17, 0x01, 0x73, 0x01, 0x8F, 0x13, +/* 00000400 */ 0x5E, 0x18, 0x17, 0x07, 0x0F, 0x5D, 0x00, 0x18, 0x5E, 0x17, 0x17, 0x08, 0xAB, 0x12, 0xAB, 0x13, +/* 00000410 */ 0x45, 0x11, 0x17, 0x2A, 0x18, 0x11, 0x15, 0x08, 0x00, 0x18, 0x09, 0x14, 0x03, 0x00, 0x11, 0x02, +/* 00000420 */ 0x09, 0x15, 0x00, 0x01, 0x58, 0x01, 0x19, 0x6C, 0x18, 0x19, 0x09, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 00000430 */ 0x19, 0x59, 0x01, 0x03, 0x1F, 0x02, 0xFF, 0x18, 0x97, 0x18, 0x11, 0x0A, 0x45, 0x10, 0x18, 0x97, +/* 00000440 */ 0x18, 0x11, 0x0B, 0x76, 0x18, 0x0F, 0x0A, 0x01, 0x58, 0x01, 0x19, 0x6C, 0x18, 0x19, 0x0B, 0x07, +/* 00000450 */ 0x04, 0x00, 0x59, 0x00, 0x19, 0x59, 0x01, 0x0E, 0x59, 0x02, 0x10, 0x59, 0x03, 0x0F, 0x1F, 0x04, +/* 00000460 */ 0xFF, 0x18, 0x09, 0x82, 0xFF, 0xEB, 0x09, 0x31, 0x00, 0xE9, 0x16, 0x0E, 0x28, 0x00, 0x12, 0xAE, +/* 00000470 */ 0x13, 0xE7, 0x20, 0x00, 0x5E, 0x17, 0x15, 0x0C, 0x0C, 0x13, 0x00, 0x17, 0x0C, 0x07, 0x01, 0x00, +/* 00000480 */ 0x59, 0x00, 0x15, 0x1F, 0x01, 0x17, 0x17, 0x18, 0x05, 0x00, 0x17, 0x01, 0x73, 0x01, 0x8F, 0x13, +/* 00000490 */ 0xEB, 0x09, 0x03, 0x00, 0xE9, 0x17, 0xEB, 0x23, 0x16, 0xEB, 0xEB, 0x09, 0x24, 0x00, 0x01, 0x70, +/* 000004A0 */ 0x01, 0x0E, 0x1C, 0x00, 0x13, 0x5E, 0x16, 0x15, 0x0D, 0x0C, 0x13, 0x00, 0x16, 0x0C, 0x07, 0x01, +/* 000004B0 */ 0x00, 0x59, 0x00, 0x15, 0x1F, 0x01, 0x16, 0x16, 0x18, 0x05, 0x00, 0x16, 0x01, 0x73, 0x01, 0x8F, +/* 000004C0 */ 0x13, 0xEA, 0x45, 0x00, 0x0E, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x01, 0x18, 0x00, 0x00, +/* 000004D0 */ 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, +/* 000004E0 */ 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0xFE, 0xAA, 0x02, 0xFE, 0x94, +/* 000004F0 */ 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x97, 0x01, 0x14, 0xFE, 0x07, 0x01, 0x74, 0xFE, +/* 00000500 */ 0x97, 0x01, 0xFE, 0xB4, 0x02, 0xFE, 0x97, 0x01, 0xFE, 0xDC, 0x02, 0xFE, 0x35, 0x01, 0xFE, 0x35, +/* 00000510 */ 0x01, 0xFE, 0x71, 0x03, 0x0E, 0x08, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x3F, 0x00, 0x15, 0x00, 0x4A, +/* 00000520 */ 0x00, 0x05, 0x00, 0x16, 0x00, 0x22, 0x00, 0xA8, 0x00, 0x05, 0x00, 0x11, 0x00, 0x34, 0x00, 0x05, +/* 00000530 */ 0x00, 0x2A, 0x00, 0x27, 0x00, 0x10, 0x00, 0x43, 0x00, 0x15, 0x00, 0x5D, 0x00, 0x07, 0x00, 0x1C, +/* 00000540 */ 0x00, 0x08, 0x00, 0x2D, 0x00, 0x7B, 0x00, 0x50, 0x00, 0x08, 0x00, 0x0E, 0x00, 0x00, 0x00}; + +#endif + +#ifdef ENABLE_INTL_OBJECT + +//Bytecode generated from Intl.js +const char Library_Bytecode_Intl[] = { +/* 00000000 */ 0x43, 0x68, 0x42, 0x63, 0x03, 0xA7, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00000010 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0xFE, 0xD9, 0x02, 0x00, 0xFF, +/* 00000020 */ 0x2E, 0xB2, 0x02, 0x00, 0xFF, 0x2E, 0xB2, 0x02, 0x00, 0x39, 0x00, 0x00, 0x00, 0xC8, 0x48, 0x00, +/* 00000030 */ 0x00, 0x38, 0x83, 0x00, 0x00, 0x02, 0xA7, 0x01, 0x00, 0xFE, 0x2C, 0x02, 0x1E, 0x0B, 0x00, 0x00, +/* 00000040 */ 0x00, 0x36, 0x0B, 0x00, 0x00, 0x00, 0x4C, 0x0B, 0x00, 0x00, 0x01, 0x60, 0x0B, 0x00, 0x00, 0x01, +/* 00000050 */ 0x7A, 0x0B, 0x00, 0x00, 0x01, 0x98, 0x0B, 0x00, 0x00, 0x01, 0xBA, 0x0B, 0x00, 0x00, 0x01, 0xD2, +/* 00000060 */ 0x0B, 0x00, 0x00, 0x01, 0xFC, 0x0B, 0x00, 0x00, 0x01, 0x22, 0x0C, 0x00, 0x00, 0x01, 0x56, 0x0C, +/* 00000070 */ 0x00, 0x00, 0x01, 0x90, 0x0C, 0x00, 0x00, 0x01, 0xBC, 0x0C, 0x00, 0x00, 0x01, 0xE6, 0x0C, 0x00, +/* 00000080 */ 0x00, 0x01, 0x10, 0x0D, 0x00, 0x00, 0x01, 0x3A, 0x0D, 0x00, 0x00, 0x01, 0x5E, 0x0D, 0x00, 0x00, +/* 00000090 */ 0x01, 0x88, 0x0D, 0x00, 0x00, 0x01, 0xB0, 0x0D, 0x00, 0x00, 0x01, 0xC0, 0x0D, 0x00, 0x00, 0x01, +/* 000000A0 */ 0xEC, 0x0D, 0x00, 0x00, 0x01, 0x20, 0x0E, 0x00, 0x00, 0x01, 0x54, 0x0E, 0x00, 0x00, 0x01, 0x78, +/* 000000B0 */ 0x0E, 0x00, 0x00, 0x01, 0x9C, 0x0E, 0x00, 0x00, 0x01, 0xAE, 0x0E, 0x00, 0x00, 0x01, 0xD0, 0x0E, +/* 000000C0 */ 0x00, 0x00, 0x01, 0xF8, 0x0E, 0x00, 0x00, 0x01, 0x20, 0x0F, 0x00, 0x00, 0x01, 0x3E, 0x0F, 0x00, +/* 000000D0 */ 0x00, 0x01, 0x6A, 0x0F, 0x00, 0x00, 0x01, 0x9E, 0x0F, 0x00, 0x00, 0x01, 0xDA, 0x0F, 0x00, 0x00, +/* 000000E0 */ 0x01, 0x1A, 0x10, 0x00, 0x00, 0x01, 0x68, 0x10, 0x00, 0x00, 0x01, 0x90, 0x10, 0x00, 0x00, 0x01, +/* 000000F0 */ 0xA2, 0x10, 0x00, 0x00, 0x01, 0xC8, 0x10, 0x00, 0x00, 0x01, 0xDC, 0x10, 0x00, 0x00, 0x01, 0xE6, +/* 00000100 */ 0x10, 0x00, 0x00, 0x01, 0xEA, 0x10, 0x00, 0x00, 0x00, 0xF2, 0x10, 0x00, 0x00, 0x00, 0xFE, 0x10, +/* 00000110 */ 0x00, 0x00, 0x00, 0x06, 0x11, 0x00, 0x00, 0x00, 0x0E, 0x11, 0x00, 0x00, 0x00, 0x26, 0x11, 0x00, +/* 00000120 */ 0x00, 0x00, 0x3E, 0x11, 0x00, 0x00, 0x00, 0x4E, 0x11, 0x00, 0x00, 0x00, 0x5A, 0x11, 0x00, 0x00, +/* 00000130 */ 0x00, 0x6E, 0x11, 0x00, 0x00, 0x01, 0x8A, 0x11, 0x00, 0x00, 0x00, 0x96, 0x11, 0x00, 0x00, 0x00, +/* 00000140 */ 0xA4, 0x11, 0x00, 0x00, 0x00, 0xB4, 0x11, 0x00, 0x00, 0x00, 0xBE, 0x11, 0x00, 0x00, 0x01, 0xD8, +/* 00000150 */ 0x11, 0x00, 0x00, 0x00, 0xE0, 0x11, 0x00, 0x00, 0x00, 0xEE, 0x11, 0x00, 0x00, 0x00, 0xFA, 0x11, +/* 00000160 */ 0x00, 0x00, 0x00, 0x08, 0x12, 0x00, 0x00, 0x00, 0x16, 0x12, 0x00, 0x00, 0x01, 0x24, 0x12, 0x00, +/* 00000170 */ 0x00, 0x00, 0x2E, 0x12, 0x00, 0x00, 0x00, 0x4C, 0x12, 0x00, 0x00, 0x00, 0x6A, 0x12, 0x00, 0x00, +/* 00000180 */ 0x00, 0x84, 0x12, 0x00, 0x00, 0x00, 0x92, 0x12, 0x00, 0x00, 0x00, 0xB0, 0x12, 0x00, 0x00, 0x00, +/* 00000190 */ 0xC2, 0x12, 0x00, 0x00, 0x00, 0xCE, 0x12, 0x00, 0x00, 0x00, 0xDE, 0x12, 0x00, 0x00, 0x00, 0xE8, +/* 000001A0 */ 0x12, 0x00, 0x00, 0x00, 0xF4, 0x12, 0x00, 0x00, 0x01, 0x06, 0x13, 0x00, 0x00, 0x01, 0x18, 0x13, +/* 000001B0 */ 0x00, 0x00, 0x01, 0x2A, 0x13, 0x00, 0x00, 0x01, 0x4C, 0x13, 0x00, 0x00, 0x01, 0x60, 0x13, 0x00, +/* 000001C0 */ 0x00, 0x01, 0x72, 0x13, 0x00, 0x00, 0x00, 0x7C, 0x13, 0x00, 0x00, 0x00, 0xAE, 0x13, 0x00, 0x00, +/* 000001D0 */ 0x00, 0xD6, 0x13, 0x00, 0x00, 0x00, 0xE2, 0x13, 0x00, 0x00, 0x00, 0xF4, 0x13, 0x00, 0x00, 0x00, +/* 000001E0 */ 0x0A, 0x14, 0x00, 0x00, 0x00, 0x24, 0x14, 0x00, 0x00, 0x00, 0x36, 0x14, 0x00, 0x00, 0x00, 0x50, +/* 000001F0 */ 0x14, 0x00, 0x00, 0x00, 0x6E, 0x14, 0x00, 0x00, 0x00, 0x86, 0x14, 0x00, 0x00, 0x00, 0x96, 0x14, +/* 00000200 */ 0x00, 0x00, 0x00, 0xA2, 0x14, 0x00, 0x00, 0x00, 0xE4, 0x14, 0x00, 0x00, 0x00, 0x2E, 0x15, 0x00, +/* 00000210 */ 0x00, 0x00, 0x7C, 0x15, 0x00, 0x00, 0x00, 0x86, 0x15, 0x00, 0x00, 0x00, 0xAC, 0x15, 0x00, 0x00, +/* 00000220 */ 0x01, 0xB8, 0x15, 0x00, 0x00, 0x01, 0xC2, 0x15, 0x00, 0x00, 0x00, 0xD0, 0x15, 0x00, 0x00, 0x01, +/* 00000230 */ 0xDC, 0x15, 0x00, 0x00, 0x01, 0xE8, 0x15, 0x00, 0x00, 0x01, 0xF8, 0x15, 0x00, 0x00, 0x00, 0x06, +/* 00000240 */ 0x16, 0x00, 0x00, 0x01, 0x12, 0x16, 0x00, 0x00, 0x01, 0x20, 0x16, 0x00, 0x00, 0x00, 0x2E, 0x16, +/* 00000250 */ 0x00, 0x00, 0x01, 0x3A, 0x16, 0x00, 0x00, 0x01, 0x4C, 0x16, 0x00, 0x00, 0x00, 0x5A, 0x16, 0x00, +/* 00000260 */ 0x00, 0x01, 0x68, 0x16, 0x00, 0x00, 0x00, 0x6A, 0x16, 0x00, 0x00, 0x01, 0x76, 0x16, 0x00, 0x00, +/* 00000270 */ 0x01, 0x82, 0x16, 0x00, 0x00, 0x01, 0x8E, 0x16, 0x00, 0x00, 0x01, 0x9C, 0x16, 0x00, 0x00, 0x01, +/* 00000280 */ 0xA8, 0x16, 0x00, 0x00, 0x01, 0xBC, 0x16, 0x00, 0x00, 0x01, 0xE0, 0x16, 0x00, 0x00, 0x01, 0x06, +/* 00000290 */ 0x17, 0x00, 0x00, 0x01, 0x1A, 0x17, 0x00, 0x00, 0x01, 0x4C, 0x17, 0x00, 0x00, 0x01, 0x6C, 0x17, +/* 000002A0 */ 0x00, 0x00, 0x01, 0x8E, 0x17, 0x00, 0x00, 0x01, 0xB4, 0x17, 0x00, 0x00, 0x01, 0xF0, 0x17, 0x00, +/* 000002B0 */ 0x00, 0x01, 0x18, 0x18, 0x00, 0x00, 0x01, 0x34, 0x18, 0x00, 0x00, 0x01, 0x52, 0x18, 0x00, 0x00, +/* 000002C0 */ 0x01, 0x7E, 0x18, 0x00, 0x00, 0x01, 0x9A, 0x18, 0x00, 0x00, 0x01, 0xBA, 0x18, 0x00, 0x00, 0x01, +/* 000002D0 */ 0xDC, 0x18, 0x00, 0x00, 0x01, 0xF6, 0x18, 0x00, 0x00, 0x01, 0x28, 0x19, 0x00, 0x00, 0x01, 0x66, +/* 000002E0 */ 0x19, 0x00, 0x00, 0x01, 0x94, 0x19, 0x00, 0x00, 0x01, 0xC2, 0x19, 0x00, 0x00, 0x01, 0xF2, 0x19, +/* 000002F0 */ 0x00, 0x00, 0x01, 0x2A, 0x1A, 0x00, 0x00, 0x01, 0x4C, 0x1A, 0x00, 0x00, 0x01, 0x78, 0x1A, 0x00, +/* 00000300 */ 0x00, 0x01, 0xA2, 0x1A, 0x00, 0x00, 0x01, 0xCC, 0x1A, 0x00, 0x00, 0x01, 0xFC, 0x1A, 0x00, 0x00, +/* 00000310 */ 0x01, 0x2C, 0x1B, 0x00, 0x00, 0x01, 0x4E, 0x1B, 0x00, 0x00, 0x01, 0x6E, 0x1B, 0x00, 0x00, 0x01, +/* 00000320 */ 0x86, 0x1B, 0x00, 0x00, 0x01, 0xC8, 0x1B, 0x00, 0x00, 0x01, 0x00, 0x1C, 0x00, 0x00, 0x01, 0x4A, +/* 00000330 */ 0x1C, 0x00, 0x00, 0x01, 0x8A, 0x1C, 0x00, 0x00, 0x01, 0xD8, 0x1C, 0x00, 0x00, 0x01, 0x1C, 0x1D, +/* 00000340 */ 0x00, 0x00, 0x01, 0x4E, 0x1D, 0x00, 0x00, 0x01, 0x7A, 0x1D, 0x00, 0x00, 0x01, 0x7E, 0x1D, 0x00, +/* 00000350 */ 0x00, 0x01, 0x8C, 0x1D, 0x00, 0x00, 0x00, 0x94, 0x1D, 0x00, 0x00, 0x00, 0x9C, 0x1D, 0x00, 0x00, +/* 00000360 */ 0x00, 0xB8, 0x1D, 0x00, 0x00, 0x00, 0xD4, 0x1D, 0x00, 0x00, 0x00, 0xE8, 0x1D, 0x00, 0x00, 0x00, +/* 00000370 */ 0xF8, 0x1D, 0x00, 0x00, 0x00, 0x10, 0x1E, 0x00, 0x00, 0x00, 0x30, 0x1E, 0x00, 0x00, 0x00, 0x40, +/* 00000380 */ 0x1E, 0x00, 0x00, 0x00, 0x52, 0x1E, 0x00, 0x00, 0x00, 0x66, 0x1E, 0x00, 0x00, 0x00, 0x74, 0x1E, +/* 00000390 */ 0x00, 0x00, 0x00, 0x92, 0x1E, 0x00, 0x00, 0x00, 0x9E, 0x1E, 0x00, 0x00, 0x00, 0xB0, 0x1E, 0x00, +/* 000003A0 */ 0x00, 0x00, 0xC0, 0x1E, 0x00, 0x00, 0x00, 0xD2, 0x1E, 0x00, 0x00, 0x00, 0xE4, 0x1E, 0x00, 0x00, +/* 000003B0 */ 0x00, 0xF6, 0x1E, 0x00, 0x00, 0x01, 0x02, 0x1F, 0x00, 0x00, 0x00, 0x24, 0x1F, 0x00, 0x00, 0x00, +/* 000003C0 */ 0x46, 0x1F, 0x00, 0x00, 0x00, 0x58, 0x1F, 0x00, 0x00, 0x00, 0x7A, 0x1F, 0x00, 0x00, 0x00, 0x8A, +/* 000003D0 */ 0x1F, 0x00, 0x00, 0x00, 0x9E, 0x1F, 0x00, 0x00, 0x00, 0xAC, 0x1F, 0x00, 0x00, 0x00, 0xBC, 0x1F, +/* 000003E0 */ 0x00, 0x00, 0x00, 0xC2, 0x1F, 0x00, 0x00, 0x00, 0xD0, 0x1F, 0x00, 0x00, 0x00, 0xD4, 0x1F, 0x00, +/* 000003F0 */ 0x00, 0x01, 0xF6, 0x1F, 0x00, 0x00, 0x01, 0x0A, 0x20, 0x00, 0x00, 0x01, 0x0E, 0x20, 0x00, 0x00, +/* 00000400 */ 0x01, 0x26, 0x20, 0x00, 0x00, 0x01, 0x34, 0x20, 0x00, 0x00, 0x01, 0x5A, 0x20, 0x00, 0x00, 0x00, +/* 00000410 */ 0x68, 0x20, 0x00, 0x00, 0x01, 0x7E, 0x20, 0x00, 0x00, 0x00, 0x84, 0x20, 0x00, 0x00, 0x00, 0x8C, +/* 00000420 */ 0x20, 0x00, 0x00, 0x01, 0xA8, 0x20, 0x00, 0x00, 0x00, 0xB2, 0x20, 0x00, 0x00, 0x00, 0xC2, 0x20, +/* 00000430 */ 0x00, 0x00, 0x00, 0xD0, 0x20, 0x00, 0x00, 0x00, 0xDE, 0x20, 0x00, 0x00, 0x00, 0xE4, 0x20, 0x00, +/* 00000440 */ 0x00, 0x00, 0xEA, 0x20, 0x00, 0x00, 0x00, 0xF4, 0x20, 0x00, 0x00, 0x00, 0xF8, 0x20, 0x00, 0x00, +/* 00000450 */ 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x04, 0x21, 0x00, 0x00, 0x00, 0x1A, 0x21, 0x00, 0x00, 0x01, +/* 00000460 */ 0x40, 0x21, 0x00, 0x00, 0x00, 0x4C, 0x21, 0x00, 0x00, 0x00, 0x58, 0x21, 0x00, 0x00, 0x00, 0x60, +/* 00000470 */ 0x21, 0x00, 0x00, 0x00, 0x64, 0x21, 0x00, 0x00, 0x00, 0x68, 0x21, 0x00, 0x00, 0x00, 0x1C, 0x22, +/* 00000480 */ 0x00, 0x00, 0x00, 0xB8, 0x22, 0x00, 0x00, 0x00, 0x3E, 0x23, 0x00, 0x00, 0x00, 0x4A, 0x23, 0x00, +/* 00000490 */ 0x00, 0x00, 0x52, 0x23, 0x00, 0x00, 0x00, 0x68, 0x23, 0x00, 0x00, 0x00, 0x82, 0x23, 0x00, 0x00, +/* 000004A0 */ 0x00, 0x9C, 0x23, 0x00, 0x00, 0x00, 0xA6, 0x23, 0x00, 0x00, 0x00, 0xBC, 0x23, 0x00, 0x00, 0x00, +/* 000004B0 */ 0xCA, 0x23, 0x00, 0x00, 0x00, 0xD8, 0x23, 0x00, 0x00, 0x00, 0xE2, 0x23, 0x00, 0x00, 0x00, 0xF0, +/* 000004C0 */ 0x23, 0x00, 0x00, 0x00, 0x04, 0x24, 0x00, 0x00, 0x00, 0x1E, 0x24, 0x00, 0x00, 0x00, 0x2A, 0x24, +/* 000004D0 */ 0x00, 0x00, 0x00, 0x38, 0x24, 0x00, 0x00, 0x00, 0x3E, 0x24, 0x00, 0x00, 0x00, 0x4A, 0x24, 0x00, +/* 000004E0 */ 0x00, 0x00, 0x52, 0x24, 0x00, 0x00, 0x00, 0x62, 0x24, 0x00, 0x00, 0x00, 0x6E, 0x24, 0x00, 0x00, +/* 000004F0 */ 0x00, 0x7E, 0x24, 0x00, 0x00, 0x00, 0x8A, 0x24, 0x00, 0x00, 0x00, 0x94, 0x24, 0x00, 0x00, 0x00, +/* 00000500 */ 0x9A, 0x24, 0x00, 0x00, 0x00, 0x9E, 0x24, 0x00, 0x00, 0x00, 0xA2, 0x24, 0x00, 0x00, 0x01, 0xA6, +/* 00000510 */ 0x24, 0x00, 0x00, 0x01, 0xAA, 0x24, 0x00, 0x00, 0x01, 0xBC, 0x24, 0x00, 0x00, 0x01, 0xCA, 0x24, +/* 00000520 */ 0x00, 0x00, 0x01, 0xD8, 0x24, 0x00, 0x00, 0x01, 0xEA, 0x24, 0x00, 0x00, 0x01, 0x00, 0x25, 0x00, +/* 00000530 */ 0x00, 0x00, 0x14, 0x25, 0x00, 0x00, 0x00, 0x22, 0x25, 0x00, 0x00, 0x01, 0x46, 0x25, 0x00, 0x00, +/* 00000540 */ 0x01, 0x54, 0x25, 0x00, 0x00, 0x00, 0x7E, 0x25, 0x00, 0x00, 0x00, 0xAA, 0x25, 0x00, 0x00, 0x00, +/* 00000550 */ 0xD6, 0x25, 0x00, 0x00, 0x00, 0x08, 0x26, 0x00, 0x00, 0x00, 0x3A, 0x26, 0x00, 0x00, 0x00, 0x4C, +/* 00000560 */ 0x26, 0x00, 0x00, 0x00, 0x68, 0x26, 0x00, 0x00, 0x00, 0x76, 0x26, 0x00, 0x00, 0x01, 0x90, 0x26, +/* 00000570 */ 0x00, 0x00, 0x01, 0x9A, 0x26, 0x00, 0x00, 0x01, 0xAC, 0x26, 0x00, 0x00, 0x01, 0xD2, 0x26, 0x00, +/* 00000580 */ 0x00, 0x01, 0x02, 0x27, 0x00, 0x00, 0x01, 0x26, 0x27, 0x00, 0x00, 0x00, 0x34, 0x27, 0x00, 0x00, +/* 00000590 */ 0x00, 0x72, 0x27, 0x00, 0x00, 0x00, 0x8E, 0x27, 0x00, 0x00, 0x00, 0xCE, 0x27, 0x00, 0x00, 0x00, +/* 000005A0 */ 0xE2, 0x27, 0x00, 0x00, 0x00, 0xFA, 0x27, 0x00, 0x00, 0x00, 0x1A, 0x28, 0x00, 0x00, 0x00, 0x6A, +/* 000005B0 */ 0x28, 0x00, 0x00, 0x00, 0x82, 0x28, 0x00, 0x00, 0x00, 0x92, 0x28, 0x00, 0x00, 0x00, 0x9E, 0x28, +/* 000005C0 */ 0x00, 0x00, 0x00, 0xA8, 0x28, 0x00, 0x00, 0x00, 0xB6, 0x28, 0x00, 0x00, 0x00, 0xBC, 0x28, 0x00, +/* 000005D0 */ 0x00, 0x00, 0xC2, 0x28, 0x00, 0x00, 0x00, 0xC8, 0x28, 0x00, 0x00, 0x00, 0xD8, 0x28, 0x00, 0x00, +/* 000005E0 */ 0x01, 0xEC, 0x28, 0x00, 0x00, 0x00, 0xF8, 0x28, 0x00, 0x00, 0x00, 0x04, 0x29, 0x00, 0x00, 0x00, +/* 000005F0 */ 0x10, 0x29, 0x00, 0x00, 0x00, 0x20, 0x29, 0x00, 0x00, 0x00, 0x38, 0x29, 0x00, 0x00, 0x00, 0x42, +/* 00000600 */ 0x29, 0x00, 0x00, 0x00, 0x50, 0x29, 0x00, 0x00, 0x00, 0x5A, 0x29, 0x00, 0x00, 0x00, 0x6A, 0x29, +/* 00000610 */ 0x00, 0x00, 0x00, 0x8E, 0x29, 0x00, 0x00, 0x01, 0x9E, 0x29, 0x00, 0x00, 0x01, 0xB2, 0x29, 0x00, +/* 00000620 */ 0x00, 0x01, 0xDA, 0x29, 0x00, 0x00, 0x00, 0xF6, 0x29, 0x00, 0x00, 0x01, 0x10, 0x2A, 0x00, 0x00, +/* 00000630 */ 0x00, 0x46, 0x2A, 0x00, 0x00, 0x00, 0x8C, 0x2A, 0x00, 0x00, 0x01, 0xBA, 0x2A, 0x00, 0x00, 0x01, +/* 00000640 */ 0xE6, 0x2A, 0x00, 0x00, 0x01, 0x0C, 0x2B, 0x00, 0x00, 0x00, 0x1A, 0x2B, 0x00, 0x00, 0x00, 0x5A, +/* 00000650 */ 0x2B, 0x00, 0x00, 0x00, 0x7E, 0x2B, 0x00, 0x00, 0x00, 0xC4, 0x2B, 0x00, 0x00, 0x00, 0x18, 0x2C, +/* 00000660 */ 0x00, 0x00, 0x00, 0x70, 0x2C, 0x00, 0x00, 0x00, 0x86, 0x2C, 0x00, 0x00, 0x00, 0x94, 0x2C, 0x00, +/* 00000670 */ 0x00, 0x00, 0xB0, 0x2C, 0x00, 0x00, 0x00, 0xB6, 0x2C, 0x00, 0x00, 0x01, 0xC2, 0x2C, 0x00, 0x00, +/* 00000680 */ 0x00, 0xD2, 0x2C, 0x00, 0x00, 0x00, 0xE2, 0x2C, 0x00, 0x00, 0x00, 0xF4, 0x2C, 0x00, 0x00, 0x00, +/* 00000690 */ 0x14, 0x2D, 0x00, 0x00, 0x00, 0x1E, 0x2D, 0x00, 0x00, 0x00, 0x2C, 0x2D, 0x00, 0x00, 0x00, 0x44, +/* 000006A0 */ 0x2D, 0x00, 0x00, 0x01, 0x74, 0x2D, 0x00, 0x00, 0x00, 0x92, 0x2D, 0x00, 0x00, 0x00, 0xCE, 0x2D, +/* 000006B0 */ 0x00, 0x00, 0x00, 0x18, 0x2E, 0x00, 0x00, 0x00, 0x38, 0x2E, 0x00, 0x00, 0x01, 0x50, 0x2E, 0x00, +/* 000006C0 */ 0x00, 0x01, 0xA2, 0x2E, 0x00, 0x00, 0x01, 0xC8, 0x2E, 0x00, 0x00, 0x01, 0xF2, 0x2E, 0x00, 0x00, +/* 000006D0 */ 0x01, 0x24, 0x2F, 0x00, 0x00, 0x01, 0x48, 0x2F, 0x00, 0x00, 0x01, 0x9A, 0x2F, 0x00, 0x00, 0x01, +/* 000006E0 */ 0xCA, 0x2F, 0x00, 0x00, 0x01, 0xF4, 0x2F, 0x00, 0x00, 0x00, 0xFE, 0x2F, 0x00, 0x00, 0x01, 0x0C, +/* 000006F0 */ 0x30, 0x00, 0x00, 0x01, 0x18, 0x30, 0x00, 0x00, 0x01, 0x22, 0x30, 0x00, 0x00, 0x01, 0x32, 0x30, +/* 00000700 */ 0x00, 0x00, 0x00, 0x42, 0x30, 0x00, 0x00, 0x00, 0x4A, 0x30, 0x00, 0x00, 0x00, 0x54, 0x30, 0x00, +/* 00000710 */ 0x00, 0x00, 0x60, 0x30, 0x00, 0x00, 0x00, 0x68, 0x30, 0x00, 0x00, 0x00, 0x72, 0x30, 0x00, 0x00, +/* 00000720 */ 0x00, 0x80, 0x30, 0x00, 0x00, 0x00, 0x8E, 0x30, 0x00, 0x00, 0x00, 0xA8, 0x30, 0x00, 0x00, 0x00, +/* 00000730 */ 0xCE, 0x30, 0x00, 0x00, 0x00, 0xF4, 0x30, 0x00, 0x00, 0x00, 0x30, 0x31, 0x00, 0x00, 0x00, 0x38, +/* 00000740 */ 0x31, 0x00, 0x00, 0x00, 0x40, 0x31, 0x00, 0x00, 0x00, 0x84, 0x31, 0x00, 0x00, 0x00, 0x8E, 0x31, +/* 00000750 */ 0x00, 0x00, 0x00, 0xD2, 0x31, 0x00, 0x00, 0x00, 0xDC, 0x31, 0x00, 0x00, 0x00, 0x04, 0x32, 0x00, +/* 00000760 */ 0x00, 0x00, 0x4E, 0x32, 0x00, 0x00, 0x00, 0xA6, 0x32, 0x00, 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, +/* 00000770 */ 0x01, 0x22, 0x33, 0x00, 0x00, 0x01, 0x42, 0x33, 0x00, 0x00, 0x01, 0x6E, 0x33, 0x00, 0x00, 0x01, +/* 00000780 */ 0x9A, 0x33, 0x00, 0x00, 0x01, 0xC2, 0x33, 0x00, 0x00, 0x01, 0xEA, 0x33, 0x00, 0x00, 0x00, 0xEE, +/* 00000790 */ 0x33, 0x00, 0x00, 0x01, 0xF2, 0x33, 0x00, 0x00, 0x01, 0xF6, 0x33, 0x00, 0x00, 0x01, 0xFA, 0x33, +/* 000007A0 */ 0x00, 0x00, 0x01, 0xFE, 0x33, 0x00, 0x00, 0x00, 0x02, 0x34, 0x00, 0x00, 0x00, 0x10, 0x34, 0x00, +/* 000007B0 */ 0x00, 0x01, 0x14, 0x34, 0x00, 0x00, 0x01, 0x22, 0x34, 0x00, 0x00, 0x01, 0x26, 0x34, 0x00, 0x00, +/* 000007C0 */ 0x01, 0x2A, 0x34, 0x00, 0x00, 0x01, 0x2E, 0x34, 0x00, 0x00, 0x01, 0x32, 0x34, 0x00, 0x00, 0x01, +/* 000007D0 */ 0x36, 0x34, 0x00, 0x00, 0x01, 0x3A, 0x34, 0x00, 0x00, 0x01, 0x3E, 0x34, 0x00, 0x00, 0x01, 0x42, +/* 000007E0 */ 0x34, 0x00, 0x00, 0x01, 0x46, 0x34, 0x00, 0x00, 0x01, 0x4A, 0x34, 0x00, 0x00, 0x01, 0x4E, 0x34, +/* 000007F0 */ 0x00, 0x00, 0x01, 0x52, 0x34, 0x00, 0x00, 0x01, 0x56, 0x34, 0x00, 0x00, 0x01, 0x5A, 0x34, 0x00, +/* 00000800 */ 0x00, 0x01, 0x5E, 0x34, 0x00, 0x00, 0x01, 0x62, 0x34, 0x00, 0x00, 0x01, 0x66, 0x34, 0x00, 0x00, +/* 00000810 */ 0x01, 0x6A, 0x34, 0x00, 0x00, 0x01, 0x6E, 0x34, 0x00, 0x00, 0x01, 0x72, 0x34, 0x00, 0x00, 0x01, +/* 00000820 */ 0x76, 0x34, 0x00, 0x00, 0x01, 0x7E, 0x34, 0x00, 0x00, 0x01, 0x86, 0x34, 0x00, 0x00, 0x01, 0x8E, +/* 00000830 */ 0x34, 0x00, 0x00, 0x01, 0x96, 0x34, 0x00, 0x00, 0x00, 0x9A, 0x34, 0x00, 0x00, 0x00, 0x9E, 0x34, +/* 00000840 */ 0x00, 0x00, 0x01, 0xB2, 0x34, 0x00, 0x00, 0x00, 0xB8, 0x34, 0x00, 0x00, 0x00, 0xBE, 0x34, 0x00, +/* 00000850 */ 0x00, 0x00, 0xD6, 0x34, 0x00, 0x00, 0x00, 0xE8, 0x34, 0x00, 0x00, 0x00, 0x36, 0x35, 0x00, 0x00, +/* 00000860 */ 0x00, 0x46, 0x35, 0x00, 0x00, 0x00, 0x56, 0x35, 0x00, 0x00, 0x00, 0x5E, 0x35, 0x00, 0x00, 0x00, +/* 00000870 */ 0x7A, 0x35, 0x00, 0x00, 0x00, 0x86, 0x35, 0x00, 0x00, 0x01, 0xBA, 0x35, 0x00, 0x00, 0x01, 0xD4, +/* 00000880 */ 0x35, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x1A, 0x36, 0x00, 0x00, 0x01, 0x2A, 0x36, +/* 00000890 */ 0x00, 0x00, 0x01, 0x3A, 0x36, 0x00, 0x00, 0x01, 0x4E, 0x36, 0x00, 0x00, 0x00, 0x8C, 0x36, 0x00, +/* 000008A0 */ 0x00, 0x00, 0xD2, 0x36, 0x00, 0x00, 0x00, 0x18, 0x37, 0x00, 0x00, 0x00, 0x58, 0x37, 0x00, 0x00, +/* 000008B0 */ 0x00, 0xA6, 0x37, 0x00, 0x00, 0x00, 0xB8, 0x37, 0x00, 0x00, 0x01, 0xE4, 0x37, 0x00, 0x00, 0x01, +/* 000008C0 */ 0x00, 0x38, 0x00, 0x00, 0x01, 0x2A, 0x38, 0x00, 0x00, 0x00, 0x4C, 0x38, 0x00, 0x00, 0x00, 0x94, +/* 000008D0 */ 0x38, 0x00, 0x00, 0x00, 0xD8, 0x38, 0x00, 0x00, 0x00, 0xE6, 0x38, 0x00, 0x00, 0x00, 0x3C, 0x39, +/* 000008E0 */ 0x00, 0x00, 0x00, 0x46, 0x39, 0x00, 0x00, 0x00, 0x58, 0x39, 0x00, 0x00, 0x00, 0x68, 0x39, 0x00, +/* 000008F0 */ 0x00, 0x01, 0x8A, 0x39, 0x00, 0x00, 0x01, 0xB8, 0x39, 0x00, 0x00, 0x00, 0xC4, 0x39, 0x00, 0x00, +/* 00000900 */ 0x01, 0xCA, 0x39, 0x00, 0x00, 0x00, 0x24, 0x3A, 0x00, 0x00, 0x00, 0x4E, 0x3A, 0x00, 0x00, 0x00, +/* 00000910 */ 0x76, 0x3A, 0x00, 0x00, 0x01, 0x88, 0x3A, 0x00, 0x00, 0x01, 0xA8, 0x3A, 0x00, 0x00, 0x00, 0xB0, +/* 00000920 */ 0x3A, 0x00, 0x00, 0x00, 0xC0, 0x3A, 0x00, 0x00, 0x00, 0xEA, 0x3A, 0x00, 0x00, 0x00, 0x06, 0x3B, +/* 00000930 */ 0x00, 0x00, 0x00, 0x24, 0x3B, 0x00, 0x00, 0x00, 0x38, 0x3B, 0x00, 0x00, 0x01, 0x4A, 0x3B, 0x00, +/* 00000940 */ 0x00, 0x01, 0x62, 0x3B, 0x00, 0x00, 0x00, 0x6C, 0x3B, 0x00, 0x00, 0x01, 0x76, 0x3B, 0x00, 0x00, +/* 00000950 */ 0x00, 0x84, 0x3B, 0x00, 0x00, 0x01, 0x90, 0x3B, 0x00, 0x00, 0x01, 0x9E, 0x3B, 0x00, 0x00, 0x01, +/* 00000960 */ 0xBA, 0x3B, 0x00, 0x00, 0x00, 0xE8, 0x3B, 0x00, 0x00, 0x00, 0x34, 0x3C, 0x00, 0x00, 0x00, 0x88, +/* 00000970 */ 0x3C, 0x00, 0x00, 0x00, 0xE0, 0x3C, 0x00, 0x00, 0x00, 0x1C, 0x3D, 0x00, 0x00, 0x01, 0x2E, 0x3D, +/* 00000980 */ 0x00, 0x00, 0x01, 0x60, 0x3D, 0x00, 0x00, 0x01, 0x90, 0x3D, 0x00, 0x00, 0x00, 0x9A, 0x3D, 0x00, +/* 00000990 */ 0x00, 0x00, 0xEC, 0x3D, 0x00, 0x00, 0x00, 0x0A, 0x3E, 0x00, 0x00, 0x00, 0x42, 0x3E, 0x00, 0x00, +/* 000009A0 */ 0x00, 0x50, 0x3E, 0x00, 0x00, 0x00, 0x80, 0x3E, 0x00, 0x00, 0x00, 0x84, 0x3E, 0x00, 0x00, 0x00, +/* 000009B0 */ 0x88, 0x3E, 0x00, 0x00, 0x01, 0xAE, 0x3E, 0x00, 0x00, 0x01, 0xBE, 0x3E, 0x00, 0x00, 0x01, 0xDA, +/* 000009C0 */ 0x3E, 0x00, 0x00, 0x01, 0x02, 0x3F, 0x00, 0x00, 0x01, 0x1A, 0x3F, 0x00, 0x00, 0x01, 0x2E, 0x3F, +/* 000009D0 */ 0x00, 0x00, 0x00, 0x40, 0x3F, 0x00, 0x00, 0x00, 0x4A, 0x3F, 0x00, 0x00, 0x01, 0x6A, 0x3F, 0x00, +/* 000009E0 */ 0x00, 0x00, 0xB8, 0x3F, 0x00, 0x00, 0x00, 0xBE, 0x3F, 0x00, 0x00, 0x01, 0xF0, 0x3F, 0x00, 0x00, +/* 000009F0 */ 0x01, 0x14, 0x40, 0x00, 0x00, 0x00, 0x24, 0x40, 0x00, 0x00, 0x01, 0x42, 0x40, 0x00, 0x00, 0x00, +/* 00000A00 */ 0x50, 0x40, 0x00, 0x00, 0x01, 0x6C, 0x40, 0x00, 0x00, 0x00, 0x7C, 0x40, 0x00, 0x00, 0x01, 0x9E, +/* 00000A10 */ 0x40, 0x00, 0x00, 0x00, 0xB0, 0x40, 0x00, 0x00, 0x01, 0xCE, 0x40, 0x00, 0x00, 0x00, 0xDC, 0x40, +/* 00000A20 */ 0x00, 0x00, 0x01, 0xFA, 0x40, 0x00, 0x00, 0x00, 0x08, 0x41, 0x00, 0x00, 0x01, 0x2A, 0x41, 0x00, +/* 00000A30 */ 0x00, 0x00, 0x46, 0x41, 0x00, 0x00, 0x01, 0x60, 0x41, 0x00, 0x00, 0x00, 0x6A, 0x41, 0x00, 0x00, +/* 00000A40 */ 0x01, 0x88, 0x41, 0x00, 0x00, 0x00, 0x96, 0x41, 0x00, 0x00, 0x01, 0xD0, 0x41, 0x00, 0x00, 0x01, +/* 00000A50 */ 0xFC, 0x41, 0x00, 0x00, 0x01, 0x38, 0x42, 0x00, 0x00, 0x01, 0x86, 0x42, 0x00, 0x00, 0x01, 0xB0, +/* 00000A60 */ 0x42, 0x00, 0x00, 0x01, 0xC2, 0x42, 0x00, 0x00, 0x00, 0xEE, 0x42, 0x00, 0x00, 0x00, 0x0C, 0x43, +/* 00000A70 */ 0x00, 0x00, 0x00, 0x2E, 0x43, 0x00, 0x00, 0x00, 0x42, 0x43, 0x00, 0x00, 0x00, 0x5E, 0x43, 0x00, +/* 00000A80 */ 0x00, 0x00, 0x82, 0x43, 0x00, 0x00, 0x00, 0x98, 0x43, 0x00, 0x00, 0x00, 0xC2, 0x43, 0x00, 0x00, +/* 00000A90 */ 0x00, 0xDE, 0x43, 0x00, 0x00, 0x00, 0xE4, 0x43, 0x00, 0x00, 0x00, 0x30, 0x44, 0x00, 0x00, 0x00, +/* 00000AA0 */ 0xFA, 0x44, 0x00, 0x00, 0x00, 0x10, 0x45, 0x00, 0x00, 0x00, 0x56, 0x45, 0x00, 0x00, 0x00, 0x60, +/* 00000AB0 */ 0x45, 0x00, 0x00, 0x00, 0x64, 0x45, 0x00, 0x00, 0x00, 0x68, 0x45, 0x00, 0x00, 0x00, 0x6C, 0x45, +/* 00000AC0 */ 0x00, 0x00, 0x00, 0x84, 0x45, 0x00, 0x00, 0x00, 0xA2, 0x45, 0x00, 0x00, 0x00, 0xEE, 0x45, 0x00, +/* 00000AD0 */ 0x00, 0x00, 0xCE, 0x46, 0x00, 0x00, 0x00, 0xE8, 0x46, 0x00, 0x00, 0x00, 0xF8, 0x46, 0x00, 0x00, +/* 00000AE0 */ 0x00, 0x0C, 0x47, 0x00, 0x00, 0x00, 0x20, 0x47, 0x00, 0x00, 0x00, 0xA2, 0x47, 0x00, 0x00, 0x00, +/* 00000AF0 */ 0xCE, 0x47, 0x00, 0x00, 0x00, 0xE6, 0x47, 0x00, 0x00, 0x00, 0xF8, 0x47, 0x00, 0x00, 0x00, 0x32, +/* 00000B00 */ 0x48, 0x00, 0x00, 0x00, 0x4A, 0x48, 0x00, 0x00, 0x00, 0x62, 0x48, 0x00, 0x00, 0x00, 0x6C, 0x48, +/* 00000B10 */ 0x00, 0x00, 0x01, 0x76, 0x48, 0x00, 0x00, 0x00, 0xC8, 0x48, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, +/* 00000B20 */ 0x6C, 0x00, 0x6F, 0x00, 0x62, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x20, 0x00, 0x63, 0x00, 0x6F, 0x00, +/* 00000B30 */ 0x64, 0x00, 0x65, 0x00, 0x00, 0x00, 0x75, 0x00, 0x73, 0x00, 0x65, 0x00, 0x20, 0x00, 0x73, 0x00, +/* 00000B40 */ 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x63, 0x00, 0x74, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, +/* 00000B50 */ 0x74, 0x00, 0x6C, 0x00, 0x43, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x00, 0x00, +/* 00000B60 */ 0x73, 0x00, 0x65, 0x00, 0x74, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, +/* 00000B70 */ 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x00, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, +/* 00000B80 */ 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x4C, 0x00, 0x65, 0x00, 0x6E, 0x00, +/* 00000B90 */ 0x67, 0x00, 0x74, 0x00, 0x68, 0x00, 0x00, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x6C, 0x00, +/* 00000BA0 */ 0x49, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, +/* 00000BB0 */ 0x46, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x00, 0x00, 0x52, 0x00, 0x61, 0x00, 0x69, 0x00, +/* 00000BC0 */ 0x73, 0x00, 0x65, 0x00, 0x41, 0x00, 0x73, 0x00, 0x73, 0x00, 0x65, 0x00, 0x72, 0x00, 0x74, 0x00, +/* 00000BD0 */ 0x00, 0x00, 0x4F, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x47, 0x00, +/* 00000BE0 */ 0x65, 0x00, 0x74, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, +/* 00000BF0 */ 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x4F, 0x00, 0x62, 0x00, +/* 00000C00 */ 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x49, 0x00, 0x73, 0x00, 0x45, 0x00, 0x78, 0x00, +/* 00000C10 */ 0x74, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x69, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, +/* 00000C20 */ 0x00, 0x00, 0x4F, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x47, 0x00, +/* 00000C30 */ 0x65, 0x00, 0x74, 0x00, 0x4F, 0x00, 0x77, 0x00, 0x6E, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, +/* 00000C40 */ 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x74, 0x00, 0x79, 0x00, 0x4E, 0x00, 0x61, 0x00, 0x6D, 0x00, +/* 00000C50 */ 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x4F, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, +/* 00000C60 */ 0x74, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, +/* 00000C70 */ 0x65, 0x00, 0x48, 0x00, 0x61, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x77, 0x00, 0x6E, 0x00, 0x50, 0x00, +/* 00000C80 */ 0x72, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, +/* 00000C90 */ 0x5F, 0x00, 0x6F, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x44, 0x00, +/* 00000CA0 */ 0x65, 0x00, 0x66, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, +/* 00000CB0 */ 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x4F, 0x00, 0x62, 0x00, +/* 00000CC0 */ 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x44, 0x00, 0x65, 0x00, 0x66, 0x00, 0x69, 0x00, +/* 00000CD0 */ 0x6E, 0x00, 0x65, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, +/* 00000CE0 */ 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, +/* 00000CF0 */ 0x49, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, +/* 00000D00 */ 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x45, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x00, 0x00, +/* 00000D10 */ 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x73, 0x00, +/* 00000D20 */ 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x64, 0x00, +/* 00000D30 */ 0x65, 0x00, 0x78, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, +/* 00000D40 */ 0x61, 0x00, 0x79, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, +/* 00000D50 */ 0x63, 0x00, 0x65, 0x00, 0x4A, 0x00, 0x6F, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x46, 0x00, +/* 00000D60 */ 0x75, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x49, 0x00, +/* 00000D70 */ 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, 0x42, 0x00, +/* 00000D80 */ 0x69, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x00, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00000D90 */ 0x49, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, +/* 00000DA0 */ 0x47, 0x00, 0x65, 0x00, 0x74, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, +/* 00000DB0 */ 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x4E, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x00, 0x00, +/* 00000DC0 */ 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x49, 0x00, 0x6E, 0x00, +/* 00000DD0 */ 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, 0x52, 0x00, 0x65, 0x00, +/* 00000DE0 */ 0x70, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x63, 0x00, 0x65, 0x00, 0x00, 0x00, 0x53, 0x00, 0x74, 0x00, +/* 00000DF0 */ 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, +/* 00000E00 */ 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, +/* 00000E10 */ 0x77, 0x00, 0x65, 0x00, 0x72, 0x00, 0x43, 0x00, 0x61, 0x00, 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, +/* 00000E20 */ 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x49, 0x00, 0x6E, 0x00, +/* 00000E30 */ 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, 0x54, 0x00, 0x6F, 0x00, +/* 00000E40 */ 0x55, 0x00, 0x70, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x43, 0x00, 0x61, 0x00, 0x73, 0x00, +/* 00000E50 */ 0x65, 0x00, 0x00, 0x00, 0x74, 0x00, 0x68, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x45, 0x00, +/* 00000E60 */ 0x78, 0x00, 0x49, 0x00, 0x66, 0x00, 0x4F, 0x00, 0x4F, 0x00, 0x4D, 0x00, 0x4F, 0x00, 0x72, 0x00, +/* 00000E70 */ 0x53, 0x00, 0x4F, 0x00, 0x45, 0x00, 0x00, 0x00, 0x74, 0x00, 0x61, 0x00, 0x67, 0x00, 0x50, 0x00, +/* 00000E80 */ 0x75, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x63, 0x00, 0x46, 0x00, 0x75, 0x00, 0x6E, 0x00, +/* 00000E90 */ 0x63, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, +/* 00000EA0 */ 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x66, 0x00, +/* 00000EB0 */ 0x6F, 0x00, 0x72, 0x00, 0x45, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x49, 0x00, 0x66, 0x00, +/* 00000EC0 */ 0x50, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x00, 0x00, +/* 00000ED0 */ 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x45, 0x00, 0x78, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6E, 0x00, +/* 00000EE0 */ 0x73, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x53, 0x00, 0x75, 0x00, 0x62, 0x00, 0x74, 0x00, +/* 00000EF0 */ 0x61, 0x00, 0x67, 0x00, 0x73, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, +/* 00000F00 */ 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 00000F10 */ 0x65, 0x00, 0x48, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, +/* 00000F20 */ 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x4C, 0x00, +/* 00000F30 */ 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x73, 0x00, +/* 00000F40 */ 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x70, 0x00, 0x70, 0x00, 0x65, 0x00, 0x64, 0x00, 0x44, 0x00, +/* 00000F50 */ 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x4C, 0x00, 0x6F, 0x00, +/* 00000F60 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, +/* 00000F70 */ 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, +/* 00000F80 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x57, 0x00, +/* 00000F90 */ 0x72, 0x00, 0x61, 0x00, 0x70, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x63, 0x00, +/* 00000FA0 */ 0x61, 0x00, 0x6E, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 00000FB0 */ 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 00000FC0 */ 0x65, 0x00, 0x4C, 0x00, 0x69, 0x00, 0x73, 0x00, 0x74, 0x00, 0x57, 0x00, 0x72, 0x00, 0x61, 0x00, +/* 00000FD0 */ 0x70, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, +/* 00000FE0 */ 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x41, 0x00, 0x63, 0x00, 0x63, 0x00, 0x65, 0x00, +/* 00000FF0 */ 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, +/* 00001000 */ 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x56, 0x00, 0x61, 0x00, +/* 00001010 */ 0x6C, 0x00, 0x75, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, 0x76, 0x00, +/* 00001020 */ 0x65, 0x00, 0x72, 0x00, 0x73, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, +/* 00001030 */ 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x41, 0x00, 0x63, 0x00, 0x63, 0x00, 0x65, 0x00, 0x70, 0x00, +/* 00001040 */ 0x74, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, +/* 00001050 */ 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x56, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 00001060 */ 0x75, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x70, 0x00, 0x70, 0x00, +/* 00001070 */ 0x65, 0x00, 0x64, 0x00, 0x44, 0x00, 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, +/* 00001080 */ 0x74, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, +/* 00001090 */ 0x49, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x54, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, +/* 000010A0 */ 0x00, 0x00, 0x69, 0x00, 0x73, 0x00, 0x50, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x66, 0x00, +/* 000010B0 */ 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x55, 0x00, 0x73, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, +/* 000010C0 */ 0x49, 0x00, 0x43, 0x00, 0x55, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x4F, 0x00, 0x54, 0x00, 0x5F, 0x00, +/* 000010D0 */ 0x46, 0x00, 0x4F, 0x00, 0x55, 0x00, 0x4E, 0x00, 0x44, 0x00, 0x00, 0x00, 0x62, 0x00, 0x61, 0x00, +/* 000010E0 */ 0x72, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x61, 0x00, 0x62, 0x00, 0x73, 0x00, +/* 000010F0 */ 0x00, 0x00, 0x66, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6D, 0x00, +/* 00001100 */ 0x61, 0x00, 0x78, 0x00, 0x00, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x00, 0x00, 0x74, 0x00, +/* 00001110 */ 0x6F, 0x00, 0x55, 0x00, 0x70, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x43, 0x00, 0x61, 0x00, +/* 00001120 */ 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x77, 0x00, +/* 00001130 */ 0x65, 0x00, 0x72, 0x00, 0x43, 0x00, 0x61, 0x00, 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, 0x72, 0x00, +/* 00001140 */ 0x65, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x63, 0x00, 0x65, 0x00, 0x00, 0x00, 0x73, 0x00, +/* 00001150 */ 0x70, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x74, 0x00, 0x00, 0x00, 0x73, 0x00, 0x75, 0x00, 0x62, 0x00, +/* 00001160 */ 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, 0x73, 0x00, +/* 00001170 */ 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x64, 0x00, +/* 00001180 */ 0x65, 0x00, 0x78, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 00001190 */ 0x63, 0x00, 0x68, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, 0x70, 0x00, 0x65, 0x00, 0x61, 0x00, +/* 000011A0 */ 0x74, 0x00, 0x00, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x45, 0x00, 0x61, 0x00, 0x63, 0x00, +/* 000011B0 */ 0x68, 0x00, 0x00, 0x00, 0x6A, 0x00, 0x6F, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x61, 0x00, +/* 000011C0 */ 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x65, 0x00, +/* 000011D0 */ 0x78, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x70, 0x00, 0x00, 0x00, +/* 000011E0 */ 0x72, 0x00, 0x65, 0x00, 0x64, 0x00, 0x75, 0x00, 0x63, 0x00, 0x65, 0x00, 0x00, 0x00, 0x73, 0x00, +/* 000011F0 */ 0x6C, 0x00, 0x69, 0x00, 0x63, 0x00, 0x65, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, +/* 00001200 */ 0x63, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x66, 0x00, 0x69, 0x00, 0x6C, 0x00, 0x74, 0x00, +/* 00001210 */ 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x71, 0x00, 0x75, 0x00, +/* 00001220 */ 0x65, 0x00, 0x00, 0x00, 0x6B, 0x00, 0x65, 0x00, 0x79, 0x00, 0x73, 0x00, 0x00, 0x00, 0x68, 0x00, +/* 00001230 */ 0x61, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x77, 0x00, 0x6E, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, +/* 00001240 */ 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x64, 0x00, 0x65, 0x00, +/* 00001250 */ 0x66, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x70, 0x00, +/* 00001260 */ 0x65, 0x00, 0x72, 0x00, 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x69, 0x00, 0x73, 0x00, 0x45, 0x00, +/* 00001270 */ 0x78, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x69, 0x00, 0x62, 0x00, 0x6C, 0x00, +/* 00001280 */ 0x65, 0x00, 0x00, 0x00, 0x63, 0x00, 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00001290 */ 0x00, 0x00, 0x73, 0x00, 0x65, 0x00, 0x74, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, +/* 000012A0 */ 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, +/* 000012B0 */ 0x69, 0x00, 0x73, 0x00, 0x46, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 000012C0 */ 0x00, 0x00, 0x69, 0x00, 0x73, 0x00, 0x4E, 0x00, 0x61, 0x00, 0x4E, 0x00, 0x00, 0x00, 0x67, 0x00, +/* 000012D0 */ 0x65, 0x00, 0x74, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, 0x62, 0x00, +/* 000012E0 */ 0x69, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x00, 0x00, 0x61, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6C, 0x00, +/* 000012F0 */ 0x79, 0x00, 0x00, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x4F, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, +/* 00001300 */ 0x63, 0x00, 0x74, 0x00, 0x00, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, +/* 00001310 */ 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x4E, 0x00, 0x75, 0x00, +/* 00001320 */ 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x4C, 0x00, +/* 00001330 */ 0x6F, 0x00, 0x67, 0x00, 0x69, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x42, 0x00, 0x6F, 0x00, +/* 00001340 */ 0x6F, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x54, 0x00, 0x6F, 0x00, +/* 00001350 */ 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x65, 0x00, 0x67, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, +/* 00001360 */ 0x54, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x74, 0x00, 0x68, 0x00, +/* 00001370 */ 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, +/* 00001380 */ 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x43, 0x00, 0x61, 0x00, +/* 00001390 */ 0x6E, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x4C, 0x00, +/* 000013A0 */ 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x67, 0x00, +/* 000013B0 */ 0x65, 0x00, 0x74, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x69, 0x00, +/* 000013C0 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 000013D0 */ 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x76, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x65, 0x00, +/* 000013E0 */ 0x00, 0x00, 0x77, 0x00, 0x72, 0x00, 0x69, 0x00, 0x74, 0x00, 0x61, 0x00, 0x62, 0x00, 0x6C, 0x00, +/* 000013F0 */ 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x72, 0x00, +/* 00001400 */ 0x61, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, +/* 00001410 */ 0x66, 0x00, 0x69, 0x00, 0x67, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x62, 0x00, 0x6C, 0x00, +/* 00001420 */ 0x65, 0x00, 0x00, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 00001430 */ 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, +/* 00001440 */ 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, +/* 00001450 */ 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, +/* 00001460 */ 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x50, 0x00, +/* 00001470 */ 0x6C, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x52, 0x00, 0x75, 0x00, 0x6C, 0x00, +/* 00001480 */ 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x69, 0x00, 0x73, 0x00, 0x56, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 00001490 */ 0x69, 0x00, 0x64, 0x00, 0x00, 0x00, 0x56, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x64, 0x00, +/* 000014A0 */ 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x43, 0x00, 0x6F, 0x00, +/* 000014B0 */ 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x2E, 0x00, 0x73, 0x00, +/* 000014C0 */ 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, +/* 000014D0 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, +/* 000014E0 */ 0x66, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x4E, 0x00, +/* 000014F0 */ 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 00001500 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, +/* 00001510 */ 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, +/* 00001520 */ 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x49, 0x00, +/* 00001530 */ 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00001540 */ 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, +/* 00001550 */ 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, +/* 00001560 */ 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, +/* 00001570 */ 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x61, 0x00, +/* 00001580 */ 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, +/* 00001590 */ 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, +/* 000015A0 */ 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x65, 0x00, 0x73, 0x00, +/* 000015B0 */ 0x2D, 0x00, 0x45, 0x00, 0x53, 0x00, 0x00, 0x00, 0x74, 0x00, 0x72, 0x00, 0x61, 0x00, 0x64, 0x00, +/* 000015C0 */ 0x00, 0x00, 0x74, 0x00, 0x72, 0x00, 0x61, 0x00, 0x64, 0x00, 0x6E, 0x00, 0x6C, 0x00, 0x00, 0x00, +/* 000015D0 */ 0x6C, 0x00, 0x76, 0x00, 0x2D, 0x00, 0x4C, 0x00, 0x56, 0x00, 0x00, 0x00, 0x64, 0x00, 0x65, 0x00, +/* 000015E0 */ 0x2D, 0x00, 0x44, 0x00, 0x45, 0x00, 0x00, 0x00, 0x70, 0x00, 0x68, 0x00, 0x6F, 0x00, 0x6E, 0x00, +/* 000015F0 */ 0x65, 0x00, 0x62, 0x00, 0x6B, 0x00, 0x00, 0x00, 0x70, 0x00, 0x68, 0x00, 0x6F, 0x00, 0x6E, 0x00, +/* 00001600 */ 0x65, 0x00, 0x62, 0x00, 0x00, 0x00, 0x6A, 0x00, 0x61, 0x00, 0x2D, 0x00, 0x4A, 0x00, 0x50, 0x00, +/* 00001610 */ 0x00, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x68, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x00, 0x00, +/* 00001620 */ 0x72, 0x00, 0x61, 0x00, 0x64, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x00, 0x00, 0x7A, 0x00, +/* 00001630 */ 0x68, 0x00, 0x2D, 0x00, 0x54, 0x00, 0x57, 0x00, 0x00, 0x00, 0x70, 0x00, 0x68, 0x00, 0x6F, 0x00, +/* 00001640 */ 0x6E, 0x00, 0x65, 0x00, 0x74, 0x00, 0x69, 0x00, 0x63, 0x00, 0x00, 0x00, 0x70, 0x00, 0x72, 0x00, +/* 00001650 */ 0x6F, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, +/* 00001660 */ 0x6F, 0x00, 0x6B, 0x00, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7A, 0x00, 0x68, 0x00, 0x2D, 0x00, +/* 00001670 */ 0x48, 0x00, 0x4B, 0x00, 0x00, 0x00, 0x7A, 0x00, 0x68, 0x00, 0x2D, 0x00, 0x4D, 0x00, 0x4F, 0x00, +/* 00001680 */ 0x00, 0x00, 0x7A, 0x00, 0x68, 0x00, 0x2D, 0x00, 0x43, 0x00, 0x4E, 0x00, 0x00, 0x00, 0x70, 0x00, +/* 00001690 */ 0x69, 0x00, 0x6E, 0x00, 0x79, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x7A, 0x00, 0x68, 0x00, +/* 000016A0 */ 0x2D, 0x00, 0x53, 0x00, 0x47, 0x00, 0x00, 0x00, 0x75, 0x00, 0x73, 0x00, 0x65, 0x00, 0x43, 0x00, +/* 000016B0 */ 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, +/* 000016C0 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x6F, 0x00, 0x6B, 0x00, +/* 000016D0 */ 0x75, 0x00, 0x70, 0x00, 0x43, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x00, 0x00, +/* 000016E0 */ 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x42, 0x00, 0x65, 0x00, +/* 000016F0 */ 0x73, 0x00, 0x74, 0x00, 0x46, 0x00, 0x69, 0x00, 0x74, 0x00, 0x43, 0x00, 0x61, 0x00, 0x63, 0x00, +/* 00001700 */ 0x68, 0x00, 0x65, 0x00, 0x00, 0x00, 0x47, 0x00, 0x65, 0x00, 0x74, 0x00, 0x4F, 0x00, 0x70, 0x00, +/* 00001710 */ 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x69, 0x00, +/* 00001720 */ 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x43, 0x00, +/* 00001730 */ 0x75, 0x00, 0x72, 0x00, 0x72, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x79, 0x00, 0x52, 0x00, +/* 00001740 */ 0x65, 0x00, 0x67, 0x00, 0x45, 0x00, 0x78, 0x00, 0x70, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, +/* 00001750 */ 0x64, 0x00, 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x4C, 0x00, +/* 00001760 */ 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x47, 0x00, 0x65, 0x00, +/* 00001770 */ 0x74, 0x00, 0x44, 0x00, 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x74, 0x00, +/* 00001780 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x63, 0x00, +/* 00001790 */ 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x50, 0x00, 0x75, 0x00, 0x62, 0x00, +/* 000017A0 */ 0x6C, 0x00, 0x69, 0x00, 0x63, 0x00, 0x4D, 0x00, 0x65, 0x00, 0x74, 0x00, 0x68, 0x00, 0x6F, 0x00, +/* 000017B0 */ 0x64, 0x00, 0x00, 0x00, 0x4F, 0x00, 0x72, 0x00, 0x64, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x61, 0x00, +/* 000017C0 */ 0x72, 0x00, 0x79, 0x00, 0x43, 0x00, 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 000017D0 */ 0x46, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, +/* 000017E0 */ 0x74, 0x00, 0x72, 0x00, 0x75, 0x00, 0x63, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, +/* 000017F0 */ 0x42, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x41, 0x00, 0x76, 0x00, 0x61, 0x00, 0x69, 0x00, +/* 00001800 */ 0x6C, 0x00, 0x61, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, +/* 00001810 */ 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x6F, 0x00, 0x6B, 0x00, +/* 00001820 */ 0x75, 0x00, 0x70, 0x00, 0x4D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, +/* 00001830 */ 0x72, 0x00, 0x00, 0x00, 0x42, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x46, 0x00, 0x69, 0x00, +/* 00001840 */ 0x74, 0x00, 0x4D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x72, 0x00, +/* 00001850 */ 0x00, 0x00, 0x55, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x64, 0x00, 0x65, 0x00, +/* 00001860 */ 0x45, 0x00, 0x78, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x69, 0x00, 0x6F, 0x00, +/* 00001870 */ 0x6E, 0x00, 0x56, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x65, 0x00, 0x00, 0x00, 0x52, 0x00, +/* 00001880 */ 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, +/* 00001890 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x47, 0x00, 0x65, 0x00, 0x74, 0x00, +/* 000018A0 */ 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x4F, 0x00, 0x70, 0x00, +/* 000018B0 */ 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x43, 0x00, 0x55, 0x00, 0x52, 0x00, +/* 000018C0 */ 0x52, 0x00, 0x45, 0x00, 0x4E, 0x00, 0x43, 0x00, 0x59, 0x00, 0x5F, 0x00, 0x43, 0x00, 0x4F, 0x00, +/* 000018D0 */ 0x44, 0x00, 0x45, 0x00, 0x5F, 0x00, 0x52, 0x00, 0x45, 0x00, 0x00, 0x00, 0x70, 0x00, 0x61, 0x00, +/* 000018E0 */ 0x72, 0x00, 0x73, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x74, 0x00, +/* 000018F0 */ 0x61, 0x00, 0x67, 0x00, 0x00, 0x00, 0x49, 0x00, 0x73, 0x00, 0x57, 0x00, 0x65, 0x00, 0x6C, 0x00, +/* 00001900 */ 0x6C, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x64, 0x00, 0x43, 0x00, +/* 00001910 */ 0x75, 0x00, 0x72, 0x00, 0x72, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x79, 0x00, 0x43, 0x00, +/* 00001920 */ 0x6F, 0x00, 0x64, 0x00, 0x65, 0x00, 0x00, 0x00, 0x49, 0x00, 0x73, 0x00, 0x53, 0x00, 0x74, 0x00, +/* 00001930 */ 0x72, 0x00, 0x75, 0x00, 0x63, 0x00, 0x74, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 00001940 */ 0x6C, 0x00, 0x79, 0x00, 0x56, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x64, 0x00, 0x4C, 0x00, +/* 00001950 */ 0x61, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x75, 0x00, 0x61, 0x00, 0x67, 0x00, 0x65, 0x00, 0x54, 0x00, +/* 00001960 */ 0x61, 0x00, 0x67, 0x00, 0x00, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x6F, 0x00, 0x6E, 0x00, +/* 00001970 */ 0x69, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x4C, 0x00, +/* 00001980 */ 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x69, 0x00, 0x73, 0x00, +/* 00001990 */ 0x74, 0x00, 0x00, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x6F, 0x00, 0x6B, 0x00, 0x75, 0x00, 0x70, 0x00, +/* 000019A0 */ 0x53, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 000019B0 */ 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, +/* 000019C0 */ 0x00, 0x00, 0x42, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x46, 0x00, 0x69, 0x00, 0x74, 0x00, +/* 000019D0 */ 0x53, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 000019E0 */ 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, +/* 000019F0 */ 0x00, 0x00, 0x53, 0x00, 0x65, 0x00, 0x74, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, +/* 00001A00 */ 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 00001A10 */ 0x44, 0x00, 0x69, 0x00, 0x67, 0x00, 0x69, 0x00, 0x74, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, +/* 00001A20 */ 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x00, 0x00, 0x53, 0x00, 0x75, 0x00, 0x70, 0x00, +/* 00001A30 */ 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, +/* 00001A40 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x63, 0x00, 0x72, 0x00, +/* 00001A50 */ 0x65, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x52, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, +/* 00001A60 */ 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, +/* 00001A70 */ 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, +/* 00001A80 */ 0x69, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x61, 0x00, +/* 00001A90 */ 0x6E, 0x00, 0x67, 0x00, 0x54, 0x00, 0x61, 0x00, 0x67, 0x00, 0x52, 0x00, 0x45, 0x00, 0x73, 0x00, +/* 00001AA0 */ 0x00, 0x00, 0x43, 0x00, 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x44, 0x00, +/* 00001AB0 */ 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, +/* 00001AC0 */ 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x49, 0x00, 0x73, 0x00, +/* 00001AD0 */ 0x57, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, +/* 00001AE0 */ 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x75, 0x00, 0x61, 0x00, +/* 00001AF0 */ 0x67, 0x00, 0x65, 0x00, 0x54, 0x00, 0x61, 0x00, 0x67, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, +/* 00001B00 */ 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x70, 0x00, 0x70, 0x00, 0x65, 0x00, 0x64, 0x00, +/* 00001B10 */ 0x44, 0x00, 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x4C, 0x00, +/* 00001B20 */ 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x4C, 0x00, 0x41, 0x00, +/* 00001B30 */ 0x4E, 0x00, 0x47, 0x00, 0x5F, 0x00, 0x54, 0x00, 0x41, 0x00, 0x47, 0x00, 0x5F, 0x00, 0x42, 0x00, +/* 00001B40 */ 0x41, 0x00, 0x53, 0x00, 0x45, 0x00, 0x5F, 0x00, 0x52, 0x00, 0x45, 0x00, 0x00, 0x00, 0x4C, 0x00, +/* 00001B50 */ 0x41, 0x00, 0x4E, 0x00, 0x47, 0x00, 0x5F, 0x00, 0x54, 0x00, 0x41, 0x00, 0x47, 0x00, 0x5F, 0x00, +/* 00001B60 */ 0x45, 0x00, 0x58, 0x00, 0x54, 0x00, 0x5F, 0x00, 0x52, 0x00, 0x45, 0x00, 0x00, 0x00, 0x4C, 0x00, +/* 00001B70 */ 0x41, 0x00, 0x4E, 0x00, 0x47, 0x00, 0x5F, 0x00, 0x54, 0x00, 0x41, 0x00, 0x47, 0x00, 0x5F, 0x00, +/* 00001B80 */ 0x52, 0x00, 0x45, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, +/* 00001B90 */ 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x5F, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, +/* 00001BA0 */ 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, +/* 00001BB0 */ 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x5F, 0x00, 0x6E, 0x00, +/* 00001BC0 */ 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, +/* 00001BD0 */ 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x5F, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, +/* 00001BE0 */ 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, +/* 00001BF0 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, +/* 00001C00 */ 0x6E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, +/* 00001C10 */ 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x5F, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, +/* 00001C20 */ 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, +/* 00001C30 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x5F, 0x00, +/* 00001C40 */ 0x6E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x6D, 0x00, +/* 00001C50 */ 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, +/* 00001C60 */ 0x74, 0x00, 0x5F, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 00001C70 */ 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 00001C80 */ 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 00001C90 */ 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 00001CA0 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x5F, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, +/* 00001CB0 */ 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, +/* 00001CC0 */ 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x5F, 0x00, 0x6E, 0x00, +/* 00001CD0 */ 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00001CE0 */ 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, +/* 00001CF0 */ 0x61, 0x00, 0x74, 0x00, 0x5F, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, +/* 00001D00 */ 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, +/* 00001D10 */ 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x67, 0x00, 0x65, 0x00, +/* 00001D20 */ 0x74, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x63, 0x00, +/* 00001D30 */ 0x61, 0x00, 0x6C, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, +/* 00001D40 */ 0x73, 0x00, 0x5F, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5F, 0x00, +/* 00001D50 */ 0x5F, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x70, 0x00, 0x70, 0x00, 0x65, 0x00, 0x64, 0x00, 0x44, 0x00, +/* 00001D60 */ 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x4C, 0x00, 0x6F, 0x00, +/* 00001D70 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x5F, 0x00, +/* 00001D80 */ 0x63, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x00, 0x00, 0x67, 0x00, 0x65, 0x00, +/* 00001D90 */ 0x74, 0x00, 0x00, 0x00, 0x73, 0x00, 0x65, 0x00, 0x74, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, +/* 00001DA0 */ 0x74, 0x00, 0x6F, 0x00, 0x55, 0x00, 0x70, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x43, 0x00, +/* 00001DB0 */ 0x61, 0x00, 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x74, 0x00, 0x6F, 0x00, +/* 00001DC0 */ 0x4C, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x65, 0x00, 0x72, 0x00, 0x43, 0x00, 0x61, 0x00, 0x73, 0x00, +/* 00001DD0 */ 0x65, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x72, 0x00, 0x65, 0x00, 0x70, 0x00, 0x6C, 0x00, +/* 00001DE0 */ 0x61, 0x00, 0x63, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x70, 0x00, +/* 00001DF0 */ 0x6C, 0x00, 0x69, 0x00, 0x74, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x75, 0x00, +/* 00001E00 */ 0x62, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, +/* 00001E10 */ 0x5F, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, +/* 00001E20 */ 0x49, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x65, 0x00, 0x78, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, +/* 00001E30 */ 0x5F, 0x00, 0x2E, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x63, 0x00, 0x68, 0x00, 0x00, 0x00, +/* 00001E40 */ 0x5F, 0x00, 0x2E, 0x00, 0x72, 0x00, 0x65, 0x00, 0x70, 0x00, 0x65, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 00001E50 */ 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x45, 0x00, 0x61, 0x00, +/* 00001E60 */ 0x63, 0x00, 0x68, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x6A, 0x00, 0x6F, 0x00, 0x69, 0x00, +/* 00001E70 */ 0x6E, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x61, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, +/* 00001E80 */ 0x79, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x65, 0x00, 0x78, 0x00, 0x4F, 0x00, 0x66, 0x00, +/* 00001E90 */ 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x70, 0x00, 0x00, 0x00, 0x5F, 0x00, +/* 00001EA0 */ 0x2E, 0x00, 0x72, 0x00, 0x65, 0x00, 0x64, 0x00, 0x75, 0x00, 0x63, 0x00, 0x65, 0x00, 0x00, 0x00, +/* 00001EB0 */ 0x5F, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x63, 0x00, 0x65, 0x00, 0x00, 0x00, +/* 00001EC0 */ 0x5F, 0x00, 0x2E, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 00001ED0 */ 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x69, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00001EE0 */ 0x72, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x71, 0x00, +/* 00001EF0 */ 0x75, 0x00, 0x65, 0x00, 0x00, 0x00, 0x61, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, +/* 00001F00 */ 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x68, 0x00, 0x61, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x77, 0x00, +/* 00001F10 */ 0x6E, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x74, 0x00, +/* 00001F20 */ 0x79, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x64, 0x00, 0x65, 0x00, 0x66, 0x00, 0x69, 0x00, +/* 00001F30 */ 0x6E, 0x00, 0x65, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, +/* 00001F40 */ 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x63, 0x00, 0x72, 0x00, 0x65, 0x00, +/* 00001F50 */ 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x65, 0x00, +/* 00001F60 */ 0x74, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, +/* 00001F70 */ 0x70, 0x00, 0x65, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x66, 0x00, +/* 00001F80 */ 0x6C, 0x00, 0x6F, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x67, 0x00, +/* 00001F90 */ 0x65, 0x00, 0x74, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5F, 0x00, +/* 00001FA0 */ 0x2E, 0x00, 0x62, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x2E, 0x00, +/* 00001FB0 */ 0x61, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x79, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6E, 0x00, +/* 00001FC0 */ 0x00, 0x00, 0x6F, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x00, 0x00, +/* 00001FD0 */ 0x2D, 0x00, 0x00, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x64, 0x00, +/* 00001FE0 */ 0x65, 0x00, 0x45, 0x00, 0x78, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x69, 0x00, +/* 00001FF0 */ 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x65, 0x00, 0x78, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6E, 0x00, +/* 00002000 */ 0x73, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, 0x66, 0x00, +/* 00002010 */ 0x6F, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, +/* 00002020 */ 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x75, 0x00, 0x6C, 0x00, +/* 00002030 */ 0x74, 0x00, 0x00, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 00002040 */ 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x45, 0x00, 0x78, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6E, 0x00, +/* 00002050 */ 0x73, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x6F, 0x00, +/* 00002060 */ 0x6B, 0x00, 0x75, 0x00, 0x70, 0x00, 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, 0x61, 0x00, +/* 00002070 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x2D, 0x00, +/* 00002080 */ 0x75, 0x00, 0x00, 0x00, 0x2D, 0x00, 0x78, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, +/* 00002090 */ 0x6F, 0x00, 0x6B, 0x00, 0x75, 0x00, 0x70, 0x00, 0x4D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x63, 0x00, +/* 000020A0 */ 0x68, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x74, 0x00, 0x72, 0x00, 0x75, 0x00, 0x65, 0x00, +/* 000020B0 */ 0x00, 0x00, 0x62, 0x00, 0x6F, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x61, 0x00, 0x6E, 0x00, +/* 000020C0 */ 0x00, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, +/* 000020D0 */ 0x6E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x5B, 0x00, +/* 000020E0 */ 0x27, 0x00, 0x00, 0x00, 0x27, 0x00, 0x5D, 0x00, 0x00, 0x00, 0x27, 0x00, 0x2C, 0x00, 0x20, 0x00, +/* 000020F0 */ 0x27, 0x00, 0x00, 0x00, 0x5B, 0x00, 0x00, 0x00, 0x20, 0x00, 0x2D, 0x00, 0x20, 0x00, 0x00, 0x00, +/* 00002100 */ 0x5D, 0x00, 0x00, 0x00, 0x5E, 0x00, 0x5B, 0x00, 0x41, 0x00, 0x2D, 0x00, 0x5A, 0x00, 0x5D, 0x00, +/* 00002110 */ 0x7B, 0x00, 0x33, 0x00, 0x7D, 0x00, 0x24, 0x00, 0x00, 0x00, 0x70, 0x00, 0x61, 0x00, 0x72, 0x00, +/* 00002120 */ 0x73, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x74, 0x00, +/* 00002130 */ 0x61, 0x00, 0x67, 0x00, 0x43, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x00, 0x00, +/* 00002140 */ 0x5B, 0x00, 0x41, 0x00, 0x2D, 0x00, 0x5A, 0x00, 0x5D, 0x00, 0x00, 0x00, 0x5B, 0x00, 0x30, 0x00, +/* 00002150 */ 0x2D, 0x00, 0x39, 0x00, 0x5D, 0x00, 0x00, 0x00, 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x00, 0x00, +/* 00002160 */ 0x7C, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x28, 0x00, 0x3F, 0x00, +/* 00002170 */ 0x3A, 0x00, 0x61, 0x00, 0x72, 0x00, 0x74, 0x00, 0x2D, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x6A, 0x00, +/* 00002180 */ 0x62, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x7C, 0x00, 0x63, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x2D, 0x00, +/* 00002190 */ 0x67, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x7C, 0x00, +/* 000021A0 */ 0x6E, 0x00, 0x6F, 0x00, 0x2D, 0x00, 0x62, 0x00, 0x6F, 0x00, 0x6B, 0x00, 0x7C, 0x00, 0x6E, 0x00, +/* 000021B0 */ 0x6F, 0x00, 0x2D, 0x00, 0x6E, 0x00, 0x79, 0x00, 0x6E, 0x00, 0x7C, 0x00, 0x7A, 0x00, 0x68, 0x00, +/* 000021C0 */ 0x2D, 0x00, 0x67, 0x00, 0x75, 0x00, 0x6F, 0x00, 0x79, 0x00, 0x75, 0x00, 0x7C, 0x00, 0x7A, 0x00, +/* 000021D0 */ 0x68, 0x00, 0x2D, 0x00, 0x68, 0x00, 0x61, 0x00, 0x6B, 0x00, 0x6B, 0x00, 0x61, 0x00, 0x7C, 0x00, +/* 000021E0 */ 0x7A, 0x00, 0x68, 0x00, 0x2D, 0x00, 0x6D, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x7C, 0x00, 0x7A, 0x00, +/* 000021F0 */ 0x68, 0x00, 0x2D, 0x00, 0x6D, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x2D, 0x00, 0x6E, 0x00, 0x61, 0x00, +/* 00002200 */ 0x6E, 0x00, 0x7C, 0x00, 0x7A, 0x00, 0x68, 0x00, 0x2D, 0x00, 0x78, 0x00, 0x69, 0x00, 0x61, 0x00, +/* 00002210 */ 0x6E, 0x00, 0x67, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x62, 0x00, +/* 00002220 */ 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x2D, 0x00, 0x47, 0x00, 0x42, 0x00, +/* 00002230 */ 0x2D, 0x00, 0x6F, 0x00, 0x65, 0x00, 0x64, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x61, 0x00, +/* 00002240 */ 0x6D, 0x00, 0x69, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x62, 0x00, 0x6E, 0x00, 0x6E, 0x00, +/* 00002250 */ 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x64, 0x00, 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, +/* 00002260 */ 0x6C, 0x00, 0x74, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x6F, 0x00, +/* 00002270 */ 0x63, 0x00, 0x68, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, +/* 00002280 */ 0x68, 0x00, 0x61, 0x00, 0x6B, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x6B, 0x00, 0x6C, 0x00, +/* 00002290 */ 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, +/* 000022A0 */ 0x6C, 0x00, 0x75, 0x00, 0x78, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x6D, 0x00, 0x69, 0x00, +/* 000022B0 */ 0x6E, 0x00, 0x67, 0x00, 0x6F, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x6E, 0x00, +/* 000022C0 */ 0x61, 0x00, 0x76, 0x00, 0x61, 0x00, 0x6A, 0x00, 0x6F, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, +/* 000022D0 */ 0x70, 0x00, 0x77, 0x00, 0x6E, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x74, 0x00, 0x61, 0x00, +/* 000022E0 */ 0x6F, 0x00, 0x7C, 0x00, 0x69, 0x00, 0x2D, 0x00, 0x74, 0x00, 0x61, 0x00, 0x79, 0x00, 0x7C, 0x00, +/* 000022F0 */ 0x69, 0x00, 0x2D, 0x00, 0x74, 0x00, 0x73, 0x00, 0x75, 0x00, 0x7C, 0x00, 0x73, 0x00, 0x67, 0x00, +/* 00002300 */ 0x6E, 0x00, 0x2D, 0x00, 0x42, 0x00, 0x45, 0x00, 0x2D, 0x00, 0x46, 0x00, 0x52, 0x00, 0x7C, 0x00, +/* 00002310 */ 0x73, 0x00, 0x67, 0x00, 0x6E, 0x00, 0x2D, 0x00, 0x42, 0x00, 0x45, 0x00, 0x2D, 0x00, 0x4E, 0x00, +/* 00002320 */ 0x4C, 0x00, 0x7C, 0x00, 0x73, 0x00, 0x67, 0x00, 0x6E, 0x00, 0x2D, 0x00, 0x43, 0x00, 0x48, 0x00, +/* 00002330 */ 0x2D, 0x00, 0x44, 0x00, 0x45, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x5C, 0x00, +/* 00002340 */ 0x62, 0x00, 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x00, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, +/* 00002350 */ 0x00, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x78, 0x00, 0x28, 0x00, +/* 00002360 */ 0x3F, 0x00, 0x3A, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x31, 0x00, 0x2C, 0x00, 0x38, 0x00, +/* 00002370 */ 0x7D, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x29, 0x00, 0x2B, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, +/* 00002380 */ 0x00, 0x00, 0x7C, 0x00, 0x5B, 0x00, 0x41, 0x00, 0x2D, 0x00, 0x57, 0x00, 0x59, 0x00, 0x2D, 0x00, +/* 00002390 */ 0x5A, 0x00, 0x5D, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x28, 0x00, 0x3F, 0x00, +/* 000023A0 */ 0x3A, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x32, 0x00, 0x2C, 0x00, 0x38, 0x00, 0x7D, 0x00, +/* 000023B0 */ 0x29, 0x00, 0x2B, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x35, 0x00, +/* 000023C0 */ 0x2C, 0x00, 0x38, 0x00, 0x7D, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x33, 0x00, 0x7D, 0x00, +/* 000023D0 */ 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x32, 0x00, 0x7D, 0x00, 0x7C, 0x00, +/* 000023E0 */ 0x00, 0x00, 0x7B, 0x00, 0x34, 0x00, 0x7D, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, +/* 000023F0 */ 0x7B, 0x00, 0x33, 0x00, 0x7D, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, +/* 00002400 */ 0x2D, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x33, 0x00, 0x7D, 0x00, 0x29, 0x00, 0x7B, 0x00, 0x30, 0x00, +/* 00002410 */ 0x2C, 0x00, 0x32, 0x00, 0x7D, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x7B, 0x00, +/* 00002420 */ 0x32, 0x00, 0x2C, 0x00, 0x33, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x28, 0x00, +/* 00002430 */ 0x3F, 0x00, 0x3A, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x7B, 0x00, +/* 00002440 */ 0x34, 0x00, 0x2C, 0x00, 0x38, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x28, 0x00, +/* 00002450 */ 0x00, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x2D, 0x00, 0x28, 0x00, +/* 00002460 */ 0x00, 0x00, 0x29, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x5C, 0x00, +/* 00002470 */ 0x62, 0x00, 0x28, 0x00, 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x29, 0x00, +/* 00002480 */ 0x2A, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x5C, 0x00, +/* 00002490 */ 0x62, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x5E, 0x00, 0x00, 0x00, 0x24, 0x00, +/* 000024A0 */ 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x6E, 0x00, +/* 000024B0 */ 0x67, 0x00, 0x75, 0x00, 0x61, 0x00, 0x67, 0x00, 0x65, 0x00, 0x00, 0x00, 0x73, 0x00, 0x63, 0x00, +/* 000024C0 */ 0x72, 0x00, 0x69, 0x00, 0x70, 0x00, 0x74, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, 0x67, 0x00, +/* 000024D0 */ 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x76, 0x00, 0x61, 0x00, 0x72, 0x00, 0x69, 0x00, +/* 000024E0 */ 0x61, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x65, 0x00, 0x78, 0x00, 0x74, 0x00, +/* 000024F0 */ 0x65, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x00, 0x00, +/* 00002500 */ 0x75, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x65, 0x00, 0x66, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x65, 0x00, +/* 00002510 */ 0x64, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, +/* 00002520 */ 0x00, 0x00, 0x69, 0x00, 0x73, 0x00, 0x41, 0x00, 0x76, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6C, 0x00, +/* 00002530 */ 0x61, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, +/* 00002540 */ 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x73, 0x00, 0x75, 0x00, 0x62, 0x00, 0x73, 0x00, 0x65, 0x00, +/* 00002550 */ 0x74, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x75, 0x00, +/* 00002560 */ 0x6D, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x65, 0x00, 0x67, 0x00, 0x65, 0x00, 0x72, 0x00, +/* 00002570 */ 0x44, 0x00, 0x69, 0x00, 0x67, 0x00, 0x69, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x6D, 0x00, +/* 00002580 */ 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x46, 0x00, 0x72, 0x00, +/* 00002590 */ 0x61, 0x00, 0x63, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x44, 0x00, 0x69, 0x00, +/* 000025A0 */ 0x67, 0x00, 0x69, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x78, 0x00, +/* 000025B0 */ 0x69, 0x00, 0x6D, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x46, 0x00, 0x72, 0x00, 0x61, 0x00, 0x63, 0x00, +/* 000025C0 */ 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x44, 0x00, 0x69, 0x00, 0x67, 0x00, 0x69, 0x00, +/* 000025D0 */ 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x6D, 0x00, +/* 000025E0 */ 0x75, 0x00, 0x6D, 0x00, 0x53, 0x00, 0x69, 0x00, 0x67, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x66, 0x00, +/* 000025F0 */ 0x69, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x44, 0x00, 0x69, 0x00, 0x67, 0x00, +/* 00002600 */ 0x69, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x78, 0x00, 0x69, 0x00, +/* 00002610 */ 0x6D, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x53, 0x00, 0x69, 0x00, 0x67, 0x00, 0x6E, 0x00, 0x69, 0x00, +/* 00002620 */ 0x66, 0x00, 0x69, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x44, 0x00, 0x69, 0x00, +/* 00002630 */ 0x67, 0x00, 0x69, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x62, 0x00, 0x65, 0x00, 0x73, 0x00, +/* 00002640 */ 0x74, 0x00, 0x20, 0x00, 0x66, 0x00, 0x69, 0x00, 0x74, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, +/* 00002650 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x4D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x63, 0x00, +/* 00002660 */ 0x68, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x67, 0x00, +/* 00002670 */ 0x74, 0x00, 0x68, 0x00, 0x00, 0x00, 0x68, 0x00, 0x69, 0x00, 0x64, 0x00, 0x64, 0x00, 0x65, 0x00, +/* 00002680 */ 0x6E, 0x00, 0x4F, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x00, 0x00, +/* 00002690 */ 0x66, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, +/* 000026A0 */ 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x64, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, +/* 000026B0 */ 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, +/* 000026C0 */ 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 000026D0 */ 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x43, 0x00, +/* 000026E0 */ 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00, 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, +/* 000026F0 */ 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x43, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, +/* 00002700 */ 0x00, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, +/* 00002710 */ 0x72, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, +/* 00002720 */ 0x70, 0x00, 0x65, 0x00, 0x00, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, +/* 00002730 */ 0x67, 0x00, 0x00, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, +/* 00002740 */ 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, +/* 00002750 */ 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 00002760 */ 0x65, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00, 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, +/* 00002770 */ 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x43, 0x00, 0x6F, 0x00, +/* 00002780 */ 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x49, 0x00, +/* 00002790 */ 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, +/* 000027A0 */ 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, +/* 000027B0 */ 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x63, 0x00, +/* 000027C0 */ 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00, 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, 0x00, 0x00, 0x70, 0x00, +/* 000027D0 */ 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, +/* 000027E0 */ 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x75, 0x00, +/* 000027F0 */ 0x63, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, +/* 00002800 */ 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, +/* 00002810 */ 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, +/* 00002820 */ 0x6C, 0x00, 0x2E, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 00002830 */ 0x6F, 0x00, 0x72, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, +/* 00002840 */ 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, +/* 00002850 */ 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, +/* 00002860 */ 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x00, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, +/* 00002870 */ 0x20, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00, 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, +/* 00002880 */ 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00, 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, +/* 00002890 */ 0x00, 0x00, 0x75, 0x00, 0x73, 0x00, 0x61, 0x00, 0x67, 0x00, 0x65, 0x00, 0x00, 0x00, 0x73, 0x00, +/* 000028A0 */ 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x00, 0x00, 0x73, 0x00, 0x65, 0x00, 0x61, 0x00, 0x72, 0x00, +/* 000028B0 */ 0x63, 0x00, 0x68, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x00, 0x00, 0x6B, 0x00, 0x6E, 0x00, +/* 000028C0 */ 0x00, 0x00, 0x6B, 0x00, 0x66, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x65, 0x00, +/* 000028D0 */ 0x72, 0x00, 0x69, 0x00, 0x63, 0x00, 0x00, 0x00, 0x63, 0x00, 0x61, 0x00, 0x73, 0x00, 0x65, 0x00, +/* 000028E0 */ 0x46, 0x00, 0x69, 0x00, 0x72, 0x00, 0x73, 0x00, 0x74, 0x00, 0x00, 0x00, 0x75, 0x00, 0x70, 0x00, +/* 000028F0 */ 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x65, 0x00, +/* 00002900 */ 0x72, 0x00, 0x00, 0x00, 0x66, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, +/* 00002910 */ 0x64, 0x00, 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x00, 0x00, +/* 00002920 */ 0x73, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x76, 0x00, +/* 00002930 */ 0x69, 0x00, 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x62, 0x00, 0x61, 0x00, 0x73, 0x00, 0x65, 0x00, +/* 00002940 */ 0x00, 0x00, 0x61, 0x00, 0x63, 0x00, 0x63, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x00, 0x00, +/* 00002950 */ 0x63, 0x00, 0x61, 0x00, 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, 0x76, 0x00, 0x61, 0x00, 0x72, 0x00, +/* 00002960 */ 0x69, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x00, 0x00, 0x69, 0x00, 0x67, 0x00, 0x6E, 0x00, +/* 00002970 */ 0x6F, 0x00, 0x72, 0x00, 0x65, 0x00, 0x50, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x74, 0x00, +/* 00002980 */ 0x75, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x6D, 0x00, +/* 00002990 */ 0x61, 0x00, 0x74, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x63, 0x00, +/* 000029A0 */ 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, +/* 000029B0 */ 0x00, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 000029C0 */ 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x64, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, +/* 000029D0 */ 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, +/* 000029E0 */ 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00, 0x61, 0x00, +/* 000029F0 */ 0x72, 0x00, 0x65, 0x00, 0x00, 0x00, 0x62, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x64, 0x00, +/* 00002A00 */ 0x43, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00, 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, 0x00, 0x00, +/* 00002A10 */ 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 00002A20 */ 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, +/* 00002A30 */ 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00, 0x61, 0x00, +/* 00002A40 */ 0x72, 0x00, 0x65, 0x00, 0x00, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, +/* 00002A50 */ 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, +/* 00002A60 */ 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x72, 0x00, 0x65, 0x00, +/* 00002A70 */ 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4F, 0x00, 0x70, 0x00, +/* 00002A80 */ 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, +/* 00002A90 */ 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, +/* 00002AA0 */ 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, +/* 00002AB0 */ 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, +/* 00002AC0 */ 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, +/* 00002AD0 */ 0x74, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, +/* 00002AE0 */ 0x70, 0x00, 0x65, 0x00, 0x00, 0x00, 0x55, 0x00, 0x6E, 0x00, 0x77, 0x00, 0x72, 0x00, 0x61, 0x00, +/* 00002AF0 */ 0x70, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, +/* 00002B00 */ 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x75, 0x00, +/* 00002B10 */ 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, +/* 00002B20 */ 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, +/* 00002B30 */ 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x74, 0x00, 0x6F, 0x00, +/* 00002B40 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, +/* 00002B50 */ 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, +/* 00002B60 */ 0x6C, 0x00, 0x2E, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, +/* 00002B70 */ 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x49, 0x00, +/* 00002B80 */ 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, +/* 00002B90 */ 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 00002BA0 */ 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, +/* 00002BB0 */ 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, +/* 00002BC0 */ 0x74, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x4E, 0x00, +/* 00002BD0 */ 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 00002BE0 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, +/* 00002BF0 */ 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x6F, 0x00, +/* 00002C00 */ 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x50, 0x00, 0x61, 0x00, +/* 00002C10 */ 0x72, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, +/* 00002C20 */ 0x2E, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, +/* 00002C30 */ 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, +/* 00002C40 */ 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, +/* 00002C50 */ 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x64, 0x00, +/* 00002C60 */ 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x00, 0x00, +/* 00002C70 */ 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x20, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, +/* 00002C80 */ 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, +/* 00002C90 */ 0x74, 0x00, 0x00, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 00002CA0 */ 0x54, 0x00, 0x6F, 0x00, 0x50, 0x00, 0x61, 0x00, 0x72, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, +/* 00002CB0 */ 0x6E, 0x00, 0x75, 0x00, 0x00, 0x00, 0x73, 0x00, 0x74, 0x00, 0x79, 0x00, 0x6C, 0x00, 0x65, 0x00, +/* 00002CC0 */ 0x00, 0x00, 0x64, 0x00, 0x65, 0x00, 0x63, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 00002CD0 */ 0x00, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x63, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, +/* 00002CE0 */ 0x00, 0x00, 0x63, 0x00, 0x75, 0x00, 0x72, 0x00, 0x72, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x63, 0x00, +/* 00002CF0 */ 0x79, 0x00, 0x00, 0x00, 0x63, 0x00, 0x75, 0x00, 0x72, 0x00, 0x72, 0x00, 0x65, 0x00, 0x6E, 0x00, +/* 00002D00 */ 0x63, 0x00, 0x79, 0x00, 0x44, 0x00, 0x69, 0x00, 0x73, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x61, 0x00, +/* 00002D10 */ 0x79, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x64, 0x00, 0x65, 0x00, 0x00, 0x00, 0x73, 0x00, +/* 00002D20 */ 0x79, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x75, 0x00, 0x73, 0x00, +/* 00002D30 */ 0x65, 0x00, 0x47, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x70, 0x00, 0x69, 0x00, 0x6E, 0x00, +/* 00002D40 */ 0x67, 0x00, 0x00, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, +/* 00002D50 */ 0x6C, 0x00, 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, +/* 00002D60 */ 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, +/* 00002D70 */ 0x74, 0x00, 0x00, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, +/* 00002D80 */ 0x6C, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, +/* 00002D90 */ 0x00, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, +/* 00002DA0 */ 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, +/* 00002DB0 */ 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, +/* 00002DC0 */ 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x4E, 0x00, +/* 00002DD0 */ 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 00002DE0 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, +/* 00002DF0 */ 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x6F, 0x00, +/* 00002E00 */ 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x50, 0x00, 0x61, 0x00, +/* 00002E10 */ 0x72, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, +/* 00002E20 */ 0x65, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x53, 0x00, 0x79, 0x00, 0x73, 0x00, +/* 00002E30 */ 0x74, 0x00, 0x65, 0x00, 0x6D, 0x00, 0x00, 0x00, 0x62, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x6E, 0x00, +/* 00002E40 */ 0x64, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, +/* 00002E50 */ 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, +/* 00002E60 */ 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, +/* 00002E70 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, +/* 00002E80 */ 0x6E, 0x00, 0x67, 0x00, 0x49, 0x00, 0x6D, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6D, 0x00, +/* 00002E90 */ 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, +/* 00002EA0 */ 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, +/* 00002EB0 */ 0x65, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x65, 0x00, +/* 00002EC0 */ 0x6E, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x50, 0x00, +/* 00002ED0 */ 0x61, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x46, 0x00, 0x6F, 0x00, +/* 00002EE0 */ 0x72, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, +/* 00002EF0 */ 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 00002F00 */ 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, +/* 00002F10 */ 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, +/* 00002F20 */ 0x74, 0x00, 0x00, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00002F30 */ 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, +/* 00002F40 */ 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x44, 0x00, 0x61, 0x00, +/* 00002F50 */ 0x74, 0x00, 0x65, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, +/* 00002F60 */ 0x63, 0x00, 0x65, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, +/* 00002F70 */ 0x6C, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, +/* 00002F80 */ 0x44, 0x00, 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x43, 0x00, +/* 00002F90 */ 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x00, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 00002FA0 */ 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 00002FB0 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, +/* 00002FC0 */ 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x00, 0x00, 0x55, 0x00, 0x6E, 0x00, 0x77, 0x00, +/* 00002FD0 */ 0x72, 0x00, 0x61, 0x00, 0x70, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, +/* 00002FE0 */ 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, +/* 00002FF0 */ 0x74, 0x00, 0x00, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6E, 0x00, +/* 00003000 */ 0x61, 0x00, 0x72, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x00, 0x00, 0x73, 0x00, 0x68, 0x00, +/* 00003010 */ 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x67, 0x00, +/* 00003020 */ 0x00, 0x00, 0x32, 0x00, 0x2D, 0x00, 0x64, 0x00, 0x69, 0x00, 0x67, 0x00, 0x69, 0x00, 0x74, 0x00, +/* 00003030 */ 0x00, 0x00, 0x77, 0x00, 0x65, 0x00, 0x65, 0x00, 0x6B, 0x00, 0x64, 0x00, 0x61, 0x00, 0x79, 0x00, +/* 00003040 */ 0x00, 0x00, 0x65, 0x00, 0x72, 0x00, 0x61, 0x00, 0x00, 0x00, 0x79, 0x00, 0x65, 0x00, 0x61, 0x00, +/* 00003050 */ 0x72, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x68, 0x00, 0x00, 0x00, +/* 00003060 */ 0x64, 0x00, 0x61, 0x00, 0x79, 0x00, 0x00, 0x00, 0x68, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x72, 0x00, +/* 00003070 */ 0x00, 0x00, 0x6D, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, +/* 00003080 */ 0x73, 0x00, 0x65, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x00, 0x00, 0x74, 0x00, +/* 00003090 */ 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x5A, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x4E, 0x00, +/* 000030A0 */ 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, +/* 000030B0 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 000030C0 */ 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, 0x74, 0x00, +/* 000030D0 */ 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x54, 0x00, +/* 000030E0 */ 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, +/* 000030F0 */ 0x67, 0x00, 0x00, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x70, 0x00, +/* 00003100 */ 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, +/* 00003110 */ 0x2E, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 00003120 */ 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x00, 0x00, +/* 00003130 */ 0x61, 0x00, 0x6E, 0x00, 0x79, 0x00, 0x00, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x00, 0x00, +/* 00003140 */ 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, +/* 00003150 */ 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x74, 0x00, +/* 00003160 */ 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x44, 0x00, +/* 00003170 */ 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, +/* 00003180 */ 0x67, 0x00, 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, 0x44, 0x00, +/* 00003190 */ 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, +/* 000031A0 */ 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x74, 0x00, 0x6F, 0x00, +/* 000031B0 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, +/* 000031C0 */ 0x6D, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, +/* 000031D0 */ 0x00, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, +/* 000031E0 */ 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, +/* 000031F0 */ 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, +/* 00003200 */ 0x74, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x44, 0x00, +/* 00003210 */ 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, +/* 00003220 */ 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, +/* 00003230 */ 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, +/* 00003240 */ 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x49, 0x00, +/* 00003250 */ 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00003260 */ 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, +/* 00003270 */ 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, +/* 00003280 */ 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 00003290 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x50, 0x00, 0x61, 0x00, 0x72, 0x00, +/* 000032A0 */ 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, +/* 000032B0 */ 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, +/* 000032C0 */ 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, +/* 000032D0 */ 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, +/* 000032E0 */ 0x2E, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, +/* 000032F0 */ 0x64, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, +/* 00003300 */ 0x00, 0x00, 0x73, 0x00, 0x79, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x46, 0x00, +/* 00003310 */ 0x6F, 0x00, 0x72, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, +/* 00003320 */ 0x00, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x46, 0x00, +/* 00003330 */ 0x6F, 0x00, 0x72, 0x00, 0x53, 0x00, 0x79, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x6F, 0x00, 0x6C, 0x00, +/* 00003340 */ 0x00, 0x00, 0x73, 0x00, 0x79, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x4C, 0x00, +/* 00003350 */ 0x65, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x74, 0x00, 0x68, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 00003360 */ 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x6F, 0x00, +/* 00003370 */ 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 00003380 */ 0x53, 0x00, 0x79, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x4C, 0x00, 0x65, 0x00, +/* 00003390 */ 0x6E, 0x00, 0x67, 0x00, 0x74, 0x00, 0x68, 0x00, 0x00, 0x00, 0x70, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 000033A0 */ 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x48, 0x00, +/* 000033B0 */ 0x6F, 0x00, 0x75, 0x00, 0x72, 0x00, 0x43, 0x00, 0x79, 0x00, 0x63, 0x00, 0x6C, 0x00, 0x65, 0x00, +/* 000033C0 */ 0x00, 0x00, 0x68, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x72, 0x00, 0x43, 0x00, 0x79, 0x00, 0x63, 0x00, +/* 000033D0 */ 0x6C, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x50, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 000033E0 */ 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0x47, 0x00, +/* 000033F0 */ 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x4D, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x6A, 0x00, +/* 00003400 */ 0x00, 0x00, 0x68, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x72, 0x00, 0x31, 0x00, 0x32, 0x00, 0x00, 0x00, +/* 00003410 */ 0x68, 0x00, 0x00, 0x00, 0x68, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x72, 0x00, 0x32, 0x00, 0x34, 0x00, +/* 00003420 */ 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, 0x7A, 0x00, +/* 00003430 */ 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 0x4C, 0x00, +/* 00003440 */ 0x00, 0x00, 0x4B, 0x00, 0x00, 0x00, 0x6B, 0x00, 0x00, 0x00, 0x5A, 0x00, 0x00, 0x00, 0x76, 0x00, +/* 00003450 */ 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x4F, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x78, 0x00, +/* 00003460 */ 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x34, 0x00, +/* 00003470 */ 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x68, 0x00, 0x31, 0x00, 0x32, 0x00, 0x00, 0x00, 0x68, 0x00, +/* 00003480 */ 0x32, 0x00, 0x33, 0x00, 0x00, 0x00, 0x68, 0x00, 0x31, 0x00, 0x31, 0x00, 0x00, 0x00, 0x68, 0x00, +/* 00003490 */ 0x32, 0x00, 0x34, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x68, 0x00, +/* 000034A0 */ 0x6F, 0x00, 0x75, 0x00, 0x72, 0x00, 0x43, 0x00, 0x79, 0x00, 0x63, 0x00, 0x6C, 0x00, 0x65, 0x00, +/* 000034B0 */ 0x00, 0x00, 0x63, 0x00, 0x61, 0x00, 0x00, 0x00, 0x68, 0x00, 0x63, 0x00, 0x00, 0x00, 0x45, 0x00, +/* 000034C0 */ 0x74, 0x00, 0x63, 0x00, 0x2F, 0x00, 0x55, 0x00, 0x6E, 0x00, 0x6B, 0x00, 0x6E, 0x00, 0x6F, 0x00, +/* 000034D0 */ 0x77, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x5A, 0x00, +/* 000034E0 */ 0x6F, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x00, 0x00, 0x49, 0x00, 0x41, 0x00, 0x4E, 0x00, 0x41, 0x00, +/* 000034F0 */ 0x20, 0x00, 0x5A, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x20, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 00003500 */ 0x20, 0x00, 0x4C, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x6B, 0x00, 0x20, 0x00, 0x6E, 0x00, 0x61, 0x00, +/* 00003510 */ 0x6D, 0x00, 0x65, 0x00, 0x20, 0x00, 0x28, 0x00, 0x41, 0x00, 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, +/* 00003520 */ 0x2F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, +/* 00003530 */ 0x6E, 0x00, 0x29, 0x00, 0x00, 0x00, 0x45, 0x00, 0x74, 0x00, 0x63, 0x00, 0x2F, 0x00, 0x55, 0x00, +/* 00003540 */ 0x54, 0x00, 0x43, 0x00, 0x00, 0x00, 0x45, 0x00, 0x74, 0x00, 0x63, 0x00, 0x2F, 0x00, 0x47, 0x00, +/* 00003550 */ 0x4D, 0x00, 0x54, 0x00, 0x00, 0x00, 0x55, 0x00, 0x54, 0x00, 0x43, 0x00, 0x00, 0x00, 0x66, 0x00, +/* 00003560 */ 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x4D, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 00003570 */ 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x62, 0x00, 0x61, 0x00, 0x73, 0x00, +/* 00003580 */ 0x69, 0x00, 0x63, 0x00, 0x00, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, +/* 00003590 */ 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x64, 0x00, 0x44, 0x00, 0x61, 0x00, +/* 000035A0 */ 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, +/* 000035B0 */ 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x65, 0x00, +/* 000035C0 */ 0x64, 0x00, 0x44, 0x00, 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x74, 0x00, +/* 000035D0 */ 0x73, 0x00, 0x00, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 000035E0 */ 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, +/* 000035F0 */ 0x54, 0x00, 0x6F, 0x00, 0x50, 0x00, 0x61, 0x00, 0x72, 0x00, 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, +/* 00003600 */ 0x49, 0x00, 0x6E, 0x00, 0x76, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x64, 0x00, 0x20, 0x00, +/* 00003610 */ 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x74, 0x00, +/* 00003620 */ 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x31, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x74, 0x00, +/* 00003630 */ 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x32, 0x00, 0x00, 0x00, 0x63, 0x00, 0x61, 0x00, 0x63, 0x00, +/* 00003640 */ 0x68, 0x00, 0x65, 0x00, 0x53, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x00, 0x00, 0x64, 0x00, +/* 00003650 */ 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x5F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, +/* 00003660 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, +/* 00003670 */ 0x6E, 0x00, 0x67, 0x00, 0x5F, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x72, 0x00, 0x79, 0x00, +/* 00003680 */ 0x50, 0x00, 0x6F, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, +/* 00003690 */ 0x74, 0x00, 0x65, 0x00, 0x5F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, +/* 000036A0 */ 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x53, 0x00, +/* 000036B0 */ 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x5F, 0x00, 0x65, 0x00, 0x6E, 0x00, +/* 000036C0 */ 0x74, 0x00, 0x72, 0x00, 0x79, 0x00, 0x50, 0x00, 0x6F, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x74, 0x00, +/* 000036D0 */ 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x5F, 0x00, 0x74, 0x00, 0x6F, 0x00, +/* 000036E0 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x54, 0x00, 0x69, 0x00, +/* 000036F0 */ 0x6D, 0x00, 0x65, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, +/* 00003700 */ 0x5F, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x72, 0x00, 0x79, 0x00, 0x50, 0x00, 0x6F, 0x00, +/* 00003710 */ 0x69, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x00, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00003720 */ 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, +/* 00003730 */ 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, +/* 00003740 */ 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 00003750 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x00, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00003760 */ 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, +/* 00003770 */ 0x61, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, +/* 00003780 */ 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 00003790 */ 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x50, 0x00, 0x61, 0x00, 0x72, 0x00, +/* 000037A0 */ 0x74, 0x00, 0x73, 0x00, 0x00, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, +/* 000037B0 */ 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, +/* 000037C0 */ 0x69, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x50, 0x00, 0x6C, 0x00, +/* 000037D0 */ 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x52, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x65, 0x00, +/* 000037E0 */ 0x73, 0x00, 0x00, 0x00, 0x52, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, +/* 000037F0 */ 0x65, 0x00, 0x50, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x00, 0x00, +/* 00003800 */ 0x50, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x52, 0x00, 0x75, 0x00, +/* 00003810 */ 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, +/* 00003820 */ 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, +/* 00003830 */ 0x6C, 0x00, 0x2E, 0x00, 0x50, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 00003840 */ 0x52, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, +/* 00003850 */ 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x50, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, +/* 00003860 */ 0x6C, 0x00, 0x52, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x2E, 0x00, 0x73, 0x00, +/* 00003870 */ 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, +/* 00003880 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, +/* 00003890 */ 0x66, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x50, 0x00, +/* 000038A0 */ 0x6C, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x52, 0x00, 0x75, 0x00, 0x6C, 0x00, +/* 000038B0 */ 0x65, 0x00, 0x73, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, +/* 000038C0 */ 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x65, 0x00, 0x6C, 0x00, +/* 000038D0 */ 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x00, 0x00, 0x73, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x65, 0x00, +/* 000038E0 */ 0x63, 0x00, 0x74, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x2E, 0x00, +/* 000038F0 */ 0x50, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x52, 0x00, 0x75, 0x00, +/* 00003900 */ 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, +/* 00003910 */ 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x72, 0x00, 0x65, 0x00, +/* 00003920 */ 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4F, 0x00, 0x70, 0x00, +/* 00003930 */ 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x00, 0x00, 0x74, 0x00, 0x79, 0x00, +/* 00003940 */ 0x70, 0x00, 0x65, 0x00, 0x00, 0x00, 0x63, 0x00, 0x61, 0x00, 0x72, 0x00, 0x64, 0x00, 0x69, 0x00, +/* 00003950 */ 0x6E, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x64, 0x00, 0x69, 0x00, +/* 00003960 */ 0x6E, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x72, 0x00, +/* 00003970 */ 0x61, 0x00, 0x6C, 0x00, 0x43, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x67, 0x00, 0x6F, 0x00, +/* 00003980 */ 0x72, 0x00, 0x69, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, +/* 00003990 */ 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x64, 0x00, +/* 000039A0 */ 0x50, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x52, 0x00, 0x75, 0x00, +/* 000039B0 */ 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x68, 0x00, 0x65, 0x00, +/* 000039C0 */ 0x72, 0x00, 0x00, 0x00, 0x70, 0x00, 0x72, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x6D, 0x00, 0x6F, 0x00, +/* 000039D0 */ 0x6E, 0x00, 0x74, 0x00, 0x68, 0x00, 0x2E, 0x00, 0x61, 0x00, 0x7D, 0x00, 0x7B, 0x00, 0x64, 0x00, +/* 000039E0 */ 0x61, 0x00, 0x79, 0x00, 0x2E, 0x00, 0x62, 0x00, 0x7D, 0x00, 0x7B, 0x00, 0x68, 0x00, 0x6F, 0x00, +/* 000039F0 */ 0x75, 0x00, 0x72, 0x00, 0x2E, 0x00, 0x63, 0x00, 0x7D, 0x00, 0x7B, 0x00, 0x6D, 0x00, 0x69, 0x00, +/* 00003A00 */ 0x6E, 0x00, 0x75, 0x00, 0x74, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x64, 0x00, 0x7D, 0x00, 0x7B, 0x00, +/* 00003A10 */ 0x73, 0x00, 0x65, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x2E, 0x00, 0x65, 0x00, +/* 00003A20 */ 0x7D, 0x00, 0x00, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, +/* 00003A30 */ 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x42, 0x00, +/* 00003A40 */ 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x46, 0x00, 0x69, 0x00, 0x74, 0x00, 0x00, 0x00, 0x72, 0x00, +/* 00003A50 */ 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, +/* 00003A60 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x6F, 0x00, 0x6B, 0x00, +/* 00003A70 */ 0x75, 0x00, 0x70, 0x00, 0x00, 0x00, 0x66, 0x00, 0x69, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00003A80 */ 0x72, 0x00, 0x65, 0x00, 0x64, 0x00, 0x00, 0x00, 0x65, 0x00, 0x78, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00003A90 */ 0x6E, 0x00, 0x73, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x46, 0x00, 0x69, 0x00, 0x6C, 0x00, +/* 00003AA0 */ 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x2D, 0x00, 0x75, 0x00, 0x2D, 0x00, 0x00, 0x00, +/* 00003AB0 */ 0x73, 0x00, 0x75, 0x00, 0x62, 0x00, 0x54, 0x00, 0x61, 0x00, 0x67, 0x00, 0x73, 0x00, 0x00, 0x00, +/* 00003AC0 */ 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x57, 0x00, 0x69, 0x00, +/* 00003AD0 */ 0x74, 0x00, 0x68, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x74, 0x00, 0x53, 0x00, 0x75, 0x00, 0x62, 0x00, +/* 00003AE0 */ 0x74, 0x00, 0x61, 0x00, 0x67, 0x00, 0x73, 0x00, 0x00, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x2A, 0x00, +/* 00003AF0 */ 0x3F, 0x00, 0x29, 0x00, 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x2D, 0x00, 0x75, 0x00, 0x29, 0x00, +/* 00003B00 */ 0x3F, 0x00, 0x24, 0x00, 0x00, 0x00, 0x28, 0x00, 0x5B, 0x00, 0x5E, 0x00, 0x2D, 0x00, 0x5D, 0x00, +/* 00003B10 */ 0x2A, 0x00, 0x29, 0x00, 0x2D, 0x00, 0x3F, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x2A, 0x00, 0x29, 0x00, +/* 00003B20 */ 0x3F, 0x00, 0x00, 0x00, 0x28, 0x00, 0x5B, 0x00, 0x5E, 0x00, 0x5F, 0x00, 0x5D, 0x00, 0x2A, 0x00, +/* 00003B30 */ 0x29, 0x00, 0x2E, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x54, 0x00, 0x6F, 0x00, 0x55, 0x00, 0x69, 0x00, +/* 00003B40 */ 0x6E, 0x00, 0x74, 0x00, 0x33, 0x00, 0x32, 0x00, 0x00, 0x00, 0x48, 0x00, 0x61, 0x00, 0x73, 0x00, +/* 00003B50 */ 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x74, 0x00, 0x79, 0x00, +/* 00003B60 */ 0x00, 0x00, 0x29, 0x00, 0x2A, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x00, 0x00, 0x73, 0x00, 0x65, 0x00, +/* 00003B70 */ 0x65, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 00003B80 */ 0x65, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x00, 0x00, +/* 00003B90 */ 0x66, 0x00, 0x69, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x64, 0x00, +/* 00003BA0 */ 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x4C, 0x00, 0x6F, 0x00, +/* 00003BB0 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5B, 0x00, 0x27, 0x00, 0x62, 0x00, +/* 00003BC0 */ 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x20, 0x00, 0x66, 0x00, 0x69, 0x00, 0x74, 0x00, 0x27, 0x00, +/* 00003BD0 */ 0x2C, 0x00, 0x20, 0x00, 0x27, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x6F, 0x00, 0x6B, 0x00, 0x75, 0x00, +/* 00003BE0 */ 0x70, 0x00, 0x27, 0x00, 0x5D, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, +/* 00003BF0 */ 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x5F, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, +/* 00003C00 */ 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, +/* 00003C10 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x5F, 0x00, +/* 00003C20 */ 0x64, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x6D, 0x00, 0x79, 0x00, 0x4E, 0x00, 0x61, 0x00, 0x6D, 0x00, +/* 00003C30 */ 0x65, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, +/* 00003C40 */ 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x74, 0x00, 0x5F, 0x00, 0x73, 0x00, +/* 00003C50 */ 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, +/* 00003C60 */ 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, +/* 00003C70 */ 0x66, 0x00, 0x5F, 0x00, 0x64, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x6D, 0x00, 0x79, 0x00, 0x4E, 0x00, +/* 00003C80 */ 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00003C90 */ 0x54, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, +/* 00003CA0 */ 0x61, 0x00, 0x74, 0x00, 0x5F, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, +/* 00003CB0 */ 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, +/* 00003CC0 */ 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x5F, 0x00, 0x64, 0x00, 0x75, 0x00, +/* 00003CD0 */ 0x6D, 0x00, 0x6D, 0x00, 0x79, 0x00, 0x4E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, +/* 00003CE0 */ 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x6F, 0x00, 0x6E, 0x00, +/* 00003CF0 */ 0x69, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, +/* 00003D00 */ 0x6C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x5F, 0x00, 0x64, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x6D, 0x00, +/* 00003D10 */ 0x79, 0x00, 0x4E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x74, 0x00, 0x6F, 0x00, +/* 00003D20 */ 0x52, 0x00, 0x65, 0x00, 0x74, 0x00, 0x75, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x63, 0x00, +/* 00003D30 */ 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, +/* 00003D40 */ 0x56, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x65, 0x00, 0x73, 0x00, 0x46, 0x00, 0x6F, 0x00, +/* 00003D50 */ 0x72, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, +/* 00003D60 */ 0x72, 0x00, 0x65, 0x00, 0x76, 0x00, 0x65, 0x00, 0x72, 0x00, 0x73, 0x00, 0x65, 0x00, 0x64, 0x00, +/* 00003D70 */ 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, +/* 00003D80 */ 0x6E, 0x00, 0x56, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, +/* 00003D90 */ 0x2D, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x2D, 0x00, 0x75, 0x00, 0x28, 0x00, +/* 00003DA0 */ 0x3F, 0x00, 0x3A, 0x00, 0x2D, 0x00, 0x5B, 0x00, 0x5E, 0x00, 0x5C, 0x00, 0x2D, 0x00, 0x5D, 0x00, +/* 00003DB0 */ 0x5B, 0x00, 0x5E, 0x00, 0x5C, 0x00, 0x2D, 0x00, 0x5D, 0x00, 0x3F, 0x00, 0x2D, 0x00, 0x5B, 0x00, +/* 00003DC0 */ 0x5E, 0x00, 0x5C, 0x00, 0x2D, 0x00, 0x5D, 0x00, 0x2B, 0x00, 0x29, 0x00, 0x2A, 0x00, 0x2D, 0x00, +/* 00003DD0 */ 0x63, 0x00, 0x6F, 0x00, 0x2D, 0x00, 0x28, 0x00, 0x5B, 0x00, 0x5E, 0x00, 0x5C, 0x00, 0x2D, 0x00, +/* 00003DE0 */ 0x5D, 0x00, 0x2B, 0x00, 0x29, 0x00, 0x2E, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x28, 0x00, 0x5B, 0x00, +/* 00003DF0 */ 0x5E, 0x00, 0x5F, 0x00, 0x5D, 0x00, 0x2A, 0x00, 0x29, 0x00, 0x5F, 0x00, 0x3F, 0x00, 0x28, 0x00, +/* 00003E00 */ 0x2E, 0x00, 0x2B, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x63, 0x00, 0x72, 0x00, 0x65, 0x00, +/* 00003E10 */ 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 00003E20 */ 0x65, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, +/* 00003E30 */ 0x6F, 0x00, 0x6E, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, +/* 00003E40 */ 0x00, 0x00, 0x2D, 0x00, 0x75, 0x00, 0x2D, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x2D, 0x00, 0x00, 0x00, +/* 00003E50 */ 0x5F, 0x00, 0x5F, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, +/* 00003E60 */ 0x6C, 0x00, 0x69, 0x00, 0x7A, 0x00, 0x65, 0x00, 0x64, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00, +/* 00003E70 */ 0x6C, 0x00, 0x4F, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x00, 0x00, +/* 00003E80 */ 0x41, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x6C, 0x00, 0x6F, 0x00, +/* 00003E90 */ 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x43, 0x00, +/* 00003EA0 */ 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00, 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5F, 0x00, +/* 00003EB0 */ 0x5F, 0x00, 0x75, 0x00, 0x73, 0x00, 0x61, 0x00, 0x67, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5F, 0x00, +/* 00003EC0 */ 0x5F, 0x00, 0x73, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, +/* 00003ED0 */ 0x76, 0x00, 0x69, 0x00, 0x74, 0x00, 0x79, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x69, 0x00, +/* 00003EE0 */ 0x67, 0x00, 0x6E, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x65, 0x00, 0x50, 0x00, 0x75, 0x00, 0x6E, 0x00, +/* 00003EF0 */ 0x63, 0x00, 0x74, 0x00, 0x75, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, +/* 00003F00 */ 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x73, 0x00, 0x65, 0x00, 0x46, 0x00, +/* 00003F10 */ 0x69, 0x00, 0x72, 0x00, 0x73, 0x00, 0x74, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x6E, 0x00, +/* 00003F20 */ 0x75, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x72, 0x00, 0x69, 0x00, 0x63, 0x00, 0x00, 0x00, 0x73, 0x00, +/* 00003F30 */ 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x64, 0x00, 0x00, 0x00, +/* 00003F40 */ 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x6C, 0x00, +/* 00003F50 */ 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x4D, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 00003F60 */ 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x75, 0x00, 0x6D, 0x00, +/* 00003F70 */ 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, +/* 00003F80 */ 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, +/* 00003F90 */ 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, +/* 00003FA0 */ 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, +/* 00003FB0 */ 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x57, 0x00, +/* 00003FC0 */ 0x69, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x73, 0x00, 0x54, 0x00, 0x6F, 0x00, +/* 00003FD0 */ 0x45, 0x00, 0x63, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, +/* 00003FE0 */ 0x6E, 0x00, 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x4D, 0x00, 0x61, 0x00, 0x70, 0x00, 0x00, 0x00, +/* 00003FF0 */ 0x47, 0x00, 0x72, 0x00, 0x65, 0x00, 0x67, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x69, 0x00, 0x61, 0x00, +/* 00004000 */ 0x6E, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x61, 0x00, +/* 00004010 */ 0x72, 0x00, 0x00, 0x00, 0x67, 0x00, 0x72, 0x00, 0x65, 0x00, 0x67, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 00004020 */ 0x79, 0x00, 0x00, 0x00, 0x48, 0x00, 0x65, 0x00, 0x62, 0x00, 0x72, 0x00, 0x65, 0x00, 0x77, 0x00, +/* 00004030 */ 0x43, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, +/* 00004040 */ 0x00, 0x00, 0x68, 0x00, 0x65, 0x00, 0x62, 0x00, 0x72, 0x00, 0x65, 0x00, 0x77, 0x00, 0x00, 0x00, +/* 00004050 */ 0x48, 0x00, 0x69, 0x00, 0x6A, 0x00, 0x72, 0x00, 0x69, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 00004060 */ 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x69, 0x00, 0x73, 0x00, +/* 00004070 */ 0x6C, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x69, 0x00, 0x63, 0x00, 0x00, 0x00, 0x4A, 0x00, 0x61, 0x00, +/* 00004080 */ 0x70, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x73, 0x00, 0x65, 0x00, 0x43, 0x00, 0x61, 0x00, +/* 00004090 */ 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6A, 0x00, +/* 000040A0 */ 0x61, 0x00, 0x70, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x73, 0x00, 0x65, 0x00, 0x00, 0x00, +/* 000040B0 */ 0x4A, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x43, 0x00, 0x61, 0x00, +/* 000040C0 */ 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6A, 0x00, +/* 000040D0 */ 0x75, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x4B, 0x00, 0x6F, 0x00, +/* 000040E0 */ 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, +/* 000040F0 */ 0x6E, 0x00, 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6B, 0x00, 0x6F, 0x00, 0x72, 0x00, +/* 00004100 */ 0x65, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x55, 0x00, 0x6D, 0x00, 0x41, 0x00, 0x6C, 0x00, +/* 00004110 */ 0x51, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, +/* 00004120 */ 0x6E, 0x00, 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x69, 0x00, 0x73, 0x00, 0x6C, 0x00, +/* 00004130 */ 0x61, 0x00, 0x6D, 0x00, 0x69, 0x00, 0x63, 0x00, 0x2D, 0x00, 0x63, 0x00, 0x69, 0x00, 0x76, 0x00, +/* 00004140 */ 0x69, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x54, 0x00, 0x68, 0x00, 0x61, 0x00, 0x69, 0x00, 0x43, 0x00, +/* 00004150 */ 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, +/* 00004160 */ 0x74, 0x00, 0x68, 0x00, 0x61, 0x00, 0x69, 0x00, 0x00, 0x00, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, +/* 00004170 */ 0x77, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, +/* 00004180 */ 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x74, 0x00, 0x61, 0x00, 0x69, 0x00, 0x77, 0x00, +/* 00004190 */ 0x61, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x45, 0x00, 0x63, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x4F, 0x00, +/* 000041A0 */ 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x54, 0x00, 0x6F, 0x00, +/* 000041B0 */ 0x57, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x73, 0x00, 0x54, 0x00, +/* 000041C0 */ 0x65, 0x00, 0x6D, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x00, 0x00, +/* 000041D0 */ 0x57, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x73, 0x00, 0x54, 0x00, +/* 000041E0 */ 0x6F, 0x00, 0x45, 0x00, 0x63, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x43, 0x00, 0x61, 0x00, 0x6C, 0x00, +/* 000041F0 */ 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, +/* 00004200 */ 0x72, 0x00, 0x72, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x57, 0x00, 0x65, 0x00, 0x65, 0x00, +/* 00004210 */ 0x6B, 0x00, 0x64, 0x00, 0x61, 0x00, 0x79, 0x00, 0x45, 0x00, 0x72, 0x00, 0x61, 0x00, 0x4D, 0x00, +/* 00004220 */ 0x6F, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x68, 0x00, 0x50, 0x00, 0x61, 0x00, 0x74, 0x00, 0x74, 0x00, +/* 00004230 */ 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x72, 0x00, +/* 00004240 */ 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x44, 0x00, 0x61, 0x00, 0x79, 0x00, 0x48, 0x00, 0x6F, 0x00, +/* 00004250 */ 0x75, 0x00, 0x72, 0x00, 0x4D, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00004260 */ 0x53, 0x00, 0x65, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x4D, 0x00, 0x6F, 0x00, +/* 00004270 */ 0x6E, 0x00, 0x74, 0x00, 0x68, 0x00, 0x50, 0x00, 0x61, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00004280 */ 0x72, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x75, 0x00, 0x70, 0x00, 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 00004290 */ 0x65, 0x00, 0x50, 0x00, 0x61, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, +/* 000042A0 */ 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x73, 0x00, 0x00, 0x00, +/* 000042B0 */ 0x74, 0x00, 0x65, 0x00, 0x6D, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 000042C0 */ 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, 0x79, 0x00, 0x6F, 0x00, 0x66, 0x00, 0x77, 0x00, 0x65, 0x00, +/* 000042D0 */ 0x65, 0x00, 0x6B, 0x00, 0x2E, 0x00, 0x61, 0x00, 0x62, 0x00, 0x62, 0x00, 0x72, 0x00, 0x65, 0x00, +/* 000042E0 */ 0x76, 0x00, 0x69, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x00, 0x00, 0x64, 0x00, +/* 000042F0 */ 0x61, 0x00, 0x79, 0x00, 0x6F, 0x00, 0x66, 0x00, 0x77, 0x00, 0x65, 0x00, 0x65, 0x00, 0x6B, 0x00, +/* 00004300 */ 0x2E, 0x00, 0x66, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x79, 0x00, 0x65, 0x00, +/* 00004310 */ 0x61, 0x00, 0x72, 0x00, 0x2E, 0x00, 0x61, 0x00, 0x62, 0x00, 0x62, 0x00, 0x72, 0x00, 0x65, 0x00, +/* 00004320 */ 0x76, 0x00, 0x69, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x00, 0x00, 0x79, 0x00, +/* 00004330 */ 0x65, 0x00, 0x61, 0x00, 0x72, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x6C, 0x00, +/* 00004340 */ 0x00, 0x00, 0x6D, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x68, 0x00, 0x2E, 0x00, 0x6E, 0x00, +/* 00004350 */ 0x75, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x72, 0x00, 0x69, 0x00, 0x63, 0x00, 0x00, 0x00, 0x6D, 0x00, +/* 00004360 */ 0x6F, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x68, 0x00, 0x2E, 0x00, 0x61, 0x00, 0x62, 0x00, 0x62, 0x00, +/* 00004370 */ 0x72, 0x00, 0x65, 0x00, 0x76, 0x00, 0x69, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, +/* 00004380 */ 0x00, 0x00, 0x6D, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x68, 0x00, 0x2E, 0x00, 0x66, 0x00, +/* 00004390 */ 0x75, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, +/* 000043A0 */ 0x7A, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x61, 0x00, 0x62, 0x00, 0x62, 0x00, +/* 000043B0 */ 0x72, 0x00, 0x65, 0x00, 0x76, 0x00, 0x69, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, +/* 000043C0 */ 0x00, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x7A, 0x00, 0x6F, 0x00, 0x6E, 0x00, +/* 000043D0 */ 0x65, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x7B, 0x00, +/* 000043E0 */ 0x28, 0x00, 0x00, 0x00, 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x5C, 0x00, 0x2E, 0x00, 0x73, 0x00, +/* 000043F0 */ 0x6F, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x2E, 0x00, +/* 00004400 */ 0x28, 0x00, 0x5B, 0x00, 0x61, 0x00, 0x2D, 0x00, 0x7A, 0x00, 0x5D, 0x00, 0x2A, 0x00, 0x29, 0x00, +/* 00004410 */ 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x5C, 0x00, 0x28, 0x00, 0x5B, 0x00, 0x30, 0x00, 0x2D, 0x00, +/* 00004420 */ 0x39, 0x00, 0x5D, 0x00, 0x5C, 0x00, 0x29, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x7D, 0x00, 0x00, 0x00, +/* 00004430 */ 0x45, 0x00, 0x72, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x20, 0x00, 0x77, 0x00, 0x68, 0x00, +/* 00004440 */ 0x65, 0x00, 0x6E, 0x00, 0x20, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x72, 0x00, 0x65, 0x00, +/* 00004450 */ 0x63, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x20, 0x00, 0x77, 0x00, 0x69, 0x00, +/* 00004460 */ 0x6E, 0x00, 0x64, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x73, 0x00, 0x20, 0x00, 0x72, 0x00, 0x65, 0x00, +/* 00004470 */ 0x74, 0x00, 0x75, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x64, 0x00, 0x20, 0x00, 0x77, 0x00, +/* 00004480 */ 0x65, 0x00, 0x65, 0x00, 0x6B, 0x00, 0x64, 0x00, 0x61, 0x00, 0x79, 0x00, 0x2F, 0x00, 0x45, 0x00, +/* 00004490 */ 0x72, 0x00, 0x61, 0x00, 0x2F, 0x00, 0x4D, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x68, 0x00, +/* 000044A0 */ 0x20, 0x00, 0x70, 0x00, 0x61, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, +/* 000044B0 */ 0x3B, 0x00, 0x20, 0x00, 0x72, 0x00, 0x65, 0x00, 0x67, 0x00, 0x65, 0x00, 0x78, 0x00, 0x20, 0x00, +/* 000044C0 */ 0x72, 0x00, 0x65, 0x00, 0x74, 0x00, 0x75, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x64, 0x00, +/* 000044D0 */ 0x20, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x20, 0x00, 0x0A, 0x00, +/* 000044E0 */ 0x49, 0x00, 0x6E, 0x00, 0x70, 0x00, 0x75, 0x00, 0x74, 0x00, 0x20, 0x00, 0x77, 0x00, 0x61, 0x00, +/* 000044F0 */ 0x73, 0x00, 0x3A, 0x00, 0x20, 0x00, 0x27, 0x00, 0x00, 0x00, 0x27, 0x00, 0x0A, 0x00, 0x52, 0x00, +/* 00004500 */ 0x65, 0x00, 0x67, 0x00, 0x65, 0x00, 0x78, 0x00, 0x3A, 0x00, 0x20, 0x00, 0x27, 0x00, 0x00, 0x00, +/* 00004510 */ 0x28, 0x00, 0x5C, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x29, 0x00, +/* 00004520 */ 0x3F, 0x00, 0x29, 0x00, 0x5C, 0x00, 0x2E, 0x00, 0x28, 0x00, 0x5B, 0x00, 0x61, 0x00, 0x2D, 0x00, +/* 00004530 */ 0x7A, 0x00, 0x5D, 0x00, 0x2A, 0x00, 0x29, 0x00, 0x28, 0x00, 0x5C, 0x00, 0x28, 0x00, 0x5B, 0x00, +/* 00004540 */ 0x30, 0x00, 0x2D, 0x00, 0x39, 0x00, 0x5D, 0x00, 0x5C, 0x00, 0x29, 0x00, 0x29, 0x00, 0x3F, 0x00, +/* 00004550 */ 0x7D, 0x00, 0x27, 0x00, 0x00, 0x00, 0x66, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x00, 0x00, +/* 00004560 */ 0x7B, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x00, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x61, 0x00, 0x62, 0x00, +/* 00004570 */ 0x62, 0x00, 0x72, 0x00, 0x65, 0x00, 0x76, 0x00, 0x69, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00004580 */ 0x64, 0x00, 0x00, 0x00, 0x61, 0x00, 0x62, 0x00, 0x62, 0x00, 0x72, 0x00, 0x65, 0x00, 0x76, 0x00, +/* 00004590 */ 0x69, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x28, 0x00, 0x31, 0x00, 0x29, 0x00, +/* 000045A0 */ 0x00, 0x00, 0x29, 0x00, 0x28, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x5C, 0x00, 0x2E, 0x00, 0x73, 0x00, +/* 000045B0 */ 0x6F, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x5C, 0x00, 0x2E, 0x00, 0x28, 0x00, +/* 000045C0 */ 0x5B, 0x00, 0x61, 0x00, 0x2D, 0x00, 0x7A, 0x00, 0x5D, 0x00, 0x2A, 0x00, 0x29, 0x00, 0x28, 0x00, +/* 000045D0 */ 0x3F, 0x00, 0x3A, 0x00, 0x5C, 0x00, 0x28, 0x00, 0x5B, 0x00, 0x30, 0x00, 0x2D, 0x00, 0x39, 0x00, +/* 000045E0 */ 0x5D, 0x00, 0x5C, 0x00, 0x29, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x45, 0x00, +/* 000045F0 */ 0x72, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x20, 0x00, 0x77, 0x00, 0x68, 0x00, 0x65, 0x00, +/* 00004600 */ 0x6E, 0x00, 0x20, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x72, 0x00, 0x65, 0x00, 0x63, 0x00, +/* 00004610 */ 0x74, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x20, 0x00, 0x77, 0x00, 0x69, 0x00, 0x6E, 0x00, +/* 00004620 */ 0x64, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x73, 0x00, 0x20, 0x00, 0x72, 0x00, 0x65, 0x00, 0x74, 0x00, +/* 00004630 */ 0x75, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x64, 0x00, 0x20, 0x00, 0x64, 0x00, 0x61, 0x00, +/* 00004640 */ 0x79, 0x00, 0x2F, 0x00, 0x68, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x72, 0x00, 0x2F, 0x00, 0x6D, 0x00, +/* 00004650 */ 0x69, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x74, 0x00, 0x65, 0x00, 0x2F, 0x00, 0x73, 0x00, 0x65, 0x00, +/* 00004660 */ 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x2F, 0x00, 0x6D, 0x00, 0x6F, 0x00, 0x6E, 0x00, +/* 00004670 */ 0x74, 0x00, 0x68, 0x00, 0x20, 0x00, 0x70, 0x00, 0x61, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00004680 */ 0x72, 0x00, 0x6E, 0x00, 0x3B, 0x00, 0x20, 0x00, 0x72, 0x00, 0x65, 0x00, 0x67, 0x00, 0x65, 0x00, +/* 00004690 */ 0x78, 0x00, 0x20, 0x00, 0x72, 0x00, 0x65, 0x00, 0x74, 0x00, 0x75, 0x00, 0x72, 0x00, 0x6E, 0x00, +/* 000046A0 */ 0x65, 0x00, 0x64, 0x00, 0x20, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x2E, 0x00, +/* 000046B0 */ 0x20, 0x00, 0x0A, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x70, 0x00, 0x75, 0x00, 0x74, 0x00, 0x20, 0x00, +/* 000046C0 */ 0x77, 0x00, 0x61, 0x00, 0x73, 0x00, 0x3A, 0x00, 0x20, 0x00, 0x27, 0x00, 0x00, 0x00, 0x2E, 0x00, +/* 000046D0 */ 0x69, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x65, 0x00, 0x67, 0x00, 0x65, 0x00, 0x72, 0x00, 0x28, 0x00, +/* 000046E0 */ 0x32, 0x00, 0x29, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 000046F0 */ 0x67, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x74, 0x00, +/* 00004700 */ 0x65, 0x00, 0x67, 0x00, 0x65, 0x00, 0x72, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x64, 0x00, 0x61, 0x00, +/* 00004710 */ 0x79, 0x00, 0x6F, 0x00, 0x66, 0x00, 0x77, 0x00, 0x65, 0x00, 0x65, 0x00, 0x6B, 0x00, 0x00, 0x00, +/* 00004720 */ 0x45, 0x00, 0x72, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x20, 0x00, 0x77, 0x00, 0x68, 0x00, +/* 00004730 */ 0x65, 0x00, 0x6E, 0x00, 0x20, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x72, 0x00, 0x65, 0x00, +/* 00004740 */ 0x63, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x20, 0x00, 0x77, 0x00, 0x69, 0x00, +/* 00004750 */ 0x6E, 0x00, 0x64, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x73, 0x00, 0x20, 0x00, 0x72, 0x00, 0x65, 0x00, +/* 00004760 */ 0x74, 0x00, 0x75, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x64, 0x00, 0x20, 0x00, 0x79, 0x00, +/* 00004770 */ 0x65, 0x00, 0x61, 0x00, 0x72, 0x00, 0x3B, 0x00, 0x20, 0x00, 0x72, 0x00, 0x65, 0x00, 0x67, 0x00, +/* 00004780 */ 0x65, 0x00, 0x78, 0x00, 0x20, 0x00, 0x72, 0x00, 0x65, 0x00, 0x74, 0x00, 0x75, 0x00, 0x72, 0x00, +/* 00004790 */ 0x6E, 0x00, 0x65, 0x00, 0x64, 0x00, 0x20, 0x00, 0x6E, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x6C, 0x00, +/* 000047A0 */ 0x00, 0x00, 0x7B, 0x00, 0x79, 0x00, 0x65, 0x00, 0x61, 0x00, 0x72, 0x00, 0x2E, 0x00, 0x61, 0x00, +/* 000047B0 */ 0x62, 0x00, 0x62, 0x00, 0x72, 0x00, 0x65, 0x00, 0x76, 0x00, 0x69, 0x00, 0x61, 0x00, 0x74, 0x00, +/* 000047C0 */ 0x65, 0x00, 0x64, 0x00, 0x28, 0x00, 0x32, 0x00, 0x29, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x7B, 0x00, +/* 000047D0 */ 0x79, 0x00, 0x65, 0x00, 0x61, 0x00, 0x72, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x75, 0x00, 0x6C, 0x00, +/* 000047E0 */ 0x6C, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x7A, 0x00, +/* 000047F0 */ 0x6F, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x7B, 0x00, 0x79, 0x00, 0x65, 0x00, +/* 00004800 */ 0x61, 0x00, 0x72, 0x00, 0x5C, 0x00, 0x2E, 0x00, 0x5B, 0x00, 0x61, 0x00, 0x2D, 0x00, 0x7A, 0x00, +/* 00004810 */ 0x5D, 0x00, 0x2A, 0x00, 0x28, 0x00, 0x5C, 0x00, 0x28, 0x00, 0x5B, 0x00, 0x30, 0x00, 0x2D, 0x00, +/* 00004820 */ 0x39, 0x00, 0x5D, 0x00, 0x5C, 0x00, 0x29, 0x00, 0x29, 0x00, 0x3F, 0x00, 0x5C, 0x00, 0x7D, 0x00, +/* 00004830 */ 0x00, 0x00, 0x31, 0x00, 0x32, 0x00, 0x48, 0x00, 0x6F, 0x00, 0x75, 0x00, 0x72, 0x00, 0x43, 0x00, +/* 00004840 */ 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x6B, 0x00, 0x00, 0x00, 0x32, 0x00, 0x34, 0x00, 0x48, 0x00, +/* 00004850 */ 0x6F, 0x00, 0x75, 0x00, 0x72, 0x00, 0x43, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x6B, 0x00, +/* 00004860 */ 0x00, 0x00, 0x6E, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x00, 0x00, 0x74, 0x00, 0x65, 0x00, +/* 00004870 */ 0x6D, 0x00, 0x70, 0x00, 0x00, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x54, 0x00, +/* 00004880 */ 0x69, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x00, 0x61, 0x00, +/* 00004890 */ 0x74, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, +/* 000048A0 */ 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x6F, 0x00, +/* 000048B0 */ 0x6C, 0x00, 0x76, 0x00, 0x65, 0x00, 0x64, 0x00, 0x4F, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, +/* 000048C0 */ 0x6F, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x00, 0x00, 0xFE, 0x9B, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x6A, +/* 000048D0 */ 0x00, 0x00, 0x00, 0x9B, 0x00, 0x00, 0x00, 0xE7, 0x00, 0x00, 0x00, 0x51, 0x01, 0x00, 0x00, 0xBB, +/* 000048E0 */ 0x01, 0x00, 0x00, 0xBC, 0x01, 0x00, 0x00, 0xCA, 0x01, 0x00, 0x00, 0xDB, 0x01, 0x00, 0x00, 0x03, +/* 000048F0 */ 0x02, 0x00, 0x00, 0x2C, 0x02, 0x00, 0x00, 0x2D, 0x02, 0x00, 0x00, 0xA7, 0x02, 0x00, 0x00, 0xC6, +/* 00004900 */ 0x02, 0x00, 0x00, 0xC7, 0x02, 0x00, 0x00, 0xFA, 0x02, 0x00, 0x00, 0x39, 0x03, 0x00, 0x00, 0x5E, +/* 00004910 */ 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0xC5, 0x03, 0x00, 0x00, 0xC6, 0x03, 0x00, 0x00, 0xD7, +/* 00004920 */ 0x03, 0x00, 0x00, 0xFA, 0x03, 0x00, 0x00, 0xFB, 0x03, 0x00, 0x00, 0x0C, 0x04, 0x00, 0x00, 0x41, +/* 00004930 */ 0x04, 0x00, 0x00, 0x7A, 0x04, 0x00, 0x00, 0xBB, 0x04, 0x00, 0x00, 0xBC, 0x04, 0x00, 0x00, 0xFD, +/* 00004940 */ 0x04, 0x00, 0x00, 0x35, 0x05, 0x00, 0x00, 0x36, 0x05, 0x00, 0x00, 0xB0, 0x05, 0x00, 0x00, 0x11, +/* 00004950 */ 0x06, 0x00, 0x00, 0xA0, 0x06, 0x00, 0x00, 0x0B, 0x07, 0x00, 0x00, 0x2C, 0x07, 0x00, 0x00, 0x42, +/* 00004960 */ 0x07, 0x00, 0x00, 0x54, 0x07, 0x00, 0x00, 0x74, 0x07, 0x00, 0x00, 0x75, 0x07, 0x00, 0x00, 0x8C, +/* 00004970 */ 0x07, 0x00, 0x00, 0xD6, 0x07, 0x00, 0x00, 0xE5, 0x07, 0x00, 0x00, 0xE6, 0x07, 0x00, 0x00, 0x04, +/* 00004980 */ 0x08, 0x00, 0x00, 0x2F, 0x08, 0x00, 0x00, 0x4B, 0x08, 0x00, 0x00, 0x5D, 0x08, 0x00, 0x00, 0x5E, +/* 00004990 */ 0x08, 0x00, 0x00, 0xBB, 0x08, 0x00, 0x00, 0xE9, 0x08, 0x00, 0x00, 0xFB, 0x08, 0x00, 0x00, 0xFC, +/* 000049A0 */ 0x08, 0x00, 0x00, 0x26, 0x09, 0x00, 0x00, 0x34, 0x09, 0x00, 0x00, 0x40, 0x09, 0x00, 0x00, 0x46, +/* 000049B0 */ 0x09, 0x00, 0x00, 0x47, 0x09, 0x00, 0x00, 0x65, 0x09, 0x00, 0x00, 0x66, 0x09, 0x00, 0x00, 0x8A, +/* 000049C0 */ 0x09, 0x00, 0x00, 0xAC, 0x09, 0x00, 0x00, 0xCE, 0x09, 0x00, 0x00, 0xF0, 0x09, 0x00, 0x00, 0x12, +/* 000049D0 */ 0x0A, 0x00, 0x00, 0x30, 0x0A, 0x00, 0x00, 0x50, 0x0A, 0x00, 0x00, 0x51, 0x0A, 0x00, 0x00, 0x7D, +/* 000049E0 */ 0x0A, 0x00, 0x00, 0x7E, 0x0A, 0x00, 0x00, 0x9C, 0x0A, 0x00, 0x00, 0xC2, 0x0A, 0x00, 0x00, 0xEC, +/* 000049F0 */ 0x0A, 0x00, 0x00, 0x1A, 0x0B, 0x00, 0x00, 0x3F, 0x0B, 0x00, 0x00, 0x4D, 0x0B, 0x00, 0x00, 0x4E, +/* 00004A00 */ 0x0B, 0x00, 0x00, 0xA2, 0x0B, 0x00, 0x00, 0xF2, 0x0B, 0x00, 0x00, 0x50, 0x0C, 0x00, 0x00, 0xAC, +/* 00004A10 */ 0x0C, 0x00, 0x00, 0x22, 0x0D, 0x00, 0x00, 0x52, 0x0D, 0x00, 0x00, 0xA7, 0x0D, 0x00, 0x00, 0xE9, +/* 00004A20 */ 0x0D, 0x00, 0x00, 0x33, 0x0E, 0x00, 0x00, 0x3A, 0x0E, 0x00, 0x00, 0x3B, 0x0E, 0x00, 0x00, 0x83, +/* 00004A30 */ 0x0E, 0x00, 0x00, 0xCB, 0x0E, 0x00, 0x00, 0x11, 0x0F, 0x00, 0x00, 0x12, 0x0F, 0x00, 0x00, 0x5E, +/* 00004A40 */ 0x0F, 0x00, 0x00, 0xA8, 0x0F, 0x00, 0x00, 0xE2, 0x0F, 0x00, 0x00, 0xE3, 0x0F, 0x00, 0x00, 0x31, +/* 00004A50 */ 0x10, 0x00, 0x00, 0x87, 0x10, 0x00, 0x00, 0xDD, 0x10, 0x00, 0x00, 0xDE, 0x10, 0x00, 0x00, 0x1C, +/* 00004A60 */ 0x11, 0x00, 0x00, 0x54, 0x11, 0x00, 0x00, 0x55, 0x11, 0x00, 0x00, 0x65, 0x11, 0x00, 0x00, 0xBC, +/* 00004A70 */ 0x11, 0x00, 0x00, 0x13, 0x12, 0x00, 0x00, 0x8E, 0x12, 0x00, 0x00, 0x02, 0x13, 0x00, 0x00, 0x84, +/* 00004A80 */ 0x13, 0x00, 0x00, 0x04, 0x14, 0x00, 0x00, 0x4C, 0x14, 0x00, 0x00, 0xBE, 0x14, 0x00, 0x00, 0xBF, +/* 00004A90 */ 0x14, 0x00, 0x00, 0x1D, 0x15, 0x00, 0x00, 0x73, 0x15, 0x00, 0x00, 0xDE, 0x15, 0x00, 0x00, 0x4B, +/* 00004AA0 */ 0x16, 0x00, 0x00, 0xC6, 0x16, 0x00, 0x00, 0x43, 0x17, 0x00, 0x00, 0xBA, 0x17, 0x00, 0x00, 0x29, +/* 00004AB0 */ 0x18, 0x00, 0x00, 0x86, 0x18, 0x00, 0x00, 0x87, 0x18, 0x00, 0x00, 0xC0, 0x18, 0x00, 0x00, 0x3C, +/* 00004AC0 */ 0x19, 0x00, 0x00, 0xC9, 0x19, 0x00, 0x00, 0xF1, 0x19, 0x00, 0x00, 0x1B, 0x1A, 0x00, 0x00, 0x6B, +/* 00004AD0 */ 0x1A, 0x00, 0x00, 0x76, 0x1A, 0x00, 0x00, 0xBF, 0x1A, 0x00, 0x00, 0x1C, 0x1B, 0x00, 0x00, 0x82, +/* 00004AE0 */ 0x1B, 0x00, 0x00, 0x83, 0x1B, 0x00, 0x00, 0xA9, 0x1B, 0x00, 0x00, 0x09, 0x1C, 0x00, 0x00, 0x51, +/* 00004AF0 */ 0x1C, 0x00, 0x00, 0x7F, 0x1C, 0x00, 0x00, 0xA5, 0x1C, 0x00, 0x00, 0xA6, 0x1C, 0x00, 0x00, 0xE3, +/* 00004B00 */ 0x1C, 0x00, 0x00, 0x1A, 0x1D, 0x00, 0x00, 0x1B, 0x1D, 0x00, 0x00, 0x81, 0x1D, 0x00, 0x00, 0x82, +/* 00004B10 */ 0x1D, 0x00, 0x00, 0xF2, 0x1D, 0x00, 0x00, 0x70, 0x1E, 0x00, 0x00, 0x77, 0x1E, 0x00, 0x00, 0x78, +/* 00004B20 */ 0x1E, 0x00, 0x00, 0xD2, 0x1E, 0x00, 0x00, 0x3F, 0x1F, 0x00, 0x00, 0xAB, 0x1F, 0x00, 0x00, 0x13, +/* 00004B30 */ 0x20, 0x00, 0x00, 0x82, 0x20, 0x00, 0x00, 0xE2, 0x20, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x01, +/* 00004B40 */ 0x21, 0x00, 0x00, 0x26, 0x21, 0x00, 0x00, 0x51, 0x21, 0x00, 0x00, 0x86, 0x21, 0x00, 0x00, 0xAA, +/* 00004B50 */ 0x21, 0x00, 0x00, 0xB4, 0x21, 0x00, 0x00, 0xB5, 0x21, 0x00, 0x00, 0xE9, 0x21, 0x00, 0x00, 0x00, +/* 00004B60 */ 0x22, 0x00, 0x00, 0x4F, 0x22, 0x00, 0x00, 0x81, 0x22, 0x00, 0x00, 0xA5, 0x22, 0x00, 0x00, 0xB6, +/* 00004B70 */ 0x22, 0x00, 0x00, 0xDC, 0x22, 0x00, 0x00, 0xE6, 0x22, 0x00, 0x00, 0xE7, 0x22, 0x00, 0x00, 0x07, +/* 00004B80 */ 0x23, 0x00, 0x00, 0x0E, 0x23, 0x00, 0x00, 0x0F, 0x23, 0x00, 0x00, 0x74, 0x23, 0x00, 0x00, 0xA0, +/* 00004B90 */ 0x23, 0x00, 0x00, 0xE6, 0x23, 0x00, 0x00, 0xFC, 0x23, 0x00, 0x00, 0x06, 0x24, 0x00, 0x00, 0x0D, +/* 00004BA0 */ 0x24, 0x00, 0x00, 0x0E, 0x24, 0x00, 0x00, 0x3F, 0x24, 0x00, 0x00, 0x76, 0x24, 0x00, 0x00, 0x7D, +/* 00004BB0 */ 0x24, 0x00, 0x00, 0x7E, 0x24, 0x00, 0x00, 0xB2, 0x24, 0x00, 0x00, 0xF0, 0x24, 0x00, 0x00, 0xF6, +/* 00004BC0 */ 0x24, 0x00, 0x00, 0xF7, 0x24, 0x00, 0x00, 0x51, 0x25, 0x00, 0x00, 0x7C, 0x25, 0x00, 0x00, 0xA5, +/* 00004BD0 */ 0x25, 0x00, 0x00, 0xD0, 0x25, 0x00, 0x00, 0xDA, 0x25, 0x00, 0x00, 0xDB, 0x25, 0x00, 0x00, 0xFB, +/* 00004BE0 */ 0x25, 0x00, 0x00, 0x02, 0x26, 0x00, 0x00, 0x03, 0x26, 0x00, 0x00, 0x0B, 0x26, 0x00, 0x00, 0x4E, +/* 00004BF0 */ 0x26, 0x00, 0x00, 0x55, 0x26, 0x00, 0x00, 0x7F, 0x26, 0x00, 0x00, 0x86, 0x26, 0x00, 0x00, 0xF7, +/* 00004C00 */ 0x26, 0x00, 0x00, 0x54, 0x27, 0x00, 0x00, 0xA4, 0x27, 0x00, 0x00, 0xAC, 0x27, 0x00, 0x00, 0xF3, +/* 00004C10 */ 0x27, 0x00, 0x00, 0x17, 0x28, 0x00, 0x00, 0x35, 0x28, 0x00, 0x00, 0x3F, 0x28, 0x00, 0x00, 0x40, +/* 00004C20 */ 0x28, 0x00, 0x00, 0x60, 0x28, 0x00, 0x00, 0x7C, 0x28, 0x00, 0x00, 0x93, 0x28, 0x00, 0x00, 0xC3, +/* 00004C30 */ 0x28, 0x00, 0x00, 0xE5, 0x28, 0x00, 0x00, 0xF3, 0x28, 0x00, 0x00, 0xF4, 0x28, 0x00, 0x00, 0x0E, +/* 00004C40 */ 0x29, 0x00, 0x00, 0x4C, 0x29, 0x00, 0x00, 0x7B, 0x29, 0x00, 0x00, 0x98, 0x29, 0x00, 0x00, 0xB3, +/* 00004C50 */ 0x29, 0x00, 0x00, 0xC5, 0x29, 0x00, 0x00, 0xD3, 0x29, 0x00, 0x00, 0xD4, 0x29, 0x00, 0x00, 0xF2, +/* 00004C60 */ 0x29, 0x00, 0x00, 0x14, 0x2A, 0x00, 0x00, 0x58, 0x2A, 0x00, 0x00, 0xA6, 0x2A, 0x00, 0x00, 0xE9, +/* 00004C70 */ 0x2A, 0x00, 0x00, 0x38, 0x2B, 0x00, 0x00, 0x68, 0x2B, 0x00, 0x00, 0xB1, 0x2B, 0x00, 0x00, 0xCB, +/* 00004C80 */ 0x2B, 0x00, 0x00, 0xD9, 0x2B, 0x00, 0x00, 0xDA, 0x2B, 0x00, 0x00, 0x12, 0x2C, 0x00, 0x00, 0x1C, +/* 00004C90 */ 0x2C, 0x00, 0x00, 0x23, 0x2C, 0x00, 0x00, 0x24, 0x2C, 0x00, 0x00, 0x2C, 0x2C, 0x00, 0x00, 0x78, +/* 00004CA0 */ 0x2C, 0x00, 0x00, 0x7F, 0x2C, 0x00, 0x00, 0xA3, 0x2C, 0x00, 0x00, 0xAA, 0x2C, 0x00, 0x00, 0x1B, +/* 00004CB0 */ 0x2D, 0x00, 0x00, 0x63, 0x2D, 0x00, 0x00, 0x6B, 0x2D, 0x00, 0x00, 0xB6, 0x2D, 0x00, 0x00, 0xD9, +/* 00004CC0 */ 0x2D, 0x00, 0x00, 0x15, 0x2E, 0x00, 0x00, 0x5A, 0x2E, 0x00, 0x00, 0x84, 0x2E, 0x00, 0x00, 0x9E, +/* 00004CD0 */ 0x2E, 0x00, 0x00, 0xAC, 0x2E, 0x00, 0x00, 0xAD, 0x2E, 0x00, 0x00, 0x0D, 0x2F, 0x00, 0x00, 0x3E, +/* 00004CE0 */ 0x2F, 0x00, 0x00, 0x6F, 0x2F, 0x00, 0x00, 0xB1, 0x2F, 0x00, 0x00, 0xF8, 0x2F, 0x00, 0x00, 0x0A, +/* 00004CF0 */ 0x30, 0x00, 0x00, 0x0B, 0x30, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x00, 0x38, 0x30, 0x00, 0x00, 0x42, +/* 00004D00 */ 0x30, 0x00, 0x00, 0x43, 0x30, 0x00, 0x00, 0x6F, 0x30, 0x00, 0x00, 0x86, 0x30, 0x00, 0x00, 0x8D, +/* 00004D10 */ 0x30, 0x00, 0x00, 0x8E, 0x30, 0x00, 0x00, 0xB8, 0x30, 0x00, 0x00, 0xB9, 0x30, 0x00, 0x00, 0xC1, +/* 00004D20 */ 0x30, 0x00, 0x00, 0x08, 0x31, 0x00, 0x00, 0x0F, 0x31, 0x00, 0x00, 0x3B, 0x31, 0x00, 0x00, 0x42, +/* 00004D30 */ 0x31, 0x00, 0x00, 0x9F, 0x31, 0x00, 0x00, 0xFD, 0x31, 0x00, 0x00, 0x05, 0x32, 0x00, 0x00, 0x43, +/* 00004D40 */ 0x32, 0x00, 0x00, 0x6A, 0x32, 0x00, 0x00, 0x6B, 0x32, 0x00, 0x00, 0x94, 0x32, 0x00, 0x00, 0xCE, +/* 00004D50 */ 0x32, 0x00, 0x00, 0xE8, 0x32, 0x00, 0x00, 0x0B, 0x33, 0x00, 0x00, 0x28, 0x33, 0x00, 0x00, 0x43, +/* 00004D60 */ 0x33, 0x00, 0x00, 0x61, 0x33, 0x00, 0x00, 0x7D, 0x33, 0x00, 0x00, 0xBB, 0x33, 0x00, 0x00, 0xF4, +/* 00004D70 */ 0x33, 0x00, 0x00, 0x15, 0x34, 0x00, 0x00, 0x36, 0x34, 0x00, 0x00, 0x5D, 0x34, 0x00, 0x00, 0x7D, +/* 00004D80 */ 0x34, 0x00, 0x00, 0x9E, 0x34, 0x00, 0x00, 0xB7, 0x34, 0x00, 0x00, 0xD4, 0x34, 0x00, 0x00, 0xF3, +/* 00004D90 */ 0x34, 0x00, 0x00, 0x05, 0x35, 0x00, 0x00, 0x13, 0x35, 0x00, 0x00, 0x14, 0x35, 0x00, 0x00, 0x4B, +/* 00004DA0 */ 0x35, 0x00, 0x00, 0x55, 0x35, 0x00, 0x00, 0x56, 0x35, 0x00, 0x00, 0x8D, 0x35, 0x00, 0x00, 0xC2, +/* 00004DB0 */ 0x35, 0x00, 0x00, 0xF0, 0x35, 0x00, 0x00, 0x07, 0x36, 0x00, 0x00, 0x18, 0x36, 0x00, 0x00, 0x36, +/* 00004DC0 */ 0x36, 0x00, 0x00, 0x40, 0x36, 0x00, 0x00, 0x47, 0x36, 0x00, 0x00, 0x48, 0x36, 0x00, 0x00, 0x50, +/* 00004DD0 */ 0x36, 0x00, 0x00, 0xAE, 0x36, 0x00, 0x00, 0x03, 0x37, 0x00, 0x00, 0x0A, 0x37, 0x00, 0x00, 0x2E, +/* 00004DE0 */ 0x37, 0x00, 0x00, 0x35, 0x37, 0x00, 0x00, 0xA6, 0x37, 0x00, 0x00, 0x20, 0x38, 0x00, 0x00, 0x9B, +/* 00004DF0 */ 0x38, 0x00, 0x00, 0xCE, 0x38, 0x00, 0x00, 0x4A, 0x39, 0x00, 0x00, 0x52, 0x39, 0x00, 0x00, 0xBD, +/* 00004E00 */ 0x39, 0x00, 0x00, 0xEC, 0x39, 0x00, 0x00, 0xFB, 0x39, 0x00, 0x00, 0x1F, 0x3A, 0x00, 0x00, 0x63, +/* 00004E10 */ 0x3A, 0x00, 0x00, 0x74, 0x3A, 0x00, 0x00, 0xB9, 0x3A, 0x00, 0x00, 0xC3, 0x3A, 0x00, 0x00, 0xC4, +/* 00004E20 */ 0x3A, 0x00, 0x00, 0xE8, 0x3A, 0x00, 0x00, 0x22, 0x3B, 0x00, 0x00, 0x49, 0x3B, 0x00, 0x00, 0x83, +/* 00004E30 */ 0x3B, 0x00, 0x00, 0xE8, 0x3B, 0x00, 0x00, 0x12, 0x3C, 0x00, 0x00, 0x43, 0x3C, 0x00, 0x00, 0x62, +/* 00004E40 */ 0x3C, 0x00, 0x00, 0xB2, 0x3C, 0x00, 0x00, 0xE6, 0x3C, 0x00, 0x00, 0x17, 0x3D, 0x00, 0x00, 0x6B, +/* 00004E50 */ 0x3D, 0x00, 0x00, 0x9F, 0x3D, 0x00, 0x00, 0xEC, 0x3D, 0x00, 0x00, 0x06, 0x3E, 0x00, 0x00, 0x55, +/* 00004E60 */ 0x3E, 0x00, 0x00, 0x7D, 0x3E, 0x00, 0x00, 0x93, 0x3E, 0x00, 0x00, 0xA5, 0x3E, 0x00, 0x00, 0xB3, +/* 00004E70 */ 0x3E, 0x00, 0x00, 0xB4, 0x3E, 0x00, 0x00, 0xE6, 0x3E, 0x00, 0x00, 0x19, 0x3F, 0x00, 0x00, 0x63, +/* 00004E80 */ 0x3F, 0x00, 0x00, 0x95, 0x3F, 0x00, 0x00, 0xC3, 0x3F, 0x00, 0x00, 0xFC, 0x3F, 0x00, 0x00, 0x12, +/* 00004E90 */ 0x40, 0x00, 0x00, 0x24, 0x40, 0x00, 0x00, 0x32, 0x40, 0x00, 0x00, 0x33, 0x40, 0x00, 0x00, 0x54, +/* 00004EA0 */ 0x40, 0x00, 0x00, 0x92, 0x40, 0x00, 0x00, 0x9E, 0x40, 0x00, 0x00, 0x9F, 0x40, 0x00, 0x00, 0xCC, +/* 00004EB0 */ 0x40, 0x00, 0x00, 0x12, 0x41, 0x00, 0x00, 0x39, 0x41, 0x00, 0x00, 0x6C, 0x41, 0x00, 0x00, 0x81, +/* 00004EC0 */ 0x41, 0x00, 0x00, 0xD1, 0x41, 0x00, 0x00, 0x1F, 0x42, 0x00, 0x00, 0x70, 0x42, 0x00, 0x00, 0x7E, +/* 00004ED0 */ 0x42, 0x00, 0x00, 0x7F, 0x42, 0x00, 0x00, 0xC5, 0x42, 0x00, 0x00, 0xCF, 0x42, 0x00, 0x00, 0xD0, +/* 00004EE0 */ 0x42, 0x00, 0x00, 0xF5, 0x42, 0x00, 0x00, 0x0C, 0x43, 0x00, 0x00, 0x13, 0x43, 0x00, 0x00, 0x14, +/* 00004EF0 */ 0x43, 0x00, 0x00, 0x2E, 0x43, 0x00, 0x00, 0x44, 0x43, 0x00, 0x00, 0x62, 0x43, 0x00, 0x00, 0x8E, +/* 00004F00 */ 0x43, 0x00, 0x00, 0x9C, 0x43, 0x00, 0x00, 0xD8, 0x43, 0x00, 0x00, 0xE3, 0x43, 0x00, 0x00, 0xE4, +/* 00004F10 */ 0x43, 0x00, 0x00, 0xFA, 0x43, 0x00, 0x00, 0x36, 0x44, 0x00, 0x00, 0x41, 0x44, 0x00, 0x00, 0x42, +/* 00004F20 */ 0x44, 0x00, 0x00, 0x58, 0x44, 0x00, 0x00, 0x8E, 0x44, 0x00, 0x00, 0x99, 0x44, 0x00, 0x00, 0x9A, +/* 00004F30 */ 0x44, 0x00, 0x00, 0xB8, 0x44, 0x00, 0x00, 0xF5, 0x44, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x01, +/* 00004F40 */ 0x45, 0x00, 0x00, 0x18, 0x45, 0x00, 0x00, 0x3E, 0x45, 0x00, 0x00, 0x5F, 0x45, 0x00, 0x00, 0x79, +/* 00004F50 */ 0x45, 0x00, 0x00, 0xB5, 0x45, 0x00, 0x00, 0xD4, 0x45, 0x00, 0x00, 0xE2, 0x45, 0x00, 0x00, 0xE3, +/* 00004F60 */ 0x45, 0x00, 0x00, 0x13, 0x46, 0x00, 0x00, 0x31, 0x46, 0x00, 0x00, 0x4D, 0x46, 0x00, 0x00, 0x62, +/* 00004F70 */ 0x46, 0x00, 0x00, 0x7E, 0x46, 0x00, 0x00, 0x8C, 0x46, 0x00, 0x00, 0x97, 0x46, 0x00, 0x00, 0x98, +/* 00004F80 */ 0x46, 0x00, 0x00, 0xAE, 0x46, 0x00, 0x00, 0xDD, 0x46, 0x00, 0x00, 0xF9, 0x46, 0x00, 0x00, 0x13, +/* 00004F90 */ 0x47, 0x00, 0x00, 0x21, 0x47, 0x00, 0x00, 0x22, 0x47, 0x00, 0x00, 0x4C, 0x47, 0x00, 0x00, 0x76, +/* 00004FA0 */ 0x47, 0x00, 0x00, 0x80, 0x47, 0x00, 0x00, 0x88, 0x47, 0x00, 0x00, 0x89, 0x47, 0x00, 0x00, 0xB0, +/* 00004FB0 */ 0x47, 0x00, 0x00, 0xF4, 0x47, 0x00, 0x00, 0x1B, 0x48, 0x00, 0x00, 0x1C, 0x48, 0x00, 0x00, 0x3F, +/* 00004FC0 */ 0x48, 0x00, 0x00, 0x64, 0x48, 0x00, 0x00, 0x9E, 0x48, 0x00, 0x00, 0xAC, 0x48, 0x00, 0x00, 0xAD, +/* 00004FD0 */ 0x48, 0x00, 0x00, 0xD1, 0x48, 0x00, 0x00, 0x03, 0x49, 0x00, 0x00, 0x11, 0x49, 0x00, 0x00, 0x12, +/* 00004FE0 */ 0x49, 0x00, 0x00, 0x36, 0x49, 0x00, 0x00, 0x68, 0x49, 0x00, 0x00, 0x76, 0x49, 0x00, 0x00, 0x77, +/* 00004FF0 */ 0x49, 0x00, 0x00, 0xC6, 0x49, 0x00, 0x00, 0x3F, 0x4A, 0x00, 0x00, 0x4D, 0x4A, 0x00, 0x00, 0x4E, +/* 00005000 */ 0x4A, 0x00, 0x00, 0x68, 0x4A, 0x00, 0x00, 0x72, 0x4A, 0x00, 0x00, 0x73, 0x4A, 0x00, 0x00, 0x8C, +/* 00005010 */ 0x4A, 0x00, 0x00, 0x92, 0x4A, 0x00, 0x00, 0x93, 0x4A, 0x00, 0x00, 0x9B, 0x4A, 0x00, 0x00, 0xF6, +/* 00005020 */ 0x4A, 0x00, 0x00, 0x47, 0x4B, 0x00, 0x00, 0x7A, 0x4B, 0x00, 0x00, 0x81, 0x4B, 0x00, 0x00, 0xDA, +/* 00005030 */ 0x4B, 0x00, 0x00, 0x28, 0x4C, 0x00, 0x00, 0x2F, 0x4C, 0x00, 0x00, 0x58, 0x4C, 0x00, 0x00, 0x5F, +/* 00005040 */ 0x4C, 0x00, 0x00, 0x9B, 0x4C, 0x00, 0x00, 0xEE, 0x4C, 0x00, 0x00, 0x3B, 0x4D, 0x00, 0x00, 0x88, +/* 00005050 */ 0x4D, 0x00, 0x00, 0xE2, 0x4D, 0x00, 0x00, 0xFB, 0x4D, 0x00, 0x00, 0x03, 0x4E, 0x00, 0x00, 0x5A, +/* 00005060 */ 0x4E, 0x00, 0x00, 0x81, 0x4E, 0x00, 0x00, 0xA4, 0x4E, 0x00, 0x00, 0xD2, 0x4E, 0x00, 0x00, 0x1A, +/* 00005070 */ 0x4F, 0x00, 0x00, 0x87, 0x4F, 0x00, 0x00, 0x95, 0x4F, 0x00, 0x00, 0xB8, 0x4F, 0x00, 0x00, 0xC2, +/* 00005080 */ 0x4F, 0x00, 0x00, 0xC3, 0x4F, 0x00, 0x00, 0xDC, 0x4F, 0x00, 0x00, 0xE3, 0x4F, 0x00, 0x00, 0xE4, +/* 00005090 */ 0x4F, 0x00, 0x00, 0xFE, 0x4F, 0x00, 0x00, 0x28, 0x50, 0x00, 0x00, 0x52, 0x50, 0x00, 0x00, 0x58, +/* 000050A0 */ 0x50, 0x00, 0x00, 0x59, 0x50, 0x00, 0x00, 0x61, 0x50, 0x00, 0x00, 0xCC, 0x50, 0x00, 0x00, 0xFC, +/* 000050B0 */ 0x50, 0x00, 0x00, 0x03, 0x51, 0x00, 0x00, 0x3C, 0x51, 0x00, 0x00, 0x44, 0x51, 0x00, 0x00, 0x6C, +/* 000050C0 */ 0x51, 0x00, 0x00, 0xB1, 0x51, 0x00, 0x00, 0x15, 0x52, 0x00, 0x00, 0x95, 0x52, 0x00, 0x00, 0x96, +/* 000050D0 */ 0x52, 0x00, 0x00, 0x08, 0x53, 0x00, 0x00, 0x39, 0x53, 0x00, 0x00, 0x88, 0x53, 0x00, 0x00, 0xDA, +/* 000050E0 */ 0x53, 0x00, 0x00, 0x2E, 0x54, 0x00, 0x00, 0x66, 0x54, 0x00, 0x00, 0xB8, 0x54, 0x00, 0x00, 0x0A, +/* 000050F0 */ 0x55, 0x00, 0x00, 0x5F, 0x55, 0x00, 0x00, 0xCB, 0x55, 0x00, 0x00, 0x21, 0x56, 0x00, 0x00, 0x22, +/* 00005100 */ 0x56, 0x00, 0x00, 0x41, 0x56, 0x00, 0x00, 0x60, 0x56, 0x00, 0x00, 0x92, 0x56, 0x00, 0x00, 0x93, +/* 00005110 */ 0x56, 0x00, 0x00, 0x0A, 0x57, 0x00, 0x00, 0x77, 0x57, 0x00, 0x00, 0xCA, 0x57, 0x00, 0x00, 0x0D, +/* 00005120 */ 0x58, 0x00, 0x00, 0x0E, 0x58, 0x00, 0x00, 0x8B, 0x58, 0x00, 0x00, 0x1F, 0x59, 0x00, 0x00, 0xA2, +/* 00005130 */ 0x59, 0x00, 0x00, 0x25, 0x5A, 0x00, 0x00, 0x98, 0x5A, 0x00, 0x00, 0x99, 0x5A, 0x00, 0x00, 0x03, +/* 00005140 */ 0x5B, 0x00, 0x00, 0x7C, 0x5B, 0x00, 0x00, 0x7D, 0x5B, 0x00, 0x00, 0xE0, 0x5B, 0x00, 0x00, 0x6F, +/* 00005150 */ 0x5C, 0x00, 0x00, 0x18, 0x5D, 0x00, 0x00, 0xAC, 0x5D, 0x00, 0x00, 0x43, 0x5E, 0x00, 0x00, 0xE7, +/* 00005160 */ 0x5E, 0x00, 0x00, 0xFB, 0x5E, 0x00, 0x00, 0xFC, 0x5E, 0x00, 0x00, 0x2C, 0x5F, 0x00, 0x00, 0x98, +/* 00005170 */ 0x5F, 0x00, 0x00, 0x08, 0x60, 0x00, 0x00, 0x78, 0x60, 0x00, 0x00, 0xEA, 0x60, 0x00, 0x00, 0x5E, +/* 00005180 */ 0x61, 0x00, 0x00, 0xD2, 0x61, 0x00, 0x00, 0x1C, 0x62, 0x00, 0x00, 0x1D, 0x62, 0x00, 0x00, 0x8A, +/* 00005190 */ 0x62, 0x00, 0x00, 0x8B, 0x62, 0x00, 0x00, 0xD7, 0x62, 0x00, 0x00, 0x4B, 0x63, 0x00, 0x00, 0xDD, +/* 000051A0 */ 0x63, 0x00, 0x00, 0x6F, 0x64, 0x00, 0x00, 0x70, 0x64, 0x00, 0x00, 0xA4, 0x64, 0x00, 0x00, 0xC8, +/* 000051B0 */ 0x64, 0x00, 0x00, 0x04, 0x65, 0x00, 0x00, 0x1E, 0x65, 0x00, 0x00, 0x3D, 0x65, 0x00, 0x00, 0x4B, +/* 000051C0 */ 0x65, 0x00, 0x00, 0x4C, 0x65, 0x00, 0x00, 0x85, 0x65, 0x00, 0x00, 0x9F, 0x65, 0x00, 0x00, 0xBC, +/* 000051D0 */ 0x65, 0x00, 0x00, 0xCA, 0x65, 0x00, 0x00, 0xCB, 0x65, 0x00, 0x00, 0xEF, 0x65, 0x00, 0x00, 0x14, +/* 000051E0 */ 0x66, 0x00, 0x00, 0x35, 0x66, 0x00, 0x00, 0x51, 0x66, 0x00, 0x00, 0x78, 0x66, 0x00, 0x00, 0xA4, +/* 000051F0 */ 0x66, 0x00, 0x00, 0xB2, 0x66, 0x00, 0x00, 0xB3, 0x66, 0x00, 0x00, 0xCF, 0x66, 0x00, 0x00, 0xF6, +/* 00005200 */ 0x66, 0x00, 0x00, 0x22, 0x67, 0x00, 0x00, 0x30, 0x67, 0x00, 0x00, 0x31, 0x67, 0x00, 0x00, 0x4D, +/* 00005210 */ 0x67, 0x00, 0x00, 0x76, 0x67, 0x00, 0x00, 0x84, 0x67, 0x00, 0x00, 0x85, 0x67, 0x00, 0x00, 0xA1, +/* 00005220 */ 0x67, 0x00, 0x00, 0xCC, 0x67, 0x00, 0x00, 0xCD, 0x67, 0x00, 0x00, 0x17, 0x68, 0x00, 0x00, 0x56, +/* 00005230 */ 0x68, 0x00, 0x00, 0x98, 0x68, 0x00, 0x00, 0xCD, 0x68, 0x00, 0x00, 0xEF, 0x68, 0x00, 0x00, 0x05, +/* 00005240 */ 0x69, 0x00, 0x00, 0x06, 0x69, 0x00, 0x00, 0x21, 0x69, 0x00, 0x00, 0x87, 0x69, 0x00, 0x00, 0xF6, +/* 00005250 */ 0x69, 0x00, 0x00, 0x3A, 0x6A, 0x00, 0x00, 0x90, 0x6A, 0x00, 0x00, 0xA6, 0x6A, 0x00, 0x00, 0xA7, +/* 00005260 */ 0x6A, 0x00, 0x00, 0xCC, 0x6A, 0x00, 0x00, 0x3E, 0x6B, 0x00, 0x00, 0x9F, 0x6B, 0x00, 0x00, 0xFA, +/* 00005270 */ 0x6B, 0x00, 0x00, 0x10, 0x6C, 0x00, 0x00, 0x11, 0x6C, 0x00, 0x00, 0x6F, 0x6C, 0x00, 0x00, 0x8A, +/* 00005280 */ 0x6C, 0x00, 0x00, 0x9C, 0x6C, 0x00, 0x00, 0xAA, 0x6C, 0x00, 0x00, 0xAB, 0x6C, 0x00, 0x00, 0xDD, +/* 00005290 */ 0x6C, 0x00, 0x00, 0xDE, 0x6C, 0x00, 0x00, 0xF6, 0x6C, 0x00, 0x00, 0x01, 0x6D, 0x00, 0x00, 0x0B, +/* 000052A0 */ 0x6D, 0x00, 0x00, 0x0C, 0x6D, 0x00, 0x00, 0x43, 0x6D, 0x00, 0x00, 0x6B, 0x6D, 0x00, 0x00, 0x6C, +/* 000052B0 */ 0x6D, 0x00, 0x00, 0x8D, 0x6D, 0x00, 0x00, 0xB5, 0x6D, 0x00, 0x00, 0xBF, 0x6D, 0x00, 0x00, 0xC0, +/* 000052C0 */ 0x6D, 0x00, 0x00, 0x0C, 0x6E, 0x00, 0x00, 0x12, 0x6E, 0x00, 0x00, 0x13, 0x6E, 0x00, 0x00, 0x1B, +/* 000052D0 */ 0x6E, 0x00, 0x00, 0x76, 0x6E, 0x00, 0x00, 0xA5, 0x6E, 0x00, 0x00, 0xAC, 0x6E, 0x00, 0x00, 0xFF, +/* 000052E0 */ 0x6E, 0x00, 0x00, 0x5C, 0x6F, 0x00, 0x00, 0xB7, 0x6F, 0x00, 0x00, 0xE1, 0x6F, 0x00, 0x00, 0xE8, +/* 000052F0 */ 0x6F, 0x00, 0x00, 0x1C, 0x70, 0x00, 0x00, 0x23, 0x70, 0x00, 0x00, 0x55, 0x70, 0x00, 0x00, 0x6F, +/* 00005300 */ 0x70, 0x00, 0x00, 0x77, 0x70, 0x00, 0x00, 0xB6, 0x70, 0x00, 0x00, 0xE3, 0x70, 0x00, 0x00, 0x02, +/* 00005310 */ 0x71, 0x00, 0x00, 0x1C, 0x71, 0x00, 0x00, 0x26, 0x71, 0x00, 0x00, 0x27, 0x71, 0x00, 0x00, 0x4B, +/* 00005320 */ 0x71, 0x00, 0x00, 0x6A, 0x71, 0x00, 0x00, 0xA6, 0x71, 0x00, 0x00, 0xDD, 0x71, 0x00, 0x00, 0xDE, +/* 00005330 */ 0x71, 0x00, 0x00, 0x1B, 0x72, 0x00, 0x00, 0x39, 0x72, 0x00, 0x00, 0x47, 0x72, 0x00, 0x00, 0x51, +/* 00005340 */ 0x72, 0x00, 0x00, 0x52, 0x72, 0x00, 0x00, 0x73, 0x72, 0x00, 0x00, 0xB7, 0x72, 0x00, 0x00, 0x3F, +/* 00005350 */ 0x73, 0x00, 0x00, 0x7A, 0x73, 0x00, 0x00, 0x7B, 0x73, 0x00, 0x00, 0xBD, 0x73, 0x00, 0x00, 0xC7, +/* 00005360 */ 0x73, 0x00, 0x00, 0xC8, 0x73, 0x00, 0x00, 0xDD, 0x73, 0x00, 0x00, 0xE4, 0x73, 0x00, 0x00, 0xE5, +/* 00005370 */ 0x73, 0x00, 0x00, 0xED, 0x73, 0x00, 0x00, 0x46, 0x74, 0x00, 0x00, 0x93, 0x74, 0x00, 0x00, 0x9A, +/* 00005380 */ 0x74, 0x00, 0x00, 0xC6, 0x74, 0x00, 0x00, 0xCD, 0x74, 0x00, 0x00, 0x23, 0x75, 0x00, 0x00, 0x2B, +/* 00005390 */ 0x75, 0x00, 0x00, 0x63, 0x75, 0x00, 0x00, 0x91, 0x75, 0x00, 0x00, 0xA8, 0x75, 0x00, 0x00, 0xB2, +/* 000053A0 */ 0x75, 0x00, 0x00, 0xB3, 0x75, 0x00, 0x00, 0xCC, 0x75, 0x00, 0x00, 0x24, 0x76, 0x00, 0x00, 0x55, +/* 000053B0 */ 0x76, 0x00, 0x00, 0x70, 0x76, 0x00, 0x00, 0x71, 0x76, 0x00, 0x00, 0x8B, 0x76, 0x00, 0x00, 0xB8, +/* 000053C0 */ 0x76, 0x00, 0x00, 0xD3, 0x76, 0x00, 0x00, 0xF9, 0x76, 0x00, 0x00, 0x5E, 0x77, 0x00, 0x00, 0x9E, +/* 000053D0 */ 0x77, 0x00, 0x00, 0xB0, 0x77, 0x00, 0x00, 0xB1, 0x77, 0x00, 0x00, 0xE8, 0x77, 0x00, 0x00, 0x24, +/* 000053E0 */ 0x78, 0x00, 0x00, 0x60, 0x78, 0x00, 0x00, 0x72, 0x78, 0x00, 0x00, 0x73, 0x78, 0x00, 0x00, 0xC0, +/* 000053F0 */ 0x78, 0x00, 0x00, 0xF6, 0x78, 0x00, 0x00, 0x52, 0x79, 0x00, 0x00, 0x8E, 0x79, 0x00, 0x00, 0xDA, +/* 00005400 */ 0x79, 0x00, 0x00, 0x5C, 0x7A, 0x00, 0x00, 0x6E, 0x7A, 0x00, 0x00, 0x7C, 0x7A, 0x00, 0x00, 0x7D, +/* 00005410 */ 0x7A, 0x00, 0x00, 0x91, 0x7A, 0x00, 0x00, 0x9B, 0x7A, 0x00, 0x00, 0x9C, 0x7A, 0x00, 0x00, 0xB1, +/* 00005420 */ 0x7A, 0x00, 0x00, 0xB8, 0x7A, 0x00, 0x00, 0xB9, 0x7A, 0x00, 0x00, 0xC1, 0x7A, 0x00, 0x00, 0x2C, +/* 00005430 */ 0x7B, 0x00, 0x00, 0x33, 0x7B, 0x00, 0x00, 0x5F, 0x7B, 0x00, 0x00, 0x66, 0x7B, 0x00, 0x00, 0xD7, +/* 00005440 */ 0x7B, 0x00, 0x00, 0x08, 0x7C, 0x00, 0x00, 0x10, 0x7C, 0x00, 0x00, 0x64, 0x7C, 0x00, 0x00, 0x7F, +/* 00005450 */ 0x7C, 0x00, 0x00, 0x92, 0x7C, 0x00, 0x00, 0xCA, 0x7C, 0x00, 0x00, 0x0C, 0x7D, 0x00, 0x00, 0x68, +/* 00005460 */ 0x7D, 0x00, 0x00, 0xDE, 0x7D, 0x00, 0x00, 0xEC, 0x7D, 0x00, 0x00, 0xF8, 0x7D, 0x00, 0x00, 0xF9, +/* 00005470 */ 0x7D, 0x00, 0x00, 0x10, 0x7E, 0x00, 0x00, 0x17, 0x7E, 0x00, 0x00, 0x18, 0x7E, 0x00, 0x00, 0x54, +/* 00005480 */ 0x7E, 0x00, 0x00, 0x55, 0x7E, 0x00, 0x00, 0x5D, 0x7E, 0x00, 0x00, 0xAC, 0x7E, 0x00, 0x00, 0xB3, +/* 00005490 */ 0x7E, 0x00, 0x00, 0x0C, 0x7F, 0x00, 0x00, 0x38, 0x7F, 0x00, 0x00, 0x3F, 0x7F, 0x00, 0x00, 0x67, +/* 000054A0 */ 0x7F, 0x00, 0x00, 0x6E, 0x7F, 0x00, 0x00, 0xF2, 0x7F, 0x00, 0x00, 0x60, 0x80, 0x00, 0x00, 0xA5, +/* 000054B0 */ 0x80, 0x00, 0x00, 0xEA, 0x80, 0x00, 0x00, 0xF2, 0x80, 0x00, 0x00, 0x52, 0x81, 0x00, 0x00, 0xA3, +/* 000054C0 */ 0x81, 0x00, 0x00, 0xFF, 0x81, 0x00, 0x00, 0x3B, 0x82, 0x00, 0x00, 0xA0, 0x82, 0x00, 0x00, 0xCD, +/* 000054D0 */ 0x82, 0x00, 0x00, 0xFB, 0x82, 0x00, 0x00, 0x29, 0x83, 0x00, 0x00, 0x2A, 0x83, 0x00, 0x00, 0x5F, +/* 000054E0 */ 0x83, 0x00, 0x00, 0x94, 0x83, 0x00, 0x00, 0xCC, 0x83, 0x00, 0x00, 0x1E, 0x84, 0x00, 0x00, 0x7A, +/* 000054F0 */ 0x84, 0x00, 0x00, 0xE8, 0x84, 0x00, 0x00, 0x5A, 0x85, 0x00, 0x00, 0x8F, 0x85, 0x00, 0x00, 0xC4, +/* 00005500 */ 0x85, 0x00, 0x00, 0xCE, 0x85, 0x00, 0x00, 0xD5, 0x85, 0x00, 0x00, 0xD6, 0x85, 0x00, 0x00, 0xDE, +/* 00005510 */ 0x85, 0x00, 0x00, 0x35, 0x86, 0x00, 0x00, 0x69, 0x86, 0x00, 0x00, 0x70, 0x86, 0x00, 0x00, 0x96, +/* 00005520 */ 0x86, 0x00, 0x00, 0x9D, 0x86, 0x00, 0x00, 0x0E, 0x87, 0x00, 0x00, 0x3F, 0x87, 0x00, 0x00, 0x5E, +/* 00005530 */ 0x87, 0x00, 0x00, 0x66, 0x87, 0x00, 0x00, 0xBD, 0x87, 0x00, 0x00, 0xEB, 0x87, 0x00, 0x00, 0x04, +/* 00005540 */ 0x88, 0x00, 0x00, 0x78, 0x88, 0x00, 0x00, 0xB0, 0x88, 0x00, 0x00, 0xFB, 0x88, 0x00, 0x00, 0x46, +/* 00005550 */ 0x89, 0x00, 0x00, 0x47, 0x89, 0x00, 0x00, 0x83, 0x89, 0x00, 0x00, 0xF3, 0x89, 0x00, 0x00, 0xFD, +/* 00005560 */ 0x89, 0x00, 0x00, 0xFE, 0x89, 0x00, 0x00, 0x4B, 0x8A, 0x00, 0x00, 0xA4, 0x8A, 0x00, 0x00, 0xDB, +/* 00005570 */ 0x8A, 0x00, 0x00, 0xF8, 0x8A, 0x00, 0x00, 0x19, 0x8B, 0x00, 0x00, 0x38, 0x8B, 0x00, 0x00, 0x44, +/* 00005580 */ 0x8B, 0x00, 0x00, 0x45, 0x8B, 0x00, 0x00, 0x66, 0x8B, 0x00, 0x00, 0x6D, 0x8B, 0x00, 0x00, 0x6E, +/* 00005590 */ 0x8B, 0x00, 0x00, 0x8D, 0x8B, 0x00, 0x00, 0x08, 0x8C, 0x00, 0x00, 0x3C, 0x8C, 0x00, 0x00, 0x48, +/* 000055A0 */ 0x8C, 0x00, 0x00, 0x80, 0x8C, 0x00, 0x00, 0xA8, 0x8C, 0x00, 0x00, 0xC4, 0x8C, 0x00, 0x00, 0xE3, +/* 000055B0 */ 0x8C, 0x00, 0x00, 0x02, 0x8D, 0x00, 0x00, 0x0E, 0x8D, 0x00, 0x00, 0x14, 0x8D, 0x00, 0x00, 0x15, +/* 000055C0 */ 0x8D, 0x00, 0x00, 0x1D, 0x8D, 0x00, 0x00, 0x94, 0x8D, 0x00, 0x00, 0x9B, 0x8D, 0x00, 0x00, 0x14, +/* 000055D0 */ 0x8E, 0x00, 0x00, 0x90, 0x8E, 0x00, 0x00, 0x08, 0x8F, 0x00, 0x00, 0x69, 0x8F, 0x00, 0x00, 0x71, +/* 000055E0 */ 0x8F, 0x00, 0x00, 0xC1, 0x8F, 0x00, 0x00, 0xE6, 0x8F, 0x00, 0x00, 0x11, 0x90, 0x00, 0x00, 0x53, +/* 000055F0 */ 0x90, 0x00, 0x00, 0xC6, 0x90, 0x00, 0x00, 0xDE, 0x90, 0x00, 0x00, 0xEC, 0x90, 0x00, 0x00, 0xED, +/* 00005600 */ 0x90, 0x00, 0x00, 0x2A, 0x91, 0x00, 0x00, 0x5F, 0x91, 0x00, 0x00, 0x6D, 0x91, 0x00, 0x00, 0x79, +/* 00005610 */ 0x91, 0x00, 0x00, 0x7A, 0x91, 0x00, 0x00, 0xC0, 0x91, 0x00, 0x00, 0xC7, 0x91, 0x00, 0x00, 0xC8, +/* 00005620 */ 0x91, 0x00, 0x00, 0xFD, 0x91, 0x00, 0x00, 0x21, 0x92, 0x00, 0x00, 0x5D, 0x92, 0x00, 0x00, 0x71, +/* 00005630 */ 0x92, 0x00, 0x00, 0x7B, 0x92, 0x00, 0x00, 0x7C, 0x92, 0x00, 0x00, 0xC7, 0x92, 0x00, 0x00, 0x0D, +/* 00005640 */ 0x93, 0x00, 0x00, 0x64, 0x93, 0x00, 0x00, 0x65, 0x93, 0x00, 0x00, 0xD4, 0x93, 0x00, 0x00, 0x3E, +/* 00005650 */ 0x94, 0x00, 0x00, 0xA9, 0x94, 0x00, 0x00, 0x1D, 0x95, 0x00, 0x00, 0x88, 0x95, 0x00, 0x00, 0x03, +/* 00005660 */ 0x96, 0x00, 0x00, 0x71, 0x96, 0x00, 0x00, 0x9E, 0x96, 0x00, 0x00, 0xFE, 0x96, 0x00, 0x00, 0x67, +/* 00005670 */ 0x97, 0x00, 0x00, 0x68, 0x97, 0x00, 0x00, 0x8C, 0x97, 0x00, 0x00, 0xF9, 0x97, 0x00, 0x00, 0x4E, +/* 00005680 */ 0x98, 0x00, 0x00, 0x92, 0x98, 0x00, 0x00, 0xFA, 0x98, 0x00, 0x00, 0xFB, 0x98, 0x00, 0x00, 0x72, +/* 00005690 */ 0x99, 0x00, 0x00, 0x9A, 0x99, 0x00, 0x00, 0xE5, 0x99, 0x00, 0x00, 0x55, 0x9A, 0x00, 0x00, 0xAE, +/* 000056A0 */ 0x9A, 0x00, 0x00, 0xDE, 0x9A, 0x00, 0x00, 0x05, 0x9B, 0x00, 0x00, 0x5A, 0x9B, 0x00, 0x00, 0x5B, +/* 000056B0 */ 0x9B, 0x00, 0x00, 0xDD, 0x9B, 0x00, 0x00, 0x38, 0x9C, 0x00, 0x00, 0x39, 0x9C, 0x00, 0x00, 0xA8, +/* 000056C0 */ 0x9C, 0x00, 0x00, 0xA9, 0x9C, 0x00, 0x00, 0xDA, 0x9C, 0x00, 0x00, 0xDB, 0x9C, 0x00, 0x00, 0xF8, +/* 000056D0 */ 0x9C, 0x00, 0x00, 0x03, 0x9D, 0x00, 0x00, 0x04, 0x9D, 0x00, 0x00, 0x29, 0x9D, 0x00, 0x00, 0x77, +/* 000056E0 */ 0x9D, 0x00, 0x00, 0x1E, 0x9E, 0x00, 0x00, 0x55, 0x9E, 0x00, 0x00, 0xAB, 0x9E, 0x00, 0x00, 0xB9, +/* 000056F0 */ 0x9E, 0x00, 0x00, 0xBA, 0x9E, 0x00, 0x00, 0xE4, 0x9E, 0x00, 0x00, 0x0E, 0x9F, 0x00, 0x00, 0x0F, +/* 00005700 */ 0x9F, 0x00, 0x00, 0x87, 0x9F, 0x00, 0x00, 0xE2, 0x9F, 0x00, 0x00, 0xFF, 0x9F, 0x00, 0x00, 0x41, +/* 00005710 */ 0xA0, 0x00, 0x00, 0x7E, 0xA0, 0x00, 0x00, 0xB8, 0xA0, 0x00, 0x00, 0x0F, 0xA1, 0x00, 0x00, 0x21, +/* 00005720 */ 0xA1, 0x00, 0x00, 0x22, 0xA1, 0x00, 0x00, 0x59, 0xA1, 0x00, 0x00, 0x6E, 0xA1, 0x00, 0x00, 0x98, +/* 00005730 */ 0xA1, 0x00, 0x00, 0xDB, 0xA1, 0x00, 0x00, 0xE9, 0xA1, 0x00, 0x00, 0xEA, 0xA1, 0x00, 0x00, 0x60, +/* 00005740 */ 0xA2, 0x00, 0x00, 0x9D, 0xA2, 0x00, 0x00, 0x9E, 0xA2, 0x00, 0x00, 0x00, 0xA3, 0x00, 0x00, 0x25, +/* 00005750 */ 0xA3, 0x00, 0x00, 0x39, 0xA3, 0x00, 0x00, 0x43, 0xA3, 0x00, 0x00, 0x44, 0xA3, 0x00, 0x00, 0x6A, +/* 00005760 */ 0xA3, 0x00, 0x00, 0x6B, 0xA3, 0x00, 0x00, 0xDD, 0xA3, 0x00, 0x00, 0x2D, 0xA4, 0x00, 0x00, 0x87, +/* 00005770 */ 0xA4, 0x00, 0x00, 0x88, 0xA4, 0x00, 0x00, 0xBB, 0xA4, 0x00, 0x00, 0xFE, 0xA4, 0x00, 0x00, 0x2C, +/* 00005780 */ 0xA5, 0x00, 0x00, 0x57, 0xA5, 0x00, 0x00, 0x99, 0xA5, 0x00, 0x00, 0xA7, 0xA5, 0x00, 0x00, 0xA8, +/* 00005790 */ 0xA5, 0x00, 0x00, 0xE8, 0xA5, 0x00, 0x00, 0xE9, 0xA5, 0x00, 0x00, 0x0E, 0xA6, 0x00, 0x00, 0x51, +/* 000057A0 */ 0xA6, 0x00, 0x00, 0x84, 0xA6, 0x00, 0x00, 0xA1, 0xA6, 0x00, 0x00, 0xAD, 0xA6, 0x00, 0x00, 0xAE, +/* 000057B0 */ 0xA6, 0x00, 0x00, 0x15, 0xA7, 0x00, 0x00, 0x41, 0xA7, 0x00, 0x00, 0x9B, 0xA7, 0x00, 0x00, 0xA9, +/* 000057C0 */ 0xA7, 0x00, 0x00, 0xAA, 0xA7, 0x00, 0x00, 0xEB, 0xA7, 0x00, 0x00, 0x3E, 0xA8, 0x00, 0x00, 0x98, +/* 000057D0 */ 0xA8, 0x00, 0x00, 0xA6, 0xA8, 0x00, 0x00, 0xA7, 0xA8, 0x00, 0x00, 0x23, 0xA9, 0x00, 0x00, 0x2F, +/* 000057E0 */ 0xA9, 0x00, 0x00, 0x30, 0xA9, 0x00, 0x00, 0xC6, 0xA9, 0x00, 0x00, 0x39, 0xAA, 0x00, 0x00, 0x45, +/* 000057F0 */ 0xAA, 0x00, 0x00, 0x80, 0xAA, 0x00, 0x00, 0xA7, 0xAA, 0x00, 0x00, 0xC3, 0xAA, 0x00, 0x00, 0xE2, +/* 00005800 */ 0xAA, 0x00, 0x00, 0x02, 0xAB, 0x00, 0x00, 0x0E, 0xAB, 0x00, 0x00, 0x0F, 0xAB, 0x00, 0x00, 0x41, +/* 00005810 */ 0xAB, 0x00, 0x00, 0x67, 0xAB, 0x00, 0x00, 0x84, 0xAB, 0x00, 0x00, 0xA3, 0xAB, 0x00, 0x00, 0xC3, +/* 00005820 */ 0xAB, 0x00, 0x00, 0xCF, 0xAB, 0x00, 0x00, 0xD0, 0xAB, 0x00, 0x00, 0x0D, 0xAC, 0x00, 0x00, 0x2A, +/* 00005830 */ 0xAC, 0x00, 0x00, 0x46, 0xAC, 0x00, 0x00, 0x65, 0xAC, 0x00, 0x00, 0x84, 0xAC, 0x00, 0x00, 0x90, +/* 00005840 */ 0xAC, 0x00, 0x00, 0xD1, 0xAC, 0x00, 0x00, 0x3F, 0xAD, 0x00, 0x00, 0x6F, 0xAD, 0x00, 0x00, 0xD5, +/* 00005850 */ 0xAD, 0x00, 0x00, 0xE7, 0xAD, 0x00, 0x00, 0x2C, 0xAE, 0x00, 0x00, 0x83, 0xAE, 0x00, 0x00, 0xE9, +/* 00005860 */ 0xAE, 0x00, 0x00, 0xFB, 0xAE, 0x00, 0x00, 0xFC, 0xAE, 0x00, 0x00, 0x1E, 0xAF, 0x00, 0x00, 0x3C, +/* 00005870 */ 0xAF, 0x00, 0x00, 0x59, 0xAF, 0x00, 0x00, 0x7C, 0xAF, 0x00, 0x00, 0xA5, 0xAF, 0x00, 0x00, 0xC6, +/* 00005880 */ 0xAF, 0x00, 0x00, 0xE5, 0xAF, 0x00, 0x00, 0x06, 0xB0, 0x00, 0x00, 0x19, 0xB0, 0x00, 0x00, 0x1A, +/* 00005890 */ 0xB0, 0x00, 0x00, 0x5F, 0xB0, 0x00, 0x00, 0x6F, 0xB0, 0x00, 0x00, 0x8B, 0xB0, 0x00, 0x00, 0xAA, +/* 000058A0 */ 0xB0, 0x00, 0x00, 0xC9, 0xB0, 0x00, 0x00, 0xD5, 0xB0, 0x00, 0x00, 0xD6, 0xB0, 0x00, 0x00, 0x4F, +/* 000058B0 */ 0xB1, 0x00, 0x00, 0x9A, 0xB1, 0x00, 0x00, 0xC6, 0xB1, 0x00, 0x00, 0x20, 0xB2, 0x00, 0x00, 0x2E, +/* 000058C0 */ 0xB2, 0x00, 0x00, 0x2F, 0xB2, 0x00, 0x00, 0x70, 0xB2, 0x00, 0x00, 0xC3, 0xB2, 0x00, 0x00, 0x1D, +/* 000058D0 */ 0xB3, 0x00, 0x00, 0x2B, 0xB3, 0x00, 0x00, 0x2C, 0xB3, 0x00, 0x00, 0x5A, 0xB3, 0x00, 0x00, 0x66, +/* 000058E0 */ 0xB3, 0x00, 0x00, 0x9F, 0xB3, 0x00, 0x00, 0xBC, 0xB3, 0x00, 0x00, 0xDB, 0xB3, 0x00, 0x00, 0xFA, +/* 000058F0 */ 0xB3, 0x00, 0x00, 0x06, 0xB4, 0x00, 0x00, 0x07, 0xB4, 0x00, 0x00, 0x20, 0xB4, 0x00, 0x00, 0x2A, +/* 00005900 */ 0xB4, 0x00, 0x00, 0x2B, 0xB4, 0x00, 0x00, 0x65, 0xB4, 0x00, 0x00, 0x8B, 0xB4, 0x00, 0x00, 0xC7, +/* 00005910 */ 0xB4, 0x00, 0x00, 0xDB, 0xB4, 0x00, 0x00, 0xE5, 0xB4, 0x00, 0x00, 0xE6, 0xB4, 0x00, 0x00, 0x2F, +/* 00005920 */ 0xB5, 0x00, 0x00, 0x75, 0xB5, 0x00, 0x00, 0xCC, 0xB5, 0x00, 0x00, 0xCD, 0xB5, 0x00, 0x00, 0xF1, +/* 00005930 */ 0xB5, 0x00, 0x00, 0x64, 0xB6, 0x00, 0x00, 0x65, 0xB6, 0x00, 0x00, 0xC7, 0xB6, 0x00, 0x00, 0xE9, +/* 00005940 */ 0xB6, 0x00, 0x00, 0x10, 0xB7, 0x00, 0x00, 0x11, 0xB7, 0x00, 0x00, 0x81, 0xB7, 0x00, 0x00, 0x9F, +/* 00005950 */ 0xB7, 0x00, 0x00, 0xE2, 0xB7, 0x00, 0x00, 0x18, 0xB8, 0x00, 0x00, 0x19, 0xB8, 0x00, 0x00, 0x74, +/* 00005960 */ 0xB8, 0x00, 0x00, 0xC5, 0xB8, 0x00, 0x00, 0x02, 0xB9, 0x00, 0x00, 0x42, 0xB9, 0x00, 0x00, 0x77, +/* 00005970 */ 0xB9, 0x00, 0x00, 0x85, 0xB9, 0x00, 0x00, 0x86, 0xB9, 0x00, 0x00, 0xA3, 0xB9, 0x00, 0x00, 0xC2, +/* 00005980 */ 0xB9, 0x00, 0x00, 0xF6, 0xB9, 0x00, 0x00, 0x1E, 0xBA, 0x00, 0x00, 0x5B, 0xBA, 0x00, 0x00, 0x69, +/* 00005990 */ 0xBA, 0x00, 0x00, 0x6A, 0xBA, 0x00, 0x00, 0xE3, 0xBA, 0x00, 0x00, 0x02, 0xBB, 0x00, 0x00, 0x38, +/* 000059A0 */ 0xBB, 0x00, 0x00, 0x99, 0xBB, 0x00, 0x00, 0xA7, 0xBB, 0x00, 0x00, 0xA8, 0xBB, 0x00, 0x00, 0xD2, +/* 000059B0 */ 0xBB, 0x00, 0x00, 0xF1, 0xBB, 0x00, 0x00, 0x18, 0xBC, 0x00, 0x00, 0x3F, 0xBC, 0x00, 0x00, 0x54, +/* 000059C0 */ 0xBC, 0x00, 0x00, 0x75, 0xBC, 0x00, 0x00, 0xA0, 0xBC, 0x00, 0x00, 0xC5, 0xBC, 0x00, 0x00, 0xDE, +/* 000059D0 */ 0xBC, 0x00, 0x00, 0x03, 0xBD, 0x00, 0x00, 0x15, 0xBD, 0x00, 0x00, 0x23, 0xBD, 0x00, 0x00, 0x24, +/* 000059E0 */ 0xBD, 0x00, 0x00, 0x74, 0xBD, 0x00, 0x00, 0x75, 0xBD, 0x00, 0x00, 0xD1, 0xBD, 0x00, 0x00, 0xD2, +/* 000059F0 */ 0xBD, 0x00, 0x00, 0x01, 0xBE, 0x00, 0x00, 0x02, 0xBE, 0x00, 0x00, 0x4E, 0xBE, 0x00, 0x00, 0x7A, +/* 00005A00 */ 0xBE, 0x00, 0x00, 0x7B, 0xBE, 0x00, 0x00, 0x92, 0xBE, 0x00, 0x00, 0x9D, 0xBE, 0x00, 0x00, 0x9E, +/* 00005A10 */ 0xBE, 0x00, 0x00, 0x19, 0xBF, 0x00, 0x00, 0x62, 0xBF, 0x00, 0x00, 0xBF, 0xBF, 0x00, 0x00, 0xCD, +/* 00005A20 */ 0xBF, 0x00, 0x00, 0xCE, 0xBF, 0x00, 0x00, 0xFA, 0xBF, 0x00, 0x00, 0x47, 0xC0, 0x00, 0x00, 0x48, +/* 00005A30 */ 0xC0, 0x00, 0x00, 0x77, 0xC0, 0x00, 0x00, 0xF3, 0xC0, 0x00, 0x00, 0x31, 0xC1, 0x00, 0x00, 0x32, +/* 00005A40 */ 0xC1, 0x00, 0x00, 0x57, 0xC1, 0x00, 0x00, 0x6B, 0xC1, 0x00, 0x00, 0x75, 0xC1, 0x00, 0x00, 0x76, +/* 00005A50 */ 0xC1, 0x00, 0x00, 0xA0, 0xC1, 0x00, 0x00, 0xA1, 0xC1, 0x00, 0x00, 0x27, 0xC2, 0x00, 0x00, 0x7B, +/* 00005A60 */ 0xC2, 0x00, 0x00, 0xDD, 0xC2, 0x00, 0x00, 0xDE, 0xC2, 0x00, 0x00, 0x25, 0xC3, 0x00, 0x00, 0x53, +/* 00005A70 */ 0xC3, 0x00, 0x00, 0x7E, 0xC3, 0x00, 0x00, 0xC4, 0xC3, 0x00, 0x00, 0xD2, 0xC3, 0x00, 0x00, 0xD3, +/* 00005A80 */ 0xC3, 0x00, 0x00, 0x17, 0xC4, 0x00, 0x00, 0x18, 0xC4, 0x00, 0x00, 0x64, 0xC4, 0x00, 0x00, 0xA6, +/* 00005A90 */ 0xC4, 0x00, 0x00, 0xCF, 0xC4, 0x00, 0x00, 0xF4, 0xC4, 0x00, 0x00, 0x1B, 0xC5, 0x00, 0x00, 0x43, +/* 00005AA0 */ 0xC5, 0x00, 0x00, 0x57, 0xC5, 0x00, 0x00, 0x58, 0xC5, 0x00, 0x00, 0x75, 0xC5, 0x00, 0x00, 0x83, +/* 00005AB0 */ 0xC5, 0x00, 0x00, 0x84, 0xC5, 0x00, 0x00, 0xA5, 0xC5, 0x00, 0x00, 0xB1, 0xC5, 0x00, 0x00, 0xB2, +/* 00005AC0 */ 0xC5, 0x00, 0x00, 0x11, 0xC6, 0x00, 0x00, 0x76, 0xC6, 0x00, 0x00, 0x9C, 0xC6, 0x00, 0x00, 0x9D, +/* 00005AD0 */ 0xC6, 0x00, 0x00, 0xD7, 0xC6, 0x00, 0x00, 0x38, 0xC7, 0x00, 0x00, 0x46, 0xC7, 0x00, 0x00, 0x47, +/* 00005AE0 */ 0xC7, 0x00, 0x00, 0xBD, 0xC7, 0x00, 0x00, 0xC9, 0xC7, 0x00, 0x00, 0xCA, 0xC7, 0x00, 0x00, 0x44, +/* 00005AF0 */ 0xC8, 0x00, 0x00, 0x6A, 0xC8, 0x00, 0x00, 0x6B, 0xC8, 0x00, 0x00, 0x97, 0xC8, 0x00, 0x00, 0xFF, +/* 00005B00 */ 0xC8, 0x00, 0x00, 0x0D, 0xC9, 0x00, 0x00, 0x0E, 0xC9, 0x00, 0x00, 0x4F, 0xC9, 0x00, 0x00, 0xA6, +/* 00005B10 */ 0xC9, 0x00, 0x00, 0x0E, 0xCA, 0x00, 0x00, 0x1C, 0xCA, 0x00, 0x00, 0x1D, 0xCA, 0x00, 0x00, 0x9A, +/* 00005B20 */ 0xCA, 0x00, 0x00, 0xA6, 0xCA, 0x00, 0x00, 0xA7, 0xCA, 0x00, 0x00, 0x41, 0xCB, 0x00, 0x00, 0xAE, +/* 00005B30 */ 0xCB, 0x00, 0x00, 0xBA, 0xCB, 0x00, 0x00, 0xF9, 0xCB, 0x00, 0x00, 0x20, 0xCC, 0x00, 0x00, 0x3C, +/* 00005B40 */ 0xCC, 0x00, 0x00, 0x5B, 0xCC, 0x00, 0x00, 0x7B, 0xCC, 0x00, 0x00, 0x87, 0xCC, 0x00, 0x00, 0x88, +/* 00005B50 */ 0xCC, 0x00, 0x00, 0xBE, 0xCC, 0x00, 0x00, 0xE8, 0xCC, 0x00, 0x00, 0x05, 0xCD, 0x00, 0x00, 0x24, +/* 00005B60 */ 0xCD, 0x00, 0x00, 0x44, 0xCD, 0x00, 0x00, 0x50, 0xCD, 0x00, 0x00, 0x51, 0xCD, 0x00, 0x00, 0x92, +/* 00005B70 */ 0xCD, 0x00, 0x00, 0xB3, 0xCD, 0x00, 0x00, 0xCF, 0xCD, 0x00, 0x00, 0xEE, 0xCD, 0x00, 0x00, 0x0E, +/* 00005B80 */ 0xCE, 0x00, 0x00, 0x1A, 0xCE, 0x00, 0x00, 0x1B, 0xCE, 0x00, 0x00, 0x4E, 0xCE, 0x00, 0x00, 0x8B, +/* 00005B90 */ 0xCE, 0x00, 0x00, 0xF5, 0xCE, 0x00, 0x00, 0x27, 0xCF, 0x00, 0x00, 0x35, 0xCF, 0x00, 0x00, 0x36, +/* 00005BA0 */ 0xCF, 0x00, 0x00, 0x60, 0xCF, 0x00, 0x00, 0xC1, 0xCF, 0x00, 0x00, 0xCF, 0xCF, 0x00, 0x00, 0xD0, +/* 00005BB0 */ 0xCF, 0x00, 0x00, 0x09, 0xD0, 0x00, 0x00, 0x42, 0xD0, 0x00, 0x00, 0xA3, 0xD0, 0x00, 0x00, 0xB1, +/* 00005BC0 */ 0xD0, 0x00, 0x00, 0xB2, 0xD0, 0x00, 0x00, 0xD3, 0xD0, 0x00, 0x00, 0xDE, 0xD0, 0x00, 0x00, 0xDF, +/* 00005BD0 */ 0xD0, 0x00, 0x00, 0x24, 0xD1, 0x00, 0x00, 0x96, 0xD1, 0x00, 0x00, 0xC6, 0xD1, 0x00, 0x00, 0x2B, +/* 00005BE0 */ 0xD2, 0x00, 0x00, 0x3D, 0xD2, 0x00, 0x00, 0x3E, 0xD2, 0x00, 0x00, 0x7D, 0xD2, 0x00, 0x00, 0x7E, +/* 00005BF0 */ 0xD2, 0x00, 0x00, 0xFC, 0xD2, 0x00, 0x00, 0x7A, 0xD3, 0x00, 0x00, 0x9E, 0xD3, 0x00, 0x00, 0x9F, +/* 00005C00 */ 0xD3, 0x00, 0x00, 0xE4, 0xD3, 0x00, 0x00, 0xF4, 0xD3, 0x00, 0x00, 0x10, 0xD4, 0x00, 0x00, 0x2F, +/* 00005C10 */ 0xD4, 0x00, 0x00, 0x4F, 0xD4, 0x00, 0x00, 0x5B, 0xD4, 0x00, 0x00, 0x5C, 0xD4, 0x00, 0x00, 0xD8, +/* 00005C20 */ 0xD4, 0x00, 0x00, 0x21, 0xD5, 0x00, 0x00, 0x4D, 0xD5, 0x00, 0x00, 0xAE, 0xD5, 0x00, 0x00, 0xBC, +/* 00005C30 */ 0xD5, 0x00, 0x00, 0xBD, 0xD5, 0x00, 0x00, 0xF8, 0xD5, 0x00, 0x00, 0xF9, 0xD5, 0x00, 0x00, 0x33, +/* 00005C40 */ 0xD6, 0x00, 0x00, 0x7C, 0xD6, 0x00, 0x00, 0xB2, 0xD6, 0x00, 0x00, 0xC0, 0xD6, 0x00, 0x00, 0xC1, +/* 00005C50 */ 0xD6, 0x00, 0x00, 0xEE, 0xD6, 0x00, 0x00, 0xFA, 0xD6, 0x00, 0x00, 0x28, 0xD7, 0x00, 0x00, 0x49, +/* 00005C60 */ 0xD7, 0x00, 0x00, 0x66, 0xD7, 0x00, 0x00, 0x85, 0xD7, 0x00, 0x00, 0xA5, 0xD7, 0x00, 0x00, 0xB1, +/* 00005C70 */ 0xD7, 0x00, 0x00, 0xED, 0xD7, 0x00, 0x00, 0x09, 0xD8, 0x00, 0x00, 0x28, 0xD8, 0x00, 0x00, 0x48, +/* 00005C80 */ 0xD8, 0x00, 0x00, 0x54, 0xD8, 0x00, 0x00, 0x55, 0xD8, 0x00, 0x00, 0x98, 0xD8, 0x00, 0x00, 0xBA, +/* 00005C90 */ 0xD8, 0x00, 0x00, 0xD9, 0xD8, 0x00, 0x00, 0xF9, 0xD8, 0x00, 0x00, 0x15, 0xD9, 0x00, 0x00, 0x21, +/* 00005CA0 */ 0xD9, 0x00, 0x00, 0x22, 0xD9, 0x00, 0x00, 0x3F, 0xD9, 0x00, 0x00, 0x49, 0xD9, 0x00, 0x00, 0x4A, +/* 00005CB0 */ 0xD9, 0x00, 0x00, 0xCA, 0xD9, 0x00, 0x00, 0xF2, 0xD9, 0x00, 0x00, 0x2C, 0xDA, 0x00, 0x00, 0x40, +/* 00005CC0 */ 0xDA, 0x00, 0x00, 0x4A, 0xDA, 0x00, 0x00, 0x4B, 0xDA, 0x00, 0x00, 0x88, 0xDA, 0x00, 0x00, 0xC0, +/* 00005CD0 */ 0xDA, 0x00, 0x00, 0x0C, 0xDB, 0x00, 0x00, 0x31, 0xDB, 0x00, 0x00, 0x5B, 0xDB, 0x00, 0x00, 0x81, +/* 00005CE0 */ 0xDB, 0x00, 0x00, 0xA8, 0xDB, 0x00, 0x00, 0xFA, 0xDB, 0x00, 0x00, 0x20, 0xDC, 0x00, 0x00, 0x47, +/* 00005CF0 */ 0xDC, 0x00, 0x00, 0x70, 0xDC, 0x00, 0x00, 0x99, 0xDC, 0x00, 0x00, 0x02, 0xDD, 0x00, 0x00, 0x0D, +/* 00005D00 */ 0xDD, 0x00, 0x00, 0x0E, 0xDD, 0x00, 0x00, 0x1A, 0xDD, 0x00, 0x00, 0x86, 0xDD, 0x00, 0x00, 0x03, +/* 00005D10 */ 0xDE, 0x00, 0x00, 0x0E, 0xDE, 0x00, 0x00, 0x50, 0xDE, 0x00, 0x00, 0xA3, 0xDE, 0x00, 0x00, 0xAF, +/* 00005D20 */ 0xDE, 0x00, 0x00, 0xE3, 0xDE, 0x00, 0x00, 0x62, 0xDF, 0x00, 0x00, 0x88, 0xDF, 0x00, 0x00, 0xA6, +/* 00005D30 */ 0xDF, 0x00, 0x00, 0xC0, 0xDF, 0x00, 0x00, 0xDB, 0xDF, 0x00, 0x00, 0xF7, 0xDF, 0x00, 0x00, 0x11, +/* 00005D40 */ 0xE0, 0x00, 0x00, 0x4C, 0xE0, 0x00, 0x00, 0x81, 0xE0, 0x00, 0x00, 0x9E, 0xE0, 0x00, 0x00, 0xBB, +/* 00005D50 */ 0xE0, 0x00, 0x00, 0xDE, 0xE0, 0x00, 0x00, 0xED, 0xE0, 0x00, 0x00, 0x72, 0xE1, 0x00, 0x00, 0x98, +/* 00005D60 */ 0xE1, 0x00, 0x00, 0xD2, 0xE1, 0x00, 0x00, 0xEC, 0xE1, 0x00, 0x00, 0x1D, 0xE2, 0x00, 0x00, 0x45, +/* 00005D70 */ 0xE2, 0x00, 0x00, 0x5F, 0xE2, 0x00, 0x00, 0x9B, 0xE2, 0x00, 0x00, 0xB8, 0xE2, 0x00, 0x00, 0xD5, +/* 00005D80 */ 0xE2, 0x00, 0x00, 0x6A, 0xE3, 0x00, 0x00, 0x79, 0xE3, 0x00, 0x00, 0x7A, 0xE3, 0x00, 0x00, 0xDF, +/* 00005D90 */ 0xE3, 0x00, 0x00, 0x4E, 0xE4, 0x00, 0x00, 0x7A, 0xE4, 0x00, 0x00, 0x96, 0xE4, 0x00, 0x00, 0xB4, +/* 00005DA0 */ 0xE4, 0x00, 0x00, 0xCE, 0xE4, 0x00, 0x00, 0xE7, 0xE4, 0x00, 0x00, 0x02, 0xE5, 0x00, 0x00, 0x11, +/* 00005DB0 */ 0xE5, 0x00, 0x00, 0x3D, 0xE5, 0x00, 0x00, 0x5B, 0xE5, 0x00, 0x00, 0x79, 0xE5, 0x00, 0x00, 0x95, +/* 00005DC0 */ 0xE5, 0x00, 0x00, 0xB0, 0xE5, 0x00, 0x00, 0xCD, 0xE5, 0x00, 0x00, 0xDC, 0xE5, 0x00, 0x00, 0xDD, +/* 00005DD0 */ 0xE5, 0x00, 0x00, 0x11, 0xE6, 0x00, 0x00, 0x3B, 0xE6, 0x00, 0x00, 0x55, 0xE6, 0x00, 0x00, 0x6F, +/* 00005DE0 */ 0xE6, 0x00, 0x00, 0x89, 0xE6, 0x00, 0x00, 0xA3, 0xE6, 0x00, 0x00, 0xB2, 0xE6, 0x00, 0x00, 0xDC, +/* 00005DF0 */ 0xE6, 0x00, 0x00, 0xF6, 0xE6, 0x00, 0x00, 0x10, 0xE7, 0x00, 0x00, 0x2A, 0xE7, 0x00, 0x00, 0x44, +/* 00005E00 */ 0xE7, 0x00, 0x00, 0x53, 0xE7, 0x00, 0x00, 0x54, 0xE7, 0x00, 0x00, 0xBB, 0xE7, 0x00, 0x00, 0xF0, +/* 00005E10 */ 0xE7, 0x00, 0x00, 0x56, 0xE8, 0x00, 0x00, 0x85, 0xE8, 0x00, 0x00, 0xE4, 0xE8, 0x00, 0x00, 0x13, +/* 00005E20 */ 0xE9, 0x00, 0x00, 0x43, 0xE9, 0x00, 0x00, 0x59, 0xE9, 0x00, 0x00, 0x5A, 0xE9, 0x00, 0x00, 0x7F, +/* 00005E30 */ 0xE9, 0x00, 0x00, 0x9F, 0xE9, 0x00, 0x00, 0xA0, 0xE9, 0x00, 0x00, 0xCA, 0xE9, 0x00, 0x00, 0xCB, +/* 00005E40 */ 0xE9, 0x00, 0x00, 0x56, 0xEA, 0x00, 0x00, 0xBA, 0xEA, 0x00, 0x00, 0xFC, 0xEA, 0x00, 0x00, 0x2C, +/* 00005E50 */ 0xEB, 0x00, 0x00, 0x84, 0xEB, 0x00, 0x00, 0xF0, 0xEB, 0x00, 0x00, 0x4D, 0xEC, 0x00, 0x00, 0xC4, +/* 00005E60 */ 0xEC, 0x00, 0x00, 0x47, 0xED, 0x00, 0x00, 0x9D, 0xED, 0x00, 0x00, 0x08, 0xEE, 0x00, 0x00, 0x3A, +/* 00005E70 */ 0xEE, 0x00, 0x00, 0xAD, 0xEE, 0x00, 0x00, 0xDF, 0xEE, 0x00, 0x00, 0xF9, 0xEE, 0x00, 0x00, 0x0F, +/* 00005E80 */ 0xEF, 0x00, 0x00, 0x10, 0xEF, 0x00, 0x00, 0x80, 0xEF, 0x00, 0x00, 0x98, 0xEF, 0x00, 0x00, 0x99, +/* 00005E90 */ 0xEF, 0x00, 0x00, 0xED, 0xEF, 0x00, 0x00, 0xEE, 0xEF, 0x00, 0x00, 0x83, 0xF0, 0x00, 0x00, 0x12, +/* 00005EA0 */ 0xF1, 0x00, 0x00, 0xA7, 0xF1, 0x00, 0x00, 0xCE, 0xF1, 0x00, 0x00, 0xE9, 0xF1, 0x00, 0x00, 0x16, +/* 00005EB0 */ 0xF2, 0x00, 0x00, 0x40, 0xF2, 0x00, 0x00, 0x71, 0xF2, 0x00, 0x00, 0x96, 0xF2, 0x00, 0x00, 0xBD, +/* 00005EC0 */ 0xF2, 0x00, 0x00, 0xEC, 0xF2, 0x00, 0x00, 0x06, 0xF3, 0x00, 0x00, 0x23, 0xF3, 0x00, 0x00, 0x45, +/* 00005ED0 */ 0xF3, 0x00, 0x00, 0x6F, 0xF3, 0x00, 0x00, 0x99, 0xF3, 0x00, 0x00, 0xB6, 0xF3, 0x00, 0x00, 0xD8, +/* 00005EE0 */ 0xF3, 0x00, 0x00, 0x06, 0xF4, 0x00, 0x00, 0x23, 0xF4, 0x00, 0x00, 0x45, 0xF4, 0x00, 0x00, 0x5B, +/* 00005EF0 */ 0xF4, 0x00, 0x00, 0x5C, 0xF4, 0x00, 0x00, 0xC2, 0xF4, 0x00, 0x00, 0x29, 0xF5, 0x00, 0x00, 0x7D, +/* 00005F00 */ 0xF5, 0x00, 0x00, 0xB7, 0xF5, 0x00, 0x00, 0x26, 0xF6, 0x00, 0x00, 0x98, 0xF6, 0x00, 0x00, 0xEF, +/* 00005F10 */ 0xF6, 0x00, 0x00, 0x38, 0xF7, 0x00, 0x00, 0x6F, 0xF7, 0x00, 0x00, 0xAD, 0xF7, 0x00, 0x00, 0xE1, +/* 00005F20 */ 0xF7, 0x00, 0x00, 0x65, 0xF8, 0x00, 0x00, 0x8E, 0xF8, 0x00, 0x00, 0xC2, 0xF8, 0x00, 0x00, 0x38, +/* 00005F30 */ 0xF9, 0x00, 0x00, 0x5A, 0xF9, 0x00, 0x00, 0x5B, 0xF9, 0x00, 0x00, 0xB3, 0xF9, 0x00, 0x00, 0xE5, +/* 00005F40 */ 0xF9, 0x00, 0x00, 0x03, 0xFA, 0x00, 0x00, 0x24, 0xFA, 0x00, 0x00, 0x92, 0xFA, 0x00, 0x00, 0xEF, +/* 00005F50 */ 0xFA, 0x00, 0x00, 0x35, 0xFB, 0x00, 0x00, 0x4F, 0xFB, 0x00, 0x00, 0x65, 0xFB, 0x00, 0x00, 0x66, +/* 00005F60 */ 0xFB, 0x00, 0x00, 0x89, 0xFB, 0x00, 0x00, 0xD0, 0xFB, 0x00, 0x00, 0xED, 0xFB, 0x00, 0x00, 0x03, +/* 00005F70 */ 0xFC, 0x00, 0x00, 0x04, 0xFC, 0x00, 0x00, 0x42, 0xFC, 0x00, 0x00, 0x8A, 0xFC, 0x00, 0x00, 0xC0, +/* 00005F80 */ 0xFC, 0x00, 0x00, 0xDB, 0xFC, 0x00, 0x00, 0xED, 0xFC, 0x00, 0x00, 0xEE, 0xFC, 0x00, 0x00, 0x15, +/* 00005F90 */ 0xFD, 0x00, 0x00, 0x24, 0xFD, 0x00, 0x00, 0x32, 0xFD, 0x00, 0x00, 0x33, 0xFD, 0x00, 0x00, 0x3F, +/* 00005FA0 */ 0xFD, 0x00, 0x00, 0x96, 0xFD, 0x00, 0x00, 0xA1, 0xFD, 0x00, 0x00, 0xD4, 0xFD, 0x00, 0x00, 0xDF, +/* 00005FB0 */ 0xFD, 0x00, 0x00, 0x59, 0xFE, 0x00, 0x00, 0xA5, 0xFE, 0x00, 0x00, 0xE7, 0xFE, 0x00, 0x00, 0xF3, +/* 00005FC0 */ 0xFE, 0x00, 0x00, 0x4A, 0xFF, 0x00, 0x00, 0x90, 0xFF, 0x00, 0x00, 0xD1, 0xFF, 0x00, 0x00, 0xD2, +/* 00005FD0 */ 0xFF, 0x00, 0x00, 0xF6, 0xFF, 0x00, 0x00, 0x69, 0x00, 0x01, 0x00, 0x6A, 0x00, 0x01, 0x00, 0xD9, +/* 00005FE0 */ 0x00, 0x01, 0x00, 0x26, 0x01, 0x01, 0x00, 0x80, 0x01, 0x01, 0x00, 0xF0, 0x01, 0x01, 0x00, 0x18, +/* 00005FF0 */ 0x02, 0x01, 0x00, 0x3A, 0x02, 0x01, 0x00, 0x48, 0x02, 0x01, 0x00, 0x68, 0x02, 0x01, 0x00, 0x69, +/* 00006000 */ 0x02, 0x01, 0x00, 0xD8, 0x02, 0x01, 0x00, 0x06, 0x03, 0x01, 0x00, 0x32, 0x03, 0x01, 0x00, 0x5F, +/* 00006010 */ 0x03, 0x01, 0x00, 0x92, 0x03, 0x01, 0x00, 0x93, 0x03, 0x01, 0x00, 0xCA, 0x03, 0x01, 0x00, 0xF1, +/* 00006020 */ 0x03, 0x01, 0x00, 0x15, 0x04, 0x01, 0x00, 0x49, 0x04, 0x01, 0x00, 0x5E, 0x04, 0x01, 0x00, 0x8A, +/* 00006030 */ 0x04, 0x01, 0x00, 0x98, 0x04, 0x01, 0x00, 0x99, 0x04, 0x01, 0x00, 0x0E, 0x05, 0x01, 0x00, 0x51, +/* 00006040 */ 0x05, 0x01, 0x00, 0x9F, 0x05, 0x01, 0x00, 0xED, 0x05, 0x01, 0x00, 0x5E, 0x06, 0x01, 0x00, 0xAF, +/* 00006050 */ 0x06, 0x01, 0x00, 0xCB, 0x06, 0x01, 0x00, 0xE0, 0x06, 0x01, 0x00, 0x02, 0x07, 0x01, 0x00, 0x10, +/* 00006060 */ 0x07, 0x01, 0x00, 0x11, 0x07, 0x01, 0x00, 0x3B, 0x07, 0x01, 0x00, 0x3C, 0x07, 0x01, 0x00, 0x75, +/* 00006070 */ 0x07, 0x01, 0x00, 0xD3, 0x07, 0x01, 0x00, 0xD4, 0x07, 0x01, 0x00, 0x48, 0x08, 0x01, 0x00, 0x8B, +/* 00006080 */ 0x08, 0x01, 0x00, 0xC8, 0x08, 0x01, 0x00, 0xC9, 0x08, 0x01, 0x00, 0xEC, 0x08, 0x01, 0x00, 0xF7, +/* 00006090 */ 0x08, 0x01, 0x00, 0xF8, 0x08, 0x01, 0x00, 0x04, 0x09, 0x01, 0x00, 0x4C, 0x09, 0x01, 0x00, 0x57, +/* 000060A0 */ 0x09, 0x01, 0x00, 0x83, 0x09, 0x01, 0x00, 0x8E, 0x09, 0x01, 0x00, 0x0F, 0x0A, 0x01, 0x00, 0x89, +/* 000060B0 */ 0x0A, 0x01, 0x00, 0x04, 0x0B, 0x01, 0x00, 0x39, 0x0B, 0x01, 0x00, 0x45, 0x0B, 0x01, 0x00, 0x90, +/* 000060C0 */ 0x0B, 0x01, 0x00, 0xE1, 0x0B, 0x01, 0x00, 0x0A, 0x0C, 0x01, 0x00, 0x2F, 0x0C, 0x01, 0x00, 0x6C, +/* 000060D0 */ 0x0C, 0x01, 0x00, 0xBD, 0x0C, 0x01, 0x00, 0xEE, 0x0C, 0x01, 0x00, 0x1D, 0x0D, 0x01, 0x00, 0x4B, +/* 000060E0 */ 0x0D, 0x01, 0x00, 0x61, 0x0D, 0x01, 0x00, 0x75, 0x0D, 0x01, 0x00, 0x83, 0x0D, 0x01, 0x00, 0x84, +/* 000060F0 */ 0x0D, 0x01, 0x00, 0xC1, 0x0D, 0x01, 0x00, 0x0B, 0x0E, 0x01, 0x00, 0x3C, 0x0E, 0x01, 0x00, 0x6B, +/* 00006100 */ 0x0E, 0x01, 0x00, 0x99, 0x0E, 0x01, 0x00, 0xAF, 0x0E, 0x01, 0x00, 0xC3, 0x0E, 0x01, 0x00, 0xD1, +/* 00006110 */ 0x0E, 0x01, 0x00, 0xD2, 0x0E, 0x01, 0x00, 0x2A, 0x0F, 0x01, 0x00, 0x70, 0x0F, 0x01, 0x00, 0xA6, +/* 00006120 */ 0x0F, 0x01, 0x00, 0xD0, 0x0F, 0x01, 0x00, 0xF8, 0x0F, 0x01, 0x00, 0x22, 0x10, 0x01, 0x00, 0x4E, +/* 00006130 */ 0x10, 0x01, 0x00, 0x66, 0x10, 0x01, 0x00, 0x79, 0x10, 0x01, 0x00, 0x87, 0x10, 0x01, 0x00, 0x88, +/* 00006140 */ 0x10, 0x01, 0x00, 0xE0, 0x10, 0x01, 0x00, 0x2A, 0x11, 0x01, 0x00, 0x60, 0x11, 0x01, 0x00, 0x8A, +/* 00006150 */ 0x11, 0x01, 0x00, 0xB2, 0x11, 0x01, 0x00, 0xDC, 0x11, 0x01, 0x00, 0x08, 0x12, 0x01, 0x00, 0x20, +/* 00006160 */ 0x12, 0x01, 0x00, 0x33, 0x12, 0x01, 0x00, 0x41, 0x12, 0x01, 0x00, 0x42, 0x12, 0x01, 0x00, 0x5E, +/* 00006170 */ 0x12, 0x01, 0x00, 0x69, 0x12, 0x01, 0x00, 0x6A, 0x12, 0x01, 0x00, 0xA4, 0x12, 0x01, 0x00, 0xD4, +/* 00006180 */ 0x12, 0x01, 0x00, 0x01, 0x13, 0x01, 0x00, 0x0F, 0x13, 0x01, 0x00, 0x10, 0x13, 0x01, 0x00, 0x84, +/* 00006190 */ 0x13, 0x01, 0x00, 0x8F, 0x13, 0x01, 0x00, 0x90, 0x13, 0x01, 0x00, 0xE2, 0x13, 0x01, 0x00, 0x3E, +/* 000061A0 */ 0x14, 0x01, 0x00, 0x82, 0x14, 0x01, 0x00, 0xA1, 0x14, 0x01, 0x00, 0xC4, 0x14, 0x01, 0x00, 0xE6, +/* 000061B0 */ 0x14, 0x01, 0x00, 0xF2, 0x14, 0x01, 0x00, 0xF3, 0x14, 0x01, 0x00, 0x64, 0x15, 0x01, 0x00, 0xAB, +/* 000061C0 */ 0x15, 0x01, 0x00, 0xE9, 0x15, 0x01, 0x00, 0xF7, 0x15, 0x01, 0x00, 0x2C, 0x16, 0x01, 0x00, 0x64, +/* 000061D0 */ 0x16, 0x01, 0x00, 0x8B, 0x16, 0x01, 0x00, 0x99, 0x16, 0x01, 0x00, 0x9A, 0x16, 0x01, 0x00, 0xC3, +/* 000061E0 */ 0x16, 0x01, 0x00, 0x1B, 0x17, 0x01, 0x00, 0x85, 0x17, 0x01, 0x00, 0xD0, 0x17, 0x01, 0x00, 0xFD, +/* 000061F0 */ 0x17, 0x01, 0x00, 0x54, 0x18, 0x01, 0x00, 0x6D, 0x18, 0x01, 0x00, 0x93, 0x18, 0x01, 0x00, 0xC1, +/* 00006200 */ 0x18, 0x01, 0x00, 0x37, 0x19, 0x01, 0x00, 0x8E, 0x19, 0x01, 0x00, 0xA0, 0x19, 0x01, 0x00, 0xAE, +/* 00006210 */ 0x19, 0x01, 0x00, 0xAF, 0x19, 0x01, 0x00, 0xCF, 0x19, 0x01, 0x00, 0xF9, 0x19, 0x01, 0x00, 0x67, +/* 00006220 */ 0x1A, 0x01, 0x00, 0x75, 0x1A, 0x01, 0x00, 0x76, 0x1A, 0x01, 0x00, 0x08, 0x1B, 0x01, 0x00, 0x12, +/* 00006230 */ 0x1B, 0x01, 0x00, 0x13, 0x1B, 0x01, 0x00, 0x8D, 0x1B, 0x01, 0x00, 0x16, 0x1C, 0x01, 0x00, 0x91, +/* 00006240 */ 0x1C, 0x01, 0x00, 0x16, 0x1D, 0x01, 0x00, 0x37, 0x1D, 0x01, 0x00, 0x42, 0x1D, 0x01, 0x00, 0xCA, +/* 00006250 */ 0x1D, 0x01, 0x00, 0x4C, 0x1E, 0x01, 0x00, 0xD2, 0x1E, 0x01, 0x00, 0x22, 0x1F, 0x01, 0x00, 0x2D, +/* 00006260 */ 0x1F, 0x01, 0x00, 0xAB, 0x1F, 0x01, 0x00, 0x19, 0x20, 0x01, 0x00, 0x70, 0x20, 0x01, 0x00, 0xD7, +/* 00006270 */ 0x20, 0x01, 0x00, 0x4D, 0x21, 0x01, 0x00, 0x9A, 0x21, 0x01, 0x00, 0xA5, 0x21, 0x01, 0x00, 0x2D, +/* 00006280 */ 0x22, 0x01, 0x00, 0xB2, 0x22, 0x01, 0x00, 0xF9, 0x22, 0x01, 0x00, 0xFA, 0x22, 0x01, 0x00, 0x46, +/* 00006290 */ 0x23, 0x01, 0x00, 0xE0, 0x23, 0x01, 0x00, 0x61, 0x24, 0x01, 0x00, 0x86, 0x24, 0x01, 0x00, 0x2D, +/* 000062A0 */ 0x25, 0x01, 0x00, 0x2E, 0x25, 0x01, 0x00, 0x7A, 0x25, 0x01, 0x00, 0x18, 0x26, 0x01, 0x00, 0x99, +/* 000062B0 */ 0x26, 0x01, 0x00, 0xBE, 0x26, 0x01, 0x00, 0x73, 0x27, 0x01, 0x00, 0x74, 0x27, 0x01, 0x00, 0xC0, +/* 000062C0 */ 0x27, 0x01, 0x00, 0x5E, 0x28, 0x01, 0x00, 0xDF, 0x28, 0x01, 0x00, 0x04, 0x29, 0x01, 0x00, 0xB9, +/* 000062D0 */ 0x29, 0x01, 0x00, 0xBA, 0x29, 0x01, 0x00, 0x15, 0x2A, 0x01, 0x00, 0x38, 0x2A, 0x01, 0x00, 0x4C, +/* 000062E0 */ 0x2A, 0x01, 0x00, 0x56, 0x2A, 0x01, 0x00, 0x57, 0x2A, 0x01, 0x00, 0x83, 0x2A, 0x01, 0x00, 0x84, +/* 000062F0 */ 0x2A, 0x01, 0x00, 0x90, 0x2A, 0x01, 0x00, 0xBF, 0x2A, 0x01, 0x00, 0xCA, 0x2A, 0x01, 0x00, 0xF8, +/* 00006300 */ 0x2A, 0x01, 0x00, 0x03, 0x2B, 0x01, 0x00, 0x2F, 0x2B, 0x01, 0x00, 0x52, 0x2B, 0x01, 0x00, 0x5E, +/* 00006310 */ 0x2B, 0x01, 0x00, 0xEA, 0x2B, 0x01, 0x00, 0x40, 0x2C, 0x01, 0x00, 0xA6, 0x2C, 0x01, 0x00, 0xA7, +/* 00006320 */ 0x2C, 0x01, 0x00, 0xF0, 0x2C, 0x01, 0x00, 0x1E, 0x2D, 0x01, 0x00, 0x49, 0x2D, 0x01, 0x00, 0x91, +/* 00006330 */ 0x2D, 0x01, 0x00, 0x9F, 0x2D, 0x01, 0x00, 0xA0, 0x2D, 0x01, 0x00, 0xE6, 0x2D, 0x01, 0x00, 0xE7, +/* 00006340 */ 0x2D, 0x01, 0x00, 0x35, 0x2E, 0x01, 0x00, 0x77, 0x2E, 0x01, 0x00, 0xA2, 0x2E, 0x01, 0x00, 0xC7, +/* 00006350 */ 0x2E, 0x01, 0x00, 0xEE, 0x2E, 0x01, 0x00, 0x16, 0x2F, 0x01, 0x00, 0x2A, 0x2F, 0x01, 0x00, 0x2B, +/* 00006360 */ 0x2F, 0x01, 0x00, 0x48, 0x2F, 0x01, 0x00, 0x56, 0x2F, 0x01, 0x00, 0x57, 0x2F, 0x01, 0x00, 0x7A, +/* 00006370 */ 0x2F, 0x01, 0x00, 0x86, 0x2F, 0x01, 0x00, 0x87, 0x2F, 0x01, 0x00, 0xBD, 0x2F, 0x01, 0x00, 0xFB, +/* 00006380 */ 0x2F, 0x01, 0x00, 0x6A, 0x30, 0x01, 0x00, 0x9E, 0x30, 0x01, 0x00, 0xAC, 0x30, 0x01, 0x00, 0xAD, +/* 00006390 */ 0x30, 0x01, 0x00, 0xD8, 0x30, 0x01, 0x00, 0x3D, 0x31, 0x01, 0x00, 0x4B, 0x31, 0x01, 0x00, 0x4C, +/* 000063A0 */ 0x31, 0x01, 0x00, 0x86, 0x31, 0x01, 0x00, 0xC1, 0x31, 0x01, 0x00, 0x26, 0x32, 0x01, 0x00, 0x34, +/* 000063B0 */ 0x32, 0x01, 0x00, 0x35, 0x32, 0x01, 0x00, 0x56, 0x32, 0x01, 0x00, 0x61, 0x32, 0x01, 0x00, 0x62, +/* 000063C0 */ 0x32, 0x01, 0x00, 0xC3, 0x32, 0x01, 0x00, 0x2D, 0x33, 0x01, 0x00, 0x69, 0x33, 0x01, 0x00, 0xCE, +/* 000063D0 */ 0x33, 0x01, 0x00, 0xDC, 0x33, 0x01, 0x00, 0xDD, 0x33, 0x01, 0x00, 0xF0, 0x33, 0x01, 0x00, 0x16, +/* 000063E0 */ 0x34, 0x01, 0x00, 0x54, 0x34, 0x01, 0x00, 0x69, 0x34, 0x01, 0x00, 0x96, 0x34, 0x01, 0x00, 0x97, +/* 000063F0 */ 0x34, 0x01, 0x00, 0xCB, 0x34, 0x01, 0x00, 0xFC, 0x34, 0x01, 0x00, 0x0E, 0x35, 0x01, 0x00, 0x1C, +/* 00006400 */ 0x35, 0x01, 0x00, 0x1D, 0x35, 0x01, 0x00, 0x93, 0x35, 0x01, 0x00, 0x9F, 0x35, 0x01, 0x00, 0xA0, +/* 00006410 */ 0x35, 0x01, 0x00, 0x1F, 0x36, 0x01, 0x00, 0x4B, 0x36, 0x01, 0x00, 0xB7, 0x36, 0x01, 0x00, 0xC5, +/* 00006420 */ 0x36, 0x01, 0x00, 0xC6, 0x36, 0x01, 0x00, 0x07, 0x37, 0x01, 0x00, 0x60, 0x37, 0x01, 0x00, 0xCC, +/* 00006430 */ 0x37, 0x01, 0x00, 0xDA, 0x37, 0x01, 0x00, 0xDB, 0x37, 0x01, 0x00, 0xEE, 0x37, 0x01, 0x00, 0x14, +/* 00006440 */ 0x38, 0x01, 0x00, 0x52, 0x38, 0x01, 0x00, 0x67, 0x38, 0x01, 0x00, 0x94, 0x38, 0x01, 0x00, 0x95, +/* 00006450 */ 0x38, 0x01, 0x00, 0xC9, 0x38, 0x01, 0x00, 0xFA, 0x38, 0x01, 0x00, 0x0C, 0x39, 0x01, 0x00, 0x1A, +/* 00006460 */ 0x39, 0x01, 0x00, 0x1B, 0x39, 0x01, 0x00, 0x98, 0x39, 0x01, 0x00, 0xA4, 0x39, 0x01, 0x00, 0xA5, +/* 00006470 */ 0x39, 0x01, 0x00, 0xDD, 0x39, 0x01, 0x00, 0x09, 0x3A, 0x01, 0x00, 0x26, 0x3A, 0x01, 0x00, 0x45, +/* 00006480 */ 0x3A, 0x01, 0x00, 0x65, 0x3A, 0x01, 0x00, 0x71, 0x3A, 0x01, 0x00, 0x72, 0x3A, 0x01, 0x00, 0xB5, +/* 00006490 */ 0x3A, 0x01, 0x00, 0xD8, 0x3A, 0x01, 0x00, 0xF4, 0x3A, 0x01, 0x00, 0x13, 0x3B, 0x01, 0x00, 0x32, +/* 000064A0 */ 0x3B, 0x01, 0x00, 0x3E, 0x3B, 0x01, 0x00, 0x3F, 0x3B, 0x01, 0x00, 0xBD, 0x3B, 0x01, 0x00, 0x06, +/* 000064B0 */ 0x3C, 0x01, 0x00, 0x32, 0x3C, 0x01, 0x00, 0x97, 0x3C, 0x01, 0x00, 0xA5, 0x3C, 0x01, 0x00, 0xA6, +/* 000064C0 */ 0x3C, 0x01, 0x00, 0xE3, 0x3C, 0x01, 0x00, 0xE4, 0x3C, 0x01, 0x00, 0x1E, 0x3D, 0x01, 0x00, 0x67, +/* 000064D0 */ 0x3D, 0x01, 0x00, 0x9D, 0x3D, 0x01, 0x00, 0xAB, 0x3D, 0x01, 0x00, 0xAC, 0x3D, 0x01, 0x00, 0xD9, +/* 000064E0 */ 0x3D, 0x01, 0x00, 0xE5, 0x3D, 0x01, 0x00, 0x13, 0x3E, 0x01, 0x00, 0x34, 0x3E, 0x01, 0x00, 0x51, +/* 000064F0 */ 0x3E, 0x01, 0x00, 0x70, 0x3E, 0x01, 0x00, 0x90, 0x3E, 0x01, 0x00, 0x9C, 0x3E, 0x01, 0x00, 0xDA, +/* 00006500 */ 0x3E, 0x01, 0x00, 0xF6, 0x3E, 0x01, 0x00, 0x15, 0x3F, 0x01, 0x00, 0x35, 0x3F, 0x01, 0x00, 0x41, +/* 00006510 */ 0x3F, 0x01, 0x00, 0x86, 0x3F, 0x01, 0x00, 0xA8, 0x3F, 0x01, 0x00, 0xC7, 0x3F, 0x01, 0x00, 0xE7, +/* 00006520 */ 0x3F, 0x01, 0x00, 0x03, 0x40, 0x01, 0x00, 0x0F, 0x40, 0x01, 0x00, 0x56, 0x40, 0x01, 0x00, 0xCA, +/* 00006530 */ 0x40, 0x01, 0x00, 0xFA, 0x40, 0x01, 0x00, 0x63, 0x41, 0x01, 0x00, 0x75, 0x41, 0x01, 0x00, 0x76, +/* 00006540 */ 0x41, 0x01, 0x00, 0xB7, 0x41, 0x01, 0x00, 0xD9, 0x41, 0x01, 0x00, 0xF7, 0x41, 0x01, 0x00, 0x17, +/* 00006550 */ 0x42, 0x01, 0x00, 0x3E, 0x42, 0x01, 0x00, 0x5E, 0x42, 0x01, 0x00, 0x7F, 0x42, 0x01, 0x00, 0x9E, +/* 00006560 */ 0x42, 0x01, 0x00, 0xB9, 0x42, 0x01, 0x00, 0xD5, 0x42, 0x01, 0x00, 0xF2, 0x42, 0x01, 0x00, 0x0D, +/* 00006570 */ 0x43, 0x01, 0x00, 0x29, 0x43, 0x01, 0x00, 0x47, 0x43, 0x01, 0x00, 0x65, 0x43, 0x01, 0x00, 0x89, +/* 00006580 */ 0x43, 0x01, 0x00, 0x9C, 0x43, 0x01, 0x00, 0x9D, 0x43, 0x01, 0x00, 0xFD, 0x43, 0x01, 0x00, 0x2D, +/* 00006590 */ 0x44, 0x01, 0x00, 0x68, 0x44, 0x01, 0x00, 0xB6, 0x44, 0x01, 0x00, 0xEB, 0x44, 0x01, 0x00, 0x37, +/* 000065A0 */ 0x45, 0x01, 0x00, 0x51, 0x45, 0x01, 0x00, 0x52, 0x45, 0x01, 0x00, 0x77, 0x45, 0x01, 0x00, 0x8D, +/* 000065B0 */ 0x45, 0x01, 0x00, 0xA1, 0x45, 0x01, 0x00, 0xB1, 0x45, 0x01, 0x00, 0xCD, 0x45, 0x01, 0x00, 0xEC, +/* 000065C0 */ 0x45, 0x01, 0x00, 0x0C, 0x46, 0x01, 0x00, 0x18, 0x46, 0x01, 0x00, 0x19, 0x46, 0x01, 0x00, 0xB5, +/* 000065D0 */ 0x46, 0x01, 0x00, 0x23, 0x47, 0x01, 0x00, 0x2F, 0x47, 0x01, 0x00, 0x70, 0x47, 0x01, 0x00, 0x97, +/* 000065E0 */ 0x47, 0x01, 0x00, 0xB3, 0x47, 0x01, 0x00, 0xD2, 0x47, 0x01, 0x00, 0xF2, 0x47, 0x01, 0x00, 0xFE, +/* 000065F0 */ 0x47, 0x01, 0x00, 0xFF, 0x47, 0x01, 0x00, 0x1E, 0x48, 0x01, 0x00, 0x28, 0x48, 0x01, 0x00, 0x29, +/* 00006600 */ 0x48, 0x01, 0x00, 0x4F, 0x48, 0x01, 0x00, 0x72, 0x48, 0x01, 0x00, 0x86, 0x48, 0x01, 0x00, 0x90, +/* 00006610 */ 0x48, 0x01, 0x00, 0x91, 0x48, 0x01, 0x00, 0x9D, 0x48, 0x01, 0x00, 0xD1, 0x48, 0x01, 0x00, 0xDC, +/* 00006620 */ 0x48, 0x01, 0x00, 0x0C, 0x49, 0x01, 0x00, 0x17, 0x49, 0x01, 0x00, 0x3E, 0x49, 0x01, 0x00, 0x6A, +/* 00006630 */ 0x49, 0x01, 0x00, 0x8D, 0x49, 0x01, 0x00, 0x99, 0x49, 0x01, 0x00, 0xEA, 0x49, 0x01, 0x00, 0x30, +/* 00006640 */ 0x4A, 0x01, 0x00, 0x87, 0x4A, 0x01, 0x00, 0xAB, 0x4A, 0x01, 0x00, 0x18, 0x4B, 0x01, 0x00, 0x82, +/* 00006650 */ 0x4B, 0x01, 0x00, 0x83, 0x4B, 0x01, 0x00, 0xC8, 0x4B, 0x01, 0x00, 0xC9, 0x4B, 0x01, 0x00, 0x2C, +/* 00006660 */ 0x4C, 0x01, 0x00, 0x8A, 0x4C, 0x01, 0x00, 0x8B, 0x4C, 0x01, 0x00, 0xB6, 0x4C, 0x01, 0x00, 0x0C, +/* 00006670 */ 0x4D, 0x01, 0x00, 0x0D, 0x4D, 0x01, 0x00, 0x44, 0x4D, 0x01, 0x00, 0x45, 0x4D, 0x01, 0x00, 0x65, +/* 00006680 */ 0x4D, 0x01, 0x00, 0x70, 0x4D, 0x01, 0x00, 0x71, 0x4D, 0x01, 0x00, 0x7D, 0x4D, 0x01, 0x00, 0xCE, +/* 00006690 */ 0x4D, 0x01, 0x00, 0x0D, 0x4E, 0x01, 0x00, 0x18, 0x4E, 0x01, 0x00, 0x40, 0x4E, 0x01, 0x00, 0x4B, +/* 000066A0 */ 0x4E, 0x01, 0x00, 0x72, 0x4E, 0x01, 0x00, 0x8F, 0x4E, 0x01, 0x00, 0x9B, 0x4E, 0x01, 0x00, 0xD5, +/* 000066B0 */ 0x4E, 0x01, 0x00, 0xF7, 0x4E, 0x01, 0x00, 0x17, 0x4F, 0x01, 0x00, 0x25, 0x4F, 0x01, 0x00, 0x26, +/* 000066C0 */ 0x4F, 0x01, 0x00, 0x65, 0x4F, 0x01, 0x00, 0x70, 0x4F, 0x01, 0x00, 0x71, 0x4F, 0x01, 0x00, 0x9A, +/* 000066D0 */ 0x4F, 0x01, 0x00, 0x9B, 0x4F, 0x01, 0x00, 0xEB, 0x4F, 0x01, 0x00, 0x6E, 0x50, 0x01, 0x00, 0x9A, +/* 000066E0 */ 0x50, 0x01, 0x00, 0xED, 0x50, 0x01, 0x00, 0xFB, 0x50, 0x01, 0x00, 0xFC, 0x50, 0x01, 0x00, 0x5D, +/* 000066F0 */ 0x51, 0x01, 0x00, 0x5E, 0x51, 0x01, 0x00, 0x8A, 0x51, 0x01, 0x00, 0xCA, 0x51, 0x01, 0x00, 0xCB, +/* 00006700 */ 0x51, 0x01, 0x00, 0x0D, 0x52, 0x01, 0x00, 0x0E, 0x52, 0x01, 0x00, 0x2E, 0x52, 0x01, 0x00, 0x3A, +/* 00006710 */ 0x52, 0x01, 0x00, 0x3B, 0x52, 0x01, 0x00, 0x70, 0x52, 0x01, 0x00, 0xA5, 0x52, 0x01, 0x00, 0xCE, +/* 00006720 */ 0x52, 0x01, 0x00, 0xEB, 0x52, 0x01, 0x00, 0x0A, 0x53, 0x01, 0x00, 0x2B, 0x53, 0x01, 0x00, 0x37, +/* 00006730 */ 0x53, 0x01, 0x00, 0x38, 0x53, 0x01, 0x00, 0x78, 0x53, 0x01, 0x00, 0x98, 0x53, 0x01, 0x00, 0xB4, +/* 00006740 */ 0x53, 0x01, 0x00, 0xD3, 0x53, 0x01, 0x00, 0xF2, 0x53, 0x01, 0x00, 0xFE, 0x53, 0x01, 0x00, 0xFF, +/* 00006750 */ 0x53, 0x01, 0x00, 0x98, 0x54, 0x01, 0x00, 0x05, 0x55, 0x01, 0x00, 0x11, 0x55, 0x01, 0x00, 0x4F, +/* 00006760 */ 0x55, 0x01, 0x00, 0x76, 0x55, 0x01, 0x00, 0x92, 0x55, 0x01, 0x00, 0xB1, 0x55, 0x01, 0x00, 0xD1, +/* 00006770 */ 0x55, 0x01, 0x00, 0xDD, 0x55, 0x01, 0x00, 0xDE, 0x55, 0x01, 0x00, 0x1A, 0x56, 0x01, 0x00, 0x82, +/* 00006780 */ 0x56, 0x01, 0x00, 0xB9, 0x56, 0x01, 0x00, 0xEE, 0x56, 0x01, 0x00, 0x52, 0x57, 0x01, 0x00, 0x60, +/* 00006790 */ 0x57, 0x01, 0x00, 0x61, 0x57, 0x01, 0x00, 0x91, 0x57, 0x01, 0x00, 0xBA, 0x57, 0x01, 0x00, 0xC6, +/* 000067A0 */ 0x57, 0x01, 0x00, 0x01, 0x58, 0x01, 0x00, 0x1C, 0x58, 0x01, 0x00, 0x3B, 0x58, 0x01, 0x00, 0x5B, +/* 000067B0 */ 0x58, 0x01, 0x00, 0x77, 0x58, 0x01, 0x00, 0x83, 0x58, 0x01, 0x00, 0x84, 0x58, 0x01, 0x00, 0x02, +/* 000067C0 */ 0x59, 0x01, 0x00, 0x39, 0x59, 0x01, 0x00, 0x6E, 0x59, 0x01, 0x00, 0xD2, 0x59, 0x01, 0x00, 0xE0, +/* 000067D0 */ 0x59, 0x01, 0x00, 0xE1, 0x59, 0x01, 0x00, 0x0C, 0x5A, 0x01, 0x00, 0x26, 0x5A, 0x01, 0x00, 0x3E, +/* 000067E0 */ 0x5A, 0x01, 0x00, 0x66, 0x5A, 0x01, 0x00, 0x8F, 0x5A, 0x01, 0x00, 0xB8, 0x5A, 0x01, 0x00, 0xE4, +/* 000067F0 */ 0x5A, 0x01, 0x00, 0x10, 0x5B, 0x01, 0x00, 0x33, 0x5B, 0x01, 0x00, 0x5C, 0x5B, 0x01, 0x00, 0x8F, +/* 00006800 */ 0x5B, 0x01, 0x00, 0xFE, 0x5B, 0x01, 0x00, 0x4F, 0x5C, 0x01, 0x00, 0x70, 0x5C, 0x01, 0x00, 0x82, +/* 00006810 */ 0x5C, 0x01, 0x00, 0x92, 0x5C, 0x01, 0x00, 0x9E, 0x5C, 0x01, 0x00, 0xE2, 0x5C, 0x01, 0x00, 0x06, +/* 00006820 */ 0x5D, 0x01, 0x00, 0x25, 0x5D, 0x01, 0x00, 0x45, 0x5D, 0x01, 0x00, 0x61, 0x5D, 0x01, 0x00, 0x6D, +/* 00006830 */ 0x5D, 0x01, 0x00, 0x6E, 0x5D, 0x01, 0x00, 0x8A, 0x5D, 0x01, 0x00, 0x94, 0x5D, 0x01, 0x00, 0x95, +/* 00006840 */ 0x5D, 0x01, 0x00, 0xC6, 0x5D, 0x01, 0x00, 0xE5, 0x5D, 0x01, 0x00, 0x77, 0x5E, 0x01, 0x00, 0x09, +/* 00006850 */ 0x5F, 0x01, 0x00, 0x9B, 0x5F, 0x01, 0x00, 0x2D, 0x60, 0x01, 0x00, 0x33, 0x60, 0x01, 0x00, 0x34, +/* 00006860 */ 0x60, 0x01, 0x00, 0x3A, 0x60, 0x01, 0x00, 0x42, 0x60, 0x01, 0x00, 0x49, 0x60, 0x01, 0x00, 0x50, +/* 00006870 */ 0x60, 0x01, 0x00, 0x57, 0x60, 0x01, 0x00, 0x5E, 0x60, 0x01, 0x00, 0x65, 0x60, 0x01, 0x00, 0x6C, +/* 00006880 */ 0x60, 0x01, 0x00, 0x8A, 0x60, 0x01, 0x00, 0x91, 0x60, 0x01, 0x00, 0x98, 0x60, 0x01, 0x00, 0x9F, +/* 00006890 */ 0x60, 0x01, 0x00, 0xA6, 0x60, 0x01, 0x00, 0xAD, 0x60, 0x01, 0x00, 0xB4, 0x60, 0x01, 0x00, 0xBC, +/* 000068A0 */ 0x60, 0x01, 0x00, 0xC7, 0x60, 0x01, 0x00, 0xC8, 0x60, 0x01, 0x00, 0xFC, 0x60, 0x01, 0x00, 0x32, +/* 000068B0 */ 0x61, 0x01, 0x00, 0x38, 0x61, 0x01, 0x00, 0x6D, 0x61, 0x01, 0x00, 0xA4, 0x61, 0x01, 0x00, 0xAA, +/* 000068C0 */ 0x61, 0x01, 0x00, 0xAB, 0x61, 0x01, 0x00, 0xD0, 0x61, 0x01, 0x00, 0xFB, 0x61, 0x01, 0x00, 0x30, +/* 000068D0 */ 0x62, 0x01, 0x00, 0x54, 0x62, 0x01, 0x00, 0x5E, 0x62, 0x01, 0x00, 0x5F, 0x62, 0x01, 0x00, 0x93, +/* 000068E0 */ 0x62, 0x01, 0x00, 0xAA, 0x62, 0x01, 0x00, 0xF9, 0x62, 0x01, 0x00, 0x2B, 0x63, 0x01, 0x00, 0x4F, +/* 000068F0 */ 0x63, 0x01, 0x00, 0x60, 0x63, 0x01, 0x00, 0x86, 0x63, 0x01, 0x00, 0x90, 0x63, 0x01, 0x00, 0x91, +/* 00006900 */ 0x63, 0x01, 0x00, 0xB1, 0x63, 0x01, 0x00, 0xB8, 0x63, 0x01, 0x00, 0xB9, 0x63, 0x01, 0x00, 0xFF, +/* 00006910 */ 0x63, 0x01, 0x00, 0x4E, 0x64, 0x01, 0x00, 0x6D, 0x64, 0x01, 0x00, 0xBB, 0x64, 0x01, 0x00, 0xEE, +/* 00006920 */ 0x64, 0x01, 0x00, 0x1E, 0x65, 0x01, 0x00, 0x5E, 0x65, 0x01, 0x00, 0x8A, 0x65, 0x01, 0x00, 0x98, +/* 00006930 */ 0x65, 0x01, 0x00, 0xA2, 0x65, 0x01, 0x00, 0xBD, 0x65, 0x01, 0x00, 0xC4, 0x65, 0x01, 0x00, 0xC5, +/* 00006940 */ 0x65, 0x01, 0x00, 0xFC, 0x65, 0x01, 0x00, 0x3C, 0x66, 0x01, 0x00, 0x5B, 0x66, 0x01, 0x00, 0x7B, +/* 00006950 */ 0x66, 0x01, 0x00, 0xA3, 0x66, 0x01, 0x00, 0xB1, 0x66, 0x01, 0x00, 0xFB, 0x66, 0x01, 0x00, 0x17, +/* 00006960 */ 0x67, 0x01, 0x00, 0x28, 0x67, 0x01, 0x00, 0x43, 0x67, 0x01, 0x00, 0x4D, 0x67, 0x01, 0x00, 0x54, +/* 00006970 */ 0x67, 0x01, 0x00, 0x55, 0x67, 0x01, 0x00, 0x8F, 0x67, 0x01, 0x00, 0xA8, 0x67, 0x01, 0x00, 0xCB, +/* 00006980 */ 0x67, 0x01, 0x00, 0xED, 0x67, 0x01, 0x00, 0x11, 0x68, 0x01, 0x00, 0x1F, 0x68, 0x01, 0x00, 0x36, +/* 00006990 */ 0x68, 0x01, 0x00, 0x40, 0x68, 0x01, 0x00, 0x47, 0x68, 0x01, 0x00, 0x48, 0x68, 0x01, 0x00, 0xAD, +/* 000069A0 */ 0x68, 0x01, 0x00, 0xD9, 0x68, 0x01, 0x00, 0x1F, 0x69, 0x01, 0x00, 0x35, 0x69, 0x01, 0x00, 0x3F, +/* 000069B0 */ 0x69, 0x01, 0x00, 0x46, 0x69, 0x01, 0x00, 0x47, 0x69, 0x01, 0x00, 0x78, 0x69, 0x01, 0x00, 0xAF, +/* 000069C0 */ 0x69, 0x01, 0x00, 0xB6, 0x69, 0x01, 0x00, 0xB7, 0x69, 0x01, 0x00, 0xF9, 0x69, 0x01, 0x00, 0x3F, +/* 000069D0 */ 0x6A, 0x01, 0x00, 0x6B, 0x6A, 0x01, 0x00, 0xAF, 0x6A, 0x01, 0x00, 0xDA, 0x6A, 0x01, 0x00, 0x03, +/* 000069E0 */ 0x6B, 0x01, 0x00, 0x2F, 0x6B, 0x01, 0x00, 0x41, 0x6B, 0x01, 0x00, 0x93, 0x6B, 0x01, 0x00, 0x08, +/* 000069F0 */ 0x6C, 0x01, 0x00, 0x16, 0x6C, 0x01, 0x00, 0x61, 0x6C, 0x01, 0x00, 0xA3, 0x6C, 0x01, 0x00, 0x13, +/* 00006A00 */ 0x6D, 0x01, 0x00, 0x46, 0x6D, 0x01, 0x00, 0x6E, 0x6D, 0x01, 0x00, 0x78, 0x6D, 0x01, 0x00, 0x79, +/* 00006A10 */ 0x6D, 0x01, 0x00, 0xA1, 0x6D, 0x01, 0x00, 0xC4, 0x6D, 0x01, 0x00, 0xFB, 0x6D, 0x01, 0x00, 0x19, +/* 00006A20 */ 0x6E, 0x01, 0x00, 0x2A, 0x6E, 0x01, 0x00, 0x4D, 0x6E, 0x01, 0x00, 0x57, 0x6E, 0x01, 0x00, 0x5D, +/* 00006A30 */ 0x6E, 0x01, 0x00, 0x5E, 0x6E, 0x01, 0x00, 0x9E, 0x6E, 0x01, 0x00, 0xF1, 0x6E, 0x01, 0x00, 0x1D, +/* 00006A40 */ 0x6F, 0x01, 0x00, 0x6E, 0x6F, 0x01, 0x00, 0x99, 0x6F, 0x01, 0x00, 0xC2, 0x6F, 0x01, 0x00, 0xEE, +/* 00006A50 */ 0x6F, 0x01, 0x00, 0x00, 0x70, 0x01, 0x00, 0x60, 0x70, 0x01, 0x00, 0xB1, 0x70, 0x01, 0x00, 0xDB, +/* 00006A60 */ 0x70, 0x01, 0x00, 0x14, 0x71, 0x01, 0x00, 0x4E, 0x71, 0x01, 0x00, 0x5C, 0x71, 0x01, 0x00, 0xA7, +/* 00006A70 */ 0x71, 0x01, 0x00, 0xE9, 0x71, 0x01, 0x00, 0x66, 0x72, 0x01, 0x00, 0x99, 0x72, 0x01, 0x00, 0xC1, +/* 00006A80 */ 0x72, 0x01, 0x00, 0xCB, 0x72, 0x01, 0x00, 0xEA, 0x72, 0x01, 0x00, 0xF0, 0x72, 0x01, 0x00, 0xF1, +/* 00006A90 */ 0x72, 0x01, 0x00, 0x23, 0x73, 0x01, 0x00, 0x43, 0x73, 0x01, 0x00, 0x67, 0x73, 0x01, 0x00, 0x71, +/* 00006AA0 */ 0x73, 0x01, 0x00, 0x72, 0x73, 0x01, 0x00, 0xBD, 0x73, 0x01, 0x00, 0xD3, 0x73, 0x01, 0x00, 0xF1, +/* 00006AB0 */ 0x73, 0x01, 0x00, 0xFB, 0x73, 0x01, 0x00, 0xFC, 0x73, 0x01, 0x00, 0x71, 0x74, 0x01, 0x00, 0xC1, +/* 00006AC0 */ 0x74, 0x01, 0x00, 0x06, 0x75, 0x01, 0x00, 0x07, 0x75, 0x01, 0x00, 0x7A, 0x75, 0x01, 0x00, 0x93, +/* 00006AD0 */ 0x75, 0x01, 0x00, 0xB7, 0x75, 0x01, 0x00, 0xDB, 0x75, 0x01, 0x00, 0x33, 0x76, 0x01, 0x00, 0x76, +/* 00006AE0 */ 0x76, 0x01, 0x00, 0xFF, 0x76, 0x01, 0x00, 0x00, 0x77, 0x01, 0x00, 0x1B, 0x77, 0x01, 0x00, 0x21, +/* 00006AF0 */ 0x77, 0x01, 0x00, 0x22, 0x77, 0x01, 0x00, 0x7C, 0x77, 0x01, 0x00, 0xB2, 0x77, 0x01, 0x00, 0xD2, +/* 00006B00 */ 0x77, 0x01, 0x00, 0x2F, 0x78, 0x01, 0x00, 0x62, 0x78, 0x01, 0x00, 0x6C, 0x78, 0x01, 0x00, 0x6D, +/* 00006B10 */ 0x78, 0x01, 0x00, 0x84, 0x78, 0x01, 0x00, 0xD4, 0x78, 0x01, 0x00, 0x30, 0x79, 0x01, 0x00, 0x40, +/* 00006B20 */ 0x79, 0x01, 0x00, 0x4A, 0x79, 0x01, 0x00, 0x4B, 0x79, 0x01, 0x00, 0xDA, 0x79, 0x01, 0x00, 0x60, +/* 00006B30 */ 0x7A, 0x01, 0x00, 0xDB, 0x7A, 0x01, 0x00, 0x24, 0x7B, 0x01, 0x00, 0x5A, 0x7B, 0x01, 0x00, 0x5B, +/* 00006B40 */ 0x7B, 0x01, 0x00, 0xA7, 0x7B, 0x01, 0x00, 0xC6, 0x7B, 0x01, 0x00, 0xDD, 0x7B, 0x01, 0x00, 0x2E, +/* 00006B50 */ 0x7C, 0x01, 0x00, 0xA8, 0x7C, 0x01, 0x00, 0xCC, 0x7C, 0x01, 0x00, 0x27, 0x7D, 0x01, 0x00, 0xA3, +/* 00006B60 */ 0x7D, 0x01, 0x00, 0xB5, 0x7D, 0x01, 0x00, 0xC6, 0x7D, 0x01, 0x00, 0xE6, 0x7D, 0x01, 0x00, 0xF0, +/* 00006B70 */ 0x7D, 0x01, 0x00, 0xF1, 0x7D, 0x01, 0x00, 0x60, 0x7E, 0x01, 0x00, 0x8E, 0x7E, 0x01, 0x00, 0xC3, +/* 00006B80 */ 0x7E, 0x01, 0x00, 0xEC, 0x7E, 0x01, 0x00, 0x04, 0x7F, 0x01, 0x00, 0x3E, 0x7F, 0x01, 0x00, 0x68, +/* 00006B90 */ 0x7F, 0x01, 0x00, 0x8D, 0x7F, 0x01, 0x00, 0xA6, 0x7F, 0x01, 0x00, 0xCD, 0x7F, 0x01, 0x00, 0xDF, +/* 00006BA0 */ 0x7F, 0x01, 0x00, 0xED, 0x7F, 0x01, 0x00, 0xEE, 0x7F, 0x01, 0x00, 0x39, 0x80, 0x01, 0x00, 0x4A, +/* 00006BB0 */ 0x80, 0x01, 0x00, 0x6C, 0x80, 0x01, 0x00, 0x76, 0x80, 0x01, 0x00, 0x77, 0x80, 0x01, 0x00, 0x95, +/* 00006BC0 */ 0x80, 0x01, 0x00, 0xB3, 0x80, 0x01, 0x00, 0xD1, 0x80, 0x01, 0x00, 0x02, 0x81, 0x01, 0x00, 0x14, +/* 00006BD0 */ 0x81, 0x01, 0x00, 0x1A, 0x81, 0x01, 0x00, 0x1B, 0x81, 0x01, 0x00, 0x7B, 0x81, 0x01, 0x00, 0xD3, +/* 00006BE0 */ 0x81, 0x01, 0x00, 0x06, 0x82, 0x01, 0x00, 0x07, 0x82, 0x01, 0x00, 0x38, 0x82, 0x01, 0x00, 0x39, +/* 00006BF0 */ 0x82, 0x01, 0x00, 0x6D, 0x82, 0x01, 0x00, 0x98, 0x82, 0x01, 0x00, 0x01, 0x83, 0x01, 0x00, 0x32, +/* 00006C00 */ 0x83, 0x01, 0x00, 0x53, 0x83, 0x01, 0x00, 0x61, 0x83, 0x01, 0x00, 0x6B, 0x83, 0x01, 0x00, 0xC0, +/* 00006C10 */ 0x83, 0x01, 0x00, 0xC6, 0x83, 0x01, 0x00, 0xC7, 0x83, 0x01, 0x00, 0x0A, 0x84, 0x01, 0x00, 0x37, +/* 00006C20 */ 0x84, 0x01, 0x00, 0x65, 0x84, 0x01, 0x00, 0x8C, 0x84, 0x01, 0x00, 0xB8, 0x84, 0x01, 0x00, 0xC2, +/* 00006C30 */ 0x84, 0x01, 0x00, 0xC3, 0x84, 0x01, 0x00, 0xE5, 0x84, 0x01, 0x00, 0x0A, 0x85, 0x01, 0x00, 0x32, +/* 00006C40 */ 0x85, 0x01, 0x00, 0x40, 0x85, 0x01, 0x00, 0x41, 0x85, 0x01, 0x00, 0x6D, 0x85, 0x01, 0x00, 0xBA, +/* 00006C50 */ 0x85, 0x01, 0x00, 0xD3, 0x85, 0x01, 0x00, 0x11, 0x86, 0x01, 0x00, 0x45, 0x86, 0x01, 0x00, 0x5A, +/* 00006C60 */ 0x86, 0x01, 0x00, 0x89, 0x86, 0x01, 0x00, 0x97, 0x86, 0x01, 0x00, 0xA8, 0x86, 0x01, 0x00, 0xF9, +/* 00006C70 */ 0x86, 0x01, 0x00, 0x29, 0x87, 0x01, 0x00, 0x8F, 0x87, 0x01, 0x00, 0x99, 0x87, 0x01, 0x00, 0x9A, +/* 00006C80 */ 0x87, 0x01, 0x00, 0xC2, 0x87, 0x01, 0x00, 0xC9, 0x87, 0x01, 0x00, 0xCA, 0x87, 0x01, 0x00, 0xEC, +/* 00006C90 */ 0x87, 0x01, 0x00, 0x0A, 0x88, 0x01, 0x00, 0x2F, 0x88, 0x01, 0x00, 0x51, 0x88, 0x01, 0x00, 0x81, +/* 00006CA0 */ 0x88, 0x01, 0x00, 0x93, 0x88, 0x01, 0x00, 0xD3, 0x88, 0x01, 0x00, 0xE2, 0x88, 0x01, 0x00, 0xE3, +/* 00006CB0 */ 0x88, 0x01, 0x00, 0x08, 0x89, 0x01, 0x00, 0x48, 0x89, 0x01, 0x00, 0x57, 0x89, 0x01, 0x00, 0x58, +/* 00006CC0 */ 0x89, 0x01, 0x00, 0x7D, 0x89, 0x01, 0x00, 0xB7, 0x89, 0x01, 0x00, 0xC6, 0x89, 0x01, 0x00, 0xC7, +/* 00006CD0 */ 0x89, 0x01, 0x00, 0xF4, 0x89, 0x01, 0x00, 0x35, 0x8A, 0x01, 0x00, 0x44, 0x8A, 0x01, 0x00, 0x45, +/* 00006CE0 */ 0x8A, 0x01, 0x00, 0x6A, 0x8A, 0x01, 0x00, 0x8F, 0x8A, 0x01, 0x00, 0xAC, 0x8A, 0x01, 0x00, 0xE0, +/* 00006CF0 */ 0x8A, 0x01, 0x00, 0x1B, 0x8B, 0x01, 0x00, 0x2D, 0x8B, 0x01, 0x00, 0x49, 0x8B, 0x01, 0x00, 0x58, +/* 00006D00 */ 0x8B, 0x01, 0x00, 0x59, 0x8B, 0x01, 0x00, 0x84, 0x8B, 0x01, 0x00, 0xB0, 0x8B, 0x01, 0x00, 0xCC, +/* 00006D10 */ 0x8B, 0x01, 0x00, 0x1C, 0x8C, 0x01, 0x00, 0x41, 0x8C, 0x01, 0x00, 0x57, 0x8C, 0x01, 0x00, 0x88, +/* 00006D20 */ 0x8C, 0x01, 0x00, 0x9A, 0x8C, 0x01, 0x00, 0xA8, 0x8C, 0x01, 0x00, 0xB9, 0x8C, 0x01, 0x00, 0xC3, +/* 00006D30 */ 0x8C, 0x01, 0x00, 0xC4, 0x8C, 0x01, 0x00, 0xEB, 0x8C, 0x01, 0x00, 0x2F, 0x8D, 0x01, 0x00, 0x56, +/* 00006D40 */ 0x8D, 0x01, 0x00, 0x57, 0x8D, 0x01, 0x00, 0x7A, 0x8D, 0x01, 0x00, 0x9F, 0x8D, 0x01, 0x00, 0xD9, +/* 00006D50 */ 0x8D, 0x01, 0x00, 0xE7, 0x8D, 0x01, 0x00, 0xE8, 0x8D, 0x01, 0x00, 0x0C, 0x8E, 0x01, 0x00, 0x3E, +/* 00006D60 */ 0x8E, 0x01, 0x00, 0x4C, 0x8E, 0x01, 0x00, 0x4D, 0x8E, 0x01, 0x00, 0x71, 0x8E, 0x01, 0x00, 0xA3, +/* 00006D70 */ 0x8E, 0x01, 0x00, 0xB1, 0x8E, 0x01, 0x00, 0xB2, 0x8E, 0x01, 0x00, 0x19, 0x8F, 0x01, 0x00, 0xB4, +/* 00006D80 */ 0x8F, 0x01, 0x00, 0xC2, 0x8F, 0x01, 0x00, 0xC3, 0x8F, 0x01, 0x00, 0xDD, 0x8F, 0x01, 0x00, 0xE7, +/* 00006D90 */ 0x8F, 0x01, 0x00, 0xE8, 0x8F, 0x01, 0x00, 0x01, 0x90, 0x01, 0x00, 0x07, 0x90, 0x01, 0x00, 0x08, +/* 00006DA0 */ 0x90, 0x01, 0x00, 0x56, 0x90, 0x01, 0x00, 0x82, 0x90, 0x01, 0x00, 0x83, 0x90, 0x01, 0x00, 0xB2, +/* 00006DB0 */ 0x90, 0x01, 0x00, 0xF2, 0x90, 0x01, 0x00, 0xF3, 0x90, 0x01, 0x00, 0x54, 0x91, 0x01, 0x00, 0xD6, +/* 00006DC0 */ 0x91, 0x01, 0x00, 0xE4, 0x91, 0x01, 0x00, 0xE5, 0x91, 0x01, 0x00, 0x14, 0x92, 0x01, 0x00, 0x25, +/* 00006DD0 */ 0x92, 0x01, 0x00, 0x42, 0x92, 0x01, 0x00, 0x4C, 0x92, 0x01, 0x00, 0x52, 0x92, 0x01, 0x00, 0x53, +/* 00006DE0 */ 0x92, 0x01, 0x00, 0x6D, 0x92, 0x01, 0x00, 0x97, 0x92, 0x01, 0x00, 0xC1, 0x92, 0x01, 0x00, 0xC7, +/* 00006DF0 */ 0x92, 0x01, 0x00, 0xC8, 0x92, 0x01, 0x00, 0x00, 0x93, 0x01, 0x00, 0x4C, 0x93, 0x01, 0x00, 0xAA, +/* 00006E00 */ 0x93, 0x01, 0x00, 0xD0, 0x93, 0x01, 0x00, 0x15, 0x94, 0x01, 0x00, 0x79, 0x94, 0x01, 0x00, 0xF9, +/* 00006E10 */ 0x94, 0x01, 0x00, 0xFA, 0x94, 0x01, 0x00, 0x6C, 0x95, 0x01, 0x00, 0x9D, 0x95, 0x01, 0x00, 0xEC, +/* 00006E20 */ 0x95, 0x01, 0x00, 0x3E, 0x96, 0x01, 0x00, 0x92, 0x96, 0x01, 0x00, 0xCA, 0x96, 0x01, 0x00, 0x1C, +/* 00006E30 */ 0x97, 0x01, 0x00, 0x6E, 0x97, 0x01, 0x00, 0xC3, 0x97, 0x01, 0x00, 0x2F, 0x98, 0x01, 0x00, 0x85, +/* 00006E40 */ 0x98, 0x01, 0x00, 0x86, 0x98, 0x01, 0x00, 0xA5, 0x98, 0x01, 0x00, 0xC4, 0x98, 0x01, 0x00, 0xF6, +/* 00006E50 */ 0x98, 0x01, 0x00, 0xF7, 0x98, 0x01, 0x00, 0x6E, 0x99, 0x01, 0x00, 0xDB, 0x99, 0x01, 0x00, 0x2E, +/* 00006E60 */ 0x9A, 0x01, 0x00, 0x71, 0x9A, 0x01, 0x00, 0x72, 0x9A, 0x01, 0x00, 0xEF, 0x9A, 0x01, 0x00, 0x83, +/* 00006E70 */ 0x9B, 0x01, 0x00, 0x06, 0x9C, 0x01, 0x00, 0x89, 0x9C, 0x01, 0x00, 0xFC, 0x9C, 0x01, 0x00, 0xFD, +/* 00006E80 */ 0x9C, 0x01, 0x00, 0x67, 0x9D, 0x01, 0x00, 0xE0, 0x9D, 0x01, 0x00, 0xE1, 0x9D, 0x01, 0x00, 0x44, +/* 00006E90 */ 0x9E, 0x01, 0x00, 0xD3, 0x9E, 0x01, 0x00, 0x7C, 0x9F, 0x01, 0x00, 0x10, 0xA0, 0x01, 0x00, 0xA7, +/* 00006EA0 */ 0xA0, 0x01, 0x00, 0x4B, 0xA1, 0x01, 0x00, 0x5F, 0xA1, 0x01, 0x00, 0x60, 0xA1, 0x01, 0x00, 0xE1, +/* 00006EB0 */ 0xA1, 0x01, 0x00, 0x4D, 0xA2, 0x01, 0x00, 0xBD, 0xA2, 0x01, 0x00, 0x2D, 0xA3, 0x01, 0x00, 0x9F, +/* 00006EC0 */ 0xA3, 0x01, 0x00, 0x13, 0xA4, 0x01, 0x00, 0x87, 0xA4, 0x01, 0x00, 0xD1, 0xA4, 0x01, 0x00, 0xD2, +/* 00006ED0 */ 0xA4, 0x01, 0x00, 0x3F, 0xA5, 0x01, 0x00, 0x40, 0xA5, 0x01, 0x00, 0xA6, 0xA5, 0x01, 0x00, 0x31, +/* 00006EE0 */ 0xA6, 0x01, 0x00, 0xA7, 0xA6, 0x01, 0x00, 0xAD, 0xA6, 0x01, 0x00, 0xAE, 0xA6, 0x01, 0x00, 0xDC, +/* 00006EF0 */ 0xA6, 0x01, 0x00, 0x04, 0xA7, 0x01, 0x00, 0x05, 0xA7, 0x01, 0x00, 0x26, 0xA7, 0x01, 0x00, 0x4E, +/* 00006F00 */ 0xA7, 0x01, 0x00, 0x58, 0xA7, 0x01, 0x00, 0x59, 0xA7, 0x01, 0x00, 0xA5, 0xA7, 0x01, 0x00, 0xAB, +/* 00006F10 */ 0xA7, 0x01, 0x00, 0xAC, 0xA7, 0x01, 0x00, 0x23, 0xA8, 0x01, 0x00, 0x52, 0xA8, 0x01, 0x00, 0x80, +/* 00006F20 */ 0xA8, 0x01, 0x00, 0x97, 0xA8, 0x01, 0x00, 0xA1, 0xA8, 0x01, 0x00, 0xA2, 0xA8, 0x01, 0x00, 0xCD, +/* 00006F30 */ 0xA8, 0x01, 0x00, 0xEE, 0xA8, 0x01, 0x00, 0xF8, 0xA8, 0x01, 0x00, 0xF9, 0xA8, 0x01, 0x00, 0x27, +/* 00006F40 */ 0xA9, 0x01, 0x00, 0x61, 0xA9, 0x01, 0x00, 0x62, 0xA9, 0x01, 0x00, 0x97, 0xA9, 0x01, 0x00, 0xAE, +/* 00006F50 */ 0xA9, 0x01, 0x00, 0xC1, 0xA9, 0x01, 0x00, 0xC2, 0xA9, 0x01, 0x00, 0x00, 0xAA, 0x01, 0x00, 0x61, +/* 00006F60 */ 0xAA, 0x01, 0x00, 0x9D, 0xAA, 0x01, 0x00, 0xAB, 0xAA, 0x01, 0x00, 0xAC, 0xAA, 0x01, 0x00, 0xDD, +/* 00006F70 */ 0xAA, 0x01, 0x00, 0xDE, 0xAA, 0x01, 0x00, 0x0F, 0xAB, 0x01, 0x00, 0x4F, 0xAB, 0x01, 0x00, 0x5D, +/* 00006F80 */ 0xAB, 0x01, 0x00, 0x5E, 0xAB, 0x01, 0x00, 0x94, 0xAB, 0x01, 0x00, 0x95, 0xAB, 0x01, 0x00, 0xF6, +/* 00006F90 */ 0xAB, 0x01, 0x00, 0x67, 0xAC, 0x01, 0x00, 0x75, 0xAC, 0x01, 0x00, 0x81, 0xAC, 0x01, 0x00, 0x82, +/* 00006FA0 */ 0xAC, 0x01, 0x00, 0x97, 0xAC, 0x01, 0x00, 0x9D, 0xAC, 0x01, 0x00, 0x9E, 0xAC, 0x01, 0x00, 0xED, +/* 00006FB0 */ 0xAC, 0x01, 0x00, 0x06, 0xAD, 0x01, 0x00, 0x1D, 0xAD, 0x01, 0x00, 0x72, 0xAD, 0x01, 0x00, 0x84, +/* 00006FC0 */ 0xAD, 0x01, 0x00, 0xE2, 0xAD, 0x01, 0x00, 0x09, 0xAE, 0x01, 0x00, 0x96, 0xAE, 0x01, 0x00, 0xBD, +/* 00006FD0 */ 0xAE, 0x01, 0x00, 0xCF, 0xAE, 0x01, 0x00, 0xEA, 0xAE, 0x01, 0x00, 0x11, 0xAF, 0x01, 0x00, 0x73, +/* 00006FE0 */ 0xAF, 0x01, 0x00, 0x81, 0xAF, 0x01, 0x00, 0x8D, 0xAF, 0x01, 0x00, 0xF5, 0xAF, 0x01, 0x00, 0x0C, +/* 00006FF0 */ 0xB0, 0x01, 0x00, 0x12, 0xB0, 0x01, 0x00, 0x13, 0xB0, 0x01, 0x00, 0x69, 0xB0, 0x01, 0x00, 0x9C, +/* 00007000 */ 0xB0, 0x01, 0x00, 0xD5, 0xB0, 0x01, 0x00, 0xDF, 0xB0, 0x01, 0x00, 0xE0, 0xB0, 0x01, 0x00, 0x18, +/* 00007010 */ 0xB1, 0x01, 0x00, 0x53, 0xB1, 0x01, 0x00, 0x8C, 0xB1, 0x01, 0x00, 0x96, 0xB1, 0x01, 0x00, 0x97, +/* 00007020 */ 0xB1, 0x01, 0x00, 0xCC, 0xB1, 0x01, 0x00, 0xD2, 0xB1, 0x01, 0x00, 0xD3, 0xB1, 0x01, 0x00, 0x24, +/* 00007030 */ 0xB2, 0x01, 0x00, 0x57, 0xB2, 0x01, 0x00, 0x90, 0xB2, 0x01, 0x00, 0x9A, 0xB2, 0x01, 0x00, 0x9B, +/* 00007040 */ 0xB2, 0x01, 0x00, 0xD3, 0xB2, 0x01, 0x00, 0x0E, 0xB3, 0x01, 0x00, 0x47, 0xB3, 0x01, 0x00, 0x51, +/* 00007050 */ 0xB3, 0x01, 0x00, 0x52, 0xB3, 0x01, 0x00, 0x82, 0xB3, 0x01, 0x00, 0x88, 0xB3, 0x01, 0x00, 0x89, +/* 00007060 */ 0xB3, 0x01, 0x00, 0xB2, 0xB3, 0x01, 0x00, 0xED, 0xB3, 0x01, 0x00, 0x02, 0xB4, 0x01, 0x00, 0x35, +/* 00007070 */ 0xB4, 0x01, 0x00, 0x36, 0xB4, 0x01, 0x00, 0x64, 0xB4, 0x01, 0x00, 0x91, 0xB4, 0x01, 0x00, 0x92, +/* 00007080 */ 0xB4, 0x01, 0x00, 0xC4, 0xB4, 0x01, 0x00, 0xFA, 0xB4, 0x01, 0x00, 0xFB, 0xB4, 0x01, 0x00, 0x41, +/* 00007090 */ 0xB5, 0x01, 0x00, 0xB8, 0xB5, 0x01, 0x00, 0xCA, 0xB5, 0x01, 0x00, 0xD8, 0xB5, 0x01, 0x00, 0xE2, +/* 000070A0 */ 0xB5, 0x01, 0x00, 0xE3, 0xB5, 0x01, 0x00, 0x2B, 0xB6, 0x01, 0x00, 0xAD, 0xB6, 0x01, 0x00, 0xBE, +/* 000070B0 */ 0xB6, 0x01, 0x00, 0x20, 0xB7, 0x01, 0x00, 0x2A, 0xB7, 0x01, 0x00, 0x31, 0xB7, 0x01, 0x00, 0x32, +/* 000070C0 */ 0xB7, 0x01, 0x00, 0x6E, 0xB7, 0x01, 0x00, 0xCF, 0xB7, 0x01, 0x00, 0xD0, 0xB7, 0x01, 0x00, 0x43, +/* 000070D0 */ 0xB8, 0x01, 0x00, 0x93, 0xB8, 0x01, 0x00, 0xE4, 0xB8, 0x01, 0x00, 0x67, 0xB9, 0x01, 0x00, 0xBE, +/* 000070E0 */ 0xB9, 0x01, 0x00, 0x26, 0xBA, 0x01, 0x00, 0x4C, 0xBA, 0x01, 0x00, 0x4D, 0xBA, 0x01, 0x00, 0xA6, +/* 000070F0 */ 0xBA, 0x01, 0x00, 0x31, 0xBB, 0x01, 0x00, 0x8C, 0xBB, 0x01, 0x00, 0xF8, 0xBB, 0x01, 0x00, 0x1E, +/* 00007100 */ 0xBC, 0x01, 0x00, 0x1F, 0xBC, 0x01, 0x00, 0x7C, 0xBC, 0x01, 0x00, 0x0B, 0xBD, 0x01, 0x00, 0x68, +/* 00007110 */ 0xBD, 0x01, 0x00, 0xD6, 0xBD, 0x01, 0x00, 0xFC, 0xBD, 0x01, 0x00, 0xFD, 0xBD, 0x01, 0x00, 0x3E, +/* 00007120 */ 0xBE, 0x01, 0x00, 0xB1, 0xBE, 0x01, 0x00, 0xEB, 0xBE, 0x01, 0x00, 0x46, 0xBF, 0x01, 0x00, 0x6C, +/* 00007130 */ 0xBF, 0x01, 0x00, 0x6D, 0xBF, 0x01, 0x00, 0xC6, 0xBF, 0x01, 0x00, 0x20, 0xC0, 0x01, 0x00, 0x6F, +/* 00007140 */ 0xC0, 0x01, 0x00, 0xEB, 0xC0, 0x01, 0x00, 0x4B, 0xC1, 0x01, 0x00, 0xAF, 0xC1, 0x01, 0x00, 0x15, +/* 00007150 */ 0xC2, 0x01, 0x00, 0x6E, 0xC2, 0x01, 0x00, 0x6F, 0xC2, 0x01, 0x00, 0xD6, 0xC2, 0x01, 0x00, 0x1B, +/* 00007160 */ 0xC3, 0x01, 0x00, 0x5E, 0xC3, 0x01, 0x00, 0x97, 0xC3, 0x01, 0x00, 0xD2, 0xC3, 0x01, 0x00, 0x0D, +/* 00007170 */ 0xC4, 0x01, 0x00, 0x4B, 0xC4, 0x01, 0x00, 0x88, 0xC4, 0x01, 0x00, 0xBD, 0xC4, 0x01, 0x00, 0x1E, +/* 00007180 */ 0xC5, 0x01, 0x00, 0x69, 0xC5, 0x01, 0x00, 0xB4, 0xC5, 0x01, 0x00, 0xFF, 0xC5, 0x01, 0x00, 0x49, +/* 00007190 */ 0xC6, 0x01, 0x00, 0x4A, 0xC6, 0x01, 0x00, 0xC9, 0xC6, 0x01, 0x00, 0x64, 0xC7, 0x01, 0x00, 0x84, +/* 000071A0 */ 0xC7, 0x01, 0x00, 0xA4, 0xC7, 0x01, 0x00, 0xC2, 0xC7, 0x01, 0x00, 0xD0, 0xC7, 0x01, 0x00, 0xD1, +/* 000071B0 */ 0xC7, 0x01, 0x00, 0x34, 0xC8, 0x01, 0x00, 0xAF, 0xC8, 0x01, 0x00, 0xEF, 0xC8, 0x01, 0x00, 0x20, +/* 000071C0 */ 0xC9, 0x01, 0x00, 0x9F, 0xC9, 0x01, 0x00, 0xF5, 0xC9, 0x01, 0x00, 0x39, 0xCA, 0x01, 0x00, 0x3A, +/* 000071D0 */ 0xCA, 0x01, 0x00, 0xB9, 0xCA, 0x01, 0x00, 0x01, 0xCB, 0x01, 0x00, 0x2A, 0xCB, 0x01, 0x00, 0x6F, +/* 000071E0 */ 0xCB, 0x01, 0x00, 0x81, 0xCB, 0x01, 0x00, 0x91, 0xCB, 0x01, 0x00, 0x92, 0xCB, 0x01, 0x00, 0xCA, +/* 000071F0 */ 0xCB, 0x01, 0x00, 0xD6, 0xCB, 0x01, 0x00, 0xEF, 0xCB, 0x01, 0x00, 0xF9, 0xCB, 0x01, 0x00, 0xFA, +/* 00007200 */ 0xCB, 0x01, 0x00, 0x4B, 0xCC, 0x01, 0x00, 0x79, 0xCC, 0x01, 0x00, 0xA4, 0xCC, 0x01, 0x00, 0xD0, +/* 00007210 */ 0xCC, 0x01, 0x00, 0x0B, 0xCD, 0x01, 0x00, 0x35, 0xCD, 0x01, 0x00, 0x3F, 0xCD, 0x01, 0x00, 0x40, +/* 00007220 */ 0xCD, 0x01, 0x00, 0x60, 0xCD, 0x01, 0x00, 0x83, 0xCD, 0x01, 0x00, 0xA5, 0xCD, 0x01, 0x00, 0xF9, +/* 00007230 */ 0xCD, 0x01, 0x00, 0x22, 0xCE, 0x01, 0x00, 0x8C, 0xCE, 0x01, 0x00, 0xA5, 0xCE, 0x01, 0x00, 0xF7, +/* 00007240 */ 0xCE, 0x01, 0x00, 0x40, 0xCF, 0x01, 0x00, 0x66, 0xCF, 0x01, 0x00, 0xC8, 0xCF, 0x01, 0x00, 0xD6, +/* 00007250 */ 0xCF, 0x01, 0x00, 0xE7, 0xCF, 0x01, 0x00, 0x30, 0xD0, 0x01, 0x00, 0x8C, 0xD0, 0x01, 0x00, 0xAB, +/* 00007260 */ 0xD0, 0x01, 0x00, 0xCD, 0xD0, 0x01, 0x00, 0xD7, 0xD0, 0x01, 0x00, 0xD8, 0xD0, 0x01, 0x00, 0xFF, +/* 00007270 */ 0xD0, 0x01, 0x00, 0x2B, 0xD1, 0x01, 0x00, 0x55, 0xD1, 0x01, 0x00, 0x5F, 0xD1, 0x01, 0x00, 0x60, +/* 00007280 */ 0xD1, 0x01, 0x00, 0xBC, 0xD1, 0x01, 0x00, 0x11, 0xD2, 0x01, 0x00, 0x37, 0xD2, 0x01, 0x00, 0x75, +/* 00007290 */ 0xD2, 0x01, 0x00, 0x8A, 0xD2, 0x01, 0x00, 0xCA, 0xD2, 0x01, 0x00, 0xD8, 0xD2, 0x01, 0x00, 0xE3, +/* 000072A0 */ 0xD2, 0x01, 0x00, 0xE4, 0xD2, 0x01, 0x00, 0x3A, 0xD3, 0x01, 0x00, 0x6D, 0xD3, 0x01, 0x00, 0xBA, +/* 000072B0 */ 0xD3, 0x01, 0x00, 0x0E, 0xD4, 0x01, 0x00, 0x38, 0xD4, 0x01, 0x00, 0x42, 0xD4, 0x01, 0x00, 0x43, +/* 000072C0 */ 0xD4, 0x01, 0x00, 0x85, 0xD4, 0x01, 0x00, 0xB2, 0xD4, 0x01, 0x00, 0x0C, 0xD5, 0x01, 0x00, 0x1D, +/* 000072D0 */ 0xD5, 0x01, 0x00, 0x71, 0xD5, 0x01, 0x00, 0x7B, 0xD5, 0x01, 0x00, 0x7C, 0xD5, 0x01, 0x00, 0xA2, +/* 000072E0 */ 0xD5, 0x01, 0x00, 0xA9, 0xD5, 0x01, 0x00, 0xAA, 0xD5, 0x01, 0x00, 0xDF, 0xD5, 0x01, 0x00, 0x01, +/* 000072F0 */ 0xD6, 0x01, 0x00, 0x02, 0xD6, 0x01, 0x00, 0x3E, 0xD6, 0x01, 0x00, 0x3F, 0xD6, 0x01, 0x00, 0x88, +/* 00007300 */ 0xD6, 0x01, 0x00, 0xBB, 0xD6, 0x01, 0x00, 0xEB, 0xD6, 0x01, 0x00, 0xFD, 0xD6, 0x01, 0x00, 0xFE, +/* 00007310 */ 0xD6, 0x01, 0x00, 0x8D, 0xD7, 0x01, 0x00, 0xE3, 0xD7, 0x01, 0x00, 0xF5, 0xD7, 0x01, 0x00, 0xF6, +/* 00007320 */ 0xD7, 0x01, 0x00, 0x2F, 0xD8, 0x01, 0x00, 0x30, 0xD8, 0x01, 0x00, 0x53, 0xD8, 0x01, 0x00, 0x89, +/* 00007330 */ 0xD8, 0x01, 0x00, 0xBF, 0xD8, 0x01, 0x00, 0xD8, 0xD8, 0x01, 0x00, 0x12, 0xD9, 0x01, 0x00, 0x24, +/* 00007340 */ 0xD9, 0x01, 0x00, 0x25, 0xD9, 0x01, 0x00, 0x96, 0xD9, 0x01, 0x00, 0xF5, 0xD9, 0x01, 0x00, 0x76, +/* 00007350 */ 0xDA, 0x01, 0x00, 0xE4, 0xDA, 0x01, 0x00, 0x57, 0xDB, 0x01, 0x00, 0xB9, 0xDB, 0x01, 0x00, 0xBA, +/* 00007360 */ 0xDB, 0x01, 0x00, 0xF2, 0xDB, 0x01, 0x00, 0x33, 0xDC, 0x01, 0x00, 0xA1, 0xDC, 0x01, 0x00, 0xA2, +/* 00007370 */ 0xDC, 0x01, 0x00, 0xCD, 0xDC, 0x01, 0x00, 0x36, 0xDD, 0x01, 0x00, 0x7B, 0xDD, 0x01, 0x00, 0x7C, +/* 00007380 */ 0xDD, 0x01, 0x00, 0xAE, 0xDD, 0x01, 0x00, 0x19, 0xDE, 0x01, 0x00, 0x9B, 0xDE, 0x01, 0x00, 0xC7, +/* 00007390 */ 0xDE, 0x01, 0x00, 0x13, 0xDF, 0x01, 0x00, 0x5A, 0xDF, 0x01, 0x00, 0xF6, 0xDF, 0x01, 0x00, 0x42, +/* 000073A0 */ 0xE0, 0x01, 0x00, 0x79, 0xE0, 0x01, 0x00, 0xFD, 0xE0, 0x01, 0x00, 0x22, 0xE1, 0x01, 0x00, 0x52, +/* 000073B0 */ 0xE1, 0x01, 0x00, 0x70, 0xE1, 0x01, 0x00, 0x13, 0xE2, 0x01, 0x00, 0x72, 0xE2, 0x01, 0x00, 0xA1, +/* 000073C0 */ 0xE2, 0x01, 0x00, 0xBB, 0xE2, 0x01, 0x00, 0xD3, 0xE2, 0x01, 0x00, 0xE5, 0xE2, 0x01, 0x00, 0x14, +/* 000073D0 */ 0xE3, 0x01, 0x00, 0x83, 0xE3, 0x01, 0x00, 0xB2, 0xE3, 0x01, 0x00, 0x40, 0xE4, 0x01, 0x00, 0x77, +/* 000073E0 */ 0xE4, 0x01, 0x00, 0xE1, 0xE4, 0x01, 0x00, 0xFB, 0xE4, 0x01, 0x00, 0x11, 0xE5, 0x01, 0x00, 0x2C, +/* 000073F0 */ 0xE5, 0x01, 0x00, 0x5B, 0xE5, 0x01, 0x00, 0x71, 0xE5, 0x01, 0x00, 0x83, 0xE5, 0x01, 0x00, 0x84, +/* 00007400 */ 0xE5, 0x01, 0x00, 0xB3, 0xE5, 0x01, 0x00, 0xE2, 0xE5, 0x01, 0x00, 0xFC, 0xE5, 0x01, 0x00, 0x82, +/* 00007410 */ 0xE6, 0x01, 0x00, 0xA4, 0xE6, 0x01, 0x00, 0xD2, 0xE6, 0x01, 0x00, 0x00, 0xE7, 0x01, 0x00, 0x01, +/* 00007420 */ 0xE7, 0x01, 0x00, 0x72, 0xE7, 0x01, 0x00, 0xFB, 0xE7, 0x01, 0x00, 0x64, 0xE8, 0x01, 0x00, 0xA3, +/* 00007430 */ 0xE8, 0x01, 0x00, 0xB9, 0xE8, 0x01, 0x00, 0xBA, 0xE8, 0x01, 0x00, 0xDF, 0xE8, 0x01, 0x00, 0x0C, +/* 00007440 */ 0xE9, 0x01, 0x00, 0x39, 0xE9, 0x01, 0x00, 0x66, 0xE9, 0x01, 0x00, 0x83, 0xE9, 0x01, 0x00, 0xB0, +/* 00007450 */ 0xE9, 0x01, 0x00, 0xC6, 0xE9, 0x01, 0x00, 0xD8, 0xE9, 0x01, 0x00, 0xD9, 0xE9, 0x01, 0x00, 0x0A, +/* 00007460 */ 0xEA, 0x01, 0x00, 0x37, 0xEA, 0x01, 0x00, 0x49, 0xEA, 0x01, 0x00, 0x4A, 0xEA, 0x01, 0x00, 0x77, +/* 00007470 */ 0xEA, 0x01, 0x00, 0x9C, 0xEA, 0x01, 0x00, 0xAE, 0xEA, 0x01, 0x00, 0xAF, 0xEA, 0x01, 0x00, 0xE0, +/* 00007480 */ 0xEA, 0x01, 0x00, 0x0E, 0xEB, 0x01, 0x00, 0x5B, 0xEB, 0x01, 0x00, 0xA3, 0xEB, 0x01, 0x00, 0xCD, +/* 00007490 */ 0xEB, 0x01, 0x00, 0x03, 0xEC, 0x01, 0x00, 0x45, 0xEC, 0x01, 0x00, 0x77, 0xEC, 0x01, 0x00, 0xA5, +/* 000074A0 */ 0xEC, 0x01, 0x00, 0xD7, 0xEC, 0x01, 0x00, 0x0E, 0xED, 0x01, 0x00, 0x1C, 0xED, 0x01, 0x00, 0x1D, +/* 000074B0 */ 0xED, 0x01, 0x00, 0x8C, 0xED, 0x01, 0x00, 0xB5, 0xED, 0x01, 0x00, 0xF0, 0xED, 0x01, 0x00, 0x4A, +/* 000074C0 */ 0xEE, 0x01, 0x00, 0x5C, 0xEE, 0x01, 0x00, 0x86, 0xEE, 0x01, 0x00, 0xB6, 0xEE, 0x01, 0x00, 0xC8, +/* 000074D0 */ 0xEE, 0x01, 0x00, 0x6C, 0xEF, 0x01, 0x00, 0x98, 0xEF, 0x01, 0x00, 0xC1, 0xEF, 0x01, 0x00, 0xFB, +/* 000074E0 */ 0xEF, 0x01, 0x00, 0x48, 0xF0, 0x01, 0x00, 0x7E, 0xF0, 0x01, 0x00, 0x9B, 0xF0, 0x01, 0x00, 0xB5, +/* 000074F0 */ 0xF0, 0x01, 0x00, 0xE9, 0xF0, 0x01, 0x00, 0x36, 0xF1, 0x01, 0x00, 0x6B, 0xF1, 0x01, 0x00, 0x96, +/* 00007500 */ 0xF1, 0x01, 0x00, 0xDE, 0xF1, 0x01, 0x00, 0xF2, 0xF1, 0x01, 0x00, 0x33, 0xF2, 0x01, 0x00, 0x34, +/* 00007510 */ 0xF2, 0x01, 0x00, 0x5B, 0xF2, 0x01, 0x00, 0x5C, 0xF2, 0x01, 0x00, 0xAA, 0xF2, 0x01, 0x00, 0xE9, +/* 00007520 */ 0xF2, 0x01, 0x00, 0x28, 0xF3, 0x01, 0x00, 0x3E, 0xF3, 0x01, 0x00, 0x3F, 0xF3, 0x01, 0x00, 0x76, +/* 00007530 */ 0xF3, 0x01, 0x00, 0xAA, 0xF3, 0x01, 0x00, 0xF3, 0xF3, 0x01, 0x00, 0x09, 0xF4, 0x01, 0x00, 0x0A, +/* 00007540 */ 0xF4, 0x01, 0x00, 0x45, 0xF4, 0x01, 0x00, 0x8B, 0xF4, 0x01, 0x00, 0x8C, 0xF4, 0x01, 0x00, 0xC2, +/* 00007550 */ 0xF4, 0x01, 0x00, 0x01, 0xF5, 0x01, 0x00, 0x46, 0xF5, 0x01, 0x00, 0x5C, 0xF5, 0x01, 0x00, 0x5D, +/* 00007560 */ 0xF5, 0x01, 0x00, 0xA5, 0xF5, 0x01, 0x00, 0xA6, 0xF5, 0x01, 0x00, 0xD3, 0xF5, 0x01, 0x00, 0x3B, +/* 00007570 */ 0xF6, 0x01, 0x00, 0x78, 0xF6, 0x01, 0x00, 0x98, 0xF6, 0x01, 0x00, 0xAA, 0xF6, 0x01, 0x00, 0xE8, +/* 00007580 */ 0xF6, 0x01, 0x00, 0xE9, 0xF6, 0x01, 0x00, 0x12, 0xF7, 0x01, 0x00, 0x46, 0xF7, 0x01, 0x00, 0xA8, +/* 00007590 */ 0xF7, 0x01, 0x00, 0xBE, 0xF7, 0x01, 0x00, 0xBF, 0xF7, 0x01, 0x00, 0x06, 0xF8, 0x01, 0x00, 0x63, +/* 000075A0 */ 0xF8, 0x01, 0x00, 0xC5, 0xF8, 0x01, 0x00, 0xDB, 0xF8, 0x01, 0x00, 0xDC, 0xF8, 0x01, 0x00, 0xFF, +/* 000075B0 */ 0xF8, 0x01, 0x00, 0x22, 0xF9, 0x01, 0x00, 0x23, 0xF9, 0x01, 0x00, 0x5D, 0xF9, 0x01, 0x00, 0x78, +/* 000075C0 */ 0xF9, 0x01, 0x00, 0x93, 0xF9, 0x01, 0x00, 0xCC, 0xF9, 0x01, 0x00, 0x1E, 0xFA, 0x01, 0x00, 0x58, +/* 000075D0 */ 0xFA, 0x01, 0x00, 0x88, 0xFA, 0x01, 0x00, 0xD5, 0xFA, 0x01, 0x00, 0xED, 0xFA, 0x01, 0x00, 0xFF, +/* 000075E0 */ 0xFA, 0x01, 0x00, 0x4E, 0xFB, 0x01, 0x00, 0x4F, 0xFB, 0x01, 0x00, 0xE1, 0xFB, 0x01, 0x00, 0xE2, +/* 000075F0 */ 0xFB, 0x01, 0x00, 0x73, 0xFC, 0x01, 0x00, 0xB7, 0xFC, 0x01, 0x00, 0xB8, 0xFC, 0x01, 0x00, 0x4D, +/* 00007600 */ 0xFD, 0x01, 0x00, 0x4E, 0xFD, 0x01, 0x00, 0x9C, 0xFD, 0x01, 0x00, 0xD4, 0xFD, 0x01, 0x00, 0x0C, +/* 00007610 */ 0xFE, 0x01, 0x00, 0x7A, 0xFE, 0x01, 0x00, 0x94, 0xFE, 0x01, 0x00, 0xDF, 0xFE, 0x01, 0x00, 0x40, +/* 00007620 */ 0xFF, 0x01, 0x00, 0xAE, 0xFF, 0x01, 0x00, 0xC8, 0xFF, 0x01, 0x00, 0xC9, 0xFF, 0x01, 0x00, 0xEA, +/* 00007630 */ 0xFF, 0x01, 0x00, 0x25, 0x00, 0x02, 0x00, 0x5E, 0x00, 0x02, 0x00, 0xA3, 0x00, 0x02, 0x00, 0xF4, +/* 00007640 */ 0x00, 0x02, 0x00, 0x4F, 0x01, 0x02, 0x00, 0xE4, 0x01, 0x02, 0x00, 0x79, 0x02, 0x02, 0x00, 0x93, +/* 00007650 */ 0x02, 0x02, 0x00, 0xE0, 0x02, 0x02, 0x00, 0xF4, 0x02, 0x02, 0x00, 0xF5, 0x02, 0x02, 0x00, 0x3B, +/* 00007660 */ 0x03, 0x02, 0x00, 0x83, 0x03, 0x02, 0x00, 0xBB, 0x03, 0x02, 0x00, 0x21, 0x04, 0x02, 0x00, 0x3B, +/* 00007670 */ 0x04, 0x02, 0x00, 0x3C, 0x04, 0x02, 0x00, 0x87, 0x04, 0x02, 0x00, 0xE8, 0x04, 0x02, 0x00, 0x4E, +/* 00007680 */ 0x05, 0x02, 0x00, 0x68, 0x05, 0x02, 0x00, 0x69, 0x05, 0x02, 0x00, 0xA5, 0x05, 0x02, 0x00, 0xE3, +/* 00007690 */ 0x05, 0x02, 0x00, 0xF7, 0x05, 0x02, 0x00, 0xF8, 0x05, 0x02, 0x00, 0x19, 0x06, 0x02, 0x00, 0x27, +/* 000076A0 */ 0x06, 0x02, 0x00, 0x31, 0x06, 0x02, 0x00, 0x7C, 0x06, 0x02, 0x00, 0x96, 0x06, 0x02, 0x00, 0xA0, +/* 000076B0 */ 0x06, 0x02, 0x00, 0xA1, 0x06, 0x02, 0x00, 0xDB, 0x06, 0x02, 0x00, 0x01, 0x07, 0x02, 0x00, 0x3D, +/* 000076C0 */ 0x07, 0x02, 0x00, 0x8E, 0x07, 0x02, 0x00, 0xC5, 0x07, 0x02, 0x00, 0xF5, 0x07, 0x02, 0x00, 0x07, +/* 000076D0 */ 0x08, 0x02, 0x00, 0x08, 0x08, 0x02, 0x00, 0x9F, 0x08, 0x02, 0x00, 0xFD, 0x08, 0x02, 0x00, 0x0F, +/* 000076E0 */ 0x09, 0x02, 0x00, 0x10, 0x09, 0x02, 0x00, 0x4D, 0x09, 0x02, 0x00, 0x4E, 0x09, 0x02, 0x00, 0x71, +/* 000076F0 */ 0x09, 0x02, 0x00, 0xA7, 0x09, 0x02, 0x00, 0xDD, 0x09, 0x02, 0x00, 0xF6, 0x09, 0x02, 0x00, 0x30, +/* 00007700 */ 0x0A, 0x02, 0x00, 0x42, 0x0A, 0x02, 0x00, 0x43, 0x0A, 0x02, 0x00, 0xB4, 0x0A, 0x02, 0x00, 0x26, +/* 00007710 */ 0x0B, 0x02, 0x00, 0x27, 0x0B, 0x02, 0x00, 0x6F, 0x0B, 0x02, 0x00, 0x70, 0x0B, 0x02, 0x00, 0xCF, +/* 00007720 */ 0x0B, 0x02, 0x00, 0x4C, 0x0C, 0x02, 0x00, 0x7C, 0x0C, 0x02, 0x00, 0x7D, 0x0C, 0x02, 0x00, 0xE4, +/* 00007730 */ 0x0C, 0x02, 0x00, 0x1B, 0x0D, 0x02, 0x00, 0x52, 0x0D, 0x02, 0x00, 0x90, 0x0D, 0x02, 0x00, 0x91, +/* 00007740 */ 0x0D, 0x02, 0x00, 0xE2, 0x0D, 0x02, 0x00, 0x33, 0x0E, 0x02, 0x00, 0x34, 0x0E, 0x02, 0x00, 0xAE, +/* 00007750 */ 0x0E, 0x02, 0x00, 0x1D, 0x0F, 0x02, 0x00, 0xA4, 0x0F, 0x02, 0x00, 0xB6, 0x0F, 0x02, 0x00, 0xB7, +/* 00007760 */ 0x0F, 0x02, 0x00, 0x18, 0x10, 0x02, 0x00, 0x19, 0x10, 0x02, 0x00, 0x51, 0x10, 0x02, 0x00, 0x92, +/* 00007770 */ 0x10, 0x02, 0x00, 0xFF, 0x10, 0x02, 0x00, 0x00, 0x11, 0x02, 0x00, 0x34, 0x11, 0x02, 0x00, 0x92, +/* 00007780 */ 0x11, 0x02, 0x00, 0xDB, 0x11, 0x02, 0x00, 0xED, 0x11, 0x02, 0x00, 0xEE, 0x11, 0x02, 0x00, 0x1A, +/* 00007790 */ 0x12, 0x02, 0x00, 0x55, 0x12, 0x02, 0x00, 0x92, 0x12, 0x02, 0x00, 0xA8, 0x12, 0x02, 0x00, 0xFE, +/* 000077A0 */ 0x12, 0x02, 0x00, 0x18, 0x13, 0x02, 0x00, 0x64, 0x13, 0x02, 0x00, 0x86, 0x13, 0x02, 0x00, 0xB4, +/* 000077B0 */ 0x13, 0x02, 0x00, 0x01, 0x14, 0x02, 0x00, 0x17, 0x14, 0x02, 0x00, 0x8D, 0x14, 0x02, 0x00, 0xF1, +/* 000077C0 */ 0x14, 0x02, 0x00, 0x0A, 0x15, 0x02, 0x00, 0x34, 0x15, 0x02, 0x00, 0x65, 0x15, 0x02, 0x00, 0xCE, +/* 000077D0 */ 0x15, 0x02, 0x00, 0xFD, 0x15, 0x02, 0x00, 0x58, 0x16, 0x02, 0x00, 0x75, 0x16, 0x02, 0x00, 0xCF, +/* 000077E0 */ 0x16, 0x02, 0x00, 0xE5, 0x16, 0x02, 0x00, 0xF7, 0x16, 0x02, 0x00, 0xF8, 0x16, 0x02, 0x00, 0x8C, +/* 000077F0 */ 0x17, 0x02, 0x00, 0x8D, 0x17, 0x02, 0x00, 0xBE, 0x17, 0x02, 0x00, 0xF6, 0x17, 0x02, 0x00, 0x39, +/* 00007800 */ 0x18, 0x02, 0x00, 0x67, 0x18, 0x02, 0x00, 0x68, 0x18, 0x02, 0x00, 0x96, 0x18, 0x02, 0x00, 0xCE, +/* 00007810 */ 0x18, 0x02, 0x00, 0xE0, 0x18, 0x02, 0x00, 0xE1, 0x18, 0x02, 0x00, 0x16, 0x19, 0x02, 0x00, 0x5C, +/* 00007820 */ 0x19, 0x02, 0x00, 0xCD, 0x19, 0x02, 0x00, 0xDF, 0x19, 0x02, 0x00, 0xE0, 0x19, 0x02, 0x00, 0x2C, +/* 00007830 */ 0x1A, 0x02, 0x00, 0x7A, 0x1A, 0x02, 0x00, 0xC8, 0x1A, 0x02, 0x00, 0xC9, 0x1A, 0x02, 0x00, 0x07, +/* 00007840 */ 0x1B, 0x02, 0x00, 0x5F, 0x1B, 0x02, 0x00, 0xB7, 0x1B, 0x02, 0x00, 0xC9, 0x1B, 0x02, 0x00, 0xCA, +/* 00007850 */ 0x1B, 0x02, 0x00, 0x0A, 0x1C, 0x02, 0x00, 0x44, 0x1C, 0x02, 0x00, 0x45, 0x1C, 0x02, 0x00, 0x5B, +/* 00007860 */ 0x1C, 0x02, 0x00, 0xAF, 0x1C, 0x02, 0x00, 0xED, 0x1C, 0x02, 0x00, 0x0B, 0x1D, 0x02, 0x00, 0x35, +/* 00007870 */ 0x1D, 0x02, 0x00, 0x8C, 0x1D, 0x02, 0x00, 0x11, 0x1E, 0x02, 0x00, 0x76, 0x1E, 0x02, 0x00, 0xB1, +/* 00007880 */ 0x1E, 0x02, 0x00, 0xC3, 0x1E, 0x02, 0x00, 0xC4, 0x1E, 0x02, 0x00, 0xFB, 0x1E, 0x02, 0x00, 0x5C, +/* 00007890 */ 0x1F, 0x02, 0x00, 0x6E, 0x1F, 0x02, 0x00, 0x6F, 0x1F, 0x02, 0x00, 0xED, 0x1F, 0x02, 0x00, 0x2C, +/* 000078A0 */ 0x20, 0x02, 0x00, 0x3A, 0x20, 0x02, 0x00, 0x3B, 0x20, 0x02, 0x00, 0xAB, 0x20, 0x02, 0x00, 0xFA, +/* 000078B0 */ 0x20, 0x02, 0x00, 0x5B, 0x21, 0x02, 0x00, 0x6D, 0x21, 0x02, 0x00, 0x6E, 0x21, 0x02, 0x00, 0xA8, +/* 000078C0 */ 0x21, 0x02, 0x00, 0xF9, 0x21, 0x02, 0x00, 0xFA, 0x21, 0x02, 0x00, 0x2B, 0x22, 0x02, 0x00, 0x71, +/* 000078D0 */ 0x22, 0x02, 0x00, 0xB3, 0x22, 0x02, 0x00, 0xB4, 0x22, 0x02, 0x00, 0xDB, 0x22, 0x02, 0x00, 0x2D, +/* 000078E0 */ 0x23, 0x02, 0x00, 0x6C, 0x23, 0x02, 0x00, 0xAF, 0x23, 0x02, 0x00, 0xC5, 0x23, 0x02, 0x00, 0xC6, +/* 000078F0 */ 0x23, 0x02, 0x00, 0xFD, 0x23, 0x02, 0x00, 0xFE, 0x23, 0x02, 0x00, 0x32, 0x24, 0x02, 0x00, 0x7F, +/* 00007900 */ 0x24, 0x02, 0x00, 0x95, 0x24, 0x02, 0x00, 0x96, 0x24, 0x02, 0x00, 0xD1, 0x24, 0x02, 0x00, 0x17, +/* 00007910 */ 0x25, 0x02, 0x00, 0x18, 0x25, 0x02, 0x00, 0x4E, 0x25, 0x02, 0x00, 0x8D, 0x25, 0x02, 0x00, 0xD2, +/* 00007920 */ 0x25, 0x02, 0x00, 0xE8, 0x25, 0x02, 0x00, 0xE9, 0x25, 0x02, 0x00, 0x35, 0x26, 0x02, 0x00, 0x36, +/* 00007930 */ 0x26, 0x02, 0x00, 0x9B, 0x26, 0x02, 0x00, 0xD7, 0x26, 0x02, 0x00, 0xD8, 0x26, 0x02, 0x00, 0xF8, +/* 00007940 */ 0x26, 0x02, 0x00, 0x0A, 0x27, 0x02, 0x00, 0x50, 0x27, 0x02, 0x00, 0x51, 0x27, 0x02, 0x00, 0x76, +/* 00007950 */ 0x27, 0x02, 0x00, 0xA4, 0x27, 0x02, 0x00, 0xA5, 0x27, 0x02, 0x00, 0xD9, 0x27, 0x02, 0x00, 0x42, +/* 00007960 */ 0x28, 0x02, 0x00, 0x58, 0x28, 0x02, 0x00, 0x59, 0x28, 0x02, 0x00, 0xA0, 0x28, 0x02, 0x00, 0x01, +/* 00007970 */ 0x29, 0x02, 0x00, 0x6A, 0x29, 0x02, 0x00, 0x80, 0x29, 0x02, 0x00, 0x81, 0x29, 0x02, 0x00, 0xCC, +/* 00007980 */ 0x29, 0x02, 0x00, 0xDE, 0x29, 0x02, 0x00, 0x2F, 0x2A, 0x02, 0x00, 0x30, 0x2A, 0x02, 0x00, 0xCA, +/* 00007990 */ 0x2A, 0x02, 0x00, 0xCB, 0x2A, 0x02, 0x00, 0x47, 0x2B, 0x02, 0x00, 0xC5, 0x2B, 0x02, 0x00, 0xE9, +/* 000079A0 */ 0x2B, 0x02, 0x00, 0xEA, 0x2B, 0x02, 0x00, 0x83, 0x2C, 0x02, 0x00, 0xCB, 0x2C, 0x02, 0x00, 0x68, +/* 000079B0 */ 0x2D, 0x02, 0x00, 0x69, 0x2D, 0x02, 0x00, 0xBB, 0x2D, 0x02, 0x00, 0xF3, 0x2D, 0x02, 0x00, 0x2B, +/* 000079C0 */ 0x2E, 0x02, 0x00, 0xA1, 0x2E, 0x02, 0x00, 0xBB, 0x2E, 0x02, 0x00, 0x06, 0x2F, 0x02, 0x00, 0x6B, +/* 000079D0 */ 0x2F, 0x02, 0x00, 0xE1, 0x2F, 0x02, 0x00, 0xFB, 0x2F, 0x02, 0x00, 0xFC, 0x2F, 0x02, 0x00, 0x42, +/* 000079E0 */ 0x30, 0x02, 0x00, 0x43, 0x30, 0x02, 0x00, 0x9F, 0x30, 0x02, 0x00, 0xF5, 0x30, 0x02, 0x00, 0x4C, +/* 000079F0 */ 0x31, 0x02, 0x00, 0x6A, 0x31, 0x02, 0x00, 0x86, 0x31, 0x02, 0x00, 0x87, 0x31, 0x02, 0x00, 0xC9, +/* 00007A00 */ 0x31, 0x02, 0x00, 0x16, 0x32, 0x02, 0x00, 0x2A, 0x32, 0x02, 0x00, 0x2B, 0x32, 0x02, 0x00, 0x74, +/* 00007A10 */ 0x32, 0x02, 0x00, 0xBB, 0x32, 0x02, 0x00, 0xF3, 0x32, 0x02, 0x00, 0x60, 0x33, 0x02, 0x00, 0x7A, +/* 00007A20 */ 0x33, 0x02, 0x00, 0x7B, 0x33, 0x02, 0x00, 0xC6, 0x33, 0x02, 0x00, 0x2B, 0x34, 0x02, 0x00, 0x98, +/* 00007A30 */ 0x34, 0x02, 0x00, 0xB2, 0x34, 0x02, 0x00, 0xB3, 0x34, 0x02, 0x00, 0xEE, 0x34, 0x02, 0x00, 0x2C, +/* 00007A40 */ 0x35, 0x02, 0x00, 0x40, 0x35, 0x02, 0x00, 0x41, 0x35, 0x02, 0x00, 0x66, 0x35, 0x02, 0x00, 0x74, +/* 00007A50 */ 0x35, 0x02, 0x00, 0x7E, 0x35, 0x02, 0x00, 0xCD, 0x35, 0x02, 0x00, 0xE7, 0x35, 0x02, 0x00, 0xF1, +/* 00007A60 */ 0x35, 0x02, 0x00, 0xF2, 0x35, 0x02, 0x00, 0x72, 0x36, 0x02, 0x00, 0x9A, 0x36, 0x02, 0x00, 0xD4, +/* 00007A70 */ 0x36, 0x02, 0x00, 0x1A, 0x37, 0x02, 0x00, 0x47, 0x37, 0x02, 0x00, 0x7D, 0x37, 0x02, 0x00, 0x96, +/* 00007A80 */ 0x37, 0x02, 0x00, 0xD0, 0x37, 0x02, 0x00, 0xE2, 0x37, 0x02, 0x00, 0xE3, 0x37, 0x02, 0x00, 0x0C, +/* 00007A90 */ 0x38, 0x02, 0x00, 0x4D, 0x38, 0x02, 0x00, 0xE0, 0x38, 0x02, 0x00, 0x0E, 0x39, 0x02, 0x00, 0x24, +/* 00007AA0 */ 0x39, 0x02, 0x00, 0x36, 0x39, 0x02, 0x00, 0x77, 0x39, 0x02, 0x00, 0xED, 0x39, 0x02, 0x00, 0x1B, +/* 00007AB0 */ 0x3A, 0x02, 0x00, 0x31, 0x3A, 0x02, 0x00, 0x43, 0x3A, 0x02, 0x00, 0x44, 0x3A, 0x02, 0x00, 0x97, +/* 00007AC0 */ 0x3A, 0x02, 0x00, 0xD3, 0x3A, 0x02, 0x00, 0x0D, 0x3B, 0x02, 0x00, 0x4A, 0x3B, 0x02, 0x00, 0x62, +/* 00007AD0 */ 0x3B, 0x02, 0x00, 0x9F, 0x3B, 0x02, 0x00, 0xD9, 0x3B, 0x02, 0x00, 0x16, 0x3C, 0x02, 0x00, 0x2E, +/* 00007AE0 */ 0x3C, 0x02, 0x00, 0x69, 0x3C, 0x02, 0x00, 0xA3, 0x3C, 0x02, 0x00, 0xE0, 0x3C, 0x02, 0x00, 0xF8, +/* 00007AF0 */ 0x3C, 0x02, 0x00, 0x0A, 0x3D, 0x02, 0x00, 0x5D, 0x3D, 0x02, 0x00, 0x99, 0x3D, 0x02, 0x00, 0xD3, +/* 00007B00 */ 0x3D, 0x02, 0x00, 0x10, 0x3E, 0x02, 0x00, 0x28, 0x3E, 0x02, 0x00, 0x66, 0x3E, 0x02, 0x00, 0xA0, +/* 00007B10 */ 0x3E, 0x02, 0x00, 0xDD, 0x3E, 0x02, 0x00, 0xF5, 0x3E, 0x02, 0x00, 0x33, 0x3F, 0x02, 0x00, 0x6D, +/* 00007B20 */ 0x3F, 0x02, 0x00, 0xAA, 0x3F, 0x02, 0x00, 0xC2, 0x3F, 0x02, 0x00, 0xD4, 0x3F, 0x02, 0x00, 0xF4, +/* 00007B30 */ 0x3F, 0x02, 0x00, 0x02, 0x40, 0x02, 0x00, 0x03, 0x40, 0x02, 0x00, 0x8D, 0x40, 0x02, 0x00, 0xCA, +/* 00007B40 */ 0x40, 0x02, 0x00, 0xED, 0x40, 0x02, 0x00, 0x18, 0x41, 0x02, 0x00, 0x33, 0x41, 0x02, 0x00, 0x34, +/* 00007B50 */ 0x41, 0x02, 0x00, 0x5B, 0x41, 0x02, 0x00, 0xB2, 0x41, 0x02, 0x00, 0xF3, 0x41, 0x02, 0x00, 0x30, +/* 00007B60 */ 0x42, 0x02, 0x00, 0x6A, 0x42, 0x02, 0x00, 0x80, 0x42, 0x02, 0x00, 0x92, 0x42, 0x02, 0x00, 0x93, +/* 00007B70 */ 0x42, 0x02, 0x00, 0xBE, 0x42, 0x02, 0x00, 0xE2, 0x42, 0x02, 0x00, 0x18, 0x43, 0x02, 0x00, 0x54, +/* 00007B80 */ 0x43, 0x02, 0x00, 0x91, 0x43, 0x02, 0x00, 0xC6, 0x43, 0x02, 0x00, 0xDC, 0x43, 0x02, 0x00, 0xEE, +/* 00007B90 */ 0x43, 0x02, 0x00, 0xEF, 0x43, 0x02, 0x00, 0x14, 0x44, 0x02, 0x00, 0x6A, 0x44, 0x02, 0x00, 0xA3, +/* 00007BA0 */ 0x44, 0x02, 0x00, 0xFD, 0x44, 0x02, 0x00, 0x3A, 0x45, 0x02, 0x00, 0x75, 0x45, 0x02, 0x00, 0xAB, +/* 00007BB0 */ 0x45, 0x02, 0x00, 0xC1, 0x45, 0x02, 0x00, 0xD3, 0x45, 0x02, 0x00, 0xD4, 0x45, 0x02, 0x00, 0xF7, +/* 00007BC0 */ 0x45, 0x02, 0x00, 0x22, 0x46, 0x02, 0x00, 0x34, 0x46, 0x02, 0x00, 0x35, 0x46, 0x02, 0x00, 0x61, +/* 00007BD0 */ 0x46, 0x02, 0x00, 0x9D, 0x46, 0x02, 0x00, 0xDD, 0x46, 0x02, 0x00, 0x1F, 0x47, 0x02, 0x00, 0x58, +/* 00007BE0 */ 0x47, 0x02, 0x00, 0x6E, 0x47, 0x02, 0x00, 0x80, 0x47, 0x02, 0x00, 0x81, 0x47, 0x02, 0x00, 0xE7, +/* 00007BF0 */ 0x47, 0x02, 0x00, 0x0F, 0x48, 0x02, 0x00, 0x3C, 0x48, 0x02, 0x00, 0x52, 0x48, 0x02, 0x00, 0x66, +/* 00007C00 */ 0x48, 0x02, 0x00, 0x67, 0x48, 0x02, 0x00, 0x9D, 0x48, 0x02, 0x00, 0xFC, 0x48, 0x02, 0x00, 0x0A, +/* 00007C10 */ 0x49, 0x02, 0x00, 0x0B, 0x49, 0x02, 0x00, 0x38, 0x49, 0x02, 0x00, 0x68, 0x49, 0x02, 0x00, 0x94, +/* 00007C20 */ 0x49, 0x02, 0x00, 0xC0, 0x49, 0x02, 0x00, 0xF0, 0x49, 0x02, 0x00, 0x1C, 0x4A, 0x02, 0x00, 0x48, +/* 00007C30 */ 0x4A, 0x02, 0x00, 0x7D, 0x4A, 0x02, 0x00, 0xA5, 0x4A, 0x02, 0x00, 0xD0, 0x4A, 0x02, 0x00, 0xDF, +/* 00007C40 */ 0x4A, 0x02, 0x00, 0xE0, 0x4A, 0x02, 0x00, 0x17, 0x4B, 0x02, 0x00, 0x4E, 0x4B, 0x02, 0x00, 0x6D, +/* 00007C50 */ 0x4B, 0x02, 0x00, 0x7F, 0x4B, 0x02, 0x00, 0x80, 0x4B, 0x02, 0x00, 0xC8, 0x4B, 0x02, 0x00, 0xD6, +/* 00007C60 */ 0x4B, 0x02, 0x00, 0xD7, 0x4B, 0x02, 0x00, 0x47, 0x4C, 0x02, 0x00, 0xA3, 0x4C, 0x02, 0x00, 0x19, +/* 00007C70 */ 0x4D, 0x02, 0x00, 0xAA, 0x4D, 0x02, 0x00, 0x28, 0x4E, 0x02, 0x00, 0x4E, 0x4E, 0x02, 0x00, 0x43, +/* 00007C80 */ 0x4F, 0x02, 0x00, 0x6D, 0x4F, 0x02, 0x00, 0x7F, 0x4F, 0x02, 0x00, 0x80, 0x4F, 0x02, 0x00, 0xC3, +/* 00007C90 */ 0x4F, 0x02, 0x00, 0x45, 0x50, 0x02, 0x00, 0x78, 0x50, 0x02, 0x00, 0x2E, 0x51, 0x02, 0x00, 0x40, +/* 00007CA0 */ 0x51, 0x02, 0x00, 0x66, 0x51, 0x02, 0x00, 0x74, 0x51, 0x02, 0x00, 0x75, 0x51, 0x02, 0x00, 0xDA, +/* 00007CB0 */ 0x51, 0x02, 0x00, 0x24, 0x52, 0x02, 0x00, 0x98, 0x52, 0x02, 0x00, 0x29, 0x53, 0x02, 0x00, 0x4F, +/* 00007CC0 */ 0x53, 0x02, 0x00, 0x4F, 0x54, 0x02, 0x00, 0x79, 0x54, 0x02, 0x00, 0x8B, 0x54, 0x02, 0x00, 0x8C, +/* 00007CD0 */ 0x54, 0x02, 0x00, 0xD6, 0x54, 0x02, 0x00, 0x05, 0x55, 0x02, 0x00, 0x83, 0x55, 0x02, 0x00, 0xB8, +/* 00007CE0 */ 0x55, 0x02, 0x00, 0x33, 0x56, 0x02, 0x00, 0x45, 0x56, 0x02, 0x00, 0x46, 0x56, 0x02, 0x00, 0x6C, +/* 00007CF0 */ 0x56, 0x02, 0x00, 0x7A, 0x56, 0x02, 0x00, 0x7B, 0x56, 0x02, 0x00, 0xDD, 0x56, 0x02, 0x00, 0x28, +/* 00007D00 */ 0x57, 0x02, 0x00, 0x66, 0x57, 0x02, 0x00, 0xDF, 0x57, 0x02, 0x00, 0xF1, 0x57, 0x02, 0x00, 0xF2, +/* 00007D10 */ 0x57, 0x02, 0x00, 0x2C, 0x58, 0x02, 0x00, 0x99, 0x58, 0x02, 0x00, 0xF8, 0x58, 0x02, 0x00, 0x6D, +/* 00007D20 */ 0x59, 0x02, 0x00, 0x7F, 0x59, 0x02, 0x00, 0x80, 0x59, 0x02, 0x00, 0xBB, 0x59, 0x02, 0x00, 0x26, +/* 00007D30 */ 0x5A, 0x02, 0x00, 0x50, 0x5A, 0x02, 0x00, 0xC4, 0x5A, 0x02, 0x00, 0xE1, 0x5A, 0x02, 0x00, 0x64, +/* 00007D40 */ 0x5B, 0x02, 0x00, 0x7A, 0x5B, 0x02, 0x00, 0xB9, 0x5B, 0x02, 0x00, 0x24, 0x5C, 0x02, 0x00, 0x4E, +/* 00007D50 */ 0x5C, 0x02, 0x00, 0xC2, 0x5C, 0x02, 0x00, 0xDF, 0x5C, 0x02, 0x00, 0x58, 0x5D, 0x02, 0x00, 0x6E, +/* 00007D60 */ 0x5D, 0x02, 0x00, 0x80, 0x5D, 0x02, 0x00, 0x81, 0x5D, 0x02, 0x00, 0x16, 0x5E, 0x02, 0x00, 0xA2, +/* 00007D70 */ 0x5E, 0x02, 0x00, 0x15, 0x5F, 0x02, 0x00, 0x58, 0x5F, 0x02, 0x00, 0xD4, 0x5F, 0x02, 0x00, 0xE6, +/* 00007D80 */ 0x5F, 0x02, 0x00, 0xE7, 0x5F, 0x02, 0x00, 0x21, 0x60, 0x02, 0x00, 0x99, 0x60, 0x02, 0x00, 0xAB, +/* 00007D90 */ 0x60, 0x02, 0x00, 0xAC, 0x60, 0x02, 0x00, 0xE7, 0x60, 0x02, 0x00, 0x61, 0x61, 0x02, 0x00, 0x73, +/* 00007DA0 */ 0x61, 0x02, 0x00, 0x74, 0x61, 0x02, 0x00, 0xB1, 0x61, 0x02, 0x00, 0x2F, 0x62, 0x02, 0x00, 0x41, +/* 00007DB0 */ 0x62, 0x02, 0x00, 0x42, 0x62, 0x02, 0x00, 0x7F, 0x62, 0x02, 0x00, 0xFD, 0x62, 0x02, 0x00, 0x0F, +/* 00007DC0 */ 0x63, 0x02, 0x00, 0x10, 0x63, 0x02, 0x00, 0x53, 0x63, 0x02, 0x00, 0xD0, 0x63, 0x02, 0x00, 0xE2, +/* 00007DD0 */ 0x63, 0x02, 0x00, 0xE3, 0x63, 0x02, 0x00, 0x09, 0x64, 0x02, 0x00, 0x17, 0x64, 0x02, 0x00, 0x18, +/* 00007DE0 */ 0x64, 0x02, 0x00, 0x6D, 0x64, 0x02, 0x00, 0xA6, 0x64, 0x02, 0x00, 0xD6, 0x64, 0x02, 0x00, 0xE8, +/* 00007DF0 */ 0x64, 0x02, 0x00, 0xE9, 0x64, 0x02, 0x00, 0x84, 0x65, 0x02, 0x00, 0xE6, 0x65, 0x02, 0x00, 0xF8, +/* 00007E00 */ 0x65, 0x02, 0x00, 0xF9, 0x65, 0x02, 0x00, 0x38, 0x66, 0x02, 0x00, 0x39, 0x66, 0x02, 0x00, 0x60, +/* 00007E10 */ 0x66, 0x02, 0x00, 0xA5, 0x66, 0x02, 0x00, 0xA6, 0x66, 0x02, 0x00, 0x17, 0x67, 0x02, 0x00, 0x76, +/* 00007E20 */ 0x67, 0x02, 0x00, 0x77, 0x67, 0x02, 0x00, 0xA5, 0x67, 0x02, 0x00, 0xF8, 0x67, 0x02, 0x00, 0x11, +/* 00007E30 */ 0x68, 0x02, 0x00, 0x4F, 0x68, 0x02, 0x00, 0x61, 0x68, 0x02, 0x00, 0x62, 0x68, 0x02, 0x00, 0x90, +/* 00007E40 */ 0x68, 0x02, 0x00, 0xCB, 0x68, 0x02, 0x00, 0xDD, 0x68, 0x02, 0x00, 0xDE, 0x68, 0x02, 0x00, 0x00, +/* 00007E50 */ 0x69, 0x02, 0x00, 0x6F, 0x69, 0x02, 0x00, 0xD6, 0x69, 0x02, 0x00, 0x3A, 0x6A, 0x02, 0x00, 0xBB, +/* 00007E60 */ 0x6A, 0x02, 0x00, 0x1D, 0x6B, 0x02, 0x00, 0x81, 0x6B, 0x02, 0x00, 0xE9, 0x6B, 0x02, 0x00, 0x51, +/* 00007E70 */ 0x6C, 0x02, 0x00, 0xC0, 0x6C, 0x02, 0x00, 0xC1, 0x6C, 0x02, 0x00, 0x30, 0x6D, 0x02, 0x00, 0xA6, +/* 00007E80 */ 0x6D, 0x02, 0x00, 0xA7, 0x6D, 0x02, 0x00, 0x17, 0x6E, 0x02, 0x00, 0x18, 0x6E, 0x02, 0x00, 0x69, +/* 00007E90 */ 0x6E, 0x02, 0x00, 0x8F, 0x6E, 0x02, 0x00, 0xAD, 0x6E, 0x02, 0x00, 0xCD, 0x6E, 0x02, 0x00, 0xEF, +/* 00007EA0 */ 0x6E, 0x02, 0x00, 0x0D, 0x6F, 0x02, 0x00, 0x2D, 0x6F, 0x02, 0x00, 0x51, 0x6F, 0x02, 0x00, 0x75, +/* 00007EB0 */ 0x6F, 0x02, 0x00, 0xA4, 0x6F, 0x02, 0x00, 0xBF, 0x6F, 0x02, 0x00, 0xC0, 0x6F, 0x02, 0x00, 0xE8, +/* 00007EC0 */ 0x6F, 0x02, 0x00, 0x29, 0x70, 0x02, 0x00, 0x9C, 0x70, 0x02, 0x00, 0x9D, 0x70, 0x02, 0x00, 0xC3, +/* 00007ED0 */ 0x70, 0x02, 0x00, 0xF7, 0x70, 0x02, 0x00, 0x2D, 0x71, 0x02, 0x00, 0x72, 0x71, 0x02, 0x00, 0x73, +/* 00007EE0 */ 0x71, 0x02, 0x00, 0x95, 0x71, 0x02, 0x00, 0xC9, 0x71, 0x02, 0x00, 0xF5, 0x71, 0x02, 0x00, 0x23, +/* 00007EF0 */ 0x72, 0x02, 0x00, 0x53, 0x72, 0x02, 0x00, 0x7F, 0x72, 0x02, 0x00, 0xAD, 0x72, 0x02, 0x00, 0xDF, +/* 00007F00 */ 0x72, 0x02, 0x00, 0x11, 0x73, 0x02, 0x00, 0x4F, 0x73, 0x02, 0x00, 0x50, 0x73, 0x02, 0x00, 0x82, +/* 00007F10 */ 0x73, 0x02, 0x00, 0xC2, 0x73, 0x02, 0x00, 0x00, 0x74, 0x02, 0x00, 0x01, 0x74, 0x02, 0x00, 0x43, +/* 00007F20 */ 0x74, 0x02, 0x00, 0x44, 0x74, 0x02, 0x00, 0x57, 0x74, 0x02, 0x00, 0x73, 0x74, 0x02, 0x00, 0xCB, +/* 00007F30 */ 0x74, 0x02, 0x00, 0x45, 0x75, 0x02, 0x00, 0xEA, 0x75, 0x02, 0x00, 0x91, 0x76, 0x02, 0x00, 0xF9, +/* 00007F40 */ 0x76, 0x02, 0x00, 0x10, 0x77, 0x02, 0x00, 0x39, 0x77, 0x02, 0x00, 0x3A, 0x77, 0x02, 0x00, 0x50, +/* 00007F50 */ 0x77, 0x02, 0x00, 0x9F, 0x77, 0x02, 0x00, 0xE0, 0x77, 0x02, 0x00, 0xFE, 0x77, 0x02, 0x00, 0x28, +/* 00007F60 */ 0x78, 0x02, 0x00, 0x52, 0x78, 0x02, 0x00, 0x53, 0x78, 0x02, 0x00, 0xC1, 0x78, 0x02, 0x00, 0x17, +/* 00007F70 */ 0x79, 0x02, 0x00, 0x6B, 0x79, 0x02, 0x00, 0xD5, 0x79, 0x02, 0x00, 0xFD, 0x79, 0x02, 0x00, 0x0F, +/* 00007F80 */ 0x7A, 0x02, 0x00, 0x10, 0x7A, 0x02, 0x00, 0x34, 0x7A, 0x02, 0x00, 0x66, 0x7A, 0x02, 0x00, 0xE6, +/* 00007F90 */ 0x7A, 0x02, 0x00, 0xF8, 0x7A, 0x02, 0x00, 0xF9, 0x7A, 0x02, 0x00, 0x0F, 0x7B, 0x02, 0x00, 0x44, +/* 00007FA0 */ 0x7B, 0x02, 0x00, 0x84, 0x7B, 0x02, 0x00, 0xA2, 0x7B, 0x02, 0x00, 0xCC, 0x7B, 0x02, 0x00, 0xF6, +/* 00007FB0 */ 0x7B, 0x02, 0x00, 0xF7, 0x7B, 0x02, 0x00, 0x59, 0x7C, 0x02, 0x00, 0xDE, 0x7C, 0x02, 0x00, 0x43, +/* 00007FC0 */ 0x7D, 0x02, 0x00, 0x7E, 0x7D, 0x02, 0x00, 0x90, 0x7D, 0x02, 0x00, 0x91, 0x7D, 0x02, 0x00, 0xBE, +/* 00007FD0 */ 0x7D, 0x02, 0x00, 0x23, 0x7E, 0x02, 0x00, 0x24, 0x7E, 0x02, 0x00, 0xA6, 0x7E, 0x02, 0x00, 0xE1, +/* 00007FE0 */ 0x7E, 0x02, 0x00, 0x40, 0x7F, 0x02, 0x00, 0x52, 0x7F, 0x02, 0x00, 0x95, 0x7F, 0x02, 0x00, 0xA3, +/* 00007FF0 */ 0x7F, 0x02, 0x00, 0xA4, 0x7F, 0x02, 0x00, 0xFA, 0x7F, 0x02, 0x00, 0x58, 0x80, 0x02, 0x00, 0xA8, +/* 00008000 */ 0x80, 0x02, 0x00, 0xCB, 0x80, 0x02, 0x00, 0xF2, 0x80, 0x02, 0x00, 0x18, 0x81, 0x02, 0x00, 0x2E, +/* 00008010 */ 0x81, 0x02, 0x00, 0x2F, 0x81, 0x02, 0x00, 0xA4, 0x81, 0x02, 0x00, 0xEF, 0x81, 0x02, 0x00, 0x31, +/* 00008020 */ 0x82, 0x02, 0x00, 0x43, 0x82, 0x02, 0x00, 0x96, 0x82, 0x02, 0x00, 0xCE, 0x82, 0x02, 0x00, 0xF9, +/* 00008030 */ 0x82, 0x02, 0x00, 0x0B, 0x83, 0x02, 0x00, 0x0C, 0x83, 0x02, 0x00, 0x39, 0x83, 0x02, 0x00, 0x95, +/* 00008040 */ 0x83, 0x02, 0x00, 0x03, 0x84, 0x02, 0x00, 0x52, 0x84, 0x02, 0x00, 0x83, 0x84, 0x02, 0x00, 0xDE, +/* 00008050 */ 0x84, 0x02, 0x00, 0xFB, 0x84, 0x02, 0x00, 0x25, 0x85, 0x02, 0x00, 0x63, 0x85, 0x02, 0x00, 0xDD, +/* 00008060 */ 0x85, 0x02, 0x00, 0x38, 0x86, 0x02, 0x00, 0x4E, 0x86, 0x02, 0x00, 0x60, 0x86, 0x02, 0x00, 0x61, +/* 00008070 */ 0x86, 0x02, 0x00, 0x85, 0x86, 0x02, 0x00, 0xBF, 0x86, 0x02, 0x00, 0x31, 0x87, 0x02, 0x00, 0x43, +/* 00008080 */ 0x87, 0x02, 0x00, 0x44, 0x87, 0x02, 0x00, 0xA2, 0x87, 0x02, 0x00, 0xB0, 0x87, 0x02, 0x00, 0xB1, +/* 00008090 */ 0x87, 0x02, 0x00, 0x2E, 0x88, 0x02, 0x00, 0xBA, 0x88, 0x02, 0x00, 0x39, 0x89, 0x02, 0x00, 0xC2, +/* 000080A0 */ 0x89, 0x02, 0x00, 0xE7, 0x89, 0x02, 0x00, 0xF6, 0x89, 0x02, 0x00, 0x81, 0x8A, 0x02, 0x00, 0x07, +/* 000080B0 */ 0x8B, 0x02, 0x00, 0x91, 0x8B, 0x02, 0x00, 0xE5, 0x8B, 0x02, 0x00, 0xF4, 0x8B, 0x02, 0x00, 0x76, +/* 000080C0 */ 0x8C, 0x02, 0x00, 0xE7, 0x8C, 0x02, 0x00, 0x42, 0x8D, 0x02, 0x00, 0xAD, 0x8D, 0x02, 0x00, 0x27, +/* 000080D0 */ 0x8E, 0x02, 0x00, 0x78, 0x8E, 0x02, 0x00, 0x87, 0x8E, 0x02, 0x00, 0xFD, 0x8E, 0x02, 0x00, 0x0C, +/* 000080E0 */ 0x8F, 0x02, 0x00, 0x98, 0x8F, 0x02, 0x00, 0x21, 0x90, 0x02, 0x00, 0x6C, 0x90, 0x02, 0x00, 0x6D, +/* 000080F0 */ 0x90, 0x02, 0x00, 0xBD, 0x90, 0x02, 0x00, 0x5A, 0x91, 0x02, 0x00, 0xDF, 0x91, 0x02, 0x00, 0x08, +/* 00008100 */ 0x92, 0x02, 0x00, 0xB3, 0x92, 0x02, 0x00, 0xB4, 0x92, 0x02, 0x00, 0x04, 0x93, 0x02, 0x00, 0xA5, +/* 00008110 */ 0x93, 0x02, 0x00, 0x2A, 0x94, 0x02, 0x00, 0x53, 0x94, 0x02, 0x00, 0x0C, 0x95, 0x02, 0x00, 0x0D, +/* 00008120 */ 0x95, 0x02, 0x00, 0x5D, 0x95, 0x02, 0x00, 0xFE, 0x95, 0x02, 0x00, 0x83, 0x96, 0x02, 0x00, 0xAC, +/* 00008130 */ 0x96, 0x02, 0x00, 0x65, 0x97, 0x02, 0x00, 0x66, 0x97, 0x02, 0x00, 0x8D, 0x97, 0x02, 0x00, 0xE1, +/* 00008140 */ 0x97, 0x02, 0x00, 0x20, 0x98, 0x02, 0x00, 0x65, 0x98, 0x02, 0x00, 0x7B, 0x98, 0x02, 0x00, 0x7C, +/* 00008150 */ 0x98, 0x02, 0x00, 0xB3, 0x98, 0x02, 0x00, 0xE7, 0x98, 0x02, 0x00, 0x36, 0x99, 0x02, 0x00, 0x4C, +/* 00008160 */ 0x99, 0x02, 0x00, 0x4D, 0x99, 0x02, 0x00, 0x88, 0x99, 0x02, 0x00, 0xCE, 0x99, 0x02, 0x00, 0xCF, +/* 00008170 */ 0x99, 0x02, 0x00, 0x05, 0x9A, 0x02, 0x00, 0x44, 0x9A, 0x02, 0x00, 0x89, 0x9A, 0x02, 0x00, 0x9F, +/* 00008180 */ 0x9A, 0x02, 0x00, 0xA0, 0x9A, 0x02, 0x00, 0xEE, 0x9A, 0x02, 0x00, 0xEF, 0x9A, 0x02, 0x00, 0x55, +/* 00008190 */ 0x9B, 0x02, 0x00, 0x91, 0x9B, 0x02, 0x00, 0x92, 0x9B, 0x02, 0x00, 0xB2, 0x9B, 0x02, 0x00, 0xC4, +/* 000081A0 */ 0x9B, 0x02, 0x00, 0x0E, 0x9C, 0x02, 0x00, 0x0F, 0x9C, 0x02, 0x00, 0x37, 0x9C, 0x02, 0x00, 0x6B, +/* 000081B0 */ 0x9C, 0x02, 0x00, 0xD8, 0x9C, 0x02, 0x00, 0xEE, 0x9C, 0x02, 0x00, 0x35, 0x9D, 0x02, 0x00, 0x98, +/* 000081C0 */ 0x9D, 0x02, 0x00, 0x05, 0x9E, 0x02, 0x00, 0x1B, 0x9E, 0x02, 0x00, 0x1C, 0x9E, 0x02, 0x00, 0x6E, +/* 000081D0 */ 0x9E, 0x02, 0x00, 0xA3, 0x9E, 0x02, 0x00, 0xB9, 0x9E, 0x02, 0x00, 0xBA, 0x9E, 0x02, 0x00, 0xE9, +/* 000081E0 */ 0x9E, 0x02, 0x00, 0x17, 0x9F, 0x02, 0x00, 0x53, 0x9F, 0x02, 0x00, 0x70, 0x9F, 0x02, 0x00, 0x9F, +/* 000081F0 */ 0x9F, 0x02, 0x00, 0xB5, 0x9F, 0x02, 0x00, 0xB6, 0x9F, 0x02, 0x00, 0x0B, 0xA0, 0x02, 0x00, 0x1D, +/* 00008200 */ 0xA0, 0x02, 0x00, 0x70, 0xA0, 0x02, 0x00, 0x71, 0xA0, 0x02, 0x00, 0xB8, 0xA0, 0x02, 0x00, 0xB9, +/* 00008210 */ 0xA0, 0x02, 0x00, 0x56, 0xA1, 0x02, 0x00, 0xA0, 0xA1, 0x02, 0x00, 0x41, 0xA2, 0x02, 0x00, 0x42, +/* 00008220 */ 0xA2, 0x02, 0x00, 0x8D, 0xA2, 0x02, 0x00, 0xD4, 0xA2, 0x02, 0x00, 0x0C, 0xA3, 0x02, 0x00, 0x7D, +/* 00008230 */ 0xA3, 0x02, 0x00, 0x97, 0xA3, 0x02, 0x00, 0x98, 0xA3, 0x02, 0x00, 0xE3, 0xA3, 0x02, 0x00, 0x4A, +/* 00008240 */ 0xA4, 0x02, 0x00, 0xBB, 0xA4, 0x02, 0x00, 0xD5, 0xA4, 0x02, 0x00, 0xD6, 0xA4, 0x02, 0x00, 0x11, +/* 00008250 */ 0xA5, 0x02, 0x00, 0x4F, 0xA5, 0x02, 0x00, 0x63, 0xA5, 0x02, 0x00, 0x64, 0xA5, 0x02, 0x00, 0xB8, +/* 00008260 */ 0xA5, 0x02, 0x00, 0xF0, 0xA5, 0x02, 0x00, 0x28, 0xA6, 0x02, 0x00, 0xA2, 0xA6, 0x02, 0x00, 0xBC, +/* 00008270 */ 0xA6, 0x02, 0x00, 0x07, 0xA7, 0x02, 0x00, 0x6E, 0xA7, 0x02, 0x00, 0xE8, 0xA7, 0x02, 0x00, 0x02, +/* 00008280 */ 0xA8, 0x02, 0x00, 0x34, 0xA8, 0x02, 0x00, 0x6F, 0xA8, 0x02, 0x00, 0xC6, 0xA8, 0x02, 0x00, 0x2B, +/* 00008290 */ 0xA9, 0x02, 0x00, 0x6A, 0xA9, 0x02, 0x00, 0xA5, 0xA9, 0x02, 0x00, 0xE2, 0xA9, 0x02, 0x00, 0x17, +/* 000082A0 */ 0xAA, 0x02, 0x00, 0x4E, 0xAA, 0x02, 0x00, 0x87, 0xAA, 0x02, 0x00, 0xBC, 0xAA, 0x02, 0x00, 0xF3, +/* 000082B0 */ 0xAA, 0x02, 0x00, 0x2E, 0xAB, 0x02, 0x00, 0x69, 0xAB, 0x02, 0x00, 0xAF, 0xAB, 0x02, 0x00, 0xD0, +/* 000082C0 */ 0xAB, 0x02, 0x00, 0x0E, 0xAC, 0x02, 0x00, 0x80, 0xAC, 0x02, 0x00, 0x22, 0xAD, 0x02, 0x00, 0x5E, +/* 000082D0 */ 0xAD, 0x02, 0x00, 0x7C, 0xAD, 0x02, 0x00, 0xA6, 0xAD, 0x02, 0x00, 0xEE, 0xAD, 0x02, 0x00, 0x3B, +/* 000082E0 */ 0xAE, 0x02, 0x00, 0x4F, 0xAE, 0x02, 0x00, 0x50, 0xAE, 0x02, 0x00, 0xEE, 0xAE, 0x02, 0x00, 0xEF, +/* 000082F0 */ 0xAE, 0x02, 0x00, 0x16, 0xAF, 0x02, 0x00, 0x24, 0xAF, 0x02, 0x00, 0x2E, 0xAF, 0x02, 0x00, 0x7F, +/* 00008300 */ 0xAF, 0x02, 0x00, 0x99, 0xAF, 0x02, 0x00, 0xA3, 0xAF, 0x02, 0x00, 0xA4, 0xAF, 0x02, 0x00, 0xD5, +/* 00008310 */ 0xAF, 0x02, 0x00, 0xF4, 0xAF, 0x02, 0x00, 0x70, 0xB0, 0x02, 0x00, 0xF4, 0xB0, 0x02, 0x00, 0x7C, +/* 00008320 */ 0xB1, 0x02, 0x00, 0x0E, 0xB2, 0x02, 0x00, 0x14, 0xB2, 0x02, 0x00, 0x15, 0xB2, 0x02, 0x00, 0x2A, +/* 00008330 */ 0xB2, 0x02, 0x00, 0x2E, 0xB2, 0x02, 0x00, 0x00, 0xC7, 0x73, 0x0C, 0x00, 0x00, 0x00, 0x10, 0x08, +/* 00008340 */ 0x00, 0xA8, 0x41, 0xC0, 0x00, 0xFE, 0xD9, 0x02, 0x00, 0xFE, 0xBC, 0x01, 0xFE, 0xBC, 0x01, 0x01, +/* 00008350 */ 0x40, 0xFE, 0x00, 0x90, 0xFE, 0xBC, 0x01, 0xFF, 0x72, 0xB0, 0x02, 0x00, 0xFF, 0x72, 0xB0, 0x02, +/* 00008360 */ 0x00, 0x01, 0x04, 0x04, 0x04, 0x04, 0x03, 0x05, 0xFE, 0xDA, 0x02, 0x0A, 0x07, 0xA8, 0x00, 0xD6, +/* 00008370 */ 0x00, 0x04, 0x24, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x83, 0x00, 0x00, 0x7F, +/* 00008380 */ 0x1D, 0x00, 0xC1, 0x53, 0x5A, 0x4B, 0x04, 0x08, 0x01, 0xA2, 0x41, 0xD1, 0x00, 0x01, 0xFE, 0xDC, +/* 00008390 */ 0x01, 0xFE, 0xDC, 0x01, 0x5B, 0x40, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, 0xDC, 0x01, 0xFF, 0x4F, +/* 000083A0 */ 0xB0, 0x02, 0x00, 0xFF, 0x4F, 0xB0, 0x02, 0x00, 0x35, 0xFE, 0xDB, 0x02, 0xFE, 0x14, 0x02, 0xFE, +/* 000083B0 */ 0xDC, 0x02, 0xFE, 0xDD, 0x02, 0xFE, 0xDE, 0x02, 0xBB, 0x58, 0xFE, 0x11, 0x01, 0xFE, 0x39, 0x01, +/* 000083C0 */ 0xFE, 0x0B, 0x01, 0xFE, 0x5C, 0x01, 0x6B, 0x7F, 0xFE, 0xDF, 0x02, 0xD7, 0xFE, 0xE0, 0x02, 0xFE, +/* 000083D0 */ 0xE1, 0x02, 0xFE, 0xE2, 0x02, 0xFE, 0xE3, 0x02, 0xFE, 0xE4, 0x02, 0xFE, 0xE5, 0x02, 0xFE, 0xE6, +/* 000083E0 */ 0x02, 0xFE, 0xE7, 0x02, 0xFE, 0xE8, 0x02, 0xFE, 0xE9, 0x02, 0xFE, 0xEA, 0x02, 0xFE, 0xEB, 0x02, +/* 000083F0 */ 0xFE, 0xEC, 0x02, 0xFE, 0xED, 0x02, 0xFE, 0xEE, 0x02, 0xC1, 0xC4, 0xFE, 0xEF, 0x02, 0xFE, 0xF0, +/* 00008400 */ 0x02, 0xFE, 0xF1, 0x02, 0xFE, 0xF2, 0x02, 0xFE, 0xF4, 0x01, 0xFE, 0xF3, 0x01, 0xFE, 0xF3, 0x02, +/* 00008410 */ 0xFE, 0xF4, 0x02, 0xFE, 0xF5, 0x02, 0xFE, 0xF6, 0x02, 0xFE, 0xF7, 0x02, 0xFE, 0xF8, 0x02, 0xFE, +/* 00008420 */ 0x12, 0x02, 0xFE, 0xF9, 0x02, 0xFE, 0xFA, 0x02, 0xFE, 0xFB, 0x02, 0xFE, 0xFC, 0x02, 0xFE, 0xFD, +/* 00008430 */ 0x02, 0xFE, 0xFE, 0x02, 0xFE, 0xFF, 0x02, 0xFE, 0x00, 0x03, 0x1E, 0x53, 0x6B, 0x09, 0xFE, 0x9D, +/* 00008440 */ 0x03, 0xFE, 0x92, 0x03, 0x16, 0xA0, 0xA0, 0xA0, 0xA0, 0x1B, 0x02, 0x68, 0x69, 0x6A, 0x6B, 0x08, +/* 00008450 */ 0x0B, 0x06, 0xFE, 0xFE, 0x02, 0x06, 0xFE, 0x01, 0x03, 0x06, 0xFE, 0x02, 0x03, 0x06, 0xFE, 0x03, +/* 00008460 */ 0x03, 0x06, 0xFE, 0x04, 0x03, 0x07, 0x06, 0xFE, 0x05, 0x03, 0x06, 0xFE, 0x06, 0x03, 0x06, 0xFE, +/* 00008470 */ 0x07, 0x03, 0x06, 0xFE, 0x08, 0x03, 0x06, 0xFE, 0x09, 0x03, 0x06, 0xFE, 0x0A, 0x03, 0x06, 0xFE, +/* 00008480 */ 0x0B, 0x03, 0x06, 0xFE, 0x0C, 0x03, 0x06, 0xFE, 0x0D, 0x03, 0x06, 0xFE, 0x0E, 0x03, 0x06, 0xFE, +/* 00008490 */ 0x0F, 0x03, 0x06, 0xFE, 0x10, 0x03, 0x06, 0xFE, 0x11, 0x03, 0x06, 0xFE, 0x12, 0x03, 0x06, 0xFE, +/* 000084A0 */ 0x13, 0x03, 0x06, 0xFE, 0x14, 0x03, 0x06, 0xFE, 0x15, 0x03, 0x06, 0xFE, 0x16, 0x03, 0x06, 0xFE, +/* 000084B0 */ 0x17, 0x03, 0x06, 0xFE, 0x18, 0x03, 0x06, 0xFE, 0x19, 0x03, 0x06, 0xFE, 0x1A, 0x03, 0x06, 0xFE, +/* 000084C0 */ 0x1B, 0x03, 0x06, 0xFE, 0x1C, 0x03, 0x06, 0xFE, 0x1D, 0x03, 0x06, 0xFE, 0x1E, 0x03, 0x06, 0xFE, +/* 000084D0 */ 0x1F, 0x03, 0x06, 0xFE, 0x20, 0x03, 0x06, 0xFE, 0x21, 0x03, 0x06, 0xFE, 0x22, 0x03, 0x06, 0xFE, +/* 000084E0 */ 0x23, 0x03, 0x06, 0xFE, 0x24, 0x03, 0x06, 0xFE, 0x25, 0x03, 0x06, 0xFE, 0x26, 0x03, 0x06, 0xFE, +/* 000084F0 */ 0x27, 0x03, 0x05, 0xFE, 0x28, 0x03, 0x06, 0xFE, 0x29, 0x03, 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, +/* 00008500 */ 0x2B, 0x03, 0x06, 0xFE, 0x2C, 0x03, 0x0C, 0x06, 0xFE, 0x2D, 0x03, 0x06, 0xFE, 0x2E, 0x03, 0x06, +/* 00008510 */ 0xFE, 0x2F, 0x03, 0x06, 0xFE, 0x30, 0x03, 0x06, 0xFE, 0x31, 0x03, 0x06, 0xFE, 0x32, 0x03, 0x05, +/* 00008520 */ 0xFE, 0x33, 0x03, 0x05, 0xFE, 0x34, 0x03, 0x05, 0xFE, 0x35, 0x03, 0x05, 0xFE, 0x36, 0x03, 0x06, +/* 00008530 */ 0xFE, 0x37, 0x03, 0x06, 0xFE, 0x38, 0x03, 0x06, 0xFE, 0x39, 0x03, 0x06, 0xFE, 0x3A, 0x03, 0x05, +/* 00008540 */ 0xFE, 0x3B, 0x03, 0x06, 0xFE, 0x3C, 0x03, 0x06, 0xFE, 0x3D, 0x03, 0x06, 0xFE, 0x3E, 0x03, 0x05, +/* 00008550 */ 0xFE, 0x3F, 0x03, 0x06, 0xFE, 0x40, 0x03, 0x06, 0xFE, 0x41, 0x03, 0x05, 0xFE, 0x42, 0x03, 0x06, +/* 00008560 */ 0xFE, 0x43, 0x03, 0x06, 0xFE, 0x44, 0x03, 0x05, 0xFE, 0x45, 0x03, 0x06, 0xFE, 0x46, 0x03, 0x06, +/* 00008570 */ 0xFE, 0x47, 0x03, 0x06, 0xFE, 0x48, 0x03, 0x06, 0xFE, 0x49, 0x03, 0x06, 0xFE, 0x4A, 0x03, 0x06, +/* 00008580 */ 0xFE, 0x4B, 0x03, 0x06, 0xFE, 0x4C, 0x03, 0xFE, 0xAF, 0x0D, 0x96, 0x32, 0x54, 0xA8, 0x62, 0xA8, +/* 00008590 */ 0x63, 0xA8, 0x67, 0xD6, 0x01, 0x55, 0x96, 0x02, 0x55, 0x4E, 0x5F, 0x4E, 0x61, 0x4E, 0x64, 0xA8, +/* 000085A0 */ 0x56, 0xA8, 0x57, 0x4E, 0x60, 0x4E, 0x65, 0x4E, 0x66, 0xA8, 0x58, 0xA8, 0x59, 0xA8, 0x5A, 0xA8, +/* 000085B0 */ 0x5B, 0xA8, 0x5C, 0xA8, 0x5D, 0xA8, 0x5E, 0x4E, 0x6D, 0x96, 0x33, 0x6D, 0x4E, 0x6D, 0x96, 0x34, +/* 000085C0 */ 0x6D, 0x4E, 0x6D, 0x96, 0x35, 0x6D, 0x4E, 0x6D, 0x96, 0x36, 0x6D, 0x5E, 0x6D, 0x53, 0x00, 0x96, +/* 000085D0 */ 0x03, 0x6D, 0x92, 0x03, 0x6D, 0x76, 0x03, 0x6D, 0x01, 0x92, 0x03, 0x6E, 0x5E, 0x6E, 0x6E, 0x02, +/* 000085E0 */ 0xAD, 0x6D, 0x0F, 0x02, 0x00, 0x6E, 0xAC, 0x6D, 0x96, 0x33, 0x6D, 0x92, 0x03, 0x6D, 0x5E, 0x6D, +/* 000085F0 */ 0x6D, 0x03, 0x45, 0x5F, 0x6D, 0x96, 0x34, 0x04, 0x92, 0x03, 0x6D, 0x5E, 0x6D, 0x6D, 0x04, 0x96, +/* 00008600 */ 0x04, 0x6D, 0x92, 0x03, 0x6D, 0x5E, 0x6D, 0x6D, 0x05, 0x96, 0x05, 0x6D, 0x92, 0x03, 0x6D, 0x5E, +/* 00008610 */ 0x6D, 0x6D, 0x06, 0x96, 0x06, 0x6D, 0xD6, 0x00, 0x6D, 0x96, 0x35, 0x6D, 0x92, 0x03, 0x6D, 0x5E, +/* 00008620 */ 0x6D, 0x6D, 0x07, 0x96, 0x07, 0x6D, 0x92, 0x03, 0x6D, 0x5E, 0x6D, 0x6D, 0x08, 0x96, 0x08, 0x6D, +/* 00008630 */ 0x92, 0x03, 0x6D, 0x5E, 0x6D, 0x6D, 0x09, 0x96, 0x09, 0x6D, 0x92, 0x03, 0x6D, 0x5E, 0x6D, 0x6D, +/* 00008640 */ 0x0A, 0x96, 0x0A, 0x6D, 0x92, 0x03, 0x6D, 0x5E, 0x6D, 0x6D, 0x0B, 0x96, 0x0B, 0x6D, 0x92, 0x03, +/* 00008650 */ 0x6D, 0x5E, 0x6D, 0x6D, 0x0C, 0x96, 0x0C, 0x6D, 0x92, 0x03, 0x6D, 0x5E, 0x6D, 0x6D, 0x0D, 0x96, +/* 00008660 */ 0x0D, 0x6D, 0x92, 0x03, 0x6D, 0x5E, 0x6D, 0x6D, 0x0E, 0x96, 0x0E, 0x6D, 0x92, 0x03, 0x6D, 0x5E, +/* 00008670 */ 0x6D, 0x6D, 0x0F, 0x96, 0x0F, 0x6D, 0x92, 0x04, 0x6D, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0xCE, +/* 00008680 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x92, 0x03, 0x6F, 0x5E, +/* 00008690 */ 0x6F, 0x6F, 0x10, 0x7A, 0x6F, 0x6E, 0x11, 0x92, 0x03, 0x6F, 0x5E, 0x6F, 0x6F, 0x12, 0x7A, 0x6F, +/* 000086A0 */ 0x6E, 0x13, 0x92, 0x03, 0x6F, 0x5E, 0x6F, 0x6F, 0x14, 0x7A, 0x6F, 0x6E, 0x15, 0x92, 0x03, 0x6F, +/* 000086B0 */ 0x5E, 0x6F, 0x6F, 0x16, 0x7A, 0x6F, 0x6E, 0x17, 0x59, 0x01, 0x6E, 0x59, 0x02, 0x09, 0x1F, 0x03, +/* 000086C0 */ 0x6D, 0x6D, 0x96, 0x10, 0x6D, 0x92, 0x03, 0x6D, 0x5E, 0x6D, 0x6D, 0x18, 0x96, 0x11, 0x6D, 0x92, +/* 000086D0 */ 0x03, 0x6D, 0x5E, 0x6D, 0x6D, 0x19, 0x96, 0x12, 0x6D, 0x92, 0x03, 0x6D, 0x5E, 0x6D, 0x6D, 0x1A, +/* 000086E0 */ 0x96, 0x13, 0x6D, 0x92, 0x03, 0x6D, 0x5E, 0x6D, 0x6D, 0x1B, 0x96, 0x14, 0x6D, 0x92, 0x03, 0x6D, +/* 000086F0 */ 0x5E, 0x6D, 0x6D, 0x1C, 0x96, 0x15, 0x6D, 0xD6, 0x02, 0x6D, 0x96, 0x16, 0x6D, 0x92, 0x03, 0x6D, +/* 00008700 */ 0x5E, 0x6D, 0x6D, 0x1D, 0x96, 0x17, 0x6D, 0x92, 0x03, 0x6D, 0x5E, 0x6D, 0x6D, 0x1E, 0x96, 0x18, +/* 00008710 */ 0x6D, 0x92, 0x03, 0x6D, 0x5E, 0x6D, 0x6D, 0x1F, 0x96, 0x19, 0x6D, 0x92, 0x03, 0x6D, 0x5E, 0x6D, +/* 00008720 */ 0x6D, 0x20, 0x96, 0x1A, 0x6D, 0x92, 0x03, 0x6D, 0x5E, 0x6D, 0x6D, 0x21, 0x96, 0x1B, 0x6D, 0x92, +/* 00008730 */ 0x03, 0x6D, 0x5E, 0x6D, 0x6D, 0x22, 0x96, 0x1C, 0x6D, 0x92, 0x03, 0x6D, 0x5E, 0x6D, 0x6D, 0x23, +/* 00008740 */ 0x96, 0x1D, 0x6D, 0x92, 0x03, 0x6D, 0x5E, 0x6D, 0x6D, 0x24, 0x96, 0x1E, 0x6D, 0x92, 0x03, 0x6D, +/* 00008750 */ 0x5E, 0x6D, 0x6D, 0x25, 0x96, 0x1F, 0x6D, 0x92, 0x03, 0x6D, 0x5E, 0x6D, 0x6D, 0x26, 0x96, 0x20, +/* 00008760 */ 0x6D, 0x92, 0x03, 0x6D, 0x5E, 0x6D, 0x6D, 0x27, 0x96, 0x21, 0x6D, 0xCE, 0x18, 0x00, 0x00, 0x00, +/* 00008770 */ 0x01, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x00, 0x00, 0xD9, 0x03, 0x6E, 0x6D, 0x7A, 0x6E, 0x6D, 0x28, +/* 00008780 */ 0xD9, 0x04, 0x6E, 0x6D, 0x7A, 0x6E, 0x6D, 0x29, 0xD9, 0x05, 0x6E, 0x6D, 0x7A, 0x6E, 0x6D, 0x2A, +/* 00008790 */ 0xD9, 0x06, 0x6E, 0x6D, 0x7A, 0x6E, 0x6D, 0x2B, 0xD9, 0x07, 0x6E, 0x6D, 0x7A, 0x6E, 0x6D, 0x2C, +/* 000087A0 */ 0xD9, 0x08, 0x6E, 0x6D, 0x7A, 0x6E, 0x6D, 0x2D, 0xD9, 0x09, 0x6E, 0x6D, 0x7A, 0x6E, 0x6D, 0x2E, +/* 000087B0 */ 0xD9, 0x0A, 0x6E, 0x6D, 0x7A, 0x6E, 0x6D, 0x2F, 0xD9, 0x0B, 0x6E, 0x6D, 0x7A, 0x6E, 0x6D, 0x30, +/* 000087C0 */ 0xD9, 0x0C, 0x6E, 0x6D, 0x7A, 0x6E, 0x6D, 0x31, 0xD9, 0x0D, 0x6E, 0x6D, 0x7A, 0x6E, 0x6D, 0x32, +/* 000087D0 */ 0xD9, 0x0E, 0x6E, 0x6D, 0x7A, 0x6E, 0x6D, 0x33, 0xD9, 0x0F, 0x6E, 0x6D, 0x7A, 0x6E, 0x6D, 0x34, +/* 000087E0 */ 0xD9, 0x10, 0x6E, 0x6D, 0x7A, 0x6E, 0x6D, 0x35, 0xD9, 0x11, 0x6E, 0x6D, 0x7A, 0x6E, 0x6D, 0x36, +/* 000087F0 */ 0xD9, 0x12, 0x6E, 0x6D, 0x7A, 0x6E, 0x6D, 0x37, 0xD9, 0x13, 0x6E, 0x6D, 0x7A, 0x6E, 0x6D, 0x38, +/* 00008800 */ 0x92, 0x03, 0x6E, 0x5E, 0x6E, 0x6E, 0x39, 0x7A, 0x6E, 0x6D, 0x3A, 0xD9, 0x14, 0x6E, 0x6D, 0x7A, +/* 00008810 */ 0x6E, 0x6D, 0x3B, 0xD9, 0x15, 0x6E, 0x6D, 0x7A, 0x6E, 0x6D, 0x3C, 0x92, 0x03, 0x6E, 0x5E, 0x6E, +/* 00008820 */ 0x6E, 0x3D, 0x7A, 0x6E, 0x6D, 0x3E, 0xD9, 0x16, 0x6E, 0x6D, 0x7A, 0x6E, 0x6D, 0x3F, 0xD9, 0x17, +/* 00008830 */ 0x6E, 0x6D, 0x7A, 0x6E, 0x6D, 0x40, 0x92, 0x03, 0x6E, 0x5E, 0x6E, 0x6E, 0x41, 0x7A, 0x6E, 0x6D, +/* 00008840 */ 0x42, 0xD9, 0x18, 0x6E, 0x6D, 0x7A, 0x6E, 0x6D, 0x43, 0x92, 0x03, 0x6E, 0x5E, 0x6E, 0x6E, 0x44, +/* 00008850 */ 0x7A, 0x6E, 0x6D, 0x45, 0x92, 0x03, 0x6E, 0x5E, 0x6E, 0x6E, 0x46, 0x7A, 0x6E, 0x6D, 0x47, 0x92, +/* 00008860 */ 0x03, 0x6E, 0x5E, 0x6E, 0x6E, 0x48, 0x7A, 0x6E, 0x6D, 0x49, 0x92, 0x03, 0x6E, 0x5E, 0x6E, 0x6E, +/* 00008870 */ 0x4A, 0x7A, 0x6E, 0x6D, 0x4B, 0xD9, 0x19, 0x6E, 0x6D, 0x7A, 0x6E, 0x6D, 0x4C, 0xD9, 0x1A, 0x6E, +/* 00008880 */ 0x6D, 0x7A, 0x6E, 0x6D, 0x4D, 0xD9, 0x1B, 0x6E, 0x6D, 0x7A, 0x6E, 0x6D, 0x4E, 0x96, 0x36, 0x6D, +/* 00008890 */ 0x92, 0x33, 0x6D, 0x0E, 0xC8, 0x03, 0x6D, 0xE0, 0x00, 0x18, 0x03, 0xB9, 0x6D, 0x00, 0x01, 0x66, +/* 000088A0 */ 0x01, 0x2B, 0x56, 0x6D, 0x95, 0x00, 0x02, 0x56, 0x01, 0x66, 0x01, 0x2D, 0x57, 0x6D, 0x95, 0x00, +/* 000088B0 */ 0x03, 0x57, 0x4E, 0x6D, 0x95, 0x00, 0x04, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x05, 0x6D, 0x4E, 0x6D, +/* 000088C0 */ 0x95, 0x00, 0x06, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x07, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x08, 0x6D, +/* 000088D0 */ 0x4E, 0x6D, 0x95, 0x00, 0x09, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x0A, 0x6D, 0x4E, 0x6D, 0x95, 0x00, +/* 000088E0 */ 0x0B, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x0C, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x0D, 0x6D, 0x4E, 0x6D, +/* 000088F0 */ 0x95, 0x00, 0x0E, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x0F, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x10, 0x6D, +/* 00008900 */ 0x4E, 0x6D, 0x95, 0x00, 0x11, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x12, 0x6D, 0x4E, 0x6D, 0x95, 0x00, +/* 00008910 */ 0x13, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x14, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x15, 0x6D, 0x4E, 0x6D, +/* 00008920 */ 0x95, 0x00, 0x16, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x17, 0x6D, 0xA8, 0x6D, 0x95, 0x00, 0x04, 0x6D, +/* 00008930 */ 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x1C, 0x6D, 0x6E, 0x95, 0x00, 0x05, 0x6D, 0xB9, 0x6E, 0x00, +/* 00008940 */ 0x01, 0x66, 0x01, 0x1D, 0x6D, 0x6E, 0x96, 0x22, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x1E, +/* 00008950 */ 0x6D, 0x6E, 0x96, 0x23, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x1F, 0x6D, 0x6E, 0x95, 0x00, +/* 00008960 */ 0x06, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x20, 0x6D, 0x6E, 0x95, 0x00, 0x07, 0x6D, 0xB9, +/* 00008970 */ 0x6E, 0x00, 0x01, 0x66, 0x01, 0x21, 0x6D, 0x6E, 0x95, 0x00, 0x08, 0x6D, 0xB9, 0x6E, 0x00, 0x01, +/* 00008980 */ 0x66, 0x01, 0x22, 0x6D, 0x6E, 0x95, 0x00, 0x09, 0x6D, 0x90, 0x00, 0x09, 0x6D, 0x95, 0x00, 0x0A, +/* 00008990 */ 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x23, 0x6D, 0x6E, 0x95, 0x00, 0x0B, 0x6D, 0xB9, 0x6E, +/* 000089A0 */ 0x00, 0x01, 0x66, 0x01, 0x24, 0x6D, 0x6E, 0x95, 0x00, 0x0C, 0x6D, 0x92, 0x35, 0x6D, 0x07, 0x02, +/* 000089B0 */ 0x00, 0x59, 0x00, 0x02, 0xCE, 0xA0, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x00, +/* 000089C0 */ 0x00, 0xB9, 0x70, 0x00, 0x01, 0x6A, 0x01, 0x25, 0x6F, 0x70, 0x6E, 0x7A, 0x6F, 0x6E, 0x4F, 0xB9, +/* 000089D0 */ 0x70, 0x00, 0x01, 0x6A, 0x01, 0x26, 0x6F, 0x70, 0x6E, 0x7A, 0x6F, 0x6E, 0x50, 0xB9, 0x70, 0x00, +/* 000089E0 */ 0x01, 0x6A, 0x01, 0x27, 0x6F, 0x70, 0x6E, 0x7A, 0x6F, 0x6E, 0x51, 0xB9, 0x70, 0x00, 0x01, 0x6A, +/* 000089F0 */ 0x01, 0x28, 0x6F, 0x70, 0x6E, 0x7A, 0x6F, 0x6E, 0x52, 0xB9, 0x70, 0x00, 0x01, 0x6A, 0x01, 0x29, +/* 00008A00 */ 0x6F, 0x70, 0x6E, 0x7A, 0x6F, 0x6E, 0x53, 0xB9, 0x70, 0x00, 0x01, 0x6A, 0x01, 0x2A, 0x6F, 0x70, +/* 00008A10 */ 0x6E, 0x7A, 0x6F, 0x6E, 0x54, 0x59, 0x01, 0x6E, 0x1F, 0x02, 0x6D, 0x6D, 0x96, 0x24, 0x6D, 0xB9, +/* 00008A20 */ 0x6E, 0x00, 0x01, 0x66, 0x01, 0x2C, 0x6D, 0x6E, 0x95, 0x00, 0x0D, 0x6D, 0xA8, 0x6D, 0x95, 0x00, +/* 00008A30 */ 0x0E, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x2E, 0x6D, 0x6E, 0x07, 0x01, 0x00, 0x59, 0x00, +/* 00008A40 */ 0x02, 0x1F, 0x01, 0x6D, 0x6D, 0x95, 0x00, 0x0F, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x2F, +/* 00008A50 */ 0x6D, 0x6E, 0x95, 0x00, 0x10, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x30, 0x6D, 0x6E, 0x95, +/* 00008A60 */ 0x00, 0x11, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x31, 0x6D, 0x6E, 0x95, 0x00, 0x12, 0x6D, +/* 00008A70 */ 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x32, 0x6D, 0x6E, 0x95, 0x00, 0x13, 0x6D, 0x90, 0x00, 0x13, +/* 00008A80 */ 0x6D, 0x95, 0x00, 0x14, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x33, 0x6D, 0x6E, 0x95, 0x00, +/* 00008A90 */ 0x15, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x34, 0x6D, 0x6E, 0x95, 0x00, 0x16, 0x6D, 0x92, +/* 00008AA0 */ 0x32, 0x6D, 0x14, 0x03, 0x00, 0x6D, 0x2C, 0x09, 0x5A, 0x00, 0x90, 0x00, 0x06, 0x6D, 0x07, 0x03, +/* 00008AB0 */ 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x2D, 0xB9, 0x6F, 0x00, 0x01, 0x66, 0x01, 0x35, 0x6E, 0x6F, +/* 00008AC0 */ 0x59, 0x02, 0x6E, 0x1F, 0x03, 0x6D, 0x6D, 0x45, 0x60, 0x6D, 0x92, 0x36, 0x6E, 0x6C, 0x6D, 0x6E, +/* 00008AD0 */ 0x55, 0x07, 0x04, 0x00, 0x59, 0x00, 0x6E, 0x92, 0x07, 0x6F, 0x59, 0x01, 0x6F, 0x59, 0x02, 0x2E, +/* 00008AE0 */ 0xCE, 0xC0, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x00, 0x00, 0x7A, 0x60, 0x6F, +/* 00008AF0 */ 0x56, 0x7A, 0x03, 0x6F, 0x57, 0x7A, 0x32, 0x6F, 0x58, 0x7A, 0x03, 0x6F, 0x59, 0x59, 0x03, 0x6F, +/* 00008B00 */ 0x1F, 0x04, 0xFF, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x36, 0x6D, 0x6E, 0x95, 0x00, 0x17, +/* 00008B10 */ 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x37, 0x6D, 0x6E, 0x07, 0x01, 0x00, 0x59, 0x00, 0x02, +/* 00008B20 */ 0x1F, 0x01, 0x6D, 0x6D, 0x45, 0x61, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x38, 0x6D, 0x6E, +/* 00008B30 */ 0x07, 0x01, 0x00, 0x59, 0x00, 0x02, 0x1F, 0x01, 0x6D, 0x6D, 0x45, 0x62, 0x6D, 0xB9, 0x6E, 0x00, +/* 00008B40 */ 0x01, 0x66, 0x01, 0x39, 0x6D, 0x6E, 0x07, 0x01, 0x00, 0x59, 0x00, 0x02, 0x1F, 0x01, 0x6D, 0x6D, +/* 00008B50 */ 0x45, 0x63, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x3A, 0x6D, 0x6E, 0x07, 0x01, 0x00, 0x59, +/* 00008B60 */ 0x00, 0x02, 0x1F, 0x01, 0x6D, 0x6D, 0x45, 0x64, 0x6D, 0x92, 0x32, 0x6D, 0x14, 0x03, 0x00, 0x6D, +/* 00008B70 */ 0x2C, 0x09, 0xE8, 0x00, 0x92, 0x36, 0x6E, 0x6C, 0x6D, 0x6E, 0x5A, 0x07, 0x04, 0x00, 0x59, 0x00, +/* 00008B80 */ 0x6E, 0x92, 0x07, 0x6F, 0x59, 0x01, 0x6F, 0x59, 0x02, 0x34, 0xCE, 0xD8, 0x00, 0x00, 0x00, 0x04, +/* 00008B90 */ 0x00, 0x00, 0x00, 0x6F, 0x00, 0x00, 0x00, 0x7A, 0x61, 0x6F, 0x5B, 0x7A, 0x03, 0x6F, 0x5C, 0x7A, +/* 00008BA0 */ 0x32, 0x6F, 0x5D, 0x7A, 0x03, 0x6F, 0x5E, 0x59, 0x03, 0x6F, 0x1F, 0x04, 0xFF, 0x6D, 0x92, 0x36, +/* 00008BB0 */ 0x6E, 0x6C, 0x6D, 0x6E, 0x5F, 0x07, 0x04, 0x00, 0x59, 0x00, 0x6E, 0x92, 0x07, 0x6F, 0x59, 0x01, +/* 00008BC0 */ 0x6F, 0x59, 0x02, 0x35, 0xCE, 0xF0, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x00, +/* 00008BD0 */ 0x00, 0x7A, 0x62, 0x6F, 0x60, 0x7A, 0x03, 0x6F, 0x61, 0x7A, 0x32, 0x6F, 0x62, 0x7A, 0x03, 0x6F, +/* 00008BE0 */ 0x63, 0x59, 0x03, 0x6F, 0x1F, 0x04, 0xFF, 0x6D, 0x92, 0x36, 0x6E, 0x6C, 0x6D, 0x6E, 0x64, 0x07, +/* 00008BF0 */ 0x04, 0x00, 0x59, 0x00, 0x6E, 0x92, 0x07, 0x6F, 0x59, 0x01, 0x6F, 0x59, 0x02, 0x36, 0xCE, 0x08, +/* 00008C00 */ 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x00, 0x00, 0x7A, 0x63, 0x6F, 0x65, 0x7A, +/* 00008C10 */ 0x03, 0x6F, 0x66, 0x7A, 0x32, 0x6F, 0x67, 0x7A, 0x03, 0x6F, 0x68, 0x59, 0x03, 0x6F, 0x1F, 0x04, +/* 00008C20 */ 0xFF, 0x6D, 0x92, 0x36, 0x6E, 0x6C, 0x6D, 0x6E, 0x69, 0x07, 0x04, 0x00, 0x59, 0x00, 0x6E, 0x92, +/* 00008C30 */ 0x07, 0x6F, 0x59, 0x01, 0x6F, 0x59, 0x02, 0x37, 0xCE, 0x20, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, +/* 00008C40 */ 0x00, 0x6F, 0x00, 0x00, 0x00, 0x7A, 0x64, 0x6F, 0x6A, 0x7A, 0x03, 0x6F, 0x6B, 0x7A, 0x32, 0x6F, +/* 00008C50 */ 0x6C, 0x7A, 0x03, 0x6F, 0x6D, 0x59, 0x03, 0x6F, 0x1F, 0x04, 0xFF, 0x6D, 0x09, 0xD6, 0x06, 0xE0, +/* 00008C60 */ 0x00, 0x1A, 0x06, 0xB9, 0x6D, 0x00, 0x01, 0x66, 0x01, 0x48, 0x58, 0x6D, 0x95, 0x00, 0x02, 0x58, +/* 00008C70 */ 0x01, 0x66, 0x01, 0x49, 0x59, 0x6D, 0x95, 0x00, 0x03, 0x59, 0x01, 0x66, 0x01, 0x4A, 0x5A, 0x6D, +/* 00008C80 */ 0x95, 0x00, 0x04, 0x5A, 0x01, 0x66, 0x01, 0x4B, 0x5B, 0x6D, 0x95, 0x00, 0x05, 0x5B, 0x01, 0x66, +/* 00008C90 */ 0x01, 0x4C, 0x5C, 0x6D, 0x95, 0x00, 0x06, 0x5C, 0x01, 0x66, 0x01, 0x4D, 0x5D, 0x6D, 0x95, 0x00, +/* 00008CA0 */ 0x07, 0x5D, 0x01, 0x66, 0x01, 0x4E, 0x5E, 0x6D, 0x95, 0x00, 0x08, 0x5E, 0x4E, 0x6D, 0x95, 0x00, +/* 00008CB0 */ 0x09, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x0A, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x0B, 0x6D, 0x4E, 0x6D, +/* 00008CC0 */ 0x95, 0x00, 0x0C, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x0D, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x0E, 0x6D, +/* 00008CD0 */ 0x4E, 0x6D, 0x95, 0x00, 0x0F, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x10, 0x6D, 0x4E, 0x6D, 0x95, 0x00, +/* 00008CE0 */ 0x11, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x12, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x13, 0x6D, 0x4E, 0x6D, +/* 00008CF0 */ 0x95, 0x00, 0x14, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x15, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x16, 0x6D, +/* 00008D00 */ 0x4E, 0x6D, 0x95, 0x00, 0x17, 0x6D, 0x4E, 0x6D, 0x95, 0x00, 0x18, 0x6D, 0x4E, 0x6D, 0x95, 0x00, +/* 00008D10 */ 0x19, 0x6D, 0x92, 0x03, 0x6D, 0x5E, 0x6D, 0x6D, 0x6E, 0xA8, 0x6E, 0x14, 0x03, 0x00, 0x6D, 0x6E, +/* 00008D20 */ 0x09, 0x11, 0x00, 0x92, 0x03, 0x6D, 0x92, 0x02, 0x6E, 0x07, 0x01, 0x00, 0xC4, 0x01, 0x6E, 0x6E, +/* 00008D30 */ 0x76, 0x6E, 0x6D, 0x6F, 0x92, 0x03, 0x6D, 0x5E, 0x6D, 0x6D, 0x70, 0xA8, 0x6E, 0x14, 0x03, 0x00, +/* 00008D40 */ 0x6D, 0x6E, 0x09, 0x11, 0x00, 0x92, 0x03, 0x6D, 0x92, 0x02, 0x6E, 0x07, 0x01, 0x00, 0xC4, 0x01, +/* 00008D50 */ 0x6E, 0x6E, 0x76, 0x6E, 0x6D, 0x71, 0xA8, 0x6D, 0x95, 0x00, 0x09, 0x6D, 0xB9, 0x6E, 0x00, 0x01, +/* 00008D60 */ 0x66, 0x01, 0x3B, 0x6D, 0x6E, 0x95, 0x00, 0x0A, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x3C, +/* 00008D70 */ 0x6D, 0x6E, 0x95, 0x00, 0x0B, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x3D, 0x6D, 0x6E, 0x95, +/* 00008D80 */ 0x00, 0x0C, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x3E, 0x6D, 0x6E, 0x96, 0x25, 0x6D, 0xB9, +/* 00008D90 */ 0x6E, 0x00, 0x01, 0x66, 0x01, 0x3F, 0x6D, 0x6E, 0x96, 0x22, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, +/* 00008DA0 */ 0x01, 0x40, 0x6D, 0x6E, 0x96, 0x23, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x41, 0x6D, 0x6E, +/* 00008DB0 */ 0x96, 0x26, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x42, 0x6D, 0x6E, 0x96, 0x27, 0x6D, 0xB9, +/* 00008DC0 */ 0x6E, 0x00, 0x01, 0x66, 0x01, 0x43, 0x6D, 0x6E, 0x96, 0x28, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, +/* 00008DD0 */ 0x01, 0x44, 0x6D, 0x6E, 0x96, 0x29, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x45, 0x6D, 0x6E, +/* 00008DE0 */ 0x96, 0x2A, 0x6D, 0xA8, 0x6D, 0x95, 0x00, 0x0D, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x46, +/* 00008DF0 */ 0x6D, 0x6E, 0x96, 0x2B, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x47, 0x6D, 0x6E, 0x07, 0x01, +/* 00008E00 */ 0x00, 0x59, 0x00, 0x02, 0x1F, 0x01, 0x6D, 0x6D, 0x96, 0x24, 0x6D, 0xA8, 0x6D, 0x95, 0x00, 0x0E, +/* 00008E10 */ 0x6D, 0xA8, 0x6D, 0x95, 0x00, 0x0F, 0x6D, 0xA8, 0x6D, 0x95, 0x00, 0x10, 0x6D, 0xA8, 0x6D, 0x95, +/* 00008E20 */ 0x00, 0x11, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x4F, 0x6D, 0x6E, 0x96, 0x2C, 0x6D, 0xB9, +/* 00008E30 */ 0x6E, 0x00, 0x01, 0x66, 0x01, 0x50, 0x6D, 0x6E, 0x96, 0x2D, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, +/* 00008E40 */ 0x01, 0x51, 0x6D, 0x6E, 0x96, 0x2E, 0x6D, 0x92, 0x04, 0x6D, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, +/* 00008E50 */ 0xCD, 0x6E, 0x59, 0x01, 0x6E, 0x59, 0x02, 0x09, 0x1F, 0x03, 0x6D, 0x6D, 0x45, 0x65, 0x6D, 0x92, +/* 00008E60 */ 0x03, 0x6E, 0x6C, 0x6D, 0x6E, 0x72, 0x07, 0x03, 0x00, 0x59, 0x00, 0x6E, 0x59, 0x01, 0x65, 0x92, +/* 00008E70 */ 0x04, 0x6F, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0xCE, 0x38, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, +/* 00008E80 */ 0x00, 0x70, 0x00, 0x00, 0x00, 0x7A, 0x39, 0x70, 0x73, 0x59, 0x01, 0x70, 0x59, 0x02, 0x09, 0x1F, +/* 00008E90 */ 0x03, 0x6F, 0x6F, 0x59, 0x02, 0x6F, 0x1F, 0x03, 0xFF, 0x6D, 0x95, 0x00, 0x12, 0x3A, 0x92, 0x06, +/* 00008EA0 */ 0x6D, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x92, 0x1A, 0x6E, 0x59, 0x01, 0x6E, 0x92, 0x23, 0x6E, +/* 00008EB0 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x90, 0x00, 0x12, 0x6F, 0x59, 0x01, 0x6F, 0xB9, 0x70, 0x00, +/* 00008EC0 */ 0x01, 0x66, 0x01, 0x52, 0x6F, 0x70, 0x59, 0x02, 0x6F, 0x1F, 0x03, 0x6E, 0x6E, 0x59, 0x02, 0x6E, +/* 00008ED0 */ 0x59, 0x03, 0x65, 0x1F, 0x04, 0x6D, 0x6D, 0x95, 0x00, 0x13, 0x6D, 0x95, 0x00, 0x14, 0x3B, 0x92, +/* 00008EE0 */ 0x06, 0x6D, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x92, 0x1A, 0x6E, 0x59, 0x01, 0x6E, 0x92, 0x23, +/* 00008EF0 */ 0x6E, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x90, 0x00, 0x14, 0x6F, 0x59, 0x01, 0x6F, 0xB9, 0x70, +/* 00008F00 */ 0x00, 0x01, 0x66, 0x01, 0x53, 0x6F, 0x70, 0x59, 0x02, 0x6F, 0x1F, 0x03, 0x6E, 0x6E, 0x59, 0x02, +/* 00008F10 */ 0x6E, 0x59, 0x03, 0x65, 0x1F, 0x04, 0x6D, 0x6D, 0x95, 0x00, 0x15, 0x6D, 0x95, 0x00, 0x16, 0x3C, +/* 00008F20 */ 0x92, 0x06, 0x6D, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x92, 0x1A, 0x6E, 0x59, 0x01, 0x6E, 0x92, +/* 00008F30 */ 0x23, 0x6E, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x90, 0x00, 0x16, 0x6F, 0x59, 0x01, 0x6F, 0xB9, +/* 00008F40 */ 0x70, 0x00, 0x01, 0x66, 0x01, 0x54, 0x6F, 0x70, 0x59, 0x02, 0x6F, 0x1F, 0x03, 0x6E, 0x6E, 0x59, +/* 00008F50 */ 0x02, 0x6E, 0x59, 0x03, 0x65, 0x1F, 0x04, 0x6D, 0x6D, 0x95, 0x00, 0x17, 0x6D, 0x95, 0x00, 0x18, +/* 00008F60 */ 0x2D, 0x92, 0x06, 0x6D, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x92, 0x1A, 0x6E, 0x59, 0x01, 0x6E, +/* 00008F70 */ 0x92, 0x23, 0x6E, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x90, 0x00, 0x18, 0x6F, 0x59, 0x01, 0x6F, +/* 00008F80 */ 0xB9, 0x70, 0x00, 0x01, 0x66, 0x01, 0x55, 0x6F, 0x70, 0x59, 0x02, 0x6F, 0x1F, 0x03, 0x6E, 0x6E, +/* 00008F90 */ 0x59, 0x02, 0x6E, 0x59, 0x03, 0x65, 0x1F, 0x04, 0x6D, 0x6D, 0x45, 0x66, 0x6D, 0x92, 0x16, 0x6D, +/* 00008FA0 */ 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x90, 0x00, 0x13, 0x6E, 0x59, 0x01, 0x6E, 0x59, 0x02, 0x3D, +/* 00008FB0 */ 0xCE, 0x44, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x7A, 0x3E, 0x6E, +/* 00008FC0 */ 0x74, 0x59, 0x03, 0x6E, 0x1F, 0x04, 0xFF, 0x6D, 0x92, 0x16, 0x6D, 0x07, 0x04, 0x00, 0x59, 0x00, +/* 00008FD0 */ 0x02, 0x90, 0x00, 0x15, 0x6E, 0x59, 0x01, 0x6E, 0x59, 0x02, 0x3D, 0xCE, 0x50, 0x01, 0x00, 0x00, +/* 00008FE0 */ 0x0A, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x7A, 0x3E, 0x6E, 0x75, 0x59, 0x03, 0x6E, 0x1F, +/* 00008FF0 */ 0x04, 0xFF, 0x6D, 0x92, 0x16, 0x6D, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x90, 0x00, 0x17, 0x6E, +/* 00009000 */ 0x59, 0x01, 0x6E, 0x59, 0x02, 0x3D, 0xCE, 0x5C, 0x01, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x6E, +/* 00009010 */ 0x00, 0x00, 0x00, 0x7A, 0x3E, 0x6E, 0x76, 0x59, 0x03, 0x6E, 0x1F, 0x04, 0xFF, 0x6D, 0x92, 0x16, +/* 00009020 */ 0x6D, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x66, 0x59, 0x02, 0x3D, 0xCE, 0x68, 0x01, +/* 00009030 */ 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x7A, 0x2E, 0x6E, 0x77, 0x59, 0x03, +/* 00009040 */ 0x6E, 0x1F, 0x04, 0xFF, 0x6D, 0x92, 0x04, 0x6D, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0xCE, 0x74, +/* 00009050 */ 0x01, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x92, 0x04, 0x6F, 0x07, 0x03, +/* 00009060 */ 0x00, 0x59, 0x00, 0x02, 0xCE, 0xA0, 0x01, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, +/* 00009070 */ 0x00, 0x7A, 0x41, 0x70, 0x78, 0x59, 0x01, 0x70, 0x59, 0x02, 0x09, 0x1F, 0x03, 0x6F, 0x6F, 0x7A, +/* 00009080 */ 0x6F, 0x6E, 0x79, 0x92, 0x04, 0x6F, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0xCE, 0xAC, 0x01, 0x00, +/* 00009090 */ 0x00, 0x0F, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x7A, 0x41, 0x70, 0x7A, 0x59, 0x01, 0x70, +/* 000090A0 */ 0x59, 0x02, 0x09, 0x1F, 0x03, 0x6F, 0x6F, 0x7A, 0x6F, 0x6E, 0x7B, 0x92, 0x04, 0x6F, 0x07, 0x03, +/* 000090B0 */ 0x00, 0x59, 0x00, 0x02, 0xCE, 0xB8, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, +/* 000090C0 */ 0x00, 0x7A, 0x45, 0x70, 0x7C, 0x59, 0x01, 0x70, 0x59, 0x02, 0x09, 0x1F, 0x03, 0x6F, 0x6F, 0x7A, +/* 000090D0 */ 0x6F, 0x6E, 0x7D, 0x92, 0x04, 0x6F, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0xCE, 0xC4, 0x01, 0x00, +/* 000090E0 */ 0x00, 0x11, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x7A, 0x48, 0x70, 0x7E, 0x59, 0x01, 0x70, +/* 000090F0 */ 0x59, 0x02, 0x09, 0x1F, 0x03, 0x6F, 0x6F, 0x7A, 0x6F, 0x6E, 0x7F, 0x92, 0x04, 0x6F, 0x07, 0x03, +/* 00009100 */ 0x00, 0x59, 0x00, 0x02, 0xCE, 0xD0, 0x01, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, +/* 00009110 */ 0x00, 0x7A, 0x4B, 0x70, 0x80, 0x7A, 0x48, 0x70, 0x81, 0x7A, 0x4D, 0x70, 0x82, 0x59, 0x01, 0x70, +/* 00009120 */ 0x59, 0x02, 0x09, 0x1F, 0x03, 0x6F, 0x6F, 0x7A, 0x6F, 0x6E, 0x83, 0x92, 0x04, 0x6F, 0x07, 0x03, +/* 00009130 */ 0x00, 0x59, 0x00, 0x02, 0xCE, 0xE4, 0x01, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, +/* 00009140 */ 0x00, 0x7A, 0x48, 0x70, 0x84, 0x7A, 0x4D, 0x70, 0x85, 0x59, 0x01, 0x70, 0x59, 0x02, 0x09, 0x1F, +/* 00009150 */ 0x03, 0x6F, 0x6F, 0x7A, 0x6F, 0x6E, 0x86, 0x92, 0x04, 0x6F, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, +/* 00009160 */ 0xCE, 0xF4, 0x01, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x7A, 0x48, 0x70, +/* 00009170 */ 0x87, 0x7A, 0x4D, 0x70, 0x88, 0x59, 0x01, 0x70, 0x59, 0x02, 0x09, 0x1F, 0x03, 0x6F, 0x6F, 0x7A, +/* 00009180 */ 0x6F, 0x6E, 0x89, 0x92, 0x04, 0x6F, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0xCE, 0x04, 0x02, 0x00, +/* 00009190 */ 0x00, 0x15, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x7A, 0x4C, 0x70, 0x8A, 0x7A, 0x4D, 0x70, +/* 000091A0 */ 0x8B, 0x59, 0x01, 0x70, 0x59, 0x02, 0x09, 0x1F, 0x03, 0x6F, 0x6F, 0x7A, 0x6F, 0x6E, 0x8C, 0x92, +/* 000091B0 */ 0x04, 0x6F, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0xCE, 0x14, 0x02, 0x00, 0x00, 0x16, 0x00, 0x00, +/* 000091C0 */ 0x00, 0x70, 0x00, 0x00, 0x00, 0x7A, 0x4C, 0x70, 0x8D, 0x7A, 0x4D, 0x70, 0x8E, 0x59, 0x01, 0x70, +/* 000091D0 */ 0x59, 0x02, 0x09, 0x1F, 0x03, 0x6F, 0x6F, 0x7A, 0x6F, 0x6E, 0x8F, 0x59, 0x01, 0x6E, 0x59, 0x02, +/* 000091E0 */ 0x09, 0x1F, 0x03, 0x6D, 0x6D, 0x96, 0x2F, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x56, 0x6D, +/* 000091F0 */ 0x6E, 0x07, 0x01, 0x00, 0x59, 0x00, 0x02, 0x1F, 0x01, 0x6D, 0x6D, 0x96, 0x30, 0x6D, 0xA8, 0x6D, +/* 00009200 */ 0x95, 0x00, 0x19, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x57, 0x6D, 0x6E, 0x96, 0x31, 0x6D, +/* 00009210 */ 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x58, 0x6D, 0x6E, 0x07, 0x01, 0x00, 0x59, 0x00, 0x02, 0x1F, +/* 00009220 */ 0x01, 0x6D, 0x6D, 0x45, 0x67, 0x6D, 0xB9, 0x6E, 0x00, 0x01, 0x66, 0x01, 0x59, 0x6D, 0x6E, 0x07, +/* 00009230 */ 0x01, 0x00, 0x59, 0x00, 0x02, 0x1F, 0x01, 0x6D, 0x6D, 0x45, 0x62, 0x6D, 0xB9, 0x6E, 0x00, 0x01, +/* 00009240 */ 0x66, 0x01, 0x5A, 0x6D, 0x6E, 0x07, 0x01, 0x00, 0x59, 0x00, 0x02, 0x1F, 0x01, 0x6D, 0x6D, 0x45, +/* 00009250 */ 0x63, 0x6D, 0x92, 0x32, 0x6D, 0x14, 0x03, 0x00, 0x6D, 0x2C, 0x09, 0xD8, 0x00, 0x92, 0x16, 0x6D, +/* 00009260 */ 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x92, 0x07, 0x6E, 0x59, 0x01, 0x6E, 0x59, 0x02, 0x34, 0xCE, +/* 00009270 */ 0x24, 0x02, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x7A, 0x67, 0x6E, 0x90, +/* 00009280 */ 0x7A, 0x03, 0x6E, 0x91, 0x7A, 0x32, 0x6E, 0x92, 0x7A, 0x03, 0x6E, 0x93, 0x59, 0x03, 0x6E, 0x1F, +/* 00009290 */ 0x04, 0xFF, 0x6D, 0x92, 0x16, 0x6D, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x92, 0x07, 0x6E, 0x59, +/* 000092A0 */ 0x01, 0x6E, 0x59, 0x02, 0x35, 0xCE, 0x3C, 0x02, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x6E, 0x00, +/* 000092B0 */ 0x00, 0x00, 0x7A, 0x62, 0x6E, 0x94, 0x7A, 0x03, 0x6E, 0x95, 0x7A, 0x32, 0x6E, 0x96, 0x7A, 0x03, +/* 000092C0 */ 0x6E, 0x97, 0x59, 0x03, 0x6E, 0x1F, 0x04, 0xFF, 0x6D, 0x92, 0x16, 0x6D, 0x07, 0x04, 0x00, 0x59, +/* 000092D0 */ 0x00, 0x02, 0x92, 0x07, 0x6E, 0x59, 0x01, 0x6E, 0x59, 0x02, 0x36, 0xCE, 0x54, 0x02, 0x00, 0x00, +/* 000092E0 */ 0x19, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x7A, 0x63, 0x6E, 0x98, 0x7A, 0x03, 0x6E, 0x99, +/* 000092F0 */ 0x7A, 0x32, 0x6E, 0x9A, 0x7A, 0x03, 0x6E, 0x9B, 0x59, 0x03, 0x6E, 0x1F, 0x04, 0xFF, 0x6D, 0x92, +/* 00009300 */ 0x16, 0x6D, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x92, 0x07, 0x6E, 0x59, 0x01, 0x6E, 0x59, 0x02, +/* 00009310 */ 0x2E, 0xCE, 0x6C, 0x02, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x7A, 0x66, +/* 00009320 */ 0x6E, 0x9C, 0x7A, 0x03, 0x6E, 0x9D, 0x7A, 0x32, 0x6E, 0x9E, 0x7A, 0x03, 0x6E, 0x9F, 0x59, 0x03, +/* 00009330 */ 0x6E, 0x1F, 0x04, 0xFF, 0x6D, 0xA8, 0x00, 0x24, 0x00, 0x1B, 0xFE, 0x84, 0x02, 0x00, 0x6C, 0x02, +/* 00009340 */ 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, +/* 00009350 */ 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x54, 0x02, 0x00, 0x00, 0x03, 0x04, +/* 00009360 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, +/* 00009370 */ 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x3C, 0x02, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, +/* 00009380 */ 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, +/* 00009390 */ 0x00, 0x00, 0x24, 0x02, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, +/* 000093A0 */ 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x14, 0x02, +/* 000093B0 */ 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x03, 0x00, 0x00, 0x4B, 0x03, +/* 000093C0 */ 0x00, 0x00, 0x04, 0x02, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x03, +/* 000093D0 */ 0x00, 0x00, 0x4B, 0x03, 0x00, 0x00, 0xF4, 0x01, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, +/* 000093E0 */ 0x00, 0x00, 0x41, 0x03, 0x00, 0x00, 0x46, 0x03, 0x00, 0x00, 0xE4, 0x01, 0x00, 0x00, 0x03, 0x02, +/* 000093F0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x03, 0x00, 0x00, 0x46, 0x03, 0x00, 0x00, 0xD0, 0x01, +/* 00009400 */ 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x03, 0x00, 0x00, 0x41, 0x03, +/* 00009410 */ 0x00, 0x00, 0x46, 0x03, 0x00, 0x00, 0xC4, 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, +/* 00009420 */ 0x00, 0x00, 0x41, 0x03, 0x00, 0x00, 0xB8, 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, +/* 00009430 */ 0x00, 0x00, 0x3E, 0x03, 0x00, 0x00, 0xAC, 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, +/* 00009440 */ 0x00, 0x00, 0x3A, 0x03, 0x00, 0x00, 0xA0, 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, +/* 00009450 */ 0x00, 0x00, 0x3A, 0x03, 0x00, 0x00, 0x74, 0x01, 0x00, 0x00, 0x03, 0x09, 0x00, 0x00, 0x00, 0x00, +/* 00009460 */ 0x00, 0x00, 0x39, 0x03, 0x00, 0x00, 0x3C, 0x03, 0x00, 0x00, 0x3D, 0x03, 0x00, 0x00, 0x40, 0x03, +/* 00009470 */ 0x00, 0x00, 0x43, 0x03, 0x00, 0x00, 0x48, 0x03, 0x00, 0x00, 0x49, 0x03, 0x00, 0x00, 0x4A, 0x03, +/* 00009480 */ 0x00, 0x00, 0x4C, 0x03, 0x00, 0x00, 0x68, 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, +/* 00009490 */ 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x5C, 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, +/* 000094A0 */ 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x50, 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, +/* 000094B0 */ 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x44, 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, +/* 000094C0 */ 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x38, 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, +/* 000094D0 */ 0x00, 0x00, 0x0C, 0x02, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, +/* 000094E0 */ 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, +/* 000094F0 */ 0x00, 0x00, 0x08, 0x01, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, +/* 00009500 */ 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0xF0, 0x00, +/* 00009510 */ 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, +/* 00009520 */ 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0xD8, 0x00, 0x00, 0x00, 0x03, 0x04, +/* 00009530 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, +/* 00009540 */ 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, +/* 00009550 */ 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, +/* 00009560 */ 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x03, +/* 00009570 */ 0x00, 0x00, 0x22, 0x03, 0x00, 0x00, 0x23, 0x03, 0x00, 0x00, 0x24, 0x03, 0x00, 0x00, 0x25, 0x03, +/* 00009580 */ 0x00, 0x00, 0x26, 0x03, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x03, 0x20, 0x00, 0x00, 0x00, 0x00, +/* 00009590 */ 0x00, 0x00, 0x7B, 0x01, 0x00, 0x00, 0x75, 0x01, 0x00, 0x00, 0x33, 0x01, 0x00, 0x00, 0x56, 0x01, +/* 000095A0 */ 0x00, 0x00, 0x5E, 0x01, 0x00, 0x00, 0x0A, 0x03, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x3A, 0x01, +/* 000095B0 */ 0x00, 0x00, 0x93, 0x00, 0x00, 0x00, 0xCC, 0x00, 0x00, 0x00, 0x0F, 0x03, 0x00, 0x00, 0xD5, 0x00, +/* 000095C0 */ 0x00, 0x00, 0x2C, 0x01, 0x00, 0x00, 0x50, 0x01, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x89, 0x00, +/* 000095D0 */ 0x00, 0x00, 0x15, 0x03, 0x00, 0x00, 0xCF, 0x00, 0x00, 0x00, 0xB7, 0x00, 0x00, 0x00, 0x9C, 0x01, +/* 000095E0 */ 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, 0x9A, 0x01, 0x00, 0x00, 0x1D, 0x00, +/* 000095F0 */ 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x2C, 0x00, 0x00, 0x00, 0xC1, 0x00, +/* 00009600 */ 0x00, 0x00, 0xC4, 0x00, 0x00, 0x00, 0x9C, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x4E, 0x00, +/* 00009610 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x00, +/* 00009620 */ 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x2C, 0x00, 0x00, 0x00, 0xBB, 0xFE, +/* 00009630 */ 0x4D, 0x03, 0xFE, 0x13, 0x02, 0xFE, 0x13, 0x02, 0xFE, 0xBE, 0x02, 0xFE, 0xBF, 0x02, 0xFE, 0x8B, +/* 00009640 */ 0x02, 0xBB, 0x58, 0xFE, 0x11, 0x01, 0xFE, 0x39, 0x01, 0xFE, 0x0B, 0x01, 0xFE, 0x5C, 0x01, 0x6B, +/* 00009650 */ 0x7F, 0xFE, 0xEC, 0x01, 0xFE, 0x8C, 0x02, 0x1D, 0xFE, 0x8D, 0x02, 0x26, 0xFE, 0x89, 0x02, 0xFE, +/* 00009660 */ 0xFE, 0x00, 0xFE, 0x8E, 0x02, 0x2C, 0xFE, 0x90, 0x02, 0xFE, 0x91, 0x02, 0xFE, 0x92, 0x02, 0xFE, +/* 00009670 */ 0x93, 0x02, 0xFE, 0x8F, 0x02, 0xFE, 0x85, 0x02, 0xFE, 0x86, 0x02, 0xFE, 0x98, 0x02, 0xFE, 0x9C, +/* 00009680 */ 0x02, 0xFE, 0x9E, 0x02, 0xFE, 0x9F, 0x02, 0xFE, 0xA0, 0x02, 0xFE, 0xA1, 0x02, 0xFE, 0xA2, 0x02, +/* 00009690 */ 0xFE, 0xA7, 0x02, 0xFE, 0xA8, 0x02, 0xFE, 0x7B, 0x01, 0xFE, 0x75, 0x01, 0xFE, 0x33, 0x01, 0xFE, +/* 000096A0 */ 0x56, 0x01, 0xFE, 0x5E, 0x01, 0xFE, 0x0A, 0x03, 0xFE, 0x01, 0x01, 0xFE, 0x3A, 0x01, 0x93, 0xCC, +/* 000096B0 */ 0xFE, 0x0F, 0x03, 0xD5, 0xFE, 0x2C, 0x01, 0xFE, 0x50, 0x01, 0x65, 0x89, 0xFE, 0x15, 0x03, 0xFE, +/* 000096C0 */ 0x94, 0x02, 0xCF, 0xB7, 0xFE, 0x9C, 0x01, 0xFE, 0x91, 0x02, 0xC0, 0x69, 0xFE, 0x9A, 0x01, 0xFE, +/* 000096D0 */ 0x8C, 0x02, 0x1D, 0x26, 0xFE, 0x89, 0x02, 0xFE, 0xFE, 0x00, 0xFE, 0x8E, 0x02, 0x2C, 0xFE, 0xA7, +/* 000096E0 */ 0x02, 0xC1, 0xFE, 0xA8, 0x02, 0xC4, 0x9C, 0x54, 0x4E, 0xFE, 0x21, 0x03, 0xFE, 0x22, 0x03, 0xFE, +/* 000096F0 */ 0x23, 0x03, 0xFE, 0x24, 0x03, 0xFE, 0x25, 0x03, 0xFE, 0x26, 0x03, 0xFE, 0x9C, 0x01, 0xFE, 0x97, +/* 00009700 */ 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, +/* 00009710 */ 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, +/* 00009720 */ 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, +/* 00009730 */ 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, +/* 00009740 */ 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x4E, 0x03, 0xFE, 0x4E, 0x03, 0xFE, 0x4F, 0x03, 0xFE, +/* 00009750 */ 0x4F, 0x03, 0xFE, 0x06, 0x02, 0xFE, 0x0C, 0x02, 0xFE, 0x97, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x97, +/* 00009760 */ 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x3A, 0x03, 0xFE, 0x39, 0x03, 0xFE, 0x3A, 0x03, 0xFE, 0x3C, 0x03, +/* 00009770 */ 0xFE, 0x3E, 0x03, 0xFE, 0x3D, 0x03, 0xFE, 0x41, 0x03, 0xFE, 0x40, 0x03, 0xFE, 0x44, 0x03, 0xFE, +/* 00009780 */ 0x41, 0x03, 0xFE, 0x46, 0x03, 0xFE, 0x43, 0x03, 0xFE, 0x41, 0x03, 0xFE, 0x46, 0x03, 0xFE, 0x48, +/* 00009790 */ 0x03, 0xFE, 0x41, 0x03, 0xFE, 0x46, 0x03, 0xFE, 0x49, 0x03, 0xFE, 0x46, 0x03, 0xFE, 0x4B, 0x03, +/* 000097A0 */ 0xFE, 0x4A, 0x03, 0xFE, 0x46, 0x03, 0xFE, 0x4B, 0x03, 0xFE, 0x4C, 0x03, 0xFE, 0x97, 0x01, 0xFE, +/* 000097B0 */ 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, +/* 000097C0 */ 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, +/* 000097D0 */ 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0x02, 0x03, 0x16, 0x00, +/* 000097E0 */ 0xFE, 0x50, 0x03, 0x01, 0xFE, 0x51, 0x03, 0x02, 0xFE, 0x52, 0x03, 0x03, 0xFE, 0x53, 0x03, 0x04, +/* 000097F0 */ 0xFE, 0x54, 0x03, 0x05, 0xFE, 0x55, 0x03, 0x06, 0xFE, 0x56, 0x03, 0x07, 0xFE, 0x57, 0x03, 0x08, +/* 00009800 */ 0xFE, 0x58, 0x03, 0x09, 0xFE, 0x59, 0x03, 0x0A, 0xFE, 0x5A, 0x03, 0x0B, 0xFE, 0x5B, 0x03, 0x0C, +/* 00009810 */ 0xFE, 0x5C, 0x03, 0x0D, 0xFE, 0x5D, 0x03, 0x0E, 0xFE, 0x5E, 0x03, 0x0F, 0xFE, 0x5F, 0x03, 0x10, +/* 00009820 */ 0xFE, 0x60, 0x03, 0x11, 0xFE, 0x61, 0x03, 0x12, 0xFE, 0x62, 0x03, 0x13, 0xFE, 0x63, 0x03, 0x14, +/* 00009830 */ 0xFE, 0x64, 0x03, 0x15, 0xFE, 0x65, 0x03, 0x06, 0x18, 0x00, 0xFE, 0x50, 0x03, 0x01, 0xFE, 0x5B, +/* 00009840 */ 0x03, 0x02, 0xFE, 0x51, 0x03, 0x03, 0xFE, 0x66, 0x03, 0x04, 0xFE, 0x5E, 0x03, 0x05, 0xFE, 0x60, +/* 00009850 */ 0x03, 0x06, 0xFE, 0x61, 0x03, 0x07, 0xFE, 0x52, 0x03, 0x08, 0xFE, 0x53, 0x03, 0x09, 0xFE, 0x67, +/* 00009860 */ 0x03, 0x0A, 0xFE, 0x68, 0x03, 0x0B, 0xFE, 0x69, 0x03, 0x0C, 0xFE, 0x5C, 0x03, 0x0D, 0xFE, 0x6A, +/* 00009870 */ 0x03, 0x0E, 0xFE, 0x6B, 0x03, 0x0F, 0xFE, 0x6C, 0x03, 0x10, 0xFE, 0x6D, 0x03, 0x11, 0xFE, 0x6E, +/* 00009880 */ 0x03, 0x12, 0xFE, 0x6F, 0x03, 0x13, 0xFE, 0x70, 0x03, 0x14, 0xFE, 0x71, 0x03, 0x15, 0xFE, 0x72, +/* 00009890 */ 0x03, 0x16, 0xFE, 0x73, 0x03, 0x17, 0xFE, 0x74, 0x03, 0xFE, 0x07, 0x02, 0x7E, 0x41, 0x00, 0x00, +/* 000098A0 */ 0x00, 0x07, 0x00, 0xA4, 0x00, 0x07, 0x00, 0xB7, 0x00, 0x12, 0x00, 0x32, 0x00, 0x0A, 0x00, 0x47, +/* 000098B0 */ 0x00, 0x03, 0x00, 0x35, 0x00, 0x0A, 0x00, 0x35, 0x00, 0x0A, 0x00, 0x39, 0x00, 0x0A, 0x00, 0x83, +/* 000098C0 */ 0x00, 0x06, 0x00, 0x4A, 0x04, 0x0A, 0x00, 0x1F, 0x00, 0x0A, 0x00, 0x24, 0x00, 0x0A, 0x00, 0x22, +/* 000098D0 */ 0x00, 0x0A, 0x00, 0x22, 0x00, 0x0A, 0x00, 0x22, 0x00, 0x0A, 0x00, 0x22, 0x00, 0x0A, 0x00, 0x1E, +/* 000098E0 */ 0x00, 0x0A, 0x00, 0x21, 0x00, 0x0A, 0x00, 0x2D, 0x00, 0x4F, 0x00, 0xD0, 0x00, 0x0A, 0x00, 0x54, +/* 000098F0 */ 0x00, 0x0A, 0x00, 0x50, 0x00, 0x0A, 0x00, 0x5E, 0x00, 0x0A, 0x00, 0x02, 0x01, 0x0A, 0x00, 0x55, +/* 00009900 */ 0x00, 0x06, 0x00, 0x94, 0x00, 0x0A, 0x00, 0x48, 0x00, 0x0A, 0x00, 0x48, 0x00, 0x0A, 0x00, 0x47, +/* 00009910 */ 0x00, 0x0A, 0x00, 0x4C, 0x00, 0x0A, 0x00, 0x4A, 0x00, 0x0A, 0x00, 0x3B, 0x00, 0x0A, 0x00, 0x4E, +/* 00009920 */ 0x00, 0x0A, 0x00, 0x56, 0x00, 0x0A, 0x00, 0x57, 0x00, 0x0A, 0x00, 0x3E, 0x00, 0x0A, 0x00, 0x39, +/* 00009930 */ 0x00, 0x25, 0x01, 0x8D, 0x0F, 0x9A, 0x00, 0x1F, 0x00, 0x06, 0x00, 0x25, 0x00, 0x0D, 0x00, 0x4E, +/* 00009940 */ 0x02, 0x0C, 0x00, 0x9A, 0x00, 0x0C, 0x00, 0x70, 0x00, 0x0D, 0x00, 0x79, 0x00, 0x0D, 0x00, 0xB5, +/* 00009950 */ 0x02, 0x0D, 0x00, 0xBF, 0x05, 0x0D, 0x00, 0x23, 0x03, 0x08, 0x00, 0x77, 0x01, 0x0D, 0x00, 0x4D, +/* 00009960 */ 0x07, 0x0D, 0x00, 0xC2, 0x09, 0x74, 0x00, 0xEF, 0x0A, 0x0D, 0x00, 0xE1, 0x01, 0x06, 0x00, 0x60, +/* 00009970 */ 0x01, 0x17, 0x00, 0xC8, 0x1B, 0x0D, 0x00, 0x6B, 0x03, 0x0D, 0x00, 0xB4, 0x04, 0x0D, 0x00, 0xE5, +/* 00009980 */ 0x06, 0x0D, 0x00, 0x08, 0x02, 0x08, 0x00, 0xDA, 0x02, 0x0D, 0x00, 0x74, 0x06, 0x0D, 0x00, 0x08, +/* 00009990 */ 0x04, 0x0B, 0x00, 0x23, 0x00, 0x20, 0x00, 0xBB, 0x00, 0x3A, 0x00, 0x25, 0x03, 0x0D, 0x00, 0x8C, +/* 000099A0 */ 0x02, 0x16, 0x00, 0x68, 0x22, 0x16, 0x00, 0x65, 0x25, 0x16, 0x00, 0x5F, 0x6E, 0x16, 0x00, 0x9D, +/* 000099B0 */ 0x15, 0x0B, 0x00, 0x23, 0x00, 0x3A, 0x00, 0x92, 0x00, 0x3A, 0x00, 0x92, 0x00, 0x3A, 0x00, 0x92, +/* 000099C0 */ 0x00, 0xF0, 0x00, 0x29, 0x01, 0x11, 0x00, 0x38, 0x00, 0x11, 0x00, 0x38, 0x00, 0x11, 0x00, 0x39, +/* 000099D0 */ 0x00, 0x11, 0x00, 0x3A, 0x00, 0x06, 0x00, 0x25, 0x00, 0x0D, 0x00, 0xE9, 0x01, 0x0D, 0x00, 0x0C, +/* 000099E0 */ 0x02, 0x0D, 0x00, 0x90, 0x01, 0x0C, 0x00, 0x58, 0x01, 0x0C, 0x00, 0x9A, 0x00, 0x0C, 0x00, 0x70, +/* 000099F0 */ 0x00, 0x0C, 0x00, 0xA7, 0x04, 0x0C, 0x00, 0x93, 0x04, 0x0C, 0x00, 0x31, 0x04, 0x0C, 0x00, 0xF9, +/* 00009A00 */ 0x09, 0x0C, 0x00, 0xEF, 0x02, 0x06, 0x00, 0x2D, 0x00, 0x0C, 0x00, 0x93, 0x03, 0x16, 0x00, 0x89, +/* 00009A10 */ 0x0A, 0x06, 0x00, 0x75, 0x00, 0x06, 0x00, 0x38, 0x00, 0x06, 0x00, 0x4C, 0x00, 0x06, 0x00, 0xC7, +/* 00009A20 */ 0x1C, 0x0C, 0x00, 0xC0, 0x01, 0x0C, 0x00, 0xDF, 0x01, 0x0C, 0x00, 0x80, 0x03, 0x18, 0x00, 0x3C, +/* 00009A30 */ 0x00, 0x3B, 0x00, 0x25, 0x01, 0x04, 0x00, 0x51, 0x00, 0x3D, 0x00, 0x69, 0x01, 0x04, 0x00, 0x59, +/* 00009A40 */ 0x00, 0x3D, 0x00, 0x79, 0x01, 0x04, 0x00, 0x5D, 0x00, 0x3D, 0x00, 0x81, 0x01, 0x04, 0x00, 0x41, +/* 00009A50 */ 0x00, 0x3C, 0x00, 0xAD, 0x02, 0x2B, 0x00, 0x60, 0x00, 0x2B, 0x00, 0x64, 0x00, 0x2B, 0x00, 0x66, +/* 00009A60 */ 0x00, 0x27, 0x00, 0x49, 0x01, 0xA3, 0x01, 0x51, 0x05, 0x16, 0x00, 0xCA, 0x03, 0x06, 0x00, 0x2B, +/* 00009A70 */ 0x00, 0x0C, 0x00, 0x3B, 0x09, 0x16, 0x00, 0xFC, 0x30, 0x16, 0x00, 0x97, 0x2F, 0x16, 0x00, 0x63, +/* 00009A80 */ 0x79, 0x0B, 0x00, 0x23, 0x00, 0x36, 0x00, 0x7C, 0x00, 0x36, 0x00, 0x84, 0x00, 0x36, 0x00, 0x88, +/* 00009A90 */ 0x00, 0x38, 0x00, 0xA6, 0x00, 0x00, 0x9A, 0xA6, 0x01, 0x00, 0x60, 0xA4, 0x01, 0x00, 0xF5, 0xA3, +/* 00009AA0 */ 0x01, 0x00, 0x95, 0xA3, 0x01, 0x00, 0x35, 0xA3, 0x01, 0x00, 0xCF, 0xA2, 0x01, 0x00, 0x61, 0xA2, +/* 00009AB0 */ 0x01, 0x00, 0xF0, 0xA1, 0x01, 0x00, 0x7F, 0xA1, 0x01, 0x00, 0x19, 0xA1, 0x01, 0x00, 0xAB, 0xA0, +/* 00009AC0 */ 0x01, 0x00, 0x48, 0xA0, 0x01, 0x00, 0xE5, 0x9F, 0x01, 0x00, 0x7F, 0x9F, 0x01, 0x00, 0x11, 0x9F, +/* 00009AD0 */ 0x01, 0x00, 0xA0, 0x9E, 0x01, 0x00, 0x2F, 0x9E, 0x01, 0x00, 0xA7, 0x9D, 0x01, 0x00, 0x39, 0x9D, +/* 00009AE0 */ 0x01, 0x00, 0x56, 0x9C, 0x01, 0x00, 0xE8, 0x9B, 0x01, 0x00, 0x60, 0x9B, 0x01, 0x00, 0xEF, 0x9A, +/* 00009AF0 */ 0x01, 0x00, 0x7B, 0x9A, 0x01, 0x00, 0x05, 0x9A, 0x01, 0x00, 0x9A, 0x99, 0x01, 0x00, 0x2C, 0x99, +/* 00009B00 */ 0x01, 0x00, 0xBB, 0x98, 0x01, 0x00, 0x01, 0x98, 0x01, 0x00, 0x97, 0x97, 0x01, 0x00, 0x37, 0x97, +/* 00009B10 */ 0x01, 0x00, 0xD3, 0x96, 0x01, 0x00, 0x4C, 0x96, 0x01, 0x00, 0xF3, 0x94, 0x01, 0x00, 0x97, 0x93, +/* 00009B20 */ 0x01, 0x00, 0x9D, 0x91, 0x01, 0x00, 0x0B, 0x8D, 0x01, 0x00, 0x72, 0x8C, 0x01, 0x00, 0x03, 0x8C, +/* 00009B30 */ 0x01, 0x00, 0x94, 0x8B, 0x01, 0x00, 0x25, 0x8B, 0x01, 0x00, 0x15, 0x8A, 0x01, 0x00, 0x51, 0x89, +/* 00009B40 */ 0x01, 0x00, 0x9E, 0x87, 0x01, 0x00, 0x6D, 0x86, 0x01, 0x00, 0x20, 0x86, 0x01, 0x00, 0x30, 0x7F, +/* 00009B50 */ 0x01, 0x00, 0x81, 0x7E, 0x01, 0x00, 0x05, 0x7C, 0x01, 0x00, 0x17, 0x79, 0x01, 0x00, 0x50, 0x77, +/* 00009B60 */ 0x01, 0x00, 0x4A, 0x75, 0x01, 0x00, 0x36, 0x73, 0x01, 0x00, 0xDF, 0x72, 0x01, 0x00, 0x45, 0x71, +/* 00009B70 */ 0x01, 0x00, 0x22, 0x62, 0x01, 0x00, 0xD9, 0x4F, 0x01, 0x00, 0xF9, 0x24, 0x01, 0x00, 0x54, 0x1A, +/* 00009B80 */ 0x01, 0x00, 0x90, 0x19, 0x01, 0x00, 0xE7, 0x18, 0x01, 0x00, 0xFA, 0x17, 0x01, 0x00, 0x67, 0x17, +/* 00009B90 */ 0x01, 0x00, 0xF3, 0x16, 0x01, 0x00, 0x89, 0x16, 0x01, 0x00, 0xA1, 0x14, 0x01, 0x00, 0xE8, 0x12, +/* 00009BA0 */ 0x01, 0x00, 0x9C, 0x11, 0x01, 0x00, 0x55, 0x0D, 0x01, 0x00, 0x0F, 0x0C, 0x01, 0x00, 0xB9, 0x0A, +/* 00009BB0 */ 0x01, 0x00, 0x19, 0x06, 0x01, 0x00, 0x68, 0x04, 0x01, 0x00, 0x28, 0x03, 0x01, 0x00, 0xD3, 0x02, +/* 00009BC0 */ 0x01, 0x00, 0x2F, 0xFF, 0x00, 0x00, 0x78, 0xFE, 0x00, 0x00, 0x68, 0xFB, 0x00, 0x00, 0x0E, 0xF9, +/* 00009BD0 */ 0x00, 0x00, 0x20, 0xF8, 0x00, 0x00, 0x33, 0xF7, 0x00, 0x00, 0x8F, 0xF5, 0x00, 0x00, 0x13, 0xF5, +/* 00009BE0 */ 0x00, 0x00, 0x97, 0xF4, 0x00, 0x00, 0x1B, 0xF4, 0x00, 0x00, 0xB0, 0xF3, 0x00, 0x00, 0xB9, 0xF1, +/* 00009BF0 */ 0x00, 0x00, 0xC4, 0xEE, 0x00, 0x00, 0x8B, 0xDB, 0x00, 0x00, 0xE8, 0xC8, 0x00, 0x00, 0x02, 0x9C, +/* 00009C00 */ 0x00, 0x00, 0x7E, 0x5D, 0x00, 0xC1, 0x53, 0x5A, 0x4B, 0x04, 0xFE, 0x67, 0x0C, 0x1A, 0xA0, 0x41, +/* 00009C10 */ 0xD1, 0x00, 0xB2, 0xFF, 0x8C, 0x36, 0x02, 0x00, 0xFF, 0x8C, 0x36, 0x02, 0x00, 0x0F, 0xFE, 0x00, +/* 00009C20 */ 0x90, 0x01, 0x01, 0xFF, 0x8C, 0x36, 0x02, 0x00, 0xFE, 0x12, 0x79, 0xFE, 0x12, 0x79, 0x01, 0xFE, +/* 00009C30 */ 0xC8, 0x04, 0x15, 0x36, 0x44, 0x09, 0xEE, 0xED, 0x02, 0x09, 0x2D, 0x2D, 0x2D, 0x2D, 0x07, 0x02, +/* 00009C40 */ 0x41, 0x42, 0x43, 0x44, 0x08, 0x06, 0xFE, 0x27, 0x03, 0x06, 0xFE, 0x2E, 0x04, 0x06, 0xFE, 0xC9, +/* 00009C50 */ 0x04, 0x05, 0xFE, 0xCA, 0x04, 0x06, 0xFE, 0xCB, 0x04, 0x05, 0xFE, 0xCC, 0x04, 0x06, 0xFE, 0xCD, +/* 00009C60 */ 0x04, 0x05, 0xFE, 0xCE, 0x04, 0x06, 0xFE, 0xCF, 0x04, 0x05, 0xFE, 0xD0, 0x04, 0x06, 0xFE, 0xD1, +/* 00009C70 */ 0x04, 0x05, 0xFE, 0xD2, 0x04, 0x06, 0xFE, 0xD3, 0x04, 0x05, 0xFE, 0xD4, 0x04, 0x06, 0xFE, 0xD5, +/* 00009C80 */ 0x04, 0x05, 0xFE, 0xD6, 0x04, 0x06, 0xFE, 0xD7, 0x04, 0x05, 0xFE, 0xD8, 0x04, 0x06, 0xFE, 0xD9, +/* 00009C90 */ 0x04, 0x05, 0xFE, 0xDA, 0x04, 0x07, 0x06, 0xFE, 0x21, 0x04, 0x01, 0x00, 0x06, 0xFE, 0x3C, 0x04, +/* 00009CA0 */ 0x01, 0x01, 0x06, 0xFE, 0x3D, 0x04, 0x01, 0x02, 0x05, 0xFE, 0x3E, 0x04, 0x06, 0xFE, 0x3F, 0x04, +/* 00009CB0 */ 0x06, 0xFE, 0x40, 0x04, 0x05, 0xFE, 0x41, 0x04, 0x06, 0xFE, 0x42, 0x04, 0x05, 0xFE, 0x43, 0x04, +/* 00009CC0 */ 0x05, 0xFE, 0x44, 0x04, 0x05, 0xFE, 0x45, 0x04, 0x05, 0xFE, 0x46, 0x04, 0x06, 0xFE, 0x74, 0x04, +/* 00009CD0 */ 0x06, 0xFE, 0x17, 0x04, 0x06, 0xFE, 0xEC, 0x03, 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, 0x2B, 0x03, +/* 00009CE0 */ 0x0C, 0x06, 0xFE, 0x2C, 0x03, 0x06, 0xFE, 0x2D, 0x03, 0x06, 0xFE, 0xED, 0x03, 0x0B, 0x06, 0xFE, +/* 00009CF0 */ 0x15, 0x04, 0x06, 0xFE, 0x77, 0x03, 0x05, 0xFE, 0x14, 0x04, 0x06, 0xFE, 0xEE, 0x03, 0x06, 0xFE, +/* 00009D00 */ 0x38, 0x03, 0xFE, 0xA6, 0x03, 0x4E, 0x40, 0xA8, 0x36, 0xA8, 0x37, 0xA8, 0x38, 0xA8, 0x39, 0xA8, +/* 00009D10 */ 0x3A, 0xA8, 0x3B, 0xA8, 0x3C, 0xA8, 0x3D, 0xA8, 0x3E, 0xA8, 0x3F, 0x8E, 0x02, 0x32, 0x46, 0x14, +/* 00009D20 */ 0x0C, 0x00, 0x46, 0x03, 0x8E, 0x02, 0x32, 0x46, 0x14, 0x03, 0x00, 0x46, 0x04, 0x09, 0x72, 0x03, +/* 00009D30 */ 0xE0, 0x00, 0x0B, 0x01, 0xB9, 0x46, 0x00, 0x01, 0x66, 0x01, 0x00, 0x36, 0x46, 0x95, 0x00, 0x02, +/* 00009D40 */ 0x36, 0x01, 0x66, 0x01, 0x01, 0x37, 0x46, 0x95, 0x00, 0x03, 0x37, 0x01, 0x66, 0x01, 0x02, 0x38, +/* 00009D50 */ 0x46, 0x95, 0x00, 0x04, 0x38, 0x01, 0x66, 0x01, 0x03, 0x39, 0x46, 0x95, 0x00, 0x05, 0x39, 0x01, +/* 00009D60 */ 0x66, 0x01, 0x04, 0x3A, 0x46, 0x95, 0x00, 0x06, 0x3A, 0x01, 0x66, 0x01, 0x05, 0x3B, 0x46, 0x95, +/* 00009D70 */ 0x00, 0x07, 0x3B, 0x01, 0x66, 0x01, 0x06, 0x3C, 0x46, 0x95, 0x00, 0x08, 0x3C, 0x01, 0x66, 0x01, +/* 00009D80 */ 0x07, 0x3D, 0x46, 0x95, 0x00, 0x09, 0x3D, 0x4E, 0x46, 0x95, 0x00, 0x0A, 0x46, 0xCE, 0x00, 0x00, +/* 00009D90 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x7A, 0x06, 0x46, 0x00, 0x7A, 0x08, +/* 00009DA0 */ 0x46, 0x01, 0x7A, 0x0A, 0x46, 0x02, 0x7A, 0x0C, 0x46, 0x03, 0x7A, 0x0E, 0x46, 0x04, 0x7A, 0x10, +/* 00009DB0 */ 0x46, 0x05, 0x7A, 0x12, 0x46, 0x06, 0x7A, 0x14, 0x46, 0x07, 0x7A, 0x16, 0x46, 0x08, 0x96, 0x02, +/* 00009DC0 */ 0x46, 0xCF, 0x46, 0x03, 0xA8, 0x47, 0xA1, 0x00, 0x47, 0x46, 0xA8, 0x47, 0xA1, 0x01, 0x47, 0x46, +/* 00009DD0 */ 0xA8, 0x47, 0xA1, 0x02, 0x47, 0x46, 0x95, 0x00, 0x0A, 0x46, 0x8E, 0x02, 0x04, 0x46, 0x07, 0x03, +/* 00009DE0 */ 0x00, 0x59, 0x00, 0x02, 0xCE, 0x2C, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, +/* 00009DF0 */ 0x00, 0x7A, 0x19, 0x47, 0x09, 0x7A, 0x1B, 0x47, 0x0A, 0x7A, 0x1D, 0x47, 0x0B, 0x59, 0x01, 0x47, +/* 00009E00 */ 0x59, 0x02, 0x17, 0x1F, 0x03, 0x46, 0x46, 0x45, 0x40, 0x46, 0xB9, 0x47, 0x00, 0x01, 0x66, 0x01, +/* 00009E10 */ 0x08, 0x46, 0x47, 0x07, 0x06, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x1E, 0x59, 0x02, 0x1F, 0x59, +/* 00009E20 */ 0x03, 0x20, 0x5E, 0x47, 0x40, 0x0C, 0x59, 0x04, 0x47, 0x8E, 0x02, 0x03, 0x47, 0x5E, 0x47, 0x47, +/* 00009E30 */ 0x0D, 0x5E, 0x47, 0x47, 0x0E, 0x59, 0x05, 0x47, 0x1F, 0x06, 0xFF, 0x46, 0xB9, 0x47, 0x00, 0x01, +/* 00009E40 */ 0x66, 0x01, 0x09, 0x46, 0x47, 0x07, 0x06, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x21, 0x59, 0x02, +/* 00009E50 */ 0x22, 0x59, 0x03, 0x22, 0x5E, 0x47, 0x40, 0x0F, 0x59, 0x04, 0x47, 0x8E, 0x02, 0x03, 0x47, 0x5E, +/* 00009E60 */ 0x47, 0x47, 0x10, 0x5E, 0x47, 0x47, 0x11, 0x59, 0x05, 0x47, 0x1F, 0x06, 0xFF, 0x46, 0xB9, 0x47, +/* 00009E70 */ 0x00, 0x01, 0x66, 0x01, 0x0A, 0x46, 0x47, 0x07, 0x06, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x23, +/* 00009E80 */ 0x59, 0x02, 0x24, 0x59, 0x03, 0x24, 0x5E, 0x47, 0x40, 0x12, 0x59, 0x04, 0x47, 0x8E, 0x02, 0x03, +/* 00009E90 */ 0x47, 0x5E, 0x47, 0x47, 0x13, 0x5E, 0x47, 0x47, 0x14, 0x59, 0x05, 0x47, 0x1F, 0x06, 0xFF, 0x46, +/* 00009EA0 */ 0x8E, 0x02, 0x32, 0x46, 0x14, 0x03, 0x00, 0x46, 0x03, 0x09, 0xF6, 0x01, 0xE0, 0x01, 0x04, 0x03, +/* 00009EB0 */ 0xB9, 0x46, 0x00, 0xB8, 0x01, 0x00, 0x00, 0x00, 0x46, 0x46, 0x01, 0x66, 0x01, 0x0B, 0x3E, 0x46, +/* 00009EC0 */ 0x95, 0x01, 0x02, 0x3E, 0x01, 0x66, 0x01, 0x0C, 0x3F, 0x46, 0x95, 0x01, 0x03, 0x3F, 0x8E, 0x02, +/* 00009ED0 */ 0x23, 0x46, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x25, 0x90, 0x01, 0x02, 0x47, 0x59, +/* 00009EE0 */ 0x02, 0x47, 0x1F, 0x03, 0xFF, 0x46, 0x8E, 0x02, 0x23, 0x46, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, +/* 00009EF0 */ 0x59, 0x01, 0x26, 0x90, 0x01, 0x03, 0x47, 0x59, 0x02, 0x47, 0x1F, 0x03, 0xFF, 0x46, 0x90, 0x01, +/* 00009F00 */ 0x02, 0x46, 0xCF, 0x47, 0x02, 0xA1, 0x00, 0x27, 0x47, 0xA1, 0x01, 0x28, 0x47, 0x76, 0x47, 0x46, +/* 00009F10 */ 0x15, 0x8E, 0x02, 0x16, 0x46, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x90, 0x01, 0x02, 0x47, 0x59, +/* 00009F20 */ 0x01, 0x47, 0x59, 0x02, 0x29, 0xCE, 0x40, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, +/* 00009F30 */ 0x00, 0x00, 0x90, 0x01, 0x02, 0x48, 0x07, 0x01, 0x00, 0xC4, 0x01, 0x48, 0x48, 0x7A, 0x48, 0x47, +/* 00009F40 */ 0x16, 0x7A, 0x2C, 0x47, 0x17, 0x7A, 0x2C, 0x47, 0x18, 0x7A, 0x2C, 0x47, 0x19, 0x59, 0x03, 0x47, +/* 00009F50 */ 0x1F, 0x04, 0xFF, 0x46, 0x8E, 0x02, 0x04, 0x46, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x90, 0x01, +/* 00009F60 */ 0x02, 0x47, 0x5E, 0x47, 0x47, 0x1A, 0x59, 0x01, 0x47, 0x8E, 0x02, 0x09, 0x47, 0x5E, 0x47, 0x47, +/* 00009F70 */ 0x1B, 0x59, 0x02, 0x47, 0x1F, 0x03, 0xFF, 0x46, 0x8E, 0x02, 0x16, 0x46, 0x07, 0x04, 0x00, 0x59, +/* 00009F80 */ 0x00, 0x02, 0x90, 0x01, 0x02, 0x47, 0x5E, 0x47, 0x47, 0x1C, 0x59, 0x01, 0x47, 0x59, 0x02, 0x2F, +/* 00009F90 */ 0xCE, 0x58, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0x90, 0x01, 0x02, +/* 00009FA0 */ 0x48, 0x7A, 0x48, 0x47, 0x1D, 0x7A, 0x30, 0x47, 0x1E, 0x7A, 0x2C, 0x47, 0x1F, 0x7A, 0x30, 0x47, +/* 00009FB0 */ 0x20, 0x59, 0x03, 0x47, 0x1F, 0x04, 0xFF, 0x46, 0x8E, 0x02, 0x16, 0x46, 0x07, 0x04, 0x00, 0x59, +/* 00009FC0 */ 0x00, 0x02, 0x90, 0x01, 0x02, 0x47, 0x5E, 0x47, 0x47, 0x21, 0x59, 0x01, 0x47, 0x59, 0x02, 0x31, +/* 00009FD0 */ 0xCE, 0x70, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0x8E, 0x02, 0x23, +/* 00009FE0 */ 0x48, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x33, 0xB9, 0x4A, 0x00, 0xB8, 0x01, 0x00, +/* 00009FF0 */ 0x00, 0x00, 0x4A, 0x4A, 0x01, 0x66, 0x01, 0x0D, 0x49, 0x4A, 0x59, 0x02, 0x49, 0x1F, 0x03, 0x48, +/* 0000A000 */ 0x48, 0x7A, 0x48, 0x47, 0x22, 0x7A, 0x2C, 0x47, 0x23, 0x7A, 0x30, 0x47, 0x24, 0x59, 0x03, 0x47, +/* 0000A010 */ 0x1F, 0x04, 0xFF, 0x46, 0x8E, 0x02, 0x16, 0x46, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x90, 0x01, +/* 0000A020 */ 0x02, 0x47, 0x5E, 0x47, 0x47, 0x25, 0x59, 0x01, 0x47, 0x59, 0x02, 0x34, 0xCE, 0x84, 0x00, 0x00, +/* 0000A030 */ 0x00, 0x05, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0xB9, 0x49, 0x00, 0xB8, 0x01, 0x00, 0x00, +/* 0000A040 */ 0x00, 0x49, 0x49, 0x01, 0x6A, 0x01, 0x0E, 0x48, 0x49, 0x47, 0x7A, 0x48, 0x47, 0x26, 0x7A, 0x30, +/* 0000A050 */ 0x47, 0x27, 0x7A, 0x2C, 0x47, 0x28, 0x7A, 0x30, 0x47, 0x29, 0x59, 0x03, 0x47, 0x1F, 0x04, 0xFF, +/* 0000A060 */ 0x46, 0x8E, 0x02, 0x16, 0x46, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x90, 0x01, 0x02, 0x47, 0x59, +/* 0000A070 */ 0x01, 0x47, 0x59, 0x02, 0x35, 0xCE, 0x9C, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x47, 0x00, +/* 0000A080 */ 0x00, 0x00, 0x8E, 0x01, 0x17, 0x48, 0x4A, 0x48, 0x7A, 0x48, 0x47, 0x2A, 0x7A, 0x30, 0x47, 0x2B, +/* 0000A090 */ 0x7A, 0x30, 0x47, 0x2C, 0x59, 0x03, 0x47, 0x1F, 0x04, 0xFF, 0x46, 0x90, 0x01, 0x02, 0x00, 0x09, +/* 0000A0A0 */ 0x07, 0x00, 0xA8, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x07, 0xB0, 0x00, 0x9C, 0x00, +/* 0000A0B0 */ 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, +/* 0000A0C0 */ 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, +/* 0000A0D0 */ 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, +/* 0000A0E0 */ 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x01, +/* 0000A0F0 */ 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x03, 0x04, +/* 0000A100 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, +/* 0000A110 */ 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, +/* 0000A120 */ 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, +/* 0000A130 */ 0x00, 0x00, 0x2C, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x72, 0x01, +/* 0000A140 */ 0x00, 0x00, 0x70, 0x01, 0x00, 0x00, 0x73, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x09, +/* 0000A150 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC9, 0x04, 0x00, 0x00, 0xCB, 0x04, 0x00, 0x00, 0xCD, 0x04, +/* 0000A160 */ 0x00, 0x00, 0xCF, 0x04, 0x00, 0x00, 0xD1, 0x04, 0x00, 0x00, 0xD3, 0x04, 0x00, 0x00, 0xD5, 0x04, +/* 0000A170 */ 0x00, 0x00, 0xD7, 0x04, 0x00, 0x00, 0xD9, 0x04, 0x00, 0x00, 0xFE, 0xC9, 0x04, 0xFE, 0xCB, 0x04, +/* 0000A180 */ 0xFE, 0xCD, 0x04, 0xFE, 0xCF, 0x04, 0xFE, 0xD1, 0x04, 0xFE, 0xD3, 0x04, 0xFE, 0xD5, 0x04, 0xFE, +/* 0000A190 */ 0xD7, 0x04, 0xFE, 0xD9, 0x04, 0xFE, 0x72, 0x01, 0xFE, 0x70, 0x01, 0xFE, 0x73, 0x01, 0xFE, 0x72, +/* 0000A1A0 */ 0x01, 0xFE, 0x2F, 0x02, 0xFE, 0x2A, 0x02, 0xFE, 0x70, 0x01, 0xFE, 0x2F, 0x02, 0xFE, 0x2B, 0x02, +/* 0000A1B0 */ 0xFE, 0x73, 0x01, 0xFE, 0x2F, 0x02, 0xFE, 0x2C, 0x02, 0xFE, 0x0A, 0x02, 0xFE, 0x97, 0x01, 0xFE, +/* 0000A1C0 */ 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x24, 0x01, 0xFE, 0x24, 0x01, 0xFE, 0x24, +/* 0000A1D0 */ 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x24, 0x01, +/* 0000A1E0 */ 0xFE, 0x98, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x24, 0x01, 0xFE, 0x97, 0x01, 0xFE, +/* 0000A1F0 */ 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x95, +/* 0000A200 */ 0x01, 0x02, 0x01, 0x09, 0x00, 0xFE, 0x2A, 0x04, 0x01, 0xFE, 0xDB, 0x04, 0x02, 0xFE, 0xDC, 0x04, +/* 0000A210 */ 0x03, 0xFE, 0xDD, 0x04, 0x04, 0xFE, 0xDE, 0x04, 0x05, 0xFE, 0xDF, 0x04, 0x06, 0xFE, 0x29, 0x04, +/* 0000A220 */ 0x07, 0xFE, 0x26, 0x04, 0x08, 0xFE, 0x2B, 0x04, 0x03, 0x02, 0x00, 0xFE, 0x56, 0x02, 0x01, 0xFE, +/* 0000A230 */ 0x0B, 0x02, 0xFF, 0xA2, 0x36, 0x02, 0x00, 0x14, 0x16, 0x00, 0x00, 0x00, 0x72, 0x00, 0x75, 0x12, +/* 0000A240 */ 0x34, 0x00, 0xEF, 0x36, 0x19, 0x00, 0x5E, 0x00, 0x30, 0x00, 0x16, 0x10, 0x32, 0x00, 0x47, 0x02, +/* 0000A250 */ 0x32, 0x00, 0x59, 0x02, 0x32, 0x00, 0x58, 0x02, 0x2E, 0x00, 0x62, 0x04, 0x18, 0x00, 0x59, 0x04, +/* 0000A260 */ 0x18, 0x00, 0x54, 0x00, 0x13, 0x00, 0x48, 0x00, 0x43, 0x00, 0x9D, 0x00, 0x24, 0x00, 0x4A, 0x00, +/* 0000A270 */ 0x40, 0x00, 0xA2, 0x00, 0x5C, 0x00, 0x22, 0x03, 0x4D, 0x00, 0xEC, 0x08, 0x3A, 0x00, 0x9F, 0x00, +/* 0000A280 */ 0x07, 0x00, 0x88, 0x00, 0x07, 0x00, 0x16, 0x00, 0x00, 0xEE, 0xC4, 0x00, 0x00, 0xEE, 0xC0, 0x00, +/* 0000A290 */ 0x00, 0x6D, 0xC0, 0x00, 0x00, 0xA7, 0xBE, 0x00, 0x00, 0x1E, 0xBD, 0x00, 0x00, 0x42, 0xB9, 0x00, +/* 0000A2A0 */ 0x00, 0x29, 0xB1, 0x00, 0x00, 0xC8, 0xAE, 0x00, 0x00, 0x7D, 0xAD, 0x00, 0x00, 0x32, 0xAC, 0x00, +/* 0000A2B0 */ 0x00, 0xE7, 0xAA, 0x00, 0x00, 0x19, 0xA9, 0x00, 0x00, 0x64, 0xA7, 0x00, 0x00, 0x7D, 0xA6, 0x00, +/* 0000A2C0 */ 0x00, 0xC5, 0xA2, 0x00, 0x00, 0x7F, 0x5D, 0x00, 0xC1, 0x13, 0x1A, 0x4F, 0x00, 0xFE, 0x65, 0x0E, +/* 0000A2D0 */ 0x1B, 0xA0, 0x41, 0xC3, 0x00, 0xFE, 0xEE, 0x03, 0xC5, 0xFF, 0x00, 0x00, 0x00, 0x02, 0xFF, 0xD3, +/* 0000A2E0 */ 0xA5, 0x02, 0x00, 0xFF, 0xD3, 0xA5, 0x02, 0x00, 0x01, 0x08, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFF, +/* 0000A2F0 */ 0xD3, 0xA5, 0x02, 0x00, 0xFE, 0x30, 0x08, 0xFE, 0x30, 0x08, 0x03, 0xFE, 0xE2, 0x03, 0xFE, 0x03, +/* 0000A300 */ 0x05, 0xFE, 0xE0, 0x01, 0x07, 0x15, 0x19, 0x09, 0x77, 0x77, 0x05, 0x09, 0x21, 0x21, 0x21, 0x21, +/* 0000A310 */ 0x01, 0x16, 0x17, 0x18, 0x06, 0xFE, 0x94, 0x03, 0x05, 0xFE, 0x04, 0x05, 0x06, 0xFE, 0x30, 0x03, +/* 0000A320 */ 0x06, 0xFE, 0xD7, 0x03, 0x06, 0xFE, 0x8A, 0x04, 0x06, 0xFE, 0x24, 0x04, 0x06, 0xFE, 0x77, 0x04, +/* 0000A330 */ 0x06, 0xFE, 0x55, 0x04, 0x06, 0xFE, 0x33, 0x04, 0x06, 0xFE, 0x34, 0x04, 0x06, 0xFE, 0x35, 0x04, +/* 0000A340 */ 0x06, 0xFE, 0x36, 0x04, 0x06, 0xFE, 0x37, 0x04, 0x06, 0xFE, 0x38, 0x04, 0x06, 0xFE, 0x39, 0x04, +/* 0000A350 */ 0x06, 0xFE, 0x3A, 0x04, 0x06, 0xFE, 0x3B, 0x04, 0x07, 0x08, 0xFE, 0x9F, 0x01, 0x58, 0x15, 0x2A, +/* 0000A360 */ 0x19, 0x15, 0x15, 0x03, 0x00, 0x19, 0x02, 0x09, 0x18, 0x00, 0x8E, 0x05, 0x03, 0x1A, 0x6C, 0x19, +/* 0000A370 */ 0x1A, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x1A, 0x59, 0x01, 0x03, 0x59, 0x02, 0x04, 0x1F, 0x03, +/* 0000A380 */ 0xFF, 0x19, 0x8E, 0x05, 0x03, 0x1A, 0x6C, 0x19, 0x1A, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x1A, +/* 0000A390 */ 0x59, 0x01, 0x15, 0x1F, 0x02, 0x19, 0x19, 0x96, 0x02, 0x19, 0x92, 0x02, 0x19, 0xA8, 0x1A, 0x14, +/* 0000A3A0 */ 0x0B, 0x00, 0x19, 0x1A, 0x92, 0x02, 0x19, 0x5E, 0x19, 0x19, 0x02, 0x0F, 0x18, 0x00, 0x19, 0x8E, +/* 0000A3B0 */ 0x05, 0x03, 0x1A, 0x6C, 0x19, 0x1A, 0x03, 0x07, 0x03, 0x00, 0x59, 0x00, 0x1A, 0x59, 0x01, 0x03, +/* 0000A3C0 */ 0x59, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x19, 0x8E, 0x05, 0x04, 0x19, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 0000A3D0 */ 0x14, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00, 0x92, 0x02, +/* 0000A3E0 */ 0x1B, 0x5E, 0x1B, 0x1B, 0x04, 0x7A, 0x1B, 0x1A, 0x05, 0x92, 0x02, 0x1B, 0x5E, 0x1B, 0x1B, 0x06, +/* 0000A3F0 */ 0x7A, 0x1B, 0x1A, 0x07, 0x92, 0x02, 0x1B, 0x5E, 0x1B, 0x1B, 0x08, 0x7A, 0x1B, 0x1A, 0x09, 0x92, +/* 0000A400 */ 0x02, 0x1B, 0x5E, 0x1B, 0x1B, 0x0A, 0x7A, 0x1B, 0x1A, 0x0B, 0x92, 0x02, 0x1B, 0x5E, 0x1B, 0x1B, +/* 0000A410 */ 0x0C, 0x7A, 0x1B, 0x1A, 0x0D, 0x92, 0x02, 0x1B, 0x5E, 0x1B, 0x1B, 0x0E, 0x7A, 0x1B, 0x1A, 0x0F, +/* 0000A420 */ 0x92, 0x02, 0x1B, 0x5E, 0x1B, 0x1B, 0x10, 0x7A, 0x1B, 0x1A, 0x11, 0x92, 0x02, 0x1B, 0x5E, 0x1B, +/* 0000A430 */ 0x1B, 0x12, 0x7A, 0x1B, 0x1A, 0x13, 0x92, 0x02, 0x1B, 0x5E, 0x1B, 0x1B, 0x14, 0x7A, 0x1B, 0x1A, +/* 0000A440 */ 0x15, 0x92, 0x02, 0x1B, 0x5E, 0x1B, 0x1B, 0x16, 0x7A, 0x1B, 0x1A, 0x17, 0x92, 0x02, 0x1B, 0x5E, +/* 0000A450 */ 0x1B, 0x1B, 0x18, 0x7A, 0x1B, 0x1A, 0x19, 0x92, 0x02, 0x1B, 0x5E, 0x1B, 0x1B, 0x1A, 0x7A, 0x1B, +/* 0000A460 */ 0x1A, 0x1B, 0x92, 0x02, 0x1B, 0x5E, 0x1B, 0x1B, 0x1C, 0x7A, 0x1B, 0x1A, 0x1D, 0x92, 0x02, 0x1B, +/* 0000A470 */ 0x5E, 0x1B, 0x1B, 0x1E, 0x7A, 0x1B, 0x1A, 0x1F, 0x59, 0x01, 0x1A, 0x59, 0x02, 0x13, 0x1F, 0x03, +/* 0000A480 */ 0x19, 0x19, 0x96, 0x03, 0x19, 0x8E, 0x05, 0x04, 0x19, 0x07, 0x03, 0x00, 0x59, 0x00, 0x14, 0xCD, +/* 0000A490 */ 0x1A, 0x59, 0x01, 0x1A, 0x59, 0x02, 0x13, 0x1F, 0x03, 0x19, 0x19, 0x96, 0x04, 0x19, 0x8E, 0x05, +/* 0000A4A0 */ 0x06, 0x19, 0x07, 0x05, 0x00, 0x59, 0x00, 0x14, 0x8E, 0x05, 0x17, 0x1A, 0x59, 0x01, 0x1A, 0x8E, +/* 0000A4B0 */ 0x05, 0x13, 0x1A, 0x07, 0x02, 0x00, 0x59, 0x00, 0x14, 0x92, 0x03, 0x1B, 0x59, 0x01, 0x1B, 0x1F, +/* 0000A4C0 */ 0x02, 0x1A, 0x1A, 0x59, 0x02, 0x1A, 0xD6, 0x00, 0x1A, 0x59, 0x03, 0x1A, 0x92, 0x02, 0x1A, 0x59, +/* 0000A4D0 */ 0x04, 0x1A, 0x1F, 0x05, 0xFF, 0x19, 0x8E, 0x05, 0x04, 0x19, 0x07, 0x03, 0x00, 0x59, 0x00, 0x14, +/* 0000A4E0 */ 0x92, 0x04, 0x1A, 0x59, 0x01, 0x1A, 0x8E, 0x05, 0x09, 0x1A, 0x5E, 0x1A, 0x1A, 0x20, 0x59, 0x02, +/* 0000A4F0 */ 0x1A, 0x1F, 0x03, 0x00, 0x19, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x01, 0x40, 0x00, 0x00, +/* 0000A500 */ 0x00, 0x00, 0x00, 0x03, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x02, 0x00, 0x00, 0x6B, +/* 0000A510 */ 0x02, 0x00, 0x00, 0x49, 0x02, 0x00, 0x00, 0x74, 0x02, 0x00, 0x00, 0x6F, 0x02, 0x00, 0x00, 0x76, +/* 0000A520 */ 0x02, 0x00, 0x00, 0x6D, 0x02, 0x00, 0x00, 0x77, 0x02, 0x00, 0x00, 0x71, 0x02, 0x00, 0x00, 0x6C, +/* 0000A530 */ 0x02, 0x00, 0x00, 0x6E, 0x02, 0x00, 0x00, 0x70, 0x02, 0x00, 0x00, 0x73, 0x02, 0x00, 0x00, 0x75, +/* 0000A540 */ 0x02, 0x00, 0x00, 0xFE, 0xB6, 0x02, 0xFE, 0x05, 0x02, 0xFE, 0x5E, 0x02, 0xFE, 0xB6, 0x02, 0xFE, +/* 0000A550 */ 0x09, 0x02, 0xFE, 0x0D, 0x02, 0xFE, 0x58, 0x02, 0xFE, 0x6B, 0x02, 0xFE, 0x3D, 0x02, 0xFE, 0x49, +/* 0000A560 */ 0x02, 0xFE, 0x65, 0x02, 0xFE, 0x74, 0x02, 0xFE, 0x5D, 0x02, 0xFE, 0x6F, 0x02, 0xFE, 0x67, 0x02, +/* 0000A570 */ 0xFE, 0x76, 0x02, 0xFE, 0x5A, 0x02, 0xFE, 0x6D, 0x02, 0xFE, 0x6A, 0x02, 0xFE, 0x77, 0x02, 0xFE, +/* 0000A580 */ 0x61, 0x02, 0xFE, 0x71, 0x02, 0xFE, 0x59, 0x02, 0xFE, 0x6C, 0x02, 0xFE, 0x5C, 0x02, 0xFE, 0x6E, +/* 0000A590 */ 0x02, 0xFE, 0x60, 0x02, 0xFE, 0x70, 0x02, 0xFE, 0x63, 0x02, 0xFE, 0x73, 0x02, 0xFE, 0x66, 0x02, +/* 0000A5A0 */ 0xFE, 0x75, 0x02, 0xFE, 0x24, 0x01, 0xFF, 0x08, 0xA6, 0x02, 0x00, 0x0A, 0x02, 0x00, 0x00, 0x00, +/* 0000A5B0 */ 0x0B, 0x00, 0x3C, 0x00, 0x18, 0x00, 0x90, 0x00, 0x18, 0x00, 0x4B, 0x00, 0x15, 0x00, 0x6B, 0x00, +/* 0000A5C0 */ 0x18, 0x00, 0x90, 0x00, 0xBE, 0x00, 0xCE, 0x03, 0x19, 0x00, 0x3E, 0x00, 0x38, 0x00, 0x98, 0x01, +/* 0000A5D0 */ 0x24, 0x00, 0x44, 0x00, 0x00, 0xD9, 0xA5, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0x01, 0x00, 0x10, 0x03, +/* 0000A5E0 */ 0x00, 0xFE, 0x7E, 0x0E, 0x60, 0xA2, 0x41, 0xD1, 0x00, 0xC6, 0xFF, 0x6E, 0xAC, 0x02, 0x00, 0xFF, +/* 0000A5F0 */ 0x6E, 0xAC, 0x02, 0x00, 0x41, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0x6E, 0xAC, 0x02, 0x00, 0xFE, +/* 0000A600 */ 0x27, 0x01, 0xFE, 0x27, 0x01, 0x04, 0x05, 0x07, 0x05, 0x18, 0x18, 0x06, 0x05, 0x06, 0x06, 0xFE, +/* 0000A610 */ 0x77, 0x04, 0x05, 0xFE, 0xC7, 0x04, 0x08, 0x52, 0x8E, 0x01, 0x03, 0x07, 0x97, 0x07, 0x07, 0x05, +/* 0000A620 */ 0xA8, 0x08, 0x15, 0x08, 0x00, 0x07, 0x08, 0x14, 0x03, 0x00, 0x05, 0x02, 0x09, 0x37, 0x00, 0x8E, +/* 0000A630 */ 0x06, 0x06, 0x07, 0x07, 0x04, 0x00, 0x59, 0x00, 0x04, 0x8E, 0x06, 0x14, 0x08, 0x59, 0x01, 0x08, +/* 0000A640 */ 0x8E, 0x01, 0x02, 0x08, 0x59, 0x02, 0x08, 0x2D, 0x08, 0x03, 0x05, 0x59, 0x03, 0x08, 0x1F, 0x04, +/* 0000A650 */ 0x07, 0x07, 0x0E, 0x10, 0x00, 0x07, 0x8E, 0x01, 0x04, 0x07, 0x8E, 0x01, 0x03, 0x08, 0x97, 0x08, +/* 0000A660 */ 0x08, 0x05, 0x9C, 0x08, 0x07, 0x05, 0xA8, 0x00, 0x24, 0x00, 0xFF, 0x9C, 0xAC, 0x02, 0x00, 0x03, +/* 0000A670 */ 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0xA6, 0x00, 0x12, 0x00, 0x52, 0x00, 0x00, 0x7F, 0x5C, 0x00, +/* 0000A680 */ 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x56, 0x0E, 0x39, 0xA0, 0x41, 0xD1, 0x00, 0xC4, 0xFF, 0xC6, +/* 0000A690 */ 0xA2, 0x02, 0x00, 0xFF, 0xC6, 0xA2, 0x02, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFF, 0xC6, +/* 0000A6A0 */ 0xA2, 0x02, 0x00, 0xFE, 0x60, 0x02, 0xFE, 0x60, 0x02, 0x05, 0x05, 0x08, 0x04, 0x22, 0x21, 0x05, +/* 0000A6B0 */ 0x01, 0x05, 0x05, 0x05, 0x05, 0x07, 0x06, 0xFE, 0x94, 0x03, 0x05, 0xFE, 0x88, 0x04, 0x06, 0xFE, +/* 0000A6C0 */ 0x30, 0x03, 0x6F, 0x58, 0x05, 0x2A, 0x08, 0x05, 0x15, 0x03, 0x00, 0x08, 0x02, 0x09, 0x18, 0x00, +/* 0000A6D0 */ 0x8E, 0x05, 0x03, 0x09, 0x6C, 0x08, 0x09, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x09, 0x59, 0x01, +/* 0000A6E0 */ 0x03, 0x59, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x08, 0x8E, 0x05, 0x03, 0x09, 0x6C, 0x08, 0x09, 0x01, +/* 0000A6F0 */ 0x07, 0x02, 0x00, 0x59, 0x00, 0x09, 0x59, 0x01, 0x05, 0x1F, 0x02, 0x08, 0x08, 0x45, 0x06, 0x08, +/* 0000A700 */ 0xA8, 0x08, 0x14, 0x08, 0x00, 0x06, 0x08, 0x5E, 0x08, 0x06, 0x02, 0x0F, 0x18, 0x00, 0x08, 0x8E, +/* 0000A710 */ 0x05, 0x03, 0x09, 0x6C, 0x08, 0x09, 0x03, 0x07, 0x03, 0x00, 0x59, 0x00, 0x09, 0x59, 0x01, 0x03, +/* 0000A720 */ 0x59, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x08, 0x5E, 0x00, 0x06, 0x04, 0x09, 0x02, 0x00, 0xA8, 0x00, +/* 0000A730 */ 0x24, 0x00, 0xFE, 0xB6, 0x02, 0xFE, 0x05, 0x02, 0xFE, 0x5E, 0x02, 0xFE, 0xB6, 0x02, 0xFE, 0x57, +/* 0000A740 */ 0x02, 0xFF, 0xEC, 0xA2, 0x02, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3C, 0x00, 0x18, +/* 0000A750 */ 0x00, 0x88, 0x00, 0x18, 0x00, 0x4B, 0x00, 0x0F, 0x00, 0x6B, 0x00, 0x18, 0x00, 0x88, 0x00, 0x09, +/* 0000A760 */ 0x00, 0x37, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x37, 0x0E, 0x10, +/* 0000A770 */ 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x15, 0x04, 0xC3, 0xFF, 0x1F, 0x9C, 0x02, 0x00, 0xFF, 0x1F, 0x9C, +/* 0000A780 */ 0x02, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0x1F, 0x9C, 0x02, 0x00, 0xFE, 0xFD, 0x03, +/* 0000A790 */ 0xFE, 0xFD, 0x03, 0x08, 0x06, 0x0B, 0x07, 0x55, 0x51, 0x05, 0x06, 0x07, 0x07, 0x07, 0x07, 0x0A, +/* 0000A7A0 */ 0x06, 0xFE, 0x94, 0x03, 0x05, 0xFE, 0x88, 0x04, 0x06, 0xFE, 0x30, 0x03, 0x08, 0xFE, 0x19, 0x01, +/* 0000A7B0 */ 0x58, 0x07, 0x4E, 0x08, 0x4E, 0x09, 0x2A, 0x0B, 0x07, 0x15, 0x03, 0x00, 0x0B, 0x02, 0x09, 0x18, +/* 0000A7C0 */ 0x00, 0x8E, 0x05, 0x03, 0x0C, 0x6C, 0x0B, 0x0C, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0C, 0x59, +/* 0000A7D0 */ 0x01, 0x03, 0x59, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x0B, 0x8E, 0x05, 0x03, 0x0C, 0x6C, 0x0B, 0x0C, +/* 0000A7E0 */ 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0C, 0x59, 0x01, 0x07, 0x1F, 0x02, 0x0B, 0x0B, 0x45, 0x08, +/* 0000A7F0 */ 0x0B, 0xA8, 0x0B, 0x14, 0x08, 0x00, 0x08, 0x0B, 0x5E, 0x0B, 0x08, 0x02, 0x0F, 0x18, 0x00, 0x0B, +/* 0000A800 */ 0x8E, 0x05, 0x03, 0x0C, 0x6C, 0x0B, 0x0C, 0x03, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0C, 0x59, 0x01, +/* 0000A810 */ 0x03, 0x59, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x0B, 0xA8, 0x0B, 0x15, 0x03, 0x00, 0x06, 0x0B, 0x09, +/* 0000A820 */ 0x3C, 0x00, 0x8E, 0x05, 0x21, 0x0B, 0x07, 0x02, 0x00, 0x59, 0x00, 0x05, 0x59, 0x01, 0x06, 0x1F, +/* 0000A830 */ 0x02, 0x0B, 0x0B, 0x0F, 0x15, 0x00, 0x0B, 0x8E, 0x05, 0x20, 0x0B, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 0000A840 */ 0x05, 0x59, 0x01, 0x06, 0x1F, 0x02, 0x0B, 0x0B, 0x0F, 0x12, 0x00, 0x0B, 0x8E, 0x05, 0x03, 0x0C, +/* 0000A850 */ 0x6C, 0x0B, 0x0C, 0x04, 0x07, 0x01, 0x00, 0x59, 0x00, 0x0C, 0x1F, 0x01, 0xFF, 0x0B, 0xA8, 0x0B, +/* 0000A860 */ 0x45, 0x09, 0x0B, 0xA8, 0x0B, 0x15, 0x03, 0x00, 0x06, 0x0B, 0x09, 0x1B, 0x00, 0x8E, 0x05, 0x24, +/* 0000A870 */ 0x0C, 0x6C, 0x0B, 0x0C, 0x05, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0C, 0x59, 0x01, 0x06, 0x1F, 0x02, +/* 0000A880 */ 0x0B, 0x0B, 0x45, 0x09, 0x0B, 0x09, 0x11, 0x00, 0x8E, 0x05, 0x1C, 0x0B, 0x07, 0x01, 0x00, 0x59, +/* 0000A890 */ 0x00, 0x05, 0x1F, 0x01, 0x0B, 0x0B, 0x45, 0x09, 0x0B, 0x8E, 0x05, 0x0C, 0x0B, 0x07, 0x02, 0x00, +/* 0000A8A0 */ 0x59, 0x00, 0x05, 0x8E, 0x05, 0x03, 0x0D, 0x6C, 0x0C, 0x0D, 0x06, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 0000A8B0 */ 0x0D, 0x59, 0x01, 0x09, 0x59, 0x02, 0x08, 0x1F, 0x03, 0x0C, 0x0C, 0x59, 0x01, 0x0C, 0x1F, 0x02, +/* 0000A8C0 */ 0x00, 0x0B, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB6, 0x02, 0xFE, 0x05, 0x02, 0xFE, +/* 0000A8D0 */ 0x5E, 0x02, 0xFE, 0xB6, 0x02, 0xFE, 0xB9, 0x02, 0xFE, 0x23, 0x03, 0xFE, 0xFC, 0x01, 0xFF, 0x4B, +/* 0000A8E0 */ 0x9C, 0x02, 0x00, 0x0D, 0x06, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x38, 0x00, 0x18, 0x00, 0x7F, 0x00, +/* 0000A8F0 */ 0x18, 0x00, 0x47, 0x00, 0x0F, 0x00, 0x67, 0x00, 0x18, 0x00, 0x80, 0x00, 0x34, 0x00, 0x56, 0x00, +/* 0000A900 */ 0x12, 0x00, 0x48, 0x00, 0x05, 0x00, 0x2F, 0x00, 0x0A, 0x00, 0x32, 0x00, 0x1B, 0x00, 0x59, 0x00, +/* 0000A910 */ 0x11, 0x00, 0x42, 0x00, 0x2E, 0x00, 0x51, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, +/* 0000A920 */ 0x00, 0xFE, 0x1C, 0x0E, 0x10, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x30, 0x03, 0xC2, 0xFF, 0x9D, 0x97, +/* 0000A930 */ 0x02, 0x00, 0xFF, 0x9D, 0x97, 0x02, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x03, 0x01, 0xFF, 0x9D, 0x97, +/* 0000A940 */ 0x02, 0x00, 0xFE, 0x26, 0x04, 0xFE, 0x26, 0x04, 0x09, 0x05, 0x0B, 0x05, 0x5E, 0x57, 0x05, 0x0A, +/* 0000A950 */ 0x06, 0x06, 0x06, 0x06, 0x0A, 0x08, 0x06, 0xFE, 0x30, 0x03, 0x07, 0xFE, 0x30, 0x01, 0x58, 0x07, +/* 0000A960 */ 0x4E, 0x08, 0x4E, 0x09, 0x15, 0x05, 0x00, 0x05, 0x02, 0xA8, 0x0B, 0x45, 0x05, 0x0B, 0x15, 0x05, +/* 0000A970 */ 0x00, 0x06, 0x02, 0xA8, 0x0B, 0x45, 0x06, 0x0B, 0x4E, 0x08, 0x4E, 0x09, 0x8E, 0x05, 0x07, 0x0B, +/* 0000A980 */ 0x14, 0x0A, 0x00, 0x07, 0x0B, 0xA8, 0x0B, 0x14, 0x03, 0x00, 0x07, 0x0B, 0x09, 0x16, 0x00, 0x8E, +/* 0000A990 */ 0x01, 0x02, 0x0B, 0x4A, 0x0B, 0x07, 0x03, 0x00, 0x59, 0x01, 0x05, 0x59, 0x02, 0x06, 0xC4, 0x03, +/* 0000A9A0 */ 0x00, 0x0B, 0x09, 0xE7, 0x00, 0x8E, 0x05, 0x24, 0x0C, 0x6C, 0x0B, 0x0C, 0x00, 0x07, 0x02, 0x00, +/* 0000A9B0 */ 0x59, 0x00, 0x0C, 0x59, 0x01, 0x07, 0x1F, 0x02, 0x0B, 0x0B, 0x45, 0x08, 0x0B, 0x8E, 0x05, 0x12, +/* 0000A9C0 */ 0x0B, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x08, 0x1F, 0x02, 0x0B, 0x0B, 0x0F, 0x15, +/* 0000A9D0 */ 0x00, 0x0B, 0x8E, 0x05, 0x03, 0x0C, 0x6C, 0x0B, 0x0C, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0C, +/* 0000A9E0 */ 0x59, 0x01, 0x03, 0x1F, 0x02, 0xFF, 0x0B, 0x8E, 0x05, 0x03, 0x0C, 0x6C, 0x0B, 0x0C, 0x02, 0x07, +/* 0000A9F0 */ 0x02, 0x00, 0x59, 0x00, 0x0C, 0x59, 0x01, 0x08, 0x1F, 0x02, 0x0B, 0x0B, 0x45, 0x09, 0x0B, 0xA8, +/* 0000AA00 */ 0x0B, 0x14, 0x03, 0x00, 0x09, 0x0B, 0x09, 0x31, 0x00, 0x8E, 0x05, 0x04, 0x0B, 0x07, 0x03, 0x00, +/* 0000AA10 */ 0x59, 0x00, 0x02, 0xCD, 0x0C, 0x59, 0x01, 0x0C, 0x59, 0x02, 0x04, 0x1F, 0x03, 0x0B, 0x0B, 0x45, +/* 0000AA20 */ 0x09, 0x0B, 0x8E, 0x05, 0x03, 0x0C, 0x6C, 0x0B, 0x0C, 0x03, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0C, +/* 0000AA30 */ 0x59, 0x01, 0x08, 0x59, 0x02, 0x09, 0x1F, 0x03, 0xFF, 0x0B, 0x8E, 0x02, 0x08, 0x0B, 0x4A, 0x0B, +/* 0000AA40 */ 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x09, 0x59, 0x02, 0x05, 0x59, 0x03, 0x06, 0x1F, +/* 0000AA50 */ 0x04, 0xFF, 0x0B, 0x45, 0x0B, 0x09, 0x8E, 0x05, 0x06, 0x0C, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, +/* 0000AA60 */ 0x8E, 0x05, 0x1A, 0x0D, 0x59, 0x01, 0x0D, 0x8E, 0x01, 0x03, 0x0D, 0x4A, 0x0D, 0x59, 0x02, 0x0D, +/* 0000AA70 */ 0x59, 0x03, 0x08, 0x1F, 0x04, 0x0C, 0x0C, 0x76, 0x0C, 0x0B, 0x04, 0x5E, 0x0B, 0x09, 0x05, 0x82, +/* 0000AA80 */ 0x0B, 0x0B, 0x06, 0x01, 0x45, 0x00, 0x08, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x21, +/* 0000AA90 */ 0x03, 0xFE, 0xB2, 0x02, 0xFE, 0x05, 0x02, 0xFE, 0x06, 0x02, 0xFE, 0x57, 0x02, 0xFE, 0x57, 0x02, +/* 0000AAA0 */ 0xFF, 0xB5, 0x97, 0x02, 0x00, 0x10, 0x06, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0E, 0x00, +/* 0000AAB0 */ 0x2B, 0x00, 0x13, 0x00, 0x43, 0x00, 0x16, 0x00, 0x58, 0x00, 0x18, 0x00, 0x37, 0x00, 0x15, 0x00, +/* 0000AAC0 */ 0x38, 0x00, 0x15, 0x00, 0x9D, 0x00, 0x18, 0x00, 0x47, 0x00, 0x0A, 0x00, 0x3A, 0x00, 0x19, 0x00, +/* 0000AAD0 */ 0x3F, 0x00, 0x18, 0x00, 0x58, 0x00, 0x19, 0x00, 0x4F, 0x00, 0x28, 0x00, 0x66, 0x00, 0x09, 0x00, +/* 0000AAE0 */ 0x3D, 0x00, 0x08, 0x00, 0x1C, 0x00, 0x00, 0x7F, 0x5D, 0x00, 0xC1, 0x03, 0x1A, 0x0B, 0x00, 0xFE, +/* 0000AAF0 */ 0x15, 0x0E, 0x0D, 0xA2, 0x41, 0xD1, 0x00, 0xC0, 0xFF, 0x1A, 0x95, 0x02, 0x00, 0xFF, 0x1A, 0x95, +/* 0000AB00 */ 0x02, 0x00, 0x01, 0x40, 0xFE, 0x00, 0x90, 0x06, 0x06, 0xFF, 0x1A, 0x95, 0x02, 0x00, 0xFE, 0x9F, +/* 0000AB10 */ 0x01, 0xFE, 0x9F, 0x01, 0x04, 0xFE, 0x06, 0x01, 0xFE, 0x82, 0x04, 0xFE, 0x83, 0x04, 0xFE, 0x84, +/* 0000AB20 */ 0x04, 0x0C, 0x03, 0x0B, 0x08, 0x16, 0x16, 0x04, 0x03, 0x01, 0x01, 0x01, 0x01, 0x08, 0x09, 0x0A, +/* 0000AB30 */ 0x08, 0x42, 0x96, 0x02, 0x03, 0x96, 0x03, 0x04, 0x96, 0x04, 0x05, 0x96, 0x05, 0x06, 0x8E, 0x04, +/* 0000AB40 */ 0x03, 0x0C, 0x6C, 0x0B, 0x0C, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0C, 0x8E, 0x04, 0x23, 0x0D, +/* 0000AB50 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x92, 0x02, 0x0E, 0x59, 0x01, 0x0E, 0xD6, 0x00, 0x0E, 0x59, +/* 0000AB60 */ 0x02, 0x0E, 0x1F, 0x03, 0x0D, 0x0D, 0x59, 0x01, 0x0D, 0x59, 0x02, 0x07, 0x1F, 0x03, 0xFF, 0x0B, +/* 0000AB70 */ 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x04, 0x02, 0xFF, 0x6D, 0x95, 0x02, 0x00, 0x02, 0x0C, 0x00, 0x00, +/* 0000AB80 */ 0x00, 0x34, 0x00, 0x4B, 0x01, 0x00, 0x8A, 0xAB, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, +/* 0000AB90 */ 0x03, 0x00, 0xFE, 0x16, 0x0E, 0x49, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x87, 0x04, 0xC1, 0xFF, 0xA6, +/* 0000ABA0 */ 0x95, 0x02, 0x00, 0xFF, 0xA6, 0x95, 0x02, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x03, 0x01, 0xFF, 0xA6, +/* 0000ABB0 */ 0x95, 0x02, 0x00, 0xEE, 0xEE, 0x07, 0x03, 0x07, 0x09, 0x1C, 0x1A, 0x05, 0x05, 0x01, 0x01, 0x01, +/* 0000ABC0 */ 0x01, 0x06, 0x08, 0x56, 0x58, 0x05, 0x15, 0x05, 0x00, 0x03, 0x02, 0xA8, 0x07, 0x45, 0x03, 0x07, +/* 0000ABD0 */ 0x15, 0x05, 0x00, 0x04, 0x02, 0xA8, 0x07, 0x45, 0x04, 0x07, 0x8E, 0x02, 0x09, 0x08, 0x4A, 0x08, +/* 0000ABE0 */ 0x6C, 0x07, 0x08, 0x00, 0x07, 0x08, 0x00, 0x59, 0x00, 0x08, 0x59, 0x01, 0x05, 0x8E, 0x01, 0x02, +/* 0000ABF0 */ 0x09, 0x59, 0x02, 0x09, 0x8E, 0x01, 0x03, 0x09, 0x59, 0x03, 0x09, 0x8E, 0x01, 0x04, 0x09, 0x59, +/* 0000AC00 */ 0x04, 0x09, 0x8E, 0x01, 0x05, 0x09, 0x59, 0x05, 0x09, 0x59, 0x06, 0x03, 0x59, 0x07, 0x04, 0x1F, +/* 0000AC10 */ 0x08, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x5A, 0xFF, 0xD2, 0x95, 0x02, 0x00, +/* 0000AC20 */ 0x04, 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0A, 0x00, 0x2B, 0x00, 0x3E, 0x00, 0x81, +/* 0000AC30 */ 0x00, 0x00, 0x7F, 0x5D, 0x00, 0xC1, 0x03, 0x1A, 0x0B, 0x00, 0xFE, 0x0F, 0x0E, 0x0D, 0xA2, 0x41, +/* 0000AC40 */ 0xD1, 0x00, 0xBE, 0xFF, 0xC1, 0x92, 0x02, 0x00, 0xFF, 0xC1, 0x92, 0x02, 0x00, 0x01, 0x40, 0xFE, +/* 0000AC50 */ 0x00, 0x90, 0x06, 0x06, 0xFF, 0xC1, 0x92, 0x02, 0x00, 0xFE, 0x9F, 0x01, 0xFE, 0x9F, 0x01, 0x04, +/* 0000AC60 */ 0xFE, 0x06, 0x01, 0xFE, 0x82, 0x04, 0xFE, 0x83, 0x04, 0xFE, 0x84, 0x04, 0x0C, 0x03, 0x0B, 0x08, +/* 0000AC70 */ 0x16, 0x16, 0x04, 0x03, 0x01, 0x01, 0x01, 0x01, 0x08, 0x09, 0x0A, 0x08, 0x42, 0x96, 0x02, 0x03, +/* 0000AC80 */ 0x96, 0x03, 0x04, 0x96, 0x04, 0x05, 0x96, 0x05, 0x06, 0x8E, 0x04, 0x03, 0x0C, 0x6C, 0x0B, 0x0C, +/* 0000AC90 */ 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0C, 0x8E, 0x04, 0x23, 0x0D, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 0000ACA0 */ 0x02, 0x92, 0x02, 0x0E, 0x59, 0x01, 0x0E, 0xD6, 0x00, 0x0E, 0x59, 0x02, 0x0E, 0x1F, 0x03, 0x0D, +/* 0000ACB0 */ 0x0D, 0x59, 0x01, 0x0D, 0x59, 0x02, 0x07, 0x1F, 0x03, 0xFF, 0x0B, 0xA8, 0x00, 0x24, 0x00, 0xFE, +/* 0000ACC0 */ 0x04, 0x02, 0xFF, 0x14, 0x93, 0x02, 0x00, 0x02, 0x0C, 0x00, 0x00, 0x00, 0x34, 0x00, 0x4B, 0x01, +/* 0000ACD0 */ 0x00, 0xD5, 0xAC, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x10, 0x0E, +/* 0000ACE0 */ 0x49, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x86, 0x04, 0xBF, 0xFF, 0x4D, 0x93, 0x02, 0x00, 0xFF, 0x4D, +/* 0000ACF0 */ 0x93, 0x02, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x03, 0x01, 0xFF, 0x4D, 0x93, 0x02, 0x00, 0xEE, 0xEE, +/* 0000AD00 */ 0x07, 0x03, 0x07, 0x09, 0x1C, 0x1A, 0x05, 0x05, 0x01, 0x01, 0x01, 0x01, 0x06, 0x08, 0x56, 0x58, +/* 0000AD10 */ 0x05, 0x15, 0x05, 0x00, 0x03, 0x02, 0xA8, 0x07, 0x45, 0x03, 0x07, 0x15, 0x05, 0x00, 0x04, 0x02, +/* 0000AD20 */ 0xA8, 0x07, 0x45, 0x04, 0x07, 0x8E, 0x02, 0x09, 0x08, 0x4A, 0x08, 0x6C, 0x07, 0x08, 0x00, 0x07, +/* 0000AD30 */ 0x08, 0x00, 0x59, 0x00, 0x08, 0x59, 0x01, 0x05, 0x8E, 0x01, 0x02, 0x09, 0x59, 0x02, 0x09, 0x8E, +/* 0000AD40 */ 0x01, 0x03, 0x09, 0x59, 0x03, 0x09, 0x8E, 0x01, 0x04, 0x09, 0x59, 0x04, 0x09, 0x8E, 0x01, 0x05, +/* 0000AD50 */ 0x09, 0x59, 0x05, 0x09, 0x59, 0x06, 0x03, 0x59, 0x07, 0x04, 0x1F, 0x08, 0x00, 0x07, 0x09, 0x02, +/* 0000AD60 */ 0x00, 0xA8, 0x00, 0x24, 0x00, 0x5A, 0xFF, 0x79, 0x93, 0x02, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00, +/* 0000AD70 */ 0x0A, 0x00, 0x15, 0x00, 0x0A, 0x00, 0x2B, 0x00, 0x3E, 0x00, 0x81, 0x00, 0x00, 0x7F, 0x5D, 0x00, +/* 0000AD80 */ 0xC1, 0x03, 0x1A, 0x0B, 0x00, 0xFE, 0x09, 0x0E, 0x0D, 0xA2, 0x41, 0xD1, 0x00, 0xBC, 0xFF, 0x7A, +/* 0000AD90 */ 0x90, 0x02, 0x00, 0xFF, 0x7A, 0x90, 0x02, 0x00, 0x01, 0x40, 0xFE, 0x00, 0x90, 0x06, 0x06, 0xFF, +/* 0000ADA0 */ 0x7A, 0x90, 0x02, 0x00, 0xFE, 0x9B, 0x01, 0xFE, 0x9B, 0x01, 0x04, 0xFE, 0x06, 0x01, 0xFE, 0x82, +/* 0000ADB0 */ 0x04, 0xFE, 0x83, 0x04, 0xFE, 0x84, 0x04, 0x0C, 0x03, 0x0B, 0x08, 0x16, 0x16, 0x04, 0x03, 0x01, +/* 0000ADC0 */ 0x01, 0x01, 0x01, 0x08, 0x09, 0x0A, 0x08, 0x42, 0x96, 0x02, 0x03, 0x96, 0x03, 0x04, 0x96, 0x04, +/* 0000ADD0 */ 0x05, 0x96, 0x05, 0x06, 0x8E, 0x04, 0x03, 0x0C, 0x6C, 0x0B, 0x0C, 0x00, 0x07, 0x03, 0x00, 0x59, +/* 0000ADE0 */ 0x00, 0x0C, 0x8E, 0x04, 0x23, 0x0D, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x92, 0x02, 0x0E, 0x59, +/* 0000ADF0 */ 0x01, 0x0E, 0xD6, 0x00, 0x0E, 0x59, 0x02, 0x0E, 0x1F, 0x03, 0x0D, 0x0D, 0x59, 0x01, 0x0D, 0x59, +/* 0000AE00 */ 0x02, 0x07, 0x1F, 0x03, 0xFF, 0x0B, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x04, 0x02, 0xFF, 0xCD, 0x90, +/* 0000AE10 */ 0x02, 0x00, 0x02, 0x0C, 0x00, 0x00, 0x00, 0x34, 0x00, 0x47, 0x01, 0x00, 0x20, 0xAE, 0x00, 0x00, +/* 0000AE20 */ 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x0A, 0x0E, 0x49, 0xA2, 0x41, 0xC3, 0x00, +/* 0000AE30 */ 0xFE, 0x85, 0x04, 0xBD, 0xFF, 0x06, 0x91, 0x02, 0x00, 0xFF, 0x06, 0x91, 0x02, 0x00, 0x09, 0xFE, +/* 0000AE40 */ 0x00, 0x90, 0x03, 0x01, 0xFF, 0x06, 0x91, 0x02, 0x00, 0xEA, 0xEA, 0x07, 0x03, 0x07, 0x09, 0x1C, +/* 0000AE50 */ 0x1A, 0x05, 0x05, 0x01, 0x01, 0x01, 0x01, 0x06, 0x08, 0x56, 0x58, 0x05, 0x15, 0x05, 0x00, 0x03, +/* 0000AE60 */ 0x02, 0xA8, 0x07, 0x45, 0x03, 0x07, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA8, 0x07, 0x45, 0x04, 0x07, +/* 0000AE70 */ 0x8E, 0x02, 0x09, 0x08, 0x4A, 0x08, 0x6C, 0x07, 0x08, 0x00, 0x07, 0x08, 0x00, 0x59, 0x00, 0x08, +/* 0000AE80 */ 0x59, 0x01, 0x05, 0x8E, 0x01, 0x02, 0x09, 0x59, 0x02, 0x09, 0x8E, 0x01, 0x03, 0x09, 0x59, 0x03, +/* 0000AE90 */ 0x09, 0x8E, 0x01, 0x04, 0x09, 0x59, 0x04, 0x09, 0x8E, 0x01, 0x05, 0x09, 0x59, 0x05, 0x09, 0x59, +/* 0000AEA0 */ 0x06, 0x03, 0x59, 0x07, 0x04, 0x1F, 0x08, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, +/* 0000AEB0 */ 0x5A, 0xFF, 0x2E, 0x91, 0x02, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0A, +/* 0000AEC0 */ 0x00, 0x2B, 0x00, 0x3E, 0x00, 0x81, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x07, 0x10, 0x03, 0x00, +/* 0000AED0 */ 0xFE, 0xD2, 0x0D, 0x0C, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x26, 0x04, 0xBB, 0xFF, 0x3B, 0x81, 0x02, +/* 0000AEE0 */ 0x00, 0xFF, 0x3B, 0x81, 0x02, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x07, 0x07, 0xFF, 0x3B, 0x81, 0x02, +/* 0000AEF0 */ 0x00, 0xFE, 0x74, 0x06, 0xFE, 0x74, 0x06, 0x0F, 0x07, 0x11, 0x0A, 0x89, 0x83, 0x04, 0x0C, 0x04, +/* 0000AF00 */ 0x04, 0x04, 0x04, 0x01, 0x10, 0x06, 0xFE, 0x94, 0x03, 0x06, 0xFE, 0x2E, 0x04, 0x08, 0x05, 0xFE, +/* 0000AF10 */ 0x81, 0x04, 0x07, 0xFE, 0xBC, 0x01, 0x58, 0x0D, 0x4E, 0x0E, 0x4E, 0x0F, 0x2A, 0x11, 0x0D, 0x15, +/* 0000AF20 */ 0x0D, 0x00, 0x11, 0x02, 0x8E, 0x04, 0x0D, 0x11, 0xE3, 0x11, 0x0D, 0x11, 0x00, 0x0F, 0x18, 0x00, +/* 0000AF30 */ 0x11, 0x8E, 0x04, 0x03, 0x12, 0x6C, 0x11, 0x12, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x12, 0x59, +/* 0000AF40 */ 0x01, 0x07, 0x59, 0x02, 0x03, 0x1F, 0x03, 0xFF, 0x11, 0x8E, 0x04, 0x06, 0x11, 0x07, 0x03, 0x00, +/* 0000AF50 */ 0x59, 0x00, 0x04, 0x8E, 0x04, 0x1B, 0x12, 0x59, 0x01, 0x12, 0x8E, 0x04, 0x0D, 0x12, 0x07, 0x02, +/* 0000AF60 */ 0x00, 0x59, 0x01, 0x0D, 0xC4, 0x02, 0x12, 0x12, 0x59, 0x02, 0x12, 0x1F, 0x03, 0x11, 0x11, 0x45, +/* 0000AF70 */ 0x0E, 0x11, 0x8E, 0x04, 0x21, 0x11, 0x07, 0x02, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x0E, 0x1F, +/* 0000AF80 */ 0x02, 0x11, 0x11, 0x0F, 0x15, 0x00, 0x11, 0x8E, 0x04, 0x20, 0x11, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 0000AF90 */ 0x04, 0x59, 0x01, 0x0E, 0x1F, 0x02, 0x11, 0x11, 0x0F, 0x06, 0x00, 0x11, 0x45, 0x00, 0x05, 0x09, +/* 0000AFA0 */ 0x2E, 0x01, 0xA8, 0x11, 0x45, 0x0F, 0x11, 0x8E, 0x04, 0x03, 0x11, 0x5E, 0x11, 0x11, 0x01, 0x0E, +/* 0000AFB0 */ 0x8B, 0x00, 0x11, 0xA8, 0x11, 0x14, 0x03, 0x00, 0x0B, 0x11, 0x09, 0x81, 0x00, 0xA8, 0x11, 0x14, +/* 0000AFC0 */ 0x03, 0x00, 0x0C, 0x11, 0x09, 0x77, 0x00, 0x8E, 0x01, 0x0A, 0x11, 0x4A, 0x11, 0x97, 0x11, 0x11, +/* 0000AFD0 */ 0x0A, 0x0E, 0x10, 0x00, 0x11, 0x8E, 0x01, 0x0A, 0x11, 0x4A, 0x11, 0x97, 0x11, 0x11, 0x0A, 0x45, +/* 0000AFE0 */ 0x0F, 0x11, 0x09, 0x59, 0x00, 0x8E, 0x04, 0x04, 0x11, 0x07, 0x03, 0x00, 0x59, 0x00, 0x04, 0xCD, +/* 0000AFF0 */ 0x12, 0x59, 0x01, 0x12, 0x59, 0x02, 0x06, 0x1F, 0x03, 0x11, 0x11, 0x45, 0x0F, 0x11, 0x8E, 0x01, +/* 0000B000 */ 0x08, 0x11, 0x4A, 0x11, 0x07, 0x04, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x0F, 0xA8, 0x12, 0x59, +/* 0000B010 */ 0x02, 0x12, 0x8E, 0x01, 0x02, 0x12, 0x4A, 0x12, 0x07, 0x04, 0x00, 0x59, 0x00, 0x04, 0xA8, 0x13, +/* 0000B020 */ 0x59, 0x01, 0x13, 0x59, 0x02, 0x08, 0x59, 0x03, 0x09, 0x1F, 0x04, 0x12, 0x12, 0x59, 0x03, 0x12, +/* 0000B030 */ 0x1F, 0x04, 0xFF, 0x11, 0x8E, 0x01, 0x0A, 0x11, 0x4A, 0x11, 0x9C, 0x0F, 0x11, 0x0A, 0x0F, 0x4B, +/* 0000B040 */ 0x00, 0x0F, 0x8E, 0x04, 0x04, 0x11, 0x07, 0x03, 0x00, 0x59, 0x00, 0x04, 0xCD, 0x12, 0x59, 0x01, +/* 0000B050 */ 0x12, 0x59, 0x02, 0x06, 0x1F, 0x03, 0x11, 0x11, 0x45, 0x0F, 0x11, 0x8E, 0x01, 0x08, 0x11, 0x4A, +/* 0000B060 */ 0x11, 0x07, 0x04, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x0F, 0x59, 0x02, 0x0B, 0x8E, 0x01, 0x02, +/* 0000B070 */ 0x12, 0x4A, 0x12, 0x07, 0x04, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x0C, 0x59, 0x02, 0x08, 0x59, +/* 0000B080 */ 0x03, 0x09, 0x1F, 0x04, 0x12, 0x12, 0x59, 0x03, 0x12, 0x1F, 0x04, 0xFF, 0x11, 0x8E, 0x04, 0x0C, +/* 0000B090 */ 0x11, 0x07, 0x02, 0x00, 0x59, 0x00, 0x04, 0x8E, 0x04, 0x03, 0x13, 0x6C, 0x12, 0x13, 0x02, 0x07, +/* 0000B0A0 */ 0x03, 0x00, 0x59, 0x00, 0x13, 0x8E, 0x04, 0x24, 0x15, 0x6C, 0x14, 0x15, 0x03, 0x07, 0x02, 0x00, +/* 0000B0B0 */ 0x59, 0x00, 0x15, 0x59, 0x01, 0x0D, 0x1F, 0x02, 0x14, 0x14, 0x59, 0x01, 0x14, 0x59, 0x02, 0x0F, +/* 0000B0C0 */ 0x1F, 0x03, 0x12, 0x12, 0x59, 0x01, 0x12, 0x1F, 0x02, 0x00, 0x11, 0x09, 0x02, 0x00, 0xA8, 0x00, +/* 0000B0D0 */ 0x24, 0x00, 0xFE, 0xB6, 0x02, 0xFE, 0x4D, 0x03, 0xFE, 0xFC, 0x01, 0xFE, 0x23, 0x03, 0xFF, 0xB4, +/* 0000B0E0 */ 0x81, 0x02, 0x00, 0x11, 0x06, 0x00, 0x00, 0x00, 0x15, 0x00, 0x4F, 0x00, 0x18, 0x00, 0x50, 0x00, +/* 0000B0F0 */ 0x29, 0x00, 0x53, 0x00, 0x2A, 0x00, 0x3C, 0x00, 0x06, 0x00, 0x3A, 0x00, 0x05, 0x00, 0x2D, 0x00, +/* 0000B100 */ 0x20, 0x00, 0xCE, 0x00, 0x0E, 0x00, 0x84, 0x00, 0x10, 0x00, 0xA2, 0x00, 0x19, 0x00, 0x3E, 0x00, +/* 0000B110 */ 0x36, 0x00, 0x7A, 0x00, 0x0A, 0x00, 0x7C, 0x00, 0x04, 0x00, 0x28, 0x00, 0x19, 0x00, 0x3A, 0x00, +/* 0000B120 */ 0x32, 0x00, 0x81, 0x00, 0x43, 0x00, 0x5A, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x53, 0x50, 0x43, +/* 0000B130 */ 0x00, 0xFE, 0x45, 0x0D, 0x0C, 0xB3, 0x41, 0xC1, 0x00, 0xFE, 0x29, 0x04, 0xBA, 0xFF, 0x24, 0x64, +/* 0000B140 */ 0x02, 0x00, 0xFF, 0x24, 0x64, 0x02, 0x00, 0x45, 0xFE, 0x00, 0x90, 0x04, 0x04, 0xFF, 0x24, 0x64, +/* 0000B150 */ 0x02, 0x00, 0xFE, 0x7E, 0x1B, 0xFE, 0x7E, 0x1B, 0x1C, 0x29, 0x41, 0x07, 0xFE, 0xB3, 0x01, 0xFE, +/* 0000B160 */ 0x96, 0x01, 0x04, 0x0F, 0x2D, 0x2D, 0x2D, 0x2D, 0x01, 0x01, 0x40, 0x41, 0x06, 0xFE, 0x94, 0x03, +/* 0000B170 */ 0x06, 0xFE, 0xBA, 0x04, 0x08, 0x06, 0xFE, 0x30, 0x03, 0x0B, 0x06, 0xFE, 0x3F, 0x04, 0x06, 0xFE, +/* 0000B180 */ 0x42, 0x04, 0x06, 0xFE, 0xE0, 0x03, 0x06, 0xFE, 0xA3, 0x03, 0x05, 0xFE, 0x9C, 0x03, 0x05, 0xFE, +/* 0000B190 */ 0xDF, 0x03, 0x06, 0xFE, 0x77, 0x04, 0x06, 0xFE, 0x33, 0x04, 0x06, 0xFE, 0x2F, 0x04, 0x06, 0xFE, +/* 0000B1A0 */ 0x30, 0x04, 0x06, 0xFE, 0x31, 0x04, 0x06, 0xFE, 0x34, 0x04, 0x06, 0xFE, 0x35, 0x04, 0x06, 0xFE, +/* 0000B1B0 */ 0x32, 0x04, 0x06, 0xFE, 0xF8, 0x03, 0x06, 0xFE, 0x36, 0x04, 0x06, 0xFE, 0x37, 0x04, 0x06, 0xFE, +/* 0000B1C0 */ 0x38, 0x04, 0x06, 0xFE, 0x39, 0x04, 0x06, 0xFE, 0x3A, 0x04, 0x06, 0xFE, 0x3B, 0x04, 0x06, 0xFE, +/* 0000B1D0 */ 0x55, 0x04, 0x06, 0xFE, 0xA2, 0x03, 0x05, 0xFE, 0x7C, 0x04, 0x05, 0xFE, 0x7D, 0x04, 0x05, 0xFE, +/* 0000B1E0 */ 0x00, 0x05, 0x05, 0xFE, 0x01, 0x05, 0x07, 0x06, 0xFE, 0x17, 0x04, 0x06, 0xFE, 0x74, 0x04, 0x0C, +/* 0000B1F0 */ 0x05, 0xFE, 0x02, 0x05, 0x06, 0xFE, 0x40, 0x04, 0x01, 0x00, 0xFE, 0x88, 0x05, 0xA8, 0x3F, 0x2A, +/* 0000B200 */ 0x42, 0x29, 0x0D, 0x03, 0x00, 0x42, 0x02, 0x09, 0x12, 0x00, 0x8E, 0x04, 0x03, 0x43, 0x6C, 0x42, +/* 0000B210 */ 0x43, 0x00, 0x07, 0x01, 0x00, 0x59, 0x00, 0x43, 0x1F, 0x01, 0xFF, 0x42, 0x8E, 0x04, 0x06, 0x42, +/* 0000B220 */ 0x07, 0x04, 0x00, 0x59, 0x00, 0x04, 0x8E, 0x04, 0x14, 0x43, 0x59, 0x01, 0x43, 0x59, 0x02, 0x29, +/* 0000B230 */ 0x59, 0x03, 0x03, 0x1F, 0x04, 0x42, 0x42, 0x0E, 0x20, 0x00, 0x42, 0x5E, 0x42, 0x29, 0x01, 0x0E, +/* 0000B240 */ 0x18, 0x00, 0x42, 0x8E, 0x04, 0x03, 0x43, 0x6C, 0x42, 0x43, 0x02, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 0000B250 */ 0x43, 0x59, 0x01, 0x05, 0x59, 0x02, 0x05, 0x1F, 0x03, 0xFF, 0x42, 0x76, 0x06, 0x29, 0x03, 0x8E, +/* 0000B260 */ 0x01, 0x02, 0x42, 0x4A, 0x42, 0x07, 0x04, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x2B, 0x59, 0x02, +/* 0000B270 */ 0x07, 0x59, 0x03, 0x08, 0x1F, 0x04, 0x42, 0x42, 0x45, 0x2B, 0x42, 0x8E, 0x03, 0x02, 0x42, 0x4A, +/* 0000B280 */ 0x42, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x2B, 0x59, 0x02, 0x09, 0x59, 0x03, 0x0A, +/* 0000B290 */ 0xCF, 0x43, 0x02, 0xA1, 0x00, 0x0B, 0x43, 0xA1, 0x01, 0x0C, 0x43, 0x59, 0x04, 0x43, 0x59, 0x05, +/* 0000B2A0 */ 0x0C, 0x1F, 0x06, 0x42, 0x42, 0x45, 0x2E, 0x42, 0x8E, 0x03, 0x02, 0x42, 0x4A, 0x42, 0x07, 0x06, +/* 0000B2B0 */ 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x2B, 0x59, 0x02, 0x0D, 0x59, 0x03, 0x0A, 0xA8, 0x43, 0x59, +/* 0000B2C0 */ 0x04, 0x43, 0xA8, 0x43, 0x59, 0x05, 0x43, 0x1F, 0x06, 0x42, 0x42, 0x45, 0x2F, 0x42, 0xA8, 0x42, +/* 0000B2D0 */ 0x15, 0x03, 0x00, 0x2F, 0x42, 0x09, 0x1B, 0x00, 0x8E, 0x04, 0x03, 0x43, 0x6C, 0x42, 0x43, 0x04, +/* 0000B2E0 */ 0x07, 0x02, 0x00, 0x59, 0x00, 0x43, 0x59, 0x01, 0x2F, 0x1F, 0x02, 0x42, 0x42, 0x45, 0x2F, 0x42, +/* 0000B2F0 */ 0x09, 0x15, 0x00, 0x8E, 0x04, 0x03, 0x43, 0x6C, 0x42, 0x43, 0x05, 0x07, 0x01, 0x00, 0x59, 0x00, +/* 0000B300 */ 0x43, 0x1F, 0x01, 0x42, 0x42, 0x45, 0x2F, 0x42, 0xA8, 0x42, 0x14, 0x03, 0x00, 0x2F, 0x42, 0x09, +/* 0000B310 */ 0x12, 0x00, 0x8E, 0x04, 0x03, 0x43, 0x6C, 0x42, 0x43, 0x06, 0x07, 0x01, 0x00, 0x59, 0x00, 0x43, +/* 0000B320 */ 0x1F, 0x01, 0xFF, 0x42, 0x8E, 0x03, 0x02, 0x42, 0x4A, 0x42, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, +/* 0000B330 */ 0x59, 0x01, 0x2B, 0x59, 0x02, 0x0E, 0x59, 0x03, 0x0A, 0xCF, 0x43, 0x03, 0xA1, 0x00, 0x0F, 0x43, +/* 0000B340 */ 0xA1, 0x01, 0x10, 0x43, 0xA1, 0x02, 0x11, 0x43, 0x59, 0x04, 0x43, 0xA8, 0x43, 0x59, 0x05, 0x43, +/* 0000B350 */ 0x1F, 0x06, 0x42, 0x42, 0x45, 0x30, 0x42, 0x8E, 0x03, 0x02, 0x42, 0x4A, 0x42, 0x07, 0x06, 0x00, +/* 0000B360 */ 0x59, 0x00, 0x04, 0x59, 0x01, 0x2B, 0x59, 0x02, 0x12, 0x59, 0x03, 0x0A, 0xCF, 0x43, 0x03, 0xA1, +/* 0000B370 */ 0x00, 0x0F, 0x43, 0xA1, 0x01, 0x10, 0x43, 0xA1, 0x02, 0x11, 0x43, 0x59, 0x04, 0x43, 0xA8, 0x43, +/* 0000B380 */ 0x59, 0x05, 0x43, 0x1F, 0x06, 0x42, 0x42, 0x45, 0x31, 0x42, 0x8E, 0x03, 0x02, 0x42, 0x4A, 0x42, +/* 0000B390 */ 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x2B, 0x59, 0x02, 0x13, 0x59, 0x03, 0x0A, 0xCF, +/* 0000B3A0 */ 0x43, 0x02, 0xA1, 0x00, 0x14, 0x43, 0xA1, 0x01, 0x15, 0x43, 0x59, 0x04, 0x43, 0xA8, 0x43, 0x59, +/* 0000B3B0 */ 0x05, 0x43, 0x1F, 0x06, 0x42, 0x42, 0x45, 0x32, 0x42, 0x8E, 0x03, 0x02, 0x42, 0x4A, 0x42, 0x07, +/* 0000B3C0 */ 0x06, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x2B, 0x59, 0x02, 0x16, 0x59, 0x03, 0x0A, 0xCF, 0x43, +/* 0000B3D0 */ 0x05, 0xA1, 0x00, 0x14, 0x43, 0xA1, 0x01, 0x15, 0x43, 0xA1, 0x02, 0x0F, 0x43, 0xA1, 0x03, 0x10, +/* 0000B3E0 */ 0x43, 0xA1, 0x04, 0x11, 0x43, 0x59, 0x04, 0x43, 0xA8, 0x43, 0x59, 0x05, 0x43, 0x1F, 0x06, 0x42, +/* 0000B3F0 */ 0x42, 0x45, 0x33, 0x42, 0x8E, 0x03, 0x02, 0x42, 0x4A, 0x42, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, +/* 0000B400 */ 0x59, 0x01, 0x2B, 0x59, 0x02, 0x17, 0x59, 0x03, 0x0A, 0xCF, 0x43, 0x02, 0xA1, 0x00, 0x14, 0x43, +/* 0000B410 */ 0xA1, 0x01, 0x15, 0x43, 0x59, 0x04, 0x43, 0xA8, 0x43, 0x59, 0x05, 0x43, 0x1F, 0x06, 0x42, 0x42, +/* 0000B420 */ 0x45, 0x34, 0x42, 0x8E, 0x03, 0x02, 0x42, 0x4A, 0x42, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, 0x59, +/* 0000B430 */ 0x01, 0x2B, 0x59, 0x02, 0x18, 0x59, 0x03, 0x0A, 0xCF, 0x43, 0x02, 0xA1, 0x00, 0x14, 0x43, 0xA1, +/* 0000B440 */ 0x01, 0x15, 0x43, 0x59, 0x04, 0x43, 0xA8, 0x43, 0x59, 0x05, 0x43, 0x1F, 0x06, 0x42, 0x42, 0x45, +/* 0000B450 */ 0x35, 0x42, 0x8E, 0x03, 0x02, 0x42, 0x4A, 0x42, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, +/* 0000B460 */ 0x2B, 0x59, 0x02, 0x19, 0x59, 0x03, 0x0A, 0xCF, 0x43, 0x02, 0xA1, 0x00, 0x14, 0x43, 0xA1, 0x01, +/* 0000B470 */ 0x15, 0x43, 0x59, 0x04, 0x43, 0xA8, 0x43, 0x59, 0x05, 0x43, 0x1F, 0x06, 0x42, 0x42, 0x45, 0x36, +/* 0000B480 */ 0x42, 0x8E, 0x03, 0x02, 0x42, 0x4A, 0x42, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x2B, +/* 0000B490 */ 0x59, 0x02, 0x1A, 0x59, 0x03, 0x0A, 0xCF, 0x43, 0x02, 0xA1, 0x00, 0x14, 0x43, 0xA1, 0x01, 0x15, +/* 0000B4A0 */ 0x43, 0x59, 0x04, 0x43, 0xA8, 0x43, 0x59, 0x05, 0x43, 0x1F, 0x06, 0x42, 0x42, 0x45, 0x37, 0x42, +/* 0000B4B0 */ 0x8E, 0x03, 0x02, 0x42, 0x4A, 0x42, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x2B, 0x59, +/* 0000B4C0 */ 0x02, 0x1B, 0x59, 0x03, 0x0A, 0xCF, 0x43, 0x02, 0xA1, 0x00, 0x10, 0x43, 0xA1, 0x01, 0x11, 0x43, +/* 0000B4D0 */ 0x59, 0x04, 0x43, 0xA8, 0x43, 0x59, 0x05, 0x43, 0x1F, 0x06, 0x42, 0x42, 0x45, 0x38, 0x42, 0x0E, +/* 0000B4E0 */ 0x29, 0x00, 0x35, 0x8E, 0x03, 0x02, 0x43, 0x4A, 0x43, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, 0x59, +/* 0000B4F0 */ 0x01, 0x2B, 0x59, 0x02, 0x1C, 0x59, 0x03, 0x1D, 0xA8, 0x44, 0x59, 0x04, 0x44, 0xA8, 0x44, 0x59, +/* 0000B500 */ 0x05, 0x44, 0x1F, 0x06, 0x43, 0x43, 0x45, 0x42, 0x43, 0x09, 0x05, 0x00, 0xA8, 0x43, 0x46, 0x42, +/* 0000B510 */ 0x43, 0x45, 0x39, 0x42, 0x8E, 0x03, 0x02, 0x42, 0x4A, 0x42, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, +/* 0000B520 */ 0x59, 0x01, 0x2B, 0x59, 0x02, 0x1E, 0x59, 0x03, 0x0A, 0xCF, 0x43, 0x02, 0xA1, 0x00, 0x1F, 0x43, +/* 0000B530 */ 0xA1, 0x01, 0x0C, 0x43, 0x59, 0x04, 0x43, 0x59, 0x05, 0x0C, 0x1F, 0x06, 0x42, 0x42, 0x45, 0x3A, +/* 0000B540 */ 0x42, 0xA8, 0x42, 0x15, 0x03, 0x00, 0x39, 0x42, 0x09, 0x13, 0x00, 0x0E, 0x06, 0x00, 0x39, 0x45, +/* 0000B550 */ 0x43, 0x20, 0x09, 0x03, 0x00, 0x46, 0x43, 0x21, 0x45, 0x42, 0x43, 0x09, 0x05, 0x00, 0xA8, 0x43, +/* 0000B560 */ 0x46, 0x42, 0x43, 0x45, 0x3B, 0x42, 0x8E, 0x01, 0x03, 0x42, 0x4A, 0x42, 0x07, 0x02, 0x00, 0x59, +/* 0000B570 */ 0x00, 0x04, 0x8E, 0x04, 0x04, 0x43, 0x07, 0x03, 0x00, 0x59, 0x00, 0x04, 0xCE, 0x00, 0x00, 0x00, +/* 0000B580 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x7A, 0x30, 0x44, 0x07, 0x7A, 0x31, 0x44, +/* 0000B590 */ 0x08, 0x7A, 0x32, 0x44, 0x09, 0x7A, 0x33, 0x44, 0x0A, 0x7A, 0x34, 0x44, 0x0B, 0x7A, 0x35, 0x44, +/* 0000B5A0 */ 0x0C, 0x7A, 0x36, 0x44, 0x0D, 0x7A, 0x37, 0x44, 0x0E, 0x7A, 0x38, 0x44, 0x0F, 0x59, 0x01, 0x44, +/* 0000B5B0 */ 0x59, 0x02, 0x22, 0x1F, 0x03, 0x43, 0x43, 0x59, 0x01, 0x43, 0x1F, 0x02, 0x42, 0x42, 0x45, 0x3C, +/* 0000B5C0 */ 0x42, 0x8E, 0x03, 0x07, 0x42, 0x4A, 0x42, 0x07, 0x02, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x2A, +/* 0000B5D0 */ 0x1F, 0x02, 0x42, 0x42, 0x45, 0x2A, 0x42, 0x8E, 0x04, 0x2A, 0x42, 0x07, 0x05, 0x00, 0x59, 0x00, +/* 0000B5E0 */ 0x04, 0x59, 0x01, 0x2A, 0x59, 0x02, 0x2E, 0xCF, 0x43, 0x02, 0xA1, 0x00, 0x23, 0x43, 0xA1, 0x01, +/* 0000B5F0 */ 0x24, 0x43, 0x59, 0x03, 0x43, 0x8E, 0x04, 0x2B, 0x43, 0x59, 0x04, 0x43, 0x1F, 0x05, 0x42, 0x42, +/* 0000B600 */ 0x45, 0x3D, 0x42, 0x76, 0x2E, 0x29, 0x10, 0x76, 0x2F, 0x29, 0x11, 0x5E, 0x42, 0x3D, 0x12, 0x76, +/* 0000B610 */ 0x42, 0x29, 0x13, 0x76, 0x30, 0x29, 0x14, 0x76, 0x31, 0x29, 0x15, 0x76, 0x32, 0x29, 0x16, 0x76, +/* 0000B620 */ 0x33, 0x29, 0x17, 0x76, 0x34, 0x29, 0x18, 0x76, 0x35, 0x29, 0x19, 0x76, 0x36, 0x29, 0x1A, 0x76, +/* 0000B630 */ 0x37, 0x29, 0x1B, 0x76, 0x38, 0x29, 0x1C, 0x76, 0x39, 0x29, 0x1D, 0x76, 0x3A, 0x29, 0x1E, 0x76, +/* 0000B640 */ 0x3B, 0x29, 0x1F, 0x76, 0x3C, 0x29, 0x20, 0x45, 0x3E, 0x25, 0xE7, 0x1A, 0x00, 0x8E, 0x03, 0x0B, +/* 0000B650 */ 0x42, 0x4A, 0x42, 0x07, 0x03, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x29, 0x59, 0x02, 0x25, 0x1F, +/* 0000B660 */ 0x03, 0xFF, 0x42, 0xEB, 0x09, 0x51, 0x00, 0xE9, 0x2C, 0x06, 0x8E, 0x04, 0x22, 0x42, 0x07, 0x02, +/* 0000B670 */ 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x2C, 0x1F, 0x02, 0xFF, 0x42, 0x8E, 0x01, 0x02, 0x42, 0x4A, +/* 0000B680 */ 0x42, 0x07, 0x04, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x2B, 0x59, 0x02, 0x26, 0x59, 0x03, 0x27, +/* 0000B690 */ 0x1F, 0x04, 0x42, 0x42, 0x45, 0x3F, 0x42, 0x45, 0x42, 0x29, 0x8E, 0x01, 0x03, 0x43, 0x4A, 0x43, +/* 0000B6A0 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x3F, 0x59, 0x02, 0x22, 0x1F, 0x03, 0x43, 0x43, +/* 0000B6B0 */ 0x76, 0x43, 0x42, 0x21, 0x45, 0x3E, 0x06, 0xEB, 0x0F, 0x25, 0x00, 0x3E, 0x45, 0x42, 0x29, 0x8E, +/* 0000B6C0 */ 0x01, 0x07, 0x43, 0x4A, 0x43, 0x07, 0x03, 0x00, 0x59, 0x00, 0x04, 0x5E, 0x44, 0x29, 0x22, 0x97, +/* 0000B6D0 */ 0x44, 0x44, 0x28, 0x59, 0x01, 0x44, 0x59, 0x02, 0x29, 0x1F, 0x03, 0x43, 0x43, 0x76, 0x43, 0x42, +/* 0000B6E0 */ 0x23, 0xE7, 0x1A, 0x00, 0x8E, 0x03, 0x0B, 0x42, 0x4A, 0x42, 0x07, 0x03, 0x00, 0x59, 0x00, 0x04, +/* 0000B6F0 */ 0x59, 0x01, 0x29, 0x59, 0x02, 0x06, 0x1F, 0x03, 0xFF, 0x42, 0xEB, 0x09, 0x27, 0x00, 0xE9, 0x2D, +/* 0000B700 */ 0x06, 0x8E, 0x04, 0x22, 0x42, 0x07, 0x02, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x2D, 0x1F, 0x02, +/* 0000B710 */ 0xFF, 0x42, 0x8E, 0x04, 0x03, 0x43, 0x6C, 0x42, 0x43, 0x24, 0x07, 0x01, 0x00, 0x59, 0x00, 0x43, +/* 0000B720 */ 0x1F, 0x01, 0xFF, 0x42, 0xEB, 0x8E, 0x01, 0x04, 0x42, 0x4A, 0x42, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 0000B730 */ 0x04, 0x5E, 0x43, 0x29, 0x25, 0x59, 0x01, 0x43, 0x1F, 0x02, 0x42, 0x42, 0x76, 0x42, 0x29, 0x26, +/* 0000B740 */ 0x45, 0x42, 0x29, 0x8E, 0x04, 0x06, 0x43, 0x07, 0x03, 0x00, 0x59, 0x00, 0x04, 0x8E, 0x04, 0x1E, +/* 0000B750 */ 0x44, 0x59, 0x01, 0x44, 0x5E, 0x44, 0x29, 0x27, 0x59, 0x02, 0x44, 0x1F, 0x03, 0x43, 0x43, 0x76, +/* 0000B760 */ 0x43, 0x42, 0x28, 0x5E, 0x42, 0x29, 0x29, 0xA8, 0x43, 0x15, 0x03, 0x00, 0x42, 0x43, 0x09, 0x0C, +/* 0000B770 */ 0x00, 0x5E, 0x42, 0x29, 0x2A, 0x41, 0x42, 0x42, 0x20, 0x76, 0x42, 0x29, 0x2B, 0x76, 0x06, 0x29, +/* 0000B780 */ 0x2C, 0xA8, 0x00, 0x24, 0x00, 0x01, 0x2C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x09, 0x00, 0x00, +/* 0000B790 */ 0x00, 0x00, 0x00, 0x00, 0x76, 0x02, 0x00, 0x00, 0x6D, 0x02, 0x00, 0x00, 0x77, 0x02, 0x00, 0x00, +/* 0000B7A0 */ 0x71, 0x02, 0x00, 0x00, 0x6C, 0x02, 0x00, 0x00, 0x6E, 0x02, 0x00, 0x00, 0x70, 0x02, 0x00, 0x00, +/* 0000B7B0 */ 0x73, 0x02, 0x00, 0x00, 0x75, 0x02, 0x00, 0x00, 0xFE, 0xAA, 0x02, 0xFE, 0x08, 0x02, 0xFE, 0xAB, +/* 0000B7C0 */ 0x02, 0xFE, 0x08, 0x02, 0xFE, 0xFD, 0x01, 0xFE, 0xFE, 0x01, 0xFE, 0xAD, 0x02, 0xFE, 0x76, 0x02, +/* 0000B7D0 */ 0xFE, 0x6D, 0x02, 0xFE, 0x77, 0x02, 0xFE, 0x71, 0x02, 0xFE, 0x6C, 0x02, 0xFE, 0x6E, 0x02, 0xFE, +/* 0000B7E0 */ 0x70, 0x02, 0xFE, 0x73, 0x02, 0xFE, 0x75, 0x02, 0xFE, 0x5F, 0x02, 0xFE, 0x65, 0x02, 0xFE, 0x0D, +/* 0000B7F0 */ 0x02, 0xFE, 0x09, 0x02, 0xFE, 0x67, 0x02, 0xFE, 0x5A, 0x02, 0xFE, 0x6A, 0x02, 0xFE, 0x61, 0x02, +/* 0000B800 */ 0xFE, 0x59, 0x02, 0xFE, 0x5C, 0x02, 0xFE, 0x60, 0x02, 0xFE, 0x63, 0x02, 0xFE, 0x66, 0x02, 0xFE, +/* 0000B810 */ 0x5D, 0x02, 0xFE, 0x5B, 0x02, 0xFE, 0x69, 0x02, 0xFE, 0x3E, 0x02, 0xFE, 0x3E, 0x02, 0xFE, 0x62, +/* 0000B820 */ 0x02, 0xFE, 0x3E, 0x02, 0xFE, 0xAD, 0x02, 0xFE, 0x68, 0x02, 0xFE, 0x58, 0x02, 0xFE, 0x3D, 0x02, +/* 0000B830 */ 0xFE, 0x3D, 0x02, 0xFE, 0x5C, 0x02, 0xFE, 0x69, 0x02, 0xFE, 0x5D, 0x02, 0xFE, 0x5E, 0x02, 0xFF, +/* 0000B840 */ 0x7D, 0x64, 0x02, 0x00, 0x3F, 0x02, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3D, 0x00, 0x12, 0x00, 0x3F, +/* 0000B850 */ 0x00, 0x27, 0x00, 0x9F, 0x00, 0x18, 0x00, 0x71, 0x00, 0x04, 0x00, 0x67, 0x00, 0x1C, 0x00, 0x46, +/* 0000B860 */ 0x00, 0x2D, 0x00, 0x71, 0x00, 0x26, 0x00, 0x60, 0x00, 0x0A, 0x00, 0x32, 0x00, 0x1B, 0x00, 0x6C, +/* 0000B870 */ 0x00, 0x15, 0x00, 0x4D, 0x00, 0x0A, 0x00, 0x32, 0x00, 0x12, 0x00, 0x6C, 0x00, 0x33, 0x00, 0x6F, +/* 0000B880 */ 0x00, 0x33, 0x00, 0x67, 0x00, 0x2F, 0x00, 0x64, 0x00, 0x3B, 0x00, 0x81, 0x00, 0x2F, 0x00, 0x62, +/* 0000B890 */ 0x00, 0x2F, 0x00, 0x64, 0x00, 0x2F, 0x00, 0x68, 0x00, 0x2F, 0x00, 0x68, 0x00, 0x2F, 0x00, 0x70, +/* 0000B8A0 */ 0x00, 0x35, 0x00, 0x6F, 0x00, 0x2D, 0x00, 0x77, 0x00, 0x25, 0x00, 0x71, 0x00, 0x5B, 0x00, 0xD0, +/* 0000B8B0 */ 0x01, 0x16, 0x00, 0x41, 0x00, 0x2C, 0x00, 0x9A, 0x00, 0x04, 0x00, 0x34, 0x00, 0x04, 0x00, 0x36, +/* 0000B8C0 */ 0x00, 0x08, 0x00, 0x68, 0x00, 0x04, 0x00, 0x34, 0x00, 0x04, 0x00, 0x2C, 0x00, 0x04, 0x00, 0x2E, +/* 0000B8D0 */ 0x00, 0x04, 0x00, 0x30, 0x00, 0x04, 0x00, 0x2C, 0x00, 0x04, 0x00, 0x2E, 0x00, 0x04, 0x00, 0x32, +/* 0000B8E0 */ 0x00, 0x04, 0x00, 0x32, 0x00, 0x04, 0x00, 0x3F, 0x00, 0x04, 0x00, 0x32, 0x00, 0x04, 0x00, 0x40, +/* 0000B8F0 */ 0x00, 0x04, 0x00, 0x3F, 0x00, 0x04, 0x00, 0x0F, 0x03, 0x06, 0x00, 0x93, 0x00, 0x1C, 0x00, 0x3F, +/* 0000B900 */ 0x00, 0x01, 0x00, 0x4A, 0x00, 0x11, 0x00, 0xEF, 0x00, 0x1C, 0x00, 0x54, 0x00, 0x1D, 0x00, 0x6A, +/* 0000B910 */ 0x00, 0x04, 0x00, 0x37, 0x00, 0x04, 0x00, 0x5A, 0x00, 0x28, 0x00, 0xDE, 0x00, 0x1C, 0x00, 0x3E, +/* 0000B920 */ 0x00, 0x01, 0x00, 0x4A, 0x00, 0x11, 0x00, 0x77, 0x01, 0x13, 0x00, 0x77, 0x00, 0x1B, 0x00, 0x66, +/* 0000B930 */ 0x00, 0x23, 0x00, 0x82, 0x00, 0x0E, 0x00, 0x3F, 0x00, 0x0C, 0x00, 0x6D, 0x00, 0x06, 0x00, 0x3F, +/* 0000B940 */ 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x23, 0x10, 0x03, 0x00, 0xFE, 0x0C, 0x0D, 0x0C, 0xA3, 0x41, +/* 0000B950 */ 0xC1, 0x00, 0xFE, 0xDF, 0x04, 0xB9, 0xFF, 0xE9, 0x56, 0x02, 0x00, 0xFF, 0xE9, 0x56, 0x02, 0x00, +/* 0000B960 */ 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFF, 0xE9, 0x56, 0x02, 0x00, 0xFE, 0x2D, 0x0D, 0xFE, 0x2D, +/* 0000B970 */ 0x0D, 0x07, 0x12, 0x16, 0x06, 0xC8, 0xBB, 0x04, 0x07, 0x17, 0x17, 0x17, 0x17, 0x02, 0x15, 0x05, +/* 0000B980 */ 0xFE, 0xFA, 0x04, 0x08, 0x06, 0xFE, 0x32, 0x04, 0x07, 0x05, 0xFE, 0xFB, 0x04, 0x01, 0x00, 0x05, +/* 0000B990 */ 0xFE, 0xFC, 0x04, 0x05, 0xFE, 0xEF, 0x04, 0x05, 0xFE, 0xFD, 0x04, 0x06, 0xFE, 0xF8, 0x03, 0x06, +/* 0000B9A0 */ 0xFE, 0x36, 0x04, 0x06, 0xFE, 0x37, 0x04, 0x06, 0xFE, 0x38, 0x04, 0x06, 0xFE, 0x39, 0x04, 0x06, +/* 0000B9B0 */ 0xFE, 0x3A, 0x04, 0x05, 0xFE, 0xFE, 0x04, 0xFE, 0x9A, 0x02, 0xA8, 0x14, 0x5E, 0x16, 0x13, 0x00, +/* 0000B9C0 */ 0xA8, 0x17, 0x15, 0x03, 0x00, 0x16, 0x17, 0x09, 0x20, 0x00, 0x8E, 0x01, 0x05, 0x16, 0x4A, 0x16, +/* 0000B9D0 */ 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, 0x59, 0x01, 0x12, 0x5E, 0x17, 0x13, 0x01, 0x59, 0x02, 0x17, +/* 0000B9E0 */ 0x59, 0x03, 0x02, 0x1F, 0x04, 0x16, 0x16, 0x45, 0x12, 0x16, 0x5E, 0x16, 0x13, 0x02, 0xA8, 0x17, +/* 0000B9F0 */ 0x15, 0x03, 0x00, 0x16, 0x17, 0x09, 0x00, 0x00, 0x5E, 0x16, 0x13, 0x03, 0x14, 0x03, 0x00, 0x16, +/* 0000BA00 */ 0x04, 0x09, 0x70, 0x00, 0x8E, 0x04, 0x03, 0x17, 0x6C, 0x16, 0x17, 0x04, 0x07, 0x03, 0x00, 0x59, +/* 0000BA10 */ 0x00, 0x17, 0x59, 0x01, 0x12, 0xE2, 0x18, 0x00, 0x59, 0x02, 0x18, 0x1F, 0x03, 0x16, 0x16, 0x45, +/* 0000BA20 */ 0x14, 0x16, 0x14, 0x03, 0x00, 0x14, 0x05, 0x09, 0x22, 0x00, 0x8E, 0x04, 0x0F, 0x16, 0x07, 0x02, +/* 0000BA30 */ 0x00, 0x59, 0x00, 0x03, 0x8E, 0x04, 0x0E, 0x17, 0x07, 0x02, 0x00, 0x59, 0x01, 0x06, 0xC4, 0x02, +/* 0000BA40 */ 0x17, 0x17, 0x59, 0x01, 0x17, 0x1F, 0x02, 0xFF, 0x16, 0x09, 0x25, 0x00, 0x8E, 0x04, 0x06, 0x16, +/* 0000BA50 */ 0x07, 0x05, 0x00, 0x59, 0x00, 0x03, 0x8E, 0x04, 0x1D, 0x17, 0x59, 0x01, 0x17, 0x59, 0x02, 0x12, +/* 0000BA60 */ 0x97, 0x17, 0x14, 0x07, 0x59, 0x03, 0x17, 0x59, 0x04, 0x08, 0x1F, 0x05, 0x16, 0x16, 0x45, 0x12, +/* 0000BA70 */ 0x16, 0x09, 0x79, 0x00, 0x5E, 0x16, 0x13, 0x05, 0x14, 0x03, 0x00, 0x16, 0x09, 0x09, 0x6D, 0x00, +/* 0000BA80 */ 0x8E, 0x04, 0x03, 0x17, 0x6C, 0x16, 0x17, 0x06, 0x07, 0x03, 0x00, 0x59, 0x00, 0x17, 0x59, 0x01, +/* 0000BA90 */ 0x12, 0xE2, 0x18, 0x01, 0x59, 0x02, 0x18, 0x1F, 0x03, 0x16, 0x16, 0x45, 0x14, 0x16, 0x14, 0x03, +/* 0000BAA0 */ 0x00, 0x14, 0x05, 0x09, 0x22, 0x00, 0x8E, 0x04, 0x0F, 0x16, 0x07, 0x02, 0x00, 0x59, 0x00, 0x03, +/* 0000BAB0 */ 0x8E, 0x04, 0x0E, 0x17, 0x07, 0x02, 0x00, 0x59, 0x01, 0x06, 0xC4, 0x02, 0x17, 0x17, 0x59, 0x01, +/* 0000BAC0 */ 0x17, 0x1F, 0x02, 0xFF, 0x16, 0x09, 0x25, 0x00, 0x8E, 0x04, 0x06, 0x16, 0x07, 0x05, 0x00, 0x59, +/* 0000BAD0 */ 0x00, 0x03, 0x8E, 0x04, 0x1D, 0x17, 0x59, 0x01, 0x17, 0x59, 0x02, 0x12, 0x97, 0x17, 0x14, 0x07, +/* 0000BAE0 */ 0x59, 0x03, 0x17, 0x59, 0x04, 0x0A, 0x1F, 0x05, 0x16, 0x16, 0x45, 0x12, 0x16, 0x5E, 0x16, 0x13, +/* 0000BAF0 */ 0x07, 0xA8, 0x17, 0x15, 0x03, 0x00, 0x16, 0x17, 0x09, 0x3B, 0x00, 0x5E, 0x16, 0x13, 0x08, 0x15, +/* 0000BB00 */ 0x03, 0x00, 0x16, 0x04, 0x09, 0x2F, 0x00, 0x5E, 0x16, 0x13, 0x09, 0x15, 0x03, 0x00, 0x16, 0x0B, +/* 0000BB10 */ 0x09, 0x23, 0x00, 0x8E, 0x01, 0x05, 0x16, 0x4A, 0x16, 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, 0x59, +/* 0000BB20 */ 0x01, 0x12, 0x5E, 0x17, 0x13, 0x0A, 0x59, 0x02, 0x17, 0x59, 0x03, 0x0C, 0x1F, 0x04, 0x16, 0x16, +/* 0000BB30 */ 0x45, 0x12, 0x16, 0x09, 0x2E, 0x00, 0x5E, 0x16, 0x13, 0x0B, 0xA8, 0x17, 0x15, 0x03, 0x00, 0x16, +/* 0000BB40 */ 0x17, 0x09, 0x20, 0x00, 0x8E, 0x01, 0x06, 0x16, 0x4A, 0x16, 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, +/* 0000BB50 */ 0x59, 0x01, 0x12, 0x5E, 0x17, 0x13, 0x0C, 0x59, 0x02, 0x17, 0x59, 0x03, 0x0C, 0x1F, 0x04, 0x16, +/* 0000BB60 */ 0x16, 0x45, 0x12, 0x16, 0x5E, 0x16, 0x13, 0x0D, 0xA8, 0x17, 0x15, 0x03, 0x00, 0x16, 0x17, 0x09, +/* 0000BB70 */ 0x20, 0x00, 0x8E, 0x01, 0x06, 0x16, 0x4A, 0x16, 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, 0x59, 0x01, +/* 0000BB80 */ 0x12, 0x5E, 0x17, 0x13, 0x0E, 0x59, 0x02, 0x17, 0x59, 0x03, 0x0D, 0x1F, 0x04, 0x16, 0x16, 0x45, +/* 0000BB90 */ 0x12, 0x16, 0x5E, 0x16, 0x13, 0x0F, 0xA8, 0x17, 0x15, 0x03, 0x00, 0x16, 0x17, 0x09, 0x20, 0x00, +/* 0000BBA0 */ 0x8E, 0x01, 0x06, 0x16, 0x4A, 0x16, 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, 0x59, 0x01, 0x12, 0x5E, +/* 0000BBB0 */ 0x17, 0x13, 0x10, 0x59, 0x02, 0x17, 0x59, 0x03, 0x0E, 0x1F, 0x04, 0x16, 0x16, 0x45, 0x12, 0x16, +/* 0000BBC0 */ 0x5E, 0x16, 0x13, 0x11, 0xA8, 0x17, 0x15, 0x03, 0x00, 0x16, 0x17, 0x09, 0x20, 0x00, 0x8E, 0x01, +/* 0000BBD0 */ 0x06, 0x16, 0x4A, 0x16, 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, 0x59, 0x01, 0x12, 0x5E, 0x17, 0x13, +/* 0000BBE0 */ 0x12, 0x59, 0x02, 0x17, 0x59, 0x03, 0x0F, 0x1F, 0x04, 0x16, 0x16, 0x45, 0x12, 0x16, 0x5E, 0x16, +/* 0000BBF0 */ 0x13, 0x13, 0xA8, 0x17, 0x15, 0x03, 0x00, 0x16, 0x17, 0x09, 0x20, 0x00, 0x8E, 0x01, 0x06, 0x16, +/* 0000BC00 */ 0x4A, 0x16, 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, 0x59, 0x01, 0x12, 0x5E, 0x17, 0x13, 0x14, 0x59, +/* 0000BC10 */ 0x02, 0x17, 0x59, 0x03, 0x10, 0x1F, 0x04, 0x16, 0x16, 0x45, 0x12, 0x16, 0x5E, 0x16, 0x13, 0x15, +/* 0000BC20 */ 0xA8, 0x17, 0x15, 0x03, 0x00, 0x16, 0x17, 0x09, 0x20, 0x00, 0x8E, 0x01, 0x05, 0x16, 0x4A, 0x16, +/* 0000BC30 */ 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, 0x59, 0x01, 0x12, 0x5E, 0x17, 0x13, 0x16, 0x59, 0x02, 0x17, +/* 0000BC40 */ 0x59, 0x03, 0x11, 0x1F, 0x04, 0x16, 0x16, 0x45, 0x12, 0x16, 0x45, 0x00, 0x12, 0x09, 0x02, 0x00, +/* 0000BC50 */ 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x67, 0x02, 0xFE, 0x67, 0x02, 0xFE, 0x5A, 0x02, 0xFE, 0x6A, 0x02, +/* 0000BC60 */ 0xFE, 0xC0, 0x02, 0xFE, 0x6A, 0x02, 0xFE, 0xC0, 0x02, 0xFE, 0x61, 0x02, 0xFE, 0x61, 0x02, 0xFE, +/* 0000BC70 */ 0x61, 0x02, 0xFE, 0x61, 0x02, 0xFE, 0x61, 0x02, 0xFE, 0x61, 0x02, 0xFE, 0x59, 0x02, 0xFE, 0x59, +/* 0000BC80 */ 0x02, 0xFE, 0x5C, 0x02, 0xFE, 0x5C, 0x02, 0xFE, 0x60, 0x02, 0xFE, 0x60, 0x02, 0xFE, 0x63, 0x02, +/* 0000BC90 */ 0xFE, 0x63, 0x02, 0xFE, 0x66, 0x02, 0xFE, 0x66, 0x02, 0x1C, 0xFE, 0xFF, 0x04, 0x00, 0x1C, 0xFE, +/* 0000BCA0 */ 0xFF, 0x04, 0x00, 0xFF, 0x38, 0x57, 0x02, 0x00, 0x1D, 0x02, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x42, +/* 0000BCB0 */ 0x00, 0x20, 0x00, 0x88, 0x00, 0x0E, 0x00, 0x8E, 0x01, 0x0C, 0x00, 0x3F, 0x00, 0x1E, 0x00, 0x6B, +/* 0000BCC0 */ 0x00, 0x08, 0x00, 0x2E, 0x00, 0x22, 0x00, 0x91, 0x00, 0x28, 0x00, 0x98, 0x00, 0x0C, 0x00, 0x3C, +/* 0000BCD0 */ 0x00, 0x1E, 0x00, 0x6B, 0x00, 0x08, 0x00, 0x2E, 0x00, 0x22, 0x00, 0x91, 0x00, 0x25, 0x00, 0x2F, +/* 0000BCE0 */ 0x01, 0x26, 0x00, 0x90, 0x00, 0x23, 0x00, 0x76, 0x00, 0x0E, 0x00, 0x40, 0x00, 0x20, 0x00, 0x8B, +/* 0000BCF0 */ 0x00, 0x0E, 0x00, 0x3E, 0x00, 0x20, 0x00, 0x87, 0x00, 0x0E, 0x00, 0x3F, 0x00, 0x20, 0x00, 0x89, +/* 0000BD00 */ 0x00, 0x0E, 0x00, 0x41, 0x00, 0x20, 0x00, 0x8D, 0x00, 0x0E, 0x00, 0x41, 0x00, 0x20, 0x00, 0x8D, +/* 0000BD10 */ 0x00, 0x0E, 0x00, 0x47, 0x00, 0x20, 0x00, 0x8C, 0x00, 0x08, 0x00, 0x22, 0x00, 0x00, 0x7F, 0x5C, +/* 0000BD20 */ 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0xF8, 0x0C, 0x0C, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0xDE, +/* 0000BD30 */ 0x04, 0xB8, 0xFF, 0x81, 0x51, 0x02, 0x00, 0xFF, 0x81, 0x51, 0x02, 0x00, 0x01, 0xFE, 0x00, 0x90, +/* 0000BD40 */ 0x04, 0x04, 0xFF, 0x81, 0x51, 0x02, 0x00, 0xFE, 0xF8, 0x04, 0xFE, 0xF8, 0x04, 0x09, 0x11, 0x16, +/* 0000BD50 */ 0x07, 0x43, 0x40, 0x04, 0x06, 0x01, 0x01, 0x01, 0x01, 0x15, 0x05, 0xFE, 0xEA, 0x04, 0x05, 0xFE, +/* 0000BD60 */ 0xF5, 0x04, 0x08, 0x07, 0x05, 0xFE, 0xF6, 0x04, 0x05, 0xFE, 0xED, 0x04, 0x05, 0xFE, 0xEE, 0x04, +/* 0000BD70 */ 0x06, 0xFE, 0x32, 0x04, 0x01, 0x00, 0x06, 0xFE, 0xF0, 0x04, 0x01, 0x01, 0x05, 0xFE, 0xF7, 0x04, +/* 0000BD80 */ 0x01, 0x02, 0x05, 0xFE, 0xF8, 0x04, 0x05, 0xFE, 0xF9, 0x04, 0xEA, 0x8E, 0x04, 0x03, 0x17, 0x6C, +/* 0000BD90 */ 0x16, 0x17, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x17, 0x59, 0x01, 0x11, 0x8E, 0x04, 0x0A, 0x18, +/* 0000BDA0 */ 0x07, 0x02, 0x00, 0x59, 0x00, 0x04, 0xFC, 0x19, 0x02, 0x13, 0x03, 0x59, 0x01, 0x19, 0x1F, 0x02, +/* 0000BDB0 */ 0x18, 0x18, 0x59, 0x02, 0x18, 0x1F, 0x03, 0x16, 0x16, 0x45, 0x14, 0x16, 0x14, 0x03, 0x00, 0x14, +/* 0000BDC0 */ 0x05, 0x09, 0x34, 0x00, 0x8E, 0x04, 0x0F, 0x16, 0x07, 0x02, 0x00, 0x59, 0x00, 0x04, 0x8E, 0x04, +/* 0000BDD0 */ 0x0E, 0x17, 0x07, 0x02, 0x00, 0xFD, 0x18, 0x06, 0x11, 0x06, 0xFF, 0x18, 0x07, 0x02, 0x02, 0xFF, +/* 0000BDE0 */ 0x18, 0x13, 0x08, 0x04, 0x59, 0x01, 0x18, 0xC4, 0x02, 0x17, 0x17, 0x59, 0x01, 0x17, 0x1F, 0x02, +/* 0000BDF0 */ 0xFF, 0x16, 0x45, 0x00, 0x11, 0x09, 0x7B, 0x00, 0x14, 0x03, 0x00, 0x12, 0x09, 0x09, 0x31, 0x00, +/* 0000BE00 */ 0x8E, 0x04, 0x06, 0x16, 0x07, 0x05, 0x00, 0x59, 0x00, 0x04, 0x8E, 0x04, 0x1D, 0x17, 0x59, 0x01, +/* 0000BE10 */ 0x17, 0x59, 0x02, 0x11, 0x97, 0x17, 0x14, 0x0A, 0x59, 0x03, 0x17, 0x97, 0x17, 0x14, 0x0C, 0xFC, +/* 0000BE20 */ 0x17, 0x0B, 0x17, 0x0D, 0x59, 0x04, 0x17, 0x1F, 0x05, 0x00, 0x16, 0x09, 0x45, 0x00, 0x09, 0x3A, +/* 0000BE30 */ 0x00, 0x97, 0x16, 0x14, 0x0E, 0x15, 0x03, 0x00, 0x16, 0x0F, 0x09, 0x2E, 0x00, 0x8E, 0x04, 0x06, +/* 0000BE40 */ 0x16, 0x07, 0x05, 0x00, 0x59, 0x00, 0x04, 0x8E, 0x04, 0x1D, 0x17, 0x59, 0x01, 0x17, 0x59, 0x02, +/* 0000BE50 */ 0x11, 0x97, 0x17, 0x14, 0x0A, 0x59, 0x03, 0x17, 0x97, 0x17, 0x14, 0x0C, 0xFC, 0x17, 0x0B, 0x17, +/* 0000BE60 */ 0x10, 0x59, 0x04, 0x17, 0x1F, 0x05, 0x00, 0x16, 0x09, 0x08, 0x00, 0x45, 0x00, 0x11, 0x09, 0x02, +/* 0000BE70 */ 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xC0, 0x02, 0xFF, 0xA8, 0x52, 0x02, 0x00, 0x0A, 0x00, 0x00, +/* 0000BE80 */ 0x00, 0x00, 0x31, 0x00, 0x91, 0x00, 0x08, 0x00, 0x2A, 0x00, 0x2E, 0x00, 0x00, 0x01, 0x06, 0x00, +/* 0000BE90 */ 0x83, 0x00, 0x08, 0x00, 0x33, 0x00, 0x31, 0x00, 0x81, 0x00, 0x0C, 0x00, 0x32, 0x00, 0x2E, 0x00, +/* 0000BEA0 */ 0x8A, 0x00, 0x08, 0x00, 0x22, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, +/* 0000BEB0 */ 0xE7, 0x0C, 0x0C, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0xDD, 0x04, 0xB7, 0xFF, 0x53, 0x4C, 0x02, 0x00, +/* 0000BEC0 */ 0xFF, 0x53, 0x4C, 0x02, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x04, 0x04, 0xFF, 0x53, 0x4C, 0x02, 0x00, +/* 0000BED0 */ 0xFE, 0x20, 0x05, 0xFE, 0x20, 0x05, 0x09, 0x14, 0x19, 0x07, 0x50, 0x4C, 0x04, 0x06, 0x01, 0x01, +/* 0000BEE0 */ 0x01, 0x01, 0x18, 0x05, 0xFE, 0xEA, 0x04, 0x05, 0xFE, 0xEB, 0x04, 0x08, 0x07, 0x05, 0xFE, 0xEC, +/* 0000BEF0 */ 0x04, 0x05, 0xFE, 0xED, 0x04, 0x05, 0xFE, 0xEE, 0x04, 0x01, 0x02, 0x05, 0xFE, 0xEF, 0x04, 0x06, +/* 0000BF00 */ 0xFE, 0x31, 0x04, 0x01, 0x00, 0x06, 0xFE, 0xF0, 0x04, 0x01, 0x01, 0x06, 0xFE, 0xF1, 0x04, 0x06, +/* 0000BF10 */ 0xFE, 0xF2, 0x04, 0x06, 0xFE, 0x30, 0x04, 0x05, 0xFE, 0xF3, 0x04, 0x05, 0xFE, 0xF4, 0x04, 0xFE, +/* 0000BF20 */ 0x19, 0x01, 0x8E, 0x04, 0x03, 0x1A, 0x6C, 0x19, 0x1A, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x1A, +/* 0000BF30 */ 0x59, 0x01, 0x14, 0x8E, 0x04, 0x0A, 0x1B, 0x07, 0x02, 0x00, 0x59, 0x00, 0x04, 0xFC, 0x1C, 0x02, +/* 0000BF40 */ 0x16, 0x03, 0x59, 0x01, 0x1C, 0x1F, 0x02, 0x1B, 0x1B, 0x59, 0x02, 0x1B, 0x1F, 0x03, 0x19, 0x19, +/* 0000BF50 */ 0x45, 0x17, 0x19, 0x14, 0x03, 0x00, 0x17, 0x05, 0x09, 0x34, 0x00, 0x8E, 0x04, 0x0F, 0x19, 0x07, +/* 0000BF60 */ 0x02, 0x00, 0x59, 0x00, 0x04, 0x8E, 0x04, 0x0E, 0x1A, 0x07, 0x02, 0x00, 0xFD, 0x1B, 0x06, 0x14, +/* 0000BF70 */ 0x06, 0xFF, 0x1B, 0x07, 0x02, 0x02, 0xFF, 0x1B, 0x16, 0x08, 0x04, 0x59, 0x01, 0x1B, 0xC4, 0x02, +/* 0000BF80 */ 0x1A, 0x1A, 0x59, 0x01, 0x1A, 0x1F, 0x02, 0xFF, 0x19, 0x45, 0x00, 0x14, 0x09, 0xAA, 0x00, 0x97, +/* 0000BF90 */ 0x19, 0x17, 0x09, 0x15, 0x03, 0x00, 0x19, 0x0A, 0x09, 0x44, 0x00, 0x14, 0x03, 0x00, 0x15, 0x0B, +/* 0000BFA0 */ 0x09, 0x3C, 0x00, 0x8E, 0x04, 0x06, 0x19, 0x07, 0x05, 0x00, 0x59, 0x00, 0x04, 0x8E, 0x04, 0x1D, +/* 0000BFB0 */ 0x1A, 0x59, 0x01, 0x1A, 0x59, 0x02, 0x14, 0x97, 0x1A, 0x17, 0x0C, 0x59, 0x03, 0x1A, 0x97, 0x1A, +/* 0000BFC0 */ 0x17, 0x0E, 0x2D, 0x1A, 0x0D, 0x1A, 0x2D, 0x1A, 0x1A, 0x0F, 0x2D, 0x1A, 0x1A, 0x0A, 0x2D, 0x1A, +/* 0000BFD0 */ 0x1A, 0x10, 0x59, 0x04, 0x1A, 0x1F, 0x05, 0x00, 0x19, 0x09, 0x5D, 0x00, 0x09, 0x52, 0x00, 0x15, +/* 0000BFE0 */ 0x03, 0x00, 0x15, 0x0B, 0x09, 0x4A, 0x00, 0x8E, 0x04, 0x06, 0x19, 0x07, 0x05, 0x00, 0x59, 0x00, +/* 0000BFF0 */ 0x04, 0x8E, 0x04, 0x1D, 0x1A, 0x59, 0x01, 0x1A, 0x59, 0x02, 0x14, 0x97, 0x1A, 0x17, 0x0C, 0x59, +/* 0000C000 */ 0x03, 0x1A, 0x97, 0x1A, 0x17, 0x0E, 0x2D, 0x1A, 0x0D, 0x1A, 0x2D, 0x1A, 0x1A, 0x0F, 0x14, 0x03, +/* 0000C010 */ 0x00, 0x15, 0x11, 0x09, 0x06, 0x00, 0x45, 0x1B, 0x12, 0x09, 0x03, 0x00, 0x46, 0x1B, 0x13, 0x2D, +/* 0000C020 */ 0x1A, 0x1A, 0x1B, 0x2D, 0x1A, 0x1A, 0x10, 0x59, 0x04, 0x1A, 0x1F, 0x05, 0x00, 0x19, 0x09, 0x08, +/* 0000C030 */ 0x00, 0x45, 0x00, 0x14, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xC0, 0x02, 0xFF, 0x29, +/* 0000C040 */ 0x4D, 0x02, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x31, 0x00, 0x0F, 0x01, 0x08, 0x00, 0x2A, 0x00, +/* 0000C050 */ 0x2E, 0x00, 0xF5, 0x00, 0x06, 0x00, 0x39, 0x00, 0x14, 0x00, 0x47, 0x00, 0x3C, 0x00, 0x85, 0x00, +/* 0000C060 */ 0x08, 0x00, 0x30, 0x00, 0x4A, 0x00, 0xC4, 0x00, 0x08, 0x00, 0x22, 0x00, 0x00, 0x7F, 0x4C, 0x00, +/* 0000C070 */ 0x01, 0x00, 0x10, 0x03, 0x00, 0xFE, 0xDE, 0x0C, 0x0C, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0xDC, 0x04, +/* 0000C080 */ 0xB6, 0xFF, 0xEC, 0x4A, 0x02, 0x00, 0xFF, 0xEC, 0x4A, 0x02, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x02, +/* 0000C090 */ 0x02, 0xFF, 0xEC, 0x4A, 0x02, 0x00, 0xE9, 0xE9, 0x03, 0x05, 0x07, 0x0E, 0x0C, 0x04, 0x01, 0x06, +/* 0000C0A0 */ 0x06, 0xFE, 0xD6, 0x03, 0x06, 0xFE, 0x47, 0x03, 0x05, 0xFE, 0xCA, 0x04, 0x2A, 0x2A, 0x07, 0x05, +/* 0000C0B0 */ 0x14, 0x03, 0x00, 0x07, 0x02, 0x09, 0x06, 0x00, 0x45, 0x00, 0x03, 0x09, 0x17, 0x00, 0x8E, 0x02, +/* 0000C0C0 */ 0x02, 0x07, 0x97, 0x07, 0x07, 0x05, 0x45, 0x00, 0x07, 0x0F, 0x03, 0x00, 0x07, 0x46, 0x00, 0x04, +/* 0000C0D0 */ 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFF, 0x27, 0x4B, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, +/* 0000C0E0 */ 0x00, 0x0B, 0x00, 0x3B, 0x00, 0x06, 0x00, 0x2E, 0x00, 0x17, 0x00, 0x44, 0x00, 0x00, 0x7E, 0x5D, +/* 0000C0F0 */ 0x00, 0xC1, 0x03, 0x1A, 0x0B, 0x00, 0xFE, 0x9C, 0x0C, 0x0C, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0xDB, +/* 0000C100 */ 0x04, 0xB4, 0xFF, 0x99, 0x40, 0x02, 0x00, 0xFF, 0x99, 0x40, 0x02, 0x00, 0x01, 0xFE, 0x00, 0x90, +/* 0000C110 */ 0x02, 0x02, 0xFF, 0x99, 0x40, 0x02, 0x00, 0xFE, 0x70, 0x08, 0xFE, 0x70, 0x08, 0x03, 0xFE, 0xE0, +/* 0000C120 */ 0x04, 0xFE, 0xE0, 0x01, 0xFE, 0xCF, 0x03, 0x07, 0x19, 0x1D, 0x05, 0xA6, 0xA5, 0x04, 0x06, 0x12, +/* 0000C130 */ 0x12, 0x12, 0x12, 0x1A, 0x1B, 0x1C, 0x07, 0x01, 0x00, 0x06, 0xFE, 0x2F, 0x04, 0x06, 0xFE, 0x30, +/* 0000C140 */ 0x04, 0x01, 0x01, 0x05, 0xFE, 0xE1, 0x04, 0x06, 0xFE, 0x31, 0x04, 0x05, 0xFE, 0xE2, 0x04, 0x06, +/* 0000C150 */ 0xFE, 0x32, 0x04, 0x05, 0xFE, 0xE3, 0x04, 0x06, 0xFE, 0xF8, 0x03, 0x05, 0xFE, 0xE4, 0x04, 0x05, +/* 0000C160 */ 0xFE, 0xE5, 0x04, 0x05, 0xFE, 0xE6, 0x04, 0x05, 0xFE, 0xE7, 0x04, 0x06, 0xFE, 0x37, 0x04, 0x05, +/* 0000C170 */ 0xFE, 0xE8, 0x04, 0x05, 0xFE, 0xE9, 0x04, 0x06, 0xFE, 0x38, 0x04, 0x06, 0xFE, 0x39, 0x04, 0x06, +/* 0000C180 */ 0xFE, 0x3A, 0x04, 0x08, 0x06, 0xFE, 0x72, 0x04, 0xFE, 0x39, 0x02, 0x96, 0x03, 0x19, 0x4E, 0x1D, +/* 0000C190 */ 0x96, 0x04, 0x1D, 0xCF, 0x1D, 0x00, 0x96, 0x02, 0x1D, 0x92, 0x02, 0x1D, 0x76, 0x02, 0x1D, 0x00, +/* 0000C1A0 */ 0x96, 0x04, 0x03, 0x92, 0x03, 0x1D, 0x5E, 0x1D, 0x1D, 0x01, 0x0E, 0x55, 0x00, 0x1D, 0x92, 0x03, +/* 0000C1B0 */ 0x1D, 0x5E, 0x1D, 0x1D, 0x02, 0x14, 0x0F, 0x00, 0x1D, 0x04, 0x92, 0x03, 0x1D, 0x5E, 0x1D, 0x1D, +/* 0000C1C0 */ 0x03, 0x14, 0x03, 0x00, 0x1D, 0x05, 0x09, 0x17, 0x00, 0x92, 0x02, 0x1D, 0x92, 0x04, 0x1F, 0x43, +/* 0000C1D0 */ 0x1E, 0x1F, 0x2D, 0x1F, 0x1E, 0x06, 0x96, 0x04, 0x1F, 0x9C, 0x07, 0x1D, 0x1E, 0x09, 0x23, 0x00, +/* 0000C1E0 */ 0x92, 0x03, 0x1D, 0x5E, 0x1D, 0x1D, 0x04, 0x14, 0x03, 0x00, 0x1D, 0x08, 0x09, 0x14, 0x00, 0x92, +/* 0000C1F0 */ 0x02, 0x1D, 0x92, 0x04, 0x1F, 0x43, 0x1E, 0x1F, 0x2D, 0x1F, 0x1E, 0x06, 0x96, 0x04, 0x1F, 0x9C, +/* 0000C200 */ 0x09, 0x1D, 0x1E, 0x92, 0x03, 0x1D, 0x5E, 0x1D, 0x1D, 0x05, 0x0E, 0x49, 0x00, 0x1D, 0x92, 0x03, +/* 0000C210 */ 0x1D, 0x5E, 0x1D, 0x1D, 0x06, 0x14, 0x03, 0x00, 0x1D, 0x0A, 0x09, 0x17, 0x00, 0x92, 0x02, 0x1D, +/* 0000C220 */ 0x92, 0x04, 0x1F, 0x43, 0x1E, 0x1F, 0x2D, 0x1F, 0x1E, 0x06, 0x96, 0x04, 0x1F, 0x9C, 0x0B, 0x1D, +/* 0000C230 */ 0x1E, 0x09, 0x23, 0x00, 0x92, 0x03, 0x1D, 0x5E, 0x1D, 0x1D, 0x07, 0x14, 0x03, 0x00, 0x1D, 0x0C, +/* 0000C240 */ 0x09, 0x14, 0x00, 0x92, 0x02, 0x1D, 0x92, 0x04, 0x1F, 0x43, 0x1E, 0x1F, 0x2D, 0x1F, 0x1E, 0x06, +/* 0000C250 */ 0x96, 0x04, 0x1F, 0x9C, 0x0D, 0x1D, 0x1E, 0x92, 0x03, 0x1D, 0x5E, 0x1D, 0x1D, 0x08, 0x0E, 0x87, +/* 0000C260 */ 0x00, 0x1D, 0x92, 0x03, 0x1D, 0x5E, 0x1D, 0x1D, 0x09, 0x14, 0x0F, 0x00, 0x1D, 0x0A, 0x92, 0x03, +/* 0000C270 */ 0x1D, 0x5E, 0x1D, 0x1D, 0x0A, 0x14, 0x03, 0x00, 0x1D, 0x0C, 0x09, 0x17, 0x00, 0x92, 0x02, 0x1D, +/* 0000C280 */ 0x92, 0x04, 0x1F, 0x43, 0x1E, 0x1F, 0x2D, 0x1F, 0x1E, 0x06, 0x96, 0x04, 0x1F, 0x9C, 0x0E, 0x1D, +/* 0000C290 */ 0x1E, 0x09, 0x55, 0x00, 0x92, 0x03, 0x1D, 0x5E, 0x1D, 0x1D, 0x0B, 0x14, 0x0F, 0x00, 0x1D, 0x05, +/* 0000C2A0 */ 0x92, 0x03, 0x1D, 0x5E, 0x1D, 0x1D, 0x0C, 0x14, 0x03, 0x00, 0x1D, 0x04, 0x09, 0x17, 0x00, 0x92, +/* 0000C2B0 */ 0x02, 0x1D, 0x92, 0x04, 0x1F, 0x43, 0x1E, 0x1F, 0x2D, 0x1F, 0x1E, 0x06, 0x96, 0x04, 0x1F, 0x9C, +/* 0000C2C0 */ 0x0F, 0x1D, 0x1E, 0x09, 0x23, 0x00, 0x92, 0x03, 0x1D, 0x5E, 0x1D, 0x1D, 0x0D, 0x14, 0x03, 0x00, +/* 0000C2D0 */ 0x1D, 0x08, 0x09, 0x14, 0x00, 0x92, 0x02, 0x1D, 0x92, 0x04, 0x1F, 0x43, 0x1E, 0x1F, 0x2D, 0x1F, +/* 0000C2E0 */ 0x1E, 0x06, 0x96, 0x04, 0x1F, 0x9C, 0x10, 0x1D, 0x1E, 0x92, 0x03, 0x1D, 0x5E, 0x1D, 0x1D, 0x0E, +/* 0000C2F0 */ 0x0E, 0x14, 0x00, 0x1D, 0x92, 0x02, 0x1D, 0x92, 0x04, 0x1F, 0x43, 0x1E, 0x1F, 0x2D, 0x1F, 0x1E, +/* 0000C300 */ 0x06, 0x96, 0x04, 0x1F, 0x9C, 0x11, 0x1D, 0x1E, 0x92, 0x03, 0x1D, 0x5E, 0x1D, 0x1D, 0x0F, 0x0E, +/* 0000C310 */ 0x49, 0x00, 0x1D, 0x92, 0x03, 0x1D, 0x5E, 0x1D, 0x1D, 0x10, 0x14, 0x03, 0x00, 0x1D, 0x05, 0x09, +/* 0000C320 */ 0x17, 0x00, 0x92, 0x02, 0x1D, 0x92, 0x04, 0x1F, 0x43, 0x1E, 0x1F, 0x2D, 0x1F, 0x1E, 0x06, 0x96, +/* 0000C330 */ 0x04, 0x1F, 0x9C, 0x12, 0x1D, 0x1E, 0x09, 0x23, 0x00, 0x92, 0x03, 0x1D, 0x5E, 0x1D, 0x1D, 0x11, +/* 0000C340 */ 0x14, 0x03, 0x00, 0x1D, 0x08, 0x09, 0x14, 0x00, 0x92, 0x02, 0x1D, 0x92, 0x04, 0x1F, 0x43, 0x1E, +/* 0000C350 */ 0x1F, 0x2D, 0x1F, 0x1E, 0x06, 0x96, 0x04, 0x1F, 0x9C, 0x13, 0x1D, 0x1E, 0x8E, 0x04, 0x06, 0x1D, +/* 0000C360 */ 0x07, 0x04, 0x00, 0x59, 0x00, 0x17, 0x8E, 0x04, 0x17, 0x1E, 0x59, 0x01, 0x1E, 0xCF, 0x1E, 0x03, +/* 0000C370 */ 0xA1, 0x00, 0x14, 0x1E, 0xA1, 0x01, 0x15, 0x1E, 0xA1, 0x02, 0x16, 0x1E, 0x59, 0x02, 0x1E, 0xD6, +/* 0000C380 */ 0x00, 0x1E, 0x59, 0x03, 0x1E, 0x1F, 0x04, 0xFF, 0x1D, 0x92, 0x04, 0x1D, 0x11, 0x03, 0x00, 0x1D, +/* 0000C390 */ 0x03, 0x09, 0x24, 0x00, 0x8E, 0x04, 0x06, 0x1D, 0x07, 0x04, 0x00, 0x59, 0x00, 0x17, 0x8E, 0x04, +/* 0000C3A0 */ 0x19, 0x1E, 0x59, 0x01, 0x1E, 0x92, 0x02, 0x1E, 0x59, 0x02, 0x1E, 0x59, 0x03, 0x18, 0x1F, 0x04, +/* 0000C3B0 */ 0x1D, 0x1D, 0x45, 0x00, 0x1D, 0x09, 0x05, 0x00, 0xA8, 0x1D, 0x46, 0x00, 0x1D, 0x09, 0x02, 0x00, +/* 0000C3C0 */ 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xEB, 0x01, 0xFE, 0x76, 0x02, 0xFE, 0x76, 0x02, 0xFE, 0x76, 0x02, +/* 0000C3D0 */ 0xFE, 0x76, 0x02, 0xFE, 0x77, 0x02, 0xFE, 0x77, 0x02, 0xFE, 0x77, 0x02, 0xFE, 0x71, 0x02, 0xFE, +/* 0000C3E0 */ 0x71, 0x02, 0xFE, 0x71, 0x02, 0xFE, 0x71, 0x02, 0xFE, 0x71, 0x02, 0xFE, 0x71, 0x02, 0xFE, 0x6C, +/* 0000C3F0 */ 0x02, 0xFE, 0x75, 0x02, 0xFE, 0x75, 0x02, 0xFE, 0x75, 0x02, 0xFF, 0xDA, 0x40, 0x02, 0x00, 0x1E, +/* 0000C400 */ 0x08, 0x00, 0x00, 0x00, 0x06, 0x00, 0x23, 0x00, 0x07, 0x00, 0x2B, 0x00, 0x03, 0x00, 0x1C, 0x00, +/* 0000C410 */ 0x0B, 0x00, 0x2B, 0x00, 0x1B, 0x00, 0x5B, 0x00, 0x17, 0x00, 0x44, 0x00, 0x0F, 0x00, 0x3A, 0x00, +/* 0000C420 */ 0x14, 0x00, 0x86, 0x00, 0x0B, 0x00, 0x28, 0x00, 0x0F, 0x00, 0x3A, 0x00, 0x17, 0x00, 0x3F, 0x00, +/* 0000C430 */ 0x0F, 0x00, 0x3A, 0x00, 0x14, 0x00, 0x56, 0x00, 0x0B, 0x00, 0x29, 0x00, 0x1B, 0x00, 0x5A, 0x00, +/* 0000C440 */ 0x17, 0x00, 0x3C, 0x00, 0x1B, 0x00, 0x57, 0x00, 0x17, 0x00, 0x40, 0x00, 0x0F, 0x00, 0x38, 0x00, +/* 0000C450 */ 0x14, 0x00, 0x57, 0x00, 0x0B, 0x00, 0x27, 0x00, 0x14, 0x00, 0x3A, 0x00, 0x0B, 0x00, 0x30, 0x00, +/* 0000C460 */ 0x0F, 0x00, 0x40, 0x00, 0x17, 0x00, 0x43, 0x00, 0x0F, 0x00, 0x3F, 0x00, 0x14, 0x00, 0x5A, 0x00, +/* 0000C470 */ 0x2D, 0x00, 0x1C, 0x01, 0x39, 0x00, 0x5B, 0x00, 0x00, 0x7D, 0xC4, 0x00, 0x00, 0x7F, 0x4C, 0x00, +/* 0000C480 */ 0x01, 0x00, 0x10, 0x03, 0x00, 0xFE, 0xC8, 0x0C, 0x55, 0xA2, 0x41, 0xD1, 0x00, 0xB5, 0xFF, 0xD6, +/* 0000C490 */ 0x47, 0x02, 0x00, 0xFF, 0xD6, 0x47, 0x02, 0x00, 0x41, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0xD6, +/* 0000C4A0 */ 0x47, 0x02, 0x00, 0x8D, 0x8D, 0x05, 0x03, 0x05, 0x0D, 0x0D, 0x05, 0x03, 0x04, 0x01, 0x01, 0x2B, +/* 0000C4B0 */ 0x8E, 0x01, 0x03, 0x05, 0x97, 0x05, 0x05, 0x03, 0x0E, 0x1B, 0x00, 0x05, 0x8E, 0x01, 0x02, 0x05, +/* 0000C4C0 */ 0x8E, 0x01, 0x04, 0x07, 0x4A, 0x07, 0x43, 0x06, 0x07, 0x2D, 0x07, 0x06, 0x02, 0x01, 0x43, 0x01, +/* 0000C4D0 */ 0x01, 0x04, 0x07, 0x9C, 0x03, 0x05, 0x06, 0xA8, 0x00, 0x24, 0x00, 0xFF, 0xFB, 0x47, 0x02, 0x00, +/* 0000C4E0 */ 0x03, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x2C, 0x00, 0x1D, 0x00, 0x3B, 0x00, 0x00, 0x7F, 0x5C, +/* 0000C4F0 */ 0x00, 0xC1, 0x13, 0x10, 0x43, 0x00, 0xFE, 0x69, 0x0C, 0x0C, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x2A, +/* 0000C500 */ 0x04, 0xB3, 0xFF, 0xE0, 0x36, 0x02, 0x00, 0xFF, 0xE0, 0x36, 0x02, 0x00, 0x01, 0xFE, 0x00, 0x90, +/* 0000C510 */ 0x04, 0x04, 0xFF, 0xE0, 0x36, 0x02, 0x00, 0xFE, 0x21, 0x09, 0xFE, 0x21, 0x09, 0x07, 0x15, 0x1A, +/* 0000C520 */ 0x05, 0x88, 0x82, 0x04, 0x03, 0x20, 0x20, 0x20, 0x20, 0x06, 0x19, 0x07, 0x08, 0x0B, 0x06, 0xFE, +/* 0000C530 */ 0x42, 0x04, 0x06, 0xFE, 0x3F, 0x04, 0x0C, 0x05, 0xFE, 0x44, 0x04, 0x06, 0xFE, 0x40, 0x04, 0x06, +/* 0000C540 */ 0xFE, 0x35, 0x04, 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, 0xF8, 0x03, 0x06, 0xFE, 0x2B, 0x03, 0x06, +/* 0000C550 */ 0xFE, 0x2C, 0x03, 0x06, 0xFE, 0x2D, 0x03, 0x06, 0xFE, 0x36, 0x04, 0x06, 0xFE, 0x37, 0x04, 0x06, +/* 0000C560 */ 0xFE, 0x38, 0x04, 0x06, 0xFE, 0x39, 0x04, 0x06, 0xFE, 0x3A, 0x04, 0xFE, 0x18, 0x02, 0xA8, 0x1A, +/* 0000C570 */ 0x14, 0x03, 0x00, 0x15, 0x1A, 0x09, 0x1C, 0x00, 0x8E, 0x04, 0x04, 0x1A, 0x07, 0x03, 0x00, 0x59, +/* 0000C580 */ 0x00, 0x03, 0xCD, 0x1B, 0x59, 0x01, 0x1B, 0x59, 0x02, 0x02, 0x1F, 0x03, 0x1A, 0x1A, 0x45, 0x15, +/* 0000C590 */ 0x1A, 0x09, 0x18, 0x00, 0x8E, 0x04, 0x24, 0x1B, 0x6C, 0x1A, 0x1B, 0x00, 0x07, 0x02, 0x00, 0x59, +/* 0000C5A0 */ 0x00, 0x1B, 0x59, 0x01, 0x15, 0x1F, 0x02, 0x1A, 0x1A, 0x45, 0x15, 0x1A, 0x45, 0x18, 0x04, 0x14, +/* 0000C5B0 */ 0x08, 0x00, 0x16, 0x05, 0x14, 0x03, 0x00, 0x16, 0x06, 0x09, 0x32, 0x00, 0x5E, 0x1A, 0x15, 0x01, +/* 0000C5C0 */ 0xA8, 0x1B, 0x15, 0x24, 0x00, 0x1A, 0x1B, 0x5E, 0x1A, 0x15, 0x02, 0xA8, 0x1B, 0x15, 0x19, 0x00, +/* 0000C5D0 */ 0x1A, 0x1B, 0x5E, 0x1A, 0x15, 0x03, 0xA8, 0x1B, 0x15, 0x0E, 0x00, 0x1A, 0x1B, 0x5E, 0x1A, 0x15, +/* 0000C5E0 */ 0x04, 0xA8, 0x1B, 0x15, 0x03, 0x00, 0x1A, 0x1B, 0x09, 0x03, 0x00, 0x45, 0x18, 0x07, 0x14, 0x08, +/* 0000C5F0 */ 0x00, 0x16, 0x08, 0x14, 0x03, 0x00, 0x16, 0x06, 0x09, 0x27, 0x00, 0x5E, 0x1A, 0x15, 0x05, 0xA8, +/* 0000C600 */ 0x1B, 0x15, 0x19, 0x00, 0x1A, 0x1B, 0x5E, 0x1A, 0x15, 0x06, 0xA8, 0x1B, 0x15, 0x0E, 0x00, 0x1A, +/* 0000C610 */ 0x1B, 0x5E, 0x1A, 0x15, 0x07, 0xA8, 0x1B, 0x15, 0x03, 0x00, 0x1A, 0x1B, 0x09, 0x03, 0x00, 0x45, +/* 0000C620 */ 0x18, 0x07, 0x0E, 0xA9, 0x00, 0x18, 0x14, 0x08, 0x00, 0x17, 0x05, 0x14, 0x03, 0x00, 0x17, 0x09, +/* 0000C630 */ 0x09, 0x9C, 0x00, 0x8E, 0x04, 0x16, 0x1A, 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, 0x59, 0x01, 0x15, +/* 0000C640 */ 0x59, 0x02, 0x0A, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00, +/* 0000C650 */ 0x7A, 0x0C, 0x1B, 0x08, 0x7A, 0x04, 0x1B, 0x09, 0x7A, 0x04, 0x1B, 0x0A, 0x7A, 0x04, 0x1B, 0x0B, +/* 0000C660 */ 0x59, 0x03, 0x1B, 0x1F, 0x04, 0xFF, 0x1A, 0x8E, 0x04, 0x16, 0x1A, 0x07, 0x04, 0x00, 0x59, 0x00, +/* 0000C670 */ 0x03, 0x59, 0x01, 0x15, 0x59, 0x02, 0x10, 0xCE, 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, +/* 0000C680 */ 0x1B, 0x00, 0x00, 0x00, 0x7A, 0x0C, 0x1B, 0x0C, 0x7A, 0x04, 0x1B, 0x0D, 0x7A, 0x04, 0x1B, 0x0E, +/* 0000C690 */ 0x7A, 0x04, 0x1B, 0x0F, 0x59, 0x03, 0x1B, 0x1F, 0x04, 0xFF, 0x1A, 0x8E, 0x04, 0x16, 0x1A, 0x07, +/* 0000C6A0 */ 0x04, 0x00, 0x59, 0x00, 0x03, 0x59, 0x01, 0x15, 0x59, 0x02, 0x11, 0xCE, 0x30, 0x00, 0x00, 0x00, +/* 0000C6B0 */ 0x02, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00, 0x7A, 0x0C, 0x1B, 0x10, 0x7A, 0x04, 0x1B, 0x11, +/* 0000C6C0 */ 0x7A, 0x04, 0x1B, 0x12, 0x7A, 0x04, 0x1B, 0x13, 0x59, 0x03, 0x1B, 0x1F, 0x04, 0xFF, 0x1A, 0x0E, +/* 0000C6D0 */ 0xA9, 0x00, 0x18, 0x14, 0x08, 0x00, 0x17, 0x08, 0x14, 0x03, 0x00, 0x17, 0x09, 0x09, 0x9C, 0x00, +/* 0000C6E0 */ 0x8E, 0x04, 0x16, 0x1A, 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, 0x59, 0x01, 0x15, 0x59, 0x02, 0x12, +/* 0000C6F0 */ 0xCE, 0x48, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00, 0x7A, 0x0C, 0x1B, +/* 0000C700 */ 0x14, 0x7A, 0x04, 0x1B, 0x15, 0x7A, 0x04, 0x1B, 0x16, 0x7A, 0x04, 0x1B, 0x17, 0x59, 0x03, 0x1B, +/* 0000C710 */ 0x1F, 0x04, 0xFF, 0x1A, 0x8E, 0x04, 0x16, 0x1A, 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, 0x59, 0x01, +/* 0000C720 */ 0x15, 0x59, 0x02, 0x13, 0xCE, 0x60, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, +/* 0000C730 */ 0x00, 0x7A, 0x0C, 0x1B, 0x18, 0x7A, 0x04, 0x1B, 0x19, 0x7A, 0x04, 0x1B, 0x1A, 0x7A, 0x04, 0x1B, +/* 0000C740 */ 0x1B, 0x59, 0x03, 0x1B, 0x1F, 0x04, 0xFF, 0x1A, 0x8E, 0x04, 0x16, 0x1A, 0x07, 0x04, 0x00, 0x59, +/* 0000C750 */ 0x00, 0x03, 0x59, 0x01, 0x15, 0x59, 0x02, 0x14, 0xCE, 0x78, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, +/* 0000C760 */ 0x00, 0x1B, 0x00, 0x00, 0x00, 0x7A, 0x0C, 0x1B, 0x1C, 0x7A, 0x04, 0x1B, 0x1D, 0x7A, 0x04, 0x1B, +/* 0000C770 */ 0x1E, 0x7A, 0x04, 0x1B, 0x1F, 0x59, 0x03, 0x1B, 0x1F, 0x04, 0xFF, 0x1A, 0x45, 0x00, 0x15, 0x09, +/* 0000C780 */ 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x06, 0x90, 0x00, 0x78, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, +/* 0000C790 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, +/* 0000C7A0 */ 0x00, 0x95, 0x01, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0000C7B0 */ 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, +/* 0000C7C0 */ 0x00, 0x48, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, +/* 0000C7D0 */ 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x30, 0x00, 0x00, +/* 0000C7E0 */ 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, +/* 0000C7F0 */ 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, +/* 0000C800 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, +/* 0000C810 */ 0x00, 0x95, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0000C820 */ 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, +/* 0000C830 */ 0x00, 0xFE, 0x21, 0x03, 0xFE, 0x76, 0x02, 0xFE, 0x77, 0x02, 0xFE, 0x71, 0x02, 0xFE, 0x6C, 0x02, +/* 0000C840 */ 0xFE, 0x6E, 0x02, 0xFE, 0x70, 0x02, 0xFE, 0x73, 0x02, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, +/* 0000C850 */ 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, +/* 0000C860 */ 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x97, 0x01, +/* 0000C870 */ 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, +/* 0000C880 */ 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, +/* 0000C890 */ 0x01, 0xFF, 0x2A, 0x37, 0x02, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x31, 0x00, 0x1C, +/* 0000C8A0 */ 0x00, 0x4F, 0x00, 0x18, 0x00, 0x49, 0x00, 0x03, 0x00, 0x29, 0x00, 0x0D, 0x00, 0x45, 0x00, 0x2F, +/* 0000C8B0 */ 0x00, 0x97, 0x00, 0x03, 0x00, 0x4E, 0x00, 0x0D, 0x00, 0x45, 0x00, 0x24, 0x00, 0x7A, 0x00, 0x03, +/* 0000C8C0 */ 0x00, 0x4F, 0x00, 0x11, 0x00, 0x57, 0x00, 0x34, 0x00, 0xCB, 0x00, 0x34, 0x00, 0xCC, 0x00, 0x34, +/* 0000C8D0 */ 0x00, 0xD8, 0x00, 0x11, 0x00, 0x57, 0x00, 0x34, 0x00, 0xCB, 0x00, 0x34, 0x00, 0xCD, 0x00, 0x34, +/* 0000C8E0 */ 0x00, 0xDB, 0x00, 0x08, 0x00, 0x1C, 0x00, 0x00, 0x7E, 0x5D, 0x00, 0xC1, 0x53, 0x5A, 0x4B, 0x04, +/* 0000C8F0 */ 0xFE, 0x7B, 0x0B, 0x18, 0xA0, 0x41, 0xD1, 0x00, 0xAA, 0xFF, 0xF3, 0x06, 0x02, 0x00, 0xFF, 0xF3, +/* 0000C900 */ 0x06, 0x02, 0x00, 0x06, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFF, 0xF3, 0x06, 0x02, 0x00, 0xFE, 0xF9, +/* 0000C910 */ 0x2E, 0xFE, 0xF9, 0x2E, 0x01, 0xFE, 0xE0, 0x01, 0x0D, 0x21, 0x27, 0x09, 0xA8, 0xA8, 0x02, 0x09, +/* 0000C920 */ 0x1A, 0x1A, 0x1A, 0x1A, 0x05, 0x02, 0x24, 0x25, 0x26, 0x27, 0x08, 0x06, 0xFE, 0x27, 0x03, 0x06, +/* 0000C930 */ 0xFE, 0x0E, 0x04, 0x05, 0xFE, 0x0F, 0x04, 0x05, 0xFE, 0x10, 0x04, 0x05, 0xFE, 0x11, 0x04, 0x06, +/* 0000C940 */ 0xFE, 0x38, 0x03, 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, 0x2B, 0x03, 0x0B, 0x06, 0xFE, 0x2D, 0x03, +/* 0000C950 */ 0x07, 0x06, 0xFE, 0xD7, 0x03, 0x06, 0xFE, 0x24, 0x04, 0x06, 0xFE, 0x18, 0x04, 0x06, 0xFE, 0x1B, +/* 0000C960 */ 0x04, 0x06, 0xFE, 0x1C, 0x04, 0x06, 0xFE, 0xDA, 0x03, 0x06, 0xFE, 0xDB, 0x03, 0x06, 0xFE, 0xDC, +/* 0000C970 */ 0x03, 0x06, 0xFE, 0xDD, 0x03, 0x06, 0xFE, 0xDE, 0x03, 0x06, 0xFE, 0x1F, 0x04, 0x06, 0xFE, 0xEC, +/* 0000C980 */ 0x03, 0x0C, 0x06, 0xFE, 0x2C, 0x03, 0x06, 0xFE, 0xED, 0x03, 0x06, 0xFE, 0xEE, 0x03, 0x06, 0xFE, +/* 0000C990 */ 0x15, 0x04, 0x06, 0xFE, 0x77, 0x03, 0x05, 0xFE, 0x14, 0x04, 0xFE, 0x97, 0x02, 0xA8, 0x21, 0xA8, +/* 0000C9A0 */ 0x22, 0xA8, 0x23, 0x8E, 0x02, 0x32, 0x29, 0x14, 0x0C, 0x00, 0x29, 0x03, 0x8E, 0x02, 0x32, 0x29, +/* 0000C9B0 */ 0x14, 0x03, 0x00, 0x29, 0x04, 0x09, 0x73, 0x02, 0xE0, 0x00, 0x03, 0x01, 0xB9, 0x29, 0x00, 0x01, +/* 0000C9C0 */ 0x66, 0x01, 0x00, 0x21, 0x29, 0x95, 0x00, 0x02, 0x21, 0x8E, 0x02, 0x03, 0x2A, 0x6C, 0x29, 0x2A, +/* 0000C9D0 */ 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x2A, 0x8E, 0x02, 0x23, 0x2B, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 0000C9E0 */ 0x02, 0x59, 0x01, 0x05, 0xB9, 0x2D, 0x00, 0x01, 0x66, 0x01, 0x01, 0x2C, 0x2D, 0x59, 0x02, 0x2C, +/* 0000C9F0 */ 0x1F, 0x03, 0x2B, 0x2B, 0x59, 0x01, 0x2B, 0x8E, 0x02, 0x03, 0x2B, 0x5E, 0x2B, 0x2B, 0x01, 0x5E, +/* 0000CA00 */ 0x2B, 0x2B, 0x02, 0x59, 0x02, 0x2B, 0x1F, 0x03, 0xFF, 0x29, 0x8E, 0x02, 0x32, 0x29, 0x14, 0x03, +/* 0000CA10 */ 0x00, 0x29, 0x03, 0x09, 0x15, 0x02, 0xE0, 0x01, 0x04, 0x02, 0xB9, 0x29, 0x00, 0xB8, 0x01, 0x00, +/* 0000CA20 */ 0x00, 0x00, 0x29, 0x29, 0x01, 0x66, 0x01, 0x02, 0x22, 0x29, 0x95, 0x01, 0x02, 0x22, 0x01, 0x66, +/* 0000CA30 */ 0x01, 0x03, 0x23, 0x29, 0x95, 0x01, 0x03, 0x23, 0x8E, 0x02, 0x23, 0x29, 0x07, 0x03, 0x00, 0x59, +/* 0000CA40 */ 0x00, 0x02, 0x59, 0x01, 0x06, 0x90, 0x01, 0x02, 0x2A, 0x59, 0x02, 0x2A, 0x1F, 0x03, 0xFF, 0x29, +/* 0000CA50 */ 0x8E, 0x02, 0x23, 0x29, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x07, 0x90, 0x01, 0x03, +/* 0000CA60 */ 0x2A, 0x59, 0x02, 0x2A, 0x1F, 0x03, 0xFF, 0x29, 0x8E, 0x02, 0x16, 0x29, 0x07, 0x04, 0x00, 0x59, +/* 0000CA70 */ 0x00, 0x02, 0x90, 0x01, 0x02, 0x2A, 0x59, 0x01, 0x2A, 0x59, 0x02, 0x08, 0xCE, 0x00, 0x00, 0x00, +/* 0000CA80 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x8E, 0x01, 0x15, 0x2B, 0x4A, 0x2B, 0x7A, +/* 0000CA90 */ 0x2B, 0x2A, 0x03, 0x7A, 0x0B, 0x2A, 0x04, 0x7A, 0x0B, 0x2A, 0x05, 0x59, 0x03, 0x2A, 0x1F, 0x04, +/* 0000CAA0 */ 0xFF, 0x29, 0xCF, 0x29, 0x0B, 0xA1, 0x00, 0x0E, 0x29, 0xA1, 0x01, 0x0F, 0x29, 0xA1, 0x02, 0x10, +/* 0000CAB0 */ 0x29, 0xA1, 0x03, 0x11, 0x29, 0xA1, 0x04, 0x12, 0x29, 0xA1, 0x05, 0x13, 0x29, 0xA1, 0x06, 0x14, +/* 0000CAC0 */ 0x29, 0xA1, 0x07, 0x15, 0x29, 0xA1, 0x08, 0x16, 0x29, 0xA1, 0x09, 0x17, 0x29, 0xA1, 0x0A, 0x18, +/* 0000CAD0 */ 0x29, 0x96, 0x02, 0x29, 0x8E, 0x02, 0x16, 0x29, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x90, 0x01, +/* 0000CAE0 */ 0x02, 0x2A, 0x59, 0x01, 0x2A, 0x59, 0x02, 0x19, 0xCE, 0x14, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, +/* 0000CAF0 */ 0x00, 0x2A, 0x00, 0x00, 0x00, 0x90, 0x01, 0x02, 0x2B, 0x07, 0x01, 0x00, 0xC4, 0x01, 0x2B, 0x2B, +/* 0000CB00 */ 0x7A, 0x2B, 0x2A, 0x06, 0x7A, 0x1A, 0x2A, 0x07, 0x7A, 0x1A, 0x2A, 0x08, 0x7A, 0x1A, 0x2A, 0x09, +/* 0000CB10 */ 0x59, 0x03, 0x2A, 0x1F, 0x04, 0xFF, 0x29, 0x8E, 0x02, 0x04, 0x29, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 0000CB20 */ 0x02, 0x90, 0x01, 0x02, 0x2A, 0x5E, 0x2A, 0x2A, 0x0A, 0x59, 0x01, 0x2A, 0x8E, 0x02, 0x09, 0x2A, +/* 0000CB30 */ 0x5E, 0x2A, 0x2A, 0x0B, 0x59, 0x02, 0x2A, 0x1F, 0x03, 0xFF, 0x29, 0x8E, 0x02, 0x16, 0x29, 0x07, +/* 0000CB40 */ 0x04, 0x00, 0x59, 0x00, 0x02, 0x90, 0x01, 0x02, 0x2A, 0x5E, 0x2A, 0x2A, 0x0C, 0x59, 0x01, 0x2A, +/* 0000CB50 */ 0x59, 0x02, 0x1C, 0xCE, 0x2C, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x00, +/* 0000CB60 */ 0x90, 0x01, 0x02, 0x2B, 0x7A, 0x2B, 0x2A, 0x0D, 0x7A, 0x0B, 0x2A, 0x0E, 0x7A, 0x1A, 0x2A, 0x0F, +/* 0000CB70 */ 0x7A, 0x0B, 0x2A, 0x10, 0x59, 0x03, 0x2A, 0x1F, 0x04, 0xFF, 0x29, 0x8E, 0x02, 0x16, 0x29, 0x07, +/* 0000CB80 */ 0x04, 0x00, 0x59, 0x00, 0x02, 0x90, 0x01, 0x02, 0x2A, 0x5E, 0x2A, 0x2A, 0x11, 0x59, 0x01, 0x2A, +/* 0000CB90 */ 0x59, 0x02, 0x1D, 0xCE, 0x44, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x00, +/* 0000CBA0 */ 0xB9, 0x2C, 0x00, 0xB8, 0x01, 0x00, 0x00, 0x00, 0x2C, 0x2C, 0x01, 0x6A, 0x01, 0x04, 0x2B, 0x2C, +/* 0000CBB0 */ 0x2A, 0x7A, 0x2B, 0x2A, 0x12, 0x7A, 0x0B, 0x2A, 0x13, 0x7A, 0x1A, 0x2A, 0x14, 0x7A, 0x0B, 0x2A, +/* 0000CBC0 */ 0x15, 0x59, 0x03, 0x2A, 0x1F, 0x04, 0xFF, 0x29, 0x8E, 0x02, 0x16, 0x29, 0x07, 0x04, 0x00, 0x59, +/* 0000CBD0 */ 0x00, 0x02, 0x90, 0x01, 0x02, 0x2A, 0x5E, 0x2A, 0x2A, 0x16, 0x59, 0x01, 0x2A, 0x59, 0x02, 0x1E, +/* 0000CBE0 */ 0xCE, 0x5C, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x8E, 0x02, 0x23, +/* 0000CBF0 */ 0x2B, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x20, 0xB9, 0x2D, 0x00, 0xB8, 0x01, 0x00, +/* 0000CC00 */ 0x00, 0x00, 0x2D, 0x2D, 0x01, 0x66, 0x01, 0x05, 0x2C, 0x2D, 0x59, 0x02, 0x2C, 0x1F, 0x03, 0x2B, +/* 0000CC10 */ 0x2B, 0x7A, 0x2B, 0x2A, 0x17, 0x7A, 0x1A, 0x2A, 0x18, 0x7A, 0x0B, 0x2A, 0x19, 0x59, 0x03, 0x2A, +/* 0000CC20 */ 0x1F, 0x04, 0xFF, 0x29, 0x90, 0x01, 0x02, 0x00, 0x09, 0x07, 0x00, 0xA8, 0x00, 0x09, 0x02, 0x00, +/* 0000CC30 */ 0xA8, 0x00, 0x24, 0x00, 0x05, 0x70, 0x00, 0x5C, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, +/* 0000CC40 */ 0x00, 0x00, 0x00, 0x98, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x44, +/* 0000CC50 */ 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, +/* 0000CC60 */ 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x2C, 0x00, 0x00, 0x00, 0x03, +/* 0000CC70 */ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, +/* 0000CC80 */ 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, +/* 0000CC90 */ 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, +/* 0000CCA0 */ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, +/* 0000CCB0 */ 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0xFE, 0x04, 0x02, 0xFE, 0x2F, +/* 0000CCC0 */ 0x02, 0xFE, 0x2D, 0x02, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x97, 0x01, +/* 0000CCD0 */ 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x24, 0x01, 0xFE, 0x24, 0x01, 0xFE, +/* 0000CCE0 */ 0x24, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x24, +/* 0000CCF0 */ 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x24, 0x01, +/* 0000CD00 */ 0xFE, 0x98, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0x02, 0x01, 0x01, 0x00, 0xFE, 0x0B, 0x04, +/* 0000CD10 */ 0x02, 0x02, 0x00, 0xFE, 0x32, 0x02, 0x01, 0xFE, 0x0B, 0x02, 0xFF, 0x09, 0x07, 0x02, 0x00, 0x0F, +/* 0000CD20 */ 0x06, 0x00, 0x00, 0x00, 0x26, 0x00, 0x3E, 0x19, 0x41, 0x00, 0x79, 0x02, 0x2E, 0x00, 0x5A, 0x04, +/* 0000CD30 */ 0x18, 0x00, 0xD4, 0x02, 0x18, 0x00, 0x52, 0x00, 0x3A, 0x00, 0x9B, 0x00, 0x32, 0x00, 0x1F, 0x01, +/* 0000CD40 */ 0x43, 0x00, 0x99, 0x00, 0x24, 0x00, 0x48, 0x00, 0x40, 0x00, 0x9E, 0x00, 0x4D, 0x00, 0xC2, 0x04, +/* 0000CD50 */ 0x5C, 0x00, 0x16, 0x03, 0x07, 0x00, 0x84, 0x00, 0x07, 0x00, 0x16, 0x00, 0x00, 0x5A, 0xD4, 0x00, +/* 0000CD60 */ 0x00, 0x2B, 0xD3, 0x00, 0x00, 0x5D, 0xD1, 0x00, 0x00, 0x2E, 0xD0, 0x00, 0x00, 0x5C, 0xCE, 0x00, +/* 0000CD70 */ 0x00, 0x75, 0xCD, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x51, 0x0C, +/* 0000CD80 */ 0x39, 0xA0, 0x41, 0xD1, 0x00, 0xB1, 0xFF, 0xAD, 0x32, 0x02, 0x00, 0xFF, 0xAD, 0x32, 0x02, 0x00, +/* 0000CD90 */ 0x09, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFF, 0xAD, 0x32, 0x02, 0x00, 0xFE, 0x56, 0x02, 0xFE, 0x56, +/* 0000CDA0 */ 0x02, 0x05, 0x05, 0x08, 0x04, 0x22, 0x21, 0x05, 0x01, 0x05, 0x05, 0x05, 0x05, 0x07, 0x06, 0xFE, +/* 0000CDB0 */ 0x94, 0x03, 0x05, 0xFE, 0x22, 0x04, 0x06, 0xFE, 0x2F, 0x03, 0x6F, 0x58, 0x05, 0x2A, 0x08, 0x05, +/* 0000CDC0 */ 0x15, 0x03, 0x00, 0x08, 0x02, 0x09, 0x18, 0x00, 0x8E, 0x05, 0x03, 0x09, 0x6C, 0x08, 0x09, 0x00, +/* 0000CDD0 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x09, 0x59, 0x01, 0x03, 0x59, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x08, +/* 0000CDE0 */ 0x8E, 0x05, 0x03, 0x09, 0x6C, 0x08, 0x09, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x09, 0x59, 0x01, +/* 0000CDF0 */ 0x05, 0x1F, 0x02, 0x08, 0x08, 0x45, 0x06, 0x08, 0xA8, 0x08, 0x14, 0x08, 0x00, 0x06, 0x08, 0x5E, +/* 0000CE00 */ 0x08, 0x06, 0x02, 0x0F, 0x18, 0x00, 0x08, 0x8E, 0x05, 0x03, 0x09, 0x6C, 0x08, 0x09, 0x03, 0x07, +/* 0000CE10 */ 0x03, 0x00, 0x59, 0x00, 0x09, 0x59, 0x01, 0x03, 0x59, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x08, 0x5E, +/* 0000CE20 */ 0x00, 0x06, 0x04, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB6, 0x02, 0xFE, 0x05, 0x02, +/* 0000CE30 */ 0xFE, 0x37, 0x02, 0xFE, 0xB6, 0x02, 0xFE, 0x57, 0x02, 0xFF, 0xD3, 0x32, 0x02, 0x00, 0x07, 0x02, +/* 0000CE40 */ 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3C, 0x00, 0x18, 0x00, 0x84, 0x00, 0x18, 0x00, 0x4B, 0x00, 0x0F, +/* 0000CE50 */ 0x00, 0x69, 0x00, 0x18, 0x00, 0x84, 0x00, 0x09, 0x00, 0x37, 0x00, 0x00, 0x7F, 0x5D, 0x00, 0xC1, +/* 0000CE60 */ 0x03, 0x1A, 0x0F, 0x00, 0xFE, 0x3B, 0x0C, 0x1B, 0xA0, 0x41, 0xC3, 0x00, 0xFE, 0xEE, 0x03, 0xAF, +/* 0000CE70 */ 0xFF, 0x00, 0x00, 0x00, 0x02, 0xFF, 0xD6, 0x2D, 0x02, 0x00, 0xFF, 0xD6, 0x2D, 0x02, 0x00, 0x01, +/* 0000CE80 */ 0x08, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFF, 0xD6, 0x2D, 0x02, 0x00, 0xFE, 0x08, 0x04, 0xFE, 0x08, +/* 0000CE90 */ 0x04, 0x02, 0xFE, 0xE2, 0x03, 0xFE, 0x10, 0x02, 0x06, 0x07, 0x0B, 0x05, 0x3D, 0x3D, 0x05, 0x07, +/* 0000CEA0 */ 0x04, 0x04, 0x04, 0x04, 0x08, 0x09, 0x0A, 0x06, 0xFE, 0x94, 0x03, 0x05, 0xFE, 0xC6, 0x04, 0x06, +/* 0000CEB0 */ 0xFE, 0x2F, 0x03, 0x07, 0x08, 0xC5, 0x58, 0x07, 0x2A, 0x0B, 0x07, 0x15, 0x03, 0x00, 0x0B, 0x02, +/* 0000CEC0 */ 0x09, 0x18, 0x00, 0x8E, 0x05, 0x03, 0x0C, 0x6C, 0x0B, 0x0C, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 0000CED0 */ 0x0C, 0x59, 0x01, 0x03, 0x59, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x0B, 0x8E, 0x05, 0x03, 0x0C, 0x6C, +/* 0000CEE0 */ 0x0B, 0x0C, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0C, 0x59, 0x01, 0x07, 0x1F, 0x02, 0x0B, 0x0B, +/* 0000CEF0 */ 0x96, 0x02, 0x0B, 0x92, 0x02, 0x0B, 0xA8, 0x0C, 0x14, 0x0B, 0x00, 0x0B, 0x0C, 0x92, 0x02, 0x0B, +/* 0000CF00 */ 0x5E, 0x0B, 0x0B, 0x02, 0x0F, 0x18, 0x00, 0x0B, 0x8E, 0x05, 0x03, 0x0C, 0x6C, 0x0B, 0x0C, 0x03, +/* 0000CF10 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x0C, 0x59, 0x01, 0x03, 0x59, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x0B, +/* 0000CF20 */ 0x8E, 0x05, 0x04, 0x0B, 0x07, 0x03, 0x00, 0x59, 0x00, 0x06, 0xCD, 0x0C, 0x59, 0x01, 0x0C, 0x59, +/* 0000CF30 */ 0x02, 0x05, 0x1F, 0x03, 0x0B, 0x0B, 0x96, 0x03, 0x0B, 0x8E, 0x05, 0x06, 0x0B, 0x07, 0x04, 0x00, +/* 0000CF40 */ 0x59, 0x00, 0x06, 0x8E, 0x05, 0x17, 0x0C, 0x59, 0x01, 0x0C, 0x8E, 0x03, 0x02, 0x0C, 0x59, 0x02, +/* 0000CF50 */ 0x0C, 0xD6, 0x00, 0x0C, 0x59, 0x03, 0x0C, 0x1F, 0x04, 0xFF, 0x0B, 0x8E, 0x05, 0x04, 0x0B, 0x07, +/* 0000CF60 */ 0x03, 0x00, 0x59, 0x00, 0x06, 0x92, 0x03, 0x0C, 0x59, 0x01, 0x0C, 0xCD, 0x0C, 0x59, 0x02, 0x0C, +/* 0000CF70 */ 0x1F, 0x03, 0x00, 0x0B, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB6, 0x02, 0xFE, 0x05, +/* 0000CF80 */ 0x02, 0xFE, 0x37, 0x02, 0xFE, 0xB6, 0x02, 0xFF, 0x0B, 0x2E, 0x02, 0x00, 0x09, 0x02, 0x00, 0x00, +/* 0000CF90 */ 0x00, 0x0B, 0x00, 0x3C, 0x00, 0x18, 0x00, 0x8C, 0x00, 0x18, 0x00, 0x4B, 0x00, 0x15, 0x00, 0x69, +/* 0000CFA0 */ 0x00, 0x18, 0x00, 0x8D, 0x00, 0x19, 0x00, 0x47, 0x00, 0x22, 0x00, 0x44, 0x01, 0x1E, 0x00, 0x3E, +/* 0000CFB0 */ 0x00, 0x00, 0xB6, 0xCF, 0x00, 0x00, 0x7F, 0x4C, 0x00, 0x01, 0x00, 0x10, 0x03, 0x00, 0xFE, 0x46, +/* 0000CFC0 */ 0x0C, 0x48, 0xA2, 0x41, 0xD1, 0x00, 0xB0, 0xFF, 0x8B, 0x30, 0x02, 0x00, 0xFF, 0x8B, 0x30, 0x02, +/* 0000CFD0 */ 0x00, 0x41, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0x8B, 0x30, 0x02, 0x00, 0xF8, 0xF8, 0x05, 0x04, +/* 0000CFE0 */ 0x06, 0x0D, 0x0D, 0x06, 0x02, 0x05, 0x05, 0xFE, 0xC7, 0x04, 0x06, 0xFE, 0xD6, 0x03, 0x2C, 0x8E, +/* 0000CFF0 */ 0x01, 0x02, 0x06, 0x2D, 0x07, 0x02, 0x04, 0x2B, 0x06, 0x06, 0x07, 0x15, 0x03, 0x00, 0x06, 0x03, +/* 0000D000 */ 0x09, 0x14, 0x00, 0x8E, 0x01, 0x03, 0x06, 0x8E, 0x01, 0x02, 0x07, 0x2D, 0x08, 0x02, 0x04, 0x97, +/* 0000D010 */ 0x07, 0x07, 0x08, 0x9C, 0x07, 0x06, 0x04, 0xA8, 0x00, 0x24, 0x00, 0xFF, 0xBB, 0x30, 0x02, 0x00, +/* 0000D020 */ 0x03, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x5A, 0x00, 0x16, 0x00, 0x6D, 0x00, 0x00, 0x7F, 0x5C, +/* 0000D030 */ 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x20, 0x0C, 0x10, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x15, +/* 0000D040 */ 0x04, 0xAE, 0xFF, 0x61, 0x27, 0x02, 0x00, 0xFF, 0x61, 0x27, 0x02, 0x00, 0x09, 0xFE, 0x00, 0x90, +/* 0000D050 */ 0x02, 0x02, 0xFF, 0x61, 0x27, 0x02, 0x00, 0xFE, 0x7C, 0x02, 0xFE, 0x7C, 0x02, 0x07, 0x06, 0x0A, +/* 0000D060 */ 0x07, 0x34, 0x32, 0x05, 0x03, 0x06, 0x06, 0x06, 0x06, 0x09, 0x06, 0xFE, 0x94, 0x03, 0x05, 0xFE, +/* 0000D070 */ 0x22, 0x04, 0x06, 0xFE, 0x2F, 0x03, 0x08, 0xAC, 0x58, 0x07, 0x8E, 0x05, 0x24, 0x0B, 0x6C, 0x0A, +/* 0000D080 */ 0x0B, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0B, 0x59, 0x01, 0x06, 0x1F, 0x02, 0x0A, 0x0A, 0x45, +/* 0000D090 */ 0x06, 0x0A, 0x2A, 0x0A, 0x07, 0x15, 0x03, 0x00, 0x0A, 0x02, 0x09, 0x18, 0x00, 0x8E, 0x05, 0x03, +/* 0000D0A0 */ 0x0B, 0x6C, 0x0A, 0x0B, 0x01, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0B, 0x59, 0x01, 0x03, 0x59, 0x02, +/* 0000D0B0 */ 0x04, 0x1F, 0x03, 0xFF, 0x0A, 0x8E, 0x05, 0x03, 0x0B, 0x6C, 0x0A, 0x0B, 0x02, 0x07, 0x02, 0x00, +/* 0000D0C0 */ 0x59, 0x00, 0x0B, 0x59, 0x01, 0x07, 0x1F, 0x02, 0x0A, 0x0A, 0x45, 0x08, 0x0A, 0xA8, 0x0A, 0x14, +/* 0000D0D0 */ 0x08, 0x00, 0x08, 0x0A, 0x5E, 0x0A, 0x08, 0x03, 0x0F, 0x18, 0x00, 0x0A, 0x8E, 0x05, 0x03, 0x0B, +/* 0000D0E0 */ 0x6C, 0x0A, 0x0B, 0x04, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0B, 0x59, 0x01, 0x03, 0x59, 0x02, 0x04, +/* 0000D0F0 */ 0x1F, 0x03, 0xFF, 0x0A, 0x8E, 0x05, 0x0C, 0x0A, 0x07, 0x02, 0x00, 0x59, 0x00, 0x05, 0x8E, 0x05, +/* 0000D100 */ 0x03, 0x0C, 0x6C, 0x0B, 0x0C, 0x05, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0C, 0x59, 0x01, 0x06, 0x59, +/* 0000D110 */ 0x02, 0x08, 0x1F, 0x03, 0x0B, 0x0B, 0x59, 0x01, 0x0B, 0x1F, 0x02, 0x00, 0x0A, 0x09, 0x02, 0x00, +/* 0000D120 */ 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x23, 0x03, 0xFE, 0xB6, 0x02, 0xFE, 0x05, 0x02, 0xFE, 0x37, 0x02, +/* 0000D130 */ 0xFE, 0xB6, 0x02, 0xFE, 0xF8, 0x01, 0xFF, 0x8A, 0x27, 0x02, 0x00, 0x08, 0x02, 0x00, 0x00, 0x00, +/* 0000D140 */ 0x18, 0x00, 0x2F, 0x00, 0x0B, 0x00, 0x38, 0x00, 0x18, 0x00, 0x7C, 0x00, 0x18, 0x00, 0x47, 0x00, +/* 0000D150 */ 0x0F, 0x00, 0x65, 0x00, 0x18, 0x00, 0x7C, 0x00, 0x2E, 0x00, 0x47, 0x00, 0x00, 0x7F, 0x5C, 0x00, +/* 0000D160 */ 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x04, 0x0C, 0x10, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x2F, 0x03, +/* 0000D170 */ 0xAD, 0xFF, 0xEB, 0x22, 0x02, 0x00, 0xFF, 0xEB, 0x22, 0x02, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x03, +/* 0000D180 */ 0x01, 0xFF, 0xEB, 0x22, 0x02, 0x00, 0xFE, 0x1E, 0x04, 0xFE, 0x1E, 0x04, 0x09, 0x05, 0x0B, 0x05, +/* 0000D190 */ 0x5E, 0x57, 0x05, 0x0A, 0x06, 0x06, 0x06, 0x06, 0x0A, 0x08, 0x06, 0xFE, 0x2F, 0x03, 0x07, 0xFE, +/* 0000D1A0 */ 0x30, 0x01, 0x58, 0x07, 0x4E, 0x08, 0x4E, 0x09, 0x15, 0x05, 0x00, 0x05, 0x02, 0xA8, 0x0B, 0x45, +/* 0000D1B0 */ 0x05, 0x0B, 0x15, 0x05, 0x00, 0x06, 0x02, 0xA8, 0x0B, 0x45, 0x06, 0x0B, 0x4E, 0x08, 0x4E, 0x09, +/* 0000D1C0 */ 0x8E, 0x05, 0x07, 0x0B, 0x14, 0x0A, 0x00, 0x07, 0x0B, 0xA8, 0x0B, 0x14, 0x03, 0x00, 0x07, 0x0B, +/* 0000D1D0 */ 0x09, 0x16, 0x00, 0x8E, 0x01, 0x02, 0x0B, 0x4A, 0x0B, 0x07, 0x03, 0x00, 0x59, 0x01, 0x05, 0x59, +/* 0000D1E0 */ 0x02, 0x06, 0xC4, 0x03, 0x00, 0x0B, 0x09, 0xE7, 0x00, 0x8E, 0x05, 0x24, 0x0C, 0x6C, 0x0B, 0x0C, +/* 0000D1F0 */ 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0C, 0x59, 0x01, 0x07, 0x1F, 0x02, 0x0B, 0x0B, 0x45, 0x08, +/* 0000D200 */ 0x0B, 0x8E, 0x05, 0x12, 0x0B, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x08, 0x1F, 0x02, +/* 0000D210 */ 0x0B, 0x0B, 0x0F, 0x15, 0x00, 0x0B, 0x8E, 0x05, 0x03, 0x0C, 0x6C, 0x0B, 0x0C, 0x01, 0x07, 0x02, +/* 0000D220 */ 0x00, 0x59, 0x00, 0x0C, 0x59, 0x01, 0x03, 0x1F, 0x02, 0xFF, 0x0B, 0x8E, 0x05, 0x03, 0x0C, 0x6C, +/* 0000D230 */ 0x0B, 0x0C, 0x02, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0C, 0x59, 0x01, 0x08, 0x1F, 0x02, 0x0B, 0x0B, +/* 0000D240 */ 0x45, 0x09, 0x0B, 0xA8, 0x0B, 0x14, 0x03, 0x00, 0x09, 0x0B, 0x09, 0x31, 0x00, 0x8E, 0x05, 0x04, +/* 0000D250 */ 0x0B, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0xCD, 0x0C, 0x59, 0x01, 0x0C, 0x59, 0x02, 0x04, 0x1F, +/* 0000D260 */ 0x03, 0x0B, 0x0B, 0x45, 0x09, 0x0B, 0x8E, 0x05, 0x03, 0x0C, 0x6C, 0x0B, 0x0C, 0x03, 0x07, 0x03, +/* 0000D270 */ 0x00, 0x59, 0x00, 0x0C, 0x59, 0x01, 0x08, 0x59, 0x02, 0x09, 0x1F, 0x03, 0xFF, 0x0B, 0x8E, 0x02, +/* 0000D280 */ 0x02, 0x0B, 0x4A, 0x0B, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x09, 0x59, 0x02, 0x05, +/* 0000D290 */ 0x59, 0x03, 0x06, 0x1F, 0x04, 0xFF, 0x0B, 0x45, 0x0B, 0x09, 0x8E, 0x05, 0x06, 0x0C, 0x07, 0x04, +/* 0000D2A0 */ 0x00, 0x59, 0x00, 0x02, 0x8E, 0x05, 0x1A, 0x0D, 0x59, 0x01, 0x0D, 0x8E, 0x01, 0x03, 0x0D, 0x4A, +/* 0000D2B0 */ 0x0D, 0x59, 0x02, 0x0D, 0x59, 0x03, 0x08, 0x1F, 0x04, 0x0C, 0x0C, 0x76, 0x0C, 0x0B, 0x04, 0x5E, +/* 0000D2C0 */ 0x0B, 0x09, 0x05, 0x82, 0x0B, 0x0B, 0x06, 0x01, 0x45, 0x00, 0x08, 0x09, 0x02, 0x00, 0xA8, 0x00, +/* 0000D2D0 */ 0x24, 0x00, 0xFE, 0x21, 0x03, 0xFE, 0xB2, 0x02, 0xFE, 0x05, 0x02, 0xFE, 0x06, 0x02, 0xFE, 0x57, +/* 0000D2E0 */ 0x02, 0xFE, 0x57, 0x02, 0xFF, 0x01, 0x23, 0x02, 0x00, 0x10, 0x06, 0x00, 0x00, 0x00, 0x0A, 0x00, +/* 0000D2F0 */ 0x15, 0x00, 0x0E, 0x00, 0x2B, 0x00, 0x13, 0x00, 0x43, 0x00, 0x16, 0x00, 0x56, 0x00, 0x18, 0x00, +/* 0000D300 */ 0x38, 0x00, 0x15, 0x00, 0x38, 0x00, 0x15, 0x00, 0x9B, 0x00, 0x18, 0x00, 0x47, 0x00, 0x0A, 0x00, +/* 0000D310 */ 0x3A, 0x00, 0x19, 0x00, 0x3F, 0x00, 0x18, 0x00, 0x58, 0x00, 0x19, 0x00, 0x4D, 0x00, 0x28, 0x00, +/* 0000D320 */ 0x65, 0x00, 0x09, 0x00, 0x3D, 0x00, 0x08, 0x00, 0x1C, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x07, +/* 0000D330 */ 0x10, 0x03, 0x00, 0xFE, 0xF7, 0x0B, 0x62, 0xA0, 0x41, 0xF1, 0x00, 0xAC, 0xFF, 0x9D, 0x20, 0x02, +/* 0000D340 */ 0x00, 0xFF, 0x9D, 0x20, 0x02, 0x00, 0x0B, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFF, 0x9D, 0x20, 0x02, +/* 0000D350 */ 0x00, 0xFE, 0xE1, 0x01, 0xFE, 0xE1, 0x01, 0x08, 0x09, 0x0E, 0x07, 0x38, 0x36, 0x04, 0x06, 0x03, +/* 0000D360 */ 0x03, 0x03, 0x03, 0x01, 0x0D, 0x07, 0x06, 0xFE, 0xA4, 0x03, 0x05, 0xFE, 0x0F, 0x04, 0x06, 0xFE, +/* 0000D370 */ 0x0E, 0x04, 0x08, 0x01, 0x00, 0x01, 0x01, 0xB6, 0xB1, 0x0B, 0x58, 0x09, 0x2A, 0x0E, 0x09, 0x15, +/* 0000D380 */ 0x03, 0x00, 0x0E, 0x03, 0x09, 0x25, 0x00, 0x8E, 0x04, 0x0B, 0x0E, 0xE3, 0x0E, 0x09, 0x0E, 0x00, +/* 0000D390 */ 0x0F, 0x18, 0x00, 0x0E, 0x8E, 0x04, 0x03, 0x0F, 0x6C, 0x0E, 0x0F, 0x00, 0x07, 0x03, 0x00, 0x59, +/* 0000D3A0 */ 0x00, 0x0F, 0x59, 0x01, 0x04, 0x59, 0x02, 0x05, 0x1F, 0x03, 0xFF, 0x0E, 0x8E, 0x04, 0x04, 0x0E, +/* 0000D3B0 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x06, 0xCD, 0x0F, 0x59, 0x01, 0x0F, 0x59, 0x02, 0x02, 0x1F, 0x03, +/* 0000D3C0 */ 0x0E, 0x0E, 0x45, 0x0A, 0x0E, 0x8E, 0x01, 0x02, 0x0E, 0x4A, 0x0E, 0x07, 0x04, 0x00, 0x59, 0x00, +/* 0000D3D0 */ 0x06, 0x59, 0x01, 0x0A, 0x97, 0x0F, 0x0B, 0x07, 0x59, 0x02, 0x0F, 0x97, 0x0F, 0x0B, 0x08, 0x59, +/* 0000D3E0 */ 0x03, 0x0F, 0x1F, 0x04, 0xFF, 0x0E, 0x8E, 0x04, 0x24, 0x0F, 0x6C, 0x0E, 0x0F, 0x01, 0x07, 0x02, +/* 0000D3F0 */ 0x00, 0x59, 0x00, 0x0F, 0x59, 0x01, 0x09, 0x1F, 0x02, 0x0E, 0x0E, 0x45, 0x0C, 0x0E, 0x8E, 0x04, +/* 0000D400 */ 0x0C, 0x0E, 0x07, 0x02, 0x00, 0x59, 0x00, 0x06, 0x8E, 0x04, 0x03, 0x10, 0x6C, 0x0F, 0x10, 0x02, +/* 0000D410 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x10, 0x59, 0x01, 0x0C, 0x59, 0x02, 0x0A, 0x1F, 0x03, 0x0F, 0x0F, +/* 0000D420 */ 0x59, 0x01, 0x0F, 0x1F, 0x02, 0x00, 0x0E, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB6, +/* 0000D430 */ 0x02, 0xFE, 0x23, 0x03, 0xFE, 0xF8, 0x01, 0xFF, 0xBB, 0x20, 0x02, 0x00, 0x07, 0x04, 0x00, 0x00, +/* 0000D440 */ 0x00, 0x18, 0x00, 0x53, 0x00, 0x18, 0x00, 0x70, 0x00, 0x19, 0x00, 0x3A, 0x00, 0x21, 0x00, 0x52, +/* 0000D450 */ 0x00, 0x18, 0x00, 0x31, 0x00, 0x2E, 0x00, 0x42, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x43, 0x50, +/* 0000D460 */ 0x03, 0x00, 0xFE, 0x7D, 0x0B, 0x0C, 0xB3, 0x41, 0xC1, 0x00, 0xFE, 0x0B, 0x04, 0xAB, 0xFF, 0x49, +/* 0000D470 */ 0x07, 0x02, 0x00, 0xFF, 0x49, 0x07, 0x02, 0x00, 0x45, 0xFE, 0x00, 0x90, 0x04, 0x04, 0xFF, 0x49, +/* 0000D480 */ 0x07, 0x02, 0x00, 0xFE, 0xF0, 0x18, 0xFE, 0xF0, 0x18, 0x18, 0x23, 0x37, 0x07, 0xFE, 0x82, 0x01, +/* 0000D490 */ 0xFE, 0x64, 0x01, 0x04, 0x10, 0x25, 0x25, 0x25, 0x25, 0x01, 0x36, 0x37, 0x06, 0xFE, 0x94, 0x03, +/* 0000D4A0 */ 0x06, 0xFE, 0xBA, 0x04, 0x08, 0x06, 0xFE, 0x2F, 0x03, 0x0B, 0x06, 0xFE, 0xD6, 0x03, 0x07, 0x06, +/* 0000D4B0 */ 0xFE, 0xE0, 0x03, 0x06, 0xFE, 0xA3, 0x03, 0x05, 0xFE, 0x9C, 0x03, 0x05, 0xFE, 0xDF, 0x03, 0x06, +/* 0000D4C0 */ 0xFE, 0x18, 0x04, 0x06, 0xFE, 0x19, 0x04, 0x06, 0xFE, 0x1A, 0x04, 0x06, 0xFE, 0x1B, 0x04, 0x06, +/* 0000D4D0 */ 0xFE, 0x1C, 0x04, 0x06, 0xFE, 0x1D, 0x04, 0x06, 0xFE, 0x1E, 0x04, 0x06, 0xFE, 0x37, 0x03, 0x06, +/* 0000D4E0 */ 0xFE, 0xDA, 0x03, 0x01, 0x01, 0x01, 0x15, 0x06, 0xFE, 0xDD, 0x03, 0x06, 0xFE, 0xDE, 0x03, 0x06, +/* 0000D4F0 */ 0xFE, 0x1F, 0x04, 0x06, 0xFE, 0xA2, 0x03, 0x06, 0xFE, 0x17, 0x04, 0x06, 0xFE, 0xDB, 0x03, 0x01, +/* 0000D500 */ 0x00, 0x01, 0x14, 0x01, 0x03, 0x06, 0xFE, 0xDC, 0x03, 0x05, 0xFE, 0xC4, 0x04, 0xFE, 0xED, 0x04, +/* 0000D510 */ 0x2A, 0x38, 0x23, 0x0D, 0x03, 0x00, 0x38, 0x02, 0x09, 0x12, 0x00, 0x8E, 0x04, 0x03, 0x39, 0x6C, +/* 0000D520 */ 0x38, 0x39, 0x00, 0x07, 0x01, 0x00, 0x59, 0x00, 0x39, 0x1F, 0x01, 0xFF, 0x38, 0x8E, 0x04, 0x06, +/* 0000D530 */ 0x38, 0x07, 0x04, 0x00, 0x59, 0x00, 0x04, 0x8E, 0x04, 0x14, 0x39, 0x59, 0x01, 0x39, 0x59, 0x02, +/* 0000D540 */ 0x23, 0x59, 0x03, 0x03, 0x1F, 0x04, 0x38, 0x38, 0x0E, 0x20, 0x00, 0x38, 0x5E, 0x38, 0x23, 0x01, +/* 0000D550 */ 0x0E, 0x18, 0x00, 0x38, 0x8E, 0x04, 0x03, 0x39, 0x6C, 0x38, 0x39, 0x02, 0x07, 0x03, 0x00, 0x59, +/* 0000D560 */ 0x00, 0x39, 0x59, 0x01, 0x05, 0x59, 0x02, 0x05, 0x1F, 0x03, 0xFF, 0x38, 0x76, 0x06, 0x23, 0x03, +/* 0000D570 */ 0x2A, 0x38, 0x25, 0x14, 0x03, 0x00, 0x38, 0x07, 0x09, 0x1C, 0x00, 0x8E, 0x04, 0x04, 0x38, 0x07, +/* 0000D580 */ 0x03, 0x00, 0x59, 0x00, 0x04, 0xCD, 0x39, 0x59, 0x01, 0x39, 0x59, 0x02, 0x08, 0x1F, 0x03, 0x38, +/* 0000D590 */ 0x38, 0x45, 0x25, 0x38, 0x09, 0x18, 0x00, 0x8E, 0x04, 0x24, 0x39, 0x6C, 0x38, 0x39, 0x04, 0x07, +/* 0000D5A0 */ 0x02, 0x00, 0x59, 0x00, 0x39, 0x59, 0x01, 0x25, 0x1F, 0x02, 0x38, 0x38, 0x45, 0x25, 0x38, 0x8E, +/* 0000D5B0 */ 0x03, 0x02, 0x38, 0x4A, 0x38, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x25, 0x59, 0x02, +/* 0000D5C0 */ 0x09, 0x59, 0x03, 0x0A, 0xCF, 0x39, 0x02, 0xA1, 0x00, 0x0B, 0x39, 0xA1, 0x01, 0x0C, 0x39, 0x59, +/* 0000D5D0 */ 0x04, 0x39, 0x59, 0x05, 0x0C, 0x1F, 0x06, 0x38, 0x38, 0x45, 0x28, 0x38, 0x8E, 0x03, 0x02, 0x38, +/* 0000D5E0 */ 0x4A, 0x38, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x25, 0x59, 0x02, 0x0D, 0x59, 0x03, +/* 0000D5F0 */ 0x0A, 0xCF, 0x39, 0x03, 0xA1, 0x00, 0x0E, 0x39, 0xA1, 0x01, 0x0F, 0x39, 0xA1, 0x02, 0x10, 0x39, +/* 0000D600 */ 0x59, 0x04, 0x39, 0x59, 0x05, 0x0E, 0x1F, 0x06, 0x38, 0x38, 0x45, 0x29, 0x38, 0x8E, 0x04, 0x03, +/* 0000D610 */ 0x38, 0x5E, 0x38, 0x38, 0x05, 0x97, 0x38, 0x38, 0x29, 0x45, 0x2A, 0x38, 0x8E, 0x03, 0x02, 0x38, +/* 0000D620 */ 0x4A, 0x38, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x25, 0x59, 0x02, 0x10, 0x59, 0x03, +/* 0000D630 */ 0x0A, 0xA8, 0x39, 0x59, 0x04, 0x39, 0xA8, 0x39, 0x59, 0x05, 0x39, 0x1F, 0x06, 0x38, 0x38, 0x45, +/* 0000D640 */ 0x2B, 0x38, 0x8E, 0x03, 0x02, 0x38, 0x4A, 0x38, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, +/* 0000D650 */ 0x25, 0x59, 0x02, 0x11, 0x59, 0x03, 0x0A, 0xCF, 0x39, 0x03, 0xA1, 0x00, 0x12, 0x39, 0xA1, 0x01, +/* 0000D660 */ 0x13, 0x39, 0xA1, 0x02, 0x14, 0x39, 0x59, 0x04, 0x39, 0x59, 0x05, 0x13, 0x1F, 0x06, 0x38, 0x38, +/* 0000D670 */ 0x45, 0x2C, 0x38, 0xA8, 0x38, 0x45, 0x2D, 0x38, 0x8E, 0x03, 0x03, 0x38, 0x4A, 0x38, 0x07, 0x06, +/* 0000D680 */ 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x25, 0x59, 0x02, 0x15, 0x59, 0x03, 0x16, 0x59, 0x04, 0x17, +/* 0000D690 */ 0x59, 0x05, 0x16, 0x1F, 0x06, 0x38, 0x38, 0x45, 0x2E, 0x38, 0xA8, 0x38, 0x45, 0x2F, 0x38, 0xA8, +/* 0000D6A0 */ 0x38, 0x45, 0x30, 0x38, 0xA8, 0x38, 0x45, 0x31, 0x38, 0x5E, 0x38, 0x25, 0x06, 0x45, 0x32, 0x38, +/* 0000D6B0 */ 0x5E, 0x38, 0x25, 0x07, 0x45, 0x33, 0x38, 0x2A, 0x38, 0x32, 0x15, 0x0B, 0x00, 0x38, 0x07, 0x2A, +/* 0000D6C0 */ 0x38, 0x33, 0x15, 0x03, 0x00, 0x38, 0x07, 0x09, 0x44, 0x00, 0x8E, 0x03, 0x03, 0x38, 0x4A, 0x38, +/* 0000D6D0 */ 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x25, 0x59, 0x02, 0x18, 0x59, 0x03, 0x16, 0x59, +/* 0000D6E0 */ 0x04, 0x17, 0x59, 0x05, 0x16, 0x1F, 0x06, 0x38, 0x38, 0x45, 0x32, 0x38, 0x8E, 0x03, 0x03, 0x38, +/* 0000D6F0 */ 0x4A, 0x38, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x25, 0x59, 0x02, 0x19, 0x59, 0x03, +/* 0000D700 */ 0x32, 0x59, 0x04, 0x17, 0x59, 0x05, 0x17, 0x1F, 0x06, 0x38, 0x38, 0x45, 0x33, 0x38, 0x8E, 0x03, +/* 0000D710 */ 0x02, 0x38, 0x4A, 0x38, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x25, 0x59, 0x02, 0x1A, +/* 0000D720 */ 0x59, 0x03, 0x1B, 0xA8, 0x39, 0x59, 0x04, 0x39, 0x59, 0x05, 0x06, 0x1F, 0x06, 0x38, 0x38, 0x45, +/* 0000D730 */ 0x34, 0x38, 0x8E, 0x03, 0x07, 0x38, 0x4A, 0x38, 0x07, 0x02, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, +/* 0000D740 */ 0x24, 0x1F, 0x02, 0x38, 0x38, 0x45, 0x24, 0x38, 0x8E, 0x04, 0x2A, 0x38, 0x07, 0x05, 0x00, 0x59, +/* 0000D750 */ 0x00, 0x04, 0x59, 0x01, 0x24, 0x59, 0x02, 0x28, 0xCF, 0x39, 0x01, 0xA1, 0x00, 0x1C, 0x39, 0x59, +/* 0000D760 */ 0x03, 0x39, 0x8E, 0x04, 0x2B, 0x39, 0x59, 0x04, 0x39, 0x1F, 0x05, 0x38, 0x38, 0x45, 0x35, 0x38, +/* 0000D770 */ 0x2A, 0x38, 0x2B, 0x15, 0x03, 0x00, 0x38, 0x07, 0x09, 0x3D, 0x00, 0x8E, 0x03, 0x06, 0x38, 0x4A, +/* 0000D780 */ 0x38, 0x07, 0x02, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x2B, 0x1F, 0x02, 0x38, 0x38, 0x0F, 0x26, +/* 0000D790 */ 0x00, 0x38, 0x8E, 0x04, 0x03, 0x39, 0x6C, 0x38, 0x39, 0x08, 0x07, 0x02, 0x00, 0x59, 0x00, 0x39, +/* 0000D7A0 */ 0x8E, 0x04, 0x0C, 0x3A, 0x07, 0x02, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x2B, 0x1F, 0x02, 0x3A, +/* 0000D7B0 */ 0x3A, 0x59, 0x01, 0x3A, 0x1F, 0x02, 0xFF, 0x38, 0x14, 0x03, 0x00, 0x29, 0x10, 0x09, 0xD2, 0x00, +/* 0000D7C0 */ 0x2A, 0x38, 0x2B, 0x14, 0x03, 0x00, 0x38, 0x07, 0x09, 0x12, 0x00, 0x8E, 0x04, 0x03, 0x39, 0x6C, +/* 0000D7D0 */ 0x38, 0x39, 0x09, 0x07, 0x01, 0x00, 0x59, 0x00, 0x39, 0x1F, 0x01, 0xFF, 0x38, 0x8E, 0x04, 0x06, +/* 0000D7E0 */ 0x38, 0x07, 0x03, 0x00, 0x59, 0x00, 0x04, 0x8E, 0x04, 0x1F, 0x39, 0x59, 0x01, 0x39, 0x59, 0x02, +/* 0000D7F0 */ 0x2B, 0x1F, 0x03, 0x38, 0x38, 0x45, 0x2B, 0x38, 0xE7, 0x1C, 0x00, 0x8E, 0x04, 0x03, 0x39, 0x6C, +/* 0000D800 */ 0x38, 0x39, 0x0A, 0x07, 0x02, 0x00, 0x59, 0x00, 0x39, 0x59, 0x01, 0x2B, 0x1F, 0x02, 0x38, 0x38, +/* 0000D810 */ 0x45, 0x2D, 0x38, 0xEB, 0x09, 0x3B, 0x00, 0xE9, 0x26, 0x06, 0x8E, 0x04, 0x22, 0x38, 0x07, 0x02, +/* 0000D820 */ 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x26, 0x1F, 0x02, 0xFF, 0x38, 0x8E, 0x04, 0x03, 0x39, 0x6C, +/* 0000D830 */ 0x38, 0x39, 0x0B, 0x07, 0x02, 0x00, 0x59, 0x00, 0x39, 0x8E, 0x04, 0x0C, 0x3A, 0x07, 0x02, 0x00, +/* 0000D840 */ 0x59, 0x00, 0x04, 0x59, 0x01, 0x2B, 0x1F, 0x02, 0x3A, 0x3A, 0x59, 0x01, 0x3A, 0x1F, 0x02, 0xFF, +/* 0000D850 */ 0x38, 0xEB, 0x8E, 0x03, 0x03, 0x38, 0x4A, 0x38, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, +/* 0000D860 */ 0x25, 0x59, 0x02, 0x1D, 0x59, 0x03, 0x1E, 0x59, 0x04, 0x1F, 0x59, 0x05, 0x2D, 0x1F, 0x06, 0x38, +/* 0000D870 */ 0x38, 0x45, 0x2F, 0x38, 0x8E, 0x04, 0x10, 0x39, 0x6C, 0x38, 0x39, 0x0C, 0x07, 0x03, 0x00, 0x59, +/* 0000D880 */ 0x00, 0x39, 0x59, 0x01, 0x2D, 0x59, 0x02, 0x2F, 0x1F, 0x03, 0x38, 0x38, 0x45, 0x31, 0x38, 0x09, +/* 0000D890 */ 0x6D, 0x00, 0xA8, 0x38, 0x45, 0x2B, 0x38, 0xA8, 0x38, 0x45, 0x2C, 0x38, 0x8E, 0x03, 0x03, 0x38, +/* 0000D8A0 */ 0x4A, 0x38, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x25, 0x59, 0x02, 0x1D, 0x59, 0x03, +/* 0000D8B0 */ 0x1E, 0x59, 0x04, 0x1F, 0x59, 0x05, 0x1E, 0x1F, 0x06, 0x38, 0x38, 0x45, 0x2F, 0x38, 0x14, 0x03, +/* 0000D8C0 */ 0x00, 0x29, 0x0F, 0x09, 0x1E, 0x00, 0x8E, 0x04, 0x10, 0x39, 0x6C, 0x38, 0x39, 0x0D, 0x07, 0x03, +/* 0000D8D0 */ 0x00, 0x59, 0x00, 0x39, 0x59, 0x01, 0x2F, 0x59, 0x02, 0x1E, 0x1F, 0x03, 0x38, 0x38, 0x45, 0x31, +/* 0000D8E0 */ 0x38, 0x09, 0x1B, 0x00, 0x8E, 0x04, 0x10, 0x39, 0x6C, 0x38, 0x39, 0x0E, 0x07, 0x03, 0x00, 0x59, +/* 0000D8F0 */ 0x00, 0x39, 0x59, 0x01, 0x2F, 0x59, 0x02, 0x20, 0x1F, 0x03, 0x38, 0x38, 0x45, 0x31, 0x38, 0x8E, +/* 0000D900 */ 0x03, 0x03, 0x38, 0x4A, 0x38, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x25, 0x59, 0x02, +/* 0000D910 */ 0x21, 0x59, 0x03, 0x2F, 0x59, 0x04, 0x1F, 0x59, 0x05, 0x31, 0x1F, 0x06, 0x38, 0x38, 0x45, 0x30, +/* 0000D920 */ 0x38, 0x76, 0x28, 0x23, 0x0F, 0x5E, 0x38, 0x35, 0x10, 0x76, 0x38, 0x23, 0x11, 0x76, 0x29, 0x23, +/* 0000D930 */ 0x12, 0xA8, 0x38, 0x15, 0x03, 0x00, 0x2B, 0x38, 0x09, 0x04, 0x00, 0x76, 0x2B, 0x23, 0x13, 0xA8, +/* 0000D940 */ 0x38, 0x15, 0x03, 0x00, 0x2C, 0x38, 0x09, 0x14, 0x00, 0x76, 0x2C, 0x23, 0x14, 0x8E, 0x04, 0x03, +/* 0000D950 */ 0x38, 0x5E, 0x38, 0x38, 0x15, 0x97, 0x38, 0x38, 0x2C, 0x76, 0x38, 0x23, 0x16, 0x76, 0x2E, 0x23, +/* 0000D960 */ 0x17, 0x76, 0x2F, 0x23, 0x18, 0x76, 0x30, 0x23, 0x19, 0xA8, 0x38, 0x15, 0x03, 0x00, 0x33, 0x38, +/* 0000D970 */ 0x09, 0x08, 0x00, 0x76, 0x32, 0x23, 0x1A, 0x76, 0x33, 0x23, 0x1B, 0x76, 0x2A, 0x23, 0x1C, 0x76, +/* 0000D980 */ 0x34, 0x23, 0x1D, 0xE7, 0x19, 0x00, 0x8E, 0x04, 0x03, 0x39, 0x6C, 0x38, 0x39, 0x1E, 0x07, 0x02, +/* 0000D990 */ 0x00, 0x59, 0x00, 0x39, 0x59, 0x01, 0x23, 0x1F, 0x02, 0xFF, 0x38, 0xEB, 0x09, 0x27, 0x00, 0xE9, +/* 0000D9A0 */ 0x27, 0x06, 0x8E, 0x04, 0x22, 0x38, 0x07, 0x02, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x27, 0x1F, +/* 0000D9B0 */ 0x02, 0xFF, 0x38, 0x8E, 0x04, 0x03, 0x39, 0x6C, 0x38, 0x39, 0x1F, 0x07, 0x01, 0x00, 0x59, 0x00, +/* 0000D9C0 */ 0x39, 0x1F, 0x01, 0xFF, 0x38, 0xEB, 0x5E, 0x38, 0x23, 0x20, 0x0F, 0x04, 0x00, 0x38, 0x76, 0x22, +/* 0000D9D0 */ 0x23, 0x21, 0x45, 0x38, 0x23, 0x8E, 0x04, 0x06, 0x39, 0x07, 0x03, 0x00, 0x59, 0x00, 0x04, 0x8E, +/* 0000D9E0 */ 0x04, 0x1E, 0x3A, 0x59, 0x01, 0x3A, 0x5E, 0x3A, 0x23, 0x22, 0x59, 0x02, 0x3A, 0x1F, 0x03, 0x39, +/* 0000D9F0 */ 0x39, 0x76, 0x39, 0x38, 0x23, 0x76, 0x06, 0x23, 0x24, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xAA, 0x02, +/* 0000DA00 */ 0xFE, 0x08, 0x02, 0xFE, 0xAB, 0x02, 0xFE, 0x08, 0x02, 0xFE, 0x21, 0x03, 0xFE, 0x25, 0x02, 0xFE, +/* 0000DA10 */ 0x48, 0x02, 0xFE, 0x45, 0x02, 0xFE, 0xB7, 0x02, 0xFE, 0xB8, 0x02, 0xFE, 0xFB, 0x01, 0xFE, 0xB7, +/* 0000DA20 */ 0x02, 0xFE, 0xFE, 0x00, 0xFE, 0xFE, 0x00, 0xFE, 0xFE, 0x00, 0xFE, 0xC5, 0x04, 0xFE, 0x0D, 0x02, +/* 0000DA30 */ 0xFE, 0x09, 0x02, 0xFE, 0x64, 0x02, 0xFE, 0x33, 0x02, 0xFE, 0x34, 0x02, 0xFE, 0x26, 0x02, 0xFE, +/* 0000DA40 */ 0x35, 0x02, 0xFE, 0x3B, 0x02, 0xFE, 0x3A, 0x02, 0xFE, 0x38, 0x02, 0xFE, 0x3C, 0x02, 0xFE, 0x39, +/* 0000DA50 */ 0x02, 0xFE, 0x36, 0x02, 0xFE, 0x3F, 0x02, 0xFE, 0xF9, 0x01, 0xFE, 0xAD, 0x02, 0xFE, 0x3D, 0x02, +/* 0000DA60 */ 0xFE, 0x3D, 0x02, 0xFE, 0x3D, 0x02, 0xFE, 0x3D, 0x02, 0xFE, 0x37, 0x02, 0xFF, 0x9E, 0x07, 0x02, +/* 0000DA70 */ 0x00, 0x46, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3B, 0x00, 0x12, 0x00, 0x3F, 0x00, 0x27, 0x00, +/* 0000DA80 */ 0x9B, 0x00, 0x18, 0x00, 0x6D, 0x00, 0x04, 0x00, 0x61, 0x00, 0x0B, 0x00, 0x3A, 0x00, 0x1C, 0x00, +/* 0000DA90 */ 0x4F, 0x00, 0x18, 0x00, 0x49, 0x00, 0x2D, 0x00, 0x71, 0x00, 0x31, 0x00, 0x73, 0x00, 0x0F, 0x00, +/* 0000DAA0 */ 0x49, 0x00, 0x26, 0x00, 0x5F, 0x00, 0x31, 0x00, 0x7D, 0x00, 0x05, 0x00, 0x31, 0x00, 0x22, 0x00, +/* 0000DAB0 */ 0x67, 0x00, 0x05, 0x00, 0x37, 0x00, 0x05, 0x00, 0x37, 0x00, 0x05, 0x00, 0x3F, 0x00, 0x07, 0x00, +/* 0000DAC0 */ 0x51, 0x00, 0x07, 0x00, 0x52, 0x00, 0x13, 0x00, 0x7E, 0x00, 0x22, 0x00, 0x6F, 0x00, 0x22, 0x00, +/* 0000DAD0 */ 0x96, 0x00, 0x24, 0x00, 0x9A, 0x00, 0x16, 0x00, 0x41, 0x00, 0x28, 0x00, 0xA2, 0x00, 0x22, 0x00, +/* 0000DAE0 */ 0x62, 0x00, 0x26, 0x00, 0x58, 0x00, 0x08, 0x00, 0x30, 0x00, 0x0B, 0x00, 0x3F, 0x00, 0x12, 0x00, +/* 0000DAF0 */ 0x4F, 0x00, 0x1E, 0x00, 0x74, 0x00, 0x1E, 0x00, 0x4A, 0x00, 0x01, 0x00, 0x24, 0x00, 0x11, 0x00, +/* 0000DB00 */ 0x2E, 0x00, 0x27, 0x00, 0x5F, 0x00, 0x22, 0x00, 0x76, 0x00, 0x1E, 0x00, 0x7D, 0x00, 0x05, 0x00, +/* 0000DB10 */ 0x2A, 0x00, 0x05, 0x00, 0x31, 0x00, 0x22, 0x00, 0x69, 0x00, 0x08, 0x00, 0x33, 0x00, 0x1E, 0x00, +/* 0000DB20 */ 0x78, 0x00, 0x1B, 0x00, 0x7B, 0x00, 0x22, 0x00, 0xC6, 0x00, 0x04, 0x00, 0x38, 0x00, 0x08, 0x00, +/* 0000DB30 */ 0x43, 0x00, 0x04, 0x00, 0x2F, 0x00, 0x0A, 0x00, 0x32, 0x00, 0x04, 0x00, 0x47, 0x00, 0x0A, 0x00, +/* 0000DB40 */ 0x39, 0x00, 0x04, 0x00, 0x46, 0x00, 0x10, 0x00, 0x80, 0x00, 0x04, 0x00, 0x4C, 0x00, 0x04, 0x00, +/* 0000DB50 */ 0x4E, 0x00, 0x04, 0x00, 0x4F, 0x00, 0x0A, 0x00, 0x42, 0x00, 0x04, 0x00, 0x58, 0x00, 0x04, 0x00, +/* 0000DB60 */ 0x67, 0x00, 0x04, 0x00, 0x40, 0x00, 0x07, 0x00, 0xA9, 0x00, 0x1B, 0x00, 0x3C, 0x00, 0x01, 0x00, +/* 0000DB70 */ 0x20, 0x00, 0x11, 0x00, 0x6B, 0x01, 0x13, 0x00, 0x4A, 0x00, 0x08, 0x00, 0x3B, 0x00, 0x04, 0x00, +/* 0000DB80 */ 0x70, 0x00, 0x23, 0x00, 0x7E, 0x00, 0x06, 0x00, 0x3B, 0x00, 0x00, 0x7E, 0x5C, 0x00, 0xC1, 0x53, +/* 0000DB90 */ 0x50, 0x4B, 0x04, 0xFE, 0x88, 0x0A, 0x14, 0xA0, 0x41, 0xD1, 0x00, 0xA2, 0xFF, 0xF3, 0xD5, 0x01, +/* 0000DBA0 */ 0x00, 0xFF, 0xF3, 0xD5, 0x01, 0x00, 0x06, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFF, 0xF3, 0xD5, 0x01, +/* 0000DBB0 */ 0x00, 0xFE, 0xA8, 0x30, 0xFE, 0xA8, 0x30, 0x0B, 0x16, 0x1A, 0x09, 0x9B, 0x9B, 0x02, 0x09, 0x1A, +/* 0000DBC0 */ 0x1A, 0x1A, 0x1A, 0x05, 0x02, 0x19, 0x1A, 0x08, 0x06, 0xFE, 0x27, 0x03, 0x06, 0xFE, 0xE8, 0x03, +/* 0000DBD0 */ 0x05, 0xFE, 0xE9, 0x03, 0x05, 0xFE, 0xEA, 0x03, 0x05, 0xFE, 0xEB, 0x03, 0x06, 0xFE, 0x38, 0x03, +/* 0000DBE0 */ 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, 0x2B, 0x03, 0x0B, 0x06, 0xFE, 0x2D, 0x03, 0x07, 0x06, 0xFE, +/* 0000DBF0 */ 0xEC, 0x03, 0x0C, 0x06, 0xFE, 0x2C, 0x03, 0x06, 0xFE, 0xED, 0x03, 0x06, 0xFE, 0xEE, 0x03, 0x06, +/* 0000DC00 */ 0xFE, 0xF1, 0x03, 0x06, 0xFE, 0x77, 0x03, 0x05, 0xFE, 0xF0, 0x03, 0xFE, 0x65, 0x02, 0xA8, 0x16, +/* 0000DC10 */ 0xA8, 0x17, 0xA8, 0x18, 0x8E, 0x02, 0x32, 0x1C, 0x14, 0x0C, 0x00, 0x1C, 0x03, 0x8E, 0x02, 0x32, +/* 0000DC20 */ 0x1C, 0x14, 0x03, 0x00, 0x1C, 0x04, 0x09, 0x41, 0x02, 0xE0, 0x00, 0x03, 0x01, 0xB9, 0x1C, 0x00, +/* 0000DC30 */ 0x01, 0x66, 0x01, 0x00, 0x16, 0x1C, 0x95, 0x00, 0x02, 0x16, 0x8E, 0x02, 0x03, 0x1D, 0x6C, 0x1C, +/* 0000DC40 */ 0x1D, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x1D, 0x8E, 0x02, 0x23, 0x1E, 0x07, 0x03, 0x00, 0x59, +/* 0000DC50 */ 0x00, 0x02, 0x59, 0x01, 0x05, 0xB9, 0x20, 0x00, 0x01, 0x66, 0x01, 0x01, 0x1F, 0x20, 0x59, 0x02, +/* 0000DC60 */ 0x1F, 0x1F, 0x03, 0x1E, 0x1E, 0x59, 0x01, 0x1E, 0x8E, 0x02, 0x03, 0x1E, 0x5E, 0x1E, 0x1E, 0x01, +/* 0000DC70 */ 0x5E, 0x1E, 0x1E, 0x02, 0x59, 0x02, 0x1E, 0x1F, 0x03, 0xFF, 0x1C, 0x8E, 0x02, 0x32, 0x1C, 0x14, +/* 0000DC80 */ 0x03, 0x00, 0x1C, 0x03, 0x09, 0xE3, 0x01, 0xE0, 0x01, 0x04, 0x02, 0xB9, 0x1C, 0x00, 0xB8, 0x01, +/* 0000DC90 */ 0x00, 0x00, 0x00, 0x1C, 0x1C, 0x01, 0x66, 0x01, 0x02, 0x17, 0x1C, 0x95, 0x01, 0x02, 0x17, 0x01, +/* 0000DCA0 */ 0x66, 0x01, 0x03, 0x18, 0x1C, 0x95, 0x01, 0x03, 0x18, 0x8E, 0x02, 0x23, 0x1C, 0x07, 0x03, 0x00, +/* 0000DCB0 */ 0x59, 0x00, 0x02, 0x59, 0x01, 0x06, 0x90, 0x01, 0x02, 0x1D, 0x59, 0x02, 0x1D, 0x1F, 0x03, 0xFF, +/* 0000DCC0 */ 0x1C, 0x8E, 0x02, 0x23, 0x1C, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x07, 0x90, 0x01, +/* 0000DCD0 */ 0x03, 0x1D, 0x59, 0x02, 0x1D, 0x1F, 0x03, 0xFF, 0x1C, 0x8E, 0x02, 0x16, 0x1C, 0x07, 0x04, 0x00, +/* 0000DCE0 */ 0x59, 0x00, 0x02, 0x90, 0x01, 0x02, 0x1D, 0x59, 0x01, 0x1D, 0x59, 0x02, 0x08, 0xCE, 0x00, 0x00, +/* 0000DCF0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0x8E, 0x01, 0x13, 0x1E, 0x4A, 0x1E, +/* 0000DD00 */ 0x7A, 0x1E, 0x1D, 0x03, 0x7A, 0x0B, 0x1D, 0x04, 0x7A, 0x0B, 0x1D, 0x05, 0x59, 0x03, 0x1D, 0x1F, +/* 0000DD10 */ 0x04, 0xFF, 0x1C, 0x8E, 0x02, 0x16, 0x1C, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x90, 0x01, 0x02, +/* 0000DD20 */ 0x1D, 0x59, 0x01, 0x1D, 0x59, 0x02, 0x0E, 0xCE, 0x14, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, +/* 0000DD30 */ 0x1D, 0x00, 0x00, 0x00, 0x90, 0x01, 0x02, 0x1E, 0x07, 0x01, 0x00, 0xC4, 0x01, 0x1E, 0x1E, 0x7A, +/* 0000DD40 */ 0x1E, 0x1D, 0x06, 0x7A, 0x0F, 0x1D, 0x07, 0x7A, 0x0F, 0x1D, 0x08, 0x7A, 0x0F, 0x1D, 0x09, 0x59, +/* 0000DD50 */ 0x03, 0x1D, 0x1F, 0x04, 0xFF, 0x1C, 0x8E, 0x02, 0x04, 0x1C, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, +/* 0000DD60 */ 0x90, 0x01, 0x02, 0x1D, 0x5E, 0x1D, 0x1D, 0x0A, 0x59, 0x01, 0x1D, 0x8E, 0x02, 0x09, 0x1D, 0x5E, +/* 0000DD70 */ 0x1D, 0x1D, 0x0B, 0x59, 0x02, 0x1D, 0x1F, 0x03, 0xFF, 0x1C, 0x8E, 0x02, 0x16, 0x1C, 0x07, 0x04, +/* 0000DD80 */ 0x00, 0x59, 0x00, 0x02, 0x90, 0x01, 0x02, 0x1D, 0x5E, 0x1D, 0x1D, 0x0C, 0x59, 0x01, 0x1D, 0x59, +/* 0000DD90 */ 0x02, 0x11, 0xCE, 0x2C, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0x90, +/* 0000DDA0 */ 0x01, 0x02, 0x1E, 0x7A, 0x1E, 0x1D, 0x0D, 0x7A, 0x0B, 0x1D, 0x0E, 0x7A, 0x0F, 0x1D, 0x0F, 0x7A, +/* 0000DDB0 */ 0x0B, 0x1D, 0x10, 0x59, 0x03, 0x1D, 0x1F, 0x04, 0xFF, 0x1C, 0x8E, 0x02, 0x16, 0x1C, 0x07, 0x04, +/* 0000DDC0 */ 0x00, 0x59, 0x00, 0x02, 0x90, 0x01, 0x02, 0x1D, 0x5E, 0x1D, 0x1D, 0x11, 0x59, 0x01, 0x1D, 0x59, +/* 0000DDD0 */ 0x02, 0x12, 0xCE, 0x44, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0xB9, +/* 0000DDE0 */ 0x1F, 0x00, 0xB8, 0x01, 0x00, 0x00, 0x00, 0x1F, 0x1F, 0x01, 0x6A, 0x01, 0x04, 0x1E, 0x1F, 0x1D, +/* 0000DDF0 */ 0x7A, 0x1E, 0x1D, 0x12, 0x7A, 0x0B, 0x1D, 0x13, 0x7A, 0x0F, 0x1D, 0x14, 0x7A, 0x0B, 0x1D, 0x15, +/* 0000DE00 */ 0x59, 0x03, 0x1D, 0x1F, 0x04, 0xFF, 0x1C, 0x8E, 0x02, 0x16, 0x1C, 0x07, 0x04, 0x00, 0x59, 0x00, +/* 0000DE10 */ 0x02, 0x90, 0x01, 0x02, 0x1D, 0x5E, 0x1D, 0x1D, 0x16, 0x59, 0x01, 0x1D, 0x59, 0x02, 0x13, 0xCE, +/* 0000DE20 */ 0x5C, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0x8E, 0x02, 0x23, 0x1E, +/* 0000DE30 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x15, 0xB9, 0x20, 0x00, 0xB8, 0x01, 0x00, 0x00, +/* 0000DE40 */ 0x00, 0x20, 0x20, 0x01, 0x66, 0x01, 0x05, 0x1F, 0x20, 0x59, 0x02, 0x1F, 0x1F, 0x03, 0x1E, 0x1E, +/* 0000DE50 */ 0x7A, 0x1E, 0x1D, 0x17, 0x7A, 0x0F, 0x1D, 0x18, 0x7A, 0x0B, 0x1D, 0x19, 0x59, 0x03, 0x1D, 0x1F, +/* 0000DE60 */ 0x04, 0xFF, 0x1C, 0x90, 0x01, 0x02, 0x00, 0x09, 0x07, 0x00, 0xA8, 0x00, 0x09, 0x02, 0x00, 0xA8, +/* 0000DE70 */ 0x00, 0x24, 0x00, 0x05, 0x70, 0x00, 0x5C, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, +/* 0000DE80 */ 0x00, 0x00, 0x98, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x44, 0x00, +/* 0000DE90 */ 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, +/* 0000DEA0 */ 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x2C, 0x00, 0x00, 0x00, 0x03, 0x04, +/* 0000DEB0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, +/* 0000DEC0 */ 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, +/* 0000DED0 */ 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, +/* 0000DEE0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, +/* 0000DEF0 */ 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0xFE, 0x04, 0x02, 0xFE, 0x2F, 0x02, +/* 0000DF00 */ 0xFE, 0x2E, 0x02, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x97, 0x01, 0xFE, +/* 0000DF10 */ 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x24, 0x01, 0xFE, 0x24, 0x01, 0xFE, 0x24, +/* 0000DF20 */ 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x24, 0x01, +/* 0000DF30 */ 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x24, 0x01, 0xFE, +/* 0000DF40 */ 0x98, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0x02, 0x01, 0x01, 0x00, 0xFE, 0xE5, 0x03, 0x02, +/* 0000DF50 */ 0x02, 0x00, 0xFE, 0x4B, 0x02, 0x01, 0xFE, 0x4F, 0x02, 0xFF, 0x0A, 0xD6, 0x01, 0x00, 0x0E, 0x06, +/* 0000DF60 */ 0x00, 0x00, 0x00, 0x26, 0x00, 0x1F, 0x17, 0x41, 0x00, 0x17, 0x05, 0x2E, 0x00, 0x7A, 0x04, 0x18, +/* 0000DF70 */ 0x00, 0x55, 0x04, 0x18, 0x00, 0x50, 0x00, 0x3A, 0x00, 0x93, 0x00, 0x43, 0x00, 0x91, 0x00, 0x24, +/* 0000DF80 */ 0x00, 0x45, 0x00, 0x40, 0x00, 0x96, 0x00, 0x4D, 0x00, 0xA7, 0x05, 0x5C, 0x00, 0x03, 0x03, 0x07, +/* 0000DF90 */ 0x00, 0x7C, 0x00, 0x07, 0x00, 0x16, 0x00, 0x00, 0x47, 0xE7, 0x00, 0x00, 0x95, 0xE5, 0x00, 0x00, +/* 0000DFA0 */ 0xC7, 0xE3, 0x00, 0x00, 0x37, 0xE2, 0x00, 0x00, 0x97, 0xE0, 0x00, 0x00, 0xB0, 0xDF, 0x00, 0x00, +/* 0000DFB0 */ 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x65, 0x0B, 0x3A, 0xA0, 0x41, 0xD1, 0x00, +/* 0000DFC0 */ 0xA9, 0xFF, 0x75, 0x03, 0x02, 0x00, 0xFF, 0x75, 0x03, 0x02, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x01, +/* 0000DFD0 */ 0x01, 0xFF, 0x75, 0x03, 0x02, 0x00, 0xFE, 0x45, 0x02, 0xFE, 0x45, 0x02, 0x05, 0x05, 0x08, 0x04, +/* 0000DFE0 */ 0x22, 0x21, 0x04, 0x01, 0x05, 0x05, 0x05, 0x05, 0x07, 0x06, 0xFE, 0x94, 0x03, 0x05, 0xFE, 0x09, +/* 0000DFF0 */ 0x04, 0x06, 0xFE, 0x2E, 0x03, 0x6F, 0x58, 0x05, 0x2A, 0x08, 0x05, 0x15, 0x03, 0x00, 0x08, 0x02, +/* 0000E000 */ 0x09, 0x18, 0x00, 0x8E, 0x04, 0x03, 0x09, 0x6C, 0x08, 0x09, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 0000E010 */ 0x09, 0x59, 0x01, 0x03, 0x59, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x08, 0x8E, 0x04, 0x03, 0x09, 0x6C, +/* 0000E020 */ 0x08, 0x09, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x09, 0x59, 0x01, 0x05, 0x1F, 0x02, 0x08, 0x08, +/* 0000E030 */ 0x45, 0x06, 0x08, 0xA8, 0x08, 0x14, 0x08, 0x00, 0x06, 0x08, 0x5E, 0x08, 0x06, 0x02, 0x0F, 0x18, +/* 0000E040 */ 0x00, 0x08, 0x8E, 0x04, 0x03, 0x09, 0x6C, 0x08, 0x09, 0x03, 0x07, 0x03, 0x00, 0x59, 0x00, 0x09, +/* 0000E050 */ 0x59, 0x01, 0x03, 0x59, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x08, 0x5E, 0x00, 0x06, 0x04, 0x09, 0x02, +/* 0000E060 */ 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB6, 0x02, 0xFE, 0x05, 0x02, 0xFE, 0x4E, 0x02, 0xFE, 0xB6, +/* 0000E070 */ 0x02, 0xFE, 0x4C, 0x02, 0xFF, 0x9B, 0x03, 0x02, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x0B, 0x00, +/* 0000E080 */ 0x3C, 0x00, 0x18, 0x00, 0x7D, 0x00, 0x18, 0x00, 0x4B, 0x00, 0x0F, 0x00, 0x65, 0x00, 0x18, 0x00, +/* 0000E090 */ 0x7D, 0x00, 0x09, 0x00, 0x38, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x13, 0x10, 0x47, 0x00, 0xFE, +/* 0000E0A0 */ 0x4F, 0x0B, 0x1B, 0xA0, 0x41, 0xC3, 0x00, 0xFE, 0xEE, 0x03, 0xA8, 0xFF, 0x00, 0x00, 0x00, 0x02, +/* 0000E0B0 */ 0xFF, 0xB7, 0xFD, 0x01, 0x00, 0xFF, 0xB7, 0xFD, 0x01, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x01, 0x01, +/* 0000E0C0 */ 0xFF, 0xB7, 0xFD, 0x01, 0x00, 0xFE, 0xF1, 0x04, 0xFE, 0xF1, 0x04, 0x05, 0x0D, 0x10, 0x04, 0x30, +/* 0000E0D0 */ 0x2F, 0x04, 0x01, 0x12, 0x12, 0x12, 0x12, 0x01, 0x0F, 0x06, 0xFE, 0x94, 0x03, 0x05, 0xFE, 0x0A, +/* 0000E0E0 */ 0x04, 0x06, 0xFE, 0x2E, 0x03, 0x06, 0xFE, 0xD7, 0x03, 0x06, 0xFE, 0xF2, 0x03, 0x06, 0xFE, 0xFE, +/* 0000E0F0 */ 0x03, 0x06, 0xFE, 0x03, 0x04, 0x06, 0xFE, 0x05, 0x04, 0x06, 0xFE, 0xF8, 0x03, 0x06, 0xFE, 0xF9, +/* 0000E100 */ 0x03, 0x07, 0xB0, 0x58, 0x0D, 0x2A, 0x10, 0x0D, 0x15, 0x03, 0x00, 0x10, 0x02, 0x09, 0x18, 0x00, +/* 0000E110 */ 0x8E, 0x04, 0x03, 0x11, 0x6C, 0x10, 0x11, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x11, 0x59, 0x01, +/* 0000E120 */ 0x03, 0x59, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x10, 0x8E, 0x04, 0x03, 0x11, 0x6C, 0x10, 0x11, 0x01, +/* 0000E130 */ 0x07, 0x02, 0x00, 0x59, 0x00, 0x11, 0x59, 0x01, 0x0D, 0x1F, 0x02, 0x10, 0x10, 0x45, 0x0E, 0x10, +/* 0000E140 */ 0xA8, 0x10, 0x14, 0x08, 0x00, 0x0E, 0x10, 0x5E, 0x10, 0x0E, 0x02, 0x0F, 0x18, 0x00, 0x10, 0x8E, +/* 0000E150 */ 0x04, 0x03, 0x11, 0x6C, 0x10, 0x11, 0x03, 0x07, 0x03, 0x00, 0x59, 0x00, 0x11, 0x59, 0x01, 0x03, +/* 0000E160 */ 0x59, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x10, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0000E170 */ 0x00, 0x00, 0x00, 0x00, 0x5E, 0x10, 0x0E, 0x04, 0x7A, 0x10, 0x00, 0x05, 0x5E, 0x10, 0x0E, 0x06, +/* 0000E180 */ 0x7A, 0x10, 0x00, 0x07, 0x5E, 0x10, 0x0E, 0x08, 0x7A, 0x10, 0x00, 0x09, 0x5E, 0x10, 0x0E, 0x0A, +/* 0000E190 */ 0x7A, 0x10, 0x00, 0x0B, 0x5E, 0x10, 0x0E, 0x0C, 0x7A, 0x10, 0x00, 0x0D, 0x5E, 0x10, 0x0E, 0x0E, +/* 0000E1A0 */ 0x7A, 0x10, 0x00, 0x0F, 0x5E, 0x10, 0x0E, 0x10, 0x7A, 0x10, 0x00, 0x11, 0x09, 0x02, 0x00, 0xA8, +/* 0000E1B0 */ 0x00, 0x24, 0x00, 0x01, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, +/* 0000E1C0 */ 0x00, 0x00, 0x0D, 0x02, 0x00, 0x00, 0x55, 0x02, 0x00, 0x00, 0x52, 0x02, 0x00, 0x00, 0x50, 0x02, +/* 0000E1D0 */ 0x00, 0x00, 0x05, 0x04, 0x00, 0x00, 0x51, 0x02, 0x00, 0x00, 0xF9, 0x03, 0x00, 0x00, 0xFE, 0xB6, +/* 0000E1E0 */ 0x02, 0xFE, 0x05, 0x02, 0xFE, 0x4E, 0x02, 0xFE, 0xB6, 0x02, 0xFE, 0x09, 0x02, 0xFE, 0x0D, 0x02, +/* 0000E1F0 */ 0xFE, 0xBE, 0x04, 0xFE, 0x55, 0x02, 0xFE, 0xBF, 0x04, 0xFE, 0x52, 0x02, 0xFE, 0xC0, 0x04, 0xFE, +/* 0000E200 */ 0x50, 0x02, 0xFE, 0x4D, 0x02, 0xFE, 0x05, 0x04, 0xFE, 0xC2, 0x04, 0xFE, 0x51, 0x02, 0xFE, 0xC1, +/* 0000E210 */ 0x04, 0xFE, 0xF9, 0x03, 0xFF, 0xEC, 0xFD, 0x01, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x0B, 0x00, +/* 0000E220 */ 0x3C, 0x00, 0x18, 0x00, 0x84, 0x00, 0x18, 0x00, 0x4B, 0x00, 0x0F, 0x00, 0x65, 0x00, 0x18, 0x00, +/* 0000E230 */ 0x85, 0x00, 0x4A, 0x00, 0xC6, 0x02, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, +/* 0000E240 */ 0x2E, 0x0B, 0x10, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0xF1, 0x03, 0xA7, 0xFF, 0xF9, 0xF6, 0x01, 0x00, +/* 0000E250 */ 0xFF, 0xF9, 0xF6, 0x01, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFF, 0xF9, 0xF6, 0x01, 0x00, +/* 0000E260 */ 0xFE, 0x05, 0x04, 0xFE, 0x05, 0x04, 0x0A, 0x06, 0x0B, 0x0C, 0x49, 0x46, 0x04, 0x03, 0x0C, 0x0C, +/* 0000E270 */ 0x0C, 0x0C, 0x0A, 0x06, 0xFE, 0x94, 0x03, 0x05, 0xFE, 0x09, 0x04, 0x06, 0xFE, 0x2E, 0x03, 0x08, +/* 0000E280 */ 0xF7, 0x58, 0x08, 0x2A, 0x0B, 0x08, 0x15, 0x03, 0x00, 0x0B, 0x02, 0x09, 0x18, 0x00, 0x8E, 0x04, +/* 0000E290 */ 0x03, 0x0C, 0x6C, 0x0B, 0x0C, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0C, 0x59, 0x01, 0x03, 0x59, +/* 0000E2A0 */ 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x0B, 0x8E, 0x04, 0x03, 0x0C, 0x6C, 0x0B, 0x0C, 0x01, 0x07, 0x02, +/* 0000E2B0 */ 0x00, 0x59, 0x00, 0x0C, 0x59, 0x01, 0x08, 0x1F, 0x02, 0x0B, 0x0B, 0x45, 0x09, 0x0B, 0xA8, 0x0B, +/* 0000E2C0 */ 0x14, 0x08, 0x00, 0x09, 0x0B, 0x5E, 0x0B, 0x09, 0x02, 0x0F, 0x18, 0x00, 0x0B, 0x8E, 0x04, 0x03, +/* 0000E2D0 */ 0x0C, 0x6C, 0x0B, 0x0C, 0x03, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0C, 0x59, 0x01, 0x03, 0x59, 0x02, +/* 0000E2E0 */ 0x04, 0x1F, 0x03, 0xFF, 0x0B, 0x8E, 0x04, 0x0C, 0x0B, 0x07, 0x02, 0x00, 0x59, 0x00, 0x05, 0x59, +/* 0000E2F0 */ 0x01, 0x06, 0x1F, 0x02, 0x0B, 0x0B, 0x45, 0x06, 0x0B, 0x8E, 0x04, 0x0C, 0x0B, 0x07, 0x02, 0x00, +/* 0000E300 */ 0x59, 0x00, 0x05, 0x59, 0x01, 0x07, 0x1F, 0x02, 0x0B, 0x0B, 0x45, 0x07, 0x0B, 0x8E, 0x04, 0x0B, +/* 0000E310 */ 0x0B, 0x07, 0x02, 0x00, 0x59, 0x00, 0x05, 0x8E, 0x04, 0x03, 0x0D, 0x6C, 0x0C, 0x0D, 0x04, 0x07, +/* 0000E320 */ 0x08, 0x00, 0x59, 0x00, 0x0D, 0x59, 0x01, 0x06, 0x59, 0x02, 0x07, 0x5E, 0x0E, 0x09, 0x05, 0x59, +/* 0000E330 */ 0x03, 0x0E, 0x8E, 0x04, 0x03, 0x0E, 0x5E, 0x0E, 0x0E, 0x06, 0x5E, 0x0F, 0x09, 0x07, 0x97, 0x0E, +/* 0000E340 */ 0x0E, 0x0F, 0x59, 0x04, 0x0E, 0x5E, 0x0E, 0x09, 0x08, 0x59, 0x05, 0x0E, 0x5E, 0x0E, 0x09, 0x09, +/* 0000E350 */ 0x59, 0x06, 0x0E, 0x8E, 0x04, 0x03, 0x0E, 0x5E, 0x0E, 0x0E, 0x0A, 0x5E, 0x0F, 0x09, 0x0B, 0x97, +/* 0000E360 */ 0x0E, 0x0E, 0x0F, 0x59, 0x07, 0x0E, 0x1F, 0x08, 0x0C, 0x0C, 0x59, 0x01, 0x0C, 0x1F, 0x02, 0x00, +/* 0000E370 */ 0x0B, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB6, 0x02, 0xFE, 0x05, 0x02, 0xFE, 0x4E, +/* 0000E380 */ 0x02, 0xFE, 0xB6, 0x02, 0xFE, 0xF7, 0x01, 0xFE, 0xBD, 0x04, 0xFE, 0x27, 0x02, 0xFE, 0xBF, 0x04, +/* 0000E390 */ 0xFE, 0xC0, 0x04, 0xFE, 0xC2, 0x04, 0xFE, 0x28, 0x02, 0xFE, 0xC1, 0x04, 0xFF, 0x26, 0xF7, 0x01, +/* 0000E3A0 */ 0x00, 0x09, 0x02, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x38, 0x00, 0x18, 0x00, 0x75, 0x00, 0x18, 0x00, +/* 0000E3B0 */ 0x47, 0x00, 0x0F, 0x00, 0x61, 0x00, 0x18, 0x00, 0x75, 0x00, 0x14, 0x00, 0x23, 0x00, 0x14, 0x00, +/* 0000E3C0 */ 0x24, 0x00, 0x69, 0x00, 0xC6, 0x01, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, +/* 0000E3D0 */ 0x13, 0x0B, 0x10, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x2E, 0x03, 0xA6, 0xFF, 0x6C, 0xF2, 0x01, 0x00, +/* 0000E3E0 */ 0xFF, 0x6C, 0xF2, 0x01, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x03, 0x01, 0xFF, 0x6C, 0xF2, 0x01, 0x00, +/* 0000E3F0 */ 0xFE, 0x3D, 0x04, 0xFE, 0x3D, 0x04, 0x09, 0x05, 0x0B, 0x05, 0x5E, 0x57, 0x04, 0x0A, 0x06, 0x06, +/* 0000E400 */ 0x06, 0x06, 0x0A, 0x08, 0x06, 0xFE, 0x2E, 0x03, 0x07, 0xFE, 0x30, 0x01, 0x58, 0x07, 0x4E, 0x08, +/* 0000E410 */ 0x4E, 0x09, 0x15, 0x05, 0x00, 0x05, 0x02, 0xA8, 0x0B, 0x45, 0x05, 0x0B, 0x15, 0x05, 0x00, 0x06, +/* 0000E420 */ 0x02, 0xA8, 0x0B, 0x45, 0x06, 0x0B, 0x4E, 0x08, 0x4E, 0x09, 0x8E, 0x04, 0x07, 0x0B, 0x14, 0x0A, +/* 0000E430 */ 0x00, 0x07, 0x0B, 0xA8, 0x0B, 0x14, 0x03, 0x00, 0x07, 0x0B, 0x09, 0x16, 0x00, 0x8E, 0x01, 0x02, +/* 0000E440 */ 0x0B, 0x4A, 0x0B, 0x07, 0x03, 0x00, 0x59, 0x01, 0x05, 0x59, 0x02, 0x06, 0xC4, 0x03, 0x00, 0x0B, +/* 0000E450 */ 0x09, 0xE7, 0x00, 0x8E, 0x04, 0x24, 0x0C, 0x6C, 0x0B, 0x0C, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 0000E460 */ 0x0C, 0x59, 0x01, 0x07, 0x1F, 0x02, 0x0B, 0x0B, 0x45, 0x08, 0x0B, 0x8E, 0x04, 0x12, 0x0B, 0x07, +/* 0000E470 */ 0x02, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x08, 0x1F, 0x02, 0x0B, 0x0B, 0x0F, 0x15, 0x00, 0x0B, +/* 0000E480 */ 0x8E, 0x04, 0x03, 0x0C, 0x6C, 0x0B, 0x0C, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0C, 0x59, 0x01, +/* 0000E490 */ 0x03, 0x1F, 0x02, 0xFF, 0x0B, 0x8E, 0x04, 0x03, 0x0C, 0x6C, 0x0B, 0x0C, 0x02, 0x07, 0x02, 0x00, +/* 0000E4A0 */ 0x59, 0x00, 0x0C, 0x59, 0x01, 0x08, 0x1F, 0x02, 0x0B, 0x0B, 0x45, 0x09, 0x0B, 0xA8, 0x0B, 0x14, +/* 0000E4B0 */ 0x03, 0x00, 0x09, 0x0B, 0x09, 0x31, 0x00, 0x8E, 0x04, 0x04, 0x0B, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 0000E4C0 */ 0x02, 0xCD, 0x0C, 0x59, 0x01, 0x0C, 0x59, 0x02, 0x04, 0x1F, 0x03, 0x0B, 0x0B, 0x45, 0x09, 0x0B, +/* 0000E4D0 */ 0x8E, 0x04, 0x03, 0x0C, 0x6C, 0x0B, 0x0C, 0x03, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0C, 0x59, 0x01, +/* 0000E4E0 */ 0x08, 0x59, 0x02, 0x09, 0x1F, 0x03, 0xFF, 0x0B, 0x8E, 0x02, 0x02, 0x0B, 0x4A, 0x0B, 0x07, 0x04, +/* 0000E4F0 */ 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x09, 0x59, 0x02, 0x05, 0x59, 0x03, 0x06, 0x1F, 0x04, 0xFF, +/* 0000E500 */ 0x0B, 0x45, 0x0B, 0x09, 0x8E, 0x04, 0x06, 0x0C, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x8E, 0x04, +/* 0000E510 */ 0x1A, 0x0D, 0x59, 0x01, 0x0D, 0x8E, 0x01, 0x03, 0x0D, 0x4A, 0x0D, 0x59, 0x02, 0x0D, 0x59, 0x03, +/* 0000E520 */ 0x08, 0x1F, 0x04, 0x0C, 0x0C, 0x76, 0x0C, 0x0B, 0x04, 0x5E, 0x0B, 0x09, 0x05, 0x82, 0x0B, 0x0B, +/* 0000E530 */ 0x06, 0x01, 0x45, 0x00, 0x08, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x21, 0x03, 0xFE, +/* 0000E540 */ 0xB2, 0x02, 0xFE, 0x05, 0x02, 0xFE, 0x06, 0x02, 0xFE, 0x4C, 0x02, 0xFE, 0x4C, 0x02, 0xFF, 0x7E, +/* 0000E550 */ 0xF2, 0x01, 0x00, 0x10, 0x06, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0E, 0x00, 0x2B, 0x00, +/* 0000E560 */ 0x13, 0x00, 0x43, 0x00, 0x16, 0x00, 0x52, 0x00, 0x18, 0x00, 0x37, 0x00, 0x15, 0x00, 0x38, 0x00, +/* 0000E570 */ 0x15, 0x00, 0x97, 0x00, 0x18, 0x00, 0x47, 0x00, 0x0A, 0x00, 0x3A, 0x00, 0x19, 0x00, 0x3F, 0x00, +/* 0000E580 */ 0x18, 0x00, 0x58, 0x00, 0x19, 0x00, 0x76, 0x00, 0x28, 0x00, 0x68, 0x00, 0x09, 0x00, 0x3D, 0x00, +/* 0000E590 */ 0x08, 0x00, 0x1C, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0xF9, 0x0A, +/* 0000E5A0 */ 0x61, 0xA0, 0x41, 0xF1, 0x00, 0xA5, 0xFF, 0x7E, 0xED, 0x01, 0x00, 0xFF, 0x7E, 0xED, 0x01, 0x00, +/* 0000E5B0 */ 0x0B, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFF, 0x7E, 0xED, 0x01, 0x00, 0xFE, 0x81, 0x04, 0xFE, 0x81, +/* 0000E5C0 */ 0x04, 0x0B, 0x08, 0x0E, 0x0C, 0x54, 0x50, 0x03, 0x05, 0x0A, 0x0A, 0x0A, 0x0A, 0x0D, 0x07, 0x01, +/* 0000E5D0 */ 0x00, 0x05, 0xFE, 0xE9, 0x03, 0x08, 0x01, 0x01, 0x01, 0x02, 0xFE, 0x19, 0x01, 0xB1, 0x08, 0x58, +/* 0000E5E0 */ 0x0A, 0x97, 0x0E, 0x08, 0x03, 0x45, 0x09, 0x0E, 0xA8, 0x0E, 0x14, 0x08, 0x00, 0x0A, 0x0E, 0x14, +/* 0000E5F0 */ 0x03, 0x00, 0x0A, 0x02, 0x09, 0x18, 0x00, 0x8E, 0x03, 0x03, 0x0F, 0x6C, 0x0E, 0x0F, 0x00, 0x07, +/* 0000E600 */ 0x02, 0x00, 0x59, 0x00, 0x0F, 0x59, 0x01, 0x04, 0x1F, 0x02, 0xFF, 0x0E, 0x09, 0x1A, 0x00, 0x14, +/* 0000E610 */ 0x03, 0x00, 0x09, 0x02, 0x09, 0x12, 0x00, 0x8E, 0x03, 0x03, 0x0F, 0x6C, 0x0E, 0x0F, 0x01, 0x07, +/* 0000E620 */ 0x01, 0x00, 0x59, 0x00, 0x0F, 0x1F, 0x01, 0xFF, 0x0E, 0x8E, 0x03, 0x0C, 0x0E, 0x07, 0x02, 0x00, +/* 0000E630 */ 0x59, 0x00, 0x05, 0x59, 0x01, 0x0A, 0x1F, 0x02, 0x0E, 0x0E, 0x45, 0x0B, 0x0E, 0x8E, 0x03, 0x0C, +/* 0000E640 */ 0x0E, 0x07, 0x02, 0x00, 0x59, 0x00, 0x05, 0x59, 0x01, 0x09, 0x1F, 0x02, 0x0E, 0x0E, 0x45, 0x09, +/* 0000E650 */ 0x0E, 0x8E, 0x03, 0x04, 0x0E, 0x07, 0x03, 0x00, 0x59, 0x00, 0x05, 0xCD, 0x0F, 0x59, 0x01, 0x0F, +/* 0000E660 */ 0x59, 0x02, 0x02, 0x1F, 0x03, 0x0E, 0x0E, 0x45, 0x0C, 0x0E, 0x8E, 0x01, 0x02, 0x0E, 0x4A, 0x0E, +/* 0000E670 */ 0x07, 0x04, 0x00, 0x59, 0x00, 0x05, 0x59, 0x01, 0x0C, 0x97, 0x0F, 0x08, 0x06, 0x59, 0x02, 0x0F, +/* 0000E680 */ 0x97, 0x0F, 0x08, 0x07, 0x59, 0x03, 0x0F, 0x1F, 0x04, 0xFF, 0x0E, 0x8E, 0x03, 0x0B, 0x0E, 0x07, +/* 0000E690 */ 0x02, 0x00, 0x59, 0x00, 0x05, 0x8E, 0x03, 0x03, 0x10, 0x6C, 0x0F, 0x10, 0x02, 0x07, 0x08, 0x00, +/* 0000E6A0 */ 0x59, 0x00, 0x10, 0x59, 0x01, 0x0B, 0x59, 0x02, 0x09, 0x5E, 0x11, 0x0C, 0x03, 0x59, 0x03, 0x11, +/* 0000E6B0 */ 0x8E, 0x03, 0x03, 0x11, 0x5E, 0x11, 0x11, 0x04, 0x5E, 0x12, 0x0C, 0x05, 0x97, 0x11, 0x11, 0x12, +/* 0000E6C0 */ 0x59, 0x04, 0x11, 0x5E, 0x11, 0x0C, 0x06, 0x59, 0x05, 0x11, 0x5E, 0x11, 0x0C, 0x07, 0x59, 0x06, +/* 0000E6D0 */ 0x11, 0x8E, 0x03, 0x03, 0x11, 0x5E, 0x11, 0x11, 0x08, 0x5E, 0x12, 0x0C, 0x09, 0x97, 0x11, 0x11, +/* 0000E6E0 */ 0x12, 0x59, 0x07, 0x11, 0x1F, 0x08, 0x0F, 0x0F, 0x59, 0x01, 0x0F, 0x1F, 0x02, 0x00, 0x0E, 0x09, +/* 0000E6F0 */ 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB0, 0x02, 0xFE, 0xAA, 0x02, 0xFE, 0xF7, 0x01, 0xFE, +/* 0000E700 */ 0xBD, 0x04, 0xFE, 0x27, 0x02, 0xFE, 0xBF, 0x04, 0xFE, 0xC0, 0x04, 0xFE, 0xC2, 0x04, 0xFE, 0x28, +/* 0000E710 */ 0x02, 0xFE, 0xC1, 0x04, 0xFF, 0x9C, 0xED, 0x01, 0x00, 0x0B, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, +/* 0000E720 */ 0x29, 0x00, 0x0F, 0x00, 0x3F, 0x00, 0x18, 0x00, 0x6D, 0x00, 0x08, 0x00, 0x29, 0x00, 0x12, 0x00, +/* 0000E730 */ 0xE2, 0x00, 0x14, 0x00, 0x2C, 0x00, 0x14, 0x00, 0x29, 0x00, 0x19, 0x00, 0x3A, 0x00, 0x21, 0x00, +/* 0000E740 */ 0x4D, 0x00, 0x69, 0x00, 0xA6, 0x01, 0x00, 0x7F, 0x5D, 0x00, 0xC1, 0x43, 0x5A, 0x0B, 0x00, 0xFE, +/* 0000E750 */ 0x8C, 0x0A, 0x0C, 0xB3, 0x41, 0xC1, 0x00, 0xFE, 0xE5, 0x03, 0xA3, 0xFF, 0x4B, 0xD6, 0x01, 0x00, +/* 0000E760 */ 0xFF, 0x4B, 0xD6, 0x01, 0x00, 0x01, 0x44, 0xFE, 0x00, 0x90, 0x04, 0x04, 0xFF, 0x4B, 0xD6, 0x01, +/* 0000E770 */ 0x00, 0xFE, 0xD0, 0x16, 0xFE, 0xD0, 0x16, 0x03, 0xFE, 0xF9, 0x03, 0xFE, 0x51, 0x02, 0xFE, 0x05, +/* 0000E780 */ 0x04, 0x15, 0x24, 0x35, 0x09, 0xFE, 0x10, 0x01, 0xFE, 0xFF, 0x00, 0x03, 0x10, 0x15, 0x15, 0x15, +/* 0000E790 */ 0x15, 0x01, 0x32, 0x33, 0x34, 0x35, 0x06, 0xFE, 0x94, 0x03, 0x06, 0xFE, 0xBA, 0x04, 0x08, 0x06, +/* 0000E7A0 */ 0xFE, 0x2E, 0x03, 0x0B, 0x06, 0xFE, 0xD6, 0x03, 0x07, 0x06, 0xFE, 0xE0, 0x03, 0x06, 0xFE, 0xA3, +/* 0000E7B0 */ 0x03, 0x05, 0xFE, 0x9C, 0x03, 0x05, 0xFE, 0xDF, 0x03, 0x06, 0xFE, 0xF2, 0x03, 0x06, 0xFE, 0xF3, +/* 0000E7C0 */ 0x03, 0x06, 0xFE, 0xF4, 0x03, 0x06, 0xFE, 0xFE, 0x03, 0x06, 0xFE, 0xFF, 0x03, 0x06, 0xFE, 0x00, +/* 0000E7D0 */ 0x04, 0x06, 0xFE, 0x01, 0x04, 0x06, 0xFE, 0x02, 0x04, 0x06, 0xFE, 0x03, 0x04, 0x06, 0xFE, 0xA2, +/* 0000E7E0 */ 0x03, 0x0C, 0x06, 0xFE, 0xF9, 0x03, 0x06, 0xFE, 0xFA, 0x03, 0x06, 0xFE, 0xFB, 0x03, 0x06, 0xFE, +/* 0000E7F0 */ 0xFC, 0x03, 0x06, 0xFE, 0xF8, 0x03, 0x06, 0xFE, 0xFD, 0x03, 0x06, 0xFE, 0x47, 0x03, 0x06, 0xFE, +/* 0000E800 */ 0x00, 0x03, 0x06, 0xFE, 0xBB, 0x04, 0x06, 0xFE, 0xBC, 0x04, 0x01, 0x00, 0x01, 0xFF, 0xFE, 0x72, +/* 0000E810 */ 0x03, 0xA8, 0x2F, 0xA8, 0x30, 0xA8, 0x31, 0x2A, 0x36, 0x24, 0x0D, 0x03, 0x00, 0x36, 0x02, 0x09, +/* 0000E820 */ 0x12, 0x00, 0x8E, 0x03, 0x03, 0x37, 0x6C, 0x36, 0x37, 0x00, 0x07, 0x01, 0x00, 0x59, 0x00, 0x37, +/* 0000E830 */ 0x1F, 0x01, 0xFF, 0x36, 0x8E, 0x03, 0x06, 0x36, 0x07, 0x04, 0x00, 0x59, 0x00, 0x04, 0x8E, 0x03, +/* 0000E840 */ 0x14, 0x37, 0x59, 0x01, 0x37, 0x59, 0x02, 0x24, 0x59, 0x03, 0x03, 0x1F, 0x04, 0x36, 0x36, 0x0E, +/* 0000E850 */ 0x20, 0x00, 0x36, 0x5E, 0x36, 0x24, 0x01, 0x0E, 0x18, 0x00, 0x36, 0x8E, 0x03, 0x03, 0x37, 0x6C, +/* 0000E860 */ 0x36, 0x37, 0x02, 0x07, 0x03, 0x00, 0x59, 0x00, 0x37, 0x59, 0x01, 0x05, 0x59, 0x02, 0x05, 0x1F, +/* 0000E870 */ 0x03, 0xFF, 0x36, 0x76, 0x06, 0x24, 0x03, 0x2A, 0x36, 0x26, 0x14, 0x03, 0x00, 0x36, 0x07, 0x09, +/* 0000E880 */ 0x1C, 0x00, 0x8E, 0x03, 0x04, 0x36, 0x07, 0x03, 0x00, 0x59, 0x00, 0x04, 0xCD, 0x37, 0x59, 0x01, +/* 0000E890 */ 0x37, 0x59, 0x02, 0x08, 0x1F, 0x03, 0x36, 0x36, 0x45, 0x26, 0x36, 0x09, 0x18, 0x00, 0x8E, 0x03, +/* 0000E8A0 */ 0x24, 0x37, 0x6C, 0x36, 0x37, 0x04, 0x07, 0x02, 0x00, 0x59, 0x00, 0x37, 0x59, 0x01, 0x26, 0x1F, +/* 0000E8B0 */ 0x02, 0x36, 0x36, 0x45, 0x26, 0x36, 0x8E, 0x02, 0x02, 0x36, 0x4A, 0x36, 0x07, 0x06, 0x00, 0x59, +/* 0000E8C0 */ 0x00, 0x04, 0x59, 0x01, 0x26, 0x59, 0x02, 0x09, 0x59, 0x03, 0x0A, 0xCF, 0x37, 0x02, 0xA1, 0x00, +/* 0000E8D0 */ 0x0B, 0x37, 0xA1, 0x01, 0x0C, 0x37, 0x59, 0x04, 0x37, 0x59, 0x05, 0x0C, 0x1F, 0x06, 0x36, 0x36, +/* 0000E8E0 */ 0x45, 0x28, 0x36, 0x8E, 0x02, 0x02, 0x36, 0x4A, 0x36, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, 0x59, +/* 0000E8F0 */ 0x01, 0x26, 0x59, 0x02, 0x0D, 0x59, 0x03, 0x0A, 0xCF, 0x37, 0x02, 0xA1, 0x00, 0x0E, 0x37, 0xA1, +/* 0000E900 */ 0x01, 0x0F, 0x37, 0x59, 0x04, 0x37, 0x59, 0x05, 0x0E, 0x1F, 0x06, 0x36, 0x36, 0x45, 0x29, 0x36, +/* 0000E910 */ 0x8E, 0x02, 0x02, 0x36, 0x4A, 0x36, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x26, 0x59, +/* 0000E920 */ 0x02, 0x10, 0x59, 0x03, 0x0A, 0xCF, 0x37, 0x04, 0xA1, 0x00, 0x11, 0x37, 0xA1, 0x01, 0x12, 0x37, +/* 0000E930 */ 0xA1, 0x02, 0x13, 0x37, 0xA1, 0x03, 0x14, 0x37, 0x59, 0x04, 0x37, 0xA8, 0x37, 0x59, 0x05, 0x37, +/* 0000E940 */ 0x1F, 0x06, 0x36, 0x36, 0x45, 0x2A, 0x36, 0x8E, 0x02, 0x02, 0x36, 0x4A, 0x36, 0x07, 0x06, 0x00, +/* 0000E950 */ 0x59, 0x00, 0x04, 0x59, 0x01, 0x26, 0x59, 0x02, 0x15, 0x59, 0x03, 0x16, 0xA8, 0x37, 0x59, 0x04, +/* 0000E960 */ 0x37, 0x59, 0x05, 0x17, 0x1F, 0x06, 0x36, 0x36, 0x45, 0x2B, 0x36, 0x8E, 0x02, 0x02, 0x36, 0x4A, +/* 0000E970 */ 0x36, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x26, 0x59, 0x02, 0x18, 0x59, 0x03, 0x0A, +/* 0000E980 */ 0xCF, 0x37, 0x03, 0xA1, 0x00, 0x19, 0x37, 0xA1, 0x01, 0x1A, 0x37, 0xA1, 0x02, 0x1B, 0x37, 0x59, +/* 0000E990 */ 0x04, 0x37, 0xA8, 0x37, 0x59, 0x05, 0x37, 0x1F, 0x06, 0x36, 0x36, 0x96, 0x02, 0x36, 0x8E, 0x02, +/* 0000E9A0 */ 0x02, 0x36, 0x4A, 0x36, 0x07, 0x06, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x26, 0x59, 0x02, 0x1C, +/* 0000E9B0 */ 0x59, 0x03, 0x16, 0xCF, 0x37, 0x02, 0xA1, 0x00, 0x06, 0x37, 0xA1, 0x01, 0x17, 0x37, 0x59, 0x04, +/* 0000E9C0 */ 0x37, 0xA8, 0x37, 0x59, 0x05, 0x37, 0x1F, 0x06, 0x36, 0x36, 0x96, 0x03, 0x36, 0x8E, 0x02, 0x07, +/* 0000E9D0 */ 0x36, 0x4A, 0x36, 0x07, 0x02, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x25, 0x1F, 0x02, 0x36, 0x36, +/* 0000E9E0 */ 0x45, 0x25, 0x36, 0x8E, 0x03, 0x2A, 0x36, 0x07, 0x05, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x25, +/* 0000E9F0 */ 0x59, 0x02, 0x28, 0xA8, 0x37, 0x59, 0x03, 0x37, 0x8E, 0x03, 0x31, 0x37, 0x59, 0x04, 0x37, 0x1F, +/* 0000EA00 */ 0x05, 0x36, 0x36, 0x45, 0x2C, 0x36, 0x96, 0x04, 0x1D, 0x8E, 0x03, 0x27, 0x36, 0x07, 0x02, 0x00, +/* 0000EA10 */ 0x59, 0x00, 0x04, 0x5E, 0x37, 0x2C, 0x05, 0x59, 0x01, 0x37, 0x1F, 0x02, 0x36, 0x36, 0x45, 0x2D, +/* 0000EA20 */ 0x36, 0x45, 0x2E, 0x2D, 0x5E, 0x36, 0x2C, 0x06, 0x0E, 0x22, 0x00, 0x36, 0x8E, 0x03, 0x06, 0x36, +/* 0000EA30 */ 0x07, 0x04, 0x00, 0x59, 0x00, 0x04, 0x8E, 0x03, 0x17, 0x37, 0x59, 0x01, 0x37, 0x5E, 0x37, 0x2C, +/* 0000EA40 */ 0x07, 0x59, 0x02, 0x37, 0xD6, 0x00, 0x37, 0x59, 0x03, 0x37, 0x1F, 0x04, 0xFF, 0x36, 0x92, 0x04, +/* 0000EA50 */ 0x36, 0x15, 0x03, 0x00, 0x36, 0x1D, 0x09, 0x48, 0x00, 0x8E, 0x03, 0x2F, 0x36, 0x97, 0x36, 0x36, +/* 0000EA60 */ 0x2E, 0x45, 0x2F, 0x36, 0x45, 0x30, 0x1E, 0xA8, 0x36, 0x15, 0x03, 0x00, 0x2F, 0x36, 0x09, 0x2D, +/* 0000EA70 */ 0x00, 0x92, 0x04, 0x37, 0x97, 0x37, 0x2F, 0x37, 0x45, 0x30, 0x37, 0x45, 0x36, 0x37, 0xA8, 0x37, +/* 0000EA80 */ 0x15, 0x03, 0x00, 0x36, 0x37, 0x09, 0x16, 0x00, 0x15, 0x03, 0x00, 0x30, 0x1E, 0x09, 0x0B, 0x00, +/* 0000EA90 */ 0x2D, 0x36, 0x2E, 0x1F, 0x2D, 0x36, 0x36, 0x30, 0x45, 0x2E, 0x36, 0x09, 0x03, 0x00, 0x96, 0x04, +/* 0000EAA0 */ 0x1D, 0x92, 0x02, 0x36, 0xA8, 0x37, 0x14, 0x03, 0x00, 0x36, 0x37, 0x09, 0x7F, 0x00, 0xE7, 0x36, +/* 0000EAB0 */ 0x00, 0x8E, 0x03, 0x03, 0x37, 0x6C, 0x36, 0x37, 0x08, 0x07, 0x08, 0x00, 0x59, 0x00, 0x37, 0x59, +/* 0000EAC0 */ 0x01, 0x20, 0x59, 0x02, 0x21, 0x59, 0x03, 0x2D, 0xA8, 0x38, 0x59, 0x04, 0x38, 0xA8, 0x38, 0x59, +/* 0000EAD0 */ 0x05, 0x38, 0xA8, 0x38, 0x59, 0x06, 0x38, 0xA8, 0x38, 0x59, 0x07, 0x38, 0x1F, 0x08, 0x36, 0x36, +/* 0000EAE0 */ 0x45, 0x31, 0x36, 0xEB, 0x09, 0x27, 0x00, 0xE9, 0x27, 0x06, 0x8E, 0x03, 0x22, 0x36, 0x07, 0x02, +/* 0000EAF0 */ 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x27, 0x1F, 0x02, 0xFF, 0x36, 0x8E, 0x03, 0x03, 0x37, 0x6C, +/* 0000EB00 */ 0x36, 0x37, 0x09, 0x07, 0x01, 0x00, 0x59, 0x00, 0x37, 0x1F, 0x01, 0xFF, 0x36, 0xEB, 0x14, 0x03, +/* 0000EB10 */ 0x00, 0x31, 0x22, 0x09, 0x06, 0x00, 0x96, 0x02, 0x1B, 0x09, 0x11, 0x00, 0x14, 0x03, 0x00, 0x31, +/* 0000EB20 */ 0x23, 0x09, 0x06, 0x00, 0x96, 0x02, 0x19, 0x09, 0x03, 0x00, 0x96, 0x02, 0x1A, 0xA8, 0x36, 0x14, +/* 0000EB30 */ 0x03, 0x00, 0x2A, 0x36, 0x09, 0x03, 0x00, 0x45, 0x2A, 0x14, 0x92, 0x03, 0x36, 0xA8, 0x37, 0x14, +/* 0000EB40 */ 0x03, 0x00, 0x36, 0x37, 0x09, 0x03, 0x00, 0x96, 0x03, 0x17, 0x76, 0x28, 0x24, 0x0A, 0x5E, 0x36, +/* 0000EB50 */ 0x2C, 0x0B, 0x76, 0x36, 0x24, 0x0C, 0x76, 0x2E, 0x24, 0x0D, 0x76, 0x29, 0x24, 0x0E, 0x76, 0x2A, +/* 0000EB60 */ 0x24, 0x0F, 0x76, 0x2B, 0x24, 0x10, 0x92, 0x02, 0x36, 0x76, 0x36, 0x24, 0x11, 0x92, 0x03, 0x36, +/* 0000EB70 */ 0x76, 0x36, 0x24, 0x12, 0x92, 0x04, 0x36, 0x76, 0x36, 0x24, 0x13, 0x76, 0x06, 0x24, 0x14, 0xA8, +/* 0000EB80 */ 0x00, 0x24, 0x00, 0xFE, 0xAA, 0x02, 0xFE, 0x08, 0x02, 0xFE, 0xAB, 0x02, 0xFE, 0x08, 0x02, 0xFE, +/* 0000EB90 */ 0x21, 0x03, 0xFE, 0x0F, 0x02, 0xFE, 0x11, 0x02, 0xFE, 0x11, 0x02, 0xFE, 0xF7, 0x01, 0xFE, 0xAD, +/* 0000EBA0 */ 0x02, 0xFE, 0x5F, 0x02, 0xFE, 0x0F, 0x02, 0xFE, 0x09, 0x02, 0xFE, 0xBD, 0x04, 0xFE, 0xBE, 0x04, +/* 0000EBB0 */ 0xFE, 0xBF, 0x04, 0xFE, 0xC0, 0x04, 0xFE, 0xC1, 0x04, 0xFE, 0xC2, 0x04, 0xFE, 0x4D, 0x02, 0xFE, +/* 0000EBC0 */ 0x4E, 0x02, 0xFF, 0x98, 0xD6, 0x01, 0x00, 0x35, 0x06, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x37, 0x00, +/* 0000EBD0 */ 0x12, 0x00, 0x3F, 0x00, 0x27, 0x00, 0x93, 0x00, 0x18, 0x00, 0x65, 0x00, 0x04, 0x00, 0x5D, 0x00, +/* 0000EBE0 */ 0x0B, 0x00, 0x3A, 0x00, 0x1C, 0x00, 0x4F, 0x00, 0x18, 0x00, 0x49, 0x00, 0x2D, 0x00, 0x71, 0x00, +/* 0000EBF0 */ 0x2D, 0x00, 0x5F, 0x00, 0x37, 0x00, 0x81, 0x00, 0x24, 0x00, 0x6E, 0x00, 0x33, 0x00, 0x73, 0x00, +/* 0000EC00 */ 0x2F, 0x00, 0x9B, 0x00, 0x16, 0x00, 0x41, 0x00, 0x23, 0x00, 0x6F, 0x00, 0x03, 0x00, 0x2B, 0x00, +/* 0000EC10 */ 0x18, 0x00, 0x69, 0x00, 0x03, 0x00, 0x46, 0x00, 0x08, 0x00, 0x36, 0x00, 0x22, 0x00, 0x33, 0x05, +/* 0000EC20 */ 0x0B, 0x00, 0x33, 0x00, 0x0B, 0x00, 0x6F, 0x00, 0x03, 0x00, 0x2F, 0x00, 0x21, 0x00, 0x92, 0x00, +/* 0000EC30 */ 0x08, 0x00, 0x3B, 0x00, 0x0E, 0x00, 0xB1, 0x00, 0x03, 0x00, 0x7F, 0x00, 0x10, 0x00, 0x51, 0x00, +/* 0000EC40 */ 0x38, 0x00, 0x84, 0x00, 0x01, 0x00, 0x52, 0x00, 0x11, 0x00, 0x92, 0x01, 0x13, 0x00, 0x52, 0x00, +/* 0000EC50 */ 0x08, 0x00, 0x29, 0x00, 0x06, 0x00, 0x30, 0x00, 0x08, 0x00, 0x2A, 0x00, 0x06, 0x00, 0x4A, 0x00, +/* 0000EC60 */ 0x03, 0x00, 0x4E, 0x00, 0x0A, 0x00, 0x35, 0x00, 0x03, 0x00, 0x3C, 0x00, 0x0D, 0x00, 0x31, 0x00, +/* 0000EC70 */ 0x03, 0x00, 0x65, 0x00, 0x04, 0x00, 0x2E, 0x00, 0x08, 0x00, 0x4D, 0x00, 0x04, 0x00, 0x48, 0x00, +/* 0000EC80 */ 0x04, 0x00, 0x2A, 0x00, 0x04, 0x00, 0x36, 0x00, 0x04, 0x00, 0x42, 0x00, 0x07, 0x00, 0x32, 0x00, +/* 0000EC90 */ 0x07, 0x00, 0x2E, 0x00, 0x07, 0x00, 0x32, 0x00, 0x06, 0x00, 0x33, 0x00, 0x00, 0xA1, 0xEC, 0x00, +/* 0000ECA0 */ 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x33, 0x10, 0x43, 0x00, 0xFE, 0xAE, 0x0A, 0x57, 0xA2, 0x41, 0xD1, +/* 0000ECB0 */ 0x00, 0xA4, 0xFF, 0x05, 0xDE, 0x01, 0x00, 0xFF, 0x05, 0xDE, 0x01, 0x00, 0x41, 0xFE, 0x00, 0x90, +/* 0000ECC0 */ 0x02, 0x02, 0xFF, 0x05, 0xDE, 0x01, 0x00, 0xFE, 0xCB, 0x04, 0xFE, 0xCB, 0x04, 0x09, 0x15, 0x1A, +/* 0000ECD0 */ 0x0B, 0x5F, 0x5B, 0x04, 0x08, 0x03, 0x03, 0x03, 0x03, 0x01, 0x01, 0x19, 0x01, 0x01, 0x01, 0x02, +/* 0000ECE0 */ 0x06, 0xFE, 0x47, 0x03, 0x06, 0xFE, 0xF7, 0x03, 0x06, 0xFE, 0xF9, 0x03, 0x07, 0x08, 0x06, 0xFE, +/* 0000ECF0 */ 0xA3, 0x03, 0x06, 0xFE, 0xFA, 0x03, 0x06, 0xFE, 0xFB, 0x03, 0x06, 0xFE, 0xFC, 0x03, 0x06, 0xFE, +/* 0000ED00 */ 0xF6, 0x03, 0x06, 0xFE, 0xA1, 0x03, 0x0B, 0x06, 0xFE, 0xF5, 0x03, 0x06, 0xFE, 0xFD, 0x03, 0x06, +/* 0000ED10 */ 0xFE, 0xF4, 0x03, 0x06, 0xFE, 0xF3, 0x03, 0x05, 0xFE, 0xC3, 0x04, 0xFE, 0x4E, 0x01, 0x8E, 0x04, +/* 0000ED20 */ 0x03, 0x1B, 0x6C, 0x1A, 0x1B, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x1B, 0x59, 0x01, 0x15, 0xE2, +/* 0000ED30 */ 0x1C, 0x00, 0x59, 0x02, 0x1C, 0x1F, 0x03, 0x1A, 0x1A, 0x45, 0x16, 0x1A, 0x97, 0x1A, 0x16, 0x02, +/* 0000ED40 */ 0x45, 0x17, 0x1A, 0x97, 0x1A, 0x16, 0x03, 0x14, 0x03, 0x00, 0x1A, 0x04, 0x09, 0x08, 0x00, 0xA8, +/* 0000ED50 */ 0x1B, 0x45, 0x1A, 0x1B, 0x09, 0x07, 0x00, 0x97, 0x1B, 0x16, 0x03, 0x46, 0x1A, 0x1B, 0x45, 0x18, +/* 0000ED60 */ 0x1A, 0x14, 0x03, 0x00, 0x17, 0x05, 0x09, 0x6A, 0x00, 0x8E, 0x01, 0x02, 0x1A, 0xA8, 0x1B, 0x14, +/* 0000ED70 */ 0x03, 0x00, 0x1A, 0x1B, 0x09, 0x5C, 0x00, 0x8E, 0x03, 0x02, 0x1A, 0x4A, 0x1A, 0x07, 0x06, 0x00, +/* 0000ED80 */ 0x59, 0x00, 0x08, 0x8E, 0x04, 0x04, 0x1B, 0x07, 0x03, 0x00, 0x59, 0x00, 0x08, 0xCE, 0x00, 0x00, +/* 0000ED90 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x7A, 0x18, 0x1C, 0x01, 0x59, 0x01, +/* 0000EDA0 */ 0x1C, 0x59, 0x02, 0x07, 0x1F, 0x03, 0x1B, 0x1B, 0x59, 0x01, 0x1B, 0x59, 0x02, 0x06, 0x59, 0x03, +/* 0000EDB0 */ 0x09, 0xCF, 0x1B, 0x03, 0xA1, 0x00, 0x0A, 0x1B, 0xA1, 0x01, 0x0B, 0x1B, 0xA1, 0x02, 0x0C, 0x1B, +/* 0000EDC0 */ 0x59, 0x04, 0x1B, 0xA8, 0x1B, 0x59, 0x05, 0x1B, 0x1F, 0x06, 0x1A, 0x1A, 0x94, 0x01, 0x02, 0x1A, +/* 0000EDD0 */ 0x09, 0x95, 0x00, 0x14, 0x03, 0x00, 0x17, 0x0D, 0x09, 0x57, 0x00, 0x8E, 0x01, 0x03, 0x1A, 0xA8, +/* 0000EDE0 */ 0x1B, 0x14, 0x03, 0x00, 0x1A, 0x1B, 0x09, 0x49, 0x00, 0xA8, 0x1A, 0x15, 0x03, 0x00, 0x18, 0x1A, +/* 0000EDF0 */ 0x09, 0x38, 0x00, 0x8E, 0x04, 0x24, 0x1B, 0x6C, 0x1A, 0x1B, 0x02, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 0000EE00 */ 0x1B, 0x8E, 0x04, 0x06, 0x1C, 0x07, 0x03, 0x00, 0x59, 0x00, 0x08, 0x8E, 0x04, 0x1E, 0x1D, 0x59, +/* 0000EE10 */ 0x01, 0x1D, 0x59, 0x02, 0x18, 0x1F, 0x03, 0x1C, 0x1C, 0x41, 0x1C, 0x1C, 0x0E, 0x59, 0x01, 0x1C, +/* 0000EE20 */ 0x1F, 0x02, 0x1A, 0x1A, 0x94, 0x01, 0x03, 0x1A, 0x09, 0x04, 0x00, 0x94, 0x01, 0x03, 0x0F, 0x09, +/* 0000EE30 */ 0x36, 0x00, 0x14, 0x03, 0x00, 0x17, 0x10, 0x09, 0x2E, 0x00, 0xA8, 0x1A, 0x15, 0x03, 0x00, 0x18, +/* 0000EE40 */ 0x1A, 0x09, 0x24, 0x00, 0x15, 0x03, 0x00, 0x18, 0x11, 0x09, 0x1C, 0x00, 0x15, 0x03, 0x00, 0x18, +/* 0000EE50 */ 0x12, 0x09, 0x14, 0x00, 0x15, 0x03, 0x00, 0x18, 0x13, 0x09, 0x0C, 0x00, 0x15, 0x03, 0x00, 0x18, +/* 0000EE60 */ 0x14, 0x09, 0x04, 0x00, 0x94, 0x01, 0x04, 0x18, 0xA8, 0x00, 0x24, 0x00, 0x01, 0x0C, 0x00, 0x00, +/* 0000EE70 */ 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0x03, 0x00, 0x00, 0xFE, +/* 0000EE80 */ 0xC0, 0x02, 0xFE, 0xF9, 0x03, 0xFE, 0x24, 0x03, 0x0E, 0xFE, 0xA3, 0x04, 0x00, 0xFF, 0x31, 0xDE, +/* 0000EE90 */ 0x01, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x82, 0x00, 0x07, 0x00, 0x2C, 0x00, 0x1E, +/* 0000EEA0 */ 0x00, 0x4C, 0x00, 0x16, 0x00, 0x4B, 0x00, 0x5C, 0x00, 0x9F, 0x00, 0x16, 0x00, 0x49, 0x00, 0x0A, +/* 0000EEB0 */ 0x00, 0x3B, 0x00, 0x38, 0x00, 0xA9, 0x00, 0x07, 0x00, 0x4D, 0x00, 0x32, 0x00, 0xFF, 0x00, 0x06, +/* 0000EEC0 */ 0x00, 0x41, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x63, 0x50, 0x0B, 0x00, 0xFE, 0x50, 0x0A, 0x1E, +/* 0000EED0 */ 0xA0, 0x41, 0xC1, 0x00, 0xFE, 0xFB, 0x02, 0xA0, 0xFF, 0xC2, 0xCC, 0x01, 0x00, 0xFF, 0xC2, 0xCC, +/* 0000EEE0 */ 0x01, 0x00, 0x01, 0x01, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFF, 0xC2, 0xCC, 0x01, 0x00, 0xFE, 0xE5, +/* 0000EEF0 */ 0x08, 0xFE, 0xE5, 0x08, 0x0C, 0x07, 0x0F, 0x06, 0x79, 0x6C, 0x02, 0x07, 0x03, 0x03, 0x03, 0x03, +/* 0000EF00 */ 0x02, 0x01, 0x0E, 0x0F, 0x08, 0x01, 0x01, 0x05, 0xFE, 0xB5, 0x04, 0x06, 0xFE, 0x47, 0x03, 0x01, +/* 0000EF10 */ 0x02, 0xFE, 0x89, 0x01, 0x4E, 0x07, 0x4E, 0x08, 0x4E, 0x0B, 0x4E, 0x0C, 0x4E, 0x0D, 0x4E, 0x09, +/* 0000EF20 */ 0x4E, 0x0A, 0x8E, 0x01, 0x19, 0x10, 0x4A, 0x10, 0x0E, 0x15, 0x00, 0x10, 0x8E, 0x02, 0x03, 0x10, +/* 0000EF30 */ 0x5E, 0x10, 0x10, 0x00, 0x0E, 0x09, 0x00, 0x10, 0x8E, 0x01, 0x19, 0x00, 0x4A, 0x00, 0x09, 0x5A, +/* 0000EF40 */ 0x01, 0xA8, 0x10, 0x45, 0x07, 0x10, 0xA8, 0x10, 0x45, 0x08, 0x10, 0x8E, 0x02, 0x33, 0x10, 0x4A, +/* 0000EF50 */ 0x10, 0x0E, 0x6C, 0x00, 0x10, 0x8E, 0x01, 0x0A, 0x10, 0x4A, 0x10, 0x07, 0x01, 0x00, 0x59, 0x00, +/* 0000EF60 */ 0x02, 0x1F, 0x01, 0x10, 0x10, 0x45, 0x07, 0x10, 0x8E, 0x02, 0x03, 0x11, 0x6C, 0x10, 0x11, 0x01, +/* 0000EF70 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x11, 0x59, 0x01, 0x07, 0xE2, 0x12, 0x00, 0x59, 0x02, 0x12, 0x1F, +/* 0000EF80 */ 0x03, 0x10, 0x10, 0x45, 0x09, 0x10, 0x0E, 0x34, 0x00, 0x09, 0x97, 0x10, 0x09, 0x03, 0x45, 0x08, +/* 0000EF90 */ 0x10, 0x8E, 0x02, 0x06, 0x10, 0x07, 0x05, 0x00, 0x59, 0x00, 0x02, 0x8E, 0x02, 0x1D, 0x11, 0x59, +/* 0000EFA0 */ 0x01, 0x11, 0x59, 0x02, 0x07, 0x45, 0x11, 0x04, 0x01, 0x09, 0x01, 0x12, 0x08, 0x2D, 0x11, 0x11, +/* 0000EFB0 */ 0x12, 0x59, 0x03, 0x11, 0x59, 0x04, 0x05, 0x1F, 0x05, 0x10, 0x10, 0x45, 0x07, 0x10, 0x09, 0x3C, +/* 0000EFC0 */ 0x00, 0x8E, 0x02, 0x03, 0x11, 0x6C, 0x10, 0x11, 0x02, 0x07, 0x03, 0x00, 0x59, 0x00, 0x11, 0x8E, +/* 0000EFD0 */ 0x01, 0x0A, 0x12, 0x4A, 0x12, 0x07, 0x01, 0x00, 0x59, 0x00, 0x02, 0x1F, 0x01, 0x12, 0x12, 0x59, +/* 0000EFE0 */ 0x01, 0x12, 0xE2, 0x12, 0x01, 0x59, 0x02, 0x12, 0x1F, 0x03, 0x10, 0x10, 0x45, 0x0A, 0x10, 0x97, +/* 0000EFF0 */ 0x10, 0x0A, 0x03, 0x45, 0x07, 0x10, 0x97, 0x10, 0x0A, 0x06, 0x45, 0x08, 0x10, 0xA8, 0x10, 0x14, +/* 0000F000 */ 0x03, 0x00, 0x08, 0x10, 0x09, 0x0F, 0x00, 0x01, 0x43, 0x01, 0x01, 0x19, 0x07, 0x8E, 0x01, 0x19, +/* 0000F010 */ 0x00, 0x4A, 0x00, 0x09, 0x85, 0x00, 0xD8, 0x00, 0x10, 0x45, 0x0B, 0x10, 0x8E, 0x02, 0x30, 0x10, +/* 0000F020 */ 0x97, 0x10, 0x10, 0x07, 0x45, 0x0C, 0x10, 0xA8, 0x10, 0x14, 0x03, 0x00, 0x0C, 0x10, 0x09, 0x1F, +/* 0000F030 */ 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x07, 0x59, 0x02, 0x08, 0x1F, 0x03, 0x10, +/* 0000F040 */ 0x0B, 0x01, 0x43, 0x01, 0x01, 0x19, 0x10, 0x8E, 0x01, 0x19, 0x00, 0x4A, 0x00, 0x09, 0x4B, 0x00, +/* 0000F050 */ 0x97, 0x10, 0x0C, 0x08, 0x45, 0x0D, 0x10, 0xA8, 0x10, 0x15, 0x03, 0x00, 0x0D, 0x10, 0x09, 0x19, +/* 0000F060 */ 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x07, 0x59, 0x02, 0x0D, 0x1F, 0x03, 0x10, +/* 0000F070 */ 0x0B, 0x01, 0x43, 0x01, 0x01, 0x19, 0x10, 0x09, 0x16, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, +/* 0000F080 */ 0x59, 0x01, 0x07, 0x59, 0x02, 0x08, 0x1F, 0x03, 0x10, 0x0B, 0x01, 0x43, 0x01, 0x01, 0x19, 0x10, +/* 0000F090 */ 0x8E, 0x01, 0x19, 0x00, 0x4A, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x4D, 0x03, +/* 0000F0A0 */ 0xFE, 0xC0, 0x02, 0xFE, 0xC0, 0x02, 0x28, 0xFE, 0xB6, 0x04, 0x00, 0x0E, 0xFE, 0xB7, 0x04, 0x00, +/* 0000F0B0 */ 0xFF, 0xD8, 0xCC, 0x01, 0x00, 0x1B, 0x0E, 0x00, 0x00, 0x00, 0x16, 0x00, 0x3F, 0x00, 0x09, 0x00, +/* 0000F0C0 */ 0x31, 0x00, 0x05, 0x00, 0x20, 0x00, 0x05, 0x00, 0x23, 0x00, 0x0A, 0x00, 0x7A, 0x00, 0x13, 0x00, +/* 0000F0D0 */ 0x29, 0x00, 0x1E, 0x00, 0x6A, 0x00, 0x04, 0x00, 0xB8, 0x00, 0x07, 0x00, 0x26, 0x00, 0x30, 0x00, +/* 0000F0E0 */ 0xC6, 0x00, 0x2E, 0x00, 0x5C, 0x00, 0x07, 0x00, 0x1F, 0x00, 0x07, 0x00, 0x29, 0x00, 0x0A, 0x00, +/* 0000F0F0 */ 0x2B, 0x00, 0x06, 0x00, 0x2C, 0x00, 0x09, 0x00, 0x8D, 0x00, 0x06, 0x00, 0x28, 0x01, 0x0B, 0x00, +/* 0000F100 */ 0x56, 0x00, 0x0A, 0x00, 0x84, 0x00, 0x16, 0x00, 0x54, 0x00, 0x09, 0x00, 0x31, 0x00, 0x07, 0x00, +/* 0000F110 */ 0x42, 0x00, 0x0A, 0x00, 0x31, 0x00, 0x19, 0x00, 0x6B, 0x00, 0x16, 0x00, 0x5B, 0x00, 0x0B, 0x00, +/* 0000F120 */ 0x22, 0x00, 0x00, 0x27, 0xF1, 0x00, 0x00, 0x7F, 0x4C, 0x00, 0x01, 0x00, 0x10, 0x03, 0x00, 0xFE, +/* 0000F130 */ 0x6E, 0x0A, 0x2C, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xB8, 0x04, 0xA1, 0xFF, 0xE8, 0xD1, 0x01, 0x00, +/* 0000F140 */ 0xFF, 0xE8, 0xD1, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFF, 0xE8, 0xD1, 0x01, 0x00, +/* 0000F150 */ 0xF9, 0xF9, 0x04, 0x05, 0x08, 0x11, 0x11, 0x02, 0x01, 0x07, 0x06, 0xFE, 0x47, 0x03, 0x05, 0xFE, +/* 0000F160 */ 0xB5, 0x04, 0x05, 0xFE, 0xB9, 0x04, 0x3B, 0x8E, 0x02, 0x33, 0x08, 0x4A, 0x08, 0x0E, 0x18, 0x00, +/* 0000F170 */ 0x08, 0x01, 0x09, 0x01, 0x00, 0x05, 0x2D, 0x00, 0x00, 0x03, 0x01, 0x09, 0x01, 0x08, 0x06, 0x2D, +/* 0000F180 */ 0x00, 0x00, 0x08, 0x09, 0x1A, 0x00, 0x09, 0x15, 0x00, 0x01, 0x09, 0x01, 0x00, 0x05, 0x2D, 0x00, +/* 0000F190 */ 0x00, 0x04, 0x01, 0x09, 0x01, 0x08, 0x06, 0x2D, 0x00, 0x00, 0x08, 0x09, 0x02, 0x00, 0xA8, 0x00, +/* 0000F1A0 */ 0x24, 0x00, 0xFF, 0x1D, 0xD2, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x2A, 0x00, +/* 0000F1B0 */ 0x18, 0x00, 0x53, 0x00, 0x17, 0x00, 0x46, 0x00, 0x00, 0x7E, 0x5D, 0x00, 0x01, 0x00, 0x1A, 0x0B, +/* 0000F1C0 */ 0x00, 0xFE, 0x3B, 0x0A, 0x32, 0xA0, 0x41, 0xD1, 0x00, 0x9D, 0xFF, 0xE1, 0xC8, 0x01, 0x00, 0xFF, +/* 0000F1D0 */ 0xE1, 0xC8, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFF, 0xE1, 0xC8, 0x01, 0x00, 0xFE, +/* 0000F1E0 */ 0x13, 0x03, 0xFE, 0x13, 0x03, 0x01, 0xFE, 0xB2, 0x04, 0x06, 0x04, 0x07, 0x08, 0x1E, 0x1E, 0x02, +/* 0000F1F0 */ 0x06, 0x04, 0x05, 0x06, 0x07, 0x08, 0x5B, 0x4E, 0x07, 0x96, 0x02, 0x07, 0x8E, 0x02, 0x04, 0x07, +/* 0000F200 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x03, 0xCD, 0x08, 0x59, 0x01, 0x08, 0x59, 0x02, 0x02, 0x1F, 0x03, +/* 0000F210 */ 0x07, 0x07, 0x96, 0x02, 0x07, 0x8E, 0x02, 0x06, 0x07, 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, 0x8E, +/* 0000F220 */ 0x02, 0x17, 0x08, 0x59, 0x01, 0x08, 0x8E, 0x02, 0x13, 0x08, 0x07, 0x02, 0x00, 0x59, 0x00, 0x03, +/* 0000F230 */ 0x8E, 0x02, 0x2F, 0x09, 0x59, 0x01, 0x09, 0x1F, 0x02, 0x08, 0x08, 0x59, 0x02, 0x08, 0xD6, 0x00, +/* 0000F240 */ 0x08, 0x59, 0x03, 0x08, 0x1F, 0x04, 0xFF, 0x07, 0x92, 0x02, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, +/* 0000F250 */ 0x24, 0x00, 0xFF, 0xF7, 0xC8, 0x01, 0x00, 0x04, 0x05, 0x00, 0x00, 0x00, 0x19, 0x00, 0x31, 0x00, +/* 0000F260 */ 0x33, 0x00, 0xB6, 0x02, 0x08, 0x00, 0x15, 0x00, 0x00, 0x6D, 0xF2, 0x00, 0x00, 0x7F, 0x5D, 0x00, +/* 0000F270 */ 0x01, 0x00, 0x1A, 0x0B, 0x00, 0xFE, 0x3D, 0x0A, 0x6B, 0xA2, 0x41, 0xD1, 0x00, 0x9E, 0xFF, 0x8B, +/* 0000F280 */ 0xC9, 0x01, 0x00, 0xFF, 0x8B, 0xC9, 0x01, 0x00, 0x01, 0x40, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, +/* 0000F290 */ 0x8B, 0xC9, 0x01, 0x00, 0xFE, 0x48, 0x02, 0xFE, 0x48, 0x02, 0x02, 0xFE, 0xB3, 0x04, 0xFE, 0xB4, +/* 0000F2A0 */ 0x04, 0x07, 0x04, 0x08, 0x08, 0x25, 0x25, 0x03, 0x08, 0x05, 0x06, 0x07, 0x07, 0x08, 0x71, 0x4E, +/* 0000F2B0 */ 0x08, 0x96, 0x02, 0x08, 0x4E, 0x08, 0x96, 0x03, 0x08, 0x8E, 0x03, 0x2F, 0x08, 0x97, 0x08, 0x08, +/* 0000F2C0 */ 0x04, 0x96, 0x02, 0x08, 0x8E, 0x03, 0x04, 0x08, 0x07, 0x03, 0x00, 0x59, 0x00, 0x03, 0xCD, 0x09, +/* 0000F2D0 */ 0x59, 0x01, 0x09, 0x59, 0x02, 0x02, 0x1F, 0x03, 0x08, 0x08, 0x96, 0x03, 0x08, 0x8E, 0x03, 0x06, +/* 0000F2E0 */ 0x08, 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, 0x8E, 0x03, 0x17, 0x09, 0x59, 0x01, 0x09, 0x8E, 0x03, +/* 0000F2F0 */ 0x13, 0x09, 0x07, 0x02, 0x00, 0x59, 0x00, 0x03, 0x92, 0x02, 0x0A, 0x59, 0x01, 0x0A, 0x1F, 0x02, +/* 0000F300 */ 0x09, 0x09, 0x59, 0x02, 0x09, 0xD6, 0x00, 0x09, 0x59, 0x03, 0x09, 0x1F, 0x04, 0xFF, 0x08, 0x8E, +/* 0000F310 */ 0x01, 0x02, 0x08, 0x4A, 0x08, 0x92, 0x03, 0x09, 0x9C, 0x09, 0x08, 0x04, 0xA8, 0x00, 0x24, 0x00, +/* 0000F320 */ 0xFF, 0xAB, 0xC9, 0x01, 0x00, 0x05, 0x0A, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x56, 0x00, 0x19, 0x00, +/* 0000F330 */ 0x45, 0x00, 0x32, 0x00, 0x58, 0x01, 0x0F, 0x00, 0x34, 0x00, 0x00, 0x3F, 0xF3, 0x00, 0x00, 0x7F, +/* 0000F340 */ 0x4C, 0x00, 0x01, 0x00, 0x10, 0x03, 0x00, 0xFE, 0x41, 0x0A, 0x68, 0xA2, 0x41, 0xD1, 0x00, 0x9F, +/* 0000F350 */ 0xFF, 0xA2, 0xCA, 0x01, 0x00, 0xFF, 0xA2, 0xCA, 0x01, 0x00, 0x41, 0xFE, 0x00, 0x90, 0x02, 0x02, +/* 0000F360 */ 0xFF, 0xA2, 0xCA, 0x01, 0x00, 0xEC, 0xEC, 0x04, 0x03, 0x06, 0x0D, 0x0C, 0x04, 0x02, 0x05, 0x06, +/* 0000F370 */ 0xFE, 0x47, 0x03, 0x25, 0x4E, 0x04, 0x8E, 0x01, 0x02, 0x06, 0x4A, 0x06, 0x97, 0x06, 0x06, 0x03, +/* 0000F380 */ 0x45, 0x04, 0x06, 0x15, 0x03, 0x00, 0x04, 0x02, 0x09, 0x0A, 0x00, 0x8E, 0x01, 0x03, 0x06, 0x4A, +/* 0000F390 */ 0x06, 0x9C, 0x03, 0x06, 0x04, 0xA8, 0x00, 0x24, 0x00, 0xFF, 0xC9, 0xCA, 0x01, 0x00, 0x04, 0x02, +/* 0000F3A0 */ 0x00, 0x00, 0x00, 0x0D, 0x00, 0x48, 0x00, 0x08, 0x00, 0x2D, 0x00, 0x0C, 0x00, 0x4F, 0x00, 0x00, +/* 0000F3B0 */ 0x7F, 0x5C, 0x00, 0x01, 0x00, 0x10, 0x03, 0x00, 0xFE, 0x16, 0x0A, 0x08, 0xA2, 0x41, 0xC3, 0x00, +/* 0000F3C0 */ 0xFE, 0xB1, 0x04, 0x9C, 0xFF, 0xB9, 0xBE, 0x01, 0x00, 0xFF, 0xB9, 0xBE, 0x01, 0x00, 0x09, 0xFE, +/* 0000F3D0 */ 0x00, 0x90, 0x02, 0x02, 0xFF, 0xB9, 0xBE, 0x01, 0x00, 0x96, 0x96, 0x05, 0x03, 0x06, 0x05, 0x0E, +/* 0000F3E0 */ 0x0E, 0x02, 0x02, 0x05, 0x08, 0x26, 0x58, 0x04, 0x8E, 0x02, 0x2D, 0x06, 0x07, 0x04, 0x00, 0x59, +/* 0000F3F0 */ 0x00, 0x02, 0x59, 0x01, 0x04, 0x8E, 0x01, 0x18, 0x07, 0x4A, 0x07, 0x59, 0x02, 0x07, 0x59, 0x03, +/* 0000F400 */ 0x03, 0x1F, 0x04, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFF, 0xF7, 0xBE, 0x01, +/* 0000F410 */ 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x22, 0x00, 0x57, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0x01, 0x00, +/* 0000F420 */ 0x10, 0x03, 0x00, 0xFE, 0x10, 0x0A, 0x08, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0xB0, 0x04, 0x9B, 0xFF, +/* 0000F430 */ 0x13, 0xBD, 0x01, 0x00, 0xFF, 0x13, 0xBD, 0x01, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x03, 0x02, 0xFF, +/* 0000F440 */ 0x13, 0xBD, 0x01, 0x00, 0xCC, 0xCC, 0x06, 0x03, 0x07, 0x06, 0x12, 0x11, 0x02, 0x02, 0x06, 0x08, +/* 0000F450 */ 0x33, 0x58, 0x05, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA8, 0x07, 0x45, 0x04, 0x07, 0x8E, 0x02, 0x2C, +/* 0000F460 */ 0x07, 0x07, 0x05, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x05, 0x8E, 0x01, 0x16, 0x08, 0x4A, 0x08, +/* 0000F470 */ 0x59, 0x02, 0x08, 0x59, 0x03, 0x03, 0x59, 0x04, 0x04, 0x1F, 0x05, 0x00, 0x07, 0x09, 0x02, 0x00, +/* 0000F480 */ 0xA8, 0x00, 0x24, 0x00, 0xFF, 0x51, 0xBD, 0x01, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, +/* 0000F490 */ 0x23, 0x00, 0x25, 0x00, 0x6A, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0x01, 0x00, 0x10, 0x03, 0x00, 0xFE, +/* 0000F4A0 */ 0x0A, 0x0A, 0x08, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0xAF, 0x04, 0x9A, 0xFF, 0x39, 0xBB, 0x01, 0x00, +/* 0000F4B0 */ 0xFF, 0x39, 0xBB, 0x01, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x03, 0x02, 0xFF, 0x39, 0xBB, 0x01, 0x00, +/* 0000F4C0 */ 0xC8, 0xC8, 0x06, 0x03, 0x07, 0x06, 0x12, 0x11, 0x02, 0x02, 0x06, 0x08, 0x33, 0x58, 0x05, 0x15, +/* 0000F4D0 */ 0x05, 0x00, 0x04, 0x02, 0xA8, 0x07, 0x45, 0x04, 0x07, 0x8E, 0x02, 0x2C, 0x07, 0x07, 0x05, 0x00, +/* 0000F4E0 */ 0x59, 0x00, 0x02, 0x59, 0x01, 0x05, 0x8E, 0x01, 0x14, 0x08, 0x4A, 0x08, 0x59, 0x02, 0x08, 0x59, +/* 0000F4F0 */ 0x03, 0x03, 0x59, 0x04, 0x04, 0x1F, 0x05, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, +/* 0000F500 */ 0xFF, 0x75, 0xBB, 0x01, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x23, 0x00, 0x25, 0x00, +/* 0000F510 */ 0x68, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0x01, 0x00, 0x10, 0x03, 0x00, 0xFE, 0x04, 0x0A, 0x08, 0xA2, +/* 0000F520 */ 0x41, 0xC3, 0x00, 0xFE, 0xAE, 0x04, 0x99, 0xFF, 0x6F, 0xB9, 0x01, 0x00, 0xFF, 0x6F, 0xB9, 0x01, +/* 0000F530 */ 0x00, 0x09, 0xFE, 0x00, 0x90, 0x03, 0x02, 0xFF, 0x6F, 0xB9, 0x01, 0x00, 0xC0, 0xC0, 0x06, 0x03, +/* 0000F540 */ 0x07, 0x06, 0x12, 0x11, 0x02, 0x02, 0x06, 0x08, 0x33, 0x58, 0x05, 0x15, 0x05, 0x00, 0x04, 0x02, +/* 0000F550 */ 0xA8, 0x07, 0x45, 0x04, 0x07, 0x8E, 0x02, 0x2C, 0x07, 0x07, 0x05, 0x00, 0x59, 0x00, 0x02, 0x59, +/* 0000F560 */ 0x01, 0x05, 0x8E, 0x01, 0x12, 0x08, 0x4A, 0x08, 0x59, 0x02, 0x08, 0x59, 0x03, 0x03, 0x59, 0x04, +/* 0000F570 */ 0x04, 0x1F, 0x05, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFF, 0xA7, 0xB9, 0x01, +/* 0000F580 */ 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x23, 0x00, 0x25, 0x00, 0x64, 0x00, 0x00, 0x7F, +/* 0000F590 */ 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0xE6, 0x09, 0x1D, 0xA2, 0x41, 0xC1, 0x00, 0xFE, +/* 0000F5A0 */ 0x38, 0x03, 0x98, 0xFF, 0xCF, 0xB3, 0x01, 0x00, 0xFF, 0xCF, 0xB3, 0x01, 0x00, 0x01, 0xFE, 0x00, +/* 0000F5B0 */ 0x90, 0x03, 0x03, 0xFF, 0xCF, 0xB3, 0x01, 0x00, 0xFE, 0x60, 0x03, 0xFE, 0x60, 0x03, 0x08, 0x08, +/* 0000F5C0 */ 0x0C, 0x0A, 0x52, 0x4F, 0x02, 0x08, 0x04, 0x04, 0x04, 0x04, 0x0B, 0x08, 0x06, 0xFE, 0xD6, 0x03, +/* 0000F5D0 */ 0x05, 0xFE, 0x9C, 0x03, 0x05, 0xFE, 0xDF, 0x03, 0x06, 0xFE, 0xE0, 0x03, 0x05, 0xFE, 0xAD, 0x04, +/* 0000F5E0 */ 0xFE, 0x11, 0x01, 0xA8, 0x0A, 0x8E, 0x01, 0x07, 0x0C, 0x4A, 0x0C, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 0000F5F0 */ 0x02, 0x59, 0x01, 0x08, 0x1F, 0x02, 0x0C, 0x0C, 0x45, 0x08, 0x0C, 0x2A, 0x0C, 0x09, 0x15, 0x03, +/* 0000F600 */ 0x00, 0x0C, 0x03, 0x09, 0x66, 0x00, 0x5E, 0x0C, 0x09, 0x00, 0x45, 0x0A, 0x0C, 0x2A, 0x0C, 0x0A, +/* 0000F610 */ 0x15, 0x03, 0x00, 0x0C, 0x03, 0x09, 0x54, 0x00, 0x8E, 0x02, 0x24, 0x0D, 0x6C, 0x0C, 0x0D, 0x01, +/* 0000F620 */ 0x07, 0x02, 0x00, 0x59, 0x00, 0x0D, 0x59, 0x01, 0x0A, 0x1F, 0x02, 0x0C, 0x0C, 0x45, 0x0A, 0x0C, +/* 0000F630 */ 0x15, 0x03, 0x00, 0x0A, 0x04, 0x09, 0x34, 0x00, 0x15, 0x03, 0x00, 0x0A, 0x05, 0x09, 0x2C, 0x00, +/* 0000F640 */ 0x8E, 0x02, 0x03, 0x0D, 0x6C, 0x0C, 0x0D, 0x02, 0x07, 0x04, 0x00, 0x59, 0x00, 0x0D, 0x8E, 0x02, +/* 0000F650 */ 0x0C, 0x0E, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x0A, 0x1F, 0x02, 0x0E, 0x0E, 0x59, +/* 0000F660 */ 0x01, 0x0E, 0x59, 0x02, 0x06, 0x59, 0x03, 0x07, 0x1F, 0x04, 0xFF, 0x0C, 0x2A, 0x0C, 0x0A, 0x14, +/* 0000F670 */ 0x08, 0x00, 0x0C, 0x03, 0x14, 0x03, 0x00, 0x0A, 0x05, 0x09, 0x46, 0x00, 0x8E, 0x01, 0x08, 0x0C, +/* 0000F680 */ 0x4A, 0x0C, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x08, 0x8E, 0x02, 0x26, 0x0D, 0x59, +/* 0000F690 */ 0x02, 0x0D, 0x8E, 0x02, 0x03, 0x0E, 0x6C, 0x0D, 0x0E, 0x03, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0E, +/* 0000F6A0 */ 0x8E, 0x02, 0x2B, 0x0F, 0x07, 0x01, 0x00, 0x59, 0x00, 0x02, 0x1F, 0x01, 0x0F, 0x0F, 0x59, 0x01, +/* 0000F6B0 */ 0x0F, 0x1F, 0x02, 0x0D, 0x0D, 0x59, 0x03, 0x0D, 0x1F, 0x04, 0x00, 0x0C, 0x09, 0x33, 0x00, 0x09, +/* 0000F6C0 */ 0x2E, 0x00, 0x8E, 0x01, 0x08, 0x0C, 0x4A, 0x0C, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, +/* 0000F6D0 */ 0x08, 0x8E, 0x02, 0x27, 0x0D, 0x59, 0x02, 0x0D, 0x8E, 0x02, 0x2B, 0x0D, 0x07, 0x01, 0x00, 0x59, +/* 0000F6E0 */ 0x00, 0x02, 0x1F, 0x01, 0x0D, 0x0D, 0x59, 0x03, 0x0D, 0x1F, 0x04, 0x00, 0x0C, 0x09, 0x02, 0x00, +/* 0000F6F0 */ 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x0E, 0x02, 0xFE, 0x22, 0x03, 0xFE, 0xAC, 0x02, 0xFE, 0xEE, 0x01, +/* 0000F700 */ 0xFF, 0x0A, 0xB4, 0x01, 0x00, 0x0B, 0x02, 0x00, 0x00, 0x00, 0x16, 0x00, 0x34, 0x00, 0x0B, 0x00, +/* 0000F710 */ 0x32, 0x00, 0x07, 0x00, 0x2E, 0x00, 0x0B, 0x00, 0x36, 0x00, 0x18, 0x00, 0x37, 0x00, 0x10, 0x00, +/* 0000F720 */ 0x4A, 0x00, 0x2C, 0x00, 0x96, 0x00, 0x10, 0x00, 0x4C, 0x00, 0x46, 0x00, 0x93, 0x00, 0x30, 0x00, +/* 0000F730 */ 0x64, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0xD8, 0x09, 0x28, 0xA2, +/* 0000F740 */ 0x41, 0xC1, 0x00, 0xFE, 0xF8, 0x02, 0x97, 0xFF, 0xFB, 0xB1, 0x01, 0x00, 0xFF, 0xFB, 0xB1, 0x01, +/* 0000F750 */ 0x00, 0x01, 0xFE, 0x00, 0x90, 0x04, 0x04, 0xFF, 0xFB, 0xB1, 0x01, 0x00, 0xFE, 0x8C, 0x01, 0xFE, +/* 0000F760 */ 0x8C, 0x01, 0x07, 0x05, 0x0A, 0x03, 0x25, 0x24, 0x02, 0x02, 0x04, 0x04, 0x04, 0x04, 0x09, 0x07, +/* 0000F770 */ 0x05, 0xFE, 0x33, 0x03, 0x08, 0x7B, 0x14, 0x0A, 0x00, 0x05, 0x02, 0xA8, 0x0A, 0x14, 0x03, 0x00, +/* 0000F780 */ 0x05, 0x0A, 0x09, 0x15, 0x00, 0x8E, 0x02, 0x03, 0x0B, 0x6C, 0x0A, 0x0B, 0x00, 0x07, 0x02, 0x00, +/* 0000F790 */ 0x59, 0x00, 0x0B, 0x59, 0x01, 0x06, 0x1F, 0x02, 0xFF, 0x0A, 0x8E, 0x02, 0x03, 0x0B, 0x6C, 0x0A, +/* 0000F7A0 */ 0x0B, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0B, 0x59, 0x01, 0x05, 0x1F, 0x02, 0x0A, 0x0A, 0x45, +/* 0000F7B0 */ 0x08, 0x0A, 0x0E, 0x0C, 0x00, 0x08, 0x5E, 0x0A, 0x08, 0x02, 0x15, 0x03, 0x00, 0x0A, 0x03, 0x09, +/* 0000F7C0 */ 0x15, 0x00, 0x8E, 0x02, 0x03, 0x0B, 0x6C, 0x0A, 0x0B, 0x03, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0B, +/* 0000F7D0 */ 0x59, 0x01, 0x06, 0x1F, 0x02, 0xFF, 0x0A, 0x8E, 0x01, 0x07, 0x0A, 0x4A, 0x0A, 0x07, 0x02, 0x00, +/* 0000F7E0 */ 0x59, 0x00, 0x04, 0x59, 0x01, 0x07, 0x1F, 0x02, 0x00, 0x0A, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, +/* 0000F7F0 */ 0x00, 0xFE, 0xB1, 0x02, 0xFE, 0x05, 0x02, 0xFE, 0x0C, 0x02, 0xFE, 0xB1, 0x02, 0xFF, 0x2C, 0xB2, +/* 0000F800 */ 0x01, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x37, 0x00, 0x15, 0x00, 0x40, 0x00, 0x18, +/* 0000F810 */ 0x00, 0x38, 0x00, 0x10, 0x00, 0x3F, 0x00, 0x15, 0x00, 0x40, 0x00, 0x18, 0x00, 0x2C, 0x00, 0x00, +/* 0000F820 */ 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0xCB, 0x09, 0x24, 0xA2, 0x41, 0xC1, 0x00, +/* 0000F830 */ 0xFE, 0xF7, 0x02, 0x96, 0xFF, 0x37, 0xB0, 0x01, 0x00, 0xFF, 0x37, 0xB0, 0x01, 0x00, 0x01, 0xFE, +/* 0000F840 */ 0x00, 0x90, 0x05, 0x05, 0xFF, 0x37, 0xB0, 0x01, 0x00, 0xFE, 0x9A, 0x01, 0xFE, 0x9A, 0x01, 0x08, +/* 0000F850 */ 0x05, 0x0B, 0x04, 0x25, 0x24, 0x02, 0x02, 0x04, 0x04, 0x04, 0x04, 0x0A, 0x07, 0x05, 0xFE, 0x33, +/* 0000F860 */ 0x03, 0x08, 0x7C, 0x14, 0x0A, 0x00, 0x05, 0x02, 0xA8, 0x0B, 0x14, 0x03, 0x00, 0x05, 0x0B, 0x09, +/* 0000F870 */ 0x15, 0x00, 0x8E, 0x02, 0x03, 0x0C, 0x6C, 0x0B, 0x0C, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0C, +/* 0000F880 */ 0x59, 0x01, 0x06, 0x1F, 0x02, 0xFF, 0x0B, 0x8E, 0x02, 0x03, 0x0C, 0x6C, 0x0B, 0x0C, 0x01, 0x07, +/* 0000F890 */ 0x02, 0x00, 0x59, 0x00, 0x0C, 0x59, 0x01, 0x05, 0x1F, 0x02, 0x0B, 0x0B, 0x45, 0x09, 0x0B, 0x0E, +/* 0000F8A0 */ 0x0C, 0x00, 0x09, 0x5E, 0x0B, 0x09, 0x02, 0x15, 0x03, 0x00, 0x0B, 0x03, 0x09, 0x15, 0x00, 0x8E, +/* 0000F8B0 */ 0x02, 0x03, 0x0C, 0x6C, 0x0B, 0x0C, 0x03, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0C, 0x59, 0x01, 0x06, +/* 0000F8C0 */ 0x1F, 0x02, 0xFF, 0x0B, 0x8E, 0x02, 0x2E, 0x0B, 0x07, 0x03, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, +/* 0000F8D0 */ 0x07, 0x59, 0x02, 0x08, 0x1F, 0x03, 0x00, 0x0B, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, +/* 0000F8E0 */ 0xB1, 0x02, 0xFE, 0x05, 0x02, 0xFE, 0x0C, 0x02, 0xFE, 0xB1, 0x02, 0xFF, 0x71, 0xB0, 0x01, 0x00, +/* 0000F8F0 */ 0x07, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x37, 0x00, 0x15, 0x00, 0x40, 0x00, 0x18, 0x00, 0x38, +/* 0000F900 */ 0x00, 0x10, 0x00, 0x3F, 0x00, 0x15, 0x00, 0x40, 0x00, 0x19, 0x00, 0x31, 0x00, 0x00, 0x7E, 0x5D, +/* 0000F910 */ 0x00, 0xC1, 0x13, 0x1A, 0x4B, 0x00, 0xFE, 0xB8, 0x09, 0x04, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x61, +/* 0000F920 */ 0x03, 0x94, 0xFF, 0xA2, 0xAC, 0x01, 0x00, 0xFF, 0xA2, 0xAC, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, +/* 0000F930 */ 0x04, 0x04, 0xFF, 0xA2, 0xAC, 0x01, 0x00, 0xFE, 0x6F, 0x03, 0xFE, 0x6F, 0x03, 0x04, 0xFE, 0xD9, +/* 0000F940 */ 0x03, 0xFE, 0xAA, 0x04, 0xFE, 0xAB, 0x04, 0xFE, 0xAC, 0x04, 0x09, 0x0A, 0x10, 0x05, 0x20, 0x20, +/* 0000F950 */ 0x02, 0x05, 0x03, 0x03, 0x03, 0x03, 0x01, 0x0D, 0x0E, 0x0F, 0x01, 0x00, 0x08, 0x06, 0xFE, 0xE1, +/* 0000F960 */ 0x03, 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, 0x2B, 0x03, 0x0C, 0x06, 0xFE, 0x2D, 0x03, 0x07, 0x6D, +/* 0000F970 */ 0x96, 0x04, 0x0B, 0x96, 0x05, 0x0C, 0xCF, 0x10, 0x00, 0x96, 0x02, 0x10, 0x96, 0x03, 0x02, 0x8E, +/* 0000F980 */ 0x02, 0x06, 0x10, 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, 0x8E, 0x02, 0x17, 0x11, 0x59, 0x01, 0x11, +/* 0000F990 */ 0x59, 0x02, 0x0A, 0xD6, 0x00, 0x11, 0x59, 0x03, 0x11, 0x1F, 0x04, 0xFF, 0x10, 0x8E, 0x02, 0x16, +/* 0000F9A0 */ 0x10, 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, 0x92, 0x02, 0x11, 0x59, 0x01, 0x11, 0x59, 0x02, 0x04, +/* 0000F9B0 */ 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x92, 0x03, 0x12, +/* 0000F9C0 */ 0x7A, 0x12, 0x11, 0x00, 0x7A, 0x07, 0x11, 0x01, 0x7A, 0x07, 0x11, 0x02, 0x59, 0x03, 0x11, 0x1F, +/* 0000F9D0 */ 0x04, 0xFF, 0x10, 0x92, 0x02, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x01, 0x14, 0x00, +/* 0000F9E0 */ 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, +/* 0000F9F0 */ 0x96, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x95, +/* 0000FA00 */ 0x01, 0xFF, 0xF5, 0xAC, 0x01, 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x19, 0x00, 0x03, +/* 0000FA10 */ 0x00, 0x17, 0x00, 0x1E, 0x00, 0x70, 0x02, 0x36, 0x00, 0x68, 0x00, 0x08, 0x00, 0x13, 0x00, 0x00, +/* 0000FA20 */ 0x24, 0xFA, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x53, 0x50, 0x43, 0x00, 0xFE, 0xBB, 0x09, 0x41, +/* 0000FA30 */ 0xB2, 0x41, 0xD1, 0x00, 0x95, 0xFF, 0x5E, 0xAD, 0x01, 0x00, 0xFF, 0x5E, 0xAD, 0x01, 0x00, 0x45, +/* 0000FA40 */ 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0x5E, 0xAD, 0x01, 0x00, 0xFE, 0x2C, 0x02, 0xFE, 0x2C, 0x02, +/* 0000FA50 */ 0x08, 0x0B, 0x0F, 0x06, 0x2F, 0x2E, 0x03, 0x07, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x0E, 0x0F, +/* 0000FA60 */ 0x08, 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, 0x2B, 0x03, 0x0C, 0x06, 0xFE, 0x2D, 0x03, 0x06, 0xFE, +/* 0000FA70 */ 0x2C, 0x03, 0x0B, 0x07, 0x01, 0x01, 0x9D, 0xA8, 0x0D, 0xE7, 0x7F, 0x00, 0x8E, 0x03, 0x29, 0x10, +/* 0000FA80 */ 0x07, 0x05, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x0B, 0x8E, 0x01, 0x04, 0x11, 0x59, 0x02, 0x11, +/* 0000FA90 */ 0xA8, 0x11, 0x59, 0x03, 0x11, 0x8E, 0x01, 0x05, 0x11, 0x59, 0x04, 0x11, 0x1F, 0x05, 0x10, 0x10, +/* 0000FAA0 */ 0x45, 0x0D, 0x10, 0x5E, 0x10, 0x0D, 0x00, 0x0E, 0x4C, 0x00, 0x10, 0x8E, 0x03, 0x16, 0x10, 0x07, +/* 0000FAB0 */ 0x04, 0x00, 0x59, 0x00, 0x02, 0x8E, 0x01, 0x02, 0x11, 0x59, 0x01, 0x11, 0x8E, 0x01, 0x03, 0x11, +/* 0000FAC0 */ 0x59, 0x02, 0x11, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, +/* 0000FAD0 */ 0x5E, 0x12, 0x0D, 0x01, 0x7A, 0x12, 0x11, 0x02, 0x7A, 0x05, 0x11, 0x03, 0x7A, 0x05, 0x11, 0x04, +/* 0000FAE0 */ 0x7A, 0x08, 0x11, 0x05, 0x59, 0x03, 0x11, 0x1F, 0x04, 0xFF, 0x10, 0x8E, 0x01, 0x03, 0x10, 0x2D, +/* 0000FAF0 */ 0x10, 0x10, 0x0A, 0x94, 0x01, 0x03, 0x10, 0xEB, 0x09, 0x15, 0x00, 0xE9, 0x0C, 0x06, 0x8E, 0x03, +/* 0000FB00 */ 0x22, 0x10, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x0C, 0x1F, 0x02, 0xFF, 0x10, 0xEB, +/* 0000FB10 */ 0xA8, 0x00, 0x24, 0x00, 0x01, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, +/* 0000FB20 */ 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x94, +/* 0000FB30 */ 0x01, 0x00, 0x00, 0xFE, 0x0D, 0x02, 0xFE, 0x0D, 0x02, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, +/* 0000FB40 */ 0x95, 0x01, 0xFE, 0x94, 0x01, 0xFF, 0x94, 0xAD, 0x01, 0x00, 0x07, 0x05, 0x00, 0x00, 0x00, 0x27, +/* 0000FB50 */ 0x00, 0x5E, 0x00, 0x08, 0x00, 0x2B, 0x00, 0x40, 0x00, 0x8D, 0x00, 0x12, 0x00, 0x33, 0x00, 0x01, +/* 0000FB60 */ 0x00, 0x1D, 0x00, 0x14, 0x00, 0x8F, 0x00, 0x00, 0x7E, 0x5D, 0x00, 0xC1, 0x03, 0x1A, 0x0B, 0x00, +/* 0000FB70 */ 0xFE, 0x93, 0x09, 0x04, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x60, 0x03, 0x92, 0xFF, 0x27, 0xA8, 0x01, +/* 0000FB80 */ 0x00, 0xFF, 0x27, 0xA8, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0x27, 0xA8, 0x01, +/* 0000FB90 */ 0x00, 0xFE, 0x75, 0x04, 0xFE, 0x75, 0x04, 0x02, 0xFE, 0xA8, 0x04, 0xFE, 0xCF, 0x03, 0x08, 0x06, +/* 0000FBA0 */ 0x0B, 0x05, 0x2F, 0x2C, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x08, 0x09, 0x0A, 0x06, 0xFE, 0xD6, +/* 0000FBB0 */ 0x03, 0x06, 0xFE, 0xA3, 0x03, 0x01, 0x00, 0x08, 0x93, 0x4E, 0x07, 0x4E, 0x0B, 0x96, 0x02, 0x0B, +/* 0000FBC0 */ 0x4E, 0x0B, 0x96, 0x03, 0x0B, 0x2A, 0x0B, 0x06, 0x14, 0x03, 0x00, 0x0B, 0x02, 0x09, 0x06, 0x00, +/* 0000FBD0 */ 0xCF, 0x00, 0x00, 0x09, 0x74, 0x00, 0x2A, 0x0B, 0x06, 0x14, 0x03, 0x00, 0x0B, 0x03, 0x09, 0x0A, +/* 0000FBE0 */ 0x00, 0xCF, 0x0B, 0x01, 0xA1, 0x00, 0x06, 0x0B, 0x45, 0x06, 0x0B, 0x8E, 0x02, 0x24, 0x0C, 0x6C, +/* 0000FBF0 */ 0x0B, 0x0C, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0C, 0x59, 0x01, 0x06, 0x1F, 0x02, 0x0B, 0x0B, +/* 0000FC00 */ 0x45, 0x06, 0x0B, 0x8E, 0x02, 0x24, 0x0C, 0x6C, 0x0B, 0x0C, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 0000FC10 */ 0x0C, 0xA6, 0x0D, 0x06, 0x02, 0x59, 0x01, 0x0D, 0x1F, 0x02, 0x0B, 0x0B, 0x45, 0x07, 0x0B, 0xCF, +/* 0000FC20 */ 0x0B, 0x00, 0x96, 0x02, 0x0B, 0x96, 0x03, 0x04, 0x8E, 0x02, 0x25, 0x0B, 0x07, 0x04, 0x00, 0x59, +/* 0000FC30 */ 0x00, 0x05, 0x59, 0x01, 0x06, 0x59, 0x02, 0x07, 0xD6, 0x00, 0x0C, 0x59, 0x03, 0x0C, 0x1F, 0x04, +/* 0000FC40 */ 0xFF, 0x0B, 0x92, 0x02, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x21, 0x03, 0xFE, +/* 0000FC50 */ 0xA5, 0x04, 0xD1, 0xFF, 0x5A, 0xA8, 0x01, 0x00, 0x0B, 0x0C, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x32, +/* 0000FC60 */ 0x00, 0x06, 0x00, 0x1E, 0x00, 0x0B, 0x00, 0x2F, 0x00, 0x0A, 0x00, 0x28, 0x00, 0x18, 0x00, 0x2E, +/* 0000FC70 */ 0x00, 0x1C, 0x00, 0x70, 0x00, 0x06, 0x00, 0x17, 0x00, 0x03, 0x00, 0x14, 0x00, 0x1A, 0x00, 0xC0, +/* 0000FC80 */ 0x02, 0x08, 0x00, 0x11, 0x00, 0x00, 0x8A, 0xFC, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x13, 0x10, +/* 0000FC90 */ 0x43, 0x00, 0xFE, 0xA3, 0x09, 0x2A, 0xA2, 0x41, 0xD1, 0x00, 0x93, 0xFF, 0xEC, 0xA9, 0x01, 0x00, +/* 0000FCA0 */ 0xFF, 0xEC, 0xA9, 0x01, 0x00, 0x41, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0xEC, 0xA9, 0x01, 0x00, +/* 0000FCB0 */ 0xFE, 0x92, 0x02, 0xFE, 0x92, 0x02, 0x07, 0x0E, 0x11, 0x06, 0x55, 0x53, 0x03, 0x09, 0x09, 0x09, +/* 0000FCC0 */ 0x09, 0x09, 0x01, 0x10, 0x06, 0xFE, 0xA3, 0x03, 0x06, 0xFE, 0x94, 0x03, 0x07, 0x05, 0xFE, 0xA9, +/* 0000FCD0 */ 0x04, 0x08, 0x01, 0xFF, 0x01, 0x01, 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, 0x2B, 0x03, 0x0B, 0x06, +/* 0000FCE0 */ 0xFE, 0x2C, 0x03, 0x06, 0xFE, 0x2D, 0x03, 0xFE, 0x29, 0x01, 0x4E, 0x0F, 0x2A, 0x11, 0x0E, 0x15, +/* 0000FCF0 */ 0x03, 0x00, 0x11, 0x02, 0x09, 0x08, 0x00, 0x2A, 0x11, 0x0E, 0x15, 0x08, 0x00, 0x11, 0x03, 0x14, +/* 0000FD00 */ 0x03, 0x00, 0x0E, 0x04, 0x09, 0x15, 0x00, 0x8E, 0x03, 0x03, 0x12, 0x6C, 0x11, 0x12, 0x00, 0x07, +/* 0000FD10 */ 0x02, 0x00, 0x59, 0x00, 0x12, 0x59, 0x01, 0x05, 0x1F, 0x02, 0xFF, 0x11, 0x8E, 0x03, 0x24, 0x12, +/* 0000FD20 */ 0x6C, 0x11, 0x12, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x12, 0x59, 0x01, 0x0E, 0x1F, 0x02, 0x11, +/* 0000FD30 */ 0x11, 0x45, 0x0F, 0x11, 0x8E, 0x02, 0x0C, 0x11, 0x4A, 0x11, 0x07, 0x02, 0x00, 0x59, 0x00, 0x06, +/* 0000FD40 */ 0x59, 0x01, 0x0F, 0x1F, 0x02, 0x11, 0x11, 0x0F, 0x26, 0x00, 0x11, 0x8E, 0x03, 0x03, 0x12, 0x6C, +/* 0000FD50 */ 0x11, 0x12, 0x02, 0x07, 0x02, 0x00, 0x59, 0x00, 0x12, 0x8E, 0x03, 0x0C, 0x13, 0x07, 0x02, 0x00, +/* 0000FD60 */ 0x59, 0x00, 0x06, 0x59, 0x01, 0x0F, 0x1F, 0x02, 0x13, 0x13, 0x59, 0x01, 0x13, 0x1F, 0x02, 0xFF, +/* 0000FD70 */ 0x11, 0x8E, 0x03, 0x03, 0x12, 0x6C, 0x11, 0x12, 0x03, 0x07, 0x02, 0x00, 0x59, 0x00, 0x12, 0x59, +/* 0000FD80 */ 0x01, 0x0F, 0x1F, 0x02, 0x11, 0x11, 0x45, 0x0F, 0x11, 0xA8, 0x11, 0x15, 0x03, 0x00, 0x0F, 0x11, +/* 0000FD90 */ 0x09, 0x7C, 0x00, 0x8E, 0x03, 0x06, 0x11, 0x07, 0x04, 0x00, 0x59, 0x00, 0x06, 0x8E, 0x03, 0x18, +/* 0000FDA0 */ 0x12, 0x59, 0x01, 0x12, 0x8E, 0x01, 0x02, 0x12, 0x4A, 0x12, 0x59, 0x02, 0x12, 0x59, 0x03, 0x0F, +/* 0000FDB0 */ 0x1F, 0x04, 0x11, 0x11, 0x14, 0x03, 0x00, 0x11, 0x07, 0x09, 0x53, 0x00, 0x8E, 0x03, 0x36, 0x12, +/* 0000FDC0 */ 0x4A, 0x12, 0x6C, 0x11, 0x12, 0x04, 0x07, 0x04, 0x00, 0x59, 0x00, 0x12, 0x8E, 0x01, 0x02, 0x13, +/* 0000FDD0 */ 0x4A, 0x13, 0x59, 0x01, 0x13, 0x8E, 0x01, 0x03, 0x14, 0x4A, 0x14, 0x43, 0x13, 0x14, 0x2D, 0x14, +/* 0000FDE0 */ 0x13, 0x08, 0x01, 0x43, 0x01, 0x01, 0x03, 0x14, 0x59, 0x02, 0x13, 0xCE, 0x00, 0x00, 0x00, 0x00, +/* 0000FDF0 */ 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x7A, 0x0F, 0x13, 0x05, 0x7A, 0x0B, 0x13, 0x06, +/* 0000FE00 */ 0x7A, 0x0B, 0x13, 0x07, 0x7A, 0x0B, 0x13, 0x08, 0x59, 0x03, 0x13, 0x1F, 0x04, 0xFF, 0x11, 0xA8, +/* 0000FE10 */ 0x00, 0x24, 0x00, 0x01, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, +/* 0000FE20 */ 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, +/* 0000FE30 */ 0x00, 0x00, 0xFE, 0xAE, 0x02, 0xFE, 0x22, 0x03, 0xFE, 0xAF, 0x02, 0xFE, 0xEE, 0x01, 0xFE, 0x9C, +/* 0000FE40 */ 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFF, 0x0C, 0xAA, +/* 0000FE50 */ 0x01, 0x00, 0x09, 0x02, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x65, 0x00, 0x15, 0x00, 0x47, 0x00, 0x18, +/* 0000FE60 */ 0x00, 0x32, 0x00, 0x17, 0x00, 0x35, 0x00, 0x26, 0x00, 0x4B, 0x00, 0x18, 0x00, 0x37, 0x00, 0x33, +/* 0000FE70 */ 0x00, 0x65, 0x00, 0x55, 0x00, 0x77, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, +/* 0000FE80 */ 0xFE, 0x88, 0x09, 0x04, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x5E, 0x03, 0x91, 0xFF, 0xB2, 0xA6, 0x01, +/* 0000FE90 */ 0x00, 0xFF, 0xB2, 0xA6, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0xB2, 0xA6, 0x01, +/* 0000FEA0 */ 0x00, 0xF8, 0xF8, 0x05, 0x04, 0x06, 0x04, 0x1D, 0x1C, 0x02, 0x04, 0x02, 0x02, 0x02, 0x02, 0x05, +/* 0000FEB0 */ 0x08, 0x07, 0x5B, 0x8E, 0x02, 0x24, 0x07, 0x6C, 0x06, 0x07, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 0000FEC0 */ 0x07, 0x59, 0x01, 0x04, 0x1F, 0x02, 0x06, 0x06, 0x45, 0x04, 0x06, 0x8E, 0x01, 0x0E, 0x06, 0x4A, +/* 0000FED0 */ 0x06, 0x0F, 0x10, 0x00, 0x06, 0x8E, 0x01, 0x04, 0x06, 0x4A, 0x06, 0x07, 0x01, 0x00, 0x59, 0x00, +/* 0000FEE0 */ 0x02, 0x1F, 0x01, 0xFF, 0x06, 0x8E, 0x02, 0x03, 0x07, 0x6C, 0x06, 0x07, 0x01, 0x07, 0x03, 0x00, +/* 0000FEF0 */ 0x59, 0x00, 0x07, 0x59, 0x01, 0x04, 0x8E, 0x01, 0x0E, 0x08, 0x4A, 0x08, 0x59, 0x02, 0x08, 0x1F, +/* 0000FF00 */ 0x03, 0x06, 0x06, 0x42, 0x00, 0x06, 0x03, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x22, +/* 0000FF10 */ 0x03, 0xFE, 0xC0, 0x02, 0xFF, 0xE4, 0xA6, 0x01, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, +/* 0000FF20 */ 0x29, 0x00, 0x0A, 0x00, 0x25, 0x00, 0x10, 0x00, 0x2F, 0x00, 0x27, 0x00, 0x48, 0x00, 0x00, 0x7F, +/* 0000FF30 */ 0x5C, 0x00, 0x01, 0x00, 0x10, 0x03, 0x00, 0xFE, 0x4D, 0x09, 0x04, 0xA1, 0x41, 0xC1, 0x00, 0xFE, +/* 0000FF40 */ 0x66, 0x03, 0x90, 0xFF, 0xAE, 0x93, 0x01, 0x00, 0xFF, 0xAE, 0x93, 0x01, 0x00, 0x41, 0xFE, 0x00, +/* 0000FF50 */ 0x90, 0x01, 0x01, 0xFF, 0xAE, 0x93, 0x01, 0x00, 0xFE, 0xFE, 0x12, 0xFE, 0xFE, 0x12, 0x16, 0x25, +/* 0000FF60 */ 0x38, 0x04, 0xAD, 0x88, 0x02, 0x01, 0x37, 0x05, 0xFE, 0xAD, 0x03, 0x05, 0xFE, 0xAE, 0x03, 0x05, +/* 0000FF70 */ 0xFE, 0xAF, 0x03, 0x06, 0xFE, 0xB0, 0x03, 0x06, 0xFE, 0xB1, 0x03, 0x05, 0xFE, 0xB2, 0x03, 0x05, +/* 0000FF80 */ 0xFE, 0xB3, 0x03, 0x05, 0xFE, 0xB4, 0x03, 0x05, 0xFE, 0xB5, 0x03, 0x05, 0xFE, 0xB6, 0x03, 0x05, +/* 0000FF90 */ 0xFE, 0xB7, 0x03, 0x05, 0xFE, 0xB8, 0x03, 0x05, 0xFE, 0xB9, 0x03, 0x05, 0xFE, 0xBA, 0x03, 0x05, +/* 0000FFA0 */ 0xFE, 0xBB, 0x03, 0x05, 0xFE, 0xBC, 0x03, 0x06, 0xFE, 0x47, 0x03, 0x05, 0xFE, 0xBD, 0x03, 0x05, +/* 0000FFB0 */ 0xFE, 0xBE, 0x03, 0x05, 0xFE, 0xBF, 0x03, 0x05, 0xFE, 0xC0, 0x03, 0x05, 0xFE, 0xC1, 0x03, 0x05, +/* 0000FFC0 */ 0xFE, 0xC2, 0x03, 0x05, 0xFE, 0xC3, 0x03, 0x05, 0xFE, 0xC4, 0x03, 0x05, 0xFE, 0xC5, 0x03, 0x05, +/* 0000FFD0 */ 0xFE, 0xC6, 0x03, 0x05, 0xFE, 0xC7, 0x03, 0x05, 0xFE, 0xC8, 0x03, 0x05, 0xFE, 0xA7, 0x04, 0x05, +/* 0000FFE0 */ 0xFE, 0xC9, 0x03, 0x05, 0xFE, 0xCA, 0x03, 0x05, 0xFE, 0xCB, 0x03, 0x05, 0xFE, 0xCC, 0x03, 0x06, +/* 0000FFF0 */ 0xFE, 0xCF, 0x03, 0xFE, 0x7E, 0x02, 0x4E, 0x25, 0x4E, 0x26, 0x4E, 0x27, 0x4E, 0x28, 0x4E, 0x29, +/* 00010000 */ 0x4E, 0x2A, 0x4E, 0x2B, 0x4E, 0x2C, 0x4E, 0x2D, 0x4E, 0x2E, 0x4E, 0x2F, 0x4E, 0x30, 0x4E, 0x31, +/* 00010010 */ 0x4E, 0x32, 0x4E, 0x33, 0x4E, 0x34, 0x4E, 0x35, 0x4E, 0x36, 0x45, 0x25, 0x02, 0x45, 0x26, 0x03, +/* 00010020 */ 0x45, 0x38, 0x04, 0x01, 0x09, 0x01, 0x39, 0x25, 0x2D, 0x38, 0x38, 0x39, 0x2D, 0x38, 0x38, 0x05, +/* 00010030 */ 0x01, 0x09, 0x01, 0x39, 0x26, 0x2D, 0x38, 0x38, 0x39, 0x2D, 0x38, 0x38, 0x06, 0x45, 0x27, 0x38, +/* 00010040 */ 0x45, 0x28, 0x07, 0x2D, 0x38, 0x08, 0x09, 0x45, 0x29, 0x38, 0x45, 0x38, 0x0A, 0x01, 0x09, 0x01, +/* 00010050 */ 0x39, 0x28, 0x2D, 0x38, 0x38, 0x39, 0x2D, 0x38, 0x38, 0x05, 0x01, 0x09, 0x01, 0x39, 0x29, 0x2D, +/* 00010060 */ 0x38, 0x38, 0x39, 0x2D, 0x38, 0x38, 0x0B, 0x45, 0x2A, 0x38, 0x45, 0x38, 0x0C, 0x01, 0x09, 0x01, +/* 00010070 */ 0x39, 0x27, 0x2D, 0x38, 0x38, 0x39, 0x2D, 0x38, 0x38, 0x0D, 0x45, 0x2B, 0x38, 0x45, 0x38, 0x0A, +/* 00010080 */ 0x01, 0x09, 0x01, 0x39, 0x26, 0x2D, 0x38, 0x38, 0x39, 0x2D, 0x38, 0x38, 0x0E, 0x45, 0x2C, 0x38, +/* 00010090 */ 0x45, 0x38, 0x0A, 0x01, 0x09, 0x01, 0x39, 0x2C, 0x2D, 0x38, 0x38, 0x39, 0x2D, 0x38, 0x38, 0x0F, +/* 000100A0 */ 0x01, 0x09, 0x01, 0x39, 0x27, 0x2D, 0x38, 0x38, 0x39, 0x2D, 0x38, 0x38, 0x10, 0x45, 0x2D, 0x38, +/* 000100B0 */ 0x45, 0x38, 0x0A, 0x01, 0x09, 0x01, 0x39, 0x27, 0x2D, 0x38, 0x38, 0x39, 0x2D, 0x38, 0x38, 0x11, +/* 000100C0 */ 0x01, 0x09, 0x01, 0x39, 0x26, 0x2D, 0x38, 0x38, 0x39, 0x01, 0x09, 0x01, 0x39, 0x27, 0x2D, 0x38, +/* 000100D0 */ 0x38, 0x39, 0x2D, 0x38, 0x38, 0x13, 0x45, 0x2E, 0x38, 0x45, 0x38, 0x0A, 0x01, 0x09, 0x01, 0x39, +/* 000100E0 */ 0x25, 0x2D, 0x38, 0x38, 0x39, 0x2D, 0x38, 0x38, 0x14, 0x01, 0x09, 0x01, 0x39, 0x26, 0x2D, 0x38, +/* 000100F0 */ 0x38, 0x39, 0x2D, 0x38, 0x38, 0x13, 0x45, 0x2F, 0x38, 0x45, 0x38, 0x0A, 0x01, 0x09, 0x01, 0x39, +/* 00010100 */ 0x25, 0x2D, 0x38, 0x38, 0x39, 0x2D, 0x38, 0x38, 0x15, 0x45, 0x30, 0x38, 0x45, 0x38, 0x0A, 0x01, +/* 00010110 */ 0x09, 0x01, 0x39, 0x25, 0x2D, 0x38, 0x38, 0x39, 0x2D, 0x38, 0x38, 0x16, 0x01, 0x09, 0x01, 0x39, +/* 00010120 */ 0x25, 0x2D, 0x38, 0x38, 0x39, 0x2D, 0x38, 0x38, 0x17, 0x45, 0x31, 0x38, 0x01, 0x09, 0x01, 0x38, +/* 00010130 */ 0x25, 0x2D, 0x38, 0x38, 0x18, 0x2D, 0x38, 0x0A, 0x38, 0x45, 0x39, 0x19, 0x01, 0x09, 0x01, 0x3A, +/* 00010140 */ 0x31, 0x2D, 0x39, 0x39, 0x3A, 0x2D, 0x39, 0x39, 0x1A, 0x2D, 0x38, 0x38, 0x39, 0x45, 0x39, 0x05, +/* 00010150 */ 0x01, 0x09, 0x01, 0x3A, 0x25, 0x2D, 0x39, 0x39, 0x3A, 0x2D, 0x39, 0x39, 0x1B, 0x2D, 0x38, 0x38, +/* 00010160 */ 0x39, 0x2D, 0x38, 0x38, 0x0B, 0x45, 0x32, 0x38, 0x45, 0x38, 0x1C, 0x01, 0x09, 0x01, 0x39, 0x32, +/* 00010170 */ 0x2D, 0x38, 0x38, 0x39, 0x2D, 0x38, 0x38, 0x0B, 0x45, 0x39, 0x1D, 0x01, 0x09, 0x01, 0x3A, 0x30, +/* 00010180 */ 0x2D, 0x39, 0x39, 0x3A, 0x2D, 0x39, 0x39, 0x1E, 0x2D, 0x38, 0x38, 0x39, 0x45, 0x39, 0x1D, 0x01, +/* 00010190 */ 0x09, 0x01, 0x3A, 0x2F, 0x2D, 0x39, 0x39, 0x3A, 0x2D, 0x39, 0x39, 0x1E, 0x2D, 0x38, 0x38, 0x39, +/* 000101A0 */ 0x45, 0x33, 0x38, 0x45, 0x38, 0x19, 0x01, 0x09, 0x01, 0x39, 0x2E, 0x2D, 0x38, 0x38, 0x39, 0x2D, +/* 000101B0 */ 0x38, 0x38, 0x1F, 0x45, 0x39, 0x20, 0x01, 0x09, 0x01, 0x3A, 0x2D, 0x2D, 0x39, 0x39, 0x3A, 0x2D, +/* 000101C0 */ 0x39, 0x39, 0x21, 0x2D, 0x38, 0x38, 0x39, 0x45, 0x39, 0x19, 0x01, 0x09, 0x01, 0x3A, 0x2B, 0x2D, +/* 000101D0 */ 0x39, 0x39, 0x3A, 0x2D, 0x39, 0x39, 0x22, 0x2D, 0x38, 0x38, 0x39, 0x45, 0x34, 0x38, 0x45, 0x38, +/* 000101E0 */ 0x23, 0x01, 0x09, 0x01, 0x39, 0x33, 0x2D, 0x38, 0x38, 0x39, 0x2D, 0x38, 0x38, 0x23, 0x01, 0x09, +/* 000101F0 */ 0x01, 0x39, 0x34, 0x2D, 0x38, 0x38, 0x39, 0x2D, 0x38, 0x38, 0x23, 0x45, 0x35, 0x38, 0x45, 0x38, +/* 00010200 */ 0x0A, 0x01, 0x09, 0x01, 0x39, 0x35, 0x2D, 0x38, 0x38, 0x39, 0x2D, 0x38, 0x38, 0x05, 0x01, 0x09, +/* 00010210 */ 0x01, 0x39, 0x2B, 0x2D, 0x38, 0x38, 0x39, 0x2D, 0x38, 0x38, 0x05, 0x01, 0x09, 0x01, 0x39, 0x2A, +/* 00010220 */ 0x2D, 0x38, 0x38, 0x39, 0x2D, 0x38, 0x38, 0x0B, 0x45, 0x36, 0x38, 0x8E, 0x02, 0x0A, 0x38, 0x07, +/* 00010230 */ 0x03, 0x00, 0x59, 0x01, 0x33, 0x59, 0x02, 0x24, 0xC4, 0x03, 0x38, 0x38, 0x01, 0x43, 0x01, 0x01, +/* 00010240 */ 0x0F, 0x38, 0x8E, 0x02, 0x0A, 0x38, 0x07, 0x03, 0x00, 0x59, 0x01, 0x34, 0x59, 0x02, 0x24, 0xC4, +/* 00010250 */ 0x03, 0x38, 0x38, 0x01, 0x43, 0x01, 0x01, 0x10, 0x38, 0x8E, 0x02, 0x0A, 0x38, 0x07, 0x03, 0x00, +/* 00010260 */ 0x59, 0x01, 0x36, 0x59, 0x02, 0x24, 0xC4, 0x03, 0x38, 0x38, 0x01, 0x43, 0x01, 0x01, 0x11, 0x38, +/* 00010270 */ 0xA8, 0x00, 0x24, 0x00, 0xFF, 0x8E, 0x98, 0x01, 0x00, 0x16, 0x24, 0x00, 0x00, 0x00, 0x03, 0x00, +/* 00010280 */ 0x1F, 0x00, 0x03, 0x00, 0x1F, 0x00, 0x20, 0x00, 0x33, 0x00, 0x03, 0x00, 0x77, 0x00, 0x07, 0x00, +/* 00010290 */ 0xC0, 0x00, 0x20, 0x00, 0x44, 0x00, 0x13, 0x00, 0x7D, 0x00, 0x13, 0x00, 0x94, 0x00, 0x20, 0x00, +/* 000102A0 */ 0x83, 0x00, 0x29, 0x00, 0x83, 0x00, 0x20, 0x00, 0x74, 0x00, 0x13, 0x00, 0x6A, 0x00, 0x20, 0x00, +/* 000102B0 */ 0x7A, 0x00, 0x3C, 0x00, 0x00, 0x04, 0x3B, 0x00, 0x4C, 0x01, 0x3B, 0x00, 0x5A, 0x01, 0x20, 0x00, +/* 000102C0 */ 0x4B, 0x00, 0x2D, 0x00, 0x6E, 0x00, 0x17, 0x00, 0x66, 0x00, 0x17, 0x00, 0x8B, 0x00, 0x19, 0x00, +/* 000102D0 */ 0x72, 0x00, 0x00, 0x7F, 0x4C, 0x00, 0x00, 0x20, 0x10, 0x03, 0x00, 0xFE, 0x46, 0x09, 0x04, 0xA1, +/* 000102E0 */ 0x41, 0xC1, 0x00, 0xFE, 0x51, 0x03, 0x8F, 0xFF, 0x71, 0x92, 0x01, 0x00, 0xFF, 0x71, 0x92, 0x01, +/* 000102F0 */ 0x00, 0x41, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFF, 0x71, 0x92, 0x01, 0x00, 0x55, 0x55, 0x02, 0x02, +/* 00010300 */ 0x03, 0x05, 0x05, 0x02, 0x01, 0x02, 0x0D, 0xE2, 0x03, 0x00, 0x01, 0x43, 0x01, 0x01, 0x0E, 0x03, +/* 00010310 */ 0xA8, 0x00, 0x24, 0x00, 0x0A, 0xFE, 0xAB, 0x03, 0x01, 0xFF, 0x9F, 0x92, 0x01, 0x00, 0x02, 0x00, +/* 00010320 */ 0x00, 0x00, 0x00, 0x0B, 0x00, 0x26, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x43, 0x50, 0x03, 0x00, +/* 00010330 */ 0xFE, 0x35, 0x09, 0x04, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x5B, 0x03, 0x8E, 0xFF, 0x0C, 0x90, 0x01, +/* 00010340 */ 0x00, 0xFF, 0x0C, 0x90, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x06, 0x06, 0xFF, 0x0C, 0x90, 0x01, +/* 00010350 */ 0x00, 0xFE, 0x45, 0x02, 0xFE, 0x45, 0x02, 0x0C, 0x07, 0x0F, 0x08, 0x3A, 0x37, 0x02, 0x05, 0x03, +/* 00010360 */ 0x03, 0x03, 0x03, 0x01, 0x0E, 0x0F, 0x06, 0xFE, 0xD6, 0x03, 0x08, 0x06, 0xFE, 0xA8, 0x03, 0x05, +/* 00010370 */ 0xFE, 0xA9, 0x03, 0x06, 0xFE, 0xAA, 0x03, 0xC2, 0x4E, 0x0C, 0x4E, 0x0D, 0x97, 0x10, 0x07, 0x08, +/* 00010380 */ 0x45, 0x0C, 0x10, 0x2A, 0x10, 0x0C, 0x15, 0x03, 0x00, 0x10, 0x02, 0x09, 0xA2, 0x00, 0x8E, 0x02, +/* 00010390 */ 0x24, 0x11, 0x6C, 0x10, 0x11, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x11, 0x59, 0x01, 0x0C, 0x1F, +/* 000103A0 */ 0x02, 0x10, 0x10, 0x45, 0x0D, 0x10, 0x8E, 0x02, 0x21, 0x10, 0x07, 0x02, 0x00, 0x59, 0x00, 0x03, +/* 000103B0 */ 0x59, 0x01, 0x0D, 0x1F, 0x02, 0x10, 0x10, 0x0F, 0x0D, 0x00, 0x10, 0x12, 0x08, 0x00, 0x0D, 0x09, +/* 000103C0 */ 0x11, 0x03, 0x00, 0x0D, 0x0A, 0x09, 0x4D, 0x00, 0x8E, 0x02, 0x03, 0x11, 0x6C, 0x10, 0x11, 0x01, +/* 000103D0 */ 0x07, 0x04, 0x00, 0x59, 0x00, 0x11, 0x8E, 0x02, 0x0C, 0x12, 0x07, 0x02, 0x00, 0x59, 0x00, 0x03, +/* 000103E0 */ 0x59, 0x01, 0x0C, 0x1F, 0x02, 0x12, 0x12, 0x59, 0x01, 0x12, 0x8E, 0x02, 0x0C, 0x12, 0x07, 0x02, +/* 000103F0 */ 0x00, 0x59, 0x00, 0x03, 0x59, 0x01, 0x08, 0x1F, 0x02, 0x12, 0x12, 0x59, 0x02, 0x12, 0x2D, 0x12, +/* 00010400 */ 0x04, 0x09, 0x2D, 0x12, 0x12, 0x05, 0x2D, 0x12, 0x12, 0x0A, 0x2D, 0x12, 0x12, 0x06, 0x59, 0x03, +/* 00010410 */ 0x12, 0x1F, 0x04, 0xFF, 0x10, 0x8E, 0x02, 0x10, 0x11, 0x6C, 0x10, 0x11, 0x02, 0x07, 0x02, 0x00, +/* 00010420 */ 0x59, 0x00, 0x11, 0x59, 0x01, 0x0D, 0x1F, 0x02, 0x00, 0x10, 0x09, 0x0B, 0x00, 0x09, 0x06, 0x00, +/* 00010430 */ 0x45, 0x00, 0x0B, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x23, 0x03, 0xFE, 0xAC, 0x02, +/* 00010440 */ 0x26, 0xFF, 0x5E, 0x90, 0x01, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x2D, 0x00, 0x0B, +/* 00010450 */ 0x00, 0x33, 0x00, 0x18, 0x00, 0x41, 0x00, 0x22, 0x00, 0x65, 0x00, 0x4D, 0x00, 0x8D, 0x00, 0x1B, +/* 00010460 */ 0x00, 0x40, 0x00, 0x08, 0x00, 0x1F, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, +/* 00010470 */ 0xFE, 0x1B, 0x09, 0x04, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x50, 0x03, 0x8D, 0xFF, 0xEF, 0x8C, 0x01, +/* 00010480 */ 0x00, 0xFF, 0xEF, 0x8C, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x06, 0x06, 0xFF, 0xEF, 0x8C, 0x01, +/* 00010490 */ 0x00, 0xFE, 0x17, 0x03, 0xFE, 0x17, 0x03, 0x0B, 0x0A, 0x11, 0x0A, 0x51, 0x4B, 0x02, 0x06, 0x04, +/* 000104A0 */ 0x04, 0x04, 0x04, 0x10, 0x06, 0xFE, 0xA2, 0x03, 0x06, 0xFE, 0xA3, 0x03, 0x06, 0xFE, 0xA4, 0x03, +/* 000104B0 */ 0x08, 0x01, 0xFF, 0x05, 0xFE, 0xA5, 0x03, 0x05, 0xFE, 0xA7, 0x03, 0x05, 0xFE, 0xA6, 0x03, 0xFE, +/* 000104C0 */ 0x10, 0x01, 0x4E, 0x0F, 0x97, 0x11, 0x0A, 0x0B, 0x45, 0x0F, 0x11, 0xA8, 0x11, 0x15, 0x03, 0x00, +/* 000104D0 */ 0x0F, 0x11, 0x09, 0xF3, 0x00, 0x0C, 0x03, 0x00, 0x0C, 0x02, 0x09, 0x18, 0x00, 0x8E, 0x02, 0x24, +/* 000104E0 */ 0x12, 0x6C, 0x11, 0x12, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x12, 0x59, 0x01, 0x0F, 0x1F, 0x02, +/* 000104F0 */ 0x11, 0x11, 0x45, 0x0F, 0x11, 0x0C, 0x03, 0x00, 0x0C, 0x03, 0x09, 0x18, 0x00, 0x8E, 0x02, 0x24, +/* 00010500 */ 0x12, 0x6C, 0x11, 0x12, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x12, 0x59, 0x01, 0x0F, 0x1F, 0x02, +/* 00010510 */ 0x11, 0x11, 0x45, 0x0F, 0x11, 0x0C, 0x03, 0x00, 0x0C, 0x04, 0x09, 0x18, 0x00, 0x8E, 0x02, 0x24, +/* 00010520 */ 0x12, 0x6C, 0x11, 0x12, 0x02, 0x07, 0x02, 0x00, 0x59, 0x00, 0x12, 0x59, 0x01, 0x0F, 0x1F, 0x02, +/* 00010530 */ 0x11, 0x11, 0x45, 0x0F, 0x11, 0xA8, 0x11, 0x15, 0x03, 0x00, 0x0D, 0x11, 0x09, 0x83, 0x00, 0x8E, +/* 00010540 */ 0x02, 0x06, 0x11, 0x07, 0x04, 0x00, 0x59, 0x00, 0x05, 0x8E, 0x02, 0x18, 0x12, 0x59, 0x01, 0x12, +/* 00010550 */ 0x59, 0x02, 0x0D, 0x59, 0x03, 0x0F, 0x1F, 0x04, 0x11, 0x11, 0x0C, 0x03, 0x00, 0x11, 0x06, 0x09, +/* 00010560 */ 0x60, 0x00, 0x8E, 0x02, 0x03, 0x12, 0x6C, 0x11, 0x12, 0x03, 0x07, 0x04, 0x00, 0x59, 0x00, 0x12, +/* 00010570 */ 0x8E, 0x02, 0x0C, 0x13, 0x07, 0x02, 0x00, 0x59, 0x00, 0x05, 0x59, 0x01, 0x0F, 0x1F, 0x02, 0x13, +/* 00010580 */ 0x13, 0x59, 0x01, 0x13, 0x8E, 0x02, 0x0C, 0x13, 0x07, 0x02, 0x00, 0x59, 0x00, 0x05, 0x59, 0x01, +/* 00010590 */ 0x0B, 0x1F, 0x02, 0x13, 0x13, 0x59, 0x02, 0x13, 0x8E, 0x02, 0x06, 0x13, 0x07, 0x04, 0x00, 0x59, +/* 000105A0 */ 0x00, 0x05, 0x8E, 0x02, 0x19, 0x14, 0x59, 0x01, 0x14, 0x59, 0x02, 0x0D, 0x59, 0x03, 0x08, 0x1F, +/* 000105B0 */ 0x04, 0x13, 0x13, 0x2D, 0x13, 0x07, 0x13, 0x2D, 0x13, 0x13, 0x09, 0x59, 0x03, 0x13, 0x1F, 0x04, +/* 000105C0 */ 0xFF, 0x11, 0x45, 0x00, 0x0F, 0x09, 0x08, 0x00, 0x45, 0x00, 0x0E, 0x09, 0x02, 0x00, 0xA8, 0x00, +/* 000105D0 */ 0x24, 0x00, 0xFE, 0x24, 0x03, 0xFE, 0x22, 0x03, 0xFE, 0x23, 0x03, 0xFE, 0xAC, 0x02, 0xFF, 0x37, +/* 000105E0 */ 0x8D, 0x01, 0x00, 0x0D, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x28, 0x00, 0x0A, 0x00, 0x27, 0x00, +/* 000105F0 */ 0x08, 0x00, 0x29, 0x00, 0x18, 0x00, 0x45, 0x00, 0x08, 0x00, 0x28, 0x00, 0x18, 0x00, 0x3D, 0x00, +/* 00010600 */ 0x08, 0x00, 0x28, 0x00, 0x18, 0x00, 0x3D, 0x00, 0x2D, 0x00, 0x6B, 0x00, 0x60, 0x00, 0xA6, 0x00, +/* 00010610 */ 0x06, 0x00, 0x21, 0x00, 0x08, 0x00, 0x15, 0x00, 0x00, 0x7E, 0x5C, 0x00, 0xC1, 0x13, 0x10, 0x4B, +/* 00010620 */ 0x00, 0xFE, 0xF0, 0x08, 0x14, 0xA0, 0x41, 0xD1, 0x00, 0x86, 0xFF, 0xDE, 0x87, 0x01, 0x00, 0xFF, +/* 00010630 */ 0xDE, 0x87, 0x01, 0x00, 0x06, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFF, 0xDE, 0x87, 0x01, 0x00, 0xFE, +/* 00010640 */ 0xE0, 0x04, 0xFE, 0xE0, 0x04, 0x04, 0x0A, 0x0B, 0x04, 0x17, 0x17, 0x02, 0x01, 0x06, 0x06, 0x06, +/* 00010650 */ 0x06, 0x01, 0x0A, 0x08, 0x06, 0xFE, 0x21, 0x03, 0x06, 0xFE, 0x22, 0x03, 0x06, 0xFE, 0x23, 0x03, +/* 00010660 */ 0x06, 0xFE, 0x24, 0x03, 0x06, 0xFE, 0xA5, 0x04, 0x06, 0xFE, 0xA6, 0x04, 0x07, 0x58, 0x8E, 0x02, +/* 00010670 */ 0x04, 0x0B, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00010680 */ 0x00, 0x0C, 0x00, 0x00, 0x00, 0xD9, 0x00, 0x0D, 0x0C, 0x7A, 0x0D, 0x0C, 0x00, 0xD9, 0x01, 0x0D, +/* 00010690 */ 0x0C, 0x7A, 0x0D, 0x0C, 0x01, 0xD9, 0x02, 0x0D, 0x0C, 0x7A, 0x0D, 0x0C, 0x02, 0xD9, 0x03, 0x0D, +/* 000106A0 */ 0x0C, 0x7A, 0x0D, 0x0C, 0x03, 0xD9, 0x04, 0x0D, 0x0C, 0x7A, 0x0D, 0x0C, 0x04, 0xD9, 0x05, 0x0D, +/* 000106B0 */ 0x0C, 0x7A, 0x0D, 0x0C, 0x05, 0x59, 0x01, 0x0C, 0x59, 0x02, 0x09, 0x1F, 0x03, 0x00, 0x0B, 0x09, +/* 000106C0 */ 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x06, 0x00, +/* 000106D0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x03, 0x00, 0x00, 0x22, 0x03, 0x00, 0x00, 0x23, 0x03, 0x00, +/* 000106E0 */ 0x00, 0x24, 0x03, 0x00, 0x00, 0xA5, 0x04, 0x00, 0x00, 0xA6, 0x04, 0x00, 0x00, 0xFE, 0x21, 0x03, +/* 000106F0 */ 0xFE, 0x22, 0x03, 0xFE, 0x23, 0x03, 0xFE, 0x24, 0x03, 0xFE, 0xA5, 0x04, 0xFE, 0xA6, 0x04, 0xFF, +/* 00010700 */ 0xF4, 0x87, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x56, 0x00, 0xC9, 0x04, 0x00, 0x18, 0x0A, +/* 00010710 */ 0x01, 0x00, 0xA1, 0x09, 0x01, 0x00, 0x2A, 0x09, 0x01, 0x00, 0xB3, 0x08, 0x01, 0x00, 0xCB, 0x07, +/* 00010720 */ 0x01, 0x00, 0x26, 0x07, 0x01, 0x00, 0x7F, 0x7C, 0x00, 0x03, 0x00, 0x10, 0x17, 0x00, 0xFE, 0x0E, +/* 00010730 */ 0x09, 0x19, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xA6, 0x04, 0x8C, 0xFF, 0x00, 0x00, 0x00, 0x02, 0xFF, +/* 00010740 */ 0x72, 0x8B, 0x01, 0x00, 0xFF, 0x72, 0x8B, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFF, +/* 00010750 */ 0x72, 0x8B, 0x01, 0x00, 0xFE, 0x35, 0x01, 0xFE, 0x35, 0x01, 0x05, 0x04, 0x07, 0x05, 0x17, 0x15, +/* 00010760 */ 0x14, 0x02, 0x03, 0x01, 0x06, 0x00, 0x42, 0x08, 0x0B, 0x46, 0xEC, 0x00, 0x0E, 0x3C, 0x00, 0x04, +/* 00010770 */ 0x8E, 0x02, 0x06, 0x07, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x8E, 0x02, 0x14, 0x08, 0x59, 0x01, +/* 00010780 */ 0x08, 0x59, 0x02, 0x04, 0x59, 0x03, 0x05, 0x1F, 0x04, 0x07, 0x07, 0x0E, 0x06, 0x00, 0x07, 0x45, +/* 00010790 */ 0x00, 0x03, 0x09, 0x19, 0x00, 0x8E, 0x02, 0x11, 0x07, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x59, +/* 000107A0 */ 0x01, 0x04, 0x1F, 0x02, 0x07, 0x07, 0x45, 0x04, 0x07, 0x09, 0xBE, 0xFF, 0xA8, 0x00, 0x24, 0x00, +/* 000107B0 */ 0xFF, 0xC7, 0x8B, 0x01, 0x00, 0x05, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x19, 0x00, 0x1F, 0x00, +/* 000107C0 */ 0x54, 0x00, 0x06, 0x00, 0x37, 0x00, 0x19, 0x00, 0x3B, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, +/* 000107D0 */ 0x10, 0x07, 0x00, 0xFE, 0x05, 0x09, 0x16, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xA5, 0x04, 0x8B, 0xFF, +/* 000107E0 */ 0x00, 0x00, 0x00, 0x02, 0xFF, 0x5B, 0x8A, 0x01, 0x00, 0xFF, 0x5B, 0x8A, 0x01, 0x00, 0x01, 0xFE, +/* 000107F0 */ 0x00, 0x90, 0x02, 0x02, 0xFF, 0x5B, 0x8A, 0x01, 0x00, 0xFB, 0xFB, 0x09, 0x06, 0x0A, 0x07, 0x28, +/* 00010800 */ 0x23, 0x02, 0x04, 0x02, 0x02, 0x02, 0x02, 0x09, 0x08, 0x01, 0x00, 0x01, 0x02, 0x01, 0x20, 0x82, +/* 00010810 */ 0x8E, 0x02, 0x0B, 0x0A, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x06, 0x1F, 0x02, 0x0A, +/* 00010820 */ 0x0A, 0x45, 0x07, 0x0A, 0x45, 0x08, 0x03, 0x8E, 0x02, 0x21, 0x0A, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 00010830 */ 0x02, 0x59, 0x01, 0x07, 0x1F, 0x02, 0x0A, 0x0A, 0x0F, 0x4C, 0x00, 0x0A, 0x8E, 0x02, 0x20, 0x0A, +/* 00010840 */ 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x07, 0x1F, 0x02, 0x0A, 0x0A, 0x0E, 0x37, 0x00, +/* 00010850 */ 0x0A, 0x8E, 0x02, 0x10, 0x0B, 0x6C, 0x0A, 0x0B, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0B, 0x45, +/* 00010860 */ 0x0C, 0x07, 0x8E, 0x02, 0x10, 0x0E, 0x6C, 0x0D, 0x0E, 0x01, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0E, +/* 00010870 */ 0x59, 0x01, 0x04, 0x59, 0x02, 0x05, 0x1F, 0x03, 0x0D, 0x0D, 0x31, 0x0C, 0x0C, 0x0D, 0x59, 0x01, +/* 00010880 */ 0x0C, 0x1F, 0x02, 0x0A, 0x0A, 0x45, 0x08, 0x0A, 0x45, 0x00, 0x08, 0x09, 0x02, 0x00, 0xA8, 0x00, +/* 00010890 */ 0x24, 0x00, 0x1D, 0x2C, 0xFF, 0x7A, 0x8A, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, +/* 000108A0 */ 0x29, 0x00, 0x03, 0x00, 0x19, 0x00, 0x2A, 0x00, 0x38, 0x00, 0x37, 0x00, 0x49, 0x00, 0x08, 0x00, +/* 000108B0 */ 0x18, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0x01, 0x00, 0x10, 0x07, 0x00, 0xFE, 0x01, 0x09, 0x1E, 0xA2, +/* 000108C0 */ 0x41, 0xC1, 0x00, 0xFE, 0x24, 0x03, 0x8A, 0xFF, 0x00, 0x00, 0x00, 0x02, 0xFF, 0xE5, 0x89, 0x01, +/* 000108D0 */ 0x00, 0xFF, 0xE5, 0x89, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0xE5, 0x89, 0x01, +/* 000108E0 */ 0x00, 0x5D, 0x5D, 0x03, 0x03, 0x05, 0x03, 0x10, 0x0F, 0x02, 0x01, 0x04, 0x08, 0x2D, 0xA8, 0x05, +/* 000108F0 */ 0x15, 0x03, 0x00, 0x03, 0x05, 0x09, 0x17, 0x00, 0x8E, 0x02, 0x08, 0x05, 0x07, 0x02, 0x00, 0x59, +/* 00010900 */ 0x00, 0x02, 0x59, 0x01, 0x03, 0x1F, 0x02, 0x05, 0x05, 0x45, 0x00, 0x05, 0x09, 0x05, 0x00, 0xA8, +/* 00010910 */ 0x05, 0x46, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFF, 0x04, 0x8A, 0x01, 0x00, +/* 00010920 */ 0x02, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x3D, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0x01, 0x00, 0x10, +/* 00010930 */ 0x07, 0x00, 0xFE, 0xFD, 0x08, 0x16, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x23, 0x03, 0x89, 0xFF, 0x00, +/* 00010940 */ 0x00, 0x00, 0x02, 0xFF, 0x6E, 0x89, 0x01, 0x00, 0xFF, 0x6E, 0x89, 0x01, 0x00, 0x01, 0xFE, 0x00, +/* 00010950 */ 0x90, 0x02, 0x02, 0xFF, 0x6E, 0x89, 0x01, 0x00, 0x56, 0x56, 0x03, 0x03, 0x05, 0x03, 0x10, 0x0F, +/* 00010960 */ 0x02, 0x01, 0x04, 0x08, 0x2D, 0xA8, 0x05, 0x14, 0x03, 0x00, 0x03, 0x05, 0x09, 0x08, 0x00, 0xA9, +/* 00010970 */ 0x05, 0x45, 0x00, 0x05, 0x09, 0x14, 0x00, 0x8E, 0x02, 0x0B, 0x05, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 00010980 */ 0x02, 0x59, 0x01, 0x03, 0x1F, 0x02, 0x05, 0x05, 0x46, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA8, 0x00, +/* 00010990 */ 0x24, 0x00, 0xFF, 0x8D, 0x89, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x36, 0x00, +/* 000109A0 */ 0x00, 0x7F, 0x5C, 0x00, 0x01, 0x00, 0x10, 0x07, 0x00, 0xFE, 0xF9, 0x08, 0x16, 0xA2, 0x41, 0xC1, +/* 000109B0 */ 0x00, 0xFE, 0x22, 0x03, 0x88, 0xFF, 0x00, 0x00, 0x00, 0x02, 0xFF, 0xF9, 0x88, 0x01, 0x00, 0xFF, +/* 000109C0 */ 0xF9, 0x88, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0xF9, 0x88, 0x01, 0x00, 0x5C, +/* 000109D0 */ 0x5C, 0x03, 0x03, 0x05, 0x03, 0x10, 0x0F, 0x02, 0x01, 0x04, 0x08, 0x2D, 0xA8, 0x05, 0x15, 0x03, +/* 000109E0 */ 0x00, 0x03, 0x05, 0x09, 0x17, 0x00, 0x8E, 0x02, 0x0C, 0x05, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, +/* 000109F0 */ 0x59, 0x01, 0x03, 0x1F, 0x02, 0x05, 0x05, 0x45, 0x00, 0x05, 0x09, 0x05, 0x00, 0xA8, 0x05, 0x46, +/* 00010A00 */ 0x00, 0x05, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFF, 0x18, 0x89, 0x01, 0x00, 0x02, 0x00, +/* 00010A10 */ 0x00, 0x00, 0x00, 0x2B, 0x00, 0x3C, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x07, 0x00, +/* 00010A20 */ 0xFE, 0xF2, 0x08, 0x16, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x21, 0x03, 0x87, 0xFF, 0x00, 0x00, 0x00, +/* 00010A30 */ 0x02, 0xFF, 0x20, 0x88, 0x01, 0x00, 0xFF, 0x20, 0x88, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x02, +/* 00010A40 */ 0x02, 0xFF, 0x20, 0x88, 0x01, 0x00, 0xC0, 0xC0, 0x04, 0x04, 0x06, 0x03, 0x17, 0x16, 0x02, 0x02, +/* 00010A50 */ 0x01, 0x01, 0x01, 0x01, 0x05, 0x07, 0x08, 0x47, 0x14, 0x03, 0x00, 0x04, 0x02, 0x09, 0x12, 0x00, +/* 00010A60 */ 0x8E, 0x02, 0x03, 0x07, 0x6C, 0x06, 0x07, 0x00, 0x07, 0x01, 0x00, 0x59, 0x00, 0x07, 0x1F, 0x01, +/* 00010A70 */ 0xFF, 0x06, 0xA8, 0x06, 0x15, 0x03, 0x00, 0x04, 0x06, 0x09, 0x17, 0x00, 0x8E, 0x02, 0x09, 0x06, +/* 00010A80 */ 0x07, 0x02, 0x00, 0x59, 0x00, 0x03, 0x59, 0x01, 0x04, 0x1F, 0x02, 0x06, 0x06, 0x45, 0x00, 0x06, +/* 00010A90 */ 0x09, 0x05, 0x00, 0xA8, 0x06, 0x46, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, +/* 00010AA0 */ 0xAA, 0x02, 0xFF, 0x3F, 0x88, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x26, 0x00, +/* 00010AB0 */ 0x12, 0x00, 0x3E, 0x00, 0x2B, 0x00, 0x3C, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x63, 0x50, 0x03, +/* 00010AC0 */ 0x00, 0xFE, 0xD5, 0x08, 0x20, 0xA0, 0x41, 0xC1, 0x00, 0xFE, 0xF6, 0x02, 0x85, 0xFF, 0x57, 0x84, +/* 00010AD0 */ 0x01, 0x00, 0xFF, 0x57, 0x84, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFF, 0x57, 0x84, +/* 00010AE0 */ 0x01, 0x00, 0xFE, 0x70, 0x03, 0xFE, 0x70, 0x03, 0x07, 0x05, 0x08, 0x06, 0x3E, 0x3C, 0x02, 0x06, +/* 00010AF0 */ 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x07, 0x08, 0x08, 0x01, 0x00, 0x01, 0x01, 0xCB, 0x4E, 0x05, +/* 00010B00 */ 0x4E, 0x06, 0x8E, 0x01, 0x0D, 0x09, 0x4A, 0x09, 0x0E, 0x09, 0x00, 0x09, 0x8E, 0x01, 0x0D, 0x00, +/* 00010B10 */ 0x4A, 0x00, 0x09, 0xB2, 0x00, 0x8E, 0x02, 0x33, 0x09, 0x4A, 0x09, 0x0E, 0x68, 0x00, 0x09, 0x8E, +/* 00010B20 */ 0x01, 0x0F, 0x09, 0x4A, 0x09, 0x0F, 0x10, 0x00, 0x09, 0x8E, 0x01, 0x05, 0x09, 0x4A, 0x09, 0x07, +/* 00010B30 */ 0x01, 0x00, 0x59, 0x00, 0x02, 0x1F, 0x01, 0xFF, 0x09, 0x8E, 0x01, 0x0A, 0x09, 0x4A, 0x09, 0x07, +/* 00010B40 */ 0x01, 0x00, 0x59, 0x00, 0x02, 0x1F, 0x01, 0x09, 0x09, 0x45, 0x05, 0x09, 0x8E, 0x02, 0x03, 0x0A, +/* 00010B50 */ 0x6C, 0x09, 0x0A, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0A, 0x59, 0x01, 0x05, 0x8E, 0x01, 0x0F, +/* 00010B60 */ 0x0B, 0x4A, 0x0B, 0x59, 0x02, 0x0B, 0x1F, 0x03, 0x09, 0x09, 0x45, 0x06, 0x09, 0x0E, 0x0D, 0x00, +/* 00010B70 */ 0x06, 0x97, 0x09, 0x06, 0x03, 0x01, 0x43, 0x01, 0x01, 0x0D, 0x09, 0x09, 0x06, 0x00, 0x01, 0x43, +/* 00010B80 */ 0x01, 0x01, 0x0D, 0x05, 0x09, 0x35, 0x00, 0x8E, 0x02, 0x03, 0x0A, 0x6C, 0x09, 0x0A, 0x01, 0x07, +/* 00010B90 */ 0x03, 0x00, 0x59, 0x00, 0x0A, 0x8E, 0x01, 0x0A, 0x0B, 0x4A, 0x0B, 0x07, 0x01, 0x00, 0x59, 0x00, +/* 00010BA0 */ 0x02, 0x1F, 0x01, 0x0B, 0x0B, 0x59, 0x01, 0x0B, 0xE2, 0x0B, 0x00, 0x59, 0x02, 0x0B, 0x1F, 0x03, +/* 00010BB0 */ 0x09, 0x09, 0x97, 0x09, 0x09, 0x04, 0x01, 0x43, 0x01, 0x01, 0x0D, 0x09, 0x8E, 0x01, 0x0D, 0x00, +/* 00010BC0 */ 0x4A, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xC0, 0x02, 0xFE, 0xC0, 0x02, 0x09, +/* 00010BD0 */ 0xFE, 0xA4, 0x04, 0x00, 0xFF, 0x6D, 0x84, 0x01, 0x00, 0x0D, 0x04, 0x00, 0x00, 0x00, 0x0A, 0x00, +/* 00010BE0 */ 0x2B, 0x00, 0x09, 0x00, 0x33, 0x00, 0x0A, 0x00, 0x26, 0x00, 0x0A, 0x00, 0x29, 0x00, 0x10, 0x00, +/* 00010BF0 */ 0x33, 0x00, 0x13, 0x00, 0x2C, 0x00, 0x21, 0x00, 0x4D, 0x00, 0x04, 0x00, 0x5B, 0x00, 0x0D, 0x00, +/* 00010C00 */ 0x49, 0x00, 0x09, 0x00, 0xCB, 0x00, 0x35, 0x00, 0x6D, 0x00, 0x0B, 0x00, 0x24, 0x00, 0x00, 0x7F, +/* 00010C10 */ 0x7C, 0x00, 0xC3, 0x03, 0x10, 0x13, 0x00, 0xFE, 0xC3, 0x08, 0x19, 0xA2, 0x41, 0xC1, 0x00, 0xFE, +/* 00010C20 */ 0xF5, 0x02, 0x84, 0xFF, 0x34, 0x81, 0x01, 0x00, 0xFF, 0x34, 0x81, 0x01, 0x00, 0x01, 0xFE, 0x00, +/* 00010C30 */ 0x90, 0x05, 0x05, 0xFF, 0x34, 0x81, 0x01, 0x00, 0xFE, 0x91, 0x02, 0xFE, 0x91, 0x02, 0x0C, 0x06, +/* 00010C40 */ 0x10, 0x06, 0x3E, 0x35, 0x15, 0x02, 0x04, 0x01, 0x01, 0x01, 0x01, 0x01, 0x0F, 0x5A, 0x9F, 0x05, +/* 00010C50 */ 0xFE, 0x9C, 0x03, 0x08, 0x01, 0x00, 0x01, 0x01, 0xC2, 0xA8, 0x0D, 0xA8, 0x0E, 0x14, 0x03, 0x00, +/* 00010C60 */ 0x07, 0x02, 0x09, 0x0A, 0x00, 0x8E, 0x02, 0x27, 0x11, 0x45, 0x10, 0x11, 0x09, 0x07, 0x00, 0x8E, +/* 00010C70 */ 0x02, 0x26, 0x11, 0x46, 0x10, 0x11, 0x45, 0x0A, 0x10, 0x8E, 0x02, 0x05, 0x10, 0x07, 0x02, 0x00, +/* 00010C80 */ 0x59, 0x00, 0x03, 0x59, 0x01, 0x06, 0x1F, 0x02, 0x10, 0x10, 0x45, 0x0B, 0x10, 0x07, 0x01, 0x00, +/* 00010C90 */ 0x59, 0x00, 0x03, 0x1F, 0x01, 0x10, 0x09, 0x45, 0x0C, 0x10, 0xA8, 0x10, 0x15, 0x03, 0x00, 0x0B, +/* 00010CA0 */ 0x10, 0x09, 0x06, 0x00, 0x45, 0x10, 0x0B, 0x09, 0x03, 0x00, 0x46, 0x10, 0x04, 0x45, 0x0B, 0x10, +/* 00010CB0 */ 0x45, 0x0D, 0x04, 0xEC, 0x00, 0x12, 0x03, 0x00, 0x0D, 0x0B, 0x09, 0x3B, 0x00, 0x8E, 0x02, 0x29, +/* 00010CC0 */ 0x10, 0x07, 0x05, 0x00, 0x59, 0x00, 0x03, 0x97, 0x11, 0x06, 0x0D, 0x59, 0x01, 0x11, 0x59, 0x02, +/* 00010CD0 */ 0x0A, 0x59, 0x03, 0x08, 0x59, 0x04, 0x0C, 0x1F, 0x05, 0x10, 0x10, 0x45, 0x0E, 0x10, 0x5E, 0x10, +/* 00010CE0 */ 0x0E, 0x00, 0xA8, 0x11, 0x15, 0x03, 0x00, 0x10, 0x11, 0x09, 0x06, 0x00, 0x45, 0x00, 0x0E, 0x09, +/* 00010CF0 */ 0x27, 0x00, 0x26, 0x0D, 0x0D, 0x09, 0xBB, 0xFF, 0x8E, 0x02, 0x29, 0x10, 0x07, 0x05, 0x00, 0x59, +/* 00010D00 */ 0x00, 0x03, 0x59, 0x01, 0x0C, 0x59, 0x02, 0x0A, 0xA8, 0x11, 0x59, 0x03, 0x11, 0x59, 0x04, 0x0C, +/* 00010D10 */ 0x1F, 0x05, 0x00, 0x10, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x0D, 0x02, 0xFF, 0x83, +/* 00010D20 */ 0x81, 0x01, 0x00, 0x0C, 0x04, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x58, 0x00, 0x14, 0x00, 0x34, 0x00, +/* 00010D30 */ 0x0D, 0x00, 0x32, 0x00, 0x16, 0x00, 0x39, 0x00, 0x05, 0x00, 0x0B, 0x00, 0x08, 0x00, 0x1F, 0x00, +/* 00010D40 */ 0x21, 0x00, 0x69, 0x00, 0x0E, 0x00, 0x35, 0x00, 0x06, 0x00, 0x4F, 0xFF, 0x06, 0x00, 0xE2, 0x00, +/* 00010D50 */ 0x21, 0x00, 0x51, 0x00, 0x00, 0x7E, 0x5D, 0x00, 0xC1, 0x73, 0x5A, 0x4B, 0x04, 0xFE, 0x8A, 0x08, +/* 00010D60 */ 0x1E, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xF4, 0x02, 0x81, 0xFF, 0x40, 0x77, 0x01, 0x00, 0xFF, 0x40, +/* 00010D70 */ 0x77, 0x01, 0x00, 0x02, 0xFE, 0x00, 0x90, 0x05, 0x05, 0xFF, 0x40, 0x77, 0x01, 0x00, 0xFE, 0xD9, +/* 00010D80 */ 0x09, 0xFE, 0xD9, 0x09, 0x03, 0xFE, 0x9D, 0x04, 0xFE, 0x0D, 0x02, 0xFE, 0x9E, 0x04, 0x0E, 0x0B, +/* 00010D90 */ 0x15, 0x05, 0x72, 0x6A, 0x02, 0x0B, 0x05, 0x05, 0x05, 0x05, 0x01, 0x01, 0x01, 0x12, 0x13, 0x14, +/* 00010DA0 */ 0x15, 0x07, 0x08, 0x01, 0x01, 0x01, 0x00, 0x06, 0xFE, 0x95, 0x03, 0x05, 0xFE, 0x9F, 0x04, 0x06, +/* 00010DB0 */ 0xFE, 0xD7, 0x03, 0x06, 0xFE, 0xA0, 0x04, 0x06, 0xFE, 0xA1, 0x04, 0xFE, 0x84, 0x01, 0x96, 0x03, +/* 00010DC0 */ 0x0B, 0x96, 0x04, 0x0D, 0x4E, 0x11, 0x8E, 0x02, 0x03, 0x17, 0x6C, 0x16, 0x17, 0x00, 0x07, 0x02, +/* 00010DD0 */ 0x00, 0x59, 0x00, 0x17, 0x92, 0x03, 0x18, 0x59, 0x01, 0x18, 0x1F, 0x02, 0x16, 0x16, 0x45, 0x0F, +/* 00010DE0 */ 0x16, 0x14, 0x03, 0x00, 0x0F, 0x02, 0x09, 0x17, 0x00, 0x8E, 0x02, 0x28, 0x16, 0x07, 0x02, 0x00, +/* 00010DF0 */ 0x59, 0x00, 0x03, 0x92, 0x03, 0x17, 0x59, 0x01, 0x17, 0x1F, 0x02, 0x16, 0x16, 0x45, 0x0F, 0x16, +/* 00010E00 */ 0x0E, 0x1E, 0x00, 0x0F, 0x8E, 0x02, 0x06, 0x16, 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, 0x8E, 0x02, +/* 00010E10 */ 0x17, 0x17, 0x59, 0x01, 0x17, 0x59, 0x02, 0x0F, 0xD6, 0x00, 0x17, 0x59, 0x03, 0x17, 0x1F, 0x04, +/* 00010E20 */ 0xFF, 0x16, 0x8E, 0x02, 0x03, 0x17, 0x6C, 0x16, 0x17, 0x01, 0x07, 0x03, 0x00, 0x59, 0x00, 0x17, +/* 00010E30 */ 0x92, 0x03, 0x18, 0x59, 0x01, 0x18, 0xE2, 0x18, 0x00, 0x59, 0x02, 0x18, 0x1F, 0x03, 0x16, 0x16, +/* 00010E40 */ 0x97, 0x16, 0x16, 0x04, 0x96, 0x03, 0x16, 0x07, 0x03, 0x00, 0x59, 0x00, 0x03, 0x92, 0x03, 0x16, +/* 00010E50 */ 0x59, 0x01, 0x16, 0x59, 0x02, 0x0E, 0x1F, 0x03, 0x16, 0x0C, 0x45, 0x10, 0x16, 0x92, 0x04, 0x16, +/* 00010E60 */ 0xA8, 0x17, 0x15, 0x03, 0x00, 0x16, 0x17, 0x09, 0x3E, 0x00, 0xE0, 0x00, 0x03, 0x04, 0x4E, 0x16, +/* 00010E70 */ 0x95, 0x00, 0x02, 0x16, 0xCF, 0x16, 0x00, 0x96, 0x02, 0x16, 0x95, 0x00, 0x02, 0x05, 0x8E, 0x02, +/* 00010E80 */ 0x06, 0x16, 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, 0x8E, 0x02, 0x17, 0x17, 0x59, 0x01, 0x17, 0x59, +/* 00010E90 */ 0x02, 0x0F, 0xB9, 0x18, 0x00, 0x01, 0x66, 0x01, 0x01, 0x17, 0x18, 0x59, 0x03, 0x17, 0x1F, 0x04, +/* 00010EA0 */ 0xFF, 0x16, 0x92, 0x02, 0x16, 0x45, 0x0F, 0x16, 0x45, 0x11, 0x10, 0x0E, 0x5A, 0x00, 0x10, 0x0E, +/* 00010EB0 */ 0x2E, 0x00, 0x0F, 0x8E, 0x02, 0x05, 0x16, 0x07, 0x02, 0x00, 0x59, 0x00, 0x03, 0x59, 0x01, 0x0F, +/* 00010EC0 */ 0x1F, 0x02, 0x16, 0x16, 0x11, 0x03, 0x00, 0x16, 0x05, 0x09, 0x15, 0x00, 0x8E, 0x02, 0x33, 0x16, +/* 00010ED0 */ 0x4A, 0x16, 0x0E, 0x07, 0x00, 0x16, 0x2D, 0x10, 0x10, 0x06, 0x09, 0x04, 0x00, 0x2D, 0x10, 0x10, +/* 00010EE0 */ 0x07, 0x45, 0x16, 0x10, 0x8E, 0x02, 0x06, 0x17, 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, 0x8E, 0x02, +/* 00010EF0 */ 0x19, 0x18, 0x59, 0x01, 0x18, 0x59, 0x02, 0x0F, 0x59, 0x03, 0x06, 0x1F, 0x04, 0x17, 0x17, 0x2D, +/* 00010F00 */ 0x16, 0x16, 0x17, 0x45, 0x10, 0x16, 0x09, 0x05, 0x00, 0xA8, 0x16, 0x45, 0x10, 0x16, 0x8E, 0x02, +/* 00010F10 */ 0x04, 0x16, 0x07, 0x03, 0x00, 0x59, 0x00, 0x03, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00010F20 */ 0x00, 0x17, 0x00, 0x00, 0x00, 0x7A, 0x10, 0x17, 0x02, 0x7A, 0x0F, 0x17, 0x03, 0x7A, 0x11, 0x17, +/* 00010F30 */ 0x04, 0x59, 0x01, 0x17, 0x59, 0x02, 0x02, 0x1F, 0x03, 0x00, 0x16, 0x09, 0x02, 0x00, 0xA8, 0x00, +/* 00010F40 */ 0x24, 0x00, 0x01, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00010F50 */ 0x00, 0x0D, 0x02, 0x00, 0x00, 0x11, 0x02, 0x00, 0x00, 0x0F, 0x02, 0x00, 0x00, 0xFE, 0xF6, 0x01, +/* 00010F60 */ 0xFE, 0xC0, 0x02, 0xFE, 0x0D, 0x02, 0xFE, 0x11, 0x02, 0xFE, 0x0F, 0x02, 0x01, 0x04, 0x01, 0x00, +/* 00010F70 */ 0xFE, 0xCF, 0x03, 0x0D, 0xFE, 0xA2, 0x04, 0x00, 0xFF, 0x84, 0x77, 0x01, 0x00, 0x16, 0x08, 0x00, +/* 00010F80 */ 0x00, 0x00, 0x1B, 0x00, 0x36, 0x00, 0x08, 0x00, 0x81, 0x00, 0x17, 0x00, 0x3A, 0x00, 0x04, 0x00, +/* 00010F90 */ 0x1B, 0x00, 0x1E, 0x00, 0x53, 0x02, 0x25, 0x00, 0x49, 0x00, 0x16, 0x00, 0x37, 0x00, 0x17, 0x00, +/* 00010FA0 */ 0x50, 0x00, 0x06, 0x00, 0x1F, 0x00, 0x04, 0x00, 0x17, 0x00, 0x24, 0x00, 0xE9, 0x01, 0x06, 0x00, +/* 00010FB0 */ 0xF9, 0x00, 0x03, 0x00, 0x29, 0x00, 0x04, 0x00, 0x1C, 0x00, 0x1D, 0x00, 0x3E, 0x00, 0x0A, 0x00, +/* 00010FC0 */ 0x2E, 0x00, 0x07, 0x00, 0x3E, 0x00, 0x04, 0x00, 0x40, 0x00, 0x28, 0x00, 0x5C, 0x00, 0x05, 0x00, +/* 00010FD0 */ 0x29, 0x00, 0x32, 0x00, 0x99, 0x00, 0x00, 0x24, 0x11, 0x01, 0x00, 0xDF, 0x0F, 0x01, 0x00, 0x7F, +/* 00010FE0 */ 0x5C, 0x00, 0xC1, 0x33, 0x10, 0x43, 0x00, 0xFE, 0xA0, 0x08, 0x3D, 0xA2, 0x41, 0xD1, 0x00, 0x83, +/* 00010FF0 */ 0xFF, 0x1A, 0x7C, 0x01, 0x00, 0xFF, 0x1A, 0x7C, 0x01, 0x00, 0x41, 0xFE, 0x00, 0x90, 0x02, 0x02, +/* 00011000 */ 0xFF, 0x1A, 0x7C, 0x01, 0x00, 0xFE, 0xA8, 0x01, 0xFE, 0xA8, 0x01, 0x08, 0x0B, 0x0F, 0x05, 0x2D, +/* 00011010 */ 0x2B, 0x04, 0x07, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x0E, 0x01, 0x01, 0x08, 0x01, 0xFF, 0x06, +/* 00011020 */ 0xFE, 0x2A, 0x03, 0x06, 0xFE, 0x2C, 0x03, 0x0B, 0x06, 0xFE, 0x2D, 0x03, 0x06, 0xFE, 0x2B, 0x03, +/* 00011030 */ 0x07, 0xA1, 0x8E, 0x04, 0x03, 0x10, 0x6C, 0x0F, 0x10, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x10, +/* 00011040 */ 0x59, 0x01, 0x0B, 0xE2, 0x11, 0x00, 0x59, 0x02, 0x11, 0x1F, 0x03, 0x0F, 0x0F, 0x45, 0x0C, 0x0F, +/* 00011050 */ 0x97, 0x0F, 0x0C, 0x02, 0x45, 0x0D, 0x0F, 0x8E, 0x04, 0x06, 0x0F, 0x07, 0x04, 0x00, 0x59, 0x00, +/* 00011060 */ 0x03, 0x8E, 0x04, 0x18, 0x10, 0x59, 0x01, 0x10, 0x8E, 0x02, 0x04, 0x10, 0x59, 0x02, 0x10, 0x59, +/* 00011070 */ 0x03, 0x0D, 0x1F, 0x04, 0x0F, 0x0F, 0x15, 0x03, 0x00, 0x0F, 0x04, 0x09, 0x51, 0x00, 0x8E, 0x04, +/* 00011080 */ 0x36, 0x10, 0x4A, 0x10, 0x6C, 0x0F, 0x10, 0x01, 0x07, 0x04, 0x00, 0x59, 0x00, 0x10, 0x8E, 0x02, +/* 00011090 */ 0x02, 0x11, 0x59, 0x01, 0x11, 0x8E, 0x01, 0x02, 0x12, 0x4A, 0x12, 0x43, 0x11, 0x12, 0x2D, 0x12, +/* 000110A0 */ 0x11, 0x02, 0x01, 0x43, 0x01, 0x01, 0x02, 0x12, 0x59, 0x02, 0x11, 0xCE, 0x00, 0x00, 0x00, 0x00, +/* 000110B0 */ 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x7A, 0x0B, 0x11, 0x02, 0x7A, 0x07, 0x11, 0x03, +/* 000110C0 */ 0x7A, 0x07, 0x11, 0x04, 0x7A, 0x07, 0x11, 0x05, 0x59, 0x03, 0x11, 0x1F, 0x04, 0xFF, 0x0F, 0xA8, +/* 000110D0 */ 0x00, 0x24, 0x00, 0x01, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, +/* 000110E0 */ 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x96, 0x01, +/* 000110F0 */ 0x00, 0x00, 0xFE, 0xC0, 0x02, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, +/* 00011100 */ 0x01, 0xFE, 0x96, 0x01, 0x0E, 0xFE, 0xA3, 0x04, 0x00, 0xFF, 0x3E, 0x7C, 0x01, 0x00, 0x05, 0x00, +/* 00011110 */ 0x00, 0x00, 0x00, 0x1E, 0x00, 0x7A, 0x00, 0x07, 0x00, 0x24, 0x00, 0x27, 0x00, 0x5F, 0x00, 0x53, +/* 00011120 */ 0x00, 0x86, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0x01, 0x00, 0x10, 0x03, 0x00, 0xFE, 0x92, 0x08, 0x3C, +/* 00011130 */ 0xA2, 0x41, 0xD1, 0x00, 0x82, 0xFF, 0xC0, 0x78, 0x01, 0x00, 0xFF, 0xC0, 0x78, 0x01, 0x00, 0x41, +/* 00011140 */ 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0xC0, 0x78, 0x01, 0x00, 0x7D, 0x7D, 0x04, 0x05, 0x07, 0x06, +/* 00011150 */ 0x0F, 0x0F, 0x03, 0x03, 0x06, 0x06, 0xFE, 0x95, 0x03, 0x06, 0xFE, 0x47, 0x03, 0x08, 0x2E, 0x8E, +/* 00011160 */ 0x03, 0x06, 0x07, 0x07, 0x05, 0x00, 0x59, 0x00, 0x04, 0x8E, 0x03, 0x1D, 0x08, 0x59, 0x01, 0x08, +/* 00011170 */ 0x8E, 0x01, 0x03, 0x08, 0x59, 0x02, 0x08, 0x2D, 0x08, 0x02, 0x05, 0x59, 0x03, 0x08, 0x59, 0x04, +/* 00011180 */ 0x03, 0x1F, 0x05, 0x07, 0x07, 0x94, 0x01, 0x03, 0x07, 0xA8, 0x00, 0x24, 0x00, 0xFF, 0xE4, 0x78, +/* 00011190 */ 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x2C, 0x00, 0x58, 0x00, 0x00, 0x7E, 0x5C, 0x00, 0xC1, +/* 000111A0 */ 0x03, 0x10, 0x0B, 0x00, 0xFE, 0x71, 0x08, 0x1E, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xF3, 0x02, 0x7F, +/* 000111B0 */ 0xFF, 0x0F, 0x73, 0x01, 0x00, 0xFF, 0x0F, 0x73, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, +/* 000111C0 */ 0xFF, 0x0F, 0x73, 0x01, 0x00, 0xFE, 0x11, 0x04, 0xFE, 0x11, 0x04, 0x07, 0x05, 0x09, 0x04, 0x29, +/* 000111D0 */ 0x26, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x08, 0x08, 0x01, 0x00, 0x06, 0xFE, 0x95, 0x03, 0x7E, +/* 000111E0 */ 0x4E, 0x06, 0x4E, 0x07, 0x8E, 0x01, 0x10, 0x09, 0x4A, 0x09, 0x0F, 0x10, 0x00, 0x09, 0x8E, 0x01, +/* 000111F0 */ 0x05, 0x09, 0x4A, 0x09, 0x07, 0x01, 0x00, 0x59, 0x00, 0x02, 0x1F, 0x01, 0xFF, 0x09, 0x8E, 0x02, +/* 00011200 */ 0x03, 0x0A, 0x6C, 0x09, 0x0A, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0A, 0x59, 0x01, 0x05, 0x8E, +/* 00011210 */ 0x01, 0x10, 0x0B, 0x4A, 0x0B, 0x59, 0x02, 0x0B, 0x1F, 0x03, 0x09, 0x09, 0x45, 0x06, 0x09, 0x0F, +/* 00011220 */ 0x05, 0x00, 0x06, 0xA8, 0x00, 0x09, 0x34, 0x00, 0x97, 0x0B, 0x06, 0x03, 0x6C, 0x0A, 0x0B, 0x01, +/* 00011230 */ 0x07, 0x02, 0x00, 0x59, 0x00, 0x0B, 0x59, 0x01, 0x04, 0x1F, 0x02, 0x0A, 0x0A, 0x6C, 0x09, 0x0A, +/* 00011240 */ 0x02, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0A, 0xD6, 0x00, 0x0B, 0x59, 0x01, 0x0B, 0x1F, 0x02, 0x09, +/* 00011250 */ 0x09, 0x45, 0x07, 0x09, 0x45, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xC0, +/* 00011260 */ 0x02, 0xFE, 0x56, 0x01, 0x89, 0xFF, 0x2B, 0x73, 0x01, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x0A, +/* 00011270 */ 0x00, 0x24, 0x00, 0x10, 0x00, 0x2B, 0x00, 0x21, 0x00, 0x4B, 0x00, 0x04, 0x00, 0x1A, 0x00, 0x05, +/* 00011280 */ 0x00, 0x5C, 0x02, 0x2C, 0x00, 0xCD, 0x00, 0x08, 0x00, 0x17, 0x00, 0x00, 0x90, 0x12, 0x01, 0x00, +/* 00011290 */ 0x7F, 0x4C, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0xFE, 0x84, 0x08, 0x36, 0xA2, 0x41, 0xD0, 0x00, +/* 000112A0 */ 0x80, 0xFE, 0x01, 0x10, 0xFF, 0x69, 0x76, 0x01, 0x00, 0xFF, 0x69, 0x76, 0x01, 0x00, 0x01, 0xFE, +/* 000112B0 */ 0x00, 0x90, 0x02, 0x02, 0xFF, 0x69, 0x76, 0x01, 0x00, 0x0A, 0x0A, 0x02, 0x02, 0x03, 0x0A, 0x0A, +/* 000112C0 */ 0x02, 0x17, 0xAD, 0x03, 0x0F, 0x02, 0x00, 0x02, 0xAC, 0x03, 0xAD, 0x00, 0x0F, 0x02, 0x00, 0x03, +/* 000112D0 */ 0xAC, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFF, 0x70, 0x76, 0x01, 0x00, 0x02, 0x00, +/* 000112E0 */ 0x00, 0x00, 0x00, 0x15, 0x00, 0x03, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x43, 0x50, 0x03, 0x00, +/* 000112F0 */ 0xFE, 0x5A, 0x08, 0x1E, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x9C, 0x04, 0x7E, 0xFF, 0x7C, 0x6E, 0x01, +/* 00011300 */ 0x00, 0xFF, 0x7C, 0x6E, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0x7C, 0x6E, 0x01, +/* 00011310 */ 0x00, 0xFE, 0x73, 0x04, 0xFE, 0x73, 0x04, 0x09, 0x09, 0x0D, 0x04, 0x56, 0x4D, 0x02, 0x04, 0x06, +/* 00011320 */ 0x06, 0x06, 0x06, 0x01, 0x0C, 0x0D, 0x07, 0x08, 0x01, 0x01, 0x01, 0x02, 0x06, 0xFE, 0x95, 0x03, +/* 00011330 */ 0x06, 0xFE, 0x47, 0x03, 0x01, 0x03, 0xFE, 0x1B, 0x01, 0x4E, 0x0A, 0x4E, 0x0B, 0x8E, 0x02, 0x03, +/* 00011340 */ 0x0F, 0x5E, 0x0F, 0x0F, 0x00, 0x6C, 0x0E, 0x0F, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0F, 0x59, +/* 00011350 */ 0x01, 0x09, 0x1F, 0x02, 0x0E, 0x0E, 0x45, 0x0A, 0x0E, 0xA8, 0x0E, 0x14, 0x03, 0x00, 0x0A, 0x0E, +/* 00011360 */ 0x09, 0xD4, 0x00, 0x8E, 0x02, 0x03, 0x0F, 0x6C, 0x0E, 0x0F, 0x02, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 00011370 */ 0x0F, 0x59, 0x01, 0x09, 0x1F, 0x02, 0x0E, 0x0E, 0x45, 0x0A, 0x0E, 0x14, 0x03, 0x00, 0x0A, 0x02, +/* 00011380 */ 0x09, 0x7C, 0x00, 0x8E, 0x01, 0x0F, 0x0E, 0x4A, 0x0E, 0x0F, 0x10, 0x00, 0x0E, 0x8E, 0x01, 0x05, +/* 00011390 */ 0x0E, 0x4A, 0x0E, 0x07, 0x01, 0x00, 0x59, 0x00, 0x03, 0x1F, 0x01, 0xFF, 0x0E, 0x8E, 0x02, 0x03, +/* 000113A0 */ 0x0F, 0x6C, 0x0E, 0x0F, 0x03, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0F, 0x59, 0x01, 0x09, 0x8E, 0x01, +/* 000113B0 */ 0x0F, 0x10, 0x4A, 0x10, 0x59, 0x02, 0x10, 0x1F, 0x03, 0x0E, 0x0E, 0x45, 0x0B, 0x0E, 0x97, 0x0E, +/* 000113C0 */ 0x0B, 0x04, 0x97, 0x0F, 0x0B, 0x05, 0x0E, 0x0E, 0x00, 0x0F, 0x97, 0x10, 0x0B, 0x05, 0x2D, 0x10, +/* 000113D0 */ 0x06, 0x10, 0x45, 0x0F, 0x10, 0x09, 0x03, 0x00, 0x46, 0x0F, 0x07, 0x2D, 0x0E, 0x0E, 0x0F, 0x97, +/* 000113E0 */ 0x0F, 0x0B, 0x08, 0x0E, 0x0E, 0x00, 0x0F, 0x97, 0x10, 0x0B, 0x08, 0x2D, 0x10, 0x06, 0x10, 0x45, +/* 000113F0 */ 0x0F, 0x10, 0x09, 0x03, 0x00, 0x46, 0x0F, 0x07, 0x2D, 0x0E, 0x0E, 0x0F, 0x45, 0x0A, 0x0E, 0x8E, +/* 00011400 */ 0x02, 0x03, 0x0F, 0x5E, 0x0F, 0x0F, 0x04, 0x6C, 0x0E, 0x0F, 0x05, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 00011410 */ 0x0F, 0x59, 0x01, 0x09, 0xA8, 0x10, 0x14, 0x03, 0x00, 0x0A, 0x10, 0x09, 0x0C, 0x00, 0x8E, 0x02, +/* 00011420 */ 0x34, 0x11, 0x4A, 0x11, 0x45, 0x10, 0x11, 0x09, 0x03, 0x00, 0x46, 0x10, 0x0A, 0x59, 0x02, 0x10, +/* 00011430 */ 0x1F, 0x03, 0xFF, 0x0E, 0x09, 0x13, 0x00, 0x8E, 0x02, 0x34, 0x0E, 0x4A, 0x0E, 0x14, 0x03, 0x00, +/* 00011440 */ 0x0A, 0x0E, 0x09, 0x05, 0x00, 0xA8, 0x0E, 0x45, 0x0A, 0x0E, 0x45, 0x00, 0x0A, 0x09, 0x02, 0x00, +/* 00011450 */ 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x4E, 0x03, 0xFE, 0x98, 0x01, 0xFE, 0xF3, 0x01, 0xFE, 0xC0, 0x02, +/* 00011460 */ 0xFE, 0x4E, 0x03, 0xFE, 0x9B, 0x01, 0xFF, 0xA6, 0x6E, 0x01, 0x00, 0x0D, 0x04, 0x00, 0x00, 0x00, +/* 00011470 */ 0x1C, 0x00, 0x53, 0x00, 0x0A, 0x00, 0x30, 0x00, 0x18, 0x00, 0x51, 0x00, 0x08, 0x00, 0x2F, 0x00, +/* 00011480 */ 0x0A, 0x00, 0x2D, 0x00, 0x10, 0x00, 0x3A, 0x00, 0x21, 0x00, 0xB1, 0x00, 0x41, 0x00, 0x34, 0x01, +/* 00011490 */ 0x38, 0x00, 0x80, 0x00, 0x0E, 0x00, 0x30, 0x00, 0x05, 0x00, 0x2E, 0x00, 0x08, 0x00, 0x1B, 0x00, +/* 000114A0 */ 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x43, 0x50, 0x03, 0x00, 0xFE, 0x3F, 0x08, 0x1F, 0xA2, 0x41, 0xC1, +/* 000114B0 */ 0x00, 0xFE, 0x9B, 0x04, 0x7D, 0xFF, 0xD6, 0x69, 0x01, 0x00, 0xFF, 0xD6, 0x69, 0x01, 0x00, 0x01, +/* 000114C0 */ 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFF, 0xD6, 0x69, 0x01, 0x00, 0xFE, 0x86, 0x04, 0xFE, 0x86, 0x04, +/* 000114D0 */ 0x0A, 0x09, 0x0E, 0x04, 0x5F, 0x55, 0x02, 0x04, 0x06, 0x06, 0x06, 0x06, 0x01, 0x0D, 0x0E, 0x07, +/* 000114E0 */ 0x08, 0x01, 0x01, 0x01, 0x02, 0x06, 0xFE, 0x95, 0x03, 0x06, 0xFE, 0x47, 0x03, 0x01, 0x03, 0xFE, +/* 000114F0 */ 0x3A, 0x01, 0x4E, 0x0C, 0x8E, 0x02, 0x03, 0x10, 0x5E, 0x10, 0x10, 0x00, 0x6C, 0x0F, 0x10, 0x01, +/* 00011500 */ 0x07, 0x02, 0x00, 0x59, 0x00, 0x10, 0x59, 0x01, 0x09, 0x1F, 0x02, 0x0F, 0x0F, 0x45, 0x0B, 0x0F, +/* 00011510 */ 0xA8, 0x0F, 0x14, 0x03, 0x00, 0x0B, 0x0F, 0x09, 0xD4, 0x00, 0x8E, 0x02, 0x03, 0x10, 0x6C, 0x0F, +/* 00011520 */ 0x10, 0x02, 0x07, 0x02, 0x00, 0x59, 0x00, 0x10, 0x59, 0x01, 0x09, 0x1F, 0x02, 0x0F, 0x0F, 0x45, +/* 00011530 */ 0x0B, 0x0F, 0x14, 0x03, 0x00, 0x0B, 0x02, 0x09, 0x7C, 0x00, 0x8E, 0x01, 0x0F, 0x0F, 0x4A, 0x0F, +/* 00011540 */ 0x0F, 0x10, 0x00, 0x0F, 0x8E, 0x01, 0x05, 0x0F, 0x4A, 0x0F, 0x07, 0x01, 0x00, 0x59, 0x00, 0x03, +/* 00011550 */ 0x1F, 0x01, 0xFF, 0x0F, 0x8E, 0x02, 0x03, 0x10, 0x6C, 0x0F, 0x10, 0x03, 0x07, 0x03, 0x00, 0x59, +/* 00011560 */ 0x00, 0x10, 0x59, 0x01, 0x09, 0x8E, 0x01, 0x0F, 0x11, 0x4A, 0x11, 0x59, 0x02, 0x11, 0x1F, 0x03, +/* 00011570 */ 0x0F, 0x0F, 0x45, 0x0C, 0x0F, 0x97, 0x0F, 0x0C, 0x04, 0x97, 0x10, 0x0C, 0x05, 0x0E, 0x0E, 0x00, +/* 00011580 */ 0x10, 0x97, 0x11, 0x0C, 0x05, 0x2D, 0x11, 0x06, 0x11, 0x45, 0x10, 0x11, 0x09, 0x03, 0x00, 0x46, +/* 00011590 */ 0x10, 0x07, 0x2D, 0x0F, 0x0F, 0x10, 0x97, 0x10, 0x0C, 0x08, 0x0E, 0x0E, 0x00, 0x10, 0x97, 0x11, +/* 000115A0 */ 0x0C, 0x08, 0x2D, 0x11, 0x06, 0x11, 0x45, 0x10, 0x11, 0x09, 0x03, 0x00, 0x46, 0x10, 0x07, 0x2D, +/* 000115B0 */ 0x0F, 0x0F, 0x10, 0x45, 0x0B, 0x0F, 0x8E, 0x02, 0x03, 0x10, 0x5E, 0x10, 0x10, 0x04, 0x6C, 0x0F, +/* 000115C0 */ 0x10, 0x05, 0x07, 0x03, 0x00, 0x59, 0x00, 0x10, 0x59, 0x01, 0x09, 0xA8, 0x11, 0x14, 0x03, 0x00, +/* 000115D0 */ 0x0B, 0x11, 0x09, 0x0C, 0x00, 0x8E, 0x02, 0x34, 0x12, 0x4A, 0x12, 0x45, 0x11, 0x12, 0x09, 0x03, +/* 000115E0 */ 0x00, 0x46, 0x11, 0x0B, 0x59, 0x02, 0x11, 0x1F, 0x03, 0xFF, 0x0F, 0x09, 0x13, 0x00, 0x8E, 0x02, +/* 000115F0 */ 0x34, 0x0F, 0x4A, 0x0F, 0x14, 0x03, 0x00, 0x0B, 0x0F, 0x09, 0x05, 0x00, 0xA8, 0x0F, 0x45, 0x0B, +/* 00011600 */ 0x0F, 0x14, 0x03, 0x00, 0x0A, 0x09, 0x09, 0x09, 0x00, 0x45, 0x00, 0x0B, 0x09, 0x1B, 0x00, 0x09, +/* 00011610 */ 0x16, 0x00, 0x14, 0x03, 0x00, 0x0A, 0x0B, 0x09, 0x08, 0x00, 0xA8, 0x00, 0x09, 0x0B, 0x00, 0x09, +/* 00011620 */ 0x06, 0x00, 0x45, 0x00, 0x0B, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x4F, 0x03, 0xFE, +/* 00011630 */ 0x98, 0x01, 0xFE, 0xF4, 0x01, 0xFE, 0xC0, 0x02, 0xFE, 0x4F, 0x03, 0xFE, 0x9B, 0x01, 0xFF, 0x01, +/* 00011640 */ 0x6A, 0x01, 0x00, 0x11, 0x02, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x46, 0x00, 0x0A, 0x00, 0x30, 0x00, +/* 00011650 */ 0x18, 0x00, 0x44, 0x00, 0x08, 0x00, 0x2F, 0x00, 0x0A, 0x00, 0x2D, 0x00, 0x10, 0x00, 0x3A, 0x00, +/* 00011660 */ 0x21, 0x00, 0x52, 0x00, 0x41, 0x00, 0x0C, 0x01, 0x38, 0x00, 0x73, 0x00, 0x0E, 0x00, 0x30, 0x00, +/* 00011670 */ 0x05, 0x00, 0x2F, 0x00, 0x08, 0x00, 0x2C, 0x00, 0x09, 0x00, 0x26, 0x00, 0x08, 0x00, 0x34, 0x00, +/* 00011680 */ 0x08, 0x00, 0x2F, 0x00, 0x08, 0x00, 0x25, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, +/* 00011690 */ 0x00, 0xFE, 0x3B, 0x08, 0x1C, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xF0, 0x02, 0x7C, 0xFF, 0x63, 0x69, +/* 000116A0 */ 0x01, 0x00, 0xFF, 0x63, 0x69, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFF, 0x63, 0x69, +/* 000116B0 */ 0x01, 0x00, 0x51, 0x51, 0x05, 0x02, 0x05, 0x04, 0x0B, 0x0B, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, +/* 000116C0 */ 0x04, 0x1F, 0x8E, 0x02, 0x03, 0x06, 0x6C, 0x05, 0x06, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x06, +/* 000116D0 */ 0x59, 0x01, 0x03, 0x59, 0x02, 0x02, 0x1F, 0x03, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, +/* 000116E0 */ 0x00, 0xFE, 0xBD, 0x02, 0xFF, 0x80, 0x69, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x00, +/* 000116F0 */ 0x33, 0x00, 0x00, 0x7F, 0x4C, 0x00, 0xC0, 0x03, 0x00, 0x03, 0x00, 0xFE, 0x35, 0x08, 0x1C, 0xA2, +/* 00011700 */ 0x41, 0xC1, 0x00, 0xFE, 0xEF, 0x02, 0x7B, 0xFF, 0xC9, 0x68, 0x01, 0x00, 0xFF, 0xC9, 0x68, 0x01, +/* 00011710 */ 0x00, 0x41, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0xC9, 0x68, 0x01, 0x00, 0x7B, 0x7B, 0x02, 0x04, +/* 00011720 */ 0x05, 0x09, 0x09, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x1C, 0x00, 0x0A, 0x80, 0x03, 0x07, 0x00, +/* 00011730 */ 0x0A, 0x80, 0x1B, 0x5E, 0x05, 0x04, 0x00, 0x14, 0x0C, 0x00, 0x05, 0x02, 0x5E, 0x05, 0x04, 0x01, +/* 00011740 */ 0x14, 0x03, 0x00, 0x05, 0x03, 0x09, 0x02, 0x00, 0x23, 0x04, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x0C, +/* 00011750 */ 0x01, 0xFE, 0x0C, 0x01, 0xFF, 0xE1, 0x68, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, +/* 00011760 */ 0x4A, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x7F, 0x7C, 0x02, 0x02, 0x00, 0x00, 0x13, 0x00, 0xFE, +/* 00011770 */ 0x2A, 0x08, 0x1B, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xF2, 0x02, 0x7A, 0xFF, 0x70, 0x67, 0x01, 0x00, +/* 00011780 */ 0xFF, 0x70, 0x67, 0x01, 0x00, 0x41, 0xFE, 0x00, 0x90, 0x04, 0x04, 0xFF, 0x70, 0x67, 0x01, 0x00, +/* 00011790 */ 0xD5, 0xD5, 0x06, 0x05, 0x09, 0x03, 0x12, 0x10, 0x0D, 0x02, 0x01, 0x01, 0x05, 0x33, 0x01, 0x00, +/* 000117A0 */ 0x08, 0x01, 0x01, 0x37, 0x4E, 0x08, 0x45, 0x08, 0x02, 0xEC, 0x00, 0x12, 0x03, 0x00, 0x08, 0x06, +/* 000117B0 */ 0x09, 0x24, 0x00, 0xBC, 0x09, 0x08, 0x05, 0x00, 0x00, 0x0E, 0x14, 0x00, 0x09, 0x45, 0x09, 0x07, +/* 000117C0 */ 0x07, 0x02, 0x00, 0x59, 0x00, 0x03, 0x97, 0x0A, 0x05, 0x08, 0x59, 0x01, 0x0A, 0x1F, 0x02, 0xFF, +/* 000117D0 */ 0x09, 0x26, 0x08, 0x08, 0x09, 0xD2, 0xFF, 0xA8, 0x00, 0x24, 0x00, 0xFF, 0x97, 0x67, 0x01, 0x00, +/* 000117E0 */ 0x06, 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x20, 0x00, 0x08, 0x00, 0x20, 0x00, 0x0A, 0x00, 0x26, +/* 000117F0 */ 0x00, 0x14, 0x00, 0x2E, 0x00, 0x08, 0x00, 0x19, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x43, 0x50, +/* 00011800 */ 0x03, 0x00, 0xFE, 0x1D, 0x08, 0x22, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x68, 0x03, 0x79, 0xFF, 0xE7, +/* 00011810 */ 0x65, 0x01, 0x00, 0xFF, 0xE7, 0x65, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0xE7, +/* 00011820 */ 0x65, 0x01, 0x00, 0xFE, 0x6B, 0x01, 0xFE, 0x6B, 0x01, 0x08, 0x04, 0x08, 0x04, 0x2A, 0x27, 0x02, +/* 00011830 */ 0x03, 0x02, 0x02, 0x02, 0x02, 0x01, 0x07, 0x08, 0x07, 0x08, 0x7F, 0x4E, 0x05, 0x4E, 0x06, 0x8E, +/* 00011840 */ 0x02, 0x03, 0x0A, 0x6C, 0x09, 0x0A, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0A, 0x59, 0x01, 0x04, +/* 00011850 */ 0x1F, 0x02, 0x09, 0x09, 0x45, 0x05, 0x09, 0x14, 0x03, 0x00, 0x05, 0x02, 0x09, 0x51, 0x00, 0x8E, +/* 00011860 */ 0x01, 0x11, 0x09, 0x4A, 0x09, 0x0F, 0x10, 0x00, 0x09, 0x8E, 0x01, 0x05, 0x09, 0x4A, 0x09, 0x07, +/* 00011870 */ 0x01, 0x00, 0x59, 0x00, 0x03, 0x1F, 0x01, 0xFF, 0x09, 0x8E, 0x02, 0x03, 0x0A, 0x6C, 0x09, 0x0A, +/* 00011880 */ 0x01, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0A, 0x59, 0x01, 0x04, 0x8E, 0x01, 0x11, 0x0B, 0x4A, 0x0B, +/* 00011890 */ 0x59, 0x02, 0x0B, 0x1F, 0x03, 0x09, 0x09, 0x45, 0x06, 0x09, 0xAD, 0x09, 0x0F, 0x02, 0x00, 0x06, +/* 000118A0 */ 0xAC, 0x09, 0xAD, 0x00, 0x0F, 0x02, 0x00, 0x09, 0xAC, 0x00, 0x09, 0x0B, 0x00, 0x09, 0x06, 0x00, +/* 000118B0 */ 0x45, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xED, 0x01, 0xFE, 0xC0, 0x02, +/* 000118C0 */ 0xFF, 0x04, 0x66, 0x01, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x18, 0x00, 0x40, 0x00, 0x08, 0x00, +/* 000118D0 */ 0x23, 0x00, 0x0A, 0x00, 0x24, 0x00, 0x10, 0x00, 0x32, 0x00, 0x21, 0x00, 0x4A, 0x00, 0x16, 0x00, +/* 000118E0 */ 0x2D, 0x00, 0x08, 0x00, 0x1D, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, +/* 000118F0 */ 0x10, 0x08, 0x1F, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x67, 0x03, 0x78, 0xFF, 0xD8, 0x63, 0x01, 0x00, +/* 00011900 */ 0xFF, 0xD8, 0x63, 0x01, 0x00, 0x41, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFF, 0xD8, 0x63, 0x01, 0x00, +/* 00011910 */ 0xFE, 0xEA, 0x01, 0xFE, 0xEA, 0x01, 0x06, 0x05, 0x09, 0x04, 0x14, 0x12, 0x02, 0x01, 0x03, 0x03, +/* 00011920 */ 0x03, 0x03, 0x08, 0x07, 0x06, 0xFE, 0x47, 0x03, 0x05, 0xFE, 0x9A, 0x04, 0x3F, 0x4E, 0x07, 0x8E, +/* 00011930 */ 0x02, 0x03, 0x0A, 0x6C, 0x09, 0x0A, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0A, 0x59, 0x01, 0x05, +/* 00011940 */ 0x59, 0x02, 0x06, 0x1F, 0x03, 0x09, 0x09, 0x45, 0x07, 0x09, 0x14, 0x03, 0x00, 0x07, 0x02, 0x09, +/* 00011950 */ 0x16, 0x00, 0x76, 0x03, 0x05, 0x01, 0x45, 0x09, 0x05, 0xCF, 0x0A, 0x02, 0xA1, 0x00, 0x04, 0x0A, +/* 00011960 */ 0xA1, 0x01, 0x03, 0x0A, 0x76, 0x0A, 0x09, 0x02, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xFA, 0x01, 0xFE, +/* 00011970 */ 0x3D, 0x02, 0xFE, 0x62, 0x02, 0xFF, 0x07, 0x64, 0x01, 0x00, 0x05, 0x02, 0x00, 0x00, 0x00, 0x1B, +/* 00011980 */ 0x00, 0x4F, 0x00, 0x08, 0x00, 0x71, 0x00, 0x04, 0x00, 0x33, 0x00, 0x14, 0x00, 0xC7, 0x00, 0x00, +/* 00011990 */ 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0xFF, 0x07, 0x1D, 0xA0, 0x41, 0xC1, 0x00, +/* 000119A0 */ 0xFE, 0x53, 0x03, 0x77, 0xFF, 0xED, 0x61, 0x01, 0x00, 0xFF, 0xED, 0x61, 0x01, 0x00, 0x01, 0xFE, +/* 000119B0 */ 0x00, 0x90, 0x01, 0x01, 0xFF, 0xED, 0x61, 0x01, 0x00, 0xFE, 0xC9, 0x01, 0xFE, 0xC9, 0x01, 0x04, +/* 000119C0 */ 0x03, 0x05, 0x02, 0x1A, 0x19, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x04, 0x05, 0xFE, 0x93, 0x03, +/* 000119D0 */ 0x56, 0x4E, 0x03, 0x8E, 0x01, 0x09, 0x05, 0x4A, 0x05, 0x0E, 0x15, 0x00, 0x05, 0x8E, 0x02, 0x03, +/* 000119E0 */ 0x05, 0x5E, 0x05, 0x05, 0x00, 0x0E, 0x09, 0x00, 0x05, 0x8E, 0x01, 0x09, 0x00, 0x4A, 0x00, 0x09, +/* 000119F0 */ 0x33, 0x00, 0x8E, 0x02, 0x03, 0x06, 0x6C, 0x05, 0x06, 0x01, 0x07, 0x01, 0x00, 0x59, 0x00, 0x06, +/* 00011A00 */ 0x1F, 0x01, 0x05, 0x05, 0x45, 0x03, 0x05, 0x0F, 0x09, 0x00, 0x03, 0x01, 0x43, 0x01, 0x01, 0x09, +/* 00011A10 */ 0x02, 0x09, 0x06, 0x00, 0x01, 0x43, 0x01, 0x01, 0x09, 0x03, 0x8E, 0x01, 0x09, 0x00, 0x4A, 0x00, +/* 00011A20 */ 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x4D, 0x03, 0xFE, 0xF5, 0x01, 0xFF, 0x03, 0x62, +/* 00011A30 */ 0x01, 0x00, 0x08, 0x02, 0x00, 0x00, 0x00, 0x16, 0x00, 0x39, 0x00, 0x09, 0x00, 0x2B, 0x00, 0x15, +/* 00011A40 */ 0x00, 0x34, 0x00, 0x04, 0x00, 0x9C, 0x00, 0x09, 0x00, 0x35, 0x00, 0x06, 0x00, 0x2D, 0x00, 0x0B, +/* 00011A50 */ 0x00, 0x1C, 0x00, 0x00, 0x7E, 0x5D, 0x00, 0xC1, 0x13, 0x1A, 0x4B, 0x00, 0xFE, 0x4D, 0x07, 0x19, +/* 00011A60 */ 0xA0, 0x41, 0xD1, 0x00, 0x6F, 0xFF, 0x42, 0x48, 0x01, 0x00, 0xFF, 0x42, 0x48, 0x01, 0x00, 0x06, +/* 00011A70 */ 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFF, 0x42, 0x48, 0x01, 0x00, 0xFE, 0x4D, 0x15, 0xFE, 0x4D, 0x15, +/* 00011A80 */ 0x03, 0xFE, 0x8B, 0x04, 0xFE, 0x8C, 0x04, 0xFE, 0x8D, 0x04, 0x0B, 0x14, 0x1B, 0x05, 0x87, 0x82, +/* 00011A90 */ 0x02, 0x05, 0x19, 0x19, 0x19, 0x19, 0x05, 0x18, 0x19, 0x1A, 0x06, 0xFE, 0x27, 0x03, 0x07, 0x05, +/* 00011AA0 */ 0xFE, 0x8E, 0x04, 0x08, 0x06, 0xFE, 0xEC, 0x03, 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, 0x2B, 0x03, +/* 00011AB0 */ 0x0C, 0x06, 0xFE, 0x2C, 0x03, 0x06, 0xFE, 0x2D, 0x03, 0x06, 0xFE, 0xED, 0x03, 0x0B, 0x05, 0xFE, +/* 00011AC0 */ 0x8F, 0x04, 0x06, 0xFE, 0x38, 0x03, 0x05, 0xFE, 0x90, 0x04, 0x06, 0xFE, 0x91, 0x04, 0x05, 0xFE, +/* 00011AD0 */ 0x92, 0x04, 0x06, 0xFE, 0xEE, 0x03, 0xFE, 0xDF, 0x01, 0x4E, 0x14, 0x4E, 0x15, 0x4E, 0x16, 0x4E, +/* 00011AE0 */ 0x17, 0x4E, 0x1B, 0x96, 0x02, 0x1B, 0x4E, 0x1B, 0x96, 0x03, 0x1B, 0x4E, 0x1B, 0x96, 0x04, 0x1B, +/* 00011AF0 */ 0x8E, 0x02, 0x32, 0x1B, 0x15, 0x03, 0x00, 0x1B, 0x02, 0x09, 0x05, 0x00, 0xA8, 0x00, 0x09, 0xB5, +/* 00011B00 */ 0x01, 0xD6, 0x00, 0x1B, 0x96, 0x02, 0x1B, 0xD6, 0x01, 0x1B, 0x96, 0x03, 0x1B, 0xCD, 0x1B, 0x96, +/* 00011B10 */ 0x04, 0x1B, 0x8E, 0x02, 0x23, 0x1B, 0x07, 0x03, 0x00, 0x59, 0x00, 0x05, 0x59, 0x01, 0x04, 0xD6, +/* 00011B20 */ 0x02, 0x1C, 0x59, 0x02, 0x1C, 0x1F, 0x03, 0x1B, 0x1B, 0x45, 0x14, 0x1B, 0x8E, 0x02, 0x36, 0x1C, +/* 00011B30 */ 0x4A, 0x1C, 0x6C, 0x1B, 0x1C, 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x1C, 0x59, 0x01, 0x14, 0x59, +/* 00011B40 */ 0x02, 0x06, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0x92, +/* 00011B50 */ 0x04, 0x1E, 0x7A, 0x1E, 0x1D, 0x01, 0x7A, 0x09, 0x1D, 0x02, 0x7A, 0x09, 0x1D, 0x03, 0x7A, 0x09, +/* 00011B60 */ 0x1D, 0x04, 0x59, 0x03, 0x1D, 0x1F, 0x04, 0xFF, 0x1B, 0x8E, 0x02, 0x36, 0x1C, 0x4A, 0x1C, 0x6C, +/* 00011B70 */ 0x1B, 0x1C, 0x05, 0x07, 0x04, 0x00, 0x59, 0x00, 0x1C, 0x92, 0x04, 0x1D, 0x59, 0x01, 0x1D, 0x59, +/* 00011B80 */ 0x02, 0x0C, 0xCE, 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0x7A, +/* 00011B90 */ 0x14, 0x1D, 0x06, 0x7A, 0x0D, 0x1D, 0x07, 0x7A, 0x09, 0x1D, 0x08, 0x7A, 0x0D, 0x1D, 0x09, 0x59, +/* 00011BA0 */ 0x03, 0x1D, 0x1F, 0x04, 0xFF, 0x1B, 0x8E, 0x01, 0x06, 0x1B, 0x4A, 0x1B, 0x07, 0x03, 0x00, 0x59, +/* 00011BB0 */ 0x00, 0x05, 0x59, 0x01, 0x0E, 0xD6, 0x03, 0x1C, 0x59, 0x02, 0x1C, 0x1F, 0x03, 0x1B, 0x1B, 0x45, +/* 00011BC0 */ 0x15, 0x1B, 0x8E, 0x02, 0x36, 0x1C, 0x4A, 0x1C, 0x6C, 0x1B, 0x1C, 0x0A, 0x07, 0x04, 0x00, 0x59, +/* 00011BD0 */ 0x00, 0x1C, 0x59, 0x01, 0x14, 0x59, 0x02, 0x0F, 0xCE, 0x30, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, +/* 00011BE0 */ 0x00, 0x1D, 0x00, 0x00, 0x00, 0x7A, 0x15, 0x1D, 0x0B, 0x7A, 0x0D, 0x1D, 0x0C, 0x7A, 0x09, 0x1D, +/* 00011BF0 */ 0x0D, 0x7A, 0x0D, 0x1D, 0x0E, 0x59, 0x03, 0x1D, 0x1F, 0x04, 0xFF, 0x1B, 0x8E, 0x01, 0x06, 0x1B, +/* 00011C00 */ 0x4A, 0x1B, 0x07, 0x03, 0x00, 0x59, 0x00, 0x05, 0x59, 0x01, 0x10, 0xD6, 0x04, 0x1C, 0x59, 0x02, +/* 00011C10 */ 0x1C, 0x1F, 0x03, 0x1B, 0x1B, 0x45, 0x16, 0x1B, 0x8E, 0x02, 0x36, 0x1C, 0x4A, 0x1C, 0x6C, 0x1B, +/* 00011C20 */ 0x1C, 0x0F, 0x07, 0x04, 0x00, 0x59, 0x00, 0x1C, 0x92, 0x04, 0x1D, 0x59, 0x01, 0x1D, 0x59, 0x02, +/* 00011C30 */ 0x11, 0xCE, 0x48, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0x7A, 0x16, +/* 00011C40 */ 0x1D, 0x10, 0x7A, 0x09, 0x1D, 0x11, 0x7A, 0x0D, 0x1D, 0x12, 0x7A, 0x0D, 0x1D, 0x13, 0x59, 0x03, +/* 00011C50 */ 0x1D, 0x1F, 0x04, 0xFF, 0x1B, 0x8E, 0x01, 0x06, 0x1B, 0x4A, 0x1B, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 00011C60 */ 0x05, 0x59, 0x01, 0x12, 0xD6, 0x05, 0x1C, 0x59, 0x02, 0x1C, 0x1F, 0x03, 0x1B, 0x1B, 0x45, 0x17, +/* 00011C70 */ 0x1B, 0x8E, 0x02, 0x36, 0x1C, 0x4A, 0x1C, 0x6C, 0x1B, 0x1C, 0x14, 0x07, 0x04, 0x00, 0x59, 0x00, +/* 00011C80 */ 0x1C, 0x92, 0x04, 0x1D, 0x59, 0x01, 0x1D, 0x59, 0x02, 0x13, 0xCE, 0x60, 0x00, 0x00, 0x00, 0x04, +/* 00011C90 */ 0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0x7A, 0x17, 0x1D, 0x15, 0x7A, 0x09, 0x1D, 0x16, 0x7A, +/* 00011CA0 */ 0x0D, 0x1D, 0x17, 0x7A, 0x0D, 0x1D, 0x18, 0x59, 0x03, 0x1D, 0x1F, 0x04, 0xFF, 0x1B, 0x45, 0x00, +/* 00011CB0 */ 0x14, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x05, 0x78, 0x00, 0x60, 0x00, 0x00, 0x00, 0x03, +/* 00011CC0 */ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, +/* 00011CD0 */ 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, +/* 00011CE0 */ 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x96, +/* 00011CF0 */ 0x01, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, +/* 00011D00 */ 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x18, +/* 00011D10 */ 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, +/* 00011D20 */ 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, +/* 00011D30 */ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, +/* 00011D40 */ 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, +/* 00011D50 */ 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, +/* 00011D60 */ 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, +/* 00011D70 */ 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, +/* 00011D80 */ 0xFE, 0x96, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, +/* 00011D90 */ 0x96, 0x01, 0xFF, 0x57, 0x48, 0x01, 0x00, 0x10, 0x17, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x27, 0x00, +/* 00011DA0 */ 0x05, 0x00, 0x23, 0x01, 0x06, 0x00, 0x02, 0x05, 0x06, 0x00, 0xD6, 0x00, 0x05, 0x00, 0x7A, 0x00, +/* 00011DB0 */ 0x1A, 0x00, 0x85, 0x02, 0x3D, 0x00, 0xC8, 0x00, 0x3D, 0x00, 0xC7, 0x00, 0x1C, 0x00, 0x12, 0x01, +/* 00011DC0 */ 0x3A, 0x00, 0x09, 0x01, 0x1C, 0x00, 0xAC, 0x01, 0x3D, 0x00, 0xBE, 0x00, 0x1C, 0x00, 0x1A, 0x04, +/* 00011DD0 */ 0x3D, 0x00, 0xD0, 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, 0xFD, 0x22, 0x01, 0x00, 0x65, 0x22, 0x01, +/* 00011DE0 */ 0x00, 0x36, 0x21, 0x01, 0x00, 0xA1, 0x20, 0x01, 0x00, 0xB9, 0x1F, 0x01, 0x00, 0xF1, 0x1D, 0x01, +/* 00011DF0 */ 0x00, 0x7F, 0x5D, 0x00, 0xC1, 0x03, 0x1A, 0x0B, 0x00, 0xFE, 0xBC, 0x07, 0x61, 0xA0, 0x41, 0xC3, +/* 00011E00 */ 0x00, 0xFE, 0xEE, 0x03, 0x75, 0xFF, 0xE5, 0x58, 0x01, 0x00, 0xFF, 0xE5, 0x58, 0x01, 0x00, 0x01, +/* 00011E10 */ 0x08, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFF, 0xE5, 0x58, 0x01, 0x00, 0xFE, 0xB6, 0x03, 0xFE, 0xB6, +/* 00011E20 */ 0x03, 0x01, 0xFE, 0x99, 0x04, 0x06, 0x0D, 0x11, 0x05, 0x2D, 0x2D, 0x03, 0x03, 0x03, 0x03, 0x03, +/* 00011E30 */ 0x03, 0x0E, 0x0F, 0x10, 0x05, 0xFE, 0x90, 0x04, 0x06, 0xFE, 0x31, 0x03, 0x06, 0xFE, 0xD7, 0x03, +/* 00011E40 */ 0x06, 0xFE, 0x93, 0x04, 0x06, 0xFE, 0xDA, 0x03, 0x06, 0xFE, 0xDB, 0x03, 0x06, 0xFE, 0xDC, 0x03, +/* 00011E50 */ 0x06, 0xFE, 0xDD, 0x03, 0x06, 0xFE, 0xDE, 0x03, 0x06, 0xFE, 0x96, 0x04, 0x08, 0x92, 0x58, 0x0D, +/* 00011E60 */ 0x4E, 0x11, 0x96, 0x02, 0x11, 0x8E, 0x03, 0x03, 0x12, 0x6C, 0x11, 0x12, 0x00, 0x07, 0x02, 0x00, +/* 00011E70 */ 0x59, 0x00, 0x12, 0x59, 0x01, 0x0D, 0x1F, 0x02, 0x11, 0x11, 0x96, 0x02, 0x11, 0x92, 0x02, 0x11, +/* 00011E80 */ 0x0E, 0x0B, 0x00, 0x11, 0x92, 0x02, 0x11, 0x5E, 0x11, 0x11, 0x01, 0x0F, 0x18, 0x00, 0x11, 0x8E, +/* 00011E90 */ 0x03, 0x03, 0x12, 0x6C, 0x11, 0x12, 0x02, 0x07, 0x03, 0x00, 0x59, 0x00, 0x12, 0x59, 0x01, 0x02, +/* 00011EA0 */ 0x59, 0x02, 0x03, 0x1F, 0x03, 0xFF, 0x11, 0x8E, 0x02, 0x17, 0x11, 0x4A, 0x11, 0x07, 0x04, 0x00, +/* 00011EB0 */ 0x59, 0x00, 0x0C, 0xCF, 0x12, 0x08, 0xA1, 0x00, 0x04, 0x12, 0xA1, 0x01, 0x05, 0x12, 0xA1, 0x02, +/* 00011EC0 */ 0x06, 0x12, 0xA1, 0x03, 0x07, 0x12, 0xA1, 0x04, 0x08, 0x12, 0xA1, 0x05, 0x09, 0x12, 0xA1, 0x06, +/* 00011ED0 */ 0x0A, 0x12, 0xA1, 0x07, 0x0B, 0x12, 0x59, 0x01, 0x12, 0x92, 0x02, 0x12, 0x59, 0x02, 0x12, 0xD6, +/* 00011EE0 */ 0x00, 0x12, 0x59, 0x03, 0x12, 0x1F, 0x04, 0x00, 0x11, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, +/* 00011EF0 */ 0xFE, 0x05, 0x02, 0xFE, 0x97, 0x04, 0xFE, 0xB6, 0x02, 0xFF, 0x0E, 0x59, 0x01, 0x00, 0x05, 0x07, +/* 00011F00 */ 0x00, 0x00, 0x00, 0x18, 0x00, 0x37, 0x00, 0x12, 0x00, 0x39, 0x00, 0x18, 0x00, 0x6F, 0x00, 0x47, +/* 00011F10 */ 0x00, 0xAD, 0x02, 0x00, 0x18, 0x1F, 0x01, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x07, 0x00, +/* 00011F20 */ 0xFE, 0xCB, 0x07, 0x13, 0xA2, 0x41, 0xD0, 0x00, 0x76, 0xFE, 0x01, 0x10, 0xFF, 0x46, 0x5B, 0x01, +/* 00011F30 */ 0x00, 0xFF, 0x46, 0x5B, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFF, 0x46, 0x5B, 0x01, +/* 00011F40 */ 0x00, 0xFE, 0x49, 0x01, 0xFE, 0x49, 0x01, 0x07, 0x05, 0x08, 0x04, 0x14, 0x12, 0x04, 0x02, 0x03, +/* 00011F50 */ 0x03, 0x03, 0x03, 0x07, 0x06, 0xFE, 0x96, 0x04, 0x01, 0x00, 0x0B, 0x3D, 0x14, 0x03, 0x00, 0x05, +/* 00011F60 */ 0x02, 0x09, 0x31, 0x00, 0x45, 0x08, 0x06, 0x8E, 0x04, 0x36, 0x0A, 0x4A, 0x0A, 0x6C, 0x09, 0x0A, +/* 00011F70 */ 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0A, 0x8E, 0x01, 0x02, 0x0B, 0x4A, 0x0B, 0x5E, 0x0B, 0x0B, +/* 00011F80 */ 0x01, 0x59, 0x01, 0x0B, 0x59, 0x02, 0x03, 0x1F, 0x03, 0x09, 0x09, 0x76, 0x09, 0x08, 0x02, 0x45, +/* 00011F90 */ 0x00, 0x04, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x50, 0x01, 0xFE, 0x96, 0x04, 0xFE, +/* 00011FA0 */ 0x96, 0x04, 0xFF, 0x6C, 0x5B, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0xA6, 0x00, +/* 00011FB0 */ 0x2B, 0x00, 0x51, 0x00, 0x08, 0x00, 0x2B, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, +/* 00011FC0 */ 0x00, 0xFE, 0xAC, 0x07, 0x4F, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x91, 0x04, 0x74, 0xFF, 0x69, 0x56, +/* 00011FD0 */ 0x01, 0x00, 0xFF, 0x69, 0x56, 0x01, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0x69, 0x56, +/* 00011FE0 */ 0x01, 0x00, 0xFE, 0x5A, 0x01, 0xFE, 0x5A, 0x01, 0x07, 0x05, 0x0A, 0x04, 0x26, 0x24, 0x03, 0x03, +/* 00011FF0 */ 0x04, 0x04, 0x04, 0x04, 0x09, 0x05, 0xFE, 0x90, 0x04, 0x06, 0xFE, 0x31, 0x03, 0x08, 0x77, 0x58, +/* 00012000 */ 0x06, 0x4E, 0x07, 0x4E, 0x08, 0x8E, 0x03, 0x03, 0x0B, 0x6C, 0x0A, 0x0B, 0x00, 0x07, 0x02, 0x00, +/* 00012010 */ 0x59, 0x00, 0x0B, 0x59, 0x01, 0x06, 0x1F, 0x02, 0x0A, 0x0A, 0x45, 0x07, 0x0A, 0x0E, 0x08, 0x00, +/* 00012020 */ 0x07, 0x5E, 0x0A, 0x07, 0x01, 0x0F, 0x18, 0x00, 0x0A, 0x8E, 0x03, 0x03, 0x0B, 0x6C, 0x0A, 0x0B, +/* 00012030 */ 0x02, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0B, 0x59, 0x01, 0x02, 0x59, 0x02, 0x03, 0x1F, 0x03, 0xFF, +/* 00012040 */ 0x0A, 0x8E, 0x03, 0x24, 0x0B, 0x6C, 0x0A, 0x0B, 0x03, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0B, 0x59, +/* 00012050 */ 0x01, 0x05, 0x1F, 0x02, 0x0A, 0x0A, 0x45, 0x08, 0x0A, 0x8E, 0x01, 0x03, 0x0A, 0x4A, 0x0A, 0x07, +/* 00012060 */ 0x03, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x07, 0x59, 0x02, 0x08, 0x1F, 0x03, 0x00, 0x0A, 0x09, +/* 00012070 */ 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x05, 0x02, 0xFE, 0x97, 0x04, 0xFE, 0xB6, 0x02, 0xFE, +/* 00012080 */ 0x23, 0x03, 0xFF, 0x8E, 0x56, 0x01, 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 0x18, 0x00, 0x37, 0x00, +/* 00012090 */ 0x0C, 0x00, 0x39, 0x00, 0x18, 0x00, 0x6F, 0x00, 0x18, 0x00, 0x30, 0x00, 0x1B, 0x00, 0x25, 0x00, +/* 000120A0 */ 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0xA1, 0x07, 0x5D, 0xA2, 0x41, 0xC3, +/* 000120B0 */ 0x00, 0xFE, 0x38, 0x03, 0x73, 0xFF, 0x5C, 0x54, 0x01, 0x00, 0xFF, 0x5C, 0x54, 0x01, 0x00, 0x01, +/* 000120C0 */ 0xFE, 0x00, 0x90, 0x03, 0x02, 0xFF, 0x5C, 0x54, 0x01, 0x00, 0xB2, 0xB2, 0x05, 0x03, 0x06, 0x08, +/* 000120D0 */ 0x17, 0x16, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x05, 0x08, 0x45, 0x15, 0x05, 0x00, 0x04, 0x02, +/* 000120E0 */ 0xA8, 0x06, 0x45, 0x04, 0x06, 0x8E, 0x02, 0x16, 0x06, 0x4A, 0x06, 0x07, 0x04, 0x00, 0x59, 0x00, +/* 000120F0 */ 0x02, 0x8E, 0x03, 0x03, 0x07, 0x5E, 0x07, 0x07, 0x00, 0x59, 0x01, 0x07, 0x8E, 0x02, 0x12, 0x07, +/* 00012100 */ 0x4A, 0x07, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x03, 0x1F, 0x02, 0x07, 0x07, 0x59, +/* 00012110 */ 0x02, 0x07, 0x59, 0x03, 0x04, 0x1F, 0x04, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, +/* 00012120 */ 0xFE, 0xF2, 0x01, 0xFF, 0x81, 0x54, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x23, +/* 00012130 */ 0x00, 0x39, 0x00, 0x69, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x83, +/* 00012140 */ 0x07, 0x42, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x31, 0x03, 0x72, 0xFF, 0x2D, 0x50, 0x01, 0x00, 0xFF, +/* 00012150 */ 0x2D, 0x50, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x01, 0xFF, 0x2D, 0x50, 0x01, 0x00, 0xFE, +/* 00012160 */ 0x0A, 0x02, 0xFE, 0x0A, 0x02, 0x08, 0x05, 0x0B, 0x05, 0x3A, 0x35, 0x03, 0x05, 0x03, 0x03, 0x03, +/* 00012170 */ 0x03, 0x0A, 0x08, 0x05, 0xFE, 0x8E, 0x04, 0x06, 0xFE, 0x31, 0x03, 0xB3, 0x01, 0x5D, 0x01, 0x07, +/* 00012180 */ 0x4E, 0x08, 0x4E, 0x09, 0x15, 0x05, 0x00, 0x05, 0x02, 0xA8, 0x0B, 0x45, 0x05, 0x0B, 0x15, 0x05, +/* 00012190 */ 0x00, 0x06, 0x02, 0xA8, 0x0B, 0x45, 0x06, 0x0B, 0x4E, 0x08, 0x4E, 0x09, 0xA8, 0x0B, 0x14, 0x03, +/* 000121A0 */ 0x00, 0x07, 0x0B, 0x09, 0x18, 0x00, 0x8E, 0x03, 0x03, 0x0C, 0x6C, 0x0B, 0x0C, 0x00, 0x07, 0x03, +/* 000121B0 */ 0x00, 0x59, 0x00, 0x0C, 0x59, 0x01, 0x03, 0x59, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x0B, 0x8E, 0x02, +/* 000121C0 */ 0x07, 0x0B, 0x4A, 0x0B, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x07, 0x8E, 0x01, 0x04, +/* 000121D0 */ 0x0C, 0x4A, 0x0C, 0x59, 0x02, 0x0C, 0x1F, 0x03, 0x0B, 0x0B, 0x45, 0x08, 0x0B, 0x8E, 0x03, 0x36, +/* 000121E0 */ 0x0C, 0x4A, 0x0C, 0x6C, 0x0B, 0x0C, 0x01, 0x07, 0x01, 0x00, 0x59, 0x00, 0x0C, 0x1F, 0x01, 0x0B, +/* 000121F0 */ 0x0B, 0x45, 0x09, 0x0B, 0x8E, 0x03, 0x03, 0x0C, 0x6C, 0x0B, 0x0C, 0x02, 0x07, 0x03, 0x00, 0x59, +/* 00012200 */ 0x00, 0x0C, 0x59, 0x01, 0x08, 0x59, 0x02, 0x09, 0x1F, 0x03, 0xFF, 0x0B, 0x8E, 0x01, 0x02, 0x0B, +/* 00012210 */ 0x4A, 0x0B, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x09, 0x59, 0x02, 0x05, 0x59, 0x03, +/* 00012220 */ 0x06, 0x1F, 0x04, 0xFF, 0x0B, 0x45, 0x00, 0x08, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, +/* 00012230 */ 0xB6, 0x02, 0x69, 0xFE, 0x06, 0x02, 0xFF, 0x42, 0x50, 0x01, 0x00, 0x0A, 0x08, 0x00, 0x00, 0x00, +/* 00012240 */ 0x0A, 0x00, 0x15, 0x00, 0x0E, 0x00, 0x23, 0x00, 0x0A, 0x00, 0x30, 0x00, 0x18, 0x00, 0x5E, 0x00, +/* 00012250 */ 0x1F, 0x00, 0x62, 0x00, 0x17, 0x00, 0x2C, 0x00, 0x18, 0x00, 0x41, 0x00, 0x19, 0x00, 0x43, 0x00, +/* 00012260 */ 0x08, 0x00, 0x1C, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x78, 0x07, +/* 00012270 */ 0x1E, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x8C, 0x04, 0x71, 0xFF, 0xB9, 0x4E, 0x01, 0x00, 0xFF, 0xB9, +/* 00012280 */ 0x4E, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFF, 0xB9, 0x4E, 0x01, 0x00, 0xB5, 0xB5, +/* 00012290 */ 0x05, 0x03, 0x06, 0x04, 0x15, 0x14, 0x03, 0x02, 0x02, 0x02, 0x02, 0x02, 0x05, 0x05, 0xFE, 0x98, +/* 000122A0 */ 0x04, 0x40, 0x8E, 0x03, 0x36, 0x07, 0x4A, 0x07, 0x6C, 0x06, 0x07, 0x00, 0x07, 0x02, 0x00, 0x59, +/* 000122B0 */ 0x00, 0x07, 0x59, 0x01, 0x04, 0x1F, 0x02, 0x06, 0x06, 0x0F, 0x06, 0x00, 0x06, 0x45, 0x00, 0x02, +/* 000122C0 */ 0x09, 0x1D, 0x00, 0x8E, 0x03, 0x03, 0x07, 0x6C, 0x06, 0x07, 0x01, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 000122D0 */ 0x07, 0x59, 0x01, 0x03, 0x59, 0x02, 0x04, 0x1F, 0x03, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA8, 0x00, +/* 000122E0 */ 0x24, 0x00, 0xC1, 0xFE, 0x02, 0x02, 0xFF, 0xE1, 0x4E, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, +/* 000122F0 */ 0x1B, 0x00, 0x26, 0x00, 0x06, 0x00, 0x2B, 0x00, 0x1D, 0x00, 0x3B, 0x00, 0x00, 0x7F, 0x5C, 0x00, +/* 00012300 */ 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x5B, 0x07, 0x26, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x8B, 0x04, +/* 00012310 */ 0x70, 0xFF, 0xBF, 0x49, 0x01, 0x00, 0xFF, 0xBF, 0x49, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x04, +/* 00012320 */ 0x04, 0xFF, 0xBF, 0x49, 0x01, 0x00, 0xFE, 0xAF, 0x03, 0xFE, 0xAF, 0x03, 0x0A, 0x0D, 0x14, 0x07, +/* 00012330 */ 0x67, 0x5F, 0x03, 0x07, 0x0B, 0x0B, 0x0B, 0x0B, 0x13, 0x08, 0x06, 0xFE, 0xE0, 0x03, 0x06, 0xFE, +/* 00012340 */ 0xA3, 0x03, 0x05, 0xFE, 0x9C, 0x03, 0x05, 0xFE, 0xDF, 0x03, 0x06, 0xFE, 0x93, 0x04, 0x05, 0xFE, +/* 00012350 */ 0x94, 0x04, 0x05, 0xFE, 0x95, 0x04, 0x01, 0x00, 0x01, 0x03, 0x0B, 0xFE, 0x49, 0x01, 0x4E, 0x10, +/* 00012360 */ 0x4E, 0x11, 0x4E, 0x12, 0x8E, 0x02, 0x12, 0x14, 0x4A, 0x14, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, +/* 00012370 */ 0x59, 0x01, 0x0E, 0x1F, 0x02, 0x14, 0x14, 0x45, 0x10, 0x14, 0xA8, 0x14, 0x14, 0x03, 0x00, 0x0F, +/* 00012380 */ 0x14, 0x09, 0x1A, 0x00, 0x8E, 0x03, 0x36, 0x16, 0x4A, 0x16, 0x6C, 0x15, 0x16, 0x00, 0x07, 0x01, +/* 00012390 */ 0x00, 0x59, 0x00, 0x16, 0x1F, 0x01, 0x15, 0x15, 0x45, 0x14, 0x15, 0x09, 0x18, 0x00, 0x8E, 0x03, +/* 000123A0 */ 0x24, 0x16, 0x6C, 0x15, 0x16, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x16, 0x59, 0x01, 0x0F, 0x1F, +/* 000123B0 */ 0x02, 0x15, 0x15, 0x46, 0x14, 0x15, 0x45, 0x0F, 0x14, 0x8E, 0x03, 0x36, 0x15, 0x4A, 0x15, 0x6C, +/* 000123C0 */ 0x14, 0x15, 0x02, 0x07, 0x01, 0x00, 0x59, 0x00, 0x15, 0x1F, 0x01, 0x14, 0x14, 0x45, 0x11, 0x14, +/* 000123D0 */ 0x45, 0x14, 0x11, 0x8E, 0x02, 0x02, 0x15, 0x4A, 0x15, 0x07, 0x06, 0x00, 0x59, 0x00, 0x02, 0x59, +/* 000123E0 */ 0x01, 0x0F, 0x59, 0x02, 0x03, 0x59, 0x03, 0x04, 0xCF, 0x16, 0x02, 0xA1, 0x00, 0x05, 0x16, 0xA1, +/* 000123F0 */ 0x01, 0x06, 0x16, 0x59, 0x04, 0x16, 0x59, 0x05, 0x06, 0x1F, 0x06, 0x15, 0x15, 0x76, 0x15, 0x14, +/* 00012400 */ 0x03, 0x45, 0x14, 0x0D, 0x8E, 0x02, 0x02, 0x15, 0x4A, 0x15, 0x07, 0x06, 0x00, 0x59, 0x00, 0x02, +/* 00012410 */ 0x59, 0x01, 0x0F, 0x59, 0x02, 0x07, 0x59, 0x03, 0x04, 0xCF, 0x16, 0x02, 0xA1, 0x00, 0x08, 0x16, +/* 00012420 */ 0xA1, 0x01, 0x09, 0x16, 0x59, 0x04, 0x16, 0x59, 0x05, 0x08, 0x1F, 0x06, 0x15, 0x15, 0x76, 0x15, +/* 00012430 */ 0x14, 0x04, 0x8E, 0x02, 0x15, 0x14, 0x4A, 0x14, 0x07, 0x05, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, +/* 00012440 */ 0x0D, 0x59, 0x02, 0x0F, 0x59, 0x03, 0x0A, 0x59, 0x04, 0x0B, 0x1F, 0x05, 0xFF, 0x14, 0x8E, 0x02, +/* 00012450 */ 0x0C, 0x14, 0x4A, 0x14, 0x07, 0x05, 0x00, 0x59, 0x00, 0x02, 0x8E, 0x03, 0x03, 0x15, 0x5E, 0x15, +/* 00012460 */ 0x15, 0x05, 0x59, 0x01, 0x15, 0x59, 0x02, 0x10, 0x59, 0x03, 0x11, 0xCF, 0x15, 0x00, 0x59, 0x04, +/* 00012470 */ 0x15, 0x1F, 0x05, 0x14, 0x14, 0x45, 0x12, 0x14, 0x5E, 0x14, 0x12, 0x06, 0x76, 0x14, 0x0D, 0x07, +/* 00012480 */ 0x8E, 0x03, 0x03, 0x15, 0x6C, 0x14, 0x15, 0x08, 0x07, 0x02, 0x00, 0x59, 0x00, 0x15, 0x59, 0x01, +/* 00012490 */ 0x0D, 0x1F, 0x02, 0x14, 0x14, 0x76, 0x14, 0x0D, 0x09, 0x76, 0x0C, 0x0D, 0x0A, 0x45, 0x00, 0x0D, +/* 000124A0 */ 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x69, 0xFE, 0x21, 0x03, 0x69, 0xFE, 0x04, 0x04, 0xF6, +/* 000124B0 */ 0xFE, 0xF2, 0x01, 0xFE, 0x0D, 0x02, 0xFE, 0x0D, 0x02, 0xFE, 0x03, 0x02, 0xFE, 0x96, 0x04, 0xFE, +/* 000124C0 */ 0x97, 0x04, 0xFF, 0xF6, 0x49, 0x01, 0x00, 0x0C, 0x06, 0x00, 0x00, 0x00, 0x16, 0x00, 0x46, 0x00, +/* 000124D0 */ 0x3F, 0x00, 0x57, 0x00, 0x17, 0x00, 0x24, 0x00, 0x31, 0x00, 0x6D, 0x00, 0x31, 0x00, 0x6B, 0x00, +/* 000124E0 */ 0x1C, 0x00, 0xA9, 0x00, 0x2A, 0x00, 0x5F, 0x00, 0x08, 0x00, 0x2B, 0x00, 0x19, 0x00, 0x57, 0x00, +/* 000124F0 */ 0x04, 0x00, 0x38, 0x00, 0x08, 0x00, 0x1C, 0x00, 0x00, 0x7E, 0x5D, 0x00, 0xC1, 0x13, 0x1A, 0x4B, +/* 00012500 */ 0x00, 0xFE, 0xFA, 0x04, 0x1A, 0xA0, 0x41, 0xD1, 0x00, 0x54, 0xFE, 0xE4, 0xD9, 0xFE, 0xE4, 0xD9, +/* 00012510 */ 0x0F, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFE, 0xE4, 0xD9, 0xFE, 0x3F, 0x6E, 0xFE, 0x3F, 0x6E, 0x0A, +/* 00012520 */ 0xFE, 0x26, 0x04, 0xFE, 0x27, 0x04, 0xFE, 0x28, 0x04, 0xFE, 0x29, 0x04, 0xFE, 0x2A, 0x04, 0xFE, +/* 00012530 */ 0x2B, 0x04, 0xFE, 0x2C, 0x04, 0xFE, 0x56, 0x02, 0xFE, 0x2D, 0x04, 0xFE, 0x0B, 0x02, 0x11, 0x35, +/* 00012540 */ 0x41, 0x09, 0xFE, 0x54, 0x01, 0xFE, 0x4C, 0x01, 0x02, 0x08, 0x30, 0x30, 0x30, 0x30, 0x08, 0x3E, +/* 00012550 */ 0x3F, 0x40, 0x06, 0xFE, 0x27, 0x03, 0x06, 0xFE, 0x2E, 0x04, 0x06, 0xFE, 0x2F, 0x04, 0x06, 0xFE, +/* 00012560 */ 0x30, 0x04, 0x06, 0xFE, 0x31, 0x04, 0x06, 0xFE, 0x32, 0x04, 0x06, 0xFE, 0xF8, 0x03, 0x06, 0xFE, +/* 00012570 */ 0x33, 0x04, 0x06, 0xFE, 0x34, 0x04, 0x06, 0xFE, 0x35, 0x04, 0x06, 0xFE, 0x36, 0x04, 0x06, 0xFE, +/* 00012580 */ 0x37, 0x04, 0x06, 0xFE, 0x38, 0x04, 0x06, 0xFE, 0x39, 0x04, 0x06, 0xFE, 0x3A, 0x04, 0x06, 0xFE, +/* 00012590 */ 0x3B, 0x04, 0x01, 0x01, 0x08, 0x06, 0xFE, 0x21, 0x04, 0x01, 0x00, 0x06, 0xFE, 0x3C, 0x04, 0x06, +/* 000125A0 */ 0xFE, 0x3D, 0x04, 0x01, 0x02, 0x07, 0x05, 0xFE, 0x3E, 0x04, 0x06, 0xFE, 0x3F, 0x04, 0x06, 0xFE, +/* 000125B0 */ 0x40, 0x04, 0x05, 0xFE, 0x41, 0x04, 0x06, 0xFE, 0x42, 0x04, 0x05, 0xFE, 0x43, 0x04, 0x05, 0xFE, +/* 000125C0 */ 0x44, 0x04, 0x05, 0xFE, 0x45, 0x04, 0x05, 0xFE, 0x46, 0x04, 0x05, 0xFE, 0x47, 0x04, 0x06, 0xFE, +/* 000125D0 */ 0xEC, 0x03, 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, 0x2B, 0x03, 0x0C, 0x06, 0xFE, 0x2C, 0x03, 0x06, +/* 000125E0 */ 0xFE, 0x2D, 0x03, 0x06, 0xFE, 0xED, 0x03, 0x0B, 0x05, 0xFE, 0x14, 0x04, 0x06, 0xFE, 0x37, 0x03, +/* 000125F0 */ 0x06, 0xFE, 0x15, 0x04, 0x06, 0xFE, 0x77, 0x03, 0x06, 0xFE, 0x16, 0x04, 0x06, 0xFE, 0xEE, 0x03, +/* 00012600 */ 0x05, 0xFE, 0x48, 0x04, 0x05, 0xFE, 0x36, 0x03, 0x06, 0xFE, 0x38, 0x03, 0xFE, 0xA4, 0x04, 0xD6, +/* 00012610 */ 0x04, 0x35, 0x96, 0x02, 0x35, 0x4E, 0x36, 0x4E, 0x37, 0x4E, 0x38, 0x4E, 0x39, 0x4E, 0x3A, 0x4E, +/* 00012620 */ 0x3B, 0x4E, 0x3C, 0x4E, 0x3D, 0x4E, 0x41, 0x96, 0x03, 0x41, 0x4E, 0x41, 0x96, 0x04, 0x41, 0x4E, +/* 00012630 */ 0x41, 0x96, 0x05, 0x41, 0x4E, 0x41, 0x96, 0x06, 0x41, 0x4E, 0x41, 0x96, 0x07, 0x41, 0x4E, 0x41, +/* 00012640 */ 0x96, 0x08, 0x41, 0x4E, 0x41, 0x96, 0x09, 0x41, 0x4E, 0x41, 0x96, 0x0A, 0x41, 0x4E, 0x41, 0x96, +/* 00012650 */ 0x0B, 0x41, 0x8E, 0x02, 0x32, 0x41, 0x15, 0x03, 0x00, 0x41, 0x02, 0x09, 0x11, 0x00, 0x8E, 0x02, +/* 00012660 */ 0x32, 0x41, 0x15, 0x03, 0x00, 0x41, 0x03, 0x09, 0x05, 0x00, 0xA8, 0x00, 0x09, 0x42, 0x04, 0xCF, +/* 00012670 */ 0x41, 0x03, 0xA1, 0x00, 0x04, 0x41, 0xA1, 0x01, 0x05, 0x41, 0xA1, 0x02, 0x06, 0x41, 0x45, 0x36, +/* 00012680 */ 0x41, 0xCF, 0x41, 0x02, 0xA1, 0x00, 0x07, 0x41, 0xA1, 0x01, 0x08, 0x41, 0x45, 0x37, 0x41, 0x8E, +/* 00012690 */ 0x02, 0x36, 0x42, 0x4A, 0x42, 0x6C, 0x41, 0x42, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x42, 0x59, +/* 000126A0 */ 0x01, 0x37, 0x59, 0x02, 0x36, 0x1F, 0x03, 0x41, 0x41, 0x45, 0x38, 0x41, 0xCF, 0x41, 0x09, 0xCF, +/* 000126B0 */ 0x42, 0x02, 0xA1, 0x00, 0x09, 0x42, 0xA1, 0x01, 0x36, 0x42, 0xA1, 0x00, 0x42, 0x41, 0xCF, 0x42, +/* 000126C0 */ 0x02, 0xA1, 0x00, 0x0A, 0x42, 0xA1, 0x01, 0x36, 0x42, 0xA1, 0x01, 0x42, 0x41, 0xCF, 0x42, 0x02, +/* 000126D0 */ 0xA1, 0x00, 0x0B, 0x42, 0xA1, 0x01, 0x37, 0x42, 0xA1, 0x02, 0x42, 0x41, 0xCF, 0x42, 0x02, 0xA1, +/* 000126E0 */ 0x00, 0x0C, 0x42, 0xA1, 0x01, 0x38, 0x42, 0xA1, 0x03, 0x42, 0x41, 0xCF, 0x42, 0x02, 0xA1, 0x00, +/* 000126F0 */ 0x0D, 0x42, 0xA1, 0x01, 0x37, 0x42, 0xA1, 0x04, 0x42, 0x41, 0xCF, 0x42, 0x02, 0xA1, 0x00, 0x0E, +/* 00012700 */ 0x42, 0xA1, 0x01, 0x37, 0x42, 0xA1, 0x05, 0x42, 0x41, 0xCF, 0x42, 0x02, 0xA1, 0x00, 0x0F, 0x42, +/* 00012710 */ 0xA1, 0x01, 0x37, 0x42, 0xA1, 0x06, 0x42, 0x41, 0xCF, 0x42, 0x02, 0xA1, 0x00, 0x10, 0x42, 0xA1, +/* 00012720 */ 0x01, 0x37, 0x42, 0xA1, 0x07, 0x42, 0x41, 0xCF, 0x42, 0x02, 0xA1, 0x00, 0x11, 0x42, 0x8E, 0x02, +/* 00012730 */ 0x36, 0x44, 0x4A, 0x44, 0x6C, 0x43, 0x44, 0x01, 0x07, 0x03, 0x00, 0x59, 0x00, 0x44, 0x59, 0x01, +/* 00012740 */ 0x36, 0x59, 0x02, 0x12, 0x1F, 0x03, 0x43, 0x43, 0xA1, 0x01, 0x43, 0x42, 0xA1, 0x08, 0x42, 0x41, +/* 00012750 */ 0x96, 0x03, 0x41, 0xD6, 0x00, 0x41, 0x07, 0x01, 0x00, 0x59, 0x00, 0x13, 0x1F, 0x01, 0x41, 0x41, +/* 00012760 */ 0x96, 0x04, 0x41, 0xD6, 0x01, 0x41, 0x96, 0x05, 0x41, 0xD6, 0x02, 0x41, 0x96, 0x06, 0x41, 0xD6, +/* 00012770 */ 0x03, 0x41, 0x45, 0x39, 0x41, 0xCF, 0x41, 0x03, 0xA8, 0x42, 0xA1, 0x00, 0x42, 0x41, 0xA8, 0x42, +/* 00012780 */ 0xA1, 0x01, 0x42, 0x41, 0xA8, 0x42, 0xA1, 0x02, 0x42, 0x41, 0x96, 0x07, 0x41, 0x8E, 0x02, 0x35, +/* 00012790 */ 0x41, 0x4A, 0x41, 0x07, 0x02, 0x00, 0x59, 0x00, 0x13, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 000127A0 */ 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x7A, 0x15, 0x42, 0x02, 0x7A, 0x12, 0x42, 0x03, 0x7A, 0x18, +/* 000127B0 */ 0x42, 0x04, 0x59, 0x01, 0x42, 0x1F, 0x02, 0x41, 0x41, 0x45, 0x3A, 0x41, 0xD6, 0x05, 0x41, 0x07, +/* 000127C0 */ 0x06, 0x00, 0x59, 0x00, 0x13, 0x59, 0x01, 0x1A, 0x59, 0x02, 0x1B, 0x59, 0x03, 0x1C, 0x5E, 0x42, +/* 000127D0 */ 0x3A, 0x05, 0x59, 0x04, 0x42, 0x8E, 0x02, 0x03, 0x42, 0x5E, 0x42, 0x42, 0x06, 0x5E, 0x42, 0x42, +/* 000127E0 */ 0x07, 0x59, 0x05, 0x42, 0x1F, 0x06, 0xFF, 0x41, 0xD6, 0x06, 0x41, 0x07, 0x06, 0x00, 0x59, 0x00, +/* 000127F0 */ 0x13, 0x59, 0x01, 0x1D, 0x59, 0x02, 0x1E, 0x59, 0x03, 0x1E, 0x5E, 0x42, 0x3A, 0x08, 0x59, 0x04, +/* 00012800 */ 0x42, 0x8E, 0x02, 0x03, 0x42, 0x5E, 0x42, 0x42, 0x09, 0x5E, 0x42, 0x42, 0x0A, 0x59, 0x05, 0x42, +/* 00012810 */ 0x1F, 0x06, 0xFF, 0x41, 0xD6, 0x07, 0x41, 0x07, 0x06, 0x00, 0x59, 0x00, 0x13, 0x59, 0x01, 0x1F, +/* 00012820 */ 0x59, 0x02, 0x20, 0x59, 0x03, 0x20, 0x5E, 0x42, 0x3A, 0x0B, 0x59, 0x04, 0x42, 0x8E, 0x02, 0x03, +/* 00012830 */ 0x42, 0x5E, 0x42, 0x42, 0x0C, 0x5E, 0x42, 0x42, 0x0D, 0x59, 0x05, 0x42, 0x1F, 0x06, 0xFF, 0x41, +/* 00012840 */ 0x8E, 0x02, 0x32, 0x41, 0x15, 0x03, 0x00, 0x41, 0x02, 0x09, 0x05, 0x00, 0xA8, 0x00, 0x09, 0x60, +/* 00012850 */ 0x02, 0xCD, 0x41, 0x96, 0x08, 0x41, 0x8E, 0x02, 0x23, 0x41, 0x07, 0x03, 0x00, 0x59, 0x00, 0x13, +/* 00012860 */ 0x59, 0x01, 0x21, 0xD6, 0x08, 0x42, 0x59, 0x02, 0x42, 0x1F, 0x03, 0x41, 0x41, 0x96, 0x09, 0x41, +/* 00012870 */ 0xD6, 0x09, 0x41, 0x96, 0x0A, 0x41, 0x8E, 0x01, 0x06, 0x41, 0x4A, 0x41, 0x07, 0x03, 0x00, 0x59, +/* 00012880 */ 0x00, 0x13, 0x59, 0x01, 0x22, 0xD6, 0x0A, 0x42, 0x59, 0x02, 0x42, 0x1F, 0x03, 0x41, 0x41, 0x96, +/* 00012890 */ 0x0B, 0x41, 0x8E, 0x01, 0x06, 0x41, 0x4A, 0x41, 0x07, 0x03, 0x00, 0x59, 0x00, 0x13, 0x59, 0x01, +/* 000128A0 */ 0x23, 0xD6, 0x0B, 0x42, 0x59, 0x02, 0x42, 0x1F, 0x03, 0x41, 0x41, 0x45, 0x3B, 0x41, 0x8E, 0x02, +/* 000128B0 */ 0x36, 0x42, 0x4A, 0x42, 0x6C, 0x41, 0x42, 0x0E, 0x07, 0x04, 0x00, 0x59, 0x00, 0x42, 0x92, 0x09, +/* 000128C0 */ 0x43, 0x59, 0x01, 0x43, 0x59, 0x02, 0x24, 0xCE, 0x14, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, +/* 000128D0 */ 0x43, 0x00, 0x00, 0x00, 0x92, 0x08, 0x44, 0x7A, 0x44, 0x43, 0x0F, 0x7A, 0x27, 0x43, 0x10, 0x7A, +/* 000128E0 */ 0x27, 0x43, 0x11, 0x7A, 0x27, 0x43, 0x12, 0x59, 0x03, 0x43, 0x1F, 0x04, 0xFF, 0x41, 0x8E, 0x02, +/* 000128F0 */ 0x36, 0x42, 0x4A, 0x42, 0x6C, 0x41, 0x42, 0x13, 0x07, 0x04, 0x00, 0x59, 0x00, 0x42, 0x92, 0x08, +/* 00012900 */ 0x43, 0x59, 0x01, 0x43, 0x59, 0x02, 0x2A, 0xCE, 0x2C, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, +/* 00012910 */ 0x43, 0x00, 0x00, 0x00, 0x92, 0x09, 0x44, 0x7A, 0x44, 0x43, 0x14, 0x7A, 0x2B, 0x43, 0x15, 0x7A, +/* 00012920 */ 0x27, 0x43, 0x16, 0x7A, 0x2B, 0x43, 0x17, 0x59, 0x03, 0x43, 0x1F, 0x04, 0xFF, 0x41, 0x8E, 0x01, +/* 00012930 */ 0x06, 0x41, 0x4A, 0x41, 0x07, 0x03, 0x00, 0x59, 0x00, 0x13, 0x59, 0x01, 0x2C, 0xD6, 0x0C, 0x42, +/* 00012940 */ 0x59, 0x02, 0x42, 0x1F, 0x03, 0x41, 0x41, 0x45, 0x3C, 0x41, 0x8E, 0x02, 0x36, 0x42, 0x4A, 0x42, +/* 00012950 */ 0x6C, 0x41, 0x42, 0x18, 0x07, 0x04, 0x00, 0x59, 0x00, 0x42, 0x59, 0x01, 0x3C, 0x59, 0x02, 0x2D, +/* 00012960 */ 0xCE, 0x44, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x7A, 0x2C, 0x43, +/* 00012970 */ 0x19, 0x7A, 0x27, 0x43, 0x1A, 0x7A, 0x27, 0x43, 0x1B, 0x7A, 0x2B, 0x43, 0x1C, 0x59, 0x03, 0x43, +/* 00012980 */ 0x1F, 0x04, 0xFF, 0x41, 0x8E, 0x02, 0x36, 0x42, 0x4A, 0x42, 0x6C, 0x41, 0x42, 0x1D, 0x07, 0x04, +/* 00012990 */ 0x00, 0x59, 0x00, 0x42, 0x92, 0x08, 0x43, 0x59, 0x01, 0x43, 0x59, 0x02, 0x2E, 0xCE, 0x5C, 0x00, +/* 000129A0 */ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x7A, 0x3C, 0x43, 0x1E, 0x7A, 0x27, +/* 000129B0 */ 0x43, 0x1F, 0x7A, 0x2B, 0x43, 0x20, 0x59, 0x03, 0x43, 0x1F, 0x04, 0xFF, 0x41, 0x8E, 0x02, 0x36, +/* 000129C0 */ 0x42, 0x4A, 0x42, 0x6C, 0x41, 0x42, 0x21, 0x07, 0x04, 0x00, 0x59, 0x00, 0x42, 0x92, 0x08, 0x43, +/* 000129D0 */ 0x59, 0x01, 0x43, 0x59, 0x02, 0x30, 0xCE, 0x70, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x43, +/* 000129E0 */ 0x00, 0x00, 0x00, 0x7A, 0x3B, 0x43, 0x22, 0x7A, 0x27, 0x43, 0x23, 0x7A, 0x2B, 0x43, 0x24, 0x7A, +/* 000129F0 */ 0x2B, 0x43, 0x25, 0x59, 0x03, 0x43, 0x1F, 0x04, 0xFF, 0x41, 0x8E, 0x02, 0x36, 0x42, 0x4A, 0x42, +/* 00012A00 */ 0x6C, 0x41, 0x42, 0x26, 0x07, 0x04, 0x00, 0x59, 0x00, 0x42, 0x92, 0x08, 0x43, 0x59, 0x01, 0x43, +/* 00012A10 */ 0x59, 0x02, 0x31, 0xCE, 0x88, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, +/* 00012A20 */ 0x8E, 0x01, 0x06, 0x44, 0x4A, 0x44, 0x07, 0x03, 0x00, 0x59, 0x00, 0x13, 0x59, 0x01, 0x32, 0xD6, +/* 00012A30 */ 0x0D, 0x45, 0x59, 0x02, 0x45, 0x1F, 0x03, 0x44, 0x44, 0x7A, 0x44, 0x43, 0x27, 0x7A, 0x2B, 0x43, +/* 00012A40 */ 0x28, 0x7A, 0x27, 0x43, 0x29, 0x7A, 0x2B, 0x43, 0x2A, 0x59, 0x03, 0x43, 0x1F, 0x04, 0xFF, 0x41, +/* 00012A50 */ 0x8E, 0x01, 0x06, 0x41, 0x4A, 0x41, 0x07, 0x03, 0x00, 0x59, 0x00, 0x13, 0x59, 0x01, 0x33, 0xD6, +/* 00012A60 */ 0x0E, 0x42, 0x59, 0x02, 0x42, 0x1F, 0x03, 0x41, 0x41, 0x45, 0x3D, 0x41, 0x8E, 0x02, 0x36, 0x42, +/* 00012A70 */ 0x4A, 0x42, 0x6C, 0x41, 0x42, 0x2B, 0x07, 0x04, 0x00, 0x59, 0x00, 0x42, 0x92, 0x09, 0x43, 0x59, +/* 00012A80 */ 0x01, 0x43, 0x59, 0x02, 0x34, 0xCE, 0xA0, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x43, 0x00, +/* 00012A90 */ 0x00, 0x00, 0x7A, 0x3D, 0x43, 0x2C, 0x7A, 0x2B, 0x43, 0x2D, 0x7A, 0x27, 0x43, 0x2E, 0x7A, 0x2B, +/* 00012AA0 */ 0x43, 0x2F, 0x59, 0x03, 0x43, 0x1F, 0x04, 0xFF, 0x41, 0x92, 0x09, 0x00, 0x09, 0x02, 0x00, 0xA8, +/* 00012AB0 */ 0x00, 0x24, 0x00, 0x08, 0xB8, 0x00, 0xA0, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, +/* 00012AC0 */ 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, +/* 00012AD0 */ 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, +/* 00012AE0 */ 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x70, 0x00, +/* 00012AF0 */ 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x94, 0x01, +/* 00012B00 */ 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x5C, 0x00, 0x00, 0x00, 0x03, 0x03, +/* 00012B10 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, +/* 00012B20 */ 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, +/* 00012B30 */ 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x2C, 0x00, +/* 00012B40 */ 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, +/* 00012B50 */ 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x03, 0x04, +/* 00012B60 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, +/* 00012B70 */ 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, +/* 00012B80 */ 0x00, 0x00, 0x72, 0x01, 0x00, 0x00, 0x70, 0x01, 0x00, 0x00, 0x73, 0x01, 0x00, 0x00, 0x65, 0xFE, +/* 00012B90 */ 0x50, 0x01, 0xFE, 0x72, 0x01, 0xFE, 0x70, 0x01, 0xFE, 0x73, 0x01, 0xFE, 0x72, 0x01, 0xFE, 0x2F, +/* 00012BA0 */ 0x02, 0xFE, 0x2A, 0x02, 0xFE, 0x70, 0x01, 0xFE, 0x2F, 0x02, 0xFE, 0x2B, 0x02, 0xFE, 0x73, 0x01, +/* 00012BB0 */ 0xFE, 0x2F, 0x02, 0xFE, 0x2C, 0x02, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, +/* 00012BC0 */ 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, +/* 00012BD0 */ 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, +/* 00012BE0 */ 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x98, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, +/* 00012BF0 */ 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x9C, +/* 00012C00 */ 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, +/* 00012C10 */ 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0xFA, 0xD9, 0x21, +/* 00012C20 */ 0x43, 0x00, 0x00, 0x00, 0x18, 0x00, 0x3E, 0x00, 0x05, 0x00, 0x1B, 0x00, 0x12, 0x00, 0x3D, 0x00, +/* 00012C30 */ 0x0E, 0x00, 0x38, 0x00, 0x1D, 0x00, 0x4C, 0x00, 0xA7, 0x00, 0xA3, 0x03, 0x10, 0x00, 0x44, 0x20, +/* 00012C40 */ 0x06, 0x00, 0x52, 0x0C, 0x06, 0x00, 0x25, 0x07, 0x06, 0x00, 0x78, 0x01, 0x18, 0x00, 0x5C, 0x00, +/* 00012C50 */ 0x2F, 0x00, 0xBD, 0x0E, 0x2C, 0x00, 0x34, 0x02, 0x2C, 0x00, 0x46, 0x02, 0x2C, 0x00, 0xA0, 0x02, +/* 00012C60 */ 0x0C, 0x00, 0x27, 0x00, 0x05, 0x00, 0x1B, 0x00, 0x05, 0x00, 0x07, 0x01, 0x1A, 0x00, 0x29, 0x04, +/* 00012C70 */ 0x06, 0x00, 0x3C, 0x03, 0x1C, 0x00, 0xDD, 0x02, 0x1C, 0x00, 0x05, 0x04, 0x40, 0x00, 0xCD, 0x00, +/* 00012C80 */ 0x40, 0x00, 0x4B, 0x01, 0x1C, 0x00, 0x28, 0x02, 0x3A, 0x00, 0xB7, 0x00, 0x39, 0x00, 0xA5, 0x00, +/* 00012C90 */ 0x3D, 0x00, 0xCE, 0x00, 0x56, 0x00, 0x0A, 0x06, 0x1C, 0x00, 0x16, 0x01, 0x3D, 0x00, 0xD0, 0x00, +/* 00012CA0 */ 0x08, 0x00, 0x1B, 0x00, 0x00, 0x27, 0x46, 0x01, 0x00, 0x8A, 0x42, 0x01, 0x00, 0xEA, 0x3D, 0x01, +/* 00012CB0 */ 0x00, 0x23, 0x3D, 0x01, 0x00, 0xC0, 0x3A, 0x01, 0x00, 0x75, 0x39, 0x01, 0x00, 0x2A, 0x38, 0x01, +/* 00012CC0 */ 0x00, 0xDF, 0x36, 0x01, 0x00, 0xE8, 0x34, 0x01, 0x00, 0xB1, 0x33, 0x01, 0x00, 0x54, 0x32, 0x01, +/* 00012CD0 */ 0x00, 0x9E, 0x30, 0x01, 0x00, 0x9A, 0x2F, 0x01, 0x00, 0x76, 0x2D, 0x01, 0x00, 0xE1, 0x2C, 0x01, +/* 00012CE0 */ 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x40, 0x07, 0x60, 0xA2, 0x41, 0xC3, +/* 00012CF0 */ 0x00, 0xFE, 0x38, 0x03, 0x6E, 0xFF, 0x79, 0x46, 0x01, 0x00, 0xFF, 0x79, 0x46, 0x01, 0x00, 0x01, +/* 00012D00 */ 0xFE, 0x00, 0x90, 0x03, 0x02, 0xFF, 0x79, 0x46, 0x01, 0x00, 0xB3, 0xB3, 0x05, 0x03, 0x06, 0x08, +/* 00012D10 */ 0x17, 0x16, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x05, 0x08, 0x45, 0x15, 0x05, 0x00, 0x04, 0x02, +/* 00012D20 */ 0xA8, 0x06, 0x45, 0x04, 0x06, 0x8E, 0x02, 0x16, 0x06, 0x4A, 0x06, 0x07, 0x04, 0x00, 0x59, 0x00, +/* 00012D30 */ 0x02, 0x8E, 0x03, 0x03, 0x07, 0x5E, 0x07, 0x07, 0x00, 0x59, 0x01, 0x07, 0x8E, 0x02, 0x12, 0x07, +/* 00012D40 */ 0x4A, 0x07, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x03, 0x1F, 0x02, 0x07, 0x07, 0x59, +/* 00012D50 */ 0x02, 0x07, 0x59, 0x03, 0x04, 0x1F, 0x04, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, +/* 00012D60 */ 0xFE, 0xEF, 0x01, 0xFF, 0x9E, 0x46, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x23, +/* 00012D70 */ 0x00, 0x39, 0x00, 0x6A, 0x00, 0x00, 0x7F, 0x5D, 0x00, 0xC1, 0x03, 0x1A, 0x0B, 0x00, 0xFE, 0x18, +/* 00012D80 */ 0x07, 0x57, 0xA0, 0x41, 0xC3, 0x00, 0xFE, 0xEE, 0x03, 0x6C, 0xFF, 0xAD, 0x40, 0x01, 0x00, 0xFF, +/* 00012D90 */ 0xAD, 0x40, 0x01, 0x00, 0x01, 0x08, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFF, 0xAD, 0x40, 0x01, 0x00, +/* 00012DA0 */ 0xFE, 0x01, 0x05, 0xFE, 0x01, 0x05, 0x01, 0xFE, 0xE2, 0x03, 0x07, 0x14, 0x19, 0x05, 0x33, 0x32, +/* 00012DB0 */ 0x03, 0x04, 0x01, 0x01, 0x01, 0x01, 0x16, 0x17, 0x18, 0x06, 0xFE, 0x94, 0x03, 0x05, 0xFE, 0x88, +/* 00012DC0 */ 0x04, 0x06, 0xFE, 0x30, 0x03, 0x08, 0x06, 0xFE, 0xD7, 0x03, 0x06, 0xFE, 0x8A, 0x04, 0x06, 0xFE, +/* 00012DD0 */ 0x24, 0x04, 0x06, 0xFE, 0x77, 0x04, 0x06, 0xFE, 0x73, 0x04, 0x06, 0xFE, 0x33, 0x04, 0x06, 0xFE, +/* 00012DE0 */ 0x34, 0x04, 0x06, 0xFE, 0x35, 0x04, 0x06, 0xFE, 0x36, 0x04, 0x06, 0xFE, 0x37, 0x04, 0x06, 0xFE, +/* 00012DF0 */ 0x38, 0x04, 0x06, 0xFE, 0x39, 0x04, 0x06, 0xFE, 0x3A, 0x04, 0x06, 0xFE, 0x3B, 0x04, 0xA6, 0x58, +/* 00012E00 */ 0x14, 0x4E, 0x15, 0x4E, 0x19, 0x96, 0x02, 0x19, 0x2A, 0x19, 0x14, 0x15, 0x03, 0x00, 0x19, 0x02, +/* 00012E10 */ 0x09, 0x18, 0x00, 0x8E, 0x03, 0x03, 0x1A, 0x6C, 0x19, 0x1A, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 00012E20 */ 0x1A, 0x59, 0x01, 0x03, 0x59, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x19, 0x8E, 0x01, 0x0A, 0x19, 0x4A, +/* 00012E30 */ 0x19, 0x07, 0x02, 0x00, 0x59, 0x00, 0x05, 0x59, 0x01, 0x14, 0x1F, 0x02, 0x19, 0x19, 0x96, 0x02, +/* 00012E40 */ 0x19, 0xCF, 0x19, 0x0E, 0xA1, 0x00, 0x06, 0x19, 0xA1, 0x01, 0x07, 0x19, 0xA1, 0x02, 0x08, 0x19, +/* 00012E50 */ 0xA1, 0x03, 0x09, 0x19, 0xA1, 0x04, 0x0A, 0x19, 0xA1, 0x05, 0x0B, 0x19, 0xA1, 0x06, 0x0C, 0x19, +/* 00012E60 */ 0xA1, 0x07, 0x0D, 0x19, 0xA1, 0x08, 0x0E, 0x19, 0xA1, 0x09, 0x0F, 0x19, 0xA1, 0x0A, 0x10, 0x19, +/* 00012E70 */ 0xA1, 0x0B, 0x11, 0x19, 0xA1, 0x0C, 0x12, 0x19, 0xA1, 0x0D, 0x13, 0x19, 0x45, 0x15, 0x19, 0x8E, +/* 00012E80 */ 0x02, 0x17, 0x19, 0x4A, 0x19, 0x07, 0x04, 0x00, 0x59, 0x00, 0x05, 0x59, 0x01, 0x15, 0x92, 0x02, +/* 00012E90 */ 0x1A, 0x59, 0x02, 0x1A, 0xD6, 0x00, 0x1A, 0x59, 0x03, 0x1A, 0x1F, 0x04, 0x00, 0x19, 0x09, 0x02, +/* 00012EA0 */ 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB6, 0x02, 0xFF, 0xDA, 0x40, 0x01, 0x00, 0x06, 0x09, 0x00, +/* 00012EB0 */ 0x00, 0x00, 0x0B, 0x00, 0x34, 0x00, 0x18, 0x00, 0x78, 0x00, 0x16, 0x00, 0x41, 0x00, 0x3E, 0x00, +/* 00012EC0 */ 0xE6, 0x01, 0x24, 0x00, 0x00, 0x02, 0x00, 0xCB, 0x2E, 0x01, 0x00, 0x7F, 0x4C, 0x00, 0xC1, 0x43, +/* 00012ED0 */ 0x50, 0x03, 0x00, 0xFE, 0x2F, 0x07, 0x44, 0xA2, 0x41, 0xD1, 0x00, 0x6D, 0xFF, 0xE1, 0x43, 0x01, +/* 00012EE0 */ 0x00, 0xFF, 0xE1, 0x43, 0x01, 0x00, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFF, 0xE1, 0x43, 0x01, +/* 00012EF0 */ 0x00, 0xFE, 0xBD, 0x01, 0xFE, 0xBD, 0x01, 0x07, 0x07, 0x0B, 0x1B, 0x18, 0x04, 0x01, 0x04, 0x04, +/* 00012F00 */ 0x04, 0x04, 0x01, 0x0A, 0x0B, 0x06, 0xFE, 0x73, 0x04, 0x07, 0x06, 0xFE, 0x6F, 0x04, 0x06, 0xFE, +/* 00012F10 */ 0x6D, 0x04, 0x0B, 0x57, 0x4E, 0x09, 0x14, 0x03, 0x00, 0x07, 0x02, 0x09, 0x49, 0x00, 0x8E, 0x01, +/* 00012F20 */ 0x02, 0x0C, 0x4A, 0x0C, 0x5E, 0x0C, 0x0C, 0x00, 0x45, 0x09, 0x0C, 0x8E, 0x01, 0x02, 0x0C, 0x4A, +/* 00012F30 */ 0x0C, 0x5E, 0x0C, 0x0C, 0x01, 0xA8, 0x0D, 0x15, 0x03, 0x00, 0x0C, 0x0D, 0x09, 0x22, 0x00, 0x15, +/* 00012F40 */ 0x03, 0x00, 0x09, 0x03, 0x09, 0x1A, 0x00, 0x76, 0x09, 0x08, 0x02, 0x41, 0x0D, 0x09, 0x04, 0x45, +/* 00012F50 */ 0x0C, 0x0D, 0x0F, 0x07, 0x00, 0x0D, 0x41, 0x0D, 0x09, 0x05, 0x46, 0x0C, 0x0D, 0x76, 0x0C, 0x08, +/* 00012F60 */ 0x03, 0x45, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x73, 0x04, 0xFE, 0x6E, +/* 00012F70 */ 0x02, 0xFE, 0x73, 0x04, 0xFE, 0x6F, 0x02, 0xFF, 0x11, 0x44, 0x01, 0x00, 0x07, 0x02, 0x00, 0x00, +/* 00012F80 */ 0x00, 0x08, 0x00, 0x34, 0x00, 0x0D, 0x00, 0x3B, 0x00, 0x1C, 0x00, 0x52, 0x00, 0x04, 0x00, 0x35, +/* 00012F90 */ 0x00, 0x16, 0x00, 0x63, 0x00, 0x08, 0x00, 0x33, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, +/* 00012FA0 */ 0x03, 0x00, 0xFE, 0xF8, 0x06, 0x3B, 0xA0, 0x41, 0xD1, 0x00, 0x6B, 0xFF, 0xF8, 0x3B, 0x01, 0x00, +/* 00012FB0 */ 0xFF, 0xF8, 0x3B, 0x01, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFF, 0xF8, 0x3B, 0x01, 0x00, +/* 00012FC0 */ 0xFE, 0xEA, 0x01, 0xFE, 0xEA, 0x01, 0x07, 0x06, 0x09, 0x04, 0x2A, 0x28, 0x03, 0x04, 0x06, 0x06, +/* 00012FD0 */ 0x06, 0x06, 0x08, 0x06, 0xFE, 0x94, 0x03, 0x05, 0xFE, 0x88, 0x04, 0x06, 0xFE, 0x30, 0x03, 0x08, +/* 00012FE0 */ 0x86, 0x58, 0x06, 0x4E, 0x07, 0x2A, 0x09, 0x06, 0x15, 0x03, 0x00, 0x09, 0x02, 0x09, 0x18, 0x00, +/* 00012FF0 */ 0x8E, 0x03, 0x03, 0x0A, 0x6C, 0x09, 0x0A, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0A, 0x59, 0x01, +/* 00013000 */ 0x03, 0x59, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x09, 0x8E, 0x01, 0x0A, 0x09, 0x4A, 0x09, 0x07, 0x02, +/* 00013010 */ 0x00, 0x59, 0x00, 0x05, 0x59, 0x01, 0x06, 0x1F, 0x02, 0x09, 0x09, 0x45, 0x07, 0x09, 0x5E, 0x09, +/* 00013020 */ 0x07, 0x01, 0xA8, 0x0A, 0x14, 0x03, 0x00, 0x09, 0x0A, 0x09, 0x30, 0x00, 0x45, 0x09, 0x07, 0x8E, +/* 00013030 */ 0x03, 0x36, 0x0B, 0x4A, 0x0B, 0x6C, 0x0A, 0x0B, 0x02, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0B, 0x8E, +/* 00013040 */ 0x01, 0x0B, 0x0C, 0x4A, 0x0C, 0x59, 0x01, 0x0C, 0x59, 0x02, 0x07, 0x1F, 0x03, 0x0A, 0x0A, 0x76, +/* 00013050 */ 0x0A, 0x09, 0x03, 0x5E, 0x09, 0x07, 0x04, 0x82, 0x09, 0x09, 0x06, 0x01, 0x5E, 0x00, 0x07, 0x05, +/* 00013060 */ 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB6, 0x02, 0xFE, 0x25, 0x04, 0x54, 0xFE, 0x25, +/* 00013070 */ 0x04, 0xFE, 0x25, 0x04, 0xFE, 0x25, 0x04, 0xFF, 0x12, 0x3C, 0x01, 0x00, 0x08, 0x04, 0x00, 0x00, +/* 00013080 */ 0x00, 0x0B, 0x00, 0x30, 0x00, 0x18, 0x00, 0x70, 0x00, 0x16, 0x00, 0x3E, 0x00, 0x0E, 0x00, 0x3E, +/* 00013090 */ 0x00, 0x27, 0x00, 0x49, 0x00, 0x09, 0x00, 0x41, 0x00, 0x09, 0x00, 0x29, 0x00, 0x00, 0x7F, 0x5C, +/* 000130A0 */ 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0xD1, 0x06, 0x60, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x16, +/* 000130B0 */ 0x04, 0x6A, 0xFF, 0x00, 0x36, 0x01, 0x00, 0xFF, 0x00, 0x36, 0x01, 0x00, 0x09, 0xFE, 0x00, 0x90, +/* 000130C0 */ 0x02, 0x02, 0xFF, 0x00, 0x36, 0x01, 0x00, 0xFE, 0xA1, 0x03, 0xFE, 0xA1, 0x03, 0x07, 0x07, 0x0C, +/* 000130D0 */ 0x06, 0x54, 0x50, 0x03, 0x03, 0x0A, 0x0A, 0x0A, 0x0A, 0x0B, 0x06, 0xFE, 0x94, 0x03, 0x05, 0xFE, +/* 000130E0 */ 0x89, 0x04, 0x06, 0xFE, 0x30, 0x03, 0x0B, 0x0C, 0xFE, 0x14, 0x01, 0x58, 0x08, 0x4E, 0x09, 0x4E, +/* 000130F0 */ 0x0A, 0x2A, 0x0C, 0x08, 0x15, 0x03, 0x00, 0x0C, 0x02, 0x09, 0x18, 0x00, 0x8E, 0x03, 0x03, 0x0D, +/* 00013100 */ 0x6C, 0x0C, 0x0D, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0D, 0x59, 0x01, 0x03, 0x59, 0x02, 0x04, +/* 00013110 */ 0x1F, 0x03, 0xFF, 0x0C, 0x8E, 0x03, 0x03, 0x0D, 0x6C, 0x0C, 0x0D, 0x01, 0x07, 0x02, 0x00, 0x59, +/* 00013120 */ 0x00, 0x0D, 0x59, 0x01, 0x08, 0x1F, 0x02, 0x0C, 0x0C, 0x45, 0x09, 0x0C, 0xA8, 0x0C, 0x14, 0x08, +/* 00013130 */ 0x00, 0x09, 0x0C, 0x5E, 0x0C, 0x09, 0x02, 0x0F, 0x18, 0x00, 0x0C, 0x8E, 0x03, 0x03, 0x0D, 0x6C, +/* 00013140 */ 0x0C, 0x0D, 0x03, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0D, 0x59, 0x01, 0x03, 0x59, 0x02, 0x04, 0x1F, +/* 00013150 */ 0x03, 0xFF, 0x0C, 0xA8, 0x0C, 0x45, 0x0A, 0x0C, 0xA8, 0x0C, 0x14, 0x03, 0x00, 0x07, 0x0C, 0x09, +/* 00013160 */ 0x18, 0x00, 0x8E, 0x03, 0x03, 0x0D, 0x6C, 0x0C, 0x0D, 0x04, 0x07, 0x01, 0x00, 0x59, 0x00, 0x0D, +/* 00013170 */ 0x1F, 0x01, 0x0C, 0x0C, 0x45, 0x0A, 0x0C, 0x09, 0x60, 0x00, 0x8E, 0x03, 0x24, 0x0D, 0x6C, 0x0C, +/* 00013180 */ 0x0D, 0x05, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0D, 0x59, 0x01, 0x07, 0x1F, 0x02, 0x0C, 0x0C, 0x45, +/* 00013190 */ 0x0A, 0x0C, 0x8E, 0x03, 0x36, 0x0D, 0x4A, 0x0D, 0x6C, 0x0C, 0x0D, 0x06, 0x07, 0x02, 0x00, 0x59, +/* 000131A0 */ 0x00, 0x0D, 0x59, 0x01, 0x0A, 0x1F, 0x02, 0x0C, 0x0C, 0x0F, 0x1B, 0x00, 0x0C, 0x8E, 0x03, 0x36, +/* 000131B0 */ 0x0D, 0x4A, 0x0D, 0x6C, 0x0C, 0x0D, 0x07, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0D, 0x59, 0x01, 0x0A, +/* 000131C0 */ 0x1F, 0x02, 0x0C, 0x0C, 0x0F, 0x12, 0x00, 0x0C, 0x8E, 0x03, 0x03, 0x0D, 0x6C, 0x0C, 0x0D, 0x08, +/* 000131D0 */ 0x07, 0x01, 0x00, 0x59, 0x00, 0x0D, 0x1F, 0x01, 0xFF, 0x0C, 0x8E, 0x03, 0x03, 0x0D, 0x6C, 0x0C, +/* 000131E0 */ 0x0D, 0x09, 0x07, 0x05, 0x00, 0x59, 0x00, 0x0D, 0x59, 0x01, 0x09, 0x59, 0x02, 0x0A, 0x59, 0x03, +/* 000131F0 */ 0x05, 0x59, 0x04, 0x06, 0x1F, 0x05, 0x00, 0x0C, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, +/* 00013200 */ 0xB6, 0x02, 0xFE, 0x05, 0x02, 0xFE, 0x7E, 0x04, 0xFE, 0xB6, 0x02, 0xFE, 0x9F, 0x02, 0xFE, 0x23, +/* 00013210 */ 0x03, 0xC4, 0xC1, 0xFE, 0xB9, 0x02, 0xFE, 0xFC, 0x01, 0xFF, 0x2B, 0x36, 0x01, 0x00, 0x0D, 0x06, +/* 00013220 */ 0x00, 0x00, 0x00, 0x0B, 0x00, 0x30, 0x00, 0x18, 0x00, 0x77, 0x00, 0x18, 0x00, 0x41, 0x00, 0x0F, +/* 00013230 */ 0x00, 0x5D, 0x00, 0x18, 0x00, 0x77, 0x00, 0x05, 0x00, 0x13, 0x00, 0x0A, 0x00, 0x2A, 0x00, 0x18, +/* 00013240 */ 0x00, 0x53, 0x00, 0x18, 0x00, 0x2E, 0x00, 0x36, 0x00, 0x38, 0x00, 0x12, 0x00, 0x4A, 0x00, 0x23, +/* 00013250 */ 0x00, 0x79, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0xBE, 0x06, 0x52, +/* 00013260 */ 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x15, 0x04, 0x69, 0xFF, 0x15, 0x33, 0x01, 0x00, 0xFF, 0x15, 0x33, +/* 00013270 */ 0x01, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0x15, 0x33, 0x01, 0x00, 0xFE, 0x87, 0x02, +/* 00013280 */ 0xFE, 0x87, 0x02, 0x06, 0x05, 0x09, 0x06, 0x41, 0x3E, 0x03, 0x03, 0x08, 0x08, 0x08, 0x08, 0x08, +/* 00013290 */ 0x05, 0xFE, 0x88, 0x04, 0x06, 0xFE, 0x30, 0x03, 0x0C, 0xD4, 0x58, 0x06, 0x4E, 0x07, 0x0E, 0x08, +/* 000132A0 */ 0x00, 0x06, 0x5E, 0x09, 0x06, 0x00, 0x0F, 0x18, 0x00, 0x09, 0x8E, 0x03, 0x03, 0x0A, 0x6C, 0x09, +/* 000132B0 */ 0x0A, 0x01, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0A, 0x59, 0x01, 0x02, 0x59, 0x02, 0x03, 0x1F, 0x03, +/* 000132C0 */ 0xFF, 0x09, 0xA8, 0x09, 0x45, 0x07, 0x09, 0xA8, 0x09, 0x14, 0x03, 0x00, 0x05, 0x09, 0x09, 0x18, +/* 000132D0 */ 0x00, 0x8E, 0x03, 0x03, 0x0A, 0x6C, 0x09, 0x0A, 0x02, 0x07, 0x01, 0x00, 0x59, 0x00, 0x0A, 0x1F, +/* 000132E0 */ 0x01, 0x09, 0x09, 0x45, 0x07, 0x09, 0x09, 0x60, 0x00, 0x8E, 0x03, 0x24, 0x0A, 0x6C, 0x09, 0x0A, +/* 000132F0 */ 0x03, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0A, 0x59, 0x01, 0x05, 0x1F, 0x02, 0x09, 0x09, 0x45, 0x07, +/* 00013300 */ 0x09, 0x8E, 0x03, 0x36, 0x0A, 0x4A, 0x0A, 0x6C, 0x09, 0x0A, 0x04, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 00013310 */ 0x0A, 0x59, 0x01, 0x07, 0x1F, 0x02, 0x09, 0x09, 0x0F, 0x1B, 0x00, 0x09, 0x8E, 0x03, 0x36, 0x0A, +/* 00013320 */ 0x4A, 0x0A, 0x6C, 0x09, 0x0A, 0x05, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0A, 0x59, 0x01, 0x07, 0x1F, +/* 00013330 */ 0x02, 0x09, 0x09, 0x0F, 0x12, 0x00, 0x09, 0x8E, 0x03, 0x03, 0x0A, 0x6C, 0x09, 0x0A, 0x06, 0x07, +/* 00013340 */ 0x01, 0x00, 0x59, 0x00, 0x0A, 0x1F, 0x01, 0xFF, 0x09, 0x8E, 0x03, 0x03, 0x0A, 0x6C, 0x09, 0x0A, +/* 00013350 */ 0x07, 0x07, 0x05, 0x00, 0x59, 0x00, 0x0A, 0x59, 0x01, 0x06, 0x59, 0x02, 0x07, 0x59, 0x03, 0x04, +/* 00013360 */ 0x59, 0x04, 0x04, 0x1F, 0x05, 0x00, 0x09, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x7E, +/* 00013370 */ 0x04, 0xFE, 0xB6, 0x02, 0xFE, 0x9F, 0x02, 0xFE, 0x23, 0x03, 0xC4, 0xC1, 0xFE, 0xB9, 0x02, 0xFE, +/* 00013380 */ 0xFC, 0x01, 0xFF, 0x39, 0x33, 0x01, 0x00, 0x0A, 0x04, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x40, 0x00, +/* 00013390 */ 0x18, 0x00, 0x70, 0x00, 0x05, 0x00, 0x13, 0x00, 0x0A, 0x00, 0x2A, 0x00, 0x18, 0x00, 0x53, 0x00, +/* 000133A0 */ 0x18, 0x00, 0x2E, 0x00, 0x36, 0x00, 0x38, 0x00, 0x12, 0x00, 0x4A, 0x00, 0x23, 0x00, 0x72, 0x00, +/* 000133B0 */ 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x07, 0x10, 0x03, 0x00, 0xFE, 0xAB, 0x06, 0x25, 0xA2, 0x41, 0xC1, +/* 000133C0 */ 0x00, 0xFE, 0x2D, 0x04, 0x68, 0xFF, 0xAC, 0x2F, 0x01, 0x00, 0xFF, 0xAC, 0x2F, 0x01, 0x00, 0x01, +/* 000133D0 */ 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0xAC, 0x2F, 0x01, 0x00, 0xFE, 0xB3, 0x02, 0xFE, 0xB3, 0x02, +/* 000133E0 */ 0x05, 0x05, 0x08, 0x04, 0x32, 0x2E, 0x03, 0x02, 0x07, 0x07, 0x07, 0x07, 0x01, 0x07, 0x06, 0xFE, +/* 000133F0 */ 0x94, 0x03, 0x05, 0xFE, 0x88, 0x04, 0x06, 0xFE, 0x30, 0x03, 0xA9, 0x4E, 0x06, 0x8E, 0x03, 0x03, +/* 00013400 */ 0x09, 0x6C, 0x08, 0x09, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x09, 0x59, 0x01, 0x05, 0x1F, 0x02, +/* 00013410 */ 0x08, 0x08, 0x45, 0x06, 0x08, 0x0E, 0x08, 0x00, 0x06, 0x5E, 0x08, 0x06, 0x01, 0x0F, 0x1E, 0x00, +/* 00013420 */ 0x08, 0x8E, 0x01, 0x09, 0x08, 0x4A, 0x08, 0xE3, 0x08, 0x05, 0x08, 0x00, 0x0E, 0x0F, 0x00, 0x08, +/* 00013430 */ 0x8E, 0x03, 0x03, 0x08, 0x5E, 0x08, 0x08, 0x02, 0x97, 0x08, 0x05, 0x08, 0x45, 0x05, 0x08, 0x2A, +/* 00013440 */ 0x08, 0x05, 0x15, 0x03, 0x00, 0x08, 0x02, 0x09, 0x18, 0x00, 0x8E, 0x03, 0x03, 0x09, 0x6C, 0x08, +/* 00013450 */ 0x09, 0x03, 0x07, 0x03, 0x00, 0x59, 0x00, 0x09, 0x59, 0x01, 0x03, 0x59, 0x02, 0x04, 0x1F, 0x03, +/* 00013460 */ 0xFF, 0x08, 0x8E, 0x03, 0x03, 0x09, 0x6C, 0x08, 0x09, 0x04, 0x07, 0x02, 0x00, 0x59, 0x00, 0x09, +/* 00013470 */ 0x59, 0x01, 0x05, 0x1F, 0x02, 0x08, 0x08, 0x45, 0x06, 0x08, 0x5E, 0x08, 0x06, 0x05, 0x0F, 0x18, +/* 00013480 */ 0x00, 0x08, 0x8E, 0x03, 0x03, 0x09, 0x6C, 0x08, 0x09, 0x06, 0x07, 0x03, 0x00, 0x59, 0x00, 0x09, +/* 00013490 */ 0x59, 0x01, 0x03, 0x59, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x08, 0x45, 0x00, 0x06, 0x09, 0x02, 0x00, +/* 000134A0 */ 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x05, 0x02, 0xFE, 0x7E, 0x04, 0xFE, 0x30, 0x02, 0xFE, 0xB6, 0x02, +/* 000134B0 */ 0xFE, 0x05, 0x02, 0xFE, 0x7E, 0x04, 0xFE, 0xB6, 0x02, 0xFF, 0xC9, 0x2F, 0x01, 0x00, 0x0A, 0x02, +/* 000134C0 */ 0x00, 0x00, 0x00, 0x18, 0x00, 0x3E, 0x00, 0x1B, 0x00, 0x73, 0x00, 0x0F, 0x00, 0x3F, 0x00, 0x0B, +/* 000134D0 */ 0x00, 0x2F, 0x00, 0x18, 0x00, 0x70, 0x00, 0x18, 0x00, 0x3A, 0x00, 0x08, 0x00, 0x3F, 0x00, 0x18, +/* 000134E0 */ 0x00, 0x70, 0x00, 0x08, 0x00, 0x1D, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x17, 0x10, 0x43, 0x00, +/* 000134F0 */ 0xFE, 0x91, 0x06, 0x48, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x30, 0x03, 0x67, 0xFF, 0xA6, 0x2B, 0x01, +/* 00013500 */ 0x00, 0xFF, 0xA6, 0x2B, 0x01, 0x00, 0x08, 0xFE, 0x00, 0x90, 0x03, 0x01, 0xFF, 0xA6, 0x2B, 0x01, +/* 00013510 */ 0x00, 0xFE, 0xDD, 0x03, 0xFE, 0xDD, 0x03, 0x0C, 0x09, 0x12, 0x05, 0x5C, 0x53, 0x03, 0x05, 0x09, +/* 00013520 */ 0x09, 0x09, 0x09, 0x01, 0x01, 0x11, 0x08, 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, 0x2B, 0x03, 0x0C, +/* 00013530 */ 0x06, 0xFE, 0x2C, 0x03, 0x06, 0xFE, 0x2D, 0x03, 0x07, 0xFE, 0x2C, 0x01, 0x01, 0x5D, 0x01, 0x0B, +/* 00013540 */ 0x58, 0x10, 0xC0, 0x0C, 0x4E, 0x0D, 0x4E, 0x0E, 0x4E, 0x0F, 0x15, 0x05, 0x00, 0x09, 0x02, 0xA8, +/* 00013550 */ 0x12, 0x45, 0x09, 0x12, 0x15, 0x05, 0x00, 0x0A, 0x02, 0xA8, 0x12, 0x45, 0x0A, 0x12, 0x4E, 0x0D, +/* 00013560 */ 0x4E, 0x0E, 0x4E, 0x0F, 0xA8, 0x12, 0x14, 0x03, 0x00, 0x0B, 0x12, 0x09, 0x06, 0x00, 0x45, 0x12, +/* 00013570 */ 0x0C, 0x09, 0x03, 0x00, 0x46, 0x12, 0x0B, 0x45, 0x0D, 0x12, 0x8E, 0x02, 0x07, 0x12, 0x4A, 0x12, +/* 00013580 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x0D, 0x8E, 0x01, 0x08, 0x13, 0x4A, 0x13, 0x59, +/* 00013590 */ 0x02, 0x13, 0x1F, 0x03, 0x12, 0x12, 0x45, 0x0E, 0x12, 0x8E, 0x03, 0x03, 0x13, 0x6C, 0x12, 0x13, +/* 000135A0 */ 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x13, 0x59, 0x01, 0x0E, 0x1F, 0x02, 0x12, 0x12, 0x45, 0x0F, +/* 000135B0 */ 0x12, 0xA8, 0x12, 0x14, 0x03, 0x00, 0x0F, 0x12, 0x09, 0x2F, 0x00, 0x8E, 0x03, 0x36, 0x13, 0x4A, +/* 000135C0 */ 0x13, 0x6C, 0x12, 0x13, 0x01, 0x07, 0x01, 0x00, 0x59, 0x00, 0x13, 0x1F, 0x01, 0x12, 0x12, 0x45, +/* 000135D0 */ 0x0F, 0x12, 0x8E, 0x03, 0x03, 0x13, 0x6C, 0x12, 0x13, 0x02, 0x07, 0x03, 0x00, 0x59, 0x00, 0x13, +/* 000135E0 */ 0x59, 0x01, 0x0E, 0x59, 0x02, 0x0F, 0x1F, 0x03, 0xFF, 0x12, 0x8E, 0x01, 0x05, 0x12, 0x4A, 0x12, +/* 000135F0 */ 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x0F, 0x59, 0x02, 0x09, 0x59, 0x03, 0x0A, 0x1F, +/* 00013600 */ 0x04, 0xFF, 0x12, 0xA8, 0x12, 0x14, 0x03, 0x00, 0x0B, 0x12, 0x09, 0x51, 0x00, 0xE3, 0x12, 0x10, +/* 00013610 */ 0x0C, 0x00, 0x0E, 0x48, 0x00, 0x12, 0x8E, 0x03, 0x36, 0x13, 0x4A, 0x13, 0x6C, 0x12, 0x13, 0x03, +/* 00013620 */ 0x07, 0x04, 0x00, 0x59, 0x00, 0x13, 0x59, 0x01, 0x10, 0x8E, 0x03, 0x03, 0x14, 0x5E, 0x14, 0x14, +/* 00013630 */ 0x04, 0x59, 0x02, 0x14, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, +/* 00013640 */ 0x00, 0x7A, 0x0E, 0x14, 0x05, 0x7A, 0x05, 0x14, 0x06, 0x7A, 0x05, 0x14, 0x07, 0x7A, 0x05, 0x14, +/* 00013650 */ 0x08, 0x59, 0x03, 0x14, 0x1F, 0x04, 0xFF, 0x12, 0x45, 0x00, 0x10, 0x09, 0x08, 0x00, 0x45, 0x00, +/* 00013660 */ 0x0E, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x01, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, +/* 00013670 */ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, +/* 00013680 */ 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0xFE, 0x05, 0x02, 0x69, 0xFE, 0x06, 0x02, 0xFE, 0x9C, +/* 00013690 */ 0x01, 0xFE, 0x30, 0x02, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, +/* 000136A0 */ 0xFF, 0xBE, 0x2B, 0x01, 0x00, 0x0E, 0x0E, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x10, 0x00, +/* 000136B0 */ 0x23, 0x00, 0x16, 0x00, 0x56, 0x00, 0x1F, 0x00, 0x67, 0x00, 0x18, 0x00, 0x49, 0x00, 0x0A, 0x00, +/* 000136C0 */ 0x32, 0x00, 0x17, 0x00, 0x2B, 0x00, 0x18, 0x00, 0x53, 0x00, 0x19, 0x00, 0x47, 0x00, 0x13, 0x00, +/* 000136D0 */ 0x52, 0x00, 0x42, 0x00, 0xF6, 0x00, 0x06, 0x00, 0x28, 0x00, 0x08, 0x00, 0x1F, 0x00, 0x00, 0x7F, +/* 000136E0 */ 0x5D, 0x00, 0xC1, 0x03, 0x1A, 0x0B, 0x00, 0xFE, 0x7C, 0x06, 0x09, 0xA2, 0x41, 0xD1, 0x00, 0x65, +/* 000136F0 */ 0xFF, 0x7D, 0x27, 0x01, 0x00, 0xFF, 0x7D, 0x27, 0x01, 0x00, 0x01, 0x40, 0xFE, 0x00, 0x90, 0x06, +/* 00013700 */ 0x06, 0xFF, 0x7D, 0x27, 0x01, 0x00, 0xFE, 0x90, 0x01, 0xFE, 0x90, 0x01, 0x04, 0xFE, 0x06, 0x01, +/* 00013710 */ 0xFE, 0x82, 0x04, 0xFE, 0x83, 0x04, 0xFE, 0x84, 0x04, 0x0C, 0x03, 0x0B, 0x08, 0x17, 0x17, 0x03, +/* 00013720 */ 0x03, 0x01, 0x01, 0x01, 0x01, 0x08, 0x09, 0x0A, 0x08, 0x44, 0x96, 0x02, 0x03, 0x96, 0x03, 0x04, +/* 00013730 */ 0x96, 0x04, 0x05, 0x96, 0x05, 0x06, 0x8E, 0x03, 0x03, 0x0C, 0x6C, 0x0B, 0x0C, 0x00, 0x07, 0x03, +/* 00013740 */ 0x00, 0x59, 0x00, 0x0C, 0x8E, 0x02, 0x06, 0x0D, 0x4A, 0x0D, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, +/* 00013750 */ 0x92, 0x02, 0x0E, 0x59, 0x01, 0x0E, 0xD6, 0x00, 0x0E, 0x59, 0x02, 0x0E, 0x1F, 0x03, 0x0D, 0x0D, +/* 00013760 */ 0x59, 0x01, 0x0D, 0x59, 0x02, 0x07, 0x1F, 0x03, 0xFF, 0x0B, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x04, +/* 00013770 */ 0x02, 0xFF, 0xCC, 0x27, 0x01, 0x00, 0x02, 0x0C, 0x00, 0x00, 0x00, 0x36, 0x00, 0x40, 0x01, 0x00, +/* 00013780 */ 0x84, 0x37, 0x01, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x7D, 0x06, 0x46, +/* 00013790 */ 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x87, 0x04, 0x66, 0xFF, 0x06, 0x28, 0x01, 0x00, 0xFF, 0x06, 0x28, +/* 000137A0 */ 0x01, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x03, 0x01, 0xFF, 0x06, 0x28, 0x01, 0x00, 0xE6, 0xE6, 0x07, +/* 000137B0 */ 0x03, 0x07, 0x09, 0x1B, 0x19, 0x04, 0x05, 0x01, 0x01, 0x01, 0x01, 0x06, 0x08, 0x54, 0x58, 0x05, +/* 000137C0 */ 0x15, 0x05, 0x00, 0x03, 0x02, 0xA8, 0x07, 0x45, 0x03, 0x07, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA8, +/* 000137D0 */ 0x07, 0x45, 0x04, 0x07, 0x8E, 0x02, 0x02, 0x08, 0x6C, 0x07, 0x08, 0x00, 0x07, 0x08, 0x00, 0x59, +/* 000137E0 */ 0x00, 0x08, 0x59, 0x01, 0x05, 0x8E, 0x01, 0x02, 0x09, 0x59, 0x02, 0x09, 0x8E, 0x01, 0x03, 0x09, +/* 000137F0 */ 0x59, 0x03, 0x09, 0x8E, 0x01, 0x04, 0x09, 0x59, 0x04, 0x09, 0x8E, 0x01, 0x05, 0x09, 0x59, 0x05, +/* 00013800 */ 0x09, 0x59, 0x06, 0x03, 0x59, 0x07, 0x04, 0x1F, 0x08, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA8, 0x00, +/* 00013810 */ 0x24, 0x00, 0x5A, 0xFF, 0x32, 0x28, 0x01, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, +/* 00013820 */ 0x00, 0x0A, 0x00, 0x27, 0x00, 0x3C, 0x00, 0x7D, 0x00, 0x00, 0x7F, 0x5D, 0x00, 0xC1, 0x03, 0x1A, +/* 00013830 */ 0x0B, 0x00, 0xFE, 0x76, 0x06, 0x09, 0xA2, 0x41, 0xD1, 0x00, 0x63, 0xFF, 0x37, 0x25, 0x01, 0x00, +/* 00013840 */ 0xFF, 0x37, 0x25, 0x01, 0x00, 0x01, 0x40, 0xFE, 0x00, 0x90, 0x06, 0x06, 0xFF, 0x37, 0x25, 0x01, +/* 00013850 */ 0x00, 0xFE, 0x90, 0x01, 0xFE, 0x90, 0x01, 0x04, 0xFE, 0x06, 0x01, 0xFE, 0x82, 0x04, 0xFE, 0x83, +/* 00013860 */ 0x04, 0xFE, 0x84, 0x04, 0x0C, 0x03, 0x0B, 0x08, 0x17, 0x17, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, +/* 00013870 */ 0x08, 0x09, 0x0A, 0x08, 0x44, 0x96, 0x02, 0x03, 0x96, 0x03, 0x04, 0x96, 0x04, 0x05, 0x96, 0x05, +/* 00013880 */ 0x06, 0x8E, 0x03, 0x03, 0x0C, 0x6C, 0x0B, 0x0C, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0C, 0x8E, +/* 00013890 */ 0x02, 0x06, 0x0D, 0x4A, 0x0D, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x92, 0x02, 0x0E, 0x59, 0x01, +/* 000138A0 */ 0x0E, 0xD6, 0x00, 0x0E, 0x59, 0x02, 0x0E, 0x1F, 0x03, 0x0D, 0x0D, 0x59, 0x01, 0x0D, 0x59, 0x02, +/* 000138B0 */ 0x07, 0x1F, 0x03, 0xFF, 0x0B, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x04, 0x02, 0xFF, 0x86, 0x25, 0x01, +/* 000138C0 */ 0x00, 0x02, 0x0C, 0x00, 0x00, 0x00, 0x36, 0x00, 0x40, 0x01, 0x00, 0xCF, 0x38, 0x01, 0x00, 0x7F, +/* 000138D0 */ 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x77, 0x06, 0x46, 0xA2, 0x41, 0xC3, 0x00, 0xFE, +/* 000138E0 */ 0x86, 0x04, 0x64, 0xFF, 0xC0, 0x25, 0x01, 0x00, 0xFF, 0xC0, 0x25, 0x01, 0x00, 0x09, 0xFE, 0x00, +/* 000138F0 */ 0x90, 0x03, 0x01, 0xFF, 0xC0, 0x25, 0x01, 0x00, 0xE6, 0xE6, 0x07, 0x03, 0x07, 0x09, 0x1B, 0x19, +/* 00013900 */ 0x04, 0x05, 0x01, 0x01, 0x01, 0x01, 0x06, 0x08, 0x54, 0x58, 0x05, 0x15, 0x05, 0x00, 0x03, 0x02, +/* 00013910 */ 0xA8, 0x07, 0x45, 0x03, 0x07, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA8, 0x07, 0x45, 0x04, 0x07, 0x8E, +/* 00013920 */ 0x02, 0x02, 0x08, 0x6C, 0x07, 0x08, 0x00, 0x07, 0x08, 0x00, 0x59, 0x00, 0x08, 0x59, 0x01, 0x05, +/* 00013930 */ 0x8E, 0x01, 0x02, 0x09, 0x59, 0x02, 0x09, 0x8E, 0x01, 0x03, 0x09, 0x59, 0x03, 0x09, 0x8E, 0x01, +/* 00013940 */ 0x04, 0x09, 0x59, 0x04, 0x09, 0x8E, 0x01, 0x05, 0x09, 0x59, 0x05, 0x09, 0x59, 0x06, 0x03, 0x59, +/* 00013950 */ 0x07, 0x04, 0x1F, 0x08, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x5A, 0xFF, 0xEC, +/* 00013960 */ 0x25, 0x01, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0A, 0x00, 0x27, 0x00, +/* 00013970 */ 0x3C, 0x00, 0x7D, 0x00, 0x00, 0x7F, 0x5D, 0x00, 0xC1, 0x03, 0x1A, 0x0B, 0x00, 0xFE, 0x70, 0x06, +/* 00013980 */ 0x09, 0xA2, 0x41, 0xD1, 0x00, 0x61, 0xFF, 0x03, 0x23, 0x01, 0x00, 0xFF, 0x03, 0x23, 0x01, 0x00, +/* 00013990 */ 0x01, 0x40, 0xFE, 0x00, 0x90, 0x06, 0x06, 0xFF, 0x03, 0x23, 0x01, 0x00, 0xFE, 0x8C, 0x01, 0xFE, +/* 000139A0 */ 0x8C, 0x01, 0x04, 0xFE, 0x06, 0x01, 0xFE, 0x82, 0x04, 0xFE, 0x83, 0x04, 0xFE, 0x84, 0x04, 0x0C, +/* 000139B0 */ 0x03, 0x0B, 0x08, 0x17, 0x17, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x08, 0x09, 0x0A, 0x08, 0x44, +/* 000139C0 */ 0x96, 0x02, 0x03, 0x96, 0x03, 0x04, 0x96, 0x04, 0x05, 0x96, 0x05, 0x06, 0x8E, 0x03, 0x03, 0x0C, +/* 000139D0 */ 0x6C, 0x0B, 0x0C, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0C, 0x8E, 0x02, 0x06, 0x0D, 0x4A, 0x0D, +/* 000139E0 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x92, 0x02, 0x0E, 0x59, 0x01, 0x0E, 0xD6, 0x00, 0x0E, 0x59, +/* 000139F0 */ 0x02, 0x0E, 0x1F, 0x03, 0x0D, 0x0D, 0x59, 0x01, 0x0D, 0x59, 0x02, 0x07, 0x1F, 0x03, 0xFF, 0x0B, +/* 00013A00 */ 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x04, 0x02, 0xFF, 0x52, 0x23, 0x01, 0x00, 0x02, 0x0C, 0x00, 0x00, +/* 00013A10 */ 0x00, 0x36, 0x00, 0x3C, 0x01, 0x00, 0x1A, 0x3A, 0x01, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, +/* 00013A20 */ 0x03, 0x00, 0xFE, 0x71, 0x06, 0x46, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x85, 0x04, 0x62, 0xFF, 0x8C, +/* 00013A30 */ 0x23, 0x01, 0x00, 0xFF, 0x8C, 0x23, 0x01, 0x00, 0x09, 0xFE, 0x00, 0x90, 0x03, 0x01, 0xFF, 0x8C, +/* 00013A40 */ 0x23, 0x01, 0x00, 0xE2, 0xE2, 0x07, 0x03, 0x07, 0x09, 0x1B, 0x19, 0x04, 0x05, 0x01, 0x01, 0x01, +/* 00013A50 */ 0x01, 0x06, 0x08, 0x54, 0x58, 0x05, 0x15, 0x05, 0x00, 0x03, 0x02, 0xA8, 0x07, 0x45, 0x03, 0x07, +/* 00013A60 */ 0x15, 0x05, 0x00, 0x04, 0x02, 0xA8, 0x07, 0x45, 0x04, 0x07, 0x8E, 0x02, 0x02, 0x08, 0x6C, 0x07, +/* 00013A70 */ 0x08, 0x00, 0x07, 0x08, 0x00, 0x59, 0x00, 0x08, 0x59, 0x01, 0x05, 0x8E, 0x01, 0x02, 0x09, 0x59, +/* 00013A80 */ 0x02, 0x09, 0x8E, 0x01, 0x03, 0x09, 0x59, 0x03, 0x09, 0x8E, 0x01, 0x04, 0x09, 0x59, 0x04, 0x09, +/* 00013A90 */ 0x8E, 0x01, 0x05, 0x09, 0x59, 0x05, 0x09, 0x59, 0x06, 0x03, 0x59, 0x07, 0x04, 0x1F, 0x08, 0x00, +/* 00013AA0 */ 0x07, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x5A, 0xFF, 0xB4, 0x23, 0x01, 0x00, 0x04, 0x02, +/* 00013AB0 */ 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x0A, 0x00, 0x27, 0x00, 0x3C, 0x00, 0x7D, 0x00, 0x00, +/* 00013AC0 */ 0x7F, 0x5C, 0x00, 0xC1, 0x07, 0x10, 0x03, 0x00, 0xFE, 0x3B, 0x06, 0x08, 0xA3, 0x41, 0xC1, 0x00, +/* 00013AD0 */ 0xFE, 0x26, 0x04, 0x60, 0xFF, 0xFB, 0x14, 0x01, 0x00, 0xFF, 0xFB, 0x14, 0x01, 0x00, 0x09, 0xFE, +/* 00013AE0 */ 0x00, 0x90, 0x07, 0x07, 0xFF, 0xFB, 0x14, 0x01, 0x00, 0xFE, 0x16, 0x06, 0xFE, 0x16, 0x06, 0x0E, +/* 00013AF0 */ 0x08, 0x12, 0x0A, 0x88, 0x82, 0x03, 0x07, 0x09, 0x09, 0x09, 0x09, 0x01, 0x11, 0x06, 0xFE, 0x94, +/* 00013B00 */ 0x03, 0x06, 0xFE, 0x2E, 0x04, 0x05, 0xFE, 0x81, 0x04, 0x08, 0x0C, 0x0B, 0xFE, 0xB8, 0x01, 0x58, +/* 00013B10 */ 0x0E, 0x4E, 0x0F, 0x4E, 0x10, 0x2A, 0x12, 0x0E, 0x15, 0x0D, 0x00, 0x12, 0x02, 0x8E, 0x03, 0x0D, +/* 00013B20 */ 0x12, 0xE3, 0x12, 0x0E, 0x12, 0x00, 0x0F, 0x18, 0x00, 0x12, 0x8E, 0x03, 0x03, 0x13, 0x6C, 0x12, +/* 00013B30 */ 0x13, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x13, 0x59, 0x01, 0x08, 0x59, 0x02, 0x03, 0x1F, 0x03, +/* 00013B40 */ 0xFF, 0x12, 0x8E, 0x03, 0x36, 0x13, 0x4A, 0x13, 0x6C, 0x12, 0x13, 0x01, 0x07, 0x02, 0x00, 0x59, +/* 00013B50 */ 0x00, 0x13, 0x8E, 0x03, 0x0D, 0x14, 0x07, 0x02, 0x00, 0x59, 0x01, 0x0E, 0xC4, 0x02, 0x14, 0x14, +/* 00013B60 */ 0x59, 0x01, 0x14, 0x1F, 0x02, 0x12, 0x12, 0x45, 0x0F, 0x12, 0x8E, 0x03, 0x36, 0x13, 0x4A, 0x13, +/* 00013B70 */ 0x6C, 0x12, 0x13, 0x02, 0x07, 0x02, 0x00, 0x59, 0x00, 0x13, 0x59, 0x01, 0x0F, 0x1F, 0x02, 0x12, +/* 00013B80 */ 0x12, 0x0F, 0x1B, 0x00, 0x12, 0x8E, 0x03, 0x36, 0x13, 0x4A, 0x13, 0x6C, 0x12, 0x13, 0x03, 0x07, +/* 00013B90 */ 0x02, 0x00, 0x59, 0x00, 0x13, 0x59, 0x01, 0x0F, 0x1F, 0x02, 0x12, 0x12, 0x0F, 0x06, 0x00, 0x12, +/* 00013BA0 */ 0x45, 0x00, 0x04, 0x09, 0x1F, 0x01, 0xA8, 0x12, 0x45, 0x10, 0x12, 0x8E, 0x03, 0x03, 0x12, 0x5E, +/* 00013BB0 */ 0x12, 0x12, 0x04, 0x0E, 0x89, 0x00, 0x12, 0xA8, 0x12, 0x14, 0x03, 0x00, 0x0C, 0x12, 0x09, 0x7F, +/* 00013BC0 */ 0x00, 0xA8, 0x12, 0x14, 0x03, 0x00, 0x0D, 0x12, 0x09, 0x75, 0x00, 0x8E, 0x01, 0x07, 0x12, 0x4A, +/* 00013BD0 */ 0x12, 0x97, 0x12, 0x12, 0x0B, 0x0E, 0x10, 0x00, 0x12, 0x8E, 0x01, 0x07, 0x12, 0x4A, 0x12, 0x97, +/* 00013BE0 */ 0x12, 0x12, 0x0B, 0x45, 0x10, 0x12, 0x09, 0x57, 0x00, 0x8E, 0x03, 0x36, 0x13, 0x4A, 0x13, 0x6C, +/* 00013BF0 */ 0x12, 0x13, 0x05, 0x07, 0x01, 0x00, 0x59, 0x00, 0x13, 0x1F, 0x01, 0x12, 0x12, 0x45, 0x10, 0x12, +/* 00013C00 */ 0x8E, 0x01, 0x05, 0x12, 0x4A, 0x12, 0x07, 0x04, 0x00, 0x59, 0x00, 0x05, 0x59, 0x01, 0x10, 0xA8, +/* 00013C10 */ 0x13, 0x59, 0x02, 0x13, 0x8E, 0x01, 0x06, 0x13, 0x4A, 0x13, 0x07, 0x04, 0x00, 0x59, 0x00, 0x05, +/* 00013C20 */ 0xA8, 0x14, 0x59, 0x01, 0x14, 0x59, 0x02, 0x09, 0x59, 0x03, 0x0A, 0x1F, 0x04, 0x13, 0x13, 0x59, +/* 00013C30 */ 0x03, 0x13, 0x1F, 0x04, 0xFF, 0x12, 0x8E, 0x01, 0x07, 0x12, 0x4A, 0x12, 0x9C, 0x10, 0x12, 0x0B, +/* 00013C40 */ 0x0F, 0x49, 0x00, 0x10, 0x8E, 0x03, 0x36, 0x13, 0x4A, 0x13, 0x6C, 0x12, 0x13, 0x06, 0x07, 0x01, +/* 00013C50 */ 0x00, 0x59, 0x00, 0x13, 0x1F, 0x01, 0x12, 0x12, 0x45, 0x10, 0x12, 0x8E, 0x01, 0x05, 0x12, 0x4A, +/* 00013C60 */ 0x12, 0x07, 0x04, 0x00, 0x59, 0x00, 0x05, 0x59, 0x01, 0x10, 0x59, 0x02, 0x0C, 0x8E, 0x01, 0x06, +/* 00013C70 */ 0x13, 0x4A, 0x13, 0x07, 0x04, 0x00, 0x59, 0x00, 0x05, 0x59, 0x01, 0x0D, 0x59, 0x02, 0x09, 0x59, +/* 00013C80 */ 0x03, 0x0A, 0x1F, 0x04, 0x13, 0x13, 0x59, 0x03, 0x13, 0x1F, 0x04, 0xFF, 0x12, 0x8E, 0x03, 0x03, +/* 00013C90 */ 0x13, 0x6C, 0x12, 0x13, 0x07, 0x07, 0x05, 0x00, 0x59, 0x00, 0x13, 0x59, 0x01, 0x10, 0x8E, 0x03, +/* 00013CA0 */ 0x24, 0x15, 0x6C, 0x14, 0x15, 0x08, 0x07, 0x02, 0x00, 0x59, 0x00, 0x15, 0x59, 0x01, 0x0E, 0x1F, +/* 00013CB0 */ 0x02, 0x14, 0x14, 0x59, 0x02, 0x14, 0x59, 0x03, 0x06, 0x59, 0x04, 0x07, 0x1F, 0x05, 0x00, 0x12, +/* 00013CC0 */ 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB6, 0x02, 0x9C, 0xC4, 0xC1, 0xFE, 0x4D, 0x03, +/* 00013CD0 */ 0x69, 0x69, 0xFE, 0xFC, 0x01, 0xFE, 0x23, 0x03, 0xFF, 0x70, 0x15, 0x01, 0x00, 0x11, 0x06, 0x00, +/* 00013CE0 */ 0x00, 0x00, 0x15, 0x00, 0x4B, 0x00, 0x18, 0x00, 0x48, 0x00, 0x28, 0x00, 0x35, 0x00, 0x36, 0x00, +/* 00013CF0 */ 0x3C, 0x00, 0x06, 0x00, 0x32, 0x00, 0x05, 0x00, 0x29, 0x00, 0x20, 0x00, 0xC6, 0x00, 0x0E, 0x00, +/* 00013D00 */ 0x7C, 0x00, 0x10, 0x00, 0x96, 0x00, 0x17, 0x00, 0x2E, 0x00, 0x36, 0x00, 0x76, 0x00, 0x0A, 0x00, +/* 00013D10 */ 0x70, 0x00, 0x04, 0x00, 0x24, 0x00, 0x17, 0x00, 0x2A, 0x00, 0x32, 0x00, 0x79, 0x00, 0x38, 0x00, +/* 00013D20 */ 0x8E, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x2B, 0x06, 0x26, 0xA2, +/* 00013D30 */ 0x41, 0xC1, 0x00, 0xFE, 0x80, 0x04, 0x5F, 0xFF, 0x90, 0x12, 0x01, 0x00, 0xFF, 0x90, 0x12, 0x01, +/* 00013D40 */ 0x00, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFF, 0x90, 0x12, 0x01, 0x00, 0xFD, 0xFD, 0x05, 0x04, +/* 00013D50 */ 0x07, 0x06, 0x22, 0x22, 0x03, 0x02, 0x04, 0x04, 0x04, 0x04, 0x06, 0x0B, 0x0C, 0x6D, 0x8E, 0x03, +/* 00013D60 */ 0x36, 0x08, 0x4A, 0x08, 0x6C, 0x07, 0x08, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x08, 0x59, 0x01, +/* 00013D70 */ 0x05, 0x1F, 0x02, 0x07, 0x07, 0x0F, 0x1B, 0x00, 0x07, 0x8E, 0x03, 0x36, 0x08, 0x4A, 0x08, 0x6C, +/* 00013D80 */ 0x07, 0x08, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x08, 0x59, 0x01, 0x05, 0x1F, 0x02, 0x07, 0x07, +/* 00013D90 */ 0x0F, 0x12, 0x00, 0x07, 0x8E, 0x03, 0x03, 0x08, 0x6C, 0x07, 0x08, 0x02, 0x07, 0x01, 0x00, 0x59, +/* 00013DA0 */ 0x00, 0x08, 0x1F, 0x01, 0xFF, 0x07, 0x8E, 0x03, 0x03, 0x08, 0x6C, 0x07, 0x08, 0x03, 0x07, 0x05, +/* 00013DB0 */ 0x00, 0x59, 0x00, 0x08, 0x59, 0x01, 0x04, 0x59, 0x02, 0x05, 0x59, 0x03, 0x02, 0x59, 0x04, 0x03, +/* 00013DC0 */ 0x1F, 0x05, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xC4, 0xC1, 0xFE, 0xB9, 0x02, +/* 00013DD0 */ 0xFE, 0xFC, 0x01, 0xFF, 0xB0, 0x12, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x34, +/* 00013DE0 */ 0x00, 0x12, 0x00, 0x38, 0x00, 0x23, 0x00, 0x70, 0x00, 0x00, 0x7E, 0x5D, 0x00, 0xC1, 0x43, 0x5A, +/* 00013DF0 */ 0x0B, 0x00, 0xFE, 0xFC, 0x05, 0x22, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x2A, 0x04, 0x5A, 0xFF, 0x67, +/* 00013E00 */ 0x0B, 0x01, 0x00, 0xFF, 0x67, 0x0B, 0x01, 0x00, 0x04, 0xFE, 0x00, 0x90, 0x04, 0x04, 0xFF, 0x67, +/* 00013E10 */ 0x0B, 0x01, 0x00, 0xFE, 0x00, 0x07, 0xFE, 0x00, 0x07, 0x02, 0xFE, 0xE0, 0x01, 0xFE, 0x7F, 0x04, +/* 00013E20 */ 0x0B, 0x0F, 0x15, 0x04, 0x68, 0x67, 0x03, 0x04, 0x06, 0x06, 0x06, 0x06, 0x01, 0x12, 0x13, 0x14, +/* 00013E30 */ 0x15, 0x07, 0x0B, 0x06, 0xFE, 0x42, 0x04, 0x06, 0xFE, 0x3F, 0x04, 0x06, 0xFE, 0x33, 0x04, 0x06, +/* 00013E40 */ 0xFE, 0x35, 0x04, 0x06, 0xFE, 0x36, 0x04, 0x06, 0xFE, 0x37, 0x04, 0x05, 0xFE, 0x44, 0x04, 0x06, +/* 00013E50 */ 0xFE, 0x38, 0x04, 0x06, 0xFE, 0x39, 0x04, 0x06, 0xFE, 0x3A, 0x04, 0x06, 0xFE, 0x40, 0x04, 0xFE, +/* 00013E60 */ 0x61, 0x01, 0x96, 0x02, 0x0F, 0x4E, 0x16, 0x96, 0x03, 0x16, 0x92, 0x02, 0x16, 0xA8, 0x17, 0x14, +/* 00013E70 */ 0x03, 0x00, 0x16, 0x17, 0x09, 0x06, 0x00, 0x45, 0x16, 0x02, 0x09, 0x1B, 0x00, 0x8E, 0x03, 0x24, +/* 00013E80 */ 0x18, 0x6C, 0x17, 0x18, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x18, 0x92, 0x02, 0x19, 0x59, 0x01, +/* 00013E90 */ 0x19, 0x1F, 0x02, 0x17, 0x17, 0x46, 0x16, 0x17, 0x96, 0x02, 0x16, 0x8E, 0x03, 0x36, 0x17, 0x4A, +/* 00013EA0 */ 0x17, 0x6C, 0x16, 0x17, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x17, 0x92, 0x02, 0x18, 0x59, 0x01, +/* 00013EB0 */ 0x18, 0x1F, 0x02, 0x16, 0x16, 0x96, 0x02, 0x16, 0x96, 0x03, 0x03, 0x14, 0x08, 0x00, 0x10, 0x04, +/* 00013EC0 */ 0x14, 0x03, 0x00, 0x10, 0x05, 0x09, 0x30, 0x00, 0x8E, 0x03, 0x36, 0x17, 0x4A, 0x17, 0x6C, 0x16, +/* 00013ED0 */ 0x17, 0x02, 0x07, 0x03, 0x00, 0x59, 0x00, 0x17, 0xCF, 0x18, 0x04, 0xA1, 0x00, 0x06, 0x18, 0xA1, +/* 00013EE0 */ 0x01, 0x07, 0x18, 0xA1, 0x02, 0x08, 0x18, 0xA1, 0x03, 0x09, 0x18, 0x59, 0x01, 0x18, 0xD6, 0x00, +/* 00013EF0 */ 0x18, 0x59, 0x02, 0x18, 0x1F, 0x03, 0xFF, 0x16, 0x14, 0x08, 0x00, 0x10, 0x0A, 0x14, 0x03, 0x00, +/* 00013F00 */ 0x10, 0x05, 0x09, 0x2C, 0x00, 0x8E, 0x03, 0x36, 0x17, 0x4A, 0x17, 0x6C, 0x16, 0x17, 0x03, 0x07, +/* 00013F10 */ 0x03, 0x00, 0x59, 0x00, 0x17, 0xCF, 0x18, 0x03, 0xA1, 0x00, 0x0B, 0x18, 0xA1, 0x01, 0x0C, 0x18, +/* 00013F20 */ 0xA1, 0x02, 0x0D, 0x18, 0x59, 0x01, 0x18, 0xD6, 0x01, 0x18, 0x59, 0x02, 0x18, 0x1F, 0x03, 0xFF, +/* 00013F30 */ 0x16, 0x92, 0x03, 0x16, 0x14, 0x03, 0x00, 0x16, 0x03, 0x09, 0x39, 0x00, 0x14, 0x08, 0x00, 0x11, +/* 00013F40 */ 0x04, 0x14, 0x03, 0x00, 0x11, 0x0E, 0x09, 0x2C, 0x00, 0x8E, 0x03, 0x36, 0x17, 0x4A, 0x17, 0x6C, +/* 00013F50 */ 0x16, 0x17, 0x04, 0x07, 0x03, 0x00, 0x59, 0x00, 0x17, 0xCF, 0x18, 0x03, 0xA1, 0x00, 0x07, 0x18, +/* 00013F60 */ 0xA1, 0x01, 0x08, 0x18, 0xA1, 0x02, 0x09, 0x18, 0x59, 0x01, 0x18, 0xD6, 0x02, 0x18, 0x59, 0x02, +/* 00013F70 */ 0x18, 0x1F, 0x03, 0xFF, 0x16, 0x92, 0x03, 0x16, 0x14, 0x03, 0x00, 0x16, 0x03, 0x09, 0x39, 0x00, +/* 00013F80 */ 0x14, 0x08, 0x00, 0x11, 0x0A, 0x14, 0x03, 0x00, 0x11, 0x0E, 0x09, 0x2C, 0x00, 0x8E, 0x03, 0x36, +/* 00013F90 */ 0x17, 0x4A, 0x17, 0x6C, 0x16, 0x17, 0x05, 0x07, 0x03, 0x00, 0x59, 0x00, 0x17, 0xCF, 0x18, 0x03, +/* 00013FA0 */ 0xA1, 0x00, 0x0B, 0x18, 0xA1, 0x01, 0x0C, 0x18, 0xA1, 0x02, 0x0D, 0x18, 0x59, 0x01, 0x18, 0xD6, +/* 00013FB0 */ 0x03, 0x18, 0x59, 0x02, 0x18, 0x1F, 0x03, 0xFF, 0x16, 0x92, 0x02, 0x00, 0x09, 0x02, 0x00, 0xA8, +/* 00013FC0 */ 0x00, 0x24, 0x00, 0xFE, 0x21, 0x03, 0x69, 0x93, 0x93, 0x93, 0x93, 0xFF, 0x9C, 0x0B, 0x01, 0x00, +/* 00013FD0 */ 0x0D, 0x08, 0x00, 0x00, 0x00, 0x31, 0x00, 0x51, 0x00, 0x1D, 0x00, 0x29, 0x00, 0x03, 0x00, 0x25, +/* 00013FE0 */ 0x00, 0x0D, 0x00, 0x41, 0x00, 0x30, 0x00, 0x14, 0x01, 0x0D, 0x00, 0x41, 0x00, 0x2C, 0x00, 0x0D, +/* 00013FF0 */ 0x01, 0x18, 0x00, 0x5C, 0x00, 0x2C, 0x00, 0x5A, 0x01, 0x18, 0x00, 0x5C, 0x00, 0x2C, 0x00, 0x5E, +/* 00014000 */ 0x01, 0x08, 0x00, 0x18, 0x00, 0x00, 0x20, 0x42, 0x01, 0x00, 0xB6, 0x41, 0x01, 0x00, 0xE6, 0x40, +/* 00014010 */ 0x01, 0x00, 0x16, 0x40, 0x01, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x13, 0x10, 0x43, 0x00, 0xFE, 0x1E, +/* 00014020 */ 0x06, 0x38, 0xA2, 0x41, 0xD1, 0x00, 0x5E, 0xFF, 0x18, 0x11, 0x01, 0x00, 0xFF, 0x18, 0x11, 0x01, +/* 00014030 */ 0x00, 0x41, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0x18, 0x11, 0x01, 0x00, 0xFE, 0x19, 0x01, 0xFE, +/* 00014040 */ 0x19, 0x01, 0x05, 0x09, 0x0B, 0x05, 0x12, 0x12, 0x04, 0x02, 0x05, 0x05, 0x05, 0x05, 0x01, 0x0A, +/* 00014050 */ 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, 0xF8, 0x03, 0x06, 0xFE, 0x2B, 0x03, 0x0B, 0x06, 0xFE, 0x2C, +/* 00014060 */ 0x03, 0x06, 0xFE, 0x2D, 0x03, 0x07, 0x42, 0x8E, 0x04, 0x36, 0x0C, 0x4A, 0x0C, 0x6C, 0x0B, 0x0C, +/* 00014070 */ 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x0C, 0x8E, 0x01, 0x02, 0x0D, 0x59, 0x01, 0x0D, 0x59, 0x02, +/* 00014080 */ 0x09, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x7A, 0x03, +/* 00014090 */ 0x0D, 0x01, 0x7A, 0x05, 0x0D, 0x02, 0x7A, 0x05, 0x0D, 0x03, 0x7A, 0x05, 0x0D, 0x04, 0x59, 0x03, +/* 000140A0 */ 0x0D, 0x1F, 0x04, 0xFF, 0x0B, 0xA8, 0x00, 0x24, 0x00, 0x01, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 000140B0 */ 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, +/* 000140C0 */ 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, +/* 000140D0 */ 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFF, 0x3E, 0x11, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, +/* 000140E0 */ 0x00, 0x40, 0x00, 0xF2, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x13, 0x10, 0x43, 0x00, 0xFE, 0x13, +/* 000140F0 */ 0x06, 0x34, 0xA2, 0x41, 0xD1, 0x00, 0x5D, 0xFF, 0x5E, 0x0F, 0x01, 0x00, 0xFF, 0x5E, 0x0F, 0x01, +/* 00014100 */ 0x00, 0x41, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0x5E, 0x0F, 0x01, 0x00, 0xFE, 0x19, 0x01, 0xFE, +/* 00014110 */ 0x19, 0x01, 0x05, 0x09, 0x0B, 0x05, 0x12, 0x12, 0x04, 0x02, 0x05, 0x05, 0x05, 0x05, 0x01, 0x0A, +/* 00014120 */ 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, 0xF8, 0x03, 0x06, 0xFE, 0x2B, 0x03, 0x0B, 0x06, 0xFE, 0x2C, +/* 00014130 */ 0x03, 0x06, 0xFE, 0x2D, 0x03, 0x07, 0x42, 0x8E, 0x04, 0x36, 0x0C, 0x4A, 0x0C, 0x6C, 0x0B, 0x0C, +/* 00014140 */ 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x0C, 0x8E, 0x01, 0x02, 0x0D, 0x59, 0x01, 0x0D, 0x59, 0x02, +/* 00014150 */ 0x09, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x7A, 0x03, +/* 00014160 */ 0x0D, 0x01, 0x7A, 0x05, 0x0D, 0x02, 0x7A, 0x05, 0x0D, 0x03, 0x7A, 0x05, 0x0D, 0x04, 0x59, 0x03, +/* 00014170 */ 0x0D, 0x1F, 0x04, 0xFF, 0x0B, 0xA8, 0x00, 0x24, 0x00, 0x01, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00014180 */ 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, +/* 00014190 */ 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, +/* 000141A0 */ 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFF, 0x84, 0x0F, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, +/* 000141B0 */ 0x00, 0x40, 0x00, 0xF2, 0x00, 0x00, 0x7F, 0x4C, 0x00, 0x01, 0x00, 0x10, 0x03, 0x00, 0xFE, 0x0A, +/* 000141C0 */ 0x06, 0x38, 0xA2, 0x41, 0xD1, 0x00, 0x5C, 0xFF, 0xF9, 0x0D, 0x01, 0x00, 0xFF, 0xF9, 0x0D, 0x01, +/* 000141D0 */ 0x00, 0x41, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFF, 0xF9, 0x0D, 0x01, 0x00, 0xC7, 0xC7, 0x04, 0x03, +/* 000141E0 */ 0x06, 0x0B, 0x0A, 0x04, 0x01, 0x05, 0x0C, 0x21, 0x4E, 0x04, 0x8E, 0x01, 0x02, 0x06, 0x97, 0x06, +/* 000141F0 */ 0x06, 0x03, 0x45, 0x04, 0x06, 0xA8, 0x06, 0x15, 0x03, 0x00, 0x04, 0x06, 0x09, 0x06, 0x00, 0x01, +/* 00014200 */ 0x43, 0x01, 0x01, 0x03, 0x02, 0xA8, 0x00, 0x24, 0x00, 0xFF, 0x1F, 0x0E, 0x01, 0x00, 0x04, 0x02, +/* 00014210 */ 0x00, 0x00, 0x00, 0x0B, 0x00, 0x31, 0x00, 0x0A, 0x00, 0x33, 0x00, 0x08, 0x00, 0x3C, 0x00, 0x00, +/* 00014220 */ 0x7F, 0x4C, 0x00, 0x01, 0x00, 0x10, 0x03, 0x00, 0xFE, 0x01, 0x06, 0x3F, 0xA2, 0x41, 0xD1, 0x00, +/* 00014230 */ 0x5B, 0xFF, 0xAB, 0x0C, 0x01, 0x00, 0xFF, 0xAB, 0x0C, 0x01, 0x00, 0x41, 0xFE, 0x00, 0x90, 0x02, +/* 00014240 */ 0x02, 0xFF, 0xAB, 0x0C, 0x01, 0x00, 0xC7, 0xC7, 0x04, 0x03, 0x06, 0x0B, 0x0A, 0x04, 0x01, 0x05, +/* 00014250 */ 0x0C, 0x21, 0x4E, 0x04, 0x8E, 0x01, 0x02, 0x06, 0x97, 0x06, 0x06, 0x03, 0x45, 0x04, 0x06, 0xA8, +/* 00014260 */ 0x06, 0x15, 0x03, 0x00, 0x04, 0x06, 0x09, 0x06, 0x00, 0x01, 0x43, 0x01, 0x01, 0x03, 0x02, 0xA8, +/* 00014270 */ 0x00, 0x24, 0x00, 0xFF, 0xD1, 0x0C, 0x01, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x31, +/* 00014280 */ 0x00, 0x0A, 0x00, 0x33, 0x00, 0x08, 0x00, 0x3C, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, +/* 00014290 */ 0x03, 0x00, 0xFE, 0xBD, 0x05, 0x29, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x29, 0x04, 0x59, 0xFE, 0x1C, +/* 000142A0 */ 0xFF, 0xFE, 0x1C, 0xFF, 0x01, 0xFE, 0x00, 0x90, 0x04, 0x04, 0xFE, 0x1C, 0xFF, 0xFE, 0xD9, 0x09, +/* 000142B0 */ 0xFE, 0xD9, 0x09, 0x0F, 0x1D, 0x29, 0x07, 0xB4, 0xA4, 0x03, 0x08, 0x14, 0x14, 0x14, 0x14, 0x28, +/* 000142C0 */ 0x08, 0x06, 0xFE, 0x3F, 0x04, 0x06, 0xFE, 0x42, 0x04, 0x06, 0xFE, 0xE0, 0x03, 0x06, 0xFE, 0xA3, +/* 000142D0 */ 0x03, 0x05, 0xFE, 0x9C, 0x03, 0x05, 0xFE, 0xDF, 0x03, 0x06, 0xFE, 0x55, 0x04, 0x06, 0xFE, 0xA2, +/* 000142E0 */ 0x03, 0x06, 0xFE, 0x73, 0x04, 0x06, 0xFE, 0x6F, 0x04, 0x06, 0xFE, 0x6D, 0x04, 0x06, 0xFE, 0x6E, +/* 000142F0 */ 0x04, 0x06, 0xFE, 0x70, 0x04, 0x07, 0x06, 0xFE, 0x17, 0x04, 0x06, 0xFE, 0x74, 0x04, 0x06, 0xFE, +/* 00014300 */ 0x75, 0x04, 0x05, 0xFE, 0x76, 0x04, 0x06, 0xFE, 0x77, 0x04, 0x05, 0xFE, 0x78, 0x04, 0x05, 0xFE, +/* 00014310 */ 0x79, 0x04, 0x05, 0xFE, 0x7A, 0x04, 0x06, 0xFE, 0x7B, 0x04, 0x05, 0xFE, 0x7C, 0x04, 0x05, 0xFE, +/* 00014320 */ 0x7D, 0x04, 0x0B, 0xFE, 0x46, 0x02, 0x4E, 0x20, 0x4E, 0x21, 0x4E, 0x22, 0x4E, 0x23, 0x4E, 0x24, +/* 00014330 */ 0x4E, 0x25, 0x4E, 0x26, 0x4E, 0x27, 0x8E, 0x02, 0x12, 0x29, 0x4A, 0x29, 0x07, 0x02, 0x00, 0x59, +/* 00014340 */ 0x00, 0x02, 0x59, 0x01, 0x1E, 0x1F, 0x02, 0x29, 0x29, 0x45, 0x20, 0x29, 0x8E, 0x01, 0x06, 0x29, +/* 00014350 */ 0x4A, 0x29, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x1F, 0x59, 0x02, 0x03, 0x59, 0x03, +/* 00014360 */ 0x04, 0x1F, 0x04, 0x29, 0x29, 0x45, 0x1F, 0x29, 0x8E, 0x03, 0x36, 0x2A, 0x4A, 0x2A, 0x6C, 0x29, +/* 00014370 */ 0x2A, 0x00, 0x07, 0x01, 0x00, 0x59, 0x00, 0x2A, 0x1F, 0x01, 0x29, 0x29, 0x45, 0x21, 0x29, 0x45, +/* 00014380 */ 0x29, 0x21, 0x8E, 0x02, 0x02, 0x2A, 0x4A, 0x2A, 0x07, 0x06, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, +/* 00014390 */ 0x1F, 0x59, 0x02, 0x05, 0x59, 0x03, 0x06, 0xCF, 0x2B, 0x02, 0xA1, 0x00, 0x07, 0x2B, 0xA1, 0x01, +/* 000143A0 */ 0x08, 0x2B, 0x59, 0x04, 0x2B, 0x59, 0x05, 0x08, 0x1F, 0x06, 0x2A, 0x2A, 0x76, 0x2A, 0x29, 0x01, +/* 000143B0 */ 0x8E, 0x02, 0x02, 0x29, 0x4A, 0x29, 0x07, 0x06, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x1F, 0x59, +/* 000143C0 */ 0x02, 0x09, 0x59, 0x03, 0x0A, 0xA8, 0x2A, 0x59, 0x04, 0x2A, 0xA8, 0x2A, 0x59, 0x05, 0x2A, 0x1F, +/* 000143D0 */ 0x06, 0x29, 0x29, 0x45, 0x22, 0x29, 0x8E, 0x02, 0x02, 0x29, 0x4A, 0x29, 0x07, 0x06, 0x00, 0x59, +/* 000143E0 */ 0x00, 0x02, 0x59, 0x01, 0x1F, 0x59, 0x02, 0x0B, 0x59, 0x03, 0x06, 0xCF, 0x2A, 0x04, 0xA1, 0x00, +/* 000143F0 */ 0x0C, 0x2A, 0xA1, 0x01, 0x0D, 0x2A, 0xA1, 0x02, 0x0E, 0x2A, 0xA1, 0x03, 0x0F, 0x2A, 0x59, 0x04, +/* 00014400 */ 0x2A, 0xA8, 0x2A, 0x59, 0x05, 0x2A, 0x1F, 0x06, 0x29, 0x29, 0x45, 0x23, 0x29, 0xA8, 0x29, 0x15, +/* 00014410 */ 0x03, 0x00, 0x22, 0x29, 0x09, 0x03, 0x00, 0x45, 0x23, 0x10, 0x76, 0x23, 0x21, 0x02, 0x8E, 0x02, +/* 00014420 */ 0x0C, 0x29, 0x4A, 0x29, 0x07, 0x05, 0x00, 0x59, 0x00, 0x02, 0x8E, 0x03, 0x03, 0x2A, 0x5E, 0x2A, +/* 00014430 */ 0x2A, 0x03, 0x59, 0x01, 0x2A, 0x59, 0x02, 0x20, 0x59, 0x03, 0x21, 0xCF, 0x2A, 0x03, 0xA1, 0x00, +/* 00014440 */ 0x11, 0x2A, 0xA1, 0x01, 0x12, 0x2A, 0xA1, 0x02, 0x13, 0x2A, 0x59, 0x04, 0x2A, 0x1F, 0x05, 0x29, +/* 00014450 */ 0x29, 0x45, 0x24, 0x29, 0x5E, 0x29, 0x24, 0x04, 0x76, 0x29, 0x1D, 0x05, 0x5E, 0x29, 0x24, 0x06, +/* 00014460 */ 0x76, 0x29, 0x1D, 0x07, 0x5E, 0x29, 0x24, 0x08, 0x76, 0x29, 0x1D, 0x09, 0x5E, 0x29, 0x24, 0x0A, +/* 00014470 */ 0x76, 0x29, 0x1D, 0x0B, 0x5E, 0x29, 0x24, 0x0C, 0x45, 0x25, 0x29, 0x5E, 0x29, 0x1F, 0x0D, 0x45, +/* 00014480 */ 0x26, 0x29, 0xA8, 0x29, 0x14, 0x03, 0x00, 0x26, 0x29, 0x09, 0x18, 0x00, 0x8E, 0x03, 0x03, 0x2A, +/* 00014490 */ 0x6C, 0x29, 0x2A, 0x0E, 0x07, 0x01, 0x00, 0x59, 0x00, 0x2A, 0x1F, 0x01, 0x29, 0x29, 0x45, 0x26, +/* 000144A0 */ 0x29, 0x09, 0x18, 0x00, 0x8E, 0x03, 0x24, 0x2A, 0x6C, 0x29, 0x2A, 0x0F, 0x07, 0x02, 0x00, 0x59, +/* 000144B0 */ 0x00, 0x2A, 0x59, 0x01, 0x26, 0x1F, 0x02, 0x29, 0x29, 0x45, 0x26, 0x29, 0x8E, 0x03, 0x03, 0x2A, +/* 000144C0 */ 0x6C, 0x29, 0x2A, 0x10, 0x07, 0x02, 0x00, 0x59, 0x00, 0x2A, 0x59, 0x01, 0x26, 0x1F, 0x02, 0x29, +/* 000144D0 */ 0x29, 0x45, 0x27, 0x29, 0xA8, 0x29, 0x14, 0x08, 0x00, 0x27, 0x29, 0x14, 0x03, 0x00, 0x27, 0x14, +/* 000144E0 */ 0x09, 0x1E, 0x00, 0x8E, 0x03, 0x03, 0x2A, 0x6C, 0x29, 0x2A, 0x11, 0x07, 0x04, 0x00, 0x59, 0x00, +/* 000144F0 */ 0x2A, 0x59, 0x01, 0x26, 0x59, 0x02, 0x15, 0x59, 0x03, 0x16, 0x1F, 0x04, 0xFF, 0x29, 0x09, 0x16, +/* 00014500 */ 0x00, 0x14, 0x08, 0x00, 0x27, 0x17, 0x14, 0x03, 0x00, 0x27, 0x18, 0x09, 0x06, 0x00, 0x45, 0x26, +/* 00014510 */ 0x19, 0x09, 0x03, 0x00, 0x45, 0x26, 0x27, 0x76, 0x26, 0x1D, 0x12, 0x8E, 0x02, 0x02, 0x29, 0x4A, +/* 00014520 */ 0x29, 0x07, 0x06, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x1F, 0x59, 0x02, 0x1A, 0x59, 0x03, 0x06, +/* 00014530 */ 0xCF, 0x2A, 0x02, 0xA1, 0x00, 0x1B, 0x2A, 0xA1, 0x01, 0x08, 0x2A, 0x59, 0x04, 0x2A, 0x59, 0x05, +/* 00014540 */ 0x08, 0x1F, 0x06, 0xFF, 0x29, 0x8E, 0x01, 0x04, 0x29, 0x4A, 0x29, 0x07, 0x04, 0x00, 0x59, 0x00, +/* 00014550 */ 0x02, 0x59, 0x01, 0x1D, 0x59, 0x02, 0x1F, 0x59, 0x03, 0x22, 0x1F, 0x04, 0xFF, 0x29, 0x76, 0x1C, +/* 00014560 */ 0x1D, 0x13, 0x45, 0x00, 0x1D, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x69, 0xFE, 0x0E, 0x02, +/* 00014570 */ 0xFE, 0x1B, 0x02, 0xFE, 0xEF, 0x01, 0xFE, 0x0D, 0x02, 0xFE, 0x0D, 0x02, 0xFE, 0x1A, 0x02, 0xFE, +/* 00014580 */ 0x6B, 0x02, 0xFE, 0x1B, 0x02, 0xFE, 0x73, 0x04, 0xFE, 0x19, 0x02, 0xFE, 0x49, 0x02, 0xFE, 0x9D, +/* 00014590 */ 0x03, 0xFE, 0x74, 0x02, 0xFE, 0xFE, 0x01, 0xFE, 0x22, 0x03, 0xFE, 0xFD, 0x01, 0xFE, 0xAC, 0x02, +/* 000145A0 */ 0xFE, 0x74, 0x02, 0xFE, 0x7E, 0x04, 0xFE, 0x56, 0xFF, 0x1F, 0x10, 0x00, 0x00, 0x00, 0x16, 0x00, +/* 000145B0 */ 0x46, 0x00, 0x1C, 0x00, 0x42, 0x00, 0x17, 0x00, 0x24, 0x00, 0x31, 0x00, 0x30, 0x01, 0x26, 0x00, +/* 000145C0 */ 0x5A, 0x00, 0x37, 0x00, 0x70, 0x00, 0x0A, 0x00, 0x2C, 0x00, 0x03, 0x00, 0x2C, 0x00, 0x04, 0x00, +/* 000145D0 */ 0x21, 0x00, 0x36, 0x00, 0x6F, 0x00, 0x08, 0x00, 0x2E, 0x00, 0x08, 0x00, 0x2C, 0x00, 0x08, 0x00, +/* 000145E0 */ 0x2D, 0x00, 0x08, 0x00, 0x34, 0x00, 0x07, 0x00, 0x37, 0x00, 0x07, 0x00, 0x27, 0x00, 0x0A, 0x00, +/* 000145F0 */ 0x28, 0x00, 0x18, 0x00, 0x49, 0x00, 0x18, 0x00, 0xEF, 0x00, 0x18, 0x00, 0x4E, 0x00, 0x0F, 0x00, +/* 00014600 */ 0x52, 0x00, 0x1E, 0x00, 0x74, 0x00, 0x0D, 0x00, 0x4E, 0x00, 0x06, 0x00, 0x31, 0x00, 0x03, 0x00, +/* 00014610 */ 0x2D, 0x00, 0x04, 0x00, 0x64, 0x00, 0x2A, 0x00, 0xD3, 0x00, 0x19, 0x00, 0x43, 0x00, 0x04, 0x00, +/* 00014620 */ 0x3E, 0x00, 0x08, 0x00, 0x1F, 0x00, 0x00, 0x7E, 0x4D, 0x00, 0xC0, 0x13, 0x1A, 0x4B, 0x00, 0xFE, +/* 00014630 */ 0x15, 0x05, 0x26, 0xA0, 0x41, 0xD1, 0x00, 0x55, 0xFE, 0xD5, 0xDE, 0xFE, 0xD5, 0xDE, 0x01, 0xFE, +/* 00014640 */ 0x00, 0x90, 0x01, 0x01, 0xFE, 0xD5, 0xDE, 0xFE, 0x58, 0x1E, 0xFE, 0x58, 0x1E, 0x06, 0xFE, 0x49, +/* 00014650 */ 0x04, 0xFE, 0x4A, 0x04, 0xFE, 0x4B, 0x04, 0xFE, 0x4C, 0x04, 0xFE, 0x4D, 0x04, 0xFE, 0x4E, 0x04, +/* 00014660 */ 0x04, 0x39, 0x3C, 0x51, 0x51, 0x03, 0x34, 0x34, 0x34, 0x34, 0x05, 0x39, 0x3A, 0x3B, 0x06, 0xFE, +/* 00014670 */ 0x33, 0x04, 0x06, 0xFE, 0x4F, 0x04, 0x06, 0xFE, 0x34, 0x04, 0x06, 0xFE, 0x50, 0x04, 0x06, 0xFE, +/* 00014680 */ 0x35, 0x04, 0x06, 0xFE, 0x51, 0x04, 0x06, 0xFE, 0x36, 0x04, 0x06, 0xFE, 0x52, 0x04, 0x06, 0xFE, +/* 00014690 */ 0x37, 0x04, 0x06, 0xFE, 0x53, 0x04, 0x06, 0xFE, 0x38, 0x04, 0x06, 0xFE, 0x54, 0x04, 0x06, 0xFE, +/* 000146A0 */ 0x55, 0x04, 0x06, 0xFE, 0x56, 0x04, 0x06, 0xFE, 0x57, 0x04, 0x06, 0xFE, 0x58, 0x04, 0x06, 0xFE, +/* 000146B0 */ 0x39, 0x04, 0x06, 0xFE, 0x59, 0x04, 0x06, 0xFE, 0x3A, 0x04, 0x06, 0xFE, 0x5A, 0x04, 0x06, 0xFE, +/* 000146C0 */ 0x3B, 0x04, 0x06, 0xFE, 0x5B, 0x04, 0x07, 0x06, 0xFE, 0x5C, 0x04, 0x06, 0xFE, 0x5D, 0x04, 0x06, +/* 000146D0 */ 0xFE, 0xD0, 0x03, 0x06, 0xFE, 0x5E, 0x04, 0x06, 0xFE, 0x5F, 0x04, 0x06, 0xFE, 0x60, 0x04, 0x06, +/* 000146E0 */ 0xFE, 0x61, 0x04, 0x06, 0xFE, 0x62, 0x04, 0x06, 0xFE, 0x63, 0x04, 0x06, 0xFE, 0x64, 0x04, 0x06, +/* 000146F0 */ 0xFE, 0x65, 0x04, 0x06, 0xFE, 0x66, 0x04, 0x06, 0xFE, 0x67, 0x04, 0x06, 0xFE, 0xF8, 0x03, 0x01, +/* 00014700 */ 0x01, 0x06, 0xFE, 0x32, 0x04, 0x01, 0x02, 0x06, 0xFE, 0x30, 0x04, 0x01, 0x03, 0x06, 0xFE, 0x31, +/* 00014710 */ 0x04, 0x01, 0x04, 0x06, 0xFE, 0x2F, 0x04, 0x01, 0x05, 0x06, 0xFE, 0x68, 0x04, 0x06, 0xFE, 0x69, +/* 00014720 */ 0x04, 0x06, 0xFE, 0x6A, 0x04, 0x06, 0xFE, 0x6B, 0x04, 0x06, 0xFE, 0x6C, 0x04, 0x06, 0xFE, 0x6D, +/* 00014730 */ 0x04, 0x06, 0xFE, 0x6E, 0x04, 0x06, 0xFE, 0x6F, 0x04, 0x06, 0xFE, 0x70, 0x04, 0xFE, 0x4D, 0x01, +/* 00014740 */ 0x4E, 0x3C, 0x96, 0x02, 0x3C, 0x4E, 0x3C, 0x96, 0x03, 0x3C, 0x4E, 0x3C, 0x96, 0x04, 0x3C, 0x4E, +/* 00014750 */ 0x3C, 0x96, 0x05, 0x3C, 0x4E, 0x3C, 0x96, 0x06, 0x3C, 0x4E, 0x3C, 0x96, 0x07, 0x3C, 0xCE, 0x00, +/* 00014760 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x7A, 0x03, 0x3C, 0x00, 0x7A, +/* 00014770 */ 0x05, 0x3C, 0x01, 0x7A, 0x07, 0x3C, 0x02, 0x7A, 0x09, 0x3C, 0x03, 0x7A, 0x0B, 0x3C, 0x04, 0x7A, +/* 00014780 */ 0x0D, 0x3C, 0x05, 0x7A, 0x0F, 0x3C, 0x06, 0x7A, 0x11, 0x3C, 0x07, 0x7A, 0x13, 0x3C, 0x08, 0x7A, +/* 00014790 */ 0x15, 0x3C, 0x09, 0x7A, 0x17, 0x3C, 0x0A, 0x96, 0x02, 0x3C, 0xCE, 0x34, 0x00, 0x00, 0x00, 0x01, +/* 000147A0 */ 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x7A, 0x02, 0x3C, 0x0B, 0x7A, 0x02, 0x3C, 0x0C, 0x7A, +/* 000147B0 */ 0x02, 0x3C, 0x0D, 0x7A, 0x04, 0x3C, 0x0E, 0x7A, 0x06, 0x3C, 0x0F, 0x7A, 0x06, 0x3C, 0x10, 0x7A, +/* 000147C0 */ 0x06, 0x3C, 0x11, 0x7A, 0x08, 0x3C, 0x12, 0x7A, 0x08, 0x3C, 0x13, 0x7A, 0x0A, 0x3C, 0x14, 0x7A, +/* 000147D0 */ 0x0C, 0x3C, 0x15, 0x7A, 0x0C, 0x3C, 0x16, 0x7A, 0x0C, 0x3C, 0x17, 0x7A, 0x0C, 0x3C, 0x18, 0x7A, +/* 000147E0 */ 0x12, 0x3C, 0x19, 0x7A, 0x14, 0x3C, 0x1A, 0x7A, 0x16, 0x3C, 0x1B, 0x7A, 0x16, 0x3C, 0x1C, 0x7A, +/* 000147F0 */ 0x16, 0x3C, 0x1D, 0x7A, 0x16, 0x3C, 0x1E, 0x7A, 0x16, 0x3C, 0x1F, 0x7A, 0x16, 0x3C, 0x20, 0x7A, +/* 00014800 */ 0x16, 0x3C, 0x21, 0x96, 0x03, 0x3C, 0xCE, 0x98, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x3C, +/* 00014810 */ 0x00, 0x00, 0x00, 0x7A, 0x27, 0x3C, 0x22, 0x7A, 0x29, 0x3C, 0x23, 0x7A, 0x2B, 0x3C, 0x24, 0x7A, +/* 00014820 */ 0x2D, 0x3C, 0x25, 0x7A, 0x2F, 0x3C, 0x26, 0x96, 0x04, 0x3C, 0xCD, 0x3C, 0x7A, 0x26, 0x3C, 0x27, +/* 00014830 */ 0x7A, 0x28, 0x3C, 0x28, 0x7A, 0x2A, 0x3C, 0x29, 0x7A, 0x2C, 0x3C, 0x2A, 0x7A, 0x2E, 0x3C, 0x2B, +/* 00014840 */ 0x96, 0x05, 0x3C, 0xCE, 0xB4, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, +/* 00014850 */ 0x7A, 0x0F, 0x3C, 0x2C, 0x7A, 0x11, 0x3C, 0x2D, 0x7A, 0x1E, 0x3C, 0x2E, 0x7A, 0x1F, 0x3C, 0x2F, +/* 00014860 */ 0x96, 0x06, 0x3C, 0xCE, 0xCC, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, +/* 00014870 */ 0x7A, 0x35, 0x3C, 0x30, 0x7A, 0x36, 0x3C, 0x31, 0x7A, 0x37, 0x3C, 0x32, 0x7A, 0x38, 0x3C, 0x33, +/* 00014880 */ 0x96, 0x07, 0x3C, 0xD6, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x05, 0xE4, 0x00, +/* 00014890 */ 0xCC, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x04, 0x00, 0x00, +/* 000148A0 */ 0x58, 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x61, 0x04, 0x00, 0x00, 0xB4, 0x00, 0x00, 0x00, +/* 000148B0 */ 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6D, 0x04, 0x00, 0x00, 0x6E, 0x04, 0x00, 0x00, +/* 000148C0 */ 0x6F, 0x04, 0x00, 0x00, 0x70, 0x04, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x03, 0x05, 0x00, 0x00, +/* 000148D0 */ 0x00, 0x00, 0x00, 0x00, 0x51, 0x02, 0x00, 0x00, 0x32, 0x04, 0x00, 0x00, 0x30, 0x04, 0x00, 0x00, +/* 000148E0 */ 0x31, 0x04, 0x00, 0x00, 0x2F, 0x04, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x03, 0x17, 0x00, 0x00, +/* 000148F0 */ 0x00, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x5C, 0x04, 0x00, 0x00, 0x5D, 0x04, 0x00, 0x00, +/* 00014900 */ 0x50, 0x04, 0x00, 0x00, 0x51, 0x04, 0x00, 0x00, 0xD0, 0x03, 0x00, 0x00, 0x5E, 0x04, 0x00, 0x00, +/* 00014910 */ 0x52, 0x04, 0x00, 0x00, 0x5F, 0x04, 0x00, 0x00, 0x53, 0x04, 0x00, 0x00, 0x56, 0x04, 0x00, 0x00, +/* 00014920 */ 0x58, 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x61, 0x04, 0x00, 0x00, 0x59, 0x04, 0x00, 0x00, +/* 00014930 */ 0x5A, 0x04, 0x00, 0x00, 0x5B, 0x04, 0x00, 0x00, 0x62, 0x04, 0x00, 0x00, 0x63, 0x04, 0x00, 0x00, +/* 00014940 */ 0x64, 0x04, 0x00, 0x00, 0x65, 0x04, 0x00, 0x00, 0x66, 0x04, 0x00, 0x00, 0x67, 0x04, 0x00, 0x00, +/* 00014950 */ 0x00, 0x00, 0x00, 0x00, 0x03, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x02, 0x00, 0x00, +/* 00014960 */ 0x6D, 0x02, 0x00, 0x00, 0x77, 0x02, 0x00, 0x00, 0x71, 0x02, 0x00, 0x00, 0x6C, 0x02, 0x00, 0x00, +/* 00014970 */ 0x6E, 0x02, 0x00, 0x00, 0x6F, 0x02, 0x00, 0x00, 0x57, 0x04, 0x00, 0x00, 0x70, 0x02, 0x00, 0x00, +/* 00014980 */ 0x73, 0x02, 0x00, 0x00, 0x75, 0x02, 0x00, 0x00, 0xFE, 0x76, 0x02, 0xFE, 0x6D, 0x02, 0xFE, 0x77, +/* 00014990 */ 0x02, 0xFE, 0x71, 0x02, 0xFE, 0x6C, 0x02, 0xFE, 0x6E, 0x02, 0xFE, 0x6F, 0x02, 0xFE, 0x57, 0x04, +/* 000149A0 */ 0xFE, 0x70, 0x02, 0xFE, 0x73, 0x02, 0xFE, 0x75, 0x02, 0x75, 0xFE, 0x5C, 0x04, 0xFE, 0x5D, 0x04, +/* 000149B0 */ 0xFE, 0x50, 0x04, 0xFE, 0x51, 0x04, 0xFE, 0xD0, 0x03, 0xFE, 0x5E, 0x04, 0xFE, 0x52, 0x04, 0xFE, +/* 000149C0 */ 0x5F, 0x04, 0xFE, 0x53, 0x04, 0xFE, 0x56, 0x04, 0xFE, 0x58, 0x04, 0xFE, 0x60, 0x04, 0xFE, 0x61, +/* 000149D0 */ 0x04, 0xFE, 0x59, 0x04, 0xFE, 0x5A, 0x04, 0xFE, 0x5B, 0x04, 0xFE, 0x62, 0x04, 0xFE, 0x63, 0x04, +/* 000149E0 */ 0xFE, 0x64, 0x04, 0xFE, 0x65, 0x04, 0xFE, 0x66, 0x04, 0xFE, 0x67, 0x04, 0xFE, 0x51, 0x02, 0xFE, +/* 000149F0 */ 0x32, 0x04, 0xFE, 0x30, 0x04, 0xFE, 0x31, 0x04, 0xFE, 0x2F, 0x04, 0xFE, 0x68, 0x04, 0xFE, 0x69, +/* 00014A00 */ 0x04, 0xFE, 0x6A, 0x04, 0xFE, 0x6B, 0x04, 0xFE, 0x6C, 0x04, 0xFE, 0x6D, 0x04, 0xFE, 0x6E, 0x04, +/* 00014A10 */ 0xFE, 0x6F, 0x04, 0xFE, 0x70, 0x04, 0xFE, 0x56, 0x04, 0xFE, 0x58, 0x04, 0xFE, 0x60, 0x04, 0xFE, +/* 00014A20 */ 0x61, 0x04, 0xFE, 0x6E, 0xDF, 0x08, 0x1E, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x10, 0x02, 0x6C, 0x00, +/* 00014A30 */ 0xDC, 0x02, 0x24, 0x00, 0xC3, 0x00, 0x19, 0x00, 0x00, 0x01, 0x20, 0x00, 0xA1, 0x00, 0x20, 0x00, +/* 00014A40 */ 0x09, 0x01, 0x08, 0x00, 0x65, 0x15, 0x00, 0x4B, 0x4A, 0x01, 0x00, 0x7F, 0x7D, 0x00, 0xC3, 0x43, +/* 00014A50 */ 0x5A, 0x1B, 0x00, 0xFE, 0x50, 0x05, 0x13, 0xA2, 0x41, 0xD1, 0x00, 0x56, 0xFE, 0xCE, 0xE7, 0xFE, +/* 00014A60 */ 0xCE, 0xE7, 0x02, 0x40, 0xFE, 0x00, 0x90, 0x04, 0x04, 0xFE, 0xCE, 0xE7, 0xFE, 0x54, 0x15, 0xFE, +/* 00014A70 */ 0x54, 0x15, 0x04, 0xFE, 0xE0, 0x01, 0xFE, 0x6F, 0x02, 0xFE, 0x10, 0x02, 0xFE, 0x1B, 0x02, 0x17, +/* 00014A80 */ 0x0E, 0x1E, 0x08, 0xBE, 0xAE, 0x77, 0x04, 0x0A, 0x02, 0x0F, 0x0F, 0x0F, 0x0F, 0x02, 0x1B, 0x1C, +/* 00014A90 */ 0x1D, 0x1E, 0xCA, 0xFE, 0x65, 0x02, 0xFE, 0x1D, 0x02, 0xFE, 0x3D, 0x02, 0x06, 0xFE, 0x47, 0x03, +/* 00014AA0 */ 0x0C, 0x01, 0x00, 0x06, 0xFE, 0x71, 0x04, 0x01, 0x01, 0x0B, 0x06, 0xFE, 0x72, 0x04, 0x06, 0xFE, +/* 00014AB0 */ 0x56, 0x04, 0x06, 0xFE, 0x58, 0x04, 0x06, 0xFE, 0x60, 0x04, 0x06, 0xFE, 0x61, 0x04, 0x01, 0x02, +/* 00014AC0 */ 0xFE, 0x6D, 0x02, 0x96, 0x02, 0x0F, 0x96, 0x03, 0x10, 0x4E, 0x11, 0x4E, 0x12, 0x4E, 0x13, 0x4E, +/* 00014AD0 */ 0x14, 0x4E, 0x15, 0x4E, 0x16, 0x4E, 0x18, 0x4E, 0x19, 0x4E, 0x1A, 0x4E, 0x17, 0x4E, 0x20, 0x96, +/* 00014AE0 */ 0x04, 0x20, 0x4E, 0x20, 0x96, 0x05, 0x20, 0x8E, 0x04, 0x36, 0x21, 0x4A, 0x21, 0x6C, 0x20, 0x21, +/* 00014AF0 */ 0x00, 0x07, 0x04, 0x00, 0x59, 0x00, 0x21, 0x8E, 0x02, 0x03, 0x22, 0x4A, 0x22, 0x59, 0x01, 0x22, +/* 00014B00 */ 0xD6, 0x00, 0x22, 0x59, 0x02, 0x22, 0x8E, 0x04, 0x36, 0x23, 0x4A, 0x23, 0x6C, 0x22, 0x23, 0x01, +/* 00014B10 */ 0x07, 0x01, 0x00, 0x59, 0x00, 0x23, 0x1F, 0x01, 0x22, 0x22, 0x59, 0x03, 0x22, 0x1F, 0x04, 0x20, +/* 00014B20 */ 0x20, 0x96, 0x04, 0x20, 0x5E, 0x20, 0x0E, 0x02, 0x96, 0x05, 0x20, 0x8E, 0x04, 0x36, 0x21, 0x4A, +/* 00014B30 */ 0x21, 0x6C, 0x20, 0x21, 0x03, 0x07, 0x04, 0x00, 0x59, 0x00, 0x21, 0x8E, 0x04, 0x36, 0x23, 0x4A, +/* 00014B40 */ 0x23, 0x6C, 0x22, 0x23, 0x04, 0x07, 0x02, 0x00, 0x59, 0x00, 0x23, 0x92, 0x04, 0x24, 0x59, 0x01, +/* 00014B50 */ 0x24, 0x1F, 0x02, 0x22, 0x22, 0x59, 0x01, 0x22, 0xD6, 0x01, 0x22, 0x59, 0x02, 0x22, 0x59, 0x03, +/* 00014B60 */ 0x02, 0x1F, 0x04, 0x20, 0x20, 0x45, 0x11, 0x20, 0x8E, 0x04, 0x03, 0x21, 0x6C, 0x20, 0x21, 0x05, +/* 00014B70 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x21, 0x5E, 0x22, 0x0E, 0x06, 0x59, 0x01, 0x22, 0x59, 0x02, 0x11, +/* 00014B80 */ 0x1F, 0x03, 0x20, 0x20, 0x45, 0x12, 0x20, 0x45, 0x13, 0x03, 0x45, 0x14, 0x04, 0xEC, 0x00, 0xA6, +/* 00014B90 */ 0x20, 0x12, 0x07, 0x12, 0x03, 0x00, 0x14, 0x20, 0x09, 0x8D, 0x01, 0x97, 0x20, 0x12, 0x14, 0x45, +/* 00014BA0 */ 0x15, 0x20, 0x41, 0x20, 0x15, 0x05, 0x45, 0x16, 0x20, 0x0E, 0x10, 0x00, 0x13, 0x0E, 0x03, 0x00, +/* 00014BB0 */ 0x16, 0x45, 0x13, 0x03, 0x26, 0x14, 0x14, 0x09, 0x6B, 0x01, 0x09, 0x1E, 0x00, 0x0E, 0x0C, 0x00, +/* 00014BC0 */ 0x16, 0x45, 0x13, 0x07, 0x26, 0x14, 0x14, 0x09, 0x5B, 0x01, 0x09, 0x0E, 0x00, 0x14, 0x03, 0x00, +/* 00014BD0 */ 0x15, 0x08, 0x09, 0x06, 0x00, 0x26, 0x14, 0x14, 0x09, 0x4A, 0x01, 0x14, 0x12, 0x00, 0x15, 0x09, +/* 00014BE0 */ 0x14, 0x0D, 0x00, 0x15, 0x0A, 0x14, 0x08, 0x00, 0x15, 0x0B, 0x14, 0x03, 0x00, 0x15, 0x0C, 0x09, +/* 00014BF0 */ 0xE7, 0x00, 0x92, 0x05, 0x20, 0x0E, 0xD2, 0x00, 0x20, 0x92, 0x03, 0x20, 0xA8, 0x21, 0x14, 0x03, +/* 00014C00 */ 0x00, 0x20, 0x21, 0x09, 0xC5, 0x00, 0x8E, 0x01, 0x06, 0x20, 0x4A, 0x20, 0x92, 0x05, 0x21, 0x97, +/* 00014C10 */ 0x20, 0x20, 0x21, 0x45, 0x17, 0x20, 0x15, 0x03, 0x00, 0x17, 0x15, 0x09, 0xAA, 0x00, 0x2D, 0x20, +/* 00014C20 */ 0x14, 0x06, 0x97, 0x20, 0x12, 0x20, 0x14, 0x03, 0x00, 0x20, 0x15, 0x09, 0x4D, 0x00, 0x8E, 0x04, +/* 00014C30 */ 0x36, 0x21, 0x4A, 0x21, 0x6C, 0x20, 0x21, 0x08, 0x07, 0x04, 0x00, 0x59, 0x00, 0x21, 0x59, 0x01, +/* 00014C40 */ 0x12, 0x59, 0x02, 0x04, 0x59, 0x03, 0x14, 0x1F, 0x04, 0x20, 0x20, 0x2D, 0x20, 0x20, 0x17, 0x2D, +/* 00014C50 */ 0x20, 0x20, 0x17, 0x8E, 0x04, 0x36, 0x22, 0x4A, 0x22, 0x6C, 0x21, 0x22, 0x09, 0x07, 0x03, 0x00, +/* 00014C60 */ 0x59, 0x00, 0x22, 0x59, 0x01, 0x12, 0x2D, 0x23, 0x14, 0x0D, 0x59, 0x02, 0x23, 0x1F, 0x03, 0x21, +/* 00014C70 */ 0x21, 0x2D, 0x20, 0x20, 0x21, 0x45, 0x12, 0x20, 0x09, 0x46, 0x00, 0x8E, 0x04, 0x36, 0x21, 0x4A, +/* 00014C80 */ 0x21, 0x6C, 0x20, 0x21, 0x0A, 0x07, 0x04, 0x00, 0x59, 0x00, 0x21, 0x59, 0x01, 0x12, 0x59, 0x02, +/* 00014C90 */ 0x04, 0x59, 0x03, 0x14, 0x1F, 0x04, 0x20, 0x20, 0x2D, 0x20, 0x20, 0x17, 0x8E, 0x04, 0x36, 0x22, +/* 00014CA0 */ 0x4A, 0x22, 0x6C, 0x21, 0x22, 0x0B, 0x07, 0x03, 0x00, 0x59, 0x00, 0x22, 0x59, 0x01, 0x12, 0x2D, +/* 00014CB0 */ 0x23, 0x14, 0x06, 0x59, 0x02, 0x23, 0x1F, 0x03, 0x21, 0x21, 0x2D, 0x20, 0x20, 0x21, 0x45, 0x12, +/* 00014CC0 */ 0x20, 0x97, 0x20, 0x12, 0x14, 0x45, 0x15, 0x20, 0x09, 0x0E, 0x00, 0x8E, 0x01, 0x07, 0x20, 0x4A, +/* 00014CD0 */ 0x20, 0x97, 0x20, 0x20, 0x15, 0x76, 0x20, 0x0E, 0x0C, 0x2D, 0x20, 0x14, 0x06, 0x45, 0x18, 0x20, +/* 00014CE0 */ 0xEC, 0x01, 0xA6, 0x20, 0x12, 0x0D, 0x12, 0x03, 0x00, 0x18, 0x20, 0x09, 0x12, 0x00, 0x97, 0x20, +/* 00014CF0 */ 0x12, 0x18, 0x14, 0x03, 0x00, 0x20, 0x15, 0x09, 0x06, 0x00, 0x26, 0x18, 0x18, 0x09, 0xE0, 0xFF, +/* 00014D00 */ 0x8E, 0x01, 0x03, 0x20, 0x4A, 0x20, 0x97, 0x20, 0x20, 0x15, 0x45, 0x19, 0x20, 0x8E, 0x01, 0x05, +/* 00014D10 */ 0x20, 0x4A, 0x20, 0x33, 0x21, 0x18, 0x14, 0x97, 0x20, 0x20, 0x21, 0x45, 0x1A, 0x20, 0x9C, 0x1A, +/* 00014D20 */ 0x0E, 0x19, 0x45, 0x14, 0x18, 0x09, 0x65, 0xFE, 0x76, 0x12, 0x0E, 0x0E, 0xA8, 0x00, 0x24, 0x00, +/* 00014D30 */ 0xFE, 0x2C, 0x01, 0x69, 0xFE, 0x73, 0x04, 0xFE, 0x2C, 0x01, 0xCF, 0xFE, 0xFF, 0x01, 0xFE, 0x0D, +/* 00014D40 */ 0x02, 0xD1, 0xFE, 0x5E, 0x01, 0xFE, 0x5E, 0x01, 0xFE, 0x5E, 0x01, 0xFE, 0x5E, 0x01, 0xFE, 0x73, +/* 00014D50 */ 0x04, 0xD1, 0xFE, 0x72, 0x02, 0xFE, 0x00, 0xE8, 0x27, 0x24, 0x00, 0x00, 0x00, 0x3D, 0x00, 0xB0, +/* 00014D60 */ 0x01, 0x07, 0x00, 0xB6, 0x00, 0x3D, 0x00, 0x43, 0x05, 0x1F, 0x00, 0x0E, 0x02, 0x03, 0x00, 0x27, +/* 00014D70 */ 0x00, 0x05, 0x00, 0x22, 0x00, 0x0C, 0x00, 0x2A, 0x00, 0x07, 0x00, 0x2A, 0x00, 0x07, 0x00, 0x31, +/* 00014D80 */ 0x00, 0x04, 0x00, 0x29, 0x00, 0x04, 0x00, 0x2B, 0x00, 0x03, 0x00, 0x45, 0x00, 0x03, 0x00, 0x1D, +/* 00014D90 */ 0x00, 0x06, 0x00, 0x25, 0x00, 0x04, 0x00, 0x27, 0x00, 0x03, 0x00, 0x2A, 0x00, 0x03, 0x00, 0x1D, +/* 00014DA0 */ 0x00, 0x06, 0x00, 0x25, 0x00, 0x08, 0x00, 0x2B, 0x00, 0x03, 0x00, 0x1D, 0x00, 0x03, 0x00, 0x02, +/* 00014DB0 */ 0x01, 0x17, 0x00, 0x58, 0x00, 0x14, 0x00, 0x76, 0x01, 0x10, 0x00, 0x49, 0x00, 0x08, 0x00, 0x3B, +/* 00014DC0 */ 0x00, 0x10, 0x00, 0x76, 0x00, 0x4D, 0x00, 0xE1, 0x00, 0x46, 0x00, 0xED, 0x00, 0x0A, 0x00, 0x38, +/* 00014DD0 */ 0x01, 0x0E, 0x00, 0x6F, 0x00, 0x09, 0x00, 0x2A, 0x00, 0x18, 0x00, 0x44, 0x00, 0x06, 0x00, 0x30, +/* 00014DE0 */ 0x00, 0x0D, 0x00, 0x3E, 0x00, 0x11, 0x00, 0x48, 0x00, 0x04, 0x00, 0x36, 0x00, 0x06, 0x00, 0x2A, +/* 00014DF0 */ 0x00, 0x06, 0x00, 0x23, 0x00, 0x00, 0x34, 0x4F, 0x01, 0x00, 0xFE, 0x4D, 0x01, 0x00, 0x7F, 0x5C, +/* 00014E00 */ 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x5E, 0x05, 0x43, 0xA2, 0x41, 0xD1, 0x00, 0x58, 0xFE, +/* 00014E10 */ 0x99, 0xEA, 0xFE, 0x99, 0xEA, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, 0x99, 0xEA, 0xFE, 0xF8, +/* 00014E20 */ 0x04, 0xFE, 0xF8, 0x04, 0x08, 0x0B, 0x0F, 0x04, 0x38, 0x34, 0x05, 0x06, 0x01, 0x01, 0x01, 0x01, +/* 00014E30 */ 0x0E, 0x06, 0xFE, 0x38, 0x04, 0x0B, 0x06, 0xFE, 0x6F, 0x04, 0x06, 0xFE, 0x6D, 0x04, 0x06, 0xFE, +/* 00014E40 */ 0x55, 0x04, 0x0C, 0x06, 0xFE, 0x6E, 0x04, 0x06, 0xFE, 0x70, 0x04, 0x06, 0xFE, 0x57, 0x04, 0xBC, +/* 00014E50 */ 0x4E, 0x0D, 0x8E, 0x01, 0x04, 0x0F, 0x4A, 0x0F, 0x97, 0x0F, 0x0F, 0x0C, 0x45, 0x0D, 0x0F, 0x14, +/* 00014E60 */ 0x03, 0x00, 0x0C, 0x02, 0x09, 0x69, 0x00, 0x8E, 0x01, 0x03, 0x0F, 0x14, 0x27, 0x00, 0x0F, 0x03, +/* 00014E70 */ 0x8E, 0x01, 0x03, 0x0F, 0xA8, 0x10, 0x14, 0x03, 0x00, 0x0F, 0x10, 0x09, 0x1F, 0x00, 0x8E, 0x01, +/* 00014E80 */ 0x05, 0x0F, 0x4A, 0x0F, 0x14, 0x0E, 0x00, 0x0F, 0x04, 0x8E, 0x01, 0x05, 0x0F, 0x4A, 0x0F, 0x14, +/* 00014E90 */ 0x03, 0x00, 0x0F, 0x05, 0x09, 0x06, 0x00, 0x45, 0x0C, 0x06, 0x09, 0x33, 0x00, 0x8E, 0x01, 0x03, +/* 00014EA0 */ 0x0F, 0x14, 0x27, 0x00, 0x0F, 0x07, 0x8E, 0x01, 0x03, 0x0F, 0xA8, 0x10, 0x14, 0x03, 0x00, 0x0F, +/* 00014EB0 */ 0x10, 0x09, 0x1C, 0x00, 0x8E, 0x01, 0x05, 0x0F, 0x4A, 0x0F, 0x14, 0x0E, 0x00, 0x0F, 0x08, 0x8E, +/* 00014EC0 */ 0x01, 0x05, 0x0F, 0x4A, 0x0F, 0x14, 0x03, 0x00, 0x0F, 0x09, 0x09, 0x03, 0x00, 0x45, 0x0C, 0x0A, +/* 00014ED0 */ 0x45, 0x0F, 0x0B, 0x8E, 0x05, 0x36, 0x11, 0x4A, 0x11, 0x6C, 0x10, 0x11, 0x00, 0x07, 0x03, 0x00, +/* 00014EE0 */ 0x59, 0x00, 0x11, 0x8E, 0x02, 0x02, 0x12, 0x4A, 0x12, 0x97, 0x12, 0x12, 0x0C, 0x59, 0x01, 0x12, +/* 00014EF0 */ 0x8E, 0x02, 0x04, 0x12, 0x4A, 0x12, 0x97, 0x12, 0x12, 0x0D, 0x59, 0x02, 0x12, 0x1F, 0x03, 0x10, +/* 00014F00 */ 0x10, 0x2D, 0x00, 0x0F, 0x10, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x3A, 0x01, 0xFE, +/* 00014F10 */ 0xCE, 0xEA, 0x08, 0x02, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x42, 0x00, 0x08, 0x00, 0xA5, 0x02, 0x30, +/* 00014F20 */ 0x00, 0x6F, 0x00, 0x06, 0x00, 0x35, 0x00, 0x30, 0x00, 0x70, 0x00, 0x03, 0x00, 0x5B, 0x00, 0x3A, +/* 00014F30 */ 0x00, 0x6C, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0x01, 0x00, 0x10, 0x03, 0x00, 0xFE, 0x51, 0x05, 0x45, +/* 00014F40 */ 0xA2, 0x41, 0xD1, 0x00, 0x57, 0xFE, 0x35, 0xE8, 0xFE, 0x35, 0xE8, 0x01, 0xFE, 0x00, 0x90, 0x03, +/* 00014F50 */ 0x03, 0xFE, 0x35, 0xE8, 0xFE, 0x5B, 0x01, 0xFE, 0x5B, 0x01, 0x07, 0x06, 0x0B, 0x07, 0x1B, 0x18, +/* 00014F60 */ 0x05, 0x02, 0x0A, 0x01, 0x00, 0x06, 0xFE, 0xA3, 0x03, 0x01, 0x01, 0x08, 0x4F, 0x4E, 0x08, 0x4E, +/* 00014F70 */ 0x09, 0x97, 0x0B, 0x07, 0x02, 0x45, 0x08, 0x0B, 0x8E, 0x04, 0x02, 0x0B, 0x4A, 0x0B, 0x07, 0x06, +/* 00014F80 */ 0x00, 0x59, 0x00, 0x05, 0x8E, 0x01, 0x02, 0x0C, 0x59, 0x01, 0x0C, 0x59, 0x02, 0x08, 0x59, 0x03, +/* 00014F90 */ 0x03, 0x97, 0x0C, 0x07, 0x04, 0x59, 0x04, 0x0C, 0xA8, 0x0C, 0x59, 0x05, 0x0C, 0x1F, 0x06, 0x0B, +/* 00014FA0 */ 0x0B, 0x45, 0x09, 0x0B, 0xA8, 0x0B, 0x15, 0x03, 0x00, 0x09, 0x0B, 0x09, 0x04, 0x00, 0x9C, 0x09, +/* 00014FB0 */ 0x06, 0x08, 0x45, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x6A, 0xE8, 0x06, +/* 00014FC0 */ 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x2F, 0x00, 0x2C, 0x00, 0x5F, 0x00, 0x0A, 0x00, 0x33, 0x00, +/* 00014FD0 */ 0x04, 0x00, 0x43, 0x00, 0x08, 0x00, 0x21, 0x00, 0x00, 0x7E, 0x5D, 0x00, 0xC1, 0x13, 0x1A, 0x4B, +/* 00014FE0 */ 0x00, 0xFE, 0x0F, 0x04, 0x18, 0xA0, 0x41, 0xD1, 0x00, 0x4A, 0xFE, 0x7D, 0xB4, 0xFE, 0x7D, 0xB4, +/* 00014FF0 */ 0x09, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFE, 0x7D, 0xB4, 0xFE, 0xC7, 0x24, 0xFE, 0xC7, 0x24, 0x05, +/* 00015000 */ 0xFE, 0x0B, 0x04, 0xFE, 0x0C, 0x04, 0xFE, 0x32, 0x02, 0xFE, 0x0B, 0x02, 0xFE, 0x0D, 0x04, 0x0B, +/* 00015010 */ 0x1B, 0x21, 0x09, 0xD4, 0xD1, 0x02, 0x07, 0x25, 0x25, 0x25, 0x25, 0x07, 0x1E, 0x1F, 0x20, 0x06, +/* 00015020 */ 0xFE, 0x27, 0x03, 0x06, 0xFE, 0x0E, 0x04, 0x05, 0xFE, 0x0F, 0x04, 0x08, 0x07, 0x05, 0xFE, 0x10, +/* 00015030 */ 0x04, 0x05, 0xFE, 0x11, 0x04, 0x05, 0xFE, 0x12, 0x04, 0x05, 0xFE, 0x35, 0x03, 0x06, 0xFE, 0x38, +/* 00015040 */ 0x03, 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, 0x2B, 0x03, 0x0B, 0x06, 0xFE, 0x2C, 0x03, 0x0C, 0x06, +/* 00015050 */ 0xFE, 0x2D, 0x03, 0x06, 0xFE, 0xEC, 0x03, 0x06, 0xFE, 0xED, 0x03, 0x06, 0xFE, 0xEE, 0x03, 0x05, +/* 00015060 */ 0xFE, 0x13, 0x04, 0x05, 0xFE, 0x14, 0x04, 0x06, 0xFE, 0x37, 0x03, 0x06, 0xFE, 0x15, 0x04, 0x06, +/* 00015070 */ 0xFE, 0x77, 0x03, 0x06, 0xFE, 0x16, 0x04, 0xFE, 0xF2, 0x02, 0x4E, 0x1B, 0x4E, 0x1C, 0x4E, 0x1D, +/* 00015080 */ 0x4E, 0x21, 0x96, 0x02, 0x21, 0x4E, 0x21, 0x96, 0x03, 0x21, 0x4E, 0x21, 0x96, 0x04, 0x21, 0x4E, +/* 00015090 */ 0x21, 0x96, 0x05, 0x21, 0x4E, 0x21, 0x96, 0x06, 0x21, 0x8E, 0x02, 0x32, 0x21, 0x15, 0x03, 0x00, +/* 000150A0 */ 0x21, 0x02, 0x09, 0x11, 0x00, 0x8E, 0x02, 0x32, 0x21, 0x15, 0x03, 0x00, 0x21, 0x03, 0x09, 0x05, +/* 000150B0 */ 0x00, 0xA8, 0x00, 0x09, 0xB4, 0x02, 0xD6, 0x00, 0x21, 0x96, 0x02, 0x21, 0x8E, 0x02, 0x03, 0x22, +/* 000150C0 */ 0x6C, 0x21, 0x22, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x22, 0x8E, 0x01, 0x06, 0x23, 0x4A, 0x23, +/* 000150D0 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x05, 0x59, 0x01, 0x04, 0xD6, 0x01, 0x24, 0x59, 0x02, 0x24, 0x1F, +/* 000150E0 */ 0x03, 0x23, 0x23, 0x59, 0x01, 0x23, 0x8E, 0x02, 0x03, 0x23, 0x5E, 0x23, 0x23, 0x01, 0x5E, 0x23, +/* 000150F0 */ 0x23, 0x02, 0x59, 0x02, 0x23, 0x1F, 0x03, 0xFF, 0x21, 0x8E, 0x02, 0x32, 0x21, 0x14, 0x03, 0x00, +/* 00015100 */ 0x21, 0x03, 0x09, 0x05, 0x00, 0xA8, 0x00, 0x09, 0x60, 0x02, 0xCD, 0x21, 0x96, 0x03, 0x21, 0x8E, +/* 00015110 */ 0x02, 0x23, 0x21, 0x07, 0x03, 0x00, 0x59, 0x00, 0x05, 0x59, 0x01, 0x07, 0xD6, 0x02, 0x22, 0x59, +/* 00015120 */ 0x02, 0x22, 0x1F, 0x03, 0x21, 0x21, 0x96, 0x04, 0x21, 0x8E, 0x01, 0x06, 0x21, 0x4A, 0x21, 0x07, +/* 00015130 */ 0x03, 0x00, 0x59, 0x00, 0x05, 0x59, 0x01, 0x08, 0xD6, 0x03, 0x22, 0x59, 0x02, 0x22, 0x1F, 0x03, +/* 00015140 */ 0x21, 0x21, 0x96, 0x05, 0x21, 0x8E, 0x01, 0x06, 0x21, 0x4A, 0x21, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 00015150 */ 0x05, 0x59, 0x01, 0x09, 0xD6, 0x04, 0x22, 0x59, 0x02, 0x22, 0x1F, 0x03, 0x21, 0x21, 0x45, 0x1B, +/* 00015160 */ 0x21, 0x8E, 0x01, 0x06, 0x21, 0x4A, 0x21, 0x07, 0x03, 0x00, 0x59, 0x00, 0x05, 0x59, 0x01, 0x0A, +/* 00015170 */ 0xD6, 0x05, 0x22, 0x59, 0x02, 0x22, 0x1F, 0x03, 0x21, 0x21, 0x45, 0x1C, 0x21, 0x8E, 0x02, 0x36, +/* 00015180 */ 0x22, 0x4A, 0x22, 0x6C, 0x21, 0x22, 0x03, 0x07, 0x04, 0x00, 0x59, 0x00, 0x22, 0x92, 0x04, 0x23, +/* 00015190 */ 0x59, 0x01, 0x23, 0x59, 0x02, 0x0B, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, +/* 000151A0 */ 0x00, 0x00, 0x00, 0x7A, 0x1C, 0x23, 0x04, 0x7A, 0x0E, 0x23, 0x05, 0x7A, 0x10, 0x23, 0x06, 0x7A, +/* 000151B0 */ 0x0E, 0x23, 0x07, 0x59, 0x03, 0x23, 0x1F, 0x04, 0xFF, 0x21, 0x8E, 0x02, 0x36, 0x22, 0x4A, 0x22, +/* 000151C0 */ 0x6C, 0x21, 0x22, 0x08, 0x07, 0x04, 0x00, 0x59, 0x00, 0x22, 0x92, 0x04, 0x23, 0x59, 0x01, 0x23, +/* 000151D0 */ 0x59, 0x02, 0x12, 0xCE, 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, +/* 000151E0 */ 0x92, 0x03, 0x24, 0x7A, 0x24, 0x23, 0x09, 0x7A, 0x10, 0x23, 0x0A, 0x7A, 0x10, 0x23, 0x0B, 0x7A, +/* 000151F0 */ 0x10, 0x23, 0x0C, 0x59, 0x03, 0x23, 0x1F, 0x04, 0xFF, 0x21, 0x8E, 0x02, 0x36, 0x22, 0x4A, 0x22, +/* 00015200 */ 0x6C, 0x21, 0x22, 0x0D, 0x07, 0x04, 0x00, 0x59, 0x00, 0x22, 0x92, 0x03, 0x23, 0x59, 0x01, 0x23, +/* 00015210 */ 0x59, 0x02, 0x13, 0xCE, 0x30, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, +/* 00015220 */ 0x92, 0x04, 0x24, 0x7A, 0x24, 0x23, 0x0E, 0x7A, 0x0E, 0x23, 0x0F, 0x7A, 0x10, 0x23, 0x10, 0x7A, +/* 00015230 */ 0x0E, 0x23, 0x11, 0x59, 0x03, 0x23, 0x1F, 0x04, 0xFF, 0x21, 0xD6, 0x06, 0x21, 0x96, 0x06, 0x21, +/* 00015240 */ 0x8E, 0x02, 0x36, 0x22, 0x4A, 0x22, 0x6C, 0x21, 0x22, 0x12, 0x07, 0x04, 0x00, 0x59, 0x00, 0x22, +/* 00015250 */ 0x92, 0x03, 0x23, 0x59, 0x01, 0x23, 0x59, 0x02, 0x14, 0xCE, 0x48, 0x00, 0x00, 0x00, 0x03, 0x00, +/* 00015260 */ 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x8E, 0x01, 0x06, 0x24, 0x4A, 0x24, 0x07, 0x03, 0x00, 0x59, +/* 00015270 */ 0x00, 0x05, 0x59, 0x01, 0x15, 0xD6, 0x07, 0x25, 0x59, 0x02, 0x25, 0x1F, 0x03, 0x24, 0x24, 0x7A, +/* 00015280 */ 0x24, 0x23, 0x13, 0x7A, 0x0E, 0x23, 0x14, 0x7A, 0x10, 0x23, 0x15, 0x7A, 0x0E, 0x23, 0x16, 0x59, +/* 00015290 */ 0x03, 0x23, 0x1F, 0x04, 0xFF, 0x21, 0x8E, 0x01, 0x06, 0x21, 0x4A, 0x21, 0x07, 0x03, 0x00, 0x59, +/* 000152A0 */ 0x00, 0x05, 0x59, 0x01, 0x16, 0xD6, 0x08, 0x22, 0x59, 0x02, 0x22, 0x1F, 0x03, 0x21, 0x21, 0x45, +/* 000152B0 */ 0x1D, 0x21, 0x8E, 0x02, 0x36, 0x22, 0x4A, 0x22, 0x6C, 0x21, 0x22, 0x17, 0x07, 0x04, 0x00, 0x59, +/* 000152C0 */ 0x00, 0x22, 0x59, 0x01, 0x1D, 0x59, 0x02, 0x17, 0xCE, 0x60, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, +/* 000152D0 */ 0x00, 0x23, 0x00, 0x00, 0x00, 0x7A, 0x16, 0x23, 0x18, 0x7A, 0x10, 0x23, 0x19, 0x7A, 0x10, 0x23, +/* 000152E0 */ 0x1A, 0x7A, 0x0E, 0x23, 0x1B, 0x59, 0x03, 0x23, 0x1F, 0x04, 0xFF, 0x21, 0x8E, 0x02, 0x36, 0x22, +/* 000152F0 */ 0x4A, 0x22, 0x6C, 0x21, 0x22, 0x1C, 0x07, 0x04, 0x00, 0x59, 0x00, 0x22, 0x92, 0x03, 0x23, 0x59, +/* 00015300 */ 0x01, 0x23, 0x59, 0x02, 0x18, 0xCE, 0x78, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, +/* 00015310 */ 0x00, 0x00, 0x7A, 0x1D, 0x23, 0x1D, 0x7A, 0x10, 0x23, 0x1E, 0x7A, 0x0E, 0x23, 0x1F, 0x59, 0x03, +/* 00015320 */ 0x23, 0x1F, 0x04, 0xFF, 0x21, 0x8E, 0x02, 0x36, 0x22, 0x4A, 0x22, 0x6C, 0x21, 0x22, 0x20, 0x07, +/* 00015330 */ 0x04, 0x00, 0x59, 0x00, 0x22, 0x92, 0x03, 0x23, 0x59, 0x01, 0x23, 0x59, 0x02, 0x1A, 0xCE, 0x8C, +/* 00015340 */ 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x7A, 0x1B, 0x23, 0x21, 0x7A, +/* 00015350 */ 0x10, 0x23, 0x22, 0x7A, 0x0E, 0x23, 0x23, 0x7A, 0x0E, 0x23, 0x24, 0x59, 0x03, 0x23, 0x1F, 0x04, +/* 00015360 */ 0xFF, 0x21, 0x92, 0x04, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x07, 0xA4, 0x00, 0x8C, +/* 00015370 */ 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x94, +/* 00015380 */ 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x03, +/* 00015390 */ 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, +/* 000153A0 */ 0x01, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, +/* 000153B0 */ 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x48, +/* 000153C0 */ 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, +/* 000153D0 */ 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x03, +/* 000153E0 */ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, +/* 000153F0 */ 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, +/* 00015400 */ 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, +/* 00015410 */ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, +/* 00015420 */ 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0xFE, +/* 00015430 */ 0x04, 0x02, 0xFE, 0x2F, 0x02, 0xFE, 0x2D, 0x02, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, +/* 00015440 */ 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, +/* 00015450 */ 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, +/* 00015460 */ 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, +/* 00015470 */ 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, +/* 00015480 */ 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x98, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, +/* 00015490 */ 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x93, +/* 000154A0 */ 0xB4, 0x16, 0x1F, 0x00, 0x00, 0x00, 0x18, 0x00, 0x40, 0x00, 0x05, 0x00, 0x1B, 0x00, 0x06, 0x00, +/* 000154B0 */ 0xB8, 0x09, 0x3D, 0x00, 0x94, 0x02, 0x0C, 0x00, 0x29, 0x00, 0x05, 0x00, 0x1B, 0x00, 0x05, 0x00, +/* 000154C0 */ 0x2B, 0x00, 0x1A, 0x00, 0x70, 0x04, 0x1C, 0x00, 0xB9, 0x01, 0x1C, 0x00, 0xDD, 0x02, 0x1C, 0x00, +/* 000154D0 */ 0x13, 0x01, 0x3D, 0x00, 0xCE, 0x00, 0x40, 0x00, 0xC9, 0x00, 0x40, 0x00, 0xCA, 0x00, 0x06, 0x00, +/* 000154E0 */ 0xC4, 0x02, 0x56, 0x00, 0xF9, 0x03, 0x1C, 0x00, 0x22, 0x02, 0x3A, 0x00, 0xB7, 0x00, 0x39, 0x00, +/* 000154F0 */ 0xA4, 0x00, 0x3D, 0x00, 0xCD, 0x00, 0x08, 0x00, 0x19, 0x00, 0x00, 0xEF, 0x5D, 0x01, 0x00, 0xCB, +/* 00015500 */ 0x5C, 0x01, 0x00, 0xDC, 0x5A, 0x01, 0x00, 0x14, 0x5A, 0x01, 0x00, 0xF5, 0x58, 0x01, 0x00, 0x68, +/* 00015510 */ 0x58, 0x01, 0x00, 0x39, 0x57, 0x01, 0x00, 0x1B, 0x56, 0x01, 0x00, 0x1F, 0x55, 0x01, 0x00, 0x7F, +/* 00015520 */ 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0xD5, 0x04, 0x3B, 0xA0, 0x41, 0xD1, 0x00, 0x53, +/* 00015530 */ 0xFE, 0x13, 0xD5, 0xFE, 0x13, 0xD5, 0x09, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFE, 0x13, 0xD5, 0xFE, +/* 00015540 */ 0xE4, 0x01, 0xFE, 0xE4, 0x01, 0x07, 0x06, 0x09, 0x04, 0x2A, 0x28, 0x03, 0x04, 0x06, 0x06, 0x06, +/* 00015550 */ 0x06, 0x08, 0x06, 0xFE, 0x94, 0x03, 0x05, 0xFE, 0x22, 0x04, 0x06, 0xFE, 0x2F, 0x03, 0x08, 0x86, +/* 00015560 */ 0x58, 0x06, 0x4E, 0x07, 0x2A, 0x09, 0x06, 0x15, 0x03, 0x00, 0x09, 0x02, 0x09, 0x18, 0x00, 0x8E, +/* 00015570 */ 0x03, 0x03, 0x0A, 0x6C, 0x09, 0x0A, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0A, 0x59, 0x01, 0x03, +/* 00015580 */ 0x59, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x09, 0x8E, 0x01, 0x06, 0x09, 0x4A, 0x09, 0x07, 0x02, 0x00, +/* 00015590 */ 0x59, 0x00, 0x05, 0x59, 0x01, 0x06, 0x1F, 0x02, 0x09, 0x09, 0x45, 0x07, 0x09, 0x5E, 0x09, 0x07, +/* 000155A0 */ 0x01, 0xA8, 0x0A, 0x14, 0x03, 0x00, 0x09, 0x0A, 0x09, 0x30, 0x00, 0x45, 0x09, 0x07, 0x8E, 0x03, +/* 000155B0 */ 0x36, 0x0B, 0x4A, 0x0B, 0x6C, 0x0A, 0x0B, 0x02, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0B, 0x8E, 0x01, +/* 000155C0 */ 0x05, 0x0C, 0x4A, 0x0C, 0x59, 0x01, 0x0C, 0x59, 0x02, 0x07, 0x1F, 0x03, 0x0A, 0x0A, 0x76, 0x0A, +/* 000155D0 */ 0x09, 0x03, 0x5E, 0x09, 0x07, 0x04, 0x82, 0x09, 0x09, 0x06, 0x01, 0x5E, 0x00, 0x07, 0x05, 0x09, +/* 000155E0 */ 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB6, 0x02, 0xFE, 0x25, 0x04, 0x54, 0xFE, 0x25, 0x04, +/* 000155F0 */ 0xFE, 0x25, 0x04, 0xFE, 0x25, 0x04, 0xFE, 0x2D, 0xD5, 0x08, 0x04, 0x00, 0x00, 0x00, 0x0B, 0x00, +/* 00015600 */ 0x30, 0x00, 0x18, 0x00, 0x6C, 0x00, 0x16, 0x00, 0x3C, 0x00, 0x0E, 0x00, 0x3E, 0x00, 0x27, 0x00, +/* 00015610 */ 0x49, 0x00, 0x09, 0x00, 0x41, 0x00, 0x09, 0x00, 0x29, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, +/* 00015620 */ 0x10, 0x03, 0x00, 0xFE, 0xC2, 0x04, 0x55, 0xA0, 0x41, 0xC3, 0x00, 0xFE, 0xEE, 0x03, 0x52, 0xFE, +/* 00015630 */ 0x79, 0xD1, 0xFE, 0x79, 0xD1, 0x09, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFE, 0x79, 0xD1, 0xFE, 0x78, +/* 00015640 */ 0x02, 0xFE, 0x78, 0x02, 0x06, 0x11, 0x15, 0x04, 0x2C, 0x2A, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, +/* 00015650 */ 0x14, 0x06, 0xFE, 0x94, 0x03, 0x05, 0xFE, 0x22, 0x04, 0x06, 0xFE, 0x2F, 0x03, 0x08, 0x06, 0xFE, +/* 00015660 */ 0xD7, 0x03, 0x06, 0xFE, 0x24, 0x04, 0x06, 0xFE, 0x18, 0x04, 0x06, 0xFE, 0x1B, 0x04, 0x06, 0xFE, +/* 00015670 */ 0x1C, 0x04, 0x06, 0xFE, 0xDA, 0x03, 0x06, 0xFE, 0xDB, 0x03, 0x06, 0xFE, 0xDC, 0x03, 0x06, 0xFE, +/* 00015680 */ 0xDD, 0x03, 0x06, 0xFE, 0xDE, 0x03, 0x06, 0xFE, 0x1F, 0x04, 0x8E, 0x58, 0x11, 0x4E, 0x12, 0x4E, +/* 00015690 */ 0x13, 0x2A, 0x15, 0x11, 0x15, 0x03, 0x00, 0x15, 0x02, 0x09, 0x18, 0x00, 0x8E, 0x03, 0x03, 0x16, +/* 000156A0 */ 0x6C, 0x15, 0x16, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x16, 0x59, 0x01, 0x03, 0x59, 0x02, 0x04, +/* 000156B0 */ 0x1F, 0x03, 0xFF, 0x15, 0x8E, 0x01, 0x06, 0x15, 0x4A, 0x15, 0x07, 0x02, 0x00, 0x59, 0x00, 0x05, +/* 000156C0 */ 0x59, 0x01, 0x11, 0x1F, 0x02, 0x15, 0x15, 0x45, 0x12, 0x15, 0xCF, 0x15, 0x0B, 0xA1, 0x00, 0x06, +/* 000156D0 */ 0x15, 0xA1, 0x01, 0x07, 0x15, 0xA1, 0x02, 0x08, 0x15, 0xA1, 0x03, 0x09, 0x15, 0xA1, 0x04, 0x0A, +/* 000156E0 */ 0x15, 0xA1, 0x05, 0x0B, 0x15, 0xA1, 0x06, 0x0C, 0x15, 0xA1, 0x07, 0x0D, 0x15, 0xA1, 0x08, 0x0E, +/* 000156F0 */ 0x15, 0xA1, 0x09, 0x0F, 0x15, 0xA1, 0x0A, 0x10, 0x15, 0x45, 0x13, 0x15, 0x8E, 0x02, 0x17, 0x15, +/* 00015700 */ 0x4A, 0x15, 0x07, 0x03, 0x00, 0x59, 0x00, 0x05, 0x59, 0x01, 0x13, 0x59, 0x02, 0x12, 0x1F, 0x03, +/* 00015710 */ 0x00, 0x15, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB6, 0x02, 0xFE, 0xA6, 0xD1, 0x06, +/* 00015720 */ 0x06, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x34, 0x00, 0x18, 0x00, 0x74, 0x00, 0x16, 0x00, 0x40, 0x00, +/* 00015730 */ 0x32, 0x00, 0x21, 0x01, 0x1B, 0x00, 0x41, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x07, 0x10, 0x03, +/* 00015740 */ 0x00, 0xFE, 0xAF, 0x04, 0x23, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x0D, 0x04, 0x51, 0xFE, 0x3E, 0xCE, +/* 00015750 */ 0xFE, 0x3E, 0xCE, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0x3E, 0xCE, 0xFE, 0x9E, 0x02, 0xFE, +/* 00015760 */ 0x9E, 0x02, 0x05, 0x05, 0x08, 0x04, 0x32, 0x2E, 0x03, 0x02, 0x07, 0x07, 0x07, 0x07, 0x01, 0x07, +/* 00015770 */ 0x06, 0xFE, 0x94, 0x03, 0x05, 0xFE, 0x22, 0x04, 0x06, 0xFE, 0x2F, 0x03, 0xA9, 0x4E, 0x06, 0x8E, +/* 00015780 */ 0x03, 0x03, 0x09, 0x6C, 0x08, 0x09, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x09, 0x59, 0x01, 0x05, +/* 00015790 */ 0x1F, 0x02, 0x08, 0x08, 0x45, 0x06, 0x08, 0x0E, 0x08, 0x00, 0x06, 0x5E, 0x08, 0x06, 0x01, 0x0F, +/* 000157A0 */ 0x1E, 0x00, 0x08, 0x8E, 0x01, 0x04, 0x08, 0x4A, 0x08, 0xE3, 0x08, 0x05, 0x08, 0x00, 0x0E, 0x0F, +/* 000157B0 */ 0x00, 0x08, 0x8E, 0x03, 0x03, 0x08, 0x5E, 0x08, 0x08, 0x02, 0x97, 0x08, 0x05, 0x08, 0x45, 0x05, +/* 000157C0 */ 0x08, 0x2A, 0x08, 0x05, 0x15, 0x03, 0x00, 0x08, 0x02, 0x09, 0x18, 0x00, 0x8E, 0x03, 0x03, 0x09, +/* 000157D0 */ 0x6C, 0x08, 0x09, 0x03, 0x07, 0x03, 0x00, 0x59, 0x00, 0x09, 0x59, 0x01, 0x03, 0x59, 0x02, 0x04, +/* 000157E0 */ 0x1F, 0x03, 0xFF, 0x08, 0x8E, 0x03, 0x03, 0x09, 0x6C, 0x08, 0x09, 0x04, 0x07, 0x02, 0x00, 0x59, +/* 000157F0 */ 0x00, 0x09, 0x59, 0x01, 0x05, 0x1F, 0x02, 0x08, 0x08, 0x45, 0x06, 0x08, 0x5E, 0x08, 0x06, 0x05, +/* 00015800 */ 0x0F, 0x18, 0x00, 0x08, 0x8E, 0x03, 0x03, 0x09, 0x6C, 0x08, 0x09, 0x06, 0x07, 0x03, 0x00, 0x59, +/* 00015810 */ 0x00, 0x09, 0x59, 0x01, 0x03, 0x59, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x08, 0x45, 0x00, 0x06, 0x09, +/* 00015820 */ 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x05, 0x02, 0xFE, 0x20, 0x04, 0xFE, 0x30, 0x02, 0xFE, +/* 00015830 */ 0xB6, 0x02, 0xFE, 0x05, 0x02, 0xFE, 0x20, 0x04, 0xFE, 0xB6, 0x02, 0xFE, 0x5A, 0xCE, 0x0A, 0x02, +/* 00015840 */ 0x00, 0x00, 0x00, 0x18, 0x00, 0x3D, 0x00, 0x1B, 0x00, 0x6E, 0x00, 0x0F, 0x00, 0x3D, 0x00, 0x0B, +/* 00015850 */ 0x00, 0x2E, 0x00, 0x18, 0x00, 0x6C, 0x00, 0x18, 0x00, 0x39, 0x00, 0x08, 0x00, 0x3D, 0x00, 0x18, +/* 00015860 */ 0x00, 0x6C, 0x00, 0x08, 0x00, 0x1D, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, +/* 00015870 */ 0xFE, 0x97, 0x04, 0x5E, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x38, 0x03, 0x50, 0xFE, 0x05, 0xCB, 0xFE, +/* 00015880 */ 0x05, 0xCB, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x02, 0xFE, 0x05, 0xCB, 0xB2, 0xB2, 0x05, 0x03, 0x06, +/* 00015890 */ 0x08, 0x17, 0x16, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x05, 0x08, 0x45, 0x15, 0x05, 0x00, 0x04, +/* 000158A0 */ 0x02, 0xA8, 0x06, 0x45, 0x04, 0x06, 0x8E, 0x02, 0x16, 0x06, 0x4A, 0x06, 0x07, 0x04, 0x00, 0x59, +/* 000158B0 */ 0x00, 0x02, 0x8E, 0x03, 0x03, 0x07, 0x5E, 0x07, 0x07, 0x00, 0x59, 0x01, 0x07, 0x8E, 0x02, 0x12, +/* 000158C0 */ 0x07, 0x4A, 0x07, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x03, 0x1F, 0x02, 0x07, 0x07, +/* 000158D0 */ 0x59, 0x02, 0x07, 0x59, 0x03, 0x04, 0x1F, 0x04, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, +/* 000158E0 */ 0x00, 0xFE, 0xF1, 0x01, 0xFE, 0x2A, 0xCB, 0x03, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x23, 0x00, +/* 000158F0 */ 0x39, 0x00, 0x69, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x88, 0x04, +/* 00015900 */ 0x5E, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x16, 0x04, 0x4F, 0xFE, 0x28, 0xC8, 0xFE, 0x28, 0xC8, 0x09, +/* 00015910 */ 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0x28, 0xC8, 0xFE, 0x7B, 0x02, 0xFE, 0x7B, 0x02, 0x06, 0x07, +/* 00015920 */ 0x0B, 0x06, 0x32, 0x30, 0x03, 0x02, 0x06, 0x06, 0x06, 0x06, 0x0A, 0x06, 0xFE, 0x94, 0x03, 0x05, +/* 00015930 */ 0xFE, 0x23, 0x04, 0x06, 0xFE, 0x2F, 0x03, 0x0B, 0x0C, 0xA3, 0x58, 0x08, 0x4E, 0x09, 0x8E, 0x03, +/* 00015940 */ 0x24, 0x0C, 0x6C, 0x0B, 0x0C, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0C, 0x59, 0x01, 0x07, 0x1F, +/* 00015950 */ 0x02, 0x0B, 0x0B, 0x45, 0x07, 0x0B, 0x2A, 0x0B, 0x08, 0x15, 0x03, 0x00, 0x0B, 0x02, 0x09, 0x18, +/* 00015960 */ 0x00, 0x8E, 0x03, 0x03, 0x0C, 0x6C, 0x0B, 0x0C, 0x01, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0C, 0x59, +/* 00015970 */ 0x01, 0x03, 0x59, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x0B, 0x8E, 0x03, 0x03, 0x0C, 0x6C, 0x0B, 0x0C, +/* 00015980 */ 0x02, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0C, 0x59, 0x01, 0x08, 0x1F, 0x02, 0x0B, 0x0B, 0x45, 0x09, +/* 00015990 */ 0x0B, 0xA8, 0x0B, 0x14, 0x08, 0x00, 0x09, 0x0B, 0x5E, 0x0B, 0x09, 0x03, 0x0F, 0x18, 0x00, 0x0B, +/* 000159A0 */ 0x8E, 0x03, 0x03, 0x0C, 0x6C, 0x0B, 0x0C, 0x04, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0C, 0x59, 0x01, +/* 000159B0 */ 0x03, 0x59, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x0B, 0x8E, 0x03, 0x03, 0x0C, 0x6C, 0x0B, 0x0C, 0x05, +/* 000159C0 */ 0x07, 0x05, 0x00, 0x59, 0x00, 0x0C, 0x59, 0x01, 0x07, 0x59, 0x02, 0x09, 0x59, 0x03, 0x05, 0x59, +/* 000159D0 */ 0x04, 0x06, 0x1F, 0x05, 0x00, 0x0B, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x23, 0x03, +/* 000159E0 */ 0xFE, 0xB6, 0x02, 0xFE, 0x05, 0x02, 0xFE, 0x20, 0x04, 0xFE, 0xB6, 0x02, 0xFE, 0xF8, 0x01, 0xFE, +/* 000159F0 */ 0x50, 0xC8, 0x08, 0x04, 0x00, 0x00, 0x00, 0x18, 0x00, 0x27, 0x00, 0x0B, 0x00, 0x30, 0x00, 0x18, +/* 00015A00 */ 0x00, 0x73, 0x00, 0x18, 0x00, 0x41, 0x00, 0x0F, 0x00, 0x5B, 0x00, 0x18, 0x00, 0x73, 0x00, 0x23, +/* 00015A10 */ 0x00, 0x79, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x7E, 0x04, 0x50, +/* 00015A20 */ 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x15, 0x04, 0x4E, 0xFE, 0x61, 0xC6, 0xFE, 0x61, 0xC6, 0x09, 0xFE, +/* 00015A30 */ 0x00, 0x90, 0x02, 0x02, 0xFE, 0x61, 0xC6, 0xFE, 0x65, 0x01, 0xFE, 0x65, 0x01, 0x05, 0x05, 0x08, +/* 00015A40 */ 0x06, 0x1F, 0x1E, 0x03, 0x02, 0x04, 0x04, 0x04, 0x04, 0x07, 0x05, 0xFE, 0x22, 0x04, 0x06, 0xFE, +/* 00015A50 */ 0x2F, 0x03, 0x0C, 0x63, 0x58, 0x06, 0x8E, 0x03, 0x24, 0x09, 0x6C, 0x08, 0x09, 0x00, 0x07, 0x02, +/* 00015A60 */ 0x00, 0x59, 0x00, 0x09, 0x59, 0x01, 0x05, 0x1F, 0x02, 0x08, 0x08, 0x45, 0x05, 0x08, 0x0E, 0x08, +/* 00015A70 */ 0x00, 0x06, 0x5E, 0x08, 0x06, 0x01, 0x0F, 0x18, 0x00, 0x08, 0x8E, 0x03, 0x03, 0x09, 0x6C, 0x08, +/* 00015A80 */ 0x09, 0x02, 0x07, 0x03, 0x00, 0x59, 0x00, 0x09, 0x59, 0x01, 0x02, 0x59, 0x02, 0x03, 0x1F, 0x03, +/* 00015A90 */ 0xFF, 0x08, 0x8E, 0x03, 0x03, 0x09, 0x6C, 0x08, 0x09, 0x03, 0x07, 0x05, 0x00, 0x59, 0x00, 0x09, +/* 00015AA0 */ 0x59, 0x01, 0x05, 0x59, 0x02, 0x06, 0x59, 0x03, 0x04, 0x59, 0x04, 0x04, 0x1F, 0x05, 0x00, 0x08, +/* 00015AB0 */ 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x23, 0x03, 0xFE, 0x20, 0x04, 0xFE, 0xB6, 0x02, +/* 00015AC0 */ 0xFE, 0xF8, 0x01, 0xFE, 0x82, 0xC6, 0x05, 0x02, 0x00, 0x00, 0x00, 0x18, 0x00, 0x27, 0x00, 0x0C, +/* 00015AD0 */ 0x00, 0x3E, 0x00, 0x18, 0x00, 0x6C, 0x00, 0x23, 0x00, 0x72, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, +/* 00015AE0 */ 0x17, 0x10, 0x43, 0x00, 0xFE, 0x63, 0x04, 0x44, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x2F, 0x03, 0x4D, +/* 00015AF0 */ 0xFE, 0xE5, 0xC1, 0xFE, 0xE5, 0xC1, 0x08, 0xFE, 0x00, 0x90, 0x03, 0x01, 0xFE, 0xE5, 0xC1, 0xFE, +/* 00015B00 */ 0xC9, 0x03, 0xFE, 0xC9, 0x03, 0x0C, 0x09, 0x12, 0x05, 0x5C, 0x53, 0x03, 0x05, 0x09, 0x09, 0x09, +/* 00015B10 */ 0x09, 0x01, 0x01, 0x11, 0x08, 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, 0x2B, 0x03, 0x0C, 0x06, 0xFE, +/* 00015B20 */ 0x2C, 0x03, 0x06, 0xFE, 0x2D, 0x03, 0x07, 0xFE, 0x2C, 0x01, 0x01, 0x5D, 0x01, 0x0B, 0x58, 0x10, +/* 00015B30 */ 0xC0, 0x0C, 0x4E, 0x0D, 0x4E, 0x0E, 0x4E, 0x0F, 0x15, 0x05, 0x00, 0x09, 0x02, 0xA8, 0x12, 0x45, +/* 00015B40 */ 0x09, 0x12, 0x15, 0x05, 0x00, 0x0A, 0x02, 0xA8, 0x12, 0x45, 0x0A, 0x12, 0x4E, 0x0D, 0x4E, 0x0E, +/* 00015B50 */ 0x4E, 0x0F, 0xA8, 0x12, 0x14, 0x03, 0x00, 0x0B, 0x12, 0x09, 0x06, 0x00, 0x45, 0x12, 0x0C, 0x09, +/* 00015B60 */ 0x03, 0x00, 0x46, 0x12, 0x0B, 0x45, 0x0D, 0x12, 0x8E, 0x02, 0x07, 0x12, 0x4A, 0x12, 0x07, 0x03, +/* 00015B70 */ 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x0D, 0x8E, 0x01, 0x03, 0x13, 0x4A, 0x13, 0x59, 0x02, 0x13, +/* 00015B80 */ 0x1F, 0x03, 0x12, 0x12, 0x45, 0x0E, 0x12, 0x8E, 0x03, 0x03, 0x13, 0x6C, 0x12, 0x13, 0x00, 0x07, +/* 00015B90 */ 0x02, 0x00, 0x59, 0x00, 0x13, 0x59, 0x01, 0x0E, 0x1F, 0x02, 0x12, 0x12, 0x45, 0x0F, 0x12, 0xA8, +/* 00015BA0 */ 0x12, 0x14, 0x03, 0x00, 0x0F, 0x12, 0x09, 0x2F, 0x00, 0x8E, 0x03, 0x36, 0x13, 0x4A, 0x13, 0x6C, +/* 00015BB0 */ 0x12, 0x13, 0x01, 0x07, 0x01, 0x00, 0x59, 0x00, 0x13, 0x1F, 0x01, 0x12, 0x12, 0x45, 0x0F, 0x12, +/* 00015BC0 */ 0x8E, 0x03, 0x03, 0x13, 0x6C, 0x12, 0x13, 0x02, 0x07, 0x03, 0x00, 0x59, 0x00, 0x13, 0x59, 0x01, +/* 00015BD0 */ 0x0E, 0x59, 0x02, 0x0F, 0x1F, 0x03, 0xFF, 0x12, 0x8E, 0x01, 0x02, 0x12, 0x4A, 0x12, 0x07, 0x04, +/* 00015BE0 */ 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x0F, 0x59, 0x02, 0x09, 0x59, 0x03, 0x0A, 0x1F, 0x04, 0xFF, +/* 00015BF0 */ 0x12, 0xA8, 0x12, 0x14, 0x03, 0x00, 0x0B, 0x12, 0x09, 0x51, 0x00, 0xE3, 0x12, 0x10, 0x0C, 0x00, +/* 00015C00 */ 0x0E, 0x48, 0x00, 0x12, 0x8E, 0x03, 0x36, 0x13, 0x4A, 0x13, 0x6C, 0x12, 0x13, 0x03, 0x07, 0x04, +/* 00015C10 */ 0x00, 0x59, 0x00, 0x13, 0x59, 0x01, 0x10, 0x8E, 0x03, 0x03, 0x14, 0x5E, 0x14, 0x14, 0x04, 0x59, +/* 00015C20 */ 0x02, 0x14, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x7A, +/* 00015C30 */ 0x0E, 0x14, 0x05, 0x7A, 0x05, 0x14, 0x06, 0x7A, 0x05, 0x14, 0x07, 0x7A, 0x05, 0x14, 0x08, 0x59, +/* 00015C40 */ 0x03, 0x14, 0x1F, 0x04, 0xFF, 0x12, 0x45, 0x00, 0x10, 0x09, 0x08, 0x00, 0x45, 0x00, 0x0E, 0x09, +/* 00015C50 */ 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x01, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, +/* 00015C60 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, +/* 00015C70 */ 0x00, 0x95, 0x01, 0x00, 0x00, 0xFE, 0x05, 0x02, 0x69, 0xFE, 0x06, 0x02, 0xFE, 0x9C, 0x01, 0xFE, +/* 00015C80 */ 0x30, 0x02, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0xFB, +/* 00015C90 */ 0xC1, 0x0E, 0x0E, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x10, 0x00, 0x23, 0x00, 0x16, 0x00, +/* 00015CA0 */ 0x54, 0x00, 0x1F, 0x00, 0x63, 0x00, 0x18, 0x00, 0x47, 0x00, 0x0A, 0x00, 0x32, 0x00, 0x17, 0x00, +/* 00015CB0 */ 0x2B, 0x00, 0x18, 0x00, 0x51, 0x00, 0x19, 0x00, 0x45, 0x00, 0x13, 0x00, 0x50, 0x00, 0x42, 0x00, +/* 00015CC0 */ 0xF4, 0x00, 0x06, 0x00, 0x28, 0x00, 0x08, 0x00, 0x1D, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x07, +/* 00015CD0 */ 0x10, 0x03, 0x00, 0xFE, 0x51, 0x04, 0x5F, 0xA0, 0x41, 0xE3, 0x00, 0xFE, 0x21, 0x04, 0x4C, 0xFE, +/* 00015CE0 */ 0xFD, 0xBE, 0xFE, 0xFD, 0xBE, 0x0B, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFE, 0xFD, 0xBE, 0xFE, 0xFF, +/* 00015CF0 */ 0x01, 0xFE, 0xFF, 0x01, 0x07, 0x0B, 0x10, 0x06, 0x36, 0x34, 0x03, 0x05, 0x04, 0x04, 0x04, 0x04, +/* 00015D00 */ 0x01, 0x0F, 0x07, 0x06, 0xFE, 0xA4, 0x03, 0x05, 0xFE, 0x0F, 0x04, 0x06, 0xFE, 0x0E, 0x04, 0x01, +/* 00015D10 */ 0x00, 0x01, 0x01, 0x08, 0x0C, 0x0B, 0xAD, 0xB1, 0x0D, 0x58, 0x0B, 0x4E, 0x0C, 0x4E, 0x0E, 0x2A, +/* 00015D20 */ 0x10, 0x0B, 0x15, 0x03, 0x00, 0x10, 0x03, 0x09, 0x25, 0x00, 0x8E, 0x03, 0x0B, 0x10, 0xE3, 0x10, +/* 00015D30 */ 0x0B, 0x10, 0x00, 0x0F, 0x18, 0x00, 0x10, 0x8E, 0x03, 0x03, 0x11, 0x6C, 0x10, 0x11, 0x00, 0x07, +/* 00015D40 */ 0x03, 0x00, 0x59, 0x00, 0x11, 0x59, 0x01, 0x04, 0x59, 0x02, 0x05, 0x1F, 0x03, 0xFF, 0x10, 0x8E, +/* 00015D50 */ 0x03, 0x36, 0x11, 0x4A, 0x11, 0x6C, 0x10, 0x11, 0x01, 0x07, 0x01, 0x00, 0x59, 0x00, 0x11, 0x1F, +/* 00015D60 */ 0x01, 0x10, 0x10, 0x45, 0x0C, 0x10, 0x8E, 0x01, 0x02, 0x10, 0x4A, 0x10, 0x07, 0x04, 0x00, 0x59, +/* 00015D70 */ 0x00, 0x08, 0x59, 0x01, 0x0C, 0x97, 0x11, 0x0D, 0x06, 0x59, 0x02, 0x11, 0x97, 0x11, 0x0D, 0x07, +/* 00015D80 */ 0x59, 0x03, 0x11, 0x1F, 0x04, 0xFF, 0x10, 0x8E, 0x03, 0x24, 0x11, 0x6C, 0x10, 0x11, 0x02, 0x07, +/* 00015D90 */ 0x02, 0x00, 0x59, 0x00, 0x11, 0x59, 0x01, 0x0B, 0x1F, 0x02, 0x10, 0x10, 0x45, 0x0E, 0x10, 0x8E, +/* 00015DA0 */ 0x03, 0x03, 0x11, 0x6C, 0x10, 0x11, 0x03, 0x07, 0x05, 0x00, 0x59, 0x00, 0x11, 0x59, 0x01, 0x0E, +/* 00015DB0 */ 0x59, 0x02, 0x0C, 0x59, 0x03, 0x09, 0x59, 0x04, 0x0A, 0x1F, 0x05, 0x00, 0x10, 0x09, 0x02, 0x00, +/* 00015DC0 */ 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB6, 0x02, 0x69, 0xFE, 0x23, 0x03, 0xFE, 0xF8, 0x01, 0xFE, 0x25, +/* 00015DD0 */ 0xBF, 0x07, 0x08, 0x00, 0x00, 0x00, 0x18, 0x00, 0x4D, 0x00, 0x18, 0x00, 0x68, 0x00, 0x17, 0x00, +/* 00015DE0 */ 0x2C, 0x00, 0x21, 0x00, 0x4E, 0x00, 0x18, 0x00, 0x2F, 0x00, 0x23, 0x00, 0x78, 0x00, 0x00, 0x7F, +/* 00015DF0 */ 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x14, 0x04, 0x27, 0xA2, 0x41, 0xC1, 0x00, 0xFE, +/* 00015E00 */ 0x0B, 0x04, 0x4B, 0xFE, 0x0D, 0xB5, 0xFE, 0x0D, 0xB5, 0x01, 0xFE, 0x00, 0x90, 0x04, 0x04, 0xFE, +/* 00015E10 */ 0x0D, 0xB5, 0xFE, 0x8E, 0x09, 0xFE, 0x8E, 0x09, 0x11, 0x15, 0x23, 0x07, 0xE0, 0xCA, 0x03, 0x08, +/* 00015E20 */ 0x17, 0x17, 0x17, 0x17, 0x22, 0x08, 0x06, 0xFE, 0xE0, 0x03, 0x06, 0xFE, 0xA3, 0x03, 0x05, 0xFE, +/* 00015E30 */ 0xDF, 0x03, 0x05, 0xFE, 0x9C, 0x03, 0x06, 0xFE, 0x17, 0x04, 0x06, 0xFE, 0x18, 0x04, 0x06, 0xFE, +/* 00015E40 */ 0x19, 0x04, 0x06, 0xFE, 0x1A, 0x04, 0x06, 0xFE, 0x1B, 0x04, 0x01, 0x00, 0x06, 0xFE, 0x1C, 0x04, +/* 00015E50 */ 0x06, 0xFE, 0x1D, 0x04, 0x06, 0xFE, 0x1E, 0x04, 0x06, 0xFE, 0x37, 0x03, 0x01, 0x03, 0x06, 0xFE, +/* 00015E60 */ 0x1F, 0x04, 0x06, 0xFE, 0xA2, 0x03, 0x0B, 0xFE, 0xD2, 0x02, 0x4E, 0x18, 0x4E, 0x19, 0x4E, 0x1A, +/* 00015E70 */ 0x4E, 0x1B, 0x4E, 0x1C, 0x4E, 0x1D, 0x4E, 0x1E, 0x4E, 0x1F, 0x4E, 0x20, 0x4E, 0x21, 0x8E, 0x02, +/* 00015E80 */ 0x12, 0x23, 0x4A, 0x23, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x16, 0x1F, 0x02, 0x23, +/* 00015E90 */ 0x23, 0x45, 0x18, 0x23, 0xA8, 0x23, 0x14, 0x03, 0x00, 0x17, 0x23, 0x09, 0x1A, 0x00, 0x8E, 0x03, +/* 00015EA0 */ 0x36, 0x25, 0x4A, 0x25, 0x6C, 0x24, 0x25, 0x00, 0x07, 0x01, 0x00, 0x59, 0x00, 0x25, 0x1F, 0x01, +/* 00015EB0 */ 0x24, 0x24, 0x45, 0x23, 0x24, 0x09, 0x18, 0x00, 0x8E, 0x03, 0x24, 0x25, 0x6C, 0x24, 0x25, 0x01, +/* 00015EC0 */ 0x07, 0x02, 0x00, 0x59, 0x00, 0x25, 0x59, 0x01, 0x17, 0x1F, 0x02, 0x24, 0x24, 0x46, 0x23, 0x24, +/* 00015ED0 */ 0x45, 0x17, 0x23, 0x8E, 0x03, 0x36, 0x24, 0x4A, 0x24, 0x6C, 0x23, 0x24, 0x02, 0x07, 0x01, 0x00, +/* 00015EE0 */ 0x59, 0x00, 0x24, 0x1F, 0x01, 0x23, 0x23, 0x45, 0x19, 0x23, 0x45, 0x23, 0x19, 0x8E, 0x02, 0x02, +/* 00015EF0 */ 0x24, 0x4A, 0x24, 0x07, 0x06, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x17, 0x59, 0x02, 0x03, 0x59, +/* 00015F00 */ 0x03, 0x04, 0xCF, 0x25, 0x02, 0xA1, 0x00, 0x05, 0x25, 0xA1, 0x01, 0x06, 0x25, 0x59, 0x04, 0x25, +/* 00015F10 */ 0x59, 0x05, 0x05, 0x1F, 0x06, 0x24, 0x24, 0x76, 0x24, 0x23, 0x03, 0x8E, 0x02, 0x0C, 0x23, 0x4A, +/* 00015F20 */ 0x23, 0x07, 0x05, 0x00, 0x59, 0x00, 0x02, 0x8E, 0x03, 0x03, 0x24, 0x5E, 0x24, 0x24, 0x04, 0x59, +/* 00015F30 */ 0x01, 0x24, 0x59, 0x02, 0x18, 0x59, 0x03, 0x19, 0xCF, 0x24, 0x01, 0xA1, 0x00, 0x07, 0x24, 0x59, +/* 00015F40 */ 0x04, 0x24, 0x1F, 0x05, 0x23, 0x23, 0x45, 0x1A, 0x23, 0x5E, 0x23, 0x1A, 0x05, 0x76, 0x23, 0x15, +/* 00015F50 */ 0x06, 0x5E, 0x23, 0x1A, 0x07, 0x76, 0x23, 0x15, 0x08, 0x8E, 0x02, 0x02, 0x23, 0x4A, 0x23, 0x07, +/* 00015F60 */ 0x06, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x17, 0x59, 0x02, 0x08, 0x59, 0x03, 0x04, 0xCF, 0x24, +/* 00015F70 */ 0x03, 0xA1, 0x00, 0x09, 0x24, 0xA1, 0x01, 0x0A, 0x24, 0xA1, 0x02, 0x0B, 0x24, 0x59, 0x04, 0x24, +/* 00015F80 */ 0x59, 0x05, 0x09, 0x1F, 0x06, 0x23, 0x23, 0x45, 0x1B, 0x23, 0x76, 0x1B, 0x15, 0x09, 0x8E, 0x03, +/* 00015F90 */ 0x03, 0x23, 0x5E, 0x23, 0x23, 0x0A, 0x97, 0x23, 0x23, 0x1B, 0x76, 0x23, 0x15, 0x0B, 0x41, 0x23, +/* 00015FA0 */ 0x1B, 0x0B, 0x45, 0x1C, 0x23, 0x8E, 0x02, 0x02, 0x23, 0x4A, 0x23, 0x07, 0x06, 0x00, 0x59, 0x00, +/* 00015FB0 */ 0x02, 0x59, 0x01, 0x17, 0x59, 0x02, 0x0B, 0x59, 0x03, 0x04, 0xA8, 0x24, 0x59, 0x04, 0x24, 0xA8, +/* 00015FC0 */ 0x24, 0x59, 0x05, 0x24, 0x1F, 0x06, 0x23, 0x23, 0x45, 0x1D, 0x23, 0xA8, 0x23, 0x15, 0x03, 0x00, +/* 00015FD0 */ 0x1D, 0x23, 0x09, 0x2F, 0x00, 0x8E, 0x02, 0x10, 0x23, 0x4A, 0x23, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 00015FE0 */ 0x02, 0x59, 0x01, 0x1D, 0x1F, 0x02, 0x23, 0x23, 0x0F, 0x18, 0x00, 0x23, 0x8E, 0x03, 0x03, 0x24, +/* 00015FF0 */ 0x6C, 0x23, 0x24, 0x0C, 0x07, 0x02, 0x00, 0x59, 0x00, 0x24, 0x59, 0x01, 0x1D, 0x1F, 0x02, 0xFF, +/* 00016000 */ 0x23, 0x09, 0x20, 0x00, 0xA8, 0x23, 0x14, 0x03, 0x00, 0x1D, 0x23, 0x09, 0x16, 0x00, 0x0E, 0x12, +/* 00016010 */ 0x00, 0x1C, 0x8E, 0x03, 0x03, 0x24, 0x6C, 0x23, 0x24, 0x0D, 0x07, 0x01, 0x00, 0x59, 0x00, 0x24, +/* 00016020 */ 0x1F, 0x01, 0xFF, 0x23, 0x45, 0x1E, 0x0C, 0x0E, 0x36, 0x00, 0x1C, 0x8E, 0x03, 0x36, 0x24, 0x4A, +/* 00016030 */ 0x24, 0x6C, 0x23, 0x24, 0x0E, 0x07, 0x02, 0x00, 0x59, 0x00, 0x24, 0x59, 0x01, 0x1D, 0x1F, 0x02, +/* 00016040 */ 0x23, 0x23, 0x45, 0x1D, 0x23, 0x76, 0x1D, 0x15, 0x0F, 0x8E, 0x03, 0x03, 0x24, 0x6C, 0x23, 0x24, +/* 00016050 */ 0x10, 0x07, 0x02, 0x00, 0x59, 0x00, 0x24, 0x59, 0x01, 0x1D, 0x1F, 0x02, 0x23, 0x23, 0x45, 0x1E, +/* 00016060 */ 0x23, 0x8E, 0x02, 0x02, 0x23, 0x4A, 0x23, 0x07, 0x06, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x17, +/* 00016070 */ 0x59, 0x02, 0x0D, 0x59, 0x03, 0x04, 0xCF, 0x24, 0x03, 0xA1, 0x00, 0x0E, 0x24, 0xA1, 0x01, 0x0F, +/* 00016080 */ 0x24, 0xA1, 0x02, 0x10, 0x24, 0x59, 0x04, 0x24, 0x59, 0x05, 0x0F, 0x1F, 0x06, 0x23, 0x23, 0x45, +/* 00016090 */ 0x1F, 0x23, 0x0E, 0x14, 0x00, 0x1C, 0x76, 0x1F, 0x15, 0x11, 0x8E, 0x03, 0x03, 0x23, 0x5E, 0x23, +/* 000160A0 */ 0x23, 0x12, 0x97, 0x23, 0x23, 0x1F, 0x76, 0x23, 0x15, 0x13, 0xA8, 0x23, 0x45, 0x20, 0x23, 0xA8, +/* 000160B0 */ 0x23, 0x45, 0x21, 0x23, 0x0E, 0x09, 0x00, 0x1C, 0x45, 0x20, 0x1E, 0x45, 0x21, 0x1E, 0x09, 0x14, +/* 000160C0 */ 0x00, 0x45, 0x20, 0x0C, 0x14, 0x03, 0x00, 0x1B, 0x0A, 0x09, 0x06, 0x00, 0x45, 0x21, 0x0C, 0x09, +/* 000160D0 */ 0x03, 0x00, 0x45, 0x21, 0x11, 0x8E, 0x02, 0x15, 0x23, 0x4A, 0x23, 0x07, 0x05, 0x00, 0x59, 0x00, +/* 000160E0 */ 0x02, 0x59, 0x01, 0x15, 0x59, 0x02, 0x17, 0x59, 0x03, 0x20, 0x59, 0x04, 0x21, 0x1F, 0x05, 0xFF, +/* 000160F0 */ 0x23, 0x45, 0x23, 0x15, 0x8E, 0x02, 0x02, 0x24, 0x4A, 0x24, 0x07, 0x06, 0x00, 0x59, 0x00, 0x02, +/* 00016100 */ 0x59, 0x01, 0x17, 0x59, 0x02, 0x12, 0x59, 0x03, 0x13, 0xA8, 0x25, 0x59, 0x04, 0x25, 0x59, 0x05, +/* 00016110 */ 0x14, 0x1F, 0x06, 0x24, 0x24, 0x76, 0x24, 0x23, 0x14, 0x76, 0x14, 0x15, 0x15, 0x8E, 0x03, 0x03, +/* 00016120 */ 0x24, 0x6C, 0x23, 0x24, 0x16, 0x07, 0x02, 0x00, 0x59, 0x00, 0x24, 0x59, 0x01, 0x15, 0x1F, 0x02, +/* 00016130 */ 0xFF, 0x23, 0x45, 0x00, 0x15, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x69, 0xFE, 0x21, 0x03, +/* 00016140 */ 0x69, 0xFE, 0x0E, 0x02, 0xFE, 0xF1, 0x01, 0xFE, 0x0D, 0x02, 0xFE, 0x0D, 0x02, 0xFE, 0x19, 0x02, +/* 00016150 */ 0xFE, 0x49, 0x02, 0xFE, 0x18, 0x04, 0xFE, 0x25, 0x02, 0xFE, 0x43, 0x02, 0xFE, 0xB7, 0x02, 0xFE, +/* 00016160 */ 0xB8, 0x02, 0xFE, 0x7B, 0x01, 0xFE, 0x40, 0x02, 0xFE, 0xFB, 0x01, 0xFE, 0x41, 0x02, 0xFE, 0x26, +/* 00016170 */ 0x02, 0xFE, 0x42, 0x02, 0xFE, 0x4A, 0x02, 0xFE, 0x20, 0x04, 0xFE, 0xF9, 0x01, 0xFE, 0x3B, 0xB5, +/* 00016180 */ 0x28, 0x14, 0x00, 0x00, 0x00, 0x16, 0x00, 0x46, 0x00, 0x3F, 0x00, 0x58, 0x00, 0x17, 0x00, 0x24, +/* 00016190 */ 0x00, 0x31, 0x00, 0x74, 0x00, 0x2E, 0x00, 0x62, 0x00, 0x08, 0x00, 0x22, 0x00, 0x08, 0x00, 0x28, +/* 000161A0 */ 0x00, 0x31, 0x00, 0x70, 0x00, 0x04, 0x00, 0x1E, 0x00, 0x10, 0x00, 0x43, 0x00, 0x07, 0x00, 0x37, +/* 000161B0 */ 0x00, 0x26, 0x00, 0x5B, 0x00, 0x21, 0x00, 0x55, 0x00, 0x18, 0x00, 0x40, 0x00, 0x0E, 0x00, 0x3D, +/* 000161C0 */ 0x00, 0x12, 0x00, 0x40, 0x00, 0x03, 0x00, 0x1D, 0x00, 0x04, 0x00, 0x23, 0x00, 0x1A, 0x00, 0x34, +/* 000161D0 */ 0x00, 0x04, 0x00, 0x28, 0x00, 0x18, 0x00, 0x48, 0x00, 0x31, 0x00, 0x79, 0x00, 0x04, 0x00, 0x23, +/* 000161E0 */ 0x00, 0x04, 0x00, 0x36, 0x00, 0x10, 0x00, 0x6C, 0x00, 0x05, 0x00, 0x11, 0x00, 0x05, 0x00, 0x19, +/* 000161F0 */ 0x00, 0x04, 0x00, 0x23, 0x00, 0x03, 0x00, 0x27, 0x00, 0x06, 0x00, 0x3C, 0x00, 0x03, 0x00, 0x21, +/* 00016200 */ 0x00, 0x08, 0x00, 0x2F, 0x00, 0x06, 0x00, 0x3E, 0x00, 0x03, 0x00, 0x3E, 0x00, 0x1C, 0x00, 0x51, +/* 00016210 */ 0x00, 0x28, 0x00, 0x5D, 0x00, 0x04, 0x00, 0x7C, 0x00, 0x15, 0x00, 0x2D, 0x00, 0x08, 0x00, 0x13, +/* 00016220 */ 0x00, 0x00, 0x7E, 0x5D, 0x00, 0xC1, 0x13, 0x1A, 0x4B, 0x00, 0xFE, 0x56, 0x03, 0x16, 0xA0, 0x41, +/* 00016230 */ 0xD1, 0x00, 0x42, 0xFE, 0x13, 0x92, 0xFE, 0x13, 0x92, 0x07, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFE, +/* 00016240 */ 0x13, 0x92, 0xFE, 0x12, 0x22, 0xFE, 0x12, 0x22, 0x05, 0xFE, 0xE5, 0x03, 0xFE, 0xE6, 0x03, 0xFE, +/* 00016250 */ 0xE7, 0x03, 0xFE, 0x4B, 0x02, 0xFE, 0x4F, 0x02, 0x0A, 0x18, 0x1D, 0x09, 0xAD, 0xAB, 0x02, 0x07, +/* 00016260 */ 0x1B, 0x1B, 0x1B, 0x1B, 0x05, 0x1A, 0x1B, 0x1C, 0x06, 0xFE, 0x27, 0x03, 0x06, 0xFE, 0xE8, 0x03, +/* 00016270 */ 0x05, 0xFE, 0xE9, 0x03, 0x08, 0x07, 0x05, 0xFE, 0xEA, 0x03, 0x05, 0xFE, 0xEB, 0x03, 0x05, 0xFE, +/* 00016280 */ 0x34, 0x03, 0x06, 0xFE, 0x38, 0x03, 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, 0x2B, 0x03, 0x0B, 0x06, +/* 00016290 */ 0xFE, 0x2C, 0x03, 0x0C, 0x06, 0xFE, 0x2D, 0x03, 0x06, 0xFE, 0xEC, 0x03, 0x06, 0xFE, 0xED, 0x03, +/* 000162A0 */ 0x06, 0xFE, 0xEE, 0x03, 0x05, 0xFE, 0xEF, 0x03, 0x05, 0xFE, 0xF0, 0x03, 0x06, 0xFE, 0xF1, 0x03, +/* 000162B0 */ 0x06, 0xFE, 0x77, 0x03, 0xFE, 0x5C, 0x02, 0x4E, 0x18, 0x4E, 0x19, 0x4E, 0x1D, 0x96, 0x02, 0x1D, +/* 000162C0 */ 0x4E, 0x1D, 0x96, 0x03, 0x1D, 0x4E, 0x1D, 0x96, 0x04, 0x1D, 0x4E, 0x1D, 0x96, 0x05, 0x1D, 0x4E, +/* 000162D0 */ 0x1D, 0x96, 0x06, 0x1D, 0x8E, 0x02, 0x32, 0x1D, 0x15, 0x03, 0x00, 0x1D, 0x02, 0x09, 0x11, 0x00, +/* 000162E0 */ 0x8E, 0x02, 0x32, 0x1D, 0x15, 0x03, 0x00, 0x1D, 0x03, 0x09, 0x05, 0x00, 0xA8, 0x00, 0x09, 0x20, +/* 000162F0 */ 0x02, 0xD6, 0x00, 0x1D, 0x96, 0x02, 0x1D, 0xA8, 0x1D, 0x96, 0x03, 0x1D, 0x8E, 0x02, 0x03, 0x1E, +/* 00016300 */ 0x6C, 0x1D, 0x1E, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x1E, 0x8E, 0x01, 0x06, 0x1F, 0x4A, 0x1F, +/* 00016310 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x05, 0x59, 0x01, 0x04, 0xD6, 0x01, 0x20, 0x59, 0x02, 0x20, 0x1F, +/* 00016320 */ 0x03, 0x1F, 0x1F, 0x59, 0x01, 0x1F, 0x8E, 0x02, 0x03, 0x1F, 0x5E, 0x1F, 0x1F, 0x01, 0x5E, 0x1F, +/* 00016330 */ 0x1F, 0x02, 0x59, 0x02, 0x1F, 0x1F, 0x03, 0xFF, 0x1D, 0x8E, 0x02, 0x32, 0x1D, 0x14, 0x03, 0x00, +/* 00016340 */ 0x1D, 0x03, 0x09, 0x05, 0x00, 0xA8, 0x00, 0x09, 0xC7, 0x01, 0xCD, 0x1D, 0x96, 0x04, 0x1D, 0x8E, +/* 00016350 */ 0x02, 0x23, 0x1D, 0x07, 0x03, 0x00, 0x59, 0x00, 0x05, 0x59, 0x01, 0x07, 0xD6, 0x02, 0x1E, 0x59, +/* 00016360 */ 0x02, 0x1E, 0x1F, 0x03, 0x1D, 0x1D, 0x96, 0x05, 0x1D, 0x8E, 0x01, 0x06, 0x1D, 0x4A, 0x1D, 0x07, +/* 00016370 */ 0x03, 0x00, 0x59, 0x00, 0x05, 0x59, 0x01, 0x08, 0xD6, 0x03, 0x1E, 0x59, 0x02, 0x1E, 0x1F, 0x03, +/* 00016380 */ 0x1D, 0x1D, 0x96, 0x06, 0x1D, 0x8E, 0x01, 0x06, 0x1D, 0x4A, 0x1D, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 00016390 */ 0x05, 0x59, 0x01, 0x09, 0xD6, 0x04, 0x1E, 0x59, 0x02, 0x1E, 0x1F, 0x03, 0x1D, 0x1D, 0x45, 0x18, +/* 000163A0 */ 0x1D, 0x8E, 0x02, 0x36, 0x1E, 0x4A, 0x1E, 0x6C, 0x1D, 0x1E, 0x03, 0x07, 0x04, 0x00, 0x59, 0x00, +/* 000163B0 */ 0x1E, 0x92, 0x05, 0x1F, 0x59, 0x01, 0x1F, 0x59, 0x02, 0x0A, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 000163C0 */ 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x7A, 0x18, 0x1F, 0x04, 0x7A, 0x0D, 0x1F, 0x05, 0x7A, +/* 000163D0 */ 0x0F, 0x1F, 0x06, 0x7A, 0x0D, 0x1F, 0x07, 0x59, 0x03, 0x1F, 0x1F, 0x04, 0xFF, 0x1D, 0x8E, 0x02, +/* 000163E0 */ 0x36, 0x1E, 0x4A, 0x1E, 0x6C, 0x1D, 0x1E, 0x08, 0x07, 0x04, 0x00, 0x59, 0x00, 0x1E, 0x92, 0x05, +/* 000163F0 */ 0x1F, 0x59, 0x01, 0x1F, 0x59, 0x02, 0x11, 0xCE, 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, +/* 00016400 */ 0x1F, 0x00, 0x00, 0x00, 0x92, 0x04, 0x20, 0x7A, 0x20, 0x1F, 0x09, 0x7A, 0x0F, 0x1F, 0x0A, 0x7A, +/* 00016410 */ 0x0F, 0x1F, 0x0B, 0x7A, 0x0F, 0x1F, 0x0C, 0x59, 0x03, 0x1F, 0x1F, 0x04, 0xFF, 0x1D, 0x8E, 0x02, +/* 00016420 */ 0x36, 0x1E, 0x4A, 0x1E, 0x6C, 0x1D, 0x1E, 0x0D, 0x07, 0x04, 0x00, 0x59, 0x00, 0x1E, 0x92, 0x04, +/* 00016430 */ 0x1F, 0x59, 0x01, 0x1F, 0x59, 0x02, 0x12, 0xCE, 0x30, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, +/* 00016440 */ 0x1F, 0x00, 0x00, 0x00, 0x92, 0x05, 0x20, 0x7A, 0x20, 0x1F, 0x0E, 0x7A, 0x0D, 0x1F, 0x0F, 0x7A, +/* 00016450 */ 0x0F, 0x1F, 0x10, 0x7A, 0x0D, 0x1F, 0x11, 0x59, 0x03, 0x1F, 0x1F, 0x04, 0xFF, 0x1D, 0x8E, 0x02, +/* 00016460 */ 0x36, 0x1E, 0x4A, 0x1E, 0x6C, 0x1D, 0x1E, 0x12, 0x07, 0x04, 0x00, 0x59, 0x00, 0x1E, 0x92, 0x04, +/* 00016470 */ 0x1F, 0x59, 0x01, 0x1F, 0x59, 0x02, 0x13, 0xCE, 0x48, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, +/* 00016480 */ 0x1F, 0x00, 0x00, 0x00, 0x8E, 0x01, 0x06, 0x20, 0x4A, 0x20, 0x07, 0x03, 0x00, 0x59, 0x00, 0x05, +/* 00016490 */ 0x59, 0x01, 0x14, 0xD6, 0x05, 0x21, 0x59, 0x02, 0x21, 0x1F, 0x03, 0x20, 0x20, 0x7A, 0x20, 0x1F, +/* 000164A0 */ 0x13, 0x7A, 0x0D, 0x1F, 0x14, 0x7A, 0x0F, 0x1F, 0x15, 0x7A, 0x0D, 0x1F, 0x16, 0x59, 0x03, 0x1F, +/* 000164B0 */ 0x1F, 0x04, 0xFF, 0x1D, 0x8E, 0x01, 0x06, 0x1D, 0x4A, 0x1D, 0x07, 0x03, 0x00, 0x59, 0x00, 0x05, +/* 000164C0 */ 0x59, 0x01, 0x15, 0xD6, 0x06, 0x1E, 0x59, 0x02, 0x1E, 0x1F, 0x03, 0x1D, 0x1D, 0x45, 0x19, 0x1D, +/* 000164D0 */ 0x8E, 0x02, 0x36, 0x1E, 0x4A, 0x1E, 0x6C, 0x1D, 0x1E, 0x17, 0x07, 0x04, 0x00, 0x59, 0x00, 0x1E, +/* 000164E0 */ 0x92, 0x04, 0x1F, 0x59, 0x01, 0x1F, 0x59, 0x02, 0x16, 0xCE, 0x60, 0x00, 0x00, 0x00, 0x04, 0x00, +/* 000164F0 */ 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x7A, 0x19, 0x1F, 0x18, 0x7A, 0x0F, 0x1F, 0x19, 0x7A, 0x0D, +/* 00016500 */ 0x1F, 0x1A, 0x59, 0x03, 0x1F, 0x1F, 0x04, 0xFF, 0x1D, 0x92, 0x05, 0x00, 0x09, 0x02, 0x00, 0xA8, +/* 00016510 */ 0x00, 0x24, 0x00, 0x05, 0x74, 0x00, 0x60, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, +/* 00016520 */ 0x00, 0x00, 0x98, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x48, 0x00, +/* 00016530 */ 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, +/* 00016540 */ 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x03, 0x04, +/* 00016550 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, +/* 00016560 */ 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, +/* 00016570 */ 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, +/* 00016580 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, +/* 00016590 */ 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0xFE, 0x04, +/* 000165A0 */ 0x02, 0xFE, 0x2F, 0x02, 0xFE, 0x2E, 0x02, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, +/* 000165B0 */ 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, +/* 000165C0 */ 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, +/* 000165D0 */ 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x94, 0x01, +/* 000165E0 */ 0xFE, 0x95, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x98, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, +/* 000165F0 */ 0x29, 0x92, 0x13, 0x1D, 0x00, 0x00, 0x00, 0x18, 0x00, 0x40, 0x00, 0x05, 0x00, 0x1B, 0x00, 0x06, +/* 00016600 */ 0x00, 0x88, 0x0A, 0x05, 0x00, 0x73, 0x00, 0x3D, 0x00, 0x89, 0x05, 0x0C, 0x00, 0x29, 0x00, 0x05, +/* 00016610 */ 0x00, 0x1B, 0x00, 0x05, 0x00, 0x27, 0x00, 0x1A, 0x00, 0x43, 0x03, 0x1C, 0x00, 0x82, 0x02, 0x1C, +/* 00016620 */ 0x00, 0x15, 0x01, 0x3D, 0x00, 0xCA, 0x00, 0x40, 0x00, 0xC1, 0x00, 0x40, 0x00, 0xC0, 0x00, 0x56, +/* 00016630 */ 0x00, 0xBF, 0x04, 0x1C, 0x00, 0x17, 0x02, 0x39, 0x00, 0xA1, 0x00, 0x08, 0x00, 0x15, 0x00, 0x00, +/* 00016640 */ 0x67, 0x6D, 0x01, 0x00, 0xA5, 0x6B, 0x01, 0x00, 0x24, 0x6A, 0x01, 0x00, 0x02, 0x69, 0x01, 0x00, +/* 00016650 */ 0x75, 0x68, 0x01, 0x00, 0x3D, 0x67, 0x01, 0x00, 0x5C, 0x66, 0x01, 0x00, 0x7F, 0x5C, 0x00, 0xC1, +/* 00016660 */ 0x03, 0x10, 0x03, 0x00, 0xFE, 0xF9, 0x03, 0x3D, 0xA0, 0x41, 0xD1, 0x00, 0x49, 0xFE, 0x8C, 0xB1, +/* 00016670 */ 0xFE, 0x8C, 0xB1, 0x09, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFE, 0x8C, 0xB1, 0xFE, 0xD7, 0x01, 0xFE, +/* 00016680 */ 0xD7, 0x01, 0x05, 0x05, 0x08, 0x04, 0x23, 0x22, 0x03, 0x01, 0x05, 0x05, 0x05, 0x05, 0x07, 0x06, +/* 00016690 */ 0xFE, 0x94, 0x03, 0x05, 0xFE, 0x09, 0x04, 0x06, 0xFE, 0x2E, 0x03, 0x71, 0x58, 0x05, 0x4E, 0x06, +/* 000166A0 */ 0x2A, 0x08, 0x05, 0x15, 0x03, 0x00, 0x08, 0x02, 0x09, 0x18, 0x00, 0x8E, 0x03, 0x03, 0x09, 0x6C, +/* 000166B0 */ 0x08, 0x09, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x09, 0x59, 0x01, 0x03, 0x59, 0x02, 0x04, 0x1F, +/* 000166C0 */ 0x03, 0xFF, 0x08, 0x8E, 0x03, 0x03, 0x09, 0x6C, 0x08, 0x09, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 000166D0 */ 0x09, 0x59, 0x01, 0x05, 0x1F, 0x02, 0x08, 0x08, 0x45, 0x06, 0x08, 0xA8, 0x08, 0x14, 0x08, 0x00, +/* 000166E0 */ 0x06, 0x08, 0x5E, 0x08, 0x06, 0x02, 0x0F, 0x18, 0x00, 0x08, 0x8E, 0x03, 0x03, 0x09, 0x6C, 0x08, +/* 000166F0 */ 0x09, 0x03, 0x07, 0x03, 0x00, 0x59, 0x00, 0x09, 0x59, 0x01, 0x03, 0x59, 0x02, 0x04, 0x1F, 0x03, +/* 00016700 */ 0xFF, 0x08, 0x5E, 0x00, 0x06, 0x04, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB6, 0x02, +/* 00016710 */ 0xFE, 0x05, 0x02, 0xFE, 0x06, 0x04, 0xFE, 0xB6, 0x02, 0xFE, 0x08, 0x04, 0xFE, 0xA6, 0xB1, 0x07, +/* 00016720 */ 0x04, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x30, 0x00, 0x18, 0x00, 0x65, 0x00, 0x18, 0x00, 0x41, 0x00, +/* 00016730 */ 0x0F, 0x00, 0x57, 0x00, 0x18, 0x00, 0x65, 0x00, 0x09, 0x00, 0x2A, 0x00, 0x00, 0x7F, 0x5C, 0x00, +/* 00016740 */ 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0xDE, 0x03, 0x51, 0xA0, 0x41, 0xC3, 0x00, 0xFE, 0xEE, 0x03, +/* 00016750 */ 0x48, 0xFE, 0x22, 0xAD, 0xFE, 0x22, 0xAD, 0x09, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFE, 0x22, 0xAD, +/* 00016760 */ 0xFE, 0x4A, 0x03, 0xFE, 0x4A, 0x03, 0x06, 0x0D, 0x11, 0x04, 0x33, 0x31, 0x03, 0x02, 0x04, 0x04, +/* 00016770 */ 0x04, 0x04, 0x10, 0x06, 0xFE, 0x94, 0x03, 0x05, 0xFE, 0x0A, 0x04, 0x06, 0xFE, 0x2E, 0x03, 0x06, +/* 00016780 */ 0xFE, 0xD7, 0x03, 0x06, 0xFE, 0xF2, 0x03, 0x06, 0xFE, 0xFE, 0x03, 0x06, 0xFE, 0x03, 0x04, 0x06, +/* 00016790 */ 0xFE, 0x05, 0x04, 0x06, 0xFE, 0xF8, 0x03, 0x06, 0xFE, 0xF9, 0x03, 0x08, 0xA7, 0x58, 0x0D, 0x4E, +/* 000167A0 */ 0x0E, 0x4E, 0x0F, 0x2A, 0x11, 0x0D, 0x15, 0x03, 0x00, 0x11, 0x02, 0x09, 0x18, 0x00, 0x8E, 0x03, +/* 000167B0 */ 0x03, 0x12, 0x6C, 0x11, 0x12, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x12, 0x59, 0x01, 0x03, 0x59, +/* 000167C0 */ 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x11, 0x8E, 0x03, 0x03, 0x12, 0x6C, 0x11, 0x12, 0x01, 0x07, 0x02, +/* 000167D0 */ 0x00, 0x59, 0x00, 0x12, 0x59, 0x01, 0x0D, 0x1F, 0x02, 0x11, 0x11, 0x45, 0x0E, 0x11, 0xA8, 0x11, +/* 000167E0 */ 0x14, 0x08, 0x00, 0x0E, 0x11, 0x5E, 0x11, 0x0E, 0x02, 0x0F, 0x18, 0x00, 0x11, 0x8E, 0x03, 0x03, +/* 000167F0 */ 0x12, 0x6C, 0x11, 0x12, 0x03, 0x07, 0x03, 0x00, 0x59, 0x00, 0x12, 0x59, 0x01, 0x03, 0x59, 0x02, +/* 00016800 */ 0x04, 0x1F, 0x03, 0xFF, 0x11, 0xCF, 0x11, 0x07, 0xA1, 0x00, 0x05, 0x11, 0xA1, 0x01, 0x06, 0x11, +/* 00016810 */ 0xA1, 0x02, 0x07, 0x11, 0xA1, 0x03, 0x08, 0x11, 0xA1, 0x04, 0x09, 0x11, 0xA1, 0x05, 0x0A, 0x11, +/* 00016820 */ 0xA1, 0x06, 0x0B, 0x11, 0x45, 0x0F, 0x11, 0x8E, 0x02, 0x17, 0x11, 0x4A, 0x11, 0x07, 0x03, 0x00, +/* 00016830 */ 0x59, 0x00, 0x0C, 0x59, 0x01, 0x0F, 0x59, 0x02, 0x0E, 0x1F, 0x03, 0x00, 0x11, 0x09, 0x02, 0x00, +/* 00016840 */ 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB6, 0x02, 0xFE, 0x05, 0x02, 0xFE, 0x06, 0x04, 0xFE, 0xB6, 0x02, +/* 00016850 */ 0xFE, 0x4F, 0xAD, 0x08, 0x06, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x34, 0x00, 0x18, 0x00, 0x74, 0x00, +/* 00016860 */ 0x18, 0x00, 0x45, 0x00, 0x0F, 0x00, 0x5B, 0x00, 0x18, 0x00, 0x75, 0x00, 0x22, 0x00, 0x1E, 0x01, +/* 00016870 */ 0x1B, 0x00, 0x41, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0xC6, 0x03, +/* 00016880 */ 0x5A, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x38, 0x03, 0x47, 0xFE, 0x8A, 0xA9, 0xFE, 0x8A, 0xA9, 0x01, +/* 00016890 */ 0xFE, 0x00, 0x90, 0x03, 0x02, 0xFE, 0x8A, 0xA9, 0xB8, 0xB8, 0x05, 0x03, 0x06, 0x08, 0x17, 0x16, +/* 000168A0 */ 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x05, 0x08, 0x45, 0x15, 0x05, 0x00, 0x04, 0x02, 0xA8, 0x06, +/* 000168B0 */ 0x45, 0x04, 0x06, 0x8E, 0x02, 0x16, 0x06, 0x4A, 0x06, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x8E, +/* 000168C0 */ 0x03, 0x03, 0x07, 0x5E, 0x07, 0x07, 0x00, 0x59, 0x01, 0x07, 0x8E, 0x02, 0x12, 0x07, 0x4A, 0x07, +/* 000168D0 */ 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x03, 0x1F, 0x02, 0x07, 0x07, 0x59, 0x02, 0x07, +/* 000168E0 */ 0x59, 0x03, 0x04, 0x1F, 0x04, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xF0, +/* 000168F0 */ 0x01, 0xFE, 0xAF, 0xA9, 0x03, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x23, 0x00, 0x39, 0x00, 0x6F, +/* 00016900 */ 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0xB9, 0x03, 0x4E, 0xA2, 0x41, +/* 00016910 */ 0xC3, 0x00, 0xFE, 0xF1, 0x03, 0x46, 0xFE, 0xFC, 0xA6, 0xFE, 0xFC, 0xA6, 0x09, 0xFE, 0x00, 0x90, +/* 00016920 */ 0x03, 0x03, 0xFE, 0xFC, 0xA6, 0xFE, 0x30, 0x02, 0xFE, 0x30, 0x02, 0x08, 0x07, 0x0C, 0x09, 0x35, +/* 00016930 */ 0x34, 0x03, 0x02, 0x05, 0x05, 0x05, 0x05, 0x0B, 0x06, 0xFE, 0x94, 0x03, 0x05, 0xFE, 0x09, 0x04, +/* 00016940 */ 0x06, 0xFE, 0x2E, 0x03, 0x08, 0x0C, 0xAD, 0x58, 0x09, 0x4E, 0x0A, 0x2A, 0x0C, 0x09, 0x15, 0x03, +/* 00016950 */ 0x00, 0x0C, 0x02, 0x09, 0x18, 0x00, 0x8E, 0x03, 0x03, 0x0D, 0x6C, 0x0C, 0x0D, 0x00, 0x07, 0x03, +/* 00016960 */ 0x00, 0x59, 0x00, 0x0D, 0x59, 0x01, 0x03, 0x59, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x0C, 0x8E, 0x03, +/* 00016970 */ 0x03, 0x0D, 0x6C, 0x0C, 0x0D, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0D, 0x59, 0x01, 0x09, 0x1F, +/* 00016980 */ 0x02, 0x0C, 0x0C, 0x45, 0x0A, 0x0C, 0xA8, 0x0C, 0x14, 0x08, 0x00, 0x0A, 0x0C, 0x5E, 0x0C, 0x0A, +/* 00016990 */ 0x02, 0x0F, 0x18, 0x00, 0x0C, 0x8E, 0x03, 0x03, 0x0D, 0x6C, 0x0C, 0x0D, 0x03, 0x07, 0x03, 0x00, +/* 000169A0 */ 0x59, 0x00, 0x0D, 0x59, 0x01, 0x03, 0x59, 0x02, 0x04, 0x1F, 0x03, 0xFF, 0x0C, 0x8E, 0x03, 0x03, +/* 000169B0 */ 0x0D, 0x6C, 0x0C, 0x0D, 0x04, 0x07, 0x05, 0x00, 0x59, 0x00, 0x0D, 0x8E, 0x03, 0x0C, 0x0E, 0x07, +/* 000169C0 */ 0x02, 0x00, 0x59, 0x00, 0x05, 0x59, 0x01, 0x07, 0x1F, 0x02, 0x0E, 0x0E, 0x59, 0x01, 0x0E, 0x8E, +/* 000169D0 */ 0x03, 0x0C, 0x0E, 0x07, 0x02, 0x00, 0x59, 0x00, 0x05, 0x59, 0x01, 0x08, 0x1F, 0x02, 0x0E, 0x0E, +/* 000169E0 */ 0x59, 0x02, 0x0E, 0x59, 0x03, 0x0A, 0x59, 0x04, 0x06, 0x1F, 0x05, 0x00, 0x0C, 0x09, 0x02, 0x00, +/* 000169F0 */ 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB6, 0x02, 0xFE, 0x05, 0x02, 0xFE, 0x06, 0x04, 0xFE, 0xB6, 0x02, +/* 00016A00 */ 0xFE, 0x01, 0x02, 0xFE, 0x21, 0xA7, 0x07, 0x04, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x30, 0x00, 0x18, +/* 00016A10 */ 0x00, 0x65, 0x00, 0x18, 0x00, 0x41, 0x00, 0x0F, 0x00, 0x57, 0x00, 0x18, 0x00, 0x65, 0x00, 0x45, +/* 00016A20 */ 0x00, 0x78, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0xA6, 0x03, 0x3C, +/* 00016A30 */ 0xA2, 0x41, 0xD1, 0x00, 0x45, 0xFE, 0xA7, 0xA3, 0xFE, 0xA7, 0xA3, 0x01, 0xFE, 0x00, 0x90, 0x03, +/* 00016A40 */ 0x01, 0xFE, 0xA7, 0xA3, 0xFE, 0x03, 0x03, 0xFE, 0x03, 0x03, 0x0B, 0x03, 0x0A, 0x05, 0x53, 0x4A, +/* 00016A50 */ 0x03, 0x07, 0x06, 0x06, 0x06, 0x06, 0x09, 0x08, 0xFE, 0x03, 0x01, 0x01, 0x5D, 0x01, 0x05, 0x4E, +/* 00016A60 */ 0x06, 0x4E, 0x07, 0x4E, 0x08, 0x15, 0x05, 0x00, 0x03, 0x02, 0xA8, 0x0A, 0x45, 0x03, 0x0A, 0x15, +/* 00016A70 */ 0x05, 0x00, 0x04, 0x02, 0xA8, 0x0A, 0x45, 0x04, 0x0A, 0x4E, 0x06, 0x4E, 0x07, 0x4E, 0x08, 0xA8, +/* 00016A80 */ 0x0A, 0x14, 0x03, 0x00, 0x05, 0x0A, 0x09, 0x0C, 0x00, 0x8E, 0x01, 0x05, 0x0B, 0x4A, 0x0B, 0x45, +/* 00016A90 */ 0x0A, 0x0B, 0x09, 0x03, 0x00, 0x46, 0x0A, 0x05, 0x45, 0x06, 0x0A, 0x8E, 0x02, 0x07, 0x0A, 0x4A, +/* 00016AA0 */ 0x0A, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x06, 0x8E, 0x01, 0x04, 0x0B, 0x4A, 0x0B, +/* 00016AB0 */ 0x59, 0x02, 0x0B, 0x1F, 0x03, 0x0A, 0x0A, 0x45, 0x07, 0x0A, 0x8E, 0x03, 0x03, 0x0B, 0x6C, 0x0A, +/* 00016AC0 */ 0x0B, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0B, 0x59, 0x01, 0x07, 0x1F, 0x02, 0x0A, 0x0A, 0x45, +/* 00016AD0 */ 0x08, 0x0A, 0xA8, 0x0A, 0x14, 0x03, 0x00, 0x08, 0x0A, 0x09, 0x2F, 0x00, 0x8E, 0x03, 0x36, 0x0B, +/* 00016AE0 */ 0x4A, 0x0B, 0x6C, 0x0A, 0x0B, 0x01, 0x07, 0x01, 0x00, 0x59, 0x00, 0x0B, 0x1F, 0x01, 0x0A, 0x0A, +/* 00016AF0 */ 0x45, 0x08, 0x0A, 0x8E, 0x03, 0x03, 0x0B, 0x6C, 0x0A, 0x0B, 0x02, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 00016B00 */ 0x0B, 0x59, 0x01, 0x07, 0x59, 0x02, 0x08, 0x1F, 0x03, 0xFF, 0x0A, 0x8E, 0x01, 0x02, 0x0A, 0x4A, +/* 00016B10 */ 0x0A, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x08, 0x59, 0x02, 0x03, 0x59, 0x03, 0x04, +/* 00016B20 */ 0x1F, 0x04, 0xFF, 0x0A, 0x45, 0x0A, 0x08, 0x8E, 0x03, 0x36, 0x0C, 0x4A, 0x0C, 0x6C, 0x0B, 0x0C, +/* 00016B30 */ 0x03, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0C, 0x8E, 0x01, 0x06, 0x0D, 0x4A, 0x0D, 0x59, 0x01, 0x0D, +/* 00016B40 */ 0x59, 0x02, 0x07, 0x1F, 0x03, 0x0B, 0x0B, 0x76, 0x0B, 0x0A, 0x04, 0x5E, 0x0A, 0x08, 0x05, 0x82, +/* 00016B50 */ 0x0A, 0x0A, 0x06, 0x01, 0x45, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x05, +/* 00016B60 */ 0x02, 0x69, 0xFE, 0x06, 0x02, 0x54, 0xFE, 0x08, 0x04, 0xFE, 0x08, 0x04, 0xFE, 0xB1, 0xA3, 0x0D, +/* 00016B70 */ 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x10, 0x00, 0x23, 0x00, 0x1C, 0x00, 0x50, 0x00, +/* 00016B80 */ 0x1F, 0x00, 0x8E, 0x00, 0x18, 0x00, 0x43, 0x00, 0x0A, 0x00, 0x32, 0x00, 0x17, 0x00, 0x2B, 0x00, +/* 00016B90 */ 0x18, 0x00, 0x4D, 0x00, 0x19, 0x00, 0x66, 0x00, 0x27, 0x00, 0x43, 0x00, 0x09, 0x00, 0x33, 0x00, +/* 00016BA0 */ 0x08, 0x00, 0x19, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x85, 0x03, +/* 00016BB0 */ 0x5E, 0xA2, 0x41, 0xC3, 0x00, 0xFE, 0x07, 0x04, 0x44, 0xFE, 0xD5, 0x9D, 0xFE, 0xD5, 0x9D, 0x09, +/* 00016BC0 */ 0xFE, 0x00, 0x90, 0x04, 0x02, 0xFE, 0xD5, 0x9D, 0xFE, 0x94, 0x04, 0xFE, 0x94, 0x04, 0x0A, 0x06, +/* 00016BD0 */ 0x0E, 0x06, 0x63, 0x5C, 0x03, 0x05, 0x04, 0x04, 0x04, 0x04, 0x0D, 0x08, 0x07, 0x05, 0xFE, 0xE9, +/* 00016BE0 */ 0x03, 0x0B, 0xFE, 0x35, 0x01, 0x58, 0x09, 0x4E, 0x0A, 0x4E, 0x0B, 0x4E, 0x0C, 0x15, 0x05, 0x00, +/* 00016BF0 */ 0x07, 0x02, 0xA8, 0x0E, 0x45, 0x07, 0x0E, 0x15, 0x05, 0x00, 0x08, 0x02, 0xA8, 0x0E, 0x45, 0x08, +/* 00016C00 */ 0x0E, 0x4E, 0x0A, 0x4E, 0x0B, 0x4E, 0x0C, 0xA8, 0x0E, 0x14, 0x08, 0x00, 0x09, 0x0E, 0x14, 0x03, +/* 00016C10 */ 0x00, 0x09, 0x03, 0x09, 0x15, 0x00, 0x8E, 0x03, 0x03, 0x0F, 0x6C, 0x0E, 0x0F, 0x00, 0x07, 0x02, +/* 00016C20 */ 0x00, 0x59, 0x00, 0x0F, 0x59, 0x01, 0x04, 0x1F, 0x02, 0xFF, 0x0E, 0x8E, 0x03, 0x0C, 0x0E, 0x07, +/* 00016C30 */ 0x02, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x09, 0x1F, 0x02, 0x0E, 0x0E, 0x45, 0x0A, 0x0E, 0x8E, +/* 00016C40 */ 0x03, 0x0C, 0x0E, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x06, 0x1F, 0x02, 0x0E, 0x0E, +/* 00016C50 */ 0x45, 0x0B, 0x0E, 0xA8, 0x0E, 0x45, 0x0C, 0x0E, 0xA8, 0x0E, 0x14, 0x03, 0x00, 0x07, 0x0E, 0x09, +/* 00016C60 */ 0x63, 0x00, 0xA8, 0x0E, 0x14, 0x03, 0x00, 0x08, 0x0E, 0x09, 0x59, 0x00, 0x8E, 0x01, 0x03, 0x0E, +/* 00016C70 */ 0x4A, 0x0E, 0xA8, 0x0F, 0x14, 0x03, 0x00, 0x0E, 0x0F, 0x09, 0x3D, 0x00, 0x8E, 0x03, 0x36, 0x0F, +/* 00016C80 */ 0x4A, 0x0F, 0x6C, 0x0E, 0x0F, 0x01, 0x07, 0x01, 0x00, 0x59, 0x00, 0x0F, 0x1F, 0x01, 0x0E, 0x0E, +/* 00016C90 */ 0x01, 0x43, 0x01, 0x01, 0x03, 0x0E, 0x8E, 0x01, 0x02, 0x0E, 0x4A, 0x0E, 0x07, 0x04, 0x00, 0x59, +/* 00016CA0 */ 0x00, 0x02, 0x8E, 0x01, 0x03, 0x0F, 0x4A, 0x0F, 0x59, 0x01, 0x0F, 0xA8, 0x0F, 0x59, 0x02, 0x0F, +/* 00016CB0 */ 0xA8, 0x0F, 0x59, 0x03, 0x0F, 0x1F, 0x04, 0xFF, 0x0E, 0x8E, 0x01, 0x03, 0x0E, 0x4A, 0x0E, 0x45, +/* 00016CC0 */ 0x0C, 0x0E, 0x09, 0x30, 0x00, 0x8E, 0x03, 0x36, 0x0F, 0x4A, 0x0F, 0x6C, 0x0E, 0x0F, 0x02, 0x07, +/* 00016CD0 */ 0x01, 0x00, 0x59, 0x00, 0x0F, 0x1F, 0x01, 0x0E, 0x0E, 0x45, 0x0C, 0x0E, 0x8E, 0x01, 0x02, 0x0E, +/* 00016CE0 */ 0x4A, 0x0E, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x0C, 0x59, 0x02, 0x07, 0x59, 0x03, +/* 00016CF0 */ 0x08, 0x1F, 0x04, 0xFF, 0x0E, 0x8E, 0x03, 0x03, 0x0F, 0x6C, 0x0E, 0x0F, 0x03, 0x07, 0x05, 0x00, +/* 00016D00 */ 0x59, 0x00, 0x0F, 0x59, 0x01, 0x0A, 0x59, 0x02, 0x0B, 0x59, 0x03, 0x0C, 0x59, 0x04, 0x05, 0x1F, +/* 00016D10 */ 0x05, 0x00, 0x0E, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xB0, 0x02, 0x69, 0x69, 0xFE, +/* 00016D20 */ 0x01, 0x02, 0xFE, 0xF2, 0x9D, 0x10, 0x08, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x15, 0x00, 0x10, 0x00, +/* 00016D30 */ 0x23, 0x00, 0x0F, 0x00, 0x3B, 0x00, 0x15, 0x00, 0x61, 0x00, 0x14, 0x00, 0x2A, 0x00, 0x14, 0x00, +/* 00016D40 */ 0xFE, 0x00, 0x05, 0x00, 0x1D, 0x00, 0x14, 0x00, 0x46, 0x00, 0x10, 0x00, 0x41, 0x00, 0x1A, 0x00, +/* 00016D50 */ 0x3A, 0x00, 0x23, 0x00, 0x66, 0x00, 0x0C, 0x00, 0x4C, 0x00, 0x17, 0x00, 0x2A, 0x00, 0x19, 0x00, +/* 00016D60 */ 0x4E, 0x00, 0x23, 0x00, 0x72, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, +/* 00016D70 */ 0x5B, 0x03, 0x23, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xE5, 0x03, 0x43, 0xFE, 0x9F, 0x92, 0xFE, 0x9F, +/* 00016D80 */ 0x92, 0x01, 0xFE, 0x00, 0x90, 0x04, 0x04, 0xFE, 0x9F, 0x92, 0xFE, 0x62, 0x0A, 0xFE, 0x62, 0x0A, +/* 00016D90 */ 0x0C, 0x1E, 0x27, 0x07, 0xC9, 0xB9, 0x03, 0x06, 0x1D, 0x1D, 0x1D, 0x1D, 0x26, 0x08, 0x06, 0xFE, +/* 00016DA0 */ 0xF2, 0x03, 0x06, 0xFE, 0xA3, 0x03, 0x06, 0xFE, 0xF3, 0x03, 0x06, 0xFE, 0xF4, 0x03, 0x06, 0xFE, +/* 00016DB0 */ 0xF5, 0x03, 0x06, 0xFE, 0xF6, 0x03, 0x06, 0xFE, 0xF7, 0x03, 0x06, 0xFE, 0xE0, 0x03, 0x05, 0xFE, +/* 00016DC0 */ 0x9C, 0x03, 0x05, 0xFE, 0xDF, 0x03, 0x06, 0xFE, 0xF8, 0x03, 0x06, 0xFE, 0xA2, 0x03, 0x06, 0xFE, +/* 00016DD0 */ 0xF9, 0x03, 0x06, 0xFE, 0xFA, 0x03, 0x06, 0xFE, 0xFB, 0x03, 0x06, 0xFE, 0xFC, 0x03, 0x07, 0x06, +/* 00016DE0 */ 0xFE, 0xFD, 0x03, 0x06, 0xFE, 0xA1, 0x03, 0x06, 0xFE, 0xFE, 0x03, 0x06, 0xFE, 0xFF, 0x03, 0x06, +/* 00016DF0 */ 0xFE, 0x00, 0x04, 0x06, 0xFE, 0x01, 0x04, 0x06, 0xFE, 0x02, 0x04, 0x06, 0xFE, 0x03, 0x04, 0x0C, +/* 00016E00 */ 0x0B, 0xFE, 0x95, 0x02, 0x4E, 0x21, 0x4E, 0x22, 0x4E, 0x23, 0x4E, 0x24, 0x4E, 0x25, 0x8E, 0x02, +/* 00016E10 */ 0x12, 0x27, 0x4A, 0x27, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x1F, 0x1F, 0x02, 0x27, +/* 00016E20 */ 0x27, 0x45, 0x21, 0x27, 0xA8, 0x27, 0x14, 0x03, 0x00, 0x20, 0x27, 0x09, 0x1A, 0x00, 0x8E, 0x03, +/* 00016E30 */ 0x36, 0x29, 0x4A, 0x29, 0x6C, 0x28, 0x29, 0x00, 0x07, 0x01, 0x00, 0x59, 0x00, 0x29, 0x1F, 0x01, +/* 00016E40 */ 0x28, 0x28, 0x45, 0x27, 0x28, 0x09, 0x18, 0x00, 0x8E, 0x03, 0x24, 0x29, 0x6C, 0x28, 0x29, 0x01, +/* 00016E50 */ 0x07, 0x02, 0x00, 0x59, 0x00, 0x29, 0x59, 0x01, 0x20, 0x1F, 0x02, 0x28, 0x28, 0x46, 0x27, 0x28, +/* 00016E60 */ 0x45, 0x20, 0x27, 0x45, 0x27, 0x1E, 0x8E, 0x02, 0x02, 0x28, 0x4A, 0x28, 0x07, 0x06, 0x00, 0x59, +/* 00016E70 */ 0x00, 0x02, 0x59, 0x01, 0x20, 0x59, 0x02, 0x03, 0x59, 0x03, 0x04, 0xCF, 0x29, 0x02, 0xA1, 0x00, +/* 00016E80 */ 0x05, 0x29, 0xA1, 0x01, 0x06, 0x29, 0x59, 0x04, 0x29, 0x59, 0x05, 0x05, 0x1F, 0x06, 0x28, 0x28, +/* 00016E90 */ 0x76, 0x28, 0x27, 0x02, 0x5E, 0x27, 0x1E, 0x03, 0x14, 0x03, 0x00, 0x27, 0x05, 0x09, 0x15, 0x00, +/* 00016EA0 */ 0xCF, 0x28, 0x03, 0xA1, 0x00, 0x07, 0x28, 0xA1, 0x01, 0x08, 0x28, 0xA1, 0x02, 0x09, 0x28, 0x45, +/* 00016EB0 */ 0x27, 0x28, 0x09, 0x0E, 0x00, 0xCF, 0x28, 0x02, 0xA1, 0x00, 0x08, 0x28, 0xA1, 0x01, 0x09, 0x28, +/* 00016EC0 */ 0x46, 0x27, 0x28, 0x45, 0x22, 0x27, 0x8E, 0x03, 0x36, 0x28, 0x4A, 0x28, 0x6C, 0x27, 0x28, 0x04, +/* 00016ED0 */ 0x07, 0x01, 0x00, 0x59, 0x00, 0x28, 0x1F, 0x01, 0x27, 0x27, 0x45, 0x23, 0x27, 0x45, 0x27, 0x23, +/* 00016EE0 */ 0x8E, 0x02, 0x02, 0x28, 0x4A, 0x28, 0x07, 0x06, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x20, 0x59, +/* 00016EF0 */ 0x02, 0x0A, 0x59, 0x03, 0x04, 0xCF, 0x29, 0x02, 0xA1, 0x00, 0x0B, 0x29, 0xA1, 0x01, 0x0C, 0x29, +/* 00016F00 */ 0x59, 0x04, 0x29, 0x59, 0x05, 0x0C, 0x1F, 0x06, 0x28, 0x28, 0x76, 0x28, 0x27, 0x05, 0x8E, 0x02, +/* 00016F10 */ 0x02, 0x27, 0x4A, 0x27, 0x07, 0x06, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x20, 0x59, 0x02, 0x0D, +/* 00016F20 */ 0x59, 0x03, 0x0E, 0xA8, 0x28, 0x59, 0x04, 0x28, 0xA8, 0x28, 0x59, 0x05, 0x28, 0x1F, 0x06, 0x27, +/* 00016F30 */ 0x27, 0x45, 0x24, 0x27, 0xA8, 0x27, 0x14, 0x03, 0x00, 0x24, 0x27, 0x09, 0x06, 0x00, 0x45, 0x27, +/* 00016F40 */ 0x24, 0x09, 0x18, 0x00, 0x8E, 0x03, 0x24, 0x29, 0x6C, 0x28, 0x29, 0x06, 0x07, 0x02, 0x00, 0x59, +/* 00016F50 */ 0x00, 0x29, 0x59, 0x01, 0x24, 0x1F, 0x02, 0x28, 0x28, 0x46, 0x27, 0x28, 0x76, 0x27, 0x23, 0x07, +/* 00016F60 */ 0x45, 0x27, 0x23, 0x8E, 0x02, 0x02, 0x28, 0x4A, 0x28, 0x07, 0x06, 0x00, 0x59, 0x00, 0x02, 0x59, +/* 00016F70 */ 0x01, 0x20, 0x59, 0x02, 0x0F, 0x59, 0x03, 0x04, 0xCF, 0x29, 0x03, 0xA1, 0x00, 0x10, 0x29, 0xA1, +/* 00016F80 */ 0x01, 0x11, 0x29, 0xA1, 0x02, 0x12, 0x29, 0x59, 0x04, 0x29, 0xA8, 0x29, 0x59, 0x05, 0x29, 0x1F, +/* 00016F90 */ 0x06, 0x28, 0x28, 0x76, 0x28, 0x27, 0x08, 0x8E, 0x02, 0x0C, 0x27, 0x4A, 0x27, 0x07, 0x05, 0x00, +/* 00016FA0 */ 0x59, 0x00, 0x02, 0x8E, 0x03, 0x03, 0x28, 0x5E, 0x28, 0x28, 0x09, 0x59, 0x01, 0x28, 0x59, 0x02, +/* 00016FB0 */ 0x21, 0x59, 0x03, 0x23, 0x59, 0x04, 0x22, 0x1F, 0x05, 0x27, 0x27, 0x45, 0x25, 0x27, 0x5E, 0x27, +/* 00016FC0 */ 0x25, 0x0A, 0x76, 0x27, 0x1E, 0x0B, 0x5E, 0x27, 0x25, 0x0C, 0x14, 0x0E, 0x00, 0x27, 0x13, 0x5E, +/* 00016FD0 */ 0x27, 0x25, 0x0D, 0xA8, 0x28, 0x14, 0x03, 0x00, 0x27, 0x28, 0x09, 0x06, 0x00, 0x45, 0x27, 0x14, +/* 00016FE0 */ 0x09, 0x07, 0x00, 0x5E, 0x28, 0x25, 0x0E, 0x46, 0x27, 0x28, 0x76, 0x27, 0x1E, 0x0F, 0x5E, 0x27, +/* 00016FF0 */ 0x25, 0x10, 0x41, 0x27, 0x27, 0x15, 0x76, 0x27, 0x1E, 0x11, 0x5E, 0x27, 0x25, 0x12, 0x76, 0x27, +/* 00017000 */ 0x1E, 0x13, 0x8E, 0x03, 0x03, 0x27, 0x5E, 0x27, 0x27, 0x14, 0x5E, 0x28, 0x1E, 0x15, 0x97, 0x27, +/* 00017010 */ 0x27, 0x28, 0x76, 0x27, 0x1E, 0x16, 0x45, 0x27, 0x1E, 0x8E, 0x02, 0x02, 0x28, 0x4A, 0x28, 0x07, +/* 00017020 */ 0x06, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x20, 0x59, 0x02, 0x16, 0x59, 0x03, 0x04, 0xCF, 0x29, +/* 00017030 */ 0x04, 0xA1, 0x00, 0x17, 0x29, 0xA1, 0x01, 0x18, 0x29, 0xA1, 0x02, 0x19, 0x29, 0xA1, 0x03, 0x1A, +/* 00017040 */ 0x29, 0x59, 0x04, 0x29, 0x59, 0x05, 0x1A, 0x1F, 0x06, 0x28, 0x28, 0x76, 0x28, 0x27, 0x17, 0x8E, +/* 00017050 */ 0x03, 0x03, 0x27, 0x5E, 0x27, 0x27, 0x18, 0x5E, 0x28, 0x1E, 0x19, 0x97, 0x27, 0x27, 0x28, 0x76, +/* 00017060 */ 0x27, 0x1E, 0x1A, 0x45, 0x27, 0x1E, 0x8E, 0x02, 0x02, 0x28, 0x4A, 0x28, 0x07, 0x06, 0x00, 0x59, +/* 00017070 */ 0x00, 0x02, 0x59, 0x01, 0x20, 0x59, 0x02, 0x1B, 0x59, 0x03, 0x0E, 0xA8, 0x29, 0x59, 0x04, 0x29, +/* 00017080 */ 0x59, 0x05, 0x1C, 0x1F, 0x06, 0x28, 0x28, 0x76, 0x28, 0x27, 0x1B, 0x76, 0x1D, 0x1E, 0x1C, 0x45, +/* 00017090 */ 0x00, 0x1E, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x69, 0xFE, 0x21, 0x03, 0xFE, 0x55, 0x02, +/* 000170A0 */ 0xFE, 0x55, 0x02, 0x69, 0xFE, 0x04, 0x04, 0xFE, 0x22, 0x03, 0xFE, 0x17, 0x02, 0xFE, 0x18, 0x02, +/* 000170B0 */ 0xFE, 0xF0, 0x01, 0xFE, 0x0D, 0x02, 0xFE, 0x0D, 0x02, 0xFE, 0x16, 0x02, 0xFE, 0x16, 0x02, 0xFE, +/* 000170C0 */ 0x16, 0x02, 0xFE, 0x05, 0x04, 0xFE, 0x17, 0x02, 0xFE, 0x51, 0x02, 0xFE, 0x18, 0x02, 0xFE, 0xF9, +/* 000170D0 */ 0x03, 0xFE, 0x28, 0x02, 0xFE, 0xF9, 0x03, 0xFE, 0x54, 0x02, 0xFE, 0x52, 0x02, 0xFE, 0x27, 0x02, +/* 000170E0 */ 0xFE, 0x52, 0x02, 0xFE, 0x53, 0x02, 0xFE, 0x50, 0x02, 0xFE, 0x06, 0x04, 0xFE, 0xD3, 0x92, 0x15, +/* 000170F0 */ 0x0A, 0x00, 0x00, 0x00, 0x16, 0x00, 0x46, 0x00, 0x3F, 0x00, 0x91, 0x03, 0x31, 0x00, 0x60, 0x00, +/* 00017100 */ 0x32, 0x00, 0x6A, 0x00, 0x17, 0x00, 0x24, 0x00, 0x31, 0x00, 0x6D, 0x00, 0x26, 0x00, 0x55, 0x00, +/* 00017110 */ 0x2C, 0x00, 0x44, 0x00, 0x37, 0x00, 0x69, 0x00, 0x27, 0x00, 0x77, 0x00, 0x08, 0x00, 0xE3, 0x00, +/* 00017120 */ 0x28, 0x00, 0x59, 0x00, 0x0C, 0x00, 0x30, 0x00, 0x08, 0x00, 0x27, 0x00, 0x14, 0x00, 0x56, 0x00, +/* 00017130 */ 0x39, 0x00, 0x82, 0x00, 0x14, 0x00, 0x5C, 0x00, 0x28, 0x00, 0x70, 0x00, 0x04, 0x00, 0x32, 0x00, +/* 00017140 */ 0x08, 0x00, 0x19, 0x00, 0x00, 0x7E, 0x5D, 0x00, 0xC1, 0x03, 0x1A, 0x0B, 0x00, 0xFE, 0x45, 0x03, +/* 00017150 */ 0x22, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x65, 0x03, 0x40, 0xFE, 0x93, 0x8F, 0xFE, 0x93, 0x8F, 0x01, +/* 00017160 */ 0xFE, 0x00, 0x90, 0x04, 0x03, 0xFE, 0x93, 0x8F, 0xFE, 0x32, 0x02, 0xFE, 0x32, 0x02, 0x03, 0xFE, +/* 00017170 */ 0xE2, 0x03, 0xFE, 0xE3, 0x03, 0xFE, 0xE4, 0x03, 0x09, 0x04, 0x0A, 0x04, 0x27, 0x27, 0x02, 0x03, +/* 00017180 */ 0x05, 0x05, 0x05, 0x05, 0x07, 0x08, 0x09, 0x07, 0x08, 0x7C, 0x96, 0x02, 0x05, 0x96, 0x03, 0x06, +/* 00017190 */ 0x96, 0x02, 0x05, 0x15, 0x05, 0x00, 0x06, 0x03, 0x01, 0x45, 0x01, 0x03, 0x02, 0x4E, 0x0A, 0x96, +/* 000171A0 */ 0x04, 0x0A, 0x8E, 0x02, 0x36, 0x0B, 0x4A, 0x0B, 0x6C, 0x0A, 0x0B, 0x00, 0x07, 0x01, 0x00, 0x59, +/* 000171B0 */ 0x00, 0x0B, 0x1F, 0x01, 0x0A, 0x0A, 0x96, 0x04, 0x0A, 0x8E, 0x02, 0x36, 0x0B, 0x4A, 0x0B, 0x6C, +/* 000171C0 */ 0x0A, 0x0B, 0x01, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0B, 0x59, 0x01, 0x04, 0xD6, 0x00, 0x0C, 0x59, +/* 000171D0 */ 0x02, 0x0C, 0x1F, 0x03, 0xFF, 0x0A, 0x8E, 0x02, 0x36, 0x0B, 0x4A, 0x0B, 0x6C, 0x0A, 0x0B, 0x02, +/* 000171E0 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x0B, 0x92, 0x04, 0x0C, 0x59, 0x01, 0x0C, 0x8E, 0x02, 0x03, 0x0C, +/* 000171F0 */ 0x5E, 0x0C, 0x0C, 0x03, 0x5E, 0x0C, 0x0C, 0x04, 0x59, 0x02, 0x0C, 0x1F, 0x03, 0x00, 0x0A, 0x09, +/* 00017200 */ 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x69, 0x93, 0xFE, 0x9A, 0x01, 0xFE, 0x11, 0x01, 0xFE, 0x24, +/* 00017210 */ 0x01, 0xFE, 0xB2, 0x8F, 0x05, 0x09, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x17, 0x00, 0x17, 0x00, 0x25, +/* 00017220 */ 0x00, 0x1D, 0x00, 0x94, 0x01, 0x2E, 0x00, 0x42, 0x00, 0x00, 0x2E, 0x72, 0x01, 0x00, 0x7F, 0x5C, +/* 00017230 */ 0x00, 0x01, 0x00, 0x10, 0x03, 0x00, 0xFE, 0x47, 0x03, 0x19, 0xA2, 0x41, 0xD1, 0x00, 0x41, 0xFE, +/* 00017240 */ 0xFF, 0x8F, 0xFE, 0xFF, 0x8F, 0x41, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0xFF, 0x8F, 0xFE, 0x77, +/* 00017250 */ 0x01, 0xFE, 0x77, 0x01, 0x04, 0x06, 0x08, 0x04, 0x1F, 0x1F, 0x03, 0x03, 0x07, 0x07, 0x08, 0x0B, +/* 00017260 */ 0x06, 0xFE, 0xD6, 0x03, 0x61, 0x8E, 0x01, 0x03, 0x08, 0x4A, 0x08, 0x15, 0x03, 0x00, 0x08, 0x02, +/* 00017270 */ 0x09, 0x29, 0x00, 0x8E, 0x01, 0x03, 0x08, 0x4A, 0x08, 0x07, 0x03, 0x00, 0x59, 0x00, 0x03, 0x59, +/* 00017280 */ 0x01, 0x06, 0x8E, 0x01, 0x04, 0x09, 0x4A, 0x09, 0x59, 0x02, 0x09, 0x1F, 0x03, 0x08, 0x08, 0x14, +/* 00017290 */ 0x03, 0x00, 0x08, 0x04, 0x09, 0x05, 0x00, 0xA8, 0x00, 0x09, 0x28, 0x00, 0x8E, 0x01, 0x02, 0x08, +/* 000172A0 */ 0x4A, 0x08, 0x2B, 0x08, 0x08, 0x06, 0x15, 0x03, 0x00, 0x08, 0x05, 0x09, 0x14, 0x00, 0x8E, 0x01, +/* 000172B0 */ 0x04, 0x08, 0x4A, 0x08, 0x8E, 0x01, 0x02, 0x09, 0x4A, 0x09, 0x97, 0x09, 0x09, 0x06, 0x9C, 0x09, +/* 000172C0 */ 0x08, 0x06, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x1D, 0x90, 0x05, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, +/* 000172D0 */ 0xB9, 0x00, 0x05, 0x00, 0x23, 0x00, 0x12, 0x00, 0x41, 0x00, 0x16, 0x00, 0x3B, 0x00, 0x00, 0x7F, +/* 000172E0 */ 0x5C, 0x00, 0x01, 0x00, 0x10, 0x03, 0x00, 0xFE, 0x32, 0x03, 0x53, 0xA2, 0x41, 0xC3, 0x00, 0xFE, +/* 000172F0 */ 0x29, 0x03, 0x3F, 0xFE, 0xE0, 0x8B, 0xFE, 0xE0, 0x8B, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, +/* 00017300 */ 0xE0, 0x8B, 0x65, 0x65, 0x03, 0x03, 0x05, 0x03, 0x0A, 0x0A, 0x02, 0x01, 0x04, 0x08, 0x1A, 0x8E, +/* 00017310 */ 0x01, 0x12, 0x05, 0x4A, 0x05, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x03, 0x1F, 0x02, +/* 00017320 */ 0x00, 0x05, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x14, 0x8C, 0x02, 0x00, 0x00, 0x00, +/* 00017330 */ 0x00, 0x18, 0x00, 0x30, 0x00, 0x00, 0x7F, 0x7C, 0x00, 0xC3, 0x53, 0x50, 0x53, 0x00, 0xFE, 0x1A, +/* 00017340 */ 0x03, 0x1D, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x64, 0x03, 0x3E, 0xFE, 0x83, 0x87, 0xFE, 0x83, 0x87, +/* 00017350 */ 0x01, 0xFE, 0x00, 0x90, 0x04, 0x04, 0xFE, 0x83, 0x87, 0xFE, 0xE8, 0x03, 0xFE, 0xE8, 0x03, 0x0C, +/* 00017360 */ 0x0F, 0x16, 0x0A, 0x5C, 0x56, 0x18, 0x02, 0x05, 0x01, 0x0A, 0x0A, 0x0A, 0x0A, 0x02, 0x01, 0x15, +/* 00017370 */ 0x16, 0x9E, 0xF9, 0x05, 0xFE, 0xDF, 0x03, 0x06, 0xFE, 0xE0, 0x03, 0x06, 0xFE, 0xA3, 0x03, 0x05, +/* 00017380 */ 0xFE, 0x9C, 0x03, 0x08, 0x01, 0x00, 0x01, 0x01, 0x06, 0xFE, 0x2D, 0x03, 0x0C, 0x06, 0xFE, 0x2B, +/* 00017390 */ 0x03, 0x07, 0x06, 0xFE, 0xE1, 0x03, 0x06, 0xFE, 0x2C, 0x03, 0xFE, 0x39, 0x01, 0x4E, 0x12, 0x4E, +/* 000173A0 */ 0x13, 0x4E, 0x14, 0xA8, 0x17, 0x14, 0x03, 0x00, 0x11, 0x17, 0x09, 0x06, 0x00, 0x45, 0x17, 0x02, +/* 000173B0 */ 0x09, 0x42, 0x00, 0x8E, 0x01, 0x02, 0x18, 0x4A, 0x18, 0x07, 0x06, 0x00, 0x59, 0x00, 0x06, 0x8E, +/* 000173C0 */ 0x02, 0x24, 0x1A, 0x6C, 0x19, 0x1A, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x1A, 0x59, 0x01, 0x11, +/* 000173D0 */ 0x1F, 0x02, 0x19, 0x19, 0x59, 0x01, 0x19, 0x59, 0x02, 0x03, 0x59, 0x03, 0x04, 0xCF, 0x19, 0x02, +/* 000173E0 */ 0xA1, 0x00, 0x02, 0x19, 0xA1, 0x01, 0x05, 0x19, 0x59, 0x04, 0x19, 0x59, 0x05, 0x02, 0x1F, 0x06, +/* 000173F0 */ 0x18, 0x18, 0x46, 0x17, 0x18, 0x45, 0x12, 0x17, 0x14, 0x03, 0x00, 0x12, 0x02, 0x09, 0x1C, 0x00, +/* 00017400 */ 0x8E, 0x01, 0x14, 0x18, 0x4A, 0x18, 0x07, 0x03, 0x00, 0x59, 0x00, 0x06, 0x59, 0x01, 0x0F, 0x59, +/* 00017410 */ 0x02, 0x10, 0x1F, 0x03, 0x18, 0x18, 0x45, 0x17, 0x18, 0x09, 0x19, 0x00, 0x8E, 0x01, 0x13, 0x18, +/* 00017420 */ 0x4A, 0x18, 0x07, 0x03, 0x00, 0x59, 0x00, 0x06, 0x59, 0x01, 0x0F, 0x59, 0x02, 0x10, 0x1F, 0x03, +/* 00017430 */ 0x18, 0x18, 0x46, 0x17, 0x18, 0x45, 0x13, 0x17, 0x45, 0x14, 0x07, 0xEC, 0x00, 0xA6, 0x17, 0x13, +/* 00017440 */ 0x01, 0x12, 0x03, 0x00, 0x14, 0x17, 0x09, 0x4D, 0x00, 0x8E, 0x02, 0x36, 0x18, 0x4A, 0x18, 0x6C, +/* 00017450 */ 0x17, 0x18, 0x02, 0x07, 0x04, 0x00, 0x59, 0x00, 0x18, 0x59, 0x01, 0x13, 0x8E, 0x02, 0x24, 0x1A, +/* 00017460 */ 0x6C, 0x19, 0x1A, 0x03, 0x07, 0x02, 0x00, 0x59, 0x00, 0x1A, 0x59, 0x01, 0x14, 0x1F, 0x02, 0x19, +/* 00017470 */ 0x19, 0x59, 0x02, 0x19, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, +/* 00017480 */ 0x00, 0x7A, 0x0A, 0x19, 0x04, 0x7A, 0x0A, 0x19, 0x05, 0x59, 0x03, 0x19, 0x1F, 0x04, 0xFF, 0x17, +/* 00017490 */ 0x26, 0x14, 0x14, 0x09, 0xA5, 0xFF, 0x8E, 0x02, 0x36, 0x18, 0x4A, 0x18, 0x6C, 0x17, 0x18, 0x06, +/* 000174A0 */ 0x07, 0x04, 0x00, 0x59, 0x00, 0x18, 0x59, 0x01, 0x13, 0x59, 0x02, 0x0D, 0xCE, 0x10, 0x00, 0x00, +/* 000174B0 */ 0x00, 0x01, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x7A, 0x0A, 0x19, 0x07, 0x7A, 0x0A, 0x19, +/* 000174C0 */ 0x08, 0x7A, 0x0A, 0x19, 0x09, 0x59, 0x03, 0x19, 0x1F, 0x04, 0xFF, 0x17, 0x45, 0x00, 0x13, 0x09, +/* 000174D0 */ 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x02, 0x24, 0x00, 0x10, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, +/* 000174E0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, +/* 000174F0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x95, 0x01, 0x00, +/* 00017500 */ 0x00, 0x96, 0x01, 0x00, 0x00, 0xFE, 0x21, 0x03, 0xD1, 0xFE, 0x9C, 0x01, 0xFE, 0x22, 0x03, 0xFE, +/* 00017510 */ 0x95, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x9C, 0x01, 0xFE, 0x96, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x94, +/* 00017520 */ 0x01, 0xFE, 0xC5, 0x87, 0x09, 0x06, 0x00, 0x00, 0x00, 0x55, 0x00, 0xBB, 0x00, 0x40, 0x00, 0xD4, +/* 00017530 */ 0x00, 0x05, 0x00, 0x0B, 0x00, 0x0C, 0x00, 0x30, 0x00, 0x47, 0x00, 0xED, 0xFF, 0x06, 0x00, 0x30, +/* 00017540 */ 0x01, 0x36, 0x00, 0xA1, 0x00, 0x08, 0x00, 0x1D, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x13, 0x10, +/* 00017550 */ 0x43, 0x00, 0xFE, 0xFB, 0x02, 0x28, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x63, 0x03, 0x3D, 0xFE, 0x1A, +/* 00017560 */ 0x81, 0xFE, 0x1A, 0x81, 0x41, 0xFE, 0x00, 0x90, 0x05, 0x05, 0xFE, 0x1A, 0x81, 0xFE, 0xB9, 0x04, +/* 00017570 */ 0xFE, 0xB9, 0x04, 0x0D, 0x0D, 0x18, 0x07, 0x5B, 0x53, 0x02, 0x02, 0x0A, 0x0A, 0x0A, 0x0A, 0x02, +/* 00017580 */ 0x17, 0x06, 0xFE, 0xDA, 0x03, 0x01, 0x01, 0x01, 0x15, 0x08, 0x06, 0xFE, 0xDB, 0x03, 0x01, 0x00, +/* 00017590 */ 0x01, 0x14, 0x06, 0xFE, 0xDC, 0x03, 0x06, 0xFE, 0xDD, 0x03, 0x07, 0x06, 0xFE, 0xDE, 0x03, 0xFE, +/* 000175A0 */ 0x2C, 0x01, 0x4E, 0x11, 0x4E, 0x12, 0x4E, 0x13, 0x4E, 0x14, 0x4E, 0x15, 0x4E, 0x16, 0x8E, 0x01, +/* 000175B0 */ 0x0D, 0x18, 0x4A, 0x18, 0x07, 0x06, 0x00, 0x59, 0x00, 0x05, 0x59, 0x01, 0x0E, 0x59, 0x02, 0x02, +/* 000175C0 */ 0x59, 0x03, 0x03, 0x59, 0x04, 0x04, 0x59, 0x05, 0x03, 0x1F, 0x06, 0x18, 0x18, 0x45, 0x11, 0x18, +/* 000175D0 */ 0x8E, 0x01, 0x0D, 0x18, 0x4A, 0x18, 0x07, 0x06, 0x00, 0x59, 0x00, 0x05, 0x59, 0x01, 0x0E, 0x59, +/* 000175E0 */ 0x02, 0x06, 0x59, 0x03, 0x07, 0x59, 0x04, 0x08, 0x59, 0x05, 0x0F, 0x1F, 0x06, 0x18, 0x18, 0x45, +/* 000175F0 */ 0x12, 0x18, 0x8E, 0x02, 0x36, 0x19, 0x4A, 0x19, 0x6C, 0x18, 0x19, 0x00, 0x07, 0x03, 0x00, 0x59, +/* 00017600 */ 0x00, 0x19, 0x59, 0x01, 0x12, 0x59, 0x02, 0x10, 0x1F, 0x03, 0x18, 0x18, 0x45, 0x13, 0x18, 0x8E, +/* 00017610 */ 0x01, 0x0D, 0x18, 0x4A, 0x18, 0x07, 0x06, 0x00, 0x59, 0x00, 0x05, 0x59, 0x01, 0x0E, 0x59, 0x02, +/* 00017620 */ 0x09, 0x59, 0x03, 0x12, 0x59, 0x04, 0x08, 0x59, 0x05, 0x13, 0x1F, 0x06, 0x18, 0x18, 0x45, 0x14, +/* 00017630 */ 0x18, 0x76, 0x11, 0x0D, 0x01, 0x76, 0x12, 0x0D, 0x02, 0x76, 0x14, 0x0D, 0x03, 0x5E, 0x18, 0x0E, +/* 00017640 */ 0x04, 0x45, 0x15, 0x18, 0x5E, 0x18, 0x0E, 0x05, 0x45, 0x16, 0x18, 0xA8, 0x18, 0x15, 0x0A, 0x00, +/* 00017650 */ 0x15, 0x18, 0xA8, 0x18, 0x15, 0x03, 0x00, 0x16, 0x18, 0x09, 0x6E, 0x00, 0x8E, 0x01, 0x0D, 0x18, +/* 00017660 */ 0x4A, 0x18, 0x07, 0x06, 0x00, 0x59, 0x00, 0x05, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 00017670 */ 0x00, 0x19, 0x00, 0x00, 0x00, 0x7A, 0x15, 0x19, 0x06, 0x59, 0x01, 0x19, 0x59, 0x02, 0x0A, 0x59, +/* 00017680 */ 0x03, 0x03, 0x59, 0x04, 0x04, 0x59, 0x05, 0x03, 0x1F, 0x06, 0x18, 0x18, 0x45, 0x15, 0x18, 0x8E, +/* 00017690 */ 0x01, 0x0D, 0x18, 0x4A, 0x18, 0x07, 0x06, 0x00, 0x59, 0x00, 0x05, 0xCE, 0x0C, 0x00, 0x00, 0x00, +/* 000176A0 */ 0x01, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x7A, 0x16, 0x19, 0x07, 0x59, 0x01, 0x19, 0x59, +/* 000176B0 */ 0x02, 0x0C, 0x59, 0x03, 0x15, 0x59, 0x04, 0x04, 0x59, 0x05, 0x04, 0x1F, 0x06, 0x18, 0x18, 0x45, +/* 000176C0 */ 0x16, 0x18, 0x76, 0x15, 0x0D, 0x08, 0x76, 0x16, 0x0D, 0x09, 0xA8, 0x00, 0x24, 0x00, 0x02, 0x18, +/* 000176D0 */ 0x00, 0x0C, 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x02, 0x00, +/* 000176E0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x02, 0x00, +/* 000176F0 */ 0x00, 0xFE, 0xFE, 0x00, 0xFE, 0x47, 0x02, 0xFE, 0x46, 0x02, 0xFE, 0x44, 0x02, 0xFE, 0x48, 0x02, +/* 00017700 */ 0xFE, 0x45, 0x02, 0xFE, 0x48, 0x02, 0xFE, 0x45, 0x02, 0xFE, 0x48, 0x02, 0xFE, 0x45, 0x02, 0xFE, +/* 00017710 */ 0x5A, 0x81, 0x0F, 0x0C, 0x00, 0x00, 0x00, 0x22, 0x00, 0x51, 0x00, 0x22, 0x00, 0x5C, 0x00, 0x1D, +/* 00017720 */ 0x00, 0x3C, 0x00, 0x22, 0x00, 0x65, 0x00, 0x04, 0x00, 0x2D, 0x00, 0x04, 0x00, 0x2E, 0x00, 0x04, +/* 00017730 */ 0x00, 0x2F, 0x00, 0x07, 0x00, 0x35, 0x00, 0x07, 0x00, 0x35, 0x00, 0x11, 0x00, 0xEA, 0x00, 0x33, +/* 00017740 */ 0x00, 0x6E, 0x00, 0x33, 0x00, 0x72, 0x00, 0x04, 0x00, 0x35, 0x00, 0x06, 0x00, 0x37, 0x00, 0x00, +/* 00017750 */ 0x7E, 0x5D, 0x00, 0xC1, 0x03, 0x1A, 0x0B, 0x00, 0xFE, 0xDF, 0x02, 0x23, 0xA2, 0x41, 0xC1, 0x00, +/* 00017760 */ 0xFE, 0x61, 0x03, 0x3B, 0xFE, 0x33, 0x7C, 0xFE, 0x33, 0x7C, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, +/* 00017770 */ 0xFE, 0x33, 0x7C, 0xFE, 0xE2, 0x01, 0xFE, 0xE2, 0x01, 0x03, 0xFE, 0xD8, 0x03, 0xFE, 0xD9, 0x03, +/* 00017780 */ 0xFE, 0xCF, 0x03, 0x08, 0x03, 0x08, 0x04, 0x16, 0x16, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x05, +/* 00017790 */ 0x06, 0x07, 0x01, 0x00, 0x3D, 0x96, 0x02, 0x03, 0x4E, 0x08, 0x96, 0x03, 0x08, 0x4E, 0x08, 0x96, +/* 000177A0 */ 0x04, 0x08, 0xCF, 0x08, 0x00, 0x96, 0x03, 0x08, 0x96, 0x04, 0x02, 0x8E, 0x02, 0x36, 0x09, 0x4A, +/* 000177B0 */ 0x09, 0x6C, 0x08, 0x09, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x09, 0x59, 0x01, 0x04, 0xD6, 0x00, +/* 000177C0 */ 0x0A, 0x59, 0x02, 0x0A, 0x1F, 0x03, 0xFF, 0x08, 0x92, 0x03, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, +/* 000177D0 */ 0x24, 0x00, 0x93, 0xFE, 0x6C, 0x7C, 0x05, 0x0D, 0x00, 0x00, 0x00, 0x06, 0x00, 0x1B, 0x00, 0x03, +/* 000177E0 */ 0x00, 0x13, 0x00, 0x1D, 0x00, 0x67, 0x01, 0x08, 0x00, 0x13, 0x00, 0x00, 0xF0, 0x77, 0x01, 0x00, +/* 000177F0 */ 0x7F, 0x5C, 0x00, 0xC1, 0x13, 0x10, 0x43, 0x00, 0xFE, 0xE2, 0x02, 0x24, 0xA2, 0x41, 0xD1, 0x00, +/* 00017800 */ 0x3C, 0xFE, 0xB6, 0x7C, 0xFE, 0xB6, 0x7C, 0x41, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0xB6, 0x7C, +/* 00017810 */ 0xFE, 0x3F, 0x01, 0xFE, 0x3F, 0x01, 0x07, 0x0A, 0x0D, 0x05, 0x2C, 0x2B, 0x03, 0x06, 0x06, 0x06, +/* 00017820 */ 0x06, 0x06, 0x01, 0x0C, 0x08, 0x01, 0x01, 0x06, 0xFE, 0x2A, 0x03, 0x06, 0xFE, 0x2C, 0x03, 0x0B, +/* 00017830 */ 0x06, 0xFE, 0x2D, 0x03, 0x06, 0xFE, 0x2B, 0x03, 0x07, 0x97, 0x4E, 0x0B, 0x8E, 0x02, 0x0F, 0x0D, +/* 00017840 */ 0x4A, 0x0D, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x0A, 0x1F, 0x02, 0x0D, 0x0D, 0x5E, +/* 00017850 */ 0x0D, 0x0D, 0x00, 0x45, 0x0B, 0x0D, 0x8E, 0x02, 0x08, 0x0D, 0x4A, 0x0D, 0x07, 0x03, 0x00, 0x59, +/* 00017860 */ 0x00, 0x02, 0x8E, 0x01, 0x02, 0x0E, 0x59, 0x01, 0x0E, 0x59, 0x02, 0x0B, 0x1F, 0x03, 0x0D, 0x0D, +/* 00017870 */ 0xA8, 0x0E, 0x15, 0x03, 0x00, 0x0D, 0x0E, 0x09, 0x53, 0x00, 0x8E, 0x03, 0x36, 0x0E, 0x4A, 0x0E, +/* 00017880 */ 0x6C, 0x0D, 0x0E, 0x01, 0x07, 0x04, 0x00, 0x59, 0x00, 0x0E, 0x8E, 0x01, 0x03, 0x0F, 0x4A, 0x0F, +/* 00017890 */ 0x59, 0x01, 0x0F, 0x8E, 0x01, 0x04, 0x10, 0x4A, 0x10, 0x43, 0x0F, 0x10, 0x2D, 0x10, 0x0F, 0x03, +/* 000178A0 */ 0x01, 0x43, 0x01, 0x01, 0x04, 0x10, 0x59, 0x02, 0x0F, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 000178B0 */ 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x7A, 0x0A, 0x0F, 0x02, 0x7A, 0x06, 0x0F, 0x03, 0x7A, 0x06, +/* 000178C0 */ 0x0F, 0x04, 0x7A, 0x06, 0x0F, 0x05, 0x59, 0x03, 0x0F, 0x1F, 0x04, 0xFF, 0x0D, 0xA8, 0x00, 0x24, +/* 000178D0 */ 0x00, 0x01, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 000178E0 */ 0x97, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, +/* 000178F0 */ 0xFE, 0x1E, 0x02, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, +/* 00017900 */ 0x96, 0x01, 0xFE, 0xD6, 0x7C, 0x04, 0x02, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x42, 0x00, 0x24, 0x00, +/* 00017910 */ 0x60, 0x00, 0x55, 0x00, 0x7C, 0x00, 0x00, 0x7F, 0x7C, 0x02, 0xC3, 0x53, 0x50, 0x53, 0x00, 0xFE, +/* 00017920 */ 0xB1, 0x02, 0x23, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x60, 0x03, 0x3A, 0xFE, 0x4E, 0x75, 0xFE, 0x4E, +/* 00017930 */ 0x75, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0x4E, 0x75, 0xFE, 0x68, 0x05, 0xFE, 0x68, 0x05, +/* 00017940 */ 0x10, 0x10, 0x1B, 0x05, 0x8A, 0x7F, 0x5C, 0x02, 0x01, 0x04, 0x01, 0x0F, 0x0F, 0x0F, 0x0F, 0x01, +/* 00017950 */ 0x02, 0x1A, 0x1B, 0x7E, 0xFE, 0xC9, 0x01, 0x06, 0xFE, 0xD6, 0x03, 0x06, 0xFE, 0xA3, 0x03, 0x01, +/* 00017960 */ 0x00, 0x06, 0xFE, 0x94, 0x03, 0x07, 0x06, 0xFE, 0xD7, 0x03, 0x08, 0x01, 0xFF, 0x01, 0x01, 0x06, +/* 00017970 */ 0xFE, 0x2A, 0x03, 0x06, 0xFE, 0x2C, 0x03, 0x0B, 0x06, 0xFE, 0x2D, 0x03, 0x06, 0xFE, 0x2B, 0x03, +/* 00017980 */ 0xFE, 0xD3, 0x01, 0x4E, 0x11, 0x4E, 0x12, 0x4E, 0x13, 0x4E, 0x14, 0x4E, 0x15, 0x4E, 0x16, 0x4E, +/* 00017990 */ 0x17, 0x4E, 0x18, 0x4E, 0x19, 0x2A, 0x1D, 0x10, 0x14, 0x03, 0x00, 0x1D, 0x02, 0x09, 0x06, 0x00, +/* 000179A0 */ 0xCF, 0x00, 0x00, 0x09, 0xAE, 0x01, 0xCF, 0x1D, 0x00, 0x45, 0x11, 0x1D, 0x2A, 0x1D, 0x10, 0x14, +/* 000179B0 */ 0x03, 0x00, 0x1D, 0x03, 0x09, 0x0D, 0x00, 0xCF, 0x1E, 0x01, 0xA1, 0x00, 0x10, 0x1E, 0x45, 0x1D, +/* 000179C0 */ 0x1E, 0x09, 0x18, 0x00, 0x8E, 0x02, 0x24, 0x1F, 0x6C, 0x1E, 0x1F, 0x00, 0x07, 0x02, 0x00, 0x59, +/* 000179D0 */ 0x00, 0x1F, 0x59, 0x01, 0x10, 0x1F, 0x02, 0x1E, 0x1E, 0x46, 0x1D, 0x1E, 0x45, 0x12, 0x1D, 0x8E, +/* 000179E0 */ 0x02, 0x24, 0x1E, 0x6C, 0x1D, 0x1E, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x1E, 0xA6, 0x1F, 0x12, +/* 000179F0 */ 0x02, 0x59, 0x01, 0x1F, 0x1F, 0x02, 0x1D, 0x1D, 0x45, 0x13, 0x1D, 0x45, 0x14, 0x04, 0x45, 0x15, +/* 00017A00 */ 0x04, 0xEC, 0x00, 0x12, 0x03, 0x00, 0x14, 0x13, 0x09, 0x41, 0x01, 0x8E, 0x02, 0x24, 0x1E, 0x6C, +/* 00017A10 */ 0x1D, 0x1E, 0x03, 0x07, 0x02, 0x00, 0x59, 0x00, 0x1E, 0x59, 0x01, 0x14, 0x1F, 0x02, 0x1D, 0x1D, +/* 00017A20 */ 0x45, 0x16, 0x1D, 0xBC, 0x1D, 0x16, 0x12, 0x00, 0x00, 0x0E, 0x18, 0x01, 0x1D, 0x97, 0x1D, 0x12, +/* 00017A30 */ 0x16, 0x45, 0x17, 0x1D, 0x2A, 0x1D, 0x17, 0x15, 0x03, 0x00, 0x1D, 0x03, 0x09, 0x08, 0x00, 0x2A, +/* 00017A40 */ 0x1D, 0x17, 0x15, 0x08, 0x00, 0x1D, 0x05, 0x14, 0x03, 0x00, 0x17, 0x06, 0x09, 0x15, 0x00, 0x8E, +/* 00017A50 */ 0x02, 0x03, 0x1E, 0x6C, 0x1D, 0x1E, 0x04, 0x07, 0x02, 0x00, 0x59, 0x00, 0x1E, 0x59, 0x01, 0x07, +/* 00017A60 */ 0x1F, 0x02, 0xFF, 0x1D, 0x8E, 0x02, 0x24, 0x1E, 0x6C, 0x1D, 0x1E, 0x05, 0x07, 0x02, 0x00, 0x59, +/* 00017A70 */ 0x00, 0x1E, 0x59, 0x01, 0x17, 0x1F, 0x02, 0x1D, 0x1D, 0x45, 0x18, 0x1D, 0x8E, 0x01, 0x11, 0x1D, +/* 00017A80 */ 0x4A, 0x1D, 0x07, 0x02, 0x00, 0x59, 0x00, 0x08, 0x59, 0x01, 0x18, 0x1F, 0x02, 0x1D, 0x1D, 0x0F, +/* 00017A90 */ 0x15, 0x00, 0x1D, 0x8E, 0x02, 0x03, 0x1E, 0x6C, 0x1D, 0x1E, 0x06, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 00017AA0 */ 0x1E, 0x59, 0x01, 0x18, 0x1F, 0x02, 0xFF, 0x1D, 0x8E, 0x02, 0x03, 0x1E, 0x6C, 0x1D, 0x1E, 0x07, +/* 00017AB0 */ 0x07, 0x02, 0x00, 0x59, 0x00, 0x1E, 0x59, 0x01, 0x18, 0x1F, 0x02, 0x1D, 0x1D, 0x45, 0x19, 0x1D, +/* 00017AC0 */ 0xA8, 0x1D, 0x14, 0x03, 0x00, 0x19, 0x1D, 0x09, 0x18, 0x00, 0x8E, 0x02, 0x03, 0x1E, 0x6C, 0x1D, +/* 00017AD0 */ 0x1E, 0x08, 0x07, 0x02, 0x00, 0x59, 0x00, 0x1E, 0x59, 0x01, 0x18, 0x1F, 0x02, 0xFF, 0x1D, 0x09, +/* 00017AE0 */ 0x63, 0x00, 0x8E, 0x02, 0x36, 0x1E, 0x4A, 0x1E, 0x6C, 0x1D, 0x1E, 0x09, 0x07, 0x03, 0x00, 0x59, +/* 00017AF0 */ 0x00, 0x1E, 0x59, 0x01, 0x11, 0x59, 0x02, 0x19, 0x1F, 0x03, 0x1D, 0x1D, 0x14, 0x03, 0x00, 0x1D, +/* 00017B00 */ 0x09, 0x09, 0x41, 0x00, 0x8E, 0x02, 0x36, 0x1E, 0x4A, 0x1E, 0x6C, 0x1D, 0x1E, 0x0A, 0x07, 0x04, +/* 00017B10 */ 0x00, 0x59, 0x00, 0x1E, 0x59, 0x01, 0x11, 0x43, 0x1F, 0x15, 0x2D, 0x15, 0x1F, 0x0A, 0x59, 0x02, +/* 00017B20 */ 0x1F, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x7A, 0x19, +/* 00017B30 */ 0x1F, 0x0B, 0x7A, 0x0D, 0x1F, 0x0C, 0x7A, 0x0D, 0x1F, 0x0D, 0x7A, 0x0D, 0x1F, 0x0E, 0x59, 0x03, +/* 00017B40 */ 0x1F, 0x1F, 0x04, 0xFF, 0x1D, 0x2D, 0x14, 0x14, 0x0A, 0x09, 0xB5, 0xFE, 0x45, 0x00, 0x11, 0x09, +/* 00017B50 */ 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x01, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, +/* 00017B60 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, +/* 00017B70 */ 0x00, 0x96, 0x01, 0x00, 0x00, 0xFE, 0x21, 0x03, 0xFE, 0x26, 0x03, 0xD1, 0xFE, 0x22, 0x03, 0xFE, +/* 00017B80 */ 0xAE, 0x02, 0xFE, 0x22, 0x03, 0xFE, 0xAF, 0x02, 0xFE, 0xEE, 0x01, 0xFE, 0xAF, 0x02, 0xFE, 0x0F, +/* 00017B90 */ 0x03, 0xFE, 0x9C, 0x01, 0xFE, 0x97, 0x01, 0xFE, 0x94, 0x01, 0xFE, 0x95, 0x01, 0xFE, 0x96, 0x01, +/* 00017BA0 */ 0xFE, 0x6B, 0x75, 0x18, 0x12, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x32, 0x00, 0x06, 0x00, 0x1E, 0x00, +/* 00017BB0 */ 0x06, 0x00, 0x19, 0x00, 0x33, 0x00, 0x58, 0x00, 0x1C, 0x00, 0x31, 0x00, 0x03, 0x00, 0x0B, 0x00, +/* 00017BC0 */ 0x05, 0x00, 0x18, 0x00, 0x08, 0x00, 0x17, 0x00, 0x18, 0x00, 0x2D, 0x00, 0x0A, 0x00, 0x1F, 0x00, +/* 00017BD0 */ 0x07, 0x00, 0x26, 0x00, 0x1B, 0x00, 0x69, 0x00, 0x15, 0x00, 0x4F, 0x00, 0x18, 0x00, 0x37, 0x00, +/* 00017BE0 */ 0x17, 0x00, 0x40, 0x00, 0x15, 0x00, 0x4B, 0x00, 0x18, 0x00, 0x4D, 0x00, 0x0A, 0x00, 0x96, 0x00, +/* 00017BF0 */ 0x18, 0x00, 0x3F, 0x00, 0x22, 0x00, 0x49, 0x00, 0x41, 0x00, 0x9B, 0x00, 0x07, 0x00, 0x1B, 0x00, +/* 00017C00 */ 0x08, 0x00, 0x11, 0x00, 0x00, 0x7E, 0x5C, 0x00, 0xC1, 0x43, 0x50, 0x0B, 0x00, 0xFE, 0x8E, 0x02, +/* 00017C10 */ 0x2B, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x5F, 0x03, 0x37, 0xFE, 0xA2, 0x70, 0xFE, 0xA2, 0x70, 0x02, +/* 00017C20 */ 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0xA2, 0x70, 0xFE, 0x40, 0x03, 0xFE, 0x40, 0x03, 0x0F, 0x07, +/* 00017C30 */ 0x0F, 0x08, 0x5B, 0x52, 0x02, 0x02, 0x0E, 0x0E, 0x0E, 0x0E, 0x01, 0x0E, 0x0F, 0x08, 0x07, 0x0C, +/* 00017C40 */ 0x06, 0xFE, 0x95, 0x03, 0x0B, 0xFE, 0x22, 0x01, 0x4E, 0x08, 0x4E, 0x09, 0x4E, 0x0A, 0x4E, 0x0B, +/* 00017C50 */ 0x4E, 0x0C, 0x4E, 0x0D, 0x8E, 0x01, 0x0F, 0x10, 0x4A, 0x10, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, +/* 00017C60 */ 0x59, 0x01, 0x07, 0x1F, 0x02, 0x10, 0x10, 0x45, 0x08, 0x10, 0x14, 0x03, 0x00, 0x08, 0x03, 0x09, +/* 00017C70 */ 0x06, 0x00, 0x45, 0x00, 0x04, 0x09, 0xF0, 0x00, 0x5E, 0x10, 0x08, 0x00, 0x0E, 0x51, 0x00, 0x10, +/* 00017C80 */ 0x8E, 0x02, 0x36, 0x11, 0x4A, 0x11, 0x6C, 0x10, 0x11, 0x01, 0x07, 0x03, 0x00, 0x59, 0x00, 0x11, +/* 00017C90 */ 0x5E, 0x12, 0x08, 0x02, 0x59, 0x01, 0x12, 0x59, 0x02, 0x05, 0x1F, 0x03, 0x10, 0x10, 0x45, 0x09, +/* 00017CA0 */ 0x10, 0x8E, 0x02, 0x36, 0x11, 0x4A, 0x11, 0x6C, 0x10, 0x11, 0x03, 0x07, 0x02, 0x00, 0x59, 0x00, +/* 00017CB0 */ 0x11, 0x59, 0x01, 0x09, 0x1F, 0x02, 0x10, 0x10, 0x45, 0x0A, 0x10, 0xA6, 0x10, 0x09, 0x04, 0xA6, +/* 00017CC0 */ 0x11, 0x0A, 0x05, 0x15, 0x03, 0x00, 0x10, 0x11, 0x09, 0x06, 0x00, 0x45, 0x00, 0x04, 0x09, 0x97, +/* 00017CD0 */ 0x00, 0x5E, 0x10, 0x08, 0x06, 0x0E, 0x87, 0x00, 0x10, 0x8E, 0x02, 0x36, 0x11, 0x4A, 0x11, 0x6C, +/* 00017CE0 */ 0x10, 0x11, 0x07, 0x07, 0x03, 0x00, 0x59, 0x00, 0x11, 0x5E, 0x12, 0x08, 0x08, 0x59, 0x01, 0x12, +/* 00017CF0 */ 0x59, 0x02, 0x05, 0x1F, 0x03, 0x10, 0x10, 0x45, 0x0B, 0x10, 0x8E, 0x02, 0x36, 0x11, 0x4A, 0x11, +/* 00017D00 */ 0x6C, 0x10, 0x11, 0x09, 0x07, 0x03, 0x00, 0x59, 0x00, 0x11, 0x8E, 0x02, 0x36, 0x13, 0x4A, 0x13, +/* 00017D10 */ 0x6C, 0x12, 0x13, 0x0A, 0x07, 0x03, 0x00, 0x59, 0x00, 0x13, 0x59, 0x01, 0x0B, 0xD6, 0x00, 0x14, +/* 00017D20 */ 0x59, 0x02, 0x14, 0x1F, 0x03, 0x12, 0x12, 0x59, 0x01, 0x12, 0xD6, 0x01, 0x12, 0x59, 0x02, 0x12, +/* 00017D30 */ 0x1F, 0x03, 0x10, 0x10, 0x45, 0x0C, 0x10, 0x8E, 0x02, 0x36, 0x11, 0x4A, 0x11, 0x6C, 0x10, 0x11, +/* 00017D40 */ 0x0B, 0x07, 0x02, 0x00, 0x59, 0x00, 0x11, 0x59, 0x01, 0x0C, 0x1F, 0x02, 0x10, 0x10, 0x45, 0x0D, +/* 00017D50 */ 0x10, 0xA6, 0x10, 0x0C, 0x0C, 0xA6, 0x11, 0x0D, 0x0D, 0x41, 0x00, 0x10, 0x11, 0x09, 0x08, 0x00, +/* 00017D60 */ 0x45, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xD4, 0x03, 0xFE, 0x56, 0x01, +/* 00017D70 */ 0xFE, 0xD4, 0x03, 0xFE, 0x15, 0x03, 0xD1, 0xD1, 0xFE, 0xD5, 0x03, 0xFE, 0x56, 0x01, 0xFE, 0xD5, +/* 00017D80 */ 0x03, 0xD5, 0x89, 0xFE, 0x15, 0x03, 0xD1, 0xD1, 0xFE, 0xBE, 0x70, 0x0F, 0x0C, 0x00, 0x00, 0x00, +/* 00017D90 */ 0x16, 0x00, 0x2D, 0x00, 0x08, 0x00, 0x23, 0x00, 0x06, 0x00, 0x45, 0x00, 0x08, 0x00, 0x23, 0x00, +/* 00017DA0 */ 0x21, 0x00, 0x3C, 0x00, 0x1A, 0x00, 0x38, 0x00, 0x10, 0x00, 0x41, 0x00, 0x06, 0x00, 0x2F, 0x00, +/* 00017DB0 */ 0x08, 0x00, 0x25, 0x00, 0x21, 0x00, 0x44, 0x00, 0x3D, 0x00, 0x88, 0x00, 0x1A, 0x00, 0x3C, 0x00, +/* 00017DC0 */ 0x0F, 0x00, 0x49, 0x00, 0x08, 0x00, 0x11, 0x00, 0x00, 0x32, 0x7E, 0x01, 0x00, 0xD1, 0x7D, 0x01, +/* 00017DD0 */ 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x07, 0x00, 0xFE, 0xA0, 0x02, 0x62, 0xA2, 0x41, 0xD0, +/* 00017DE0 */ 0x00, 0x39, 0xFE, 0x01, 0x10, 0xFE, 0x19, 0x73, 0xFE, 0x19, 0x73, 0x01, 0xFE, 0x00, 0x90, 0x02, +/* 00017DF0 */ 0x02, 0xFE, 0x19, 0x73, 0x23, 0x23, 0x04, 0x02, 0x04, 0x03, 0x0B, 0x0B, 0x02, 0x01, 0x01, 0x01, +/* 00017E00 */ 0x01, 0x01, 0x03, 0x1E, 0x8E, 0x02, 0x36, 0x05, 0x4A, 0x05, 0x6C, 0x04, 0x05, 0x00, 0x07, 0x02, +/* 00017E10 */ 0x00, 0x59, 0x00, 0x05, 0x59, 0x01, 0x02, 0x1F, 0x02, 0x00, 0x04, 0x09, 0x02, 0x00, 0xA8, 0x00, +/* 00017E20 */ 0x24, 0x00, 0xFE, 0x75, 0x01, 0xFE, 0x26, 0x73, 0x02, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x16, +/* 00017E30 */ 0x00, 0x00, 0x7F, 0x4C, 0x00, 0xC0, 0x03, 0x00, 0x07, 0x00, 0xFE, 0xA0, 0x02, 0x3E, 0xA2, 0x41, +/* 00017E40 */ 0xD0, 0x00, 0x38, 0xFE, 0x01, 0x10, 0xFE, 0xF5, 0x72, 0xFE, 0xF5, 0x72, 0x01, 0xFE, 0x00, 0x90, +/* 00017E50 */ 0x02, 0x02, 0xFE, 0xF5, 0x72, 0x21, 0x21, 0x02, 0x03, 0x04, 0x06, 0x06, 0x02, 0x01, 0x01, 0x01, +/* 00017E60 */ 0x01, 0x01, 0x01, 0x0F, 0xA6, 0x04, 0x03, 0x00, 0x41, 0x00, 0x04, 0x02, 0x09, 0x02, 0x00, 0xA8, +/* 00017E70 */ 0x00, 0x24, 0x00, 0xD1, 0xFE, 0x02, 0x73, 0x02, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x14, 0x00, +/* 00017E80 */ 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0x76, 0x02, 0x25, 0xA2, 0x41, 0xC1, +/* 00017E90 */ 0x00, 0xFE, 0x5E, 0x03, 0x36, 0xFE, 0x31, 0x6D, 0xFE, 0x31, 0x6D, 0x01, 0xFE, 0x00, 0x90, 0x02, +/* 00017EA0 */ 0x02, 0xFE, 0x31, 0x6D, 0xE0, 0xE0, 0x05, 0x04, 0x06, 0x04, 0x1D, 0x1C, 0x02, 0x04, 0x02, 0x02, +/* 00017EB0 */ 0x02, 0x02, 0x05, 0x08, 0x07, 0x5B, 0x8E, 0x02, 0x24, 0x07, 0x6C, 0x06, 0x07, 0x00, 0x07, 0x02, +/* 00017EC0 */ 0x00, 0x59, 0x00, 0x07, 0x59, 0x01, 0x04, 0x1F, 0x02, 0x06, 0x06, 0x45, 0x04, 0x06, 0x8E, 0x01, +/* 00017ED0 */ 0x0E, 0x06, 0x4A, 0x06, 0x0F, 0x10, 0x00, 0x06, 0x8E, 0x01, 0x03, 0x06, 0x4A, 0x06, 0x07, 0x01, +/* 00017EE0 */ 0x00, 0x59, 0x00, 0x02, 0x1F, 0x01, 0xFF, 0x06, 0x8E, 0x02, 0x03, 0x07, 0x6C, 0x06, 0x07, 0x01, +/* 00017EF0 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x07, 0x59, 0x01, 0x04, 0x8E, 0x01, 0x0E, 0x08, 0x4A, 0x08, 0x59, +/* 00017F00 */ 0x02, 0x08, 0x1F, 0x03, 0x06, 0x06, 0x42, 0x00, 0x06, 0x03, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, +/* 00017F10 */ 0x00, 0xFE, 0x22, 0x03, 0xFE, 0xC0, 0x02, 0xFE, 0x4B, 0x6D, 0x05, 0x00, 0x00, 0x00, 0x00, 0x18, +/* 00017F20 */ 0x00, 0x29, 0x00, 0x0A, 0x00, 0x25, 0x00, 0x10, 0x00, 0x2F, 0x00, 0x27, 0x00, 0x48, 0x00, 0x00, +/* 00017F30 */ 0x7E, 0x5D, 0x00, 0x01, 0x00, 0x1A, 0x0B, 0x00, 0xFE, 0xFC, 0x01, 0x1A, 0xA0, 0x41, 0xD1, 0x00, +/* 00017F40 */ 0x34, 0xFE, 0x5E, 0x51, 0xFE, 0x5E, 0x51, 0x01, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFE, 0x5E, 0x51, +/* 00017F50 */ 0xFE, 0xA8, 0x1B, 0xFE, 0xA8, 0x1B, 0x02, 0xFE, 0x6C, 0x03, 0xFE, 0xAC, 0x03, 0x1A, 0x26, 0x3D, +/* 00017F60 */ 0x04, 0xC5, 0x9B, 0x02, 0x02, 0x3A, 0x3B, 0x3C, 0x05, 0xFE, 0xAD, 0x03, 0x05, 0xFE, 0xAE, 0x03, +/* 00017F70 */ 0x05, 0xFE, 0xAF, 0x03, 0x06, 0xFE, 0xB0, 0x03, 0x06, 0xFE, 0xB1, 0x03, 0x05, 0xFE, 0xB2, 0x03, +/* 00017F80 */ 0x05, 0xFE, 0xB3, 0x03, 0x05, 0xFE, 0xB4, 0x03, 0x05, 0xFE, 0xB5, 0x03, 0x05, 0xFE, 0xB6, 0x03, +/* 00017F90 */ 0x05, 0xFE, 0xB7, 0x03, 0x05, 0xFE, 0xB8, 0x03, 0x05, 0xFE, 0xB9, 0x03, 0x05, 0xFE, 0xBA, 0x03, +/* 00017FA0 */ 0x05, 0xFE, 0xBB, 0x03, 0x05, 0xFE, 0xBC, 0x03, 0x06, 0xFE, 0x47, 0x03, 0x05, 0xFE, 0xBD, 0x03, +/* 00017FB0 */ 0x05, 0xFE, 0xBE, 0x03, 0x05, 0xFE, 0xBF, 0x03, 0x05, 0xFE, 0xC0, 0x03, 0x05, 0xFE, 0xC1, 0x03, +/* 00017FC0 */ 0x05, 0xFE, 0xC2, 0x03, 0x05, 0xFE, 0xC3, 0x03, 0x05, 0xFE, 0xC4, 0x03, 0x05, 0xFE, 0xC5, 0x03, +/* 00017FD0 */ 0x05, 0xFE, 0xC6, 0x03, 0x05, 0xFE, 0xC7, 0x03, 0x05, 0xFE, 0xC8, 0x03, 0x05, 0xFE, 0xC9, 0x03, +/* 00017FE0 */ 0x05, 0xFE, 0xCA, 0x03, 0x05, 0xFE, 0xCB, 0x03, 0x05, 0xFE, 0xCC, 0x03, 0x06, 0xFE, 0xCD, 0x03, +/* 00017FF0 */ 0x06, 0xFE, 0xCE, 0x03, 0x06, 0xFE, 0xCF, 0x03, 0xFE, 0xC7, 0x02, 0x4E, 0x26, 0x4E, 0x27, 0x4E, +/* 00018000 */ 0x28, 0x4E, 0x29, 0x4E, 0x2A, 0x4E, 0x2B, 0x4E, 0x2C, 0x4E, 0x2D, 0x4E, 0x2E, 0x4E, 0x2F, 0x4E, +/* 00018010 */ 0x30, 0x4E, 0x31, 0x4E, 0x32, 0x4E, 0x33, 0x4E, 0x34, 0x4E, 0x35, 0x4E, 0x36, 0x4E, 0x37, 0x4E, +/* 00018020 */ 0x38, 0x4E, 0x39, 0x4E, 0x3D, 0x96, 0x02, 0x3D, 0x4E, 0x3D, 0x96, 0x03, 0x3D, 0x45, 0x26, 0x02, +/* 00018030 */ 0x45, 0x27, 0x03, 0x45, 0x3D, 0x04, 0x01, 0x09, 0x01, 0x3E, 0x26, 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, +/* 00018040 */ 0x3D, 0x3D, 0x05, 0x01, 0x09, 0x01, 0x3E, 0x27, 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, 0x3D, 0x06, +/* 00018050 */ 0x45, 0x28, 0x3D, 0x45, 0x29, 0x07, 0x2D, 0x3D, 0x08, 0x09, 0x45, 0x2A, 0x3D, 0x45, 0x3D, 0x0A, +/* 00018060 */ 0x01, 0x09, 0x01, 0x3E, 0x29, 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, 0x3D, 0x05, 0x01, 0x09, 0x01, +/* 00018070 */ 0x3E, 0x2A, 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, 0x3D, 0x0B, 0x45, 0x2B, 0x3D, 0x45, 0x3D, 0x0C, +/* 00018080 */ 0x01, 0x09, 0x01, 0x3E, 0x28, 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, 0x3D, 0x0D, 0x45, 0x2C, 0x3D, +/* 00018090 */ 0x45, 0x3D, 0x0A, 0x01, 0x09, 0x01, 0x3E, 0x27, 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, 0x3D, 0x0E, +/* 000180A0 */ 0x45, 0x2D, 0x3D, 0x45, 0x3D, 0x0A, 0x01, 0x09, 0x01, 0x3E, 0x2D, 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, +/* 000180B0 */ 0x3D, 0x3D, 0x0F, 0x01, 0x09, 0x01, 0x3E, 0x28, 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, 0x3D, 0x10, +/* 000180C0 */ 0x45, 0x2E, 0x3D, 0x45, 0x3D, 0x0A, 0x01, 0x09, 0x01, 0x3E, 0x28, 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, +/* 000180D0 */ 0x3D, 0x3D, 0x11, 0x01, 0x09, 0x01, 0x3E, 0x27, 0x2D, 0x3D, 0x3D, 0x3E, 0x01, 0x09, 0x01, 0x3E, +/* 000180E0 */ 0x28, 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, 0x3D, 0x13, 0x45, 0x2F, 0x3D, 0x45, 0x3D, 0x0A, 0x01, +/* 000180F0 */ 0x09, 0x01, 0x3E, 0x26, 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, 0x3D, 0x14, 0x01, 0x09, 0x01, 0x3E, +/* 00018100 */ 0x27, 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, 0x3D, 0x13, 0x45, 0x30, 0x3D, 0x45, 0x3D, 0x0A, 0x01, +/* 00018110 */ 0x09, 0x01, 0x3E, 0x26, 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, 0x3D, 0x15, 0x45, 0x31, 0x3D, 0x45, +/* 00018120 */ 0x3D, 0x0A, 0x01, 0x09, 0x01, 0x3E, 0x26, 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, 0x3D, 0x16, 0x01, +/* 00018130 */ 0x09, 0x01, 0x3E, 0x26, 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, 0x3D, 0x17, 0x45, 0x32, 0x3D, 0x01, +/* 00018140 */ 0x09, 0x01, 0x3D, 0x26, 0x2D, 0x3D, 0x3D, 0x18, 0x2D, 0x3D, 0x0A, 0x3D, 0x45, 0x3E, 0x19, 0x01, +/* 00018150 */ 0x09, 0x01, 0x3F, 0x32, 0x2D, 0x3E, 0x3E, 0x3F, 0x2D, 0x3E, 0x3E, 0x1A, 0x2D, 0x3D, 0x3D, 0x3E, +/* 00018160 */ 0x45, 0x3E, 0x05, 0x01, 0x09, 0x01, 0x3F, 0x26, 0x2D, 0x3E, 0x3E, 0x3F, 0x2D, 0x3E, 0x3E, 0x1B, +/* 00018170 */ 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, 0x3D, 0x0B, 0x45, 0x33, 0x3D, 0x45, 0x3D, 0x1C, 0x01, 0x09, +/* 00018180 */ 0x01, 0x3E, 0x33, 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, 0x3D, 0x0B, 0x45, 0x3E, 0x1D, 0x01, 0x09, +/* 00018190 */ 0x01, 0x3F, 0x31, 0x2D, 0x3E, 0x3E, 0x3F, 0x2D, 0x3E, 0x3E, 0x1E, 0x2D, 0x3D, 0x3D, 0x3E, 0x45, +/* 000181A0 */ 0x3E, 0x1D, 0x01, 0x09, 0x01, 0x3F, 0x30, 0x2D, 0x3E, 0x3E, 0x3F, 0x2D, 0x3E, 0x3E, 0x1E, 0x2D, +/* 000181B0 */ 0x3D, 0x3D, 0x3E, 0x45, 0x34, 0x3D, 0x45, 0x3D, 0x1F, 0x01, 0x09, 0x01, 0x3E, 0x2F, 0x2D, 0x3D, +/* 000181C0 */ 0x3D, 0x3E, 0x2D, 0x3D, 0x3D, 0x20, 0x45, 0x3E, 0x1F, 0x01, 0x09, 0x01, 0x3F, 0x2E, 0x2D, 0x3E, +/* 000181D0 */ 0x3E, 0x3F, 0x2D, 0x3E, 0x3E, 0x20, 0x2D, 0x3D, 0x3D, 0x3E, 0x45, 0x3E, 0x19, 0x01, 0x09, 0x01, +/* 000181E0 */ 0x3F, 0x2C, 0x2D, 0x3E, 0x3E, 0x3F, 0x2D, 0x3E, 0x3E, 0x21, 0x2D, 0x3D, 0x3D, 0x3E, 0x45, 0x35, +/* 000181F0 */ 0x3D, 0x45, 0x3D, 0x22, 0x01, 0x09, 0x01, 0x3E, 0x34, 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, 0x3D, +/* 00018200 */ 0x22, 0x01, 0x09, 0x01, 0x3E, 0x35, 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, 0x3D, 0x22, 0x45, 0x36, +/* 00018210 */ 0x3D, 0x45, 0x3D, 0x0A, 0x01, 0x09, 0x01, 0x3E, 0x36, 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, 0x3D, +/* 00018220 */ 0x05, 0x01, 0x09, 0x01, 0x3E, 0x2C, 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, 0x3D, 0x05, 0x01, 0x09, +/* 00018230 */ 0x01, 0x3E, 0x2B, 0x2D, 0x3D, 0x3D, 0x3E, 0x2D, 0x3D, 0x3D, 0x0B, 0x45, 0x37, 0x3D, 0x8E, 0x02, +/* 00018240 */ 0x0A, 0x3D, 0x07, 0x03, 0x00, 0x45, 0x3E, 0x23, 0x01, 0x09, 0x01, 0x3F, 0x34, 0x2D, 0x3E, 0x3E, +/* 00018250 */ 0x3F, 0x2D, 0x3E, 0x3E, 0x24, 0x59, 0x01, 0x3E, 0x59, 0x02, 0x25, 0xC4, 0x03, 0x3D, 0x3D, 0x45, +/* 00018260 */ 0x38, 0x3D, 0x8E, 0x02, 0x0A, 0x3D, 0x07, 0x03, 0x00, 0x45, 0x3E, 0x23, 0x01, 0x09, 0x01, 0x3F, +/* 00018270 */ 0x35, 0x2D, 0x3E, 0x3E, 0x3F, 0x2D, 0x3E, 0x3E, 0x24, 0x59, 0x01, 0x3E, 0x59, 0x02, 0x25, 0xC4, +/* 00018280 */ 0x03, 0x3D, 0x3D, 0x45, 0x39, 0x3D, 0x8E, 0x02, 0x0A, 0x3D, 0x07, 0x03, 0x00, 0x45, 0x3E, 0x23, +/* 00018290 */ 0x01, 0x09, 0x01, 0x3F, 0x37, 0x2D, 0x3E, 0x3E, 0x3F, 0x2D, 0x3E, 0x3E, 0x24, 0x59, 0x01, 0x3E, +/* 000182A0 */ 0x59, 0x02, 0x25, 0xC4, 0x03, 0x3D, 0x3D, 0x96, 0x02, 0x3D, 0x8E, 0x02, 0x02, 0x3D, 0x07, 0x01, +/* 000182B0 */ 0x00, 0xC4, 0x01, 0x3D, 0x3D, 0x96, 0x03, 0x3D, 0xD6, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, +/* 000182C0 */ 0x24, 0x00, 0xFE, 0x2A, 0x56, 0x18, 0x32, 0x00, 0x00, 0x00, 0x03, 0x00, 0x1F, 0x00, 0x03, 0x00, +/* 000182D0 */ 0x1F, 0x00, 0x20, 0x00, 0x33, 0x00, 0x03, 0x00, 0x77, 0x00, 0x07, 0x00, 0xC0, 0x00, 0x20, 0x00, +/* 000182E0 */ 0x44, 0x00, 0x13, 0x00, 0x7D, 0x00, 0x13, 0x00, 0x94, 0x00, 0x20, 0x00, 0x83, 0x00, 0x29, 0x00, +/* 000182F0 */ 0x83, 0x00, 0x20, 0x00, 0x74, 0x00, 0x13, 0x00, 0x6A, 0x00, 0x20, 0x00, 0x7A, 0x00, 0x3C, 0x00, +/* 00018300 */ 0xAF, 0x03, 0x3B, 0x00, 0x4C, 0x01, 0x3B, 0x00, 0x5A, 0x01, 0x20, 0x00, 0x4B, 0x00, 0x2D, 0x00, +/* 00018310 */ 0xBA, 0x00, 0x24, 0x00, 0x74, 0x00, 0x24, 0x00, 0x92, 0x00, 0x24, 0x00, 0x93, 0x00, 0x0E, 0x00, +/* 00018320 */ 0x34, 0x00, 0x08, 0x00, 0x59, 0x08, 0x00, 0x2B, 0x83, 0x01, 0x00, 0x7F, 0x7C, 0x00, 0xC3, 0x43, +/* 00018330 */ 0x50, 0x13, 0x00, 0xFE, 0x38, 0x02, 0x0F, 0xA2, 0x41, 0xD1, 0x00, 0x35, 0xFE, 0xB3, 0x64, 0xFE, +/* 00018340 */ 0xB3, 0x64, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0xB3, 0x64, 0xFE, 0x4C, 0x08, 0xFE, 0x4C, +/* 00018350 */ 0x08, 0x10, 0x0B, 0x13, 0x09, 0x8B, 0x80, 0x2F, 0x03, 0x03, 0x02, 0x15, 0x15, 0x15, 0x15, 0x03, +/* 00018360 */ 0x12, 0x13, 0xFE, 0x10, 0x01, 0xFE, 0xB0, 0x01, 0xFE, 0x39, 0x01, 0xFE, 0x5D, 0x01, 0x07, 0x01, +/* 00018370 */ 0x01, 0x01, 0x02, 0x06, 0xFE, 0x95, 0x03, 0x01, 0x03, 0x01, 0x04, 0x01, 0x05, 0x01, 0x00, 0x06, +/* 00018380 */ 0xFE, 0xD0, 0x03, 0xFE, 0xD4, 0x01, 0x4E, 0x0C, 0x4E, 0x0D, 0x4E, 0x0E, 0x4E, 0x0F, 0x4E, 0x10, +/* 00018390 */ 0x4E, 0x11, 0x8E, 0x01, 0x03, 0x17, 0x4A, 0x17, 0x6C, 0x16, 0x17, 0x00, 0x07, 0x02, 0x00, 0x59, +/* 000183A0 */ 0x00, 0x17, 0x59, 0x01, 0x0B, 0x1F, 0x02, 0x16, 0x16, 0x45, 0x0C, 0x16, 0x0E, 0x06, 0x00, 0x0C, +/* 000183B0 */ 0x45, 0x00, 0x0C, 0x09, 0xA2, 0x01, 0x8E, 0x03, 0x36, 0x17, 0x4A, 0x17, 0x6C, 0x16, 0x17, 0x01, +/* 000183C0 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x17, 0x59, 0x01, 0x0B, 0x8E, 0x01, 0x02, 0x18, 0x4A, 0x18, 0x59, +/* 000183D0 */ 0x02, 0x18, 0x1F, 0x03, 0x16, 0x16, 0x45, 0x0D, 0x16, 0x0F, 0x06, 0x00, 0x0D, 0x45, 0x00, 0x02, +/* 000183E0 */ 0x09, 0x75, 0x01, 0x8E, 0x03, 0x36, 0x17, 0x4A, 0x17, 0x6C, 0x16, 0x17, 0x02, 0x07, 0x01, 0x00, +/* 000183F0 */ 0x59, 0x00, 0x17, 0x1F, 0x01, 0x16, 0x16, 0x45, 0x0E, 0x16, 0x97, 0x16, 0x0D, 0x03, 0x76, 0x16, +/* 00018400 */ 0x0E, 0x03, 0x97, 0x16, 0x0D, 0x03, 0x76, 0x16, 0x0E, 0x04, 0x97, 0x16, 0x0D, 0x04, 0x0E, 0x1C, +/* 00018410 */ 0x00, 0x16, 0x97, 0x16, 0x0D, 0x04, 0x76, 0x16, 0x0E, 0x05, 0x5E, 0x17, 0x0E, 0x06, 0x97, 0x18, +/* 00018420 */ 0x0D, 0x04, 0x2D, 0x18, 0x05, 0x18, 0x2D, 0x16, 0x17, 0x18, 0x76, 0x16, 0x0E, 0x07, 0x97, 0x16, +/* 00018430 */ 0x0D, 0x06, 0x0E, 0x1C, 0x00, 0x16, 0x97, 0x16, 0x0D, 0x06, 0x76, 0x16, 0x0E, 0x08, 0x5E, 0x17, +/* 00018440 */ 0x0E, 0x09, 0x97, 0x18, 0x0D, 0x06, 0x2D, 0x18, 0x05, 0x18, 0x2D, 0x16, 0x17, 0x18, 0x76, 0x16, +/* 00018450 */ 0x0E, 0x0A, 0x97, 0x16, 0x0D, 0x07, 0x0E, 0x08, 0x00, 0x16, 0x97, 0x16, 0x0D, 0x07, 0x76, 0x16, +/* 00018460 */ 0x0E, 0x0B, 0x97, 0x16, 0x0D, 0x08, 0x0E, 0xCC, 0x00, 0x16, 0x97, 0x16, 0x0D, 0x08, 0x76, 0x16, +/* 00018470 */ 0x0E, 0x0C, 0x8E, 0x03, 0x36, 0x17, 0x4A, 0x17, 0x6C, 0x16, 0x17, 0x0D, 0x07, 0x03, 0x00, 0x59, +/* 00018480 */ 0x00, 0x17, 0x97, 0x18, 0x0D, 0x08, 0x59, 0x01, 0x18, 0x59, 0x02, 0x05, 0x1F, 0x03, 0x16, 0x16, +/* 00018490 */ 0x45, 0x0F, 0x16, 0x45, 0x10, 0x09, 0xEC, 0x00, 0xA6, 0x16, 0x0F, 0x0E, 0x12, 0x03, 0x00, 0x10, +/* 000184A0 */ 0x16, 0x09, 0x92, 0x00, 0x97, 0x16, 0x0F, 0x10, 0x15, 0x03, 0x00, 0x16, 0x0A, 0x09, 0x03, 0x00, +/* 000184B0 */ 0x09, 0x7D, 0x00, 0xA8, 0x16, 0x45, 0x11, 0x16, 0x2D, 0x16, 0x10, 0x03, 0x45, 0x11, 0x16, 0xEC, +/* 000184C0 */ 0x01, 0xA6, 0x16, 0x0F, 0x0F, 0x12, 0x03, 0x00, 0x11, 0x16, 0x09, 0x16, 0x00, 0x97, 0x16, 0x0F, +/* 000184D0 */ 0x11, 0xA6, 0x16, 0x16, 0x10, 0x11, 0x03, 0x00, 0x16, 0x03, 0x09, 0x06, 0x00, 0x26, 0x11, 0x11, +/* 000184E0 */ 0x09, 0xDC, 0xFF, 0x2D, 0x16, 0x10, 0x03, 0x11, 0x03, 0x00, 0x11, 0x16, 0x09, 0x3E, 0x00, 0x45, +/* 000184F0 */ 0x16, 0x0E, 0x8E, 0x03, 0x36, 0x18, 0x4A, 0x18, 0x6C, 0x17, 0x18, 0x11, 0x07, 0x03, 0x00, 0x59, +/* 00018500 */ 0x00, 0x18, 0x8E, 0x03, 0x36, 0x1A, 0x4A, 0x1A, 0x6C, 0x19, 0x1A, 0x12, 0x07, 0x04, 0x00, 0x59, +/* 00018510 */ 0x00, 0x1A, 0x59, 0x01, 0x0F, 0x59, 0x02, 0x10, 0x59, 0x03, 0x11, 0x1F, 0x04, 0x19, 0x19, 0x59, +/* 00018520 */ 0x01, 0x19, 0x59, 0x02, 0x05, 0x1F, 0x03, 0x17, 0x17, 0x76, 0x17, 0x16, 0x13, 0x09, 0x06, 0x00, +/* 00018530 */ 0x26, 0x10, 0x10, 0x09, 0x60, 0xFF, 0x8E, 0x01, 0x03, 0x17, 0x4A, 0x17, 0x6C, 0x16, 0x17, 0x14, +/* 00018540 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x17, 0x59, 0x01, 0x0B, 0x59, 0x02, 0x0E, 0x1F, 0x03, 0xFF, 0x16, +/* 00018550 */ 0x45, 0x00, 0x0E, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x98, 0x01, 0xFE, 0x01, 0x01, +/* 00018560 */ 0x69, 0xFE, 0xD1, 0x03, 0xFE, 0x1E, 0x02, 0xFE, 0xD2, 0x03, 0xFE, 0x1E, 0x02, 0xFE, 0x1E, 0x02, +/* 00018570 */ 0xFE, 0xD3, 0x03, 0xFE, 0x1E, 0x02, 0xFE, 0x1E, 0x02, 0xFE, 0xD4, 0x03, 0xFE, 0xD5, 0x03, 0xFE, +/* 00018580 */ 0x56, 0x01, 0xD1, 0xD1, 0xD1, 0xCC, 0xFE, 0x50, 0x01, 0xFE, 0x96, 0x03, 0xFE, 0x9B, 0x01, 0xFE, +/* 00018590 */ 0xD4, 0x64, 0x23, 0x0C, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x3C, 0x00, 0x04, 0x00, 0x1E, 0x00, 0x06, +/* 000185A0 */ 0x00, 0x2A, 0x00, 0x23, 0x00, 0x39, 0x00, 0x04, 0x00, 0x1E, 0x00, 0x06, 0x00, 0x28, 0x00, 0x17, +/* 000185B0 */ 0x00, 0x24, 0x00, 0x08, 0x00, 0x25, 0x00, 0x08, 0x00, 0x21, 0x00, 0x08, 0x00, 0x20, 0x00, 0x08, +/* 000185C0 */ 0x00, 0x27, 0x00, 0x14, 0x00, 0x37, 0x00, 0x08, 0x00, 0x20, 0x00, 0x08, 0x00, 0x27, 0x00, 0x14, +/* 000185D0 */ 0x00, 0x37, 0x00, 0x08, 0x00, 0x20, 0x00, 0x08, 0x00, 0x34, 0x00, 0x08, 0x00, 0x20, 0x00, 0x08, +/* 000185E0 */ 0x00, 0x76, 0x00, 0x21, 0x00, 0x44, 0x00, 0x05, 0x00, 0x0B, 0x00, 0x0C, 0x00, 0x36, 0x00, 0x0C, +/* 000185F0 */ 0x00, 0x39, 0x00, 0x03, 0x00, 0x35, 0x00, 0x05, 0x00, 0x20, 0x00, 0x09, 0x00, 0x0B, 0x00, 0x1C, +/* 00018600 */ 0x00, 0x3B, 0x00, 0x06, 0x00, 0x3B, 0x01, 0x0C, 0x00, 0xFC, 0x00, 0x3E, 0x00, 0xCC, 0x00, 0x03, +/* 00018610 */ 0x00, 0x0E, 0xFC, 0x06, 0x00, 0x26, 0x04, 0x1A, 0x00, 0x33, 0x00, 0x08, 0x00, 0x14, 0x00, 0x00, +/* 00018620 */ 0x7F, 0x4C, 0x00, 0x00, 0x20, 0x10, 0x03, 0x00, 0xFE, 0xF2, 0x01, 0x04, 0xA1, 0x41, 0xC1, 0x00, +/* 00018630 */ 0xFE, 0x51, 0x03, 0x33, 0xFE, 0x02, 0x50, 0xFE, 0x02, 0x50, 0x41, 0xFE, 0x00, 0x90, 0x01, 0x01, +/* 00018640 */ 0xFE, 0x02, 0x50, 0x55, 0x55, 0x02, 0x02, 0x03, 0x05, 0x05, 0x02, 0x01, 0x02, 0x0D, 0xE2, 0x03, +/* 00018650 */ 0x00, 0x01, 0x43, 0x01, 0x01, 0x0E, 0x03, 0xA8, 0x00, 0x24, 0x00, 0x0A, 0xFE, 0xAB, 0x03, 0x01, +/* 00018660 */ 0xFE, 0x30, 0x50, 0x02, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x26, 0x00, 0x00, 0x7F, 0x5C, 0x00, +/* 00018670 */ 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0xE4, 0x01, 0x1C, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x5B, 0x03, +/* 00018680 */ 0x32, 0xFE, 0x1F, 0x4E, 0xFE, 0x1F, 0x4E, 0x01, 0xFE, 0x00, 0x90, 0x06, 0x06, 0xFE, 0x1F, 0x4E, +/* 00018690 */ 0xFE, 0xC2, 0x01, 0xFE, 0xC2, 0x01, 0x0B, 0x06, 0x0D, 0x08, 0x39, 0x35, 0x02, 0x04, 0x04, 0x04, +/* 000186A0 */ 0x04, 0x04, 0x0C, 0x08, 0x06, 0xFE, 0xA8, 0x03, 0x05, 0xFE, 0xA9, 0x03, 0x06, 0xFE, 0xAA, 0x03, +/* 000186B0 */ 0xC0, 0x4E, 0x0B, 0x97, 0x0D, 0x06, 0x07, 0x45, 0x0B, 0x0D, 0xA8, 0x0D, 0x15, 0x03, 0x00, 0x0B, +/* 000186C0 */ 0x0D, 0x09, 0xA3, 0x00, 0x8E, 0x02, 0x24, 0x0E, 0x6C, 0x0D, 0x0E, 0x00, 0x07, 0x02, 0x00, 0x59, +/* 000186D0 */ 0x00, 0x0E, 0x59, 0x01, 0x0B, 0x1F, 0x02, 0x0D, 0x0D, 0x45, 0x0B, 0x0D, 0x8E, 0x02, 0x36, 0x0E, +/* 000186E0 */ 0x4A, 0x0E, 0x6C, 0x0D, 0x0E, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0E, 0x59, 0x01, 0x0B, 0x1F, +/* 000186F0 */ 0x02, 0x0D, 0x0D, 0x0F, 0x0D, 0x00, 0x0D, 0x12, 0x08, 0x00, 0x0B, 0x08, 0x11, 0x03, 0x00, 0x0B, +/* 00018700 */ 0x09, 0x09, 0x49, 0x00, 0x8E, 0x02, 0x03, 0x0E, 0x6C, 0x0D, 0x0E, 0x02, 0x07, 0x04, 0x00, 0x59, +/* 00018710 */ 0x00, 0x0E, 0x8E, 0x02, 0x0C, 0x0F, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x0B, 0x1F, +/* 00018720 */ 0x02, 0x0F, 0x0F, 0x59, 0x01, 0x0F, 0x59, 0x02, 0x07, 0x45, 0x0F, 0x03, 0x01, 0x09, 0x01, 0x10, +/* 00018730 */ 0x08, 0x2D, 0x0F, 0x0F, 0x10, 0x2D, 0x0F, 0x0F, 0x04, 0x01, 0x09, 0x01, 0x10, 0x09, 0x2D, 0x0F, +/* 00018740 */ 0x0F, 0x10, 0x2D, 0x0F, 0x0F, 0x05, 0x59, 0x03, 0x0F, 0x1F, 0x04, 0xFF, 0x0D, 0x8E, 0x02, 0x36, +/* 00018750 */ 0x0E, 0x4A, 0x0E, 0x6C, 0x0D, 0x0E, 0x03, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0E, 0x59, 0x01, 0x0B, +/* 00018760 */ 0x1F, 0x02, 0x00, 0x0D, 0x09, 0x08, 0x00, 0x45, 0x00, 0x0A, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, +/* 00018770 */ 0x00, 0xFE, 0x23, 0x03, 0xC4, 0xFE, 0xAC, 0x02, 0x26, 0xFE, 0x62, 0x4E, 0x08, 0x02, 0x00, 0x00, +/* 00018780 */ 0x00, 0x07, 0x00, 0x27, 0x00, 0x0A, 0x00, 0x27, 0x00, 0x18, 0x00, 0x2E, 0x00, 0x28, 0x00, 0x4C, +/* 00018790 */ 0x00, 0x49, 0x00, 0x77, 0x00, 0x1A, 0x00, 0x2A, 0x00, 0x08, 0x00, 0x15, 0x00, 0x00, 0x7F, 0x5C, +/* 000187A0 */ 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xFE, 0xB9, 0x01, 0x04, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0x50, +/* 000187B0 */ 0x03, 0x31, 0xFE, 0xB4, 0x47, 0xFE, 0xB4, 0x47, 0x01, 0xFE, 0x00, 0x90, 0x06, 0x06, 0xFE, 0xB4, +/* 000187C0 */ 0x47, 0xFE, 0xDD, 0x02, 0xFE, 0xDD, 0x02, 0x0C, 0x0A, 0x11, 0x09, 0x53, 0x4C, 0x02, 0x04, 0x06, +/* 000187D0 */ 0x06, 0x06, 0x06, 0x10, 0x06, 0xFE, 0xA2, 0x03, 0x06, 0xFE, 0xA3, 0x03, 0x06, 0xFE, 0xA4, 0x03, +/* 000187E0 */ 0x01, 0xFF, 0x08, 0x05, 0xFE, 0xA5, 0x03, 0x05, 0xFE, 0xA6, 0x03, 0x05, 0xFE, 0xA7, 0x03, 0xFE, +/* 000187F0 */ 0x16, 0x01, 0x4E, 0x0F, 0x97, 0x11, 0x0A, 0x0B, 0x45, 0x0F, 0x11, 0xA8, 0x11, 0x15, 0x03, 0x00, +/* 00018800 */ 0x0F, 0x11, 0x09, 0xF9, 0x00, 0x0C, 0x03, 0x00, 0x0C, 0x02, 0x09, 0x18, 0x00, 0x8E, 0x02, 0x24, +/* 00018810 */ 0x12, 0x6C, 0x11, 0x12, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x12, 0x59, 0x01, 0x0F, 0x1F, 0x02, +/* 00018820 */ 0x11, 0x11, 0x45, 0x0F, 0x11, 0x0C, 0x03, 0x00, 0x0C, 0x03, 0x09, 0x18, 0x00, 0x8E, 0x02, 0x24, +/* 00018830 */ 0x12, 0x6C, 0x11, 0x12, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x12, 0x59, 0x01, 0x0F, 0x1F, 0x02, +/* 00018840 */ 0x11, 0x11, 0x45, 0x0F, 0x11, 0x0C, 0x03, 0x00, 0x0C, 0x04, 0x09, 0x18, 0x00, 0x8E, 0x02, 0x24, +/* 00018850 */ 0x12, 0x6C, 0x11, 0x12, 0x02, 0x07, 0x02, 0x00, 0x59, 0x00, 0x12, 0x59, 0x01, 0x0F, 0x1F, 0x02, +/* 00018860 */ 0x11, 0x11, 0x45, 0x0F, 0x11, 0xA8, 0x11, 0x15, 0x03, 0x00, 0x0D, 0x11, 0x09, 0x89, 0x00, 0x8E, +/* 00018870 */ 0x02, 0x36, 0x12, 0x4A, 0x12, 0x6C, 0x11, 0x12, 0x03, 0x07, 0x03, 0x00, 0x59, 0x00, 0x12, 0x59, +/* 00018880 */ 0x01, 0x0D, 0x59, 0x02, 0x0F, 0x1F, 0x03, 0x11, 0x11, 0x0C, 0x03, 0x00, 0x11, 0x05, 0x09, 0x67, +/* 00018890 */ 0x00, 0x8E, 0x02, 0x03, 0x12, 0x6C, 0x11, 0x12, 0x04, 0x07, 0x04, 0x00, 0x59, 0x00, 0x12, 0x8E, +/* 000188A0 */ 0x02, 0x0C, 0x13, 0x07, 0x02, 0x00, 0x59, 0x00, 0x06, 0x59, 0x01, 0x0F, 0x1F, 0x02, 0x13, 0x13, +/* 000188B0 */ 0x59, 0x01, 0x13, 0x8E, 0x02, 0x0C, 0x13, 0x07, 0x02, 0x00, 0x59, 0x00, 0x06, 0x59, 0x01, 0x0B, +/* 000188C0 */ 0x1F, 0x02, 0x13, 0x13, 0x59, 0x02, 0x13, 0x45, 0x13, 0x07, 0x8E, 0x02, 0x36, 0x15, 0x4A, 0x15, +/* 000188D0 */ 0x6C, 0x14, 0x15, 0x05, 0x07, 0x03, 0x00, 0x59, 0x00, 0x15, 0x59, 0x01, 0x0D, 0x59, 0x02, 0x09, +/* 000188E0 */ 0x1F, 0x03, 0x14, 0x14, 0x01, 0x09, 0x01, 0x15, 0x14, 0x2D, 0x13, 0x13, 0x15, 0x2D, 0x13, 0x13, +/* 000188F0 */ 0x08, 0x59, 0x03, 0x13, 0x1F, 0x04, 0xFF, 0x11, 0x45, 0x00, 0x0F, 0x09, 0x08, 0x00, 0x45, 0x00, +/* 00018900 */ 0x0E, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x24, 0x03, 0xFE, 0x22, 0x03, 0xFE, 0x23, +/* 00018910 */ 0x03, 0xFE, 0x0F, 0x03, 0xFE, 0xAC, 0x02, 0xCC, 0xFE, 0xFC, 0x47, 0x0D, 0x02, 0x00, 0x00, 0x00, +/* 00018920 */ 0x07, 0x00, 0x28, 0x00, 0x0A, 0x00, 0x27, 0x00, 0x08, 0x00, 0x29, 0x00, 0x18, 0x00, 0x45, 0x00, +/* 00018930 */ 0x08, 0x00, 0x28, 0x00, 0x18, 0x00, 0x3D, 0x00, 0x08, 0x00, 0x28, 0x00, 0x18, 0x00, 0x3D, 0x00, +/* 00018940 */ 0x2C, 0x00, 0x53, 0x00, 0x67, 0x00, 0x84, 0x00, 0x06, 0x00, 0x21, 0x00, 0x08, 0x00, 0x15, 0x00, +/* 00018950 */ 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x07, 0x00, 0xFE, 0xAD, 0x01, 0x08, 0xA2, 0x41, 0xC1, +/* 00018960 */ 0x01, 0xFE, 0x26, 0x03, 0x30, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0xA0, 0x46, 0xFE, 0xA0, 0x46, +/* 00018970 */ 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0xA0, 0x46, 0xDF, 0xDF, 0x06, 0x06, 0x0A, 0x04, 0x20, +/* 00018980 */ 0x1C, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x09, 0x01, 0x00, 0x01, 0x02, 0x01, 0x35, 0x01, 0x01, +/* 00018990 */ 0x63, 0x4E, 0x07, 0x4E, 0x08, 0x8E, 0x02, 0x24, 0x0B, 0x6C, 0x0A, 0x0B, 0x00, 0x07, 0x02, 0x00, +/* 000189A0 */ 0x59, 0x00, 0x0B, 0x59, 0x01, 0x06, 0x1F, 0x02, 0x0A, 0x0A, 0x45, 0x07, 0x0A, 0x13, 0x03, 0x00, +/* 000189B0 */ 0x07, 0x02, 0x09, 0x06, 0x00, 0x45, 0x00, 0x02, 0x09, 0x37, 0x00, 0x8E, 0x02, 0x36, 0x0B, 0x4A, +/* 000189C0 */ 0x0B, 0x6C, 0x0A, 0x0B, 0x01, 0x07, 0x03, 0x00, 0x59, 0x00, 0x0B, 0x59, 0x01, 0x03, 0x59, 0x02, +/* 000189D0 */ 0x04, 0x1F, 0x03, 0x0A, 0x0A, 0x33, 0x0A, 0x0A, 0x05, 0x45, 0x08, 0x0A, 0x12, 0x03, 0x00, 0x08, +/* 000189E0 */ 0x07, 0x09, 0x06, 0x00, 0x45, 0x00, 0x08, 0x09, 0x03, 0x00, 0x46, 0x00, 0x07, 0x09, 0x02, 0x00, +/* 000189F0 */ 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x25, 0x03, 0x2C, 0xFE, 0xBA, 0x46, 0x06, 0x04, 0x00, 0x00, 0x00, +/* 00018A00 */ 0x18, 0x00, 0x2F, 0x00, 0x08, 0x00, 0x20, 0x00, 0x06, 0x00, 0x25, 0x00, 0x21, 0x00, 0x2A, 0x00, +/* 00018A10 */ 0x16, 0x00, 0x26, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x07, 0x00, 0xFE, 0x9D, 0x01, +/* 00018A20 */ 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x25, 0x03, 0x2F, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0x09, +/* 00018A30 */ 0x45, 0xFE, 0x09, 0x45, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0x09, 0x45, 0xFE, 0x8C, 0x01, +/* 00018A40 */ 0xFE, 0x8C, 0x01, 0x08, 0x04, 0x08, 0x06, 0x33, 0x2E, 0x02, 0x04, 0x02, 0x02, 0x02, 0x02, 0x07, +/* 00018A50 */ 0x08, 0x01, 0x00, 0xA2, 0x4E, 0x05, 0x4E, 0x06, 0x8E, 0x02, 0x0B, 0x08, 0x07, 0x02, 0x00, 0x59, +/* 00018A60 */ 0x00, 0x02, 0x59, 0x01, 0x04, 0x1F, 0x02, 0x08, 0x08, 0x45, 0x05, 0x08, 0x8E, 0x02, 0x21, 0x08, +/* 00018A70 */ 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x05, 0x1F, 0x02, 0x08, 0x08, 0x0E, 0x09, 0x00, +/* 00018A80 */ 0x08, 0x45, 0x00, 0x03, 0x09, 0x6D, 0x00, 0x09, 0x20, 0x00, 0x14, 0x15, 0x00, 0x05, 0x03, 0x8E, +/* 00018A90 */ 0x02, 0x20, 0x08, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x05, 0x1F, 0x02, 0x08, 0x08, +/* 00018AA0 */ 0x0F, 0x06, 0x00, 0x08, 0x45, 0x00, 0x05, 0x09, 0x4A, 0x00, 0x8E, 0x02, 0x36, 0x09, 0x4A, 0x09, +/* 00018AB0 */ 0x6C, 0x08, 0x09, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x09, 0x8E, 0x02, 0x36, 0x0B, 0x4A, 0x0B, +/* 00018AC0 */ 0x6C, 0x0A, 0x0B, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x0B, 0x59, 0x01, 0x05, 0x1F, 0x02, 0x0A, +/* 00018AD0 */ 0x0A, 0x59, 0x01, 0x0A, 0x1F, 0x02, 0x08, 0x08, 0x45, 0x06, 0x08, 0x12, 0x03, 0x00, 0x05, 0x03, +/* 00018AE0 */ 0x09, 0x09, 0x00, 0x28, 0x00, 0x06, 0x09, 0x0B, 0x00, 0x09, 0x06, 0x00, 0x45, 0x00, 0x06, 0x09, +/* 00018AF0 */ 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x26, 0x1D, 0xFE, 0x24, 0x45, 0x0A, 0x04, 0x00, 0x00, 0x00, +/* 00018B00 */ 0x14, 0x00, 0x26, 0x00, 0x15, 0x00, 0x25, 0x00, 0x09, 0x00, 0x1D, 0x00, 0x1A, 0x00, 0x39, 0x00, +/* 00018B10 */ 0x06, 0x00, 0x2A, 0x00, 0x31, 0x00, 0x30, 0x00, 0x08, 0x00, 0x22, 0x00, 0x09, 0x00, 0x31, 0x00, +/* 00018B20 */ 0x08, 0x00, 0x22, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0x01, 0x00, 0x10, 0x07, 0x00, 0xFE, 0x99, 0x01, +/* 00018B30 */ 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x24, 0x03, 0x2E, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0xA2, +/* 00018B40 */ 0x44, 0xFE, 0xA2, 0x44, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0xA2, 0x44, 0x5C, 0x5C, 0x03, +/* 00018B50 */ 0x03, 0x05, 0x03, 0x10, 0x0F, 0x02, 0x01, 0x04, 0x08, 0x2D, 0xA8, 0x05, 0x15, 0x03, 0x00, 0x03, +/* 00018B60 */ 0x05, 0x09, 0x17, 0x00, 0x8E, 0x02, 0x08, 0x05, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, +/* 00018B70 */ 0x03, 0x1F, 0x02, 0x05, 0x05, 0x45, 0x00, 0x05, 0x09, 0x05, 0x00, 0xA8, 0x05, 0x46, 0x00, 0x05, +/* 00018B80 */ 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xC4, 0x44, 0x02, 0x00, 0x00, 0x00, 0x00, 0x2B, +/* 00018B90 */ 0x00, 0x39, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0x01, 0x00, 0x10, 0x07, 0x00, 0xFE, 0x95, 0x01, 0x08, +/* 00018BA0 */ 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x23, 0x03, 0x2D, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0x4A, 0x44, +/* 00018BB0 */ 0xFE, 0x4A, 0x44, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0x4A, 0x44, 0x4D, 0x4D, 0x03, 0x03, +/* 00018BC0 */ 0x05, 0x03, 0x10, 0x0F, 0x02, 0x01, 0x04, 0x08, 0x2D, 0xA8, 0x05, 0x15, 0x03, 0x00, 0x03, 0x05, +/* 00018BD0 */ 0x09, 0x17, 0x00, 0x8E, 0x02, 0x0B, 0x05, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x03, +/* 00018BE0 */ 0x1F, 0x02, 0x05, 0x05, 0x45, 0x00, 0x05, 0x09, 0x05, 0x00, 0xA9, 0x05, 0x46, 0x00, 0x05, 0x09, +/* 00018BF0 */ 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x64, 0x44, 0x02, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x00, +/* 00018C00 */ 0x32, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0x01, 0x00, 0x10, 0x07, 0x00, 0xFE, 0x91, 0x01, 0x08, 0xA2, +/* 00018C10 */ 0x41, 0xC1, 0x01, 0xFE, 0x22, 0x03, 0x2C, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0xEC, 0x43, 0xFE, +/* 00018C20 */ 0xEC, 0x43, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0xEC, 0x43, 0x53, 0x53, 0x03, 0x03, 0x05, +/* 00018C30 */ 0x03, 0x10, 0x0F, 0x02, 0x01, 0x04, 0x08, 0x2D, 0xA8, 0x05, 0x15, 0x03, 0x00, 0x03, 0x05, 0x09, +/* 00018C40 */ 0x17, 0x00, 0x8E, 0x02, 0x0C, 0x05, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0x59, 0x01, 0x03, 0x1F, +/* 00018C50 */ 0x02, 0x05, 0x05, 0x45, 0x00, 0x05, 0x09, 0x05, 0x00, 0xA8, 0x05, 0x46, 0x00, 0x05, 0x09, 0x02, +/* 00018C60 */ 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x06, 0x44, 0x02, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x38, +/* 00018C70 */ 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x07, 0x00, 0xFE, 0x8A, 0x01, 0x08, 0xA2, 0x41, +/* 00018C80 */ 0xC1, 0x01, 0xFE, 0x21, 0x03, 0x2B, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0x36, 0x43, 0xFE, 0x36, +/* 00018C90 */ 0x43, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0x36, 0x43, 0xAB, 0xAB, 0x04, 0x04, 0x06, 0x03, +/* 00018CA0 */ 0x17, 0x16, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x05, 0x07, 0x08, 0x47, 0x14, 0x03, 0x00, 0x04, +/* 00018CB0 */ 0x02, 0x09, 0x12, 0x00, 0x8E, 0x02, 0x03, 0x07, 0x6C, 0x06, 0x07, 0x00, 0x07, 0x01, 0x00, 0x59, +/* 00018CC0 */ 0x00, 0x07, 0x1F, 0x01, 0xFF, 0x06, 0xA8, 0x06, 0x15, 0x03, 0x00, 0x04, 0x06, 0x09, 0x17, 0x00, +/* 00018CD0 */ 0x8E, 0x02, 0x09, 0x06, 0x07, 0x02, 0x00, 0x59, 0x00, 0x03, 0x59, 0x01, 0x04, 0x1F, 0x02, 0x06, +/* 00018CE0 */ 0x06, 0x45, 0x00, 0x06, 0x09, 0x05, 0x00, 0xA8, 0x06, 0x46, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA8, +/* 00018CF0 */ 0x00, 0x24, 0x00, 0xFE, 0xAA, 0x02, 0xFE, 0x50, 0x43, 0x04, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, +/* 00018D00 */ 0x22, 0x00, 0x12, 0x00, 0x36, 0x00, 0x2B, 0x00, 0x38, 0x00, 0x00, 0x7E, 0x5D, 0x00, 0xC1, 0x53, +/* 00018D10 */ 0x5A, 0x4B, 0x00, 0xFE, 0x4C, 0x01, 0x1A, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x5A, 0x03, 0x29, 0xFE, +/* 00018D20 */ 0x6C, 0x39, 0xFE, 0x6C, 0x39, 0x01, 0xFE, 0x00, 0x90, 0x05, 0x05, 0xFE, 0x6C, 0x39, 0xFE, 0xA5, +/* 00018D30 */ 0x09, 0xFE, 0xA5, 0x09, 0x05, 0xFE, 0xE0, 0x01, 0xFE, 0x98, 0x03, 0xFE, 0x99, 0x03, 0xFE, 0x9A, +/* 00018D40 */ 0x03, 0xFE, 0x9B, 0x03, 0x10, 0x0B, 0x16, 0x05, 0x7A, 0x76, 0x02, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, +/* 00018D50 */ 0x01, 0x02, 0x13, 0x14, 0x15, 0x16, 0x05, 0xFE, 0x9C, 0x03, 0x08, 0x06, 0xFE, 0x9D, 0x03, 0x07, +/* 00018D60 */ 0x05, 0xFE, 0x9E, 0x03, 0x01, 0x02, 0x05, 0xFE, 0x9F, 0x03, 0x01, 0xFF, 0x01, 0x00, 0xFE, 0x86, +/* 00018D70 */ 0x01, 0x96, 0x02, 0x0D, 0x4E, 0x0F, 0x4E, 0x10, 0x4E, 0x11, 0x4E, 0x12, 0x4E, 0x18, 0x96, 0x03, +/* 00018D80 */ 0x18, 0x4E, 0x18, 0x96, 0x04, 0x18, 0x4E, 0x18, 0x96, 0x05, 0x18, 0x4E, 0x18, 0x96, 0x06, 0x18, +/* 00018D90 */ 0x92, 0x02, 0x18, 0x5E, 0x18, 0x18, 0x00, 0x45, 0x0F, 0x18, 0xA8, 0x18, 0x96, 0x03, 0x18, 0x14, +/* 00018DA0 */ 0x03, 0x00, 0x0F, 0x02, 0x09, 0x1C, 0x00, 0x8E, 0x01, 0x09, 0x18, 0x4A, 0x18, 0x07, 0x03, 0x00, +/* 00018DB0 */ 0x59, 0x00, 0x03, 0x59, 0x01, 0x0B, 0x59, 0x02, 0x0C, 0x1F, 0x03, 0x18, 0x18, 0x96, 0x03, 0x18, +/* 00018DC0 */ 0x09, 0x19, 0x00, 0x8E, 0x01, 0x0A, 0x18, 0x4A, 0x18, 0x07, 0x03, 0x00, 0x59, 0x00, 0x03, 0x59, +/* 00018DD0 */ 0x01, 0x0B, 0x59, 0x02, 0x0C, 0x1F, 0x03, 0x18, 0x18, 0x96, 0x03, 0x18, 0x92, 0x03, 0x18, 0x5E, +/* 00018DE0 */ 0x18, 0x18, 0x01, 0x96, 0x04, 0x18, 0x8E, 0x02, 0x35, 0x18, 0x4A, 0x18, 0x07, 0x02, 0x00, 0x59, +/* 00018DF0 */ 0x00, 0x03, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x92, +/* 00018E00 */ 0x04, 0x1A, 0x7A, 0x1A, 0x19, 0x02, 0x59, 0x01, 0x19, 0x1F, 0x02, 0x18, 0x18, 0x96, 0x05, 0x18, +/* 00018E10 */ 0x96, 0x06, 0x06, 0x8E, 0x02, 0x36, 0x19, 0x4A, 0x19, 0x6C, 0x18, 0x19, 0x03, 0x07, 0x03, 0x00, +/* 00018E20 */ 0x59, 0x00, 0x19, 0x59, 0x01, 0x0E, 0xD6, 0x00, 0x1A, 0x59, 0x02, 0x1A, 0x1F, 0x03, 0xFF, 0x18, +/* 00018E30 */ 0x92, 0x06, 0x18, 0xA6, 0x18, 0x18, 0x04, 0x11, 0x03, 0x00, 0x18, 0x07, 0x09, 0xA4, 0x00, 0x8E, +/* 00018E40 */ 0x02, 0x36, 0x19, 0x4A, 0x19, 0x6C, 0x18, 0x19, 0x05, 0x07, 0x03, 0x00, 0x59, 0x00, 0x19, 0x92, +/* 00018E50 */ 0x04, 0x1A, 0x59, 0x01, 0x1A, 0x59, 0x02, 0x08, 0x1F, 0x03, 0x18, 0x18, 0x45, 0x10, 0x18, 0x14, +/* 00018E60 */ 0x03, 0x00, 0x10, 0x09, 0x09, 0x10, 0x00, 0x92, 0x04, 0x19, 0x92, 0x06, 0x1A, 0x2D, 0x18, 0x19, +/* 00018E70 */ 0x1A, 0x96, 0x04, 0x18, 0x09, 0x51, 0x00, 0x8E, 0x02, 0x36, 0x19, 0x4A, 0x19, 0x6C, 0x18, 0x19, +/* 00018E80 */ 0x06, 0x07, 0x04, 0x00, 0x59, 0x00, 0x19, 0x92, 0x04, 0x1A, 0x59, 0x01, 0x1A, 0x59, 0x02, 0x0A, +/* 00018E90 */ 0x59, 0x03, 0x10, 0x1F, 0x04, 0x18, 0x18, 0x45, 0x11, 0x18, 0x8E, 0x02, 0x36, 0x19, 0x4A, 0x19, +/* 00018EA0 */ 0x6C, 0x18, 0x19, 0x07, 0x07, 0x03, 0x00, 0x59, 0x00, 0x19, 0x92, 0x04, 0x1A, 0x59, 0x01, 0x1A, +/* 00018EB0 */ 0x59, 0x02, 0x10, 0x1F, 0x03, 0x18, 0x18, 0x45, 0x12, 0x18, 0x92, 0x06, 0x18, 0x2D, 0x18, 0x11, +/* 00018EC0 */ 0x18, 0x2D, 0x18, 0x18, 0x12, 0x96, 0x04, 0x18, 0x8E, 0x02, 0x03, 0x19, 0x6C, 0x18, 0x19, 0x08, +/* 00018ED0 */ 0x07, 0x02, 0x00, 0x59, 0x00, 0x19, 0x92, 0x04, 0x1A, 0x59, 0x01, 0x1A, 0x1F, 0x02, 0x18, 0x18, +/* 00018EE0 */ 0x96, 0x04, 0x18, 0x92, 0x05, 0x18, 0x92, 0x04, 0x19, 0x76, 0x19, 0x18, 0x09, 0x92, 0x05, 0x00, +/* 00018EF0 */ 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x01, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x01, +/* 00018F00 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9D, 0x03, 0x00, 0x00, 0xFE, 0xA0, 0x03, 0xFE, 0x0D, 0x02, +/* 00018F10 */ 0xFE, 0x9D, 0x03, 0x93, 0xD1, 0xFE, 0x0A, 0x03, 0xFE, 0x5E, 0x01, 0xFE, 0x5E, 0x01, 0xFE, 0xEE, +/* 00018F20 */ 0x01, 0xFE, 0x0D, 0x02, 0xFE, 0xC5, 0x39, 0x14, 0x1F, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x2F, 0x00, +/* 00018F30 */ 0x05, 0x00, 0x0F, 0x00, 0x08, 0x00, 0x28, 0x00, 0x1C, 0x00, 0x55, 0x00, 0x19, 0x00, 0x4C, 0x00, +/* 00018F40 */ 0x0A, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x3A, 0x00, 0x03, 0x00, 0x27, 0x00, 0x1D, 0x00, 0x56, 0x05, +/* 00018F50 */ 0x0F, 0x00, 0x31, 0x00, 0x20, 0x00, 0x46, 0x00, 0x08, 0x00, 0x2B, 0x00, 0x10, 0x00, 0x48, 0x00, +/* 00018F60 */ 0x23, 0x00, 0x50, 0x00, 0x20, 0x00, 0x4E, 0x00, 0x0E, 0x00, 0x5C, 0x00, 0x1B, 0x00, 0x4D, 0x00, +/* 00018F70 */ 0x0A, 0x00, 0x25, 0x00, 0x08, 0x00, 0x13, 0x00, 0x00, 0x7D, 0x8F, 0x01, 0x00, 0x7F, 0x5C, 0x00, +/* 00018F80 */ 0xC1, 0x43, 0x50, 0x03, 0x00, 0xFE, 0x58, 0x01, 0x29, 0xA2, 0x41, 0xD1, 0x00, 0x2A, 0xFE, 0x72, +/* 00018F90 */ 0x3B, 0xFE, 0x72, 0x3B, 0x41, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0x72, 0x3B, 0xFE, 0x29, 0x05, +/* 00018FA0 */ 0xFE, 0x29, 0x05, 0x0B, 0x08, 0x0F, 0x04, 0x6C, 0x61, 0x03, 0x08, 0x08, 0x08, 0x08, 0x08, 0x01, +/* 00018FB0 */ 0x0E, 0x0F, 0x01, 0x00, 0x06, 0xFE, 0x47, 0x03, 0x08, 0x01, 0xFF, 0x06, 0xFE, 0x95, 0x03, 0x06, +/* 00018FC0 */ 0xFE, 0xA1, 0x03, 0xFE, 0x68, 0x01, 0x4E, 0x09, 0x4E, 0x0A, 0x4E, 0x0B, 0x4E, 0x0C, 0x4E, 0x0D, +/* 00018FD0 */ 0x8E, 0x03, 0x03, 0x11, 0x6C, 0x10, 0x11, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x11, 0x8E, 0x03, +/* 00018FE0 */ 0x03, 0x12, 0x5E, 0x12, 0x12, 0x01, 0x97, 0x12, 0x12, 0x08, 0x59, 0x01, 0x12, 0x8E, 0x01, 0x04, +/* 00018FF0 */ 0x12, 0x4A, 0x12, 0x59, 0x02, 0x12, 0x1F, 0x03, 0x10, 0x10, 0x45, 0x09, 0x10, 0x97, 0x10, 0x09, +/* 00019000 */ 0x02, 0x45, 0x0A, 0x10, 0x45, 0x0B, 0x03, 0x8E, 0x01, 0x03, 0x10, 0x4A, 0x10, 0x5E, 0x10, 0x10, +/* 00019010 */ 0x02, 0x0E, 0x9E, 0x00, 0x10, 0x8E, 0x02, 0x0B, 0x10, 0x4A, 0x10, 0x07, 0x03, 0x00, 0x59, 0x00, +/* 00019020 */ 0x04, 0x8E, 0x01, 0x03, 0x11, 0x4A, 0x11, 0x5E, 0x11, 0x11, 0x03, 0x59, 0x01, 0x11, 0x59, 0x02, +/* 00019030 */ 0x08, 0x1F, 0x03, 0x10, 0x10, 0x45, 0x0C, 0x10, 0xA8, 0x10, 0x15, 0x03, 0x00, 0x0C, 0x10, 0x09, +/* 00019040 */ 0x71, 0x00, 0x15, 0x03, 0x00, 0x0C, 0x03, 0x09, 0x44, 0x00, 0x8E, 0x03, 0x36, 0x11, 0x4A, 0x11, +/* 00019050 */ 0x6C, 0x10, 0x11, 0x04, 0x07, 0x03, 0x00, 0x59, 0x00, 0x11, 0x59, 0x01, 0x09, 0x59, 0x02, 0x0C, +/* 00019060 */ 0x1F, 0x03, 0x10, 0x10, 0x15, 0x03, 0x00, 0x10, 0x05, 0x09, 0x1F, 0x00, 0x45, 0x0A, 0x0C, 0x45, +/* 00019070 */ 0x10, 0x06, 0x01, 0x09, 0x01, 0x11, 0x08, 0x2D, 0x10, 0x10, 0x11, 0x2D, 0x10, 0x10, 0x06, 0x01, +/* 00019080 */ 0x09, 0x01, 0x11, 0x0A, 0x2D, 0x10, 0x10, 0x11, 0x45, 0x0B, 0x10, 0x09, 0x25, 0x00, 0x8E, 0x03, +/* 00019090 */ 0x36, 0x11, 0x4A, 0x11, 0x6C, 0x10, 0x11, 0x05, 0x07, 0x03, 0x00, 0x59, 0x00, 0x11, 0x59, 0x01, +/* 000190A0 */ 0x09, 0x59, 0x02, 0x07, 0x1F, 0x03, 0x10, 0x10, 0x15, 0x03, 0x00, 0x10, 0x05, 0x09, 0x03, 0x00, +/* 000190B0 */ 0x45, 0x0A, 0x07, 0x8E, 0x03, 0x36, 0x11, 0x4A, 0x11, 0x6C, 0x10, 0x11, 0x06, 0x07, 0x03, 0x00, +/* 000190C0 */ 0x59, 0x00, 0x11, 0x8E, 0x01, 0x02, 0x12, 0x59, 0x01, 0x12, 0x59, 0x02, 0x08, 0x1F, 0x03, 0x10, +/* 000190D0 */ 0x10, 0x0E, 0x3B, 0x00, 0x10, 0x8E, 0x01, 0x02, 0x10, 0x97, 0x10, 0x10, 0x08, 0x45, 0x0D, 0x10, +/* 000190E0 */ 0x8E, 0x03, 0x36, 0x11, 0x4A, 0x11, 0x6C, 0x10, 0x11, 0x07, 0x07, 0x03, 0x00, 0x59, 0x00, 0x11, +/* 000190F0 */ 0x59, 0x01, 0x09, 0x59, 0x02, 0x0D, 0x1F, 0x03, 0x10, 0x10, 0x15, 0x03, 0x00, 0x10, 0x05, 0x09, +/* 00019100 */ 0x0E, 0x00, 0x15, 0x03, 0x00, 0x0D, 0x0A, 0x09, 0x06, 0x00, 0x45, 0x0A, 0x0D, 0x45, 0x0B, 0x03, +/* 00019110 */ 0x8E, 0x01, 0x05, 0x10, 0x4A, 0x10, 0x9C, 0x0A, 0x10, 0x08, 0x8E, 0x01, 0x06, 0x11, 0x4A, 0x11, +/* 00019120 */ 0x2D, 0x10, 0x11, 0x0B, 0x01, 0x43, 0x01, 0x01, 0x06, 0x10, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x00, +/* 00019130 */ 0x02, 0xFE, 0x29, 0x02, 0xFE, 0x97, 0x03, 0xFE, 0x97, 0x03, 0xFE, 0x0F, 0x03, 0xFE, 0x0F, 0x03, +/* 00019140 */ 0xB7, 0xFE, 0x0F, 0x03, 0xFE, 0x8F, 0x3B, 0x15, 0x0A, 0x00, 0x00, 0x00, 0x2D, 0x00, 0x65, 0x00, +/* 00019150 */ 0x07, 0x00, 0x2A, 0x00, 0x03, 0x00, 0x31, 0x00, 0x0E, 0x00, 0x23, 0x00, 0x23, 0x00, 0x50, 0x00, +/* 00019160 */ 0x0A, 0x00, 0x38, 0x00, 0x08, 0x00, 0x35, 0x00, 0x22, 0x00, 0x58, 0x00, 0x03, 0x00, 0x34, 0x00, +/* 00019170 */ 0x1F, 0x00, 0x66, 0x00, 0x22, 0x00, 0x4C, 0x00, 0x03, 0x00, 0x53, 0x00, 0x22, 0x00, 0x36, 0x00, +/* 00019180 */ 0x0B, 0x00, 0x33, 0x00, 0x22, 0x00, 0x4E, 0x00, 0x08, 0x00, 0x36, 0x00, 0x03, 0x00, 0x2E, 0x00, +/* 00019190 */ 0x03, 0x00, 0x64, 0x00, 0x0A, 0x00, 0x21, 0x00, 0x12, 0x00, 0x3A, 0x00, 0x00, 0x7F, 0x7C, 0x00, +/* 000191A0 */ 0xC3, 0x43, 0x50, 0x13, 0x00, 0xFE, 0x1C, 0x01, 0x22, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x59, 0x03, +/* 000191B0 */ 0x28, 0xFE, 0x27, 0x32, 0xFE, 0x27, 0x32, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, 0x27, 0x32, +/* 000191C0 */ 0xFE, 0x1E, 0x04, 0xFE, 0x1E, 0x04, 0x11, 0x0B, 0x16, 0x05, 0x62, 0x50, 0x21, 0x02, 0x01, 0x01, +/* 000191D0 */ 0x05, 0x05, 0x05, 0x05, 0x02, 0x15, 0x16, 0x5C, 0xCA, 0x06, 0xFE, 0x95, 0x03, 0x01, 0xFF, 0x01, +/* 000191E0 */ 0x04, 0x0C, 0x01, 0x02, 0x0B, 0x01, 0x01, 0x06, 0xFE, 0x47, 0x03, 0x01, 0x03, 0xFE, 0x39, 0x01, +/* 000191F0 */ 0x4E, 0x0D, 0x4E, 0x0E, 0x4E, 0x0F, 0x4E, 0x10, 0x4E, 0x11, 0x4E, 0x12, 0x4E, 0x13, 0x4E, 0x14, +/* 00019200 */ 0xA6, 0x18, 0x0B, 0x00, 0x45, 0x0D, 0x18, 0x8E, 0x02, 0x36, 0x19, 0x4A, 0x19, 0x6C, 0x18, 0x19, +/* 00019210 */ 0x01, 0x07, 0x03, 0x00, 0x59, 0x00, 0x19, 0x59, 0x01, 0x0B, 0x45, 0x1A, 0x02, 0x01, 0x09, 0x01, +/* 00019220 */ 0x1B, 0x0C, 0x2D, 0x1A, 0x1A, 0x1B, 0x2D, 0x1A, 0x1A, 0x02, 0x59, 0x02, 0x1A, 0x1F, 0x03, 0x18, +/* 00019230 */ 0x18, 0x45, 0x0E, 0x18, 0x15, 0x03, 0x00, 0x0E, 0x03, 0x09, 0x9E, 0x00, 0x2D, 0x18, 0x0E, 0x04, +/* 00019240 */ 0x45, 0x0F, 0x18, 0x45, 0x10, 0x0F, 0x45, 0x11, 0x0F, 0x45, 0x12, 0x05, 0xEC, 0x00, 0x0F, 0x68, +/* 00019250 */ 0x00, 0x12, 0x8E, 0x02, 0x36, 0x19, 0x4A, 0x19, 0x6C, 0x18, 0x19, 0x02, 0x07, 0x04, 0x00, 0x59, +/* 00019260 */ 0x00, 0x19, 0x59, 0x01, 0x0B, 0x59, 0x02, 0x02, 0x59, 0x03, 0x11, 0x1F, 0x04, 0x18, 0x18, 0x45, +/* 00019270 */ 0x13, 0x18, 0x14, 0x03, 0x00, 0x13, 0x03, 0x09, 0x0A, 0x00, 0x33, 0x19, 0x0D, 0x11, 0x45, 0x18, +/* 00019280 */ 0x19, 0x09, 0x07, 0x00, 0x33, 0x19, 0x13, 0x11, 0x46, 0x18, 0x19, 0x45, 0x14, 0x18, 0x14, 0x03, +/* 00019290 */ 0x00, 0x14, 0x06, 0x09, 0x06, 0x00, 0x45, 0x12, 0x07, 0x09, 0x1B, 0x00, 0x14, 0x03, 0x00, 0x13, +/* 000192A0 */ 0x03, 0x09, 0x09, 0x00, 0x45, 0x10, 0x0D, 0x45, 0x12, 0x07, 0x09, 0x0A, 0x00, 0x45, 0x10, 0x13, +/* 000192B0 */ 0x2D, 0x18, 0x13, 0x08, 0x45, 0x11, 0x18, 0x09, 0x92, 0xFF, 0x8E, 0x02, 0x36, 0x19, 0x4A, 0x19, +/* 000192C0 */ 0x6C, 0x18, 0x19, 0x03, 0x07, 0x04, 0x00, 0x59, 0x00, 0x19, 0x59, 0x01, 0x0B, 0x59, 0x02, 0x0F, +/* 000192D0 */ 0x59, 0x03, 0x10, 0x1F, 0x04, 0x00, 0x18, 0x09, 0x4D, 0x00, 0x8E, 0x02, 0x36, 0x19, 0x4A, 0x19, +/* 000192E0 */ 0x6C, 0x18, 0x19, 0x04, 0x07, 0x03, 0x00, 0x59, 0x00, 0x19, 0x59, 0x01, 0x0B, 0x45, 0x1A, 0x02, +/* 000192F0 */ 0x01, 0x09, 0x01, 0x1B, 0x0C, 0x2D, 0x1A, 0x1A, 0x1B, 0x59, 0x02, 0x1A, 0x1F, 0x03, 0x18, 0x18, +/* 00019300 */ 0x45, 0x0E, 0x18, 0x15, 0x03, 0x00, 0x0E, 0x03, 0x09, 0x15, 0x00, 0x2D, 0x18, 0x0E, 0x0A, 0x14, +/* 00019310 */ 0x03, 0x00, 0x18, 0x0D, 0x09, 0x09, 0x00, 0x45, 0x00, 0x09, 0x09, 0x0A, 0x00, 0x09, 0x05, 0x00, +/* 00019320 */ 0xA8, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xD1, 0xFE, 0x0A, 0x03, 0xFE, 0x0A, 0x03, +/* 00019330 */ 0xFE, 0x5E, 0x01, 0xFE, 0x0A, 0x03, 0xFE, 0x4B, 0x32, 0x17, 0x10, 0x00, 0x00, 0x00, 0x07, 0x00, +/* 00019340 */ 0x51, 0x00, 0x2D, 0x00, 0x3A, 0x00, 0x08, 0x00, 0x1E, 0x00, 0x07, 0x00, 0x23, 0x00, 0x03, 0x00, +/* 00019350 */ 0x1D, 0x00, 0x03, 0x00, 0x1B, 0x00, 0x05, 0x00, 0x25, 0x00, 0x04, 0x00, 0x19, 0x00, 0x20, 0x00, +/* 00019360 */ 0x3E, 0x00, 0x1C, 0x00, 0x39, 0x00, 0x08, 0x00, 0x25, 0x00, 0x06, 0x00, 0x24, 0x00, 0x08, 0x00, +/* 00019370 */ 0x24, 0x00, 0x03, 0x00, 0x20, 0x00, 0x06, 0x00, 0x3A, 0x00, 0x03, 0x00, 0x1D, 0x00, 0x0A, 0x00, +/* 00019380 */ 0x38, 0x00, 0x20, 0x00, 0x75, 0x00, 0x29, 0x00, 0x35, 0x00, 0x14, 0x00, 0x32, 0x00, 0x09, 0x00, +/* 00019390 */ 0x28, 0x00, 0x07, 0x00, 0x20, 0x00, 0x00, 0x7F, 0x7C, 0x00, 0xC3, 0x43, 0x50, 0x13, 0x00, 0xFB, +/* 000193A0 */ 0x1A, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x57, 0x03, 0x27, 0xFE, 0x85, 0x2D, 0xFE, 0x85, 0x2D, 0x01, +/* 000193B0 */ 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, 0x85, 0x2D, 0xFE, 0x06, 0x03, 0xFE, 0x06, 0x03, 0x0B, 0x06, +/* 000193C0 */ 0x0D, 0x04, 0x3D, 0x37, 0x26, 0x02, 0x04, 0x01, 0x08, 0x08, 0x08, 0x08, 0x02, 0x0C, 0x0D, 0x22, +/* 000193D0 */ 0xA4, 0x01, 0x00, 0x01, 0x01, 0x08, 0x07, 0xC2, 0x4E, 0x08, 0x4E, 0x09, 0x4E, 0x0A, 0x4E, 0x0B, +/* 000193E0 */ 0x8E, 0x02, 0x36, 0x10, 0x4A, 0x10, 0x6C, 0x0F, 0x10, 0x00, 0x07, 0x01, 0x00, 0x59, 0x00, 0x10, +/* 000193F0 */ 0x1F, 0x01, 0x0F, 0x0F, 0x45, 0x08, 0x0F, 0x45, 0x09, 0x02, 0xEC, 0x00, 0xA6, 0x0F, 0x07, 0x01, +/* 00019400 */ 0x12, 0x03, 0x00, 0x09, 0x0F, 0x09, 0x74, 0x00, 0x8E, 0x01, 0x0F, 0x0F, 0x4A, 0x0F, 0x07, 0x02, +/* 00019410 */ 0x00, 0x59, 0x00, 0x04, 0x97, 0x10, 0x07, 0x09, 0x59, 0x01, 0x10, 0x1F, 0x02, 0x0F, 0x0F, 0x45, +/* 00019420 */ 0x0A, 0x0F, 0x14, 0x03, 0x00, 0x0A, 0x05, 0x09, 0x03, 0x00, 0x09, 0x49, 0x00, 0x8E, 0x01, 0x08, +/* 00019430 */ 0x0F, 0x4A, 0x0F, 0x07, 0x03, 0x00, 0x59, 0x00, 0x04, 0x59, 0x01, 0x06, 0x5E, 0x10, 0x0A, 0x02, +/* 00019440 */ 0x59, 0x02, 0x10, 0x1F, 0x03, 0x0F, 0x0F, 0x45, 0x0B, 0x0F, 0xA8, 0x0F, 0x15, 0x03, 0x00, 0x0B, +/* 00019450 */ 0x0F, 0x09, 0x22, 0x00, 0x76, 0x0B, 0x08, 0x03, 0x97, 0x0F, 0x07, 0x09, 0x5E, 0x10, 0x0A, 0x04, +/* 00019460 */ 0x15, 0x03, 0x00, 0x0F, 0x10, 0x09, 0x08, 0x00, 0x5E, 0x0F, 0x0A, 0x05, 0x76, 0x0F, 0x08, 0x06, +/* 00019470 */ 0x45, 0x00, 0x08, 0x09, 0x22, 0x00, 0x26, 0x09, 0x09, 0x09, 0x7E, 0xFF, 0x8E, 0x01, 0x05, 0x0F, +/* 00019480 */ 0x4A, 0x0F, 0x07, 0x01, 0x00, 0x59, 0x00, 0x04, 0x1F, 0x01, 0x0F, 0x0F, 0x76, 0x0F, 0x08, 0x07, +/* 00019490 */ 0x45, 0x00, 0x08, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x69, 0xD1, 0xFE, 0x1E, 0x02, 0xFE, +/* 000194A0 */ 0x0D, 0x02, 0xFE, 0x1E, 0x02, 0xFE, 0x96, 0x03, 0xFE, 0x97, 0x03, 0xFE, 0x0D, 0x02, 0xFE, 0xBE, +/* 000194B0 */ 0x2D, 0x10, 0x08, 0x00, 0x00, 0x00, 0x17, 0x00, 0x28, 0x00, 0x05, 0x00, 0x0B, 0x00, 0x0C, 0x00, +/* 000194C0 */ 0x30, 0x00, 0x1A, 0x00, 0x45, 0x00, 0x08, 0x00, 0x2E, 0x00, 0x03, 0x00, 0x25, 0x00, 0x1D, 0x00, +/* 000194D0 */ 0x60, 0x00, 0x0A, 0x00, 0x35, 0x00, 0x04, 0x00, 0x31, 0x00, 0x10, 0x00, 0x46, 0x00, 0x08, 0x00, +/* 000194E0 */ 0x56, 0x00, 0x06, 0x00, 0xF3, 0xFD, 0x06, 0x00, 0x3D, 0x02, 0x14, 0x00, 0x2C, 0x00, 0x08, 0x00, +/* 000194F0 */ 0x13, 0x00, 0x00, 0x7F, 0x7C, 0x00, 0xC3, 0x43, 0x50, 0x13, 0x00, 0xD0, 0x20, 0xA2, 0x41, 0xC1, +/* 00019500 */ 0x00, 0xFE, 0x56, 0x03, 0x26, 0xFE, 0xCC, 0x27, 0xFE, 0xCC, 0x27, 0x01, 0xFE, 0x00, 0x90, 0x03, +/* 00019510 */ 0x03, 0xFE, 0xCC, 0x27, 0xFE, 0x55, 0x04, 0xFE, 0x55, 0x04, 0x0B, 0x09, 0x10, 0x05, 0x3B, 0x34, +/* 00019520 */ 0x2D, 0x02, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x0F, 0x10, 0x1D, 0xB5, 0x44, 0x66, 0x06, +/* 00019530 */ 0xFE, 0x95, 0x03, 0x0B, 0x08, 0x01, 0xFF, 0x01, 0x01, 0x01, 0x00, 0x01, 0x02, 0xB9, 0x4E, 0x0B, +/* 00019540 */ 0x4E, 0x0C, 0x4E, 0x0D, 0x4E, 0x0E, 0xA8, 0x12, 0x14, 0x03, 0x00, 0x0A, 0x12, 0x09, 0x05, 0x00, +/* 00019550 */ 0xA8, 0x00, 0x09, 0xA0, 0x00, 0x45, 0x0B, 0x0A, 0x45, 0x0C, 0x02, 0xEC, 0x00, 0x07, 0x02, 0x00, +/* 00019560 */ 0x59, 0x00, 0x04, 0x59, 0x01, 0x0B, 0x1F, 0x02, 0x12, 0x09, 0x0E, 0x06, 0x00, 0x12, 0x45, 0x00, +/* 00019570 */ 0x0B, 0x09, 0x81, 0x00, 0x45, 0x0D, 0x05, 0xA6, 0x12, 0x0B, 0x00, 0x33, 0x12, 0x12, 0x06, 0x45, +/* 00019580 */ 0x0E, 0x12, 0xEC, 0x01, 0x10, 0x03, 0x00, 0x0E, 0x07, 0x09, 0x18, 0x00, 0x97, 0x12, 0x0B, 0x0E, +/* 00019590 */ 0x14, 0x03, 0x00, 0x12, 0x0C, 0x09, 0x06, 0x00, 0x45, 0x0D, 0x0E, 0x09, 0x06, 0x00, 0x27, 0x0E, +/* 000195A0 */ 0x0E, 0x09, 0xDE, 0xFF, 0x14, 0x03, 0x00, 0x0D, 0x05, 0x09, 0x08, 0x00, 0xA8, 0x00, 0x09, 0x44, +/* 000195B0 */ 0x00, 0x09, 0x1C, 0x00, 0x10, 0x03, 0x00, 0x0D, 0x08, 0x09, 0x14, 0x00, 0x33, 0x12, 0x0D, 0x08, +/* 000195C0 */ 0x97, 0x12, 0x0B, 0x12, 0x14, 0x03, 0x00, 0x12, 0x0C, 0x09, 0x04, 0x00, 0x33, 0x0D, 0x0D, 0x08, +/* 000195D0 */ 0x8E, 0x02, 0x36, 0x13, 0x4A, 0x13, 0x6C, 0x12, 0x13, 0x01, 0x07, 0x04, 0x00, 0x59, 0x00, 0x13, +/* 000195E0 */ 0x59, 0x01, 0x0B, 0x59, 0x02, 0x07, 0x59, 0x03, 0x0D, 0x1F, 0x04, 0x12, 0x12, 0x45, 0x0B, 0x12, +/* 000195F0 */ 0x09, 0x68, 0xFF, 0xA8, 0x00, 0x24, 0x00, 0xD1, 0xFE, 0x5E, 0x01, 0xFE, 0xFB, 0x27, 0x13, 0x08, +/* 00019600 */ 0x00, 0x00, 0x00, 0x0A, 0x00, 0x28, 0x00, 0x05, 0x00, 0x25, 0x00, 0x03, 0x00, 0x20, 0x00, 0x05, +/* 00019610 */ 0x00, 0x37, 0x00, 0x11, 0x00, 0x34, 0x00, 0x06, 0x00, 0x2D, 0x00, 0x03, 0x00, 0x1F, 0x00, 0x0D, +/* 00019620 */ 0x00, 0x1E, 0x00, 0x08, 0x00, 0x1F, 0x00, 0x0C, 0x00, 0x33, 0x00, 0x03, 0x00, 0x1D, 0x00, 0x03, +/* 00019630 */ 0x00, 0x99, 0xFF, 0x06, 0x00, 0x9B, 0x00, 0x08, 0x00, 0x22, 0x00, 0x08, 0x00, 0x25, 0x00, 0x18, +/* 00019640 */ 0x00, 0x9A, 0x01, 0x04, 0x00, 0x25, 0x00, 0x25, 0x00, 0x3A, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, +/* 00019650 */ 0x03, 0x10, 0x03, 0x00, 0xBE, 0x2A, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0x55, 0x03, 0x25, 0xFE, 0x21, +/* 00019660 */ 0x25, 0xFE, 0x21, 0x25, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, 0x21, 0x25, 0xDF, 0xDF, 0x06, +/* 00019670 */ 0x03, 0x07, 0x03, 0x12, 0x10, 0x02, 0x01, 0x02, 0x02, 0x02, 0x02, 0x06, 0x06, 0xFE, 0x94, 0x03, +/* 00019680 */ 0x35, 0x4E, 0x05, 0x5E, 0x07, 0x03, 0x00, 0x45, 0x05, 0x07, 0x2A, 0x07, 0x05, 0x15, 0x03, 0x00, +/* 00019690 */ 0x07, 0x02, 0x09, 0x03, 0x00, 0x45, 0x05, 0x04, 0x8E, 0x02, 0x36, 0x08, 0x4A, 0x08, 0x6C, 0x07, +/* 000196A0 */ 0x08, 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x08, 0x59, 0x01, 0x05, 0x1F, 0x02, 0x00, 0x07, 0x09, +/* 000196B0 */ 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x24, 0x01, 0x69, 0xFE, 0x59, 0x25, 0x05, 0x02, 0x00, +/* 000196C0 */ 0x00, 0x00, 0x07, 0x00, 0x2B, 0x00, 0x0B, 0x00, 0x2D, 0x00, 0x03, 0x00, 0x32, 0x00, 0x1C, 0x00, +/* 000196D0 */ 0x1C, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xBA, 0x1F, 0xA2, 0x41, 0xC1, +/* 000196E0 */ 0x00, 0xFE, 0x54, 0x03, 0x24, 0xFE, 0x9D, 0x24, 0xFE, 0x9D, 0x24, 0x01, 0xFE, 0x00, 0x90, 0x03, +/* 000196F0 */ 0x03, 0xFE, 0x9D, 0x24, 0x58, 0x58, 0x05, 0x03, 0x06, 0x05, 0x0C, 0x0C, 0x02, 0x01, 0x01, 0x01, +/* 00019700 */ 0x01, 0x01, 0x05, 0x0C, 0x22, 0x8E, 0x02, 0x03, 0x07, 0x6C, 0x06, 0x07, 0x00, 0x07, 0x04, 0x00, +/* 00019710 */ 0x59, 0x00, 0x07, 0x59, 0x01, 0x04, 0x59, 0x02, 0x03, 0x59, 0x03, 0x02, 0x1F, 0x04, 0x00, 0x06, +/* 00019720 */ 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xBD, 0x02, 0xFE, 0xBA, 0x24, 0x02, 0x00, 0x00, +/* 00019730 */ 0x00, 0x00, 0x20, 0x00, 0x3A, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0xB6, +/* 00019740 */ 0x1C, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xF0, 0x02, 0x23, 0xFE, 0x2A, 0x24, 0xFE, 0x2A, 0x24, 0x01, +/* 00019750 */ 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, 0x2A, 0x24, 0x51, 0x51, 0x05, 0x02, 0x05, 0x04, 0x0B, 0x0B, +/* 00019760 */ 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x1F, 0x8E, 0x02, 0x03, 0x06, 0x6C, 0x05, 0x06, 0x00, +/* 00019770 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x06, 0x59, 0x01, 0x03, 0x59, 0x02, 0x02, 0x1F, 0x03, 0x00, 0x05, +/* 00019780 */ 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xBD, 0x02, 0xFE, 0x47, 0x24, 0x02, 0x00, 0x00, +/* 00019790 */ 0x00, 0x00, 0x1D, 0x00, 0x33, 0x00, 0x00, 0x7F, 0x4C, 0x00, 0xC0, 0x03, 0x00, 0x03, 0x00, 0xB0, +/* 000197A0 */ 0x1C, 0xA2, 0x41, 0xC1, 0x00, 0xFE, 0xEF, 0x02, 0x22, 0xFE, 0x90, 0x23, 0xFE, 0x90, 0x23, 0x41, +/* 000197B0 */ 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0x90, 0x23, 0x7B, 0x7B, 0x02, 0x04, 0x05, 0x09, 0x09, 0x02, +/* 000197C0 */ 0x02, 0x02, 0x02, 0x02, 0x03, 0x1C, 0x00, 0x0A, 0x80, 0x03, 0x07, 0x00, 0x0A, 0x80, 0x1B, 0x5E, +/* 000197D0 */ 0x05, 0x04, 0x00, 0x14, 0x0C, 0x00, 0x05, 0x02, 0x5E, 0x05, 0x04, 0x01, 0x14, 0x03, 0x00, 0x05, +/* 000197E0 */ 0x03, 0x09, 0x02, 0x00, 0x23, 0x04, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x0C, 0x01, 0xFE, 0x0C, 0x01, +/* 000197F0 */ 0xFE, 0xA8, 0x23, 0x03, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x4A, 0x00, 0x04, 0x00, 0x18, 0x00, +/* 00019800 */ 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x03, 0x00, 0x9E, 0x1D, 0xA0, 0x41, 0xC1, 0x00, 0xFE, +/* 00019810 */ 0x53, 0x03, 0x21, 0xFE, 0x43, 0x21, 0xFE, 0x43, 0x21, 0x01, 0xFE, 0x00, 0x90, 0x01, 0x01, 0xFE, +/* 00019820 */ 0x43, 0x21, 0xFE, 0xC9, 0x01, 0xFE, 0xC9, 0x01, 0x04, 0x03, 0x05, 0x02, 0x1A, 0x19, 0x02, 0x02, +/* 00019830 */ 0x02, 0x02, 0x02, 0x02, 0x04, 0x05, 0xFE, 0x93, 0x03, 0x56, 0x4E, 0x03, 0x8E, 0x01, 0x04, 0x05, +/* 00019840 */ 0x4A, 0x05, 0x0E, 0x15, 0x00, 0x05, 0x8E, 0x02, 0x03, 0x05, 0x5E, 0x05, 0x05, 0x00, 0x0E, 0x09, +/* 00019850 */ 0x00, 0x05, 0x8E, 0x01, 0x04, 0x00, 0x4A, 0x00, 0x09, 0x33, 0x00, 0x8E, 0x02, 0x03, 0x06, 0x6C, +/* 00019860 */ 0x05, 0x06, 0x01, 0x07, 0x01, 0x00, 0x59, 0x00, 0x06, 0x1F, 0x01, 0x05, 0x05, 0x45, 0x03, 0x05, +/* 00019870 */ 0x0F, 0x09, 0x00, 0x03, 0x01, 0x43, 0x01, 0x01, 0x04, 0x02, 0x09, 0x06, 0x00, 0x01, 0x43, 0x01, +/* 00019880 */ 0x01, 0x04, 0x03, 0x8E, 0x01, 0x04, 0x00, 0x4A, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, +/* 00019890 */ 0xFE, 0x4D, 0x03, 0xFE, 0xF5, 0x01, 0xFE, 0x59, 0x21, 0x08, 0x02, 0x00, 0x00, 0x00, 0x16, 0x00, +/* 000198A0 */ 0x39, 0x00, 0x09, 0x00, 0x2B, 0x00, 0x15, 0x00, 0x34, 0x00, 0x04, 0x00, 0x9C, 0x00, 0x09, 0x00, +/* 000198B0 */ 0x35, 0x00, 0x06, 0x00, 0x2D, 0x00, 0x0B, 0x00, 0x1C, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0xC1, 0x03, +/* 000198C0 */ 0x10, 0x07, 0x00, 0x92, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x92, 0x03, 0x20, 0xFF, 0x01, 0x00, +/* 000198D0 */ 0x40, 0x02, 0xFE, 0xFA, 0x1D, 0xFE, 0xFA, 0x1D, 0x01, 0xFE, 0x00, 0x90, 0x04, 0x04, 0xFE, 0xFA, +/* 000198E0 */ 0x1D, 0x74, 0x74, 0x02, 0x06, 0x03, 0x07, 0x06, 0x0E, 0x0E, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, +/* 000198F0 */ 0x06, 0x08, 0x29, 0x8E, 0x01, 0x06, 0x07, 0x07, 0x05, 0x00, 0x59, 0x00, 0x02, 0x8E, 0x01, 0x03, +/* 00019900 */ 0x08, 0x5E, 0x08, 0x08, 0x00, 0x59, 0x01, 0x08, 0x59, 0x02, 0x03, 0x59, 0x03, 0x04, 0x59, 0x04, +/* 00019910 */ 0x05, 0x1F, 0x05, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x9D, 0x02, 0xFE, +/* 00019920 */ 0x14, 0x1E, 0x02, 0x00, 0x00, 0x00, 0x00, 0x27, 0x00, 0x59, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0xC1, +/* 00019930 */ 0x03, 0x10, 0x07, 0x00, 0x91, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x91, 0x03, 0x1F, 0xFF, 0x01, +/* 00019940 */ 0x00, 0x40, 0x02, 0xFE, 0x8A, 0x1D, 0xFE, 0x8A, 0x1D, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, +/* 00019950 */ 0x8A, 0x1D, 0x66, 0x66, 0x02, 0x05, 0x03, 0x06, 0x05, 0x0D, 0x0D, 0x01, 0x02, 0x01, 0x01, 0x01, +/* 00019960 */ 0x01, 0x05, 0x08, 0x26, 0x8E, 0x01, 0x06, 0x06, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x8E, 0x01, +/* 00019970 */ 0x03, 0x07, 0x5E, 0x07, 0x07, 0x00, 0x59, 0x01, 0x07, 0x59, 0x02, 0x03, 0x59, 0x03, 0x04, 0x1F, +/* 00019980 */ 0x04, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x9C, 0x02, 0xFE, 0x9D, 0x1D, +/* 00019990 */ 0x02, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x52, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0xC1, 0x03, 0x10, +/* 000199A0 */ 0x07, 0x00, 0x8F, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x90, 0x03, 0x1E, 0xFF, 0x01, 0x00, 0x40, +/* 000199B0 */ 0x02, 0xFE, 0x23, 0x1D, 0xFE, 0x23, 0x1D, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0x23, 0x1D, +/* 000199C0 */ 0x5C, 0x5C, 0x02, 0x04, 0x03, 0x05, 0x04, 0x0C, 0x0C, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x04, +/* 000199D0 */ 0x08, 0x23, 0x8E, 0x01, 0x06, 0x05, 0x07, 0x03, 0x00, 0x59, 0x00, 0x02, 0x8E, 0x01, 0x03, 0x06, +/* 000199E0 */ 0x5E, 0x06, 0x06, 0x00, 0x59, 0x01, 0x06, 0x59, 0x02, 0x03, 0x1F, 0x03, 0x00, 0x05, 0x09, 0x02, +/* 000199F0 */ 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x9E, 0x02, 0xFE, 0x33, 0x1D, 0x02, 0x00, 0x00, 0x00, 0x00, +/* 00019A00 */ 0x21, 0x00, 0x4B, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x07, 0x00, 0x88, 0x08, 0xA2, +/* 00019A10 */ 0x41, 0xC1, 0x01, 0xFE, 0x8F, 0x03, 0x1D, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0x11, 0x1C, 0xFE, +/* 00019A20 */ 0x11, 0x1C, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0x11, 0x1C, 0x3E, 0x3E, 0x02, 0x04, 0x03, +/* 00019A30 */ 0x05, 0x03, 0x0F, 0x0E, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x01, 0x00, 0x2D, 0x14, 0x03, +/* 00019A40 */ 0x00, 0x03, 0x02, 0x09, 0x06, 0x00, 0x45, 0x00, 0x02, 0x09, 0x18, 0x00, 0x8E, 0x01, 0x03, 0x06, +/* 00019A50 */ 0x6C, 0x05, 0x06, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x06, 0x59, 0x01, 0x03, 0x1F, 0x02, 0x05, +/* 00019A60 */ 0x05, 0x46, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x8D, 0x02, 0xFE, 0x1C, +/* 00019A70 */ 0x1C, 0x02, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x32, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0xC1, 0x03, +/* 00019A80 */ 0x10, 0x07, 0x00, 0x84, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x8E, 0x03, 0x1C, 0xFF, 0x01, 0x00, +/* 00019A90 */ 0x40, 0x02, 0xFE, 0x24, 0x1B, 0xFE, 0x24, 0x1B, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x02, 0xFE, 0x24, +/* 00019AA0 */ 0x1B, 0x5C, 0x5C, 0x02, 0x05, 0x04, 0x07, 0x04, 0x0D, 0x0C, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, +/* 00019AB0 */ 0x06, 0x07, 0x08, 0x27, 0x15, 0x03, 0x00, 0x05, 0x03, 0x45, 0x05, 0x02, 0x8E, 0x01, 0x03, 0x08, +/* 00019AC0 */ 0x6C, 0x07, 0x08, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x08, 0x59, 0x01, 0x04, 0x59, 0x02, 0x05, +/* 00019AD0 */ 0x1F, 0x03, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xBE, 0x02, 0xFE, 0x3B, +/* 00019AE0 */ 0x1B, 0x03, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x10, 0x00, 0x1D, 0x00, 0x34, 0x00, 0x00, 0xFF, +/* 00019AF0 */ 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x07, 0x00, 0x83, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x8D, 0x03, +/* 00019B00 */ 0x1B, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0xC7, 0x1A, 0xFE, 0xC7, 0x1A, 0x01, 0xFE, 0x00, 0x90, +/* 00019B10 */ 0x02, 0x01, 0xFE, 0xC7, 0x1A, 0x53, 0x53, 0x02, 0x04, 0x04, 0x06, 0x03, 0x0C, 0x0B, 0x01, 0x01, +/* 00019B20 */ 0x01, 0x01, 0x01, 0x01, 0x05, 0x07, 0x08, 0x24, 0x15, 0x03, 0x00, 0x04, 0x03, 0x45, 0x04, 0x02, +/* 00019B30 */ 0x8E, 0x01, 0x03, 0x07, 0x6C, 0x06, 0x07, 0x00, 0x07, 0x02, 0x00, 0x59, 0x00, 0x07, 0x59, 0x01, +/* 00019B40 */ 0x04, 0x1F, 0x02, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x95, 0x02, 0xFE, +/* 00019B50 */ 0xCE, 0x1A, 0x03, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x10, 0x00, 0x1A, 0x00, 0x3B, 0x00, 0x00, +/* 00019B60 */ 0xFF, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x07, 0x00, 0x7E, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x8C, +/* 00019B70 */ 0x03, 0x1A, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0xD1, 0x19, 0xFE, 0xD1, 0x19, 0x41, 0xFE, 0x00, +/* 00019B80 */ 0x90, 0x04, 0x04, 0xFE, 0xD1, 0x19, 0xA3, 0xA3, 0x02, 0x06, 0x03, 0x07, 0x05, 0x13, 0x13, 0x01, +/* 00019B90 */ 0x02, 0x02, 0x02, 0x02, 0x02, 0x06, 0x07, 0x39, 0x8E, 0x01, 0x36, 0x08, 0x4A, 0x08, 0x6C, 0x07, +/* 00019BA0 */ 0x08, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x08, 0x59, 0x01, 0x05, 0x59, 0x02, 0x02, 0x1F, 0x03, +/* 00019BB0 */ 0xFF, 0x07, 0x8E, 0x01, 0x03, 0x08, 0x6C, 0x07, 0x08, 0x01, 0x07, 0x04, 0x00, 0x59, 0x00, 0x08, +/* 00019BC0 */ 0x59, 0x01, 0x03, 0x59, 0x02, 0x04, 0x59, 0x03, 0x05, 0x1F, 0x04, 0xFF, 0x07, 0xA8, 0x00, 0x24, +/* 00019BD0 */ 0x00, 0xFE, 0x9A, 0x01, 0xFE, 0x8F, 0x02, 0xFE, 0xFD, 0x19, 0x03, 0x00, 0x00, 0x00, 0x00, 0x1A, +/* 00019BE0 */ 0x00, 0x2A, 0x00, 0x1D, 0x00, 0x4C, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x07, 0x00, +/* 00019BF0 */ 0x7C, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x8B, 0x03, 0x19, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, +/* 00019C00 */ 0xC8, 0x18, 0xFE, 0xC8, 0x18, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, 0xC8, 0x18, 0x72, 0x72, +/* 00019C10 */ 0x02, 0x05, 0x03, 0x06, 0x05, 0x0D, 0x0D, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x05, 0x08, 0x26, +/* 00019C20 */ 0x8E, 0x01, 0x06, 0x06, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x8E, 0x01, 0x03, 0x07, 0x5E, 0x07, +/* 00019C30 */ 0x07, 0x00, 0x59, 0x01, 0x07, 0x59, 0x02, 0x03, 0x59, 0x03, 0x04, 0x1F, 0x04, 0x00, 0x06, 0x09, +/* 00019C40 */ 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x93, 0x02, 0xFE, 0xE2, 0x18, 0x02, 0x00, 0x00, 0x00, +/* 00019C50 */ 0x00, 0x24, 0x00, 0x57, 0x00, 0x00, 0xFE, 0x5D, 0x00, 0xC1, 0x03, 0x1A, 0x0F, 0x00, 0x79, 0x08, +/* 00019C60 */ 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x89, 0x03, 0x17, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0x31, 0x18, +/* 00019C70 */ 0xFE, 0x31, 0x18, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0x31, 0x18, 0x53, 0x53, 0x02, 0x01, +/* 00019C80 */ 0xFE, 0x8A, 0x03, 0x07, 0x02, 0x06, 0x04, 0x0F, 0x0F, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x03, +/* 00019C90 */ 0x04, 0x05, 0x2A, 0x96, 0x02, 0x02, 0x8E, 0x01, 0x36, 0x07, 0x4A, 0x07, 0x6C, 0x06, 0x07, 0x00, +/* 00019CA0 */ 0x07, 0x03, 0x00, 0x59, 0x00, 0x07, 0x92, 0x02, 0x08, 0x59, 0x01, 0x08, 0xD6, 0x00, 0x08, 0x59, +/* 00019CB0 */ 0x02, 0x08, 0x1F, 0x03, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x89, 0xFE, 0x41, +/* 00019CC0 */ 0x18, 0x02, 0x03, 0x00, 0x00, 0x00, 0x25, 0x00, 0x42, 0x00, 0x00, 0xCF, 0x9C, 0x01, 0x00, 0x7F, +/* 00019CD0 */ 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x07, 0x00, 0x79, 0x2F, 0xA2, 0x41, 0xD0, 0x00, 0x18, 0xFE, 0x01, +/* 00019CE0 */ 0x10, 0xFE, 0x58, 0x18, 0xFE, 0x58, 0x18, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, 0x58, 0x18, +/* 00019CF0 */ 0x28, 0x28, 0x06, 0x02, 0x05, 0x04, 0x0E, 0x0E, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x04, 0x29, +/* 00019D00 */ 0x8E, 0x02, 0x36, 0x06, 0x4A, 0x06, 0x6C, 0x05, 0x06, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x06, +/* 00019D10 */ 0x8E, 0x01, 0x02, 0x07, 0x59, 0x01, 0x07, 0x59, 0x02, 0x02, 0x1F, 0x03, 0x05, 0x05, 0x41, 0x00, +/* 00019D20 */ 0x05, 0x03, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x0F, 0x03, 0xFE, 0x62, 0x18, 0x02, +/* 00019D30 */ 0x00, 0x00, 0x00, 0x00, 0x27, 0x00, 0x1E, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x07, +/* 00019D40 */ 0x00, 0x78, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x88, 0x03, 0x16, 0xFF, 0x01, 0x00, 0x40, 0x02, +/* 00019D50 */ 0xFE, 0xC2, 0x17, 0xFE, 0xC2, 0x17, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, 0xC2, 0x17, 0x65, +/* 00019D60 */ 0x65, 0x02, 0x05, 0x03, 0x06, 0x05, 0x0D, 0x0D, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x05, 0x08, +/* 00019D70 */ 0x26, 0x8E, 0x01, 0x06, 0x06, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x8E, 0x01, 0x03, 0x07, 0x5E, +/* 00019D80 */ 0x07, 0x07, 0x00, 0x59, 0x01, 0x07, 0x59, 0x02, 0x03, 0x59, 0x03, 0x04, 0x1F, 0x04, 0x00, 0x06, +/* 00019D90 */ 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x84, 0x02, 0xFE, 0xD8, 0x17, 0x02, 0x00, 0x00, +/* 00019DA0 */ 0x00, 0x00, 0x24, 0x00, 0x4E, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x47, 0x00, 0x77, +/* 00019DB0 */ 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x87, 0x03, 0x15, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0x4B, +/* 00019DC0 */ 0x17, 0xFE, 0x4B, 0x17, 0x81, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0x4B, 0x17, 0x6D, 0x6D, 0x02, +/* 00019DD0 */ 0x05, 0x03, 0x06, 0x05, 0x0E, 0x0E, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x05, 0x08, 0x30, 0x8E, +/* 00019DE0 */ 0x01, 0x06, 0x06, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x8E, 0x01, 0x03, 0x07, 0x5E, 0x07, 0x07, +/* 00019DF0 */ 0x00, 0x59, 0x01, 0x07, 0x59, 0x02, 0x03, 0x01, 0x5F, 0x01, 0x07, 0x04, 0x59, 0x03, 0x07, 0x21, +/* 00019E00 */ 0x04, 0x00, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x01, +/* 00019E10 */ 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xFE, +/* 00019E20 */ 0x9B, 0x02, 0xFE, 0x63, 0x17, 0x02, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x54, 0x00, 0x00, 0xFF, +/* 00019E30 */ 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x07, 0x00, 0x76, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x86, 0x03, +/* 00019E40 */ 0x14, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0xCE, 0x16, 0xFE, 0xCE, 0x16, 0x01, 0xFE, 0x00, 0x90, +/* 00019E50 */ 0x04, 0x04, 0xFE, 0xCE, 0x16, 0x73, 0x73, 0x02, 0x06, 0x03, 0x07, 0x06, 0x0E, 0x0E, 0x01, 0x02, +/* 00019E60 */ 0x01, 0x01, 0x01, 0x01, 0x06, 0x08, 0x29, 0x8E, 0x01, 0x06, 0x07, 0x07, 0x05, 0x00, 0x59, 0x00, +/* 00019E70 */ 0x02, 0x8E, 0x01, 0x03, 0x08, 0x5E, 0x08, 0x08, 0x00, 0x59, 0x01, 0x08, 0x59, 0x02, 0x03, 0x59, +/* 00019E80 */ 0x03, 0x04, 0x59, 0x04, 0x05, 0x1F, 0x05, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, +/* 00019E90 */ 0xFE, 0x9A, 0x02, 0xFE, 0xE9, 0x16, 0x02, 0x00, 0x00, 0x00, 0x00, 0x27, 0x00, 0x57, 0x00, 0x00, +/* 00019EA0 */ 0xFF, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x07, 0x00, 0x75, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x85, +/* 00019EB0 */ 0x03, 0x13, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0x53, 0x16, 0xFE, 0x53, 0x16, 0x01, 0xFE, 0x00, +/* 00019EC0 */ 0x90, 0x04, 0x04, 0xFE, 0x53, 0x16, 0x71, 0x71, 0x02, 0x06, 0x03, 0x07, 0x06, 0x0E, 0x0E, 0x01, +/* 00019ED0 */ 0x02, 0x01, 0x01, 0x01, 0x01, 0x06, 0x08, 0x29, 0x8E, 0x01, 0x06, 0x07, 0x07, 0x05, 0x00, 0x59, +/* 00019EE0 */ 0x00, 0x02, 0x8E, 0x01, 0x03, 0x08, 0x5E, 0x08, 0x08, 0x00, 0x59, 0x01, 0x08, 0x59, 0x02, 0x03, +/* 00019EF0 */ 0x59, 0x03, 0x04, 0x59, 0x04, 0x05, 0x1F, 0x05, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, +/* 00019F00 */ 0x00, 0xFE, 0x87, 0x02, 0xFE, 0x6F, 0x16, 0x02, 0x00, 0x00, 0x00, 0x00, 0x27, 0x00, 0x54, 0x00, +/* 00019F10 */ 0x00, 0xFF, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x07, 0x00, 0x74, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, +/* 00019F20 */ 0x84, 0x03, 0x12, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0xE6, 0x15, 0xFE, 0xE6, 0x15, 0x01, 0xFE, +/* 00019F30 */ 0x00, 0x90, 0x03, 0x03, 0xFE, 0xE6, 0x15, 0x63, 0x63, 0x02, 0x05, 0x03, 0x06, 0x05, 0x0D, 0x0D, +/* 00019F40 */ 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x05, 0x08, 0x26, 0x8E, 0x01, 0x06, 0x06, 0x07, 0x04, 0x00, +/* 00019F50 */ 0x59, 0x00, 0x02, 0x8E, 0x01, 0x03, 0x07, 0x5E, 0x07, 0x07, 0x00, 0x59, 0x01, 0x07, 0x59, 0x02, +/* 00019F60 */ 0x03, 0x59, 0x03, 0x04, 0x1F, 0x04, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, +/* 00019F70 */ 0x99, 0x02, 0xFE, 0xF9, 0x15, 0x02, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x4F, 0x00, 0x00, 0xFF, +/* 00019F80 */ 0x5C, 0x00, 0x01, 0x00, 0x10, 0x07, 0x00, 0x73, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x83, 0x03, +/* 00019F90 */ 0x11, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0x7B, 0x15, 0xFE, 0x7B, 0x15, 0x01, 0xFE, 0x00, 0x90, +/* 00019FA0 */ 0x04, 0x04, 0xFE, 0x7B, 0x15, 0x61, 0x61, 0x02, 0x06, 0x03, 0x07, 0x06, 0x0D, 0x0D, 0x01, 0x02, +/* 00019FB0 */ 0x06, 0x08, 0x25, 0x8E, 0x01, 0x06, 0x07, 0x07, 0x05, 0x00, 0x59, 0x00, 0x02, 0x8E, 0x01, 0x18, +/* 00019FC0 */ 0x08, 0x59, 0x01, 0x08, 0x59, 0x02, 0x03, 0x59, 0x03, 0x04, 0x59, 0x04, 0x05, 0x1F, 0x05, 0x00, +/* 00019FD0 */ 0x07, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x9B, 0x15, 0x02, 0x00, 0x00, 0x00, 0x00, +/* 00019FE0 */ 0x23, 0x00, 0x40, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0x01, 0x00, 0x10, 0x07, 0x00, 0x72, 0x08, 0xA2, +/* 00019FF0 */ 0x41, 0xC1, 0x01, 0xFE, 0x82, 0x03, 0x10, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0x25, 0x15, 0xFE, +/* 0001A000 */ 0x25, 0x15, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, 0x25, 0x15, 0x4C, 0x4C, 0x02, 0x05, 0x03, +/* 0001A010 */ 0x06, 0x05, 0x0C, 0x0C, 0x01, 0x02, 0x05, 0x08, 0x22, 0x8E, 0x01, 0x06, 0x06, 0x07, 0x04, 0x00, +/* 0001A020 */ 0x59, 0x00, 0x02, 0x8E, 0x01, 0x19, 0x07, 0x59, 0x01, 0x07, 0x59, 0x02, 0x03, 0x59, 0x03, 0x04, +/* 0001A030 */ 0x1F, 0x04, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x38, 0x15, 0x02, 0x00, +/* 0001A040 */ 0x00, 0x00, 0x00, 0x20, 0x00, 0x38, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0x01, 0x00, 0x10, 0x07, 0x00, +/* 0001A050 */ 0x71, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x81, 0x03, 0x0F, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, +/* 0001A060 */ 0xC7, 0x14, 0xFE, 0xC7, 0x14, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, 0xC7, 0x14, 0x54, 0x54, +/* 0001A070 */ 0x02, 0x05, 0x03, 0x06, 0x05, 0x0C, 0x0C, 0x01, 0x02, 0x05, 0x08, 0x22, 0x8E, 0x01, 0x06, 0x06, +/* 0001A080 */ 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x8E, 0x01, 0x17, 0x07, 0x59, 0x01, 0x07, 0x59, 0x02, 0x03, +/* 0001A090 */ 0x59, 0x03, 0x04, 0x1F, 0x04, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xDE, +/* 0001A0A0 */ 0x14, 0x02, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x3C, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0xC1, 0x03, +/* 0001A0B0 */ 0x10, 0x07, 0x00, 0x6F, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x80, 0x03, 0x0E, 0xFF, 0x01, 0x00, +/* 0001A0C0 */ 0x40, 0x02, 0xFE, 0x54, 0x14, 0xFE, 0x54, 0x14, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, 0x54, +/* 0001A0D0 */ 0x14, 0x68, 0x68, 0x02, 0x05, 0x03, 0x06, 0x05, 0x0D, 0x0D, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, +/* 0001A0E0 */ 0x05, 0x08, 0x26, 0x8E, 0x01, 0x06, 0x06, 0x07, 0x04, 0x00, 0x59, 0x00, 0x02, 0x8E, 0x01, 0x03, +/* 0001A0F0 */ 0x07, 0x5E, 0x07, 0x07, 0x00, 0x59, 0x01, 0x07, 0x59, 0x02, 0x03, 0x59, 0x03, 0x04, 0x1F, 0x04, +/* 0001A100 */ 0x00, 0x06, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xA5, 0x02, 0xFE, 0x69, 0x14, 0x02, +/* 0001A110 */ 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x52, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x07, +/* 0001A120 */ 0x00, 0x6E, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x7F, 0x03, 0x0D, 0xFF, 0x01, 0x00, 0x40, 0x02, +/* 0001A130 */ 0xFE, 0x0C, 0x14, 0xFE, 0x0C, 0x14, 0x01, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, 0x0C, 0x14, 0x3E, +/* 0001A140 */ 0x3E, 0x02, 0x05, 0x02, 0x05, 0x04, 0x0B, 0x0B, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x1F, +/* 0001A150 */ 0x8E, 0x01, 0x03, 0x06, 0x6C, 0x05, 0x06, 0x00, 0x07, 0x03, 0x00, 0x59, 0x00, 0x06, 0x59, 0x01, +/* 0001A160 */ 0x02, 0x59, 0x02, 0x03, 0x1F, 0x03, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, +/* 0001A170 */ 0xC0, 0x02, 0xFE, 0x1D, 0x14, 0x02, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x2C, 0x00, 0x00, 0xFF, +/* 0001A180 */ 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x07, 0x00, 0x6D, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x7E, 0x03, +/* 0001A190 */ 0x0C, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0x8C, 0x13, 0xFE, 0x8C, 0x13, 0x01, 0xFE, 0x00, 0x90, +/* 0001A1A0 */ 0x04, 0x04, 0xFE, 0x8C, 0x13, 0x76, 0x76, 0x02, 0x06, 0x03, 0x07, 0x06, 0x0E, 0x0E, 0x01, 0x02, +/* 0001A1B0 */ 0x01, 0x01, 0x01, 0x01, 0x06, 0x08, 0x29, 0x8E, 0x01, 0x06, 0x07, 0x07, 0x05, 0x00, 0x59, 0x00, +/* 0001A1C0 */ 0x02, 0x8E, 0x01, 0x03, 0x08, 0x5E, 0x08, 0x08, 0x00, 0x59, 0x01, 0x08, 0x59, 0x02, 0x03, 0x59, +/* 0001A1D0 */ 0x03, 0x04, 0x59, 0x04, 0x05, 0x1F, 0x05, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, +/* 0001A1E0 */ 0xFE, 0xA6, 0x02, 0xFE, 0xAB, 0x13, 0x02, 0x00, 0x00, 0x00, 0x00, 0x27, 0x00, 0x56, 0x00, 0x00, +/* 0001A1F0 */ 0xFF, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x07, 0x00, 0x6C, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x7D, +/* 0001A200 */ 0x03, 0x0B, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0x0A, 0x13, 0xFE, 0x0A, 0x13, 0x01, 0xFE, 0x00, +/* 0001A210 */ 0x90, 0x04, 0x04, 0xFE, 0x0A, 0x13, 0x78, 0x78, 0x02, 0x06, 0x03, 0x07, 0x06, 0x0E, 0x0E, 0x01, +/* 0001A220 */ 0x02, 0x01, 0x01, 0x01, 0x01, 0x06, 0x08, 0x29, 0x8E, 0x01, 0x06, 0x07, 0x07, 0x05, 0x00, 0x59, +/* 0001A230 */ 0x00, 0x02, 0x8E, 0x01, 0x03, 0x08, 0x5E, 0x08, 0x08, 0x00, 0x59, 0x01, 0x08, 0x59, 0x02, 0x03, +/* 0001A240 */ 0x59, 0x03, 0x04, 0x59, 0x04, 0x05, 0x1F, 0x05, 0x00, 0x07, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, +/* 0001A250 */ 0x00, 0xFE, 0xA4, 0x02, 0xFE, 0x27, 0x13, 0x02, 0x00, 0x00, 0x00, 0x00, 0x27, 0x00, 0x5A, 0x00, +/* 0001A260 */ 0x00, 0xFF, 0x5C, 0x00, 0xC1, 0x03, 0x10, 0x07, 0x00, 0x6B, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, +/* 0001A270 */ 0x7C, 0x03, 0x0A, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0x96, 0x12, 0xFE, 0x96, 0x12, 0x01, 0xFE, +/* 0001A280 */ 0x00, 0x90, 0x03, 0x03, 0xFE, 0x96, 0x12, 0x6A, 0x6A, 0x02, 0x05, 0x03, 0x06, 0x05, 0x0D, 0x0D, +/* 0001A290 */ 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x05, 0x08, 0x26, 0x8E, 0x01, 0x06, 0x06, 0x07, 0x04, 0x00, +/* 0001A2A0 */ 0x59, 0x00, 0x02, 0x8E, 0x01, 0x03, 0x07, 0x5E, 0x07, 0x07, 0x00, 0x59, 0x01, 0x07, 0x59, 0x02, +/* 0001A2B0 */ 0x03, 0x59, 0x03, 0x04, 0x1F, 0x04, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, +/* 0001A2C0 */ 0xA3, 0x02, 0xFE, 0xAC, 0x12, 0x02, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x53, 0x00, 0x00, 0xFF, +/* 0001A2D0 */ 0x5C, 0x00, 0x01, 0x00, 0x10, 0x07, 0x00, 0x6A, 0x08, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x7B, 0x03, +/* 0001A2E0 */ 0x09, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0x1B, 0x12, 0xFE, 0x1B, 0x12, 0x01, 0xFE, 0x00, 0x90, +/* 0001A2F0 */ 0x04, 0x04, 0xFE, 0x1B, 0x12, 0x71, 0x71, 0x02, 0x06, 0x03, 0x07, 0x06, 0x0D, 0x0D, 0x01, 0x02, +/* 0001A300 */ 0x06, 0x08, 0x25, 0x8E, 0x01, 0x06, 0x07, 0x07, 0x05, 0x00, 0x59, 0x00, 0x02, 0x8E, 0x01, 0x1D, +/* 0001A310 */ 0x08, 0x59, 0x01, 0x08, 0x59, 0x02, 0x03, 0x59, 0x03, 0x04, 0x59, 0x04, 0x05, 0x1F, 0x05, 0x00, +/* 0001A320 */ 0x07, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x40, 0x12, 0x02, 0x00, 0x00, 0x00, 0x00, +/* 0001A330 */ 0x23, 0x00, 0x4B, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0x01, 0x00, 0x10, 0x07, 0x00, 0x69, 0x08, 0xA2, +/* 0001A340 */ 0x41, 0xC1, 0x01, 0xFE, 0x7A, 0x03, 0x08, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0xC4, 0x11, 0xFE, +/* 0001A350 */ 0xC4, 0x11, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0xC4, 0x11, 0x4D, 0x4D, 0x02, 0x04, 0x03, +/* 0001A360 */ 0x05, 0x04, 0x0B, 0x0B, 0x01, 0x02, 0x04, 0x08, 0x1F, 0x8E, 0x01, 0x06, 0x05, 0x07, 0x03, 0x00, +/* 0001A370 */ 0x59, 0x00, 0x02, 0x8E, 0x01, 0x1E, 0x06, 0x59, 0x01, 0x06, 0x59, 0x02, 0x03, 0x1F, 0x03, 0x00, +/* 0001A380 */ 0x05, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0xD7, 0x11, 0x02, 0x00, 0x00, 0x00, 0x00, +/* 0001A390 */ 0x1D, 0x00, 0x39, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0x01, 0x00, 0x10, 0x07, 0x00, 0x68, 0x08, 0xA2, +/* 0001A3A0 */ 0x41, 0xC1, 0x01, 0xFE, 0x79, 0x03, 0x07, 0xFF, 0x01, 0x00, 0x40, 0x02, 0xFE, 0x6D, 0x11, 0xFE, +/* 0001A3B0 */ 0x6D, 0x11, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0x6D, 0x11, 0x4D, 0x4D, 0x02, 0x04, 0x03, +/* 0001A3C0 */ 0x05, 0x04, 0x0B, 0x0B, 0x01, 0x02, 0x04, 0x08, 0x1F, 0x8E, 0x01, 0x06, 0x05, 0x07, 0x03, 0x00, +/* 0001A3D0 */ 0x59, 0x00, 0x02, 0x8E, 0x01, 0x1F, 0x06, 0x59, 0x01, 0x06, 0x59, 0x02, 0x03, 0x1F, 0x03, 0x00, +/* 0001A3E0 */ 0x05, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x80, 0x11, 0x02, 0x00, 0x00, 0x00, 0x00, +/* 0001A3F0 */ 0x1D, 0x00, 0x39, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0x01, 0x00, 0x10, 0x03, 0x00, 0x54, 0x1F, 0xA2, +/* 0001A400 */ 0x41, 0xC1, 0x00, 0xFE, 0xE5, 0x02, 0x06, 0xFE, 0xC6, 0x0D, 0xFE, 0xC6, 0x0D, 0x41, 0xFE, 0x00, +/* 0001A410 */ 0x90, 0x04, 0x04, 0xFE, 0xC6, 0x0D, 0x72, 0x72, 0x06, 0x04, 0x08, 0x09, 0x10, 0x10, 0x01, 0x02, +/* 0001A420 */ 0x07, 0x07, 0x08, 0x2F, 0x8E, 0x01, 0x15, 0x08, 0x07, 0x04, 0x00, 0x59, 0x00, 0x03, 0x59, 0x01, +/* 0001A430 */ 0x04, 0x59, 0x02, 0x05, 0x8E, 0x01, 0x04, 0x09, 0x07, 0x03, 0x00, 0x59, 0x00, 0x03, 0x59, 0x01, +/* 0001A440 */ 0x06, 0x59, 0x02, 0x02, 0x1F, 0x03, 0x09, 0x09, 0x59, 0x03, 0x09, 0x1F, 0x04, 0xFF, 0x08, 0xA8, +/* 0001A450 */ 0x00, 0x24, 0x00, 0xFE, 0xF1, 0x0D, 0x02, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x00, 0x46, 0x00, 0x00, +/* 0001A460 */ 0x7E, 0x5C, 0x00, 0xC1, 0x13, 0x10, 0x4B, 0x00, 0x23, 0x04, 0xA3, 0x41, 0xC1, 0x00, 0xFE, 0xDB, +/* 0001A470 */ 0x02, 0x03, 0xFE, 0x0F, 0x07, 0xFE, 0x0F, 0x07, 0x02, 0xFE, 0x00, 0x90, 0x02, 0x01, 0xFE, 0x0F, +/* 0001A480 */ 0x07, 0xFE, 0x36, 0x02, 0xFE, 0x36, 0x02, 0x06, 0x09, 0x0B, 0x05, 0x19, 0x18, 0x01, 0x02, 0x05, +/* 0001A490 */ 0x05, 0x05, 0x05, 0x01, 0x0A, 0x08, 0x01, 0x19, 0x06, 0xFE, 0x75, 0x03, 0x06, 0xFE, 0x76, 0x03, +/* 0001A4A0 */ 0x06, 0xFE, 0x77, 0x03, 0x06, 0xFE, 0x78, 0x03, 0x07, 0x5B, 0x15, 0x03, 0x00, 0x09, 0x02, 0x45, +/* 0001A4B0 */ 0x09, 0x03, 0x8E, 0x01, 0x35, 0x0B, 0x4A, 0x0B, 0x07, 0x02, 0x00, 0x59, 0x00, 0x02, 0xCE, 0x00, +/* 0001A4C0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x7A, 0x09, 0x0C, 0x00, 0x8E, +/* 0001A4D0 */ 0x01, 0x36, 0x0E, 0x4A, 0x0E, 0x6C, 0x0D, 0x0E, 0x01, 0x07, 0x01, 0x00, 0x59, 0x00, 0x0E, 0x1F, +/* 0001A4E0 */ 0x01, 0x0D, 0x0D, 0x7A, 0x0D, 0x0C, 0x02, 0xD9, 0x00, 0x0D, 0x0C, 0x7A, 0x0D, 0x0C, 0x03, 0xD9, +/* 0001A4F0 */ 0x01, 0x0D, 0x0C, 0x7A, 0x0D, 0x0C, 0x04, 0x59, 0x01, 0x0C, 0x1F, 0x02, 0x00, 0x0B, 0x09, 0x02, +/* 0001A500 */ 0x00, 0xA8, 0x00, 0x24, 0x00, 0x01, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, +/* 0001A510 */ 0x00, 0x00, 0x00, 0x00, 0x75, 0x03, 0x00, 0x00, 0x76, 0x03, 0x00, 0x00, 0x98, 0x01, 0x00, 0x00, +/* 0001A520 */ 0x9B, 0x01, 0x00, 0x00, 0xFE, 0x75, 0x03, 0x69, 0xFE, 0x76, 0x03, 0xFE, 0x98, 0x01, 0xFE, 0x9B, +/* 0001A530 */ 0x01, 0xFE, 0x22, 0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x12, 0x00, 0x51, 0x00, 0x10, +/* 0001A540 */ 0x02, 0x00, 0x2A, 0xA6, 0x01, 0x00, 0x4A, 0xA5, 0x01, 0x00, 0x7F, 0x5C, 0x00, 0xC1, 0x03, 0x10, +/* 0001A550 */ 0x07, 0x00, 0x2C, 0x0C, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x78, 0x03, 0x05, 0xFF, 0x01, 0x00, 0x40, +/* 0001A560 */ 0x02, 0xFE, 0xF2, 0x07, 0xFE, 0xF2, 0x07, 0x49, 0xFE, 0x00, 0x90, 0x03, 0x03, 0xFE, 0xF2, 0x07, +/* 0001A570 */ 0xFE, 0x41, 0x01, 0xFE, 0x41, 0x01, 0x07, 0x02, 0x06, 0x03, 0x23, 0x23, 0x01, 0x02, 0x09, 0x09, +/* 0001A580 */ 0x09, 0x09, 0x05, 0x74, 0x58, 0x04, 0x8E, 0x01, 0x03, 0x06, 0x5E, 0x06, 0x06, 0x00, 0x0F, 0x05, +/* 0001A590 */ 0x00, 0x06, 0xA8, 0x00, 0x09, 0x5F, 0x00, 0x8E, 0x01, 0x36, 0x07, 0x4A, 0x07, 0x6C, 0x06, 0x07, +/* 0001A5A0 */ 0x01, 0x07, 0x02, 0x00, 0x59, 0x00, 0x07, 0x5E, 0x08, 0x04, 0x02, 0x59, 0x01, 0x08, 0x1F, 0x02, +/* 0001A5B0 */ 0x06, 0x06, 0xA6, 0x06, 0x06, 0x03, 0x5E, 0x07, 0x04, 0x04, 0x11, 0x03, 0x00, 0x06, 0x07, 0x09, +/* 0001A5C0 */ 0x2A, 0x00, 0x5E, 0x06, 0x04, 0x05, 0x97, 0x06, 0x06, 0x02, 0xA8, 0x07, 0x14, 0x03, 0x00, 0x06, +/* 0001A5D0 */ 0x07, 0x09, 0x18, 0x00, 0x8E, 0x01, 0x36, 0x07, 0x4A, 0x07, 0x6C, 0x06, 0x07, 0x06, 0x07, 0x01, +/* 0001A5E0 */ 0x00, 0x59, 0x00, 0x07, 0x1F, 0x01, 0x06, 0x06, 0x76, 0x06, 0x04, 0x07, 0x5E, 0x06, 0x04, 0x08, +/* 0001A5F0 */ 0x9C, 0x03, 0x06, 0x02, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x4D, 0x03, 0xCF, 0xFE, 0x76, 0x03, 0xD1, +/* 0001A600 */ 0xFE, 0x75, 0x03, 0xFE, 0x76, 0x03, 0x69, 0xFE, 0x76, 0x03, 0xFE, 0x76, 0x03, 0xFE, 0x14, 0x08, +/* 0001A610 */ 0x06, 0x02, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x2F, 0x00, 0x05, 0x00, 0x2B, 0x00, 0x3D, 0x00, 0x61, +/* 0001A620 */ 0x00, 0x18, 0x00, 0x3D, 0x00, 0x0A, 0x00, 0x26, 0x00, 0x00, 0x7F, 0x4C, 0x00, 0xC1, 0x03, 0x10, +/* 0001A630 */ 0x07, 0x00, 0x28, 0x0C, 0xA2, 0x41, 0xC1, 0x01, 0xFE, 0x77, 0x03, 0x04, 0xFF, 0x01, 0x00, 0x40, +/* 0001A640 */ 0x02, 0xFE, 0x81, 0x07, 0xFE, 0x81, 0x07, 0x09, 0xFE, 0x00, 0x90, 0x02, 0x02, 0xFE, 0x81, 0x07, +/* 0001A650 */ 0x62, 0x62, 0x04, 0x02, 0x05, 0x0E, 0x0D, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x04, 0x28, 0x58, +/* 0001A660 */ 0x03, 0x8E, 0x01, 0x03, 0x05, 0x5E, 0x05, 0x05, 0x00, 0x0E, 0x0E, 0x00, 0x05, 0x5E, 0x05, 0x03, +/* 0001A670 */ 0x01, 0x97, 0x05, 0x05, 0x02, 0x45, 0x00, 0x05, 0x09, 0x05, 0x00, 0xA8, 0x05, 0x46, 0x00, 0x05, +/* 0001A680 */ 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0xFE, 0x4D, 0x03, 0xFE, 0x76, 0x03, 0xFE, 0x9C, 0x07, +/* 0001A690 */ 0x02, 0x02, 0x00, 0x00, 0x00, 0x24, 0x00, 0x46, 0x00, 0x00, 0x7F, 0x5C, 0x00, 0x01, 0x00, 0x10, +/* 0001A6A0 */ 0x07, 0x00, 0x1D, 0x11, 0xA2, 0x41, 0xC0, 0x00, 0xFE, 0xFF, 0x02, 0x02, 0xFE, 0x01, 0x10, 0xFE, +/* 0001A6B0 */ 0x0E, 0x05, 0xFE, 0x0E, 0x05, 0x01, 0xFE, 0x00, 0x90, 0x02, 0x01, 0xFE, 0x0E, 0x05, 0x25, 0x25, +/* 0001A6C0 */ 0x03, 0x04, 0x06, 0x04, 0x0D, 0x0C, 0x01, 0x01, 0x05, 0x07, 0x08, 0x25, 0x15, 0x05, 0x00, 0x04, +/* 0001A6D0 */ 0x03, 0xCD, 0x06, 0x45, 0x04, 0x06, 0x8E, 0x01, 0x04, 0x06, 0x07, 0x03, 0x00, 0x59, 0x00, 0x03, +/* 0001A6E0 */ 0x59, 0x01, 0x04, 0x59, 0x02, 0x02, 0x1F, 0x03, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, +/* 0001A6F0 */ 0x00, 0xFE, 0x0F, 0x05, 0x03, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x0D, 0x00, 0x19, 0x00, 0x17, +/* 0001A700 */ 0x00, 0x00, 0x00}; + +#endif + +} diff --git a/lib/Runtime/Library/InJavascript/Math_object.js b/lib/Runtime/Library/InJavascript/Math_object.js new file mode 100644 index 00000000000..5089ff0e692 --- /dev/null +++ b/lib/Runtime/Library/InJavascript/Math_object.js @@ -0,0 +1,118 @@ +//------------------------------------------------------------------------------------------------------- +// Copyright (C) Microsoft. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. +// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. +//------------------------------------------------------------------------------------------------------- + +"use strict"; + +(function (intrinsic) { + var platform = intrinsic.JsBuiltIn; + + __chakraLibrary.positiveInfinity = platform.POSITIVE_INFINITY; + __chakraLibrary.negativeInfinity = platform.NEGATIVE_INFINITY; + + platform.registerFunction('min', function (value1, value2) { + // #sec-math.min + + // If no arguments are given, the result is positive infinity + // If any value is NaN, the result is NaN. + // The comparison of values to determine the smallest value is done using the Abstract Relational Comparison algorithm except that +0 is considered to be larger than -0. + if (arguments.length === 0) { + return __chakraLibrary.positiveInfinity; + } + + let returnNaN = false; + + value1 = +value1; + if (value1 !== value1) { + returnNaN = true; + } + + if (arguments.length === 1) { + return value1; + } + + if (arguments.length === 2) { + value2 = +value2; + if (value2 !== value2 || returnNaN) { + return NaN; + } + if ((value1 < value2) || (value1 === value2 && value1 === 0 && 1 / value1 < 1 / value2)) { // checks for -0 and +0 + return value1; + } + else { + return value2; + } + } + + let min = value1; + let nextVal; + + for (let i = 1; i < arguments.length; i++) { + nextVal = +arguments[i]; // Force conversion for all args (ensure call to valueOf) + if (returnNaN) { } // Skip check if possible + else if (nextVal !== nextVal) { + returnNaN = true; + min = NaN; + } + else if ((min > nextVal) || (min === nextVal && min === 0 && 1 / min > 1 / nextVal)) { // checks for -0 and +0 + min = nextVal; + } + } + + return min; + }); + + platform.registerFunction('max', function (value1, value2) { + // #sec-math.max + + // If no arguments are given, the result is negative infinity + // If any value is NaN, the result is NaN. + // The comparison of values to determine the largest value is done using the Abstract Relational Comparison algorithm except that +0 is considered to be larger than -0. + if (arguments.length === 0) { + return __chakraLibrary.negativeInfinity; + } + + let returnNaN = false; + + value1 = +value1; + if (value1 !== value1) { + returnNaN = true; + } + + if (arguments.length === 1) { + return value1; + } + + if (arguments.length === 2) { + value2 = +value2; + if (value2 !== value2 || returnNaN) { + return NaN; + } + if ((value1 > value2) || (value1 === value2 && value1 === 0 && 1 / value1 > 1 / value2)) { // checks for -0 and +0 + return value1; + } + else { + return value2; + } + } + + let max = value1; + let nextVal; + + for (let i = 1; i < arguments.length; i++) { + nextVal = +arguments[i]; // Force conversion for all args (ensure call to valueOf) + if (returnNaN) { } // Skip check if possible + else if (nextVal !== nextVal) { + returnNaN = true; + max = NaN; + } + else if ((max < nextVal) || (max === nextVal && max === 0 && 1 / max < 1 / nextVal)) { // checks for -0 and +0 + max = nextVal; + } + } + + return max; + }); +}); diff --git a/lib/Runtime/Library/InJavascript/Object_constructor.js b/lib/Runtime/Library/InJavascript/Object_constructor.js new file mode 100644 index 00000000000..d9d16feb043 --- /dev/null +++ b/lib/Runtime/Library/InJavascript/Object_constructor.js @@ -0,0 +1,42 @@ +//------------------------------------------------------------------------------------------------------- +// Copyright (C) Microsoft. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. +// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. +//------------------------------------------------------------------------------------------------------- + +"use strict"; + +(function (intrinsic) { + var platform = intrinsic.JsBuiltIn; + + __chakraLibrary.raiseNeedObject = platform.raiseNeedObject; + __chakraLibrary.raiseNonObjectFromIterable = platform.raiseNonObjectFromIterable; + __chakraLibrary.objectDefineProperty = platform.builtInJavascriptObjectEntryDefineProperty; + + platform.registerFunction('fromEntries', function (iterable) { + // #sec-object.fromentries + if (iterable === null || iterable === undefined) { + __chakraLibrary.raiseNeedObject("Object.fromEntries"); + } + + const o = {}; + const propDescriptor = { + enumerable : true, + configurable : true, + writable : true, + value : undefined + }; + + let key; + for (const entry of iterable) { + if (typeof entry !== "object" || entry === null) { + __chakraLibrary.raiseNonObjectFromIterable("Object.fromEntries"); + } + + key = entry[0]; + propDescriptor.value = entry[1]; + __chakraLibrary.objectDefineProperty(o, key, propDescriptor); + } + return o; + }); +}); diff --git a/lib/Runtime/Library/IntlEngineInterfaceExtensionObject.cpp b/lib/Runtime/Library/IntlEngineInterfaceExtensionObject.cpp index 2684e901062..ac6f37ad30a 100644 --- a/lib/Runtime/Library/IntlEngineInterfaceExtensionObject.cpp +++ b/lib/Runtime/Library/IntlEngineInterfaceExtensionObject.cpp @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) 2022 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #include "RuntimeLibraryPch.h" @@ -48,68 +49,76 @@ using namespace PlatformAgnostic::ICUHelpers; #endif // INTL_ICU -// NOTE(jahorto): Keep these enums in sync with those by the same name in Intl.js -// These enums are used by both WinGlob- and ICU-backed Intl -enum class NumberFormatStyle -{ - Decimal, // Intl.NumberFormat(locale, { style: "decimal" }); // aka in our code as "number" - Percent, // Intl.NumberFormat(locale, { style: "percent" }); - Currency, // Intl.NumberFormat(locale, { style: "currency", ... }); - - Max, - Default = Decimal, -}; - -enum class NumberFormatCurrencyDisplay -{ - Symbol, // Intl.NumberFormat(locale, { style: "currency", currencyDisplay: "symbol" }); // e.g. "$" or "US$" depeding on locale - Code, // Intl.NumberFormat(locale, { style: "currency", currencyDisplay: "code" }); // e.g. "USD" - Name, // Intl.NumberFormat(locale, { style: "currency", currencyDisplay: "name" }); // e.g. "US dollar" - - Max, - Default = Symbol, -}; - -enum class CollatorSensitivity -{ - Base, - Accent, - Case, - Variant, - - Max, - Default = Variant, -}; - -enum class CollatorCaseFirst -{ - Upper, - Lower, - False, - - Max, - Default = False, +// The following macros allow the key-value pairs to be C++ enums as well as JS objects +// in Intl.js. When adding a new macro, follow the same format as the _VALUES macros below, +// and add your new _VALUES macro to PROJECTED_ENUMS along with the name of the enum. +// NOTE: make sure the last VALUE macro has the highest integer value, since the C++ enum's ::Max +// value is added to the end of the C++ enum definition as an increment of the previous value. +// The ::Max value is used in a defensive assert, and we want to make sure its always 1 greater +// than the highest valid value. + +#define NUMBERFORMATSTYLE_VALUES(VALUE) \ +VALUE(Default, default_, 0) \ +VALUE(Decimal, decimal, 0) \ +VALUE(Percent, percent, 1) \ +VALUE(Currency, currency, 2) + +#define NUMBERFORMATCURRENCYDISPLAY_VALUES(VALUE) \ +VALUE(Default, default_, 0) \ +VALUE(Symbol, symbol, 0) \ +VALUE(Code, code, 1) \ +VALUE(Name, name, 2) + +#define COLLATORSENSITIVITY_VALUES(VALUE) \ +VALUE(Default, default_, 3) \ +VALUE(Base, base, 0) \ +VALUE(Accent, accent, 1) \ +VALUE(Case, case_, 2) \ +VALUE(Variant, variant, 3) + +#define COLLATORCASEFIRST_VALUES(VALUE) \ +VALUE(Default, default_, 2) \ +VALUE(Upper, upper, 0) \ +VALUE(Lower, lower, 1) \ +VALUE(False, false_, 2) + +// LocaleDataKind intentionally has no Default value +#define LOCALEDATAKIND_VALUES(VALUE) \ +VALUE(Collation, co, 0) \ +VALUE(CaseFirst, kf, 1) \ +VALUE(Numeric, kn, 2) \ +VALUE(Calendar, ca, 3) \ +VALUE(NumberingSystem, nu, 4) \ +VALUE(HourCycle, hc, 5) + +//BuiltInFunctionID intentionally has no Default value +#define BUILTINFUNCTIONID_VALUES(VALUE) \ +VALUE(DateToLocaleString, DateToLocaleString, 0) \ +VALUE(DateToLocaleDateString, DateToLocaleDateString, 1) \ +VALUE(DateToLocaleTimeString, DateToLocaleTimeString, 2) \ +VALUE(NumberToLocaleString, NumberToLocaleString, 3) \ +VALUE(StringLocaleCompare, StringLocaleCompare, 4) + +#define ENUM_VALUE(enumName, propId, value) enumName = value, +#define PROJECTED_ENUM(ClassName, VALUES) \ +enum class ClassName \ +{ \ + VALUES(ENUM_VALUE) \ + Max \ }; -#pragma warning(push) -#pragma warning(disable:4309) // truncation of constant value -#pragma warning(disable:4838) // conversion from 'int' to 'const char' requires a narrowing conversion +#define PROJECTED_ENUMS(PROJECT) \ +PROJECT(LocaleDataKind, LOCALEDATAKIND_VALUES) \ +PROJECT(CollatorCaseFirst, COLLATORCASEFIRST_VALUES) \ +PROJECT(CollatorSensitivity, COLLATORSENSITIVITY_VALUES) \ +PROJECT(NumberFormatCurrencyDisplay, NUMBERFORMATCURRENCYDISPLAY_VALUES) \ +PROJECT(NumberFormatStyle, NUMBERFORMATSTYLE_VALUES) \ +PROJECT(BuiltInFunctionID, BUILTINFUNCTIONID_VALUES) -#if DISABLE_JIT -#if TARGET_64 -#include "InJavascript/Intl.js.nojit.bc.64b.h" -#else -#include "InJavascript/Intl.js.nojit.bc.32b.h" -#endif -#else -#if TARGET_64 -#include "InJavascript/Intl.js.bc.64b.h" -#else -#include "InJavascript/Intl.js.bc.32b.h" -#endif -#endif +PROJECTED_ENUMS(PROJECTED_ENUM) -#pragma warning(pop) +#undef PROJECTED_ENUM +#undef ENUM_VALUE #define IfFailAssertAndThrowHr(op) \ if (FAILED(hr=(op))) \ @@ -179,7 +188,7 @@ enum class CollatorCaseFirst GetPropertyFrom(obj, Js::PropertyIds::builtInPropID) \ #define GetTypedPropertyBuiltInFrom(obj, builtInPropID, Type) \ - (GetPropertyFrom(obj, Js::PropertyIds::builtInPropID) && Type::Is(propertyValue)) \ + (GetPropertyFrom(obj, Js::PropertyIds::builtInPropID) && VarIs(propertyValue)) \ #define HasPropertyOn(obj, propID) \ Js::JavascriptOperators::HasProperty(obj, propID) \ @@ -330,7 +339,7 @@ namespace Js typedef FinalizableICUObject FinalizableUPluralRules; template - static void EnsureBuffer(_In_ TExecutor executor, _In_ Recycler *recycler, _Outptr_result_buffer_(returnLength) char16 **ret, _Out_ int *returnLength, _In_ bool allowZeroLengthStrings = false, _In_ int firstTryLength = 8) + static void EnsureBuffer(_In_ TExecutor executor, _In_ Recycler *recycler, _Outptr_result_buffer_(*returnLength) char16 **ret, _Out_ int *returnLength, _In_ bool allowZeroLengthStrings = false, _In_ int firstTryLength = 8) { UErrorCode status = U_ZERO_ERROR; *ret = RecyclerNewArrayLeaf(recycler, char16, firstTryLength); @@ -360,9 +369,9 @@ namespace Js Var propertyValue = nullptr; JavascriptOperators::GetProperty(state, propertyId, &propertyValue, state->GetScriptContext()); - AssertOrFailFast(propertyValue && T::Is(propertyValue)); + AssertOrFailFast(propertyValue && VarIs(propertyValue)); - return T::UnsafeFromVar(propertyValue); + return UnsafeVarTo(propertyValue); } static JavascriptString *AssertStringProperty(_In_ DynamicObject *state, _In_ PropertyIds propertyId) @@ -431,7 +440,7 @@ namespace Js template static void LangtagToLocaleID(_In_ JavascriptString *langtag, _Out_ char(&localeID)[N]) { - LangtagToLocaleID(langtag->GetSz(), langtag->GetLength(), localeID); + LangtagToLocaleID(langtag->GetString(), langtag->GetLength(), localeID); } template @@ -501,9 +510,6 @@ namespace Js } JavascriptLibrary* library = scriptContext->GetLibrary(); - // Ensure JsBuiltIns are initialized before initializing Intl which uses some of them. - library->EnsureBuiltInEngineIsReady(); - DynamicObject* commonObject = library->GetEngineInterfaceObject()->GetCommonNativeInterfaces(); if (scriptContext->IsIntlEnabled()) { @@ -533,25 +539,52 @@ namespace Js bool IntlEngineInterfaceExtensionObject::InitializeIntlNativeInterfaces(DynamicObject* intlNativeInterfaces, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode) { - typeHandler->Convert(intlNativeInterfaces, mode, 16); + int initSlotCapacity = 0; + + // automatically get the initSlotCapacity from everything we are about to add to intlNativeInterfaces +#define INTL_ENTRY(id, func) initSlotCapacity++; +#include "IntlExtensionObjectBuiltIns.h" +#undef INTL_ENTRY + +#define PROJECTED_ENUM(ClassName, VALUES) initSlotCapacity++; +PROJECTED_ENUMS(PROJECTED_ENUM) +#undef PROJECTED_ENUM + + // add capacity for platform.winglob and platform.FallbackSymbol + initSlotCapacity += 2; + + typeHandler->Convert(intlNativeInterfaces, mode, initSlotCapacity); ScriptContext* scriptContext = intlNativeInterfaces->GetScriptContext(); JavascriptLibrary* library = scriptContext->GetLibrary(); // gives each entrypoint a property ID on the intlNativeInterfaces library object -#ifdef INTL_ENTRY -#undef INTL_ENTRY -#endif -#define INTL_ENTRY(id, func) \ - library->AddFunctionToLibraryObject(intlNativeInterfaces, Js::PropertyIds::##id, &IntlEngineInterfaceExtensionObject::EntryInfo::Intl_##func, 1); +#define INTL_ENTRY(id, func) library->AddFunctionToLibraryObject(intlNativeInterfaces, Js::PropertyIds::##id, &IntlEngineInterfaceExtensionObject::EntryInfo::Intl_##func, 1); #include "IntlExtensionObjectBuiltIns.h" #undef INTL_ENTRY + library->AddMember(intlNativeInterfaces, PropertyIds::FallbackSymbol, library->CreateSymbol(BuiltInPropertyRecords::_intlFallbackSymbol)); + + DynamicObject * enumObj = nullptr; + +// Projects the exact layout of our C++ enums into Intl.js so that we dont have to remember to keep them in sync +#define ENUM_VALUE(enumName, propId, value) library->AddMember(enumObj, PropertyIds::##propId, JavascriptNumber::ToVar(value, scriptContext)); +#define PROJECTED_ENUM(ClassName, VALUES) \ + enumObj = library->CreateObject(); \ + VALUES(ENUM_VALUE) \ + library->AddMember(intlNativeInterfaces, PropertyIds::##ClassName, enumObj); \ + +PROJECTED_ENUMS(PROJECTED_ENUM) + +#undef PROJECTED_ENUM +#undef ENUM_VALUE + #if INTL_WINGLOB library->AddMember(intlNativeInterfaces, Js::PropertyIds::winglob, library->GetTrue()); #else library->AddMember(intlNativeInterfaces, Js::PropertyIds::winglob, library->GetFalse()); +#if defined(NTBUILD) // when using ICU, we can call ulocdata_getCLDRVersion to ensure that ICU is functioning properly before allowing Intl to continue. // ulocdata_getCLDRVersion will cause the data file to be loaded, and if we don't have enough memory to do so, we can throw OutOfMemory here. // This is to protect against spurious U_MISSING_RESOURCE_ERRORs and U_FILE_ACCESS_ERRORs coming from early-lifecycle @@ -574,8 +607,12 @@ namespace Js } AssertOrFailFastMsg(U_SUCCESS(status), "ulocdata_getCLDRVersion returned non-OOM failure"); +#endif // defined(NTBUILD) #endif // else !INTL_WINGLOB + // Add a reference to the built-in Intl object that can be referenced from the init code in Intl.js. + library->AddMember(intlNativeInterfaces, Js::PropertyIds::Intl, library->GetIntlObject()); + intlNativeInterfaces->SetHasNoEnumerableProperties(true); return true; @@ -597,13 +634,13 @@ namespace Js return; } - if (!JavascriptOperators::GetProperty(DynamicObject::FromVar(propertyValue), Js::PropertyIds::prototype, &prototypeValue, scriptContext) || + if (!JavascriptOperators::GetProperty(VarTo(propertyValue), Js::PropertyIds::prototype, &prototypeValue, scriptContext) || !JavascriptOperators::IsObject(prototypeValue)) { return; } - prototypeObject = DynamicObject::FromVar(prototypeValue); + prototypeObject = VarTo(prototypeValue); if (!JavascriptOperators::GetProperty(prototypeObject, Js::PropertyIds::resolvedOptions, &resolvedOptionsValue, scriptContext) || !JavascriptOperators::IsObject(resolvedOptionsValue)) @@ -611,7 +648,7 @@ namespace Js return; } - functionObj = DynamicObject::FromVar(resolvedOptionsValue); + functionObj = VarTo(resolvedOptionsValue); functionObj->SetConfigurable(Js::PropertyIds::prototype, true); functionObj->DeleteProperty(Js::PropertyIds::prototype, Js::PropertyOperationFlags::PropertyOperation_None); @@ -621,7 +658,7 @@ namespace Js return; } - functionObj = DynamicObject::FromVar(getter); + functionObj = VarTo(getter); functionObj->SetConfigurable(Js::PropertyIds::prototype, true); functionObj->DeleteProperty(Js::PropertyIds::prototype, Js::PropertyOperationFlags::PropertyOperation_None); } @@ -663,7 +700,7 @@ namespace Js SRCINFO *hsi = scriptContext->AddHostSrcInfo(&si); uint32 flags = fscrIsLibraryCode | (CONFIG_FLAG(CreateFunctionProxy) && !scriptContext->IsProfiling() ? fscrAllowFunctionProxy : 0); - HRESULT hr = Js::ByteCodeSerializer::DeserializeFromBuffer(scriptContext, flags, (LPCUTF8)nullptr, hsi, (byte*)Library_Bytecode_Intl, nullptr, &this->intlByteCode); + HRESULT hr = Js::ByteCodeSerializer::DeserializeFromBuffer(scriptContext, flags, (LPCUTF8)nullptr, hsi, (byte*)js::Library_Bytecode_Intl, nullptr, &this->intlByteCode); IfFailAssertMsgAndThrowHr(hr, "Failed to deserialize Intl.js bytecode - very probably the bytecode needs to be rebuilt."); @@ -673,6 +710,11 @@ namespace Js void IntlEngineInterfaceExtensionObject::InjectIntlLibraryCode(_In_ ScriptContext * scriptContext, DynamicObject* intlObject, IntlInitializationType intlInitializationType) { + + // Ensure JsBuiltIns are initialized before initializing Intl which uses some of them. + scriptContext->GetLibrary()->EnsureArrayBuiltInsAreReady(); + scriptContext->GetLibrary()->EnsureMathBuiltInsAreReady(); + JavascriptExceptionObject *pExceptionObject = nullptr; #ifdef INTL_WINGLOB WindowsGlobalizationAdapter* globAdapter = GetWindowsGlobalizationAdapter(scriptContext); @@ -825,7 +867,7 @@ namespace Js { EngineInterfaceObject_CommonFunctionProlog(function, callInfo); - if (args.Info.Count < 2 || !JavascriptError::Is(args.Values[1])) + if (args.Info.Count < 2 || !VarIs(args.Values[1])) { AssertMsg(false, "Intl's Assert platform API was called incorrectly."); return scriptContext->GetLibrary()->GetUndefined(); @@ -835,7 +877,7 @@ namespace Js #ifdef INTL_ICU_DEBUG Output::Print(_u("EntryIntl_RaiseAssert\n")); #endif - JavascriptExceptionOperators::Throw(JavascriptError::FromVar(args.Values[1]), scriptContext); + JavascriptExceptionOperators::Throw(VarTo(args.Values[1]), scriptContext); #else return scriptContext->GetLibrary()->GetUndefined(); #endif @@ -849,13 +891,13 @@ namespace Js #else EngineInterfaceObject_CommonFunctionProlog(function, callInfo); - if (args.Info.Count < 2 || !JavascriptString::Is(args.Values[1])) + if (args.Info.Count < 2 || !VarIs(args.Values[1])) { // IsWellFormedLanguageTag of undefined or non-string is false return scriptContext->GetLibrary()->GetFalse(); } - JavascriptString *argString = JavascriptString::FromVar(args.Values[1]); + JavascriptString *argString = VarTo(args.Values[1]); return TO_JSBOOL(scriptContext, GetWindowsGlobalizationAdapter(scriptContext)->IsWellFormedLanguageTag(scriptContext, argString->GetSz())); #endif @@ -866,10 +908,10 @@ namespace Js EngineInterfaceObject_CommonFunctionProlog(function, callInfo); #if defined(INTL_ICU) - INTL_CHECK_ARGS(args.Info.Count == 2 && JavascriptString::Is(args[1])); + INTL_CHECK_ARGS(args.Info.Count == 2 && VarIs(args[1])); UErrorCode status = U_ZERO_ERROR; - JavascriptString *langtag = JavascriptString::UnsafeFromVar(args[1]); + JavascriptString *langtag = UnsafeVarTo(args[1]); utf8::WideToNarrow langtag8(langtag->GetSz(), langtag->GetLength()); // ICU doesn't have a full-fledged canonicalization implementation that correctly replaces all preferred values @@ -916,13 +958,13 @@ namespace Js return JavascriptString::NewWithBuffer(canonicalized16, toLangTagResultLength, scriptContext); #else - if (args.Info.Count < 2 || !JavascriptString::Is(args.Values[1])) + if (args.Info.Count < 2 || !VarIs(args.Values[1])) { // NormalizeLanguageTag of undefined or non-string is undefined return scriptContext->GetLibrary()->GetUndefined(); } - JavascriptString *argString = JavascriptString::FromVar(args.Values[1]); + JavascriptString *argString = VarTo(args.Values[1]); JavascriptString *retVal; HRESULT hr; AutoHSTRING str; @@ -1025,9 +1067,9 @@ namespace Js Var IntlEngineInterfaceExtensionObject::EntryIntl_Is##ctorShortName##LocaleAvailable(RecyclableObject* function, CallInfo callInfo, ...) \ { \ EngineInterfaceObject_CommonFunctionProlog(function, callInfo); \ - INTL_CHECK_ARGS(args.Info.Count == 2 && JavascriptString::Is(args.Values[1])); \ + INTL_CHECK_ARGS(args.Info.Count == 2 && VarIs(args.Values[1])); \ return scriptContext->GetLibrary()->GetTrueOrFalse( \ - IsLocaleAvailable<##icuNamespace##_getAvailable, ##icuNamespace##_countAvailable>(JavascriptString::UnsafeFromVar(args.Values[1])) \ + IsLocaleAvailable<##icuNamespace##_getAvailable, ##icuNamespace##_countAvailable>(UnsafeVarTo(args.Values[1])) \ ); \ } #else @@ -1047,15 +1089,8 @@ DEFINE_ISXLOCALEAVAILABLE(DTF, udat) DEFINE_ISXLOCALEAVAILABLE(PR, uloc) #ifdef INTL_ICU - enum class LocaleDataKind - { - Collation, - CaseFirst, - Numeric, - Calendar, - NumberingSystem, - HourCycle - }; + + #endif Var IntlEngineInterfaceExtensionObject::EntryIntl_GetLocaleData(RecyclableObject* function, CallInfo callInfo, ...) @@ -1065,7 +1100,7 @@ DEFINE_ISXLOCALEAVAILABLE(PR, uloc) INTL_CHECK_ARGS( args.Info.Count == 3 && (JavascriptNumber::Is(args.Values[1]) || TaggedInt::Is(args.Values[1])) && - JavascriptString::Is(args.Values[2]) + VarIs(args.Values[2]) ); LocaleDataKind kind = (LocaleDataKind) (TaggedInt::Is(args.Values[1]) @@ -1076,7 +1111,7 @@ DEFINE_ISXLOCALEAVAILABLE(PR, uloc) UErrorCode status = U_ZERO_ERROR; char localeID[ULOC_FULLNAME_CAPACITY] = { 0 }; - JavascriptString *langtag = JavascriptString::UnsafeFromVar(args.Values[2]); + JavascriptString *langtag = UnsafeVarTo(args.Values[2]); LangtagToLocaleID(langtag, localeID); JavascriptLibrary *library = scriptContext->GetLibrary(); @@ -1085,11 +1120,13 @@ DEFINE_ISXLOCALEAVAILABLE(PR, uloc) if (kind == LocaleDataKind::Collation) { ScopedUEnumeration collations(ucol_getKeywordValuesForLocale("collation", localeID, false, &status)); - ICU_ASSERT(status, true); + int collationsCount = uenum_count(collations, &status); + + // we expect collationsCount to have at least "standard" and "search" in it + ICU_ASSERT(status, collationsCount > 2); // the return array can't include "standard" and "search", but must have its first element be null (count - 2 + 1) [#sec-intl-collator-internal-slots] - ret = library->CreateArray(uenum_count(collations, &status) - 1); - ICU_ASSERT(status, true); + ret = library->CreateArray(collationsCount - 1); ret->SetItem(0, library->GetNull(), flag); int collationLen = 0; @@ -1109,7 +1146,7 @@ DEFINE_ISXLOCALEAVAILABLE(PR, uloc) const size_t unicodeCollationLen = strlen(unicodeCollation); // we only need strlen(unicodeCollation) + 1 char16s because unicodeCollation will always be ASCII (funnily enough) - char16 *unicodeCollation16 = RecyclerNewArrayLeaf(scriptContext->GetRecycler(), char16, strlen(unicodeCollation) + 1); + char16 *unicodeCollation16 = RecyclerNewArrayLeaf(scriptContext->GetRecycler(), char16, unicodeCollationLen + 1); charcount_t unicodeCollation16Len = 0; HRESULT hr = utf8::NarrowStringToWideNoAlloc( unicodeCollation, @@ -1122,7 +1159,7 @@ DEFINE_ISXLOCALEAVAILABLE(PR, uloc) hr == S_OK && unicodeCollation16Len == unicodeCollationLen && unicodeCollation16Len < MaxCharCount, "Unicode collation char16 conversion was unsuccessful" ); - // i + 1 to not ovewrite leading null element + // i + 1 to not overwrite leading null element ret->SetItem(i + 1, JavascriptString::NewWithBuffer( unicodeCollation16, unicodeCollation16Len, @@ -1289,7 +1326,7 @@ DEFINE_ISXLOCALEAVAILABLE(PR, uloc) { EngineInterfaceObject_CommonFunctionProlog(function, callInfo); - if (args.Info.Count < 2 || !JavascriptString::Is(args.Values[1])) + if (args.Info.Count < 2 || !VarIs(args.Values[1])) { // ResolveLocaleLookup of undefined or non-string is undefined return scriptContext->GetLibrary()->GetUndefined(); @@ -1301,7 +1338,7 @@ DEFINE_ISXLOCALEAVAILABLE(PR, uloc) #endif return scriptContext->GetLibrary()->GetNull(); #else - JavascriptString *argString = JavascriptString::FromVar(args.Values[1]); + JavascriptString *argString = VarTo(args.Values[1]); PCWSTR passedLocale = argString->GetSz(); // REVIEW should we zero the whole array for safety? WCHAR resolvedLocaleName[LOCALE_NAME_MAX_LENGTH]; @@ -1321,7 +1358,7 @@ DEFINE_ISXLOCALEAVAILABLE(PR, uloc) { EngineInterfaceObject_CommonFunctionProlog(function, callInfo); - if (args.Info.Count < 2 || !JavascriptString::Is(args.Values[1])) + if (args.Info.Count < 2 || !VarIs(args.Values[1])) { // NormalizeLanguageTag of undefined or non-string is undefined return scriptContext->GetLibrary()->GetUndefined(); @@ -1331,7 +1368,7 @@ DEFINE_ISXLOCALEAVAILABLE(PR, uloc) AssertOrFailFastMsg(false, "Intl-ICU does not implement ResolveLocaleBestFit"); return nullptr; #else // !INTL_ICU - JavascriptString *localeStrings = JavascriptString::FromVar(args.Values[1]); + JavascriptString *localeStrings = VarTo(args.Values[1]); PCWSTR passedLocale = localeStrings->GetSz(); DelayLoadWindowsGlobalization* wgl = scriptContext->GetThreadContext()->GetWindowsGlobalizationLibrary(); WindowsGlobalizationAdapter* wga = GetWindowsGlobalizationAdapter(scriptContext); @@ -1393,7 +1430,7 @@ DEFINE_ISXLOCALEAVAILABLE(PR, uloc) { EngineInterfaceObject_CommonFunctionProlog(function, callInfo); - if (args.Info.Count < 2 || !JavascriptString::Is(args.Values[1])) + if (args.Info.Count < 2 || !VarIs(args.Values[1])) { // NormalizeLanguageTag of undefined or non-string is undefined return scriptContext->GetLibrary()->GetUndefined(); @@ -1406,7 +1443,7 @@ DEFINE_ISXLOCALEAVAILABLE(PR, uloc) AutoCOMPtr language; AutoCOMPtr extensionSubtags; HRESULT hr; - if (FAILED(hr = wga->CreateLanguage(scriptContext, JavascriptString::FromVar(args.Values[1])->GetSz(), &language))) + if (FAILED(hr = wga->CreateLanguage(scriptContext, VarTo(args.Values[1])->GetSz(), &language))) { HandleOOMSOEHR(hr); return scriptContext->GetLibrary()->GetUndefined(); @@ -1472,10 +1509,10 @@ DEFINE_ISXLOCALEAVAILABLE(PR, uloc) Var IntlEngineInterfaceExtensionObject::EntryIntl_CacheNumberFormat(RecyclableObject * function, CallInfo callInfo, ...) { EngineInterfaceObject_CommonFunctionProlog(function, callInfo); - INTL_CHECK_ARGS(args.Info.Count == 2 && DynamicObject::Is(args.Values[1])); + INTL_CHECK_ARGS(args.Info.Count == 2 && DynamicObject::IsBaseDynamicObject(args.Values[1])); #if defined(INTL_ICU) - DynamicObject *state = DynamicObject::UnsafeFromVar(args.Values[1]); + DynamicObject *state = UnsafeVarTo(args.Values[1]); // always AssertOrFailFast that the properties we need are there, because if they aren't, Intl.js isn't functioning correctly NumberFormatStyle style = AssertEnumProperty(state, PropertyIds::formatterToUse); @@ -1546,14 +1583,14 @@ DEFINE_ISXLOCALEAVAILABLE(PR, uloc) #else HRESULT hr = S_OK; JavascriptString *localeJSstr = nullptr; - DynamicObject *options = DynamicObject::FromVar(args.Values[1]); + DynamicObject *options = VarTo(args.Values[1]); DelayLoadWindowsGlobalization* wgl = scriptContext->GetThreadContext()->GetWindowsGlobalizationLibrary(); WindowsGlobalizationAdapter* wga = GetWindowsGlobalizationAdapter(scriptContext); Var propertyValue; // Verify locale is present // REVIEW (doilij): Fix comparison of the unsigned value <= 0 - if (!GetTypedPropertyBuiltInFrom(options, __locale, JavascriptString) || (localeJSstr = JavascriptString::FromVar(propertyValue))->GetLength() <= 0) + if (!GetTypedPropertyBuiltInFrom(options, __locale, JavascriptString) || (localeJSstr = VarTo(propertyValue))->GetLength() <= 0) { // REVIEW (doilij): Should we throw? Or otherwise, from Intl.js, should detect something didn't work right here... return scriptContext->GetLibrary()->GetUndefined(); @@ -1579,7 +1616,7 @@ DEFINE_ISXLOCALEAVAILABLE(PR, uloc) return scriptContext->GetLibrary()->GetUndefined(); } //API call retrieves a currency formatter, have to query its interface for numberFormatter - IfFailThrowHr(GetWindowsGlobalizationAdapter(scriptContext)->CreateCurrencyFormatter(scriptContext, &locale, 1, JavascriptString::FromVar(propertyValue)->GetSz(), ¤cyFormatter)); + IfFailThrowHr(GetWindowsGlobalizationAdapter(scriptContext)->CreateCurrencyFormatter(scriptContext, &locale, 1, VarTo(propertyValue)->GetSz(), ¤cyFormatter)); if (GetTypedPropertyBuiltInFrom(options, __currencyDisplayToUse, TaggedInt)) // 0 is for symbol, 1 is for code, 2 is for name. //Currently name isn't supported; so it will default to code in that case. @@ -1617,7 +1654,7 @@ DEFINE_ISXLOCALEAVAILABLE(PR, uloc) if (GetTypedPropertyBuiltInFrom(options, __useGrouping, JavascriptBoolean)) { - IfFailThrowHr(numberFormatterOptions->put_IsGrouped((boolean)(JavascriptBoolean::FromVar(propertyValue)->GetValue()))); + IfFailThrowHr(numberFormatterOptions->put_IsGrouped((boolean)(VarTo(propertyValue)->GetValue()))); } //Get the numeral system and add it to the object since it will be located in the locale @@ -1681,13 +1718,13 @@ DEFINE_ISXLOCALEAVAILABLE(PR, uloc) { EngineInterfaceObject_CommonFunctionProlog(function, callInfo); - if (args.Info.Count < 3 || !DynamicObject::Is(args.Values[1]) || !JavascriptBoolean::Is(args.Values[2])) + if (args.Info.Count < 3 || !DynamicObject::IsBaseDynamicObject(args.Values[1]) || !VarIs(args.Values[2])) { return scriptContext->GetLibrary()->GetUndefined(); } #ifdef INTL_WINGLOB - DynamicObject* obj = DynamicObject::FromVar(args.Values[1]); + DynamicObject* obj = VarTo(args.Values[1]); DelayLoadWindowsGlobalization* wgl = scriptContext->GetThreadContext()->GetWindowsGlobalizationLibrary(); WindowsGlobalizationAdapter* wga = GetWindowsGlobalizationAdapter(scriptContext); @@ -1696,8 +1733,8 @@ DEFINE_ISXLOCALEAVAILABLE(PR, uloc) Var propertyValue = nullptr; uint32 length; - PCWSTR locale = GetTypedPropertyBuiltInFrom(obj, __locale, JavascriptString) ? JavascriptString::FromVar(propertyValue)->GetSz() : nullptr; - PCWSTR templateString = GetTypedPropertyBuiltInFrom(obj, __templateString, JavascriptString) ? JavascriptString::FromVar(propertyValue)->GetSz() : nullptr; + PCWSTR locale = GetTypedPropertyBuiltInFrom(obj, __locale, JavascriptString) ? VarTo(propertyValue)->GetSz() : nullptr; + PCWSTR templateString = GetTypedPropertyBuiltInFrom(obj, __templateString, JavascriptString) ? VarTo(propertyValue)->GetSz() : nullptr; if (locale == nullptr || templateString == nullptr) { @@ -1705,7 +1742,7 @@ DEFINE_ISXLOCALEAVAILABLE(PR, uloc) return scriptContext->GetLibrary()->GetUndefined(); } - PCWSTR clock = GetTypedPropertyBuiltInFrom(obj, __windowsClock, JavascriptString) ? JavascriptString::FromVar(propertyValue)->GetSz() : nullptr; + PCWSTR clock = GetTypedPropertyBuiltInFrom(obj, __windowsClock, JavascriptString) ? VarTo(propertyValue)->GetSz() : nullptr; AutoHSTRING hDummyCalendar; if (clock != nullptr) @@ -1757,7 +1794,7 @@ DEFINE_ISXLOCALEAVAILABLE(PR, uloc) SetPropertyBuiltInOn(obj, __patternStrings, patternStrings); //This parameter tells us whether we are caching it this time around; or just validating pattern strings - if ((boolean)(JavascriptBoolean::FromVar(args.Values[2])->GetValue())) + if ((boolean)(VarTo(args.Values[2])->GetValue())) { //If timeZone is undefined; then use the standard dateTimeFormatter to format in local time; otherwise use the IDateTimeFormatter2 to format using specified timezone (UTC) if (!GetPropertyBuiltInFrom(obj, __timeZone) || JavascriptOperators::IsUndefinedObject(propertyValue)) @@ -1795,16 +1832,16 @@ DEFINE_ISXLOCALEAVAILABLE(PR, uloc) EngineInterfaceObject_CommonFunctionProlog(function, callInfo); INTL_CHECK_ARGS( args.Info.Count == 5 && - JavascriptString::Is(args[1]) && - JavascriptString::Is(args[2]) && - DynamicObject::Is(args[3]) && - JavascriptBoolean::Is(args[4]) + VarIs(args[1]) && + VarIs(args[2]) && + DynamicObject::IsBaseDynamicObject(args[3]) && + VarIs(args[4]) ); - JavascriptString *left = JavascriptString::UnsafeFromVar(args[1]); - JavascriptString *right = JavascriptString::UnsafeFromVar(args[2]); - DynamicObject *state = DynamicObject::UnsafeFromVar(args[3]); - bool forStringPrototypeLocaleCompare = JavascriptBoolean::UnsafeFromVar(args[4])->GetValue(); + JavascriptString *left = UnsafeVarTo(args[1]); + JavascriptString *right = UnsafeVarTo(args[2]); + DynamicObject *state = UnsafeVarTo(args[3]); + bool forStringPrototypeLocaleCompare = UnsafeVarTo(args[4])->GetValue(); if (forStringPrototypeLocaleCompare) { CHAKRATEL_LANGSTATS_INC_BUILTINCOUNT(String_Prototype_localeCompare); @@ -1834,10 +1871,18 @@ DEFINE_ISXLOCALEAVAILABLE(PR, uloc) bool ignorePunctuation = AssertBooleanProperty(state, PropertyIds::ignorePunctuation); bool numeric = AssertBooleanProperty(state, PropertyIds::numeric); CollatorCaseFirst caseFirst = AssertEnumProperty(state, PropertyIds::caseFirstEnum); + JavascriptString *usage = AssertStringProperty(state, PropertyIds::usage); char localeID[ULOC_FULLNAME_CAPACITY] = { 0 }; LangtagToLocaleID(langtag, localeID); + const char16 searchString[] = _u("search"); + if (usage->BufferEquals(searchString, _countof(searchString) - 1)) // minus the null terminator + { + uloc_setKeywordValue("collation", "search", localeID, _countof(localeID), &status); + ICU_ASSERT(status, true); + } + coll = FinalizableUCollator::New(scriptContext->GetRecycler(), ucol_open(localeID, &status)); ICU_ASSERT(status, true); @@ -1989,7 +2034,7 @@ DEFINE_ISXLOCALEAVAILABLE(PR, uloc) return nullptr; #else EngineInterfaceObject_CommonFunctionProlog(function, callInfo); - INTL_CHECK_ARGS(args.Info.Count >= 3 && JavascriptString::Is(args[1]) && JavascriptString::Is(args[2])); + INTL_CHECK_ARGS(args.Info.Count >= 3 && VarIs(args[1]) && VarIs(args[2])); const char16 *locale = nullptr; // args[3] char16 defaultLocale[LOCALE_NAME_MAX_LENGTH] = { 0 }; @@ -1998,8 +2043,8 @@ DEFINE_ISXLOCALEAVAILABLE(PR, uloc) bool ignorePunctuation = false; // args[5] bool numeric = false; // args[6] - JavascriptString *str1 = JavascriptString::FromVar(args.Values[1]); - JavascriptString *str2 = JavascriptString::FromVar(args.Values[2]); + JavascriptString *str1 = VarTo(args.Values[1]); + JavascriptString *str2 = VarTo(args.Values[2]); CollatorCaseFirst caseFirst = CollatorCaseFirst::Default; // args[7] // we only need to parse arguments 3 through 7 if locale and options are provided @@ -2011,9 +2056,9 @@ DEFINE_ISXLOCALEAVAILABLE(PR, uloc) JavascriptError::MapAndThrowError(scriptContext, E_INVALIDARG); } - if (!JavascriptOperators::IsUndefinedObject(args.Values[3]) && JavascriptString::Is(args.Values[3])) + if (!JavascriptOperators::IsUndefinedObject(args.Values[3]) && VarIs(args.Values[3])) { - locale = JavascriptString::FromVar(args.Values[3])->GetSz(); + locale = VarTo(args.Values[3])->GetSz(); } else { @@ -2025,14 +2070,14 @@ DEFINE_ISXLOCALEAVAILABLE(PR, uloc) sensitivity = static_cast(TaggedInt::ToUInt16(args.Values[4])); } - if (!JavascriptOperators::IsUndefinedObject(args.Values[5]) && JavascriptBoolean::Is(args.Values[5])) + if (!JavascriptOperators::IsUndefinedObject(args.Values[5]) && VarIs(args.Values[5])) { - ignorePunctuation = (JavascriptBoolean::FromVar(args.Values[5])->GetValue() != 0); + ignorePunctuation = (VarTo(args.Values[5])->GetValue() != 0); } - if (!JavascriptOperators::IsUndefinedObject(args.Values[6]) && JavascriptBoolean::Is(args.Values[6])) + if (!JavascriptOperators::IsUndefinedObject(args.Values[6]) && VarIs(args.Values[6])) { - numeric = (JavascriptBoolean::FromVar(args.Values[6])->GetValue() != 0); + numeric = (VarTo(args.Values[6])->GetValue() != 0); } if (!JavascriptOperators::IsUndefinedObject(args.Values[7]) && TaggedInt::Is(args.Values[7])) @@ -2107,10 +2152,10 @@ DEFINE_ISXLOCALEAVAILABLE(PR, uloc) INTL_CHECK_ARGS( args.Info.Count == 2 && - JavascriptString::Is(args.Values[1]) + VarIs(args.Values[1]) ); - const char16 *currencyCode = JavascriptString::UnsafeFromVar(args.Values[1])->GetSz(); + const char16 *currencyCode = UnsafeVarTo(args.Values[1])->GetSz(); #if defined(INTL_ICU) UErrorCode status = U_ZERO_ERROR; @@ -2350,15 +2395,15 @@ DEFINE_ISXLOCALEAVAILABLE(PR, uloc) INTL_CHECK_ARGS( args.Info.Count == 5 && (TaggedInt::Is(args[1]) || JavascriptNumber::Is(args[1])) && - DynamicObject::Is(args[2]) && - JavascriptBoolean::Is(args[3]) && - JavascriptBoolean::Is(args[4]) + DynamicObject::IsBaseDynamicObject(args[2]) && + VarIs(args[3]) && + VarIs(args[4]) ); double num = JavascriptConversion::ToNumber(args[1], scriptContext); - DynamicObject *state = DynamicObject::UnsafeFromVar(args[2]); - bool toParts = JavascriptBoolean::UnsafeFromVar(args[3])->GetValue(); - bool forNumberPrototypeToLocaleString = JavascriptBoolean::UnsafeFromVar(args[4])->GetValue(); + DynamicObject *state = UnsafeVarTo(args[2]); + bool toParts = UnsafeVarTo(args[3])->GetValue(); + bool forNumberPrototypeToLocaleString = UnsafeVarTo(args[4])->GetValue(); Var cachedUNumberFormat = nullptr; // cached by EntryIntl_CacheNumberFormat AssertOrFailFast(state->GetInternalProperty(state, InternalPropertyIds::CachedUNumberFormat, &cachedUNumberFormat, NULL, scriptContext)); @@ -2430,10 +2475,10 @@ DEFINE_ISXLOCALEAVAILABLE(PR, uloc) INTL_CHECK_ARGS( args.Info.Count == 3 && (TaggedInt::Is(args.Values[1]) || JavascriptNumber::Is(args.Values[1])) && - DynamicObject::Is(args.Values[2]) + DynamicObject::IsBaseDynamicObject(args.Values[2]) ); - DynamicObject *options = DynamicObject::FromVar(args.Values[2]); + DynamicObject *options = VarTo(args.Values[2]); Var hiddenObject = nullptr; AssertOrFailFastMsg(options->GetInternalProperty(options, Js::InternalPropertyIds::HiddenObject, &hiddenObject, NULL, scriptContext), "EntryIntl_FormatNumber: Could not retrieve hiddenObject."); @@ -2468,39 +2513,6 @@ DEFINE_ISXLOCALEAVAILABLE(PR, uloc) } #ifdef INTL_ICU - // Implementation of ECMA 262 #sec-timeclip - // REVIEW(jahorto): Where is a better place for this function? JavascriptDate? DateUtilities? JavascriptConversion? - static double TimeClip(Var x) - { - double time = 0.0; - if (TaggedInt::Is(x)) - { - time = TaggedInt::ToDouble(x); - } - else - { - AssertOrFailFast(JavascriptNumber::Is(x)); - time = JavascriptNumber::GetValue(x); - - // Only perform steps 1, 3, and 4 if the input was not a TaggedInt, since TaggedInts cant be infinite or -0 - if (!NumberUtilities::IsFinite(time)) - { - return NumberConstants::NaN; - } - - // This performs both steps 3 and 4 - time = JavascriptConversion::ToInteger(time); - } - - // Step 2: If abs(time) > 8.64e15, return NaN. - if (Math::Abs(time) > 8.64e15) - { - return NumberConstants::NaN; - } - - return time; - } - static void AddPartToPartsArray(ScriptContext *scriptContext, JavascriptArray *arr, int arrIndex, const char16 *src, int start, int end, JavascriptString *partType) { JavascriptString *partValue = JavascriptString::NewCopyBuffer( @@ -2525,7 +2537,7 @@ DEFINE_ISXLOCALEAVAILABLE(PR, uloc) EngineInterfaceObject_CommonFunctionProlog(function, callInfo); #ifdef INTL_WINGLOB - if (args.Info.Count < 3 || !(TaggedInt::Is(args.Values[1]) || JavascriptNumber::Is(args.Values[1])) || !DynamicObject::Is(args.Values[2])) + if (args.Info.Count < 3 || !(TaggedInt::Is(args.Values[1]) || JavascriptNumber::Is(args.Values[1])) || !DynamicObject::IsBaseDynamicObject(args.Values[2])) { return scriptContext->GetLibrary()->GetUndefined(); } @@ -2547,7 +2559,7 @@ DEFINE_ISXLOCALEAVAILABLE(PR, uloc) Js::JavascriptError::ThrowRangeError(scriptContext, JSERR_OutOfDateTimeRange); } - DynamicObject* obj = DynamicObject::FromVar(args.Values[2]); + DynamicObject* obj = VarTo(args.Values[2]); Var hiddenObject = nullptr; AssertOrFailFastMsg(obj->GetInternalProperty(obj, Js::InternalPropertyIds::HiddenObject, &hiddenObject, NULL, scriptContext), "EntryIntl_FormatDateTime: Could not retrieve hiddenObject."); @@ -2571,7 +2583,7 @@ DEFINE_ISXLOCALEAVAILABLE(PR, uloc) HSTRING_HEADER timeZoneHeader; // IsValidTimeZone() has already verified that this is JavascriptString. - JavascriptString* userDefinedTimeZoneId = JavascriptString::FromVar(propertyValue); + JavascriptString* userDefinedTimeZoneId = VarTo(propertyValue); IfFailThrowHr(WindowsCreateStringReference(userDefinedTimeZoneId->GetSz(), userDefinedTimeZoneId->GetLength(), &timeZoneHeader, &timeZone)); Assert(timeZone); @@ -2584,24 +2596,24 @@ DEFINE_ISXLOCALEAVAILABLE(PR, uloc) // This function vaguely implements ECMA 402 #sec-partitiondatetimepattern INTL_CHECK_ARGS( args.Info.Count == 5 && - DynamicObject::Is(args[1]) && + DynamicObject::IsBaseDynamicObject(args[1]) && (TaggedInt::Is(args[2]) || JavascriptNumber::Is(args[2])) && - JavascriptBoolean::Is(args[3]) && - JavascriptBoolean::Is(args[4]) + VarIs(args[3]) && + VarIs(args[4]) ); - DynamicObject *state = DynamicObject::UnsafeFromVar(args[1]); - bool toParts = Js::JavascriptBoolean::UnsafeFromVar(args[3])->GetValue(); + DynamicObject *state = UnsafeVarTo(args[1]); + bool toParts = Js::UnsafeVarTo(args[3])->GetValue(); // 1. Let x be TimeClip(x) // 2. If x is NaN, throw a RangeError exception - double date = TimeClip(args[2]); + double date = JavascriptDate::TimeClip(args[2]); if (JavascriptNumber::IsNan(date)) { JavascriptError::ThrowRangeError(scriptContext, JSERR_InvalidDate); } - bool forDatePrototypeToLocaleString = JavascriptBoolean::UnsafeFromVar(args[4])->GetValue(); + bool forDatePrototypeToLocaleString = UnsafeVarTo(args[4])->GetValue(); if (forDatePrototypeToLocaleString) { CHAKRATEL_LANGSTATS_INC_BUILTINCOUNT(Date_Prototype_toLocaleString); @@ -2653,14 +2665,15 @@ DEFINE_ISXLOCALEAVAILABLE(PR, uloc) // To accomplish this, we can set the switchover date between julian/gregorian // to the ECMAScript beginning of time, which is -8.64e15 according to ecma262 #sec-time-values-and-time-range UCalendar *cal = const_cast(udat_getCalendar(*dtf)); - ucal_setGregorianChange(cal, -8.64e15, &status); - - // status can be U_UNSUPPORTED_ERROR if the calendar isn't gregorian, which - // there does not seem to be a way to check for ahead of time in the C API - AssertOrFailFastMsg(U_SUCCESS(status) || status == U_UNSUPPORTED_ERROR, ICU_ERRORMESSAGE(status)); - - // If we passed the previous check, we should reset the status to U_ZERO_ERROR (in case it was U_UNSUPPORTED_ERROR) - status = U_ZERO_ERROR; + const char *calType = ucal_getType(cal, &status); + ICU_ASSERT(status, calType != nullptr); + if (strcmp(calType, "gregorian") == 0) + { + double beginningOfTime = -8.64e15; + ucal_setGregorianChange(cal, beginningOfTime, &status); + double actualGregorianChange = ucal_getGregorianChange(cal, &status); + ICU_ASSERT(status, beginningOfTime == actualGregorianChange); + } INTL_TRACE("Caching new UDateFormat (0x%x) with langtag=%s, pattern=%s, timezone=%s", dtf, langtag->GetSz(), pattern->GetSz(), timeZone->GetSz()); @@ -2788,10 +2801,10 @@ DEFINE_ISXLOCALEAVAILABLE(PR, uloc) { #ifdef INTL_ICU EngineInterfaceObject_CommonFunctionProlog(function, callInfo); - INTL_CHECK_ARGS(args.Info.Count == 3 && JavascriptString::Is(args.Values[1]) && JavascriptString::Is(args.Values[2])); + INTL_CHECK_ARGS(args.Info.Count == 3 && VarIs(args.Values[1]) && VarIs(args.Values[2])); - JavascriptString *langtag = JavascriptString::UnsafeFromVar(args.Values[1]); - JavascriptString *skeleton = JavascriptString::UnsafeFromVar(args.Values[2]); + JavascriptString *langtag = UnsafeVarTo(args.Values[1]); + JavascriptString *skeleton = UnsafeVarTo(args.Values[2]); UErrorCode status = U_ZERO_ERROR; char localeID[ULOC_FULLNAME_CAPACITY] = { 0 }; LangtagToLocaleID(langtag, localeID); @@ -2851,9 +2864,9 @@ DEFINE_ISXLOCALEAVAILABLE(PR, uloc) Var IntlEngineInterfaceExtensionObject::EntryIntl_ValidateAndCanonicalizeTimeZone(RecyclableObject* function, CallInfo callInfo, ...) { EngineInterfaceObject_CommonFunctionProlog(function, callInfo); - INTL_CHECK_ARGS(args.Info.Count == 2 && JavascriptString::Is(args.Values[1])); + INTL_CHECK_ARGS(args.Info.Count == 2 && VarIs(args.Values[1])); - JavascriptString *tz = JavascriptString::FromVar(args.Values[1]); + JavascriptString *tz = VarTo(args.Values[1]); #ifdef INTL_WINGLOB AutoHSTRING canonicalizedTimeZone; @@ -2945,7 +2958,7 @@ DEFINE_ISXLOCALEAVAILABLE(PR, uloc) } #ifdef INTL_ICU - static FinalizableUPluralRules *GetOrCreatePluralRulesCache(DynamicObject *stateObject, ScriptContext *scriptContext) + static FinalizableUPluralRules *GetOrCreateCachedUPluralRules(DynamicObject *stateObject, ScriptContext *scriptContext) { Var cachedUPluralRules = nullptr; FinalizableUPluralRules *pr = nullptr; @@ -2977,7 +2990,7 @@ DEFINE_ISXLOCALEAVAILABLE(PR, uloc) pr = FinalizableUPluralRules::New(scriptContext->GetRecycler(), uplrules_openForType(localeID, prType, &status)); ICU_ASSERT(status, true); - INTL_TRACE("Caching UPluralRules object (0x%x) with langtag %s and type %s", langtag->GetSz(), type->GetSz()); + INTL_TRACE("Caching UPluralRules object (0x%x) with langtag %s and type %s", pr, langtag->GetSz(), type->GetSz()); stateObject->SetInternalProperty(InternalPropertyIds::CachedUPluralRules, pr, PropertyOperationFlags::PropertyOperation_None, nullptr); } @@ -2991,7 +3004,7 @@ DEFINE_ISXLOCALEAVAILABLE(PR, uloc) { #ifdef INTL_ICU EngineInterfaceObject_CommonFunctionProlog(function, callInfo); - INTL_CHECK_ARGS(args.Info.Count == 2 && DynamicObject::Is(args[1])); + INTL_CHECK_ARGS(args.Info.Count == 2 && DynamicObject::IsBaseDynamicObject(args[1])); JavascriptArray *ret = scriptContext->GetLibrary()->CreateArray(0); @@ -3000,8 +3013,8 @@ DEFINE_ISXLOCALEAVAILABLE(PR, uloc) // uplrules_getKeywords is guaranteed to return at minimum. // This array is only used in resolved options, so the majority of the functionality can remain (namely, select() still works) #if defined(ICU_VERSION) && ICU_VERSION >= 61 - DynamicObject *state = DynamicObject::UnsafeFromVar(args[1]); - FinalizableUPluralRules *pr = GetOrCreatePluralRulesCache(state, scriptContext); + DynamicObject *state = UnsafeVarTo(args[1]); + FinalizableUPluralRules *pr = GetOrCreateCachedUPluralRules(state, scriptContext); UErrorCode status = U_ZERO_ERROR; ScopedUEnumeration keywords(uplrules_getKeywords(*pr, &status)); @@ -3027,9 +3040,9 @@ DEFINE_ISXLOCALEAVAILABLE(PR, uloc) { #ifdef INTL_ICU EngineInterfaceObject_CommonFunctionProlog(function, callInfo); - INTL_CHECK_ARGS(args.Info.Count == 3 && DynamicObject::Is(args[1])); + INTL_CHECK_ARGS(args.Info.Count == 3 && DynamicObject::IsBaseDynamicObject(args[1])); - DynamicObject *state = DynamicObject::UnsafeFromVar(args[1]); + DynamicObject *state = UnsafeVarTo(args[1]); double n = 0.0; if (TaggedInt::Is(args[2])) { @@ -3044,31 +3057,48 @@ DEFINE_ISXLOCALEAVAILABLE(PR, uloc) CHAKRATEL_LANGSTATS_INC_BUILTINCOUNT(PluralRules_Prototype_select); INTL_TRACE("Calling PluralRules.prototype.select(%f)", n); - FinalizableUPluralRules *pr = GetOrCreatePluralRulesCache(state, scriptContext); + UErrorCode status = U_ZERO_ERROR; + + FinalizableUPluralRules *pr = GetOrCreateCachedUPluralRules(state, scriptContext); // ICU has an internal API, uplrules_selectWithFormat, that is equivalent to uplrules_select but will respect digit options of the passed UNumberFormat. // Since its an internal API, we can't use it -- however, we can work around it by creating a UNumberFormat with provided digit options, // formatting the requested number to a string, and then converting the string back to a double which we can pass to uplrules_select. // This workaround was suggested during the May 2018 ECMA-402 discussion. - // TODO(jahorto): investigate caching this UNumberFormat on the state as well. This is currently not possible because we are using InternalProperyIds::HiddenObject - // for all ICU object caching, but once we move to better names for the cache property IDs, we can cache both the UNumberFormat as well as the UPluralRules. - char localeID[ULOC_FULLNAME_CAPACITY] = { 0 }; - LangtagToLocaleID(AssertStringProperty(state, PropertyIds::locale), localeID); - UErrorCode status = U_ZERO_ERROR; - FinalizableUNumberFormat *fmt = FinalizableUNumberFormat::New(scriptContext->GetRecycler(), unum_open(UNUM_DECIMAL, nullptr, 0, localeID, nullptr, &status)); + // The below is similar to GetOrCreateCachedUPluralRules, but since creating a UNumberFormat for Intl.NumberFormat is much more involved and no one else + // uses this functionality, it makes more sense to me to just put the logic inline. + Var cachedUNumberFormat = nullptr; + FinalizableUNumberFormat *nf = nullptr; + if (state->GetInternalProperty(state, InternalPropertyIds::CachedUNumberFormat, &cachedUNumberFormat, nullptr, scriptContext)) + { + nf = reinterpret_cast(cachedUNumberFormat); + INTL_TRACE("Using previously cached UNumberFormat (0x%x)", nf); + } + else + { + char localeID[ULOC_FULLNAME_CAPACITY] = { 0 }; + LangtagToLocaleID(AssertStringProperty(state, PropertyIds::locale), localeID); + nf = FinalizableUNumberFormat::New(scriptContext->GetRecycler(), unum_open(UNUM_DECIMAL, nullptr, 0, localeID, nullptr, &status)); - SetUNumberFormatDigitOptions(*fmt, state); + SetUNumberFormatDigitOptions(*nf, state); + + INTL_TRACE("Caching UNumberFormat object (0x%x) with localeID %S", nf, localeID); + + state->SetInternalProperty(InternalPropertyIds::CachedUNumberFormat, nf, PropertyOperationFlags::PropertyOperation_None, nullptr); + } char16 *formattedN = nullptr; int formattedNLength = 0; EnsureBuffer([&](UChar *buf, int bufLen, UErrorCode *status) { - return unum_formatDouble(*fmt, n, buf, bufLen, nullptr, status); + return unum_formatDouble(*nf, n, buf, bufLen, nullptr, status); }, scriptContext->GetRecycler(), &formattedN, &formattedNLength); - double nWithOptions = unum_parseDouble(*fmt, reinterpret_cast(formattedN), formattedNLength, nullptr, &status); - double roundtripDiff = n - nWithOptions; - ICU_ASSERT(status, roundtripDiff <= 1.0 && roundtripDiff >= -1.0); + double nWithOptions = unum_parseDouble(*nf, reinterpret_cast(formattedN), formattedNLength, nullptr, &status); + + ICU_ASSERT(status, (n > 0.0 && nWithOptions <= n && nWithOptions >= 0.0) || + (n < 0.0 && nWithOptions >= n && nWithOptions <= 0) || + (n == 0.0 && nWithOptions == 0)); char16 *selected = nullptr; int selectedLength = 0; @@ -3096,45 +3126,34 @@ DEFINE_ISXLOCALEAVAILABLE(PR, uloc) */ Var IntlEngineInterfaceExtensionObject::EntryIntl_RegisterBuiltInFunction(RecyclableObject* function, CallInfo callInfo, ...) { - // Don't put this in a header or add it to the namespace even in this file. Keep it to the minimum scope needed. - enum class IntlBuiltInFunctionID : int32 { - Min = 0, - DateToLocaleString = Min, - DateToLocaleDateString, - DateToLocaleTimeString, - NumberToLocaleString, - StringLocaleCompare, - Max - }; - EngineInterfaceObject_CommonFunctionProlog(function, callInfo); // This function will only be used during the construction of the Intl object, hence Asserts are in place. - Assert(args.Info.Count >= 3 && JavascriptFunction::Is(args.Values[1]) && TaggedInt::Is(args.Values[2])); + Assert(args.Info.Count >= 3 && VarIs(args.Values[1]) && TaggedInt::Is(args.Values[2])); - JavascriptFunction *func = JavascriptFunction::FromVar(args.Values[1]); + JavascriptFunction *func = VarTo(args.Values[1]); int32 id = TaggedInt::ToInt32(args.Values[2]); - Assert(id >= (int32)IntlBuiltInFunctionID::Min && id < (int32)IntlBuiltInFunctionID::Max); + Assert(id >= 0 && id < (int32)BuiltInFunctionID::Max); EngineInterfaceObject* nativeEngineInterfaceObj = scriptContext->GetLibrary()->GetEngineInterfaceObject(); IntlEngineInterfaceExtensionObject* extensionObject = static_cast(nativeEngineInterfaceObj->GetEngineExtension(EngineInterfaceExtensionKind_Intl)); - IntlBuiltInFunctionID functionID = static_cast(id); + BuiltInFunctionID functionID = static_cast(id); switch (functionID) { - case IntlBuiltInFunctionID::DateToLocaleString: + case BuiltInFunctionID::DateToLocaleString: extensionObject->dateToLocaleString = func; break; - case IntlBuiltInFunctionID::DateToLocaleDateString: + case BuiltInFunctionID::DateToLocaleDateString: extensionObject->dateToLocaleDateString = func; break; - case IntlBuiltInFunctionID::DateToLocaleTimeString: + case BuiltInFunctionID::DateToLocaleTimeString: extensionObject->dateToLocaleTimeString = func; break; - case IntlBuiltInFunctionID::NumberToLocaleString: + case BuiltInFunctionID::NumberToLocaleString: extensionObject->numberToLocaleString = func; break; - case IntlBuiltInFunctionID::StringLocaleCompare: + case BuiltInFunctionID::StringLocaleCompare: extensionObject->stringLocaleCompare = func; break; default: @@ -3150,12 +3169,12 @@ DEFINE_ISXLOCALEAVAILABLE(PR, uloc) { EngineInterfaceObject_CommonFunctionProlog(function, callInfo); - if (callInfo.Count < 2 || !DynamicObject::Is(args.Values[1])) + if (callInfo.Count < 2 || !DynamicObject::IsBaseDynamicObject(args.Values[1])) { return scriptContext->GetLibrary()->GetUndefined(); } - DynamicObject* obj = DynamicObject::FromVar(args.Values[1]); + DynamicObject* obj = VarTo(args.Values[1]); Var hiddenObject = nullptr; if (!obj->GetInternalProperty(obj, Js::InternalPropertyIds::HiddenObject, &hiddenObject, NULL, scriptContext)) { @@ -3168,13 +3187,13 @@ DEFINE_ISXLOCALEAVAILABLE(PR, uloc) { EngineInterfaceObject_CommonFunctionProlog(function, callInfo); - if (callInfo.Count < 3 || !DynamicObject::Is(args.Values[1]) || !DynamicObject::Is(args.Values[2])) + if (callInfo.Count < 3 || !DynamicObject::IsBaseDynamicObject(args.Values[1]) || !DynamicObject::IsBaseDynamicObject(args.Values[2])) { return scriptContext->GetLibrary()->GetUndefined(); } - DynamicObject* obj = DynamicObject::FromVar(args.Values[1]); - DynamicObject* value = DynamicObject::FromVar(args.Values[2]); + DynamicObject* obj = VarTo(args.Values[1]); + DynamicObject* value = VarTo(args.Values[2]); if (obj->SetInternalProperty(Js::InternalPropertyIds::HiddenObject, value, Js::PropertyOperationFlags::PropertyOperation_None, NULL)) { diff --git a/lib/Runtime/Library/JSON.cpp b/lib/Runtime/Library/JSON.cpp index 31da047eac4..c1ce141ceeb 100644 --- a/lib/Runtime/Library/JSON.cpp +++ b/lib/Runtime/Library/JSON.cpp @@ -46,7 +46,7 @@ namespace JSON Js::RecyclableObject* reviver = nullptr; if (args.Info.Count > 2 && Js::JavascriptConversion::IsCallable(args[2])) { - reviver = Js::RecyclableObject::UnsafeFromVar(args[2]); + reviver = Js::UnsafeVarTo(args[2]); } return Parse(input, reviver, scriptContext); @@ -60,7 +60,7 @@ namespace JSON TryFinally([&]() { - LazyJSONString* lazyString = LazyJSONString::TryFromVar(input); + LazyJSONString* lazyString = JavascriptOperators::TryFromVar(input); if (lazyString) { // Try to reconstruct object based on the data collected during stringify @@ -122,15 +122,16 @@ namespace JSON if (Js::JavascriptOperators::GetTypeId(value) == Js::TypeIds_HostDispatch) { // If we a remote object, we need to pull out the underlying JS object to stringify that - Js::DynamicObject* remoteObject = Js::RecyclableObject::FromVar(value)->GetRemoteObject(); + Js::DynamicObject* remoteObject = Js::VarTo(value)->GetRemoteObject(); if (remoteObject != nullptr) { - value = Js::DynamicObject::FromVar(remoteObject); + AssertOrFailFast(Js::VarIsCorrectType(remoteObject)); + value = remoteObject; } else { Js::Var result; - if (Js::RecyclableObject::FromVar(value)->InvokeBuiltInOperationRemotely(Stringify, args, &result)) + if (Js::VarTo(value)->InvokeBuiltInOperationRemotely(Stringify, args, &result)) { return result; } diff --git a/lib/Runtime/Library/JSONParser.cpp b/lib/Runtime/Library/JSONParser.cpp index 6e52444a2b7..991fb21b54a 100644 --- a/lib/Runtime/Library/JSONParser.cpp +++ b/lib/Runtime/Library/JSONParser.cpp @@ -68,14 +68,14 @@ namespace JSON "The holder argument in a JSON::Walk function must be an object or an array"); if (id == Constants::NoProperty) { - if (!Js::RecyclableObject::FromVar(holder)->GetItem(holder, index, &value, scriptContext)) + if (!Js::VarTo(holder)->GetItem(holder, index, &value, scriptContext)) { value = undefined; } } else { - if (!Js::RecyclableObject::FromVar(holder)->GetProperty(holder, id, &value, NULL, scriptContext)) + if (!Js::VarTo(holder)->GetProperty(holder, id, &value, NULL, scriptContext)) { value = undefined; } @@ -86,7 +86,7 @@ namespace JSON if (Js::DynamicObject::IsAnyArray(value)) { Js::JavascriptArray* arrayVal = JavascriptArray::EnsureNonNativeArray(Js::JavascriptArray::FromAnyArray(value)); - Assert(!Js::JavascriptNativeIntArray::Is(arrayVal) && !Js::JavascriptNativeFloatArray::Is(arrayVal)); + Assert(!Js::VarIs(arrayVal) && !Js::VarIs(arrayVal)); uint length = arrayVal->GetLength(); if (!arrayVal->IsCrossSiteObject()) { @@ -128,7 +128,7 @@ namespace JSON // normally we should have a JSON object here and the enumerator should be always be successful. However, the objects can be // modified by user code. It is better to skip a damaged object. ES5 spec doesn't specify an error here. - if(Js::RecyclableObject::FromVar(value)->GetEnumerator(&enumerator, EnumeratorFlags::SnapShotSemantics, scriptContext)) + if(Js::VarTo(value)->GetEnumerator(&enumerator, EnumeratorFlags::SnapShotSemantics, scriptContext)) { Js::JavascriptString * propertyName; @@ -148,11 +148,11 @@ namespace JSON Js::Var newElement = Walk(propertyName, idMember, value); if (Js::JavascriptOperators::IsUndefinedObject(newElement, undefined)) { - Js::JavascriptOperators::DeleteProperty(Js::RecyclableObject::FromVar(value), idMember); + Js::JavascriptOperators::DeleteProperty(Js::VarTo(value), idMember); } else { - Js::JavascriptOperators::SetProperty(value, Js::RecyclableObject::FromVar(value), idMember, newElement, scriptContext); + Js::JavascriptOperators::SetProperty(value, Js::VarTo(value), idMember, newElement, scriptContext); } } // For the numeric cases the enumerator is set to a NullEnumerator (see class in ForInObjectEnumerator.h) @@ -164,12 +164,12 @@ namespace JSON Js::Var newElement = Walk(propertyName, idMember, value, propertyIndex); if (Js::JavascriptOperators::IsUndefinedObject(newElement, undefined)) { - Js::JavascriptOperators::DeleteItem(Js::RecyclableObject::FromVar(value), propertyIndex); + Js::JavascriptOperators::DeleteItem(Js::VarTo(value), propertyIndex); } else { - Js::JavascriptOperators::SetItem(value, Js::RecyclableObject::FromVar(value), propertyIndex, newElement, scriptContext); + Js::JavascriptOperators::SetItem(value, Js::VarTo(value), propertyIndex, newElement, scriptContext); } } @@ -294,7 +294,7 @@ namespace JSON #if ENABLE_DEBUG_CONFIG_OPTIONS if (Js::Configuration::Global.flags.IsEnabled(Js::autoProxyFlag)) { - object = DynamicObject::FromVar(JavascriptProxy::AutoProxyWrapper(object)); + object = VarTo(JavascriptProxy::AutoProxyWrapper(object)); } #endif diff --git a/lib/Runtime/Library/JSONScanner.h b/lib/Runtime/Library/JSONScanner.h index e8c75d6ee0a..e379519be48 100644 --- a/lib/Runtime/Library/JSONScanner.h +++ b/lib/Runtime/Library/JSONScanner.h @@ -27,7 +27,7 @@ namespace JSON void __declspec(noreturn) ThrowSyntaxError(int wErr) { char16 scanPos[16]; - ::_itow_s(GetScanPosition(), scanPos, _countof(scanPos) / sizeof(char16), 10); + ::_itow_s(GetScanPosition(), scanPos, _countof(scanPos), 10); Js::JavascriptError::ThrowSyntaxError(scriptContext, wErr, scanPos); } diff --git a/lib/Runtime/Library/JSONString.cpp b/lib/Runtime/Library/JSONString.cpp deleted file mode 100644 index 2d33f9fbfab..00000000000 --- a/lib/Runtime/Library/JSONString.cpp +++ /dev/null @@ -1,113 +0,0 @@ -//------------------------------------------------------------------------------------------------------- -// Copyright (C) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. -//------------------------------------------------------------------------------------------------------- -#include "RuntimeLibraryPch.h" - -namespace Js -{ - /* Generated using the following js program: - function createEscapeMap(count) - { - var escapeMap = new Array(128); - - for(var i=0; i < escapeMap.length; i++) - { - escapeMap[i] = count ? 0 : "L\'\\0\'"; - } - for(var i=0; i < ' '.charCodeAt(0); i++) - { - escapeMap[i] = count ? 5 : "L\'u\'"; - } - escapeMap['\n'.charCodeAt(0)] = count ? 1 : "L\'n\'"; - escapeMap['\b'.charCodeAt(0)] = count ? 1 : "L\'b\'"; - escapeMap['\t'.charCodeAt(0)] = count ? 1 : "L\'t\'"; - escapeMap['\f'.charCodeAt(0)] = count ? 1 : "L\'f\'"; - escapeMap['\r'.charCodeAt(0)] = count ? 1 : "L\'r\'"; - escapeMap['\\'.charCodeAt(0)] = count ? 1 : "L\'\\\\\'"; - escapeMap['"'.charCodeAt(0)] = count ? 1 : "L\'\"\'"; - WScript.Echo("{ " + escapeMap.join(", ") + " }"); - } - createEscapeMap(false); - createEscapeMap(true); - */ - const WCHAR JSONString::escapeMap[] = { - _u('u'), _u('u'), _u('u'), _u('u'), _u('u'), _u('u'), _u('u'), _u('u'), _u('b'), _u('t'), _u('n'), _u('u'), _u('f'), - _u('r'), _u('u'), _u('u'), _u('u'), _u('u'), _u('u'), _u('u'), _u('u'), _u('u'), _u('u'), _u('u'), _u('u'), _u('u'), - _u('u'), _u('u'), _u('u'), _u('u'), _u('u'), _u('u'), _u('\0'), _u('\0'), _u('"'), _u('\0'), _u('\0'), _u('\0'), - _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), - _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), - _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), - _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), - _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\\'), - _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), - _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), - _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), - _u('\0'), _u('\0') }; - - const BYTE JSONString::escapeMapCount[] = - { 5, 5, 5, 5, 5, 5, 5, 5, 1, 1, 1, 5, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 1, 0, 0, 0, 0, 0 - , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - , 0, 0, 0, 0, 0, 0, 0, 0 }; - - ArenaAllocator* JSONString::StringProxy::allocator(nullptr); - -#ifndef IsJsDiag - JSONString* JSONString::New(JavascriptString* originalString, charcount_t start, charcount_t extraChars) - { - Assert(extraChars > 0); - charcount_t length = UInt32Math::Add(originalString->GetLength(), UInt32Math::Add(extraChars, /*quotes*/ 2)); - if (!IsValidCharCount(length)) - { - Js::Throw::OutOfMemory(); - } - JSONString* result = RecyclerNew(originalString->GetRecycler(), JSONString, originalString, start, length); - return result; - } - - JSONString::JSONString(Js::JavascriptString* originalString, charcount_t start, charcount_t length) : - JavascriptString(originalString->GetScriptContext()->GetLibrary()->GetStringTypeStatic(), length, nullptr), - m_originalString(originalString), - m_start(start) - { - Assert(m_originalString->GetLength() < length); - } - - const char16* JSONString::GetSz() - { - Assert(!this->IsFinalized()); - charcount_t length = this->GetLength() + /*terminating null*/1; - WCHAR* buffer = RecyclerNewArrayLeaf(this->GetRecycler(), WCHAR, length); - this->SetBuffer(buffer); - buffer[GetLength()] = '\0'; - WritableStringBuffer stringBuffer(buffer, length); - JavascriptString* str = JSONString::Escape(this->m_originalString, m_start, &stringBuffer); - Assert(str == nullptr); - Assert(buffer[GetLength()] == '\0'); - this->m_originalString = nullptr; // Remove the reference to the original string. - VirtualTableInfo::SetVirtualTable(this); // This will ensure GetSz does not get invoked again. - return buffer; - } - - void WritableStringBuffer::Append(const char16 * str, charcount_t countNeeded) - { - JavascriptString::CopyHelper(m_pszCurrentPtr, str, countNeeded); - this->m_pszCurrentPtr += countNeeded; - Assert(this->GetCount() <= m_length); - } - - void WritableStringBuffer::Append(char16 c) - { - *m_pszCurrentPtr = c; - this->m_pszCurrentPtr++; - Assert(this->GetCount() <= m_length); - } - void WritableStringBuffer::AppendLarge(const char16 * str, charcount_t countNeeded) - { - js_memcpy_s(m_pszCurrentPtr, sizeof(WCHAR) * countNeeded, str, sizeof(WCHAR) * countNeeded); - this->m_pszCurrentPtr += countNeeded; - Assert(this->GetCount() <= m_length); - } -#endif -} diff --git a/lib/Runtime/Library/JSONString.h b/lib/Runtime/Library/JSONString.h deleted file mode 100644 index 798bfd32957..00000000000 --- a/lib/Runtime/Library/JSONString.h +++ /dev/null @@ -1,250 +0,0 @@ -//------------------------------------------------------------------------------------------------------- -// Copyright (C) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. -//------------------------------------------------------------------------------------------------------- -#pragma once - -namespace Js -{ - enum EscapingOperation : BYTE - { - EscapingOperation_NotEscape, - EscapingOperation_Escape, - EscapingOperation_Count - }; - - class WritableStringBuffer - { - public: - WritableStringBuffer(_In_count_(length) char16* str, _In_ charcount_t length) : m_pszString(str), m_pszCurrentPtr(str), m_length(length) {} - - void Append(char16 c); - void Append(const char16 * str, charcount_t countNeeded); - void AppendLarge(const char16 * str, charcount_t countNeeded); - private: - char16* m_pszString; - char16* m_pszCurrentPtr; - charcount_t m_length; -#if DBG - charcount_t GetCount() - { - Assert(m_pszCurrentPtr >= m_pszString); - Assert(m_pszCurrentPtr - m_pszString <= MaxCharCount); - return static_cast(m_pszCurrentPtr - m_pszString); - } -#endif - }; - - class JSONString : public JavascriptString - { - public: - static JSONString* New(JavascriptString* originalString, charcount_t start, charcount_t extraChars); - virtual const char16* GetSz() override; - protected: - DEFINE_VTABLE_CTOR(JSONString, JavascriptString); - private: - Field(JavascriptString*) m_originalString; - Field(charcount_t) m_start; /* start of the escaping operation */ - - private: - JSONString(JavascriptString* originalString, charcount_t start, charcount_t length); - static const WCHAR escapeMap[128]; - public: - static const BYTE escapeMapCount[128]; - - template - static Js::JavascriptString* Escape(Js::JavascriptString* value, uint start = 0, WritableStringBuffer* outputString = nullptr) - { - uint len = value->GetLength(); - - if (0 == len) - { - Js::ScriptContext* scriptContext = value->GetScriptContext(); - return scriptContext->GetLibrary()->GetQuotesString(); - } - else - { - const char16* szValue = value->GetSz(); - return EscapeNonEmptyString, Js::JavascriptString*>(value, szValue, start, len, outputString); - } - } - - template - static TJavascriptString EscapeNonEmptyString(Js::JavascriptString* value, const char16* szValue, uint start, charcount_t len, WritableStringBuffer* outputString) - { - charcount_t extra = 0; - TJavascriptString result; - - // Optimize for the case when we don't need to change anything, just wrap with quotes. - // If we realize we need to change the inside of the string, start over in "modification needed" mode. - if (op == EscapingOperation_Escape) - { - outputString->Append(_u('\"')); - if (start != 0) - { - outputString->AppendLarge(szValue, start); - } - } - const wchar* endSz = szValue + len; - const wchar* startSz = szValue + start; - const wchar* lastFlushSz = startSz; - for (const wchar* current = startSz; current < endSz; current++) - { - WCHAR wch = *current; - - if (op == EscapingOperation_Count) - { - if (wch < _countof(escapeMap)) - { - extra = UInt32Math::Add(extra, escapeMapCount[static_cast((char)wch)]); - } - } - else - { - WCHAR specialChar; - if (wch < _countof(escapeMap)) - { - specialChar = escapeMap[static_cast((char)wch)]; - } - else - { - specialChar = '\0'; - } - - if (specialChar != '\0') - { - if (op == EscapingOperation_Escape) - { - outputString->AppendLarge(lastFlushSz, (charcount_t)(current - lastFlushSz)); - lastFlushSz = current + 1; - outputString->Append(_u('\\')); - outputString->Append(specialChar); - if (specialChar == _u('u')) - { - char16 bf[5]; - _ltow_s(wch, bf, _countof(bf), 16); - size_t count = wcslen(bf); - if (count < 4) - { - if (count == 1) - { - outputString->Append(_u("000"), 3); - } - else if (count == 2) - { - outputString->Append(_u("00"), 2); - } - else - { - outputString->Append(_u("0"), 1); - } - } - outputString->Append(bf, (charcount_t)count); - } - } - else - { - charcount_t i = (charcount_t)(current - startSz); - return EscapeNonEmptyString(value, szValue, i ? i - 1 : 0, len, outputString); - } - } - } - } // for. - - if (op == EscapingOperation_Escape) - { - if (lastFlushSz < endSz) - { - outputString->AppendLarge(lastFlushSz, (charcount_t)(endSz - lastFlushSz)); - } - outputString->Append(_u('\"')); - result = nullptr; - } - else if (op == EscapingOperation_Count) - { - result = TJSONString::New(value, start, extra); - } - else - { - // If we got here, we don't need to change the inside, just wrap the string with quotes. - result = TConcatStringWrapping::New(value); - } - - return result; - } - - static WCHAR* EscapeNonEmptyString(ArenaAllocator* allocator, const char16* szValue) - { - WCHAR* result = nullptr; - StringProxy::allocator = allocator; - charcount_t len = (charcount_t)wcslen(szValue); - StringProxy* proxy = EscapeNonEmptyString(nullptr, szValue, 0, len, nullptr); - result = proxy->GetResult(szValue, len); - StringProxy::allocator = nullptr; - return result; - } - - // This class has the same interface (with respect to the EscapeNonEmptyString method) as JSONString and TConcatStringWrapping - // It is used in scenario where we want to use the JSON escaping capability without having a script context. - class StringProxy - { - public: - static ArenaAllocator* allocator; - - StringProxy() - { - this->m_needEscape = false; - } - - StringProxy(int start, int extra) : m_start(start), m_extra(extra) - { - this->m_needEscape = true; - } - - static StringProxy* New(Js::JavascriptString* value) - { - // Case 1: The string do not need to be escaped at all - Assert(value == nullptr); - Assert(allocator != nullptr); - return Anew(allocator, StringProxy); - } - - static StringProxy* New(Js::JavascriptString* value, uint start, uint length) - { - // Case 2: The string requires escaping, and the length is computed - Assert(value == nullptr); - Assert(allocator != nullptr); - return Anew(allocator, StringProxy, start, length); - } - - WCHAR* GetResult(const WCHAR* originalString, charcount_t originalLength) - { - if (this->m_needEscape) - { - charcount_t unescapedStringLength = originalLength + m_extra + 2 /* for the quotes */; - WCHAR* buffer = AnewArray(allocator, WCHAR, unescapedStringLength + 1); /* for terminating null */ - buffer[unescapedStringLength] = '\0'; - WritableStringBuffer stringBuffer(buffer, unescapedStringLength); - StringProxy* proxy = JSONString::EscapeNonEmptyString(nullptr, originalString, m_start, originalLength, &stringBuffer); - Assert(proxy == nullptr); - Assert(buffer[unescapedStringLength] == '\0'); - return buffer; - } - else - { - WCHAR* buffer = AnewArray(allocator, WCHAR, originalLength + 3); /* quotes and terminating null */ - buffer[0] = _u('\"'); - buffer[originalLength + 1] = _u('\"'); - buffer[originalLength + 2] = _u('\0'); - js_wmemcpy_s(buffer + 1, originalLength, originalString, originalLength); - return buffer; - } - } - - private: - int m_extra; - int m_start; - bool m_needEscape; - }; - }; -} diff --git a/lib/Runtime/Library/JSONStringBuilder.cpp b/lib/Runtime/Library/JSONStringBuilder.cpp index b3b7bdbe813..9f9f846dbc6 100644 --- a/lib/Runtime/Library/JSONStringBuilder.cpp +++ b/lib/Runtime/Library/JSONStringBuilder.cpp @@ -30,6 +30,34 @@ JSONStringBuilder::AppendString(_In_ JavascriptString* str) AppendBuffer(str->GetString(), str->GetLength()); } +void +JSONStringBuilder::AppendEscapeSequence(_In_ const char16 character) +{ + // Convert character into a 4 digit hex code (e.g. \u0010) + this->AppendCharacter(_u('\\')); + this->AppendCharacter(_u('u')); + { + char16 buf[5]; + // Get hex value + _ltow_s(character, buf, _countof(buf), 16); + + // Append leading zeros if necessary before the hex value + charcount_t count = static_cast(wcslen(buf)); + switch (count) + { + case 1: + this->AppendCharacter(_u('0')); + case 2: + this->AppendCharacter(_u('0')); + case 3: + this->AppendCharacter(_u('0')); + default: + this->AppendBuffer(buf, count); + break; + } + } +} + void JSONStringBuilder::EscapeAndAppendString(_In_ JavascriptString* str) { @@ -70,30 +98,25 @@ JSONStringBuilder::EscapeAndAppendString(_In_ JavascriptString* str) this->AppendCharacter(_u('t')); break; default: - if (currentCharacter < _u(' ')) + if (currentCharacter < _u(' ') || utf8::IsLowSurrogateChar(currentCharacter)) + { + this->AppendEscapeSequence(currentCharacter); + } + else if (utf8::IsHighSurrogateChar(currentCharacter)) { - // If character is less than SPACE, it is converted into a 4 digit hex code (e.g. \u0010) - this->AppendCharacter(_u('\\')); - this->AppendCharacter(_u('u')); + if (index + 1 < bufferStart + strLength && utf8::IsLowSurrogateChar(*(index + 1))) + { + // Append surrogate pair normally + this->AppendCharacter(currentCharacter); + this->AppendCharacter(*(index + 1)); + + // Skip the trailing-surrogate code unit + index++; + } + else { - char16 buf[5]; - // Get hex value - _ltow_s(currentCharacter, buf, _countof(buf), 16); - - // Append leading zeros if necessary before the hex value - charcount_t count = static_cast(wcslen(buf)); - switch (count) - { - case 1: - this->AppendCharacter(_u('0')); - case 2: - this->AppendCharacter(_u('0')); - case 3: - this->AppendCharacter(_u('0')); - default: - this->AppendBuffer(buf, count); - break; - } + // High-surrogate code unit not followed by a trailing-surrogate code unit should be escaped. + this->AppendEscapeSequence(currentCharacter); } } else diff --git a/lib/Runtime/Library/JSONStringBuilder.h b/lib/Runtime/Library/JSONStringBuilder.h index 132fb96c701..e77dbbe30cf 100644 --- a/lib/Runtime/Library/JSONStringBuilder.h +++ b/lib/Runtime/Library/JSONStringBuilder.h @@ -23,6 +23,7 @@ class JSONStringBuilder void AppendCharacter(char16 character); void AppendBuffer(_In_ const char16* buffer, charcount_t length); void AppendString(_In_ JavascriptString* str); + void AppendEscapeSequence(_In_ const char16 character); void EscapeAndAppendString(_In_ JavascriptString* str); void AppendObjectString(_In_ JSONObject* valueList); void AppendArrayString(_In_ JSONArray* valueArray); diff --git a/lib/Runtime/Library/JSONStringifier.cpp b/lib/Runtime/Library/JSONStringifier.cpp index 5e57c55bea5..7ad41f07570 100644 --- a/lib/Runtime/Library/JSONStringifier.cpp +++ b/lib/Runtime/Library/JSONStringifier.cpp @@ -67,7 +67,7 @@ JSONStringifier::ReadSpace(_In_opt_ Var space) break; } case TypeIds_String: - this->SetStringGap(JavascriptString::UnsafeFromVar(space)); + this->SetStringGap(UnsafeVarTo(space)); break; case TypeIds_StringObject: this->SetStringGap(JavascriptConversion::ToString(space, this->scriptContext)); @@ -88,7 +88,7 @@ JSONStringifier::AddToPropertyList(_In_ Var item, _Inout_ BVSparse* pr propertyName = this->scriptContext->GetIntegerString(item); break; case TypeIds_String: - propertyName = JavascriptString::UnsafeFromVar(item); + propertyName = UnsafeVarTo(item); break; case TypeIds_Number: case TypeIds_NumberObject: @@ -134,7 +134,7 @@ JSONStringifier::ReadReplacer(_In_opt_ Var replacer) BVSparse propertyListBV(recycler); this->propertyList = RecyclerNew(recycler, PropertyList, recycler); - JavascriptArray* propertyArray = JavascriptOperators::TryFromVar(replacer); + JavascriptArray* propertyArray = JavascriptArray::TryVarToNonES5Array(replacer); if (propertyArray != nullptr) { uint32 length = propertyArray->GetLength(); @@ -221,22 +221,31 @@ _Ret_notnull_ Var JSONStringifier::ReadValue(_In_ JavascriptString* key, _In_opt_ const PropertyRecord* propertyRecord, _In_ RecyclableObject* holder) { Var value = nullptr; - PropertyString* propertyString = PropertyString::TryFromVar(key); PropertyValueInfo info; - if (propertyString != nullptr) - { - PropertyValueInfo::SetCacheInfo(&info, propertyString, propertyString->GetLdElemInlineCache(), false); - if (propertyString->TryGetPropertyFromCache(holder, holder, &value, this->scriptContext, &info)) - { - return value; - } - } if (propertyRecord == nullptr) { key->GetPropertyRecord(&propertyRecord); } - JavascriptOperators::GetProperty(holder, propertyRecord->GetPropertyId(), &value, this->scriptContext, &info); + + if (propertyRecord->IsNumeric()) + { + JavascriptOperators::GetItem(holder, propertyRecord->GetNumericValue(), &value, this->scriptContext); + } + else + { + PropertyString* propertyString = JavascriptOperators::TryFromVar(key); + if (propertyString != nullptr) + { + PropertyValueInfo::SetCacheInfo(&info, propertyString, propertyString->GetLdElemInlineCache(), false); + if (propertyString->TryGetPropertyFromCache(holder, holder, &value, this->scriptContext, &info)) + { + return value; + } + } + JavascriptOperators::GetProperty(holder, propertyRecord->GetPropertyId(), &value, this->scriptContext, &info); + } + return value; } @@ -257,7 +266,7 @@ JSONStringifier::TryConvertPrimitiveObject(_In_ RecyclableObject* value) } else if (TypeIds_BooleanObject == id) { - return (JavascriptBooleanObject::UnsafeFromVar(value)->GetValue() != FALSE) + return (UnsafeVarTo(value)->GetValue() != FALSE) ? this->scriptContext->GetLibrary()->GetTrue() : this->scriptContext->GetLibrary()->GetFalse(); } @@ -325,7 +334,7 @@ JSONStringifier::ToJSON(_In_ JavascriptString* key, _In_ RecyclableObject* value } if (JavascriptConversion::IsCallable(toJSON)) { - RecyclableObject* func = RecyclableObject::UnsafeFromVar(toJSON); + RecyclableObject* func = UnsafeVarTo(toJSON); Var values[2]; Arguments args(2, values); args.Values[0] = valueObject; @@ -342,7 +351,7 @@ JSONStringifier::ToJSON(_In_ JavascriptString* key, _In_ RecyclableObject* value uint32 JSONStringifier::ReadArrayLength(_In_ RecyclableObject* value) { - JavascriptArray* arr = JavascriptOperators::TryFromVar(value); + JavascriptArray* arr = JavascriptArray::TryVarToNonES5Array(value); if (arr != nullptr) { return arr->GetLength(); @@ -361,7 +370,7 @@ void JSONStringifier::ReadArrayElement(uint32 index, _In_ RecyclableObject* arr, _Out_ JSONProperty* prop, _In_ JSONObjectStack* objectStack) { Var value = nullptr; - JavascriptArray* jsArray = JavascriptOperators::TryFromVar(arr); + JavascriptArray* jsArray = JavascriptArray::TryVarToNonES5Array(arr); if (jsArray && !jsArray->IsCrossSiteObject()) { value = jsArray->DirectGetItem(index); @@ -677,9 +686,28 @@ JSONStringifier::CalculateStringElementLength(_In_ JavascriptString* str) // Some characters may require an escape sequence. We can use the escapeMapCount table // to determine how many extra characters are needed - if (currentCharacter < _countof(JSONString::escapeMapCount)) + if (currentCharacter < _countof(LazyJSONString::escapeMapCount)) { - escapedStrLength += JSONString::escapeMapCount[currentCharacter]; + escapedStrLength += LazyJSONString::escapeMapCount[currentCharacter]; + } + else if (utf8::IsLowSurrogateChar(currentCharacter)) + { + // Lone trailing-surrogate code units should be escaped. + // They will always need 5 extra characters for the escape sequence, ie: \udbff + escapedStrLength += 5; + } + else if (utf8::IsHighSurrogateChar(currentCharacter)) + { + if (index + 1 < bufferStart + strLength && utf8::IsLowSurrogateChar(*(index + 1))) + { + // Regular surrogate pairs are handled normally - skip the trailing-surrogate code unit. + index++; + } + else + { + // High-surrogate code unit not followed by a trailing-surrogate code unit should be escaped. + escapedStrLength += 5; + } } } if (escapedStrLength > UINT32_MAX) @@ -701,7 +729,7 @@ JSONStringifier::ReadData(_In_ RecyclableObject* valueObj, _Out_ JSONProperty* p return; case TypeIds_Boolean: - if (JavascriptBoolean::UnsafeFromVar(valueObj)->GetValue() != FALSE) + if (UnsafeVarTo(valueObj)->GetValue() != FALSE) { prop->type = JSONContentType::True; this->totalStringLength = UInt32Math::Add(this->totalStringLength, Constants::TrueStringLength); @@ -714,11 +742,11 @@ JSONStringifier::ReadData(_In_ RecyclableObject* valueObj, _Out_ JSONProperty* p return; case TypeIds_Int64Number: - this->SetNumericProperty(static_cast(JavascriptInt64Number::UnsafeFromVar(valueObj)->GetValue()), valueObj, prop); + this->SetNumericProperty(static_cast(UnsafeVarTo(valueObj)->GetValue()), valueObj, prop); return; case TypeIds_UInt64Number: - this->SetNumericProperty(static_cast(JavascriptUInt64Number::UnsafeFromVar(valueObj)->GetValue()), valueObj, prop); + this->SetNumericProperty(static_cast(UnsafeVarTo(valueObj)->GetValue()), valueObj, prop); return; #if !FLOATVAR @@ -728,7 +756,7 @@ JSONStringifier::ReadData(_In_ RecyclableObject* valueObj, _Out_ JSONProperty* p #endif case TypeIds_String: - prop->stringValue = JavascriptString::UnsafeFromVar(valueObj); + prop->stringValue = UnsafeVarTo(valueObj); prop->type = JSONContentType::String; this->totalStringLength = UInt32Math::Add(this->totalStringLength, CalculateStringElementLength(prop->stringValue)); return; diff --git a/lib/Runtime/Library/JavascriptArray.cpp b/lib/Runtime/Library/JavascriptArray.cpp index f4f514dc67d..075316f8ad5 100644 --- a/lib/Runtime/Library/JavascriptArray.cpp +++ b/lib/Runtime/Library/JavascriptArray.cpp @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- @@ -389,7 +390,7 @@ using namespace Js; JavascriptArray::JavascriptArray(uint32 length, DynamicType * type) : ArrayObject(type, false, length) { - Assert(JavascriptArray::Is(type->GetTypeId())); + Assert(JavascriptArray::IsNonES5Array(type->GetTypeId())); Assert(EmptySegment->length == 0 && EmptySegment->size == 0 && EmptySegment->next == NULL); InitArrayFlags(DynamicObjectFlags::InitialArrayValue); SetHeadAndLastUsedSegment(const_cast(EmptySegment)); @@ -454,17 +455,22 @@ using namespace Js; SparseArraySegment::From(head)->FillSegmentBuffer(0, size); } - bool JavascriptArray::Is(Var aValue) + bool JavascriptArray::IsNonES5Array(Var aValue) { TypeId typeId = JavascriptOperators::GetTypeId(aValue); - return JavascriptArray::Is(typeId); + return JavascriptArray::IsNonES5Array(typeId); } - bool JavascriptArray::Is(TypeId typeId) + bool JavascriptArray::IsNonES5Array(TypeId typeId) { return typeId >= TypeIds_ArrayFirst && typeId <= TypeIds_ArrayLast; } + JavascriptArray* JavascriptArray::TryVarToNonES5Array(Var aValue) + { + return JavascriptArray::IsNonES5Array(aValue) ? UnsafeVarTo(aValue) : nullptr; + } + bool JavascriptArray::IsVarArray(Var aValue) { TypeId typeId = JavascriptOperators::GetTypeId(aValue); @@ -508,39 +514,25 @@ using namespace Js; } } - JavascriptArray* JavascriptArray::FromVar(Var aValue) - { - AssertOrFailFastMsg(IsAnyArray(aValue), "Ensure var is actually a 'JavascriptArray'"); - - return static_cast(aValue); - } - - JavascriptArray* JavascriptArray::UnsafeFromVar(Var aValue) - { - AssertMsg(IsAnyArray(aValue), "Ensure var is actually a 'JavascriptArray'"); - - return static_cast(aValue); - } - // Get JavascriptArray* from a Var, which is either a JavascriptArray* or ESArray*. JavascriptArray* JavascriptArray::FromAnyArray(Var aValue) { - AssertOrFailFastMsg(Is(aValue) || ES5Array::Is(aValue), "Ensure var is actually a 'JavascriptArray' or 'ES5Array'"); + AssertOrFailFastMsg(VarIs(aValue), "Ensure var is actually a 'JavascriptArray' or 'ES5Array'"); - return static_cast(RecyclableObject::FromVar(aValue)); + return static_cast(VarTo(aValue)); } JavascriptArray* JavascriptArray::UnsafeFromAnyArray(Var aValue) { - AssertMsg(Is(aValue) || ES5Array::Is(aValue), "Ensure var is actually a 'JavascriptArray' or 'ES5Array'"); + AssertMsg(VarIs(aValue), "Ensure var is actually a 'JavascriptArray' or 'ES5Array'"); - return static_cast(RecyclableObject::UnsafeFromVar(aValue)); + return static_cast(UnsafeVarTo(aValue)); } // Check if a Var is a direct-accessible (fast path) JavascriptArray. bool JavascriptArray::IsDirectAccessArray(Var aValue) { - return RecyclableObject::Is(aValue) && + return VarIs(aValue) && (VirtualTableInfo::HasVirtualTable(aValue) || VirtualTableInfo::HasVirtualTable(aValue) || VirtualTableInfo::HasVirtualTable(aValue)); @@ -554,15 +546,15 @@ using namespace Js; } SparseArraySegmentBase* inlineHeadSegment = nullptr; - if (JavascriptNativeArray::Is(pArr)) + if (VarIs(pArr)) { - if (JavascriptNativeFloatArray::Is(pArr)) + if (VarIs(pArr)) { inlineHeadSegment = DetermineInlineHeadSegmentPointer((JavascriptNativeFloatArray*)pArr); } else { - AssertOrFailFast(JavascriptNativeIntArray::Is(pArr)); + AssertOrFailFast(VarIs(pArr)); inlineHeadSegment = DetermineInlineHeadSegmentPointer((JavascriptNativeIntArray*)pArr); } @@ -611,7 +603,7 @@ using namespace Js; *isObjectWithArrayRef = false; - if (!RecyclableObject::Is(var)) + if (!VarIs(var)) { return nullptr; } @@ -635,7 +627,7 @@ using namespace Js; if (!array) { - array = FromVar(var); + array = VarTo(var); } return array; } @@ -649,8 +641,8 @@ using namespace Js; if (*pVTable == VirtualTableInfo::Address || *pVTable == VirtualTableInfo>::Address) { - ArrayObject* objectArray = DynamicObject::FromVar(var)->GetObjectArray(); - *pArray = (objectArray && Is(objectArray)) ? FromVar(objectArray) : nullptr; + ArrayObject* objectArray = VarTo(var)->GetObjectArray(); + *pArray = (objectArray && VarIs(objectArray)) ? VarTo(objectArray) : nullptr; if (!(*pArray)) { return false; @@ -676,7 +668,7 @@ using namespace Js; *isObjectWithArrayRef = false; *arrayTypeIdRef = TypeIds_Undefined; - if(!RecyclableObject::Is(var)) + if(!VarIs(var)) { return nullptr; } @@ -685,8 +677,8 @@ using namespace Js; INT_PTR vtable = VirtualTableInfoBase::GetVirtualTable(var); if(vtable == VirtualTableInfo::Address) { - ArrayObject* objectArray = DynamicObject::FromVar(var)->GetObjectArray(); - array = (objectArray && Is(objectArray)) ? FromVar(objectArray) : nullptr; + ArrayObject* objectArray = VarTo(var)->GetObjectArray(); + array = (objectArray && IsNonES5Array(objectArray)) ? VarTo(objectArray) : nullptr; if(!array) { return nullptr; @@ -714,7 +706,7 @@ using namespace Js; if(!array) { - array = FromVar(var); + array = VarTo(var); } return array; } @@ -1116,8 +1108,8 @@ using namespace Js; JIT_HELPER_REENTRANT_HEADER(ScrArr_ProfiledNewInstance); ARGUMENTS(args, callInfo); - Assert(JavascriptFunction::Is(function) && - JavascriptFunction::FromVar(function)->GetFunctionInfo() == &JavascriptArray::EntryInfo::NewInstance); + Assert(VarIs(function) && + VarTo(function)->GetFunctionInfo() == &JavascriptArray::EntryInfo::NewInstance); Assert(callInfo.Count >= 2); ArrayCallSiteInfo *arrayInfo = (ArrayCallSiteInfo*)args[0]; @@ -1245,7 +1237,7 @@ using namespace Js; pNew = CreateArrayFromConstructorNoArg(function, scriptContext); return isCtorSuperCall ? - JavascriptOperators::OrdinaryCreateFromConstructor(RecyclableObject::FromVar(newTarget), pNew, nullptr, scriptContext) : + JavascriptOperators::OrdinaryCreateFromConstructor(VarTo(newTarget), pNew, nullptr, scriptContext) : pNew; } @@ -1309,7 +1301,7 @@ using namespace Js; pNew->ValidateArray(); #endif return isCtorSuperCall ? - JavascriptOperators::OrdinaryCreateFromConstructor(RecyclableObject::FromVar(newTarget), pNew, nullptr, scriptContext) : + JavascriptOperators::OrdinaryCreateFromConstructor(VarTo(newTarget), pNew, nullptr, scriptContext) : pNew; } @@ -1334,8 +1326,8 @@ using namespace Js; Var JavascriptArray::ProfiledNewInstanceNoArg(RecyclableObject *function, ScriptContext *scriptContext, ArrayCallSiteInfo *arrayInfo, RecyclerWeakReference *weakFuncRef) { JIT_HELPER_NOT_REENTRANT_HEADER(ScrArr_ProfiledNewInstanceNoArg, reentrancylock, scriptContext->GetThreadContext()); - Assert(JavascriptFunction::Is(function) && - JavascriptFunction::FromVar(function)->GetFunctionInfo() == &JavascriptArray::EntryInfo::NewInstance); + Assert(VarIs(function) && + VarTo(function)->GetFunctionInfo() == &JavascriptArray::EntryInfo::NewInstance); if (arrayInfo->IsNativeIntArray()) { @@ -1836,7 +1828,7 @@ using namespace Js; template<> void JavascriptArray::ChangeArrayTypeToNativeArray(JavascriptArray * varArray, ScriptContext * scriptContext) { - AssertMsg(!JavascriptNativeArray::Is(varArray), "Ensure that the incoming Array is a Var array"); + AssertMsg(!VarIs(varArray), "Ensure that the incoming Array is a Var array"); if (varArray->GetType() == scriptContext->GetLibrary()->GetArrayType()) { @@ -1883,7 +1875,7 @@ using namespace Js; template<> void JavascriptArray::ChangeArrayTypeToNativeArray(JavascriptArray * varArray, ScriptContext * scriptContext) { - AssertMsg(!JavascriptNativeArray::Is(varArray), "Ensure that the incoming Array is a Var array"); + AssertMsg(!VarIs(varArray), "Ensure that the incoming Array is a Var array"); if (varArray->GetType() == scriptContext->GetLibrary()->GetArrayType()) { @@ -1943,7 +1935,7 @@ using namespace Js; template NativeArrayType *JavascriptArray::ConvertToNativeArrayInPlace(JavascriptArray *varArray) { - AssertMsg(!JavascriptNativeArray::Is(varArray), "Ensure that the incoming Array is a Var array"); + AssertMsg(!VarIs(varArray), "Ensure that the incoming Array is a Var array"); ScriptContext *scriptContext = varArray->GetScriptContext(); SparseArraySegmentBase *seg, *nextSeg, *prevSeg = nullptr; @@ -2568,7 +2560,7 @@ using namespace Js; Var JavascriptNativeArray::FindMinOrMax(Js::ScriptContext * scriptContext, bool findMax) { - if (JavascriptNativeIntArray::Is(this)) + if (VarIs(this)) { return this->FindMinOrMax(scriptContext, findMax); } @@ -2783,11 +2775,11 @@ using namespace Js; uint32 JavascriptArray::GetNextIndex(uint32 index) const { - if (JavascriptNativeIntArray::Is((Var)this)) + if (VarIs((Var)this)) { return this->GetNextIndexHelper(index); } - else if (JavascriptNativeFloatArray::Is((Var)this)) + else if (VarIs((Var)this)) { return this->GetNextIndexHelper(index); } @@ -3148,7 +3140,7 @@ using namespace Js; void JavascriptArray::CreateDataPropertyOrThrow(RecyclableObject * obj, BigIndex index, Var item, ScriptContext * scriptContext) { JS_REENTRANCY_LOCK(jsReentLock, scriptContext->GetThreadContext()); - JavascriptArray * arr = JavascriptOperators::TryFromVar(obj); + JavascriptArray * arr = JavascriptArray::TryVarToNonES5Array(obj); if (arr != nullptr) { arr->GenericDirectSetItemAt(index, item); @@ -3189,7 +3181,7 @@ using namespace Js; Assert(obj != nullptr); Assert(length != nullptr); - *array = JavascriptOperators::TryFromVar(arg); + *array = JavascriptArray::TryVarToNonES5Array(arg); if (*array && !(*array)->IsCrossSiteObject()) { #if ENABLE_COPYONACCESS_ARRAY @@ -3213,13 +3205,22 @@ using namespace Js; { ScriptContext* scriptContext = pDestObj->GetScriptContext(); + PropertyRecord const * propertyRecord; if (idxDest.IsSmallIndex()) { - return pDestObj->SetItem(idxDest.GetSmallIndex(), aItem, Js::PropertyOperation_ThrowIfNotExtensible); + JavascriptOperators::GetPropertyIdForInt(idxDest.GetSmallIndex(), scriptContext, &propertyRecord); } - PropertyRecord const * propertyRecord; - JavascriptOperators::GetPropertyIdForInt(idxDest.GetBigIndex(), scriptContext, &propertyRecord); - return pDestObj->SetProperty(propertyRecord->GetPropertyId(), aItem, PropertyOperation_ThrowIfNotExtensible, nullptr); + else + { + JavascriptOperators::GetPropertyIdForInt(idxDest.GetBigIndex(), scriptContext, &propertyRecord); + } + + PropertyDescriptor propertyDescriptor; + propertyDescriptor.SetConfigurable(true); + propertyDescriptor.SetEnumerable(true); + propertyDescriptor.SetWritable(true); + propertyDescriptor.SetValue(aItem); + return JavascriptObject::DefineOwnPropertyHelper(pDestObj, propertyRecord->GetPropertyId(), propertyDescriptor, scriptContext, false); } template @@ -3240,7 +3241,7 @@ using namespace Js; ConcatSpreadableState previousItemSpreadableState /*= ConcatSpreadableState_NotChecked*/, BigIndex *firstPromotedItemLength /* = nullptr */) { JS_REENTRANCY_LOCK(jsReentLock, scriptContext->GetThreadContext()); - JavascriptArray* pDestArray = JavascriptOperators::TryFromVar(pDestObj); + JavascriptArray* pDestArray = JavascriptArray::TryVarToNonES5Array(pDestObj); if (pDestArray) { // ConcatArgs function expects to work on the Var array so we are ensuring it. @@ -3274,7 +3275,7 @@ using namespace Js; } if (pDestArray && JavascriptArray::IsDirectAccessArray(aItem) && JavascriptArray::IsDirectAccessArray(pDestArray) - && BigIndex(idxDest + JavascriptArray::UnsafeFromVar(aItem)->length).IsSmallIndex() && !JavascriptArray::UnsafeFromVar(aItem)->IsFillFromPrototypes()) // Fast path + && BigIndex(idxDest + UnsafeVarTo(aItem)->length).IsSmallIndex() && !UnsafeVarTo(aItem)->IsFillFromPrototypes()) // Fast path { JavascriptNativeIntArray *pIntItemArray = JavascriptOperators::TryFromVar(aItem); if (pIntItemArray) @@ -3292,7 +3293,7 @@ using namespace Js; } else { - JavascriptArray* pItemArray = JavascriptArray::UnsafeFromVar(aItem); + JavascriptArray* pItemArray = UnsafeVarTo(aItem); JS_REENTRANT(jsReentLock, CopyArrayElements(pDestArray, BigIndex(idxDest).GetSmallIndex(), pItemArray)); idxDest = idxDest + pItemArray->length; } @@ -3300,7 +3301,7 @@ using namespace Js; } else { - AssertOrFailFast(RecyclableObject::Is(aItem)); + AssertOrFailFast(VarIs(aItem)); //CONSIDER: enumerating remote array instead of walking all indices BigIndex length; @@ -3328,7 +3329,7 @@ using namespace Js; JavascriptError::ThrowTypeError(scriptContext, JSERR_IllegalArraySizeAndLength); } - RecyclableObject* itemObject = RecyclableObject::FromVar(aItem); + RecyclableObject* itemObject = VarTo(aItem); Var subItem; uint32 lengthToUin32Max = length.IsSmallIndex() ? length.GetSmallIndex() : MaxArrayLength; for (uint32 idxSubItem = 0u; idxSubItem < lengthToUin32Max; ++idxSubItem) @@ -3417,7 +3418,7 @@ using namespace Js; bool spreadable = false; JS_REENTRANT(jsReentLock, spreadable = !!JavascriptOperators::IsConcatSpreadable(aItem)); - if (!JavascriptNativeIntArray::Is(pDestArray)) + if (!VarIsCorrectType(pDestArray)) { JS_REENTRANT(jsReentLock, ConcatArgs(pDestArray, remoteTypeIds, args, scriptContext, idxArg, idxDest, spreadable ? ConcatSpreadableState_CheckedAndTrue : ConcatSpreadableState_CheckedAndFalse)); @@ -3428,7 +3429,7 @@ using namespace Js; { JS_REENTRANT(jsReentLock, pDestArray->SetItem(idxDest, aItem, PropertyOperation_ThrowIfNotExtensible)); idxDest++; - if (!JavascriptNativeIntArray::Is(pDestArray)) // SetItem could convert pDestArray to a var array if aItem is not an integer if so fall back + if (!VarIsCorrectType(pDestArray)) // SetItem could convert pDestArray to a var array if aItem is not an integer if so fall back { JS_REENTRANT(jsReentLock, ConcatArgs(pDestArray, remoteTypeIds, args, scriptContext, idxArg + 1, idxDest, ConcatSpreadableState_NotChecked)); return pDestArray; @@ -3497,7 +3498,7 @@ using namespace Js; bool spreadable = false; JS_REENTRANT(jsReentLock, spreadable = !!JavascriptOperators::IsConcatSpreadable(aItem)); - if (!JavascriptNativeFloatArray::Is(pDestArray)) + if (!VarIsCorrectType(pDestArray)) { JS_REENTRANT(jsReentLock, ConcatArgs(pDestArray, remoteTypeIds, args, scriptContext, idxArg, idxDest, spreadable ? ConcatSpreadableState_CheckedAndTrue : ConcatSpreadableState_CheckedAndFalse)); @@ -3509,7 +3510,7 @@ using namespace Js; JS_REENTRANT(jsReentLock, pDestArray->SetItem(idxDest, aItem, PropertyOperation_ThrowIfNotExtensible)); idxDest = idxDest + 1; - if (!JavascriptNativeFloatArray::Is(pDestArray)) // SetItem could convert pDestArray to a var array if aItem is not an integer if so fall back + if (!VarIsCorrectType(pDestArray)) // SetItem could convert pDestArray to a var array if aItem is not an integer if so fall back { JS_REENTRANT(jsReentLock, ConcatArgs(pDestArray, remoteTypeIds, args, scriptContext, idxArg + 1, idxDest, ConcatSpreadableState_NotChecked)); return pDestArray; @@ -3520,7 +3521,7 @@ using namespace Js; bool converted = false; if (JavascriptArray::IsAnyArray(aItem) || remoteTypeIds[idxArg] == TypeIds_Array) { - bool isFillFromPrototypes = JavascriptArray::UnsafeFromVar(aItem)->IsFillFromPrototypes(); + bool isFillFromPrototypes = UnsafeVarTo(aItem)->IsFillFromPrototypes(); JavascriptNativeIntArray * pIntItemArray = JavascriptOperators::TryFromVar(aItem); if (pIntItemArray && !isFillFromPrototypes) // Fast path { @@ -3627,10 +3628,10 @@ using namespace Js; JavascriptArray * pItemArray = JavascriptArray::FromAnyArray(aItem); if (isFloat) { - if (!JavascriptNativeIntArray::Is(pItemArray)) + if (!VarIs(pItemArray)) { isInt = false; - if (!JavascriptNativeFloatArray::Is(pItemArray)) + if (!VarIs(pItemArray)) { isFloat = false; } @@ -3649,7 +3650,7 @@ using namespace Js; // worth it. isInt = false; isFloat = false; - if (!JavascriptProxy::Is(aItem)) + if (!VarIs(aItem)) { if (scriptContext->GetConfig()->IsES6ToLengthEnabled()) { @@ -3734,15 +3735,15 @@ using namespace Js; // so that the data will be converted on copy. if (isInt) { - if (JavascriptNativeIntArray::Is(pDestObj)) + if (VarIs(pDestObj)) { isArray = true; } else { isInt = false; - isFloat = JavascriptNativeFloatArray::Is(pDestObj); - isArray = JavascriptArray::Is(pDestObj); + isFloat = VarIs(pDestObj); + isArray = JavascriptArray::IsNonES5Array(pDestObj); } } else if (isFloat) @@ -3755,8 +3756,8 @@ using namespace Js; } else { - isFloat = JavascriptNativeFloatArray::Is(pDestObj); - isArray = JavascriptArray::Is(pDestObj); + isFloat = VarIs(pDestObj); + isArray = JavascriptArray::IsNonES5Array(pDestObj); } } else @@ -3777,7 +3778,7 @@ using namespace Js; } else { - isArray = JavascriptArray::Is(pDestObj); + isArray = JavascriptArray::IsNonES5Array(pDestObj); } } } @@ -3787,14 +3788,14 @@ using namespace Js; { if (isInt) { - JavascriptNativeIntArray *pIntArray = isArray ? JavascriptNativeIntArray::FromVar(pDestObj) : scriptContext->GetLibrary()->CreateNativeIntArray(cDestLength); + JavascriptNativeIntArray *pIntArray = isArray ? VarTo(pDestObj) : scriptContext->GetLibrary()->CreateNativeIntArray(cDestLength); pIntArray->EnsureHead(); JS_REENTRANT(jsReentLock, pDestArray = ConcatIntArgs(pIntArray, remoteTypeIds, args, scriptContext)); } else if (isFloat) { - JavascriptNativeFloatArray *pFArray = isArray ? JavascriptNativeFloatArray::FromVar(pDestObj) : scriptContext->GetLibrary()->CreateNativeFloatArray(cDestLength); + JavascriptNativeFloatArray *pFArray = isArray ? VarTo(pDestObj) : scriptContext->GetLibrary()->CreateNativeFloatArray(cDestLength); pFArray->EnsureHead(); JS_REENTRANT(jsReentLock, pDestArray = ConcatFloatArgs(pFArray, remoteTypeIds, args, scriptContext)); @@ -3802,7 +3803,7 @@ using namespace Js; else { - pDestArray = isArray ? JavascriptArray::FromVar(pDestObj) : scriptContext->GetLibrary()->CreateArray(cDestLength); + pDestArray = isArray ? VarTo(pDestObj) : scriptContext->GetLibrary()->CreateArray(cDestLength); // if the constructor has changed then we no longer specialize for ints and floats pDestArray->EnsureHead(); @@ -3941,7 +3942,7 @@ using namespace Js; // The evaluation of method arguments may change the type of the array. Hence, we do that prior to the actual helper method calls. // The if clause of the conditional statement below applies to an JavascriptArray or TypedArray instances. The rest of the conditional // clauses apply to an ES5Array or other valid Javascript objects. - if ((pArr || TypedArrayBase::Is(obj)) && (length.IsSmallIndex() || length.IsUint32Max())) + if ((pArr || VarIs(obj)) && (length.IsSmallIndex() || length.IsUint32Max())) { uint32 len = length.IsUint32Max() ? MaxArrayLength : length.GetSmallIndex(); JS_REENTRANT(jsReentLock, BOOL gotParam = GetParamForIndexOf(len, args, search, fromIndex, scriptContext)); @@ -3968,9 +3969,9 @@ using namespace Js; } // Side effects (such as defining a property in a ToPrimitive call) during evaluation of fromIndex argument may convert the array to an ES5 array. - if (pArr && !JavascriptArray::Is(obj)) + if (pArr && !JavascriptArray::IsNonES5Array(obj)) { - AssertOrFailFastMsg(ES5Array::Is(obj), "The array should have been converted to an ES5Array"); + AssertOrFailFastMsg(VarIs(obj), "The array should have been converted to an ES5Array"); pArr = nullptr; } @@ -4003,9 +4004,9 @@ using namespace Js; case Js::TypeIds_Array: JS_REENTRANT_UNLOCK(jsReentLock, return TemplatedIndexOfHelper(pArr, search, fromIndex, len, scriptContext)); case Js::TypeIds_NativeIntArray: - JS_REENTRANT_UNLOCK(jsReentLock, return TemplatedIndexOfHelper(JavascriptNativeIntArray::UnsafeFromVar(pArr), search, fromIndex, len, scriptContext)); + JS_REENTRANT_UNLOCK(jsReentLock, return TemplatedIndexOfHelper(UnsafeVarTo(pArr), search, fromIndex, len, scriptContext)); case Js::TypeIds_NativeFloatArray: - JS_REENTRANT_UNLOCK(jsReentLock, return TemplatedIndexOfHelper(JavascriptNativeFloatArray::UnsafeFromVar(pArr), search, fromIndex, len, scriptContext)); + JS_REENTRANT_UNLOCK(jsReentLock, return TemplatedIndexOfHelper(UnsafeVarTo(pArr), search, fromIndex, len, scriptContext)); default: AssertMsg(FALSE, "invalid array typeid"); JS_REENTRANT_UNLOCK(jsReentLock, return TemplatedIndexOfHelper(pArr, search, fromIndex, len, scriptContext)); @@ -4218,7 +4219,7 @@ using namespace Js; //Consider: enumerating instead of walking all indices for (P i = fromIndex; i < toIndex; i++) { - if (!TryTemplatedGetItem(pArr, i, &element, scriptContext, !includesAlgorithm)) + if (!TryTemplatedGetItem(pArr, i, &element, scriptContext, !includesAlgorithm)) { if (doUndefinedSearch) { @@ -4259,7 +4260,7 @@ using namespace Js; int32 JavascriptArray::HeadSegmentIndexOfHelper(Var search, uint32 &fromIndex, uint32 toIndex, bool includesAlgorithm, ScriptContext * scriptContext) { - Assert(Is(GetTypeId()) && !JavascriptNativeArray::Is(GetTypeId())); + Assert(IsNonES5Array(GetTypeId()) && !JavascriptNativeArray::Is(GetTypeId())); if (!HasNoMissingValues() || fromIndex >= GetHead()->length) { @@ -4531,7 +4532,7 @@ using namespace Js; JS_REENTRANCY_LOCK(jsReentLock, scriptContext->GetThreadContext()); SETOBJECT_FOR_MUTATION(jsReentLock, thisArg); - JavascriptArray * arr = JavascriptOperators::TryFromVar(thisArg); + JavascriptArray * arr = JavascriptArray::TryVarToNonES5Array(thisArg); JavascriptProxy * proxy = JavascriptOperators::TryFromVar(thisArg); bool isArray = arr && (scriptContext == arr->GetScriptContext()); bool isProxy = proxy && (scriptContext == proxy->GetScriptContext()); @@ -4583,17 +4584,17 @@ using namespace Js; JS_REENTRANT(jsReentLock, res = JoinArrayHelper(arr, separator, scriptContext)); break; case Js::TypeIds_NativeIntArray: - JS_REENTRANT(jsReentLock, res = JoinArrayHelper(JavascriptNativeIntArray::UnsafeFromVar(arr), separator, scriptContext)); + JS_REENTRANT(jsReentLock, res = JoinArrayHelper(UnsafeVarTo(arr), separator, scriptContext)); break; case Js::TypeIds_NativeFloatArray: - JS_REENTRANT(jsReentLock, res = JoinArrayHelper(JavascriptNativeFloatArray::UnsafeFromVar(arr), separator, scriptContext)); + JS_REENTRANT(jsReentLock, res = JoinArrayHelper(UnsafeVarTo(arr), separator, scriptContext)); break; } } - else if (RecyclableObject::Is(thisArg)) + else if (VarIs(thisArg)) { - JS_REENTRANT(jsReentLock, res = JoinOtherHelper(RecyclableObject::FromVar(thisArg), separator, scriptContext)); + JS_REENTRANT(jsReentLock, res = JoinOtherHelper(VarTo(thisArg), separator, scriptContext)); } else { @@ -4658,7 +4659,7 @@ using namespace Js; cs->Append(separator); } - JS_REENTRANT(jsReentLock, gotItem = TryTemplatedGetItem(arr, i, &item, scriptContext)); + JS_REENTRANT(jsReentLock, gotItem = TryTemplatedGetItem(arr, i, &item, scriptContext)); if (gotItem) { JS_REENTRANT(jsReentLock, cs->Append(JavascriptArray::JoinToString(item, scriptContext))); @@ -4684,7 +4685,7 @@ using namespace Js; { JS_REENTRANT(jsReentLock, res = JavascriptArray::JoinToString(item, scriptContext)); } - JS_REENTRANT(jsReentLock, gotItem = TryTemplatedGetItem(arr, 1u, &item, scriptContext)); + JS_REENTRANT(jsReentLock, gotItem = TryTemplatedGetItem(arr, 1u, &item, scriptContext)); if (gotItem) { JS_REENTRANT(jsReentLock, JavascriptString *const itemString = JavascriptArray::JoinToString(item, scriptContext)); @@ -4838,9 +4839,9 @@ using namespace Js; } // Side effects (such as defining a property in a ToPrimitive call) during evaluation of fromIndex argument may convert the array to an ES5 array. - if (pArr && !JavascriptArray::Is(obj)) + if (pArr && !JavascriptArray::IsNonES5Array(obj)) { - AssertOrFailFastMsg(ES5Array::Is(obj), "The array should have been converted to an ES5Array"); + AssertOrFailFastMsg(VarIs(obj), "The array should have been converted to an ES5Array"); pArr = nullptr; } @@ -4851,9 +4852,9 @@ using namespace Js; case Js::TypeIds_Array: JS_REENTRANT_UNLOCK(jsReentLock, return LastIndexOfHelper(pArr, search, fromIndex, scriptContext)); case Js::TypeIds_NativeIntArray: - JS_REENTRANT_UNLOCK(jsReentLock, return LastIndexOfHelper(JavascriptNativeIntArray::UnsafeFromVar(pArr), search, fromIndex, scriptContext)); + JS_REENTRANT_UNLOCK(jsReentLock, return LastIndexOfHelper(UnsafeVarTo(pArr), search, fromIndex, scriptContext)); case Js::TypeIds_NativeFloatArray: - JS_REENTRANT_UNLOCK(jsReentLock, return LastIndexOfHelper(JavascriptNativeFloatArray::UnsafeFromVar(pArr), search, fromIndex, scriptContext)); + JS_REENTRANT_UNLOCK(jsReentLock, return LastIndexOfHelper(UnsafeVarTo(pArr), search, fromIndex, scriptContext)); default: AssertMsg(FALSE, "invalid array typeid"); JS_REENTRANT_UNLOCK(jsReentLock, return LastIndexOfHelper(pArr, search, fromIndex, scriptContext)); @@ -4940,7 +4941,7 @@ using namespace Js; { uint32 index = end - i; - if (!TryTemplatedGetItem(pArr, index, &element, scriptContext)) + if (!TryTemplatedGetItem(pArr, index, &element, scriptContext)) { continue; } @@ -4967,15 +4968,22 @@ using namespace Js; * PopWithNoDst * - For pop calls that do not return a value, we only need to decrement the length of the array. */ - void JavascriptNativeArray::PopWithNoDst(Var nativeArray) + void JavascriptNativeArray::PopWithNoDst(ScriptContext* scriptContext, Var nativeArray) { - JIT_HELPER_NOT_REENTRANT_NOLOCK_HEADER(Array_NativePopWithNoDst); - Assert(JavascriptNativeArray::Is(nativeArray)); - JavascriptArray * arr = JavascriptArray::FromVar(nativeArray); + JIT_HELPER_REENTRANT_HEADER(Array_NativePopWithNoDst); + Assert(VarIs(nativeArray)); + JavascriptArray * arr = VarTo(nativeArray); // we will bailout on length 0 Assert(arr->GetLength() != 0); + // Check for SparseArray and also has array in prototype chain + if (JavascriptArray::HasAnyES5ArrayInPrototypeChain(arr, false)) { + // Pop (walk chain) and discard the result + EntryPopJavascriptArray(scriptContext, arr); + return; + } + uint32 index = arr->GetLength() - 1; arr->SetLength(index); JIT_HELPER_END(Array_NativePopWithNoDst); @@ -4992,8 +5000,8 @@ using namespace Js; int32 JavascriptNativeIntArray::Pop(ScriptContext * scriptContext, Var object) { JIT_HELPER_NOT_REENTRANT_HEADER(Array_NativeIntPop, reentrancylock, scriptContext->GetThreadContext()); - Assert(JavascriptNativeIntArray::Is(object)); - JavascriptNativeIntArray * arr = JavascriptNativeIntArray::FromVar(object); + Assert(VarIs(object)); + JavascriptNativeIntArray * arr = VarTo(object); Assert(arr->GetLength() != 0); @@ -5006,6 +5014,7 @@ using namespace Js; { arr->SetLength(index); } + return element; JIT_HELPER_END(Array_NativeIntPop); } @@ -5021,8 +5030,8 @@ using namespace Js; double JavascriptNativeFloatArray::Pop(ScriptContext * scriptContext, Var object) { JIT_HELPER_NOT_REENTRANT_HEADER(Array_NativeFloatPop, reentrancylock, scriptContext->GetThreadContext()); - Assert(JavascriptNativeFloatArray::Is(object)); - JavascriptNativeFloatArray * arr = JavascriptNativeFloatArray::FromVar(object); + Assert(VarIs(object)); + JavascriptNativeFloatArray * arr = VarTo(object); Assert(arr->GetLength() != 0); @@ -5047,9 +5056,9 @@ using namespace Js; Var JavascriptArray::Pop(ScriptContext * scriptContext, Var object) { JIT_HELPER_REENTRANT_HEADER(Array_VarPop); - if (JavascriptArray::Is(object)) + if (JavascriptArray::IsNonES5Array(object)) { - return EntryPopJavascriptArray(scriptContext, JavascriptArray::FromVar(object)); + return EntryPopJavascriptArray(scriptContext, VarTo(object)); } else { @@ -5156,9 +5165,9 @@ using namespace Js; JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NullOrUndefined, _u("Array.prototype.pop")); } - if (JavascriptArray::Is(args[0])) + if (JavascriptArray::IsNonES5Array(args[0])) { - JS_REENTRANT_UNLOCK(jsReentLock, return EntryPopJavascriptArray(scriptContext, JavascriptArray::FromVar(args.Values[0]))); + JS_REENTRANT_UNLOCK(jsReentLock, return EntryPopJavascriptArray(scriptContext, VarTo(args.Values[0]))); } else { @@ -5176,26 +5185,34 @@ using namespace Js; { JIT_HELPER_REENTRANT_HEADER(Array_NativeIntPush); JIT_HELPER_SAME_ATTRIBUTES(Array_NativeIntPush, Array_VarPush); - // Handle non crossSite native int arrays here length within MaxArrayLength. - // JavascriptArray::Push will handle other cases. - if (JavascriptNativeIntArray::IsNonCrossSite(array)) + + // Fast path for case where `array` is a same-site JavascriptNativeIntArray + // instance with a length less than MaxArrayLength + if (VarIs(array) && + VirtualTableInfo::HasVirtualTable(array)) { - JavascriptNativeIntArray * nativeIntArray = JavascriptNativeIntArray::UnsafeFromVar(array); + auto* nativeIntArray = UnsafeVarTo(array); + if (JavascriptArray::HasAnyES5ArrayInPrototypeChain(nativeIntArray, true)) + { + Var args[2]; + args[0] = array; + args[1] = JavascriptNumber::ToVar(value, scriptContext); + + return EntryPushNonJavascriptArray(scriptContext, args, 2); + } Assert(!nativeIntArray->IsCrossSiteObject()); uint32 n = nativeIntArray->length; - - if(n < JavascriptArray::MaxArrayLength) + if (n < JavascriptArray::MaxArrayLength) { nativeIntArray->SetItem(n, value); - n++; - AssertMsg(n == nativeIntArray->length, "Wrong update to the length of the native Int array"); - return JavascriptNumber::ToVar(n, scriptContext); } } + return JavascriptArray::Push(scriptContext, array, JavascriptNumber::ToVar(value, scriptContext)); + JIT_HELPER_END(Array_NativeIntPush); } @@ -5204,30 +5221,38 @@ using namespace Js; * Pushes Float element in a native Int Array. * We call the generic Push, if the array is not native Float or we have a really big array. */ - Var JavascriptNativeFloatArray::Push(ScriptContext * scriptContext, Var * array, double value) + Var JavascriptNativeFloatArray::Push(ScriptContext * scriptContext, Var array, double value) { JIT_HELPER_REENTRANT_HEADER(Array_NativeFloatPush); JIT_HELPER_SAME_ATTRIBUTES(Array_NativeFloatPush, Array_VarPush); - // Handle non crossSite native int arrays here length within MaxArrayLength. - // JavascriptArray::Push will handle other cases. - if(JavascriptNativeFloatArray::IsNonCrossSite(array)) + + // Fast path for case where `array` is a same-site JavascriptNativeFloatArray + // instance with a length less than MaxArrayLength + if (VarIs(array) && + VirtualTableInfo::HasVirtualTable(array)) { - JavascriptNativeFloatArray * nativeFloatArray = JavascriptNativeFloatArray::UnsafeFromVar(array); + auto* nativeFloatArray = UnsafeVarTo(array); + if (JavascriptArray::HasAnyES5ArrayInPrototypeChain(nativeFloatArray, true)) + { + Var args[2]; + args[0] = array; + args[1] = JavascriptNumber::ToVarNoCheck(value, scriptContext); + + return EntryPushNonJavascriptArray(scriptContext, args, 2); + } Assert(!nativeFloatArray->IsCrossSiteObject()); uint32 n = nativeFloatArray->length; - - if(n < JavascriptArray::MaxArrayLength) + if( n < JavascriptArray::MaxArrayLength) { nativeFloatArray->SetItem(n, value); - n++; - AssertMsg(n == nativeFloatArray->length, "Wrong update to the length of the native Float array"); return JavascriptNumber::ToVar(n, scriptContext); } } return JavascriptArray::Push(scriptContext, array, JavascriptNumber::ToVarNoCheck(value, scriptContext)); + JIT_HELPER_END(Array_NativeFloatPush); } @@ -5238,18 +5263,20 @@ using namespace Js; Var JavascriptArray::Push(ScriptContext * scriptContext, Var object, Var value) { JIT_HELPER_REENTRANT_HEADER(Array_VarPush); + if (JavascriptArray::IsNonES5Array(object)) + { + JavascriptArray* array = UnsafeFromAnyArray(object); + if (!JavascriptArray::HasAnyES5ArrayInPrototypeChain(array, true)) + { + return EntryPushJavascriptArray(scriptContext, array, &value, 1); + } + } + Var args[2]; args[0] = object; args[1] = value; - if (JavascriptArray::Is(object)) - { - return EntryPushJavascriptArray(scriptContext, args, 2); - } - else - { - return EntryPushNonJavascriptArray(scriptContext, args, 2); - } + return EntryPushNonJavascriptArray(scriptContext, args, 2); JIT_HELPER_END(Array_VarPush); } @@ -5370,25 +5397,28 @@ using namespace Js; * Pushes Var element in a Var Array. * Returns the length of the array. */ - Var JavascriptArray::EntryPushJavascriptArray(ScriptContext * scriptContext, Var * args, uint argCount) + Var JavascriptArray::EntryPushJavascriptArray(ScriptContext * scriptContext, JavascriptArray * arr, Var * args, uint argCount) { - JavascriptArray * arr = JavascriptArray::FromAnyArray(args[0]); +#if ENABLE_COPYONACCESS_ARRAY + JavascriptLibrary::CheckAndConvertCopyOnAccessNativeIntArray(arr); +#endif + uint n = arr->length; ThrowTypeErrorOnFailureHelper h(scriptContext, _u("Array.prototype.push")); // Fast Path for one push for small indexes - if (argCount == 2 && n < JavascriptArray::MaxArrayLength) + if (argCount == 1 && n < JavascriptArray::MaxArrayLength) { // Set Item is overridden by CrossSiteObject, so no need to check for IsCrossSiteObject() - h.ThrowTypeErrorOnFailure(arr->SetItem(n, args[1], PropertyOperation_None)); + h.ThrowTypeErrorOnFailure(arr->SetItem(n, args[0], PropertyOperation_None)); return JavascriptNumber::ToVar(n + 1, scriptContext); } // Fast Path for multiple push for small indexes - if (JavascriptArray::MaxArrayLength - argCount + 1 > n && JavascriptArray::IsVarArray(arr) && scriptContext == arr->GetScriptContext()) + if (argCount < JavascriptArray::MaxArrayLength - n && JavascriptArray::IsVarArray(arr) && scriptContext == arr->GetScriptContext()) { uint index; - for (index = 1; index < argCount; ++index, ++n) + for (index = 0; index < argCount; ++index, ++n) { Assert(n != JavascriptArray::MaxArrayLength); // Set Item is overridden by CrossSiteObject, so no need to check for IsCrossSiteObject() @@ -5397,13 +5427,12 @@ using namespace Js; return JavascriptNumber::ToVar(n, scriptContext); } - return EntryPushJavascriptArrayNoFastPath(scriptContext, args, argCount); + return EntryPushJavascriptArrayNoFastPath(scriptContext, arr, args, argCount); } - Var JavascriptArray::EntryPushJavascriptArrayNoFastPath(ScriptContext * scriptContext, Var * args, uint argCount) + Var JavascriptArray::EntryPushJavascriptArrayNoFastPath(ScriptContext * scriptContext, JavascriptArray* arr, Var * args, uint argCount) { JS_REENTRANCY_LOCK(jsReentLock, scriptContext->GetThreadContext()); - JavascriptArray * arr = JavascriptArray::FromAnyArray(args[0]); SETOBJECT_FOR_MUTATION(jsReentLock, arr); uint n = arr->length; @@ -5411,7 +5440,7 @@ using namespace Js; // First handle "small" indices. uint index; - for (index = 1; index < argCount && n < JavascriptArray::MaxArrayLength; ++index, ++n) + for (index = 0; index < argCount && n < JavascriptArray::MaxArrayLength; ++index, ++n) { // Set Item is overridden by CrossSiteObject, so no need to check for IsCrossSiteObject() h.ThrowTypeErrorOnFailure(arr->SetItem(n, args[index], PropertyOperation_None)); @@ -5458,14 +5487,16 @@ using namespace Js; JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NullOrUndefined, _u("Array.prototype.push")); } - if (JavascriptArray::Is(args[0])) - { - return EntryPushJavascriptArray(scriptContext, args.Values, args.Info.Count); - } - else + if (JavascriptArray::IsNonES5Array(args[0])) { - return EntryPushNonJavascriptArray(scriptContext, args.Values, args.Info.Count); + JavascriptArray* array = UnsafeFromAnyArray(args[0]); + if (!JavascriptArray::HasAnyES5ArrayInPrototypeChain(array, true)) + { + return EntryPushJavascriptArray(scriptContext, array, &(args.Values[1]), args.Info.Count - 1); + } } + + return EntryPushNonJavascriptArray(scriptContext, args.Values, args.Info.Count); } template @@ -5528,7 +5559,6 @@ using namespace Js; { JS_REENTRANT_UNLOCK(jsReentLock, return JavascriptArray::ReverseHelper(pArr, nullptr, obj, length.GetSmallIndex(), scriptContext)); } - Assert(pArr == nullptr || length.IsUint32Max()); // if pArr is not null lets make sure length is safe to cast, which will only happen if length is a uint32max JS_REENTRANT_UNLOCK(jsReentLock, return JavascriptArray::ReverseHelper(pArr, nullptr, obj, length.GetBigIndex(), scriptContext)); JIT_HELPER_END(Array_Reverse); @@ -5553,7 +5583,7 @@ using namespace Js; RecyclableObject* protoObj = prototype; if (!(DynamicObject::IsAnyArray(protoObj) || JavascriptOperators::IsObject(protoObj)) - || JavascriptProxy::Is(protoObj) + || VarIs(protoObj) || protoObj->IsExternal()) { hasAnyES5Array = true; @@ -5562,7 +5592,7 @@ using namespace Js; if (DynamicObject::IsAnyArray(protoObj)) { - if (ES5Array::Is(protoObj)) + if (VarIs(protoObj)) { hasAnyES5Array = true; break; @@ -5570,9 +5600,9 @@ using namespace Js; } else if (DynamicType::Is(protoObj->GetTypeId())) { - DynamicObject* dynobj = DynamicObject::UnsafeFromVar(protoObj); + DynamicObject* dynobj = UnsafeVarTo(protoObj); ArrayObject* objectArray = dynobj->GetObjectArray(); - if (objectArray != nullptr && ES5Array::Is(objectArray)) + if (objectArray != nullptr && VarIs(objectArray)) { hasAnyES5Array = true; break; @@ -5608,9 +5638,9 @@ using namespace Js; } // If we came from Array.prototype.map and source object is not a JavascriptArray, source could be a TypedArray - if (!isTypedArrayEntryPoint && pArr == nullptr && TypedArrayBase::Is(obj)) + if (!isTypedArrayEntryPoint && pArr == nullptr && VarIs(obj)) { - typedArrayBase = TypedArrayBase::UnsafeFromVar(obj); + typedArrayBase = UnsafeVarTo(obj); } ThrowTypeErrorOnFailureHelper h(scriptContext, methodName); @@ -5619,6 +5649,7 @@ using namespace Js; if (useNoSideEffectReverse) { + Assert(length <= JavascriptArray::MaxArrayLength); Recycler * recycler = scriptContext->GetRecycler(); if (length <= 1) @@ -5667,11 +5698,11 @@ using namespace Js; pArr->ClearSegmentMap(); // Just dump the segment map on reverse - if (JavascriptNativeIntArray::Is(pArr)) + if (VarIs(pArr)) { isIntArray = true; } - else if (JavascriptNativeFloatArray::Is(pArr)) + else if (VarIs(pArr)) { isFloatArray = true; } @@ -5769,9 +5800,8 @@ using namespace Js; failFastOnError.Completed(); } - else if (typedArrayBase) + else if (typedArrayBase && length <= JavascriptArray::MaxArrayLength) { - Assert(length <= JavascriptArray::MaxArrayLength); if (typedArrayBase->GetLength() == length) { // If typedArrayBase->length == length then we know that the TypedArray will have all items < length @@ -5970,13 +6000,13 @@ using namespace Js; return res; } - bool useNoSideEffectShift = JavascriptArray::Is(args[0]) - && !JavascriptArray::FromVar(args[0])->IsCrossSiteObject() - && !HasAnyES5ArrayInPrototypeChain(JavascriptArray::UnsafeFromVar(args[0])); + bool useNoSideEffectShift = JavascriptArray::IsNonES5Array(args[0]) + && !VarTo(args[0])->IsCrossSiteObject() + && !HasAnyES5ArrayInPrototypeChain(UnsafeVarTo(args[0])); if (useNoSideEffectShift) { - JavascriptArray * pArr = JavascriptArray::UnsafeFromVar(args[0]); + JavascriptArray * pArr = UnsafeVarTo(args[0]); if (pArr->length == 0) { @@ -6011,15 +6041,15 @@ using namespace Js; bool isIntArray = false; bool isFloatArray = false; - if(JavascriptNativeIntArray::Is(pArr)) + if(VarIs(pArr)) { isIntArray = true; } - else if(JavascriptNativeFloatArray::Is(pArr)) + else if(VarIs(pArr)) { isFloatArray = true; } - + // Code below has potential to throw due to OOM or SO. Just FailFast on those cases AutoDisableInterrupt failFastOnError(scriptContext->GetThreadContext()); @@ -6168,7 +6198,7 @@ using namespace Js; Js::JavascriptNativeIntArray *pnewArr = scriptContext->GetLibrary()->CreateNativeIntArray(len); pnewArr->EnsureHead(); #if ENABLE_PROFILE_INFO - pnewArr->CopyArrayProfileInfo(Js::JavascriptNativeIntArray::UnsafeFromVar(baseArray)); + pnewArr->CopyArrayProfileInfo(Js::UnsafeVarTo(baseArray)); #endif return pnewArr; @@ -6178,7 +6208,7 @@ using namespace Js; Js::JavascriptNativeFloatArray *pnewArr = scriptContext->GetLibrary()->CreateNativeFloatArray(len); pnewArr->EnsureHead(); #if ENABLE_PROFILE_INFO - pnewArr->CopyArrayProfileInfo(Js::JavascriptNativeFloatArray::UnsafeFromVar(baseArray)); + pnewArr->CopyArrayProfileInfo(Js::UnsafeVarTo(baseArray)); #endif return pnewArr; @@ -6357,9 +6387,9 @@ using namespace Js; } // Side effects (such as defining a property in a ToPrimitive call) during evaluation of arguments start or end may convert the array to an ES5 array. - if (pArr && !JavascriptArray::Is(obj)) + if (pArr && !JavascriptArray::IsNonES5Array(obj)) { - AssertOrFailFastMsg(ES5Array::Is(obj), "The array should have been converted to an ES5Array"); + AssertOrFailFastMsg(VarIs(obj), "The array should have been converted to an ES5Array"); pArr = nullptr; } @@ -6369,9 +6399,9 @@ using namespace Js; } // If we came from Array.prototype.slice and source object is not a JavascriptArray, source could be a TypedArray - if (!isTypedArrayEntryPoint && pArr == nullptr && TypedArrayBase::Is(obj)) + if (!isTypedArrayEntryPoint && pArr == nullptr && VarIs(obj)) { - typedArrayBase = TypedArrayBase::UnsafeFromVar(obj); + typedArrayBase = UnsafeVarTo(obj); } // If the entry point is %TypedArray%.prototype.slice or the source object is an Array exotic object we should try to load the constructor property @@ -6385,10 +6415,10 @@ using namespace Js; AssertAndFailFast(pArr == nullptr); AssertOrFailFast(JavascriptOperators::IsConstructor(constructor)); - + bool isDefaultConstructor = constructor == defaultConstructor; JS_REENTRANT(jsReentLock, - newObj = RecyclableObject::FromVar( + newObj = VarTo( JavascriptOperators::NewObjectCreationHelper_ReentrancySafe(constructor, isDefaultConstructor, scriptContext->GetThreadContext(), [=]()->Js::Var { Js::Var constructorArgs[] = { constructor, JavascriptNumber::ToVar(newLenT, scriptContext) }; @@ -6433,7 +6463,7 @@ using namespace Js; else { // If the new object we created is an array, remember that as it will save us time setting properties in the object below - newArr = JavascriptOperators::TryFromVar(newObj); + newArr = JavascriptArray::TryVarToNonES5Array(newObj); if (newArr) { #if ENABLE_COPYONACCESS_ARRAY @@ -6456,9 +6486,9 @@ using namespace Js; // The ArraySpeciesCreate call above could have converted the source array into an ES5Array. If this happens // we will process the array elements like an ES5Array. - if (pArr && !JavascriptArray::Is(obj)) + if (pArr && !JavascriptArray::IsNonES5Array(obj)) { - AssertOrFailFastMsg(ES5Array::Is(obj), "The array should have been converted to an ES5Array"); + AssertOrFailFastMsg(VarIs(obj), "The array should have been converted to an ES5Array"); pArr = nullptr; } @@ -6493,11 +6523,11 @@ using namespace Js; { if (isIntArray) { - JS_REENTRANT(jsReentLock, CopyNativeIntArrayElements(JavascriptNativeIntArray::FromVar(newArr), 0, JavascriptNativeIntArray::FromVar(pArr), start, start + newLen)); + JS_REENTRANT(jsReentLock, CopyNativeIntArrayElements(VarTo(newArr), 0, VarTo(pArr), start, start + newLen)); } else if (isFloatArray) { - JS_REENTRANT(jsReentLock, CopyNativeFloatArrayElements(JavascriptNativeFloatArray::FromVar(newArr), 0, JavascriptNativeFloatArray::FromVar(pArr), start, start + newLen)); + JS_REENTRANT(jsReentLock, CopyNativeFloatArrayElements(VarTo(newArr), 0, VarTo(pArr), start, start + newLen)); } else { @@ -6521,9 +6551,9 @@ using namespace Js; // Side-effects in the prototype lookup may have changed the source array into an ES5Array. If this happens // we will process the rest of the array elements like an ES5Array. - if (!JavascriptArray::Is(obj)) + if (!JavascriptArray::IsNonES5Array(obj)) { - AssertOrFailFastMsg(ES5Array::Is(obj), "The array should have been converted to an ES5Array"); + AssertOrFailFastMsg(VarIs(obj), "The array should have been converted to an ES5Array"); JS_REENTRANT_UNLOCK(jsReentLock, return JavascriptArray::SliceObjectHelper(obj, start, i + 1, newArr, newObj, newLen, scriptContext)); } } @@ -6546,9 +6576,9 @@ using namespace Js; // Side-effects in the prototype lookup may have changed the source array into an ES5Array. If this happens // we will process the rest of the array elements like an ES5Array. - if (!JavascriptArray::Is(obj)) + if (!JavascriptArray::IsNonES5Array(obj)) { - AssertOrFailFastMsg(ES5Array::Is(obj), "The array should have been converted to an ES5Array"); + AssertOrFailFastMsg(VarIs(obj), "The array should have been converted to an ES5Array"); JS_REENTRANT_UNLOCK(jsReentLock, return JavascriptArray::SliceObjectHelper(obj, start, i + 1, newArr, newObj, newLen, scriptContext)); } } @@ -6556,7 +6586,7 @@ using namespace Js; } else if (typedArrayBase) { - AssertAndFailFast(TypedArrayBase::Is(typedArrayBase)); + AssertAndFailFast(VarIsCorrectType(typedArrayBase)); // Source is a TypedArray, we must have created the return object via a call to constructor, but newObj may not be a TypedArray (or an array either) TypedArrayBase* newTypedArray = JavascriptOperators::TryFromVar(newObj); @@ -6600,7 +6630,7 @@ using namespace Js; } #ifdef VALIDATE_ARRAY - JavascriptArray * jsArr = JavascriptOperators::TryFromVar(newObj); + JavascriptArray * jsArr = JavascriptArray::TryVarToNonES5Array(newObj); if (jsArr) { jsArr->ValidateArray(); @@ -6636,7 +6666,7 @@ using namespace Js; JavascriptOperators::SetProperty(newObj, newObj, Js::PropertyIds::length, JavascriptNumber::ToVar(newLen, scriptContext), scriptContext, PropertyOperation_ThrowIfNotExtensible)); #ifdef VALIDATE_ARRAY - JavascriptArray * jsArr = JavascriptOperators::TryFromVar(newObj); + JavascriptArray * jsArr = JavascriptArray::TryVarToNonES5Array(newObj); if (jsArr) { jsArr->ValidateArray(); @@ -6646,489 +6676,422 @@ using namespace Js; return newObj; } - struct CompareVarsInfo + // String Item struct, used for Array.prototype.sort without a compare Function + // Spec requires that comparisons are done using a string-comparison + // We convert the array in advance into pairs of values and strings + // This reduces the total number of conversions needed + struct StringItem { - ScriptContext* scriptContext; - RecyclableObject* compFn; + Field(Var) Value; + Field(JavascriptString*) StringValue; }; - int __cdecl compareVars(void* cvInfoV, const void* aRef, const void* bRef) + // Comparison method used in Array.prototype.sort when no comparison function was provided + bool stringCompare(JavascriptArray::CompareVarsInfo* cvInfo, const void* aRef, const void* bRef) + { + const StringItem* item1 = static_cast(aRef); + const StringItem* item2 = static_cast(bRef); + + return JavascriptString::strcmp(item1->StringValue, item2->StringValue) < 0; + } + + // Comparison method used in Array.prototype.sort with provided comparison function + // from a different context to the .sort call + bool compareVarsCrossContext(JavascriptArray::CompareVarsInfo* cvInfo, const void* aRef, const void* bRef) { - CompareVarsInfo* cvInfo=(CompareVarsInfo*)cvInfoV; - ScriptContext* requestContext=cvInfo->scriptContext; RecyclableObject* compFn=cvInfo->compFn; AssertMsg(*(Var*)aRef, "No null expected in sort"); AssertMsg(*(Var*)bRef, "No null expected in sort"); - if (compFn != nullptr) + ScriptContext* scriptContext = compFn->GetScriptContext(); + ThreadContext* threadContext = scriptContext->GetThreadContext(); + Var undefined = scriptContext->GetLibrary()->GetUndefined(); + Var retVal; + + Var leftVar = CrossSite::MarshalVar(scriptContext, *(Var*)aRef); + Var rightVar = CrossSite::MarshalVar(scriptContext, *(Var*)bRef); + BEGIN_SAFE_REENTRANT_CALL(threadContext) { - ScriptContext* scriptContext = compFn->GetScriptContext(); - ThreadContext* threadContext = scriptContext->GetThreadContext(); - // The correct flag value is CallFlags_Value but we pass CallFlags_None in compat modes - CallFlags flags = CallFlags_Value; - Var undefined = scriptContext->GetLibrary()->GetUndefined(); - Var retVal; - if (requestContext != scriptContext) + retVal = CALL_FUNCTION(threadContext, compFn, CallInfo(CallFlags_Value, 3), undefined, leftVar, rightVar); + } + END_SAFE_REENTRANT_CALL + + if (TaggedInt::Is(retVal)) + { + return TaggedInt::ToInt32(retVal) < 0; + } + double dblResult; + if (JavascriptNumber::Is_NoTaggedIntCheck(retVal)) + { + dblResult = JavascriptNumber::GetValue(retVal); + } + else + { + dblResult = JavascriptConversion::ToNumber_Full(retVal, scriptContext); + } + return dblResult < 0; + } + + // Comparison method used in Array.prototype.sort with provided comparison function + // from same context as .sort call + bool compareVars(JavascriptArray::CompareVarsInfo* cvInfo, const void* aRef, const void* bRef) + { + RecyclableObject* compFn=cvInfo->compFn; + + AssertMsg(*(Var*)aRef, "No null expected in sort"); + AssertMsg(*(Var*)bRef, "No null expected in sort"); + + ScriptContext* scriptContext = cvInfo->scriptContext; + ThreadContext* threadContext = scriptContext->GetThreadContext(); + Var undefined = scriptContext->GetLibrary()->GetUndefined(); + Var retVal; + + BEGIN_SAFE_REENTRANT_CALL(threadContext) + { + retVal = CALL_FUNCTION(scriptContext->GetThreadContext(), compFn, CallInfo(CallFlags_Value, 3), undefined, *(Var*)aRef, *(Var*)bRef); + } + END_SAFE_REENTRANT_CALL + + if (TaggedInt::Is(retVal)) + { + return TaggedInt::ToInt32(retVal) < 0; + } + double dblResult; + if (JavascriptNumber::Is_NoTaggedIntCheck(retVal)) + { + dblResult = JavascriptNumber::GetValue(retVal); + } + else + { + dblResult = JavascriptConversion::ToNumber_Full(retVal, scriptContext); + } + return dblResult < 0; + } + + // Sorting Algorithm used for short arrays + template + void JavascriptArray::InsertionSort(T* list, uint32 length, JavascriptArray::CompareVarsInfo* cvInfo) + { + bool (*compareType)(JavascriptArray::CompareVarsInfo*, const void*, const void*) = cvInfo->compareType; + uint32 sortedCount = 1, lowerBound = 0, insertPoint = 0, upperBound = 0; + T item; + while (sortedCount < length) + { + item = list[sortedCount]; + upperBound = sortedCount; + insertPoint = sortedCount - 1; // this lets us check for already ordered first + lowerBound = 0; + for (;;) { - Var leftVar = CrossSite::MarshalVar(scriptContext, *(Var*)aRef); - Var rightVar = CrossSite::MarshalVar(scriptContext, *(Var*)bRef); - BEGIN_SAFE_REENTRANT_CALL(threadContext) + if (compareType (cvInfo, &item, &list[insertPoint]) ) { - retVal = CALL_FUNCTION(threadContext, compFn, CallInfo(flags, 3), undefined, leftVar, rightVar); + upperBound = insertPoint; } - END_SAFE_REENTRANT_CALL - } - else - { - BEGIN_SAFE_REENTRANT_CALL(threadContext) + else { - retVal = CALL_FUNCTION(scriptContext->GetThreadContext(), compFn, CallInfo(flags, 3), undefined, *(Var*)aRef, *(Var*)bRef); + lowerBound = insertPoint + 1; } - END_SAFE_REENTRANT_CALL - } - - if (TaggedInt::Is(retVal)) - { - return TaggedInt::ToInt32(retVal); - } - double dblResult; - if (JavascriptNumber::Is_NoTaggedIntCheck(retVal)) - { - dblResult = JavascriptNumber::GetValue(retVal); - } - else - { - dblResult = JavascriptConversion::ToNumber_Full(retVal, scriptContext); + if (lowerBound >= upperBound) + { + break; + } + insertPoint = lowerBound + ((upperBound - lowerBound) / 2); } - if (dblResult < 0) + insertPoint = sortedCount; + while (insertPoint > lowerBound) { - return -1; + list[insertPoint] = list[insertPoint - 1]; + --insertPoint; } - return (dblResult > 0) ? 1 : 0; - } - else - { - JavascriptString* pStr1 = JavascriptConversion::ToString(*(Var*)aRef, requestContext); - JavascriptString* pStr2 = JavascriptConversion::ToString(*(Var*)bRef, requestContext); - - return JavascriptString::strcmp(pStr1, pStr2); + list[lowerBound] = item; + ++sortedCount; } } - static void hybridSort(__inout_ecount(length) Field(Var) *elements, uint32 length, CompareVarsInfo* compareInfo) + // Sorting algorithm for longer arrays + template + void JavascriptArray::MergeSort(T* list, uint32 length, JavascriptArray::CompareVarsInfo* cvInfo, ArenaAllocator* allocator) { - // The cost of memory moves starts to be more expensive than additional comparer calls (given a simple comparer) - // for arrays of more than 512 elements. - if (length > 512) - { - qsort_s(elements, length, compareVars, compareInfo); - return; - } + bool (*compareType)(JavascriptArray::CompareVarsInfo*, const void*, const void*) = cvInfo->compareType; + T* buffer = AnewArray(allocator, T, length); + uint32 bucketSize = 2, lastSize = 1, position = 0, left = 0, mid = 0, right = 0, i = 0, j = 0, k = 0; + uint32 doubleLength = length + length; + T rightElement, leftElement; - for (int i = 1; i < (int)length; i++) + while (bucketSize < doubleLength) { - if (compareVars(compareInfo, elements + i, elements + i - 1) < 0) { - // binary search for the left-most element greater than value: - int first = 0; - int last = i - 1; - while (first <= last) + while (position < length) + { + left = position; + mid = left + lastSize; + + // perform a merge but only if it's necessary + if (mid < length && compareType (cvInfo, &list[mid], &list[mid - 1])) { - int middle = (first + last) / 2; - if (compareVars(compareInfo, elements + i, elements + middle) < 0) + right = position + bucketSize; + right = right < length ? right : length; + i = mid - 1, j = 0, k = mid; + + while (k < right) { - last = middle - 1; + buffer[j++] = list[k++]; } - else + + rightElement = buffer[--j]; + leftElement = list[i]; + + for (;;) { - first = middle + 1; + if (compareType (cvInfo, &rightElement, &leftElement)) + { + list[--k] = leftElement; + if (i > left) + { + leftElement = list[--i]; + } + else + { + list[--k] = rightElement; + break; + } + } + else + { + list[--k] = rightElement; + if (j > 0) + { + rightElement = buffer[--j]; + } + else + { + break; + } + } } - } - // insert value right before first: - Var value = elements[i]; - MoveArray(elements + first + 1, elements + first, (i - first)); - elements[first] = value; + while (j > 0) + { + list[--k] = buffer[--j]; + } + } + position += bucketSize; } + position = 0; + lastSize = bucketSize; + bucketSize *= 2; } } - void JavascriptArray::Sort(RecyclableObject* compFn) + // Set and Get helpers used in JavascriptArray::SortHelper below + // These allow the SortHelper to handle either a row of Var OR a row of StringItem + inline void SortSetHelper(Field(Var)* list, Var item, uint32 index, JsReentLock* jsReentLock, ScriptContext* scriptContext) { - JS_REENTRANCY_LOCK(jsReentLock, this->GetScriptContext()->GetThreadContext()); - - if (length <= 1) - { - return; - } + list[index] = item; + } - SETOBJECT_FOR_MUTATION(jsReentLock, this); + inline void SortSetHelper(StringItem* list, Var item, uint32 index, JsReentLock* jsReentLock, ScriptContext* scriptContext) + { + StringItem current; + current.Value = item; + JsReentLock lock = *jsReentLock; + JS_REENTRANT(lock, current.StringValue = JavascriptConversion::ToString(item, scriptContext)); + list[index] = current; + } - this->EnsureHead(); - ScriptContext* scriptContext = this->GetScriptContext(); - Recycler* recycler = scriptContext->GetRecycler(); + inline Var SortGetHelper(Field(Var)* list, uint32 index) + { + return list[index]; + } - CompareVarsInfo cvInfo; - cvInfo.scriptContext = scriptContext; - cvInfo.compFn = compFn; + inline Var SortGetHelper(StringItem* list, uint32 index) + { + return list[index].Value; + } - Assert(head != nullptr); + // Helper for Array.prototype.sort, + // this implements the majority of #sec-array.prototype.sort from the ECMA2023 + // It is a template function with two paths: + // 1. for user supplied comparison functions (uses a list of Var) + // 2. for the default comparison (uses a list of StringItem) + template + Var JavascriptArray::SortHelper(Var array, JavascriptArray::CompareVarsInfo* cvInfo) + { + ScriptContext* scriptContext = cvInfo->scriptContext; + + JS_REENTRANCY_LOCK(jsReentLock, scriptContext->GetThreadContext()); + SETOBJECT_FOR_MUTATION(jsReentLock, array); - // Just dump the segment map on sort - ClearSegmentMap(); + // Per spec, throw if the 'this' value is not a valid object + RecyclableObject* obj = nullptr; + if (FALSE == JavascriptConversion::ToObject(array, scriptContext, &obj)) + { + JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NullOrUndefined, _u("Array.prototype.sort")); + } - uint32 countUndefined = 0; - SparseArraySegment* startSeg = SparseArraySegment::From(head); + // Get the Length + JS_REENTRANT(jsReentLock, + uint32 len = JavascriptConversion::ToUInt32(JavascriptOperators::OP_GetLength(obj, scriptContext), scriptContext)); - // Sort may have side effects on the array. Setting a dummy head so that original array is not affected - uint32 saveLength = length; - // that if compare function tries to modify the array it won't AV. - head = const_cast(EmptySegment); - SetFlags(DynamicObjectFlags::None); - this->InvalidateLastUsedSegment(); - length = 0; + // Early return if length = 0 + // Note cannot return early for length = 1 without further checks + // As per spec we must use HasItem() and GetItem() on each element + if (len == 0) + { + return obj; + } - TryFinally([&]() + BEGIN_TEMP_ALLOCATOR(tempAlloc, scriptContext, _u("Runtime")) { - //The array is a continuous array if there is only one segment - if (startSeg->next == nullptr - // If this flag is specified, we want to improve the consistency of our array sorts - // by removing missing values from all kinds of arrays before sorting (done here by - // using the copy-to-one-segment path for array sorts) and by using a stronger sort - // comparer than the spec requires (done in CompareElements). - && !CONFIG_FLAG(StrongArraySort) - ) // Single segment fast path - { - if (compFn != nullptr) - { - countUndefined = startSeg->RemoveUndefined(scriptContext); + // Spec mandates that we copy the array into a 'list' before sorting + // This severely limits the potential for sort side-effects to alter the result + T* list = AnewArray(tempAlloc, T, len); -#ifdef VALIDATE_ARRAY - ValidateSegment(startSeg); -#endif - JS_REENTRANT(jsReentLock, hybridSort(startSeg->elements, startSeg->length, &cvInfo)); - startSeg->CheckLengthvsSize(); - } - else - { - JS_REENTRANT(jsReentLock, countUndefined = sort(startSeg->elements, &startSeg->length, scriptContext)); - } - head = startSeg; - } - else - { - SparseArraySegment* allElements = SparseArraySegment::AllocateSegment(recycler, 0, 0, nullptr); - SparseArraySegment* next = startSeg; + uint32 values = 0; + uint32 undefinedValues = 0; + uint32 holes = 0; + uint32 i = 0, j = 0; - uint32 nextIndex = 0; - // copy all the elements to single segment - while (next) + for (; i < len; ++i) + { + JS_REENTRANT(jsReentLock, BOOL hasItem = JavascriptOperators::HasItem(obj, i)); + + if (hasItem) { - countUndefined += next->RemoveUndefined(scriptContext); - if (next->length != 0) + Var item = nullptr; + JS_REENTRANT(jsReentLock, BOOL gotItem = JavascriptOperators::GetItem(obj, i, &item, scriptContext)); + if (gotItem) + { + TypeId type = JavascriptOperators::GetTypeId(item); + if (type != TypeIds_Undefined) + { + // If T = Var this adds item to the list + // If T = StringItem this creates a StringItem from the Var and adds that to the list + SortSetHelper(list, item, values, &jsReentLock, scriptContext); + values++; + } + else + { + ++undefinedValues; + } + } + else { - allElements = SparseArraySegment::CopySegment(recycler, allElements, nextIndex, next, next->left, next->length); + ++holes; } - next = SparseArraySegment::From(next->next); - nextIndex = allElements->length; - -#ifdef VALIDATE_ARRAY - ValidateSegment(allElements); -#endif - } - - if (compFn != nullptr) - { - JS_REENTRANT(jsReentLock, hybridSort(allElements->elements, allElements->length, &cvInfo)); } else { - JS_REENTRANT(jsReentLock, sort(allElements->elements, &allElements->length, scriptContext)); - allElements->CheckLengthvsSize(); + ++holes; } + } - head = allElements; - head->next = nullptr; + // Call the appropriate Sorting Algorithm + // Insertion sort uses less memory and is quicker on short arrays but gets less efficient as arrays get longer + if (values < 512) + { + JS_REENTRANT(jsReentLock, JavascriptArray::InsertionSort(list, values, cvInfo)); } - }, - [&](bool hasException) - { - length = saveLength; - ClearSegmentMap(); // Dump the segmentMap again in case user compare function rebuilds it - if (hasException) + else { - // The current array might have affected due to callbacks. As we have got the exception we should be resetting the missing value. - SetHasNoMissingValues(false); - head = startSeg; - this->InvalidateLastUsedSegment(); + JS_REENTRANT(jsReentLock, JavascriptArray::MergeSort(list, values, cvInfo, tempAlloc)); } - }); -#if DEBUG - { - uint32 countNull = 0; - uint32 index = head->length - 1; - while (countNull < head->length) + // Write the sorted data back to the original array + // Undefined values and holes are placed at the end + for (i = 0; i < values; ++i) { - if (SparseArraySegment::From(head)->elements[index] != NULL) - { - break; - } - index--; - countNull++; + JS_REENTRANT(jsReentLock, JavascriptOperators::SetItem(obj, obj, i, SortGetHelper(list, i), scriptContext, static_cast(PropertyOperation_ThrowIfNonWritable | PropertyOperation_ThrowIfNotExtensible))); } - AssertMsg(countNull == 0, "No null expected at the end"); - } -#endif - - if (countUndefined != 0) - { - // fill undefined at the end - uint32 newLength = head->length + countUndefined; - if (newLength > head->size) + for (; j < undefinedValues; ++j, ++i) { - SparseArraySegmentBase *oldHead = head; - bool isInlineSegment = JavascriptArray::IsInlineSegment(head, this); - head = SparseArraySegment::From(head)->GrowByMin(recycler, newLength - head->size); - if (isInlineSegment) - { - this->ClearElements(oldHead, 0); - } + JS_REENTRANT(jsReentLock, JavascriptOperators::SetItem(obj, obj, i, scriptContext->GetLibrary()->GetUndefined(), scriptContext, static_cast(PropertyOperation_ThrowIfNonWritable | PropertyOperation_ThrowIfNotExtensible))); } - - Var undefined = scriptContext->GetLibrary()->GetUndefined(); - for (uint32 i = head->length; i < newLength; i++) + for (j = 0; j < holes; ++j, ++i) { - SparseArraySegment::From(head)->elements[i] = undefined; + JS_REENTRANT(jsReentLock, JavascriptOperators::DeleteItem(obj, i, PropertyOperation_ThrowOnDeleteIfNotConfig)); } - head->length = newLength; - head->CheckLengthvsSize(); } - SetHasNoMissingValues(); - this->InvalidateLastUsedSegment(); - this->ClearSegmentMap(); + END_TEMP_ALLOCATOR(tempAlloc, scriptContext); -#ifdef VALIDATE_ARRAY - ValidateArray(); -#endif - return; + // if the Array is not just an array-like object but an actual array we clear the Segment map + // optimised access CC generates for arrays that may have been mangled by sorting + if (VarIs(obj)) + { + UnsafeVarTo(obj)->ClearSegmentMap(); + #ifdef VALIDATE_ARRAY + UnsafeVarTo(obj)->ValidateArray(); + #endif + } + + return obj; } - uint32 JavascriptArray::sort(__inout_ecount(*len) Field(Var) *orig, uint32 *len, ScriptContext *scriptContext) + // Entry point for Array.prototype.sort + // Implements the first step of #sec-array.prototype.sort from the ECMA2023 + // Calls JavascriptArray::SortHelper for the remainder of the implementation + Var JavascriptArray::EntrySort(RecyclableObject* function, CallInfo callInfo, ...) { - uint32 count = 0, countUndefined = 0; - Element *elements = RecyclerNewArrayZ(scriptContext->GetRecycler(), Element, *len); - RecyclableObject *undefined = scriptContext->GetLibrary()->GetUndefined(); + PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); - // - // Create the Elements array - // + ARGUMENTS(args, callInfo); + ScriptContext* scriptContext = function->GetScriptContext(); + AUTO_TAG_NATIVE_LIBRARY_ENTRY(function, callInfo, _u("Array.prototype.sort")); + + Assert(!(callInfo.Flags & CallFlags_New)); - for (uint32 i = 0; i < *len; ++i) + AssertMsg(args.Info.Count >= 1, "Should have at least one argument"); + + RecyclableObject* compFn = NULL; + if (args.Info.Count > 1) { - if (!SparseArraySegment::IsMissingItem(&orig[i])) + if (JavascriptConversion::IsCallable(args[1])) { - if (!JavascriptOperators::IsUndefinedObject(orig[i], undefined)) - { - elements[count].Value = orig[i]; - elements[count].StringValue = JavascriptConversion::ToString(orig[i], scriptContext); - - count++; - } - else + compFn = UnsafeVarTo(args[1]); + } + else + { + // Spec mandates that we throw if arg[1] is neither callable nor undefined + if (JavascriptOperators::GetTypeId(args[1]) != TypeIds_Undefined) { - countUndefined++; + JavascriptError::ThrowTypeError(scriptContext, JSERR_FunctionArgument_NeedFunction, _u("Array.prototype.sort")); } } } - if (count > 0) + // CompareVarsInfo struct holds data that will be used by sorting algorithm + JavascriptArray::CompareVarsInfo cvInfo; + cvInfo.scriptContext = scriptContext; + if (compFn != NULL) { - SortElements(elements, 0, count - 1); - - for (uint32 i = 0; i < count; ++i) - { - orig[i] = elements[i].Value; - } - } - - for (uint32 i = count + countUndefined; i < *len; ++i) - { - orig[i] = SparseArraySegment::GetMissingItem(); - } - - *len = count; // set the correct length - return countUndefined; - } - - int __cdecl JavascriptArray::CompareElements(void* context, const void* elem1, const void* elem2) - { - const Element* element1 = static_cast(elem1); - const Element* element2 = static_cast(elem2); - - Assert(element1 != NULL); - Assert(element2 != NULL); - - if (!CONFIG_FLAG(StrongArraySort)) - { - return JavascriptString::strcmp(element1->StringValue, element2->StringValue); + cvInfo.compFn = compFn; + cvInfo.compareType = scriptContext == compFn->GetScriptContext() ? &compareVars : &compareVarsCrossContext; + return JavascriptArray::SortHelper(args[0], &cvInfo); } else { - int str_cmp = JavascriptString::strcmp(element1->StringValue, element2->StringValue); - if (str_cmp != 0) - { - return str_cmp; - } - // If they are equal, we get to a slightly more complex problem. We want to make a very - // predictable sort here, regardless of the structure of the array. To achieve this, we - // need to get an order for every pair of non-identical elements, else there will be an - // identifiable difference between sparse and dense array sorts in some cases. - - // Handle a common set of equivalent nodes first for speed/convenience - if (element1->Value == element2->Value) - { - return 0; - } - - // Easy way to do most remaining cases is to just compare the type ids if they differ. - if (JavascriptOperators::GetTypeId(element1->Value) != JavascriptOperators::GetTypeId(element2->Value)) - { - return JavascriptOperators::GetTypeId(element1->Value) - JavascriptOperators::GetTypeId(element2->Value); - } - - // Further comparisons are possible, but get increasingly complex, and aren't necessary - // for the cases on hand. - return 0; + cvInfo.compFn = nullptr; + cvInfo.compareType = &stringCompare; + return JavascriptArray::SortHelper(args[0], &cvInfo); } } - void JavascriptArray::SortElements(Element* elements, uint32 left, uint32 right) - { - // Note: use write barrier policy of Field(Var) - qsort_s(elements, right - left + 1, CompareElements, this); - } - - Var JavascriptArray::EntrySort(RecyclableObject* function, CallInfo callInfo, ...) + // Typed Array Sort is a helper method to call the correct Sorting algorithm for TypedArray.prototype.sort + // Included in this file in order to instantiate type specific instances of thee algorithms + template + void JavascriptArray::TypedArraySort(T* list, uint32 length, JavascriptArray::CompareVarsInfo* cvInfo, ArenaAllocator* allocator) { - PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); - - ARGUMENTS(args, callInfo); - ScriptContext* scriptContext = function->GetScriptContext(); + ScriptContext* scriptContext = cvInfo->scriptContext; JS_REENTRANCY_LOCK(jsReentLock, scriptContext->GetThreadContext()); - AUTO_TAG_NATIVE_LIBRARY_ENTRY(function, callInfo, _u("Array.prototype.sort")); - Assert(!(callInfo.Flags & CallFlags_New)); - - AssertMsg(args.Info.Count >= 1, "Should have at least one argument"); - - RecyclableObject* compFn = NULL; - if (args.Info.Count > 1) + if (length < 512) { - if (JavascriptConversion::IsCallable(args[1])) - { - compFn = RecyclableObject::FromVar(args[1]); - } - else - { - TypeId typeId = JavascriptOperators::GetTypeId(args[1]); - - // Use default comparer: - // - In ES5 mode if the argument is undefined. - bool useDefaultComparer = typeId == TypeIds_Undefined; - if (!useDefaultComparer) - { - JavascriptError::ThrowTypeError(scriptContext, JSERR_FunctionArgument_NeedFunction, _u("Array.prototype.sort")); - } - } - } - - SETOBJECT_FOR_MUTATION(jsReentLock, args[0]); - - bool useNoSideEffectSort = JavascriptArray::Is(args[0]) - && !JavascriptArray::FromVar(args[0])->IsCrossSiteObject() - && !HasAnyES5ArrayInPrototypeChain(JavascriptArray::UnsafeFromVar(args[0])); - - if (useNoSideEffectSort) - { - JavascriptArray *arr = JavascriptArray::UnsafeFromVar(args[0]); - - if (arr->length <= 1) - { - return args[0]; - } - - uint32 length = arr->length; - - if(arr->IsFillFromPrototypes()) - { - arr->FillFromPrototypes(0, arr->length); // We need find all missing value from [[proto]] object - } - - // As we have already established that the FillFromPrototype should not change the bound of the array. - if (length != arr->length) - { - Js::Throw::FatalInternalError(); - } - - EnsureNonNativeArray(arr); - JS_REENTRANT(jsReentLock, arr->Sort(compFn)); + JS_REENTRANT(jsReentLock, JavascriptArray::InsertionSort(list, length, cvInfo)); } else { - RecyclableObject* pObj = nullptr; - if (FALSE == JavascriptConversion::ToObject(args[0], scriptContext, &pObj)) - { - JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NullOrUndefined, _u("Array.prototype.sort")); - } - JS_REENTRANT(jsReentLock, - uint32 len = JavascriptConversion::ToUInt32(JavascriptOperators::OP_GetLength(pObj, scriptContext), scriptContext)); - JavascriptArray* sortArray = scriptContext->GetLibrary()->CreateArray(len); - sortArray->EnsureHead(); - ThrowTypeErrorOnFailureHelper h(scriptContext, _u("Array.prototype.sort")); - - BEGIN_TEMP_ALLOCATOR(tempAlloc, scriptContext, _u("Runtime")) - { - JsUtil::List* indexList = JsUtil::List::New(tempAlloc); - - for (uint32 i = 0; i < len; i++) - { - Var item; - JS_REENTRANT(jsReentLock, BOOL gotItem = JavascriptOperators::GetItem(pObj, i, &item, scriptContext)); - if (gotItem) - { - indexList->Add(i); - sortArray->DirectSetItemAt(i, item); - } - } - if (indexList->Count() > 0) - { - if (sortArray->length > 1) - { - JS_REENTRANT(jsReentLock, sortArray->FillFromPrototypes(0, sortArray->length)); // We need find all missing value from [[proto]] object - } - JS_REENTRANT(jsReentLock, sortArray->Sort(compFn)); - - uint32 removeIndex = sortArray->head->length; - for (uint32 i = 0; i < removeIndex; i++) - { - AssertMsg(!SparseArraySegment::IsMissingItem(&SparseArraySegment::From(sortArray->head)->elements[i]), "No gaps expected in sorted array"); - JS_REENTRANT(jsReentLock, h.ThrowTypeErrorOnFailure(JavascriptOperators::SetItem(pObj, pObj, i, SparseArraySegment::From(sortArray->head)->elements[i], scriptContext))); - } - for (int i = 0; i < indexList->Count(); i++) - { - uint32 value = indexList->Item(i); - if (value >= removeIndex) - { - JS_REENTRANT(jsReentLock, h.ThrowTypeErrorOnFailure((JavascriptOperators::DeleteItem(pObj, value)))); - } - } - } - - } - END_TEMP_ALLOCATOR(tempAlloc, scriptContext); + JS_REENTRANT(jsReentLock, JavascriptArray::MergeSort(list, length, cvInfo, allocator)); } - return args[0]; } Var JavascriptArray::EntrySplice(RecyclableObject* function, CallInfo callInfo, ...) @@ -7173,9 +7136,9 @@ using namespace Js; } // Side effects (such as defining a property in a ToPrimitive call) during evaluation of arguments start or deleteCount may convert the array to an ES5 array. - if (pArr && !JavascriptArray::Is(pObj)) + if (pArr && !JavascriptArray::IsNonES5Array(pObj)) { - AssertOrFailFastMsg(ES5Array::Is(pObj), "The array should have been converted to an ES5Array"); + AssertOrFailFastMsg(VarIs(pObj), "The array should have been converted to an ES5Array"); pArr = nullptr; } @@ -7510,7 +7473,7 @@ using namespace Js; // insert elements if (insertLen > 0) { - Assert(!JavascriptNativeIntArray::Is(pArr) && !JavascriptNativeFloatArray::Is(pArr)); + Assert(!VarIs(pArr) && !VarIs(pArr)); // InsertPhase SparseArraySegment *segInsert = nullptr; @@ -7610,7 +7573,7 @@ using namespace Js; { pArr = EnsureNonNativeArray(pArr); // If the new object we created is an array, remember that as it will save us time setting properties in the object below - newArr = JavascriptOperators::TryFromVar(newObj); + newArr = JavascriptArray::TryVarToNonES5Array(newObj); if (newArr) { #if ENABLE_COPYONACCESS_ARRAY @@ -7778,7 +7741,7 @@ using namespace Js; } } - pnewArr = JavascriptOperators::TryFromVar(pNewObj); + pnewArr = JavascriptArray::TryVarToNonES5Array(pNewObj); if (pnewArr) { #if ENABLE_COPYONACCESS_ARRAY @@ -7894,7 +7857,7 @@ using namespace Js; if (JavascriptArray::IsDirectAccessArray(args[0])) { - JavascriptArray* arr = JavascriptArray::UnsafeFromVar(args[0]); + JavascriptArray* arr = UnsafeVarTo(args[0]); JS_REENTRANT_UNLOCK(jsReentLock, return ToLocaleString(arr, scriptContext)); } else @@ -8078,13 +8041,13 @@ using namespace Js; } JavascriptArray * pArr = nullptr; - if (JavascriptArray::Is(args[0]) - && !JavascriptArray::FromVar(args[0])->IsCrossSiteObject()) + if (JavascriptArray::IsNonES5Array(args[0]) + && !VarTo(args[0])->IsCrossSiteObject()) { #if ENABLE_COPYONACCESS_ARRAY JavascriptLibrary::CheckAndConvertCopyOnAccessNativeIntArray(args[0]); #endif - pArr = JavascriptArray::FromVar(args[0]); + pArr = VarTo(args[0]); } uint32 unshiftElements = args.Info.Count - 1; @@ -8118,7 +8081,7 @@ using namespace Js; EnsureNonNativeArray(pArr); JS_REENTRANT(jsReentLock, pArr->TruncateToProperties(MaxArrayLength, maxLen)); Assert(pArr->length + unshiftElements == MaxArrayLength); - if (ES5Array::Is(pArr)) + if (VarIs(pArr)) { JS_REENTRANT_UNLOCK(jsReentLock, return UnshiftObjectHelper(args, scriptContext)); } @@ -8130,11 +8093,11 @@ using namespace Js; bool isIntArray = false; bool isFloatArray = false; - if (JavascriptNativeIntArray::Is(pArr)) + if (VarIs(pArr)) { isIntArray = true; } - else if (JavascriptNativeFloatArray::Is(pArr)) + else if (VarIs(pArr)) { isFloatArray = true; } @@ -8242,7 +8205,7 @@ using namespace Js; JS_REENTRANT(jsReentLock, Var join = JavascriptOperators::GetPropertyNoCache(obj, PropertyIds::join, scriptContext)); if (JavascriptConversion::IsCallable(join)) { - RecyclableObject* func = RecyclableObject::FromVar(join); + RecyclableObject* func = VarTo(join); // We need to record implicit call here, because marked the Array.toString as no side effect, // but if we call user code here which may have side effect ThreadContext * threadContext = scriptContext->GetThreadContext(); @@ -8252,9 +8215,7 @@ using namespace Js; // Stack object should have a pre-op bail on implicit call. We shouldn't see them here. Assert(!ThreadContext::IsOnStack(obj)); - // The correct flag value is CallFlags_Value but we pass CallFlags_None in compat modes - CallFlags flags = CallFlags_Value; - return CALL_FUNCTION(threadContext, func, CallInfo(flags, 1), obj); + return CALL_FUNCTION(threadContext, func, CallInfo(CallFlags_Value, 1), obj); })); if(!result) @@ -8339,7 +8300,7 @@ using namespace Js; SETOBJECT_FOR_MUTATION(jsReentLock, arr); uint32 length = 0; - TypedArrayBase * typedArray = JavascriptOperators::TryFromVar(arr); + TypedArrayBase * typedArray = JavascriptOperators::TryFromVar(static_cast(arr)); if (typedArray) { // For a TypedArray use the actual length of the array. @@ -8386,7 +8347,7 @@ using namespace Js; } else { - separator = scriptContext->GetLibrary()->GetCommaSpaceDisplayString(); + separator = scriptContext->GetLibrary()->GetCommaDisplayString(); } for (uint32 i = 1; i < length; i++) @@ -8471,10 +8432,10 @@ using namespace Js; JS_REENTRANT_UNLOCK(jsReentLock, TryGetArrayAndLength(args[0], scriptContext, _u("Array.prototype.find"), &pArr, &obj, &length)); - return JavascriptArray::FindHelper(pArr, nullptr, obj, length, args, scriptContext); + return JavascriptArray::FindHelper(pArr, nullptr, obj, length, args, scriptContext); } - template + template Var JavascriptArray::FindHelper(JavascriptArray* pArr, Js::TypedArrayBase* typedArrayBase, RecyclableObject* obj, int64 length, Arguments& args, ScriptContext* scriptContext) { JS_REENTRANCY_LOCK(jsReentLock, scriptContext->GetThreadContext()); @@ -8493,7 +8454,7 @@ using namespace Js; } } - RecyclableObject* callBackFn = RecyclableObject::FromVar(args[1]); + RecyclableObject* callBackFn = VarTo(args[1]); Var thisArg; if (args.Info.Count > 2) @@ -8506,22 +8467,23 @@ using namespace Js; } // If we came from Array.prototype.find/findIndex and source object is not a JavascriptArray, source could be a TypedArray - if (typedArrayBase == nullptr && pArr == nullptr && TypedArrayBase::Is(obj)) + if (typedArrayBase == nullptr && pArr == nullptr && VarIs(obj)) { - typedArrayBase = TypedArrayBase::UnsafeFromVar(obj); + typedArrayBase = UnsafeVarTo(obj); } - // The correct flag value is CallFlags_Value but we pass CallFlags_None in compat modes CallFlags flags = CallFlags_Value; Var element = nullptr; Var testResult = nullptr; + uint32 loopStart = reversed ? (uint32)length - 1 : 0; + int8 loopDelta = reversed ? -1 : 1; if (pArr) { Var undefined = scriptContext->GetLibrary()->GetUndefined(); Assert(length <= UINT_MAX); - for (uint32 k = 0; k < (uint32)length; k++) + for (uint32 k = loopStart; k < length; k += loopDelta) { element = undefined; JS_REENTRANT(jsReentLock, pArr->DirectGetItemAtFull(k, &element)); @@ -8546,17 +8508,17 @@ using namespace Js; // Side-effects in the callback function may have changed the source array into an ES5Array. If this happens // we will process the rest of the array elements like an ES5Array. - if (!JavascriptArray::Is(obj)) + if (!JavascriptArray::IsNonES5Array(obj)) { - AssertOrFailFastMsg(ES5Array::Is(obj), "The array should have been converted to an ES5Array"); - JS_REENTRANT_UNLOCK(jsReentLock, return JavascriptArray::FindObjectHelper(obj, length, k + 1, callBackFn, thisArg, scriptContext)); + AssertOrFailFastMsg(VarIs(obj), "The array should have been converted to an ES5Array"); + JS_REENTRANT_UNLOCK(jsReentLock, return JavascriptArray::FindObjectHelper(obj, length, k + 1, callBackFn, thisArg, scriptContext)); } } } else if (typedArrayBase) { Assert(length <= UINT_MAX); - for (uint32 k = 0; k < (uint32)length; k++) + for (uint32 k = loopStart; k < length; k+= loopDelta) { // Spec does not ask to call HasItem, so we need to go to visit the whole length @@ -8583,32 +8545,32 @@ using namespace Js; } else { - JS_REENTRANT_UNLOCK(jsReentLock, return JavascriptArray::FindObjectHelper(obj, length, 0u, callBackFn, thisArg, scriptContext)); + JS_REENTRANT_UNLOCK(jsReentLock, return JavascriptArray::FindObjectHelper(obj, length, 0u, callBackFn, thisArg, scriptContext)); } return findIndex ? JavascriptNumber::ToVar(-1, scriptContext) : scriptContext->GetLibrary()->GetUndefined(); } - template + template Var JavascriptArray::FindObjectHelper(RecyclableObject* obj, int64 length, int64 start, RecyclableObject* callBackFn, Var thisArg, ScriptContext* scriptContext) { JS_REENTRANCY_LOCK(jsReentLock, scriptContext->GetThreadContext()); SETOBJECT_FOR_MUTATION(jsReentLock, obj); - // The correct flag value is CallFlags_Value but we pass CallFlags_None in compat modes - CallFlags flags = CallFlags_Value; Var element = nullptr; Var testResult = nullptr; + uint32 loopStart = reversed ? (uint32)length - 1 : (uint32)start; + int8 loopDelta = reversed ? -1 : 1; - for (int64 k = start; k < length; k++) + for (uint32 k = loopStart; k < length; k += loopDelta) { - JS_REENTRANT(jsReentLock, element = JavascriptOperators::GetItem(obj, (uint64)k, scriptContext)); + JS_REENTRANT(jsReentLock, element = JavascriptOperators::GetItem(obj, k, scriptContext)); Var index = JavascriptNumber::ToVar(k, scriptContext); JS_REENTRANT(jsReentLock, BEGIN_SAFE_REENTRANT_CALL(scriptContext->GetThreadContext()) { - testResult = CALL_FUNCTION(scriptContext->GetThreadContext(), callBackFn, CallInfo(flags, 4), thisArg, + testResult = CALL_FUNCTION(scriptContext->GetThreadContext(), callBackFn, CallInfo(CallFlags_Value, 4), thisArg, element, index, obj); @@ -8651,7 +8613,65 @@ using namespace Js; JS_REENTRANT_UNLOCK(jsReentLock, TryGetArrayAndLength(args[0], scriptContext, _u("Array.prototype.findIndex"), &pArr, &obj, &length)); - return JavascriptArray::FindHelper(pArr, nullptr, obj, length, args, scriptContext); + return JavascriptArray::FindHelper(pArr, nullptr, obj, length, args, scriptContext); + } + + ///---------------------------------------------------------------------------- + /// FindLast() calls the given predicate callback on each element of the + /// array, in reversed order, and returns the index of the first element that makes the + /// predicate return true. + ///---------------------------------------------------------------------------- + Var JavascriptArray::EntryFindLast(RecyclableObject* function, CallInfo callInfo, ...) + { + PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); + + ARGUMENTS(args, callInfo); + ScriptContext* scriptContext = function->GetScriptContext(); + JS_REENTRANCY_LOCK(jsReentLock, scriptContext->GetThreadContext()); + + Assert(!(callInfo.Flags & CallFlags_New)); + + if (args.Info.Count == 0) + { + JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NullOrUndefined, _u("Array.prototype.findLast")); + } + + int64 length; + JavascriptArray* pArr = nullptr; + RecyclableObject* obj = nullptr; + + JS_REENTRANT_UNLOCK(jsReentLock, TryGetArrayAndLength(args[0], scriptContext, _u("Array.prototype.findLast"), &pArr, &obj, &length)); + + return JavascriptArray::FindHelper(pArr, nullptr, obj, length, args, scriptContext); + } + + ///---------------------------------------------------------------------------- + /// FindLastIndex() calls the given predicate callback on each element of the + /// array, in reversed order, and returns the index of the first element that makes the + /// predicate return true. + ///---------------------------------------------------------------------------- + Var JavascriptArray::EntryFindLastIndex(RecyclableObject* function, CallInfo callInfo, ...) + { + PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); + + ARGUMENTS(args, callInfo); + ScriptContext* scriptContext = function->GetScriptContext(); + JS_REENTRANCY_LOCK(jsReentLock, scriptContext->GetThreadContext()); + + Assert(!(callInfo.Flags & CallFlags_New)); + + if (args.Info.Count == 0) + { + JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NullOrUndefined, _u("Array.prototype.findLastIndex")); + } + + int64 length; + JavascriptArray* pArr = nullptr; + RecyclableObject* obj = nullptr; + + JS_REENTRANT_UNLOCK(jsReentLock, + TryGetArrayAndLength(args[0], scriptContext, _u("Array.prototype.findLastIndex"), &pArr, &obj, &length)); + return JavascriptArray::FindHelper(pArr, nullptr, obj, length, args, scriptContext); } ///---------------------------------------------------------------------------- @@ -8766,6 +8786,93 @@ using namespace Js; return scriptContext->GetLibrary()->CreateArrayIterator(thisObj, JavascriptArrayIteratorKind::Value)); } + // Relative indexing proposal + // Array.prototype.at(index): https://tc39.es/proposal-relative-indexing-method/#sec-array.prototype.at + // Spec: https://tc39.es/proposal-relative-indexing-method + // Github: https://github.com/tc39/proposal-relative-indexing-method + Var JavascriptArray::EntryAt(RecyclableObject* function, CallInfo callInfo, ...) + { + JIT_HELPER_REENTRANT_HEADER(Array_At); + PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); + + ARGUMENTS(args, callInfo); + ScriptContext* scriptContext = function->GetScriptContext(); + JS_REENTRANCY_LOCK(jsReentLock, scriptContext->GetThreadContext()); + AUTO_TAG_NATIVE_LIBRARY_ENTRY(function, callInfo, _u("Array.prototype.at")); + + Assert(!(callInfo.Flags & CallFlags_New)); + + CHAKRATEL_LANGSTATS_INC_BUILTINCOUNT(Array_Prototype_at); + + if (args.Info.Count == 0) + { + JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NullOrUndefined, _u("Array.prototype.at")); + } + + BigIndex length; + JavascriptArray* pArr = nullptr; + RecyclableObject* obj = nullptr; + + JS_REENTRANT(jsReentLock, TryGetArrayAndLength(args[0], scriptContext, _u("Array.prototype.at"), &pArr, &obj, &length)); + + if (length.IsSmallIndex()) + { + JS_REENTRANT_UNLOCK(jsReentLock, return JavascriptArray::AtHelper(pArr, nullptr, obj, length.GetSmallIndex(), args, scriptContext)); + } + Assert(pArr == nullptr || length.IsUint32Max()); // if pArr is not null lets make sure length is safe to cast, which will only happen if length is a uint32max + JS_REENTRANT_UNLOCK(jsReentLock, return JavascriptArray::AtHelper(pArr, nullptr, obj, length.GetBigIndex(), args, scriptContext)); + JIT_HELPER_END(Array_At); + } + + template + Var JavascriptArray::AtHelper(JavascriptArray* pArr, Js::TypedArrayBase* typedArrayBase, RecyclableObject* obj, T length, Arguments& args, ScriptContext* scriptContext) + { + JS_REENTRANCY_LOCK(jsReentLock, scriptContext->GetThreadContext()); + SETOBJECT_FOR_MUTATION(jsReentLock, pArr); + + // 3. Let relativeIndex be ? ToInteger(index). + int64_t relativeIndex = 0; + + if (args.Info.Count > 1) + { + JS_REENTRANT(jsReentLock, relativeIndex = NumberUtilities::TryToInt64(JavascriptConversion::ToInteger(args[1], scriptContext))); + } + + // 4. If relativeIndex >= 0, then + // a. Let k be relativeIndex. + // 5. Else, + // a. Let k be len + relativeIndex. + int64_t k = relativeIndex; + + if (relativeIndex < 0) + { + k += (int64_t)length; + } + + // 6. If k < 0 or k >= len, then return undefined. + if (k < 0 || k >= (int64_t)length) + { + return scriptContext->GetLibrary()->GetUndefined(); + } + + + if (typedArrayBase) + { + // %typedarray%.prototype.at(index): https://tc39.es/proposal-relative-indexing-method/#sec-array.prototype.at + // 8. Return ? Get(O, ! ToString(k)). + return typedArrayBase->DirectGetItem((uint32_t)k); + } + else + { + Var element; + // 7. Return ? Get(O, ! ToString(k)). + JS_REENTRANT(jsReentLock, element = JavascriptOperators::GetItem(obj, (T)k, scriptContext)); + return element; + } + } + + template Var JavascriptArray::AtHelper(JavascriptArray* pArr, Js::TypedArrayBase* typedArrayBase, RecyclableObject* obj, uint32_t length, Arguments& args, ScriptContext* scriptContext); + Var JavascriptArray::EntryEvery(RecyclableObject* function, CallInfo callInfo, ...) { PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); @@ -8818,7 +8925,7 @@ using namespace Js; } } - RecyclableObject* callBackFn = RecyclableObject::FromVar(args[1]); + RecyclableObject* callBackFn = VarTo(args[1]); Var thisArg = nullptr; @@ -8832,19 +8939,16 @@ using namespace Js; } // If we came from Array.prototype.map and source object is not a JavascriptArray, source could be a TypedArray - if (typedArrayBase == nullptr && pArr == nullptr && TypedArrayBase::Is(obj)) + if (typedArrayBase == nullptr && pArr == nullptr && VarIs(obj)) { - typedArrayBase = TypedArrayBase::UnsafeFromVar(obj); + typedArrayBase = UnsafeVarTo(obj); } Var element = nullptr; Var testResult = nullptr; - // The correct flag value is CallFlags_Value but we pass CallFlags_None in compat modes - CallFlags flags = CallFlags_Value; - if (typedArrayBase) { - AssertAndFailFast(TypedArrayBase::Is(typedArrayBase)); + AssertAndFailFast(VarIsCorrectType(typedArrayBase)); uint32 end = (uint32)min(length, (T)typedArrayBase->GetLength()); for (uint32 k = 0; k < end; k++) @@ -8856,7 +8960,7 @@ using namespace Js; JS_REENTRANT(jsReentLock, BEGIN_SAFE_REENTRANT_CALL(scriptContext->GetThreadContext()) { - testResult = CALL_FUNCTION(scriptContext->GetThreadContext(), callBackFn, CallInfo(flags, 4), thisArg, + testResult = CALL_FUNCTION(scriptContext->GetThreadContext(), callBackFn, CallInfo(CallFlags_Value, 4), thisArg, element, JavascriptNumber::ToVar(k, scriptContext), typedArrayBase); @@ -8884,8 +8988,6 @@ using namespace Js; JS_REENTRANCY_LOCK(jsReentLock, scriptContext->GetThreadContext()); SETOBJECT_FOR_MUTATION(jsReentLock, obj); - // The correct flag value is CallFlags_Value but we pass CallFlags_None in compat modes - CallFlags flags = CallFlags_Value; Var element = nullptr; Var testResult = nullptr; @@ -8899,7 +9001,7 @@ using namespace Js; element = JavascriptOperators::GetItem(obj, k, scriptContext); BEGIN_SAFE_REENTRANT_CALL(scriptContext->GetThreadContext()) { - testResult = CALL_FUNCTION(scriptContext->GetThreadContext(), callBackFn, CallInfo(flags, 4), thisArg, + testResult = CALL_FUNCTION(scriptContext->GetThreadContext(), callBackFn, CallInfo(CallFlags_Value, 4), thisArg, element, JavascriptNumber::ToVar(k, scriptContext), obj); @@ -8971,7 +9073,7 @@ using namespace Js; } } - RecyclableObject* callBackFn = RecyclableObject::FromVar(args[1]); + RecyclableObject* callBackFn = VarTo(args[1]); Var thisArg = nullptr; if (args.Info.Count > 2) @@ -8984,19 +9086,17 @@ using namespace Js; } // If we came from Array.prototype.some and source object is not a JavascriptArray, source could be a TypedArray - if (typedArrayBase == nullptr && pArr == nullptr && TypedArrayBase::Is(obj)) + if (typedArrayBase == nullptr && pArr == nullptr && VarIs(obj)) { - typedArrayBase = TypedArrayBase::UnsafeFromVar(obj); + typedArrayBase = UnsafeVarTo(obj); } - // The correct flag value is CallFlags_Value but we pass CallFlags_None in compat modes - CallFlags flags = CallFlags_Value; Var element = nullptr; Var testResult = nullptr; if (typedArrayBase) { - AssertAndFailFast(TypedArrayBase::Is(typedArrayBase)); + AssertAndFailFast(VarIsCorrectType(typedArrayBase)); uint32 end = (uint32)min(length, (T)typedArrayBase->GetLength()); for (uint32 k = 0; k < end; k++) @@ -9005,10 +9105,10 @@ using namespace Js; element = typedArrayBase->DirectGetItem(k); - JS_REENTRANT_UNLOCK(jsReentLock, + JS_REENTRANT_UNLOCK(jsReentLock, BEGIN_SAFE_REENTRANT_CALL(scriptContext->GetThreadContext()) { - testResult = CALL_FUNCTION(scriptContext->GetThreadContext(), callBackFn, CallInfo(flags, 4), thisArg, + testResult = CALL_FUNCTION(scriptContext->GetThreadContext(), callBackFn, CallInfo(CallFlags_Value, 4), thisArg, element, JavascriptNumber::ToVar(k, scriptContext), typedArrayBase); @@ -9036,8 +9136,6 @@ using namespace Js; JS_REENTRANCY_LOCK(jsReentLock, scriptContext->GetThreadContext()); SETOBJECT_FOR_MUTATION(jsReentLock, obj); - // The correct flag value is CallFlags_Value but we pass CallFlags_None in compat modes - CallFlags flags = CallFlags_Value; Var element = nullptr; Var testResult = nullptr; @@ -9050,7 +9148,7 @@ using namespace Js; element = JavascriptOperators::GetItem(obj, k, scriptContext); BEGIN_SAFE_REENTRANT_CALL(scriptContext->GetThreadContext()) { - testResult = CALL_FUNCTION(scriptContext->GetThreadContext(), callBackFn, CallInfo(flags, 4), thisArg, + testResult = CALL_FUNCTION(scriptContext->GetThreadContext(), callBackFn, CallInfo(CallFlags_Value, 4), thisArg, element, JavascriptNumber::ToVar(k, scriptContext), obj); @@ -9068,6 +9166,7 @@ using namespace Js; return scriptContext->GetLibrary()->GetFalse(); } + // There is a Javascript built-in for forEach Var JavascriptArray::EntryForEach(RecyclableObject* function, CallInfo callInfo, ...) { PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); @@ -9100,7 +9199,7 @@ using namespace Js; { JavascriptError::ThrowTypeError(scriptContext, JSERR_FunctionArgument_NeedFunction, _u("Array.prototype.forEach")); } - callBackFn = RecyclableObject::FromVar(args[1]); + callBackFn = VarTo(args[1]); if (args.Info.Count > 2) { @@ -9111,7 +9210,6 @@ using namespace Js; thisArg = scriptContext->GetLibrary()->GetUndefined(); } - // The correct flag value is CallFlags_Value but we pass CallFlags_None in compat modes CallFlags flags = CallFlags_Value; auto fn32 = [dynamicObject, callBackFn, flags, thisArg, scriptContext](uint32 k, Var element) @@ -9191,9 +9289,9 @@ using namespace Js; int64 finalVal = length; // If we came from Array.prototype.copyWithin and source object is not a JavascriptArray, source could be a TypedArray - if (typedArrayBase == nullptr && pArr == nullptr && TypedArrayBase::Is(obj)) + if (typedArrayBase == nullptr && pArr == nullptr && VarIs(obj)) { - typedArrayBase = TypedArrayBase::UnsafeFromVar(obj); + typedArrayBase = UnsafeVarTo(obj); } if (args.Info.Count > 1) @@ -9269,9 +9367,9 @@ using namespace Js; } // Side effects (such as defining a property in a ToPrimitive call) during evaluation of arguments may convert the array to an ES5 array. - if (pArr && !JavascriptArray::Is(obj)) + if (pArr && !JavascriptArray::IsNonES5Array(obj)) { - AssertOrFailFastMsg(ES5Array::Is(obj), "The array should have been converted to an ES5Array"); + AssertOrFailFastMsg(VarIs(obj), "The array should have been converted to an ES5Array"); pArr = nullptr; } @@ -9294,7 +9392,7 @@ using namespace Js; } else { - JavascriptOperators::OP_DeleteElementI(obj, JavascriptNumber::ToVar(toVal, scriptContext), scriptContext, PropertyOperation_ThrowOnDeleteIfNotConfig); + JS_REENTRANT(jsReentLock, JavascriptOperators::OP_DeleteElementI(obj, JavascriptNumber::ToVar(toVal, scriptContext), scriptContext, PropertyOperation_ThrowOnDeleteIfNotConfig)); } fromVal += direction; @@ -9329,9 +9427,9 @@ using namespace Js; val = pArr->DirectGetItem(fromIndex), pArr->SetItem(toIndex, val, Js::PropertyOperation_ThrowIfNotExtensible)); - if (!JavascriptArray::Is(obj)) + if (!JavascriptArray::IsNonES5Array(obj)) { - AssertOrFailFastMsg(ES5Array::Is(obj), "The array should have been converted to an ES5Array"); + AssertOrFailFastMsg(VarIs(obj), "The array should have been converted to an ES5Array"); pArr = nullptr; } } @@ -9385,11 +9483,12 @@ using namespace Js; Assert(args.Info.Count > 0); JavascriptLibrary* library = scriptContext->GetLibrary(); + bool isTypedArrayEntryPoint = typedArrayBase != nullptr; // If we came from Array.prototype.fill and source object is not a JavascriptArray, source could be a TypedArray - if (typedArrayBase == nullptr && pArr == nullptr && TypedArrayBase::Is(obj)) + if (!isTypedArrayEntryPoint && pArr == nullptr && VarIs(obj)) { - typedArrayBase = TypedArrayBase::UnsafeFromVar(obj); + typedArrayBase = UnsafeVarTo(obj); } Var fillValue; @@ -9397,6 +9496,10 @@ using namespace Js; if (args.Info.Count > 1) { fillValue = args[1]; + if (isTypedArrayEntryPoint) + { + JS_REENTRANT_UNLOCK(jsReentLock, fillValue = JavascriptNumber::ToVarNoCheck(JavascriptConversion::ToNumber(fillValue, scriptContext), scriptContext)); + } } else { @@ -9417,9 +9520,9 @@ using namespace Js; // Side-effects in the callback function may have changed the source array into an ES5Array. If this happens // we will process the array elements like an ES5Array. - if (pArr && !JavascriptArray::Is(obj)) + if (pArr && !JavascriptArray::IsNonES5Array(obj)) { - AssertOrFailFastMsg(ES5Array::Is(obj), "The array should have been converted to an ES5Array"); + AssertOrFailFastMsg(VarIs(obj), "The array should have been converted to an ES5Array"); pArr = nullptr; } } @@ -9441,7 +9544,7 @@ using namespace Js; } else { - JS_REENTRANT(jsReentLock, + JS_REENTRANT(jsReentLock, JavascriptOperators::OP_SetElementI_UInt32(obj, u32k, fillValue, scriptContext, Js::PropertyOperation_ThrowIfNotExtensible)); } @@ -9543,7 +9646,7 @@ using namespace Js; } } - RecyclableObject* callBackFn = RecyclableObject::FromVar(args[1]); + RecyclableObject* callBackFn = VarTo(args[1]); Var thisArg; if (args.Info.Count > 2) @@ -9556,9 +9659,9 @@ using namespace Js; } // If we came from Array.prototype.map and source object is not a JavascriptArray, source could be a TypedArray - if (!isTypedArrayEntryPoint && pArr == nullptr && TypedArrayBase::Is(obj)) + if (!isTypedArrayEntryPoint && pArr == nullptr && VarIs(obj)) { - typedArrayBase = TypedArrayBase::UnsafeFromVar(obj); + typedArrayBase = UnsafeVarTo(obj); } // If the entry point is %TypedArray%.prototype.map or the source object is an Array exotic object we should try to load the constructor property @@ -9566,16 +9669,16 @@ using namespace Js; if (isTypedArrayEntryPoint) { JavascriptFunction* defaultConstructor = TypedArrayBase::GetDefaultConstructor(args[0], scriptContext); - JS_REENTRANT(jsReentLock, + JS_REENTRANT(jsReentLock, RecyclableObject* constructor = JavascriptOperators::SpeciesConstructor(typedArrayBase, defaultConstructor, scriptContext)); - + isBuiltinArrayCtor = false; AssertOrFailFast(JavascriptOperators::IsConstructor(constructor)); bool isDefaultConstructor = constructor == defaultConstructor; JS_REENTRANT(jsReentLock, - newObj = RecyclableObject::FromVar( + newObj = VarTo( JavascriptOperators::NewObjectCreationHelper_ReentrancySafe(constructor, isDefaultConstructor, scriptContext->GetThreadContext(), [=]()->Js::Var { Js::Var constructorArgs[] = {constructor, JavascriptNumber::ToVar(length, scriptContext) }; @@ -9585,7 +9688,7 @@ using namespace Js; ) } // skip the typed array and "pure" array case, we still need to handle special arrays like es5array, remote array, and proxy of array. - else if (pArr == nullptr || scriptContext->GetConfig()->IsES6SpeciesEnabled()) + else { JS_REENTRANT_NO_MUTATE(jsReentLock, newObj = ArraySpeciesCreate(obj, length, scriptContext, nullptr, nullptr, &isBuiltinArrayCtor)); } @@ -9603,7 +9706,7 @@ using namespace Js; else { // If the new object we created is an array, remember that as it will save us time setting properties in the object below - newArr = JavascriptOperators::TryFromVar(newObj); + newArr = JavascriptArray::TryVarToNonES5Array(newObj); if (newArr) { #if ENABLE_COPYONACCESS_ARRAY @@ -9615,18 +9718,16 @@ using namespace Js; Var element = nullptr; Var mappedValue = nullptr; - // The correct flag value is CallFlags_Value but we pass CallFlags_None in compat modes - CallFlags callBackFnflags = CallFlags_Value; - CallInfo callBackFnInfo = CallInfo(callBackFnflags, 4); + CallInfo callBackFnInfo = CallInfo(CallFlags_Value, 4); // We at least have to have newObj as a valid object Assert(newObj); // The ArraySpeciesCreate call above could have converted the source array into an ES5Array. If this happens // we will process the array elements like an ES5Array. - if (pArr && !JavascriptArray::Is(obj)) + if (pArr && !JavascriptArray::IsNonES5Array(obj)) { - AssertOrFailFastMsg(ES5Array::Is(obj), "The array should have been converted to an ES5Array"); + AssertOrFailFastMsg(VarIs(obj), "The array should have been converted to an ES5Array"); pArr = nullptr; } @@ -9665,16 +9766,16 @@ using namespace Js; // Side-effects in the callback function may have changed the source array into an ES5Array. If this happens // we will process the rest of the array elements like an ES5Array. - if (!JavascriptArray::Is(obj)) + if (!JavascriptArray::IsNonES5Array(obj)) { - AssertOrFailFastMsg(ES5Array::Is(obj), "The array should have been converted to an ES5Array"); + AssertOrFailFastMsg(VarIs(obj), "The array should have been converted to an ES5Array"); JS_REENTRANT_UNLOCK(jsReentLock, return JavascriptArray::MapObjectHelper(obj, length, k + 1, newObj, newArr, isBuiltinArrayCtor, callBackFn, thisArg, scriptContext)); } } } else if (typedArrayBase != nullptr) { - AssertAndFailFast(TypedArrayBase::Is(typedArrayBase)); + AssertAndFailFast(VarIsCorrectType(typedArrayBase)); // Source is a TypedArray, we may have tried to call a constructor, but newObj may not be a TypedArray (or an array either) TypedArrayBase* newTypedArray = JavascriptOperators::TryFromVar(newObj); @@ -9692,7 +9793,7 @@ using namespace Js; // No need to do HasItem, as it cannot be observable unless 'typedArrayBase' is proxy. And we have established that it is indeed typedarray. element = typedArrayBase->DirectGetItem(k); - JS_REENTRANT(jsReentLock, + JS_REENTRANT(jsReentLock, BEGIN_SAFE_REENTRANT_CALL(scriptContext->GetThreadContext()) { mappedValue = CALL_FUNCTION(scriptContext->GetThreadContext(), callBackFn, callBackFnInfo, thisArg, @@ -9720,7 +9821,7 @@ using namespace Js; } #ifdef VALIDATE_ARRAY - if (JavascriptArray::Is(newObj)) + if (JavascriptArray::IsNonES5Array(newObj)) { newArr->ValidateArray(); } @@ -9736,9 +9837,7 @@ using namespace Js; JS_REENTRANCY_LOCK(jsReentLock, scriptContext->GetThreadContext()); SETOBJECT_FOR_MUTATION(jsReentLock, obj); - // The correct flag value is CallFlags_Value but we pass CallFlags_None in compat modes - CallFlags callBackFnflags = CallFlags_Value; - CallInfo callBackFnInfo = CallInfo(callBackFnflags, 4); + CallInfo callBackFnInfo = CallInfo(CallFlags_Value, 4); Var element = nullptr; Var mappedValue = nullptr; @@ -9771,7 +9870,7 @@ using namespace Js; } #ifdef VALIDATE_ARRAY - if (JavascriptArray::Is(newObj)) + if (JavascriptArray::IsNonES5Array(newObj)) { newArr->ValidateArray(); } @@ -9822,7 +9921,7 @@ using namespace Js; JavascriptError::ThrowTypeError(scriptContext, JSERR_FunctionArgument_NeedFunction, _u("Array.prototype.filter")); } - RecyclableObject* callBackFn = RecyclableObject::FromVar(args[1]); + RecyclableObject* callBackFn = VarTo(args[1]); Var thisArg = nullptr; if (args.Info.Count > 2) @@ -9848,7 +9947,7 @@ using namespace Js; else { // If the new object we created is an array, remember that as it will save us time setting properties in the object below - newArr = JavascriptOperators::TryFromVar(newObj); + newArr = JavascriptArray::TryVarToNonES5Array(newObj); if (newArr) { #if ENABLE_COPYONACCESS_ARRAY @@ -9927,6 +10026,10 @@ using namespace Js; AUTO_TAG_NATIVE_LIBRARY_ENTRY(function, callInfo, _u("Array.prototype.reduce")); +#ifdef ENABLE_JS_BUILTINS + Assert(!scriptContext->IsJsBuiltInEnabled()); +#endif + CHAKRATEL_LANGSTATS_INC_BUILTINCOUNT(Array_Prototype_reduce); Assert(!(callInfo.Flags & CallFlags_New)); @@ -9969,13 +10072,13 @@ using namespace Js; } // If we came from Array.prototype.reduce and source object is not a JavascriptArray, source could be a TypedArray - if (typedArrayBase == nullptr && pArr == nullptr && TypedArrayBase::Is(obj)) + if (typedArrayBase == nullptr && pArr == nullptr && VarIs(obj)) { - typedArrayBase = TypedArrayBase::UnsafeFromVar(obj); + typedArrayBase = UnsafeVarTo(obj); } T k = 0; - RecyclableObject* callBackFn = RecyclableObject::FromVar(args[1]); + RecyclableObject* callBackFn = VarTo(args[1]); Var accumulator = nullptr; Var element = nullptr; @@ -9987,14 +10090,21 @@ using namespace Js; { if (length == 0) { - JavascriptError::ThrowTypeError(scriptContext, VBSERR_ActionNotSupported); + if (typedArrayBase) + { + JavascriptError::ThrowTypeError(scriptContext, JSERR_EmptyArrayAndInitValueNotPresent, _u("TypedArray.prototype.reduce")); + } + else + { + JavascriptError::ThrowTypeError(scriptContext, JSERR_EmptyArrayAndInitValueNotPresent, _u("Array.prototype.reduce")); + } } bool bPresent = false; if (typedArrayBase) { - AssertAndFailFast(TypedArrayBase::Is(typedArrayBase)); + AssertAndFailFast(VarIsCorrectType(typedArrayBase)); uint32 end = (uint32)min(length, (T)typedArrayBase->GetLength()); for (; k < end && bPresent == false; k++) @@ -10022,19 +10132,24 @@ using namespace Js; if (bPresent == false) { - JavascriptError::ThrowTypeError(scriptContext, VBSERR_ActionNotSupported); + if (typedArrayBase) + { + JavascriptError::ThrowTypeError(scriptContext, JSERR_EmptyArrayAndInitValueNotPresent, _u("TypedArray.prototype.reduce")); + } + else + { + JavascriptError::ThrowTypeError(scriptContext, JSERR_EmptyArrayAndInitValueNotPresent, _u("Array.prototype.reduce")); + } } } Assert(accumulator); Var undefinedValue = scriptContext->GetLibrary()->GetUndefined(); - // The correct flag value is CallFlags_Value but we pass CallFlags_None in compat modes - CallFlags flags = CallFlags_Value; if (typedArrayBase) { - AssertAndFailFast(TypedArrayBase::Is(typedArrayBase)); + AssertAndFailFast(VarIsCorrectType(typedArrayBase)); uint32 end = (uint32)min(length, (T)typedArrayBase->GetLength()); for (; k < end; k++) @@ -10046,7 +10161,7 @@ using namespace Js; JS_REENTRANT(jsReentLock, BEGIN_SAFE_REENTRANT_CALL(scriptContext->GetThreadContext()) { - accumulator = CALL_FUNCTION(scriptContext->GetThreadContext(), callBackFn, CallInfo(flags, 5), undefinedValue, + accumulator = CALL_FUNCTION(scriptContext->GetThreadContext(), callBackFn, CallInfo(CallFlags_Value, 5), undefinedValue, accumulator, element, JavascriptNumber::ToVar(k, scriptContext), @@ -10070,8 +10185,6 @@ using namespace Js; JS_REENTRANCY_LOCK(jsReentLock, scriptContext->GetThreadContext()); SETOBJECT_FOR_MUTATION(jsReentLock, obj); - // The correct flag value is CallFlags_Value but we pass CallFlags_None in compat modes - CallFlags flags = CallFlags_Value; Var element = nullptr; for (T k = start; k < length; k++) @@ -10083,7 +10196,7 @@ using namespace Js; element = JavascriptOperators::GetItem(obj, k, scriptContext); BEGIN_SAFE_REENTRANT_CALL(scriptContext->GetThreadContext()) { - accumulator = CALL_FUNCTION(scriptContext->GetThreadContext(), callBackFn, CallInfo(flags, 5), scriptContext->GetLibrary()->GetUndefined(), + accumulator = CALL_FUNCTION(scriptContext->GetThreadContext(), callBackFn, CallInfo(CallFlags_Value, 5), scriptContext->GetLibrary()->GetUndefined(), accumulator, element, JavascriptNumber::ToVar(k, scriptContext), @@ -10149,12 +10262,12 @@ using namespace Js; } // If we came from Array.prototype.reduceRight and source object is not a JavascriptArray, source could be a TypedArray - if (typedArrayBase == nullptr && pArr == nullptr && TypedArrayBase::Is(obj)) + if (typedArrayBase == nullptr && pArr == nullptr && VarIs(obj)) { - typedArrayBase = TypedArrayBase::UnsafeFromVar(obj); + typedArrayBase = UnsafeVarTo(obj); } - RecyclableObject* callBackFn = RecyclableObject::FromVar(args[1]); + RecyclableObject* callBackFn = VarTo(args[1]); Var accumulator = nullptr; Var element = nullptr; T k = 0; @@ -10174,7 +10287,7 @@ using namespace Js; bool bPresent = false; if (typedArrayBase) { - AssertAndFailFast(TypedArrayBase::Is(typedArrayBase)); + AssertAndFailFast(VarIsCorrectType(typedArrayBase)); uint32 end = (uint32)min(length, (T)typedArrayBase->GetLength()); for (; k < end && bPresent == false; k++) @@ -10206,13 +10319,11 @@ using namespace Js; } } - // The correct flag value is CallFlags_Value but we pass CallFlags_None in compat modes - CallFlags flags = CallFlags_Value; Var undefinedValue = scriptContext->GetLibrary()->GetUndefined(); if (typedArrayBase) { - AssertAndFailFast(TypedArrayBase::Is(typedArrayBase)); + AssertAndFailFast(VarIsCorrectType(typedArrayBase)); uint32 end = (uint32)min(length, (T)typedArrayBase->GetLength()); for (; k < end; k++) @@ -10225,7 +10336,7 @@ using namespace Js; JS_REENTRANT(jsReentLock, BEGIN_SAFE_REENTRANT_CALL(scriptContext->GetThreadContext()) { - accumulator = CALL_FUNCTION(scriptContext->GetThreadContext(), callBackFn, CallInfo(flags, 5), undefinedValue, + accumulator = CALL_FUNCTION(scriptContext->GetThreadContext(), callBackFn, CallInfo(CallFlags_Value, 5), undefinedValue, accumulator, element, JavascriptNumber::ToVar(index, scriptContext), @@ -10249,8 +10360,6 @@ using namespace Js; JS_REENTRANCY_LOCK(jsReentLock, scriptContext->GetThreadContext()); SETOBJECT_FOR_MUTATION(jsReentLock, obj); - // The correct flag value is CallFlags_Value but we pass CallFlags_None in compat modes - CallFlags flags = CallFlags_Value; Var element = nullptr; T index = 0; @@ -10265,7 +10374,7 @@ using namespace Js; BEGIN_SAFE_REENTRANT_CALL(scriptContext->GetThreadContext()) { accumulator = CALL_FUNCTION(scriptContext->GetThreadContext(), - callBackFn, CallInfo(flags, 5), scriptContext->GetLibrary()->GetUndefined(), + callBackFn, CallInfo(CallFlags_Value, 5), scriptContext->GetLibrary()->GetUndefined(), accumulator, element, JavascriptNumber::ToVar(index, scriptContext), @@ -10296,7 +10405,7 @@ using namespace Js; if (JavascriptOperators::IsConstructor(args[0])) { - constructor = RecyclableObject::FromVar(args[0]); + constructor = VarTo(args[0]); } RecyclableObject* items = nullptr; @@ -10306,7 +10415,7 @@ using namespace Js; JavascriptError::ThrowTypeError(scriptContext, JSERR_FunctionArgument_NeedObject, _u("Array.from")); } - JavascriptArray* itemsArr = JavascriptOperators::TryFromVar(items); + JavascriptArray* itemsArr = JavascriptArray::TryVarToNonES5Array(items); if (itemsArr) { @@ -10318,17 +10427,17 @@ using namespace Js; SETOBJECT_FOR_MUTATION(jsReentLock, itemsArr); bool mapping = false; - JavascriptFunction* mapFn = nullptr; + RecyclableObject* mapFn = nullptr; Var mapFnThisArg = nullptr; if (args.Info.Count >= 3 && !JavascriptOperators::IsUndefinedObject(args[2])) { - if (!JavascriptFunction::Is(args[2])) + if (!JavascriptConversion::IsCallable(args[2])) { JavascriptError::ThrowTypeError(scriptContext, JSERR_FunctionArgument_NeedFunction, _u("Array.from")); } - mapFn = JavascriptFunction::FromVar(args[2]); + mapFn = VarTo(args[2]); if (args.Info.Count >= 4) { @@ -10355,14 +10464,14 @@ using namespace Js; Js::CallInfo constructorCallInfo(Js::CallFlags_New, _countof(constructorArgs)); Js::Arguments arguments(constructorCallInfo, constructorArgs); bool isDefaultConstructor = constructor == scriptContext->GetLibrary()->GetArrayConstructor(); - JS_REENTRANT(jsReentLock, - newObj = RecyclableObject::FromVar(JavascriptOperators::NewObjectCreationHelper_ReentrancySafe(constructor, isDefaultConstructor, scriptContext->GetThreadContext(), [=]()->Js::Var + JS_REENTRANT(jsReentLock, + newObj = VarTo(JavascriptOperators::NewObjectCreationHelper_ReentrancySafe(constructor, isDefaultConstructor, scriptContext->GetThreadContext(), [=]()->Js::Var { return JavascriptOperators::NewScObject(constructor, arguments, scriptContext); })) ); - newArr = JavascriptOperators::TryFromVar(newObj); + newArr = JavascriptArray::TryVarToNonES5Array(newObj); if (newArr) { #if ENABLE_COPYONACCESS_ARRAY @@ -10417,13 +10526,13 @@ using namespace Js; Js::Arguments arguments(constructorCallInfo, constructorArgs); bool isDefaultConstructor = constructor == scriptContext->GetLibrary()->GetArrayConstructor(); JS_REENTRANT(jsReentLock, - newObj = RecyclableObject::FromVar(JavascriptOperators::NewObjectCreationHelper_ReentrancySafe(constructor, isDefaultConstructor, scriptContext->GetThreadContext(), [=]()->Js::Var + newObj = VarTo(JavascriptOperators::NewObjectCreationHelper_ReentrancySafe(constructor, isDefaultConstructor, scriptContext->GetThreadContext(), [=]()->Js::Var { return JavascriptOperators::NewScObject(constructor, arguments, scriptContext); })) ); - newArr = JavascriptOperators::TryFromVar(newObj); + newArr = JavascriptArray::TryVarToNonES5Array(newObj); if (newArr) { #if ENABLE_COPYONACCESS_ARRAY @@ -10466,7 +10575,7 @@ using namespace Js; Assert(mapFnThisArg != nullptr); Var kVar = JavascriptNumber::ToVar(k, scriptContext); - JS_REENTRANT(jsReentLock, + JS_REENTRANT(jsReentLock, kValue = scriptContext->GetThreadContext()->ExecuteImplicitCall(mapFn, Js::ImplicitCall_Accessor, [=]()->Js::Var { return CALL_FUNCTION(scriptContext->GetThreadContext(), mapFn, CallInfo(CallFlags_Value, 3), mapFnThisArg, kValue, kVar) @@ -10533,7 +10642,7 @@ using namespace Js; if (JavascriptOperators::IsConstructor(args[0])) { - RecyclableObject* constructor = RecyclableObject::FromVar(args[0]); + RecyclableObject* constructor = VarTo(args[0]); isBuiltinArrayCtor = (constructor == scriptContext->GetLibrary()->GetArrayConstructor()); bool isBuiltInTypedArrayCtor = JavascriptLibrary::IsTypedArrayConstructor(constructor, scriptContext); @@ -10553,10 +10662,10 @@ using namespace Js; return JavascriptOperators::NewScObject(constructor, Js::Arguments(constructorCallInfo, constructorArgs), scriptContext); } }); - ) + ) // If the new object we created is an array, remember that as it will save us time setting properties in the object below - newArr = JavascriptOperators::TryFromVar(newObj); + newArr = JavascriptArray::TryVarToNonES5Array(newObj); if (newArr) { #if ENABLE_COPYONACCESS_ARRAY @@ -10565,9 +10674,9 @@ using namespace Js; SETOBJECT_FOR_MUTATION(jsReentLock, newArr); } - else if (TypedArrayBase::Is(newObj)) + else if (VarIs(newObj)) { - newTypedArray = TypedArrayBase::UnsafeFromVar(newObj); + newTypedArray = UnsafeVarTo(newObj); } } else @@ -10609,7 +10718,7 @@ using namespace Js; for (uint32 k = 0; k < len; k++) { Var kValue = args[k + 1]; - JS_REENTRANT(jsReentLock, ThrowErrorOnFailure(JavascriptArray::SetArrayLikeObjects(RecyclableObject::FromVar(newObj), k, kValue), scriptContext, k)); + JS_REENTRANT(jsReentLock, ThrowErrorOnFailure(JavascriptArray::SetArrayLikeObjects(VarTo(newObj), k, kValue), scriptContext, k)); } } @@ -10731,7 +10840,7 @@ using namespace Js; uint32 random1 = static_cast(rand()); if (random1 % 2 == 0) { - if (JavascriptNativeIntArray::Is(this)) + if (VarIs(this)) { uint32 random2 = static_cast(rand()); if (random2 % 2 == 0) @@ -10743,7 +10852,7 @@ using namespace Js; JavascriptNativeIntArray::ToVarArray(static_cast(this)); } } - else if (JavascriptNativeFloatArray::Is(this)) + else if (VarIs(this)) { JavascriptNativeFloatArray::ToVarArray(static_cast(this)); } @@ -10768,14 +10877,14 @@ using namespace Js; } else if (DynamicType::Is(obj->GetTypeId())) { - DynamicObject* dynobj = DynamicObject::UnsafeFromVar(obj); + DynamicObject* dynobj = UnsafeVarTo(obj); ArrayObject* objectArray = dynobj->GetObjectArray(); arr = (objectArray && JavascriptArray::IsAnyArray(objectArray)) ? JavascriptArray::UnsafeFromAnyArray(objectArray) : nullptr; } if (arr != nullptr) { - if (JavascriptArray::Is(arr)) + if (JavascriptArray::IsNonES5Array(arr)) { arr = EnsureNonNativeArray(arr); ArrayElementEnumerator e(arr, startIndex, limitIndex); @@ -10797,9 +10906,9 @@ using namespace Js; { ScriptContext* scriptContext = obj->GetScriptContext(); - Assert(ES5Array::Is(arr)); + Assert(VarIs(arr)); - ES5Array* es5Array = ES5Array::FromVar(arr); + ES5Array* es5Array = VarTo(arr); ES5ArrayIndexStaticEnumerator e(es5Array); while (e.MoveNext()) @@ -11481,11 +11590,11 @@ using namespace Js; #if ENABLE_COPYONACCESS_ARRAY JavascriptLibrary::CheckAndConvertCopyOnAccessNativeIntArray(arr); #endif - if (JavascriptNativeIntArray::Is(arr)) + if (VarIs(arr)) { arr = JavascriptNativeIntArray::ToVarArray((JavascriptNativeIntArray*)arr); } - else if (JavascriptNativeFloatArray::Is(arr)) + else if (VarIs(arr)) { arr = JavascriptNativeFloatArray::ToVarArray((JavascriptNativeFloatArray*)arr); } @@ -11572,7 +11681,7 @@ using namespace Js; #if ENABLE_COPYONACCESS_ARRAY JavascriptLibrary::CheckAndConvertCopyOnAccessNativeIntArray(arrayToSpread); #endif - JavascriptArray *array = FromVar(arrayToSpread); + JavascriptArray *array = VarTo(arrayToSpread); uint32 arrayLength = array->GetLength(); uint32 actualLength = arrayLength; @@ -11582,7 +11691,7 @@ using namespace Js; actualLength = UInt32Math::Add(actualLength - 1, GetSpreadArgLen(array->DirectGetItem(spreadIndices->elements[i]), scriptContext))); } - JavascriptArray *result = FromVar(OP_NewScArrayWithMissingValues(actualLength, scriptContext)); + JavascriptArray *result = VarTo(OP_NewScArrayWithMissingValues(actualLength, scriptContext)); // Now we copy each element and expand the spread parameters inline. for (unsigned i = 0, spreadArrIndex = 0, resultIndex = 0; i < arrayLength && resultIndex < actualLength; ++i) @@ -11591,7 +11700,7 @@ using namespace Js; // An array needs a slow copy if it is a cross-site object or we have missing values that need to be set to undefined. auto needArraySlowCopy = [&](Var instance) { - JavascriptArray *arr = JavascriptOperators::TryFromVar(instance); + JavascriptArray *arr = JavascriptArray::TryVarToNonES5Array(instance); if (arr) { JS_REENTRANT_UNLOCK(jsReentLock, return arr->IsCrossSiteObject() || arr->IsFillFromPrototypes()); @@ -11602,7 +11711,7 @@ using namespace Js; // Designed to have interchangeable arguments with CopyAnyArrayElementsToVar. auto slowCopy = [&scriptContext, &needArraySlowCopy ](JavascriptArray *dstArray, unsigned dstIndex, Var srcArray, uint32 start, uint32 end) { - Assert(needArraySlowCopy(srcArray) || ArgumentsObject::Is(srcArray) || TypedArrayBase::Is(srcArray) || JavascriptString::Is(srcArray)); + Assert(needArraySlowCopy(srcArray) || VarIs(srcArray) || VarIs(srcArray) || VarIs(srcArray)); JS_REENTRANCY_LOCK(jsReentLock, scriptContext->GetThreadContext()); RecyclableObject *propertyObject; @@ -11617,10 +11726,13 @@ using namespace Js; JS_REENTRANT(jsReentLock, BOOL gotItem = JavascriptOperators::GetItem(srcArray, propertyObject, j, &element, scriptContext)); if (!gotItem) { - // Copy across missing values as undefined as per 12.2.5.2 SpreadElement : ... AssignmentExpression 5f. - element = scriptContext->GetLibrary()->GetUndefined(); + // skip elided elements + dstIndex++; + } + else + { + dstArray->DirectSetItemAt(dstIndex++, element); } - dstArray->DirectSetItemAt(dstIndex++, element); } }; @@ -11658,9 +11770,9 @@ using namespace Js; { JS_REENTRANT(jsReentLock, Var instance = array->DirectGetItem(i)); - if (SpreadArgument::Is(instance)) + if (VarIs(instance)) { - SpreadArgument* spreadArgument = SpreadArgument::FromVar(instance); + SpreadArgument* spreadArgument = VarTo(instance); uint32 len = spreadArgument->GetArgumentSpreadCount(); const Var* spreadItems = spreadArgument->GetArgumentSpread(); for (uint32 j = 0; j < len; j++) @@ -11690,7 +11802,7 @@ using namespace Js; // A spread argument can be anything that returns a 'length' property, even if that // property is null or undefined. spreadArg = CrossSite::MarshalVar(scriptContext, spreadArg); - JavascriptArray *arr = JavascriptOperators::TryFromVar(spreadArg); + JavascriptArray *arr = JavascriptArray::TryVarToNonES5Array(spreadArg); if (arr) { return arr->GetLength(); @@ -11702,9 +11814,9 @@ using namespace Js; return tarr->GetLength(); } - if (SpreadArgument::Is(spreadArg)) + if (VarIs(spreadArg)) { - SpreadArgument *spreadFunctionArgs = SpreadArgument::FromVar(spreadArg); + SpreadArgument *spreadFunctionArgs = VarTo(spreadArg); return spreadFunctionArgs->GetArgumentSpreadCount(); } @@ -11861,7 +11973,7 @@ using namespace Js; } else { - AssertMsg(RecyclableObject::Is(seg->elements[i]), "Invalid entry in segment"); + AssertMsg(VarIs(seg->elements[i]), "Invalid entry in segment"); } } ValidateSegment(seg); @@ -12006,13 +12118,13 @@ using namespace Js; switch (typeId) { case Js::TypeIds_Array: - arrayCopy = JavascriptArray::DeepCopyInstance(JavascriptArray::UnsafeFromVar(arrayObject)); + arrayCopy = JavascriptArray::DeepCopyInstance(UnsafeVarTo(arrayObject)); break; case Js::TypeIds_NativeIntArray: - arrayCopy = JavascriptArray::DeepCopyInstance(JavascriptNativeIntArray::UnsafeFromVar(arrayObject)); + arrayCopy = JavascriptArray::DeepCopyInstance(UnsafeVarTo(arrayObject)); break; case Js::TypeIds_NativeFloatArray: - arrayCopy = JavascriptArray::DeepCopyInstance(JavascriptNativeFloatArray::UnsafeFromVar(arrayObject)); + arrayCopy = JavascriptArray::DeepCopyInstance(UnsafeVarTo(arrayObject)); break; default: @@ -12242,7 +12354,7 @@ using namespace Js; RecyclableObject* JavascriptArray::ArraySpeciesCreate(Var originalArray, T length, ScriptContext* scriptContext, bool *pIsIntArray, bool *pIsFloatArray, bool *pIsBuiltinArrayCtor) { - if (originalArray == nullptr || !scriptContext->GetConfig()->IsES6SpeciesEnabled()) + if (originalArray == nullptr) { return nullptr; } @@ -12250,20 +12362,28 @@ using namespace Js; JS_REENTRANCY_LOCK(jsReentLock, scriptContext->GetThreadContext()); SETOBJECT_FOR_MUTATION(jsReentLock, originalArray); - if (JavascriptArray::Is(originalArray) - && !DynamicObject::UnsafeFromVar(originalArray)->GetDynamicType()->GetTypeHandler()->GetIsNotPathTypeHandlerOrHasUserDefinedCtor() - && DynamicObject::UnsafeFromVar(originalArray)->GetPrototype() == scriptContext->GetLibrary()->GetArrayPrototype() - && !scriptContext->GetLibrary()->GetArrayObjectHasUserDefinedSpecies()) + auto* library = scriptContext->GetLibrary(); + + if (JavascriptArray::IsNonES5Array(originalArray)) { - return nullptr; + auto* dynamicObject = UnsafeVarTo(originalArray); + auto* typeHandler = dynamicObject->GetDynamicType()->GetTypeHandler(); + + if (typeHandler->IsPathTypeHandler() + && !PathTypeHandlerBase::FromTypeHandler(typeHandler)->HasUserDefinedCtor() + && dynamicObject->GetPrototype() == library->GetArrayPrototype() + && !library->GetArrayObjectHasUserDefinedSpecies()) + { + return nullptr; + } } - Var constructor = scriptContext->GetLibrary()->GetUndefined(); + Var constructor = library->GetUndefined(); JS_REENTRANT(jsReentLock, BOOL isArray = JavascriptOperators::IsArray(originalArray)); if (isArray) { - JS_REENTRANT(jsReentLock, BOOL getProp = JavascriptOperators::GetProperty(RecyclableObject::UnsafeFromVar(originalArray), PropertyIds::constructor, &constructor, scriptContext)); + JS_REENTRANT(jsReentLock, BOOL getProp = JavascriptOperators::GetProperty(UnsafeVarTo(originalArray), PropertyIds::constructor, &constructor, scriptContext)); if (!getProp) { return nullptr; @@ -12271,12 +12391,12 @@ using namespace Js; if (JavascriptOperators::IsConstructor(constructor)) { - ScriptContext* constructorScriptContext = RecyclableObject::UnsafeFromVar(constructor)->GetScriptContext(); + ScriptContext* constructorScriptContext = UnsafeVarTo(constructor)->GetScriptContext(); if (constructorScriptContext != scriptContext) { if (constructorScriptContext->GetLibrary()->GetArrayConstructor() == constructor) { - constructor = scriptContext->GetLibrary()->GetUndefined(); + constructor = library->GetUndefined(); } } } @@ -12292,14 +12412,14 @@ using namespace Js; } return nullptr; } - if (constructor == scriptContext->GetLibrary()->GetNull()) + if (constructor == library->GetNull()) { - constructor = scriptContext->GetLibrary()->GetUndefined(); + constructor = library->GetUndefined(); } } } - if (constructor == scriptContext->GetLibrary()->GetUndefined() || constructor == scriptContext->GetLibrary()->GetArrayConstructor()) + if (constructor == library->GetUndefined() || constructor == library->GetArrayConstructor()) { if (length > UINT_MAX) { @@ -12308,12 +12428,12 @@ using namespace Js; if (nullptr == pIsIntArray) { - return scriptContext->GetLibrary()->CreateArray(static_cast(length)); + return library->CreateArray(static_cast(length)); } else { // If the constructor function is the built-in Array constructor, we can be smart and create the right type of native array. - JavascriptArray* pArr = JavascriptArray::FromVar(originalArray); + JavascriptArray* pArr = VarTo(originalArray); pArr->GetArrayTypeAndConvert(pIsIntArray, pIsFloatArray); return CreateNewArrayHelper(static_cast(length), *pIsIntArray, *pIsFloatArray, pArr, scriptContext); } @@ -12332,13 +12452,13 @@ using namespace Js; Js::Var constructorArgs[] = { constructor, JavascriptNumber::ToVar(length, scriptContext) }; Js::CallInfo constructorCallInfo(Js::CallFlags_New, _countof(constructorArgs)); - AssertOrFailFast(Js::RecyclableObject::Is(constructor)); + AssertOrFailFast(Js::VarIs(constructor)); ThreadContext* threadContext = scriptContext->GetThreadContext(); Var scObject = threadContext->ExecuteImplicitCall((RecyclableObject*)constructor, ImplicitCall_Accessor, [&]()->Js::Var { JS_REENTRANT_UNLOCK(jsReentLock, return JavascriptOperators::NewScObject(constructor, Js::Arguments(constructorCallInfo, constructorArgs), scriptContext)); }); - return RecyclableObject::FromVar(scObject); + return VarTo(scObject); } /*static*/ PropertyId const JavascriptArray::specialPropertyIds[] = @@ -13029,129 +13149,37 @@ using namespace Js; return TRUE; } - bool JavascriptNativeArray::Is(Var aValue) - { - TypeId typeId = JavascriptOperators::GetTypeId(aValue); - return JavascriptNativeArray::Is(typeId); - } - bool JavascriptNativeArray::Is(TypeId typeId) { return JavascriptNativeIntArray::Is(typeId) || JavascriptNativeFloatArray::Is(typeId); } - JavascriptNativeArray* JavascriptNativeArray::FromVar(Var aValue) - { - AssertOrFailFastMsg(Is(aValue), "Ensure var is actually a 'JavascriptNativeArray'"); - - return static_cast(aValue); - } - - JavascriptNativeArray* JavascriptNativeArray::UnsafeFromVar(Var aValue) - { - AssertMsg(Is(aValue), "Ensure var is actually a 'JavascriptNativeArray'"); - - return static_cast(aValue); - } - - bool JavascriptNativeIntArray::Is(Var aValue) - { - TypeId typeId = JavascriptOperators::GetTypeId(aValue); - return JavascriptNativeIntArray::Is(typeId); - } - -#if ENABLE_COPYONACCESS_ARRAY - bool JavascriptCopyOnAccessNativeIntArray::Is(Var aValue) - { - TypeId typeId = JavascriptOperators::GetTypeId(aValue); - return JavascriptCopyOnAccessNativeIntArray::Is(typeId); - } -#endif - bool JavascriptNativeIntArray::Is(TypeId typeId) { return typeId == TypeIds_NativeIntArray; } -#if ENABLE_COPYONACCESS_ARRAY - bool JavascriptCopyOnAccessNativeIntArray::Is(TypeId typeId) - { - return typeId == TypeIds_CopyOnAccessNativeIntArray; - } -#endif - - bool JavascriptNativeIntArray::IsNonCrossSite(Var aValue) - { - bool ret = !TaggedInt::Is(aValue) && VirtualTableInfo::HasVirtualTable(aValue); - Assert(ret == (JavascriptNativeIntArray::Is(aValue) && !JavascriptNativeIntArray::FromVar(aValue)->IsCrossSiteObject())); - return ret; - } - - JavascriptNativeIntArray* JavascriptNativeIntArray::FromVar(Var aValue) - { - AssertOrFailFastMsg(Is(aValue), "Ensure var is actually a 'JavascriptNativeIntArray'"); - - return static_cast(aValue); - } - - JavascriptNativeIntArray* JavascriptNativeIntArray::UnsafeFromVar(Var aValue) - { - AssertMsg(Is(aValue), "Ensure var is actually a 'JavascriptNativeIntArray'"); - - return static_cast(aValue); - } - -#if ENABLE_COPYONACCESS_ARRAY - JavascriptCopyOnAccessNativeIntArray* JavascriptCopyOnAccessNativeIntArray::FromVar(Var aValue) - { - AssertOrFailFastMsg(Is(aValue), "Ensure var is actually a 'JavascriptCopyOnAccessNativeIntArray'"); - - return static_cast(aValue); - } - - JavascriptCopyOnAccessNativeIntArray* JavascriptCopyOnAccessNativeIntArray::UnsafeFromVar(Var aValue) - { - AssertMsg(Is(aValue), "Ensure var is actually a 'JavascriptCopyOnAccessNativeIntArray'"); - - return static_cast(aValue); - } - -#endif - - bool JavascriptNativeFloatArray::Is(Var aValue) - { - TypeId typeId = JavascriptOperators::GetTypeId(aValue); - return JavascriptNativeFloatArray::Is(typeId); - } - bool JavascriptNativeFloatArray::Is(TypeId typeId) { return typeId == TypeIds_NativeFloatArray; } - bool JavascriptNativeFloatArray::IsNonCrossSite(Var aValue) - { - bool ret = !TaggedInt::Is(aValue) && VirtualTableInfo::HasVirtualTable(aValue); - Assert(ret == (JavascriptNativeFloatArray::Is(aValue) && !JavascriptNativeFloatArray::FromVar(aValue)->IsCrossSiteObject())); - return ret; - } - - JavascriptNativeFloatArray* JavascriptNativeFloatArray::FromVar(Var aValue) - { - AssertOrFailFastMsg(Is(aValue), "Ensure var is actually a 'JavascriptNativeFloatArray'"); - - return static_cast(RecyclableObject::FromVar(aValue)); - } - - JavascriptNativeFloatArray* JavascriptNativeFloatArray::UnsafeFromVar(Var aValue) - { - AssertMsg(Is(aValue), "Ensure var is actually a 'JavascriptNativeFloatArray'"); - - return static_cast(RecyclableObject::UnsafeFromVar(aValue)); - } - template int Js::JavascriptArray::GetParamForIndexOf(unsigned int, Js::Arguments const&, void*&, unsigned int&, Js::ScriptContext*); template bool Js::JavascriptArray::ArrayElementEnumerator::MoveNext(); template void Js::JavascriptArray::SetArrayLiteralItem(unsigned int, void*); template void* Js::JavascriptArray::TemplatedIndexOfHelper(Js::TypedArrayBase*, void*, unsigned int, unsigned int, Js::ScriptContext*); template void* Js::JavascriptArray::TemplatedIndexOfHelper(Js::TypedArrayBase*, void*, unsigned int, unsigned int, Js::ScriptContext*); + + // Explicit instantiation of Sorting Algorithms for each form of typed array + template void Js::JavascriptArray::TypedArraySort(char16*, uint32, JavascriptArray::CompareVarsInfo*, ArenaAllocator*); + template void Js::JavascriptArray::TypedArraySort(int8*, uint32, JavascriptArray::CompareVarsInfo*, ArenaAllocator*); + template void Js::JavascriptArray::TypedArraySort(uint8*, uint32, JavascriptArray::CompareVarsInfo*, ArenaAllocator*); + template void Js::JavascriptArray::TypedArraySort(int16*, uint32, JavascriptArray::CompareVarsInfo*, ArenaAllocator*); + template void Js::JavascriptArray::TypedArraySort(uint16*, uint32, JavascriptArray::CompareVarsInfo*, ArenaAllocator*); + template void Js::JavascriptArray::TypedArraySort(int32*, uint32, JavascriptArray::CompareVarsInfo*, ArenaAllocator*); + template void Js::JavascriptArray::TypedArraySort(uint32*, uint32, JavascriptArray::CompareVarsInfo*, ArenaAllocator*); + template void Js::JavascriptArray::TypedArraySort(float*, uint32, JavascriptArray::CompareVarsInfo*, ArenaAllocator*); + template void Js::JavascriptArray::TypedArraySort(double*, uint32, JavascriptArray::CompareVarsInfo*, ArenaAllocator*); + template void Js::JavascriptArray::TypedArraySort(int64*, uint32, JavascriptArray::CompareVarsInfo*, ArenaAllocator*); + template void Js::JavascriptArray::TypedArraySort(uint64*, uint32, JavascriptArray::CompareVarsInfo*, ArenaAllocator*); + template void Js::JavascriptArray::TypedArraySort(bool*, uint32, JavascriptArray::CompareVarsInfo*, ArenaAllocator*); diff --git a/lib/Runtime/Library/JavascriptArray.h b/lib/Runtime/Library/JavascriptArray.h index f48a5885676..72c2bacdf64 100644 --- a/lib/Runtime/Library/JavascriptArray.h +++ b/lib/Runtime/Library/JavascriptArray.h @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- @@ -167,8 +168,6 @@ namespace Js static TypeId OP_SetNativeFloatElementC(JavascriptNativeFloatArray *arr, uint32 index, Var value, ScriptContext *scriptContext); template void SetArrayLiteralItem(uint32 index, T value); - void Sort(RecyclableObject* compFn); - template NativeArrayType * ConvertToNativeArrayInPlace(JavascriptArray *varArray); template T GetNativeValue(Var iVal, ScriptContext * scriptContext); @@ -211,10 +210,11 @@ namespace Js return this->DirectGetItemAt(index, &value) ? WritableData : None; } - static bool Is(Var aValue); - static bool Is(TypeId typeId); - static JavascriptArray* FromVar(Var aValue); - static JavascriptArray* UnsafeFromVar(Var aValue); + static bool IsNonES5Array(Var aValue); + static bool IsNonES5Array(TypeId typeId); + + // Returns the object if it is a non-ES5 array object. Otherwise returns null. + static JavascriptArray* TryVarToNonES5Array(Var aValue); static bool IsVarArray(Var aValue); static bool IsVarArray(TypeId typeId); @@ -232,6 +232,7 @@ namespace Js { public: static FunctionInfo NewInstance; + static FunctionInfo At; static FunctionInfo Concat; static FunctionInfo Every; static FunctionInfo Filter; @@ -257,6 +258,8 @@ namespace Js static FunctionInfo IsArray; static FunctionInfo Find; static FunctionInfo FindIndex; + static FunctionInfo FindLast; + static FunctionInfo FindLastIndex; static FunctionInfo Entries; static FunctionInfo Keys; static FunctionInfo Values; @@ -270,6 +273,7 @@ namespace Js static Var NewInstance(RecyclableObject* function, CallInfo callInfo, ...); static Var NewInstance(RecyclableObject* function, Arguments args); static Var ProfiledNewInstance(RecyclableObject* function, CallInfo callInfo, ...); + static Var EntryAt(RecyclableObject* function, CallInfo callInfo, ...); static Var EntryConcat(RecyclableObject* function, CallInfo callInfo, ...); static Var EntryEvery(RecyclableObject* function, CallInfo callInfo, ...); static Var EntryFilter(RecyclableObject* function, CallInfo callInfo, ...); @@ -295,6 +299,8 @@ namespace Js static Var EntryIsArray(RecyclableObject* function, CallInfo callInfo, ...); static Var EntryFind(RecyclableObject* function, CallInfo callInfo, ...); static Var EntryFindIndex(RecyclableObject* function, CallInfo callInfo, ...); + static Var EntryFindLast(RecyclableObject* function, CallInfo callInfo, ...); + static Var EntryFindLastIndex(RecyclableObject* function, CallInfo callInfo, ...); static Var EntryEntries(RecyclableObject* function, CallInfo callInfo, ...); static Var EntryKeys(RecyclableObject* function, CallInfo callInfo, ...); static Var EntryValues(RecyclableObject* function, CallInfo callInfo, ...); @@ -306,8 +312,8 @@ namespace Js static Var Push(ScriptContext * scriptContext, Var object, Var value); static Var EntryPushNonJavascriptArray(ScriptContext * scriptContext, Var * args, uint argCount); - static Var EntryPushJavascriptArray(ScriptContext * scriptContext, Var * args, uint argCount); - static Var EntryPushJavascriptArrayNoFastPath(ScriptContext * scriptContext, Var * args, uint argCount); + static Var EntryPushJavascriptArray(ScriptContext * scriptContext, JavascriptArray * arr, Var * args, uint argCount); + static Var EntryPushJavascriptArrayNoFastPath(ScriptContext * scriptContext, JavascriptArray * arr, Var * args, uint argCount); static Var Pop(ScriptContext * scriptContext, Var object); @@ -385,7 +391,7 @@ namespace Js template void WalkExisting(Func func) { - Assert(!JavascriptNativeIntArray::Is(this) && !JavascriptNativeFloatArray::Is(this)); + Assert(!VarIs(this) && !VarIs(this)); ArrayElementEnumerator e(this, 0); while(e.MoveNext()) { @@ -502,6 +508,8 @@ namespace Js static Var SliceHelper(JavascriptArray* pArr, Js::TypedArrayBase* typedArrayBase, RecyclableObject* obj, T length, Arguments& args, ScriptContext* scriptContext); static Var SliceObjectHelper(RecyclableObject* obj, uint32 sliceStart, uint32 start, JavascriptArray* newArr, RecyclableObject* newObj, uint32 newLen, ScriptContext* scriptContext); template + static Var AtHelper(JavascriptArray* pArr, Js::TypedArrayBase* typedArrayBase, RecyclableObject* obj, T length, Arguments& args, ScriptContext* scriptContext); + template static Var EveryHelper(JavascriptArray* pArr, Js::TypedArrayBase* typedArrayBase, RecyclableObject* obj, T length, Arguments& args, ScriptContext* scriptContext); template static Var EveryObjectHelper(RecyclableObject* obj, T length, T start, RecyclableObject* callBackFn, Var thisArg, ScriptContext* scriptContext); @@ -509,9 +517,9 @@ namespace Js static Var SomeHelper(JavascriptArray* pArr, Js::TypedArrayBase* typedArrayBase, RecyclableObject* obj, T length, Arguments& args, ScriptContext* scriptContext); template static Var SomeObjectHelper(RecyclableObject* obj, T length, T start, RecyclableObject* callBackFn, Var thisArg, ScriptContext* scriptContext); - template + template static Var FindHelper(JavascriptArray* pArr, Js::TypedArrayBase* typedArrayBase, RecyclableObject* obj, int64 length, Arguments& args, ScriptContext* scriptContext); - template + template static Var FindObjectHelper(RecyclableObject* obj, int64 length, int64 start, RecyclableObject* callBackFn, Var thisArg, ScriptContext* scriptContext); template static Var ReduceHelper(JavascriptArray* pArr, Js::TypedArrayBase* typedArrayBase, RecyclableObject* obj, T length, Arguments& args, ScriptContext* scriptContext); @@ -546,6 +554,16 @@ namespace Js return fromIndex; } + // Struct to hold info used by Sorting algorithms for Array.prototype.sort and TypedArray.prototype.sort + struct CompareVarsInfo + { + ScriptContext* scriptContext; + Field(RecyclableObject*) compFn; // User provided JS comparison method + bool (*compareType)(JavascriptArray::CompareVarsInfo*, const void*, const void*); // C++ comparison method to wrap user provided method + }; + + template static void TypedArraySort(T* list, uint32 length, JavascriptArray::CompareVarsInfo* compareInfo, ArenaAllocator* allocator); + protected: template bool IsMissingHeadSegmentItemImpl(const uint32 index) const; SegmentBTreeRoot * GetSegmentMap() const; @@ -555,6 +573,10 @@ namespace Js template static void CopyHeadIfInlinedHeadSegment(JavascriptArray *array, Recycler *recycler); + // This helper function is mainly used as a precheck before going to the FillFromPrototype code path. + // Proxy and CustomExternalObject in the prototype chain will be returned as if ES5Array is there. + static bool HasAnyES5ArrayInPrototypeChain(JavascriptArray *arr, bool forceCheckProtoChain = false); + private: void SetSegmentMap(SegmentBTreeRoot * segmentMap); void ClearSegmentMap(); @@ -623,34 +645,26 @@ namespace Js template void AllocateHead(); template void EnsureHead(); - uint32 sort(__inout_ecount(*length) Field(Var) *orig, uint32 *length, ScriptContext *scriptContext); - BOOL GetPropertyBuiltIns(PropertyId propertyId, Var* value); bool GetSetterBuiltIns(PropertyId propertyId, PropertyValueInfo* info, DescriptorFlags* descriptorFlags); private: - struct Element - { - Field(Var) Value; - Field(JavascriptString*) StringValue; - }; - - static int __cdecl CompareElements(void* context, const void* elem1, const void* elem2); - void SortElements(Element* elements, uint32 left, uint32 right); + template static void InsertionSort(T* list, uint32 length, JavascriptArray::CompareVarsInfo* cvInfo); + template static void MergeSort(T* list, uint32 length, JavascriptArray::CompareVarsInfo* cvInfo, ArenaAllocator* allocator); + template static Var SortHelper(Var array, JavascriptArray::CompareVarsInfo* cvInfo); template static void ForEachOwnMissingArrayIndexOfObject(JavascriptArray *baseArr, JavascriptArray *destArray, RecyclableObject* obj, uint32 startIndex, uint32 limitIndex, uint32 destIndex, Fn fn); - // This helper function is mainly used as a precheck before going to the FillFromPrototype code path. - // Proxy and CustomExternalObject in the prototype chain will be returned as if ES5Array is there. - static bool HasAnyES5ArrayInPrototypeChain(JavascriptArray *arr, bool forceCheckProtoChain = false); - // NativeArrays may change it's content type, but not others template static bool MayChangeType() { return false; } + // Like normal VarIs, but will return false for if the array has transitioned to ES5Array type. + template static bool VarIsWithoutES5Array(RecyclableObject* object); + template - static BOOL TryTemplatedGetItem(T *arr, P index, Var *element, ScriptContext *scriptContext, bool checkHasItem = true) + static BOOL TryTemplatedGetItem(RecyclableObject* arr, P index, Var *element, ScriptContext *scriptContext, bool checkHasItem = true) { - return T::Is(arr) ? JavascriptArray::TemplatedGetItem(arr, index, element, scriptContext, checkHasItem) : + return VarIsWithoutES5Array(arr) ? JavascriptArray::TemplatedGetItem(static_cast(arr), index, element, scriptContext, checkHasItem) : JavascriptOperators::GetItem(arr, index, element, scriptContext); } @@ -660,20 +674,21 @@ namespace Js for (uint32 i = startIndex; i < limitIndex; i++) { Var element; - fn(i, TryTemplatedGetItem(arr, i, &element, scriptContext) ? element : missingItem); + RecyclableObject* curArr = arr; + fn(i, TryTemplatedGetItem(curArr, i, &element, scriptContext) ? element : missingItem); - if (hasSideEffect && MayChangeType() && !T::Is(arr)) + if (hasSideEffect && MayChangeType() && !VarIsWithoutES5Array(curArr)) { - // The function has changed, go to another ForEachItemInRange. It is possible that the array might have changed to + // The function has changed, go to another ForEachItemInRange. It is possible that the array might have changed to // an ES5Array, in such cases we don't need to call the JavascriptArray specific implementation. - if (JavascriptArray::Is(arr)) + if (JavascriptArray::IsNonES5Array(curArr)) { - JavascriptArray::FromVar(arr)->template ForEachItemInRange(i + 1, limitIndex, missingItem, scriptContext, fn); + UnsafeVarTo(curArr)->template ForEachItemInRange(i + 1, limitIndex, missingItem, scriptContext, fn); return; } else { - AssertOrFailFastMsg(ES5Array::Is(arr), "The array should have been converted to an ES5Array"); + AssertOrFailFastMsg(VarIs(curArr), "The array should have been converted to an ES5Array"); } } } @@ -685,22 +700,23 @@ namespace Js for (P i = startIndex; i < limitIndex; i++) { Var element; - if (TryTemplatedGetItem(arr, i, &element, scriptContext)) + RecyclableObject* curArr = arr; + if (TryTemplatedGetItem(curArr, i, &element, scriptContext)) { fn(i, element); - if (hasSideEffect && MayChangeType() && !T::Is(arr)) + if (hasSideEffect && MayChangeType() && !VarIsWithoutES5Array(curArr)) { - // The function has changed, go to another ForEachItemInRange. It is possible that the array might have changed to + // The function has changed, go to another ForEachItemInRange. It is possible that the array might have changed to // an ES5Array, in such cases we don't need to call the JavascriptArray specific implementation. - if (JavascriptArray::Is(arr)) + if (JavascriptArray::IsNonES5Array(curArr)) { - JavascriptArray::FromVar(arr)->template ForEachItemInRange(i + 1, limitIndex, scriptContext, fn); + UnsafeVarTo(curArr)->template ForEachItemInRange(i + 1, limitIndex, scriptContext, fn); return; } else { - AssertOrFailFastMsg(ES5Array::Is(arr), "The array should have been converted to an ES5Array"); + AssertOrFailFastMsg(VarIs(curArr), "The array should have been converted to an ES5Array"); } } } @@ -723,10 +739,10 @@ namespace Js TemplatedForEachItemInRange(this, startIndex, limitIndex, scriptContext, fn); break; case TypeIds_NativeIntArray: - TemplatedForEachItemInRange(JavascriptNativeIntArray::FromVar(this), startIndex, limitIndex, scriptContext, fn); + TemplatedForEachItemInRange(VarTo(this), startIndex, limitIndex, scriptContext, fn); break; case TypeIds_NativeFloatArray: - TemplatedForEachItemInRange(JavascriptNativeFloatArray::FromVar(this), startIndex, limitIndex, scriptContext, fn); + TemplatedForEachItemInRange(VarTo(this), startIndex, limitIndex, scriptContext, fn); break; default: Assert(false); @@ -743,10 +759,10 @@ namespace Js TemplatedForEachItemInRange(this, startIndex, limitIndex, missingItem, scriptContext, fn); break; case TypeIds_NativeIntArray: - TemplatedForEachItemInRange(JavascriptNativeIntArray::FromVar(this), startIndex, limitIndex, missingItem, scriptContext, fn); + TemplatedForEachItemInRange(VarTo(this), startIndex, limitIndex, missingItem, scriptContext, fn); break; case TypeIds_NativeFloatArray: - TemplatedForEachItemInRange(JavascriptNativeFloatArray::FromVar(this), startIndex, limitIndex, missingItem, scriptContext, fn); + TemplatedForEachItemInRange(VarTo(this), startIndex, limitIndex, missingItem, scriptContext, fn); break; default: Assert(false); @@ -854,11 +870,11 @@ namespace Js static void SetConcatItem(Var aItem, uint idxArg, JavascriptArray* pDestArray, RecyclableObject* pDestObj, T idxDest, ScriptContext *scriptContext); template - static void ConcatArgs(RecyclableObject* pDestObj, TypeId* remoteTypeIds, Js::Arguments& args, ScriptContext* scriptContext, uint start, + static void ConcatArgs(RecyclableObject* pDestObj, TypeId* remoteTypeIds, Js::Arguments& args, ScriptContext* scriptContext, uint start, BigIndex startIdxDest, ConcatSpreadableState previousItemSpreadableState = ConcatSpreadableState_NotChecked, BigIndex *firstPromotedItemLength = nullptr); template - static void ConcatArgs(RecyclableObject* pDestObj, TypeId* remoteTypeIds, Js::Arguments& args, ScriptContext* scriptContext, uint start = 0, uint startIdxDest = 0u, + static void ConcatArgs(RecyclableObject* pDestObj, TypeId* remoteTypeIds, Js::Arguments& args, ScriptContext* scriptContext, uint start = 0, uint startIdxDest = 0u, ConcatSpreadableState previousItemSpreadableState = ConcatSpreadableState_NotChecked, BigIndex *firstPromotedItemLength = nullptr); static JavascriptArray* ConcatIntArgs(JavascriptNativeIntArray* pDestArray, TypeId* remoteTypeIds, Js::Arguments& args, ScriptContext* scriptContext); @@ -933,6 +949,24 @@ namespace Js } }; + template <> inline bool VarIsImpl(RecyclableObject* obj) + { + return DynamicObject::IsAnyArray(obj); + } + + template bool JavascriptArray::VarIsWithoutES5Array(RecyclableObject* object) + { + return VarIs(object); + } + template <> inline bool JavascriptArray::VarIsWithoutES5Array(RecyclableObject* object) + { + return true; + } + template <> inline bool JavascriptArray::VarIsWithoutES5Array(RecyclableObject* object) + { + return IsNonES5Array(object); + } + // Ideally we would propagate the throw flag setting of true from the array operations down to the [[Delete]]/[[Put]]/... methods. But that is a big change // so we are checking for failure on DeleteProperty/DeleteItem/... etc instead. This helper makes that checking a little less intrusive. class ThrowTypeErrorOnFailureHelper @@ -971,10 +1005,7 @@ namespace Js Field(RecyclerWeakReference *) weakRefToFuncBody; public: - static bool Is(Var aValue); static bool Is(TypeId typeId); - static JavascriptNativeArray* FromVar(Var aValue); - static JavascriptNativeArray* UnsafeFromVar(Var aValue); void SetArrayCallSite(ProfileId index, RecyclerWeakReference *weakRef) { @@ -1003,9 +1034,14 @@ namespace Js Var FindMinOrMax(Js::ScriptContext * scriptContext, bool findMax); template Var FindMinOrMax(Js::ScriptContext * scriptContext, bool findMax); // NativeInt arrays can't have NaNs or -0 - static void PopWithNoDst(Var nativeArray); + static void PopWithNoDst(ScriptContext* scriptContext, Var nativeArray); }; + template <> inline bool VarIsImpl(RecyclableObject* obj) + { + return JavascriptNativeArray::Is(JavascriptOperators::GetTypeId(obj)); + } + class JavascriptNativeFloatArray; class JavascriptNativeIntArray : public JavascriptNativeArray { @@ -1032,11 +1068,7 @@ namespace Js static Var NewInstance(RecyclableObject* function, CallInfo callInfo, ...); static Var NewInstance(RecyclableObject* function, Arguments args); - static bool Is(Var aValue); static bool Is(TypeId typeId); - static JavascriptNativeIntArray* FromVar(Var aValue); - static JavascriptNativeIntArray* UnsafeFromVar(Var aValue); - static bool IsNonCrossSite(Var aValue); typedef int32 TElement; @@ -1113,6 +1145,11 @@ namespace Js } }; + template <> inline bool VarIsImpl(RecyclableObject* obj) + { + return JavascriptNativeIntArray::Is(JavascriptOperators::GetTypeId(obj)); + } + #if ENABLE_COPYONACCESS_ARRAY class JavascriptCopyOnAccessNativeIntArray : public JavascriptNativeIntArray { @@ -1131,11 +1168,6 @@ namespace Js virtual BOOL IsCopyOnAccessArray() { return TRUE; } - static bool Is(Var aValue); - static bool Is(TypeId typeId); - static JavascriptCopyOnAccessNativeIntArray* FromVar(Var aValue); - static JavascriptCopyOnAccessNativeIntArray* UnsafeFromVar(Var aValue); - static DynamicType * GetInitialType(ScriptContext * scriptContext); void ConvertCopyOnAccessSegment(); @@ -1170,6 +1202,11 @@ namespace Js } }; + + template <> inline bool VarIsImpl(RecyclableObject* obj) + { + return JavascriptOperators::GetTypeId(obj) == TypeIds_CopyOnAccessNativeIntArray; + } #endif class JavascriptNativeFloatArray : public JavascriptNativeArray @@ -1198,11 +1235,7 @@ namespace Js static Var NewInstance(RecyclableObject* function, CallInfo callInfo, ...); static Var NewInstance(RecyclableObject* function, Arguments args); - static bool Is(Var aValue); static bool Is(TypeId typeId); - static JavascriptNativeFloatArray* FromVar(Var aValue); - static JavascriptNativeFloatArray* UnsafeFromVar(Var aValue); - static bool IsNonCrossSite(Var aValue); typedef double TElement; @@ -1254,7 +1287,7 @@ namespace Js } static DynamicType * GetInitialType(ScriptContext * scriptContext); - static Var Push(ScriptContext * scriptContext, Var * nativeFloatArray, double value); + static Var Push(ScriptContext * scriptContext, Var nativeFloatArray, double value); static JavascriptNativeFloatArray * BoxStackInstance(JavascriptNativeFloatArray * instance, bool deepCopy); static double Pop(ScriptContext * scriptContext, Var nativeFloatArray); private: @@ -1284,6 +1317,11 @@ namespace Js }; + template <> inline bool VarIsImpl(RecyclableObject* obj) + { + return JavascriptNativeFloatArray::Is(JavascriptOperators::GetTypeId(obj)); + } + template <> inline bool JavascriptArray::MayChangeType() { return true; } template <> diff --git a/lib/Runtime/Library/JavascriptArray.inl b/lib/Runtime/Library/JavascriptArray.inl index 78de6803fd2..2a2e09dd3c6 100644 --- a/lib/Runtime/Library/JavascriptArray.inl +++ b/lib/Runtime/Library/JavascriptArray.inl @@ -480,6 +480,7 @@ namespace Js inline void JavascriptArray::GenericDirectSetItemAt(const uint32 index, Var newValue) { + newValue = CrossSite::MarshalVar(this->GetScriptContext(), newValue); this->DirectSetItemAt(index, newValue); } diff --git a/lib/Runtime/Library/JavascriptArrayIterator.cpp b/lib/Runtime/Library/JavascriptArrayIterator.cpp index 6bd164d1543..418a145e1ad 100644 --- a/lib/Runtime/Library/JavascriptArrayIterator.cpp +++ b/lib/Runtime/Library/JavascriptArrayIterator.cpp @@ -19,26 +19,6 @@ namespace Js } } - bool JavascriptArrayIterator::Is(Var aValue) - { - TypeId typeId = JavascriptOperators::GetTypeId(aValue); - return typeId == TypeIds_ArrayIterator; - } - - JavascriptArrayIterator* JavascriptArrayIterator::FromVar(Var aValue) - { - AssertOrFailFastMsg(Is(aValue), "Ensure var is actually a 'JavascriptArrayIterator'"); - - return static_cast(aValue); - } - - JavascriptArrayIterator* JavascriptArrayIterator::UnsafeFromVar(Var aValue) - { - AssertMsg(Is(aValue), "Ensure var is actually a 'JavascriptArrayIterator'"); - - return static_cast(aValue); - } - Var JavascriptArrayIterator::EntryNext(RecyclableObject* function, CallInfo callInfo, ...) { PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); @@ -56,33 +36,33 @@ namespace Js Var thisObj = args[0]; - if (!JavascriptArrayIterator::Is(thisObj)) + if (!VarIs(thisObj)) { JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedArrayIterator, _u("Array Iterator.prototype.next")); } - JavascriptArrayIterator* iterator = JavascriptArrayIterator::FromVar(thisObj); + JavascriptArrayIterator* iterator = VarTo(thisObj); Var iterable = iterator->m_iterableObject; if (iterable == nullptr) { - return library->CreateIteratorResultObjectUndefinedTrue(); + return library->CreateIteratorResultObjectDone(); } int64 length; JavascriptArray* pArr = nullptr; TypedArrayBase *typedArrayBase = nullptr; - if (JavascriptArray::Is(iterable) && !JavascriptArray::FromVar(iterable)->IsCrossSiteObject()) + if (JavascriptArray::IsNonES5Array(iterable) && !VarTo(iterable)->IsCrossSiteObject()) { #if ENABLE_COPYONACCESS_ARRAY - Assert(!JavascriptCopyOnAccessNativeIntArray::Is(iterable)); + Assert(!VarIs(iterable)); #endif pArr = JavascriptArray::FromAnyArray(iterable); length = pArr->GetLength(); } - else if (TypedArrayBase::Is(iterable)) + else if (VarIs(iterable)) { - typedArrayBase = TypedArrayBase::UnsafeFromVar(iterable); + typedArrayBase = UnsafeVarTo(iterable); if (typedArrayBase->IsDetachedBuffer()) { JavascriptError::ThrowTypeError(scriptContext, JSERR_DetachedTypedArray); @@ -102,14 +82,14 @@ namespace Js // Nulling out the m_iterableObject field is important so that the iterator // does not keep the iterable object alive after iteration is completed. iterator->m_iterableObject = nullptr; - return library->CreateIteratorResultObjectUndefinedTrue(); + return library->CreateIteratorResultObjectDone(); } iterator->m_nextIndex += 1; if (iterator->m_kind == JavascriptArrayIteratorKind::Key) { - return library->CreateIteratorResultObjectValueFalse(JavascriptNumber::ToVar(index, scriptContext)); + return library->CreateIteratorResultObject(JavascriptNumber::ToVar(index, scriptContext)); } Var value; @@ -130,7 +110,7 @@ namespace Js if (iterator->m_kind == JavascriptArrayIteratorKind::Value) { - return library->CreateIteratorResultObjectValueFalse(value); + return library->CreateIteratorResultObject(value); } Assert(iterator->m_kind == JavascriptArrayIteratorKind::KeyAndValue); @@ -140,6 +120,6 @@ namespace Js keyValueTuple->SetItem(0, JavascriptNumber::ToVar(index, scriptContext), PropertyOperation_None); keyValueTuple->SetItem(1, value, PropertyOperation_None); - return library->CreateIteratorResultObjectValueFalse(keyValueTuple); + return library->CreateIteratorResultObject(keyValueTuple); } } //namespace Js diff --git a/lib/Runtime/Library/JavascriptArrayIterator.h b/lib/Runtime/Library/JavascriptArrayIterator.h index 8ce7d5dfc73..c4fef665919 100644 --- a/lib/Runtime/Library/JavascriptArrayIterator.h +++ b/lib/Runtime/Library/JavascriptArrayIterator.h @@ -27,10 +27,6 @@ namespace Js public: JavascriptArrayIterator(DynamicType* type, Var iterable, JavascriptArrayIteratorKind kind); - static bool Is(Var aValue); - static JavascriptArrayIterator* FromVar(Var aValue); - static JavascriptArrayIterator* UnsafeFromVar(Var aValue); - class EntryInfo { public: @@ -42,4 +38,9 @@ namespace Js public: Var GetIteratorObjectForHeapEnum() { return m_iterableObject; } }; + + template <> inline bool VarIsImpl(RecyclableObject* obj) + { + return JavascriptOperators::GetTypeId(obj) == TypeIds_ArrayIterator; + } } // namespace Js diff --git a/lib/Runtime/Library/JavascriptAsyncFromSyncIterator.cpp b/lib/Runtime/Library/JavascriptAsyncFromSyncIterator.cpp new file mode 100644 index 00000000000..72dafaf6047 --- /dev/null +++ b/lib/Runtime/Library/JavascriptAsyncFromSyncIterator.cpp @@ -0,0 +1,326 @@ +//------------------------------------------------------------------------------------------------------- +// Copyright (C) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. +//------------------------------------------------------------------------------------------------------- +#include "RuntimeLibraryPch.h" + +namespace Js +{ + Var JavascriptAsyncFromSyncIterator::AsyncFromSyncIteratorContinuation(RecyclableObject* result, ScriptContext* scriptContext) + { + JavascriptLibrary* library = scriptContext->GetLibrary(); + // 1. Let done be IteratorComplete(result). + // 2. IfAbruptRejectPromise(done, promiseCapability). + bool done; + try + { + done = JavascriptOperators::IteratorComplete(result, scriptContext); + } + catch (const JavascriptException& err) + { + JavascriptExceptionObject* exception = err.GetAndClear(); + return JavascriptPromise::CreateRejectedPromise(exception->GetThrownObject(scriptContext), scriptContext); + } + + // 3. Let value be IteratorValue(result). + // 4. IfAbruptRejectPromise(value, promiseCapability). + Var value = nullptr; + try + { + value = JavascriptOperators::IteratorValue(result, scriptContext); + } + catch (const JavascriptException& err) + { + JavascriptExceptionObject* exception = err.GetAndClear(); + return JavascriptPromise::CreateRejectedPromise(exception->GetThrownObject(scriptContext), scriptContext); + } + + // 5. Let valueWrapper be ? PromiseResolve(%Promise%, <>). + JavascriptPromise* valueWrapper = JavascriptPromise::InternalPromiseResolve(value, scriptContext); + + // 6. Let steps be the algorithm steps defined in Async-from-Sync Iterator Value Unwrap Functions. + // 7. Let onFulfilled be CreateBuiltinFunction(steps, <<[[Done]]>>). + // 8. Set onFulfilled.[[Done]] to done. + RecyclableObject* onFulfilled; + if (done) + { + onFulfilled = library->EnsureAsyncFromSyncIteratorValueUnwrapTrueFunction(); + } + else + { + onFulfilled = library->EnsureAsyncFromSyncIteratorValueUnwrapFalseFunction(); + } + + // 9. Perform ! PerformPromiseThen(valueWrapper, onFulfilled, undefined, promiseCapability). + // 10. Return promiseCapability.[[Promise]]. + return JavascriptPromise::CreateThenPromise(valueWrapper, onFulfilled, library->GetThrowerFunction(), scriptContext); + } + + Var JavascriptAsyncFromSyncIterator::EntryAsyncFromSyncIteratorValueUnwrapTrueFunction(RecyclableObject* function, CallInfo callInfo, ...) + { + ScriptContext* scriptContext = function->GetScriptContext(); + PROBE_STACK(scriptContext, Js::Constants::MinStackDefault); + ARGUMENTS(args, callInfo); + Assert(!(callInfo.Flags & CallFlags_New)); + AssertOrFailFastMsg(args.Info.Count > 1, "AsyncFromSyncIteratorValueUnwrap should never be called without an argument"); + JavascriptLibrary* library = scriptContext->GetLibrary(); + + return library->CreateIteratorResultObject(args[1], library->GetTrue()); + } + + Var JavascriptAsyncFromSyncIterator::EntryAsyncFromSyncIteratorValueUnwrapFalseFunction(RecyclableObject* function, CallInfo callInfo, ...) + { + ScriptContext* scriptContext = function->GetScriptContext(); + PROBE_STACK(scriptContext, Js::Constants::MinStackDefault); + ARGUMENTS(args, callInfo); + Assert(!(callInfo.Flags & CallFlags_New)); + AssertOrFailFastMsg(args.Info.Count > 1, "AsyncFromSyncIteratorValueUnwrap should never be called without an argument"); + JavascriptLibrary* library = scriptContext->GetLibrary(); + + return library->CreateIteratorResultObject(args[1], library->GetFalse()); + } + + Var JavascriptAsyncFromSyncIterator::EntryAsyncFromSyncIteratorNext(RecyclableObject* function, CallInfo callInfo, ...) + { + ScriptContext* scriptContext = function->GetScriptContext(); + PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); + ARGUMENTS(args, callInfo); + Assert(!(callInfo.Flags & CallFlags_New)); + AssertMsg(args.Info.Count > 0, "AsyncFromSyncIteratorNext should have implicit this"); + // 1. Let O be the this value. + // 2. Let promiseCapability be ! NewPromiseCapability(%Promise%). + // promise creation deferred to the end to simplify logic + + // this step skipped as no codepath exists that will enable reaching here with wrong object type + // 3. If Type(O) is not Object, or if O does not have a [[SyncIteratorRecord]] internal slot, then + // a. Let invalidIteratorError be a newly created TypeError object. + // b. Perform ! Call(promiseCapability.[[Reject]], undefined, << invalidIteratorError >>). + // c. Return promiseCapability.[[Promise]]. + + // this will failfast if the logic that makes steps 3 irrelevant changes + JavascriptAsyncFromSyncIterator* thisValue = VarTo(args[0]); + + // 4. Let syncIteratorRecord be O.[[SyncIteratorRecord]]. + RecyclableObject* syncIteratorRecord = thisValue->GetSyncIterator(); + RecyclableObject* result = nullptr; + // 5. Let result be IteratorNext(syncIteratorRecord, value). + try + { + result = JavascriptOperators::IteratorNext(syncIteratorRecord, scriptContext, thisValue->EnsureSyncNextFunction(scriptContext), args.Info.Count > 1 ? args[1] : nullptr); + } + catch (const JavascriptException& err) + { + // 6. IfAbruptRejectPromise(result, promiseCapability). + JavascriptExceptionObject* exception = err.GetAndClear(); + if (exception != nullptr) + { + return JavascriptPromise::CreateRejectedPromise(exception->GetThrownObject(scriptContext), scriptContext); + } + } + + // 7. Return ! AsyncFromSyncIteratorContinuation(result, promiseCapability). + return JavascriptAsyncFromSyncIterator::AsyncFromSyncIteratorContinuation(result, scriptContext); + } + + Var JavascriptAsyncFromSyncIterator::EntryAsyncFromSyncIteratorReturn(RecyclableObject* function, CallInfo callInfo, ...) + { + ScriptContext* scriptContext = function->GetScriptContext(); + PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); + ARGUMENTS(args, callInfo); + Assert(!(callInfo.Flags & CallFlags_New)); + AssertMsg(args.Info.Count > 0, "AsyncFromSyncIteratorReturn should have implicit this"); + JavascriptLibrary* library = scriptContext->GetLibrary(); + + // 1. Let O be the this value. + // 2. Let promiseCapability be ! NewPromiseCapability(%Promise%). + // promise creation deferred to the end to simplify logic + + // this step skipped as no codepath exists that will enable reaching here with wrong object type + // 3. If Type(O) is not Object, or if O does not have a [[SyncIteratorRecord]] internal slot, then + // a. Let invalidIteratorError be a newly created TypeError object. + // b. Perform ! Call(promiseCapability.[[Reject]], undefined, << invalidIteratorError >>). + // c. Return promiseCapability.[[Promise]]. + + // this will failfast if the logic that makes steps 3-6 irrelevant changes + JavascriptAsyncFromSyncIterator* thisValue = VarTo(args[0]); + + // 4. Let syncIteratorRecord be O.[[SyncIteratorRecord]]. + RecyclableObject* syncIteratorRecord = thisValue->GetSyncIterator(); + Var returnMethod = nullptr; + Var result = nullptr; + + // 5. Let return be GetMethod(syncIterator, "return"). + // 6. IfAbruptRejectPromise(return, promiseCapability). + // 7. If return is undefined, then + // a. Perform ! Call(promiseCapability.[[Reject]], undefined, << value >>). + // b. Return promiseCapability.[[Promise]]. + try + { + returnMethod = JavascriptOperators::GetProperty(syncIteratorRecord, PropertyIds::return_, scriptContext); + } + catch (const JavascriptException& err) + { + JavascriptExceptionObject* exception = err.GetAndClear(); + if (exception != nullptr) + { + return JavascriptPromise::CreateRejectedPromise(exception->GetThrownObject(scriptContext), scriptContext); + } + } + + if (returnMethod == library->GetUndefined()) + { + result = library->CreateIteratorResultObject(args.Info.Count > 1 ? args[1] : library->GetUndefined(), library->GetTrue()); + return JavascriptPromise::CreateResolvedPromise(result, scriptContext); + } + + if (!JavascriptConversion::IsCallable(returnMethod)) + { + JavascriptError* typeError = library->CreateTypeError(); + JavascriptError::SetErrorMessage(typeError, JSERR_NeedFunction, _u("AsyncFromSyncIteratorThrow.prototype.return"), scriptContext); + return JavascriptPromise::CreateRejectedPromise(typeError, scriptContext); + } + + // 8. Let result be Call(return, syncIterator, << value >>). + try + { + RecyclableObject* callable = VarTo(returnMethod); + Var value = args.Info.Count > 1 ? args[1] : nullptr; + result = scriptContext->GetThreadContext()->ExecuteImplicitCall(callable, ImplicitCall_Accessor, [=]() -> Var + { + Js::Var args[] = { syncIteratorRecord, value }; + Js::CallInfo callInfo(Js::CallFlags_Value, _countof(args) + (value == nullptr ? -1 : 0)); + return JavascriptFunction::CallFunction(callable, callable->GetEntryPoint(), Arguments(callInfo, args)); + }); + } + catch (const JavascriptException& err) + { + // 9. IfAbruptRejectPromise(result, promiseCapability). + JavascriptExceptionObject* exception = err.GetAndClear(); + if (exception != nullptr) + { + return JavascriptPromise::CreateRejectedPromise(exception->GetThrownObject(scriptContext), scriptContext); + } + } + + // 10. If Type(result) is not Object, then + // a. Perform ! Call(promiseCapability.[[Reject]], undefined, << a newly created TypeError object >>). + // b. Return promiseCapability.[[Promise]]. + if (!JavascriptOperators::IsObject(result)) + { + JavascriptError* typeError = library->CreateTypeError(); + JavascriptError::SetErrorMessage(typeError, JSERR_NonObjectFromIterable, _u("AsyncFromSyncIteratorThrow.prototype.return"), scriptContext); + return JavascriptPromise::CreateRejectedPromise(typeError, scriptContext); + } + + // 11. Return ! AsyncFromSyncIteratorContinuation(result, promiseCapability). + return JavascriptAsyncFromSyncIterator::AsyncFromSyncIteratorContinuation(UnsafeVarTo(result), scriptContext); + } + + Var JavascriptAsyncFromSyncIterator::EntryAsyncFromSyncIteratorThrow(RecyclableObject* function, CallInfo callInfo, ...) + { + ScriptContext* scriptContext = function->GetScriptContext(); + PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); + ARGUMENTS(args, callInfo); + Assert(!(callInfo.Flags & CallFlags_New)); + AssertMsg(args.Info.Count > 0, "AsyncFromSyncIteratorThrow should have implicit this"); + JavascriptLibrary* library = scriptContext->GetLibrary(); + + // 1. Let O be the this value. + // 2. Let promiseCapability be ! NewPromiseCapability(%Promise%). + // promise creation deferred to the end to simplify logic + + // this step skipped as no code path exists that will enable reaching here with wrong object type + // 3. If Type(O) is not Object, or if O does not have a [[SyncIteratorRecord]] internal slot, then + // a. Let invalidIteratorError be a newly created TypeError object. + // b. Perform ! Call(promiseCapability.[[Reject]], undefined, << invalidIteratorError >>). + // c. Return promiseCapability.[[Promise]]. + + // this will failfast if the logic that makes step 3 irrelevant changes + JavascriptAsyncFromSyncIterator* thisValue = VarTo(args[0]); + + // 4. Let syncIteratorRecord be O.[[SyncIteratorRecord]]. + RecyclableObject* syncIteratorRecord = thisValue->GetSyncIterator(); + Var throwMethod = nullptr; + + // 5. Let throw be GetMethod(syncIterator, "throw"). + // 6. IfAbruptRejectPromise(throw, promiseCapability). + // 7. If throw is undefined, then + // a. Perform ! Call(promiseCapability.[[Reject]], undefined, << value >>). + // b. Return promiseCapability.[[Promise]]. + try + { + throwMethod = JavascriptOperators::GetProperty(syncIteratorRecord, PropertyIds::throw_, scriptContext); + } + catch (const JavascriptException& err) + { + JavascriptExceptionObject* exception = err.GetAndClear(); + if (exception != nullptr) + { + return JavascriptPromise::CreateRejectedPromise(exception->GetThrownObject(scriptContext), scriptContext); + } + } + + if (throwMethod == library->GetUndefined()) + { + return JavascriptPromise::CreateRejectedPromise(library->GetUndefined(), scriptContext); + } + + if (!JavascriptConversion::IsCallable(throwMethod)) + { + + JavascriptError* typeError = library->CreateTypeError(); + JavascriptError::SetErrorMessage(typeError, JSERR_NeedFunction, _u("AsyncFromSyncIteratorThrow.prototype.throw"), scriptContext); + return JavascriptPromise::CreateRejectedPromise(typeError, scriptContext); + } + + // 8. Let result be Call(throw, syncIterator, << value >>). + Var result = nullptr; + try + { + RecyclableObject* callable = VarTo(throwMethod); + Var value = args.Info.Count > 1 ? args[1] : nullptr; + result = scriptContext->GetThreadContext()->ExecuteImplicitCall(callable, ImplicitCall_Accessor, [=]() -> Var + { + Js::Var args[] = { syncIteratorRecord, value }; + Js::CallInfo callInfo(Js::CallFlags_Value, _countof(args) + (value == nullptr ? -1 : 0)); + return JavascriptFunction::CallFunction(callable, callable->GetEntryPoint(), Arguments(callInfo, args)); + }); + } + catch (const JavascriptException& err) + { + // 9. IfAbruptRejectPromise(result, promiseCapability). + JavascriptExceptionObject* exception = err.GetAndClear(); + if (exception != nullptr) + { + return JavascriptPromise::CreateRejectedPromise(exception->GetThrownObject(scriptContext), scriptContext); + } + } + + // 10. If Type(result) is not Object, then + // a. Perform ! Call(promiseCapability.[[Reject]], undefined, << a newly created TypeError object >>). + // b. Return promiseCapability.[[Promise]]. + if (!JavascriptOperators::IsObject(result)) + { + JavascriptError* typeError = library->CreateTypeError(); + JavascriptError::SetErrorMessage(typeError, JSERR_NonObjectFromIterable, _u("AsyncFromSyncIteratorThrow.prototype.throw"), scriptContext); + return JavascriptPromise::CreateRejectedPromise(typeError, scriptContext); + } + + // 11. Return ! AsyncFromSyncIteratorContinuation(result, promiseCapability). + return JavascriptAsyncFromSyncIterator::AsyncFromSyncIteratorContinuation(UnsafeVarTo(result), scriptContext); + } + + RecyclableObject* JavascriptAsyncFromSyncIterator::EnsureSyncNextFunction(ScriptContext* scriptContext) + { + if (syncNextFunction == nullptr) + { + syncNextFunction = JavascriptOperators::CacheIteratorNext(syncIterator, scriptContext); + } + return syncNextFunction; + } + + template <> bool VarIsImpl(RecyclableObject* obj) + { + return JavascriptOperators::GetTypeId(obj) == TypeIds_AsyncFromSyncIterator; + } +} diff --git a/lib/Runtime/Library/JavascriptAsyncFromSyncIterator.h b/lib/Runtime/Library/JavascriptAsyncFromSyncIterator.h new file mode 100644 index 00000000000..0c5407d6b8e --- /dev/null +++ b/lib/Runtime/Library/JavascriptAsyncFromSyncIterator.h @@ -0,0 +1,43 @@ +//------------------------------------------------------------------------------------------------------- +// Copyright (C) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. +//------------------------------------------------------------------------------------------------------- +#pragma once + +namespace Js +{ + class JavascriptAsyncFromSyncIterator : public DynamicObject + { + public: + JavascriptAsyncFromSyncIterator(DynamicType* type, RecyclableObject* syncIterator) : + DynamicObject(type), syncIterator(syncIterator) { } + + RecyclableObject* GetSyncIterator() { return this->syncIterator; } + RecyclableObject* JavascriptAsyncFromSyncIterator::EnsureSyncNextFunction(ScriptContext* scriptContext); + + static Var AsyncFromSyncIteratorContinuation(RecyclableObject* result, ScriptContext* scriptContext); + static Var EntryAsyncFromSyncIteratorNext(RecyclableObject* function, CallInfo callInfo, ...); + static Var EntryAsyncFromSyncIteratorThrow(RecyclableObject* function, CallInfo callInfo, ...); + static Var EntryAsyncFromSyncIteratorReturn(RecyclableObject* function, CallInfo callInfo, ...); + + static Var EntryAsyncFromSyncIteratorValueUnwrapFalseFunction(RecyclableObject* function, CallInfo callInfo, ...); + static Var EntryAsyncFromSyncIteratorValueUnwrapTrueFunction(RecyclableObject* function, CallInfo callInfo, ...); + + class EntryInfo + { + public: + static FunctionInfo Next; + static FunctionInfo Return; + static FunctionInfo Throw; + }; + + private: + Field(RecyclableObject*) syncIterator; + Field(RecyclableObject*) syncNextFunction; + protected: + DEFINE_VTABLE_CTOR(JavascriptAsyncFromSyncIterator, DynamicObject); + }; + + template <> bool VarIsImpl(RecyclableObject* obj); + +} // namespace Js diff --git a/lib/Runtime/Library/JavascriptAsyncFunction.cpp b/lib/Runtime/Library/JavascriptAsyncFunction.cpp new file mode 100644 index 00000000000..c6d2ff83562 --- /dev/null +++ b/lib/Runtime/Library/JavascriptAsyncFunction.cpp @@ -0,0 +1,363 @@ +//------------------------------------------------------------------------------------------------------- +// Copyright (C) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. +//------------------------------------------------------------------------------------------------------- +#include "RuntimeLibraryPch.h" + +using namespace Js; + +FunctionInfo JavascriptAsyncFunction::functionInfo( + FORCE_NO_WRITE_BARRIER_TAG(JavascriptAsyncFunction::EntryAsyncFunctionImplementation), + (FunctionInfo::Attributes)(FunctionInfo::DoNotProfile | FunctionInfo::ErrorOnNew)); + +JavascriptAsyncFunction::JavascriptAsyncFunction( + DynamicType* type, + GeneratorVirtualScriptFunction* scriptFunction) : + JavascriptGeneratorFunction(type, &functionInfo, scriptFunction) +{ + DebugOnly(VerifyEntryPoint()); +} + +JavascriptAsyncFunction* JavascriptAsyncFunction::New( + ScriptContext* scriptContext, + GeneratorVirtualScriptFunction* scriptFunction) +{ + return scriptContext->GetLibrary()->CreateAsyncFunction( + functionInfo.GetOriginalEntryPoint(), + scriptFunction); +} + +template<> +bool Js::VarIsImpl(RecyclableObject* obj) +{ + return VarIs(obj) && ( + VirtualTableInfo::HasVirtualTable(obj) || + VirtualTableInfo>::HasVirtualTable(obj) + ); +} + +Var JavascriptAsyncFunction::EntryAsyncFunctionImplementation( + RecyclableObject* function, + CallInfo callInfo, ...) +{ + auto* scriptContext = function->GetScriptContext(); + PROBE_STACK(scriptContext, Js::Constants::MinStackDefault); + ARGUMENTS(args, callInfo); + + auto* library = scriptContext->GetLibrary(); + auto* asyncFn = VarTo(function); + auto* scriptFn = asyncFn->GetGeneratorVirtualScriptFunction(); + auto* generator = library->CreateGenerator(args, scriptFn, library->GetNull()); + + return BeginAsyncFunctionExecution(generator); +} + +JavascriptPromise* JavascriptAsyncFunction::BeginAsyncFunctionExecution(JavascriptGenerator* generator) +{ + auto* library = generator->GetLibrary(); + auto* scriptContext = generator->GetScriptContext(); + auto* promise = library->CreatePromise(); + + auto* stepFn = library->CreateAsyncSpawnStepFunction( + EntryAsyncSpawnStepNextFunction, + generator, + library->GetUndefined()); + + JavascriptExceptionObject* exception = nullptr; + JavascriptPromiseResolveOrRejectFunction* resolve; + JavascriptPromiseResolveOrRejectFunction* reject; + JavascriptPromise::InitializePromise(promise, &resolve, &reject, scriptContext); + + try + { + AsyncSpawnStep(stepFn, generator, resolve, reject); + } + catch (const JavascriptException& err) + { + exception = err.GetAndClear(); + } + + if (exception != nullptr) + JavascriptPromise::TryRejectWithExceptionObject(exception, reject, scriptContext); + + return promise; +} + +Var JavascriptAsyncFunction::EntryAsyncSpawnStepNextFunction( + RecyclableObject* function, + CallInfo callInfo, ...) +{ + auto* scriptContext = function->GetScriptContext(); + PROBE_STACK(scriptContext, Js::Constants::MinStackDefault); + auto* stepFn = VarTo(function); + return stepFn->generator->CallGenerator(stepFn->argument, ResumeYieldKind::Normal); +} + +Var JavascriptAsyncFunction::EntryAsyncSpawnStepThrowFunction( + RecyclableObject* function, + CallInfo callInfo, ...) +{ + auto* scriptContext = function->GetScriptContext(); + PROBE_STACK(scriptContext, Js::Constants::MinStackDefault); + + auto* stepFn = VarTo(function); + return stepFn->generator->CallGenerator(stepFn->argument, ResumeYieldKind::Throw); +} + +Var JavascriptAsyncFunction::EntryAsyncSpawnCallStepFunction( + RecyclableObject* function, + CallInfo callInfo, ...) +{ + auto* scriptContext = function->GetScriptContext(); + PROBE_STACK(scriptContext, Js::Constants::MinStackDefault); + ARGUMENTS(args, callInfo); + + auto* library = scriptContext->GetLibrary(); + Var undefinedVar = library->GetUndefined(); + Var resolvedValue = args.Info.Count > 1 ? args[1] : undefinedVar; + + auto* stepFn = VarTo(function); + + JavascriptMethod method = stepFn->isReject + ? EntryAsyncSpawnStepThrowFunction + : EntryAsyncSpawnStepNextFunction; + + auto* nextStepFn = library->CreateAsyncSpawnStepFunction( + method, + stepFn->generator, + resolvedValue); + + AsyncSpawnStep(nextStepFn, stepFn->generator, stepFn->resolve, stepFn->reject); + return undefinedVar; +} + +void JavascriptAsyncFunction::AsyncSpawnStep( + JavascriptAsyncSpawnStepFunction* stepFunction, + JavascriptGenerator* generator, + Var resolve, + Var reject) +{ + ScriptContext* scriptContext = generator->GetScriptContext(); + BEGIN_SAFE_REENTRANT_REGION(scriptContext->GetThreadContext()) + + JavascriptLibrary* library = scriptContext->GetLibrary(); + Var undefinedVar = library->GetUndefined(); + + JavascriptExceptionObject* exception = nullptr; + RecyclableObject* result = nullptr; + + try + { + Var resultVar = CALL_FUNCTION( + scriptContext->GetThreadContext(), + stepFunction, + CallInfo(CallFlags_Value, 1), + undefinedVar); + + result = VarTo(resultVar); + } + catch (const JavascriptException& err) + { + exception = err.GetAndClear(); + } + + if (exception != nullptr) + { + // If the generator threw an exception, reject the promise + JavascriptPromise::TryRejectWithExceptionObject(exception, reject, scriptContext); + return; + } + + Assert(result != nullptr); + + Var value = JavascriptOperators::GetProperty(result, PropertyIds::value, scriptContext); + + // If the generator is done, resolve the promise + if (generator->IsCompleted()) + { + if (!JavascriptConversion::IsCallable(resolve)) + JavascriptError::ThrowTypeError(scriptContext, JSERR_NeedFunction); + + CALL_FUNCTION( + scriptContext->GetThreadContext(), + VarTo(resolve), + CallInfo(CallFlags_Value, 2), + undefinedVar, + value); + + return; + } + else + { + Assert(JavascriptOperators::GetTypeId(result) == TypeIds_AwaitObject); + } + + + // Chain off the yielded promise and step again + auto* successFunction = library->CreateAsyncSpawnStepFunction( + EntryAsyncSpawnCallStepFunction, + generator, + undefinedVar, + resolve, + reject); + + auto* failFunction = library->CreateAsyncSpawnStepFunction( + EntryAsyncSpawnCallStepFunction, + generator, + undefinedVar, + resolve, + reject, + true); + + auto* promise = JavascriptPromise::InternalPromiseResolve(value, scriptContext); + auto* unused = JavascriptPromise::UnusedPromiseCapability(scriptContext); + + JavascriptPromise::PerformPromiseThen( + promise, + unused, + successFunction, + failFunction, + scriptContext); + + END_SAFE_REENTRANT_REGION +} + +template<> +bool Js::VarIsImpl(RecyclableObject* obj) +{ + return VarIs(obj) && ( + VirtualTableInfo::HasVirtualTable(obj) || + VirtualTableInfo>::HasVirtualTable(obj) + ); +} + +#if ENABLE_TTD + +TTD::NSSnapObjects::SnapObjectType JavascriptAsyncFunction::GetSnapTag_TTD() const +{ + return TTD::NSSnapObjects::SnapObjectType::SnapAsyncFunction; +} + +void JavascriptAsyncFunction::ExtractSnapObjectDataInto(TTD::NSSnapObjects::SnapObject* objData, TTD::SlabAllocator& alloc) +{ + TTD::NSSnapObjects::SnapGeneratorFunctionInfo* fi = nullptr; + uint32 depCount = 0; + TTD_PTR_ID* depArray = nullptr; + + this->CreateSnapObjectInfo(alloc, &fi, &depArray, &depCount); + + if (depCount == 0) + { + TTD::NSSnapObjects::StdExtractSetKindSpecificInfo(objData, fi); + } + else + { + TTDAssert(depArray != nullptr, "depArray should be non-null if depCount is > 0"); + TTD::NSSnapObjects::StdExtractSetKindSpecificInfo(objData, fi, alloc, depCount, depArray); + } +} + +void JavascriptAsyncSpawnStepFunction::MarkVisitKindSpecificPtrs(TTD::SnapshotExtractor* extractor) +{ + if (this->generator != nullptr) + { + extractor->MarkVisitVar(this->generator); + } + + if (this->reject != nullptr) + { + extractor->MarkVisitVar(this->reject); + } + + if (this->resolve != nullptr) + { + extractor->MarkVisitVar(this->resolve); + } + + if (this->argument != nullptr) + { + extractor->MarkVisitVar(this->argument); + } +} + +TTD::NSSnapObjects::SnapObjectType JavascriptAsyncSpawnStepFunction::GetSnapTag_TTD() const +{ + return TTD::NSSnapObjects::SnapObjectType::JavascriptAsyncSpawnStepFunction; +} + +void JavascriptAsyncSpawnStepFunction::ExtractSnapObjectDataInto(TTD::NSSnapObjects::SnapObject* objData, TTD::SlabAllocator& alloc) +{ + TTD::NSSnapObjects::SnapJavascriptAsyncSpawnStepFunctionInfo* info = alloc.SlabAllocateStruct(); + info->generator = TTD_CONVERT_VAR_TO_PTR_ID(this->generator); + info->reject = this->reject; + info->resolve = this->resolve; + info->argument = this->argument; + info->isReject = this->isReject; + + info->entryPoint = 0; + JavascriptMethod entryPoint = this->GetFunctionInfo()->GetOriginalEntryPoint(); + if (entryPoint == JavascriptAsyncFunction::EntryAsyncSpawnStepNextFunction) + { + info->entryPoint = 1; + } + else if (entryPoint == JavascriptAsyncFunction::EntryAsyncSpawnStepThrowFunction) + { + info->entryPoint = 2; + } + else if (entryPoint == JavascriptAsyncFunction::EntryAsyncSpawnCallStepFunction) + { + info->entryPoint = 3; + } + else + { + TTDAssert(false, "Unexpected entrypoint found JavascriptAsyncSpawnStepArgumentExecutorFunction"); + } + + const uint32 maxDeps = 4; + uint32 depCount = 0; + TTD_PTR_ID* depArray = alloc.SlabReserveArraySpace(maxDeps); + if (this->reject != nullptr && TTD::JsSupport::IsVarComplexKind(this->reject)) + { + depArray[depCount] = TTD_CONVERT_VAR_TO_PTR_ID(this->reject); + depCount++; + } + + if (this->resolve != nullptr && TTD::JsSupport::IsVarComplexKind(this->resolve)) + { + depArray[depCount] = TTD_CONVERT_VAR_TO_PTR_ID(this->resolve); + depCount++; + } + + if (this->argument != nullptr && TTD::JsSupport::IsVarComplexKind(this->argument)) + { + depArray[depCount] = TTD_CONVERT_VAR_TO_PTR_ID(this->argument); + depCount++; + } + + if (this->generator != nullptr) + { + depArray[depCount] = TTD_CONVERT_VAR_TO_PTR_ID(this->generator); + depCount++; + } + + if (depCount > 0) + { + alloc.SlabCommitArraySpace(depCount, maxDeps); + } + else + { + alloc.SlabAbortArraySpace(maxDeps); + } + + if (depCount == 0) + { + TTD::NSSnapObjects::StdExtractSetKindSpecificInfo(objData, info); + } + else + { + TTDAssert(depArray != nullptr, "depArray should be non-null if depCount is > 0"); + TTD::NSSnapObjects::StdExtractSetKindSpecificInfo(objData, info, alloc, depCount, depArray); + } +} + +#endif diff --git a/lib/Runtime/Library/JavascriptAsyncFunction.h b/lib/Runtime/Library/JavascriptAsyncFunction.h new file mode 100644 index 00000000000..9e6f7fc281f --- /dev/null +++ b/lib/Runtime/Library/JavascriptAsyncFunction.h @@ -0,0 +1,117 @@ +//------------------------------------------------------------------------------------------------------- +// Copyright (C) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. +//------------------------------------------------------------------------------------------------------- +#pragma once + +namespace Js +{ + +class JavascriptAsyncFunction : public JavascriptGeneratorFunction +{ +private: + static FunctionInfo functionInfo; + + DEFINE_VTABLE_CTOR(JavascriptAsyncFunction, JavascriptGeneratorFunction); + DEFINE_MARSHAL_OBJECT_TO_SCRIPT_CONTEXT(JavascriptAsyncFunction); + +protected: + JavascriptAsyncFunction(DynamicType* type); + +public: + JavascriptAsyncFunction(DynamicType* type, GeneratorVirtualScriptFunction* scriptFunction); + + static JavascriptAsyncFunction* New( + ScriptContext* scriptContext, + GeneratorVirtualScriptFunction* scriptFunction); + + static Var EntryAsyncFunctionImplementation( + RecyclableObject* function, + CallInfo callInfo, ...); + + static JavascriptPromise* BeginAsyncFunctionExecution( + JavascriptGenerator* generator); + + static Var EntryAsyncSpawnExecutorFunction( + RecyclableObject* function, + CallInfo callInfo, ...); + + static Var EntryAsyncSpawnStepNextFunction( + RecyclableObject* function, + CallInfo callInfo, ...); + + static Var EntryAsyncSpawnStepThrowFunction( + RecyclableObject* function, + CallInfo callInfo, ...); + + static Var EntryAsyncSpawnCallStepFunction( + RecyclableObject* function, + CallInfo callInfo, ...); + + static bool Test(JavascriptFunction *obj) + { + return + VirtualTableInfo::HasVirtualTable(obj) || + VirtualTableInfo>::HasVirtualTable(obj); + } + +#if ENABLE_TTD + virtual TTD::NSSnapObjects::SnapObjectType GetSnapTag_TTD() const override; + virtual void ExtractSnapObjectDataInto(TTD::NSSnapObjects::SnapObject* objData, TTD::SlabAllocator& alloc) override; +#endif + + virtual VTableValue DummyVirtualFunctionToHinderLinkerICF() + { + return VTableValue::VtableJavascriptAsyncFunction; + } + +private: + static void AsyncSpawnStep( + JavascriptAsyncSpawnStepFunction* nextFunction, + JavascriptGenerator* generator, + Var resolve, + Var reject); +}; + +template<> +bool VarIsImpl(RecyclableObject* obj); + +class JavascriptAsyncSpawnStepFunction : public RuntimeFunction +{ +protected: + DEFINE_VTABLE_CTOR(JavascriptAsyncSpawnStepFunction, RuntimeFunction); + DEFINE_MARSHAL_OBJECT_TO_SCRIPT_CONTEXT(JavascriptAsyncSpawnStepFunction); + +public: + JavascriptAsyncSpawnStepFunction( + DynamicType* type, + FunctionInfo* functionInfo, + JavascriptGenerator* generator, + Var argument, + Var resolve = nullptr, + Var reject = nullptr, + bool isReject = false) : + RuntimeFunction(type, functionInfo), + generator(generator), + argument(argument), + resolve(resolve), + reject(reject), + isReject(isReject) {} + + Field(JavascriptGenerator*) generator; + Field(Var) reject; + Field(Var) resolve; + Field(bool) isReject; + Field(Var) argument; + +#if ENABLE_TTD + virtual void MarkVisitKindSpecificPtrs(TTD::SnapshotExtractor* extractor) override; + virtual TTD::NSSnapObjects::SnapObjectType GetSnapTag_TTD() const override; + virtual void ExtractSnapObjectDataInto(TTD::NSSnapObjects::SnapObject* objData, TTD::SlabAllocator& alloc) override; +#endif +}; + +template<> +bool VarIsImpl(RecyclableObject* obj); + +} diff --git a/lib/Runtime/Library/JavascriptAsyncGenerator.cpp b/lib/Runtime/Library/JavascriptAsyncGenerator.cpp new file mode 100644 index 00000000000..a1c6b31bd0d --- /dev/null +++ b/lib/Runtime/Library/JavascriptAsyncGenerator.cpp @@ -0,0 +1,341 @@ +//------------------------------------------------------------------------------------------------------- +// Copyright (C) Microsoft. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. +// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. +//------------------------------------------------------------------------------------------------------- +#include "RuntimeLibraryPch.h" +#include "Language/InterpreterStackFrame.h" + +using namespace Js; + +JavascriptAsyncGenerator* JavascriptAsyncGenerator::New( + Recycler* recycler, + DynamicType* generatorType, + Arguments& args, + ScriptFunction* scriptFunction) +{ + // InterpreterStackFrame takes a pointer to the args, so copy them to the recycler + // heap and use that buffer for the asyncgenerator's InterpreterStackFrame + Field(Var)* argValuesCopy = nullptr; + + if (args.Info.Count > 0) + { + argValuesCopy = RecyclerNewArray(recycler, Field(Var), args.Info.Count); + CopyArray(argValuesCopy, args.Info.Count, args.Values, args.Info.Count); + } + + Arguments heapArgs(args.Info, unsafe_write_barrier_cast(argValuesCopy)); + + auto* requestQueue = RecyclerNew(recycler, JavascriptAsyncGenerator::RequestQueue, recycler); + + JavascriptAsyncGenerator* generator = RecyclerNewFinalized( + recycler, + JavascriptAsyncGenerator, + generatorType, + heapArgs, + scriptFunction, + requestQueue); + + auto* library = scriptFunction->GetLibrary(); + generator->onFulfilled = library->CreateAsyncGeneratorCallbackFunction( + EntryAwaitFulfilledCallback, + generator); + + generator->onRejected = library->CreateAsyncGeneratorCallbackFunction( + EntryAwaitRejectedCallback, + generator); + + return generator; +} + +Var JavascriptAsyncGenerator::EntryNext(RecyclableObject* function, CallInfo callInfo, ...) +{ + PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); + + ARGUMENTS(args, callInfo); + auto* scriptContext = function->GetScriptContext(); + auto* library = scriptContext->GetLibrary(); + + AUTO_TAG_NATIVE_LIBRARY_ENTRY(function, callInfo, _u("AsyncGenerator.prototype.next")); + + Var thisValue = args[0]; + Var input = args.Info.Count > 1 ? args[1] : library->GetUndefined(); + + return EnqueueRequest( + thisValue, + scriptContext, + input, + ResumeYieldKind::Normal, + _u("AsyncGenerator.prototype.next")); +} + +Var JavascriptAsyncGenerator::EntryReturn(RecyclableObject* function, CallInfo callInfo, ...) +{ + PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); + + ARGUMENTS(args, callInfo); + auto* scriptContext = function->GetScriptContext(); + auto* library = scriptContext->GetLibrary(); + + AUTO_TAG_NATIVE_LIBRARY_ENTRY(function, callInfo, _u("AsyncGenerator.prototype.return")); + + Var thisValue = args[0]; + Var input = args.Info.Count > 1 ? args[1] : library->GetUndefined(); + + return EnqueueRequest( + thisValue, + scriptContext, + input, + ResumeYieldKind::Return, + _u("AsyncGenerator.prototype.return")); +} + +Var JavascriptAsyncGenerator::EntryThrow(RecyclableObject* function, CallInfo callInfo, ...) +{ + PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); + + ARGUMENTS(args, callInfo); + auto* scriptContext = function->GetScriptContext(); + auto* library = scriptContext->GetLibrary(); + + AUTO_TAG_NATIVE_LIBRARY_ENTRY(function, callInfo, _u("AsyncGenerator.prototype.throw")); + + Var thisValue = args[0]; + Var input = args.Info.Count > 1 ? args[1] : library->GetUndefined(); + + return EnqueueRequest( + thisValue, + scriptContext, + input, + ResumeYieldKind::Throw, + _u("AsyncGenerator.prototype.throw")); +} + +Var JavascriptAsyncGenerator::EntryAwaitFulfilledCallback( + RecyclableObject* function, + CallInfo callInfo, ...) +{ + auto* scriptContext = function->GetScriptContext(); + + PROBE_STACK(scriptContext, Js::Constants::MinStackDefault); + ARGUMENTS(args, callInfo); + + AssertOrFailFast(args.Info.Count > 1); + + Var value = args[1]; + auto* callbackFn = VarTo(function); + JavascriptAsyncGenerator* generator = callbackFn->generator; + + PendingState state = generator->pendingState; + generator->pendingState = PendingState::None; + + switch (state) + { + case PendingState::Await: + generator->ResumeCoroutine(value, ResumeYieldKind::Normal); + break; + case PendingState::AwaitReturn: + generator->ResumeCoroutine(value, ResumeYieldKind::Return); + break; + case PendingState::Yield: + generator->ResolveNext(value); + break; + default: + AssertMsg(false, "Expected an async generator pending state"); + break; + } + + return scriptContext->GetLibrary()->GetUndefined(); +} + +Var JavascriptAsyncGenerator::EntryAwaitRejectedCallback( + RecyclableObject* function, + CallInfo callInfo, ...) +{ + auto* scriptContext = function->GetScriptContext(); + + PROBE_STACK(scriptContext, Js::Constants::MinStackDefault); + ARGUMENTS(args, callInfo); + + AssertOrFailFast(args.Info.Count > 1); + + Var value = args[1]; + auto* callbackFn = VarTo(function); + JavascriptAsyncGenerator* generator = callbackFn->generator; + + PendingState state = generator->pendingState; + generator->pendingState = PendingState::None; + + switch (state) + { + case PendingState::Await: + case PendingState::AwaitReturn: + generator->ResumeCoroutine(value, ResumeYieldKind::Throw); + break; + case PendingState::Yield: + generator->RejectNext(value); + break; + default: + AssertMsg(false, "Expected an async generator pending state"); + break; + } + + return scriptContext->GetLibrary()->GetUndefined(); +} + +Var JavascriptAsyncGenerator::EnqueueRequest( + Var thisValue, + ScriptContext* scriptContext, + Var input, + ResumeYieldKind resumeKind, + const char16* apiNameForErrorMessage) +{ + auto* promise = JavascriptPromise::CreateEnginePromise(scriptContext); + + if (!VarIs(thisValue)) + { + auto* library = scriptContext->GetLibrary(); + auto* error = library->CreateTypeError(); + + JavascriptError::SetErrorMessage( + error, + JSERR_NeedObjectOfType, + scriptContext, + apiNameForErrorMessage, + _u("AsyncGenerator")); + + promise->Reject(error, scriptContext); + } + else + { + auto* request = RecyclerNew( + scriptContext->GetRecycler(), + AsyncGeneratorRequest, + input, + resumeKind, + promise); + + auto* generator = UnsafeVarTo(thisValue); + generator->PushRequest(request); + generator->ResumeNext(); + } + + return promise; +} + +void JavascriptAsyncGenerator::ResumeNext() +{ + if (IsExecuting() || this->pendingState != PendingState::None || !HasRequest()) + return; + + auto* scriptContext = GetScriptContext(); + auto* library = scriptContext->GetLibrary(); + + AsyncGeneratorRequest* next = PeekRequest(); + + if (next->kind != ResumeYieldKind::Normal) + { + if (IsSuspendedStart()) + SetCompleted(); + + if (next->kind == ResumeYieldKind::Return) + { + if (IsCompleted()) UnwrapValue(next->data, PendingState::Yield); + else UnwrapValue(next->data, PendingState::AwaitReturn); + } + else + { + if (IsCompleted()) RejectNext(next->data); + else ResumeCoroutine(next->data, next->kind); + } + } + else + { + if (IsCompleted()) ResolveNext(library->GetUndefined()); + else ResumeCoroutine(next->data, next->kind); + } +} + +void JavascriptAsyncGenerator::ResumeCoroutine(Var value, ResumeYieldKind resumeKind) +{ + Assert(this->pendingState == PendingState::None); + + RecyclableObject* result = nullptr; + + try + { + // Call the internal (sync) generator entry point + result = VarTo(this->CallGenerator(value, resumeKind)); + } + catch (const JavascriptException& err) + { + RejectNext(err.GetAndClear()->GetThrownObject(nullptr)); + return; + } + + Var resultValue = JavascriptOperators::GetProperty( + result, + PropertyIds::value, + GetScriptContext()); + + if (JavascriptOperators::GetTypeId(result) == TypeIds_AwaitObject) + { + UnwrapValue(resultValue, PendingState::Await); + return; + } + + if (IsCompleted()) + { + // If the generator is completed, then resolve immediately. Return + // values are unwrapped explicitly by the code generated for the + // return statement. + ResolveNext(resultValue); + } + else + { + // Otherwise, await the yielded value + UnwrapValue(resultValue, PendingState::Yield); + } +} + +void JavascriptAsyncGenerator::ResolveNext(Var value) +{ + auto* scriptContext = GetScriptContext(); + auto* library = scriptContext->GetLibrary(); + Var result = library->CreateIteratorResultObject(value, IsCompleted()); + ShiftRequest()->promise->Resolve(result, scriptContext); + ResumeNext(); +} + +void JavascriptAsyncGenerator::RejectNext(Var reason) +{ + SetCompleted(); + ShiftRequest()->promise->Reject(reason, GetScriptContext()); + ResumeNext(); +} + +void JavascriptAsyncGenerator::UnwrapValue(Var value, PendingState pendingState) +{ + this->pendingState = pendingState; + + auto* scriptContext = GetScriptContext(); + auto* promise = JavascriptPromise::InternalPromiseResolve(value, scriptContext); + auto* unused = JavascriptPromise::UnusedPromiseCapability(scriptContext); + + JavascriptPromise::PerformPromiseThen(promise, unused, onFulfilled, onRejected, scriptContext); +} + +template<> +bool Js::VarIsImpl(RecyclableObject* obj) +{ + return JavascriptOperators::GetTypeId(obj) == TypeIds_AsyncGenerator; +} + +template<> +bool Js::VarIsImpl(RecyclableObject* obj) +{ + return VarIs(obj) && ( + VirtualTableInfo::HasVirtualTable(obj) || + VirtualTableInfo>::HasVirtualTable(obj) + ); +} diff --git a/lib/Runtime/Library/JavascriptAsyncGenerator.h b/lib/Runtime/Library/JavascriptAsyncGenerator.h new file mode 100644 index 00000000000..7f3c8f165fb --- /dev/null +++ b/lib/Runtime/Library/JavascriptAsyncGenerator.h @@ -0,0 +1,134 @@ +//------------------------------------------------------------------------------------------------------- +// Copyright (C) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. +//------------------------------------------------------------------------------------------------------- +#pragma once + +namespace Js +{ + +class JavascriptAsyncGenerator : public JavascriptGenerator +{ + struct AsyncGeneratorRequest + { + Field(Var) data; + Field(ResumeYieldKind) kind; + Field(JavascriptPromise*) promise; + + AsyncGeneratorRequest(Var data, ResumeYieldKind kind, JavascriptPromise* promise) : + data(data), + kind(kind), + promise(promise) {} + }; + + using RequestQueue = DList; + + enum class PendingState + { + None, + Await, + AwaitReturn, + Yield + }; + +private: + DEFINE_VTABLE_CTOR(JavascriptAsyncGenerator, JavascriptGenerator); + DEFINE_MARSHAL_OBJECT_TO_SCRIPT_CONTEXT(JavascriptAsyncGenerator); + + Field(RequestQueue*) requestQueue; + Field(PendingState) pendingState = PendingState::None; + Field(RuntimeFunction*) onFulfilled; + Field(RuntimeFunction*) onRejected; + + JavascriptAsyncGenerator( + DynamicType* type, + Arguments& args, + ScriptFunction* scriptFunction, + RequestQueue* requestQueue) : + JavascriptGenerator(type, args, scriptFunction), + requestQueue(requestQueue) {} + +public: + static JavascriptAsyncGenerator* New( + Recycler* recycler, + DynamicType* generatorType, + Arguments& args, + ScriptFunction* scriptFunction); + + void PushRequest(AsyncGeneratorRequest* request) + { + requestQueue->Append(request); + } + + AsyncGeneratorRequest* ShiftRequest() + { + Assert(!requestQueue->Empty()); + AsyncGeneratorRequest* request = requestQueue->Head(); + requestQueue->RemoveHead(); + return request; + } + + AsyncGeneratorRequest* PeekRequest() + { + Assert(!requestQueue->Empty()); + return requestQueue->Head(); + } + + bool HasRequest() + { + return !requestQueue->Empty(); + } + + void ResumeNext(); + void ResumeCoroutine(Var value, ResumeYieldKind resumeKind); + void ResolveNext(Var value); + void RejectNext(Var reason); + void UnwrapValue(Var value, PendingState pendingState); + + class EntryInfo + { + public: + static FunctionInfo Next; + static FunctionInfo Return; + static FunctionInfo Throw; + }; + + static Var EntryNext(RecyclableObject* function, CallInfo callInfo, ...); + static Var EntryReturn(RecyclableObject* function, CallInfo callInfo, ...); + static Var EntryThrow(RecyclableObject* function, CallInfo callInfo, ...); + + static Var EntryAwaitFulfilledCallback(RecyclableObject* function, CallInfo callInfo, ...); + static Var EntryAwaitRejectedCallback(RecyclableObject* function, CallInfo callInfo, ...); + + static Var EnqueueRequest( + Var thisValue, + ScriptContext* scriptContext, + Var input, + ResumeYieldKind resumeKind, + const char16* apiNameForErrorMessage); +}; + +template<> +bool VarIsImpl(RecyclableObject* obj); + +class AsyncGeneratorCallbackFunction : public RuntimeFunction +{ +protected: + DEFINE_VTABLE_CTOR(AsyncGeneratorCallbackFunction, RuntimeFunction); + DEFINE_MARSHAL_OBJECT_TO_SCRIPT_CONTEXT(AsyncGeneratorCallbackFunction); + +public: + AsyncGeneratorCallbackFunction( + DynamicType* type, + FunctionInfo* functionInfo, + JavascriptAsyncGenerator* generator) : + RuntimeFunction(type, functionInfo), + generator(generator) {} + + Field(JavascriptAsyncGenerator*) generator; +}; + +template<> +bool VarIsImpl(RecyclableObject* obj); + +} diff --git a/lib/Runtime/Library/JavascriptAsyncGeneratorFunction.cpp b/lib/Runtime/Library/JavascriptAsyncGeneratorFunction.cpp new file mode 100644 index 00000000000..65e9173aa85 --- /dev/null +++ b/lib/Runtime/Library/JavascriptAsyncGeneratorFunction.cpp @@ -0,0 +1,73 @@ +//------------------------------------------------------------------------------------------------------- +// Copyright (C) Microsoft. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. +// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. +//------------------------------------------------------------------------------------------------------- +#include "RuntimeLibraryPch.h" + +using namespace Js; + +FunctionInfo JavascriptAsyncGeneratorFunction::functionInfo( + FORCE_NO_WRITE_BARRIER_TAG( + JavascriptAsyncGeneratorFunction::EntryAsyncGeneratorFunctionImplementation), + (FunctionInfo::Attributes)(FunctionInfo::DoNotProfile | FunctionInfo::ErrorOnNew)); + +JavascriptAsyncGeneratorFunction::JavascriptAsyncGeneratorFunction( + DynamicType* type, + GeneratorVirtualScriptFunction* scriptFunction) : + JavascriptGeneratorFunction(type, &functionInfo, scriptFunction) +{ + DebugOnly(VerifyEntryPoint()); +} + +JavascriptAsyncGeneratorFunction* JavascriptAsyncGeneratorFunction::New( + ScriptContext* scriptContext, + GeneratorVirtualScriptFunction* scriptFunction) +{ + return scriptContext->GetLibrary()->CreateAsyncGeneratorFunction( + functionInfo.GetOriginalEntryPoint(), + scriptFunction); +} + +template<> +bool Js::VarIsImpl(RecyclableObject* obj) +{ + return VarIs(obj) && ( + VirtualTableInfo::HasVirtualTable(obj) || + VirtualTableInfo>::HasVirtualTable(obj) + ); +} + +Var JavascriptAsyncGeneratorFunction::EntryAsyncGeneratorFunctionImplementation( + RecyclableObject* function, + CallInfo callInfo, ...) +{ + auto* scriptContext = function->GetScriptContext(); + PROBE_STACK(scriptContext, Js::Constants::MinStackDefault); + ARGUMENTS(args, callInfo); + + Assert(!(callInfo.Flags & CallFlags_New)); + + auto* asyncGeneratorFn = VarTo(function); + auto* library = scriptContext->GetLibrary(); + Var prototype = JavascriptOperators::GetPropertyNoCache(function, Js::PropertyIds::prototype, scriptContext); + + // fall back to the original prototype if we have an invalid prototype object + DynamicObject* protoObject = VarIs(prototype) ? + UnsafeVarTo(prototype) : library->GetAsyncGeneratorPrototype(); + + auto* scriptFn = asyncGeneratorFn->GetGeneratorVirtualScriptFunction(); + auto* generator = library->CreateAsyncGenerator(args, scriptFn, protoObject); + + // Run the generator to execute until the beginning of the body + if (scriptFn->GetFunctionInfo()->GetGeneratorWithComplexParams()) + BEGIN_SAFE_REENTRANT_CALL(scriptContext->GetThreadContext()) + { + generator->CallGenerator(library->GetUndefined(), ResumeYieldKind::Normal); + } + END_SAFE_REENTRANT_CALL + + generator->SetSuspendedStart(); + + return generator; +} diff --git a/lib/Runtime/Library/JavascriptAsyncGeneratorFunction.h b/lib/Runtime/Library/JavascriptAsyncGeneratorFunction.h new file mode 100644 index 00000000000..f0b18cb87da --- /dev/null +++ b/lib/Runtime/Library/JavascriptAsyncGeneratorFunction.h @@ -0,0 +1,58 @@ +//------------------------------------------------------------------------------------------------------- +// Copyright (C) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. +//------------------------------------------------------------------------------------------------------- +#pragma once + +namespace Js +{ + +class JavascriptAsyncGeneratorFunction : public JavascriptGeneratorFunction +{ + private: + static FunctionInfo functionInfo; + + DEFINE_VTABLE_CTOR(JavascriptAsyncGeneratorFunction, JavascriptGeneratorFunction); + DEFINE_MARSHAL_OBJECT_TO_SCRIPT_CONTEXT(JavascriptAsyncGeneratorFunction); + + protected: + JavascriptAsyncGeneratorFunction(DynamicType* type); + + public: + JavascriptAsyncGeneratorFunction( + DynamicType* type, + GeneratorVirtualScriptFunction* scriptFunction); + + static JavascriptAsyncGeneratorFunction* New( + ScriptContext* scriptContext, + GeneratorVirtualScriptFunction* scriptFunction); + + static Var EntryAsyncGeneratorFunctionImplementation( + RecyclableObject* function, + CallInfo callInfo, ...); + + inline static bool Test(JavascriptFunction *obj) + { + return + VirtualTableInfo::HasVirtualTable(obj) || + VirtualTableInfo>::HasVirtualTable(obj); + } + +#if ENABLE_TTD + /* + virtual TTD::NSSnapObjects::SnapObjectType GetSnapTag_TTD() const override; + virtual void ExtractSnapObjectDataInto(TTD::NSSnapObjects::SnapObject* objData, TTD::SlabAllocator& alloc) override; + */ +#endif + + public: + virtual VTableValue DummyVirtualFunctionToHinderLinkerICF() + { + return VTableValue::VtableJavascriptAsyncGeneratorFunction; + } +}; + +template<> +bool VarIsImpl(RecyclableObject* obj); + +} diff --git a/lib/Runtime/Library/JavascriptBigInt.cpp b/lib/Runtime/Library/JavascriptBigInt.cpp new file mode 100644 index 00000000000..9f22f9ceca0 --- /dev/null +++ b/lib/Runtime/Library/JavascriptBigInt.cpp @@ -0,0 +1,685 @@ +//------------------------------------------------------------------------------------------------------- +// Copyright (C) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. +//------------------------------------------------------------------------------------------------------- +#include "RuntimeLibraryPch.h" + +namespace Js +{ + JavascriptBigInt * JavascriptBigInt::Create(const char16 * content, charcount_t cchUseLength, bool isNegative, ScriptContext * scriptContext) + { + return RecyclerNew(scriptContext->GetRecycler(), JavascriptBigInt, content, cchUseLength, isNegative, scriptContext->GetLibrary()->GetBigIntTypeStatic()); + } + + JavascriptBigInt * JavascriptBigInt::CreateZero(ScriptContext * scriptContext) + { + return JavascriptBigInt::CreateZeroWithLength(1, scriptContext); + } + + JavascriptBigInt * JavascriptBigInt::CreateZeroWithLength(digit_t length, ScriptContext * scriptContext) + { + JavascriptBigInt * bigintNew = RecyclerNew(scriptContext->GetRecycler(), JavascriptBigInt, scriptContext->GetLibrary()->GetBigIntTypeStatic()); + bigintNew->m_length = length; + bigintNew->m_isNegative = false; + bigintNew->m_maxLength = length; + bigintNew->m_digits = RecyclerNewArrayLeafZ(scriptContext->GetRecycler(), digit_t, bigintNew->m_length); + return bigintNew; + } + + JavascriptBigInt * JavascriptBigInt::CreateOne(ScriptContext * scriptContext) + { + JavascriptBigInt * bigintNew = JavascriptBigInt::CreateZero(scriptContext); + bigintNew->m_digits[0] = 1; + return bigintNew; + } + + JavascriptBigInt * JavascriptBigInt::New(JavascriptBigInt * pbi, ScriptContext * scriptContext) + { + Assert(pbi->m_maxLength >= pbi->m_length); + JavascriptBigInt * bigintNew = RecyclerNew(scriptContext->GetRecycler(), JavascriptBigInt, scriptContext->GetLibrary()->GetBigIntTypeStatic()); + bigintNew->m_length = pbi->m_length; + bigintNew->m_maxLength = pbi->m_maxLength; + bigintNew->m_isNegative = pbi->m_isNegative; + bigintNew->m_digits = RecyclerNewArrayLeaf(scriptContext->GetRecycler(), digit_t, pbi->m_maxLength); + js_memcpy_s(bigintNew->m_digits, bigintNew->m_length * sizeof(digit_t), pbi->m_digits, bigintNew->m_length * sizeof(digit_t)); + + return bigintNew; + } + + RecyclableObject * JavascriptBigInt::CloneToScriptContext(ScriptContext* requestContext) + { + return JavascriptBigInt::New(this, requestContext); + } + + Var JavascriptBigInt::NewInstance(RecyclableObject* function, CallInfo callInfo, ...) + { + PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); + + ARGUMENTS(args, callInfo); + ScriptContext* scriptContext = function->GetScriptContext(); + + AssertMsg(args.HasArg(), "Should always have implicit 'this'"); + + // SkipDefaultNewObject function flag should have prevented the default object from + // being created, except when call true a host dispatch. + Var newTarget = args.GetNewTarget(); + bool isCtorSuperCall = JavascriptOperators::GetAndAssertIsConstructorSuperCall(args); + + Var result = nullptr; + + if (args.Info.Count > 1) + { + result = JavascriptConversion::ToBigInt(args[1], scriptContext); + } + else + { + // TODO: + // v8 throw: cannot convert from undefined to bigint + // we can consider creating a Zero BigInt + AssertOrFailFast(false); + } + + if (callInfo.Flags & CallFlags_New) + { + // TODO: handle new constructor + // v8 throw: bigint is not a constructor + AssertOrFailFast(false); + } + + return isCtorSuperCall ? + JavascriptOperators::OrdinaryCreateFromConstructor(VarTo(newTarget), UnsafeVarTo(result), nullptr, scriptContext) : + result; + } + + BOOL JavascriptBigInt::Equals(Var other, BOOL* value, ScriptContext * requestContext) + { + return JavascriptBigInt::Equals(this, other, value, requestContext); + } + + BOOL JavascriptBigInt::Equals(JavascriptBigInt* left, Var right, BOOL* value, ScriptContext * requestContext) + { + switch (JavascriptOperators::GetTypeId(right)) + { + case TypeIds_BigInt: + *value = JavascriptBigInt::Equals(left, right); + break; + default: + AssertMsg(VarIs(right), "do not support comparison with types other than BigInt"); + *value = FALSE; + break; + } + return true; + } + + void JavascriptBigInt::Resize(digit_t length) + { + digit_t *digits; + + if (length <= m_maxLength) + { + return; + } + + length += length;// double size + if (SIZE_MAX / sizeof(digit_t) < length) // overflow + { + JavascriptError::ThrowRangeError(this->GetScriptContext(), VBSERR_TypeMismatch, _u("Resize BigInt")); + } + + digits = RecyclerNewArrayLeaf(this->GetScriptContext()->GetRecycler(), digit_t, length); + if (NULL == digits) + { + JavascriptError::ThrowRangeError(this->GetScriptContext(), VBSERR_TypeMismatch, _u("Resize BigInt")); + } + + if (0 < m_length) // in this case, we need to copy old data over + { + js_memcpy_s(digits, length * sizeof(digit_t), m_digits, m_length * sizeof(digit_t)); + } + + m_digits = digits; + m_maxLength = length; + } + + template + void JavascriptBigInt::InitFromCharDigits(const EncodedChar *pChar, uint32 charLength, bool isNegative) + { + Assert(charLength >= 0); + Assert(pChar != 0); + + const EncodedChar *pCharLimit = pChar + charLength - 1;//'n' at the end + + m_length = 0; + m_digits = RecyclerNewArrayLeaf(this->GetScriptContext()->GetRecycler(), digit_t, m_maxLength); + m_isNegative = isNegative; + + digit_t digitMul = 1; + digit_t digitAdd = 0; + for (; pChar < pCharLimit; pChar++) + { + Assert(NumberUtilities::IsDigit(*pChar)); + if (digitMul == 1e9) + { + MulThenAdd(digitMul, digitAdd); + digitMul = 1; + digitAdd = 0; + } + digitMul *= 10; + digitAdd = digitAdd * 10 + *pChar - '0'; + } + Assert(1 < digitMul); + MulThenAdd(digitMul, digitAdd); + + // make sure this is no negative zero + if (m_length == 0) + { + m_isNegative = false; + m_length = 1; + m_digits[0] = 0; + } + } + + // return low(a+b) and out carry + digit_t JavascriptBigInt::AddDigit(digit_t a, digit_t b, digit_t* carry) + { + digit_t result = a + b; + if (result < a) + { + *carry += 1; + } + return result; + } + + // return low(a+b) and out carry + digit_t JavascriptBigInt::SubDigit(digit_t a, digit_t b, digit_t* borrow) + { + digit_t result = a - b; + if (result > a) + { + *borrow += 1; + } + return result; + } + + bool JavascriptBigInt::IsZero(JavascriptBigInt * pbi) + { + return (pbi->m_length == 1 && pbi->m_digits[0] == 0); + } + + void JavascriptBigInt::AbsoluteIncrement(JavascriptBigInt * pbi) + { + JavascriptBigInt* result = pbi; + digit_t carry = 1; + for (digit_t i = 0; i < result->m_length && carry > 0; i++) + { + digit_t tempCarry = 0; + result->m_digits[i] = JavascriptBigInt::AddDigit(result->m_digits[i], carry, &tempCarry); + carry = tempCarry; + } + if (carry > 0) //increase length + { + if (result->m_length >= result->m_maxLength) + { + result->Resize(result->m_length + 1); + } + result->m_digits[result->m_length++] = carry; + } + } + + void JavascriptBigInt::AbsoluteDecrement(JavascriptBigInt * pbi) + { + JavascriptBigInt* result = pbi; + Assert(!JavascriptBigInt::IsZero(result)); + digit_t borrow = 1; + for (digit_t i = 0; i < result->m_length && borrow > 0; i++) + { + digit_t tempBorrow = 0; + result->m_digits[i] = JavascriptBigInt::SubDigit(result->m_digits[i], borrow, &tempBorrow); + borrow = tempBorrow; + } + Assert(borrow == 0); + // remove trailing zero + if (result->m_digits[result->m_length-1] == 0) + { + result->m_length--; + } + } + + void JavascriptBigInt::Increment(JavascriptBigInt * pbi) + { + if (pbi->m_isNegative) + { + // return 0n for -1n + if (pbi->m_length == 1 && pbi->m_digits[0] == 1) + { + JavascriptBigInt* result = pbi; + result->m_digits[0] = 0; + result->m_isNegative = false; + return; + } + return JavascriptBigInt::AbsoluteDecrement(pbi); + } + return JavascriptBigInt::AbsoluteIncrement(pbi); + } + + void JavascriptBigInt::Decrement(JavascriptBigInt * pbi) + { + if (pbi->m_isNegative) + { + return JavascriptBigInt::AbsoluteIncrement(pbi); + } + if (JavascriptBigInt::IsZero(pbi)) // return -1n for 0n + { + JavascriptBigInt* result = pbi; + result->m_digits[0] = 1; + result->m_isNegative = true; + return; + } + return JavascriptBigInt::AbsoluteDecrement(pbi); + } + + Var JavascriptBigInt::Increment(Var aRight) + { + JavascriptBigInt* rightBigInt = VarTo(aRight); + JavascriptBigInt* newBigInt = JavascriptBigInt::New(rightBigInt, rightBigInt->GetScriptContext()); + JavascriptBigInt::Increment(newBigInt); + return newBigInt; + } + + Var JavascriptBigInt::Decrement(Var aRight) + { + JavascriptBigInt* rightBigInt = VarTo(aRight); + JavascriptBigInt* newBigInt = JavascriptBigInt::New(rightBigInt, rightBigInt->GetScriptContext()); + JavascriptBigInt::Decrement(newBigInt); + return newBigInt; + } + + Var JavascriptBigInt::Not(Var aRight) + { + JavascriptBigInt* rightBigInt = VarTo(aRight); + JavascriptBigInt* newBigInt = JavascriptBigInt::New(rightBigInt, rightBigInt->GetScriptContext()); + JavascriptBigInt::Negate(newBigInt); + JavascriptBigInt * bigintOne = JavascriptBigInt::CreateOne(rightBigInt->GetScriptContext()); + return JavascriptBigInt::Sub(newBigInt, bigintOne); + } + + Var JavascriptBigInt::Negate(Var aRight) + { + JavascriptBigInt* rightBigInt = VarTo(aRight); + JavascriptBigInt* newBigInt = JavascriptBigInt::New(rightBigInt, rightBigInt->GetScriptContext()); + JavascriptBigInt::Negate(newBigInt); + return newBigInt; + } + + void JavascriptBigInt::Negate(JavascriptBigInt * pbi) + { + if (JavascriptBigInt::IsZero(pbi)) + { + return; + } + pbi->m_isNegative = !pbi->m_isNegative; + } + + // return low(a*b) and out high + digit_t JavascriptBigInt::MulDigit(digit_t a, digit_t b, digit_t* resultHigh) + { + // Multiply is performed in half chuck favor. + // For inputs [AH AL]*[BH BL], the result is: + // + // [AL*BL] // rLow + // + [AL*BH] // rMid1 + // + [AH*BL] // rMid2 + // + [AH*BH] // rHigh + // = [R1 R2 R3 R4] // high = [R1 R2], low = [R3 R4] + // + + digit_t kHalfDigitBits = sizeof(digit_t) * 4; + digit_t kHalfDigitMask = ((digit_t)1 << kHalfDigitBits) - 1; + + digit_t aLow = a & kHalfDigitMask; + digit_t aHigh = a >> kHalfDigitBits; + digit_t bLow = b & kHalfDigitMask; + digit_t bHigh = b >> kHalfDigitBits; + + digit_t rLow = aLow * bLow; + digit_t rMid1 = aLow * bHigh; + digit_t rMid2 = aHigh * bLow; + digit_t rHigh = aHigh * bHigh; + + digit_t carry = 0; + digit_t resultLow = JavascriptBigInt::AddDigit(rLow, rMid1 << kHalfDigitBits, &carry); + resultLow = JavascriptBigInt::AddDigit(resultLow, rMid2 << kHalfDigitBits, &carry); + *resultHigh = (rMid1 >> kHalfDigitBits) + (rMid2 >> kHalfDigitBits) + rHigh + carry; + return resultLow; + } + + void JavascriptBigInt::MulThenAdd(digit_t digitMul, digit_t digitAdd) + { + Assert(digitMul != 0); + + digit_t carryDigit = 0; + digit_t *pDigit = m_digits; + digit_t *pDigitLimit = pDigit + m_length; + + for (; pDigit < pDigitLimit; pDigit++) + { + *pDigit = JavascriptBigInt::MulDigit(*pDigit, digitMul, &carryDigit);// return low Digit to digit, hight Digit to carry + if (digitAdd > 0) + { + *pDigit = JavascriptBigInt::AddDigit(*pDigit, digitAdd, &carryDigit);// add carry to result + } + digitAdd = carryDigit; + } + if (0 < digitAdd) // length increase by 1 + { + if (m_length >= m_maxLength) + { + Resize(m_length + 1); + } + m_digits[m_length++] = digitAdd; + } + } + + int JavascriptBigInt::Compare(JavascriptBigInt *pbi) + { + if (m_isNegative != pbi->m_isNegative) + { + if (m_isNegative) + { + return -1; + } + else + { + return 1; + } + } + + int sign = m_isNegative ? -1 : 1; + return sign * JavascriptBigInt::CompareAbsolute(pbi); + } + + int JavascriptBigInt::CompareAbsolute(JavascriptBigInt *pbi) + { + digit_t index; + + if (m_length > pbi->m_length) + { + return 1; + } + if (m_length < pbi->m_length) + { + return -1; + } + if (0 == m_length) + { + return 0; + } + +#pragma prefast(suppress:__WARNING_LOOP_ONLY_EXECUTED_ONCE,"noise") + for (index = m_length - 1; m_digits[index] == pbi->m_digits[index]; index--) + { + if (0 == index) + { + return 0; + } + } + Assert(m_digits[index] != pbi->m_digits[index]); + + return (m_digits[index] > pbi->m_digits[index]) ? 1 : -1; + } + + bool JavascriptBigInt::LessThan(Var aLeft, Var aRight) + { + AssertMsg(VarIs(aLeft) && VarIs(aRight), "BigInt LessThan"); + + JavascriptBigInt *leftBigInt = VarTo(aLeft); + JavascriptBigInt *rightBigInt = VarTo(aRight); + + return (leftBigInt->Compare(rightBigInt) < 0); + } + + bool JavascriptBigInt::Equals(Var aLeft, Var aRight) + { + JavascriptBigInt *leftBigInt = VarTo(aLeft); + JavascriptBigInt *rightBigInt = VarTo(aRight); + + return (leftBigInt->Compare(rightBigInt) == 0); + } + + // pbi1 += pbi2 assume pbi1 has length no less than pbi2 + void JavascriptBigInt::AddAbsolute(JavascriptBigInt * pbi1, JavascriptBigInt * pbi2) + { + Assert(pbi1->m_length >= pbi2->m_length); + digit_t carryDigit = 0; + digit_t *pDigit1 = pbi1->m_digits; + digit_t *pDigit2 = pbi2->m_digits; + digit_t i = 0; + + for (; i < pbi2->m_length; i++) + { + digit_t tempCarryDigit = 0; + pDigit1[i] = JavascriptBigInt::AddDigit(pDigit1[i], pDigit2[i], &tempCarryDigit); + pDigit1[i] = JavascriptBigInt::AddDigit(pDigit1[i], carryDigit, &tempCarryDigit); + carryDigit = tempCarryDigit; + } + + for (; i < pbi1->m_length && carryDigit > 0; i++) + { + digit_t tempCarryDigit = 0; + pDigit1[i] = JavascriptBigInt::AddDigit(pDigit1[i], carryDigit, &tempCarryDigit); + carryDigit = tempCarryDigit; + } + + if (0 < carryDigit) // length increase by 1 + { + if (pbi1->m_length >= pbi1->m_maxLength) + { + pbi1->Resize(pbi1->m_length + 1); + } + pbi1->m_digits[pbi1->m_length++] = carryDigit; + } + } + + // pbi1 -= pbi2 assume |pbi1| > |pbi2| + void JavascriptBigInt::SubAbsolute(JavascriptBigInt * pbi1, JavascriptBigInt * pbi2) + { + Assert(pbi1->CompareAbsolute(pbi2) == 1); + digit_t carryDigit = 0; + digit_t *pDigit1 = pbi1->m_digits; + digit_t *pDigit2 = pbi2->m_digits; + digit_t i = 0; + + for (; i < pbi2->m_length; i++) + { + digit_t tempCarryDigit = 0; + pDigit1[i] = JavascriptBigInt::SubDigit(pDigit1[i], pDigit2[i], &tempCarryDigit); + pDigit1[i] = JavascriptBigInt::SubDigit(pDigit1[i], carryDigit, &tempCarryDigit); + carryDigit = tempCarryDigit; + } + + for (; i < pbi1->m_length && carryDigit > 0; i++) + { + digit_t tempCarryDigit = 0; + pDigit1[i] = JavascriptBigInt::SubDigit(pDigit1[i], carryDigit, &tempCarryDigit); + carryDigit = tempCarryDigit; + } + // adjust length + while ((pbi1->m_length>0) && (pbi1->m_digits[pbi1->m_length-1] == 0)) + { + pbi1->m_length--; + } + Assert(pbi1->m_length > 0); + } + + JavascriptBigInt * JavascriptBigInt::Sub(JavascriptBigInt * pbi1, JavascriptBigInt * pbi2) + { + if (JavascriptBigInt::IsZero(pbi1)) + { + pbi2->m_isNegative = !pbi2->m_isNegative; + return pbi2; + } + if (JavascriptBigInt::IsZero(pbi2)) + { + return pbi1; + } + + if (pbi2->m_isNegative) + { + pbi2->m_isNegative = false; + return JavascriptBigInt::Add(pbi1, pbi2);// a-(-b)=a+b + } + + if (pbi1->m_isNegative) // -a-b=-(a+b) + { + if (pbi1->m_length >= pbi2->m_length) + { + JavascriptBigInt::AddAbsolute(pbi1, pbi2); + return pbi1; + } + JavascriptBigInt::AddAbsolute(pbi2, pbi1); + return pbi2; + } + else // both positive + { + switch (pbi1->CompareAbsolute(pbi2)) + { + case 0: // a -a = 0 + return JavascriptBigInt::CreateZero(pbi1->GetScriptContext()); + case 1: + JavascriptBigInt::SubAbsolute(pbi1, pbi2); // a - b > 0 + return pbi1; + default: + pbi2->m_isNegative = true; + JavascriptBigInt::SubAbsolute(pbi2, pbi1); // a - b = - (b-a) < 0 + return pbi2; + } + } + } + + // return |pbi1| * |pbi2| + JavascriptBigInt * JavascriptBigInt::MulAbsolute(JavascriptBigInt * pbi1, JavascriptBigInt * pbi2) + { + // Start with maximum length possible in pbi3 + digit_t length = pbi1->m_length + pbi2->m_length; + if (SIZE_MAX / sizeof(digit_t) < length) // overflow + { + JavascriptError::ThrowRangeError(pbi1->GetScriptContext(), VBSERR_TypeMismatch, _u("Multiply BigInt")); + } + JavascriptBigInt * pbi3 = JavascriptBigInt::CreateZeroWithLength(length, pbi1->GetScriptContext()); + + // Compute pbi3 = pbi1 * pbi2 as follow: + // e.g. A1 A0 * B1 B0 = C3 C2 C1 C0 + // C0 = A0 * B0 (take the digit and carry) + // C1 = carry + A0 * B1 + A1 * B0 (take the digit and carry) + // C2 = carry + A1 * B1 (take the digit and carry) + // C3 = carry + digit_t carryDigit = 0; + digit_t i3 = 0; + + for (digit_t i1 = 0; i1 < pbi1->m_length; i1++) + { + carryDigit = 0; + for (digit_t i2 = 0; i2 < pbi2->m_length; i2++) + { + i3 = i1 + i2; + digit_t tempCarryDigit1 = 0; + digit_t tempCarryDigit2 = 0; + pbi3->m_digits[i3] = JavascriptBigInt::AddDigit(pbi3->m_digits[i3], carryDigit, &tempCarryDigit1); + digit_t mulDigitResult = JavascriptBigInt::MulDigit(pbi1->m_digits[i1], pbi2->m_digits[i2], &carryDigit); + pbi3->m_digits[i3] = JavascriptBigInt::AddDigit(pbi3->m_digits[i3], mulDigitResult, &tempCarryDigit2); + digit_t overflow = 0; + carryDigit = JavascriptBigInt::AddDigit(carryDigit, tempCarryDigit1, &overflow); + Assert(overflow == 0); // [i1] * [i2] can not carry through [i1+i2+2] + carryDigit = JavascriptBigInt::AddDigit(carryDigit, tempCarryDigit2, &overflow); + Assert(overflow == 0); // [i1] * [i2] can not carry through [i1+i2+2] + } + if (carryDigit > 0) + { + pbi3->m_digits[i3 + 1] = carryDigit; + } + } + + // adjust length + while ((pbi3->m_length > 0) && (pbi3->m_digits[pbi3->m_length - 1] == 0)) + { + pbi3->m_length--; + } + Assert(pbi3->m_length > 0); + return pbi3; + } + + JavascriptBigInt * JavascriptBigInt::Mul(JavascriptBigInt * pbi1, JavascriptBigInt * pbi2) + { + if (JavascriptBigInt::IsZero(pbi1) || JavascriptBigInt::IsZero(pbi2)) + { + return JavascriptBigInt::CreateZero(pbi1->GetScriptContext()); + } + JavascriptBigInt * result = JavascriptBigInt::MulAbsolute(pbi1, pbi2); + if (pbi1->m_isNegative != pbi2->m_isNegative) + { + result->m_isNegative = true; + } + return result; + } + + JavascriptBigInt * JavascriptBigInt::Add(JavascriptBigInt * pbi1, JavascriptBigInt * pbi2) + { + if (JavascriptBigInt::IsZero(pbi1)) + { + return pbi2; + } + if (JavascriptBigInt::IsZero(pbi2)) + { + return pbi1; + } + + if (pbi1->m_isNegative == pbi2->m_isNegative) // (-a)+(-b) = -(a+b) + { + if (pbi1->m_length >= pbi2->m_length) + { + JavascriptBigInt::AddAbsolute(pbi1, pbi2); + return pbi1; + } + JavascriptBigInt::AddAbsolute(pbi2, pbi1); + return pbi2; + } + else + { + switch (pbi1->CompareAbsolute(pbi2)) + { + case 0: + return JavascriptBigInt::CreateZero(pbi1->GetScriptContext()); // a + (-a) = -a + a = 0 + case 1: + JavascriptBigInt::SubAbsolute(pbi1, pbi2); // a + (-b) = a - b or (-a) + b = -(a-b) + return pbi1; + default: + JavascriptBigInt::SubAbsolute(pbi2, pbi1); // -a + b = b - a or a + (-b) = -(b-a) + return pbi2; + } + } + } + + Var JavascriptBigInt::Add(Var aLeft, Var aRight) + { + JavascriptBigInt *leftBigInt = VarTo(aLeft); + JavascriptBigInt *rightBigInt = VarTo(aRight); + return JavascriptBigInt::Add(JavascriptBigInt::New(leftBigInt, leftBigInt->GetScriptContext()), JavascriptBigInt::New(rightBigInt, rightBigInt->GetScriptContext())); + // TODO: Consider deferring creation of new instances until we need them + } + + Var JavascriptBigInt::Sub(Var aLeft, Var aRight) + { + JavascriptBigInt *leftBigInt = VarTo(aLeft); + JavascriptBigInt *rightBigInt = VarTo(aRight); + return JavascriptBigInt::Sub(JavascriptBigInt::New(leftBigInt, leftBigInt->GetScriptContext()), JavascriptBigInt::New(rightBigInt, rightBigInt->GetScriptContext())); + // TODO: Consider deferring creation of new instances until we need them + } + + Var JavascriptBigInt::Mul(Var aLeft, Var aRight) + { + JavascriptBigInt *leftBigInt = VarTo(aLeft); + JavascriptBigInt *rightBigInt = VarTo(aRight); + return JavascriptBigInt::Mul(leftBigInt, rightBigInt); + } + +} // namespace Js diff --git a/lib/Runtime/Library/JavascriptBigInt.h b/lib/Runtime/Library/JavascriptBigInt.h new file mode 100644 index 00000000000..4891c30d6e3 --- /dev/null +++ b/lib/Runtime/Library/JavascriptBigInt.h @@ -0,0 +1,100 @@ +//------------------------------------------------------------------------------------------------------- +// Copyright (C) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. +//------------------------------------------------------------------------------------------------------- +#pragma once + + +namespace Js +{ + class JavascriptBigInt sealed : public RecyclableObject + { + private: + Field(digit_t*) m_digits; // digits + Field(digit_t) m_length; // length + Field(digit_t) m_maxLength; // max length without resize + Field(bool) m_isNegative; + + static const digit_t InitDigitLength = 2; // Max Digit length + + DEFINE_VTABLE_CTOR(JavascriptBigInt, RecyclableObject); + + public: + JavascriptBigInt(StaticType * type) + : RecyclableObject(type), m_length(0), m_digits(nullptr), m_isNegative(false), m_maxLength(InitDigitLength) + { + Assert(type->GetTypeId() == TypeIds_BigInt); + } + + JavascriptBigInt(const char16 * content, charcount_t cchUseLength, bool isNegative, StaticType * type) + : JavascriptBigInt(type) + { + Assert(type->GetTypeId() == TypeIds_BigInt); + InitFromCharDigits(content, cchUseLength, isNegative); + } + + + static bool LessThan(Var aLeft, Var aRight); + static bool Equals(Var aLeft, Var aRight); + static Var Increment(Var aRight); + static Var Add(Var aLeft, Var aRight); + static Var Sub(Var aLeft, Var aRight); + static Var Mul(Var aLeft, Var aRight); + static Var Decrement(Var aRight); + static Var Not(Var aRight); + static Var Negate(Var aRight); + + inline BOOL isNegative() { return m_isNegative; } + + static JavascriptBigInt * CreateZero(ScriptContext * scriptContext); + static JavascriptBigInt * CreateZeroWithLength(digit_t length, ScriptContext * scriptContext); + static JavascriptBigInt * CreateOne(ScriptContext * scriptContext); + static JavascriptBigInt * Create(const char16 * content, charcount_t cchUseLength, bool isNegative, ScriptContext * scriptContext); + virtual RecyclableObject * CloneToScriptContext(ScriptContext* requestContext) override; + + class EntryInfo + { + public: + static FunctionInfo NewInstance; + static FunctionInfo ValueOf; + static FunctionInfo ToString; + }; + + static Var NewInstance(RecyclableObject* function, CallInfo callInfo, ...); + + virtual BOOL Equals(Var other, BOOL* value, ScriptContext * requestContext) override; + + static digit_t AddDigit(digit_t a, digit_t b, digit_t * carry); + static digit_t SubDigit(digit_t a, digit_t b, digit_t * borrow); + static digit_t MulDigit(digit_t a, digit_t b, digit_t * high); + + private: + template + void InitFromCharDigits(const EncodedChar *prgch, uint32 cch, bool isNegative); // init from char of digits + + void MulThenAdd(digit_t luMul, digit_t luAdd); + static bool IsZero(JavascriptBigInt * pbi); + static void AbsoluteIncrement(JavascriptBigInt * pbi); + static void AbsoluteDecrement(JavascriptBigInt * pbi); + static void Increment(JavascriptBigInt * pbi); + static void Decrement(JavascriptBigInt * pbi); + static void Negate(JavascriptBigInt * pbi); + static JavascriptBigInt * Add(JavascriptBigInt * pbi1, JavascriptBigInt * pbi2); + static void AddAbsolute(JavascriptBigInt * pbi1, JavascriptBigInt * pbi2); + static JavascriptBigInt * Sub(JavascriptBigInt * pbi1, JavascriptBigInt * pbi2); + static void SubAbsolute(JavascriptBigInt * pbi1, JavascriptBigInt * pbi2); + static JavascriptBigInt * Mul(JavascriptBigInt * pbi1, JavascriptBigInt * pbi2); + static JavascriptBigInt * MulAbsolute(JavascriptBigInt * pbi1, JavascriptBigInt * pbi2); + int Compare(JavascriptBigInt * pbi); + int CompareAbsolute(JavascriptBigInt * pbi); + static BOOL Equals(JavascriptBigInt* left, Var right, BOOL* value, ScriptContext * requestContext); + void Resize(digit_t length); + + static JavascriptBigInt * New(JavascriptBigInt * pbi, ScriptContext * scriptContext); + }; + + template <> inline bool VarIsImpl(RecyclableObject* obj) + { + return JavascriptOperators::GetTypeId(obj) == TypeIds_BigInt; + } +} diff --git a/lib/Runtime/Library/JavascriptBigIntObject.cpp b/lib/Runtime/Library/JavascriptBigIntObject.cpp new file mode 100644 index 00000000000..bce9ced73d5 --- /dev/null +++ b/lib/Runtime/Library/JavascriptBigIntObject.cpp @@ -0,0 +1,19 @@ +//------------------------------------------------------------------------------------------------------- +// Copyright (C) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. +//------------------------------------------------------------------------------------------------------- +#include "RuntimeLibraryPch.h" + +namespace Js +{ + JavascriptBigIntObject::JavascriptBigIntObject(JavascriptBigInt* value, DynamicType * type) + : DynamicObject(type), value(value) + { + Assert(type->GetTypeId() == TypeIds_BigIntObject); + } + + JavascriptBigInt* JavascriptBigIntObject::GetValue() const + { + return this->value; + } +} // namespace Js diff --git a/lib/Runtime/Library/JavascriptBigIntObject.h b/lib/Runtime/Library/JavascriptBigIntObject.h new file mode 100644 index 00000000000..69c0d8af628 --- /dev/null +++ b/lib/Runtime/Library/JavascriptBigIntObject.h @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------------------------------- +// Copyright (C) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. +//------------------------------------------------------------------------------------------------------- +#pragma once + +namespace Js +{ + class JavascriptBigIntObject : public DynamicObject + { + private: + Field(JavascriptBigInt*) value; + + DEFINE_VTABLE_CTOR(JavascriptBigIntObject, DynamicObject); + DEFINE_MARSHAL_OBJECT_TO_SCRIPT_CONTEXT(JavascriptBigIntObject); + public: + JavascriptBigIntObject(JavascriptBigInt* value, DynamicType * type); + + JavascriptBigInt* GetValue() const; + }; + + template <> inline bool VarIsImpl(RecyclableObject* obj) + { + return JavascriptOperators::GetTypeId(obj) == TypeIds_BigIntObject; + } +} diff --git a/lib/Runtime/Library/JavascriptBoolean.cpp b/lib/Runtime/Library/JavascriptBoolean.cpp index 36256af7dfb..9d596bb4882 100644 --- a/lib/Runtime/Library/JavascriptBoolean.cpp +++ b/lib/Runtime/Library/JavascriptBoolean.cpp @@ -53,7 +53,7 @@ namespace Js { RecyclableObject* pNew = scriptContext->GetLibrary()->CreateBooleanObject(value); return isCtorSuperCall ? - JavascriptOperators::OrdinaryCreateFromConstructor(RecyclableObject::FromVar(newTarget), pNew, nullptr, scriptContext) : + JavascriptOperators::OrdinaryCreateFromConstructor(VarTo(newTarget), pNew, nullptr, scriptContext) : pNew; } @@ -70,13 +70,13 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if(JavascriptBoolean::Is(args[0])) + if(VarIs(args[0])) { return args[0]; } - else if (JavascriptBooleanObject::Is(args[0])) + else if (VarIs(args[0])) { - JavascriptBooleanObject* booleanObject = JavascriptBooleanObject::FromVar(args[0]); + JavascriptBooleanObject* booleanObject = VarTo(args[0]); return scriptContext->GetLibrary()->CreateBoolean(booleanObject->GetValue()); } else @@ -98,13 +98,13 @@ namespace Js BOOL bval; Var aValue = args[0]; - if(JavascriptBoolean::Is(aValue)) + if(VarIs(aValue)) { - bval = JavascriptBoolean::FromVar(aValue)->GetValue(); + bval = VarTo(aValue)->GetValue(); } - else if (JavascriptBooleanObject::Is(aValue)) + else if (VarIs(aValue)) { - JavascriptBooleanObject* booleanObject = JavascriptBooleanObject::FromVar(aValue); + JavascriptBooleanObject* booleanObject = VarTo(aValue); bval = booleanObject->GetValue(); } else @@ -129,7 +129,7 @@ namespace Js if (JavascriptOperators::GetTypeId(args[0]) == TypeIds_HostDispatch) { Var result; - if (RecyclableObject::FromVar(args[0])->InvokeBuiltInOperationRemotely(entryPoint, args, &result)) + if (VarTo(args[0])->InvokeBuiltInOperationRemotely(entryPoint, args, &result)) { return result; } @@ -161,13 +161,13 @@ namespace Js *value = left->GetValue() ? JavascriptNumber::GetValue(right) == 1.0 : JavascriptNumber::GetValue(right) == 0.0; break; case TypeIds_Int64Number: - *value = left->GetValue() ? JavascriptInt64Number::FromVar(right)->GetValue() == 1 : JavascriptInt64Number::FromVar(right)->GetValue() == 0; + *value = left->GetValue() ? VarTo(right)->GetValue() == 1 : VarTo(right)->GetValue() == 0; break; case TypeIds_UInt64Number: - *value = left->GetValue() ? JavascriptUInt64Number::FromVar(right)->GetValue() == 1 : JavascriptUInt64Number::FromVar(right)->GetValue() == 0; + *value = left->GetValue() ? VarTo(right)->GetValue() == 1 : VarTo(right)->GetValue() == 0; break; case TypeIds_Boolean: - *value = left->GetValue() == JavascriptBoolean::FromVar(right)->GetValue(); + *value = left->GetValue() == VarTo(right)->GetValue(); break; case TypeIds_String: *value = left->GetValue() ? JavascriptConversion::ToNumber(right, requestContext) == 1.0 : JavascriptConversion::ToNumber(right, requestContext) == 0.0; @@ -175,12 +175,6 @@ namespace Js case TypeIds_Symbol: *value = FALSE; break; - case TypeIds_VariantDate: - // == on a variant always returns false. Putting this in a - // switch in each .Equals to prevent a perf hit by adding an - // if branch to JavascriptOperators::Equal_Full - *value = FALSE; - break; case TypeIds_Undefined: case TypeIds_Null: default: diff --git a/lib/Runtime/Library/JavascriptBoolean.h b/lib/Runtime/Library/JavascriptBoolean.h index 57fb29a09e0..4dcd5dae68b 100644 --- a/lib/Runtime/Library/JavascriptBoolean.h +++ b/lib/Runtime/Library/JavascriptBoolean.h @@ -20,9 +20,6 @@ namespace Js inline BOOL GetValue() { return value; } - static inline bool Is(Var aValue); - static inline JavascriptBoolean* FromVar(Var aValue); - static inline JavascriptBoolean* UnsafeFromVar(Var aValue); static Var ToVar(BOOL fValue,ScriptContext* scriptContext); class EntryInfo @@ -59,4 +56,9 @@ namespace Js static BOOL Equals(JavascriptBoolean* left, Var right, BOOL* value, ScriptContext * requestContext); static Var TryInvokeRemotelyOrThrow(JavascriptMethod entryPoint, ScriptContext * scriptContext, Arguments & args, int32 errorCode, PCWSTR varName); }; + + template <> inline bool VarIsImpl(RecyclableObject* obj) + { + return JavascriptOperators::GetTypeId(obj) == TypeIds_Boolean; + } } diff --git a/lib/Runtime/Library/JavascriptBoolean.inl b/lib/Runtime/Library/JavascriptBoolean.inl deleted file mode 100644 index ef256ddfaa2..00000000000 --- a/lib/Runtime/Library/JavascriptBoolean.inl +++ /dev/null @@ -1,29 +0,0 @@ -//------------------------------------------------------------------------------------------------------- -// Copyright (C) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. -//------------------------------------------------------------------------------------------------------- - -#pragma once - -namespace Js -{ - // These function needs to be in INL file for static lib - inline bool JavascriptBoolean::Is(Var aValue) - { - return JavascriptOperators::GetTypeId(aValue) == TypeIds_Boolean; - } - - inline JavascriptBoolean* JavascriptBoolean::FromVar(Js::Var aValue) - { - AssertOrFailFastMsg(Is(aValue), "Ensure var is actually a 'JavascriptBoolean'"); - - return static_cast(aValue); - } - - inline JavascriptBoolean* JavascriptBoolean::UnsafeFromVar(Js::Var aValue) - { - AssertMsg(Is(aValue), "Ensure var is actually a 'JavascriptBoolean'"); - - return static_cast(aValue); - } -} // namespace Js diff --git a/lib/Runtime/Library/JavascriptBooleanObject.cpp b/lib/Runtime/Library/JavascriptBooleanObject.cpp index 346db9c3ba9..3c98a9030ea 100644 --- a/lib/Runtime/Library/JavascriptBooleanObject.cpp +++ b/lib/Runtime/Library/JavascriptBooleanObject.cpp @@ -12,25 +12,6 @@ namespace Js Assert(type->GetTypeId() == TypeIds_BooleanObject); } - bool JavascriptBooleanObject::Is(Var aValue) - { - return JavascriptOperators::GetTypeId(aValue) == TypeIds_BooleanObject; - } - - JavascriptBooleanObject* JavascriptBooleanObject::FromVar(Js::Var aValue) - { - AssertOrFailFastMsg(Is(aValue), "Ensure var is actually a 'JavascriptBooleanObject'"); - - return static_cast(aValue); - } - - JavascriptBooleanObject* JavascriptBooleanObject::UnsafeFromVar(Js::Var aValue) - { - AssertMsg(Is(aValue), "Ensure var is actually a 'JavascriptBooleanObject'"); - - return static_cast(aValue); - } - BOOL JavascriptBooleanObject::GetValue() const { if (this->value == nullptr) @@ -71,7 +52,7 @@ namespace Js #if ENABLE_TTD void JavascriptBooleanObject::SetValue_TTD(Js::Var val) { - TTDAssert(val == nullptr || Js::JavascriptBoolean::Is(val), "Only allowable values!"); + TTDAssert(val == nullptr || Js::VarIs(val), "Only allowable values!"); this->value = static_cast(val); } diff --git a/lib/Runtime/Library/JavascriptBooleanObject.h b/lib/Runtime/Library/JavascriptBooleanObject.h index 6e000413bc3..4c447f22b17 100644 --- a/lib/Runtime/Library/JavascriptBooleanObject.h +++ b/lib/Runtime/Library/JavascriptBooleanObject.h @@ -15,9 +15,6 @@ namespace Js DEFINE_MARSHAL_OBJECT_TO_SCRIPT_CONTEXT(JavascriptBooleanObject); public: JavascriptBooleanObject(JavascriptBoolean* value, DynamicType * type); - static bool Is(Var aValue); - static JavascriptBooleanObject* FromVar(Js::Var aValue); - static JavascriptBooleanObject* UnsafeFromVar(Js::Var aValue); BOOL GetValue() const; void Initialize(JavascriptBoolean* value); @@ -35,4 +32,9 @@ namespace Js virtual void ExtractSnapObjectDataInto(TTD::NSSnapObjects::SnapObject* objData, TTD::SlabAllocator& alloc) override; #endif }; + + template <> inline bool VarIsImpl(RecyclableObject* obj) + { + return JavascriptOperators::GetTypeId(obj) == TypeIds_BooleanObject; + } } diff --git a/lib/Runtime/Library/JavascriptBuiltInFunctionList.h b/lib/Runtime/Library/JavascriptBuiltInFunctionList.h index a5b403e700c..2655939af0e 100644 --- a/lib/Runtime/Library/JavascriptBuiltInFunctionList.h +++ b/lib/Runtime/Library/JavascriptBuiltInFunctionList.h @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft Corporation and contributors. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- @@ -41,6 +42,7 @@ BUILTIN(GlobalObject, ChWriteTraceEvent, EntryChWriteTraceEvent, FunctionInfo::E #endif /* IR_VIEWER */ BUILTIN(JavascriptArray, NewInstance, NewInstance, FunctionInfo::SkipDefaultNewObject) +BUILTIN(JavascriptArray, At, EntryAt, FunctionInfo::ErrorOnNew) BUILTIN(JavascriptArray, Concat, EntryConcat, FunctionInfo::ErrorOnNew) BUILTIN(JavascriptArray, Every, EntryEvery, FunctionInfo::ErrorOnNew) BUILTIN(JavascriptArray, Filter, EntryFilter, FunctionInfo::ErrorOnNew) @@ -66,6 +68,8 @@ BUILTIN(JavascriptArray, Unshift, EntryUnshift, FunctionInfo::ErrorOnNew) BUILTIN(JavascriptArray, IsArray, EntryIsArray, FunctionInfo::ErrorOnNew) BUILTIN(JavascriptArray, Find, EntryFind, FunctionInfo::ErrorOnNew) BUILTIN(JavascriptArray, FindIndex, EntryFindIndex, FunctionInfo::ErrorOnNew) +BUILTIN(JavascriptArray, FindLast, EntryFindLast, FunctionInfo::ErrorOnNew) +BUILTIN(JavascriptArray, FindLastIndex, EntryFindLastIndex, FunctionInfo::ErrorOnNew) BUILTIN(JavascriptArray, Entries, EntryEntries, FunctionInfo::ErrorOnNew) BUILTIN(JavascriptArray, Keys, EntryKeys, FunctionInfo::ErrorOnNew) BUILTIN(JavascriptArray, Values, EntryValues, FunctionInfo::ErrorOnNew) @@ -77,6 +81,7 @@ BUILTIN(JavascriptArray, From, EntryFrom, FunctionInfo::ErrorOnNew) BUILTIN(JavascriptBoolean, NewInstance, NewInstance, FunctionInfo::SkipDefaultNewObject) BUILTIN(JavascriptBoolean, ValueOf, EntryValueOf, FunctionInfo::ErrorOnNew | FunctionInfo::HasNoSideEffect | FunctionInfo::CanBeHoisted) BUILTIN(JavascriptBoolean, ToString, EntryToString, FunctionInfo::ErrorOnNew | FunctionInfo::HasNoSideEffect | FunctionInfo::CanBeHoisted) +BUILTIN(JavascriptBigInt, NewInstance, NewInstance, FunctionInfo::SkipDefaultNewObject) BUILTIN(JavascriptDate, NewInstance, NewInstance, FunctionInfo::SkipDefaultNewObject) BUILTIN(JavascriptDate, GetDate, EntryGetDate, FunctionInfo::ErrorOnNew) BUILTIN(JavascriptDate, GetDay, EntryGetDay, FunctionInfo::ErrorOnNew) @@ -97,7 +102,6 @@ BUILTIN(JavascriptDate, GetUTCMilliseconds, EntryGetUTCMilliseconds, FunctionInf BUILTIN(JavascriptDate, GetUTCMinutes, EntryGetUTCMinutes, FunctionInfo::ErrorOnNew) BUILTIN(JavascriptDate, GetUTCMonth, EntryGetUTCMonth, FunctionInfo::ErrorOnNew) BUILTIN(JavascriptDate, GetUTCSeconds, EntryGetUTCSeconds, FunctionInfo::ErrorOnNew) -BUILTIN(JavascriptDate, GetVarDate, EntryGetVarDate, FunctionInfo::ErrorOnNew) BUILTIN(JavascriptDate, Now, EntryNow, FunctionInfo::ErrorOnNew) BUILTIN(JavascriptDate, Parse, EntryParse, FunctionInfo::ErrorOnNew) BUILTIN(JavascriptDate, SetDate, EntrySetDate, FunctionInfo::ErrorOnNew) @@ -135,12 +139,10 @@ BUILTIN(JavascriptError, NewReferenceErrorInstance, NewReferenceErrorInstance, F BUILTIN(JavascriptError, NewSyntaxErrorInstance, NewSyntaxErrorInstance, FunctionInfo::None) BUILTIN(JavascriptError, NewTypeErrorInstance, NewTypeErrorInstance, FunctionInfo::None) BUILTIN(JavascriptError, NewURIErrorInstance, NewURIErrorInstance, FunctionInfo::None) +BUILTIN(JavascriptError, NewAggregateErrorInstance, NewAggregateErrorInstance, FunctionInfo::None) BUILTIN(JavascriptError, NewWebAssemblyCompileErrorInstance, NewWebAssemblyCompileErrorInstance, FunctionInfo::None) BUILTIN(JavascriptError, NewWebAssemblyRuntimeErrorInstance, NewWebAssemblyRuntimeErrorInstance, FunctionInfo::None) BUILTIN(JavascriptError, NewWebAssemblyLinkErrorInstance, NewWebAssemblyLinkErrorInstance, FunctionInfo::None) -#ifdef ENABLE_PROJECTION -BUILTIN(JavascriptError, NewWinRTErrorInstance, NewWinRTErrorInstance, FunctionInfo::None) -#endif BUILTIN(JavascriptError, ToString, EntryToString, FunctionInfo::ErrorOnNew | FunctionInfo::HasNoSideEffect) BUILTIN(JavascriptExternalFunction, ExternalFunctionThunk, ExternalFunctionThunk, FunctionInfo::None) BUILTIN(JavascriptExternalFunction, WrappedFunctionThunk, WrappedFunctionThunk, FunctionInfo::None) @@ -153,6 +155,7 @@ BUILTIN(JavascriptFunction, Bind, EntryBind, FunctionInfo::ErrorOnNew) BUILTIN(JavascriptFunction, Call, EntryCall, FunctionInfo::ErrorOnNew) BUILTIN(JavascriptFunction, ToString, EntryToString, FunctionInfo::ErrorOnNew | FunctionInfo::HasNoSideEffect) BUILTIN(JavascriptFunction, SymbolHasInstance, EntrySymbolHasInstance, FunctionInfo::ErrorOnNew) +BUILTIN(JavascriptFunction, NewAsyncGeneratorFunctionInstance, NewAsyncGeneratorFunctionInstance, FunctionInfo::SkipDefaultNewObject) BUILTIN(JavascriptFunction, NewAsyncFunctionInstance, NewAsyncFunctionInstance, FunctionInfo::SkipDefaultNewObject) #ifdef ALLOW_JIT_REPRO BUILTIN(JavascriptFunction, InvokeJit, EntryInvokeJit, FunctionInfo::ErrorOnNew) @@ -171,6 +174,7 @@ BUILTIN(JavascriptNumber, ValueOf, EntryValueOf, FunctionInfo::ErrorOnNew | Func BUILTIN(JavascriptObject, NewInstance, NewInstance, FunctionInfo::SkipDefaultNewObject) BUILTIN(JavascriptObject, HasOwnProperty, EntryHasOwnProperty, FunctionInfo::ErrorOnNew) BUILTIN(JavascriptObject, PropertyIsEnumerable, EntryPropertyIsEnumerable, FunctionInfo::ErrorOnNew) +BUILTIN(JavascriptObject, HasOwn, EntryHasOwn, FunctionInfo::ErrorOnNew) BUILTIN(JavascriptObject, IsPrototypeOf, EntryIsPrototypeOf, FunctionInfo::ErrorOnNew) BUILTIN(JavascriptObject, ToLocaleString, EntryToLocaleString, FunctionInfo::ErrorOnNew) BUILTIN(JavascriptObject, ToString, EntryToString, FunctionInfo::ErrorOnNew | FunctionInfo::HasNoSideEffect) @@ -219,7 +223,9 @@ BUILTIN(JavascriptRegExp, GetterOptions, EntryGetterOptions, FunctionInfo::Error BUILTIN(JavascriptRegExp, GetterSource, EntryGetterSource, FunctionInfo::ErrorOnNew | FunctionInfo::HasNoSideEffect) BUILTIN(JavascriptRegExp, GetterSticky, EntryGetterSticky, FunctionInfo::ErrorOnNew | FunctionInfo::HasNoSideEffect) BUILTIN(JavascriptRegExp, GetterUnicode, EntryGetterUnicode, FunctionInfo::ErrorOnNew | FunctionInfo::HasNoSideEffect) +BUILTIN(JavascriptRegExp, GetterDotAll, EntryGetterDotAll, FunctionInfo::ErrorOnNew | FunctionInfo::HasNoSideEffect) BUILTIN(JavascriptString, NewInstance, NewInstance, FunctionInfo::SkipDefaultNewObject) +BUILTIN(JavascriptString, At, EntryAt, FunctionInfo::ErrorOnNew) BUILTIN(JavascriptString, CharAt, EntryCharAt, FunctionInfo::ErrorOnNew) BUILTIN(JavascriptString, CharCodeAt, EntryCharCodeAt, FunctionInfo::ErrorOnNew) BUILTIN(JavascriptString, CodePointAt, EntryCodePointAt, FunctionInfo::ErrorOnNew) @@ -244,8 +250,10 @@ BUILTIN(JavascriptString, ToLowerCase, EntryToLowerCase, FunctionInfo::ErrorOnNe BUILTIN(JavascriptString, ToString, EntryToString, FunctionInfo::ErrorOnNew | FunctionInfo::HasNoSideEffect) BUILTIN(JavascriptString, ToUpperCase, EntryToUpperCase, FunctionInfo::ErrorOnNew) BUILTIN(JavascriptString, Trim, EntryTrim, FunctionInfo::ErrorOnNew) -BUILTIN(JavascriptString, TrimLeft, EntryTrimLeft, FunctionInfo::ErrorOnNew) -BUILTIN(JavascriptString, TrimRight, EntryTrimRight, FunctionInfo::ErrorOnNew) +BUILTIN(JavascriptString, TrimLeft, EntryTrimStart, FunctionInfo::ErrorOnNew) +BUILTIN(JavascriptString, TrimStart, EntryTrimStart, FunctionInfo::ErrorOnNew) +BUILTIN(JavascriptString, TrimRight, EntryTrimEnd, FunctionInfo::ErrorOnNew) +BUILTIN(JavascriptString, TrimEnd, EntryTrimEnd, FunctionInfo::ErrorOnNew) BUILTIN(JavascriptString, Repeat, EntryRepeat, FunctionInfo::ErrorOnNew) BUILTIN(JavascriptString, StartsWith, EntryStartsWith, FunctionInfo::ErrorOnNew) BUILTIN(JavascriptString, EndsWith, EntryEndsWith, FunctionInfo::ErrorOnNew) @@ -273,6 +281,7 @@ BUILTIN(JavascriptSymbol, ToString, EntryToString, FunctionInfo::ErrorOnNew | Fu BUILTIN(JavascriptSymbol, For, EntryFor, FunctionInfo::ErrorOnNew) BUILTIN(JavascriptSymbol, KeyFor, EntryKeyFor, FunctionInfo::ErrorOnNew) BUILTIN(JavascriptSymbol, SymbolToPrimitive, EntrySymbolToPrimitive, FunctionInfo::ErrorOnNew) +BUILTIN(JavascriptSymbol, Description, EntryDescription, FunctionInfo::ErrorOnNew | FunctionInfo::HasNoSideEffect | FunctionInfo::CanBeHoisted) BUILTIN(JavascriptProxy, Revocable, EntryRevocable, FunctionInfo::ErrorOnNew) BUILTIN(JavascriptProxy, Revoke, EntryRevoke, FunctionInfo::ErrorOnNew) BUILTIN(JavascriptProxy, NewInstance, NewInstance, FunctionInfo::SkipDefaultNewObject) @@ -346,6 +355,7 @@ BUILTIN(TypedArrayBase, Set, EntrySet, FunctionInfo::ErrorOnNew) BUILTIN(TypedArrayBase, Subarray, EntrySubarray, FunctionInfo::ErrorOnNew) BUILTIN(TypedArrayBase, Of, EntryOf, FunctionInfo::ErrorOnNew) BUILTIN(TypedArrayBase, From, EntryFrom, FunctionInfo::ErrorOnNew) +BUILTIN(TypedArrayBase, At, EntryAt, FunctionInfo::ErrorOnNew) BUILTIN(TypedArrayBase, CopyWithin, EntryCopyWithin, FunctionInfo::ErrorOnNew) BUILTIN(TypedArrayBase, Entries, EntryEntries, FunctionInfo::ErrorOnNew) BUILTIN(TypedArrayBase, Every, EntryEvery, FunctionInfo::ErrorOnNew) @@ -353,6 +363,8 @@ BUILTIN(TypedArrayBase, Fill, EntryFill, FunctionInfo::ErrorOnNew) BUILTIN(TypedArrayBase, Filter, EntryFilter, FunctionInfo::ErrorOnNew) BUILTIN(TypedArrayBase, Find, EntryFind, FunctionInfo::ErrorOnNew) BUILTIN(TypedArrayBase, FindIndex, EntryFindIndex, FunctionInfo::ErrorOnNew) +BUILTIN(TypedArrayBase, FindLast, EntryFindLast, FunctionInfo::ErrorOnNew) +BUILTIN(TypedArrayBase, FindLastIndex, EntryFindLastIndex, FunctionInfo::ErrorOnNew) BUILTIN(TypedArrayBase, ForEach, EntryForEach, FunctionInfo::ErrorOnNew) BUILTIN(TypedArrayBase, IndexOf, EntryIndexOf, FunctionInfo::ErrorOnNew) BUILTIN(TypedArrayBase, Includes, EntryIncludes, FunctionInfo::ErrorOnNew) @@ -457,6 +469,8 @@ BUILTIN(JavascriptStringIterator, Next, EntryNext, FunctionInfo::ErrorOnNew) BUILTIN(JavascriptListIterator, Next, EntryNext, FunctionInfo::ErrorOnNew) BUILTIN(JavascriptPromise, NewInstance, NewInstance, FunctionInfo::SkipDefaultNewObject) BUILTIN(JavascriptPromise, All, EntryAll, FunctionInfo::ErrorOnNew) +BUILTIN(JavascriptPromise, AllSettled, EntryAllSettled, FunctionInfo::ErrorOnNew) +BUILTIN(JavascriptPromise, Any, EntryAny, FunctionInfo::ErrorOnNew) BUILTIN(JavascriptPromise, Catch, EntryCatch, FunctionInfo::ErrorOnNew) BUILTIN(JavascriptPromise, Race, EntryRace, FunctionInfo::ErrorOnNew) BUILTIN(JavascriptPromise, Reject, EntryReject, FunctionInfo::ErrorOnNew) @@ -468,6 +482,8 @@ BUILTIN(JavascriptPromise, Thrower, EntryThrowerFunction, FunctionInfo::ErrorOnN BUILTIN(JavascriptPromise, ResolveOrRejectFunction, EntryResolveOrRejectFunction, FunctionInfo::ErrorOnNew | FunctionInfo::DoNotProfile) BUILTIN(JavascriptPromise, CapabilitiesExecutorFunction, EntryCapabilitiesExecutorFunction, FunctionInfo::ErrorOnNew | FunctionInfo::DoNotProfile) BUILTIN(JavascriptPromise, AllResolveElementFunction, EntryAllResolveElementFunction, FunctionInfo::ErrorOnNew | FunctionInfo::DoNotProfile) +BUILTIN(JavascriptPromise, AllSettledResolveOrRejectElementFunction, EntryAllSettledResolveOrRejectElementFunction, FunctionInfo::ErrorOnNew | FunctionInfo::DoNotProfile) +BUILTIN(JavascriptPromise, AnyRejectElementFunction, EntryAnyRejectElementFunction, FunctionInfo::ErrorOnNew | FunctionInfo::DoNotProfile) BUILTIN(JavascriptPromise, GetterSymbolSpecies, EntryGetterSymbolSpecies, FunctionInfo::ErrorOnNew) BUILTIN(JavascriptReflect, DefineProperty, EntryDefineProperty, FunctionInfo::ErrorOnNew | FunctionInfo::DoNotProfile) BUILTIN(JavascriptReflect, DeleteProperty, EntryDeleteProperty, FunctionInfo::ErrorOnNew | FunctionInfo::DoNotProfile) @@ -486,6 +502,12 @@ BUILTIN(JavascriptGeneratorFunction, NewInstance, NewInstance, FunctionInfo::Ski BUILTIN(JavascriptGenerator, Next, EntryNext, FunctionInfo::ErrorOnNew) BUILTIN(JavascriptGenerator, Return, EntryReturn, FunctionInfo::ErrorOnNew) BUILTIN(JavascriptGenerator, Throw, EntryThrow, FunctionInfo::ErrorOnNew) +BUILTIN(JavascriptAsyncGenerator, Next, EntryNext, FunctionInfo::ErrorOnNew) +BUILTIN(JavascriptAsyncGenerator, Return, EntryReturn, FunctionInfo::ErrorOnNew) +BUILTIN(JavascriptAsyncGenerator, Throw, EntryThrow, FunctionInfo::ErrorOnNew) +BUILTIN(JavascriptAsyncFromSyncIterator, Throw, EntryAsyncFromSyncIteratorThrow, FunctionInfo::ErrorOnNew) +BUILTIN(JavascriptAsyncFromSyncIterator, Next, EntryAsyncFromSyncIteratorNext, FunctionInfo::ErrorOnNew) +BUILTIN(JavascriptAsyncFromSyncIterator, Return, EntryAsyncFromSyncIteratorReturn, FunctionInfo::ErrorOnNew) BUILTIN(SharedArrayBuffer, NewInstance, NewInstance, FunctionInfo::SkipDefaultNewObject) BUILTIN(SharedArrayBuffer, Slice, EntrySlice, FunctionInfo::ErrorOnNew) BUILTIN(SharedArrayBuffer, GetterByteLength, EntryGetterByteLength, FunctionInfo::ErrorOnNew | FunctionInfo::HasNoSideEffect) @@ -504,4 +526,6 @@ BUILTIN(AtomicsObject, Wait, EntryWait, FunctionInfo::ErrorOnNew) BUILTIN(AtomicsObject, Notify, EntryNotify, FunctionInfo::ErrorOnNew) BUILTIN(AtomicsObject, Xor, EntryXor, FunctionInfo::ErrorOnNew) +BUILTIN(EngineInterfaceObject, CallInstanceFunction, Entry_CallInstanceFunction, FunctionInfo::ErrorOnNew | FunctionInfo::DoNotProfile) + #undef BUILTIN_TEMPLATE diff --git a/lib/Runtime/Library/JavascriptBuiltInFunctions.cpp b/lib/Runtime/Library/JavascriptBuiltInFunctions.cpp index c8d6f6f04fb..f41dc0a3b8d 100644 --- a/lib/Runtime/Library/JavascriptBuiltInFunctions.cpp +++ b/lib/Runtime/Library/JavascriptBuiltInFunctions.cpp @@ -3,6 +3,7 @@ // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #include "RuntimeLibraryPch.h" +#include "EngineInterfaceObject.h" namespace Js { diff --git a/lib/Runtime/Library/JavascriptBuiltInFunctions.h b/lib/Runtime/Library/JavascriptBuiltInFunctions.h index 2c6c006252b..485632b4dd1 100644 --- a/lib/Runtime/Library/JavascriptBuiltInFunctions.h +++ b/lib/Runtime/Library/JavascriptBuiltInFunctions.h @@ -14,10 +14,6 @@ namespace Js #define BUILTIN(c, n, e, i) c ## _ ## n, #include "JavascriptBuiltInFunctionList.h" #undef BUILTIN -#ifdef ENABLE_DOM_FAST_PATH - DOMFastPathGetter, - DOMFastPathSetter, -#endif MaxBuiltInEnum }; static FunctionInfo * GetFunctionInfo(Js::LocalFunctionId builtinId); diff --git a/lib/Runtime/Library/JavascriptDate.cpp b/lib/Runtime/Library/JavascriptDate.cpp index da166469a84..187f1883950 100644 --- a/lib/Runtime/Library/JavascriptDate.cpp +++ b/lib/Runtime/Library/JavascriptDate.cpp @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) 2022 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #include "RuntimeLibraryPch.h" @@ -11,7 +12,7 @@ namespace Js JavascriptDate::JavascriptDate(double value, DynamicType * type) : DynamicObject(type), m_date(value) { - Assert(IsDateTypeId(type->GetTypeId())); + Assert(type->GetTypeId() == TypeIds_Date); } JavascriptDate::JavascriptDate(DynamicType * type) @@ -20,26 +21,6 @@ namespace Js Assert(type->GetTypeId() == TypeIds_Date); } - bool JavascriptDate::Is(Var aValue) - { - // All WinRT Date's are also implicitly Javascript dates - return IsDateTypeId(JavascriptOperators::GetTypeId(aValue)); - } - - JavascriptDate* JavascriptDate::FromVar(Var aValue) - { - AssertOrFailFastMsg(Is(aValue), "Ensure var is actually a 'Date'"); - - return static_cast(aValue); - } - - JavascriptDate* JavascriptDate::UnsafeFromVar(Var aValue) - { - AssertMsg(Is(aValue), "Ensure var is actually a 'Date'"); - - return static_cast(aValue); - } - Var JavascriptDate::GetDateData(JavascriptDate* date, DateImplementation::DateData dd, ScriptContext* scriptContext) { return JavascriptNumber::ToVarIntCheck(date->m_date.GetDateData(dd, false, scriptContext), scriptContext); @@ -115,7 +96,7 @@ namespace Js // RecyclableObject* pNew = NewInstanceAsConstructor(args, scriptContext); return isCtorSuperCall ? - JavascriptOperators::OrdinaryCreateFromConstructor(RecyclableObject::FromVar(newTarget), pNew, nullptr, scriptContext) : + JavascriptOperators::OrdinaryCreateFromConstructor(VarTo(newTarget), pNew, nullptr, scriptContext) : pNew; } } @@ -165,23 +146,25 @@ namespace Js // if (args.Info.Count == 2) { - if (JavascriptDate::Is(args[1])) + if (VarIs(args[1])) { - JavascriptDate* dateObject = JavascriptDate::FromVar(args[1]); + JavascriptDate* dateObject = VarTo(args[1]); timeValue = ((dateObject)->m_date).m_tvUtc; } else { Var value = JavascriptConversion::ToPrimitive(args[1], scriptContext); - if (JavascriptString::Is(value)) + if (VarIs(value)) { - timeValue = ParseHelper(scriptContext, JavascriptString::FromVar(value)); + timeValue = ParseHelper(scriptContext, VarTo(value)); } else { timeValue = JavascriptConversion::ToNumber(value, scriptContext); } } + + timeValue = TimeClip(JavascriptNumber::New(timeValue, scriptContext)); pDate->m_date.SetTvUtc(timeValue); return pDate; @@ -235,6 +218,38 @@ namespace Js return pDate; } + // Implementation of ECMA 262 #sec-timeclip + double JavascriptDate::TimeClip(Var x) + { + double time = 0.0; + if (TaggedInt::Is(x)) + { + time = TaggedInt::ToDouble(x); + } + else + { + AssertOrFailFast(JavascriptNumber::Is(x)); + time = JavascriptNumber::GetValue(x); + + // Only perform steps 1, 3, and 4 if the input was not a TaggedInt, since TaggedInts cant be infinite or -0 + if (!NumberUtilities::IsFinite(time)) + { + return NumberConstants::NaN; + } + + // This performs both steps 3 and 4 + time = JavascriptConversion::ToInteger(time); + } + + // Step 2: If abs(time) > 8.64e15, return NaN. + if (Math::Abs(time) > 8.64e15) + { + return NumberConstants::NaN; + } + + return time; + } + // Date.prototype[@@toPrimitive] as described in ES6 spec (Draft May 22, 2014) 20.3.4.45 Var JavascriptDate::EntrySymbolToPrimitive(RecyclableObject* function, CallInfo callInfo, ...) { @@ -254,9 +269,9 @@ namespace Js JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedObject, _u("Date[Symbol.toPrimitive]")); } - if (JavascriptString::Is(args[1])) + if (VarIs(args[1])) { - JavascriptString* StringObject = JavascriptString::FromVar(args[1]); + JavascriptString* StringObject = VarTo(args[1]); const char16 * str = StringObject->GetString(); if (wcscmp(str, _u("default")) == 0 || wcscmp(str, _u("string")) == 0) @@ -264,13 +279,13 @@ namespace Js // Date objects, are unique among built-in ECMAScript object in that they treat "default" as being equivalent to "string" // If hint is the string value "string" or the string value "default", then // Let tryFirst be "string". - return JavascriptConversion::OrdinaryToPrimitive(RecyclableObject::UnsafeFromVar(args[0]), scriptContext); + return JavascriptConversion::OrdinaryToPrimitive(UnsafeVarTo(args[0]), scriptContext); } // Else if hint is the string value "number", then // Let tryFirst be "number". else if(wcscmp(str, _u("number")) == 0) { - return JavascriptConversion::OrdinaryToPrimitive(RecyclableObject::UnsafeFromVar(args[0]), scriptContext); + return JavascriptConversion::OrdinaryToPrimitive(UnsafeVarTo(args[0]), scriptContext); } //anything else should throw a type error } @@ -288,7 +303,7 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !JavascriptDate::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { Var result = nullptr; if (TryInvokeRemotely(EntryGetDate, scriptContext, args, &result)) @@ -297,7 +312,7 @@ namespace Js } JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDate, _u("Date.prototype.getDate")); } - JavascriptDate* date = JavascriptDate::FromVar(args[0]); + JavascriptDate* date = VarTo(args[0]); if (!date->m_date.IsNaN()) { @@ -315,7 +330,7 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !JavascriptDate::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { Var result = nullptr; if (TryInvokeRemotely(EntryGetDay, scriptContext, args, &result)) @@ -324,7 +339,7 @@ namespace Js } JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDate, _u("Date.prototype.getDay")); } - JavascriptDate* date = JavascriptDate::FromVar(args[0]); + JavascriptDate* date = VarTo(args[0]); if (!date->m_date.IsNaN()) { @@ -342,7 +357,7 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !JavascriptDate::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { Var result = nullptr; if (TryInvokeRemotely(EntryGetFullYear, scriptContext, args, &result)) @@ -351,7 +366,7 @@ namespace Js } JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDate, _u("Date.prototype.getFullYear")); } - JavascriptDate* date = JavascriptDate::FromVar(args[0]); + JavascriptDate* date = VarTo(args[0]); if (!date->m_date.IsNaN()) { @@ -369,7 +384,7 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !JavascriptDate::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { Var result = nullptr; if (TryInvokeRemotely(EntryGetYear, scriptContext, args, &result)) @@ -378,7 +393,7 @@ namespace Js } JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDate, _u("Date.prototype.getYear")); } - JavascriptDate* date = JavascriptDate::FromVar(args[0]); + JavascriptDate* date = VarTo(args[0]); if (!date->m_date.IsNaN()) { @@ -396,7 +411,7 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !JavascriptDate::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { Var result = nullptr; if (TryInvokeRemotely(EntryGetHours, scriptContext, args, &result)) @@ -405,7 +420,7 @@ namespace Js } JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDate, _u("Date.prototype.getHours")); } - JavascriptDate* date = JavascriptDate::FromVar(args[0]); + JavascriptDate* date = VarTo(args[0]); if (!date->m_date.IsNaN()) { @@ -423,7 +438,7 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !JavascriptDate::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { Var result = nullptr; if (TryInvokeRemotely(EntryGetMilliseconds, scriptContext, args, &result)) @@ -432,7 +447,7 @@ namespace Js } JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDate, _u("Date.prototype.getMilliseconds")); } - JavascriptDate* date = JavascriptDate::FromVar(args[0]); + JavascriptDate* date = VarTo(args[0]); if (!date->m_date.IsNaN()) { @@ -450,7 +465,7 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !JavascriptDate::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { Var result = nullptr; if (TryInvokeRemotely(EntryGetMinutes, scriptContext, args, &result)) @@ -459,7 +474,7 @@ namespace Js } JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDate, _u("Date.prototype.getMinutes")); } - JavascriptDate* date = JavascriptDate::FromVar(args[0]); + JavascriptDate* date = VarTo(args[0]); if (!date->m_date.IsNaN()) { @@ -477,7 +492,7 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !JavascriptDate::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { Var result = nullptr; if (TryInvokeRemotely(EntryGetMonth, scriptContext, args, &result)) @@ -486,7 +501,7 @@ namespace Js } JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDate, _u("Date.prototype.getMonth")); } - JavascriptDate* date = JavascriptDate::FromVar(args[0]); + JavascriptDate* date = VarTo(args[0]); if (!date->m_date.IsNaN()) { @@ -504,7 +519,7 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !JavascriptDate::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { Var result = nullptr; if (TryInvokeRemotely(EntryGetSeconds, scriptContext, args, &result)) @@ -513,7 +528,7 @@ namespace Js } JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDate, _u("Date.prototype.getSeconds")); } - JavascriptDate* date = JavascriptDate::FromVar(args[0]); + JavascriptDate* date = VarTo(args[0]); if (!date->m_date.IsNaN()) { @@ -531,7 +546,7 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !JavascriptDate::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { Var result = nullptr; if (TryInvokeRemotely(EntryGetTime, scriptContext, args, &result)) @@ -540,7 +555,7 @@ namespace Js } JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDate, _u("Date.prototype.getTime")); } - JavascriptDate* date = JavascriptDate::FromVar(args[0]); + JavascriptDate* date = VarTo(args[0]); return JavascriptNumber::ToVarNoCheck(date->GetTime(), scriptContext); } @@ -554,7 +569,7 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !JavascriptDate::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { Var result = nullptr; if (TryInvokeRemotely(EntryGetTimezoneOffset, scriptContext, args, &result)) @@ -563,7 +578,7 @@ namespace Js } JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDate, _u("Date.prototype.getTimezoneOffset")); } - JavascriptDate* date = JavascriptDate::FromVar(args[0]); + JavascriptDate* date = VarTo(args[0]); return JavascriptDate::GetDateData(date, DateImplementation::DateData::TimezoneOffset, scriptContext); } @@ -577,7 +592,7 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !JavascriptDate::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { Var result = nullptr; if (TryInvokeRemotely(EntryGetUTCDate, scriptContext, args, &result)) @@ -586,7 +601,7 @@ namespace Js } JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDate, _u("Date.prototype.getUTCDate")); } - JavascriptDate* date = JavascriptDate::FromVar(args[0]); + JavascriptDate* date = VarTo(args[0]); return JavascriptDate::GetUTCDateData(date, DateImplementation::DateData::Date, scriptContext); } @@ -600,7 +615,7 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !JavascriptDate::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { Var result = nullptr; if (TryInvokeRemotely(EntryGetUTCDay, scriptContext, args, &result)) @@ -609,7 +624,7 @@ namespace Js } JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDate, _u("Date.prototype.getUTCDay")); } - JavascriptDate* date = JavascriptDate::FromVar(args[0]); + JavascriptDate* date = VarTo(args[0]); return JavascriptDate::GetUTCDateData(date, DateImplementation::DateData::Day, scriptContext); } @@ -623,7 +638,7 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !JavascriptDate::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { Var result = nullptr; if (TryInvokeRemotely(EntryGetUTCFullYear, scriptContext, args, &result)) @@ -632,7 +647,7 @@ namespace Js } JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDate, _u("Date.prototype.getUTCFullYear")); } - JavascriptDate* date = JavascriptDate::FromVar(args[0]); + JavascriptDate* date = VarTo(args[0]); return JavascriptDate::GetUTCDateData(date, DateImplementation::DateData::FullYear, scriptContext); } @@ -646,7 +661,7 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !JavascriptDate::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { Var result = nullptr; if (TryInvokeRemotely(EntryGetUTCHours, scriptContext, args, &result)) @@ -655,7 +670,7 @@ namespace Js } JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDate, _u("Date.prototype.getUTCHours")); } - JavascriptDate* date = JavascriptDate::FromVar(args[0]); + JavascriptDate* date = VarTo(args[0]); return JavascriptDate::GetUTCDateData(date, DateImplementation::DateData::Hours, scriptContext); } @@ -669,7 +684,7 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !JavascriptDate::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { Var result = nullptr; if (TryInvokeRemotely(EntryGetUTCMilliseconds, scriptContext, args, &result)) @@ -678,7 +693,7 @@ namespace Js } JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDate, _u("Date.prototype.getUTCMilliseconds")); } - JavascriptDate* date = JavascriptDate::FromVar(args[0]); + JavascriptDate* date = VarTo(args[0]); return JavascriptDate::GetUTCDateData(date, DateImplementation::DateData::Milliseconds, scriptContext); } @@ -692,7 +707,7 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !JavascriptDate::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { Var result = nullptr; if (TryInvokeRemotely(EntryGetUTCMinutes, scriptContext, args, &result)) @@ -701,7 +716,7 @@ namespace Js } JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDate, _u("Date.prototype.getUTCMinutes")); } - JavascriptDate* date = JavascriptDate::FromVar(args[0]); + JavascriptDate* date = VarTo(args[0]); return JavascriptDate::GetUTCDateData(date, DateImplementation::DateData::Minutes, scriptContext); } @@ -715,7 +730,7 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !JavascriptDate::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { Var result = nullptr; if (TryInvokeRemotely(EntryGetUTCMonth, scriptContext, args, &result)) @@ -724,7 +739,7 @@ namespace Js } JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDate, _u("Date.prototype.getUTCMonth")); } - JavascriptDate* date = JavascriptDate::FromVar(args[0]); + JavascriptDate* date = VarTo(args[0]); return JavascriptDate::GetUTCDateData(date, DateImplementation::DateData::Month, scriptContext); } @@ -738,7 +753,7 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !JavascriptDate::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { Var result = nullptr; if (TryInvokeRemotely(EntryGetUTCSeconds, scriptContext, args, &result)) @@ -747,36 +762,11 @@ namespace Js } JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDate, _u("Date.prototype.getUTCSeconds")); } - JavascriptDate* date = JavascriptDate::FromVar(args[0]); + JavascriptDate* date = VarTo(args[0]); return JavascriptDate::GetUTCDateData(date, DateImplementation::DateData::Seconds, scriptContext); } - Var JavascriptDate::EntryGetVarDate(RecyclableObject* function, CallInfo callInfo, ...) - { - PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); - - ARGUMENTS(args, callInfo); - ScriptContext* scriptContext = function->GetScriptContext(); - - Assert(!(callInfo.Flags & CallFlags_New)); - - if (args.Info.Count == 0 || !JavascriptDate::Is(args[0])) - { - Var result = nullptr; - if (TryInvokeRemotely(EntryGetVarDate, scriptContext, args, &result)) - { - return result; - } - JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDate, _u("Date.prototype.getVarDate")); - } - JavascriptDate* date = JavascriptDate::FromVar(args[0]); - - return scriptContext->GetLibrary()->CreateVariantDate( - DateImplementation::VarDateFromJsUtcTime(date->GetTime(), scriptContext) - ); - } - Var JavascriptDate::EntryParse(RecyclableObject* function, CallInfo callInfo, ...) { PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); @@ -852,7 +842,7 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !JavascriptDate::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { Var result = nullptr; if (TryInvokeRemotely(EntrySetDate, scriptContext, args, &result)) @@ -861,7 +851,7 @@ namespace Js } JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDate, _u("Date.prototype.setDate")); } - JavascriptDate* date = JavascriptDate::FromVar(args[0]); + JavascriptDate* date = VarTo(args[0]); return JavascriptDate::SetDateData(date, args, DateImplementation::DateData::Date, scriptContext); } @@ -875,7 +865,7 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !JavascriptDate::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { Var result = nullptr; if (TryInvokeRemotely(EntrySetFullYear, scriptContext, args, &result)) @@ -884,7 +874,7 @@ namespace Js } JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDate, _u("Date.prototype.setFullYear")); } - JavascriptDate* date = JavascriptDate::FromVar(args[0]); + JavascriptDate* date = VarTo(args[0]); return JavascriptDate::SetDateData(date, args, DateImplementation::DateData::FullYear, scriptContext); } @@ -898,7 +888,7 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !JavascriptDate::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { Var result = nullptr; if (TryInvokeRemotely(EntrySetYear, scriptContext, args, &result)) @@ -907,7 +897,7 @@ namespace Js } JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDate, _u("Date.prototype.setYear")); } - JavascriptDate* date = JavascriptDate::FromVar(args[0]); + JavascriptDate* date = VarTo(args[0]); return JavascriptDate::SetDateData(date, args, DateImplementation::DateData::Year, scriptContext); } @@ -921,7 +911,7 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !JavascriptDate::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { Var result = nullptr; if (TryInvokeRemotely(EntrySetHours, scriptContext, args, &result)) @@ -930,7 +920,7 @@ namespace Js } JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDate, _u("Date.prototype.setHours")); } - JavascriptDate* date = JavascriptDate::FromVar(args[0]); + JavascriptDate* date = VarTo(args[0]); return JavascriptDate::SetDateData(date, args, DateImplementation::DateData::Hours, scriptContext); } @@ -944,7 +934,7 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !JavascriptDate::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { Var result = nullptr; if (TryInvokeRemotely(EntrySetMilliseconds, scriptContext, args, &result)) @@ -953,7 +943,7 @@ namespace Js } JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDate, _u("Date.prototype.setMilliseconds")); } - JavascriptDate* date = JavascriptDate::FromVar(args[0]); + JavascriptDate* date = VarTo(args[0]); return JavascriptDate::SetDateData(date, args, DateImplementation::DateData::Milliseconds, scriptContext); } @@ -967,7 +957,7 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !JavascriptDate::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { Var result = nullptr; if (TryInvokeRemotely(EntrySetMinutes, scriptContext, args, &result)) @@ -976,7 +966,7 @@ namespace Js } JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDate, _u("Date.prototype.setMinutes")); } - JavascriptDate* date = JavascriptDate::FromVar(args[0]); + JavascriptDate* date = VarTo(args[0]); return JavascriptDate::SetDateData(date, args, DateImplementation::DateData::Minutes, scriptContext); } @@ -990,7 +980,7 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !JavascriptDate::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { Var result = nullptr; if (TryInvokeRemotely(EntrySetMonth, scriptContext, args, &result)) @@ -999,7 +989,7 @@ namespace Js } JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDate, _u("Date.prototype.setMonth")); } - JavascriptDate* date = JavascriptDate::FromVar(args[0]); + JavascriptDate* date = VarTo(args[0]); return JavascriptDate::SetDateData(date, args, DateImplementation::DateData::Month, scriptContext); } @@ -1013,7 +1003,7 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !JavascriptDate::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { Var result = nullptr; if (TryInvokeRemotely(EntrySetSeconds, scriptContext, args, &result)) @@ -1022,7 +1012,7 @@ namespace Js } JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDate, _u("Date.prototype.setSeconds")); } - JavascriptDate* date = JavascriptDate::FromVar(args[0]); + JavascriptDate* date = VarTo(args[0]); return JavascriptDate::SetDateData(date, args, DateImplementation::DateData::Seconds, scriptContext); } @@ -1036,7 +1026,7 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !JavascriptDate::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { Var result = nullptr; if (TryInvokeRemotely(EntrySetTime, scriptContext, args, &result)) @@ -1045,7 +1035,7 @@ namespace Js } JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDate, _u("Date.prototype.setTime")); } - JavascriptDate* date = JavascriptDate::FromVar(args[0]); + JavascriptDate* date = VarTo(args[0]); AssertMsg(args.Info.Count > 0, "Negative argument count"); double value; @@ -1076,7 +1066,7 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !JavascriptDate::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { Var result = nullptr; if (TryInvokeRemotely(EntrySetUTCDate, scriptContext, args, &result)) @@ -1085,7 +1075,7 @@ namespace Js } JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDate, _u("Date.prototype.setUTCDate")); } - JavascriptDate* date = JavascriptDate::FromVar(args[0]); + JavascriptDate* date = VarTo(args[0]); return JavascriptDate::SetUTCDateData(date, args, DateImplementation::DateData::Date, scriptContext); } @@ -1099,7 +1089,7 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !JavascriptDate::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { Var result = nullptr; if (TryInvokeRemotely(EntrySetUTCFullYear, scriptContext, args, &result)) @@ -1108,7 +1098,7 @@ namespace Js } JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDate, _u("Date.prototype.setUTCFullYear")); } - JavascriptDate* date = JavascriptDate::FromVar(args[0]); + JavascriptDate* date = VarTo(args[0]); return JavascriptDate::SetUTCDateData(date, args, DateImplementation::DateData::FullYear, scriptContext); } @@ -1122,7 +1112,7 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !JavascriptDate::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { Var result = nullptr; if (TryInvokeRemotely(EntrySetUTCHours, scriptContext, args, &result)) @@ -1131,7 +1121,7 @@ namespace Js } JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDate, _u("Date.prototype.setUTCHours")); } - JavascriptDate* date = JavascriptDate::FromVar(args[0]); + JavascriptDate* date = VarTo(args[0]); return JavascriptDate::SetUTCDateData(date, args, DateImplementation::DateData::Hours, scriptContext); } @@ -1145,7 +1135,7 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !JavascriptDate::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { Var result = nullptr; if (TryInvokeRemotely(EntrySetUTCMilliseconds, scriptContext, args, &result)) @@ -1154,7 +1144,7 @@ namespace Js } JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDate, _u("Date.prototype.setUTCMilliseconds")); } - JavascriptDate* date = JavascriptDate::FromVar(args[0]); + JavascriptDate* date = VarTo(args[0]); return JavascriptDate::SetUTCDateData(date, args, DateImplementation::DateData::Milliseconds, scriptContext); } @@ -1168,7 +1158,7 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !JavascriptDate::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { Var result = nullptr; if (TryInvokeRemotely(EntrySetUTCMinutes, scriptContext, args, &result)) @@ -1177,7 +1167,7 @@ namespace Js } JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDate, _u("Date.prototype.setUTCMinutes")); } - JavascriptDate* date = JavascriptDate::FromVar(args[0]); + JavascriptDate* date = VarTo(args[0]); return JavascriptDate::SetUTCDateData(date, args, DateImplementation::DateData::Minutes, scriptContext); } @@ -1191,7 +1181,7 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !JavascriptDate::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { Var result = nullptr; if (TryInvokeRemotely(EntrySetUTCMonth, scriptContext, args, &result)) @@ -1200,7 +1190,7 @@ namespace Js } JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDate, _u("Date.prototype.setUTCMonth")); } - JavascriptDate* date = JavascriptDate::FromVar(args[0]); + JavascriptDate* date = VarTo(args[0]); return JavascriptDate::SetUTCDateData(date, args, DateImplementation::DateData::Month, scriptContext); } @@ -1214,7 +1204,7 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !JavascriptDate::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { Var result = nullptr; if (TryInvokeRemotely(EntrySetUTCSeconds, scriptContext, args, &result)) @@ -1223,7 +1213,7 @@ namespace Js } JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDate, _u("Date.prototype.setUTCSeconds")); } - JavascriptDate* date = JavascriptDate::FromVar(args[0]); + JavascriptDate* date = VarTo(args[0]); return JavascriptDate::SetUTCDateData(date, args, DateImplementation::DateData::Seconds, scriptContext); } @@ -1237,7 +1227,7 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !JavascriptDate::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { Var result = nullptr; if (TryInvokeRemotely(EntryToDateString, scriptContext, args, &result)) @@ -1246,7 +1236,7 @@ namespace Js } JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDate, _u("Date.prototype.toDateString")); } - JavascriptDate* date = JavascriptDate::FromVar(args[0]); + JavascriptDate* date = VarTo(args[0]); AssertMsg(args.Info.Count > 0, "Negative argument count"); return date->m_date.GetString( @@ -1264,7 +1254,7 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); CHAKRATEL_LANGSTATS_INC_BUILTINCOUNT(Date_Prototype_toISOString); - if (args.Info.Count == 0 || !JavascriptDate::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { Var result = nullptr; if (TryInvokeRemotely(EntryToISOString, scriptContext, args, &result)) @@ -1273,7 +1263,7 @@ namespace Js } JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDate, _u("Date.prototype.toISOString")); } - JavascriptDate* date = JavascriptDate::FromVar(args[0]); + JavascriptDate* date = VarTo(args[0]); AssertMsg(args.Info.Count > 0, "Negative argument count"); return date->m_date.GetISOString(scriptContext); @@ -1316,7 +1306,7 @@ namespace Js { JavascriptError::ThrowTypeError(scriptContext, JSERR_Property_NeedFunction, scriptContext->GetPropertyName(PropertyIds::toISOString)->GetBuffer()); } - RecyclableObject* toISOFunc = RecyclableObject::FromVar(toISO); + RecyclableObject* toISOFunc = VarTo(toISO); return scriptContext->GetThreadContext()->ExecuteImplicitCall(toISOFunc, Js::ImplicitCall_Accessor, [=]()->Js::Var { return CALL_FUNCTION(scriptContext->GetThreadContext(), toISOFunc, CallInfo(1), thisObj); @@ -1332,7 +1322,7 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !JavascriptDate::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { Var result = nullptr; if (TryInvokeRemotely(EntryToLocaleDateString, scriptContext, args, &result)) @@ -1341,7 +1331,7 @@ namespace Js } JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDate, _u("Date.prototype.toLocaleDateString")); } - JavascriptDate* date = JavascriptDate::FromVar(args[0]); + JavascriptDate* date = VarTo(args[0]); #ifdef ENABLE_INTL_OBJECT if (CONFIG_FLAG(IntlBuiltIns) && scriptContext->IsIntlEnabled()){ @@ -1390,7 +1380,7 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !JavascriptDate::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { Var result = nullptr; if (TryInvokeRemotely(EntryToLocaleString, scriptContext, args, &result)) @@ -1399,7 +1389,7 @@ namespace Js } JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDate, _u("Date.prototype.toLocaleString")); } - JavascriptDate* date = JavascriptDate::FromVar(args[0]); + JavascriptDate* date = VarTo(args[0]); #ifdef ENABLE_INTL_OBJECT if (CONFIG_FLAG(IntlBuiltIns) && scriptContext->IsIntlEnabled()){ @@ -1458,7 +1448,7 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !JavascriptDate::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { Var result = nullptr; if (TryInvokeRemotely(EntryToLocaleTimeString, scriptContext, args, &result)) @@ -1467,7 +1457,7 @@ namespace Js } JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDate, _u("Date.prototype.toLocaleTimeString")); } - JavascriptDate* date = JavascriptDate::FromVar(args[0]); + JavascriptDate* date = VarTo(args[0]); #ifdef ENABLE_INTL_OBJECT if (CONFIG_FLAG(IntlBuiltIns) && scriptContext->IsIntlEnabled()){ @@ -1515,7 +1505,7 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !JavascriptDate::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { Var result = nullptr; if (TryInvokeRemotely(EntryToTimeString, scriptContext, args, &result)) @@ -1524,7 +1514,7 @@ namespace Js } JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDate, _u("Date.prototype.toTimeString")); } - JavascriptDate* date = JavascriptDate::FromVar(args[0]); + JavascriptDate* date = VarTo(args[0]); AssertMsg(args.Info.Count > 0, "Negative argument count"); @@ -1542,7 +1532,7 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !JavascriptDate::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { Var result = nullptr; if (TryInvokeRemotely(EntryToUTCString, scriptContext, args, &result)) @@ -1551,7 +1541,7 @@ namespace Js } JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDate, _u("Date.prototype.toUTCString")); } - JavascriptDate* date = JavascriptDate::FromVar(args[0]); + JavascriptDate* date = VarTo(args[0]); AssertMsg(args.Info.Count > 0, "Negative argument count"); return date->m_date.GetString( @@ -1568,7 +1558,7 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !JavascriptDate::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { Var result = nullptr; if (TryInvokeRemotely(EntryValueOf, scriptContext, args, &result)) @@ -1577,7 +1567,7 @@ namespace Js } JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDate, _u("Date.prototype.valueOf")); } - JavascriptDate* date = JavascriptDate::FromVar(args[0]); + JavascriptDate* date = VarTo(args[0]); AssertMsg(args.Info.Count > 0, "Negative argument count"); double value = date->m_date.GetMilliSeconds(); @@ -1593,7 +1583,7 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !JavascriptDate::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { Var result = nullptr; if (TryInvokeRemotely(EntryToString, scriptContext, args, &result)) @@ -1602,7 +1592,7 @@ namespace Js } JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedDate, _u("Date.prototype.toString")); } - JavascriptDate* date = JavascriptDate::FromVar(args[0]); + JavascriptDate* date = VarTo(args[0]); AssertMsg(args.Info.Count > 0, "Negative argument count"); return JavascriptDate::ToString(date, scriptContext); @@ -1612,7 +1602,7 @@ namespace Js { if (JavascriptOperators::GetTypeId(args[0]) == TypeIds_HostDispatch) { - if (RecyclableObject::FromVar(args[0])->InvokeBuiltInOperationRemotely(entryPoint, args, result)) + if (VarTo(args[0])->InvokeBuiltInOperationRemotely(entryPoint, args, result)) { return TRUE; } diff --git a/lib/Runtime/Library/JavascriptDate.h b/lib/Runtime/Library/JavascriptDate.h index 2d665f1a8a2..2326e9255c2 100644 --- a/lib/Runtime/Library/JavascriptDate.h +++ b/lib/Runtime/Library/JavascriptDate.h @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) 2022 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #pragma once @@ -20,11 +21,7 @@ namespace Js JavascriptDate(double value, DynamicType * type); JavascriptDate(DynamicType * type); - static bool Is(Var aValue); - double GetTime() { return m_date.GetMilliSeconds(); } - static JavascriptDate* FromVar(Var aValue); - static JavascriptDate* UnsafeFromVar(Var aValue); class EntryInfo { @@ -49,7 +46,6 @@ namespace Js static FunctionInfo GetUTCMinutes; static FunctionInfo GetUTCMonth; static FunctionInfo GetUTCSeconds; - static FunctionInfo GetVarDate; static FunctionInfo Now; static FunctionInfo Parse; static FunctionInfo SetDate; @@ -102,7 +98,6 @@ namespace Js static Var EntryGetUTCMinutes(RecyclableObject* function, CallInfo callInfo, ...); static Var EntryGetUTCMonth(RecyclableObject* function, CallInfo callInfo, ...); static Var EntryGetUTCSeconds(RecyclableObject* function, CallInfo callInfo, ...); - static Var EntryGetVarDate(RecyclableObject* function, CallInfo callInfo, ...); static Var EntryNow(RecyclableObject* function, CallInfo callInfo, ...); static Var EntryParse(RecyclableObject* function, CallInfo callInfo, ...); static Var EntrySetDate(RecyclableObject* function, CallInfo callInfo, ...); @@ -133,6 +128,7 @@ namespace Js static Var EntryUTC(RecyclableObject* function, CallInfo callInfo, ...); static Var EntryValueOf(RecyclableObject* function, CallInfo callInfo, ...); static Var EntrySymbolToPrimitive(RecyclableObject* function, CallInfo callInfo, ...); + static double JavascriptDate::TimeClip(Var x); static JavascriptString* ToLocaleString(JavascriptDate* date, ScriptContext* requestContext); static JavascriptString* ToString(JavascriptDate* date, ScriptContext* requestContext); @@ -159,4 +155,9 @@ namespace Js #endif }; + template <> inline bool VarIsImpl(RecyclableObject* obj) + { + return JavascriptOperators::GetTypeId(obj) == TypeIds_Date; + } + } // namespace Js diff --git a/lib/Runtime/Library/JavascriptError.cpp b/lib/Runtime/Library/JavascriptError.cpp index 10ebb61eeb1..3fd9624e37d 100644 --- a/lib/Runtime/Library/JavascriptError.cpp +++ b/lib/Runtime/Library/JavascriptError.cpp @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #include "RuntimeLibraryPch.h" @@ -27,12 +28,6 @@ namespace Js return hr; } - bool JavascriptError::Is(Var aValue) - { - AssertMsg(aValue != NULL, "Error is NULL - did it come from an oom exception?"); - return JavascriptOperators::GetTypeId(aValue) == TypeIds_Error; - } - bool JavascriptError::IsRemoteError(Var aValue) { // IJscriptInfo is not remotable (we don't register the proxy), @@ -47,12 +42,12 @@ namespace Js void JavascriptError::SetNotEnumerable(PropertyId propertyId) { - // Not all the properties of Error objects (like description, stack, number etc.) are in the spec. + // Not all the properties of Error objects (like stack, number etc.) are in the spec. // Other browsers have all the properties as not-enumerable. SetEnumerable(propertyId, false); } - Var JavascriptError::NewInstance(RecyclableObject* function, JavascriptError* pError, CallInfo callInfo, Var newTarget, Var message) + Var JavascriptError::NewInstance(RecyclableObject* function, JavascriptError* pError, CallInfo callInfo, Var newTarget, Var message, Var options) { ScriptContext* scriptContext = function->GetScriptContext(); @@ -70,63 +65,24 @@ namespace Js pError->SetNotEnumerable(PropertyIds::message); } + if (JavascriptOperators::IsObject(options) && JavascriptOperators::HasProperty(UnsafeVarTo(options), PropertyIds::cause)) + { + Var cause = JavascriptOperators::GetPropertyNoCache(UnsafeVarTo(options), PropertyIds::cause, scriptContext); + JavascriptOperators::SetProperty(pError, pError, PropertyIds::cause, cause, scriptContext); + pError->SetNotEnumerable(PropertyIds::cause); + } + + JavascriptExceptionContext exceptionContext; JavascriptExceptionOperators::WalkStackForExceptionContext(*scriptContext, exceptionContext, pError, JavascriptExceptionOperators::StackCrawlLimitOnThrow(pError, *scriptContext), /*returnAddress=*/ nullptr, /*isThrownException=*/ false, /*resetSatck=*/ false); JavascriptExceptionOperators::AddStackTraceToObject(pError, exceptionContext.GetStackTrace(), *scriptContext, /*isThrownException=*/ false, /*resetSatck=*/ false); return isCtorSuperCall ? - JavascriptOperators::OrdinaryCreateFromConstructor(RecyclableObject::FromVar(newTarget), pError, nullptr, scriptContext) : + JavascriptOperators::OrdinaryCreateFromConstructor(VarTo(newTarget), pError, nullptr, scriptContext) : pError; } - Var JavascriptError::NewErrorInstance(RecyclableObject* function, CallInfo callInfo, ...) - { - PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); - ARGUMENTS(args, callInfo); - - ScriptContext* scriptContext = function->GetScriptContext(); - JavascriptError* pError = scriptContext->GetLibrary()->CreateError(); - - // Process the arguments for IE specific behaviors for numbers and description - - JavascriptString* descriptionString = nullptr; - Var message; - bool hasNumber = false; - double number = 0; - if (args.Info.Count >= 3) - { - hasNumber = true; - number = JavascriptConversion::ToNumber(args[1], scriptContext); - message = args[2]; - - descriptionString = JavascriptConversion::ToString(message, scriptContext); - } - else if (args.Info.Count == 2) - { - message = args[1]; - descriptionString = JavascriptConversion::ToString(message, scriptContext); - } - else - { - hasNumber = true; - message = scriptContext->GetLibrary()->GetUndefined(); - descriptionString = scriptContext->GetLibrary()->GetEmptyString(); - } - - Assert(descriptionString != nullptr); - if (hasNumber) - { - JavascriptOperators::InitProperty(pError, PropertyIds::number, JavascriptNumber::ToVarNoCheck(number, scriptContext)); - pError->SetNotEnumerable(PropertyIds::number); - } - JavascriptOperators::SetProperty(pError, pError, PropertyIds::description, descriptionString, scriptContext); - pError->SetNotEnumerable(PropertyIds::description); - - Var newTarget = args.GetNewTarget(); - return JavascriptError::NewInstance(function, pError, callInfo, newTarget, message); - } - #define NEW_ERROR(name) \ Var JavascriptError::New##name##Instance(RecyclableObject* function, CallInfo callInfo, ...) \ { \ @@ -136,8 +92,10 @@ namespace Js JavascriptError* pError = scriptContext->GetLibrary()->Create##name(); \ Var newTarget = args.GetNewTarget(); \ Var message = args.Info.Count > 1 ? args[1] : scriptContext->GetLibrary()->GetUndefined(); \ - return JavascriptError::NewInstance(function, pError, callInfo, newTarget, message); \ + Var options = args.Info.Count > 2 ? args[2] : scriptContext->GetLibrary()->GetUndefined(); \ + return JavascriptError::NewInstance(function, pError, callInfo, newTarget, message, options); \ } + NEW_ERROR(Error); NEW_ERROR(EvalError); NEW_ERROR(RangeError); NEW_ERROR(ReferenceError); @@ -150,20 +108,78 @@ namespace Js #undef NEW_ERROR -#ifdef ENABLE_PROJECTION - Var JavascriptError::NewWinRTErrorInstance(RecyclableObject* function, CallInfo callInfo, ...) + Var JavascriptError::NewAggregateErrorInstance(RecyclableObject* function, CallInfo callInfo, ...) { PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); - ARGUMENTS(args, callInfo); ScriptContext* scriptContext = function->GetScriptContext(); - JavascriptError* pError = scriptContext->GetHostScriptContext()->CreateWinRTError(nullptr, nullptr); - + JavascriptError* pError = scriptContext->GetLibrary()->CreateAggregateError(); Var newTarget = args.GetNewTarget(); - Var message = args.Info.Count > 1 ? args[1] : scriptContext->GetLibrary()->GetUndefined(); - return JavascriptError::NewInstance(function, pError, callInfo, newTarget, message); + Var errors = args.Info.Count > 1 ? args[1] : scriptContext->GetLibrary()->GetUndefined(); + Var message = args.Info.Count > 2 ? args[2] : scriptContext->GetLibrary()->GetUndefined(); + Var options = args.Info.Count > 3 ? args[3] : scriptContext->GetLibrary()->GetUndefined(); + + bool isCtorSuperCall = (callInfo.Flags & CallFlags_New) && newTarget != nullptr && !JavascriptOperators::IsUndefined(newTarget); + JavascriptString* messageString = nullptr; + + if (JavascriptOperators::GetTypeId(message) != TypeIds_Undefined) + { + messageString = JavascriptConversion::ToString(message, scriptContext); + } + + if (messageString) + { + JavascriptOperators::SetProperty(pError, pError, PropertyIds::message, messageString, scriptContext); + pError->SetNotEnumerable(PropertyIds::message); + } + + if (JavascriptOperators::IsObject(options) && JavascriptOperators::HasProperty(UnsafeVarTo(options), PropertyIds::cause)) + { + Var cause = JavascriptOperators::GetPropertyNoCache(UnsafeVarTo(options), PropertyIds::cause, scriptContext); + JavascriptOperators::SetProperty(pError, pError, PropertyIds::cause, cause, scriptContext); + pError->SetNotEnumerable(PropertyIds::cause); + } + + using ErrorListType = SList; + Recycler* recycler = scriptContext->GetRecycler(); + ErrorListType* errorsList = RecyclerNew(recycler, ErrorListType, recycler); + RecyclableObject* iterator = JavascriptOperators::GetIterator(errors, scriptContext); + JavascriptOperators::DoIteratorStepAndValue(iterator, scriptContext, [&](Var next) + { + errorsList->Push(next); + }); + errorsList->Reverse(); + JavascriptError::SetErrorsList(pError, errorsList, scriptContext); + + JavascriptExceptionContext exceptionContext; + JavascriptExceptionOperators::WalkStackForExceptionContext(*scriptContext, exceptionContext, pError, + JavascriptExceptionOperators::StackCrawlLimitOnThrow(pError, *scriptContext), /*returnAddress=*/ nullptr, /*isThrownException=*/ false, /*resetSatck=*/ false); + JavascriptExceptionOperators::AddStackTraceToObject(pError, exceptionContext.GetStackTrace(), *scriptContext, /*isThrownException=*/ false, /*resetSatck=*/ false); + + return isCtorSuperCall ? + JavascriptOperators::OrdinaryCreateFromConstructor(VarTo(newTarget), pError, nullptr, scriptContext) : + pError; + } + + void JavascriptError::SetErrorsList(JavascriptError* pError, SList* errorsList, ScriptContext* scriptContext) + { + JavascriptArray* errors = scriptContext->GetLibrary()->CreateArray(errorsList->Count()); + uint32 n = 0; + SList::Iterator it = errorsList->GetIterator(); + while (it.Next()) + { + errors->DirectSetItemAt(n, it.Data()); + n++; + } + + JavascriptError::SetErrorsList(pError, errors, scriptContext); + } + + void JavascriptError::SetErrorsList(JavascriptError* pError, JavascriptArray* errors, ScriptContext* scriptContext) + { + JavascriptOperators::SetProperty(pError, pError, PropertyIds::errors, errors, scriptContext); + pError->SetNotEnumerable(PropertyIds::errors); } -#endif Var JavascriptError::EntryToString(RecyclableObject* function, CallInfo callInfo, ...) { @@ -181,7 +197,7 @@ namespace Js JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedObject, _u("Error.prototype.toString")); } - RecyclableObject * thisError = RecyclableObject::FromVar(args[0]); + RecyclableObject* thisError = VarTo(args[0]); Var value = NULL; JavascriptString *outputStr, *message; @@ -214,8 +230,8 @@ namespace Js if (nameLen > 0 && msgLen > 0) { - outputStr = JavascriptString::Concat(outputStr, scriptContext->GetLibrary()->CreateStringFromCppLiteral(_u(": "))); - outputStr = JavascriptString::Concat(outputStr, message); + outputStr = JavascriptString::Concat(outputStr, scriptContext->GetLibrary()->CreateStringFromCppLiteral(_u(": "))); + outputStr = JavascriptString::Concat(outputStr, message); } else if (msgLen > 0) { @@ -346,28 +362,33 @@ namespace Js JavascriptString * messageString; if (message != nullptr) { - // Save the runtime error message to be reported to IE. + // Save the runtime error message pError->originalRuntimeErrorMessage = message; messageString = Js::JavascriptString::NewWithSz(message, scriptContext); } else { messageString = scriptContext->GetLibrary()->GetEmptyString(); - // Set an empty string so we will return it as a runtime message with the error code to IE + // Set an empty string so we will return it as a runtime message with the error code pError->originalRuntimeErrorMessage = _u(""); } JavascriptOperators::InitProperty(pError, PropertyIds::message, messageString); pError->SetNotEnumerable(PropertyIds::message); - JavascriptOperators::InitProperty(pError, PropertyIds::description, messageString); - pError->SetNotEnumerable(PropertyIds::description); - hr = JavascriptError::GetErrorNumberFromResourceID(hr); JavascriptOperators::InitProperty(pError, PropertyIds::number, JavascriptNumber::ToVar((int32)hr, scriptContext)); pError->SetNotEnumerable(PropertyIds::number); } + void JavascriptError::SetErrorMessage(JavascriptError *pError, HRESULT hr, ScriptContext* scriptContext, ...) + { + va_list argList; + va_start(argList, scriptContext); + JavascriptError::SetErrorMessage(pError, hr, scriptContext, argList); + va_end(argList); + } + void JavascriptError::SetErrorMessage(JavascriptError *pError, HRESULT hr, ScriptContext* scriptContext, va_list argList) { Assert(FAILED(hr)); @@ -543,20 +564,20 @@ namespace Js if (pMessage != NULL) { - *pMessage = _u(""); // default to have IE load the error message, by returning empty-string + *pMessage = _u(""); // default empty-string - // The description property always overrides any error message - Var description = Js::JavascriptOperators::GetProperty(errorObject, Js::PropertyIds::description, scriptContext, NULL); - if (JavascriptString::Is(description)) + // The message property always overrides any error message + Var message = Js::JavascriptOperators::GetProperty(errorObject, Js::PropertyIds::message, scriptContext, NULL); + if (VarIs(message)) { // Always report the description to IE if it is a string, even if the user sets it - JavascriptString * messageString = JavascriptString::FromVar(description); + JavascriptString * messageString = VarTo(message); *pMessage = messageString->GetSz(); } - else if (Js::JavascriptError::Is(errorObject) && Js::JavascriptError::FromVar(errorObject)->originalRuntimeErrorMessage != nullptr) + else if (Js::VarIs(errorObject) && Js::VarTo(errorObject)->originalRuntimeErrorMessage != nullptr) { // use the runtime error message - *pMessage = Js::JavascriptError::FromVar(errorObject)->originalRuntimeErrorMessage; + *pMessage = Js::VarTo(errorObject)->originalRuntimeErrorMessage; } else if (FACILITY_CONTROL == HRESULT_FACILITY(hr)) { @@ -566,8 +587,8 @@ namespace Js } } - // If neither the description or original runtime error message is set, and there are no error message. - // Then just return false and we will report Uncaught exception to IE. + // If neither the message or original runtime error message is set, and there are no error message. + // Then just return false and we will report Uncaught exception return hr; } @@ -600,10 +621,38 @@ namespace Js hrParser = SCRIPT_E_RECORDED; EXCEPINFO ei; - se->GetError(&hrParser, &ei); + bool shouldFree = false; + + if (se->line > 0) + { + ei = se->ei; + } + else + { + se->GetError(&hrParser, &ei); + shouldFree = true; + } JavascriptError* pError = MapParseError(scriptContext, ei.scode); - JavascriptError::SetMessageAndThrowError(scriptContext, pError, ei.scode, &ei); + + if (ei.bstrDescription != nullptr) + { + uint32 len = SysStringLen(ei.bstrDescription) + 1; + char16 *allocatedString = RecyclerNewArrayLeaf(scriptContext->GetRecycler(), char16, len); + wcscpy_s(allocatedString, len, ei.bstrDescription); + JavascriptError::SetErrorMessageProperties(pError, ei.scode, allocatedString, scriptContext); + } + else + { + JavascriptError::SetErrorMessage(pError, ei.scode, nullptr, scriptContext); + } + + if (shouldFree) + { + FreeExcepInfo(&ei); + } + + JavascriptExceptionOperators::Throw(pError, scriptContext); } ErrorTypeEnum JavascriptError::MapParseError(int32 hCode) @@ -709,6 +758,34 @@ namespace Js return false; } + bool JavascriptError::ThrowIfUndefinedSetter( + PropertyOperationFlags flags, Var setterValue, ScriptContext* scriptContext, PropertyId propertyId) + { + if (!JavascriptOperators::IsUndefinedAccessor(setterValue, scriptContext)) + return false; + + bool shouldThrow = scriptContext->GetThreadContext()->RecordImplicitException(); + if (flags & PropertyOperation_StrictMode) + { + if (shouldThrow) + JavascriptError::ThrowTypeError(scriptContext, JSERR_CantAssignToReadOnly); + return true; + } + else if (flags & PropertyOperation_ThrowIfNotExtensible) + { + if (shouldThrow) + JavascriptError::ThrowTypeError(scriptContext, JSERR_DefineProperty_NotExtensible); + return true; + } + else if (flags & PropertyOperation_ThrowIfNonWritable) + { + if (shouldThrow) + JavascriptError::ThrowTypeError(scriptContext, JSERR_DefineProperty_NotWritable, scriptContext->GetPropertyName(propertyId)->GetBuffer()); + return true; + } + return false; + } + bool JavascriptError::ThrowIfStrictModeUndefinedSetter( PropertyOperationFlags flags, Var setterValue, ScriptContext* scriptContext) { @@ -740,22 +817,11 @@ namespace Js bool JavascriptError::ShouldTypeofErrorBeReThrown(Var errorObject) { - HRESULT hr = (errorObject != nullptr && Js::JavascriptError::Is(errorObject)) - ? Js::JavascriptError::GetRuntimeError(Js::RecyclableObject::FromVar(errorObject), nullptr) + HRESULT hr = (errorObject != nullptr && Js::VarIs(errorObject)) + ? Js::JavascriptError::GetRuntimeError(Js::VarTo(errorObject), nullptr) : S_OK; - return JavascriptError::GetErrorNumberFromResourceID(JSERR_UndefVariable) != (int32)hr -#ifdef ENABLE_PROJECTION - // WinRT projected objects can return TYPE_E_ELEMENTNOTFOUND for missing properties - // which is not the same code as JSERR_UndefVariable. However, the meaning of the - // two error codes is morally equivalent in typeof scenario. Special case this here - // because we do not want typeof to leak these exceptions. - && !(errorObject != nullptr - && Js::JavascriptError::Is(errorObject) - && Js::JavascriptError::FromVar(errorObject)->GetErrorType() == kjstWinRTError - && hr == TYPE_E_ELEMENTNOTFOUND) -#endif - ; + return JavascriptError::GetErrorNumberFromResourceID(JSERR_UndefVariable) != (int32)hr; } // Gets the error number associated with the resource ID for an error message. @@ -806,6 +872,9 @@ namespace Js case kjstURIError: jsNewError = targetJavascriptLibrary->CreateURIError(); break; + case kjstAggregateError: + jsNewError = targetJavascriptLibrary->CreateAggregateError(); + break; case kjstWebAssemblyCompileError: jsNewError = targetJavascriptLibrary->CreateWebAssemblyCompileError(); case kjstWebAssemblyRuntimeError: @@ -851,7 +920,6 @@ namespace Js if (cse->ei.bstrDescription) { value = JavascriptString::NewCopySz(cse->ei.bstrDescription, scriptContext); - JavascriptOperators::OP_SetProperty(error, PropertyIds::description, value, scriptContext); JavascriptOperators::OP_SetProperty(error, PropertyIds::message, value, scriptContext); } diff --git a/lib/Runtime/Library/JavascriptError.h b/lib/Runtime/Library/JavascriptError.h index 573453bf532..12b69f37018 100644 --- a/lib/Runtime/Library/JavascriptError.h +++ b/lib/Runtime/Library/JavascriptError.h @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #pragma once @@ -33,30 +34,15 @@ namespace Js m_errorType = kjstCustomError; } - static bool Is(Var aValue); static bool IsRemoteError(Var aValue); ErrorTypeEnum GetErrorType() { return m_errorType; } virtual bool HasDebugInfo(); - static JavascriptError* FromVar(Var aValue) - { - AssertOrFailFastMsg(Is(aValue), "Ensure var is actually a 'JavascriptError'"); - - return static_cast(RecyclableObject::FromVar(aValue)); - } - - static JavascriptError* UnsafeFromVar(Var aValue) - { - AssertMsg(Is(aValue), "Ensure var is actually a 'JavascriptError'"); - - return static_cast(RecyclableObject::UnsafeFromVar(aValue)); - } - void SetNotEnumerable(PropertyId propertyId); - static Var NewInstance(RecyclableObject* function, JavascriptError* pError, CallInfo callInfo, Var newTarget, Var message); + static Var NewInstance(RecyclableObject* function, JavascriptError* pError, CallInfo callInfo, Var newTarget, Var message, Var options); class EntryInfo { public: @@ -67,12 +53,10 @@ namespace Js static FunctionInfo NewSyntaxErrorInstance; static FunctionInfo NewTypeErrorInstance; static FunctionInfo NewURIErrorInstance; + static FunctionInfo NewAggregateErrorInstance; static FunctionInfo NewWebAssemblyCompileErrorInstance; static FunctionInfo NewWebAssemblyRuntimeErrorInstance; static FunctionInfo NewWebAssemblyLinkErrorInstance; -#ifdef ENABLE_PROJECTION - static FunctionInfo NewWinRTErrorInstance; -#endif static FunctionInfo ToString; }; @@ -86,9 +70,6 @@ namespace Js static Var NewWebAssemblyCompileErrorInstance(RecyclableObject* function, CallInfo callInfo, ...); static Var NewWebAssemblyRuntimeErrorInstance(RecyclableObject* function, CallInfo callInfo, ...); static Var NewWebAssemblyLinkErrorInstance(RecyclableObject* function, CallInfo callInfo, ...); -#ifdef ENABLE_PROJECTION - static Var NewWinRTErrorInstance(RecyclableObject* function, CallInfo callInfo, ...); -#endif static Var EntryToString(RecyclableObject* function, CallInfo callInfo, ...); @@ -128,6 +109,7 @@ namespace Js static void SetErrorMessageProperties(JavascriptError *pError, HRESULT errCode, PCWSTR message, ScriptContext* scriptContext); static void SetErrorMessage(JavascriptError *pError, HRESULT errCode, PCWSTR varName, ScriptContext* scriptContext); static void SetErrorMessage(JavascriptError *pError, HRESULT hr, ScriptContext* scriptContext, va_list argList); + static void SetErrorMessage(JavascriptError *pError, HRESULT hr, ScriptContext* scriptContext, ...); static void SetErrorType(JavascriptError *pError, ErrorTypeEnum errorType); static bool ThrowCantAssign(PropertyOperationFlags flags, ScriptContext* scriptContext, PropertyId propertyId); @@ -136,6 +118,7 @@ namespace Js static bool ThrowCantExtendIfStrictMode(PropertyOperationFlags flags, ScriptContext* scriptContext); static bool ThrowCantDeleteIfStrictMode(PropertyOperationFlags flags, ScriptContext* scriptContext, PCWSTR varName); static bool ThrowCantDeleteIfStrictModeOrNonconfigurable(PropertyOperationFlags flags, ScriptContext* scriptContext, PCWSTR varName); + static bool ThrowIfUndefinedSetter(PropertyOperationFlags flags, Var setterValue, ScriptContext* scriptContext, PropertyId propertyId); static bool ThrowIfStrictModeUndefinedSetter(PropertyOperationFlags flags, Var setterValue, ScriptContext* scriptContext); static bool ThrowIfNotExtensibleUndefinedSetter(PropertyOperationFlags flags, Var setterValue, ScriptContext* scriptContext); @@ -164,6 +147,11 @@ namespace Js static void TryThrowTypeError(ScriptContext * checkScriptContext, ScriptContext * scriptContext, int32 hCode, PCWSTR varName = nullptr); static JavascriptError* CreateFromCompileScriptException(ScriptContext* scriptContext, CompileScriptException* cse, const WCHAR * sourceUrl = nullptr); + static Var NewAggregateErrorInstance(RecyclableObject* function, CallInfo callinfo, ...); + + static void SetErrorsList(JavascriptError* pError, SList* errorsList, ScriptContext* scriptContext); + static void SetErrorsList(JavascriptError* pError, JavascriptArray* errors, ScriptContext* scriptContext); + private: Field(BOOL) isExternalError; @@ -192,4 +180,9 @@ namespace Js virtual void ExtractSnapObjectDataInto(TTD::NSSnapObjects::SnapObject* objData, TTD::SlabAllocator& alloc) override; #endif }; + + template <> inline bool VarIsImpl(RecyclableObject* obj) + { + return JavascriptOperators::GetTypeId(obj) == TypeIds_Error; + } } diff --git a/lib/Runtime/Library/JavascriptExceptionMetadata.cpp b/lib/Runtime/Library/JavascriptExceptionMetadata.cpp index 6e74d0d81c7..6e468b52ab1 100644 --- a/lib/Runtime/Library/JavascriptExceptionMetadata.cpp +++ b/lib/Runtime/Library/JavascriptExceptionMetadata.cpp @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #include "RuntimeLibraryPch.h" @@ -105,8 +106,8 @@ namespace Js { if (nextLine >= cache->GetLineCount()) { - endByteOffset = functionBody->LengthInBytes(); - endCharOffset = functionBody->LengthInChars(); + endByteOffset = functionBody->LengthInBytes() + functionBody->StartInDocument(); + endCharOffset = functionBody->LengthInChars() + functionBody->StartOffset(); } else { @@ -160,4 +161,4 @@ namespace Js { return true; } -} \ No newline at end of file +} diff --git a/lib/Runtime/Library/JavascriptExceptionMetadata.h b/lib/Runtime/Library/JavascriptExceptionMetadata.h index 6eadc528415..8915cc0ed8c 100644 --- a/lib/Runtime/Library/JavascriptExceptionMetadata.h +++ b/lib/Runtime/Library/JavascriptExceptionMetadata.h @@ -16,4 +16,4 @@ namespace Js{ private: static SimpleTypeHandler<6> ExceptionMetadataTypeHandler; }; -}; \ No newline at end of file +}; diff --git a/lib/Runtime/Library/JavascriptExternalFunction.cpp b/lib/Runtime/Library/JavascriptExternalFunction.cpp index 93b9dd54135..8672559b969 100644 --- a/lib/Runtime/Library/JavascriptExternalFunction.cpp +++ b/lib/Runtime/Library/JavascriptExternalFunction.cpp @@ -58,7 +58,7 @@ namespace Js bool __cdecl JavascriptExternalFunction::DeferredLengthInitializer(DynamicObject * instance, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode) { - Js::JavascriptLibrary::InitializeFunction(instance, typeHandler, mode); + Js::JavascriptLibrary::InitializeFunction(instance, typeHandler, mode); JavascriptExternalFunction* object = static_cast(instance); @@ -138,13 +138,13 @@ namespace Js #if FLOATVAR case TypeIds_Number: #endif // FLOATVAR - Assert(!Js::RecyclableObject::Is(thisVar)); + Assert(!Js::VarIs(thisVar)); break; default: { - Assert(Js::RecyclableObject::Is(thisVar)); + Assert(Js::VarIs(thisVar)); - ScriptContext* scriptContextThisVar = Js::RecyclableObject::FromVar(thisVar)->GetScriptContext(); + ScriptContext* scriptContextThisVar = Js::VarTo(thisVar)->GetScriptContext(); // We need to verify "this" pointer is active as well. The problem is that DOM prototype functions are // the same across multiple frames, and caller can do function.call(closedthis) Assert(!scriptContext->GetThreadContext()->IsDisableImplicitException()); @@ -314,24 +314,6 @@ namespace Js END_LEAVE_SCRIPT(scriptContext); #endif - bool marshallingMayBeNeeded = false; - if (result != nullptr) - { - marshallingMayBeNeeded = Js::RecyclableObject::Is(result); - if (marshallingMayBeNeeded) - { - Js::RecyclableObject * obj = Js::RecyclableObject::FromVar(result); - - // For JSRT, we could get result marshalled in different context. - bool isJSRT = scriptContext->GetThreadContext()->IsJSRT(); - marshallingMayBeNeeded = obj->GetScriptContext() != scriptContext; - if (!isJSRT && marshallingMayBeNeeded) - { - Js::Throw::InternalError(); - } - } - } - if (scriptContext->HasRecordedException()) { bool considerPassingToDebugger = false; @@ -354,7 +336,7 @@ namespace Js { result = scriptContext->GetLibrary()->GetUndefined(); } - else if (marshallingMayBeNeeded) + else { result = CrossSite::MarshalVar(scriptContext, result); } diff --git a/lib/Runtime/Library/JavascriptFunction.cpp b/lib/Runtime/Library/JavascriptFunction.cpp index 2b4571a6886..f92a56be862 100644 --- a/lib/Runtime/Library/JavascriptFunction.cpp +++ b/lib/Runtime/Library/JavascriptFunction.cpp @@ -96,27 +96,9 @@ using namespace Js; return functionInfo->HasBody(); } - bool JavascriptFunction::Is(Var aValue) + template <> bool Js::VarIsImpl(RecyclableObject* obj) { - if (JavascriptOperators::GetTypeId(aValue) == TypeIds_Function) - { - return true; - } - return false; - } - - JavascriptFunction* JavascriptFunction::FromVar(Var aValue) - { - AssertOrFailFastMsg(Is(aValue), "Ensure var is actually a 'JavascriptFunction'"); - - return static_cast(aValue); - } - - JavascriptFunction* JavascriptFunction::UnsafeFromVar(Var aValue) - { - AssertMsg(Is(aValue), "Ensure var is actually a 'JavascriptFunction'"); - - return static_cast(aValue); + return JavascriptOperators::GetTypeId(obj) == TypeIds_Function; } BOOL JavascriptFunction::IsStrictMode() const @@ -139,25 +121,20 @@ using namespace Js; /* static */ bool JavascriptFunction::IsBuiltinProperty(Var objectWithProperty, PropertyIds propertyId) { - return ScriptFunctionBase::Is(objectWithProperty) - && (propertyId == PropertyIds::length || (JavascriptFunction::FromVar(objectWithProperty)->HasRestrictedProperties() && (propertyId == PropertyIds::arguments || propertyId == PropertyIds::caller))); + return VarIs(objectWithProperty) + && (propertyId == PropertyIds::length || (VarTo(objectWithProperty)->HasRestrictedProperties() && (propertyId == PropertyIds::arguments || propertyId == PropertyIds::caller))); } #endif - static char16 const funcName[] = _u("function anonymous"); - static char16 const genFuncName[] = _u("function* anonymous"); - static char16 const asyncFuncName[] = _u("async function anonymous"); - static char16 const openFormals[] = _u("("); - static char16 const closeFormals[] = _u("\n)"); - static char16 const openFuncBody[] = _u(" {"); - static char16 const closeFuncBody[] = _u("\n}"); - Var JavascriptFunction::NewInstanceHelper(ScriptContext *scriptContext, RecyclableObject* function, CallInfo callInfo, Js::ArgumentReader& args, FunctionKind functionKind /* = FunctionKind::Normal */) { JavascriptLibrary* library = function->GetLibrary(); AssertMsg(args.Info.Count > 0, "Should always have implicit 'this'"); + bool isAsync = functionKind == FunctionKind::Async || functionKind == FunctionKind::AsyncGenerator; + bool isGenerator = functionKind == FunctionKind::Generator || functionKind == FunctionKind::AsyncGenerator; + // SkipDefaultNewObject function flag should have prevented the default object from // being created, except when call true a host dispatch. Var newTarget = args.GetNewTarget(); @@ -193,9 +170,11 @@ using namespace Js; == numberLinesPrependedToAnonymousFunction); // Be sure to add exactly one line to anonymous function JavascriptString *bs = functionKind == FunctionKind::Async ? - library->GetAsyncFunctionAnonymouseString() : + library->GetAsyncFunctionAnonymousString() : functionKind == FunctionKind::Generator ? library->GetFunctionPTRAnonymousString() : + functionKind == FunctionKind::AsyncGenerator ? + library->GetAsyncGeneratorAnonymousString() : library->GetFunctionAnonymousString(); bs = JavascriptString::Concat(bs, formals); @@ -221,14 +200,14 @@ using namespace Js; // Validate formals here scriptContext->GetGlobalObject()->ValidateSyntax( scriptContext, formals->GetSz(), formals->GetLength(), - functionKind == FunctionKind::Generator, functionKind == FunctionKind::Async, + isGenerator, isAsync, &Parser::ValidateFormals); if (fnBody != NULL) { // Validate function body scriptContext->GetGlobalObject()->ValidateSyntax( scriptContext, fnBody->GetSz(), fnBody->GetLength(), - functionKind == FunctionKind::Generator, functionKind == FunctionKind::Async, + isGenerator, isAsync, &Parser::ValidateSourceElementList); } @@ -308,19 +287,21 @@ using namespace Js; JS_ETW(EventWriteJSCRIPT_RECYCLER_ALLOCATE_FUNCTION(pfuncScript, EtwTrace::GetFunctionId(pfuncScript->GetFunctionProxy()))); - if (functionKind == FunctionKind::Generator || functionKind == FunctionKind::Async) + if (isGenerator || isAsync) { Assert(pfuncScript->GetFunctionInfo()->IsCoroutine()); auto pfuncVirt = static_cast(pfuncScript); auto pfuncGen = functionKind == FunctionKind::Async ? scriptContext->GetLibrary()->CreateAsyncFunction(JavascriptAsyncFunction::EntryAsyncFunctionImplementation, pfuncVirt) : + functionKind == FunctionKind::AsyncGenerator ? + scriptContext->GetLibrary()->CreateAsyncGeneratorFunction(JavascriptAsyncGeneratorFunction::EntryAsyncGeneratorFunctionImplementation, pfuncVirt) : scriptContext->GetLibrary()->CreateGeneratorFunction(JavascriptGeneratorFunction::EntryGeneratorFunctionImplementation, pfuncVirt); pfuncVirt->SetRealGeneratorFunction(pfuncGen); pfuncScript = pfuncGen; } return isCtorSuperCall ? - JavascriptOperators::OrdinaryCreateFromConstructor(RecyclableObject::FromVar(newTarget), pfuncScript, nullptr, scriptContext) : + JavascriptOperators::OrdinaryCreateFromConstructor(VarTo(newTarget), pfuncScript, nullptr, scriptContext) : pfuncScript; } @@ -347,6 +328,29 @@ using namespace Js; return NewInstanceHelper(scriptContext, function, callInfo, args); } + Var JavascriptFunction::NewAsyncGeneratorFunctionInstance(RecyclableObject* function, CallInfo callInfo, ...) + { + // Get called when creating a new async generator function through the constructor (e.g. agf.__proto__.constructor) + PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); + + ARGUMENTS(args, callInfo); + + return JavascriptFunction::NewInstanceHelper(function->GetScriptContext(), function, callInfo, args, JavascriptFunction::FunctionKind::AsyncGenerator); + } + + Var JavascriptFunction::NewAsyncGeneratorFunctionInstanceRestrictedMode(RecyclableObject* function, CallInfo callInfo, ...) + { + ScriptContext* scriptContext = function->GetScriptContext(); + + scriptContext->CheckEvalRestriction(); + + PROBE_STACK(scriptContext, Js::Constants::MinStackDefault); + + ARGUMENTS(args, callInfo); + + return JavascriptFunction::NewInstanceHelper(scriptContext, function, callInfo, args, JavascriptFunction::FunctionKind::AsyncGenerator); + } + Var JavascriptFunction::NewAsyncFunctionInstance(RecyclableObject* function, CallInfo callInfo, ...) { // Get called when creating a new async function through the constructor (e.g. af.__proto__.constructor) @@ -437,7 +441,7 @@ using namespace Js; Var thisVar = NULL; Var argArray = NULL; - RecyclableObject* pFunc = RecyclableObject::FromVar(args[0]); + RecyclableObject* pFunc = VarTo(args[0]); if (args.Info.Count == 1) { @@ -483,7 +487,7 @@ using namespace Js; } else { - bool isArray = JavascriptArray::Is(argArray); + bool isArray = JavascriptArray::IsNonES5Array(argArray); TypeId typeId = JavascriptOperators::GetTypeId(argArray); bool isNullOrUndefined = typeId <= TypeIds_UndefinedOrNull; @@ -494,7 +498,7 @@ using namespace Js; int64 len; JavascriptArray* arr = NULL; - RecyclableObject* dynamicObject = RecyclableObject::FromVar(argArray); + RecyclableObject* dynamicObject = VarTo(argArray); if (isNullOrUndefined) { @@ -505,7 +509,7 @@ using namespace Js; #if ENABLE_COPYONACCESS_ARRAY JavascriptLibrary::CheckAndConvertCopyOnAccessNativeIntArray(argArray); #endif - arr = JavascriptArray::FromVar(argArray); + arr = VarTo(argArray); len = arr->GetLength(); } else @@ -644,7 +648,7 @@ using namespace Js; JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedFunction, _u("Function.prototype.call")); } - RecyclableObject *pFunc = RecyclableObject::FromVar(args[0]); + RecyclableObject *pFunc = VarTo(args[0]); if (argCount == 1) { args.Values[0] = scriptContext->GetLibrary()->GetUndefined(); @@ -678,7 +682,7 @@ using namespace Js; { ScriptContext* requestContext = scriptContext->GetThreadContext()-> GetPreviousHostScriptContext()->GetScriptContext(); - func = JavascriptFunction::FromVar(CrossSite::MarshalVar(requestContext, + func = VarTo(CrossSite::MarshalVar(requestContext, func, scriptContext)); } return func->CallRootFunction(args, scriptContext, true); @@ -839,10 +843,10 @@ using namespace Js; && !scriptContext->IsInterpreted() && !CONFIG_FLAG(ForceDiagnosticsMode) // Does not work nicely if we change the default settings. && function->GetEntryPoint() != scriptContext->CurrentThunk && !CrossSite::IsThunk(function->GetEntryPoint()) - && JavascriptFunction::Is(function)) + && VarIs(function)) { - JavascriptFunction *jsFunction = JavascriptFunction::FromVar(function); + JavascriptFunction *jsFunction = VarTo(function); if (!jsFunction->IsBoundFunction() && !jsFunction->GetFunctionInfo()->IsDeferred() && (jsFunction->GetFunctionInfo()->GetAttributes() & FunctionInfo::DoNotProfile) != FunctionInfo::DoNotProfile @@ -884,11 +888,15 @@ using namespace Js; } else { - resultObject = JavascriptOperators::NewScObjectNoCtor(v, scriptContext); + BEGIN_SAFE_REENTRANT_CALL(scriptContext->GetThreadContext()) + { + resultObject = JavascriptOperators::NewScObjectNoCtor(v, scriptContext); + } + END_SAFE_REENTRANT_CALL } // JavascriptOperators::NewScObjectNoCtor should have thrown if 'v' is not a constructor - RecyclableObject* functionObj = RecyclableObject::UnsafeFromVar(v); + RecyclableObject* functionObj = UnsafeVarTo(v); const unsigned STACK_ARGS_ALLOCA_THRESHOLD = 8; // Number of stack args we allow before using _alloca Var stackArgs[STACK_ARGS_ALLOCA_THRESHOLD]; @@ -941,9 +949,9 @@ using namespace Js; CallInfo newCallInfo(newFlags, args.Info.Count); Arguments newArgs(newCallInfo, newValues); - if (JavascriptProxy::Is(v)) + if (VarIs(v)) { - JavascriptProxy* proxy = JavascriptProxy::FromVar(v); + JavascriptProxy* proxy = VarTo(v); return proxy->ConstructorTrap(newArgs, scriptContext, spreadIndices); } @@ -968,8 +976,8 @@ using namespace Js; FinishConstructor( functionResult, resultObject, - JavascriptFunction::Is(functionObj) && functionObj->GetScriptContext() == scriptContext ? - JavascriptFunction::FromVar(functionObj) : + VarIs(functionObj) && functionObj->GetScriptContext() == scriptContext ? + VarTo(functionObj) : nullptr, overridingNewTarget != nullptr); } @@ -1080,9 +1088,9 @@ using namespace Js; // Expand the spread element. Var instance = args[spreadIndex]; - if (SpreadArgument::Is(instance)) + if (VarIs(instance)) { - SpreadArgument* spreadedArgs = SpreadArgument::FromVar(instance); + SpreadArgument* spreadedArgs = VarTo(instance); uint size = spreadedArgs->GetArgumentSpreadCount(); if (size > 0) { @@ -1566,12 +1574,22 @@ void __cdecl _alloca_probe_16() Assert(!(callInfo.Flags & CallFlags_New)); + Var arg0 = args[0]; + + // callable proxy is considered as having [[Call]] internal method + // and should behave here like a function. + // we will defer to the underlying target. + while (VarIs(arg0) && JavascriptConversion::IsCallable(arg0)) + { + arg0 = VarTo(arg0)->GetTarget(); + } + AssertMsg(args.Info.Count > 0, "Should always have implicit 'this'"); - if (args.Info.Count == 0 || !JavascriptFunction::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(arg0)) { JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedFunction, _u("Function.prototype.toString")); } - JavascriptFunction *pFunc = JavascriptFunction::FromVar(args[0]); + JavascriptFunction *pFunc = VarTo(arg0); // pFunc can be from a different script context if Function.prototype.toString is invoked via .call/.apply. // Marshal the resulting string to the current script context (that of the toString) @@ -1910,7 +1928,7 @@ void __cdecl _alloca_probe_16() } Var* addressOfFuncObj = GetAddressOfFuncObj(); - if (!addressOfFuncObj || *addressOfFuncObj == nullptr || !ScriptFunction::Is(*addressOfFuncObj)) + if (!addressOfFuncObj || *addressOfFuncObj == nullptr || !VarIs(*addressOfFuncObj)) { return nullptr; } @@ -2297,12 +2315,12 @@ void __cdecl _alloca_probe_16() return false; } - bool isAsmJs = AsmJsScriptFunction::Is(func); - bool isWasmOnly = WasmScriptFunction::Is(func); + bool isAsmJs = VarIs(func); + bool isWasmOnly = VarIs(func); uintptr_t faultingAddr = helper.GetFaultingAddress(); if (isAsmJs) { - AsmJsScriptFunction* asmFunc = AsmJsScriptFunction::FromVar(func); + AsmJsScriptFunction* asmFunc = VarTo(func); // some extra checks for asm.js because we have slightly more information that we can validate if (!asmFunc->GetModuleEnvironment()) { @@ -2314,7 +2332,7 @@ void __cdecl _alloca_probe_16() #ifdef ENABLE_WASM if (isWasmOnly) { - WebAssemblyMemory* mem = WasmScriptFunction::FromVar(func)->GetWebAssemblyMemory(); + WebAssemblyMemory* mem = VarTo(func)->GetWebAssemblyMemory(); arrayBuffer = mem->GetBuffer(); reservationSize = MAX_WASM__ARRAYBUFFER_LENGTH; } @@ -2463,7 +2481,7 @@ void __cdecl _alloca_probe_16() { Assert(CrossSite::IsThunk(callEntryPoint)); } - else if (ScriptFunction::Is(this)) + else if (VarIs(this)) { } else @@ -2511,12 +2529,6 @@ void __cdecl _alloca_probe_16() return PropertyQueryFlags::Property_Found; } break; - case PropertyIds::length: - if (this->IsScriptFunction()) - { - return PropertyQueryFlags::Property_Found; - } - break; } return DynamicObject::HasPropertyQuery(propertyId, info); } @@ -2614,12 +2626,6 @@ void __cdecl _alloca_probe_16() return false; } break; - case PropertyIds::length: - if (this->IsScriptFunction() || this->IsBoundFunction()) - { - return true; - } - break; } } return DynamicObject::IsConfigurable(propertyId); @@ -2638,12 +2644,6 @@ void __cdecl _alloca_probe_16() return false; } break; - case PropertyIds::length: - if (this->IsScriptFunction()) - { - return false; - } - break; } } return DynamicObject::IsEnumerable(propertyId); @@ -2662,12 +2662,6 @@ void __cdecl _alloca_probe_16() return false; } break; - case PropertyIds::length: - if (this->IsScriptFunction()) - { - return false; - } - break; } } return DynamicObject::IsWritable(propertyId); @@ -2683,18 +2677,6 @@ void __cdecl _alloca_probe_16() return true; } - if (index == length) - { - if (this->IsScriptFunction() || this->IsBoundFunction()) - { - if (DynamicObject::GetPropertyIndex(PropertyIds::length) == Constants::NoSlot) - { - //Only for user defined functions length is a special property. - *propertyName = requestContext->GetPropertyString(PropertyIds::length); - return true; - } - } - } return false; } @@ -2748,22 +2730,22 @@ void __cdecl _alloca_probe_16() funcCaller = nullValue; } - if (ScriptFunction::Is(funcCaller)) + if (VarIs(funcCaller)) { // If this is the internal function of a generator function then return the original generator function - funcCaller = ScriptFunction::FromVar(funcCaller)->GetRealFunctionObject(); + funcCaller = VarTo(funcCaller)->GetRealFunctionObject(); // This function is escaping, so make sure there isn't some nested parent that has a cached scope. - if (ScriptFunction::Is(funcCaller)) + if (VarIs(funcCaller)) { - FrameDisplay * pFrameDisplay = Js::ScriptFunction::FromVar(funcCaller)->GetEnvironment(); + FrameDisplay * pFrameDisplay = Js::VarTo(funcCaller)->GetEnvironment(); uint length = (uint)pFrameDisplay->GetLength(); for (uint i = 0; i < length; i++) { Var scope = pFrameDisplay->GetItem(i); - if (scope && !Js::ScopeSlots::Is(scope) && Js::ActivationObjectEx::Is(scope)) + if (scope && !Js::ScopeSlots::Is(scope) && Js::VarIs(scope)) { - Js::ActivationObjectEx::FromVar(scope)->InvalidateCachedScope(); + Js::VarTo(scope)->InvalidateCachedScope(); } } } @@ -2845,7 +2827,7 @@ void __cdecl _alloca_probe_16() } } - if (Js::JavascriptFunction::Is(*value) && Js::JavascriptFunction::FromVar(*value)->IsStrictMode()) + if (Js::VarIs(*value) && Js::VarTo(*value)->IsStrictMode()) { if (scriptContext->GetThreadContext()->RecordImplicitException()) { @@ -2985,17 +2967,6 @@ void __cdecl _alloca_probe_16() return true; } - if (propertyId == PropertyIds::length) - { - FunctionProxy *proxy = this->GetFunctionProxy(); - if (proxy) - { - *value = TaggedInt::ToVarUnchecked(proxy->EnsureDeserialized()->GetReportedInParamsCount() - 1); - *result = true; - return true; - } - } - *result = false; return false; } @@ -3018,14 +2989,6 @@ void __cdecl _alloca_probe_16() isReadOnly = true; } break; - - case PropertyIds::length: - if (this->IsScriptFunction()) - { - isReadOnly = true; - } - break; - } if (isReadOnly) @@ -3087,13 +3050,6 @@ void __cdecl _alloca_probe_16() return false; } break; - case PropertyIds::length: - if (this->IsScriptFunction()) - { - JavascriptError::ThrowCantDeleteIfStrictMode(flags, this->GetScriptContext(), this->GetScriptContext()->GetPropertyName(propertyId)->GetBuffer()); - return false; - } - break; } BOOL result = DynamicObject::DeleteProperty(propertyId, flags); @@ -3121,14 +3077,6 @@ void __cdecl _alloca_probe_16() return false; } } - else if (BuiltInPropertyRecords::length.Equals(propertyNameString)) - { - if (this->IsScriptFunction()) - { - JavascriptError::ThrowCantDeleteIfStrictMode(flags, this->GetScriptContext(), propertyNameString->GetString()); - return false; - } - } BOOL result = DynamicObject::DeleteProperty(propertyNameString, flags); @@ -3206,13 +3154,20 @@ void __cdecl _alloca_probe_16() } else { - charcount_t count = min(DIAG_MAX_FUNCTION_STRING, func->LengthInChars()); utf8::DecodeOptions options = sourceInfo->IsCesu8() ? utf8::doAllowThreeByteSurrogates : utf8::doDefault; - LPCUTF8 source = func->GetSource(_u("JavascriptFunction::GetDiagValueString")); - size_t cbLength = sourceInfo->GetCbLength(_u("JavascriptFunction::GetDiagValueString")); - size_t cbIndex = utf8::CharacterIndexToByteIndex(source, cbLength, count, options); - utf8::DecodeUnitsInto(stringBuilder->AllocBufferSpace(count), source, source + cbIndex, options); - stringBuilder->IncreaseCount(count); + charcount_t count = func->LengthInChars(); + LPCUTF8 pbStart = func->GetToStringSource(_u("JavascriptFunction::GetDiagValueString")); + size_t cbLength = func->LengthInBytes(); + PrintOffsets* printOffsets = func->GetPrintOffsets(); + if (printOffsets != nullptr) + { + count += 3*(charcount_t)((printOffsets->cbEndPrintOffset - printOffsets->cbStartPrintOffset) - cbLength); + cbLength = printOffsets->cbEndPrintOffset - printOffsets->cbStartPrintOffset; + } + + size_t decodedCount = utf8::DecodeUnitsInto(stringBuilder->AllocBufferSpace(count), pbStart, pbStart + cbLength, options); + Assert(decodedCount < MaxCharCount); + stringBuilder->IncreaseCount(min(DIAG_MAX_FUNCTION_STRING, (charcount_t)decodedCount)); return TRUE; } } @@ -3229,8 +3184,8 @@ void __cdecl _alloca_probe_16() } else { - Assert(JavascriptString::Is(sourceString)); - pString = JavascriptString::FromVar(sourceString); + Assert(VarIs(sourceString)); + pString = VarTo(sourceString); } } @@ -3263,19 +3218,20 @@ void __cdecl _alloca_probe_16() ParseableFunctionInfo * func = this->GetFunctionProxy()->EnsureDeserialized(); if (func->GetDisplayName() == Js::Constants::FunctionCode) { - return LiteralString::NewCopyBuffer(Js::Constants::Anonymous, Js::Constants::AnonymousLength, scriptContext); + // TODO(jahorto): multiple places use pointer equality on the Constants:: string buffers. Consider moving these to StringCacheList.h and use backing buffer pointer equality if need be. + return JavascriptString::NewWithBuffer(Constants::Anonymous, Constants::AnonymousLength, scriptContext); } else if (func->GetIsAccessor()) { const char16* accessorName = func->GetDisplayName(); if (accessorName[0] == _u('g')) { - return LiteralString::Concat(LiteralString::NewCopySz(_u("get "), scriptContext), LiteralString::NewCopyBuffer(name, length, scriptContext)); + return JavascriptString::Concat(scriptContext->GetLibrary()->GetGetterFunctionPrefixString(), JavascriptString::NewCopyBuffer(name, length, scriptContext)); } AssertMsg(accessorName[0] == _u('s'), "should be a set"); - return LiteralString::Concat(LiteralString::NewCopySz(_u("set "), scriptContext), LiteralString::NewCopyBuffer(name, length, scriptContext)); + return JavascriptString::Concat(scriptContext->GetLibrary()->GetSetterFunctionPrefixString(), JavascriptString::NewCopyBuffer(name, length, scriptContext)); } - return LiteralString::NewCopyBuffer(name, length, scriptContext); + return JavascriptString::NewCopyBuffer(name, length, scriptContext); } bool JavascriptFunction::GetFunctionName(JavascriptString** name) const @@ -3290,7 +3246,7 @@ void __cdecl _alloca_probe_16() return true; } - Assert(!ScriptFunction::Is(thisFunction)); + Assert(!VarIs(thisFunction)); return GetSourceStringName(name); } @@ -3308,8 +3264,8 @@ void __cdecl _alloca_probe_16() *name = scriptContext->GetPropertyString(propertyIdOfSourceString); return true; } - Assert(JavascriptString::Is(sourceString)); - *name = JavascriptString::FromVar(sourceString); + Assert(VarIs(sourceString)); + *name = VarTo(sourceString); return true; } return false; @@ -3324,7 +3280,14 @@ void __cdecl _alloca_probe_16() if (proxy) { ParseableFunctionInfo * func = proxy->EnsureDeserialized(); - return LiteralString::NewCopySz(func->GetDisplayName(), scriptContext); + if (func->GetDisplayNameIsRecyclerAllocated()) + { + return JavascriptString::NewWithSz(func->GetDisplayName(), scriptContext); + } + else + { + return JavascriptString::NewCopySz(func->GetDisplayName(), scriptContext); + } } JavascriptString* sourceStringName = nullptr; if (GetSourceStringName(&sourceStringName)) @@ -3361,10 +3324,10 @@ void __cdecl _alloca_probe_16() return JavascriptBoolean::ToVar(FALSE, scriptContext); } - RecyclableObject * constructor = RecyclableObject::FromVar(args[0]); + RecyclableObject * constructor = VarTo(args[0]); Var instance = args[1]; - Assert(JavascriptProxy::Is(constructor) || JavascriptFunction::Is(constructor)); + Assert(VarIs(constructor) || VarIs(constructor)); return JavascriptBoolean::ToVar(constructor->HasInstance(instance, scriptContext, NULL), scriptContext); } @@ -3399,8 +3362,8 @@ void __cdecl _alloca_probe_16() if (inlineCache && inlineCache->function == nullptr && scriptContext == function->GetScriptContext())// only register when function has same scriptContext { - inlineCache->Cache(RecyclableObject::Is(instance) ? - RecyclableObject::UnsafeFromVar(instance)->GetType() : nullptr, + inlineCache->Cache(VarIs(instance) ? + UnsafeVarTo(instance)->GetType() : nullptr, function, scriptContext->GetLibrary()->GetFalse(), scriptContext); } return result; @@ -3447,7 +3410,7 @@ void __cdecl _alloca_probe_16() // However, object o's type (even if it is of the same "shape" as before, and even if o is the very same object) will be different, // because the object types are permanently bound and unique to the script context from which they were created. - RecyclableObject* instanceObject = RecyclableObject::FromVar(instance); + RecyclableObject* instanceObject = VarTo(instance); Var prototype = JavascriptOperators::GetPrototype(instanceObject); if (!JavascriptOperators::IsObject(funcPrototype)) @@ -3465,7 +3428,7 @@ void __cdecl _alloca_probe_16() break; } - prototype = JavascriptOperators::GetPrototype(RecyclableObject::FromVar(prototype)); + prototype = JavascriptOperators::GetPrototype(VarTo(prototype)); } // Now that we know the answer, let's cache it for next time if we have a cache. @@ -3474,7 +3437,7 @@ void __cdecl _alloca_probe_16() Assert(function != NULL); JavascriptBoolean * boolResult = result ? scriptContext->GetLibrary()->GetTrue() : scriptContext->GetLibrary()->GetFalse(); - Type * instanceType = RecyclableObject::FromVar(instance)->GetType(); + Type * instanceType = VarTo(instance)->GetType(); if (!instanceType->HasSpecialPrototype() && scriptContext == function->GetScriptContext()) // only register when function has same scriptContext, otherwise when scriptContext close @@ -3504,12 +3467,12 @@ void __cdecl _alloca_probe_16() Js::Throw::FatalInternalError(); } - if (args.Info.Count < 2 || !ArrayBufferBase::Is(args[1])) + if (args.Info.Count < 2 || !VarIs(args[1])) { JavascriptError::ThrowTypeError(scriptContext, JSERR_NeedArrayBufferObject); } - ArrayBufferBase* arrayBuffer = ArrayBufferBase::FromVar(args[1]); + ArrayBufferBase* arrayBuffer = VarTo(args[1]); const byte* buffer = arrayBuffer->GetBuffer(); uint32 size = arrayBuffer->GetByteLength(); HRESULT hr = JitFromEncodedWorkItem(scriptContext->GetNativeCodeGenerator(), buffer, size); diff --git a/lib/Runtime/Library/JavascriptFunction.h b/lib/Runtime/Library/JavascriptFunction.h index 44e23b89f37..0c0a8dd5d34 100644 --- a/lib/Runtime/Library/JavascriptFunction.h +++ b/lib/Runtime/Library/JavascriptFunction.h @@ -65,7 +65,7 @@ namespace Js static const charcount_t DIAG_MAX_FUNCTION_STRING = 256; protected: - enum class FunctionKind { Normal, Generator, Async }; + enum class FunctionKind { Normal, Generator, Async, AsyncGenerator }; static Var NewInstanceHelper(ScriptContext *scriptContext, RecyclableObject* function, CallInfo callInfo, Js::ArgumentReader& args, FunctionKind functionKind = FunctionKind::Normal); JavascriptFunction(DynamicType * type); @@ -86,6 +86,7 @@ namespace Js static FunctionInfo SymbolHasInstance; static FunctionInfo NewAsyncFunctionInstance; + static FunctionInfo NewAsyncGeneratorFunctionInstance; #ifdef ALLOW_JIT_REPRO static FunctionInfo InvokeJit; #endif @@ -104,15 +105,14 @@ namespace Js static Var EntryToString(RecyclableObject* function, CallInfo callInfo, ...); static Var EntrySymbolHasInstance(RecyclableObject* function, CallInfo callInfo, ...); + static Var NewAsyncGeneratorFunctionInstance(RecyclableObject* function, CallInfo callInfo, ...); + static Var NewAsyncGeneratorFunctionInstanceRestrictedMode(RecyclableObject* function, CallInfo callInfo, ...); static Var NewAsyncFunctionInstance(RecyclableObject* function, CallInfo callInfo, ...); static Var NewAsyncFunctionInstanceRestrictedMode(RecyclableObject* function, CallInfo callInfo, ...); #ifdef ALLOW_JIT_REPRO static Var EntryInvokeJit(RecyclableObject* function, CallInfo callInfo, ...); #endif - static bool Is(Var aValue); - static JavascriptFunction* FromVar(Var aValue); - static JavascriptFunction* UnsafeFromVar(Var aValue); Var CallFunction(Arguments args); Var CallRootFunction(Arguments args, ScriptContext * scriptContext, bool inScript); #ifdef ASMJS_PLAT @@ -232,6 +232,9 @@ namespace Js private: static int CallRootEventFilter(int exceptionCode, PEXCEPTION_POINTERS exceptionInfo); }; + + template <> bool VarIsImpl(RecyclableObject* obj); + #if ENABLE_NATIVE_CODEGEN && defined(_M_X64) class ArrayAccessDecoder { diff --git a/lib/Runtime/Library/JavascriptGenerator.cpp b/lib/Runtime/Library/JavascriptGenerator.cpp index eea093ab1a9..e0321b806e6 100644 --- a/lib/Runtime/Library/JavascriptGenerator.cpp +++ b/lib/Runtime/Library/JavascriptGenerator.cpp @@ -1,416 +1,532 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #include "RuntimeLibraryPch.h" #include "Language/InterpreterStackFrame.h" -namespace Js +using namespace Js; + +namespace { - JavascriptGenerator::JavascriptGenerator(DynamicType* type, Arguments &args, ScriptFunction* scriptFunction) - : DynamicObject(type), frame(nullptr), state(GeneratorState::Suspended), args(args), scriptFunction(scriptFunction) + // RAII helper to set the state of the generator to completed if an exception is + // thrown or if the save state InterpreterStackFrame is never created implying + // the generator is JITed and returned without ever yielding + struct GeneratorStateHelper { - } + using GeneratorState = JavascriptGenerator::GeneratorState; - JavascriptGenerator* JavascriptGenerator::New(Recycler* recycler, DynamicType* generatorType, Arguments& args, ScriptFunction* scriptFunction) - { -#if GLOBAL_ENABLE_WRITE_BARRIER - if (CONFIG_FLAG(ForceSoftwareWriteBarrier)) + JavascriptGenerator* generator; + bool didThrow; + + GeneratorStateHelper(JavascriptGenerator* generator) : + generator(generator), + didThrow(true) { - JavascriptGenerator* obj = RecyclerNewFinalized( - recycler, JavascriptGenerator, generatorType, args, scriptFunction); - if (obj->args.Values != nullptr) - { - recycler->RegisterPendingWriteBarrierBlock(obj->args.Values, obj->args.Info.Count * sizeof(Var)); - recycler->RegisterPendingWriteBarrierBlock(&obj->args.Values, sizeof(Var*)); - } - return obj; + generator->SetState(GeneratorState::Executing); } - else -#endif + + ~GeneratorStateHelper() + { + generator->SetState(IsDone() ? GeneratorState::Completed : GeneratorState::Suspended); + } + + bool IsDone() { - return RecyclerNew(recycler, JavascriptGenerator, generatorType, args, scriptFunction); + // If the generator is jit'd, we set its interpreter frame to nullptr at the + // end right before the epilogue to signal that the generator has completed + auto* frame = generator->GetFrame(); + + if (didThrow || frame == nullptr) + return true; + + int nextOffset = frame->GetReader()->GetCurrentOffset(); + int endOffset = frame->GetFunctionBody()->GetByteCode()->GetLength(); + + if (nextOffset == endOffset - 1) + return true; + + return false; } + }; +} + +JavascriptGenerator::JavascriptGenerator( + DynamicType* type, + Arguments& args, + ScriptFunction* scriptFunction) : + DynamicObject(type), + args(args), + frame(nullptr), + state(GeneratorState::SuspendedStart), + scriptFunction(scriptFunction), + resumeYieldObject(nullptr) {} + +JavascriptGenerator* JavascriptGenerator::New( + Recycler* recycler, + DynamicType* generatorType, + Arguments& args, + ScriptFunction* scriptFunction) +{ + // InterpreterStackFrame takes a pointer to the args, so copy them to the recycler + // heap and use that buffer for the generator's InterpreterStackFrame + Field(Var)* argValuesCopy = nullptr; + + if (args.Info.Count > 0) + { + argValuesCopy = RecyclerNewArray(recycler, Field(Var), args.Info.Count); + CopyArray(argValuesCopy, args.Info.Count, args.Values, args.Info.Count); } - JavascriptGenerator *JavascriptGenerator::New(Recycler *recycler, DynamicType *generatorType, Arguments &args, - Js::JavascriptGenerator::GeneratorState generatorState) + Arguments heapArgs(args.Info, unsafe_write_barrier_cast(argValuesCopy)); + +#if GLOBAL_ENABLE_WRITE_BARRIER + if (CONFIG_FLAG(ForceSoftwareWriteBarrier)) { - JavascriptGenerator *obj = JavascriptGenerator::New(recycler, generatorType, args, nullptr); - obj->SetState(generatorState); + JavascriptGenerator* obj = RecyclerNewFinalized( + recycler, + JavascriptGenerator, + generatorType, + heapArgs, + scriptFunction); + + if (obj->args.Values != nullptr) + { + recycler->RegisterPendingWriteBarrierBlock( + obj->args.Values, + obj->args.Info.Count * sizeof(Var)); + + recycler->RegisterPendingWriteBarrierBlock( + &obj->args.Values, + sizeof(Var*)); + } + return obj; } +#endif + + return RecyclerNew(recycler, JavascriptGenerator, generatorType, heapArgs, scriptFunction); +} - bool JavascriptGenerator::Is(Var var) +template<> +bool Js::VarIsImpl(RecyclableObject* obj) +{ + auto typeId = JavascriptOperators::GetTypeId(obj); + return typeId == TypeIds_Generator || typeId == TypeIds_AsyncGenerator; +} + +void JavascriptGenerator::SetFrame(InterpreterStackFrame* frame, size_t bytes) +{ + Assert(this->frame == nullptr); + this->frame = frame; +#if GLOBAL_ENABLE_WRITE_BARRIER + if (CONFIG_FLAG(ForceSoftwareWriteBarrier)) { - return JavascriptOperators::GetTypeId(var) == TypeIds_Generator; + GetScriptContext()->GetRecycler()->RegisterPendingWriteBarrierBlock(frame, bytes); } +#endif +} - JavascriptGenerator* JavascriptGenerator::FromVar(Var var) - { - AssertOrFailFastMsg(Is(var), "Ensure var is actually a 'JavascriptGenerator'"); +void JavascriptGenerator::SetFrameSlots(Js::RegSlot slotCount, Field(Var)* frameSlotArray) +{ + AssertMsg(this->frame->GetFunctionBody()->GetLocalsCount() == slotCount, + "Unexpected mismatch in frame slot count for generated."); - return static_cast(var); - } + for (Js::RegSlot i = 0; i < slotCount; i++) + GetFrame()->m_localSlots[i] = frameSlotArray[i]; +} - JavascriptGenerator* JavascriptGenerator::UnsafeFromVar(Var var) +#if GLOBAL_ENABLE_WRITE_BARRIER +void JavascriptGenerator::Finalize(bool isShutdown) +{ + if (CONFIG_FLAG(ForceSoftwareWriteBarrier) && !isShutdown) { - AssertMsg(Is(var), "Ensure var is actually a 'JavascriptGenerator'"); + auto* recycler = GetScriptContext()->GetRecycler(); + + if (this->frame) + recycler->UnRegisterPendingWriteBarrierBlock(this->frame); - return static_cast(var); + if (this->args.Values) + recycler->UnRegisterPendingWriteBarrierBlock(this->args.Values); } +} +#endif - void JavascriptGenerator::SetFrame(InterpreterStackFrame* frame, size_t bytes) +void JavascriptGenerator::ThrowIfExecuting(const char16* apiName) +{ + if (this->IsExecuting()) { - Assert(this->frame == nullptr); - this->frame = frame; -#if GLOBAL_ENABLE_WRITE_BARRIER - if (CONFIG_FLAG(ForceSoftwareWriteBarrier)) - { - this->GetScriptContext()->GetRecycler()->RegisterPendingWriteBarrierBlock(frame, bytes); - } -#endif + JavascriptError::ThrowTypeError( + GetScriptContext(), + JSERR_GeneratorAlreadyExecuting, + apiName); } +} + +Var JavascriptGenerator::CallGenerator(Var data, ResumeYieldKind resumeKind) +{ + Assert(!IsExecuting() && !IsCompleted()); - void JavascriptGenerator::SetFrameSlots(Js::RegSlot slotCount, Field(Var)* frameSlotArray) + ScriptContext* scriptContext = this->GetScriptContext(); + JavascriptLibrary* library = scriptContext->GetLibrary(); + Var result = nullptr; + + if (this->frame) { - AssertMsg(this->frame->GetFunctionBody()->GetLocalsCount() == slotCount, "Unexpected mismatch in frame slot count for generated."); - for (Js::RegSlot i = 0; i < slotCount; i++) + // if the function already has a state it may be going to resume in the jit + // if so copy any innerScopes into registers jit can access + uint32 innerScopeCount = this->scriptFunction->GetFunctionBody()->GetInnerScopeCount(); + for (uint32 i = 0; i < innerScopeCount; ++i) { - this->GetFrame()->m_localSlots[i] = frameSlotArray[i]; + Js::RegSlot reg = this->scriptFunction->GetFunctionBody()->GetFirstInnerScopeRegister() + i; + this->frame->SetNonVarReg(reg, this->frame->InnerScopeFromIndex(i)); } } -#if GLOBAL_ENABLE_WRITE_BARRIER - void JavascriptGenerator::Finalize(bool isShutdown) + SetResumeYieldProperties(data, resumeKind); + { - if (CONFIG_FLAG(ForceSoftwareWriteBarrier) && !isShutdown) + Var thunkArgs[] = {this, this->resumeYieldObject}; + Arguments arguments(_countof(thunkArgs), thunkArgs); + GeneratorStateHelper helper(this); + + try { - if (this->frame) + BEGIN_SAFE_REENTRANT_CALL(scriptContext->GetThreadContext()) { - this->GetScriptContext()->GetRecycler()->UnRegisterPendingWriteBarrierBlock(this->frame); - } - if (this->args.Values) - { - this->GetScriptContext()->GetRecycler()->UnRegisterPendingWriteBarrierBlock(this->args.Values); + result = JavascriptFunction::CallFunction<1>( + this->scriptFunction, + this->scriptFunction->GetEntryPoint(), + arguments); } + END_SAFE_REENTRANT_CALL + helper.didThrow = false; } - } -#endif - - Var JavascriptGenerator::CallGenerator(ResumeYieldData* yieldData, const char16* apiNameForErrorMessage) - { - ScriptContext* scriptContext = this->GetScriptContext(); - JavascriptLibrary* library = scriptContext->GetLibrary(); - Var result = nullptr; - - if (this->IsExecuting()) + catch (const JavascriptException& err) { - JavascriptError::ThrowTypeError(scriptContext, JSERR_GeneratorAlreadyExecuting, apiNameForErrorMessage); + JavascriptExceptionOperators::DoThrowCheckClone(err.GetAndClear(), scriptContext); } + } - { - // RAII helper to set the state of the generator to completed if an exception is thrown - // or if the save state InterpreterStackFrame is never created implying the generator - // is JITed and returned without ever yielding. - class GeneratorStateHelper - { - JavascriptGenerator* g; - bool didThrow; - public: - GeneratorStateHelper(JavascriptGenerator* g) : g(g), didThrow(true) { g->SetState(GeneratorState::Executing); } - ~GeneratorStateHelper() { g->SetState(didThrow || g->frame == nullptr ? GeneratorState::Completed : GeneratorState::Suspended); } - void DidNotThrow() { didThrow = false; } - } helper(this); + // Clear the value property of the resume yield object so that we don't + // extend the lifetime of the value + SetResumeYieldProperties(library->GetUndefined(), ResumeYieldKind::Normal); - Var thunkArgs[] = { this, yieldData }; - Arguments arguments(_countof(thunkArgs), thunkArgs); + if (IsCompleted()) + return library->CreateIteratorResultObject(result, library->GetTrue()); - JavascriptExceptionObject *exception = nullptr; + return result; +} - try - { - BEGIN_SAFE_REENTRANT_CALL(scriptContext->GetThreadContext()) - { - result = JavascriptFunction::CallFunction<1>(this->scriptFunction, this->scriptFunction->GetEntryPoint(), arguments); - } - END_SAFE_REENTRANT_CALL - helper.DidNotThrow(); - } - catch (const JavascriptException& err) - { - exception = err.GetAndClear(); - } +void JavascriptGenerator::SetResumeYieldProperties(Var value, ResumeYieldKind kind) +{ + auto* library = GetScriptContext()->GetLibrary(); + DynamicType* type = library->GetResumeYieldObjectType(); - if (exception != nullptr) - { - if (!exception->IsGeneratorReturnException()) - { - JavascriptExceptionOperators::DoThrowCheckClone(exception, scriptContext); - } - result = exception->GetThrownObject(nullptr); - } - } + if (!this->resumeYieldObject) + this->resumeYieldObject = DynamicObject::New(GetScriptContext()->GetRecycler(), type); + else + AssertOrFailFast(this->resumeYieldObject->GetDynamicType() == type); - if (!this->IsCompleted()) - { - int nextOffset = this->frame->GetReader()->GetCurrentOffset(); - int endOffset = this->frame->GetFunctionBody()->GetByteCode()->GetLength(); + Var kindVar = TaggedInt::ToVarUnchecked((int)kind); + this->resumeYieldObject->SetSlot(SetSlotArguments(Js::PropertyIds::value, 0, value)); + this->resumeYieldObject->SetSlot(SetSlotArguments(Js::PropertyIds::kind, 1, kindVar)); +} - if (nextOffset != endOffset - 1) - { - // Yielded values are already wrapped in an IteratorResult object, so we don't need to wrap them. - return result; - } - } +Var JavascriptGenerator::EntryNext(RecyclableObject* function, CallInfo callInfo, ...) +{ + PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); + ARGUMENTS(args, callInfo); - result = library->CreateIteratorResultObject(result, library->GetTrue()); - this->SetState(GeneratorState::Completed); + auto* scriptContext = function->GetScriptContext(); + auto* library = scriptContext->GetLibrary(); - return result; - } + AUTO_TAG_NATIVE_LIBRARY_ENTRY(function, callInfo, _u("Generator.prototype.next")); - Var JavascriptGenerator::EntryNext(RecyclableObject* function, CallInfo callInfo, ...) + if (!VarIs(args[0]) || JavascriptOperators::GetTypeId(args[0]) != TypeIds_Generator) { - PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); + JavascriptError::ThrowTypeErrorVar( + scriptContext, + JSERR_NeedObjectOfType, + _u("Generator.prototype.next"), + _u("Generator")); + } - ARGUMENTS(args, callInfo); - ScriptContext* scriptContext = function->GetScriptContext(); - JavascriptLibrary* library = scriptContext->GetLibrary(); + Var undefinedVar = library->GetUndefined(); + Var input = args.Info.Count > 1 ? args[1] : undefinedVar; - AUTO_TAG_NATIVE_LIBRARY_ENTRY(function, callInfo, _u("Generator.prototype.next")); + auto* generator = UnsafeVarTo(args[0]); - if (!JavascriptGenerator::Is(args[0])) - { - JavascriptError::ThrowTypeErrorVar(scriptContext, JSERR_NeedObjectOfType, _u("Generator.prototype.next"), _u("Generator")); - } + if (generator->IsCompleted()) + return library->CreateIteratorResultObject(undefinedVar, library->GetTrue()); - JavascriptGenerator* generator = JavascriptGenerator::FromVar(args[0]); - Var input = args.Info.Count > 1 ? args[1] : library->GetUndefined(); + generator->ThrowIfExecuting(_u("Generator.prototype.next")); + return generator->CallGenerator(input, ResumeYieldKind::Normal); +} - if (generator->IsCompleted()) - { - return library->CreateIteratorResultObjectUndefinedTrue(); - } +Var JavascriptGenerator::EntryReturn(RecyclableObject* function, CallInfo callInfo, ...) +{ + PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); + ARGUMENTS(args, callInfo); - ResumeYieldData yieldData(input, nullptr); - return generator->CallGenerator(&yieldData, _u("Generator.prototype.next")); - } + auto* scriptContext = function->GetScriptContext(); + auto* library = scriptContext->GetLibrary(); + + AUTO_TAG_NATIVE_LIBRARY_ENTRY(function, callInfo, _u("Generator.prototype.return")); - Var JavascriptGenerator::EntryReturn(RecyclableObject* function, CallInfo callInfo, ...) + if (!VarIs(args[0]) || JavascriptOperators::GetTypeId(args[0]) != TypeIds_Generator) { - PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); + JavascriptError::ThrowTypeErrorVar( + scriptContext, + JSERR_NeedObjectOfType, + _u("Generator.prototype.return"), + _u("Generator")); + } - ARGUMENTS(args, callInfo); - ScriptContext* scriptContext = function->GetScriptContext(); - JavascriptLibrary* library = scriptContext->GetLibrary(); + Var input = args.Info.Count > 1 ? args[1] : library->GetUndefined(); - AUTO_TAG_NATIVE_LIBRARY_ENTRY(function, callInfo, _u("Generator.prototype.return")); + auto* generator = UnsafeVarTo(args[0]); - if (!JavascriptGenerator::Is(args[0])) - { - JavascriptError::ThrowTypeErrorVar(scriptContext, JSERR_NeedObjectOfType, _u("Generator.prototype.return"), _u("Generator")); - } + if (generator->IsSuspendedStart()) + generator->SetCompleted(); - JavascriptGenerator* generator = JavascriptGenerator::FromVar(args[0]); - Var input = args.Info.Count > 1 ? args[1] : library->GetUndefined(); + if (generator->IsCompleted()) + return library->CreateIteratorResultObject(input, library->GetTrue()); - if (generator->IsSuspendedStart()) - { - generator->SetState(GeneratorState::Completed); - } + generator->ThrowIfExecuting(_u("Generator.prototype.return")); + return generator->CallGenerator(input, ResumeYieldKind::Return); +} - if (generator->IsCompleted()) - { - return library->CreateIteratorResultObject(input, library->GetTrue()); - } +Var JavascriptGenerator::EntryThrow(RecyclableObject* function, CallInfo callInfo, ...) +{ + PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); + ARGUMENTS(args, callInfo); - ResumeYieldData yieldData(input, RecyclerNew(scriptContext->GetRecycler(), GeneratorReturnExceptionObject, input, scriptContext)); - return generator->CallGenerator(&yieldData, _u("Generator.prototype.return")); - } + auto* scriptContext = function->GetScriptContext(); + auto* library = scriptContext->GetLibrary(); + + AUTO_TAG_NATIVE_LIBRARY_ENTRY(function, callInfo, _u("Generator.prototype.throw")); - Var JavascriptGenerator::EntryThrow(RecyclableObject* function, CallInfo callInfo, ...) + if (!VarIs(args[0]) || JavascriptOperators::GetTypeId(args[0]) != TypeIds_Generator) { - PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); + JavascriptError::ThrowTypeErrorVar( + scriptContext, + JSERR_NeedObjectOfType, + _u("Generator.prototype.throw"), + _u("Generator")); + } - ARGUMENTS(args, callInfo); - ScriptContext* scriptContext = function->GetScriptContext(); - JavascriptLibrary* library = scriptContext->GetLibrary(); + Var input = args.Info.Count > 1 ? args[1] : library->GetUndefined(); - AUTO_TAG_NATIVE_LIBRARY_ENTRY(function, callInfo, _u("Generator.prototype.throw")); + auto* generator = UnsafeVarTo(args[0]); - if (!JavascriptGenerator::Is(args[0])) - { - JavascriptError::ThrowTypeErrorVar(scriptContext, JSERR_NeedObjectOfType, _u("Generator.prototype.throw"), _u("Generator")); - } + if (generator->IsSuspendedStart()) + generator->SetCompleted(); - JavascriptGenerator* generator = JavascriptGenerator::FromVar(args[0]); - Var input = args.Info.Count > 1 ? args[1] : library->GetUndefined(); + if (generator->IsCompleted()) + JavascriptExceptionOperators::OP_Throw(input, scriptContext); - if (generator->IsSuspendedStart()) - { - generator->SetState(GeneratorState::Completed); - } + generator->ThrowIfExecuting(_u("Generator.prototype.throw")); + return generator->CallGenerator(input, ResumeYieldKind::Throw); +} - if (generator->IsCompleted()) - { - JavascriptExceptionOperators::OP_Throw(input, scriptContext); - } +bool JavascriptGenerator::IsAsyncModule() const +{ + FunctionProxy* proxy = this->scriptFunction->GetFunctionProxy(); + return proxy->IsModule() && proxy->IsAsync(); +} - ResumeYieldData yieldData(input, RecyclerNew(scriptContext->GetRecycler(), JavascriptExceptionObject, input, scriptContext, nullptr)); - return generator->CallGenerator(&yieldData, _u("Generator.prototype.throw")); - } +#ifdef ENABLE_DEBUG_CONFIG_OPTIONS +void JavascriptGenerator::OutputBailInTrace(JavascriptGenerator* generator) +{ + char16 debugStringBuffer[MAX_FUNCTION_BODY_DEBUG_STRING_SIZE]; + FunctionBody* fnBody = generator->scriptFunction->GetFunctionBody(); -#if ENABLE_TTD + Output::Print( + _u("BailIn: function: %s (%s) offset: #%04x\n"), + fnBody->GetDisplayName(), + fnBody->GetDebugNumberSet(debugStringBuffer), + generator->frame->m_reader.GetCurrentOffset()); - void JavascriptGenerator::MarkVisitKindSpecificPtrs(TTD::SnapshotExtractor* extractor) + if (generator->bailInSymbolsTraceArrayCount == 0) { - if (this->scriptFunction != nullptr) + Output::Print( + _u("BailIn: No symbols reloaded\n"), + fnBody->GetDisplayName(), + fnBody->GetDebugNumberSet(debugStringBuffer)); + } + else + { + for (int i = 0; i < generator->bailInSymbolsTraceArrayCount; i++) { - extractor->MarkVisitVar(this->scriptFunction); + const BailInSymbol& symbol = generator->bailInSymbolsTraceArray[i]; + Output::Print(_u("BailIn: Register #%4d, value: 0x%p\n"), symbol.id, symbol.value); } + } +} +#endif - // frame is null when generator has been completed - if (this->frame != nullptr) - { - // mark slot variables for traversal - Js::RegSlot slotCount = this->frame->GetFunctionBody()->GetLocalsCount(); - for (Js::RegSlot i = 0; i < slotCount; i++) - { - Js::Var curr = this->frame->m_localSlots[i]; - if (curr != nullptr) - { - extractor->MarkVisitVar(curr); - } - } - } +#if ENABLE_TTD - // args.Values is null when generator has been completed - if (this->args.Values != nullptr) - { - // mark argument variables for traversal - uint32 argCount = this->args.GetArgCountWithExtraArgs(); - for (uint32 i = 0; i < argCount; i++) - { - Js::Var curr = this->args[i]; - if (curr != nullptr) - { - extractor->MarkVisitVar(curr); - } - } - } - } +JavascriptGenerator *JavascriptGenerator::New( + Recycler* recycler, + DynamicType* generatorType, + Arguments& args, + JavascriptGenerator::GeneratorState state) +{ + auto* obj = JavascriptGenerator::New(recycler, generatorType, args, nullptr); + obj->SetState(state); + return obj; +} - TTD::NSSnapObjects::SnapObjectType JavascriptGenerator::GetSnapTag_TTD() const +void JavascriptGenerator::MarkVisitKindSpecificPtrs(TTD::SnapshotExtractor* extractor) +{ + if (this->scriptFunction != nullptr) { - return TTD::NSSnapObjects::SnapObjectType::SnapGenerator; + extractor->MarkVisitVar(this->scriptFunction); } - void JavascriptGenerator::ExtractSnapObjectDataInto(TTD::NSSnapObjects::SnapObject* objData, TTD::SlabAllocator& alloc) + // frame is null when generator has been completed + if (this->frame != nullptr) { - TTD::NSSnapObjects::SnapGeneratorInfo* gi = alloc.SlabAllocateStruct(); - - // TODO: BUGBUG - figure out how to determine what the prototype was - gi->generatorPrototype = 0; - //if (this->GetPrototype() == this->GetScriptContext()->GetLibrary()->GetNull()) - //{ - // gi->generatorPrototype = 1; - //} - //else if (this->GetType() == this->GetScriptContext()->GetLibrary()->GetGeneratorConstructorPrototypeObjectType()) - //{ - // // check type here, not prototype, since type is static across generators - // gi->generatorPrototype = 2; - //} - //else - //{ - // //TTDAssert(false, "unexpected prototype found JavascriptGenerator"); - //} - - gi->scriptFunction = TTD_CONVERT_VAR_TO_PTR_ID(this->scriptFunction); - gi->state = static_cast(this->state); - - - // grab slot info from InterpreterStackFrame - gi->frame_slotCount = 0; - gi->frame_slotArray = nullptr; - if (this->frame != nullptr) + // mark slot variables for traversal + Js::RegSlot slotCount = this->frame->GetFunctionBody()->GetLocalsCount(); + for (Js::RegSlot i = 0; i < slotCount; i++) { - gi->frame_slotCount = this->frame->GetFunctionBody()->GetLocalsCount(); - if (gi->frame_slotCount > 0) + Js::Var curr = this->frame->m_localSlots[i]; + if (curr != nullptr) { - gi->frame_slotArray = alloc.SlabAllocateArray(gi->frame_slotCount); + extractor->MarkVisitVar(curr); } - for (Js::RegSlot i = 0; i < gi->frame_slotCount; i++) + } + } + + // args.Values is null when generator has been completed + if (this->args.Values != nullptr) + { + // mark argument variables for traversal + uint32 argCount = this->args.GetArgCountWithExtraArgs(); + for (uint32 i = 0; i < argCount; i++) + { + Js::Var curr = this->args[i]; + if (curr != nullptr) { - gi->frame_slotArray[i] = this->frame->m_localSlots[i]; + extractor->MarkVisitVar(curr); } } + } +} - // grab arguments - TTD_PTR_ID* depArray = nullptr; - uint32 depCount = 0; +TTD::NSSnapObjects::SnapObjectType JavascriptGenerator::GetSnapTag_TTD() const +{ + return TTD::NSSnapObjects::SnapObjectType::SnapGenerator; +} - if (this->args.Values == nullptr) +void JavascriptGenerator::ExtractSnapObjectDataInto(TTD::NSSnapObjects::SnapObject* objData, TTD::SlabAllocator& alloc) +{ + TTD::NSSnapObjects::SnapGeneratorInfo* gi = alloc.SlabAllocateStruct(); + + // TODO: BUGBUG - figure out how to determine what the prototype was + gi->generatorPrototype = 0; + //if (this->GetPrototype() == this->GetScriptContext()->GetLibrary()->GetNull()) + //{ + // gi->generatorPrototype = 1; + //} + //else if (this->GetType() == this->GetScriptContext()->GetLibrary()->GetGeneratorConstructorPrototypeObjectType()) + //{ + // // check type here, not prototype, since type is static across generators + // gi->generatorPrototype = 2; + //} + //else + //{ + // //TTDAssert(false, "unexpected prototype found JavascriptGenerator"); + //} + + gi->scriptFunction = TTD_CONVERT_VAR_TO_PTR_ID(this->scriptFunction); + gi->state = static_cast(this->state); + + + // grab slot info from InterpreterStackFrame + gi->frame_slotCount = 0; + gi->frame_slotArray = nullptr; + if (this->frame != nullptr) + { + gi->frame_slotCount = this->frame->GetFunctionBody()->GetLocalsCount(); + if (gi->frame_slotCount > 0) { - gi->arguments_count = 0; + gi->frame_slotArray = alloc.SlabAllocateArray(gi->frame_slotCount); } - else + for (Js::RegSlot i = 0; i < gi->frame_slotCount; i++) { - gi->arguments_count = this->args.GetArgCountWithExtraArgs(); + gi->frame_slotArray[i] = this->frame->m_localSlots[i]; } + } - gi->arguments_values = nullptr; - if (gi->arguments_count > 0) - { - gi->arguments_values = alloc.SlabAllocateArray(gi->arguments_count); - depArray = alloc.SlabReserveArraySpace(gi->arguments_count); - } + // grab arguments + TTD_PTR_ID* depArray = nullptr; + uint32 depCount = 0; - for (uint32 i = 0; i < gi->arguments_count; i++) - { - gi->arguments_values[i] = this->args[i]; - if (gi->arguments_values[i] != nullptr && TTD::JsSupport::IsVarComplexKind(gi->arguments_values[i])) - { - depArray[depCount] = TTD_CONVERT_VAR_TO_PTR_ID(gi->arguments_values[i]); - depCount++; - } - } + if (this->args.Values == nullptr) + { + gi->arguments_count = 0; + } + else + { + gi->arguments_count = this->args.GetArgCountWithExtraArgs(); + } - if (depCount > 0) - { - alloc.SlabCommitArraySpace(depCount, gi->arguments_count); - } - else if (gi->arguments_count > 0) - { - alloc.SlabAbortArraySpace(gi->arguments_count); - } + gi->arguments_values = nullptr; + if (gi->arguments_count > 0) + { + gi->arguments_values = alloc.SlabAllocateArray(gi->arguments_count); + depArray = alloc.SlabReserveArraySpace(gi->arguments_count); + } - if (this->frame != nullptr) - { - gi->byteCodeReader_offset = this->frame->GetReader()->GetCurrentOffset(); - } - else + for (uint32 i = 0; i < gi->arguments_count; i++) + { + gi->arguments_values[i] = this->args[i]; + if (gi->arguments_values[i] != nullptr && TTD::JsSupport::IsVarComplexKind(gi->arguments_values[i])) { - gi->byteCodeReader_offset = 0; + depArray[depCount] = TTD_CONVERT_VAR_TO_PTR_ID(gi->arguments_values[i]); + depCount++; } + } - // Copy the CallInfo data into the struct - gi->arguments_callInfo_count = this->args.Info.Count; - gi->arguments_callInfo_flags = this->args.Info.Flags; + if (depCount > 0) + { + alloc.SlabCommitArraySpace(depCount, gi->arguments_count); + } + else if (gi->arguments_count > 0) + { + alloc.SlabAbortArraySpace(gi->arguments_count); + } - // TODO: understand why there's a mis-match between args.Info.Count and GetArgCountWithExtraArgs - // TTDAssert(this->args.Info.Count == gi->arguments_count, "mismatched count between args.Info and GetArgCountWithExtraArgs"); + if (this->frame != nullptr) + { + gi->byteCodeReader_offset = this->frame->GetReader()->GetCurrentOffset(); + } + else + { + gi->byteCodeReader_offset = 0; + } - if (depCount == 0) - { - TTD::NSSnapObjects::StdExtractSetKindSpecificInfo(objData, gi); - } - else - { - TTDAssert(depArray != nullptr, "depArray should be non-null if depCount is > 0"); - TTD::NSSnapObjects::StdExtractSetKindSpecificInfo(objData, gi, alloc, depCount, depArray); - } + // Copy the CallInfo data into the struct + gi->arguments_callInfo_count = gi->arguments_count > 0 ? this->args.Info.Count : 0; + gi->arguments_callInfo_flags = this->args.Info.Flags; + + // TODO: understand why there's a mis-match between args.Info.Count and GetArgCountWithExtraArgs + // TTDAssert(this->args.Info.Count == gi->arguments_count, "mismatched count between args.Info and GetArgCountWithExtraArgs"); + if (depCount == 0) + { + TTD::NSSnapObjects::StdExtractSetKindSpecificInfo(objData, gi); } -#endif + else + { + TTDAssert(depArray != nullptr, "depArray should be non-null if depCount is > 0"); + TTD::NSSnapObjects::StdExtractSetKindSpecificInfo(objData, gi, alloc, depCount, depArray); + } + } +#endif diff --git a/lib/Runtime/Library/JavascriptGenerator.h b/lib/Runtime/Library/JavascriptGenerator.h index a84f9b6f736..ec0cb9291df 100644 --- a/lib/Runtime/Library/JavascriptGenerator.h +++ b/lib/Runtime/Library/JavascriptGenerator.h @@ -6,97 +6,162 @@ namespace Js { - // Helper struct used to communicate to a yield point whether it was resumed via next(), return(), or throw() - // and provide the data necessary for the corresponding action taken (see OP_ResumeYield) - struct ResumeYieldData - { - Var data; - JavascriptExceptionObject* exceptionObj; - ResumeYieldData(Var data, JavascriptExceptionObject* exceptionObj) : data(data), exceptionObj(exceptionObj) { } +enum class ResumeYieldKind +{ + Normal = 0, + Throw = 1, + Return = 2 +}; + +class JavascriptGenerator : public DynamicObject +{ +public: + enum class GeneratorState + { + SuspendedStart, + Suspended, + Executing, + Completed }; - class JavascriptGenerator : public DynamicObject + static uint32 GetFrameOffset() { - public: - enum class GeneratorState + return offsetof(JavascriptGenerator, frame); + } + + static uint32 GetCallInfoOffset() + { + return offsetof(JavascriptGenerator, args) + Arguments::GetCallInfoOffset(); + } + + static uint32 GetArgsPtrOffset() + { + return offsetof(JavascriptGenerator, args) + Arguments::GetValuesOffset(); + } + + void SetState(GeneratorState state) + { + this->state = state; + if (state == GeneratorState::Completed) { - Suspended, - Executing, - Completed - }; - - static uint32 GetFrameOffset() { return offsetof(JavascriptGenerator, frame); } - static uint32 GetCallInfoOffset() { return offsetof(JavascriptGenerator, args) + Arguments::GetCallInfoOffset(); } - static uint32 GetArgsPtrOffset() { return offsetof(JavascriptGenerator, args) + Arguments::GetValuesOffset(); } - - void SetState(GeneratorState state) { - this->state = state; - if(state == GeneratorState::Completed) - { - frame = nullptr; - args.Values = nullptr; - scriptFunction = nullptr; - } + frame = nullptr; + args.Values = nullptr; + scriptFunction = nullptr; } + } - private: - Field(InterpreterStackFrame*) frame; - Field(GeneratorState) state; - Field(Arguments) args; - Field(ScriptFunction*) scriptFunction; + void ThrowIfExecuting(const char16* apiName); + Var CallGenerator(Var data, ResumeYieldKind resumeKind); - DEFINE_VTABLE_CTOR_MEMBER_INIT(JavascriptGenerator, DynamicObject, args); - DEFINE_MARSHAL_OBJECT_TO_SCRIPT_CONTEXT(JavascriptGenerator); +private: + Field(InterpreterStackFrame*) frame; + Field(GeneratorState) state; + Field(Arguments) args; + Field(ScriptFunction*) scriptFunction; + Field(DynamicObject*) resumeYieldObject; - Var CallGenerator(ResumeYieldData* yieldData, const char16* apiNameForErrorMessage); - JavascriptGenerator(DynamicType* type, Arguments& args, ScriptFunction* scriptFunction); + void SetResumeYieldProperties(Var value, ResumeYieldKind kind); - public: - static JavascriptGenerator* New(Recycler* recycler, DynamicType* generatorType, Arguments& args, ScriptFunction* scriptFunction); +protected: + DEFINE_VTABLE_CTOR_MEMBER_INIT(JavascriptGenerator, DynamicObject, args); + DEFINE_MARSHAL_OBJECT_TO_SCRIPT_CONTEXT(JavascriptGenerator); - static JavascriptGenerator *New(Recycler *recycler, DynamicType *generatorType, Arguments &args, Js::JavascriptGenerator::GeneratorState generatorState); + JavascriptGenerator(DynamicType* type, Arguments& args, ScriptFunction* scriptFunction); - bool IsExecuting() const { return state == GeneratorState::Executing; } - bool IsSuspended() const { return state == GeneratorState::Suspended; } - bool IsCompleted() const { return state == GeneratorState::Completed; } - bool IsSuspendedStart() const { return state == GeneratorState::Suspended && this->frame == nullptr; } +public: - void SetScriptFunction(ScriptFunction* sf) - { - this->scriptFunction = sf; - } + static JavascriptGenerator* New( + Recycler* recycler, + DynamicType* generatorType, + Arguments& args, + ScriptFunction* scriptFunction); + + bool IsSuspendedStart() const { return this->state == GeneratorState::SuspendedStart; } + bool IsExecuting() const { return this->state == GeneratorState::Executing; } + bool IsSuspended() const { return this->state == GeneratorState::Suspended; } + bool IsCompleted() const { return this->state == GeneratorState::Completed; } + + bool IsAsyncModule() const; + + void SetSuspendedStart() + { + Assert( + this->state == GeneratorState::SuspendedStart || + this->state == GeneratorState::Suspended); + this->state = GeneratorState::SuspendedStart; + } - void SetFrame(InterpreterStackFrame* frame, size_t bytes); - InterpreterStackFrame* GetFrame() const { return frame; } - void SetFrameSlots(uint slotCount, Field(Var)* frameSlotArray); + void SetCompleted() + { + Assert(this->state != GeneratorState::Executing); + this->SetState(GeneratorState::Completed); + } + + InterpreterStackFrame* GetFrame() const { return frame; } + const Arguments& GetArguments() const { return args; } + + void SetScriptFunction(ScriptFunction* sf) { this->scriptFunction = sf; } + void SetFrame(InterpreterStackFrame* frame, size_t bytes); + void SetFrameSlots(uint slotCount, Field(Var)* frameSlotArray); #if GLOBAL_ENABLE_WRITE_BARRIER - virtual void Finalize(bool isShutdown) override; + virtual void Finalize(bool isShutdown) override; #endif - const Arguments& GetArguments() const { return args; } - - static bool Is(Var var); - static JavascriptGenerator* FromVar(Var var); - static JavascriptGenerator* UnsafeFromVar(Var var); + class EntryInfo + { + public: + static FunctionInfo Next; + static FunctionInfo Return; + static FunctionInfo Throw; + }; - class EntryInfo - { - public: - static FunctionInfo Next; - static FunctionInfo Return; - static FunctionInfo Throw; - }; - static Var EntryNext(RecyclableObject* function, CallInfo callInfo, ...); - static Var EntryReturn(RecyclableObject* function, CallInfo callInfo, ...); - static Var EntryThrow(RecyclableObject* function, CallInfo callInfo, ...); + static Var EntryNext(RecyclableObject* function, CallInfo callInfo, ...); + static Var EntryReturn(RecyclableObject* function, CallInfo callInfo, ...); + static Var EntryThrow(RecyclableObject* function, CallInfo callInfo, ...); #if ENABLE_TTD - virtual void MarkVisitKindSpecificPtrs(TTD::SnapshotExtractor* extractor) override; - virtual TTD::NSSnapObjects::SnapObjectType GetSnapTag_TTD() const override; - virtual void ExtractSnapObjectDataInto(TTD::NSSnapObjects::SnapObject* objData, TTD::SlabAllocator& alloc) override; - //virtual void ProcessCorePaths() override; + static JavascriptGenerator* New( + Recycler* recycler, + DynamicType* generatorType, + Arguments &args, + Js::JavascriptGenerator::GeneratorState generatorState); + + virtual void MarkVisitKindSpecificPtrs(TTD::SnapshotExtractor* extractor) override; + virtual TTD::NSSnapObjects::SnapObjectType GetSnapTag_TTD() const override; + virtual void ExtractSnapObjectDataInto(TTD::NSSnapObjects::SnapObject* objData, TTD::SlabAllocator& alloc) override; + // virtual void ProcessCorePaths() override; #endif + +#ifdef ENABLE_DEBUG_CONFIG_OPTIONS +public: + struct BailInSymbol { + uint32 id; + Var value; + static uint32 GetBailInSymbolIdOffset() { return offsetof(BailInSymbol, id); } + static uint32 GetBailInSymbolValueOffset() { return offsetof(BailInSymbol, value); } }; + + Field(BailInSymbol*) bailInSymbolsTraceArray = nullptr; + Field(int) bailInSymbolsTraceArrayCount = 0; + + static uint32 GetBailInSymbolsTraceArrayOffset() + { + return offsetof(JavascriptGenerator, bailInSymbolsTraceArray); + } + + static uint32 GetBailInSymbolsTraceArrayCountOffset() + { + return offsetof(JavascriptGenerator, bailInSymbolsTraceArrayCount); + } + + static void OutputBailInTrace(JavascriptGenerator* generator); +#endif + +}; + +template<> +bool VarIsImpl(RecyclableObject* obj); + } diff --git a/lib/Runtime/Library/JavascriptGeneratorFunction.cpp b/lib/Runtime/Library/JavascriptGeneratorFunction.cpp index bc99a42d0bb..c44036ad3d1 100644 --- a/lib/Runtime/Library/JavascriptGeneratorFunction.cpp +++ b/lib/Runtime/Library/JavascriptGeneratorFunction.cpp @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #include "RuntimeLibraryPch.h" @@ -9,9 +10,6 @@ using namespace Js; FunctionInfo JavascriptGeneratorFunction::functionInfo( FORCE_NO_WRITE_BARRIER_TAG(JavascriptGeneratorFunction::EntryGeneratorFunctionImplementation), (FunctionInfo::Attributes)(FunctionInfo::DoNotProfile | FunctionInfo::ErrorOnNew)); - FunctionInfo JavascriptAsyncFunction::functionInfo( - FORCE_NO_WRITE_BARRIER_TAG(JavascriptGeneratorFunction::EntryAsyncFunctionImplementation), - (FunctionInfo::Attributes)(FunctionInfo::DoNotProfile | FunctionInfo::ErrorOnNew)); JavascriptGeneratorFunction::JavascriptGeneratorFunction(DynamicType* type) : ScriptFunctionBase(type, &functionInfo), @@ -35,23 +33,15 @@ using namespace Js; DebugOnly(VerifyEntryPoint()); } - JavascriptAsyncFunction::JavascriptAsyncFunction(DynamicType* type, GeneratorVirtualScriptFunction* scriptFunction) - : JavascriptGeneratorFunction(type, &functionInfo, scriptFunction) - { - DebugOnly(VerifyEntryPoint()); - } - - JavascriptAsyncFunction* JavascriptAsyncFunction::New(ScriptContext* scriptContext, GeneratorVirtualScriptFunction* scriptFunction) + JavascriptGeneratorFunction* JavascriptGeneratorFunction::New(ScriptContext* scriptContext, GeneratorVirtualScriptFunction* scriptFunction) { - return scriptContext->GetLibrary()->CreateAsyncFunction(functionInfo.GetOriginalEntryPoint(), scriptFunction); + return scriptContext->GetLibrary()->CreateGeneratorFunction(functionInfo.GetOriginalEntryPoint(), scriptFunction); } - bool JavascriptGeneratorFunction::Is(Var var) + bool JavascriptGeneratorFunction::IsBaseGeneratorFunction(RecyclableObject* obj) { - if (JavascriptFunction::Is(var)) + if (VarIs(obj)) { - JavascriptFunction* obj = JavascriptFunction::UnsafeFromVar(var); - return VirtualTableInfo::HasVirtualTable(obj) || VirtualTableInfo>::HasVirtualTable(obj); } @@ -59,45 +49,9 @@ using namespace Js; return false; } - JavascriptGeneratorFunction* JavascriptGeneratorFunction::FromVar(Var var) - { - AssertOrFailFast(JavascriptGeneratorFunction::Is(var) || JavascriptAsyncFunction::Is(var)); - - return static_cast(var); - } - - JavascriptGeneratorFunction* JavascriptGeneratorFunction::UnsafeFromVar(Var var) - { - Assert(JavascriptGeneratorFunction::Is(var) || JavascriptAsyncFunction::Is(var)); - - return static_cast(var); - } - - bool JavascriptAsyncFunction::Is(Var var) - { - if (JavascriptFunction::Is(var)) - { - JavascriptFunction* obj = JavascriptFunction::UnsafeFromVar(var); - - return VirtualTableInfo::HasVirtualTable(obj) - || VirtualTableInfo>::HasVirtualTable(obj); - } - - return false; - } - - JavascriptAsyncFunction* JavascriptAsyncFunction::FromVar(Var var) + template <> bool Js::VarIsImpl(RecyclableObject* obj) { - AssertOrFailFast(JavascriptAsyncFunction::Is(var)); - - return static_cast(var); - } - - JavascriptAsyncFunction* JavascriptAsyncFunction::UnsafeFromVar(Var var) - { - Assert(JavascriptAsyncFunction::Is(var)); - - return static_cast(var); + return JavascriptGeneratorFunction::IsBaseGeneratorFunction(obj) || VarIs(obj) || VarIs(obj); } JavascriptGeneratorFunction* JavascriptGeneratorFunction::OP_NewScGenFunc(FrameDisplay *environment, FunctionInfoPtrPtr infoRef) @@ -111,10 +65,22 @@ using namespace Js; JS_ETW(EventWriteJSCRIPT_RECYCLER_ALLOCATE_FUNCTION(scriptFunction, EtwTrace::GetFunctionId(functionProxy))); - JavascriptGeneratorFunction* genFunc = - functionProxy->IsAsync() - ? JavascriptAsyncFunction::New(scriptContext, scriptFunction) - : scriptContext->GetLibrary()->CreateGeneratorFunction(functionInfo.GetOriginalEntryPoint(), scriptFunction); + JavascriptGeneratorFunction* genFunc = nullptr; + if (functionProxy->IsAsync() && !functionProxy->IsModule()) + { + if (functionProxy->IsGenerator()) + { + genFunc = JavascriptAsyncGeneratorFunction::New(scriptContext, scriptFunction); + } + else + { + genFunc = JavascriptAsyncFunction::New(scriptContext, scriptFunction); + } + } + else + { + genFunc = JavascriptGeneratorFunction::New(scriptContext, scriptFunction); + } scriptFunction->SetRealGeneratorFunction(genFunc); @@ -138,79 +104,37 @@ using namespace Js; Var JavascriptGeneratorFunction::EntryGeneratorFunctionImplementation(RecyclableObject* function, CallInfo callInfo, ...) { PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); - ARGUMENTS(stackArgs, callInfo); + ARGUMENTS(args, callInfo); Assert(!(callInfo.Flags & CallFlags_New)); - ScriptContext* scriptContext = function->GetScriptContext(); - JavascriptGeneratorFunction* generatorFunction = JavascriptGeneratorFunction::FromVar(function); + auto* scriptContext = function->GetScriptContext(); + auto* library = scriptContext->GetLibrary(); + auto* generatorFunction = VarTo(function); + + Var prototype = JavascriptOperators::GetPropertyNoCache(function, Js::PropertyIds::prototype, scriptContext); - // InterpreterStackFrame takes a pointer to the args, so copy them to the recycler heap - // and use that buffer for this InterpreterStackFrame. - Field(Var)* argsHeapCopy = RecyclerNewArray(scriptContext->GetRecycler(), Field(Var), stackArgs.Info.Count); - CopyArray(argsHeapCopy, stackArgs.Info.Count, stackArgs.Values, stackArgs.Info.Count); - Arguments heapArgs(callInfo, unsafe_write_barrier_cast(argsHeapCopy)); + // fall back to the original prototype if we have an invalid prototype object + DynamicObject* protoObject = VarIs(prototype) ? + UnsafeVarTo(prototype) : library->GetGeneratorPrototype(); - DynamicObject* prototype = scriptContext->GetLibrary()->CreateGeneratorConstructorPrototypeObject(); - JavascriptGenerator* generator = scriptContext->GetLibrary()->CreateGenerator(heapArgs, generatorFunction->scriptFunction, prototype); - // Set the prototype from constructor - JavascriptOperators::OrdinaryCreateFromConstructor(function, generator, prototype, scriptContext); + JavascriptGenerator* generator = library->CreateGenerator( + args, + generatorFunction->scriptFunction, + protoObject); // Call a next on the generator to execute till the beginning of the body + FunctionInfo* funcInfo = generatorFunction->scriptFunction->GetFunctionInfo(); + if (funcInfo->GetGeneratorWithComplexParams() || funcInfo->IsModule()) BEGIN_SAFE_REENTRANT_CALL(scriptContext->GetThreadContext()) { - CALL_ENTRYPOINT(scriptContext->GetThreadContext(), generator->EntryNext, function, CallInfo(CallFlags_Value, 1), generator); + generator->CallGenerator(library->GetUndefined(), ResumeYieldKind::Normal); } END_SAFE_REENTRANT_CALL - return generator; - } - - Var JavascriptGeneratorFunction::EntryAsyncFunctionImplementation(RecyclableObject* function, CallInfo callInfo, ...) - { - PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); - ARGUMENTS(stackArgs, callInfo); - - ScriptContext* scriptContext = function->GetScriptContext(); - JavascriptLibrary* library = scriptContext->GetLibrary(); - RecyclableObject* prototype = scriptContext->GetLibrary()->GetNull(); - - // InterpreterStackFrame takes a pointer to the args, so copy them to the recycler heap - // and use that buffer for this InterpreterStackFrame. - Field(Var)* argsHeapCopy = RecyclerNewArray(scriptContext->GetRecycler(), Field(Var), stackArgs.Info.Count); - CopyArray(argsHeapCopy, stackArgs.Info.Count, stackArgs.Values, stackArgs.Info.Count); - Arguments heapArgs(callInfo, unsafe_write_barrier_cast(argsHeapCopy)); - - JavascriptExceptionObject* e = nullptr; - JavascriptPromiseResolveOrRejectFunction* resolve; - JavascriptPromiseResolveOrRejectFunction* reject; - JavascriptPromiseAsyncSpawnExecutorFunction* executor = - library->CreatePromiseAsyncSpawnExecutorFunction( - scriptContext->GetLibrary()->CreateGenerator(heapArgs, JavascriptAsyncFunction::FromVar(function)->GetGeneratorVirtualScriptFunction(), prototype), - stackArgs[0]); - - JavascriptPromise* promise = library->CreatePromise(); - JavascriptPromise::InitializePromise(promise, &resolve, &reject, scriptContext); - - try - { - BEGIN_SAFE_REENTRANT_CALL(scriptContext->GetThreadContext()) - { - CALL_FUNCTION(scriptContext->GetThreadContext(), executor, CallInfo(CallFlags_Value, 3), library->GetUndefined(), resolve, reject); - } - END_SAFE_REENTRANT_CALL - } - catch (const JavascriptException& err) - { - e = err.GetAndClear(); - } - - if (e != nullptr) - { - JavascriptPromise::TryRejectWithExceptionObject(e, reject, scriptContext); - } + generator->SetSuspendedStart(); - return promise; + return generator; } Var JavascriptGeneratorFunction::NewInstance(RecyclableObject* function, CallInfo callInfo, ...) @@ -278,11 +202,6 @@ using namespace Js; PropertyQueryFlags JavascriptGeneratorFunction::HasPropertyQuery(PropertyId propertyId, _Inout_opt_ PropertyValueInfo* info) { - if (propertyId == PropertyIds::length) - { - return PropertyQueryFlags::Property_Found; - } - if (propertyId == PropertyIds::caller || propertyId == PropertyIds::arguments) { // JavascriptFunction has special case for caller and arguments; call DynamicObject:: virtual directly to skip that. @@ -294,12 +213,6 @@ using namespace Js; PropertyQueryFlags JavascriptGeneratorFunction::GetPropertyQuery(Var originalInstance, PropertyId propertyId, Var* value, PropertyValueInfo* info, ScriptContext* requestContext) { - BOOL result; - if (GetPropertyBuiltIns(originalInstance, propertyId, value, info, requestContext, &result)) - { - return JavascriptConversion::BooleanToPropertyQueryFlags(result); - } - if (propertyId == PropertyIds::caller || propertyId == PropertyIds::arguments) { // JavascriptFunction has special case for caller and arguments; call DynamicObject:: virtual directly to skip that. @@ -316,12 +229,6 @@ using namespace Js; if (propertyRecord != nullptr) { - BOOL result; - if (GetPropertyBuiltIns(originalInstance, propertyRecord->GetPropertyId(), value, info, requestContext, &result)) - { - return JavascriptConversion::BooleanToPropertyQueryFlags(result); - } - if (propertyRecord->GetPropertyId() == PropertyIds::caller || propertyRecord->GetPropertyId() == PropertyIds::arguments) { // JavascriptFunction has special case for caller and arguments; call DynamicObject:: virtual directly to skip that. @@ -332,27 +239,6 @@ using namespace Js; return JavascriptFunction::GetPropertyQuery(originalInstance, propertyNameString, value, info, requestContext); } - bool JavascriptGeneratorFunction::GetPropertyBuiltIns(Var originalInstance, PropertyId propertyId, Var* value, PropertyValueInfo* info, ScriptContext* requestContext, BOOL* result) - { - if (propertyId == PropertyIds::length) - { - // Cannot just call the base GetProperty for `length` because we need - // to get the length from our private ScriptFunction instead of ourself. - int len = 0; - Var varLength; - if (scriptFunction->GetProperty(this, PropertyIds::length, &varLength, NULL, requestContext)) - { - len = JavascriptConversion::ToInt32(varLength, requestContext); - } - - *value = JavascriptNumber::ToVar(len, requestContext); - *result = true; - return true; - } - - return false; - } - PropertyQueryFlags JavascriptGeneratorFunction::GetPropertyReferenceQuery(Var originalInstance, PropertyId propertyId, Var* value, PropertyValueInfo* info, ScriptContext* requestContext) { return JavascriptGeneratorFunction::GetPropertyQuery(originalInstance, propertyId, value, info, requestContext); @@ -360,12 +246,6 @@ using namespace Js; BOOL JavascriptGeneratorFunction::SetProperty(PropertyId propertyId, Var value, PropertyOperationFlags flags, PropertyValueInfo* info) { - BOOL result; - if (SetPropertyBuiltIns(propertyId, value, flags, info, &result)) - { - return result; - } - if (propertyId == PropertyIds::caller || propertyId == PropertyIds::arguments) { // JavascriptFunction has special case for caller and arguments; call DynamicObject:: virtual directly to skip that. @@ -382,12 +262,6 @@ using namespace Js; if (propertyRecord != nullptr) { - BOOL result; - if (SetPropertyBuiltIns(propertyRecord->GetPropertyId(), value, flags, info, &result)) - { - return result; - } - if (propertyRecord->GetPropertyId() == PropertyIds::caller || propertyRecord->GetPropertyId() == PropertyIds::arguments) { // JavascriptFunction has special case for caller and arguments; call DynamicObject:: virtual directly to skip that. @@ -398,36 +272,8 @@ using namespace Js; return JavascriptFunction::SetProperty(propertyNameString, value, flags, info); } - bool JavascriptGeneratorFunction::SetPropertyBuiltIns(PropertyId propertyId, Var value, PropertyOperationFlags flags, PropertyValueInfo* info, BOOL* result) - { - if (propertyId == PropertyIds::length) - { - JavascriptError::ThrowCantAssignIfStrictMode(flags, this->GetScriptContext()); - - *result = false; - return true; - } - - return false; - } - - BOOL JavascriptGeneratorFunction::SetAccessors(PropertyId propertyId, Var getter, Var setter, PropertyOperationFlags flags) - { - if (propertyId == PropertyIds::length) - { - return this->scriptFunction->SetAccessors(propertyId, getter, setter, flags); - } - - return JavascriptFunction::SetAccessors(propertyId, getter, setter, flags); - } - _Check_return_ _Success_(return) BOOL JavascriptGeneratorFunction::GetAccessors(PropertyId propertyId, _Outptr_result_maybenull_ Var* getter, _Outptr_result_maybenull_ Var* setter, ScriptContext* requestContext) { - if (propertyId == PropertyIds::length) - { - return this->scriptFunction->GetAccessors(propertyId, getter, setter, requestContext); - } - if (propertyId == PropertyIds::caller || propertyId == PropertyIds::arguments) { // JavascriptFunction has special case for caller and arguments; call DynamicObject:: virtual directly to skip that. @@ -445,11 +291,6 @@ using namespace Js; return DynamicObject::GetSetter(propertyId, setterValue, info, requestContext); } - if (propertyId == PropertyIds::length) - { - return this->scriptFunction->GetSetter(propertyId, setterValue, info, requestContext); - } - return JavascriptFunction::GetSetter(propertyId, setterValue, info, requestContext); } @@ -460,11 +301,6 @@ using namespace Js; if (propertyRecord != nullptr) { - if (propertyRecord->GetPropertyId() == PropertyIds::length) - { - return this->scriptFunction->GetSetter(propertyNameString, setterValue, info, requestContext); - } - if ((propertyRecord->GetPropertyId() == PropertyIds::caller || propertyRecord->GetPropertyId() == PropertyIds::arguments)) { // JavascriptFunction has special case for caller and arguments; call DynamicObject:: virtual directly to skip that. @@ -482,11 +318,6 @@ using namespace Js; BOOL JavascriptGeneratorFunction::DeleteProperty(PropertyId propertyId, PropertyOperationFlags flags) { - if (propertyId == PropertyIds::length) - { - return false; - } - if (propertyId == PropertyIds::caller || propertyId == PropertyIds::arguments) { // JavascriptFunction has special case for caller and arguments; call DynamicObject:: virtual directly to skip that. @@ -498,11 +329,6 @@ using namespace Js; BOOL JavascriptGeneratorFunction::DeleteProperty(JavascriptString *propertyNameString, PropertyOperationFlags flags) { - if (BuiltInPropertyRecords::length.Equals(propertyNameString)) - { - return false; - } - if (BuiltInPropertyRecords::caller.Equals(propertyNameString) || BuiltInPropertyRecords::arguments.Equals(propertyNameString)) { // JavascriptFunction has special case for caller and arguments; call DynamicObject:: virtual directly to skip that. @@ -514,11 +340,6 @@ using namespace Js; BOOL JavascriptGeneratorFunction::IsWritable(PropertyId propertyId) { - if (propertyId == PropertyIds::length) - { - return false; - } - if (propertyId == PropertyIds::caller || propertyId == PropertyIds::arguments) { // JavascriptFunction has special case for caller and arguments; call DynamicObject:: virtual directly to skip that. @@ -530,11 +351,6 @@ using namespace Js; BOOL JavascriptGeneratorFunction::IsEnumerable(PropertyId propertyId) { - if (propertyId == PropertyIds::length) - { - return false; - } - if (propertyId == PropertyIds::caller || propertyId == PropertyIds::arguments) { // JavascriptFunction has special case for caller and arguments; call DynamicObject:: virtual directly to skip that. @@ -595,30 +411,6 @@ using namespace Js; } } - TTD::NSSnapObjects::SnapObjectType JavascriptAsyncFunction::GetSnapTag_TTD() const - { - return TTD::NSSnapObjects::SnapObjectType::SnapAsyncFunction; - } - - void JavascriptAsyncFunction::ExtractSnapObjectDataInto(TTD::NSSnapObjects::SnapObject* objData, TTD::SlabAllocator& alloc) - { - TTD::NSSnapObjects::SnapGeneratorFunctionInfo* fi = nullptr; - uint32 depCount = 0; - TTD_PTR_ID* depArray = nullptr; - - this->CreateSnapObjectInfo(alloc, &fi, &depArray, &depCount); - - if (depCount == 0) - { - TTD::NSSnapObjects::StdExtractSetKindSpecificInfo(objData, fi); - } - else - { - TTDAssert(depArray != nullptr, "depArray should be non-null if depCount is > 0"); - TTD::NSSnapObjects::StdExtractSetKindSpecificInfo(objData, fi, alloc, depCount, depArray); - } - } - void GeneratorVirtualScriptFunction::MarkVisitKindSpecificPtrs(TTD::SnapshotExtractor* extractor) { this->ScriptFunction::MarkVisitKindSpecificPtrs(extractor); @@ -639,4 +431,3 @@ using namespace Js; TTD::NSSnapObjects::StdExtractSetKindSpecificInfo(objData, fi); } #endif - diff --git a/lib/Runtime/Library/JavascriptGeneratorFunction.h b/lib/Runtime/Library/JavascriptGeneratorFunction.h index f76b3b87f7b..1f1a6affa4f 100644 --- a/lib/Runtime/Library/JavascriptGeneratorFunction.h +++ b/lib/Runtime/Library/JavascriptGeneratorFunction.h @@ -14,9 +14,6 @@ namespace Js static FunctionInfo functionInfo; Field(GeneratorVirtualScriptFunction*) scriptFunction; - bool GetPropertyBuiltIns(Var originalInstance, PropertyId propertyId, Var* value, PropertyValueInfo* info, ScriptContext* requestContext, BOOL* result); - bool SetPropertyBuiltIns(PropertyId propertyId, Var value, PropertyOperationFlags flags, PropertyValueInfo* info, BOOL* result); - protected: DEFINE_VTABLE_CTOR(JavascriptGeneratorFunction, ScriptFunctionBase); DEFINE_MARSHAL_OBJECT_TO_SCRIPT_CONTEXT(JavascriptGeneratorFunction); @@ -30,19 +27,18 @@ namespace Js virtual JavascriptString* GetDisplayNameImpl() const override; GeneratorVirtualScriptFunction* GetGeneratorVirtualScriptFunction() { return scriptFunction; } - static JavascriptGeneratorFunction* FromVar(Var var); - static JavascriptGeneratorFunction* UnsafeFromVar(Var var); - static bool Is(Var var); + // Returns whether this function is exactly a JavascriptGeneratorFunction, not a JavascriptAsyncFunction + static bool IsBaseGeneratorFunction(RecyclableObject* obj); inline static bool Test(JavascriptFunction *obj) { return VirtualTableInfo::HasVirtualTable(obj) || VirtualTableInfo>::HasVirtualTable(obj); } + static JavascriptGeneratorFunction* New(ScriptContext* scriptContext, GeneratorVirtualScriptFunction* scriptFunction); static JavascriptGeneratorFunction* OP_NewScGenFunc(FrameDisplay* environment, FunctionInfoPtrPtr infoRef); static JavascriptGeneratorFunction* OP_NewScGenFuncHomeObj(FrameDisplay* environment, FunctionInfoPtrPtr infoRef, Var homeObj); static Var EntryGeneratorFunctionImplementation(RecyclableObject* function, CallInfo callInfo, ...); - static Var EntryAsyncFunctionImplementation(RecyclableObject* function, CallInfo callInfo, ...); static DWORD GetOffsetOfScriptFunction() { return offsetof(JavascriptGeneratorFunction, scriptFunction); } void SetScriptFunction(GeneratorVirtualScriptFunction* scriptFunction) { @@ -65,7 +61,6 @@ namespace Js virtual BOOL SetProperty(PropertyId propertyId, Var value, PropertyOperationFlags flags, PropertyValueInfo* info) override; virtual BOOL SetProperty(JavascriptString* propertyNameString, Var value, PropertyOperationFlags flags, PropertyValueInfo* info) override; - virtual BOOL SetAccessors(PropertyId propertyId, Var getter, Var setter, PropertyOperationFlags flags = PropertyOperation_None) override; _Check_return_ _Success_(return) virtual BOOL GetAccessors(PropertyId propertyId, _Outptr_result_maybenull_ Var* getter, _Outptr_result_maybenull_ Var* setter, ScriptContext* requestContext) override; virtual DescriptorFlags GetSetter(PropertyId propertyId, Var *setterValue, PropertyValueInfo* info, ScriptContext* requestContext) override; virtual DescriptorFlags GetSetter(JavascriptString* propertyNameString, Var *setterValue, PropertyValueInfo* info, ScriptContext* requestContext) override; @@ -101,43 +96,7 @@ namespace Js } }; - class JavascriptAsyncFunction : public JavascriptGeneratorFunction - { - private: - static FunctionInfo functionInfo; - - DEFINE_VTABLE_CTOR(JavascriptAsyncFunction, JavascriptGeneratorFunction); - DEFINE_MARSHAL_OBJECT_TO_SCRIPT_CONTEXT(JavascriptAsyncFunction); - - protected: - JavascriptAsyncFunction(DynamicType* type); - - public: - JavascriptAsyncFunction(DynamicType* type, GeneratorVirtualScriptFunction* scriptFunction); - - static JavascriptAsyncFunction* New(ScriptContext* scriptContext, GeneratorVirtualScriptFunction* scriptFunction); - static DWORD GetOffsetOfScriptFunction() { return JavascriptGeneratorFunction::GetOffsetOfScriptFunction(); } - - static JavascriptAsyncFunction* FromVar(Var var); - static JavascriptAsyncFunction* UnsafeFromVar(Var var); - static bool Is(Var var); - inline static bool Test(JavascriptFunction *obj) - { - return VirtualTableInfo::HasVirtualTable(obj) - || VirtualTableInfo>::HasVirtualTable(obj); - } - -#if ENABLE_TTD - virtual TTD::NSSnapObjects::SnapObjectType GetSnapTag_TTD() const override; - virtual void ExtractSnapObjectDataInto(TTD::NSSnapObjects::SnapObject* objData, TTD::SlabAllocator& alloc) override; -#endif - - public: - virtual VTableValue DummyVirtualFunctionToHinderLinkerICF() - { - return VTableValue::VtableJavascriptAsyncFunction; - } - }; + template <> bool VarIsImpl(RecyclableObject* obj); class GeneratorVirtualScriptFunction : public ScriptFunction { @@ -149,7 +108,7 @@ namespace Js protected: DEFINE_VTABLE_CTOR(GeneratorVirtualScriptFunction, ScriptFunction); - + public: GeneratorVirtualScriptFunction(FunctionProxy* proxy, ScriptFunctionType* deferredPrototypeType) : ScriptFunction(proxy, deferredPrototypeType) { } @@ -163,6 +122,11 @@ namespace Js virtual TTD::NSSnapObjects::SnapObjectType GetSnapTag_TTD() const override; virtual void ExtractSnapObjectDataInto(TTD::NSSnapObjects::SnapObject* objData, TTD::SlabAllocator& alloc) override; #endif + + virtual VTableValue DummyVirtualFunctionToHinderLinkerICF() + { + return VTableValue::VtableJavascriptGeneratorFunction; + } }; typedef FunctionWithComputedName GeneratorVirtualScriptFunctionWithComputedName; diff --git a/lib/Runtime/Library/JavascriptLibrary.cpp b/lib/Runtime/Library/JavascriptLibrary.cpp index d7445f8dbb7..3e586fa9931 100644 --- a/lib/Runtime/Library/JavascriptLibrary.cpp +++ b/lib/Runtime/Library/JavascriptLibrary.cpp @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft Corporation and contributors. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- @@ -44,6 +45,32 @@ namespace Js SimplePropertyDescriptor(NO_WRITE_BARRIER_TAG(BuiltInPropertyRecords::name), PropertyConfigurable) }; + SimplePropertyDescriptor const JavascriptLibrary::FunctionWithPrototypeLengthAndNameTypeDescriptors[3] = + { + SimplePropertyDescriptor(NO_WRITE_BARRIER_TAG(BuiltInPropertyRecords::prototype), PropertyWritable), + SimplePropertyDescriptor(NO_WRITE_BARRIER_TAG(BuiltInPropertyRecords::length), PropertyConfigurable), + SimplePropertyDescriptor(NO_WRITE_BARRIER_TAG(BuiltInPropertyRecords::name), PropertyConfigurable) + }; + + SimplePropertyDescriptor const JavascriptLibrary::FunctionWithPrototypeAndLengthTypeDescriptors[2] = + { + SimplePropertyDescriptor(NO_WRITE_BARRIER_TAG(BuiltInPropertyRecords::prototype), PropertyWritable), + SimplePropertyDescriptor(NO_WRITE_BARRIER_TAG(BuiltInPropertyRecords::length), PropertyConfigurable) + }; + + SimplePropertyDescriptor const JavascriptLibrary::FunctionWithNonWritablePrototypeAndLengthTypeDescriptors[2] = + { + SimplePropertyDescriptor(NO_WRITE_BARRIER_TAG(BuiltInPropertyRecords::prototype), PropertyNone), + SimplePropertyDescriptor(NO_WRITE_BARRIER_TAG(BuiltInPropertyRecords::length), PropertyConfigurable), + }; + + SimplePropertyDescriptor const JavascriptLibrary::FunctionWithNonWritablePrototypeLengthAndNameTypeDescriptors[3] = + { + SimplePropertyDescriptor(NO_WRITE_BARRIER_TAG(BuiltInPropertyRecords::prototype), PropertyNone), + SimplePropertyDescriptor(NO_WRITE_BARRIER_TAG(BuiltInPropertyRecords::length), PropertyConfigurable), + SimplePropertyDescriptor(NO_WRITE_BARRIER_TAG(BuiltInPropertyRecords::name), PropertyConfigurable) + }; + SimplePropertyDescriptor const JavascriptLibrary::ModuleNamespaceTypeDescriptors[1] = { SimplePropertyDescriptor(NO_WRITE_BARRIER_TAG(BuiltInPropertyRecords::_symbolToStringTag), PropertyNone) @@ -57,10 +84,13 @@ namespace Js SimpleTypeHandler<1> JavascriptLibrary::SharedFunctionWithConfigurableLengthTypeHandler(NO_WRITE_BARRIER_TAG(BuiltInPropertyRecords::length), PropertyConfigurable); SimpleTypeHandler<1> JavascriptLibrary::SharedFunctionWithLengthTypeHandler(NO_WRITE_BARRIER_TAG(BuiltInPropertyRecords::length)); SimpleTypeHandler<2> JavascriptLibrary::SharedFunctionWithLengthAndNameTypeHandler(NO_WRITE_BARRIER_TAG(FunctionWithLengthAndNameTypeDescriptors)); + SimpleTypeHandler<3> JavascriptLibrary::SharedFunctionWithPrototypeLengthAndNameTypeHandler(NO_WRITE_BARRIER_TAG(FunctionWithPrototypeLengthAndNameTypeDescriptors)); + SimpleTypeHandler<2> JavascriptLibrary::SharedFunctionWithPrototypeAndLengthTypeHandler(NO_WRITE_BARRIER_TAG(FunctionWithPrototypeAndLengthTypeDescriptors)); SimpleTypeHandler<1> JavascriptLibrary::SharedNamespaceSymbolTypeHandler(NO_WRITE_BARRIER_TAG(ModuleNamespaceTypeDescriptors), PropertyTypesHasSpecialProperties); + SimpleTypeHandler<2> JavascriptLibrary::SharedFunctionWithNonWritablePrototypeAndLengthTypeHandler(NO_WRITE_BARRIER_TAG(FunctionWithNonWritablePrototypeAndLengthTypeDescriptors)); + SimpleTypeHandler<3> JavascriptLibrary::SharedFunctionWithNonWritablePrototypeLengthAndNameTypeHandler(NO_WRITE_BARRIER_TAG(FunctionWithNonWritablePrototypeLengthAndNameTypeDescriptors)); MissingPropertyTypeHandler JavascriptLibrary::MissingPropertyHolderTypeHandler; - SimplePropertyDescriptor const JavascriptLibrary::HeapArgumentsPropertyDescriptors[3] = { SimplePropertyDescriptor(NO_WRITE_BARRIER_TAG(BuiltInPropertyRecords::length), PropertyConfigurable | PropertyWritable), @@ -74,6 +104,11 @@ namespace Js SimplePropertyDescriptor(NO_WRITE_BARRIER_TAG(BuiltInPropertyRecords::length), PropertyConfigurable) }; + SimplePropertyDescriptor const JavascriptLibrary::ClassPrototypePropertyDescriptors[1] = + { + SimplePropertyDescriptor(NO_WRITE_BARRIER_TAG(BuiltInPropertyRecords::constructor), PropertyConfigurable | PropertyWritable) + }; + void JavascriptLibrary::Initialize(ScriptContext* scriptContext, GlobalObject * globalObject) { PROBE_STACK(scriptContext, Js::Constants::MinStackDefault); @@ -113,6 +148,17 @@ namespace Js void JavascriptLibrary::Uninitialize() { +#if DBG + if (moduleRecordList != nullptr) + { + // This should mostly be a no-op except for error cases where we may not have had a chance to cleaup a module record yet. + // Do this only in debug builds to avoid reporting of a memory leak. In release builds this doesn't matter as we will cleanup anyways. + for (int index = 0; index < moduleRecordList->Count(); index++) + { + moduleRecordList->Item(index)->ReleaseParserResources(); + } + } +#endif this->globalObject = nullptr; } @@ -226,6 +272,14 @@ namespace Js DeferredTypeHandler::GetDefaultInstance()); numberPrototype = RecyclerNew(recycler, JavascriptNumberObject, TaggedInt::ToVarUnchecked(0), tempDynamicType); + bigintPrototype = nullptr; + if (scriptContext->GetConfig()->IsESBigIntEnabled()) + { + tempDynamicType = DynamicType::New(scriptContext, TypeIds_BigIntObject, objectPrototype, nullptr, + DeferredTypeHandler::GetDefaultInstance()); + bigintPrototype = RecyclerNew(recycler, JavascriptBigIntObject, nullptr, tempDynamicType); + } + tempDynamicType = DynamicType::New(scriptContext, TypeIds_StringObject, objectPrototype, nullptr, DeferredTypeHandler::GetDefaultInstance()); stringPrototype = RecyclerNew(recycler, JavascriptStringObject, nullptr, tempDynamicType); @@ -277,6 +331,7 @@ namespace Js INIT_ERROR_PROTO(syntaxErrorPrototype, InitializeSyntaxErrorPrototype); INIT_ERROR_PROTO(typeErrorPrototype, InitializeTypeErrorPrototype); INIT_ERROR_PROTO(uriErrorPrototype, InitializeURIErrorPrototype); + INIT_ERROR_PROTO(aggregateErrorPrototype, InitializeAggregateErrorPrototype); #ifdef ENABLE_WASM if (CONFIG_FLAG(Wasm) && PHASE_ENABLED1(WasmPhase)) @@ -297,6 +352,8 @@ namespace Js generatorFunctionPrototype = nullptr; generatorPrototype = nullptr; asyncFunctionPrototype = nullptr; + asyncGeneratorPrototype = nullptr; + asyncGeneratorFunctionPrototype = nullptr; symbolPrototype = DynamicObject::New(recycler, DynamicType::New(scriptContext, TypeIds_Object, objectPrototype, nullptr, @@ -318,6 +375,13 @@ namespace Js DynamicType::New(scriptContext, TypeIds_Object, objectPrototype, nullptr, DeferredTypeHandler::GetDefaultInstance())); + if (scriptContext->GetConfig()->IsES2018AsyncIterationEnabled()) + { + asyncIteratorPrototype = DynamicObject::New(recycler, + DynamicType::New(scriptContext, TypeIds_Object, objectPrototype, nullptr, + DeferredTypeHandler::GetDefaultInstance())); + } + iteratorPrototype = DynamicObject::New(recycler, DynamicType::New(scriptContext, TypeIds_Object, objectPrototype, nullptr, DeferredTypeHandler::GetDefaultInstance())); @@ -361,12 +425,9 @@ namespace Js } #endif - if(scriptContext->GetConfig()->IsES6PromiseEnabled()) - { - promisePrototype = DynamicObject::New(recycler, - DynamicType::New(scriptContext, TypeIds_Object, objectPrototype, nullptr, - DeferredTypeHandler::GetDefaultInstance())); - } + promisePrototype = DynamicObject::New(recycler, + DynamicType::New(scriptContext, TypeIds_Object, objectPrototype, nullptr, + DeferredTypeHandler::GetDefaultInstance())); if(scriptContext->GetConfig()->IsES6GeneratorsEnabled()) { @@ -385,6 +446,21 @@ namespace Js DynamicType::New(scriptContext, TypeIds_Object, functionPrototype, nullptr, DeferredTypeHandler::GetDefaultInstance())); } + + if (scriptContext->GetConfig()->IsES2018AsyncIterationEnabled()) + { + asyncGeneratorFunctionPrototype = DynamicObject::New(recycler, + DynamicType::New(scriptContext, TypeIds_Object, functionPrototype, nullptr, + DeferredTypeHandler::GetDefaultInstance())); + + asyncGeneratorPrototype = DynamicObject::New(recycler, + DynamicType::New(scriptContext, TypeIds_Object, asyncIteratorPrototype, nullptr, + DeferredTypeHandler::GetDefaultInstance())); + + asyncFromSyncIteratorProtototype = DynamicObject::New(recycler, + DynamicType::New(scriptContext, TypeIds_Object, asyncIteratorPrototype, nullptr, + DeferredTypeHandler::GetDefaultInstance())); + } } void JavascriptLibrary::InitializeTypes() @@ -398,6 +474,14 @@ namespace Js heapArgumentsType = DynamicType::New(scriptContext, TypeIds_Arguments, objectPrototype, nullptr, SimpleDictionaryTypeHandler::New(scriptContext, HeapArgumentsPropertyDescriptors, _countof(HeapArgumentsPropertyDescriptors), 0, 0, true, true), true, true); + classPrototypeTypeHandler = +#if ENABLE_FIXED_FIELDS + SimpleDictionaryTypeHandler::NewInitialized +#else + SimpleDictionaryTypeHandler::New +#endif + (scriptContext, ClassPrototypePropertyDescriptors, _countof(ClassPrototypePropertyDescriptors), 0, 0, true, true); + TypePath *const strictHeapArgumentsTypePath = TypePath::New(recycler); strictHeapArgumentsTypePath->Add(BuiltInPropertyRecords::callee); strictHeapArgumentsTypePath->Add(BuiltInPropertyRecords::callee); @@ -483,6 +567,7 @@ namespace Js INIT_SIMPLE_TYPE(syntaxErrorType, TypeIds_Error, syntaxErrorPrototype); INIT_SIMPLE_TYPE(typeErrorType, TypeIds_Error, typeErrorPrototype); INIT_SIMPLE_TYPE(uriErrorType, TypeIds_Error, uriErrorPrototype); + INIT_SIMPLE_TYPE(aggregateErrorType, TypeIds_Error, aggregateErrorPrototype); #ifdef ENABLE_WASM if (CONFIG_FLAG(Wasm) && PHASE_ENABLED1(WasmPhase)) @@ -500,6 +585,12 @@ namespace Js promiseType = nullptr; moduleNamespaceType = nullptr; + if (config->IsESBigIntEnabled()) + { + bigintTypeStatic = StaticType::New(scriptContext, TypeIds_BigInt, bigintPrototype, nullptr); + bigintTypeDynamic = DynamicType::New(scriptContext, TypeIds_BigIntObject, bigintPrototype, nullptr, NullTypeHandler::GetDefaultInstance(), true, true); + } + // Initialize boolean types booleanTypeStatic = StaticType::New(scriptContext, TypeIds_Boolean, booleanPrototype, nullptr); booleanTypeDynamic = DynamicType::New(scriptContext, TypeIds_BooleanObject, booleanPrototype, nullptr, NullTypeHandler::GetDefaultInstance(), true, true); @@ -508,10 +599,7 @@ namespace Js symbolTypeStatic = StaticType::New(scriptContext, TypeIds_Symbol, symbolPrototype, nullptr); symbolTypeDynamic = DynamicType::New(scriptContext, TypeIds_SymbolObject, symbolPrototype, nullptr, NullTypeHandler::GetDefaultInstance(), true, true); - if (config->IsES6UnscopablesEnabled()) - { - withType = StaticType::New(scriptContext, TypeIds_UnscopablesWrapperObject, GetNull(), nullptr); - } + withType = StaticType::New(scriptContext, TypeIds_UnscopablesWrapperObject, GetNull(), nullptr); if (config->IsES6SpreadEnabled()) { @@ -526,10 +614,7 @@ namespace Js proxyType = DynamicType::New(scriptContext, TypeIds_Proxy, GetNull(), nullptr, NullTypeHandler::GetDefaultInstance(), true, true); } - if (config->IsES6PromiseEnabled()) - { - promiseType = DynamicType::New(scriptContext, TypeIds_Promise, promisePrototype, nullptr, NullTypeHandler::GetDefaultInstance(), true, true); - } + promiseType = DynamicType::New(scriptContext, TypeIds_Promise, promisePrototype, nullptr, NullTypeHandler::GetDefaultInstance(), true, true); if (config->IsES6ModuleEnabled()) { @@ -540,19 +625,20 @@ namespace Js // Initialize Date types dateType = DynamicType::New(scriptContext, TypeIds_Date, datePrototype, nullptr, PathTypeHandlerNoAttr::New(scriptContext, this->GetRootPath(), 0, 0, 0, true, true), true, true); - variantDateType = StaticType::New(scriptContext, TypeIds_VariantDate, nullValue, nullptr); - - anonymousFunctionTypeHandler = NullTypeHandler::GetDefaultInstance(); - anonymousFunctionWithPrototypeTypeHandler = &SharedFunctionWithPrototypeTypeHandlerV11; // Initialize function types + anonymousFunctionTypeHandler = &SharedFunctionWithConfigurableLengthTypeHandler; + anonymousFunctionWithPrototypeTypeHandler = &SharedFunctionWithPrototypeAndLengthTypeHandler; + functionTypeHandler = &SharedFunctionWithoutPrototypeTypeHandler; + functionTypeHandlerWithLength = &SharedFunctionWithLengthAndNameTypeHandler; + functionWithPrototypeAndLengthTypeHandler = &SharedFunctionWithPrototypeLengthAndNameTypeHandler; functionWithPrototypeTypeHandler = &SharedFunctionWithPrototypeTypeHandler; functionWithPrototypeTypeHandler->SetHasKnownSlot0(); externalFunctionWithDeferredPrototypeType = CreateDeferredPrototypeFunctionTypeNoProfileThunk(JavascriptExternalFunction::ExternalFunctionThunk, true /*isShared*/); - externalFunctionWithLengthAndDeferredPrototypeType = CreateDeferredPrototypeFunctionTypeNoProfileThunk(JavascriptExternalFunction::ExternalFunctionThunk, true /*isShared*/, /* isLengthAvailable */ true); + externalFunctionWithLengthAndDeferredPrototypeType = CreateDeferredLengthPrototypeFunctionTypeNoProfileThunk(JavascriptExternalFunction::ExternalFunctionThunk, true /*isShared*/); wrappedFunctionWithDeferredPrototypeType = CreateDeferredPrototypeFunctionTypeNoProfileThunk(JavascriptExternalFunction::WrappedFunctionThunk, true /*isShared*/); stdCallFunctionWithDeferredPrototypeType = CreateDeferredPrototypeFunctionTypeNoProfileThunk(JavascriptExternalFunction::StdCallExternalFunctionThunk, true /*isShared*/); idMappedFunctionWithPrototypeType = DynamicType::New(scriptContext, TypeIds_Function, functionPrototype, JavascriptExternalFunction::ExternalFunctionThunk, @@ -563,7 +649,9 @@ namespace Js Js::DeferredTypeHandler::GetDefaultInstance(), true, true); boundFunctionType = DynamicType::New(scriptContext, TypeIds_Function, functionPrototype, BoundFunction::NewInstance, - GetDeferredFunctionTypeHandler(), true, true); + GetDeferredFunctionWithLengthUnsetTypeHandler(), true, true); + crossSiteDeferredFunctionType = CreateDeferredFunctionTypeNoProfileThunk( + scriptContext->CurrentCrossSiteThunk, true /*isShared*/); crossSiteDeferredPrototypeFunctionType = CreateDeferredPrototypeFunctionTypeNoProfileThunk( scriptContext->CurrentCrossSiteThunk, true /*isShared*/); crossSiteIdMappedFunctionWithPrototypeType = DynamicType::New(scriptContext, TypeIds_Function, functionPrototype, scriptContext->CurrentCrossSiteThunk, @@ -652,6 +740,51 @@ namespace Js iteratorResultType = DynamicType::New(scriptContext, TypeIds_Object, objectPrototype, nullptr, PathTypeHandlerNoAttr::New(scriptContext, iteratorResultPath, iteratorResultPath->GetPathLength(), 2, sizeof(DynamicObject), true, true), true, true); + // Create await object type + auto* awaitObjectPath = TypePath::New(recycler); + awaitObjectPath->Add(BuiltInPropertyRecords::value); + + auto* awaitObjectHandler = PathTypeHandlerNoAttr::New( + scriptContext, + awaitObjectPath, + awaitObjectPath->GetPathLength(), + 1, + sizeof(DynamicObject), + true, + true); + + awaitObjectType = DynamicType::New( + scriptContext, + TypeIds_AwaitObject, + objectPrototype, + nullptr, + awaitObjectHandler, + true, + true); + + // Create yield resume object type + auto* resumeObjectPath = TypePath::New(recycler); + resumeObjectPath->Add(BuiltInPropertyRecords::value); + resumeObjectPath->Add(BuiltInPropertyRecords::kind); + + auto* resumeObjectHandler = PathTypeHandlerNoAttr::New( + scriptContext, + resumeObjectPath, + resumeObjectPath->GetPathLength(), + 2, + sizeof(DynamicObject), + true, + true); + + resumeYieldObjectType = DynamicType::New( + scriptContext, + TypeIds_Object, + objectPrototype, + nullptr, + resumeObjectHandler, + true, + true); + arrayIteratorType = DynamicType::New(scriptContext, TypeIds_ArrayIterator, arrayIteratorPrototype, nullptr, PathTypeHandlerNoAttr::New(scriptContext, this->GetRootPath(), 0, 0, 0, true, true), true, true); mapIteratorType = DynamicType::New(scriptContext, TypeIds_MapIterator, mapIteratorPrototype, nullptr, @@ -671,6 +804,14 @@ namespace Js generatorConstructorPrototypeObjectType->SetHasNoEnumerableProperties(true); } + if (config->IsES2018AsyncIterationEnabled()) + { + asyncGeneratorConstructorPrototypeObjectType = DynamicType::New(scriptContext, TypeIds_Object, asyncGeneratorPrototype, nullptr, + NullTypeHandler::GetDefaultInstance(), true, true); + + asyncGeneratorConstructorPrototypeObjectType->SetHasNoEnumerableProperties(true); + } + #ifdef ENABLE_DEBUG_CONFIG_OPTIONS debugDisposableObjectType = DynamicType::New(scriptContext, TypeIds_Object, objectPrototype, nullptr, PathTypeHandlerNoAttr::New(scriptContext, this->GetRootPath(), 0, 0, 0, true, true), true, true); @@ -682,13 +823,24 @@ namespace Js bool JavascriptLibrary::InitializeGeneratorFunction(DynamicObject *instance, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode) { - JavascriptGeneratorFunction *function = JavascriptGeneratorFunction::FromVar(instance); + JavascriptGeneratorFunction *function = VarTo(instance); bool isAnonymousFunction = function->IsAnonymousFunction(); JavascriptLibrary* javascriptLibrary = function->GetType()->GetLibrary(); - typeHandler->ConvertFunction(function, isAnonymousFunction ? javascriptLibrary->anonymousFunctionWithPrototypeTypeHandler : javascriptLibrary->functionWithPrototypeTypeHandler); + typeHandler->ConvertFunction(function, isAnonymousFunction ? javascriptLibrary->anonymousFunctionWithPrototypeTypeHandler : javascriptLibrary->functionWithPrototypeAndLengthTypeHandler); function->SetPropertyWithAttributes(PropertyIds::prototype, javascriptLibrary->CreateGeneratorConstructorPrototypeObject(), PropertyWritable, nullptr); + Var varLength; + GeneratorVirtualScriptFunction* scriptFunction = function->GetGeneratorVirtualScriptFunction(); + if (!scriptFunction->GetProperty(scriptFunction, PropertyIds::length, &varLength, nullptr, scriptFunction->GetScriptContext())) + { + // TODO - remove this if or convert it to a FailFast if this assert never triggers + // Nothing in the ChakraCore CI will reach this code + AssertMsg(false, "Initializing Generator function without a length property - why isn't there a length?."); + varLength = TaggedInt::ToVarUnchecked(0); + } + function->SetPropertyWithAttributes(PropertyIds::length, varLength, PropertyConfigurable, nullptr, PropertyOperation_None, SideEffects_None); + if (!isAnonymousFunction) { JavascriptString * functionName = nullptr; @@ -700,18 +852,65 @@ namespace Js return true; } + bool JavascriptLibrary::InitializeAsyncGeneratorFunction(DynamicObject *instance, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode) + { + JavascriptGeneratorFunction *function = VarTo(instance); + bool isAnonymousFunction = function->IsAnonymousFunction(); + + JavascriptLibrary* javascriptLibrary = function->GetType()->GetLibrary(); + typeHandler->ConvertFunction(function, isAnonymousFunction ? javascriptLibrary->anonymousFunctionWithPrototypeTypeHandler : javascriptLibrary->functionWithPrototypeAndLengthTypeHandler); + function->SetPropertyWithAttributes(PropertyIds::prototype, javascriptLibrary->CreateAsyncGeneratorConstructorPrototypeObject(), PropertyWritable, nullptr); + + Var varLength; + GeneratorVirtualScriptFunction* scriptFunction = function->GetGeneratorVirtualScriptFunction(); + if (!scriptFunction->GetProperty(scriptFunction, PropertyIds::length, &varLength, nullptr, scriptFunction->GetScriptContext())) + { + // TODO - remove this if or convert it to a FailFast if this assert never triggers + // Nothing in the ChakraCore CI will reach this code + AssertMsg(false, "Initializing Async Generator function without a length property - why isn't there a length?."); + varLength = TaggedInt::ToVarUnchecked(0); + } + function->SetPropertyWithAttributes(PropertyIds::length, varLength, PropertyConfigurable, nullptr, PropertyOperation_None, SideEffects_None); + + if (!isAnonymousFunction) + { + JavascriptString * functionName = nullptr; + DebugOnly(bool status = ) ((Js::JavascriptFunction*)scriptFunction)->GetFunctionName(&functionName); + Assert(status); + function->SetPropertyWithAttributes(PropertyIds::name,functionName, PropertyConfigurable, nullptr); + } + + return true; + } + bool JavascriptLibrary::InitializeAsyncFunction(DynamicObject *function, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode) { // Async function instances do not have a prototype property as they are not constructable - typeHandler->Convert(function, mode, 1); + JavascriptAsyncFunction* asyncFunction = VarTo(function); - if (!JavascriptAsyncFunction::FromVar(function)->IsAnonymousFunction()) + if (!asyncFunction->IsAnonymousFunction()) { + typeHandler->Convert(function, mode, 2); JavascriptString * functionName = nullptr; DebugOnly(bool status = ) ((Js::JavascriptFunction*)function)->GetFunctionName(&functionName); Assert(status); function->SetPropertyWithAttributes(PropertyIds::name, functionName, PropertyConfigurable, nullptr); } + else + { + typeHandler->Convert(function, mode, 1); + } + + Var varLength; + GeneratorVirtualScriptFunction* scriptFunction = asyncFunction->GetGeneratorVirtualScriptFunction(); + if (!scriptFunction->GetProperty(scriptFunction, PropertyIds::length, &varLength, nullptr, scriptFunction->GetScriptContext())) + { + // TODO - remove this if or convert it to a FailFast if this assert never triggers + // Nothing in the ChakraCore CI will reach this code + AssertMsg(false, "Initializing Async function without a length property - why isn't there a length?."); + varLength = TaggedInt::ToVarUnchecked(0); + } + function->SetPropertyWithAttributes(PropertyIds::length, varLength, PropertyConfigurable, nullptr, PropertyOperation_None, SideEffects_None); return true; } @@ -724,27 +923,40 @@ namespace Js JavascriptArray::EnsureCalculationOfAllocationBuckets(); } - template + template bool JavascriptLibrary::InitializeFunction(DynamicObject *instance, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode) { - JavascriptFunction * function = JavascriptFunction::FromVar(instance); + JavascriptFunction * function = VarTo(instance); JavascriptLibrary* javascriptLibrary = function->GetType()->GetLibrary(); ScriptFunction *scriptFunction = nullptr; bool useAnonymous = false; - if (ScriptFunction::Is(function)) + if (VarIs(function)) { - scriptFunction = Js::ScriptFunction::FromVar(function); + scriptFunction = Js::VarTo(function); useAnonymous = scriptFunction->IsAnonymousFunction(); } if (!addPrototype) { - Assert(!useAnonymous); - typeHandler->ConvertFunction(function, javascriptLibrary->functionTypeHandler); + if (!useAnonymous && addName) + { + typeHandler->ConvertFunction(function, useLengthType ? javascriptLibrary->functionTypeHandlerWithLength : javascriptLibrary->functionTypeHandler); + } + else + { + typeHandler->ConvertFunction(function, javascriptLibrary->anonymousFunctionTypeHandler); + } } else { - typeHandler->ConvertFunction(function, useAnonymous ? javascriptLibrary->anonymousFunctionWithPrototypeTypeHandler : javascriptLibrary->functionWithPrototypeTypeHandler); + if (useAnonymous) + { + typeHandler->ConvertFunction(function, javascriptLibrary->anonymousFunctionWithPrototypeTypeHandler); + } + else + { + typeHandler->ConvertFunction(function, useLengthType ? javascriptLibrary->functionWithPrototypeAndLengthTypeHandler : javascriptLibrary->functionWithPrototypeTypeHandler); + } DynamicObject *protoObject = javascriptLibrary->CreateConstructorPrototypeObject(function); if (scriptFunction && scriptFunction->GetFunctionInfo()->IsClassConstructor()) { @@ -756,14 +968,29 @@ namespace Js } } - if(scriptFunction && (useAnonymous || scriptFunction->GetFunctionProxy()->EnsureDeserialized()->GetIsStaticNameFunction())) + if (scriptFunction) { - return true; + ParseableFunctionInfo * funcInfo = scriptFunction->GetFunctionProxy()->EnsureDeserialized(); + + CompileAssert(!addLength || useLengthType); + if (addLength) + { + function->SetPropertyWithAttributes(PropertyIds::length, TaggedInt::ToVarUnchecked(funcInfo->GetReportedInParamsCount() - 1), PropertyConfigurable, nullptr, PropertyOperation_None, SideEffects_None); + } + + if (useAnonymous || funcInfo->GetIsStaticNameFunction()) + { + return true; + } } - JavascriptString * functionName = nullptr; - if (((Js::JavascriptFunction*)function)->GetFunctionName(&functionName)) + + if (addName) { - function->SetPropertyWithAttributes(PropertyIds::name, functionName, PropertyConfigurable, nullptr); + JavascriptString * functionName = nullptr; + if (((Js::JavascriptFunction*)function)->GetFunctionName(&functionName)) + { + function->SetPropertyWithAttributes(PropertyIds::name, functionName, PropertyConfigurable, nullptr); + } } return true; @@ -794,6 +1021,9 @@ namespace Js case kjstURIError: return GetURIErrorType(); + case kjstAggregateError: + return GetAggregateErrorType(); + case kjstWebAssemblyCompileError: return GetWebAssemblyCompileErrorType(); @@ -827,23 +1057,29 @@ namespace Js } }; - template + template DynamicTypeHandler * JavascriptLibrary::GetDeferredFunctionTypeHandlerBase() { - return DeferredTypeHandler, InitializeFunctionDeferredTypeHandlerFilter>::GetDefaultInstance(); + return DeferredTypeHandler, InitializeFunctionDeferredTypeHandlerFilter>::GetDefaultInstance(); } template DynamicTypeHandler * JavascriptLibrary::GetDeferredGeneratorFunctionTypeHandlerBase() { - return DeferredTypeHandler>::GetDefaultInstance(); + return DeferredTypeHandler>::GetDefaultInstance(); + } + + template + DynamicTypeHandler * JavascriptLibrary::GetDeferredAsyncGeneratorFunctionTypeHandlerBase() + { + return DeferredTypeHandler>::GetDefaultInstance(); } template DynamicTypeHandler * JavascriptLibrary::GetDeferredAsyncFunctionTypeHandlerBase() { // Async functions do not have the prototype property - return DeferredTypeHandler>::GetDefaultInstance(); + return DeferredTypeHandler>::GetDefaultInstance(); } DynamicTypeHandler * JavascriptLibrary::GetDeferredAnonymousPrototypeGeneratorFunctionTypeHandler() @@ -851,6 +1087,11 @@ namespace Js return JavascriptLibrary::GetDeferredGeneratorFunctionTypeHandlerBase(); } + DynamicTypeHandler * JavascriptLibrary::GetDeferredAnonymousPrototypeAsyncGeneratorFunctionTypeHandler() + { + return JavascriptLibrary::GetDeferredAsyncGeneratorFunctionTypeHandlerBase(); + } + DynamicTypeHandler * JavascriptLibrary::GetDeferredAnonymousPrototypeAsyncFunctionTypeHandler() { return JavascriptLibrary::GetDeferredAsyncFunctionTypeHandlerBase(); @@ -861,14 +1102,19 @@ namespace Js return JavascriptLibrary::GetDeferredGeneratorFunctionTypeHandlerBase(); } + DynamicTypeHandler * JavascriptLibrary::GetDeferredPrototypeAsyncGeneratorFunctionTypeHandler() + { + return JavascriptLibrary::GetDeferredAsyncGeneratorFunctionTypeHandlerBase(); + } + DynamicTypeHandler * JavascriptLibrary::GetDeferredPrototypeAsyncFunctionTypeHandler(ScriptContext* scriptContext) { return JavascriptLibrary::GetDeferredAsyncFunctionTypeHandlerBase(); } - DynamicTypeHandler * JavascriptLibrary::GetDeferredAnonymousPrototypeFunctionTypeHandler() + DynamicTypeHandler * JavascriptLibrary::GetDeferredAnonymousPrototypeFunctionWithLengthTypeHandler() { - return JavascriptLibrary::GetDeferredFunctionTypeHandlerBase(); + return JavascriptLibrary::GetDeferredFunctionTypeHandlerBase(); } DynamicTypeHandler * JavascriptLibrary::GetDeferredPrototypeFunctionTypeHandler(ScriptContext* scriptContext) @@ -876,19 +1122,49 @@ namespace Js return JavascriptLibrary::GetDeferredFunctionTypeHandlerBase(); } + DynamicTypeHandler * JavascriptLibrary::GetDeferredPrototypeFunctionWithNameAndLengthTypeHandler() + { + return JavascriptLibrary::GetDeferredFunctionTypeHandlerBase(); + } + + DynamicTypeHandler * JavascriptLibrary::ClassConstructorTypeHandler() + { + return &SharedFunctionWithNonWritablePrototypeLengthAndNameTypeHandler; + } + + DynamicTypeHandler * JavascriptLibrary::AnonymousClassConstructorTypeHandler() + { + return &SharedFunctionWithNonWritablePrototypeAndLengthTypeHandler; + } + DynamicTypeHandler * JavascriptLibrary::GetDeferredPrototypeFunctionWithLengthTypeHandler(ScriptContext* scriptContext) { return DeferredTypeHandler>::GetDefaultInstance(); } + DynamicTypeHandler * JavascriptLibrary::GetDeferredAnonymousFunctionWithLengthTypeHandler() + { + return JavascriptLibrary::GetDeferredFunctionTypeHandlerBase(); + } + DynamicTypeHandler * JavascriptLibrary::GetDeferredAnonymousFunctionTypeHandler() { - return anonymousFunctionTypeHandler; + return JavascriptLibrary::GetDeferredFunctionTypeHandlerBase(); } DynamicTypeHandler * JavascriptLibrary::GetDeferredFunctionTypeHandler() { - return GetDeferredFunctionTypeHandlerBase(); + return GetDeferredFunctionTypeHandlerBase(); + } + + DynamicTypeHandler * JavascriptLibrary::GetDeferredFunctionWithLengthTypeHandler() + { + return GetDeferredFunctionTypeHandlerBase(); + } + + DynamicTypeHandler * JavascriptLibrary::GetDeferredFunctionWithLengthUnsetTypeHandler() + { + return GetDeferredFunctionTypeHandlerBase(); } DynamicTypeHandler * JavascriptLibrary::ScriptFunctionTypeHandler(bool noPrototypeProperty, bool isAnonymousFunction) @@ -898,14 +1174,14 @@ namespace Js if (noPrototypeProperty) { scriptFunctionTypeHandler = isAnonymousFunction ? - this->GetDeferredAnonymousFunctionTypeHandler() : - this->GetDeferredFunctionTypeHandler(); + this->GetDeferredAnonymousFunctionWithLengthTypeHandler() : + this->GetDeferredFunctionWithLengthTypeHandler(); } else { scriptFunctionTypeHandler = isAnonymousFunction ? - JavascriptLibrary::GetDeferredAnonymousPrototypeFunctionTypeHandler() : - JavascriptLibrary::GetDeferredPrototypeFunctionTypeHandler(scriptContext); + JavascriptLibrary::GetDeferredAnonymousPrototypeFunctionWithLengthTypeHandler() : + JavascriptLibrary::GetDeferredPrototypeFunctionWithNameAndLengthTypeHandler(); } return scriptFunctionTypeHandler; } @@ -916,26 +1192,63 @@ namespace Js isAnonymousFunction ? GetDeferredAnonymousPrototypeGeneratorFunctionTypeHandler() : GetDeferredPrototypeGeneratorFunctionTypeHandler(scriptContext), isShared, isShared); } + DynamicType * JavascriptLibrary::CreateDeferredPrototypeAsyncGeneratorFunctionType(JavascriptMethod entrypoint, bool isAnonymousFunction, bool isShared) + { + return DynamicType::New(scriptContext, TypeIds_Function, asyncGeneratorFunctionPrototype, entrypoint, + isAnonymousFunction ? GetDeferredAnonymousPrototypeAsyncGeneratorFunctionTypeHandler() : GetDeferredPrototypeAsyncGeneratorFunctionTypeHandler(), isShared, isShared); + } + DynamicType * JavascriptLibrary::CreateDeferredPrototypeAsyncFunctionType(JavascriptMethod entrypoint, bool isAnonymousFunction, bool isShared) { return DynamicType::New(scriptContext, TypeIds_Function, asyncFunctionPrototype, entrypoint, isAnonymousFunction ? GetDeferredAnonymousPrototypeAsyncFunctionTypeHandler() : GetDeferredPrototypeAsyncFunctionTypeHandler(scriptContext), isShared, isShared); } + DynamicType * JavascriptLibrary::CreateDeferredFunctionType(JavascriptMethod entrypoint) + { + return CreateDeferredFunctionTypeNoProfileThunk(this->inDispatchProfileMode ? ProfileEntryThunk : entrypoint); + } + DynamicType * JavascriptLibrary::CreateDeferredPrototypeFunctionType(JavascriptMethod entrypoint) { return CreateDeferredPrototypeFunctionTypeNoProfileThunk(this->inDispatchProfileMode ? ProfileEntryThunk : entrypoint); } - DynamicType * JavascriptLibrary::CreateDeferredPrototypeFunctionTypeNoProfileThunk(JavascriptMethod entrypoint, bool isShared, bool isLengthAvailable) + DynamicType * JavascriptLibrary::CreateDeferredFunctionTypeNoProfileThunk(JavascriptMethod entryPoint, bool isShared) + { + return CreateDeferredFunctionTypeNoProfileThunk_Internal(entryPoint, isShared); + } + + DynamicType * JavascriptLibrary::CreateDeferredLengthFunctionTypeNoProfileThunk(JavascriptMethod entryPoint, bool isShared) + { + return CreateDeferredFunctionTypeNoProfileThunk_Internal(entryPoint, isShared); + } + + DynamicType * JavascriptLibrary::CreateDeferredPrototypeFunctionTypeNoProfileThunk(JavascriptMethod entryPoint, bool isShared) + { + return CreateDeferredFunctionTypeNoProfileThunk_Internal(entryPoint, isShared); + } + + DynamicType * JavascriptLibrary::CreateDeferredLengthPrototypeFunctionTypeNoProfileThunk(JavascriptMethod entryPoint, bool isShared) + { + return CreateDeferredFunctionTypeNoProfileThunk_Internal(entryPoint, isShared); + } + + template + DynamicType * JavascriptLibrary::CreateDeferredFunctionTypeNoProfileThunk_Internal(JavascriptMethod entrypoint, bool isShared) { // Note: the lack of TypeHandler switching here based on the isAnonymousFunction flag is intentional. // We can't switch shared typeHandlers and RuntimeFunctions do not produce script code for us to know if a function is Anonymous. // As a result we may have an issue where hasProperty would say you have a name property but getProperty returns undefined - return DynamicType::New(scriptContext, TypeIds_Function, functionPrototype, entrypoint, - isLengthAvailable ? GetDeferredPrototypeFunctionWithLengthTypeHandler(scriptContext) : GetDeferredPrototypeFunctionTypeHandler(scriptContext), - isShared, isShared); + DynamicTypeHandler * typeHandler = + isLengthAvailable ? + (isPrototypeAvailable ? + GetDeferredPrototypeFunctionWithLengthTypeHandler(scriptContext) : GetDeferredFunctionWithLengthTypeHandler()) : + (isPrototypeAvailable ? + GetDeferredPrototypeFunctionTypeHandler(scriptContext) : GetDeferredFunctionTypeHandler()); + return DynamicType::New(scriptContext, TypeIds_Function, functionPrototype, entrypoint, typeHandler, isShared, isShared); } + DynamicType * JavascriptLibrary::CreateFunctionType(JavascriptMethod entrypoint, RecyclableObject* prototype) { if (prototype == nullptr) @@ -1078,9 +1391,13 @@ namespace Js promiseThenFunction = nullptr; generatorNextFunction = nullptr; generatorThrowFunction = nullptr; + asyncGeneratorNextFunction = nullptr; + asyncGeneratorReturnFunction = nullptr; + asyncGeneratorThrowFunction = nullptr; jsonStringifyFunction = nullptr; objectFreezeFunction = nullptr; + symbolAsyncIterator = CreateSymbol(BuiltInPropertyRecords::_symbolAsyncIterator); symbolHasInstance = CreateSymbol(BuiltInPropertyRecords::_symbolHasInstance); symbolIsConcatSpreadable = CreateSymbol(BuiltInPropertyRecords::_symbolIsConcatSpreadable); symbolIterator = CreateSymbol(BuiltInPropertyRecords::_symbolIterator); @@ -1122,14 +1439,12 @@ namespace Js __proto__setterFunction = CreateNonProfiledFunction(&ObjectPrototypeObject::EntryInfo::__proto__setter); __proto__setterFunction->SetPropertyWithAttributes(PropertyIds::length, TaggedInt::ToVarUnchecked(1), PropertyConfigurable, nullptr); - if (scriptContext->GetConfig()->IsES6PromiseEnabled()) - { - identityFunction = CreateNonProfiledFunction(&JavascriptPromise::EntryInfo::Identity); - identityFunction->SetPropertyWithAttributes(PropertyIds::length, TaggedInt::ToVarUnchecked(1), PropertyConfigurable, nullptr); - throwerFunction = CreateNonProfiledFunction(&JavascriptPromise::EntryInfo::Thrower); - throwerFunction->SetPropertyWithAttributes(PropertyIds::length, TaggedInt::ToVarUnchecked(1), PropertyConfigurable, nullptr); - } + identityFunction = CreateNonProfiledFunction(&JavascriptPromise::EntryInfo::Identity); + identityFunction->SetPropertyWithAttributes(PropertyIds::length, TaggedInt::ToVarUnchecked(1), PropertyConfigurable, nullptr); + + throwerFunction = CreateNonProfiledFunction(&JavascriptPromise::EntryInfo::Thrower); + throwerFunction->SetPropertyWithAttributes(PropertyIds::length, TaggedInt::ToVarUnchecked(1), PropertyConfigurable, nullptr); booleanTrue = RecyclerNew(recycler, JavascriptBoolean, true, booleanTypeStatic); booleanFalse = RecyclerNew(recycler, JavascriptBoolean, false, booleanTypeStatic); @@ -1138,9 +1453,18 @@ namespace Js randSeed0 = 0; randSeed1 = 0; + if (globalObject->GetScriptContext()->GetConfig()->IsESGlobalThisEnabled()) + { + AddMember(globalObject, PropertyIds::globalThis, globalObject->ToThis(), PropertyConfigurable | PropertyWritable); + } AddMember(globalObject, PropertyIds::NaN, nan, PropertyNone); AddMember(globalObject, PropertyIds::Infinity, positiveInfinite, PropertyNone); AddMember(globalObject, PropertyIds::undefined, undefinedValue, PropertyNone); + // Note: for global object, we need to set toStringTag to global like other engines (v8) + if (globalObject->GetScriptContext()->GetConfig()->IsES6ToStringTagEnabled()) + { + AddMember(globalObject, PropertyIds::_symbolToStringTag, scriptContext->GetPropertyString(PropertyIds::global), PropertyConfigurable | PropertyWritable | PropertyEnumerable); + } // Note: Any global function added/removed/changed here should also be updated in JavascriptLibrary::ProfilerRegisterBuiltinFunctions // so that the new functions show up in the profiler too. @@ -1159,15 +1483,7 @@ namespace Js AddFunctionToLibraryObject(globalObject, PropertyIds::escape, &GlobalObject::EntryInfo::Escape, 1); AddFunctionToLibraryObject(globalObject, PropertyIds::unescape, &GlobalObject::EntryInfo::UnEscape, 1); -// for backward compat reasons in non-core builds add CollectGarbage function even if it would do nothing later -#ifdef _CHAKRACOREBUILD - if (scriptContext->GetConfig()->IsCollectGarbageEnabled() -#ifdef ENABLE_PROJECTION - || scriptContext->GetConfig()->GetHostType() == HostType::HostTypeApplication - || scriptContext->GetConfig()->GetHostType() == HostType::HostTypeWebview -#endif - ) -#endif + if (scriptContext->GetConfig()->IsCollectGarbageEnabled()) { AddFunctionToLibraryObject(globalObject, PropertyIds::CollectGarbage, &GlobalObject::EntryInfo::CollectGarbage, 0); } @@ -1238,12 +1554,9 @@ namespace Js AddMember(globalObject, PropertyIds::Reflect, reflectObject); } - if (scriptContext->GetConfig()->IsES6PromiseEnabled()) - { - promiseConstructor = CreateBuiltinConstructor(&JavascriptPromise::EntryInfo::NewInstance, - DeferredTypeHandler::GetDefaultInstance()); - AddFunction(globalObject, PropertyIds::Promise, promiseConstructor); - } + promiseConstructor = CreateBuiltinConstructor(&JavascriptPromise::EntryInfo::NewInstance, + DeferredTypeHandler::GetDefaultInstance()); + AddFunction(globalObject, PropertyIds::Promise, promiseConstructor); dateConstructor = CreateBuiltinConstructor(&JavascriptDate::EntryInfo::NewInstance, DeferredTypeHandler::GetDefaultInstance()); @@ -1261,12 +1574,24 @@ namespace Js numberConstructor = CreateBuiltinConstructor(&JavascriptNumber::EntryInfo::NewInstance, DeferredTypeHandler::GetDefaultInstance()); AddFunction(globalObject, PropertyIds::Number, numberConstructor); + + bigIntConstructor = nullptr; + if (scriptContext->GetConfig()->IsESBigIntEnabled()) + { + bigIntConstructor = CreateBuiltinConstructor(&JavascriptBigInt::EntryInfo::NewInstance, + DeferredTypeHandler::GetDefaultInstance()); + AddFunction(globalObject, PropertyIds::BigInt, bigIntConstructor); + } + stringConstructor = CreateBuiltinConstructor(&JavascriptString::EntryInfo::NewInstance, DeferredTypeHandler::GetDefaultInstance()); AddFunction(globalObject, PropertyIds::String, stringConstructor); regexConstructorType = DynamicType::New(scriptContext, TypeIds_Function, functionPrototype, JavascriptRegExp::NewInstance, DeferredTypeHandler::GetDefaultInstance()); - regexConstructor = RecyclerNewEnumClass(recycler, EnumFunctionClass, JavascriptRegExpConstructor, regexConstructorType); + regexConstructor = RecyclerNewEnumClass(recycler, EnumFunctionClass, + JavascriptRegExpConstructor, + regexConstructorType, + builtInConstructorCache); AddFunction(globalObject, PropertyIds::RegExp, regexConstructor); arrayBufferConstructor = CreateBuiltinConstructor(&ArrayBuffer::EntryInfo::NewInstance, @@ -1361,7 +1686,7 @@ namespace Js } #endif -#if defined(ENABLE_INTL_OBJECT) || defined(ENABLE_JS_BUILTINS) || defined(ENABLE_PROJECTION) +#if defined(ENABLE_INTL_OBJECT) || defined(ENABLE_JS_BUILTINS) engineInterfaceObject = EngineInterfaceObject::New(recycler, DynamicType::New(scriptContext, TypeIds_EngineInterfaceObject, nullValue, nullptr, DeferredTypeHandler::GetDefaultInstance())); @@ -1382,6 +1707,7 @@ namespace Js JsBuiltInEngineInterfaceExtensionObject* builtInExtension = RecyclerNew(recycler, JsBuiltInEngineInterfaceExtensionObject, scriptContext); engineInterfaceObject->SetEngineExtension(EngineInterfaceExtensionKind_JsBuiltIn, builtInExtension); this->isArrayFunction = this->DefaultCreateFunction(&JavascriptArray::EntryInfo::IsArray, 1, nullptr, nullptr, PropertyIds::isArray); + builtinFuncs[BuiltinFunction::JavascriptArray_IsArray] = this->isArrayFunction; #endif #endif @@ -1422,6 +1748,16 @@ namespace Js // AsyncFunction is not a global property by ES7 spec so don't add it to the global object } + asyncGeneratorFunctionConstructor = nullptr; + + if (scriptContext->GetConfig()->IsES2018AsyncIterationEnabled()) + { + asyncGeneratorFunctionConstructor = CreateBuiltinConstructor(&JavascriptFunction::EntryInfo::NewAsyncGeneratorFunctionInstance, + DeferredTypeHandler::GetDefaultInstance(), + functionConstructor); + // AsyncGeneratorFunction is not a global property by ES2018 spec so don't add it to the global object + } + errorConstructor = CreateBuiltinConstructor(&JavascriptError::EntryInfo::NewErrorInstance, DeferredTypeHandler::GetDefaultInstance()); AddFunction(globalObject, PropertyIds::Error, errorConstructor); @@ -1462,6 +1798,14 @@ namespace Js nativeErrorPrototype); AddFunction(globalObject, PropertyIds::URIError, uriErrorConstructor); + if (scriptContext->GetConfig()->IsESPromiseAnyEnabled()) + { + aggregateErrorConstructor = CreateBuiltinConstructor(&JavascriptError::EntryInfo::NewAggregateErrorInstance, + DeferredTypeHandler::GetDefaultInstance(), + nativeErrorPrototype); + AddFunction(globalObject, PropertyIds::AggregateError, aggregateErrorConstructor); + } + #ifdef ENABLE_WASM if (CONFIG_FLAG(Wasm) && PHASE_ENABLED1(WasmPhase)) { @@ -1559,7 +1903,6 @@ namespace Js library->AddMember(arrayConstructor, PropertyIds::name, scriptContext->GetPropertyString(PropertyIds::Array), PropertyConfigurable); #ifdef ENABLE_JS_BUILTINS - builtinFuncs[BuiltinFunction::JavascriptArray_IsArray] = library->isArrayFunction; library->AddMember(arrayConstructor, PropertyIds::isArray, library->isArrayFunction); #else library->AddFunctionToLibraryObject(arrayConstructor, PropertyIds::isArray, &JavascriptArray::EntryInfo::IsArray, 1); @@ -1575,6 +1918,33 @@ namespace Js return true; } +#ifdef ENABLE_JS_BUILTINS + void EnsureBuiltInEngineIsReady(JsBuiltInFile file, ScriptContext* scriptContext) + { + if (scriptContext->IsJsBuiltInEnabled()) + { + if (scriptContext->VerifyAlive()) // Can't initialize if scriptContext closed, will need to run script + { + EngineInterfaceObject* engineInterfaceObject = scriptContext->GetLibrary()->GetEngineInterfaceObject(); + Assert(engineInterfaceObject != nullptr); + JsBuiltInEngineInterfaceExtensionObject* builtInExtension = + static_cast(engineInterfaceObject->GetEngineExtension(EngineInterfaceExtensionKind_JsBuiltIn)); + builtInExtension->InjectJsBuiltInLibraryCode(scriptContext, file); + } + } + } + + void JavascriptLibrary::EnsureArrayBuiltInsAreReady() + { + EnsureBuiltInEngineIsReady(JsBuiltInFile::Array_prototype, scriptContext); + } + + void JavascriptLibrary::EnsureMathBuiltInsAreReady() + { + EnsureBuiltInEngineIsReady(JsBuiltInFile::Math_object, scriptContext); + } +#endif + bool JavascriptLibrary::IsDefaultArrayValuesFunction(RecyclableObject * function, ScriptContext *scriptContext) { #ifdef ENABLE_JS_BUILTINS @@ -1583,7 +1953,7 @@ namespace Js ScriptFunction * scriptFunction = JavascriptOperators::TryFromVar(function); if (scriptFunction) { - scriptContext->GetLibrary()->EnsureBuiltInEngineIsReady(); + EnsureBuiltInEngineIsReady(JsBuiltInFile::Array_prototype, scriptContext); return scriptFunction->GetFunctionProxy()->IsJsBuiltInCode(); } } @@ -1615,7 +1985,7 @@ namespace Js } else { - this->EnsureBuiltInEngineIsReady(); + EnsureBuiltInEngineIsReady(JsBuiltInFile::Array_prototype, scriptContext); } #endif } @@ -1635,7 +2005,7 @@ namespace Js } else { - this->EnsureBuiltInEngineIsReady(); + EnsureBuiltInEngineIsReady(JsBuiltInFile::Array_prototype, scriptContext); } #endif } @@ -1655,7 +2025,7 @@ namespace Js } else { - this->EnsureBuiltInEngineIsReady(); + EnsureBuiltInEngineIsReady(JsBuiltInFile::Array_prototype, scriptContext); } #endif } @@ -1664,7 +2034,7 @@ namespace Js bool JavascriptLibrary::InitializeArrayPrototype(DynamicObject* arrayPrototype, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode) { - typeHandler->Convert(arrayPrototype, mode, 24); + typeHandler->Convert(arrayPrototype, mode, 27); // Note: Any new function addition/deletion/modification should also be updated in JavascriptLibrary::ProfilerRegisterArray // so that the update is in sync with profiler @@ -1675,6 +2045,7 @@ namespace Js Field(JavascriptFunction*)* builtinFuncs = library->GetBuiltinFunctions(); + builtinFuncs[BuiltinFunction::JavascriptArray_At] = library->AddFunctionToLibraryObject(arrayPrototype, PropertyIds::at, &JavascriptArray::EntryInfo::At, 1); builtinFuncs[BuiltinFunction::JavascriptArray_Push] = library->AddFunctionToLibraryObject(arrayPrototype, PropertyIds::push, &JavascriptArray::EntryInfo::Push, 1); builtinFuncs[BuiltinFunction::JavascriptArray_Concat] = library->AddFunctionToLibraryObject(arrayPrototype, PropertyIds::concat, &JavascriptArray::EntryInfo::Concat, 1); builtinFuncs[BuiltinFunction::JavascriptArray_Join] = library->AddFunctionToLibraryObject(arrayPrototype, PropertyIds::join, &JavascriptArray::EntryInfo::Join, 1); @@ -1682,7 +2053,6 @@ namespace Js builtinFuncs[BuiltinFunction::JavascriptArray_Reverse] = library->AddFunctionToLibraryObject(arrayPrototype, PropertyIds::reverse, &JavascriptArray::EntryInfo::Reverse, 0); builtinFuncs[BuiltinFunction::JavascriptArray_Shift] = library->AddFunctionToLibraryObject(arrayPrototype, PropertyIds::shift, &JavascriptArray::EntryInfo::Shift, 0); builtinFuncs[BuiltinFunction::JavascriptArray_Slice] = library->AddFunctionToLibraryObject(arrayPrototype, PropertyIds::slice, &JavascriptArray::EntryInfo::Slice, 2); - /* No inlining Array_Sort */ library->AddFunctionToLibraryObject(arrayPrototype, PropertyIds::sort, &JavascriptArray::EntryInfo::Sort, 1); builtinFuncs[BuiltinFunction::JavascriptArray_Splice] = library->AddFunctionToLibraryObject(arrayPrototype, PropertyIds::splice, &JavascriptArray::EntryInfo::Splice, 2); // The toString and toLocaleString properties are shared between Array.prototype and %TypedArray%.prototype. @@ -1707,29 +2077,30 @@ namespace Js if (!scriptContext->IsJsBuiltInEnabled()) { builtinFuncs[BuiltinFunction::JavascriptArray_IndexOf] = library->AddFunctionToLibraryObject(arrayPrototype, PropertyIds::indexOf, &JavascriptArray::EntryInfo::IndexOf, 1); + builtinFuncs[BuiltinFunction::JavascriptArray_Includes] = library->AddFunctionToLibraryObject(arrayPrototype, PropertyIds::includes, &JavascriptArray::EntryInfo::Includes, 1); } - /* No inlining Array_Every */ library->AddFunctionToLibraryObject(arrayPrototype, PropertyIds::every, &JavascriptArray::EntryInfo::Every, 1); - - /* No inlining Array_ForEach */ - library->AddMember(arrayPrototype, PropertyIds::forEach, library->EnsureArrayPrototypeForEachFunction()); + /* No inlining Array_Sort */ library->AddFunctionToLibraryObject(arrayPrototype, PropertyIds::sort, &JavascriptArray::EntryInfo::Sort, 1); builtinFuncs[BuiltinFunction::JavascriptArray_LastIndexOf] = library->AddFunctionToLibraryObject(arrayPrototype, PropertyIds::lastIndexOf, &JavascriptArray::EntryInfo::LastIndexOf, 1); /* No inlining Array_Map */ library->AddFunctionToLibraryObject(arrayPrototype, PropertyIds::map, &JavascriptArray::EntryInfo::Map, 1); - /* No inlining Array_Reduce */ library->AddFunctionToLibraryObject(arrayPrototype, PropertyIds::reduce, &JavascriptArray::EntryInfo::Reduce, 1); /* No inlining Array_ReduceRight */ library->AddFunctionToLibraryObject(arrayPrototype, PropertyIds::reduceRight, &JavascriptArray::EntryInfo::ReduceRight, 1); - /* No inlining Array_Some */ library->AddFunctionToLibraryObject(arrayPrototype, PropertyIds::some, &JavascriptArray::EntryInfo::Some, 1); if (scriptContext->GetConfig()->IsES6StringExtensionsEnabled()) // This is not a typo, Array.prototype.find and .findIndex are part of the ES6 Improved String APIs feature { /* No inlining Array_Find */ library->AddFunctionToLibraryObject(arrayPrototype, PropertyIds::find, &JavascriptArray::EntryInfo::Find, 1); /* No inlining Array_FindIndex */ library->AddFunctionToLibraryObject(arrayPrototype, PropertyIds::findIndex, &JavascriptArray::EntryInfo::FindIndex, 1); } + if (scriptContext->GetConfig()->IsESArrayFindFromLastEnabled()) + { + /* No inlining Array_FindLast */ library->AddFunctionToLibraryObject(arrayPrototype, PropertyIds::findLast, &JavascriptArray::EntryInfo::FindLast, 1); + /* No inlining Array_FindLastIndex */ library->AddFunctionToLibraryObject(arrayPrototype, PropertyIds::findLastIndex, &JavascriptArray::EntryInfo::FindLastIndex, 1); + } #ifdef ENABLE_JS_BUILTINS if (scriptContext->IsJsBuiltInEnabled()) { - library->EnsureBuiltInEngineIsReady(); + EnsureBuiltInEngineIsReady(JsBuiltInFile::Array_prototype, scriptContext); } else #endif @@ -1745,28 +2116,36 @@ namespace Js /* No inlining Array_SymbolIterator */ library->AddMember(arrayPrototype, PropertyIds::_symbolIterator, values); /* No inlining Array_Filter */ library->AddFunctionToLibraryObject(arrayPrototype, PropertyIds::filter, &JavascriptArray::EntryInfo::Filter, 1); + /* No inlining Array_ForEach */ library->AddMember(arrayPrototype, PropertyIds::forEach, library->EnsureArrayPrototypeForEachFunction()); + /* No inlining Array_Some */ library->AddFunctionToLibraryObject(arrayPrototype, PropertyIds::some, &JavascriptArray::EntryInfo::Some, 1); + /* No inlining Array_Reduce */ library->AddFunctionToLibraryObject(arrayPrototype, PropertyIds::reduce, &JavascriptArray::EntryInfo::Reduce, 1); + /* No inlining Array_Every */ library->AddFunctionToLibraryObject(arrayPrototype, PropertyIds::every, &JavascriptArray::EntryInfo::Every, 1); } - if (scriptContext->GetConfig()->IsES6UnscopablesEnabled()) + DynamicType* dynamicType = DynamicType::New(scriptContext, TypeIds_Object, library->nullValue, nullptr, NullTypeHandler::GetDefaultInstance(), false); + DynamicObject* unscopablesList = DynamicObject::New(library->GetRecycler(), dynamicType); + unscopablesList->SetProperty(PropertyIds::at, JavascriptBoolean::ToVar(true, scriptContext), PropertyOperation_None, nullptr); + unscopablesList->SetProperty(PropertyIds::copyWithin, JavascriptBoolean::ToVar(true, scriptContext), PropertyOperation_None, nullptr); + unscopablesList->SetProperty(PropertyIds::entries, JavascriptBoolean::ToVar(true, scriptContext), PropertyOperation_None, nullptr); + unscopablesList->SetProperty(PropertyIds::fill, JavascriptBoolean::ToVar(true, scriptContext), PropertyOperation_None, nullptr); + unscopablesList->SetProperty(PropertyIds::find, JavascriptBoolean::ToVar(true, scriptContext), PropertyOperation_None, nullptr); + unscopablesList->SetProperty(PropertyIds::findIndex, JavascriptBoolean::ToVar(true, scriptContext), PropertyOperation_None, nullptr); + unscopablesList->SetProperty(PropertyIds::flat, JavascriptBoolean::ToVar(true, scriptContext), PropertyOperation_None, nullptr); + unscopablesList->SetProperty(PropertyIds::flatMap, JavascriptBoolean::ToVar(true, scriptContext), PropertyOperation_None, nullptr); + unscopablesList->SetProperty(PropertyIds::includes, JavascriptBoolean::ToVar(true, scriptContext), PropertyOperation_None, nullptr); + unscopablesList->SetProperty(PropertyIds::keys, JavascriptBoolean::ToVar(true, scriptContext), PropertyOperation_None, nullptr); + unscopablesList->SetProperty(PropertyIds::values, JavascriptBoolean::ToVar(true, scriptContext), PropertyOperation_None, nullptr); + + if (scriptContext->GetConfig()->IsESArrayFindFromLastEnabled()) { - DynamicType* dynamicType = DynamicType::New(scriptContext, TypeIds_Object, library->nullValue, nullptr, NullTypeHandler::GetDefaultInstance(), false); - DynamicObject* unscopablesList = DynamicObject::New(library->GetRecycler(), dynamicType); - unscopablesList->SetProperty(PropertyIds::find, JavascriptBoolean::ToVar(true, scriptContext), PropertyOperation_None, nullptr); - unscopablesList->SetProperty(PropertyIds::findIndex, JavascriptBoolean::ToVar(true, scriptContext), PropertyOperation_None, nullptr); - unscopablesList->SetProperty(PropertyIds::fill, JavascriptBoolean::ToVar(true, scriptContext), PropertyOperation_None, nullptr); - unscopablesList->SetProperty(PropertyIds::copyWithin, JavascriptBoolean::ToVar(true, scriptContext), PropertyOperation_None, nullptr); - unscopablesList->SetProperty(PropertyIds::entries, JavascriptBoolean::ToVar(true, scriptContext), PropertyOperation_None, nullptr); - unscopablesList->SetProperty(PropertyIds::includes, JavascriptBoolean::ToVar(true, scriptContext), PropertyOperation_None, nullptr); - unscopablesList->SetProperty(PropertyIds::keys, JavascriptBoolean::ToVar(true, scriptContext), PropertyOperation_None, nullptr); - unscopablesList->SetProperty(PropertyIds::values, JavascriptBoolean::ToVar(true, scriptContext), PropertyOperation_None, nullptr); - library->AddMember(arrayPrototype, PropertyIds::_symbolUnscopables, unscopablesList, PropertyConfigurable); + unscopablesList->SetProperty(PropertyIds::findLast, JavascriptBoolean::ToVar(true, scriptContext), PropertyOperation_None, nullptr); + unscopablesList->SetProperty(PropertyIds::findLastIndex, JavascriptBoolean::ToVar(true, scriptContext), PropertyOperation_None, nullptr); } + library->AddMember(arrayPrototype, PropertyIds::_symbolUnscopables, unscopablesList, PropertyConfigurable); + /* No inlining Array_Fill */ library->AddFunctionToLibraryObject(arrayPrototype, PropertyIds::fill, &JavascriptArray::EntryInfo::Fill, 1); /* No inlining Array_CopyWithin */ library->AddFunctionToLibraryObject(arrayPrototype, PropertyIds::copyWithin, &JavascriptArray::EntryInfo::CopyWithin, 2); - - builtinFuncs[BuiltinFunction::JavascriptArray_Includes] = library->AddFunctionToLibraryObject(arrayPrototype, PropertyIds::includes, &JavascriptArray::EntryInfo::Includes, 1); - DebugOnly(CheckRegisteredBuiltIns(builtinFuncs, scriptContext)); arrayPrototype->SetHasNoEnumerableProperties(true); @@ -1963,13 +2342,14 @@ namespace Js #ifdef ENABLE_JS_BUILTINS if (scriptContext->IsJsBuiltInEnabled()) { - library->EnsureBuiltInEngineIsReady(); + EnsureBuiltInEngineIsReady(JsBuiltInFile::Array_prototype, scriptContext); } #endif library->AddMember(typedarrayPrototype, PropertyIds::constructor, library->typedArrayConstructor); library->AddFunctionToLibraryObject(typedarrayPrototype, PropertyIds::set, &TypedArrayBase::EntryInfo::Set, 2); library->AddFunctionToLibraryObject(typedarrayPrototype, PropertyIds::subarray, &TypedArrayBase::EntryInfo::Subarray, 2); + library->AddFunctionToLibraryObject(typedarrayPrototype, PropertyIds::at, &TypedArrayBase::EntryInfo::At, 1); library->AddFunctionToLibraryObject(typedarrayPrototype, PropertyIds::copyWithin, &TypedArrayBase::EntryInfo::CopyWithin, 2); library->AddFunctionToLibraryObject(typedarrayPrototype, PropertyIds::every, &TypedArrayBase::EntryInfo::Every, 1); library->AddFunctionToLibraryObject(typedarrayPrototype, PropertyIds::fill, &TypedArrayBase::EntryInfo::Fill, 1); @@ -2024,6 +2404,11 @@ namespace Js library->AddMember(typedarrayPrototype, PropertyIds::toString, library->arrayPrototypeToStringFunction); } + if (scriptContext->GetConfig()->IsESArrayFindFromLastEnabled()) { + library->AddFunctionToLibraryObject(typedarrayPrototype, PropertyIds::findLast, &TypedArrayBase::EntryInfo::FindLast, 1); + library->AddFunctionToLibraryObject(typedarrayPrototype, PropertyIds::findLastIndex, &TypedArrayBase::EntryInfo::FindLastIndex, 1); + } + typedarrayPrototype->SetHasNoEnumerableProperties(true); return true; @@ -2132,13 +2517,13 @@ namespace Js return true; } -#define INIT_ERROR_IMPL(error, errorName) \ +#define INIT_ERROR_IMPL(error, errorName, ctorLength) \ bool JavascriptLibrary::Initialize##error##Constructor(DynamicObject* constructor, DeferredTypeHandlerBase* typeHandler, DeferredInitializeMode mode) \ { \ typeHandler->Convert(constructor, mode, 3); \ JavascriptLibrary* library = constructor->GetLibrary(); \ library->AddMember(constructor, PropertyIds::prototype, library->Get##error##Prototype(), PropertyNone); \ - library->AddMember(constructor, PropertyIds::length, TaggedInt::ToVarUnchecked(1), PropertyConfigurable); \ + library->AddMember(constructor, PropertyIds::length, TaggedInt::ToVarUnchecked(ctorLength), PropertyConfigurable); \ PropertyAttributes prototypeNameMessageAttributes = PropertyConfigurable; \ library->AddMember(constructor, PropertyIds::name, library->CreateStringFromCppLiteral(_u(#errorName)), prototypeNameMessageAttributes); \ constructor->SetHasNoEnumerableProperties(true); \ @@ -2146,28 +2531,28 @@ namespace Js } \ bool JavascriptLibrary::Initialize##error##Prototype(DynamicObject* prototype, DeferredTypeHandlerBase* typeHandler, DeferredInitializeMode mode) \ { \ - typeHandler->Convert(prototype, mode, 4); \ + typeHandler->Convert(prototype, mode, 3); \ JavascriptLibrary* library = prototype->GetLibrary(); \ library->AddMember(prototype, PropertyIds::constructor, library->Get##error##Constructor()); \ bool hasNoEnumerableProperties = true; \ PropertyAttributes prototypeNameMessageAttributes = PropertyConfigurable | PropertyWritable; \ library->AddMember(prototype, PropertyIds::name, library->CreateStringFromCppLiteral(_u(#errorName)), prototypeNameMessageAttributes); \ library->AddMember(prototype, PropertyIds::message, library->GetEmptyString(), prototypeNameMessageAttributes); \ - library->AddFunctionToLibraryObject(prototype, PropertyIds::toString, &JavascriptError::EntryInfo::ToString, 0); \ prototype->SetHasNoEnumerableProperties(hasNoEnumerableProperties); \ return true; \ } -#define INIT_ERROR(error) INIT_ERROR_IMPL(error, error) +#define INIT_ERROR(error) INIT_ERROR_IMPL(error, error, 1) INIT_ERROR(EvalError); INIT_ERROR(RangeError); INIT_ERROR(ReferenceError); INIT_ERROR(SyntaxError); INIT_ERROR(TypeError); INIT_ERROR(URIError); - INIT_ERROR_IMPL(WebAssemblyCompileError, CompileError); - INIT_ERROR_IMPL(WebAssemblyRuntimeError, RuntimeError); - INIT_ERROR_IMPL(WebAssemblyLinkError, LinkError); + INIT_ERROR_IMPL(AggregateError, AggregateError, 2); + INIT_ERROR_IMPL(WebAssemblyCompileError, CompileError, 1); + INIT_ERROR_IMPL(WebAssemblyRuntimeError, RuntimeError, 1); + INIT_ERROR_IMPL(WebAssemblyLinkError, LinkError, 1); #undef INIT_ERROR @@ -2214,20 +2599,19 @@ namespace Js library->AddMember(symbolConstructor, PropertyIds::length, TaggedInt::ToVarUnchecked(0), PropertyConfigurable); library->AddMember(symbolConstructor, PropertyIds::prototype, library->symbolPrototype, PropertyNone); library->AddMember(symbolConstructor, PropertyIds::name, scriptContext->GetPropertyString(PropertyIds::Symbol), PropertyConfigurable); - if (scriptContext->GetConfig()->IsES6HasInstanceEnabled()) - { - library->AddMember(symbolConstructor, PropertyIds::hasInstance, library->GetSymbolHasInstance(), PropertyNone); - } + library->AddMember(symbolConstructor, PropertyIds::hasInstance, library->GetSymbolHasInstance(), PropertyNone); if (scriptContext->GetConfig()->IsES6IsConcatSpreadableEnabled()) { library->AddMember(symbolConstructor, PropertyIds::isConcatSpreadable, library->GetSymbolIsConcatSpreadable(), PropertyNone); } library->AddMember(symbolConstructor, PropertyIds::iterator, library->GetSymbolIterator(), PropertyNone); - if (scriptContext->GetConfig()->IsES6SpeciesEnabled()) + if (scriptContext->GetConfig()->IsES2018AsyncIterationEnabled()) { - library->AddMember(symbolConstructor, PropertyIds::species, library->GetSymbolSpecies(), PropertyNone); + library->AddMember(symbolConstructor, PropertyIds::asyncIterator, library->GetSymbolAsyncIterator(), PropertyNone); } + library->AddMember(symbolConstructor, PropertyIds::species, library->GetSymbolSpecies(), PropertyNone); + if (scriptContext->GetConfig()->IsES6ToPrimitiveEnabled()) { library->AddMember(symbolConstructor, PropertyIds::toPrimitive, library->GetSymbolToPrimitive(), PropertyNone); @@ -2257,7 +2641,7 @@ namespace Js bool JavascriptLibrary::InitializeSymbolPrototype(DynamicObject* symbolPrototype, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode) { - typeHandler->Convert(symbolPrototype, mode, 5); + typeHandler->Convert(symbolPrototype, mode, 6); // Note: Any new function addition/deletion/modification should also be updated in JavascriptLibrary::ProfilerRegisterSymbol // so that the update is in sync with profiler JavascriptLibrary* library = symbolPrototype->GetLibrary(); @@ -2281,6 +2665,12 @@ namespace Js &JavascriptSymbol::EntryInfo::SymbolToPrimitive, 1)); symbolPrototype->SetWritable(PropertyIds::_symbolToPrimitive, false); } + + if (scriptContext->GetConfig()->IsESSymbolDescriptionEnabled()) + { + library->AddAccessorsToLibraryObject(symbolPrototype, PropertyIds::description, &JavascriptSymbol::EntryInfo::Description, nullptr); + } + symbolPrototype->SetHasNoEnumerableProperties(true); return true; @@ -2288,7 +2678,7 @@ namespace Js bool JavascriptLibrary::InitializePromiseConstructor(DynamicObject* promiseConstructor, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode) { - typeHandler->Convert(promiseConstructor, mode, 8); + typeHandler->Convert(promiseConstructor, mode, 9); // Note: Any new function addition/deletion/modification should also be updated in JavascriptLibrary::ProfilerRegisterPromise // so that the update is in sync with profiler JavascriptLibrary* library = promiseConstructor->GetLibrary(); @@ -2299,6 +2689,11 @@ namespace Js library->AddMember(promiseConstructor, PropertyIds::name, scriptContext->GetPropertyString(PropertyIds::Promise), PropertyConfigurable); library->AddFunctionToLibraryObject(promiseConstructor, PropertyIds::all, &JavascriptPromise::EntryInfo::All, 1); + library->AddFunctionToLibraryObject(promiseConstructor, PropertyIds::allSettled, &JavascriptPromise::EntryInfo::AllSettled, 1); + if (scriptContext->GetConfig()->IsESPromiseAnyEnabled()) + { + library->AddFunctionToLibraryObject(promiseConstructor, PropertyIds::any, &JavascriptPromise::EntryInfo::Any, 1); + } library->AddFunctionToLibraryObject(promiseConstructor, PropertyIds::race, &JavascriptPromise::EntryInfo::Race, 1); library->AddFunctionToLibraryObject(promiseConstructor, PropertyIds::reject, &JavascriptPromise::EntryInfo::Reject, 1); library->AddMember(promiseConstructor, PropertyIds::resolve, library->EnsurePromiseResolveFunction(), PropertyBuiltInMethodDefaults); @@ -2415,6 +2810,7 @@ namespace Js return generatorReturnFunction; } + JavascriptFunction* JavascriptLibrary::EnsureGeneratorNextFunction() { if (generatorNextFunction == nullptr) @@ -2433,36 +2829,161 @@ namespace Js return generatorThrowFunction; } - bool JavascriptLibrary::InitializeAsyncFunctionConstructor(DynamicObject* asyncFunctionConstructor, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode) + JavascriptFunction* JavascriptLibrary::EnsureAsyncGeneratorNextFunction() { - typeHandler->Convert(asyncFunctionConstructor, mode, 3); - JavascriptLibrary* library = asyncFunctionConstructor->GetLibrary(); - - library->AddMember(asyncFunctionConstructor, PropertyIds::length, TaggedInt::ToVarUnchecked(1), PropertyConfigurable); - library->AddMember(asyncFunctionConstructor, PropertyIds::prototype, library->asyncFunctionPrototype, PropertyNone); - library->AddMember(asyncFunctionConstructor, PropertyIds::name, library->CreateStringFromCppLiteral(_u("AsyncFunction")), PropertyConfigurable); - - asyncFunctionConstructor->SetHasNoEnumerableProperties(true); - - return true; + if (asyncGeneratorNextFunction == nullptr) + { + asyncGeneratorNextFunction = DefaultCreateFunction(&JavascriptAsyncGenerator::EntryInfo::Next, 1, nullptr, nullptr, PropertyIds::next); + } + return asyncGeneratorNextFunction; } - bool JavascriptLibrary::InitializeAsyncFunctionPrototype(DynamicObject* asyncFunctionPrototype, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode) + JavascriptFunction* JavascriptLibrary::EnsureAsyncGeneratorReturnFunction() { - typeHandler->Convert(asyncFunctionPrototype, mode, 2); - JavascriptLibrary* library = asyncFunctionPrototype->GetLibrary(); - ScriptContext* scriptContext = library->GetScriptContext(); - - library->AddMember(asyncFunctionPrototype, PropertyIds::constructor, library->asyncFunctionConstructor, PropertyConfigurable); - if (scriptContext->GetConfig()->IsES6ToStringTagEnabled()) + if (asyncGeneratorReturnFunction == nullptr) { - library->AddMember(asyncFunctionPrototype, PropertyIds::_symbolToStringTag, library->CreateStringFromCppLiteral(_u("AsyncFunction")), PropertyConfigurable); + asyncGeneratorReturnFunction = DefaultCreateFunction(&JavascriptAsyncGenerator::EntryInfo::Return, 1, nullptr, nullptr, PropertyIds::return_); + } + return asyncGeneratorReturnFunction; + } + + JavascriptFunction* JavascriptLibrary::EnsureAsyncGeneratorThrowFunction() + { + if (asyncGeneratorThrowFunction == nullptr) + { + asyncGeneratorThrowFunction = DefaultCreateFunction(&JavascriptAsyncGenerator::EntryInfo::Throw, 1, nullptr, nullptr, PropertyIds::throw_); + } + return asyncGeneratorThrowFunction; + } + + JavascriptFunction* JavascriptLibrary::EnsureAsyncFromSyncIteratorNextFunction() + { + if (asyncFromSyncIteratorNextFunction == nullptr) + { + asyncFromSyncIteratorNextFunction = DefaultCreateFunction(&JavascriptAsyncFromSyncIterator::EntryInfo::Next, 1, nullptr, nullptr, PropertyIds::next); + } + return asyncFromSyncIteratorNextFunction; + } + + JavascriptFunction* JavascriptLibrary::EnsureAsyncFromSyncIteratorReturnFunction() + { + if (asyncFromSyncIteratorReturnFunction == nullptr) + { + asyncFromSyncIteratorReturnFunction = DefaultCreateFunction(&JavascriptAsyncFromSyncIterator::EntryInfo::Return, 1, nullptr, nullptr, PropertyIds::return_); + } + return asyncFromSyncIteratorReturnFunction; + } + + JavascriptFunction* JavascriptLibrary::EnsureAsyncFromSyncIteratorThrowFunction() + { + if (asyncFromSyncIteratorThrowFunction == nullptr) + { + asyncFromSyncIteratorThrowFunction = DefaultCreateFunction(&JavascriptAsyncFromSyncIterator::EntryInfo::Throw, 1, nullptr, nullptr, PropertyIds::throw_); + } + return asyncFromSyncIteratorThrowFunction; + } + + bool JavascriptLibrary::InitializeAsyncFunctionConstructor(DynamicObject* asyncFunctionConstructor, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode) + { + typeHandler->Convert(asyncFunctionConstructor, mode, 3); + JavascriptLibrary* library = asyncFunctionConstructor->GetLibrary(); + + library->AddMember(asyncFunctionConstructor, PropertyIds::length, TaggedInt::ToVarUnchecked(1), PropertyConfigurable); + library->AddMember(asyncFunctionConstructor, PropertyIds::prototype, library->asyncFunctionPrototype, PropertyNone); + library->AddMember(asyncFunctionConstructor, PropertyIds::name, library->CreateStringFromCppLiteral(_u("AsyncFunction")), PropertyConfigurable); + + asyncFunctionConstructor->SetHasNoEnumerableProperties(true); + + return true; + } + + bool JavascriptLibrary::InitializeAsyncFunctionPrototype(DynamicObject* asyncFunctionPrototype, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode) + { + typeHandler->Convert(asyncFunctionPrototype, mode, 2); + JavascriptLibrary* library = asyncFunctionPrototype->GetLibrary(); + ScriptContext* scriptContext = library->GetScriptContext(); + + library->AddMember(asyncFunctionPrototype, PropertyIds::constructor, library->asyncFunctionConstructor, PropertyConfigurable); + if (scriptContext->GetConfig()->IsES6ToStringTagEnabled()) + { + library->AddMember(asyncFunctionPrototype, PropertyIds::_symbolToStringTag, library->CreateStringFromCppLiteral(_u("AsyncFunction")), PropertyConfigurable); } asyncFunctionPrototype->SetHasNoEnumerableProperties(true); return true; } + bool JavascriptLibrary::InitializeAsyncGeneratorFunctionConstructor(DynamicObject* asyncGeneratorFunctionConstructor, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode) + { + typeHandler->Convert(asyncGeneratorFunctionConstructor, mode, 3); + JavascriptLibrary* library = asyncGeneratorFunctionConstructor->GetLibrary(); + Assert(library->GetScriptContext()->GetConfig()->IsES2018AsyncIterationEnabled()); + + library->AddMember(asyncGeneratorFunctionConstructor, PropertyIds::length, TaggedInt::ToVarUnchecked(1), PropertyConfigurable); + library->AddMember(asyncGeneratorFunctionConstructor, PropertyIds::prototype, library->asyncGeneratorFunctionPrototype, PropertyNone); + library->AddMember(asyncGeneratorFunctionConstructor, PropertyIds::name, library->CreateStringFromCppLiteral(_u("AsyncGeneratorFunction")), PropertyConfigurable); + + asyncGeneratorFunctionConstructor->SetHasNoEnumerableProperties(true); + + return true; + } + + bool JavascriptLibrary::InitializeAsyncGeneratorFunctionPrototype(DynamicObject* asyncGeneratorFunctionPrototype, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode) + { + typeHandler->Convert(asyncGeneratorFunctionPrototype, mode, 3); + JavascriptLibrary* library = asyncGeneratorFunctionPrototype->GetLibrary(); + ScriptContext* scriptContext = library->GetScriptContext(); + Assert(library->GetScriptContext()->GetConfig()->IsES2018AsyncIterationEnabled()); + + library->AddMember(asyncGeneratorFunctionPrototype, PropertyIds::constructor, library->asyncGeneratorFunctionConstructor, PropertyConfigurable); + library->AddMember(asyncGeneratorFunctionPrototype, PropertyIds::prototype, library->asyncGeneratorPrototype, PropertyConfigurable); + if (scriptContext->GetConfig()->IsES6ToStringTagEnabled()) + { + library->AddMember(asyncGeneratorFunctionPrototype, PropertyIds::_symbolToStringTag, library->CreateStringFromCppLiteral(_u("AsyncGeneratorFunction")), PropertyConfigurable); + } + asyncGeneratorFunctionPrototype->SetHasNoEnumerableProperties(true); + + return true; + } + + bool JavascriptLibrary::InitializeAsyncGeneratorPrototype(DynamicObject* asyncGeneratorPrototype, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode) + { + JavascriptLibrary* library = asyncGeneratorPrototype->GetLibrary(); + ScriptContext* scriptContext = library->GetScriptContext(); + Assert(library->GetScriptContext()->GetConfig()->IsES2018AsyncIterationEnabled()); + typeHandler->Convert(asyncGeneratorPrototype, mode, 5); + + library->AddMember(asyncGeneratorPrototype, PropertyIds::constructor, library->asyncGeneratorFunctionPrototype, PropertyConfigurable); + if (scriptContext->GetConfig()->IsES6ToStringTagEnabled()) + { + library->AddMember(asyncGeneratorPrototype, PropertyIds::_symbolToStringTag, library->CreateStringFromCppLiteral(_u("AsyncGenerator")), PropertyConfigurable); + } + + library->AddMember(asyncGeneratorPrototype, PropertyIds::return_, library->EnsureAsyncGeneratorReturnFunction(), PropertyBuiltInMethodDefaults); + library->AddMember(asyncGeneratorPrototype, PropertyIds::next, library->EnsureAsyncGeneratorNextFunction(), PropertyBuiltInMethodDefaults); + library->AddMember(asyncGeneratorPrototype, PropertyIds::throw_, library->EnsureAsyncGeneratorThrowFunction(), PropertyBuiltInMethodDefaults); + + asyncGeneratorPrototype->SetHasNoEnumerableProperties(true); + + return true; + } + + bool JavascriptLibrary::InitializeAsyncFromSyncIteratorPrototype(DynamicObject* asyncFromSyncIteratorProtototype, DeferredTypeHandlerBase* typeHandler, DeferredInitializeMode mode) + { + JavascriptLibrary* library = asyncFromSyncIteratorProtototype->GetLibrary(); + Assert(library->GetScriptContext()->GetConfig()->IsES2018AsyncIterationEnabled()); + typeHandler->Convert(asyncFromSyncIteratorProtototype, mode, 3); + // note per spec this also has a toStringTag but it is not observable at runtime so omitted + + library->AddMember(asyncFromSyncIteratorProtototype, PropertyIds::return_, library->EnsureAsyncFromSyncIteratorReturnFunction(), PropertyBuiltInMethodDefaults); + library->AddMember(asyncFromSyncIteratorProtototype, PropertyIds::next, library->EnsureAsyncFromSyncIteratorNextFunction(), PropertyBuiltInMethodDefaults); + library->AddMember(asyncFromSyncIteratorProtototype, PropertyIds::throw_, library->EnsureAsyncFromSyncIteratorThrowFunction(), PropertyBuiltInMethodDefaults); + + asyncFromSyncIteratorProtototype->SetHasNoEnumerableProperties(true); + + return true; + } + bool JavascriptLibrary::InitializeProxyConstructor(DynamicObject* proxyConstructor, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode) { typeHandler->Convert(proxyConstructor, mode, 4); @@ -2515,7 +3036,7 @@ namespace Js bool JavascriptLibrary::InitializeDatePrototype(DynamicObject* datePrototype, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode) { - typeHandler->Convert(datePrototype, mode, 51); + typeHandler->Convert(datePrototype, mode, 48); // Note: Any new function addition/deletion/modification should also be updated in JavascriptLibrary::ProfilerRegisterDate // so that the update is in sync with profiler ScriptContext* scriptContext = datePrototype->GetScriptContext(); @@ -2557,11 +3078,6 @@ namespace Js library->AddFunctionToLibraryObject(datePrototype, PropertyIds::getUTCMonth, &JavascriptDate::EntryInfo::GetUTCMonth, 0)); scriptContext->SetBuiltInLibraryFunction(JavascriptDate::EntryInfo::GetUTCSeconds.GetOriginalEntryPoint(), library->AddFunctionToLibraryObject(datePrototype, PropertyIds::getUTCSeconds, &JavascriptDate::EntryInfo::GetUTCSeconds, 0)); - if (scriptContext->GetConfig()->SupportsES3Extensions()) - { - scriptContext->SetBuiltInLibraryFunction(JavascriptDate::EntryInfo::GetVarDate.GetOriginalEntryPoint(), - library->AddFunctionToLibraryObject(datePrototype, PropertyIds::getVarDate, &JavascriptDate::EntryInfo::GetVarDate, 0)); - } scriptContext->SetBuiltInLibraryFunction(JavascriptDate::EntryInfo::GetYear.GetOriginalEntryPoint(), library->AddFunctionToLibraryObject(datePrototype, PropertyIds::getYear, &JavascriptDate::EntryInfo::GetYear, 0)); scriptContext->SetBuiltInLibraryFunction(JavascriptDate::EntryInfo::SetDate.GetOriginalEntryPoint(), @@ -2668,7 +3184,7 @@ namespace Js library->AddMember(functionPrototype, PropertyIds::constructor, library->functionConstructor); library->AddMember(functionPrototype, PropertyIds::length, TaggedInt::ToVarUnchecked(0), PropertyConfigurable); - library->AddMember(functionPrototype, PropertyIds::name, LiteralString::CreateEmptyString(scriptContext->GetLibrary()->GetStringTypeStatic()), PropertyConfigurable); + library->AddMember(functionPrototype, PropertyIds::name, library->GetEmptyString(), PropertyConfigurable); JavascriptFunction *func = library->AddFunctionToLibraryObject(functionPrototype, PropertyIds::apply, &JavascriptFunction::EntryInfo::Apply, 2); builtinFuncs[BuiltinFunction::JavascriptFunction_Apply] = func; @@ -2678,14 +3194,11 @@ namespace Js builtinFuncs[BuiltinFunction::JavascriptFunction_Call] = func; library->AddFunctionToLibraryObject(functionPrototype, PropertyIds::toString, &JavascriptFunction::EntryInfo::ToString, 0); - if (scriptContext->GetConfig()->IsES6HasInstanceEnabled()) - { - scriptContext->SetBuiltInLibraryFunction(JavascriptFunction::EntryInfo::SymbolHasInstance.GetOriginalEntryPoint(), - library->AddFunctionToLibraryObjectWithName(functionPrototype, PropertyIds::_symbolHasInstance, PropertyIds::_RuntimeFunctionNameId_hasInstance, - &JavascriptFunction::EntryInfo::SymbolHasInstance, 1)); - functionPrototype->SetWritable(PropertyIds::_symbolHasInstance, false); - functionPrototype->SetConfigurable(PropertyIds::_symbolHasInstance, false); - } + scriptContext->SetBuiltInLibraryFunction(JavascriptFunction::EntryInfo::SymbolHasInstance.GetOriginalEntryPoint(), + library->AddFunctionToLibraryObjectWithName(functionPrototype, PropertyIds::_symbolHasInstance, PropertyIds::_RuntimeFunctionNameId_hasInstance, + &JavascriptFunction::EntryInfo::SymbolHasInstance, 1)); + functionPrototype->SetWritable(PropertyIds::_symbolHasInstance, false); + functionPrototype->SetConfigurable(PropertyIds::_symbolHasInstance, false); functionPrototype->DynamicObject::SetAccessors(PropertyIds::caller, library->throwTypeErrorRestrictedPropertyAccessorFunction, library->throwTypeErrorRestrictedPropertyAccessorFunction); functionPrototype->SetEnumerable(PropertyIds::caller, false); @@ -2750,6 +3263,18 @@ namespace Js Field(JavascriptFunction*)* builtinFuncs = library->GetBuiltinFunctions(); +#ifdef ENABLE_JS_BUILTINS + if (scriptContext->IsJsBuiltInEnabled()) + { + EnsureBuiltInEngineIsReady(JsBuiltInFile::Math_object, scriptContext); + } + else +#endif + { + builtinFuncs[BuiltinFunction::Math_Max] = library->AddFunctionToLibraryObject(mathObject, PropertyIds::max, &Math::EntryInfo::Max, 2); + builtinFuncs[BuiltinFunction::Math_Min] = library->AddFunctionToLibraryObject(mathObject, PropertyIds::min, &Math::EntryInfo::Min, 2); + } + builtinFuncs[BuiltinFunction::Math_Abs] = library->AddFunctionToLibraryObject(mathObject, PropertyIds::abs, &Math::EntryInfo::Abs, 1); builtinFuncs[BuiltinFunction::Math_Acos] = library->AddFunctionToLibraryObject(mathObject, PropertyIds::acos, &Math::EntryInfo::Acos, 1); builtinFuncs[BuiltinFunction::Math_Asin] = library->AddFunctionToLibraryObject(mathObject, PropertyIds::asin, &Math::EntryInfo::Asin, 1); @@ -2760,8 +3285,6 @@ namespace Js builtinFuncs[BuiltinFunction::Math_Exp] = library->AddFunctionToLibraryObject(mathObject, PropertyIds::exp, &Math::EntryInfo::Exp, 1); builtinFuncs[BuiltinFunction::Math_Floor] = library->AddFunctionToLibraryObject(mathObject, PropertyIds::floor, &Math::EntryInfo::Floor, 1); builtinFuncs[BuiltinFunction::Math_Log] = library->AddFunctionToLibraryObject(mathObject, PropertyIds::log, &Math::EntryInfo::Log, 1); - builtinFuncs[BuiltinFunction::Math_Max] = library->AddFunctionToLibraryObject(mathObject, PropertyIds::max, &Math::EntryInfo::Max, 2); - builtinFuncs[BuiltinFunction::Math_Min] = library->AddFunctionToLibraryObject(mathObject, PropertyIds::min, &Math::EntryInfo::Min, 2); builtinFuncs[BuiltinFunction::Math_Pow] = library->AddFunctionToLibraryObject(mathObject, PropertyIds::pow, &Math::EntryInfo::Pow, 2); builtinFuncs[BuiltinFunction::Math_Random] = library->AddFunctionToLibraryObject(mathObject, PropertyIds::random, &Math::EntryInfo::Random, 0); builtinFuncs[BuiltinFunction::Math_Round] = library->AddFunctionToLibraryObject(mathObject, PropertyIds::round, &Math::EntryInfo::Round, 1); @@ -3089,8 +3612,20 @@ namespace Js VirtualTableRecorder::RecordVirtualTableAddress(vtableAddresses, VTableValue::VtableScriptFunction); VirtualTableRecorder::RecordVirtualTableAddress(vtableAddresses, VTableValue::VtableJavascriptGeneratorFunction); VirtualTableRecorder::RecordVirtualTableAddress(vtableAddresses, VTableValue::VtableJavascriptAsyncFunction); - vtableAddresses[VTableValue::VtableScriptFunctionWithInlineCacheAndHomeObj] = VirtualTableInfo>::Address; - vtableAddresses[VTableValue::VtableScriptFunctionWithInlineCacheHomeObjAndComputedName] = VirtualTableInfo>>::Address; + VirtualTableRecorder::RecordVirtualTableAddress(vtableAddresses, VTableValue::VtableJavascriptAsyncGeneratorFunction); + + // ScriptFunction + VirtualTableRecorder>::RecordVirtualTableAddress(vtableAddresses, VTableValue::VtableAsmJsScriptFunctionWithComputedName); + VirtualTableRecorder>::RecordVirtualTableAddress(vtableAddresses, VTableValue::VtableScriptFunctionWithHomeObj); + VirtualTableRecorder>::RecordVirtualTableAddress(vtableAddresses, VTableValue::VtableScriptFunctionWithComputedName); + VirtualTableRecorder>>::RecordVirtualTableAddress(vtableAddresses, VTableValue::VtableScriptFunctionWithHomeObjAndComputedName); + VirtualTableRecorder>::RecordVirtualTableAddress(vtableAddresses, VTableValue::VtableScriptFunctionWithInlineCacheAndHomeObj); + VirtualTableRecorder>::RecordVirtualTableAddress(vtableAddresses, VTableValue::VtableScriptFunctionWithInlineCacheAndComputedName); + VirtualTableRecorder>>::RecordVirtualTableAddress(vtableAddresses, VTableValue::VtableScriptFunctionWithInlineCacheHomeObjAndComputedName); + VirtualTableRecorder>::RecordVirtualTableAddress(vtableAddresses, VTableValue::VtableVirtualJavascriptGeneratorFunctionWithHomeObj); + VirtualTableRecorder>::RecordVirtualTableAddress(vtableAddresses, VTableValue::VtableVirtualJavascriptGeneratorFunctionWithComputedName); + VirtualTableRecorder>>::RecordVirtualTableAddress(vtableAddresses, VTableValue::VtableVirtualJavascriptGeneratorFunctionWithHomeObjAndComputedName); + VirtualTableRecorder::RecordVirtualTableAddress(vtableAddresses, VTableValue::VtableConcatStringMulti); VirtualTableRecorder::RecordVirtualTableAddress(vtableAddresses, VTableValue::VtableCompoundString); @@ -3118,10 +3653,6 @@ namespace Js typeDisplayStrings[typeId] = GetSymbolTypeDisplayString(); break; - case TypeIds_VariantDate: - typeDisplayStrings[typeId] = GetVariantDateTypeDisplayString(); - break; - case TypeIds_Integer: case TypeIds_Number: case TypeIds_Int64Number: @@ -3223,6 +3754,9 @@ namespace Js case PropertyIds::codePointAt: return BuiltinFunction::JavascriptString_CodePointAt; + case PropertyIds::at: + return BuiltinFunction::JavascriptArray_At; + case PropertyIds::push: return BuiltinFunction::JavascriptArray_Push; @@ -3316,9 +3850,15 @@ namespace Js case PropertyIds::trimLeft: return BuiltinFunction::JavascriptString_TrimLeft; + case PropertyIds::trimStart: + return BuiltinFunction::JavascriptString_TrimStart; + case PropertyIds::trimRight: return BuiltinFunction::JavascriptString_TrimRight; + case PropertyIds::trimEnd: + return BuiltinFunction::JavascriptString_TrimEnd; + case PropertyIds::padStart: return BuiltinFunction::JavascriptString_PadStart; @@ -3331,6 +3871,9 @@ namespace Js case PropertyIds::hasOwnProperty: return BuiltinFunction::JavascriptObject_HasOwnProperty; + case PropertyIds::hasOwn: + return BuiltinFunction::JavascriptObject_HasOwn; + default: return BuiltinFunction::None; } @@ -3473,6 +4016,25 @@ namespace Js return (flags != ImplicitCall_None) || arrayIteratorPrototypeNext != scriptContext->GetLibrary()->GetArrayIteratorPrototypeBuiltinNextFunction(); } + bool JavascriptLibrary::InitializeBigIntConstructor(DynamicObject* bigIntConstructor, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode) + { + const int numberOfProperties = 3; + typeHandler->Convert(bigIntConstructor, mode, numberOfProperties); + + // TODO(BigInt): Any new function addition/deletion/modification should also be updated in JavascriptLibrary::ProfilerRegisterBigInt + // so that the update is in sync with profiler + ScriptContext* scriptContext = bigIntConstructor->GetScriptContext(); + JavascriptLibrary* library = bigIntConstructor->GetLibrary(); + library->AddMember(bigIntConstructor, PropertyIds::length, TaggedInt::ToVarUnchecked(1), PropertyConfigurable); + library->AddMember(bigIntConstructor, PropertyIds::prototype, library->bigintPrototype, PropertyNone); + library->AddMember(bigIntConstructor, PropertyIds::name, scriptContext->GetPropertyString(PropertyIds::BigInt), PropertyConfigurable); + + bigIntConstructor->SetHasNoEnumerableProperties(true); + + return true; + } + + bool JavascriptLibrary::InitializeNumberConstructor(DynamicObject* numberConstructor, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode) { typeHandler->Convert(numberConstructor, mode, 17); @@ -3519,6 +4081,20 @@ namespace Js return true; } + bool JavascriptLibrary::InitializeBigIntPrototype(DynamicObject* bigIntPrototype, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode) + { + const int numberOfProperties = 1; + typeHandler->Convert(bigIntPrototype, mode, numberOfProperties); + // TODO(BigInt): Any new function addition/deletion/modification should also be updated in JavascriptLibrary::ProfilerRegisterBigInt + // so that the update is in sync with profiler + JavascriptLibrary* library = bigIntPrototype->GetLibrary(); + library->AddMember(bigIntPrototype, PropertyIds::constructor, library->bigIntConstructor); + + bigIntPrototype->SetHasNoEnumerableProperties(true); + + return true; + } + bool JavascriptLibrary::InitializeNumberPrototype(DynamicObject* numberPrototype, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode) { typeHandler->Convert(numberPrototype, mode, 8); @@ -3551,7 +4127,7 @@ namespace Js // so that the update is in sync with profiler JavascriptLibrary* library = objectConstructor->GetLibrary(); ScriptContext* scriptContext = objectConstructor->GetScriptContext(); - int propertyCount = 18; + int propertyCount = 19; if (scriptContext->GetConfig()->IsES6ObjectExtensionsEnabled()) { propertyCount += 2; @@ -3562,6 +4138,18 @@ namespace Js propertyCount++; } + if (scriptContext->GetConfig()->IsES7ValuesEntriesEnabled()) + { + propertyCount += 2; + } + +#ifdef ENABLE_JS_BUILTINS + if (scriptContext->IsJsBuiltInEnabled()) + { + propertyCount++; + } +#endif + typeHandler->Convert(objectConstructor, mode, propertyCount); library->AddMember(objectConstructor, PropertyIds::length, TaggedInt::ToVarUnchecked(1), PropertyConfigurable); @@ -3618,6 +4206,16 @@ namespace Js library->AddFunctionToLibraryObject(objectConstructor, PropertyIds::entries, &JavascriptObject::EntryInfo::Entries, 1)); } + scriptContext->SetBuiltInLibraryFunction(JavascriptObject::EntryInfo::HasOwn.GetOriginalEntryPoint(), + library->AddFunctionToLibraryObject(objectConstructor, PropertyIds::hasOwn, &JavascriptObject::EntryInfo::HasOwn, 2)); + +#ifdef ENABLE_JS_BUILTINS + if (scriptContext->IsJsBuiltInEnabled()) + { + EnsureBuiltInEngineIsReady(JsBuiltInFile::Object_constructor, scriptContext); + } +#endif + objectConstructor->SetHasNoEnumerableProperties(true); return true; @@ -3690,7 +4288,7 @@ namespace Js bool JavascriptLibrary::InitializeRegexPrototype(DynamicObject* regexPrototype, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode) { - typeHandler->Convert(regexPrototype, mode, 24); + typeHandler->Convert(regexPrototype, mode, 26); // Note: Any new function addition/deletion/modification should also be updated in JavascriptLibrary::ProfilerRegisterRegExp // so that the update is in sync with profiler JavascriptFunction * func; @@ -3743,9 +4341,18 @@ namespace Js { library->regexUnicodeGetterFunction = library->AddGetterToLibraryObject(regexPrototype, PropertyIds::unicode, &JavascriptRegExp::EntryInfo::GetterUnicode); - library->regexUnicodeGetterSlotIndex = 19; + library->regexUnicodeGetterSlotIndex = scriptConfig->IsES6RegExStickyEnabled() ? 19 : 17; Assert(regexPrototype->GetSlot(library->regexUnicodeGetterSlotIndex) == library->regexUnicodeGetterFunction); } + + if (scriptConfig->IsES2018RegExDotAllEnabled()) + { + library->regexDotAllGetterFunction = + library->AddGetterToLibraryObject(regexPrototype, PropertyIds::dotAll, &JavascriptRegExp::EntryInfo::GetterDotAll); + library->regexDotAllGetterSlotIndex = 21 - + (scriptConfig->IsES6UnicodeExtensionsEnabled() ? 0 : 2) - (scriptConfig->IsES6RegExStickyEnabled() ? 0 : 2); + Assert(regexPrototype->GetSlot(library->regexDotAllGetterSlotIndex) == library->regexDotAllGetterFunction); + } } if (scriptConfig->IsES6RegExSymbolsEnabled()) @@ -3815,7 +4422,7 @@ namespace Js bool JavascriptLibrary::InitializeStringPrototype(DynamicObject* stringPrototype, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode) { - typeHandler->Convert(stringPrototype, mode, 38); + typeHandler->Convert(stringPrototype, mode, 39); // Note: Any new function addition/deletion/modification should also be updated in JavascriptLibrary::ProfilerRegisterString // so that the update is in sync with profiler ScriptContext* scriptContext = stringPrototype->GetScriptContext(); @@ -3836,6 +4443,7 @@ namespace Js /* builtinFuncs[BuiltinFunction::String_Normalize] =*/library->AddFunctionToLibraryObject(stringPrototype, PropertyIds::normalize, &JavascriptString::EntryInfo::Normalize, 0); } + builtinFuncs[BuiltinFunction::JavascriptString_At] = library->AddFunctionToLibraryObject(stringPrototype, PropertyIds::at, &JavascriptString::EntryInfo::At, 1); builtinFuncs[BuiltinFunction::JavascriptString_CharAt] = library->AddFunctionToLibraryObject(stringPrototype, PropertyIds::charAt, &JavascriptString::EntryInfo::CharAt, 1); builtinFuncs[BuiltinFunction::JavascriptString_CharCodeAt] = library->AddFunctionToLibraryObject(stringPrototype, PropertyIds::charCodeAt, &JavascriptString::EntryInfo::CharCodeAt, 1); builtinFuncs[BuiltinFunction::JavascriptString_Concat] = library->AddFunctionToLibraryObject(stringPrototype, PropertyIds::concat, &JavascriptString::EntryInfo::Concat, 1); @@ -3876,8 +4484,10 @@ namespace Js /* No inlining String_StartsWith */ library->AddFunctionToLibraryObject(stringPrototype, PropertyIds::startsWith, &JavascriptString::EntryInfo::StartsWith, 1); /* No inlining String_EndsWith */ library->AddFunctionToLibraryObject(stringPrototype, PropertyIds::endsWith, &JavascriptString::EntryInfo::EndsWith, 1); /* No inlining String_Includes */ library->AddFunctionToLibraryObject(stringPrototype, PropertyIds::includes, &JavascriptString::EntryInfo::Includes, 1); - builtinFuncs[BuiltinFunction::JavascriptString_TrimLeft] = library->AddFunctionToLibraryObject(stringPrototype, PropertyIds::trimLeft, &JavascriptString::EntryInfo::TrimLeft, 0); - builtinFuncs[BuiltinFunction::JavascriptString_TrimRight] = library->AddFunctionToLibraryObject(stringPrototype, PropertyIds::trimRight, &JavascriptString::EntryInfo::TrimRight, 0); + builtinFuncs[BuiltinFunction::JavascriptString_TrimStart] = library->AddFunctionToLibraryObject(stringPrototype, PropertyIds::trimStart, &JavascriptString::EntryInfo::TrimStart, 0); + library->AddMember(stringPrototype, PropertyIds::trimLeft, builtinFuncs[BuiltinFunction::JavascriptString_TrimStart], PropertyBuiltInMethodDefaults); + builtinFuncs[BuiltinFunction::JavascriptString_TrimEnd] = library->AddFunctionToLibraryObject(stringPrototype, PropertyIds::trimEnd, &JavascriptString::EntryInfo::TrimEnd, 0); + library->AddMember(stringPrototype, PropertyIds::trimRight, builtinFuncs[BuiltinFunction::JavascriptString_TrimEnd], PropertyBuiltInMethodDefaults); } library->AddFunctionToLibraryObjectWithName(stringPrototype, PropertyIds::_symbolIterator, PropertyIds::_RuntimeFunctionNameId_iterator, &JavascriptString::EntryInfo::SymbolIterator, 0); @@ -4087,6 +4697,20 @@ namespace Js return true; } + bool JavascriptLibrary::InitializeAsyncIteratorPrototype(DynamicObject* asyncIteratorPrototype, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode) + { + typeHandler->Convert(asyncIteratorPrototype, mode, 1); + // Note: Any new function addition/deletion/modification should also be updated in JavascriptLibrary::ProfilerRegisterIterator + // so that the update is in sync with profiler + + JavascriptLibrary* library = asyncIteratorPrototype->GetLibrary(); + + library->AddFunctionToLibraryObjectWithName(asyncIteratorPrototype, PropertyIds::_symbolAsyncIterator, PropertyIds::_RuntimeFunctionNameId_asyncIterator, + &JavascriptIterator::EntryInfo::SymbolIterator, 0); + + return true; + } + bool JavascriptLibrary::InitializeArrayIteratorPrototype(DynamicObject* arrayIteratorPrototype, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode) { @@ -4197,7 +4821,8 @@ namespace Js } else { - objPrototype = Js::RecyclableObject::FromVar(prototype); + AssertOrFailFast(Js::VarIsCorrectType(prototype)); + objPrototype = prototype; Js::JavascriptOperators::InitProperty(objPrototype, Js::PropertyIds::constructor, function); objPrototype->SetEnumerable(Js::PropertyIds::constructor, false); } @@ -4235,7 +4860,12 @@ namespace Js return function; } - DynamicType* JavascriptLibrary::GetCachedJsrtExternalType(uintptr_t finalizeCallback) + JsrtExternalType* JavascriptLibrary::GetCachedJsrtExternalType( +#ifdef _CHAKRACOREBUILD + uintptr_t traceCallback, +#endif + uintptr_t finalizeCallback, + uintptr_t prototype) { RecyclerWeakReference* dynamicTypeWeakRef = nullptr; DynamicType* dynamicType = nullptr; @@ -4245,17 +4875,53 @@ namespace Js // Register for periodic cleanup scriptContext->RegisterWeakReferenceDictionary(jsrtExternalTypesCache); } - if (jsrtExternalTypesCache->TryGetValue(finalizeCallback, &dynamicTypeWeakRef)) + if (jsrtExternalTypesCache->TryGetValue(JsrtExternalCallbacks( +#ifdef _CHAKRACOREBUILD + traceCallback, +#endif + finalizeCallback, + prototype), &dynamicTypeWeakRef)) + { + dynamicType = dynamicTypeWeakRef->Get(); + } + return (JsrtExternalType*)dynamicType; + } + +#ifdef _CHAKRACOREBUILD + void JavascriptLibrary::CacheJsrtExternalType(uintptr_t traceCallback, uintptr_t finalizeCallback, uintptr_t prototype, JsrtExternalType* dynamicTypeToCache) + { + jsrtExternalTypesCache->Item(JsrtExternalCallbacks(traceCallback, finalizeCallback, prototype), recycler->CreateWeakReferenceHandle((DynamicType*)dynamicTypeToCache)); + } +#else + void JavascriptLibrary::CacheJsrtExternalType(uintptr_t finalizeCallback, uintptr_t prototype, JsrtExternalType* dynamicTypeToCache) + { + jsrtExternalTypesCache->Item(JsrtExternalCallbacks(finalizeCallback, prototype), recycler->CreateWeakReferenceHandle((DynamicType*)dynamicTypeToCache)); + } +#endif + +#ifdef _CHAKRACOREBUILD + DynamicType* JavascriptLibrary::GetCachedCustomExternalWrapperType(uintptr_t traceCallback, uintptr_t finalizeCallback, uintptr_t interceptors, uintptr_t prototype) + { + RecyclerWeakReference* dynamicTypeWeakRef = nullptr; + DynamicType* dynamicType = nullptr; + if (customExternalWrapperTypesCache == nullptr) + { + customExternalWrapperTypesCache = RecyclerNew(recycler, CustomExternalWrapperTypesCache, recycler, 3); + // Register for periodic cleanup + scriptContext->RegisterWeakReferenceDictionary(customExternalWrapperTypesCache); + } + if (customExternalWrapperTypesCache->TryGetValue(CustomExternalWrapperCallbacks(traceCallback, finalizeCallback, interceptors, prototype), &dynamicTypeWeakRef)) { dynamicType = dynamicTypeWeakRef->Get(); } return dynamicType; } - void JavascriptLibrary::CacheJsrtExternalType(uintptr_t finalizeCallback, DynamicType* dynamicTypeToCache) + void JavascriptLibrary::CacheCustomExternalWrapperType(uintptr_t traceCallback, uintptr_t finalizeCallback, uintptr_t interceptors, uintptr_t prototype, DynamicType* dynamicTypeToCache) { - jsrtExternalTypesCache->Item(finalizeCallback, recycler->CreateWeakReferenceHandle(dynamicTypeToCache)); + customExternalWrapperTypesCache->Item(CustomExternalWrapperCallbacks(traceCallback, finalizeCallback, interceptors, prototype), recycler->CreateWeakReferenceHandle(dynamicTypeToCache)); } +#endif void JavascriptLibrary::DefaultCreateFunction(ParseableFunctionInfo * functionInfo, int length, DynamicObject * prototype, PropertyId nameId) { @@ -4375,15 +5041,12 @@ namespace Js void JavascriptLibrary::AddSpeciesAccessorsToLibraryObject(DynamicObject* object, FunctionInfo * getterFunctionInfo) { - if (scriptContext->GetConfig()->IsES6SpeciesEnabled()) - { - AddAccessorsToLibraryObjectWithName(object, PropertyIds::_symbolSpecies, PropertyIds::_RuntimeFunctionNameId_species, getterFunctionInfo, nullptr); - } + AddAccessorsToLibraryObjectWithName(object, PropertyIds::_symbolSpecies, PropertyIds::_RuntimeFunctionNameId_species, getterFunctionInfo, nullptr); } RuntimeFunction* JavascriptLibrary::CreateGetterFunction(PropertyId nameId, FunctionInfo* functionInfo) { - Var name_withGetPrefix = LiteralString::Concat(LiteralString::NewCopySz(_u("get "), scriptContext), scriptContext->GetPropertyString(nameId)); + Var name_withGetPrefix = JavascriptString::Concat(GetGetterFunctionPrefixString(), scriptContext->GetPropertyString(nameId)); RuntimeFunction* getterFunction = DefaultCreateFunction(functionInfo, 0, nullptr, nullptr, name_withGetPrefix); getterFunction->SetPropertyWithAttributes(PropertyIds::length, TaggedInt::ToVarUnchecked(0), PropertyConfigurable, nullptr); return getterFunction; @@ -4391,7 +5054,7 @@ namespace Js RuntimeFunction* JavascriptLibrary::CreateSetterFunction(PropertyId nameId, FunctionInfo* functionInfo) { - Var name_withSetPrefix = LiteralString::Concat(LiteralString::NewCopySz(_u("set "), scriptContext), scriptContext->GetPropertyString(nameId)); + Var name_withSetPrefix = JavascriptString::Concat(GetSetterFunctionPrefixString(), scriptContext->GetPropertyString(nameId)); RuntimeFunction* setterFunction = DefaultCreateFunction(functionInfo, 0, nullptr, nullptr, name_withSetPrefix); setterFunction->SetPropertyWithAttributes(PropertyIds::length, TaggedInt::ToVarUnchecked(1), PropertyConfigurable, nullptr); return setterFunction; @@ -4435,12 +5098,12 @@ namespace Js return jsonStringifyFunction; } -#if defined(ENABLE_INTL_OBJECT) || defined(ENABLE_JS_BUILTINS) || defined(ENABLE_PROJECTION) +#if defined(ENABLE_INTL_OBJECT) || defined(ENABLE_JS_BUILTINS) bool JavascriptLibrary::InitializeEngineInterfaceObject(DynamicObject* engineInterface, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode) { typeHandler->Convert(engineInterface, mode, 3); - EngineInterfaceObject::FromVar(engineInterface)->Initialize(); + VarTo(engineInterface)->Initialize(); engineInterface->SetHasNoEnumerableProperties(true); @@ -4490,7 +5153,7 @@ namespace Js void JavascriptLibrary::EnqueueTask(Var taskVar) { - Assert(JavascriptFunction::Is(taskVar)); + Assert(VarIs(taskVar)); if(this->nativeHostPromiseContinuationFunction) { @@ -4581,49 +5244,14 @@ namespace Js #ifdef ENABLE_JS_BUILTINS - bool JavascriptLibrary::InitializeBuiltInObject(DynamicObject* builtInObject, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode) - { - typeHandler->Convert(builtInObject, mode, /*initSlotCapacity*/ 2); - - if (builtInObject->GetScriptContext()->IsJsBuiltInEnabled()) - { - auto builtInInitializer = [&](JsBuiltInEngineInterfaceExtensionObject* builtInExtension, ScriptContext * scriptContext) -> void - { - builtInExtension->InjectJsBuiltInLibraryCode(scriptContext); - }; - builtInObject->GetLibrary()->InitializeBuiltInForPrototypes(builtInInitializer); - } - return true; - } - - void JavascriptLibrary::EnsureBuiltInEngineIsReady() - { - if (scriptContext->IsJsBuiltInEnabled()) - { - auto builtInInitializer = [&](JsBuiltInEngineInterfaceExtensionObject* builtInExtension, ScriptContext * scriptContext) -> void - { - builtInExtension->InjectJsBuiltInLibraryCode(scriptContext); - }; - scriptContext->GetLibrary()->InitializeBuiltInForPrototypes(builtInInitializer); - } - } - - template - void JavascriptLibrary::InitializeBuiltInForPrototypes(Fn fn) - { - if (scriptContext->VerifyAlive()) // Can't initialize if scriptContext closed, will need to run script - { - Assert(engineInterfaceObject != nullptr); - JsBuiltInEngineInterfaceExtensionObject* builtInExtension = static_cast(GetEngineInterfaceObject()->GetEngineExtension(EngineInterfaceExtensionKind_JsBuiltIn)); - fn(builtInExtension, scriptContext); - } - } - bool JavascriptLibrary::InitializeChakraLibraryObject(DynamicObject * chakraLibraryObject, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode) { JavascriptLibrary* library = chakraLibraryObject->GetLibrary(); typeHandler->Convert(chakraLibraryObject, mode, 8); + Field(JavascriptFunction*)* builtinFuncs = library->GetBuiltinFunctions(); + JavascriptFunction * func = nullptr; + library->AddFunctionToLibraryObject(chakraLibraryObject, PropertyIds::toLength, &JsBuiltInEngineInterfaceExtensionObject::EntryInfo::JsBuiltIn_Internal_ToLengthFunction, 1); library->AddFunctionToLibraryObject(chakraLibraryObject, PropertyIds::toInteger, &JsBuiltInEngineInterfaceExtensionObject::EntryInfo::JsBuiltIn_Internal_ToIntegerFunction, 1); library->AddFunctionToLibraryObject(chakraLibraryObject, PropertyIds::GetLength, &JsBuiltInEngineInterfaceExtensionObject::EntryInfo::JsBuiltIn_Internal_GetLength, 1); @@ -4632,6 +5260,8 @@ namespace Js library->AddMember(chakraLibraryObject, PropertyIds::Object, library->objectConstructor); library->AddFunctionToLibraryObject(chakraLibraryObject, PropertyIds::arraySpeciesCreate, &JsBuiltInEngineInterfaceExtensionObject::EntryInfo::JsBuiltIn_Internal_ArraySpeciesCreate, 2); library->AddFunctionToLibraryObject(chakraLibraryObject, PropertyIds::arrayCreateDataPropertyOrThrow, &JsBuiltInEngineInterfaceExtensionObject::EntryInfo::JsBuiltIn_Internal_ArrayCreateDataPropertyOrThrow, 3); + func = library->AddFunctionToLibraryObject(chakraLibraryObject, PropertyIds::builtInCallInstanceFunction, &EngineInterfaceObject::EntryInfo::CallInstanceFunction, 1); + builtinFuncs[BuiltinFunction::EngineInterfaceObject_CallInstanceFunction] = func; return true; } @@ -4773,7 +5403,7 @@ namespace Js #if ENABLE_TTD Js::PropertyId JavascriptLibrary::ExtractPrimitveSymbolId_TTD(Var value) { - return Js::JavascriptSymbol::FromVar(value)->GetValue()->GetPropertyId(); + return Js::VarTo(value)->GetValue()->GetPropertyId(); } Js::RecyclableObject* JavascriptLibrary::CreatePrimitveSymbol_TTD(Js::PropertyId pid) @@ -4809,16 +5439,16 @@ namespace Js switch(obj->GetTypeId()) { case Js::TypeIds_BooleanObject: - Js::JavascriptBooleanObject::FromVar(obj)->SetValue_TTD(value); + Js::VarTo(obj)->SetValue_TTD(value); break; case Js::TypeIds_NumberObject: - Js::JavascriptNumberObject::FromVar(obj)->SetValue_TTD(value); + Js::VarTo(obj)->SetValue_TTD(value); break; case Js::TypeIds_StringObject: - Js::JavascriptStringObject::FromVar(obj)->SetValue_TTD(value); + Js::VarTo(obj)->SetValue_TTD(value); break; case Js::TypeIds_SymbolObject: - Js::JavascriptSymbolObject::FromVar(obj)->SetValue_TTD(value); + Js::VarTo(obj)->SetValue_TTD(value); break; default: TTDAssert(false, "Unsupported nullptr value boxed object."); @@ -4854,7 +5484,7 @@ namespace Js void JavascriptLibrary::SetLengthWritableES5Array_TTD(Js::RecyclableObject* es5Array, bool isLengthWritable) { - Js::ES5Array* es5a = Js::ES5Array::FromVar(es5Array); + Js::ES5Array* es5a = Js::VarTo(es5Array); if(es5a->IsLengthWritable() != isLengthWritable) { es5a->SetWritable(Js::PropertyIds::length, isLengthWritable ? TRUE : FALSE); @@ -4878,9 +5508,9 @@ namespace Js void JavascriptLibrary::AddWeakSetElementInflate_TTD(Js::JavascriptWeakSet* set, Var value) { - set->GetScriptContext()->TTDContextInfo->TTDWeakReferencePinSet->Add(Js::DynamicObject::FromVar(value)); + set->GetScriptContext()->TTDContextInfo->TTDWeakReferencePinSet->Add(Js::VarTo(value)); - set->Add(Js::DynamicObject::FromVar(value)); + set->Add(Js::VarTo(value)); } Js::RecyclableObject* JavascriptLibrary::CreateMap_TTD() @@ -4900,9 +5530,9 @@ namespace Js void JavascriptLibrary::AddWeakMapElementInflate_TTD(Js::JavascriptWeakMap* map, Var key, Var value) { - map->GetScriptContext()->TTDContextInfo->TTDWeakReferencePinSet->Add(Js::DynamicObject::FromVar(key)); + map->GetScriptContext()->TTDContextInfo->TTDWeakReferencePinSet->Add(Js::VarTo(key)); - map->Set(Js::DynamicObject::FromVar(key), value); + map->Set(Js::VarTo(key), value); } Js::RecyclableObject* JavascriptLibrary::CreateExternalFunction_TTD(Js::Var fname) @@ -5008,7 +5638,7 @@ namespace Js Js::RecyclableObject* JavascriptLibrary::CreatePromiseResolveOrRejectFunction_TTD(RecyclableObject* promise, bool isReject, JavascriptPromiseResolveOrRejectFunctionAlreadyResolvedWrapper* alreadyResolved) { - TTDAssert(JavascriptPromise::Is(promise), "Not a promise!"); + TTDAssert(VarIs(promise), "Not a promise!"); return this->CreatePromiseResolveOrRejectFunction(JavascriptPromise::EntryResolveOrRejectFunction, static_cast(promise), isReject, alreadyResolved); } @@ -5028,12 +5658,27 @@ namespace Js Js::RecyclableObject* JavascriptLibrary::CreatePromiseAllResolveElementFunction_TTD(Js::JavascriptPromiseCapability* capabilities, uint32 index, Js::JavascriptPromiseAllResolveElementFunctionRemainingElementsWrapper* wrapper, Js::RecyclableObject* values, bool alreadyCalled) { - Js::JavascriptPromiseAllResolveElementFunction* res = this->CreatePromiseAllResolveElementFunction(JavascriptPromise::EntryAllResolveElementFunction, index, Js::JavascriptArray::FromVar(values), capabilities, wrapper); + Js::JavascriptPromiseAllResolveElementFunction* res = this->CreatePromiseAllResolveElementFunction(JavascriptPromise::EntryAllResolveElementFunction, index, Js::VarTo(values), capabilities, wrapper); res->SetAlreadyCalled(alreadyCalled); return res; } + JavascriptPromiseResolveOrRejectFunctionAlreadyResolvedWrapper* JavascriptLibrary::CreateAlreadyCalledWrapper_TTD(Js::ScriptContext* ctx, bool value) + { + JavascriptPromiseResolveOrRejectFunctionAlreadyResolvedWrapper* alreadyCalledWrapper = RecyclerNewStructZ(ctx->GetRecycler(), JavascriptPromiseResolveOrRejectFunctionAlreadyResolvedWrapper); + alreadyCalledWrapper->alreadyResolved = value; + + return alreadyCalledWrapper; + } + + Js::RecyclableObject* JavascriptLibrary::CreatePromiseAllSettledResolveOrRejectElementFunction_TTD(Js::JavascriptPromiseCapability* capabilities, uint32 index, Js::JavascriptPromiseAllResolveElementFunctionRemainingElementsWrapper* wrapper, Js::RecyclableObject* values, JavascriptPromiseResolveOrRejectFunctionAlreadyResolvedWrapper* alreadyCalledWrapper, bool isRejecting) + { + Js::JavascriptPromiseAllSettledResolveOrRejectElementFunction* res = this->CreatePromiseAllSettledResolveOrRejectElementFunction(JavascriptPromise::EntryAllSettledResolveOrRejectElementFunction, index, Js::VarTo(values), capabilities, wrapper, alreadyCalledWrapper, isRejecting); + + return res; + } + Js::RecyclableObject* JavascriptLibrary::CreateJavascriptGenerator_TTD(Js::ScriptContext *ctx, Js::RecyclableObject *prototype, Js::Arguments &arguments, Js::JavascriptGenerator::GeneratorState generatorState) @@ -5049,11 +5694,7 @@ namespace Js { Assert(function->GetDynamicType()->GetIsLocked()); - if (ScriptFunction::Is(function)) - { - this->SetCrossSiteForLockedNonBuiltInFunctionType(function); - } - else if (BoundFunction::Is(function)) + if (VarIs(function) || VarIs(function)) { this->SetCrossSiteForLockedNonBuiltInFunctionType(function); } @@ -5065,6 +5706,11 @@ namespace Js { function->ReplaceType(crossSiteDeferredPrototypeFunctionType); } + else if (typeHandler == JavascriptLibrary::GetDeferredFunctionTypeHandler() + || typeHandler == JavascriptLibrary::GetDeferredFunctionWithLengthTypeHandler()) + { + function->ReplaceType(crossSiteDeferredFunctionType); + } else if (typeHandler == Js::DeferredTypeHandler::GetDefaultInstance()) { function->ReplaceType(crossSiteExternalConstructFunctionWithPrototypeType); @@ -5082,16 +5728,58 @@ namespace Js void JavascriptLibrary::SetCrossSiteForLockedNonBuiltInFunctionType(JavascriptFunction * function) { + FunctionProxy * functionProxy = function->GetFunctionProxy(); DynamicTypeHandler *typeHandler = function->GetTypeHandler(); - if (typeHandler->IsPathTypeHandler()) + if (typeHandler->IsDeferredTypeHandler()) { - PathTypeHandlerBase::FromTypeHandler(typeHandler)->ConvertToNonShareableTypeHandler(function); + if (functionProxy && functionProxy->GetCrossSiteDeferredFunctionType()) + { + function->ReplaceType(functionProxy->GetCrossSiteDeferredFunctionType()); + } + else + { + function->ChangeType(); + function->SetEntryPoint(scriptContext->CurrentCrossSiteThunk); + if (functionProxy && functionProxy->HasParseableInfo() && !PHASE_OFF1(ShareCrossSiteFuncTypesPhase)) + { + function->ShareType(); + functionProxy->SetCrossSiteDeferredFunctionType(UnsafeVarTo(function)->GetScriptFunctionType()); + } + } } - else + else { - function->ChangeType(); + if (functionProxy && functionProxy->GetCrossSiteUndeferredFunctionType()) + { + function->ReplaceType(functionProxy->GetCrossSiteUndeferredFunctionType()); + } + else + { + if (typeHandler->IsPathTypeHandler()) + { + if (!PHASE_OFF1(ShareCrossSiteFuncTypesPhase)) + { + DynamicType *type = function->DuplicateType(); + PathTypeHandlerBase::FromTypeHandler(typeHandler)->BuildPathTypeFromNewRoot(function, &type); + function->ReplaceType(type); + } + else + { + PathTypeHandlerBase::FromTypeHandler(typeHandler)->ConvertToNonShareableTypeHandler(function); + } + } + else + { + function->ChangeType(); + } + function->SetEntryPoint(scriptContext->CurrentCrossSiteThunk); + if (functionProxy && functionProxy->HasParseableInfo() && function->GetTypeHandler()->GetMayBecomeShared() && !PHASE_OFF1(ShareCrossSiteFuncTypesPhase)) + { + function->ShareType(); + functionProxy->SetCrossSiteUndeferredFunctionType(UnsafeVarTo(function)->GetScriptFunctionType()); + } + } } - function->SetEntryPoint(scriptContext->CurrentCrossSiteThunk); } JavascriptExternalFunction* @@ -5124,77 +5812,21 @@ namespace Js return function; } - void JavascriptLibrary::EnsureStringTemplateCallsiteObjectList() +#if DBG_DUMP + const char16* JavascriptLibrary::GetStringTemplateCallsiteObjectKey(Var callsite) { - if (this->stringTemplateCallsiteObjectList == nullptr) - { - this->stringTemplateCallsiteObjectList = RecyclerNew(GetRecycler(), StringTemplateCallsiteObjectList, GetRecycler()); - } - } + // Calculate the key for the string template callsite object. + // Key is combination of the raw string literals delimited by '${}' since string template literals cannot include that symbol. + // `str1${expr1}str2${expr2}str3` => "str1${}str2${}str3" - void JavascriptLibrary::AddStringTemplateCallsiteObject(RecyclableObject* callsite) - { - this->EnsureStringTemplateCallsiteObjectList(); + ES5Array* callsiteObj = VarTo(callsite); + ScriptContext* scriptContext = callsiteObj->GetScriptContext(); - RecyclerWeakReference* callsiteRef = this->GetRecycler()->CreateWeakReferenceHandle(callsite); - - this->stringTemplateCallsiteObjectList->Item(callsiteRef); - } - - RecyclableObject* JavascriptLibrary::TryGetStringTemplateCallsiteObject(ParseNodePtr pnode) - { - this->EnsureStringTemplateCallsiteObjectList(); - - RecyclerWeakReference* callsiteRef = this->stringTemplateCallsiteObjectList->LookupWithKey(pnode); - - if (callsiteRef) - { - RecyclableObject* callsite = callsiteRef->Get(); - - if (callsite) - { - return callsite; - } - } - - return nullptr; - } - - RecyclableObject* JavascriptLibrary::TryGetStringTemplateCallsiteObject(RecyclableObject* callsite) - { - this->EnsureStringTemplateCallsiteObjectList(); - - RecyclerWeakReference* callsiteRef = this->GetRecycler()->CreateWeakReferenceHandle(callsite); - RecyclerWeakReference* existingCallsiteRef = this->stringTemplateCallsiteObjectList->LookupWithKey(callsiteRef); - - if (existingCallsiteRef) - { - RecyclableObject* existingCallsite = existingCallsiteRef->Get(); - - if (existingCallsite) - { - return existingCallsite; - } - } - - return nullptr; - } - -#if DBG_DUMP - const char16* JavascriptLibrary::GetStringTemplateCallsiteObjectKey(Var callsite) - { - // Calculate the key for the string template callsite object. - // Key is combination of the raw string literals delimited by '${}' since string template literals cannot include that symbol. - // `str1${expr1}str2${expr2}str3` => "str1${}str2${}str3" - - ES5Array* callsiteObj = ES5Array::FromVar(callsite); - ScriptContext* scriptContext = callsiteObj->GetScriptContext(); - - Var var = JavascriptOperators::OP_GetProperty(callsiteObj, Js::PropertyIds::raw, scriptContext); - ES5Array* rawArray = ES5Array::FromVar(var); - uint32 arrayLength = rawArray->GetLength(); - uint32 totalStringLength = 0; - JavascriptString* str; + Var var = JavascriptOperators::OP_GetProperty(callsiteObj, Js::PropertyIds::raw, scriptContext); + ES5Array* rawArray = VarTo(var); + uint32 arrayLength = rawArray->GetLength(); + uint32 totalStringLength = 0; + JavascriptString* str; Assert(arrayLength != 0); @@ -5202,7 +5834,7 @@ namespace Js for (uint32 i = 0; i < arrayLength; i++) { rawArray->DirectGetItemAt(i, &var); - str = JavascriptString::FromVar(var); + str = VarTo(var); totalStringLength += str->GetLength(); } @@ -5213,7 +5845,7 @@ namespace Js // Get first item before loop - there always must be at least one item rawArray->DirectGetItemAt(0, &var); - str = JavascriptString::FromVar(var); + str = VarTo(var); charcount_t len = str->GetLength(); js_wmemcpy_s(ptr, remainingSpace, str->GetString(), len); @@ -5229,7 +5861,7 @@ namespace Js remainingSpace -= len; rawArray->DirectGetItemAt(i, &var); - str = JavascriptString::FromVar(var); + str = VarTo(var); len = str->GetLength(); js_wmemcpy_s(ptr, remainingSpace, str->GetString(), len); @@ -5244,290 +5876,7 @@ namespace Js } #endif - bool StringTemplateCallsiteObjectComparer::Equals(ParseNodePtr x, RecyclerWeakReference* y) - { - Assert(x != nullptr); - Assert(x->nop == knopStrTemplate); - - Js::RecyclableObject* obj = y->Get(); - - // If the weak reference is dead, we can't be equal. - if (obj == nullptr) - { - return false; - } - - Js::ES5Array* callsite = Js::ES5Array::FromVar(obj); - uint32 length = callsite->GetLength(); - Js::Var element; - Js::JavascriptString* str; - IdentPtr pid; - - // If the length of string literals is different, these callsite objects are not equal. - if (x->AsParseNodeStrTemplate()->countStringLiterals != length) - { - return false; - } - - JS_REENTRANCY_LOCK(reentrancyLock, callsite->GetScriptContext()->GetThreadContext()); - Unused(reentrancyLock); - - element = Js::JavascriptOperators::OP_GetProperty(callsite, Js::PropertyIds::raw, callsite->GetScriptContext()); - Js::ES5Array* rawArray = Js::ES5Array::FromVar(element); - - // Length of the raw strings should be the same as the cooked string literals. - AssertOrFailFast(length != 0 && length == rawArray->GetLength()); - - x = x->AsParseNodeStrTemplate()->pnodeStringRawLiterals; - - for (uint32 i = 0; i < length - 1; i++) - { - BOOL hasElem = rawArray->DirectGetItemAt(i, &element); - AssertOrFailFast(hasElem); - str = Js::JavascriptString::FromVar(element); - - Assert(x->nop == knopList); - Assert(x->AsParseNodeBin()->pnode1->nop == knopStr); - - pid = x->AsParseNodeBin()->pnode1->AsParseNodeStr()->pid; - - // If strings have different length, they aren't equal - if (pid->Cch() != str->GetLength()) - { - return false; - } - - // If the strings at this index are not equal, the callsite objects are not equal. - if (!JsUtil::CharacterBuffer::StaticEquals(pid->Psz(), str->GetString(), str->GetLength())) - { - return false; - } - - x = x->AsParseNodeBin()->pnode2; - } - - // There should be one more string in the callsite array - and the final string in the ParseNode - - BOOL hasLastElem = rawArray->DirectGetItemAt(length - 1, &element); - AssertOrFailFast(hasLastElem); - str = Js::JavascriptString::FromVar(element); - - Assert(x->nop == knopStr); - pid = x->AsParseNodeStr()->pid; - - // If strings have different length, they aren't equal - if (pid->Cch() != str->GetLength()) - { - return false; - } - - // If the strings at this index are not equal, the callsite objects are not equal. - if (!JsUtil::CharacterBuffer::StaticEquals(pid->Psz(), str->GetString(), str->GetLength())) - { - return false; - } - - return true; - } - - bool StringTemplateCallsiteObjectComparer::Equals(ParseNodePtr x, ParseNodePtr y) - { - Assert(x != nullptr && y != nullptr); - Assert(x->nop == knopStrTemplate && y->nop == knopStrTemplate); - - // If the ParseNode is the same, they are equal. - if (x == y) - { - return true; - } - - x = x->AsParseNodeStrTemplate()->pnodeStringRawLiterals; - y = y->AsParseNodeStrTemplate()->pnodeStringRawLiterals; - - // If one of the templates only includes one string value, the raw literals ParseNode will - // be a knopStr instead of knopList. - if (x->nop != y->nop) - { - return false; - } - - const char16* pid_x; - const char16* pid_y; - - while (x->nop == knopList) - { - // If y is knopStr here, that means x has more strings in the list than y does. - if (y->nop != knopList) - { - return false; - } - - Assert(x->AsParseNodeBin()->pnode1->nop == knopStr); - Assert(y->AsParseNodeBin()->pnode1->nop == knopStr); - - pid_x = x->AsParseNodeBin()->pnode1->AsParseNodeStr()->pid->Psz(); - pid_y = y->AsParseNodeBin()->pnode1->AsParseNodeStr()->pid->Psz(); - - // If the pid values of each raw string don't match each other, these are different. - if (!DefaultComparer::Equals(pid_x, pid_y)) - { - return false; - } - - x = x->AsParseNodeBin()->pnode2; - y = y->AsParseNodeBin()->pnode2; - } - - // If y is still knopList here, that means y has more strings in the list than x does. - if (y->nop != knopStr) - { - return false; - } - - Assert(x->nop == knopStr); - - pid_x = x->AsParseNodeStr()->pid->Psz(); - pid_y = y->AsParseNodeStr()->pid->Psz(); - - // This is the final string in the raw literals list. Return true if they are equal. - return DefaultComparer::Equals(pid_x, pid_y); - } - - hash_t StringTemplateCallsiteObjectComparer::GetHashCode(ParseNodePtr i) - { - hash_t hash = 0; - - Assert(i != nullptr); - Assert(i->nop == knopStrTemplate); - - i = i->AsParseNodeStrTemplate()->pnodeStringRawLiterals; - - const char16* pid; - - while (i->nop == knopList) - { - Assert(i->AsParseNodeBin()->pnode1->nop == knopStr); - - pid = i->AsParseNodeBin()->pnode1->AsParseNodeStr()->pid->Psz(); - - hash ^= DefaultComparer::GetHashCode(pid); - hash ^= DefaultComparer::GetHashCode(_u("${}")); - - i = i->AsParseNodeBin()->pnode2; - } - - Assert(i->nop == knopStr); - - pid = i->AsParseNodeStr()->pid->Psz(); - - hash ^= DefaultComparer::GetHashCode(pid); - - return hash; - } - - bool StringTemplateCallsiteObjectComparer*>::Equals(RecyclerWeakReference* x, ParseNodePtr y) - { - return StringTemplateCallsiteObjectComparer::Equals(y, x); - } - - bool StringTemplateCallsiteObjectComparer*>::Equals(RecyclerWeakReference* x, RecyclerWeakReference* y) - { - Js::RecyclableObject* objLeft = x->Get(); - Js::RecyclableObject* objRight = y->Get(); - - // If either WeakReference is dead, we can't be equal to anything. - if (objLeft == nullptr || objRight == nullptr) - { - return false; - } - - // If the Var pointers are the same, they are equal. - if (objLeft == objRight) - { - return true; - } - - Js::ES5Array* arrayLeft = Js::ES5Array::FromVar(objLeft); - Js::ES5Array* arrayRight = Js::ES5Array::FromVar(objRight); - uint32 lengthLeft = arrayLeft->GetLength(); - uint32 lengthRight = arrayRight->GetLength(); - Js::Var varLeft; - Js::Var varRight; - - // If the length of string literals is different, these callsite objects are not equal. - if (lengthLeft != lengthRight) - { - return false; - } - - AssertOrFailFast(lengthLeft != 0 && lengthRight != 0); - - JS_REENTRANCY_LOCK(reentrancyLock, arrayLeft->GetScriptContext()->GetThreadContext()); - Unused(reentrancyLock); - - // Change to the set of raw strings. - varLeft = Js::JavascriptOperators::OP_GetProperty(arrayLeft, Js::PropertyIds::raw, arrayLeft->GetScriptContext()); - arrayLeft = Js::ES5Array::FromVar(varLeft); - varRight = Js::JavascriptOperators::OP_GetProperty(arrayRight, Js::PropertyIds::raw, arrayRight->GetScriptContext()); - arrayRight = Js::ES5Array::FromVar(varRight); - - // Length of the raw strings should be the same as the cooked string literals. - AssertOrFailFast(lengthLeft == arrayLeft->GetLength()); - AssertOrFailFast(lengthRight == arrayRight->GetLength()); - - for (uint32 i = 0; i < lengthLeft; i++) - { - BOOL hasLeft = arrayLeft->DirectGetItemAt(i, &varLeft); - AssertOrFailFast(hasLeft); - BOOL hasRight = arrayRight->DirectGetItemAt(i, &varRight); - AssertOrFailFast(hasRight); - - // If the strings at this index are not equal, the callsite objects are not equal. - if (!Js::JavascriptString::Equals(JavascriptString::FromVar(varLeft), JavascriptString::FromVar(varRight))) - { - return false; - } - } - - return true; - } - - hash_t StringTemplateCallsiteObjectComparer*>::GetHashCode(RecyclerWeakReference* o) - { - hash_t hash = 0; - - Js::RecyclableObject* obj = o->Get(); - - if (obj == nullptr) - { - return hash; - } - JS_REENTRANCY_LOCK(reentrancyLock, obj->GetScriptContext()->GetThreadContext()); - Unused(reentrancyLock); - - Js::ES5Array* callsite = Js::ES5Array::FromVar(obj); - Js::Var var = Js::JavascriptOperators::OP_GetProperty(callsite, Js::PropertyIds::raw, callsite->GetScriptContext()); - Js::ES5Array* rawArray = Js::ES5Array::FromVar(var); - - AssertOrFailFast(rawArray->GetLength() > 0); - - rawArray->DirectGetItemAt(0, &var); - Js::JavascriptString* str = Js::JavascriptString::FromVar(var); - hash ^= DefaultComparer::GetHashCode(str->GetSz()); - - for (uint32 i = 1; i < rawArray->GetLength(); i++) - { - hash ^= DefaultComparer::GetHashCode(_u("${}")); - - BOOL hasItem = rawArray->DirectGetItemAt(i, &var); - AssertOrFailFast(hasItem); - str = Js::JavascriptString::FromVar(var); - hash ^= DefaultComparer::GetHashCode(str->GetSz()); - } - - return hash; - } DynamicType * JavascriptLibrary::GetObjectLiteralType(uint16 requestedInlineSlotCapacity) { @@ -5833,30 +6182,55 @@ namespace Js return RecyclerNew(this->GetRecycler(), JavascriptPromise, promiseType); } - JavascriptPromiseAsyncSpawnExecutorFunction* JavascriptLibrary::CreatePromiseAsyncSpawnExecutorFunction(JavascriptGenerator* generator, Var target) - { - JavascriptMethod entryPoint = JavascriptPromise::EntryJavascriptPromiseAsyncSpawnExecutorFunction; - FunctionInfo* functionInfo = RecyclerNew(this->GetRecycler(), FunctionInfo, entryPoint); - DynamicType* type = CreateDeferredPrototypeFunctionType(this->inDispatchProfileMode ? ProfileEntryThunk : entryPoint); - JavascriptPromiseAsyncSpawnExecutorFunction* function = RecyclerNewEnumClass(this->GetRecycler(), EnumFunctionClass, JavascriptPromiseAsyncSpawnExecutorFunction, type, functionInfo, generator, target); - - return function; - } - - JavascriptPromiseAsyncSpawnStepArgumentExecutorFunction* JavascriptLibrary::CreatePromiseAsyncSpawnStepArgumentExecutorFunction(JavascriptMethod entryPoint, JavascriptGenerator* generator, Var argument, Var resolve, Var reject, bool isReject) + JavascriptAsyncSpawnStepFunction* JavascriptLibrary::CreateAsyncSpawnStepFunction( + JavascriptMethod entryPoint, + JavascriptGenerator* generator, + Var argument, + Var resolve, + Var reject, + bool isReject) + { + FunctionInfo* functionInfo = RecyclerNew(GetRecycler(), FunctionInfo, entryPoint); + DynamicType* type = CreateDeferredPrototypeFunctionType( + this->inDispatchProfileMode ? ProfileEntryThunk : entryPoint); + + return RecyclerNewEnumClass( + GetRecycler(), + EnumFunctionClass, + JavascriptAsyncSpawnStepFunction, + type, + functionInfo, + generator, + argument, + resolve, + reject, + isReject); + } + + JavascriptGenerator* JavascriptLibrary::CreateGenerator( + Arguments& args, + ScriptFunction* scriptFunction, + RecyclableObject* prototype) { - FunctionInfo* functionInfo = RecyclerNew(this->GetRecycler(), FunctionInfo, entryPoint); - DynamicType* type = CreateDeferredPrototypeFunctionType(this->inDispatchProfileMode ? ProfileEntryThunk : entryPoint); - JavascriptPromiseAsyncSpawnStepArgumentExecutorFunction* function = RecyclerNewEnumClass(this->GetRecycler(), EnumFunctionClass, JavascriptPromiseAsyncSpawnStepArgumentExecutorFunction, type, functionInfo, generator, argument, resolve, reject, isReject); - - return function; + Assert(scriptContext->GetConfig()->IsES6GeneratorsEnabled()); + return JavascriptGenerator::New( + GetRecycler(), + CreateGeneratorType(prototype), + args, + scriptFunction); } - JavascriptGenerator* JavascriptLibrary::CreateGenerator(Arguments& args, ScriptFunction* scriptFunction, RecyclableObject* prototype) + JavascriptAsyncGenerator* JavascriptLibrary::CreateAsyncGenerator( + Arguments& args, + ScriptFunction* scriptFunction, + RecyclableObject* prototype) { - Assert(scriptContext->GetConfig()->IsES6GeneratorsEnabled()); - DynamicType* generatorType = CreateGeneratorType(prototype); - return JavascriptGenerator::New(this->GetRecycler(), generatorType, args, scriptFunction); + Assert(scriptContext->GetConfig()->IsES2018AsyncIterationEnabled()); + return JavascriptAsyncGenerator::New( + GetRecycler(), + CreateAsyncGeneratorType(prototype), + args, + scriptFunction); } JavascriptError* JavascriptLibrary::CreateError() @@ -5923,6 +6297,9 @@ namespace Js case kjstURIError: baseErrorType = uriErrorType; break; + case kjstAggregateError: + baseErrorType = aggregateErrorType; + break; case kjstWebAssemblyCompileError: baseErrorType = webAssemblyCompileErrorType; break; @@ -5954,6 +6331,7 @@ namespace Js CREATE_ERROR(SyntaxError, syntaxErrorType, kjstSyntaxError); CREATE_ERROR(TypeError, typeErrorType, kjstTypeError); CREATE_ERROR(URIError, uriErrorType, kjstURIError); + CREATE_ERROR(AggregateError, aggregateErrorType, kjstAggregateError); CREATE_ERROR(WebAssemblyCompileError, webAssemblyCompileErrorType, kjstWebAssemblyCompileError); CREATE_ERROR(WebAssemblyRuntimeError, webAssemblyRuntimeErrorType, kjstWebAssemblyRuntimeError); CREATE_ERROR(WebAssemblyLinkError, webAssemblyLinkErrorType, kjstWebAssemblyLinkError); @@ -5989,23 +6367,23 @@ namespace Js ScriptFunction* JavascriptLibrary::CreateScriptFunction(FunctionProxy * proxy) { - ScriptFunctionType* deferredPrototypeType = proxy->EnsureDeferredPrototypeType(); + ScriptFunctionType * type = proxy->IsClassConstructor() && proxy->GetUndeferredFunctionType() ? proxy->GetUndeferredFunctionType() : proxy->EnsureDeferredPrototypeType(); FunctionInfo* functionInfo = proxy->GetFunctionInfo(); if (functionInfo->HasComputedName() || functionInfo->HasHomeObj()) { if (functionInfo->HasComputedName() && functionInfo->HasHomeObj()) { - return RecyclerNewEnumClass(this->GetRecycler(), EnumFunctionClass, FunctionWithComputedName>, proxy, deferredPrototypeType); + return RecyclerNewEnumClass(this->GetRecycler(), EnumFunctionClass, FunctionWithComputedName>, proxy, type); } else if (functionInfo->HasHomeObj()) { - return RecyclerNewEnumClass(this->GetRecycler(), EnumFunctionClass, FunctionWithHomeObj, proxy, deferredPrototypeType); + return RecyclerNewEnumClass(this->GetRecycler(), EnumFunctionClass, FunctionWithHomeObj, proxy, type); } // Has computed Name - return RecyclerNewWithInfoBits(this->GetRecycler(), EnumFunctionClass, ScriptFunctionWithComputedName, proxy, deferredPrototypeType); + return RecyclerNewWithInfoBits(this->GetRecycler(), EnumFunctionClass, ScriptFunctionWithComputedName, proxy, type); } - return RecyclerNewEnumClass(this->GetRecycler(), EnumFunctionClass, ScriptFunction, proxy, deferredPrototypeType); + return RecyclerNewEnumClass(this->GetRecycler(), EnumFunctionClass, ScriptFunction, proxy, type); } AsmJsScriptFunction* JavascriptLibrary::CreateAsmJsScriptFunction(FunctionProxy * proxy) @@ -6072,12 +6450,124 @@ namespace Js return DynamicType::New(scriptContext, TypeIds_Generator, prototype, nullptr, NullTypeHandler::GetDefaultInstance()); } + DynamicType* JavascriptLibrary::CreateAsyncGeneratorType(RecyclableObject* prototype) + { + return DynamicType::New( + scriptContext, + TypeIds_AsyncGenerator, + prototype, + nullptr, + NullTypeHandler::GetDefaultInstance()); + } + + DynamicType * JavascriptLibrary::CreateAsyncFromSyncIteratorType() + { + return DynamicType::New(scriptContext, TypeIds_AsyncFromSyncIterator, asyncFromSyncIteratorProtototype, nullptr, NullTypeHandler::GetDefaultInstance()); + } + template JavascriptExternalFunction* JavascriptLibrary::CreateIdMappedExternalFunction(MethodType entryPoint, DynamicType *pPrototypeType) { return RecyclerNewEnumClass(this->GetRecycler(), EnumFunctionClass, JavascriptExternalFunction, entryPoint, pPrototypeType); } + + RuntimeFunction* JavascriptLibrary::EnsureAsyncFromSyncIteratorValueUnwrapFalseFunction() + { + Assert(scriptContext->GetConfig()->IsES2018AsyncIterationEnabled()); + if (asyncFromSyncIteratorValueUnwrapFalseFunction == nullptr) + { + JavascriptMethod entryPoint = JavascriptAsyncFromSyncIterator::EntryAsyncFromSyncIteratorValueUnwrapFalseFunction; + FunctionInfo* functionInfo = RecyclerNew(this->GetRecycler(), FunctionInfo, entryPoint); + DynamicType* type = DynamicType::New(scriptContext, TypeIds_Function, functionPrototype, entryPoint, GetDeferredAnonymousFunctionTypeHandler()); + + asyncFromSyncIteratorValueUnwrapFalseFunction = RecyclerNewEnumClass(this->GetRecycler(), EnumFunctionClass, RuntimeFunction, type, functionInfo); + } + + return asyncFromSyncIteratorValueUnwrapFalseFunction; + } + + RuntimeFunction* JavascriptLibrary::EnsureAsyncFromSyncIteratorValueUnwrapTrueFunction() + { + Assert(scriptContext->GetConfig()->IsES2018AsyncIterationEnabled()); + if (asyncFromSyncIteratorValueUnwrapTrueFunction == nullptr) + { + JavascriptMethod entryPoint = JavascriptAsyncFromSyncIterator::EntryAsyncFromSyncIteratorValueUnwrapTrueFunction; + FunctionInfo* functionInfo = RecyclerNew(this->GetRecycler(), FunctionInfo, entryPoint); + DynamicType* type = DynamicType::New(scriptContext, TypeIds_Function, functionPrototype, entryPoint, GetDeferredAnonymousFunctionTypeHandler()); + + asyncFromSyncIteratorValueUnwrapTrueFunction = RecyclerNewEnumClass(this->GetRecycler(), EnumFunctionClass, RuntimeFunction, type, functionInfo); + } + + return asyncFromSyncIteratorValueUnwrapTrueFunction; + } + + AsyncGeneratorCallbackFunction* JavascriptLibrary::CreateAsyncGeneratorCallbackFunction( + JavascriptMethod entryPoint, + JavascriptAsyncGenerator* generator) + { + Assert(scriptContext->GetConfig()->IsES2018AsyncIterationEnabled()); + + auto* functionInfo = RecyclerNew(GetRecycler(), FunctionInfo, entryPoint); + + auto* type = DynamicType::New( + scriptContext, + TypeIds_Function, + functionPrototype, + entryPoint, + GetDeferredAnonymousFunctionTypeHandler()); + + return RecyclerNewEnumClass( + GetRecycler(), + EnumFunctionClass, + AsyncGeneratorCallbackFunction, + type, + functionInfo, + generator); + } + + RuntimeFunction* JavascriptLibrary::CreateAsyncModuleCallbackFunction( + JavascriptMethod entryPoint, + SourceTextModuleRecord* module) + { + Assert(scriptContext->GetConfig()->IsES2018AsyncIterationEnabled()); + + auto* functionInfo = RecyclerNew(GetRecycler(), FunctionInfo, entryPoint); + + auto* type = DynamicType::New( + scriptContext, + TypeIds_Function, + functionPrototype, + entryPoint, + GetDeferredAnonymousFunctionTypeHandler()); + + return RecyclerNewEnumClass( + GetRecycler(), + EnumFunctionClass, + AsyncModuleCallbackFunction, + type, + functionInfo, + module); + } + + JavascriptAsyncGeneratorFunction* JavascriptLibrary::CreateAsyncGeneratorFunction(JavascriptMethod entryPoint, GeneratorVirtualScriptFunction* scriptFunction) + { + Assert(scriptContext->GetConfig()->IsES2018AsyncIterationEnabled()); + + DynamicType* type = CreateDeferredPrototypeAsyncGeneratorFunctionType(entryPoint, scriptFunction->IsAnonymousFunction()); + + return RecyclerNewEnumClass(this->GetRecycler(), EnumFunctionClass, JavascriptAsyncGeneratorFunction, type, scriptFunction); + } + + JavascriptAsyncFromSyncIterator* JavascriptLibrary::CreateAsyncFromSyncIterator(RecyclableObject* syncIterator) + { + Assert(scriptContext->GetConfig()->IsES2018AsyncIterationEnabled()); + + DynamicType* type = CreateAsyncFromSyncIteratorType(); + + return RecyclerNew(this->GetRecycler(), JavascriptAsyncFromSyncIterator, type, syncIterator); + } + JavascriptGeneratorFunction* JavascriptLibrary::CreateGeneratorFunction(JavascriptMethod entryPoint, GeneratorVirtualScriptFunction* scriptFunction) { Assert(scriptContext->GetConfig()->IsES6GeneratorsEnabled()); @@ -6112,28 +6602,14 @@ namespace Js JavascriptExternalFunction* JavascriptLibrary::CreateStdCallExternalFunction(StdCallJavascriptMethod entryPoint, Var name, void *callbackState) { - Var functionNameOrId = name; - if (JavascriptString::Is(name)) - { - JavascriptString * functionName = JavascriptString::FromVar(name); - const char16 * functionNameBuffer = functionName->GetString(); - int functionNameBufferLength = functionName->GetLengthAsSignedInt(); - - PropertyId functionNamePropertyId = scriptContext->GetOrAddPropertyIdTracked(functionNameBuffer, functionNameBufferLength); - functionNameOrId = TaggedInt::ToVarUnchecked(functionNamePropertyId); - } - - AssertOrFailFast(TaggedInt::Is(functionNameOrId)); JavascriptExternalFunction* function = this->CreateIdMappedExternalFunction(entryPoint, stdCallFunctionWithDeferredPrototypeType); - function->SetFunctionNameId(functionNameOrId); + function->SetFunctionNameId(name); function->SetCallbackState(callbackState); return function; } JavascriptPromiseCapabilitiesExecutorFunction* JavascriptLibrary::CreatePromiseCapabilitiesExecutorFunction(JavascriptMethod entryPoint, JavascriptPromiseCapability* capability) { - Assert(scriptContext->GetConfig()->IsES6PromiseEnabled()); - FunctionInfo* functionInfo = &Js::JavascriptPromise::EntryInfo::CapabilitiesExecutorFunction; DynamicType* type = DynamicType::New(scriptContext, TypeIds_Function, functionPrototype, entryPoint, GetDeferredAnonymousFunctionTypeHandler()); JavascriptPromiseCapabilitiesExecutorFunction* function = RecyclerNewEnumClass(this->GetRecycler(), EnumFunctionClass, JavascriptPromiseCapabilitiesExecutorFunction, type, functionInfo, capability); @@ -6145,8 +6621,6 @@ namespace Js JavascriptPromiseResolveOrRejectFunction* JavascriptLibrary::CreatePromiseResolveOrRejectFunction(JavascriptMethod entryPoint, JavascriptPromise* promise, bool isReject, JavascriptPromiseResolveOrRejectFunctionAlreadyResolvedWrapper* alreadyResolvedRecord) { - Assert(scriptContext->GetConfig()->IsES6PromiseEnabled()); - FunctionInfo* functionInfo = &Js::JavascriptPromise::EntryInfo::ResolveOrRejectFunction; DynamicType* type = DynamicType::New(scriptContext, TypeIds_Function, functionPrototype, entryPoint, GetDeferredAnonymousFunctionTypeHandler()); JavascriptPromiseResolveOrRejectFunction* function = RecyclerNewEnumClass(this->GetRecycler(), EnumFunctionClass, JavascriptPromiseResolveOrRejectFunction, type, functionInfo, promise, isReject, alreadyResolvedRecord); @@ -6158,9 +6632,7 @@ namespace Js JavascriptPromiseReactionTaskFunction* JavascriptLibrary::CreatePromiseReactionTaskFunction(JavascriptMethod entryPoint, JavascriptPromiseReaction* reaction, Var argument) { - Assert(scriptContext->GetConfig()->IsES6PromiseEnabled()); - - FunctionInfo* functionInfo = RecyclerNew(this->GetRecycler(), FunctionInfo, entryPoint); + FunctionInfo* functionInfo = RecyclerNew(this->GetRecycler(), FunctionInfo, entryPoint, FunctionInfo::Attributes::ErrorOnNew); DynamicType* type = CreateDeferredPrototypeFunctionType(entryPoint); return RecyclerNewEnumClass(this->GetRecycler(), EnumFunctionClass, JavascriptPromiseReactionTaskFunction, type, functionInfo, reaction, argument); @@ -6168,9 +6640,7 @@ namespace Js JavascriptPromiseResolveThenableTaskFunction* JavascriptLibrary::CreatePromiseResolveThenableTaskFunction(JavascriptMethod entryPoint, JavascriptPromise* promise, RecyclableObject* thenable, RecyclableObject* thenFunction) { - Assert(scriptContext->GetConfig()->IsES6PromiseEnabled()); - - FunctionInfo* functionInfo = RecyclerNew(this->GetRecycler(), FunctionInfo, entryPoint); + FunctionInfo* functionInfo = RecyclerNew(this->GetRecycler(), FunctionInfo, entryPoint, FunctionInfo::Attributes::ErrorOnNew); DynamicType* type = CreateDeferredPrototypeFunctionType(entryPoint); return RecyclerNewEnumClass(this->GetRecycler(), EnumFunctionClass, JavascriptPromiseResolveThenableTaskFunction, type, functionInfo, promise, thenable, thenFunction); @@ -6178,8 +6648,6 @@ namespace Js JavascriptPromiseAllResolveElementFunction* JavascriptLibrary::CreatePromiseAllResolveElementFunction(JavascriptMethod entryPoint, uint32 index, JavascriptArray* values, JavascriptPromiseCapability* capabilities, JavascriptPromiseAllResolveElementFunctionRemainingElementsWrapper* remainingElements) { - Assert(scriptContext->GetConfig()->IsES6PromiseEnabled()); - FunctionInfo* functionInfo = &Js::JavascriptPromise::EntryInfo::AllResolveElementFunction; DynamicType* type = DynamicType::New(scriptContext, TypeIds_Function, functionPrototype, entryPoint, GetDeferredAnonymousFunctionTypeHandler()); JavascriptPromiseAllResolveElementFunction* function = RecyclerNewEnumClass(this->GetRecycler(), EnumFunctionClass, JavascriptPromiseAllResolveElementFunction, type, functionInfo, index, values, capabilities, remainingElements); @@ -6189,11 +6657,29 @@ namespace Js return function; } - JavascriptPromiseThenFinallyFunction* JavascriptLibrary::CreatePromiseThenFinallyFunction(JavascriptMethod entryPoint, RecyclableObject* OnFinally, RecyclableObject* Constructor, bool shouldThrow) + JavascriptPromiseAnyRejectElementFunction* JavascriptLibrary::CreatePromiseAnyRejectElementFunction(JavascriptMethod entryPoint, uint32 index, JavascriptArray* errors, JavascriptPromiseCapability* capabilities, JavascriptPromiseAllResolveElementFunctionRemainingElementsWrapper* remainingElements, JavascriptPromiseResolveOrRejectFunctionAlreadyResolvedWrapper* alreadyCalledWrapper) { - Assert(scriptContext->GetConfig()->IsES6PromiseEnabled()); + FunctionInfo* functionInfo = &Js::JavascriptPromise::EntryInfo::AnyRejectElementFunction; + DynamicType* type = DynamicType::New(scriptContext, TypeIds_Function, functionPrototype, entryPoint, GetDeferredAnonymousFunctionTypeHandler()); + JavascriptPromiseAnyRejectElementFunction* function = RecyclerNewEnumClass(this->GetRecycler(), EnumFunctionClass, JavascriptPromiseAnyRejectElementFunction, type, functionInfo, index, errors, capabilities, remainingElements, alreadyCalledWrapper); + // Length should be 1 but not accessible from script. + return function; + } + + JavascriptPromiseAllSettledResolveOrRejectElementFunction* JavascriptLibrary::CreatePromiseAllSettledResolveOrRejectElementFunction(JavascriptMethod entryPoint, uint32 index, JavascriptArray* values, JavascriptPromiseCapability* capabilities, JavascriptPromiseAllResolveElementFunctionRemainingElementsWrapper* remainingElements, JavascriptPromiseResolveOrRejectFunctionAlreadyResolvedWrapper* alreadyCalledWrapper, bool isRejecting) + { + FunctionInfo* functionInfo = &Js::JavascriptPromise::EntryInfo::AllSettledResolveOrRejectElementFunction; + DynamicType* type = DynamicType::New(scriptContext, TypeIds_Function, functionPrototype, entryPoint, GetDeferredAnonymousFunctionTypeHandler()); + JavascriptPromiseAllSettledResolveOrRejectElementFunction* function = RecyclerNewEnumClass(this->GetRecycler(), EnumFunctionClass, JavascriptPromiseAllSettledResolveOrRejectElementFunction, type, functionInfo, index, values, capabilities, remainingElements, alreadyCalledWrapper, isRejecting); + + function->SetPropertyWithAttributes(PropertyIds::length, TaggedInt::ToVarUnchecked(1), PropertyConfigurable, nullptr); - FunctionInfo* functionInfo = RecyclerNew(this->GetRecycler(), FunctionInfo, entryPoint); + return function; + } + + JavascriptPromiseThenFinallyFunction* JavascriptLibrary::CreatePromiseThenFinallyFunction(JavascriptMethod entryPoint, RecyclableObject* OnFinally, RecyclableObject* Constructor, bool shouldThrow) + { + FunctionInfo* functionInfo = RecyclerNew(this->GetRecycler(), FunctionInfo, entryPoint, FunctionInfo::Attributes::ErrorOnNew); DynamicType* type = DynamicType::New(scriptContext, TypeIds_Function, functionPrototype, entryPoint, GetDeferredAnonymousFunctionTypeHandler()); JavascriptPromiseThenFinallyFunction* function = RecyclerNewEnumClass(this->GetRecycler(), EnumFunctionClass, JavascriptPromiseThenFinallyFunction, type, functionInfo, OnFinally, Constructor, shouldThrow); @@ -6204,9 +6690,7 @@ namespace Js JavascriptPromiseThunkFinallyFunction* JavascriptLibrary::CreatePromiseThunkFinallyFunction(JavascriptMethod entryPoint, Var value, bool shouldThrow) { - Assert(scriptContext->GetConfig()->IsES6PromiseEnabled()); - - FunctionInfo* functionInfo = RecyclerNew(this->GetRecycler(), FunctionInfo, entryPoint); + FunctionInfo* functionInfo = RecyclerNew(this->GetRecycler(), FunctionInfo, entryPoint, FunctionInfo::Attributes::ErrorOnNew); DynamicType* type = CreateDeferredPrototypeFunctionType(entryPoint); return RecyclerNewEnumClass(this->GetRecycler(), EnumFunctionClass, JavascriptPromiseThunkFinallyFunction, type, functionInfo, value, shouldThrow); @@ -6246,6 +6730,14 @@ namespace Js return prototype; } + DynamicObject* JavascriptLibrary::CreateAsyncGeneratorConstructorPrototypeObject() + { + AssertMsg(asyncGeneratorConstructorPrototypeObjectType, "Where's asyncGeneratorConstructorPrototypeObjectType?"); + DynamicObject * prototype = DynamicObject::New(this->GetRecycler(), asyncGeneratorConstructorPrototypeObjectType); + // Generator functions' prototype objects are not created with a .constructor property + return prototype; + } + DynamicObject* JavascriptLibrary::CreateConstructorPrototypeObject(JavascriptFunction * constructor) { AssertMsg(constructorPrototypeObjectType, "Where's constructorPrototypeObjectType?"); @@ -6254,6 +6746,18 @@ namespace Js return prototype; } + DynamicObject* JavascriptLibrary::CreateClassPrototypeObject(RecyclableObject * protoParent) + { + // We can't share types of objects that are prototypes. If we gain the ability to do that, try using a shared type + // with a PathTypeHandler for this object. (PathTypeHandler and not SimpleTypeHandler, because it will likely have + // user-defined properties on it.) Until then, make a new type for each object and use a SimpleDictionaryTypeHandler. + DynamicType * dynamicType = + DynamicType::New(scriptContext, TypeIds_Object, protoParent, nullptr, classPrototypeTypeHandler); + dynamicType->SetHasNoEnumerableProperties(true); + DynamicObject * proto = DynamicObject::New(this->GetRecycler(), dynamicType); + return proto; + } + DynamicObject* JavascriptLibrary::CreateObject( const bool allowObjectHeaderInlining, const PropertyIndex requestedInlineSlotCapacity) @@ -6448,6 +6952,11 @@ namespace Js return GetEnumeratorCache(type, &this->cache.assignCache); } + EnumeratorCache* JavascriptLibrary::GetCreateKeysCache(Type* type) + { + return GetEnumeratorCache(type, &this->cache.createKeysCache); + } + EnumeratorCache* JavascriptLibrary::GetStringifyCache(Type* type) { return GetEnumeratorCache(type, &this->cache.stringifyCache); @@ -6513,12 +7022,6 @@ namespace Js return PropertyString::New(GetStringTypeStatic(), propertyRecord, this->GetRecycler()); } - JavascriptVariantDate* JavascriptLibrary::CreateVariantDate(const double value) - { - AssertMsg(variantDateType, "Where's variantDateType?"); - return RecyclerNewLeafZ(this->GetRecycler(), JavascriptVariantDate, value, variantDateType); - } - JavascriptBooleanObject* JavascriptLibrary::CreateBooleanObject() { AssertMsg(booleanTypeDynamic, "Where's booleanTypeDynamic?"); @@ -6593,7 +7096,7 @@ namespace Js DynamicObject* JavascriptLibrary::CreateIteratorResultObject(Var value, Var done) { - DynamicObject* iteratorResult = DynamicObject::New(this->GetRecycler(), iteratorResultType); + auto* iteratorResult = DynamicObject::New(GetRecycler(), iteratorResultType); iteratorResult->SetSlot(SetSlotArguments(Js::PropertyIds::value, 0, value)); iteratorResult->SetSlot(SetSlotArguments(Js::PropertyIds::done, 1, done)); @@ -6601,22 +7104,23 @@ namespace Js return iteratorResult; } - JavascriptListIterator* JavascriptLibrary::CreateListIterator(ListForListIterator* list) + DynamicObject* JavascriptLibrary::CreateIteratorResultObject(Var value, bool done) { - JavascriptListIterator* iterator = RecyclerNew(this->GetRecycler(), JavascriptListIterator, listIteratorType, list); - RuntimeFunction* nextFunction = DefaultCreateFunction(&JavascriptListIterator::EntryInfo::Next, 0, nullptr, nullptr, PropertyIds::next); - JavascriptOperators::SetProperty(iterator, iterator, PropertyIds::next, RuntimeFunction::FromVar(nextFunction), GetScriptContext(), PropertyOperation_None); - return iterator; + return CreateIteratorResultObject(value, done ? GetTrue() : GetFalse()); } - DynamicObject* JavascriptLibrary::CreateIteratorResultObjectValueFalse(Var value) + DynamicObject* JavascriptLibrary::CreateIteratorResultObjectDone() { - return CreateIteratorResultObject(value, GetFalse()); + return CreateIteratorResultObject(GetUndefined(), GetTrue()); } - DynamicObject* JavascriptLibrary::CreateIteratorResultObjectUndefinedTrue() + JavascriptListIterator* JavascriptLibrary::CreateListIterator(ListForListIterator* list) { - return CreateIteratorResultObject(GetUndefined(), GetTrue()); + JavascriptListIterator* iterator = RecyclerNew(this->GetRecycler(), JavascriptListIterator, listIteratorType, list); + JavascriptFunction* nextFunction = DefaultCreateFunction(&JavascriptListIterator::EntryInfo::Next, 0, nullptr, nullptr, PropertyIds::next); + AssertOrFailFast(VarIsCorrectType(nextFunction)); + JavascriptOperators::SetProperty(iterator, iterator, PropertyIds::next, nextFunction, GetScriptContext(), PropertyOperation_None); + return iterator; } RecyclableObject* JavascriptLibrary::CreateThrowErrorObject(JavascriptError* error) @@ -6680,12 +7184,12 @@ namespace Js #if ENABLE_NATIVE_CODEGEN if (JITManager::GetJITManager()->IsOOPJITEnabled() && JITManager::GetJITManager()->IsConnected()) { - PSCRIPTCONTEXT_HANDLE remoteScriptContext = this->scriptContext->GetRemoteScriptAddr(); + PSCRIPTCONTEXT_HANDLE remoteScriptContext = this->scriptContext->GetRemoteScriptAddr(false); if (remoteScriptContext) { HRESULT hr = JITManager::GetJITManager()->SetIsPRNGSeeded(remoteScriptContext, val); - JITManager::HandleServerCallResult(hr, RemoteCallType::StateUpdate); - } + JITManager::HandleServerCallResult(hr, RemoteCallType::StateUpdate); + } } #endif } @@ -6974,10 +7478,7 @@ namespace Js ScriptConfiguration const& config = *(scriptContext->GetConfig()); - if (config.IsES6PromiseEnabled()) - { - REGISTER_OBJECT(Promise); - } + REGISTER_OBJECT(Promise); if (config.IsES6ProxyEnabled()) { @@ -7000,17 +7501,12 @@ namespace Js REGISTER_ERROR_OBJECT(SyntaxError); REGISTER_ERROR_OBJECT(TypeError); REGISTER_ERROR_OBJECT(URIError); + REGISTER_ERROR_OBJECT(AggregateError); -#ifdef ENABLE_PROJECTION - if (config.IsWinRTEnabled()) - { - REGISTER_ERROR_OBJECT(WinRTError); - } -#endif return hr; } - HRESULT JavascriptLibrary::ProfilerRegisterObject() + HRESULT JavascriptLibrary::ProfilerRegisterObject() { HRESULT hr = S_OK; @@ -7042,6 +7538,7 @@ namespace Js REG_OBJECTS_LIB_FUNC(getOwnPropertySymbols, JavascriptObject::EntryGetOwnPropertySymbols); + REG_OBJECTS_LIB_FUNC(hasOwn, JavascriptObject::EntryHasOwn); REG_OBJECTS_LIB_FUNC(hasOwnProperty, JavascriptObject::EntryHasOwnProperty); REG_OBJECTS_LIB_FUNC(propertyIsEnumerable, JavascriptObject::EntryPropertyIsEnumerable); REG_OBJECTS_LIB_FUNC(isPrototypeOf, JavascriptObject::EntryIsPrototypeOf); @@ -7138,6 +7635,20 @@ namespace Js return hr; } + HRESULT JavascriptLibrary::ProfilerRegisterBigInt() + { + if (!scriptContext->GetConfig()->IsESBigIntEnabled()) + { + return E_FAIL; + } + HRESULT hr = S_OK; + REG_GLOBAL_CONSTRUCTOR(BigInt); + + //DEFINE_OBJECT_NAME(BigInt); + + return hr; + } + HRESULT JavascriptLibrary::ProfilerRegisterDate() { HRESULT hr = S_OK; @@ -7169,10 +7680,6 @@ namespace Js REG_OBJECTS_LIB_FUNC(getUTCSeconds, JavascriptDate::EntryGetUTCSeconds); ScriptConfiguration const& config = *(scriptContext->GetConfig()); - if (config.SupportsES3Extensions()) - { - REG_OBJECTS_LIB_FUNC(getVarDate, JavascriptDate::EntryGetVarDate); - } REG_OBJECTS_LIB_FUNC(getYear, JavascriptDate::EntryGetYear); REG_OBJECTS_LIB_FUNC(setDate, JavascriptDate::EntrySetDate); REG_OBJECTS_LIB_FUNC(setFullYear, JavascriptDate::EntrySetFullYear); @@ -7351,8 +7858,8 @@ namespace Js REG_OBJECTS_LIB_FUNC(startsWith, JavascriptString::EntryStartsWith); REG_OBJECTS_LIB_FUNC(endsWith, JavascriptString::EntryEndsWith); REG_OBJECTS_LIB_FUNC(includes, JavascriptString::EntryIncludes); - REG_OBJECTS_LIB_FUNC(trimLeft, JavascriptString::EntryTrimLeft); - REG_OBJECTS_LIB_FUNC(trimRight, JavascriptString::EntryTrimRight); + REG_OBJECTS_LIB_FUNC(trimLeft, JavascriptString::EntryTrimStart); + REG_OBJECTS_LIB_FUNC(trimRight, JavascriptString::EntryTrimEnd); } @@ -7495,6 +8002,7 @@ namespace Js REG_OBJECTS_LIB_FUNC(toString, JavascriptSymbol::EntryToString); REG_OBJECTS_LIB_FUNC2(for_, _u("for"), JavascriptSymbol::EntryFor); REG_OBJECTS_LIB_FUNC(keyFor, JavascriptSymbol::EntryKeyFor); + REG_OBJECTS_LIB_FUNC(description, JavascriptSymbol::EntryDescription); return hr; } diff --git a/lib/Runtime/Library/JavascriptLibrary.h b/lib/Runtime/Library/JavascriptLibrary.h index e4fe4980505..aed0f780a28 100644 --- a/lib/Runtime/Library/JavascriptLibrary.h +++ b/lib/Runtime/Library/JavascriptLibrary.h @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #pragma once @@ -14,20 +15,13 @@ CompileAssert(MaxPreInitializedObjectTypeInlineSlotCount <= USHRT_MAX); #include "StringCache.h" #include "Library/JavascriptGenerator.h" +#include "Library/JavascriptAsyncGenerator.h" class ScriptSite; class ActiveScriptExternalLibrary; -class ProjectionExternalLibrary; class EditAndContinue; class ChakraHostScriptContext; - -#ifdef ENABLE_PROJECTION -namespace Projection -{ - class ProjectionContext; - class WinRTPromiseEngineInterfaceExtensionObject; -} -#endif +class JsrtExternalType; namespace Js { @@ -73,6 +67,7 @@ namespace Js { static const uint AssignCacheSize = 16; static const uint StringifyCacheSize = 16; + static const uint CreateKeysCacheSize = 16; Field(PropertyStringMap*) propertyStrings[80]; Field(JavascriptString *) lastNumberToStringRadix10String; @@ -93,6 +88,7 @@ namespace Js Field(ScriptContextPolymorphicInlineCache*) toJSONCache; Field(EnumeratorCache*) assignCache; Field(EnumeratorCache*) stringifyCache; + Field(EnumeratorCache*) createKeysCache; #if ENABLE_PROFILE_INFO #if DBG_DUMP || defined(DYNAMIC_PROFILE_STORAGE) || defined(RUNTIME_DATA_COLLECTION) Field(DynamicProfileInfoList*) profileInfoList; @@ -160,35 +156,6 @@ namespace Js }; #endif - template - struct StringTemplateCallsiteObjectComparer - { - static bool Equals(T x, T y) - { - static_assert(false, "Unexpected type T"); - } - static hash_t GetHashCode(T i) - { - static_assert(false, "Unexpected type T"); - } - }; - - template <> - struct StringTemplateCallsiteObjectComparer - { - static bool Equals(ParseNodePtr x, RecyclerWeakReference* y); - static bool Equals(ParseNodePtr x, ParseNodePtr y); - static hash_t GetHashCode(ParseNodePtr i); - }; - - template <> - struct StringTemplateCallsiteObjectComparer*> - { - static bool Equals(RecyclerWeakReference* x, RecyclerWeakReference* y); - static bool Equals(RecyclerWeakReference* x, ParseNodePtr y); - static hash_t GetHashCode(RecyclerWeakReference* o); - }; - class JavascriptLibrary : public JavascriptLibraryBase { friend class EditAndContinue; @@ -203,11 +170,6 @@ namespace Js friend class JsBuiltInEngineInterfaceExtensionObject; #endif friend class ChakraHostScriptContext; -#ifdef ENABLE_PROJECTION - friend class ProjectionExternalLibrary; - friend class Projection::WinRTPromiseEngineInterfaceExtensionObject; - friend class Projection::ProjectionContext; -#endif static const char16* domBuiltinPropertyNames[]; public: @@ -224,6 +186,7 @@ namespace Js static DWORD GetBooleanFalseOffset() { return offsetof(JavascriptLibrary, booleanFalse); } static DWORD GetNegativeZeroOffset() { return offsetof(JavascriptLibrary, negativeZero); } static DWORD GetNumberTypeStaticOffset() { return offsetof(JavascriptLibrary, numberTypeStatic); } + static DWORD GetBigIntTypeStaticOffset() { return offsetof(JavascriptLibrary, bigintTypeStatic); } static DWORD GetObjectTypesOffset() { return offsetof(JavascriptLibrary, objectTypes); } static DWORD GetObjectHeaderInlinedTypesOffset() { return offsetof(JavascriptLibrary, objectHeaderInlinedTypes); } static DWORD GetRegexTypeOffset() { return offsetof(JavascriptLibrary, regexType); } @@ -262,6 +225,7 @@ namespace Js Field(UndeclaredBlockVariable*) undeclBlockVarSentinel; Field(DynamicType *) generatorConstructorPrototypeObjectType; + Field(DynamicType *) asyncGeneratorConstructorPrototypeObjectType; Field(DynamicType *) constructorPrototypeObjectType; Field(DynamicType *) heapArgumentsType; Field(DynamicType *) strictHeapArgumentsType; @@ -290,11 +254,14 @@ namespace Js Field(DynamicType *) charArrayType; Field(StaticType *) booleanTypeStatic; Field(DynamicType *) booleanTypeDynamic; + Field(DynamicType *) bigintTypeDynamic; + Field(StaticType *) bigintTypeStatic; Field(DynamicType *) dateType; - Field(StaticType *) variantDateType; Field(DynamicType *) symbolTypeDynamic; Field(StaticType *) symbolTypeStatic; Field(DynamicType *) iteratorResultType; + Field(DynamicType *) awaitObjectType; + Field(DynamicType *) resumeYieldObjectType; Field(DynamicType *) arrayIteratorType; Field(DynamicType *) mapIteratorType; Field(DynamicType *) setIteratorType; @@ -314,7 +281,11 @@ namespace Js Field(DynamicTypeHandler *) anonymousFunctionTypeHandler; Field(DynamicTypeHandler *) anonymousFunctionWithPrototypeTypeHandler; Field(DynamicTypeHandler *) functionTypeHandler; + Field(DynamicTypeHandler *) functionTypeHandlerWithLength; + Field(DynamicTypeHandler *) functionWithPrototypeAndLengthTypeHandler; Field(DynamicTypeHandler *) functionWithPrototypeTypeHandler; + Field(DynamicTypeHandler *) classPrototypeTypeHandler; + Field(DynamicType *) externalFunctionWithDeferredPrototypeType; Field(DynamicType *) externalFunctionWithLengthAndDeferredPrototypeType; Field(DynamicType *) wrappedFunctionWithDeferredPrototypeType; @@ -324,6 +295,7 @@ namespace Js Field(DynamicType *) defaultExternalConstructorFunctionWithDeferredPrototypeType; Field(DynamicType *) boundFunctionType; Field(DynamicType *) regexConstructorType; + Field(DynamicType *) crossSiteDeferredFunctionType; Field(DynamicType *) crossSiteDeferredPrototypeFunctionType; Field(DynamicType *) crossSiteIdMappedFunctionWithPrototypeType; Field(DynamicType *) crossSiteExternalConstructFunctionWithPrototypeType; @@ -336,6 +308,7 @@ namespace Js Field(DynamicType *) syntaxErrorType; Field(DynamicType *) typeErrorType; Field(DynamicType *) uriErrorType; + Field(DynamicType *) aggregateErrorType; Field(DynamicType *) webAssemblyCompileErrorType; Field(DynamicType *) webAssemblyRuntimeErrorType; Field(DynamicType *) webAssemblyLinkErrorType; @@ -400,6 +373,14 @@ namespace Js Field(JavascriptFunction*) generatorReturnFunction; Field(JavascriptFunction*) generatorNextFunction; Field(JavascriptFunction*) generatorThrowFunction; + Field(JavascriptFunction*) asyncGeneratorNextFunction; + Field(JavascriptFunction*) asyncGeneratorReturnFunction; + Field(JavascriptFunction*) asyncGeneratorThrowFunction; + Field(JavascriptFunction*) asyncFromSyncIteratorNextFunction; + Field(JavascriptFunction*) asyncFromSyncIteratorReturnFunction; + Field(JavascriptFunction*) asyncFromSyncIteratorThrowFunction; + Field(RuntimeFunction*) asyncFromSyncIteratorValueUnwrapFalseFunction; + Field(RuntimeFunction*) asyncFromSyncIteratorValueUnwrapTrueFunction; Field(JavascriptFunction*) objectValueOfFunction; Field(JavascriptFunction*) objectToStringFunction; @@ -425,6 +406,7 @@ namespace Js Field(JavascriptFunction*) regexFlagsGetterFunction; Field(JavascriptFunction*) regexGlobalGetterFunction; Field(JavascriptFunction*) regexStickyGetterFunction; + Field(JavascriptFunction*) regexDotAllGetterFunction; Field(JavascriptFunction*) regexUnicodeGetterFunction; Field(RuntimeFunction*) sharedArrayBufferConstructor; @@ -452,6 +434,7 @@ namespace Js Field(int) regexFlagsGetterSlotIndex; Field(int) regexGlobalGetterSlotIndex; Field(int) regexStickyGetterSlotIndex; + Field(int) regexDotAllGetterSlotIndex; Field(int) regexUnicodeGetterSlotIndex; mutable Field(CharStringCache) charStringCache; @@ -460,7 +443,31 @@ namespace Js Field(void *) nativeHostPromiseContinuationFunctionState; typedef SList FunctionReferenceList; - typedef JsUtil::WeakReferenceDictionary> JsrtExternalTypesCache; +#ifdef _CHAKRACOREBUILD + struct JsrtExternalCallbacks + { + JsrtExternalCallbacks() : traceCallback(0), finalizeCallback(0), prototype(0) {} + JsrtExternalCallbacks(uintptr_t traceCallback, uintptr_t finalizeCallback, uintptr_t prototype) : traceCallback(traceCallback), finalizeCallback(finalizeCallback), prototype(prototype) {} + + uintptr_t traceCallback; + uintptr_t finalizeCallback; + uintptr_t prototype; + + operator hash_t() const { return (hash_t)(traceCallback ^ finalizeCallback ^ prototype); } + }; +#else + struct JsrtExternalCallbacks + { + JsrtExternalCallbacks() : finalizeCallback(0), prototype(0) {} + JsrtExternalCallbacks(uintptr_t finalizeCallback, uintptr_t prototype) : finalizeCallback(finalizeCallback), prototype(prototype) {} + + uintptr_t finalizeCallback; + uintptr_t prototype; + + operator hash_t() const { return (hash_t)(finalizeCallback ^ prototype); } + }; +#endif + typedef JsUtil::WeakReferenceDictionary> JsrtExternalTypesCache; Field(void *) bindRefChunkBegin; Field(Field(void*)*) bindRefChunkCurrent; @@ -473,12 +480,20 @@ namespace Js Field(JsrtExternalTypesCache*) jsrtExternalTypesCache; Field(FunctionBody*) fakeGlobalFuncForUndefer; - typedef JsUtil::BaseHashSet*, Recycler, PowerOf2SizePolicy, RecyclerWeakReference*, StringTemplateCallsiteObjectComparer> StringTemplateCallsiteObjectList; + struct CustomExternalWrapperCallbacks + { + CustomExternalWrapperCallbacks() : traceCallback(0), finalizeCallback(0), interceptors(0), prototype(0) {} + CustomExternalWrapperCallbacks(uintptr_t traceCallback, uintptr_t finalizeCallback, uintptr_t interceptors, uintptr_t prototype) : traceCallback(traceCallback), finalizeCallback(finalizeCallback), interceptors(interceptors), prototype(prototype) {} + uintptr_t traceCallback; + uintptr_t finalizeCallback; + uintptr_t interceptors; + uintptr_t prototype; + + operator hash_t() const { return (hash_t)(traceCallback ^ finalizeCallback ^ interceptors ^ prototype); } + }; + typedef JsUtil::WeakReferenceDictionary> CustomExternalWrapperTypesCache; - // Used to store a list of template callsite objects. - // We use the raw strings in the callsite object (or a string template parse node) to identify unique callsite objects in the list. - // See abstract operation GetTemplateObject in ES6 Spec (RC1) 12.2.8.3 - Field(StringTemplateCallsiteObjectList*) stringTemplateCallsiteObjectList; + Field(CustomExternalWrapperTypesCache*) customExternalWrapperTypesCache; Field(ModuleRecordList*) moduleRecordList; @@ -515,6 +530,10 @@ namespace Js static SimpleTypeHandler<2> SharedFunctionWithLengthAndNameTypeHandler; static SimpleTypeHandler<2> SharedIdMappedFunctionWithPrototypeTypeHandler; static SimpleTypeHandler<1> SharedNamespaceSymbolTypeHandler; + static SimpleTypeHandler<3> SharedFunctionWithPrototypeLengthAndNameTypeHandler; + static SimpleTypeHandler<2> SharedFunctionWithPrototypeAndLengthTypeHandler; + static SimpleTypeHandler<2> SharedFunctionWithNonWritablePrototypeAndLengthTypeHandler; + static SimpleTypeHandler<3> SharedFunctionWithNonWritablePrototypeLengthAndNameTypeHandler; static MissingPropertyTypeHandler MissingPropertyHolderTypeHandler; static SimplePropertyDescriptor const SharedFunctionPropertyDescriptors[2]; @@ -522,7 +541,12 @@ namespace Js static SimplePropertyDescriptor const HeapArgumentsPropertyDescriptors[3]; static SimplePropertyDescriptor const FunctionWithLengthAndPrototypeTypeDescriptors[2]; static SimplePropertyDescriptor const FunctionWithLengthAndNameTypeDescriptors[2]; + static SimplePropertyDescriptor const FunctionWithPrototypeLengthAndNameTypeDescriptors[3]; + static SimplePropertyDescriptor const FunctionWithPrototypeAndLengthTypeDescriptors[2]; + static SimplePropertyDescriptor const FunctionWithNonWritablePrototypeAndLengthTypeDescriptors[2]; + static SimplePropertyDescriptor const FunctionWithNonWritablePrototypeLengthAndNameTypeDescriptors[3]; static SimplePropertyDescriptor const ModuleNamespaceTypeDescriptors[1]; + static SimplePropertyDescriptor const ClassPrototypePropertyDescriptors[1]; public: @@ -546,13 +570,13 @@ namespace Js throwerFunction(nullptr), jsrtContextObject(nullptr), jsrtExternalTypesCache(nullptr), + customExternalWrapperTypesCache(nullptr), fakeGlobalFuncForUndefer(nullptr), externalLibraryList(nullptr), #if ENABLE_COPYONACCESS_ARRAY cacheForCopyOnAccessArraySegments(nullptr), #endif referencedPropertyRecords(nullptr), - stringTemplateCallsiteObjectList(nullptr), moduleRecordList(nullptr), rootPath(nullptr), bindRefChunkBegin(nullptr), @@ -605,6 +629,9 @@ namespace Js DynamicObject* GetWebAssemblyLinkErrorPrototype() const { return webAssemblyLinkErrorPrototype; } DynamicObject* GetWebAssemblyLinkErrorConstructor() const { return webAssemblyLinkErrorConstructor; } + DynamicObject* GetAsyncGeneratorPrototype() const { return asyncGeneratorPrototype; } + DynamicObject* GetGeneratorPrototype() const { return generatorPrototype; } + DynamicObject* GetChakraLib() const { return chakraLibraryObject; } #if ENABLE_TTD @@ -651,7 +678,9 @@ namespace Js Js::RecyclableObject* CreatePromiseReactionTaskFunction_TTD(JavascriptPromiseReaction* reaction, Var argument); Js::JavascriptPromiseAllResolveElementFunctionRemainingElementsWrapper* CreateRemainingElementsWrapper_TTD(Js::ScriptContext* ctx, uint32 value); + Js::JavascriptPromiseResolveOrRejectFunctionAlreadyResolvedWrapper* CreateAlreadyCalledWrapper_TTD(Js::ScriptContext* ctx, bool value); Js::RecyclableObject* CreatePromiseAllResolveElementFunction_TTD(Js::JavascriptPromiseCapability* capabilities, uint32 index, Js::JavascriptPromiseAllResolveElementFunctionRemainingElementsWrapper* wrapper, Js::RecyclableObject* values, bool alreadyCalled); + Js::RecyclableObject* CreatePromiseAllSettledResolveOrRejectElementFunction_TTD(Js::JavascriptPromiseCapability* capabilities, uint32 index, Js::JavascriptPromiseAllResolveElementFunctionRemainingElementsWrapper* wrapper, Js::RecyclableObject* values, JavascriptPromiseResolveOrRejectFunctionAlreadyResolvedWrapper* alreadyCalledWrapper, bool isRejecting); Js::RecyclableObject* CreateJavascriptGenerator_TTD(Js::ScriptContext *ctx, Js::RecyclableObject *prototype, Js::Arguments &arguments, Js::JavascriptGenerator::GeneratorState generatorState); @@ -668,13 +697,9 @@ namespace Js #endif #ifdef ENABLE_JS_BUILTINS - template - void InitializeBuiltInForPrototypes(Fn fn); - - void EnsureBuiltInEngineIsReady(); - + void EnsureArrayBuiltInsAreReady(); + void EnsureMathBuiltInsAreReady(); static bool __cdecl InitializeChakraLibraryObject(DynamicObject* chakraLibraryObject, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode); - static bool __cdecl InitializeBuiltInObject(DynamicObject* builtInEngineObject, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode); #endif @@ -687,6 +712,8 @@ namespace Js StaticType * GetBooleanTypeStatic() const { return booleanTypeStatic; } DynamicType * GetBooleanTypeDynamic() const { return booleanTypeDynamic; } DynamicType * GetDateType() const { return dateType; } + StaticType * GetBigIntTypeStatic() const { return bigintTypeStatic; } + DynamicType * GetBigIntTypeDynamic() const { return bigintTypeDynamic; } DynamicType * GetBoundFunctionType() const { return boundFunctionType; } DynamicType * GetRegExpConstructorType() const { return regexConstructorType; } StaticType * GetEnumeratorType() const { return enumeratorType; } @@ -699,12 +726,14 @@ namespace Js DynamicType * GetSyntaxErrorType() const { return syntaxErrorType; } DynamicType * GetTypeErrorType() const { return typeErrorType; } DynamicType * GetURIErrorType() const { return uriErrorType; } + DynamicType * GetAggregateErrorType() const { return aggregateErrorType; } DynamicType * GetWebAssemblyCompileErrorType() const { return webAssemblyCompileErrorType; } DynamicType * GetWebAssemblyRuntimeErrorType() const { return webAssemblyRuntimeErrorType; } DynamicType * GetWebAssemblyLinkErrorType() const { return webAssemblyLinkErrorType; } StaticType * GetNumberTypeStatic() const { return numberTypeStatic; } StaticType * GetInt64TypeStatic() const { return int64NumberTypeStatic; } StaticType * GetUInt64TypeStatic() const { return uint64NumberTypeStatic; } + DynamicType * GetNumberTypeDynamic() const { return numberTypeDynamic; } DynamicType * GetPromiseType() const { return promiseType; } @@ -713,13 +742,16 @@ namespace Js DynamicType * GetWebAssemblyMemoryType() const { return webAssemblyMemoryType; } DynamicType * GetWebAssemblyTableType() const { return webAssemblyTableType; } DynamicType * GetGeneratorConstructorPrototypeObjectType() const { return generatorConstructorPrototypeObjectType; } + DynamicType * GetAsyncGeneratorConstructorPrototypeObjectType() const { return asyncGeneratorConstructorPrototypeObjectType; } + DynamicType * GetResumeYieldObjectType() const { return resumeYieldObjectType; } + DynamicType * GetAwaitObjectType() const { return awaitObjectType; } #ifdef ENABLE_WASM JavascriptFunction* GetWebAssemblyQueryResponseFunction() const { return webAssemblyQueryResponseFunction; } JavascriptFunction* GetWebAssemblyCompileFunction() const { return webAssemblyCompileFunction; } JavascriptFunction* GetWebAssemblyInstantiateBoundFunction() const { return webAssemblyInstantiateBoundFunction; } #endif - + DynamicType * GetObjectLiteralType(uint16 requestedInlineSlotCapacity); DynamicType * GetObjectHeaderInlinedLiteralType(uint16 requestedInlineSlotCapacity); DynamicType * GetObjectType() const { return objectTypes[0]; } @@ -743,7 +775,6 @@ namespace Js DynamicType * GetArrayBufferType() const { return arrayBufferType; } StaticType * GetStringTypeStatic() const { return stringCache.GetStringTypeStatic(); } DynamicType * GetStringTypeDynamic() const { return stringTypeDynamic; } - StaticType * GetVariantDateType() const { return variantDateType; } void EnsureDebugObject(DynamicObject* newDebugObject); DynamicObject* GetDebugObject() const { Assert(debugObject != nullptr); return debugObject; } DynamicType * GetMapType() const { return mapType; } @@ -772,6 +803,7 @@ namespace Js JavascriptFunction* GetRegexFlagsGetterFunction() const { return regexFlagsGetterFunction; } JavascriptFunction* GetRegexGlobalGetterFunction() const { return regexGlobalGetterFunction; } JavascriptFunction* GetRegexStickyGetterFunction() const { return regexStickyGetterFunction; } + JavascriptFunction* GetRegexDotAllGetterFunction() const { return regexDotAllGetterFunction; } JavascriptFunction* GetRegexUnicodeGetterFunction() const { return regexUnicodeGetterFunction; } int GetRegexConstructorSlotIndex() const { return regexConstructorSlotIndex; } @@ -779,6 +811,7 @@ namespace Js int GetRegexFlagsGetterSlotIndex() const { return regexFlagsGetterSlotIndex; } int GetRegexGlobalGetterSlotIndex() const { return regexGlobalGetterSlotIndex; } int GetRegexStickyGetterSlotIndex() const { return regexStickyGetterSlotIndex; } + int GetRegexDotAllGetterSlotIndex() const { return regexDotAllGetterSlotIndex; } int GetRegexUnicodeGetterSlotIndex() const { return regexUnicodeGetterSlotIndex; } TypePath* GetRootPath() const { return rootPath; } @@ -892,6 +925,7 @@ namespace Js JavascriptError* CreateSyntaxError(); JavascriptError* CreateTypeError(); JavascriptError* CreateURIError(); + JavascriptError* CreateAggregateError(); JavascriptError* CreateStackOverflowError(); JavascriptError* CreateOutOfMemoryError(); JavascriptError* CreateWebAssemblyCompileError(); @@ -902,36 +936,62 @@ namespace Js JavascriptSymbol* CreateSymbol(const PropertyRecord* propertyRecord); JavascriptPromise* CreatePromise(); JavascriptGenerator* CreateGenerator(Arguments& args, ScriptFunction* scriptFunction, RecyclableObject* prototype); + JavascriptAsyncGenerator* CreateAsyncGenerator(Arguments& args, ScriptFunction* scriptFunction, RecyclableObject* prototype); + JavascriptAsyncFromSyncIterator* CreateAsyncFromSyncIterator(RecyclableObject* syncIterator); JavascriptFunction* CreateNonProfiledFunction(FunctionInfo * functionInfo); template JavascriptExternalFunction* CreateIdMappedExternalFunction(MethodType entryPoint, DynamicType *pPrototypeType); JavascriptExternalFunction* CreateExternalConstructor(Js::ExternalMethod entryPoint, PropertyId nameId, RecyclableObject * prototype); JavascriptExternalFunction* CreateExternalConstructor(Js::ExternalMethod entryPoint, PropertyId nameId, InitializeMethod method, unsigned short deferredTypeSlots, bool hasAccessors); - DynamicType* GetCachedJsrtExternalType(uintptr_t finalizeCallback); - void CacheJsrtExternalType(uintptr_t finalizeCallback, DynamicType* dynamicType); +#ifdef _CHAKRACOREBUILD + DynamicType* GetCachedCustomExternalWrapperType(uintptr_t traceCallback, uintptr_t finalizeCallback, uintptr_t interceptors, uintptr_t prototype); + void CacheCustomExternalWrapperType(uintptr_t traceCallback, uintptr_t finalizeCallback, uintptr_t interceptors, uintptr_t prototype, DynamicType* dynamicType); + + JsrtExternalType* GetCachedJsrtExternalType(uintptr_t traceCallback, uintptr_t finalizeCallback, uintptr_t prototype); + void CacheJsrtExternalType(uintptr_t traceCallback, uintptr_t finalizeCallback, uintptr_t prototype, JsrtExternalType* dynamicType); +#else + JsrtExternalType* GetCachedJsrtExternalType(uintptr_t finalizeCallback, uintptr_t prototype); + void CacheJsrtExternalType(uintptr_t finalizeCallback, uintptr_t prototype, JsrtExternalType* dynamicType); +#endif static DynamicTypeHandler * GetDeferredPrototypeGeneratorFunctionTypeHandler(ScriptContext* scriptContext); static DynamicTypeHandler * GetDeferredPrototypeAsyncFunctionTypeHandler(ScriptContext* scriptContext); + DynamicType * CreateDeferredPrototypeAsyncGeneratorFunctionType(JavascriptMethod entrypoint, bool isAnonymousFunction, bool isShared = false); DynamicType * CreateDeferredPrototypeGeneratorFunctionType(JavascriptMethod entrypoint, bool isAnonymousFunction, bool isShared = false); DynamicType * CreateDeferredPrototypeAsyncFunctionType(JavascriptMethod entrypoint, bool isAnonymousFunction, bool isShared = false); static DynamicTypeHandler * GetDeferredPrototypeFunctionTypeHandler(ScriptContext* scriptContext); static DynamicTypeHandler * GetDeferredPrototypeFunctionWithLengthTypeHandler(ScriptContext* scriptContext); - static DynamicTypeHandler * GetDeferredAnonymousPrototypeFunctionTypeHandler(); + static DynamicTypeHandler * GetDeferredPrototypeAsyncGeneratorFunctionTypeHandler(); + static DynamicTypeHandler * GetDeferredAnonymousPrototypeFunctionWithLengthTypeHandler(); static DynamicTypeHandler * GetDeferredAnonymousPrototypeGeneratorFunctionTypeHandler(); static DynamicTypeHandler * GetDeferredAnonymousPrototypeAsyncFunctionTypeHandler(); + static DynamicTypeHandler * GetDeferredAnonymousPrototypeAsyncGeneratorFunctionTypeHandler(); DynamicTypeHandler * GetDeferredFunctionTypeHandler(); + DynamicTypeHandler * GetDeferredFunctionWithLengthTypeHandler(); + DynamicTypeHandler* GetDeferredFunctionWithLengthUnsetTypeHandler(); + DynamicTypeHandler * GetDeferredPrototypeFunctionWithNameAndLengthTypeHandler(); DynamicTypeHandler * ScriptFunctionTypeHandler(bool noPrototypeProperty, bool isAnonymousFunction); + DynamicTypeHandler * ClassConstructorTypeHandler(); + DynamicTypeHandler * AnonymousClassConstructorTypeHandler(); + DynamicTypeHandler * GetDeferredAnonymousFunctionWithLengthTypeHandler(); DynamicTypeHandler * GetDeferredAnonymousFunctionTypeHandler(); - template + template static DynamicTypeHandler * GetDeferredFunctionTypeHandlerBase(); template static DynamicTypeHandler * GetDeferredGeneratorFunctionTypeHandlerBase(); + template + static DynamicTypeHandler * GetDeferredAsyncGeneratorFunctionTypeHandlerBase(); template static DynamicTypeHandler * GetDeferredAsyncFunctionTypeHandlerBase(); + DynamicType * CreateDeferredFunctionType(JavascriptMethod entrypoint); DynamicType * CreateDeferredPrototypeFunctionType(JavascriptMethod entrypoint); - DynamicType * CreateDeferredPrototypeFunctionTypeNoProfileThunk(JavascriptMethod entrypoint, bool isShared = false, bool isLengthAvailable = false); + DynamicType * CreateDeferredPrototypeFunctionTypeNoProfileThunk(JavascriptMethod entrypoint, bool isShared = false); + DynamicType * CreateDeferredFunctionTypeNoProfileThunk(JavascriptMethod entrypoint, bool isShared = false); + DynamicType * CreateDeferredLengthPrototypeFunctionTypeNoProfileThunk(JavascriptMethod entrypoint, bool isShared = false); + DynamicType * CreateDeferredLengthFunctionTypeNoProfileThunk(JavascriptMethod entrypoint, bool isShared = false); + template DynamicType * CreateDeferredFunctionTypeNoProfileThunk_Internal(JavascriptMethod entrypoint, bool isShared); DynamicType * CreateFunctionType(JavascriptMethod entrypoint, RecyclableObject* prototype = nullptr); DynamicType * CreateFunctionWithConfigurableLengthType(FunctionInfo * functionInfo); DynamicType * CreateFunctionWithLengthType(FunctionInfo * functionInfo); @@ -949,7 +1009,9 @@ namespace Js ScriptFunctionWithInlineCache * CreateScriptFunctionWithInlineCache(FunctionProxy* proxy); GeneratorVirtualScriptFunction * CreateGeneratorVirtualScriptFunction(FunctionProxy* proxy); - DynamicType * CreateGeneratorType(RecyclableObject* prototype); + DynamicType* CreateGeneratorType(RecyclableObject* prototype); + DynamicType* CreateAsyncGeneratorType(RecyclableObject* prototype); + DynamicType* CreateAsyncFromSyncIteratorType(); #if 0 JavascriptNumber* CreateNumber(double value); @@ -957,18 +1019,22 @@ namespace Js JavascriptNumber* CreateNumber(double value, RecyclerJavascriptNumberAllocator * numberAllocator); JavascriptGeneratorFunction* CreateGeneratorFunction(JavascriptMethod entryPoint, GeneratorVirtualScriptFunction* scriptFunction); JavascriptGeneratorFunction* CreateGeneratorFunction(JavascriptMethod entryPoint, bool isAnonymousFunction); + JavascriptAsyncGeneratorFunction* CreateAsyncGeneratorFunction(JavascriptMethod entryPoint, GeneratorVirtualScriptFunction* scriptFunction); + AsyncGeneratorCallbackFunction* CreateAsyncGeneratorCallbackFunction(JavascriptMethod entryPoint, JavascriptAsyncGenerator* generator); + RuntimeFunction* CreateAsyncModuleCallbackFunction(JavascriptMethod entryPoint, SourceTextModuleRecord* module); JavascriptAsyncFunction* CreateAsyncFunction(JavascriptMethod entryPoint, GeneratorVirtualScriptFunction* scriptFunction); JavascriptAsyncFunction* CreateAsyncFunction(JavascriptMethod entryPoint, bool isAnonymousFunction); + JavascriptAsyncSpawnStepFunction* CreateAsyncSpawnStepFunction(JavascriptMethod entryPoint, JavascriptGenerator* generator, Var argument, Var resolve = nullptr, Var reject = nullptr, bool isReject = false); JavascriptExternalFunction* CreateExternalFunction(ExternalMethod entryPointer, PropertyId nameId, Var signature, UINT64 flags, bool isLengthAvailable = false); JavascriptExternalFunction* CreateExternalFunction(ExternalMethod entryPointer, Var nameId, Var signature, UINT64 flags, bool isLengthAvailable = false); JavascriptExternalFunction* CreateStdCallExternalFunction(StdCallJavascriptMethod entryPointer, Var name, void *callbackState); - JavascriptPromiseAsyncSpawnExecutorFunction* CreatePromiseAsyncSpawnExecutorFunction(JavascriptGenerator* generator, Var target); - JavascriptPromiseAsyncSpawnStepArgumentExecutorFunction* CreatePromiseAsyncSpawnStepArgumentExecutorFunction(JavascriptMethod entryPoint, JavascriptGenerator* generator, Var argument, Var resolve = nullptr, Var reject = nullptr, bool isReject = false); JavascriptPromiseCapabilitiesExecutorFunction* CreatePromiseCapabilitiesExecutorFunction(JavascriptMethod entryPoint, JavascriptPromiseCapability* capability); JavascriptPromiseResolveOrRejectFunction* CreatePromiseResolveOrRejectFunction(JavascriptMethod entryPoint, JavascriptPromise* promise, bool isReject, JavascriptPromiseResolveOrRejectFunctionAlreadyResolvedWrapper* alreadyResolvedRecord); JavascriptPromiseReactionTaskFunction* CreatePromiseReactionTaskFunction(JavascriptMethod entryPoint, JavascriptPromiseReaction* reaction, Var argument); JavascriptPromiseResolveThenableTaskFunction* CreatePromiseResolveThenableTaskFunction(JavascriptMethod entryPoint, JavascriptPromise* promise, RecyclableObject* thenable, RecyclableObject* thenFunction); JavascriptPromiseAllResolveElementFunction* CreatePromiseAllResolveElementFunction(JavascriptMethod entryPoint, uint32 index, JavascriptArray* values, JavascriptPromiseCapability* capabilities, JavascriptPromiseAllResolveElementFunctionRemainingElementsWrapper* remainingElements); + JavascriptPromiseAnyRejectElementFunction* CreatePromiseAnyRejectElementFunction(JavascriptMethod entryPoint, uint32 index, JavascriptArray* errors, JavascriptPromiseCapability* capabilities, JavascriptPromiseAllResolveElementFunctionRemainingElementsWrapper* remainingElements, JavascriptPromiseResolveOrRejectFunctionAlreadyResolvedWrapper* alreadyCalledWrapper); + JavascriptPromiseAllSettledResolveOrRejectElementFunction* CreatePromiseAllSettledResolveOrRejectElementFunction(JavascriptMethod entryPoint, uint32 index, JavascriptArray* values, JavascriptPromiseCapability* capabilities, JavascriptPromiseAllResolveElementFunctionRemainingElementsWrapper* remainingElements, JavascriptPromiseResolveOrRejectFunctionAlreadyResolvedWrapper* alreadyCalledWrapper, bool isRejecting); JavascriptPromiseThenFinallyFunction* CreatePromiseThenFinallyFunction(JavascriptMethod entryPoint, RecyclableObject* OnFinally, RecyclableObject* Constructor, bool shouldThrow); JavascriptPromiseThunkFinallyFunction* CreatePromiseThunkFinallyFunction(JavascriptMethod entryPoint, Var value, bool shouldThrow); JavascriptExternalFunction* CreateWrappedExternalFunction(JavascriptExternalFunction* wrappedFunction); @@ -980,7 +1046,9 @@ namespace Js #endif DynamicObject* CreateGeneratorConstructorPrototypeObject(); + DynamicObject* CreateAsyncGeneratorConstructorPrototypeObject(); DynamicObject* CreateConstructorPrototypeObject(JavascriptFunction * constructor); + DynamicObject* CreateClassPrototypeObject(RecyclableObject * protoParent); DynamicObject* CreateObject(const bool allowObjectHeaderInlining = false, const PropertyIndex requestedInlineSlotCapacity = 0); DynamicObject* CreateObject(DynamicTypeHandler * typeHandler); DynamicObject* CreateActivationObject(); @@ -998,8 +1066,6 @@ namespace Js template<> JavascriptString* CreateStringFromCppLiteral(const char16 (&value)[2]) const; // Specialization for single-char strings PropertyString* CreatePropertyString(const Js::PropertyRecord* propertyRecord); - JavascriptVariantDate* CreateVariantDate(const double value); - JavascriptBooleanObject* CreateBooleanObject(BOOL value); JavascriptBooleanObject* CreateBooleanObject(); JavascriptNumberObject* CreateNumberObjectWithCheck(double value); @@ -1016,8 +1082,8 @@ namespace Js JavascriptRegExp* CreateRegExp(UnifiedRegex::RegexPattern* pattern); DynamicObject* CreateIteratorResultObject(Var value, Var done); - DynamicObject* CreateIteratorResultObjectValueFalse(Var value); - DynamicObject* CreateIteratorResultObjectUndefinedTrue(); + DynamicObject* CreateIteratorResultObject(Var value, bool done = false); + DynamicObject* CreateIteratorResultObjectDone(); RecyclableObject* CreateThrowErrorObject(JavascriptError* error); @@ -1026,6 +1092,14 @@ namespace Js JavascriptFunction* EnsureGeneratorReturnFunction(); JavascriptFunction* EnsureGeneratorNextFunction(); JavascriptFunction* EnsureGeneratorThrowFunction(); + JavascriptFunction* EnsureAsyncGeneratorNextFunction(); + JavascriptFunction* EnsureAsyncGeneratorReturnFunction(); + JavascriptFunction* EnsureAsyncGeneratorThrowFunction(); + JavascriptFunction* EnsureAsyncFromSyncIteratorNextFunction(); + JavascriptFunction* EnsureAsyncFromSyncIteratorThrowFunction(); + JavascriptFunction* EnsureAsyncFromSyncIteratorReturnFunction(); + RuntimeFunction* EnsureAsyncFromSyncIteratorValueUnwrapTrueFunction(); + RuntimeFunction* EnsureAsyncFromSyncIteratorValueUnwrapFalseFunction(); JavascriptFunction* EnsureArrayPrototypeForEachFunction(); JavascriptFunction* EnsureArrayPrototypeKeysFunction(); JavascriptFunction* EnsureArrayPrototypeEntriesFunction(); @@ -1052,12 +1126,7 @@ namespace Js static bool IsCachedCopyOnAccessArrayCallSite(const JavascriptLibrary *lib, ArrayCallSiteInfo *arrayInfo); template static void CheckAndConvertCopyOnAccessNativeIntArray(const T instance); -#endif - - void EnsureStringTemplateCallsiteObjectList(); - void AddStringTemplateCallsiteObject(RecyclableObject* callsite); - RecyclableObject* TryGetStringTemplateCallsiteObject(ParseNodePtr pnode); - RecyclableObject* TryGetStringTemplateCallsiteObject(RecyclableObject* callsite); +#endif static void CheckAndInvalidateIsConcatSpreadableCache(PropertyId propertyId, ScriptContext *scriptContext); @@ -1120,6 +1189,7 @@ namespace Js } EnumeratorCache* GetObjectAssignCache(Type* type); + EnumeratorCache* GetCreateKeysCache(Type* type); EnumeratorCache* GetStringifyCache(Type* type); bool GetArrayObjectHasUserDefinedSpecies() const { return arrayObjectHasUserDefinedSpecies; } @@ -1129,6 +1199,7 @@ namespace Js void SetFakeGlobalFuncForUndefer(FunctionBody* functionBody) { this->fakeGlobalFuncForUndefer = functionBody; } ModuleRecordList* EnsureModuleRecordList(); + ModuleRecordList* GetModuleRecordList() const { return this->moduleRecordList; } SourceTextModuleRecord* GetModuleRecord(uint moduleId); private: @@ -1160,6 +1231,7 @@ namespace Js STANDARD_INIT(SyntaxError); STANDARD_INIT(TypeError); STANDARD_INIT(URIError); + STANDARD_INIT(AggregateError); STANDARD_INIT(RuntimeError); STANDARD_INIT(TypedArray); STANDARD_INIT(Int8Array); @@ -1177,6 +1249,7 @@ namespace Js STANDARD_INIT(Proxy); STANDARD_INIT(Function); STANDARD_INIT(Number); + STANDARD_INIT(BigInt); STANDARD_INIT(Object); STANDARD_INIT(Regex); STANDARD_INIT(String); @@ -1187,6 +1260,7 @@ namespace Js STANDARD_INIT(Promise); STANDARD_INIT(GeneratorFunction); STANDARD_INIT(AsyncFunction); + STANDARD_INIT(AsyncGeneratorFunction); STANDARD_INIT(WebAssemblyCompileError); STANDARD_INIT(WebAssemblyRuntimeError); STANDARD_INIT(WebAssemblyLinkError); @@ -1218,10 +1292,7 @@ namespace Js static bool __cdecl InitializeIntlObject(DynamicObject* IntlEngineObject, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode); #endif -#ifdef ENABLE_PROJECTION - void InitializeWinRTPromiseConstructor(); -#endif - + static bool __cdecl JavascriptLibrary::InitializeAsyncIteratorPrototype(DynamicObject* asyncIteratorPrototype, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode); static bool __cdecl InitializeIteratorPrototype(DynamicObject* iteratorPrototype, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode); static bool __cdecl InitializeArrayIteratorPrototype(DynamicObject* arrayIteratorPrototype, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode); static bool __cdecl InitializeMapIteratorPrototype(DynamicObject* mapIteratorPrototype, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode); @@ -1229,6 +1300,8 @@ namespace Js static bool __cdecl InitializeStringIteratorPrototype(DynamicObject* stringIteratorPrototype, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode); static bool __cdecl InitializeGeneratorPrototype(DynamicObject* generatorPrototype, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode); + static bool __cdecl InitializeAsyncGeneratorPrototype(DynamicObject* asyncGeneratorPrototype, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode); + static bool __cdecl InitializeAsyncFromSyncIteratorPrototype(DynamicObject* asyncFromSyncIteratorProtototype, DeferredTypeHandlerBase* typeHandler, DeferredInitializeMode mode); static bool __cdecl InitializeAsyncFunction(DynamicObject *function, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode); @@ -1243,6 +1316,7 @@ namespace Js template EnumeratorCache* GetEnumeratorCache(Type* type, Field(EnumeratorCache*)* cacheSlots); + static bool __cdecl InitializeAsyncGeneratorFunction(DynamicObject* function, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode); static bool __cdecl InitializeGeneratorFunction(DynamicObject* function, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode); static size_t const LibraryFunctionArgC[BuiltinFunction::Count + 1]; @@ -1252,7 +1326,7 @@ namespace Js #endif public: - template + template static bool __cdecl InitializeFunction(DynamicObject* function, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode); virtual void Finalize(bool isShutdown) override; @@ -1286,6 +1360,7 @@ namespace Js HRESULT ProfilerRegisterFunction(); HRESULT ProfilerRegisterMath(); HRESULT ProfilerRegisterNumber(); + HRESULT ProfilerRegisterBigInt(); HRESULT ProfilerRegisterString(); HRESULT ProfilerRegisterRegExp(); HRESULT ProfilerRegisterJSON(); diff --git a/lib/Runtime/Library/JavascriptLibraryBase.h b/lib/Runtime/Library/JavascriptLibraryBase.h index 9a2f2432d1c..8cdaa7adc74 100644 --- a/lib/Runtime/Library/JavascriptLibraryBase.h +++ b/lib/Runtime/Library/JavascriptLibraryBase.h @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- @@ -39,6 +40,7 @@ namespace Js JavascriptSymbol* GetSymbolHasInstance() { return symbolHasInstance; } JavascriptSymbol* GetSymbolIsConcatSpreadable() { return symbolIsConcatSpreadable; } + JavascriptSymbol* GetSymbolAsyncIterator() { return symbolAsyncIterator; } JavascriptSymbol* GetSymbolIterator() { return symbolIterator; } JavascriptSymbol* GetSymbolToPrimitive() { return symbolToPrimitive; } JavascriptSymbol* GetSymbolToStringTag() { return symbolToStringTag; } @@ -50,6 +52,7 @@ namespace Js JavascriptFunction* GetDateConstructor() { return dateConstructor; } JavascriptFunction* GetFunctionConstructor() { return functionConstructor; } JavascriptFunction* GetNumberConstructor() { return numberConstructor; } + JavascriptFunction* GetBigIntConstructor() { return bigIntConstructor; } JavascriptRegExpConstructor* GetRegExpConstructor() { return regexConstructor; } JavascriptFunction* GetStringConstructor() { return stringConstructor; } JavascriptFunction* GetArrayBufferConstructor() { return arrayBufferConstructor; } @@ -73,6 +76,7 @@ namespace Js JavascriptFunction* GetPromiseConstructor() const { return promiseConstructor; } JavascriptFunction* GetGeneratorFunctionConstructor() const { return generatorFunctionConstructor; } JavascriptFunction* GetAsyncFunctionConstructor() const { return asyncFunctionConstructor; } + JavascriptFunction* GetAsyncGeneratorFunctionConstructor() const { return asyncGeneratorFunctionConstructor; } JavascriptFunction* GetErrorConstructor() const { return errorConstructor; } JavascriptFunction* GetEvalErrorConstructor() const { return evalErrorConstructor; } @@ -81,6 +85,7 @@ namespace Js JavascriptFunction* GetSyntaxErrorConstructor() const { return syntaxErrorConstructor; } JavascriptFunction* GetTypeErrorConstructor() const { return typeErrorConstructor; } JavascriptFunction* GetURIErrorConstructor() const { return uriErrorConstructor; } + JavascriptFunction* GetAggregateErrorConstructor() const { return aggregateErrorConstructor; } JavascriptFunction* GetPromiseResolve() const { return promiseResolveFunction; } JavascriptFunction* GetPromiseThen() const { return promiseThenFunction; } JavascriptFunction* GetJSONStringify() const { return jsonStringifyFunction; } @@ -101,7 +106,7 @@ namespace Js #ifdef ENABLE_INTL_OBJECT DynamicObject* GetIntlObject() { return IntlObject; } #endif -#if defined(ENABLE_INTL_OBJECT) || defined(ENABLE_JS_BUILTINS) || defined(ENABLE_PROJECTION) +#if defined(ENABLE_INTL_OBJECT) || defined(ENABLE_JS_BUILTINS) EngineInterfaceObject* GetEngineInterfaceObject() { return engineInterfaceObject; } #endif @@ -110,6 +115,7 @@ namespace Js DynamicObject* GetDatePrototype() { return datePrototype; } DynamicObject* GetFunctionPrototype() { return functionPrototype; } DynamicObject* GetNumberPrototype() { return numberPrototype; } + DynamicObject* GetBigIntPrototype() { return bigintPrototype; } DynamicObject* GetSIMDBool8x16Prototype() { return simdBool8x16Prototype; } DynamicObject* GetSIMDBool16x8Prototype() { return simdBool16x8Prototype; } DynamicObject* GetSIMDBool32x4Prototype() { return simdBool32x4Prototype; } @@ -130,6 +136,7 @@ namespace Js DynamicObject* GetWeakMapPrototype() { return weakMapPrototype; } DynamicObject* GetWeakSetPrototype() { return weakSetPrototype; } DynamicObject* GetSymbolPrototype() { return symbolPrototype; } + DynamicObject* GetAsyncIteratorPrototype() const { return asyncIteratorPrototype; } DynamicObject* GetArrayIteratorPrototype() const { return arrayIteratorPrototype; } DynamicObject* GetMapIteratorPrototype() const { return mapIteratorPrototype; } DynamicObject* GetSetIteratorPrototype() const { return setIteratorPrototype; } @@ -139,6 +146,7 @@ namespace Js DynamicObject* GetGeneratorFunctionPrototype() const { return generatorFunctionPrototype; } DynamicObject* GetGeneratorPrototype() const { return generatorPrototype; } DynamicObject* GetAsyncFunctionPrototype() const { return asyncFunctionPrototype; } + DynamicObject* GetAsyncGeneratorFunctionPrototype() const { return asyncGeneratorFunctionPrototype; } DynamicObject* GetErrorPrototype() const { return errorPrototype; } DynamicObject* GetEvalErrorPrototype() const { return evalErrorPrototype; } @@ -147,6 +155,7 @@ namespace Js DynamicObject* GetSyntaxErrorPrototype() const { return syntaxErrorPrototype; } DynamicObject* GetTypeErrorPrototype() const { return typeErrorPrototype; } DynamicObject* GetURIErrorPrototype() const { return uriErrorPrototype; } + DynamicObject* GetAggregateErrorPrototype() const { return aggregateErrorPrototype; } PropertyId GetPropertyIdSymbolIterator() { return PropertyIds::_symbolIterator; }; PropertyId GetPropertyIdSymbolToStringTag() { return PropertyIds::_symbolToStringTag; }; PropertyId GetPropertyIdSymbolUnscopables() { return PropertyIds::_symbolUnscopables; }; @@ -176,6 +185,7 @@ namespace Js Field(RuntimeFunction*) dateConstructor; Field(RuntimeFunction*) functionConstructor; Field(RuntimeFunction*) numberConstructor; + Field(RuntimeFunction*) bigIntConstructor; Field(RuntimeFunction*) objectConstructor; Field(RuntimeFunction*) symbolConstructor; Field(JavascriptRegExpConstructor*) regexConstructor; @@ -189,10 +199,12 @@ namespace Js Field(RuntimeFunction*) syntaxErrorConstructor; Field(RuntimeFunction*) typeErrorConstructor; Field(RuntimeFunction*) uriErrorConstructor; + Field(RuntimeFunction*) aggregateErrorConstructor; Field(RuntimeFunction*) proxyConstructor; Field(RuntimeFunction*) promiseConstructor; Field(RuntimeFunction*) generatorFunctionConstructor; Field(RuntimeFunction*) asyncFunctionConstructor; + Field(RuntimeFunction*) asyncGeneratorFunctionConstructor; Field(JavascriptFunction*) defaultAccessorFunction; Field(JavascriptFunction*) stackTraceAccessorFunction; @@ -217,7 +229,7 @@ namespace Js #ifdef ENABLE_INTL_OBJECT Field(DynamicObject*) IntlObject; #endif -#if defined(ENABLE_INTL_OBJECT) || defined(ENABLE_JS_BUILTINS) || defined(ENABLE_PROJECTION) +#if defined(ENABLE_INTL_OBJECT) || defined(ENABLE_JS_BUILTINS) Field(EngineInterfaceObject*) engineInterfaceObject; #endif Field(DynamicObject*) reflectObject; @@ -245,6 +257,7 @@ namespace Js Field(DynamicObject*) datePrototype; Field(DynamicObject*) functionPrototype; Field(DynamicObject*) numberPrototype; + Field(DynamicObject*) bigintPrototype; Field(ObjectPrototypeObject*) objectPrototype; Field(DynamicObject*) regexPrototype; Field(DynamicObject*) stringPrototype; @@ -253,15 +266,19 @@ namespace Js Field(DynamicObject*) weakMapPrototype; Field(DynamicObject*) weakSetPrototype; Field(DynamicObject*) symbolPrototype; + Field(DynamicObject*) asyncIteratorPrototype; // aka %AsyncIteratorPrototype% Field(DynamicObject*) iteratorPrototype; // aka %IteratorPrototype% Field(DynamicObject*) arrayIteratorPrototype; Field(DynamicObject*) mapIteratorPrototype; Field(DynamicObject*) setIteratorPrototype; Field(DynamicObject*) stringIteratorPrototype; Field(DynamicObject*) promisePrototype; - Field(DynamicObject*) generatorFunctionPrototype; // aka %Generator% - Field(DynamicObject*) generatorPrototype; // aka %GeneratorPrototype% - Field(DynamicObject*) asyncFunctionPrototype; // aka %AsyncFunctionPrototype% + Field(DynamicObject*) generatorFunctionPrototype; // aka %Generator% + Field(DynamicObject*) generatorPrototype; // aka %GeneratorPrototype% + Field(DynamicObject*) asyncFunctionPrototype; // aka %AsyncFunctionPrototype% + Field(DynamicObject*) asyncGeneratorPrototype; // aka %AsyncGeneratorPrototype% + Field(DynamicObject*) asyncGeneratorFunctionPrototype; // aka %AsyncGeneratorFunctionPrototype% + Field(DynamicObject*) asyncFromSyncIteratorProtototype; Field(DynamicObject*) errorPrototype; Field(DynamicObject*) evalErrorPrototype; @@ -270,6 +287,7 @@ namespace Js Field(DynamicObject*) syntaxErrorPrototype; Field(DynamicObject*) typeErrorPrototype; Field(DynamicObject*) uriErrorPrototype; + Field(DynamicObject*) aggregateErrorPrototype; //SIMD Prototypes Field(DynamicObject*) simdBool8x16Prototype; @@ -297,6 +315,7 @@ namespace Js Field(RecyclableObject*) undefinedValue; Field(RecyclableObject*) nullValue; + Field(JavascriptSymbol*) symbolAsyncIterator; Field(JavascriptSymbol*) symbolHasInstance; Field(JavascriptSymbol*) symbolIsConcatSpreadable; Field(JavascriptSymbol*) symbolIterator; @@ -336,6 +355,14 @@ namespace Js Field(JavascriptFunction*) getStackTrace; #ifdef EDIT_AND_CONTINUE Field(JavascriptFunction*) editSource; +#endif + Field(JavascriptFunction*) mathMin; + Field(JavascriptFunction*) mathMax; + +#ifdef ENABLE_JS_BUILTINS + public: + JavascriptFunction* GetMathMinFunction() const { return mathMin; } + JavascriptFunction* GetMathMaxFunction() const { return mathMax; } #endif }; } diff --git a/lib/Runtime/Library/JavascriptListIterator.cpp b/lib/Runtime/Library/JavascriptListIterator.cpp index bf9d621f282..b8f5ef6e9ef 100644 --- a/lib/Runtime/Library/JavascriptListIterator.cpp +++ b/lib/Runtime/Library/JavascriptListIterator.cpp @@ -15,27 +15,6 @@ namespace Js count = list->Count(); } - bool JavascriptListIterator::Is(Var aValue) - { - TypeId typeId = JavascriptOperators::GetTypeId(aValue); - return typeId == TypeIds_ListIterator; - } - - JavascriptListIterator* JavascriptListIterator::FromVar(Var aValue) - { - AssertOrFailFastMsg(Is(aValue), "Ensure var is actually a 'JavascriptListIterator'"); - - return static_cast(aValue); - } - - JavascriptListIterator* JavascriptListIterator::UnsafeFromVar(Var aValue) - { - AssertMsg(Is(aValue), "Ensure var is actually a 'JavascriptListIterator'"); - - return static_cast(aValue); - } - - Var JavascriptListIterator::EntryNext(RecyclableObject* function, CallInfo callInfo, ...) { PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); @@ -48,17 +27,17 @@ namespace Js Var thisObj = args[0]; - if (!JavascriptListIterator::Is(thisObj)) + if (!VarIs(thisObj)) { JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedListIterator, _u("ListIterator.next")); } - JavascriptListIterator* iterator = JavascriptListIterator::FromVar(thisObj); + JavascriptListIterator* iterator = VarTo(thisObj); ListForListIterator* list = iterator->listForIterator; if (list == nullptr) { - return library->CreateIteratorResultObjectUndefinedTrue(); + return library->CreateIteratorResultObjectDone(); } if (iterator->index >= iterator->count) @@ -66,13 +45,13 @@ namespace Js // Nulling out the listForIterator field is important so that the iterator // does not keep the list alive after iteration is completed. iterator->listForIterator = nullptr; - return library->CreateIteratorResultObjectUndefinedTrue(); + return library->CreateIteratorResultObjectDone(); } Var current = list->Item(iterator->index); iterator->index++; - return library->CreateIteratorResultObjectValueFalse(current); + return library->CreateIteratorResultObject(current); } } // namespace Js diff --git a/lib/Runtime/Library/JavascriptListIterator.h b/lib/Runtime/Library/JavascriptListIterator.h index c54ce9df3c2..549df6ccca7 100644 --- a/lib/Runtime/Library/JavascriptListIterator.h +++ b/lib/Runtime/Library/JavascriptListIterator.h @@ -20,10 +20,6 @@ namespace Js public: JavascriptListIterator(DynamicType* type, ListForListIterator* list); - static bool Is(Var aValue); - static JavascriptListIterator* FromVar(Var aValue); - static JavascriptListIterator* UnsafeFromVar(Var aValue); - class EntryInfo { public: @@ -33,5 +29,10 @@ namespace Js static Var EntryNext(RecyclableObject* function, CallInfo callInfo, ...); }; + + template <> inline bool VarIsImpl(RecyclableObject* obj) + { + return JavascriptOperators::GetTypeId(obj) == TypeIds_ListIterator; + } } // namespace Js diff --git a/lib/Runtime/Library/JavascriptMap.cpp b/lib/Runtime/Library/JavascriptMap.cpp index 0500cbed33e..e60abe8e2b2 100644 --- a/lib/Runtime/Library/JavascriptMap.cpp +++ b/lib/Runtime/Library/JavascriptMap.cpp @@ -18,25 +18,6 @@ JavascriptMap* JavascriptMap::New(ScriptContext* scriptContext) return map; } -bool JavascriptMap::Is(Var aValue) -{ - return JavascriptOperators::GetTypeId(aValue) == TypeIds_Map; -} - -JavascriptMap* JavascriptMap::FromVar(Var aValue) -{ - AssertOrFailFastMsg(Is(aValue), "Ensure var is actually a 'JavascriptMap'"); - - return static_cast(aValue); -} - -JavascriptMap* JavascriptMap::UnsafeFromVar(Var aValue) -{ - AssertMsg(Is(aValue), "Ensure var is actually a 'JavascriptMap'"); - - return static_cast(aValue); -} - JavascriptMap::MapDataList::Iterator JavascriptMap::GetIterator() { return list.GetIterator(); @@ -87,7 +68,7 @@ Var JavascriptMap::NewInstance(RecyclableObject* function, CallInfo callInfo, .. { JavascriptError::ThrowTypeError(scriptContext, JSERR_NeedFunction); } - adder = RecyclableObject::FromVar(adderVar); + adder = VarTo(adderVar); } if (iter != nullptr) @@ -100,7 +81,7 @@ Var JavascriptMap::NewInstance(RecyclableObject* function, CallInfo callInfo, .. JavascriptError::ThrowTypeError(scriptContext, JSERR_NeedObject); } - RecyclableObject* obj = RecyclableObject::FromVar(nextItem); + RecyclableObject* obj = VarTo(nextItem); Var key = nullptr, value = nullptr; @@ -124,7 +105,7 @@ Var JavascriptMap::NewInstance(RecyclableObject* function, CallInfo callInfo, .. } return isCtorSuperCall ? - JavascriptOperators::OrdinaryCreateFromConstructor(RecyclableObject::FromVar(newTarget), mapObject, nullptr, scriptContext) : + JavascriptOperators::OrdinaryCreateFromConstructor(VarTo(newTarget), mapObject, nullptr, scriptContext) : mapObject; } @@ -184,7 +165,7 @@ Var JavascriptMap::EntryForEach(RecyclableObject* function, CallInfo callInfo, . { JavascriptError::ThrowTypeError(scriptContext, JSERR_FunctionArgument_NeedFunction, _u("Map.prototype.forEach")); } - RecyclableObject* callBackFn = RecyclableObject::FromVar(args[1]); + RecyclableObject* callBackFn = VarTo(args[1]); Var thisArg = (args.Info.Count > 2) ? args[2] : scriptContext->GetLibrary()->GetUndefined(); diff --git a/lib/Runtime/Library/JavascriptMap.h b/lib/Runtime/Library/JavascriptMap.h index ac0948a1dd9..e0b831d7083 100644 --- a/lib/Runtime/Library/JavascriptMap.h +++ b/lib/Runtime/Library/JavascriptMap.h @@ -60,10 +60,6 @@ namespace Js static JavascriptMap* New(ScriptContext* scriptContext); - static bool Is(Var aValue); - static JavascriptMap* FromVar(Var aValue); - static JavascriptMap* UnsafeFromVar(Var aValue); - void Clear(); bool Delete(Var key); @@ -118,4 +114,9 @@ namespace Js static JavascriptMap* CreateForSnapshotRestore(ScriptContext* ctx); #endif }; + + template <> inline bool VarIsImpl(RecyclableObject* obj) + { + return JavascriptOperators::GetTypeId(obj) == TypeIds_Map; + } } diff --git a/lib/Runtime/Library/JavascriptMapIterator.cpp b/lib/Runtime/Library/JavascriptMapIterator.cpp index a37034257f6..eb192ddd54d 100644 --- a/lib/Runtime/Library/JavascriptMapIterator.cpp +++ b/lib/Runtime/Library/JavascriptMapIterator.cpp @@ -15,26 +15,6 @@ namespace Js Assert(type->GetTypeId() == TypeIds_MapIterator); } - bool JavascriptMapIterator::Is(Var aValue) - { - TypeId typeId = JavascriptOperators::GetTypeId(aValue); - return typeId == TypeIds_MapIterator; - } - - JavascriptMapIterator* JavascriptMapIterator::FromVar(Var aValue) - { - AssertOrFailFastMsg(Is(aValue), "Ensure var is actually a 'JavascriptMapIterator'"); - - return static_cast(aValue); - } - - JavascriptMapIterator* JavascriptMapIterator::UnsafeFromVar(Var aValue) - { - AssertMsg(Is(aValue), "Ensure var is actually a 'JavascriptMapIterator'"); - - return static_cast(aValue); - } - Var JavascriptMapIterator::EntryNext(RecyclableObject* function, CallInfo callInfo, ...) { PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); @@ -47,19 +27,19 @@ namespace Js Var thisObj = args[0]; - if (!JavascriptMapIterator::Is(thisObj)) + if (!VarIs(thisObj)) { JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedMapIterator, _u("Map Iterator.prototype.next")); } - JavascriptMapIterator* iterator = JavascriptMapIterator::FromVar(thisObj); + JavascriptMapIterator* iterator = VarTo(thisObj); JavascriptMap* map = iterator->m_map; auto& mapIterator = iterator->m_mapIterator; if (map == nullptr || !mapIterator.Next()) { iterator->m_map = nullptr; - return library->CreateIteratorResultObjectUndefinedTrue(); + return library->CreateIteratorResultObjectDone(); } auto entry = mapIterator.Current(); @@ -82,6 +62,6 @@ namespace Js result = entry.Value(); } - return library->CreateIteratorResultObjectValueFalse(result); + return library->CreateIteratorResultObject(result); } } //namespace Js diff --git a/lib/Runtime/Library/JavascriptMapIterator.h b/lib/Runtime/Library/JavascriptMapIterator.h index 96849c6029a..526b8ad5b5d 100644 --- a/lib/Runtime/Library/JavascriptMapIterator.h +++ b/lib/Runtime/Library/JavascriptMapIterator.h @@ -27,10 +27,6 @@ namespace Js public: JavascriptMapIterator(DynamicType* type, JavascriptMap* map, JavascriptMapIteratorKind kind); - static bool Is(Var aValue); - static JavascriptMapIterator* FromVar(Var aValue); - static JavascriptMapIterator* UnsafeFromVar(Var aValue); - class EntryInfo { public: @@ -42,4 +38,9 @@ namespace Js public: JavascriptMap* GetMapForHeapEnum() { return m_map; } }; + + template <> inline bool VarIsImpl(RecyclableObject* obj) + { + return JavascriptOperators::GetTypeId(obj) == TypeIds_MapIterator; + } } // namespace Js diff --git a/lib/Runtime/Library/JavascriptNumber.cpp b/lib/Runtime/Library/JavascriptNumber.cpp index c7572d71a96..c713887dd7c 100644 --- a/lib/Runtime/Library/JavascriptNumber.cpp +++ b/lib/Runtime/Library/JavascriptNumber.cpp @@ -23,7 +23,7 @@ namespace Js #if FLOATVAR if (IsNan(value)) { - value = JavascriptNumber::NaN; + value = IsNegative(value) ? JavascriptNumber::NegativeNaN : JavascriptNumber::NaN; } #endif return JavascriptNumber::NewInlined(value, scriptContext); @@ -383,9 +383,9 @@ namespace Js { result = args[1]; } - else if (JavascriptNumberObject::Is(args[1])) + else if (VarIs(args[1])) { - result = JavascriptNumber::ToVarNoCheck(JavascriptNumberObject::FromVar(args[1])->GetValue(), scriptContext); + result = JavascriptNumber::ToVarNoCheck(VarTo(args[1])->GetValue(), scriptContext); } else { @@ -404,7 +404,7 @@ namespace Js } return isCtorSuperCall ? - JavascriptOperators::OrdinaryCreateFromConstructor(RecyclableObject::FromVar(newTarget), RecyclableObject::FromVar(result), nullptr, scriptContext) : + JavascriptOperators::OrdinaryCreateFromConstructor(VarTo(newTarget), VarTo(result), nullptr, scriptContext) : result; } @@ -567,7 +567,7 @@ namespace Js if (JavascriptOperators::GetTypeId(args[0]) == TypeIds_HostDispatch) { Var result; - if (RecyclableObject::FromVar(args[0])->InvokeBuiltInOperationRemotely(EntryToExponential, args, &result)) + if (VarTo(args[0])->InvokeBuiltInOperationRemotely(EntryToExponential, args, &result)) { return result; } @@ -634,7 +634,7 @@ namespace Js if (JavascriptOperators::GetTypeId(args[0]) == TypeIds_HostDispatch) { Var result; - if (RecyclableObject::FromVar(args[0])->InvokeBuiltInOperationRemotely(EntryToFixed, args, &result)) + if (VarTo(args[0])->InvokeBuiltInOperationRemotely(EntryToFixed, args, &result)) { return result; } @@ -708,7 +708,7 @@ namespace Js if (JavascriptOperators::GetTypeId(args[0]) == TypeIds_HostDispatch) { Var result; - if (RecyclableObject::FromVar(args[0])->InvokeBuiltInOperationRemotely(EntryToPrecision, args, &result)) + if (VarTo(args[0])->InvokeBuiltInOperationRemotely(EntryToPrecision, args, &result)) { return result; } @@ -783,7 +783,7 @@ namespace Js { BEGIN_SAFE_REENTRANT_CALL(scriptContext->GetThreadContext()) { - return JavascriptString::FromVar(func->CallFunction(args)); + return VarTo(func->CallFunction(args)); } END_SAFE_REENTRANT_CALL } @@ -794,7 +794,7 @@ namespace Js { BEGIN_SAFE_REENTRANT_CALL(scriptContext->GetThreadContext()) { - return JavascriptString::FromVar(func->CallFunction(args)); + return VarTo(func->CallFunction(args)); } END_SAFE_REENTRANT_CALL } @@ -808,9 +808,9 @@ namespace Js if (JavascriptOperators::GetTypeId(args[0]) == TypeIds_HostDispatch) { Var result; - if (RecyclableObject::FromVar(args[0])->InvokeBuiltInOperationRemotely(EntryToLocaleString, args, &result)) + if (VarTo(args[0])->InvokeBuiltInOperationRemotely(EntryToLocaleString, args, &result)) { - return JavascriptString::FromVar(result); + return VarTo(result); } } @@ -846,7 +846,7 @@ namespace Js if (JavascriptOperators::GetTypeId(args[0]) == TypeIds_HostDispatch) { Var result; - if (RecyclableObject::FromVar(args[0])->InvokeBuiltInOperationRemotely(EntryToString, args, &result)) + if (VarTo(args[0])->InvokeBuiltInOperationRemotely(EntryToString, args, &result)) { return result; } @@ -905,9 +905,9 @@ namespace Js { return value; } - else if (JavascriptNumberObject::Is(value)) + else if (VarIs(value)) { - JavascriptNumberObject* obj = JavascriptNumberObject::FromVar(value); + JavascriptNumberObject* obj = VarTo(value); return CrossSite::MarshalVar(scriptContext, obj->Unwrap(), obj->GetScriptContext()); } else if (Js::JavascriptOperators::GetTypeId(value) == TypeIds_Int64Number) @@ -923,7 +923,7 @@ namespace Js if (JavascriptOperators::GetTypeId(value) == TypeIds_HostDispatch) { Var result; - if (RecyclableObject::FromVar(value)->InvokeBuiltInOperationRemotely(EntryValueOf, args, &result)) + if (VarTo(value)->InvokeBuiltInOperationRemotely(EntryValueOf, args, &result)) { return result; } @@ -1020,12 +1020,12 @@ namespace Js } else if (typeId == TypeIds_Int64Number) { - *pDouble = (double)JavascriptInt64Number::FromVar(aValue)->GetValue(); + *pDouble = (double)VarTo(aValue)->GetValue(); return TRUE; } else if (typeId == TypeIds_UInt64Number) { - *pDouble = (double)JavascriptUInt64Number::FromVar(aValue)->GetValue(); + *pDouble = (double)VarTo(aValue)->GetValue(); return TRUE; } else if (JavascriptNumber::Is_NoTaggedIntCheck(aValue)) @@ -1035,7 +1035,7 @@ namespace Js } else if (typeId == TypeIds_NumberObject) { - JavascriptNumberObject* obj = JavascriptNumberObject::FromVar(aValue); + JavascriptNumberObject* obj = VarTo(aValue); *pDouble = obj->GetValue(); return TRUE; } @@ -1094,7 +1094,7 @@ namespace Js JavascriptString *result = nullptr; - JavascriptString *dblStr = JavascriptString::FromVar(FormatDoubleToString(value, NumberUtilities::FormatFixed, -1, scriptContext)); + JavascriptString *dblStr = VarTo(FormatDoubleToString(value, NumberUtilities::FormatFixed, -1, scriptContext)); const char16* szValue = dblStr->GetSz(); const size_t szLength = dblStr->GetLength(); diff --git a/lib/Runtime/Library/JavascriptNumber.h b/lib/Runtime/Library/JavascriptNumber.h index fb309e76cef..ef893381500 100644 --- a/lib/Runtime/Library/JavascriptNumber.h +++ b/lib/Runtime/Library/JavascriptNumber.h @@ -37,6 +37,9 @@ namespace Js static Var ToVarMaybeInPlace(double value, ScriptContext* scriptContext, JavascriptNumber *result); static Var ToVarIntCheck(double value, ScriptContext* scriptContext); static Var ToVar(int32 nValue, ScriptContext* scriptContext); +#ifdef ENABLE_TEST_HOOKS + static Var ToVarFor32BitBytecode(int32 nValue, ScriptContext* scriptContext); +#endif #if defined(__clang__) && defined(_M_IX86) static Var ToVar(intptr_t nValue, ScriptContext* scriptContext); #endif @@ -55,6 +58,7 @@ namespace Js static bool TryToVarFastWithCheck(double value, Var* result); inline static BOOL IsNan(double value) { return NumberUtilities::IsNan(value); } + inline static BOOL IsNegative(double value) { return NumberUtilities::IsNegative(value); } static bool IsZero(double value); static BOOL IsNegZero(double value); static bool IsPosInf(double value); diff --git a/lib/Runtime/Library/JavascriptNumber.inl b/lib/Runtime/Library/JavascriptNumber.inl index 80e563b4ad6..303220863f0 100644 --- a/lib/Runtime/Library/JavascriptNumber.inl +++ b/lib/Runtime/Library/JavascriptNumber.inl @@ -14,7 +14,7 @@ namespace Js #endif ) { - AssertMsg(!IsNan(value) || ToSpecial(value) == k_Nan || ToSpecial(value) == 0x7FF8000000000000ull, "We should only produce a NaN with this value"); + AssertMsg(!IsNan(value) || ToSpecial(value) == k_NegativeNan || ToSpecial(value) == 0x7FF8000000000000ull, "We should only produce a NaN with this value"); SetSpecial(ToSpecial(value) ^ FloatTag_Value); } #else @@ -41,6 +41,17 @@ namespace Js } } +#ifdef ENABLE_TEST_HOOKS + __forceinline Var JavascriptNumber::ToVarFor32BitBytecode(int32 nValue, ScriptContext* scriptContext) + { + if ((1073741824 > nValue) && (nValue > -1073741824)) + { + return TaggedInt::ToVarUnchecked(nValue); + } + return JavascriptNumber::NewInlined((double) nValue, scriptContext); + } +#endif + #if defined(__clang__) && defined(_M_IX86) __forceinline Var JavascriptNumber::ToVar(intptr_t nValue, ScriptContext* scriptContext) { @@ -96,7 +107,7 @@ namespace Js #if FLOATVAR if (IsNan(value)) { - value = JavascriptNumber::NaN; + value = IsNegative(value) ? JavascriptNumber::NegativeNaN : JavascriptNumber::NaN; } *result = JavascriptNumber::ToVar(value); @@ -128,7 +139,7 @@ namespace Js { if (IsNan(value)) { - value = JavascriptNumber::NaN; + value = IsNegative(value) ? JavascriptNumber::NegativeNaN : JavascriptNumber::NaN; } return ToVar(value); } @@ -147,8 +158,8 @@ namespace Js inline Var JavascriptNumber::ToVar(double value) { - uint64 val = *(uint64*)&value; - AssertMsg(!IsNan(value) || ToSpecial(value) == k_Nan || ToSpecial(value) == 0x7FF8000000000000ull, "We should only produce a NaN with this value"); + const uint64 val = ToSpecial(value); + AssertMsg(!IsNan(value) || ToSpecial(value) == k_NegativeNan || ToSpecial(value) == 0x7FF8000000000000ull, "We should only produce a NaN with this value"); return reinterpret_cast(val ^ FloatTag_Value); } @@ -161,7 +172,7 @@ namespace Js #if !defined(USED_IN_STATIC_LIB) inline bool JavascriptNumber::Is_NoTaggedIntCheck(Var aValue) { - RecyclableObject* object = RecyclableObject::FromVar(aValue); + RecyclableObject* object = VarTo(aValue); AssertMsg((object->GetTypeId() == TypeIds_Number) == VirtualTableInfo::HasVirtualTable(object), "JavascriptNumber has no unique VTABLE?"); return VirtualTableInfo::HasVirtualTable(object); } diff --git a/lib/Runtime/Library/JavascriptNumberObject.cpp b/lib/Runtime/Library/JavascriptNumberObject.cpp index cae552183a2..6e552066cc8 100644 --- a/lib/Runtime/Library/JavascriptNumberObject.cpp +++ b/lib/Runtime/Library/JavascriptNumberObject.cpp @@ -20,25 +20,6 @@ namespace Js Assert(TaggedInt::Is(value) || !ThreadContext::IsOnStack(value)); } - bool JavascriptNumberObject::Is(Var aValue) - { - return JavascriptOperators::GetTypeId(aValue) == TypeIds_NumberObject; - } - - JavascriptNumberObject* JavascriptNumberObject::FromVar(Var aValue) - { - AssertOrFailFastMsg(Is(aValue), "Ensure var is actually a 'JavascriptNumber'"); - - return static_cast(aValue); - } - - JavascriptNumberObject* JavascriptNumberObject::UnsafeFromVar(Var aValue) - { - AssertMsg(Is(aValue), "Ensure var is actually a 'JavascriptNumber'"); - - return static_cast(aValue); - } - Var JavascriptNumberObject::Unwrap() const { return value; diff --git a/lib/Runtime/Library/JavascriptNumberObject.h b/lib/Runtime/Library/JavascriptNumberObject.h index 461951eda6e..bfd865daa02 100644 --- a/lib/Runtime/Library/JavascriptNumberObject.h +++ b/lib/Runtime/Library/JavascriptNumberObject.h @@ -18,9 +18,6 @@ namespace Js public: JavascriptNumberObject(Var value, DynamicType * type); - static bool Is(Var aValue); - static JavascriptNumberObject* FromVar(Var aValue); - static JavascriptNumberObject* UnsafeFromVar(Var aValue); double GetValue() const; void SetValue(Var value); Var Unwrap() const; @@ -38,4 +35,9 @@ namespace Js virtual void ExtractSnapObjectDataInto(TTD::NSSnapObjects::SnapObject* objData, TTD::SlabAllocator& alloc) override; #endif }; + + template <> inline bool VarIsImpl(RecyclableObject* obj) + { + return JavascriptOperators::GetTypeId(obj) == TypeIds_NumberObject; + } } diff --git a/lib/Runtime/Library/JavascriptObject.cpp b/lib/Runtime/Library/JavascriptObject.cpp index f82538bdbaf..2cac066ee61 100644 --- a/lib/Runtime/Library/JavascriptObject.cpp +++ b/lib/Runtime/Library/JavascriptObject.cpp @@ -1,1601 +1,1668 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #include "RuntimeLibraryPch.h" using namespace Js; - Var JavascriptObject::NewInstance(RecyclableObject* function, CallInfo callInfo, ...) +Var JavascriptObject::NewInstance(RecyclableObject* function, CallInfo callInfo, ...) +{ + PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); + ARGUMENTS(args, callInfo); + ScriptContext* scriptContext = function->GetScriptContext(); + JavascriptLibrary* library = scriptContext->GetLibrary(); + + AssertMsg(args.HasArg(), "Should always have implicit 'this'"); + + Var newTarget = args.GetNewTarget(); + if (JavascriptOperators::GetAndAssertIsConstructorSuperCall(args) && + newTarget != function) { - PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); + return JavascriptOperators::OrdinaryCreateFromConstructor( + VarTo(newTarget), + library->CreateObject(true), + nullptr, + scriptContext); + } - ARGUMENTS(args, callInfo); - ScriptContext* scriptContext = function->GetScriptContext(); + Var arg = args.Info.Count > 1 ? args[1] : library->GetUndefined(); + switch (JavascriptOperators::GetTypeId(arg)) + { + case TypeIds_Undefined: + case TypeIds_Null: + // Null and undefined result in a new object + return (callInfo.Flags & CallFlags_NotUsed) + ? arg + : library->CreateObject(true); - AssertMsg(args.HasArg(), "Should always have implicit 'this'"); + case TypeIds_StringObject: + case TypeIds_Function: + case TypeIds_Array: + case TypeIds_ES5Array: + case TypeIds_RegEx: + case TypeIds_NumberObject: + case TypeIds_SIMDObject: + case TypeIds_Date: + case TypeIds_BooleanObject: + case TypeIds_Error: + case TypeIds_Object: + case TypeIds_Arguments: + case TypeIds_ActivationObject: + case TypeIds_SymbolObject: + // Since we know this is an object, we can skip ToObject + return arg; + } - // SkipDefaultNewObject function flag should have prevented the default object from - // being created, except when call true a host dispatch. - Var newTarget = args.GetNewTarget(); - bool isCtorSuperCall = JavascriptOperators::GetAndAssertIsConstructorSuperCall(args); + RecyclableObject* result = nullptr; + JavascriptConversion::ToObject(arg, scriptContext, &result); + Assert(result); + return result; +} - if (args.Info.Count > 1) - { - switch (JavascriptOperators::GetTypeId(args[1])) - { - case TypeIds_Undefined: - case TypeIds_Null: - // Break to return a new object - break; - - case TypeIds_StringObject: - case TypeIds_Function: - case TypeIds_Array: - case TypeIds_ES5Array: - case TypeIds_RegEx: - case TypeIds_NumberObject: - case TypeIds_SIMDObject: - case TypeIds_Date: - case TypeIds_BooleanObject: - case TypeIds_Error: - case TypeIds_Object: - case TypeIds_Arguments: - case TypeIds_ActivationObject: - case TypeIds_SymbolObject: - return isCtorSuperCall ? - JavascriptOperators::OrdinaryCreateFromConstructor(RecyclableObject::FromVar(newTarget), RecyclableObject::FromVar(args[1]), nullptr, scriptContext) : - args[1]; - - default: - RecyclableObject* result = nullptr; - if (FALSE == JavascriptConversion::ToObject(args[1], scriptContext, &result)) - { - // JavascriptConversion::ToObject should only return FALSE for null and undefined. - Assert(false); - } +Var JavascriptObject::EntryHasOwnProperty(RecyclableObject* function, CallInfo callInfo, ...) +{ + JIT_HELPER_REENTRANT_HEADER(Object_HasOwnProperty); + PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); - return isCtorSuperCall ? - JavascriptOperators::OrdinaryCreateFromConstructor(RecyclableObject::FromVar(newTarget), result, nullptr, scriptContext) : - result; - } - } + ARGUMENTS(args, callInfo); + ScriptContext* scriptContext = function->GetScriptContext(); - if (callInfo.Flags & CallFlags_NotUsed) - { - return args[0]; - } - Var newObj = scriptContext->GetLibrary()->CreateObject(true); - return isCtorSuperCall ? - JavascriptOperators::OrdinaryCreateFromConstructor(RecyclableObject::FromVar(newTarget), RecyclableObject::FromVar(newObj), nullptr, scriptContext) : - newObj; - } + Assert(!(callInfo.Flags & CallFlags_New)); + + AssertMsg(args.Info.Count > 0, "Should always have implicit 'this'"); - Var JavascriptObject::EntryHasOwnProperty(RecyclableObject* function, CallInfo callInfo, ...) + RecyclableObject* dynamicObject = nullptr; + if (FALSE == JavascriptConversion::ToObject(args[0], scriptContext, &dynamicObject)) { - JIT_HELPER_REENTRANT_HEADER(Object_HasOwnProperty); - PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); + JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NullOrUndefined, _u("Object.prototype.hasOwnProperty")); + } - ARGUMENTS(args, callInfo); - ScriptContext* scriptContext = function->GetScriptContext(); + Var propertyName = args.Info.Count == 1 ? scriptContext->GetLibrary()->GetUndefined() : args[1]; - Assert(!(callInfo.Flags & CallFlags_New)); + const PropertyRecord* propertyRecord; + PropertyString* propertyString; + JavascriptConversion::ToPropertyKey(propertyName, scriptContext, &propertyRecord, &propertyString); - AssertMsg(args.Info.Count > 0, "Should always have implicit 'this'"); + if (JavascriptOperators::HasOwnProperty(dynamicObject, propertyRecord->GetPropertyId(), scriptContext, propertyString)) + { + return scriptContext->GetLibrary()->GetTrue(); + } - RecyclableObject* dynamicObject = nullptr; - if (FALSE == JavascriptConversion::ToObject(args[0], scriptContext, &dynamicObject)) - { - JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NullOrUndefined, _u("Object.prototype.hasOwnProperty")); - } + return scriptContext->GetLibrary()->GetFalse(); + JIT_HELPER_END(Object_HasOwnProperty); +} - // no property specified - if (args.Info.Count == 1) - { - return scriptContext->GetLibrary()->GetFalse(); - } +Var JavascriptObject::EntryHasOwn(RecyclableObject* function, CallInfo callInfo, ...) +{ + JIT_HELPER_REENTRANT_HEADER(Object_HasOwn); + PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); - const PropertyRecord* propertyRecord; - PropertyString* propertyString; - JavascriptConversion::ToPropertyKey(args[1], scriptContext, &propertyRecord, &propertyString); + ARGUMENTS(args, callInfo); + ScriptContext* scriptContext = function->GetScriptContext(); - if (JavascriptOperators::HasOwnProperty(dynamicObject, propertyRecord->GetPropertyId(), scriptContext, propertyString)) - { - return scriptContext->GetLibrary()->GetTrue(); - } + Assert(!(callInfo.Flags & CallFlags_New)); - return scriptContext->GetLibrary()->GetFalse(); - JIT_HELPER_END(Object_HasOwnProperty); + RecyclableObject* dynamicObject = nullptr; + // first parameter must exist and be an object coercible or throw type error + if (args.Info.Count < 2 || FALSE == JavascriptConversion::ToObject(args[1], scriptContext, &dynamicObject)) + { + JavascriptError::ThrowTypeError(scriptContext, JSERR_FunctionArgument_NeedObject, _u("Object.hasOwn")); } - Var JavascriptObject::EntryPropertyIsEnumerable(RecyclableObject* function, CallInfo callInfo, ...) + // if there is only one parameter use undefined as the property to query + Var propertyName = args.Info.Count == 2 ? scriptContext->GetLibrary()->GetUndefined() : args[2]; + + const PropertyRecord* propertyRecord; + PropertyString* propertyString; + JavascriptConversion::ToPropertyKey(propertyName, scriptContext, &propertyRecord, &propertyString); + + if (JavascriptOperators::HasOwnProperty(dynamicObject, propertyRecord->GetPropertyId(), scriptContext, propertyString)) { - PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); + return scriptContext->GetLibrary()->GetTrue(); + } - ARGUMENTS(args, callInfo); - ScriptContext* scriptContext = function->GetScriptContext(); + return scriptContext->GetLibrary()->GetFalse(); + JIT_HELPER_END(Object_HasOwn); +} - Assert(!(callInfo.Flags & CallFlags_New)); - AssertMsg(args.Info.Count > 0, "Should always have implicit 'this'"); +Var JavascriptObject::EntryPropertyIsEnumerable(RecyclableObject* function, CallInfo callInfo, ...) +{ + PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); - RecyclableObject* dynamicObject = nullptr; - if (FALSE == JavascriptConversion::ToObject(args[0], scriptContext, &dynamicObject)) - { - JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NullOrUndefined, _u("Object.prototype.propertyIsEnumerable")); - } + ARGUMENTS(args, callInfo); + ScriptContext* scriptContext = function->GetScriptContext(); - if (args.Info.Count >= 2) - { - const PropertyRecord* propertyRecord; - JavascriptConversion::ToPropertyKey(args[1], scriptContext, &propertyRecord, nullptr); - PropertyId propertyId = propertyRecord->GetPropertyId(); + Assert(!(callInfo.Flags & CallFlags_New)); - PropertyDescriptor currentDescriptor; - BOOL isCurrentDescriptorDefined = JavascriptOperators::GetOwnPropertyDescriptor(dynamicObject, propertyId, scriptContext, ¤tDescriptor); - if (isCurrentDescriptorDefined == TRUE) - { - if (currentDescriptor.IsEnumerable()) - { - return scriptContext->GetLibrary()->GetTrue(); - } - } - } - return scriptContext->GetLibrary()->GetFalse(); - } + AssertMsg(args.Info.Count > 0, "Should always have implicit 'this'"); - BOOL JavascriptObject::ChangePrototype(RecyclableObject* object, RecyclableObject* newPrototype, bool shouldThrow, ScriptContext* scriptContext) + RecyclableObject* dynamicObject = nullptr; + if (FALSE == JavascriptConversion::ToObject(args[0], scriptContext, &dynamicObject)) { - // 8.3.2 [[SetInheritance]] (V) - // When the [[SetInheritance]] internal method of O is called with argument V the following steps are taken: - // 1. Assert: Either Type(V) is Object or Type(V) is Null. - Assert(JavascriptOperators::IsObject(object)); - Assert(JavascriptOperators::IsObjectOrNull(newPrototype)); - - if (JavascriptProxy::Is(object)) - { - JavascriptProxy* proxy = JavascriptProxy::FromVar(object); - CrossSite::ForceCrossSiteThunkOnPrototypeChain(newPrototype); - return proxy->SetPrototypeTrap(newPrototype, shouldThrow, scriptContext); - } + JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NullOrUndefined, _u("Object.prototype.propertyIsEnumerable")); + } - // 2. Let extensible be the value of the [[Extensible]] internal data property of O. - // 3. Let current be the value of the [[Prototype]] internal data property of O. - // 4. If SameValue(V, current), then return true. - if (newPrototype == JavascriptObject::GetPrototypeOf(object, scriptContext)) - { - return TRUE; - } + if (args.Info.Count >= 2) + { + const PropertyRecord* propertyRecord; + JavascriptConversion::ToPropertyKey(args[1], scriptContext, &propertyRecord, nullptr); + PropertyId propertyId = propertyRecord->GetPropertyId(); - // 5. If extensible is false, then return false. - if (!object->IsExtensible()) + PropertyDescriptor currentDescriptor; + BOOL isCurrentDescriptorDefined = JavascriptOperators::GetOwnPropertyDescriptor(dynamicObject, propertyId, scriptContext, ¤tDescriptor); + if (isCurrentDescriptorDefined == TRUE) { - if (shouldThrow) + if (currentDescriptor.IsEnumerable()) { - JavascriptError::ThrowTypeError(scriptContext, JSERR_NonExtensibleObject); + return scriptContext->GetLibrary()->GetTrue(); } - return FALSE; } + } + return scriptContext->GetLibrary()->GetFalse(); +} + +BOOL JavascriptObject::ChangePrototype(RecyclableObject* object, RecyclableObject* newPrototype, bool shouldThrow, ScriptContext* scriptContext) +{ + // 8.3.2 [[SetInheritance]] (V) + // When the [[SetInheritance]] internal method of O is called with argument V the following steps are taken: + // 1. Assert: Either Type(V) is Object or Type(V) is Null. + Assert(JavascriptOperators::IsObject(object)); + Assert(JavascriptOperators::IsObjectOrNull(newPrototype)); + + if (VarIs(object)) + { + JavascriptProxy* proxy = VarTo(object); + CrossSite::ForceCrossSiteThunkOnPrototypeChain(newPrototype); + return proxy->SetPrototypeTrap(newPrototype, shouldThrow, scriptContext); + } - if (object->IsProtoImmutable()) - { - // ES2016 19.1.3: - // The Object prototype object is the intrinsic object %ObjectPrototype%. - // The Object prototype object is an immutable prototype exotic object. - // ES2016 9.4.7: - // An immutable prototype exotic object is an exotic object that has an immutable [[Prototype]] internal slot. - JavascriptError::ThrowTypeError(scriptContext, JSERR_ImmutablePrototypeSlot); - } + // 2. Let extensible be the value of the [[Extensible]] internal data property of O. + // 3. Let current be the value of the [[Prototype]] internal data property of O. + // 4. If SameValue(V, current), then return true. + if (newPrototype == JavascriptObject::GetPrototypeOf(object, scriptContext)) + { + return TRUE; + } - // 6. If V is not null, then - // a. Let p be V. - // b. Repeat, while p is not null - // i. If SameValue(p, O) is true, then return false. - // ii. Let nextp be the result of calling the [[GetInheritance]] internal method of p with no arguments. - // iii. ReturnIfAbrupt(nextp). - // iv. Let p be nextp. - if (IsPrototypeOfStopAtProxy(object, newPrototype, scriptContext)) // Reject cycle + // 5. If extensible is false, then return false. + if (!object->IsExtensible()) + { + if (shouldThrow) { - if (shouldThrow) - { - JavascriptError::ThrowTypeError(scriptContext, JSERR_CyclicProtoValue); - } - return FALSE; + JavascriptError::ThrowTypeError(scriptContext, JSERR_NonExtensibleObject); } + return FALSE; + } - // 7. Set the value of the [[Prototype]] internal data property of O to V. - // 8. Return true. - - bool isInvalidationOfInlineCacheNeeded = true; - DynamicObject * obj = DynamicObject::FromVar(object); + if (object->IsProtoImmutable()) + { + // ES2016 19.1.3: + // The Object prototype object is the intrinsic object %ObjectPrototype%. + // The Object prototype object is an immutable prototype exotic object. + // ES2016 9.4.7: + // An immutable prototype exotic object is an exotic object that has an immutable [[Prototype]] internal slot. + JavascriptError::ThrowTypeError(scriptContext, JSERR_ImmutablePrototypeSlot); + } - // If this object was not prototype object, then no need to invalidate inline caches. - // Simply assign it a new type so if this object used protoInlineCache in past, it will - // be invalidated because of type mismatch and subsequently we will update its protoInlineCache - if (!(obj->GetDynamicType()->GetTypeHandler()->GetFlags() & DynamicTypeHandler::IsPrototypeFlag)) + // 6. If V is not null, then + // a. Let p be V. + // b. Repeat, while p is not null + // i. If SameValue(p, O) is true, then return false. + // ii. Let nextp be the result of calling the [[GetInheritance]] internal method of p with no arguments. + // iii. ReturnIfAbrupt(nextp). + // iv. Let p be nextp. + if (IsPrototypeOfStopAtProxy(object, newPrototype, scriptContext)) // Reject cycle + { + if (shouldThrow) { - // If object has locked type, skip changing its type here as it will be changed anyway below - // when object gets newPrototype object. - if (!obj->HasLockedType()) - { - obj->ChangeType(); - } - Assert(!obj->GetScriptContext()->GetThreadContext()->IsObjectRegisteredInProtoInlineCaches(obj)); - Assert(!obj->GetScriptContext()->GetThreadContext()->IsObjectRegisteredInStoreFieldInlineCaches(obj)); - isInvalidationOfInlineCacheNeeded = false; + JavascriptError::ThrowTypeError(scriptContext, JSERR_CyclicProtoValue); } + return FALSE; + } - if (isInvalidationOfInlineCacheNeeded) - { - bool allProtoCachesInvalidated = false; - - // Notify old prototypes that they are being removed from a prototype chain. This triggers invalidating protocache, etc. - JavascriptOperators::MapObjectAndPrototypesUntil(object->GetPrototype(), [&](RecyclableObject* obj)->bool - { - obj->RemoveFromPrototype(scriptContext, &allProtoCachesInvalidated); - return allProtoCachesInvalidated; - }); - - // Examine new prototype chain. If it brings in any special property, we need to invalidate related caches. - bool objectAndPrototypeChainHasNoSpecialProperties = - JavascriptOperators::CheckIfObjectAndProtoChainHasNoSpecialProperties(newPrototype); - - if (!objectAndPrototypeChainHasNoSpecialProperties - || object->GetScriptContext() != newPrototype->GetScriptContext()) - { - // The HaveNoSpecialProperties cache is cleared when a property is added or changed, - // but only for types in the same script context. Therefore, if the prototype is in another - // context, the object's cache won't be cleared when a property is added or changed on the prototype. - // Moreover, an object is added to the cache only when its whole prototype chain is in the same - // context. - // - // Since we don't have a way to find out which objects have a certain object as their prototype, - // we clear the cache here instead. - object->GetLibrary()->GetTypesWithNoSpecialPropertyProtoChainCache()->Clear(); - } - - // Examine new prototype chain. If it brings in any non-WritableData property, we need to invalidate related caches. - bool objectAndPrototypeChainHasOnlyWritableDataProperties = - JavascriptOperators::CheckIfObjectAndPrototypeChainHasOnlyWritableDataProperties(newPrototype); - - if (!objectAndPrototypeChainHasOnlyWritableDataProperties - || object->GetScriptContext() != newPrototype->GetScriptContext()) - { - // The HaveOnlyWritableDataProperties cache is cleared when a property is added or changed, - // but only for types in the same script context. Therefore, if the prototype is in another - // context, the object's cache won't be cleared when a property is added or changed on the prototype. - // Moreover, an object is added to the cache only when its whole prototype chain is in the same - // context. - // - // Since we don't have a way to find out which objects have a certain object as their prototype, - // we clear the cache here instead. - - // Invalidate fast prototype chain writable data test flag - object->GetLibrary()->GetTypesWithOnlyWritablePropertyProtoChainCache()->Clear(); - } - - if (!allProtoCachesInvalidated) - { - // Invalidate StoreField/PropertyGuards for any non-WritableData property in the new chain - JavascriptOperators::MapObjectAndPrototypesUntil(newPrototype, [&](RecyclableObject* obj)->bool - { - obj->AddToPrototype(scriptContext, &allProtoCachesInvalidated); - return allProtoCachesInvalidated; - }); - } + // 7. Set the value of the [[Prototype]] internal data property of O to V. + // 8. Return true. - JavascriptOperators::MapObjectAndPrototypesUntil(object->GetPrototype(), [](RecyclableObject* obj)->bool - { - return obj->ClearProtoCachesWereInvalidated(); - }); - } + bool isInvalidationOfInlineCacheNeeded = true; + DynamicObject * obj = VarTo(object); - // Set to new prototype - if (object->IsExternal() || (DynamicType::Is(object->GetTypeId()) && (DynamicObject::UnsafeFromVar(object))->IsCrossSiteObject())) + // If this object was not prototype object, then no need to invalidate inline caches. + // Simply assign it a new type so if this object used protoInlineCache in past, it will + // be invalidated because of type mismatch and subsequently we will update its protoInlineCache + if (!(obj->GetDynamicType()->GetTypeHandler()->GetFlags() & DynamicTypeHandler::IsPrototypeFlag)) + { + // If object has locked type, skip changing its type here as it will be changed anyway below + // when object gets newPrototype object. + if (!obj->HasLockedType()) { - CrossSite::ForceCrossSiteThunkOnPrototypeChain(newPrototype); + obj->ChangeType(); } - object->SetPrototype(newPrototype); - return TRUE; + Assert(!obj->GetScriptContext()->GetThreadContext()->IsObjectRegisteredInProtoInlineCaches(obj)); + Assert(!obj->GetScriptContext()->GetThreadContext()->IsObjectRegisteredInStoreFieldInlineCaches(obj)); + isInvalidationOfInlineCacheNeeded = false; } - Var JavascriptObject::EntryIsPrototypeOf(RecyclableObject* function, CallInfo callInfo, ...) + if (isInvalidationOfInlineCacheNeeded) { - PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); + bool allProtoCachesInvalidated = false; - ARGUMENTS(args, callInfo); - ScriptContext* scriptContext = function->GetScriptContext(); + JavascriptOperators::MapObjectAndPrototypes(newPrototype, [&](RecyclableObject* obj) + { + obj->ClearProtoCachesWereInvalidated(); + }); - Assert(!(callInfo.Flags & CallFlags_New)); + // Notify old prototypes that they are being removed from a prototype chain. This triggers invalidating protocache, etc. + JavascriptOperators::MapObjectAndPrototypesUntil(object->GetPrototype(), [&](RecyclableObject* obj)->bool + { + obj->RemoveFromPrototype(scriptContext, &allProtoCachesInvalidated); + return allProtoCachesInvalidated; + }); - AssertMsg(args.Info.Count > 0, "Should always have implicit 'this'"); + // Examine new prototype chain. If it brings in any special property, we need to invalidate related caches. + bool objectAndPrototypeChainHasNoSpecialProperties = + JavascriptOperators::CheckIfObjectAndProtoChainHasNoSpecialProperties(newPrototype); - // no property specified - if (args.Info.Count == 1 || !JavascriptOperators::IsObject(args[1])) + if (!objectAndPrototypeChainHasNoSpecialProperties + || object->GetScriptContext() != newPrototype->GetScriptContext()) { - return scriptContext->GetLibrary()->GetFalse(); + // The HaveNoSpecialProperties cache is cleared when a property is added or changed, + // but only for types in the same script context. Therefore, if the prototype is in another + // context, the object's cache won't be cleared when a property is added or changed on the prototype. + // Moreover, an object is added to the cache only when its whole prototype chain is in the same + // context. + // + // Since we don't have a way to find out which objects have a certain object as their prototype, + // we clear the cache here instead. + object->GetLibrary()->GetTypesWithNoSpecialPropertyProtoChainCache()->Clear(); } - RecyclableObject* dynamicObject = nullptr; - if (FALSE == JavascriptConversion::ToObject(args[0], scriptContext, &dynamicObject)) - { - JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NullOrUndefined, _u("Object.prototype.isPrototypeOf")); - } - RecyclableObject* value = RecyclableObject::FromVar(args[1]); + // Examine new prototype chain. If it brings in any non-WritableData property, we need to invalidate related caches. + bool objectAndPrototypeChainHasOnlyWritableDataProperties = + JavascriptOperators::CheckIfObjectAndPrototypeChainHasOnlyWritableDataProperties(newPrototype); - if (dynamicObject->GetTypeId() == TypeIds_GlobalObject) + if (!objectAndPrototypeChainHasOnlyWritableDataProperties + || object->GetScriptContext() != newPrototype->GetScriptContext()) { - dynamicObject = RecyclableObject::FromVar(static_cast(dynamicObject)->ToThis()); + // The HaveOnlyWritableDataProperties cache is cleared when a property is added or changed, + // but only for types in the same script context. Therefore, if the prototype is in another + // context, the object's cache won't be cleared when a property is added or changed on the prototype. + // Moreover, an object is added to the cache only when its whole prototype chain is in the same + // context. + // + // Since we don't have a way to find out which objects have a certain object as their prototype, + // we clear the cache here instead. + + // Invalidate fast prototype chain writable data test flag + object->GetLibrary()->GetTypesWithOnlyWritablePropertyProtoChainCache()->Clear(); } - while (!JavascriptOperators::IsNull(value)) + if (!allProtoCachesInvalidated) { - value = JavascriptOperators::GetPrototype(value); - if (dynamicObject == value) + // Invalidate StoreField/PropertyGuards for any non-WritableData property in the new chain + JavascriptOperators::MapObjectAndPrototypesUntil(newPrototype, [&](RecyclableObject* obj)->bool { - return scriptContext->GetLibrary()->GetTrue(); - } + obj->AddToPrototype(scriptContext, &allProtoCachesInvalidated); + return allProtoCachesInvalidated; + }); } - return scriptContext->GetLibrary()->GetFalse(); + JavascriptOperators::MapObjectAndPrototypesUntil(object->GetPrototype(), [](RecyclableObject* obj)->bool + { + return obj->ClearProtoCachesWereInvalidated(); + }); } - // 19.1.3.5 - Object.prototype.toLocaleString as of ES6 (6.0) - Var JavascriptObject::EntryToLocaleString(RecyclableObject* function, CallInfo callInfo, ...) + // Set to new prototype + if (object->IsExternal() || (DynamicType::Is(object->GetTypeId()) && (UnsafeVarTo(object))->IsCrossSiteObject())) { - PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); + CrossSite::ForceCrossSiteThunkOnPrototypeChain(newPrototype); + } + object->SetPrototype(newPrototype); + return TRUE; +} - ARGUMENTS(args, callInfo); - ScriptContext* scriptContext = function->GetScriptContext(); - Assert(!(callInfo.Flags & CallFlags_New)); - AssertMsg(args.Info.Count, "Should always have implicit 'this'"); +Var JavascriptObject::EntryIsPrototypeOf(RecyclableObject* function, CallInfo callInfo, ...) +{ + PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); - Var thisValue = args[0]; - RecyclableObject* dynamicObject = nullptr; + ARGUMENTS(args, callInfo); + ScriptContext* scriptContext = function->GetScriptContext(); - if (FALSE == JavascriptConversion::ToObject(thisValue, scriptContext, &dynamicObject)) - { - JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NullOrUndefined, _u("Object.prototype.toLocaleString")); - } + Assert(!(callInfo.Flags & CallFlags_New)); - Var toStringVar = nullptr; - if (!JavascriptOperators::GetProperty(thisValue, dynamicObject, Js::PropertyIds::toString, &toStringVar, scriptContext) || !JavascriptConversion::IsCallable(toStringVar)) - { - JavascriptError::ThrowTypeError(scriptContext, JSERR_FunctionArgument_NeedFunction, _u("Object.prototype.toLocaleString")); - } + AssertMsg(args.Info.Count > 0, "Should always have implicit 'this'"); - RecyclableObject* toStringFunc = RecyclableObject::FromVar(toStringVar); - if (toStringFunc == scriptContext->GetLibrary()->GetObjectToStringFunction()) - { - return ToStringHelper(thisValue, scriptContext); - } - else - { - return scriptContext->GetThreadContext()->ExecuteImplicitCall(toStringFunc, Js::ImplicitCall_ToPrimitive, [=]()->Js::Var - { - return CALL_FUNCTION(scriptContext->GetThreadContext(), toStringFunc, CallInfo(CallFlags_Value, 1), thisValue); - }); - } + // no property specified + if (args.Info.Count == 1 || !JavascriptOperators::IsObject(args[1])) + { + return scriptContext->GetLibrary()->GetFalse(); } - Var JavascriptObject::EntryToString(RecyclableObject* function, CallInfo callInfo, ...) + RecyclableObject* dynamicObject = nullptr; + if (FALSE == JavascriptConversion::ToObject(args[0], scriptContext, &dynamicObject)) { - PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); - - ARGUMENTS(args, callInfo); - ScriptContext* scriptContext = function->GetScriptContext(); - - Assert(!(callInfo.Flags & CallFlags_New)); - - AssertMsg(args.Info.Count, "Should always have implicit 'this'"); - return ToStringHelper(args[0], scriptContext); + JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NullOrUndefined, _u("Object.prototype.isPrototypeOf")); } + RecyclableObject* value = VarTo(args[1]); - Var JavascriptObject::GetToStringTagValue(RecyclableObject *thisArg, ScriptContext *scriptContext) + if (dynamicObject->GetTypeId() == TypeIds_GlobalObject) { - if (JavascriptOperators::CheckIfObjectAndProtoChainHasNoSpecialProperties(thisArg)) - { - return nullptr; - } - - const PropertyId toStringTagId(PropertyIds::_symbolToStringTag); - PolymorphicInlineCache *cache = scriptContext->GetLibrary()->GetToStringTagCache(); - PropertyValueInfo info; - // We don't allow cache resizing, at least for the moment: it's more work, and since there's only one - // cache per script context, we can afford to create each cache with the maximum size. - PropertyValueInfo::SetCacheInfo(&info, cache, false); - Var value; - if (CacheOperators::TryGetProperty< - true, // CheckLocal - true, // CheckProto - true, // CheckAccessor - true, // CheckMissing - true, // CheckPolymorphicInlineCache - true, // CheckTypePropertyCache - !PolymorphicInlineCache::IsPolymorphic, // IsInlineCacheAvailable - PolymorphicInlineCache::IsPolymorphic, // IsPolymorphicInlineCacheAvailable - false, // ReturnOperationInfo - false> // OutputExistence - (thisArg, false, thisArg, toStringTagId, &value, scriptContext, nullptr, &info)) - { - return value; - } - else - { -#if DBG_DUMP - if (PHASE_VERBOSE_TRACE1(Js::InlineCachePhase)) - { - CacheOperators::TraceCache(cache, _u("PatchGetValue"), toStringTagId, scriptContext, thisArg); - } -#endif - return JavascriptOperators::GetProperty(thisArg, thisArg, toStringTagId, scriptContext, &info); - } + dynamicObject = VarTo(static_cast(dynamicObject)->ToThis()); } - // ES2017 19.1.3.6 Object.prototype.toString() - JavascriptString* JavascriptObject::ToStringTagHelper(Var thisArg, ScriptContext *scriptContext, TypeId type) + while (!JavascriptOperators::IsNull(value)) { - JavascriptLibrary *library = scriptContext->GetLibrary(); - - // 1. If the this value is undefined, return "[object Undefined]". - if (type == TypeIds_Undefined) + value = JavascriptOperators::GetPrototype(value); + if (dynamicObject == value) { - return library->GetObjectUndefinedDisplayString(); - } - // 2. If the this value is null, return "[object Null]". - if (type == TypeIds_Null) - { - return library->GetObjectNullDisplayString(); + return scriptContext->GetLibrary()->GetTrue(); } + } - // 3. Let O be ToObject(this value). - RecyclableObject *thisArgAsObject = JavascriptOperators::ToObject(thisArg, scriptContext); - - // 15. Let tag be ? Get(O, @@toStringTag). - Var tag = JavascriptObject::GetToStringTagValue(thisArgAsObject, scriptContext); + return scriptContext->GetLibrary()->GetFalse(); +} - // 17. Return the String that is the result of concatenating "[object ", tag, and "]". - auto buildToString = [&scriptContext](Var tag) { - JavascriptString *tagStr = JavascriptString::FromVar(tag); - const WCHAR objectStartString[9] = _u("[object "); - const WCHAR objectEndString[1] = { _u(']') }; - CompoundString *const cs = CompoundString::NewWithCharCapacity(_countof(objectStartString) - + _countof(objectEndString) + tagStr->GetLength(), scriptContext->GetLibrary()); +// 19.1.3.5 - Object.prototype.toLocaleString as of ES6 (6.0) +Var JavascriptObject::EntryToLocaleString(RecyclableObject* function, CallInfo callInfo, ...) +{ + PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); - cs->AppendChars(objectStartString, _countof(objectStartString) - 1 /* ditch \0 */); - cs->AppendChars(tagStr); - cs->AppendChars(objectEndString, _countof(objectEndString)); + ARGUMENTS(args, callInfo); + ScriptContext* scriptContext = function->GetScriptContext(); + Assert(!(callInfo.Flags & CallFlags_New)); + AssertMsg(args.Info.Count, "Should always have implicit 'this'"); - return cs; - }; - if (tag != nullptr && JavascriptString::Is(tag)) - { - return buildToString(tag); - } + Var thisValue = args[0]; + RecyclableObject* dynamicObject = nullptr; - // 4. Let isArray be ? IsArray(O). - // There is an implicit check for a null proxy handler in IsArray, so use the operator. - BOOL isArray = JavascriptOperators::IsArray(thisArgAsObject); + if (FALSE == JavascriptConversion::ToObject(thisValue, scriptContext, &dynamicObject)) + { + JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NullOrUndefined, _u("Object.prototype.toLocaleString")); + } - // If we don't have a tag or it's not a string, use the 'built in tag'. - if (isArray) - { - // 5. If isArray is true, let builtinTag be "Array". - return library->GetObjectArrayDisplayString(); - } + Var toStringVar = nullptr; + if (!JavascriptOperators::GetProperty(thisValue, dynamicObject, Js::PropertyIds::toString, &toStringVar, scriptContext) || !JavascriptConversion::IsCallable(toStringVar)) + { + JavascriptError::ThrowTypeError(scriptContext, JSERR_FunctionArgument_NeedFunction, _u("Object.prototype.toLocaleString")); + } - JavascriptString* builtInTag = nullptr; - switch (type) + RecyclableObject* toStringFunc = VarTo(toStringVar); + if (toStringFunc == scriptContext->GetLibrary()->GetObjectToStringFunction()) + { + return ToStringHelper(thisValue, scriptContext); + } + else + { + return scriptContext->GetThreadContext()->ExecuteImplicitCall(toStringFunc, Js::ImplicitCall_ToPrimitive, [=]()->Js::Var { - // 6. Else if O is an exotic String object, let builtinTag be "String". - case TypeIds_String: - case TypeIds_StringObject: - builtInTag = library->GetObjectStringDisplayString(); - break; - - // 7. Else if O has an[[ParameterMap]] internal slot, let builtinTag be "Arguments". - case TypeIds_Arguments: - builtInTag = library->GetObjectArgumentsDisplayString(); - break; + return CALL_FUNCTION(scriptContext->GetThreadContext(), toStringFunc, CallInfo(CallFlags_Value, 1), thisValue); + }); + } +} - // 8. Else if O has a [[Call]] internal method, let builtinTag be "Function". - case TypeIds_Function: - builtInTag = library->GetObjectFunctionDisplayString(); - break; +Var JavascriptObject::EntryToString(RecyclableObject* function, CallInfo callInfo, ...) +{ + PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); - // 9. Else if O has an [[ErrorData]] internal slot, let builtinTag be "Error". - case TypeIds_Error: - builtInTag = library->GetObjectErrorDisplayString(); - break; + ARGUMENTS(args, callInfo); + ScriptContext* scriptContext = function->GetScriptContext(); - // 10. Else if O has a [[BooleanData]] internal slot, let builtinTag be "Boolean". - case TypeIds_Boolean: - case TypeIds_BooleanObject: - builtInTag = library->GetObjectBooleanDisplayString(); - break; - - // 11. Else if O has a [[NumberData]] internal slot, let builtinTag be "Number". - case TypeIds_Number: - case TypeIds_Int64Number: - case TypeIds_UInt64Number: - case TypeIds_Integer: - case TypeIds_NumberObject: - builtInTag = library->GetObjectNumberDisplayString(); - break; + Assert(!(callInfo.Flags & CallFlags_New)); - // 12. Else if O has a [[DateValue]] internal slot, let builtinTag be "Date". - case TypeIds_Date: - case TypeIds_WinRTDate: - builtInTag = library->GetObjectDateDisplayString(); - break; + AssertMsg(args.Info.Count, "Should always have implicit 'this'"); + return ToStringHelper(args[0], scriptContext); +} - // 13. Else if O has a [[RegExpMatcher]] internal slot, let builtinTag be "RegExp". - case TypeIds_RegEx: - builtInTag = library->GetObjectRegExpDisplayString(); - break; - - // 14. Else, let builtinTag be "Object". - default: - { - if (thisArgAsObject->IsExternal()) - { - builtInTag = buildToString(thisArgAsObject->GetClassName(scriptContext)); - } - else - { - builtInTag = library->GetObjectDisplayString(); // [object Object] - } - break; - } - } - - Assert(builtInTag != nullptr); - - return builtInTag; +Var JavascriptObject::GetToStringTagValue(RecyclableObject *thisArg, ScriptContext *scriptContext) +{ + if (JavascriptOperators::CheckIfObjectAndProtoChainHasNoSpecialProperties(thisArg)) + { + return nullptr; } - Var JavascriptObject::ToStringHelper(Var thisArg, ScriptContext* scriptContext) + const PropertyId toStringTagId(PropertyIds::_symbolToStringTag); + PolymorphicInlineCache *cache = scriptContext->GetLibrary()->GetToStringTagCache(); + PropertyValueInfo info; + // We don't allow cache resizing, at least for the moment: it's more work, and since there's only one + // cache per script context, we can afford to create each cache with the maximum size. + PropertyValueInfo::SetCacheInfo(&info, cache, false); + Var value; + if (CacheOperators::TryGetProperty< + true, // CheckLocal + true, // CheckProto + true, // CheckAccessor + true, // CheckMissing + true, // CheckPolymorphicInlineCache + true, // CheckTypePropertyCache + !PolymorphicInlineCache::IsPolymorphic, // IsInlineCacheAvailable + PolymorphicInlineCache::IsPolymorphic, // IsPolymorphicInlineCacheAvailable + false, // ReturnOperationInfo + false> // OutputExistence + (thisArg, false, thisArg, toStringTagId, &value, scriptContext, nullptr, &info)) { - TypeId type = JavascriptOperators::GetTypeId(thisArg); - - // We first need to make sure we are in the right context. - if (type == TypeIds_HostDispatch) - { - RecyclableObject* hostDispatchObject = RecyclableObject::FromVar(thisArg); - const DynamicObject* remoteObject = hostDispatchObject->GetRemoteObject(); - if (!remoteObject) - { - Var result = nullptr; - Js::Var values[1]; - Js::CallInfo info(Js::CallFlags_Value, 1); - Js::Arguments args(info, values); - values[0] = thisArg; - if (hostDispatchObject->InvokeBuiltInOperationRemotely(EntryToString, args, &result)) - { - return result; - } - } - } - - // Dispatch to @@toStringTag implementation. - if (type >= TypeIds_TypedArrayMin && type <= TypeIds_TypedArrayMax && !scriptContext->GetThreadContext()->IsScriptActive()) + return value; + } + else + { +#if DBG_DUMP + if (PHASE_VERBOSE_TRACE1(Js::InlineCachePhase)) { - // Use external call for typedarray in the debugger. - Var toStringValue = nullptr; - BEGIN_JS_RUNTIME_CALL_EX(scriptContext, false); - toStringValue = ToStringTagHelper(thisArg, scriptContext, type); - END_JS_RUNTIME_CALL(scriptContext); - return toStringValue; + CacheOperators::TraceCache(cache, _u("PatchGetValue"), toStringTagId, scriptContext, thisArg); } - - // By this point, we should be in the correct context, but the thisArg may still need to be marshalled (for to the implicit ToObject conversion call.) - return ToStringTagHelper(CrossSite::MarshalVar(scriptContext, thisArg), scriptContext, type); +#endif + return JavascriptOperators::GetProperty(thisArg, thisArg, toStringTagId, scriptContext, &info); } +} - // ----------------------------------------------------------- - // Object.prototype.valueOf - // 1. Let O be the result of calling ToObject passing the this value as the argument. - // 2. If O is the result of calling the Object constructor with a host object (15.2.2.1), then - // a. Return either O or another value such as the host object originally passed to the constructor. The specific result that is returned is implementation-defined. - // 3. Return O. - // ----------------------------------------------------------- +// ES2017 19.1.3.6 Object.prototype.toString() +JavascriptString* JavascriptObject::ToStringTagHelper(Var thisArg, ScriptContext *scriptContext, TypeId type) +{ + JavascriptLibrary *library = scriptContext->GetLibrary(); - Var JavascriptObject::EntryValueOf(RecyclableObject* function, CallInfo callInfo, ...) + // 1. If the this value is undefined, return "[object Undefined]". + if (type == TypeIds_Undefined) { - PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); - - ARGUMENTS(args, callInfo); - ScriptContext* scriptContext = function->GetScriptContext(); - - Assert(!(callInfo.Flags & CallFlags_New)); - - AssertMsg(args.Info.Count > 0, "Should always have implicit 'this'"); - - // throw a TypeError if TypeId is null or undefined, and apply ToObject to the 'this' value otherwise. - if (JavascriptOperators::IsUndefinedOrNull(args[0])) - { - JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NullOrUndefined, _u("Object.prototype.valueOf")); - } - else - { - return JavascriptOperators::ToObject(args[0], scriptContext); - } + return library->GetObjectUndefinedDisplayString(); } - - Var JavascriptObject::EntryGetOwnPropertyDescriptor(RecyclableObject* function, CallInfo callInfo, ...) + // 2. If the this value is null, return "[object Null]". + if (type == TypeIds_Null) { - PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); - - ARGUMENTS(args, callInfo); - ScriptContext* scriptContext = function->GetScriptContext(); + return library->GetObjectNullDisplayString(); + } - Assert(!(callInfo.Flags & CallFlags_New)); + // 3. Let O be ToObject(this value). + RecyclableObject *thisArgAsObject = JavascriptOperators::ToObject(thisArg, scriptContext); - RecyclableObject* obj = nullptr; - if (args.Info.Count < 2) - { - obj = JavascriptOperators::ToObject(scriptContext->GetLibrary()->GetUndefined(), scriptContext); - } - else - { - // Convert the argument to object first - obj = JavascriptOperators::ToObject(args[1], scriptContext); - } + // 15. Let tag be ? Get(O, @@toStringTag). + Var tag = JavascriptObject::GetToStringTagValue(thisArgAsObject, scriptContext); - // If the object is HostDispatch try to invoke the operation remotely - if (obj->GetTypeId() == TypeIds_HostDispatch) - { - Var result; - if (obj->InvokeBuiltInOperationRemotely(EntryGetOwnPropertyDescriptor, args, &result)) - { - return result; - } - } + // 17. Return the String that is the result of concatenating "[object ", tag, and "]". + auto buildToString = [&scriptContext](Var tag) { + JavascriptString *tagStr = VarTo(tag); + const WCHAR objectStartString[9] = _u("[object "); + const WCHAR objectEndString[1] = { _u(']') }; + CompoundString *const cs = CompoundString::NewWithCharCapacity(_countof(objectStartString) + + _countof(objectEndString) + tagStr->GetLength(), scriptContext->GetLibrary()); - Var propertyKey = args.Info.Count > 2 ? args[2] : obj->GetLibrary()->GetUndefined(); + cs->AppendChars(objectStartString, _countof(objectStartString) - 1 /* ditch \0 */); + cs->AppendChars(tagStr); + cs->AppendChars(objectEndString, _countof(objectEndString)); - return JavascriptObject::GetOwnPropertyDescriptorHelper(obj, propertyKey, scriptContext); + return cs; + }; + if (tag != nullptr && VarIs(tag)) + { + return buildToString(tag); } - Var JavascriptObject::GetOwnPropertyDescriptorHelper(RecyclableObject* obj, Var propertyKey, ScriptContext* scriptContext) + // 4. Let isArray be ? IsArray(O). + // There is an implicit check for a null proxy handler in IsArray, so use the operator. + BOOL isArray = JavascriptOperators::IsArray(thisArgAsObject); + + // If we don't have a tag or it's not a string, use the 'built in tag'. + if (isArray) { - const PropertyRecord* propertyRecord; - JavascriptConversion::ToPropertyKey(propertyKey, scriptContext, &propertyRecord, nullptr); - PropertyId propertyId = propertyRecord->GetPropertyId(); + // 5. If isArray is true, let builtinTag be "Array". + return library->GetObjectArrayDisplayString(); + } - PropertyDescriptor propertyDescriptor; - BOOL isPropertyDescriptorDefined; - isPropertyDescriptorDefined = JavascriptObject::GetOwnPropertyDescriptorHelper(obj, propertyId, scriptContext, propertyDescriptor); - if (!isPropertyDescriptorDefined) + // callable proxy is considered as having [[Call]] internal method and should match #8 below + if (type == TypeIds_Proxy && JavascriptConversion::IsCallable(thisArgAsObject)) { - return scriptContext->GetLibrary()->GetUndefined(); + type = TypeIds_Function; } - return JavascriptOperators::FromPropertyDescriptor(propertyDescriptor, scriptContext); - } - - BOOL JavascriptObject::GetOwnPropertyDescriptorHelper(RecyclableObject* obj, PropertyId propertyId, ScriptContext* scriptContext, PropertyDescriptor& propertyDescriptor) + JavascriptString* builtInTag = nullptr; + switch (type) { - BOOL isPropertyDescriptorDefined; - if (obj->IsExternal()) + // 6. Else if O is an exotic String object, let builtinTag be "String". + case TypeIds_String: + case TypeIds_StringObject: + builtInTag = library->GetObjectStringDisplayString(); + break; + + // 7. Else if O has an[[ParameterMap]] internal slot, let builtinTag be "Arguments". + case TypeIds_Arguments: + builtInTag = library->GetObjectArgumentsDisplayString(); + break; + + // 8. Else if O has a [[Call]] internal method, let builtinTag be "Function". + case TypeIds_Function: + builtInTag = library->GetObjectFunctionDisplayString(); + break; + + // 9. Else if O has an [[ErrorData]] internal slot, let builtinTag be "Error". + case TypeIds_Error: + builtInTag = library->GetObjectErrorDisplayString(); + break; + + // 10. Else if O has a [[BooleanData]] internal slot, let builtinTag be "Boolean". + case TypeIds_Boolean: + case TypeIds_BooleanObject: + builtInTag = library->GetObjectBooleanDisplayString(); + break; + + // 11. Else if O has a [[NumberData]] internal slot, let builtinTag be "Number". + case TypeIds_Number: + case TypeIds_Int64Number: + case TypeIds_UInt64Number: + case TypeIds_Integer: + case TypeIds_NumberObject: + builtInTag = library->GetObjectNumberDisplayString(); + break; + + // 12. Else if O has a [[DateValue]] internal slot, let builtinTag be "Date". + case TypeIds_Date: + builtInTag = library->GetObjectDateDisplayString(); + break; + + // 13. Else if O has a [[RegExpMatcher]] internal slot, let builtinTag be "RegExp". + case TypeIds_RegEx: + builtInTag = library->GetObjectRegExpDisplayString(); + break; + + // 14. Else, let builtinTag be "Object". + default: + { + if (thisArgAsObject->IsExternal()) { - isPropertyDescriptorDefined = obj->HasOwnProperty(propertyId) ? - JavascriptOperators::GetOwnPropertyDescriptor(obj, propertyId, scriptContext, &propertyDescriptor) : - FALSE; + builtInTag = buildToString(thisArgAsObject->GetClassName(scriptContext)); } else { - isPropertyDescriptorDefined = JavascriptOperators::GetOwnPropertyDescriptor(obj, propertyId, scriptContext, &propertyDescriptor); + builtInTag = library->GetObjectDisplayString(); // [object Object] } - return isPropertyDescriptorDefined; + break; + } } - Var JavascriptObject::EntryGetOwnPropertyDescriptors(RecyclableObject* function, CallInfo callInfo, ...) - { - PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); - - ARGUMENTS(args, callInfo); - ScriptContext* scriptContext = function->GetScriptContext(); - - Assert(!(callInfo.Flags & CallFlags_New)); + Assert(builtInTag != nullptr); - RecyclableObject* obj = nullptr; + return builtInTag; +} - if (args.Info.Count < 2) - { - obj = JavascriptOperators::ToObject(scriptContext->GetLibrary()->GetUndefined(), scriptContext); - } - else - { - // Convert the argument to object first - obj = JavascriptOperators::ToObject(args[1], scriptContext); - } +Var JavascriptObject::ToStringHelper(Var thisArg, ScriptContext* scriptContext) +{ + TypeId type = JavascriptOperators::GetTypeId(thisArg); - // If the object is HostDispatch try to invoke the operation remotely - if (obj->GetTypeId() == TypeIds_HostDispatch) - { - Var result; - if (obj->InvokeBuiltInOperationRemotely(EntryGetOwnPropertyDescriptors, args, &result)) + // We first need to make sure we are in the right context. + if (type == TypeIds_HostDispatch) + { + RecyclableObject* hostDispatchObject = VarTo(thisArg); + const DynamicObject* remoteObject = hostDispatchObject->GetRemoteObject(); + if (!remoteObject) + { + Var result = nullptr; + Js::Var values[1]; + Js::CallInfo info(Js::CallFlags_Value, 1); + Js::Arguments args(info, values); + values[0] = thisArg; + if (hostDispatchObject->InvokeBuiltInOperationRemotely(EntryToString, args, &result)) { return result; } } + } - JavascriptArray* ownPropertyKeys = JavascriptOperators::GetOwnPropertyKeys(obj, scriptContext); - RecyclableObject* resultObj = scriptContext->GetLibrary()->CreateObject(true, (Js::PropertyIndex) ownPropertyKeys->GetLength()); + // Dispatch to @@toStringTag implementation. + if (type >= TypeIds_TypedArrayMin && type <= TypeIds_TypedArrayMax && !scriptContext->GetThreadContext()->IsScriptActive()) + { + // Use external call for typedarray in the debugger. + Var toStringValue = nullptr; + BEGIN_JS_RUNTIME_CALL_EX(scriptContext, false); + toStringValue = ToStringTagHelper(thisArg, scriptContext, type); + END_JS_RUNTIME_CALL(scriptContext); + return toStringValue; + } - PropertyDescriptor propDesc; - Var propKey = nullptr; + // By this point, we should be in the correct context, but the thisArg may still need to be marshalled (for to the implicit ToObject conversion call.) + return ToStringTagHelper(CrossSite::MarshalVar(scriptContext, thisArg), scriptContext, type); +} - for (uint i = 0; i < ownPropertyKeys->GetLength(); i++) - { - BOOL getPropResult = ownPropertyKeys->DirectGetItemAt(i, &propKey); - Assert(getPropResult); +// ----------------------------------------------------------- +// Object.prototype.valueOf +// 1. Let O be the result of calling ToObject passing the this value as the argument. +// 2. If O is the result of calling the Object constructor with a host object (15.2.2.1), then +// a. Return either O or another value such as the host object originally passed to the constructor. The specific result that is returned is implementation-defined. +// 3. Return O. +// ----------------------------------------------------------- - if (!getPropResult) - { - continue; - } +Var JavascriptObject::EntryValueOf(RecyclableObject* function, CallInfo callInfo, ...) +{ + PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); - PropertyRecord const * propertyRecord; - JavascriptConversion::ToPropertyKey(propKey, scriptContext, &propertyRecord, nullptr); + ARGUMENTS(args, callInfo); + ScriptContext* scriptContext = function->GetScriptContext(); - Var newDescriptor = JavascriptObject::GetOwnPropertyDescriptorHelper(obj, propKey, scriptContext); - if (!JavascriptOperators::IsUndefined(newDescriptor)) - { - resultObj->SetProperty(propertyRecord->GetPropertyId(), newDescriptor, PropertyOperation_None, nullptr); - } - } + Assert(!(callInfo.Flags & CallFlags_New)); - return resultObj; - } + AssertMsg(args.Info.Count > 0, "Should always have implicit 'this'"); - Var JavascriptObject::EntryGetPrototypeOf(RecyclableObject* function, CallInfo callInfo, ...) + // throw a TypeError if TypeId is null or undefined, and apply ToObject to the 'this' value otherwise. + if (JavascriptOperators::IsUndefinedOrNull(args[0])) { - PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); + JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NullOrUndefined, _u("Object.prototype.valueOf")); + } + else + { + return JavascriptOperators::ToObject(args[0], scriptContext); + } +} - ARGUMENTS(args, callInfo); - ScriptContext* scriptContext = function->GetScriptContext(); +Var JavascriptObject::EntryGetOwnPropertyDescriptor(RecyclableObject* function, CallInfo callInfo, ...) +{ + PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); - Assert(!(callInfo.Flags & CallFlags_New)); - CHAKRATEL_LANGSTATS_INC_BUILTINCOUNT(Object_Constructor_getPrototypeOf); + ARGUMENTS(args, callInfo); + ScriptContext* scriptContext = function->GetScriptContext(); - // 19.1.2.9 - // Object.getPrototypeOf ( O ) - // When the getPrototypeOf function is called with argument O, the following steps are taken: - RecyclableObject *object = nullptr; + Assert(!(callInfo.Flags & CallFlags_New)); - // 1. Let obj be ToObject(O). - // 2. ReturnIfAbrupt(obj). - if (args.Info.Count < 2 || !JavascriptConversion::ToObject(args[1], scriptContext, &object)) + RecyclableObject* obj = nullptr; + if (args.Info.Count < 2) + { + obj = JavascriptOperators::ToObject(scriptContext->GetLibrary()->GetUndefined(), scriptContext); + } + else + { + // Convert the argument to object first + obj = JavascriptOperators::ToObject(args[1], scriptContext); + } + + // If the object is HostDispatch try to invoke the operation remotely + if (obj->GetTypeId() == TypeIds_HostDispatch) + { + Var result; + if (obj->InvokeBuiltInOperationRemotely(EntryGetOwnPropertyDescriptor, args, &result)) { - JavascriptError::ThrowTypeError(scriptContext, JSERR_FunctionArgument_NeedObject, _u("Object.getPrototypeOf")); + return result; } - - // 3. Return obj.[[GetPrototypeOf]](). - return CrossSite::MarshalVar(scriptContext, GetPrototypeOf(object, scriptContext)); } - Var JavascriptObject::EntrySetPrototypeOf(RecyclableObject* function, CallInfo callInfo, ...) - { - PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); + Var propertyKey = args.Info.Count > 2 ? args[2] : obj->GetLibrary()->GetUndefined(); - ARGUMENTS(args, callInfo); - Assert(!(callInfo.Flags & CallFlags_New)); - ScriptContext* scriptContext = function->GetScriptContext(); + return JavascriptObject::GetOwnPropertyDescriptorHelper(obj, propertyKey, scriptContext); +} - // 19.1.2.18 - // Object.setPrototypeOf ( O, proto ) - // When the setPrototypeOf function is called with arguments O and proto, the following steps are taken: - // 1. Let O be RequireObjectCoercible(O). - // 2. ReturnIfAbrupt(O). - // 3. If Type(proto) is neither Object or Null, then throw a TypeError exception. - int32 errCode = NOERROR; +Var JavascriptObject::GetOwnPropertyDescriptorHelper(RecyclableObject* obj, Var propertyKey, ScriptContext* scriptContext) +{ + const PropertyRecord* propertyRecord; + JavascriptConversion::ToPropertyKey(propertyKey, scriptContext, &propertyRecord, nullptr); + PropertyId propertyId = propertyRecord->GetPropertyId(); - if (args.Info.Count < 2 || !JavascriptConversion::CheckObjectCoercible(args[1], scriptContext)) - { - errCode = JSERR_FunctionArgument_NeedObject; - } - else if (args.Info.Count < 3 || !JavascriptOperators::IsObjectOrNull(args[2])) - { - errCode = JSERR_FunctionArgument_NotObjectOrNull; - } + PropertyDescriptor propertyDescriptor; + BOOL isPropertyDescriptorDefined; + isPropertyDescriptorDefined = JavascriptObject::GetOwnPropertyDescriptorHelper(obj, propertyId, scriptContext, propertyDescriptor); + if (!isPropertyDescriptorDefined) + { + return scriptContext->GetLibrary()->GetUndefined(); + } - if (errCode != NOERROR) - { - JavascriptError::ThrowTypeError(scriptContext, errCode, _u("Object.setPrototypeOf")); - } + return JavascriptOperators::FromPropertyDescriptor(propertyDescriptor, scriptContext); +} - // 4. If Type(O) is not Object, return O. - if (!JavascriptOperators::IsObject(args[1])) - { - return args[1]; - } +BOOL JavascriptObject::GetOwnPropertyDescriptorHelper(RecyclableObject* obj, PropertyId propertyId, ScriptContext* scriptContext, PropertyDescriptor& propertyDescriptor) +{ + BOOL isPropertyDescriptorDefined; + if (obj->IsExternal()) + { + isPropertyDescriptorDefined = obj->HasOwnProperty(propertyId) ? + JavascriptOperators::GetOwnPropertyDescriptor(obj, propertyId, scriptContext, &propertyDescriptor) : + FALSE; + } + else + { + isPropertyDescriptorDefined = JavascriptOperators::GetOwnPropertyDescriptor(obj, propertyId, scriptContext, &propertyDescriptor); + } + return isPropertyDescriptorDefined; +} -#if ENABLE_COPYONACCESS_ARRAY - JavascriptLibrary::CheckAndConvertCopyOnAccessNativeIntArray(args[1]); -#endif - RecyclableObject* object = RecyclableObject::FromVar(args[1]); - RecyclableObject* newPrototype = RecyclableObject::FromVar(args[2]); +Var JavascriptObject::EntryGetOwnPropertyDescriptors(RecyclableObject* function, CallInfo callInfo, ...) +{ + PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); - // 5. Let status be O.[[SetPrototypeOf]](proto). - // 6. ReturnIfAbrupt(status). - // 7. If status is false, throw a TypeError exception. - ChangePrototype(object, newPrototype, /*shouldThrow*/true, scriptContext); + ARGUMENTS(args, callInfo); + ScriptContext* scriptContext = function->GetScriptContext(); - // 8. Return O. - return object; + Assert(!(callInfo.Flags & CallFlags_New)); + + RecyclableObject* obj = nullptr; + + if (args.Info.Count < 2) + { + obj = JavascriptOperators::ToObject(scriptContext->GetLibrary()->GetUndefined(), scriptContext); + } + else + { + // Convert the argument to object first + obj = JavascriptOperators::ToObject(args[1], scriptContext); } - Var JavascriptObject::EntrySeal(RecyclableObject* function, CallInfo callInfo, ...) + // If the object is HostDispatch try to invoke the operation remotely + if (obj->GetTypeId() == TypeIds_HostDispatch) { - PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); + Var result; + if (obj->InvokeBuiltInOperationRemotely(EntryGetOwnPropertyDescriptors, args, &result)) + { + return result; + } + } - ARGUMENTS(args, callInfo); - ScriptContext* scriptContext = function->GetScriptContext(); + JavascriptArray* ownPropertyKeys = JavascriptOperators::GetOwnPropertyKeys(obj, scriptContext); + RecyclableObject* resultObj = scriptContext->GetLibrary()->CreateObject(true, (Js::PropertyIndex) ownPropertyKeys->GetLength()); - Assert(!(callInfo.Flags & CallFlags_New)); + PropertyDescriptor propDesc; + Var propKey = nullptr; - CHAKRATEL_LANGSTATS_INC_BUILTINCOUNT(Object_Constructor_seal); + for (uint i = 0; i < ownPropertyKeys->GetLength(); i++) + { + BOOL getPropResult = ownPropertyKeys->DirectGetItemAt(i, &propKey); + Assert(getPropResult); - // Spec update in Rev29 under section 19.1.2.17 - if (args.Info.Count < 2) + if (!getPropResult) { - return scriptContext->GetLibrary()->GetUndefined(); + continue; } - else if (!JavascriptOperators::IsObject(args[1])) + + PropertyRecord const * propertyRecord; + JavascriptConversion::ToPropertyKey(propKey, scriptContext, &propertyRecord, nullptr); + + Var newDescriptor = JavascriptObject::GetOwnPropertyDescriptorHelper(obj, propKey, scriptContext); + if (!JavascriptOperators::IsUndefined(newDescriptor)) { - return args[1]; + resultObj->SetProperty(propertyRecord->GetPropertyId(), newDescriptor, PropertyOperation_None, nullptr); } + } + return resultObj; +} - RecyclableObject *object = RecyclableObject::FromVar(args[1]); +Var JavascriptObject::EntryGetPrototypeOf(RecyclableObject* function, CallInfo callInfo, ...) +{ + PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); - GlobalObject* globalObject = object->GetLibrary()->GetGlobalObject(); - if (globalObject != object && globalObject && (globalObject->ToThis() == object)) - { - globalObject->Seal(); - } + ARGUMENTS(args, callInfo); + ScriptContext* scriptContext = function->GetScriptContext(); - object->Seal(); - return object; - } + Assert(!(callInfo.Flags & CallFlags_New)); + CHAKRATEL_LANGSTATS_INC_BUILTINCOUNT(Object_Constructor_getPrototypeOf); - Var JavascriptObject::EntryFreeze(RecyclableObject* function, CallInfo callInfo, ...) + // 19.1.2.9 + // Object.getPrototypeOf ( O ) + // When the getPrototypeOf function is called with argument O, the following steps are taken: + RecyclableObject *object = nullptr; + + // 1. Let obj be ToObject(O). + // 2. ReturnIfAbrupt(obj). + if (args.Info.Count < 2 || !JavascriptConversion::ToObject(args[1], scriptContext, &object)) { - PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); + JavascriptError::ThrowTypeError(scriptContext, JSERR_FunctionArgument_NeedObject, _u("Object.getPrototypeOf")); + } - ARGUMENTS(args, callInfo); - ScriptContext* scriptContext = function->GetScriptContext(); + // 3. Return obj.[[GetPrototypeOf]](). + return CrossSite::MarshalVar(scriptContext, GetPrototypeOf(object, scriptContext)); +} - Assert(!(callInfo.Flags & CallFlags_New)); - CHAKRATEL_LANGSTATS_INC_BUILTINCOUNT(Object_Constructor_freeze); +Var JavascriptObject::EntrySetPrototypeOf(RecyclableObject* function, CallInfo callInfo, ...) +{ + PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); - // Spec update in Rev29 under section 19.1.2.5 - if (args.Info.Count < 2) - { - return scriptContext->GetLibrary()->GetUndefined(); - } - else if (!JavascriptOperators::IsObject(args[1])) - { - return args[1]; - } + ARGUMENTS(args, callInfo); + Assert(!(callInfo.Flags & CallFlags_New)); + ScriptContext* scriptContext = function->GetScriptContext(); - RecyclableObject *object = RecyclableObject::FromVar(args[1]); + // 19.1.2.18 + // Object.setPrototypeOf ( O, proto ) + // When the setPrototypeOf function is called with arguments O and proto, the following steps are taken: + // 1. Let O be RequireObjectCoercible(O). + // 2. ReturnIfAbrupt(O). + // 3. If Type(proto) is neither Object or Null, then throw a TypeError exception. + int32 errCode = NOERROR; - GlobalObject* globalObject = object->GetLibrary()->GetGlobalObject(); - if (globalObject != object && globalObject && (globalObject->ToThis() == object)) - { - globalObject->Freeze(); - } + if (args.Info.Count < 2 || !JavascriptConversion::CheckObjectCoercible(args[1], scriptContext)) + { + errCode = JSERR_FunctionArgument_NeedObject; + } + else if (args.Info.Count < 3 || !JavascriptOperators::IsObjectOrNull(args[2])) + { + errCode = JSERR_FunctionArgument_NotObjectOrNull; + } - object->Freeze(); - return object; + if (errCode != NOERROR) + { + JavascriptError::ThrowTypeError(scriptContext, errCode, _u("Object.setPrototypeOf")); } - Var JavascriptObject::EntryPreventExtensions(RecyclableObject* function, CallInfo callInfo, ...) + // 4. If Type(O) is not Object, return O. + if (!JavascriptOperators::IsObject(args[1])) { - PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); + return args[1]; + } - ARGUMENTS(args, callInfo); - ScriptContext* scriptContext = function->GetScriptContext(); +#if ENABLE_COPYONACCESS_ARRAY + JavascriptLibrary::CheckAndConvertCopyOnAccessNativeIntArray(args[1]); +#endif + RecyclableObject* object = VarTo(args[1]); + RecyclableObject* newPrototype = VarTo(args[2]); - Assert(!(callInfo.Flags & CallFlags_New)); - CHAKRATEL_LANGSTATS_INC_BUILTINCOUNT(Object_Constructor_preventExtensions); + // 5. Let status be O.[[SetPrototypeOf]](proto). + // 6. ReturnIfAbrupt(status). + // 7. If status is false, throw a TypeError exception. + ChangePrototype(object, newPrototype, /*shouldThrow*/true, scriptContext); - // Spec update in Rev29 under section 19.1.2.15 - if (args.Info.Count < 2) - { - return scriptContext->GetLibrary()->GetUndefined(); - } - else if (!JavascriptOperators::IsObject(args[1])) - { - return args[1]; - } + // 8. Return O. + return object; +} - RecyclableObject *object = RecyclableObject::FromVar(args[1]); +Var JavascriptObject::EntrySeal(RecyclableObject* function, CallInfo callInfo, ...) +{ + PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); - GlobalObject* globalObject = object->GetLibrary()->GetGlobalObject(); - if (globalObject != object && globalObject && (globalObject->ToThis() == object)) - { - globalObject->PreventExtensions(); - } + ARGUMENTS(args, callInfo); + ScriptContext* scriptContext = function->GetScriptContext(); - object->PreventExtensions(); + Assert(!(callInfo.Flags & CallFlags_New)); - return object; - } + CHAKRATEL_LANGSTATS_INC_BUILTINCOUNT(Object_Constructor_seal); - Var JavascriptObject::EntryIsSealed(RecyclableObject* function, CallInfo callInfo, ...) + // Spec update in Rev29 under section 19.1.2.17 + if (args.Info.Count < 2) { - PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); + return scriptContext->GetLibrary()->GetUndefined(); + } + else if (!JavascriptOperators::IsObject(args[1])) + { + return args[1]; + } - ARGUMENTS(args, callInfo); - ScriptContext* scriptContext = function->GetScriptContext(); - Assert(!(callInfo.Flags & CallFlags_New)); - CHAKRATEL_LANGSTATS_INC_BUILTINCOUNT(Object_Constructor_isSealed); + RecyclableObject *object = VarTo(args[1]); - if (args.Info.Count < 2 || !JavascriptOperators::IsObject(args[1])) - { - return scriptContext->GetLibrary()->GetTrue(); - } + GlobalObject* globalObject = object->GetLibrary()->GetGlobalObject(); + if (globalObject != object && globalObject && (globalObject->ToThis() == object)) + { + globalObject->Seal(); + } - RecyclableObject *object = RecyclableObject::FromVar(args[1]); + object->Seal(); + return object; +} - BOOL isSealed = object->IsSealed(); +Var JavascriptObject::EntryFreeze(RecyclableObject* function, CallInfo callInfo, ...) +{ + PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); - GlobalObject* globalObject = object->GetLibrary()->GetGlobalObject(); - if (isSealed && globalObject != object && globalObject && (globalObject->ToThis() == object)) - { - isSealed = globalObject->IsSealed(); - } + ARGUMENTS(args, callInfo); + ScriptContext* scriptContext = function->GetScriptContext(); - return scriptContext->GetLibrary()->GetTrueOrFalse(isSealed); - } + Assert(!(callInfo.Flags & CallFlags_New)); + CHAKRATEL_LANGSTATS_INC_BUILTINCOUNT(Object_Constructor_freeze); - Var JavascriptObject::EntryIsFrozen(RecyclableObject* function, CallInfo callInfo, ...) + // Spec update in Rev29 under section 19.1.2.5 + if (args.Info.Count < 2) + { + return scriptContext->GetLibrary()->GetUndefined(); + } + else if (!JavascriptOperators::IsObject(args[1])) { - PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); + return args[1]; + } - ARGUMENTS(args, callInfo); - ScriptContext* scriptContext = function->GetScriptContext(); + RecyclableObject *object = VarTo(args[1]); - Assert(!(callInfo.Flags & CallFlags_New)); - CHAKRATEL_LANGSTATS_INC_BUILTINCOUNT(Object_Constructor_isFrozen); + GlobalObject* globalObject = object->GetLibrary()->GetGlobalObject(); + if (globalObject != object && globalObject && (globalObject->ToThis() == object)) + { + globalObject->Freeze(); + } - if (args.Info.Count < 2 || !JavascriptOperators::IsObject(args[1])) - { - return scriptContext->GetLibrary()->GetTrue(); - } + object->Freeze(); + return object; +} - RecyclableObject *object = RecyclableObject::FromVar(args[1]); +Var JavascriptObject::EntryPreventExtensions(RecyclableObject* function, CallInfo callInfo, ...) +{ + PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); - BOOL isFrozen = object->IsFrozen(); + ARGUMENTS(args, callInfo); + ScriptContext* scriptContext = function->GetScriptContext(); - GlobalObject* globalObject = object->GetLibrary()->GetGlobalObject(); - if (isFrozen && globalObject != object && globalObject && (globalObject->ToThis() == object)) - { - isFrozen = globalObject->IsFrozen(); - } + Assert(!(callInfo.Flags & CallFlags_New)); + CHAKRATEL_LANGSTATS_INC_BUILTINCOUNT(Object_Constructor_preventExtensions); - return scriptContext->GetLibrary()->GetTrueOrFalse(isFrozen); + // Spec update in Rev29 under section 19.1.2.15 + if (args.Info.Count < 2) + { + return scriptContext->GetLibrary()->GetUndefined(); } + else if (!JavascriptOperators::IsObject(args[1])) + { + return args[1]; + } + + RecyclableObject *object = VarTo(args[1]); - Var JavascriptObject::EntryIsExtensible(RecyclableObject* function, CallInfo callInfo, ...) + GlobalObject* globalObject = object->GetLibrary()->GetGlobalObject(); + if (globalObject != object && globalObject && (globalObject->ToThis() == object)) { - PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); + globalObject->PreventExtensions(); + } - ARGUMENTS(args, callInfo); - ScriptContext* scriptContext = function->GetScriptContext(); - CHAKRATEL_LANGSTATS_INC_BUILTINCOUNT(Object_Constructor_isExtensible); + object->PreventExtensions(); - Assert(!(callInfo.Flags & CallFlags_New)); + return object; +} - if (args.Info.Count < 2 || !JavascriptOperators::IsObject(args[1])) - { - return scriptContext->GetLibrary()->GetFalse(); - } +Var JavascriptObject::EntryIsSealed(RecyclableObject* function, CallInfo callInfo, ...) +{ + PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); - RecyclableObject *object = RecyclableObject::FromVar(args[1]); - BOOL isExtensible = object->IsExtensible(); + ARGUMENTS(args, callInfo); + ScriptContext* scriptContext = function->GetScriptContext(); - GlobalObject* globalObject = object->GetLibrary()->GetGlobalObject(); - if (isExtensible && globalObject != object && globalObject && (globalObject->ToThis() == object)) - { - isExtensible = globalObject->IsExtensible(); - } + Assert(!(callInfo.Flags & CallFlags_New)); + CHAKRATEL_LANGSTATS_INC_BUILTINCOUNT(Object_Constructor_isSealed); - return scriptContext->GetLibrary()->GetTrueOrFalse(isExtensible); + if (args.Info.Count < 2 || !JavascriptOperators::IsObject(args[1])) + { + return scriptContext->GetLibrary()->GetTrue(); } - Var JavascriptObject::EntryGetOwnPropertyNames(RecyclableObject* function, CallInfo callInfo, ...) + RecyclableObject *object = VarTo(args[1]); + + BOOL isSealed = object->IsSealed(); + + GlobalObject* globalObject = object->GetLibrary()->GetGlobalObject(); + if (isSealed && globalObject != object && globalObject && (globalObject->ToThis() == object)) { - PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); + isSealed = globalObject->IsSealed(); + } - ARGUMENTS(args, callInfo); - ScriptContext* scriptContext = function->GetScriptContext(); + return scriptContext->GetLibrary()->GetTrueOrFalse(isSealed); +} - Assert(!(callInfo.Flags & CallFlags_New)); - CHAKRATEL_LANGSTATS_INC_BUILTINCOUNT(Object_Constructor_getOwnPropertyNames); +Var JavascriptObject::EntryIsFrozen(RecyclableObject* function, CallInfo callInfo, ...) +{ + PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); - Var tempVar = args.Info.Count < 2 ? scriptContext->GetLibrary()->GetUndefined() : args[1]; - RecyclableObject *object = JavascriptOperators::ToObject(tempVar, scriptContext); + ARGUMENTS(args, callInfo); + ScriptContext* scriptContext = function->GetScriptContext(); - if (object->GetTypeId() == TypeIds_HostDispatch) - { - Var result; - if (object->InvokeBuiltInOperationRemotely(EntryGetOwnPropertyNames, args, &result)) - { - return result; - } - } + Assert(!(callInfo.Flags & CallFlags_New)); + CHAKRATEL_LANGSTATS_INC_BUILTINCOUNT(Object_Constructor_isFrozen); - return JavascriptOperators::GetOwnPropertyNames(object, scriptContext); + if (args.Info.Count < 2 || !JavascriptOperators::IsObject(args[1])) + { + return scriptContext->GetLibrary()->GetTrue(); } - Var JavascriptObject::EntryGetOwnPropertySymbols(RecyclableObject* function, CallInfo callInfo, ...) + RecyclableObject *object = VarTo(args[1]); + + BOOL isFrozen = object->IsFrozen(); + + GlobalObject* globalObject = object->GetLibrary()->GetGlobalObject(); + if (isFrozen && globalObject != object && globalObject && (globalObject->ToThis() == object)) { - PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); + isFrozen = globalObject->IsFrozen(); + } - ARGUMENTS(args, callInfo); - ScriptContext* scriptContext = function->GetScriptContext(); + return scriptContext->GetLibrary()->GetTrueOrFalse(isFrozen); +} - Assert(!(callInfo.Flags & CallFlags_New)); +Var JavascriptObject::EntryIsExtensible(RecyclableObject* function, CallInfo callInfo, ...) +{ + PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); - Var tempVar = args.Info.Count < 2 ? scriptContext->GetLibrary()->GetUndefined() : args[1]; - RecyclableObject *object = JavascriptOperators::ToObject(tempVar, scriptContext); + ARGUMENTS(args, callInfo); + ScriptContext* scriptContext = function->GetScriptContext(); + CHAKRATEL_LANGSTATS_INC_BUILTINCOUNT(Object_Constructor_isExtensible); - if (object->GetTypeId() == TypeIds_HostDispatch) - { - Var result; - if (object->InvokeBuiltInOperationRemotely(EntryGetOwnPropertySymbols, args, &result)) - { - return result; - } - } + Assert(!(callInfo.Flags & CallFlags_New)); - return JavascriptOperators::GetOwnPropertySymbols(object, scriptContext); + if (args.Info.Count < 2 || !JavascriptOperators::IsObject(args[1])) + { + return scriptContext->GetLibrary()->GetFalse(); } - Var JavascriptObject::EntryKeys(RecyclableObject* function, CallInfo callInfo, ...) + RecyclableObject *object = VarTo(args[1]); + BOOL isExtensible = object->IsExtensible(); + + GlobalObject* globalObject = object->GetLibrary()->GetGlobalObject(); + if (isExtensible && globalObject != object && globalObject && (globalObject->ToThis() == object)) { - PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); + isExtensible = globalObject->IsExtensible(); + } - ARGUMENTS(args, callInfo); - ScriptContext* scriptContext = function->GetScriptContext(); + return scriptContext->GetLibrary()->GetTrueOrFalse(isExtensible); +} - Assert(!(callInfo.Flags & CallFlags_New)); - CHAKRATEL_LANGSTATS_INC_BUILTINCOUNT(Object_Constructor_keys); +Var JavascriptObject::EntryGetOwnPropertyNames(RecyclableObject* function, CallInfo callInfo, ...) +{ + PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); - Var tempVar = args.Info.Count < 2 ? scriptContext->GetLibrary()->GetUndefined() : args[1]; - RecyclableObject *object = JavascriptOperators::ToObject(tempVar, scriptContext); + ARGUMENTS(args, callInfo); + ScriptContext* scriptContext = function->GetScriptContext(); - if (object->GetTypeId() == TypeIds_HostDispatch) + Assert(!(callInfo.Flags & CallFlags_New)); + CHAKRATEL_LANGSTATS_INC_BUILTINCOUNT(Object_Constructor_getOwnPropertyNames); + + Var tempVar = args.Info.Count < 2 ? scriptContext->GetLibrary()->GetUndefined() : args[1]; + RecyclableObject *object = JavascriptOperators::ToObject(tempVar, scriptContext); + + if (object->GetTypeId() == TypeIds_HostDispatch) + { + Var result; + if (object->InvokeBuiltInOperationRemotely(EntryGetOwnPropertyNames, args, &result)) { - Var result; - if (object->InvokeBuiltInOperationRemotely(EntryKeys, args, &result)) - { - return result; - } + return result; } - return JavascriptOperators::GetOwnEnumerablePropertyNames(object, scriptContext); } - Var JavascriptObject::GetValuesOrEntries(RecyclableObject* object, bool valuesToReturn, ScriptContext* scriptContext) - { - Assert(object != nullptr); - Assert(scriptContext != nullptr); - JavascriptArray* valuesArray = scriptContext->GetLibrary()->CreateArray(0); + return JavascriptOperators::GetOwnPropertyNames(object, scriptContext); +} - JavascriptArray* ownKeysResult = JavascriptOperators::GetOwnPropertyNames(object, scriptContext); - uint32 length = ownKeysResult->GetLength(); +Var JavascriptObject::EntryGetOwnPropertySymbols(RecyclableObject* function, CallInfo callInfo, ...) +{ + PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); - Var nextKey; - const PropertyRecord* propertyRecord = nullptr; - PropertyId propertyId; - for (uint32 i = 0, index = 0; i < length; i++) - { - nextKey = ownKeysResult->DirectGetItem(i); - Assert(JavascriptString::Is(nextKey)); + ARGUMENTS(args, callInfo); + ScriptContext* scriptContext = function->GetScriptContext(); - PropertyDescriptor propertyDescriptor; + Assert(!(callInfo.Flags & CallFlags_New)); - JavascriptConversion::ToPropertyKey(nextKey, scriptContext, &propertyRecord, nullptr); - propertyId = propertyRecord->GetPropertyId(); - Assert(propertyId != Constants::NoProperty); + Var tempVar = args.Info.Count < 2 ? scriptContext->GetLibrary()->GetUndefined() : args[1]; + RecyclableObject *object = JavascriptOperators::ToObject(tempVar, scriptContext); - if (JavascriptOperators::GetOwnPropertyDescriptor(object, propertyId, scriptContext, &propertyDescriptor)) - { - if (propertyDescriptor.IsEnumerable()) - { - Var value = JavascriptOperators::GetProperty(object, propertyId, scriptContext); - - if (!valuesToReturn) - { - // For Object.entries each entry is key, value pair - JavascriptArray* entry = scriptContext->GetLibrary()->CreateArray(2); - entry->DirectSetItemAt(0, CrossSite::MarshalVar(scriptContext, nextKey)); - entry->DirectSetItemAt(1, CrossSite::MarshalVar(scriptContext, value)); - value = entry; - } - valuesArray->DirectSetItemAt(index++, CrossSite::MarshalVar(scriptContext, value)); - } - } + if (object->GetTypeId() == TypeIds_HostDispatch) + { + Var result; + if (object->InvokeBuiltInOperationRemotely(EntryGetOwnPropertySymbols, args, &result)) + { + return result; } - - return valuesArray; } - Var JavascriptObject::EntryValues(RecyclableObject* function, CallInfo callInfo, ...) - { - PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); + return JavascriptOperators::GetOwnPropertySymbols(object, scriptContext); +} - ARGUMENTS(args, callInfo); - ScriptContext* scriptContext = function->GetScriptContext(); +Var JavascriptObject::EntryKeys(RecyclableObject* function, CallInfo callInfo, ...) +{ + PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); - Assert(!(callInfo.Flags & CallFlags_New)); - CHAKRATEL_LANGSTATS_INC_BUILTINCOUNT(Object_Constructor_values); + ARGUMENTS(args, callInfo); + ScriptContext* scriptContext = function->GetScriptContext(); - Var tempVar = args.Info.Count < 2 ? scriptContext->GetLibrary()->GetUndefined() : args[1]; - RecyclableObject *object = JavascriptOperators::ToObject(tempVar, scriptContext); + Assert(!(callInfo.Flags & CallFlags_New)); + CHAKRATEL_LANGSTATS_INC_BUILTINCOUNT(Object_Constructor_keys); - return GetValuesOrEntries(object, true /*valuesToReturn*/, scriptContext); - } + Var tempVar = args.Info.Count < 2 ? scriptContext->GetLibrary()->GetUndefined() : args[1]; + RecyclableObject *object = JavascriptOperators::ToObject(tempVar, scriptContext); - Var JavascriptObject::EntryEntries(RecyclableObject* function, CallInfo callInfo, ...) + if (object->GetTypeId() == TypeIds_HostDispatch) { - PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); - - ARGUMENTS(args, callInfo); - ScriptContext* scriptContext = function->GetScriptContext(); - - Assert(!(callInfo.Flags & CallFlags_New)); - CHAKRATEL_LANGSTATS_INC_BUILTINCOUNT(Object_Constructor_entries); + Var result; + if (object->InvokeBuiltInOperationRemotely(EntryKeys, args, &result)) + { + return result; + } + } + return JavascriptOperators::GetOwnEnumerablePropertyNames(object, scriptContext); +} + +Var JavascriptObject::GetValuesOrEntries(RecyclableObject* object, bool valuesToReturn, ScriptContext* scriptContext) +{ + Assert(object != nullptr); + Assert(scriptContext != nullptr); + JavascriptArray* valuesArray = scriptContext->GetLibrary()->CreateArray(0); + + JavascriptArray* ownKeysResult = JavascriptOperators::GetOwnPropertyNames(object, scriptContext); + uint32 length = ownKeysResult->GetLength(); + + Var nextKey; + const PropertyRecord* propertyRecord = nullptr; + PropertyId propertyId; + for (uint32 i = 0, index = 0; i < length; i++) + { + nextKey = ownKeysResult->DirectGetItem(i); + Assert(VarIs(nextKey)); - Var tempVar = args.Info.Count < 2 ? scriptContext->GetLibrary()->GetUndefined() : args[1]; - RecyclableObject *object = JavascriptOperators::ToObject(tempVar, scriptContext); + PropertyDescriptor propertyDescriptor; - return GetValuesOrEntries(object, false /*valuesToReturn*/, scriptContext); - } + JavascriptConversion::ToPropertyKey(nextKey, scriptContext, &propertyRecord, nullptr); + propertyId = propertyRecord->GetPropertyId(); + Assert(propertyId != Constants::NoProperty); - JavascriptArray* JavascriptObject::CreateOwnSymbolPropertiesHelper(RecyclableObject* object, ScriptContext* scriptContext) - { - return CreateKeysHelper(object, scriptContext, TRUE, true /*includeSymbolsOnly */, false, true /*includeSpecialProperties*/); - } + if (JavascriptOperators::GetOwnPropertyDescriptor(object, propertyId, scriptContext, &propertyDescriptor)) + { + if (propertyDescriptor.IsEnumerable()) + { + Var value = JavascriptOperators::GetProperty(object, propertyId, scriptContext); - JavascriptArray* JavascriptObject::CreateOwnStringPropertiesHelper(RecyclableObject* object, ScriptContext* scriptContext) - { - return CreateKeysHelper(object, scriptContext, TRUE, false, true /*includeStringsOnly*/, true /*includeSpecialProperties*/); + if (!valuesToReturn) + { + // For Object.entries each entry is key, value pair + JavascriptArray* entry = scriptContext->GetLibrary()->CreateArray(2); + entry->DirectSetItemAt(0, CrossSite::MarshalVar(scriptContext, nextKey)); + entry->DirectSetItemAt(1, CrossSite::MarshalVar(scriptContext, value)); + value = entry; + } + valuesArray->DirectSetItemAt(index++, CrossSite::MarshalVar(scriptContext, value)); + } + } } - JavascriptArray* JavascriptObject::CreateOwnStringSymbolPropertiesHelper(RecyclableObject* object, ScriptContext* scriptContext) + return valuesArray; +} + +Var JavascriptObject::EntryValues(RecyclableObject* function, CallInfo callInfo, ...) +{ + PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); + + ARGUMENTS(args, callInfo); + ScriptContext* scriptContext = function->GetScriptContext(); + + Assert(!(callInfo.Flags & CallFlags_New)); + CHAKRATEL_LANGSTATS_INC_BUILTINCOUNT(Object_Constructor_values); + + Var tempVar = args.Info.Count < 2 ? scriptContext->GetLibrary()->GetUndefined() : args[1]; + RecyclableObject *object = JavascriptOperators::ToObject(tempVar, scriptContext); + + return GetValuesOrEntries(object, true /*valuesToReturn*/, scriptContext); +} + +Var JavascriptObject::EntryEntries(RecyclableObject* function, CallInfo callInfo, ...) +{ + PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); + + ARGUMENTS(args, callInfo); + ScriptContext* scriptContext = function->GetScriptContext(); + + Assert(!(callInfo.Flags & CallFlags_New)); + CHAKRATEL_LANGSTATS_INC_BUILTINCOUNT(Object_Constructor_entries); + + Var tempVar = args.Info.Count < 2 ? scriptContext->GetLibrary()->GetUndefined() : args[1]; + RecyclableObject *object = JavascriptOperators::ToObject(tempVar, scriptContext); + + return GetValuesOrEntries(object, false /*valuesToReturn*/, scriptContext); +} + +JavascriptArray* JavascriptObject::CreateOwnSymbolPropertiesHelper(RecyclableObject* object, ScriptContext* scriptContext) +{ + return CreateKeysHelper(object, scriptContext, TRUE, true /*includeSymbolsOnly */, false, true /*includeSpecialProperties*/); +} + +JavascriptArray* JavascriptObject::CreateOwnStringPropertiesHelper(RecyclableObject* object, ScriptContext* scriptContext) +{ + return CreateKeysHelper(object, scriptContext, TRUE, false, true /*includeStringsOnly*/, true /*includeSpecialProperties*/); +} + +JavascriptArray* JavascriptObject::CreateOwnStringSymbolPropertiesHelper(RecyclableObject* object, ScriptContext* scriptContext) +{ + return CreateKeysHelper(object, scriptContext, TRUE, true/*includeSymbolsOnly*/, true /*includeStringsOnly*/, true /*includeSpecialProperties*/); +} + +JavascriptArray* JavascriptObject::CreateOwnEnumerableStringPropertiesHelper(RecyclableObject* object, ScriptContext* scriptContext) +{ + return CreateKeysHelper(object, scriptContext, FALSE, false, true/*includeStringsOnly*/, false); +} + +JavascriptArray* JavascriptObject::CreateOwnEnumerableStringSymbolPropertiesHelper(RecyclableObject* object, ScriptContext* scriptContext) +{ + return CreateKeysHelper(object, scriptContext, FALSE, true/*includeSymbolsOnly*/, true/*includeStringsOnly*/, false); +} + +// 9.1.12 [[OwnPropertyKeys]] () in RC#4 dated April 3rd 2015. +JavascriptArray* JavascriptObject::CreateKeysHelper(RecyclableObject* object, ScriptContext* scriptContext, BOOL includeNonEnumerable, bool includeSymbolProperties, bool includeStringProperties, bool includeSpecialProperties) +{ + //1. Let keys be a new empty List. + //2. For each own property key P of O that is an integer index, in ascending numeric index order + // a. Add P as the last element of keys. + //3. For each own property key P of O that is a String but is not an integer index, in property creation order + // a. Add P as the last element of keys. + //4. For each own property key P of O that is a Symbol, in property creation order + // a. Add P as the last element of keys. + //5. Return keys. + AssertMsg(includeStringProperties || includeSymbolProperties, "Should either get string or symbol properties."); + + JavascriptStaticEnumerator enumerator; + EnumeratorFlags flags = EnumeratorFlags::SnapShotSemantics | EnumeratorFlags::UseCache; + JavascriptArray* newArr = scriptContext->GetLibrary()->CreateArray(0); + if (includeNonEnumerable) { - return CreateKeysHelper(object, scriptContext, TRUE, true/*includeSymbolsOnly*/, true /*includeStringsOnly*/, true /*includeSpecialProperties*/); + flags |= EnumeratorFlags::EnumNonEnumerable; } - - JavascriptArray* JavascriptObject::CreateOwnEnumerableStringPropertiesHelper(RecyclableObject* object, ScriptContext* scriptContext) + if (includeSymbolProperties) { - return CreateKeysHelper(object, scriptContext, FALSE, false, true/*includeStringsOnly*/, false); + flags |= EnumeratorFlags::EnumSymbols; } - - JavascriptArray* JavascriptObject::CreateOwnEnumerableStringSymbolPropertiesHelper(RecyclableObject* object, ScriptContext* scriptContext) + EnumeratorCache* cache = scriptContext->GetLibrary()->GetCreateKeysCache(object->GetType()); + if (!object->GetEnumerator(&enumerator, flags, scriptContext, cache)) { - return CreateKeysHelper(object, scriptContext, FALSE, true/*includeSymbolsOnly*/, true/*includeStringsOnly*/, false); + return newArr; // Return an empty array if we don't have an enumerator } - // 9.1.12 [[OwnPropertyKeys]] () in RC#4 dated April 3rd 2015. - JavascriptArray* JavascriptObject::CreateKeysHelper(RecyclableObject* object, ScriptContext* scriptContext, BOOL includeNonEnumerable, bool includeSymbolProperties, bool includeStringProperties, bool includeSpecialProperties) + JavascriptString * propertyName = nullptr; + PropertyId propertyId; + uint32 propertyIndex = 0; + uint32 symbolIndex = 0; + const PropertyRecord* propertyRecord; + JavascriptSymbol* symbol; + JavascriptArray* newArrForSymbols = nullptr; + while ((propertyName = enumerator.MoveAndGetNext(propertyId)) != NULL) { - //1. Let keys be a new empty List. - //2. For each own property key P of O that is an integer index, in ascending numeric index order - // a. Add P as the last element of keys. - //3. For each own property key P of O that is a String but is not an integer index, in property creation order - // a. Add P as the last element of keys. - //4. For each own property key P of O that is a Symbol, in property creation order - // a. Add P as the last element of keys. - //5. Return keys. - AssertMsg(includeStringProperties || includeSymbolProperties, "Should either get string or symbol properties."); - - JavascriptStaticEnumerator enumerator; - JavascriptArray* newArr = scriptContext->GetLibrary()->CreateArray(0); - JavascriptArray* newArrForSymbols = scriptContext->GetLibrary()->CreateArray(0); - EnumeratorFlags flags = EnumeratorFlags::None; - if (includeNonEnumerable) - { - flags |= EnumeratorFlags::EnumNonEnumerable; - } - if (includeSymbolProperties) - { - flags |= EnumeratorFlags::EnumSymbols; - } - if (!object->GetEnumerator(&enumerator, flags, scriptContext)) - { - return newArr; // Return an empty array if we don't have an enumerator - } - - JavascriptString * propertyName = nullptr; - PropertyId propertyId; - uint32 propertyIndex = 0; - uint32 symbolIndex = 0; - const PropertyRecord* propertyRecord; - JavascriptSymbol* symbol; - - while ((propertyName = enumerator.MoveAndGetNext(propertyId)) != NULL) + if (propertyName) { - if (propertyName) + if (includeSymbolProperties) { - if (includeSymbolProperties) - { - propertyRecord = scriptContext->GetPropertyName(propertyId); + propertyRecord = scriptContext->GetPropertyName(propertyId); - if (propertyRecord->IsSymbol()) + if (propertyRecord->IsSymbol()) + { + symbol = scriptContext->GetSymbol(propertyRecord); + // no need to marshal symbol because it is created from scriptContext + if (!newArrForSymbols) { - symbol = scriptContext->GetSymbol(propertyRecord); - // no need to marshal symbol because it is created from scriptContext - newArrForSymbols->DirectSetItemAt(symbolIndex++, symbol); - continue; + newArrForSymbols = scriptContext->GetLibrary()->CreateArray(0); } + newArrForSymbols->DirectSetItemAt(symbolIndex++, symbol); + continue; } - if (includeStringProperties) - { - newArr->DirectSetItemAt(propertyIndex++, CrossSite::MarshalVar(scriptContext, propertyName, propertyName->GetScriptContext())); - } + } + if (includeStringProperties) + { + newArr->DirectSetItemAt(propertyIndex++, CrossSite::MarshalVar(scriptContext, propertyName, propertyName->GetScriptContext())); } } + } - // Special properties - if (includeSpecialProperties && includeStringProperties) + // Special properties + if (includeSpecialProperties && includeStringProperties) + { + uint32 index = 0; + while (object->GetSpecialPropertyName(index, &propertyName, scriptContext)) { - uint32 index = 0; - while (object->GetSpecialPropertyName(index, &propertyName, scriptContext)) - { - newArr->DirectSetItemAt(propertyIndex++, propertyName); - index++; - } + newArr->DirectSetItemAt(propertyIndex++, propertyName); + index++; } + } + if (newArrForSymbols) + { // Append all the symbols at the end of list uint32 totalSymbols = newArrForSymbols->GetLength(); for (uint32 symIndex = 0; symIndex < totalSymbols; symIndex++) { newArr->DirectSetItemAt(propertyIndex++, newArrForSymbols->DirectGetItem(symIndex)); } - - return newArr; } - // args[1] this object to operate on. - // args[2] property name. - // args[3] object that attributes for the new descriptor. - Var JavascriptObject::EntryDefineProperty(RecyclableObject* function, CallInfo callInfo, ...) - { - PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); - - ARGUMENTS(args, callInfo); - ScriptContext* scriptContext = function->GetScriptContext(); + return newArr; +} - Assert(!(callInfo.Flags & CallFlags_New)); +// args[1] this object to operate on. +// args[2] property name. +// args[3] object that attributes for the new descriptor. +Var JavascriptObject::EntryDefineProperty(RecyclableObject* function, CallInfo callInfo, ...) +{ + PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); - if (args.Info.Count < 2 || !JavascriptOperators::IsObject(args[1])) - { - JavascriptError::ThrowTypeError(scriptContext, JSERR_FunctionArgument_NeedObject, _u("Object.defineProperty")); - } + ARGUMENTS(args, callInfo); + ScriptContext* scriptContext = function->GetScriptContext(); -#if ENABLE_COPYONACCESS_ARRAY - JavascriptLibrary::CheckAndConvertCopyOnAccessNativeIntArray(args[1]); -#endif - RecyclableObject* obj = RecyclableObject::FromVar(args[1]); - - // If the object is HostDispatch try to invoke the operation remotely - if (obj->GetTypeId() == TypeIds_HostDispatch) - { - if (obj->InvokeBuiltInOperationRemotely(EntryDefineProperty, args, NULL)) - { - return obj; - } - } + Assert(!(callInfo.Flags & CallFlags_New)); - Var propertyKey = args.Info.Count > 2 ? args[2] : obj->GetLibrary()->GetUndefined(); - PropertyRecord const * propertyRecord; - JavascriptConversion::ToPropertyKey(propertyKey, scriptContext, &propertyRecord, nullptr); - - Var descVar = args.Info.Count > 3 ? args[3] : obj->GetLibrary()->GetUndefined(); - PropertyDescriptor propertyDescriptor; - if (!JavascriptOperators::ToPropertyDescriptor(descVar, &propertyDescriptor, scriptContext)) - { - JavascriptError::ThrowTypeError(scriptContext, JSERR_PropertyDescriptor_Invalid, scriptContext->GetPropertyName(propertyRecord->GetPropertyId())->GetBuffer()); - } - - if (CONFIG_FLAG(UseFullName)) - { - ModifyGetterSetterFuncName(propertyRecord, propertyDescriptor, scriptContext); - } - - DefineOwnPropertyHelper(obj, propertyRecord->GetPropertyId(), propertyDescriptor, scriptContext); - - return obj; - } - - Var JavascriptObject::EntryDefineProperties(RecyclableObject* function, CallInfo callInfo, ...) + if (args.Info.Count < 2 || !JavascriptOperators::IsObject(args[1])) { - PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); - - ARGUMENTS(args, callInfo); - ScriptContext* scriptContext = function->GetScriptContext(); - - CHAKRATEL_LANGSTATS_INC_BUILTINCOUNT(Object_Constructor_defineProperties); - - Assert(!(callInfo.Flags & CallFlags_New)); - - if (args.Info.Count < 2 || !JavascriptOperators::IsObject(args[1])) - { - JavascriptError::ThrowTypeError(scriptContext, JSERR_FunctionArgument_NeedObject, _u("Object.defineProperties")); - } + JavascriptError::ThrowTypeError(scriptContext, JSERR_FunctionArgument_NeedObject, _u("Object.defineProperty")); + } #if ENABLE_COPYONACCESS_ARRAY - JavascriptLibrary::CheckAndConvertCopyOnAccessNativeIntArray(args[1]); + JavascriptLibrary::CheckAndConvertCopyOnAccessNativeIntArray(args[1]); #endif - RecyclableObject *object = RecyclableObject::FromVar(args[1]); + RecyclableObject* obj = VarTo(args[1]); - // If the object is HostDispatch try to invoke the operation remotely - if (object->GetTypeId() == TypeIds_HostDispatch) + // If the object is HostDispatch try to invoke the operation remotely + if (obj->GetTypeId() == TypeIds_HostDispatch) + { + if (obj->InvokeBuiltInOperationRemotely(EntryDefineProperty, args, NULL)) { - if (object->InvokeBuiltInOperationRemotely(EntryDefineProperties, args, NULL)) - { - return object; - } + return obj; } + } - Var propertiesVar = args.Info.Count > 2 ? args[2] : object->GetLibrary()->GetUndefined(); - RecyclableObject* properties = nullptr; - if (FALSE == JavascriptConversion::ToObject(propertiesVar, scriptContext, &properties)) - { - JavascriptError::ThrowTypeError(scriptContext, JSERR_FunctionArgument_NullOrUndefined, _u("Object.defineProperties")); - } + Var propertyKey = args.Info.Count > 2 ? args[2] : obj->GetLibrary()->GetUndefined(); + PropertyRecord const * propertyRecord; + JavascriptConversion::ToPropertyKey(propertyKey, scriptContext, &propertyRecord, nullptr); + + Var descVar = args.Info.Count > 3 ? args[3] : obj->GetLibrary()->GetUndefined(); + PropertyDescriptor propertyDescriptor; + if (!JavascriptOperators::ToPropertyDescriptor(descVar, &propertyDescriptor, scriptContext)) + { + JavascriptError::ThrowTypeError(scriptContext, JSERR_PropertyDescriptor_Invalid, scriptContext->GetPropertyName(propertyRecord->GetPropertyId())->GetBuffer()); + } - return DefinePropertiesHelper(object, properties, scriptContext); + if (CONFIG_FLAG(UseFullName)) + { + ModifyGetterSetterFuncName(propertyRecord, propertyDescriptor, scriptContext); } - // args[1] property name. - // args[2] function object to use as the getter function. - Var JavascriptObject::EntryDefineGetter(RecyclableObject* function, CallInfo callInfo, ...) + BOOL success = DefineOwnPropertyHelper(obj, propertyRecord->GetPropertyId(), propertyDescriptor, scriptContext); + if (!success) { - PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); + JavascriptError::ThrowTypeError(scriptContext, JSERR_DefineProperty_Default, scriptContext->GetPropertyName(propertyRecord->GetPropertyId())->GetBuffer()); + } + + return obj; +} + +Var JavascriptObject::EntryDefineProperties(RecyclableObject* function, CallInfo callInfo, ...) +{ + PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); + + ARGUMENTS(args, callInfo); + ScriptContext* scriptContext = function->GetScriptContext(); + + CHAKRATEL_LANGSTATS_INC_BUILTINCOUNT(Object_Constructor_defineProperties); - ARGUMENTS(args, callInfo); - ScriptContext* scriptContext = function->GetScriptContext(); + Assert(!(callInfo.Flags & CallFlags_New)); - Assert(!(callInfo.Flags & CallFlags_New)); + if (args.Info.Count < 2 || !JavascriptOperators::IsObject(args[1])) + { + JavascriptError::ThrowTypeError(scriptContext, JSERR_FunctionArgument_NeedObject, _u("Object.defineProperties")); + } - // For browser interop, simulate LdThis by calling OP implementation directly. - // Do not have module id here so use the global id, 0. - // #if ENABLE_COPYONACCESS_ARRAY - JavascriptLibrary::CheckAndConvertCopyOnAccessNativeIntArray(args[0]); + JavascriptLibrary::CheckAndConvertCopyOnAccessNativeIntArray(args[1]); #endif - RecyclableObject* obj = nullptr; - if (!JavascriptConversion::ToObject(args[0], scriptContext, &obj)) + RecyclableObject *object = VarTo(args[1]); + + // If the object is HostDispatch try to invoke the operation remotely + if (object->GetTypeId() == TypeIds_HostDispatch) + { + if (object->InvokeBuiltInOperationRemotely(EntryDefineProperties, args, NULL)) { - JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NullOrUndefined, _u("Object.prototype.__defineGetter__")); + return object; } + } - Var getterFunc = args.Info.Count > 2 ? args[2] : obj->GetLibrary()->GetUndefined(); + Var propertiesVar = args.Info.Count > 2 ? args[2] : object->GetLibrary()->GetUndefined(); + RecyclableObject* properties = nullptr; + if (FALSE == JavascriptConversion::ToObject(propertiesVar, scriptContext, &properties)) + { + JavascriptError::ThrowTypeError(scriptContext, JSERR_FunctionArgument_NullOrUndefined, _u("Object.defineProperties")); + } - if (!JavascriptConversion::IsCallable(getterFunc)) - { - JavascriptError::ThrowTypeError(scriptContext, JSERR_FunctionArgument_NeedFunction, _u("Object.prototype.__defineGetter__")); - } + return DefinePropertiesHelper(object, properties, scriptContext); +} - Var propertyKey = args.Info.Count > 1 ? args[1] : obj->GetLibrary()->GetUndefined(); - const PropertyRecord* propertyRecord; - JavascriptConversion::ToPropertyKey(propertyKey, scriptContext, &propertyRecord, nullptr); +// args[1] property name. +// args[2] function object to use as the getter function. +Var JavascriptObject::EntryDefineGetter(RecyclableObject* function, CallInfo callInfo, ...) +{ + PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); - PropertyDescriptor propertyDescriptor; - propertyDescriptor.SetEnumerable(true); - propertyDescriptor.SetConfigurable(true); - propertyDescriptor.SetGetter(getterFunc); + ARGUMENTS(args, callInfo); + ScriptContext* scriptContext = function->GetScriptContext(); - DefineOwnPropertyHelper(obj, propertyRecord->GetPropertyId(), propertyDescriptor, scriptContext); + Assert(!(callInfo.Flags & CallFlags_New)); - return obj->GetLibrary()->GetUndefined(); + // For browser interop, simulate LdThis by calling OP implementation directly. + // Do not have module id here so use the global id, 0. + // +#if ENABLE_COPYONACCESS_ARRAY + JavascriptLibrary::CheckAndConvertCopyOnAccessNativeIntArray(args[0]); +#endif + RecyclableObject* obj = nullptr; + if (!JavascriptConversion::ToObject(args[0], scriptContext, &obj)) + { + JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NullOrUndefined, _u("Object.prototype.__defineGetter__")); } - // args[1] property name. - // args[2] function object to use as the setter function. - Var JavascriptObject::EntryDefineSetter(RecyclableObject* function, CallInfo callInfo, ...) - { - PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); + Var getterFunc = args.Info.Count > 2 ? args[2] : obj->GetLibrary()->GetUndefined(); - ARGUMENTS(args, callInfo); - ScriptContext* scriptContext = function->GetScriptContext(); + if (!JavascriptConversion::IsCallable(getterFunc)) + { + JavascriptError::ThrowTypeError(scriptContext, JSERR_FunctionArgument_NeedFunction, _u("Object.prototype.__defineGetter__")); + } - Assert(!(callInfo.Flags & CallFlags_New)); + Var propertyKey = args.Info.Count > 1 ? args[1] : obj->GetLibrary()->GetUndefined(); + const PropertyRecord* propertyRecord; + JavascriptConversion::ToPropertyKey(propertyKey, scriptContext, &propertyRecord, nullptr); - // For browser interop, simulate LdThis by calling OP implementation directly. - // Do not have module id here so use the global id, 0. - // - RecyclableObject* obj = nullptr; - if (!JavascriptConversion::ToObject(args[0], scriptContext, &obj)) - { - JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NullOrUndefined, _u("Object.prototype.__defineSetter__")); - } + PropertyDescriptor propertyDescriptor; + propertyDescriptor.SetEnumerable(true); + propertyDescriptor.SetConfigurable(true); + propertyDescriptor.SetGetter(getterFunc); - Var setterFunc = args.Info.Count > 2 ? args[2] : obj->GetLibrary()->GetUndefined(); + DefineOwnPropertyHelper(obj, propertyRecord->GetPropertyId(), propertyDescriptor, scriptContext); - if (!JavascriptConversion::IsCallable(setterFunc)) - { - JavascriptError::ThrowTypeError(scriptContext, JSERR_FunctionArgument_NeedFunction, _u("Object.prototype.__defineSetter__")); - } + return obj->GetLibrary()->GetUndefined(); +} - Var propertyKey = args.Info.Count > 1 ? args[1] : obj->GetLibrary()->GetUndefined(); - const PropertyRecord* propertyRecord; - JavascriptConversion::ToPropertyKey(propertyKey, scriptContext, &propertyRecord, nullptr); +// args[1] property name. +// args[2] function object to use as the setter function. +Var JavascriptObject::EntryDefineSetter(RecyclableObject* function, CallInfo callInfo, ...) +{ + PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); - PropertyDescriptor propertyDescriptor; - propertyDescriptor.SetEnumerable(true); - propertyDescriptor.SetConfigurable(true); - propertyDescriptor.SetSetter(setterFunc); + ARGUMENTS(args, callInfo); + ScriptContext* scriptContext = function->GetScriptContext(); - DefineOwnPropertyHelper(obj, propertyRecord->GetPropertyId(), propertyDescriptor, scriptContext); + Assert(!(callInfo.Flags & CallFlags_New)); - return obj->GetLibrary()->GetUndefined(); + // For browser interop, simulate LdThis by calling OP implementation directly. + // Do not have module id here so use the global id, 0. + // + RecyclableObject* obj = nullptr; + if (!JavascriptConversion::ToObject(args[0], scriptContext, &obj)) + { + JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NullOrUndefined, _u("Object.prototype.__defineSetter__")); } - // args[1] property name. - Var JavascriptObject::EntryLookupGetter(RecyclableObject* function, CallInfo callInfo, ...) + Var setterFunc = args.Info.Count > 2 ? args[2] : obj->GetLibrary()->GetUndefined(); + + if (!JavascriptConversion::IsCallable(setterFunc)) { - PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); + JavascriptError::ThrowTypeError(scriptContext, JSERR_FunctionArgument_NeedFunction, _u("Object.prototype.__defineSetter__")); + } - ARGUMENTS(args, callInfo); - ScriptContext* scriptContext = function->GetScriptContext(); + Var propertyKey = args.Info.Count > 1 ? args[1] : obj->GetLibrary()->GetUndefined(); + const PropertyRecord* propertyRecord; + JavascriptConversion::ToPropertyKey(propertyKey, scriptContext, &propertyRecord, nullptr); - Assert(!(callInfo.Flags & CallFlags_New)); + PropertyDescriptor propertyDescriptor; + propertyDescriptor.SetEnumerable(true); + propertyDescriptor.SetConfigurable(true); + propertyDescriptor.SetSetter(setterFunc); - RecyclableObject* obj = nullptr; - if (!JavascriptConversion::ToObject(args[0], scriptContext, &obj)) - { - JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NullOrUndefined, _u("Object.prototype.__lookupGetter__")); - } + DefineOwnPropertyHelper(obj, propertyRecord->GetPropertyId(), propertyDescriptor, scriptContext); - Var propertyKey = args.Info.Count > 1 ? args[1] : obj->GetLibrary()->GetUndefined(); - const PropertyRecord* propertyRecord; - JavascriptConversion::ToPropertyKey(propertyKey, scriptContext, &propertyRecord, nullptr); + return obj->GetLibrary()->GetUndefined(); +} - Var getter = nullptr; - Var unused = nullptr; - if (JavascriptOperators::GetAccessors(obj, propertyRecord->GetPropertyId(), scriptContext, &getter, &unused)) - { - if (getter != nullptr) - { - return getter; - } - } +// args[1] property name. +Var JavascriptObject::EntryLookupGetter(RecyclableObject* function, CallInfo callInfo, ...) +{ + PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); - return obj->GetLibrary()->GetUndefined(); - } + ARGUMENTS(args, callInfo); + ScriptContext* scriptContext = function->GetScriptContext(); - // args[1] property name. - Var JavascriptObject::EntryLookupSetter(RecyclableObject* function, CallInfo callInfo, ...) - { - PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); + Assert(!(callInfo.Flags & CallFlags_New)); - ARGUMENTS(args, callInfo); - ScriptContext* scriptContext = function->GetScriptContext(); + RecyclableObject* obj = nullptr; + if (!JavascriptConversion::ToObject(args[0], scriptContext, &obj)) + { + JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NullOrUndefined, _u("Object.prototype.__lookupGetter__")); + } - Assert(!(callInfo.Flags & CallFlags_New)); + Var propertyKey = args.Info.Count > 1 ? args[1] : obj->GetLibrary()->GetUndefined(); + const PropertyRecord* propertyRecord; + JavascriptConversion::ToPropertyKey(propertyKey, scriptContext, &propertyRecord, nullptr); - RecyclableObject* obj = nullptr; - if (!JavascriptConversion::ToObject(args[0], scriptContext, &obj)) + Var getter = nullptr; + Var unused = nullptr; + if (JavascriptOperators::GetAccessors(obj, propertyRecord->GetPropertyId(), scriptContext, &getter, &unused)) + { + if (getter != nullptr) { - JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NullOrUndefined, _u("Object.prototype.__lookupSetter__")); + return getter; } + } - Var propertyKey = args.Info.Count > 1 ? args[1] : obj->GetLibrary()->GetUndefined(); - const PropertyRecord* propertyRecord; - JavascriptConversion::ToPropertyKey(propertyKey, scriptContext, &propertyRecord, nullptr); + return obj->GetLibrary()->GetUndefined(); +} - Var unused = nullptr; - Var setter = nullptr; - if (JavascriptOperators::GetAccessors(obj, propertyRecord->GetPropertyId(), scriptContext, &unused, &setter)) - { - if (setter != nullptr) - { - return setter; - } - } +// args[1] property name. +Var JavascriptObject::EntryLookupSetter(RecyclableObject* function, CallInfo callInfo, ...) +{ + PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); + + ARGUMENTS(args, callInfo); + ScriptContext* scriptContext = function->GetScriptContext(); - return obj->GetLibrary()->GetUndefined(); + Assert(!(callInfo.Flags & CallFlags_New)); + + RecyclableObject* obj = nullptr; + if (!JavascriptConversion::ToObject(args[0], scriptContext, &obj)) + { + JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NullOrUndefined, _u("Object.prototype.__lookupSetter__")); } - Var JavascriptObject::EntryIs(RecyclableObject* function, CallInfo callInfo, ...) + Var propertyKey = args.Info.Count > 1 ? args[1] : obj->GetLibrary()->GetUndefined(); + const PropertyRecord* propertyRecord; + JavascriptConversion::ToPropertyKey(propertyKey, scriptContext, &propertyRecord, nullptr); + + Var unused = nullptr; + Var setter = nullptr; + if (JavascriptOperators::GetAccessors(obj, propertyRecord->GetPropertyId(), scriptContext, &unused, &setter)) { - PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); + if (setter != nullptr) + { + return setter; + } + } - ARGUMENTS(args, callInfo); - ScriptContext* scriptContext = function->GetScriptContext(); + return obj->GetLibrary()->GetUndefined(); +} - Assert(!(callInfo.Flags & CallFlags_New)); +Var JavascriptObject::EntryIs(RecyclableObject* function, CallInfo callInfo, ...) +{ + PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); - Var x = args.Info.Count > 1 ? args[1] : scriptContext->GetLibrary()->GetUndefined(); - Var y = args.Info.Count > 2 ? args[2] : scriptContext->GetLibrary()->GetUndefined(); + ARGUMENTS(args, callInfo); + ScriptContext* scriptContext = function->GetScriptContext(); - return JavascriptBoolean::ToVar(JavascriptConversion::SameValue(x, y), scriptContext); - } + Assert(!(callInfo.Flags & CallFlags_New)); - //ES6 19.1.2.1 - Var JavascriptObject::EntryAssign(RecyclableObject* function, CallInfo callInfo, ...) - { - PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); + Var x = args.Info.Count > 1 ? args[1] : scriptContext->GetLibrary()->GetUndefined(); + Var y = args.Info.Count > 2 ? args[2] : scriptContext->GetLibrary()->GetUndefined(); - ARGUMENTS(args, callInfo); - ScriptContext* scriptContext = function->GetScriptContext(); + return JavascriptBoolean::ToVar(JavascriptConversion::SameValue(x, y), scriptContext); +} - Assert(!(callInfo.Flags & CallFlags_New)); +//ES6 19.1.2.1 +Var JavascriptObject::EntryAssign(RecyclableObject* function, CallInfo callInfo, ...) +{ + PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); - // 1. Let to be ToObject(target). - // 2. ReturnIfAbrupt(to). - // 3 If only one argument was passed, return to. - RecyclableObject* to = nullptr; - if (args.Info.Count == 1 || !JavascriptConversion::ToObject(args[1], scriptContext, &to)) - { - JavascriptError::ThrowTypeError(scriptContext, JSERR_FunctionArgument_NeedObject, _u("Object.assign")); - } + ARGUMENTS(args, callInfo); + ScriptContext* scriptContext = function->GetScriptContext(); - if (args.Info.Count < 3) - { - return to; - } + Assert(!(callInfo.Flags & CallFlags_New)); - // 4. Let sources be the List of argument values starting with the second argument. - // 5. For each element nextSource of sources, in ascending index order, - AssignHelper(args[2], to, scriptContext); - for (unsigned int i = 3; i < args.Info.Count; i++) - { - AssignHelper(args[i], to, scriptContext); - } + // 1. Let to be ToObject(target). + // 2. ReturnIfAbrupt(to). + // 3 If only one argument was passed, return to. + RecyclableObject* to = nullptr; + if (args.Info.Count == 1 || !JavascriptConversion::ToObject(args[1], scriptContext, &to)) + { + JavascriptError::ThrowTypeError(scriptContext, JSERR_FunctionArgument_NeedObject, _u("Object.assign")); + } - // 6. Return to. + if (args.Info.Count < 3) + { return to; } - template - void JavascriptObject::AssignHelper(Var fromArg, RecyclableObject* to, ScriptContext* scriptContext) + // 4. Let sources be the List of argument values starting with the second argument. + // 5. For each element nextSource of sources, in ascending index order, + CopyDataPropertiesHelper(args[2], to, scriptContext); + for (unsigned int i = 3; i < args.Info.Count; i++) { - // a. If nextSource is undefined or null, let keys be an empty List. - // b. Else, - // i.Let from be ToObject(nextSource). - // ii.ReturnIfAbrupt(from). - // iii.Let keys be from.[[OwnPropertyKeys]](). - // iv.ReturnIfAbrupt(keys). + CopyDataPropertiesHelper(args[i], to, scriptContext); + } - RecyclableObject* from = nullptr; - if (!JavascriptConversion::ToObject(fromArg, scriptContext, &from)) + // 6. Return to. + return to; +} + +template +PCWSTR GetCopyDataPropertiesEntryName() { + return assign ? _u("Object.assign") : _u("Object.Spread"); +} + +/*static*/ +template +void JavascriptObject::CopyDataPropertiesHelper(Var source, RecyclableObject* to, ScriptContext* scriptContext, const BVSparse* excluded) +{ + // If assign is false, this performs CopyDataProperties(https://tc39.github.io/ecma262/#sec-copydataproperties). + // Variable excluded is ignored. + // Otherwise, it performs the loop body of step 4 in Object.assign (https://tc39.github.io/ecma262/#sec-object.assign). + // Value of tryCopy is ignored. + // 1. Assert Type(to) is Object. + // 2. Assert Type(excluded) is List. + // 3. If source is undefined or null, let keys be a new empty List + // 4. Else, + // a. Let from be ToObject(source). + // b. Let keys be from.[[OwnpropertyKeys]](). + // 5. Repeat for each element nextKey of keys in List order, + // a. If we are not in assign mode, then + // i. Let found be false. + // ii. Repeat for each element e of excluded, + // 1. If e is not empty and SameValue(e, nextKey) is true, then + // a. Set found to true. + // b. If found is false or we are in assign mode, then + // i. Let desc be from.[[GetOwnProperty]](nextKey). + // ii. If desc is not undefined and desc.[[Enumerable]] is true, then + // 1. Let propValue be Get(from, nextKey). + // 2. If we are in assign mode, then + // a. Perform Set(to, nextKey, propValue, true). + // 3. Else, + // a. Perform CreateDataProperty(to, nextKey, propValue). + // 6. Return target (target is returned in pointer). + Assert(JavascriptOperators::IsObject(to)); + RecyclableObject* from = nullptr; + if (!JavascriptConversion::ToObject(source, scriptContext, &from)) + { + if (JavascriptOperators::IsUndefinedOrNull(source)) { - if (JavascriptOperators::IsUndefinedOrNull(fromArg)) - { - return; - } - JavascriptError::ThrowTypeError(scriptContext, JSERR_FunctionArgument_NeedObject, _u("Object.assign")); + return; } + JavascriptError::ThrowTypeError(scriptContext, JSERR_FunctionArgument_NeedObject, GetCopyDataPropertiesEntryName()); + } #if ENABLE_COPYONACCESS_ARRAY - JavascriptLibrary::CheckAndConvertCopyOnAccessNativeIntArray(from); + JavascriptLibrary::CheckAndConvertCopyOnAccessNativeIntArray(from); #endif - - // if proxy, take slow path by calling [[OwnPropertyKeys]] on source - if (JavascriptProxy::Is(from)) - { - AssignForProxyObjects(from, to, scriptContext); - } - // else use enumerator to extract keys from source - else + // if proxy, take slow path by calling [[OwnPropertyKeys]] on source + if (VarIs(from)) + { + CopyDataPropertiesForProxyObjects(from, to, excluded, scriptContext); + } + // else use enumerator to extract keys from source + else + { + if (assign) { bool copied = false; if (tryCopy) { - DynamicObject* fromObj = JavascriptOperators::TryFromVar(from); - DynamicObject* toObj = JavascriptOperators::TryFromVar(to); + DynamicObject* fromObj = DynamicObject::TryVarToBaseDynamicObject(from); + DynamicObject* toObj = DynamicObject::TryVarToBaseDynamicObject(to); if (toObj && fromObj && toObj->GetType() == scriptContext->GetLibrary()->GetObjectType()) { copied = toObj->TryCopy(fromObj); @@ -1603,37 +1670,54 @@ using namespace Js; } if (!copied) { - AssignForGenericObjects(from, to, scriptContext); + CopyDataPropertiesForGenericObjects(from, to, /*excluded*/ nullptr, scriptContext); } } + else + { + CopyDataPropertiesForGenericObjects(from, to, excluded, scriptContext); + } } +} + +/*static*/ +template +void JavascriptObject::CopyDataPropertiesForGenericObjects(RecyclableObject* from, RecyclableObject* to, const BVSparse* excluded, ScriptContext* scriptContext) +{ + // Steps 4 and 5 of CopyDataPropertiesHelper - void JavascriptObject::AssignForGenericObjects(RecyclableObject* from, RecyclableObject* to, ScriptContext* scriptContext) + EnumeratorCache* cache = scriptContext->GetLibrary()->GetObjectAssignCache(from->GetType()); + JavascriptStaticEnumerator enumerator; + if (!from->GetEnumerator(&enumerator, EnumeratorFlags::SnapShotSemantics | EnumeratorFlags::EnumSymbols | EnumeratorFlags::UseCache, scriptContext, cache)) { - EnumeratorCache* cache = scriptContext->GetLibrary()->GetObjectAssignCache(from->GetType()); - JavascriptStaticEnumerator enumerator; - if (!from->GetEnumerator(&enumerator, EnumeratorFlags::SnapShotSemantics | EnumeratorFlags::EnumSymbols | EnumeratorFlags::UseCache, scriptContext, cache)) - { - // Nothing to enumerate, continue with the nextSource. - return; - } + // Nothing to enumerate, continue with the nextSource. + return; + } - PropertyId nextKey = Constants::NoProperty; - Var propValue = nullptr; - JavascriptString * propertyName = nullptr; + PropertyId nextKey = Constants::NoProperty; + Var propValue = nullptr; + JavascriptString * propertyName = nullptr; - // Enumerate through each property of properties and fetch the property descriptor - while ((propertyName = enumerator.MoveAndGetNext(nextKey)) != NULL) + // Enumerate through each property of properties and fetch the property descriptor + while ((propertyName = enumerator.MoveAndGetNext(nextKey)) != NULL) + { + // Make sure nextKey is defined for the current propertyName + if (nextKey == Constants::NoProperty) { - if (nextKey == Constants::NoProperty) - { - PropertyRecord const * propertyRecord = nullptr; + PropertyRecord const * propertyRecord = nullptr; - scriptContext->GetOrAddPropertyRecord(propertyName, &propertyRecord); - nextKey = propertyRecord->GetPropertyId(); - } - PropertyString * propertyString = PropertyString::TryFromVar(propertyName); + scriptContext->GetOrAddPropertyRecord(propertyName, &propertyRecord); + nextKey = propertyRecord->GetPropertyId(); + } + bool found = false; + if (excluded) + { + found = excluded->Test(nextKey); + } + if (!found) + { + PropertyString * propertyString = JavascriptOperators::TryFromVar(propertyName); // If propertyName is a PropertyString* we can try getting the property from the inline cache to avoid having a full property lookup // @@ -1643,438 +1727,525 @@ using namespace Js; { if (!JavascriptOperators::GetOwnProperty(from, nextKey, &propValue, scriptContext, &getPropertyInfo)) { - JavascriptError::ThrowTypeError(scriptContext, JSERR_Operand_Invalid_NeedObject, _u("Object.assign")); + JavascriptError::ThrowTypeError(scriptContext, JSERR_FunctionArgument_NeedObject, GetCopyDataPropertiesEntryName()); } } - // Similarly, try to set the property using our cache to avoid having to do the full work of SetProperty - PropertyValueInfo setPropertyInfo; - if (propertyString == nullptr || !propertyString->TrySetPropertyFromCache(to, propValue, scriptContext, PropertyOperation_ThrowIfNonWritable, &setPropertyInfo)) + if (assign) + { + // Similarly, try to set the property using our cache to avoid having to do the full work of SetProperty + PropertyValueInfo setPropertyInfo; + if (propertyString == nullptr || !propertyString->TrySetPropertyFromCache(to, propValue, scriptContext, PropertyOperation_ThrowIfNonWritable, &setPropertyInfo)) + { + if (!JavascriptOperators::SetProperty(to, to, nextKey, propValue, &setPropertyInfo, scriptContext, PropertyOperation_ThrowIfNonWritable)) + { + JavascriptError::ThrowTypeError(scriptContext, JSERR_FunctionArgument_NeedObject, GetCopyDataPropertiesEntryName()); + } + } + } + else { - if (!JavascriptOperators::SetProperty(to, to, nextKey, propValue, &setPropertyInfo, scriptContext, PropertyOperation_ThrowIfNonWritable)) + //TODO[t-huyan]: potentially use caching to improve efficiency? (see AssignForGenericObjects implementation) + if (!CreateDataProperty(to, nextKey, propValue, scriptContext)) { - JavascriptError::ThrowTypeError(scriptContext, JSERR_Operand_Invalid_NeedObject, _u("Object.assign")); + JavascriptError::ThrowTypeError(scriptContext, JSERR_FunctionArgument_NeedObject, GetCopyDataPropertiesEntryName()); } } } } +} + +/*static*/ +template +void JavascriptObject::CopyDataPropertiesForProxyObjects(RecyclableObject* from, RecyclableObject* to, const BVSparse* excluded, ScriptContext* scriptContext) +{ + // Steps 4 and 5 of CopyDataPropertiesHelper + JavascriptArray *keys = JavascriptOperators::GetOwnEnumerablePropertyNamesSymbols(from, scriptContext); + uint32 length = keys->GetLength(); + Var nextKey; + const PropertyRecord* propertyRecord = nullptr; + PropertyId propertyId; + Var propValue = nullptr; + for (uint32 j = 0; j < length; j++) + { + PropertyDescriptor propertyDescriptor; + nextKey = keys->DirectGetItem(j); + AssertMsg(VarIs(nextKey) || VarIs(nextKey), "Invariant check during ownKeys proxy trap should make sure we only get property key here. (symbol or string primitives)"); + // Spec doesn't strictly call for us to use ToPropertyKey but since we know nextKey is already a symbol or string primitive, ToPropertyKey will be a nop and return us the propertyRecord + JavascriptConversion::ToPropertyKey(nextKey, scriptContext, &propertyRecord, nullptr); + propertyId = propertyRecord->GetPropertyId(); + AssertMsg(propertyId != Constants::NoProperty, "CopyDataPropertiesForProxyObjects - OwnPropertyKeys returned a propertyId with value NoProperty."); - void JavascriptObject::AssignForProxyObjects(RecyclableObject* from, RecyclableObject* to, ScriptContext* scriptContext) - { - JavascriptArray *keys = JavascriptOperators::GetOwnEnumerablePropertyNamesSymbols(from, scriptContext); - - // c. Repeat for each element nextKey of keys in List order, - // i. Let desc be from.[[GetOwnProperty]](nextKey). - // ii. ReturnIfAbrupt(desc). - // iii. if desc is not undefined and desc.[[Enumerable]] is true, then - // 1. Let propValue be Get(from, nextKey). - // 2. ReturnIfAbrupt(propValue). - // 3. Let status be Set(to, nextKey, propValue, true); - // 4. ReturnIfAbrupt(status). - uint32 length = keys->GetLength(); - Var nextKey; - const PropertyRecord* propertyRecord = nullptr; - PropertyId propertyId; - Var propValue = nullptr; - for (uint32 j = 0; j < length; j++) + bool found = false; + if (excluded) + { + found = excluded->Test(propertyId); + } + if (!found) { - PropertyDescriptor propertyDescriptor; - nextKey = keys->DirectGetItem(j); - AssertMsg(JavascriptSymbol::Is(nextKey) || JavascriptString::Is(nextKey), "Invariant check during ownKeys proxy trap should make sure we only get property key here. (symbol or string primitives)"); - // Spec doesn't strictly call for us to use ToPropertyKey but since we know nextKey is already a symbol or string primitive, ToPropertyKey will be a nop and return us the propertyRecord - JavascriptConversion::ToPropertyKey(nextKey, scriptContext, &propertyRecord, nullptr); - propertyId = propertyRecord->GetPropertyId(); - AssertMsg(propertyId != Constants::NoProperty, "AssignForProxyObjects - OwnPropertyKeys returned a propertyId with value NoProperty."); if (JavascriptOperators::GetOwnPropertyDescriptor(from, propertyRecord->GetPropertyId(), scriptContext, &propertyDescriptor)) { if (propertyDescriptor.IsEnumerable()) { if (!JavascriptOperators::GetOwnProperty(from, propertyId, &propValue, scriptContext, nullptr)) { - JavascriptError::ThrowTypeError(scriptContext, JSERR_Operand_Invalid_NeedObject, _u("Object.assign")); + JavascriptError::ThrowTypeError(scriptContext, JSERR_FunctionArgument_NeedObject, GetCopyDataPropertiesEntryName()); } - if (!JavascriptOperators::SetProperty(to, to, propertyId, propValue, scriptContext)) + if (assign) { - JavascriptError::ThrowTypeError(scriptContext, JSERR_Operand_Invalid_NeedObject, _u("Object.assign")); + if (!JavascriptOperators::SetProperty(to, to, propertyId, propValue, scriptContext)) + { + JavascriptError::ThrowTypeError(scriptContext, JSERR_FunctionArgument_NeedObject, GetCopyDataPropertiesEntryName()); + } + } + else + { + if (!CreateDataProperty(to, propertyId, propValue, scriptContext)) + { + JavascriptError::ThrowTypeError(scriptContext, JSERR_FunctionArgument_NeedObject, GetCopyDataPropertiesEntryName()); + } } } } } } +} - //ES5 15.2.3.5 - Var JavascriptObject::EntryCreate(RecyclableObject* function, CallInfo callInfo, ...) - { - PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); - - ARGUMENTS(args, callInfo); - ScriptContext* scriptContext = function->GetScriptContext(); +BOOL JavascriptObject::CreateDataProperty(RecyclableObject* obj, PropertyId key, Var value, ScriptContext* scriptContext) +{ + // Performs CreateDataProperty operation as outlined in https://tc39.github.io/ecma262/#sec-createdataproperty. + // 1. Assert: Type(obj) is Object + // 2. Assert: IsPropertyKey(key) is true + Assert(JavascriptOperators::IsObject(obj)); + // 3. Let newDesc be the PropertyDescriptor{[[Value]]: V, [[Writable]]: true, [[Enumerable]]: true, [[Configurable]]: true}. + PropertyDescriptor newDesc; + newDesc.SetValue(value); + newDesc.SetWritable(true); + newDesc.SetEnumerable(true); + newDesc.SetConfigurable(true); - CHAKRATEL_LANGSTATS_INC_BUILTINCOUNT(Object_Constructor_create) + // 4. Return ? O.[[DefineOwnProperty]](P, newDesc). + return DefineOwnPropertyHelper(obj, key, newDesc, scriptContext); +} - Assert(!(callInfo.Flags & CallFlags_New)); +//ES5 15.2.3.5 +Var JavascriptObject::EntryCreate(RecyclableObject* function, CallInfo callInfo, ...) +{ + PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); - if (args.Info.Count < 2) - { - JavascriptError::ThrowTypeError(scriptContext, JSERR_FunctionArgument_NotObjectOrNull, _u("Object.create")); - } + ARGUMENTS(args, callInfo); + ScriptContext* scriptContext = function->GetScriptContext(); - Var protoVar = args[1]; - if (!JavascriptOperators::IsObjectOrNull(protoVar)) - { - JavascriptError::ThrowTypeError(scriptContext, JSERR_FunctionArgument_NotObjectOrNull, _u("Object.create")); - } - RecyclableObject* protoObj = RecyclableObject::FromVar(protoVar); - DynamicObject* object = function->GetLibrary()->CreateObject(protoObj); + CHAKRATEL_LANGSTATS_INC_BUILTINCOUNT(Object_Constructor_create) - JS_ETW(EventWriteJSCRIPT_RECYCLER_ALLOCATE_OBJECT(object)); -#if ENABLE_DEBUG_CONFIG_OPTIONS - if (Js::Configuration::Global.flags.IsEnabled(Js::autoProxyFlag)) - { - object = DynamicObject::FromVar(JavascriptProxy::AutoProxyWrapper(object)); - } -#endif + Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count > 2 && JavascriptOperators::GetTypeId(args[2]) != TypeIds_Undefined) - { - RecyclableObject* properties = nullptr; - if (FALSE == JavascriptConversion::ToObject(args[2], scriptContext, &properties)) - { - JavascriptError::ThrowTypeError(scriptContext, JSERR_FunctionArgument_NullOrUndefined, _u("Object.create")); - } - return DefinePropertiesHelper(object, properties, scriptContext); - } - return object; + if (args.Info.Count < 2) + { + JavascriptError::ThrowTypeError(scriptContext, JSERR_FunctionArgument_NotObjectOrNull, _u("Object.create")); } - Var JavascriptObject::DefinePropertiesHelper(RecyclableObject *object, RecyclableObject* props, ScriptContext *scriptContext) + Var protoVar = args[1]; + if (!JavascriptOperators::IsObjectOrNull(protoVar)) { - if (JavascriptProxy::Is(props)) - { - return DefinePropertiesHelperForProxyObjects(object, props, scriptContext); - } - else - { - return DefinePropertiesHelperForGenericObjects(object, props, scriptContext); - } + JavascriptError::ThrowTypeError(scriptContext, JSERR_FunctionArgument_NotObjectOrNull, _u("Object.create")); } + RecyclableObject* protoObj = VarTo(protoVar); + DynamicObject* object = function->GetLibrary()->CreateObject(protoObj); - Var JavascriptObject::DefinePropertiesHelperForGenericObjects(RecyclableObject *object, RecyclableObject* props, ScriptContext *scriptContext) + JS_ETW(EventWriteJSCRIPT_RECYCLER_ALLOCATE_OBJECT(object)); +#if ENABLE_DEBUG_CONFIG_OPTIONS + if (Js::Configuration::Global.flags.IsEnabled(Js::autoProxyFlag)) { - size_t descSize = 16; - size_t descCount = 0; - struct DescriptorMap - { - Field(PropertyRecord const *) propRecord; - Field(PropertyDescriptor) descriptor; - Field(Var) originalVar; - }; + object = VarTo(JavascriptProxy::AutoProxyWrapper(object)); + } +#endif - JavascriptStaticEnumerator enumerator; - if (!props->GetEnumerator(&enumerator, EnumeratorFlags::EnumSymbols, scriptContext)) + if (args.Info.Count > 2 && JavascriptOperators::GetTypeId(args[2]) != TypeIds_Undefined) + { + RecyclableObject* properties = nullptr; + if (FALSE == JavascriptConversion::ToObject(args[2], scriptContext, &properties)) { - return object; + JavascriptError::ThrowTypeError(scriptContext, JSERR_FunctionArgument_NullOrUndefined, _u("Object.create")); } + return DefinePropertiesHelper(object, properties, scriptContext); + } + return object; +} - ENTER_PINNED_SCOPE(DescriptorMap, descriptors); - descriptors = RecyclerNewArray(scriptContext->GetRecycler(), DescriptorMap, descSize); +Var JavascriptObject::DefinePropertiesHelper(RecyclableObject *object, RecyclableObject* props, ScriptContext *scriptContext) +{ + if (VarIs(props)) + { + return DefinePropertiesHelperForProxyObjects(object, props, scriptContext); + } + else + { + return DefinePropertiesHelperForGenericObjects(object, props, scriptContext); + } +} - PropertyId propId; - PropertyRecord const * propertyRecord; - JavascriptString* propertyName = nullptr; +Var JavascriptObject::DefinePropertiesHelperForGenericObjects(RecyclableObject *object, RecyclableObject* props, ScriptContext *scriptContext) +{ + size_t descSize = 16; + size_t descCount = 0; + struct DescriptorMap + { + Field(PropertyRecord const *) propRecord; + Field(PropertyDescriptor) descriptor; + Field(Var) originalVar; + }; - //enumerate through each property of properties and fetch the property descriptor - while ((propertyName = enumerator.MoveAndGetNext(propId)) != NULL) - { - if (propId == Constants::NoProperty) //try current property id query first - { - scriptContext->GetOrAddPropertyRecord(propertyName, &propertyRecord); - propId = propertyRecord->GetPropertyId(); - } - else - { - propertyName->GetPropertyRecord(&propertyRecord); - } + JavascriptStaticEnumerator enumerator; + if (!props->GetEnumerator(&enumerator, EnumeratorFlags::EnumSymbols, scriptContext)) + { + return object; + } - if (descCount == descSize) - { - //reallocate - consider linked list of DescriptorMap if the descSize is too high - descSize = AllocSizeMath::Mul(descCount, 2); - __analysis_assume(descSize == descCount * 2); - DescriptorMap *temp = RecyclerNewArray(scriptContext->GetRecycler(), DescriptorMap, descSize); + ENTER_PINNED_SCOPE(DescriptorMap, descriptors); + descriptors = RecyclerNewArray(scriptContext->GetRecycler(), DescriptorMap, descSize); - for (size_t i = 0; i < descCount; i++) - { - temp[i] = descriptors[i]; - } - descriptors = temp; - } + PropertyId propId; + PropertyRecord const * propertyRecord; + JavascriptString* propertyName = nullptr; - Var tempVar = JavascriptOperators::GetPropertyNoCache(props, propId, scriptContext); + //enumerate through each property of properties and fetch the property descriptor + while ((propertyName = enumerator.MoveAndGetNext(propId)) != NULL) + { + if (propId == Constants::NoProperty) //try current property id query first + { + scriptContext->GetOrAddPropertyRecord(propertyName, &propertyRecord); + propId = propertyRecord->GetPropertyId(); + } + else + { + propertyName->GetPropertyRecord(&propertyRecord); + } - AnalysisAssert(descCount < descSize); - if (!JavascriptOperators::ToPropertyDescriptor(tempVar, &descriptors[descCount].descriptor, scriptContext)) - { - JavascriptError::ThrowTypeError(scriptContext, JSERR_PropertyDescriptor_Invalid, scriptContext->GetPropertyName(propId)->GetBuffer()); - } - // In proxy, we need to get back the original ToPropertDescriptor var in [[defineProperty]] trap. - descriptors[descCount].originalVar = tempVar; + if (descCount == descSize) + { + //reallocate - consider linked list of DescriptorMap if the descSize is too high + descSize = AllocSizeMath::Mul(descCount, 2); + __analysis_assume(descSize == descCount * 2); + DescriptorMap *temp = RecyclerNewArray(scriptContext->GetRecycler(), DescriptorMap, descSize); - if (CONFIG_FLAG(UseFullName)) + for (size_t i = 0; i < descCount; i++) { - ModifyGetterSetterFuncName(propertyRecord, descriptors[descCount].descriptor, scriptContext); + temp[i] = descriptors[i]; } + descriptors = temp; + } - descriptors[descCount].propRecord = propertyRecord; + Var tempVar = JavascriptOperators::GetPropertyNoCache(props, propId, scriptContext); - descCount++; + AnalysisAssert(descCount < descSize); + if (!JavascriptOperators::ToPropertyDescriptor(tempVar, &descriptors[descCount].descriptor, scriptContext)) + { + JavascriptError::ThrowTypeError(scriptContext, JSERR_PropertyDescriptor_Invalid, scriptContext->GetPropertyName(propId)->GetBuffer()); } + // In proxy, we need to get back the original ToPropertDescriptor var in [[defineProperty]] trap. + descriptors[descCount].originalVar = tempVar; - //Once all the property descriptors are in place set each property descriptor to the object - for (size_t i = 0; i < descCount; i++) + if (CONFIG_FLAG(UseFullName)) { - DefineOwnPropertyHelper(object, descriptors[i].propRecord->GetPropertyId(), descriptors[i].descriptor, scriptContext); + ModifyGetterSetterFuncName(propertyRecord, descriptors[descCount].descriptor, scriptContext); } - LEAVE_PINNED_SCOPE(); + descriptors[descCount].propRecord = propertyRecord; - return object; + descCount++; } - //ES5 15.2.3.7 - Var JavascriptObject::DefinePropertiesHelperForProxyObjects(RecyclableObject *object, RecyclableObject* props, ScriptContext *scriptContext) + //Once all the property descriptors are in place set each property descriptor to the object + for (size_t i = 0; i < descCount; i++) { - Assert(JavascriptProxy::Is(props)); + DefineOwnPropertyHelper(object, descriptors[i].propRecord->GetPropertyId(), descriptors[i].descriptor, scriptContext); + } - //1. If Type(O) is not Object throw a TypeError exception. - //2. Let props be ToObject(Properties). + LEAVE_PINNED_SCOPE(); - size_t descCount = 0; - struct DescriptorMap - { - Field(PropertyRecord const *) propRecord; - Field(PropertyDescriptor) descriptor; - }; - - //3. Let keys be props.[[OwnPropertyKeys]](). - //4. ReturnIfAbrupt(keys). - //5. Let descriptors be an empty List. - JavascriptArray* keys = JavascriptOperators::GetOwnEnumerablePropertyNamesSymbols(props, scriptContext); - uint32 length = keys->GetLength(); - - ENTER_PINNED_SCOPE(DescriptorMap, descriptors); - descriptors = RecyclerNewArray(scriptContext->GetRecycler(), DescriptorMap, length); - - //6. Repeat for each element nextKey of keys in List order, - // 1. Let propDesc be props.[[GetOwnProperty]](nextKey). - // 2. ReturnIfAbrupt(propDesc). - // 3. If propDesc is not undefined and propDesc.[[Enumerable]] is true, then - // 1. Let descObj be Get(props, nextKey). - // 2. ReturnIfAbrupt(descObj). - // 3. Let desc be ToPropertyDescriptor(descObj). - // 4. ReturnIfAbrupt(desc). - // 5. Append the pair(a two element List) consisting of nextKey and desc to the end of descriptors. - Var nextKey; - - const PropertyRecord* propertyRecord = nullptr; - PropertyId propertyId; - Var descObj; - for (uint32 j = 0; j < length; j++) + return object; +} + +//ES5 15.2.3.7 +Var JavascriptObject::DefinePropertiesHelperForProxyObjects(RecyclableObject *object, RecyclableObject* props, ScriptContext *scriptContext) +{ + Assert(VarIs(props)); + + //1. If Type(O) is not Object throw a TypeError exception. + //2. Let props be ToObject(Properties). + + size_t descCount = 0; + struct DescriptorMap + { + Field(PropertyRecord const *) propRecord; + Field(PropertyDescriptor) descriptor; + }; + + //3. Let keys be props.[[OwnPropertyKeys]](). + //4. ReturnIfAbrupt(keys). + //5. Let descriptors be an empty List. + JavascriptArray* keys = JavascriptOperators::GetOwnEnumerablePropertyNamesSymbols(props, scriptContext); + uint32 length = keys->GetLength(); + + ENTER_PINNED_SCOPE(DescriptorMap, descriptors); + descriptors = RecyclerNewArray(scriptContext->GetRecycler(), DescriptorMap, length); + + //6. Repeat for each element nextKey of keys in List order, + // 1. Let propDesc be props.[[GetOwnProperty]](nextKey). + // 2. ReturnIfAbrupt(propDesc). + // 3. If propDesc is not undefined and propDesc.[[Enumerable]] is true, then + // 1. Let descObj be Get(props, nextKey). + // 2. ReturnIfAbrupt(descObj). + // 3. Let desc be ToPropertyDescriptor(descObj). + // 4. ReturnIfAbrupt(desc). + // 5. Append the pair(a two element List) consisting of nextKey and desc to the end of descriptors. + Var nextKey; + + const PropertyRecord* propertyRecord = nullptr; + PropertyId propertyId; + Var descObj; + for (uint32 j = 0; j < length; j++) + { + PropertyDescriptor propertyDescriptor; + nextKey = keys->DirectGetItem(j); + AssertMsg(VarIs(nextKey) || VarIs(nextKey), "Invariant check during ownKeys proxy trap should make sure we only get property key here. (symbol or string primitives)"); + JavascriptConversion::ToPropertyKey(nextKey, scriptContext, &propertyRecord, nullptr); + propertyId = propertyRecord->GetPropertyId(); + AssertMsg(propertyId != Constants::NoProperty, "DefinePropertiesHelper - OwnPropertyKeys returned a propertyId with value NoProperty."); + + if (JavascriptOperators::GetOwnPropertyDescriptor(props, propertyRecord->GetPropertyId(), scriptContext, &propertyDescriptor)) { - PropertyDescriptor propertyDescriptor; - nextKey = keys->DirectGetItem(j); - AssertMsg(JavascriptSymbol::Is(nextKey) || JavascriptString::Is(nextKey), "Invariant check during ownKeys proxy trap should make sure we only get property key here. (symbol or string primitives)"); - JavascriptConversion::ToPropertyKey(nextKey, scriptContext, &propertyRecord, nullptr); - propertyId = propertyRecord->GetPropertyId(); - AssertMsg(propertyId != Constants::NoProperty, "DefinePropertiesHelper - OwnPropertyKeys returned a propertyId with value NoProperty."); - - if (JavascriptOperators::GetOwnPropertyDescriptor(props, propertyRecord->GetPropertyId(), scriptContext, &propertyDescriptor)) + if (propertyDescriptor.IsEnumerable()) { - if (propertyDescriptor.IsEnumerable()) - { - descObj = JavascriptOperators::GetProperty(props, propertyId, scriptContext); + descObj = JavascriptOperators::GetProperty(props, propertyId, scriptContext); - if (!JavascriptOperators::ToPropertyDescriptor(descObj, &descriptors[descCount].descriptor, scriptContext)) - { - JavascriptError::ThrowTypeError(scriptContext, JSERR_PropertyDescriptor_Invalid, scriptContext->GetPropertyName(propertyId)->GetBuffer()); - } + if (!JavascriptOperators::ToPropertyDescriptor(descObj, &descriptors[descCount].descriptor, scriptContext)) + { + JavascriptError::ThrowTypeError(scriptContext, JSERR_PropertyDescriptor_Invalid, scriptContext->GetPropertyName(propertyId)->GetBuffer()); + } - if (CONFIG_FLAG(UseFullName)) - { - ModifyGetterSetterFuncName(propertyRecord, descriptors[descCount].descriptor, scriptContext); - } + if (CONFIG_FLAG(UseFullName)) + { + ModifyGetterSetterFuncName(propertyRecord, descriptors[descCount].descriptor, scriptContext); + } - descriptors[descCount].propRecord = propertyRecord; + descriptors[descCount].propRecord = propertyRecord; - descCount++; - } + descCount++; } } + } - //7. For each pair from descriptors in list order, - // 1. Let P be the first element of pair. - // 2. Let desc be the second element of pair. - // 3. Let status be DefinePropertyOrThrow(O, P, desc). - // 4. ReturnIfAbrupt(status). + //7. For each pair from descriptors in list order, + // 1. Let P be the first element of pair. + // 2. Let desc be the second element of pair. + // 3. Let status be DefinePropertyOrThrow(O, P, desc). + // 4. ReturnIfAbrupt(status). - for (size_t i = 0; i < descCount; i++) - { - DefineOwnPropertyHelper(object, descriptors[i].propRecord->GetPropertyId(), descriptors[i].descriptor, scriptContext); - } + for (size_t i = 0; i < descCount; i++) + { + DefineOwnPropertyHelper(object, descriptors[i].propRecord->GetPropertyId(), descriptors[i].descriptor, scriptContext); + } - LEAVE_PINNED_SCOPE(); + LEAVE_PINNED_SCOPE(); - //8. Return O. - return object; - } + //8. Return O. + return object; +} - Var JavascriptObject::GetPrototypeOf(RecyclableObject* obj, ScriptContext* scriptContext) - { - return obj->IsExternal() ? obj->GetConfigurablePrototype(scriptContext) : obj->GetPrototype(); - } +Var JavascriptObject::GetPrototypeOf(RecyclableObject* obj, ScriptContext* scriptContext) +{ + return obj->IsExternal() ? obj->GetConfigurablePrototype(scriptContext) : obj->GetPrototype(); +} - // - // Check if "proto" is a prototype of "object" (on its prototype chain). - // - bool JavascriptObject::IsPrototypeOf(RecyclableObject* proto, RecyclableObject* object, ScriptContext* scriptContext) +// +// Check if "proto" is a prototype of "object" (on its prototype chain). +// +bool JavascriptObject::IsPrototypeOf(RecyclableObject* proto, RecyclableObject* object, ScriptContext* scriptContext) +{ + return JavascriptOperators::MapObjectAndPrototypesUntil(object, [=](RecyclableObject* obj) { - return JavascriptOperators::MapObjectAndPrototypesUntil(object, [=](RecyclableObject* obj) - { - return obj == proto; - }); - } + return obj == proto; + }); +} - bool JavascriptObject::IsPrototypeOfStopAtProxy(RecyclableObject* proto, RecyclableObject* object, ScriptContext* scriptContext) +bool JavascriptObject::IsPrototypeOfStopAtProxy(RecyclableObject* proto, RecyclableObject* object, ScriptContext* scriptContext) +{ + return JavascriptOperators::MapObjectAndPrototypesUntil(object, [=](RecyclableObject* obj) { - return JavascriptOperators::MapObjectAndPrototypesUntil(object, [=](RecyclableObject* obj) - { - return obj == proto; - }); - } - - static const size_t ConstructNameGetSetLength = 5; // 5 = 1 ( for .) + 3 (get or set) + 1 for null) - - /*static*/ - char16 * JavascriptObject::ConstructName(const PropertyRecord * propertyRecord, const char16 * getOrSetStr, ScriptContext* scriptContext) + return obj == proto; + }); +} + +static const size_t ConstructNameGetSetLength = 5; // 5 = 1 ( for .) + 3 (get or set) + 1 for null) + +/*static*/ +char16 * JavascriptObject::ConstructName(const PropertyRecord * propertyRecord, const char16 * getOrSetStr, ScriptContext* scriptContext) +{ + Assert(propertyRecord); + Assert(scriptContext); + char16 * finalName = nullptr; + size_t propertyLength = (size_t)propertyRecord->GetLength(); + if (propertyLength > 0) { - Assert(propertyRecord); - Assert(scriptContext); - char16 * finalName = nullptr; - size_t propertyLength = (size_t)propertyRecord->GetLength(); - if (propertyLength > 0) + size_t totalChars; + if (SizeTAdd(propertyLength, ConstructNameGetSetLength, &totalChars) == S_OK) { - size_t totalChars; - if (SizeTAdd(propertyLength, ConstructNameGetSetLength, &totalChars) == S_OK) - { - finalName = RecyclerNewArrayLeafZ(scriptContext->GetRecycler(), char16, totalChars); - Assert(finalName != nullptr); - const char16* propertyName = propertyRecord->GetBuffer(); - Assert(propertyName != nullptr); - wcscpy_s(finalName, totalChars, propertyName); + finalName = RecyclerNewArrayLeafZ(scriptContext->GetRecycler(), char16, totalChars); + Assert(finalName != nullptr); + const char16* propertyName = propertyRecord->GetBuffer(); + Assert(propertyName != nullptr); + wcscpy_s(finalName, totalChars, propertyName); - Assert(getOrSetStr != nullptr); - Assert(wcslen(getOrSetStr) == 4); + Assert(getOrSetStr != nullptr); + Assert(wcslen(getOrSetStr) == 4); - wcscpy_s(finalName + propertyLength, ConstructNameGetSetLength, getOrSetStr); - } + wcscpy_s(finalName + propertyLength, ConstructNameGetSetLength, getOrSetStr); } - return finalName; } - - /*static*/ - void JavascriptObject::ModifyGetterSetterFuncName(const PropertyRecord * propertyRecord, const PropertyDescriptor& descriptor, ScriptContext* scriptContext) + return finalName; +} + +/*static*/ +void JavascriptObject::ModifyGetterSetterFuncName(const PropertyRecord * propertyRecord, const PropertyDescriptor& descriptor, ScriptContext* scriptContext) +{ + Assert(scriptContext); + Assert(propertyRecord); + if (descriptor.GetterSpecified() || descriptor.SetterSpecified()) { - Assert(scriptContext); - Assert(propertyRecord); - if (descriptor.GetterSpecified() || descriptor.SetterSpecified()) - { - charcount_t propertyLength = propertyRecord->GetLength(); + charcount_t propertyLength = propertyRecord->GetLength(); - if (descriptor.GetterSpecified() - && Js::ScriptFunction::Is(descriptor.GetGetter()) - && _wcsicmp(Js::ScriptFunction::FromVar(descriptor.GetGetter())->GetFunctionProxy()->GetDisplayName(), _u("get")) == 0) + if (descriptor.GetterSpecified() + && Js::VarIs(descriptor.GetGetter()) + && _wcsicmp(Js::VarTo(descriptor.GetGetter())->GetFunctionProxy()->GetDisplayName(), _u("get")) == 0) + { + // modify to name.get + const char16* finalName = ConstructName(propertyRecord, _u(".get"), scriptContext); + if (finalName != nullptr) { - // modify to name.get - const char16* finalName = ConstructName(propertyRecord, _u(".get"), scriptContext); - if (finalName != nullptr) - { - FunctionProxy::SetDisplayNameFlags flags = (FunctionProxy::SetDisplayNameFlags) (FunctionProxy::SetDisplayNameFlagsDontCopy | FunctionProxy::SetDisplayNameFlagsRecyclerAllocated); + FunctionProxy::SetDisplayNameFlags flags = (FunctionProxy::SetDisplayNameFlags) (FunctionProxy::SetDisplayNameFlagsDontCopy | FunctionProxy::SetDisplayNameFlagsRecyclerAllocated); - Js::ScriptFunction::FromVar(descriptor.GetGetter())->GetFunctionProxy()->SetDisplayName(finalName, - propertyLength + 4 /*".get"*/, propertyLength + 1, flags); - } + Js::VarTo(descriptor.GetGetter())->GetFunctionProxy()->SetDisplayName(finalName, + propertyLength + 4 /*".get"*/, propertyLength + 1, flags); } + } - if (descriptor.SetterSpecified() - && Js::ScriptFunction::Is(descriptor.GetSetter()) - && _wcsicmp(Js::ScriptFunction::FromVar(descriptor.GetSetter())->GetFunctionProxy()->GetDisplayName(), _u("set")) == 0) + if (descriptor.SetterSpecified() + && Js::VarIs(descriptor.GetSetter()) + && _wcsicmp(Js::VarTo(descriptor.GetSetter())->GetFunctionProxy()->GetDisplayName(), _u("set")) == 0) + { + // modify to name.set + const char16* finalName = ConstructName(propertyRecord, _u(".set"), scriptContext); + if (finalName != nullptr) { - // modify to name.set - const char16* finalName = ConstructName(propertyRecord, _u(".set"), scriptContext); - if (finalName != nullptr) - { - FunctionProxy::SetDisplayNameFlags flags = (FunctionProxy::SetDisplayNameFlags) (FunctionProxy::SetDisplayNameFlagsDontCopy | FunctionProxy::SetDisplayNameFlagsRecyclerAllocated); + FunctionProxy::SetDisplayNameFlags flags = (FunctionProxy::SetDisplayNameFlags) (FunctionProxy::SetDisplayNameFlagsDontCopy | FunctionProxy::SetDisplayNameFlagsRecyclerAllocated); - Js::ScriptFunction::FromVar(descriptor.GetSetter())->GetFunctionProxy()->SetDisplayName(finalName, - propertyLength + 4 /*".set"*/, propertyLength + 1, flags); - } + Js::VarTo(descriptor.GetSetter())->GetFunctionProxy()->SetDisplayName(finalName, + propertyLength + 4 /*".set"*/, propertyLength + 1, flags); } } } +} - BOOL JavascriptObject::DefineOwnPropertyHelper(RecyclableObject* obj, PropertyId propId, const PropertyDescriptor& descriptor, ScriptContext* scriptContext, bool throwOnError /* = true*/) - { - BOOL returnValue; - obj->ThrowIfCannotDefineProperty(propId, descriptor); +BOOL JavascriptObject::DefineOwnPropertyHelper(RecyclableObject* obj, PropertyId propId, const PropertyDescriptor& descriptor, ScriptContext* scriptContext, bool throwOnError /* = true*/) +{ + BOOL returnValue; + obj->ThrowIfCannotDefineProperty(propId, descriptor); - const Type* oldType = obj->GetType(); - obj->ClearWritableDataOnlyDetectionBit(); + const Type* oldType = obj->GetType(); + obj->ClearWritableDataOnlyDetectionBit(); - // HostDispatch: it doesn't support changing property attributes and default attributes are not per ES5, - // so there is no benefit in using ES5 DefineOwnPropertyDescriptor for it, use old implementation. - if (TypeIds_HostDispatch != obj->GetTypeId()) + // HostDispatch: it doesn't support changing property attributes and default attributes are not per ES5, + // so there is no benefit in using ES5 DefineOwnPropertyDescriptor for it, use old implementation. + if (TypeIds_HostDispatch != obj->GetTypeId()) + { + // for Array Exotic Objects + if (DynamicObject::IsAnyArray(obj)) { - if (DynamicObject::IsAnyArray(obj)) - { - returnValue = JavascriptOperators::DefineOwnPropertyForArray( - JavascriptArray::FromAnyArray(obj), propId, descriptor, throwOnError, scriptContext); - } - else - { - returnValue = JavascriptOperators::DefineOwnPropertyDescriptor(obj, propId, descriptor, throwOnError, scriptContext); - if (propId == PropertyIds::__proto__) - { - scriptContext->GetLibrary()->GetObjectPrototypeObject()->PostDefineOwnProperty__proto__(obj); - } - } + returnValue = JavascriptOperators::DefineOwnPropertyForArray( + JavascriptArray::FromAnyArray(obj), propId, descriptor, throwOnError, scriptContext); } - else + // for Integer Indexed Exotic Objects + else if (DynamicObject::IsAnyTypedArray(obj)) { - returnValue = JavascriptOperators::SetPropertyDescriptor(obj, propId, descriptor); + returnValue = JavascriptOperators::DefineOwnPropertyForTypedArray( + VarTo(obj), propId, descriptor, throwOnError, scriptContext); } - - if (propId == PropertyIds::_symbolSpecies && obj == scriptContext->GetLibrary()->GetArrayConstructor()) + // TODO: implement DefineOwnProperty for other object built-in exotic types. + else { - scriptContext->GetLibrary()->SetArrayObjectHasUserDefinedSpecies(true); + returnValue = JavascriptOperators::DefineOwnPropertyDescriptor(obj, propId, descriptor, throwOnError, scriptContext, Js::PropertyOperation_StrictMode); + if (propId == PropertyIds::__proto__) + { + scriptContext->GetLibrary()->GetObjectPrototypeObject()->PostDefineOwnProperty__proto__(obj); + } } + } + else + { + returnValue = JavascriptOperators::SetPropertyDescriptor(obj, propId, descriptor); + } + + if (propId == PropertyIds::_symbolSpecies && obj == scriptContext->GetLibrary()->GetArrayConstructor()) + { + scriptContext->GetLibrary()->SetArrayObjectHasUserDefinedSpecies(true); + } - if (obj->IsWritableDataOnlyDetectionBitSet()) + if (obj->IsWritableDataOnlyDetectionBitSet()) + { + if (obj->GetType() == oldType) { - if (obj->GetType() == oldType) - { - // Also, if the object's type has not changed, we need to ensure that - // the cached property string for this property, if any, does not - // specify this object's type. - scriptContext->InvalidatePropertyStringAndSymbolCaches(propId, obj->GetType()); - } + // Also, if the object's type has not changed, we need to ensure that + // the cached property string for this property, if any, does not + // specify this object's type. + scriptContext->InvalidatePropertyStringAndSymbolCaches(propId, obj->GetType()); } + } - if (descriptor.IsAccessorDescriptor()) + if (descriptor.IsAccessorDescriptor()) + { + scriptContext->optimizationOverrides.SetSideEffects(Js::SideEffects_Accessor); + } + return returnValue; +} + +void JavascriptObject::SpreadObjectLiteral(Var source, Var to, ScriptContext* scriptContext) +{ + RecyclableObject* target = nullptr; + bool succeeded = JavascriptConversion::ToObject(to, scriptContext, &target); + AssertOrFailFast(succeeded); + CopyDataPropertiesHelper(source, target, scriptContext); +} + +void JavascriptObject::Restify(Var source, Var to, void* excludedStatic, void* excludedComputed, ScriptContext* scriptContext) +{ + RecyclableObject* target = nullptr; + bool succeeded = JavascriptConversion::ToObject(to, scriptContext, &target); + AssertOrFailFast(succeeded); + + const Js::PropertyIdArray* propIdsStatic = reinterpret_cast(excludedStatic); + const Js::PropertyIdArray* propIdsComputed = reinterpret_cast(excludedComputed); + // Create a set of the property ids for faster lookup + BVSparse excluded(scriptContext->GetRecycler()); + for (uint32 i = 0; i < propIdsStatic->count; i++) + { + PropertyId id = propIdsStatic->elements[i]; + excluded.Set(id); + } + // If these two are equal, this means there were no computed properties + // and the static array was passed in to indicate this + if (propIdsStatic != propIdsComputed) + { + for (uint32 i = 0; i < propIdsComputed->count; i++) { - scriptContext->optimizationOverrides.SetSideEffects(Js::SideEffects_Accessor); + PropertyId id = propIdsComputed->elements[i]; + excluded.Set(id); } - return returnValue; } + + CopyDataPropertiesHelper(source, target, scriptContext, &excluded); +} diff --git a/lib/Runtime/Library/JavascriptObject.h b/lib/Runtime/Library/JavascriptObject.h index 292cfc1d57f..aeb2ef02fa2 100644 --- a/lib/Runtime/Library/JavascriptObject.h +++ b/lib/Runtime/Library/JavascriptObject.h @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #pragma once @@ -21,6 +22,7 @@ namespace Js public: static FunctionInfo NewInstance; static FunctionInfo HasOwnProperty; + static FunctionInfo HasOwn; static FunctionInfo PropertyIsEnumerable; static FunctionInfo IsPrototypeOf; static FunctionInfo ToLocaleString; @@ -54,6 +56,7 @@ namespace Js static Var NewInstance(RecyclableObject* function, CallInfo callInfo, ...); static Var EntryHasOwnProperty(RecyclableObject* function, CallInfo callInfo, ...); + static Var EntryHasOwn(RecyclableObject* function, CallInfo callInfo, ...); static Var EntryPropertyIsEnumerable(RecyclableObject* function, CallInfo callInfo, ...); static Var EntryIsPrototypeOf(RecyclableObject* function, CallInfo callInfo, ...); static Var EntryToLocaleString(RecyclableObject* function, CallInfo callInfo, ...); @@ -111,11 +114,18 @@ namespace Js static bool IsPrototypeOf(RecyclableObject* proto, RecyclableObject* obj, ScriptContext* scriptContext); static bool IsPrototypeOfStopAtProxy(RecyclableObject* proto, RecyclableObject* obj, ScriptContext* scriptContext); + static void SpreadObjectLiteral(Var source, Var to, ScriptContext* scriptContext); + static void Restify(Var source, Var to, void* excludedStatic, void* excludedComputed, ScriptContext* scriptContext); + private: - template - static void AssignHelper(Var fromArg, RecyclableObject* to, ScriptContext* scriptContext); - static void AssignForGenericObjects(RecyclableObject* from, RecyclableObject* to, ScriptContext* scriptContext); - static void AssignForProxyObjects(RecyclableObject* from, RecyclableObject* to, ScriptContext* scriptContext); + template + static void CopyDataPropertiesHelper(Var source, RecyclableObject* to, ScriptContext* scriptContext, const BVSparse* excluded = nullptr); + template + static void CopyDataPropertiesForGenericObjects(RecyclableObject* from, RecyclableObject* to, const BVSparse* excluded, ScriptContext* scriptContext); + template + static void CopyDataPropertiesForProxyObjects(RecyclableObject* from, RecyclableObject* to, const BVSparse* excluded, ScriptContext* scriptContext); + + static BOOL CreateDataProperty(RecyclableObject* obj, PropertyId key, Var value, ScriptContext* scriptContext); static JavascriptArray* CreateKeysHelper(RecyclableObject* object, ScriptContext* scriptContext, BOOL enumNonEnumerable, bool includeSymbolProperties, bool includeStringProperties, bool includeSpecialProperties); static void ModifyGetterSetterFuncName(const PropertyRecord * propertyRecord, const PropertyDescriptor& descriptor, ScriptContext* scriptContext); @@ -125,5 +135,7 @@ namespace Js static Var DefinePropertiesHelperForProxyObjects(RecyclableObject* object, RecyclableObject* properties, ScriptContext* scriptContext); static Var GetToStringTagValue(RecyclableObject *thisArg, ScriptContext *scriptContext); + + }; } diff --git a/lib/Runtime/Library/JavascriptPromise.cpp b/lib/Runtime/Library/JavascriptPromise.cpp index d916170ceb5..32cdd10f06b 100644 --- a/lib/Runtime/Library/JavascriptPromise.cpp +++ b/lib/Runtime/Library/JavascriptPromise.cpp @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #include "RuntimeLibraryPch.h" @@ -47,13 +48,13 @@ namespace Js { JavascriptError::ThrowTypeError(scriptContext, JSERR_FunctionArgument_NeedFunction, _u("Promise")); } - RecyclableObject* executor = RecyclableObject::FromVar(args[1]); + RecyclableObject* executor = VarTo(args[1]); // 3. Let promise be ? OrdinaryCreateFromConstructor(NewTarget, "%PromisePrototype%", <<[[PromiseState]], [[PromiseResult]], [[PromiseFulfillReactions]], [[PromiseRejectReactions]], [[PromiseIsHandled]] >>). JavascriptPromise* promise = library->CreatePromise(); if (isCtorSuperCall) { - JavascriptOperators::OrdinaryCreateFromConstructor(RecyclableObject::FromVar(newTarget), promise, library->GetPromisePrototype(), scriptContext); + JavascriptOperators::OrdinaryCreateFromConstructor(VarTo(newTarget), promise, library->GetPromisePrototype(), scriptContext); } JavascriptPromiseResolveOrRejectFunction* resolve; @@ -117,25 +118,6 @@ namespace Js *reject = library->CreatePromiseResolveOrRejectFunction(EntryResolveOrRejectFunction, promise, true, alreadyResolvedRecord); } - bool JavascriptPromise::Is(Var aValue) - { - return Js::JavascriptOperators::GetTypeId(aValue) == TypeIds_Promise; - } - - JavascriptPromise* JavascriptPromise::FromVar(Js::Var aValue) - { - AssertOrFailFastMsg(Is(aValue), "Ensure var is actually a 'JavascriptPromise'"); - - return static_cast(aValue); - } - - JavascriptPromise* JavascriptPromise::UnsafeFromVar(Js::Var aValue) - { - AssertMsg(Is(aValue), "Ensure var is actually a 'JavascriptPromise'"); - - return static_cast(aValue); - } - BOOL JavascriptPromise::GetDiagValueString(StringBuilder* stringBuilder, ScriptContext* requestContext) { stringBuilder->AppendCppLiteral(_u("[...]")); @@ -192,7 +174,7 @@ namespace Js // We know that constructor is an object at this point - further, we even know that it is a constructor - because NewPromiseCapability // would throw otherwise. That means we can safely cast constructor into a RecyclableObject* now and avoid having to perform ToObject // as part of the Invoke operation performed inside the loop below. - RecyclableObject* constructorObject = RecyclableObject::FromVar(constructor); + RecyclableObject* constructorObject = VarTo(constructor); uint32 index = 0; JavascriptArray* values = nullptr; @@ -209,19 +191,18 @@ namespace Js { // 4. Let iterator be GetIterator(iterable). RecyclableObject* iterator = JavascriptOperators::GetIterator(iterable, scriptContext); - values = library->CreateArray(0); - JavascriptOperators::DoIteratorStepAndValue(iterator, scriptContext, [&](Var next) + Var resolveVar = JavascriptOperators::GetProperty(constructorObject, Js::PropertyIds::resolve, scriptContext); + if (!JavascriptConversion::IsCallable(resolveVar)) { - Var resolveVar = JavascriptOperators::GetProperty(constructorObject, Js::PropertyIds::resolve, scriptContext); - - if (!JavascriptConversion::IsCallable(resolveVar)) - { - JavascriptError::ThrowTypeError(scriptContext, JSERR_NeedFunction); - } + JavascriptError::ThrowTypeError(scriptContext, JSERR_NeedFunction); + } - RecyclableObject* resolveFunc = RecyclableObject::FromVar(resolveVar); + RecyclableObject* resolveFunc = VarTo(resolveVar); + values = library->CreateArray(0); + JavascriptOperators::DoIteratorStepAndValue(iterator, scriptContext, [&](Var next) + { ThreadContext * threadContext = scriptContext->GetThreadContext(); Var nextPromise = nullptr; BEGIN_SAFE_REENTRANT_CALL(threadContext) @@ -251,7 +232,7 @@ namespace Js JavascriptError::ThrowTypeError(scriptContext, JSERR_NeedFunction); } - RecyclableObject* thenFunc = RecyclableObject::FromVar(thenVar); + RecyclableObject* thenFunc = VarTo(thenVar); BEGIN_SAFE_REENTRANT_CALL(threadContext) { @@ -265,6 +246,14 @@ namespace Js index++; }); + + remainingElementsWrapper->remainingElements--; + if (remainingElementsWrapper->remainingElements == 0) + { + Assert(values != nullptr); + + TryCallResolveOrRejectHandler(promiseCapability->GetResolve(), values, scriptContext); + } } catch (const JavascriptException& err) { @@ -274,20 +263,339 @@ namespace Js if (exception != nullptr) { TryRejectWithExceptionObject(exception, promiseCapability->GetReject(), scriptContext); + } + + return promiseCapability->GetPromise(); + } + + Var JavascriptPromise::EntryAny(RecyclableObject* function, CallInfo callInfo, ...) + { + PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); + ARGUMENTS(args, callInfo); + Assert(!(callInfo.Flags & CallFlags_New)); + + ScriptContext* scriptContext = function->GetScriptContext(); + + AUTO_TAG_NATIVE_LIBRARY_ENTRY(function, callInfo, _u("Promise.any")); + + // 1. Let C be the this value. + Var C = args[0]; + + // 2. Let promiseCapability be ? NewPromiseCapability(C). + JavascriptPromiseCapability* promiseCapability = NewPromiseCapability(C, scriptContext); + RecyclableObject* constructor = UnsafeVarTo(C); + + JavascriptLibrary* library = scriptContext->GetLibrary(); + RecyclableObject* promiseResolve = nullptr; + RecyclableObject* iteratorRecord = nullptr; + try { + // 3. Let promiseResolve be GetPromiseResolve(C). + // 4. IfAbruptRejectPromise(promiseResolve, promiseCapability). + Var resolveVar = JavascriptOperators::GetProperty(constructor, Js::PropertyIds::resolve, scriptContext); + if (!JavascriptConversion::IsCallable(resolveVar)) + { + JavascriptError::ThrowTypeError(scriptContext, JSERR_NeedFunction); + } + promiseResolve = UnsafeVarTo(resolveVar); + + // 5. Let iteratorRecord be GetIterator(iterable). + // 6. IfAbruptRejectPromise(iteratorRecord, promiseCapability). + Var iterable = args.Info.Count > 1 ? args[1] : library->GetUndefined(); + iteratorRecord = JavascriptOperators::GetIterator(iterable, scriptContext); + } + catch (const JavascriptException& err) + { + JavascriptExceptionObject* exception = err.GetAndClear(); + return JavascriptPromise::CreateRejectedPromise(exception->GetThrownObject(scriptContext), scriptContext); + } + + // Abstract operation PerformPromiseAny + // 7. Let result be PerformPromiseAny(iteratorRecord, C, promiseCapability, promiseResolve). + try { + // 1. Assert: ! IsConstructor(constructor) is true. + // 2. Assert: resultCapability is a PromiseCapability Record. + // 3. Assert: ! IsCallable(promiseResolve) is true. + // 4. Let errors be a new empty List. + JavascriptArray* errors = library->CreateArray(); + + // 5. Let remainingElementsCount be a new Record { [[Value]]: 1 }. + JavascriptPromiseAllResolveElementFunctionRemainingElementsWrapper* remainingElementsWrapper = RecyclerNewStructZ(scriptContext->GetRecycler(), JavascriptPromiseAllResolveElementFunctionRemainingElementsWrapper); + remainingElementsWrapper->remainingElements = 1; + + // 6. Let index be 0. + uint32 index = 0; + + // 7. Repeat, + JavascriptOperators::DoIteratorStepAndValue(iteratorRecord, scriptContext, [&](Var nextValue) { + // a. Let next be IteratorStep(iteratorRecord). + // e. Let nextValue be IteratorValue(next). + // h. Append undefined to errors. + errors->DirectAppendItem(library->GetUndefined()); + + // i. Let nextPromise be ? Call(promiseResolve, constructor, << nextValue >> ). + ThreadContext* threadContext = scriptContext->GetThreadContext(); + Var nextPromise = nullptr; + BEGIN_SAFE_REENTRANT_CALL(threadContext); + { + nextPromise = CALL_FUNCTION(threadContext, + promiseResolve, Js::CallInfo(CallFlags_Value, 2), + constructor, + nextValue); + } + END_SAFE_REENTRANT_CALL; + + + JavascriptPromiseResolveOrRejectFunctionAlreadyResolvedWrapper* alreadyCalledWrapper = RecyclerNewStructZ(scriptContext->GetRecycler(), JavascriptPromiseResolveOrRejectFunctionAlreadyResolvedWrapper); + alreadyCalledWrapper->alreadyResolved = false; + + // j. Let steps be the algorithm steps defined in Promise.any Reject Element Functions. + // k. Let rejectElement be ! CreateBuiltinFunction(steps, << [[AlreadyCalled]], [[Index]], [[Errors]], [[Capability]], [[RemainingElements]] >> ). + // p. Set rejectElement.[[RemainingElements]] to remainingElementsCount. + Var rejectElement = library->CreatePromiseAnyRejectElementFunction(EntryAnyRejectElementFunction, index, errors, promiseCapability, remainingElementsWrapper, alreadyCalledWrapper); + + // q. Set remainingElementsCount.[[Value]] to remainingElementsCount.[[Value]] + 1. + remainingElementsWrapper->remainingElements++; + + // r. Perform ? Invoke(nextPromise, "then", << resultCapability.[[Resolve]], rejectElement >> ). + RecyclableObject* nextPromiseObject; + if (!JavascriptConversion::ToObject(nextPromise, scriptContext, &nextPromiseObject)) + { + JavascriptError::ThrowTypeError(scriptContext, JSERR_NeedObject); + } + Var thenVar = JavascriptOperators::GetProperty(nextPromiseObject, Js::PropertyIds::then, scriptContext); + if (!JavascriptConversion::IsCallable(thenVar)) + { + JavascriptError::ThrowTypeError(scriptContext, JSERR_NeedFunction); + } + + RecyclableObject* thenFunc = UnsafeVarTo(thenVar); + + BEGIN_SAFE_REENTRANT_CALL(threadContext) + { + CALL_FUNCTION(scriptContext->GetThreadContext(), + thenFunc, Js::CallInfo(CallFlags_Value, 3), + nextPromiseObject, + promiseCapability->GetResolve(), + rejectElement); + } + END_SAFE_REENTRANT_CALL; + + // s.Increase index by 1. + index++; + }); + + // 7.d. If next is false, then + // 7.d.i. Set iteratorRecord.[[Done]] to true. + // 7.d.ii. Set remainingElementsCount.[[Value]] to remainingElementsCount.[[Value]] - 1. + remainingElementsWrapper->remainingElements--; + // 7.d.iii. If remainingElementsCount.[[Value]] is 0, then + if (remainingElementsWrapper->remainingElements == 0) + { + // 7.d.iii.1 Let error be a newly created AggregateError object. + JavascriptError* pError = library->CreateAggregateError(); + JavascriptError::SetErrorsList(pError, errors, scriptContext); + JavascriptError::SetErrorMessage(pError, JSERR_PromiseAllRejected, _u(""), scriptContext); + JavascriptExceptionOperators::Throw(pError, scriptContext); + } + } + catch (const JavascriptException& err) + { + // 8. If result is an abrupt completion, then + // a. If iteratorRecord.[[Done]] is false, set result to IteratorClose(iteratorRecord, result). + // b. IfAbruptRejectPromise(result, promiseCapability). + JavascriptExceptionObject* exception = err.GetAndClear(); + TryRejectWithExceptionObject(exception, promiseCapability->GetReject(), scriptContext); + } + + return promiseCapability->GetPromise(); + } + + Var JavascriptPromise::EntryAnyRejectElementFunction(RecyclableObject* function, CallInfo callInfo, ...) + { + ScriptContext* scriptContext = function->GetScriptContext(); + PROBE_STACK(scriptContext, Js::Constants::MinStackDefault); + ARGUMENTS(args, callInfo); + Assert(!(callInfo.Flags & CallFlags_New)); + + JavascriptLibrary* library = scriptContext->GetLibrary(); + Var undefinedVar = library ->GetUndefined(); + Var x = args.Info.Count > 1 ? args[1] : undefinedVar; + + + // 1. Let F be the active function object. + JavascriptPromiseAnyRejectElementFunction* anyRejectElementFunction = VarTo(function); + + // 2. Let alreadyCalled be F. [[AlreadyCalled]]. + // 3. If alreadyCalled. [[Value]] is true, return undefined. + if (anyRejectElementFunction->IsAlreadyCalled()) + { + return undefinedVar; + } + + // 4. Set alreadyCalled.[[Value]] to true. + anyRejectElementFunction->SetAlreadyCalled(true); + + // 5. Let index be F.[[Index]]. + uint32 index = anyRejectElementFunction->GetIndex(); + + // 6. Let errors be F.[[Errors]]. + JavascriptArray* errors = anyRejectElementFunction->GetValues(); + + + // 7. Let promiseCapability be F.[[Capability]]. + JavascriptPromiseCapability* promiseCapability = anyRejectElementFunction->GetCapabilities(); + + // 9. Set errors[index] to x. + errors->DirectSetItemAt(index, x); + + // 8. Let remainingElementsCount be F.[[RemainingElements]]. + // 10. Set remainingElementsCount.[[Value]] to remainingElementsCount.[[Value]] - 1. + // 11. If remainingElementsCount.[[Value]] is 0, then + if (anyRejectElementFunction->DecrementRemainingElements() == 0) + { + // a. Let error be a newly created AggregateError object. + JavascriptError* pError = library->CreateAggregateError(); + // b. Perform ! DefinePropertyOrThrow(error, "errors", Property Descriptor { [[Configurable]]: true, [[Enumerable]]: false, [[Writable]]: true, [[Value]]: ! CreateArrayFromList(errors) }). + JavascriptError::SetErrorsList(pError, errors, scriptContext); + JavascriptError::SetErrorMessage(pError, JSERR_PromiseAllRejected, _u(""), scriptContext); + + // c. Return ? Call(promiseCapability.[[Reject]], undefined, << error >> ). + return TryCallResolveOrRejectHandler(promiseCapability->GetReject(), pError, scriptContext); + } + + return undefinedVar; + } + + Var JavascriptPromise::EntryAllSettled(RecyclableObject* function, CallInfo callInfo, ...) + { + PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); + ARGUMENTS(args, callInfo); + Assert(!(callInfo.Flags & CallFlags_New)); + + ScriptContext* scriptContext = function->GetScriptContext(); + + AUTO_TAG_NATIVE_LIBRARY_ENTRY(function, callInfo, _u("Promise.allSettled")); + + // 1. Let C be the this value. + Var constructor = args[0]; + + // 2. If Type(C) is not Object, throw a TypeError exception. + if (!JavascriptOperators::IsObject(constructor)) + { + JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedObject, _u("Promise.allSettled")); + } + + JavascriptLibrary* library = scriptContext->GetLibrary(); + Var iterable; - // We need to explicitly return here to make sure we don't resolve in case index == 0 here. - // That would happen if GetIterator or IteratorValue throws an exception in the first iteration. - return promiseCapability->GetPromise(); + if (args.Info.Count > 1) + { + iterable = args[1]; + } + else + { + iterable = library->GetUndefined(); } - remainingElementsWrapper->remainingElements--; + // 3. Let promiseCapability be NewPromiseCapability(C). + JavascriptPromiseCapability* promiseCapability = NewPromiseCapability(constructor, scriptContext); + + // We know that constructor is an object at this point - further, we even know that it is a constructor - because NewPromiseCapability + // would throw otherwise. That means we can safely cast constructor into a RecyclableObject* now and avoid having to perform ToObject + // as part of the Invoke operation performed inside the loop below. + RecyclableObject* constructorObject = VarTo(constructor); + + uint32 index = 0; + JavascriptArray* values = nullptr; + + // We can't use a simple counter for the remaining element count since each Promise.all Resolve Element Function needs to know how many + // elements are remaining when it runs and needs to update that counter for all other functions created by this call to Promise.all. + // We can't just use a static variable, either, since this element count is only used for the Promise.all Resolve Element Functions created + // by this call to Promise.all. + JavascriptPromiseAllResolveElementFunctionRemainingElementsWrapper* remainingElementsWrapper = RecyclerNewStructZ(scriptContext->GetRecycler(), JavascriptPromiseAllResolveElementFunctionRemainingElementsWrapper); + remainingElementsWrapper->remainingElements = 1; + + JavascriptExceptionObject* exception = nullptr; + try + { + // 4. Let iterator be GetIterator(iterable). + RecyclableObject* iterator = JavascriptOperators::GetIterator(iterable, scriptContext); + + // Abstract operation PerformPromiseAllSettled + Var resolveVar = JavascriptOperators::GetProperty(constructorObject, Js::PropertyIds::resolve, scriptContext); + if (!JavascriptConversion::IsCallable(resolveVar)) + { + JavascriptError::ThrowTypeError(scriptContext, JSERR_NeedFunction); + } + + RecyclableObject* resolveFunc = VarTo(resolveVar); + values = library->CreateArray(0); + + JavascriptOperators::DoIteratorStepAndValue(iterator, scriptContext, [&](Var next) + { + ThreadContext* threadContext = scriptContext->GetThreadContext(); + Var nextPromise = nullptr; + BEGIN_SAFE_REENTRANT_CALL(threadContext) + { + nextPromise = CALL_FUNCTION(threadContext, + resolveFunc, Js::CallInfo(CallFlags_Value, 2), + constructorObject, + next); + } + END_SAFE_REENTRANT_CALL + + JavascriptPromiseResolveOrRejectFunctionAlreadyResolvedWrapper* alreadyCalledWrapper = RecyclerNewStructZ(scriptContext->GetRecycler(), JavascriptPromiseResolveOrRejectFunctionAlreadyResolvedWrapper); + alreadyCalledWrapper->alreadyResolved = false; + Var resolveElement = library->CreatePromiseAllSettledResolveOrRejectElementFunction(EntryAllSettledResolveOrRejectElementFunction, index, values, promiseCapability, remainingElementsWrapper, alreadyCalledWrapper, false); + Var rejectElement = library->CreatePromiseAllSettledResolveOrRejectElementFunction(EntryAllSettledResolveOrRejectElementFunction, index, values, promiseCapability, remainingElementsWrapper, alreadyCalledWrapper, true); + + remainingElementsWrapper->remainingElements++; + + RecyclableObject* nextPromiseObject; + + if (!JavascriptConversion::ToObject(nextPromise, scriptContext, &nextPromiseObject)) + { + JavascriptError::ThrowTypeError(scriptContext, JSERR_NeedObject); + } + + Var thenVar = JavascriptOperators::GetProperty(nextPromiseObject, Js::PropertyIds::then, scriptContext); + + if (!JavascriptConversion::IsCallable(thenVar)) + { + JavascriptError::ThrowTypeError(scriptContext, JSERR_NeedFunction); + } + + RecyclableObject* thenFunc = VarTo(thenVar); + + BEGIN_SAFE_REENTRANT_CALL(threadContext) + { + CALL_FUNCTION(scriptContext->GetThreadContext(), + thenFunc, Js::CallInfo(CallFlags_Value, 3), + nextPromiseObject, + resolveElement, + rejectElement); + } + END_SAFE_REENTRANT_CALL + + index++; + }); + + remainingElementsWrapper->remainingElements--; + if (remainingElementsWrapper->remainingElements == 0) + { + Assert(values != nullptr); - // We want this call to happen outside the try statement because if it throws, we aren't supposed to reject the promise. - if (remainingElementsWrapper->remainingElements == 0) + TryCallResolveOrRejectHandler(promiseCapability->GetResolve(), values, scriptContext); + } + } + catch (const JavascriptException& err) { - Assert(values != nullptr); + exception = err.GetAndClear(); + } - TryCallResolveOrRejectHandler(promiseCapability->GetResolve(), values, scriptContext); + if (exception != nullptr) + { + TryRejectWithExceptionObject(exception, promiseCapability->GetReject(), scriptContext); } return promiseCapability->GetPromise(); @@ -330,7 +638,7 @@ namespace Js onRejected = undefinedVar; } - RecyclableObject* func = RecyclableObject::FromVar(funcVar); + RecyclableObject* func = VarTo(funcVar); BEGIN_SAFE_REENTRANT_CALL(scriptContext->GetThreadContext()) { @@ -381,7 +689,7 @@ namespace Js // We know that constructor is an object at this point - further, we even know that it is a constructor - because NewPromiseCapability // would throw otherwise. That means we can safely cast constructor into a RecyclableObject* now and avoid having to perform ToObject // as part of the Invoke operation performed inside the loop below. - RecyclableObject* constructorObject = RecyclableObject::FromVar(constructor); + RecyclableObject* constructorObject = VarTo(constructor); JavascriptExceptionObject* exception = nullptr; try @@ -389,17 +697,16 @@ namespace Js // 4. Let iterator be GetIterator(iterable). RecyclableObject* iterator = JavascriptOperators::GetIterator(iterable, scriptContext); - JavascriptOperators::DoIteratorStepAndValue(iterator, scriptContext, [&](Var next) + Var resolveVar = JavascriptOperators::GetProperty(constructorObject, Js::PropertyIds::resolve, scriptContext); + if (!JavascriptConversion::IsCallable(resolveVar)) { - Var resolveVar = JavascriptOperators::GetProperty(constructorObject, Js::PropertyIds::resolve, scriptContext); - - if (!JavascriptConversion::IsCallable(resolveVar)) - { - JavascriptError::ThrowTypeError(scriptContext, JSERR_NeedFunction); - } + JavascriptError::ThrowTypeError(scriptContext, JSERR_NeedFunction); + } - RecyclableObject* resolveFunc = RecyclableObject::FromVar(resolveVar); + RecyclableObject* resolveFunc = VarTo(resolveVar); + JavascriptOperators::DoIteratorStepAndValue(iterator, scriptContext, [&](Var next) + { ThreadContext * threadContext = scriptContext->GetThreadContext(); Var nextPromise = nullptr; BEGIN_SAFE_REENTRANT_CALL(threadContext) @@ -425,7 +732,7 @@ namespace Js JavascriptError::ThrowTypeError(scriptContext, JSERR_NeedFunction); } - RecyclableObject* thenFunc = RecyclableObject::FromVar(thenVar); + RecyclableObject* thenFunc = VarTo(thenVar); BEGIN_SAFE_REENTRANT_CALL(threadContext) { @@ -520,23 +827,34 @@ namespace Js x = scriptContext->GetLibrary()->GetUndefined(); } - // 3. If IsPromise(x) is true, - if (JavascriptPromise::Is(x)) + return PromiseResolve(constructor, x, scriptContext); + } + + JavascriptPromise* JavascriptPromise::InternalPromiseResolve(Var value, ScriptContext* scriptContext) + { + Var constructor = scriptContext->GetLibrary()->GetPromiseConstructor(); + Var promise = PromiseResolve(constructor, value, scriptContext); + return UnsafeVarTo(promise); + } + + Var JavascriptPromise::PromiseResolve(Var constructor, Var value, ScriptContext* scriptContext) + { + if (VarIs(value)) { - // a. Let xConstructor be Get(x, "constructor"). - Var xConstructor = JavascriptOperators::GetProperty((RecyclableObject*)x, PropertyIds::constructor, scriptContext); + Var valueConstructor = JavascriptOperators::GetProperty( + (RecyclableObject*)value, + PropertyIds::constructor, + scriptContext); - // b. If SameValue(xConstructor, C) is true, return x. - if (JavascriptConversion::SameValue(xConstructor, constructor)) + // If `value` is a Promise or Promise subclass instance and its "constructor" + // property is `constructor`, then return the value unchanged + if (JavascriptConversion::SameValue(valueConstructor, constructor)) { - return x; + return value; } } - // 4. Let promiseCapability be NewPromiseCapability(C). - // 5. Perform ? Call(promiseCapability.[[Resolve]], undefined, << x >>). - // 6. Return promiseCapability.[[Promise]]. - return CreateResolvedPromise(x, scriptContext, constructor); + return CreateResolvedPromise(value, scriptContext, constructor); } // Promise.prototype.then as described in ES 2015 Section 25.4.5.3 @@ -550,19 +868,19 @@ namespace Js AUTO_TAG_NATIVE_LIBRARY_ENTRY(function, callInfo, _u("Promise.prototype.then")); - if (args.Info.Count < 1 || !JavascriptPromise::Is(args[0])) + if (args.Info.Count < 1 || !VarIs(args[0])) { JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedPromise, _u("Promise.prototype.then")); } JavascriptLibrary* library = scriptContext->GetLibrary(); - JavascriptPromise* promise = JavascriptPromise::FromVar(args[0]); + JavascriptPromise* promise = VarTo(args[0]); RecyclableObject* rejectionHandler; RecyclableObject* fulfillmentHandler; if (args.Info.Count > 1 && JavascriptConversion::IsCallable(args[1])) { - fulfillmentHandler = RecyclableObject::FromVar(args[1]); + fulfillmentHandler = VarTo(args[1]); } else { @@ -571,7 +889,7 @@ namespace Js if (args.Info.Count > 2 && JavascriptConversion::IsCallable(args[2])) { - rejectionHandler = RecyclableObject::FromVar(args[2]); + rejectionHandler = VarTo(args[2]); } else { @@ -599,7 +917,7 @@ namespace Js } JavascriptLibrary* library = scriptContext->GetLibrary(); - RecyclableObject* promise = RecyclableObject::UnsafeFromVar(args[0]); + RecyclableObject* promise = UnsafeVarTo(args[0]); // 3. Let C be ? SpeciesConstructor(promise, %Promise%). RecyclableObject* constructor = JavascriptOperators::SpeciesConstructor(promise, scriptContext->GetLibrary()->GetPromiseConstructor(), scriptContext); // 4. Assert IsConstructor(C) @@ -607,7 +925,7 @@ namespace Js // 5. If IsCallable(onFinally) is false // a. Let thenFinally be onFinally - // b. Let catchFinally be onFinally + // b. Let catchFinally be onFinally // 6. Else, // a. Let thenFinally be a new built-in function object as defined in ThenFinally Function. // b. Let catchFinally be a new built-in function object as defined in CatchFinally Function. @@ -622,8 +940,8 @@ namespace Js if (JavascriptConversion::IsCallable(args[1])) { //note to avoid duplicating code the ThenFinallyFunction works as both thenFinally and catchFinally using a flag - thenFinally = library->CreatePromiseThenFinallyFunction(EntryThenFinallyFunction, RecyclableObject::FromVar(args[1]), constructor, false); - catchFinally = library->CreatePromiseThenFinallyFunction(EntryThenFinallyFunction, RecyclableObject::FromVar(args[1]), constructor, true); + thenFinally = library->CreatePromiseThenFinallyFunction(EntryThenFinallyFunction, VarTo(args[1]), constructor, false); + catchFinally = library->CreatePromiseThenFinallyFunction(EntryThenFinallyFunction, VarTo(args[1]), constructor, true); } else { @@ -645,7 +963,7 @@ namespace Js { JavascriptError::ThrowTypeError(scriptContext, JSERR_FunctionArgument_NeedFunction, _u("Promise.prototype.finally")); } - RecyclableObject* func = RecyclableObject::UnsafeFromVar(funcVar); + RecyclableObject* func = UnsafeVarTo(funcVar); BEGIN_SAFE_REENTRANT_CALL(scriptContext->GetThreadContext()) { @@ -666,10 +984,10 @@ namespace Js ARGUMENTS(args, callInfo); Assert(!(callInfo.Flags & CallFlags_New)); ScriptContext* scriptContext = function->GetScriptContext(); - + JavascriptLibrary* library = scriptContext->GetLibrary(); - JavascriptPromiseThenFinallyFunction* thenFinallyFunction = JavascriptPromiseThenFinallyFunction::FromVar(function); + JavascriptPromiseThenFinallyFunction* thenFinallyFunction = VarTo(function); // 1. Let onFinally be F.[[OnFinally]] // 2. Assert: IsCallable(onFinally)=true @@ -718,7 +1036,7 @@ namespace Js JavascriptError::ThrowTypeError(scriptContext, JSERR_FunctionArgument_NeedFunction, _u("Promise.prototype.finally")); } - RecyclableObject* func = RecyclableObject::FromVar(funcVar); + RecyclableObject* func = VarTo(funcVar); BEGIN_SAFE_REENTRANT_CALL(scriptContext->GetThreadContext()) { @@ -738,11 +1056,11 @@ namespace Js ARGUMENTS(args, callInfo); Assert(!(callInfo.Flags & CallFlags_New)); - JavascriptPromiseThunkFinallyFunction* thunkFinallyFunction = JavascriptPromiseThunkFinallyFunction::FromVar(function); + JavascriptPromiseThunkFinallyFunction* thunkFinallyFunction = VarTo(function); if (!thunkFinallyFunction->GetShouldThrow()) { - return thunkFinallyFunction->GetValue(); + return thunkFinallyFunction->GetValue(); } else { @@ -771,7 +1089,7 @@ namespace Js resolution = undefinedVar; } - JavascriptPromiseResolveOrRejectFunction* resolveOrRejectFunction = JavascriptPromiseResolveOrRejectFunction::FromVar(function); + JavascriptPromiseResolveOrRejectFunction* resolveOrRejectFunction = VarTo(function); if (resolveOrRejectFunction->IsAlreadyResolved()) { @@ -813,16 +1131,16 @@ namespace Js resolution = selfResolutionError; isRejecting = true; } - else if (RecyclableObject::Is(resolution)) + else if (VarIs(resolution)) { try { - RecyclableObject* thenable = RecyclableObject::FromVar(resolution); + RecyclableObject* thenable = VarTo(resolution); Var then = JavascriptOperators::GetPropertyNoCache(thenable, Js::PropertyIds::then, scriptContext); if (JavascriptConversion::IsCallable(then)) { - JavascriptPromiseResolveThenableTaskFunction* resolveThenableTaskFunction = library->CreatePromiseResolveThenableTaskFunction(EntryResolveThenableTaskFunction, this, thenable, RecyclableObject::FromVar(then)); + JavascriptPromiseResolveThenableTaskFunction* resolveThenableTaskFunction = library->CreatePromiseResolveThenableTaskFunction(EntryResolveThenableTaskFunction, this, thenable, VarTo(then)); library->EnqueueTask(resolveThenableTaskFunction); @@ -899,7 +1217,7 @@ namespace Js } } - JavascriptPromiseCapabilitiesExecutorFunction* capabilitiesExecutorFunction = JavascriptPromiseCapabilitiesExecutorFunction::FromVar(function); + JavascriptPromiseCapabilitiesExecutorFunction* capabilitiesExecutorFunction = VarTo(function); JavascriptPromiseCapability* promiseCapability = capabilitiesExecutorFunction->GetCapability(); if (!JavascriptOperators::IsUndefined(promiseCapability->GetResolve()) || !JavascriptOperators::IsUndefined(promiseCapability->GetReject())) @@ -923,7 +1241,7 @@ namespace Js ScriptContext* scriptContext = function->GetScriptContext(); Var undefinedVar = scriptContext->GetLibrary()->GetUndefined(); - JavascriptPromiseReactionTaskFunction* reactionTaskFunction = JavascriptPromiseReactionTaskFunction::FromVar(function); + JavascriptPromiseReactionTaskFunction* reactionTaskFunction = VarTo(function); JavascriptPromiseReaction* reaction = reactionTaskFunction->GetReaction(); Var argument = reactionTaskFunction->GetArgument(); JavascriptPromiseCapability* promiseCapability = reaction->GetCapabilities(); @@ -936,13 +1254,13 @@ namespace Js bool isPromiseRejectionHandled = true; if (scriptContext->IsScriptContextInDebugMode()) { - // only necessary to determine if false if debugger is attached. This way we'll + // only necessary to determine if false if debugger is attached. This way we'll // correctly break on exceptions raised in promises that result in uhandled rejection // notifications Var promiseVar = promiseCapability->GetPromise(); - if (JavascriptPromise::Is(promiseVar)) + if (VarIs(promiseVar)) { - JavascriptPromise* promise = JavascriptPromise::FromVar(promiseVar); + JavascriptPromise* promise = VarTo(promiseVar); isPromiseRejectionHandled = !promise->WillRejectionBeUnhandled(); } } @@ -986,10 +1304,10 @@ namespace Js bool willBeUnhandled = !this->GetIsHandled(); if (!willBeUnhandled) { - // if this promise is handled, then we need to do a depth-first search over this promise's reject - // reactions. If we find a reaction that + // if this promise is handled, then we need to do a depth-first search over this promise's reject + // reactions. If we find a reaction that // - associated promise is "unhandled" (ie, it's never been "then'd") - // - AND its rejection handler is our default "thrower function" + // - AND its rejection handler is our default "thrower function" // then this promise results in an unhandled rejection path. JsUtil::Stack stack(&HeapAllocator::Instance); @@ -1009,15 +1327,15 @@ namespace Js JavascriptPromiseReaction* reaction = pair.rejectReaction; Var promiseVar = reaction->GetCapabilities()->GetPromise(); - if (JavascriptPromise::Is(promiseVar)) + if (VarIs(promiseVar)) { - JavascriptPromise* p = JavascriptPromise::FromVar(promiseVar); + JavascriptPromise* p = VarTo(promiseVar); if (!p->GetIsHandled()) { RecyclableObject* handler = reaction->GetHandler(); - if (JavascriptFunction::Is(handler)) + if (VarIs(handler)) { - JavascriptFunction* func = JavascriptFunction::FromVar(handler); + JavascriptFunction* func = VarTo(handler); FunctionInfo* functionInfo = func->GetFunctionInfo(); #ifdef DEBUG @@ -1060,7 +1378,7 @@ namespace Js JavascriptError::ThrowTypeError(scriptContext, JSERR_NeedFunction); } - RecyclableObject* handlerFunc = RecyclableObject::FromVar(handler); + RecyclableObject* handlerFunc = VarTo(handler); BEGIN_SAFE_REENTRANT_CALL(scriptContext->GetThreadContext()) { @@ -1131,8 +1449,20 @@ namespace Js return NewPromiseCapability(constructor, scriptContext); }); - JavascriptPromiseReaction* resolveReaction = JavascriptPromiseReaction::New(promiseCapability, fulfillmentHandler, scriptContext); - JavascriptPromiseReaction* rejectReaction = JavascriptPromiseReaction::New(promiseCapability, rejectionHandler, scriptContext); + PerformPromiseThen(sourcePromise, promiseCapability, fulfillmentHandler, rejectionHandler, scriptContext); + + return promiseCapability->GetPromise(); + } + + void JavascriptPromise::PerformPromiseThen( + JavascriptPromise* sourcePromise, + JavascriptPromiseCapability* capability, + RecyclableObject* fulfillmentHandler, + RecyclableObject* rejectionHandler, + ScriptContext* scriptContext) + { + auto* resolveReaction = JavascriptPromiseReaction::New(capability, fulfillmentHandler, scriptContext); + auto* rejectReaction = JavascriptPromiseReaction::New(capability, rejectionHandler, scriptContext); switch (sourcePromise->GetStatus()) { @@ -1140,29 +1470,38 @@ namespace Js JavascriptPromiseReactionPair pair; pair.resolveReaction = resolveReaction; pair.rejectReaction = rejectReaction; - sourcePromise->reactions->Prepend(pair); break; + case PromiseStatusCode_HasResolution: - EnqueuePromiseReactionTask(resolveReaction, CrossSite::MarshalVar(scriptContext, sourcePromise->result), scriptContext); + EnqueuePromiseReactionTask( + resolveReaction, + CrossSite::MarshalVar(scriptContext, sourcePromise->result), + scriptContext); break; + case PromiseStatusCode_HasRejection: { if (!sourcePromise->GetIsHandled()) { - scriptContext->GetLibrary()->CallNativeHostPromiseRejectionTracker(sourcePromise, CrossSite::MarshalVar(scriptContext, sourcePromise->result), true); + scriptContext->GetLibrary()->CallNativeHostPromiseRejectionTracker( + sourcePromise, + CrossSite::MarshalVar(scriptContext, sourcePromise->result), + true); } - EnqueuePromiseReactionTask(rejectReaction, CrossSite::MarshalVar(scriptContext, sourcePromise->result), scriptContext); + EnqueuePromiseReactionTask( + rejectReaction, + CrossSite::MarshalVar(scriptContext, sourcePromise->result), + scriptContext); break; } + default: AssertMsg(false, "Promise status is in an invalid state"); break; } sourcePromise->SetIsHandled(); - - return promiseCapability->GetPromise(); } // Promise Resolve Thenable Job as described in ES 2015 Section 25.4.2.2 @@ -1175,7 +1514,7 @@ namespace Js ScriptContext* scriptContext = function->GetScriptContext(); JavascriptLibrary* library = scriptContext->GetLibrary(); - JavascriptPromiseResolveThenableTaskFunction* resolveThenableTaskFunction = JavascriptPromiseResolveThenableTaskFunction::FromVar(function); + JavascriptPromiseResolveThenableTaskFunction* resolveThenableTaskFunction = VarTo(function); JavascriptPromise* promise = resolveThenableTaskFunction->GetPromise(); RecyclableObject* thenable = resolveThenableTaskFunction->GetThenable(); RecyclableObject* thenFunction = resolveThenableTaskFunction->GetThenFunction(); @@ -1191,7 +1530,7 @@ namespace Js bool isPromiseRejectionHandled = true; if (scriptContext->IsScriptContextInDebugMode()) { - // only necessary to determine if false if debugger is attached. This way we'll + // only necessary to determine if false if debugger is attached. This way we'll // correctly break on exceptions raised in promises that result in uhandled rejections isPromiseRejectionHandled = !promise->WillRejectionBeUnhandled(); } @@ -1283,7 +1622,7 @@ namespace Js x = undefinedVar; } - JavascriptPromiseAllResolveElementFunction* allResolveElementFunction = JavascriptPromiseAllResolveElementFunction::FromVar(function); + JavascriptPromiseAllResolveElementFunction* allResolveElementFunction = VarTo(function); if (allResolveElementFunction->IsAlreadyCalled()) { @@ -1319,117 +1658,51 @@ namespace Js return undefinedVar; } - Var JavascriptPromise::EntryJavascriptPromiseAsyncSpawnExecutorFunction(RecyclableObject* function, CallInfo callInfo, ...) + Var JavascriptPromise::EntryAllSettledResolveOrRejectElementFunction(RecyclableObject* function, CallInfo callInfo, ...) { PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); ARGUMENTS(args, callInfo); + Assert(!(callInfo.Flags & CallFlags_New)); ScriptContext* scriptContext = function->GetScriptContext(); - JavascriptLibrary* library = scriptContext->GetLibrary(); - Var undefinedVar = library->GetUndefined(); - Var resolve = undefinedVar; - Var reject = undefinedVar; - - Assert(args.Info.Count == 3); - - resolve = args[1]; - reject = args[2]; - - Assert(JavascriptPromiseAsyncSpawnExecutorFunction::Is(function)); - JavascriptPromiseAsyncSpawnExecutorFunction* asyncSpawnExecutorFunction = JavascriptPromiseAsyncSpawnExecutorFunction::FromVar(function); - Var self = asyncSpawnExecutorFunction->GetTarget(); - - Var varCallArgs[] = { undefinedVar, self }; - JavascriptGenerator* gen = asyncSpawnExecutorFunction->GetGenerator(); - JavascriptPromiseAsyncSpawnStepArgumentExecutorFunction* nextFunction = library->CreatePromiseAsyncSpawnStepArgumentExecutorFunction(EntryJavascriptPromiseAsyncSpawnStepNextExecutorFunction, gen, varCallArgs); - - Assert(JavascriptConversion::IsCallable(resolve) && JavascriptConversion::IsCallable(reject)); - AsyncSpawnStep(nextFunction, gen, resolve, reject); - - return undefinedVar; - } - - Var JavascriptPromise::EntryJavascriptPromiseAsyncSpawnStepNextExecutorFunction(RecyclableObject* function, CallInfo callInfo, ...) - { - PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); - - JavascriptPromiseAsyncSpawnStepArgumentExecutorFunction* asyncSpawnStepArgumentExecutorFunction = JavascriptPromiseAsyncSpawnStepArgumentExecutorFunction::FromVar(function); - Var argument = asyncSpawnStepArgumentExecutorFunction->GetArgument(); - - JavascriptFunction* next = function->GetScriptContext()->GetLibrary()->EnsureGeneratorNextFunction(); - BEGIN_SAFE_REENTRANT_CALL(function->GetScriptContext()->GetThreadContext()) - { - return CALL_FUNCTION(function->GetScriptContext()->GetThreadContext(), next, CallInfo(CallFlags_Value, 2), asyncSpawnStepArgumentExecutorFunction->GetGenerator(), argument); - } - END_SAFE_REENTRANT_CALL - } - - Var JavascriptPromise::EntryJavascriptPromiseAsyncSpawnStepThrowExecutorFunction(RecyclableObject* function, CallInfo callInfo, ...) - { - PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); - - JavascriptPromiseAsyncSpawnStepArgumentExecutorFunction* asyncSpawnStepArgumentExecutorFunction = JavascriptPromiseAsyncSpawnStepArgumentExecutorFunction::FromVar(function); - JavascriptFunction* throw_ = function->GetScriptContext()->GetLibrary()->EnsureGeneratorThrowFunction(); - BEGIN_SAFE_REENTRANT_CALL(function->GetScriptContext()->GetThreadContext()) - { - return CALL_FUNCTION(function->GetScriptContext()->GetThreadContext(), throw_, CallInfo(CallFlags_Value, 2), asyncSpawnStepArgumentExecutorFunction->GetGenerator(), asyncSpawnStepArgumentExecutorFunction->GetArgument()); - } - END_SAFE_REENTRANT_CALL - } - - Var JavascriptPromise::EntryJavascriptPromiseAsyncSpawnCallStepExecutorFunction(RecyclableObject* function, CallInfo callInfo, ...) - { - PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); - ARGUMENTS(args, callInfo); - - ScriptContext* scriptContext = function->GetScriptContext(); - JavascriptLibrary* library = scriptContext->GetLibrary(); - Var undefinedVar = library->GetUndefined(); - - Var argument = undefinedVar; + Var undefinedVar = scriptContext->GetLibrary()->GetUndefined(); + Var x; if (args.Info.Count > 1) { - argument = args[1]; - } - - JavascriptPromiseAsyncSpawnStepArgumentExecutorFunction* asyncSpawnStepExecutorFunction = JavascriptPromiseAsyncSpawnStepArgumentExecutorFunction::FromVar(function); - JavascriptPromiseAsyncSpawnStepArgumentExecutorFunction* functionArg; - JavascriptGenerator* gen = asyncSpawnStepExecutorFunction->GetGenerator(); - Var reject = asyncSpawnStepExecutorFunction->GetReject(); - Var resolve = asyncSpawnStepExecutorFunction->GetResolve(); - - if (asyncSpawnStepExecutorFunction->GetIsReject()) - { - functionArg = library->CreatePromiseAsyncSpawnStepArgumentExecutorFunction(EntryJavascriptPromiseAsyncSpawnStepThrowExecutorFunction, gen, argument, NULL, NULL, false); + x = args[1]; } else { - functionArg = library->CreatePromiseAsyncSpawnStepArgumentExecutorFunction(EntryJavascriptPromiseAsyncSpawnStepNextExecutorFunction, gen, argument, NULL, NULL, false); + x = undefinedVar; } - AsyncSpawnStep(functionArg, gen, resolve, reject); + JavascriptPromiseAllSettledResolveOrRejectElementFunction* allSettledResolveElementFunction = VarTo(function); - return undefinedVar; - } - - void JavascriptPromise::AsyncSpawnStep(JavascriptPromiseAsyncSpawnStepArgumentExecutorFunction* nextFunction, JavascriptGenerator* gen, Var resolve, Var reject) - { - ScriptContext* scriptContext = gen->GetScriptContext(); - BEGIN_SAFE_REENTRANT_REGION(scriptContext->GetThreadContext()) + if (allSettledResolveElementFunction->IsAlreadyCalled()) + { + return undefinedVar; + } - JavascriptLibrary* library = scriptContext->GetLibrary(); - Var undefinedVar = library->GetUndefined(); + allSettledResolveElementFunction->SetAlreadyCalled(true); + bool isRejecting = allSettledResolveElementFunction->IsRejectFunction(); + uint32 index = allSettledResolveElementFunction->GetIndex(); + JavascriptArray* values = allSettledResolveElementFunction->GetValues(); + JavascriptPromiseCapability* promiseCapability = allSettledResolveElementFunction->GetCapabilities(); JavascriptExceptionObject* exception = nullptr; - Var value = nullptr; - RecyclableObject* next = nullptr; - bool done; try { - Var nextVar = CALL_FUNCTION(scriptContext->GetThreadContext(), nextFunction, CallInfo(CallFlags_Value, 1), undefinedVar); - next = RecyclableObject::FromVar(nextVar); + RecyclableObject* obj = scriptContext->GetLibrary()->CreateObject(); + Var statusString = isRejecting ? + scriptContext->GetPropertyString(PropertyIds::rejected) : + scriptContext->GetPropertyString(PropertyIds::fulfilled); + JavascriptOperators::SetProperty(obj, obj, PropertyIds::status, statusString, scriptContext); + PropertyIds valuePropId = isRejecting ? PropertyIds::reason : PropertyIds::value; + JavascriptOperators::SetProperty(obj, obj, valuePropId, x, scriptContext); + + values->SetItem(index, obj, PropertyOperation_None); } catch (const JavascriptException& err) { @@ -1438,43 +1711,15 @@ namespace Js if (exception != nullptr) { - // finished with failure, reject the promise - TryRejectWithExceptionObject(exception, reject, scriptContext); - return; - } - - Assert(next != nullptr); - done = JavascriptConversion::ToBool(JavascriptOperators::GetProperty(next, PropertyIds::done, scriptContext), scriptContext); - if (done) - { - // finished with success, resolve the promise - value = JavascriptOperators::GetProperty(next, PropertyIds::value, scriptContext); - if (!JavascriptConversion::IsCallable(resolve)) - { - JavascriptError::ThrowTypeError(scriptContext, JSERR_NeedFunction); - } - CALL_FUNCTION(scriptContext->GetThreadContext(), RecyclableObject::FromVar(resolve), CallInfo(CallFlags_Value, 2), undefinedVar, value); - - return; + return TryRejectWithExceptionObject(exception, promiseCapability->GetReject(), scriptContext); } - // not finished, chain off the yielded promise and `step` again - JavascriptPromiseAsyncSpawnStepArgumentExecutorFunction* successFunction = library->CreatePromiseAsyncSpawnStepArgumentExecutorFunction(EntryJavascriptPromiseAsyncSpawnCallStepExecutorFunction, gen, undefinedVar, resolve, reject); - JavascriptPromiseAsyncSpawnStepArgumentExecutorFunction* failFunction = library->CreatePromiseAsyncSpawnStepArgumentExecutorFunction(EntryJavascriptPromiseAsyncSpawnCallStepExecutorFunction, gen, undefinedVar, resolve, reject, true); - - JavascriptFunction* promiseResolve = library->EnsurePromiseResolveFunction(); - value = JavascriptOperators::GetProperty(next, PropertyIds::value, scriptContext); - Var promiseVar = CALL_FUNCTION(scriptContext->GetThreadContext(), promiseResolve, CallInfo(CallFlags_Value, 2), library->GetPromiseConstructor(), value); - JavascriptPromise* promise = FromVar(promiseVar); - - Var promiseThen = JavascriptOperators::GetProperty(promise, PropertyIds::then, scriptContext); - if (!JavascriptConversion::IsCallable(promiseThen)) + if (allSettledResolveElementFunction->DecrementRemainingElements() == 0) { - JavascriptError::ThrowTypeError(scriptContext, JSERR_NeedFunction); + return TryCallResolveOrRejectHandler(promiseCapability->GetResolve(), values, scriptContext); } - CALL_FUNCTION(scriptContext->GetThreadContext(), RecyclableObject::FromVar(promiseThen), CallInfo(CallFlags_Value, 3), promise, successFunction, failFunction); - END_SAFE_REENTRANT_REGION + return undefinedVar; } #if ENABLE_TTD @@ -1607,7 +1852,7 @@ namespace Js JavascriptError::ThrowTypeError(scriptContext, JSERR_NeedFunction); } - RecyclableObject* constructorFunc = RecyclableObject::FromVar(constructor); + RecyclableObject* constructorFunc = VarTo(constructor); BEGIN_SAFE_REENTRANT_CALL(scriptContext->GetThreadContext()) { @@ -1616,6 +1861,15 @@ namespace Js END_SAFE_REENTRANT_CALL } + JavascriptPromiseCapability* JavascriptPromise::UnusedPromiseCapability(ScriptContext* scriptContext) + { + // OPTIMIZE: In async functions and async generators, await resolves the operand + // and then executes PerformPromiseThen, attaching handlers that resume the coroutine. + // The promise capability provided is unused. For these operations we should be able + // to eliminate the extra promise allocation. + return NewPromiseCapability(scriptContext->GetLibrary()->GetPromiseConstructor(), scriptContext); + } + // CreatePromiseCapabilityRecord as described in ES6.0 (draft 29) Section 25.4.1.6.1 JavascriptPromiseCapability* JavascriptPromise::CreatePromiseCapabilityRecord(RecyclableObject* constructor, ScriptContext* scriptContext) { @@ -1685,12 +1939,10 @@ namespace Js : RuntimeFunction(type, functionInfo), promise(promise), isReject(isReject), alreadyResolvedWrapper(alreadyResolvedRecord) { } - bool JavascriptPromiseResolveOrRejectFunction::Is(Var var) + template <> bool VarIsImpl(RecyclableObject* obj) { - if (JavascriptFunction::Is(var)) + if (VarIs(obj)) { - JavascriptFunction* obj = JavascriptFunction::UnsafeFromVar(var); - return VirtualTableInfo::HasVirtualTable(obj) || VirtualTableInfo>::HasVirtualTable(obj); } @@ -1698,20 +1950,6 @@ namespace Js return false; } - JavascriptPromiseResolveOrRejectFunction* JavascriptPromiseResolveOrRejectFunction::FromVar(Var var) - { - AssertOrFailFast(JavascriptPromiseResolveOrRejectFunction::Is(var)); - - return static_cast(var); - } - - JavascriptPromiseResolveOrRejectFunction* JavascriptPromiseResolveOrRejectFunction::UnsafeFromVar(Var var) - { - Assert(JavascriptPromiseResolveOrRejectFunction::Is(var)); - - return static_cast(var); - } - JavascriptPromise* JavascriptPromiseResolveOrRejectFunction::GetPromise() { return this->promise; @@ -1768,247 +2006,14 @@ namespace Js } #endif - JavascriptPromiseAsyncSpawnExecutorFunction::JavascriptPromiseAsyncSpawnExecutorFunction(DynamicType* type, FunctionInfo* functionInfo, JavascriptGenerator* generator, Var target) - : RuntimeFunction(type, functionInfo), generator(generator), target(target) - { } - - bool JavascriptPromiseAsyncSpawnExecutorFunction::Is(Var var) - { - if (JavascriptFunction::Is(var)) - { - JavascriptFunction* obj = JavascriptFunction::UnsafeFromVar(var); - - return VirtualTableInfo::HasVirtualTable(obj) - || VirtualTableInfo>::HasVirtualTable(obj); - } - - return false; - } - - JavascriptPromiseAsyncSpawnExecutorFunction* JavascriptPromiseAsyncSpawnExecutorFunction::FromVar(Var var) - { - AssertOrFailFast(JavascriptPromiseAsyncSpawnExecutorFunction::Is(var)); - - return static_cast(var); - } - - JavascriptPromiseAsyncSpawnExecutorFunction* JavascriptPromiseAsyncSpawnExecutorFunction::UnsafeFromVar(Var var) - { - Assert(JavascriptPromiseAsyncSpawnExecutorFunction::Is(var)); - - return static_cast(var); - } - - - JavascriptGenerator* JavascriptPromiseAsyncSpawnExecutorFunction::GetGenerator() - { - return this->generator; - } - - Var JavascriptPromiseAsyncSpawnExecutorFunction::GetTarget() - { - return this->target; - } - -#if ENABLE_TTD - void JavascriptPromiseAsyncSpawnExecutorFunction::MarkVisitKindSpecificPtrs(TTD::SnapshotExtractor* extractor) - { - if (this->generator != nullptr) - { - extractor->MarkVisitVar(this->generator); - } - - if (this->target != nullptr) - { - extractor->MarkVisitVar(this->target); - } - } - - TTD::NSSnapObjects::SnapObjectType JavascriptPromiseAsyncSpawnExecutorFunction::GetSnapTag_TTD() const - { - return TTD::NSSnapObjects::SnapObjectType::JavascriptPromiseAsyncSpawnExecutorFunction; - } - - void JavascriptPromiseAsyncSpawnExecutorFunction::ExtractSnapObjectDataInto(TTD::NSSnapObjects::SnapObject* objData, TTD::SlabAllocator& alloc) - { - TTD::NSSnapObjects::SnapJavascriptPromiseAsyncSpawnExecutorFunctionInfo* info = alloc.SlabAllocateStruct(); - info->generator= TTD_CONVERT_VAR_TO_PTR_ID(this->generator); - info->target = TTD_CONVERT_JSVAR_TO_TTDVAR(this->target); - TTD::NSSnapObjects::StdExtractSetKindSpecificInfo(objData, info); - } -#endif - - JavascriptPromiseAsyncSpawnStepArgumentExecutorFunction::JavascriptPromiseAsyncSpawnStepArgumentExecutorFunction(DynamicType* type, FunctionInfo* functionInfo, JavascriptGenerator* generator, Var argument, Var resolve, Var reject, bool isReject) - : RuntimeFunction(type, functionInfo), generator(generator), argument(argument), resolve(resolve), reject(reject), isReject(isReject) - { } - - bool JavascriptPromiseAsyncSpawnStepArgumentExecutorFunction::Is(Var var) - { - if (JavascriptFunction::Is(var)) - { - JavascriptFunction* obj = JavascriptFunction::UnsafeFromVar(var); - - return VirtualTableInfo::HasVirtualTable(obj) - || VirtualTableInfo>::HasVirtualTable(obj); - } - - return false; - } - - JavascriptPromiseAsyncSpawnStepArgumentExecutorFunction* JavascriptPromiseAsyncSpawnStepArgumentExecutorFunction::FromVar(Var var) - { - AssertOrFailFast(JavascriptPromiseAsyncSpawnStepArgumentExecutorFunction::Is(var)); - - return static_cast(var); - } - - JavascriptPromiseAsyncSpawnStepArgumentExecutorFunction* JavascriptPromiseAsyncSpawnStepArgumentExecutorFunction::UnsafeFromVar(Var var) - { - Assert(JavascriptPromiseAsyncSpawnStepArgumentExecutorFunction::Is(var)); - - return static_cast(var); - } - - JavascriptGenerator* JavascriptPromiseAsyncSpawnStepArgumentExecutorFunction::GetGenerator() - { - return this->generator; - } - - Var JavascriptPromiseAsyncSpawnStepArgumentExecutorFunction::GetResolve() - { - return this->resolve; - } - - Var JavascriptPromiseAsyncSpawnStepArgumentExecutorFunction::GetReject() - { - return this->reject; - } - - bool JavascriptPromiseAsyncSpawnStepArgumentExecutorFunction::GetIsReject() - { - return this->isReject; - } - - Var JavascriptPromiseAsyncSpawnStepArgumentExecutorFunction::GetArgument() - { - return this->argument; - } - -#if ENABLE_TTD - void JavascriptPromiseAsyncSpawnStepArgumentExecutorFunction::MarkVisitKindSpecificPtrs(TTD::SnapshotExtractor* extractor) - { - if (this->generator != nullptr) - { - extractor->MarkVisitVar(this->generator); - } - - if (this->reject != nullptr) - { - extractor->MarkVisitVar(this->reject); - } - - if (this->resolve != nullptr) - { - extractor->MarkVisitVar(this->resolve); - } - - if (this->argument != nullptr) - { - extractor->MarkVisitVar(this->argument); - } - } - - TTD::NSSnapObjects::SnapObjectType JavascriptPromiseAsyncSpawnStepArgumentExecutorFunction::GetSnapTag_TTD() const - { - return TTD::NSSnapObjects::SnapObjectType::JavascriptPromiseAsyncSpawnStepArgumentExecutorFunction; - } - - void JavascriptPromiseAsyncSpawnStepArgumentExecutorFunction::ExtractSnapObjectDataInto(TTD::NSSnapObjects::SnapObject* objData, TTD::SlabAllocator& alloc) - { - TTD::NSSnapObjects::SnapJavascriptPromiseAsyncSpawnStepArgumentExecutorFunctionInfo* info = alloc.SlabAllocateStruct(); - info->generator = TTD_CONVERT_VAR_TO_PTR_ID(this->generator); - info->reject = this->reject; - info->resolve = this->resolve; - info->argument = this->argument; - info->isReject = this->isReject; - - info->entryPoint = 0; - JavascriptMethod entryPoint = this->GetFunctionInfo()->GetOriginalEntryPoint(); - if (entryPoint == JavascriptPromise::EntryJavascriptPromiseAsyncSpawnStepNextExecutorFunction) - { - info->entryPoint = 1; - } - else if (entryPoint == JavascriptPromise::EntryJavascriptPromiseAsyncSpawnStepThrowExecutorFunction) - { - info->entryPoint = 2; - } - else if (entryPoint == JavascriptPromise::EntryJavascriptPromiseAsyncSpawnCallStepExecutorFunction) - { - info->entryPoint = 3; - } - else - { - TTDAssert(false, "Unexpected entrypoint found JavascriptPromiseAsyncSpawnStepArgumentExecutorFunction"); - } - - const uint32 maxDeps = 4; - uint32 depCount = 0; - TTD_PTR_ID* depArray = alloc.SlabReserveArraySpace(maxDeps); - if (this->reject != nullptr && TTD::JsSupport::IsVarComplexKind(this->reject)) - { - depArray[depCount] = TTD_CONVERT_VAR_TO_PTR_ID(this->reject); - depCount++; - } - - if (this->resolve != nullptr && TTD::JsSupport::IsVarComplexKind(this->resolve)) - { - depArray[depCount] = TTD_CONVERT_VAR_TO_PTR_ID(this->resolve); - depCount++; - } - - if (this->argument != nullptr && TTD::JsSupport::IsVarComplexKind(this->argument)) - { - depArray[depCount] = TTD_CONVERT_VAR_TO_PTR_ID(this->argument); - depCount++; - } - - if (this->generator != nullptr) - { - depArray[depCount] = TTD_CONVERT_VAR_TO_PTR_ID(this->generator); - depCount++; - } - - if (depCount > 0) - { - alloc.SlabCommitArraySpace(depCount, maxDeps); - } - else - { - alloc.SlabAbortArraySpace(maxDeps); - } - - if (depCount == 0) - { - TTD::NSSnapObjects::StdExtractSetKindSpecificInfo(objData, info); - } - else - { - TTDAssert(depArray != nullptr, "depArray should be non-null if depCount is > 0"); - TTD::NSSnapObjects::StdExtractSetKindSpecificInfo(objData, info, alloc, depCount, depArray); - } - } -#endif - JavascriptPromiseCapabilitiesExecutorFunction::JavascriptPromiseCapabilitiesExecutorFunction(DynamicType* type, FunctionInfo* functionInfo, JavascriptPromiseCapability* capability) : RuntimeFunction(type, functionInfo), capability(capability) { } - bool JavascriptPromiseCapabilitiesExecutorFunction::Is(Var var) + template <> bool VarIsImpl(RecyclableObject* obj) { - if (JavascriptFunction::Is(var)) + if (VarIs(obj)) { - JavascriptFunction* obj = JavascriptFunction::UnsafeFromVar(var); - return VirtualTableInfo::HasVirtualTable(obj) || VirtualTableInfo>::HasVirtualTable(obj); } @@ -2016,20 +2021,6 @@ namespace Js return false; } - JavascriptPromiseCapabilitiesExecutorFunction* JavascriptPromiseCapabilitiesExecutorFunction::FromVar(Var var) - { - AssertOrFailFast(JavascriptPromiseCapabilitiesExecutorFunction::Is(var)); - - return static_cast(var); - } - - JavascriptPromiseCapabilitiesExecutorFunction* JavascriptPromiseCapabilitiesExecutorFunction::UnsafeFromVar(Var var) - { - Assert(JavascriptPromiseCapabilitiesExecutorFunction::Is(var)); - - return static_cast(var); - } - JavascriptPromiseCapability* JavascriptPromiseCapabilitiesExecutorFunction::GetCapability() { return this->capability; @@ -2161,6 +2152,17 @@ namespace Js } #endif + template <> bool VarIsImpl(RecyclableObject* obj) + { + if (VarIs(obj)) + { + return VirtualTableInfo::HasVirtualTable(obj) + || VirtualTableInfo>::HasVirtualTable(obj); + } + + return false; + } + JavascriptPromiseReaction* JavascriptPromiseReactionTaskFunction::GetReaction() { return this->reaction; @@ -2221,6 +2223,38 @@ namespace Js } #endif + template <> bool VarIsImpl(RecyclableObject* obj) + { + if (VarIs(obj)) + { + return VirtualTableInfo::HasVirtualTable(obj) + || VirtualTableInfo>::HasVirtualTable(obj); + } + + return false; + } + + template <> bool VarIsImpl(RecyclableObject* obj) + { + if (VarIs(obj)) + { + return VirtualTableInfo::HasVirtualTable(obj) + || VirtualTableInfo>::HasVirtualTable(obj); + } + return false; + } + + template <> bool VarIsImpl(RecyclableObject* obj) + { + if (VarIs(obj)) + { + return VirtualTableInfo::HasVirtualTable(obj) + || VirtualTableInfo>::HasVirtualTable(obj); + } + + return false; + } + JavascriptPromise* JavascriptPromiseResolveThenableTaskFunction::GetPromise() { return this->promise; @@ -2254,39 +2288,165 @@ namespace Js } #endif - JavascriptPromiseAllResolveElementFunction::JavascriptPromiseAllResolveElementFunction(DynamicType* type) - : RuntimeFunction(type, &Js::JavascriptPromise::EntryInfo::AllResolveElementFunction), index(0), values(nullptr), capabilities(nullptr), remainingElementsWrapper(nullptr), alreadyCalled(false) + JavascriptPromiseAllSettledResolveOrRejectElementFunction::JavascriptPromiseAllSettledResolveOrRejectElementFunction(DynamicType* type) + : JavascriptPromiseAllResolveElementFunction(type), alreadyCalledWrapper(nullptr), isRejecting(false) { } - JavascriptPromiseAllResolveElementFunction::JavascriptPromiseAllResolveElementFunction(DynamicType* type, FunctionInfo* functionInfo, uint32 index, JavascriptArray* values, JavascriptPromiseCapability* capabilities, JavascriptPromiseAllResolveElementFunctionRemainingElementsWrapper* remainingElementsWrapper) - : RuntimeFunction(type, functionInfo), index(index), values(values), capabilities(capabilities), remainingElementsWrapper(remainingElementsWrapper), alreadyCalled(false) + JavascriptPromiseAllSettledResolveOrRejectElementFunction::JavascriptPromiseAllSettledResolveOrRejectElementFunction(DynamicType* type, FunctionInfo* functionInfo, uint32 index, JavascriptArray* values, JavascriptPromiseCapability* capabilities, JavascriptPromiseAllResolveElementFunctionRemainingElementsWrapper* remainingElementsWrapper, JavascriptPromiseResolveOrRejectFunctionAlreadyResolvedWrapper* alreadyCalledWrapper, bool isRejecting) + : JavascriptPromiseAllResolveElementFunction(type, functionInfo, index, values, capabilities, remainingElementsWrapper), alreadyCalledWrapper(alreadyCalledWrapper), isRejecting(isRejecting) { } - bool JavascriptPromiseAllResolveElementFunction::Is(Var var) + bool JavascriptPromiseAllSettledResolveOrRejectElementFunction::IsAlreadyCalled() const { - if (JavascriptFunction::Is(var)) - { - JavascriptFunction* obj = JavascriptFunction::UnsafeFromVar(var); + Assert(this->alreadyCalledWrapper); - return VirtualTableInfo::HasVirtualTable(obj) - || VirtualTableInfo>::HasVirtualTable(obj); + return this->alreadyCalledWrapper->alreadyResolved; + } + + void JavascriptPromiseAllSettledResolveOrRejectElementFunction::SetAlreadyCalled(const bool is) + { + Assert(this->alreadyCalledWrapper); + + this->alreadyCalledWrapper->alreadyResolved = is; + } + + bool JavascriptPromiseAllSettledResolveOrRejectElementFunction::IsRejectFunction() + { + return this->isRejecting; + } + + template <> bool VarIsImpl(RecyclableObject* obj) + { + if (VarIs(obj)) + { + return VirtualTableInfo::HasVirtualTable(obj) + || VirtualTableInfo>::HasVirtualTable(obj); } return false; } - JavascriptPromiseAllResolveElementFunction* JavascriptPromiseAllResolveElementFunction::FromVar(Var var) +#if ENABLE_TTD + void JavascriptPromiseAllSettledResolveOrRejectElementFunction::MarkVisitKindSpecificPtrs(TTD::SnapshotExtractor* extractor) { - AssertOrFailFast(JavascriptPromiseAllResolveElementFunction::Is(var)); + TTDAssert(this->capabilities != nullptr && this->remainingElementsWrapper != nullptr && this->alreadyCalledWrapper != nullptr && this->values != nullptr, "Don't think these can be null"); - return static_cast(var); + this->capabilities->MarkVisitPtrs(extractor); + extractor->MarkVisitVar(this->values); } - JavascriptPromiseAllResolveElementFunction* JavascriptPromiseAllResolveElementFunction::UnsafeFromVar(Var var) + TTD::NSSnapObjects::SnapObjectType JavascriptPromiseAllSettledResolveOrRejectElementFunction::GetSnapTag_TTD() const { - Assert(JavascriptPromiseAllResolveElementFunction::Is(var)); + return TTD::NSSnapObjects::SnapObjectType::SnapPromiseAllSettledResolveOrRejectElementFunctionObject; + } + + void JavascriptPromiseAllSettledResolveOrRejectElementFunction::ExtractSnapObjectDataInto(TTD::NSSnapObjects::SnapObject* objData, TTD::SlabAllocator& alloc) + { + TTD::NSSnapObjects::SnapPromiseAllResolveElementFunctionInfo* sprai = alloc.SlabAllocateStruct(); + + JsUtil::List depOnList(&HeapAllocator::Instance); + this->capabilities->ExtractSnapPromiseCapabilityInto(&sprai->Capabilities, depOnList, alloc); + + sprai->Index = this->index; + sprai->RemainingElementsWrapperId = TTD_CONVERT_PROMISE_INFO_TO_PTR_ID(this->remainingElementsWrapper); + sprai->RemainingElementsValue = this->remainingElementsWrapper->remainingElements; + + sprai->Values = TTD_CONVERT_VAR_TO_PTR_ID(this->values); + depOnList.Add(sprai->Values); + + sprai->AlreadyCalled = this->alreadyCalled; + + uint32 depOnCount = depOnList.Count(); + TTD_PTR_ID* depOnArray = alloc.SlabAllocateArray(depOnCount); + + for (uint32 i = 0; i < depOnCount; ++i) + { + depOnArray[i] = depOnList.Item(i); + } + + TTD::NSSnapObjects::StdExtractSetKindSpecificInfo(objData, sprai, alloc, depOnCount, depOnArray); + } +#endif + + JavascriptPromiseAnyRejectElementFunction::JavascriptPromiseAnyRejectElementFunction(DynamicType* type) + : JavascriptPromiseAllResolveElementFunction(type), alreadyCalledWrapper(nullptr) + { } + + JavascriptPromiseAnyRejectElementFunction::JavascriptPromiseAnyRejectElementFunction(DynamicType* type, FunctionInfo* functionInfo, uint32 index, JavascriptArray* values, JavascriptPromiseCapability* capabilities, JavascriptPromiseAllResolveElementFunctionRemainingElementsWrapper* remainingElementsWrapper, JavascriptPromiseResolveOrRejectFunctionAlreadyResolvedWrapper* alreadyCalledWrapper) + : JavascriptPromiseAllResolveElementFunction(type, functionInfo, index, values, capabilities, remainingElementsWrapper), alreadyCalledWrapper(alreadyCalledWrapper) + { } + +#if ENABLE_TTD + void JavascriptPromiseAnyRejectElementFunction::MarkVisitKindSpecificPtrs(TTD::SnapshotExtractor* extractor) + { + TTDAssert(this->capabilities != nullptr && this->remainingElementsWrapper != nullptr && this->alreadyCalledWrapper != nullptr && this->values != nullptr, "Don't think these can be null"); + + this->capabilities->MarkVisitPtrs(extractor); + extractor->MarkVisitVar(this->values); + } + + TTD::NSSnapObjects::SnapObjectType JavascriptPromiseAnyRejectElementFunction::GetSnapTag_TTD() const + { + return TTD::NSSnapObjects::SnapObjectType::SnapPromiseAnyRejectElementFunctionObject; + } + + void JavascriptPromiseAnyRejectElementFunction::ExtractSnapObjectDataInto(TTD::NSSnapObjects::SnapObject* objData, TTD::SlabAllocator& alloc) + { + TTD::NSSnapObjects::SnapPromiseAllResolveElementFunctionInfo* sprai = alloc.SlabAllocateStruct(); + + JsUtil::List depOnList(&HeapAllocator::Instance); + this->capabilities->ExtractSnapPromiseCapabilityInto(&sprai->Capabilities, depOnList, alloc); + + sprai->Index = this->index; + sprai->RemainingElementsWrapperId = TTD_CONVERT_PROMISE_INFO_TO_PTR_ID(this->remainingElementsWrapper); + sprai->RemainingElementsValue = this->remainingElementsWrapper->remainingElements; - return static_cast(var); + sprai->Values = TTD_CONVERT_VAR_TO_PTR_ID(this->values); + depOnList.Add(sprai->Values); + + sprai->AlreadyCalled = this->alreadyCalled; + + uint32 depOnCount = depOnList.Count(); + TTD_PTR_ID* depOnArray = alloc.SlabAllocateArray(depOnCount); + + for (uint32 i = 0; i < depOnCount; ++i) + { + depOnArray[i] = depOnList.Item(i); + } + + TTD::NSSnapObjects::StdExtractSetKindSpecificInfo(objData, sprai, alloc, depOnCount, depOnArray); + } +#endif + + template <> bool VarIsImpl(RecyclableObject* obj) + { + if (VarIs(obj)) + { + return VirtualTableInfo::HasVirtualTable(obj) + || VirtualTableInfo>::HasVirtualTable(obj); + } + + return false; + } + + + JavascriptPromiseAllResolveElementFunction::JavascriptPromiseAllResolveElementFunction(DynamicType* type) + : RuntimeFunction(type, &Js::JavascriptPromise::EntryInfo::AllResolveElementFunction), index(0), values(nullptr), capabilities(nullptr), remainingElementsWrapper(nullptr), alreadyCalled(false) + { } + + JavascriptPromiseAllResolveElementFunction::JavascriptPromiseAllResolveElementFunction(DynamicType* type, FunctionInfo* functionInfo, uint32 index, JavascriptArray* values, JavascriptPromiseCapability* capabilities, JavascriptPromiseAllResolveElementFunctionRemainingElementsWrapper* remainingElementsWrapper) + : RuntimeFunction(type, functionInfo), index(index), values(values), capabilities(capabilities), remainingElementsWrapper(remainingElementsWrapper), alreadyCalled(false) + { } + + template <> bool VarIsImpl(RecyclableObject* obj) + { + if (VarIs(obj)) + { + return VirtualTableInfo::HasVirtualTable(obj) + || VirtualTableInfo>::HasVirtualTable(obj); + } + + return false; } JavascriptPromiseCapability* JavascriptPromiseAllResolveElementFunction::GetCapabilities() diff --git a/lib/Runtime/Library/JavascriptPromise.h b/lib/Runtime/Library/JavascriptPromise.h index b004f6f262d..d7ceebb9e93 100644 --- a/lib/Runtime/Library/JavascriptPromise.h +++ b/lib/Runtime/Library/JavascriptPromise.h @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #pragma once @@ -21,10 +22,6 @@ namespace Js JavascriptPromiseResolveOrRejectFunction(DynamicType* type); JavascriptPromiseResolveOrRejectFunction(DynamicType* type, FunctionInfo* functionInfo, JavascriptPromise* promise, bool isReject, JavascriptPromiseResolveOrRejectFunctionAlreadyResolvedWrapper* alreadyResolvedRecord); - inline static bool Is(Var var); - inline static JavascriptPromiseResolveOrRejectFunction* FromVar(Var var); - inline static JavascriptPromiseResolveOrRejectFunction* UnsafeFromVar(Var var); - JavascriptPromise* GetPromise(); bool IsRejectFunction(); bool IsAlreadyResolved(); @@ -44,69 +41,7 @@ namespace Js #endif }; - class JavascriptPromiseAsyncSpawnExecutorFunction : public RuntimeFunction - { - protected: - DEFINE_VTABLE_CTOR(JavascriptPromiseAsyncSpawnExecutorFunction, RuntimeFunction); - DEFINE_MARSHAL_OBJECT_TO_SCRIPT_CONTEXT(JavascriptPromiseAsyncSpawnExecutorFunction); - - public: - JavascriptPromiseAsyncSpawnExecutorFunction(DynamicType* type, FunctionInfo* functionInfo, JavascriptGenerator* generator, Var target); - - inline static bool Is(Var var); - inline static JavascriptPromiseAsyncSpawnExecutorFunction* FromVar(Var var); - inline static JavascriptPromiseAsyncSpawnExecutorFunction* UnsafeFromVar(Var var); - - JavascriptGenerator* GetGenerator(); - Var GetTarget(); - - private: - Field(JavascriptGenerator*) generator; - Field(Var) target; // this - -#if ENABLE_TTD - public: - virtual void MarkVisitKindSpecificPtrs(TTD::SnapshotExtractor* extractor) override; - - virtual TTD::NSSnapObjects::SnapObjectType GetSnapTag_TTD() const override; - virtual void ExtractSnapObjectDataInto(TTD::NSSnapObjects::SnapObject* objData, TTD::SlabAllocator& alloc) override; -#endif - }; - - class JavascriptPromiseAsyncSpawnStepArgumentExecutorFunction : public RuntimeFunction - { - protected: - DEFINE_VTABLE_CTOR(JavascriptPromiseAsyncSpawnStepArgumentExecutorFunction, RuntimeFunction); - DEFINE_MARSHAL_OBJECT_TO_SCRIPT_CONTEXT(JavascriptPromiseAsyncSpawnStepArgumentExecutorFunction); - - public: - JavascriptPromiseAsyncSpawnStepArgumentExecutorFunction(DynamicType* type, FunctionInfo* functionInfo, JavascriptGenerator* generator, Var argument, Var resolve = nullptr, Var reject = nullptr, bool isReject = false); - - inline static bool Is(Var var); - inline static JavascriptPromiseAsyncSpawnStepArgumentExecutorFunction* FromVar(Var var); - inline static JavascriptPromiseAsyncSpawnStepArgumentExecutorFunction* UnsafeFromVar(Var var); - - JavascriptGenerator* GetGenerator(); - Var GetReject(); - Var GetResolve(); - bool GetIsReject(); - Var GetArgument(); - - private: - Field(JavascriptGenerator*) generator; - Field(Var) reject; - Field(Var) resolve; - Field(bool) isReject; - Field(Var) argument; - -#if ENABLE_TTD - public: - virtual void MarkVisitKindSpecificPtrs(TTD::SnapshotExtractor* extractor) override; - - virtual TTD::NSSnapObjects::SnapObjectType GetSnapTag_TTD() const override; - virtual void ExtractSnapObjectDataInto(TTD::NSSnapObjects::SnapObject* objData, TTD::SlabAllocator& alloc) override; -#endif - }; + template <> bool VarIsImpl(RecyclableObject* obj); class JavascriptPromiseCapabilitiesExecutorFunction : public RuntimeFunction { @@ -117,10 +52,6 @@ namespace Js public: JavascriptPromiseCapabilitiesExecutorFunction(DynamicType* type, FunctionInfo* functionInfo, JavascriptPromiseCapability* capability); - inline static bool Is(Var var); - inline static JavascriptPromiseCapabilitiesExecutorFunction* FromVar(Var var); - inline static JavascriptPromiseCapabilitiesExecutorFunction* UnsafeFromVar(Var var); - JavascriptPromiseCapability* GetCapability(); private: @@ -135,6 +66,8 @@ namespace Js #endif }; + template <> bool VarIsImpl(RecyclableObject* obj); + class JavascriptPromiseResolveThenableTaskFunction : public RuntimeFunction { protected: @@ -146,26 +79,6 @@ namespace Js : RuntimeFunction(type, functionInfo), promise(promise), thenable(thenable), thenFunction(thenFunction) { } - inline static bool Is(Var var) - { - if (JavascriptFunction::Is(var)) - { - JavascriptFunction* obj = JavascriptFunction::UnsafeFromVar(var); - - return VirtualTableInfo::HasVirtualTable(obj) - || VirtualTableInfo>::HasVirtualTable(obj); - } - - return false; - } - - inline static JavascriptPromiseResolveThenableTaskFunction* FromVar(Var var) - { - AssertOrFailFast(JavascriptPromiseResolveThenableTaskFunction::Is(var)); - - return static_cast(var); - } - JavascriptPromise* GetPromise(); RecyclableObject* GetThenable(); RecyclableObject* GetThenFunction(); @@ -185,6 +98,8 @@ namespace Js #endif }; + template <> bool VarIsImpl(RecyclableObject* obj); + class JavascriptPromiseReactionTaskFunction : public RuntimeFunction { protected: @@ -196,26 +111,6 @@ namespace Js : RuntimeFunction(type, functionInfo), reaction(reaction), argument(argument) { } - inline static bool Is(Var var) - { - if (JavascriptFunction::Is(var)) - { - JavascriptFunction* obj = JavascriptFunction::UnsafeFromVar(var); - - return VirtualTableInfo::HasVirtualTable(obj) - || VirtualTableInfo>::HasVirtualTable(obj); - } - - return false; - } - - inline static JavascriptPromiseReactionTaskFunction* FromVar(Var var) - { - AssertOrFailFast(JavascriptPromiseReactionTaskFunction::Is(var)); - - return static_cast(var); - } - JavascriptPromiseReaction* GetReaction(); Var GetArgument(); @@ -232,6 +127,8 @@ namespace Js #endif }; + template <> bool VarIsImpl(RecyclableObject* obj); + class JavascriptPromiseThenFinallyFunction : public RuntimeFunction { protected: @@ -243,26 +140,6 @@ namespace Js : RuntimeFunction(type, functionInfo), OnFinally(OnFinally), Constructor(Constructor), shouldThrow(shouldThrow) { } - inline static bool Is(Var var) - { - if (JavascriptFunction::Is(var)) - { - JavascriptFunction* obj = JavascriptFunction::UnsafeFromVar(var); - - return VirtualTableInfo::HasVirtualTable(obj) - || VirtualTableInfo>::HasVirtualTable(obj); - } - - return false; - } - - inline static JavascriptPromiseThenFinallyFunction* FromVar(Var var) - { - AssertOrFailFast(JavascriptPromiseThenFinallyFunction::Is(var)); - - return static_cast(var); - } - inline bool GetShouldThrow() { return this->shouldThrow; } inline RecyclableObject* GetOnFinally() { return this->OnFinally; } inline RecyclableObject* GetConstructor() { return this->Constructor; } @@ -273,6 +150,8 @@ namespace Js Field(bool) shouldThrow; }; + template <> bool VarIsImpl(RecyclableObject* obj); + class JavascriptPromiseThunkFinallyFunction : public RuntimeFunction { protected: @@ -284,25 +163,6 @@ namespace Js : RuntimeFunction(type, functionInfo), value(value), shouldThrow(shouldThrow) { } - inline static bool Is(Var var) - { - if (JavascriptFunction::Is(var)) - { - JavascriptFunction* obj = JavascriptFunction::UnsafeFromVar(var); - - return VirtualTableInfo::HasVirtualTable(obj) - || VirtualTableInfo>::HasVirtualTable(obj); - } - return false; - } - - inline static JavascriptPromiseThunkFinallyFunction* FromVar(Var var) - { - AssertOrFailFast(JavascriptPromiseThunkFinallyFunction::Is(var)); - - return static_cast(var); - } - inline bool GetShouldThrow() { return this->shouldThrow; } inline Var GetValue() { return this->value; } @@ -311,6 +171,8 @@ namespace Js Field(bool) shouldThrow; }; + template <> bool VarIsImpl(RecyclableObject* obj); + struct JavascriptPromiseAllResolveElementFunctionRemainingElementsWrapper { Field(uint32) remainingElements; @@ -326,10 +188,6 @@ namespace Js JavascriptPromiseAllResolveElementFunction(DynamicType* type); JavascriptPromiseAllResolveElementFunction(DynamicType* type, FunctionInfo* functionInfo, uint32 index, JavascriptArray* values, JavascriptPromiseCapability* capabilities, JavascriptPromiseAllResolveElementFunctionRemainingElementsWrapper* remainingElementsWrapper); - inline static bool Is(Var var); - inline static JavascriptPromiseAllResolveElementFunction* FromVar(Var var); - inline static JavascriptPromiseAllResolveElementFunction* UnsafeFromVar(Var var); - JavascriptPromiseCapability* GetCapabilities(); uint32 GetIndex(); uint32 GetRemainingElements(); @@ -339,7 +197,7 @@ namespace Js uint32 DecrementRemainingElements(); - private: + protected: Field(JavascriptPromiseCapability*) capabilities; Field(uint32) index; Field(JavascriptPromiseAllResolveElementFunctionRemainingElementsWrapper*) remainingElementsWrapper; @@ -355,6 +213,38 @@ namespace Js #endif }; + template <> bool VarIsImpl(RecyclableObject* obj); + + class JavascriptPromiseAllSettledResolveOrRejectElementFunction : public JavascriptPromiseAllResolveElementFunction + { + protected: + DEFINE_VTABLE_CTOR(JavascriptPromiseAllSettledResolveOrRejectElementFunction, JavascriptPromiseAllResolveElementFunction); + DEFINE_MARSHAL_OBJECT_TO_SCRIPT_CONTEXT(JavascriptPromiseAllSettledResolveOrRejectElementFunction); + + public: + JavascriptPromiseAllSettledResolveOrRejectElementFunction(DynamicType* type); + JavascriptPromiseAllSettledResolveOrRejectElementFunction(DynamicType* type, FunctionInfo* functionInfo, uint32 index, JavascriptArray* values, JavascriptPromiseCapability* capabilities, JavascriptPromiseAllResolveElementFunctionRemainingElementsWrapper* remainingElementsWrapper, JavascriptPromiseResolveOrRejectFunctionAlreadyResolvedWrapper* alreadyCalledWrapper, bool isRejecting); + + bool IsAlreadyCalled() const; + void SetAlreadyCalled(const bool is); + + bool IsRejectFunction(); + + private: + Field(JavascriptPromiseResolveOrRejectFunctionAlreadyResolvedWrapper*) alreadyCalledWrapper; + Field(bool) isRejecting; + +#if ENABLE_TTD + public: + virtual void MarkVisitKindSpecificPtrs(TTD::SnapshotExtractor* extractor) override; + + virtual TTD::NSSnapObjects::SnapObjectType GetSnapTag_TTD() const override; + virtual void ExtractSnapObjectDataInto(TTD::NSSnapObjects::SnapObject* objData, TTD::SlabAllocator& alloc) override; +#endif + }; + + template <> bool VarIsImpl(RecyclableObject* obj); + class JavascriptPromiseCapability : FinalizableObject { private: @@ -398,7 +288,7 @@ namespace Js //Do any additional marking that is needed for a TT snapshotable object void MarkVisitPtrs(TTD::SnapshotExtractor* extractor); - //Do the extraction + //Do the extraction void ExtractSnapPromiseCapabilityInto(TTD::NSSnapValues::SnapPromiseCapabilityInfo* snapPromiseCapability, JsUtil::List& depOnList, TTD::SlabAllocator& alloc); #endif }; @@ -440,7 +330,7 @@ namespace Js //Do any additional marking that is needed for a TT snapshotable object void MarkVisitPtrs(TTD::SnapshotExtractor* extractor); - //Do the extraction + //Do the extraction void ExtractSnapPromiseReactionInto(TTD::NSSnapValues::SnapPromiseReactionInfo* snapPromiseReaction, JsUtil::List& depOnList, TTD::SlabAllocator& alloc); #endif }; @@ -472,6 +362,8 @@ namespace Js static FunctionInfo Resolve; static FunctionInfo Then; static FunctionInfo Finally; + static FunctionInfo AllSettled; + static FunctionInfo Any; static FunctionInfo Identity; static FunctionInfo Thrower; @@ -481,6 +373,8 @@ namespace Js static FunctionInfo ResolveOrRejectFunction; static FunctionInfo CapabilitiesExecutorFunction; static FunctionInfo AllResolveElementFunction; + static FunctionInfo AllSettledResolveOrRejectElementFunction; + static FunctionInfo AnyRejectElementFunction; static FunctionInfo GetterSymbolSpecies; }; @@ -496,6 +390,8 @@ namespace Js static Var EntryResolve(RecyclableObject* function, CallInfo callInfo, ...); static Var EntryThen(RecyclableObject* function, CallInfo callInfo, ...); static Var EntryFinally(RecyclableObject* function, CallInfo callInfo, ...); + static Var EntryAllSettled(RecyclableObject* function, CallInfo callInfo, ...); + static Var EntryAny(RecyclableObject* function, CallInfo callInfo, ...); static Var EntryThunkFinallyFunction(RecyclableObject* function, CallInfo callInfo, ...); static Var EntryThenFinallyFunction(RecyclableObject* function, CallInfo callInfo, ...); @@ -506,21 +402,25 @@ namespace Js static Var EntryIdentityFunction(RecyclableObject* function, CallInfo callInfo, ...); static Var EntryThrowerFunction(RecyclableObject* function, CallInfo callInfo, ...); static Var EntryAllResolveElementFunction(RecyclableObject* function, CallInfo callInfo, ...); - static Var EntryGetterSymbolSpecies(RecyclableObject* function, CallInfo callInfo, ...); + static Var EntryAllSettledResolveOrRejectElementFunction(RecyclableObject* function, CallInfo callInfo, ...); + static Var EntryAnyRejectElementFunction(RecyclableObject* function, CallInfo callInfo, ...); - static Var EntryJavascriptPromiseAsyncSpawnExecutorFunction(RecyclableObject* function, CallInfo callInfo, ...); - static Var EntryJavascriptPromiseAsyncSpawnStepNextExecutorFunction(RecyclableObject* function, CallInfo callInfo, ...); - static Var EntryJavascriptPromiseAsyncSpawnStepThrowExecutorFunction(RecyclableObject* function, CallInfo callInfo, ...); - static Var EntryJavascriptPromiseAsyncSpawnCallStepExecutorFunction(RecyclableObject* function, CallInfo callInfo, ...); - - static bool Is(Var aValue); - static JavascriptPromise* FromVar(Js::Var aValue); - static JavascriptPromise* UnsafeFromVar(Js::Var aValue); + static Var EntryGetterSymbolSpecies(RecyclableObject* function, CallInfo callInfo, ...); static Var CreateRejectedPromise(Var resolution, ScriptContext* scriptContext, Var promiseConstructor = nullptr); static Var CreateResolvedPromise(Var resolution, ScriptContext* scriptContext, Var promiseConstructor = nullptr); static Var CreatePassThroughPromise(JavascriptPromise* sourcePromise, ScriptContext* scriptContext); static Var CreateThenPromise(JavascriptPromise* sourcePromise, RecyclableObject* fulfillmentHandler, RecyclableObject* rejectionHandler, ScriptContext* scriptContext); + + static JavascriptPromise* InternalPromiseResolve(Var value, ScriptContext* scriptContext); + static Var PromiseResolve(Var constructor, Var value, ScriptContext* scriptContext); + + static void PerformPromiseThen( + JavascriptPromise* sourcePromise, + JavascriptPromiseCapability* capability, + RecyclableObject* fulfillmentHandler, + RecyclableObject* rejectionHandler, + ScriptContext* scriptContext); virtual BOOL GetDiagValueString(StringBuilder* stringBuilder, ScriptContext* requestContext) override; virtual BOOL GetDiagTypeString(StringBuilder* stringBuilder, ScriptContext* requestContext) override; @@ -529,6 +429,7 @@ namespace Js static JavascriptPromiseCapability* NewPromiseCapability(Var constructor, ScriptContext* scriptContext); + static JavascriptPromiseCapability* UnusedPromiseCapability(ScriptContext* scriptContext); static JavascriptPromiseCapability* CreatePromiseCapabilityRecord(RecyclableObject* constructor, ScriptContext* scriptContext); static Var TriggerPromiseReactions(JavascriptPromiseReactionList* reactions, bool isReject, Var resolution, ScriptContext* scriptContext); static void EnqueuePromiseReactionTask(JavascriptPromiseReaction* reaction, Var resolution, ScriptContext* scriptContext); @@ -572,7 +473,6 @@ namespace Js Field(bool) isHandled; private : - static void AsyncSpawnStep(JavascriptPromiseAsyncSpawnStepArgumentExecutorFunction* nextFunction, JavascriptGenerator* gen, Var resolve, Var reject); bool WillRejectionBeUnhandled(); #if ENABLE_TTD @@ -585,4 +485,32 @@ namespace Js static JavascriptPromise* InitializePromise_TTD(ScriptContext* scriptContext, uint32 status, bool isHandled, Var result, SList& resolveReactions, SList& rejectReactions); #endif }; + + template <> inline bool VarIsImpl(RecyclableObject* obj) + { + return Js::JavascriptOperators::GetTypeId(obj) == TypeIds_Promise; + } + + class JavascriptPromiseAnyRejectElementFunction : public JavascriptPromiseAllResolveElementFunction { + protected: + DEFINE_VTABLE_CTOR(JavascriptPromiseAnyRejectElementFunction, JavascriptPromiseAllResolveElementFunction); + DEFINE_MARSHAL_OBJECT_TO_SCRIPT_CONTEXT(JavascriptPromiseAnyRejectElementFunction); + + public: + JavascriptPromiseAnyRejectElementFunction(DynamicType* type); + JavascriptPromiseAnyRejectElementFunction(DynamicType* type, FunctionInfo* functionInfo, uint32 index, JavascriptArray* values, JavascriptPromiseCapability* capabilities, JavascriptPromiseAllResolveElementFunctionRemainingElementsWrapper* remainingElementsWrapper, JavascriptPromiseResolveOrRejectFunctionAlreadyResolvedWrapper* alreadyCalledWrapper); + + private: + Field(JavascriptPromiseResolveOrRejectFunctionAlreadyResolvedWrapper*) alreadyCalledWrapper; + +#if ENABLE_TTD + public: + virtual void MarkVisitKindSpecificPtrs(TTD::SnapshotExtractor* extractor) override; + + virtual TTD::NSSnapObjects::SnapObjectType GetSnapTag_TTD() const override; + virtual void ExtractSnapObjectDataInto(TTD::NSSnapObjects::SnapObject* objData, TTD::SlabAllocator& alloc) override; +#endif + }; + + template <> bool VarIsImpl(RecyclableObject* obj); } diff --git a/lib/Runtime/Library/JavascriptProxy.cpp b/lib/Runtime/Library/JavascriptProxy.cpp index ed817269a82..1e012837502 100644 --- a/lib/Runtime/Library/JavascriptProxy.cpp +++ b/lib/Runtime/Library/JavascriptProxy.cpp @@ -1,29 +1,25 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #include "RuntimeLibraryPch.h" namespace Js { - BOOL JavascriptProxy::Is(_In_ RecyclableObject* obj) - { - return JavascriptOperators::GetTypeId(obj) == TypeIds_Proxy; - } - - BOOL JavascriptProxy::Is(_In_ Var obj) - { - return JavascriptOperators::GetTypeId(obj) == TypeIds_Proxy; - } - bool JavascriptProxy::IsRevoked() const { - return (target == nullptr); + if (target == nullptr) + { + Assert(handler == nullptr); + return true; + } + return false; } RecyclableObject* JavascriptProxy::GetTarget() { - if (target == nullptr) + if (IsRevoked()) { JavascriptError::ThrowTypeError(GetScriptContext(), JSERR_ErrorOnRevokedProxy, _u("")); } @@ -32,7 +28,7 @@ namespace Js RecyclableObject* JavascriptProxy::GetHandler() { - if (handler == nullptr) + if (IsRevoked()) { JavascriptError::ThrowTypeError(GetScriptContext(), JSERR_ErrorOnRevokedProxy, _u("")); } @@ -78,13 +74,13 @@ namespace Js { JavascriptError::ThrowTypeError(scriptContext, JSERR_InvalidProxyArgument, _u("target")); } - target = DynamicObject::FromVar(args[1]); + target = VarTo(args[1]); #if ENABLE_COPYONACCESS_ARRAY JavascriptLibrary::CheckAndConvertCopyOnAccessNativeIntArray(target); #endif - if (JavascriptProxy::Is(target)) + if (VarIs(target)) { - if (JavascriptProxy::FromVar(target)->target == nullptr) + if (UnsafeVarTo(target)->IsRevoked()) { JavascriptError::ThrowTypeError(scriptContext, JSERR_InvalidProxyArgument, _u("target")); } @@ -94,10 +90,10 @@ namespace Js { JavascriptError::ThrowTypeError(scriptContext, JSERR_InvalidProxyArgument, _u("handler")); } - handler = DynamicObject::FromVar(args[2]); - if (JavascriptProxy::Is(handler)) + handler = VarTo(args[2]); + if (VarIs(handler)) { - if (JavascriptProxy::FromVar(handler)->handler == nullptr) + if (UnsafeVarTo(handler)->IsRevoked()) { JavascriptError::ThrowTypeError(scriptContext, JSERR_InvalidProxyArgument, _u("handler")); } @@ -110,7 +106,7 @@ namespace Js newProxy->GetDynamicType()->SetEntryPoint(JavascriptProxy::FunctionCallTrap); } return isCtorSuperCall ? - JavascriptProxy::FromVar(JavascriptOperators::OrdinaryCreateFromConstructor(RecyclableObject::FromVar(newTarget), newProxy, nullptr, scriptContext)) : + VarTo(JavascriptOperators::OrdinaryCreateFromConstructor(VarTo(newTarget), newProxy, nullptr, scriptContext)) : newProxy; } @@ -168,7 +164,7 @@ namespace Js JavascriptError::ThrowTypeError(scriptContext, JSERR_InvalidProxyArgument, _u("")); } function->SetInternalProperty(Js::InternalPropertyIds::RevocableProxy, scriptContext->GetLibrary()->GetNull(), PropertyOperationFlags::PropertyOperation_Force, nullptr); - (JavascriptProxy::FromVar(revokableProxy))->RevokeObject(); + (VarTo(revokableProxy))->RevokeObject(); return scriptContext->GetLibrary()->GetUndefined(); } @@ -235,7 +231,7 @@ namespace Js Var propertyName = GetName(requestContext, propertyId); - Assert(JavascriptString::Is(propertyName) || JavascriptSymbol::Is(propertyName)); + Assert(VarIs(propertyName) || VarIs(propertyName)); //8. Let trapResultObj be the result of calling the[[Call]] internal method of trap with handler as the this value and a new List containing target and P. //9. ReturnIfAbrupt(trapResultObj). //10. If Type(trapResultObj) is neither Object nor Undefined, then throw a TypeError exception. @@ -592,7 +588,7 @@ namespace Js } return FALSE; } - + _Check_return_ _Success_(return) BOOL JavascriptProxy::GetAccessors(PropertyId propertyId, _Outptr_result_maybenull_ Var* getter, _Outptr_result_maybenull_ Var* setter, ScriptContext* requestContext) { PropertyDescriptor result; @@ -681,11 +677,11 @@ namespace Js resultDescriptor.SetWritable(true); resultDescriptor.SetEnumerable(true); resultDescriptor.SetValue(value); - return Js::JavascriptOperators::DefineOwnPropertyDescriptor(this, propertyId, resultDescriptor, true, requestContext); + return Js::JavascriptOperators::DefineOwnPropertyDescriptor(this, propertyId, resultDescriptor, true, requestContext, flags); } else { - // ES2017 Spec'd (9.1.9.1): + // ES2017 Spec'd (9.1.9.1): // If existingDescriptor is not undefined, then // If IsAccessorDescriptor(existingDescriptor) is true, return false. // If existingDescriptor.[[Writable]] is false, return false. @@ -702,7 +698,7 @@ namespace Js proxyPropertyDescriptor.SetValue(value); proxyPropertyDescriptor.SetOriginal(nullptr); - return Js::JavascriptOperators::DefineOwnPropertyDescriptor(this, propertyId, proxyPropertyDescriptor, true, requestContext); + return Js::JavascriptOperators::DefineOwnPropertyDescriptor(this, propertyId, proxyPropertyDescriptor, true, requestContext, flags); } } @@ -831,7 +827,12 @@ namespace Js { if (flags & PropertyOperation_StrictMode) { - JavascriptError::ThrowTypeError(requestContext, JSERR_ProxyHandlerReturnedFalse, _u("deleteProperty")); + JavascriptError::ThrowTypeErrorVar( + requestContext, + JSERR_ProxyHandlerReturnedFalse, + _u("deleteProperty"), + threadContext->GetPropertyName(propertyId)->GetBuffer() + ); } return trapResult; } @@ -979,7 +980,7 @@ namespace Js // 1. Assert: Either Type(V) is Object or Type(V) is Null. // 2. Let handler be the value of the[[ProxyHandler]] internal slot of O. // 3. If handler is null, then throw a TypeError exception. - if (this->handler == nullptr) + if (IsRevoked()) { // the proxy has been revoked; TypeError. if (!threadContext->RecordImplicitException()) @@ -989,7 +990,7 @@ namespace Js struct ProxyOwnkeysEnumerator : public JavascriptEnumerator { - typedef JsUtil::BaseHashSet VisitedNamesHashSet; + typedef JsUtil::BaseHashSet, Recycler> VisitedNamesHashSet; Field(VisitedNamesHashSet*) visited; Field(JavascriptArray*) trapResult; Field(JavascriptProxy*) proxy; @@ -1025,20 +1026,21 @@ namespace Js if (var) { // if (typeof key === "string") { - if (JavascriptString::Is(var)) + if (VarIs(var)) { - JavascriptString* propertyName = JavascriptString::FromVar(var); + JavascriptString* propertyName = VarTo(var); // let desc = Reflect.getOwnPropertyDescriptor(obj, key); Js::PropertyDescriptor desc; BOOL ret = JavascriptOperators::GetOwnPropertyDescriptor(proxy, propertyName, scriptContext, &desc); + const JsUtil::CharacterBuffer propertyString(propertyName->GetString(), propertyName->GetLength()); // if (desc && !visited.has(key)) { - if (ret && !visited->Contains(propertyName->GetSz())) + if (ret && !visited->Contains(propertyString)) { - visited->Add(propertyName->GetSz()); + visited->Add(propertyString); // if (desc.enumerable) yield key; if (desc.IsEnumerable()) { - return JavascriptString::FromVar(CrossSite::MarshalVar( + return VarTo(CrossSite::MarshalVar( scriptContext, propertyName, propertyName->GetScriptContext())); } } @@ -1065,7 +1067,7 @@ namespace Js BOOL JavascriptProxy::Equals(__in Var other, __out BOOL* value, ScriptContext* requestContext) { //RecyclableObject* targetObj; - if (this->target == nullptr) + if (IsRevoked()) { // the proxy has been revoked; TypeError. JavascriptError::ThrowTypeError(requestContext, JSERR_ErrorOnRevokedProxy, _u("equal")); @@ -1086,7 +1088,7 @@ namespace Js { *value = FALSE; //RecyclableObject* targetObj; - if (this->target == nullptr) + if (IsRevoked()) { // the proxy has been revoked; TypeError. JavascriptError::ThrowTypeError(requestContext, JSERR_ErrorOnRevokedProxy, _u("strict equal")); @@ -1174,12 +1176,12 @@ namespace Js { return targetObj->IsExtensible(); } - + Var isExtensibleResult = threadContext->ExecuteImplicitCall(isExtensibleMethod, ImplicitCall_Accessor, [=]()->Js::Var { return CALL_FUNCTION(threadContext, isExtensibleMethod, CallInfo(CallFlags_Value, 2), handlerObj, targetObj); }); - + BOOL trapResult = JavascriptConversion::ToBoolean(isExtensibleResult, requestContext); BOOL targetIsExtensible = targetObj->IsExtensible(); if (trapResult != targetIsExtensible) @@ -1230,7 +1232,7 @@ namespace Js { return targetObj->PreventExtensions(); } - + //8. Let booleanTrapResult be ToBoolean(trapResult) //9. ReturnIfAbrupt(booleanTrapResult). //10. Let targetIsExtensible be the result of calling the[[IsExtensible]] internal method of target. @@ -1274,7 +1276,7 @@ namespace Js // at this time this is called from proxy only; when we extend this to other objects, we need to handle the other codepath. //7. Let keys be O.[[OwnPropertyKeys]](). //8. ReturnIfAbrupt(keys). - Assert(JavascriptProxy::Is(obj)); + Assert(VarIs(obj)); JavascriptArray* resultArray = JavascriptOperators::GetOwnPropertyKeys(obj, scriptContext); //9. Repeat for each element k of keys, @@ -1292,7 +1294,7 @@ namespace Js for (uint i = 0; i < resultArray->GetLength(); i++) { itemVar = resultArray->DirectGetItem(i); - AssertMsg(JavascriptSymbol::Is(itemVar) || JavascriptString::Is(itemVar), "Invariant check during ownKeys proxy trap should make sure we only get property key here. (symbol or string primitives)"); + AssertMsg(VarIs(itemVar) || VarIs(itemVar), "Invariant check during ownKeys proxy trap should make sure we only get property key here. (symbol or string primitives)"); JavascriptConversion::ToPropertyKey(itemVar, scriptContext, &propertyRecord, nullptr); PropertyId propertyId = propertyRecord->GetPropertyId(); if (JavascriptObject::GetOwnPropertyDescriptorHelper(obj, propertyId, scriptContext, propertyDescriptor)) @@ -1324,7 +1326,7 @@ namespace Js //5. If status is false, return false. // at this time this is called from proxy only; when we extend this to other objects, we need to handle the other codepath. - Assert(JavascriptProxy::Is(obj)); + Assert(VarIs(obj)); if (obj->PreventExtensions() == FALSE) return FALSE; @@ -1345,7 +1347,7 @@ namespace Js for (uint i = 0; i < resultArray->GetLength(); i++) { itemVar = resultArray->DirectGetItem(i); - AssertMsg(JavascriptSymbol::Is(itemVar) || JavascriptString::Is(itemVar), "Invariant check during ownKeys proxy trap should make sure we only get property key here. (symbol or string primitives)"); + AssertMsg(VarIs(itemVar) || VarIs(itemVar), "Invariant check during ownKeys proxy trap should make sure we only get property key here. (symbol or string primitives)"); JavascriptConversion::ToPropertyKey(itemVar, scriptContext, &propertyRecord, nullptr); PropertyId propertyId = propertyRecord->GetPropertyId(); JavascriptObject::DefineOwnPropertyHelper(obj, propertyId, propertyDescriptor, scriptContext); @@ -1373,7 +1375,7 @@ namespace Js for (uint i = 0; i < resultArray->GetLength(); i++) { itemVar = resultArray->DirectGetItem(i); - AssertMsg(JavascriptSymbol::Is(itemVar) || JavascriptString::Is(itemVar), "Invariant check during ownKeys proxy trap should make sure we only get property key here. (symbol or string primitives)"); + AssertMsg(VarIs(itemVar) || VarIs(itemVar), "Invariant check during ownKeys proxy trap should make sure we only get property key here. (symbol or string primitives)"); JavascriptConversion::ToPropertyKey(itemVar, scriptContext, &propertyRecord, nullptr); PropertyId propertyId = propertyRecord->GetPropertyId(); PropertyDescriptor propertyDescriptor; @@ -1482,14 +1484,14 @@ namespace Js if (nullptr == getPrototypeOfMethod || GetScriptContext()->IsHeapEnumInProgress()) { - return RecyclableObject::FromVar(JavascriptObject::GetPrototypeOf(targetObj, requestContext)); + return VarTo(JavascriptObject::GetPrototypeOf(targetObj, requestContext)); } - + Var getPrototypeOfResult = threadContext->ExecuteImplicitCall(getPrototypeOfMethod, ImplicitCall_Accessor, [=]()->Js::Var { return CALL_FUNCTION(threadContext, getPrototypeOfMethod, CallInfo(CallFlags_Value, 2), handlerObj, targetObj); }); - + TypeId prototypeTypeId = JavascriptOperators::GetTypeId(getPrototypeOfResult); if (!JavascriptOperators::IsObjectType(prototypeTypeId) && prototypeTypeId != TypeIds_Null) { @@ -1499,7 +1501,7 @@ namespace Js { JavascriptError::ThrowTypeError(requestContext, JSERR_InconsistentTrapResult, _u("getPrototypeOf")); } - return RecyclableObject::FromVar(getPrototypeOfResult); + return VarTo(getPrototypeOfResult); } RecyclableObject* JavascriptProxy::GetConfigurablePrototype(ScriptContext * requestContext) @@ -1610,7 +1612,7 @@ namespace Js Var JavascriptProxy::ToString(ScriptContext* scriptContext) { //RecyclableObject* targetObj; - if (this->handler == nullptr) + if (IsRevoked()) { ThreadContext* threadContext = GetScriptContext()->GetThreadContext(); // the proxy has been revoked; TypeError. @@ -1621,10 +1623,31 @@ namespace Js return JavascriptObject::ToStringHelper(target, scriptContext); } + // before recursively calling something on 'target' use this helper in case there is nesting of proxies. + // the proxies could be deep nested and cause SO when processed recursively. + const JavascriptProxy* JavascriptProxy::UnwrapNestedProxies(const JavascriptProxy* proxy) + { + // continue while we have a proxy that is not revoked + while (!proxy->IsRevoked()) + { + JavascriptProxy* nestedProxy = JavascriptOperators::TryFromVar(proxy->target); + if (nestedProxy == nullptr) + { + break; + } + + proxy = nestedProxy; + } + + return proxy; + } + BOOL JavascriptProxy::GetDiagTypeString(StringBuilder* stringBuilder, ScriptContext* requestContext) { + const JavascriptProxy* proxy = UnwrapNestedProxies(this); + //RecyclableObject* targetObj; - if (this->handler == nullptr) + if (proxy->IsRevoked()) { ThreadContext* threadContext = GetScriptContext()->GetThreadContext(); // the proxy has been revoked; TypeError. @@ -1632,13 +1655,13 @@ namespace Js return FALSE; JavascriptError::ThrowTypeError(GetScriptContext(), JSERR_ErrorOnRevokedProxy, _u("getTypeString")); } - return target->GetDiagTypeString(stringBuilder, requestContext); + return proxy->target->GetDiagTypeString(stringBuilder, requestContext); } RecyclableObject* JavascriptProxy::ToObject(ScriptContext * requestContext) { //RecyclableObject* targetObj; - if (this->handler == nullptr) + if (IsRevoked()) { ThreadContext* threadContext = GetScriptContext()->GetThreadContext(); // the proxy has been revoked; TypeError. @@ -1651,31 +1674,35 @@ namespace Js Var JavascriptProxy::GetTypeOfString(ScriptContext* requestContext) { - if (this->handler == nullptr) + const JavascriptProxy* proxy = UnwrapNestedProxies(this); + + if (proxy->handler == nullptr) { // even if handler is nullptr, return typeof as "object" return requestContext->GetLibrary()->GetObjectTypeDisplayString(); } // if exotic object has [[Call]] we should return "function", otherwise return "object" - if (JavascriptFunction::Is(this->target)) + if (VarIs(this->target)) { return requestContext->GetLibrary()->GetFunctionTypeDisplayString(); } else { - return requestContext->GetLibrary()->GetObjectTypeDisplayString(); + // handle nested cases recursively + return proxy->target->GetTypeOfString(requestContext); } } BOOL JavascriptProxy::GetOwnPropertyDescriptor(RecyclableObject* obj, PropertyId propertyId, ScriptContext* requestContext, PropertyDescriptor* propertyDescriptor) { - JavascriptProxy* proxy = JavascriptProxy::FromVar(obj); + JavascriptProxy* proxy = VarTo(obj); return proxy->GetPropertyDescriptorTrap(propertyId, propertyDescriptor, requestContext); } - BOOL JavascriptProxy::DefineOwnPropertyDescriptor(RecyclableObject* obj, PropertyId propId, const PropertyDescriptor& descriptor, bool throwOnError, ScriptContext* requestContext) + BOOL JavascriptProxy::DefineOwnPropertyDescriptor(RecyclableObject* obj, PropertyId propId, const PropertyDescriptor& descriptor, bool throwOnError, ScriptContext* requestContext, PropertyOperationFlags flags) { + // #sec-proxy-object-internal-methods-and-internal-slots-defineownproperty-p-desc PROBE_STACK(requestContext, Js::Constants::MinStackDefault); // Reject implicit call @@ -1686,13 +1713,14 @@ namespace Js return FALSE; } - JavascriptProxy* proxy = JavascriptProxy::FromVar(obj); + JavascriptProxy* proxy = VarTo(obj); //1. Assert: IsPropertyKey(P) is true. - //2. Let handler be the value of the[[ProxyHandler]] internal slot of O. + //2. Let handler be O.[[ProxyHandler]]. RecyclableObject *handlerObj = proxy->MarshalHandler(requestContext); //3. If handler is null, then throw a TypeError exception. + //4. Assert: Type(handler) is Object. if (handlerObj == nullptr) { // the proxy has been revoked; TypeError. @@ -1701,34 +1729,25 @@ namespace Js JavascriptError::ThrowTypeError(requestContext, JSERR_ErrorOnRevokedProxy, _u("definePropertyDescriptor")); } - //4. Let target be the value of the[[ProxyTarget]] internal slot of O. + //5. Let target be O.[[ProxyTarget]]. RecyclableObject *targetObj = proxy->MarshalTarget(requestContext); - //5. Let trap be the result of GetMethod(handler, "defineProperty"). - //6. ReturnIfAbrupt(trap). + //6. Let trap be ? GetMethod(handler, "defineProperty"). //7. If trap is undefined, then - //a.Return the result of calling the[[DefineOwnProperty]] internal method of target with arguments P and Desc. + //a. Return ? target.[[DefineOwnProperty]](P, Desc). JavascriptFunction* defineOwnPropertyMethod = proxy->GetMethodHelper(PropertyIds::defineProperty, requestContext); Assert(!requestContext->IsHeapEnumInProgress()); if (nullptr == defineOwnPropertyMethod) { - return JavascriptOperators::DefineOwnPropertyDescriptor(targetObj, propId, descriptor, throwOnError, requestContext); + return JavascriptOperators::DefineOwnPropertyDescriptor(targetObj, propId, descriptor, throwOnError, requestContext, flags); } //8. Let descObj be FromPropertyDescriptor(Desc). - //9. NOTE If Desc was originally generated from an object using ToPropertyDescriptor, then descObj will be that original object. - //10. Let trapResult be the result of calling the[[Call]] internal method of trap with handler as the this value and a new List containing target, P, and descObj. - //11. Let booleanTrapResult be ToBoolean(trapResult). - //12. ReturnIfAbrupt(booleanTrapResult). - //13. If booleanTrapResult is false, then return false. - //14. Let targetDesc be the result of calling the[[GetOwnProperty]] internal method of target with argument P. - //15. ReturnIfAbrupt(targetDesc). - Var descVar = descriptor.GetOriginal(); - if (descVar == nullptr) - { - descVar = JavascriptOperators::FromPropertyDescriptor(descriptor, requestContext); - } + //9. Let booleanTrapResult be ToBoolean(? Call(trap, handler, << target, P, descObj >> )). + //10. If booleanTrapResult is false, then return false. + //11. Let targetDesc be ? target.[[GetOwnProperty]](P). + Var descVar = JavascriptOperators::FromPropertyDescriptor(descriptor, requestContext); Var propertyName = GetName(requestContext, propId); @@ -1740,21 +1759,29 @@ namespace Js BOOL defineResult = JavascriptConversion::ToBoolean(definePropertyResult, requestContext); if (!defineResult) { + if (throwOnError && flags & PropertyOperation_StrictMode) + { + JavascriptError::ThrowTypeErrorVar( + requestContext, + JSERR_ProxyHandlerReturnedFalse, + _u("defineProperty"), + requestContext->GetPropertyName(propId)->GetBuffer() + ); + } return defineResult; } - //16. Let extensibleTarget be the result of IsExtensible(target). - //17. ReturnIfAbrupt(extensibleTarget). - //18. If Desc has a[[Configurable]] field and if Desc.[[Configurable]] is false, then + //12. Let extensibleTarget be ? IsExtensible(target). + //13. If Desc has a[[Configurable]] field and if Desc.[[Configurable]] is false, then // a.Let settingConfigFalse be true. - //19. Else let settingConfigFalse be false. - //20. If targetDesc is undefined, then + //14. Else let settingConfigFalse be false. + //15. If targetDesc is undefined, then // a.If extensibleTarget is false, then throw a TypeError exception. // b.If settingConfigFalse is true, then throw a TypeError exception. - //21. Else targetDesc is not undefined, + //16. Else targetDesc is not undefined, // a.If IsCompatiblePropertyDescriptor(extensibleTarget, Desc, targetDesc) is false, then throw a TypeError exception. // b.If settingConfigFalse is true and targetDesc.[[Configurable]] is true, then throw a TypeError exception. - //22. Return true. + //17. Return true. PropertyDescriptor targetDescriptor; BOOL hasProperty = JavascriptOperators::GetOwnPropertyDescriptor(targetObj, propId, requestContext, &targetDescriptor); BOOL isExtensible = targetObj->IsExtensible(); @@ -1834,23 +1861,23 @@ namespace Js uint32 indexVal; BOOL isNumericPropertyId = requestContext->IsNumericPropertyId(propertyId, &indexVal); Assert(isNumericPropertyId); - return JavascriptOperators::SetItemOnTaggedNumber(receiver, targetObj, indexVal, newValue, requestContext, PropertyOperationFlags::PropertyOperation_None); + return JavascriptOperators::SetItemOnTaggedNumber(receiver, targetObj, indexVal, newValue, requestContext, propertyOperationFlags); } case SetPropertyTrapKind::SetPropertyOnTaggedNumberKind: - return JavascriptOperators::SetPropertyOnTaggedNumber(receiver, targetObj, propertyId, newValue, requestContext, PropertyOperation_None); + return JavascriptOperators::SetPropertyOnTaggedNumber(receiver, targetObj, propertyId, newValue, requestContext, propertyOperationFlags); case SetPropertyTrapKind::SetPropertyKind: - return JavascriptOperators::SetProperty(receiver, targetObj, propertyId, newValue, requestContext); + return JavascriptOperators::SetProperty(receiver, targetObj, propertyId, newValue, requestContext, propertyOperationFlags); case SetPropertyTrapKind::SetItemKind: { uint32 indexVal; BOOL isNumericPropertyId = requestContext->IsNumericPropertyId(propertyId, &indexVal); Assert(isNumericPropertyId); - return JavascriptOperators::SetItem(receiver, targetObj, indexVal, newValue, requestContext, PropertyOperationFlags::PropertyOperation_None, skipPrototypeCheck); + return JavascriptOperators::SetItem(receiver, targetObj, indexVal, newValue, requestContext, propertyOperationFlags, skipPrototypeCheck); } case SetPropertyTrapKind::SetPropertyWPCacheKind: { PropertyValueInfo propertyValueInfo; - return JavascriptOperators::SetPropertyWPCache(receiver, targetObj, propertyId, newValue, requestContext, PropertyOperationFlags::PropertyOperation_None, &propertyValueInfo); + return JavascriptOperators::SetPropertyWPCache(receiver, targetObj, propertyId, newValue, requestContext, propertyOperationFlags, &propertyValueInfo); } default: AnalysisAssert(FALSE); @@ -1862,20 +1889,24 @@ namespace Js //11. If booleanTrapResult is false, then return false. Var propertyName = GetName(requestContext, propertyId); - + Var setPropertyResult = threadContext->ExecuteImplicitCall(setMethod, ImplicitCall_Accessor, [=]()->Js::Var { return CALL_FUNCTION(threadContext, setMethod, CallInfo(CallFlags_Value, 5), handlerObj, targetObj, propertyName, newValue, receiver); }); - + BOOL setResult = JavascriptConversion::ToBoolean(setPropertyResult, requestContext); if (!setResult) { if (propertyOperationFlags & PropertyOperation_StrictMode) { - JavascriptError::ThrowTypeError(requestContext, JSERR_ProxyHandlerReturnedFalse, _u("set")); + JavascriptError::ThrowTypeErrorVar( + requestContext, + JSERR_ProxyHandlerReturnedFalse, + _u("set"), + requestContext->GetPropertyName(propertyId)->GetBuffer() + ); } - return setResult; } @@ -1920,7 +1951,7 @@ namespace Js { //2. Let handler be the value of the[[ProxyHandler]] internal slot of O. //3. If handler is null, then throw a TypeError exception. - if (this->handler == nullptr) + if (IsRevoked()) { // the proxy has been revoked; TypeError. JavascriptError::ThrowTypeError(requestContext, JSERR_ErrorOnRevokedProxy, requestContext->GetPropertyName(methodId)->GetBuffer()); @@ -1943,14 +1974,14 @@ namespace Js { return nullptr; } - if (!JavascriptFunction::Is(varMethod)) + if (!VarIs(varMethod)) { JavascriptError::ThrowTypeError(requestContext, JSERR_NeedFunction, requestContext->GetPropertyName(methodId)->GetBuffer()); } - JavascriptFunction* function = JavascriptFunction::FromVar(varMethod); + JavascriptFunction* function = VarTo(varMethod); - return JavascriptFunction::FromVar(CrossSite::MarshalVar(requestContext, + return VarTo(CrossSite::MarshalVar(requestContext, function, function->GetScriptContext())); } @@ -1962,7 +1993,7 @@ namespace Js } if (propertyDescriptor.GetterSpecified()) { - return JavascriptOperators::CallGetter(RecyclableObject::FromVar(propertyDescriptor.GetGetter()), instance, requestContext); + return JavascriptOperators::CallGetter(VarTo(propertyDescriptor.GetGetter()), instance, requestContext); } Assert(FALSE); return requestContext->GetLibrary()->GetUndefined(); @@ -2016,8 +2047,8 @@ namespace Js RecyclableObject* JavascriptProxy::AutoProxyWrapper(Var obj) { - RecyclableObject* object = RecyclableObject::FromVar(obj); - if (!JavascriptOperators::IsObject(object) || JavascriptProxy::Is(object)) + RecyclableObject* object = VarTo(obj); + if (!JavascriptOperators::IsObject(object) || VarIs(object)) { return object; } @@ -2077,7 +2108,7 @@ namespace Js bool isNewCall = args.IsNewCall() || hasOverridingNewTarget; AssertMsg(args.Info.Count > 0, "Should always have implicit 'this'"); - if (!JavascriptProxy::Is(function)) + if (!VarIs(function)) { if (args.Info.Flags & CallFlags_New) { @@ -2090,7 +2121,7 @@ namespace Js } Var newTarget = nullptr; - JavascriptProxy* proxy = JavascriptProxy::FromVar(function); + JavascriptProxy* proxy = VarTo(function); Js::RecyclableObject *handlerObj = proxy->handler; Js::RecyclableObject *targetObj = proxy->target; @@ -2141,7 +2172,11 @@ namespace Js // args.Values[0] will be null in the case where NewTarget is initially provided by proxy. if (!isCtorSuperCall || !args.Values[0]) { - newThisObject = JavascriptOperators::NewScObjectNoCtor(targetObj, scriptContext); + BEGIN_SAFE_REENTRANT_CALL(scriptContext->GetThreadContext()) + { + newThisObject = JavascriptOperators::NewScObjectNoCtorCommon(proxy, scriptContext, false); + } + END_SAFE_REENTRANT_CALL args.Values[0] = newThisObject; } else @@ -2334,7 +2369,7 @@ namespace Js //12. ReturnIfAbrupt(extensibleTarget). //13. Let targetKeys be target.[[OwnPropertyKeys]](). //14. ReturnIfAbrupt(targetKeys). - + Var ownKeysResult = threadContext->ExecuteImplicitCall(ownKeysMethod, ImplicitCall_Accessor, [=]()->Js::Var { return CALL_FUNCTION(threadContext, ownKeysMethod, CallInfo(CallFlags_Value, 2), handlerObj, targetObj); @@ -2344,11 +2379,7 @@ namespace Js { JavascriptError::ThrowTypeError(requestContext, JSERR_InconsistentTrapResult, _u("ownKeys")); } - RecyclableObject* trapResultArray = RecyclableObject::FromVar(ownKeysResult); - - BOOL isTargetExtensible = targetObj->IsExtensible(); - - targetKeys = JavascriptOperators::GetOwnPropertyKeys(targetObj, requestContext); + RecyclableObject* trapResultArray = VarTo(ownKeysResult); //15. Assert: targetKeys is a List containing only String and Symbol values. //16. Let targetConfigurableKeys be an empty List. @@ -2431,6 +2462,7 @@ namespace Js Var element; PropertyId propertyId; const PropertyRecord* propertyRecord = nullptr; + BOOL isTargetExtensible = FALSE; BEGIN_TEMP_ALLOCATOR(tempAllocator, requestContext, _u("Runtime")) { @@ -2469,10 +2501,13 @@ namespace Js break; } + isTargetExtensible = targetObj->IsExtensible(); + targetKeys = JavascriptOperators::GetOwnPropertyKeys(targetObj, requestContext); + for (uint32 i = 0; i < targetKeys->GetLength(); i++) { element = targetKeys->DirectGetItem(i); - AssertMsg(JavascriptSymbol::Is(element) || JavascriptString::Is(element), "Invariant check during ownKeys proxy trap should make sure we only get property key here. (symbol or string primitives)"); + AssertMsg(VarIs(element) || VarIs(element), "Invariant check during ownKeys proxy trap should make sure we only get property key here. (symbol or string primitives)"); JavascriptConversion::ToPropertyKey(element, requestContext, &propertyRecord, nullptr); propertyId = propertyRecord->GetPropertyId(); diff --git a/lib/Runtime/Library/JavascriptProxy.h b/lib/Runtime/Library/JavascriptProxy.h index c0092a51939..3aee34bb097 100644 --- a/lib/Runtime/Library/JavascriptProxy.h +++ b/lib/Runtime/Library/JavascriptProxy.h @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- // Implements JavascriptProxy. @@ -50,10 +51,11 @@ namespace Js JavascriptProxy(DynamicType * type); JavascriptProxy(DynamicType * type, ScriptContext * scriptContext, RecyclableObject* target, RecyclableObject* handler); - static BOOL Is(_In_ Var obj); - static BOOL Is(_In_ RecyclableObject* obj); - static JavascriptProxy* FromVar(Var obj) { AssertOrFailFast(Is(obj)); return static_cast(obj); } - static JavascriptProxy* UnsafeFromVar(Var obj) { Assert(Is(obj)); return static_cast(obj); } + + // before recursively calling something on 'target' use this helper in case there is nesting of proxies. + // the proxies could be deep nested and cause SO when processed recursively. + static const JavascriptProxy* UnwrapNestedProxies(const JavascriptProxy* proxy); + #ifndef IsJsDiag RecyclableObject* GetTarget(); RecyclableObject* GetHandler(); @@ -69,7 +71,7 @@ namespace Js static JavascriptProxy* Create(ScriptContext* scriptContext, Arguments args); static BOOL GetOwnPropertyDescriptor(RecyclableObject* obj, PropertyId propertyId, ScriptContext* requestContext, PropertyDescriptor* propertyDescriptor); - static BOOL DefineOwnPropertyDescriptor(RecyclableObject* obj, PropertyId propId, const PropertyDescriptor& descriptor, bool throwOnError, ScriptContext* requestContext); + static BOOL DefineOwnPropertyDescriptor(RecyclableObject* obj, PropertyId propId, const PropertyDescriptor& descriptor, bool throwOnError, ScriptContext* requestContext, PropertyOperationFlags flags); static DWORD GetOffsetOfTarget() { return offsetof(JavascriptProxy, target); } @@ -168,7 +170,7 @@ namespace Js for (uint32 i = 0; i < len; i++) { if (!JavascriptOperators::GetItem(trapResultArray, i, &element, scriptContext) || // missing - !(JavascriptString::Is(element) || JavascriptSymbol::Is(element))) // neither String nor Symbol + !(VarIs(element) || VarIs(element))) // neither String nor Symbol { JavascriptError::ThrowTypeError(scriptContext, JSERR_InconsistentTrapResult, _u("ownKeys")); } @@ -176,16 +178,14 @@ namespace Js JavascriptConversion::ToPropertyKey(element, scriptContext, &propertyRecord, nullptr); propertyId = propertyRecord->GetPropertyId(); - if (!targetToTrapResultMap.ContainsKey(propertyId)) + if (propertyId != Constants::NoProperty) { - if (propertyId != Constants::NoProperty) + if (targetToTrapResultMap.AddNew(propertyId, true) == -1) { - targetToTrapResultMap.Add(propertyId, true); + JavascriptError::ThrowTypeError(scriptContext, JSERR_DuplicateKeysFromOwnPropertyKeys); } } - // We explicitly allow duplicates in the results. A map is sufficient since the spec steps that remove entries - // remove ALL of them at the same time. if (fn(propertyRecord)) { trapResult->DirectSetItemAt(trapResultIndex++, element); @@ -236,4 +236,9 @@ namespace Js virtual void ExtractSnapObjectDataInto(TTD::NSSnapObjects::SnapObject* objData, TTD::SlabAllocator& alloc) override; #endif }; + + template <> inline bool VarIsImpl(RecyclableObject* obj) + { + return JavascriptOperators::GetTypeId(obj) == TypeIds_Proxy; + } } diff --git a/lib/Runtime/Library/JavascriptReflect.cpp b/lib/Runtime/Library/JavascriptReflect.cpp index afa606e7484..226907ac362 100644 --- a/lib/Runtime/Library/JavascriptReflect.cpp +++ b/lib/Runtime/Library/JavascriptReflect.cpp @@ -43,11 +43,11 @@ namespace Js BOOL defineResult; if (JavascriptOperators::GetTypeId(target) == TypeIds_HostDispatch) { - defineResult = RecyclableObject::FromVar(target)->InvokeBuiltInOperationRemotely(EntryDefineProperty, args, nullptr); + defineResult = VarTo(target)->InvokeBuiltInOperationRemotely(EntryDefineProperty, args, nullptr); } else { - defineResult = JavascriptObject::DefineOwnPropertyHelper(RecyclableObject::FromVar(target), propertyRecord->GetPropertyId(), propertyDescriptor, scriptContext, false); + defineResult = JavascriptObject::DefineOwnPropertyHelper(VarTo(target), propertyRecord->GetPropertyId(), propertyDescriptor, scriptContext, false); } return scriptContext->GetLibrary()->GetTrueOrFalse(defineResult); @@ -102,7 +102,7 @@ namespace Js Var receiver = args.Info.Count > 3 ? args[3] : target; - return JavascriptOperators::GetElementIHelper(RecyclableObject::FromVar(target), propertyKey, receiver, scriptContext); + return JavascriptOperators::GetElementIHelper(VarTo(target), propertyKey, receiver, scriptContext); } Var JavascriptReflect::EntryGetOwnPropertyDescriptor(RecyclableObject* function, CallInfo callInfo, ...) @@ -130,13 +130,13 @@ namespace Js if (JavascriptOperators::GetTypeId(target) == TypeIds_HostDispatch) { Var result; - if (RecyclableObject::FromVar(target)->InvokeBuiltInOperationRemotely(EntryGetOwnPropertyDescriptor, args, &result)) + if (VarTo(target)->InvokeBuiltInOperationRemotely(EntryGetOwnPropertyDescriptor, args, &result)) { return result; } } - return JavascriptObject::GetOwnPropertyDescriptorHelper(RecyclableObject::FromVar(target), propertyKey, scriptContext); + return JavascriptObject::GetOwnPropertyDescriptorHelper(VarTo(target), propertyKey, scriptContext); } Var JavascriptReflect::EntryGetPrototypeOf(RecyclableObject* function, CallInfo callInfo, ...) @@ -158,7 +158,7 @@ namespace Js JavascriptError::ThrowTypeError(scriptContext, JSERR_FunctionArgument_NeedObject, _u("Reflect.getPrototypeOf")); } Var target = args[1]; - return JavascriptObject::GetPrototypeOf(RecyclableObject::FromVar(target), scriptContext); + return JavascriptObject::GetPrototypeOf(VarTo(target), scriptContext); } Var JavascriptReflect::EntryHas(RecyclableObject* function, CallInfo callInfo, ...) @@ -206,7 +206,7 @@ namespace Js JavascriptError::ThrowTypeError(scriptContext, JSERR_FunctionArgument_NeedObject, _u("Reflect.iesExtensible")); } Var target = args[1]; - RecyclableObject *object = RecyclableObject::FromVar(target); + RecyclableObject *object = VarTo(target); BOOL isExtensible = object->IsExtensible(); GlobalObject* globalObject = object->GetLibrary()->GetGlobalObject(); @@ -261,7 +261,7 @@ namespace Js } Var target = args[1]; - RecyclableObject* targetObj = RecyclableObject::FromVar(target); + RecyclableObject* targetObj = VarTo(target); GlobalObject* globalObject = targetObj->GetLibrary()->GetGlobalObject(); if (globalObject != targetObj && globalObject && (globalObject->ToThis() == targetObj)) { @@ -296,7 +296,7 @@ namespace Js Var receiver = args.Info.Count > 4 ? args[4] : target; target = JavascriptOperators::ToObject(target, scriptContext); - BOOL result = JavascriptOperators::SetElementIHelper(receiver, RecyclableObject::FromVar(target), propertyKey, value, scriptContext, PropertyOperationFlags::PropertyOperation_None); + BOOL result = JavascriptOperators::SetElementIHelper(receiver, VarTo(target), propertyKey, value, scriptContext, PropertyOperationFlags::PropertyOperation_None); return scriptContext->GetLibrary()->GetTrueOrFalse(result); } @@ -326,8 +326,8 @@ namespace Js JavascriptError::ThrowTypeError(scriptContext, JSERR_FunctionArgument_NotObjectOrNull, _u("Object.setPrototypeOf")); } - RecyclableObject* newPrototype = RecyclableObject::FromVar(args[2]); - BOOL changeResult = JavascriptObject::ChangePrototype(RecyclableObject::FromVar(target), newPrototype, /*validate*/false, scriptContext); + RecyclableObject* newPrototype = VarTo(args[2]); + BOOL changeResult = JavascriptObject::ChangePrototype(VarTo(target), newPrototype, /*validate*/false, scriptContext); return scriptContext->GetLibrary()->GetTrueOrFalse(changeResult); } @@ -359,7 +359,7 @@ namespace Js JavascriptError::ThrowTypeError(scriptContext, JSERR_FunctionArgument_NeedArrayLike, _u("Reflect.apply")); } - return JavascriptFunction::ApplyHelper(RecyclableObject::FromVar(target), thisArgument, argArray, scriptContext); + return JavascriptFunction::ApplyHelper(VarTo(target), thisArgument, argArray, scriptContext); } static const int STACK_ARGS_ALLOCA_THRESHOLD = 8; @@ -386,26 +386,23 @@ namespace Js } Var newTarget = nullptr; - if (scriptContext->GetConfig()->IsES6ClassAndExtendsEnabled()) + if (args.Info.Count > 3) { - if (args.Info.Count > 3) + newTarget = args[3]; + if (!JavascriptOperators::IsConstructor(newTarget)) { - newTarget = args[3]; - if (!JavascriptOperators::IsConstructor(newTarget)) - { - JavascriptError::ThrowTypeError(scriptContext, JSERR_NeedConstructor, _u("newTarget")); - } - } - else - { - newTarget = target; + JavascriptError::ThrowTypeError(scriptContext, JSERR_NeedConstructor, _u("newTarget")); } } + else + { + newTarget = target; + } - RecyclableObject* thisArg = RecyclableObject::FromVar(undefinedValue); + RecyclableObject* thisArg = VarTo(undefinedValue); if (newTarget != nullptr) { - thisArg = JavascriptOperators::CreateFromConstructor(RecyclableObject::FromVar(newTarget), scriptContext); + thisArg = JavascriptOperators::CreateFromConstructor(VarTo(newTarget), scriptContext); } Var argArray = args.Info.Count > 2 ? args[2] : undefinedValue; @@ -415,6 +412,6 @@ namespace Js JavascriptError::ThrowTypeError(scriptContext, JSERR_FunctionArgument_NeedArrayLike, _u("Reflect.construct")); } - return JavascriptFunction::ConstructHelper(RecyclableObject::FromVar(target), thisArg, newTarget, argArray, scriptContext); + return JavascriptFunction::ConstructHelper(VarTo(target), thisArg, newTarget, argArray, scriptContext); } } diff --git a/lib/Runtime/Library/JavascriptRegExpConstructor.cpp b/lib/Runtime/Library/JavascriptRegExpConstructor.cpp index 2be484895a6..154da927750 100644 --- a/lib/Runtime/Library/JavascriptRegExpConstructor.cpp +++ b/lib/Runtime/Library/JavascriptRegExpConstructor.cpp @@ -14,8 +14,8 @@ namespace Js const int JavascriptRegExpConstructor::NumCtorCaptures; #endif - JavascriptRegExpConstructor::JavascriptRegExpConstructor(DynamicType * type) : - RuntimeFunction(type, &JavascriptRegExp::EntryInfo::NewInstance), + JavascriptRegExpConstructor::JavascriptRegExpConstructor(DynamicType* type, ConstructorCache* cache) : + RuntimeFunction(type, &JavascriptRegExp::EntryInfo::NewInstance, cache), reset(false), invalidatedLastMatch(false), lastPattern(nullptr), diff --git a/lib/Runtime/Library/JavascriptRegExpConstructor.h b/lib/Runtime/Library/JavascriptRegExpConstructor.h index 28e15125307..7fc69c02e8d 100644 --- a/lib/Runtime/Library/JavascriptRegExpConstructor.h +++ b/lib/Runtime/Library/JavascriptRegExpConstructor.h @@ -22,7 +22,7 @@ namespace Js DEFINE_VTABLE_CTOR_MEMBER_INIT(JavascriptRegExpConstructor, RuntimeFunction, lastMatch); public: - JavascriptRegExpConstructor(DynamicType * type); + JavascriptRegExpConstructor(DynamicType* type, ConstructorCache* cache); virtual PropertyQueryFlags HasPropertyQuery(PropertyId propertyId, _Inout_opt_ PropertyValueInfo* info) override; virtual PropertyQueryFlags GetPropertyQuery(Var originalInstance, PropertyId propertyId, Var* value, PropertyValueInfo* info, ScriptContext* requestContext) override; diff --git a/lib/Runtime/Library/JavascriptRegularExpression.cpp b/lib/Runtime/Library/JavascriptRegularExpression.cpp index ad59a3e8bec..62804ba4b80 100644 --- a/lib/Runtime/Library/JavascriptRegularExpression.cpp +++ b/lib/Runtime/Library/JavascriptRegularExpression.cpp @@ -71,11 +71,6 @@ using namespace Js; Assert(!ThreadContext::IsOnStack(instance->lastIndexVar)); } - bool JavascriptRegExp::Is(Var aValue) - { - return JavascriptOperators::GetTypeId(aValue) == TypeIds_RegEx; - } - // IsRegExp in the spec. bool JavascriptRegExp::IsRegExpLike(Var aValue, ScriptContext* scriptContext) { @@ -87,7 +82,7 @@ using namespace Js; } Var symbolMatchProperty = JavascriptOperators::GetProperty( - RecyclableObject::FromVar(aValue), + VarTo(aValue), PropertyIds::_symbolMatch, scriptContext); if (!JavascriptOperators::IsUndefined(symbolMatchProperty)) @@ -96,21 +91,7 @@ using namespace Js; } } - return JavascriptRegExp::Is(aValue); - } - - JavascriptRegExp* JavascriptRegExp::FromVar(Var aValue) - { - AssertOrFailFastMsg(Is(aValue), "Ensure var is actually a 'JavascriptRegExp'"); - - return static_cast(aValue); - } - - JavascriptRegExp* JavascriptRegExp::UnsafeFromVar(Var aValue) - { - AssertMsg(Is(aValue), "Ensure var is actually a 'JavascriptRegExp'"); - - return static_cast(aValue); + return VarIs(aValue); } CharCount JavascriptRegExp::GetLastIndexProperty(RecyclableObject* instance, ScriptContext* scriptContext) @@ -133,7 +114,7 @@ using namespace Js; { JavascriptOperators::SetProperty( instance, - RecyclableObject::FromVar(instance), + VarTo(instance), PropertyIds::lastIndex, lastIndex, scriptContext, @@ -199,7 +180,7 @@ using namespace Js; if (JavascriptOperators::GetTypeId(var) == TypeIds_HostDispatch) { TypeId remoteTypeId = TypeIds_Limit; - RecyclableObject* reclObj = RecyclableObject::UnsafeFromVar(var); + RecyclableObject* reclObj = UnsafeVarTo(var); if (reclObj->GetRemoteTypeId(&remoteTypeId) && remoteTypeId == TypeIds_RegEx) { return static_cast(reclObj->GetRemoteObject()); @@ -217,7 +198,7 @@ using namespace Js; JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedObject, varName); } - return RecyclableObject::FromVar(args[0]); + return VarTo(args[0]); } JavascriptString* JavascriptRegExp::GetFirstStringArg(Arguments& args, ScriptContext* scriptContext) @@ -272,7 +253,7 @@ using namespace Js; else if (JavascriptRegExp::IsRegExpLike(args[1], scriptContext)) { // JavascriptRegExp::IsRegExpLike() makes sure that args[1] is an Object. - RecyclableObject* regexLikeObj = RecyclableObject::FromVar(args[1]); + RecyclableObject* regexLikeObj = VarTo(args[1]); if (!(callInfo.Flags & CallFlags_New) && (callInfo.Count == 2 || JavascriptOperators::IsUndefinedObject(args[2])) && @@ -284,9 +265,9 @@ using namespace Js; return regexLikeObj; } - if (JavascriptRegExp::Is(regexLikeObj)) + if (VarIs(regexLikeObj)) { - JavascriptRegExp* source = JavascriptRegExp::FromVar(regexLikeObj); + JavascriptRegExp* source = VarTo(regexLikeObj); if (callInfo.Count > 2) { @@ -339,7 +320,7 @@ using namespace Js; regex->SetSplitPattern(splitPattern); return isCtorSuperCall ? - JavascriptOperators::OrdinaryCreateFromConstructor(RecyclableObject::FromVar(newTarget), regex, nullptr, scriptContext) : + JavascriptOperators::OrdinaryCreateFromConstructor(VarTo(newTarget), regex, nullptr, scriptContext) : regex; } @@ -347,9 +328,9 @@ using namespace Js; { JavascriptString * strBody; - if (JavascriptString::Is(aValue)) + if (VarIs(aValue)) { - strBody = JavascriptString::FromVar(aValue); + strBody = VarTo(aValue); } else if (JavascriptOperators::GetTypeId(aValue) == TypeIds_Undefined) { @@ -368,9 +349,9 @@ using namespace Js; JavascriptString * strOptions = nullptr; if (options != nullptr && !JavascriptOperators::IsUndefinedObject(options)) { - if (JavascriptString::Is(options)) + if (VarIs(options)) { - strOptions = JavascriptString::FromVar(options); + strOptions = VarTo(options); } else { @@ -398,9 +379,9 @@ using namespace Js; JIT_HELPER_REENTRANT_HEADER(Op_CoerseRegex); // This is called as helper from OpCode::CoerseRegEx. If aValue is regex pattern /a/, CreatePattern converts // it to pattern "/a/" instead of "a". So if we know that aValue is regex, then just return the same object - if (JavascriptRegExp::Is(aValue)) + if (VarIs(aValue)) { - return JavascriptRegExp::FromVar(aValue); + return VarTo(aValue); } else { @@ -541,6 +522,10 @@ using namespace Js; { builder->AppendChars(_u('m')); } + if (pattern->IsDotAll()) + { + builder->AppendChars(_u('s')); + } if (pattern->IsUnicode()) { builder->AppendChars(_u('u')); @@ -570,9 +555,9 @@ using namespace Js; { pattern = scriptContext->GetLibrary()->GetEmptyRegexPattern(); } - else if (JavascriptRegExp::Is(args[1])) + else if (VarIs(args[1])) { - JavascriptRegExp* source = JavascriptRegExp::FromVar(args[1]); + JavascriptRegExp* source = VarTo(args[1]); //compile with a regular expression pattern = source->GetPattern(); splitPattern = source->GetSplitPattern(); @@ -586,9 +571,9 @@ using namespace Js; { //compile with a string JavascriptString * strBody; - if (JavascriptString::Is(args[1])) + if (VarIs(args[1])) { - strBody = JavascriptString::FromVar(args[1]); + strBody = VarTo(args[1]); } else if(JavascriptOperators::GetTypeId(args[1]) == TypeIds_Undefined) { @@ -607,9 +592,9 @@ using namespace Js; JavascriptString * strOptions = nullptr; if (callInfo.Count > 2 && !JavascriptOperators::IsUndefinedObject(args[2])) { - if (JavascriptString::Is(args[2])) + if (VarIs(args[2])) { - strOptions = JavascriptString::FromVar(args[2]); + strOptions = VarTo(args[2]); } else { @@ -792,9 +777,9 @@ using namespace Js; Var replaceValue = (args.Info.Count > 2) ? args[2] : scriptContext->GetLibrary()->GetUndefined(); - if (JavascriptFunction::Is(replaceValue)) + if (JavascriptConversion::IsCallable(replaceValue)) { - JavascriptFunction* replaceFunction = JavascriptFunction::FromVar(replaceValue); + RecyclableObject* replaceFunction = VarTo(replaceValue); return RegexHelper::RegexReplaceFunction(scriptContext, thisObj, string, replaceFunction); } else @@ -835,7 +820,7 @@ using namespace Js; return JavascriptOperators::IsNull(result) ? TaggedInt::ToVarUnchecked(-1) - : JavascriptOperators::GetProperty(RecyclableObject::FromVar(result), PropertyIds::index, scriptContext); + : JavascriptOperators::GetProperty(VarTo(result), PropertyIds::index, scriptContext); } Var JavascriptRegExp::EntrySymbolSplit(RecyclableObject* function, CallInfo callInfo, ...) @@ -878,7 +863,7 @@ using namespace Js; Var exec = JavascriptOperators::GetProperty(thisObj, PropertyIds::exec, scriptContext); if (JavascriptConversion::IsCallable(exec)) { - RecyclableObject* execFn = RecyclableObject::UnsafeFromVar(exec); + RecyclableObject* execFn = UnsafeVarTo(exec); ThreadContext * threadContext = scriptContext->GetThreadContext(); Var result = threadContext->ExecuteImplicitCall(execFn, ImplicitCall_Accessor, [=]()->Js::Var { @@ -948,6 +933,11 @@ using namespace Js; APPEND_FLAG(PropertyIds::unicode, _u('u')); } + if (scriptConfig->IsES2018RegExDotAllEnabled()) + { + APPEND_FLAG(PropertyIds::dotAll, _u('s')); + } + if (scriptConfig->IsES6RegExStickyEnabled()) { APPEND_FLAG(PropertyIds::sticky, _u('y')); @@ -1012,6 +1002,10 @@ using namespace Js; { bs.Append(_u('m')); } + if(GetPattern()->IsDotAll()) + { + bs.Append(_u('s')); + } if (GetPattern()->IsUnicode()) { bs.Append(_u('u')); @@ -1050,7 +1044,7 @@ using namespace Js; Assert(!(callInfo.Flags & CallFlags_New)); \ \ ScriptContext* scriptContext = function->GetScriptContext(); \ - if (ShouldApplyPrototypeWebWorkaround(args, scriptContext)) \ + if (ShouldApplyPrototypeWebWorkaround(args, scriptContext) || args[0] == scriptContext->GetLibrary()->GetRegExpPrototype()) \ {\ return scriptContext->GetLibrary()->GetUndefined(); \ }\ @@ -1064,6 +1058,7 @@ using namespace Js; DEFINE_FLAG_GETTER(EntryGetterMultiline, multiline, IsMultiline) DEFINE_FLAG_GETTER(EntryGetterSticky, sticky, IsSticky) DEFINE_FLAG_GETTER(EntryGetterUnicode, unicode, IsUnicode) + DEFINE_FLAG_GETTER(EntryGetterDotAll, dotAll, IsDotAll) JavascriptRegExp * JavascriptRegExp::BoxStackInstance(JavascriptRegExp * instance, bool deepCopy) { @@ -1098,9 +1093,22 @@ using namespace Js; { DEFAULT_SPECIAL_PROPERTY_IDS, PropertyIds::unicode, + PropertyIds::dotAll, PropertyIds::sticky }; PropertyId const JavascriptRegExp::specialPropertyIdsWithoutUnicode[] = + { + DEFAULT_SPECIAL_PROPERTY_IDS, + PropertyIds::dotAll, + PropertyIds::sticky + }; + PropertyId const JavascriptRegExp::specialPropertyIdsWithoutDotAll[] = + { + DEFAULT_SPECIAL_PROPERTY_IDS, + PropertyIds::unicode, + PropertyIds::sticky + }; + PropertyId const JavascriptRegExp::specialPropertyIdsWithoutDotAllOrUnicode[] = { DEFAULT_SPECIAL_PROPERTY_IDS, PropertyIds::sticky @@ -1123,6 +1131,8 @@ using namespace Js; case PropertyIds::source: case PropertyIds::options: HAS_PROPERTY(!scriptConfig->IsES6RegExPrototypePropertiesEnabled()); + case PropertyIds::dotAll: + HAS_PROPERTY(scriptConfig->IsES2018RegExDotAllEnabled() && !scriptConfig->IsES6RegExPrototypePropertiesEnabled()) case PropertyIds::unicode: HAS_PROPERTY(scriptConfig->IsES6UnicodeExtensionsEnabled() && !scriptConfig->IsES6RegExPrototypePropertiesEnabled()) case PropertyIds::sticky: @@ -1195,6 +1205,8 @@ using namespace Js; GET_FLAG(IsGlobal) case PropertyIds::multiline: GET_FLAG(IsMultiline) + case PropertyIds::dotAll: + GET_FLAG(IsDotAll) case PropertyIds::ignoreCase: GET_FLAG(IsIgnoreCase) case PropertyIds::unicode: @@ -1281,6 +1293,8 @@ using namespace Js; case PropertyIds::source: case PropertyIds::options: SET_PROPERTY(!scriptConfig->IsES6RegExPrototypePropertiesEnabled()); + case PropertyIds::dotAll: + SET_PROPERTY(scriptConfig->IsES2018RegExDotAllEnabled() && !scriptConfig->IsES6RegExPrototypePropertiesEnabled()); case PropertyIds::unicode: SET_PROPERTY(scriptConfig->IsES6UnicodeExtensionsEnabled() && !scriptConfig->IsES6RegExPrototypePropertiesEnabled()); case PropertyIds::sticky: @@ -1319,6 +1333,8 @@ using namespace Js; case PropertyIds::source: case PropertyIds::options: DELETE_PROPERTY(!scriptConfig->IsES6RegExPrototypePropertiesEnabled()); + case PropertyIds::dotAll: + DELETE_PROPERTY(scriptConfig->IsES2018RegExDotAllEnabled() && !scriptConfig->IsES6RegExPrototypePropertiesEnabled()); case PropertyIds::unicode: DELETE_PROPERTY(scriptConfig->IsES6UnicodeExtensionsEnabled() && !scriptConfig->IsES6RegExPrototypePropertiesEnabled()); case PropertyIds::sticky: @@ -1358,6 +1374,10 @@ using namespace Js; { DELETE_PROPERTY(scriptConfig->IsES6UnicodeExtensionsEnabled() && !scriptConfig->IsES6RegExPrototypePropertiesEnabled()); } + else if (BuiltInPropertyRecords::dotAll.Equals(propertyNameString)) + { + DELETE_PROPERTY(scriptConfig->IsES2018RegExDotAllEnabled() && !scriptConfig->IsES6RegExPrototypePropertiesEnabled()); + } else if (BuiltInPropertyRecords::sticky.Equals(propertyNameString)) { DELETE_PROPERTY(scriptConfig->IsES6RegExStickyEnabled() && !scriptConfig->IsES6RegExPrototypePropertiesEnabled()); @@ -1421,6 +1441,8 @@ using namespace Js; GET_SETTER(!scriptConfig->IsES6RegExPrototypePropertiesEnabled()); case PropertyIds::unicode: GET_SETTER(scriptConfig->IsES6UnicodeExtensionsEnabled() && !scriptConfig->IsES6RegExPrototypePropertiesEnabled()); + case PropertyIds::dotAll: + GET_SETTER(scriptConfig->IsES2018RegExDotAllEnabled() && !scriptConfig->IsES6RegExPrototypePropertiesEnabled()); case PropertyIds::sticky: GET_SETTER(scriptConfig->IsES6RegExStickyEnabled() && !scriptConfig->IsES6RegExPrototypePropertiesEnabled()); default: @@ -1462,6 +1484,8 @@ using namespace Js; IS_ENUMERABLE(!scriptConfig->IsES6RegExPrototypePropertiesEnabled()); case PropertyIds::unicode: IS_ENUMERABLE(scriptConfig->IsES6UnicodeExtensionsEnabled() && !scriptConfig->IsES6RegExPrototypePropertiesEnabled()); + case PropertyIds::dotAll: + IS_ENUMERABLE(scriptConfig->IsES2018RegExDotAllEnabled() && !scriptConfig->IsES6RegExPrototypePropertiesEnabled()); case PropertyIds::sticky: IS_ENUMERABLE(scriptConfig->IsES6RegExStickyEnabled() && !scriptConfig->IsES6RegExPrototypePropertiesEnabled()); default: @@ -1490,6 +1514,8 @@ using namespace Js; IS_CONFIGURABLE(!scriptConfig->IsES6RegExPrototypePropertiesEnabled()); case PropertyIds::unicode: IS_CONFIGURABLE(scriptConfig->IsES6UnicodeExtensionsEnabled() && !scriptConfig->IsES6RegExPrototypePropertiesEnabled()); + case PropertyIds::dotAll: + IS_CONFIGURABLE(scriptConfig->IsES2018RegExDotAllEnabled() && !scriptConfig->IsES6RegExPrototypePropertiesEnabled()); case PropertyIds::sticky: IS_CONFIGURABLE(scriptConfig->IsES6RegExStickyEnabled() && !scriptConfig->IsES6RegExPrototypePropertiesEnabled()); default: @@ -1516,6 +1542,8 @@ using namespace Js; case PropertyIds::source: case PropertyIds::options: IS_WRITABLE(!scriptConfig->IsES6RegExPrototypePropertiesEnabled()) + case PropertyIds::dotAll: + IS_WRITABLE(scriptConfig->IsES2018RegExDotAllEnabled() && !scriptConfig->IsES6RegExPrototypePropertiesEnabled()) case PropertyIds::unicode: IS_WRITABLE(scriptConfig->IsES6UnicodeExtensionsEnabled() && !scriptConfig->IsES6RegExPrototypePropertiesEnabled()); case PropertyIds::sticky: @@ -1558,6 +1586,11 @@ using namespace Js; specialPropertyCount += 1; } + if (GetScriptContext()->GetConfig()->IsES2018RegExDotAllEnabled()) + { + specialPropertyCount += 1; + } + return specialPropertyCount; } @@ -1569,9 +1602,29 @@ using namespace Js; inline PropertyId const * JavascriptRegExp::GetSpecialPropertyIdsInlined() const { - return GetScriptContext()->GetConfig()->IsES6UnicodeExtensionsEnabled() - ? specialPropertyIdsAll - : specialPropertyIdsWithoutUnicode; + const ScriptConfiguration* config = GetScriptContext()->GetConfig(); + if (config->IsES6UnicodeExtensionsEnabled()) + { + if (config->IsES2018RegExDotAllEnabled()) + { + return specialPropertyIdsAll; + } + else + { + return specialPropertyIdsWithoutDotAll; + } + } + else + { + if (config->IsES2018RegExDotAllEnabled()) + { + return specialPropertyIdsWithoutUnicode; + } + else + { + return specialPropertyIdsWithoutDotAllOrUnicode; + } + } } #if ENABLE_TTD diff --git a/lib/Runtime/Library/JavascriptRegularExpression.h b/lib/Runtime/Library/JavascriptRegularExpression.h index 2541f7caafd..7eb414c00cb 100644 --- a/lib/Runtime/Library/JavascriptRegularExpression.h +++ b/lib/Runtime/Library/JavascriptRegularExpression.h @@ -14,6 +14,8 @@ namespace Js private: static PropertyId const specialPropertyIdsAll[]; static PropertyId const specialPropertyIdsWithoutUnicode[]; + static PropertyId const specialPropertyIdsWithoutDotAll[]; + static PropertyId const specialPropertyIdsWithoutDotAllOrUnicode[]; static const uint defaultSpecialPropertyIdsCount = 6; Field(UnifiedRegex::RegexPattern*) pattern; @@ -120,10 +122,7 @@ namespace Js this->lastIndexOrFlag = lastIndex; } - static bool Is(Var aValue); static bool IsRegExpLike(Var aValue, ScriptContext* scriptContext); - static JavascriptRegExp* FromVar(Var aValue); - static JavascriptRegExp* UnsafeFromVar(Var aValue); static JavascriptRegExp* CreateRegEx(const char16* pSource, CharCount sourceLen, UnifiedRegex::RegexFlags flags, ScriptContext *scriptContext); @@ -154,6 +153,7 @@ namespace Js static FunctionInfo GetterSource; static FunctionInfo GetterSticky; static FunctionInfo GetterUnicode; + static FunctionInfo GetterDotAll; // v5.8 only static FunctionInfo Compile; }; @@ -176,6 +176,7 @@ namespace Js static Var EntryGetterSource(RecyclableObject* function, CallInfo callInfo, ...); static Var EntryGetterSticky(RecyclableObject* function, CallInfo callInfo, ...); static Var EntryGetterUnicode(RecyclableObject* function, CallInfo callInfo, ...); + static Var EntryGetterDotAll(RecyclableObject* function, CallInfo callInfo, ...); // v5.8 only static Var EntryCompile(RecyclableObject* function, CallInfo callInfo, ...); @@ -218,4 +219,9 @@ namespace Js } }; + template <> inline bool VarIsImpl(RecyclableObject* obj) + { + return JavascriptOperators::GetTypeId(obj) == TypeIds_RegEx; + } + } // namespace Js diff --git a/lib/Runtime/Library/JavascriptSet.cpp b/lib/Runtime/Library/JavascriptSet.cpp index 6e20f24e8cd..7d974236f4b 100644 --- a/lib/Runtime/Library/JavascriptSet.cpp +++ b/lib/Runtime/Library/JavascriptSet.cpp @@ -18,25 +18,6 @@ JavascriptSet* JavascriptSet::New(ScriptContext* scriptContext) return set; } -bool JavascriptSet::Is(Var aValue) -{ - return JavascriptOperators::GetTypeId(aValue) == TypeIds_Set; -} - -JavascriptSet* JavascriptSet::FromVar(Var aValue) -{ - AssertOrFailFastMsg(Is(aValue), "Ensure var is actually a 'JavascriptSet'"); - - return static_cast(aValue); -} - -JavascriptSet* JavascriptSet::UnsafeFromVar(Var aValue) -{ - AssertMsg(Is(aValue), "Ensure var is actually a 'JavascriptSet'"); - - return static_cast(aValue); -} - JavascriptSet::SetDataList::Iterator JavascriptSet::GetIterator() { return this->list.GetIterator(); @@ -87,7 +68,7 @@ Var JavascriptSet::NewInstance(RecyclableObject* function, CallInfo callInfo, .. { JavascriptError::ThrowTypeError(scriptContext, JSERR_NeedFunction); } - adder = RecyclableObject::FromVar(adderVar); + adder = VarTo(adderVar); } if (iter != nullptr) @@ -102,7 +83,7 @@ Var JavascriptSet::NewInstance(RecyclableObject* function, CallInfo callInfo, .. } return isCtorSuperCall ? - JavascriptOperators::OrdinaryCreateFromConstructor(RecyclableObject::FromVar(newTarget), setObject, nullptr, scriptContext) : + JavascriptOperators::OrdinaryCreateFromConstructor(VarTo(newTarget), setObject, nullptr, scriptContext) : setObject; } @@ -188,7 +169,7 @@ Var JavascriptSet::EntryForEach(RecyclableObject* function, CallInfo callInfo, . { JavascriptError::ThrowTypeError(scriptContext, JSERR_FunctionArgument_NeedFunction, _u("Set.prototype.forEach")); } - RecyclableObject* callBackFn = RecyclableObject::FromVar(args[1]); + RecyclableObject* callBackFn = VarTo(args[1]); Var thisArg = (args.Info.Count > 2) ? args[2] : scriptContext->GetLibrary()->GetUndefined(); diff --git a/lib/Runtime/Library/JavascriptSet.h b/lib/Runtime/Library/JavascriptSet.h index 53fce640adf..b8609e31511 100644 --- a/lib/Runtime/Library/JavascriptSet.h +++ b/lib/Runtime/Library/JavascriptSet.h @@ -74,10 +74,6 @@ namespace Js static JavascriptSet* New(ScriptContext* scriptContext); - static bool Is(Var aValue); - static JavascriptSet* FromVar(Var aValue); - static JavascriptSet* UnsafeFromVar(Var aValue); - void Add(Var value); void Clear(); @@ -125,4 +121,9 @@ namespace Js static JavascriptSet* CreateForSnapshotRestore(ScriptContext* ctx); #endif }; + + template <> inline bool VarIsImpl(RecyclableObject* obj) + { + return JavascriptOperators::GetTypeId(obj) == TypeIds_Set; + } } diff --git a/lib/Runtime/Library/JavascriptSetIterator.cpp b/lib/Runtime/Library/JavascriptSetIterator.cpp index c9454400e56..60f35821b72 100644 --- a/lib/Runtime/Library/JavascriptSetIterator.cpp +++ b/lib/Runtime/Library/JavascriptSetIterator.cpp @@ -15,26 +15,6 @@ namespace Js Assert(type->GetTypeId() == TypeIds_SetIterator); } - bool JavascriptSetIterator::Is(Var aValue) - { - TypeId typeId = JavascriptOperators::GetTypeId(aValue); - return typeId == TypeIds_SetIterator; - } - - JavascriptSetIterator* JavascriptSetIterator::FromVar(Var aValue) - { - AssertOrFailFastMsg(Is(aValue), "Ensure var is actually a 'JavascriptSetIterator'"); - - return static_cast(aValue); - } - - JavascriptSetIterator* JavascriptSetIterator::UnsafeFromVar(Var aValue) - { - AssertMsg(Is(aValue), "Ensure var is actually a 'JavascriptSetIterator'"); - - return static_cast(aValue); - } - Var JavascriptSetIterator::EntryNext(RecyclableObject* function, CallInfo callInfo, ...) { PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); @@ -47,19 +27,19 @@ namespace Js Var thisObj = args[0]; - if (!JavascriptSetIterator::Is(thisObj)) + if (!VarIs(thisObj)) { JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedSetIterator, _u("Set Iterator.prototype.next")); } - JavascriptSetIterator* iterator = JavascriptSetIterator::FromVar(thisObj); + JavascriptSetIterator* iterator = VarTo(thisObj); JavascriptSet* set = iterator->m_set; auto& setIterator = iterator->m_setIterator; if (set == nullptr || !setIterator.Next()) { iterator->m_set = nullptr; - return library->CreateIteratorResultObjectUndefinedTrue(); + return library->CreateIteratorResultObjectDone(); } auto value = setIterator.Current(); @@ -78,6 +58,6 @@ namespace Js result = value; } - return library->CreateIteratorResultObjectValueFalse(result); + return library->CreateIteratorResultObject(result); } } //namespace Js diff --git a/lib/Runtime/Library/JavascriptSetIterator.h b/lib/Runtime/Library/JavascriptSetIterator.h index 4106f3245c8..a74b6e01b86 100644 --- a/lib/Runtime/Library/JavascriptSetIterator.h +++ b/lib/Runtime/Library/JavascriptSetIterator.h @@ -26,10 +26,6 @@ namespace Js public: JavascriptSetIterator(DynamicType* type, JavascriptSet* set, JavascriptSetIteratorKind kind); - static bool Is(Var aValue); - static JavascriptSetIterator* FromVar(Var aValue); - static JavascriptSetIterator* UnsafeFromVar(Var aValue); - class EntryInfo { public: @@ -41,4 +37,9 @@ namespace Js public: JavascriptSet* GetSetForHeapEnum() { return m_set; } }; + + template <> inline bool VarIsImpl(RecyclableObject* obj) + { + return JavascriptOperators::GetTypeId(obj) == TypeIds_SetIterator; + } } // namespace Js diff --git a/lib/Runtime/Library/JavascriptString.cpp b/lib/Runtime/Library/JavascriptString.cpp index 708db5d597a..fca55d4012f 100644 --- a/lib/Runtime/Library/JavascriptString.cpp +++ b/lib/Runtime/Library/JavascriptString.cpp @@ -1,10 +1,11 @@ -//------------------------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #include "RuntimeLibraryPch.h" -#include "DataStructures/BigInt.h" +#include "DataStructures/BigUInt.h" #include "Library/EngineInterfaceObject.h" #include "Library/IntlEngineInterfaceExtensionObject.h" @@ -160,7 +161,7 @@ namespace Js } return isCtorSuperCall ? - JavascriptOperators::OrdinaryCreateFromConstructor(RecyclableObject::FromVar(newTarget), RecyclableObject::UnsafeFromVar(result), nullptr, scriptContext) : + JavascriptOperators::OrdinaryCreateFromConstructor(VarTo(newTarget), UnsafeVarTo(result), nullptr, scriptContext) : result; } @@ -204,7 +205,7 @@ namespace Js { if (!IsValidCharCount(newLength)) { - JavascriptExceptionOperators::ThrowOutOfMemory(this->GetScriptContext()); + JavascriptError::ThrowRangeError(this->GetScriptContext(), JSERR_OutOfBoundString); } m_charLength = newLength; } @@ -219,9 +220,9 @@ namespace Js return IsValidCharCount(idx) && idx < GetLength(); } - bool JavascriptString::Is(Var aValue) + template <> bool VarIsImpl(RecyclableObject* obj) { - return JavascriptOperators::GetTypeId(aValue) == TypeIds_String; + return JavascriptOperators::GetTypeId(obj) == TypeIds_String; } void JavascriptString::GetPropertyRecord(_Out_ Js::PropertyRecord const ** propertyRecord, bool dontLookupFromDictionary) @@ -240,20 +241,6 @@ namespace Js // Base string doesn't have enough room to keep this value, so do nothing } - JavascriptString* JavascriptString::FromVar(Var aValue) - { - AssertOrFailFastMsg(Is(aValue), "Ensure var is actually a 'JavascriptString'"); - - return static_cast(aValue); - } - - JavascriptString* JavascriptString::UnsafeFromVar(Var aValue) - { - AssertMsg(Is(aValue), "Ensure var is actually a 'JavascriptString'"); - - return static_cast(aValue); - } - charcount_t JavascriptString::GetBufferLength(const char16 * content) { @@ -410,7 +397,7 @@ namespace Js if(!IsFinalized()) { - if(CompoundString::Is(this)) + if(VarIs(this)) { return ConcatDestructive_Compound(pstRight); } @@ -456,7 +443,7 @@ namespace Js JavascriptString* JavascriptString::ConcatDestructive_Compound(JavascriptString* pstRight) { - Assert(CompoundString::Is(this)); + Assert(VarIs(this)); Assert(pstRight); #ifdef PROFILE_STRINGS @@ -471,7 +458,7 @@ namespace Js Output::Flush(); } - CompoundString *const leftCs = CompoundString::FromVar(this); + CompoundString *const leftCs = VarTo(this); leftCs->PrepareForAppend(); leftCs->Append(pstRight); return this; @@ -567,7 +554,7 @@ namespace Js if(!pstLeft->IsFinalized()) { - if(CompoundString::Is(pstLeft)) + if(VarIs(pstLeft)) { return Concat_Compound(pstLeft, pstRight); } @@ -605,7 +592,7 @@ namespace Js JavascriptString* JavascriptString::Concat_Compound(JavascriptString * pstLeft, JavascriptString * pstRight) { Assert(pstLeft); - Assert(CompoundString::Is(pstLeft)); + Assert(VarIs(pstLeft)); Assert(pstRight); #ifdef PROFILE_STRINGS @@ -623,7 +610,7 @@ namespace Js // This is not a left-dead concat, but we can reuse available space in the left string // because it may be accessible by script code, append to a clone. const bool needAppend = pstRight->GetLength() != 0; - CompoundString *const leftCs = CompoundString::FromVar(pstLeft)->Clone(needAppend); + CompoundString *const leftCs = VarTo(pstLeft)->Clone(needAppend); if(needAppend) { leftCs->Append(pstRight); @@ -710,6 +697,70 @@ namespace Js return builder.ToString(); } + + // Relative indexing proposal + // String.prototype.at(index): https://tc39.es/proposal-relative-indexing-method/#sec-string.prototype.at + // Spec: https://tc39.es/proposal-relative-indexing-method + // Github: https://github.com/tc39/proposal-relative-indexing-method + Var JavascriptString::EntryAt(RecyclableObject* function, CallInfo callInfo, ...) { + PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); + + ARGUMENTS(args, callInfo); + ScriptContext* scriptContext = function->GetScriptContext(); + JS_REENTRANCY_LOCK(jsReentLock, scriptContext->GetThreadContext()); + + Assert(!(callInfo.Flags & CallFlags_New)); + + JavascriptString * pThis = nullptr; + + // 1. Let O be ? RequireObjectCoercible(this value). + // 2. Let S be ? ToString(O). + JS_REENTRANT(jsReentLock, GetThisStringArgument(args, scriptContext, _u("String.prototype.at"), &pThis)); + + // 3. Let len be the length of S. + charcount_t len = pThis->GetLength(); + + // 4. Let relativeIndex be ? ToInteger(index). + int64_t relativeIndex = 0; + + if (args.Info.Count > 1) + { + JS_REENTRANT(jsReentLock, relativeIndex = NumberUtilities::TryToInt64(JavascriptConversion::ToInteger(args[1], scriptContext))); + } + + // 5. If relativeIndex >= 0, then + // a. Let k be relativeIndex. + // 6. Else, + // a. Let k be len + relativeIndex. + int64_t k = relativeIndex; + + if (relativeIndex < 0) + { + k += len; + } + + // 7. If k < 0 or k >= len, then return undefined. + if (k < 0 || k >= (int64_t)len) + { + return scriptContext->GetLibrary()->GetUndefined(); + } + + Var value; + // 8. Return the String value consisting of only the code unit at position k in S. + if (pThis->GetItemAt((charcount_t)k, &value)) + { +#ifdef ENABLE_SPECTRE_RUNTIME_MITIGATIONS + value = BreakSpeculation(value); +#endif + return value; + } + else + { + // Yes, i except this to be + return scriptContext->GetLibrary()->GetUndefined(); + } + } + Var JavascriptString::EntryCharAt(RecyclableObject* function, CallInfo callInfo, ...) { PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); @@ -747,7 +798,9 @@ namespace Js Var value; if (pThis->GetItemAt(idxPosition, &value)) { +#ifdef ENABLE_SPECTRE_RUNTIME_MITIGATIONS value = BreakSpeculation(value); +#endif return value; } else @@ -796,7 +849,11 @@ namespace Js return scriptContext->GetLibrary()->GetNaN(); } - return BreakSpeculation(TaggedInt::ToVarUnchecked(pThis->GetItem(idxPosition))); + Var charCode = TaggedInt::ToVarUnchecked(pThis->GetItem(idxPosition)); +#ifdef ENABLE_SPECTRE_RUNTIME_MITIGATIONS + charCode = BreakSpeculation(charCode); +#endif + return charCode; } Var JavascriptString::EntryCodePointAt(RecyclableObject* function, CallInfo callInfo, ...) @@ -1065,7 +1122,7 @@ namespace Js if (args.Info.Count > 2) { - if (JavascriptOperators::IsUndefinedObject(args[2], scriptContext)) + if (JavascriptOperators::IsUndefinedObject(args[2])) { position = 0; } @@ -1622,7 +1679,7 @@ namespace Js JavascriptString * pMatch = nullptr; JavascriptString * pReplace = nullptr; - JavascriptFunction* replacefn = nullptr; + RecyclableObject* replacefn = nullptr; SearchValueHelper(scriptContext, ((args.Info.Count > 1)?args[1]:scriptContext->GetLibrary()->GetNull()), &pRegEx, &pMatch); ReplaceValueHelper(scriptContext, ((args.Info.Count > 2) ? args[2] : scriptContext->GetLibrary()->GetUndefined()), &replacefn, &pReplace); @@ -1661,13 +1718,13 @@ namespace Js // When the config is enabled, the operation is handled by a Symbol function (e.g. Symbol.replace). if (!scriptContext->GetConfig()->IsES6RegExSymbolsEnabled() - && JavascriptRegExp::Is(aValue)) + && VarIs(aValue)) { - *ppSearchRegEx = JavascriptRegExp::FromVar(aValue); + *ppSearchRegEx = VarTo(aValue); } - else if (JavascriptString::Is(aValue)) + else if (VarIs(aValue)) { - *ppSearchString = JavascriptString::FromVar(aValue); + *ppSearchString = VarTo(aValue); } else { @@ -1675,18 +1732,18 @@ namespace Js } } - void JavascriptString::ReplaceValueHelper(ScriptContext* scriptContext, Var aValue, JavascriptFunction ** ppReplaceFn, JavascriptString ** ppReplaceString) + void JavascriptString::ReplaceValueHelper(ScriptContext* scriptContext, Var aValue, RecyclableObject ** ppReplaceFn, JavascriptString ** ppReplaceString) { *ppReplaceFn = nullptr; *ppReplaceString = nullptr; - if (JavascriptFunction::Is(aValue)) + if (JavascriptConversion::IsCallable(aValue)) { - *ppReplaceFn = JavascriptFunction::FromVar(aValue); + *ppReplaceFn = VarTo(aValue); } - else if (JavascriptString::Is(aValue)) + else if (VarIs(aValue)) { - *ppReplaceString = JavascriptString::FromVar(aValue); + *ppReplaceString = VarTo(aValue); } else { @@ -1768,7 +1825,7 @@ namespace Js JavascriptError::ThrowTypeError(scriptContext, JSERR_FunctionArgument_Invalid, varName); } - RecyclableObject* fnObj = RecyclableObject::UnsafeFromVar(fn); + RecyclableObject* fnObj = UnsafeVarTo(fn); return CallRegExFunction(fnObj, regExp, args, scriptContext); } @@ -1821,10 +1878,10 @@ namespace Js if (args.Info.Count > 1) { - idxStart = JavascriptOperators::IsUndefinedObject(args[1], scriptContext) ? 0 : ConvertToIndex(args[1], scriptContext); + idxStart = JavascriptOperators::IsUndefinedObject(args[1]) ? 0 : ConvertToIndex(args[1], scriptContext); if (args.Info.Count > 2) { - idxEnd = JavascriptOperators::IsUndefinedObject(args[2], scriptContext) ? len : ConvertToIndex(args[2], scriptContext); + idxEnd = JavascriptOperators::IsUndefinedObject(args[2]) ? len : ConvertToIndex(args[2], scriptContext); } } @@ -1851,7 +1908,9 @@ namespace Js idxEnd = idxStart; } +#ifdef ENABLE_SPECTRE_RUNTIME_MITIGATIONS pThis = (JavascriptString*)BreakSpeculation(pThis); +#endif return SubstringCore(pThis, idxStart, idxEnd - idxStart, scriptContext); } @@ -1887,7 +1946,7 @@ namespace Js else { uint32 limit; - if (args.Info.Count < 3 || JavascriptOperators::IsUndefinedObject(args[2], scriptContext)) + if (args.Info.Count < 3 || JavascriptOperators::IsUndefinedObject(args[2])) { limit = UINT_MAX; } @@ -1898,9 +1957,9 @@ namespace Js // When the config is enabled, the operation is handled by RegExp.prototype[@@split]. if (!scriptContext->GetConfig()->IsES6RegExSymbolsEnabled() - && JavascriptRegExp::Is(args[1])) + && VarIs(args[1])) { - return RegexHelper::RegexSplit(scriptContext, JavascriptRegExp::UnsafeFromVar(args[1]), input, limit, + return RegexHelper::RegexSplit(scriptContext, UnsafeVarTo(args[1]), input, limit, RegexHelper::IsResultNotUsed(callInfo.Flags)); } else @@ -1949,10 +2008,10 @@ namespace Js if (args.Info.Count > 1) { - idxStart = JavascriptOperators::IsUndefinedObject(args[1], scriptContext) ? 0 : ConvertToIndex(args[1], scriptContext); + idxStart = JavascriptOperators::IsUndefinedObject(args[1]) ? 0 : ConvertToIndex(args[1], scriptContext); if (args.Info.Count > 2) { - idxEnd = JavascriptOperators::IsUndefinedObject(args[2], scriptContext) ? len : ConvertToIndex(args[2], scriptContext); + idxEnd = JavascriptOperators::IsUndefinedObject(args[2]) ? len : ConvertToIndex(args[2], scriptContext); } } @@ -1972,7 +2031,9 @@ namespace Js return pThis; } +#ifdef ENABLE_SPECTRE_RUNTIME_MITIGATIONS pThis = (JavascriptString*)BreakSpeculation(pThis); +#endif return SubstringCore(pThis, idxStart, idxEnd - idxStart, scriptContext); } @@ -1996,10 +2057,10 @@ namespace Js if (args.Info.Count > 1) { - idxStart = JavascriptOperators::IsUndefinedObject(args[1], scriptContext) ? 0 : ConvertToIndex(args[1], scriptContext); + idxStart = JavascriptOperators::IsUndefinedObject(args[1]) ? 0 : ConvertToIndex(args[1], scriptContext); if (args.Info.Count > 2) { - idxEnd = JavascriptOperators::IsUndefinedObject(args[2], scriptContext) ? len : ConvertToIndex(args[2], scriptContext); + idxEnd = JavascriptOperators::IsUndefinedObject(args[2]) ? len : ConvertToIndex(args[2], scriptContext); } } if (idxStart < 0) @@ -2030,7 +2091,9 @@ namespace Js return pThis; } +#ifdef ENABLE_SPECTRE_RUNTIME_MITIGATIONS pThis = (JavascriptString*)BreakSpeculation(pThis); +#endif Assert(0 <= idxStart && idxStart <= idxEnd && idxEnd <= len); return SubstringCore(pThis, idxStart, idxEnd - idxStart, scriptContext); @@ -2090,13 +2153,8 @@ namespace Js return mainString; } - if (maxLength > JavascriptString::MaxCharLength) - { - JavascriptError::ThrowRangeError(scriptContext, JSERR_OutOfBoundString); - } - JavascriptString * fillerString = nullptr; - if (args.Info.Count > 2 && !JavascriptOperators::IsUndefinedObject(args[2], scriptContext)) + if (args.Info.Count > 2 && !JavascriptOperators::IsUndefinedObject(args[2])) { JavascriptString *argStr = JavascriptConversion::ToString(args[2], scriptContext); if (argStr->GetLength() > 0) @@ -2109,6 +2167,11 @@ namespace Js } } + if (maxLength > JavascriptString::MaxCharLength) + { + JavascriptError::ThrowRangeError(scriptContext, JSERR_OutOfBoundString); + } + if (fillerString == nullptr) { fillerString = NewWithBuffer(_u(" "), 1, scriptContext); @@ -2207,7 +2270,7 @@ namespace Js if (JavascriptOperators::GetTypeId(args[0]) == TypeIds_HostDispatch) { Var result; - if (RecyclableObject::UnsafeFromVar(args[0])->InvokeBuiltInOperationRemotely(EntryToString, args, &result)) + if (UnsafeVarTo(args[0])->InvokeBuiltInOperationRemotely(EntryToString, args, &result)) { return result; } @@ -2384,7 +2447,7 @@ namespace Js return TrimLeftRightHelper(pThis, scriptContext); } - Var JavascriptString::EntryTrimLeft(RecyclableObject* function, CallInfo callInfo, ...) + Var JavascriptString::EntryTrimStart(RecyclableObject* function, CallInfo callInfo, ...) { PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); @@ -2405,8 +2468,7 @@ namespace Js return TrimLeftRightHelper< true /*trimLeft*/, false /*trimRight*/>(pThis, scriptContext); } - - Var JavascriptString::EntryTrimRight(RecyclableObject* function, CallInfo callInfo, ...) + Var JavascriptString::EntryTrimEnd(RecyclableObject* function, CallInfo callInfo, ...) { PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); @@ -2512,9 +2574,18 @@ namespace Js if (args.Info.Count > 1) { - if (!JavascriptOperators::IsUndefinedObject(args[1], scriptContext)) + if (TaggedInt::Is(args[1])) { - double countDbl = JavascriptConversion::ToInteger(args[1], scriptContext); + int32 signedCount = TaggedInt::ToInt32(args[1]); + if (signedCount < 0) + { + JavascriptError::ThrowRangeError(scriptContext, JSERR_ArgumentOutOfRange, _u("String.prototype.repeat")); + } + count = (uint32) signedCount; + } + else if (!JavascriptOperators::IsUndefinedObject(args[1])) + { + double countDbl = JavascriptConversion::ToInteger_Full(args[1], scriptContext); if (JavascriptNumber::IsPosInf(countDbl) || countDbl < 0.0) { JavascriptError::ThrowRangeError(scriptContext, JSERR_ArgumentOutOfRange, _u("String.prototype.repeat")); @@ -2545,7 +2616,14 @@ namespace Js const char16* currentRawString = currentString->GetString(); charcount_t currentLength = currentString->GetLength(); - charcount_t finalBufferCount = UInt32Math::Add(UInt32Math::Mul(count, currentLength), 1); + charcount_t finalBufferCount = 0; + bool hasOverflow = UInt32Math::Mul(count, currentLength, &finalBufferCount); + if (hasOverflow || !IsValidCharCount(finalBufferCount)) + { + JavascriptError::ThrowRangeError(scriptContext, JSERR_OutOfBoundString); + } + finalBufferCount = finalBufferCount + 1; + char16* buffer = RecyclerNewArrayLeaf(scriptContext->GetRecycler(), char16, finalBufferCount); if (currentLength == 1) @@ -2603,7 +2681,7 @@ namespace Js if (args.Info.Count > 2) { - if (!JavascriptOperators::IsUndefinedObject(args[2], scriptContext)) + if (!JavascriptOperators::IsUndefinedObject(args[2])) { startPosition = ConvertToIndex(args[2], scriptContext); // this is to adjust corner cases like MAX_VALUE startPosition = min(max(startPosition, 0), thisStrLen); @@ -2658,7 +2736,7 @@ namespace Js if (args.Info.Count > 2) { - if (!JavascriptOperators::IsUndefinedObject(args[2], scriptContext)) + if (!JavascriptOperators::IsUndefinedObject(args[2])) { endPosition = ConvertToIndex(args[2], scriptContext); // this is to adjust corner cases like MAX_VALUE endPosition = min(max(endPosition, 0), thisStrLen); @@ -2722,7 +2800,7 @@ namespace Js if (JavascriptOperators::GetTypeId(args[0]) == TypeIds_HostDispatch) { Var result; - if (RecyclableObject::UnsafeFromVar(args[0])->InvokeBuiltInOperationRemotely(EntryValueOf, args, &result)) + if (UnsafeVarTo(args[0])->InvokeBuiltInOperationRemotely(EntryValueOf, args, &result)) { return result; } @@ -2970,7 +3048,7 @@ namespace Js return JavascriptNumber::ToVar(value, this->GetScriptContext()); } - BigInt bi; + BigUInt bi; for ( ; pch < pchEnd ; pch++) { char16 ch = *pch; @@ -3096,10 +3174,10 @@ namespace Js // bool JavascriptString::LessThan(Var aLeft, Var aRight) { - AssertMsg(JavascriptString::Is(aLeft) && JavascriptString::Is(aRight), "string LessThan"); + AssertMsg(VarIs(aLeft) && VarIs(aRight), "string LessThan"); - JavascriptString *leftString = JavascriptString::FromVar(aLeft); - JavascriptString *rightString = JavascriptString::FromVar(aRight); + JavascriptString *leftString = VarTo(aLeft); + JavascriptString *rightString = VarTo(aRight); if (JavascriptString::strcmp(leftString, rightString) < 0) { @@ -3114,20 +3192,20 @@ namespace Js Assert(pString); // 1. If Type(value) is String, return value. - if (JavascriptString::Is(aValue)) + if (VarIs(aValue)) { - *pString = JavascriptString::FromVar(aValue); + *pString = VarTo(aValue); return TRUE; } // 2. If Type(value) is Object and value has a [[StringData]] internal slot - else if ( JavascriptStringObject::Is(aValue)) + else if ( VarIs(aValue)) { - JavascriptStringObject* pStringObj = JavascriptStringObject::FromVar(aValue); + JavascriptStringObject* pStringObj = VarTo(aValue); // a. Let s be the value of value's [[StringData]] internal slot. // b. If s is not undefined, then return s. *pString = pStringObj->Unwrap(); - *pString = JavascriptString::FromVar(CrossSite::MarshalVar(scriptContext, + *pString = VarTo(CrossSite::MarshalVar(scriptContext, *pString, pStringObj->GetScriptContext())); return TRUE; } @@ -3175,8 +3253,8 @@ namespace Js // // pszProp = _u("href"); // pszTag = _u("a"); - // pThis = JavascriptString::FromVar(args[0]); - // pPropertyValue = JavascriptString::FromVar(args[1]); + // pThis = VarTo(args[0]); + // pPropertyValue = VarTo(args[1]); // // pResult = _u("[[pThis]]"); // diff --git a/lib/Runtime/Library/JavascriptString.h b/lib/Runtime/Library/JavascriptString.h index 696b4df06c3..30cc4b60865 100644 --- a/lib/Runtime/Library/JavascriptString.h +++ b/lib/Runtime/Library/JavascriptString.h @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #pragma once @@ -80,7 +81,7 @@ namespace Js virtual void const * GetOriginalStringReference(); // Get the allocated object that owns the original full string buffer #if ENABLE_TTD - //Get the associated property id for this string if there is on (e.g. it is a propertystring otherwise return Js::PropertyIds::_none) + //Get the associated property id for this string if there is one (e.g. it is a propertystring otherwise return Js::PropertyIds::_none) virtual Js::PropertyId TryGetAssociatedPropertyId() const { return Js::PropertyIds::_none; } #endif @@ -133,9 +134,6 @@ namespace Js virtual BOOL BufferEquals(__in_ecount(otherLength) LPCWSTR otherBuffer, __in charcount_t otherLength); char16* GetNormalizedString(PlatformAgnostic::UnicodeText::NormalizationForm, ArenaAllocator*, charcount_t&); - static bool Is(Var aValue); - static JavascriptString* FromVar(Var aValue); - static JavascriptString* UnsafeFromVar(Var aValue); static bool Equals(JavascriptString* aLeft, JavascriptString* aRight); static bool LessThan(Var aLeft, Var aRight); static bool IsNegZero(JavascriptString *string); @@ -219,6 +217,7 @@ namespace Js { public: static FunctionInfo NewInstance; + static FunctionInfo At; static FunctionInfo CharAt; static FunctionInfo CharCodeAt; static FunctionInfo CodePointAt; @@ -244,7 +243,9 @@ namespace Js static FunctionInfo ToUpperCase; static FunctionInfo Trim; static FunctionInfo TrimLeft; + static FunctionInfo TrimStart; static FunctionInfo TrimRight; + static FunctionInfo TrimEnd; static FunctionInfo Repeat; static FunctionInfo StartsWith; static FunctionInfo EndsWith; @@ -263,6 +264,7 @@ namespace Js }; static Var NewInstance(RecyclableObject* function, CallInfo callInfo, ...); + static Var EntryAt(RecyclableObject* function, CallInfo callInfo, ...); static Var EntryCharAt(RecyclableObject* function, CallInfo callInfo, ...); static Var EntryCharCodeAt(RecyclableObject* function, CallInfo callInfo, ...); static Var EntryCodePointAt(RecyclableObject* function, CallInfo callInfo, ...); @@ -287,8 +289,8 @@ namespace Js static Var EntryToString(RecyclableObject* function, CallInfo callInfo, ...); static Var EntryToUpperCase(RecyclableObject* function, CallInfo callInfo, ...); static Var EntryTrim(RecyclableObject* function, CallInfo callInfo, ...); - static Var EntryTrimLeft(RecyclableObject* function, CallInfo callInfo, ...); - static Var EntryTrimRight(RecyclableObject* function, CallInfo callInfo, ...); + static Var EntryTrimStart(RecyclableObject* function, CallInfo callInfo, ...); + static Var EntryTrimEnd(RecyclableObject* function, CallInfo callInfo, ...); static Var EntryRepeat(RecyclableObject* function, CallInfo callInfo, ...); static Var EntryStartsWith(RecyclableObject* function, CallInfo callInfo, ...); static Var EntryEndsWith(RecyclableObject* function, CallInfo callInfo, ...); @@ -335,7 +337,7 @@ namespace Js static Var StringBracketHelper(Arguments args, ScriptContext *scriptContext, const char16 (&tag)[N1], const char16 (&prop)[N2]); static void SearchValueHelper(ScriptContext* scriptContext, Var aValue, JavascriptRegExp ** ppSearchRegEx, JavascriptString ** ppSearchString); - static void ReplaceValueHelper(ScriptContext* scriptContext, Var aValue, JavascriptFunction ** ppReplaceFn, JavascriptString ** ppReplaceString); + static void ReplaceValueHelper(ScriptContext* scriptContext, Var aValue, RecyclableObject** ppReplaceFn, JavascriptString ** ppReplaceString); template static JavascriptString* ToLocaleCaseHelper(JavascriptString* thisObj); @@ -356,6 +358,8 @@ namespace Js static Var CallRegExFunction(RecyclableObject* fnObj, Var regExp, Arguments& args, ScriptContext *scriptContext); }; + template <> bool VarIsImpl(RecyclableObject* obj); + template<> struct PropertyRecordStringHashComparer { diff --git a/lib/Runtime/Library/JavascriptStringIterator.cpp b/lib/Runtime/Library/JavascriptStringIterator.cpp index de9d18c745a..4153987095a 100644 --- a/lib/Runtime/Library/JavascriptStringIterator.cpp +++ b/lib/Runtime/Library/JavascriptStringIterator.cpp @@ -14,26 +14,6 @@ namespace Js Assert(type->GetTypeId() == TypeIds_StringIterator); } - bool JavascriptStringIterator::Is(Var aValue) - { - TypeId typeId = JavascriptOperators::GetTypeId(aValue); - return typeId == TypeIds_StringIterator; - } - - JavascriptStringIterator* JavascriptStringIterator::FromVar(Var aValue) - { - AssertOrFailFastMsg(Is(aValue), "Ensure var is actually a 'JavascriptStringIterator'"); - - return static_cast(aValue); - } - - JavascriptStringIterator* JavascriptStringIterator::UnsafeFromVar(Var aValue) - { - AssertMsg(Is(aValue), "Ensure var is actually a 'JavascriptStringIterator'"); - - return static_cast(aValue); - } - Var JavascriptStringIterator::EntryNext(RecyclableObject* function, CallInfo callInfo, ...) { PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); @@ -46,17 +26,17 @@ namespace Js Var thisObj = args[0]; - if (!JavascriptStringIterator::Is(thisObj)) + if (!VarIs(thisObj)) { JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedStringIterator, _u("String Iterator.prototype.next")); } - JavascriptStringIterator* iterator = JavascriptStringIterator::FromVar(thisObj); + JavascriptStringIterator* iterator = VarTo(thisObj); JavascriptString* string = iterator->m_string; if (string == nullptr) { - return library->CreateIteratorResultObjectUndefinedTrue(); + return library->CreateIteratorResultObjectDone(); } charcount_t length = string->GetLength(); @@ -67,7 +47,7 @@ namespace Js // Nulling out the m_string field is important so that the iterator // does not keep the string alive after iteration is completed. iterator->m_string = nullptr; - return library->CreateIteratorResultObjectUndefinedTrue(); + return library->CreateIteratorResultObjectDone(); } char16 chFirst = string->GetItem(index); @@ -86,6 +66,6 @@ namespace Js iterator->m_nextIndex += 2; } - return library->CreateIteratorResultObjectValueFalse(result); + return library->CreateIteratorResultObject(result); } } // namespace Js diff --git a/lib/Runtime/Library/JavascriptStringIterator.h b/lib/Runtime/Library/JavascriptStringIterator.h index bf3ae4b0f9f..f2087e8bc4f 100644 --- a/lib/Runtime/Library/JavascriptStringIterator.h +++ b/lib/Runtime/Library/JavascriptStringIterator.h @@ -19,10 +19,6 @@ namespace Js public: JavascriptStringIterator(DynamicType* type, JavascriptString* string); - static bool Is(Var aValue); - static JavascriptStringIterator* FromVar(Var aValue); - static JavascriptStringIterator* UnsafeFromVar(Var aValue); - class EntryInfo { public: @@ -34,4 +30,9 @@ namespace Js public: JavascriptString* GetStringForHeapEnum() { return m_string; } }; + + template <> inline bool VarIsImpl(RecyclableObject* obj) + { + return JavascriptOperators::GetTypeId(obj) == TypeIds_StringIterator; + } } // namespace Js diff --git a/lib/Runtime/Library/JavascriptStringObject.cpp b/lib/Runtime/Library/JavascriptStringObject.cpp index 7740918fb2d..69a41f9a171 100644 --- a/lib/Runtime/Library/JavascriptStringObject.cpp +++ b/lib/Runtime/Library/JavascriptStringObject.cpp @@ -37,25 +37,6 @@ namespace Js } } - bool JavascriptStringObject::Is(Var aValue) - { - return JavascriptOperators::GetTypeId(aValue) == TypeIds_StringObject; - } - - JavascriptStringObject* JavascriptStringObject::FromVar(Var aValue) - { - AssertOrFailFastMsg(Is(aValue), "Ensure var is actually a 'JavascriptString'"); - - return static_cast(aValue); - } - - JavascriptStringObject* JavascriptStringObject::UnsafeFromVar(Var aValue) - { - AssertMsg(Is(aValue), "Ensure var is actually a 'JavascriptString'"); - - return static_cast(aValue); - } - void JavascriptStringObject::Initialize(JavascriptString* value) { Assert(this->value == nullptr); @@ -254,7 +235,7 @@ namespace Js if (scriptContext->IsNumericPropertyId(propertyId, &index)) { JavascriptString* str = this->InternalUnwrap(); - str = JavascriptString::FromVar(CrossSite::MarshalVar(requestContext, str, scriptContext)); + str = VarTo(CrossSite::MarshalVar(requestContext, str, scriptContext)); return JavascriptConversion::BooleanToPropertyQueryFlags(str->GetItemAt(index, value)); } @@ -365,7 +346,7 @@ namespace Js Var strObject = CrossSite::MarshalVar(requestContext, this->InternalUnwrap(), this->GetScriptContext()); - JavascriptString* str = JavascriptString::FromVar(strObject); + JavascriptString* str = VarTo(strObject); if (str->GetItemAt(index, value)) { return PropertyQueryFlags::Property_Found; @@ -420,7 +401,7 @@ namespace Js #if ENABLE_TTD void JavascriptStringObject::SetValue_TTD(Js::Var val) { - AssertMsg(val == nullptr || Js::JavascriptString::Is(val), "Only legal values!"); + AssertMsg(val == nullptr || Js::VarIs(val), "Only legal values!"); this->value = static_cast(val); } diff --git a/lib/Runtime/Library/JavascriptStringObject.h b/lib/Runtime/Library/JavascriptStringObject.h index bc87db3f714..aeb0266e6e9 100644 --- a/lib/Runtime/Library/JavascriptStringObject.h +++ b/lib/Runtime/Library/JavascriptStringObject.h @@ -27,9 +27,6 @@ namespace Js public: JavascriptStringObject(DynamicType * type); JavascriptStringObject(JavascriptString* value, DynamicType * type); - static bool Is(Var aValue); - static JavascriptStringObject* FromVar(Var aValue); - static JavascriptStringObject* UnsafeFromVar(Var aValue); void Initialize(JavascriptString* value); JavascriptString* Unwrap() { return InternalUnwrap(); } @@ -72,4 +69,9 @@ namespace Js virtual void ExtractSnapObjectDataInto(TTD::NSSnapObjects::SnapObject* objData, TTD::SlabAllocator& alloc) override; #endif }; + + template <> inline bool VarIsImpl(RecyclableObject* obj) + { + return JavascriptOperators::GetTypeId(obj) == TypeIds_StringObject; + } } diff --git a/lib/Runtime/Library/JavascriptSymbol.cpp b/lib/Runtime/Library/JavascriptSymbol.cpp index dffe6a7662d..054083d48fb 100644 --- a/lib/Runtime/Library/JavascriptSymbol.cpp +++ b/lib/Runtime/Library/JavascriptSymbol.cpp @@ -11,25 +11,6 @@ namespace Js return &this->propertyRecordUsageCache; } - bool JavascriptSymbol::Is(Var aValue) - { - return JavascriptOperators::GetTypeId(aValue) == TypeIds_Symbol; - } - - JavascriptSymbol* JavascriptSymbol::FromVar(Js::Var aValue) - { - AssertOrFailFastMsg(Is(aValue), "Ensure var is actually a 'JavascriptSymbol'"); - - return static_cast(aValue); - } - - JavascriptSymbol* JavascriptSymbol::UnsafeFromVar(Js::Var aValue) - { - AssertMsg(Is(aValue), "Ensure var is actually a 'JavascriptSymbol'"); - - return static_cast(aValue); - } - Var JavascriptSymbol::NewInstance(RecyclableObject* function, CallInfo callInfo, ...) { PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); @@ -73,13 +54,13 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (JavascriptSymbol::Is(args[0])) + if (VarIs(args[0])) { return args[0]; } - else if (JavascriptSymbolObject::Is(args[0])) + else if (VarIs(args[0])) { - JavascriptSymbolObject* obj = JavascriptSymbolObject::FromVar(args[0]); + JavascriptSymbolObject* obj = VarTo(args[0]); return CrossSite::MarshalVar(scriptContext, obj->Unwrap(), obj->GetScriptContext()); } else @@ -101,13 +82,13 @@ namespace Js const PropertyRecord* val; Var aValue = args[0]; - if (JavascriptSymbol::Is(aValue)) + if (VarIs(aValue)) { - val = JavascriptSymbol::FromVar(aValue)->GetValue(); + val = VarTo(aValue)->GetValue(); } - else if (JavascriptSymbolObject::Is(aValue)) + else if (VarIs(aValue)) { - val = JavascriptSymbolObject::FromVar(aValue)->GetValue(); + val = VarTo(aValue)->GetValue(); } else { @@ -170,12 +151,12 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count < 2 || !JavascriptSymbol::Is(args[1])) + if (args.Info.Count < 2 || !VarIs(args[1])) { JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedSymbol, _u("Symbol.keyFor")); } - JavascriptSymbol* sym = JavascriptSymbol::FromVar(args[1]); + JavascriptSymbol* sym = VarTo(args[1]); const Js::PropertyRecord* symPropertyRecord = sym->GetValue(); const char16* key = symPropertyRecord->GetBuffer(); const charcount_t keyLength = symPropertyRecord->GetLength(); @@ -206,13 +187,13 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (JavascriptSymbol::Is(args[0])) + if (VarIs(args[0])) { return args[0]; } - else if (JavascriptSymbolObject::Is(args[0])) + else if (VarIs(args[0])) { - JavascriptSymbolObject* obj = JavascriptSymbolObject::FromVar(args[0]); + JavascriptSymbolObject* obj = VarTo(args[0]); return CrossSite::MarshalVar(scriptContext, obj->Unwrap(), obj->GetScriptContext()); } else @@ -221,6 +202,35 @@ namespace Js } } + // Symbol.prototype.description + Var JavascriptSymbol::EntryDescription(RecyclableObject* function, CallInfo callInfo, ...) + { + PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); + + ARGUMENTS(args, callInfo); + AssertMsg(args.Info.Count, "Should always have implicit 'this'."); + ScriptContext* scriptContext = function->GetScriptContext(); + + Assert(!(callInfo.Flags & CallFlags_New)); + + const PropertyRecord* val; + Var aValue = args[0]; + if (VarIs(aValue)) + { + val = VarTo(aValue)->GetValue(); + } + else if (VarIs(aValue)) + { + val = VarTo(aValue)->GetValue(); + } + else + { + return TryInvokeRemotelyOrThrow(EntryDescription, scriptContext, args, JSERR_This_NeedSymbol, _u("Symbol.prototype.description")); + } + + return scriptContext->GetPropertyString(val->GetPropertyId()); + } + RecyclableObject * JavascriptSymbol::CloneToScriptContext(ScriptContext* requestContext) { // PropertyRecords are per-ThreadContext so we can just create a new primitive wrapper @@ -233,7 +243,7 @@ namespace Js if (JavascriptOperators::GetTypeId(args[0]) == TypeIds_HostDispatch) { Var result; - if (RecyclableObject::FromVar(args[0])->InvokeBuiltInOperationRemotely(entryPoint, args, &result)) + if (VarTo(args[0])->InvokeBuiltInOperationRemotely(entryPoint, args, &result)) { return result; } @@ -266,12 +276,12 @@ namespace Js switch (typeId) { case TypeIds_Symbol: - *value = left == JavascriptSymbol::UnsafeFromVar(right); - Assert((left->GetValue() == JavascriptSymbol::UnsafeFromVar(right)->GetValue()) == *value); + *value = left == UnsafeVarTo(right); + Assert((left->GetValue() == UnsafeVarTo(right)->GetValue()) == *value); break; case TypeIds_SymbolObject: - *value = left == JavascriptSymbol::UnsafeFromVar(JavascriptSymbolObject::UnsafeFromVar(right)->Unwrap()); - Assert((left->GetValue() == JavascriptSymbolObject::UnsafeFromVar(right)->GetValue()) == *value); + *value = left == UnsafeVarTo(UnsafeVarTo(right)->Unwrap()); + Assert((left->GetValue() == UnsafeVarTo(right)->GetValue()) == *value); break; default: *value = FALSE; diff --git a/lib/Runtime/Library/JavascriptSymbol.h b/lib/Runtime/Library/JavascriptSymbol.h index 06595fb5c9f..97074b17d13 100644 --- a/lib/Runtime/Library/JavascriptSymbol.h +++ b/lib/Runtime/Library/JavascriptSymbol.h @@ -27,9 +27,6 @@ namespace Js static uint32 GetOffsetOfLdElemInlineCache() { return offsetof(JavascriptSymbol, propertyRecordUsageCache) + PropertyRecordUsageCache::GetOffsetOfLdElemInlineCache(); } static uint32 GetOffsetOfStElemInlineCache() { return offsetof(JavascriptSymbol, propertyRecordUsageCache) + PropertyRecordUsageCache::GetOffsetOfStElemInlineCache(); } static uint32 GetOffsetOfHitRate() { return offsetof(JavascriptSymbol, propertyRecordUsageCache) + PropertyRecordUsageCache::GetOffsetOfHitRate(); } - static bool Is(Var aValue); - static JavascriptSymbol* FromVar(Var aValue); - static JavascriptSymbol* UnsafeFromVar(Var aValue); class EntryInfo { @@ -39,6 +36,7 @@ namespace Js static FunctionInfo ToString; static FunctionInfo For; static FunctionInfo KeyFor; + static FunctionInfo Description; static FunctionInfo SymbolToPrimitive; }; @@ -49,6 +47,7 @@ namespace Js static Var EntryFor(RecyclableObject* function, CallInfo callInfo, ...); static Var EntryKeyFor(RecyclableObject* function, CallInfo callInfo, ...); static Var EntrySymbolToPrimitive(RecyclableObject* function, CallInfo callInfo, ...); + static Var EntryDescription(RecyclableObject* function, CallInfo callInfo, ...); virtual BOOL Equals(Var other, BOOL* value, ScriptContext * requestContext) override; virtual BOOL GetDiagValueString(StringBuilder* stringBuilder, ScriptContext* requestContext) override; @@ -65,4 +64,9 @@ namespace Js static BOOL Equals(JavascriptSymbol* left, Var right, BOOL* value, ScriptContext * requestContext); static Var TryInvokeRemotelyOrThrow(JavascriptMethod entryPoint, ScriptContext * scriptContext, Arguments & args, int32 errorCode, PCWSTR varName); }; + + template <> inline bool VarIsImpl(RecyclableObject* obj) + { + return JavascriptOperators::GetTypeId(obj) == TypeIds_Symbol; + } } diff --git a/lib/Runtime/Library/JavascriptSymbolObject.cpp b/lib/Runtime/Library/JavascriptSymbolObject.cpp index d254bd3a7c1..2584b60b53d 100644 --- a/lib/Runtime/Library/JavascriptSymbolObject.cpp +++ b/lib/Runtime/Library/JavascriptSymbolObject.cpp @@ -12,25 +12,6 @@ namespace Js Assert(type->GetTypeId() == TypeIds_SymbolObject); } - bool JavascriptSymbolObject::Is(Var aValue) - { - return JavascriptOperators::GetTypeId(aValue) == TypeIds_SymbolObject; - } - - JavascriptSymbolObject* JavascriptSymbolObject::FromVar(Js::Var aValue) - { - AssertOrFailFastMsg(Is(aValue), "Ensure var is actually a 'JavascriptSymbolObject'"); - - return static_cast(aValue); - } - - JavascriptSymbolObject* JavascriptSymbolObject::UnsafeFromVar(Js::Var aValue) - { - AssertMsg(Is(aValue), "Ensure var is actually a 'JavascriptSymbolObject'"); - - return static_cast(aValue); - } - Var JavascriptSymbolObject::Unwrap() const { return value; @@ -54,7 +35,7 @@ namespace Js #if ENABLE_TTD void JavascriptSymbolObject::SetValue_TTD(Js::Var val) { - AssertMsg(val == nullptr || Js::JavascriptSymbol::Is(val), "Only allowable values!"); + AssertMsg(val == nullptr || Js::VarIs(val), "Only allowable values!"); this->value = static_cast(val); } diff --git a/lib/Runtime/Library/JavascriptSymbolObject.h b/lib/Runtime/Library/JavascriptSymbolObject.h index 19f4ae2559d..6983b00a51b 100644 --- a/lib/Runtime/Library/JavascriptSymbolObject.h +++ b/lib/Runtime/Library/JavascriptSymbolObject.h @@ -16,9 +16,6 @@ namespace Js public: JavascriptSymbolObject(JavascriptSymbol* value, DynamicType * type); - static bool Is(Var aValue); - static JavascriptSymbolObject* FromVar(Js::Var aValue); - static JavascriptSymbolObject* UnsafeFromVar(Js::Var aValue); inline const PropertyRecord* GetValue() { @@ -44,4 +41,9 @@ namespace Js virtual void ExtractSnapObjectDataInto(TTD::NSSnapObjects::SnapObject* objData, TTD::SlabAllocator& alloc) override; #endif }; + + template <> inline bool VarIsImpl(RecyclableObject* obj) + { + return JavascriptOperators::GetTypeId(obj) == TypeIds_SymbolObject; + } } diff --git a/lib/Runtime/Library/JavascriptTypedNumber.cpp b/lib/Runtime/Library/JavascriptTypedNumber.cpp index 76591918ac9..16ff9fdd37f 100644 --- a/lib/Runtime/Library/JavascriptTypedNumber.cpp +++ b/lib/Runtime/Library/JavascriptTypedNumber.cpp @@ -34,7 +34,7 @@ namespace Js JavascriptString* JavascriptTypedNumber<__int64>::ToString(Var value, ScriptContext* scriptContext) { char16 szBuffer[22]; - __int64 val = JavascriptTypedNumber<__int64>::FromVar(value)->GetValue(); + __int64 val = VarTo>(value)->GetValue(); int pos = TaggedInt::SignedToString(val, szBuffer, 22); return JavascriptString::NewCopyBuffer(szBuffer + pos, (_countof(szBuffer) - 1) - pos, scriptContext); } @@ -43,7 +43,7 @@ namespace Js JavascriptString* JavascriptTypedNumber::ToString(Var value, ScriptContext* scriptContext) { char16 szBuffer[22]; - unsigned __int64 val = JavascriptUInt64Number::FromVar(value)->GetValue(); + unsigned __int64 val = VarTo(value)->GetValue(); int pos = TaggedInt::UnsignedToString(val, szBuffer, 22); return JavascriptString::NewCopyBuffer(szBuffer + pos, (_countof(szBuffer) - 1) - pos, scriptContext); } diff --git a/lib/Runtime/Library/JavascriptTypedNumber.h b/lib/Runtime/Library/JavascriptTypedNumber.h index 0575918d075..1097610c768 100644 --- a/lib/Runtime/Library/JavascriptTypedNumber.h +++ b/lib/Runtime/Library/JavascriptTypedNumber.h @@ -31,23 +31,6 @@ namespace Js static Var ToVar(T nValue, ScriptContext* scriptContext); - static JavascriptTypedNumber* FromVar(Var value) - { - AssertOrFailFastMsg(JavascriptOperators::GetTypeId(value) == TypeIds_Int64Number || - JavascriptOperators::GetTypeId(value) == TypeIds_UInt64Number, "invalid typed number"); - - return static_cast*>(value); - }; - - static JavascriptTypedNumber* UnsafeFromVar(Var value) - { -#if DBG - AssertMsg(JavascriptOperators::GetTypeId(value) == TypeIds_Int64Number || - JavascriptOperators::GetTypeId(value) == TypeIds_UInt64Number, "invalid typed number"); -#endif - return static_cast*>(value); - }; - static JavascriptString* ToString(Var value, ScriptContext* scriptContext); Var ToJavascriptNumber() @@ -57,7 +40,7 @@ namespace Js RecyclableObject * CloneToScriptContext(ScriptContext* requestContext) override { - return RecyclableObject::FromVar(JavascriptTypedNumber::ToVar(this->GetValue(), requestContext)); + return VarTo(JavascriptTypedNumber::ToVar(this->GetValue(), requestContext)); } BOOL GetDiagTypeString(StringBuilder* stringBuilder, ScriptContext* requestContext) override @@ -75,4 +58,14 @@ namespace Js typedef JavascriptTypedNumber<__int64> JavascriptInt64Number; typedef JavascriptTypedNumber JavascriptUInt64Number; + + template <> inline bool VarIsImpl(RecyclableObject* obj) + { + return JavascriptOperators::GetTypeId(obj) == TypeIds_Int64Number; + } + + template <> inline bool VarIsImpl(RecyclableObject* obj) + { + return JavascriptOperators::GetTypeId(obj) == TypeIds_UInt64Number; + } } diff --git a/lib/Runtime/Library/JavascriptTypedObjectSlotAccessorFunction.cpp b/lib/Runtime/Library/JavascriptTypedObjectSlotAccessorFunction.cpp deleted file mode 100644 index 8c77bf24bd7..00000000000 --- a/lib/Runtime/Library/JavascriptTypedObjectSlotAccessorFunction.cpp +++ /dev/null @@ -1,67 +0,0 @@ -//------------------------------------------------------------------------------------------------------- -// Copyright (C) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. -//------------------------------------------------------------------------------------------------------- -#include "RuntimeLibraryPch.h" - -#ifdef ENABLE_DOM_FAST_PATH -#include "Library\JavascriptTypedObjectSlotAccessorFunction.h" -namespace Js -{ - JavascriptTypedObjectSlotAccessorFunction::JavascriptTypedObjectSlotAccessorFunction(DynamicType* type, FunctionInfo* functionInfo, int allowedTypeId, PropertyId nameId) : - RuntimeFunction(type, functionInfo), - allowedTypeId(allowedTypeId) - { - DebugOnly(VerifyEntryPoint()); - SetFunctionNameId(Js::TaggedInt::ToVarUnchecked(nameId)); - } - - - bool JavascriptTypedObjectSlotAccessorFunction::Is(Var instance) - { - if (VirtualTableInfo::HasVirtualTable(instance) || - VirtualTableInfo>::HasVirtualTable(instance) ) - { - return true; - } - return false; - } - - - void JavascriptTypedObjectSlotAccessorFunction::ValidateThisInstance(Js::Var thisObj) - { - if (!InstanceOf(thisObj)) - { - Js::JavascriptError::ThrowTypeError(GetType()->GetScriptContext(), JSERR_FunctionArgument_NeedObject, _u("DOM object")); - } - } - - bool JavascriptTypedObjectSlotAccessorFunction::InstanceOf(Var thisObj) - { - int allowedTypeId = GetAllowedTypeId(); - TypeId typeId = Js::JavascriptOperators::GetTypeId(thisObj); - if (typeId == allowedTypeId) - { - return true; - } - Type* type = RecyclableObject::FromVar(thisObj)->GetType(); - if (ExternalTypeWithInheritedTypeIds::Is(type)) - { - return ((Js::ExternalTypeWithInheritedTypeIds*)type)->InstanceOf(); - } - return false; - } - - JavascriptTypedObjectSlotAccessorFunction* JavascriptTypedObjectSlotAccessorFunction::FromVar(Var instance) - { - Assert(Js::JavascriptTypedObjectSlotAccessorFunction::Is(instance)); - Assert((Js::JavascriptFunction::FromVar(instance)->GetFunctionInfo()->GetAttributes() & Js::FunctionBody::Attributes::NeedCrossSiteSecurityCheck) != 0); - return static_cast(instance); - } - - void JavascriptTypedObjectSlotAccessorFunction::ValidateThis(Js::JavascriptTypedObjectSlotAccessorFunction* func, Var thisObject) - { - func->ValidateThisInstance(thisObject); - } -} -#endif diff --git a/lib/Runtime/Library/JavascriptVariantDate.cpp b/lib/Runtime/Library/JavascriptVariantDate.cpp deleted file mode 100644 index bab70b7c749..00000000000 --- a/lib/Runtime/Library/JavascriptVariantDate.cpp +++ /dev/null @@ -1,185 +0,0 @@ -//------------------------------------------------------------------------------------------------------- -// Copyright (C) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. -//------------------------------------------------------------------------------------------------------- -#include "RuntimeLibraryPch.h" - -namespace Js -{ - bool JavascriptVariantDate::Is(Var aValue) - { - return JavascriptOperators::GetTypeId(aValue) == TypeIds_VariantDate; - } - - JavascriptVariantDate* JavascriptVariantDate::FromVar(Js::Var aValue) - { - AssertOrFailFastMsg(Is(aValue), "Ensure var is actually a 'JavascriptVariantDate'"); - - return static_cast(aValue); - } - - JavascriptVariantDate* JavascriptVariantDate::UnsafeFromVar(Js::Var aValue) - { - AssertMsg(Is(aValue), "Ensure var is actually a 'JavascriptVariantDate'"); - - return static_cast(aValue); - } - - Var JavascriptVariantDate::GetTypeOfString(ScriptContext* requestContext) - { - return requestContext->GetLibrary()->GetVariantDateTypeDisplayString(); - } - - JavascriptString* JavascriptVariantDate::GetValueString(ScriptContext* scriptContext) - { - return DateImplementation::ConvertVariantDateToString(this->value, scriptContext); - } - - BOOL JavascriptVariantDate::GetDiagValueString(StringBuilder* stringBuilder, ScriptContext* requestContext) - { - BOOL ret; - - ENTER_PINNED_SCOPE(JavascriptString, resultString); - resultString = DateImplementation::ConvertVariantDateToString(this->value, GetScriptContext()); - if (resultString != nullptr) - { - stringBuilder->Append(resultString->GetString(), resultString->GetLength()); - ret = TRUE; - } - else - { - ret = FALSE; - } - - LEAVE_PINNED_SCOPE(); - - return ret; - } - - BOOL JavascriptVariantDate::GetDiagTypeString(StringBuilder* stringBuilder, ScriptContext* requestContext) - { - stringBuilder->AppendCppLiteral(_u("Date")); // For whatever reason in IE8 jscript, typeof returns "date" - // while the debugger displays "Date" for the type - return TRUE; - } - - RecyclableObject * JavascriptVariantDate::CloneToScriptContext(ScriptContext* requestContext) - { - return requestContext->GetLibrary()->CreateVariantDate(value); - } - - RecyclableObject* JavascriptVariantDate::ToObject(ScriptContext* requestContext) - { - // WOOB 1124298: Just return a new object when converting to object. - return requestContext->GetLibrary()->CreateObject(true); - } - - PropertyQueryFlags JavascriptVariantDate::GetPropertyQuery(Js::Var originalInstance, Js::PropertyId propertyId, Js::Var* value, PropertyValueInfo* info, Js::ScriptContext* requestContext) - { - if (requestContext->GetThreadContext()->RecordImplicitException()) - { - JavascriptError::ThrowTypeError(requestContext, JSERR_Property_VarDate, requestContext->GetPropertyName(propertyId)->GetBuffer()); - } - *value = nullptr; - return PropertyQueryFlags::Property_Found; - }; - - PropertyQueryFlags JavascriptVariantDate::GetPropertyQuery(Js::Var originalInstance, Js::JavascriptString* propertyNameString, Js::Var* value, PropertyValueInfo* info, Js::ScriptContext* requestContext) - { - if (requestContext->GetThreadContext()->RecordImplicitException()) - { - JavascriptError::ThrowTypeError(requestContext, JSERR_Property_VarDate, propertyNameString); - } - *value = nullptr; - return PropertyQueryFlags::Property_Found; - }; - - PropertyQueryFlags JavascriptVariantDate::GetPropertyReferenceQuery(Js::Var originalInstance, Js::PropertyId propertyId, Js::Var* value, PropertyValueInfo* info, Js::ScriptContext* requestContext) - { - if (requestContext->GetThreadContext()->RecordImplicitException()) - { - JavascriptError::ThrowTypeError(requestContext, JSERR_Property_VarDate, requestContext->GetPropertyName(propertyId)->GetBuffer()); - } - *value = nullptr; - return PropertyQueryFlags::Property_Found; - }; - - BOOL JavascriptVariantDate::SetProperty(Js::PropertyId propertyId, Js::Var value, Js::PropertyOperationFlags flags, PropertyValueInfo* info) - { - ScriptContext* scriptContext = this->GetScriptContext(); - JavascriptError::ThrowTypeError(scriptContext, JSERR_Property_VarDate, scriptContext->GetPropertyName(propertyId)->GetBuffer()); - }; - - BOOL JavascriptVariantDate::SetProperty(Js::JavascriptString* propertyNameString, Js::Var value, Js::PropertyOperationFlags flags, PropertyValueInfo* info) - { - ScriptContext* scriptContext = this->GetScriptContext(); - JavascriptError::ThrowTypeError(scriptContext, JSERR_Property_VarDate, propertyNameString->GetSz()); - }; - - BOOL JavascriptVariantDate::InitProperty(Js::PropertyId propertyId, Js::Var value, PropertyOperationFlags flags, Js::PropertyValueInfo* info) - { - ScriptContext* scriptContext = this->GetScriptContext(); - JavascriptError::ThrowTypeError(scriptContext, JSERR_Property_VarDate, scriptContext->GetPropertyName(propertyId)->GetBuffer()); - }; - - BOOL JavascriptVariantDate::DeleteProperty(Js::PropertyId propertyId, Js::PropertyOperationFlags flags) - { - ScriptContext* scriptContext = this->GetScriptContext(); - JavascriptError::ThrowTypeError(scriptContext, JSERR_Property_VarDate, scriptContext->GetPropertyName(propertyId)->GetBuffer()); - }; - - BOOL JavascriptVariantDate::DeleteProperty(JavascriptString *propertyNameString, Js::PropertyOperationFlags flags) - { - ScriptContext* scriptContext = this->GetScriptContext(); - JavascriptError::ThrowTypeError(scriptContext, JSERR_Property_VarDate, propertyNameString->GetString()); - }; - - PropertyQueryFlags JavascriptVariantDate::GetItemReferenceQuery(Js::Var originalInstance, uint32 index, Js::Var* value, Js::ScriptContext * scriptContext) - { - JavascriptError::ThrowTypeError(scriptContext, JSERR_Property_VarDate, JavascriptNumber::ToStringRadix10(index, scriptContext)->GetSz()); - }; - - PropertyQueryFlags JavascriptVariantDate::GetItemQuery(Js::Var originalInstance, uint32 index, Js::Var* value, Js::ScriptContext * scriptContext) - { - JavascriptError::ThrowTypeError(scriptContext, JSERR_Property_VarDate, JavascriptNumber::ToStringRadix10(index, scriptContext)->GetSz()); - }; - - BOOL JavascriptVariantDate::SetItem(uint32 index, Js::Var value, Js::PropertyOperationFlags flags) - { - ScriptContext* scriptContext = this->GetScriptContext(); - JavascriptError::ThrowTypeError(scriptContext, JSERR_Property_VarDate, JavascriptNumber::ToStringRadix10(index, scriptContext)->GetSz()); - }; - - BOOL JavascriptVariantDate::ToPrimitive(JavascriptHint hint, Var* result, ScriptContext * requestContext) - { - if (hint == JavascriptHint::HintString) - { - JavascriptString* resultString = this->GetValueString(requestContext); - if (resultString != nullptr) - { - (*result) = resultString; - return TRUE; - } - Assert(false); - } - else if (hint == JavascriptHint::HintNumber) - { - *result = JavascriptNumber::ToVarNoCheck(DateImplementation::JsUtcTimeFromVarDate(value, requestContext), requestContext); - return TRUE; - } - else - { - Assert(hint == JavascriptHint::None); - *result = this; - return TRUE; - } - return FALSE; - } - - BOOL JavascriptVariantDate::Equals(Var other, BOOL *value, ScriptContext * requestContext) - { - // Calling .Equals on a VT_DATE variant at least gives the "[property name] is null or not An object error" - *value = FALSE; - return TRUE; - } -} diff --git a/lib/Runtime/Library/JavascriptVariantDate.h b/lib/Runtime/Library/JavascriptVariantDate.h deleted file mode 100644 index 3d36b571837..00000000000 --- a/lib/Runtime/Library/JavascriptVariantDate.h +++ /dev/null @@ -1,58 +0,0 @@ -//------------------------------------------------------------------------------------------------------- -// Copyright (C) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. -//------------------------------------------------------------------------------------------------------- -#pragma once - -namespace Js -{ - // Currently only used to implement Date.prototype.getVarDate - // If there are other MS specific extensions that return variants, - // this class could be renamed and updated to support other VT_* types, - // or relevant functionality could be moved to a base class to inherit from. - class JavascriptVariantDate : public RecyclableObject - { - private: - Field(double) value; // the double form of the value of a VT_DATE variant. - - static JavascriptString* ConvertVariantDateToStr( - double dbl, - ScriptContext* scriptContext); - - protected: - DEFINE_VTABLE_CTOR(JavascriptVariantDate, RecyclableObject); - - public: - JavascriptVariantDate(const double val, StaticType * type) : value(val), RecyclableObject(type) { } - - static bool Is(Var aValue); - static JavascriptVariantDate* FromVar(Var aValue); - static JavascriptVariantDate* UnsafeFromVar(Var aValue); - - // Used for making function calls to external objects requiring string params. - JavascriptString* GetValueString(ScriptContext* scriptContext); - - double GetValue() { return value; } - - virtual BOOL Equals(Var other, BOOL* value, ScriptContext * requestContext) override; - virtual PropertyQueryFlags HasPropertyQuery(Js::PropertyId propertyId, _Inout_opt_ PropertyValueInfo* info) override { return PropertyQueryFlags::Property_NotFound; }; - virtual PropertyQueryFlags GetPropertyQuery(Js::Var originalInstance, Js::PropertyId propertyId, Js::Var* value, Js::PropertyValueInfo* info, Js::ScriptContext* requestContext) override; - virtual PropertyQueryFlags GetPropertyQuery(Var originalInstance, JavascriptString* propertyNameString, Var* value, PropertyValueInfo* info, ScriptContext* requestContext) override; - virtual PropertyQueryFlags GetPropertyReferenceQuery(Js::Var originalInstance, Js::PropertyId propertyId, Js::Var* value, Js::PropertyValueInfo* info, Js::ScriptContext* requestContext) override; - virtual BOOL SetProperty(Js::PropertyId propertyId, Js::Var value, Js::PropertyOperationFlags flags, Js::PropertyValueInfo* info) override; - virtual BOOL SetProperty(Js::JavascriptString* propertyNameString, Js::Var value, Js::PropertyOperationFlags flags, Js::PropertyValueInfo* info) override; - virtual BOOL InitProperty(Js::PropertyId propertyId, Js::Var value, PropertyOperationFlags flags = PropertyOperation_None, Js::PropertyValueInfo* info = NULL) override; - virtual BOOL DeleteProperty(Js::PropertyId propertyId, Js::PropertyOperationFlags flags) override; - virtual BOOL DeleteProperty(JavascriptString *propertyNameString, Js::PropertyOperationFlags flags) override; - virtual PropertyQueryFlags HasItemQuery(uint32 index) override { return PropertyQueryFlags::Property_NotFound; } - virtual PropertyQueryFlags GetItemReferenceQuery(Js::Var originalInstance, uint32 index, Js::Var* value, Js::ScriptContext * scriptContext) override; - virtual PropertyQueryFlags GetItemQuery(Js::Var originalInstance, uint32 index, Js::Var* value, Js::ScriptContext * scriptContext) override; - virtual BOOL SetItem(uint32 index, Js::Var value, Js::PropertyOperationFlags flags) override; - virtual BOOL GetDiagValueString(StringBuilder* stringBuilder, ScriptContext* requestContext) override; - virtual BOOL GetDiagTypeString(StringBuilder* stringBuilder, ScriptContext* requestContext) override; - virtual BOOL ToPrimitive(JavascriptHint hint, Var* result, ScriptContext * requestContext) override; - virtual Var GetTypeOfString(ScriptContext * requestContext) override; - virtual RecyclableObject * CloneToScriptContext(ScriptContext* requestContext) override; - virtual RecyclableObject* ToObject(ScriptContext* requestContext) override; - }; -} diff --git a/lib/Runtime/Library/JavascriptWeakMap.cpp b/lib/Runtime/Library/JavascriptWeakMap.cpp index ef8caecfa83..cdb4b0fbc35 100644 --- a/lib/Runtime/Library/JavascriptWeakMap.cpp +++ b/lib/Runtime/Library/JavascriptWeakMap.cpp @@ -12,25 +12,6 @@ namespace Js { } - bool JavascriptWeakMap::Is(Var aValue) - { - return JavascriptOperators::GetTypeId(aValue) == TypeIds_WeakMap; - } - - JavascriptWeakMap* JavascriptWeakMap::FromVar(Var aValue) - { - AssertOrFailFastMsg(Is(aValue), "Ensure var is actually a 'JavascriptWeakMap'"); - - return static_cast(aValue); - } - - JavascriptWeakMap* JavascriptWeakMap::UnsafeFromVar(Var aValue) - { - AssertMsg(Is(aValue), "Ensure var is actually a 'JavascriptWeakMap'"); - - return static_cast(RecyclableObject::UnsafeFromVar(aValue)); - } - JavascriptWeakMap::WeakMapKeyMap* JavascriptWeakMap::GetWeakMapKeyMapFromKey(RecyclableObject* key) const { AssertOrFailFast(DynamicType::Is(key->GetTypeId()) || JavascriptOperators::GetTypeId(key) == TypeIds_HostDispatch); @@ -114,7 +95,7 @@ namespace Js { JavascriptError::ThrowTypeError(scriptContext, JSERR_NeedFunction); } - adder = RecyclableObject::FromVar(adderVar); + adder = VarTo(adderVar); } if (iter != nullptr) @@ -127,7 +108,7 @@ namespace Js JavascriptError::ThrowTypeError(scriptContext, JSERR_NeedObject); } - RecyclableObject* obj = RecyclableObject::FromVar(nextItem); + RecyclableObject* obj = VarTo(nextItem); Var key = nullptr, value = nullptr; @@ -155,7 +136,7 @@ namespace Js #endif return isCtorSuperCall ? - JavascriptOperators::OrdinaryCreateFromConstructor(RecyclableObject::FromVar(newTarget), weakMapObject, nullptr, scriptContext) : + JavascriptOperators::OrdinaryCreateFromConstructor(VarTo(newTarget), weakMapObject, nullptr, scriptContext) : weakMapObject; } @@ -166,19 +147,19 @@ namespace Js ARGUMENTS(args, callInfo); ScriptContext* scriptContext = function->GetScriptContext(); - if (!JavascriptWeakMap::Is(args[0])) + if (!VarIs(args[0])) { JavascriptError::ThrowTypeErrorVar(scriptContext, JSERR_NeedObjectOfType, _u("WeakMap.prototype.delete"), _u("WeakMap")); } - JavascriptWeakMap* weakMap = JavascriptWeakMap::FromVar(args[0]); + JavascriptWeakMap* weakMap = VarTo(args[0]); Var key = (args.Info.Count > 1) ? args[1] : scriptContext->GetLibrary()->GetUndefined(); bool didDelete = false; if (JavascriptOperators::IsObject(key)) { - RecyclableObject* keyObj = RecyclableObject::FromVar(key); + RecyclableObject* keyObj = VarTo(key); didDelete = weakMap->Delete(keyObj); } @@ -207,12 +188,12 @@ namespace Js ARGUMENTS(args, callInfo); ScriptContext* scriptContext = function->GetScriptContext(); - if (!JavascriptWeakMap::Is(args[0])) + if (!VarIs(args[0])) { JavascriptError::ThrowTypeErrorVar(scriptContext, JSERR_NeedObjectOfType, _u("WeakMap.prototype.get"), _u("WeakMap")); } - JavascriptWeakMap* weakMap = JavascriptWeakMap::FromVar(args[0]); + JavascriptWeakMap* weakMap = VarTo(args[0]); Var key = (args.Info.Count > 1) ? args[1] : scriptContext->GetLibrary()->GetUndefined(); @@ -220,7 +201,7 @@ namespace Js Var value = nullptr; if (JavascriptOperators::IsObject(key)) { - RecyclableObject* keyObj = RecyclableObject::FromVar(key); + RecyclableObject* keyObj = VarTo(key); loaded = weakMap->Get(keyObj, &value); } @@ -248,19 +229,19 @@ namespace Js ARGUMENTS(args, callInfo); ScriptContext* scriptContext = function->GetScriptContext(); - if (!JavascriptWeakMap::Is(args[0])) + if (!VarIs(args[0])) { JavascriptError::ThrowTypeErrorVar(scriptContext, JSERR_NeedObjectOfType, _u("WeakMap.prototype.has"), _u("WeakMap")); } - JavascriptWeakMap* weakMap = JavascriptWeakMap::FromVar(args[0]); + JavascriptWeakMap* weakMap = VarTo(args[0]); Var key = (args.Info.Count > 1) ? args[1] : scriptContext->GetLibrary()->GetUndefined(); bool hasValue = false; if (JavascriptOperators::IsObject(key)) { - RecyclableObject* keyObj = RecyclableObject::FromVar(key); + RecyclableObject* keyObj = VarTo(key); hasValue = weakMap->Has(keyObj); } @@ -289,12 +270,12 @@ namespace Js ARGUMENTS(args, callInfo); ScriptContext* scriptContext = function->GetScriptContext(); - if (!JavascriptWeakMap::Is(args[0])) + if (!VarIs(args[0])) { JavascriptError::ThrowTypeErrorVar(scriptContext, JSERR_NeedObjectOfType, _u("WeakMap.prototype.set"), _u("WeakMap")); } - JavascriptWeakMap* weakMap = JavascriptWeakMap::FromVar(args[0]); + JavascriptWeakMap* weakMap = VarTo(args[0]); Var key = (args.Info.Count > 1) ? args[1] : scriptContext->GetLibrary()->GetUndefined(); Var value = (args.Info.Count > 2) ? args[2] : scriptContext->GetLibrary()->GetUndefined(); @@ -304,7 +285,7 @@ namespace Js JavascriptError::ThrowTypeError(scriptContext, JSERR_WeakMapSetKeyNotAnObject, _u("WeakMap.prototype.set")); } - RecyclableObject* keyObj = RecyclableObject::FromVar(key); + RecyclableObject* keyObj = VarTo(key); #if ENABLE_TTD //In replay we need to pin the object (and will release at snapshot points) -- in record we don't need to do anything @@ -321,7 +302,7 @@ namespace Js void JavascriptWeakMap::Clear() { - keySet.Map([&](RecyclableObject* key, bool value, const RecyclerWeakReference* weakRef) { + keySet.Map([&](RecyclableObject* key, bool value, WeakType weakRef) { WeakMapKeyMap* keyMap = GetWeakMapKeyMapFromKey(key); // It may be the case that a CEO has been reset and the keyMap is now null. diff --git a/lib/Runtime/Library/JavascriptWeakMap.h b/lib/Runtime/Library/JavascriptWeakMap.h index ed5545adb7a..c7d560e2aaa 100644 --- a/lib/Runtime/Library/JavascriptWeakMap.h +++ b/lib/Runtime/Library/JavascriptWeakMap.h @@ -42,7 +42,14 @@ namespace Js // its type and therefore without invalidating cache and JIT assumptions. // typedef JsUtil::BaseDictionary WeakMapKeyMap; + +#if ENABLE_WEAK_REFERENCE_REGIONS + typedef JsUtil::WeakReferenceRegionKeyDictionary KeySet; + typedef const RecyclerWeakReferenceRegionItem& WeakType; +#else typedef JsUtil::WeaklyReferencedKeyDictionary> KeySet; + typedef const RecyclerWeakReference* WeakType; +#endif Field(KeySet) keySet; @@ -60,10 +67,6 @@ namespace Js public: JavascriptWeakMap(DynamicType* type); - static bool Is(Var aValue); - static JavascriptWeakMap* FromVar(Var aValue); - static JavascriptWeakMap* UnsafeFromVar(Var aValue); - void Clear(); bool Delete(RecyclableObject* key); bool Get(RecyclableObject* key, Var* value) const; @@ -104,7 +107,7 @@ namespace Js template void Map(Fn fn) { - return keySet.Map([&](RecyclableObject* key, bool, const RecyclerWeakReference*) + return keySet.Map([&](RecyclableObject* key, bool, WeakType) { Var value = nullptr; WeakMapKeyMap* keyMap = GetWeakMapKeyMapFromKey(key); @@ -130,4 +133,9 @@ namespace Js virtual void ExtractSnapObjectDataInto(TTD::NSSnapObjects::SnapObject* objData, TTD::SlabAllocator& alloc) override; #endif }; + + template <> inline bool VarIsImpl(RecyclableObject* obj) + { + return JavascriptOperators::GetTypeId(obj) == TypeIds_WeakMap; + } } diff --git a/lib/Runtime/Library/JavascriptWeakSet.cpp b/lib/Runtime/Library/JavascriptWeakSet.cpp index 1e41d191235..e9ba517c327 100644 --- a/lib/Runtime/Library/JavascriptWeakSet.cpp +++ b/lib/Runtime/Library/JavascriptWeakSet.cpp @@ -12,25 +12,6 @@ namespace Js { } - bool JavascriptWeakSet::Is(Var aValue) - { - return JavascriptOperators::GetTypeId(aValue) == TypeIds_WeakSet; - } - - JavascriptWeakSet* JavascriptWeakSet::FromVar(Var aValue) - { - AssertOrFailFastMsg(Is(aValue), "Ensure var is actually a 'JavascriptWeakSet'"); - - return static_cast(aValue); - } - - JavascriptWeakSet* JavascriptWeakSet::UnsafeFromVar(Var aValue) - { - AssertMsg(Is(aValue), "Ensure var is actually a 'JavascriptWeakSet'"); - - return static_cast(aValue); - } - Var JavascriptWeakSet::NewInstance(RecyclableObject* function, CallInfo callInfo, ...) { PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); @@ -68,7 +49,7 @@ namespace Js { JavascriptError::ThrowTypeError(scriptContext, JSERR_NeedFunction); } - adder = RecyclableObject::FromVar(adderVar); + adder = VarTo(adderVar); } if (iter != nullptr) @@ -88,7 +69,7 @@ namespace Js #endif return isCtorSuperCall ? - JavascriptOperators::OrdinaryCreateFromConstructor(RecyclableObject::FromVar(newTarget), weakSetObject, nullptr, scriptContext) : + JavascriptOperators::OrdinaryCreateFromConstructor(VarTo(newTarget), weakSetObject, nullptr, scriptContext) : weakSetObject; } @@ -99,12 +80,12 @@ namespace Js ARGUMENTS(args, callInfo); ScriptContext* scriptContext = function->GetScriptContext(); - if (!JavascriptWeakSet::Is(args[0])) + if (!VarIs(args[0])) { JavascriptError::ThrowTypeErrorVar(scriptContext, JSERR_NeedObjectOfType, _u("WeakSet.prototype.add"), _u("WeakSet")); } - JavascriptWeakSet* weakSet = JavascriptWeakSet::FromVar(args[0]); + JavascriptWeakSet* weakSet = VarTo(args[0]); Var key = (args.Info.Count > 1) ? args[1] : scriptContext->GetLibrary()->GetUndefined(); @@ -115,7 +96,7 @@ namespace Js JavascriptError::ThrowTypeError(scriptContext, JSERR_WeakMapSetKeyNotAnObject, _u("WeakSet.prototype.add")); } - RecyclableObject* keyObj = RecyclableObject::FromVar(key); + RecyclableObject* keyObj = VarTo(key); #if ENABLE_TTD //In replay we need to pin the object (and will release at snapshot points) -- in record we don't need to do anything @@ -137,19 +118,19 @@ namespace Js ARGUMENTS(args, callInfo); ScriptContext* scriptContext = function->GetScriptContext(); - if (!JavascriptWeakSet::Is(args[0])) + if (!VarIs(args[0])) { JavascriptError::ThrowTypeErrorVar(scriptContext, JSERR_NeedObjectOfType, _u("WeakSet.prototype.delete"), _u("WeakSet")); } - JavascriptWeakSet* weakSet = JavascriptWeakSet::FromVar(args[0]); + JavascriptWeakSet* weakSet = VarTo(args[0]); Var key = (args.Info.Count > 1) ? args[1] : scriptContext->GetLibrary()->GetUndefined(); bool didDelete = false; if (JavascriptOperators::IsObject(key) && JavascriptOperators::GetTypeId(key) != TypeIds_HostDispatch) { - RecyclableObject* keyObj = RecyclableObject::FromVar(key); + RecyclableObject* keyObj = VarTo(key); didDelete = weakSet->Delete(keyObj); } @@ -178,19 +159,19 @@ namespace Js ARGUMENTS(args, callInfo); ScriptContext* scriptContext = function->GetScriptContext(); - if (!JavascriptWeakSet::Is(args[0])) + if (!VarIs(args[0])) { JavascriptError::ThrowTypeErrorVar(scriptContext, JSERR_NeedObjectOfType, _u("WeakSet.prototype.has"), _u("WeakSet")); } - JavascriptWeakSet* weakSet = JavascriptWeakSet::FromVar(args[0]); + JavascriptWeakSet* weakSet = VarTo(args[0]); Var key = (args.Info.Count > 1) ? args[1] : scriptContext->GetLibrary()->GetUndefined(); bool hasValue = false; if (JavascriptOperators::IsObject(key) && JavascriptOperators::GetTypeId(key) != TypeIds_HostDispatch) { - RecyclableObject* keyObj = RecyclableObject::FromVar(key); + RecyclableObject* keyObj = VarTo(key); hasValue = weakSet->Has(keyObj); } diff --git a/lib/Runtime/Library/JavascriptWeakSet.h b/lib/Runtime/Library/JavascriptWeakSet.h index 618286fc315..df2d3412f9c 100644 --- a/lib/Runtime/Library/JavascriptWeakSet.h +++ b/lib/Runtime/Library/JavascriptWeakSet.h @@ -9,7 +9,13 @@ namespace Js class JavascriptWeakSet : public DynamicObject { private: +#if ENABLE_WEAK_REFERENCE_REGIONS + typedef JsUtil::WeakReferenceRegionKeyDictionary KeySet; + typedef const RecyclerWeakReferenceRegionItem& WeakType; +#else typedef JsUtil::WeaklyReferencedKeyDictionary> KeySet; + typedef const RecyclerWeakReference* WeakType; +#endif Field(KeySet) keySet; @@ -19,10 +25,6 @@ namespace Js public: JavascriptWeakSet(DynamicType* type); - static bool Is(Var aValue); - static JavascriptWeakSet* FromVar(Var aValue); - static JavascriptWeakSet* UnsafeFromVar(Var aValue); - void Add(RecyclableObject* key); bool Delete(RecyclableObject* key); bool Has(RecyclableObject* key); @@ -49,7 +51,7 @@ namespace Js template void Map(Fn fn) { - return keySet.Map([&](RecyclableObject* key, bool, const RecyclerWeakReference*) + return keySet.Map([&](RecyclableObject* key, bool, WeakType) { fn(key); }); @@ -63,4 +65,9 @@ namespace Js virtual void ExtractSnapObjectDataInto(TTD::NSSnapObjects::SnapObject* objData, TTD::SlabAllocator& alloc) override; #endif }; + + template <> inline bool VarIsImpl(RecyclableObject* obj) + { + return JavascriptOperators::GetTypeId(obj) == TypeIds_WeakSet; + } } diff --git a/lib/Runtime/Library/JsBuiltIn/GenByteCode.cmd b/lib/Runtime/Library/JsBuiltIn/GenByteCode.cmd deleted file mode 100644 index 5adecde4b10..00000000000 --- a/lib/Runtime/Library/JsBuiltIn/GenByteCode.cmd +++ /dev/null @@ -1,85 +0,0 @@ -::------------------------------------------------------------------------------------------------------- -:: Copyright (C) Microsoft. All rights reserved. -:: Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. -::------------------------------------------------------------------------------------------------------- - -@echo off -setlocal -set _HASERROR=0 -set _binary=ch.exe -set _BuildDir=%~dp0..\..\..\..\Build - -if "%_FILE%" == "" ( - set "_FILE=%~dp0*.js" -) - -:ContinueArgParse -if not [%1]==[] ( - if [%1]==[-nojit] ( - set _suffix=.nojit - goto :ContinueArgParseEnd - ) - if [%1]==[-binary] ( - if [%2]==[] ( - echo Error: no argument supplied to -binary. Exiting ... - exit /b 1 - ) - set _binary=%2 - shift - goto :ContinueArgParseEnd - ) - if [%1]==[-bindir] ( - if [%2]==[] ( - echo Error: no argument supplied to -bindir. Exiting ... - exit /b 1 - ) - set _BinLocation=%2 - shift - goto :ContinueArgParseEnd - ) - - :ContinueArgParseEnd - shift - goto :ContinueArgParse -) - -:: This script will expect %_binary% to be built for x86_debug and x64_debug - -if "%OutBaseDir%" NEQ "" ( - set _BinLocation=%OutBaseDir%\Chakra.Core%_suffix%\bin -) -if "%_BinLocation%"=="" ( - set _BinLocation=%_BuildDir%\VcBuild%_suffix%\bin -) - -if not exist %_BinLocation%\x86_debug\%_binary% ( - echo Error: %_BinLocation%\x86_debug\%_binary% not found, please build sources. Exiting ... - exit /b 1 -) - -if not exist %_BinLocation%\x64_debug\%_binary% ( - echo Error: %_BinLocation%\x64_debug\%_binary% not found, please build sources. Exiting ... - exit /b 1 -) - -for %%i in (%_FILE%) do ( - call :GenerateLibraryByteCodeHeader %%i -) -exit /B %_HASERROR% - -:GenerateLibraryBytecodeHeader - -echo Generating %1%_suffix%.bc.32b.h -call :Generate %1 %_BinLocation%\x86_debug %1%_suffix%.bc.32b.h -echo Generating %1%_suffix%.bc.64b.h -call :Generate %1 %_BinLocation%\x64_debug %1%_suffix%.bc.64b.h -exit /B 0 - -:Generate -%2\%_binary% -GenerateLibraryByteCodeHeader:%3 -JsBuiltIn -LdChakraLib %1 -if "%errorlevel%" NEQ "0" ( - echo %1: Error generating bytecode file. Ensure %3 writable. - set _HASERROR=1 -) else ( - echo Bytecode generated. Please rebuild to incorporate the new bytecode. -) diff --git a/lib/Runtime/Library/JsBuiltIn/JsBuiltIn.js b/lib/Runtime/Library/JsBuiltIn/JsBuiltIn.js deleted file mode 100644 index 9cd7587f8f5..00000000000 --- a/lib/Runtime/Library/JsBuiltIn/JsBuiltIn.js +++ /dev/null @@ -1,242 +0,0 @@ -//------------------------------------------------------------------------------------------------------- -// Copyright (C) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. -//------------------------------------------------------------------------------------------------------- - -"use strict"; - -(function (intrinsic) { - var platform = intrinsic.JsBuiltIn; - - var setPrototype = platform.builtInSetPrototype; - var _objectDefineProperty = platform.builtInJavascriptObjectEntryDefineProperty; - var Symbol = platform.Symbol; - var CreateObject = platform.builtInJavascriptObjectCreate; - - let FunctionsEnum = { - ArrayValues: setPrototype({ className: "Array", methodName: "values", argumentsCount: 0, forceInline: true /*optional*/, alias: "Symbol.iterator" }, null), - ArrayKeys: setPrototype({ className: "Array", methodName: "keys", argumentsCount: 0, forceInline: true /*optional*/ }, null), - ArrayEntries: setPrototype({ className: "Array", methodName: "entries", argumentsCount: 0, forceInline: true /*optional*/ }, null), - ArrayIndexOf: setPrototype({ className: "Array", methodName: "indexOf", argumentsCount: 1, forceInline: true /*optional*/ }, null), - ArrayFilter: setPrototype({ className: "Array", methodName: "filter", argumentsCount: 1, forceInline: true /*optional*/ }, null), - }; - - platform.registerChakraLibraryFunction("ArrayIterator", function (arrayObj, iterationKind) { - "use strict"; - __chakraLibrary.InitInternalProperties(this, 4, "__$arrayObj$__", "__$nextIndex$__", "__$kind$__", "__$internalDone$__"); - this.__$arrayObj$__ = arrayObj; - this.__$nextIndex$__ = 0; - this.__$kind$__ = iterationKind; - this.__$internalDone$__ = false; // We use this additional property to enable hoisting load of arrayObj outside the loop, we write to this property instead of the arrayObj - }); - - // ArrayIterator's prototype is the C++ Iterator, which is also the prototype for StringIterator, MapIterator etc - var iteratorPrototype = platform.GetIteratorPrototype(); - // Establish prototype chain here - __chakraLibrary.ArrayIterator.prototype = CreateObject(iteratorPrototype); - __chakraLibrary.raiseNeedObjectOfType = platform.raiseNeedObjectOfType; - __chakraLibrary.raiseThis_NullOrUndefined = platform.raiseThis_NullOrUndefined; - __chakraLibrary.raiseFunctionArgument_NeedFunction = platform.raiseFunctionArgument_NeedFunction; - __chakraLibrary.callInstanceFunc = platform.builtInCallInstanceFunction; - __chakraLibrary.functionBind = platform.builtInJavascriptFunctionEntryBind; - - _objectDefineProperty(__chakraLibrary.ArrayIterator.prototype, 'next', - // Object's getter and setter can get overriden on the prototype, in that case while setting the value attributes, we will end up with TypeError - // So, we need to set the prototype of attributes to null - setPrototype({ - value: function () { - "use strict"; - let o = this; - - if (!(o instanceof __chakraLibrary.ArrayIterator)) { - __chakraLibrary.raiseNeedObjectOfType("Array Iterator.prototype.next", "Array Iterator"); - } - - let a = o.__$arrayObj$__; - - if (o.__$internalDone$__ === true) { - return { value: undefined, done: true }; - } else { - let index = o.__$nextIndex$__; - let len = __chakraLibrary.isArray(a) ? a.length : __chakraLibrary.GetLength(a); - - if (index < len) { // < comparison should happen instead of >= , because len can be NaN - let itemKind = o.__$kind$__; - - o.__$nextIndex$__ = index + 1; - - if (itemKind === 1 /*ArrayIterationKind.Value*/) { - return {value : a[index], done : false}; - } else if (itemKind === 0 /*ArrayIterationKind.Key*/) { // TODO (megupta) : Use clean enums here ? - return {value : index, done : false}; - } else { - let elementKey = index; - let elementValue = a[index]; - return {value : [elementKey, elementValue], done : false}; - } - } else { - o.__$internalDone$__ = true; - return { value : undefined, done : true}; - } - } - }, - writable: true, - enumerable: false, - configurable: true - }, null) - ); - - _objectDefineProperty(__chakraLibrary.ArrayIterator.prototype, Symbol.toStringTag, setPrototype({ value: "Array Iterator", writable: false, enumerable: false, configurable: true }, null)); - - _objectDefineProperty(__chakraLibrary.ArrayIterator.prototype.next, 'length', setPrototype({ value: 0, writable: false, enumerable: false, configurable: true }, null)); - - _objectDefineProperty(__chakraLibrary.ArrayIterator.prototype.next, 'name', setPrototype({ value: "next", writable: false, enumerable: false, configurable: true }, null)); - - platform.registerChakraLibraryFunction("CreateArrayIterator", function (arrayObj, iterationKind) { - "use strict"; - return new __chakraLibrary.ArrayIterator(arrayObj, iterationKind); - }); - - platform.registerFunction(FunctionsEnum.ArrayKeys, function () { - "use strict"; - if (this === null || this === undefined) { - __chakraLibrary.raiseThis_NullOrUndefined("Array.prototype.keys"); - } - let o = __chakraLibrary.Object(this); - return __chakraLibrary.CreateArrayIterator(o, 0 /* ArrayIterationKind.Key*/); - }); - - platform.registerFunction(FunctionsEnum.ArrayValues, function () { - "use strict"; - if (this === null || this === undefined) { - __chakraLibrary.raiseThis_NullOrUndefined("Array.prototype.values"); - } - let o = __chakraLibrary.Object(this); - return __chakraLibrary.CreateArrayIterator(o, 1 /* ArrayIterationKind.Value*/); - }); - - platform.registerFunction(FunctionsEnum.ArrayEntries, function () { - "use strict"; - if (this === null || this === undefined) { - __chakraLibrary.raiseThis_NullOrUndefined("Array.prototype.entries"); - } - let o = __chakraLibrary.Object(this); - return __chakraLibrary.CreateArrayIterator(o, 2 /* ArrayIterationKind.KeyAndValue*/); - }); - - platform.registerFunction(FunctionsEnum.ArrayIndexOf, function (searchElement, fromIndex) { - // ECMAScript 2017 #sec-array.prototype.indexof - "use strict"; - - if (this === null || this === undefined) { - __chakraLibrary.raiseThis_NullOrUndefined("Array.prototype.indexOf"); - } - - let o; - if (__chakraLibrary.isArray(this)) { - o = this; - } else { - o = __chakraLibrary.Object(this); - } - - let len = __chakraLibrary.toLength(o["length"]); - if (len === 0) { - return -1; - } - - let n = __chakraLibrary.toInteger(fromIndex); - if (n >= len) { - return -1; - } - - let k; - - /* We refactored the code but it still respect the spec. - When using -0 or +0, the engine might think we are meaning - to use floating point numbers which can hurt performance. - So we refactored to use integers instead. */ - if (n === 0) { // Corresponds to "If n is -0, let k be +0" in the spec - k = 0; - } else if (n > 0) { // Corresponds to "If n >= 0, then [...] let k be n." - k = n; - } else { // Corresponds to "Else n < 0" - k = len + n; - - if (k < 0) { - k = 0; - } - } - - while (k < len) { - if (k in o) { - let elementK = o[k]; - - if (elementK === searchElement) { - return k; - } - } - - k++; - } - - return -1; - }); - - platform.registerFunction(FunctionsEnum.ArrayFilter, function (callbackfn, thisArg) { - // ECMAScript 2017 #sec-array.prototype.filter - "use strict"; - - if (this === null || this === undefined) { - __chakraLibrary.raiseThis_NullOrUndefined("Array.prototype.filter"); - } - - let o; - let len - if (__chakraLibrary.isArray(this)) { - o = this; - len = o.length; - } else { - o = __chakraLibrary.Object(this); - len = __chakraLibrary.GetLength(o); - } - - if (typeof callbackfn != "function") { - __chakraLibrary.raiseFunctionArgument_NeedFunction("Array.prototype.filter"); - } - - let a = __chakraLibrary.arraySpeciesCreate(o, 0); - let k = 0; - let to = 0; - - if (thisArg === undefined) { - // fast path. - while (k < len) { - if (k in o) { - let kValue = o[k]; - if (callbackfn(kValue, k, o)) { - __chakraLibrary.arrayCreateDataPropertyOrThrow(a, to, kValue); - to++; - } - } - k++; - } - } else { - // slow path. - // safe equivalent of calling "callbackfn.bind(thisArg)" - let boundCallback = __chakraLibrary.callInstanceFunc(__chakraLibrary.functionBind, callbackfn, thisArg); - while (k < len) { - if (k in o) { - let kValue = o[k]; - if (boundCallback(kValue, k, o)) { - __chakraLibrary.arrayCreateDataPropertyOrThrow(a, to, kValue); - to++; - } - } - k++; - } - } - - return a; - }); - -}); diff --git a/lib/Runtime/Library/JsBuiltIn/JsBuiltIn.js.bc.32b.h b/lib/Runtime/Library/JsBuiltIn/JsBuiltIn.js.bc.32b.h deleted file mode 100755 index 049aad05bdd..00000000000 --- a/lib/Runtime/Library/JsBuiltIn/JsBuiltIn.js.bc.32b.h +++ /dev/null @@ -1,710 +0,0 @@ -//------------------------------------------------------------------------------------------------------- -// Copyright (C) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. -//------------------------------------------------------------------------------------------------------- -#if 0 -//------------------------------------------------------------------------------------------------------- -// Copyright (C) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. -//------------------------------------------------------------------------------------------------------- - -"use strict"; - -(function (intrinsic) { - var platform = intrinsic.JsBuiltIn; - - var setPrototype = platform.builtInSetPrototype; - var _objectDefineProperty = platform.builtInJavascriptObjectEntryDefineProperty; - var Symbol = platform.Symbol; - var CreateObject = platform.builtInJavascriptObjectCreate; - - let FunctionsEnum = { - ArrayValues: setPrototype({ className: "Array", methodName: "values", argumentsCount: 0, forceInline: true /*optional*/, alias: "Symbol.iterator" }, null), - ArrayKeys: setPrototype({ className: "Array", methodName: "keys", argumentsCount: 0, forceInline: true /*optional*/ }, null), - ArrayEntries: setPrototype({ className: "Array", methodName: "entries", argumentsCount: 0, forceInline: true /*optional*/ }, null), - ArrayIndexOf: setPrototype({ className: "Array", methodName: "indexOf", argumentsCount: 1, forceInline: true /*optional*/ }, null), - ArrayFilter: setPrototype({ className: "Array", methodName: "filter", argumentsCount: 1, forceInline: true /*optional*/ }, null), - }; - - platform.registerChakraLibraryFunction("ArrayIterator", function (arrayObj, iterationKind) { - "use strict"; - __chakraLibrary.InitInternalProperties(this, 4, "__$arrayObj$__", "__$nextIndex$__", "__$kind$__", "__$internalDone$__"); - this.__$arrayObj$__ = arrayObj; - this.__$nextIndex$__ = 0; - this.__$kind$__ = iterationKind; - this.__$internalDone$__ = false; // We use this additional property to enable hoisting load of arrayObj outside the loop, we write to this property instead of the arrayObj - }); - - // ArrayIterator's prototype is the C++ Iterator, which is also the prototype for StringIterator, MapIterator etc - var iteratorPrototype = platform.GetIteratorPrototype(); - // Establish prototype chain here - __chakraLibrary.ArrayIterator.prototype = CreateObject(iteratorPrototype); - __chakraLibrary.raiseNeedObjectOfType = platform.raiseNeedObjectOfType; - __chakraLibrary.raiseThis_NullOrUndefined = platform.raiseThis_NullOrUndefined; - __chakraLibrary.raiseFunctionArgument_NeedFunction = platform.raiseFunctionArgument_NeedFunction; - __chakraLibrary.callInstanceFunc = platform.builtInCallInstanceFunction; - __chakraLibrary.functionBind = platform.builtInJavascriptFunctionEntryBind; - - _objectDefineProperty(__chakraLibrary.ArrayIterator.prototype, 'next', - // Object's getter and setter can get overriden on the prototype, in that case while setting the value attributes, we will end up with TypeError - // So, we need to set the prototype of attributes to null - setPrototype({ - value: function () { - "use strict"; - let o = this; - - if (!(o instanceof __chakraLibrary.ArrayIterator)) { - __chakraLibrary.raiseNeedObjectOfType("Array Iterator.prototype.next", "Array Iterator"); - } - - let a = o.__$arrayObj$__; - - if (o.__$internalDone$__ === true) { - return { value: undefined, done: true }; - } else { - let index = o.__$nextIndex$__; - let len = __chakraLibrary.isArray(a) ? a.length : __chakraLibrary.GetLength(a); - - if (index < len) { // < comparison should happen instead of >= , because len can be NaN - let itemKind = o.__$kind$__; - - o.__$nextIndex$__ = index + 1; - - if (itemKind === 1 /*ArrayIterationKind.Value*/) { - return {value : a[index], done : false}; - } else if (itemKind === 0 /*ArrayIterationKind.Key*/) { // TODO (megupta) : Use clean enums here ? - return {value : index, done : false}; - } else { - let elementKey = index; - let elementValue = a[index]; - return {value : [elementKey, elementValue], done : false}; - } - } else { - o.__$internalDone$__ = true; - return { value : undefined, done : true}; - } - } - }, - writable: true, - enumerable: false, - configurable: true - }, null) - ); - - _objectDefineProperty(__chakraLibrary.ArrayIterator.prototype, Symbol.toStringTag, setPrototype({ value: "Array Iterator", writable: false, enumerable: false, configurable: true }, null)); - - _objectDefineProperty(__chakraLibrary.ArrayIterator.prototype.next, 'length', setPrototype({ value: 0, writable: false, enumerable: false, configurable: true }, null)); - - _objectDefineProperty(__chakraLibrary.ArrayIterator.prototype.next, 'name', setPrototype({ value: "next", writable: false, enumerable: false, configurable: true }, null)); - - platform.registerChakraLibraryFunction("CreateArrayIterator", function (arrayObj, iterationKind) { - "use strict"; - return new __chakraLibrary.ArrayIterator(arrayObj, iterationKind); - }); - - platform.registerFunction(FunctionsEnum.ArrayKeys, function () { - "use strict"; - if (this === null || this === undefined) { - __chakraLibrary.raiseThis_NullOrUndefined("Array.prototype.keys"); - } - let o = __chakraLibrary.Object(this); - return __chakraLibrary.CreateArrayIterator(o, 0 /* ArrayIterationKind.Key*/); - }); - - platform.registerFunction(FunctionsEnum.ArrayValues, function () { - "use strict"; - if (this === null || this === undefined) { - __chakraLibrary.raiseThis_NullOrUndefined("Array.prototype.values"); - } - let o = __chakraLibrary.Object(this); - return __chakraLibrary.CreateArrayIterator(o, 1 /* ArrayIterationKind.Value*/); - }); - - platform.registerFunction(FunctionsEnum.ArrayEntries, function () { - "use strict"; - if (this === null || this === undefined) { - __chakraLibrary.raiseThis_NullOrUndefined("Array.prototype.entries"); - } - let o = __chakraLibrary.Object(this); - return __chakraLibrary.CreateArrayIterator(o, 2 /* ArrayIterationKind.KeyAndValue*/); - }); - - platform.registerFunction(FunctionsEnum.ArrayIndexOf, function (searchElement, fromIndex) { - // ECMAScript 2017 #sec-array.prototype.indexof - "use strict"; - - if (this === null || this === undefined) { - __chakraLibrary.raiseThis_NullOrUndefined("Array.prototype.indexOf"); - } - - let o; - if (__chakraLibrary.isArray(this)) { - o = this; - } else { - o = __chakraLibrary.Object(this); - } - - let len = __chakraLibrary.toLength(o["length"]); - if (len === 0) { - return -1; - } - - let n = __chakraLibrary.toInteger(fromIndex); - if (n >= len) { - return -1; - } - - let k; - - /* We refactored the code but it still respect the spec. - When using -0 or +0, the engine might think we are meaning - to use floating point numbers which can hurt performance. - So we refactored to use integers instead. */ - if (n === 0) { // Corresponds to "If n is -0, let k be +0" in the spec - k = 0; - } else if (n > 0) { // Corresponds to "If n >= 0, then [...] let k be n." - k = n; - } else { // Corresponds to "Else n < 0" - k = len + n; - - if (k < 0) { - k = 0; - } - } - - while (k < len) { - if (k in o) { - let elementK = o[k]; - - if (elementK === searchElement) { - return k; - } - } - - k++; - } - - return -1; - }); - - platform.registerFunction(FunctionsEnum.ArrayFilter, function (callbackfn, thisArg) { - // ECMAScript 2017 #sec-array.prototype.filter - "use strict"; - - if (this === null || this === undefined) { - __chakraLibrary.raiseThis_NullOrUndefined("Array.prototype.filter"); - } - - let o; - let len - if (__chakraLibrary.isArray(this)) { - o = this; - len = o.length; - } else { - o = __chakraLibrary.Object(this); - len = __chakraLibrary.GetLength(o); - } - - if (typeof callbackfn != "function") { - __chakraLibrary.raiseFunctionArgument_NeedFunction("Array.prototype.filter"); - } - - let a = __chakraLibrary.arraySpeciesCreate(o, 0); - let k = 0; - let to = 0; - - if (thisArg === undefined) { - // fast path. - while (k < len) { - if (k in o) { - let kValue = o[k]; - if (callbackfn(kValue, k, o)) { - __chakraLibrary.arrayCreateDataPropertyOrThrow(a, to, kValue); - to++; - } - } - k++; - } - } else { - // slow path. - // safe equivalent of calling "callbackfn.bind(thisArg)" - let boundCallback = __chakraLibrary.callInstanceFunc(__chakraLibrary.functionBind, callbackfn, thisArg); - while (k < len) { - if (k in o) { - let kValue = o[k]; - if (boundCallback(kValue, k, o)) { - __chakraLibrary.arrayCreateDataPropertyOrThrow(a, to, kValue); - to++; - } - } - k++; - } - } - - return a; - }); - -}); - -#endif -namespace Js -{ - const char Library_Bytecode_JsBuiltIn[] = { -/* 00000000 */ 0x43, 0x68, 0x42, 0x63, 0x75, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 00000010 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0xFE, 0xCE, 0x02, 0x00, 0xFE, -/* 00000020 */ 0x72, 0x27, 0xFE, 0x72, 0x27, 0x35, 0x00, 0x00, 0x00, 0x5C, 0x05, 0x00, 0x00, 0x2A, 0x09, 0x00, -/* 00000030 */ 0x00, 0x74, 0x1C, 0x00, 0x00, 0x2B, 0x12, 0x01, 0x00, 0x00, 0x00, 0x2A, 0x01, 0x00, 0x00, 0x00, -/* 00000040 */ 0x40, 0x01, 0x00, 0x00, 0x01, 0x58, 0x01, 0x00, 0x00, 0x00, 0x6C, 0x01, 0x00, 0x00, 0x00, 0x78, -/* 00000050 */ 0x01, 0x00, 0x00, 0x00, 0x8E, 0x01, 0x00, 0x00, 0x00, 0x9C, 0x01, 0x00, 0x00, 0x00, 0xBA, 0x01, -/* 00000060 */ 0x00, 0x00, 0x00, 0xD2, 0x01, 0x00, 0x00, 0x00, 0xDE, 0x01, 0x00, 0x00, 0x00, 0xFE, 0x01, 0x00, -/* 00000070 */ 0x00, 0x01, 0x12, 0x02, 0x00, 0x00, 0x00, 0x1C, 0x02, 0x00, 0x00, 0x01, 0x36, 0x02, 0x00, 0x00, -/* 00000080 */ 0x00, 0x46, 0x02, 0x00, 0x00, 0x01, 0x60, 0x02, 0x00, 0x00, 0x00, 0x70, 0x02, 0x00, 0x00, 0x01, -/* 00000090 */ 0x88, 0x02, 0x00, 0x00, 0x00, 0x96, 0x02, 0x00, 0x00, 0x01, 0xB2, 0x02, 0x00, 0x00, 0x00, 0xBC, -/* 000000A0 */ 0x02, 0x00, 0x00, 0x00, 0xC8, 0x02, 0x00, 0x00, 0x00, 0xDA, 0x02, 0x00, 0x00, 0x00, 0xF0, 0x02, -/* 000000B0 */ 0x00, 0x00, 0x00, 0x0A, 0x03, 0x00, 0x00, 0x00, 0x28, 0x03, 0x00, 0x00, 0x00, 0x36, 0x03, 0x00, -/* 000000C0 */ 0x00, 0x00, 0x40, 0x03, 0x00, 0x00, 0x01, 0x68, 0x03, 0x00, 0x00, 0x01, 0x8A, 0x03, 0x00, 0x00, -/* 000000D0 */ 0x01, 0xA4, 0x03, 0x00, 0x00, 0x01, 0xC2, 0x03, 0x00, 0x00, 0x01, 0xE2, 0x03, 0x00, 0x00, 0x01, -/* 000000E0 */ 0xF8, 0x03, 0x00, 0x00, 0x01, 0x1E, 0x04, 0x00, 0x00, 0x00, 0x5A, 0x04, 0x00, 0x00, 0x00, 0x64, -/* 000000F0 */ 0x04, 0x00, 0x00, 0x00, 0x8E, 0x04, 0x00, 0x00, 0x00, 0xBC, 0x04, 0x00, 0x00, 0x00, 0xEC, 0x04, -/* 00000100 */ 0x00, 0x00, 0x00, 0x1C, 0x05, 0x00, 0x00, 0x00, 0x4A, 0x05, 0x00, 0x00, 0x00, 0x5C, 0x05, 0x00, -/* 00000110 */ 0x00, 0x00, 0x47, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x62, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x20, 0x00, -/* 00000120 */ 0x63, 0x00, 0x6F, 0x00, 0x64, 0x00, 0x65, 0x00, 0x00, 0x00, 0x75, 0x00, 0x73, 0x00, 0x65, 0x00, -/* 00000130 */ 0x20, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x63, 0x00, 0x74, 0x00, 0x00, 0x00, -/* 00000140 */ 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x56, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00000150 */ 0x75, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x73, 0x00, -/* 00000160 */ 0x73, 0x00, 0x4E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, -/* 00000170 */ 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x74, 0x00, 0x68, 0x00, -/* 00000180 */ 0x6F, 0x00, 0x64, 0x00, 0x4E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x76, 0x00, -/* 00000190 */ 0x61, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x61, 0x00, 0x72, 0x00, -/* 000001A0 */ 0x67, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x73, 0x00, 0x43, 0x00, -/* 000001B0 */ 0x6F, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x00, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, -/* 000001C0 */ 0x63, 0x00, 0x65, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x65, 0x00, -/* 000001D0 */ 0x00, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x61, 0x00, 0x73, 0x00, 0x00, 0x00, 0x53, 0x00, -/* 000001E0 */ 0x79, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x69, 0x00, 0x74, 0x00, -/* 000001F0 */ 0x65, 0x00, 0x72, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x41, 0x00, -/* 00000200 */ 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x4B, 0x00, 0x65, 0x00, 0x79, 0x00, 0x73, 0x00, -/* 00000210 */ 0x00, 0x00, 0x6B, 0x00, 0x65, 0x00, 0x79, 0x00, 0x73, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, -/* 00000220 */ 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x45, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, -/* 00000230 */ 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, -/* 00000240 */ 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, -/* 00000250 */ 0x49, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x65, 0x00, 0x78, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, -/* 00000260 */ 0x69, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x65, 0x00, 0x78, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, -/* 00000270 */ 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x46, 0x00, 0x69, 0x00, 0x6C, 0x00, -/* 00000280 */ 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x66, 0x00, 0x69, 0x00, 0x6C, 0x00, 0x74, 0x00, -/* 00000290 */ 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, -/* 000002A0 */ 0x49, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, -/* 000002B0 */ 0x00, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x78, 0x00, 0x74, 0x00, 0x00, 0x00, 0x76, 0x00, 0x61, 0x00, -/* 000002C0 */ 0x6C, 0x00, 0x75, 0x00, 0x65, 0x00, 0x00, 0x00, 0x77, 0x00, 0x72, 0x00, 0x69, 0x00, 0x74, 0x00, -/* 000002D0 */ 0x61, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x75, 0x00, -/* 000002E0 */ 0x6D, 0x00, 0x65, 0x00, 0x72, 0x00, 0x61, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 000002F0 */ 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x66, 0x00, 0x69, 0x00, 0x67, 0x00, 0x75, 0x00, 0x72, 0x00, -/* 00000300 */ 0x61, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, -/* 00000310 */ 0x61, 0x00, 0x79, 0x00, 0x20, 0x00, 0x49, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x61, 0x00, -/* 00000320 */ 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x67, 0x00, -/* 00000330 */ 0x74, 0x00, 0x68, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 00000340 */ 0x43, 0x00, 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x41, 0x00, 0x72, 0x00, -/* 00000350 */ 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x49, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x61, 0x00, -/* 00000360 */ 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x6C, 0x00, -/* 00000370 */ 0x49, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, -/* 00000380 */ 0x46, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x00, 0x00, 0x66, 0x00, 0x75, 0x00, 0x6E, 0x00, -/* 00000390 */ 0x63, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x42, 0x00, 0x69, 0x00, 0x6E, 0x00, -/* 000003A0 */ 0x64, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x24, 0x00, 0x61, 0x00, 0x72, 0x00, 0x72, 0x00, -/* 000003B0 */ 0x61, 0x00, 0x79, 0x00, 0x4F, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x24, 0x00, 0x5F, 0x00, 0x5F, 0x00, -/* 000003C0 */ 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x24, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x78, 0x00, 0x74, 0x00, -/* 000003D0 */ 0x49, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x65, 0x00, 0x78, 0x00, 0x24, 0x00, 0x5F, 0x00, 0x5F, 0x00, -/* 000003E0 */ 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x24, 0x00, 0x6B, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x64, 0x00, -/* 000003F0 */ 0x24, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x24, 0x00, 0x69, 0x00, -/* 00000400 */ 0x6E, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x44, 0x00, -/* 00000410 */ 0x6F, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x24, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x41, 0x00, -/* 00000420 */ 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x20, 0x00, 0x49, 0x00, 0x74, 0x00, 0x65, 0x00, -/* 00000430 */ 0x72, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, -/* 00000440 */ 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, -/* 00000450 */ 0x6E, 0x00, 0x65, 0x00, 0x78, 0x00, 0x74, 0x00, 0x00, 0x00, 0x64, 0x00, 0x6F, 0x00, 0x6E, 0x00, -/* 00000460 */ 0x65, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x2E, 0x00, -/* 00000470 */ 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, -/* 00000480 */ 0x65, 0x00, 0x2E, 0x00, 0x6B, 0x00, 0x65, 0x00, 0x79, 0x00, 0x73, 0x00, 0x00, 0x00, 0x41, 0x00, -/* 00000490 */ 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, -/* 000004A0 */ 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x76, 0x00, -/* 000004B0 */ 0x61, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, -/* 000004C0 */ 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, -/* 000004D0 */ 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x65, 0x00, 0x6E, 0x00, -/* 000004E0 */ 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, -/* 000004F0 */ 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, -/* 00000500 */ 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x69, 0x00, 0x6E, 0x00, -/* 00000510 */ 0x64, 0x00, 0x65, 0x00, 0x78, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, -/* 00000520 */ 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, -/* 00000530 */ 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x69, 0x00, -/* 00000540 */ 0x6C, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x66, 0x00, 0x75, 0x00, 0x6E, 0x00, -/* 00000550 */ 0x63, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0xF3, 0x00, 0x00, 0x00, -/* 00000560 */ 0x00, 0x6A, 0x00, 0x00, 0x00, 0x9B, 0x00, 0x00, 0x00, 0x05, 0x01, 0x00, 0x00, 0x6F, 0x01, 0x00, -/* 00000570 */ 0x00, 0x70, 0x01, 0x00, 0x00, 0x7E, 0x01, 0x00, 0x00, 0x7F, 0x01, 0x00, 0x00, 0x97, 0x01, 0x00, -/* 00000580 */ 0x00, 0xBF, 0x01, 0x00, 0x00, 0xC0, 0x01, 0x00, 0x00, 0xF5, 0x01, 0x00, 0x00, 0x4A, 0x02, 0x00, -/* 00000590 */ 0x00, 0x6C, 0x02, 0x00, 0x00, 0xAB, 0x02, 0x00, 0x00, 0xAC, 0x02, 0x00, 0x00, 0xC6, 0x02, 0x00, -/* 000005A0 */ 0x00, 0x6A, 0x03, 0x00, 0x00, 0xF0, 0x03, 0x00, 0x00, 0x7C, 0x04, 0x00, 0x00, 0x08, 0x05, 0x00, -/* 000005B0 */ 0x00, 0x92, 0x05, 0x00, 0x00, 0x99, 0x05, 0x00, 0x00, 0x9A, 0x05, 0x00, 0x00, 0xFB, 0x05, 0x00, -/* 000005C0 */ 0x00, 0x11, 0x06, 0x00, 0x00, 0x93, 0x06, 0x00, 0x00, 0xBB, 0x06, 0x00, 0x00, 0xDD, 0x06, 0x00, -/* 000005D0 */ 0x00, 0x06, 0x07, 0x00, 0x00, 0xBA, 0x07, 0x00, 0x00, 0xC2, 0x07, 0x00, 0x00, 0xC3, 0x07, 0x00, -/* 000005E0 */ 0x00, 0x39, 0x08, 0x00, 0x00, 0x76, 0x08, 0x00, 0x00, 0x9C, 0x08, 0x00, 0x00, 0xEB, 0x08, 0x00, -/* 000005F0 */ 0x00, 0x37, 0x09, 0x00, 0x00, 0x8B, 0x09, 0x00, 0x00, 0xF1, 0x09, 0x00, 0x00, 0x3E, 0x0A, 0x00, -/* 00000600 */ 0x00, 0x8E, 0x0A, 0x00, 0x00, 0x8F, 0x0A, 0x00, 0x00, 0xDA, 0x0A, 0x00, 0x00, 0x73, 0x0B, 0x00, -/* 00000610 */ 0x00, 0xB5, 0x0B, 0x00, 0x00, 0xCC, 0x0B, 0x00, 0x00, 0xED, 0x0B, 0x00, 0x00, 0x0B, 0x0C, 0x00, -/* 00000620 */ 0x00, 0x29, 0x0C, 0x00, 0x00, 0x2A, 0x0C, 0x00, 0x00, 0x6F, 0x0C, 0x00, 0x00, 0xDD, 0x0C, 0x00, -/* 00000630 */ 0x00, 0xEF, 0x0C, 0x00, 0x00, 0xF0, 0x0C, 0x00, 0x00, 0x1A, 0x0D, 0x00, 0x00, 0x1B, 0x0D, 0x00, -/* 00000640 */ 0x00, 0x50, 0x0D, 0x00, 0x00, 0x8D, 0x0D, 0x00, 0x00, 0xA6, 0x0D, 0x00, 0x00, 0xD9, 0x0D, 0x00, -/* 00000650 */ 0x00, 0x3D, 0x0E, 0x00, 0x00, 0x3E, 0x0E, 0x00, 0x00, 0xAA, 0x0E, 0x00, 0x00, 0xDF, 0x0E, 0x00, -/* 00000660 */ 0x00, 0xE0, 0x0E, 0x00, 0x00, 0x17, 0x0F, 0x00, 0x00, 0x18, 0x0F, 0x00, 0x00, 0x63, 0x0F, 0x00, -/* 00000670 */ 0x00, 0xA8, 0x0F, 0x00, 0x00, 0x23, 0x10, 0x00, 0x00, 0x65, 0x10, 0x00, 0x00, 0x86, 0x10, 0x00, -/* 00000680 */ 0x00, 0xBA, 0x10, 0x00, 0x00, 0xF3, 0x10, 0x00, 0x00, 0x4A, 0x11, 0x00, 0x00, 0x64, 0x11, 0x00, -/* 00000690 */ 0x00, 0x81, 0x11, 0x00, 0x00, 0xB6, 0x11, 0x00, 0x00, 0xF8, 0x11, 0x00, 0x00, 0x0E, 0x12, 0x00, -/* 000006A0 */ 0x00, 0x20, 0x12, 0x00, 0x00, 0x2F, 0x12, 0x00, 0x00, 0x4B, 0x12, 0x00, 0x00, 0x6A, 0x12, 0x00, -/* 000006B0 */ 0x00, 0x89, 0x12, 0x00, 0x00, 0x9A, 0x12, 0x00, 0x00, 0xA1, 0x12, 0x00, 0x00, 0xA2, 0x12, 0x00, -/* 000006C0 */ 0x00, 0x63, 0x13, 0x00, 0x00, 0x64, 0x13, 0x00, 0x00, 0x11, 0x14, 0x00, 0x00, 0x12, 0x14, 0x00, -/* 000006D0 */ 0x00, 0xC2, 0x14, 0x00, 0x00, 0xC3, 0x14, 0x00, 0x00, 0x2A, 0x15, 0x00, 0x00, 0x40, 0x15, 0x00, -/* 000006E0 */ 0x00, 0x8B, 0x15, 0x00, 0x00, 0x93, 0x15, 0x00, 0x00, 0x94, 0x15, 0x00, 0x00, 0xD9, 0x15, 0x00, -/* 000006F0 */ 0x00, 0xEF, 0x15, 0x00, 0x00, 0x22, 0x16, 0x00, 0x00, 0x71, 0x16, 0x00, 0x00, 0x7B, 0x16, 0x00, -/* 00000700 */ 0x00, 0xA9, 0x16, 0x00, 0x00, 0xFF, 0x16, 0x00, 0x00, 0x07, 0x17, 0x00, 0x00, 0x08, 0x17, 0x00, -/* 00000710 */ 0x00, 0x4F, 0x17, 0x00, 0x00, 0x65, 0x17, 0x00, 0x00, 0x98, 0x17, 0x00, 0x00, 0xE9, 0x17, 0x00, -/* 00000720 */ 0x00, 0xF3, 0x17, 0x00, 0x00, 0x21, 0x18, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x81, 0x18, 0x00, -/* 00000730 */ 0x00, 0x82, 0x18, 0x00, 0x00, 0xCA, 0x18, 0x00, 0x00, 0xE0, 0x18, 0x00, 0x00, 0x13, 0x19, 0x00, -/* 00000740 */ 0x00, 0x65, 0x19, 0x00, 0x00, 0x6F, 0x19, 0x00, 0x00, 0x9D, 0x19, 0x00, 0x00, 0xFB, 0x19, 0x00, -/* 00000750 */ 0x00, 0x03, 0x1A, 0x00, 0x00, 0x04, 0x1A, 0x00, 0x00, 0x64, 0x1A, 0x00, 0x00, 0x9C, 0x1A, 0x00, -/* 00000760 */ 0x00, 0xB2, 0x1A, 0x00, 0x00, 0xB3, 0x1A, 0x00, 0x00, 0xE6, 0x1A, 0x00, 0x00, 0x38, 0x1B, 0x00, -/* 00000770 */ 0x00, 0x42, 0x1B, 0x00, 0x00, 0x43, 0x1B, 0x00, 0x00, 0x52, 0x1B, 0x00, 0x00, 0x7F, 0x1B, 0x00, -/* 00000780 */ 0x00, 0x95, 0x1B, 0x00, 0x00, 0xA6, 0x1B, 0x00, 0x00, 0xD4, 0x1B, 0x00, 0x00, 0xDE, 0x1B, 0x00, -/* 00000790 */ 0x00, 0xDF, 0x1B, 0x00, 0x00, 0x18, 0x1C, 0x00, 0x00, 0x31, 0x1C, 0x00, 0x00, 0x48, 0x1C, 0x00, -/* 000007A0 */ 0x00, 0x52, 0x1C, 0x00, 0x00, 0x53, 0x1C, 0x00, 0x00, 0x89, 0x1C, 0x00, 0x00, 0xA1, 0x1C, 0x00, -/* 000007B0 */ 0x00, 0xB8, 0x1C, 0x00, 0x00, 0xC2, 0x1C, 0x00, 0x00, 0xC3, 0x1C, 0x00, 0x00, 0xD2, 0x1C, 0x00, -/* 000007C0 */ 0x00, 0xD3, 0x1C, 0x00, 0x00, 0x14, 0x1D, 0x00, 0x00, 0x5A, 0x1D, 0x00, 0x00, 0x9F, 0x1D, 0x00, -/* 000007D0 */ 0x00, 0xD7, 0x1D, 0x00, 0x00, 0x2B, 0x1E, 0x00, 0x00, 0x3E, 0x1E, 0x00, 0x00, 0x90, 0x1E, 0x00, -/* 000007E0 */ 0x00, 0xA3, 0x1E, 0x00, 0x00, 0xDE, 0x1E, 0x00, 0x00, 0xF7, 0x1E, 0x00, 0x00, 0xF8, 0x1E, 0x00, -/* 000007F0 */ 0x00, 0x11, 0x1F, 0x00, 0x00, 0x28, 0x1F, 0x00, 0x00, 0x36, 0x1F, 0x00, 0x00, 0x40, 0x1F, 0x00, -/* 00000800 */ 0x00, 0x41, 0x1F, 0x00, 0x00, 0x5B, 0x1F, 0x00, 0x00, 0x75, 0x1F, 0x00, 0x00, 0x9A, 0x1F, 0x00, -/* 00000810 */ 0x00, 0x9B, 0x1F, 0x00, 0x00, 0xCD, 0x1F, 0x00, 0x00, 0xEB, 0x1F, 0x00, 0x00, 0xFD, 0x1F, 0x00, -/* 00000820 */ 0x00, 0x0B, 0x20, 0x00, 0x00, 0x0C, 0x20, 0x00, 0x00, 0x1D, 0x20, 0x00, 0x00, 0x27, 0x20, 0x00, -/* 00000830 */ 0x00, 0x28, 0x20, 0x00, 0x00, 0x3B, 0x20, 0x00, 0x00, 0x43, 0x20, 0x00, 0x00, 0x44, 0x20, 0x00, -/* 00000840 */ 0x00, 0x9E, 0x20, 0x00, 0x00, 0xD5, 0x20, 0x00, 0x00, 0xEB, 0x20, 0x00, 0x00, 0xEC, 0x20, 0x00, -/* 00000850 */ 0x00, 0x1F, 0x21, 0x00, 0x00, 0x70, 0x21, 0x00, 0x00, 0x7A, 0x21, 0x00, 0x00, 0x7B, 0x21, 0x00, -/* 00000860 */ 0x00, 0x8A, 0x21, 0x00, 0x00, 0x9A, 0x21, 0x00, 0x00, 0xC7, 0x21, 0x00, 0x00, 0xDD, 0x21, 0x00, -/* 00000870 */ 0x00, 0xF9, 0x21, 0x00, 0x00, 0x0A, 0x22, 0x00, 0x00, 0x38, 0x22, 0x00, 0x00, 0x68, 0x22, 0x00, -/* 00000880 */ 0x00, 0x72, 0x22, 0x00, 0x00, 0x7B, 0x22, 0x00, 0x00, 0xAA, 0x22, 0x00, 0x00, 0x04, 0x23, 0x00, -/* 00000890 */ 0x00, 0x0E, 0x23, 0x00, 0x00, 0x0F, 0x23, 0x00, 0x00, 0x49, 0x23, 0x00, 0x00, 0x5C, 0x23, 0x00, -/* 000008A0 */ 0x00, 0x70, 0x23, 0x00, 0x00, 0x71, 0x23, 0x00, 0x00, 0x96, 0x23, 0x00, 0x00, 0xB0, 0x23, 0x00, -/* 000008B0 */ 0x00, 0xCE, 0x23, 0x00, 0x00, 0xEC, 0x23, 0x00, 0x00, 0x13, 0x24, 0x00, 0x00, 0x47, 0x24, 0x00, -/* 000008C0 */ 0x00, 0x9E, 0x24, 0x00, 0x00, 0xBC, 0x24, 0x00, 0x00, 0xD2, 0x24, 0x00, 0x00, 0xE4, 0x24, 0x00, -/* 000008D0 */ 0x00, 0xF9, 0x24, 0x00, 0x00, 0x07, 0x25, 0x00, 0x00, 0x18, 0x25, 0x00, 0x00, 0x32, 0x25, 0x00, -/* 000008E0 */ 0x00, 0x77, 0x25, 0x00, 0x00, 0xEC, 0x25, 0x00, 0x00, 0x0A, 0x26, 0x00, 0x00, 0x28, 0x26, 0x00, -/* 000008F0 */ 0x00, 0x4F, 0x26, 0x00, 0x00, 0x86, 0x26, 0x00, 0x00, 0xDD, 0x26, 0x00, 0x00, 0xFB, 0x26, 0x00, -/* 00000900 */ 0x00, 0x11, 0x27, 0x00, 0x00, 0x23, 0x27, 0x00, 0x00, 0x38, 0x27, 0x00, 0x00, 0x46, 0x27, 0x00, -/* 00000910 */ 0x00, 0x50, 0x27, 0x00, 0x00, 0x51, 0x27, 0x00, 0x00, 0x63, 0x27, 0x00, 0x00, 0x6B, 0x27, 0x00, -/* 00000920 */ 0x00, 0x6E, 0x27, 0x00, 0x00, 0x72, 0x27, 0x00, 0x00, 0x00, 0x0A, 0xB9, 0x0C, 0x00, 0x00, 0x00, -/* 00000930 */ 0x08, 0x04, 0x00, 0xA8, 0x41, 0xC0, 0x00, 0xFE, 0xCE, 0x02, 0x00, 0xFE, 0x70, 0x01, 0x01, 0xFF, -/* 00000940 */ 0x00, 0x10, 0x01, 0x00, 0xFE, 0x70, 0x01, 0xFE, 0x02, 0x26, 0xFE, 0x02, 0x26, 0x40, 0x01, 0x04, -/* 00000950 */ 0x04, 0x05, 0x05, 0x03, 0x05, 0xFE, 0xCF, 0x02, 0x0A, 0x09, 0xA6, 0x00, 0xD3, 0x00, 0x04, 0xFA, -/* 00000960 */ 0x04, 0x24, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00, 0x6E, 0x09, 0x00, 0x00, 0xBF, 0x1C, -/* 00000970 */ 0x08, 0xC0, 0x13, 0x88, 0x25, 0x00, 0x07, 0x01, 0xA2, 0x41, 0xD1, 0x00, 0x01, 0xFE, 0x80, 0x01, -/* 00000980 */ 0x08, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x80, 0x01, 0xFE, 0xEF, 0x25, 0xFE, 0xEF, -/* 00000990 */ 0x25, 0x40, 0x0D, 0x23, 0x2C, 0x09, 0xFB, 0xE2, 0x16, 0x2B, 0x2B, 0x2B, 0x2B, 0x0A, 0x2B, 0x08, -/* 000009A0 */ 0x06, 0xFE, 0xD0, 0x02, 0x06, 0xFE, 0xD1, 0x02, 0x06, 0xFE, 0xD2, 0x02, 0x06, 0xFE, 0xD3, 0x02, -/* 000009B0 */ 0x06, 0xFE, 0xD4, 0x02, 0x06, 0xFE, 0xD5, 0x02, 0x01, 0x00, 0x06, 0xFE, 0xD6, 0x02, 0x0B, 0x06, -/* 000009C0 */ 0xFE, 0xD7, 0x02, 0x05, 0xFE, 0xD8, 0x02, 0x07, 0x06, 0xFE, 0xD9, 0x02, 0x06, 0xFE, 0xDA, 0x02, -/* 000009D0 */ 0x06, 0xFE, 0xDB, 0x02, 0x06, 0xFE, 0xDC, 0x02, 0x06, 0xFE, 0xDD, 0x02, 0x06, 0xFE, 0xDE, 0x02, -/* 000009E0 */ 0x01, 0x01, 0x06, 0xFE, 0xDF, 0x02, 0x06, 0xFE, 0xE0, 0x02, 0x06, 0xFE, 0xE1, 0x02, 0x06, 0xFE, -/* 000009F0 */ 0xE2, 0x02, 0x06, 0xFE, 0xE3, 0x02, 0x06, 0xFE, 0xE4, 0x02, 0x06, 0xFE, 0xE5, 0x02, 0x0C, 0x06, -/* 00000A00 */ 0xFE, 0xE6, 0x02, 0x05, 0xFE, 0xE7, 0x02, 0x06, 0xFE, 0xE8, 0x02, 0x06, 0xFE, 0xE9, 0x02, 0x06, -/* 00000A10 */ 0xFE, 0xEA, 0x02, 0xFE, 0x69, 0x04, 0x4F, 0x29, 0x60, 0x2C, 0x23, 0x00, 0x47, 0x24, 0x2C, 0x60, -/* 00000A20 */ 0x2C, 0x24, 0x01, 0x47, 0x25, 0x2C, 0x60, 0x2C, 0x24, 0x02, 0x47, 0x26, 0x2C, 0x60, 0x2C, 0x24, -/* 00000A30 */ 0x03, 0x47, 0x27, 0x2C, 0x60, 0x2C, 0x24, 0x04, 0x47, 0x28, 0x2C, 0xCB, 0x00, 0x00, 0x00, 0x00, -/* 00000A40 */ 0x00, 0x00, 0x00, 0x00, 0x2C, 0x00, 0x00, 0x00, 0x47, 0x2D, 0x25, 0x07, 0x03, 0x00, 0x5A, 0x00, -/* 00000A50 */ 0x02, 0xCB, 0x1C, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x00, 0x00, 0x79, 0x05, -/* 00000A60 */ 0x2E, 0x05, 0x79, 0x07, 0x2E, 0x06, 0x79, 0x09, 0x2E, 0x07, 0x79, 0x0B, 0x2E, 0x08, 0x79, 0x0D, -/* 00000A70 */ 0x2E, 0x09, 0x5B, 0x01, 0x2E, 0x00, 0x00, 0x5B, 0x02, 0x0E, 0x00, 0x00, 0xEE, 0x03, 0x2D, 0x2D, -/* 00000A80 */ 0x00, 0x00, 0x79, 0x2D, 0x2C, 0x0A, 0x47, 0x2D, 0x25, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0xCB, -/* 00000A90 */ 0x38, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x00, 0x00, 0x79, 0x05, 0x2E, 0x05, -/* 00000AA0 */ 0x79, 0x10, 0x2E, 0x06, 0x79, 0x09, 0x2E, 0x07, 0x79, 0x0B, 0x2E, 0x08, 0x5B, 0x01, 0x2E, 0x01, -/* 00000AB0 */ 0x00, 0x5B, 0x02, 0x0E, 0x01, 0x00, 0xEE, 0x03, 0x2D, 0x2D, 0x01, 0x00, 0x79, 0x2D, 0x2C, 0x0B, -/* 00000AC0 */ 0x47, 0x2D, 0x25, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0x50, 0x00, 0x00, 0x00, 0x03, 0x00, -/* 00000AD0 */ 0x00, 0x00, 0x2E, 0x00, 0x00, 0x00, 0x79, 0x05, 0x2E, 0x05, 0x79, 0x12, 0x2E, 0x06, 0x79, 0x09, -/* 00000AE0 */ 0x2E, 0x07, 0x79, 0x0B, 0x2E, 0x08, 0x5B, 0x01, 0x2E, 0x02, 0x00, 0x5B, 0x02, 0x0E, 0x02, 0x00, -/* 00000AF0 */ 0xEE, 0x03, 0x2D, 0x2D, 0x02, 0x00, 0x79, 0x2D, 0x2C, 0x0C, 0x47, 0x2D, 0x25, 0x07, 0x03, 0x00, -/* 00000B00 */ 0x5A, 0x00, 0x02, 0xCB, 0x68, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x00, 0x00, -/* 00000B10 */ 0x79, 0x05, 0x2E, 0x05, 0x79, 0x14, 0x2E, 0x06, 0x79, 0x15, 0x2E, 0x07, 0x79, 0x0B, 0x2E, 0x08, -/* 00000B20 */ 0x5B, 0x01, 0x2E, 0x03, 0x00, 0x5B, 0x02, 0x0E, 0x03, 0x00, 0xEE, 0x03, 0x2D, 0x2D, 0x03, 0x00, -/* 00000B30 */ 0x79, 0x2D, 0x2C, 0x0D, 0x47, 0x2D, 0x25, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0x80, 0x00, -/* 00000B40 */ 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x00, 0x00, 0x79, 0x05, 0x2E, 0x05, 0x79, 0x17, -/* 00000B50 */ 0x2E, 0x06, 0x79, 0x15, 0x2E, 0x07, 0x79, 0x0B, 0x2E, 0x08, 0x5B, 0x01, 0x2E, 0x04, 0x00, 0x5B, -/* 00000B60 */ 0x02, 0x0E, 0x04, 0x00, 0xEE, 0x03, 0x2D, 0x2D, 0x04, 0x00, 0x79, 0x2D, 0x2C, 0x0E, 0x47, 0x29, -/* 00000B70 */ 0x2C, 0x6B, 0x2C, 0x24, 0x0F, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x24, 0x5B, 0x01, 0x18, 0x05, 0x00, -/* 00000B80 */ 0xD3, 0x00, 0x2D, 0x5B, 0x02, 0x2D, 0x05, 0x00, 0xF2, 0x03, 0xFF, 0x2C, 0x0F, 0x00, 0x00, 0x00, -/* 00000B90 */ 0x05, 0x00, 0x6B, 0x2C, 0x24, 0x10, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x24, 0xF2, 0x01, 0x2C, 0x2C, -/* 00000BA0 */ 0x10, 0x00, 0x00, 0x00, 0x06, 0x00, 0x47, 0x2A, 0x2C, 0x01, 0x49, 0x01, 0x2C, 0x60, 0x2C, 0x2C, -/* 00000BB0 */ 0x11, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x2A, 0x07, 0x00, 0xEE, 0x02, 0x2D, 0x28, -/* 00000BC0 */ 0x07, 0x00, 0x75, 0x2D, 0x2C, 0x12, 0x01, 0x49, 0x01, 0x2C, 0x60, 0x2D, 0x24, 0x13, 0x75, 0x2D, -/* 00000BD0 */ 0x2C, 0x14, 0x01, 0x49, 0x01, 0x2C, 0x60, 0x2D, 0x24, 0x15, 0x75, 0x2D, 0x2C, 0x16, 0x01, 0x49, -/* 00000BE0 */ 0x01, 0x2C, 0x60, 0x2D, 0x24, 0x17, 0x75, 0x2D, 0x2C, 0x18, 0x01, 0x49, 0x01, 0x2C, 0x60, 0x2D, -/* 00000BF0 */ 0x24, 0x19, 0x75, 0x2D, 0x2C, 0x1A, 0x01, 0x49, 0x01, 0x2C, 0x60, 0x2D, 0x24, 0x1B, 0x75, 0x2D, -/* 00000C00 */ 0x2C, 0x1C, 0x47, 0x2C, 0x26, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x01, 0x49, 0x01, 0x2D, 0x60, -/* 00000C10 */ 0x2D, 0x2D, 0x1D, 0x60, 0x2D, 0x2D, 0x1E, 0x5B, 0x01, 0x2D, 0x08, 0x00, 0x5B, 0x02, 0x19, 0x08, -/* 00000C20 */ 0x00, 0x47, 0x2D, 0x25, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0x98, 0x00, 0x00, 0x00, 0x06, -/* 00000C30 */ 0x00, 0x00, 0x00, 0x2E, 0x00, 0x00, 0x00, 0xD6, 0x01, 0x2F, 0x2E, 0x79, 0x2F, 0x2E, 0x1F, 0x79, -/* 00000C40 */ 0x0B, 0x2E, 0x20, 0x79, 0x1D, 0x2E, 0x21, 0x79, 0x0B, 0x2E, 0x22, 0x5B, 0x01, 0x2E, 0x09, 0x00, -/* 00000C50 */ 0x5B, 0x02, 0x0E, 0x09, 0x00, 0xEE, 0x03, 0x2D, 0x2D, 0x09, 0x00, 0x5B, 0x03, 0x2D, 0x08, 0x00, -/* 00000C60 */ 0xEE, 0x04, 0xFF, 0x2C, 0x08, 0x00, 0x47, 0x2C, 0x26, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x01, -/* 00000C70 */ 0x49, 0x01, 0x2D, 0x60, 0x2D, 0x2D, 0x1D, 0x60, 0x2D, 0x2D, 0x1E, 0x5B, 0x01, 0x2D, 0x0A, 0x00, -/* 00000C80 */ 0x60, 0x2D, 0x27, 0x23, 0x5B, 0x02, 0x2D, 0x0A, 0x00, 0x47, 0x2D, 0x25, 0x07, 0x03, 0x00, 0x5A, -/* 00000C90 */ 0x00, 0x02, 0xCB, 0xB0, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x00, 0x00, 0x79, -/* 00000CA0 */ 0x1F, 0x2E, 0x1F, 0x79, 0x1D, 0x2E, 0x20, 0x79, 0x1D, 0x2E, 0x21, 0x79, 0x0B, 0x2E, 0x22, 0x5B, -/* 00000CB0 */ 0x01, 0x2E, 0x0B, 0x00, 0x5B, 0x02, 0x0E, 0x0B, 0x00, 0xEE, 0x03, 0x2D, 0x2D, 0x0B, 0x00, 0x5B, -/* 00000CC0 */ 0x03, 0x2D, 0x0A, 0x00, 0xEE, 0x04, 0xFF, 0x2C, 0x0A, 0x00, 0x47, 0x2C, 0x26, 0x07, 0x04, 0x00, -/* 00000CD0 */ 0x5A, 0x00, 0x02, 0x01, 0x49, 0x01, 0x2D, 0x60, 0x2D, 0x2D, 0x1D, 0x60, 0x2D, 0x2D, 0x1E, 0x60, -/* 00000CE0 */ 0x2D, 0x2D, 0x24, 0x5B, 0x01, 0x2D, 0x0C, 0x00, 0x5B, 0x02, 0x20, 0x0C, 0x00, 0x47, 0x2D, 0x25, -/* 00000CF0 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0xC8, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x2E, -/* 00000D00 */ 0x00, 0x00, 0x00, 0x79, 0x09, 0x2E, 0x1F, 0x79, 0x1D, 0x2E, 0x20, 0x79, 0x1D, 0x2E, 0x21, 0x79, -/* 00000D10 */ 0x0B, 0x2E, 0x22, 0x5B, 0x01, 0x2E, 0x0D, 0x00, 0x5B, 0x02, 0x0E, 0x0D, 0x00, 0xEE, 0x03, 0x2D, -/* 00000D20 */ 0x2D, 0x0D, 0x00, 0x5B, 0x03, 0x2D, 0x0C, 0x00, 0xEE, 0x04, 0xFF, 0x2C, 0x0C, 0x00, 0x47, 0x2C, -/* 00000D30 */ 0x26, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x01, 0x49, 0x01, 0x2D, 0x60, 0x2D, 0x2D, 0x1D, 0x60, -/* 00000D40 */ 0x2D, 0x2D, 0x1E, 0x60, 0x2D, 0x2D, 0x24, 0x5B, 0x01, 0x2D, 0x0E, 0x00, 0x5B, 0x02, 0x21, 0x0E, -/* 00000D50 */ 0x00, 0x47, 0x2D, 0x25, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0xE0, 0x00, 0x00, 0x00, 0x09, -/* 00000D60 */ 0x00, 0x00, 0x00, 0x2E, 0x00, 0x00, 0x00, 0x79, 0x19, 0x2E, 0x1F, 0x79, 0x1D, 0x2E, 0x20, 0x79, -/* 00000D70 */ 0x1D, 0x2E, 0x21, 0x79, 0x0B, 0x2E, 0x22, 0x5B, 0x01, 0x2E, 0x0F, 0x00, 0x5B, 0x02, 0x0E, 0x0F, -/* 00000D80 */ 0x00, 0xEE, 0x03, 0x2D, 0x2D, 0x0F, 0x00, 0x5B, 0x03, 0x2D, 0x0E, 0x00, 0xEE, 0x04, 0xFF, 0x2C, -/* 00000D90 */ 0x0E, 0x00, 0x6B, 0x2C, 0x24, 0x0F, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x24, 0x5B, 0x01, 0x22, 0x10, -/* 00000DA0 */ 0x00, 0xD3, 0x02, 0x2D, 0x5B, 0x02, 0x2D, 0x10, 0x00, 0xF2, 0x03, 0xFF, 0x2C, 0x0F, 0x00, 0x00, -/* 00000DB0 */ 0x00, 0x10, 0x00, 0x47, 0x2D, 0x24, 0x6B, 0x2C, 0x2D, 0x25, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x2D, -/* 00000DC0 */ 0x60, 0x2E, 0x29, 0x26, 0x5B, 0x01, 0x2E, 0x11, 0x00, 0xD3, 0x03, 0x2E, 0x5B, 0x02, 0x2E, 0x11, -/* 00000DD0 */ 0x00, 0xF2, 0x03, 0xFF, 0x2C, 0x25, 0x00, 0x00, 0x00, 0x11, 0x00, 0x47, 0x2D, 0x24, 0x6B, 0x2C, -/* 00000DE0 */ 0x2D, 0x25, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x2D, 0x60, 0x2E, 0x29, 0x27, 0x5B, 0x01, 0x2E, 0x12, -/* 00000DF0 */ 0x00, 0xD3, 0x04, 0x2E, 0x5B, 0x02, 0x2E, 0x12, 0x00, 0xF2, 0x03, 0xFF, 0x2C, 0x25, 0x00, 0x00, -/* 00000E00 */ 0x00, 0x12, 0x00, 0x47, 0x2D, 0x24, 0x6B, 0x2C, 0x2D, 0x25, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x2D, -/* 00000E10 */ 0x60, 0x2E, 0x29, 0x28, 0x5B, 0x01, 0x2E, 0x13, 0x00, 0xD3, 0x05, 0x2E, 0x5B, 0x02, 0x2E, 0x13, -/* 00000E20 */ 0x00, 0xF2, 0x03, 0xFF, 0x2C, 0x25, 0x00, 0x00, 0x00, 0x13, 0x00, 0x47, 0x2D, 0x24, 0x6B, 0x2C, -/* 00000E30 */ 0x2D, 0x25, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x2D, 0x60, 0x2E, 0x29, 0x29, 0x5B, 0x01, 0x2E, 0x14, -/* 00000E40 */ 0x00, 0xD3, 0x06, 0x2E, 0x5B, 0x02, 0x2E, 0x14, 0x00, 0xF2, 0x03, 0xFF, 0x2C, 0x25, 0x00, 0x00, -/* 00000E50 */ 0x00, 0x14, 0x00, 0x47, 0x2D, 0x24, 0x6B, 0x2C, 0x2D, 0x25, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x2D, -/* 00000E60 */ 0x60, 0x2E, 0x29, 0x2A, 0x5B, 0x01, 0x2E, 0x15, 0x00, 0xD3, 0x07, 0x2E, 0x5B, 0x02, 0x2E, 0x15, -/* 00000E70 */ 0x00, 0xF2, 0x03, 0xFF, 0x2C, 0x25, 0x00, 0x00, 0x00, 0x15, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x0A, -/* 00000E80 */ 0xF8, 0x00, 0xE0, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, -/* 00000E90 */ 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0xC8, 0x00, -/* 00000EA0 */ 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, -/* 00000EB0 */ 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0xB0, 0x00, 0x00, 0x00, 0x03, 0x04, -/* 00000EC0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, -/* 00000ED0 */ 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, -/* 00000EE0 */ 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, -/* 00000EF0 */ 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4B, 0x02, -/* 00000F00 */ 0x00, 0x00, 0x50, 0x02, 0x00, 0x00, 0x4A, 0x02, 0x00, 0x00, 0x4C, 0x02, 0x00, 0x00, 0x68, 0x00, -/* 00000F10 */ 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4B, 0x02, 0x00, 0x00, 0x50, 0x02, -/* 00000F20 */ 0x00, 0x00, 0x4A, 0x02, 0x00, 0x00, 0x4C, 0x02, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x03, 0x04, -/* 00000F30 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4B, 0x02, 0x00, 0x00, 0x50, 0x02, 0x00, 0x00, 0x4A, 0x02, -/* 00000F40 */ 0x00, 0x00, 0x4C, 0x02, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, -/* 00000F50 */ 0x00, 0x00, 0x4B, 0x02, 0x00, 0x00, 0x50, 0x02, 0x00, 0x00, 0x4A, 0x02, 0x00, 0x00, 0x4C, 0x02, -/* 00000F60 */ 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x03, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4B, 0x02, -/* 00000F70 */ 0x00, 0x00, 0x50, 0x02, 0x00, 0x00, 0x4A, 0x02, 0x00, 0x00, 0x4C, 0x02, 0x00, 0x00, 0x49, 0x02, -/* 00000F80 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0x02, -/* 00000F90 */ 0x00, 0x00, 0xD9, 0x02, 0x00, 0x00, 0xDB, 0x02, 0x00, 0x00, 0xDD, 0x02, 0x00, 0x00, 0xDF, 0x02, -/* 00000FA0 */ 0x00, 0x00, 0x52, 0xFE, 0x81, 0x02, 0xFE, 0x68, 0x02, 0xFE, 0x54, 0x01, 0xFE, 0x67, 0x02, 0xFE, -/* 00000FB0 */ 0x4B, 0x02, 0xFE, 0x50, 0x02, 0xFE, 0x4A, 0x02, 0xFE, 0x4C, 0x02, 0xFE, 0x49, 0x02, 0xFE, 0xD0, -/* 00000FC0 */ 0x02, 0xFE, 0xD9, 0x02, 0xFE, 0xDB, 0x02, 0xFE, 0xDD, 0x02, 0xFE, 0xDF, 0x02, 0xFE, 0x51, 0x02, -/* 00000FD0 */ 0xFE, 0x4D, 0x02, 0xFE, 0xE1, 0x02, 0xFE, 0x15, 0x01, 0xFE, 0x8A, 0x02, 0xFE, 0x8A, 0x02, 0xFE, -/* 00000FE0 */ 0x91, 0x02, 0xFE, 0x91, 0x02, 0xFE, 0x92, 0x02, 0xFE, 0x92, 0x02, 0xFE, 0x84, 0x02, 0xFE, 0xEB, -/* 00000FF0 */ 0x02, 0xFE, 0x66, 0x02, 0xFE, 0xEC, 0x02, 0xFE, 0xE1, 0x02, 0xFE, 0x15, 0x01, 0xFE, 0x83, 0x01, -/* 00001000 */ 0xFE, 0x82, 0x01, 0xFE, 0x80, 0x01, 0xFE, 0x81, 0x01, 0xFE, 0x67, 0x01, 0xF9, 0xFE, 0x52, 0x02, -/* 00001010 */ 0xFE, 0xD9, 0x02, 0xFE, 0xD0, 0x02, 0xFE, 0xDB, 0x02, 0xFE, 0xDD, 0x02, 0xFE, 0xDF, 0x02, 0xFE, -/* 00001020 */ 0x9B, 0x01, 0x19, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x29, 0x00, 0x07, 0x00, 0x35, 0x00, 0x07, -/* 00001030 */ 0x00, 0x55, 0x00, 0x07, 0x00, 0x22, 0x00, 0x07, 0x00, 0x40, 0x00, 0x36, 0x01, 0xEE, 0x02, 0x21, -/* 00001040 */ 0x00, 0x9F, 0x02, 0x17, 0x00, 0x63, 0x00, 0x1D, 0x00, 0x4F, 0x00, 0x0C, 0x00, 0x4C, 0x00, 0x0C, -/* 00001050 */ 0x00, 0x54, 0x00, 0x0C, 0x00, 0x66, 0x00, 0x0C, 0x00, 0x4D, 0x00, 0x0C, 0x00, 0x51, 0x00, 0x64, -/* 00001060 */ 0x00, 0x13, 0x08, 0x64, 0x00, 0xC2, 0x00, 0x64, 0x00, 0xAE, 0x00, 0x64, 0x00, 0xB1, 0x00, 0x21, -/* 00001070 */ 0x00, 0xD1, 0x00, 0x28, 0x00, 0x74, 0x01, 0x28, 0x00, 0x7A, 0x01, 0x28, 0x00, 0x82, 0x01, 0x28, -/* 00001080 */ 0x00, 0x40, 0x06, 0x2A, 0x00, 0x26, 0x07, 0x00, 0xB1, 0x1B, 0x00, 0x00, 0xEC, 0x18, 0x00, 0x00, -/* 00001090 */ 0x87, 0x18, 0x00, 0x00, 0xAF, 0x17, 0x00, 0x00, 0xD7, 0x16, 0x00, 0x00, 0xFF, 0x15, 0x00, 0x00, -/* 000010A0 */ 0xD3, 0x13, 0x00, 0x00, 0xA8, 0x10, 0x00, 0x00, 0xBF, 0x3C, 0x0B, 0xC2, 0x43, 0xA0, 0x09, 0x00, -/* 000010B0 */ 0xB8, 0x39, 0xA2, 0x41, 0xD1, 0x00, 0x09, 0xFE, 0x7D, 0x20, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, -/* 000010C0 */ 0x03, 0xFE, 0x7D, 0x20, 0xFE, 0xEB, 0x06, 0xFE, 0xEB, 0x06, 0x01, 0x10, 0x09, 0x14, 0x05, 0x8E, -/* 000010D0 */ 0x81, 0x36, 0x01, 0x04, 0x0B, 0x02, 0x0A, 0x0A, 0x0A, 0x0A, 0x02, 0x14, 0xFE, 0x18, 0x01, 0xFE, -/* 000010E0 */ 0x88, 0x01, 0xFE, 0xBD, 0x01, 0xFE, 0x2D, 0x02, 0x05, 0xFE, 0xCF, 0x02, 0x07, 0x05, 0xFE, 0xF7, -/* 000010F0 */ 0x02, 0x06, 0xFE, 0xF8, 0x02, 0x01, 0x00, 0x08, 0x01, 0x01, 0xFE, 0x37, 0x02, 0x59, 0x16, 0xB2, -/* 00001100 */ 0x0B, 0x16, 0x4F, 0x0C, 0x4F, 0x0D, 0x4F, 0x0E, 0x4F, 0x0F, 0x4F, 0x10, 0x4F, 0x11, 0x4F, 0x12, -/* 00001110 */ 0x4F, 0x13, 0x14, 0x0A, 0x00, 0x0B, 0x03, 0xA6, 0x16, 0x14, 0x03, 0x00, 0x0B, 0x16, 0x09, 0x1D, -/* 00001120 */ 0x00, 0x01, 0x49, 0x01, 0x17, 0x6B, 0x16, 0x17, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x17, 0x5B, -/* 00001130 */ 0x01, 0x04, 0x00, 0x00, 0xF2, 0x02, 0xFF, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA6, 0x16, -/* 00001140 */ 0x47, 0x0C, 0x16, 0xA6, 0x16, 0x47, 0x0D, 0x16, 0x01, 0x49, 0x01, 0x17, 0x6B, 0x16, 0x17, 0x01, -/* 00001150 */ 0x07, 0x02, 0x00, 0x5A, 0x00, 0x17, 0x5B, 0x01, 0x0B, 0x01, 0x00, 0xF2, 0x02, 0x16, 0x16, 0x01, -/* 00001160 */ 0x00, 0x00, 0x00, 0x01, 0x00, 0x0E, 0x0F, 0x00, 0x16, 0x47, 0x0C, 0x0B, 0xA5, 0x16, 0x0C, 0x02, -/* 00001170 */ 0x00, 0x00, 0x47, 0x0D, 0x16, 0x09, 0x40, 0x00, 0x01, 0x49, 0x01, 0x17, 0x6B, 0x16, 0x17, 0x03, -/* 00001180 */ 0x07, 0x02, 0x00, 0x5A, 0x00, 0x17, 0x5B, 0x01, 0x0B, 0x02, 0x00, 0xF2, 0x02, 0x16, 0x16, 0x03, -/* 00001190 */ 0x00, 0x00, 0x00, 0x02, 0x00, 0x47, 0x0C, 0x16, 0x01, 0x49, 0x01, 0x17, 0x6B, 0x16, 0x17, 0x04, -/* 000011A0 */ 0x07, 0x02, 0x00, 0x5A, 0x00, 0x17, 0x5B, 0x01, 0x0C, 0x03, 0x00, 0xF2, 0x02, 0x16, 0x16, 0x04, -/* 000011B0 */ 0x00, 0x00, 0x00, 0x03, 0x00, 0x47, 0x0D, 0x16, 0x2C, 0x16, 0x09, 0x0D, 0x03, 0x00, 0x16, 0x05, -/* 000011C0 */ 0x09, 0x1D, 0x00, 0x01, 0x49, 0x01, 0x17, 0x6B, 0x16, 0x17, 0x05, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 000011D0 */ 0x17, 0x5B, 0x01, 0x04, 0x04, 0x00, 0xF2, 0x02, 0xFF, 0x16, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, -/* 000011E0 */ 0x01, 0x49, 0x01, 0x17, 0x6B, 0x16, 0x17, 0x06, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x17, 0x5B, 0x01, -/* 000011F0 */ 0x0C, 0x05, 0x00, 0x5B, 0x02, 0x06, 0x05, 0x00, 0xF2, 0x03, 0x16, 0x16, 0x06, 0x00, 0x00, 0x00, -/* 00001200 */ 0x05, 0x00, 0x47, 0x0E, 0x16, 0x47, 0x0F, 0x06, 0x47, 0x10, 0x06, 0xA6, 0x16, 0x14, 0x03, 0x00, -/* 00001210 */ 0x0A, 0x16, 0x09, 0x73, 0x00, 0xEB, 0x00, 0xEC, 0x00, 0x12, 0x03, 0x00, 0x0F, 0x0D, 0x09, 0x62, -/* 00001220 */ 0x00, 0xB9, 0x16, 0x0F, 0x0C, 0x00, 0x00, 0x0E, 0x52, 0x00, 0x16, 0x96, 0x16, 0x0C, 0x0F, 0x01, -/* 00001230 */ 0x00, 0x47, 0x11, 0x16, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x07, 0x5B, 0x01, 0x11, 0x06, 0x00, 0x5B, -/* 00001240 */ 0x02, 0x0F, 0x06, 0x00, 0x5B, 0x03, 0x0C, 0x06, 0x00, 0xEE, 0x04, 0x16, 0x09, 0x06, 0x00, 0x0E, -/* 00001250 */ 0x2A, 0x00, 0x16, 0x01, 0x49, 0x01, 0x17, 0x6B, 0x16, 0x17, 0x07, 0x07, 0x04, 0x00, 0x5A, 0x00, -/* 00001260 */ 0x17, 0x5B, 0x01, 0x0E, 0x07, 0x00, 0x5B, 0x02, 0x10, 0x07, 0x00, 0x5B, 0x03, 0x11, 0x07, 0x00, -/* 00001270 */ 0xF2, 0x04, 0xFF, 0x16, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x28, 0x10, 0x10, 0x28, 0x0F, 0x0F, -/* 00001280 */ 0x09, 0x94, 0xFF, 0xED, 0x00, 0x09, 0xA2, 0x00, 0x01, 0x49, 0x01, 0x17, 0x6B, 0x16, 0x17, 0x08, -/* 00001290 */ 0x07, 0x04, 0x00, 0x5A, 0x00, 0x17, 0x01, 0x49, 0x01, 0x18, 0x60, 0x18, 0x18, 0x09, 0x5B, 0x01, -/* 000012A0 */ 0x18, 0x08, 0x00, 0x5B, 0x02, 0x09, 0x08, 0x00, 0x5B, 0x03, 0x0A, 0x08, 0x00, 0xF2, 0x04, 0x16, -/* 000012B0 */ 0x16, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x47, 0x12, 0x16, 0xEB, 0x01, 0xEC, 0x01, 0x12, 0x03, -/* 000012C0 */ 0x00, 0x0F, 0x0D, 0x09, 0x62, 0x00, 0xB9, 0x16, 0x0F, 0x0C, 0x02, 0x00, 0x0E, 0x52, 0x00, 0x16, -/* 000012D0 */ 0x96, 0x16, 0x0C, 0x0F, 0x03, 0x00, 0x47, 0x13, 0x16, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x07, 0x5B, -/* 000012E0 */ 0x01, 0x13, 0x09, 0x00, 0x5B, 0x02, 0x0F, 0x09, 0x00, 0x5B, 0x03, 0x0C, 0x09, 0x00, 0xEE, 0x04, -/* 000012F0 */ 0x16, 0x12, 0x09, 0x00, 0x0E, 0x2A, 0x00, 0x16, 0x01, 0x49, 0x01, 0x17, 0x6B, 0x16, 0x17, 0x07, -/* 00001300 */ 0x07, 0x04, 0x00, 0x5A, 0x00, 0x17, 0x5B, 0x01, 0x0E, 0x0A, 0x00, 0x5B, 0x02, 0x10, 0x0A, 0x00, -/* 00001310 */ 0x5B, 0x03, 0x13, 0x0A, 0x00, 0xF2, 0x04, 0xFF, 0x16, 0x07, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x28, -/* 00001320 */ 0x10, 0x10, 0x28, 0x0F, 0x0F, 0x09, 0x94, 0xFF, 0xED, 0x01, 0x47, 0x00, 0x0E, 0x09, 0x02, 0x00, -/* 00001330 */ 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x91, 0x02, 0xAE, 0xC1, 0xFE, 0x02, 0x01, 0xFE, 0x4E, 0x02, 0xFE, -/* 00001340 */ 0x92, 0x02, 0xFE, 0x55, 0x02, 0xFE, 0x56, 0x02, 0xFE, 0xEB, 0x02, 0xFE, 0xEC, 0x02, 0xFE, 0xF4, -/* 00001350 */ 0x20, 0x20, 0x15, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x37, 0x00, 0x1D, 0x00, 0x58, 0x00, 0x05, 0x00, -/* 00001360 */ 0x0F, 0x00, 0x05, 0x00, 0x10, 0x00, 0x21, 0x00, 0x31, 0x00, 0x03, 0x00, 0x16, 0x00, 0x0C, 0x00, -/* 00001370 */ 0x2D, 0x00, 0x20, 0x00, 0x2E, 0x00, 0x20, 0x00, 0x3F, 0x00, 0x0B, 0x00, 0x33, 0x00, 0x1D, 0x00, -/* 00001380 */ 0x61, 0x00, 0x25, 0x00, 0x3A, 0x00, 0x03, 0x00, 0x13, 0x00, 0x03, 0x00, 0x15, 0x00, 0x0E, 0x00, -/* 00001390 */ 0x4A, 0x00, 0x08, 0x00, 0x1B, 0x00, 0x0A, 0x00, 0x22, 0x00, 0x09, 0x00, 0x27, 0x00, 0x1F, 0x00, -/* 000013A0 */ 0x38, 0x00, 0x27, 0x00, 0x57, 0x00, 0x03, 0x00, 0x3E, 0x00, 0x0B, 0x00, 0x8F, 0x00, 0x36, 0x00, -/* 000013B0 */ 0x7C, 0x00, 0x08, 0x00, 0x1B, 0x00, 0x0A, 0x00, 0x22, 0x00, 0x09, 0x00, 0x27, 0x00, 0x1F, 0x00, -/* 000013C0 */ 0x3B, 0x00, 0x27, 0x00, 0x57, 0x00, 0x03, 0x00, 0x3E, 0x00, 0x08, 0x00, 0x26, 0x00, 0x08, 0x00, -/* 000013D0 */ 0x0E, 0x00, 0x00, 0xBF, 0x3C, 0x0B, 0xC2, 0x43, 0xA0, 0x09, 0x00, 0x7E, 0x3A, 0xA2, 0x41, 0xD1, -/* 000013E0 */ 0x00, 0x08, 0xFE, 0x3E, 0x1A, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x3E, 0x1A, 0xFE, -/* 000013F0 */ 0x02, 0x06, 0xFE, 0x02, 0x06, 0x01, 0x0C, 0x08, 0x10, 0x03, 0x5E, 0x4F, 0x10, 0x01, 0x02, 0x05, -/* 00001400 */ 0x01, 0x06, 0x06, 0x06, 0x06, 0x01, 0x10, 0xFE, 0x1C, 0x01, 0xFE, 0x53, 0x01, 0x05, 0xFE, 0xCF, -/* 00001410 */ 0x02, 0x07, 0x05, 0xFE, 0xF6, 0x02, 0x01, 0x00, 0x01, 0xFF, 0x01, 0x01, 0xFE, 0x5D, 0x01, 0x59, -/* 00001420 */ 0x11, 0xB2, 0x0A, 0x11, 0x4F, 0x0B, 0x4F, 0x0C, 0x4F, 0x0D, 0x4F, 0x0E, 0x4F, 0x0F, 0x14, 0x0A, -/* 00001430 */ 0x00, 0x0A, 0x03, 0xA6, 0x11, 0x14, 0x03, 0x00, 0x0A, 0x11, 0x09, 0x1D, 0x00, 0x01, 0x49, 0x01, -/* 00001440 */ 0x12, 0x6B, 0x11, 0x12, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x12, 0x5B, 0x01, 0x04, 0x00, 0x00, -/* 00001450 */ 0xF2, 0x02, 0xFF, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA6, 0x11, 0x47, 0x0B, 0x11, 0x01, -/* 00001460 */ 0x49, 0x01, 0x12, 0x6B, 0x11, 0x12, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x12, 0x5B, 0x01, 0x0A, -/* 00001470 */ 0x01, 0x00, 0xF2, 0x02, 0x11, 0x11, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0E, 0x06, 0x00, 0x11, -/* 00001480 */ 0x47, 0x0B, 0x0A, 0x09, 0x20, 0x00, 0x01, 0x49, 0x01, 0x12, 0x6B, 0x11, 0x12, 0x02, 0x07, 0x02, -/* 00001490 */ 0x00, 0x5A, 0x00, 0x12, 0x5B, 0x01, 0x0A, 0x02, 0x00, 0xF2, 0x02, 0x11, 0x11, 0x02, 0x00, 0x00, -/* 000014A0 */ 0x00, 0x02, 0x00, 0x47, 0x0B, 0x11, 0x01, 0x49, 0x01, 0x12, 0x6B, 0x11, 0x12, 0x03, 0x07, 0x02, -/* 000014B0 */ 0x00, 0x5A, 0x00, 0x12, 0xA5, 0x13, 0x0B, 0x04, 0x00, 0x00, 0x5B, 0x01, 0x13, 0x03, 0x00, 0xF2, -/* 000014C0 */ 0x02, 0x11, 0x11, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x47, 0x0C, 0x11, 0x14, 0x03, 0x00, 0x0C, -/* 000014D0 */ 0x05, 0x09, 0x06, 0x00, 0x47, 0x00, 0x06, 0x09, 0xA0, 0x00, 0x01, 0x49, 0x01, 0x12, 0x6B, 0x11, -/* 000014E0 */ 0x12, 0x05, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x12, 0x5B, 0x01, 0x09, 0x04, 0x00, 0xF2, 0x02, 0x11, -/* 000014F0 */ 0x11, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x47, 0x0D, 0x11, 0x10, 0x03, 0x00, 0x0D, 0x0C, 0x09, -/* 00001500 */ 0x06, 0x00, 0x47, 0x00, 0x06, 0x09, 0x72, 0x00, 0xA6, 0x11, 0x47, 0x0E, 0x11, 0x14, 0x03, 0x00, -/* 00001510 */ 0x0D, 0x05, 0x09, 0x06, 0x00, 0x47, 0x0E, 0x05, 0x09, 0x20, 0x00, 0x11, 0x03, 0x00, 0x0D, 0x05, -/* 00001520 */ 0x09, 0x06, 0x00, 0x47, 0x0E, 0x0D, 0x09, 0x12, 0x00, 0x2F, 0x11, 0x0C, 0x0D, 0x47, 0x0E, 0x11, -/* 00001530 */ 0x12, 0x03, 0x00, 0x0E, 0x05, 0x09, 0x03, 0x00, 0x47, 0x0E, 0x05, 0xEB, 0x00, 0xEC, 0x00, 0x12, -/* 00001540 */ 0x03, 0x00, 0x0E, 0x0C, 0x09, 0x29, 0x00, 0xB9, 0x11, 0x0E, 0x0B, 0x00, 0x00, 0x0E, 0x19, 0x00, -/* 00001550 */ 0x11, 0x96, 0x11, 0x0B, 0x0E, 0x01, 0x00, 0x47, 0x0F, 0x11, 0x14, 0x03, 0x00, 0x0F, 0x08, 0x09, -/* 00001560 */ 0x08, 0x00, 0x47, 0x00, 0x0E, 0xED, 0x00, 0x09, 0x10, 0x00, 0x28, 0x0E, 0x0E, 0x09, 0xCD, 0xFF, -/* 00001570 */ 0xED, 0x00, 0x47, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x91, 0x02, 0xAE, -/* 00001580 */ 0xFE, 0x02, 0x01, 0xFE, 0x53, 0x02, 0xC1, 0xFE, 0x54, 0x02, 0xFE, 0xBB, 0x1A, 0x1C, 0x0F, 0x00, -/* 00001590 */ 0x00, 0x00, 0x0F, 0x00, 0x37, 0x00, 0x1D, 0x00, 0x59, 0x00, 0x05, 0x00, 0x0F, 0x00, 0x21, 0x00, -/* 000015A0 */ 0x31, 0x00, 0x06, 0x00, 0x27, 0x00, 0x20, 0x00, 0x35, 0x00, 0x26, 0x00, 0x39, 0x00, 0x08, 0x00, -/* 000015B0 */ 0x1D, 0x00, 0x06, 0x00, 0x1E, 0x00, 0x20, 0x00, 0x36, 0x00, 0x08, 0x00, 0x1C, 0x00, 0x06, 0x00, -/* 000015C0 */ 0x1E, 0x00, 0x05, 0x00, 0x14, 0x01, 0x08, 0x00, 0x58, 0x00, 0x06, 0x00, 0x16, 0x00, 0x08, 0x00, -/* 000015D0 */ 0x4F, 0x00, 0x06, 0x00, 0x4E, 0x00, 0x07, 0x00, 0x1A, 0x00, 0x08, 0x00, 0x1D, 0x00, 0x07, 0x00, -/* 000015E0 */ 0x2F, 0x00, 0x08, 0x00, 0x17, 0x00, 0x0A, 0x00, 0x1E, 0x00, 0x09, 0x00, 0x26, 0x00, 0x08, 0x00, -/* 000015F0 */ 0x36, 0x00, 0x08, 0x00, 0x37, 0x00, 0x08, 0x00, 0x18, 0x00, 0x08, 0x00, 0x0F, 0x00, 0x00, 0xBF, -/* 00001600 */ 0x1C, 0x08, 0xC0, 0x03, 0x80, 0x01, 0x00, 0x75, 0x3A, 0xA0, 0x41, 0xD1, 0x00, 0x07, 0xFE, 0xBC, -/* 00001610 */ 0x18, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0xBC, 0x18, 0xFE, 0x44, 0x01, 0xFE, 0x44, -/* 00001620 */ 0x01, 0x01, 0x04, 0x06, 0x08, 0x04, 0x1F, 0x1E, 0x03, 0x03, 0x03, 0x03, 0x03, 0x05, 0xFE, 0xCF, -/* 00001630 */ 0x02, 0x07, 0x05, 0xFE, 0xF5, 0x02, 0x01, 0x02, 0x7C, 0x59, 0x08, 0xB2, 0x06, 0x08, 0x4F, 0x07, -/* 00001640 */ 0x14, 0x0A, 0x00, 0x06, 0x03, 0xA6, 0x08, 0x14, 0x03, 0x00, 0x06, 0x08, 0x09, 0x1D, 0x00, 0x01, -/* 00001650 */ 0x49, 0x01, 0x09, 0x6B, 0x08, 0x09, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x09, 0x5B, 0x01, 0x04, -/* 00001660 */ 0x00, 0x00, 0xF2, 0x02, 0xFF, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x49, 0x01, 0x09, -/* 00001670 */ 0x6B, 0x08, 0x09, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x09, 0x5B, 0x01, 0x06, 0x01, 0x00, 0xF2, -/* 00001680 */ 0x02, 0x08, 0x08, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x07, 0x08, 0x01, 0x49, 0x01, 0x09, -/* 00001690 */ 0x6B, 0x08, 0x09, 0x02, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x09, 0x5B, 0x01, 0x07, 0x02, 0x00, 0x5B, -/* 000016A0 */ 0x02, 0x05, 0x02, 0x00, 0xF2, 0x03, 0x00, 0x08, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x09, 0x02, -/* 000016B0 */ 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x91, 0x02, 0xFE, 0x02, 0x01, 0xFE, 0xEA, 0x02, 0xFE, 0xE8, -/* 000016C0 */ 0x18, 0x05, 0x07, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x37, 0x00, 0x1D, 0x00, 0x58, 0x00, 0x20, 0x00, -/* 000016D0 */ 0x2E, 0x00, 0x27, 0x00, 0x5A, 0x00, 0x00, 0xBF, 0x1C, 0x08, 0xC0, 0x03, 0x80, 0x01, 0x00, 0x6C, -/* 000016E0 */ 0x39, 0xA0, 0x41, 0xD1, 0x00, 0x06, 0xFE, 0x41, 0x17, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, -/* 000016F0 */ 0xFE, 0x41, 0x17, 0xFE, 0x3D, 0x01, 0xFE, 0x3D, 0x01, 0x01, 0x04, 0x06, 0x08, 0x04, 0x1F, 0x1E, -/* 00001700 */ 0x03, 0x03, 0x03, 0x03, 0x03, 0x05, 0xFE, 0xCF, 0x02, 0x07, 0x05, 0xFE, 0xF4, 0x02, 0x01, 0x01, -/* 00001710 */ 0x7C, 0x59, 0x08, 0xB2, 0x06, 0x08, 0x4F, 0x07, 0x14, 0x0A, 0x00, 0x06, 0x03, 0xA6, 0x08, 0x14, -/* 00001720 */ 0x03, 0x00, 0x06, 0x08, 0x09, 0x1D, 0x00, 0x01, 0x49, 0x01, 0x09, 0x6B, 0x08, 0x09, 0x00, 0x07, -/* 00001730 */ 0x02, 0x00, 0x5A, 0x00, 0x09, 0x5B, 0x01, 0x04, 0x00, 0x00, 0xF2, 0x02, 0xFF, 0x08, 0x00, 0x00, -/* 00001740 */ 0x00, 0x00, 0x00, 0x00, 0x01, 0x49, 0x01, 0x09, 0x6B, 0x08, 0x09, 0x01, 0x07, 0x02, 0x00, 0x5A, -/* 00001750 */ 0x00, 0x09, 0x5B, 0x01, 0x06, 0x01, 0x00, 0xF2, 0x02, 0x08, 0x08, 0x01, 0x00, 0x00, 0x00, 0x01, -/* 00001760 */ 0x00, 0x47, 0x07, 0x08, 0x01, 0x49, 0x01, 0x09, 0x6B, 0x08, 0x09, 0x02, 0x07, 0x03, 0x00, 0x5A, -/* 00001770 */ 0x00, 0x09, 0x5B, 0x01, 0x07, 0x02, 0x00, 0x5B, 0x02, 0x05, 0x02, 0x00, 0xF2, 0x03, 0x00, 0x08, -/* 00001780 */ 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x91, 0x02, -/* 00001790 */ 0xFE, 0x02, 0x01, 0xFE, 0xEA, 0x02, 0xFE, 0x6D, 0x17, 0x05, 0x07, 0x00, 0x00, 0x00, 0x0F, 0x00, -/* 000017A0 */ 0x37, 0x00, 0x1D, 0x00, 0x57, 0x00, 0x20, 0x00, 0x2E, 0x00, 0x27, 0x00, 0x54, 0x00, 0x00, 0xBF, -/* 000017B0 */ 0x1C, 0x08, 0xC0, 0x03, 0x80, 0x01, 0x00, 0x63, 0x37, 0xA0, 0x41, 0xD1, 0x00, 0x05, 0xFE, 0xCB, -/* 000017C0 */ 0x15, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0xCB, 0x15, 0xFE, 0x39, 0x01, 0xFE, 0x39, -/* 000017D0 */ 0x01, 0x01, 0x04, 0x06, 0x08, 0x04, 0x1F, 0x1E, 0x03, 0x03, 0x03, 0x03, 0x03, 0x05, 0xFE, 0xCF, -/* 000017E0 */ 0x02, 0x07, 0x05, 0xFE, 0xF3, 0x02, 0x01, 0x00, 0x7C, 0x59, 0x08, 0xB2, 0x06, 0x08, 0x4F, 0x07, -/* 000017F0 */ 0x14, 0x0A, 0x00, 0x06, 0x03, 0xA6, 0x08, 0x14, 0x03, 0x00, 0x06, 0x08, 0x09, 0x1D, 0x00, 0x01, -/* 00001800 */ 0x49, 0x01, 0x09, 0x6B, 0x08, 0x09, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x09, 0x5B, 0x01, 0x04, -/* 00001810 */ 0x00, 0x00, 0xF2, 0x02, 0xFF, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x49, 0x01, 0x09, -/* 00001820 */ 0x6B, 0x08, 0x09, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x09, 0x5B, 0x01, 0x06, 0x01, 0x00, 0xF2, -/* 00001830 */ 0x02, 0x08, 0x08, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x07, 0x08, 0x01, 0x49, 0x01, 0x09, -/* 00001840 */ 0x6B, 0x08, 0x09, 0x02, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x09, 0x5B, 0x01, 0x07, 0x02, 0x00, 0x5B, -/* 00001850 */ 0x02, 0x05, 0x02, 0x00, 0xF2, 0x03, 0x00, 0x08, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x09, 0x02, -/* 00001860 */ 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x91, 0x02, 0xFE, 0x02, 0x01, 0xFE, 0xEA, 0x02, 0xFE, 0xF7, -/* 00001870 */ 0x15, 0x05, 0x07, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x37, 0x00, 0x1D, 0x00, 0x55, 0x00, 0x20, 0x00, -/* 00001880 */ 0x2E, 0x00, 0x27, 0x00, 0x52, 0x00, 0x00, 0xBF, 0x1C, 0x08, 0xC0, 0x03, 0x80, 0x01, 0x00, 0x5E, -/* 00001890 */ 0x42, 0xA2, 0x41, 0xD1, 0x00, 0x04, 0xFE, 0x05, 0x15, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, -/* 000018A0 */ 0xFE, 0x05, 0x15, 0x8B, 0x8B, 0x01, 0x03, 0x03, 0x05, 0x04, 0x0A, 0x0A, 0x01, 0x01, 0x01, 0x01, -/* 000018B0 */ 0x01, 0x05, 0xFE, 0xCF, 0x02, 0x26, 0x01, 0x49, 0x01, 0x05, 0x60, 0x05, 0x05, 0x00, 0x07, 0x03, -/* 000018C0 */ 0x00, 0x5B, 0x01, 0x03, 0x00, 0x00, 0x5B, 0x02, 0x04, 0x00, 0x00, 0xC3, 0x03, 0x00, 0x05, 0x00, -/* 000018D0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xE1, 0x02, 0xFE, -/* 000018E0 */ 0x48, 0x15, 0x02, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x47, 0x00, 0x00, 0xBF, 0x1C, 0x1B, 0xC0, -/* 000018F0 */ 0x57, 0xA0, 0x23, 0x00, 0x2E, 0x13, 0xA0, 0x41, 0xC1, 0x00, 0xFE, 0xE3, 0x02, 0x03, 0xFF, 0x00, -/* 00001900 */ 0x00, 0x00, 0x02, 0xFE, 0xDF, 0x0B, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0xDF, 0x0B, -/* 00001910 */ 0xFE, 0x4E, 0x06, 0xFE, 0x4E, 0x06, 0x01, 0x0E, 0x0C, 0x14, 0x04, 0x5D, 0x54, 0x01, 0x02, 0x03, -/* 00001920 */ 0x01, 0x0D, 0x0D, 0x0D, 0x0D, 0x01, 0x05, 0x03, 0x14, 0x05, 0xFE, 0xCF, 0x02, 0x05, 0xFE, 0xF1, -/* 00001930 */ 0x02, 0x05, 0xFE, 0xE7, 0x02, 0x0B, 0x06, 0xFE, 0xE3, 0x02, 0x06, 0xFE, 0xF2, 0x02, 0x07, 0x01, -/* 00001940 */ 0x01, 0x0C, 0x01, 0x00, 0xFE, 0x89, 0x01, 0x59, 0x17, 0xB2, 0x0C, 0x17, 0x4F, 0x0D, 0x4F, 0x0E, -/* 00001950 */ 0x4F, 0x0F, 0x4F, 0x10, 0x4F, 0x11, 0x4F, 0x12, 0x4F, 0x13, 0x47, 0x0D, 0x0C, 0x01, 0x49, 0x01, -/* 00001960 */ 0x17, 0x60, 0x17, 0x17, 0x00, 0xE1, 0x17, 0x0D, 0x17, 0x00, 0x0F, 0x22, 0x00, 0x17, 0x01, 0x49, -/* 00001970 */ 0x01, 0x18, 0x6B, 0x17, 0x18, 0x01, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x18, 0x5B, 0x01, 0x03, 0x00, -/* 00001980 */ 0x00, 0x5B, 0x02, 0x04, 0x00, 0x00, 0xF2, 0x03, 0xFF, 0x17, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 00001990 */ 0x60, 0x17, 0x0D, 0x02, 0x47, 0x0E, 0x17, 0x60, 0x17, 0x0D, 0x03, 0x14, 0x03, 0x00, 0x17, 0x05, -/* 000019A0 */ 0x09, 0x1D, 0x00, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 000019B0 */ 0xA6, 0x17, 0x79, 0x17, 0x00, 0x04, 0x79, 0x05, 0x00, 0x05, 0x09, 0x11, 0x01, 0x09, 0x0C, 0x01, -/* 000019C0 */ 0x60, 0x17, 0x0D, 0x06, 0x47, 0x0F, 0x17, 0x01, 0x49, 0x01, 0x18, 0x6B, 0x17, 0x18, 0x07, 0x07, -/* 000019D0 */ 0x02, 0x00, 0x5A, 0x00, 0x18, 0x5B, 0x01, 0x0E, 0x01, 0x00, 0xF2, 0x02, 0x17, 0x17, 0x07, 0x00, -/* 000019E0 */ 0x00, 0x00, 0x01, 0x00, 0x0E, 0x0C, 0x00, 0x17, 0xA5, 0x18, 0x0E, 0x08, 0x00, 0x00, 0x47, 0x17, -/* 000019F0 */ 0x18, 0x09, 0x20, 0x00, 0x01, 0x49, 0x01, 0x19, 0x6B, 0x18, 0x19, 0x09, 0x07, 0x02, 0x00, 0x5A, -/* 00001A00 */ 0x00, 0x19, 0x5B, 0x01, 0x0E, 0x02, 0x00, 0xF2, 0x02, 0x18, 0x18, 0x09, 0x00, 0x00, 0x00, 0x02, -/* 00001A10 */ 0x00, 0x47, 0x17, 0x18, 0x47, 0x10, 0x17, 0x12, 0x03, 0x00, 0x0F, 0x10, 0x09, 0x8F, 0x00, 0x60, -/* 00001A20 */ 0x17, 0x0D, 0x0A, 0x47, 0x11, 0x17, 0x2F, 0x17, 0x0F, 0x09, 0x75, 0x17, 0x0D, 0x0B, 0x14, 0x03, -/* 00001A30 */ 0x00, 0x11, 0x09, 0x09, 0x21, 0x00, 0xCB, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -/* 00001A40 */ 0x00, 0x00, 0x00, 0x96, 0x17, 0x0E, 0x0F, 0x00, 0x00, 0x79, 0x17, 0x00, 0x04, 0x79, 0x0A, 0x00, -/* 00001A50 */ 0x05, 0x09, 0x7A, 0x00, 0x09, 0x54, 0x00, 0x14, 0x03, 0x00, 0x11, 0x0B, 0x09, 0x1B, 0x00, 0xCB, -/* 00001A60 */ 0x20, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79, 0x0F, 0x00, 0x04, -/* 00001A70 */ 0x79, 0x0A, 0x00, 0x05, 0x09, 0x57, 0x00, 0x09, 0x31, 0x00, 0x47, 0x12, 0x0F, 0x96, 0x17, 0x0E, -/* 00001A80 */ 0x0F, 0x01, 0x00, 0x47, 0x13, 0x17, 0xCB, 0x30, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -/* 00001A90 */ 0x00, 0x00, 0x00, 0xCD, 0x17, 0x02, 0x00, 0x00, 0x9F, 0x00, 0x12, 0x17, 0x9F, 0x01, 0x13, 0x17, -/* 00001AA0 */ 0x79, 0x17, 0x00, 0x04, 0x79, 0x0A, 0x00, 0x05, 0x09, 0x23, 0x00, 0x09, 0x1E, 0x00, 0x75, 0x05, -/* 00001AB0 */ 0x0D, 0x0C, 0xCB, 0x40, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA6, -/* 00001AC0 */ 0x17, 0x79, 0x17, 0x00, 0x04, 0x79, 0x05, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, -/* 00001AD0 */ 0x05, 0x50, 0x00, 0x40, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, -/* 00001AE0 */ 0x01, 0x00, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, -/* 00001AF0 */ 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x03, -/* 00001B00 */ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x10, -/* 00001B10 */ 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x6C, -/* 00001B20 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, -/* 00001B30 */ 0x01, 0x00, 0x00, 0x6C, 0x00, 0x00, 0x00, 0xFE, 0xE1, 0x02, 0xFE, 0x8A, 0x02, 0xFE, 0xED, 0x02, -/* 00001B40 */ 0xFE, 0xF0, 0x02, 0xFE, 0x83, 0x01, 0x6C, 0xFE, 0xEE, 0x02, 0xAE, 0xC1, 0xFE, 0x4E, 0x02, 0xFE, -/* 00001B50 */ 0xEF, 0x02, 0xFE, 0xEE, 0x02, 0xFE, 0xF0, 0x02, 0xFE, 0x1B, 0x0C, 0x15, 0x13, 0x00, 0x00, 0x00, -/* 00001B60 */ 0x03, 0x00, 0x1F, 0x00, 0x11, 0x00, 0x49, 0x00, 0x22, 0x00, 0x7D, 0x00, 0x07, 0x00, 0x2B, 0x00, -/* 00001B70 */ 0x0C, 0x00, 0x39, 0x00, 0x1D, 0x00, 0x56, 0x00, 0x07, 0x00, 0x33, 0x00, 0x50, 0x00, 0x65, 0x00, -/* 00001B80 */ 0x08, 0x00, 0x70, 0x00, 0x07, 0x00, 0x36, 0x00, 0x08, 0x00, 0x38, 0x00, 0x08, 0x00, 0x4F, 0x00, -/* 00001B90 */ 0x21, 0x00, 0x48, 0x00, 0x08, 0x00, 0x78, 0x00, 0x1B, 0x00, 0x63, 0x00, 0x03, 0x00, 0x34, 0x00, -/* 00001BA0 */ 0x09, 0x00, 0x39, 0x00, 0x28, 0x00, 0x8A, 0x00, 0x04, 0x00, 0x35, 0x00, 0x1C, 0x00, 0x5E, 0x00, -/* 00001BB0 */ 0x00, 0xBF, 0x1C, 0x08, 0xC0, 0x03, 0x80, 0x01, 0x00, 0x17, 0x3C, 0xA2, 0x41, 0xD1, 0x00, 0x02, -/* 00001BC0 */ 0xFE, 0xD6, 0x05, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0xD6, 0x05, 0xFE, 0xE9, 0x01, -/* 00001BD0 */ 0xFE, 0xE9, 0x01, 0x41, 0x05, 0x0A, 0x0D, 0x08, 0x14, 0x14, 0x01, 0x05, 0x05, 0x05, 0x05, 0x05, -/* 00001BE0 */ 0xFE, 0xCF, 0x02, 0x01, 0x04, 0x06, 0xFE, 0xED, 0x02, 0x06, 0xFE, 0xEE, 0x02, 0x06, 0xFE, 0xEF, -/* 00001BF0 */ 0x02, 0x06, 0xFE, 0xF0, 0x02, 0x01, 0x00, 0x0C, 0x4F, 0x59, 0x0D, 0xB2, 0x0C, 0x0D, 0x01, 0x49, -/* 00001C00 */ 0x01, 0x0E, 0x6B, 0x0D, 0x0E, 0x00, 0x07, 0x07, 0x00, 0x5A, 0x00, 0x0E, 0x5B, 0x01, 0x0C, 0x00, -/* 00001C10 */ 0x00, 0x5B, 0x02, 0x03, 0x00, 0x00, 0x5B, 0x03, 0x04, 0x00, 0x00, 0x5B, 0x04, 0x05, 0x00, 0x00, -/* 00001C20 */ 0x5B, 0x05, 0x06, 0x00, 0x00, 0x5B, 0x06, 0x07, 0x00, 0x00, 0xF2, 0x07, 0xFF, 0x0D, 0x00, 0x00, -/* 00001C30 */ 0x00, 0x00, 0x00, 0x00, 0x75, 0x0A, 0x0C, 0x01, 0x75, 0x08, 0x0C, 0x02, 0x75, 0x0B, 0x0C, 0x03, -/* 00001C40 */ 0x75, 0x09, 0x0C, 0x04, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x4F, 0x02, 0xFE, 0xED, 0x02, 0xFE, 0xEE, -/* 00001C50 */ 0x02, 0xFE, 0xEF, 0x02, 0xFE, 0xF0, 0x02, 0xFE, 0x19, 0x06, 0x06, 0x05, 0x00, 0x00, 0x00, 0x36, -/* 00001C60 */ 0x00, 0x82, 0x00, 0x04, 0x00, 0x28, 0x00, 0x04, 0x00, 0x22, 0x00, 0x04, 0x00, 0x29, 0x00, 0x06, -/* 00001C70 */ 0x00, 0xB0, 0x00, 0x00, 0x00}; - -} diff --git a/lib/Runtime/Library/JsBuiltIn/JsBuiltIn.js.bc.64b.h b/lib/Runtime/Library/JsBuiltIn/JsBuiltIn.js.bc.64b.h deleted file mode 100755 index 146e910fa1a..00000000000 --- a/lib/Runtime/Library/JsBuiltIn/JsBuiltIn.js.bc.64b.h +++ /dev/null @@ -1,710 +0,0 @@ -//------------------------------------------------------------------------------------------------------- -// Copyright (C) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. -//------------------------------------------------------------------------------------------------------- -#if 0 -//------------------------------------------------------------------------------------------------------- -// Copyright (C) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. -//------------------------------------------------------------------------------------------------------- - -"use strict"; - -(function (intrinsic) { - var platform = intrinsic.JsBuiltIn; - - var setPrototype = platform.builtInSetPrototype; - var _objectDefineProperty = platform.builtInJavascriptObjectEntryDefineProperty; - var Symbol = platform.Symbol; - var CreateObject = platform.builtInJavascriptObjectCreate; - - let FunctionsEnum = { - ArrayValues: setPrototype({ className: "Array", methodName: "values", argumentsCount: 0, forceInline: true /*optional*/, alias: "Symbol.iterator" }, null), - ArrayKeys: setPrototype({ className: "Array", methodName: "keys", argumentsCount: 0, forceInline: true /*optional*/ }, null), - ArrayEntries: setPrototype({ className: "Array", methodName: "entries", argumentsCount: 0, forceInline: true /*optional*/ }, null), - ArrayIndexOf: setPrototype({ className: "Array", methodName: "indexOf", argumentsCount: 1, forceInline: true /*optional*/ }, null), - ArrayFilter: setPrototype({ className: "Array", methodName: "filter", argumentsCount: 1, forceInline: true /*optional*/ }, null), - }; - - platform.registerChakraLibraryFunction("ArrayIterator", function (arrayObj, iterationKind) { - "use strict"; - __chakraLibrary.InitInternalProperties(this, 4, "__$arrayObj$__", "__$nextIndex$__", "__$kind$__", "__$internalDone$__"); - this.__$arrayObj$__ = arrayObj; - this.__$nextIndex$__ = 0; - this.__$kind$__ = iterationKind; - this.__$internalDone$__ = false; // We use this additional property to enable hoisting load of arrayObj outside the loop, we write to this property instead of the arrayObj - }); - - // ArrayIterator's prototype is the C++ Iterator, which is also the prototype for StringIterator, MapIterator etc - var iteratorPrototype = platform.GetIteratorPrototype(); - // Establish prototype chain here - __chakraLibrary.ArrayIterator.prototype = CreateObject(iteratorPrototype); - __chakraLibrary.raiseNeedObjectOfType = platform.raiseNeedObjectOfType; - __chakraLibrary.raiseThis_NullOrUndefined = platform.raiseThis_NullOrUndefined; - __chakraLibrary.raiseFunctionArgument_NeedFunction = platform.raiseFunctionArgument_NeedFunction; - __chakraLibrary.callInstanceFunc = platform.builtInCallInstanceFunction; - __chakraLibrary.functionBind = platform.builtInJavascriptFunctionEntryBind; - - _objectDefineProperty(__chakraLibrary.ArrayIterator.prototype, 'next', - // Object's getter and setter can get overriden on the prototype, in that case while setting the value attributes, we will end up with TypeError - // So, we need to set the prototype of attributes to null - setPrototype({ - value: function () { - "use strict"; - let o = this; - - if (!(o instanceof __chakraLibrary.ArrayIterator)) { - __chakraLibrary.raiseNeedObjectOfType("Array Iterator.prototype.next", "Array Iterator"); - } - - let a = o.__$arrayObj$__; - - if (o.__$internalDone$__ === true) { - return { value: undefined, done: true }; - } else { - let index = o.__$nextIndex$__; - let len = __chakraLibrary.isArray(a) ? a.length : __chakraLibrary.GetLength(a); - - if (index < len) { // < comparison should happen instead of >= , because len can be NaN - let itemKind = o.__$kind$__; - - o.__$nextIndex$__ = index + 1; - - if (itemKind === 1 /*ArrayIterationKind.Value*/) { - return {value : a[index], done : false}; - } else if (itemKind === 0 /*ArrayIterationKind.Key*/) { // TODO (megupta) : Use clean enums here ? - return {value : index, done : false}; - } else { - let elementKey = index; - let elementValue = a[index]; - return {value : [elementKey, elementValue], done : false}; - } - } else { - o.__$internalDone$__ = true; - return { value : undefined, done : true}; - } - } - }, - writable: true, - enumerable: false, - configurable: true - }, null) - ); - - _objectDefineProperty(__chakraLibrary.ArrayIterator.prototype, Symbol.toStringTag, setPrototype({ value: "Array Iterator", writable: false, enumerable: false, configurable: true }, null)); - - _objectDefineProperty(__chakraLibrary.ArrayIterator.prototype.next, 'length', setPrototype({ value: 0, writable: false, enumerable: false, configurable: true }, null)); - - _objectDefineProperty(__chakraLibrary.ArrayIterator.prototype.next, 'name', setPrototype({ value: "next", writable: false, enumerable: false, configurable: true }, null)); - - platform.registerChakraLibraryFunction("CreateArrayIterator", function (arrayObj, iterationKind) { - "use strict"; - return new __chakraLibrary.ArrayIterator(arrayObj, iterationKind); - }); - - platform.registerFunction(FunctionsEnum.ArrayKeys, function () { - "use strict"; - if (this === null || this === undefined) { - __chakraLibrary.raiseThis_NullOrUndefined("Array.prototype.keys"); - } - let o = __chakraLibrary.Object(this); - return __chakraLibrary.CreateArrayIterator(o, 0 /* ArrayIterationKind.Key*/); - }); - - platform.registerFunction(FunctionsEnum.ArrayValues, function () { - "use strict"; - if (this === null || this === undefined) { - __chakraLibrary.raiseThis_NullOrUndefined("Array.prototype.values"); - } - let o = __chakraLibrary.Object(this); - return __chakraLibrary.CreateArrayIterator(o, 1 /* ArrayIterationKind.Value*/); - }); - - platform.registerFunction(FunctionsEnum.ArrayEntries, function () { - "use strict"; - if (this === null || this === undefined) { - __chakraLibrary.raiseThis_NullOrUndefined("Array.prototype.entries"); - } - let o = __chakraLibrary.Object(this); - return __chakraLibrary.CreateArrayIterator(o, 2 /* ArrayIterationKind.KeyAndValue*/); - }); - - platform.registerFunction(FunctionsEnum.ArrayIndexOf, function (searchElement, fromIndex) { - // ECMAScript 2017 #sec-array.prototype.indexof - "use strict"; - - if (this === null || this === undefined) { - __chakraLibrary.raiseThis_NullOrUndefined("Array.prototype.indexOf"); - } - - let o; - if (__chakraLibrary.isArray(this)) { - o = this; - } else { - o = __chakraLibrary.Object(this); - } - - let len = __chakraLibrary.toLength(o["length"]); - if (len === 0) { - return -1; - } - - let n = __chakraLibrary.toInteger(fromIndex); - if (n >= len) { - return -1; - } - - let k; - - /* We refactored the code but it still respect the spec. - When using -0 or +0, the engine might think we are meaning - to use floating point numbers which can hurt performance. - So we refactored to use integers instead. */ - if (n === 0) { // Corresponds to "If n is -0, let k be +0" in the spec - k = 0; - } else if (n > 0) { // Corresponds to "If n >= 0, then [...] let k be n." - k = n; - } else { // Corresponds to "Else n < 0" - k = len + n; - - if (k < 0) { - k = 0; - } - } - - while (k < len) { - if (k in o) { - let elementK = o[k]; - - if (elementK === searchElement) { - return k; - } - } - - k++; - } - - return -1; - }); - - platform.registerFunction(FunctionsEnum.ArrayFilter, function (callbackfn, thisArg) { - // ECMAScript 2017 #sec-array.prototype.filter - "use strict"; - - if (this === null || this === undefined) { - __chakraLibrary.raiseThis_NullOrUndefined("Array.prototype.filter"); - } - - let o; - let len - if (__chakraLibrary.isArray(this)) { - o = this; - len = o.length; - } else { - o = __chakraLibrary.Object(this); - len = __chakraLibrary.GetLength(o); - } - - if (typeof callbackfn != "function") { - __chakraLibrary.raiseFunctionArgument_NeedFunction("Array.prototype.filter"); - } - - let a = __chakraLibrary.arraySpeciesCreate(o, 0); - let k = 0; - let to = 0; - - if (thisArg === undefined) { - // fast path. - while (k < len) { - if (k in o) { - let kValue = o[k]; - if (callbackfn(kValue, k, o)) { - __chakraLibrary.arrayCreateDataPropertyOrThrow(a, to, kValue); - to++; - } - } - k++; - } - } else { - // slow path. - // safe equivalent of calling "callbackfn.bind(thisArg)" - let boundCallback = __chakraLibrary.callInstanceFunc(__chakraLibrary.functionBind, callbackfn, thisArg); - while (k < len) { - if (k in o) { - let kValue = o[k]; - if (boundCallback(kValue, k, o)) { - __chakraLibrary.arrayCreateDataPropertyOrThrow(a, to, kValue); - to++; - } - } - k++; - } - } - - return a; - }); - -}); - -#endif -namespace Js -{ - const char Library_Bytecode_JsBuiltIn[] = { -/* 00000000 */ 0x43, 0x68, 0x42, 0x63, 0x75, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 00000010 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0xFE, 0xCE, 0x02, 0x00, 0xFE, -/* 00000020 */ 0x72, 0x27, 0xFE, 0x72, 0x27, 0x35, 0x00, 0x00, 0x00, 0x5C, 0x05, 0x00, 0x00, 0x2A, 0x09, 0x00, -/* 00000030 */ 0x00, 0x74, 0x1C, 0x00, 0x00, 0x2B, 0x12, 0x01, 0x00, 0x00, 0x00, 0x2A, 0x01, 0x00, 0x00, 0x00, -/* 00000040 */ 0x40, 0x01, 0x00, 0x00, 0x01, 0x58, 0x01, 0x00, 0x00, 0x00, 0x6C, 0x01, 0x00, 0x00, 0x00, 0x78, -/* 00000050 */ 0x01, 0x00, 0x00, 0x00, 0x8E, 0x01, 0x00, 0x00, 0x00, 0x9C, 0x01, 0x00, 0x00, 0x00, 0xBA, 0x01, -/* 00000060 */ 0x00, 0x00, 0x00, 0xD2, 0x01, 0x00, 0x00, 0x00, 0xDE, 0x01, 0x00, 0x00, 0x00, 0xFE, 0x01, 0x00, -/* 00000070 */ 0x00, 0x01, 0x12, 0x02, 0x00, 0x00, 0x00, 0x1C, 0x02, 0x00, 0x00, 0x01, 0x36, 0x02, 0x00, 0x00, -/* 00000080 */ 0x00, 0x46, 0x02, 0x00, 0x00, 0x01, 0x60, 0x02, 0x00, 0x00, 0x00, 0x70, 0x02, 0x00, 0x00, 0x01, -/* 00000090 */ 0x88, 0x02, 0x00, 0x00, 0x00, 0x96, 0x02, 0x00, 0x00, 0x01, 0xB2, 0x02, 0x00, 0x00, 0x00, 0xBC, -/* 000000A0 */ 0x02, 0x00, 0x00, 0x00, 0xC8, 0x02, 0x00, 0x00, 0x00, 0xDA, 0x02, 0x00, 0x00, 0x00, 0xF0, 0x02, -/* 000000B0 */ 0x00, 0x00, 0x00, 0x0A, 0x03, 0x00, 0x00, 0x00, 0x28, 0x03, 0x00, 0x00, 0x00, 0x36, 0x03, 0x00, -/* 000000C0 */ 0x00, 0x00, 0x40, 0x03, 0x00, 0x00, 0x01, 0x68, 0x03, 0x00, 0x00, 0x01, 0x8A, 0x03, 0x00, 0x00, -/* 000000D0 */ 0x01, 0xA4, 0x03, 0x00, 0x00, 0x01, 0xC2, 0x03, 0x00, 0x00, 0x01, 0xE2, 0x03, 0x00, 0x00, 0x01, -/* 000000E0 */ 0xF8, 0x03, 0x00, 0x00, 0x01, 0x1E, 0x04, 0x00, 0x00, 0x00, 0x5A, 0x04, 0x00, 0x00, 0x00, 0x64, -/* 000000F0 */ 0x04, 0x00, 0x00, 0x00, 0x8E, 0x04, 0x00, 0x00, 0x00, 0xBC, 0x04, 0x00, 0x00, 0x00, 0xEC, 0x04, -/* 00000100 */ 0x00, 0x00, 0x00, 0x1C, 0x05, 0x00, 0x00, 0x00, 0x4A, 0x05, 0x00, 0x00, 0x00, 0x5C, 0x05, 0x00, -/* 00000110 */ 0x00, 0x00, 0x47, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x62, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x20, 0x00, -/* 00000120 */ 0x63, 0x00, 0x6F, 0x00, 0x64, 0x00, 0x65, 0x00, 0x00, 0x00, 0x75, 0x00, 0x73, 0x00, 0x65, 0x00, -/* 00000130 */ 0x20, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x63, 0x00, 0x74, 0x00, 0x00, 0x00, -/* 00000140 */ 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x56, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00000150 */ 0x75, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x73, 0x00, -/* 00000160 */ 0x73, 0x00, 0x4E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, -/* 00000170 */ 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x74, 0x00, 0x68, 0x00, -/* 00000180 */ 0x6F, 0x00, 0x64, 0x00, 0x4E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x76, 0x00, -/* 00000190 */ 0x61, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x61, 0x00, 0x72, 0x00, -/* 000001A0 */ 0x67, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x73, 0x00, 0x43, 0x00, -/* 000001B0 */ 0x6F, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x00, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, -/* 000001C0 */ 0x63, 0x00, 0x65, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x65, 0x00, -/* 000001D0 */ 0x00, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x61, 0x00, 0x73, 0x00, 0x00, 0x00, 0x53, 0x00, -/* 000001E0 */ 0x79, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x69, 0x00, 0x74, 0x00, -/* 000001F0 */ 0x65, 0x00, 0x72, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x41, 0x00, -/* 00000200 */ 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x4B, 0x00, 0x65, 0x00, 0x79, 0x00, 0x73, 0x00, -/* 00000210 */ 0x00, 0x00, 0x6B, 0x00, 0x65, 0x00, 0x79, 0x00, 0x73, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, -/* 00000220 */ 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x45, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, -/* 00000230 */ 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, -/* 00000240 */ 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, -/* 00000250 */ 0x49, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x65, 0x00, 0x78, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, -/* 00000260 */ 0x69, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x65, 0x00, 0x78, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, -/* 00000270 */ 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x46, 0x00, 0x69, 0x00, 0x6C, 0x00, -/* 00000280 */ 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x66, 0x00, 0x69, 0x00, 0x6C, 0x00, 0x74, 0x00, -/* 00000290 */ 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, -/* 000002A0 */ 0x49, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, -/* 000002B0 */ 0x00, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x78, 0x00, 0x74, 0x00, 0x00, 0x00, 0x76, 0x00, 0x61, 0x00, -/* 000002C0 */ 0x6C, 0x00, 0x75, 0x00, 0x65, 0x00, 0x00, 0x00, 0x77, 0x00, 0x72, 0x00, 0x69, 0x00, 0x74, 0x00, -/* 000002D0 */ 0x61, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x75, 0x00, -/* 000002E0 */ 0x6D, 0x00, 0x65, 0x00, 0x72, 0x00, 0x61, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 000002F0 */ 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x66, 0x00, 0x69, 0x00, 0x67, 0x00, 0x75, 0x00, 0x72, 0x00, -/* 00000300 */ 0x61, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, -/* 00000310 */ 0x61, 0x00, 0x79, 0x00, 0x20, 0x00, 0x49, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x61, 0x00, -/* 00000320 */ 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x67, 0x00, -/* 00000330 */ 0x74, 0x00, 0x68, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 00000340 */ 0x43, 0x00, 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x41, 0x00, 0x72, 0x00, -/* 00000350 */ 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x49, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x61, 0x00, -/* 00000360 */ 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x6C, 0x00, -/* 00000370 */ 0x49, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, -/* 00000380 */ 0x46, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x00, 0x00, 0x66, 0x00, 0x75, 0x00, 0x6E, 0x00, -/* 00000390 */ 0x63, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x42, 0x00, 0x69, 0x00, 0x6E, 0x00, -/* 000003A0 */ 0x64, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x24, 0x00, 0x61, 0x00, 0x72, 0x00, 0x72, 0x00, -/* 000003B0 */ 0x61, 0x00, 0x79, 0x00, 0x4F, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x24, 0x00, 0x5F, 0x00, 0x5F, 0x00, -/* 000003C0 */ 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x24, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x78, 0x00, 0x74, 0x00, -/* 000003D0 */ 0x49, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x65, 0x00, 0x78, 0x00, 0x24, 0x00, 0x5F, 0x00, 0x5F, 0x00, -/* 000003E0 */ 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x24, 0x00, 0x6B, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x64, 0x00, -/* 000003F0 */ 0x24, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x24, 0x00, 0x69, 0x00, -/* 00000400 */ 0x6E, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x44, 0x00, -/* 00000410 */ 0x6F, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x24, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x41, 0x00, -/* 00000420 */ 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x20, 0x00, 0x49, 0x00, 0x74, 0x00, 0x65, 0x00, -/* 00000430 */ 0x72, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, -/* 00000440 */ 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, -/* 00000450 */ 0x6E, 0x00, 0x65, 0x00, 0x78, 0x00, 0x74, 0x00, 0x00, 0x00, 0x64, 0x00, 0x6F, 0x00, 0x6E, 0x00, -/* 00000460 */ 0x65, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x2E, 0x00, -/* 00000470 */ 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, -/* 00000480 */ 0x65, 0x00, 0x2E, 0x00, 0x6B, 0x00, 0x65, 0x00, 0x79, 0x00, 0x73, 0x00, 0x00, 0x00, 0x41, 0x00, -/* 00000490 */ 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, -/* 000004A0 */ 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x76, 0x00, -/* 000004B0 */ 0x61, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, -/* 000004C0 */ 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, -/* 000004D0 */ 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x65, 0x00, 0x6E, 0x00, -/* 000004E0 */ 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, -/* 000004F0 */ 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, -/* 00000500 */ 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x69, 0x00, 0x6E, 0x00, -/* 00000510 */ 0x64, 0x00, 0x65, 0x00, 0x78, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, -/* 00000520 */ 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, -/* 00000530 */ 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x69, 0x00, -/* 00000540 */ 0x6C, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x66, 0x00, 0x75, 0x00, 0x6E, 0x00, -/* 00000550 */ 0x63, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0xF3, 0x00, 0x00, 0x00, -/* 00000560 */ 0x00, 0x6A, 0x00, 0x00, 0x00, 0x9B, 0x00, 0x00, 0x00, 0x05, 0x01, 0x00, 0x00, 0x6F, 0x01, 0x00, -/* 00000570 */ 0x00, 0x70, 0x01, 0x00, 0x00, 0x7E, 0x01, 0x00, 0x00, 0x7F, 0x01, 0x00, 0x00, 0x97, 0x01, 0x00, -/* 00000580 */ 0x00, 0xBF, 0x01, 0x00, 0x00, 0xC0, 0x01, 0x00, 0x00, 0xF5, 0x01, 0x00, 0x00, 0x4A, 0x02, 0x00, -/* 00000590 */ 0x00, 0x6C, 0x02, 0x00, 0x00, 0xAB, 0x02, 0x00, 0x00, 0xAC, 0x02, 0x00, 0x00, 0xC6, 0x02, 0x00, -/* 000005A0 */ 0x00, 0x6A, 0x03, 0x00, 0x00, 0xF0, 0x03, 0x00, 0x00, 0x7C, 0x04, 0x00, 0x00, 0x08, 0x05, 0x00, -/* 000005B0 */ 0x00, 0x92, 0x05, 0x00, 0x00, 0x99, 0x05, 0x00, 0x00, 0x9A, 0x05, 0x00, 0x00, 0xFB, 0x05, 0x00, -/* 000005C0 */ 0x00, 0x11, 0x06, 0x00, 0x00, 0x93, 0x06, 0x00, 0x00, 0xBB, 0x06, 0x00, 0x00, 0xDD, 0x06, 0x00, -/* 000005D0 */ 0x00, 0x06, 0x07, 0x00, 0x00, 0xBA, 0x07, 0x00, 0x00, 0xC2, 0x07, 0x00, 0x00, 0xC3, 0x07, 0x00, -/* 000005E0 */ 0x00, 0x39, 0x08, 0x00, 0x00, 0x76, 0x08, 0x00, 0x00, 0x9C, 0x08, 0x00, 0x00, 0xEB, 0x08, 0x00, -/* 000005F0 */ 0x00, 0x37, 0x09, 0x00, 0x00, 0x8B, 0x09, 0x00, 0x00, 0xF1, 0x09, 0x00, 0x00, 0x3E, 0x0A, 0x00, -/* 00000600 */ 0x00, 0x8E, 0x0A, 0x00, 0x00, 0x8F, 0x0A, 0x00, 0x00, 0xDA, 0x0A, 0x00, 0x00, 0x73, 0x0B, 0x00, -/* 00000610 */ 0x00, 0xB5, 0x0B, 0x00, 0x00, 0xCC, 0x0B, 0x00, 0x00, 0xED, 0x0B, 0x00, 0x00, 0x0B, 0x0C, 0x00, -/* 00000620 */ 0x00, 0x29, 0x0C, 0x00, 0x00, 0x2A, 0x0C, 0x00, 0x00, 0x6F, 0x0C, 0x00, 0x00, 0xDD, 0x0C, 0x00, -/* 00000630 */ 0x00, 0xEF, 0x0C, 0x00, 0x00, 0xF0, 0x0C, 0x00, 0x00, 0x1A, 0x0D, 0x00, 0x00, 0x1B, 0x0D, 0x00, -/* 00000640 */ 0x00, 0x50, 0x0D, 0x00, 0x00, 0x8D, 0x0D, 0x00, 0x00, 0xA6, 0x0D, 0x00, 0x00, 0xD9, 0x0D, 0x00, -/* 00000650 */ 0x00, 0x3D, 0x0E, 0x00, 0x00, 0x3E, 0x0E, 0x00, 0x00, 0xAA, 0x0E, 0x00, 0x00, 0xDF, 0x0E, 0x00, -/* 00000660 */ 0x00, 0xE0, 0x0E, 0x00, 0x00, 0x17, 0x0F, 0x00, 0x00, 0x18, 0x0F, 0x00, 0x00, 0x63, 0x0F, 0x00, -/* 00000670 */ 0x00, 0xA8, 0x0F, 0x00, 0x00, 0x23, 0x10, 0x00, 0x00, 0x65, 0x10, 0x00, 0x00, 0x86, 0x10, 0x00, -/* 00000680 */ 0x00, 0xBA, 0x10, 0x00, 0x00, 0xF3, 0x10, 0x00, 0x00, 0x4A, 0x11, 0x00, 0x00, 0x64, 0x11, 0x00, -/* 00000690 */ 0x00, 0x81, 0x11, 0x00, 0x00, 0xB6, 0x11, 0x00, 0x00, 0xF8, 0x11, 0x00, 0x00, 0x0E, 0x12, 0x00, -/* 000006A0 */ 0x00, 0x20, 0x12, 0x00, 0x00, 0x2F, 0x12, 0x00, 0x00, 0x4B, 0x12, 0x00, 0x00, 0x6A, 0x12, 0x00, -/* 000006B0 */ 0x00, 0x89, 0x12, 0x00, 0x00, 0x9A, 0x12, 0x00, 0x00, 0xA1, 0x12, 0x00, 0x00, 0xA2, 0x12, 0x00, -/* 000006C0 */ 0x00, 0x63, 0x13, 0x00, 0x00, 0x64, 0x13, 0x00, 0x00, 0x11, 0x14, 0x00, 0x00, 0x12, 0x14, 0x00, -/* 000006D0 */ 0x00, 0xC2, 0x14, 0x00, 0x00, 0xC3, 0x14, 0x00, 0x00, 0x2A, 0x15, 0x00, 0x00, 0x40, 0x15, 0x00, -/* 000006E0 */ 0x00, 0x8B, 0x15, 0x00, 0x00, 0x93, 0x15, 0x00, 0x00, 0x94, 0x15, 0x00, 0x00, 0xD9, 0x15, 0x00, -/* 000006F0 */ 0x00, 0xEF, 0x15, 0x00, 0x00, 0x22, 0x16, 0x00, 0x00, 0x71, 0x16, 0x00, 0x00, 0x7B, 0x16, 0x00, -/* 00000700 */ 0x00, 0xA9, 0x16, 0x00, 0x00, 0xFF, 0x16, 0x00, 0x00, 0x07, 0x17, 0x00, 0x00, 0x08, 0x17, 0x00, -/* 00000710 */ 0x00, 0x4F, 0x17, 0x00, 0x00, 0x65, 0x17, 0x00, 0x00, 0x98, 0x17, 0x00, 0x00, 0xE9, 0x17, 0x00, -/* 00000720 */ 0x00, 0xF3, 0x17, 0x00, 0x00, 0x21, 0x18, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x81, 0x18, 0x00, -/* 00000730 */ 0x00, 0x82, 0x18, 0x00, 0x00, 0xCA, 0x18, 0x00, 0x00, 0xE0, 0x18, 0x00, 0x00, 0x13, 0x19, 0x00, -/* 00000740 */ 0x00, 0x65, 0x19, 0x00, 0x00, 0x6F, 0x19, 0x00, 0x00, 0x9D, 0x19, 0x00, 0x00, 0xFB, 0x19, 0x00, -/* 00000750 */ 0x00, 0x03, 0x1A, 0x00, 0x00, 0x04, 0x1A, 0x00, 0x00, 0x64, 0x1A, 0x00, 0x00, 0x9C, 0x1A, 0x00, -/* 00000760 */ 0x00, 0xB2, 0x1A, 0x00, 0x00, 0xB3, 0x1A, 0x00, 0x00, 0xE6, 0x1A, 0x00, 0x00, 0x38, 0x1B, 0x00, -/* 00000770 */ 0x00, 0x42, 0x1B, 0x00, 0x00, 0x43, 0x1B, 0x00, 0x00, 0x52, 0x1B, 0x00, 0x00, 0x7F, 0x1B, 0x00, -/* 00000780 */ 0x00, 0x95, 0x1B, 0x00, 0x00, 0xA6, 0x1B, 0x00, 0x00, 0xD4, 0x1B, 0x00, 0x00, 0xDE, 0x1B, 0x00, -/* 00000790 */ 0x00, 0xDF, 0x1B, 0x00, 0x00, 0x18, 0x1C, 0x00, 0x00, 0x31, 0x1C, 0x00, 0x00, 0x48, 0x1C, 0x00, -/* 000007A0 */ 0x00, 0x52, 0x1C, 0x00, 0x00, 0x53, 0x1C, 0x00, 0x00, 0x89, 0x1C, 0x00, 0x00, 0xA1, 0x1C, 0x00, -/* 000007B0 */ 0x00, 0xB8, 0x1C, 0x00, 0x00, 0xC2, 0x1C, 0x00, 0x00, 0xC3, 0x1C, 0x00, 0x00, 0xD2, 0x1C, 0x00, -/* 000007C0 */ 0x00, 0xD3, 0x1C, 0x00, 0x00, 0x14, 0x1D, 0x00, 0x00, 0x5A, 0x1D, 0x00, 0x00, 0x9F, 0x1D, 0x00, -/* 000007D0 */ 0x00, 0xD7, 0x1D, 0x00, 0x00, 0x2B, 0x1E, 0x00, 0x00, 0x3E, 0x1E, 0x00, 0x00, 0x90, 0x1E, 0x00, -/* 000007E0 */ 0x00, 0xA3, 0x1E, 0x00, 0x00, 0xDE, 0x1E, 0x00, 0x00, 0xF7, 0x1E, 0x00, 0x00, 0xF8, 0x1E, 0x00, -/* 000007F0 */ 0x00, 0x11, 0x1F, 0x00, 0x00, 0x28, 0x1F, 0x00, 0x00, 0x36, 0x1F, 0x00, 0x00, 0x40, 0x1F, 0x00, -/* 00000800 */ 0x00, 0x41, 0x1F, 0x00, 0x00, 0x5B, 0x1F, 0x00, 0x00, 0x75, 0x1F, 0x00, 0x00, 0x9A, 0x1F, 0x00, -/* 00000810 */ 0x00, 0x9B, 0x1F, 0x00, 0x00, 0xCD, 0x1F, 0x00, 0x00, 0xEB, 0x1F, 0x00, 0x00, 0xFD, 0x1F, 0x00, -/* 00000820 */ 0x00, 0x0B, 0x20, 0x00, 0x00, 0x0C, 0x20, 0x00, 0x00, 0x1D, 0x20, 0x00, 0x00, 0x27, 0x20, 0x00, -/* 00000830 */ 0x00, 0x28, 0x20, 0x00, 0x00, 0x3B, 0x20, 0x00, 0x00, 0x43, 0x20, 0x00, 0x00, 0x44, 0x20, 0x00, -/* 00000840 */ 0x00, 0x9E, 0x20, 0x00, 0x00, 0xD5, 0x20, 0x00, 0x00, 0xEB, 0x20, 0x00, 0x00, 0xEC, 0x20, 0x00, -/* 00000850 */ 0x00, 0x1F, 0x21, 0x00, 0x00, 0x70, 0x21, 0x00, 0x00, 0x7A, 0x21, 0x00, 0x00, 0x7B, 0x21, 0x00, -/* 00000860 */ 0x00, 0x8A, 0x21, 0x00, 0x00, 0x9A, 0x21, 0x00, 0x00, 0xC7, 0x21, 0x00, 0x00, 0xDD, 0x21, 0x00, -/* 00000870 */ 0x00, 0xF9, 0x21, 0x00, 0x00, 0x0A, 0x22, 0x00, 0x00, 0x38, 0x22, 0x00, 0x00, 0x68, 0x22, 0x00, -/* 00000880 */ 0x00, 0x72, 0x22, 0x00, 0x00, 0x7B, 0x22, 0x00, 0x00, 0xAA, 0x22, 0x00, 0x00, 0x04, 0x23, 0x00, -/* 00000890 */ 0x00, 0x0E, 0x23, 0x00, 0x00, 0x0F, 0x23, 0x00, 0x00, 0x49, 0x23, 0x00, 0x00, 0x5C, 0x23, 0x00, -/* 000008A0 */ 0x00, 0x70, 0x23, 0x00, 0x00, 0x71, 0x23, 0x00, 0x00, 0x96, 0x23, 0x00, 0x00, 0xB0, 0x23, 0x00, -/* 000008B0 */ 0x00, 0xCE, 0x23, 0x00, 0x00, 0xEC, 0x23, 0x00, 0x00, 0x13, 0x24, 0x00, 0x00, 0x47, 0x24, 0x00, -/* 000008C0 */ 0x00, 0x9E, 0x24, 0x00, 0x00, 0xBC, 0x24, 0x00, 0x00, 0xD2, 0x24, 0x00, 0x00, 0xE4, 0x24, 0x00, -/* 000008D0 */ 0x00, 0xF9, 0x24, 0x00, 0x00, 0x07, 0x25, 0x00, 0x00, 0x18, 0x25, 0x00, 0x00, 0x32, 0x25, 0x00, -/* 000008E0 */ 0x00, 0x77, 0x25, 0x00, 0x00, 0xEC, 0x25, 0x00, 0x00, 0x0A, 0x26, 0x00, 0x00, 0x28, 0x26, 0x00, -/* 000008F0 */ 0x00, 0x4F, 0x26, 0x00, 0x00, 0x86, 0x26, 0x00, 0x00, 0xDD, 0x26, 0x00, 0x00, 0xFB, 0x26, 0x00, -/* 00000900 */ 0x00, 0x11, 0x27, 0x00, 0x00, 0x23, 0x27, 0x00, 0x00, 0x38, 0x27, 0x00, 0x00, 0x46, 0x27, 0x00, -/* 00000910 */ 0x00, 0x50, 0x27, 0x00, 0x00, 0x51, 0x27, 0x00, 0x00, 0x63, 0x27, 0x00, 0x00, 0x6B, 0x27, 0x00, -/* 00000920 */ 0x00, 0x6E, 0x27, 0x00, 0x00, 0x72, 0x27, 0x00, 0x00, 0x00, 0x0A, 0xB9, 0x0C, 0x00, 0x00, 0x00, -/* 00000930 */ 0x08, 0x04, 0x00, 0xA8, 0x41, 0xC0, 0x00, 0xFE, 0xCE, 0x02, 0x00, 0xFE, 0x70, 0x01, 0x01, 0xFF, -/* 00000940 */ 0x00, 0x10, 0x01, 0x00, 0xFE, 0x70, 0x01, 0xFE, 0x02, 0x26, 0xFE, 0x02, 0x26, 0x40, 0x01, 0x04, -/* 00000950 */ 0x04, 0x05, 0x05, 0x03, 0x05, 0xFE, 0xCF, 0x02, 0x0A, 0x09, 0xA6, 0x00, 0xD3, 0x00, 0x04, 0xFA, -/* 00000960 */ 0x04, 0x24, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00, 0x6E, 0x09, 0x00, 0x00, 0xBF, 0x1C, -/* 00000970 */ 0x08, 0xC0, 0x13, 0x88, 0x25, 0x00, 0x07, 0x01, 0xA2, 0x41, 0xD1, 0x00, 0x01, 0xFE, 0x80, 0x01, -/* 00000980 */ 0x08, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x80, 0x01, 0xFE, 0xEF, 0x25, 0xFE, 0xEF, -/* 00000990 */ 0x25, 0x40, 0x0D, 0x23, 0x2C, 0x09, 0xFB, 0xE2, 0x16, 0x2B, 0x2B, 0x2B, 0x2B, 0x0A, 0x2B, 0x08, -/* 000009A0 */ 0x06, 0xFE, 0xD0, 0x02, 0x06, 0xFE, 0xD1, 0x02, 0x06, 0xFE, 0xD2, 0x02, 0x06, 0xFE, 0xD3, 0x02, -/* 000009B0 */ 0x06, 0xFE, 0xD4, 0x02, 0x06, 0xFE, 0xD5, 0x02, 0x01, 0x00, 0x06, 0xFE, 0xD6, 0x02, 0x0B, 0x06, -/* 000009C0 */ 0xFE, 0xD7, 0x02, 0x05, 0xFE, 0xD8, 0x02, 0x07, 0x06, 0xFE, 0xD9, 0x02, 0x06, 0xFE, 0xDA, 0x02, -/* 000009D0 */ 0x06, 0xFE, 0xDB, 0x02, 0x06, 0xFE, 0xDC, 0x02, 0x06, 0xFE, 0xDD, 0x02, 0x06, 0xFE, 0xDE, 0x02, -/* 000009E0 */ 0x01, 0x01, 0x06, 0xFE, 0xDF, 0x02, 0x06, 0xFE, 0xE0, 0x02, 0x06, 0xFE, 0xE1, 0x02, 0x06, 0xFE, -/* 000009F0 */ 0xE2, 0x02, 0x06, 0xFE, 0xE3, 0x02, 0x06, 0xFE, 0xE4, 0x02, 0x06, 0xFE, 0xE5, 0x02, 0x0C, 0x06, -/* 00000A00 */ 0xFE, 0xE6, 0x02, 0x05, 0xFE, 0xE7, 0x02, 0x06, 0xFE, 0xE8, 0x02, 0x06, 0xFE, 0xE9, 0x02, 0x06, -/* 00000A10 */ 0xFE, 0xEA, 0x02, 0xFE, 0x69, 0x04, 0x4F, 0x29, 0x60, 0x2C, 0x23, 0x00, 0x47, 0x24, 0x2C, 0x60, -/* 00000A20 */ 0x2C, 0x24, 0x01, 0x47, 0x25, 0x2C, 0x60, 0x2C, 0x24, 0x02, 0x47, 0x26, 0x2C, 0x60, 0x2C, 0x24, -/* 00000A30 */ 0x03, 0x47, 0x27, 0x2C, 0x60, 0x2C, 0x24, 0x04, 0x47, 0x28, 0x2C, 0xCB, 0x00, 0x00, 0x00, 0x00, -/* 00000A40 */ 0x00, 0x00, 0x00, 0x00, 0x2C, 0x00, 0x00, 0x00, 0x47, 0x2D, 0x25, 0x07, 0x03, 0x00, 0x5A, 0x00, -/* 00000A50 */ 0x02, 0xCB, 0x1C, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x00, 0x00, 0x79, 0x05, -/* 00000A60 */ 0x2E, 0x05, 0x79, 0x07, 0x2E, 0x06, 0x79, 0x09, 0x2E, 0x07, 0x79, 0x0B, 0x2E, 0x08, 0x79, 0x0D, -/* 00000A70 */ 0x2E, 0x09, 0x5B, 0x01, 0x2E, 0x00, 0x00, 0x5B, 0x02, 0x0E, 0x00, 0x00, 0xEE, 0x03, 0x2D, 0x2D, -/* 00000A80 */ 0x00, 0x00, 0x79, 0x2D, 0x2C, 0x0A, 0x47, 0x2D, 0x25, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0xCB, -/* 00000A90 */ 0x38, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x00, 0x00, 0x79, 0x05, 0x2E, 0x05, -/* 00000AA0 */ 0x79, 0x10, 0x2E, 0x06, 0x79, 0x09, 0x2E, 0x07, 0x79, 0x0B, 0x2E, 0x08, 0x5B, 0x01, 0x2E, 0x01, -/* 00000AB0 */ 0x00, 0x5B, 0x02, 0x0E, 0x01, 0x00, 0xEE, 0x03, 0x2D, 0x2D, 0x01, 0x00, 0x79, 0x2D, 0x2C, 0x0B, -/* 00000AC0 */ 0x47, 0x2D, 0x25, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0x50, 0x00, 0x00, 0x00, 0x03, 0x00, -/* 00000AD0 */ 0x00, 0x00, 0x2E, 0x00, 0x00, 0x00, 0x79, 0x05, 0x2E, 0x05, 0x79, 0x12, 0x2E, 0x06, 0x79, 0x09, -/* 00000AE0 */ 0x2E, 0x07, 0x79, 0x0B, 0x2E, 0x08, 0x5B, 0x01, 0x2E, 0x02, 0x00, 0x5B, 0x02, 0x0E, 0x02, 0x00, -/* 00000AF0 */ 0xEE, 0x03, 0x2D, 0x2D, 0x02, 0x00, 0x79, 0x2D, 0x2C, 0x0C, 0x47, 0x2D, 0x25, 0x07, 0x03, 0x00, -/* 00000B00 */ 0x5A, 0x00, 0x02, 0xCB, 0x68, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x00, 0x00, -/* 00000B10 */ 0x79, 0x05, 0x2E, 0x05, 0x79, 0x14, 0x2E, 0x06, 0x79, 0x15, 0x2E, 0x07, 0x79, 0x0B, 0x2E, 0x08, -/* 00000B20 */ 0x5B, 0x01, 0x2E, 0x03, 0x00, 0x5B, 0x02, 0x0E, 0x03, 0x00, 0xEE, 0x03, 0x2D, 0x2D, 0x03, 0x00, -/* 00000B30 */ 0x79, 0x2D, 0x2C, 0x0D, 0x47, 0x2D, 0x25, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0x80, 0x00, -/* 00000B40 */ 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x00, 0x00, 0x79, 0x05, 0x2E, 0x05, 0x79, 0x17, -/* 00000B50 */ 0x2E, 0x06, 0x79, 0x15, 0x2E, 0x07, 0x79, 0x0B, 0x2E, 0x08, 0x5B, 0x01, 0x2E, 0x04, 0x00, 0x5B, -/* 00000B60 */ 0x02, 0x0E, 0x04, 0x00, 0xEE, 0x03, 0x2D, 0x2D, 0x04, 0x00, 0x79, 0x2D, 0x2C, 0x0E, 0x47, 0x29, -/* 00000B70 */ 0x2C, 0x6B, 0x2C, 0x24, 0x0F, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x24, 0x5B, 0x01, 0x18, 0x05, 0x00, -/* 00000B80 */ 0xD3, 0x00, 0x2D, 0x5B, 0x02, 0x2D, 0x05, 0x00, 0xF2, 0x03, 0xFF, 0x2C, 0x0F, 0x00, 0x00, 0x00, -/* 00000B90 */ 0x05, 0x00, 0x6B, 0x2C, 0x24, 0x10, 0x07, 0x01, 0x00, 0x5A, 0x00, 0x24, 0xF2, 0x01, 0x2C, 0x2C, -/* 00000BA0 */ 0x10, 0x00, 0x00, 0x00, 0x06, 0x00, 0x47, 0x2A, 0x2C, 0x01, 0x49, 0x01, 0x2C, 0x60, 0x2C, 0x2C, -/* 00000BB0 */ 0x11, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5B, 0x01, 0x2A, 0x07, 0x00, 0xEE, 0x02, 0x2D, 0x28, -/* 00000BC0 */ 0x07, 0x00, 0x75, 0x2D, 0x2C, 0x12, 0x01, 0x49, 0x01, 0x2C, 0x60, 0x2D, 0x24, 0x13, 0x75, 0x2D, -/* 00000BD0 */ 0x2C, 0x14, 0x01, 0x49, 0x01, 0x2C, 0x60, 0x2D, 0x24, 0x15, 0x75, 0x2D, 0x2C, 0x16, 0x01, 0x49, -/* 00000BE0 */ 0x01, 0x2C, 0x60, 0x2D, 0x24, 0x17, 0x75, 0x2D, 0x2C, 0x18, 0x01, 0x49, 0x01, 0x2C, 0x60, 0x2D, -/* 00000BF0 */ 0x24, 0x19, 0x75, 0x2D, 0x2C, 0x1A, 0x01, 0x49, 0x01, 0x2C, 0x60, 0x2D, 0x24, 0x1B, 0x75, 0x2D, -/* 00000C00 */ 0x2C, 0x1C, 0x47, 0x2C, 0x26, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x01, 0x49, 0x01, 0x2D, 0x60, -/* 00000C10 */ 0x2D, 0x2D, 0x1D, 0x60, 0x2D, 0x2D, 0x1E, 0x5B, 0x01, 0x2D, 0x08, 0x00, 0x5B, 0x02, 0x19, 0x08, -/* 00000C20 */ 0x00, 0x47, 0x2D, 0x25, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0x98, 0x00, 0x00, 0x00, 0x06, -/* 00000C30 */ 0x00, 0x00, 0x00, 0x2E, 0x00, 0x00, 0x00, 0xD6, 0x01, 0x2F, 0x2E, 0x79, 0x2F, 0x2E, 0x1F, 0x79, -/* 00000C40 */ 0x0B, 0x2E, 0x20, 0x79, 0x1D, 0x2E, 0x21, 0x79, 0x0B, 0x2E, 0x22, 0x5B, 0x01, 0x2E, 0x09, 0x00, -/* 00000C50 */ 0x5B, 0x02, 0x0E, 0x09, 0x00, 0xEE, 0x03, 0x2D, 0x2D, 0x09, 0x00, 0x5B, 0x03, 0x2D, 0x08, 0x00, -/* 00000C60 */ 0xEE, 0x04, 0xFF, 0x2C, 0x08, 0x00, 0x47, 0x2C, 0x26, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x01, -/* 00000C70 */ 0x49, 0x01, 0x2D, 0x60, 0x2D, 0x2D, 0x1D, 0x60, 0x2D, 0x2D, 0x1E, 0x5B, 0x01, 0x2D, 0x0A, 0x00, -/* 00000C80 */ 0x60, 0x2D, 0x27, 0x23, 0x5B, 0x02, 0x2D, 0x0A, 0x00, 0x47, 0x2D, 0x25, 0x07, 0x03, 0x00, 0x5A, -/* 00000C90 */ 0x00, 0x02, 0xCB, 0xB0, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x00, 0x00, 0x79, -/* 00000CA0 */ 0x1F, 0x2E, 0x1F, 0x79, 0x1D, 0x2E, 0x20, 0x79, 0x1D, 0x2E, 0x21, 0x79, 0x0B, 0x2E, 0x22, 0x5B, -/* 00000CB0 */ 0x01, 0x2E, 0x0B, 0x00, 0x5B, 0x02, 0x0E, 0x0B, 0x00, 0xEE, 0x03, 0x2D, 0x2D, 0x0B, 0x00, 0x5B, -/* 00000CC0 */ 0x03, 0x2D, 0x0A, 0x00, 0xEE, 0x04, 0xFF, 0x2C, 0x0A, 0x00, 0x47, 0x2C, 0x26, 0x07, 0x04, 0x00, -/* 00000CD0 */ 0x5A, 0x00, 0x02, 0x01, 0x49, 0x01, 0x2D, 0x60, 0x2D, 0x2D, 0x1D, 0x60, 0x2D, 0x2D, 0x1E, 0x60, -/* 00000CE0 */ 0x2D, 0x2D, 0x24, 0x5B, 0x01, 0x2D, 0x0C, 0x00, 0x5B, 0x02, 0x20, 0x0C, 0x00, 0x47, 0x2D, 0x25, -/* 00000CF0 */ 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0xC8, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x2E, -/* 00000D00 */ 0x00, 0x00, 0x00, 0x79, 0x09, 0x2E, 0x1F, 0x79, 0x1D, 0x2E, 0x20, 0x79, 0x1D, 0x2E, 0x21, 0x79, -/* 00000D10 */ 0x0B, 0x2E, 0x22, 0x5B, 0x01, 0x2E, 0x0D, 0x00, 0x5B, 0x02, 0x0E, 0x0D, 0x00, 0xEE, 0x03, 0x2D, -/* 00000D20 */ 0x2D, 0x0D, 0x00, 0x5B, 0x03, 0x2D, 0x0C, 0x00, 0xEE, 0x04, 0xFF, 0x2C, 0x0C, 0x00, 0x47, 0x2C, -/* 00000D30 */ 0x26, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x01, 0x49, 0x01, 0x2D, 0x60, 0x2D, 0x2D, 0x1D, 0x60, -/* 00000D40 */ 0x2D, 0x2D, 0x1E, 0x60, 0x2D, 0x2D, 0x24, 0x5B, 0x01, 0x2D, 0x0E, 0x00, 0x5B, 0x02, 0x21, 0x0E, -/* 00000D50 */ 0x00, 0x47, 0x2D, 0x25, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0xE0, 0x00, 0x00, 0x00, 0x09, -/* 00000D60 */ 0x00, 0x00, 0x00, 0x2E, 0x00, 0x00, 0x00, 0x79, 0x19, 0x2E, 0x1F, 0x79, 0x1D, 0x2E, 0x20, 0x79, -/* 00000D70 */ 0x1D, 0x2E, 0x21, 0x79, 0x0B, 0x2E, 0x22, 0x5B, 0x01, 0x2E, 0x0F, 0x00, 0x5B, 0x02, 0x0E, 0x0F, -/* 00000D80 */ 0x00, 0xEE, 0x03, 0x2D, 0x2D, 0x0F, 0x00, 0x5B, 0x03, 0x2D, 0x0E, 0x00, 0xEE, 0x04, 0xFF, 0x2C, -/* 00000D90 */ 0x0E, 0x00, 0x6B, 0x2C, 0x24, 0x0F, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x24, 0x5B, 0x01, 0x22, 0x10, -/* 00000DA0 */ 0x00, 0xD3, 0x02, 0x2D, 0x5B, 0x02, 0x2D, 0x10, 0x00, 0xF2, 0x03, 0xFF, 0x2C, 0x0F, 0x00, 0x00, -/* 00000DB0 */ 0x00, 0x10, 0x00, 0x47, 0x2D, 0x24, 0x6B, 0x2C, 0x2D, 0x25, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x2D, -/* 00000DC0 */ 0x60, 0x2E, 0x29, 0x26, 0x5B, 0x01, 0x2E, 0x11, 0x00, 0xD3, 0x03, 0x2E, 0x5B, 0x02, 0x2E, 0x11, -/* 00000DD0 */ 0x00, 0xF2, 0x03, 0xFF, 0x2C, 0x25, 0x00, 0x00, 0x00, 0x11, 0x00, 0x47, 0x2D, 0x24, 0x6B, 0x2C, -/* 00000DE0 */ 0x2D, 0x25, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x2D, 0x60, 0x2E, 0x29, 0x27, 0x5B, 0x01, 0x2E, 0x12, -/* 00000DF0 */ 0x00, 0xD3, 0x04, 0x2E, 0x5B, 0x02, 0x2E, 0x12, 0x00, 0xF2, 0x03, 0xFF, 0x2C, 0x25, 0x00, 0x00, -/* 00000E00 */ 0x00, 0x12, 0x00, 0x47, 0x2D, 0x24, 0x6B, 0x2C, 0x2D, 0x25, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x2D, -/* 00000E10 */ 0x60, 0x2E, 0x29, 0x28, 0x5B, 0x01, 0x2E, 0x13, 0x00, 0xD3, 0x05, 0x2E, 0x5B, 0x02, 0x2E, 0x13, -/* 00000E20 */ 0x00, 0xF2, 0x03, 0xFF, 0x2C, 0x25, 0x00, 0x00, 0x00, 0x13, 0x00, 0x47, 0x2D, 0x24, 0x6B, 0x2C, -/* 00000E30 */ 0x2D, 0x25, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x2D, 0x60, 0x2E, 0x29, 0x29, 0x5B, 0x01, 0x2E, 0x14, -/* 00000E40 */ 0x00, 0xD3, 0x06, 0x2E, 0x5B, 0x02, 0x2E, 0x14, 0x00, 0xF2, 0x03, 0xFF, 0x2C, 0x25, 0x00, 0x00, -/* 00000E50 */ 0x00, 0x14, 0x00, 0x47, 0x2D, 0x24, 0x6B, 0x2C, 0x2D, 0x25, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x2D, -/* 00000E60 */ 0x60, 0x2E, 0x29, 0x2A, 0x5B, 0x01, 0x2E, 0x15, 0x00, 0xD3, 0x07, 0x2E, 0x5B, 0x02, 0x2E, 0x15, -/* 00000E70 */ 0x00, 0xF2, 0x03, 0xFF, 0x2C, 0x25, 0x00, 0x00, 0x00, 0x15, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x0A, -/* 00000E80 */ 0xF8, 0x00, 0xE0, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, -/* 00000E90 */ 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0xC8, 0x00, -/* 00000EA0 */ 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, -/* 00000EB0 */ 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0xB0, 0x00, 0x00, 0x00, 0x03, 0x04, -/* 00000EC0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, -/* 00000ED0 */ 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, -/* 00000EE0 */ 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, -/* 00000EF0 */ 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4B, 0x02, -/* 00000F00 */ 0x00, 0x00, 0x50, 0x02, 0x00, 0x00, 0x4A, 0x02, 0x00, 0x00, 0x4C, 0x02, 0x00, 0x00, 0x68, 0x00, -/* 00000F10 */ 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4B, 0x02, 0x00, 0x00, 0x50, 0x02, -/* 00000F20 */ 0x00, 0x00, 0x4A, 0x02, 0x00, 0x00, 0x4C, 0x02, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x03, 0x04, -/* 00000F30 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4B, 0x02, 0x00, 0x00, 0x50, 0x02, 0x00, 0x00, 0x4A, 0x02, -/* 00000F40 */ 0x00, 0x00, 0x4C, 0x02, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, -/* 00000F50 */ 0x00, 0x00, 0x4B, 0x02, 0x00, 0x00, 0x50, 0x02, 0x00, 0x00, 0x4A, 0x02, 0x00, 0x00, 0x4C, 0x02, -/* 00000F60 */ 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x03, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4B, 0x02, -/* 00000F70 */ 0x00, 0x00, 0x50, 0x02, 0x00, 0x00, 0x4A, 0x02, 0x00, 0x00, 0x4C, 0x02, 0x00, 0x00, 0x49, 0x02, -/* 00000F80 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0x02, -/* 00000F90 */ 0x00, 0x00, 0xD9, 0x02, 0x00, 0x00, 0xDB, 0x02, 0x00, 0x00, 0xDD, 0x02, 0x00, 0x00, 0xDF, 0x02, -/* 00000FA0 */ 0x00, 0x00, 0x52, 0xFE, 0x81, 0x02, 0xFE, 0x68, 0x02, 0xFE, 0x54, 0x01, 0xFE, 0x67, 0x02, 0xFE, -/* 00000FB0 */ 0x4B, 0x02, 0xFE, 0x50, 0x02, 0xFE, 0x4A, 0x02, 0xFE, 0x4C, 0x02, 0xFE, 0x49, 0x02, 0xFE, 0xD0, -/* 00000FC0 */ 0x02, 0xFE, 0xD9, 0x02, 0xFE, 0xDB, 0x02, 0xFE, 0xDD, 0x02, 0xFE, 0xDF, 0x02, 0xFE, 0x51, 0x02, -/* 00000FD0 */ 0xFE, 0x4D, 0x02, 0xFE, 0xE1, 0x02, 0xFE, 0x15, 0x01, 0xFE, 0x8A, 0x02, 0xFE, 0x8A, 0x02, 0xFE, -/* 00000FE0 */ 0x91, 0x02, 0xFE, 0x91, 0x02, 0xFE, 0x92, 0x02, 0xFE, 0x92, 0x02, 0xFE, 0x84, 0x02, 0xFE, 0xEB, -/* 00000FF0 */ 0x02, 0xFE, 0x66, 0x02, 0xFE, 0xEC, 0x02, 0xFE, 0xE1, 0x02, 0xFE, 0x15, 0x01, 0xFE, 0x83, 0x01, -/* 00001000 */ 0xFE, 0x82, 0x01, 0xFE, 0x80, 0x01, 0xFE, 0x81, 0x01, 0xFE, 0x67, 0x01, 0xF9, 0xFE, 0x52, 0x02, -/* 00001010 */ 0xFE, 0xD9, 0x02, 0xFE, 0xD0, 0x02, 0xFE, 0xDB, 0x02, 0xFE, 0xDD, 0x02, 0xFE, 0xDF, 0x02, 0xFE, -/* 00001020 */ 0x9B, 0x01, 0x19, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x29, 0x00, 0x07, 0x00, 0x35, 0x00, 0x07, -/* 00001030 */ 0x00, 0x55, 0x00, 0x07, 0x00, 0x22, 0x00, 0x07, 0x00, 0x40, 0x00, 0x36, 0x01, 0xEE, 0x02, 0x21, -/* 00001040 */ 0x00, 0x9F, 0x02, 0x17, 0x00, 0x63, 0x00, 0x1D, 0x00, 0x4F, 0x00, 0x0C, 0x00, 0x4C, 0x00, 0x0C, -/* 00001050 */ 0x00, 0x54, 0x00, 0x0C, 0x00, 0x66, 0x00, 0x0C, 0x00, 0x4D, 0x00, 0x0C, 0x00, 0x51, 0x00, 0x64, -/* 00001060 */ 0x00, 0x13, 0x08, 0x64, 0x00, 0xC2, 0x00, 0x64, 0x00, 0xAE, 0x00, 0x64, 0x00, 0xB1, 0x00, 0x21, -/* 00001070 */ 0x00, 0xD1, 0x00, 0x28, 0x00, 0x74, 0x01, 0x28, 0x00, 0x7A, 0x01, 0x28, 0x00, 0x82, 0x01, 0x28, -/* 00001080 */ 0x00, 0x40, 0x06, 0x2A, 0x00, 0x26, 0x07, 0x00, 0xB1, 0x1B, 0x00, 0x00, 0xEC, 0x18, 0x00, 0x00, -/* 00001090 */ 0x87, 0x18, 0x00, 0x00, 0xAF, 0x17, 0x00, 0x00, 0xD7, 0x16, 0x00, 0x00, 0xFF, 0x15, 0x00, 0x00, -/* 000010A0 */ 0xD3, 0x13, 0x00, 0x00, 0xA8, 0x10, 0x00, 0x00, 0xBF, 0x3C, 0x0B, 0xC2, 0x43, 0xA0, 0x09, 0x00, -/* 000010B0 */ 0xB8, 0x39, 0xA2, 0x41, 0xD1, 0x00, 0x09, 0xFE, 0x7D, 0x20, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, -/* 000010C0 */ 0x03, 0xFE, 0x7D, 0x20, 0xFE, 0xEB, 0x06, 0xFE, 0xEB, 0x06, 0x01, 0x10, 0x09, 0x14, 0x05, 0x8E, -/* 000010D0 */ 0x81, 0x36, 0x01, 0x04, 0x0B, 0x02, 0x0A, 0x0A, 0x0A, 0x0A, 0x02, 0x14, 0xFE, 0x18, 0x01, 0xFE, -/* 000010E0 */ 0x88, 0x01, 0xFE, 0xBD, 0x01, 0xFE, 0x2D, 0x02, 0x05, 0xFE, 0xCF, 0x02, 0x07, 0x05, 0xFE, 0xF7, -/* 000010F0 */ 0x02, 0x06, 0xFE, 0xF8, 0x02, 0x01, 0x00, 0x08, 0x01, 0x01, 0xFE, 0x37, 0x02, 0x59, 0x16, 0xB2, -/* 00001100 */ 0x0B, 0x16, 0x4F, 0x0C, 0x4F, 0x0D, 0x4F, 0x0E, 0x4F, 0x0F, 0x4F, 0x10, 0x4F, 0x11, 0x4F, 0x12, -/* 00001110 */ 0x4F, 0x13, 0x14, 0x0A, 0x00, 0x0B, 0x03, 0xA6, 0x16, 0x14, 0x03, 0x00, 0x0B, 0x16, 0x09, 0x1D, -/* 00001120 */ 0x00, 0x01, 0x49, 0x01, 0x17, 0x6B, 0x16, 0x17, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x17, 0x5B, -/* 00001130 */ 0x01, 0x04, 0x00, 0x00, 0xF2, 0x02, 0xFF, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA6, 0x16, -/* 00001140 */ 0x47, 0x0C, 0x16, 0xA6, 0x16, 0x47, 0x0D, 0x16, 0x01, 0x49, 0x01, 0x17, 0x6B, 0x16, 0x17, 0x01, -/* 00001150 */ 0x07, 0x02, 0x00, 0x5A, 0x00, 0x17, 0x5B, 0x01, 0x0B, 0x01, 0x00, 0xF2, 0x02, 0x16, 0x16, 0x01, -/* 00001160 */ 0x00, 0x00, 0x00, 0x01, 0x00, 0x0E, 0x0F, 0x00, 0x16, 0x47, 0x0C, 0x0B, 0xA5, 0x16, 0x0C, 0x02, -/* 00001170 */ 0x00, 0x00, 0x47, 0x0D, 0x16, 0x09, 0x40, 0x00, 0x01, 0x49, 0x01, 0x17, 0x6B, 0x16, 0x17, 0x03, -/* 00001180 */ 0x07, 0x02, 0x00, 0x5A, 0x00, 0x17, 0x5B, 0x01, 0x0B, 0x02, 0x00, 0xF2, 0x02, 0x16, 0x16, 0x03, -/* 00001190 */ 0x00, 0x00, 0x00, 0x02, 0x00, 0x47, 0x0C, 0x16, 0x01, 0x49, 0x01, 0x17, 0x6B, 0x16, 0x17, 0x04, -/* 000011A0 */ 0x07, 0x02, 0x00, 0x5A, 0x00, 0x17, 0x5B, 0x01, 0x0C, 0x03, 0x00, 0xF2, 0x02, 0x16, 0x16, 0x04, -/* 000011B0 */ 0x00, 0x00, 0x00, 0x03, 0x00, 0x47, 0x0D, 0x16, 0x2C, 0x16, 0x09, 0x0D, 0x03, 0x00, 0x16, 0x05, -/* 000011C0 */ 0x09, 0x1D, 0x00, 0x01, 0x49, 0x01, 0x17, 0x6B, 0x16, 0x17, 0x05, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 000011D0 */ 0x17, 0x5B, 0x01, 0x04, 0x04, 0x00, 0xF2, 0x02, 0xFF, 0x16, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, -/* 000011E0 */ 0x01, 0x49, 0x01, 0x17, 0x6B, 0x16, 0x17, 0x06, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x17, 0x5B, 0x01, -/* 000011F0 */ 0x0C, 0x05, 0x00, 0x5B, 0x02, 0x06, 0x05, 0x00, 0xF2, 0x03, 0x16, 0x16, 0x06, 0x00, 0x00, 0x00, -/* 00001200 */ 0x05, 0x00, 0x47, 0x0E, 0x16, 0x47, 0x0F, 0x06, 0x47, 0x10, 0x06, 0xA6, 0x16, 0x14, 0x03, 0x00, -/* 00001210 */ 0x0A, 0x16, 0x09, 0x73, 0x00, 0xEB, 0x00, 0xEC, 0x00, 0x12, 0x03, 0x00, 0x0F, 0x0D, 0x09, 0x62, -/* 00001220 */ 0x00, 0xB9, 0x16, 0x0F, 0x0C, 0x00, 0x00, 0x0E, 0x52, 0x00, 0x16, 0x96, 0x16, 0x0C, 0x0F, 0x01, -/* 00001230 */ 0x00, 0x47, 0x11, 0x16, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x07, 0x5B, 0x01, 0x11, 0x06, 0x00, 0x5B, -/* 00001240 */ 0x02, 0x0F, 0x06, 0x00, 0x5B, 0x03, 0x0C, 0x06, 0x00, 0xEE, 0x04, 0x16, 0x09, 0x06, 0x00, 0x0E, -/* 00001250 */ 0x2A, 0x00, 0x16, 0x01, 0x49, 0x01, 0x17, 0x6B, 0x16, 0x17, 0x07, 0x07, 0x04, 0x00, 0x5A, 0x00, -/* 00001260 */ 0x17, 0x5B, 0x01, 0x0E, 0x07, 0x00, 0x5B, 0x02, 0x10, 0x07, 0x00, 0x5B, 0x03, 0x11, 0x07, 0x00, -/* 00001270 */ 0xF2, 0x04, 0xFF, 0x16, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x28, 0x10, 0x10, 0x28, 0x0F, 0x0F, -/* 00001280 */ 0x09, 0x94, 0xFF, 0xED, 0x00, 0x09, 0xA2, 0x00, 0x01, 0x49, 0x01, 0x17, 0x6B, 0x16, 0x17, 0x08, -/* 00001290 */ 0x07, 0x04, 0x00, 0x5A, 0x00, 0x17, 0x01, 0x49, 0x01, 0x18, 0x60, 0x18, 0x18, 0x09, 0x5B, 0x01, -/* 000012A0 */ 0x18, 0x08, 0x00, 0x5B, 0x02, 0x09, 0x08, 0x00, 0x5B, 0x03, 0x0A, 0x08, 0x00, 0xF2, 0x04, 0x16, -/* 000012B0 */ 0x16, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x47, 0x12, 0x16, 0xEB, 0x01, 0xEC, 0x01, 0x12, 0x03, -/* 000012C0 */ 0x00, 0x0F, 0x0D, 0x09, 0x62, 0x00, 0xB9, 0x16, 0x0F, 0x0C, 0x02, 0x00, 0x0E, 0x52, 0x00, 0x16, -/* 000012D0 */ 0x96, 0x16, 0x0C, 0x0F, 0x03, 0x00, 0x47, 0x13, 0x16, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x07, 0x5B, -/* 000012E0 */ 0x01, 0x13, 0x09, 0x00, 0x5B, 0x02, 0x0F, 0x09, 0x00, 0x5B, 0x03, 0x0C, 0x09, 0x00, 0xEE, 0x04, -/* 000012F0 */ 0x16, 0x12, 0x09, 0x00, 0x0E, 0x2A, 0x00, 0x16, 0x01, 0x49, 0x01, 0x17, 0x6B, 0x16, 0x17, 0x07, -/* 00001300 */ 0x07, 0x04, 0x00, 0x5A, 0x00, 0x17, 0x5B, 0x01, 0x0E, 0x0A, 0x00, 0x5B, 0x02, 0x10, 0x0A, 0x00, -/* 00001310 */ 0x5B, 0x03, 0x13, 0x0A, 0x00, 0xF2, 0x04, 0xFF, 0x16, 0x07, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x28, -/* 00001320 */ 0x10, 0x10, 0x28, 0x0F, 0x0F, 0x09, 0x94, 0xFF, 0xED, 0x01, 0x47, 0x00, 0x0E, 0x09, 0x02, 0x00, -/* 00001330 */ 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x91, 0x02, 0xAE, 0xC1, 0xFE, 0x02, 0x01, 0xFE, 0x4E, 0x02, 0xFE, -/* 00001340 */ 0x92, 0x02, 0xFE, 0x55, 0x02, 0xFE, 0x56, 0x02, 0xFE, 0xEB, 0x02, 0xFE, 0xEC, 0x02, 0xFE, 0xF4, -/* 00001350 */ 0x20, 0x20, 0x15, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x37, 0x00, 0x1D, 0x00, 0x58, 0x00, 0x05, 0x00, -/* 00001360 */ 0x0F, 0x00, 0x05, 0x00, 0x10, 0x00, 0x21, 0x00, 0x31, 0x00, 0x03, 0x00, 0x16, 0x00, 0x0C, 0x00, -/* 00001370 */ 0x2D, 0x00, 0x20, 0x00, 0x2E, 0x00, 0x20, 0x00, 0x3F, 0x00, 0x0B, 0x00, 0x33, 0x00, 0x1D, 0x00, -/* 00001380 */ 0x61, 0x00, 0x25, 0x00, 0x3A, 0x00, 0x03, 0x00, 0x13, 0x00, 0x03, 0x00, 0x15, 0x00, 0x0E, 0x00, -/* 00001390 */ 0x4A, 0x00, 0x08, 0x00, 0x1B, 0x00, 0x0A, 0x00, 0x22, 0x00, 0x09, 0x00, 0x27, 0x00, 0x1F, 0x00, -/* 000013A0 */ 0x38, 0x00, 0x27, 0x00, 0x57, 0x00, 0x03, 0x00, 0x3E, 0x00, 0x0B, 0x00, 0x8F, 0x00, 0x36, 0x00, -/* 000013B0 */ 0x7C, 0x00, 0x08, 0x00, 0x1B, 0x00, 0x0A, 0x00, 0x22, 0x00, 0x09, 0x00, 0x27, 0x00, 0x1F, 0x00, -/* 000013C0 */ 0x3B, 0x00, 0x27, 0x00, 0x57, 0x00, 0x03, 0x00, 0x3E, 0x00, 0x08, 0x00, 0x26, 0x00, 0x08, 0x00, -/* 000013D0 */ 0x0E, 0x00, 0x00, 0xBF, 0x3C, 0x0B, 0xC2, 0x43, 0xA0, 0x09, 0x00, 0x7E, 0x3A, 0xA2, 0x41, 0xD1, -/* 000013E0 */ 0x00, 0x08, 0xFE, 0x3E, 0x1A, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x3E, 0x1A, 0xFE, -/* 000013F0 */ 0x02, 0x06, 0xFE, 0x02, 0x06, 0x01, 0x0C, 0x08, 0x10, 0x03, 0x5E, 0x4F, 0x10, 0x01, 0x02, 0x05, -/* 00001400 */ 0x01, 0x06, 0x06, 0x06, 0x06, 0x01, 0x10, 0xFE, 0x1C, 0x01, 0xFE, 0x53, 0x01, 0x05, 0xFE, 0xCF, -/* 00001410 */ 0x02, 0x07, 0x05, 0xFE, 0xF6, 0x02, 0x01, 0x00, 0x01, 0xFF, 0x01, 0x01, 0xFE, 0x5D, 0x01, 0x59, -/* 00001420 */ 0x11, 0xB2, 0x0A, 0x11, 0x4F, 0x0B, 0x4F, 0x0C, 0x4F, 0x0D, 0x4F, 0x0E, 0x4F, 0x0F, 0x14, 0x0A, -/* 00001430 */ 0x00, 0x0A, 0x03, 0xA6, 0x11, 0x14, 0x03, 0x00, 0x0A, 0x11, 0x09, 0x1D, 0x00, 0x01, 0x49, 0x01, -/* 00001440 */ 0x12, 0x6B, 0x11, 0x12, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x12, 0x5B, 0x01, 0x04, 0x00, 0x00, -/* 00001450 */ 0xF2, 0x02, 0xFF, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA6, 0x11, 0x47, 0x0B, 0x11, 0x01, -/* 00001460 */ 0x49, 0x01, 0x12, 0x6B, 0x11, 0x12, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x12, 0x5B, 0x01, 0x0A, -/* 00001470 */ 0x01, 0x00, 0xF2, 0x02, 0x11, 0x11, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0E, 0x06, 0x00, 0x11, -/* 00001480 */ 0x47, 0x0B, 0x0A, 0x09, 0x20, 0x00, 0x01, 0x49, 0x01, 0x12, 0x6B, 0x11, 0x12, 0x02, 0x07, 0x02, -/* 00001490 */ 0x00, 0x5A, 0x00, 0x12, 0x5B, 0x01, 0x0A, 0x02, 0x00, 0xF2, 0x02, 0x11, 0x11, 0x02, 0x00, 0x00, -/* 000014A0 */ 0x00, 0x02, 0x00, 0x47, 0x0B, 0x11, 0x01, 0x49, 0x01, 0x12, 0x6B, 0x11, 0x12, 0x03, 0x07, 0x02, -/* 000014B0 */ 0x00, 0x5A, 0x00, 0x12, 0xA5, 0x13, 0x0B, 0x04, 0x00, 0x00, 0x5B, 0x01, 0x13, 0x03, 0x00, 0xF2, -/* 000014C0 */ 0x02, 0x11, 0x11, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x47, 0x0C, 0x11, 0x14, 0x03, 0x00, 0x0C, -/* 000014D0 */ 0x05, 0x09, 0x06, 0x00, 0x47, 0x00, 0x06, 0x09, 0xA0, 0x00, 0x01, 0x49, 0x01, 0x12, 0x6B, 0x11, -/* 000014E0 */ 0x12, 0x05, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x12, 0x5B, 0x01, 0x09, 0x04, 0x00, 0xF2, 0x02, 0x11, -/* 000014F0 */ 0x11, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x47, 0x0D, 0x11, 0x10, 0x03, 0x00, 0x0D, 0x0C, 0x09, -/* 00001500 */ 0x06, 0x00, 0x47, 0x00, 0x06, 0x09, 0x72, 0x00, 0xA6, 0x11, 0x47, 0x0E, 0x11, 0x14, 0x03, 0x00, -/* 00001510 */ 0x0D, 0x05, 0x09, 0x06, 0x00, 0x47, 0x0E, 0x05, 0x09, 0x20, 0x00, 0x11, 0x03, 0x00, 0x0D, 0x05, -/* 00001520 */ 0x09, 0x06, 0x00, 0x47, 0x0E, 0x0D, 0x09, 0x12, 0x00, 0x2F, 0x11, 0x0C, 0x0D, 0x47, 0x0E, 0x11, -/* 00001530 */ 0x12, 0x03, 0x00, 0x0E, 0x05, 0x09, 0x03, 0x00, 0x47, 0x0E, 0x05, 0xEB, 0x00, 0xEC, 0x00, 0x12, -/* 00001540 */ 0x03, 0x00, 0x0E, 0x0C, 0x09, 0x29, 0x00, 0xB9, 0x11, 0x0E, 0x0B, 0x00, 0x00, 0x0E, 0x19, 0x00, -/* 00001550 */ 0x11, 0x96, 0x11, 0x0B, 0x0E, 0x01, 0x00, 0x47, 0x0F, 0x11, 0x14, 0x03, 0x00, 0x0F, 0x08, 0x09, -/* 00001560 */ 0x08, 0x00, 0x47, 0x00, 0x0E, 0xED, 0x00, 0x09, 0x10, 0x00, 0x28, 0x0E, 0x0E, 0x09, 0xCD, 0xFF, -/* 00001570 */ 0xED, 0x00, 0x47, 0x00, 0x06, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x91, 0x02, 0xAE, -/* 00001580 */ 0xFE, 0x02, 0x01, 0xFE, 0x53, 0x02, 0xC1, 0xFE, 0x54, 0x02, 0xFE, 0xBB, 0x1A, 0x1C, 0x0F, 0x00, -/* 00001590 */ 0x00, 0x00, 0x0F, 0x00, 0x37, 0x00, 0x1D, 0x00, 0x59, 0x00, 0x05, 0x00, 0x0F, 0x00, 0x21, 0x00, -/* 000015A0 */ 0x31, 0x00, 0x06, 0x00, 0x27, 0x00, 0x20, 0x00, 0x35, 0x00, 0x26, 0x00, 0x39, 0x00, 0x08, 0x00, -/* 000015B0 */ 0x1D, 0x00, 0x06, 0x00, 0x1E, 0x00, 0x20, 0x00, 0x36, 0x00, 0x08, 0x00, 0x1C, 0x00, 0x06, 0x00, -/* 000015C0 */ 0x1E, 0x00, 0x05, 0x00, 0x14, 0x01, 0x08, 0x00, 0x58, 0x00, 0x06, 0x00, 0x16, 0x00, 0x08, 0x00, -/* 000015D0 */ 0x4F, 0x00, 0x06, 0x00, 0x4E, 0x00, 0x07, 0x00, 0x1A, 0x00, 0x08, 0x00, 0x1D, 0x00, 0x07, 0x00, -/* 000015E0 */ 0x2F, 0x00, 0x08, 0x00, 0x17, 0x00, 0x0A, 0x00, 0x1E, 0x00, 0x09, 0x00, 0x26, 0x00, 0x08, 0x00, -/* 000015F0 */ 0x36, 0x00, 0x08, 0x00, 0x37, 0x00, 0x08, 0x00, 0x18, 0x00, 0x08, 0x00, 0x0F, 0x00, 0x00, 0xBF, -/* 00001600 */ 0x1C, 0x08, 0xC0, 0x03, 0x80, 0x01, 0x00, 0x75, 0x3A, 0xA0, 0x41, 0xD1, 0x00, 0x07, 0xFE, 0xBC, -/* 00001610 */ 0x18, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0xBC, 0x18, 0xFE, 0x44, 0x01, 0xFE, 0x44, -/* 00001620 */ 0x01, 0x01, 0x04, 0x06, 0x08, 0x04, 0x1F, 0x1E, 0x03, 0x03, 0x03, 0x03, 0x03, 0x05, 0xFE, 0xCF, -/* 00001630 */ 0x02, 0x07, 0x05, 0xFE, 0xF5, 0x02, 0x01, 0x02, 0x7C, 0x59, 0x08, 0xB2, 0x06, 0x08, 0x4F, 0x07, -/* 00001640 */ 0x14, 0x0A, 0x00, 0x06, 0x03, 0xA6, 0x08, 0x14, 0x03, 0x00, 0x06, 0x08, 0x09, 0x1D, 0x00, 0x01, -/* 00001650 */ 0x49, 0x01, 0x09, 0x6B, 0x08, 0x09, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x09, 0x5B, 0x01, 0x04, -/* 00001660 */ 0x00, 0x00, 0xF2, 0x02, 0xFF, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x49, 0x01, 0x09, -/* 00001670 */ 0x6B, 0x08, 0x09, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x09, 0x5B, 0x01, 0x06, 0x01, 0x00, 0xF2, -/* 00001680 */ 0x02, 0x08, 0x08, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x07, 0x08, 0x01, 0x49, 0x01, 0x09, -/* 00001690 */ 0x6B, 0x08, 0x09, 0x02, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x09, 0x5B, 0x01, 0x07, 0x02, 0x00, 0x5B, -/* 000016A0 */ 0x02, 0x05, 0x02, 0x00, 0xF2, 0x03, 0x00, 0x08, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x09, 0x02, -/* 000016B0 */ 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x91, 0x02, 0xFE, 0x02, 0x01, 0xFE, 0xEA, 0x02, 0xFE, 0xE8, -/* 000016C0 */ 0x18, 0x05, 0x07, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x37, 0x00, 0x1D, 0x00, 0x58, 0x00, 0x20, 0x00, -/* 000016D0 */ 0x2E, 0x00, 0x27, 0x00, 0x5A, 0x00, 0x00, 0xBF, 0x1C, 0x08, 0xC0, 0x03, 0x80, 0x01, 0x00, 0x6C, -/* 000016E0 */ 0x39, 0xA0, 0x41, 0xD1, 0x00, 0x06, 0xFE, 0x41, 0x17, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, -/* 000016F0 */ 0xFE, 0x41, 0x17, 0xFE, 0x3D, 0x01, 0xFE, 0x3D, 0x01, 0x01, 0x04, 0x06, 0x08, 0x04, 0x1F, 0x1E, -/* 00001700 */ 0x03, 0x03, 0x03, 0x03, 0x03, 0x05, 0xFE, 0xCF, 0x02, 0x07, 0x05, 0xFE, 0xF4, 0x02, 0x01, 0x01, -/* 00001710 */ 0x7C, 0x59, 0x08, 0xB2, 0x06, 0x08, 0x4F, 0x07, 0x14, 0x0A, 0x00, 0x06, 0x03, 0xA6, 0x08, 0x14, -/* 00001720 */ 0x03, 0x00, 0x06, 0x08, 0x09, 0x1D, 0x00, 0x01, 0x49, 0x01, 0x09, 0x6B, 0x08, 0x09, 0x00, 0x07, -/* 00001730 */ 0x02, 0x00, 0x5A, 0x00, 0x09, 0x5B, 0x01, 0x04, 0x00, 0x00, 0xF2, 0x02, 0xFF, 0x08, 0x00, 0x00, -/* 00001740 */ 0x00, 0x00, 0x00, 0x00, 0x01, 0x49, 0x01, 0x09, 0x6B, 0x08, 0x09, 0x01, 0x07, 0x02, 0x00, 0x5A, -/* 00001750 */ 0x00, 0x09, 0x5B, 0x01, 0x06, 0x01, 0x00, 0xF2, 0x02, 0x08, 0x08, 0x01, 0x00, 0x00, 0x00, 0x01, -/* 00001760 */ 0x00, 0x47, 0x07, 0x08, 0x01, 0x49, 0x01, 0x09, 0x6B, 0x08, 0x09, 0x02, 0x07, 0x03, 0x00, 0x5A, -/* 00001770 */ 0x00, 0x09, 0x5B, 0x01, 0x07, 0x02, 0x00, 0x5B, 0x02, 0x05, 0x02, 0x00, 0xF2, 0x03, 0x00, 0x08, -/* 00001780 */ 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x91, 0x02, -/* 00001790 */ 0xFE, 0x02, 0x01, 0xFE, 0xEA, 0x02, 0xFE, 0x6D, 0x17, 0x05, 0x07, 0x00, 0x00, 0x00, 0x0F, 0x00, -/* 000017A0 */ 0x37, 0x00, 0x1D, 0x00, 0x57, 0x00, 0x20, 0x00, 0x2E, 0x00, 0x27, 0x00, 0x54, 0x00, 0x00, 0xBF, -/* 000017B0 */ 0x1C, 0x08, 0xC0, 0x03, 0x80, 0x01, 0x00, 0x63, 0x37, 0xA0, 0x41, 0xD1, 0x00, 0x05, 0xFE, 0xCB, -/* 000017C0 */ 0x15, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0xCB, 0x15, 0xFE, 0x39, 0x01, 0xFE, 0x39, -/* 000017D0 */ 0x01, 0x01, 0x04, 0x06, 0x08, 0x04, 0x1F, 0x1E, 0x03, 0x03, 0x03, 0x03, 0x03, 0x05, 0xFE, 0xCF, -/* 000017E0 */ 0x02, 0x07, 0x05, 0xFE, 0xF3, 0x02, 0x01, 0x00, 0x7C, 0x59, 0x08, 0xB2, 0x06, 0x08, 0x4F, 0x07, -/* 000017F0 */ 0x14, 0x0A, 0x00, 0x06, 0x03, 0xA6, 0x08, 0x14, 0x03, 0x00, 0x06, 0x08, 0x09, 0x1D, 0x00, 0x01, -/* 00001800 */ 0x49, 0x01, 0x09, 0x6B, 0x08, 0x09, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x09, 0x5B, 0x01, 0x04, -/* 00001810 */ 0x00, 0x00, 0xF2, 0x02, 0xFF, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x49, 0x01, 0x09, -/* 00001820 */ 0x6B, 0x08, 0x09, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x09, 0x5B, 0x01, 0x06, 0x01, 0x00, 0xF2, -/* 00001830 */ 0x02, 0x08, 0x08, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x07, 0x08, 0x01, 0x49, 0x01, 0x09, -/* 00001840 */ 0x6B, 0x08, 0x09, 0x02, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x09, 0x5B, 0x01, 0x07, 0x02, 0x00, 0x5B, -/* 00001850 */ 0x02, 0x05, 0x02, 0x00, 0xF2, 0x03, 0x00, 0x08, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x09, 0x02, -/* 00001860 */ 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x91, 0x02, 0xFE, 0x02, 0x01, 0xFE, 0xEA, 0x02, 0xFE, 0xF7, -/* 00001870 */ 0x15, 0x05, 0x07, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x37, 0x00, 0x1D, 0x00, 0x55, 0x00, 0x20, 0x00, -/* 00001880 */ 0x2E, 0x00, 0x27, 0x00, 0x52, 0x00, 0x00, 0xBF, 0x1C, 0x08, 0xC0, 0x03, 0x80, 0x01, 0x00, 0x5E, -/* 00001890 */ 0x42, 0xA2, 0x41, 0xD1, 0x00, 0x04, 0xFE, 0x05, 0x15, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, -/* 000018A0 */ 0xFE, 0x05, 0x15, 0x8B, 0x8B, 0x01, 0x03, 0x03, 0x05, 0x04, 0x0A, 0x0A, 0x01, 0x01, 0x01, 0x01, -/* 000018B0 */ 0x01, 0x05, 0xFE, 0xCF, 0x02, 0x26, 0x01, 0x49, 0x01, 0x05, 0x60, 0x05, 0x05, 0x00, 0x07, 0x03, -/* 000018C0 */ 0x00, 0x5B, 0x01, 0x03, 0x00, 0x00, 0x5B, 0x02, 0x04, 0x00, 0x00, 0xC3, 0x03, 0x00, 0x05, 0x00, -/* 000018D0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xE1, 0x02, 0xFE, -/* 000018E0 */ 0x48, 0x15, 0x02, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x47, 0x00, 0x00, 0xBF, 0x1C, 0x1B, 0xC0, -/* 000018F0 */ 0x57, 0xA0, 0x23, 0x00, 0x2E, 0x13, 0xA0, 0x41, 0xC1, 0x00, 0xFE, 0xE3, 0x02, 0x03, 0xFF, 0x00, -/* 00001900 */ 0x00, 0x00, 0x02, 0xFE, 0xDF, 0x0B, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0xDF, 0x0B, -/* 00001910 */ 0xFE, 0x4E, 0x06, 0xFE, 0x4E, 0x06, 0x01, 0x0E, 0x0C, 0x14, 0x04, 0x5D, 0x54, 0x01, 0x02, 0x03, -/* 00001920 */ 0x01, 0x0D, 0x0D, 0x0D, 0x0D, 0x01, 0x05, 0x03, 0x14, 0x05, 0xFE, 0xCF, 0x02, 0x05, 0xFE, 0xF1, -/* 00001930 */ 0x02, 0x05, 0xFE, 0xE7, 0x02, 0x0B, 0x06, 0xFE, 0xE3, 0x02, 0x06, 0xFE, 0xF2, 0x02, 0x07, 0x01, -/* 00001940 */ 0x01, 0x0C, 0x01, 0x00, 0xFE, 0x89, 0x01, 0x59, 0x17, 0xB2, 0x0C, 0x17, 0x4F, 0x0D, 0x4F, 0x0E, -/* 00001950 */ 0x4F, 0x0F, 0x4F, 0x10, 0x4F, 0x11, 0x4F, 0x12, 0x4F, 0x13, 0x47, 0x0D, 0x0C, 0x01, 0x49, 0x01, -/* 00001960 */ 0x17, 0x60, 0x17, 0x17, 0x00, 0xE1, 0x17, 0x0D, 0x17, 0x00, 0x0F, 0x22, 0x00, 0x17, 0x01, 0x49, -/* 00001970 */ 0x01, 0x18, 0x6B, 0x17, 0x18, 0x01, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x18, 0x5B, 0x01, 0x03, 0x00, -/* 00001980 */ 0x00, 0x5B, 0x02, 0x04, 0x00, 0x00, 0xF2, 0x03, 0xFF, 0x17, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 00001990 */ 0x60, 0x17, 0x0D, 0x02, 0x47, 0x0E, 0x17, 0x60, 0x17, 0x0D, 0x03, 0x14, 0x03, 0x00, 0x17, 0x05, -/* 000019A0 */ 0x09, 0x1D, 0x00, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 000019B0 */ 0xA6, 0x17, 0x79, 0x17, 0x00, 0x04, 0x79, 0x05, 0x00, 0x05, 0x09, 0x11, 0x01, 0x09, 0x0C, 0x01, -/* 000019C0 */ 0x60, 0x17, 0x0D, 0x06, 0x47, 0x0F, 0x17, 0x01, 0x49, 0x01, 0x18, 0x6B, 0x17, 0x18, 0x07, 0x07, -/* 000019D0 */ 0x02, 0x00, 0x5A, 0x00, 0x18, 0x5B, 0x01, 0x0E, 0x01, 0x00, 0xF2, 0x02, 0x17, 0x17, 0x07, 0x00, -/* 000019E0 */ 0x00, 0x00, 0x01, 0x00, 0x0E, 0x0C, 0x00, 0x17, 0xA5, 0x18, 0x0E, 0x08, 0x00, 0x00, 0x47, 0x17, -/* 000019F0 */ 0x18, 0x09, 0x20, 0x00, 0x01, 0x49, 0x01, 0x19, 0x6B, 0x18, 0x19, 0x09, 0x07, 0x02, 0x00, 0x5A, -/* 00001A00 */ 0x00, 0x19, 0x5B, 0x01, 0x0E, 0x02, 0x00, 0xF2, 0x02, 0x18, 0x18, 0x09, 0x00, 0x00, 0x00, 0x02, -/* 00001A10 */ 0x00, 0x47, 0x17, 0x18, 0x47, 0x10, 0x17, 0x12, 0x03, 0x00, 0x0F, 0x10, 0x09, 0x8F, 0x00, 0x60, -/* 00001A20 */ 0x17, 0x0D, 0x0A, 0x47, 0x11, 0x17, 0x2F, 0x17, 0x0F, 0x09, 0x75, 0x17, 0x0D, 0x0B, 0x14, 0x03, -/* 00001A30 */ 0x00, 0x11, 0x09, 0x09, 0x21, 0x00, 0xCB, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -/* 00001A40 */ 0x00, 0x00, 0x00, 0x96, 0x17, 0x0E, 0x0F, 0x00, 0x00, 0x79, 0x17, 0x00, 0x04, 0x79, 0x0A, 0x00, -/* 00001A50 */ 0x05, 0x09, 0x7A, 0x00, 0x09, 0x54, 0x00, 0x14, 0x03, 0x00, 0x11, 0x0B, 0x09, 0x1B, 0x00, 0xCB, -/* 00001A60 */ 0x20, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79, 0x0F, 0x00, 0x04, -/* 00001A70 */ 0x79, 0x0A, 0x00, 0x05, 0x09, 0x57, 0x00, 0x09, 0x31, 0x00, 0x47, 0x12, 0x0F, 0x96, 0x17, 0x0E, -/* 00001A80 */ 0x0F, 0x01, 0x00, 0x47, 0x13, 0x17, 0xCB, 0x30, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -/* 00001A90 */ 0x00, 0x00, 0x00, 0xCD, 0x17, 0x02, 0x00, 0x00, 0x9F, 0x00, 0x12, 0x17, 0x9F, 0x01, 0x13, 0x17, -/* 00001AA0 */ 0x79, 0x17, 0x00, 0x04, 0x79, 0x0A, 0x00, 0x05, 0x09, 0x23, 0x00, 0x09, 0x1E, 0x00, 0x75, 0x05, -/* 00001AB0 */ 0x0D, 0x0C, 0xCB, 0x40, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA6, -/* 00001AC0 */ 0x17, 0x79, 0x17, 0x00, 0x04, 0x79, 0x05, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, -/* 00001AD0 */ 0x05, 0x50, 0x00, 0x40, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, -/* 00001AE0 */ 0x01, 0x00, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, -/* 00001AF0 */ 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x03, -/* 00001B00 */ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x10, -/* 00001B10 */ 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x6C, -/* 00001B20 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, -/* 00001B30 */ 0x01, 0x00, 0x00, 0x6C, 0x00, 0x00, 0x00, 0xFE, 0xE1, 0x02, 0xFE, 0x8A, 0x02, 0xFE, 0xED, 0x02, -/* 00001B40 */ 0xFE, 0xF0, 0x02, 0xFE, 0x83, 0x01, 0x6C, 0xFE, 0xEE, 0x02, 0xAE, 0xC1, 0xFE, 0x4E, 0x02, 0xFE, -/* 00001B50 */ 0xEF, 0x02, 0xFE, 0xEE, 0x02, 0xFE, 0xF0, 0x02, 0xFE, 0x1B, 0x0C, 0x15, 0x13, 0x00, 0x00, 0x00, -/* 00001B60 */ 0x03, 0x00, 0x1F, 0x00, 0x11, 0x00, 0x49, 0x00, 0x22, 0x00, 0x7D, 0x00, 0x07, 0x00, 0x2B, 0x00, -/* 00001B70 */ 0x0C, 0x00, 0x39, 0x00, 0x1D, 0x00, 0x56, 0x00, 0x07, 0x00, 0x33, 0x00, 0x50, 0x00, 0x65, 0x00, -/* 00001B80 */ 0x08, 0x00, 0x70, 0x00, 0x07, 0x00, 0x36, 0x00, 0x08, 0x00, 0x38, 0x00, 0x08, 0x00, 0x4F, 0x00, -/* 00001B90 */ 0x21, 0x00, 0x48, 0x00, 0x08, 0x00, 0x78, 0x00, 0x1B, 0x00, 0x63, 0x00, 0x03, 0x00, 0x34, 0x00, -/* 00001BA0 */ 0x09, 0x00, 0x39, 0x00, 0x28, 0x00, 0x8A, 0x00, 0x04, 0x00, 0x35, 0x00, 0x1C, 0x00, 0x5E, 0x00, -/* 00001BB0 */ 0x00, 0xBF, 0x1C, 0x08, 0xC0, 0x03, 0x80, 0x01, 0x00, 0x17, 0x3C, 0xA2, 0x41, 0xD1, 0x00, 0x02, -/* 00001BC0 */ 0xFE, 0xD6, 0x05, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0xD6, 0x05, 0xFE, 0xE9, 0x01, -/* 00001BD0 */ 0xFE, 0xE9, 0x01, 0x41, 0x05, 0x0A, 0x0D, 0x08, 0x14, 0x14, 0x01, 0x05, 0x05, 0x05, 0x05, 0x05, -/* 00001BE0 */ 0xFE, 0xCF, 0x02, 0x01, 0x04, 0x06, 0xFE, 0xED, 0x02, 0x06, 0xFE, 0xEE, 0x02, 0x06, 0xFE, 0xEF, -/* 00001BF0 */ 0x02, 0x06, 0xFE, 0xF0, 0x02, 0x01, 0x00, 0x0C, 0x4F, 0x59, 0x0D, 0xB2, 0x0C, 0x0D, 0x01, 0x49, -/* 00001C00 */ 0x01, 0x0E, 0x6B, 0x0D, 0x0E, 0x00, 0x07, 0x07, 0x00, 0x5A, 0x00, 0x0E, 0x5B, 0x01, 0x0C, 0x00, -/* 00001C10 */ 0x00, 0x5B, 0x02, 0x03, 0x00, 0x00, 0x5B, 0x03, 0x04, 0x00, 0x00, 0x5B, 0x04, 0x05, 0x00, 0x00, -/* 00001C20 */ 0x5B, 0x05, 0x06, 0x00, 0x00, 0x5B, 0x06, 0x07, 0x00, 0x00, 0xF2, 0x07, 0xFF, 0x0D, 0x00, 0x00, -/* 00001C30 */ 0x00, 0x00, 0x00, 0x00, 0x75, 0x0A, 0x0C, 0x01, 0x75, 0x08, 0x0C, 0x02, 0x75, 0x0B, 0x0C, 0x03, -/* 00001C40 */ 0x75, 0x09, 0x0C, 0x04, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x4F, 0x02, 0xFE, 0xED, 0x02, 0xFE, 0xEE, -/* 00001C50 */ 0x02, 0xFE, 0xEF, 0x02, 0xFE, 0xF0, 0x02, 0xFE, 0x19, 0x06, 0x06, 0x05, 0x00, 0x00, 0x00, 0x36, -/* 00001C60 */ 0x00, 0x82, 0x00, 0x04, 0x00, 0x28, 0x00, 0x04, 0x00, 0x22, 0x00, 0x04, 0x00, 0x29, 0x00, 0x06, -/* 00001C70 */ 0x00, 0xB0, 0x00, 0x00, 0x00}; - -} diff --git a/lib/Runtime/Library/JsBuiltIn/JsBuiltIn.js.nojit.bc.32b.h b/lib/Runtime/Library/JsBuiltIn/JsBuiltIn.js.nojit.bc.32b.h deleted file mode 100755 index 447be1266f0..00000000000 --- a/lib/Runtime/Library/JsBuiltIn/JsBuiltIn.js.nojit.bc.32b.h +++ /dev/null @@ -1,679 +0,0 @@ -//------------------------------------------------------------------------------------------------------- -// Copyright (C) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. -//------------------------------------------------------------------------------------------------------- -#if 0 -//------------------------------------------------------------------------------------------------------- -// Copyright (C) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. -//------------------------------------------------------------------------------------------------------- - -"use strict"; - -(function (intrinsic) { - var platform = intrinsic.JsBuiltIn; - - var setPrototype = platform.builtInSetPrototype; - var _objectDefineProperty = platform.builtInJavascriptObjectEntryDefineProperty; - var Symbol = platform.Symbol; - var CreateObject = platform.builtInJavascriptObjectCreate; - - let FunctionsEnum = { - ArrayValues: setPrototype({ className: "Array", methodName: "values", argumentsCount: 0, forceInline: true /*optional*/, alias: "Symbol.iterator" }, null), - ArrayKeys: setPrototype({ className: "Array", methodName: "keys", argumentsCount: 0, forceInline: true /*optional*/ }, null), - ArrayEntries: setPrototype({ className: "Array", methodName: "entries", argumentsCount: 0, forceInline: true /*optional*/ }, null), - ArrayIndexOf: setPrototype({ className: "Array", methodName: "indexOf", argumentsCount: 1, forceInline: true /*optional*/ }, null), - ArrayFilter: setPrototype({ className: "Array", methodName: "filter", argumentsCount: 1, forceInline: true /*optional*/ }, null), - }; - - platform.registerChakraLibraryFunction("ArrayIterator", function (arrayObj, iterationKind) { - "use strict"; - __chakraLibrary.InitInternalProperties(this, 4, "__$arrayObj$__", "__$nextIndex$__", "__$kind$__", "__$internalDone$__"); - this.__$arrayObj$__ = arrayObj; - this.__$nextIndex$__ = 0; - this.__$kind$__ = iterationKind; - this.__$internalDone$__ = false; // We use this additional property to enable hoisting load of arrayObj outside the loop, we write to this property instead of the arrayObj - }); - - // ArrayIterator's prototype is the C++ Iterator, which is also the prototype for StringIterator, MapIterator etc - var iteratorPrototype = platform.GetIteratorPrototype(); - // Establish prototype chain here - __chakraLibrary.ArrayIterator.prototype = CreateObject(iteratorPrototype); - __chakraLibrary.raiseNeedObjectOfType = platform.raiseNeedObjectOfType; - __chakraLibrary.raiseThis_NullOrUndefined = platform.raiseThis_NullOrUndefined; - __chakraLibrary.raiseFunctionArgument_NeedFunction = platform.raiseFunctionArgument_NeedFunction; - __chakraLibrary.callInstanceFunc = platform.builtInCallInstanceFunction; - __chakraLibrary.functionBind = platform.builtInJavascriptFunctionEntryBind; - - _objectDefineProperty(__chakraLibrary.ArrayIterator.prototype, 'next', - // Object's getter and setter can get overriden on the prototype, in that case while setting the value attributes, we will end up with TypeError - // So, we need to set the prototype of attributes to null - setPrototype({ - value: function () { - "use strict"; - let o = this; - - if (!(o instanceof __chakraLibrary.ArrayIterator)) { - __chakraLibrary.raiseNeedObjectOfType("Array Iterator.prototype.next", "Array Iterator"); - } - - let a = o.__$arrayObj$__; - - if (o.__$internalDone$__ === true) { - return { value: undefined, done: true }; - } else { - let index = o.__$nextIndex$__; - let len = __chakraLibrary.isArray(a) ? a.length : __chakraLibrary.GetLength(a); - - if (index < len) { // < comparison should happen instead of >= , because len can be NaN - let itemKind = o.__$kind$__; - - o.__$nextIndex$__ = index + 1; - - if (itemKind === 1 /*ArrayIterationKind.Value*/) { - return {value : a[index], done : false}; - } else if (itemKind === 0 /*ArrayIterationKind.Key*/) { // TODO (megupta) : Use clean enums here ? - return {value : index, done : false}; - } else { - let elementKey = index; - let elementValue = a[index]; - return {value : [elementKey, elementValue], done : false}; - } - } else { - o.__$internalDone$__ = true; - return { value : undefined, done : true}; - } - } - }, - writable: true, - enumerable: false, - configurable: true - }, null) - ); - - _objectDefineProperty(__chakraLibrary.ArrayIterator.prototype, Symbol.toStringTag, setPrototype({ value: "Array Iterator", writable: false, enumerable: false, configurable: true }, null)); - - _objectDefineProperty(__chakraLibrary.ArrayIterator.prototype.next, 'length', setPrototype({ value: 0, writable: false, enumerable: false, configurable: true }, null)); - - _objectDefineProperty(__chakraLibrary.ArrayIterator.prototype.next, 'name', setPrototype({ value: "next", writable: false, enumerable: false, configurable: true }, null)); - - platform.registerChakraLibraryFunction("CreateArrayIterator", function (arrayObj, iterationKind) { - "use strict"; - return new __chakraLibrary.ArrayIterator(arrayObj, iterationKind); - }); - - platform.registerFunction(FunctionsEnum.ArrayKeys, function () { - "use strict"; - if (this === null || this === undefined) { - __chakraLibrary.raiseThis_NullOrUndefined("Array.prototype.keys"); - } - let o = __chakraLibrary.Object(this); - return __chakraLibrary.CreateArrayIterator(o, 0 /* ArrayIterationKind.Key*/); - }); - - platform.registerFunction(FunctionsEnum.ArrayValues, function () { - "use strict"; - if (this === null || this === undefined) { - __chakraLibrary.raiseThis_NullOrUndefined("Array.prototype.values"); - } - let o = __chakraLibrary.Object(this); - return __chakraLibrary.CreateArrayIterator(o, 1 /* ArrayIterationKind.Value*/); - }); - - platform.registerFunction(FunctionsEnum.ArrayEntries, function () { - "use strict"; - if (this === null || this === undefined) { - __chakraLibrary.raiseThis_NullOrUndefined("Array.prototype.entries"); - } - let o = __chakraLibrary.Object(this); - return __chakraLibrary.CreateArrayIterator(o, 2 /* ArrayIterationKind.KeyAndValue*/); - }); - - platform.registerFunction(FunctionsEnum.ArrayIndexOf, function (searchElement, fromIndex) { - // ECMAScript 2017 #sec-array.prototype.indexof - "use strict"; - - if (this === null || this === undefined) { - __chakraLibrary.raiseThis_NullOrUndefined("Array.prototype.indexOf"); - } - - let o; - if (__chakraLibrary.isArray(this)) { - o = this; - } else { - o = __chakraLibrary.Object(this); - } - - let len = __chakraLibrary.toLength(o["length"]); - if (len === 0) { - return -1; - } - - let n = __chakraLibrary.toInteger(fromIndex); - if (n >= len) { - return -1; - } - - let k; - - /* We refactored the code but it still respect the spec. - When using -0 or +0, the engine might think we are meaning - to use floating point numbers which can hurt performance. - So we refactored to use integers instead. */ - if (n === 0) { // Corresponds to "If n is -0, let k be +0" in the spec - k = 0; - } else if (n > 0) { // Corresponds to "If n >= 0, then [...] let k be n." - k = n; - } else { // Corresponds to "Else n < 0" - k = len + n; - - if (k < 0) { - k = 0; - } - } - - while (k < len) { - if (k in o) { - let elementK = o[k]; - - if (elementK === searchElement) { - return k; - } - } - - k++; - } - - return -1; - }); - - platform.registerFunction(FunctionsEnum.ArrayFilter, function (callbackfn, thisArg) { - // ECMAScript 2017 #sec-array.prototype.filter - "use strict"; - - if (this === null || this === undefined) { - __chakraLibrary.raiseThis_NullOrUndefined("Array.prototype.filter"); - } - - let o; - let len - if (__chakraLibrary.isArray(this)) { - o = this; - len = o.length; - } else { - o = __chakraLibrary.Object(this); - len = __chakraLibrary.GetLength(o); - } - - if (typeof callbackfn != "function") { - __chakraLibrary.raiseFunctionArgument_NeedFunction("Array.prototype.filter"); - } - - let a = __chakraLibrary.arraySpeciesCreate(o, 0); - let k = 0; - let to = 0; - - if (thisArg === undefined) { - // fast path. - while (k < len) { - if (k in o) { - let kValue = o[k]; - if (callbackfn(kValue, k, o)) { - __chakraLibrary.arrayCreateDataPropertyOrThrow(a, to, kValue); - to++; - } - } - k++; - } - } else { - // slow path. - // safe equivalent of calling "callbackfn.bind(thisArg)" - let boundCallback = __chakraLibrary.callInstanceFunc(__chakraLibrary.functionBind, callbackfn, thisArg); - while (k < len) { - if (k in o) { - let kValue = o[k]; - if (boundCallback(kValue, k, o)) { - __chakraLibrary.arrayCreateDataPropertyOrThrow(a, to, kValue); - to++; - } - } - k++; - } - } - - return a; - }); - -}); - -#endif -namespace Js -{ - const char Library_Bytecode_JsBuiltIn[] = { -/* 00000000 */ 0x43, 0x68, 0x42, 0x63, 0x8B, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 00000010 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0xFE, 0xCE, 0x02, 0x00, 0xFE, -/* 00000020 */ 0x72, 0x27, 0xFE, 0x72, 0x27, 0x35, 0x00, 0x00, 0x00, 0x5C, 0x05, 0x00, 0x00, 0x2A, 0x09, 0x00, -/* 00000030 */ 0x00, 0x8A, 0x1A, 0x00, 0x00, 0x2B, 0x12, 0x01, 0x00, 0x00, 0x00, 0x2A, 0x01, 0x00, 0x00, 0x00, -/* 00000040 */ 0x40, 0x01, 0x00, 0x00, 0x01, 0x58, 0x01, 0x00, 0x00, 0x00, 0x6C, 0x01, 0x00, 0x00, 0x00, 0x78, -/* 00000050 */ 0x01, 0x00, 0x00, 0x00, 0x8E, 0x01, 0x00, 0x00, 0x00, 0x9C, 0x01, 0x00, 0x00, 0x00, 0xBA, 0x01, -/* 00000060 */ 0x00, 0x00, 0x00, 0xD2, 0x01, 0x00, 0x00, 0x00, 0xDE, 0x01, 0x00, 0x00, 0x00, 0xFE, 0x01, 0x00, -/* 00000070 */ 0x00, 0x01, 0x12, 0x02, 0x00, 0x00, 0x00, 0x1C, 0x02, 0x00, 0x00, 0x01, 0x36, 0x02, 0x00, 0x00, -/* 00000080 */ 0x00, 0x46, 0x02, 0x00, 0x00, 0x01, 0x60, 0x02, 0x00, 0x00, 0x00, 0x70, 0x02, 0x00, 0x00, 0x01, -/* 00000090 */ 0x88, 0x02, 0x00, 0x00, 0x00, 0x96, 0x02, 0x00, 0x00, 0x01, 0xB2, 0x02, 0x00, 0x00, 0x00, 0xBC, -/* 000000A0 */ 0x02, 0x00, 0x00, 0x00, 0xC8, 0x02, 0x00, 0x00, 0x00, 0xDA, 0x02, 0x00, 0x00, 0x00, 0xF0, 0x02, -/* 000000B0 */ 0x00, 0x00, 0x00, 0x0A, 0x03, 0x00, 0x00, 0x00, 0x28, 0x03, 0x00, 0x00, 0x00, 0x36, 0x03, 0x00, -/* 000000C0 */ 0x00, 0x00, 0x40, 0x03, 0x00, 0x00, 0x01, 0x68, 0x03, 0x00, 0x00, 0x01, 0x8A, 0x03, 0x00, 0x00, -/* 000000D0 */ 0x01, 0xA4, 0x03, 0x00, 0x00, 0x01, 0xC2, 0x03, 0x00, 0x00, 0x01, 0xE2, 0x03, 0x00, 0x00, 0x01, -/* 000000E0 */ 0xF8, 0x03, 0x00, 0x00, 0x01, 0x1E, 0x04, 0x00, 0x00, 0x00, 0x5A, 0x04, 0x00, 0x00, 0x00, 0x64, -/* 000000F0 */ 0x04, 0x00, 0x00, 0x00, 0x8E, 0x04, 0x00, 0x00, 0x00, 0xBC, 0x04, 0x00, 0x00, 0x00, 0xEC, 0x04, -/* 00000100 */ 0x00, 0x00, 0x00, 0x1C, 0x05, 0x00, 0x00, 0x00, 0x4A, 0x05, 0x00, 0x00, 0x00, 0x5C, 0x05, 0x00, -/* 00000110 */ 0x00, 0x00, 0x47, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x62, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x20, 0x00, -/* 00000120 */ 0x63, 0x00, 0x6F, 0x00, 0x64, 0x00, 0x65, 0x00, 0x00, 0x00, 0x75, 0x00, 0x73, 0x00, 0x65, 0x00, -/* 00000130 */ 0x20, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x63, 0x00, 0x74, 0x00, 0x00, 0x00, -/* 00000140 */ 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x56, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00000150 */ 0x75, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x73, 0x00, -/* 00000160 */ 0x73, 0x00, 0x4E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, -/* 00000170 */ 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x74, 0x00, 0x68, 0x00, -/* 00000180 */ 0x6F, 0x00, 0x64, 0x00, 0x4E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x76, 0x00, -/* 00000190 */ 0x61, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x61, 0x00, 0x72, 0x00, -/* 000001A0 */ 0x67, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x73, 0x00, 0x43, 0x00, -/* 000001B0 */ 0x6F, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x00, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, -/* 000001C0 */ 0x63, 0x00, 0x65, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x65, 0x00, -/* 000001D0 */ 0x00, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x61, 0x00, 0x73, 0x00, 0x00, 0x00, 0x53, 0x00, -/* 000001E0 */ 0x79, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x69, 0x00, 0x74, 0x00, -/* 000001F0 */ 0x65, 0x00, 0x72, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x41, 0x00, -/* 00000200 */ 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x4B, 0x00, 0x65, 0x00, 0x79, 0x00, 0x73, 0x00, -/* 00000210 */ 0x00, 0x00, 0x6B, 0x00, 0x65, 0x00, 0x79, 0x00, 0x73, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, -/* 00000220 */ 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x45, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, -/* 00000230 */ 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, -/* 00000240 */ 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, -/* 00000250 */ 0x49, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x65, 0x00, 0x78, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, -/* 00000260 */ 0x69, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x65, 0x00, 0x78, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, -/* 00000270 */ 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x46, 0x00, 0x69, 0x00, 0x6C, 0x00, -/* 00000280 */ 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x66, 0x00, 0x69, 0x00, 0x6C, 0x00, 0x74, 0x00, -/* 00000290 */ 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, -/* 000002A0 */ 0x49, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, -/* 000002B0 */ 0x00, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x78, 0x00, 0x74, 0x00, 0x00, 0x00, 0x76, 0x00, 0x61, 0x00, -/* 000002C0 */ 0x6C, 0x00, 0x75, 0x00, 0x65, 0x00, 0x00, 0x00, 0x77, 0x00, 0x72, 0x00, 0x69, 0x00, 0x74, 0x00, -/* 000002D0 */ 0x61, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x75, 0x00, -/* 000002E0 */ 0x6D, 0x00, 0x65, 0x00, 0x72, 0x00, 0x61, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 000002F0 */ 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x66, 0x00, 0x69, 0x00, 0x67, 0x00, 0x75, 0x00, 0x72, 0x00, -/* 00000300 */ 0x61, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, -/* 00000310 */ 0x61, 0x00, 0x79, 0x00, 0x20, 0x00, 0x49, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x61, 0x00, -/* 00000320 */ 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x67, 0x00, -/* 00000330 */ 0x74, 0x00, 0x68, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 00000340 */ 0x43, 0x00, 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x41, 0x00, 0x72, 0x00, -/* 00000350 */ 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x49, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x61, 0x00, -/* 00000360 */ 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x6C, 0x00, -/* 00000370 */ 0x49, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, -/* 00000380 */ 0x46, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x00, 0x00, 0x66, 0x00, 0x75, 0x00, 0x6E, 0x00, -/* 00000390 */ 0x63, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x42, 0x00, 0x69, 0x00, 0x6E, 0x00, -/* 000003A0 */ 0x64, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x24, 0x00, 0x61, 0x00, 0x72, 0x00, 0x72, 0x00, -/* 000003B0 */ 0x61, 0x00, 0x79, 0x00, 0x4F, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x24, 0x00, 0x5F, 0x00, 0x5F, 0x00, -/* 000003C0 */ 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x24, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x78, 0x00, 0x74, 0x00, -/* 000003D0 */ 0x49, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x65, 0x00, 0x78, 0x00, 0x24, 0x00, 0x5F, 0x00, 0x5F, 0x00, -/* 000003E0 */ 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x24, 0x00, 0x6B, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x64, 0x00, -/* 000003F0 */ 0x24, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x24, 0x00, 0x69, 0x00, -/* 00000400 */ 0x6E, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x44, 0x00, -/* 00000410 */ 0x6F, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x24, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x41, 0x00, -/* 00000420 */ 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x20, 0x00, 0x49, 0x00, 0x74, 0x00, 0x65, 0x00, -/* 00000430 */ 0x72, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, -/* 00000440 */ 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, -/* 00000450 */ 0x6E, 0x00, 0x65, 0x00, 0x78, 0x00, 0x74, 0x00, 0x00, 0x00, 0x64, 0x00, 0x6F, 0x00, 0x6E, 0x00, -/* 00000460 */ 0x65, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x2E, 0x00, -/* 00000470 */ 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, -/* 00000480 */ 0x65, 0x00, 0x2E, 0x00, 0x6B, 0x00, 0x65, 0x00, 0x79, 0x00, 0x73, 0x00, 0x00, 0x00, 0x41, 0x00, -/* 00000490 */ 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, -/* 000004A0 */ 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x76, 0x00, -/* 000004B0 */ 0x61, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, -/* 000004C0 */ 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, -/* 000004D0 */ 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x65, 0x00, 0x6E, 0x00, -/* 000004E0 */ 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, -/* 000004F0 */ 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, -/* 00000500 */ 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x69, 0x00, 0x6E, 0x00, -/* 00000510 */ 0x64, 0x00, 0x65, 0x00, 0x78, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, -/* 00000520 */ 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, -/* 00000530 */ 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x69, 0x00, -/* 00000540 */ 0x6C, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x66, 0x00, 0x75, 0x00, 0x6E, 0x00, -/* 00000550 */ 0x63, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0xF3, 0x00, 0x00, 0x00, -/* 00000560 */ 0x00, 0x6A, 0x00, 0x00, 0x00, 0x9B, 0x00, 0x00, 0x00, 0x05, 0x01, 0x00, 0x00, 0x6F, 0x01, 0x00, -/* 00000570 */ 0x00, 0x70, 0x01, 0x00, 0x00, 0x7E, 0x01, 0x00, 0x00, 0x7F, 0x01, 0x00, 0x00, 0x97, 0x01, 0x00, -/* 00000580 */ 0x00, 0xBF, 0x01, 0x00, 0x00, 0xC0, 0x01, 0x00, 0x00, 0xF5, 0x01, 0x00, 0x00, 0x4A, 0x02, 0x00, -/* 00000590 */ 0x00, 0x6C, 0x02, 0x00, 0x00, 0xAB, 0x02, 0x00, 0x00, 0xAC, 0x02, 0x00, 0x00, 0xC6, 0x02, 0x00, -/* 000005A0 */ 0x00, 0x6A, 0x03, 0x00, 0x00, 0xF0, 0x03, 0x00, 0x00, 0x7C, 0x04, 0x00, 0x00, 0x08, 0x05, 0x00, -/* 000005B0 */ 0x00, 0x92, 0x05, 0x00, 0x00, 0x99, 0x05, 0x00, 0x00, 0x9A, 0x05, 0x00, 0x00, 0xFB, 0x05, 0x00, -/* 000005C0 */ 0x00, 0x11, 0x06, 0x00, 0x00, 0x93, 0x06, 0x00, 0x00, 0xBB, 0x06, 0x00, 0x00, 0xDD, 0x06, 0x00, -/* 000005D0 */ 0x00, 0x06, 0x07, 0x00, 0x00, 0xBA, 0x07, 0x00, 0x00, 0xC2, 0x07, 0x00, 0x00, 0xC3, 0x07, 0x00, -/* 000005E0 */ 0x00, 0x39, 0x08, 0x00, 0x00, 0x76, 0x08, 0x00, 0x00, 0x9C, 0x08, 0x00, 0x00, 0xEB, 0x08, 0x00, -/* 000005F0 */ 0x00, 0x37, 0x09, 0x00, 0x00, 0x8B, 0x09, 0x00, 0x00, 0xF1, 0x09, 0x00, 0x00, 0x3E, 0x0A, 0x00, -/* 00000600 */ 0x00, 0x8E, 0x0A, 0x00, 0x00, 0x8F, 0x0A, 0x00, 0x00, 0xDA, 0x0A, 0x00, 0x00, 0x73, 0x0B, 0x00, -/* 00000610 */ 0x00, 0xB5, 0x0B, 0x00, 0x00, 0xCC, 0x0B, 0x00, 0x00, 0xED, 0x0B, 0x00, 0x00, 0x0B, 0x0C, 0x00, -/* 00000620 */ 0x00, 0x29, 0x0C, 0x00, 0x00, 0x2A, 0x0C, 0x00, 0x00, 0x6F, 0x0C, 0x00, 0x00, 0xDD, 0x0C, 0x00, -/* 00000630 */ 0x00, 0xEF, 0x0C, 0x00, 0x00, 0xF0, 0x0C, 0x00, 0x00, 0x1A, 0x0D, 0x00, 0x00, 0x1B, 0x0D, 0x00, -/* 00000640 */ 0x00, 0x50, 0x0D, 0x00, 0x00, 0x8D, 0x0D, 0x00, 0x00, 0xA6, 0x0D, 0x00, 0x00, 0xD9, 0x0D, 0x00, -/* 00000650 */ 0x00, 0x3D, 0x0E, 0x00, 0x00, 0x3E, 0x0E, 0x00, 0x00, 0xAA, 0x0E, 0x00, 0x00, 0xDF, 0x0E, 0x00, -/* 00000660 */ 0x00, 0xE0, 0x0E, 0x00, 0x00, 0x17, 0x0F, 0x00, 0x00, 0x18, 0x0F, 0x00, 0x00, 0x63, 0x0F, 0x00, -/* 00000670 */ 0x00, 0xA8, 0x0F, 0x00, 0x00, 0x23, 0x10, 0x00, 0x00, 0x65, 0x10, 0x00, 0x00, 0x86, 0x10, 0x00, -/* 00000680 */ 0x00, 0xBA, 0x10, 0x00, 0x00, 0xF3, 0x10, 0x00, 0x00, 0x4A, 0x11, 0x00, 0x00, 0x64, 0x11, 0x00, -/* 00000690 */ 0x00, 0x81, 0x11, 0x00, 0x00, 0xB6, 0x11, 0x00, 0x00, 0xF8, 0x11, 0x00, 0x00, 0x0E, 0x12, 0x00, -/* 000006A0 */ 0x00, 0x20, 0x12, 0x00, 0x00, 0x2F, 0x12, 0x00, 0x00, 0x4B, 0x12, 0x00, 0x00, 0x6A, 0x12, 0x00, -/* 000006B0 */ 0x00, 0x89, 0x12, 0x00, 0x00, 0x9A, 0x12, 0x00, 0x00, 0xA1, 0x12, 0x00, 0x00, 0xA2, 0x12, 0x00, -/* 000006C0 */ 0x00, 0x63, 0x13, 0x00, 0x00, 0x64, 0x13, 0x00, 0x00, 0x11, 0x14, 0x00, 0x00, 0x12, 0x14, 0x00, -/* 000006D0 */ 0x00, 0xC2, 0x14, 0x00, 0x00, 0xC3, 0x14, 0x00, 0x00, 0x2A, 0x15, 0x00, 0x00, 0x40, 0x15, 0x00, -/* 000006E0 */ 0x00, 0x8B, 0x15, 0x00, 0x00, 0x93, 0x15, 0x00, 0x00, 0x94, 0x15, 0x00, 0x00, 0xD9, 0x15, 0x00, -/* 000006F0 */ 0x00, 0xEF, 0x15, 0x00, 0x00, 0x22, 0x16, 0x00, 0x00, 0x71, 0x16, 0x00, 0x00, 0x7B, 0x16, 0x00, -/* 00000700 */ 0x00, 0xA9, 0x16, 0x00, 0x00, 0xFF, 0x16, 0x00, 0x00, 0x07, 0x17, 0x00, 0x00, 0x08, 0x17, 0x00, -/* 00000710 */ 0x00, 0x4F, 0x17, 0x00, 0x00, 0x65, 0x17, 0x00, 0x00, 0x98, 0x17, 0x00, 0x00, 0xE9, 0x17, 0x00, -/* 00000720 */ 0x00, 0xF3, 0x17, 0x00, 0x00, 0x21, 0x18, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x81, 0x18, 0x00, -/* 00000730 */ 0x00, 0x82, 0x18, 0x00, 0x00, 0xCA, 0x18, 0x00, 0x00, 0xE0, 0x18, 0x00, 0x00, 0x13, 0x19, 0x00, -/* 00000740 */ 0x00, 0x65, 0x19, 0x00, 0x00, 0x6F, 0x19, 0x00, 0x00, 0x9D, 0x19, 0x00, 0x00, 0xFB, 0x19, 0x00, -/* 00000750 */ 0x00, 0x03, 0x1A, 0x00, 0x00, 0x04, 0x1A, 0x00, 0x00, 0x64, 0x1A, 0x00, 0x00, 0x9C, 0x1A, 0x00, -/* 00000760 */ 0x00, 0xB2, 0x1A, 0x00, 0x00, 0xB3, 0x1A, 0x00, 0x00, 0xE6, 0x1A, 0x00, 0x00, 0x38, 0x1B, 0x00, -/* 00000770 */ 0x00, 0x42, 0x1B, 0x00, 0x00, 0x43, 0x1B, 0x00, 0x00, 0x52, 0x1B, 0x00, 0x00, 0x7F, 0x1B, 0x00, -/* 00000780 */ 0x00, 0x95, 0x1B, 0x00, 0x00, 0xA6, 0x1B, 0x00, 0x00, 0xD4, 0x1B, 0x00, 0x00, 0xDE, 0x1B, 0x00, -/* 00000790 */ 0x00, 0xDF, 0x1B, 0x00, 0x00, 0x18, 0x1C, 0x00, 0x00, 0x31, 0x1C, 0x00, 0x00, 0x48, 0x1C, 0x00, -/* 000007A0 */ 0x00, 0x52, 0x1C, 0x00, 0x00, 0x53, 0x1C, 0x00, 0x00, 0x89, 0x1C, 0x00, 0x00, 0xA1, 0x1C, 0x00, -/* 000007B0 */ 0x00, 0xB8, 0x1C, 0x00, 0x00, 0xC2, 0x1C, 0x00, 0x00, 0xC3, 0x1C, 0x00, 0x00, 0xD2, 0x1C, 0x00, -/* 000007C0 */ 0x00, 0xD3, 0x1C, 0x00, 0x00, 0x14, 0x1D, 0x00, 0x00, 0x5A, 0x1D, 0x00, 0x00, 0x9F, 0x1D, 0x00, -/* 000007D0 */ 0x00, 0xD7, 0x1D, 0x00, 0x00, 0x2B, 0x1E, 0x00, 0x00, 0x3E, 0x1E, 0x00, 0x00, 0x90, 0x1E, 0x00, -/* 000007E0 */ 0x00, 0xA3, 0x1E, 0x00, 0x00, 0xDE, 0x1E, 0x00, 0x00, 0xF7, 0x1E, 0x00, 0x00, 0xF8, 0x1E, 0x00, -/* 000007F0 */ 0x00, 0x11, 0x1F, 0x00, 0x00, 0x28, 0x1F, 0x00, 0x00, 0x36, 0x1F, 0x00, 0x00, 0x40, 0x1F, 0x00, -/* 00000800 */ 0x00, 0x41, 0x1F, 0x00, 0x00, 0x5B, 0x1F, 0x00, 0x00, 0x75, 0x1F, 0x00, 0x00, 0x9A, 0x1F, 0x00, -/* 00000810 */ 0x00, 0x9B, 0x1F, 0x00, 0x00, 0xCD, 0x1F, 0x00, 0x00, 0xEB, 0x1F, 0x00, 0x00, 0xFD, 0x1F, 0x00, -/* 00000820 */ 0x00, 0x0B, 0x20, 0x00, 0x00, 0x0C, 0x20, 0x00, 0x00, 0x1D, 0x20, 0x00, 0x00, 0x27, 0x20, 0x00, -/* 00000830 */ 0x00, 0x28, 0x20, 0x00, 0x00, 0x3B, 0x20, 0x00, 0x00, 0x43, 0x20, 0x00, 0x00, 0x44, 0x20, 0x00, -/* 00000840 */ 0x00, 0x9E, 0x20, 0x00, 0x00, 0xD5, 0x20, 0x00, 0x00, 0xEB, 0x20, 0x00, 0x00, 0xEC, 0x20, 0x00, -/* 00000850 */ 0x00, 0x1F, 0x21, 0x00, 0x00, 0x70, 0x21, 0x00, 0x00, 0x7A, 0x21, 0x00, 0x00, 0x7B, 0x21, 0x00, -/* 00000860 */ 0x00, 0x8A, 0x21, 0x00, 0x00, 0x9A, 0x21, 0x00, 0x00, 0xC7, 0x21, 0x00, 0x00, 0xDD, 0x21, 0x00, -/* 00000870 */ 0x00, 0xF9, 0x21, 0x00, 0x00, 0x0A, 0x22, 0x00, 0x00, 0x38, 0x22, 0x00, 0x00, 0x68, 0x22, 0x00, -/* 00000880 */ 0x00, 0x72, 0x22, 0x00, 0x00, 0x7B, 0x22, 0x00, 0x00, 0xAA, 0x22, 0x00, 0x00, 0x04, 0x23, 0x00, -/* 00000890 */ 0x00, 0x0E, 0x23, 0x00, 0x00, 0x0F, 0x23, 0x00, 0x00, 0x49, 0x23, 0x00, 0x00, 0x5C, 0x23, 0x00, -/* 000008A0 */ 0x00, 0x70, 0x23, 0x00, 0x00, 0x71, 0x23, 0x00, 0x00, 0x96, 0x23, 0x00, 0x00, 0xB0, 0x23, 0x00, -/* 000008B0 */ 0x00, 0xCE, 0x23, 0x00, 0x00, 0xEC, 0x23, 0x00, 0x00, 0x13, 0x24, 0x00, 0x00, 0x47, 0x24, 0x00, -/* 000008C0 */ 0x00, 0x9E, 0x24, 0x00, 0x00, 0xBC, 0x24, 0x00, 0x00, 0xD2, 0x24, 0x00, 0x00, 0xE4, 0x24, 0x00, -/* 000008D0 */ 0x00, 0xF9, 0x24, 0x00, 0x00, 0x07, 0x25, 0x00, 0x00, 0x18, 0x25, 0x00, 0x00, 0x32, 0x25, 0x00, -/* 000008E0 */ 0x00, 0x77, 0x25, 0x00, 0x00, 0xEC, 0x25, 0x00, 0x00, 0x0A, 0x26, 0x00, 0x00, 0x28, 0x26, 0x00, -/* 000008F0 */ 0x00, 0x4F, 0x26, 0x00, 0x00, 0x86, 0x26, 0x00, 0x00, 0xDD, 0x26, 0x00, 0x00, 0xFB, 0x26, 0x00, -/* 00000900 */ 0x00, 0x11, 0x27, 0x00, 0x00, 0x23, 0x27, 0x00, 0x00, 0x38, 0x27, 0x00, 0x00, 0x46, 0x27, 0x00, -/* 00000910 */ 0x00, 0x50, 0x27, 0x00, 0x00, 0x51, 0x27, 0x00, 0x00, 0x63, 0x27, 0x00, 0x00, 0x6B, 0x27, 0x00, -/* 00000920 */ 0x00, 0x6E, 0x27, 0x00, 0x00, 0x72, 0x27, 0x00, 0x00, 0x00, 0x0A, 0xB9, 0x0C, 0x00, 0x00, 0x00, -/* 00000930 */ 0x08, 0x04, 0x00, 0xA8, 0x41, 0xC0, 0x00, 0xFE, 0xCE, 0x02, 0x00, 0xFE, 0x70, 0x01, 0x01, 0xFF, -/* 00000940 */ 0x00, 0x10, 0x01, 0x00, 0xFE, 0x70, 0x01, 0xFE, 0x02, 0x26, 0xFE, 0x02, 0x26, 0x40, 0x01, 0x04, -/* 00000950 */ 0x04, 0x05, 0x05, 0x03, 0x05, 0xFE, 0xCF, 0x02, 0x0A, 0x09, 0xA6, 0x00, 0xD3, 0x00, 0x04, 0xFA, -/* 00000960 */ 0x04, 0x24, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00, 0x6E, 0x09, 0x00, 0x00, 0xBF, 0x1C, -/* 00000970 */ 0x00, 0xC0, 0x13, 0x88, 0x25, 0x00, 0x07, 0x01, 0xA2, 0x41, 0xD1, 0x00, 0x01, 0xFE, 0x80, 0x01, -/* 00000980 */ 0x08, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x80, 0x01, 0xFE, 0xEF, 0x25, 0xFE, 0xEF, -/* 00000990 */ 0x25, 0x40, 0x0D, 0x23, 0x2C, 0x09, 0xFB, 0xE2, 0x2B, 0x2B, 0x2B, 0x2B, 0x0A, 0x2B, 0x08, 0x06, -/* 000009A0 */ 0xFE, 0xD0, 0x02, 0x06, 0xFE, 0xD1, 0x02, 0x06, 0xFE, 0xD2, 0x02, 0x06, 0xFE, 0xD3, 0x02, 0x06, -/* 000009B0 */ 0xFE, 0xD4, 0x02, 0x06, 0xFE, 0xD5, 0x02, 0x01, 0x00, 0x06, 0xFE, 0xD6, 0x02, 0x0B, 0x06, 0xFE, -/* 000009C0 */ 0xD7, 0x02, 0x05, 0xFE, 0xD8, 0x02, 0x07, 0x06, 0xFE, 0xD9, 0x02, 0x06, 0xFE, 0xDA, 0x02, 0x06, -/* 000009D0 */ 0xFE, 0xDB, 0x02, 0x06, 0xFE, 0xDC, 0x02, 0x06, 0xFE, 0xDD, 0x02, 0x06, 0xFE, 0xDE, 0x02, 0x01, -/* 000009E0 */ 0x01, 0x06, 0xFE, 0xDF, 0x02, 0x06, 0xFE, 0xE0, 0x02, 0x06, 0xFE, 0xE1, 0x02, 0x06, 0xFE, 0xE2, -/* 000009F0 */ 0x02, 0x06, 0xFE, 0xE3, 0x02, 0x06, 0xFE, 0xE4, 0x02, 0x06, 0xFE, 0xE5, 0x02, 0x0C, 0x06, 0xFE, -/* 00000A00 */ 0xE6, 0x02, 0x05, 0xFE, 0xE7, 0x02, 0x06, 0xFE, 0xE8, 0x02, 0x06, 0xFE, 0xE9, 0x02, 0x06, 0xFE, -/* 00000A10 */ 0xEA, 0x02, 0xFE, 0xC3, 0x03, 0x4F, 0x29, 0x5F, 0x2C, 0x23, 0x00, 0x47, 0x24, 0x2C, 0x5F, 0x2C, -/* 00000A20 */ 0x24, 0x01, 0x47, 0x25, 0x2C, 0x5F, 0x2C, 0x24, 0x02, 0x47, 0x26, 0x2C, 0x5F, 0x2C, 0x24, 0x03, -/* 00000A30 */ 0x47, 0x27, 0x2C, 0x5F, 0x2C, 0x24, 0x04, 0x47, 0x28, 0x2C, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 00000A40 */ 0x00, 0x00, 0x00, 0x2C, 0x00, 0x00, 0x00, 0x47, 0x2D, 0x25, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, -/* 00000A50 */ 0xCB, 0x1C, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x00, 0x00, 0x78, 0x05, 0x2E, -/* 00000A60 */ 0x05, 0x78, 0x07, 0x2E, 0x06, 0x78, 0x09, 0x2E, 0x07, 0x78, 0x0B, 0x2E, 0x08, 0x78, 0x0D, 0x2E, -/* 00000A70 */ 0x09, 0x5A, 0x01, 0x2E, 0x5A, 0x02, 0x0E, 0x1F, 0x03, 0x2D, 0x2D, 0x78, 0x2D, 0x2C, 0x0A, 0x47, -/* 00000A80 */ 0x2D, 0x25, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0x38, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, -/* 00000A90 */ 0x00, 0x2E, 0x00, 0x00, 0x00, 0x78, 0x05, 0x2E, 0x05, 0x78, 0x10, 0x2E, 0x06, 0x78, 0x09, 0x2E, -/* 00000AA0 */ 0x07, 0x78, 0x0B, 0x2E, 0x08, 0x5A, 0x01, 0x2E, 0x5A, 0x02, 0x0E, 0x1F, 0x03, 0x2D, 0x2D, 0x78, -/* 00000AB0 */ 0x2D, 0x2C, 0x0B, 0x47, 0x2D, 0x25, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0x50, 0x00, 0x00, -/* 00000AC0 */ 0x00, 0x03, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x00, 0x00, 0x78, 0x05, 0x2E, 0x05, 0x78, 0x12, 0x2E, -/* 00000AD0 */ 0x06, 0x78, 0x09, 0x2E, 0x07, 0x78, 0x0B, 0x2E, 0x08, 0x5A, 0x01, 0x2E, 0x5A, 0x02, 0x0E, 0x1F, -/* 00000AE0 */ 0x03, 0x2D, 0x2D, 0x78, 0x2D, 0x2C, 0x0C, 0x47, 0x2D, 0x25, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, -/* 00000AF0 */ 0xCB, 0x68, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x00, 0x00, 0x78, 0x05, 0x2E, -/* 00000B00 */ 0x05, 0x78, 0x14, 0x2E, 0x06, 0x78, 0x15, 0x2E, 0x07, 0x78, 0x0B, 0x2E, 0x08, 0x5A, 0x01, 0x2E, -/* 00000B10 */ 0x5A, 0x02, 0x0E, 0x1F, 0x03, 0x2D, 0x2D, 0x78, 0x2D, 0x2C, 0x0D, 0x47, 0x2D, 0x25, 0x07, 0x03, -/* 00000B20 */ 0x00, 0x5A, 0x00, 0x02, 0xCB, 0x80, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x00, -/* 00000B30 */ 0x00, 0x78, 0x05, 0x2E, 0x05, 0x78, 0x17, 0x2E, 0x06, 0x78, 0x15, 0x2E, 0x07, 0x78, 0x0B, 0x2E, -/* 00000B40 */ 0x08, 0x5A, 0x01, 0x2E, 0x5A, 0x02, 0x0E, 0x1F, 0x03, 0x2D, 0x2D, 0x78, 0x2D, 0x2C, 0x0E, 0x47, -/* 00000B50 */ 0x29, 0x2C, 0x6A, 0x2C, 0x24, 0x0F, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x24, 0x5A, 0x01, 0x18, 0xD3, -/* 00000B60 */ 0x00, 0x2D, 0x5A, 0x02, 0x2D, 0x1F, 0x03, 0xFF, 0x2C, 0x6A, 0x2C, 0x24, 0x10, 0x07, 0x01, 0x00, -/* 00000B70 */ 0x5A, 0x00, 0x24, 0x1F, 0x01, 0x2C, 0x2C, 0x47, 0x2A, 0x2C, 0x01, 0x49, 0x01, 0x2C, 0x5F, 0x2C, -/* 00000B80 */ 0x2C, 0x11, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x2A, 0x1F, 0x02, 0x2D, 0x28, 0x74, -/* 00000B90 */ 0x2D, 0x2C, 0x12, 0x01, 0x49, 0x01, 0x2C, 0x5F, 0x2D, 0x24, 0x13, 0x74, 0x2D, 0x2C, 0x14, 0x01, -/* 00000BA0 */ 0x49, 0x01, 0x2C, 0x5F, 0x2D, 0x24, 0x15, 0x74, 0x2D, 0x2C, 0x16, 0x01, 0x49, 0x01, 0x2C, 0x5F, -/* 00000BB0 */ 0x2D, 0x24, 0x17, 0x74, 0x2D, 0x2C, 0x18, 0x01, 0x49, 0x01, 0x2C, 0x5F, 0x2D, 0x24, 0x19, 0x74, -/* 00000BC0 */ 0x2D, 0x2C, 0x1A, 0x01, 0x49, 0x01, 0x2C, 0x5F, 0x2D, 0x24, 0x1B, 0x74, 0x2D, 0x2C, 0x1C, 0x47, -/* 00000BD0 */ 0x2C, 0x26, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x01, 0x49, 0x01, 0x2D, 0x5F, 0x2D, 0x2D, 0x1D, -/* 00000BE0 */ 0x5F, 0x2D, 0x2D, 0x1E, 0x5A, 0x01, 0x2D, 0x5A, 0x02, 0x19, 0x47, 0x2D, 0x25, 0x07, 0x03, 0x00, -/* 00000BF0 */ 0x5A, 0x00, 0x02, 0xCB, 0x98, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x00, 0x00, -/* 00000C00 */ 0xD6, 0x01, 0x2F, 0x2E, 0x78, 0x2F, 0x2E, 0x1F, 0x78, 0x0B, 0x2E, 0x20, 0x78, 0x1D, 0x2E, 0x21, -/* 00000C10 */ 0x78, 0x0B, 0x2E, 0x22, 0x5A, 0x01, 0x2E, 0x5A, 0x02, 0x0E, 0x1F, 0x03, 0x2D, 0x2D, 0x5A, 0x03, -/* 00000C20 */ 0x2D, 0x1F, 0x04, 0xFF, 0x2C, 0x47, 0x2C, 0x26, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x01, 0x49, -/* 00000C30 */ 0x01, 0x2D, 0x5F, 0x2D, 0x2D, 0x1D, 0x5F, 0x2D, 0x2D, 0x1E, 0x5A, 0x01, 0x2D, 0x5F, 0x2D, 0x27, -/* 00000C40 */ 0x23, 0x5A, 0x02, 0x2D, 0x47, 0x2D, 0x25, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0xB0, 0x00, -/* 00000C50 */ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x00, 0x00, 0x78, 0x1F, 0x2E, 0x1F, 0x78, 0x1D, -/* 00000C60 */ 0x2E, 0x20, 0x78, 0x1D, 0x2E, 0x21, 0x78, 0x0B, 0x2E, 0x22, 0x5A, 0x01, 0x2E, 0x5A, 0x02, 0x0E, -/* 00000C70 */ 0x1F, 0x03, 0x2D, 0x2D, 0x5A, 0x03, 0x2D, 0x1F, 0x04, 0xFF, 0x2C, 0x47, 0x2C, 0x26, 0x07, 0x04, -/* 00000C80 */ 0x00, 0x5A, 0x00, 0x02, 0x01, 0x49, 0x01, 0x2D, 0x5F, 0x2D, 0x2D, 0x1D, 0x5F, 0x2D, 0x2D, 0x1E, -/* 00000C90 */ 0x5F, 0x2D, 0x2D, 0x24, 0x5A, 0x01, 0x2D, 0x5A, 0x02, 0x20, 0x47, 0x2D, 0x25, 0x07, 0x03, 0x00, -/* 00000CA0 */ 0x5A, 0x00, 0x02, 0xCB, 0xC8, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x00, 0x00, -/* 00000CB0 */ 0x78, 0x09, 0x2E, 0x1F, 0x78, 0x1D, 0x2E, 0x20, 0x78, 0x1D, 0x2E, 0x21, 0x78, 0x0B, 0x2E, 0x22, -/* 00000CC0 */ 0x5A, 0x01, 0x2E, 0x5A, 0x02, 0x0E, 0x1F, 0x03, 0x2D, 0x2D, 0x5A, 0x03, 0x2D, 0x1F, 0x04, 0xFF, -/* 00000CD0 */ 0x2C, 0x47, 0x2C, 0x26, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x01, 0x49, 0x01, 0x2D, 0x5F, 0x2D, -/* 00000CE0 */ 0x2D, 0x1D, 0x5F, 0x2D, 0x2D, 0x1E, 0x5F, 0x2D, 0x2D, 0x24, 0x5A, 0x01, 0x2D, 0x5A, 0x02, 0x21, -/* 00000CF0 */ 0x47, 0x2D, 0x25, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0xE0, 0x00, 0x00, 0x00, 0x09, 0x00, -/* 00000D00 */ 0x00, 0x00, 0x2E, 0x00, 0x00, 0x00, 0x78, 0x19, 0x2E, 0x1F, 0x78, 0x1D, 0x2E, 0x20, 0x78, 0x1D, -/* 00000D10 */ 0x2E, 0x21, 0x78, 0x0B, 0x2E, 0x22, 0x5A, 0x01, 0x2E, 0x5A, 0x02, 0x0E, 0x1F, 0x03, 0x2D, 0x2D, -/* 00000D20 */ 0x5A, 0x03, 0x2D, 0x1F, 0x04, 0xFF, 0x2C, 0x6A, 0x2C, 0x24, 0x0F, 0x07, 0x03, 0x00, 0x5A, 0x00, -/* 00000D30 */ 0x24, 0x5A, 0x01, 0x22, 0xD3, 0x02, 0x2D, 0x5A, 0x02, 0x2D, 0x1F, 0x03, 0xFF, 0x2C, 0x47, 0x2D, -/* 00000D40 */ 0x24, 0x6A, 0x2C, 0x2D, 0x25, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x2D, 0x5F, 0x2E, 0x29, 0x26, 0x5A, -/* 00000D50 */ 0x01, 0x2E, 0xD3, 0x03, 0x2E, 0x5A, 0x02, 0x2E, 0x1F, 0x03, 0xFF, 0x2C, 0x47, 0x2D, 0x24, 0x6A, -/* 00000D60 */ 0x2C, 0x2D, 0x25, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x2D, 0x5F, 0x2E, 0x29, 0x27, 0x5A, 0x01, 0x2E, -/* 00000D70 */ 0xD3, 0x04, 0x2E, 0x5A, 0x02, 0x2E, 0x1F, 0x03, 0xFF, 0x2C, 0x47, 0x2D, 0x24, 0x6A, 0x2C, 0x2D, -/* 00000D80 */ 0x25, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x2D, 0x5F, 0x2E, 0x29, 0x28, 0x5A, 0x01, 0x2E, 0xD3, 0x05, -/* 00000D90 */ 0x2E, 0x5A, 0x02, 0x2E, 0x1F, 0x03, 0xFF, 0x2C, 0x47, 0x2D, 0x24, 0x6A, 0x2C, 0x2D, 0x25, 0x07, -/* 00000DA0 */ 0x03, 0x00, 0x5A, 0x00, 0x2D, 0x5F, 0x2E, 0x29, 0x29, 0x5A, 0x01, 0x2E, 0xD3, 0x06, 0x2E, 0x5A, -/* 00000DB0 */ 0x02, 0x2E, 0x1F, 0x03, 0xFF, 0x2C, 0x47, 0x2D, 0x24, 0x6A, 0x2C, 0x2D, 0x25, 0x07, 0x03, 0x00, -/* 00000DC0 */ 0x5A, 0x00, 0x2D, 0x5F, 0x2E, 0x29, 0x2A, 0x5A, 0x01, 0x2E, 0xD3, 0x07, 0x2E, 0x5A, 0x02, 0x2E, -/* 00000DD0 */ 0x1F, 0x03, 0xFF, 0x2C, 0xA6, 0x00, 0x24, 0x00, 0x0A, 0xF8, 0x00, 0xE0, 0x00, 0x00, 0x00, 0x03, -/* 00000DE0 */ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, -/* 00000DF0 */ 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0xC8, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, -/* 00000E00 */ 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, -/* 00000E10 */ 0x01, 0x00, 0x00, 0xB0, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, -/* 00000E20 */ 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x98, -/* 00000E30 */ 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, -/* 00000E40 */ 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x03, -/* 00000E50 */ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4B, 0x02, 0x00, 0x00, 0x50, 0x02, 0x00, 0x00, 0x4A, -/* 00000E60 */ 0x02, 0x00, 0x00, 0x4C, 0x02, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, -/* 00000E70 */ 0x00, 0x00, 0x00, 0x4B, 0x02, 0x00, 0x00, 0x50, 0x02, 0x00, 0x00, 0x4A, 0x02, 0x00, 0x00, 0x4C, -/* 00000E80 */ 0x02, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4B, -/* 00000E90 */ 0x02, 0x00, 0x00, 0x50, 0x02, 0x00, 0x00, 0x4A, 0x02, 0x00, 0x00, 0x4C, 0x02, 0x00, 0x00, 0x38, -/* 00000EA0 */ 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4B, 0x02, 0x00, 0x00, 0x50, -/* 00000EB0 */ 0x02, 0x00, 0x00, 0x4A, 0x02, 0x00, 0x00, 0x4C, 0x02, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x03, -/* 00000EC0 */ 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4B, 0x02, 0x00, 0x00, 0x50, 0x02, 0x00, 0x00, 0x4A, -/* 00000ED0 */ 0x02, 0x00, 0x00, 0x4C, 0x02, 0x00, 0x00, 0x49, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, -/* 00000EE0 */ 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0x02, 0x00, 0x00, 0xD9, 0x02, 0x00, 0x00, 0xDB, -/* 00000EF0 */ 0x02, 0x00, 0x00, 0xDD, 0x02, 0x00, 0x00, 0xDF, 0x02, 0x00, 0x00, 0x52, 0xFE, 0x81, 0x02, 0xFE, -/* 00000F00 */ 0x68, 0x02, 0xFE, 0x54, 0x01, 0xFE, 0x67, 0x02, 0xFE, 0x4B, 0x02, 0xFE, 0x50, 0x02, 0xFE, 0x4A, -/* 00000F10 */ 0x02, 0xFE, 0x4C, 0x02, 0xFE, 0x49, 0x02, 0xFE, 0xD0, 0x02, 0xFE, 0xD9, 0x02, 0xFE, 0xDB, 0x02, -/* 00000F20 */ 0xFE, 0xDD, 0x02, 0xFE, 0xDF, 0x02, 0xFE, 0x51, 0x02, 0xFE, 0x4D, 0x02, 0xFE, 0xE1, 0x02, 0xFE, -/* 00000F30 */ 0x15, 0x01, 0xFE, 0x8A, 0x02, 0xFE, 0x8A, 0x02, 0xFE, 0x91, 0x02, 0xFE, 0x91, 0x02, 0xFE, 0x92, -/* 00000F40 */ 0x02, 0xFE, 0x92, 0x02, 0xFE, 0x84, 0x02, 0xFE, 0xEB, 0x02, 0xFE, 0x66, 0x02, 0xFE, 0xEC, 0x02, -/* 00000F50 */ 0xFE, 0xE1, 0x02, 0xFE, 0x15, 0x01, 0xFE, 0x83, 0x01, 0xFE, 0x82, 0x01, 0xFE, 0x80, 0x01, 0xFE, -/* 00000F60 */ 0x81, 0x01, 0xFE, 0x67, 0x01, 0xF9, 0xFE, 0x52, 0x02, 0xFE, 0xD9, 0x02, 0xFE, 0xD0, 0x02, 0xFE, -/* 00000F70 */ 0xDB, 0x02, 0xFE, 0xDD, 0x02, 0xFE, 0xDF, 0x02, 0xFE, 0x9B, 0x01, 0x19, 0x02, 0x00, 0x00, 0x00, -/* 00000F80 */ 0x07, 0x00, 0x29, 0x00, 0x07, 0x00, 0x35, 0x00, 0x07, 0x00, 0x55, 0x00, 0x07, 0x00, 0x22, 0x00, -/* 00000F90 */ 0x07, 0x00, 0x40, 0x00, 0x18, 0x01, 0xEE, 0x02, 0x17, 0x00, 0x9F, 0x02, 0x11, 0x00, 0x63, 0x00, -/* 00000FA0 */ 0x19, 0x00, 0x4F, 0x00, 0x0C, 0x00, 0x4C, 0x00, 0x0C, 0x00, 0x54, 0x00, 0x0C, 0x00, 0x66, 0x00, -/* 00000FB0 */ 0x0C, 0x00, 0x4D, 0x00, 0x0C, 0x00, 0x51, 0x00, 0x56, 0x00, 0x13, 0x08, 0x56, 0x00, 0xC2, 0x00, -/* 00000FC0 */ 0x56, 0x00, 0xAE, 0x00, 0x56, 0x00, 0xB1, 0x00, 0x17, 0x00, 0xD1, 0x00, 0x1E, 0x00, 0x74, 0x01, -/* 00000FD0 */ 0x1E, 0x00, 0x7A, 0x01, 0x1E, 0x00, 0x82, 0x01, 0x1E, 0x00, 0x40, 0x06, 0x20, 0x00, 0x26, 0x07, -/* 00000FE0 */ 0x00, 0xDA, 0x19, 0x00, 0x00, 0x3B, 0x17, 0x00, 0x00, 0xE1, 0x16, 0x00, 0x00, 0x24, 0x16, 0x00, -/* 00000FF0 */ 0x00, 0x67, 0x15, 0x00, 0x00, 0xAA, 0x14, 0x00, 0x00, 0xB4, 0x12, 0x00, 0x00, 0x01, 0x10, 0x00, -/* 00001000 */ 0x00, 0xBF, 0x3C, 0x02, 0xC2, 0x43, 0xA0, 0x09, 0x00, 0xB8, 0x39, 0xA2, 0x41, 0xD1, 0x00, 0x09, -/* 00001010 */ 0xFE, 0x7D, 0x20, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x7D, 0x20, 0xFE, 0xEB, 0x06, -/* 00001020 */ 0xFE, 0xEB, 0x06, 0x01, 0x10, 0x09, 0x14, 0x05, 0x8A, 0x7D, 0x32, 0x02, 0x02, 0x0A, 0x0A, 0x0A, -/* 00001030 */ 0x0A, 0x02, 0x14, 0xE4, 0xFE, 0x3A, 0x01, 0xFE, 0x63, 0x01, 0xFE, 0xB9, 0x01, 0x05, 0xFE, 0xCF, -/* 00001040 */ 0x02, 0x07, 0x05, 0xFE, 0xF7, 0x02, 0x06, 0xFE, 0xF8, 0x02, 0x01, 0x00, 0x08, 0x01, 0x01, 0xFE, -/* 00001050 */ 0xC3, 0x01, 0x59, 0x16, 0xB1, 0x0B, 0x16, 0x4F, 0x0C, 0x4F, 0x0D, 0x4F, 0x0E, 0x4F, 0x0F, 0x4F, -/* 00001060 */ 0x10, 0x4F, 0x11, 0x4F, 0x12, 0x4F, 0x13, 0x14, 0x0A, 0x00, 0x0B, 0x03, 0xA6, 0x16, 0x14, 0x03, -/* 00001070 */ 0x00, 0x0B, 0x16, 0x09, 0x15, 0x00, 0x01, 0x49, 0x01, 0x17, 0x6A, 0x16, 0x17, 0x00, 0x07, 0x02, -/* 00001080 */ 0x00, 0x5A, 0x00, 0x17, 0x5A, 0x01, 0x04, 0x1F, 0x02, 0xFF, 0x16, 0xA6, 0x16, 0x47, 0x0C, 0x16, -/* 00001090 */ 0xA6, 0x16, 0x47, 0x0D, 0x16, 0x01, 0x49, 0x01, 0x17, 0x6A, 0x16, 0x17, 0x01, 0x07, 0x02, 0x00, -/* 000010A0 */ 0x5A, 0x00, 0x17, 0x5A, 0x01, 0x0B, 0x1F, 0x02, 0x16, 0x16, 0x0E, 0x0D, 0x00, 0x16, 0x47, 0x0C, -/* 000010B0 */ 0x0B, 0xA4, 0x16, 0x0C, 0x02, 0x47, 0x0D, 0x16, 0x09, 0x30, 0x00, 0x01, 0x49, 0x01, 0x17, 0x6A, -/* 000010C0 */ 0x16, 0x17, 0x03, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x17, 0x5A, 0x01, 0x0B, 0x1F, 0x02, 0x16, 0x16, -/* 000010D0 */ 0x47, 0x0C, 0x16, 0x01, 0x49, 0x01, 0x17, 0x6A, 0x16, 0x17, 0x04, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 000010E0 */ 0x17, 0x5A, 0x01, 0x0C, 0x1F, 0x02, 0x16, 0x16, 0x47, 0x0D, 0x16, 0x2C, 0x16, 0x09, 0x0D, 0x03, -/* 000010F0 */ 0x00, 0x16, 0x05, 0x09, 0x15, 0x00, 0x01, 0x49, 0x01, 0x17, 0x6A, 0x16, 0x17, 0x05, 0x07, 0x02, -/* 00001100 */ 0x00, 0x5A, 0x00, 0x17, 0x5A, 0x01, 0x04, 0x1F, 0x02, 0xFF, 0x16, 0x01, 0x49, 0x01, 0x17, 0x6A, -/* 00001110 */ 0x16, 0x17, 0x06, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x17, 0x5A, 0x01, 0x0C, 0x5A, 0x02, 0x06, 0x1F, -/* 00001120 */ 0x03, 0x16, 0x16, 0x47, 0x0E, 0x16, 0x47, 0x0F, 0x06, 0x47, 0x10, 0x06, 0xA6, 0x16, 0x14, 0x03, -/* 00001130 */ 0x00, 0x0A, 0x16, 0x09, 0x59, 0x00, 0xEA, 0x00, 0x12, 0x03, 0x00, 0x0F, 0x0D, 0x09, 0x4C, 0x00, -/* 00001140 */ 0xB9, 0x16, 0x0F, 0x0C, 0x00, 0x00, 0x0E, 0x3C, 0x00, 0x16, 0x95, 0x16, 0x0C, 0x0F, 0x47, 0x11, -/* 00001150 */ 0x16, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x07, 0x5A, 0x01, 0x11, 0x5A, 0x02, 0x0F, 0x5A, 0x03, 0x0C, -/* 00001160 */ 0x1F, 0x04, 0x16, 0x09, 0x0E, 0x1E, 0x00, 0x16, 0x01, 0x49, 0x01, 0x17, 0x6A, 0x16, 0x17, 0x07, -/* 00001170 */ 0x07, 0x04, 0x00, 0x5A, 0x00, 0x17, 0x5A, 0x01, 0x0E, 0x5A, 0x02, 0x10, 0x5A, 0x03, 0x11, 0x1F, -/* 00001180 */ 0x04, 0xFF, 0x16, 0x28, 0x10, 0x10, 0x28, 0x0F, 0x0F, 0x09, 0xAA, 0xFF, 0x09, 0x7C, 0x00, 0x01, -/* 00001190 */ 0x49, 0x01, 0x17, 0x6A, 0x16, 0x17, 0x08, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x17, 0x01, 0x49, 0x01, -/* 000011A0 */ 0x18, 0x5F, 0x18, 0x18, 0x09, 0x5A, 0x01, 0x18, 0x5A, 0x02, 0x09, 0x5A, 0x03, 0x0A, 0x1F, 0x04, -/* 000011B0 */ 0x16, 0x16, 0x47, 0x12, 0x16, 0xEA, 0x01, 0x12, 0x03, 0x00, 0x0F, 0x0D, 0x09, 0x4C, 0x00, 0xB9, -/* 000011C0 */ 0x16, 0x0F, 0x0C, 0x01, 0x00, 0x0E, 0x3C, 0x00, 0x16, 0x95, 0x16, 0x0C, 0x0F, 0x47, 0x13, 0x16, -/* 000011D0 */ 0x07, 0x04, 0x00, 0x5A, 0x00, 0x07, 0x5A, 0x01, 0x13, 0x5A, 0x02, 0x0F, 0x5A, 0x03, 0x0C, 0x1F, -/* 000011E0 */ 0x04, 0x16, 0x12, 0x0E, 0x1E, 0x00, 0x16, 0x01, 0x49, 0x01, 0x17, 0x6A, 0x16, 0x17, 0x07, 0x07, -/* 000011F0 */ 0x04, 0x00, 0x5A, 0x00, 0x17, 0x5A, 0x01, 0x0E, 0x5A, 0x02, 0x10, 0x5A, 0x03, 0x13, 0x1F, 0x04, -/* 00001200 */ 0xFF, 0x16, 0x28, 0x10, 0x10, 0x28, 0x0F, 0x0F, 0x09, 0xAA, 0xFF, 0x47, 0x00, 0x0E, 0x09, 0x02, -/* 00001210 */ 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x91, 0x02, 0xAE, 0xC1, 0xFE, 0x02, 0x01, 0xFE, 0x4E, 0x02, -/* 00001220 */ 0xFE, 0x92, 0x02, 0xFE, 0x55, 0x02, 0xFE, 0x56, 0x02, 0xFE, 0xEB, 0x02, 0xFE, 0xEC, 0x02, 0xFE, -/* 00001230 */ 0xF4, 0x20, 0x20, 0x15, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x37, 0x00, 0x15, 0x00, 0x58, 0x00, 0x05, -/* 00001240 */ 0x00, 0x0F, 0x00, 0x05, 0x00, 0x10, 0x00, 0x19, 0x00, 0x31, 0x00, 0x03, 0x00, 0x16, 0x00, 0x0A, -/* 00001250 */ 0x00, 0x2D, 0x00, 0x18, 0x00, 0x2E, 0x00, 0x18, 0x00, 0x3F, 0x00, 0x0B, 0x00, 0x33, 0x00, 0x15, -/* 00001260 */ 0x00, 0x61, 0x00, 0x1B, 0x00, 0x3A, 0x00, 0x03, 0x00, 0x13, 0x00, 0x03, 0x00, 0x15, 0x00, 0x0C, -/* 00001270 */ 0x00, 0x4A, 0x00, 0x08, 0x00, 0x1B, 0x00, 0x0A, 0x00, 0x22, 0x00, 0x07, 0x00, 0x27, 0x00, 0x17, -/* 00001280 */ 0x00, 0x38, 0x00, 0x1B, 0x00, 0x57, 0x00, 0x03, 0x00, 0x3E, 0x00, 0x09, 0x00, 0x8F, 0x00, 0x28, -/* 00001290 */ 0x00, 0x7C, 0x00, 0x08, 0x00, 0x1B, 0x00, 0x0A, 0x00, 0x22, 0x00, 0x07, 0x00, 0x27, 0x00, 0x17, -/* 000012A0 */ 0x00, 0x3B, 0x00, 0x1B, 0x00, 0x57, 0x00, 0x03, 0x00, 0x3E, 0x00, 0x06, 0x00, 0x26, 0x00, 0x08, -/* 000012B0 */ 0x00, 0x0E, 0x00, 0x00, 0xBF, 0x3C, 0x02, 0xC2, 0x43, 0xA0, 0x09, 0x00, 0x7E, 0x3A, 0xA2, 0x41, -/* 000012C0 */ 0xD1, 0x00, 0x08, 0xFE, 0x3E, 0x1A, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x3E, 0x1A, -/* 000012D0 */ 0xFE, 0x02, 0x06, 0xFE, 0x02, 0x06, 0x01, 0x0C, 0x08, 0x10, 0x03, 0x5B, 0x4C, 0x0D, 0x01, 0x01, -/* 000012E0 */ 0x06, 0x06, 0x06, 0x06, 0x01, 0x10, 0xF2, 0xFE, 0x21, 0x01, 0x05, 0xFE, 0xCF, 0x02, 0x07, 0x05, -/* 000012F0 */ 0xFE, 0xF6, 0x02, 0x01, 0x00, 0x01, 0xFF, 0x01, 0x01, 0xFE, 0x2B, 0x01, 0x59, 0x11, 0xB1, 0x0A, -/* 00001300 */ 0x11, 0x4F, 0x0B, 0x4F, 0x0C, 0x4F, 0x0D, 0x4F, 0x0E, 0x4F, 0x0F, 0x14, 0x0A, 0x00, 0x0A, 0x03, -/* 00001310 */ 0xA6, 0x11, 0x14, 0x03, 0x00, 0x0A, 0x11, 0x09, 0x15, 0x00, 0x01, 0x49, 0x01, 0x12, 0x6A, 0x11, -/* 00001320 */ 0x12, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x12, 0x5A, 0x01, 0x04, 0x1F, 0x02, 0xFF, 0x11, 0xA6, -/* 00001330 */ 0x11, 0x47, 0x0B, 0x11, 0x01, 0x49, 0x01, 0x12, 0x6A, 0x11, 0x12, 0x01, 0x07, 0x02, 0x00, 0x5A, -/* 00001340 */ 0x00, 0x12, 0x5A, 0x01, 0x0A, 0x1F, 0x02, 0x11, 0x11, 0x0E, 0x06, 0x00, 0x11, 0x47, 0x0B, 0x0A, -/* 00001350 */ 0x09, 0x18, 0x00, 0x01, 0x49, 0x01, 0x12, 0x6A, 0x11, 0x12, 0x02, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 00001360 */ 0x12, 0x5A, 0x01, 0x0A, 0x1F, 0x02, 0x11, 0x11, 0x47, 0x0B, 0x11, 0x01, 0x49, 0x01, 0x12, 0x6A, -/* 00001370 */ 0x11, 0x12, 0x03, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x12, 0xA4, 0x13, 0x0B, 0x04, 0x5A, 0x01, 0x13, -/* 00001380 */ 0x1F, 0x02, 0x11, 0x11, 0x47, 0x0C, 0x11, 0x14, 0x03, 0x00, 0x0C, 0x05, 0x09, 0x06, 0x00, 0x47, -/* 00001390 */ 0x00, 0x06, 0x09, 0x90, 0x00, 0x01, 0x49, 0x01, 0x12, 0x6A, 0x11, 0x12, 0x05, 0x07, 0x02, 0x00, -/* 000013A0 */ 0x5A, 0x00, 0x12, 0x5A, 0x01, 0x09, 0x1F, 0x02, 0x11, 0x11, 0x47, 0x0D, 0x11, 0x10, 0x03, 0x00, -/* 000013B0 */ 0x0D, 0x0C, 0x09, 0x06, 0x00, 0x47, 0x00, 0x06, 0x09, 0x6A, 0x00, 0xA6, 0x11, 0x47, 0x0E, 0x11, -/* 000013C0 */ 0x14, 0x03, 0x00, 0x0D, 0x05, 0x09, 0x06, 0x00, 0x47, 0x0E, 0x05, 0x09, 0x20, 0x00, 0x11, 0x03, -/* 000013D0 */ 0x00, 0x0D, 0x05, 0x09, 0x06, 0x00, 0x47, 0x0E, 0x0D, 0x09, 0x12, 0x00, 0x2F, 0x11, 0x0C, 0x0D, -/* 000013E0 */ 0x47, 0x0E, 0x11, 0x12, 0x03, 0x00, 0x0E, 0x05, 0x09, 0x03, 0x00, 0x47, 0x0E, 0x05, 0xEA, 0x00, -/* 000013F0 */ 0x12, 0x03, 0x00, 0x0E, 0x0C, 0x09, 0x25, 0x00, 0xB9, 0x11, 0x0E, 0x0B, 0x00, 0x00, 0x0E, 0x15, -/* 00001400 */ 0x00, 0x11, 0x95, 0x11, 0x0B, 0x0E, 0x47, 0x0F, 0x11, 0x14, 0x03, 0x00, 0x0F, 0x08, 0x09, 0x06, -/* 00001410 */ 0x00, 0x47, 0x00, 0x0E, 0x09, 0x0E, 0x00, 0x28, 0x0E, 0x0E, 0x09, 0xD1, 0xFF, 0x47, 0x00, 0x06, -/* 00001420 */ 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x91, 0x02, 0xAE, 0xFE, 0x02, 0x01, 0xFE, 0x53, -/* 00001430 */ 0x02, 0xC1, 0xFE, 0x54, 0x02, 0xFE, 0xBB, 0x1A, 0x1C, 0x0F, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x37, -/* 00001440 */ 0x00, 0x15, 0x00, 0x59, 0x00, 0x05, 0x00, 0x0F, 0x00, 0x19, 0x00, 0x31, 0x00, 0x06, 0x00, 0x27, -/* 00001450 */ 0x00, 0x18, 0x00, 0x35, 0x00, 0x1C, 0x00, 0x39, 0x00, 0x08, 0x00, 0x1D, 0x00, 0x06, 0x00, 0x1E, -/* 00001460 */ 0x00, 0x18, 0x00, 0x36, 0x00, 0x08, 0x00, 0x1C, 0x00, 0x06, 0x00, 0x1E, 0x00, 0x05, 0x00, 0x14, -/* 00001470 */ 0x01, 0x08, 0x00, 0x58, 0x00, 0x06, 0x00, 0x16, 0x00, 0x08, 0x00, 0x4F, 0x00, 0x06, 0x00, 0x4E, -/* 00001480 */ 0x00, 0x07, 0x00, 0x1A, 0x00, 0x08, 0x00, 0x1D, 0x00, 0x05, 0x00, 0x2F, 0x00, 0x08, 0x00, 0x17, -/* 00001490 */ 0x00, 0x0A, 0x00, 0x1E, 0x00, 0x07, 0x00, 0x26, 0x00, 0x08, 0x00, 0x36, 0x00, 0x06, 0x00, 0x37, -/* 000014A0 */ 0x00, 0x06, 0x00, 0x18, 0x00, 0x08, 0x00, 0x0F, 0x00, 0x00, 0xBF, 0x1C, 0x00, 0xC0, 0x03, 0x80, -/* 000014B0 */ 0x01, 0x00, 0x75, 0x3A, 0xA0, 0x41, 0xD1, 0x00, 0x07, 0xFE, 0xBC, 0x18, 0xFF, 0x00, 0x10, 0x01, -/* 000014C0 */ 0x00, 0x01, 0x01, 0xFE, 0xBC, 0x18, 0xFE, 0x44, 0x01, 0xFE, 0x44, 0x01, 0x01, 0x04, 0x06, 0x08, -/* 000014D0 */ 0x04, 0x1F, 0x1E, 0x03, 0x03, 0x03, 0x03, 0x05, 0xFE, 0xCF, 0x02, 0x07, 0x05, 0xFE, 0xF5, 0x02, -/* 000014E0 */ 0x01, 0x02, 0x62, 0x59, 0x08, 0xB1, 0x06, 0x08, 0x4F, 0x07, 0x14, 0x0A, 0x00, 0x06, 0x03, 0xA6, -/* 000014F0 */ 0x08, 0x14, 0x03, 0x00, 0x06, 0x08, 0x09, 0x15, 0x00, 0x01, 0x49, 0x01, 0x09, 0x6A, 0x08, 0x09, -/* 00001500 */ 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x09, 0x5A, 0x01, 0x04, 0x1F, 0x02, 0xFF, 0x08, 0x01, 0x49, -/* 00001510 */ 0x01, 0x09, 0x6A, 0x08, 0x09, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x09, 0x5A, 0x01, 0x06, 0x1F, -/* 00001520 */ 0x02, 0x08, 0x08, 0x47, 0x07, 0x08, 0x01, 0x49, 0x01, 0x09, 0x6A, 0x08, 0x09, 0x02, 0x07, 0x03, -/* 00001530 */ 0x00, 0x5A, 0x00, 0x09, 0x5A, 0x01, 0x07, 0x5A, 0x02, 0x05, 0x1F, 0x03, 0x00, 0x08, 0x09, 0x02, -/* 00001540 */ 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x91, 0x02, 0xFE, 0x02, 0x01, 0xFE, 0xEA, 0x02, 0xFE, 0xE8, -/* 00001550 */ 0x18, 0x05, 0x07, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x37, 0x00, 0x15, 0x00, 0x58, 0x00, 0x18, 0x00, -/* 00001560 */ 0x2E, 0x00, 0x1D, 0x00, 0x5A, 0x00, 0x00, 0xBF, 0x1C, 0x00, 0xC0, 0x03, 0x80, 0x01, 0x00, 0x6C, -/* 00001570 */ 0x39, 0xA0, 0x41, 0xD1, 0x00, 0x06, 0xFE, 0x41, 0x17, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, -/* 00001580 */ 0xFE, 0x41, 0x17, 0xFE, 0x3D, 0x01, 0xFE, 0x3D, 0x01, 0x01, 0x04, 0x06, 0x08, 0x04, 0x1F, 0x1E, -/* 00001590 */ 0x03, 0x03, 0x03, 0x03, 0x05, 0xFE, 0xCF, 0x02, 0x07, 0x05, 0xFE, 0xF4, 0x02, 0x01, 0x01, 0x62, -/* 000015A0 */ 0x59, 0x08, 0xB1, 0x06, 0x08, 0x4F, 0x07, 0x14, 0x0A, 0x00, 0x06, 0x03, 0xA6, 0x08, 0x14, 0x03, -/* 000015B0 */ 0x00, 0x06, 0x08, 0x09, 0x15, 0x00, 0x01, 0x49, 0x01, 0x09, 0x6A, 0x08, 0x09, 0x00, 0x07, 0x02, -/* 000015C0 */ 0x00, 0x5A, 0x00, 0x09, 0x5A, 0x01, 0x04, 0x1F, 0x02, 0xFF, 0x08, 0x01, 0x49, 0x01, 0x09, 0x6A, -/* 000015D0 */ 0x08, 0x09, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x09, 0x5A, 0x01, 0x06, 0x1F, 0x02, 0x08, 0x08, -/* 000015E0 */ 0x47, 0x07, 0x08, 0x01, 0x49, 0x01, 0x09, 0x6A, 0x08, 0x09, 0x02, 0x07, 0x03, 0x00, 0x5A, 0x00, -/* 000015F0 */ 0x09, 0x5A, 0x01, 0x07, 0x5A, 0x02, 0x05, 0x1F, 0x03, 0x00, 0x08, 0x09, 0x02, 0x00, 0xA6, 0x00, -/* 00001600 */ 0x24, 0x00, 0xFE, 0x91, 0x02, 0xFE, 0x02, 0x01, 0xFE, 0xEA, 0x02, 0xFE, 0x6D, 0x17, 0x05, 0x07, -/* 00001610 */ 0x00, 0x00, 0x00, 0x0F, 0x00, 0x37, 0x00, 0x15, 0x00, 0x57, 0x00, 0x18, 0x00, 0x2E, 0x00, 0x1D, -/* 00001620 */ 0x00, 0x54, 0x00, 0x00, 0xBF, 0x1C, 0x00, 0xC0, 0x03, 0x80, 0x01, 0x00, 0x63, 0x37, 0xA0, 0x41, -/* 00001630 */ 0xD1, 0x00, 0x05, 0xFE, 0xCB, 0x15, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0xCB, 0x15, -/* 00001640 */ 0xFE, 0x39, 0x01, 0xFE, 0x39, 0x01, 0x01, 0x04, 0x06, 0x08, 0x04, 0x1F, 0x1E, 0x03, 0x03, 0x03, -/* 00001650 */ 0x03, 0x05, 0xFE, 0xCF, 0x02, 0x07, 0x05, 0xFE, 0xF3, 0x02, 0x01, 0x00, 0x62, 0x59, 0x08, 0xB1, -/* 00001660 */ 0x06, 0x08, 0x4F, 0x07, 0x14, 0x0A, 0x00, 0x06, 0x03, 0xA6, 0x08, 0x14, 0x03, 0x00, 0x06, 0x08, -/* 00001670 */ 0x09, 0x15, 0x00, 0x01, 0x49, 0x01, 0x09, 0x6A, 0x08, 0x09, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 00001680 */ 0x09, 0x5A, 0x01, 0x04, 0x1F, 0x02, 0xFF, 0x08, 0x01, 0x49, 0x01, 0x09, 0x6A, 0x08, 0x09, 0x01, -/* 00001690 */ 0x07, 0x02, 0x00, 0x5A, 0x00, 0x09, 0x5A, 0x01, 0x06, 0x1F, 0x02, 0x08, 0x08, 0x47, 0x07, 0x08, -/* 000016A0 */ 0x01, 0x49, 0x01, 0x09, 0x6A, 0x08, 0x09, 0x02, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x09, 0x5A, 0x01, -/* 000016B0 */ 0x07, 0x5A, 0x02, 0x05, 0x1F, 0x03, 0x00, 0x08, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, -/* 000016C0 */ 0x91, 0x02, 0xFE, 0x02, 0x01, 0xFE, 0xEA, 0x02, 0xFE, 0xF7, 0x15, 0x05, 0x07, 0x00, 0x00, 0x00, -/* 000016D0 */ 0x0F, 0x00, 0x37, 0x00, 0x15, 0x00, 0x55, 0x00, 0x18, 0x00, 0x2E, 0x00, 0x1D, 0x00, 0x52, 0x00, -/* 000016E0 */ 0x00, 0xBF, 0x1C, 0x00, 0xC0, 0x03, 0x80, 0x01, 0x00, 0x5E, 0x42, 0xA2, 0x41, 0xD1, 0x00, 0x04, -/* 000016F0 */ 0xFE, 0x05, 0x15, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x05, 0x15, 0x8B, 0x8B, 0x01, -/* 00001700 */ 0x03, 0x03, 0x05, 0x04, 0x0A, 0x0A, 0x01, 0x01, 0x01, 0x01, 0x05, 0xFE, 0xCF, 0x02, 0x1C, 0x01, -/* 00001710 */ 0x49, 0x01, 0x05, 0x5F, 0x05, 0x05, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x01, 0x03, 0x5A, 0x02, 0x04, -/* 00001720 */ 0xC1, 0x03, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xE1, 0x02, 0xFE, 0x48, -/* 00001730 */ 0x15, 0x02, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x47, 0x00, 0x00, 0xBF, 0x1C, 0x00, 0xC0, 0x57, -/* 00001740 */ 0xA0, 0x23, 0x00, 0x2E, 0x13, 0xA0, 0x41, 0xC1, 0x00, 0xFE, 0xE3, 0x02, 0x03, 0xFF, 0x00, 0x00, -/* 00001750 */ 0x00, 0x02, 0xFE, 0xDF, 0x0B, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0xDF, 0x0B, 0xFE, -/* 00001760 */ 0x4E, 0x06, 0xFE, 0x4E, 0x06, 0x01, 0x0E, 0x0C, 0x14, 0x04, 0x5D, 0x54, 0x0D, 0x0D, 0x0D, 0x0D, -/* 00001770 */ 0x01, 0x05, 0x03, 0x14, 0x05, 0xFE, 0xCF, 0x02, 0x05, 0xFE, 0xF1, 0x02, 0x05, 0xFE, 0xE7, 0x02, -/* 00001780 */ 0x0B, 0x06, 0xFE, 0xE3, 0x02, 0x06, 0xFE, 0xF2, 0x02, 0x07, 0x01, 0x01, 0x0C, 0x01, 0x00, 0xFE, -/* 00001790 */ 0x67, 0x01, 0x59, 0x17, 0xB1, 0x0C, 0x17, 0x4F, 0x0D, 0x4F, 0x0E, 0x4F, 0x0F, 0x4F, 0x10, 0x4F, -/* 000017A0 */ 0x11, 0x4F, 0x12, 0x4F, 0x13, 0x47, 0x0D, 0x0C, 0x01, 0x49, 0x01, 0x17, 0x5F, 0x17, 0x17, 0x00, -/* 000017B0 */ 0xE1, 0x17, 0x0D, 0x17, 0x00, 0x0F, 0x18, 0x00, 0x17, 0x01, 0x49, 0x01, 0x18, 0x6A, 0x17, 0x18, -/* 000017C0 */ 0x01, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x18, 0x5A, 0x01, 0x03, 0x5A, 0x02, 0x04, 0x1F, 0x03, 0xFF, -/* 000017D0 */ 0x17, 0x5F, 0x17, 0x0D, 0x02, 0x47, 0x0E, 0x17, 0x5F, 0x17, 0x0D, 0x03, 0x14, 0x03, 0x00, 0x17, -/* 000017E0 */ 0x05, 0x09, 0x1D, 0x00, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 000017F0 */ 0x00, 0xA6, 0x17, 0x78, 0x17, 0x00, 0x04, 0x78, 0x05, 0x00, 0x05, 0x09, 0xF9, 0x00, 0x09, 0xF4, -/* 00001800 */ 0x00, 0x5F, 0x17, 0x0D, 0x06, 0x47, 0x0F, 0x17, 0x01, 0x49, 0x01, 0x18, 0x6A, 0x17, 0x18, 0x07, -/* 00001810 */ 0x07, 0x02, 0x00, 0x5A, 0x00, 0x18, 0x5A, 0x01, 0x0E, 0x1F, 0x02, 0x17, 0x17, 0x0E, 0x0A, 0x00, -/* 00001820 */ 0x17, 0xA4, 0x18, 0x0E, 0x08, 0x47, 0x17, 0x18, 0x09, 0x18, 0x00, 0x01, 0x49, 0x01, 0x19, 0x6A, -/* 00001830 */ 0x18, 0x19, 0x09, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x19, 0x5A, 0x01, 0x0E, 0x1F, 0x02, 0x18, 0x18, -/* 00001840 */ 0x47, 0x17, 0x18, 0x47, 0x10, 0x17, 0x12, 0x03, 0x00, 0x0F, 0x10, 0x09, 0x89, 0x00, 0x5F, 0x17, -/* 00001850 */ 0x0D, 0x0A, 0x47, 0x11, 0x17, 0x2F, 0x17, 0x0F, 0x09, 0x74, 0x17, 0x0D, 0x0B, 0x14, 0x03, 0x00, -/* 00001860 */ 0x11, 0x09, 0x09, 0x1F, 0x00, 0xCB, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 00001870 */ 0x00, 0x00, 0x95, 0x17, 0x0E, 0x0F, 0x78, 0x17, 0x00, 0x04, 0x78, 0x0A, 0x00, 0x05, 0x09, 0x76, -/* 00001880 */ 0x00, 0x09, 0x50, 0x00, 0x14, 0x03, 0x00, 0x11, 0x0B, 0x09, 0x1B, 0x00, 0xCB, 0x20, 0x00, 0x00, -/* 00001890 */ 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0F, 0x00, 0x04, 0x78, 0x0A, 0x00, -/* 000018A0 */ 0x05, 0x09, 0x53, 0x00, 0x09, 0x2D, 0x00, 0x47, 0x12, 0x0F, 0x95, 0x17, 0x0E, 0x0F, 0x47, 0x13, -/* 000018B0 */ 0x17, 0xCB, 0x30, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCC, 0x17, -/* 000018C0 */ 0x02, 0x9F, 0x00, 0x12, 0x17, 0x9F, 0x01, 0x13, 0x17, 0x78, 0x17, 0x00, 0x04, 0x78, 0x0A, 0x00, -/* 000018D0 */ 0x05, 0x09, 0x23, 0x00, 0x09, 0x1E, 0x00, 0x74, 0x05, 0x0D, 0x0C, 0xCB, 0x40, 0x00, 0x00, 0x00, -/* 000018E0 */ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA6, 0x17, 0x78, 0x17, 0x00, 0x04, 0x78, 0x05, -/* 000018F0 */ 0x00, 0x05, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x05, 0x50, 0x00, 0x40, 0x00, 0x00, 0x00, -/* 00001900 */ 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x6C, 0x00, 0x00, 0x00, -/* 00001910 */ 0x30, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, -/* 00001920 */ 0x6C, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 00001930 */ 0x83, 0x01, 0x00, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, -/* 00001940 */ 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 00001950 */ 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x6C, 0x00, 0x00, 0x00, -/* 00001960 */ 0xFE, 0xE1, 0x02, 0xFE, 0x8A, 0x02, 0xFE, 0xED, 0x02, 0xFE, 0xF0, 0x02, 0xFE, 0x83, 0x01, 0x6C, -/* 00001970 */ 0xFE, 0xEE, 0x02, 0xAE, 0xC1, 0xFE, 0x4E, 0x02, 0xFE, 0xEF, 0x02, 0xFE, 0xEE, 0x02, 0xFE, 0xF0, -/* 00001980 */ 0x02, 0xFE, 0x1B, 0x0C, 0x15, 0x13, 0x00, 0x00, 0x00, 0x03, 0x00, 0x1F, 0x00, 0x11, 0x00, 0x49, -/* 00001990 */ 0x00, 0x18, 0x00, 0x7D, 0x00, 0x07, 0x00, 0x2B, 0x00, 0x0C, 0x00, 0x39, 0x00, 0x1D, 0x00, 0x56, -/* 000019A0 */ 0x00, 0x07, 0x00, 0x33, 0x00, 0x3E, 0x00, 0x65, 0x00, 0x08, 0x00, 0x70, 0x00, 0x07, 0x00, 0x36, -/* 000019B0 */ 0x00, 0x08, 0x00, 0x38, 0x00, 0x08, 0x00, 0x4F, 0x00, 0x1F, 0x00, 0x48, 0x00, 0x08, 0x00, 0x78, -/* 000019C0 */ 0x00, 0x1B, 0x00, 0x63, 0x00, 0x03, 0x00, 0x34, 0x00, 0x07, 0x00, 0x39, 0x00, 0x26, 0x00, 0x8A, -/* 000019D0 */ 0x00, 0x04, 0x00, 0x35, 0x00, 0x1C, 0x00, 0x5E, 0x00, 0x00, 0xBF, 0x1C, 0x00, 0xC0, 0x03, 0x80, -/* 000019E0 */ 0x01, 0x00, 0x17, 0x3C, 0xA2, 0x41, 0xD1, 0x00, 0x02, 0xFE, 0xD6, 0x05, 0xFF, 0x00, 0x10, 0x01, -/* 000019F0 */ 0x00, 0x03, 0x03, 0xFE, 0xD6, 0x05, 0xFE, 0xE9, 0x01, 0xFE, 0xE9, 0x01, 0x41, 0x05, 0x0A, 0x0D, -/* 00001A00 */ 0x08, 0x14, 0x14, 0x05, 0x05, 0x05, 0x05, 0x05, 0xFE, 0xCF, 0x02, 0x01, 0x04, 0x06, 0xFE, 0xED, -/* 00001A10 */ 0x02, 0x06, 0xFE, 0xEE, 0x02, 0x06, 0xFE, 0xEF, 0x02, 0x06, 0xFE, 0xF0, 0x02, 0x01, 0x00, 0x0C, -/* 00001A20 */ 0x3D, 0x59, 0x0D, 0xB1, 0x0C, 0x0D, 0x01, 0x49, 0x01, 0x0E, 0x6A, 0x0D, 0x0E, 0x00, 0x07, 0x07, -/* 00001A30 */ 0x00, 0x5A, 0x00, 0x0E, 0x5A, 0x01, 0x0C, 0x5A, 0x02, 0x03, 0x5A, 0x03, 0x04, 0x5A, 0x04, 0x05, -/* 00001A40 */ 0x5A, 0x05, 0x06, 0x5A, 0x06, 0x07, 0x1F, 0x07, 0xFF, 0x0D, 0x74, 0x0A, 0x0C, 0x01, 0x74, 0x08, -/* 00001A50 */ 0x0C, 0x02, 0x74, 0x0B, 0x0C, 0x03, 0x74, 0x09, 0x0C, 0x04, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x4F, -/* 00001A60 */ 0x02, 0xFE, 0xED, 0x02, 0xFE, 0xEE, 0x02, 0xFE, 0xEF, 0x02, 0xFE, 0xF0, 0x02, 0xFE, 0x19, 0x06, -/* 00001A70 */ 0x06, 0x05, 0x00, 0x00, 0x00, 0x24, 0x00, 0x82, 0x00, 0x04, 0x00, 0x28, 0x00, 0x04, 0x00, 0x22, -/* 00001A80 */ 0x00, 0x04, 0x00, 0x29, 0x00, 0x06, 0x00, 0xB0, 0x00, 0x00, 0x00}; - -} diff --git a/lib/Runtime/Library/JsBuiltIn/JsBuiltIn.js.nojit.bc.64b.h b/lib/Runtime/Library/JsBuiltIn/JsBuiltIn.js.nojit.bc.64b.h deleted file mode 100755 index 23269e7d7cc..00000000000 --- a/lib/Runtime/Library/JsBuiltIn/JsBuiltIn.js.nojit.bc.64b.h +++ /dev/null @@ -1,679 +0,0 @@ -//------------------------------------------------------------------------------------------------------- -// Copyright (C) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. -//------------------------------------------------------------------------------------------------------- -#if 0 -//------------------------------------------------------------------------------------------------------- -// Copyright (C) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. -//------------------------------------------------------------------------------------------------------- - -"use strict"; - -(function (intrinsic) { - var platform = intrinsic.JsBuiltIn; - - var setPrototype = platform.builtInSetPrototype; - var _objectDefineProperty = platform.builtInJavascriptObjectEntryDefineProperty; - var Symbol = platform.Symbol; - var CreateObject = platform.builtInJavascriptObjectCreate; - - let FunctionsEnum = { - ArrayValues: setPrototype({ className: "Array", methodName: "values", argumentsCount: 0, forceInline: true /*optional*/, alias: "Symbol.iterator" }, null), - ArrayKeys: setPrototype({ className: "Array", methodName: "keys", argumentsCount: 0, forceInline: true /*optional*/ }, null), - ArrayEntries: setPrototype({ className: "Array", methodName: "entries", argumentsCount: 0, forceInline: true /*optional*/ }, null), - ArrayIndexOf: setPrototype({ className: "Array", methodName: "indexOf", argumentsCount: 1, forceInline: true /*optional*/ }, null), - ArrayFilter: setPrototype({ className: "Array", methodName: "filter", argumentsCount: 1, forceInline: true /*optional*/ }, null), - }; - - platform.registerChakraLibraryFunction("ArrayIterator", function (arrayObj, iterationKind) { - "use strict"; - __chakraLibrary.InitInternalProperties(this, 4, "__$arrayObj$__", "__$nextIndex$__", "__$kind$__", "__$internalDone$__"); - this.__$arrayObj$__ = arrayObj; - this.__$nextIndex$__ = 0; - this.__$kind$__ = iterationKind; - this.__$internalDone$__ = false; // We use this additional property to enable hoisting load of arrayObj outside the loop, we write to this property instead of the arrayObj - }); - - // ArrayIterator's prototype is the C++ Iterator, which is also the prototype for StringIterator, MapIterator etc - var iteratorPrototype = platform.GetIteratorPrototype(); - // Establish prototype chain here - __chakraLibrary.ArrayIterator.prototype = CreateObject(iteratorPrototype); - __chakraLibrary.raiseNeedObjectOfType = platform.raiseNeedObjectOfType; - __chakraLibrary.raiseThis_NullOrUndefined = platform.raiseThis_NullOrUndefined; - __chakraLibrary.raiseFunctionArgument_NeedFunction = platform.raiseFunctionArgument_NeedFunction; - __chakraLibrary.callInstanceFunc = platform.builtInCallInstanceFunction; - __chakraLibrary.functionBind = platform.builtInJavascriptFunctionEntryBind; - - _objectDefineProperty(__chakraLibrary.ArrayIterator.prototype, 'next', - // Object's getter and setter can get overriden on the prototype, in that case while setting the value attributes, we will end up with TypeError - // So, we need to set the prototype of attributes to null - setPrototype({ - value: function () { - "use strict"; - let o = this; - - if (!(o instanceof __chakraLibrary.ArrayIterator)) { - __chakraLibrary.raiseNeedObjectOfType("Array Iterator.prototype.next", "Array Iterator"); - } - - let a = o.__$arrayObj$__; - - if (o.__$internalDone$__ === true) { - return { value: undefined, done: true }; - } else { - let index = o.__$nextIndex$__; - let len = __chakraLibrary.isArray(a) ? a.length : __chakraLibrary.GetLength(a); - - if (index < len) { // < comparison should happen instead of >= , because len can be NaN - let itemKind = o.__$kind$__; - - o.__$nextIndex$__ = index + 1; - - if (itemKind === 1 /*ArrayIterationKind.Value*/) { - return {value : a[index], done : false}; - } else if (itemKind === 0 /*ArrayIterationKind.Key*/) { // TODO (megupta) : Use clean enums here ? - return {value : index, done : false}; - } else { - let elementKey = index; - let elementValue = a[index]; - return {value : [elementKey, elementValue], done : false}; - } - } else { - o.__$internalDone$__ = true; - return { value : undefined, done : true}; - } - } - }, - writable: true, - enumerable: false, - configurable: true - }, null) - ); - - _objectDefineProperty(__chakraLibrary.ArrayIterator.prototype, Symbol.toStringTag, setPrototype({ value: "Array Iterator", writable: false, enumerable: false, configurable: true }, null)); - - _objectDefineProperty(__chakraLibrary.ArrayIterator.prototype.next, 'length', setPrototype({ value: 0, writable: false, enumerable: false, configurable: true }, null)); - - _objectDefineProperty(__chakraLibrary.ArrayIterator.prototype.next, 'name', setPrototype({ value: "next", writable: false, enumerable: false, configurable: true }, null)); - - platform.registerChakraLibraryFunction("CreateArrayIterator", function (arrayObj, iterationKind) { - "use strict"; - return new __chakraLibrary.ArrayIterator(arrayObj, iterationKind); - }); - - platform.registerFunction(FunctionsEnum.ArrayKeys, function () { - "use strict"; - if (this === null || this === undefined) { - __chakraLibrary.raiseThis_NullOrUndefined("Array.prototype.keys"); - } - let o = __chakraLibrary.Object(this); - return __chakraLibrary.CreateArrayIterator(o, 0 /* ArrayIterationKind.Key*/); - }); - - platform.registerFunction(FunctionsEnum.ArrayValues, function () { - "use strict"; - if (this === null || this === undefined) { - __chakraLibrary.raiseThis_NullOrUndefined("Array.prototype.values"); - } - let o = __chakraLibrary.Object(this); - return __chakraLibrary.CreateArrayIterator(o, 1 /* ArrayIterationKind.Value*/); - }); - - platform.registerFunction(FunctionsEnum.ArrayEntries, function () { - "use strict"; - if (this === null || this === undefined) { - __chakraLibrary.raiseThis_NullOrUndefined("Array.prototype.entries"); - } - let o = __chakraLibrary.Object(this); - return __chakraLibrary.CreateArrayIterator(o, 2 /* ArrayIterationKind.KeyAndValue*/); - }); - - platform.registerFunction(FunctionsEnum.ArrayIndexOf, function (searchElement, fromIndex) { - // ECMAScript 2017 #sec-array.prototype.indexof - "use strict"; - - if (this === null || this === undefined) { - __chakraLibrary.raiseThis_NullOrUndefined("Array.prototype.indexOf"); - } - - let o; - if (__chakraLibrary.isArray(this)) { - o = this; - } else { - o = __chakraLibrary.Object(this); - } - - let len = __chakraLibrary.toLength(o["length"]); - if (len === 0) { - return -1; - } - - let n = __chakraLibrary.toInteger(fromIndex); - if (n >= len) { - return -1; - } - - let k; - - /* We refactored the code but it still respect the spec. - When using -0 or +0, the engine might think we are meaning - to use floating point numbers which can hurt performance. - So we refactored to use integers instead. */ - if (n === 0) { // Corresponds to "If n is -0, let k be +0" in the spec - k = 0; - } else if (n > 0) { // Corresponds to "If n >= 0, then [...] let k be n." - k = n; - } else { // Corresponds to "Else n < 0" - k = len + n; - - if (k < 0) { - k = 0; - } - } - - while (k < len) { - if (k in o) { - let elementK = o[k]; - - if (elementK === searchElement) { - return k; - } - } - - k++; - } - - return -1; - }); - - platform.registerFunction(FunctionsEnum.ArrayFilter, function (callbackfn, thisArg) { - // ECMAScript 2017 #sec-array.prototype.filter - "use strict"; - - if (this === null || this === undefined) { - __chakraLibrary.raiseThis_NullOrUndefined("Array.prototype.filter"); - } - - let o; - let len - if (__chakraLibrary.isArray(this)) { - o = this; - len = o.length; - } else { - o = __chakraLibrary.Object(this); - len = __chakraLibrary.GetLength(o); - } - - if (typeof callbackfn != "function") { - __chakraLibrary.raiseFunctionArgument_NeedFunction("Array.prototype.filter"); - } - - let a = __chakraLibrary.arraySpeciesCreate(o, 0); - let k = 0; - let to = 0; - - if (thisArg === undefined) { - // fast path. - while (k < len) { - if (k in o) { - let kValue = o[k]; - if (callbackfn(kValue, k, o)) { - __chakraLibrary.arrayCreateDataPropertyOrThrow(a, to, kValue); - to++; - } - } - k++; - } - } else { - // slow path. - // safe equivalent of calling "callbackfn.bind(thisArg)" - let boundCallback = __chakraLibrary.callInstanceFunc(__chakraLibrary.functionBind, callbackfn, thisArg); - while (k < len) { - if (k in o) { - let kValue = o[k]; - if (boundCallback(kValue, k, o)) { - __chakraLibrary.arrayCreateDataPropertyOrThrow(a, to, kValue); - to++; - } - } - k++; - } - } - - return a; - }); - -}); - -#endif -namespace Js -{ - const char Library_Bytecode_JsBuiltIn[] = { -/* 00000000 */ 0x43, 0x68, 0x42, 0x63, 0x8B, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 00000010 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0xFE, 0xCE, 0x02, 0x00, 0xFE, -/* 00000020 */ 0x72, 0x27, 0xFE, 0x72, 0x27, 0x35, 0x00, 0x00, 0x00, 0x5C, 0x05, 0x00, 0x00, 0x2A, 0x09, 0x00, -/* 00000030 */ 0x00, 0x8A, 0x1A, 0x00, 0x00, 0x2B, 0x12, 0x01, 0x00, 0x00, 0x00, 0x2A, 0x01, 0x00, 0x00, 0x00, -/* 00000040 */ 0x40, 0x01, 0x00, 0x00, 0x01, 0x58, 0x01, 0x00, 0x00, 0x00, 0x6C, 0x01, 0x00, 0x00, 0x00, 0x78, -/* 00000050 */ 0x01, 0x00, 0x00, 0x00, 0x8E, 0x01, 0x00, 0x00, 0x00, 0x9C, 0x01, 0x00, 0x00, 0x00, 0xBA, 0x01, -/* 00000060 */ 0x00, 0x00, 0x00, 0xD2, 0x01, 0x00, 0x00, 0x00, 0xDE, 0x01, 0x00, 0x00, 0x00, 0xFE, 0x01, 0x00, -/* 00000070 */ 0x00, 0x01, 0x12, 0x02, 0x00, 0x00, 0x00, 0x1C, 0x02, 0x00, 0x00, 0x01, 0x36, 0x02, 0x00, 0x00, -/* 00000080 */ 0x00, 0x46, 0x02, 0x00, 0x00, 0x01, 0x60, 0x02, 0x00, 0x00, 0x00, 0x70, 0x02, 0x00, 0x00, 0x01, -/* 00000090 */ 0x88, 0x02, 0x00, 0x00, 0x00, 0x96, 0x02, 0x00, 0x00, 0x01, 0xB2, 0x02, 0x00, 0x00, 0x00, 0xBC, -/* 000000A0 */ 0x02, 0x00, 0x00, 0x00, 0xC8, 0x02, 0x00, 0x00, 0x00, 0xDA, 0x02, 0x00, 0x00, 0x00, 0xF0, 0x02, -/* 000000B0 */ 0x00, 0x00, 0x00, 0x0A, 0x03, 0x00, 0x00, 0x00, 0x28, 0x03, 0x00, 0x00, 0x00, 0x36, 0x03, 0x00, -/* 000000C0 */ 0x00, 0x00, 0x40, 0x03, 0x00, 0x00, 0x01, 0x68, 0x03, 0x00, 0x00, 0x01, 0x8A, 0x03, 0x00, 0x00, -/* 000000D0 */ 0x01, 0xA4, 0x03, 0x00, 0x00, 0x01, 0xC2, 0x03, 0x00, 0x00, 0x01, 0xE2, 0x03, 0x00, 0x00, 0x01, -/* 000000E0 */ 0xF8, 0x03, 0x00, 0x00, 0x01, 0x1E, 0x04, 0x00, 0x00, 0x00, 0x5A, 0x04, 0x00, 0x00, 0x00, 0x64, -/* 000000F0 */ 0x04, 0x00, 0x00, 0x00, 0x8E, 0x04, 0x00, 0x00, 0x00, 0xBC, 0x04, 0x00, 0x00, 0x00, 0xEC, 0x04, -/* 00000100 */ 0x00, 0x00, 0x00, 0x1C, 0x05, 0x00, 0x00, 0x00, 0x4A, 0x05, 0x00, 0x00, 0x00, 0x5C, 0x05, 0x00, -/* 00000110 */ 0x00, 0x00, 0x47, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x62, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x20, 0x00, -/* 00000120 */ 0x63, 0x00, 0x6F, 0x00, 0x64, 0x00, 0x65, 0x00, 0x00, 0x00, 0x75, 0x00, 0x73, 0x00, 0x65, 0x00, -/* 00000130 */ 0x20, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x63, 0x00, 0x74, 0x00, 0x00, 0x00, -/* 00000140 */ 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x56, 0x00, 0x61, 0x00, 0x6C, 0x00, -/* 00000150 */ 0x75, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x73, 0x00, -/* 00000160 */ 0x73, 0x00, 0x4E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, -/* 00000170 */ 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x74, 0x00, 0x68, 0x00, -/* 00000180 */ 0x6F, 0x00, 0x64, 0x00, 0x4E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x76, 0x00, -/* 00000190 */ 0x61, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x61, 0x00, 0x72, 0x00, -/* 000001A0 */ 0x67, 0x00, 0x75, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x73, 0x00, 0x43, 0x00, -/* 000001B0 */ 0x6F, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x00, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, -/* 000001C0 */ 0x63, 0x00, 0x65, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x65, 0x00, -/* 000001D0 */ 0x00, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x61, 0x00, 0x73, 0x00, 0x00, 0x00, 0x53, 0x00, -/* 000001E0 */ 0x79, 0x00, 0x6D, 0x00, 0x62, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x2E, 0x00, 0x69, 0x00, 0x74, 0x00, -/* 000001F0 */ 0x65, 0x00, 0x72, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x41, 0x00, -/* 00000200 */ 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x4B, 0x00, 0x65, 0x00, 0x79, 0x00, 0x73, 0x00, -/* 00000210 */ 0x00, 0x00, 0x6B, 0x00, 0x65, 0x00, 0x79, 0x00, 0x73, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, -/* 00000220 */ 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x45, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, -/* 00000230 */ 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, -/* 00000240 */ 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, -/* 00000250 */ 0x49, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x65, 0x00, 0x78, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, -/* 00000260 */ 0x69, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x65, 0x00, 0x78, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, -/* 00000270 */ 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x46, 0x00, 0x69, 0x00, 0x6C, 0x00, -/* 00000280 */ 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x66, 0x00, 0x69, 0x00, 0x6C, 0x00, 0x74, 0x00, -/* 00000290 */ 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, -/* 000002A0 */ 0x49, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, -/* 000002B0 */ 0x00, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x78, 0x00, 0x74, 0x00, 0x00, 0x00, 0x76, 0x00, 0x61, 0x00, -/* 000002C0 */ 0x6C, 0x00, 0x75, 0x00, 0x65, 0x00, 0x00, 0x00, 0x77, 0x00, 0x72, 0x00, 0x69, 0x00, 0x74, 0x00, -/* 000002D0 */ 0x61, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x75, 0x00, -/* 000002E0 */ 0x6D, 0x00, 0x65, 0x00, 0x72, 0x00, 0x61, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 000002F0 */ 0x63, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x66, 0x00, 0x69, 0x00, 0x67, 0x00, 0x75, 0x00, 0x72, 0x00, -/* 00000300 */ 0x61, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, -/* 00000310 */ 0x61, 0x00, 0x79, 0x00, 0x20, 0x00, 0x49, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x61, 0x00, -/* 00000320 */ 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x67, 0x00, -/* 00000330 */ 0x74, 0x00, 0x68, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, -/* 00000340 */ 0x43, 0x00, 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x41, 0x00, 0x72, 0x00, -/* 00000350 */ 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x49, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x61, 0x00, -/* 00000360 */ 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x6C, 0x00, -/* 00000370 */ 0x49, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x65, 0x00, -/* 00000380 */ 0x46, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x00, 0x00, 0x66, 0x00, 0x75, 0x00, 0x6E, 0x00, -/* 00000390 */ 0x63, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x42, 0x00, 0x69, 0x00, 0x6E, 0x00, -/* 000003A0 */ 0x64, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x24, 0x00, 0x61, 0x00, 0x72, 0x00, 0x72, 0x00, -/* 000003B0 */ 0x61, 0x00, 0x79, 0x00, 0x4F, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x24, 0x00, 0x5F, 0x00, 0x5F, 0x00, -/* 000003C0 */ 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x24, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x78, 0x00, 0x74, 0x00, -/* 000003D0 */ 0x49, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x65, 0x00, 0x78, 0x00, 0x24, 0x00, 0x5F, 0x00, 0x5F, 0x00, -/* 000003E0 */ 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x24, 0x00, 0x6B, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x64, 0x00, -/* 000003F0 */ 0x24, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x24, 0x00, 0x69, 0x00, -/* 00000400 */ 0x6E, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x44, 0x00, -/* 00000410 */ 0x6F, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x24, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x41, 0x00, -/* 00000420 */ 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x20, 0x00, 0x49, 0x00, 0x74, 0x00, 0x65, 0x00, -/* 00000430 */ 0x72, 0x00, 0x61, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, -/* 00000440 */ 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, -/* 00000450 */ 0x6E, 0x00, 0x65, 0x00, 0x78, 0x00, 0x74, 0x00, 0x00, 0x00, 0x64, 0x00, 0x6F, 0x00, 0x6E, 0x00, -/* 00000460 */ 0x65, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x2E, 0x00, -/* 00000470 */ 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, -/* 00000480 */ 0x65, 0x00, 0x2E, 0x00, 0x6B, 0x00, 0x65, 0x00, 0x79, 0x00, 0x73, 0x00, 0x00, 0x00, 0x41, 0x00, -/* 00000490 */ 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, -/* 000004A0 */ 0x74, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x76, 0x00, -/* 000004B0 */ 0x61, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, -/* 000004C0 */ 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, -/* 000004D0 */ 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x65, 0x00, 0x6E, 0x00, -/* 000004E0 */ 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x65, 0x00, 0x73, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, -/* 000004F0 */ 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, -/* 00000500 */ 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x69, 0x00, 0x6E, 0x00, -/* 00000510 */ 0x64, 0x00, 0x65, 0x00, 0x78, 0x00, 0x4F, 0x00, 0x66, 0x00, 0x00, 0x00, 0x41, 0x00, 0x72, 0x00, -/* 00000520 */ 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, -/* 00000530 */ 0x6F, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x66, 0x00, 0x69, 0x00, -/* 00000540 */ 0x6C, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x66, 0x00, 0x75, 0x00, 0x6E, 0x00, -/* 00000550 */ 0x63, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0xF3, 0x00, 0x00, 0x00, -/* 00000560 */ 0x00, 0x6A, 0x00, 0x00, 0x00, 0x9B, 0x00, 0x00, 0x00, 0x05, 0x01, 0x00, 0x00, 0x6F, 0x01, 0x00, -/* 00000570 */ 0x00, 0x70, 0x01, 0x00, 0x00, 0x7E, 0x01, 0x00, 0x00, 0x7F, 0x01, 0x00, 0x00, 0x97, 0x01, 0x00, -/* 00000580 */ 0x00, 0xBF, 0x01, 0x00, 0x00, 0xC0, 0x01, 0x00, 0x00, 0xF5, 0x01, 0x00, 0x00, 0x4A, 0x02, 0x00, -/* 00000590 */ 0x00, 0x6C, 0x02, 0x00, 0x00, 0xAB, 0x02, 0x00, 0x00, 0xAC, 0x02, 0x00, 0x00, 0xC6, 0x02, 0x00, -/* 000005A0 */ 0x00, 0x6A, 0x03, 0x00, 0x00, 0xF0, 0x03, 0x00, 0x00, 0x7C, 0x04, 0x00, 0x00, 0x08, 0x05, 0x00, -/* 000005B0 */ 0x00, 0x92, 0x05, 0x00, 0x00, 0x99, 0x05, 0x00, 0x00, 0x9A, 0x05, 0x00, 0x00, 0xFB, 0x05, 0x00, -/* 000005C0 */ 0x00, 0x11, 0x06, 0x00, 0x00, 0x93, 0x06, 0x00, 0x00, 0xBB, 0x06, 0x00, 0x00, 0xDD, 0x06, 0x00, -/* 000005D0 */ 0x00, 0x06, 0x07, 0x00, 0x00, 0xBA, 0x07, 0x00, 0x00, 0xC2, 0x07, 0x00, 0x00, 0xC3, 0x07, 0x00, -/* 000005E0 */ 0x00, 0x39, 0x08, 0x00, 0x00, 0x76, 0x08, 0x00, 0x00, 0x9C, 0x08, 0x00, 0x00, 0xEB, 0x08, 0x00, -/* 000005F0 */ 0x00, 0x37, 0x09, 0x00, 0x00, 0x8B, 0x09, 0x00, 0x00, 0xF1, 0x09, 0x00, 0x00, 0x3E, 0x0A, 0x00, -/* 00000600 */ 0x00, 0x8E, 0x0A, 0x00, 0x00, 0x8F, 0x0A, 0x00, 0x00, 0xDA, 0x0A, 0x00, 0x00, 0x73, 0x0B, 0x00, -/* 00000610 */ 0x00, 0xB5, 0x0B, 0x00, 0x00, 0xCC, 0x0B, 0x00, 0x00, 0xED, 0x0B, 0x00, 0x00, 0x0B, 0x0C, 0x00, -/* 00000620 */ 0x00, 0x29, 0x0C, 0x00, 0x00, 0x2A, 0x0C, 0x00, 0x00, 0x6F, 0x0C, 0x00, 0x00, 0xDD, 0x0C, 0x00, -/* 00000630 */ 0x00, 0xEF, 0x0C, 0x00, 0x00, 0xF0, 0x0C, 0x00, 0x00, 0x1A, 0x0D, 0x00, 0x00, 0x1B, 0x0D, 0x00, -/* 00000640 */ 0x00, 0x50, 0x0D, 0x00, 0x00, 0x8D, 0x0D, 0x00, 0x00, 0xA6, 0x0D, 0x00, 0x00, 0xD9, 0x0D, 0x00, -/* 00000650 */ 0x00, 0x3D, 0x0E, 0x00, 0x00, 0x3E, 0x0E, 0x00, 0x00, 0xAA, 0x0E, 0x00, 0x00, 0xDF, 0x0E, 0x00, -/* 00000660 */ 0x00, 0xE0, 0x0E, 0x00, 0x00, 0x17, 0x0F, 0x00, 0x00, 0x18, 0x0F, 0x00, 0x00, 0x63, 0x0F, 0x00, -/* 00000670 */ 0x00, 0xA8, 0x0F, 0x00, 0x00, 0x23, 0x10, 0x00, 0x00, 0x65, 0x10, 0x00, 0x00, 0x86, 0x10, 0x00, -/* 00000680 */ 0x00, 0xBA, 0x10, 0x00, 0x00, 0xF3, 0x10, 0x00, 0x00, 0x4A, 0x11, 0x00, 0x00, 0x64, 0x11, 0x00, -/* 00000690 */ 0x00, 0x81, 0x11, 0x00, 0x00, 0xB6, 0x11, 0x00, 0x00, 0xF8, 0x11, 0x00, 0x00, 0x0E, 0x12, 0x00, -/* 000006A0 */ 0x00, 0x20, 0x12, 0x00, 0x00, 0x2F, 0x12, 0x00, 0x00, 0x4B, 0x12, 0x00, 0x00, 0x6A, 0x12, 0x00, -/* 000006B0 */ 0x00, 0x89, 0x12, 0x00, 0x00, 0x9A, 0x12, 0x00, 0x00, 0xA1, 0x12, 0x00, 0x00, 0xA2, 0x12, 0x00, -/* 000006C0 */ 0x00, 0x63, 0x13, 0x00, 0x00, 0x64, 0x13, 0x00, 0x00, 0x11, 0x14, 0x00, 0x00, 0x12, 0x14, 0x00, -/* 000006D0 */ 0x00, 0xC2, 0x14, 0x00, 0x00, 0xC3, 0x14, 0x00, 0x00, 0x2A, 0x15, 0x00, 0x00, 0x40, 0x15, 0x00, -/* 000006E0 */ 0x00, 0x8B, 0x15, 0x00, 0x00, 0x93, 0x15, 0x00, 0x00, 0x94, 0x15, 0x00, 0x00, 0xD9, 0x15, 0x00, -/* 000006F0 */ 0x00, 0xEF, 0x15, 0x00, 0x00, 0x22, 0x16, 0x00, 0x00, 0x71, 0x16, 0x00, 0x00, 0x7B, 0x16, 0x00, -/* 00000700 */ 0x00, 0xA9, 0x16, 0x00, 0x00, 0xFF, 0x16, 0x00, 0x00, 0x07, 0x17, 0x00, 0x00, 0x08, 0x17, 0x00, -/* 00000710 */ 0x00, 0x4F, 0x17, 0x00, 0x00, 0x65, 0x17, 0x00, 0x00, 0x98, 0x17, 0x00, 0x00, 0xE9, 0x17, 0x00, -/* 00000720 */ 0x00, 0xF3, 0x17, 0x00, 0x00, 0x21, 0x18, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x81, 0x18, 0x00, -/* 00000730 */ 0x00, 0x82, 0x18, 0x00, 0x00, 0xCA, 0x18, 0x00, 0x00, 0xE0, 0x18, 0x00, 0x00, 0x13, 0x19, 0x00, -/* 00000740 */ 0x00, 0x65, 0x19, 0x00, 0x00, 0x6F, 0x19, 0x00, 0x00, 0x9D, 0x19, 0x00, 0x00, 0xFB, 0x19, 0x00, -/* 00000750 */ 0x00, 0x03, 0x1A, 0x00, 0x00, 0x04, 0x1A, 0x00, 0x00, 0x64, 0x1A, 0x00, 0x00, 0x9C, 0x1A, 0x00, -/* 00000760 */ 0x00, 0xB2, 0x1A, 0x00, 0x00, 0xB3, 0x1A, 0x00, 0x00, 0xE6, 0x1A, 0x00, 0x00, 0x38, 0x1B, 0x00, -/* 00000770 */ 0x00, 0x42, 0x1B, 0x00, 0x00, 0x43, 0x1B, 0x00, 0x00, 0x52, 0x1B, 0x00, 0x00, 0x7F, 0x1B, 0x00, -/* 00000780 */ 0x00, 0x95, 0x1B, 0x00, 0x00, 0xA6, 0x1B, 0x00, 0x00, 0xD4, 0x1B, 0x00, 0x00, 0xDE, 0x1B, 0x00, -/* 00000790 */ 0x00, 0xDF, 0x1B, 0x00, 0x00, 0x18, 0x1C, 0x00, 0x00, 0x31, 0x1C, 0x00, 0x00, 0x48, 0x1C, 0x00, -/* 000007A0 */ 0x00, 0x52, 0x1C, 0x00, 0x00, 0x53, 0x1C, 0x00, 0x00, 0x89, 0x1C, 0x00, 0x00, 0xA1, 0x1C, 0x00, -/* 000007B0 */ 0x00, 0xB8, 0x1C, 0x00, 0x00, 0xC2, 0x1C, 0x00, 0x00, 0xC3, 0x1C, 0x00, 0x00, 0xD2, 0x1C, 0x00, -/* 000007C0 */ 0x00, 0xD3, 0x1C, 0x00, 0x00, 0x14, 0x1D, 0x00, 0x00, 0x5A, 0x1D, 0x00, 0x00, 0x9F, 0x1D, 0x00, -/* 000007D0 */ 0x00, 0xD7, 0x1D, 0x00, 0x00, 0x2B, 0x1E, 0x00, 0x00, 0x3E, 0x1E, 0x00, 0x00, 0x90, 0x1E, 0x00, -/* 000007E0 */ 0x00, 0xA3, 0x1E, 0x00, 0x00, 0xDE, 0x1E, 0x00, 0x00, 0xF7, 0x1E, 0x00, 0x00, 0xF8, 0x1E, 0x00, -/* 000007F0 */ 0x00, 0x11, 0x1F, 0x00, 0x00, 0x28, 0x1F, 0x00, 0x00, 0x36, 0x1F, 0x00, 0x00, 0x40, 0x1F, 0x00, -/* 00000800 */ 0x00, 0x41, 0x1F, 0x00, 0x00, 0x5B, 0x1F, 0x00, 0x00, 0x75, 0x1F, 0x00, 0x00, 0x9A, 0x1F, 0x00, -/* 00000810 */ 0x00, 0x9B, 0x1F, 0x00, 0x00, 0xCD, 0x1F, 0x00, 0x00, 0xEB, 0x1F, 0x00, 0x00, 0xFD, 0x1F, 0x00, -/* 00000820 */ 0x00, 0x0B, 0x20, 0x00, 0x00, 0x0C, 0x20, 0x00, 0x00, 0x1D, 0x20, 0x00, 0x00, 0x27, 0x20, 0x00, -/* 00000830 */ 0x00, 0x28, 0x20, 0x00, 0x00, 0x3B, 0x20, 0x00, 0x00, 0x43, 0x20, 0x00, 0x00, 0x44, 0x20, 0x00, -/* 00000840 */ 0x00, 0x9E, 0x20, 0x00, 0x00, 0xD5, 0x20, 0x00, 0x00, 0xEB, 0x20, 0x00, 0x00, 0xEC, 0x20, 0x00, -/* 00000850 */ 0x00, 0x1F, 0x21, 0x00, 0x00, 0x70, 0x21, 0x00, 0x00, 0x7A, 0x21, 0x00, 0x00, 0x7B, 0x21, 0x00, -/* 00000860 */ 0x00, 0x8A, 0x21, 0x00, 0x00, 0x9A, 0x21, 0x00, 0x00, 0xC7, 0x21, 0x00, 0x00, 0xDD, 0x21, 0x00, -/* 00000870 */ 0x00, 0xF9, 0x21, 0x00, 0x00, 0x0A, 0x22, 0x00, 0x00, 0x38, 0x22, 0x00, 0x00, 0x68, 0x22, 0x00, -/* 00000880 */ 0x00, 0x72, 0x22, 0x00, 0x00, 0x7B, 0x22, 0x00, 0x00, 0xAA, 0x22, 0x00, 0x00, 0x04, 0x23, 0x00, -/* 00000890 */ 0x00, 0x0E, 0x23, 0x00, 0x00, 0x0F, 0x23, 0x00, 0x00, 0x49, 0x23, 0x00, 0x00, 0x5C, 0x23, 0x00, -/* 000008A0 */ 0x00, 0x70, 0x23, 0x00, 0x00, 0x71, 0x23, 0x00, 0x00, 0x96, 0x23, 0x00, 0x00, 0xB0, 0x23, 0x00, -/* 000008B0 */ 0x00, 0xCE, 0x23, 0x00, 0x00, 0xEC, 0x23, 0x00, 0x00, 0x13, 0x24, 0x00, 0x00, 0x47, 0x24, 0x00, -/* 000008C0 */ 0x00, 0x9E, 0x24, 0x00, 0x00, 0xBC, 0x24, 0x00, 0x00, 0xD2, 0x24, 0x00, 0x00, 0xE4, 0x24, 0x00, -/* 000008D0 */ 0x00, 0xF9, 0x24, 0x00, 0x00, 0x07, 0x25, 0x00, 0x00, 0x18, 0x25, 0x00, 0x00, 0x32, 0x25, 0x00, -/* 000008E0 */ 0x00, 0x77, 0x25, 0x00, 0x00, 0xEC, 0x25, 0x00, 0x00, 0x0A, 0x26, 0x00, 0x00, 0x28, 0x26, 0x00, -/* 000008F0 */ 0x00, 0x4F, 0x26, 0x00, 0x00, 0x86, 0x26, 0x00, 0x00, 0xDD, 0x26, 0x00, 0x00, 0xFB, 0x26, 0x00, -/* 00000900 */ 0x00, 0x11, 0x27, 0x00, 0x00, 0x23, 0x27, 0x00, 0x00, 0x38, 0x27, 0x00, 0x00, 0x46, 0x27, 0x00, -/* 00000910 */ 0x00, 0x50, 0x27, 0x00, 0x00, 0x51, 0x27, 0x00, 0x00, 0x63, 0x27, 0x00, 0x00, 0x6B, 0x27, 0x00, -/* 00000920 */ 0x00, 0x6E, 0x27, 0x00, 0x00, 0x72, 0x27, 0x00, 0x00, 0x00, 0x0A, 0xB9, 0x0C, 0x00, 0x00, 0x00, -/* 00000930 */ 0x08, 0x04, 0x00, 0xA8, 0x41, 0xC0, 0x00, 0xFE, 0xCE, 0x02, 0x00, 0xFE, 0x70, 0x01, 0x01, 0xFF, -/* 00000940 */ 0x00, 0x10, 0x01, 0x00, 0xFE, 0x70, 0x01, 0xFE, 0x02, 0x26, 0xFE, 0x02, 0x26, 0x40, 0x01, 0x04, -/* 00000950 */ 0x04, 0x05, 0x05, 0x03, 0x05, 0xFE, 0xCF, 0x02, 0x0A, 0x09, 0xA6, 0x00, 0xD3, 0x00, 0x04, 0xFA, -/* 00000960 */ 0x04, 0x24, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00, 0x6E, 0x09, 0x00, 0x00, 0xBF, 0x1C, -/* 00000970 */ 0x00, 0xC0, 0x13, 0x88, 0x25, 0x00, 0x07, 0x01, 0xA2, 0x41, 0xD1, 0x00, 0x01, 0xFE, 0x80, 0x01, -/* 00000980 */ 0x08, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x80, 0x01, 0xFE, 0xEF, 0x25, 0xFE, 0xEF, -/* 00000990 */ 0x25, 0x40, 0x0D, 0x23, 0x2C, 0x09, 0xFB, 0xE2, 0x2B, 0x2B, 0x2B, 0x2B, 0x0A, 0x2B, 0x08, 0x06, -/* 000009A0 */ 0xFE, 0xD0, 0x02, 0x06, 0xFE, 0xD1, 0x02, 0x06, 0xFE, 0xD2, 0x02, 0x06, 0xFE, 0xD3, 0x02, 0x06, -/* 000009B0 */ 0xFE, 0xD4, 0x02, 0x06, 0xFE, 0xD5, 0x02, 0x01, 0x00, 0x06, 0xFE, 0xD6, 0x02, 0x0B, 0x06, 0xFE, -/* 000009C0 */ 0xD7, 0x02, 0x05, 0xFE, 0xD8, 0x02, 0x07, 0x06, 0xFE, 0xD9, 0x02, 0x06, 0xFE, 0xDA, 0x02, 0x06, -/* 000009D0 */ 0xFE, 0xDB, 0x02, 0x06, 0xFE, 0xDC, 0x02, 0x06, 0xFE, 0xDD, 0x02, 0x06, 0xFE, 0xDE, 0x02, 0x01, -/* 000009E0 */ 0x01, 0x06, 0xFE, 0xDF, 0x02, 0x06, 0xFE, 0xE0, 0x02, 0x06, 0xFE, 0xE1, 0x02, 0x06, 0xFE, 0xE2, -/* 000009F0 */ 0x02, 0x06, 0xFE, 0xE3, 0x02, 0x06, 0xFE, 0xE4, 0x02, 0x06, 0xFE, 0xE5, 0x02, 0x0C, 0x06, 0xFE, -/* 00000A00 */ 0xE6, 0x02, 0x05, 0xFE, 0xE7, 0x02, 0x06, 0xFE, 0xE8, 0x02, 0x06, 0xFE, 0xE9, 0x02, 0x06, 0xFE, -/* 00000A10 */ 0xEA, 0x02, 0xFE, 0xC3, 0x03, 0x4F, 0x29, 0x5F, 0x2C, 0x23, 0x00, 0x47, 0x24, 0x2C, 0x5F, 0x2C, -/* 00000A20 */ 0x24, 0x01, 0x47, 0x25, 0x2C, 0x5F, 0x2C, 0x24, 0x02, 0x47, 0x26, 0x2C, 0x5F, 0x2C, 0x24, 0x03, -/* 00000A30 */ 0x47, 0x27, 0x2C, 0x5F, 0x2C, 0x24, 0x04, 0x47, 0x28, 0x2C, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 00000A40 */ 0x00, 0x00, 0x00, 0x2C, 0x00, 0x00, 0x00, 0x47, 0x2D, 0x25, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, -/* 00000A50 */ 0xCB, 0x1C, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x00, 0x00, 0x78, 0x05, 0x2E, -/* 00000A60 */ 0x05, 0x78, 0x07, 0x2E, 0x06, 0x78, 0x09, 0x2E, 0x07, 0x78, 0x0B, 0x2E, 0x08, 0x78, 0x0D, 0x2E, -/* 00000A70 */ 0x09, 0x5A, 0x01, 0x2E, 0x5A, 0x02, 0x0E, 0x1F, 0x03, 0x2D, 0x2D, 0x78, 0x2D, 0x2C, 0x0A, 0x47, -/* 00000A80 */ 0x2D, 0x25, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0x38, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, -/* 00000A90 */ 0x00, 0x2E, 0x00, 0x00, 0x00, 0x78, 0x05, 0x2E, 0x05, 0x78, 0x10, 0x2E, 0x06, 0x78, 0x09, 0x2E, -/* 00000AA0 */ 0x07, 0x78, 0x0B, 0x2E, 0x08, 0x5A, 0x01, 0x2E, 0x5A, 0x02, 0x0E, 0x1F, 0x03, 0x2D, 0x2D, 0x78, -/* 00000AB0 */ 0x2D, 0x2C, 0x0B, 0x47, 0x2D, 0x25, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0x50, 0x00, 0x00, -/* 00000AC0 */ 0x00, 0x03, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x00, 0x00, 0x78, 0x05, 0x2E, 0x05, 0x78, 0x12, 0x2E, -/* 00000AD0 */ 0x06, 0x78, 0x09, 0x2E, 0x07, 0x78, 0x0B, 0x2E, 0x08, 0x5A, 0x01, 0x2E, 0x5A, 0x02, 0x0E, 0x1F, -/* 00000AE0 */ 0x03, 0x2D, 0x2D, 0x78, 0x2D, 0x2C, 0x0C, 0x47, 0x2D, 0x25, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, -/* 00000AF0 */ 0xCB, 0x68, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x00, 0x00, 0x78, 0x05, 0x2E, -/* 00000B00 */ 0x05, 0x78, 0x14, 0x2E, 0x06, 0x78, 0x15, 0x2E, 0x07, 0x78, 0x0B, 0x2E, 0x08, 0x5A, 0x01, 0x2E, -/* 00000B10 */ 0x5A, 0x02, 0x0E, 0x1F, 0x03, 0x2D, 0x2D, 0x78, 0x2D, 0x2C, 0x0D, 0x47, 0x2D, 0x25, 0x07, 0x03, -/* 00000B20 */ 0x00, 0x5A, 0x00, 0x02, 0xCB, 0x80, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x00, -/* 00000B30 */ 0x00, 0x78, 0x05, 0x2E, 0x05, 0x78, 0x17, 0x2E, 0x06, 0x78, 0x15, 0x2E, 0x07, 0x78, 0x0B, 0x2E, -/* 00000B40 */ 0x08, 0x5A, 0x01, 0x2E, 0x5A, 0x02, 0x0E, 0x1F, 0x03, 0x2D, 0x2D, 0x78, 0x2D, 0x2C, 0x0E, 0x47, -/* 00000B50 */ 0x29, 0x2C, 0x6A, 0x2C, 0x24, 0x0F, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x24, 0x5A, 0x01, 0x18, 0xD3, -/* 00000B60 */ 0x00, 0x2D, 0x5A, 0x02, 0x2D, 0x1F, 0x03, 0xFF, 0x2C, 0x6A, 0x2C, 0x24, 0x10, 0x07, 0x01, 0x00, -/* 00000B70 */ 0x5A, 0x00, 0x24, 0x1F, 0x01, 0x2C, 0x2C, 0x47, 0x2A, 0x2C, 0x01, 0x49, 0x01, 0x2C, 0x5F, 0x2C, -/* 00000B80 */ 0x2C, 0x11, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x02, 0x5A, 0x01, 0x2A, 0x1F, 0x02, 0x2D, 0x28, 0x74, -/* 00000B90 */ 0x2D, 0x2C, 0x12, 0x01, 0x49, 0x01, 0x2C, 0x5F, 0x2D, 0x24, 0x13, 0x74, 0x2D, 0x2C, 0x14, 0x01, -/* 00000BA0 */ 0x49, 0x01, 0x2C, 0x5F, 0x2D, 0x24, 0x15, 0x74, 0x2D, 0x2C, 0x16, 0x01, 0x49, 0x01, 0x2C, 0x5F, -/* 00000BB0 */ 0x2D, 0x24, 0x17, 0x74, 0x2D, 0x2C, 0x18, 0x01, 0x49, 0x01, 0x2C, 0x5F, 0x2D, 0x24, 0x19, 0x74, -/* 00000BC0 */ 0x2D, 0x2C, 0x1A, 0x01, 0x49, 0x01, 0x2C, 0x5F, 0x2D, 0x24, 0x1B, 0x74, 0x2D, 0x2C, 0x1C, 0x47, -/* 00000BD0 */ 0x2C, 0x26, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x01, 0x49, 0x01, 0x2D, 0x5F, 0x2D, 0x2D, 0x1D, -/* 00000BE0 */ 0x5F, 0x2D, 0x2D, 0x1E, 0x5A, 0x01, 0x2D, 0x5A, 0x02, 0x19, 0x47, 0x2D, 0x25, 0x07, 0x03, 0x00, -/* 00000BF0 */ 0x5A, 0x00, 0x02, 0xCB, 0x98, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x00, 0x00, -/* 00000C00 */ 0xD6, 0x01, 0x2F, 0x2E, 0x78, 0x2F, 0x2E, 0x1F, 0x78, 0x0B, 0x2E, 0x20, 0x78, 0x1D, 0x2E, 0x21, -/* 00000C10 */ 0x78, 0x0B, 0x2E, 0x22, 0x5A, 0x01, 0x2E, 0x5A, 0x02, 0x0E, 0x1F, 0x03, 0x2D, 0x2D, 0x5A, 0x03, -/* 00000C20 */ 0x2D, 0x1F, 0x04, 0xFF, 0x2C, 0x47, 0x2C, 0x26, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x01, 0x49, -/* 00000C30 */ 0x01, 0x2D, 0x5F, 0x2D, 0x2D, 0x1D, 0x5F, 0x2D, 0x2D, 0x1E, 0x5A, 0x01, 0x2D, 0x5F, 0x2D, 0x27, -/* 00000C40 */ 0x23, 0x5A, 0x02, 0x2D, 0x47, 0x2D, 0x25, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0xB0, 0x00, -/* 00000C50 */ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x00, 0x00, 0x78, 0x1F, 0x2E, 0x1F, 0x78, 0x1D, -/* 00000C60 */ 0x2E, 0x20, 0x78, 0x1D, 0x2E, 0x21, 0x78, 0x0B, 0x2E, 0x22, 0x5A, 0x01, 0x2E, 0x5A, 0x02, 0x0E, -/* 00000C70 */ 0x1F, 0x03, 0x2D, 0x2D, 0x5A, 0x03, 0x2D, 0x1F, 0x04, 0xFF, 0x2C, 0x47, 0x2C, 0x26, 0x07, 0x04, -/* 00000C80 */ 0x00, 0x5A, 0x00, 0x02, 0x01, 0x49, 0x01, 0x2D, 0x5F, 0x2D, 0x2D, 0x1D, 0x5F, 0x2D, 0x2D, 0x1E, -/* 00000C90 */ 0x5F, 0x2D, 0x2D, 0x24, 0x5A, 0x01, 0x2D, 0x5A, 0x02, 0x20, 0x47, 0x2D, 0x25, 0x07, 0x03, 0x00, -/* 00000CA0 */ 0x5A, 0x00, 0x02, 0xCB, 0xC8, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x00, 0x00, -/* 00000CB0 */ 0x78, 0x09, 0x2E, 0x1F, 0x78, 0x1D, 0x2E, 0x20, 0x78, 0x1D, 0x2E, 0x21, 0x78, 0x0B, 0x2E, 0x22, -/* 00000CC0 */ 0x5A, 0x01, 0x2E, 0x5A, 0x02, 0x0E, 0x1F, 0x03, 0x2D, 0x2D, 0x5A, 0x03, 0x2D, 0x1F, 0x04, 0xFF, -/* 00000CD0 */ 0x2C, 0x47, 0x2C, 0x26, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x02, 0x01, 0x49, 0x01, 0x2D, 0x5F, 0x2D, -/* 00000CE0 */ 0x2D, 0x1D, 0x5F, 0x2D, 0x2D, 0x1E, 0x5F, 0x2D, 0x2D, 0x24, 0x5A, 0x01, 0x2D, 0x5A, 0x02, 0x21, -/* 00000CF0 */ 0x47, 0x2D, 0x25, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x02, 0xCB, 0xE0, 0x00, 0x00, 0x00, 0x09, 0x00, -/* 00000D00 */ 0x00, 0x00, 0x2E, 0x00, 0x00, 0x00, 0x78, 0x19, 0x2E, 0x1F, 0x78, 0x1D, 0x2E, 0x20, 0x78, 0x1D, -/* 00000D10 */ 0x2E, 0x21, 0x78, 0x0B, 0x2E, 0x22, 0x5A, 0x01, 0x2E, 0x5A, 0x02, 0x0E, 0x1F, 0x03, 0x2D, 0x2D, -/* 00000D20 */ 0x5A, 0x03, 0x2D, 0x1F, 0x04, 0xFF, 0x2C, 0x6A, 0x2C, 0x24, 0x0F, 0x07, 0x03, 0x00, 0x5A, 0x00, -/* 00000D30 */ 0x24, 0x5A, 0x01, 0x22, 0xD3, 0x02, 0x2D, 0x5A, 0x02, 0x2D, 0x1F, 0x03, 0xFF, 0x2C, 0x47, 0x2D, -/* 00000D40 */ 0x24, 0x6A, 0x2C, 0x2D, 0x25, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x2D, 0x5F, 0x2E, 0x29, 0x26, 0x5A, -/* 00000D50 */ 0x01, 0x2E, 0xD3, 0x03, 0x2E, 0x5A, 0x02, 0x2E, 0x1F, 0x03, 0xFF, 0x2C, 0x47, 0x2D, 0x24, 0x6A, -/* 00000D60 */ 0x2C, 0x2D, 0x25, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x2D, 0x5F, 0x2E, 0x29, 0x27, 0x5A, 0x01, 0x2E, -/* 00000D70 */ 0xD3, 0x04, 0x2E, 0x5A, 0x02, 0x2E, 0x1F, 0x03, 0xFF, 0x2C, 0x47, 0x2D, 0x24, 0x6A, 0x2C, 0x2D, -/* 00000D80 */ 0x25, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x2D, 0x5F, 0x2E, 0x29, 0x28, 0x5A, 0x01, 0x2E, 0xD3, 0x05, -/* 00000D90 */ 0x2E, 0x5A, 0x02, 0x2E, 0x1F, 0x03, 0xFF, 0x2C, 0x47, 0x2D, 0x24, 0x6A, 0x2C, 0x2D, 0x25, 0x07, -/* 00000DA0 */ 0x03, 0x00, 0x5A, 0x00, 0x2D, 0x5F, 0x2E, 0x29, 0x29, 0x5A, 0x01, 0x2E, 0xD3, 0x06, 0x2E, 0x5A, -/* 00000DB0 */ 0x02, 0x2E, 0x1F, 0x03, 0xFF, 0x2C, 0x47, 0x2D, 0x24, 0x6A, 0x2C, 0x2D, 0x25, 0x07, 0x03, 0x00, -/* 00000DC0 */ 0x5A, 0x00, 0x2D, 0x5F, 0x2E, 0x29, 0x2A, 0x5A, 0x01, 0x2E, 0xD3, 0x07, 0x2E, 0x5A, 0x02, 0x2E, -/* 00000DD0 */ 0x1F, 0x03, 0xFF, 0x2C, 0xA6, 0x00, 0x24, 0x00, 0x0A, 0xF8, 0x00, 0xE0, 0x00, 0x00, 0x00, 0x03, -/* 00000DE0 */ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, -/* 00000DF0 */ 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0xC8, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, -/* 00000E00 */ 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, -/* 00000E10 */ 0x01, 0x00, 0x00, 0xB0, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, -/* 00000E20 */ 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x98, -/* 00000E30 */ 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x82, -/* 00000E40 */ 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x03, -/* 00000E50 */ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4B, 0x02, 0x00, 0x00, 0x50, 0x02, 0x00, 0x00, 0x4A, -/* 00000E60 */ 0x02, 0x00, 0x00, 0x4C, 0x02, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, -/* 00000E70 */ 0x00, 0x00, 0x00, 0x4B, 0x02, 0x00, 0x00, 0x50, 0x02, 0x00, 0x00, 0x4A, 0x02, 0x00, 0x00, 0x4C, -/* 00000E80 */ 0x02, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4B, -/* 00000E90 */ 0x02, 0x00, 0x00, 0x50, 0x02, 0x00, 0x00, 0x4A, 0x02, 0x00, 0x00, 0x4C, 0x02, 0x00, 0x00, 0x38, -/* 00000EA0 */ 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4B, 0x02, 0x00, 0x00, 0x50, -/* 00000EB0 */ 0x02, 0x00, 0x00, 0x4A, 0x02, 0x00, 0x00, 0x4C, 0x02, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x03, -/* 00000EC0 */ 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4B, 0x02, 0x00, 0x00, 0x50, 0x02, 0x00, 0x00, 0x4A, -/* 00000ED0 */ 0x02, 0x00, 0x00, 0x4C, 0x02, 0x00, 0x00, 0x49, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, -/* 00000EE0 */ 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0x02, 0x00, 0x00, 0xD9, 0x02, 0x00, 0x00, 0xDB, -/* 00000EF0 */ 0x02, 0x00, 0x00, 0xDD, 0x02, 0x00, 0x00, 0xDF, 0x02, 0x00, 0x00, 0x52, 0xFE, 0x81, 0x02, 0xFE, -/* 00000F00 */ 0x68, 0x02, 0xFE, 0x54, 0x01, 0xFE, 0x67, 0x02, 0xFE, 0x4B, 0x02, 0xFE, 0x50, 0x02, 0xFE, 0x4A, -/* 00000F10 */ 0x02, 0xFE, 0x4C, 0x02, 0xFE, 0x49, 0x02, 0xFE, 0xD0, 0x02, 0xFE, 0xD9, 0x02, 0xFE, 0xDB, 0x02, -/* 00000F20 */ 0xFE, 0xDD, 0x02, 0xFE, 0xDF, 0x02, 0xFE, 0x51, 0x02, 0xFE, 0x4D, 0x02, 0xFE, 0xE1, 0x02, 0xFE, -/* 00000F30 */ 0x15, 0x01, 0xFE, 0x8A, 0x02, 0xFE, 0x8A, 0x02, 0xFE, 0x91, 0x02, 0xFE, 0x91, 0x02, 0xFE, 0x92, -/* 00000F40 */ 0x02, 0xFE, 0x92, 0x02, 0xFE, 0x84, 0x02, 0xFE, 0xEB, 0x02, 0xFE, 0x66, 0x02, 0xFE, 0xEC, 0x02, -/* 00000F50 */ 0xFE, 0xE1, 0x02, 0xFE, 0x15, 0x01, 0xFE, 0x83, 0x01, 0xFE, 0x82, 0x01, 0xFE, 0x80, 0x01, 0xFE, -/* 00000F60 */ 0x81, 0x01, 0xFE, 0x67, 0x01, 0xF9, 0xFE, 0x52, 0x02, 0xFE, 0xD9, 0x02, 0xFE, 0xD0, 0x02, 0xFE, -/* 00000F70 */ 0xDB, 0x02, 0xFE, 0xDD, 0x02, 0xFE, 0xDF, 0x02, 0xFE, 0x9B, 0x01, 0x19, 0x02, 0x00, 0x00, 0x00, -/* 00000F80 */ 0x07, 0x00, 0x29, 0x00, 0x07, 0x00, 0x35, 0x00, 0x07, 0x00, 0x55, 0x00, 0x07, 0x00, 0x22, 0x00, -/* 00000F90 */ 0x07, 0x00, 0x40, 0x00, 0x18, 0x01, 0xEE, 0x02, 0x17, 0x00, 0x9F, 0x02, 0x11, 0x00, 0x63, 0x00, -/* 00000FA0 */ 0x19, 0x00, 0x4F, 0x00, 0x0C, 0x00, 0x4C, 0x00, 0x0C, 0x00, 0x54, 0x00, 0x0C, 0x00, 0x66, 0x00, -/* 00000FB0 */ 0x0C, 0x00, 0x4D, 0x00, 0x0C, 0x00, 0x51, 0x00, 0x56, 0x00, 0x13, 0x08, 0x56, 0x00, 0xC2, 0x00, -/* 00000FC0 */ 0x56, 0x00, 0xAE, 0x00, 0x56, 0x00, 0xB1, 0x00, 0x17, 0x00, 0xD1, 0x00, 0x1E, 0x00, 0x74, 0x01, -/* 00000FD0 */ 0x1E, 0x00, 0x7A, 0x01, 0x1E, 0x00, 0x82, 0x01, 0x1E, 0x00, 0x40, 0x06, 0x20, 0x00, 0x26, 0x07, -/* 00000FE0 */ 0x00, 0xDA, 0x19, 0x00, 0x00, 0x3B, 0x17, 0x00, 0x00, 0xE1, 0x16, 0x00, 0x00, 0x24, 0x16, 0x00, -/* 00000FF0 */ 0x00, 0x67, 0x15, 0x00, 0x00, 0xAA, 0x14, 0x00, 0x00, 0xB4, 0x12, 0x00, 0x00, 0x01, 0x10, 0x00, -/* 00001000 */ 0x00, 0xBF, 0x3C, 0x02, 0xC2, 0x43, 0xA0, 0x09, 0x00, 0xB8, 0x39, 0xA2, 0x41, 0xD1, 0x00, 0x09, -/* 00001010 */ 0xFE, 0x7D, 0x20, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x7D, 0x20, 0xFE, 0xEB, 0x06, -/* 00001020 */ 0xFE, 0xEB, 0x06, 0x01, 0x10, 0x09, 0x14, 0x05, 0x8A, 0x7D, 0x32, 0x02, 0x02, 0x0A, 0x0A, 0x0A, -/* 00001030 */ 0x0A, 0x02, 0x14, 0xE4, 0xFE, 0x3A, 0x01, 0xFE, 0x63, 0x01, 0xFE, 0xB9, 0x01, 0x05, 0xFE, 0xCF, -/* 00001040 */ 0x02, 0x07, 0x05, 0xFE, 0xF7, 0x02, 0x06, 0xFE, 0xF8, 0x02, 0x01, 0x00, 0x08, 0x01, 0x01, 0xFE, -/* 00001050 */ 0xC3, 0x01, 0x59, 0x16, 0xB1, 0x0B, 0x16, 0x4F, 0x0C, 0x4F, 0x0D, 0x4F, 0x0E, 0x4F, 0x0F, 0x4F, -/* 00001060 */ 0x10, 0x4F, 0x11, 0x4F, 0x12, 0x4F, 0x13, 0x14, 0x0A, 0x00, 0x0B, 0x03, 0xA6, 0x16, 0x14, 0x03, -/* 00001070 */ 0x00, 0x0B, 0x16, 0x09, 0x15, 0x00, 0x01, 0x49, 0x01, 0x17, 0x6A, 0x16, 0x17, 0x00, 0x07, 0x02, -/* 00001080 */ 0x00, 0x5A, 0x00, 0x17, 0x5A, 0x01, 0x04, 0x1F, 0x02, 0xFF, 0x16, 0xA6, 0x16, 0x47, 0x0C, 0x16, -/* 00001090 */ 0xA6, 0x16, 0x47, 0x0D, 0x16, 0x01, 0x49, 0x01, 0x17, 0x6A, 0x16, 0x17, 0x01, 0x07, 0x02, 0x00, -/* 000010A0 */ 0x5A, 0x00, 0x17, 0x5A, 0x01, 0x0B, 0x1F, 0x02, 0x16, 0x16, 0x0E, 0x0D, 0x00, 0x16, 0x47, 0x0C, -/* 000010B0 */ 0x0B, 0xA4, 0x16, 0x0C, 0x02, 0x47, 0x0D, 0x16, 0x09, 0x30, 0x00, 0x01, 0x49, 0x01, 0x17, 0x6A, -/* 000010C0 */ 0x16, 0x17, 0x03, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x17, 0x5A, 0x01, 0x0B, 0x1F, 0x02, 0x16, 0x16, -/* 000010D0 */ 0x47, 0x0C, 0x16, 0x01, 0x49, 0x01, 0x17, 0x6A, 0x16, 0x17, 0x04, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 000010E0 */ 0x17, 0x5A, 0x01, 0x0C, 0x1F, 0x02, 0x16, 0x16, 0x47, 0x0D, 0x16, 0x2C, 0x16, 0x09, 0x0D, 0x03, -/* 000010F0 */ 0x00, 0x16, 0x05, 0x09, 0x15, 0x00, 0x01, 0x49, 0x01, 0x17, 0x6A, 0x16, 0x17, 0x05, 0x07, 0x02, -/* 00001100 */ 0x00, 0x5A, 0x00, 0x17, 0x5A, 0x01, 0x04, 0x1F, 0x02, 0xFF, 0x16, 0x01, 0x49, 0x01, 0x17, 0x6A, -/* 00001110 */ 0x16, 0x17, 0x06, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x17, 0x5A, 0x01, 0x0C, 0x5A, 0x02, 0x06, 0x1F, -/* 00001120 */ 0x03, 0x16, 0x16, 0x47, 0x0E, 0x16, 0x47, 0x0F, 0x06, 0x47, 0x10, 0x06, 0xA6, 0x16, 0x14, 0x03, -/* 00001130 */ 0x00, 0x0A, 0x16, 0x09, 0x59, 0x00, 0xEA, 0x00, 0x12, 0x03, 0x00, 0x0F, 0x0D, 0x09, 0x4C, 0x00, -/* 00001140 */ 0xB9, 0x16, 0x0F, 0x0C, 0x00, 0x00, 0x0E, 0x3C, 0x00, 0x16, 0x95, 0x16, 0x0C, 0x0F, 0x47, 0x11, -/* 00001150 */ 0x16, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x07, 0x5A, 0x01, 0x11, 0x5A, 0x02, 0x0F, 0x5A, 0x03, 0x0C, -/* 00001160 */ 0x1F, 0x04, 0x16, 0x09, 0x0E, 0x1E, 0x00, 0x16, 0x01, 0x49, 0x01, 0x17, 0x6A, 0x16, 0x17, 0x07, -/* 00001170 */ 0x07, 0x04, 0x00, 0x5A, 0x00, 0x17, 0x5A, 0x01, 0x0E, 0x5A, 0x02, 0x10, 0x5A, 0x03, 0x11, 0x1F, -/* 00001180 */ 0x04, 0xFF, 0x16, 0x28, 0x10, 0x10, 0x28, 0x0F, 0x0F, 0x09, 0xAA, 0xFF, 0x09, 0x7C, 0x00, 0x01, -/* 00001190 */ 0x49, 0x01, 0x17, 0x6A, 0x16, 0x17, 0x08, 0x07, 0x04, 0x00, 0x5A, 0x00, 0x17, 0x01, 0x49, 0x01, -/* 000011A0 */ 0x18, 0x5F, 0x18, 0x18, 0x09, 0x5A, 0x01, 0x18, 0x5A, 0x02, 0x09, 0x5A, 0x03, 0x0A, 0x1F, 0x04, -/* 000011B0 */ 0x16, 0x16, 0x47, 0x12, 0x16, 0xEA, 0x01, 0x12, 0x03, 0x00, 0x0F, 0x0D, 0x09, 0x4C, 0x00, 0xB9, -/* 000011C0 */ 0x16, 0x0F, 0x0C, 0x01, 0x00, 0x0E, 0x3C, 0x00, 0x16, 0x95, 0x16, 0x0C, 0x0F, 0x47, 0x13, 0x16, -/* 000011D0 */ 0x07, 0x04, 0x00, 0x5A, 0x00, 0x07, 0x5A, 0x01, 0x13, 0x5A, 0x02, 0x0F, 0x5A, 0x03, 0x0C, 0x1F, -/* 000011E0 */ 0x04, 0x16, 0x12, 0x0E, 0x1E, 0x00, 0x16, 0x01, 0x49, 0x01, 0x17, 0x6A, 0x16, 0x17, 0x07, 0x07, -/* 000011F0 */ 0x04, 0x00, 0x5A, 0x00, 0x17, 0x5A, 0x01, 0x0E, 0x5A, 0x02, 0x10, 0x5A, 0x03, 0x13, 0x1F, 0x04, -/* 00001200 */ 0xFF, 0x16, 0x28, 0x10, 0x10, 0x28, 0x0F, 0x0F, 0x09, 0xAA, 0xFF, 0x47, 0x00, 0x0E, 0x09, 0x02, -/* 00001210 */ 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x91, 0x02, 0xAE, 0xC1, 0xFE, 0x02, 0x01, 0xFE, 0x4E, 0x02, -/* 00001220 */ 0xFE, 0x92, 0x02, 0xFE, 0x55, 0x02, 0xFE, 0x56, 0x02, 0xFE, 0xEB, 0x02, 0xFE, 0xEC, 0x02, 0xFE, -/* 00001230 */ 0xF4, 0x20, 0x20, 0x15, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x37, 0x00, 0x15, 0x00, 0x58, 0x00, 0x05, -/* 00001240 */ 0x00, 0x0F, 0x00, 0x05, 0x00, 0x10, 0x00, 0x19, 0x00, 0x31, 0x00, 0x03, 0x00, 0x16, 0x00, 0x0A, -/* 00001250 */ 0x00, 0x2D, 0x00, 0x18, 0x00, 0x2E, 0x00, 0x18, 0x00, 0x3F, 0x00, 0x0B, 0x00, 0x33, 0x00, 0x15, -/* 00001260 */ 0x00, 0x61, 0x00, 0x1B, 0x00, 0x3A, 0x00, 0x03, 0x00, 0x13, 0x00, 0x03, 0x00, 0x15, 0x00, 0x0C, -/* 00001270 */ 0x00, 0x4A, 0x00, 0x08, 0x00, 0x1B, 0x00, 0x0A, 0x00, 0x22, 0x00, 0x07, 0x00, 0x27, 0x00, 0x17, -/* 00001280 */ 0x00, 0x38, 0x00, 0x1B, 0x00, 0x57, 0x00, 0x03, 0x00, 0x3E, 0x00, 0x09, 0x00, 0x8F, 0x00, 0x28, -/* 00001290 */ 0x00, 0x7C, 0x00, 0x08, 0x00, 0x1B, 0x00, 0x0A, 0x00, 0x22, 0x00, 0x07, 0x00, 0x27, 0x00, 0x17, -/* 000012A0 */ 0x00, 0x3B, 0x00, 0x1B, 0x00, 0x57, 0x00, 0x03, 0x00, 0x3E, 0x00, 0x06, 0x00, 0x26, 0x00, 0x08, -/* 000012B0 */ 0x00, 0x0E, 0x00, 0x00, 0xBF, 0x3C, 0x02, 0xC2, 0x43, 0xA0, 0x09, 0x00, 0x7E, 0x3A, 0xA2, 0x41, -/* 000012C0 */ 0xD1, 0x00, 0x08, 0xFE, 0x3E, 0x1A, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x3E, 0x1A, -/* 000012D0 */ 0xFE, 0x02, 0x06, 0xFE, 0x02, 0x06, 0x01, 0x0C, 0x08, 0x10, 0x03, 0x5B, 0x4C, 0x0D, 0x01, 0x01, -/* 000012E0 */ 0x06, 0x06, 0x06, 0x06, 0x01, 0x10, 0xF2, 0xFE, 0x21, 0x01, 0x05, 0xFE, 0xCF, 0x02, 0x07, 0x05, -/* 000012F0 */ 0xFE, 0xF6, 0x02, 0x01, 0x00, 0x01, 0xFF, 0x01, 0x01, 0xFE, 0x2B, 0x01, 0x59, 0x11, 0xB1, 0x0A, -/* 00001300 */ 0x11, 0x4F, 0x0B, 0x4F, 0x0C, 0x4F, 0x0D, 0x4F, 0x0E, 0x4F, 0x0F, 0x14, 0x0A, 0x00, 0x0A, 0x03, -/* 00001310 */ 0xA6, 0x11, 0x14, 0x03, 0x00, 0x0A, 0x11, 0x09, 0x15, 0x00, 0x01, 0x49, 0x01, 0x12, 0x6A, 0x11, -/* 00001320 */ 0x12, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x12, 0x5A, 0x01, 0x04, 0x1F, 0x02, 0xFF, 0x11, 0xA6, -/* 00001330 */ 0x11, 0x47, 0x0B, 0x11, 0x01, 0x49, 0x01, 0x12, 0x6A, 0x11, 0x12, 0x01, 0x07, 0x02, 0x00, 0x5A, -/* 00001340 */ 0x00, 0x12, 0x5A, 0x01, 0x0A, 0x1F, 0x02, 0x11, 0x11, 0x0E, 0x06, 0x00, 0x11, 0x47, 0x0B, 0x0A, -/* 00001350 */ 0x09, 0x18, 0x00, 0x01, 0x49, 0x01, 0x12, 0x6A, 0x11, 0x12, 0x02, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 00001360 */ 0x12, 0x5A, 0x01, 0x0A, 0x1F, 0x02, 0x11, 0x11, 0x47, 0x0B, 0x11, 0x01, 0x49, 0x01, 0x12, 0x6A, -/* 00001370 */ 0x11, 0x12, 0x03, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x12, 0xA4, 0x13, 0x0B, 0x04, 0x5A, 0x01, 0x13, -/* 00001380 */ 0x1F, 0x02, 0x11, 0x11, 0x47, 0x0C, 0x11, 0x14, 0x03, 0x00, 0x0C, 0x05, 0x09, 0x06, 0x00, 0x47, -/* 00001390 */ 0x00, 0x06, 0x09, 0x90, 0x00, 0x01, 0x49, 0x01, 0x12, 0x6A, 0x11, 0x12, 0x05, 0x07, 0x02, 0x00, -/* 000013A0 */ 0x5A, 0x00, 0x12, 0x5A, 0x01, 0x09, 0x1F, 0x02, 0x11, 0x11, 0x47, 0x0D, 0x11, 0x10, 0x03, 0x00, -/* 000013B0 */ 0x0D, 0x0C, 0x09, 0x06, 0x00, 0x47, 0x00, 0x06, 0x09, 0x6A, 0x00, 0xA6, 0x11, 0x47, 0x0E, 0x11, -/* 000013C0 */ 0x14, 0x03, 0x00, 0x0D, 0x05, 0x09, 0x06, 0x00, 0x47, 0x0E, 0x05, 0x09, 0x20, 0x00, 0x11, 0x03, -/* 000013D0 */ 0x00, 0x0D, 0x05, 0x09, 0x06, 0x00, 0x47, 0x0E, 0x0D, 0x09, 0x12, 0x00, 0x2F, 0x11, 0x0C, 0x0D, -/* 000013E0 */ 0x47, 0x0E, 0x11, 0x12, 0x03, 0x00, 0x0E, 0x05, 0x09, 0x03, 0x00, 0x47, 0x0E, 0x05, 0xEA, 0x00, -/* 000013F0 */ 0x12, 0x03, 0x00, 0x0E, 0x0C, 0x09, 0x25, 0x00, 0xB9, 0x11, 0x0E, 0x0B, 0x00, 0x00, 0x0E, 0x15, -/* 00001400 */ 0x00, 0x11, 0x95, 0x11, 0x0B, 0x0E, 0x47, 0x0F, 0x11, 0x14, 0x03, 0x00, 0x0F, 0x08, 0x09, 0x06, -/* 00001410 */ 0x00, 0x47, 0x00, 0x0E, 0x09, 0x0E, 0x00, 0x28, 0x0E, 0x0E, 0x09, 0xD1, 0xFF, 0x47, 0x00, 0x06, -/* 00001420 */ 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x91, 0x02, 0xAE, 0xFE, 0x02, 0x01, 0xFE, 0x53, -/* 00001430 */ 0x02, 0xC1, 0xFE, 0x54, 0x02, 0xFE, 0xBB, 0x1A, 0x1C, 0x0F, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x37, -/* 00001440 */ 0x00, 0x15, 0x00, 0x59, 0x00, 0x05, 0x00, 0x0F, 0x00, 0x19, 0x00, 0x31, 0x00, 0x06, 0x00, 0x27, -/* 00001450 */ 0x00, 0x18, 0x00, 0x35, 0x00, 0x1C, 0x00, 0x39, 0x00, 0x08, 0x00, 0x1D, 0x00, 0x06, 0x00, 0x1E, -/* 00001460 */ 0x00, 0x18, 0x00, 0x36, 0x00, 0x08, 0x00, 0x1C, 0x00, 0x06, 0x00, 0x1E, 0x00, 0x05, 0x00, 0x14, -/* 00001470 */ 0x01, 0x08, 0x00, 0x58, 0x00, 0x06, 0x00, 0x16, 0x00, 0x08, 0x00, 0x4F, 0x00, 0x06, 0x00, 0x4E, -/* 00001480 */ 0x00, 0x07, 0x00, 0x1A, 0x00, 0x08, 0x00, 0x1D, 0x00, 0x05, 0x00, 0x2F, 0x00, 0x08, 0x00, 0x17, -/* 00001490 */ 0x00, 0x0A, 0x00, 0x1E, 0x00, 0x07, 0x00, 0x26, 0x00, 0x08, 0x00, 0x36, 0x00, 0x06, 0x00, 0x37, -/* 000014A0 */ 0x00, 0x06, 0x00, 0x18, 0x00, 0x08, 0x00, 0x0F, 0x00, 0x00, 0xBF, 0x1C, 0x00, 0xC0, 0x03, 0x80, -/* 000014B0 */ 0x01, 0x00, 0x75, 0x3A, 0xA0, 0x41, 0xD1, 0x00, 0x07, 0xFE, 0xBC, 0x18, 0xFF, 0x00, 0x10, 0x01, -/* 000014C0 */ 0x00, 0x01, 0x01, 0xFE, 0xBC, 0x18, 0xFE, 0x44, 0x01, 0xFE, 0x44, 0x01, 0x01, 0x04, 0x06, 0x08, -/* 000014D0 */ 0x04, 0x1F, 0x1E, 0x03, 0x03, 0x03, 0x03, 0x05, 0xFE, 0xCF, 0x02, 0x07, 0x05, 0xFE, 0xF5, 0x02, -/* 000014E0 */ 0x01, 0x02, 0x62, 0x59, 0x08, 0xB1, 0x06, 0x08, 0x4F, 0x07, 0x14, 0x0A, 0x00, 0x06, 0x03, 0xA6, -/* 000014F0 */ 0x08, 0x14, 0x03, 0x00, 0x06, 0x08, 0x09, 0x15, 0x00, 0x01, 0x49, 0x01, 0x09, 0x6A, 0x08, 0x09, -/* 00001500 */ 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x09, 0x5A, 0x01, 0x04, 0x1F, 0x02, 0xFF, 0x08, 0x01, 0x49, -/* 00001510 */ 0x01, 0x09, 0x6A, 0x08, 0x09, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x09, 0x5A, 0x01, 0x06, 0x1F, -/* 00001520 */ 0x02, 0x08, 0x08, 0x47, 0x07, 0x08, 0x01, 0x49, 0x01, 0x09, 0x6A, 0x08, 0x09, 0x02, 0x07, 0x03, -/* 00001530 */ 0x00, 0x5A, 0x00, 0x09, 0x5A, 0x01, 0x07, 0x5A, 0x02, 0x05, 0x1F, 0x03, 0x00, 0x08, 0x09, 0x02, -/* 00001540 */ 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x91, 0x02, 0xFE, 0x02, 0x01, 0xFE, 0xEA, 0x02, 0xFE, 0xE8, -/* 00001550 */ 0x18, 0x05, 0x07, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x37, 0x00, 0x15, 0x00, 0x58, 0x00, 0x18, 0x00, -/* 00001560 */ 0x2E, 0x00, 0x1D, 0x00, 0x5A, 0x00, 0x00, 0xBF, 0x1C, 0x00, 0xC0, 0x03, 0x80, 0x01, 0x00, 0x6C, -/* 00001570 */ 0x39, 0xA0, 0x41, 0xD1, 0x00, 0x06, 0xFE, 0x41, 0x17, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, -/* 00001580 */ 0xFE, 0x41, 0x17, 0xFE, 0x3D, 0x01, 0xFE, 0x3D, 0x01, 0x01, 0x04, 0x06, 0x08, 0x04, 0x1F, 0x1E, -/* 00001590 */ 0x03, 0x03, 0x03, 0x03, 0x05, 0xFE, 0xCF, 0x02, 0x07, 0x05, 0xFE, 0xF4, 0x02, 0x01, 0x01, 0x62, -/* 000015A0 */ 0x59, 0x08, 0xB1, 0x06, 0x08, 0x4F, 0x07, 0x14, 0x0A, 0x00, 0x06, 0x03, 0xA6, 0x08, 0x14, 0x03, -/* 000015B0 */ 0x00, 0x06, 0x08, 0x09, 0x15, 0x00, 0x01, 0x49, 0x01, 0x09, 0x6A, 0x08, 0x09, 0x00, 0x07, 0x02, -/* 000015C0 */ 0x00, 0x5A, 0x00, 0x09, 0x5A, 0x01, 0x04, 0x1F, 0x02, 0xFF, 0x08, 0x01, 0x49, 0x01, 0x09, 0x6A, -/* 000015D0 */ 0x08, 0x09, 0x01, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x09, 0x5A, 0x01, 0x06, 0x1F, 0x02, 0x08, 0x08, -/* 000015E0 */ 0x47, 0x07, 0x08, 0x01, 0x49, 0x01, 0x09, 0x6A, 0x08, 0x09, 0x02, 0x07, 0x03, 0x00, 0x5A, 0x00, -/* 000015F0 */ 0x09, 0x5A, 0x01, 0x07, 0x5A, 0x02, 0x05, 0x1F, 0x03, 0x00, 0x08, 0x09, 0x02, 0x00, 0xA6, 0x00, -/* 00001600 */ 0x24, 0x00, 0xFE, 0x91, 0x02, 0xFE, 0x02, 0x01, 0xFE, 0xEA, 0x02, 0xFE, 0x6D, 0x17, 0x05, 0x07, -/* 00001610 */ 0x00, 0x00, 0x00, 0x0F, 0x00, 0x37, 0x00, 0x15, 0x00, 0x57, 0x00, 0x18, 0x00, 0x2E, 0x00, 0x1D, -/* 00001620 */ 0x00, 0x54, 0x00, 0x00, 0xBF, 0x1C, 0x00, 0xC0, 0x03, 0x80, 0x01, 0x00, 0x63, 0x37, 0xA0, 0x41, -/* 00001630 */ 0xD1, 0x00, 0x05, 0xFE, 0xCB, 0x15, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0xCB, 0x15, -/* 00001640 */ 0xFE, 0x39, 0x01, 0xFE, 0x39, 0x01, 0x01, 0x04, 0x06, 0x08, 0x04, 0x1F, 0x1E, 0x03, 0x03, 0x03, -/* 00001650 */ 0x03, 0x05, 0xFE, 0xCF, 0x02, 0x07, 0x05, 0xFE, 0xF3, 0x02, 0x01, 0x00, 0x62, 0x59, 0x08, 0xB1, -/* 00001660 */ 0x06, 0x08, 0x4F, 0x07, 0x14, 0x0A, 0x00, 0x06, 0x03, 0xA6, 0x08, 0x14, 0x03, 0x00, 0x06, 0x08, -/* 00001670 */ 0x09, 0x15, 0x00, 0x01, 0x49, 0x01, 0x09, 0x6A, 0x08, 0x09, 0x00, 0x07, 0x02, 0x00, 0x5A, 0x00, -/* 00001680 */ 0x09, 0x5A, 0x01, 0x04, 0x1F, 0x02, 0xFF, 0x08, 0x01, 0x49, 0x01, 0x09, 0x6A, 0x08, 0x09, 0x01, -/* 00001690 */ 0x07, 0x02, 0x00, 0x5A, 0x00, 0x09, 0x5A, 0x01, 0x06, 0x1F, 0x02, 0x08, 0x08, 0x47, 0x07, 0x08, -/* 000016A0 */ 0x01, 0x49, 0x01, 0x09, 0x6A, 0x08, 0x09, 0x02, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x09, 0x5A, 0x01, -/* 000016B0 */ 0x07, 0x5A, 0x02, 0x05, 0x1F, 0x03, 0x00, 0x08, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, -/* 000016C0 */ 0x91, 0x02, 0xFE, 0x02, 0x01, 0xFE, 0xEA, 0x02, 0xFE, 0xF7, 0x15, 0x05, 0x07, 0x00, 0x00, 0x00, -/* 000016D0 */ 0x0F, 0x00, 0x37, 0x00, 0x15, 0x00, 0x55, 0x00, 0x18, 0x00, 0x2E, 0x00, 0x1D, 0x00, 0x52, 0x00, -/* 000016E0 */ 0x00, 0xBF, 0x1C, 0x00, 0xC0, 0x03, 0x80, 0x01, 0x00, 0x5E, 0x42, 0xA2, 0x41, 0xD1, 0x00, 0x04, -/* 000016F0 */ 0xFE, 0x05, 0x15, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x05, 0x15, 0x8B, 0x8B, 0x01, -/* 00001700 */ 0x03, 0x03, 0x05, 0x04, 0x0A, 0x0A, 0x01, 0x01, 0x01, 0x01, 0x05, 0xFE, 0xCF, 0x02, 0x1C, 0x01, -/* 00001710 */ 0x49, 0x01, 0x05, 0x5F, 0x05, 0x05, 0x00, 0x07, 0x03, 0x00, 0x5A, 0x01, 0x03, 0x5A, 0x02, 0x04, -/* 00001720 */ 0xC1, 0x03, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0xE1, 0x02, 0xFE, 0x48, -/* 00001730 */ 0x15, 0x02, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x47, 0x00, 0x00, 0xBF, 0x1C, 0x00, 0xC0, 0x57, -/* 00001740 */ 0xA0, 0x23, 0x00, 0x2E, 0x13, 0xA0, 0x41, 0xC1, 0x00, 0xFE, 0xE3, 0x02, 0x03, 0xFF, 0x00, 0x00, -/* 00001750 */ 0x00, 0x02, 0xFE, 0xDF, 0x0B, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0xDF, 0x0B, 0xFE, -/* 00001760 */ 0x4E, 0x06, 0xFE, 0x4E, 0x06, 0x01, 0x0E, 0x0C, 0x14, 0x04, 0x5D, 0x54, 0x0D, 0x0D, 0x0D, 0x0D, -/* 00001770 */ 0x01, 0x05, 0x03, 0x14, 0x05, 0xFE, 0xCF, 0x02, 0x05, 0xFE, 0xF1, 0x02, 0x05, 0xFE, 0xE7, 0x02, -/* 00001780 */ 0x0B, 0x06, 0xFE, 0xE3, 0x02, 0x06, 0xFE, 0xF2, 0x02, 0x07, 0x01, 0x01, 0x0C, 0x01, 0x00, 0xFE, -/* 00001790 */ 0x67, 0x01, 0x59, 0x17, 0xB1, 0x0C, 0x17, 0x4F, 0x0D, 0x4F, 0x0E, 0x4F, 0x0F, 0x4F, 0x10, 0x4F, -/* 000017A0 */ 0x11, 0x4F, 0x12, 0x4F, 0x13, 0x47, 0x0D, 0x0C, 0x01, 0x49, 0x01, 0x17, 0x5F, 0x17, 0x17, 0x00, -/* 000017B0 */ 0xE1, 0x17, 0x0D, 0x17, 0x00, 0x0F, 0x18, 0x00, 0x17, 0x01, 0x49, 0x01, 0x18, 0x6A, 0x17, 0x18, -/* 000017C0 */ 0x01, 0x07, 0x03, 0x00, 0x5A, 0x00, 0x18, 0x5A, 0x01, 0x03, 0x5A, 0x02, 0x04, 0x1F, 0x03, 0xFF, -/* 000017D0 */ 0x17, 0x5F, 0x17, 0x0D, 0x02, 0x47, 0x0E, 0x17, 0x5F, 0x17, 0x0D, 0x03, 0x14, 0x03, 0x00, 0x17, -/* 000017E0 */ 0x05, 0x09, 0x1D, 0x00, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 000017F0 */ 0x00, 0xA6, 0x17, 0x78, 0x17, 0x00, 0x04, 0x78, 0x05, 0x00, 0x05, 0x09, 0xF9, 0x00, 0x09, 0xF4, -/* 00001800 */ 0x00, 0x5F, 0x17, 0x0D, 0x06, 0x47, 0x0F, 0x17, 0x01, 0x49, 0x01, 0x18, 0x6A, 0x17, 0x18, 0x07, -/* 00001810 */ 0x07, 0x02, 0x00, 0x5A, 0x00, 0x18, 0x5A, 0x01, 0x0E, 0x1F, 0x02, 0x17, 0x17, 0x0E, 0x0A, 0x00, -/* 00001820 */ 0x17, 0xA4, 0x18, 0x0E, 0x08, 0x47, 0x17, 0x18, 0x09, 0x18, 0x00, 0x01, 0x49, 0x01, 0x19, 0x6A, -/* 00001830 */ 0x18, 0x19, 0x09, 0x07, 0x02, 0x00, 0x5A, 0x00, 0x19, 0x5A, 0x01, 0x0E, 0x1F, 0x02, 0x18, 0x18, -/* 00001840 */ 0x47, 0x17, 0x18, 0x47, 0x10, 0x17, 0x12, 0x03, 0x00, 0x0F, 0x10, 0x09, 0x89, 0x00, 0x5F, 0x17, -/* 00001850 */ 0x0D, 0x0A, 0x47, 0x11, 0x17, 0x2F, 0x17, 0x0F, 0x09, 0x74, 0x17, 0x0D, 0x0B, 0x14, 0x03, 0x00, -/* 00001860 */ 0x11, 0x09, 0x09, 0x1F, 0x00, 0xCB, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 00001870 */ 0x00, 0x00, 0x95, 0x17, 0x0E, 0x0F, 0x78, 0x17, 0x00, 0x04, 0x78, 0x0A, 0x00, 0x05, 0x09, 0x76, -/* 00001880 */ 0x00, 0x09, 0x50, 0x00, 0x14, 0x03, 0x00, 0x11, 0x0B, 0x09, 0x1B, 0x00, 0xCB, 0x20, 0x00, 0x00, -/* 00001890 */ 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0F, 0x00, 0x04, 0x78, 0x0A, 0x00, -/* 000018A0 */ 0x05, 0x09, 0x53, 0x00, 0x09, 0x2D, 0x00, 0x47, 0x12, 0x0F, 0x95, 0x17, 0x0E, 0x0F, 0x47, 0x13, -/* 000018B0 */ 0x17, 0xCB, 0x30, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCC, 0x17, -/* 000018C0 */ 0x02, 0x9F, 0x00, 0x12, 0x17, 0x9F, 0x01, 0x13, 0x17, 0x78, 0x17, 0x00, 0x04, 0x78, 0x0A, 0x00, -/* 000018D0 */ 0x05, 0x09, 0x23, 0x00, 0x09, 0x1E, 0x00, 0x74, 0x05, 0x0D, 0x0C, 0xCB, 0x40, 0x00, 0x00, 0x00, -/* 000018E0 */ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA6, 0x17, 0x78, 0x17, 0x00, 0x04, 0x78, 0x05, -/* 000018F0 */ 0x00, 0x05, 0x09, 0x02, 0x00, 0xA6, 0x00, 0x24, 0x00, 0x05, 0x50, 0x00, 0x40, 0x00, 0x00, 0x00, -/* 00001900 */ 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x6C, 0x00, 0x00, 0x00, -/* 00001910 */ 0x30, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, -/* 00001920 */ 0x6C, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 00001930 */ 0x83, 0x01, 0x00, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, -/* 00001940 */ 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -/* 00001950 */ 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x6C, 0x00, 0x00, 0x00, -/* 00001960 */ 0xFE, 0xE1, 0x02, 0xFE, 0x8A, 0x02, 0xFE, 0xED, 0x02, 0xFE, 0xF0, 0x02, 0xFE, 0x83, 0x01, 0x6C, -/* 00001970 */ 0xFE, 0xEE, 0x02, 0xAE, 0xC1, 0xFE, 0x4E, 0x02, 0xFE, 0xEF, 0x02, 0xFE, 0xEE, 0x02, 0xFE, 0xF0, -/* 00001980 */ 0x02, 0xFE, 0x1B, 0x0C, 0x15, 0x13, 0x00, 0x00, 0x00, 0x03, 0x00, 0x1F, 0x00, 0x11, 0x00, 0x49, -/* 00001990 */ 0x00, 0x18, 0x00, 0x7D, 0x00, 0x07, 0x00, 0x2B, 0x00, 0x0C, 0x00, 0x39, 0x00, 0x1D, 0x00, 0x56, -/* 000019A0 */ 0x00, 0x07, 0x00, 0x33, 0x00, 0x3E, 0x00, 0x65, 0x00, 0x08, 0x00, 0x70, 0x00, 0x07, 0x00, 0x36, -/* 000019B0 */ 0x00, 0x08, 0x00, 0x38, 0x00, 0x08, 0x00, 0x4F, 0x00, 0x1F, 0x00, 0x48, 0x00, 0x08, 0x00, 0x78, -/* 000019C0 */ 0x00, 0x1B, 0x00, 0x63, 0x00, 0x03, 0x00, 0x34, 0x00, 0x07, 0x00, 0x39, 0x00, 0x26, 0x00, 0x8A, -/* 000019D0 */ 0x00, 0x04, 0x00, 0x35, 0x00, 0x1C, 0x00, 0x5E, 0x00, 0x00, 0xBF, 0x1C, 0x00, 0xC0, 0x03, 0x80, -/* 000019E0 */ 0x01, 0x00, 0x17, 0x3C, 0xA2, 0x41, 0xD1, 0x00, 0x02, 0xFE, 0xD6, 0x05, 0xFF, 0x00, 0x10, 0x01, -/* 000019F0 */ 0x00, 0x03, 0x03, 0xFE, 0xD6, 0x05, 0xFE, 0xE9, 0x01, 0xFE, 0xE9, 0x01, 0x41, 0x05, 0x0A, 0x0D, -/* 00001A00 */ 0x08, 0x14, 0x14, 0x05, 0x05, 0x05, 0x05, 0x05, 0xFE, 0xCF, 0x02, 0x01, 0x04, 0x06, 0xFE, 0xED, -/* 00001A10 */ 0x02, 0x06, 0xFE, 0xEE, 0x02, 0x06, 0xFE, 0xEF, 0x02, 0x06, 0xFE, 0xF0, 0x02, 0x01, 0x00, 0x0C, -/* 00001A20 */ 0x3D, 0x59, 0x0D, 0xB1, 0x0C, 0x0D, 0x01, 0x49, 0x01, 0x0E, 0x6A, 0x0D, 0x0E, 0x00, 0x07, 0x07, -/* 00001A30 */ 0x00, 0x5A, 0x00, 0x0E, 0x5A, 0x01, 0x0C, 0x5A, 0x02, 0x03, 0x5A, 0x03, 0x04, 0x5A, 0x04, 0x05, -/* 00001A40 */ 0x5A, 0x05, 0x06, 0x5A, 0x06, 0x07, 0x1F, 0x07, 0xFF, 0x0D, 0x74, 0x0A, 0x0C, 0x01, 0x74, 0x08, -/* 00001A50 */ 0x0C, 0x02, 0x74, 0x0B, 0x0C, 0x03, 0x74, 0x09, 0x0C, 0x04, 0xA6, 0x00, 0x24, 0x00, 0xFE, 0x4F, -/* 00001A60 */ 0x02, 0xFE, 0xED, 0x02, 0xFE, 0xEE, 0x02, 0xFE, 0xEF, 0x02, 0xFE, 0xF0, 0x02, 0xFE, 0x19, 0x06, -/* 00001A70 */ 0x06, 0x05, 0x00, 0x00, 0x00, 0x24, 0x00, 0x82, 0x00, 0x04, 0x00, 0x28, 0x00, 0x04, 0x00, 0x22, -/* 00001A80 */ 0x00, 0x04, 0x00, 0x29, 0x00, 0x06, 0x00, 0xB0, 0x00, 0x00, 0x00}; - -} diff --git a/lib/Runtime/Library/JsBuiltInEngineInterfaceExtensionObject.cpp b/lib/Runtime/Library/JsBuiltInEngineInterfaceExtensionObject.cpp index d3a8349da25..12b146f10c9 100644 --- a/lib/Runtime/Library/JsBuiltInEngineInterfaceExtensionObject.cpp +++ b/lib/Runtime/Library/JsBuiltInEngineInterfaceExtensionObject.cpp @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) 2022 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #include "RuntimeLibraryPch.h" @@ -12,26 +13,6 @@ #include "errstr.h" #include "ByteCode/ByteCodeDumper.h" -#pragma warning(push) -#pragma warning(disable:4309) // truncation of constant value -#pragma warning(disable:4838) // conversion from 'int' to 'const char' requires a narrowing conversion - -#if DISABLE_JIT -#if TARGET_64 -#include "JsBuiltIn/JsBuiltIn.js.nojit.bc.64b.h" -#else -#include "JsBuiltIn/JsBuiltIn.js.nojit.bc.32b.h" -#endif // TARGET_64 -#else -#if TARGET_64 -#include "JsBuiltIn/JsBuiltIn.js.bc.64b.h" -#else -#include "JsBuiltIn/JsBuiltIn.js.bc.32b.h" -#endif // TARGET_64 -#endif // DISABLE_JIT - -#pragma warning(pop) - #define IfFailAssertMsgAndThrowHr(op, msg) \ if (FAILED(hr=(op))) \ { \ @@ -39,16 +20,18 @@ JavascriptError::MapAndThrowError(scriptContext, hr); \ } \ -#endif // ENABLE_JS_BUILTINS +enum class IsTypeStatic : bool +{ + prototype = false, + constructor = true, + object = true +}; namespace Js { -#ifdef ENABLE_JS_BUILTINS JsBuiltInEngineInterfaceExtensionObject::JsBuiltInEngineInterfaceExtensionObject(ScriptContext * scriptContext) : - EngineExtensionObjectBase(EngineInterfaceExtensionKind_JsBuiltIn, scriptContext), - jsBuiltInByteCode(nullptr), - wasInitialized(false) + EngineExtensionObjectBase(EngineInterfaceExtensionKind_JsBuiltIn, scriptContext) { } @@ -89,28 +72,43 @@ namespace Js JavascriptLibrary* library = scriptContext->GetLibrary(); JavascriptString * methodName = JavascriptString::NewWithSz(_u("ArrayIterator"), scriptContext); auto arrayIterator = JavascriptOperators::GetProperty(library->GetChakraLib(), JavascriptOperators::GetPropertyId(methodName, scriptContext), scriptContext); - library->arrayIteratorPrototype = DynamicObject::FromVar(JavascriptOperators::GetProperty(DynamicObject::FromVar(arrayIterator), PropertyIds::prototype, scriptContext)); - library->arrayIteratorPrototypeBuiltinNextFunction = JavascriptFunction::FromVar(JavascriptOperators::GetProperty(library->arrayIteratorPrototype, PropertyIds::next, scriptContext)); + library->arrayIteratorPrototype = VarTo(JavascriptOperators::GetProperty(VarTo(arrayIterator), PropertyIds::prototype, scriptContext)); + library->arrayIteratorPrototypeBuiltinNextFunction = VarTo(JavascriptOperators::GetProperty(library->arrayIteratorPrototype, PropertyIds::next, scriptContext)); } - void JsBuiltInEngineInterfaceExtensionObject::InjectJsBuiltInLibraryCode(ScriptContext * scriptContext) + void JsBuiltInEngineInterfaceExtensionObject::InjectJsBuiltInLibraryCode(ScriptContext * scriptContext, JsBuiltInFile file) { JavascriptExceptionObject *pExceptionObject = nullptr; - if (jsBuiltInByteCode != nullptr) + FunctionBody* jsBuiltInByteCode = nullptr; + + switch (file) { - return; + #define jsBuiltInByteCodeCase(class, type, obj) \ + case (JsBuiltInFile::class##_##type): \ + { \ + if (jsBuiltIn##class##_##type##Bytecode != nullptr) \ + return; \ + EnsureSourceInfo(); \ + uint32 flags = fscrJsBuiltIn | (CONFIG_FLAG(CreateFunctionProxy) && !scriptContext->IsProfiling() ? fscrAllowFunctionProxy : 0); \ + SRCINFO* hsi = sourceInfo; \ + Js::ByteCodeSerializer::DeserializeFromBuffer(scriptContext, flags, (LPCUTF8)nullptr, hsi, (byte*)js::Library_Bytecode_##class##_##type, nullptr, &jsBuiltIn##class##_##type##Bytecode); \ + jsBuiltInByteCode = jsBuiltIn##class##_##type##Bytecode; \ + break; \ + } + JsBuiltIns(jsBuiltInByteCodeCase) + #undef jsBuiltInByteCodeCase } + this->SetHasBytecode(); try { - EnsureJsBuiltInByteCode(scriptContext); - Assert(jsBuiltInByteCode != nullptr); + AssertOrFailFast(jsBuiltInByteCode != nullptr); Js::ScriptFunction *functionGlobal = scriptContext->GetLibrary()->CreateScriptFunction(jsBuiltInByteCode); // If we are in the debugger and doing a GetProperty of arguments, then Js Builtins code will be injected on-demand // Since it is a cross site call, we marshall not only functionGlobal but also its entire prototype chain // The prototype of functionGlobal will be shared by a normal Js function, - // so marshalling will inadvertantly transition the entrypoint of the prototype to a crosssite entrypoint + // so marshalling will inadvertently transition the entrypoint of the prototype to a crosssite entrypoint // So we set the prototype to null here functionGlobal->SetPrototype(scriptContext->GetLibrary()->nullValue); @@ -137,24 +135,24 @@ namespace Js // Clear ReentrancyLock bit as initialization code doesn't have any side effect scriptContext->GetThreadContext()->SetNoJsReentrancy(false); #endif + // specify which set of BuiltIns are currently being loaded + current = file; + // Clear disable implicit call bit as initialization code doesn't have any side effect { ThreadContext::AutoRestoreImplicitFlags autoRestoreImplicitFlags(scriptContext->GetThreadContext(), scriptContext->GetThreadContext()->GetImplicitCallFlags(), scriptContext->GetThreadContext()->GetDisableImplicitFlags()); scriptContext->GetThreadContext()->ClearDisableImplicitFlags(); JavascriptFunction::CallRootFunctionInScript(functionGlobal, Js::Arguments(callInfo, args)); - } - - Js::ScriptFunction *functionBuiltins = scriptContext->GetLibrary()->CreateScriptFunction(jsBuiltInByteCode->GetNestedFunctionForExecution(0)); - functionBuiltins->SetPrototype(scriptContext->GetLibrary()->nullValue); - // Clear disable implicit call bit as initialization code doesn't have any side effect - { - ThreadContext::AutoRestoreImplicitFlags autoRestoreImplicitFlags(scriptContext->GetThreadContext(), scriptContext->GetThreadContext()->GetImplicitCallFlags(), scriptContext->GetThreadContext()->GetDisableImplicitFlags()); - scriptContext->GetThreadContext()->ClearDisableImplicitFlags(); + Js::ScriptFunction *functionBuiltins = scriptContext->GetLibrary()->CreateScriptFunction(jsBuiltInByteCode->GetNestedFunctionForExecution(0)); + functionBuiltins->SetPrototype(scriptContext->GetLibrary()->nullValue); JavascriptFunction::CallRootFunctionInScript(functionBuiltins, Js::Arguments(callInfo, args)); } - InitializePrototypes(scriptContext); + if (file == JsBuiltInFile::Array_prototype) + { + InitializePrototypes(scriptContext); + } #if DBG_DUMP if (PHASE_DUMP(Js::ByteCodePhase, functionGlobal->GetFunctionProxy()) && Js::Configuration::Global.flags.Verbose) { @@ -169,6 +167,15 @@ namespace Js if (pExceptionObject) { + switch (file) + { + #define clearJsBuiltInByteCodeCase(class, type, obj) \ + case (JsBuiltInFile::class##_##type): \ + jsBuiltIn##class##_##type##Bytecode = nullptr; + break; + JsBuiltIns(clearJsBuiltInByteCodeCase) + #undef clearJsBuiltInByteCodeCase + } jsBuiltInByteCode = nullptr; if (pExceptionObject == ThreadContext::GetContextForCurrentThread()->GetPendingSOErrorObject()) { @@ -180,11 +187,16 @@ namespace Js bool JsBuiltInEngineInterfaceExtensionObject::InitializeJsBuiltInNativeInterfaces(DynamicObject * builtInNativeInterfaces, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode) { - typeHandler->Convert(builtInNativeInterfaces, mode, 16); + int initSlotCapacity = 5; // for register{ChakraLibrary}Function, POSITIVE_INFINITY, NEGATIVE_INFINITY, and GetIteratorPrototype + + typeHandler->Convert(builtInNativeInterfaces, mode, initSlotCapacity); ScriptContext* scriptContext = builtInNativeInterfaces->GetScriptContext(); JavascriptLibrary* library = scriptContext->GetLibrary(); + library->AddMember(builtInNativeInterfaces, PropertyIds::POSITIVE_INFINITY, library->GetPositiveInfinite()); + library->AddMember(builtInNativeInterfaces, PropertyIds::NEGATIVE_INFINITY, library->GetNegativeInfinite()); + library->AddFunctionToLibraryObject(builtInNativeInterfaces, Js::PropertyIds::registerChakraLibraryFunction, &JsBuiltInEngineInterfaceExtensionObject::EntryInfo::JsBuiltIn_RegisterChakraLibraryFunction, 2); library->AddFunctionToLibraryObject(builtInNativeInterfaces, Js::PropertyIds::registerFunction, &JsBuiltInEngineInterfaceExtensionObject::EntryInfo::JsBuiltIn_RegisterFunction, 2); library->AddFunctionToLibraryObject(builtInNativeInterfaces, Js::PropertyIds::GetIteratorPrototype, &JsBuiltInEngineInterfaceExtensionObject::EntryInfo::JsBuiltIn_Internal_GetIteratorPrototype, 1); @@ -194,17 +206,37 @@ namespace Js } #if DBG + void JsBuiltInEngineInterfaceExtensionObject::DumpByteCode(JsBuiltInFile file) + { + Output::Print(_u("Dumping JS Built Ins Byte Code:\n")); + switch (file) + { + #define fileCase(class, type, obj) \ + case class##_##type: \ + Assert(this->jsBuiltIn##class##_##type##Bytecode != nullptr); \ + Js::ByteCodeDumper::DumpRecursively(this->jsBuiltIn##class##_##type##Bytecode); \ + break; + JsBuiltIns(fileCase) + #undef fileCase + } + } + void JsBuiltInEngineInterfaceExtensionObject::DumpByteCode() { Output::Print(_u("Dumping JS Built Ins Byte Code:\n")); - Assert(this->jsBuiltInByteCode); - Js::ByteCodeDumper::DumpRecursively(jsBuiltInByteCode); + #define dumpOne(class, type, obj) \ + if (this->jsBuiltIn##class##_##type##Bytecode != nullptr) \ + { \ + DumpByteCode(JsBuiltInFile::class##_##type); \ + } + JsBuiltIns(dumpOne) + #undef dumpOne } #endif // DBG - void JsBuiltInEngineInterfaceExtensionObject::EnsureJsBuiltInByteCode(ScriptContext * scriptContext) + void JsBuiltInEngineInterfaceExtensionObject::EnsureSourceInfo() { - if (jsBuiltInByteCode == nullptr) + if (sourceInfo == nullptr) { SourceContextInfo* sourceContextInfo = RecyclerNewStructZ(scriptContext->GetRecycler(), SourceContextInfo); sourceContextInfo->dwHostSourceContext = Js::Constants::JsBuiltInSourceContext; @@ -216,70 +248,7 @@ namespace Js SRCINFO si; memset(&si, 0, sizeof(si)); si.sourceContextInfo = sourceContextInfo; - SRCINFO *hsi = scriptContext->AddHostSrcInfo(&si); - uint32 flags = fscrJsBuiltIn | (CONFIG_FLAG(CreateFunctionProxy) && !scriptContext->IsProfiling() ? fscrAllowFunctionProxy : 0); - - HRESULT hr = Js::ByteCodeSerializer::DeserializeFromBuffer(scriptContext, flags, (LPCUTF8)nullptr, hsi, (byte*)Library_Bytecode_JsBuiltIn, nullptr, &jsBuiltInByteCode); - - IfFailAssertMsgAndThrowHr(hr, "Failed to deserialize JsBuiltIn.js bytecode - very probably the bytecode needs to be rebuilt."); - this->SetHasBytecode(); - } - } - - DynamicObject* JsBuiltInEngineInterfaceExtensionObject::GetPrototypeFromName(Js::PropertyIds propertyId, ScriptContext* scriptContext) - { - JavascriptLibrary* library = scriptContext->GetLibrary(); - - switch (propertyId) { - case PropertyIds::Array: - return library->arrayPrototype; - - case PropertyIds::String: - return library->stringPrototype; - - case PropertyIds::__chakraLibrary: - return library->GetChakraLib(); - - default: - AssertMsg(false, "Unable to find a prototype that match with this className."); - return nullptr; - } - } - - void JsBuiltInEngineInterfaceExtensionObject::RecordCommonNativeInterfaceBuiltIns(Js::PropertyIds propertyId, ScriptContext * scriptContext, JavascriptFunction * scriptFunction) - { - PropertyId commonNativeInterfaceId; - switch (propertyId) - { - case PropertyIds::indexOf: - commonNativeInterfaceId = Js::PropertyIds::builtInJavascriptArrayEntryIndexOf; - break; - - case PropertyIds::filter: - commonNativeInterfaceId = Js::PropertyIds::builtInJavascriptArrayEntryFilter; - break; - - default: - return; - } - - scriptContext->GetLibrary()->AddMember(scriptContext->GetLibrary()->GetEngineInterfaceObject()->GetCommonNativeInterfaces(), commonNativeInterfaceId, scriptFunction); - } - - void JsBuiltInEngineInterfaceExtensionObject::RecordDefaultIteratorFunctions(Js::PropertyIds propertyId, ScriptContext * scriptContext, JavascriptFunction * iteratorFunc) - { - JavascriptLibrary* library = scriptContext->GetLibrary(); - - switch (propertyId) { - case PropertyIds::entries: - library->arrayPrototypeEntriesFunction = iteratorFunc; - break; - case PropertyIds::values: - library->arrayPrototypeValuesFunction = iteratorFunc; - break; - case PropertyIds::keys: - library->arrayPrototypeKeysFunction = iteratorFunc; - break; + sourceInfo = scriptContext->AddHostSrcInfo(&si); } } @@ -287,31 +256,24 @@ namespace Js { EngineInterfaceObject_CommonFunctionProlog(function, callInfo); - AssertOrFailFast(args.Info.Count >= 3 && JavascriptString::Is(args.Values[1]) && JavascriptFunction::Is(args.Values[2])); + AssertOrFailFast(args.Info.Count >= 3 && VarIs(args.Values[1]) && VarIs(args.Values[2])); JavascriptLibrary * library = scriptContext->GetLibrary(); - // retrieves arguments - JavascriptString* methodName = JavascriptString::FromVar(args.Values[1]); - JavascriptFunction* func = JavascriptFunction::FromVar(args.Values[2]); + JavascriptString* methodName = UnsafeVarTo(args.Values[1]); - // Set the function's display name, as the function we pass in argument are anonym. - func->GetFunctionProxy()->SetIsPublicLibraryCode(); - func->GetFunctionProxy()->EnsureDeserialized()->SetDisplayName(methodName->GetString(), methodName->GetLength(), 0); + // chakra library functions, since they aren't public, can be constructors (__chakraLibrary.ArrayIterator is one) + ScriptFunction* func = EngineInterfaceObject::CreateLibraryCodeScriptFunction( + UnsafeVarTo(args.Values[2]), + methodName, + true /* isConstructor */, + true /* isJsBuiltIn */, + false /* isPublic */ + ); - DynamicObject* chakraLibraryObject = GetPrototypeFromName(PropertyIds::__chakraLibrary, scriptContext); PropertyIds functionIdentifier = JavascriptOperators::GetPropertyId(methodName, scriptContext); - // Link the function to __chakraLibrary. - ScriptFunction* scriptFunction = library->CreateScriptFunction(func->GetFunctionProxy()); - scriptFunction->GetFunctionProxy()->SetIsJsBuiltInCode(); - - Assert(scriptFunction->HasFunctionBody()); - scriptFunction->GetFunctionBody()->SetJsBuiltInForceInline(); - - scriptFunction->SetPropertyWithAttributes(PropertyIds::name, methodName, PropertyConfigurable, nullptr); - - library->AddMember(chakraLibraryObject, functionIdentifier, scriptFunction); + library->AddMember(library->GetChakraLib(), functionIdentifier, func); //Don't need to return anything return library->GetUndefined(); @@ -321,77 +283,102 @@ namespace Js { EngineInterfaceObject_CommonFunctionProlog(function, callInfo); - AssertOrFailFast(args.Info.Count >= 3 && JavascriptObject::Is(args.Values[1]) && JavascriptFunction::Is(args.Values[2])); + AssertOrFailFast(args.Info.Count == 3 && VarIs(args.Values[2])); JavascriptLibrary * library = scriptContext->GetLibrary(); - // retrieves arguments - RecyclableObject* funcInfo = nullptr; - if (!JavascriptConversion::ToObject(args.Values[1], scriptContext, &funcInfo)) + // process function name and get property ID + JavascriptString* methodString = VarTo(args.Values[1]); + PropertyRecord* methodPropertyRecord = nullptr; + methodString->GetPropertyRecord((PropertyRecord const **) &methodPropertyRecord, false); + PropertyId methodPropID = methodPropertyRecord->GetPropertyId(); + + DynamicObject *installTarget = nullptr; + bool isStatic = false; + PropertyString *classPropString = nullptr; + JavascriptString *fullName = nullptr; + JavascriptString *dot = library->GetDotString(); + JsBuiltInFile current = (static_cast(scriptContext->GetLibrary() + ->GetEngineInterfaceObject()->GetEngineExtension(EngineInterfaceExtensionKind_JsBuiltIn)))->current; + + // determine what object this function is being added too + switch (current) { - JavascriptError::ThrowTypeError(scriptContext, JSERR_FunctionArgument_NeedObject, _u("Object.assign")); + #define file(class, type, obj) \ + case class##_##type: \ + isStatic = static_cast(IsTypeStatic::##type); \ + installTarget = library->Get##obj##(); \ + classPropString = scriptContext->GetPropertyString(PropertyIds::class); \ + break; + JsBuiltIns(file) } - Var classNameProperty = JavascriptOperators::OP_GetProperty(funcInfo, Js::PropertyIds::className, scriptContext); - Var methodNameProperty = JavascriptOperators::OP_GetProperty(funcInfo, Js::PropertyIds::methodName, scriptContext); - Var argumentsCountProperty = JavascriptOperators::OP_GetProperty(funcInfo, Js::PropertyIds::argumentsCount, scriptContext); - Var forceInlineProperty = JavascriptOperators::OP_GetProperty(funcInfo, Js::PropertyIds::forceInline, scriptContext); - Var aliasProperty = JavascriptOperators::OP_GetProperty(funcInfo, Js::PropertyIds::alias, scriptContext); - - Assert(JavascriptString::Is(classNameProperty)); - Assert(JavascriptString::Is(methodNameProperty)); - Assert(TaggedInt::Is(argumentsCountProperty)); + Assert(methodString && classPropString && installTarget && methodPropID != PropertyIds::_none); - JavascriptString* className = JavascriptString::FromVar(classNameProperty); - JavascriptString* methodName = JavascriptString::FromVar(methodNameProperty); - int argumentsCount = TaggedInt::ToInt32(argumentsCountProperty); - - BOOL forceInline = JavascriptConversion::ToBoolean(forceInlineProperty, scriptContext); - - JavascriptFunction* func = JavascriptFunction::FromVar(args.Values[2]); - - // Set the function's display name, as the function we pass in argument are anonym. - func->GetFunctionProxy()->SetIsPublicLibraryCode(); - func->GetFunctionProxy()->EnsureDeserialized()->SetDisplayName(methodName->GetString(), methodName->GetLength(), 0); - - DynamicObject* prototype = GetPrototypeFromName(JavascriptOperators::GetPropertyId(className, scriptContext), scriptContext); - PropertyIds functionIdentifier = methodName->BufferEquals(_u("Symbol.iterator"), 15)? PropertyIds::_symbolIterator : - JavascriptOperators::GetPropertyId(methodName, scriptContext); - - // Link the function to the prototype. - ScriptFunction* scriptFunction = library->CreateScriptFunction(func->GetFunctionProxy()); - scriptFunction->GetFunctionProxy()->SetIsJsBuiltInCode(); - - if (forceInline) + if (isStatic) { - Assert(scriptFunction->HasFunctionBody()); - scriptFunction->GetFunctionBody()->SetJsBuiltInForceInline(); + fullName = JavascriptString::Concat3(classPropString, dot, methodString); + } + else + { + JavascriptString *dotPrototypeDot = JavascriptString::Concat3(dot, scriptContext->GetPropertyString(PropertyIds::prototype), dot); + fullName = JavascriptString::Concat3(classPropString, dotPrototypeDot, methodString); } - scriptFunction->SetPropertyWithAttributes(PropertyIds::length, TaggedInt::ToVarUnchecked(argumentsCount), PropertyConfigurable, nullptr); - - scriptFunction->SetConfigurable(PropertyIds::prototype, true); - scriptFunction->DeleteProperty(PropertyIds::prototype, Js::PropertyOperationFlags::PropertyOperation_None); - - scriptFunction->SetPropertyWithAttributes(PropertyIds::name, methodName, PropertyConfigurable, nullptr); - library->AddMember(prototype, functionIdentifier, scriptFunction); + ScriptFunction *func = EngineInterfaceObject::CreateLibraryCodeScriptFunction( + UnsafeVarTo(args.Values[2]), + fullName, + false /* isConstructor */, + true /* isJsBuiltIn */, + true /* isPublic */ + ); - RecordCommonNativeInterfaceBuiltIns(functionIdentifier, scriptContext, scriptFunction); + library->AddMember(installTarget, methodPropID, func); - if (!JavascriptOperators::IsUndefinedOrNull(aliasProperty)) + // Make function available to other internal facilities that need it + // applicable for specific functions only - this may need review upon moving other functions into JsBuiltins + if (current == JsBuiltInFile::Array_prototype) { - JavascriptString * alias = JavascriptConversion::ToString(aliasProperty, scriptContext); - // Cannot do a string to property id search here, Symbol.* have different hashing mechanism, so resort to this str compare - PropertyIds aliasFunctionIdentifier = alias->BufferEquals(_u("Symbol.iterator"), 15) ? PropertyIds::_symbolIterator : - JavascriptOperators::GetPropertyId(alias, scriptContext); - library->AddMember(prototype, aliasFunctionIdentifier, scriptFunction); + switch (methodPropID) + { + case PropertyIds::entries: + library->arrayPrototypeEntriesFunction = func; + break; + case PropertyIds::values: + library->arrayPrototypeValuesFunction = func; + library->AddMember(installTarget, PropertyIds::_symbolIterator, func); + break; + case PropertyIds::keys: + library->arrayPrototypeKeysFunction = func; + break; + case PropertyIds::forEach: + library->AddMember(scriptContext->GetLibrary()->GetEngineInterfaceObject()->GetCommonNativeInterfaces(), PropertyIds::builtInArray_prototype_forEach, func); + break; + case PropertyIds::filter: + library->AddMember(scriptContext->GetLibrary()->GetEngineInterfaceObject()->GetCommonNativeInterfaces(), PropertyIds::builtInArray_prototype_filter, func); + break; + case PropertyIds::indexOf: + library->AddMember(scriptContext->GetLibrary()->GetEngineInterfaceObject()->GetCommonNativeInterfaces(), PropertyIds::builtInArray_prototype_indexOf, func); + break; + case PropertyIds::reduce: + library->AddMember(scriptContext->GetLibrary()->GetEngineInterfaceObject()->GetCommonNativeInterfaces(), PropertyIds::builtInArray_prototype_reduce, func); + break; + } } - - if (prototype == library->arrayPrototype) + else if (current == JsBuiltInFile::Math_object) { - RecordDefaultIteratorFunctions(functionIdentifier, scriptContext, scriptFunction); + switch (methodPropID) + { + case PropertyIds::max: + library->mathMax = func; + library->AddMember(scriptContext->GetLibrary()->GetEngineInterfaceObject()->GetCommonNativeInterfaces(), PropertyIds::builtInMath_object_max, func); + break; + case PropertyIds::min: + library->mathMin = func; + library->AddMember(scriptContext->GetLibrary()->GetEngineInterfaceObject()->GetCommonNativeInterfaces(), PropertyIds::builtInMath_object_min, func); + break; + } } - //Don't need to return anything return library->GetUndefined(); } @@ -430,11 +417,11 @@ namespace Js Var iterable = args.Values[1]; TypedArrayBase *typedArrayBase = nullptr; - Assert(!JavascriptArray::Is(iterable)); + Assert(!JavascriptArray::IsNonES5Array(iterable)); - if (TypedArrayBase::Is(iterable)) + if (VarIs(iterable)) { - typedArrayBase = TypedArrayBase::FromVar(iterable); + typedArrayBase = VarTo(iterable); if (typedArrayBase->IsDetachedBuffer()) { JavascriptError::ThrowTypeError(scriptContext, JSERR_DetachedTypedArray); @@ -463,14 +450,14 @@ namespace Js { EngineInterfaceObject_CommonFunctionProlog(function, callInfo); - DynamicObject* obj = DynamicObject::FromVar(args.Values[1]); + DynamicObject* obj = VarTo(args.Values[1]); unsigned propCount = TaggedInt::ToUInt32(args.Values[2]); Assert(callInfo.Count == 3 + propCount); for (unsigned i = 0; i < propCount; i++) { - JavascriptString *propName = JavascriptString::FromVar(args.Values[i + 3]); + JavascriptString *propName = VarTo(args.Values[i + 3]); obj->SetPropertyWithAttributes(JavascriptOperators::GetPropertyId(propName, scriptContext), scriptContext->GetLibrary()->GetNull(), PropertyWritable, nullptr); } @@ -513,7 +500,7 @@ namespace Js EngineInterfaceObject_CommonFunctionProlog(function, callInfo); AssertOrFailFast(args.Info.Count == 4); - RecyclableObject * obj = RecyclableObject::FromVar(args.Values[1]); + RecyclableObject * obj = VarTo(args.Values[1]); double index = JavascriptConversion::ToInteger(args.Values[2], scriptContext); AssertOrFailFast(index >= 0); JavascriptArray::BigIndex bigIndex(static_cast(index)); @@ -522,5 +509,5 @@ namespace Js JavascriptArray::CreateDataPropertyOrThrow(obj, bigIndex, item, scriptContext); return scriptContext->GetLibrary()->GetTrue(); } -#endif // ENABLE_JS_BUILTINS } +#endif // ENABLE_JS_BUILTINS diff --git a/lib/Runtime/Library/JsBuiltInEngineInterfaceExtensionObject.h b/lib/Runtime/Library/JsBuiltInEngineInterfaceExtensionObject.h index f9e63adbe42..e0b2ac23d4a 100644 --- a/lib/Runtime/Library/JsBuiltInEngineInterfaceExtensionObject.h +++ b/lib/Runtime/Library/JsBuiltInEngineInterfaceExtensionObject.h @@ -1,18 +1,26 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #pragma once #ifdef ENABLE_JS_BUILTINS namespace Js { + + #define enum_file(class, type, obj) class##_##type, + typedef enum { + JsBuiltIns(enum_file) + } JsBuiltInFile; + #undef enum_file + class JsBuiltInEngineInterfaceExtensionObject : public EngineExtensionObjectBase { public: JsBuiltInEngineInterfaceExtensionObject(ScriptContext* scriptContext); void Initialize(); void InitializePrototypes(ScriptContext * scriptContext); - void InjectJsBuiltInLibraryCode(ScriptContext * scriptContext); + void InjectJsBuiltInLibraryCode(ScriptContext * scriptContext, JsBuiltInFile file); static bool __cdecl InitializeJsBuiltInNativeInterfaces(DynamicObject* intlNativeInterfaces, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode); @@ -36,15 +44,18 @@ namespace Js private: Field(DynamicObject*) builtInNativeInterfaces; - Field(FunctionBody*) jsBuiltInByteCode; - Field(bool) wasInitialized; + #define BuiltInFunctionBody(class, type, obj) Field(FunctionBody*) jsBuiltIn##class##_##type##Bytecode = nullptr; + JsBuiltIns(BuiltInFunctionBody) + #undef BuiltInFunctionBody + + Field(JsBuiltInFile) current; + Field(bool) wasInitialized = false; + Field(SRCINFO*) sourceInfo = nullptr; - void EnsureJsBuiltInByteCode(ScriptContext * scriptContext); + void EnsureSourceInfo(); + void JsBuiltInEngineInterfaceExtensionObject::DumpByteCode(JsBuiltInFile file); - static DynamicObject* GetPrototypeFromName(Js::PropertyIds propertyId, ScriptContext* scriptContext); - static void RecordDefaultIteratorFunctions(Js::PropertyIds propertyId, ScriptContext * scriptContext, JavascriptFunction* iteratorFunc); - static void RecordCommonNativeInterfaceBuiltIns(Js::PropertyIds propertyId, ScriptContext * scriptContext, JavascriptFunction * scriptFunction); static Var EntryJsBuiltIn_RegisterChakraLibraryFunction(RecyclableObject* function, CallInfo callInfo, ...); static Var EntryJsBuiltIn_RegisterFunction(RecyclableObject* function, CallInfo callInfo, ...); static Var EntryJsBuiltIn_Internal_GetLength(RecyclableObject* function, CallInfo callInfo, ...); diff --git a/lib/Runtime/Library/LazyJSONString.cpp b/lib/Runtime/Library/LazyJSONString.cpp index a5e2eb2e3bd..4f578005909 100644 --- a/lib/Runtime/Library/LazyJSONString.cpp +++ b/lib/Runtime/Library/LazyJSONString.cpp @@ -8,6 +8,51 @@ namespace Js { + /* Generated using the following js program: + function createEscapeMap(count) + { + var escapeMap = new Array(128); + + for(var i=0; i < escapeMap.length; i++) + { + escapeMap[i] = count ? 0 : "L\'\\0\'"; + } + for(var i=0; i < ' '.charCodeAt(0); i++) + { + escapeMap[i] = count ? 5 : "L\'u\'"; + } + escapeMap['\n'.charCodeAt(0)] = count ? 1 : "L\'n\'"; + escapeMap['\b'.charCodeAt(0)] = count ? 1 : "L\'b\'"; + escapeMap['\t'.charCodeAt(0)] = count ? 1 : "L\'t\'"; + escapeMap['\f'.charCodeAt(0)] = count ? 1 : "L\'f\'"; + escapeMap['\r'.charCodeAt(0)] = count ? 1 : "L\'r\'"; + escapeMap['\\'.charCodeAt(0)] = count ? 1 : "L\'\\\\\'"; + escapeMap['"'.charCodeAt(0)] = count ? 1 : "L\'\"\'"; + WScript.Echo("{ " + escapeMap.join(", ") + " }"); + } + createEscapeMap(false); + createEscapeMap(true); + */ + const WCHAR LazyJSONString::escapeMap[] = { + _u('u'), _u('u'), _u('u'), _u('u'), _u('u'), _u('u'), _u('u'), _u('u'), _u('b'), _u('t'), _u('n'), _u('u'), _u('f'), + _u('r'), _u('u'), _u('u'), _u('u'), _u('u'), _u('u'), _u('u'), _u('u'), _u('u'), _u('u'), _u('u'), _u('u'), _u('u'), + _u('u'), _u('u'), _u('u'), _u('u'), _u('u'), _u('u'), _u('\0'), _u('\0'), _u('"'), _u('\0'), _u('\0'), _u('\0'), + _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), + _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), + _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), + _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), + _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\\'), + _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), + _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), + _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), _u('\0'), + _u('\0'), _u('\0') }; + + const BYTE LazyJSONString::escapeMapCount[] = + { 5, 5, 5, 5, 5, 5, 5, 5, 1, 1, 1, 5, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 1, 0, 0, 0, 0, 0 + , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + , 0, 0, 0, 0, 0, 0, 0, 0 }; + LazyJSONString::LazyJSONString(_In_ JSONProperty* jsonContent, charcount_t length, _In_opt_ const char16* gap, charcount_t gapLength, _In_ StaticType* type) : JavascriptString(type), jsonContent(jsonContent), @@ -53,7 +98,7 @@ LazyJSONString::ReconstructObject(_In_ JSONObject* valueList) const { Var propertyValue = ReconstructVar(&entry.propertyValue); JavascriptString* propertyName = entry.propertyName; - PropertyString* propertyString = PropertyString::TryFromVar(propertyName); + PropertyString* propertyString = JavascriptOperators::TryFromVar(propertyName); PropertyValueInfo info; if (!propertyString || !propertyString->TrySetPropertyFromCache(obj, propertyValue, this->GetScriptContext(), PropertyOperation_None, &info)) { @@ -160,20 +205,9 @@ LazyJSONString::GetSz() return target; } -// static -bool -LazyJSONString::Is(Var var) -{ - return RecyclableObject::Is(var) && VirtualTableInfo::HasVirtualTable(RecyclableObject::FromVar(var)); -} - -// static -LazyJSONString* -LazyJSONString::TryFromVar(Var var) +template <> bool VarIsImpl(RecyclableObject* obj) { - return LazyJSONString::Is(var) - ? reinterpret_cast(var) - : nullptr; + return VirtualTableInfo::HasVirtualTable(obj); } } // namespace Js diff --git a/lib/Runtime/Library/LazyJSONString.h b/lib/Runtime/Library/LazyJSONString.h index 821875be09c..12a651745ce 100644 --- a/lib/Runtime/Library/LazyJSONString.h +++ b/lib/Runtime/Library/LazyJSONString.h @@ -77,7 +77,7 @@ struct JSONArray Field(JSONProperty) arr[]; }; -class LazyJSONString : JavascriptString +class LazyJSONString : public JavascriptString { private: Field(charcount_t) gapLength; @@ -88,6 +88,11 @@ class LazyJSONString : JavascriptString JavascriptArray* ReconstructArray(_In_ JSONArray* valueArray) const; Var ReconstructVar(_In_ JSONProperty* content) const; + + static const WCHAR escapeMap[128]; +public: + static const BYTE escapeMapCount[128]; + protected: DEFINE_VTABLE_CTOR(LazyJSONString, JavascriptString); @@ -100,14 +105,13 @@ class LazyJSONString : JavascriptString const char16* GetSz() override sealed; - static bool Is(Var var); - - static LazyJSONString* TryFromVar(Var var); - virtual VTableValue DummyVirtualFunctionToHinderLinkerICF() { return VTableValue::VtableLazyJSONString; } + }; // class LazyJSONString +template <> bool VarIsImpl(RecyclableObject* obj); + } // namespace Js diff --git a/lib/Runtime/Library/MapOrSetDataList.h b/lib/Runtime/Library/MapOrSetDataList.h index bcd1d89d445..47cd0543d4f 100644 --- a/lib/Runtime/Library/MapOrSetDataList.h +++ b/lib/Runtime/Library/MapOrSetDataList.h @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #pragma once @@ -25,7 +26,7 @@ namespace Js class MapOrSetDataNode { private: - template + template friend class MapOrSetDataList; Field(MapOrSetDataNode*) next; diff --git a/lib/Runtime/Library/MathLibrary.cpp b/lib/Runtime/Library/MathLibrary.cpp index e8e56c9e57c..cd97d6aec80 100644 --- a/lib/Runtime/Library/MathLibrary.cpp +++ b/lib/Runtime/Library/MathLibrary.cpp @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #include "RuntimeLibraryPch.h" @@ -8,10 +9,6 @@ #include -#if defined(_M_IX86) || defined(_M_X64) -#pragma intrinsic(_mm_round_sd) -#endif - const LPCWSTR UCrtC99MathApis::LibraryName = _u("api-ms-win-crt-math-l1-1-0.dll"); void UCrtC99MathApis::Ensure() @@ -741,28 +738,35 @@ namespace Js else { double current = JavascriptConversion::ToNumber(args[1], scriptContext); + + bool returnNaN = false; if (JavascriptNumber::IsNan(current)) { - return scriptContext->GetLibrary()->GetNaN(); + returnNaN = true; } for (uint idxArg = 2; idxArg < args.Info.Count; idxArg++) { double compare = JavascriptConversion::ToNumber(args[idxArg], scriptContext); - if (JavascriptNumber::IsNan(compare)) + if (JavascriptNumber::IsNan(compare) || returnNaN) // Call ToNumber for all args { - return scriptContext->GetLibrary()->GetNaN(); + returnNaN = true; } // In C++, -0.0f == 0.0f; however, in ES, -0.0f < 0.0f. Thus, use additional library // call to test this comparison. - if ((compare == 0 && JavascriptNumber::IsNegZero(current)) || + else if ((compare == 0 && JavascriptNumber::IsNegZero(current)) || current < compare) { current = compare; } } + if (returnNaN) + { + return scriptContext->GetLibrary()->GetNaN(); + } + return JavascriptNumber::ToVarNoCheck(current, scriptContext); } } @@ -821,28 +825,35 @@ namespace Js else { double current = JavascriptConversion::ToNumber(args[1], scriptContext); + + bool returnNaN = false; if (JavascriptNumber::IsNan(current)) { - return scriptContext->GetLibrary()->GetNaN(); + returnNaN = true; } for (uint idxArg = 2; idxArg < args.Info.Count; idxArg++) { double compare = JavascriptConversion::ToNumber(args[idxArg], scriptContext); - if (JavascriptNumber::IsNan(compare)) + if (JavascriptNumber::IsNan(compare) || returnNaN) // Call ToNumber for all args { - return scriptContext->GetLibrary()->GetNaN(); + returnNaN = true; } // In C++, -0.0f == 0.0f; however, in ES, -0.0f < 0.0f. Thus, use additional library // call to test this comparison. - if ((current == 0 && JavascriptNumber::IsNegZero(compare)) || + else if ((current == 0 && JavascriptNumber::IsNegZero(compare)) || current > compare) { current = compare; } } + if (returnNaN) + { + return scriptContext->GetLibrary()->GetNaN(); + } + return JavascriptNumber::ToVarNoCheck(current, scriptContext); } } diff --git a/lib/Runtime/Library/ModuleRoot.h b/lib/Runtime/Library/ModuleRoot.h index 61f2c8a3c58..1691c72ce15 100644 --- a/lib/Runtime/Library/ModuleRoot.h +++ b/lib/Runtime/Library/ModuleRoot.h @@ -50,7 +50,6 @@ namespace Js virtual BOOL DeleteRootProperty(PropertyId propertyId, PropertyOperationFlags flags) override; ModuleID GetModuleID() { return moduleID;} - static bool Is(Var aValue); protected: // For module binder, there is only one IDispatch* associated with the name provided diff --git a/lib/Runtime/Library/ObjectPrototypeObject.cpp b/lib/Runtime/Library/ObjectPrototypeObject.cpp index 8f7cfc90b31..5eb1cbe4748 100644 --- a/lib/Runtime/Library/ObjectPrototypeObject.cpp +++ b/lib/Runtime/Library/ObjectPrototypeObject.cpp @@ -80,8 +80,8 @@ namespace Js return scriptContext->GetLibrary()->GetUndefined(); } - RecyclableObject* object = RecyclableObject::FromVar(arg0); - RecyclableObject* newPrototype = RecyclableObject::FromVar(args[1]); + RecyclableObject* object = VarTo(arg0); + RecyclableObject* newPrototype = VarTo(args[1]); // 5. Let status be O.[[SetPrototypeOf]](proto). // 6. ReturnIfAbrupt(status). diff --git a/lib/Runtime/Library/PropertyString.cpp b/lib/Runtime/Library/PropertyString.cpp index f38641baf47..f3de61febf4 100644 --- a/lib/Runtime/Library/PropertyString.cpp +++ b/lib/Runtime/Library/PropertyString.cpp @@ -35,25 +35,11 @@ namespace Js return &this->propertyRecordUsageCache; } - /* static */ - bool PropertyString::Is(RecyclableObject * obj) + template <> bool VarIsImpl(RecyclableObject * obj) { return VirtualTableInfo::HasVirtualTable(obj); } - /* static */ - bool PropertyString::Is(Var var) - { - return RecyclableObject::Is(var) && PropertyString::Is(RecyclableObject::UnsafeFromVar(var)); - } - - PropertyString* PropertyString::UnsafeFromVar(Js::Var aValue) - { - AssertMsg(Is(aValue), "Ensure var is actually a 'PropertyString'"); - - return static_cast(aValue); - } - const void * PropertyString::GetOriginalStringReference() { // Property record is the allocation containing the string buffer diff --git a/lib/Runtime/Library/PropertyString.h b/lib/Runtime/Library/PropertyString.h index b229f57ac41..ad30aee35f7 100644 --- a/lib/Runtime/Library/PropertyString.h +++ b/lib/Runtime/Library/PropertyString.h @@ -58,11 +58,6 @@ class PropertyString : public JavascriptString static uint32 GetOffsetOfLdElemInlineCache() { return offsetof(PropertyString, propertyRecordUsageCache) + PropertyRecordUsageCache::GetOffsetOfLdElemInlineCache(); } static uint32 GetOffsetOfStElemInlineCache() { return offsetof(PropertyString, propertyRecordUsageCache) + PropertyRecordUsageCache::GetOffsetOfStElemInlineCache(); } static uint32 GetOffsetOfHitRate() { return offsetof(PropertyString, propertyRecordUsageCache) + PropertyRecordUsageCache::GetOffsetOfHitRate(); } - static bool Is(Var var); - static bool Is(RecyclableObject * var); - - template static PropertyString* TryFromVar(T var); - static PropertyString* UnsafeFromVar(Var aValue); #if ENABLE_TTD //Get the associated property id for this string if there is on (e.g. it is a propertystring otherwise return Js::PropertyIds::_none) @@ -75,16 +70,6 @@ class PropertyString : public JavascriptString } }; -// Templated so that the Is call dispatchs to different function depending -// on if argument is already a RecyclableObject* or only known to be a Var -// -// In case it is known to be a RecyclableObject*, the Is call skips that check -template inline -PropertyString * PropertyString::TryFromVar(T var) -{ - return PropertyString::Is(var) - ? reinterpret_cast(var) - : nullptr; -} +template <> bool VarIsImpl(RecyclableObject * obj); } // namespace Js diff --git a/lib/Runtime/Library/RegexHelper.cpp b/lib/Runtime/Library/RegexHelper.cpp index 69c74cc8900..e65eb1bad9d 100644 --- a/lib/Runtime/Library/RegexHelper.cpp +++ b/lib/Runtime/Library/RegexHelper.cpp @@ -41,6 +41,15 @@ namespace Js return false; flags = (UnifiedRegex::RegexFlags)(flags | UnifiedRegex::MultilineRegexFlag); break; + case 's': + if (scriptContext->GetConfig()->IsES2018RegExDotAllEnabled()) + { + if ((flags & UnifiedRegex::DotAllRegexFlag) != 0) + return false; + flags = (UnifiedRegex::RegexFlags)(flags | UnifiedRegex::DotAllRegexFlag); + break; + } + return false; case 'u': if (scriptContext->GetConfig()->IsES6UnicodeExtensionsEnabled()) { @@ -115,7 +124,7 @@ namespace Js // generate a trivial options string right here on the stack and delegate to the string parsing // based implementation. // - const CharCount OPT_BUF_SIZE = 6; + const CharCount OPT_BUF_SIZE = 7; char16 opts[OPT_BUF_SIZE]; CharCount i = 0; @@ -131,6 +140,11 @@ namespace Js { opts[i++] = _u('m'); } + if (flags & UnifiedRegex::DotAllRegexFlag) + { + Assert(scriptContext->GetConfig()->IsES2018RegExDotAllEnabled()); + opts[i++] = _u('s'); + } if (flags & UnifiedRegex::UnicodeRegexFlag) { Assert(scriptContext->GetConfig()->IsES6UnicodeExtensionsEnabled()); @@ -797,8 +811,8 @@ namespace Js if (captureIndex < numGroups && (captureIndex != 0)) { Var group = getGroup(captureIndex, nonMatchValue); - if (JavascriptString::Is(group)) - concatenated.Append(JavascriptString::UnsafeFromVar(group)); + if (VarIs(group)) + concatenated.Append(UnsafeVarTo(group)); else if (group != nonMatchValue) concatenated.Append(replace, substitutionOffset, offset - substitutionOffset); } @@ -940,7 +954,7 @@ namespace Js return RegexEs6ReplaceImpl(scriptContext, thisObj, input, appendReplacement, noResult); } - Var RegexHelper::RegexEs6ReplaceImpl(ScriptContext* scriptContext, RecyclableObject* thisObj, JavascriptString* input, JavascriptFunction* replaceFn) + Var RegexHelper::RegexEs6ReplaceImpl(ScriptContext* scriptContext, RecyclableObject* thisObj, JavascriptString* input, RecyclableObject* replaceFn) { auto appendReplacement = [&]( CompoundString::Builder<64 * sizeof(void *) / sizeof(char16)>& resultBuilder, @@ -964,6 +978,9 @@ namespace Js ushort argCount = (ushort) numberOfCaptures + 4; PROBE_STACK_NO_DISPOSE(scriptContext, argCount * sizeof(Var)); + + ThreadContext* threadContext = scriptContext->GetThreadContext(); + Var* args = (Var*) _alloca(argCount * sizeof(Var)); args[0] = scriptContext->GetLibrary()->GetUndefined(); @@ -975,10 +992,9 @@ namespace Js } args[numberOfCaptures + 2] = JavascriptNumber::ToVar(position, scriptContext); args[numberOfCaptures + 3] = input; - - Js::Var replaceFnResult = scriptContext->GetThreadContext()->ExecuteImplicitCall(replaceFn, Js::ImplicitCall_Accessor, [=]()->Js::Var + Js::Var replaceFnResult = threadContext->ExecuteImplicitCall(replaceFn, Js::ImplicitCall_Accessor, [=]()->Js::Var { - return replaceFn->CallFunction(Arguments(CallInfo(argCount), args)); + return JavascriptFunction::CallFunction(replaceFn, replaceFn->GetEntryPoint(), Arguments(CallInfo(argCount), args)); }); JavascriptString* replace = JavascriptConversion::ToString(replaceFnResult, scriptContext); @@ -1232,7 +1248,7 @@ namespace Js return newString; } - Var RegexHelper::RegexReplaceImpl(ScriptContext* scriptContext, RecyclableObject* thisObj, JavascriptString* input, JavascriptFunction* replacefn) + Var RegexHelper::RegexReplaceImpl(ScriptContext* scriptContext, RecyclableObject* thisObj, JavascriptString* input, RecyclableObject* replacefn) { ScriptConfiguration const * scriptConfig = scriptContext->GetConfig(); @@ -1251,7 +1267,7 @@ namespace Js } // String.prototype.replace, replace value is a function (ES5 15.5.4.11) - Var RegexHelper::RegexEs5ReplaceImpl(ScriptContext* scriptContext, JavascriptRegExp* regularExpression, JavascriptString* input, JavascriptFunction* replacefn) + Var RegexHelper::RegexEs5ReplaceImpl(ScriptContext* scriptContext, JavascriptRegExp* regularExpression, JavascriptString* input, RecyclableObject* replacefn) { UnifiedRegex::RegexPattern* pattern = regularExpression->GetPattern(); JavascriptString* newString = nullptr; @@ -1334,7 +1350,7 @@ namespace Js ThreadContext* threadContext = scriptContext->GetThreadContext(); Var replaceVar = threadContext->ExecuteImplicitCall(replacefn, ImplicitCall_Accessor, [=]()->Js::Var { - return replacefn->CallFunction(Arguments(CallInfo(UInt16Math::Add(numGroups, 3)), replaceArgs)); + return JavascriptFunction::CallFunction(replacefn, replacefn->GetEntryPoint(), Arguments(CallInfo(UInt16Math::Add(numGroups, 3)), replaceArgs)); }); JavascriptString* replace = JavascriptConversion::ToString(replaceVar, scriptContext); concatenated.Append(input, offset, lastActualMatch.offset - offset); @@ -1467,7 +1483,7 @@ namespace Js return concatenated.ToString(); } - Var RegexHelper::StringReplace(ScriptContext* scriptContext, JavascriptString* match, JavascriptString* input, JavascriptFunction* replacefn) + Var RegexHelper::StringReplace(ScriptContext* scriptContext, JavascriptString* match, JavascriptString* input, RecyclableObject* replacefn) { CharCount indexMatched = JavascriptString::strstr(input, match, true); Assert(match->GetScriptContext() == scriptContext); @@ -1615,7 +1631,7 @@ namespace Js Js::Arguments(callInfo, args), scriptContext); }); - RecyclableObject* splitter = RecyclableObject::UnsafeFromVar(regEx); + RecyclableObject* splitter = UnsafeVarTo(regEx); JavascriptArray* arrayResult = scriptContext->GetLibrary()->CreateArray(); @@ -2304,7 +2320,7 @@ namespace Js return RegexHelper::CheckCrossContextAndMarshalResult(result, entryFunctionContext); } - Var RegexHelper::RegexReplaceFunction(ScriptContext* entryFunctionContext, RecyclableObject* thisObj, JavascriptString* input, JavascriptFunction* replacefn) + Var RegexHelper::RegexReplaceFunction(ScriptContext* entryFunctionContext, RecyclableObject* thisObj, JavascriptString* input, RecyclableObject* replacefn) { Var result = RegexHelper::RegexReplaceImpl(entryFunctionContext, thisObj, input, replacefn); return RegexHelper::CheckCrossContextAndMarshalResult(result, entryFunctionContext); @@ -2352,7 +2368,7 @@ namespace Js // an Object or Null. RegExp algorithms have special conditions for when the result is Null, // so we can directly cast to RecyclableObject. Assert(!JavascriptOperators::IsNull(result)); - return RecyclableObject::UnsafeFromVar(result); + return UnsafeVarTo(result); } JavascriptString* RegexHelper::GetMatchStrFromResult(RecyclableObject* result, ScriptContext* scriptContext) diff --git a/lib/Runtime/Library/RegexHelper.h b/lib/Runtime/Library/RegexHelper.h index c53bdc4c9ff..8ab40bb6f0c 100644 --- a/lib/Runtime/Library/RegexHelper.h +++ b/lib/Runtime/Library/RegexHelper.h @@ -105,9 +105,9 @@ namespace Js static Var RegexReplaceResultUsed(ScriptContext* entryFunctionContext, JavascriptRegExp* regularExpression, JavascriptString* input, JavascriptString* replace); static Var RegexReplaceResultNotUsed(ScriptContext* entryFunctionContext, JavascriptRegExp* regularExpression, JavascriptString* input, JavascriptString* replace); static Var RegexReplace(ScriptContext* scriptContext, RecyclableObject* thisObj, JavascriptString* input, JavascriptString* replace, bool noResult); - static Var RegexReplaceFunction(ScriptContext* scriptContext, RecyclableObject* thisObj, JavascriptString* input, JavascriptFunction* replacefn); + static Var RegexReplaceFunction(ScriptContext* scriptContext, RecyclableObject* thisObj, JavascriptString* input, RecyclableObject* replacefn); static Var StringReplace(JavascriptString* regularExpression, JavascriptString* input, JavascriptString* replace); - static Var StringReplace(ScriptContext* scriptContext, JavascriptString* regularExpression, JavascriptString* input, JavascriptFunction* replacefn); + static Var StringReplace(ScriptContext* scriptContext, JavascriptString* regularExpression, JavascriptString* input, RecyclableObject* replacefn); static Var RegexSplitResultUsed(ScriptContext* scriptContext, JavascriptRegExp* regularExpression, JavascriptString* input, CharCount limit); static Var RegexSplitResultUsedAndMayBeTemp(void *const stackAllocationPointer, ScriptContext* scriptContext, JavascriptRegExp* regularExpression, JavascriptString* input, CharCount limit); static Var RegexSplitResultNotUsed(ScriptContext* scriptContext, JavascriptRegExp* regularExpression, JavascriptString* input, CharCount limit); @@ -129,12 +129,12 @@ namespace Js static Var RegexReplaceImpl(ScriptContext* scriptContext, RecyclableObject* thisObj, JavascriptString* input, JavascriptString* replace, bool noResult); static bool IsRegexSymbolReplaceObservable(RecyclableObject* instance, ScriptContext* scriptContext); static Var RegexEs6ReplaceImpl(ScriptContext* scriptContext, RecyclableObject* thisObj, JavascriptString* input, JavascriptString* replace, bool noResult); - static Var RegexEs6ReplaceImpl(ScriptContext* scriptContext, RecyclableObject* thisObj, JavascriptString* input, JavascriptFunction* replaceFn); + static Var RegexEs6ReplaceImpl(ScriptContext* scriptContext, RecyclableObject* thisObj, JavascriptString* input, RecyclableObject* replaceFn); template static Var RegexEs6ReplaceImpl(ScriptContext* scriptContext, RecyclableObject* thisObj, JavascriptString* input, ReplacementFn appendReplacement, bool noResult); static Var RegexEs5ReplaceImpl(ScriptContext* scriptContext, JavascriptRegExp* regularExpression, JavascriptString* input, JavascriptString* replace, bool noResult); - static Var RegexReplaceImpl(ScriptContext* scriptContext, RecyclableObject* thisObj, JavascriptString* input, JavascriptFunction* replacefn); - static Var RegexEs5ReplaceImpl(ScriptContext* scriptContext, JavascriptRegExp* regularExpression, JavascriptString* input, JavascriptFunction* replacefn); + static Var RegexReplaceImpl(ScriptContext* scriptContext, RecyclableObject* thisObj, JavascriptString* input, RecyclableObject* replacefn); + static Var RegexEs5ReplaceImpl(ScriptContext* scriptContext, JavascriptRegExp* regularExpression, JavascriptString* input, RecyclableObject* replacefn); static Var RegexSearchImpl(ScriptContext* scriptContext, JavascriptRegExp* regularExpression, JavascriptString* input); inline static UnifiedRegex::RegexPattern *GetSplitPattern(ScriptContext* scriptContext, JavascriptRegExp *regularExpression); static bool IsRegexSymbolSplitObservable(RecyclableObject* instance, ScriptContext* scriptContext); diff --git a/lib/Runtime/Library/RootObjectBase.cpp b/lib/Runtime/Library/RootObjectBase.cpp index 87e5adc062f..508e32a39af 100644 --- a/lib/Runtime/Library/RootObjectBase.cpp +++ b/lib/Runtime/Library/RootObjectBase.cpp @@ -21,29 +21,6 @@ namespace Js DynamicObject(type, scriptContext), hostObject(nullptr), loadInlineCacheMap(nullptr), loadMethodInlineCacheMap(nullptr), storeInlineCacheMap(nullptr) {} - bool RootObjectBase::Is(Var var) - { - return RecyclableObject::Is(var) && RootObjectBase::Is(RecyclableObject::UnsafeFromVar(var)); - } - - bool RootObjectBase::Is(RecyclableObject* obj) - { - TypeId id = obj->GetTypeId(); - return id == TypeIds_GlobalObject || id == TypeIds_ModuleRoot; - } - - RootObjectBase * RootObjectBase::FromVar(Var var) - { - AssertOrFailFast(RootObjectBase::Is(var)); - return static_cast(var); - } - - RootObjectBase * RootObjectBase::UnsafeFromVar(Var var) - { - Assert(RootObjectBase::Is(var)); - return static_cast(var); - } - HostObjectBase * RootObjectBase::GetHostObject() const { Assert(hostObject == nullptr || Js::JavascriptOperators::GetTypeId(hostObject) == TypeIds_HostObject); @@ -156,6 +133,18 @@ namespace Js return true; } + void + RootObjectBase::EnsureCanDeclGloFunc(PropertyId propertyId) + { + // #sec-candeclareglobalfunction states that if an exisiting property is + // not configurable, not writable, and not enumerable, return false. + if (!IsConfigurable(propertyId) && !IsWritable(propertyId) && !IsEnumerable(propertyId)) + { + JavascriptError::ThrowTypeError(GetScriptContext(), JSERR_InvalidGloFuncDecl, + GetScriptContext()->GetPropertyName(propertyId)->GetBuffer()); + } + } + BOOL RootObjectBase::HasOwnPropertyCheckNoRedecl(PropertyId propertyId) { diff --git a/lib/Runtime/Library/RootObjectBase.h b/lib/Runtime/Library/RootObjectBase.h index 22afe5fc074..ca11d0715fd 100644 --- a/lib/Runtime/Library/RootObjectBase.h +++ b/lib/Runtime/Library/RootObjectBase.h @@ -32,6 +32,7 @@ namespace Js virtual BOOL EnsureProperty(PropertyId propertyId) override; virtual BOOL EnsureNoRedeclProperty(PropertyId propertyId) override sealed; virtual BOOL HasOwnPropertyCheckNoRedecl(PropertyId propertyId) override sealed; + void EnsureCanDeclGloFunc(PropertyId propertyId); // These are special "Root" versions of the property APIs that allow access // to global let and const variables, which are stored as properties on the @@ -54,11 +55,6 @@ namespace Js bool IsLetConstGlobal(PropertyId propertyId); #endif - static bool Is(Var var); - static bool Is(RecyclableObject * obj); - static RootObjectBase * FromVar(Var var); - static RootObjectBase * UnsafeFromVar(Var var); - protected: DEFINE_VTABLE_CTOR(RootObjectBase, DynamicObject); @@ -74,6 +70,12 @@ namespace Js Field(RootObjectInlineCacheMap *) storeInlineCacheMap; }; + template <> inline bool VarIsImpl(RecyclableObject* obj) + { + TypeId id = obj->GetTypeId(); + return id == TypeIds_GlobalObject || id == TypeIds_ModuleRoot; + } + template void RootObjectBase::MapLetConstGlobals(Fn fn) diff --git a/lib/Runtime/Library/RuntimeFunction.cpp b/lib/Runtime/Library/RuntimeFunction.cpp index 0b8bea81377..aa0e445eb6f 100644 --- a/lib/Runtime/Library/RuntimeFunction.cpp +++ b/lib/Runtime/Library/RuntimeFunction.cpp @@ -7,15 +7,15 @@ namespace Js { RuntimeFunction::RuntimeFunction(DynamicType * type) - : JavascriptFunction(type), functionNameId(nullptr) + : JavascriptFunction(type), isDisplayString(false), functionNameId(nullptr) {} RuntimeFunction::RuntimeFunction(DynamicType * type, FunctionInfo * functionInfo) - : JavascriptFunction(type, functionInfo), functionNameId(nullptr) + : JavascriptFunction(type, functionInfo), isDisplayString(false), functionNameId(nullptr) {} RuntimeFunction::RuntimeFunction(DynamicType * type, FunctionInfo * functionInfo, ConstructorCache* cache) - : JavascriptFunction(type, functionInfo, cache), functionNameId(nullptr) + : JavascriptFunction(type, functionInfo, cache), isDisplayString(false), functionNameId(nullptr) {} JavascriptString * @@ -24,33 +24,39 @@ namespace Js JavascriptLibrary* library = this->GetLibrary(); ScriptContext * scriptContext = library->GetScriptContext(); JavascriptString * retStr = nullptr; + if (this->isDisplayString) + { + return VarTo(this->functionNameId); + } + if (this->functionNameId == nullptr) { retStr = library->GetFunctionDisplayString(); - this->functionNameId = retStr; } else { + if (this->GetTypeHandler()->IsDeferredTypeHandler()) + { + JavascriptString* functionName = nullptr; + DebugOnly(bool status = ) this->GetFunctionName(&functionName); + Assert(status); + this->SetPropertyWithAttributes(PropertyIds::name, functionName, PropertyConfigurable, nullptr); + } if (TaggedInt::Is(this->functionNameId)) { - if (this->GetTypeHandler()->IsDeferredTypeHandler()) - { - JavascriptString* functionName = nullptr; - DebugOnly(bool status = ) this->GetFunctionName(&functionName); - Assert(status); - this->SetPropertyWithAttributes(PropertyIds::name, functionName, PropertyConfigurable, nullptr); - } - // This has a side-effect where any other code (such as debugger) that uses functionNameId value will now get the value like "function foo() { native code }" // instead of just "foo". Alternative ways will need to be devised; if it's not desirable to use this full display name value in those cases. - retStr = GetNativeFunctionDisplayString(scriptContext, scriptContext->GetPropertyString(TaggedInt::ToInt32(this->functionNameId))); - this->functionNameId = retStr; + retStr = GetNativeFunctionDisplayString(scriptContext, scriptContext->GetPropertyString(TaggedInt::ToInt32(this->functionNameId))); } else { - retStr = JavascriptString::FromVar(this->functionNameId); + retStr = GetNativeFunctionDisplayString(scriptContext, VarTo(this->functionNameId)); } } + + this->functionNameId = retStr; + this->isDisplayString = true; + return retStr; } @@ -58,10 +64,11 @@ namespace Js RuntimeFunction::SetFunctionNameId(Var nameId) { Assert(functionNameId == NULL); - Assert(TaggedInt::Is(nameId) || Js::JavascriptString::Is(nameId)); + Assert(TaggedInt::Is(nameId) || Js::VarIs(nameId)); // We are only reference the propertyId, it needs to be tracked to stay alive Assert(!TaggedInt::Is(nameId) || this->GetScriptContext()->IsTrackedPropertyId(TaggedInt::ToInt32(nameId))); + this->isDisplayString = false; this->functionNameId = nameId; } diff --git a/lib/Runtime/Library/RuntimeFunction.h b/lib/Runtime/Library/RuntimeFunction.h index d8f3abe4380..bf9c807d663 100644 --- a/lib/Runtime/Library/RuntimeFunction.h +++ b/lib/Runtime/Library/RuntimeFunction.h @@ -25,6 +25,7 @@ namespace Js // NOTE: This has a side-effect that after toString() is called for the first time on a built-in function the functionNameId gets replaced with a string like "function foo() { native code }". // As a result any code like debugger(F12) that shows the functionNameId to the user will need to pre-process this string as it may not be desirable to use this as-is in some cases. // See RuntimeFunction::EnsureSourceString() for details. + Field(bool) isDisplayString; Field(Var) functionNameId; virtual Var GetSourceString() const { return functionNameId; } virtual JavascriptString * EnsureSourceString(); diff --git a/lib/Runtime/Library/RuntimeLibraryPch.h b/lib/Runtime/Library/RuntimeLibraryPch.h index edb6ee1e31c..7fcc9891470 100644 --- a/lib/Runtime/Library/RuntimeLibraryPch.h +++ b/lib/Runtime/Library/RuntimeLibraryPch.h @@ -14,13 +14,13 @@ #include "Library/JavascriptNumberObject.h" #include "Library/JavascriptStringObject.h" #include "Library/JavascriptBooleanObject.h" +#include "Library/JavascriptBigIntObject.h" #include "Library/ObjectPrototypeObject.h" #include "Common/ByteSwap.h" #include "Library/DataView.h" -#include "Library/JSONString.h" #include "Library/LazyJSONString.h" #include "Library/JSONStringBuilder.h" #include "Library/JSONStringifier.h" @@ -31,18 +31,24 @@ #include "Library/BoundFunction.h" #include "Library/JavascriptGeneratorFunction.h" +#include "Library/JavascriptAsyncFunction.h" +#include "Library/JavascriptAsyncGeneratorFunction.h" #include "Library/RegexHelper.h" #include "Library/JavascriptRegularExpression.h" #include "Library/JavascriptRegExpConstructor.h" #include "Library/JavascriptRegularExpressionResult.h" -#include "Library/JavascriptVariantDate.h" +#include "Library/JavascriptAsyncFromSyncIterator.h" #include "Library/JavascriptPromise.h" #include "Library/JavascriptSymbolObject.h" +#ifdef _CHAKRACOREBUILD +#include "Library/CustomExternalWrapperObject.h" +#endif #include "Library/JavascriptProxy.h" #include "Library/JavascriptReflect.h" #include "Library/JavascriptGenerator.h" +#include "Library/JavascriptAsyncGenerator.h" #include "Library/SameValueComparer.h" #include "Library/MapOrSetDataList.h" diff --git a/lib/Runtime/Library/SameValueComparer.h b/lib/Runtime/Library/SameValueComparer.h index e57c1e548bc..8edbd3e9e09 100644 --- a/lib/Runtime/Library/SameValueComparer.h +++ b/lib/Runtime/Library/SameValueComparer.h @@ -63,7 +63,7 @@ namespace Js case TypeIds_Int64Number: case TypeIds_UInt64Number: { - __int64 v = JavascriptInt64Number::FromVar(i)->GetValue(); + __int64 v = VarTo(i)->GetValue(); double d = (double) v; if (v != (__int64) d) { @@ -85,7 +85,7 @@ namespace Js case TypeIds_String: { - JavascriptString* v = JavascriptString::UnsafeFromVar(i); + JavascriptString* v = UnsafeVarTo(i); return JsUtil::CharacterBuffer::StaticGetHashCode(v->GetString(), v->GetLength()); } diff --git a/lib/Runtime/Library/ScriptFunction.cpp b/lib/Runtime/Library/ScriptFunction.cpp index 6d24e7aeba3..18d49eccea6 100644 --- a/lib/Runtime/Library/ScriptFunction.cpp +++ b/lib/Runtime/Library/ScriptFunction.cpp @@ -14,37 +14,25 @@ using namespace Js; JavascriptFunction(type, functionInfo) {} - bool ScriptFunctionBase::Is(Var func) + template <> bool Js::VarIsImpl(RecyclableObject* obj) { - if (JavascriptFunction::Is(func)) + if (VarIs(obj)) { - JavascriptFunction *function = JavascriptFunction::UnsafeFromVar(func); + JavascriptFunction *function = UnsafeVarTo(obj); return ScriptFunction::Test(function) || JavascriptGeneratorFunction::Test(function) - || JavascriptAsyncFunction::Test(function); + || JavascriptAsyncFunction::Test(function) || JavascriptAsyncGeneratorFunction::Test(function); } return false; } - ScriptFunctionBase * ScriptFunctionBase::FromVar(Var func) - { - AssertOrFailFast(ScriptFunctionBase::Is(func)); - return reinterpret_cast(func); - } - - ScriptFunctionBase * ScriptFunctionBase::UnsafeFromVar(Var func) - { - Assert(ScriptFunctionBase::Is(func)); - return reinterpret_cast(func); - } - - ScriptFunction::ScriptFunction(FunctionProxy * proxy, ScriptFunctionType* deferredPrototypeType) - : ScriptFunctionBase(deferredPrototypeType, proxy->GetFunctionInfo()), + ScriptFunction::ScriptFunction(FunctionProxy * proxy, ScriptFunctionType* type) + : ScriptFunctionBase(type, proxy->GetFunctionInfo()), environment((FrameDisplay*)&NullFrameDisplay), cachedScopeObj(nullptr), hasInlineCaches(false) { Assert(proxy->GetFunctionInfo()->GetFunctionProxy() == proxy); - Assert(proxy->EnsureDeferredPrototypeType() == deferredPrototypeType); + Assert(proxy->GetDeferredPrototypeType() == type || proxy->GetUndeferredFunctionType() == type); DebugOnly(VerifyEntryPoint()); #if ENABLE_NATIVE_CODEGEN @@ -109,13 +97,11 @@ using namespace Js; pfuncScript->SetEnvironment(environment); ScriptFunctionType *scFuncType = functionProxy->GetUndeferredFunctionType(); - if (scFuncType) + if (scFuncType && pfuncScript->GetType() == functionProxy->GetDeferredPrototypeType()) { - Assert(pfuncScript->GetType() == functionProxy->GetDeferredPrototypeType()); pfuncScript->GetTypeHandler()->EnsureObjectReady(pfuncScript); } - JS_ETW(EventWriteJSCRIPT_RECYCLER_ALLOCATE_FUNCTION(pfuncScript, EtwTrace::GetFunctionId(functionProxy))); return pfuncScript; @@ -131,10 +117,55 @@ using namespace Js; ScriptFunction* scriptFunc = ScriptFunction::OP_NewScFunc(environment, infoRef); scriptFunc->SetHomeObj(homeObj); + // After setting homeobject we need to set the name if the object is ready. + if ((*infoRef)->GetFunctionProxy()->GetUndeferredFunctionType()) + { + if (!scriptFunc->IsAnonymousFunction() && + !scriptFunc->GetFunctionInfo()->IsClassConstructor() && + !scriptFunc->GetFunctionProxy()->EnsureDeserialized()->GetIsStaticNameFunction()) + { + JavascriptString * functionName = scriptFunc->GetDisplayNameImpl(); + scriptFunc->SetPropertyWithAttributes(PropertyIds::name, functionName, PropertyConfigurable, nullptr); + } + } + return scriptFunc; JIT_HELPER_END(ScrFunc_OP_NewScFuncHomeObj); } + ScriptFunction * ScriptFunction::OP_NewClassConstructor(FrameDisplay *environment, FunctionInfoPtrPtr infoRef, Var homeObj, RecyclableObject *constructorParent) + { + JIT_HELPER_NOT_REENTRANT_HEADER(ScrFunc_OP_NewClassConstructor, reentrancylock, (*infoRef)->GetFunctionProxy()->GetScriptContext()->GetThreadContext()); + FunctionProxy * proxy = (*infoRef)->GetFunctionProxy(); + if (proxy->GetUndeferredFunctionType() == nullptr) + { + DynamicTypeHandler * typeHandler = proxy->GetIsAnonymousFunction() + ? proxy->GetScriptContext()->GetLibrary()->AnonymousClassConstructorTypeHandler() + : proxy->GetScriptContext()->GetLibrary()->ClassConstructorTypeHandler(); + ScriptFunctionType * newType = ScriptFunctionType::New(proxy, typeHandler, constructorParent, true); + proxy->SetUndeferredFunctionType(newType); + } + ScriptFunction * scriptFunction = OP_NewScFuncHomeObj(environment, infoRef, homeObj); + if (scriptFunction->GetPrototype() != constructorParent) + { + scriptFunction->SetPrototype(constructorParent); + } + + Var length = TaggedInt::ToVarUnchecked((*infoRef)->GetFunctionProxy()->EnsureDeserialized()->GetReportedInParamsCount() - 1); + scriptFunction->SetSlot(SetSlotArguments(Constants::NoProperty, 1, length)); + + if (!scriptFunction->IsAnonymousFunction() && !scriptFunction->GetFunctionInfo()->HasComputedName()) + { + JavascriptString * functionName = nullptr; + bool result = scriptFunction->GetFunctionName(&functionName); + Assert(result); + scriptFunction->SetSlot(SetSlotArguments(Constants::NoProperty, 2, functionName)); + } + + return scriptFunction; + JIT_HELPER_END(ScrFunc_OP_NewClassConstructor); + } + void ScriptFunction::SetEnvironment(FrameDisplay * environment) { //Assert(ThreadContext::IsOnStack(this) || !ThreadContext::IsOnStack(environment)); @@ -160,28 +191,11 @@ using namespace Js; for (uint i = 0; i < length; i++) { Var scope = pDisplay->GetItem(i); - RecyclableObject *scopeObj = RecyclableObject::FromVar(scope); + RecyclableObject *scopeObj = VarTo(scope); scopeObj->InvalidateCachedScope(); } } - bool ScriptFunction::Is(Var func) - { - return JavascriptFunction::Is(func) && JavascriptFunction::UnsafeFromVar(func)->IsScriptFunction(); - } - - ScriptFunction * ScriptFunction::FromVar(Var func) - { - AssertOrFailFast(ScriptFunction::Is(func)); - return reinterpret_cast(func); - } - - ScriptFunction * ScriptFunction::UnsafeFromVar(Var func) - { - Assert(ScriptFunction::Is(func)); - return reinterpret_cast(func); - } - ProxyEntryPointInfo * ScriptFunction::GetEntryPointInfo() const { return this->GetScriptFunctionType()->GetEntryPointInfo(); @@ -325,117 +339,6 @@ using namespace Js; return this->GetFunctionProxy()->EnsureDeserialized()->GetCachedSourceString(); } - JavascriptString * ScriptFunction::FormatToString(JavascriptString* inputString) - { - FunctionProxy* proxy = this->GetFunctionProxy(); - ParseableFunctionInfo * pFuncBody = proxy->EnsureDeserialized(); - JavascriptString * returnStr = nullptr; - - EnterPinnedScope((volatile void**)& inputString); - const char16 * inputStr = inputString->GetString(); - const char16 * paramStr = wcschr(inputStr, _u('(')); - - if (paramStr == nullptr || wcscmp(pFuncBody->GetDisplayName(), Js::Constants::EvalCode) == 0) - { - Assert(pFuncBody->IsEval()); - return inputString; - } - - ScriptContext* scriptContext = this->GetScriptContext(); - JavascriptLibrary* library = scriptContext->GetLibrary(); - bool isClassMethod = this->GetFunctionInfo()->IsClassMethod() || this->GetFunctionInfo()->IsClassConstructor(); - - JavascriptString* prefixString = nullptr; - uint prefixStringLength = 0; - const char16* name = _u(""); - charcount_t nameLength = 0; - - if (!isClassMethod) - { - prefixString = library->GetFunctionPrefixString(); - if (pFuncBody->IsGenerator()) - { - prefixString = library->GetGeneratorFunctionPrefixString(); - } - else if (pFuncBody->IsAsync()) - { - prefixString = library->GetAsyncFunctionPrefixString(); - } - prefixStringLength = prefixString->GetLength(); - - if (pFuncBody->GetIsAccessor()) - { - name = pFuncBody->GetShortDisplayName(&nameLength); - - } - else if (pFuncBody->GetIsDeclaration() || pFuncBody->GetIsNamedFunctionExpression()) - { - name = pFuncBody->GetDisplayName(); - nameLength = pFuncBody->GetDisplayNameLength(); - if (name == Js::Constants::FunctionCode) - { - name = Js::Constants::Anonymous; - nameLength = Js::Constants::AnonymousLength; - } - - } - } - else - { - if (this->GetFunctionInfo()->IsClassConstructor()) - { - name = _u("constructor"); - nameLength = _countof(_u("constructor")) -1; //subtract off \0 - } - else - { - name = pFuncBody->GetShortDisplayName(&nameLength); //strip off prototype. - } - } - - Var computedNameVar = this->GetComputedNameVar(); - - ENTER_PINNED_SCOPE(JavascriptString, computedName); - if (computedNameVar != nullptr) - { - computedName = ScriptFunction::GetComputedName(computedNameVar, scriptContext); - prefixString = nullptr; - prefixStringLength = 0; - name = computedName->GetString(); - nameLength = computedName->GetLength(); - } - - uint functionBodyLength = inputString->GetLength() - ((uint)(paramStr - inputStr)); - size_t totalLength = prefixStringLength + functionBodyLength + nameLength; - - if (!IsValidCharCount(totalLength)) - { - // We throw here because computed property names are evaluated at runtime and - // thus are not a subset string of function body source (parameter inputString). - // For all other cases totalLength <= inputString->GetLength(). - JavascriptExceptionOperators::ThrowOutOfMemory(this->GetScriptContext()); - } - - char16 * funcBodyStr = RecyclerNewArrayLeaf(this->GetScriptContext()->GetRecycler(), char16, totalLength); - char16 * funcBodyStrStart = funcBodyStr; - if (prefixString != nullptr) - { - js_wmemcpy_s(funcBodyStr, prefixStringLength, prefixString->GetString(), prefixStringLength); - funcBodyStrStart += prefixStringLength; - } - - js_wmemcpy_s(funcBodyStrStart, nameLength, name, nameLength); - funcBodyStrStart = funcBodyStrStart + nameLength; - js_wmemcpy_s(funcBodyStrStart, functionBodyLength, paramStr, functionBodyLength); - - returnStr = LiteralString::NewCopyBuffer(funcBodyStr, (charcount_t)totalLength, scriptContext); - - LEAVE_PINNED_SCOPE(); // computedName - LeavePinnedScope(); // inputString - - return returnStr; - } - JavascriptString * ScriptFunction::EnsureSourceString() { // The function may be defer serialize, need to be deserialized @@ -474,28 +377,46 @@ using namespace Js; charcount_t cch = pFuncBody->LengthInChars(); size_t cbLength = pFuncBody->LengthInBytes(); - LPCUTF8 pbStart = pFuncBody->GetSource(_u("ScriptFunction::EnsureSourceString")); - BufferStringBuilder builder(cch, scriptContext); + LPCUTF8 pbStart = pFuncBody->GetToStringSource(_u("ScriptFunction::EnsureSourceString")); + size_t cbPreludeLength = 0; + // cch and cbLength refer to the length of the parse, which may be smaller than the length of the to-string function + PrintOffsets* printOffsets = pFuncBody->GetPrintOffsets(); + if (printOffsets != nullptr) + { + Assert((printOffsets->cbEndPrintOffset - printOffsets->cbStartPrintOffset) >= cbLength); + cbPreludeLength = (printOffsets->cbEndPrintOffset - printOffsets->cbStartPrintOffset) - cbLength; + + Assert(pFuncBody->StartOffset() >= printOffsets->cbStartPrintOffset); + cbLength = printOffsets->cbEndPrintOffset - printOffsets->cbStartPrintOffset; + } + Assert(cbPreludeLength < MaxCharCount); + // the toString of a function may include some prelude, e.g. the computed name expression. + // We do not store the char-index of the start, but if there are cbPreludeLength bytes difference, + // then that is an upper bound on the number of characters difference. + // We also assume that function.toString is relatively infrequent, and non-ascii characters in + // a prelude are relatively infrequent, so the inaccuracy here should in general be insignificant + BufferStringBuilder builder(cch + static_cast(cbPreludeLength), scriptContext); utf8::DecodeOptions options = pFuncBody->GetUtf8SourceInfo()->IsCesu8() ? utf8::doAllowThreeByteSurrogates : utf8::doDefault; size_t decodedCount = utf8::DecodeUnitsInto(builder.DangerousGetWritableBuffer(), pbStart, pbStart + cbLength, options); - if (decodedCount != cch) + if (decodedCount < cch) { AssertMsg(false, "Decoded incorrect number of characters for function body"); Js::Throw::FatalInternalError(); } - - if (pFuncBody->IsLambda() || this->GetFunctionInfo()->IsActiveScript() || this->GetFunctionInfo()->IsClassConstructor() -#ifdef ENABLE_PROJECTION - || scriptContext->GetConfig()->IsWinRTEnabled() -#endif - ) + else if (decodedCount < cch + static_cast(cbPreludeLength)) { - cachedSourceString = builder.ToString(); + Recycler* recycler = scriptContext->GetRecycler(); + + char16* buffer = RecyclerNewArrayLeaf(recycler, char16, decodedCount + 1); + wmemcpy_s(buffer, decodedCount, builder.DangerousGetWritableBuffer(), decodedCount); + buffer[decodedCount] = 0; + + cachedSourceString = JavascriptString::NewWithBuffer(buffer, static_cast(decodedCount), scriptContext); } else { - cachedSourceString = FormatToString(builder.ToString()); + cachedSourceString = builder.ToString(); } } else @@ -662,23 +583,6 @@ using namespace Js; ScriptFunction(proxy, deferredPrototypeType), m_moduleEnvironment(nullptr) {} - bool AsmJsScriptFunction::Is(Var func) - { - return ScriptFunction::Is(func) && ScriptFunction::UnsafeFromVar(func)->IsAsmJsFunction(); - } - - AsmJsScriptFunction* AsmJsScriptFunction::FromVar(Var func) - { - AssertOrFailFast(AsmJsScriptFunction::Is(func)); - return reinterpret_cast(func); - } - - AsmJsScriptFunction* AsmJsScriptFunction::UnsafeFromVar(Var func) - { - Assert(AsmJsScriptFunction::Is(func)); - return reinterpret_cast(func); - } - AsmJsScriptFunction * AsmJsScriptFunction::OP_NewAsmJsFunc(FrameDisplay *environment, FunctionInfoPtrPtr infoRef) { AssertMsg(infoRef != nullptr, "BYTE-CODE VERIFY: Must specify a valid function to create"); @@ -714,23 +618,6 @@ using namespace Js; Assert(!proxy->GetFunctionInfo()->HasComputedName()); } - bool WasmScriptFunction::Is(Var func) - { - return ScriptFunction::Is(func) && ScriptFunction::UnsafeFromVar(func)->IsWasmFunction(); - } - - WasmScriptFunction* WasmScriptFunction::FromVar(Var func) - { - AssertOrFailFast(WasmScriptFunction::Is(func)); - return reinterpret_cast(func); - } - - WasmScriptFunction* WasmScriptFunction::UnsafeFromVar(Var func) - { - Assert(WasmScriptFunction::Is(func)); - return reinterpret_cast(func); - } - WebAssemblyMemory* WasmScriptFunction::GetWebAssemblyMemory() const { return (WebAssemblyMemory*)PointerValue( @@ -742,23 +629,6 @@ using namespace Js; ScriptFunction(proxy, deferredPrototypeType) {} - bool ScriptFunctionWithInlineCache::Is(Var func) - { - return ScriptFunction::Is(func) && ScriptFunction::UnsafeFromVar(func)->GetHasInlineCaches(); - } - - ScriptFunctionWithInlineCache* ScriptFunctionWithInlineCache::FromVar(Var func) - { - AssertOrFailFast(ScriptFunctionWithInlineCache::Is(func)); - return reinterpret_cast(func); - } - - ScriptFunctionWithInlineCache* ScriptFunctionWithInlineCache::UnsafeFromVar(Var func) - { - Assert(ScriptFunctionWithInlineCache::Is(func)); - return reinterpret_cast(func); - } - InlineCache * ScriptFunctionWithInlineCache::GetInlineCache(uint index) { void** inlineCaches = this->GetInlineCaches(); @@ -917,9 +787,9 @@ using namespace Js; bool ScriptFunction::GetSymbolName(Var computedNameVar, const char16** symbolName, charcount_t* length) { - if (nullptr != computedNameVar && JavascriptSymbol::Is(computedNameVar)) + if (nullptr != computedNameVar && VarIs(computedNameVar)) { - const PropertyRecord* symbolRecord = JavascriptSymbol::FromVar(computedNameVar)->GetValue(); + const PropertyRecord* symbolRecord = VarTo(computedNameVar)->GetValue(); *symbolName = symbolRecord->GetBuffer(); *length = symbolRecord->GetLength(); return true; @@ -1037,3 +907,111 @@ using namespace Js; } SetHasInlineCaches(false); } + + template <> + void FunctionWithComputedName::SetComputedNameVar(Var computedNameVar) + { + this->computedNameVar = computedNameVar; + } + + template <> + void FunctionWithComputedName::SetComputedNameVar(Var computedNameVar) + { + this->computedNameVar = computedNameVar; + } + + template <> + void FunctionWithComputedName::SetComputedNameVar(Var computedNameVar) + { + this->computedNameVar = computedNameVar; + } + + template <> + void FunctionWithComputedName::SetComputedNameVar(Var computedNameVar) + { + this->computedNameVar = computedNameVar; + } + + template <> + void FunctionWithComputedName>::SetComputedNameVar(Var computedNameVar) + { + this->computedNameVar = computedNameVar; + } + + template <> + void FunctionWithComputedName>::SetComputedNameVar(Var computedNameVar) + { + this->computedNameVar = computedNameVar; + if (GetFunctionInfo()->IsClassConstructor()) + { + // For class with computed name, we wait until now to set the name property. + JavascriptString * functionName = nullptr; + bool result = GetFunctionName(&functionName); + Assert(result); + SetSlot(SetSlotArguments(Constants::NoProperty, 2, functionName)); + } + } + + template <> + void FunctionWithComputedName>::SetComputedNameVar(Var computedNameVar) + { + this->computedNameVar = computedNameVar; + if (GetFunctionInfo()->IsClassConstructor()) + { + // For class with computed name, we wait until now to set the name property. + JavascriptString * functionName = nullptr; + bool result = GetFunctionName(&functionName); + Assert(result); + SetSlot(SetSlotArguments(Constants::NoProperty, 2, functionName)); + } + } + + template <> VTableValue Js::FunctionWithComputedName::DummyVirtualFunctionToHinderLinkerICF() const + { + return VTableValue::VtableAsmJsScriptFunctionWithComputedName; + } + + template <> VTableValue Js::FunctionWithHomeObj::DummyVirtualFunctionToHinderLinkerICF() const + { + return VTableValue::VtableScriptFunctionWithHomeObj; + } + + template <> VTableValue Js::FunctionWithComputedName::DummyVirtualFunctionToHinderLinkerICF() const + { + return VTableValue::VtableScriptFunctionWithComputedName; + } + + template <> VTableValue Js::FunctionWithComputedName>::DummyVirtualFunctionToHinderLinkerICF() const + { + return VTableValue::VtableScriptFunctionWithHomeObjAndComputedName; + } + + template <> VTableValue Js::FunctionWithHomeObj::DummyVirtualFunctionToHinderLinkerICF() const + { + return VTableValue::VtableScriptFunctionWithInlineCacheAndHomeObj; + } + + template <> VTableValue Js::FunctionWithComputedName::DummyVirtualFunctionToHinderLinkerICF() const + { + return VTableValue::VtableScriptFunctionWithInlineCacheAndComputedName; + } + + template <> VTableValue Js::FunctionWithComputedName>::DummyVirtualFunctionToHinderLinkerICF() const + { + return VTableValue::VtableScriptFunctionWithInlineCacheHomeObjAndComputedName; + } + + template <> VTableValue Js::FunctionWithHomeObj::DummyVirtualFunctionToHinderLinkerICF() const + { + return VTableValue::VtableVirtualJavascriptGeneratorFunctionWithHomeObj; + } + + template <> VTableValue Js::FunctionWithComputedName::DummyVirtualFunctionToHinderLinkerICF() const + { + return VTableValue::VtableVirtualJavascriptGeneratorFunctionWithComputedName; + } + + template <> VTableValue Js::FunctionWithComputedName>::DummyVirtualFunctionToHinderLinkerICF() const + { + return VTableValue::VtableVirtualJavascriptGeneratorFunctionWithHomeObjAndComputedName; + } diff --git a/lib/Runtime/Library/ScriptFunction.h b/lib/Runtime/Library/ScriptFunction.h index 005c020fb39..17503a31dae 100644 --- a/lib/Runtime/Library/ScriptFunction.h +++ b/lib/Runtime/Library/ScriptFunction.h @@ -15,10 +15,6 @@ namespace Js DEFINE_VTABLE_CTOR(ScriptFunctionBase, JavascriptFunction); public: - static bool Is(Var func); - static ScriptFunctionBase * FromVar(Var func); - static ScriptFunctionBase * UnsafeFromVar(Var func); - virtual Var GetHomeObj() const = 0; virtual void SetHomeObj(Var homeObj) = 0; virtual void SetComputedNameVar(Var computedNameVar) = 0; @@ -26,6 +22,8 @@ namespace Js virtual bool IsAnonymousFunction() const = 0; }; + template <> bool VarIsImpl(RecyclableObject* obj); + template class FunctionWithComputedName : public BaseClass { @@ -42,7 +40,8 @@ namespace Js Assert(proxy->GetFunctionInfo()->HasComputedName()); } virtual Var GetComputedNameVar() const override { return this->computedNameVar; } - virtual void SetComputedNameVar(Var computedNameVar) override { this->computedNameVar = computedNameVar; } + virtual void SetComputedNameVar(Var computedNameVar) override; + virtual VTableValue DummyVirtualFunctionToHinderLinkerICF() const; }; template @@ -62,6 +61,7 @@ namespace Js virtual Var GetHomeObj() const override { return homeObj; } virtual void SetHomeObj(Var homeObj) override { this->homeObj = homeObj; } static uint32 GetOffsetOfHomeObj() { return offsetof(FunctionWithHomeObj, homeObj); } + virtual VTableValue DummyVirtualFunctionToHinderLinkerICF() const; }; class ScriptFunction : public ScriptFunctionBase @@ -71,7 +71,6 @@ namespace Js Field(ActivationObjectEx *) cachedScopeObj; Field(bool) hasInlineCaches; - JavascriptString * FormatToString(JavascriptString* inputString); static JavascriptString* GetComputedName(Var computedNameVar, ScriptContext * scriptContext); static bool GetSymbolName(Var computedNameVar, const char16** symbolName, charcount_t *length); protected: @@ -79,13 +78,10 @@ namespace Js DEFINE_MARSHAL_OBJECT_TO_SCRIPT_CONTEXT(ScriptFunction); public: ScriptFunction(FunctionProxy * proxy, ScriptFunctionType* deferredPrototypeType); - static bool Is(Var func); inline static BOOL Test(JavascriptFunction *func) { return func->IsScriptFunction(); } - static ScriptFunction * FromVar(Var func); - static ScriptFunction * UnsafeFromVar(Var func); static ScriptFunction * OP_NewScFunc(FrameDisplay *environment, FunctionInfoPtrPtr infoRef); static ScriptFunction * OP_NewScFuncHomeObj(FrameDisplay *environment, FunctionInfoPtrPtr infoRef, Var homeObj); - + static ScriptFunction * OP_NewClassConstructor(FrameDisplay *environment, FunctionInfoPtrPtr infoRef, Var homeObject, RecyclableObject * constructorParent); static void CopyEntryPointInfoToThreadContextIfNecessary(ProxyEntryPointInfo* oldEntryPointInfo, ProxyEntryPointInfo* newEntryPointInfo); ProxyEntryPointInfo* GetEntryPointInfo() const; @@ -158,6 +154,11 @@ namespace Js } }; + template <> inline bool VarIsImpl(RecyclableObject* obj) + { + return VarIs(obj) && UnsafeVarTo(obj)->IsScriptFunction(); + } + typedef FunctionWithComputedName ScriptFunctionWithComputedName; typedef FunctionWithHomeObj ScriptFunctionWithHomeObj; @@ -166,9 +167,6 @@ namespace Js public: AsmJsScriptFunction(FunctionProxy * proxy, ScriptFunctionType* deferredPrototypeType); - static bool Is(Var func); - static AsmJsScriptFunction* FromVar(Var func); - static AsmJsScriptFunction* UnsafeFromVar(Var func); static AsmJsScriptFunction * OP_NewAsmJsFunc(FrameDisplay *environment, FunctionInfoPtrPtr infoRef); virtual bool IsAsmJsFunction() const override { return true; } @@ -186,6 +184,11 @@ namespace Js Field(Field(Var)*) m_moduleEnvironment; }; + template <> inline bool VarIsImpl(RecyclableObject* obj) + { + return VarIs(obj) && UnsafeVarTo(obj)->IsAsmJsFunction(); + } + typedef FunctionWithComputedName AsmJsScriptFunctionWithComputedName; #ifdef ENABLE_WASM @@ -194,10 +197,6 @@ namespace Js public: WasmScriptFunction(FunctionProxy * proxy, ScriptFunctionType* deferredPrototypeType); - static bool Is(Var func); - static WasmScriptFunction* FromVar(Var func); - static WasmScriptFunction* UnsafeFromVar(Var func); - void SetSignature(Wasm::WasmSignature * sig) { m_signature = sig; } Wasm::WasmSignature * GetSignature() const { return m_signature; } static uint32 GetOffsetOfSignature() { return offsetof(WasmScriptFunction, m_signature); } @@ -211,12 +210,16 @@ namespace Js private: Field(Wasm::WasmSignature *) m_signature; }; + + template <> inline bool VarIsImpl(RecyclableObject* obj) + { + return VarIs(obj) && UnsafeVarTo(obj)->IsWasmFunction(); + } #else - class WasmScriptFunction + class WasmScriptFunction : public AsmJsScriptFunction { - public: - static bool Is(Var) { return false; } }; + template <> inline bool VarIsImpl(RecyclableObject* obj) { return false; } #endif class ScriptFunctionWithInlineCache : public ScriptFunction @@ -244,9 +247,6 @@ namespace Js public: ScriptFunctionWithInlineCache(FunctionProxy * proxy, ScriptFunctionType* deferredPrototypeType); - static bool Is(Var func); - static ScriptFunctionWithInlineCache * FromVar(Var func); - static ScriptFunctionWithInlineCache * UnsafeFromVar(Var func); void CreateInlineCache(); void AllocateInlineCache(); void ClearInlineCacheOnFunctionObject(); @@ -259,5 +259,10 @@ namespace Js virtual void Finalize(bool isShutdown) override; }; + template <> inline bool VarIsImpl(RecyclableObject* obj) + { + return VarIs(obj) && UnsafeVarTo(obj)->GetHasInlineCaches(); + } + typedef FunctionWithComputedName ScriptFunctionWithInlineCacheAndComputedName; } // namespace Js diff --git a/lib/Runtime/Library/SharedArrayBuffer.cpp b/lib/Runtime/Library/SharedArrayBuffer.cpp index 26c4e443c14..ffac5de379f 100644 --- a/lib/Runtime/Library/SharedArrayBuffer.cpp +++ b/lib/Runtime/Library/SharedArrayBuffer.cpp @@ -97,7 +97,7 @@ namespace Js RecyclableObject* newArr = scriptContext->GetLibrary()->CreateSharedArrayBuffer(byteLength); return isCtorSuperCall ? - JavascriptOperators::OrdinaryCreateFromConstructor(RecyclableObject::FromVar(newTarget), newArr, nullptr, scriptContext) : + JavascriptOperators::OrdinaryCreateFromConstructor(VarTo(newTarget), newArr, nullptr, scriptContext) : newArr; } @@ -111,12 +111,12 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !SharedArrayBuffer::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { JavascriptError::ThrowTypeError(scriptContext, JSERR_NeedSharedArrayBufferObject); } - SharedArrayBuffer* sharedArrayBuffer = SharedArrayBuffer::FromVar(args[0]); + SharedArrayBuffer* sharedArrayBuffer = VarTo(args[0]); return JavascriptNumber::ToVar(sharedArrayBuffer->GetByteLength(), scriptContext); } @@ -132,13 +132,13 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (!SharedArrayBuffer::Is(args[0])) + if (!VarIs(args[0])) { JavascriptError::ThrowTypeError(scriptContext, JSERR_NeedSharedArrayBufferObject); } JavascriptLibrary* library = scriptContext->GetLibrary(); - SharedArrayBuffer* currentBuffer = SharedArrayBuffer::FromVar(args[0]); + SharedArrayBuffer* currentBuffer = VarTo(args[0]); int64 currentLen = (int64)currentBuffer->GetByteLength(); int64 start = 0, end = 0; @@ -174,40 +174,33 @@ namespace Js SharedArrayBuffer* newBuffer = nullptr; - if (scriptContext->GetConfig()->IsES6SpeciesEnabled()) - { - JavascriptFunction* defaultConstructor = scriptContext->GetLibrary()->GetSharedArrayBufferConstructor(); - RecyclableObject* constructor = JavascriptOperators::SpeciesConstructor(currentBuffer, defaultConstructor, scriptContext); - AssertOrFailFast(JavascriptOperators::IsConstructor(constructor)); + JavascriptFunction* defaultConstructor = scriptContext->GetLibrary()->GetSharedArrayBufferConstructor(); + RecyclableObject* constructor = JavascriptOperators::SpeciesConstructor(currentBuffer, defaultConstructor, scriptContext); + AssertOrFailFast(JavascriptOperators::IsConstructor(constructor)); - bool isDefaultConstructor = constructor == defaultConstructor; - Js::Var newVar = JavascriptOperators::NewObjectCreationHelper_ReentrancySafe(constructor, isDefaultConstructor, scriptContext->GetThreadContext(), [=]()->Js::Var - { - Js::Var constructorArgs[] = { constructor, JavascriptNumber::ToVar(newbyteLength, scriptContext) }; - Js::CallInfo constructorCallInfo(Js::CallFlags_New, _countof(constructorArgs)); - return JavascriptOperators::NewScObject(constructor, Js::Arguments(constructorCallInfo, constructorArgs), scriptContext); - }); - - if (!SharedArrayBuffer::Is(newVar)) - { - JavascriptError::ThrowTypeError(scriptContext, JSERR_NeedSharedArrayBufferObject); - } + bool isDefaultConstructor = constructor == defaultConstructor; + Js::Var newVar = JavascriptOperators::NewObjectCreationHelper_ReentrancySafe(constructor, isDefaultConstructor, scriptContext->GetThreadContext(), [=]()->Js::Var + { + Js::Var constructorArgs[] = { constructor, JavascriptNumber::ToVar(newbyteLength, scriptContext) }; + Js::CallInfo constructorCallInfo(Js::CallFlags_New, _countof(constructorArgs)); + return JavascriptOperators::NewScObject(constructor, Js::Arguments(constructorCallInfo, constructorArgs), scriptContext); + }); - newBuffer = SharedArrayBuffer::FromVar(newVar); + if (!VarIs(newVar)) + { + JavascriptError::ThrowTypeError(scriptContext, JSERR_NeedSharedArrayBufferObject); + } - if (newBuffer == currentBuffer) - { - JavascriptError::ThrowTypeError(scriptContext, JSERR_NeedSharedArrayBufferObject); - } + newBuffer = VarTo(newVar); - if (newBuffer->GetByteLength() < newbyteLength) - { - JavascriptError::ThrowTypeError(scriptContext, JSERR_ArgumentOutOfRange, _u("SharedArrayBuffer.prototype.slice")); - } + if (newBuffer == currentBuffer) + { + JavascriptError::ThrowTypeError(scriptContext, JSERR_NeedSharedArrayBufferObject); } - else + + if (newBuffer->GetByteLength() < newbyteLength) { - newBuffer = library->CreateSharedArrayBuffer(newbyteLength); + JavascriptError::ThrowTypeError(scriptContext, JSERR_ArgumentOutOfRange, _u("SharedArrayBuffer.prototype.slice")); } Assert(newBuffer); @@ -233,25 +226,6 @@ namespace Js return args[0]; } - SharedArrayBuffer* SharedArrayBuffer::FromVar(Var aValue) - { - AssertOrFailFastMsg(Is(aValue), "var must be an SharedArrayBuffer"); - - return static_cast(aValue); - } - - SharedArrayBuffer* SharedArrayBuffer::UnsafeFromVar(Var aValue) - { - AssertMsg(Is(aValue), "var must be an SharedArrayBuffer"); - - return static_cast(aValue); - } - - bool SharedArrayBuffer::Is(Var aValue) - { - return JavascriptOperators::GetTypeId(aValue) == TypeIds_SharedArrayBuffer; - } - BYTE* SharedArrayBuffer::AllocBuffer(uint32 length, uint32 maxLength) { Unused(maxLength); // WebAssembly only @@ -365,7 +339,7 @@ namespace Js { sharedContents = contents; } - else + else { Js::Throw::FatalInternalError(); } @@ -374,6 +348,12 @@ namespace Js #endif } + SharedArrayBuffer * SharedArrayBuffer::GetAsSharedArrayBuffer() + { + AssertOrFailFast(VarIsCorrectType(this)); + return this; + } + CriticalSection SharedArrayBuffer::csSharedArrayBuffer; WaiterList *SharedArrayBuffer::GetWaiterList(uint index) @@ -402,7 +382,7 @@ namespace Js return nullptr; } - uint32 SharedArrayBuffer::GetByteLength() const + uint32 SharedArrayBuffer::GetByteLength() const { return sharedContents != nullptr ? sharedContents->bufferLength : 0; } @@ -564,18 +544,6 @@ namespace Js return result; } - bool WebAssemblySharedArrayBuffer::Is(Var aValue) - { - return SharedArrayBuffer::Is(aValue) && SharedArrayBuffer::FromVar(aValue)->IsWebAssemblyArrayBuffer(); - } - - WebAssemblySharedArrayBuffer* WebAssemblySharedArrayBuffer::FromVar(Var aValue) - { - AssertOrFailFast(WebAssemblySharedArrayBuffer::Is(aValue)); - return (WebAssemblySharedArrayBuffer*)aValue; - } - - bool WebAssemblySharedArrayBuffer::IsValidVirtualBufferLength(uint length) const { #if ENABLE_FAST_ARRAYBUFFER diff --git a/lib/Runtime/Library/SharedArrayBuffer.h b/lib/Runtime/Library/SharedArrayBuffer.h index 89a76569ad7..9d9f8d7e00e 100644 --- a/lib/Runtime/Library/SharedArrayBuffer.h +++ b/lib/Runtime/Library/SharedArrayBuffer.h @@ -73,10 +73,6 @@ namespace Js static Var EntryGetterByteLength(RecyclableObject* function, CallInfo callInfo, ...); static Var EntryGetterSymbolSpecies(RecyclableObject* function, CallInfo callInfo, ...); - static bool Is(Var aValue); - static SharedArrayBuffer* FromVar(Var aValue); - static SharedArrayBuffer* UnsafeFromVar(Var aValue); - virtual BOOL GetDiagTypeString(StringBuilder* stringBuilder, ScriptContext* requestContext) override; virtual BOOL GetDiagValueString(StringBuilder* stringBuilder, ScriptContext* requestContext) override; @@ -89,7 +85,7 @@ namespace Js virtual bool IsArrayBuffer() override { return false; } virtual bool IsSharedArrayBuffer() override { return true; } virtual ArrayBuffer * GetAsArrayBuffer() { return nullptr; } - virtual SharedArrayBuffer * GetAsSharedArrayBuffer() override { return SharedArrayBuffer::FromVar(this); } + virtual SharedArrayBuffer * GetAsSharedArrayBuffer() override; WaiterList *GetWaiterList(uint index); SharedContents *GetSharedContents() { return sharedContents; } @@ -115,6 +111,11 @@ namespace Js static CriticalSection csSharedArrayBuffer; }; + template <> inline bool VarIsImpl(RecyclableObject* obj) + { + return JavascriptOperators::GetTypeId(obj) == TypeIds_SharedArrayBuffer; + } + class JavascriptSharedArrayBuffer : public SharedArrayBuffer { protected: @@ -144,9 +145,6 @@ namespace Js static WebAssemblySharedArrayBuffer* Create(uint32 length, uint32 maxLength, DynamicType * type); static WebAssemblySharedArrayBuffer* Create(SharedContents *sharedContents, DynamicType * type); - static bool Is(Var aValue); - static WebAssemblySharedArrayBuffer* FromVar(Var aValue); - virtual bool IsValidVirtualBufferLength(uint length) const override; virtual bool IsWebAssemblyArrayBuffer() override { return true; } _Must_inspect_result_ bool GrowMemory(uint32 newBufferLength); @@ -160,6 +158,11 @@ namespace Js WebAssemblySharedArrayBuffer(SharedContents *sharedContents, DynamicType * type); void ValidateBuffer(); }; + + template <> inline bool VarIsImpl(RecyclableObject* obj) + { + return VarIs(obj) && UnsafeVarTo(obj)->IsWebAssemblyArrayBuffer(); + } #endif // An agent can be viewed as a worker diff --git a/lib/Runtime/Library/StackScriptFunction.cpp b/lib/Runtime/Library/StackScriptFunction.cpp index 52f9a199417..96df65590bb 100644 --- a/lib/Runtime/Library/StackScriptFunction.cpp +++ b/lib/Runtime/Library/StackScriptFunction.cpp @@ -21,7 +21,7 @@ namespace Js } // Only script function can be on the stack - StackScriptFunction * stackScriptFunction = StackScriptFunction::FromVar(function); + StackScriptFunction * stackScriptFunction = VarTo(function); ScriptFunction * boxedFunction = stackScriptFunction->boxedScriptFunction; if (boxedFunction != nullptr) { @@ -58,26 +58,10 @@ namespace Js return function; } - ScriptFunction * boxed = StackScriptFunction::FromVar(function)->boxedScriptFunction; + ScriptFunction * boxed = VarTo(function)->boxedScriptFunction; return boxed ? boxed : function; } - StackScriptFunction * - StackScriptFunction::FromVar(Var var) - { - AssertOrFailFast(ScriptFunction::Is(var)); - Assert(ThreadContext::IsOnStack(var)); - return static_cast(var); - } - - StackScriptFunction * - StackScriptFunction::UnsafeFromVar(Var var) - { - Assert(ScriptFunction::Is(var)); - Assert(ThreadContext::IsOnStack(var)); - return static_cast(var); - } - ScriptFunction * StackScriptFunction::Box(StackScriptFunction *stackScriptFunction, void * returnAddress) { @@ -112,7 +96,7 @@ namespace Js if (functionRef != nullptr && ThreadContext::IsOnStack(*functionRef)) { - ScriptFunction * boxedScriptFunction = StackScriptFunction::FromVar(*functionRef)->boxedScriptFunction; + ScriptFunction * boxedScriptFunction = VarTo(*functionRef)->boxedScriptFunction; if (boxedScriptFunction != nullptr) { *functionRef = boxedScriptFunction; @@ -168,7 +152,7 @@ namespace Js continue; } - ScriptFunction * callerScriptFunction = ScriptFunction::FromVar(caller); + ScriptFunction * callerScriptFunction = VarTo(caller); FunctionBody * callerFunctionBody = callerScriptFunction->GetFunctionBody(); if (hasInlineeToBox || this->NeedBoxFrame(callerFunctionBody)) { @@ -391,7 +375,7 @@ namespace Js // Assert(ThreadContext::IsOnStack(callerScriptFunction)); if (ThreadContext::IsOnStack(callerScriptFunction)) { - boxedCaller = this->BoxStackFunction(StackScriptFunction::FromVar(callerScriptFunction)); + boxedCaller = this->BoxStackFunction(VarTo(callerScriptFunction)); walker.SetCurrentFunction(boxedCaller); InterpreterStackFrame * interpreterFrame = walker.GetCurrentInterpreterFrame(); @@ -507,7 +491,7 @@ namespace Js { this->ForEachStackNestedFunctionNative(walker, callerFunctionBody, [&](ScriptFunction *curr) { - StackScriptFunction * func = StackScriptFunction::FromVar(curr); + StackScriptFunction * func = VarTo(curr); // Need to check if we need the script function as the list of script function // include inlinee stack function that doesn't necessary need to be boxed if (this->NeedBoxScriptFunction(func)) @@ -607,7 +591,7 @@ namespace Js { do { - StackScriptFunction *func = StackScriptFunction::FromVar(curr); + StackScriptFunction *func = VarTo(curr); fn(func); curr = *(Js::Var *)(func + 1); } @@ -697,9 +681,9 @@ namespace Js for (uint i = 0; i < count; i++) { Js::Var slotValue = scopeSlots.Get(i); - if (ScriptFunction::Is(slotValue)) + if (VarIs(slotValue)) { - ScriptFunction * stackFunction = ScriptFunction::FromVar(slotValue); + ScriptFunction * stackFunction = VarTo(slotValue); slotValue = BoxStackFunction(stackFunction); } boxedScopeSlots.Set(i, slotValue); @@ -718,7 +702,7 @@ namespace Js return scriptFunction; } - StackScriptFunction * stackFunction = StackScriptFunction::FromVar(scriptFunction); + StackScriptFunction * stackFunction = VarTo(scriptFunction); ScriptFunction * boxedFunction = stackFunction->boxedScriptFunction; if (boxedFunction != nullptr) { diff --git a/lib/Runtime/Library/StackScriptFunction.h b/lib/Runtime/Library/StackScriptFunction.h index 8ed9339938d..9f40e92b76a 100644 --- a/lib/Runtime/Library/StackScriptFunction.h +++ b/lib/Runtime/Library/StackScriptFunction.h @@ -26,7 +26,7 @@ namespace Js #if DBG static bool IsBoxed(Var var) { - return StackScriptFunction::FromVar(var)->boxedScriptFunction != nullptr; + return VarTo(var)->boxedScriptFunction != nullptr; } @@ -41,8 +41,6 @@ namespace Js } private: static ScriptFunction * Box(StackScriptFunction * stackScriptFunction, void * returnAddress); - static StackScriptFunction * FromVar(Var var); - static StackScriptFunction * UnsafeFromVar(Var var); struct BoxState { public: @@ -93,4 +91,14 @@ namespace Js return VTableValue::VtableStackScriptFunction; } }; + + template <> inline bool VarIsImpl(RecyclableObject* obj) + { + bool result = VarIs(obj); + if (result) + { + Assert(ThreadContext::IsOnStack(obj)); + } + return result; + } }; diff --git a/lib/Runtime/Library/StringCacheList.h b/lib/Runtime/Library/StringCacheList.h index 0e60d49cf29..4cab5c0a9e6 100644 --- a/lib/Runtime/Library/StringCacheList.h +++ b/lib/Runtime/Library/StringCacheList.h @@ -8,6 +8,7 @@ STRING(Quotes, _u("\"\"")) STRING(Whack, _u("/")) STRING(CommaDisplay, _u(",")) STRING(CommaSpaceDisplay, _u(", ")) +STRING(Dot, _u(".")) STRING(OpenBracket, _u("{")) STRING(CloseBracket, _u("}")) STRING(OpenSBracket, _u("[")) @@ -17,14 +18,12 @@ STRING(NewLine, _u("\n")) STRING(Colon, _u(":")) STRING(FunctionAnonymous, _u("function anonymous")) STRING(FunctionPTRAnonymous, _u("function* anonymous")) -STRING(AsyncFunctionAnonymouse, _u("async function anonymous")) +STRING(AsyncFunctionAnonymous, _u("async function anonymous")) +STRING(AsyncGeneratorAnonymous, _u("async function* anonymous")) STRING(OpenRBracket, _u("(")) STRING(NewLineCloseRBracket, _u("\n)")) STRING(SpaceOpenBracket, _u(" {")) STRING(NewLineCloseBracket, _u("\n}")) -STRING(FunctionPrefix, _u("function ")) -STRING(GeneratorFunctionPrefix, _u("function* ")) -STRING(AsyncFunctionPrefix, _u("async function ")) STRING(FunctionDisplay, JS_DISPLAY_STRING_FUNCTION_ANONYMOUS) STRING(XDomainFunctionDisplay, _u("function anonymous() {\n [x-domain code]\n}")) STRING(InvalidDate, _u("Invalid Date")) @@ -40,6 +39,9 @@ STRING(ObjectRegExpDisplay, _u("[object RegExp]")) STRING(ObjectStringDisplay, _u("[object String]")) STRING(ObjectNullDisplay, _u("[object Null]")) STRING(ObjectUndefinedDisplay, _u("[object Undefined]")) +STRING(GetterFunctionPrefix, _u("get ")) +STRING(SetterFunctionPrefix, _u("set ")) +STRING(BoundFunctionPrefix, _u("bound ")) PROPERTY_STRING(UndefinedDisplay, _u("undefined")) PROPERTY_STRING(NaNDisplay, _u("NaN")) PROPERTY_STRING(NullDisplay, _u("null")) @@ -52,7 +54,6 @@ PROPERTY_STRING(FunctionTypeDisplay, _u("function")) PROPERTY_STRING(BooleanTypeDisplay, _u("boolean")) PROPERTY_STRING(NumberTypeDisplay, _u("number")) PROPERTY_STRING(ModuleTypeDisplay, _u("Module")) -PROPERTY_STRING(VariantDateTypeDisplay, _u("date")) PROPERTY_STRING(SymbolTypeDisplay, _u("symbol")) #ifdef ENABLE_INTL_OBJECT diff --git a/lib/Runtime/Library/ThrowErrorObject.cpp b/lib/Runtime/Library/ThrowErrorObject.cpp index 4b23b94803f..93b7362a349 100644 --- a/lib/Runtime/Library/ThrowErrorObject.cpp +++ b/lib/Runtime/Library/ThrowErrorObject.cpp @@ -17,7 +17,7 @@ namespace Js ARGUMENTS(args, callInfo); ScriptContext* scriptContext = function->GetScriptContext(); - ThrowErrorObject* throwErrorObject = ThrowErrorObject::FromVar(function); + ThrowErrorObject* throwErrorObject = VarTo(function); #ifdef ENABLE_SCRIPT_DEBUGGING bool useExceptionWrapper = @@ -52,23 +52,6 @@ namespace Js return RecyclerNew(recycler, ThrowErrorObject, type, error); } - bool ThrowErrorObject::Is(Var aValue) - { - return JavascriptOperators::GetTypeId(aValue) == TypeIds_Undefined; - } - - ThrowErrorObject* ThrowErrorObject::FromVar(Var aValue) - { - AssertOrFailFast(Is(aValue)); - return static_cast(aValue); - } - - ThrowErrorObject* ThrowErrorObject::UnsafeFromVar(Var aValue) - { - Assert(Is(aValue)); - return static_cast(aValue); - } - RecyclableObject* ThrowErrorObject::CreateThrowErrorObject(CreateErrorFunc createError, ScriptContext* scriptContext, int32 hCode, PCWSTR varName) { JavascriptLibrary* library = scriptContext->GetLibrary(); diff --git a/lib/Runtime/Library/ThrowErrorObject.h b/lib/Runtime/Library/ThrowErrorObject.h index 3b9cdc41ec0..f2bc6c3089e 100644 --- a/lib/Runtime/Library/ThrowErrorObject.h +++ b/lib/Runtime/Library/ThrowErrorObject.h @@ -22,9 +22,6 @@ namespace Js static Var DefaultEntryPoint(RecyclableObject* function, CallInfo callInfo, ...); static ThrowErrorObject* New(StaticType* type, JavascriptError* error, Recycler* recycler); - static bool Is(Var aValue); - static ThrowErrorObject* FromVar(Var aValue); - static ThrowErrorObject* UnsafeFromVar(Var aValue); static RecyclableObject* CreateThrowTypeErrorObject(ScriptContext* scriptContext, int32 hCode, PCWSTR varName); static RecyclableObject* CreateThrowTypeErrorObject(ScriptContext* scriptContext, int32 hCode, JavascriptString* varName); @@ -33,4 +30,9 @@ namespace Js typedef JavascriptError* (JavascriptLibrary::*CreateErrorFunc)(); static RecyclableObject* CreateThrowErrorObject(CreateErrorFunc createError, ScriptContext* scriptContext, int32 hCode, PCWSTR varName); }; + + template <> inline bool VarIsImpl(RecyclableObject* obj) + { + return JavascriptOperators::GetTypeId(obj) == TypeIds_Undefined; + } } diff --git a/lib/Runtime/Library/TypedArray.cpp b/lib/Runtime/Library/TypedArray.cpp index 48a035d0635..82e2f18c8fb 100644 --- a/lib/Runtime/Library/TypedArray.cpp +++ b/lib/Runtime/Library/TypedArray.cpp @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) 2022 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- // Implementation for typed arrays based on ArrayBuffer. @@ -29,442 +30,176 @@ namespace Js INSTANTIATE_BUILT_IN_ENTRYPOINTS(Uint64Array) INSTANTIATE_BUILT_IN_ENTRYPOINTS(BoolArray) - template<> BOOL Uint8ClampedArray::Is(Var aValue) + template <> bool VarIsImpl(RecyclableObject* obj) { - return JavascriptOperators::GetTypeId(aValue) == TypeIds_Uint8ClampedArray && - ( VirtualTableInfo::HasVirtualTable(aValue) || - VirtualTableInfo>::HasVirtualTable(aValue) + return JavascriptOperators::GetTypeId(obj) == TypeIds_Uint8ClampedArray && + ( VirtualTableInfo::HasVirtualTable(obj) || + VirtualTableInfo>::HasVirtualTable(obj) ); } - template<> BOOL Uint8Array::Is(Var aValue) + template <> bool VarIsImpl(RecyclableObject* obj) { - return JavascriptOperators::GetTypeId(aValue) == TypeIds_Uint8Array && - ( VirtualTableInfo::HasVirtualTable(aValue) || - VirtualTableInfo>::HasVirtualTable(aValue) + return JavascriptOperators::GetTypeId(obj) == TypeIds_Uint8Array && + ( VirtualTableInfo::HasVirtualTable(obj) || + VirtualTableInfo>::HasVirtualTable(obj) ); } - template<> BOOL Int8Array::Is(Var aValue) + template <> bool VarIsImpl(RecyclableObject* obj) { - return JavascriptOperators::GetTypeId(aValue) == TypeIds_Int8Array && - ( VirtualTableInfo::HasVirtualTable(aValue) || - VirtualTableInfo>::HasVirtualTable(aValue) + return JavascriptOperators::GetTypeId(obj) == TypeIds_Int8Array && + ( VirtualTableInfo::HasVirtualTable(obj) || + VirtualTableInfo>::HasVirtualTable(obj) ); } - template<> BOOL Int16Array::Is(Var aValue) + template <> bool VarIsImpl(RecyclableObject* obj) { - return JavascriptOperators::GetTypeId(aValue) == TypeIds_Int16Array && - ( VirtualTableInfo::HasVirtualTable(aValue) || - VirtualTableInfo>::HasVirtualTable(aValue) + return JavascriptOperators::GetTypeId(obj) == TypeIds_Int16Array && + ( VirtualTableInfo::HasVirtualTable(obj) || + VirtualTableInfo>::HasVirtualTable(obj) ); } - template<> BOOL Uint16Array::Is(Var aValue) + template <> bool VarIsImpl(RecyclableObject* obj) { - return JavascriptOperators::GetTypeId(aValue) == TypeIds_Uint16Array && - ( VirtualTableInfo::HasVirtualTable(aValue) || - VirtualTableInfo>::HasVirtualTable(aValue) + return JavascriptOperators::GetTypeId(obj) == TypeIds_Uint16Array && + ( VirtualTableInfo::HasVirtualTable(obj) || + VirtualTableInfo>::HasVirtualTable(obj) ); } - template<> BOOL Int32Array::Is(Var aValue) + template <> bool VarIsImpl(RecyclableObject* obj) { - return JavascriptOperators::GetTypeId(aValue) == TypeIds_Int32Array && - ( VirtualTableInfo::HasVirtualTable(aValue) || - VirtualTableInfo>::HasVirtualTable(aValue) + return JavascriptOperators::GetTypeId(obj) == TypeIds_Int32Array && + ( VirtualTableInfo::HasVirtualTable(obj) || + VirtualTableInfo>::HasVirtualTable(obj) ); } - template<> BOOL Uint32Array::Is(Var aValue) + template <> bool VarIsImpl(RecyclableObject* obj) { - return JavascriptOperators::GetTypeId(aValue) == TypeIds_Uint32Array && - ( VirtualTableInfo::HasVirtualTable(aValue) || - VirtualTableInfo>::HasVirtualTable(aValue) + return JavascriptOperators::GetTypeId(obj) == TypeIds_Uint32Array && + ( VirtualTableInfo::HasVirtualTable(obj) || + VirtualTableInfo>::HasVirtualTable(obj) ); } - template<> BOOL Float32Array::Is(Var aValue) + template <> bool VarIsImpl(RecyclableObject* obj) { - return JavascriptOperators::GetTypeId(aValue) == TypeIds_Float32Array && - ( VirtualTableInfo::HasVirtualTable(aValue) || - VirtualTableInfo>::HasVirtualTable(aValue) + return JavascriptOperators::GetTypeId(obj) == TypeIds_Float32Array && + ( VirtualTableInfo::HasVirtualTable(obj) || + VirtualTableInfo>::HasVirtualTable(obj) ); } - template<> BOOL Float64Array::Is(Var aValue) + template <> bool VarIsImpl(RecyclableObject* obj) { - return JavascriptOperators::GetTypeId(aValue) == TypeIds_Float64Array && - ( VirtualTableInfo::HasVirtualTable(aValue) || - VirtualTableInfo>::HasVirtualTable(aValue) + return JavascriptOperators::GetTypeId(obj) == TypeIds_Float64Array && + ( VirtualTableInfo::HasVirtualTable(obj) || + VirtualTableInfo>::HasVirtualTable(obj) ); } - template<> BOOL Int64Array::Is(Var aValue) + template <> bool VarIsImpl(RecyclableObject* obj) { - return JavascriptOperators::GetTypeId(aValue) == TypeIds_Int64Array && - ( VirtualTableInfo::HasVirtualTable(aValue) || - VirtualTableInfo>::HasVirtualTable(aValue) + return JavascriptOperators::GetTypeId(obj) == TypeIds_Int64Array && + ( VirtualTableInfo::HasVirtualTable(obj) || + VirtualTableInfo>::HasVirtualTable(obj) ); } - template<> BOOL Uint64Array::Is(Var aValue) + template <> bool VarIsImpl(RecyclableObject* obj) { - return JavascriptOperators::GetTypeId(aValue) == TypeIds_Uint64Array && - ( VirtualTableInfo::HasVirtualTable(aValue) || - VirtualTableInfo>::HasVirtualTable(aValue) + return JavascriptOperators::GetTypeId(obj) == TypeIds_Uint64Array && + ( VirtualTableInfo::HasVirtualTable(obj) || + VirtualTableInfo>::HasVirtualTable(obj) ); } - template<> BOOL BoolArray::Is(Var aValue) + template <> bool VarIsImpl(RecyclableObject* obj) { - return JavascriptOperators::GetTypeId(aValue) == TypeIds_BoolArray && - ( VirtualTableInfo::HasVirtualTable(aValue) || - VirtualTableInfo>::HasVirtualTable(aValue) + return JavascriptOperators::GetTypeId(obj) == TypeIds_BoolArray && + ( VirtualTableInfo::HasVirtualTable(obj) || + VirtualTableInfo>::HasVirtualTable(obj) ); } - template<> BOOL Uint8ClampedVirtualArray::Is(Var aValue) + template <> bool VarIsImpl(RecyclableObject* obj) { - return JavascriptOperators::GetTypeId(aValue) == TypeIds_Uint8ClampedArray && - ( VirtualTableInfo::HasVirtualTable(aValue) || - VirtualTableInfo>::HasVirtualTable(aValue) + return JavascriptOperators::GetTypeId(obj) == TypeIds_Uint8ClampedArray && + ( VirtualTableInfo::HasVirtualTable(obj) || + VirtualTableInfo>::HasVirtualTable(obj) ); } - template<> BOOL Uint8VirtualArray::Is(Var aValue) + template <> bool VarIsImpl(RecyclableObject* obj) { - return JavascriptOperators::GetTypeId(aValue) == TypeIds_Uint8Array && - ( VirtualTableInfo::HasVirtualTable(aValue) || - VirtualTableInfo>::HasVirtualTable(aValue) + return JavascriptOperators::GetTypeId(obj) == TypeIds_Uint8Array && + ( VirtualTableInfo::HasVirtualTable(obj) || + VirtualTableInfo>::HasVirtualTable(obj) ); } - template<> BOOL Int8VirtualArray::Is(Var aValue) + template <> bool VarIsImpl(RecyclableObject* obj) { - return JavascriptOperators::GetTypeId(aValue) == TypeIds_Int8Array && - ( VirtualTableInfo::HasVirtualTable(aValue) || - VirtualTableInfo>::HasVirtualTable(aValue) + return JavascriptOperators::GetTypeId(obj) == TypeIds_Int8Array && + ( VirtualTableInfo::HasVirtualTable(obj) || + VirtualTableInfo>::HasVirtualTable(obj) ); } - template<> BOOL Int16VirtualArray::Is(Var aValue) + template <> bool VarIsImpl(RecyclableObject* obj) { - return JavascriptOperators::GetTypeId(aValue) == TypeIds_Int16Array && - ( VirtualTableInfo::HasVirtualTable(aValue) || - VirtualTableInfo>::HasVirtualTable(aValue) + return JavascriptOperators::GetTypeId(obj) == TypeIds_Int16Array && + ( VirtualTableInfo::HasVirtualTable(obj) || + VirtualTableInfo>::HasVirtualTable(obj) ); } - template<> BOOL Uint16VirtualArray::Is(Var aValue) + template <> bool VarIsImpl(RecyclableObject* obj) { - return JavascriptOperators::GetTypeId(aValue) == TypeIds_Uint16Array && - ( VirtualTableInfo::HasVirtualTable(aValue) || - VirtualTableInfo>::HasVirtualTable(aValue) + return JavascriptOperators::GetTypeId(obj) == TypeIds_Uint16Array && + ( VirtualTableInfo::HasVirtualTable(obj) || + VirtualTableInfo>::HasVirtualTable(obj) ); } - template<> BOOL Int32VirtualArray::Is(Var aValue) + template <> bool VarIsImpl(RecyclableObject* obj) { - return JavascriptOperators::GetTypeId(aValue) == TypeIds_Int32Array && - ( VirtualTableInfo::HasVirtualTable(aValue) || - VirtualTableInfo>::HasVirtualTable(aValue) + return JavascriptOperators::GetTypeId(obj) == TypeIds_Int32Array && + ( VirtualTableInfo::HasVirtualTable(obj) || + VirtualTableInfo>::HasVirtualTable(obj) ); } - template<> BOOL Uint32VirtualArray::Is(Var aValue) + template <> bool VarIsImpl(RecyclableObject* obj) { - return JavascriptOperators::GetTypeId(aValue) == TypeIds_Uint32Array && - ( VirtualTableInfo::HasVirtualTable(aValue) || - VirtualTableInfo>::HasVirtualTable(aValue) + return JavascriptOperators::GetTypeId(obj) == TypeIds_Uint32Array && + ( VirtualTableInfo::HasVirtualTable(obj) || + VirtualTableInfo>::HasVirtualTable(obj) ); } - template<> BOOL Float32VirtualArray::Is(Var aValue) + template <> bool VarIsImpl(RecyclableObject* obj) { - return JavascriptOperators::GetTypeId(aValue) == TypeIds_Float32Array && - ( VirtualTableInfo::HasVirtualTable(aValue) || - VirtualTableInfo>::HasVirtualTable(aValue) + return JavascriptOperators::GetTypeId(obj) == TypeIds_Float32Array && + ( VirtualTableInfo::HasVirtualTable(obj) || + VirtualTableInfo>::HasVirtualTable(obj) ); } - template<> BOOL Float64VirtualArray::Is(Var aValue) + template <> bool VarIsImpl(RecyclableObject* obj) { - return JavascriptOperators::GetTypeId(aValue) == TypeIds_Float64Array && - ( VirtualTableInfo::HasVirtualTable(aValue) || - VirtualTableInfo>::HasVirtualTable(aValue) + return JavascriptOperators::GetTypeId(obj) == TypeIds_Float64Array && + ( VirtualTableInfo::HasVirtualTable(obj) || + VirtualTableInfo>::HasVirtualTable(obj) ); } - template - TypedArray* TypedArray::FromVar(Var aValue) - { - AssertOrFailFastMsg(TypedArray::Is(aValue), "invalid TypedArray"); - return static_cast*>(aValue); - } - - template<> Uint8ClampedArray* Uint8ClampedArray::FromVar(Var aValue) - { - AssertOrFailFastMsg(Uint8ClampedArray::Is(aValue), "invalid Uint8ClampedArray"); - return static_cast(aValue); - } - - template<> Uint8Array* Uint8Array::FromVar(Var aValue) - { - AssertOrFailFastMsg(Uint8Array::Is(aValue), "invalid Uint8Array"); - return static_cast(aValue); - } - - template<> Int8Array* Int8Array::FromVar(Var aValue) - { - AssertOrFailFastMsg(Int8Array::Is(aValue), "invalid Int8Array"); - return static_cast(aValue); - } - - template<> Int16Array* Int16Array::FromVar(Var aValue) - { - AssertOrFailFastMsg(Int16Array::Is(aValue), "invalid Int16Array"); - return static_cast(aValue); - } - - template<> Uint16Array* Uint16Array::FromVar(Var aValue) - { - AssertOrFailFastMsg(Uint16Array::Is(aValue), "invalid Uint16Array"); - return static_cast(aValue); - } - - template<> Int32Array* Int32Array::FromVar(Var aValue) - { - AssertOrFailFastMsg(Int32Array::Is(aValue), "invalid Int32Array"); - return static_cast(aValue); - } - - template<> Uint32Array* Uint32Array::FromVar(Var aValue) - { - AssertOrFailFastMsg(Uint32Array::Is(aValue), "invalid Uint32Array"); - return static_cast(aValue); - } - - template<> Float32Array* Float32Array::FromVar(Var aValue) - { - AssertOrFailFastMsg(Float32Array::Is(aValue), "invalid Float32Array"); - return static_cast(aValue); - } - - template<> Float64Array* Float64Array::FromVar(Var aValue) - { - AssertOrFailFastMsg(Float64Array::Is(aValue), "invalid Float64Array"); - return static_cast(aValue); - } - - template<> Int64Array* Int64Array::FromVar(Var aValue) - { - AssertOrFailFastMsg(Int64Array::Is(aValue), "invalid Int64Array"); - return static_cast(aValue); - } - - template<> Uint64Array* Uint64Array::FromVar(Var aValue) - { - AssertOrFailFastMsg(Uint64Array::Is(aValue), "invalid Uint64Array"); - return static_cast(aValue); - } - - template<> Int8VirtualArray* Int8VirtualArray::FromVar(Var aValue) - { - AssertOrFailFastMsg(Int8VirtualArray::Is(aValue), "invalid Int8Array"); - return static_cast(aValue); - } - - template<> Uint8ClampedVirtualArray* Uint8ClampedVirtualArray::FromVar(Var aValue) - { - AssertOrFailFastMsg(Uint8ClampedVirtualArray::Is(aValue), "invalid Uint8ClampedArray"); - return static_cast(aValue); - } - - template<> Uint8VirtualArray* Uint8VirtualArray::FromVar(Var aValue) - { - AssertOrFailFastMsg(Uint8VirtualArray::Is(aValue), "invalid Uint8Array"); - return static_cast(aValue); - } - - template<> Int16VirtualArray* Int16VirtualArray::FromVar(Var aValue) - { - AssertOrFailFastMsg(Int16VirtualArray::Is(aValue), "invalid Int16Array"); - return static_cast(aValue); - } - - template<> Uint16VirtualArray* Uint16VirtualArray::FromVar(Var aValue) - { - AssertOrFailFastMsg(Uint16VirtualArray::Is(aValue), "invalid Uint16Array"); - return static_cast(aValue); - } - - template<> Int32VirtualArray* Int32VirtualArray::FromVar(Var aValue) - { - AssertOrFailFastMsg(Int32VirtualArray::Is(aValue), "invalid Int32Array"); - return static_cast(aValue); - } - - template<> Uint32VirtualArray* Uint32VirtualArray::FromVar(Var aValue) - { - AssertOrFailFastMsg(Uint32VirtualArray::Is(aValue), "invalid Uint32Array"); - return static_cast(aValue); - } - - template<> Float32VirtualArray* Float32VirtualArray::FromVar(Var aValue) - { - AssertOrFailFastMsg(Float32VirtualArray::Is(aValue), "invalid Float32Array"); - return static_cast(aValue); - } - - template<> Float64VirtualArray* Float64VirtualArray::FromVar(Var aValue) - { - AssertOrFailFastMsg(Float64VirtualArray::Is(aValue), "invalid Float64Array"); - return static_cast(aValue); - } - - template<> BoolArray* BoolArray::FromVar(Var aValue) - { - AssertOrFailFastMsg(BoolArray::Is(aValue), "invalid BoolArray"); - return static_cast(aValue); - } - - template - TypedArray* TypedArray::UnsafeFromVar(Var aValue) - { - AssertMsg(TypedArray::Is(aValue), "invalid TypedArray"); - return static_cast*>(aValue); - } - - template<> Uint8ClampedArray* Uint8ClampedArray::UnsafeFromVar(Var aValue) - { - AssertMsg(Uint8ClampedArray::Is(aValue), "invalid Uint8ClampedArray"); - return static_cast(aValue); - } - - template<> Uint8Array* Uint8Array::UnsafeFromVar(Var aValue) - { - AssertMsg(Uint8Array::Is(aValue), "invalid Uint8Array"); - return static_cast(aValue); - } - - template<> Int8Array* Int8Array::UnsafeFromVar(Var aValue) - { - AssertMsg(Int8Array::Is(aValue), "invalid Int8Array"); - return static_cast(aValue); - } - - template<> Int16Array* Int16Array::UnsafeFromVar(Var aValue) - { - AssertMsg(Int16Array::Is(aValue), "invalid Int16Array"); - return static_cast(aValue); - } - - template<> Uint16Array* Uint16Array::UnsafeFromVar(Var aValue) - { - AssertMsg(Uint16Array::Is(aValue), "invalid Uint16Array"); - return static_cast(aValue); - } - - template<> Int32Array* Int32Array::UnsafeFromVar(Var aValue) - { - AssertMsg(Int32Array::Is(aValue), "invalid Int32Array"); - return static_cast(aValue); - } - - template<> Uint32Array* Uint32Array::UnsafeFromVar(Var aValue) - { - AssertMsg(Uint32Array::Is(aValue), "invalid Uint32Array"); - return static_cast(aValue); - } - - template<> Float32Array* Float32Array::UnsafeFromVar(Var aValue) - { - AssertMsg(Float32Array::Is(aValue), "invalid Float32Array"); - return static_cast(aValue); - } - - template<> Float64Array* Float64Array::UnsafeFromVar(Var aValue) - { - AssertMsg(Float64Array::Is(aValue), "invalid Float64Array"); - return static_cast(aValue); - } - - template<> Int64Array* Int64Array::UnsafeFromVar(Var aValue) - { - AssertMsg(Int64Array::Is(aValue), "invalid Int64Array"); - return static_cast(aValue); - } - - template<> Uint64Array* Uint64Array::UnsafeFromVar(Var aValue) - { - AssertMsg(Uint64Array::Is(aValue), "invalid Uint64Array"); - return static_cast(aValue); - } - - template<> Int8VirtualArray* Int8VirtualArray::UnsafeFromVar(Var aValue) - { - AssertMsg(Int8VirtualArray::Is(aValue), "invalid Int8Array"); - return static_cast(aValue); - } - - template<> Uint8ClampedVirtualArray* Uint8ClampedVirtualArray::UnsafeFromVar(Var aValue) - { - AssertMsg(Uint8ClampedVirtualArray::Is(aValue), "invalid Uint8ClampedArray"); - return static_cast(aValue); - } - - template<> Uint8VirtualArray* Uint8VirtualArray::UnsafeFromVar(Var aValue) - { - AssertMsg(Uint8VirtualArray::Is(aValue), "invalid Uint8Array"); - return static_cast(aValue); - } - - template<> Int16VirtualArray* Int16VirtualArray::UnsafeFromVar(Var aValue) - { - AssertMsg(Int16VirtualArray::Is(aValue), "invalid Int16Array"); - return static_cast(aValue); - } - - template<> Uint16VirtualArray* Uint16VirtualArray::UnsafeFromVar(Var aValue) - { - AssertMsg(Uint16VirtualArray::Is(aValue), "invalid Uint16Array"); - return static_cast(aValue); - } - - template<> Int32VirtualArray* Int32VirtualArray::UnsafeFromVar(Var aValue) - { - AssertMsg(Int32VirtualArray::Is(aValue), "invalid Int32Array"); - return static_cast(aValue); - } - - template<> Uint32VirtualArray* Uint32VirtualArray::UnsafeFromVar(Var aValue) - { - AssertMsg(Uint32VirtualArray::Is(aValue), "invalid Uint32Array"); - return static_cast(aValue); - } - - template<> Float32VirtualArray* Float32VirtualArray::UnsafeFromVar(Var aValue) - { - AssertMsg(Float32VirtualArray::Is(aValue), "invalid Float32Array"); - return static_cast(aValue); - } - - template<> Float64VirtualArray* Float64VirtualArray::UnsafeFromVar(Var aValue) - { - AssertMsg(Float64VirtualArray::Is(aValue), "invalid Float64Array"); - return static_cast(aValue); - } - - template<> BoolArray* BoolArray::UnsafeFromVar(Var aValue) - { - AssertMsg(BoolArray::Is(aValue), "invalid BoolArray"); - return static_cast(aValue); - } - TypedArrayBase::TypedArrayBase(ArrayBufferBase* arrayBuffer, uint32 offSet, uint mappedLength, uint elementSize, DynamicType* type) : ArrayBufferParent(type, mappedLength, arrayBuffer), byteOffset(offSet), @@ -479,7 +214,8 @@ namespace Js Var nextValue; JsUtil::List* retList = JsUtil::List::New(alloc); - while (JavascriptOperators::IteratorStepAndValue(iterator, scriptContext, &nextValue)) + RecyclableObject* nextFunc = JavascriptOperators::CacheIteratorNext(iterator, scriptContext); + while (JavascriptOperators::IteratorStepAndValue(iterator, scriptContext, nextFunc, &nextValue)) { retList->Add(nextValue); } @@ -540,7 +276,7 @@ namespace Js } else { - if (TypedArrayBase::Is(firstArgument)) + if (VarIs(firstArgument)) { // Constructor(TypedArray array) typedArraySource = static_cast(firstArgument); @@ -555,11 +291,11 @@ namespace Js JavascriptError::ThrowRangeError(scriptContext, JSERR_InvalidTypedArrayLength); } } - else if (ArrayBufferBase::Is(firstArgument)) + else if (VarIs(firstArgument)) { // Constructor(ArrayBuffer buffer, // optional uint32 byteOffset, optional uint32 length) - arrayBuffer = ArrayBufferBase::FromVar(firstArgument); + arrayBuffer = VarTo(firstArgument); if (arrayBuffer->IsDetached()) { JavascriptError::ThrowTypeError(scriptContext, JSERR_DetachedTypedArray, _u("[TypedArray]")); @@ -571,18 +307,18 @@ namespace Js RecyclableObject* iteratorFn = JavascriptOperators::GetIteratorFunction(firstArgument, scriptContext, true /* optional */); if (iteratorFn != nullptr && (iteratorFn != scriptContext->GetLibrary()->EnsureArrayPrototypeValuesFunction() || - !JavascriptArray::Is(firstArgument) || JavascriptLibrary::ArrayIteratorPrototypeHasUserDefinedNext(scriptContext))) + !JavascriptArray::IsNonES5Array(firstArgument) || JavascriptLibrary::ArrayIteratorPrototypeHasUserDefinedNext(scriptContext))) { Var iterator = scriptContext->GetThreadContext()->ExecuteImplicitCall(iteratorFn, Js::ImplicitCall_Accessor, [=]()->Js::Var { - return CALL_FUNCTION(scriptContext->GetThreadContext(), iteratorFn, CallInfo(Js::CallFlags_Value, 1), RecyclableObject::FromVar(firstArgument)); + return CALL_FUNCTION(scriptContext->GetThreadContext(), iteratorFn, CallInfo(Js::CallFlags_Value, 1), VarTo(firstArgument)); }); if (!JavascriptOperators::IsObject(iterator)) { JavascriptError::ThrowTypeError(scriptContext, JSERR_NeedObject); } - return CreateNewInstanceFromIterator(RecyclableObject::FromVar(iterator), scriptContext, elementSize, pfnCreateTypedArray); + return CreateNewInstanceFromIterator(VarTo(iterator), scriptContext, elementSize, pfnCreateTypedArray); } if (!JavascriptConversion::ToObject(firstArgument, scriptContext, &jsArraySource)) @@ -593,35 +329,8 @@ namespace Js Js::Throw::FatalInternalError(); } - ArrayBuffer *temp = nullptr; - HRESULT hr = scriptContext->GetHostScriptContext()->ArrayBufferFromExternalObject(jsArraySource, &temp); - arrayBuffer = static_cast (temp); - switch (hr) - { - case S_OK: - // We found an IBuffer - fromExternalObject = true; - OUTPUT_TRACE(TypedArrayPhase, _u("Projection ArrayBuffer query succeeded with HR=0x%08X\n"), hr); - // We have an ArrayBuffer now, so we can skip all the object probing. - break; - - case S_FALSE: - // We didn't find an IBuffer - fall through - OUTPUT_TRACE(TypedArrayPhase, _u("Projection ArrayBuffer query aborted safely with HR=0x%08X (non-handled type)\n"), hr); - break; - - default: - // Any FAILURE HRESULT or unexpected HRESULT - OUTPUT_TRACE(TypedArrayPhase, _u("Projection ArrayBuffer query failed with HR=0x%08X\n"), hr); - JavascriptError::ThrowTypeError(scriptContext, JSERR_InvalidTypedArray_Constructor); - break; - } - - if (!fromExternalObject) - { - Var lengthVar = JavascriptOperators::OP_GetLength(jsArraySource, scriptContext); - elementCount = ArrayBuffer::ToIndex(lengthVar, JSERR_InvalidTypedArrayLength, scriptContext, ArrayBuffer::MaxArrayBufferLength / elementSize); - } + Var lengthVar = JavascriptOperators::OP_GetLength(jsArraySource, scriptContext); + elementCount = ArrayBuffer::ToIndex(lengthVar, JSERR_InvalidTypedArrayLength, scriptContext, ArrayBuffer::MaxArrayBufferLength / elementSize); } } } @@ -742,7 +451,7 @@ namespace Js } #endif return isCtorSuperCall ? - JavascriptOperators::OrdinaryCreateFromConstructor(RecyclableObject::FromVar(newTarget), RecyclableObject::FromVar(object), nullptr, scriptContext) : + JavascriptOperators::OrdinaryCreateFromConstructor(VarTo(newTarget), VarTo(object), nullptr, scriptContext) : object; }; @@ -1114,10 +823,13 @@ namespace Js return SetItem(index, value); } - BOOL TypedArrayBase::Is(Var aValue) + BOOL TypedArrayBase::IsObjectArrayFrozen() { - TypeId typeId = JavascriptOperators::GetTypeId(aValue); - return Is(typeId); + if (GetLength() > 0) + { + return false; // the backing buffer is always modifiable + } + return IsSealed(); } BOOL TypedArrayBase::Is(TypeId typeId) @@ -1125,18 +837,6 @@ namespace Js return typeId >= TypeIds_TypedArrayMin && typeId <= TypeIds_TypedArrayMax; } - TypedArrayBase* TypedArrayBase::FromVar(Var aValue) - { - AssertOrFailFastMsg(Is(aValue), "must be a typed array"); - return static_cast(aValue); - } - - TypedArrayBase* TypedArrayBase::UnsafeFromVar(Var aValue) - { - AssertMsg(Is(aValue), "must be a typed array"); - return static_cast(aValue); - } - BOOL TypedArrayBase::IsDetachedTypedArray(Var aValue) { TypedArrayBase* arr = JavascriptOperators::TryFromVar(aValue); @@ -1166,11 +866,11 @@ namespace Js // - we cannot memmove to a uint8 clamped array from an int8 array, due to negatives rounding to 0 if (GetTypeId() == source->GetTypeId() || (GetBytesPerElement() == source->GetBytesPerElement() - && !((Uint8ClampedArray::Is(this) || Uint8ClampedVirtualArray::Is(this)) && (Int8Array::Is(source) || Int8VirtualArray::Is(source))) - && !Float32Array::Is(this) && !Float32Array::Is(source) - && !Float32VirtualArray::Is(this) && !Float32VirtualArray::Is(source) - && !Float64Array::Is(this) && !Float64Array::Is(source) - && !Float64VirtualArray::Is(this) && !Float64VirtualArray::Is(source))) + && !((VarIs(this) || VarIs(this)) && (VarIs(source) || VarIs(source))) + && !VarIs(this) && !VarIs(source) + && !VarIs(this) && !VarIs(source) + && !VarIs(this) && !VarIs(source) + && !VarIs(this) && !VarIs(source))) { const size_t offsetInBytes = offset * BYTES_PER_ELEMENT; memmove_s(buffer + offsetInBytes, @@ -1268,23 +968,23 @@ namespace Js HRESULT TypedArrayBase::GetBuffer(Var instance, ArrayBuffer** outBuffer, uint32* outOffset, uint32* outLength) { HRESULT hr = NOERROR; - if (Js::TypedArrayBase::Is(instance)) + if (Js::VarIs(instance)) { - Js::TypedArrayBase* typedArrayBase = Js::TypedArrayBase::FromVar(instance); + Js::TypedArrayBase* typedArrayBase = Js::VarTo(instance); *outBuffer = typedArrayBase->GetArrayBuffer()->GetAsArrayBuffer(); *outOffset = typedArrayBase->GetByteOffset(); *outLength = typedArrayBase->GetByteLength(); } - else if (Js::ArrayBuffer::Is(instance)) + else if (Js::VarIs(instance)) { - Js::ArrayBuffer* buffer = Js::ArrayBuffer::FromVar(instance); + Js::ArrayBuffer* buffer = Js::VarTo(instance); *outBuffer = buffer; *outOffset = 0; *outLength = buffer->GetByteLength(); } - else if (Js::DataView::Is(instance)) + else if (Js::VarIs(instance)) { - Js::DataView* dView = Js::DataView::FromVar(instance); + Js::DataView* dView = Js::VarTo(instance); *outBuffer = dView->GetArrayBuffer()->GetAsArrayBuffer(); *outOffset = dView->GetByteOffset(); *outLength = dView->GetLength(); @@ -1318,12 +1018,12 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !TypedArrayBase::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedTypedArray); } - TypedArrayBase* typedArray = TypedArrayBase::UnsafeFromVar(args[0]); + TypedArrayBase* typedArray = UnsafeVarTo(args[0]); ArrayBufferBase* arrayBuffer = typedArray->GetArrayBuffer(); if (arrayBuffer == nullptr) @@ -1343,12 +1043,12 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !TypedArrayBase::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedTypedArray); } - TypedArrayBase* typedArray = TypedArrayBase::UnsafeFromVar(args[0]); + TypedArrayBase* typedArray = UnsafeVarTo(args[0]); ArrayBufferBase* arrayBuffer = typedArray->GetArrayBuffer(); if (arrayBuffer == nullptr) @@ -1372,12 +1072,12 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !TypedArrayBase::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedTypedArray); } - TypedArrayBase* typedArray = TypedArrayBase::UnsafeFromVar(args[0]); + TypedArrayBase* typedArray = UnsafeVarTo(args[0]); ArrayBufferBase* arrayBuffer = typedArray->GetArrayBuffer(); if (arrayBuffer == nullptr) @@ -1401,12 +1101,12 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !TypedArrayBase::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedTypedArray); } - TypedArrayBase* typedArray = TypedArrayBase::UnsafeFromVar(args[0]); + TypedArrayBase* typedArray = UnsafeVarTo(args[0]); ArrayBufferBase* arrayBuffer = typedArray->GetArrayBuffer(); if (arrayBuffer == nullptr) @@ -1443,7 +1143,7 @@ namespace Js // 1. Let O be the this value. // 2. If Type(O) is not Object, return undefined. // 3. If O does not have a[[TypedArrayName]] internal slot, return undefined. - if (args.Info.Count == 0 || !TypedArrayBase::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { if (scriptContext->GetConfig()->IsES6ToStringTagEnabled()) { @@ -1514,7 +1214,7 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !TypedArrayBase::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedTypedArray); } @@ -1534,7 +1234,7 @@ namespace Js // This method is only called in pre-ES6 compat modes. In those modes, we need to throw an error // if the this argument is not the same type as our TypedArray template instance. - if (args.Info.Count == 0 || !TypedArray::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedTypedArray); } @@ -1544,7 +1244,7 @@ namespace Js Var TypedArrayBase::CommonSet(Arguments& args) { - TypedArrayBase* typedArrayBase = TypedArrayBase::FromVar(args[0]); + TypedArrayBase* typedArrayBase = VarTo(args[0]); ScriptContext* scriptContext = typedArrayBase->GetScriptContext(); uint32 offset = 0; if (args.Info.Count < 2) @@ -1595,7 +1295,7 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); CHAKRATEL_LANGSTATS_INC_BUILTINCOUNT(TypedArray_Prototype_subarray); - if (args.Info.Count == 0 || !TypedArrayBase::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedTypedArray); } @@ -1612,7 +1312,7 @@ namespace Js Var TypedArrayBase::CommonSubarray(Arguments& args) { - TypedArrayBase* typedArrayBase = TypedArrayBase::FromVar(args[0]); + TypedArrayBase* typedArrayBase = VarTo(args[0]); uint32 length = typedArrayBase->GetLength(); ScriptContext* scriptContext = typedArrayBase->GetScriptContext(); int32 begin = 0; @@ -1647,24 +1347,17 @@ namespace Js uint32 beginByteOffset = srcByteOffset + begin * BYTES_PER_ELEMENT; uint32 newLength = end - begin; - if (scriptContext->GetConfig()->IsES6SpeciesEnabled()) - { - JavascriptFunction* defaultConstructor = TypedArrayBase::GetDefaultConstructor(this, scriptContext); - RecyclableObject* constructor = JavascriptOperators::SpeciesConstructor(this, defaultConstructor, scriptContext); - AssertOrFailFast(JavascriptOperators::IsConstructor(constructor)); + JavascriptFunction* defaultConstructor = TypedArrayBase::GetDefaultConstructor(this, scriptContext); + RecyclableObject* constructor = JavascriptOperators::SpeciesConstructor(this, defaultConstructor, scriptContext); + AssertOrFailFast(JavascriptOperators::IsConstructor(constructor)); - bool isDefaultConstructor = constructor == defaultConstructor; - newTypedArray = RecyclableObject::FromVar(JavascriptOperators::NewObjectCreationHelper_ReentrancySafe(constructor, isDefaultConstructor, scriptContext->GetThreadContext(), [=]()->Js::Var - { - Js::Var constructorArgs[] = { constructor, buffer, JavascriptNumber::ToVar(beginByteOffset, scriptContext), JavascriptNumber::ToVar(newLength, scriptContext) }; - Js::CallInfo constructorCallInfo(Js::CallFlags_New, _countof(constructorArgs)); - return TypedArrayBase::TypedArrayCreate(constructor, &Js::Arguments(constructorCallInfo, constructorArgs), newLength, scriptContext); - })); - } - else + bool isDefaultConstructor = constructor == defaultConstructor; + newTypedArray = VarTo(JavascriptOperators::NewObjectCreationHelper_ReentrancySafe(constructor, isDefaultConstructor, scriptContext->GetThreadContext(), [=]()->Js::Var { - newTypedArray = TypedArray::Create(buffer, beginByteOffset, newLength, scriptContext->GetLibrary()); - } + Js::Var constructorArgs[] = { constructor, buffer, JavascriptNumber::ToVar(beginByteOffset, scriptContext), JavascriptNumber::ToVar(newLength, scriptContext) }; + Js::CallInfo constructorCallInfo(Js::CallFlags_New, _countof(constructorArgs)); + return TypedArrayBase::TypedArrayCreate(constructor, &Js::Arguments(constructorCallInfo, constructorArgs), newLength, scriptContext); + })); return newTypedArray; } @@ -1688,7 +1381,7 @@ namespace Js JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedFunction, _u("[TypedArray].from")); } - RecyclableObject* constructor = RecyclableObject::FromVar(args[0]); + RecyclableObject* constructor = VarTo(args[0]); bool isDefaultConstructor = JavascriptLibrary::IsTypedArrayConstructor(constructor, scriptContext); RecyclableObject* items = nullptr; @@ -1698,17 +1391,17 @@ namespace Js } bool mapping = false; - JavascriptFunction* mapFn = nullptr; + RecyclableObject* mapFn = nullptr; Var mapFnThisArg = nullptr; if (args.Info.Count >= 3) { - if (!JavascriptFunction::Is(args[2])) + if (!JavascriptConversion::IsCallable(args[2])) { JavascriptError::ThrowTypeError(scriptContext, JSERR_FunctionArgument_NeedFunction, _u("[TypedArray].from")); } - mapFn = JavascriptFunction::FromVar(args[2]); + mapFn = VarTo(args[2]); if (args.Info.Count >= 4) { @@ -1755,7 +1448,7 @@ namespace Js if (!newTypedArrayBase) { - newArr = JavascriptOperators::TryFromVar(newObj); + newArr = JavascriptArray::TryVarToNonES5Array(newObj); } for (uint32 k = 0; k < len; k++) @@ -1801,7 +1494,7 @@ namespace Js if (!itemsTypedArrayBase) { - itemsArray = JavascriptOperators::TryFromVar(items); + itemsArray = JavascriptArray::TryVarToNonES5Array(items); } newObj = JavascriptOperators::NewObjectCreationHelper_ReentrancySafe(constructor, isDefaultConstructor, scriptContext->GetThreadContext(), [=]()->Js::Var @@ -1816,7 +1509,7 @@ namespace Js if (!newTypedArrayBase) { - newArr = JavascriptOperators::TryFromVar(newObj); + newArr = JavascriptArray::TryVarToNonES5Array(newObj); } for (uint32 k = 0; k < len; k++) @@ -1886,6 +1579,21 @@ namespace Js return JavascriptArray::OfHelper(true, args, scriptContext); } + Var TypedArrayBase::EntryAt(RecyclableObject* function, CallInfo callInfo, ...) + { + PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); + + ARGUMENTS(args, callInfo); + ScriptContext* scriptContext = function->GetScriptContext(); + + Assert(!(callInfo.Flags & CallFlags_New)); + CHAKRATEL_LANGSTATS_INC_BUILTINCOUNT(TypedArray_Prototype_at); + + TypedArrayBase* typedArrayBase = ValidateTypedArray(args, scriptContext, _u("[TypedArray].prototype.at")); + + return JavascriptArray::AtHelper(nullptr, typedArrayBase, typedArrayBase, typedArrayBase->GetLength(), args, scriptContext); + } + Var TypedArrayBase::EntryCopyWithin(RecyclableObject* function, CallInfo callInfo, ...) { PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); @@ -1916,7 +1624,7 @@ namespace Js Assert(!JavascriptOperators::IsUndefinedOrNull(scriptFunction)); Assert(JavascriptConversion::IsCallable(scriptFunction)); - RecyclableObject* function = RecyclableObject::FromVar(scriptFunction); + RecyclableObject* function = VarTo(scriptFunction); Var chakraLibObj = JavascriptOperators::OP_GetProperty(library->GetGlobalObject(), PropertyIds::__chakraLibrary, scriptContext); Var argsIt[] = { chakraLibObj, args[0], TaggedInt::ToVarUnchecked((int)kind) }; @@ -1994,7 +1702,7 @@ namespace Js JavascriptError::ThrowTypeError(scriptContext, JSERR_FunctionArgument_NeedFunction, _u("[TypedArray].prototype.filter")); } - RecyclableObject* callBackFn = RecyclableObject::FromVar(args[1]); + RecyclableObject* callBackFn = VarTo(args[1]); Var thisArg = nullptr; if (args.Info.Count > 2) @@ -2006,8 +1714,6 @@ namespace Js thisArg = scriptContext->GetLibrary()->GetUndefined(); } - // The correct flag value is CallFlags_Value but we pass CallFlags_None in compat modes - CallFlags flags = CallFlags_Value; Var element = nullptr; Var selected = nullptr; RecyclableObject* newObj = nullptr; @@ -2031,7 +1737,7 @@ namespace Js BEGIN_SAFE_REENTRANT_CALL(scriptContext->GetThreadContext()) { selected = CALL_FUNCTION(scriptContext->GetThreadContext(), - callBackFn, CallInfo(flags, 4), thisArg, + callBackFn, CallInfo(CallFlags_Value, 4), thisArg, element, JavascriptNumber::ToVar(k, scriptContext), typedArrayBase); @@ -2051,7 +1757,7 @@ namespace Js AssertOrFailFast(JavascriptOperators::IsConstructor(constructor)); bool isDefaultConstructor = constructor == defaultConstructor; - newObj = RecyclableObject::FromVar(JavascriptOperators::NewObjectCreationHelper_ReentrancySafe(constructor, isDefaultConstructor, scriptContext->GetThreadContext(), [=]()->Js::Var + newObj = VarTo(JavascriptOperators::NewObjectCreationHelper_ReentrancySafe(constructor, isDefaultConstructor, scriptContext->GetThreadContext(), [=]()->Js::Var { Js::Var constructorArgs[] = { constructor, JavascriptNumber::ToVar(captured, scriptContext) }; Js::CallInfo constructorCallInfo(Js::CallFlags_New, _countof(constructorArgs)); @@ -2094,7 +1800,7 @@ namespace Js TypedArrayBase* typedArrayBase = ValidateTypedArray(args, scriptContext, _u("[TypedArray].prototype.find")); - return JavascriptArray::FindHelper(nullptr, typedArrayBase, typedArrayBase, typedArrayBase->GetLength(), args, scriptContext); + return JavascriptArray::FindHelper(nullptr, typedArrayBase, typedArrayBase, typedArrayBase->GetLength(), args, scriptContext); } Var TypedArrayBase::EntryFindIndex(RecyclableObject* function, CallInfo callInfo, ...) @@ -2110,7 +1816,39 @@ namespace Js TypedArrayBase* typedArrayBase = ValidateTypedArray(args, scriptContext, _u("[TypedArray].prototype.findIndex")); - return JavascriptArray::FindHelper(nullptr, typedArrayBase, typedArrayBase, typedArrayBase->GetLength(), args, scriptContext); + return JavascriptArray::FindHelper(nullptr, typedArrayBase, typedArrayBase, typedArrayBase->GetLength(), args, scriptContext); + } + + Var TypedArrayBase::EntryFindLast(RecyclableObject* function, CallInfo callInfo, ...) + { + PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); + + ARGUMENTS(args, callInfo); + ScriptContext* scriptContext = function->GetScriptContext(); + AUTO_TAG_NATIVE_LIBRARY_ENTRY(function, callInfo, _u("[TypedArray].prototype.findLast")); + + Assert(!(callInfo.Flags & CallFlags_New)); + CHAKRATEL_LANGSTATS_INC_BUILTINCOUNT(TypedArray_Prototype_find); + + TypedArrayBase* typedArrayBase = ValidateTypedArray(args, scriptContext, _u("[TypedArray].prototype.findLast")); + + return JavascriptArray::FindHelper(nullptr, typedArrayBase, typedArrayBase, typedArrayBase->GetLength(), args, scriptContext); + } + + Var TypedArrayBase::EntryFindLastIndex(RecyclableObject* function, CallInfo callInfo, ...) + { + PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); + + ARGUMENTS(args, callInfo); + ScriptContext* scriptContext = function->GetScriptContext(); + AUTO_TAG_NATIVE_LIBRARY_ENTRY(function, callInfo, _u("[TypedArray].prototype.findLastIndex")); + + Assert(!(callInfo.Flags & CallFlags_New)); + CHAKRATEL_LANGSTATS_INC_BUILTINCOUNT(TypedArray_Prototype_findIndex); + + TypedArrayBase* typedArrayBase = ValidateTypedArray(args, scriptContext, _u("[TypedArray].prototype.findLastIndex")); + + return JavascriptArray::FindHelper(nullptr, typedArrayBase, typedArrayBase, typedArrayBase->GetLength(), args, scriptContext); } // %TypedArray%.prototype.forEach as described in ES6.0 (draft 22) Section 22.2.3.12 @@ -2133,7 +1871,7 @@ namespace Js JavascriptError::ThrowTypeError(scriptContext, JSERR_FunctionArgument_NeedFunction, _u("[TypedArray].prototype.forEach")); } - RecyclableObject* callBackFn = RecyclableObject::FromVar(args[1]); + RecyclableObject* callBackFn = VarTo(args[1]); Var thisArg; if (args.Info.Count > 2) @@ -2402,105 +2140,66 @@ namespace Js return JavascriptArray::SomeHelper(nullptr, typedArrayBase, typedArrayBase, typedArrayBase->GetLength(), args, scriptContext); } - template int __cdecl TypedArrayCompareElementsHelper(void* context, const void* elem1, const void* elem2) + // Comparison method used in TypedArray.prototype.sort + template bool TypedArrayCompareElementsHelper(JavascriptArray::CompareVarsInfo* cvInfo, const void* elem1, const void* elem2) { const T* element1 = static_cast(elem1); const T* element2 = static_cast(elem2); Assert(element1 != nullptr); Assert(element2 != nullptr); - Assert(context != nullptr); + Assert(cvInfo != nullptr); const T x = *element1; const T y = *element2; + // ECMA2023 spec requires that NaN values are sorted to the end if (NumberUtilities::IsNan((double)x)) { - if (NumberUtilities::IsNan((double)y)) - { - return 0; - } - - return 1; + return false; } - else + else if (NumberUtilities::IsNan((double)y)) { - if (NumberUtilities::IsNan((double)y)) - { - return -1; - } + return true; } - void **contextArray = (void **)context; - if (contextArray[1] != nullptr) + if (cvInfo->compFn != nullptr) { - RecyclableObject* compFn = RecyclableObject::FromVar(contextArray[1]); + RecyclableObject* compFn = cvInfo->compFn; ScriptContext* scriptContext = compFn->GetScriptContext(); Var undefined = scriptContext->GetLibrary()->GetUndefined(); - double dblResult; Var retVal = nullptr; BEGIN_SAFE_REENTRANT_CALL(scriptContext->GetThreadContext()) { retVal = CALL_FUNCTION(scriptContext->GetThreadContext(), compFn, CallInfo(CallFlags_Value, 3), undefined, - JavascriptNumber::ToVarWithCheck((double)x, scriptContext), - JavascriptNumber::ToVarWithCheck((double)y, scriptContext)); + JavascriptNumber::ToVarNoCheck((double)x, scriptContext), + JavascriptNumber::ToVarNoCheck((double)y, scriptContext)); } END_SAFE_REENTRANT_CALL - Assert(TypedArrayBase::Is(contextArray[0])); - if (TypedArrayBase::IsDetachedTypedArray(contextArray[0])) - { - JavascriptError::ThrowTypeError(scriptContext, JSERR_DetachedTypedArray, _u("[TypedArray].prototype.sort")); - } - if (TaggedInt::Is(retVal)) { - return TaggedInt::ToInt32(retVal); + return TaggedInt::ToInt32(retVal) < 0; } if (JavascriptNumber::Is_NoTaggedIntCheck(retVal)) { - dblResult = JavascriptNumber::GetValue(retVal); - } - else - { - dblResult = JavascriptConversion::ToNumber_Full(retVal, scriptContext); - - // ToNumber may execute user-code which can cause the array to become detached - if (TypedArrayBase::IsDetachedTypedArray(contextArray[0])) - { - JavascriptError::ThrowTypeError(scriptContext, JSERR_DetachedTypedArray, _u("[TypedArray].prototype.sort")); - } - } - - if (dblResult < 0) - { - return -1; - } - else if (dblResult > 0) - { - return 1; + return JavascriptNumber::GetValue(retVal) < 0; } - return 0; + return JavascriptConversion::ToNumber_Full(retVal, scriptContext) < 0; } - else + else // simple comparison when no user method provided { - if (x < y) - { - return -1; - } - else if (x > y) - { - return 1; - } - - return 0; + return x < y; } } + // TypedArray.prototype.sort entry point + // Implements #sec-%typedarray%.prototype.sort from ECMA 2023 spec + // Var TypedArrayBase::EntrySort(RecyclableObject* function, CallInfo callInfo, ...) { PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); @@ -2512,40 +2211,58 @@ namespace Js Assert(!(callInfo.Flags & CallFlags_New)); CHAKRATEL_LANGSTATS_INC_BUILTINCOUNT(TypedArray_Prototype_sort); - TypedArrayBase* typedArrayBase = ValidateTypedArray(args, scriptContext, _u("[TypedArray].prototype.sort")); - uint32 length = typedArrayBase->GetLength(); - - // If TypedArray has no length, we don't have any work to do. - if (length == 0) - { - return typedArrayBase; - } - RecyclableObject* compareFn = nullptr; - - if (args.Info.Count > 1) + // Spec requires us to throw if comparison function is neither undefined nor callable + if (args.Info.Count > 1 && !JavascriptOperators::IsUndefined(args[1])) { if (!JavascriptConversion::IsCallable(args[1])) { JavascriptError::ThrowTypeError(scriptContext, JSERR_FunctionArgument_NeedFunction, _u("[TypedArray].prototype.sort")); } - compareFn = RecyclableObject::FromVar(args[1]); + compareFn = UnsafeVarTo(args[1]); } - // Get the elements comparison function for the type of this TypedArray - void* elementCompare = reinterpret_cast(typedArrayBase->GetCompareElementsFunction()); - - Assert(elementCompare); - - // Cast compare to the correct function type - int(__cdecl*elementCompareFunc)(void*, const void*, const void*) = (int(__cdecl*)(void*, const void*, const void*))elementCompare; + // Throw if not a valid typed array + // This step is per spec and allows us to optimise significantly below + TypedArrayBase* typedArrayBase = ValidateTypedArray(args, scriptContext, _u("[TypedArray].prototype.sort")); + uint32 length = typedArrayBase->GetLength(); - void * contextToPass[] = { typedArrayBase, compareFn }; + // Early return if length is 0 or 1 + if (length < 2) + { + return typedArrayBase; + } - // We can always call qsort_s with the same arguments. If user compareFn is non-null, the callback will use it to do the comparison. - qsort_s(typedArrayBase->GetByteBuffer(), length, typedArrayBase->GetBytesPerElement(), elementCompareFunc, contextToPass); + BEGIN_TEMP_ALLOCATOR(tempAlloc, scriptContext, _u("Runtime")) + { + byte* buffer = typedArrayBase->GetByteBuffer(); + + // Spec mandates copy before sort + // But it is only detectable if a compare function was provided + if (compareFn != nullptr) + { + uint32 elementSize = typedArrayBase->GetBytesPerElement(); + uint32 byteLength = elementSize * length; + byte* list = AnewArray(tempAlloc, byte, byteLength); + memcpy(list, buffer, byteLength); + // Sort the copied data + typedArrayBase->SortHelper(list, length, compareFn, scriptContext, tempAlloc); + + // compare function calls may have detached Type Array + if (TypedArrayBase::IsDetachedTypedArray(typedArrayBase)) + { + JavascriptError::ThrowTypeError(scriptContext, JSERR_DetachedTypedArray, _u("[TypedArray].prototype.sort")); + } + memcpy(buffer, list, byteLength); + } + else + { + // perform an in-place sort when no comparison method is provided + typedArrayBase->SortHelper(buffer, length, nullptr, scriptContext, tempAlloc); + } + } return typedArrayBase; } @@ -2627,12 +2344,12 @@ namespace Js Assert(lengthRef); Assert(typeIdRef); - if(!RecyclableObject::Is(var)) + if(!VarIs(var)) { return false; } - const TypeId typeId = RecyclableObject::FromVar(var)->GetTypeId(); + const TypeId typeId = VarTo(var)->GetTypeId(); switch(typeId) { case TypeIds_Int8Array: @@ -2645,7 +2362,7 @@ namespace Js case TypeIds_Float32Array: case TypeIds_Float64Array: Assert(ValueType::FromTypeId(typeId,false).IsOptimizedTypedArray()); - *lengthRef = FromVar(var)->GetLength(); + *lengthRef = VarTo(var)->GetLength(); *typeIdRef = typeId; return true; } @@ -2700,9 +2417,9 @@ namespace Js else { double dIndexValue = 0; - if (JavascriptString::Is(index)) + if (VarIs(index)) { - if (JavascriptConversion::CanonicalNumericIndexString(JavascriptString::FromVar(index), &dIndexValue, GetScriptContext())) + if (JavascriptConversion::CanonicalNumericIndexString(VarTo(index), &dIndexValue, GetScriptContext())) { if (JavascriptNumber::IsNegZero(dIndexValue)) { @@ -3595,9 +3312,9 @@ namespace Js return arr; } - BOOL CharArray::Is(Var value) + template <> bool VarIsImpl(RecyclableObject* obj) { - return JavascriptOperators::GetTypeId(value) == Js::TypeIds_CharArray; + return JavascriptOperators::GetTypeId(obj) == Js::TypeIds_CharArray; } Var CharArray::EntrySet(RecyclableObject* function, CallInfo callInfo, ...) @@ -3618,18 +3335,6 @@ namespace Js JavascriptError::ThrowTypeError(GetScriptContext(), JSERR_This_NeedTypedArray); } - inline CharArray* CharArray::FromVar(Var aValue) - { - AssertOrFailFastMsg(CharArray::Is(aValue), "invalid CharArray"); - return static_cast(aValue); - } - - inline CharArray* CharArray::UnsafeFromVar(Var aValue) - { - AssertMsg(CharArray::Is(aValue), "invalid CharArray"); - return static_cast(aValue); - } - inline BOOL CharArray::DirectSetItem(__in uint32 index, __in Js::Var value) { ScriptContext* scriptContext = GetScriptContext(); diff --git a/lib/Runtime/Library/TypedArray.h b/lib/Runtime/Library/TypedArray.h index 2e37c8ea0ca..4bd716b36b8 100644 --- a/lib/Runtime/Library/TypedArray.h +++ b/lib/Runtime/Library/TypedArray.h @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- // Implements typed array. @@ -10,7 +11,7 @@ namespace Js { typedef Var (*PFNCreateTypedArray)(Js::ArrayBufferBase* arrayBuffer, uint32 offSet, uint32 mappedLength, Js::JavascriptLibrary* javascriptLibrary); - template int __cdecl TypedArrayCompareElementsHelper(void* context, const void* elem1, const void* elem2); + template bool TypedArrayCompareElementsHelper(JavascriptArray::CompareVarsInfo* cvInfo, const void* elem1, const void* elem2); class TypedArrayBase : public ArrayBufferParent { @@ -32,6 +33,7 @@ namespace Js static FunctionInfo From; static FunctionInfo Of; + static FunctionInfo At; static FunctionInfo CopyWithin; static FunctionInfo Entries; static FunctionInfo Every; @@ -39,6 +41,8 @@ namespace Js static FunctionInfo Filter; static FunctionInfo Find; static FunctionInfo FindIndex; + static FunctionInfo FindLast; + static FunctionInfo FindLastIndex; static FunctionInfo ForEach; static FunctionInfo IndexOf; static FunctionInfo Includes; @@ -70,6 +74,7 @@ namespace Js static Var EntrySubarray(RecyclableObject* function, CallInfo callInfo, ...); static Var EntryFrom(RecyclableObject* function, CallInfo callInfo, ...); static Var EntryOf(RecyclableObject* function, CallInfo callInfo, ...); + static Var EntryAt(RecyclableObject* function, CallInfo callInfo, ...); static Var EntryCopyWithin(RecyclableObject* function, CallInfo callInfo, ...); static Var EntryEntries(RecyclableObject* function, CallInfo callInfo, ...); static Var EntryEvery(RecyclableObject* function, CallInfo callInfo, ...); @@ -77,6 +82,8 @@ namespace Js static Var EntryFilter(RecyclableObject* function, CallInfo callInfo, ...); static Var EntryFind(RecyclableObject* function, CallInfo callInfo, ...); static Var EntryFindIndex(RecyclableObject* function, CallInfo callInfo, ...); + static Var EntryFindLast(RecyclableObject* function, CallInfo callInfo, ...); + static Var EntryFindLastIndex(RecyclableObject* function, CallInfo callInfo, ...); static Var EntryForEach(RecyclableObject* function, CallInfo callInfo, ...); static Var EntryIndexOf(RecyclableObject* function, CallInfo callInfo, ...); static Var EntryIncludes(RecyclableObject* function, CallInfo callInfo, ...); @@ -130,10 +137,7 @@ namespace Js virtual BOOL InitProperty(Js::PropertyId propertyId, Js::Var value, PropertyOperationFlags flags = PropertyOperation_None, Js::PropertyValueInfo* info = NULL) override; virtual BOOL SetPropertyWithAttributes(PropertyId propertyId, Var value, PropertyAttributes attributes, PropertyValueInfo* info, PropertyOperationFlags flags = PropertyOperation_None, SideEffects possibleSideEffects = SideEffects_Any) override; - static BOOL Is(Var aValue); static BOOL Is(TypeId typeId); - static TypedArrayBase* FromVar(Var aValue); - static TypedArrayBase* UnsafeFromVar(Var aValue); // Returns false if this is not a TypedArray or it's not detached static BOOL IsDetachedTypedArray(Var aValue); static HRESULT GetBuffer(Var aValue, ArrayBuffer** outBuffer, uint32* outOffset, uint32* outLength); @@ -179,6 +183,7 @@ namespace Js // objectArray support virtual BOOL SetItemWithAttributes(uint32 index, Var value, PropertyAttributes attributes) override; + virtual BOOL IsObjectArrayFrozen() override; Var FindMinOrMax(Js::ScriptContext * scriptContext, TypeId typeId, bool findMax); template Var FindMinOrMax(Js::ScriptContext * scriptContext, bool findMax); @@ -197,8 +202,7 @@ namespace Js static BOOL CanonicalNumericIndexString(PropertyId propertyId, ScriptContext *scriptContext); static BOOL CanonicalNumericIndexString(JavascriptString *propertyString, ScriptContext *scriptContext); - typedef int(__cdecl* CompareElementsFunction)(void*, const void*, const void*); - virtual CompareElementsFunction GetCompareElementsFunction() = 0; + virtual void SortHelper(byte* listBuffer, uint32 length, RecyclableObject* compareFn, ScriptContext* scriptContext, ArenaAllocator* allocator) = 0; virtual Var Subarray(uint32 begin, uint32 end) = 0; Field(int32) BYTES_PER_ELEMENT; @@ -216,6 +220,11 @@ namespace Js #endif }; + template <> inline bool VarIsImpl(RecyclableObject* obj) + { + return TypedArrayBase::Is(JavascriptOperators::GetTypeId(obj)); + } + template class TypedArray; @@ -271,9 +280,6 @@ namespace Js Var Subarray(uint32 begin, uint32 end); - static BOOL Is(Var aValue); - static TypedArray* FromVar(Var aValue); - static TypedArray* UnsafeFromVar(Var aValue); static BOOL HasVirtualTableInfo(Var aValue) { return VirtualTableInfo>::HasVirtualTable(aValue) || VirtualTableInfo>>::HasVirtualTable(aValue); @@ -488,7 +494,6 @@ namespace Js return TRUE; } - virtual BOOL DirectSetItem(__in uint32 index, __in Js::Var value) override sealed; virtual BOOL DirectSetItemNoSet(__in uint32 index, __in Js::Var value) override sealed; virtual Var DirectGetItem(__in uint32 index) override sealed; @@ -512,9 +517,14 @@ namespace Js } protected: - CompareElementsFunction GetCompareElementsFunction() + void SortHelper(byte* listBuffer, uint32 length, RecyclableObject* compareFn, ScriptContext* scriptContext, ArenaAllocator* allocator) { - return &TypedArrayCompareElementsHelper; + TypeName* list = reinterpret_cast(listBuffer); + JavascriptArray::CompareVarsInfo cvInfo; + cvInfo.scriptContext = scriptContext; + cvInfo.compFn = compareFn; + cvInfo.compareType = &TypedArrayCompareElementsHelper; + JavascriptArray::TypedArraySort(list, length, &cvInfo, allocator); } public: @@ -551,11 +561,8 @@ namespace Js static Var Create(ArrayBufferBase* arrayBuffer, uint32 byteOffSet, uint32 mappedLength, JavascriptLibrary* javascriptLibrary); static Var NewInstance(RecyclableObject* function, CallInfo callInfo, ...); - static BOOL Is(Var aValue); Var Subarray(uint32 begin, uint32 end); - static CharArray* FromVar(Var aValue); - static CharArray* UnsafeFromVar(Var aValue); virtual BOOL DirectSetItem(__in uint32 index, __in Js::Var value) override; virtual BOOL DirectSetItemNoSet(__in uint32 index, __in Js::Var value) override; @@ -574,9 +581,14 @@ namespace Js virtual Var TypedCompareExchange(__in uint32 index, __in Var comparand, __in Var replacementValue) override; protected: - CompareElementsFunction GetCompareElementsFunction() + void SortHelper(byte* listBuffer, uint32 length, RecyclableObject* compareFn, ScriptContext* scriptContext, ArenaAllocator* allocator) { - return &TypedArrayCompareElementsHelper; + char16* list = reinterpret_cast(listBuffer); + JavascriptArray::CompareVarsInfo cvInfo; + cvInfo.scriptContext = scriptContext; + cvInfo.compFn = compareFn; + cvInfo.compareType = &TypedArrayCompareElementsHelper; + JavascriptArray::TypedArraySort(list, length, &cvInfo, allocator); } public: @@ -586,6 +598,7 @@ namespace Js } }; + template <> bool VarIsImpl(RecyclableObject* obj); template TypedArray::TypedArray(ArrayBufferBase* arrayBuffer, uint32 byteOffset, uint32 mappedLength, DynamicType* type) : diff --git a/lib/Runtime/Library/UriHelper.cpp b/lib/Runtime/Library/UriHelper.cpp index 26de3321344..838df90a14b 100644 --- a/lib/Runtime/Library/UriHelper.cpp +++ b/lib/Runtime/Library/UriHelper.cpp @@ -19,9 +19,9 @@ namespace Js else { - if (JavascriptString::Is(args[1])) + if (VarIs(args[1])) { - strURI = JavascriptString::FromVar(args[1]); + strURI = VarTo(args[1]); } else { @@ -267,9 +267,9 @@ namespace Js else { - if (JavascriptString::Is(args[1])) + if (VarIs(args[1])) { - strURI = JavascriptString::FromVar(args[1]); + strURI = VarTo(args[1]); } else { diff --git a/lib/Runtime/Library/WabtInterface.cpp b/lib/Runtime/Library/WabtInterface.cpp index 4129a752f1c..fd3c2ff9407 100644 --- a/lib/Runtime/Library/WabtInterface.cpp +++ b/lib/Runtime/Library/WabtInterface.cpp @@ -111,7 +111,7 @@ Js::Var WabtInterface::EntryConvertWast2Wasm(RecyclableObject* function, CallInf Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count < 2 || !JavascriptString::Is(args[1])) + if (args.Info.Count < 2 || !VarIs(args[1])) { JavascriptError::ThrowTypeError(scriptContext, WASMERR_NeedBufferSource); } @@ -123,7 +123,7 @@ Js::Var WabtInterface::EntryConvertWast2Wasm(RecyclableObject* function, CallInf { JavascriptError::ThrowTypeError(scriptContext, JSERR_NeedObject, _u("config")); } - DynamicObject * configObject = JavascriptObject::FromVar(args[2]); + DynamicObject * configObject = VarTo(args[2]); Js::Var isSpecVar = JavascriptOperators::OP_GetProperty(configObject, PropertyIds::spec, scriptContext); isSpecText = JavascriptConversion::ToBool(isSpecVar, scriptContext); @@ -173,7 +173,7 @@ Js::Var WabtInterface::EntryConvertWast2Wasm(RecyclableObject* function, CallInf } return result; } - catch (ChakraWabt::Error& e) + catch (ChakraWabt::WabtAPIError& e) { JavascriptError::ThrowTypeErrorVar(scriptContext, WABTERR_WabtError, NarrowStringToWide(&context, e.message)); } diff --git a/lib/Runtime/Library/WasmLibrary.h b/lib/Runtime/Library/WasmLibrary.h index 6f0e60aad2b..c8119231e71 100644 --- a/lib/Runtime/Library/WasmLibrary.h +++ b/lib/Runtime/Library/WasmLibrary.h @@ -15,4 +15,4 @@ namespace Js static Var WasmLazyTrapCallback(RecyclableObject *callee, CallInfo, ...); #endif }; -} \ No newline at end of file +} diff --git a/lib/Runtime/Library/WebAssembly.cpp b/lib/Runtime/Library/WebAssembly.cpp index 933c9a893a9..20857eb0c1d 100644 --- a/lib/Runtime/Library/WebAssembly.cpp +++ b/lib/Runtime/Library/WebAssembly.cpp @@ -92,9 +92,9 @@ Var WebAssembly::EntryInstantiate(RecyclableObject* function, CallInfo callInfo, importObject = args[2]; } - if (WebAssemblyModule::Is(args[1])) + if (VarIs(args[1])) { - resultObject = WebAssemblyInstance::CreateInstance(WebAssemblyModule::FromVar(args[1]), importObject); + resultObject = WebAssemblyInstance::CreateInstance(VarTo(args[1]), importObject); } else { @@ -227,7 +227,7 @@ Var WebAssembly::EntryQueryResponse(RecyclableObject* function, CallInfo callInf JavascriptError::ThrowTypeError(scriptContext, WASMERR_NeedResponse); } - RecyclableObject* arrayBufferFunc = RecyclableObject::FromVar(arrayBufferProp); + RecyclableObject* arrayBufferFunc = VarTo(arrayBufferProp); Var arrayBufferRes = nullptr; BEGIN_SAFE_REENTRANT_CALL(scriptContext->GetThreadContext()) { @@ -236,7 +236,7 @@ Var WebAssembly::EntryQueryResponse(RecyclableObject* function, CallInfo callInf END_SAFE_REENTRANT_CALL // Make sure res.arrayBuffer() is a Promise - if (!JavascriptPromise::Is(arrayBufferRes)) + if (!VarIs(arrayBufferRes)) { JavascriptError::ThrowTypeError(scriptContext, WASMERR_NeedResponse); } @@ -245,11 +245,11 @@ Var WebAssembly::EntryQueryResponse(RecyclableObject* function, CallInfo callInf bool WebAssembly::IsResponseObject(Var responseObject, ScriptContext* scriptContext) { - if (!RecyclableObject::Is(responseObject)) + if (!VarIs(responseObject)) { return false; } - TypeId typeId = RecyclableObject::FromVar(responseObject)->GetTypeId(); + TypeId typeId = VarTo(responseObject)->GetTypeId(); if (!CONFIG_FLAG(WasmIgnoreResponse)) { return scriptContext->IsWellKnownHostType(typeId) && typeId != TypeIds_Undefined; @@ -271,13 +271,13 @@ Var WebAssembly::TryResolveResponse(RecyclableObject* function, Var thisArg, Var // We already have a response object, query it now responsePromise = CALL_ENTRYPOINT_NOASSERT(EntryQueryResponse, function, Js::CallInfo(CallFlags_Value, 2), thisArg, responseArg); } - else if (JavascriptPromise::Is(responseArg)) + else if (VarIs(responseArg)) { JavascriptPromise* promise = (JavascriptPromise*)responseArg; // Wait until this promise resolves and then try to query the response object (if it's a response object) responsePromise = JavascriptPromise::CreateThenPromise(promise, library->GetWebAssemblyQueryResponseFunction(), library->GetThrowerFunction(), scriptContext); } - if (responsePromise && !JavascriptPromise::Is(responsePromise)) + if (responsePromise && !VarIs(responsePromise)) { AssertMsg(UNREACHED, "How did we end up with something other than a promise here ?"); JavascriptError::ThrowTypeError(scriptContext, WASMERR_NeedResponse); @@ -288,12 +288,18 @@ Var WebAssembly::TryResolveResponse(RecyclableObject* function, Var thisArg, Var uint32 WebAssembly::ToNonWrappingUint32(Var val, ScriptContext * ctx) { - double i = JavascriptConversion::ToInteger(val, ctx); - if (i < 0 || i > (double)UINT32_MAX) + double i = JavascriptConversion::ToNumber(val, ctx); + if ( + JavascriptNumber::IsNan(i) || + JavascriptNumber::IsPosInf(i) || + JavascriptNumber::IsNegInf(i) || + i < 0 || + i > (double)UINT32_MAX + ) { - JavascriptError::ThrowRangeError(ctx, JSERR_ArgumentOutOfRange); + JavascriptError::ThrowTypeError(ctx, JSERR_NeedNumber); } - return (uint32)i; + return (uint32)JavascriptConversion::ToInteger(i); } void diff --git a/lib/Runtime/Library/WebAssemblyEnvironment.cpp b/lib/Runtime/Library/WebAssemblyEnvironment.cpp index aced3bcb9c2..c60559f4249 100644 --- a/lib/Runtime/Library/WebAssemblyEnvironment.cpp +++ b/lib/Runtime/Library/WebAssemblyEnvironment.cpp @@ -62,11 +62,11 @@ T* WebAssemblyEnvironment::GetVarElement(Field(Var)* ptr, uint32 index, uint32 m Var varFunc = *functionPtr; if (varFunc) { - if (!T::Is(varFunc)) + if (!VarIs(varFunc)) { Js::Throw::InternalError(); } - return T::FromVar(varFunc); + return VarTo(varFunc); } return nullptr; } @@ -75,7 +75,7 @@ template void WebAssemblyEnvironment::SetVarElement(Field(Var)* ptr, T* val, uint32 index, uint32 maxCount) { if (index >= maxCount || - !T::Is(val)) + !VarIsCorrectType(val)) { Js::Throw::InternalError(); } @@ -161,10 +161,10 @@ Wasm::WasmConstLitNode WebAssemblyEnvironment::GetGlobalValue(Wasm::WasmGlobal* case Wasm::WasmTypes::F32: cnst.f32 = GetGlobalInternal(offset); break; case Wasm::WasmTypes::F64: cnst.f64 = GetGlobalInternal(offset); break; #ifdef ENABLE_WASM_SIMD - case Wasm::WasmTypes::M128: AssertOrFailFastMsg(UNREACHED, "Wasm.Simd globals not supported"); + case Wasm::WasmTypes::V128: AssertOrFailFastMsg(UNREACHED, "Wasm.Simd globals not supported"); #endif default: - Wasm::WasmTypes::CompileAssertCases(); + Wasm::WasmTypes::CompileAssertCases(); } return cnst; } @@ -181,10 +181,10 @@ void WebAssemblyEnvironment::SetGlobalValue(Wasm::WasmGlobal* global, Wasm::Wasm case Wasm::WasmTypes::F32: SetGlobalInternal(offset, cnst.f32); break; case Wasm::WasmTypes::F64: SetGlobalInternal(offset, cnst.f64); break; #ifdef ENABLE_WASM_SIMD - case Wasm::WasmTypes::M128: AssertOrFailFastMsg(UNREACHED, "Wasm.Simd globals not supported"); + case Wasm::WasmTypes::V128: AssertOrFailFastMsg(UNREACHED, "Wasm.Simd globals not supported"); #endif default: - Wasm::WasmTypes::CompileAssertCases(); + Wasm::WasmTypes::CompileAssertCases(); } } diff --git a/lib/Runtime/Library/WebAssemblyInstance.cpp b/lib/Runtime/Library/WebAssemblyInstance.cpp index bfb8660adb0..273aabf03cc 100644 --- a/lib/Runtime/Library/WebAssemblyInstance.cpp +++ b/lib/Runtime/Library/WebAssemblyInstance.cpp @@ -41,29 +41,6 @@ WebAssemblyInstance::WebAssemblyInstance(WebAssemblyModule * wasmModule, Dynamic { } -/* static */ -bool -WebAssemblyInstance::Is(Var value) -{ - return JavascriptOperators::GetTypeId(value) == TypeIds_WebAssemblyInstance; -} - -/* static */ -WebAssemblyInstance * -WebAssemblyInstance::FromVar(Var value) -{ - AssertOrFailFast(WebAssemblyInstance::Is(value)); - return static_cast(value); -} - -/* static */ -WebAssemblyInstance * -WebAssemblyInstance::UnsafeFromVar(Var value) -{ - Assert(WebAssemblyInstance::Is(value)); - return static_cast(value); -} - // Implements "new WebAssembly.Instance(moduleObject [, importObject])" as described here: // https://github.com/WebAssembly/design/blob/master/JS.md#webassemblyinstance-constructor Var @@ -84,11 +61,11 @@ WebAssemblyInstance::NewInstance(RecyclableObject* function, CallInfo callInfo, JavascriptError::ThrowTypeError(scriptContext, JSERR_ClassConstructorCannotBeCalledWithoutNew, _u("WebAssembly.Instance")); } - if (args.Info.Count < 2 || !WebAssemblyModule::Is(args[1])) + if (args.Info.Count < 2 || !VarIs(args[1])) { JavascriptError::ThrowTypeError(scriptContext, WASMERR_NeedModule); } - WebAssemblyModule * module = WebAssemblyModule::FromVar(args[1]); + WebAssemblyModule * module = VarTo(args[1]); Var importObject = scriptContext->GetLibrary()->GetUndefined(); if (args.Info.Count >= 3) @@ -109,14 +86,14 @@ WebAssemblyInstance::GetterExports(RecyclableObject* function, CallInfo callInfo Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !WebAssemblyInstance::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { JavascriptError::ThrowTypeError(scriptContext, WASMERR_NeedInstanceObject); } - WebAssemblyInstance* instance = WebAssemblyInstance::FromVar(args[0]); + WebAssemblyInstance* instance = VarTo(args[0]); Js::Var exports = instance->m_exports; - if (!exports || !DynamicObject::Is(exports)) + if (!exports || !DynamicObject::IsBaseDynamicObject(exports)) { Assert(UNREACHED); exports = scriptContext->GetLibrary()->GetUndefined(); @@ -274,17 +251,17 @@ Var WebAssemblyInstance::CreateExportObject(WebAssemblyModule * wasmModule, Scri obj = JavascriptNumber::NewWithCheck(cnst.f64, scriptContext); break; #ifdef ENABLE_WASM_SIMD - case Wasm::WasmTypes::M128: - JavascriptError::ThrowTypeErrorVar(wasmModule->GetScriptContext(), WASMERR_InvalidTypeConversion, _u("m128"), _u("Var")); + case Wasm::WasmTypes::V128: + JavascriptError::ThrowTypeErrorVar(wasmModule->GetScriptContext(), WASMERR_InvalidTypeConversion, _u("v128"), _u("Var")); #endif default: - Wasm::WasmTypes::CompileAssertCases(); + Wasm::WasmTypes::CompileAssertCases(); } } JavascriptOperators::OP_SetProperty(exportsNamespace, propertyRecord->GetPropertyId(), obj, scriptContext); } } - DynamicObject::FromVar(exportsNamespace)->PreventExtensions(); + VarTo(exportsNamespace)->PreventExtensions(); return exportsNamespace; } @@ -311,7 +288,7 @@ void WebAssemblyInstance::LoadImports( { case Wasm::ExternalKinds::Function: { - if (!JavascriptFunction::Is(prop)) + if (!VarIs(prop)) { JavascriptError::ThrowWebAssemblyLinkErrorVar(ctx, WASMERR_InvalidImport, import->modName, import->importName, _u("Function")); } @@ -319,10 +296,10 @@ void WebAssemblyInstance::LoadImports( Assert(wasmModule->GetFunctionIndexType(counter) == Wasm::FunctionIndexTypes::ImportThunk); env->SetImportedFunction(counter, prop); - if (WasmScriptFunction::Is(prop)) + if (VarIs(prop)) { Assert(env->GetWasmFunction(counter) == nullptr); - WasmScriptFunction* func = WasmScriptFunction::FromVar(prop); + WasmScriptFunction* func = VarTo(prop); if (!wasmModule->GetWasmFunctionInfo(counter)->GetSignature()->IsEquivalent(func->GetSignature())) { char16 temp[2048] = { 0 }; @@ -344,11 +321,11 @@ void WebAssemblyInstance::LoadImports( Assert(wasmModule->HasMemoryImport()); if (wasmModule->HasMemoryImport()) { - if (!WebAssemblyMemory::Is(prop)) + if (!VarIs(prop)) { JavascriptError::ThrowWebAssemblyLinkErrorVar(ctx, WASMERR_InvalidImport, import->modName, import->importName, _u("WebAssembly.Memory")); } - WebAssemblyMemory * mem = WebAssemblyMemory::FromVar(prop); + WebAssemblyMemory * mem = VarTo(prop); if (mem->GetInitialLength() < wasmModule->GetMemoryInitSize()) { @@ -375,11 +352,11 @@ void WebAssemblyInstance::LoadImports( Assert(wasmModule->HasTableImport()); if (wasmModule->HasTableImport()) { - if (!WebAssemblyTable::Is(prop)) + if (!VarIs(prop)) { JavascriptError::ThrowWebAssemblyLinkErrorVar(ctx, WASMERR_InvalidImport, import->modName, import->importName, _u("WebAssembly.Table")); } - WebAssemblyTable * table = WebAssemblyTable::FromVar(prop); + WebAssemblyTable * table = VarTo(prop); if (table->GetInitialLength() < wasmModule->GetTableInitSize()) { @@ -410,10 +387,10 @@ void WebAssemblyInstance::LoadImports( case Wasm::WasmTypes::F64: cnst.f64 = JavascriptConversion::ToNumber(prop, ctx); break; case Wasm::WasmTypes::I64: Js::JavascriptError::ThrowTypeErrorVar(ctx, WASMERR_InvalidTypeConversion, _u("Var"), _u("i64")); #ifdef ENABLE_WASM_SIMD - case Wasm::WasmTypes::M128: Js::JavascriptError::ThrowTypeErrorVar(ctx, WASMERR_InvalidTypeConversion, _u("Var"), _u("m128")); + case Wasm::WasmTypes::V128: Js::JavascriptError::ThrowTypeErrorVar(ctx, WASMERR_InvalidTypeConversion, _u("Var"), _u("v128")); #endif default: - Wasm::WasmTypes::CompileAssertCases(); + Wasm::WasmTypes::CompileAssertCases(); } env->SetGlobalValue(global, cnst); break; diff --git a/lib/Runtime/Library/WebAssemblyInstance.h b/lib/Runtime/Library/WebAssemblyInstance.h index 6d5cb366137..eaed68f47f9 100644 --- a/lib/Runtime/Library/WebAssemblyInstance.h +++ b/lib/Runtime/Library/WebAssemblyInstance.h @@ -25,10 +25,6 @@ namespace Js static Var NewInstance(RecyclableObject* function, CallInfo callInfo, ...); static Var GetterExports(RecyclableObject* function, CallInfo callInfo, ...); - static bool Is(Var aValue); - static WebAssemblyInstance * FromVar(Var aValue); - static WebAssemblyInstance * UnsafeFromVar(Var aValue); - static WebAssemblyInstance * CreateInstance(WebAssemblyModule * module, Var importObject); private: WebAssemblyInstance(WebAssemblyModule * wasmModule, DynamicType * type); @@ -45,5 +41,9 @@ namespace Js Field(Js::Var) m_exports; }; + template <> inline bool VarIsImpl(RecyclableObject* obj) + { + return JavascriptOperators::GetTypeId(obj) == TypeIds_WebAssemblyInstance; + } } // namespace Js -#endif \ No newline at end of file +#endif diff --git a/lib/Runtime/Library/WebAssemblyMemory.cpp b/lib/Runtime/Library/WebAssemblyMemory.cpp index 43e3e8fd3c5..0da85c055b0 100644 --- a/lib/Runtime/Library/WebAssemblyMemory.cpp +++ b/lib/Runtime/Library/WebAssemblyMemory.cpp @@ -22,45 +22,33 @@ WebAssemblyMemory::WebAssemblyMemory(ArrayBufferBase* buffer, uint32 initial, ui } -_Must_inspect_result_ bool WebAssemblyMemory::AreLimitsValid(uint32 initial, uint32 maximum) +void WebAssemblyMemory::CheckLimits(ScriptContext * scriptContext, uint32 initial, uint32 maximum) { - return initial <= maximum && initial <= Wasm::Limits::GetMaxMemoryInitialPages() && maximum <= Wasm::Limits::GetMaxMemoryMaximumPages(); + if (maximum < initial) + { + JavascriptError::ThrowRangeError(scriptContext, JSERR_ArgumentOutOfRange); + } + if (initial > Wasm::Limits::GetMaxMemoryInitialPages()) + { + JavascriptError::ThrowTypeError(scriptContext, JSERR_FunctionArgument_Invalid, _u("descriptor.initial")); + } + if (maximum > Wasm::Limits::GetMaxMemoryMaximumPages()) + { + JavascriptError::ThrowTypeError(scriptContext, JSERR_FunctionArgument_Invalid, _u("descriptor.maximum")); + } } -_Must_inspect_result_ bool WebAssemblyMemory::AreLimitsValid(uint32 initial, uint32 maximum, uint32 bufferLength) +void WebAssemblyMemory::CheckLimits(ScriptContext * scriptContext, uint32 initial, uint32 maximum, uint32 bufferLength) { - if (!AreLimitsValid(initial, maximum)) - { - return false; - } + CheckLimits(scriptContext, initial, maximum); // Do the mul after initial checks to avoid potential unneeded OOM exception const uint32 initBytes = UInt32Math::Mul(initial); const uint32 maxBytes = UInt32Math::Mul(maximum); - return initBytes <= bufferLength && bufferLength <= maxBytes; -} - -/* static */ -bool -WebAssemblyMemory::Is(Var value) -{ - return JavascriptOperators::GetTypeId(value) == TypeIds_WebAssemblyMemory; -} - -/* static */ -WebAssemblyMemory * -WebAssemblyMemory::FromVar(Var value) -{ - AssertOrFailFast(WebAssemblyMemory::Is(value)); - return static_cast(value); -} - -/* static */ -WebAssemblyMemory * -WebAssemblyMemory::UnsafeFromVar(Var value) -{ - Assert(WebAssemblyMemory::Is(value)); - return static_cast(value); + if (initBytes > bufferLength || bufferLength > maxBytes) + { + JavascriptError::ThrowTypeError(scriptContext, JSERR_FunctionArgument_Invalid); + } } Var @@ -83,31 +71,38 @@ WebAssemblyMemory::NewInstance(RecyclableObject* function, CallInfo callInfo, .. if (args.Info.Count < 2 || !JavascriptOperators::IsObject(args[1])) { - JavascriptError::ThrowTypeError(scriptContext, JSERR_NeedObject, _u("memoryDescriptor")); + JavascriptError::ThrowTypeError(scriptContext, JSERR_NeedObject, _u("descriptor")); } - DynamicObject * memoryDescriptor = JavascriptObject::FromVar(args[1]); + DynamicObject * memoryDescriptor = VarTo(args[1]); Var initVar = JavascriptOperators::OP_GetProperty(memoryDescriptor, PropertyIds::initial, scriptContext); + if (Js::JavascriptOperators::IsUndefined(initVar)) + { + JavascriptError::ThrowTypeError(scriptContext, JSERR_NeedNumber, _u("descriptor.initial")); + } uint32 initial = WebAssembly::ToNonWrappingUint32(initVar, scriptContext); uint32 maximum = Wasm::Limits::GetMaxMemoryMaximumPages(); bool hasMaximum = false; - if (JavascriptOperators::OP_HasProperty(memoryDescriptor, PropertyIds::maximum, scriptContext)) + Var maxVar = JavascriptOperators::OP_GetProperty(memoryDescriptor, PropertyIds::maximum, scriptContext); + if (!Js::JavascriptOperators::IsUndefined(maxVar)) { hasMaximum = true; - Var maxVar = JavascriptOperators::OP_GetProperty(memoryDescriptor, PropertyIds::maximum, scriptContext); maximum = WebAssembly::ToNonWrappingUint32(maxVar, scriptContext); } bool isShared = false; - if (Wasm::Threads::IsEnabled() && JavascriptOperators::OP_HasProperty(memoryDescriptor, PropertyIds::shared, scriptContext)) + if (Wasm::Threads::IsEnabled()) { - if (!hasMaximum) + Var sharedVar = JavascriptOperators::OP_GetProperty(memoryDescriptor, PropertyIds::shared, scriptContext); + if (!Js::JavascriptOperators::IsUndefined(sharedVar)) { - JavascriptError::ThrowTypeError(scriptContext, WASMERR_SharedNoMaximum); + isShared = JavascriptConversion::ToBool(sharedVar, scriptContext); + if (!hasMaximum) + { + JavascriptError::ThrowTypeError(scriptContext, WASMERR_SharedNoMaximum); + } } - Var sharedVar = JavascriptOperators::OP_GetProperty(memoryDescriptor, PropertyIds::shared, scriptContext); - isShared = JavascriptConversion::ToBool(sharedVar, scriptContext); } return CreateMemoryObject(initial, maximum, isShared, scriptContext); @@ -126,13 +121,13 @@ WebAssemblyMemory::EntryGrow(RecyclableObject* function, CallInfo callInfo, ...) Assert(!(callInfo.Flags & CallFlags_New)); - if (!WebAssemblyMemory::Is(args[0])) + if (!VarIs(args[0])) { JavascriptError::ThrowTypeError(scriptContext, WASMERR_NeedMemoryObject); } - WebAssemblyMemory* memory = WebAssemblyMemory::FromVar(args[0]); - Assert(ArrayBufferBase::Is(memory->m_buffer)); + WebAssemblyMemory* memory = VarTo(args[0]); + Assert(VarIsCorrectType(memory->m_buffer)); Var deltaVar = scriptContext->GetLibrary()->GetUndefined(); if (args.Info.Count >= 2) @@ -281,23 +276,20 @@ WebAssemblyMemory::EntryGetterBuffer(RecyclableObject* function, CallInfo callIn Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !WebAssemblyMemory::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { JavascriptError::ThrowTypeError(scriptContext, WASMERR_NeedMemoryObject); } - WebAssemblyMemory* memory = WebAssemblyMemory::FromVar(args[0]); - Assert(ArrayBufferBase::Is(memory->m_buffer)); + WebAssemblyMemory* memory = VarTo(args[0]); + Assert(VarIsCorrectType(memory->m_buffer)); return CrossSite::MarshalVar(scriptContext, memory->m_buffer); } WebAssemblyMemory * WebAssemblyMemory::CreateMemoryObject(uint32 initial, uint32 maximum, bool isShared, ScriptContext * scriptContext) { - if (!AreLimitsValid(initial, maximum)) - { - JavascriptError::ThrowRangeError(scriptContext, JSERR_ArgumentOutOfRange); - } + CheckLimits(scriptContext, initial, maximum); uint32 byteLength = UInt32Math::Mul(initial); ArrayBufferBase* buffer = nullptr; #ifdef ENABLE_WASM_THREADS @@ -323,10 +315,7 @@ WebAssemblyMemory::CreateMemoryObject(uint32 initial, uint32 maximum, bool isSha WebAssemblyMemory * WebAssemblyMemory::CreateForExistingBuffer(uint32 initial, uint32 maximum, uint32 currentByteLength, ScriptContext * scriptContext) { - if (!AreLimitsValid(initial, maximum, currentByteLength)) - { - JavascriptError::ThrowRangeError(scriptContext, JSERR_ArgumentOutOfRange); - } + CheckLimits(scriptContext, initial, maximum, currentByteLength); ArrayBufferBase* buffer = scriptContext->GetLibrary()->CreateWebAssemblyArrayBuffer(currentByteLength); Assert(buffer); if (currentByteLength > 0 && buffer->GetByteLength() == 0) @@ -340,10 +329,11 @@ WebAssemblyMemory * WebAssemblyMemory::CreateForExistingBuffer(uint32 initial, u #ifdef ENABLE_WASM_THREADS WebAssemblyMemory * WebAssemblyMemory::CreateFromSharedContents(uint32 initial, uint32 maximum, SharedContents* sharedContents, ScriptContext * scriptContext) { - if (!sharedContents || !AreLimitsValid(initial, maximum, sharedContents->bufferLength)) + if (!sharedContents) { - JavascriptError::ThrowRangeError(scriptContext, JSERR_ArgumentOutOfRange); + JavascriptError::ThrowTypeError(scriptContext, JSERR_FunctionArgument_Invalid); } + CheckLimits(scriptContext, initial, maximum, sharedContents->bufferLength); ArrayBufferBase* buffer = scriptContext->GetLibrary()->CreateWebAssemblySharedArrayBuffer(sharedContents); return RecyclerNewFinalized(scriptContext->GetRecycler(), WebAssemblyMemory, buffer, initial, maximum, scriptContext->GetLibrary()->GetWebAssemblyMemoryType()); } @@ -376,7 +366,7 @@ WebAssemblyMemory::GetCurrentMemoryPages() const #ifdef ENABLE_WASM_THREADS bool WebAssemblyMemory::IsSharedMemory() const { - return WebAssemblySharedArrayBuffer::Is(m_buffer); + return VarIs(m_buffer); } #endif diff --git a/lib/Runtime/Library/WebAssemblyMemory.h b/lib/Runtime/Library/WebAssemblyMemory.h index dbb551216b7..63485c72580 100644 --- a/lib/Runtime/Library/WebAssemblyMemory.h +++ b/lib/Runtime/Library/WebAssemblyMemory.h @@ -27,10 +27,6 @@ namespace Js static Var EntryGrow(RecyclableObject* function, CallInfo callInfo, ...); static Var EntryGetterBuffer(RecyclableObject* function, CallInfo callInfo, ...); - static bool Is(Var aValue); - static WebAssemblyMemory * FromVar(Var aValue); - static WebAssemblyMemory * UnsafeFromVar(Var aValue); - static WebAssemblyMemory * CreateMemoryObject(uint32 initial, uint32 maximum, bool isShared, ScriptContext * scriptContext); static WebAssemblyMemory * CreateForExistingBuffer(uint32 initial, uint32 maximum, uint32 currentByteLength, ScriptContext * scriptContext); #ifdef ENABLE_WASM_THREADS @@ -54,8 +50,8 @@ namespace Js #endif private: WebAssemblyMemory(ArrayBufferBase* buffer, uint32 initial, uint32 maximum, DynamicType * type); - static _Must_inspect_result_ bool AreLimitsValid(uint32 initial, uint32 maximum); - static _Must_inspect_result_ bool AreLimitsValid(uint32 initial, uint32 maximum, uint32 bufferLength); + static void CheckLimits(ScriptContext * scriptContext, uint32 initial, uint32 maximum); + static void CheckLimits(ScriptContext * scriptContext, uint32 initial, uint32 maximum, uint32 bufferLength); Field(ArrayBufferBase*) m_buffer; @@ -64,4 +60,8 @@ namespace Js #endif }; + template <> inline bool VarIsImpl(RecyclableObject* obj) + { + return JavascriptOperators::GetTypeId(obj) == TypeIds_WebAssemblyMemory; + } } // namespace Js diff --git a/lib/Runtime/Library/WebAssemblyModule.cpp b/lib/Runtime/Library/WebAssemblyModule.cpp index 328aa0b1b7d..a2a36bfe180 100644 --- a/lib/Runtime/Library/WebAssemblyModule.cpp +++ b/lib/Runtime/Library/WebAssemblyModule.cpp @@ -46,29 +46,6 @@ WebAssemblyModule::WebAssemblyModule(Js::ScriptContext* scriptContext, const byt m_reader = Anew(m_alloc, Wasm::WasmBinaryReader, m_alloc, this, binaryBuffer, binaryBufferLength); } -/* static */ -bool -WebAssemblyModule::Is(Var value) -{ - return JavascriptOperators::GetTypeId(value) == TypeIds_WebAssemblyModule; -} - -/* static */ -WebAssemblyModule * -WebAssemblyModule::FromVar(Var value) -{ - AssertOrFailFast(WebAssemblyModule::Is(value)); - return static_cast(value); -} - -/* static */ -WebAssemblyModule * -WebAssemblyModule::UnsafeFromVar(Var value) -{ - Assert(WebAssemblyModule::Is(value)); - return static_cast(value); -} - /* static */ Var WebAssemblyModule::NewInstance(RecyclableObject* function, CallInfo callInfo, ...) @@ -92,7 +69,7 @@ WebAssemblyModule::NewInstance(RecyclableObject* function, CallInfo callInfo, .. { JavascriptError::ThrowTypeError(scriptContext, WASMERR_NeedBufferSource); } - + WebAssemblySource src(args[1], true, scriptContext); return CreateModule(scriptContext, &src); } @@ -108,11 +85,11 @@ WebAssemblyModule::EntryExports(RecyclableObject* function, CallInfo callInfo, . Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count < 2 || !WebAssemblyModule::Is(args[1])) + if (args.Info.Count < 2 || !VarIs(args[1])) { JavascriptError::ThrowTypeError(scriptContext, WASMERR_NeedModule); } - WebAssemblyModule * module = WebAssemblyModule::FromVar(args[1]); + WebAssemblyModule * module = VarTo(args[1]); Var exportArray = JavascriptOperators::NewJavascriptArrayNoArg(scriptContext); @@ -140,12 +117,12 @@ WebAssemblyModule::EntryImports(RecyclableObject* function, CallInfo callInfo, . Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count < 2 || !WebAssemblyModule::Is(args[1])) + if (args.Info.Count < 2 || !VarIs(args[1])) { JavascriptError::ThrowTypeError(scriptContext, WASMERR_NeedModule); } - WebAssemblyModule * module = WebAssemblyModule::FromVar(args[1]); + WebAssemblyModule * module = VarTo(args[1]); Var importArray = JavascriptOperators::NewJavascriptArrayNoArg(scriptContext); for (uint32 i = 0; i < module->GetImportCount(); ++i) @@ -175,18 +152,18 @@ Var WebAssemblyModule::EntryCustomSections(RecyclableObject* function, CallInfo Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count < 2 || !WebAssemblyModule::Is(args[1])) + if (args.Info.Count < 2 || !VarIs(args[1])) { JavascriptError::ThrowTypeError(scriptContext, WASMERR_NeedModule); } Var sectionNameVar = args.Info.Count > 2 ? args[2] : scriptContext->GetLibrary()->GetUndefined(); - WebAssemblyModule * module = WebAssemblyModule::FromVar(args[1]); + WebAssemblyModule * module = VarTo(args[1]); Var customSections = nullptr; // C++ compiler optimizations can optimize away the sectionName variable while still keeping a reference to the underlying // character buffer sectionNameBuf. The character buffer itself is managed by the recycler; however; we may move past the // start of the character buffer while doing the comparison in memcmp. If a GC happens during CreateArrayBuffer, the character - // buffer can get collected as we don't have a reference to the start of the buffer on the stack anymore. To avoid this we need + // buffer can get collected as we don't have a reference to the start of the buffer on the stack anymore. To avoid this we need // to pin sectionName. ENTER_PINNED_SCOPE(JavascriptString, sectionName); sectionName = JavascriptConversion::ToString(sectionNameVar, scriptContext); @@ -520,11 +497,11 @@ WebAssemblyModule::AttachCustomInOutTracingReader(Wasm::WasmFunctionInfo* func, case Wasm::Local::F32: node.op = Wasm::wbPrintF32; break; case Wasm::Local::F64: node.op = Wasm::wbPrintF64; break; #ifdef ENABLE_WASM_SIMD - // todo:: Add support to print m128 argument values - case Wasm::WasmTypes::M128: continue; + // todo:: Add support to print v128 argument values + case Wasm::WasmTypes::V128: continue; #endif default: - Wasm::WasmTypes::CompileAssertCasesNoFailFast(); + Wasm::WasmTypes::CompileAssertCasesNoFailFast(); throw Wasm::WasmCompilationException(_u("Unknown param type")); } customReader->AddNode(node); @@ -565,11 +542,11 @@ WebAssemblyModule::AttachCustomInOutTracingReader(Wasm::WasmFunctionInfo* func, case Wasm::WasmTypes::F32: node.op = Wasm::wbPrintF32; break; case Wasm::WasmTypes::F64: node.op = Wasm::wbPrintF64; break; #ifdef ENABLE_WASM_SIMD - // todo:: Add support to print m128 return values - case Wasm::WasmTypes::M128: goto SkipReturnPrint; + // todo:: Add support to print v128 return values + case Wasm::WasmTypes::V128: goto SkipReturnPrint; #endif default: - Wasm::WasmTypes::CompileAssertCasesNoFailFast(); + Wasm::WasmTypes::CompileAssertCasesNoFailFast(); throw Wasm::WasmCompilationException(_u("Unknown return type")); } customReader->AddNode(node); diff --git a/lib/Runtime/Library/WebAssemblyModule.h b/lib/Runtime/Library/WebAssemblyModule.h index f196e765590..ff413f581bd 100644 --- a/lib/Runtime/Library/WebAssemblyModule.h +++ b/lib/Runtime/Library/WebAssemblyModule.h @@ -49,10 +49,6 @@ class WebAssemblyModule : public DynamicObject static Var EntryImports(RecyclableObject* function, CallInfo callInfo, ...); static Var EntryCustomSections(RecyclableObject* function, CallInfo callInfo, ...); - static bool Is(Var aValue); - static WebAssemblyModule * FromVar(Var aValue); - static WebAssemblyModule * UnsafeFromVar(Var aValue); - static WebAssemblyModule * CreateModule( ScriptContext* scriptContext, class WebAssemblySource* src); @@ -205,5 +201,10 @@ class WebAssemblyModule : public DynamicObject FieldNoBarrier(ArenaAllocator*) m_alloc; }; +template <> inline bool VarIsImpl(RecyclableObject* obj) +{ + return JavascriptOperators::GetTypeId(obj) == TypeIds_WebAssemblyModule; +} + } // namespace Js #endif diff --git a/lib/Runtime/Library/WebAssemblyTable.cpp b/lib/Runtime/Library/WebAssemblyTable.cpp index 079923f9344..e2edcfd3095 100644 --- a/lib/Runtime/Library/WebAssemblyTable.cpp +++ b/lib/Runtime/Library/WebAssemblyTable.cpp @@ -21,29 +21,6 @@ WebAssemblyTable::WebAssemblyTable( { } -/* static */ -bool -WebAssemblyTable::Is(Var value) -{ - return JavascriptOperators::GetTypeId(value) == TypeIds_WebAssemblyTable; -} - -/* static */ -WebAssemblyTable * -WebAssemblyTable::FromVar(Var value) -{ - AssertOrFailFast(WebAssemblyTable::Is(value)); - return static_cast(value); -} - -/* static */ -WebAssemblyTable * -WebAssemblyTable::UnsafeFromVar(Var value) -{ - Assert(WebAssemblyTable::Is(value)); - return static_cast(value); -} - Var WebAssemblyTable::NewInstance(RecyclableObject* function, CallInfo callInfo, ...) { @@ -66,10 +43,11 @@ WebAssemblyTable::NewInstance(RecyclableObject* function, CallInfo callInfo, ... { JavascriptError::ThrowTypeError(scriptContext, JSERR_NeedObject, _u("tableDescriptor")); } - DynamicObject * tableDescriptor = JavascriptObject::FromVar(args[1]); + DynamicObject * tableDescriptor = VarTo(args[1]); Var elementVar = JavascriptOperators::OP_GetProperty(tableDescriptor, PropertyIds::element, scriptContext); - if (!JavascriptOperators::StrictEqualString(elementVar, scriptContext->GetLibrary()->CreateStringFromCppLiteral(_u("anyfunc")))) + auto elementStr = JavascriptConversion::ToString(elementVar, scriptContext); + if (!JavascriptOperators::StrictEqualString(elementStr, scriptContext->GetLibrary()->CreateStringFromCppLiteral(_u("anyfunc")))) { JavascriptError::ThrowTypeError(scriptContext, WASMERR_ExpectedAnyFunc, _u("tableDescriptor.element")); } @@ -78,9 +56,9 @@ WebAssemblyTable::NewInstance(RecyclableObject* function, CallInfo callInfo, ... uint32 initial = WebAssembly::ToNonWrappingUint32(initVar, scriptContext); uint32 maximum = Wasm::Limits::GetMaxTableSize(); - if (JavascriptOperators::OP_HasProperty(tableDescriptor, PropertyIds::maximum, scriptContext)) + Var maxVar = JavascriptOperators::OP_GetProperty(tableDescriptor, PropertyIds::maximum, scriptContext); + if (!JavascriptOperators::IsUndefined(maxVar)) { - Var maxVar = JavascriptOperators::OP_GetProperty(tableDescriptor, PropertyIds::maximum, scriptContext); maximum = WebAssembly::ToNonWrappingUint32(maxVar, scriptContext); } return Create(initial, maximum, scriptContext); @@ -96,11 +74,11 @@ WebAssemblyTable::EntryGetterLength(RecyclableObject* function, CallInfo callInf Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !WebAssemblyTable::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { JavascriptError::ThrowTypeError(scriptContext, WASMERR_NeedTableObject); } - WebAssemblyTable * table = WebAssemblyTable::FromVar(args[0]); + WebAssemblyTable * table = VarTo(args[0]); return JavascriptNumber::ToVar(table->m_currentLength, scriptContext); } @@ -114,11 +92,11 @@ WebAssemblyTable::EntryGrow(RecyclableObject* function, CallInfo callInfo, ...) Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !WebAssemblyTable::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { JavascriptError::ThrowTypeError(scriptContext, WASMERR_NeedTableObject); } - WebAssemblyTable * table = WebAssemblyTable::FromVar(args[0]); + WebAssemblyTable * table = VarTo(args[0]); uint32 oldLength = table->m_currentLength; Var deltaVar = args.Info.Count >= 2 ? args[1] : scriptContext->GetLibrary()->GetUndefined(); @@ -151,11 +129,11 @@ WebAssemblyTable::EntryGet(RecyclableObject* function, CallInfo callInfo, ...) Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !WebAssemblyTable::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { JavascriptError::ThrowTypeError(scriptContext, WASMERR_NeedTableObject); } - WebAssemblyTable * table = WebAssemblyTable::FromVar(args[0]); + WebAssemblyTable * table = VarTo(args[0]); Var indexVar = scriptContext->GetLibrary()->GetUndefined(); if (args.Info.Count >= 2) @@ -185,11 +163,11 @@ WebAssemblyTable::EntrySet(RecyclableObject* function, CallInfo callInfo, ...) Assert(!(callInfo.Flags & CallFlags_New)); - if (args.Info.Count == 0 || !WebAssemblyTable::Is(args[0])) + if (args.Info.Count == 0 || !VarIs(args[0])) { JavascriptError::ThrowTypeError(scriptContext, WASMERR_NeedTableObject); } - WebAssemblyTable * table = WebAssemblyTable::FromVar(args[0]); + WebAssemblyTable * table = VarTo(args[0]); if (args.Info.Count < 3) { @@ -197,12 +175,12 @@ WebAssemblyTable::EntrySet(RecyclableObject* function, CallInfo callInfo, ...) } Var indexVar = args[1]; Var value = args[2]; - + if (JavascriptOperators::IsNull(value)) { value = nullptr; } - else if (!WasmScriptFunction::Is(args[2])) + else if (!VarIs(args[2])) { JavascriptError::ThrowTypeError(scriptContext, WASMERR_NeedWebAssemblyFunc); } @@ -237,7 +215,7 @@ void WebAssemblyTable::DirectSetValue(uint index, Var val) { Assert(index < m_currentLength); - Assert(!val || WasmScriptFunction::Is(val)); + Assert(!val || VarIs(val)); m_values[index] = val; } @@ -246,7 +224,7 @@ WebAssemblyTable::DirectGetValue(uint index) const { Assert(index < m_currentLength); Var val = m_values[index]; - Assert(!val || WasmScriptFunction::Is(val)); + Assert(!val || VarIs(val)); return val; } diff --git a/lib/Runtime/Library/WebAssemblyTable.h b/lib/Runtime/Library/WebAssemblyTable.h index 6f97e4e46a8..8b68ac7f405 100644 --- a/lib/Runtime/Library/WebAssemblyTable.h +++ b/lib/Runtime/Library/WebAssemblyTable.h @@ -31,10 +31,6 @@ namespace Js static Var EntryGet(RecyclableObject* function, CallInfo callInfo, ...); static Var EntrySet(RecyclableObject* function, CallInfo callInfo, ...); - static bool Is(Var aValue); - static WebAssemblyTable * FromVar(Var aValue); - static WebAssemblyTable * UnsafeFromVar(Var aValue); - static WebAssemblyTable * Create(uint32 initial, uint32 maximum, ScriptContext * scriptContext); uint32 GetCurrentLength() const; @@ -54,4 +50,9 @@ namespace Js Field(Field(Var)*) m_values; #endif }; + + template <> inline bool VarIsImpl(RecyclableObject* obj) + { + return JavascriptOperators::GetTypeId(obj) == TypeIds_WebAssemblyTable; + } } diff --git a/lib/Runtime/Library/arm64/arm64_CallFunction.S b/lib/Runtime/Library/arm64/arm64_CallFunction.S new file mode 100644 index 00000000000..a98154ce725 --- /dev/null +++ b/lib/Runtime/Library/arm64/arm64_CallFunction.S @@ -0,0 +1,56 @@ +;------------------------------------------------------------------------------------------------------- +; Copyright (C) Microsoft. All rights reserved. +; Copyright (c) ChakraCore Project Contributors. All rights reserved. +; Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. +;------------------------------------------------------------------------------------------------------- + +;Var arm64_CallFunction(JavascriptFunction* function, CallInfo info, uint argCount, Var* values, JavascriptMethod entryPoint) +; +; This method should be called as follows +; varResult = arm64_CallFunction((JavascriptFunction*)function, args.Info, argCount, args.Values, entryPoint); +; +; and makes the following call +; return entryPoint(function, info, function, info, values[0], values[1], ..., values[n-2], values[n-1]); +; where n = info.Count +; +; ARM64 on macOS puts upto 6 named parameters into x0-x5 and all other parameters (including ...) on the stack +; For the stack walker to work need function and info on stack as well as in x0 and x1 +; Below logic copies them and all other params to stack +; + +#include "unixasmmacros.inc" + +NESTED_ENTRY arm64_CallFunction, _TEXT, NoHandler + + PROLOG_SAVE_REG_PAIR_INDEXED fp, lr, -16 ; save FP/LR registers, implicitly stores FP in SP + + add x5, x2, #3 ; add 3 to param count + lsr x5, x5, #1 ; divide by 2 + sub sp, sp, x5, lsl #4 ; then allocate the space + mov x6, sp ; use x6 = dest + str x0, [x6], 8 ; store function pointer + str x1, [x6], 8 ; store info pointer + + cmp x2, #0 ; check for 0 params + beq LOCAL_LABEL(CallEntryPoint) + + LOCAL_LABEL(CopyLoop): + subs x2, x2, #1 ; decrement param count by 1 + ldr x7, [x3], #8 ; read param from source + str x7, [x6], #8 ; store param to dest + bne LOCAL_LABEL(CopyLoop) ; loop until all copied + + LOCAL_LABEL(CallEntryPoint): + blr x4 ; call entry point + + mov sp, fp ; explicitly restore sp + EPILOG_RESTORE_REG_PAIR_INDEXED fp, lr, 16 ; restore FP/LR + ret ; return + +NESTED_END arm64_CallFunction + +NESTED_ENTRY BreakSpeculation, _TEXT, NoHandler + cmp x0, x0 + csel x0, x0, x0, eq + ret +NESTED_END BreakSpeculation diff --git a/lib/Runtime/Library/arm64/arm64_DeferredDeserializeThunk.S b/lib/Runtime/Library/arm64/arm64_DeferredDeserializeThunk.S new file mode 100644 index 00000000000..1d03f1682cb --- /dev/null +++ b/lib/Runtime/Library/arm64/arm64_DeferredDeserializeThunk.S @@ -0,0 +1,41 @@ +;------------------------------------------------------------------------------------------------------- +; Copyright (C) Microsoft. All rights reserved. +; Copyright (c) ChakraCore Project Contributors. All rights reserved. +; Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. +;------------------------------------------------------------------------------------------------------- + +;Var Js:JavascriptFunction::DeferredDeserializeThunk(function, info, values[0], values[1], ..., values[n-2], values[n-1]) +; +; This method should be called as follows +; varResult = JavascriptFunction::DeferredDeserializeThunk(function, info, values[0], values[1], ..., values[n-2], values[n-1]); +; +; and does the following: +; entryPoint = JavascriptFunction::DeferredDeserialize(function); +; return entryPoint(function, info, values[0], values[1], ..., values[n-2], values[n-1]); +; where n = info.Count +; +; ARM64 calling convention (on macOS) is: //TODO verify if same on Linux +; x0 parameter 1 = function +; x1 parameter 2 = info +; [sp+0] values[0] +; [sp+8] values[1] +; ... +; +; Save and restore x0 and x1 to ensure they are the same after JavascriptFunction::DeferredDeserialize +; Move the stack pointer on so values on the stack remain untouched - move it back after JavascriptFunction::DeferredDeserialize + +#include "unixasmmacros.inc" + +NESTED_ENTRY _ZN2Js18JavascriptFunction24DeferredDeserializeThunkEPNS_16RecyclableObjectENS_8CallInfoEz, _TEXT, NoHandler + + PROLOG_SAVE_REG_PAIR_INDEXED fp, lr, -32 ; save parameter registers + stp x0, x1, [sp, #16] + + bl C_FUNC(_ZN2Js18JavascriptFunction19DeferredDeserializeEPNS_14ScriptFunctionE) ; retrieve entrypoint + mov x16, x0 ; back up entryPoint in x16 + + ldp x0, x1, [sp, #16] + EPILOG_RESTORE_REG_PAIR_INDEXED fp, lr, 32 + br x16 ; tail call to new entryPoint + +NESTED_END _ZN2Js18JavascriptFunction24DeferredDeserializeThunkEPNS_16RecyclableObjectENS_8CallInfoEz diff --git a/lib/Runtime/Library/arm64/arm64_DeferredParsingThunk.S b/lib/Runtime/Library/arm64/arm64_DeferredParsingThunk.S new file mode 100644 index 00000000000..1b447a16bc5 --- /dev/null +++ b/lib/Runtime/Library/arm64/arm64_DeferredParsingThunk.S @@ -0,0 +1,47 @@ +;------------------------------------------------------------------------------------------------------- +; Copyright (C) Microsoft. All rights reserved. +; Copyright (c) ChakraCore Project Contributors. All rights reserved. +; Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. +;------------------------------------------------------------------------------------------------------- + +;Var Js:JavascriptFunction::DeferredParsingThunk(function, info, values[0], values[1], ..., values[n-2], values[n-1]) +; +; This method should be called as follows +; varResult = JavascriptFunction::DeferredParsingThunk(function, info, values[0], values[1], ..., values[n-2], values[n-1]); +; +; and does the following: +; entryPoint = JavascriptFunction::DeferredParse(&function); +; return entryPoint(function, info, values[0], values[1], ..., values[n-2], values[n-1]); +; where n = info.Count +; +; ARM64 calling convention (on macOS) is: //TODO verify if same on Linux +; x0 parameter 1 = function +; x1 parameter 2 = info +; [sp+0] values[0] +; [sp+8] values[1] +; ... +; +; Save and restore x0 and x1 to ensure they are the same after JavascriptFunction::DeferredParse +; Move the stack pointer on so values on the stack remain untouched - move it back after JavascriptFunction::DeferredParse +; Take the address of function to pass as parameter to JavascriptFunction::DeferredParse +; + +#include "unixasmmacros.inc" + +NESTED_ENTRY _ZN2Js18JavascriptFunction20DeferredParsingThunkEPNS_16RecyclableObjectENS_8CallInfoEz, _TEXT, NoHandler + + PROLOG_SAVE_REG_PAIR_INDEXED fp, lr, -32 ; save parameter registers + stp x0, x1, [sp, #16] + + ; Pass the address of the function at the saved x0 + mov x0, sp + add x0, x0, #16 ; 16 is subtracted from the stack pointer when the a function is called, add it back here. + bl C_FUNC(_ZN2Js18JavascriptFunction13DeferredParseEPPNS_14ScriptFunctionE) ; retrieve entrypoint + mov x16, x0 ; back up entryPoint in x16 + + ldp x0, x1, [sp, #16] + EPILOG_RESTORE_REG_PAIR_INDEXED fp, lr, 32 + br x16 ; tail call to new entryPoint + +NESTED_END _ZN2Js18JavascriptFunction20DeferredParsingThunkEPNS_16RecyclableObjectENS_8CallInfoEz + diff --git a/lib/Runtime/LibraryFunction.h b/lib/Runtime/LibraryFunction.h index 7f256067365..422d0e55048 100644 --- a/lib/Runtime/LibraryFunction.h +++ b/lib/Runtime/LibraryFunction.h @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- /* @@ -19,6 +20,7 @@ LIBRARY_FUNCTION(Math, Asin, 1, BIF_TypeSpecUnaryToFlo LIBRARY_FUNCTION(Math, Atan, 1, BIF_TypeSpecUnaryToFloat , Math::EntryInfo::Atan) LIBRARY_FUNCTION(Math, Atan2, 2, BIF_TypeSpecAllToFloat , Math::EntryInfo::Atan2) LIBRARY_FUNCTION(Math, Ceil, 1, BIF_TypeSpecDstToInt | BIF_TypeSpecSrc1ToFloat , Math::EntryInfo::Ceil) +LIBRARY_FUNCTION(JavascriptString, At, 2, BIF_UseSrc0 , JavascriptString::EntryInfo::At) LIBRARY_FUNCTION(JavascriptString, CodePointAt, 2, BIF_TypeSpecSrc2ToInt | BIF_UseSrc0 , JavascriptString::EntryInfo::CodePointAt) LIBRARY_FUNCTION(JavascriptString, CharAt, 2, BIF_UseSrc0 , JavascriptString::EntryInfo::CharAt ) LIBRARY_FUNCTION(JavascriptString, CharCodeAt, 2, BIF_UseSrc0 , JavascriptString::EntryInfo::CharCodeAt ) @@ -41,7 +43,9 @@ LIBRARY_FUNCTION(JavascriptString, ToLowerCase, 1, BIF_UseSrc0 LIBRARY_FUNCTION(JavascriptString, ToUpperCase, 1, BIF_UseSrc0 | BIF_IgnoreDst , JavascriptString::EntryInfo::ToUpperCase) LIBRARY_FUNCTION(JavascriptString, Trim, 1, BIF_UseSrc0 | BIF_IgnoreDst , JavascriptString::EntryInfo::Trim) LIBRARY_FUNCTION(JavascriptString, TrimLeft, 1, BIF_UseSrc0 | BIF_IgnoreDst , JavascriptString::EntryInfo::TrimLeft) +LIBRARY_FUNCTION(JavascriptString, TrimStart, 1, BIF_UseSrc0 | BIF_IgnoreDst , JavascriptString::EntryInfo::TrimStart) LIBRARY_FUNCTION(JavascriptString, TrimRight, 1, BIF_UseSrc0 | BIF_IgnoreDst , JavascriptString::EntryInfo::TrimRight) +LIBRARY_FUNCTION(JavascriptString, TrimEnd, 1, BIF_UseSrc0 | BIF_IgnoreDst , JavascriptString::EntryInfo::TrimEnd) LIBRARY_FUNCTION(Math, Cos, 1, BIF_TypeSpecUnaryToFloat , Math::EntryInfo::Cos) LIBRARY_FUNCTION(Math, Exp, 1, BIF_TypeSpecUnaryToFloat , Math::EntryInfo::Exp) LIBRARY_FUNCTION(Math, Floor, 1, BIF_TypeSpecDstToInt | BIF_TypeSpecSrc1ToFloat , Math::EntryInfo::Floor) @@ -58,6 +62,7 @@ LIBRARY_FUNCTION(Math, Round, 1, BIF_TypeSpecDstToInt | LIBRARY_FUNCTION(Math, Sin, 1, BIF_TypeSpecUnaryToFloat , Math::EntryInfo::Sin) LIBRARY_FUNCTION(Math, Sqrt, 1, BIF_TypeSpecUnaryToFloat , Math::EntryInfo::Sqrt) LIBRARY_FUNCTION(Math, Tan, 1, BIF_TypeSpecUnaryToFloat , Math::EntryInfo::Tan) +LIBRARY_FUNCTION(JavascriptArray, At, 2, BIF_UseSrc0 , JavascriptArray::EntryInfo::At) LIBRARY_FUNCTION(JavascriptArray, Concat, 15, BIF_UseSrc0 | BIF_VariableArgsNumber , JavascriptArray::EntryInfo::Concat) LIBRARY_FUNCTION(JavascriptArray, IndexOf, 2, BIF_UseSrc0 , JavascriptArray::EntryInfo::IndexOf) LIBRARY_FUNCTION(JavascriptArray, Includes, 2, BIF_UseSrc0 , JavascriptArray::EntryInfo::Includes) @@ -71,6 +76,7 @@ LIBRARY_FUNCTION(JavascriptArray, Splice, 15, BIF_UseSrc0 LIBRARY_FUNCTION(JavascriptArray, Unshift, 15, BIF_UseSrc0 | BIF_VariableArgsNumber | BIF_IgnoreDst , JavascriptArray::EntryInfo::Unshift) LIBRARY_FUNCTION(JavascriptFunction, Apply, 3, BIF_UseSrc0 | BIF_IgnoreDst | BIF_VariableArgsNumber , JavascriptFunction::EntryInfo::Apply) LIBRARY_FUNCTION(JavascriptFunction, Call, 15, BIF_UseSrc0 | BIF_IgnoreDst | BIF_VariableArgsNumber , JavascriptFunction::EntryInfo::Call) +LIBRARY_FUNCTION(EngineInterfaceObject, CallInstanceFunction, 15, BIF_UseSrc0 | BIF_IgnoreDst | BIF_VariableArgsNumber , EngineInterfaceObject::EntryInfo::CallInstanceFunction) LIBRARY_FUNCTION(GlobalObject, ParseInt, 1, BIF_IgnoreDst , GlobalObject::EntryInfo::ParseInt) LIBRARY_FUNCTION(JavascriptRegExp, Exec, 2, BIF_UseSrc0 | BIF_IgnoreDst , JavascriptRegExp::EntryInfo::Exec) LIBRARY_FUNCTION(JavascriptRegExp, SymbolSearch, 2, BIF_UseSrc0 , JavascriptRegExp::EntryInfo::SymbolSearch) @@ -78,5 +84,6 @@ LIBRARY_FUNCTION(Math, Fround, 1, BIF_TypeSpecUnaryToFlo LIBRARY_FUNCTION(JavascriptString, PadStart, 2, BIF_UseSrc0 | BIF_VariableArgsNumber , JavascriptString::EntryInfo::PadStart) LIBRARY_FUNCTION(JavascriptString, PadEnd, 2, BIF_UseSrc0 | BIF_VariableArgsNumber , JavascriptString::EntryInfo::PadEnd) LIBRARY_FUNCTION(JavascriptObject, HasOwnProperty, 2, BIF_UseSrc0 , JavascriptObject::EntryInfo::HasOwnProperty) +LIBRARY_FUNCTION(JavascriptObject, HasOwn, 3, BIF_None , JavascriptObject::EntryInfo::HasOwn) // Note: 1st column is currently used only for debug tracing. diff --git a/lib/Runtime/Math/JavascriptMath.cpp b/lib/Runtime/Math/JavascriptMath.cpp index 45026ad29a1..0d77709f5c2 100644 --- a/lib/Runtime/Math/JavascriptMath.cpp +++ b/lib/Runtime/Math/JavascriptMath.cpp @@ -13,6 +13,11 @@ using namespace Js; return scriptContext->GetLibrary()->GetNegativeZero(); } + if (JavascriptOperators::GetTypeId(aRight) == TypeIds_BigInt) + { + return JavascriptBigInt::Negate(aRight); + } + double value = Negate_Helper(aRight, scriptContext); return JavascriptNumber::ToVarIntCheck(value, scriptContext); JIT_HELPER_END(Op_Negate_Full); @@ -28,6 +33,11 @@ using namespace Js; return scriptContext->GetLibrary()->GetNegativeZero(); } + if (JavascriptOperators::GetTypeId(aRight) == TypeIds_BigInt) + { + return JavascriptBigInt::Negate(aRight); + } + double value = Negate_Helper(aRight, scriptContext); return JavascriptNumber::InPlaceNew(value, scriptContext, result); JIT_HELPER_END(Op_NegateInPlace); @@ -39,6 +49,11 @@ using namespace Js; #if _M_IX86 AssertMsg(!TaggedInt::Is(aRight), "Should be detected"); #endif + if (JavascriptOperators::GetTypeId(aRight) == TypeIds_BigInt) + { + return JavascriptBigInt::Not(aRight); + } + int nValue = JavascriptConversion::ToInt32(aRight, scriptContext); return JavascriptNumber::ToVar(~nValue, scriptContext); JIT_HELPER_END(Op_Not_Full); @@ -50,6 +65,11 @@ using namespace Js; JIT_HELPER_REENTRANT_HEADER(Op_NotInPlace); AssertMsg(!TaggedInt::Is(aRight), "Should be detected"); + if (JavascriptOperators::GetTypeId(aRight) == TypeIds_BigInt) + { + return JavascriptBigInt::Not(aRight); + } + int nValue = JavascriptConversion::ToInt32(aRight, scriptContext); return JavascriptNumber::ToVarInPlace(~nValue, scriptContext, result); JIT_HELPER_END(Op_NotInPlace); @@ -62,6 +82,10 @@ using namespace Js; { return TaggedInt::Increment(aRight, scriptContext); } + if (VarIs(aRight)) + { + return JavascriptBigInt::Increment(aRight); + } double inc = Increment_Helper(aRight, scriptContext); return JavascriptNumber::InPlaceNew(inc, scriptContext, result); @@ -75,6 +99,10 @@ using namespace Js; { return TaggedInt::Increment(aRight, scriptContext); } + if (VarIs(aRight)) + { + return JavascriptBigInt::Increment(aRight); + } double inc = Increment_Helper(aRight, scriptContext); return JavascriptNumber::ToVarIntCheck(inc, scriptContext); @@ -89,6 +117,10 @@ using namespace Js; { return TaggedInt::Decrement(aRight, scriptContext); } + if (VarIs(aRight)) + { + return JavascriptBigInt::Decrement(aRight); + } double dec = Decrement_Helper(aRight,scriptContext); return JavascriptNumber::InPlaceNew(dec, scriptContext, result); @@ -102,6 +134,10 @@ using namespace Js; { return TaggedInt::Decrement(aRight, scriptContext); } + if (VarIs(aRight)) + { + return JavascriptBigInt::Decrement(aRight); + } double dec = Decrement_Helper(aRight,scriptContext); return JavascriptNumber::ToVarIntCheck(dec, scriptContext); @@ -109,6 +145,24 @@ using namespace Js; } JIT_HELPER_TEMPLATE(Op_Decrement_Full, Op_Decrement) + Var JavascriptMath::Increment_Numeric(Var aRight, ScriptContext* scriptContext) + { + if (VarIs(aRight)) + { + return JavascriptBigInt::Increment(aRight); + } + return JavascriptMath::Add(aRight, TaggedInt::ToVarUnchecked(1), scriptContext); + } + + Var JavascriptMath::Decrement_Numeric(Var aRight, ScriptContext* scriptContext) + { + if (VarIs(aRight)) + { + return JavascriptBigInt::Decrement(aRight); + } + return JavascriptMath::Subtract(aRight, TaggedInt::ToVarUnchecked(1), scriptContext); + } + Var JavascriptMath::And_Full(Var aLeft, Var aRight, ScriptContext* scriptContext) { JIT_HELPER_REENTRANT_HEADER(Op_And_Full); @@ -226,7 +280,7 @@ using namespace Js; } else if (typeLeft == TypeIds_String) { - return JavascriptString::Concat(JavascriptString::UnsafeFromVar(aLeft), JavascriptString::UnsafeFromVar(aRight)); + return JavascriptString::Concat(UnsafeVarTo(aLeft), UnsafeVarTo(aRight)); } } else if(typeLeft == TypeIds_Number && typeRight == TypeIds_Integer) @@ -307,8 +361,8 @@ using namespace Js; { if( typeRight == TypeIds_String ) { - JavascriptString* leftString = JavascriptString::UnsafeFromVar(aLeft); - JavascriptString* rightString = JavascriptString::UnsafeFromVar(aRight); + JavascriptString* leftString = UnsafeVarTo(aLeft); + JavascriptString* rightString = UnsafeVarTo(aRight); return JavascriptString::Concat(leftString, rightString); } break; @@ -371,16 +425,21 @@ using namespace Js; Var JavascriptMath::AddLeftDead(Var aLeft, Var aRight, ScriptContext* scriptContext, JavascriptNumber *result) { + // Conservatively assume src1 is not dead until proven otherwise. + bool leftIsDead = false; + JIT_HELPER_REENTRANT_HEADER(Op_AddLeftDead); if (JavascriptOperators::GetTypeId(aLeft) == TypeIds_String) { - JavascriptString* leftString = JavascriptString::UnsafeFromVar(aLeft); + leftIsDead = true; + + JavascriptString* leftString = UnsafeVarTo(aLeft); JavascriptString* rightString; TypeId rightType = JavascriptOperators::GetTypeId(aRight); switch(rightType) { case TypeIds_String: - rightString = JavascriptString::UnsafeFromVar(aRight); + rightString = UnsafeVarTo(aRight); StringCommon: return leftString->ConcatDestructive(rightString); @@ -417,7 +476,7 @@ using namespace Js; { return JavascriptNumber::ToVarMaybeInPlace(JavascriptNumber::GetValue(aLeft) + JavascriptNumber::GetValue(aRight), scriptContext, result); } - return Add_FullHelper_Wrapper(aLeft, aRight, scriptContext, result, true); + return Add_FullHelper_Wrapper(aLeft, aRight, scriptContext, result, leftIsDead); JIT_HELPER_END(Op_AddLeftDead); } @@ -430,15 +489,26 @@ using namespace Js; Var JavascriptMath::Add_FullHelper(Var primLeft, Var primRight, ScriptContext* scriptContext, JavascriptNumber *result, bool leftIsDead) { + TypeId typeLeft = JavascriptOperators::GetTypeId(primLeft); + TypeId typeRight = JavascriptOperators::GetTypeId(primRight); + if (typeLeft == TypeIds_BigInt || typeRight == TypeIds_BigInt) + { + if (typeRight != typeLeft) + { + JavascriptError::ThrowTypeError(scriptContext, VBSERR_TypeMismatch, _u("Add BigInt")); + } + return JavascriptBigInt::Add(primLeft, primRight); + } + // If either side is a string, then the result is also a string - if (JavascriptOperators::GetTypeId(primLeft) == TypeIds_String) + if (typeLeft == TypeIds_String) { - JavascriptString* stringLeft = JavascriptString::UnsafeFromVar(primLeft); + JavascriptString* stringLeft = UnsafeVarTo(primLeft); JavascriptString* stringRight = nullptr; - if (JavascriptOperators::GetTypeId(primRight) == TypeIds_String) + if (typeRight == TypeIds_String) { - stringRight = JavascriptString::UnsafeFromVar(primRight); + stringRight = UnsafeVarTo(primRight); } else { @@ -452,10 +522,10 @@ using namespace Js; return JavascriptString::Concat(stringLeft, stringRight); } - if (JavascriptOperators::GetTypeId(primRight) == TypeIds_String) + if (typeRight == TypeIds_String) { JavascriptString* stringLeft = JavascriptConversion::ToString(primLeft, scriptContext); - JavascriptString* stringRight = JavascriptString::UnsafeFromVar(primRight); + JavascriptString* stringRight = UnsafeVarTo(primRight); if(leftIsDead) { @@ -791,7 +861,23 @@ using namespace Js; Var JavascriptMath::Subtract_Full(Var aLeft, Var aRight, ScriptContext* scriptContext) { JIT_HELPER_REENTRANT_HEADER(Op_Subtract_Full); - double difference = Subtract_Helper(aLeft, aRight, scriptContext); + + Var aLeftToPrim = JavascriptConversion::ToPrimitive(aLeft, scriptContext); + Var aRightToPrim = JavascriptConversion::ToPrimitive(aRight, scriptContext); + + Js::TypeId typeLeft = JavascriptOperators::GetTypeId(aLeftToPrim); + Js::TypeId typeRight = JavascriptOperators::GetTypeId(aRightToPrim); + + if (typeLeft == TypeIds_BigInt || typeRight == TypeIds_BigInt) + { + if (typeRight != typeLeft) + { + JavascriptError::ThrowTypeError(scriptContext, VBSERR_TypeMismatch, _u("Subtract BigInt")); + } + return JavascriptBigInt::Sub(aLeftToPrim, aRightToPrim); + } + + double difference = Subtract_Helper(aLeftToPrim, aRightToPrim, scriptContext); return JavascriptNumber::ToVarIntCheck(difference, scriptContext); JIT_HELPER_END(Op_Subtract_Full); } @@ -800,7 +886,23 @@ using namespace Js; Var JavascriptMath::Subtract_InPlace(Var aLeft, Var aRight, ScriptContext* scriptContext, JavascriptNumber* result) { JIT_HELPER_REENTRANT_HEADER(Op_SubtractInPlace); - double difference = Subtract_Helper(aLeft, aRight, scriptContext); + + Var aLeftToPrim = JavascriptConversion::ToPrimitive(aLeft, scriptContext); + Var aRightToPrim = JavascriptConversion::ToPrimitive(aRight, scriptContext); + + Js::TypeId typeLeft = JavascriptOperators::GetTypeId(aLeftToPrim); + Js::TypeId typeRight = JavascriptOperators::GetTypeId(aRightToPrim); + + if (typeLeft == TypeIds_BigInt || typeRight == TypeIds_BigInt) + { + if (typeRight != typeLeft) + { + JavascriptError::ThrowTypeError(scriptContext, VBSERR_TypeMismatch, _u("Subtract BigInt")); + } + return JavascriptBigInt::Sub(aLeftToPrim, aRightToPrim); + } + + double difference = Subtract_Helper(aLeftToPrim, aRightToPrim, scriptContext); return JavascriptNumber::InPlaceNew(difference, scriptContext, result); JIT_HELPER_END(Op_SubtractInPlace); } @@ -848,6 +950,17 @@ using namespace Js; Assert(aRight != nullptr); Assert(scriptContext != nullptr); + Js::TypeId typeLeft = JavascriptOperators::GetTypeId(aLeft); + Js::TypeId typeRight = JavascriptOperators::GetTypeId(aRight); + if (typeLeft == TypeIds_BigInt || typeRight == TypeIds_BigInt) + { + if (typeRight != typeLeft) + { + JavascriptError::ThrowTypeError(scriptContext, VBSERR_TypeMismatch, _u("Multiply BigInt")); + } + return JavascriptBigInt::Mul(aLeft, aRight); + } + if(JavascriptNumber::Is(aLeft)) { if(JavascriptNumber::Is(aRight)) @@ -882,6 +995,18 @@ using namespace Js; Var JavascriptMath::Multiply_InPlace(Var aLeft, Var aRight, ScriptContext* scriptContext, JavascriptNumber* result) { JIT_HELPER_REENTRANT_HEADER(Op_MultiplyInPlace); + + Js::TypeId typeLeft = JavascriptOperators::GetTypeId(aLeft); + Js::TypeId typeRight = JavascriptOperators::GetTypeId(aRight); + if (typeLeft == TypeIds_BigInt || typeRight == TypeIds_BigInt) + { + if (typeRight != typeLeft) + { + JavascriptError::ThrowTypeError(scriptContext, VBSERR_TypeMismatch, _u("Multiply BigInt")); + } + return JavascriptBigInt::Mul(aLeft, aRight); + } + if(JavascriptNumber::Is(aLeft)) { if(JavascriptNumber::Is(aRight)) @@ -907,7 +1032,6 @@ using namespace Js; { return TaggedInt::MultiplyInPlace(aLeft, aRight, scriptContext, result); } - double product = Multiply_Helper(aLeft, aRight, scriptContext); return JavascriptNumber::InPlaceNew(product, scriptContext, result); JIT_HELPER_END(Op_MultiplyInPlace); @@ -993,7 +1117,7 @@ using namespace Js; TypeId typeId = JavascriptOperators::GetTypeId(arrayArg); if (!JavascriptNativeArray::Is(typeId) && !(TypedArrayBase::Is(typeId) && typeId != TypeIds_CharArray && typeId != TypeIds_BoolArray)) { - if (JavascriptArray::IsVarArray(typeId) && JavascriptArray::UnsafeFromVar(arrayArg)->GetLength() == 0) + if (JavascriptArray::IsVarArray(typeId) && UnsafeVarTo(arrayArg)->GetLength() == 0) { return scriptContext->GetLibrary()->GetNegativeInfinite(); } @@ -1010,7 +1134,7 @@ using namespace Js; #if ENABLE_COPYONACCESS_ARRAY JavascriptLibrary::CheckAndConvertCopyOnAccessNativeIntArray(arrayArg); #endif - JavascriptNativeArray * argsArray = JavascriptNativeArray::UnsafeFromVar(arrayArg); + JavascriptNativeArray * argsArray = UnsafeVarTo(arrayArg); uint len = argsArray->GetLength(); if (len == 0) { @@ -1031,7 +1155,7 @@ using namespace Js; } else { - TypedArrayBase * argsArray = TypedArrayBase::UnsafeFromVar(arrayArg); + TypedArrayBase * argsArray = UnsafeVarTo(arrayArg); uint len = argsArray->GetLength(); if (len == 0) { @@ -1066,7 +1190,7 @@ using namespace Js; TypeId typeId = JavascriptOperators::GetTypeId(arrayArg); if (!JavascriptNativeArray::Is(typeId) && !(TypedArrayBase::Is(typeId) && typeId != TypeIds_CharArray && typeId != TypeIds_BoolArray)) { - if (JavascriptArray::Is(typeId) && JavascriptArray::UnsafeFromVar(arrayArg)->GetLength() == 0) + if (JavascriptArray::IsNonES5Array(typeId) && UnsafeVarTo(arrayArg)->GetLength() == 0) { return scriptContext->GetLibrary()->GetPositiveInfinite(); } @@ -1083,7 +1207,7 @@ using namespace Js; #if ENABLE_COPYONACCESS_ARRAY JavascriptLibrary::CheckAndConvertCopyOnAccessNativeIntArray(arrayArg); #endif - JavascriptNativeArray * argsArray = JavascriptNativeArray::UnsafeFromVar(arrayArg); + JavascriptNativeArray * argsArray = UnsafeVarTo(arrayArg); uint len = argsArray->GetLength(); if (len == 0) { @@ -1104,7 +1228,7 @@ using namespace Js; } else { - TypedArrayBase * argsArray = TypedArrayBase::UnsafeFromVar(arrayArg); + TypedArrayBase * argsArray = UnsafeVarTo(arrayArg); uint len = argsArray->GetLength(); if (len == 0) { diff --git a/lib/Runtime/Math/JavascriptMath.h b/lib/Runtime/Math/JavascriptMath.h index 74727035d37..5aa5deb3c4e 100644 --- a/lib/Runtime/Math/JavascriptMath.h +++ b/lib/Runtime/Math/JavascriptMath.h @@ -26,6 +26,9 @@ namespace Js static Var Decrement_Full(Var aRight,ScriptContext* scriptContext); static Var Decrement_InPlace(Var aRight,ScriptContext* scriptContext, JavascriptNumber* result); + static Var Increment_Numeric(Var aRight, ScriptContext* scriptContext); + static Var Decrement_Numeric(Var aRight, ScriptContext* scriptContext); + static Var Negate(Var aRight,ScriptContext* scriptContext); static Var Negate_Full(Var aRight,ScriptContext* scriptContext); static Var Negate_InPlace(Var aRight,ScriptContext* scriptContext, JavascriptNumber* result); diff --git a/lib/Runtime/Math/JavascriptMath.inl b/lib/Runtime/Math/JavascriptMath.inl index 1a53d4d8074..4fdce77d457 100644 --- a/lib/Runtime/Math/JavascriptMath.inl +++ b/lib/Runtime/Math/JavascriptMath.inl @@ -169,8 +169,8 @@ namespace Js inline double JavascriptMath::Add_Helper(Var aLeft, Var aRight, ScriptContext* scriptContext) { - AssertMsg( !JavascriptString::Is(aLeft), "Strings should have been handled already" ); - AssertMsg( !JavascriptString::Is(aRight), "Strings should have been handled already" ); + AssertMsg( !VarIs(aLeft), "Strings should have been handled already" ); + AssertMsg( !VarIs(aRight), "Strings should have been handled already" ); double dblLeft = JavascriptConversion::ToNumber(aLeft, scriptContext); double dblRight = JavascriptConversion::ToNumber(aRight, scriptContext); diff --git a/lib/Runtime/Math/WasmMath.inl b/lib/Runtime/Math/WasmMath.inl index 483c7b51ec5..09c1f2906c2 100644 --- a/lib/Runtime/Math/WasmMath.inl +++ b/lib/Runtime/Math/WasmMath.inl @@ -155,6 +155,8 @@ DstType WasmMath::ConvertFloatToInt(SrcType srcVal, _In_ Js::ScriptContext * scr return 0; } + // TODO NumberUtilities::ToSpecial + ReinterpretType val = *reinterpret_cast (&srcVal); if (MaxCmp(val, Max) || (val >= NegZero && NegOneCmp(val, NegOne))) { diff --git a/lib/Runtime/PlatformAgnostic/ChakraICU.h b/lib/Runtime/PlatformAgnostic/ChakraICU.h index 2ada18760a9..eb30c76a7ff 100644 --- a/lib/Runtime/PlatformAgnostic/ChakraICU.h +++ b/lib/Runtime/PlatformAgnostic/ChakraICU.h @@ -15,7 +15,24 @@ #define NTDDI_VERSION NTDDI_WIN10_RS5 #include #pragma pop_macro("NTDDI_VERSION") -#else +#else // ifdef WINDOWS10_ICU +// Normalize ICU_VERSION for non-Kit ICU +#ifndef ICU_VERSION +#include "unicode/uvernum.h" +#define ICU_VERSION U_ICU_VERSION_MAJOR_NUM +#endif + +// Make non-Windows Kit ICU look and act like Windows Kit ICU for better compat +#define U_SHOW_CPLUSPLUS_API 0 +// ICU 55 (Ubuntu 16.04 system default) has uloc_toUnicodeLocale* marked as draft, which is required for Intl +#if ICU_VERSION > 56 +#define U_DEFAULT_SHOW_DRAFT 0 +#define U_HIDE_DRAFT_API 1 +#endif +#define U_HIDE_DEPRECATED_API 1 +#define U_HIDE_OBSOLETE_API 1 +#define U_HIDE_INTERNAL_API 1 + #include "unicode/ucal.h" #include "unicode/uclean.h" #include "unicode/ucol.h" @@ -27,7 +44,7 @@ #include "unicode/ustring.h" #include "unicode/unorm2.h" #include "unicode/upluralrules.h" -#endif +#endif // ifdef WINDOWS10_ICU // Different assertion code is used in ChakraFull that enforces that messages are char literals #ifdef _CHAKRACOREBUILD @@ -87,4 +104,4 @@ namespace PlatformAgnostic } } } -#endif +#endif // ifdef HAS_ICU diff --git a/lib/Runtime/PlatformAgnostic/Platform/CMakeLists.txt b/lib/Runtime/PlatformAgnostic/Platform/CMakeLists.txt index 4560cf56696..400d775c0b4 100644 --- a/lib/Runtime/PlatformAgnostic/Platform/CMakeLists.txt +++ b/lib/Runtime/PlatformAgnostic/Platform/CMakeLists.txt @@ -36,16 +36,6 @@ elseif(CC_TARGET_OS_OSX) ) endif() -if(NOT STATIC_LIBRARY) - # CH has a direct dependency to this project - add_library (Chakra.Runtime.PlatformAgnostic.Singular STATIC - ${PL_SOURCE_FILES} - ) - target_include_directories ( - Chakra.Runtime.PlatformAgnostic.Singular PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} - ) -endif() - add_library (Chakra.Runtime.PlatformAgnostic OBJECT ${PL_SOURCE_FILES} ) @@ -53,3 +43,10 @@ add_library (Chakra.Runtime.PlatformAgnostic OBJECT target_include_directories ( Chakra.Runtime.PlatformAgnostic PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} ) + +if(NOT STATIC_LIBRARY) + # CH has a direct dependency to this project + add_library (Chakra.Runtime.PlatformAgnostic.Singular STATIC + $ + ) +endif() diff --git a/lib/Runtime/PlatformAgnostic/Platform/Linux/PerfTrace.cpp b/lib/Runtime/PlatformAgnostic/Platform/Linux/PerfTrace.cpp index 0ea93df8a0e..b04ba8368b6 100644 --- a/lib/Runtime/PlatformAgnostic/Platform/Linux/PerfTrace.cpp +++ b/lib/Runtime/PlatformAgnostic/Platform/Linux/PerfTrace.cpp @@ -83,13 +83,19 @@ void PerfTrace::WritePerfMap() scriptContext->MapFunction([=] (FunctionBody* body) { + char16 const * url = body->GetSourceContextInfo()->url; + if (body->GetSourceContextInfo()->IsDynamic()) { + url = _u("dynamic"); + } + #if DYNAMIC_INTERPRETER_THUNK if(body->HasInterpreterThunkGenerated()) { const char16* functionName = body->GetExternalDisplayName(); - fwprintf(perfMapFile, _u("%llX %llX %s(Interpreted)\n"), + fwprintf(perfMapFile, _u("%llX %llX %s!%s[Interpreted]\n"), body->GetDynamicInterpreterEntryPoint(), body->GetDynamicInterpreterThunkSize(), + url, functionName); } #endif @@ -102,16 +108,18 @@ void PerfTrace::WritePerfMap() const ExecutionMode jitMode = entryPoint->GetJitMode(); if (jitMode == ExecutionMode::SimpleJit) { - fwprintf(perfMapFile, _u("%llX %llX %s(SimpleJIT)\n"), + fwprintf(perfMapFile, _u("%llX %llX %s!%s[SimpleJIT]\n"), entryPoint->GetNativeAddress(), entryPoint->GetCodeSize(), + url, body->GetExternalDisplayName()); } else { - fwprintf(perfMapFile, _u("%llX %llX %s(FullJIT)\n"), + fwprintf(perfMapFile, _u("%llX %llX %s!%s[FullJIT]\n"), entryPoint->GetNativeAddress(), entryPoint->GetCodeSize(), + url, body->GetExternalDisplayName()); } } @@ -124,9 +132,10 @@ void PerfTrace::WritePerfMap() if(entryPoint->IsCodeGenDone()) { const uint16 loopNumber = ((uint16)body->GetLoopNumberWithLock(header)); - fwprintf(perfMapFile, _u("%llX %llX %s(Loop%u)\n"), + fwprintf(perfMapFile, _u("%llX %llX %s!%s[Loop%u]\n"), entryPoint->GetNativeAddress(), entryPoint->GetCodeSize(), + url, body->GetExternalDisplayName(), loopNumber+1); } @@ -149,4 +158,4 @@ void PerfTrace::WritePerfMap() } -#endif // PERFMAP_TRACE_ENABLED \ No newline at end of file +#endif // PERFMAP_TRACE_ENABLED diff --git a/lib/Runtime/PlatformAgnostic/Platform/POSIX/ArraysUtility.cpp b/lib/Runtime/PlatformAgnostic/Platform/POSIX/ArraysUtility.cpp index 03ac01d482e..d4fda4b1d60 100644 --- a/lib/Runtime/PlatformAgnostic/Platform/POSIX/ArraysUtility.cpp +++ b/lib/Runtime/PlatformAgnostic/Platform/POSIX/ArraysUtility.cpp @@ -51,11 +51,8 @@ namespace Arrays bool GetLocaleSeparator(char16* szSeparator, uint32* sepOutSize, uint32 sepBufSize) { ArrayLocalization arrayLocalization; - //Append ' ' after separator szSeparator[*sepOutSize] = arrayLocalization.GetLocaleSeparator(); - szSeparator[++(*sepOutSize)] = ' '; szSeparator[++(*sepOutSize)] = '\0'; - return true; } diff --git a/lib/Runtime/PlatformAgnostic/Platform/Unix/AssemblyCommon.cpp b/lib/Runtime/PlatformAgnostic/Platform/Unix/AssemblyCommon.cpp index 52691b6b16d..96d2f653e85 100644 --- a/lib/Runtime/PlatformAgnostic/Platform/Unix/AssemblyCommon.cpp +++ b/lib/Runtime/PlatformAgnostic/Platform/Unix/AssemblyCommon.cpp @@ -1,12 +1,13 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #include "Common.h" #include "PlatformAgnostic/AssemblyCommon.h" -#ifndef DISABLE_JIT +#if !defined(DISABLE_JIT) && defined(_AMD64_) extern void mac_fde_wrapper(const char *dataStart, mac_fde_reg_op reg_op) { const char *head = dataStart; diff --git a/lib/Runtime/PlatformAgnostic/Platform/Windows/ArraysUtility.cpp b/lib/Runtime/PlatformAgnostic/Platform/Windows/ArraysUtility.cpp index aab076df956..8ab8452ca0d 100644 --- a/lib/Runtime/PlatformAgnostic/Platform/Windows/ArraysUtility.cpp +++ b/lib/Runtime/PlatformAgnostic/Platform/Windows/ArraysUtility.cpp @@ -11,7 +11,7 @@ namespace PlatformAgnostic { namespace Arrays { - // Potential candidate for optimization + // Potential candidate for optimization bool GetLocaleSeparator(char16* szSeparator, uint32* sepOutSize, uint32 sepBufSize) { char16 localeName[LOCALE_NAME_MAX_LENGTH] = { 0 }; @@ -25,7 +25,7 @@ namespace Arrays } *sepOutSize = GetLocaleInfoEx(localeName, LOCALE_SLIST, szSeparator, sepBufSize); - + if (*sepOutSize == 0) { AssertMsg(FALSE, "GetLocaleInfo failed"); @@ -33,12 +33,8 @@ namespace Arrays } else { - // Append ' ' if necessary - if (*sepOutSize < 2 || szSeparator[*sepOutSize - 2] != ' ') - { - szSeparator[*sepOutSize - 1] = ' '; - szSeparator[*sepOutSize] = '\0'; - } + // We need just the number of regular characters, but Win32 API counts terminating null character as well + --(*sepOutSize); } return true; diff --git a/lib/Runtime/PlatformAgnostic/Platform/Windows/HiResTimer.cpp b/lib/Runtime/PlatformAgnostic/Platform/Windows/HiResTimer.cpp index 0bc9999d5d0..c8610e8b519 100644 --- a/lib/Runtime/PlatformAgnostic/Platform/Windows/HiResTimer.cpp +++ b/lib/Runtime/PlatformAgnostic/Platform/Windows/HiResTimer.cpp @@ -12,7 +12,7 @@ namespace PlatformAgnostic { namespace DateTime { - // Quantization code adapated from the version in Edge + // Quantization code adapted from the version in Edge template class JitterManager { diff --git a/lib/Runtime/PlatformAgnostic/Platform/Windows/PerfTrace.cpp b/lib/Runtime/PlatformAgnostic/Platform/Windows/PerfTrace.cpp index 70c9b943b68..b291db35082 100644 --- a/lib/Runtime/PlatformAgnostic/Platform/Windows/PerfTrace.cpp +++ b/lib/Runtime/PlatformAgnostic/Platform/Windows/PerfTrace.cpp @@ -27,4 +27,4 @@ void PerfTrace::WritePerfMap() } -#endif // PERFMAP_TRACE_ENABLED \ No newline at end of file +#endif // PERFMAP_TRACE_ENABLED diff --git a/lib/Runtime/Runtime.h b/lib/Runtime/Runtime.h index e5fe2a0e6bb..d60ce8ba50a 100644 --- a/lib/Runtime/Runtime.h +++ b/lib/Runtime/Runtime.h @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #pragma once @@ -88,7 +89,6 @@ namespace Js class ForInObjectEnumerator; class JavascriptConversion; class JavascriptDate; - class JavascriptVariantDate; class DateImplementation; class BufferString; class BufferStringBuilder; @@ -98,11 +98,15 @@ namespace Js class JavascriptBooleanObject; class JavascriptSymbol; class JavascriptSymbolObject; +#ifdef _CHAKRACOREBUILD + class CustomExternalWrapperObject; +#endif class JavascriptProxy; class JavascriptReflect; class JavascriptEnumeratorIterator; class JavascriptArrayIterator; enum class JavascriptArrayIteratorKind; + class JavascriptAsyncFromSyncIterator; class JavascriptMapIterator; enum class JavascriptMapIteratorKind; class JavascriptSetIterator; @@ -112,8 +116,6 @@ namespace Js class JavascriptPromise; class JavascriptPromiseCapability; class JavascriptPromiseReaction; - class JavascriptPromiseAsyncSpawnExecutorFunction; - class JavascriptPromiseAsyncSpawnStepArgumentExecutorFunction; class JavascriptPromiseCapabilitiesExecutorFunction; class JavascriptPromiseResolveOrRejectFunction; class JavascriptPromiseReactionTaskFunction; @@ -121,11 +123,16 @@ namespace Js class JavascriptPromiseThunkFinallyFunction; class JavascriptPromiseResolveThenableTaskFunction; class JavascriptPromiseAllResolveElementFunction; + class JavascriptPromiseAllSettledResolveOrRejectElementFunction; + class JavascriptPromiseAnyRejectElementFunction; struct JavascriptPromiseAllResolveElementFunctionRemainingElementsWrapper; struct JavascriptPromiseResolveOrRejectFunctionAlreadyResolvedWrapper; + class JavascriptAsyncSpawnExecutorFunction; + class JavascriptAsyncSpawnStepFunction; class JavascriptGenerator; class LiteralString; class JavascriptStringObject; + class JavascriptBigIntObject; struct PropertyDescriptor; class Type; class DynamicType; @@ -141,6 +148,7 @@ namespace Js class UnscopablesWrapperObject; class SpreadArgument; class JavascriptString; + class JavascriptBigInt; class StringCopyInfo; class StringCopyInfoStack; class ObjectPrototypeObject; @@ -156,6 +164,7 @@ namespace Js struct RestrictedErrorStrings; class JavascriptError; + class JavascriptAggregateError; class RecyclableObject; class JavascriptRegExp; class JavascriptRegularExpressionResult; @@ -174,6 +183,7 @@ namespace Js class StackScriptFunction; class GeneratorVirtualScriptFunction; class JavascriptGeneratorFunction; + class JavascriptAsyncGeneratorFunction; class JavascriptAsyncFunction; class AsmJsScriptFunction; class WasmScriptFunction; @@ -424,6 +434,7 @@ enum tagDEBUG_EVENT_INFO_TYPE #include "Library/JavascriptNumber.h" #include "Library/JavascriptFunction.h" +#include "Library/BoundFunction.h" #include "Library/RuntimeFunction.h" #include "Library/JavascriptExternalFunction.h" #include "Library/CustomExternalIterator.h" @@ -512,6 +523,7 @@ enum tagDEBUG_EVENT_INFO_TYPE #include "Library/SharedArrayBuffer.h" #include "Library/TypedArray.h" #include "Library/JavascriptBoolean.h" +#include "Library/JavascriptBigInt.h" #include "Library/WebAssemblyEnvironment.h" #include "Library/WebAssemblyTable.h" #include "Library/WebAssemblyMemory.h" @@ -525,6 +537,10 @@ enum tagDEBUG_EVENT_INFO_TYPE #include "Library/ScriptFunction.h" #include "Library/StackScriptFunction.h" +#ifdef _CHAKRACOREBUILD +#include "Library/CustomExternalWrapperObject.h" +#endif + #include "Library/JavascriptProxy.h" #if ENABLE_TTD @@ -543,6 +559,10 @@ enum tagDEBUG_EVENT_INFO_TYPE #include "Debug/TTEventLog.h" #endif +#include "Library/JavascriptGeneratorFunction.h" +#include "Library/JavascriptAsyncFunction.h" +#include "Library/JavascriptAsyncGeneratorFunction.h" + #include "../WasmReader/WasmReader.h" #include "Language/AsmJsTypes.h" @@ -560,7 +580,6 @@ enum tagDEBUG_EVENT_INFO_TYPE #include "Language/JavascriptConversion.inl" #include "Types/RecyclableObject.inl" #include "Types/DynamicObject.inl" -#include "Library/JavascriptBoolean.inl" #include "Library/JavascriptArray.inl" #include "Library/SparseArraySegment.inl" #include "Library/JavascriptNumber.inl" @@ -569,7 +588,6 @@ enum tagDEBUG_EVENT_INFO_TYPE #include "Language/InlineCachePointerArray.inl" #include "Language/JavascriptOperators.inl" #include "Language/TaggedInt.inl" -#include "Library/JavascriptGeneratorFunction.h" #ifndef USED_IN_STATIC_LIB #ifdef ENABLE_INTL_OBJECT diff --git a/lib/Runtime/SerializableFunctionFields.h b/lib/Runtime/SerializableFunctionFields.h index 5bba3eef5d8..64458a06d46 100644 --- a/lib/Runtime/SerializableFunctionFields.h +++ b/lib/Runtime/SerializableFunctionFields.h @@ -37,6 +37,7 @@ #if DEFINE_PARSEABLE_FUNCTION_INFO_FIELDS PROTECTED_FIELDS + DECLARE_SERIALIZABLE_FIELD(FunctionBodyFlags, flags, FunctionBodyFlags); DECLARE_SERIALIZABLE_FIELD(uint32, m_grfscr, ULong); // For values, see fscr* values in scrutil.h. DECLARE_SERIALIZABLE_FIELD(ArgSlot, m_inParamCount, ArgSlot); // Count of 'in' parameters to method DECLARE_SERIALIZABLE_FIELD(ArgSlot, m_reportedInParamCount, ArgSlot); // Count of 'in' parameters to method excluding default and rest @@ -44,7 +45,6 @@ PROTECTED_FIELDS DECLARE_SERIALIZABLE_FIELD(charcount_t, m_cchLength, CharCount); // length of the function in code points (not bytes) DECLARE_SERIALIZABLE_FIELD(uint, m_cbLength, UInt32); // length of the function in bytes DECLARE_SERIALIZABLE_FIELD(uint, m_displayShortNameOffset, UInt32); // Offset into the display name where the short name is found - DECLARE_SERIALIZABLE_FIELD(FunctionBodyFlags, flags, FunctionBodyFlags); PUBLIC_FIELDS DECLARE_SERIALIZABLE_FIELD(UINT, scopeSlotArraySize, UInt32); @@ -93,6 +93,7 @@ PRIVATE_FIELDS DECLARE_SERIALIZABLE_ACCESSOR_FIELD(uint, ObjLiteralCount, UInt32, 0); DECLARE_SERIALIZABLE_ACCESSOR_FIELD(uint, LiteralRegexCount, UInt32, 0); DECLARE_SERIALIZABLE_ACCESSOR_FIELD(uint, InnerScopeCount, UInt32, 0); + DECLARE_SERIALIZABLE_ACCESSOR_FIELD(ProfileId, ProfiledCallApplyCallSiteCount, UInt16, 0); DECLARE_SERIALIZABLE_ACCESSOR_FIELD(ProfileId, ProfiledForInLoopCount, UInt16, 0); DECLARE_SERIALIZABLE_ACCESSOR_FIELD(RegSlot, LocalClosureRegister, RegSlot, Constants::NoRegister); DECLARE_SERIALIZABLE_ACCESSOR_FIELD(RegSlot, ParamClosureRegister, RegSlot, Constants::NoRegister); @@ -115,4 +116,4 @@ CURRENT_ACCESS_MODIFIER #undef PROTECTED_FIELDS #undef PRIVATE_FIELDS #undef PUBLIC_FIELDS -#undef DECLARE_TAG_FIELD \ No newline at end of file +#undef DECLARE_TAG_FIELD diff --git a/lib/Runtime/Types/ActivationObject.cpp b/lib/Runtime/Types/ActivationObject.cpp index 1a1e9a6e937..557880ed825 100644 --- a/lib/Runtime/Types/ActivationObject.cpp +++ b/lib/Runtime/Types/ActivationObject.cpp @@ -8,13 +8,18 @@ namespace Js { - bool ActivationObject::Is(void* instance) + template <> bool VarIsImpl(RecyclableObject* instance) { - return VirtualTableInfo::HasVirtualTable(instance) || - VirtualTableInfo::HasVirtualTable(instance) || - VirtualTableInfo::HasVirtualTable(instance) || - VirtualTableInfo::HasVirtualTable(instance) || - VirtualTableInfo::HasVirtualTable(instance); + return VirtualTableInfo::HasVirtualTable(instance) || + VirtualTableInfo>::HasVirtualTable(instance) || + VirtualTableInfo::HasVirtualTable(instance) || + VirtualTableInfo>::HasVirtualTable(instance) || + VirtualTableInfo::HasVirtualTable(instance) || + VirtualTableInfo>::HasVirtualTable(instance) || + VirtualTableInfo::HasVirtualTable(instance) || + VirtualTableInfo>::HasVirtualTable(instance) || + VirtualTableInfo::HasVirtualTable(instance) || + VirtualTableInfo>::HasVirtualTable(instance); } BOOL ActivationObject::HasOwnPropertyCheckNoRedecl(PropertyId propertyId) @@ -170,6 +175,12 @@ namespace Js } #endif + template <> bool VarIsImpl(RecyclableObject* instance) + { + return VirtualTableInfo::HasVirtualTable(instance) || + VirtualTableInfo>::HasVirtualTable(instance); + } + BOOL PseudoActivationObject::InitPropertyScoped(PropertyId propertyId, Var value) { // eval, etc., should not create function properties on something like a "catch" scope @@ -204,6 +215,12 @@ namespace Js } #endif + template <> bool VarIsImpl(RecyclableObject* instance) + { + return VirtualTableInfo::HasVirtualTable(instance) || + VirtualTableInfo>::HasVirtualTable(instance); + } + #if ENABLE_TTD TTD::NSSnapObjects::SnapObjectType ConsoleScopeActivationObject::GetSnapTag_TTD() const { @@ -217,6 +234,12 @@ namespace Js #endif + template <> bool VarIsImpl(RecyclableObject* instance) + { + return VirtualTableInfo::HasVirtualTable(instance) + || VirtualTableInfo>::HasVirtualTable(instance); + } + /* static */ const PropertyId * ActivationObjectEx::GetCachedScopeInfo(const PropertyIdArray *propIds) { @@ -309,4 +332,10 @@ namespace Js TTDAssert(false, "Not implemented yet!!!"); } #endif + + template <> bool VarIsImpl(RecyclableObject* instance) + { + return VirtualTableInfo::HasVirtualTable(instance) || + VirtualTableInfo>::HasVirtualTable(instance); + } }; diff --git a/lib/Runtime/Types/ActivationObject.h b/lib/Runtime/Types/ActivationObject.h index e0548ea0bd1..7b1a549fdf5 100644 --- a/lib/Runtime/Types/ActivationObject.h +++ b/lib/Runtime/Types/ActivationObject.h @@ -33,7 +33,6 @@ namespace Js virtual BOOL DeleteItem(uint32 index, PropertyOperationFlags flags) override; virtual BOOL GetDiagValueString(StringBuilder* stringBuilder, ScriptContext* requestContext) override; virtual BOOL GetDiagTypeString(StringBuilder* stringBuilder, ScriptContext* requestContext) override; - static bool Is(void* instance); #if ENABLE_TTD public: @@ -42,6 +41,8 @@ namespace Js #endif }; + template <> bool VarIsImpl(RecyclableObject* instance); + // A block-ActivationObject is a scope for an ES6 block that should only receive block-scoped inits, // including function, let, and const. class BlockActivationObject : public ActivationObject @@ -56,15 +57,6 @@ namespace Js virtual BOOL EnsureNoRedeclProperty(PropertyId propertyId) override; virtual BOOL InitPropertyScoped(PropertyId propertyId, Var value) override; virtual BOOL InitFuncScoped(PropertyId propertyId, Var value) override; - static bool Is(void* instance) - { - return VirtualTableInfo::HasVirtualTable(instance); - } - static BlockActivationObject* FromVar(Var value) - { - AssertOrFailFast(BlockActivationObject::Is(value)); - return static_cast(DynamicObject::FromVar(value)); - } BlockActivationObject* Clone(ScriptContext *scriptContext); @@ -75,6 +67,8 @@ namespace Js #endif }; + template <> bool VarIsImpl(RecyclableObject* instance); + // A pseudo-ActivationObject is a scope like a "catch" scope that shouldn't receive var inits. class PseudoActivationObject : public ActivationObject { @@ -88,10 +82,6 @@ namespace Js virtual BOOL EnsureNoRedeclProperty(PropertyId propertyId) override; virtual BOOL InitFuncScoped(PropertyId propertyId, Var value) override; virtual BOOL InitPropertyScoped(PropertyId propertyId, Var value) override; - static bool Is(void* instance) - { - return VirtualTableInfo::HasVirtualTable(instance); - } #if ENABLE_TTD public: @@ -100,6 +90,8 @@ namespace Js #endif }; + template <> bool VarIsImpl(RecyclableObject* instance); + class ConsoleScopeActivationObject : public ActivationObject { private: @@ -114,12 +106,6 @@ namespace Js AssertMsg(false, "ConsoleScopeActivationObject::DummyVirtualFunc function should never be called"); } - static bool Is(void* instance) - { - return VirtualTableInfo::HasVirtualTable(instance) - || VirtualTableInfo>::HasVirtualTable(instance); - } - #if ENABLE_TTD public: virtual TTD::NSSnapObjects::SnapObjectType GetSnapTag_TTD() const override; @@ -127,6 +113,8 @@ namespace Js #endif }; + template <> bool VarIsImpl(RecyclableObject* instance); + class ActivationObjectEx : public ActivationObject { private: @@ -208,18 +196,6 @@ namespace Js static byte ExtraSlotCount() { return 4; } - static bool Is(void* instance) - { - return VirtualTableInfo::HasVirtualTable(instance) || - VirtualTableInfo>::HasVirtualTable(instance); - } - - static ActivationObjectEx * FromVar(Var instance) - { - AssertOrFailFast(Is(instance)); - return reinterpret_cast(instance); - } - private: Field(ScriptFunction *) parentFunc; Field(uint) cachedFuncCount; @@ -234,4 +210,6 @@ namespace Js virtual void ExtractSnapObjectDataInto(TTD::NSSnapObjects::SnapObject* objData, TTD::SlabAllocator& alloc) override; #endif }; + + template <> bool VarIsImpl(RecyclableObject* instance); }; diff --git a/lib/Runtime/Types/Chakra.Runtime.Types.vcxproj b/lib/Runtime/Types/Chakra.Runtime.Types.vcxproj index becef2bd7dd..d746ac01ba5 100644 --- a/lib/Runtime/Types/Chakra.Runtime.Types.vcxproj +++ b/lib/Runtime/Types/Chakra.Runtime.Types.vcxproj @@ -75,7 +75,6 @@ - diff --git a/lib/Runtime/Types/DeferredTypeHandler.cpp b/lib/Runtime/Types/DeferredTypeHandler.cpp index 6e4fc5647f7..3bcf7ba0869 100644 --- a/lib/Runtime/Types/DeferredTypeHandler.cpp +++ b/lib/Runtime/Types/DeferredTypeHandler.cpp @@ -20,29 +20,42 @@ namespace Js // also responsible for populating PropertyTypes to indicate whether there are any read-only // properties unknown to the type handler. - BOOL isProto = this->GetIsPrototype(); + bool isProto = this->GetIsPrototype(); + bool isCrossSite = CrossSite::IsThunk(instance->GetType()->GetEntryPoint()); ScriptContext* scriptContext = instance->GetScriptContext(); instance->EnsureSlots(0, typeHandler->GetSlotCapacity(), scriptContext, typeHandler); FunctionProxy * functionProxy = instance->GetFunctionProxy(); + ScriptFunctionType * undeferredFunctionType = nullptr; if (functionProxy) { - undeferredFunctionType = functionProxy->GetUndeferredFunctionType(); + undeferredFunctionType = isCrossSite ? functionProxy->GetCrossSiteUndeferredFunctionType() : functionProxy->GetUndeferredFunctionType(); } - if (undeferredFunctionType && !isProto && !instance->IsCrossSiteObject() && (undeferredFunctionType->GetPrototype() == instance->GetType()->GetPrototype())) + + if (undeferredFunctionType && !isProto && (undeferredFunctionType->GetPrototype() == instance->GetType()->GetPrototype())) { Assert(undeferredFunctionType->GetIsShared()); - Assert(!CrossSite::IsThunk(undeferredFunctionType->GetEntryPoint())); instance->ReplaceType(undeferredFunctionType); } else { typeHandler->SetInstanceTypeHandler(instance); - if (functionProxy && !isProto && typeHandler->GetMayBecomeShared() && !CrossSite::IsThunk(instance->GetType()->GetEntryPoint()) && !functionProxy->GetUndeferredFunctionType() && !PHASE_OFF1(ShareFuncTypesPhase)) + if (functionProxy && !isProto && typeHandler->GetMayBecomeShared() && !PHASE_OFF1(ShareFuncTypesPhase)) { - functionProxy->SetUndeferredFunctionType(ScriptFunction::UnsafeFromVar(instance)->GetScriptFunctionType()); + ScriptFunctionType *newType = UnsafeVarTo(instance)->GetScriptFunctionType(); + if (isCrossSite) + { + if (functionProxy->HasParseableInfo() && !functionProxy->GetParseableFunctionInfo()->GetCrossSiteUndeferredFunctionType()) + { + functionProxy->GetParseableFunctionInfo()->SetCrossSiteUndeferredFunctionType(newType); + } + } + else if (!functionProxy->GetUndeferredFunctionType()) + { + functionProxy->SetUndeferredFunctionType(newType); + } instance->ShareType(); } } diff --git a/lib/Runtime/Types/DictionaryPropertyDescriptor.h b/lib/Runtime/Types/DictionaryPropertyDescriptor.h index 439fd154427..b8b8ae728fa 100644 --- a/lib/Runtime/Types/DictionaryPropertyDescriptor.h +++ b/lib/Runtime/Types/DictionaryPropertyDescriptor.h @@ -6,62 +6,81 @@ namespace Js { + + namespace DictionaryPropertyDescriptorFlags + { + enum class Flags : uint8 + { + None = 0, + PreventFalseReference = 1 << 0, + IsShadowed = 1 << 1, + IsAccessor = 1 << 2, +#if ENABLE_FIXED_FIELDS + IsInitialized = 1 << 3, + IsOnlyOneAccessorInitialized = 1 << 4, + IsFixed = 1 << 5, + UsedAsFixed = 1 << 6, +#endif + }; + + ENUM_CLASS_HELPERS(Flags, uint8); + + inline Flags FlagIf(bool condition, Flags flag) + { + return condition ? flag : Flags::None; + } + } + template class DictionaryPropertyDescriptor { template friend class DictionaryPropertyDescriptor; public: + + using Flags = DictionaryPropertyDescriptorFlags::Flags; + DictionaryPropertyDescriptor(TPropertyIndex dataSlot, bool isInitialized = false, bool isFixed = false, bool usedAsFixed = false) : - Data(dataSlot), Getter(NoSlots), Setter(NoSlots), Attributes(PropertyDynamicTypeDefaults), + Data(dataSlot), Getter(NoSlots), Setter(NoSlots), Attributes(PropertyDynamicTypeDefaults), flags(Flags::PreventFalseReference #if ENABLE_FIXED_FIELDS - IsInitialized(isInitialized), IsOnlyOneAccessorInitialized(false), IsFixed(isFixed), UsedAsFixed(usedAsFixed), + | FlagIf(isInitialized, Flags::IsInitialized) | FlagIf(isFixed, Flags::IsFixed) | FlagIf(usedAsFixed, Flags::UsedAsFixed) #endif - PreventFalseReference(true), IsShadowed(false), IsAccessor(false) {} + ) { } DictionaryPropertyDescriptor(TPropertyIndex getterSlot, TPropertyIndex setterSlot, bool isInitialized = false, bool isFixed = false, bool usedAsFixed = false) : - Data(NoSlots), Getter(getterSlot), Setter(setterSlot), Attributes(PropertyDynamicTypeDefaults), + Data(NoSlots), Getter(getterSlot), Setter(setterSlot), Attributes(PropertyDynamicTypeDefaults), flags(Flags::PreventFalseReference | Flags::IsAccessor #if ENABLE_FIXED_FIELDS - IsInitialized(isInitialized), IsOnlyOneAccessorInitialized(false), IsFixed(isFixed), UsedAsFixed(usedAsFixed), + | FlagIf(isInitialized, Flags::IsInitialized) | FlagIf(isFixed, Flags::IsFixed) | FlagIf(usedAsFixed, Flags::UsedAsFixed) #endif - PreventFalseReference(true), IsShadowed(false), IsAccessor(true) {} + ) { } DictionaryPropertyDescriptor(TPropertyIndex dataSlot, PropertyAttributes attributes, bool isInitialized = false, bool isFixed = false, bool usedAsFixed = false) : - Data(dataSlot), Getter(NoSlots), Setter(NoSlots), Attributes(attributes), + Data(dataSlot), Getter(NoSlots), Setter(NoSlots), Attributes(attributes), flags(Flags::PreventFalseReference #if ENABLE_FIXED_FIELDS - IsInitialized(isInitialized), IsOnlyOneAccessorInitialized(false), IsFixed(isFixed), UsedAsFixed(usedAsFixed), + | FlagIf(isInitialized, Flags::IsInitialized) | FlagIf(isFixed, Flags::IsFixed) | FlagIf(usedAsFixed, Flags::UsedAsFixed) #endif - PreventFalseReference(true), IsShadowed(false), IsAccessor(false) { } + ) { } DictionaryPropertyDescriptor(TPropertyIndex getterSlot, TPropertyIndex setterSlot, PropertyAttributes attributes, bool isInitialized = false, bool isFixed = false, bool usedAsFixed = false) : - Data(NoSlots), Getter(getterSlot), Setter(setterSlot), Attributes(attributes), + Data(NoSlots), Getter(getterSlot), Setter(setterSlot), Attributes(attributes), flags(Flags::PreventFalseReference | Flags::IsAccessor #if ENABLE_FIXED_FIELDS - IsInitialized(isInitialized), IsOnlyOneAccessorInitialized(false), IsFixed(isFixed), UsedAsFixed(usedAsFixed), + | FlagIf(isInitialized, Flags::IsInitialized) | FlagIf(isFixed, Flags::IsFixed) | FlagIf(usedAsFixed, Flags::UsedAsFixed) #endif - PreventFalseReference(true), IsShadowed(false), IsAccessor(true) { } + ) { } // this is for initialization. - DictionaryPropertyDescriptor() : Data(NoSlots), Getter(NoSlots), Setter(NoSlots), Attributes(PropertyDynamicTypeDefaults), -#if ENABLE_FIXED_FIELDS - IsInitialized(false), IsOnlyOneAccessorInitialized(false), IsFixed(false), UsedAsFixed(false), -#endif - PreventFalseReference(true), IsShadowed(false), IsAccessor(false) { } + DictionaryPropertyDescriptor() : Data(NoSlots), Getter(NoSlots), Setter(NoSlots), Attributes(PropertyDynamicTypeDefaults), flags(Flags::PreventFalseReference) { } template void CopyFrom(DictionaryPropertyDescriptor& descriptor); + private: // SimpleDictionaryPropertyDescriptor is allocated by a dictionary along with the PropertyRecord - // so it cannot be allocated as leaf, tag the lower bit to prevent false reference. - bool PreventFalseReference:1; - bool IsShadowed : 1; - bool IsAccessor : 1; -#if ENABLE_FIXED_FIELDS - bool IsInitialized:1; - bool IsOnlyOneAccessorInitialized:1; - bool IsFixed:1; - bool UsedAsFixed:1; -#endif + // so it cannot be allocated as leaf, tag the lower bit to prevent false reference: flags must + // always have PreventFalseReference set + Flags flags; + public: PropertyAttributes Attributes; private: TPropertyIndex Data; @@ -78,17 +97,55 @@ namespace Js bool HasNonLetConstGlobal() const { - return (this->Attributes & PropertyLetConstGlobal) == 0 || this->IsShadowed; + return (this->Attributes & PropertyLetConstGlobal) == 0 || GetIsShadowed(); } void AddShadowedData(TPropertyIndex& nextPropertyIndex, bool addingLetConstGlobal); + +#define EXPOSE_FLAG_ACCESSOR(flag) \ + inline bool Get##flag() const\ + {\ + return HasFlag(Flags::flag);\ + }\ + inline void Set##flag(bool set)\ + {\ + SetFlag(Flags::flag, set);\ + } + + EXPOSE_FLAG_ACCESSOR(IsShadowed); + EXPOSE_FLAG_ACCESSOR(IsAccessor); +#if ENABLE_FIXED_FIELDS + EXPOSE_FLAG_ACCESSOR(IsInitialized); + EXPOSE_FLAG_ACCESSOR(IsOnlyOneAccessorInitialized); + EXPOSE_FLAG_ACCESSOR(IsFixed); + EXPOSE_FLAG_ACCESSOR(UsedAsFixed); +#endif +#undef EXPOSE_FLAG_ACCESSOR + private: static const TPropertyIndex NoSlots = PropertyIndexRanges::NoSlots; + inline bool HasFlag(Flags flag) const + { + return (this->flags & flag) == flag; + } + + inline void SetFlag(Flags flag, bool set) + { + if (set) + { + this->flags = this->flags | flag; + } + else + { + this->flags = this->flags & ~flag; + } + } + public: bool IsOrMayBecomeFixed() { #if ENABLE_FIXED_FIELDS - return !IsInitialized || IsFixed; + return !GetIsInitialized() || GetIsFixed(); #else return false; #endif @@ -97,8 +154,8 @@ namespace Js bool SanityCheckFixedBits() { return - ((!this->IsFixed && !this->UsedAsFixed) || - (!(this->Attributes & PropertyDeleted) && (this->Data != NoSlots || this->Getter != NoSlots || this->Setter != NoSlots))); + (!GetIsFixed() && !GetUsedAsFixed()) || + (!(this->Attributes & PropertyDeleted) && (this->Data != NoSlots || this->Getter != NoSlots || this->Setter != NoSlots)); } #endif @@ -124,7 +181,7 @@ namespace Js { return this->Data; } - else if (this->IsShadowed && !this->IsAccessor) + else if (GetIsShadowed() && !GetIsAccessor()) { // if it is a let const global, if the setter slot is empty, then the Getter slot must be // the shadowed data slot, return that. @@ -133,7 +190,7 @@ namespace Js } else { - Assert(!this->IsAccessor || this->Data == NoSlots); + Assert(!GetIsAccessor() || this->Data == NoSlots); return this->Data; } return NoSlots; @@ -158,11 +215,11 @@ namespace Js template void DictionaryPropertyDescriptor::ConvertToData() { - if (this->IsAccessor) + if (GetIsAccessor()) { Assert(this->Getter != NoSlots && this->Setter != NoSlots); - this->IsAccessor = false; - if (this->IsShadowed) + SetIsAccessor(false); + if (GetIsShadowed()) { Assert(this->Data != NoSlots); } @@ -179,9 +236,9 @@ namespace Js template void DictionaryPropertyDescriptor::AddShadowedData(TPropertyIndex& nextPropertyIndex, bool addingLetConstGlobal) { - Assert(!this->IsShadowed); - this->IsShadowed = true; - if (this->IsAccessor) + Assert(!GetIsShadowed()); + SetIsShadowed(true); + if (GetIsAccessor()) { Assert(this->Data == NoSlots); if (addingLetConstGlobal) @@ -218,7 +275,7 @@ namespace Js // // NOTE: Do not create slot for Getter/Setter if they are already valid; possible after previous conversion from Accessor to Data, or deletion of Accessor, etc. - if (this->IsAccessor) + if (GetIsAccessor()) { // Accessor property // Accessor property + LetConstGlobal @@ -226,10 +283,10 @@ namespace Js return false; } - this->IsAccessor = true; + SetIsAccessor(true); if (this->Attributes & PropertyLetConstGlobal) { - if (this->IsShadowed) + if (GetIsShadowed()) { // Data property + LetConstGlobal Assert(this->Getter != NoSlots); @@ -237,7 +294,7 @@ namespace Js else { // LetConstGlobal - this->IsShadowed = true; + SetIsShadowed(true); } } else @@ -273,21 +330,7 @@ namespace Js this->Getter = (descriptor.Getter == DictionaryPropertyDescriptor::NoSlots) ? NoSlots : descriptor.Getter; this->Setter = (descriptor.Setter == DictionaryPropertyDescriptor::NoSlots) ? NoSlots : descriptor.Setter; - // Not strictly required, PreventFalseReference must always be 1 - this->PreventFalseReference = descriptor.PreventFalseReference; - this->IsShadowed = descriptor.IsShadowed; - this->IsAccessor = descriptor.IsAccessor; - - // Not strictly required, PreventFalseReference must always be 1 - this->PreventFalseReference = descriptor.PreventFalseReference; - this->IsShadowed = descriptor.IsShadowed; - -#if ENABLE_FIXED_FIELDS - this->IsInitialized = descriptor.IsInitialized; - this->IsOnlyOneAccessorInitialized = descriptor.IsOnlyOneAccessorInitialized; - this->IsFixed = descriptor.IsFixed; - this->UsedAsFixed = descriptor.UsedAsFixed; -#endif + this->flags = descriptor.flags; } #if DBG_DUMP @@ -298,14 +341,14 @@ namespace Js const unsigned fieldIndent(indent + 2); Output::Print(_u("%*sDictionaryPropertyDescriptor (0x%p)\n"), indent, padding, this); - Output::Print(_u("%*sPreventFalseReference: %d\n"), fieldIndent, padding, this->PreventFalseReference); - Output::Print(_u("%*sIsShadowed: %d\n"), fieldIndent, padding, this->IsShadowed); - Output::Print(_u("%*sIsAccessor: %d\n"), fieldIndent, padding, this->IsAccessor); + Output::Print(_u("%*sPreventFalseReference: %d\n"), fieldIndent, padding, HasFlag(Flags::PreventFalseReference)); + Output::Print(_u("%*sIsShadowed: %d\n"), fieldIndent, padding, GetIsShadowed()); + Output::Print(_u("%*sIsAccessor: %d\n"), fieldIndent, padding, GetIsAccessor()); #if ENABLE_FIXED_FIELDS - Output::Print(_u("%*sIsInitialized: %d\n"), fieldIndent, padding, this->IsInitialized); - Output::Print(_u("%*sIsOnlyOneAccessorInitialized: %d\n"), fieldIndent, padding, this->IsOnlyOneAccessorInitialized); - Output::Print(_u("%*sIsFixed: %d\n"), fieldIndent, padding, this->IsFixed); - Output::Print(_u("%*sUsedAsFixed: %d\n"), fieldIndent, padding, this->UsedAsFixed); + Output::Print(_u("%*sIsInitialized: %d\n"), fieldIndent, padding, GetIsInitialized()); + Output::Print(_u("%*sIsOnlyOneAccessorInitialized: %d\n"), fieldIndent, padding, GetIsOnlyOneAccessorInitialized()); + Output::Print(_u("%*sIsFixed: %d\n"), fieldIndent, padding, GetIsFixed()); + Output::Print(_u("%*sUsedAsFixed: %d\n"), fieldIndent, padding, GetUsedAsFixed()); #endif Output::Print(_u("%*sAttributes: 0x%02x "), fieldIndent, padding, this->Attributes); if (this->Attributes != PropertyNone) diff --git a/lib/Runtime/Types/DictionaryTypeHandler.cpp b/lib/Runtime/Types/DictionaryTypeHandler.cpp index e0025540d3f..2308ebae941 100644 --- a/lib/Runtime/Types/DictionaryTypeHandler.cpp +++ b/lib/Runtime/Types/DictionaryTypeHandler.cpp @@ -290,7 +290,7 @@ namespace Js // We don't object type specialize accessors at this point, so if we see an accessor on an object we must have a mismatch. // When we add support for accessors we will need another bit on EquivalentPropertyEntry indicating whether we expect // a data or accessor property. - if (descriptor->IsAccessor) + if (descriptor->GetIsAccessor()) { return false; } @@ -386,9 +386,9 @@ namespace Js DictionaryPropertyDescriptor descriptor(index, attributes); #if ENABLE_FIXED_FIELDS Assert((!isFixed && !usedAsFixed) || (!IsInternalPropertyId(propertyRecord->GetPropertyId()) && this->singletonInstance != nullptr)); - descriptor.IsInitialized = isInitialized; - descriptor.IsFixed = isFixed; - descriptor.UsedAsFixed = usedAsFixed; + descriptor.SetIsInitialized(isInitialized); + descriptor.SetIsFixed(isFixed); + descriptor.SetUsedAsFixed(usedAsFixed); #endif propertyMap->Add(propertyRecord, descriptor); @@ -494,7 +494,7 @@ namespace Js BOOL DictionaryTypeHandlerBase::GetRootProperty(DynamicObject* instance, Var originalInstance, PropertyId propertyId, Var* value, PropertyValueInfo* info, ScriptContext* requestContext) { - AssertMsg(RootObjectBase::Is(instance), "Instance must be a root object!"); + AssertMsg(VarIs(instance), "Instance must be a root object!"); return GetProperty_Internal(instance, originalInstance, propertyId, value, info, requestContext); } @@ -511,7 +511,7 @@ namespace Js DictionaryPropertyDescriptor* descriptor, Var* value, PropertyValueInfo* info, PropertyType propertyT, ScriptContext* requestContext) { bool const isLetConstGlobal = (descriptor->Attributes & PropertyLetConstGlobal) != 0; - AssertMsg(!isLetConstGlobal || RootObjectBase::Is(instance), "object must be a global object if letconstglobal is set"); + AssertMsg(!isLetConstGlobal || VarIs(instance), "object must be a global object if letconstglobal is set"); if (allowLetConstGlobal) { // GetRootProperty: false if not global @@ -523,7 +523,7 @@ namespace Js else { // GetProperty: don't count deleted or global. - if (descriptor->Attributes & (PropertyDeleted | (descriptor->IsShadowed ? 0 : PropertyLetConstGlobal))) + if (descriptor->Attributes & (PropertyDeleted | (descriptor->GetIsShadowed() ? 0 : PropertyLetConstGlobal))) { return false; } @@ -542,7 +542,7 @@ namespace Js CacheOperators::CachePropertyReadForGetter(info, originalInstance, propertyT, requestContext); PropertyValueInfo::SetNoCache(info, instance); // we already cached getter, so we don't have to do it once more - RecyclableObject* func = RecyclableObject::UnsafeFromVar(instance->GetSlot(descriptor->GetGetterPropertyIndex())); + RecyclableObject* func = UnsafeVarTo(instance->GetSlot(descriptor->GetGetterPropertyIndex())); *value = JavascriptOperators::CallGetter(func, originalInstance, requestContext); return true; } @@ -631,7 +631,7 @@ namespace Js template DescriptorFlags DictionaryTypeHandlerBase::GetRootSetter(DynamicObject* instance, PropertyId propertyId, Var* setterValue, PropertyValueInfo* info, ScriptContext* requestContext) { - AssertMsg(RootObjectBase::Is(instance), "Instance must be a root object!"); + AssertMsg(VarIs(instance), "Instance must be a root object!"); return GetSetter_Internal(instance, propertyId, setterValue, info, requestContext); } @@ -711,7 +711,7 @@ namespace Js template BOOL DictionaryTypeHandlerBase::SetRootProperty(DynamicObject* instance, PropertyId propertyId, Var value, PropertyOperationFlags flags, PropertyValueInfo* info) { - AssertMsg(RootObjectBase::Is(instance), "Instance must be a root object!"); + AssertMsg(VarIs(instance), "Instance must be a root object!"); return SetProperty_Internal(instance, propertyId, value, flags, info); } template @@ -740,7 +740,7 @@ namespace Js DictionaryPropertyDescriptor * descriptor = *pdescriptor; PropertyId propertyId = propertyRecord->GetPropertyId(); Assert(instance); - Assert((descriptor->Attributes & PropertyDeleted) == 0 || (allowLetConstGlobal && descriptor->IsShadowed)); + Assert((descriptor->Attributes & PropertyDeleted) == 0 || (allowLetConstGlobal && descriptor->GetIsShadowed())); // DictionaryTypeHandlers are not supposed to be shared. Assert(!GetIsOrMayBecomeShared()); @@ -762,18 +762,18 @@ namespace Js } } #if ENABLE_FIXED_FIELDS - if (!descriptor->IsInitialized) + if (!descriptor->GetIsInitialized()) { if ((flags & PropertyOperation_PreInit) == 0) { - descriptor->IsInitialized = true; + descriptor->SetIsInitialized(true); if (localSingletonInstance == instance && !IsInternalPropertyId(propertyId) && (flags & (PropertyOperation_NonFixedValue | PropertyOperation_SpecialValue)) == 0) { Assert(value != nullptr); // We don't want fixed properties on external objects. See DynamicObject::ResetObject for more information. Assert(!instance->IsExternal()); - descriptor->IsFixed = (JavascriptFunction::Is(value) ? ShouldFixMethodProperties() : (ShouldFixDataProperties() && CheckHeuristicsForFixedDataProps(instance, propertyId, value))); + descriptor->SetIsFixed(VarIs(value) ? ShouldFixMethodProperties() : (ShouldFixDataProperties() && CheckHeuristicsForFixedDataProps(instance, propertyId, value))); } } } @@ -796,7 +796,7 @@ namespace Js } else if (descriptor->GetSetterPropertyIndex() != NoSlots) { - RecyclableObject* func = RecyclableObject::FromVar(instance->GetSlot(descriptor->GetSetterPropertyIndex())); + RecyclableObject* func = VarTo(instance->GetSlot(descriptor->GetSetterPropertyIndex())); JavascriptOperators::CallSetter(func, instance, value, NULL); // Wait for the setter to return before setting up the inline cache info, as the setter may change @@ -884,7 +884,7 @@ namespace Js PropertyValueInfo::SetNoCache(info, instance); return false; } - else if (isInit && descriptor->IsAccessor) + else if (isInit && descriptor->GetIsAccessor()) { descriptor->ConvertToData(); } @@ -974,7 +974,7 @@ namespace Js } else { - Assert(descriptor->IsAccessor); + Assert(descriptor->GetIsAccessor()); SetSlotUnchecked(instance, descriptor->GetGetterPropertyIndex(), undefined); SetSlotUnchecked(instance, descriptor->GetSetterPropertyIndex(), undefined); } @@ -986,7 +986,7 @@ namespace Js if ((descriptor->Attributes & PropertyLetConstGlobal) == 0) { - Assert(!descriptor->IsShadowed); + Assert(!descriptor->GetIsShadowed()); descriptor->Attributes = PropertyDeletedDefaults; } else @@ -1017,7 +1017,7 @@ namespace Js template BOOL DictionaryTypeHandlerBase::DeleteRootProperty(DynamicObject* instance, PropertyId propertyId, PropertyOperationFlags propertyOperationFlags) { - AssertMsg(RootObjectBase::Is(instance), "Instance must be a root object!"); + AssertMsg(VarIs(instance), "Instance must be a root object!"); return DeleteProperty_Internal(instance, propertyId, propertyOperationFlags); } @@ -1078,7 +1078,7 @@ namespace Js } else { - Assert(descriptor->IsAccessor); + Assert(descriptor->GetIsAccessor()); SetSlotUnchecked(instance, descriptor->GetGetterPropertyIndex(), undefined); SetSlotUnchecked(instance, descriptor->GetSetterPropertyIndex(), undefined); } @@ -1090,7 +1090,7 @@ namespace Js if ((descriptor->Attributes & PropertyLetConstGlobal) == 0) { - Assert(!descriptor->IsShadowed); + Assert(!descriptor->GetIsShadowed()); descriptor->Attributes = PropertyDeletedDefaults; } else @@ -1134,7 +1134,7 @@ namespace Js PropertyRecord const* propertyRecord = scriptContext->GetPropertyName(propertyId); if (propertyMap->TryGetValue(propertyRecord, &descriptor)) { - return descriptor.IsFixed; + return descriptor.GetIsFixed(); } else { @@ -1194,7 +1194,7 @@ namespace Js { if (!descriptor->HasNonLetConstGlobal()) { - AssertMsg(RootObjectBase::Is(instance), "object must be a global object if letconstglobal is set"); + AssertMsg(VarIs(instance), "object must be a global object if letconstglobal is set"); return true; } @@ -1224,7 +1224,7 @@ namespace Js { if (!descriptor->HasNonLetConstGlobal()) { - AssertMsg(RootObjectBase::Is(instance), "object must be a global object if letconstglobal is set"); + AssertMsg(VarIs(instance), "object must be a global object if letconstglobal is set"); return !(descriptor->Attributes & PropertyConst); } return descriptor->Attributes & PropertyWritable; @@ -1253,7 +1253,7 @@ namespace Js { if (!descriptor->HasNonLetConstGlobal()) { - AssertMsg(RootObjectBase::Is(instance), "object must be a global object if letconstglobal is set"); + AssertMsg(VarIs(instance), "object must be a global object if letconstglobal is set"); return true; } return descriptor->Attributes & PropertyConfigurable; @@ -1287,7 +1287,7 @@ namespace Js if (!descriptor->HasNonLetConstGlobal()) { - AssertMsg(RootObjectBase::Is(instance), "object must be a global object if letconstglobal is set"); + AssertMsg(VarIs(instance), "object must be a global object if letconstglobal is set"); return false; } @@ -1332,7 +1332,7 @@ namespace Js if (!descriptor->HasNonLetConstGlobal()) { - AssertMsg(RootObjectBase::Is(instance), "object must be a global object if letconstglobal is set"); + AssertMsg(VarIs(instance), "object must be a global object if letconstglobal is set"); return false; } @@ -1374,7 +1374,7 @@ namespace Js if (!descriptor->HasNonLetConstGlobal()) { - AssertMsg(RootObjectBase::Is(instance), "object must be a global object if letconstglobal is set"); + AssertMsg(VarIs(instance), "object must be a global object if letconstglobal is set"); return false; } @@ -1467,7 +1467,7 @@ namespace Js #if DBG else { - AssertMsg(RootObjectBase::Is(instance), "instance needs to be global object when letconst global is set"); + AssertMsg(VarIs(instance), "instance needs to be global object when letconst global is set"); } #endif } @@ -1671,7 +1671,7 @@ namespace Js } } - if (!descriptor->IsAccessor) + if (!descriptor->GetIsAccessor()) { // New getter/setter, make sure both values are not null and set to the slots getter = CanonicalizeAccessor(getter, library); @@ -1692,21 +1692,21 @@ namespace Js // Although we don't actually have CreateTypeForNewScObject on DictionaryTypeHandler, we could potentially // transition to a DictionaryTypeHandler with some properties uninitialized. - if (!descriptor->IsInitialized) + if (!descriptor->GetIsInitialized()) { - descriptor->IsInitialized = true; + descriptor->SetIsInitialized(true); if (localSingletonInstance == instance && !IsInternalPropertyId(propertyId)) { // We don't want fixed properties on external objects. See DynamicObject::ResetObject for more information. Assert(!instance->IsExternal() || (flags & PropertyOperation_NonFixedValue) != 0); - descriptor->IsFixed = (flags & PropertyOperation_NonFixedValue) == 0 && ShouldFixAccessorProperties(); + descriptor->SetIsFixed((flags & PropertyOperation_NonFixedValue) == 0 && ShouldFixAccessorProperties()); } if (!isGetterSet || !isSetterSet) { - descriptor->IsOnlyOneAccessorInitialized = true; + descriptor->SetIsOnlyOneAccessorInitialized(true); } } - else if (descriptor->IsOnlyOneAccessorInitialized) + else if (descriptor->GetIsOnlyOneAccessorInitialized()) { // Only one of getter/setter was initialized, allow the isFixed to stay if we are defining the other one. Var oldGetter = GetSlot(instance, descriptor->GetGetterPropertyIndex()); @@ -1715,7 +1715,7 @@ namespace Js if (((getter == oldGetter || !isGetterSet) && oldSetter == library->GetDefaultAccessorFunction()) || ((setter == oldSetter || !isSetterSet) && oldGetter == library->GetDefaultAccessorFunction())) { - descriptor->IsOnlyOneAccessorInitialized = false; + descriptor->SetIsOnlyOneAccessorInitialized(false); } else { @@ -1770,7 +1770,7 @@ namespace Js #if ENABLE_FIXED_FIELDS DynamicObject* localSingletonInstance = this->singletonInstance != nullptr ? this->singletonInstance->Get() : nullptr; Assert(this->singletonInstance == nullptr || localSingletonInstance == instance); - newDescriptor.IsInitialized = true; + newDescriptor.SetIsInitialized(true); if (localSingletonInstance == instance && !IsInternalPropertyId(propertyId)) { // We don't want fixed properties on external objects. See DynamicObject::ResetObject for more information. @@ -1778,10 +1778,10 @@ namespace Js // Even if one (or both?) accessors are the default functions obtained through canonicalization, // they are still legitimate functions, so it's ok to mark the whole property as fixed. - newDescriptor.IsFixed = (flags & PropertyOperation_NonFixedValue) == 0 && ShouldFixAccessorProperties(); + newDescriptor.SetIsFixed((flags & PropertyOperation_NonFixedValue) == 0 && ShouldFixAccessorProperties()); if (!isGetterSet || !isSetterSet) { - newDescriptor.IsOnlyOneAccessorInitialized = true; + newDescriptor.SetIsOnlyOneAccessorInitialized(true); } } #endif @@ -1859,7 +1859,7 @@ namespace Js } descriptor->ConvertToData(); } - else if (descriptor->IsShadowed) + else if (descriptor->GetIsShadowed()) { descriptor->Attributes = attributes | (descriptor->Attributes & (PropertyLetConstGlobal | PropertyNoRedecl)); } @@ -1905,12 +1905,12 @@ namespace Js } else { - if (descriptor->IsAccessor && !(attributes & PropertyLetConstGlobal)) + if (descriptor->GetIsAccessor() && !(attributes & PropertyLetConstGlobal)) { #if DEBUG Var ctor = JavascriptOperators::GetProperty(instance, PropertyIds::constructor, scriptContext); #endif - AssertMsg(RootObjectBase::Is(instance) || JavascriptFunction::IsBuiltinProperty(instance, propertyId) || + AssertMsg(VarIs(instance) || JavascriptFunction::IsBuiltinProperty(instance, propertyId) || // ValidateAndApplyPropertyDescriptor says to preserve Configurable and Enumerable flags // For InitRootFld, which is equivalent to @@ -2184,14 +2184,14 @@ namespace Js if ((flags & PropertyOperation_PreInit) == 0) { - newDescriptor.IsInitialized = true; + newDescriptor.SetIsInitialized(true); if (localSingletonInstance == instance && !IsInternalPropertyId(propertyId) && (flags & (PropertyOperation_NonFixedValue | PropertyOperation_SpecialValue)) == 0) { Assert(value != nullptr); // We don't want fixed properties on external objects. See DynamicObject::ResetObject for more information. Assert(!instance->IsExternal()); - newDescriptor.IsFixed = (JavascriptFunction::Is(value) ? ShouldFixMethodProperties() : (ShouldFixDataProperties() & CheckHeuristicsForFixedDataProps(instance, propertyRecord, value))); + newDescriptor.SetIsFixed(VarIs(value) ? ShouldFixMethodProperties() : (ShouldFixDataProperties() & CheckHeuristicsForFixedDataProps(instance, propertyRecord, value))); } } #endif @@ -2227,7 +2227,7 @@ namespace Js // If we just added a fixed method, don't populate the inline cache so that we always take the // slow path when overwriting this property and correctly invalidate any JIT-ed code that hard-coded // this method. - if (newDescriptor.IsFixed) + if (newDescriptor.GetIsFixed()) { PropertyValueInfo::SetNoCache(info, instance); } @@ -2343,7 +2343,7 @@ namespace Js template DynamicTypeHandler* DictionaryTypeHandlerBase::ConvertToTypeWithItemAttributes(DynamicObject* instance) { - return JavascriptArray::Is(instance) ? ConvertToES5ArrayType(instance) : this; + return JavascriptArray::IsNonES5Array(instance) ? ConvertToES5ArrayType(instance) : this; } template @@ -2379,7 +2379,7 @@ namespace Js // handler transitions. In addition, we know that the current instance is not yet a prototype. Assert(descriptor->SanityCheckFixedBits()); - if (descriptor->IsInitialized) + if (descriptor->GetIsInitialized()) { // Since DictionaryTypeHandlers are never shared, we can set fixed fields and clear used as fixed as long // as we have changed the type. Otherwise populated load field caches would still be valid and would need @@ -2393,23 +2393,23 @@ namespace Js // Because DictionaryTypeHandlers are never shared we should always have a property value if the handler // says it's initialized. Assert(value != nullptr); - descriptor->IsFixed = (JavascriptFunction::Is(value) ? ShouldFixMethodProperties() : (ShouldFixDataProperties() && CheckHeuristicsForFixedDataProps(instance, propertyRecord, value))); + descriptor->SetIsFixed(VarIs(value) ? ShouldFixMethodProperties() : (ShouldFixDataProperties() && CheckHeuristicsForFixedDataProps(instance, propertyRecord, value))); } - else if (descriptor->IsAccessor) + else if (descriptor->GetIsAccessor()) { Assert(descriptor->GetGetterPropertyIndex() != NoSlots && descriptor->GetSetterPropertyIndex() != NoSlots); - descriptor->IsFixed = ShouldFixAccessorProperties(); + descriptor->SetIsFixed(ShouldFixAccessorProperties()); } // Since we have a new type we can clear all used as fixed bits. That's because any instance field loads // will have been invalidated by the type transition, and there are no proto fields loads from this object // because it is just now becoming a proto. - descriptor->UsedAsFixed = false; + descriptor->SetUsedAsFixed(false); } } else { - Assert(!descriptor->IsFixed && !descriptor->UsedAsFixed); + Assert(!descriptor->GetIsFixed() && !descriptor->GetUsedAsFixed()); } Assert(descriptor->SanityCheckFixedBits()); } @@ -2564,7 +2564,7 @@ namespace Js for (int i = 0; i < propertyMap->Count(); i++) { DictionaryPropertyDescriptor descriptor = propertyMap->GetValueAt(i); - if (descriptor.IsFixed) + if (descriptor.GetIsFixed()) { return true; } @@ -2585,7 +2585,7 @@ namespace Js DictionaryPropertyDescriptor* descriptor; if (propertyMap->TryGetReference(propertyRecord, &descriptor)) { - if (descriptor->Attributes & PropertyDeleted || !descriptor->IsFixed) + if (descriptor->Attributes & PropertyDeleted || !descriptor->GetIsFixed()) { return false; } @@ -2594,12 +2594,12 @@ namespace Js { Assert(!IsInternalPropertyId(propertyRecord->GetPropertyId())); Var value = localSingletonInstance->GetSlot(dataSlot); - if (value && ((IsFixedMethodProperty(propertyType) && JavascriptFunction::Is(value)) || IsFixedDataProperty(propertyType))) + if (value && ((IsFixedMethodProperty(propertyType) && VarIs(value)) || IsFixedDataProperty(propertyType))) { *pProperty = value; if (markAsUsed) { - descriptor->UsedAsFixed = true; + descriptor->SetUsedAsFixed(true); } return true; } @@ -2626,7 +2626,7 @@ namespace Js DictionaryPropertyDescriptor* descriptor; if (propertyMap->TryGetReference(propertyRecord, &descriptor)) { - if (descriptor->Attributes & PropertyDeleted || !descriptor->IsAccessor || !descriptor->IsFixed) + if (descriptor->Attributes & PropertyDeleted || !descriptor->GetIsAccessor() || !descriptor->GetIsFixed()) { return false; } @@ -2636,12 +2636,12 @@ namespace Js { Assert(!IsInternalPropertyId(propertyRecord->GetPropertyId())); Var value = localSingletonInstance->GetSlot(accessorSlot); - if (value && IsFixedAccessorProperty(propertyType) && JavascriptFunction::Is(value)) + if (value && IsFixedAccessorProperty(propertyType) && VarIs(value)) { *pAccessor = value; if (markAsUsed) { - descriptor->UsedAsFixed = true; + descriptor->SetUsedAsFixed(true); } return true; } @@ -2681,15 +2681,15 @@ namespace Js // Even if we wrote a new value into this property (overwriting a previously fixed one), we don't // consider the new one fixed. This also means that it's ok to populate the inline caches for // this property from now on. - descriptor->IsFixed = false; + descriptor->SetIsFixed(false); - if (descriptor->UsedAsFixed) + if (descriptor->GetUsedAsFixed()) { // Invalidate any JIT-ed code that hard coded this method. No need to invalidate // any store field inline caches, because they have never been populated. PropertyId propertyId = TMapKey_GetPropertyId(instance->GetScriptContext(), propertyKey); instance->GetScriptContext()->GetThreadContext()->InvalidatePropertyGuards(propertyId); - descriptor->UsedAsFixed = false; + descriptor->SetUsedAsFixed(false); } } } @@ -2703,7 +2703,9 @@ namespace Js const PropertyRecord* propertyRecord = propertyMap->GetKeyAt(i); Output::Print(_u(" %s %d%d%d,"), propertyRecord->GetBuffer(), - descriptor.IsInitialized ? 1 : 0, descriptor.IsFixed ? 1 : 0, descriptor.UsedAsFixed ? 1 : 0); + descriptor.GetIsInitialized() ? 1 : 0, + descriptor.GetIsFixed() ? 1 : 0, + descriptor.GetUsedAsFixed() ? 1 : 0); } } @@ -2836,7 +2838,7 @@ namespace Js Js::PropertyId pid = iter.CurrentKey()->GetPropertyId(); #if ENABLE_FIXED_FIELDS - if ((!DynamicTypeHandler::ShouldMarkPropertyId_TTD(pid)) | (!descriptor.IsInitialized) | (descriptor.Attributes & PropertyDeleted)) + if ((!DynamicTypeHandler::ShouldMarkPropertyId_TTD(pid)) | (!descriptor.GetIsInitialized()) | (descriptor.Attributes & PropertyDeleted)) #else if ((!DynamicTypeHandler::ShouldMarkPropertyId_TTD(pid)) | (descriptor.Attributes & PropertyDeleted)) #endif @@ -2885,7 +2887,7 @@ namespace Js maxSlot = max(maxSlot, dIndex); #if ENABLE_FIXED_FIELDS - TTD::NSSnapType::SnapEntryDataKindTag tag = descriptor.IsInitialized ? TTD::NSSnapType::SnapEntryDataKindTag::Data : TTD::NSSnapType::SnapEntryDataKindTag::Uninitialized; + TTD::NSSnapType::SnapEntryDataKindTag tag = descriptor.GetIsInitialized() ? TTD::NSSnapType::SnapEntryDataKindTag::Data : TTD::NSSnapType::SnapEntryDataKindTag::Uninitialized; #else TTD::NSSnapType::SnapEntryDataKindTag tag = TTD::NSSnapType::SnapEntryDataKindTag::Data; #endif @@ -2894,7 +2896,7 @@ namespace Js else { #if ENABLE_FIXED_FIELDS - TTDAssert(descriptor.IsInitialized, "How can this not be initialized?"); + TTDAssert(descriptor.GetIsInitialized(), "How can this not be initialized?"); #endif T gIndex = descriptor.GetGetterPropertyIndex(); diff --git a/lib/Runtime/Types/DictionaryTypeHandler.h b/lib/Runtime/Types/DictionaryTypeHandler.h index 49320423afa..20affc8b09b 100644 --- a/lib/Runtime/Types/DictionaryTypeHandler.h +++ b/lib/Runtime/Types/DictionaryTypeHandler.h @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #pragma once @@ -20,7 +21,7 @@ namespace Js friend class DynamicObject; friend class DynamicTypeHandler; template friend class SimpleDictionaryTypeHandlerBase; - template friend class DictionaryTypeHandlerBase; + template friend class DictionaryTypeHandlerBase; // Explicit non leaf allocator as the key is non-leaf typedef JsUtil::BaseDictionary, RecyclerNonLeafAllocator, DictionarySizePolicy, PropertyRecordStringHashComparer> diff --git a/lib/Runtime/Types/DynamicObject.cpp b/lib/Runtime/Types/DynamicObject.cpp index c0e702bf755..8db1a109fc1 100644 --- a/lib/Runtime/Types/DynamicObject.cpp +++ b/lib/Runtime/Types/DynamicObject.cpp @@ -81,7 +81,7 @@ namespace Js #else dstSlots[i] = srcSlots[i]; #endif - Assert(!ThreadContext::IsOnStack(dstSlots[i])); + Assert(!ThreadContext::IsOnStack(dstSlots[i]) || TaggedInt::Is(dstSlots[i])); } if (propertyCount > inlineSlotCapacity) @@ -114,7 +114,7 @@ namespace Js Assert(!ThreadContext::IsOnStack(instance->auxSlots[i])); auxSlots[i] = instance->auxSlots[i]; #endif - Assert(!ThreadContext::IsOnStack(auxSlots[i])); + Assert(!ThreadContext::IsOnStack(auxSlots[i]) || TaggedInt::Is(dstSlots[i])); } } @@ -126,9 +126,9 @@ namespace Js // While the objectArray can be any array type, a DynamicObject that is created on the // stack will only have one of these three types (as these are also the only array types // that can be allocated on the stack). - Assert(Js::JavascriptArray::Is(instance->GetObjectArrayOrFlagsAsArray()) - || Js::JavascriptNativeIntArray::Is(instance->GetObjectArrayOrFlagsAsArray()) - || Js::JavascriptNativeFloatArray::Is(instance->GetObjectArrayOrFlagsAsArray()) + Assert(Js::JavascriptArray::IsNonES5Array(instance->GetObjectArrayOrFlagsAsArray()) + || Js::VarIs(instance->GetObjectArrayOrFlagsAsArray()) + || Js::VarIs(instance->GetObjectArrayOrFlagsAsArray()) ); // Since a deep copy was requested for this DynamicObject, deep copy the object array as well @@ -157,25 +157,21 @@ namespace Js return NewObject(recycler, type); } - bool DynamicObject::Is(Var aValue) + bool DynamicObject::IsBaseDynamicObject(Var aValue) { - return RecyclableObject::Is(aValue) && (RecyclableObject::UnsafeFromVar(aValue)->GetTypeId() == TypeIds_Object); + return VarIs(aValue) && (UnsafeVarTo(aValue)->GetTypeId() == TypeIds_Object); } - DynamicObject* DynamicObject::FromVar(Var aValue) + DynamicObject* DynamicObject::TryVarToBaseDynamicObject(Var aValue) { - RecyclableObject* obj = RecyclableObject::FromVar(aValue); - AssertMsg(obj->DbgIsDynamicObject(), "Ensure instance is actually a DynamicObject"); - AssertOrFailFast(DynamicType::Is(obj->GetTypeId())); - return static_cast(obj); + return IsBaseDynamicObject(aValue) ? UnsafeVarTo(aValue) : nullptr; } - DynamicObject* DynamicObject::UnsafeFromVar(Var aValue) + template <> bool VarIsImpl(RecyclableObject* obj) { - RecyclableObject* obj = RecyclableObject::UnsafeFromVar(aValue); - AssertMsg(obj->DbgIsDynamicObject(), "Ensure instance is actually a DynamicObject"); - Assert(DynamicType::Is(obj->GetTypeId())); - return static_cast(obj); + bool result = DynamicType::Is(obj->GetTypeId()); + Assert(result == obj->DbgIsDynamicObject()); + return result; } ArrayObject* DynamicObject::EnsureObjectArray() @@ -217,10 +213,16 @@ namespace Js return HasObjectArray() && GetObjectArrayOrFlagsAsArray()->GetLength() > 0; } + // Check if a Var is either a JavascriptArray* or ES5Array*. + bool DynamicObject::IsAnyTypedArray(const Var aValue) + { + return TypedArrayBase::Is(JavascriptOperators::GetTypeId(aValue)); + } + // Check if a typeId is of any array type (JavascriptArray or ES5Array). bool DynamicObject::IsAnyArrayTypeId(TypeId typeId) { - return JavascriptArray::Is(typeId) || typeId == TypeIds_ES5Array; + return JavascriptArray::IsNonES5Array(typeId) || typeId == TypeIds_ES5Array; } // Check if a Var is either a JavascriptArray* or ES5Array*. @@ -229,6 +231,11 @@ namespace Js return IsAnyArrayTypeId(JavascriptOperators::GetTypeId(aValue)); } + bool DynamicObject::IsAnyArray(DynamicObject* obj) + { + return IsAnyArrayTypeId(JavascriptOperators::GetTypeId(obj)); + } + BOOL DynamicObject::HasObjectArrayItem(uint32 index) { return HasObjectArray() && GetObjectArrayOrFlagsAsArray()->HasItem(index); @@ -802,6 +809,16 @@ namespace Js mutationBpValue = nullptr; } + Var embedderData = nullptr; + if (this->GetInternalProperty(this, InternalPropertyIds::EmbedderData, &embedderData, nullptr, this->GetScriptContext())) + { + this->SetInternalProperty(InternalPropertyIds::EmbedderData, nullptr, PropertyOperation_Force, nullptr); + } + else + { + embedderData = nullptr; + } + // If value of TypeOfPrototypeObjectDictionary was set undefined above, reset it to nullptr so we don't type cast it wrongly to TypeTransitionMap* or we don't marshal the non-Var dictionary below Var typeTransitionMap = nullptr; if (this->GetInternalProperty(this, InternalPropertyIds::TypeOfPrototypeObjectDictionary, &typeTransitionMap, nullptr, this->GetScriptContext())) @@ -825,6 +842,10 @@ namespace Js { this->SetInternalProperty(InternalPropertyIds::MutationBp, mutationBpValue, PropertyOperation_Force, nullptr); } + if (embedderData) + { + this->SetInternalProperty(InternalPropertyIds::EmbedderData, embedderData, PropertyOperation_Force, nullptr); + } } } @@ -845,11 +866,11 @@ namespace Js } return false; } - if (!from->GetTypeHandler()->IsPathTypeHandler()) + if (!from->GetTypeHandler()->IsObjectCopyable()) { if (PHASE_TRACE1(ObjectCopyPhase)) { - Output::Print(_u("ObjectCopy: Can't copy: Don't have PathTypeHandler\n")); + Output::Print(_u("ObjectCopy: Can't copy: from obj does not have copyable type handler\n")); } return false; } @@ -869,14 +890,6 @@ namespace Js } return false; } - if (PathTypeHandlerBase::FromTypeHandler(from->GetTypeHandler())->HasAccessors()) - { - if (PHASE_TRACE1(ObjectCopyPhase)) - { - Output::Print(_u("ObjectCopy: Can't copy: type handler has accessors\n")); - } - return false; - } if (this->GetPrototype() != from->GetPrototype()) { if (PHASE_TRACE1(ObjectCopyPhase)) @@ -885,14 +898,6 @@ namespace Js } return false; } - if (!from->GetTypeHandler()->AllPropertiesAreEnumerable()) - { - if (PHASE_TRACE1(ObjectCopyPhase)) - { - Output::Print(_u("ObjectCopy: Can't copy: from obj has non-enumerable properties\n")); - } - return false; - } if (from->IsExternal()) { if (PHASE_TRACE1(ObjectCopyPhase)) @@ -922,7 +927,7 @@ namespace Js } #endif - if (!PHASE_ON1(ObjectCopyPhase)) + if (PHASE_OFF1(ObjectCopyPhase)) { return false; } @@ -986,7 +991,7 @@ namespace Js { return false; } - if (HasObjectArray() || (JavascriptArray::Is(this) && JavascriptArray::FromVar(this)->GetLength() != 0)) + if (HasObjectArray() || (JavascriptArray::IsNonES5Array(this) && VarTo(this)->GetLength() != 0)) { return false; } @@ -1023,6 +1028,20 @@ namespace Js return GetRecycler()->CreateWeakReferenceHandle(this); } + DynamicObject * + DynamicObject::Copy(bool deepCopy) + { + size_t inlineSlotsSize = this->GetTypeHandler()->GetInlineSlotsSize(); + if (inlineSlotsSize) + { + return RecyclerNewPlusZ(GetRecycler(), inlineSlotsSize, DynamicObject, this, deepCopy); + } + else + { + return RecyclerNew(GetRecycler(), DynamicObject, this, deepCopy); + } + } + DynamicObject * DynamicObject::BoxStackInstance(DynamicObject * instance, bool deepCopy) { @@ -1035,15 +1054,7 @@ namespace Js return boxedInstance; } - size_t inlineSlotsSize = instance->GetTypeHandler()->GetInlineSlotsSize(); - if (inlineSlotsSize) - { - boxedInstance = RecyclerNewPlusZ(instance->GetRecycler(), inlineSlotsSize, DynamicObject, instance, deepCopy); - } - else - { - boxedInstance = RecyclerNew(instance->GetRecycler(), DynamicObject, instance, deepCopy); - } + boxedInstance = instance->Copy(deepCopy); *boxedInstanceRef = boxedInstance; return boxedInstance; diff --git a/lib/Runtime/Types/DynamicObject.h b/lib/Runtime/Types/DynamicObject.h index 797fb48d153..885f281f727 100644 --- a/lib/Runtime/Types/DynamicObject.h +++ b/lib/Runtime/Types/DynamicObject.h @@ -145,9 +145,11 @@ namespace Js public: static DynamicObject * New(Recycler * recycler, DynamicType * type); - static bool Is(Var aValue); - static DynamicObject* FromVar(Var value); - static DynamicObject* UnsafeFromVar(Var value); + // Return whether the type is exactly DynamicObject, not some subclass (for more inclusive check use VarIs) + static bool IsBaseDynamicObject(Var aValue); + + // Returns the object if it is exactly DynamicObject, not some subclass. Otherwise returns null. + static DynamicObject* TryVarToBaseDynamicObject(Var aValue); void EnsureSlots(int oldCount, int newCount, ScriptContext * scriptContext, DynamicTypeHandler * newTypeHandler = nullptr); void EnsureSlots(int newCount, ScriptContext *scriptContext); @@ -186,6 +188,10 @@ namespace Js // Check if a Var is either a JavascriptArray* or ES5Array*. static bool IsAnyArray(const Var aValue); + static bool IsAnyArray(DynamicObject* obj); + + // Check if a Var is a typedarray. + static bool IsAnyTypedArray(const Var aValue); bool UsesObjectArrayOrFlagsAsFlags() const { @@ -327,6 +333,8 @@ namespace Js RecyclerWeakReference* CreateWeakReferenceToSelf(); void SetObjectArray(ArrayObject* objectArray); + + virtual DynamicObject* Copy(bool deepCopy); protected: BOOL GetEnumeratorWithPrefix(JavascriptEnumerator * prefixEnumerator, JavascriptStaticEnumerator * enumerator, EnumeratorFlags flags, ScriptContext * scriptContext, EnumeratorCache * enumeratorCache); @@ -342,6 +350,7 @@ namespace Js static DynamicObject * BoxStackInstance(DynamicObject * instance, bool deepCopy); private: + ArrayObject* EnsureObjectArray(); ArrayObject* GetObjectArrayOrFlagsAsArray() const { return objectArray; } @@ -384,4 +393,6 @@ namespace Js } }; + + template <> bool VarIsImpl(RecyclableObject* obj); } // namespace Js diff --git a/lib/Runtime/Types/DynamicObjectPropertyEnumerator.cpp b/lib/Runtime/Types/DynamicObjectPropertyEnumerator.cpp index 7fe24f3b54c..ca388f418ff 100644 --- a/lib/Runtime/Types/DynamicObjectPropertyEnumerator.cpp +++ b/lib/Runtime/Types/DynamicObjectPropertyEnumerator.cpp @@ -73,7 +73,7 @@ namespace Js Assert(data != nullptr); Assert(data->scriptContext == this->scriptContext); // The cache data script context should be the same as request context - if (data->enumNonEnumerable == GetEnumNonEnumerable()) + if (data->enumNonEnumerable == GetEnumNonEnumerable() && data->enumSymbols == GetEnumSymbols()) { Initialize(type, data, data->propertyCount); return true; @@ -99,7 +99,7 @@ namespace Js return false; } - // Reload the type after EnsureObjecteReady + // Reload the type after EnsureObjectReady type = object->GetDynamicType(); if (!type->PrepareForTypeSnapshotEnumeration()) { @@ -198,7 +198,7 @@ namespace Js if (propertyStringName) { - PropertyString* propertyString = PropertyString::TryFromVar(propertyStringName); + PropertyString* propertyString = JavascriptOperators::TryFromVar(propertyStringName); if (propertyString != nullptr) { Assert(enumeratedCount < this->initialPropertyCount); @@ -280,4 +280,4 @@ namespace Js } return nullptr; } -} \ No newline at end of file +} diff --git a/lib/Runtime/Types/DynamicObjectPropertyEnumerator.h b/lib/Runtime/Types/DynamicObjectPropertyEnumerator.h index c41fd7aec32..a76b1900610 100644 --- a/lib/Runtime/Types/DynamicObjectPropertyEnumerator.h +++ b/lib/Runtime/Types/DynamicObjectPropertyEnumerator.h @@ -71,4 +71,4 @@ namespace Js static uint32 GetOffsetOfCachedDataCompleted() { return offsetof(CachedData, completed); } static uint32 GetOffsetOfCachedDataEnumNonEnumerable() { return offsetof(CachedData, enumNonEnumerable); } }; -}; \ No newline at end of file +}; diff --git a/lib/Runtime/Types/DynamicType.cpp b/lib/Runtime/Types/DynamicType.cpp index 9f1a1943775..d2568c4a2b2 100644 --- a/lib/Runtime/Types/DynamicType.cpp +++ b/lib/Runtime/Types/DynamicType.cpp @@ -454,7 +454,7 @@ namespace Js { if (JavascriptConversion::IsCallable(toPrimitiveFunction)) { - RecyclableObject* toStringFunction = RecyclableObject::FromVar(toPrimitiveFunction); + RecyclableObject* toStringFunction = VarTo(toPrimitiveFunction); ThreadContext * threadContext = requestContext->GetThreadContext(); Var aResult = threadContext->ExecuteImplicitCall(toStringFunction, ImplicitCall_ToPrimitive, [=]() -> Js::Var @@ -487,7 +487,6 @@ namespace Js if (this->HasObjectArray()) { arrayObject = this->GetObjectArrayOrFlagsAsArray(); - Assert(arrayObject->GetPropertyCount() == 0); } return enumerator->Initialize(prefixEnumerator, arrayObject, this, flags, requestContext, enumeratorCache); } diff --git a/lib/Runtime/Types/ES5ArrayTypeHandler.cpp b/lib/Runtime/Types/ES5ArrayTypeHandler.cpp index a52b01c4b5d..80d418dbed0 100644 --- a/lib/Runtime/Types/ES5ArrayTypeHandler.cpp +++ b/lib/Runtime/Types/ES5ArrayTypeHandler.cpp @@ -267,7 +267,7 @@ namespace Js template void ES5ArrayTypeHandlerBase::SetInstanceTypeHandler(DynamicObject* instance, bool hasChanged) { - Assert(JavascriptArray::Is(instance)); + Assert(JavascriptArray::IsNonES5Array(instance)); if (this->GetFlags() & DynamicTypeHandler::IsPrototypeFlag) { // We have ES5 array has array/object prototype, we can't use array fast path for set @@ -280,7 +280,7 @@ namespace Js #if ENABLE_COPYONACCESS_ARRAY JavascriptLibrary::CheckAndConvertCopyOnAccessNativeIntArray(instance); #endif - JavascriptArray * arrayInstance = JavascriptArray::EnsureNonNativeArray(JavascriptArray::FromVar(instance)); + JavascriptArray * arrayInstance = JavascriptArray::EnsureNonNativeArray(VarTo(instance)); #if DBG bool doneConversion = false; Js::Type* oldType = arrayInstance->GetType(); @@ -441,7 +441,7 @@ namespace Js } else if (descriptor->Setter) { - RecyclableObject* func = RecyclableObject::FromVar(descriptor->Setter); + RecyclableObject* func = VarTo(descriptor->Setter); // TODO : request context JavascriptOperators::CallSetter(func, instance, value, NULL); } @@ -515,7 +515,7 @@ namespace Js } else if (descriptor->Setter) { - RecyclableObject* func = RecyclableObject::FromVar(descriptor->Setter); + RecyclableObject* func = VarTo(descriptor->Setter); // TODO : request context JavascriptOperators::CallSetter(func, instance, value, NULL); } @@ -724,7 +724,7 @@ namespace Js if (descriptor->Getter) { - RecyclableObject* func = RecyclableObject::FromVar(descriptor->Getter); + RecyclableObject* func = VarTo(descriptor->Getter); *value = Js::JavascriptOperators::CallGetter(func, originalInstance, requestContext); } else @@ -749,7 +749,7 @@ namespace Js return None; } - if (HasDataItem(ES5Array::FromVar(instance), index)) + if (HasDataItem(VarTo(instance), index)) { // not a setter but shadows return (descriptor->Attributes & PropertyWritable) ? WritableData : Data; @@ -760,7 +760,7 @@ namespace Js return Accessor; } } - else if (HasDataItem(ES5Array::FromVar(instance), index)) + else if (HasDataItem(VarTo(instance), index)) { return (GetDataItemAttributes() & PropertyWritable) ? WritableData : Data; } @@ -804,7 +804,7 @@ namespace Js uint32 index; if (scriptContext->IsNumericPropertyId(propertyId, &index)) { - return GetItem(ES5Array::FromVar(instance), instance, index, value, requestContext); + return GetItem(VarTo(instance), instance, index, value, requestContext); } return __super::GetProperty(instance, originalInstance, propertyId, value, info, requestContext); @@ -850,7 +850,7 @@ namespace Js uint32 index; if (scriptContext->IsNumericPropertyId(propertyId, &index)) { - return DeleteItem(ES5Array::FromVar(instance), instance, index, flags); + return DeleteItem(VarTo(instance), instance, index, flags); } return __super::DeleteProperty(instance, propertyId, flags); @@ -859,49 +859,49 @@ namespace Js template BOOL ES5ArrayTypeHandlerBase::HasItem(DynamicObject* instance, uint32 index) { - return HasItem(ES5Array::FromVar(instance), index); + return HasItem(VarTo(instance), index); } template BOOL ES5ArrayTypeHandlerBase::SetItem(DynamicObject* instance, uint32 index, Var value, PropertyOperationFlags flags) { - return SetItem(ES5Array::FromVar(instance), instance, index, value, flags); + return SetItem(VarTo(instance), instance, index, value, flags); } template BOOL ES5ArrayTypeHandlerBase::SetItemWithAttributes(DynamicObject* instance, uint32 index, Var value, PropertyAttributes attributes) { - return SetItemWithAttributes(ES5Array::FromVar(instance), instance, index, value, attributes); + return SetItemWithAttributes(VarTo(instance), instance, index, value, attributes); } template BOOL ES5ArrayTypeHandlerBase::SetItemAttributes(DynamicObject* instance, uint32 index, PropertyAttributes attributes) { - return SetItemAttributes(ES5Array::FromVar(instance), instance, index, attributes); + return SetItemAttributes(VarTo(instance), instance, index, attributes); } template BOOL ES5ArrayTypeHandlerBase::SetItemAccessors(DynamicObject* instance, uint32 index, Var getter, Var setter) { - return SetItemAccessors(ES5Array::FromVar(instance), instance, index, getter, setter); + return SetItemAccessors(VarTo(instance), instance, index, getter, setter); } template BOOL ES5ArrayTypeHandlerBase::DeleteItem(DynamicObject* instance, uint32 index, PropertyOperationFlags flags) { - return DeleteItem(ES5Array::FromVar(instance), instance, index, flags); + return DeleteItem(VarTo(instance), instance, index, flags); } template BOOL ES5ArrayTypeHandlerBase::GetItem(DynamicObject* instance, Var originalInstance, uint32 index, Var* value, ScriptContext* requestContext) { - return GetItem(ES5Array::FromVar(instance), instance, originalInstance, index, value, requestContext); + return GetItem(VarTo(instance), instance, originalInstance, index, value, requestContext); } template DescriptorFlags ES5ArrayTypeHandlerBase::GetItemSetter(DynamicObject* instance, uint32 index, Var* setterValue, ScriptContext* requestContext) { - return GetItemSetter(ES5Array::FromVar(instance), instance, index, setterValue, requestContext); + return GetItemSetter(VarTo(instance), instance, index, setterValue, requestContext); } template @@ -1084,7 +1084,7 @@ namespace Js } else { - if (!HasDataItem(ES5Array::FromVar(instance), index)) + if (!HasDataItem(VarTo(instance), index)) { return false; } @@ -1203,7 +1203,7 @@ namespace Js uint32 index; if (scriptContext->IsNumericPropertyId(propertyId, &index)) { - return GetItemAccessors(ES5Array::FromVar(instance), instance, index, getter, setter); + return GetItemAccessors(VarTo(instance), instance, index, getter, setter); } return __super::GetAccessors(instance, propertyId, getter, setter); @@ -1227,7 +1227,7 @@ namespace Js template BOOL ES5ArrayTypeHandlerBase::FreezeImpl(DynamicObject* instance, bool isConvertedType) { - ES5Array* arr = ES5Array::FromVar(instance); + ES5Array* arr = VarTo(instance); for (int i = 0; i < indexPropertyMap->Count(); i++) { @@ -1282,7 +1282,7 @@ namespace Js // Check data item not in map if (this->GetDataItemAttributes() & PropertyConfigurable) { - if (HasAnyDataItemNotInMap(ES5Array::FromVar(instance))) + if (HasAnyDataItemNotInMap(VarTo(instance))) { return false; } @@ -1345,7 +1345,7 @@ namespace Js return false; } - return IsObjectArrayFrozen(ES5Array::FromVar(instance)); + return IsObjectArrayFrozen(VarTo(instance)); } template @@ -1356,7 +1356,7 @@ namespace Js uint32 index; if (scriptContext->IsNumericPropertyId(propertyId, &index)) { - return SetItemAttributes(ES5Array::FromVar(instance), instance, index, attributes); + return SetItemAttributes(VarTo(instance), instance, index, attributes); } return __super::SetAttributes(instance, propertyId, attributes); diff --git a/lib/Runtime/Types/ES5ArrayTypeHandler.h b/lib/Runtime/Types/ES5ArrayTypeHandler.h index e3216329b3b..1eb1a377a4b 100644 --- a/lib/Runtime/Types/ES5ArrayTypeHandler.h +++ b/lib/Runtime/Types/ES5ArrayTypeHandler.h @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #pragma once @@ -98,8 +99,8 @@ namespace Js template friend class SimpleTypeHandler; template friend class SimpleDictionaryTypeHandlerBase; - template friend class DictionaryTypeHandlerBase; - template friend class ES5ArrayTypeHandlerBase; + template friend class DictionaryTypeHandlerBase; + template friend class ES5ArrayTypeHandlerBase; private: Field(IndexPropertyDescriptorMap*) indexPropertyMap; diff --git a/lib/Runtime/Types/EdgeJavascriptTypeId.h b/lib/Runtime/Types/EdgeJavascriptTypeId.h deleted file mode 100644 index 5f26b83cc61..00000000000 --- a/lib/Runtime/Types/EdgeJavascriptTypeId.h +++ /dev/null @@ -1,133 +0,0 @@ -//------------------------------------------------------------------------------------------------------- -// Copyright (C) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. -//------------------------------------------------------------------------------------------------------- -enum TypeId -{ - TypeIds_Undefined = 0, - TypeIds_Null = 1, - - TypeIds_UndefinedOrNull = TypeIds_Null, - - TypeIds_Boolean = 2, - - // backend typeof() == "number" is true for typeIds - // between TypeIds_FirstNumberType <= typeId <= TypeIds_LastNumberType - TypeIds_Integer = 3, - TypeIds_FirstNumberType = TypeIds_Integer, - TypeIds_Number = 4, - TypeIds_Int64Number = 5, - TypeIds_UInt64Number = 6, - TypeIds_LastNumberType = TypeIds_UInt64Number, - - TypeIds_String = 7, - TypeIds_Symbol = 8, - - TypeIds_LastToPrimitiveType = TypeIds_Symbol, - - TypeIds_Enumerator = 9, - TypeIds_VariantDate = 10, - - // SIMD types - //[Please maintain Float32x4 as the first SIMDType and Bool8x16 as the last] - TypeIds_SIMDFloat32x4 = 11, - TypeIds_SIMDFloat64x2 = 12, - TypeIds_SIMDInt32x4 = 13, - TypeIds_SIMDInt16x8 = 14, - TypeIds_SIMDInt8x16 = 15, - - TypeIds_SIMDUint32x4 = 16, - TypeIds_SIMDUint16x8 = 17, - TypeIds_SIMDUint8x16 = 18, - - TypeIds_SIMDBool32x4 = 19, - TypeIds_SIMDBool16x8 = 20, - TypeIds_SIMDBool8x16 = 21, - TypeIds_LastJavascriptPrimitiveType = TypeIds_SIMDBool8x16, - - TypeIds_HostDispatch = 22, - TypeIds_UnscopablesWrapperObject = 23, - TypeIds_UndeclBlockVar = 24, - - TypeIds_LastStaticType = TypeIds_UndeclBlockVar, - - TypeIds_Proxy = 25, - TypeIds_Function = 26, - - // - // The backend expects only objects whose typeof() === "object" to have a - // TypeId >= TypeIds_Object. Only 'null' is a special case because it - // has a static type. - // - TypeIds_Object = 27, - TypeIds_Array = 28, - TypeIds_ArrayFirst = TypeIds_Array, - TypeIds_NativeIntArray = 29, - #if ENABLE_COPYONACCESS_ARRAY - TypeIds_CopyOnAccessNativeIntArray = 30, - #endif - TypeIds_NativeFloatArray = 31, - TypeIds_ArrayLast = TypeIds_NativeFloatArray, - TypeIds_ES5Array = 32, - TypeIds_ArrayLastWithES5 = TypeIds_ES5Array, - TypeIds_Date = 33, - TypeIds_RegEx = 34, - TypeIds_Error = 35, - TypeIds_BooleanObject = 36, - TypeIds_NumberObject = 37, - TypeIds_StringObject = 38, - TypeIds_SIMDObject = 39, - TypeIds_Arguments = 40, - TypeIds_ArrayBuffer = 41, - TypeIds_Int8Array = 42, - TypeIds_TypedArrayMin = TypeIds_Int8Array, - TypeIds_TypedArraySCAMin = TypeIds_Int8Array, // Min SCA supported TypedArray TypeId - TypeIds_Uint8Array = 43, - TypeIds_Uint8ClampedArray = 44, - TypeIds_Int16Array = 45, - TypeIds_Uint16Array = 46, - TypeIds_Int32Array = 47, - TypeIds_Uint32Array = 48, - TypeIds_Float32Array = 49, - TypeIds_Float64Array = 50, - TypeIds_TypedArraySCAMax = TypeIds_Float64Array, // Max SCA supported TypedArray TypeId - TypeIds_Int64Array = 51, - TypeIds_Uint64Array = 52, - TypeIds_CharArray = 53, - TypeIds_BoolArray = 54, - TypeIds_TypedArrayMax = TypeIds_BoolArray, - TypeIds_EngineInterfaceObject = 55, - TypeIds_DataView = 56, - TypeIds_WinRTDate = 57, - TypeIds_Map = 58, - TypeIds_Set = 59, - TypeIds_WeakMap = 60, - TypeIds_WeakSet = 61, - TypeIds_SymbolObject = 62, - TypeIds_ArrayIterator = 63, - TypeIds_MapIterator = 64, - TypeIds_SetIterator = 65, - TypeIds_StringIterator = 66, - TypeIds_JavascriptEnumeratorIterator = 67, /* Unused */ - TypeIds_Generator = 68, - TypeIds_Promise = 69, - TypeIds_SharedArrayBuffer = 70, - - TypeIds_WebAssemblyModule = 71, - TypeIds_WebAssemblyInstance = 72, - TypeIds_WebAssemblyMemory = 73, - TypeIds_WebAssemblyTable = 74, - - TypeIds_LastBuiltinDynamicObject = TypeIds_WebAssemblyTable, - TypeIds_GlobalObject = 75, - TypeIds_ModuleRoot = 76, - TypeIds_LastTrueJavascriptObjectType = TypeIds_ModuleRoot, - - TypeIds_HostObject = 77, - TypeIds_ActivationObject = 78, - TypeIds_SpreadArgument = 79, - TypeIds_ModuleNamespace = 80, - TypeIds_ListIterator = 81, - TypeIds_ExternalIterator = 82, - TypeIds_Limit //add a new TypeId before TypeIds_Limit or before TypeIds_LastTrueJavascriptObjectType -}; diff --git a/lib/Runtime/Types/JavascriptEnumerator.cpp b/lib/Runtime/Types/JavascriptEnumerator.cpp index c4531c344b3..61746a9ff5d 100644 --- a/lib/Runtime/Types/JavascriptEnumerator.cpp +++ b/lib/Runtime/Types/JavascriptEnumerator.cpp @@ -11,22 +11,8 @@ namespace Js Assert(scriptContext != NULL); } - bool JavascriptEnumerator::Is(Var aValue) + template <> bool VarIsImpl(RecyclableObject* obj) { - return JavascriptOperators::GetTypeId(aValue) == TypeIds_Enumerator; - } - - JavascriptEnumerator* JavascriptEnumerator::FromVar(Var aValue) - { - AssertOrFailFastMsg(Is(aValue), "Ensure var is actually a 'JavascriptEnumerator'"); - - return static_cast(aValue); - } - - JavascriptEnumerator* JavascriptEnumerator::UnsafeFromVar(Var aValue) - { - AssertMsg(Is(aValue), "Ensure var is actually a 'JavascriptEnumerator'"); - - return static_cast(aValue); + return JavascriptOperators::GetTypeId(obj) == TypeIds_Enumerator; } } diff --git a/lib/Runtime/Types/JavascriptEnumerator.h b/lib/Runtime/Types/JavascriptEnumerator.h index 312c036f29a..87a76a14355 100644 --- a/lib/Runtime/Types/JavascriptEnumerator.h +++ b/lib/Runtime/Types/JavascriptEnumerator.h @@ -37,10 +37,7 @@ namespace Js { // as a reference and then remove it. If you have already made the edits before // seeing this comment please just consolidate the changes. virtual JavascriptString * MoveAndGetNext(PropertyId& propertyId, PropertyAttributes* attributes = nullptr) = 0; - - - static bool Is(Var aValue); - static JavascriptEnumerator* FromVar(Var varValue); - static JavascriptEnumerator* UnsafeFromVar(Var varValue); }; + + template <> bool VarIsImpl(RecyclableObject* obj); } diff --git a/lib/Runtime/Types/NullTypeHandler.cpp b/lib/Runtime/Types/NullTypeHandler.cpp index e983c4145db..4b2c1b34d9a 100644 --- a/lib/Runtime/Types/NullTypeHandler.cpp +++ b/lib/Runtime/Types/NullTypeHandler.cpp @@ -318,7 +318,7 @@ namespace Js DynamicTypeHandler* NullTypeHandlerBase::ConvertToTypeWithItemAttributes(DynamicObject* instance) { - return JavascriptArray::Is(instance) ? + return JavascriptArray::IsNonES5Array(instance) ? ConvertToES5ArrayType(instance) : ConvertToDictionaryType(instance); } diff --git a/lib/Runtime/Types/PathTypeHandler.cpp b/lib/Runtime/Types/PathTypeHandler.cpp index c329b40cd95..0f17a902b0d 100644 --- a/lib/Runtime/Types/PathTypeHandler.cpp +++ b/lib/Runtime/Types/PathTypeHandler.cpp @@ -58,6 +58,42 @@ namespace Js return static_cast((propertyId << ObjectSlotAttr_BitSize) | static_cast(attributes)); } + bool PathTypeSuccessorInfo::GetSuccessor(const PathTypeSuccessorKey successorKey, RecyclerWeakReference ** typeWeakRef) const + { + if (IsSingleSuccessor()) + { + return static_cast(this)->GetSuccessor(successorKey, typeWeakRef); + } + else + { + return static_cast(this)->GetSuccessor(successorKey, typeWeakRef); + } + } + + void PathTypeSuccessorInfo::SetSuccessor(DynamicType * type, const PathTypeSuccessorKey successorKey, RecyclerWeakReference * typeWeakRef, ScriptContext * scriptContext) + { + if (IsSingleSuccessor()) + { + static_cast(this)->SetSuccessor(type, successorKey, typeWeakRef, scriptContext); + } + else + { + static_cast(this)->SetSuccessor(type, successorKey, typeWeakRef, scriptContext); + } + } + + void PathTypeSuccessorInfo::ReplaceSuccessor(DynamicType * type, PathTypeSuccessorKey successorKey, RecyclerWeakReference * typeWeakRef) + { + if (IsSingleSuccessor()) + { + static_cast(this)->ReplaceSuccessor(type, successorKey, typeWeakRef); + } + else + { + static_cast(this)->ReplaceSuccessor(type, successorKey, typeWeakRef); + } + } + template void PathTypeSuccessorInfo::MapSuccessors(Fn fn) { @@ -199,12 +235,20 @@ namespace Js DynamicTypeHandler(slotCapacity, inlineSlotCapacity, offsetOfInlineSlots, DefaultFlags | (isLocked ? IsLockedFlag : 0) | (isShared ? (MayBecomeSharedFlag | IsSharedFlag) : 0)), typePath(typePath), predecessorType(predecessorType), - successorInfo(nullptr) + successorInfo(nullptr), + hasUserDefinedCtor(false), + hasInternalProperty(false) { Assert(pathLength <= slotCapacity); Assert(inlineSlotCapacity <= slotCapacity); SetUnusedBytesValue(pathLength); - isNotPathTypeHandlerOrHasUserDefinedCtor = predecessorType == nullptr ? false : predecessorType->GetTypeHandler()->GetIsNotPathTypeHandlerOrHasUserDefinedCtor(); + + if (predecessorType != nullptr && predecessorType->GetTypeHandler()->IsPathTypeHandler()) + { + auto* handler = PathTypeHandlerBase::FromTypeHandler(predecessorType->GetTypeHandler()); + hasUserDefinedCtor = handler->hasUserDefinedCtor; + hasInternalProperty = handler->hasInternalProperty; + } } int PathTypeHandlerBase::GetPropertyCount() @@ -1825,6 +1869,11 @@ namespace Js BOOL PathTypeHandlerBase::SetAttributesAtIndex(DynamicObject* instance, PropertyId propertyId, PropertyIndex index, PropertyAttributes attributes) { + if (attributes & PropertyDeleted) + { + DeleteProperty(instance, propertyId, PropertyOperation_None); + return true; + } return SetAttributesHelper(instance, propertyId, index, GetAttributeArray(), PropertyAttributesToObjectSlotAttributes(attributes)); } @@ -2135,7 +2184,12 @@ namespace Js if (key.GetPropertyId() == PropertyIds::constructor) { - nextPath->isNotPathTypeHandlerOrHasUserDefinedCtor = true; + nextPath->hasUserDefinedCtor = true; + } + + if (IsInternalPropertyId(key.GetPropertyId())) + { + nextPath->hasInternalProperty = true; } #ifdef PROFILE_TYPES @@ -2397,7 +2451,7 @@ namespace Js #ifdef PROFILE_TYPES instance->GetScriptContext()->convertPathToDictionaryItemAttributesCount++; #endif - return JavascriptArray::Is(instance) ? + return JavascriptArray::IsNonES5Array(instance) ? ConvertToES5ArrayType(instance) : ConvertToDictionaryType(instance); } @@ -2648,6 +2702,44 @@ namespace Js return clonedTypeHandler; } + PathTypeHandlerBase * + PathTypeHandlerBase::BuildPathTypeFromNewRoot(DynamicObject * instance, DynamicType ** typeRef) + { + Assert(typeRef); + DynamicType * type = *typeRef; + ScriptContext * scriptContext = type->GetScriptContext(); + + PathTypeHandlerBase* newTypeHandler = PathTypeHandlerNoAttr::New(scriptContext, scriptContext->GetLibrary()->GetRootPath(), 0, static_cast(this->GetSlotCapacity()), this->GetInlineSlotCapacity(), this->GetOffsetOfInlineSlots(), GetIsLocked(), GetIsShared()); + newTypeHandler->SetFlags(MayBecomeSharedFlag, GetFlags()); + type->typeHandler = newTypeHandler; + + // Promote type based on existing properties to get new type which will be cached and shared + ObjectSlotAttributes * attributes = this->GetAttributeArray(); + for (PropertyIndex propertyIndex = 0; propertyIndex < GetPathLength(); propertyIndex++) + { + Js::PropertyId propertyId = GetPropertyId(scriptContext, propertyIndex); + ObjectSlotAttributes attr = attributes ? attributes[propertyIndex] : ObjectSlotAttr_Default; + type = newTypeHandler->PromoteType(type, PathTypeSuccessorKey(propertyId, attr), true, scriptContext, instance, &propertyIndex); + newTypeHandler = PathTypeHandlerBase::FromTypeHandler(type->GetTypeHandler()); + if (attr == ObjectSlotAttr_Setter) + { + PropertyIndex getterIndex = newTypeHandler->GetTypePath()->LookupInline(propertyId, newTypeHandler->GetPathLength()); + Assert(getterIndex != Constants::NoSlot); + if (attributes[getterIndex] & ObjectSlotAttr_Accessor) + { + newTypeHandler->SetSetterSlot(getterIndex, (PathTypeSetterSlotIndex)(newTypeHandler->GetPathLength() - 1)); + } + } + } + Assert(newTypeHandler->GetPathLength() == GetPathLength()); + Assert(newTypeHandler->GetPropertyCount() == GetPropertyCount()); + Assert(newTypeHandler->GetSetterCount() == GetSetterCount()); + + *typeRef = type; + + return newTypeHandler; + } + void PathTypeHandlerBase::SetPrototype(DynamicObject* instance, RecyclableObject* newPrototype) { // No typesharing for ExternalType @@ -2660,26 +2752,36 @@ namespace Js return; } + ScriptContext* scriptContext = instance->GetScriptContext(); + bool useCache = scriptContext == newPrototype->GetScriptContext(); + + TypeTransitionMap * oldTypeToPromotedTypeMap = nullptr; + bool hasMap = false; + if (useCache) + { + hasMap = newPrototype->GetInternalProperty(newPrototype, Js::InternalPropertyIds::TypeOfPrototypeObjectDictionary, (Js::Var*)&oldTypeToPromotedTypeMap, nullptr, scriptContext); + } + + PathTypeHandlerBase *_this = PathTypeHandlerBase::FromTypeHandler(instance->GetTypeHandler()); + _this->SetPrototypeHelper(instance, newPrototype, hasMap ? oldTypeToPromotedTypeMap : nullptr, useCache, scriptContext); + } + + void PathTypeHandlerBase::SetPrototypeHelper(DynamicObject* instance, RecyclableObject* newPrototype, TypeTransitionMap* oldTypeToPromotedTypeMap, bool useCache, ScriptContext *scriptContext) + { const bool useObjectHeaderInlining = IsObjectHeaderInlined(this->GetOffsetOfInlineSlots()); uint16 requestedInlineSlotCapacity = this->GetInlineSlotCapacity(); uint16 roundedInlineSlotCapacity = (useObjectHeaderInlining ? DynamicTypeHandler::RoundUpObjectHeaderInlinedInlineSlotCapacity(requestedInlineSlotCapacity) : DynamicTypeHandler::RoundUpInlineSlotCapacity(requestedInlineSlotCapacity)); - ScriptContext* scriptContext = instance->GetScriptContext(); DynamicType* cachedDynamicType = nullptr; DynamicType* oldType = instance->GetDynamicType(); - bool useCache = instance->GetScriptContext() == newPrototype->GetScriptContext(); - - TypeTransitionMap * oldTypeToPromotedTypeMap = nullptr; #if DBG DynamicType * oldCachedType = nullptr; char16 reason[1024]; swprintf_s(reason, 1024, _u("Cache not populated.")); #endif - if (useCache && newPrototype->GetInternalProperty(newPrototype, Js::InternalPropertyIds::TypeOfPrototypeObjectDictionary, (Js::Var*)&oldTypeToPromotedTypeMap, nullptr, scriptContext) - && oldTypeToPromotedTypeMap != nullptr - ) + if (oldTypeToPromotedTypeMap != nullptr) { AssertOrFailFast((Js::Var)oldTypeToPromotedTypeMap != scriptContext->GetLibrary()->GetUndefined()); oldTypeToPromotedTypeMap = reinterpret_cast(oldTypeToPromotedTypeMap); @@ -2723,39 +2825,16 @@ namespace Js if (cachedDynamicType == nullptr) { - PathTypeHandlerBase* newTypeHandler = PathTypeHandlerNoAttr::New(scriptContext, scriptContext->GetLibrary()->GetRootPath(), 0, static_cast(this->GetSlotCapacity()), this->GetInlineSlotCapacity(), this->GetOffsetOfInlineSlots(), GetIsLocked(), GetIsShared()); - newTypeHandler->SetFlags(MayBecomeSharedFlag, GetFlags()); - cachedDynamicType = instance->DuplicateType(); cachedDynamicType->SetPrototype(newPrototype); - cachedDynamicType->typeHandler = newTypeHandler; + this->BuildPathTypeFromNewRoot(instance, &cachedDynamicType); - // Make type locked, shared only if we are using cache if (useCache) { + // Make type locked, shared only if we are using cache cachedDynamicType->LockType(); cachedDynamicType->ShareType(); - } - // Promote type based on existing properties to get new type which will be cached and shared - ObjectSlotAttributes * attributes = this->GetAttributeArray(); - for (PropertyIndex propertyIndex = 0; propertyIndex < GetPathLength(); propertyIndex++) - { - Js::PropertyId propertyId = GetPropertyId(scriptContext, propertyIndex); - ObjectSlotAttributes attr = attributes ? attributes[propertyIndex] : ObjectSlotAttr_Default; - cachedDynamicType = newTypeHandler->PromoteType(cachedDynamicType, PathTypeSuccessorKey(propertyId, attr), true, scriptContext, instance, &propertyIndex); - newTypeHandler = PathTypeHandlerBase::FromTypeHandler(cachedDynamicType->GetTypeHandler()); - if (attr == ObjectSlotAttr_Setter) - { - newTypeHandler->SetSetterSlot(newTypeHandler->GetTypePath()->LookupInline(propertyId, newTypeHandler->GetPathLength()), (PathTypeSetterSlotIndex)(newTypeHandler->GetPathLength() - 1)); - } - } - Assert(newTypeHandler->GetPathLength() == GetPathLength()); - Assert(newTypeHandler->GetPropertyCount() == GetPropertyCount()); - Assert(newTypeHandler->GetSetterCount() == GetSetterCount()); - - if (useCache) - { if (oldTypeToPromotedTypeMap == nullptr) { oldTypeToPromotedTypeMap = RecyclerNew(instance->GetRecycler(), TypeTransitionMap, instance->GetRecycler(), 2); @@ -3100,7 +3179,7 @@ namespace Js if (ShouldFixAnyProperties() && CanBeSingletonInstance(instance)) { bool markAsFixed = !isNonFixed && !IsInternalPropertyId(propertyId) && - (JavascriptFunction::Is(value) ? ShouldFixMethodProperties() || ShouldFixAccessorProperties() : + (VarIs(value) ? ShouldFixMethodProperties() || ShouldFixAccessorProperties() : (ShouldFixDataProperties() && CheckHeuristicsForFixedDataProps(instance, propertyRecord, propertyId, value))); // Mark the newly added field as fixed and prevent population of inline caches. @@ -3238,7 +3317,7 @@ namespace Js } Var value = this->GetTypePath()->GetSingletonFixedFieldAt(index, GetPathLength(), requestContext); - if (value && ((IsFixedMethodProperty(propertyType) && JavascriptFunction::Is(value)) || IsFixedDataProperty(propertyType))) + if (value && ((IsFixedMethodProperty(propertyType) && VarIs(value)) || IsFixedDataProperty(propertyType))) { *pProperty = value; if (markAsUsed) @@ -3657,7 +3736,8 @@ namespace Js Assert(setters != nullptr); PathTypeSetterSlotIndex setterSlot = setters[propertyIndex]; Assert(setterSlot != NoSetterSlot && setterSlot < GetPathLength()); - *setterValue = DynamicObject::FromVar(instance)->GetSlot(setterSlot); + AssertOrFailFast(VarIsCorrectType(instance)); + *setterValue = instance->GetSlot(setterSlot); PropertyValueInfo::Set(info, instance, setterSlot, ObjectSlotAttributesToPropertyAttributes(attr), InlineCacheSetterFlag); return Accessor; } @@ -3738,7 +3818,7 @@ namespace Js CacheOperators::CachePropertyReadForGetter(info, originalInstance, propertyId, requestContext); PropertyValueInfo::SetNoCache(info, instance); // we already cached getter, so we don't have to do it once more - RecyclableObject* func = RecyclableObject::UnsafeFromVar(instance->GetSlot(index)); + RecyclableObject* func = UnsafeVarTo(instance->GetSlot(index)); *value = JavascriptOperators::CallGetter(func, originalInstance, requestContext); return true; } @@ -3780,7 +3860,7 @@ namespace Js if (attributes[index] & ObjectSlotAttr_Accessor) { Assert(setters[index] != Constants::NoSlot); - RecyclableObject* func = RecyclableObject::FromVar(instance->GetSlot(setters[index])); + RecyclableObject* func = VarTo(instance->GetSlot(setters[index])); JavascriptOperators::CallSetter(func, instance, value, NULL); // Wait for the setter to return before setting up the inline cache info, as the setter may change diff --git a/lib/Runtime/Types/PathTypeHandler.h b/lib/Runtime/Types/PathTypeHandler.h index 0a564ebc0a6..07d76d4412d 100644 --- a/lib/Runtime/Types/PathTypeHandler.h +++ b/lib/Runtime/Types/PathTypeHandler.h @@ -37,9 +37,9 @@ namespace Js public: bool IsSingleSuccessor() const { return kind == PathTypeSuccessorKindSingle; } bool IsMultiSuccessor() const { return !IsSingleSuccessor(); } - virtual bool GetSuccessor(const PathTypeSuccessorKey successorKey, RecyclerWeakReference ** typeWeakRef) const = 0; - virtual void SetSuccessor(DynamicType * type, const PathTypeSuccessorKey successorKey, RecyclerWeakReference * typeWeakRef, ScriptContext * scriptContext) = 0; - virtual void ReplaceSuccessor(DynamicType * type, PathTypeSuccessorKey successorKey, RecyclerWeakReference * typeWeakRef) = 0; + bool GetSuccessor(const PathTypeSuccessorKey successorKey, RecyclerWeakReference ** typeWeakRef) const; + void SetSuccessor(DynamicType * type, const PathTypeSuccessorKey successorKey, RecyclerWeakReference * typeWeakRef, ScriptContext * scriptContext); + void ReplaceSuccessor(DynamicType * type, PathTypeSuccessorKey successorKey, RecyclerWeakReference * typeWeakRef); template void MapSuccessors(Fn fn); template void MapSuccessorsUntil(Fn fn); @@ -60,9 +60,9 @@ namespace Js PathTypeSingleSuccessorInfo(const PathTypeSuccessorKey successorKey, RecyclerWeakReference * typeWeakRef); - virtual bool GetSuccessor(const PathTypeSuccessorKey successorKey, RecyclerWeakReference ** typeWeakRef) const override; - virtual void SetSuccessor(DynamicType * type, const PathTypeSuccessorKey successorKey, RecyclerWeakReference * typeWeakRef, ScriptContext * scriptContext) override; - virtual void ReplaceSuccessor(DynamicType * type, PathTypeSuccessorKey successorKey, RecyclerWeakReference * typeWeakRef) override; + bool GetSuccessor(const PathTypeSuccessorKey successorKey, RecyclerWeakReference ** typeWeakRef) const; + void SetSuccessor(DynamicType * type, const PathTypeSuccessorKey successorKey, RecyclerWeakReference * typeWeakRef, ScriptContext * scriptContext); + void ReplaceSuccessor(DynamicType * type, PathTypeSuccessorKey successorKey, RecyclerWeakReference * typeWeakRef); template void MapSingleSuccessor(Fn fn); @@ -78,9 +78,9 @@ namespace Js PathTypeMultiSuccessorInfo(Recycler * recycler, const PathTypeSuccessorKey successorKey, RecyclerWeakReference * typeWeakRef); - virtual bool GetSuccessor(const PathTypeSuccessorKey successorKey, RecyclerWeakReference ** typeWeakRef) const override; - virtual void SetSuccessor(DynamicType * type, const PathTypeSuccessorKey successorKey, RecyclerWeakReference * typeWeakRef, ScriptContext * scriptContext) override; - virtual void ReplaceSuccessor(DynamicType * type, PathTypeSuccessorKey successorKey, RecyclerWeakReference * typeWeakRef) override; + bool GetSuccessor(const PathTypeSuccessorKey successorKey, RecyclerWeakReference ** typeWeakRef) const; + void SetSuccessor(DynamicType * type, const PathTypeSuccessorKey successorKey, RecyclerWeakReference * typeWeakRef, ScriptContext * scriptContext); + void ReplaceSuccessor(DynamicType * type, PathTypeSuccessorKey successorKey, RecyclerWeakReference * typeWeakRef); template void MapMultiSuccessors(Fn fn); template void MapMultiSuccessorsUntil(Fn fn); @@ -102,6 +102,8 @@ namespace Js Field(DynamicType*) predecessorType; // Strong reference to predecessor type so that predecessor types remain in the cache even though they might not be used Field(TypePath*) typePath; Field(PathTypeSuccessorInfo*) successorInfo; + Field(bool) hasUserDefinedCtor; + Field(bool) hasInternalProperty; public: DEFINE_GETCPPNAME(); @@ -119,6 +121,8 @@ namespace Js return nullptr; } + bool HasUserDefinedCtor() { return this->hasUserDefinedCtor; } + virtual BOOL IsLockable() const override { return true; } virtual BOOL IsSharable() const override { return true; } @@ -192,9 +196,12 @@ namespace Js void VerifyInlineSlotCapacityIsLocked(bool startFromRoot); PathTypeHandlerBase *DeoptimizeObjectHeaderInlining(JavascriptLibrary *const library); virtual void SetPrototype(DynamicObject* instance, RecyclableObject* newPrototype) override; + void SetPrototypeHelper(DynamicObject* instance, RecyclableObject* newPrototype, TypeTransitionMap* oldTypeToPromotedTypeMap, bool useCache, ScriptContext *scriptContext); virtual void SetIsPrototype(DynamicObject* instance) override; + PathTypeHandlerBase * BuildPathTypeFromNewRoot(DynamicObject * instance, DynamicType ** type); + BOOL FindNextPropertyHelper(ScriptContext* scriptContext, ObjectSlotAttributes * objectAttributes, PropertyIndex& index, JavascriptString** propertyString, PropertyId* propertyId, PropertyAttributes* attributes, Type* type, DynamicType *typeToEnumerate, EnumeratorFlags flags, DynamicObject* instance, PropertyValueInfo* info); BOOL SetAttributesAtIndex(DynamicObject* instance, PropertyId propertyId, PropertyIndex index, PropertyAttributes attributes); @@ -457,6 +464,8 @@ namespace Js DEFINE_VTABLE_CTOR_NO_REGISTER(PathTypeHandlerNoAttr, PathTypeHandlerBase); public: + virtual bool IsObjectCopyable() const override { return !this->hasInternalProperty; } + static PathTypeHandlerNoAttr * New(ScriptContext * scriptContext, TypePath* typePath, uint16 pathLength, uint16 inlineSlotCapacity, uint16 offsetOfInlineSlots, bool isLocked = false, bool isShared = false, DynamicType* predecessorType = nullptr); static PathTypeHandlerNoAttr * New(ScriptContext * scriptContext, TypePath* typePath, uint16 pathLength, const PropertyIndex slotCapacity, uint16 inlineSlotCapacity, uint16 offsetOfInlineSlots, bool isLocked = false, bool isShared = false, DynamicType* predecessorType = nullptr); static PathTypeHandlerNoAttr * New(ScriptContext * scriptContext, PathTypeHandlerNoAttr * typeHandler, bool isLocked, bool isShared); @@ -532,6 +541,7 @@ namespace Js return FindNextPropertyHelper(scriptContext, this->attributes, index, propertyString, propertyId, attributes, type, typeToEnumerate, flags, instance, info); } virtual BOOL AllPropertiesAreEnumerable() sealed override { return false; } + virtual bool IsObjectCopyable() const override { return false; } #if ENABLE_NATIVE_CODEGEN virtual bool IsObjTypeSpecEquivalent(const Type* type, const TypeEquivalenceRecord& record, uint& failedPropertyIndex) override; virtual bool IsObjTypeSpecEquivalent(const Type* type, const EquivalentPropertyEntry* entry) override; diff --git a/lib/Runtime/Types/RecyclableObject.cpp b/lib/Runtime/Types/RecyclableObject.cpp index 35dcda679f6..319361bcc06 100644 --- a/lib/Runtime/Types/RecyclableObject.cpp +++ b/lib/Runtime/Types/RecyclableObject.cpp @@ -33,8 +33,8 @@ namespace Js // Make sure the given prop and usage cache match Assert( prop == nullptr && propertyRecordUsageCache == nullptr || - JavascriptSymbol::Is(prop) && JavascriptSymbol::UnsafeFromVar(prop)->GetPropertyRecordUsageCache() == propertyRecordUsageCache || - PropertyString::Is(prop) && PropertyString::UnsafeFromVar(prop)->GetPropertyRecordUsageCache() == propertyRecordUsageCache); + VarIs(prop) && UnsafeVarTo(prop)->GetPropertyRecordUsageCache() == propertyRecordUsageCache || + VarIs(prop) && UnsafeVarTo(prop)->GetPropertyRecordUsageCache() == propertyRecordUsageCache); info->prop = prop; info->propertyRecordUsageCache = propertyRecordUsageCache; @@ -184,7 +184,7 @@ namespace Js { if (DynamicType::Is(this->GetTypeId())) { - DynamicObject* dynamicThis = DynamicObject::UnsafeFromVar(this); + DynamicObject* dynamicThis = UnsafeVarTo(this); dynamicThis->SetIsPrototype(); // Call the DynamicObject::SetIsPrototype } } @@ -193,9 +193,13 @@ namespace Js { if (DynamicType::Is(this->GetTypeId())) { - DynamicObject* obj = DynamicObject::UnsafeFromVar(this); + DynamicObject* obj = UnsafeVarTo(this); return obj->GetTypeHandler()->GetHasOnlyWritableDataProperties() && - (!obj->HasObjectArray() || obj->GetObjectArrayOrFlagsAsArray()->HasOnlyWritableDataProperties()); + (!obj->HasObjectArray() || obj->GetObjectArrayOrFlagsAsArray()->HasOnlyWritableDataProperties()) +#ifdef _CHAKRACOREBUILD + && (!VarIs(obj) || UnsafeVarTo(obj)->IsInitialized()) +#endif + ; } return true; @@ -205,9 +209,13 @@ namespace Js { if (DynamicType::Is(this->GetTypeId())) { - DynamicObject* obj = DynamicObject::UnsafeFromVar(this); + DynamicObject* obj = UnsafeVarTo(this); return obj->GetTypeHandler()->GetHasSpecialProperties() || - (obj->HasObjectArray() && obj->GetObjectArrayOrFlagsAsArray()->HasAnySpecialProperties()); + (obj->HasObjectArray() && obj->GetObjectArrayOrFlagsAsArray()->HasAnySpecialProperties()) +#ifdef _CHAKRACOREBUILD + || (VarIs(obj) && !UnsafeVarTo(obj)->IsInitialized()) +#endif + ; } return true; @@ -217,7 +225,7 @@ namespace Js { if (DynamicType::Is(this->GetTypeId())) { - DynamicObject* obj = DynamicObject::UnsafeFromVar(this); + DynamicObject* obj = UnsafeVarTo(this); obj->GetTypeHandler()->ClearWritableDataOnlyDetectionBit(); if (obj->HasObjectArray()) { @@ -230,7 +238,7 @@ namespace Js { if (DynamicType::Is(this->GetTypeId())) { - DynamicObject* obj = DynamicObject::UnsafeFromVar(this); + DynamicObject* obj = UnsafeVarTo(this); return obj->GetTypeHandler()->IsWritableDataOnlyDetectionBitSet() || (obj->HasObjectArray() && obj->GetObjectArrayOrFlagsAsArray()->IsWritableDataOnlyDetectionBitSet()); } @@ -259,7 +267,7 @@ namespace Js case TypeIds_Null: return requestContext->GetLibrary()->GetNull(); case TypeIds_Number: - return RecyclableObject::FromVar(JavascriptNumber::CloneToScriptContext(this, requestContext)); + return VarTo(JavascriptNumber::CloneToScriptContext(this, requestContext)); default: AssertMsg(FALSE, "shouldn't clone for other types"); Js::JavascriptError::ThrowError(requestContext, VBSERR_InternalError); @@ -322,18 +330,19 @@ namespace Js Assert(!this->GetScriptContext()->GetThreadContext()->IsScriptActive()); return E_NOINTERFACE; } - RecyclableObject* RecyclableObject::GetThisObjectOrUnWrap() + + RecyclableObject* RecyclableObject::GetUnwrappedObject() { - if (UnscopablesWrapperObject::Is(this)) + if (VarIs(this)) { - return UnscopablesWrapperObject::FromVar(this)->GetWrappedObject(); + return UnsafeVarTo(this)->GetWrappedObject(); } return this; } RecyclableObject* RecyclableObject::GetThisAndUnwrappedInstance(Var* thisVar) const { - *thisVar = this->GetLibrary()->GetUndefined(); + *thisVar = this->GetLibrary()->GetUndefined(); return (RecyclableObject*)this; } @@ -510,9 +519,6 @@ namespace Js Var aLeft = this; if (aLeft == aRight) { - //In ES5 mode strict equals (===) on same instance of object type VariantDate succeeds. - //Hence equals needs to succeed. - //goto ReturnTrue; *value = TRUE; return TRUE; } @@ -543,7 +549,7 @@ namespace Js goto ReturnTrue; default: // Falsy objects are == null and == undefined. - *value = RecyclableObject::FromVar(aRight)->GetType()->IsFalsy(); + *value = VarTo(aRight)->GetType()->IsFalsy(); return TRUE; } case TypeIds_Integer: @@ -560,7 +566,7 @@ namespace Js case TypeIds_Int64Number: { int leftValue = TaggedInt::ToInt32(aLeft); - __int64 rightValue = JavascriptInt64Number::FromVar(aRight)->GetValue(); + __int64 rightValue = VarTo(aRight)->GetValue(); *value = leftValue == rightValue; Assert(!(*value)); // currently it cannot be true. more for future extension if we allow arithmetic calculation return TRUE; @@ -568,7 +574,7 @@ namespace Js case TypeIds_UInt64Number: { __int64 leftValue = TaggedInt::ToInt32(aLeft); - unsigned __int64 rightValue = JavascriptInt64Number::FromVar(aRight)->GetValue(); + unsigned __int64 rightValue = VarTo(aRight)->GetValue(); // TODO: yongqu to review whether we need to check for neg value *value = (/*leftValue >= 0 && */(unsigned __int64)leftValue == rightValue); Assert(!(*value)); // currently it cannot be true. more for future extension if we allow arithmetic calculation @@ -592,27 +598,27 @@ namespace Js { case TypeIds_Integer: { - __int64 leftValue = JavascriptInt64Number::FromVar(aLeft)->GetValue(); + __int64 leftValue = VarTo(aLeft)->GetValue(); int rightValue = TaggedInt::ToInt32(aRight); *value = leftValue == rightValue; Assert(!(*value)); // currently it cannot be true. more for future extension if we allow arithmetic calculation return TRUE; } case TypeIds_Number: - dblLeft = (double)JavascriptInt64Number::FromVar(aLeft)->GetValue(); + dblLeft = (double)VarTo(aLeft)->GetValue(); dblRight = JavascriptNumber::GetValue(aRight); goto CompareDoubles; case TypeIds_Int64Number: { - __int64 leftValue = JavascriptInt64Number::FromVar(aLeft)->GetValue(); - __int64 rightValue = JavascriptInt64Number::FromVar(aRight)->GetValue(); + __int64 leftValue = VarTo(aLeft)->GetValue(); + __int64 rightValue = VarTo(aRight)->GetValue(); *value = leftValue == rightValue; return TRUE; } case TypeIds_UInt64Number: { - __int64 leftValue = JavascriptInt64Number::FromVar(aLeft)->GetValue(); - unsigned __int64 rightValue = JavascriptInt64Number::FromVar(aRight)->GetValue(); + __int64 leftValue = VarTo(aLeft)->GetValue(); + unsigned __int64 rightValue = VarTo(aRight)->GetValue(); // TODO: yongqu to review whether we need to check for neg value *value = (/* leftValue >= 0 && */(unsigned __int64)leftValue == rightValue); return TRUE; @@ -624,7 +630,7 @@ namespace Js { case TypeIds_Integer: { - unsigned __int64 leftValue = JavascriptUInt64Number::FromVar(aLeft)->GetValue(); + unsigned __int64 leftValue = VarTo(aLeft)->GetValue(); __int64 rightValue = TaggedInt::ToInt32(aRight); // TODO: yongqu to review whether we need to check for neg value *value = rightValue >= 0 && leftValue == (unsigned __int64)rightValue; @@ -632,21 +638,21 @@ namespace Js return TRUE; } case TypeIds_Number: - dblLeft = (double)JavascriptUInt64Number::FromVar(aLeft)->GetValue(); + dblLeft = (double)VarTo(aLeft)->GetValue(); dblRight = JavascriptNumber::GetValue(aRight); goto CompareDoubles; case TypeIds_Int64Number: { - unsigned __int64 leftValue = JavascriptUInt64Number::FromVar(aLeft)->GetValue(); - __int64 rightValue = JavascriptInt64Number::FromVar(aRight)->GetValue(); + unsigned __int64 leftValue = VarTo(aLeft)->GetValue(); + __int64 rightValue = VarTo(aRight)->GetValue(); // TODO: yongqu to review whether we need to check for neg value *value = (/* rightValue >= 0 && */leftValue == (unsigned __int64)rightValue); return TRUE; } case TypeIds_UInt64Number: { - unsigned __int64 leftValue = JavascriptUInt64Number::FromVar(aLeft)->GetValue(); - unsigned __int64 rightValue = JavascriptInt64Number::FromVar(aRight)->GetValue(); + unsigned __int64 leftValue = VarTo(aLeft)->GetValue(); + unsigned __int64 rightValue = VarTo(aRight)->GetValue(); *value = leftValue == rightValue; return TRUE; } @@ -684,7 +690,7 @@ namespace Js case TypeIds_Symbol: goto ReturnFalse; case TypeIds_String: - *value = JavascriptString::Equals(JavascriptString::UnsafeFromVar(aLeft), JavascriptString::UnsafeFromVar(aRight)); + *value = JavascriptString::Equals(UnsafeVarTo(aLeft), UnsafeVarTo(aRight)); return TRUE; case TypeIds_Number: case TypeIds_Integer: @@ -703,7 +709,7 @@ namespace Js case TypeIds_Symbol: goto ReturnFalse; case TypeIds_Boolean: - *value = JavascriptBoolean::FromVar(aLeft)->GetValue() == JavascriptBoolean::FromVar(aRight)->GetValue(); + *value = VarTo(aLeft)->GetValue() == VarTo(aRight)->GetValue(); return TRUE; case TypeIds_Number: case TypeIds_Integer: @@ -728,11 +734,11 @@ namespace Js goto ReturnFalse; case TypeIds_Symbol: *value = (aLeft == aRight); - Assert((JavascriptSymbol::UnsafeFromVar(aLeft)->GetValue() == JavascriptSymbol::UnsafeFromVar(aRight)->GetValue()) == *value); + Assert((UnsafeVarTo(aLeft)->GetValue() == UnsafeVarTo(aRight)->GetValue()) == *value); return TRUE; case TypeIds_SymbolObject: - *value = (aLeft == JavascriptSymbolObject::UnsafeFromVar(aRight)->Unwrap()); - Assert((JavascriptSymbol::UnsafeFromVar(aLeft)->GetValue() == JavascriptSymbolObject::UnsafeFromVar(aRight)->GetValue()) == *value); + *value = (aLeft == UnsafeVarTo(aRight)->Unwrap()); + Assert((UnsafeVarTo(aLeft)->GetValue() == UnsafeVarTo(aRight)->GetValue()) == *value); return TRUE; default: goto RedoRight; diff --git a/lib/Runtime/Types/RecyclableObject.h b/lib/Runtime/Types/RecyclableObject.h index 14ee2da6a3b..6147114ea92 100644 --- a/lib/Runtime/Types/RecyclableObject.h +++ b/lib/Runtime/Types/RecyclableObject.h @@ -249,9 +249,6 @@ namespace Js { virtual RecyclableObject* GetPrototypeSpecial(); public: - static bool Is(Var aValue); - static RecyclableObject* FromVar(Var varValue); - static RecyclableObject* UnsafeFromVar(Var varValue); RecyclableObject(Type * type); #if DBG_EXTRAFIELD // This dtor should only be call when OOM occurs and RecyclableObject ctor has completed @@ -352,8 +349,8 @@ namespace Js { virtual BOOL GetSpecialPropertyName(uint32 index, JavascriptString ** propertyName, ScriptContext * requestContext) { return false; } virtual uint GetSpecialPropertyCount() const { return 0; } virtual PropertyId const * GetSpecialPropertyIds() const { return nullptr; } - virtual RecyclableObject* GetThisObjectOrUnWrap(); // Due to the withScope object there are times we need to unwrap - virtual RecyclableObject* GetThisAndUnwrappedInstance(Var* thisVar) const; + RecyclableObject * GetUnwrappedObject(); + virtual RecyclableObject* GetThisAndUnwrappedInstance(Var* thisVar) const; // Due to the withScope object there are times we need to unwrap virtual BOOL HasInstance(Var instance, ScriptContext* scriptContext, IsInstInlineCache* inlineCache = NULL); @@ -468,4 +465,80 @@ namespace Js { int GetHeapEnumValidationCookie() { return m_heapEnumValidationCookie; } #endif }; + + // DO specialize this method; DON'T call it directly (use VarIs instead) + // Return whether the given RecyclableObject is of the template parameter's type. + // Generally, subclasses of RecyclableObject should only need to provide + // a specialization for VarIsImpl(RecyclableObject*), and the other conversion + // functions should take care of themselves. + template bool VarIsImpl(RecyclableObject* obj); + + template <> inline bool VarIsImpl(RecyclableObject* obj) { return true; } + + // Return whether the given Var is of the template parameter's type. + template bool VarIs(U* obj) + { + // ChakraFull can't include type_traits, but ChakraCore does include it for debug builds +#if DBG && !defined(NTBUILD) + static_assert(!std::is_same::value, "Check should be unnecessary - did you prematurely cast?"); + static_assert(std::is_base_of::value, "VarIs/VarTo should only downcast!"); +#endif + return VarIsImpl(obj); + } + + // Return whether the given Var is of the template parameter's type. + template bool VarIs(Var aValue) + { + AssertMsg(aValue != nullptr, "VarIs: aValue is null"); + +#if INT32VAR + bool isRecyclableObject = (((uintptr_t)aValue) >> VarTag_Shift) == 0; +#else + bool isRecyclableObject = (((uintptr_t)aValue) & AtomTag) == AtomTag_Object; +#endif + + return isRecyclableObject && VarIsImpl(reinterpret_cast(aValue)); + } + + // Validate that the object is actually the type that the type system thinks it is. + // This should only be used for extremely defensive assertions; if you find code + // relying on this behavior for correctness, then it's cause for concern. + template bool VarIsCorrectType(T* obj) + { + return VarIsImpl(obj); + } + template bool VarIsCorrectType(WriteBarrierPtr obj) + { + return VarIsImpl(obj); + } + + CompileAssertMsg(AtomTag_Object == 0, "Ensure GC objects do not need to be marked"); + + // Cast the input parameter to another type, or crash if the cast is invalid. + template T* VarTo(U* obj) + { + AssertOrFailFast(VarIs(obj)); + return static_cast(obj); + } + + // Cast the input parameter to another type, or crash if the cast is invalid. + template T* VarTo(Var aValue) + { + AssertOrFailFast(VarIs(aValue)); + return reinterpret_cast(aValue); + } + + // Cast the input parameter to another type. In debug builds only, assert that the cast is valid. + template T* UnsafeVarTo(U* obj) + { + Assert(VarIs(obj)); + return static_cast(obj); + } + + // Cast the input parameter to another type. In debug builds only, assert that the cast is valid. + template T* UnsafeVarTo(Var aValue) + { + Assert(VarIs(aValue)); + return reinterpret_cast(aValue); + } } diff --git a/lib/Runtime/Types/RecyclableObject.inl b/lib/Runtime/Types/RecyclableObject.inl index 95770afef0d..9c41a6ee14d 100644 --- a/lib/Runtime/Types/RecyclableObject.inl +++ b/lib/Runtime/Types/RecyclableObject.inl @@ -7,39 +7,6 @@ namespace Js { // These function needs to be in INL file for static lib -#if INT32VAR - inline bool RecyclableObject::Is(Var aValue) - { - AssertMsg(aValue != nullptr, "RecyclableObject::Is aValue is null"); - - return (((uintptr_t)aValue) >> VarTag_Shift) == 0; - } -#else - inline bool RecyclableObject::Is(Var aValue) - { - AssertMsg(aValue != nullptr, "RecyclableObject::Is aValue is null"); - - return (((uintptr_t)aValue) & AtomTag) == AtomTag_Object; - } -#endif - - inline RecyclableObject* RecyclableObject::FromVar(const Js::Var aValue) - { - AssertMsg(AtomTag_Object == 0, "Ensure GC objects do not need to be marked"); - AssertMsg(Is(aValue), "Ensure instance is a RecyclableObject"); - AssertOrFailFastMsg(!TaggedNumber::Is(aValue), "Tagged value being used as RecyclableObject"); - - return reinterpret_cast(aValue); - } - - inline RecyclableObject* RecyclableObject::UnsafeFromVar(const Js::Var aValue) - { - AssertMsg(AtomTag_Object == 0, "Ensure GC objects do not need to be marked"); - AssertMsg(Is(aValue), "Ensure instance is a RecyclableObject"); - AssertMsg(!TaggedNumber::Is(aValue), "Tagged value being used as RecyclableObject"); - - return reinterpret_cast(aValue); - } inline TypeId RecyclableObject::GetTypeId() const { diff --git a/lib/Runtime/Types/ScriptFunctionType.cpp b/lib/Runtime/Types/ScriptFunctionType.cpp index 4e0344233d0..2050b24a459 100644 --- a/lib/Runtime/Types/ScriptFunctionType.cpp +++ b/lib/Runtime/Types/ScriptFunctionType.cpp @@ -21,18 +21,27 @@ namespace Js ScriptFunctionType * ScriptFunctionType::New(FunctionProxy * proxy, bool isShared) { - Assert(proxy->GetFunctionInfo()->GetFunctionProxy() == proxy); ScriptContext * scriptContext = proxy->GetScriptContext(); JavascriptLibrary * library = scriptContext->GetLibrary(); DynamicObject * functionPrototype = proxy->IsAsync() ? library->GetAsyncFunctionPrototype() : library->GetFunctionPrototype(); - JavascriptMethod address = proxy->GetDefaultEntryPointInfo()->jsMethod; + DynamicTypeHandler * typeHandler = library->ScriptFunctionTypeHandler(!proxy->IsConstructor(), proxy->GetIsAnonymousFunction()); + + return New(proxy, typeHandler, functionPrototype, isShared); + } + + ScriptFunctionType * ScriptFunctionType::New(FunctionProxy * proxy, DynamicTypeHandler * typeHandler, RecyclableObject * prototype, bool isShared) + { + Assert(proxy->GetFunctionInfo()->GetFunctionProxy() == proxy); + ScriptContext * scriptContext = proxy->GetScriptContext(); return RecyclerNew(scriptContext->GetRecycler(), ScriptFunctionType, - scriptContext, functionPrototype, - address, + scriptContext, + prototype, + proxy->GetDefaultEntryPointInfo()->jsMethod, proxy->GetDefaultEntryPointInfo(), - library->ScriptFunctionTypeHandler(!proxy->IsConstructor(), proxy->GetIsAnonymousFunction()), - isShared, isShared); + typeHandler, + isShared, + isShared); } void ScriptFunctionType::ChangeEntryPoint(ProxyEntryPointInfo * entryPointInfo, JavascriptMethod entryPoint, bool isAsmJS) diff --git a/lib/Runtime/Types/ScriptFunctionType.h b/lib/Runtime/Types/ScriptFunctionType.h index e18d065bf2f..520c399601f 100644 --- a/lib/Runtime/Types/ScriptFunctionType.h +++ b/lib/Runtime/Types/ScriptFunctionType.h @@ -10,6 +10,7 @@ namespace Js { public: static ScriptFunctionType * New(FunctionProxy * proxy, bool isShared); + static ScriptFunctionType * New(FunctionProxy * proxy, DynamicTypeHandler * typeHandler, RecyclableObject * prototype, bool isShared); static DWORD GetEntryPointInfoOffset() { return offsetof(ScriptFunctionType, entryPointInfo); } ProxyEntryPointInfo * GetEntryPointInfo() const { return entryPointInfo; } void SetEntryPointInfo(ProxyEntryPointInfo * entryPointInfo) { this->entryPointInfo = entryPointInfo; } diff --git a/lib/Runtime/Types/SimpleDictionaryPropertyDescriptor.h b/lib/Runtime/Types/SimpleDictionaryPropertyDescriptor.h index c9ecb270227..e26ba1316dd 100644 --- a/lib/Runtime/Types/SimpleDictionaryPropertyDescriptor.h +++ b/lib/Runtime/Types/SimpleDictionaryPropertyDescriptor.h @@ -62,13 +62,12 @@ namespace Js namespace JsUtil { - template - class ValueEntry >: public BaseValueEntry> + template + struct ClearValue> { - public: - void Clear() + static inline void Clear(Js::SimpleDictionaryPropertyDescriptor* value) { - this->value = 0; + *value = 0; } }; } diff --git a/lib/Runtime/Types/SimpleDictionaryTypeHandler.cpp b/lib/Runtime/Types/SimpleDictionaryTypeHandler.cpp index 135c07e0359..e3dcb39136f 100644 --- a/lib/Runtime/Types/SimpleDictionaryTypeHandler.cpp +++ b/lib/Runtime/Types/SimpleDictionaryTypeHandler.cpp @@ -88,7 +88,7 @@ namespace Js const PropertyRecord* TMapKey_ConvertKey_TTD(ThreadContext* threadContext, JavascriptString* key) { PropertyRecord const * propertyRecord; - PropertyString * propertyString = PropertyString::TryFromVar(key); + PropertyString * propertyString = JavascriptOperators::TryFromVar(key); if (propertyString != nullptr) { propertyString->GetPropertyRecord(&propertyRecord); @@ -104,7 +104,7 @@ namespace Js bool TPropertyKey_IsInternalPropertyId(JavascriptString* key) { // WARNING: This will return false for PropertyStrings that are actually InternalPropertyIds - Assert(!PropertyString::Is(key) || !IsInternalPropertyId(((PropertyString*)key)->GetPropertyId())); + Assert(!VarIs(key) || !IsInternalPropertyId(((PropertyString*)key)->GetPropertyId())); return false; } @@ -250,6 +250,15 @@ namespace Js return RecyclerNew(scriptContext->GetRecycler(), SimpleDictionaryTypeHandlerBase, scriptContext, propertyDescriptors, propertyCount, propertyCount, inlineSlotCapacity, offsetOfInlineSlots, isLocked, isShared); } +#if ENABLE_FIXED_FIELDS + template + SimpleDictionaryTypeHandlerBase * SimpleDictionaryTypeHandlerBase::NewInitialized(ScriptContext * scriptContext, SimplePropertyDescriptor const* propertyDescriptors, int propertyCount, uint16 inlineSlotCapacity, uint16 offsetOfInlineSlots, bool isLocked, bool isShared) + { + PropertyIndexRangesType::VerifySlotCapacity(propertyCount); + return RecyclerNew(scriptContext->GetRecycler(), SimpleDictionaryTypeHandlerBase, scriptContext, propertyDescriptors, propertyCount, propertyCount, inlineSlotCapacity, offsetOfInlineSlots, isLocked, isShared, true); + } +#endif + template SimpleDictionaryTypeHandlerBase::SimpleDictionaryTypeHandlerBase(Recycler* recycler) : // We can do slotCapacity roundup here because this constructor is always creating type handler for a new object. @@ -266,7 +275,7 @@ namespace Js } template - SimpleDictionaryTypeHandlerBase::SimpleDictionaryTypeHandlerBase(ScriptContext * scriptContext, SimplePropertyDescriptor const* propertyDescriptors, int propertyCount, int slotCapacity, uint16 inlineSlotCapacity, uint16 offsetOfInlineSlots, bool isLocked, bool isShared) : + SimpleDictionaryTypeHandlerBase::SimpleDictionaryTypeHandlerBase(ScriptContext * scriptContext, SimplePropertyDescriptor const* propertyDescriptors, int propertyCount, int slotCapacity, uint16 inlineSlotCapacity, uint16 offsetOfInlineSlots, bool isLocked, bool isShared, bool isInitialized) : // Do not RoundUp passed in slotCapacity. This may be called by ConvertTypeHandler for an existing DynamicObject and should use the real existing slotCapacity. DynamicTypeHandler(slotCapacity, inlineSlotCapacity, offsetOfInlineSlots, DefaultFlags | (isLocked ? IsLockedFlag : 0) | (isShared ? (MayBecomeSharedFlag | IsSharedFlag) : 0)), nextPropertyIndex(0), @@ -282,7 +291,7 @@ namespace Js for (int i=0; i < propertyCount; i++) { - Add(propertyDescriptors[i].Id, propertyDescriptors[i].Attributes, false, false, false, scriptContext); + Add(propertyDescriptors[i].Id, propertyDescriptors[i].Attributes, isInitialized, false, false, scriptContext); } } @@ -1143,7 +1152,7 @@ namespace Js template BOOL SimpleDictionaryTypeHandlerBase::GetRootProperty(DynamicObject* instance, Var originalInstance, PropertyId propertyId, Var* value, PropertyValueInfo* info, ScriptContext* requestContext) { - AssertMsg(RootObjectBase::Is(instance), "Instance must be a root object!"); + AssertMsg(VarIs(instance), "Instance must be a root object!"); return GetProperty_Internal(instance, originalInstance, propertyId, value, info, requestContext); } @@ -1298,7 +1307,7 @@ namespace Js template BOOL SimpleDictionaryTypeHandlerBase::SetRootProperty(DynamicObject* instance, PropertyId propertyId, Var value, PropertyOperationFlags flags, PropertyValueInfo* info) { - AssertMsg(RootObjectBase::Is(instance), "Instance must be a root object!"); + AssertMsg(VarIs(instance), "Instance must be a root object!"); return SetProperty_Internal(instance, propertyId, value, flags, info); } @@ -1420,7 +1429,7 @@ namespace Js Assert(value != nullptr); // We don't want fixed properties on external objects. See DynamicObject::ResetObject for more information. Assert(!instance->IsExternal()); - descriptor->isFixed = (JavascriptFunction::Is(value) ? ShouldFixMethodProperties() : (ShouldFixDataProperties() && CheckHeuristicsForFixedDataProps(instance, propertyId, value))); + descriptor->isFixed = (VarIs(value) ? ShouldFixMethodProperties() : (ShouldFixDataProperties() && CheckHeuristicsForFixedDataProps(instance, propertyId, value))); } } } @@ -1465,7 +1474,7 @@ namespace Js template DescriptorFlags SimpleDictionaryTypeHandlerBase::GetRootSetter(DynamicObject* instance, PropertyId propertyId, Var* setterValue, PropertyValueInfo* info, ScriptContext* requestContext) { - AssertMsg(RootObjectBase::Is(instance), "Instance must be a root object!"); + AssertMsg(VarIs(instance), "Instance must be a root object!"); return GetSetter_Internal(instance, propertyId, setterValue, info, requestContext); } @@ -1673,7 +1682,7 @@ namespace Js template BOOL SimpleDictionaryTypeHandlerBase::DeleteRootProperty(DynamicObject* instance, PropertyId propertyId, PropertyOperationFlags propertyOperationFlags) { - AssertMsg(RootObjectBase::Is(instance), "Instance must be a root object!"); + AssertMsg(VarIs(instance), "Instance must be a root object!"); return DeleteProperty_Internal(instance, propertyId, propertyOperationFlags); } @@ -1854,7 +1863,7 @@ namespace Js { if (descriptor->Attributes & PropertyLetConstGlobal) { - AssertMsg(RootObjectBase::Is(instance), "Instance must be a root object!"); + AssertMsg(VarIs(instance), "Instance must be a root object!"); return true; } return descriptor->Attributes & PropertyConfigurable; @@ -2309,6 +2318,15 @@ namespace Js return false; } + if (DynamicObject::IsAnyTypedArray(instance)) + { + auto typedArray = static_cast(instance); + if (!typedArray->IsObjectArrayFrozen()) + { + return false; + } + } + // Since we've determined that the object was frozen, set the flag to avoid further checks into all properties // (once frozen there is no way to go back to un-frozen). this->SetFlags(IsSealedOnceFlag | IsFrozenOnceFlag); @@ -2462,7 +2480,7 @@ namespace Js Assert(value != nullptr); // We don't want fixed properties on external objects. See DynamicObject::ResetObject for more information. Assert(!instance->IsExternal()); - descriptor->isFixed = (JavascriptFunction::Is(value) ? ShouldFixMethodProperties() : (ShouldFixDataProperties() && CheckHeuristicsForFixedDataProps(instance, propertyId, value))); + descriptor->isFixed = (VarIs(value) ? ShouldFixMethodProperties() : (ShouldFixDataProperties() && CheckHeuristicsForFixedDataProps(instance, propertyId, value))); } } } @@ -2513,7 +2531,7 @@ namespace Js if (IsNotExtensibleSupported) { // When adding a new property && we are not extensible: - // - if (!objectArray) => do not even get into creating new objectArrray + // - if (!objectArray) => do not even get into creating new objectArray // (anyhow, if we were to create one, we would need one supporting non-extensible, i.e. ES5Array). // - else the array was created earlier and will handle the operation // (it would be non-extensible ES5 array as array must match object's IsExtensible). @@ -2721,7 +2739,7 @@ namespace Js bool markAsInitialized = ((flags & PropertyOperation_PreInit) == 0); bool markAsFixed = markAsInitialized && !TPropertyKey_IsInternalPropertyId(propertyKey) && (flags & (PropertyOperation_NonFixedValue | PropertyOperation_SpecialValue)) == 0 && typeHandler->singletonInstance != nullptr && typeHandler->singletonInstance->Get() == instance - && (JavascriptFunction::Is(value) ? ShouldFixMethodProperties() : (ShouldFixDataProperties() && CheckHeuristicsForFixedDataProps(instance, propertyKey, value))); + && (VarIs(value) ? ShouldFixMethodProperties() : (ShouldFixDataProperties() && CheckHeuristicsForFixedDataProps(instance, propertyKey, value))); #else bool markAsInitialized = true; bool markAsFixed = false; @@ -2848,7 +2866,7 @@ namespace Js template DynamicTypeHandler* SimpleDictionaryTypeHandlerBase::ConvertToTypeWithItemAttributes(DynamicObject* instance) { - return JavascriptArray::Is(instance) ? + return JavascriptArray::IsNonES5Array(instance) ? ConvertToES5ArrayType(instance) : ConvertToDictionaryType(instance); } @@ -2902,7 +2920,7 @@ namespace Js // saravind:If the instance is used by a CrossSiteObject, then we are conservative and do not mark any field as fixed in that instance. // We need to relax this in the future and support fixed fields for Cross Site Context usage - descriptor->isFixed = (JavascriptFunction::Is(value) ? ShouldFixMethodProperties() : (ShouldFixDataProperties() && CheckHeuristicsForFixedDataProps(instance, propertyKey, value))); + descriptor->isFixed = (VarIs(value) ? ShouldFixMethodProperties() : (ShouldFixDataProperties() && CheckHeuristicsForFixedDataProps(instance, propertyKey, value))); // Since we have a new type we can clear all used as fixed bits. That's because any instance field loads // will have been invalidated by the type transition, and there are no proto fields loads from this object @@ -3161,7 +3179,7 @@ namespace Js AssertMsg(!(descriptor->Attributes & PropertyLetConstGlobal), "can't have fixed global let/const"); Assert(!IsInternalPropertyId(propertyRecord->GetPropertyId())); Var value = localSingletonInstance->GetSlot(descriptor->propertyIndex); - if (value && ((IsFixedMethodProperty(propertyType) && JavascriptFunction::Is(value)) || IsFixedDataProperty(propertyType))) + if (value && ((IsFixedMethodProperty(propertyType) && VarIs(value)) || IsFixedDataProperty(propertyType))) { *pProperty = value; if (markAsUsed) diff --git a/lib/Runtime/Types/SimpleDictionaryTypeHandler.h b/lib/Runtime/Types/SimpleDictionaryTypeHandler.h index dfa1293462f..fb2e1b2e7e0 100644 --- a/lib/Runtime/Types/SimpleDictionaryTypeHandler.h +++ b/lib/Runtime/Types/SimpleDictionaryTypeHandler.h @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- // @@ -55,7 +56,7 @@ namespace Js template friend class SimpleTypeHandler; - template friend class SimpleDictionaryTypeHandlerBase; + template friend class SimpleDictionaryTypeHandlerBase; // Explicit non leaf allocator now that the key is non-leaf typedef JsUtil::BaseDictionary, RecyclerNonLeafAllocator, DictionarySizePolicy, PropertyRecordStringHashComparer, PropertyMapKeyTraits::template Entry> @@ -85,7 +86,7 @@ namespace Js protected: SimpleDictionaryTypeHandlerBase(Recycler * recycler); SimpleDictionaryTypeHandlerBase(Recycler * recycler, int slotCapacity, uint16 inlineSlotCapacity, uint16 offsetOfInlineSlots, bool isLocked = false, bool isShared = false); - SimpleDictionaryTypeHandlerBase(ScriptContext * scriptContext, SimplePropertyDescriptor const* propertyDescriptors, int propertyCount, int slotCapacity, uint16 inlineSlotCapacity, uint16 offsetOfInlineSlots, bool isLocked = false, bool isShared = false); + SimpleDictionaryTypeHandlerBase(ScriptContext * scriptContext, SimplePropertyDescriptor const* propertyDescriptors, int propertyCount, int slotCapacity, uint16 inlineSlotCapacity, uint16 offsetOfInlineSlots, bool isLocked = false, bool isShared = false, bool isInitialized = false); SimpleDictionaryTypeHandlerBase(Recycler* recycler, int slotCapacity, int propertyCapacity, uint16 inlineSlotCapacity, uint16 offsetOfInlineSlots, bool isLocked = false, bool isShared = false); SimpleDictionaryTypeHandlerBase(Recycler* recycler, SimpleDictionaryTypeHandlerBase * typeHandler); DEFINE_VTABLE_CTOR_NO_REGISTER(SimpleDictionaryTypeHandlerBase, DynamicTypeHandler); @@ -103,6 +104,10 @@ namespace Js // Create a new type handler for a future DynamicObject. This is for public usage. "propertyCount" indicates desired slotCapacity, subject to alignment round up. static SimpleDictionaryTypeHandlerBase * New(ScriptContext * scriptContext, SimplePropertyDescriptor const* propertyDescriptors, int propertyCount, uint16 inlineSlotCapacity, uint16 offsetOfInlineSlots, bool isLocked = false, bool isShared = false); +#if ENABLE_FIXED_FIELDS + static SimpleDictionaryTypeHandlerBase * NewInitialized(ScriptContext * scriptContext, SimplePropertyDescriptor const* propertyDescriptors, int propertyCount, uint16 inlineSlotCapacity, uint16 offsetOfInlineSlots, bool isLocked = false, bool isShared = false); +#endif + static DynamicType* CreateTypeForNewScObject(ScriptContext* scriptContext, DynamicType* type, const Js::PropertyIdArray *propIds, bool shareType, bool check__proto__); virtual DynamicTypeHandler * Clone(Recycler * recyler); diff --git a/lib/Runtime/Types/SimpleDictionaryUnorderedTypeHandler.h b/lib/Runtime/Types/SimpleDictionaryUnorderedTypeHandler.h index 9a384cfe0fb..f8e23ffc26a 100644 --- a/lib/Runtime/Types/SimpleDictionaryUnorderedTypeHandler.h +++ b/lib/Runtime/Types/SimpleDictionaryUnorderedTypeHandler.h @@ -1,5 +1,6 @@ //------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. +// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #pragma once @@ -22,8 +23,8 @@ namespace Js template class SimpleDictionaryUnorderedTypeHandler sealed : public SimpleDictionaryTypeHandlerBase { - template friend class SimpleDictionaryUnorderedTypeHandler; - template friend class SimpleDictionaryTypeHandlerBase; + template friend class SimpleDictionaryUnorderedTypeHandler; + template friend class SimpleDictionaryTypeHandlerBase; private: // A deleted property ID that will be reused for the next property add. The object's slot corresponding to this property diff --git a/lib/Runtime/Types/SimpleTypeHandler.cpp b/lib/Runtime/Types/SimpleTypeHandler.cpp index 915354944b0..634cb244161 100644 --- a/lib/Runtime/Types/SimpleTypeHandler.cpp +++ b/lib/Runtime/Types/SimpleTypeHandler.cpp @@ -82,7 +82,7 @@ namespace Js template bool SimpleTypeHandler::DoConvertToPathType(DynamicType* type) { - if (CrossSite::IsThunk(type->GetEntryPoint()) || type->GetTypeHandler()->GetIsPrototype()) + if ((PHASE_ON1(ShareCrossSiteFuncTypesPhase) && CrossSite::IsThunk(type->GetEntryPoint())) || type->GetTypeHandler()->GetIsPrototype()) { return false; } @@ -149,7 +149,7 @@ namespace Js Assert(value != nullptr || IsInternalPropertyId(descriptors[i].Id->GetPropertyId())); #if ENABLE_FIXED_FIELDS bool markAsFixed = allowFixedFields && !IsInternalPropertyId(descriptors[i].Id->GetPropertyId()) && - (JavascriptFunction::Is(value) ? ShouldFixMethodProperties() : false); + (VarIs(value) ? ShouldFixMethodProperties() : false); #else bool markAsFixed = false; #endif @@ -175,18 +175,16 @@ namespace Js template PathTypeHandlerBase* SimpleTypeHandler::ConvertToPathType(DynamicObject* instance) { - Assert(!CrossSite::IsThunk(instance->GetType()->GetEntryPoint())); - ScriptContext *scriptContext = instance->GetScriptContext(); - PathTypeHandlerBase* newTypeHandler = + PathTypeHandlerBase* newTypeHandler = PathTypeHandlerNoAttr::New( - scriptContext, - scriptContext->GetLibrary()->GetRootPath(), - 0, - static_cast(this->GetSlotCapacity()), - this->GetInlineSlotCapacity(), - this->GetOffsetOfInlineSlots(), - true, + scriptContext, + scriptContext->GetLibrary()->GetRootPath(), + 0, + static_cast(this->GetSlotCapacity()), + this->GetInlineSlotCapacity(), + this->GetOffsetOfInlineSlots(), + true, false); newTypeHandler->SetMayBecomeShared(); @@ -207,17 +205,16 @@ namespace Js ObjectSlotAttributes attr = ObjectSlotAttr_None; for (PropertyIndex i = 0; i < propertyCount; i++) { - Var value = instance->GetSlot(i); propertyId = descriptors[i].Id->GetPropertyId(); attr = PathTypeHandlerBase::PropertyAttributesToObjectSlotAttributes(descriptors[i].Attributes); - Assert(value != nullptr || IsInternalPropertyId(propertyId)); PropertyIndex index; currentType = newTypeHandler->PromoteType(currentType, PathTypeSuccessorKey(propertyId, attr), false, scriptContext, instance, &index); newTypeHandler = PathTypeHandlerBase::FromTypeHandler(currentType->GetTypeHandler()); #if ENABLE_FIXED_FIELDS #ifdef SUPPORT_FIXED_FIELDS_ON_PATH_TYPES - bool markAsFixed = allowFixedFields && !IsInternalPropertyId(propertyId) && - (JavascriptFunction::Is(value) ? ShouldFixMethodProperties() : false); + Var value = instance->GetSlot(i); + bool markAsFixed = allowFixedFields && !IsInternalPropertyId(propertyId) && value != nullptr && + (VarIs(value) ? ShouldFixMethodProperties() : false); newTypeHandler->InitializePath(instance, i, newTypeHandler->GetPathLength(), scriptContext, [=]() { return markAsFixed; }); #endif #endif @@ -690,7 +687,15 @@ namespace Js CompileAssert(_countof(descriptors) == size); if (size > 1) { - SetAttribute(instance, index, PropertyDeleted); + if (GetIsLocked()) + { + // Prevent conversion to path type and then dictionary. Remove this when path types support deleted properties. + this->ConvertToNonSharedSimpleType(instance)->SetAttribute(instance, index, PropertyDeleted); + } + else + { + SetAttribute(instance, index, PropertyDeleted); + } } else { @@ -1013,6 +1018,10 @@ namespace Js } Assert(!oldType->GetIsLocked() || instance->GetDynamicType() != oldType); } + if (descriptors[index].Attributes & PropertyDeleted) + { + instance->GetScriptContext()->InvalidateProtoCaches(propertyId); + } typeHandler->descriptors[index].Attributes = attributes; if (attributes & PropertyEnumerable) { @@ -1168,7 +1177,7 @@ namespace Js template DynamicTypeHandler* SimpleTypeHandler::ConvertToTypeWithItemAttributes(DynamicObject* instance) { - return JavascriptArray::Is(instance) ? + return JavascriptArray::IsNonES5Array(instance) ? ConvertToES5ArrayType(instance) : ConvertToDictionaryType(instance); } @@ -1268,6 +1277,7 @@ namespace Js template class SimpleTypeHandler<1>; template class SimpleTypeHandler<2>; + template class SimpleTypeHandler<3>; template class SimpleTypeHandler<6>; } diff --git a/lib/Runtime/Types/SpreadArgument.cpp b/lib/Runtime/Types/SpreadArgument.cpp index 39e10212efc..c6230504e56 100644 --- a/lib/Runtime/Types/SpreadArgument.cpp +++ b/lib/Runtime/Types/SpreadArgument.cpp @@ -6,23 +6,6 @@ #include "Types/SpreadArgument.h" namespace Js { - bool SpreadArgument::Is(Var aValue) - { - return JavascriptOperators::GetTypeId(aValue) == TypeIds_SpreadArgument; - } - - SpreadArgument* SpreadArgument::FromVar(Var aValue) - { - AssertOrFailFast(SpreadArgument::Is(aValue)); - return static_cast(aValue); - } - - SpreadArgument* SpreadArgument::UnsafeFromVar(Var aValue) - { - Assert(SpreadArgument::Is(aValue)); - return static_cast(aValue); - } - SpreadArgument::SpreadArgument(Var iterator, bool useDirectCall, DynamicType * type) : DynamicObject(type), iteratorIndices(nullptr) { @@ -32,9 +15,9 @@ namespace Js if (useDirectCall) { - if (JavascriptArray::Is(iterator)) + if (JavascriptArray::IsNonES5Array(iterator)) { - JavascriptArray *array = JavascriptArray::FromVar(iterator); + JavascriptArray *array = VarTo(iterator); if (!array->HasNoMissingValues()) { AssertAndFailFast(); @@ -56,9 +39,9 @@ namespace Js Assert(length == array->GetLength()); } } - else if (TypedArrayBase::Is(iterator)) + else if (VarIs(iterator)) { - TypedArrayBase *typedArray = TypedArrayBase::UnsafeFromVar(iterator); + TypedArrayBase *typedArray = UnsafeVarTo(iterator); if (typedArray->IsDetachedBuffer()) { @@ -84,10 +67,14 @@ namespace Js Assert(false); } } - else if (RecyclableObject::Is(iterator)) + else if (VarIs(iterator)) { Var nextItem; - while (JavascriptOperators::IteratorStepAndValue(RecyclableObject::FromVar(iterator), scriptContext, &nextItem)) + RecyclableObject* obj = UnsafeVarTo(iterator); + + RecyclableObject* nextFunc = JavascriptOperators::CacheIteratorNext(obj, scriptContext); + + while (JavascriptOperators::IteratorStepAndValue(obj, scriptContext, nextFunc, &nextItem)) { if (iteratorIndices == nullptr) { diff --git a/lib/Runtime/Types/SpreadArgument.h b/lib/Runtime/Types/SpreadArgument.h index b2d1a0ab028..c744d091333 100644 --- a/lib/Runtime/Types/SpreadArgument.h +++ b/lib/Runtime/Types/SpreadArgument.h @@ -18,9 +18,6 @@ namespace Js DEFINE_MARSHAL_OBJECT_TO_SCRIPT_CONTEXT(SpreadArgument); public: - static bool Is(Var aValue); - static SpreadArgument* FromVar(Var value); - static SpreadArgument* UnsafeFromVar(Var value); SpreadArgument(Var iterator, bool useDirectCall, DynamicType * type); const Var* GetArgumentSpread() const { return iteratorIndices ? iteratorIndices->GetBuffer() : nullptr; } uint GetArgumentSpreadCount() const { return iteratorIndices ? iteratorIndices->Count() : 0; } @@ -73,4 +70,9 @@ namespace Js virtual BOOL GetDiagValueString(StringBuilder* stringBuilder, ScriptContext* requestContext) override { AssertAndFailFast(); return FALSE; }; virtual Var GetTypeOfString(ScriptContext * requestContext) override { AssertAndFailFast(); return RecyclableObject::GetTypeOfString(requestContext); }; }; + + template <> inline bool VarIsImpl(RecyclableObject* obj) + { + return JavascriptOperators::GetTypeId(obj) == TypeIds_SpreadArgument; + } } diff --git a/lib/Runtime/Types/StaticType.cpp b/lib/Runtime/Types/StaticType.cpp index 4fa5c9616c3..b95e1b16863 100644 --- a/lib/Runtime/Types/StaticType.cpp +++ b/lib/Runtime/Types/StaticType.cpp @@ -35,7 +35,7 @@ namespace Js valueStr = scriptContext->GetIntegerString(this); break; case TypeIds_Boolean: - valueStr = JavascriptBoolean::FromVar(this)->GetValue() ? + valueStr = VarTo(this)->GetValue() ? GetLibrary()->GetTrueDisplayString() : GetLibrary()->GetFalseDisplayString(); break; @@ -43,7 +43,7 @@ namespace Js valueStr = JavascriptNumber::ToStringRadix10(JavascriptNumber::GetValue(this), scriptContext); break; case TypeIds_String: - valueStr = JavascriptString::FromVar(this); + valueStr = VarTo(this); break; default: valueStr = GetLibrary()->GetUndefinedDisplayString(); diff --git a/lib/Runtime/Types/TypeHandler.cpp b/lib/Runtime/Types/TypeHandler.cpp index b8203847041..80001bf0328 100644 --- a/lib/Runtime/Types/TypeHandler.cpp +++ b/lib/Runtime/Types/TypeHandler.cpp @@ -77,7 +77,6 @@ using namespace Js; ? RoundUpObjectHeaderInlinedInlineSlotCapacity(inlineSlotCapacity) : RoundUpInlineSlotCapacity(inlineSlotCapacity); this->slotCapacity = RoundUpSlotCapacity(slotCapacity, inlineSlotCapacity); - this->isNotPathTypeHandlerOrHasUserDefinedCtor = true; Assert(IsObjectHeaderInlinedTypeHandler() == IsObjectHeaderInlined(offsetOfInlineSlots)); } @@ -439,14 +438,14 @@ using namespace Js; LPCWSTR fixedPropertyResultType = nullptr; bool log = false; - if (pProperty && *pProperty && ((Js::JavascriptFunction::Is(*pProperty) && (PHASE_VERBOSE_TRACE1(Js::FixedMethodsPhase) || PHASE_VERBOSE_TESTTRACE1(Js::FixedMethodsPhase))) || + if (pProperty && *pProperty && ((Js::VarIs(*pProperty) && (PHASE_VERBOSE_TRACE1(Js::FixedMethodsPhase) || PHASE_VERBOSE_TESTTRACE1(Js::FixedMethodsPhase))) || ((PHASE_VERBOSE_TRACE1(Js::UseFixedDataPropsPhase) || PHASE_VERBOSE_TESTTRACE1(Js::UseFixedDataPropsPhase))) )) { if(*pProperty == nullptr) { fixedPropertyResultType = _u("null"); } - else if (Js::JavascriptFunction::Is(*pProperty)) + else if (Js::VarIs(*pProperty)) { fixedPropertyResultType = _u("function"); } @@ -562,7 +561,6 @@ using namespace Js; scriptContext->optimizationOverrides.SetSideEffects((SideEffects)(SideEffects_ValueOf & possibleSideEffects)); scriptContext->optimizationOverrides.SetSideEffects((SideEffects)(SideEffects_ToString & possibleSideEffects)); } - else if (propertyId == PropertyIds::valueOf) { scriptContext->optimizationOverrides.SetSideEffects((SideEffects)(SideEffects_ValueOf & possibleSideEffects)); @@ -885,6 +883,5 @@ using namespace Js; Output::Print(_u("%*sslotCapacity: %d\n"), fieldIndent, padding, this->slotCapacity); Output::Print(_u("%*sunusedBytes: %u\n"), fieldIndent, padding, this->unusedBytes); Output::Print(_u("%*sinlineSlotCapacty: %u\n"), fieldIndent, padding, this->inlineSlotCapacity); - Output::Print(_u("%*sisNotPathTypeHandlerOrHasUserDefinedCtor: %d\n"), fieldIndent, padding, static_cast(this->isNotPathTypeHandlerOrHasUserDefinedCtor)); } #endif diff --git a/lib/Runtime/Types/TypeHandler.h b/lib/Runtime/Types/TypeHandler.h index 6034bf3e91a..82c2482aad9 100644 --- a/lib/Runtime/Types/TypeHandler.h +++ b/lib/Runtime/Types/TypeHandler.h @@ -48,7 +48,6 @@ namespace Js Field(int) slotCapacity; Field(uint16) unusedBytes; // This always has it's lowest bit set to avoid false references Field(uint16) inlineSlotCapacity; - Field(bool) isNotPathTypeHandlerOrHasUserDefinedCtor; Field(bool) protoCachesWereInvalidated; public: @@ -58,7 +57,6 @@ namespace Js propertyTypes(typeHandler->propertyTypes), slotCapacity(typeHandler->slotCapacity), offsetOfInlineSlots(typeHandler->offsetOfInlineSlots), - isNotPathTypeHandlerOrHasUserDefinedCtor(typeHandler->isNotPathTypeHandlerOrHasUserDefinedCtor), unusedBytes(typeHandler->unusedBytes), protoCachesWereInvalidated(false), inlineSlotCapacity(typeHandler->inlineSlotCapacity) @@ -427,7 +425,6 @@ namespace Js } BOOL Freeze(DynamicObject *instance, bool isConvertedType = false) { return FreezeImpl(instance, isConvertedType); } - bool GetIsNotPathTypeHandlerOrHasUserDefinedCtor() const { return this->isNotPathTypeHandlerOrHasUserDefinedCtor; } virtual BOOL IsStringTypeHandler() const { return false; } @@ -560,6 +557,8 @@ namespace Js virtual BOOL IsSimpleDictionaryTypeHandler() const {return FALSE; } virtual BOOL IsDictionaryTypeHandler() const {return FALSE;} + virtual bool IsObjectCopyable() const { return false; } + static bool IsolatePrototypes() { return CONFIG_FLAG(IsolatePrototypes); } static bool ChangeTypeOnProto() { return CONFIG_FLAG(ChangeTypeOnProto); } static bool ShouldFixMethodProperties() { return !PHASE_OFF1(FixMethodPropsPhase); } diff --git a/lib/Runtime/Types/TypeId.h b/lib/Runtime/Types/TypeId.h index 38ffc149f51..26387c72479 100644 --- a/lib/Runtime/Types/TypeId.h +++ b/lib/Runtime/Types/TypeId.h @@ -2,10 +2,140 @@ // Copyright (C) Microsoft. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- + namespace Js { + enum TypeId + { + TypeIds_Undefined = 0, + TypeIds_Null = 1, + + TypeIds_UndefinedOrNull = TypeIds_Null, + + TypeIds_Boolean = 2, + + // backend typeof() == "number" is true for typeIds + // between TypeIds_FirstNumberType <= typeId <= TypeIds_LastNumberType + TypeIds_Integer = 3, + TypeIds_FirstNumberType = TypeIds_Integer, + TypeIds_Number = 4, // JITTypes.h uses fixed number 4 for this + TypeIds_Int64Number = 5, + TypeIds_UInt64Number = 6, + TypeIds_LastNumberType = TypeIds_UInt64Number, + TypeIds_String = 7, // JITTypes.h uses fixed number 7 for this + TypeIds_Symbol = 8, + TypeIds_BigInt = 9, + + TypeIds_LastToPrimitiveType = TypeIds_BigInt, + + TypeIds_Enumerator = 10, + // 11 - deleted + + // SIMD types + //[Please maintain Float32x4 as the first SIMDType and Bool8x16 as the last] + TypeIds_SIMDFloat32x4 = 12, + TypeIds_SIMDFloat64x2 = 13, + TypeIds_SIMDInt32x4 = 14, + TypeIds_SIMDInt16x8 = 15, + TypeIds_SIMDInt8x16 = 16, + + TypeIds_SIMDUint32x4 = 17, + TypeIds_SIMDUint16x8 = 18, + TypeIds_SIMDUint8x16 = 19, + + TypeIds_SIMDBool32x4 = 20, + TypeIds_SIMDBool16x8 = 21, + TypeIds_SIMDBool8x16 = 22, + TypeIds_LastJavascriptPrimitiveType = TypeIds_SIMDBool8x16, + + TypeIds_HostDispatch = 23, + TypeIds_UnscopablesWrapperObject = 24, + TypeIds_UndeclBlockVar = 25, + + TypeIds_LastStaticType = TypeIds_UndeclBlockVar, + + TypeIds_Proxy = 26, + TypeIds_Function = 27, + + // + // The backend expects only objects whose typeof() === "object" to have a + // TypeId >= TypeIds_Object. Only 'null' is a special case because it + // has a static type. + // + TypeIds_Object = 28, + TypeIds_Array = 29, + TypeIds_ArrayFirst = TypeIds_Array, + TypeIds_NativeIntArray = 30, + #if ENABLE_COPYONACCESS_ARRAY + TypeIds_CopyOnAccessNativeIntArray = 31, + #endif + TypeIds_NativeFloatArray = 32, + TypeIds_ArrayLast = TypeIds_NativeFloatArray, + TypeIds_ES5Array = 33, + TypeIds_ArrayLastWithES5 = TypeIds_ES5Array, + TypeIds_Date = 34, + TypeIds_RegEx = 35, + TypeIds_Error = 36, + TypeIds_BooleanObject = 37, + TypeIds_NumberObject = 38, + TypeIds_StringObject = 39, + TypeIds_BigIntObject = 40, + TypeIds_SIMDObject = 41, + TypeIds_Arguments = 42, + TypeIds_ArrayBuffer = 43, + TypeIds_Int8Array = 44, + TypeIds_TypedArrayMin = TypeIds_Int8Array, + TypeIds_TypedArraySCAMin = TypeIds_Int8Array, // Min SCA supported TypedArray TypeId + TypeIds_Uint8Array = 45, + TypeIds_Uint8ClampedArray = 46, + TypeIds_Int16Array = 47, + TypeIds_Uint16Array = 48, + TypeIds_Int32Array = 49, + TypeIds_Uint32Array = 50, + TypeIds_Float32Array = 51, + TypeIds_Float64Array = 52, + TypeIds_TypedArraySCAMax = TypeIds_Float64Array, // Max SCA supported TypedArray TypeId + TypeIds_Int64Array = 53, + TypeIds_Uint64Array = 54, + TypeIds_CharArray = 55, + TypeIds_BoolArray = 56, + TypeIds_TypedArrayMax = TypeIds_BoolArray, + TypeIds_EngineInterfaceObject = 57, + TypeIds_DataView = 58, + // 59 deleted + TypeIds_Map = 60, + TypeIds_Set = 61, + TypeIds_WeakMap = 62, + TypeIds_WeakSet = 63, + TypeIds_SymbolObject = 64, + TypeIds_ArrayIterator = 65, + TypeIds_MapIterator = 66, + TypeIds_SetIterator = 67, + TypeIds_StringIterator = 68, + // 69 - deleted + TypeIds_Generator = 70, + TypeIds_AsyncGenerator = 71, + TypeIds_AsyncFromSyncIterator = 72, + TypeIds_AwaitObject = 73, + TypeIds_Promise = 74, + TypeIds_SharedArrayBuffer = 75, + + TypeIds_WebAssemblyModule = 76, + TypeIds_WebAssemblyInstance = 77, + TypeIds_WebAssemblyMemory = 78, + TypeIds_WebAssemblyTable = 79, + + TypeIds_LastBuiltinDynamicObject = TypeIds_WebAssemblyTable, + TypeIds_GlobalObject = 80, + TypeIds_ModuleRoot = 81, + TypeIds_LastTrueJavascriptObjectType = TypeIds_ModuleRoot, -#include "EdgeJavascriptTypeId.h" - // All WinRT dates are regular Javascript dates too - inline bool IsDateTypeId(TypeId typeId) { return (typeId == TypeIds_Date || typeId == TypeIds_WinRTDate); } + TypeIds_HostObject = 82, + TypeIds_ActivationObject = 83, + TypeIds_SpreadArgument = 84, + TypeIds_ModuleNamespace = 85, + TypeIds_ListIterator = 86, + TypeIds_ExternalIterator = 87, + TypeIds_Limit //add a new TypeId before TypeIds_Limit or before TypeIds_LastTrueJavascriptObjectType + }; } diff --git a/lib/Runtime/Types/TypePath.h b/lib/Runtime/Types/TypePath.h index 1a13403c723..e86062fac12 100644 --- a/lib/Runtime/Types/TypePath.h +++ b/lib/Runtime/Types/TypePath.h @@ -464,4 +464,4 @@ namespace Js }; } -CompileAssert((sizeof(Js::TypePath) % HeapConstants::ObjectGranularity) == (HeapConstants::ObjectGranularity - TYPE_PATH_ALLOC_GRANULARITY_GAP * sizeof(void *)) % HeapConstants::ObjectGranularity); \ No newline at end of file +CompileAssert((sizeof(Js::TypePath) % HeapConstants::ObjectGranularity) == (HeapConstants::ObjectGranularity - TYPE_PATH_ALLOC_GRANULARITY_GAP * sizeof(void *)) % HeapConstants::ObjectGranularity); diff --git a/lib/Runtime/Types/TypePropertyCache.cpp b/lib/Runtime/Types/TypePropertyCache.cpp index ab66d8a53e5..28d2974a146 100644 --- a/lib/Runtime/Types/TypePropertyCache.cpp +++ b/lib/Runtime/Types/TypePropertyCache.cpp @@ -205,8 +205,7 @@ namespace Js #if DBG const PropertyIndex typeHandlerPropertyIndex = - DynamicObject - ::FromVar(propertyObject) + VarTo(propertyObject) ->GetDynamicType() ->GetTypeHandler() ->InlineOrAuxSlotIndexToPropertyIndex(propertyIndex, isInlineSlot); @@ -221,8 +220,8 @@ namespace Js { *propertyValue = isInlineSlot - ? DynamicObject::FromVar(propertyObject)->GetInlineSlot(propertyIndex) - : DynamicObject::FromVar(propertyObject)->GetAuxSlot(propertyIndex); + ? VarTo(propertyObject)->GetInlineSlot(propertyIndex) + : VarTo(propertyObject)->GetAuxSlot(propertyIndex); } if(propertyObject->GetScriptContext() == requestContext) @@ -236,7 +235,7 @@ namespace Js CacheOperators::Cache( false, - DynamicObject::FromVar(propertyObject), + VarTo(propertyObject), false, propertyObject->GetType(), nullptr, @@ -303,7 +302,7 @@ namespace Js DebugOnly(Var getPropertyValue = JavascriptOperators::GetProperty(propertyObject, propertyId, requestContext)); Assert(*propertyValue == getPropertyValue || // In some cases, such as CustomExternalObject, if implicit calls are disabled GetPropertyQuery may return null. See CustomExternalObject::GetPropertyQuery for an example. - (getPropertyValue == requestContext->GetLibrary()->GetNull() && requestContext->GetThreadContext()->IsDisableImplicitCall() && propertyObject->GetType()->IsExternal())); + (getPropertyValue == requestContext->GetMissingPropertyResult() && requestContext->GetThreadContext()->IsDisableImplicitCall() && propertyObject->GetType()->IsJsrtExternal())); } if(propertyObject->GetScriptContext() != requestContext) @@ -402,8 +401,7 @@ namespace Js #endif Assert( ( - DynamicObject - ::FromVar(object) + VarTo(object) ->GetDynamicType() ->GetTypeHandler() ->InlineOrAuxSlotIndexToPropertyIndex(propertyIndex, isInlineSlot) @@ -418,18 +416,18 @@ namespace Js if(isInlineSlot) { - DynamicObject::FromVar(object)->SetInlineSlot(SetSlotArguments(propertyId, propertyIndex, propertyValue)); + VarTo(object)->SetInlineSlot(SetSlotArguments(propertyId, propertyIndex, propertyValue)); } else { - DynamicObject::FromVar(object)->SetAuxSlot(SetSlotArguments(propertyId, propertyIndex, propertyValue)); + VarTo(object)->SetAuxSlot(SetSlotArguments(propertyId, propertyIndex, propertyValue)); } if(objectScriptContext == requestContext) { CacheOperators::Cache( false, - DynamicObject::FromVar(object), + VarTo(object), false, object->GetType(), nullptr, diff --git a/lib/Runtime/Types/UnscopablesWrapperObject.cpp b/lib/Runtime/Types/UnscopablesWrapperObject.cpp index b4dc7f12c78..79f0b109f78 100644 --- a/lib/Runtime/Types/UnscopablesWrapperObject.cpp +++ b/lib/Runtime/Types/UnscopablesWrapperObject.cpp @@ -6,23 +6,6 @@ namespace Js { - bool UnscopablesWrapperObject::Is(Var aValue) - { - return JavascriptOperators::GetTypeId(aValue) == TypeIds_UnscopablesWrapperObject; - } - - UnscopablesWrapperObject* UnscopablesWrapperObject::FromVar(Var aValue) - { - AssertOrFailFast(UnscopablesWrapperObject::Is(aValue)); - return static_cast(aValue); - } - - UnscopablesWrapperObject* UnscopablesWrapperObject::UnsafeFromVar(Var aValue) - { - Assert(UnscopablesWrapperObject::Is(aValue)); - return static_cast(aValue); - } - RecyclableObject * UnscopablesWrapperObject::GetThisAndUnwrappedInstance(Var* thisVar) const { *thisVar = this->GetWrappedObject(); diff --git a/lib/Runtime/Types/UnscopablesWrapperObject.h b/lib/Runtime/Types/UnscopablesWrapperObject.h index ddc64c61269..211049eac35 100644 --- a/lib/Runtime/Types/UnscopablesWrapperObject.h +++ b/lib/Runtime/Types/UnscopablesWrapperObject.h @@ -25,11 +25,8 @@ namespace Js public: UnscopablesWrapperObject(RecyclableObject *wrappedObject, StaticType * type) : RecyclableObject(type), wrappedObject(wrappedObject) {} - static bool Is(Var aValue); - static UnscopablesWrapperObject* FromVar(Var value); - static UnscopablesWrapperObject* UnsafeFromVar(Var value); RecyclableObject *GetWrappedObject() const { return wrappedObject; } - virtual RecyclableObject* GetThisAndUnwrappedInstance(Var* thisVar) const override; + virtual RecyclableObject * GetThisAndUnwrappedInstance(Var* thisVar) const override; virtual PropertyQueryFlags HasPropertyQuery(PropertyId propertyId, _Inout_opt_ PropertyValueInfo* info) override; virtual BOOL HasOwnProperty(PropertyId propertyId) override; virtual BOOL SetProperty(PropertyId propertyId, Var value, PropertyOperationFlags flags, PropertyValueInfo* info) override; @@ -61,7 +58,7 @@ namespace Js virtual BOOL ToPrimitive(JavascriptHint hint, Var* result, ScriptContext * requestContext) override { UNWRAP_FAILFAST(); return FALSE; }; virtual BOOL GetEnumerator(JavascriptStaticEnumerator * enumerator, EnumeratorFlags flags, ScriptContext* requestContext, EnumeratorCache * enumeratorCache = nullptr) override { UNWRAP_FAILFAST(); return FALSE; }; virtual BOOL SetAccessors(PropertyId propertyId, Var getter, Var setter, PropertyOperationFlags flags = PropertyOperation_None) override { UNWRAP_FAILFAST(); return FALSE; }; - virtual BOOL GetAccessors(PropertyId propertyId, Var *getter, Var *setter, ScriptContext * requestContext) override { UNWRAP_FAILFAST(); return FALSE; }; + _Check_return_ _Success_(return) virtual BOOL GetAccessors(PropertyId propertyId, _Outptr_result_maybenull_ Var* getter, _Outptr_result_maybenull_ Var* setter, ScriptContext * requestContext) override { UNWRAP_FAILFAST(); return FALSE; }; virtual BOOL IsWritable(PropertyId propertyId) override { UNWRAP_FAILFAST(); return FALSE; }; virtual BOOL IsConfigurable(PropertyId propertyId) override { UNWRAP_FAILFAST(); return FALSE; }; virtual BOOL IsEnumerable(PropertyId propertyId) override { UNWRAP_FAILFAST(); return FALSE; }; @@ -78,4 +75,9 @@ namespace Js virtual BOOL GetDiagValueString(StringBuilder* stringBuilder, ScriptContext* requestContext) override { UNWRAP_FAILFAST(); return FALSE; }; virtual Var GetTypeOfString(ScriptContext * requestContext) override { UNWRAP_FAILFAST(); return RecyclableObject::GetTypeOfString(requestContext); }; }; + + template <> inline bool VarIsImpl(RecyclableObject* obj) + { + return JavascriptOperators::GetTypeId(obj) == TypeIds_UnscopablesWrapperObject; + } } // namespace Js diff --git a/lib/SCACore/CMakeLists.txt b/lib/SCACore/CMakeLists.txt new file mode 100644 index 00000000000..3eebc41cf56 --- /dev/null +++ b/lib/SCACore/CMakeLists.txt @@ -0,0 +1,22 @@ +add_library (Chakra.SCACore OBJECT + SCACore.cpp + SCACorePch.cpp + SCADeserialization.cpp + SCAEngine.cpp + SCAPropBag.cpp + SCASerialization.cpp + StreamHelper.cpp + StreamReader.cpp + StreamWriter.cpp + ) + + +target_include_directories ( + Chakra.SCACore PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} + ../Parser + ../Common + ../Backend + ../JITIDL + ../Runtime + ../Runtime/ByteCode + ) diff --git a/lib/SCACore/Chakra.SCACore.vcxproj b/lib/SCACore/Chakra.SCACore.vcxproj new file mode 100644 index 00000000000..b0e96b5eec3 --- /dev/null +++ b/lib/SCACore/Chakra.SCACore.vcxproj @@ -0,0 +1,68 @@ + + + + + + Chakra.SCACore + {4DA3A367-6ED2-4EE8-9698-5BCD0B8AF7F5} + JS + Win32Proj + + + StaticLibrary + + + + + + + <_ProjectFileVersion>10.0.30319.1 + + + + + $(MSBuildThisFileDirectory)..\Common; + $(MSBuildThisFileDirectory)..\Parser; + $(MSBuildThisFileDirectory)..\Backend; + $(MSBuildThisFileDirectory)..\WasmReader; + $(MSBuildThisFileDirectory)..\JITClient; + $(MSBuildThisFileDirectory)..\Runtime; + $(MSBuildThisFileDirectory)..\Runtime\ByteCode; + $(ChakraManifestsIncludeDirectory); + %(AdditionalIncludeDirectories) + + Use + SCACorePch.h + + + + + Create + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/lib/SCACore/SCACore.cpp b/lib/SCACore/SCACore.cpp new file mode 100644 index 00000000000..25d907882aa --- /dev/null +++ b/lib/SCACore/SCACore.cpp @@ -0,0 +1,135 @@ +//------------------------------------------------------------------------------------------------------- +// Copyright (C) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. +//------------------------------------------------------------------------------------------------------- + +#include "SCACorePch.h" + +namespace Js +{ + namespace SCACore + { + HRESULT ValidateTransferableVars(Var *vars, size_t count) + { + for (size_t i = 0; i < count; i++) + { + Js::TypeId typeId = Js::JavascriptOperators::GetTypeId(vars[i]); + if (typeId != TypeIds_ArrayBuffer) + { + + AssertMsg(false, "These should have been filtered out by the host."); + return E_SCA_TRANSFERABLE_UNSUPPORTED; + } + + if (Js::JavascriptOperators::IsObjectDetached(vars[i])) + { + return E_SCA_TRANSFERABLE_NEUTERED; + } + } + return S_OK; + } + + + HRESULT Serializer::SetTransferableVars(Var *vars, size_t count) + { + if (m_transferableVars != nullptr) + { + Assert(false); + return E_FAIL; + } + else if (count > 0) + { + HRESULT hr = ValidateTransferableVars(vars, count); + if (hr != S_OK) + { + return hr; + } + m_transferableVars = vars; + m_cTransferableVars = count; + } + return S_OK; + } + + bool Serializer::WriteValue(Var rootObject) + { + ScriptContext *scriptContext = m_streamWriter.GetScriptContext(); + BEGIN_JS_RUNTIME_CALL(scriptContext) + { + Js::SCASerializationEngine::Serialize(rootObject, &m_streamWriter, m_transferableVars, m_cTransferableVars, nullptr /*TBD*/); + } + END_JS_RUNTIME_CALL(scriptContext) + return true; + } + + bool Serializer::DetachArrayBuffer() + { + Assert(false); + return true; + } + + void Serializer::WriteRawBytes(const void* source, size_t length) + { + ScriptContext *scriptContext = m_streamWriter.GetScriptContext(); + BEGIN_JS_RUNTIME_CALL(scriptContext) + { + m_streamWriter.Write(source, length); + } + END_JS_RUNTIME_CALL(scriptContext) + } + + bool Serializer::Release(byte** data, size_t *dataLength) + { + *data = m_streamWriter.GetBuffer(); + *dataLength = m_streamWriter.GetLength(); + return true; + } + + bool Deserializer::ReadRawBytes(size_t length, void **data) + { + m_streamReader.ReadRawBytes(data, length); + return true; + } + + bool Deserializer::ReadBytes(size_t length, void **data) + { + m_streamReader.Read(*data, length); + return true; + } + + Var Deserializer::ReadValue() + { + Var returnedValue = nullptr; + ScriptContext *scriptContext = m_streamReader.GetScriptContext(); + BEGIN_JS_RUNTIME_CALL(scriptContext) + { + returnedValue = Js::SCADeserializationEngine::Deserialize(&m_streamReader, m_transferableVars, m_cTransferableVars); + } + END_JS_RUNTIME_CALL(scriptContext) + return returnedValue; + } + + HRESULT Deserializer::SetTransferableVars(Var *vars, size_t count) + { + if (m_transferableVars != nullptr) + { + Assert(false); + return E_FAIL; + } + else if (count > 0) + { + HRESULT hr = ValidateTransferableVars(vars, count); + if (hr != S_OK) + { + return hr; + } + m_transferableVars = vars; + m_cTransferableVars = count; + } + return S_OK; + } + + } + +} + + diff --git a/lib/SCACore/SCACore.h b/lib/SCACore/SCACore.h new file mode 100644 index 00000000000..314c4ba42da --- /dev/null +++ b/lib/SCACore/SCACore.h @@ -0,0 +1,56 @@ +//------------------------------------------------------------------------------------------------------- +// Copyright (C) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. +//------------------------------------------------------------------------------------------------------- + +#pragma once + +namespace Js +{ + namespace SCACore + { + class Serializer + { + public: + Serializer(ScriptContext *scriptContext, HostStream *stream) + : m_streamWriter(scriptContext, stream) + { + } + + HRESULT SetTransferableVars(Var *vars, size_t count); + + void WriteRawBytes(const void* source, size_t length); + bool WriteValue(Var rootObject); + bool DetachArrayBuffer(); + + bool Release(byte** data, size_t *dataLength); + + private: + StreamWriter m_streamWriter; + Var* m_transferableVars = nullptr; + size_t m_cTransferableVars = 0; + }; + + class Deserializer + { + public: + Deserializer(void *data, size_t length, ScriptContext *scriptContext, HostReadStream *stream) + : m_streamReader(scriptContext, (byte*)data, length, stream) + { + } + + HRESULT SetTransferableVars(Var *vars, size_t count); + + bool ReadRawBytes(size_t length, void **data); + bool ReadBytes(size_t length, void **data); + Var ReadValue(); + + private: + StreamReader m_streamReader; + Var* m_transferableVars = nullptr; + size_t m_cTransferableVars = 0; + }; + } + +} + diff --git a/lib/SCACore/SCACorePch.cpp b/lib/SCACore/SCACorePch.cpp new file mode 100644 index 00000000000..af1a47e71f3 --- /dev/null +++ b/lib/SCACore/SCACorePch.cpp @@ -0,0 +1,5 @@ +//------------------------------------------------------------------------------------------------------- +// Copyright (C) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. +//------------------------------------------------------------------------------------------------------- +#include "SCACorePch.h" diff --git a/lib/SCACore/SCACorePch.h b/lib/SCACore/SCACorePch.h new file mode 100644 index 00000000000..3e3520e0b57 --- /dev/null +++ b/lib/SCACore/SCACorePch.h @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------------------------------- +// Copyright (C) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. +//------------------------------------------------------------------------------------------------------- +#pragma once + +#if defined(__ANDROID__) +#include +#endif + +#include "Runtime.h" +#include "Library/JavascriptRegularExpression.h" +#include "Library/JavascriptProxy.h" +#include "Library/SameValueComparer.h" +#include "Library/MapOrSetDataList.h" +#include "Library/JavascriptMap.h" +#include "Library/JavascriptSet.h" +#include "Library/JavascriptWeakMap.h" +#include "Library/JavascriptWeakSet.h" +// ================= + +#include "SCATypes.h" +#include "SCAEngine.h" +#include "SCAPropBag.h" +#include "StreamHelper.h" +#include "StreamReader.h" +#include "StreamWriter.h" +#include "SCADeserialization.h" +#include "SCASerialization.h" +#include "SCACore.h" diff --git a/lib/SCACore/SCADeserialization.cpp b/lib/SCACore/SCADeserialization.cpp new file mode 100644 index 00000000000..89f65f424cb --- /dev/null +++ b/lib/SCACore/SCADeserialization.cpp @@ -0,0 +1,593 @@ +//------------------------------------------------------------------------------------------------------- +// Copyright (C) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. +//------------------------------------------------------------------------------------------------------- + +#include "SCACorePch.h" + +namespace Js +{ + template + bool DeserializationCloner::TryClonePrimitive(SrcTypeId typeId, Src src, Dst* dst) + { + if (!IsSCAPrimitive(typeId)) + { + return false; + } + + ScriptContext* scriptContext = this->GetScriptContext(); + JavascriptLibrary* lib = scriptContext->GetLibrary(); + + switch (typeId) + { + case SCA_None: + *dst = NULL; + break; + + case SCA_Reference: // Handle reference explictly as a primitive + { + scaposition_t pos; + m_reader->Read(&pos); + if (!this->GetEngine()->TryGetClonedObject(pos, dst)) + { + this->ThrowSCADataCorrupt(); + } + } + break; + + case SCA_NullValue: + *dst = lib->GetNull(); + break; + + case SCA_UndefinedValue: + *dst = lib->GetUndefined(); + break; + + case SCA_TrueValue: + *dst = lib->GetTrue(); + break; + + case SCA_FalseValue: + *dst = lib->GetFalse(); + break; + + case SCA_Int32Value: + { + int32 n; + m_reader->Read(&n); + *dst = JavascriptNumber::ToVar(n, scriptContext); + } + break; + + case SCA_DoubleValue: + { + double dbl; + m_reader->Read(&dbl); + *dst = JavascriptNumber::ToVarWithCheck(dbl, scriptContext); + } + break; + + case SCA_Int64Value: + { + __int64 n; + m_reader->Read(&n); + *dst = JavascriptInt64Number::ToVar(n, scriptContext); + } + break; + + case SCA_Uint64Value: + { + unsigned __int64 n; + m_reader->Read(&n); + *dst = JavascriptUInt64Number::ToVar(n, scriptContext); + } + break; + + default: + return false; // Not a recognized primitive type + } + + return true; + } + + template + bool DeserializationCloner::TryCloneObject(SrcTypeId typeId, Src src, Dst* dst, SCADeepCloneType* deepClone) + { + ScriptContext* scriptContext = this->GetScriptContext(); + JavascriptLibrary* lib = scriptContext->GetLibrary(); + *deepClone = SCADeepCloneType::None; + bool isObject = true; + + if (typeId == SCA_Transferable) + { + scaposition_t pos; + m_reader->Read(&pos); + + *dst = this->GetEngine()->ClaimTransferable(pos, lib); + if (*dst == nullptr) + { + this->ThrowSCADataCorrupt(); + } + + return true; + } + + if (IsSCAHostObject(typeId)) + { + *dst = m_reader->ReadHostObject(); + *deepClone = SCADeepCloneType::HostObject; + return true; + } + + switch (typeId) + { + case SCA_StringValue: // Clone string value as object type to resolve multiple references + { + charcount_t len; + const char16* buf = ReadString(&len); + *dst = Js::JavascriptString::NewWithBuffer(buf, len, scriptContext); + isObject = false; + } + break; + + case SCA_BooleanTrueObject: + *dst = lib->CreateBooleanObject(TRUE); + break; + + case SCA_BooleanFalseObject: + *dst = lib->CreateBooleanObject(FALSE); + break; + + case SCA_DateObject: + { + double dbl; + m_reader->Read(&dbl); + *dst = lib->CreateDate(dbl); + } + break; + + case SCA_NumberObject: + { + double dbl; + m_reader->Read(&dbl); + *dst = lib->CreateNumberObjectWithCheck(dbl); + } + break; + + case SCA_StringObject: + { + charcount_t len; + const char16* buf = ReadString(&len); + *dst = lib->CreateStringObject(buf, len); + } + break; + + case SCA_RegExpObject: + { + charcount_t len; + const char16* buf = ReadString(&len); + + DWORD flags; + m_reader->Read(&flags); + *dst = JavascriptRegExp::CreateRegEx(buf, len, + static_cast(flags), scriptContext); + } + break; + + case SCA_Object: + { + *dst = lib->CreateObject(); + *deepClone = SCADeepCloneType::Object; + } + break; + + case SCA_Map: + { + *dst = JavascriptMap::New(scriptContext); + *deepClone = SCADeepCloneType::Map; + } + break; + + case SCA_Set: + { + *dst = JavascriptSet::New(scriptContext); + *deepClone = SCADeepCloneType::Set; + } + break; + + case SCA_DenseArray: + case SCA_SparseArray: + { + uint32 length; + Read(&length); + *dst = lib->CreateArray(length); + *deepClone = SCADeepCloneType::Object; + } + break; + + case SCA_ArrayBuffer: + { + uint32 len; + m_reader->Read(&len); + ArrayBuffer* arrayBuffer = lib->CreateArrayBuffer(len); + Read(arrayBuffer->GetBuffer(), arrayBuffer->GetByteLength()); + *dst = arrayBuffer; + } + break; + + case SCA_SharedArrayBuffer: + { + SharedContents * sharedContents; + m_reader->Read((intptr_t*)&sharedContents); + + SharedArrayBuffer* arrayBuffer = lib->CreateSharedArrayBuffer(sharedContents); + Assert(arrayBuffer->IsWebAssemblyArrayBuffer() == sharedContents->IsWebAssembly()); + *dst = arrayBuffer; + } + break; + +//#ifdef ENABLE_WASM +// case SCA_WebAssemblyModule: +// { +// uint32 len; +// m_reader->Read(&len); +// byte* buffer = RecyclerNewArrayLeaf(scriptContext->GetRecycler(), byte, len); +// Read(buffer, len); +// WebAssemblySource wasmSrc(buffer, len, true, scriptContext); +// *dst = WebAssemblyModule::CreateModule(scriptContext, &wasmSrc); +// break; +// } +// case SCA_WebAssemblyMemory: +// { +// uint32 initialLength = 0; +// uint32 maximumLength = 0; +// uint32 isShared = 0; +// m_reader->Read(&initialLength); +// m_reader->Read(&maximumLength); +// +//#ifdef ENABLE_WASM_THREADS +// m_reader->Read(&isShared); +// if (isShared) +// { +// SharedContents * sharedContents; +// m_reader->Read((intptr_t*)&sharedContents); +// *dst = WebAssemblyMemory::CreateFromSharedContents(initialLength, maximumLength, sharedContents, scriptContext); +// } +// else +//#endif +// { +// uint32 len; +// m_reader->Read(&len); +// WebAssemblyMemory* mem = WebAssemblyMemory::CreateForExistingBuffer(initialLength, maximumLength, len, scriptContext); +// Read(mem->GetBuffer()->GetBuffer(), len); +// *dst = mem; +// } +// break; +// } +//#endif + + case SCA_Uint8ClampedArray: + // If Khronos Interop is not enabled, we don't have Uint8ClampedArray available. + // This is a scenario where the source buffer was created in a newer document mode + // but needs to be deserialized in an older document mode. + // What we want to do is return the buffer as a CanvasPixelArray instead of + // Uint8ClampedArray since the older document mode knows what CanvasPixelArray is but + // not what Uint8ClampedArray is. + // We don't support pixelarray in edge anymore. + // Intentionally fall through to default (TypedArray) label + + default: + if (IsSCATypedArray(typeId) || typeId == SCA_DataView) + { + ReadTypedArray(typeId, dst); + break; + } + return false; // Not a supported object type + } + +#ifdef ENABLE_JS_ETW + if (EventEnabledJSCRIPT_RECYCLER_ALLOCATE_OBJECT() && isObject) + { + EventWriteJSCRIPT_RECYCLER_ALLOCATE_OBJECT(*dst); + } +#endif +#if ENABLE_DEBUG_CONFIG_OPTIONS + if (Js::Configuration::Global.flags.IsEnabled(Js::autoProxyFlag)) + { + *dst = JavascriptProxy::AutoProxyWrapper(*dst); + } +#endif + return true; + } + + template + void DeserializationCloner::CloneHostObjectProperties(SrcTypeId typeId, Src src, Dst dst) + { + // We have already created host obect. + } + + template + void DeserializationCloner::CloneProperties(SrcTypeId typeId, Src src, Dst dst) + { + // ScriptContext* scriptContext = GetScriptContext(); + RecyclableObject* obj = VarTo(dst); + + if (obj->IsExternal()) // Read host object properties + { + Assert(false); + } + else // Read native object properties + { + // Read array index named properties + if (typeId == SCA_DenseArray) + { + JavascriptArray* arr = JavascriptArray::FromAnyArray(obj); // (might be ES5Array if -ForceES5Array) + uint32 length = arr->GetLength(); + for (uint32 i = 0; i < length; i++) + { + Dst value = NULL; + this->GetEngine()->Clone(m_reader->GetPosition(), &value); + if (value) + { + arr->DirectSetItemAt(i, value); //Note: no prototype check + } + } + } + else if (typeId == SCA_SparseArray) + { + JavascriptArray* arr = JavascriptArray::FromAnyArray(obj); // (might be ES5Array if -ForceES5Array) + while (true) + { + uint32 i; + Read(&i); + if (i == SCA_PROPERTY_TERMINATOR) + { + break; + } + + Dst value = NULL; + this->GetEngine()->Clone(m_reader->GetPosition(), &value); + if (value == NULL) + { + this->ThrowSCADataCorrupt(); + } + + arr->DirectSetItemAt(i, value); //Note: no prototype check + } + } + + // Read non-index named properties + ReadObjectPropertiesIntoObject(obj); + } + } + + template + void DeserializationCloner::CloneMap(Src src, Dst dst) + { + JavascriptMap* map = VarTo(dst); + + int32 size; + m_reader->Read(&size); + + for (int i = 0; i < size; i++) + { + Var key; + Var value; + + this->GetEngine()->Clone(m_reader->GetPosition(), &key); + if (!key) + { + this->ThrowSCADataCorrupt(); + } + + this->GetEngine()->Clone(m_reader->GetPosition(), &value); + if (!value) + { + this->ThrowSCADataCorrupt(); + } + + map->Set(key, value); + } + } + + template + void DeserializationCloner::CloneSet(Src src, Dst dst) + { + JavascriptSet* set = VarTo(dst); + + int32 size; + m_reader->Read(&size); + + for (int i = 0; i < size; i++) + { + Var value; + + this->GetEngine()->Clone(m_reader->GetPosition(), &value); + if (!value) + { + this->ThrowSCADataCorrupt(); + } + + set->Add(value); + } + } + + template + void DeserializationCloner::CloneObjectReference(Src src, Dst dst) + { + Assert(FALSE); // Should never call this. Object reference handled explictly. + } + + // + // Try to read a SCAString layout in the form of: [byteLen] [string content] [padding]. + // SCAString is also used for property name in object layout. In case of property terminator, + // SCA_PROPERTY_TERMINATOR will appear at the place of [byteLen]. Return false in this case. + // + // If buffer is not null and the size is appropriate, will try reusing it + // + template + const char16* DeserializationCloner::TryReadString(charcount_t* len, bool reuseBuffer) const + { + // m_buffer is allocated on GC heap and stored in a regular field. + // that is ok since 'this' is always a stack instance. + Assert(ThreadContext::IsOnStack(this)); + + uint32 byteLen; + m_reader->Read(&byteLen); + + if (byteLen == SCA_PROPERTY_TERMINATOR) + { + return nullptr; + } + else if (byteLen == 0) + { + *len = 0; + return _u(""); + } + else + { + charcount_t newLen = byteLen / sizeof(char16); + char16* buf; + + if (reuseBuffer) + { + if (this->m_bufferLength < newLen) + { + Recycler* recycler = this->GetScriptContext()->GetRecycler(); + this->m_buffer = RecyclerNewArrayLeaf(recycler, char16, newLen + 1); + this->m_bufferLength = newLen; + } + + buf = this->m_buffer; + } + else + { + Recycler* recycler = this->GetScriptContext()->GetRecycler(); + buf = RecyclerNewArrayLeaf(recycler, char16, newLen + 1); + } + + m_reader->Read(buf, byteLen); + buf[newLen] = NULL; + *len = newLen; + + uint32 unalignedLen = byteLen % sizeof(uint32); + if (unalignedLen) + { + uint32 padding; + m_reader->Read(&padding, sizeof(uint32) - unalignedLen); + } + + return buf; + } + } + + // + // Read a SCAString value from layout: [byteLen] [string content] [padding]. + // Throw if seeing SCA_PROPERTY_TERMINATOR. + // + template + const char16* DeserializationCloner::ReadString(charcount_t* len) const + { + const char16* str = TryReadString(len, false); + + if (str == nullptr) + { + this->ThrowSCADataCorrupt(); + } + + return str; + } + + // + // Read bytes data: [bytes] [padding] + // + template + void DeserializationCloner::Read(BYTE* buf, uint32 len) const + { + m_reader->Read(buf, len); + + uint32 unalignedLen = len % sizeof(uint32); + if (unalignedLen) + { + uint32 padding; + m_reader->Read(&padding, sizeof(uint32) - unalignedLen); + } + } + + // + // Read a TypedArray or DataView. + // + template + void DeserializationCloner::ReadTypedArray(SrcTypeId typeId, Dst* dst) const + { + switch (typeId) + { + case SCA_Int8Array: + ReadTypedArray(dst); + break; + + case SCA_Uint8Array: + ReadTypedArray(dst); + break; + + case SCA_Uint8ClampedArray: + ReadTypedArray(dst); + break; + + case SCA_Int16Array: + ReadTypedArray(dst); + break; + + case SCA_Uint16Array: + ReadTypedArray(dst); + break; + + case SCA_Int32Array: + ReadTypedArray(dst); + break; + + case SCA_Uint32Array: + ReadTypedArray(dst); + break; + + case SCA_Float32Array: + ReadTypedArray(dst); + break; + + case SCA_Float64Array: + ReadTypedArray(dst); + break; + + case SCA_DataView: + ReadTypedArray(dst); + break; + + default: + Assert(false); + break; + } + } + + template class DeserializationCloner; + + Var SCADeserializationEngine::Deserialize(StreamReader* reader, Var* transferableVars, size_t cTransferableVars) + { + ScriptContext* scriptContext = reader->GetScriptContext(); + StreamDeserializationCloner cloner(scriptContext, reader); + + // Read version + uint32 version; + reader->Read(&version); + if (GetSCAMajor(version) > SCA_FORMAT_MAJOR) + { + cloner.ThrowSCANewVersion(); + } + Var value = SCAEngine::Clone(reader->GetPosition(), &cloner, transferableVars, cTransferableVars); + if (!value) + { + cloner.ThrowSCADataCorrupt(); + } + + return value; + } +} diff --git a/lib/SCACore/SCADeserialization.h b/lib/SCACore/SCADeserialization.h new file mode 100644 index 00000000000..9df0af36e47 --- /dev/null +++ b/lib/SCACore/SCADeserialization.h @@ -0,0 +1,171 @@ +//------------------------------------------------------------------------------------------------------- +// Copyright (C) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. +//------------------------------------------------------------------------------------------------------- + +#pragma once +namespace Js +{ + class SCAPropBag; + + // + // DeserializationCloner helps clone a Var from a stream location. + // + template + class DeserializationCloner: + public ClonerBase > + { + public: + using typename ClonerBase >::Dst; + using typename ClonerBase >::Src; + using typename ClonerBase >::SrcTypeId; + private: + //AutoCOMPtr m_pSCAHost; + //AutoCOMPtr m_pSCAContext; + Reader* m_reader; + mutable char16* m_buffer; + mutable charcount_t m_bufferLength; + + + private: + SCATypeId ReadTypeId() const + { + uint32 typeId; + m_reader->Read(&typeId); + return static_cast(typeId); + } + + void Read(uint32* value) const + { + m_reader->Read(value); + } + + const char16* TryReadString(charcount_t* len, bool reuseBuffer) const; + const char16* ReadString(charcount_t* len) const; + void Read(BYTE* buf, uint32 len) const; + + // + // Read a TypedArray or DataView. + // + template + void ReadTypedArray(Dst* dst) const + { + typedef TypedArrayTrace trace_type; + + Dst arrayBuffer; + this->GetEngine()->Clone(m_reader->GetPosition(), &arrayBuffer); + if (!arrayBuffer || !VarIs(arrayBuffer)) + { + this->ThrowSCADataCorrupt(); + } + + uint32 byteOffset, length; + Read(&byteOffset); + Read(&length); + *dst = trace_type::CreateTypedArray( + VarTo(arrayBuffer), byteOffset, length, this->GetScriptContext()); + } + + void ReadTypedArray(SrcTypeId typeId, Dst* dst) const; + + // + // Read a SCAProperties section: {SCAPropertyName SCAValue} SCAPropertiesTerminator + // + void ReadObjectPropertiesIntoObject(RecyclableObject* m_obj) + { + ScriptContext* scriptContext = this->GetScriptContext(); + + for(;;) + { + charcount_t len = 0; + const char16* name = TryReadString(&len, /*reuseBuffer*/ true); + if (!name) + { + break; + } + + Js::PropertyRecord const * propertyRecord; + scriptContext->GetOrAddPropertyRecord(name, len, &propertyRecord); + + // NOTE: 'Clone' may reenter here and use the buffer that backs the 'name'. + // That is ok, since we do not need it past this point. + // The propertyRecord keeps its own copy od the data. + + Var value; + this->GetEngine()->Clone(m_reader->GetPosition(), &value); + if (!value) + { + this->ThrowSCADataCorrupt(); + } + + m_obj->SetProperty(propertyRecord->GetPropertyId(), value, PropertyOperation_None, NULL); //Note: no prototype check + } + } + + void ReadObjectPropertiesIntoBag(SCAPropBag* m_propbag) + { + for (;;) + { + charcount_t len = 0; + // NOTE: we will not reuse buffer here since the propbag may retain the string. + const char16* name = TryReadString(&len, /*reuseBuffer*/ false); + if (!name) + { + break; + } + + Var value; + this->GetEngine()->Clone(m_reader->GetPosition(), &value); + if (!value) + { + this->ThrowSCADataCorrupt(); + } + + HRESULT hr = m_propbag->InternalAddNoCopy(name, len, value); + m_propbag->ThrowIfFailed(hr); + } + } + + public: + DeserializationCloner(ScriptContext* scriptContext, Reader* reader) + : ClonerBase >(scriptContext), m_reader(reader), + m_buffer(nullptr), m_bufferLength(0) + { + } + + static bool ShouldLookupReference() + { + // Never lookup reference when cloning from stream location. DeserializationCloner + // handles object reference lookup explictly when seeing a reference SCATypeId. + return false; + } + + SrcTypeId GetTypeId(Src src) const + { + Assert(m_reader->GetPosition() == src); // Only allow the current position + return ReadTypeId(); + } + + void ThrowSCAUnsupported() const + { + // Unexpected SCATypeId indicates data corruption. + this->ThrowSCADataCorrupt(); + } + + bool TryClonePrimitive(SrcTypeId typeId, Src src, Dst* dst); + bool TryCloneObject(SrcTypeId typeId, Src src, Dst* dst, SCADeepCloneType* deepClone); + void CloneProperties(SrcTypeId typeId, Src src, Dst dst); + void CloneHostObjectProperties(SrcTypeId typeId, Src src, Dst dst); + void CloneMap(Src src, Dst dst); + void CloneSet(Src src, Dst dst); + void CloneObjectReference(Src src, Dst dst); + }; + + class SCADeserializationEngine + { + typedef DeserializationCloner StreamDeserializationCloner; + + public: + static Var Deserialize(StreamReader* reader, Var* transferableVars, size_t cTransferableVars); + }; +} diff --git a/lib/SCACore/SCAEngine.cpp b/lib/SCACore/SCAEngine.cpp new file mode 100644 index 00000000000..4d859286b1d --- /dev/null +++ b/lib/SCACore/SCAEngine.cpp @@ -0,0 +1,23 @@ +//------------------------------------------------------------------------------------------------------- +// Copyright (C) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. +//------------------------------------------------------------------------------------------------------- + +#include "SCACorePch.h" +#ifdef ENABLE_SCRIPT_DEBUGGING +#include "Debug/ProbeContainer.h" +#include "Debug/DebugContext.h" +#endif + +namespace Js +{ + void ScriptContextHolder::ThrowIfFailed(HRESULT hr) const + { + if (FAILED(hr)) + { + m_scriptContext->GetHostScriptContext()->ThrowIfFailed(hr); + + // No debugger support yet. + } + } +}; diff --git a/lib/SCACore/SCAEngine.h b/lib/SCACore/SCAEngine.h new file mode 100644 index 00000000000..d591c62c89f --- /dev/null +++ b/lib/SCACore/SCAEngine.h @@ -0,0 +1,232 @@ +//------------------------------------------------------------------------------------------------------- +// Copyright (C) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. +//------------------------------------------------------------------------------------------------------- + +#pragma once +namespace Js +{ + enum class SCADeepCloneType + { + None, + Object, + Map, + Set, + HostObject + }; + + // + // SCAEngine performs the SCA algorithm by "cloning" a JavaScript var from Src representation + // to Dst represetation. The representation could be a Var, or a location in a stream. + // + template + class SCAEngine + { + private: + // The map type that stores a map of cloned objects {Src->Dst}. Use + // non leaf allocator because the map contains Vars. + typedef JsUtil::BaseDictionary ClonedObjectDictionary; + + Cloner* m_cloner; + ClonedObjectDictionary* m_clonedObjects; + Var* m_transferableVars; + size_t m_cTransferableVars; + + private: + SCAEngine(Cloner* cloner, Var* m_transferableVars, size_t cTransferableVars) + : m_cloner(cloner), + m_transferableVars(m_transferableVars), + m_cTransferableVars(cTransferableVars) + { + Recycler* recycler = cloner->GetScriptContext()->GetRecycler(); + m_clonedObjects = RecyclerNew(recycler, ClonedObjectDictionary, recycler); + m_cloner->SetEngine(this); + } + + public: + + void Clone(Src src, Dst* dst) + { + PROBE_STACK(m_cloner->GetScriptContext(), Constants::MinStackDefault); + +#if ENABLE_COPYONACCESS_ARRAY + JavascriptLibrary::CheckAndConvertCopyOnAccessNativeIntArray(src); +#endif + + typename Cloner::SrcTypeId typeId = m_cloner->GetTypeId(src); + + if (m_cloner->TryClonePrimitive(typeId, src, dst)) + { + return; + } + + if (Cloner::ShouldLookupReference() && TryGetClonedObject(src, dst)) + { + m_cloner->CloneObjectReference(src, *dst); + return; + } + + SCADeepCloneType deepClone; + if (m_cloner->TryCloneObject(typeId, src, dst, &deepClone)) + { + m_clonedObjects->Add(src, *dst); + + if (deepClone == SCADeepCloneType::Map) + { + m_cloner->CloneMap(src, *dst); + deepClone = SCADeepCloneType::Object; + } + else if (deepClone == SCADeepCloneType::Set) + { + m_cloner->CloneSet(src, *dst); + deepClone = SCADeepCloneType::Object; + } + + if (deepClone == SCADeepCloneType::HostObject) + { + m_cloner->CloneHostObjectProperties(typeId, src, *dst); + } + else if (deepClone == SCADeepCloneType::Object) + { + m_cloner->CloneProperties(typeId, src, *dst); + } + return; + } + + // Unsupported src type, throw + m_cloner->ThrowSCAUnsupported(); + } + + void Clone(Src src) + { + Dst unused; + Clone(src, &unused); + } + + bool TryGetClonedObject(Src src, Dst* dst) const + { + return m_clonedObjects->TryGetValue(src, dst); + } + + bool TryGetTransferredOrShared(Var source, size_t* outDestination) + { + if (m_transferableVars == nullptr) + { + return false; + } + + for (size_t i = 0; i < m_cTransferableVars; i++) + { + if (m_transferableVars[i] == source) + { + if (outDestination != nullptr) + { + *outDestination = i; + } + + return true; + } + } + + return false; + } + + Dst ClaimTransferable(size_t index, JavascriptLibrary* library) + { + AssertMsg(index < this->m_cTransferableVars, "Index out of range."); + ArrayBuffer *ab = VarTo(m_transferableVars[index]); + + return ab; + } + + static Dst Clone(Src root, Cloner* cloner, Var* transferableVars, size_t cTransferableVars) + { + SCAEngine engine(cloner, transferableVars, cTransferableVars); + Dst dst; + engine.Clone(root, &dst); + return dst; + } + }; + + // + // Helper class that simply contains a ScriptContext*. + // + class ScriptContextHolder + { + private: + ScriptContext* m_scriptContext; + + public: + ScriptContextHolder(ScriptContext* scriptContext) + : m_scriptContext(scriptContext) + { + } + + ScriptContext* GetScriptContext() const + { + return m_scriptContext; + } + + void ThrowIfFailed(HRESULT hr) const; + + void __declspec(noreturn) ThrowSCAUnsupported() const + { + // E_SCA_UNSUPPORTED + ThrowIfFailed(E_FAIL); + } + + void __declspec(noreturn) ThrowSCANewVersion() const + { + // E_SCA_NEWVERSION + ThrowIfFailed(E_FAIL); + } + + void __declspec(noreturn) ThrowSCADataCorrupt() const + { + // E_SCA_DATACORRUPT + ThrowIfFailed(E_FAIL); + } + + void __declspec(noreturn) ThrowSCAObjectDetached() const + { + // E_SCA_TRANSFERABLE_NEUTERED + ThrowIfFailed(E_FAIL); + } + }; + + // + // Helper class to implement Cloner. + // + template + class ClonerBase : public ScriptContextHolder + { + public: + typedef TSrc Src; + typedef TDst Dst; + typedef TSrcTypeId SrcTypeId; + typedef SCAEngine Engine; + + private: + Engine* m_engine; + + public: + ClonerBase(ScriptContext* scriptContext) + : ScriptContextHolder(scriptContext), + m_engine(NULL) + { + } + + Engine* GetEngine() const + { + Assert(m_engine); // Must have been set + return m_engine; + } + + void SetEngine(Engine* engine) + { + Assert(!m_engine); // Can only be set once + m_engine = engine; + } + }; + +} diff --git a/lib/SCACore/SCAPropBag.cpp b/lib/SCACore/SCAPropBag.cpp new file mode 100644 index 00000000000..24efd93f259 --- /dev/null +++ b/lib/SCACore/SCAPropBag.cpp @@ -0,0 +1,168 @@ +//------------------------------------------------------------------------------------------------------- +// Copyright (C) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. +//------------------------------------------------------------------------------------------------------- + +#include "SCACorePch.h" + + +#define IfFailGoto(expr, label) \ + do \ + { \ + hr = (expr); \ + if (FAILED (hr)) \ + { \ + goto label; \ + } \ + } while (FALSE) \ + +#define IfFailGo(expr) IfFailGoto(expr, Error) + +namespace Js +{ + SCAPropBag::SCAPropBag(ScriptContext* scriptContext) + : ScriptContextHolder(scriptContext), m_refCount(1) + { + Recycler* recycler = GetScriptContext()->GetRecycler(); + m_properties.Root(RecyclerNew(recycler, PropertyDictionary, recycler), recycler); + } + + SCAPropBag::~SCAPropBag() + { + Recycler* recycler = GetScriptContext()->GetRecycler(); + m_properties.Unroot(recycler); + } + + void SCAPropBag::CreateInstance(ScriptContext* scriptContext, SCAPropBag** ppInstance) + { + *ppInstance = HeapNew(SCAPropBag, scriptContext); + } + + STDMETHODIMP_(ULONG) SCAPropBag::AddRef() + { + Assert(m_refCount > 0); + return InterlockedIncrement(&m_refCount); + } + + STDMETHODIMP_(ULONG) SCAPropBag::Release() + { + Assert(m_refCount > 0); + ULONG ref = InterlockedDecrement(&m_refCount); + if (ref == 0) + { + HeapDelete(this); + } + return ref; + } + + STDMETHODIMP SCAPropBag::QueryInterface(REFIID riid, void** ppv) + { + if (ppv == nullptr) + { + return E_POINTER; + } + + if (IsEqualGUID(riid, IID_IUnknown)) + { + *ppv = static_cast(this); + AddRef(); + return S_OK; + } + + *ppv = nullptr; + return E_NOINTERFACE; + } + + HRESULT SCAPropBag::Add(LPCWSTR name, Var value) + { + HRESULT hr = S_OK; + ScriptContext* scriptContext = GetScriptContext(); + + BEGIN_TRANSLATE_EXCEPTION_AND_ERROROBJECT_TO_HRESULT + { + BEGIN_JS_RUNTIME_CALL_EX(scriptContext, false) + { + charcount_t len; + IfFailGo(SizeTToUInt(wcslen(name), &len)); + IfFailGo(InternalAdd(name, len, value)); +Error: + ; // Fall through + } + END_JS_RUNTIME_CALL(scriptContext); + } + END_TRANSLATE_EXCEPTION_AND_ERROROBJECT_TO_HRESULT(hr); + + return hr; + } + + HRESULT SCAPropBag::Get(LPCWSTR name, Var* pValue) + { + HRESULT hr = S_OK; + ScriptContext* scriptContext = GetScriptContext(); + + BEGIN_JS_RUNTIME_CALL_EX(scriptContext, false) + { + int len; + IfFailGo(SizeTToInt(wcslen(name), &len)); + + if (!m_properties->TryGetValue(InternalString(name, len), pValue)) + { + hr = E_FAIL; + } + } + END_JS_RUNTIME_CALL(scriptContext); +Error: + return hr; + } + + HRESULT SCAPropBag::InternalAdd(LPCWSTR name, charcount_t len, Var value) + { + char16* buf = nullptr; + HRESULT hr = S_OK; + ScriptContext* scriptContext = GetScriptContext(); + Recycler* recycler = scriptContext->GetRecycler(); + charcount_t fullLen; + charcount_t byteLen; + + // fullLen == len + 1 + IfFailGo(UIntAdd(len, 1, &fullLen)); + + // byte length (excluding null terminator) + IfFailGo(UIntMult(len, sizeof(char16), &byteLen)); + + // Make a copy of name + buf = RecyclerNewArrayLeaf(recycler, char16, fullLen); + js_memcpy_s(buf, byteLen, name, byteLen); + buf[len] = _u('\0'); + + // Add to the property bag + IfFailGo(InternalAddNoCopy(buf, len, value)); + +Error: + return hr; + } + + HRESULT SCAPropBag::InternalAddNoCopy(LPCWSTR name, charcount_t len, Var value) + { + HRESULT hr = S_OK; + + int intLen; + IfFailGo(UIntToInt(len, &intLen)); + m_properties->Item(InternalString(name, intLen), value); + +Error: + return hr; + } + + bool SCAPropBag::PropBagEnumerator::MoveNext() + { + while (++m_curIndex < m_properties->Count()) + { + if (m_properties->GetValueAt(m_curIndex)) + { + return true; + } + } + return false; + } +} diff --git a/lib/SCACore/SCAPropBag.h b/lib/SCACore/SCAPropBag.h new file mode 100644 index 00000000000..4e11093f952 --- /dev/null +++ b/lib/SCACore/SCAPropBag.h @@ -0,0 +1,72 @@ +//------------------------------------------------------------------------------------------------------- +// Copyright (C) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. +//------------------------------------------------------------------------------------------------------- + +#pragma once +namespace Js +{ + // + // Implements ISCAPropBag. + // + class SCAPropBag sealed : + public ScriptContextHolder, + public IUnknown + { + typedef JsUtil::BaseDictionary PropertyDictionary; + + private: + RecyclerRootPtr m_properties; + ULONG m_refCount; + + SCAPropBag(ScriptContext* scriptContext); + HRESULT InternalAdd(LPCWSTR name, charcount_t len, Var value); + + public: + ~SCAPropBag(); + static void CreateInstance(ScriptContext* scriptContext, SCAPropBag** ppInstance); + + STDMETHODIMP_(ULONG) AddRef(); + STDMETHODIMP_(ULONG) Release(); + STDMETHODIMP QueryInterface(REFIID riid, void** ppv); + + HRESULT Add(LPCWSTR name, Var value); + HRESULT Get(LPCWSTR name, Var* pValue); + + HRESULT InternalAddNoCopy(LPCWSTR name, charcount_t len, Var value); + + // + // PropBag property enumerator for WriteObjectProperties. + // + class PropBagEnumerator + { + private: + PropertyDictionary* m_properties; + int m_curIndex; + + public: + PropBagEnumerator(SCAPropBag* propBag) + : m_properties(propBag->m_properties), m_curIndex(-1) + { + } + + bool MoveNext(); + + const char16* GetNameString() const + { + return m_properties->GetKeyAt(m_curIndex).GetBuffer(); + } + + charcount_t GetNameLength() const + { + return m_properties->GetKeyAt(m_curIndex).GetLength(); + } + + Var GetValue() const + { + return m_properties->GetValueAt(m_curIndex); + } + }; + }; +} diff --git a/lib/SCACore/SCASerialization.cpp b/lib/SCACore/SCASerialization.cpp new file mode 100644 index 00000000000..e49ff5b020a --- /dev/null +++ b/lib/SCACore/SCASerialization.cpp @@ -0,0 +1,637 @@ +//------------------------------------------------------------------------------------------------------- +// Copyright (C) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. +//------------------------------------------------------------------------------------------------------- + +#include "SCACorePch.h" +#include "Common/ByteSwap.h" +#include "Library/JavascriptNumberObject.h" +#include "Library/JavascriptStringObject.h" +#include "Library/JavascriptBooleanObject.h" +#include "Library/DateImplementation.h" +#include "Library/JavascriptDate.h" +#include "Library/DataView.h" +#include "Library/ES5Array.h" + +#include "Types/PropertyIndexRanges.h" +#include "Types/DictionaryPropertyDescriptor.h" +#include "Types/DictionaryTypeHandler.h" +#include "Types/ES5ArrayTypeHandler.h" +#include "Library/JavascriptArrayIndexStaticEnumerator.h" +#include "Library/ES5ArrayIndexStaticEnumerator.h" + +namespace Js +{ + template + bool SerializationCloner::TryClonePrimitive(SrcTypeId typeId, Src src, Dst* dst) + { + switch (typeId) + { + case TypeIds_Undefined: + WriteTypeId(SCA_UndefinedValue); + break; + + case TypeIds_Null: + WriteTypeId(SCA_NullValue); + break; + + case TypeIds_Boolean: + WriteTypeId( + VarTo(src)->GetValue() ? SCA_TrueValue : SCA_FalseValue); + break; + + case TypeIds_Integer: + { + WriteTypeId(SCA_Int32Value); + m_writer->Write(TaggedInt::ToInt32(src)); + } + break; + + case TypeIds_Number: + { + WriteTypeId(SCA_DoubleValue); + m_writer->Write(JavascriptNumber::GetValue(src)); + } + break; + + case TypeIds_Int64Number: + { + WriteTypeId(SCA_Int64Value); + m_writer->Write(VarTo(src)->GetValue()); + } + break; + + case TypeIds_UInt64Number: + { + WriteTypeId(SCA_Uint64Value); + m_writer->Write(VarTo(src)->GetValue()); + } + break; + + default: + return false; // Not a recognized primitive type + } + + return true; + } + + template + bool SerializationCloner::TryCloneObject(SrcTypeId typeId, Src src, Dst* dst, SCADeepCloneType* deepClone) + { + RecyclableObject* obj = VarTo(src); + scaposition_t beginPos = m_writer->GetPosition(); + *deepClone = SCADeepCloneType::None; + + size_t transferredIndex = 0; + if (this->CanBeTransferred(typeId) && this->GetEngine()->TryGetTransferredOrShared(src, &transferredIndex)) + { + WriteTypeId(SCA_Transferable); + m_writer->Write((uint32)transferredIndex); + } + else if (JavascriptOperators::IsObjectDetached(src)) + { + //Object is detached, throw error + this->ThrowSCAObjectDetached(); + } + else + { + switch (typeId) + { + case TypeIds_String: // Clone string value as object type to resolve multiple references + { + JavascriptString* str = VarTo(obj); + WriteTypeId(SCA_StringValue); + Write(str->GetString(), str->GetLength()); + } + break; + + case TypeIds_Object: + { + WriteTypeId(SCA_Object); + *deepClone = SCADeepCloneType::Object; + } + break; + + case TypeIds_Proxy: + { + // Currently SCA algorithm does not support proxy. We'll see + // if the spec will be updated. I don't support QueryObjectInterface in proxy + // so we don't want to go through the default code path. + return false; + } + case TypeIds_Array: + case TypeIds_ES5Array: + case TypeIds_NativeIntArray: + case TypeIds_NativeFloatArray: + { + // Postpone writing to CloneProperties + *deepClone = SCADeepCloneType::Object; + } + break; + + case TypeIds_Date: + { + WriteTypeId(SCA_DateObject); + m_writer->Write(VarTo(src)->GetTime()); + } + break; + + case TypeIds_RegEx: + { + JavascriptRegExp* regex = VarTo(src); + InternalString str = regex->GetSource(); + DWORD flags = static_cast(regex->GetFlags()); + WriteTypeId(SCA_RegExpObject); + Write(str.GetBuffer(), str.GetLength()); + m_writer->Write(flags); + } + break; + + case TypeIds_BooleanObject: + WriteTypeId(VarTo(src)->GetValue() ? + SCA_BooleanTrueObject : SCA_BooleanFalseObject); + break; + + case TypeIds_NumberObject: + { + WriteTypeId(SCA_NumberObject); + m_writer->Write(VarTo(src)->GetValue()); + } + break; + + case TypeIds_StringObject: + { + JavascriptString* str = VarTo(src)->Unwrap(); + WriteTypeId(SCA_StringObject); + Write(str->GetString(), str->GetLength()); + } + break; + + case TypeIds_ArrayBuffer: + { + ArrayBuffer* buf = VarTo(src); + WriteTypeId(SCA_ArrayBuffer); + Write(buf->GetBuffer(), buf->GetByteLength()); + } + break; + + case TypeIds_SharedArrayBuffer: + { + // TBD + + //SCAContextType contextType; + //if (FAILED(this->m_pSCAContext->GetContext(&contextType))) + //{ + // return false; + //} + // + //if(contextType == SCAContext_CrossProcess || contextType == SCAContext_Persist) + //{ + // return false; + //} + + SharedArrayBuffer* buf = VarTo(src); + SharedContents* sharedContents = buf->GetSharedContents(); + Assert(buf->IsWebAssemblyArrayBuffer() == sharedContents->IsWebAssembly()); + sharedContents->AddRef(); + this->m_sharedContentsrList->Add(sharedContents); + WriteTypeId(SCA_SharedArrayBuffer); + m_writer->Write((intptr_t)sharedContents); + } + break; + + case TypeIds_Map: + { + WriteTypeId(SCA_Map); + *deepClone = SCADeepCloneType::Map; + } + break; + + case TypeIds_Set: + { + WriteTypeId(SCA_Set); + *deepClone = SCADeepCloneType::Set; + } + break; + +#ifdef ENABLE_WASM + case TypeIds_WebAssemblyModule: + { + WebAssemblyModule* wasmModule = VarTo(src); + WriteTypeId(SCA_WebAssemblyModule); + Write(wasmModule->GetBinaryBuffer(), wasmModule->GetBinaryBufferLength()); + } + break; + case TypeIds_WebAssemblyMemory: + { + WebAssemblyMemory* wasmMem = VarTo(src); + ArrayBufferBase* buffer = wasmMem->GetBuffer(); + WriteTypeId(SCA_WebAssemblyMemory); + Write(wasmMem->GetInitialLength()); + Write(wasmMem->GetMaximumLength()); +#ifdef ENABLE_WASM_THREADS + Write((uint32)wasmMem->IsSharedMemory()); + if (wasmMem->IsSharedMemory()) + { + WebAssemblySharedArrayBuffer* buf = VarTo(buffer); + SharedContents* sharedContents = buf->GetSharedContents(); + sharedContents->AddRef(); + this->m_sharedContentsrList->Add(sharedContents); + m_writer->Write((intptr_t)sharedContents); + } + else +#endif + { + Write(buffer->GetBuffer(), buffer->GetByteLength()); + } + break; + } +#endif + +#if ENABLE_COPYONACCESS_ARRAY + case TypeIds_CopyOnAccessNativeIntArray: + Assert(false); + // fall-through +#endif + + default: + if (IsTypedArray(typeId)) + { + WriteTypedArray(typeId, src); + } + else + { + // Try Host Object + *deepClone = SCADeepCloneType::HostObject; + } + break; + } + } + + *dst = beginPos; + return true; + } + + template + void SerializationCloner::CloneHostObjectProperties(SrcTypeId srcTypeId, Src src, Dst dst) + { + WriteTypeId(SCA_FirstHostObject); + + // Ask host to fill rest of the properties + m_writer->WriteHostObject((void*)src); + } + + template + void SerializationCloner::CloneProperties(SrcTypeId srcTypeId, Src src, Dst dst) + { + RecyclableObject* obj = VarTo(src); + // allocate the JavascriptStaticEnumerator on the heap to avoid blowing the stack + JavascriptStaticEnumerator enumerator; + ScriptContext* scriptContext = this->GetScriptContext(); + if (DynamicObject::IsAnyArrayTypeId(srcTypeId)) + { + JavascriptArray* arr = JavascriptArray::FromAnyArray(src); + bool isSparseArray = IsSparseArray(arr); + + WriteTypeId(isSparseArray ? SCA_SparseArray : SCA_DenseArray); + Write(arr->GetLength()); + + if (isSparseArray) + { + WriteSparseArrayIndexProperties(arr); + } + else + { + WriteDenseArrayIndexProperties(arr); + } + + // Now we only need to write remaining non-index properties + arr->GetNonIndexEnumerator(&enumerator, scriptContext); + } + else if (!obj->GetEnumerator(&enumerator, EnumeratorFlags::SnapShotSemantics, scriptContext)) + { + // Mark property end if we don't have enumerator + m_writer->Write(static_cast(SCA_PROPERTY_TERMINATOR)); + return; + } + + ObjectPropertyEnumerator propEnumerator(scriptContext, obj, &enumerator); + WriteObjectProperties(&propEnumerator); + } + + template + void SerializationCloner::CloneMap(Src src, Dst dst) + { + JavascriptMap* map = VarTo(src); + + Write((int32)(map->Size())); + + JavascriptMap::MapDataList::Iterator iter = map->GetIterator(); + while (iter.Next()) + { + const JavascriptMap::MapDataKeyValuePair& entry = iter.Current(); + this->GetEngine()->Clone(entry.Key()); + this->GetEngine()->Clone(entry.Value()); + } + } + + template + void SerializationCloner::CloneSet(Src src, Dst dst) + { + JavascriptSet* set = VarTo(src); + + Write((int32)(set->Size())); + + JavascriptSet::SetDataList::Iterator iter = set->GetIterator(); + while (iter.Next()) + { + this->GetEngine()->Clone(iter.Current()); + } + } + + template + void SerializationCloner::CloneObjectReference(Src src, Dst dst) + { + WriteTypeId(SCA_Reference); + m_writer->Write(dst); + } + + // + // Write layout: [byteLen] [string content] [padding] + // + template + void SerializationCloner::Write(const char16* str, charcount_t len) const + { + uint32 byteLen = static_cast(sizeof(char16) * len); + m_writer->Write(byteLen); + m_writer->Write(str, byteLen); + uint32 unalignedLen = byteLen % sizeof(uint32); + if (unalignedLen) + { + uint32 padding = 0; + m_writer->Write(&padding, sizeof(uint32) - unalignedLen); + } + } + + // + // Write layout: [byteLen] [byte data] [padding] + // + template + void SerializationCloner::Write(const BYTE* bytes, uint32 len) const + { + m_writer->Write(len); + m_writer->Write(bytes, len); + uint32 unalignedLen = len % sizeof(uint32); + if (unalignedLen) + { + uint32 padding = 0; + m_writer->Write(&padding, sizeof(uint32) - unalignedLen); + } + } + + // + // Check if a SrcTypeId is of a TypedArray or DataView. + // + template + bool SerializationCloner::IsTypedArray(SrcTypeId typeId) + { + return (typeId >= TypeIds_TypedArraySCAMin && typeId <= TypeIds_TypedArraySCAMax) + || typeId == TypeIds_DataView; + } + + // + // Write a TypedArray or a DataView layout. + // + template + void SerializationCloner::WriteTypedArray(SrcTypeId typeId, Src src) const + { + switch (typeId) + { + case TypeIds_Int8Array: + if (Int8VirtualArray::HasVirtualTableInfo(src)) + { + WriteTypedArray(src); + } + else + { + WriteTypedArray(src); + } + break; + + case TypeIds_Uint8Array: + if (Uint8VirtualArray::HasVirtualTableInfo(src)) + { + WriteTypedArray(src); + } + else + { + WriteTypedArray(src); + } + break; + + case TypeIds_Uint8ClampedArray: + if (Uint8ClampedVirtualArray::HasVirtualTableInfo(src)) + { + WriteTypedArray(src); + } + else + { + WriteTypedArray(src); + } + break; + + case TypeIds_Int16Array: + if (Int16VirtualArray::HasVirtualTableInfo(src)) + { + WriteTypedArray(src); + } + else + { + WriteTypedArray(src); + } + break; + + case TypeIds_Uint16Array: + if (Uint16VirtualArray::HasVirtualTableInfo(src)) + { + WriteTypedArray(src); + } + else + { + WriteTypedArray(src); + } + break; + + case TypeIds_Int32Array: + if (Int32VirtualArray::HasVirtualTableInfo(src)) + { + WriteTypedArray(src); + } + else + { + WriteTypedArray(src); + } + break; + + case TypeIds_Uint32Array: + if (Uint32VirtualArray::HasVirtualTableInfo(src)) + { + WriteTypedArray(src); + } + else + { + WriteTypedArray(src); + } + break; + + case TypeIds_Float32Array: + if (Float32VirtualArray::HasVirtualTableInfo(src)) + { + WriteTypedArray(src); + } + else + { + WriteTypedArray(src); + } + break; + + case TypeIds_Float64Array: + if (Float64VirtualArray::HasVirtualTableInfo(src)) + { + WriteTypedArray(src); + } + else + { + WriteTypedArray(src); + } + break; + + case TypeIds_DataView: + WriteTypedArray(src); + break; + + default: + Assert(false); + } + } + + // + // Do an arbitrary test to determine serializing a JavascriptArray as sparse array or not. + // + template + bool SerializationCloner::IsSparseArray(JavascriptArray* arr) + { + uint32 length = arr->GetLength(); + if (length > SparseArraySegmentBase::HEAD_CHUNK_SIZE) + { + // Consider it a sparse array if the array size is non-trivial, and there + // are empty slots found by some arbitrary sampling. + return !JavascriptOperators::HasOwnItem(arr, length / 4) + || !JavascriptOperators::HasOwnItem(arr, length / 2) + || !JavascriptOperators::HasOwnItem(arr, length / 2 + length / 4); + } + + return false; + } + + // + // Write dense array index named properties. + // + template + void SerializationCloner::WriteDenseArrayIndexProperties(JavascriptArray* arr) + { + if (JavascriptArray::IsNonES5Array(arr)) + { + if (!arr->IsCrossSiteObject()) + { + WriteArrayIndexProperties(arr); + } + else + { + WriteArrayIndexProperties(arr); + } + } + else + { + WriteArrayIndexProperties(arr); + } + } + + // + // Write sparse array index named properties. + // + template + void SerializationCloner::WriteSparseArrayIndexProperties(JavascriptArray* arr) + { + if (JavascriptArray::IsNonES5Array(arr)) + { + if (!arr->IsCrossSiteObject()) + { + WriteSparseArrayIndexProperties< + JavascriptArrayIndexStaticEnumerator, JavascriptArrayDirectItemAccessor>(arr); + } + else + { + WriteSparseArrayIndexProperties< + JavascriptArrayIndexStaticEnumerator, JavascriptArrayItemAccessor>(arr); + } + } + else + { + // We don't need JavascriptArrayEnumerableItemAccessor to check enumberable since we'll + // enumerate enumerable index named properties through ES5ArrayIndexEnumerator. Just use + // JavascriptArrayItemAccessor. + WriteSparseArrayIndexProperties< + ES5ArrayIndexStaticEnumerator<>, JavascriptArrayItemAccessor>(VarTo(arr)); + } + } + + template class SerializationCloner; + + bool ObjectPropertyEnumerator::MoveNext() + { + if (m_innerEnumerator) + { + ScriptContext* scriptContext = this->GetScriptContext(); + Var undefined = scriptContext->GetLibrary()->GetUndefined(); + Var propertyName; + PropertyId propertyId; + + while ((propertyName = m_innerEnumerator->MoveAndGetNext(propertyId)) != NULL) + { + if (propertyName != undefined) //There are some code paths in which GetCurrentIndex can return undefined + { + m_name = VarTo(propertyName); + + if (propertyId != Constants::NoProperty) + { + m_value = JavascriptOperators::GetProperty(m_obj, propertyId, scriptContext); + } + else + { + m_value = JavascriptOperators::OP_GetElementI(m_obj, propertyName, scriptContext); + } + + return true; + } + } + + // No more properties, mark end + m_innerEnumerator = NULL; + } + + return false; + } + + void SCASerializationEngine::Serialize(Var root, StreamWriter* writer, Var* transferableVars, size_t cTransferableVars, + JsUtil::List* sharedContentsList) + { + ScriptContext* scriptContext = writer->GetScriptContext(); + + // Write version + writer->Write(static_cast(SCA_FORMAT_VERSION)); + + StreamSerializationCloner cloner(scriptContext, writer, sharedContentsList); + SCAEngine::Clone(root, &cloner, transferableVars, cTransferableVars); + } +} diff --git a/lib/SCACore/SCASerialization.h b/lib/SCACore/SCASerialization.h new file mode 100644 index 00000000000..9d4724610f8 --- /dev/null +++ b/lib/SCACore/SCASerialization.h @@ -0,0 +1,339 @@ +//------------------------------------------------------------------------------------------------------- +// Copyright (C) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. +//------------------------------------------------------------------------------------------------------- + +#pragma once +namespace Js +{ + // + // SerializationCloner helps clone a Var to a stream location. + // + template + class SerializationCloner: + public ClonerBase > + { + public: + using typename ClonerBase >::Dst; + using typename ClonerBase >::Src; + using typename ClonerBase >::SrcTypeId; + + private: + //AutoCOMPtr m_pSCAContext; + Writer* m_writer; + // AutoCOMPtr m_pSCASerializable; // Temporary, QI from a host object + JsUtil::List* m_sharedContentsrList; + + private: + void WriteTypeId(SCATypeId typeId) const + { + Write(static_cast(typeId)); + } + + void Write(uint32 data) const + { + m_writer->Write(data); + } + + void Write(const char16* str, charcount_t len) const; + void Write(const BYTE* bytes, uint32 len) const; + + // + // Write a TypedArray or a DataView layout: [SCATypeId] [ArrayBuffer] [byteOffset] [length] + // + template + void WriteTypedArray(Src src) const + { + typedef TypedArrayTrace trace_type; + typedef typename trace_type::TypedArrayType array_type; + + WriteTypeId(trace_type::GetSCATypeId()); + array_type* arr = VarTo(src); + + this->GetEngine()->Clone(arr->GetArrayBuffer()); + + Write(arr->GetByteOffset()); + Write(arr->GetLength()); + } + + static bool IsTypedArray(SrcTypeId typeId); + void WriteTypedArray(SrcTypeId typeId, Src src) const; + + static bool IsSparseArray(JavascriptArray* arr); + void WriteDenseArrayIndexProperties(JavascriptArray* arr); + void WriteSparseArrayIndexProperties(JavascriptArray* arr); + + // + // Write array index named properties. + // + template + void WriteArrayIndexProperties(JavascriptArray* arr) + { + ScriptContext* scriptContext = this->GetScriptContext(); + uint32 length = arr->GetLength(); + + for (uint32 i = 0; i < length; i++) + { + Var value = nullptr; + if (ArrayItemAccessor::GetItem(arr, i, &value, scriptContext)) + { + this->GetEngine()->Clone(value); + } + else + { + WriteTypeId(SCA_None); + } + } + } + + // + // Write sparse array index named properties using an array index enumerator. + // + template + void WriteSparseArrayIndexProperties(typename IndexEnumerator::ArrayType* arr) + { + ScriptContext* scriptContext = this->GetScriptContext(); + IndexEnumerator e(arr); + Var value = nullptr; + + while (e.MoveNext()) + { + uint32 i = e.GetIndex(); + if (ArrayItemAccessor::GetItem(arr, i, &value, scriptContext)) + { + Write(i); + this->GetEngine()->Clone(value); + } + } + + Write(static_cast(SCA_PROPERTY_TERMINATOR)); + } + + // + // Write a SCAProperties section: {SCAPropertyName SCAValue} SCAPropertiesTerminator + // + template + void WriteObjectProperties(Enumerator* enumerator) + { + while (enumerator->MoveNext()) + { + // Write property name + Write(enumerator->GetNameString(), enumerator->GetNameLength()); + + // Write property value + this->GetEngine()->Clone(enumerator->GetValue()); + } + + // Write property terminator + m_writer->Write(static_cast(SCA_PROPERTY_TERMINATOR)); + } + + // Direct item accessor used on non-crosssite JavascriptArray for WriteArrayIndexProperties. + class JavascriptArrayDirectItemAccessor + { + public: + static BOOL GetItem(JavascriptArray* arr, uint32 index, Var* value, ScriptContext* scriptContext) + { + return arr->GetItem(arr, index, value, scriptContext); + } + }; + + // Item accessor used on cross-site JavascriptArray for WriteArrayIndexProperties. + class JavascriptArrayItemAccessor + { + public: + static BOOL GetItem(JavascriptArray* arr, uint32 index, Var* value, ScriptContext* scriptContext) + { + return JavascriptOperators::GetOwnItem(arr, index, value, scriptContext); + } + }; + + // Item accessor used on ES5Array for WriteArrayIndexProperties. + class JavascriptArrayEnumerableItemAccessor + { + public: + static BOOL GetItem(JavascriptArray* arr, uint32 index, Var* value, ScriptContext* scriptContext) + { + return arr->IsItemEnumerable(index) + && JavascriptOperators::GetOwnItem(arr, index, value, scriptContext); + } + }; + + public: + SerializationCloner(ScriptContext* scriptContext, Writer* writer, JsUtil::List* sharedContentsrList) + : ClonerBase >(scriptContext), m_writer(writer), m_sharedContentsrList(sharedContentsrList) + { + } + + static bool ShouldLookupReference() + { + // Always lookup reference when cloning Vars + return true; + } + + SrcTypeId GetTypeId(Src src) const + { + return JavascriptOperators::GetTypeId(src); + } + + bool TryClonePrimitive(SrcTypeId typeId, Src src, Dst* dst); + bool TryCloneObject(SrcTypeId typeId, Src src, Dst* dst, SCADeepCloneType* deepClone); + void CloneProperties(SrcTypeId typeId, Src src, Dst dst); + void CloneHostObjectProperties(SrcTypeId typeId, Src src, Dst dst); + void CloneMap(Src src, Dst dst); + void CloneSet(Src src, Dst dst); + void CloneObjectReference(Src src, Dst dst); + bool CanBeTransferred(SrcTypeId typeId) { return typeId == TypeIds_ArrayBuffer; } + }; + + // + // Object property enumerator for WriteObjectProperties. + // + class ObjectPropertyEnumerator: public ScriptContextHolder + { + private: + RecyclableObject* m_obj; + JavascriptStaticEnumerator* m_innerEnumerator; + JavascriptString* m_name; + Var m_value; + + public: + ObjectPropertyEnumerator(ScriptContext* scriptContext, RecyclableObject* obj, JavascriptStaticEnumerator* enumerator) + : ScriptContextHolder(scriptContext), + m_obj(obj), + m_innerEnumerator(enumerator), + m_name(NULL), + m_value(NULL) + { + } + + bool MoveNext(); + + const char16* GetNameString() const + { + return m_name->GetString(); + } + + charcount_t GetNameLength() const + { + return m_name->GetLength(); + } + + Var GetValue() const + { + return m_value; + } + }; + + // + // Template and specializations for TypedArray/DataView SCA. + // + template struct TypedArrayTrace + { + // Generic TypedArrayTrace is empty. Specializations provide implementation. + }; + + // Base implementation shared by data type TypedArrays. + template struct TypedArrayTraceBase + { + typedef TypedArray TypedArrayType; + static Var CreateTypedArray(ArrayBufferBase* arrayBuffer, uint32 byteOffset, uint32 length, + ScriptContext* scriptContext) + { + JavascriptLibrary* lib = scriptContext->GetLibrary(); + return TypedArrayType::Create(arrayBuffer, byteOffset, length, lib); + } + }; + template<> struct TypedArrayTrace: TypedArrayTraceBase + { + static SCATypeId GetSCATypeId() { return SCA_Int8Array; } + }; + template<> struct TypedArrayTrace: TypedArrayTraceBase + { + static SCATypeId GetSCATypeId() { return SCA_Uint8Array; } + }; + template<> struct TypedArrayTrace: TypedArrayTraceBase + { + static SCATypeId GetSCATypeId() { return SCA_Uint8ClampedArray; } + }; + template<> struct TypedArrayTrace: TypedArrayTraceBase + { + static SCATypeId GetSCATypeId() { return SCA_Int16Array; } + }; + template<> struct TypedArrayTrace: TypedArrayTraceBase + { + static SCATypeId GetSCATypeId() { return SCA_Uint16Array; } + }; + template<> struct TypedArrayTrace: TypedArrayTraceBase + { + static SCATypeId GetSCATypeId() { return SCA_Int32Array; } + }; + template<> struct TypedArrayTrace: TypedArrayTraceBase + { + static SCATypeId GetSCATypeId() { return SCA_Uint32Array; } + }; + template<> struct TypedArrayTrace: TypedArrayTraceBase + { + static SCATypeId GetSCATypeId() { return SCA_Float32Array; } + }; + template<> struct TypedArrayTrace: TypedArrayTraceBase + { + static SCATypeId GetSCATypeId() { return SCA_Float64Array; } + }; + template<> struct TypedArrayTrace: TypedArrayTraceBase + { + static SCATypeId GetSCATypeId() { return SCA_Int8Array; } + }; + template<> struct TypedArrayTrace: TypedArrayTraceBase + { + static SCATypeId GetSCATypeId() { return SCA_Uint8Array; } + }; + template<> struct TypedArrayTrace: TypedArrayTraceBase + { + static SCATypeId GetSCATypeId() { return SCA_Uint8ClampedArray; } + }; + template<> struct TypedArrayTrace: TypedArrayTraceBase + { + static SCATypeId GetSCATypeId() { return SCA_Int16Array; } + }; + template<> struct TypedArrayTrace: TypedArrayTraceBase + { + static SCATypeId GetSCATypeId() { return SCA_Uint16Array; } + }; + template<> struct TypedArrayTrace: TypedArrayTraceBase + { + static SCATypeId GetSCATypeId() { return SCA_Int32Array; } + }; + template<> struct TypedArrayTrace: TypedArrayTraceBase + { + static SCATypeId GetSCATypeId() { return SCA_Uint32Array; } + }; + template<> struct TypedArrayTrace: TypedArrayTraceBase + { + static SCATypeId GetSCATypeId() { return SCA_Float32Array; } + }; + template<> struct TypedArrayTrace: TypedArrayTraceBase + { + static SCATypeId GetSCATypeId() { return SCA_Float64Array; } + }; + template<> struct TypedArrayTrace + { + typedef DataView TypedArrayType; + static Var CreateTypedArray(ArrayBufferBase* arrayBuffer, uint32 byteOffset, uint32 length, + ScriptContext* scriptContext) + { + JavascriptLibrary* lib = scriptContext->GetLibrary(); + return lib->CreateDataView(arrayBuffer, byteOffset, length); + } + static SCATypeId GetSCATypeId() { return SCA_DataView; } + }; + + class SCASerializationEngine + { + typedef SerializationCloner StreamSerializationCloner; + + public: + static void Serialize(Var root, StreamWriter* writer, Var* transferableVars, size_t cTransferableVars, + JsUtil::List* sharedContentsList); + }; +} diff --git a/lib/SCACore/SCATypes.h b/lib/SCACore/SCATypes.h new file mode 100644 index 00000000000..a3d672a1a18 --- /dev/null +++ b/lib/SCACore/SCATypes.h @@ -0,0 +1,79 @@ +//------------------------------------------------------------------------------------------------------- +// Copyright (C) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. +//------------------------------------------------------------------------------------------------------- + +#pragma once + +#define SCA_FORMAT_MAJOR 1 +#define SCA_FORMAT_MINOR 0 +#define SCA_FORMAT_VERSION (MAKELONG(0, MAKEWORD(SCA_FORMAT_MINOR, SCA_FORMAT_MAJOR))) +#define GetSCAMajor(header) HIBYTE(HIWORD(header)) +#define GetSCAMinor(header) LOBYTE(HIWORD(header)) +typedef +enum SCATypeId +{ + SCA_None = 0, + SCA_Reference = 1, + SCA_NullValue = 2, + SCA_UndefinedValue = 3, + SCA_TrueValue = 4, + SCA_FalseValue = 5, + SCA_Int32Value = 6, + SCA_DoubleValue = 7, + SCA_StringValue = 8, + SCA_Int64Value = 9, + SCA_Uint64Value = 10, + SCA_LastPrimitive = SCA_Uint64Value, + SCA_BooleanTrueObject = 21, + SCA_BooleanFalseObject = 22, + SCA_DateObject = 23, + SCA_NumberObject = 24, + SCA_StringObject = 25, + SCA_RegExpObject = 26, + SCA_Object = 27, + SCA_Transferable = 28, + SCA_DenseArray = 50, + SCA_SparseArray = 51, + SCA_CanvasPixelArray = 52, + SCA_ArrayBuffer = 60, + SCA_Int8Array = 61, + SCA_Uint8Array = 62, + SCA_Int16Array = 63, + SCA_Uint16Array = 64, + SCA_Int32Array = 65, + SCA_Uint32Array = 66, + SCA_Float32Array = 67, + SCA_Float64Array = 68, + SCA_DataView = 69, + SCA_Uint8ClampedArray = 70, + SCA_TypedArrayMin = SCA_Int8Array, + SCA_TypedArrayMax = SCA_Float64Array, + SCA_Map = 80, + SCA_Set = 81, + SCA_SharedArrayBuffer = 82, + SCA_WebAssemblyModule = 85, + SCA_WebAssemblyMemory = 86, + SCA_FirstHostObject = 100, + SCA_BlobObject = 101, + SCA_FileObject = 102, + SCA_ImageDataObject = 103, + SCA_FileListObject = 104, + SCA_StreamObject = 105, + SCA_WebCryptoKeyObject = 106, + SCA_MessagePort = 107, + SCA_Last = (SCA_MessagePort + 1) +} SCATypeId; + +typedef unsigned int scaposition_t; + +#define SCA_PROPERTY_TERMINATOR 0xFFFFFFFF +#define IsSCAPrimitive(scaTypeId) ((scaTypeId) <= SCA_LastPrimitive) +#define IsSCAHostObject(scaTypeId) ((scaTypeId) >= SCA_FirstHostObject) +#define IsSCATypedArray(scaTypeId) ((scaTypeId) == SCA_Uint8ClampedArray || ((scaTypeId) >= SCA_TypedArrayMin && (scaTypeId) <= SCA_TypedArrayMax)) +#define FACILITY_SCA FACILITY_ITF +#define E_SCA_UNSUPPORTED MAKE_HRESULT(SEVERITY_ERROR, FACILITY_SCA, 0x1000) +#define E_SCA_NEWVERSION MAKE_HRESULT(SEVERITY_ERROR, FACILITY_SCA, 0x1001) +#define E_SCA_DATACORRUPT MAKE_HRESULT(SEVERITY_ERROR, FACILITY_SCA, 0x1002) +#define E_SCA_TRANSFERABLE_UNSUPPORTED MAKE_HRESULT(SEVERITY_ERROR, FACILITY_SCA, 0x1003) +#define E_SCA_TRANSFERABLE_NEUTERED MAKE_HRESULT(SEVERITY_ERROR, FACILITY_SCA, 0x1004) diff --git a/test/Boolean/simple1.js b/lib/SCACore/StreamHelper.cpp similarity index 66% rename from test/Boolean/simple1.js rename to lib/SCACore/StreamHelper.cpp index 866e6808fe0..0b5f73f6404 100644 --- a/test/Boolean/simple1.js +++ b/lib/SCACore/StreamHelper.cpp @@ -1,12 +1,10 @@ -//------------------------------------------------------------------------------------------------------- -// Copyright (C) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. -//------------------------------------------------------------------------------------------------------- - -var f = false; -var t = true; - -if(!f) WScript.Echo("test 1"); -if(!!!f) WScript.Echo("test 2"); -if(t) WScript.Echo("test 3"); -if(!!t) WScript.Echo("test 4"); +//------------------------------------------------------------------------------------------------------- +// Copyright (C) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. +//------------------------------------------------------------------------------------------------------- + +#include "SCACorePch.h" + +namespace Js +{ +} diff --git a/lib/SCACore/StreamHelper.h b/lib/SCACore/StreamHelper.h new file mode 100644 index 00000000000..29efffbd067 --- /dev/null +++ b/lib/SCACore/StreamHelper.h @@ -0,0 +1,36 @@ +//------------------------------------------------------------------------------------------------------- +// Copyright (C) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. +//------------------------------------------------------------------------------------------------------- + +#pragma once +namespace Js +{ + // + // Helper class to implement stream reader/writer. Note that this stream helper class + // maintains its own stream position and ensures the stream position fits scaposition_t. + // + class StreamHelper: public ScriptContextHolder + { + private: + HostStream *m_stream; + + protected: + HostStream* GetStream() const + { + return m_stream; + } + + void ThrowOverflow() const + { + ::Math::DefaultOverflowPolicy(); + } + + public: + StreamHelper(ScriptContext* scriptContext, HostStream* stream) + : ScriptContextHolder(scriptContext), + m_stream(stream) + { + } + }; +} diff --git a/lib/SCACore/StreamReader.cpp b/lib/SCACore/StreamReader.cpp new file mode 100644 index 00000000000..8d126739586 --- /dev/null +++ b/lib/SCACore/StreamReader.cpp @@ -0,0 +1,37 @@ +//------------------------------------------------------------------------------------------------------- +// Copyright (C) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. +//------------------------------------------------------------------------------------------------------- + +#include "SCACorePch.h" + +namespace Js +{ + void StreamReader::Read(void* pv, size_t cb) + { + Assert(cb < m_length); + // Read from buffer + js_memcpy_s(pv, cb, m_buffer + m_current, cb); + m_current += cb; + } + + Var StreamReader::ReadHostObject() + { + Var object = nullptr; + ScriptContext* scriptContext = GetScriptContext(); + BEGIN_LEAVE_SCRIPT(scriptContext) + { + object = m_stream->ReadHostObject(); + } + END_LEAVE_SCRIPT(scriptContext); + return object; + } + + // + // Overload to count for buffer position. + // + scaposition_t StreamReader::GetPosition() const + { + return static_cast(m_current); + } +} diff --git a/lib/SCACore/StreamReader.h b/lib/SCACore/StreamReader.h new file mode 100644 index 00000000000..de141c7c857 --- /dev/null +++ b/lib/SCACore/StreamReader.h @@ -0,0 +1,67 @@ +//------------------------------------------------------------------------------------------------------- +// Copyright (C) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. +//------------------------------------------------------------------------------------------------------- + +#pragma once +namespace Js +{ + // + // A simple stream reader that hides low level stream details. + // + class StreamReader: public ScriptContextHolder + { + private: + HostReadStream *m_stream; + byte *m_buffer; + size_t m_current; + size_t m_length; + + // + // Get number of bytes left for read in the buffer. + // + size_t GetBytesInBuffer() const + { + return m_length - m_current; + } + + // ULONG RealRead(void* pv, ULONG cb); + + public: + StreamReader(ScriptContext* scriptContext, byte* buffer, size_t length, HostReadStream *stream) + : ScriptContextHolder(scriptContext), + m_stream(stream), + m_buffer(buffer), + m_current(0), + m_length(length) + { + } + + Var ReadHostObject(); + void Read(void* pv, size_t cb); + + void ReadRawBytes(void** pv, size_t cb) + { + Assert(cb < m_length); + *pv = (m_buffer + m_current); + m_current += cb; + } + + template + void Read(T* value) + { + if (GetBytesInBuffer() >= sizeof(T)) + { + *value = *(T*)(m_buffer + m_current); + m_current += sizeof(T); + } + else + { + Read(value, sizeof(T)); + } + } + + scaposition_t GetPosition() const; + }; + +} diff --git a/lib/SCACore/StreamWriter.cpp b/lib/SCACore/StreamWriter.cpp new file mode 100644 index 00000000000..036784184b6 --- /dev/null +++ b/lib/SCACore/StreamWriter.cpp @@ -0,0 +1,47 @@ +//------------------------------------------------------------------------------------------------------- +// Copyright (C) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. +//------------------------------------------------------------------------------------------------------- + +#include "SCACorePch.h" + +namespace Js +{ + void StreamWriter::Write(const void* pv, size_t cb) + { + ScriptContext* scriptContext = GetScriptContext(); + uint32 newSize = UInt32Math::Add((uint32)m_current, (uint32)cb); + if (newSize >= m_capacity) + { + size_t newCapacity = UInt32Math::Add(max(newSize, UInt32Math::Mul((uint32)m_capacity, 2)), 100); + BEGIN_LEAVE_SCRIPT(scriptContext) + { + m_buffer = m_stream->ExtendBuffer(m_buffer, newCapacity, &m_capacity); + } + END_LEAVE_SCRIPT(scriptContext); + } + + Assert(m_buffer != nullptr); + js_memcpy_s(m_buffer + m_current, cb, pv, cb); + m_current += cb; + } + + void StreamWriter::WriteHostObject(void* data) + { + ScriptContext* scriptContext = GetScriptContext(); + BEGIN_LEAVE_SCRIPT(scriptContext) + { + m_stream->WriteHostObject(data); + } + END_LEAVE_SCRIPT(scriptContext); + } + + // + // Overload to count for buffer position. + // + scaposition_t StreamWriter::GetPosition() const + { + // If this overflows, we will throw during Flush/RealWrite. So skip checking here. + return static_cast(m_current); + } +} diff --git a/lib/SCACore/StreamWriter.h b/lib/SCACore/StreamWriter.h new file mode 100644 index 00000000000..5897b73d9f2 --- /dev/null +++ b/lib/SCACore/StreamWriter.h @@ -0,0 +1,60 @@ +//------------------------------------------------------------------------------------------------------- +// Copyright (C) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. +//------------------------------------------------------------------------------------------------------- + +#pragma once +namespace Js +{ + // + // A simple stream writer that hides low level stream details. + // + // Note: + // This stream writer uses an internal buffer. Must call Flush() at the end to ensure + // any remained content in the internal buffer is sent to the output stream. + // + class StreamWriter: public ScriptContextHolder + { + private: + HostStream *m_stream; + byte *m_buffer; + size_t m_current; + size_t m_capacity; + + public: + StreamWriter(ScriptContext* scriptContext, HostStream* stream) + : ScriptContextHolder(scriptContext), + m_stream(stream), + m_buffer(nullptr), + m_current(0), + m_capacity(0) + { + } + + byte* GetBuffer() { return m_buffer; } + size_t GetLength() { return m_current; } + + void Write(const void* pv, size_t cb); + void WriteHostObject(void* data); + + template + void Write(const T& value) + { + if ((m_current + sizeof(T)) < m_capacity) + { + *(T*)(m_buffer + m_current) = value; + m_current += sizeof(T); + } + else + { + Write(&value, sizeof(T)); + } + } + + + //_Post_satisfies_(m_cur == 0) + //void Flush(); + + scaposition_t GetPosition() const; + }; +} diff --git a/lib/WasmReader/EmptyWasmByteCodeWriter.h b/lib/WasmReader/EmptyWasmByteCodeWriter.h index 1414de459c7..d44ce4b648f 100644 --- a/lib/WasmReader/EmptyWasmByteCodeWriter.h +++ b/lib/WasmReader/EmptyWasmByteCodeWriter.h @@ -50,4 +50,4 @@ namespace Js virtual void SetCallSiteCount(Js::ProfileId callSiteCount) override {} }; } -#endif \ No newline at end of file +#endif diff --git a/lib/WasmReader/WasmBinaryOpcodesSimd.h b/lib/WasmReader/WasmBinaryOpcodesSimd.h index 66d639a8e72..6999993f12c 100644 --- a/lib/WasmReader/WasmBinaryOpcodesSimd.h +++ b/lib/WasmReader/WasmBinaryOpcodesSimd.h @@ -15,10 +15,6 @@ #define WASM_REPLACELANE_OPCODE(opname, opcode, sig, asmjsop, imp, wat) WASM_LANE_OPCODE(opname, opcode, sig, imp, wat) #endif -#ifndef WASM_SIMD_BUILD_OPCODE -#define WASM_SIMD_BUILD_OPCODE(opname, opcode, sig, asmjop, lanes, imp, wat) WASM_OPCODE(opname, opcode, sig, imp, wat) -#endif - #ifndef WASM_SIMD_MEMREAD_OPCODE #define WASM_SIMD_MEMREAD_OPCODE(opname, opcode, sig, asmjsop, viewtype, dataWidth, imp, wat) WASM_MEM_OPCODE(opname, opcode, sig, imp, wat) #endif @@ -31,159 +27,169 @@ WASM_PREFIX(Simd, WASM_PREFIX_SIMD, Wasm::Simd::IsEnabled(), "WebAssembly Simd support is not enabled") //SIMD Signatures -WASM_SIGNATURE(F_M128, 2, WasmTypes::F32, WasmTypes::M128) -WASM_SIGNATURE(I_M128, 2, WasmTypes::I32, WasmTypes::M128) -WASM_SIGNATURE(M128_I, 2, WasmTypes::M128, WasmTypes::I32) -WASM_SIGNATURE(M128_F, 2, WasmTypes::M128, WasmTypes::F32) -WASM_SIGNATURE(M128_L, 2, WasmTypes::M128, WasmTypes::I64) -WASM_SIGNATURE(M128_D, 2, WasmTypes::M128, WasmTypes::F64) -WASM_SIGNATURE(M128X3, 3, WasmTypes::M128, WasmTypes::M128, WasmTypes::M128) -WASM_SIGNATURE(M128_M128_I, 3, WasmTypes::M128, WasmTypes::M128, WasmTypes::I32) -WASM_SIGNATURE(M128_M128, 2, WasmTypes::M128, WasmTypes::M128) -WASM_SIGNATURE(L_M128, 2, WasmTypes::I64, WasmTypes::M128) -WASM_SIGNATURE(D_M128_I, 3, WasmTypes::F64, WasmTypes::M128, WasmTypes::I32) +WASM_SIGNATURE(F_V128, 2, WasmTypes::F32, WasmTypes::V128) +WASM_SIGNATURE(I_V128, 2, WasmTypes::I32, WasmTypes::V128) +WASM_SIGNATURE(V128_I, 2, WasmTypes::V128, WasmTypes::I32) +WASM_SIGNATURE(V128_F, 2, WasmTypes::V128, WasmTypes::F32) +WASM_SIGNATURE(V128_L, 2, WasmTypes::V128, WasmTypes::I64) +WASM_SIGNATURE(V128_D, 2, WasmTypes::V128, WasmTypes::F64) +WASM_SIGNATURE(V128X3, 3, WasmTypes::V128, WasmTypes::V128, WasmTypes::V128) +WASM_SIGNATURE(V128_V128_I, 3, WasmTypes::V128, WasmTypes::V128, WasmTypes::I32) +WASM_SIGNATURE(V128_V128, 2, WasmTypes::V128, WasmTypes::V128) +WASM_SIGNATURE(L_V128, 2, WasmTypes::I64, WasmTypes::V128) +WASM_SIGNATURE(D_V128_I, 3, WasmTypes::F64, WasmTypes::V128, WasmTypes::I32) #define __prefix (WASM_PREFIX_SIMD << 8) -WASM_MISC_OPCODE(M128Const, __prefix | 0x00, Limit, true, "v128.const") -WASM_SIMD_MEMREAD_OPCODE(M128Load, __prefix | 0x01, M128_I, Simd128_LdArr_F4, Js::ArrayBufferView::TYPE_FLOAT32, 16, true, "v128.load") -WASM_SIMD_MEMSTORE_OPCODE(M128Store, __prefix | 0x02, M128_I, Simd128_StArr_F4, Js::ArrayBufferView::TYPE_FLOAT32, 16, true, "v128.store") -WASM_UNARY__OPCODE(I16Splat, __prefix | 0x03, M128_I, Simd128_Splat_I16, true, "i8x16.splat") -WASM_UNARY__OPCODE(I8Splat, __prefix | 0x04, M128_I, Simd128_Splat_I8, true, "i16x8.splat") -WASM_UNARY__OPCODE(I4Splat, __prefix | 0x05, M128_I, Simd128_Splat_I4, true, "i32x4.splat") -WASM_UNARY__OPCODE(I2Splat, __prefix | 0x06, M128_L, Simd128_Splat_I2, true, "i64x2.splat") -WASM_UNARY__OPCODE(F4Splat, __prefix | 0x07, M128_F, Simd128_Splat_F4, true, "f32x4.splat") -WASM_UNARY__OPCODE(F2Splat, __prefix | 0x08, M128_D, Simd128_Splat_D2, true, "f64x2.splat") -WASM_EXTRACTLANE_OPCODE(I16ExtractLaneS, __prefix | 0x09, I_M128, Simd128_ExtractLane_I16, true, "i8x16.extract_lane_s") -WASM_EXTRACTLANE_OPCODE(I16ExtractLaneU, __prefix | 0x0a, I_M128, Simd128_ExtractLane_U16, true, "i8x16.extract_lane_u") -WASM_EXTRACTLANE_OPCODE(I8ExtractLaneS, __prefix | 0x0b, I_M128, Simd128_ExtractLane_I8, true, "i16x8.extract_lane_s") -WASM_EXTRACTLANE_OPCODE(I8ExtractLaneU, __prefix | 0x0c, I_M128, Simd128_ExtractLane_U8, true, "i16x8.extract_lane_u") -WASM_EXTRACTLANE_OPCODE(I4ExtractLane, __prefix | 0x0d, I_M128, Simd128_ExtractLane_I4, true, "i32x4.extract_lane") -WASM_EXTRACTLANE_OPCODE(I2ExtractLane, __prefix | 0x0e, L_M128, Simd128_ExtractLane_I2, true, "i64x2.extract_lane") -WASM_EXTRACTLANE_OPCODE(F4ExtractLane, __prefix | 0x0f, I_M128, Simd128_ExtractLane_F4, true, "f32x4.extract_lane") -WASM_BINARY_OPCODE(F2ExtractLane, __prefix | 0x10, D_M128_I, Simd128_ExtractLane_D2, true, "f64x2.extract_lane") -WASM_REPLACELANE_OPCODE(I16ReplaceLane, __prefix | 0x11, M128_I, Simd128_ReplaceLane_I16, true, "i8x16.replace_lane") -WASM_REPLACELANE_OPCODE(I8ReplaceLane, __prefix | 0x12, M128_I, Simd128_ReplaceLane_I8, true, "i16x8.replace_lane") -WASM_REPLACELANE_OPCODE(I4ReplaceLane, __prefix | 0x13, M128_I, Simd128_ReplaceLane_I4, true, "i32x4.replace_lane") -WASM_REPLACELANE_OPCODE(I2ReplaceLane, __prefix | 0x14, M128_L, Simd128_ReplaceLane_I2, true, "i64x2.replace_lane") -WASM_REPLACELANE_OPCODE(F4ReplaceLane, __prefix | 0x15, M128_F, Simd128_ReplaceLane_F4, true, "f32x4.replace_lane") -WASM_REPLACELANE_OPCODE(F2ReplaceLane, __prefix | 0x16, M128_D, Simd128_ReplaceLane_D2, true, "f64x2.replace_lane") -WASM_MISC_OPCODE(V8X16Shuffle, __prefix | 0x17, Limit, true, "v8x16.shuffle") -WASM_BINARY_OPCODE(I16Add, __prefix | 0x18, M128X3, Simd128_Add_I16, true, "i8x16.add") -WASM_BINARY_OPCODE(I8Add, __prefix | 0x19, M128X3, Simd128_Add_I8, true, "i16x8.add") -WASM_BINARY_OPCODE(I4Add, __prefix | 0x1a, M128X3, Simd128_Add_I4, true, "i32x4.add") -WASM_BINARY_OPCODE(I2Add, __prefix | 0x1b, M128X3, Simd128_Add_I2, true, "i64x2.add") -WASM_BINARY_OPCODE(I16Sub, __prefix | 0x1c, M128X3, Simd128_Sub_I16, true, "i8x16.sub") -WASM_BINARY_OPCODE(I8Sub, __prefix | 0x1d, M128X3, Simd128_Sub_I8, true, "i16x8.sub") -WASM_BINARY_OPCODE(I4Sub, __prefix | 0x1e, M128X3, Simd128_Sub_I4, true, "i32x4.sub") -WASM_BINARY_OPCODE(I2Sub, __prefix | 0x1f, M128X3, Simd128_Sub_I2, true, "i64x2.sub") -WASM_BINARY_OPCODE(I16Mul, __prefix | 0x20, M128X3, Simd128_Mul_I16, true, "i8x16.mul") -WASM_BINARY_OPCODE(I8Mul, __prefix | 0x21, M128X3, Simd128_Mul_I8, true, "i16x8.mul") -WASM_BINARY_OPCODE(I4Mul, __prefix | 0x22, M128X3, Simd128_Mul_I4, true, "i32x4.mul") -WASM_UNARY__OPCODE(I16Neg, __prefix | 0x23, M128_M128, Simd128_Neg_I16, true, "i8x16.neg") -WASM_UNARY__OPCODE(I8Neg, __prefix | 0x24, M128_M128, Simd128_Neg_I8, true, "i16x8.neg") -WASM_UNARY__OPCODE(I4Neg, __prefix | 0x25, M128_M128, Simd128_Neg_I4, true, "i32x4.neg") -WASM_UNARY__OPCODE(I2Neg, __prefix | 0x26, M128_M128, Simd128_Neg_I2, true, "i64x2.neg") -WASM_BINARY_OPCODE(I16AddSaturateS, __prefix | 0x27, M128X3, Simd128_AddSaturate_I16, true, "i8x16.add_saturate_s") -WASM_BINARY_OPCODE(I16AddSaturateU, __prefix | 0x28, M128X3, Simd128_AddSaturate_U16, true, "i8x16.add_saturate_u") -WASM_BINARY_OPCODE(I8AddSaturateS, __prefix | 0x29, M128X3, Simd128_AddSaturate_I8, true, "i16x8.add_saturate_s") -WASM_BINARY_OPCODE(I8AddSaturateU, __prefix | 0x2a, M128X3, Simd128_AddSaturate_U8, true, "i16x8.add_saturate_u") -WASM_BINARY_OPCODE(I16SubSaturateS, __prefix | 0x2b, M128X3, Simd128_SubSaturate_I16, true, "i8x16.sub_saturate_s") -WASM_BINARY_OPCODE(I16SubSaturateU, __prefix | 0x2c, M128X3, Simd128_SubSaturate_U16, true, "i8x16.sub_saturate_u") -WASM_BINARY_OPCODE(I8SubSaturateS, __prefix | 0x2d, M128X3, Simd128_SubSaturate_I8, true, "i16x8.sub_saturate_s") -WASM_BINARY_OPCODE(I8SubSaturateU, __prefix | 0x2e, M128X3, Simd128_SubSaturate_U8, true, "i16x8.sub_saturate_u") -WASM_BINARY_OPCODE(I16Shl, __prefix | 0x2f, M128_M128_I, Simd128_ShLtByScalar_I16, true, "i8x16.shl") -WASM_BINARY_OPCODE(I8Shl, __prefix | 0x30, M128_M128_I, Simd128_ShLtByScalar_I8, true, "i16x8.shl") -WASM_BINARY_OPCODE(I4Shl, __prefix | 0x31, M128_M128_I, Simd128_ShLtByScalar_I4, true, "i32x4.shl") -WASM_BINARY_OPCODE(I2Shl, __prefix | 0x32, M128_M128_I, Simd128_ShLtByScalar_I2, true, "i64x2.shl") -WASM_BINARY_OPCODE(I16ShrS, __prefix | 0x33, M128_M128_I, Simd128_ShRtByScalar_I16, true, "i8x16.shr_s") -WASM_BINARY_OPCODE(I16ShrU, __prefix | 0x34, M128_M128_I, Simd128_ShRtByScalar_U16, true, "i8x16.shr_u") -WASM_BINARY_OPCODE(I8ShrS, __prefix | 0x35, M128_M128_I, Simd128_ShRtByScalar_I8, true, "i16x8.shr_s") -WASM_BINARY_OPCODE(I8ShrU, __prefix | 0x36, M128_M128_I, Simd128_ShRtByScalar_U8, true, "i16x8.shr_u") -WASM_BINARY_OPCODE(I4ShrS, __prefix | 0x37, M128_M128_I, Simd128_ShRtByScalar_I4, true, "i32x4.shr_s") -WASM_BINARY_OPCODE(I4ShrU, __prefix | 0x38, M128_M128_I, Simd128_ShRtByScalar_U4, true, "i32x4.shr_u") -WASM_BINARY_OPCODE(I2ShrS, __prefix | 0x39, M128_M128_I, Simd128_ShRtByScalar_I2, true, "i64x2.shr_s") -WASM_BINARY_OPCODE(I2ShrU, __prefix | 0x3a, M128_M128_I, Simd128_ShRtByScalar_U2, true, "i64x2.shr_u") -WASM_BINARY_OPCODE(M128And, __prefix | 0x3b, M128X3, Simd128_And_I4, true, "v128.and") -WASM_BINARY_OPCODE(M128Or, __prefix | 0x3c, M128X3, Simd128_Or_I4, true, "v128.or") -WASM_BINARY_OPCODE(M128Xor, __prefix | 0x3d, M128X3, Simd128_Xor_I4, true, "v128.xor") -WASM_UNARY__OPCODE(M128Not, __prefix | 0x3e, M128_M128, Simd128_Not_I4, true, "v128.not") -WASM_MISC_OPCODE(M128Bitselect, __prefix | 0x3f, Limit, true, "v128.bitselect") -WASM_UNARY__OPCODE(I16AnyTrue, __prefix | 0x40, I_M128, Simd128_AnyTrue_B16, true, "i8x16.any_true") -WASM_UNARY__OPCODE(I8AnyTrue, __prefix | 0x41, I_M128, Simd128_AnyTrue_B8, true, "i16x8.any_true") -WASM_UNARY__OPCODE(I4AnyTrue, __prefix | 0x42, I_M128, Simd128_AnyTrue_B4, true, "i32x4.any_true") -WASM_UNARY__OPCODE(I2AnyTrue, __prefix | 0x43, I_M128, Simd128_AnyTrue_B2, true, "i64x2.any_true") -WASM_UNARY__OPCODE(I16AllTrue, __prefix | 0x44, I_M128, Simd128_AllTrue_B16, true, "i8x16.all_true") -WASM_UNARY__OPCODE(I8AllTrue, __prefix | 0x45, I_M128, Simd128_AllTrue_B8, true, "i16x8.all_true") -WASM_UNARY__OPCODE(I4AllTrue, __prefix | 0x46, I_M128, Simd128_AllTrue_B4, true, "i32x4.all_true") -WASM_UNARY__OPCODE(I2AllTrue, __prefix | 0x47, I_M128, Simd128_AllTrue_B2, true, "i64x2.all_true") -WASM_BINARY_OPCODE(I16Eq, __prefix | 0x48, M128X3, Simd128_Eq_I16, true, "i8x16.eq") -WASM_BINARY_OPCODE(I8Eq, __prefix | 0x49, M128X3, Simd128_Eq_I8, true, "i16x8.eq") -WASM_BINARY_OPCODE(I4Eq, __prefix | 0x4a, M128X3, Simd128_Eq_I4, true, "i32x4.eq") -WASM_BINARY_OPCODE(F4Eq, __prefix | 0x4b, M128X3, Simd128_Eq_F4, true, "f32x4.eq") -WASM_BINARY_OPCODE(F2Eq, __prefix | 0x4c, M128X3, Simd128_Eq_D2, true, "f64x2.eq") -WASM_BINARY_OPCODE(I16Ne, __prefix | 0x4d, M128X3, Simd128_Neq_I16, true, "i8x16.ne") -WASM_BINARY_OPCODE(I8Ne, __prefix | 0x4e, M128X3, Simd128_Neq_I8, true, "i16x8.ne") -WASM_BINARY_OPCODE(I4Ne, __prefix | 0x4f, M128X3, Simd128_Neq_I4, true, "i32x4.ne") -WASM_BINARY_OPCODE(F4Ne, __prefix | 0x50, M128X3, Simd128_Neq_F4, true, "f32x4.ne") -WASM_BINARY_OPCODE(F2Ne, __prefix | 0x51, M128X3, Simd128_Neq_D2, true, "f64x2.ne") -WASM_BINARY_OPCODE(I16LtS, __prefix | 0x52, M128X3, Simd128_Lt_I16, true, "i8x16.lt_s") -WASM_BINARY_OPCODE(I16LtU, __prefix | 0x53, M128X3, Simd128_Lt_U16, true, "i8x16.lt_u") -WASM_BINARY_OPCODE(I8LtS, __prefix | 0x54, M128X3, Simd128_Lt_I8, true, "i16x8.lt_s") -WASM_BINARY_OPCODE(I8LtU, __prefix | 0x55, M128X3, Simd128_Lt_U8, true, "i16x8.lt_u") -WASM_BINARY_OPCODE(I4LtS, __prefix | 0x56, M128X3, Simd128_Lt_I4, true, "i32x4.lt_s") -WASM_BINARY_OPCODE(I4LtU, __prefix | 0x57, M128X3, Simd128_Lt_U4, true, "i32x4.lt_u") -WASM_BINARY_OPCODE(F4Lt, __prefix | 0x58, M128X3, Simd128_Lt_F4, true, "f32x4.lt") -WASM_BINARY_OPCODE(F2Lt, __prefix | 0x59, M128X3, Simd128_Lt_D2, true, "f64x2.lt") -WASM_BINARY_OPCODE(I16LeS, __prefix | 0x5a, M128X3, Simd128_LtEq_I16, true, "i8x16.le_s") -WASM_BINARY_OPCODE(I16LeU, __prefix | 0x5b, M128X3, Simd128_LtEq_U16, true, "i8x16.le_u") -WASM_BINARY_OPCODE(I8LeS, __prefix | 0x5c, M128X3, Simd128_LtEq_I8, true, "i16x8.le_s") -WASM_BINARY_OPCODE(I8LeU, __prefix | 0x5d, M128X3, Simd128_LtEq_U8, true, "i16x8.le_u") -WASM_BINARY_OPCODE(I4LeS, __prefix | 0x5e, M128X3, Simd128_LtEq_I4, true, "i32x4.le_s") -WASM_BINARY_OPCODE(I4LeU, __prefix | 0x5f, M128X3, Simd128_LtEq_U4, true, "i32x4.le_u") -WASM_BINARY_OPCODE(F4Le, __prefix | 0x60, M128X3, Simd128_LtEq_F4, true, "f32x4.le") -WASM_BINARY_OPCODE(F2Le, __prefix | 0x61, M128X3, Simd128_LtEq_D2, true, "f64x2.le") -WASM_BINARY_OPCODE(I16GtS, __prefix | 0x62, M128X3, Simd128_Gt_I16, true, "i8x16.gt_s") -WASM_BINARY_OPCODE(I16GtU, __prefix | 0x63, M128X3, Simd128_Gt_U16, true, "i8x16.gt_u") -WASM_BINARY_OPCODE(I8GtS, __prefix | 0x64, M128X3, Simd128_Gt_I8, true, "i16x8.gt_s") -WASM_BINARY_OPCODE(I8GtU, __prefix | 0x65, M128X3, Simd128_Gt_U8, true, "i16x8.gt_u") -WASM_BINARY_OPCODE(I4GtS, __prefix | 0x66, M128X3, Simd128_Gt_I4, true, "i32x4.gt_s") -WASM_BINARY_OPCODE(I4GtU, __prefix | 0x67, M128X3, Simd128_Gt_U4, true, "i32x4.gt_u") -WASM_BINARY_OPCODE(F4Gt, __prefix | 0x68, M128X3, Simd128_Gt_F4, true, "f32x4.gt") -WASM_BINARY_OPCODE(F2Gt, __prefix | 0x69, M128X3, Simd128_Gt_D2, true, "f64x2.gt") -WASM_BINARY_OPCODE(I16GeS, __prefix | 0x6a, M128X3, Simd128_GtEq_I16, true, "i8x16.ge_s") -WASM_BINARY_OPCODE(I16GeU, __prefix | 0x6b, M128X3, Simd128_GtEq_U16, true, "i8x16.ge_u") -WASM_BINARY_OPCODE(I8GeS, __prefix | 0x6c, M128X3, Simd128_GtEq_I8, true, "i16x8.ge_s") -WASM_BINARY_OPCODE(I8GeU, __prefix | 0x6d, M128X3, Simd128_GtEq_U8, true, "i16x8.ge_u") -WASM_BINARY_OPCODE(I4GeS, __prefix | 0x6e, M128X3, Simd128_GtEq_I4, true, "i32x4.ge_s") -WASM_BINARY_OPCODE(I4GeU, __prefix | 0x6f, M128X3, Simd128_GtEq_U4, true, "i32x4.ge_u") -WASM_BINARY_OPCODE(F4Ge, __prefix | 0x70, M128X3, Simd128_GtEq_F4, true, "f32x4.ge") -WASM_BINARY_OPCODE(F2Ge, __prefix | 0x71, M128X3, Simd128_GtEq_D2, true, "f64x2.ge") -WASM_UNARY__OPCODE(F4Neg, __prefix | 0x72, M128_M128, Simd128_Neg_F4, true, "f32x4.neg") -WASM_UNARY__OPCODE(F2Neg, __prefix | 0x73, M128_M128, Simd128_Neg_D2, true, "f64x2.neg") -WASM_UNARY__OPCODE(F4Abs, __prefix | 0x74, M128_M128, Simd128_Abs_F4, true, "f32x4.abs") -WASM_UNARY__OPCODE(F2Abs, __prefix | 0x75, M128_M128, Simd128_Abs_D2, true, "f64x2.abs") -WASM_BINARY_OPCODE(F4Min, __prefix | 0x76, M128X3, Simd128_Min_F4, true, "f32x4.min") -WASM_BINARY_OPCODE(F2Min, __prefix | 0x77, M128X3, Simd128_Min_D2, true, "f64x2.min") -WASM_BINARY_OPCODE(F4Max, __prefix | 0x78, M128X3, Simd128_Max_F4, true, "f32x4.max") -WASM_BINARY_OPCODE(F2Max, __prefix | 0x79, M128X3, Simd128_Max_D2, true, "f64x2.max") -WASM_BINARY_OPCODE(F4Add, __prefix | 0x7a, M128X3, Simd128_Add_F4, true, "f32x4.add") -WASM_BINARY_OPCODE(F2Add, __prefix | 0x7b, M128X3, Simd128_Add_D2, true, "f64x2.add") -WASM_BINARY_OPCODE(F4Sub, __prefix | 0x7c, M128X3, Simd128_Sub_F4, true, "f32x4.sub") -WASM_BINARY_OPCODE(F2Sub, __prefix | 0x7d, M128X3, Simd128_Sub_D2, true, "f64x2.sub") -WASM_BINARY_OPCODE(F4Div, __prefix | 0x7e, M128X3, Simd128_Div_F4, true, "f32x4.div") -WASM_BINARY_OPCODE(F2Div, __prefix | 0x7f, M128X3, Simd128_Div_D2, true, "f64x2.div") -WASM_BINARY_OPCODE(F4Mul, __prefix | 0x80, M128X3, Simd128_Mul_F4, true, "f32x4.mul") -WASM_BINARY_OPCODE(F2Mul, __prefix | 0x81, M128X3, Simd128_Mul_D2, true, "f64x2.mul") -WASM_UNARY__OPCODE(F4Sqrt, __prefix | 0x82, M128_M128, Simd128_Sqrt_F4, true, "f32x4.sqrt") -WASM_UNARY__OPCODE(F2Sqrt, __prefix | 0x83, M128_M128, Simd128_Sqrt_D2, true, "f64x2.sqrt") -WASM_UNARY__OPCODE(F4ConvertS, __prefix | 0x84, M128_M128, Simd128_FromInt32x4_F4, true, "f32x4.convert_s/i32x4") -WASM_UNARY__OPCODE(F4ConvertU, __prefix | 0x85, M128_M128, Simd128_FromUint32x4_F4, true, "f32x4.convert_u/i32x4") -WASM_UNARY__OPCODE(F2ConvertS, __prefix | 0x86, M128_M128, Simd128_FromInt64x2_D2, true, "f64x2.convert_s/i64x2") -WASM_UNARY__OPCODE(F2ConvertU, __prefix | 0x87, M128_M128, Simd128_FromUint64x2_D2, true, "f64x2.convert_u/i64x2") -WASM_UNARY__OPCODE(I4TruncS, __prefix | 0x88, M128_M128, Simd128_FromFloat32x4_I4, true, "i32x4.trunc_s/f32x4:sat") -WASM_UNARY__OPCODE(I4TruncU, __prefix | 0x89, M128_M128, Simd128_FromFloat32x4_U4, true, "i32x4.trunc_u/f32x4:sat") -WASM_UNARY__OPCODE(I2TruncS, __prefix | 0x8a, M128_M128, Simd128_FromFloat64x2_I2, true, "i64x2.trunc_s/f64x2:sat") -WASM_UNARY__OPCODE(I2TruncU, __prefix | 0x8b, M128_M128, Simd128_FromFloat64x2_U2, true, "i64x2.trunc_u/f64x2:sat") +WASM_SIMD_MEMREAD_OPCODE(V128Load, __prefix | 0x00, V128_I, Simd128_LdArr_F4, Js::ArrayBufferView::TYPE_FLOAT32, 16, true, "v128.load") + +WASM_SIMD_MEMSTORE_OPCODE(V128Store, __prefix | 0x0b, V128_I, Simd128_StArr_F4, Js::ArrayBufferView::TYPE_FLOAT32, 16, true, "v128.store") +WASM_MISC_OPCODE(V128Const, __prefix | 0x0c, Limit, true, "v128.const") +WASM_MISC_OPCODE(V8X16Shuffle, __prefix | 0x0d, Limit, true, "i8x16.shuffle") +WASM_UNARY__OPCODE(I16Splat, __prefix | 0x0f, V128_I, Simd128_Splat_I16, true, "i8x16.splat") +WASM_UNARY__OPCODE(I8Splat, __prefix | 0x10, V128_I, Simd128_Splat_I8, true, "i16x8.splat") +WASM_UNARY__OPCODE(I4Splat, __prefix | 0x11, V128_I, Simd128_Splat_I4, true, "i32x4.splat") +WASM_UNARY__OPCODE(I2Splat, __prefix | 0x12, V128_L, Simd128_Splat_I2, true, "i64x2.splat") +WASM_UNARY__OPCODE(F4Splat, __prefix | 0x13, V128_F, Simd128_Splat_F4, true, "f32x4.splat") +WASM_UNARY__OPCODE(F2Splat, __prefix | 0x14, V128_D, Simd128_Splat_D2, true, "f64x2.splat") +WASM_EXTRACTLANE_OPCODE(I16ExtractLaneS, __prefix | 0x15, I_V128, Simd128_ExtractLane_I16, true, "i8x16.extract_lane_s") +WASM_EXTRACTLANE_OPCODE(I16ExtractLaneU, __prefix | 0x16, I_V128, Simd128_ExtractLane_U16, true, "i8x16.extract_lane_u") +WASM_REPLACELANE_OPCODE(I16ReplaceLane, __prefix | 0x17, V128_I, Simd128_ReplaceLane_I16, true, "i8x16.replace_lane") +WASM_EXTRACTLANE_OPCODE(I8ExtractLaneS, __prefix | 0x18, I_V128, Simd128_ExtractLane_I8, true, "i16x8.extract_lane_s") +WASM_EXTRACTLANE_OPCODE(I8ExtractLaneU, __prefix | 0x19, I_V128, Simd128_ExtractLane_U8, true, "i16x8.extract_lane_u") +WASM_REPLACELANE_OPCODE(I8ReplaceLane, __prefix | 0x1a, V128_I, Simd128_ReplaceLane_I8, true, "i16x8.replace_lane") +WASM_EXTRACTLANE_OPCODE(I4ExtractLane, __prefix | 0x1b, I_V128, Simd128_ExtractLane_I4, true, "i32x4.extract_lane") +WASM_REPLACELANE_OPCODE(I4ReplaceLane, __prefix | 0x1c, V128_I, Simd128_ReplaceLane_I4, true, "i32x4.replace_lane") +WASM_EXTRACTLANE_OPCODE(I2ExtractLane, __prefix | 0x1d, L_V128, Simd128_ExtractLane_I2, true, "i64x2.extract_lane") +WASM_REPLACELANE_OPCODE(I2ReplaceLane, __prefix | 0x1e, V128_L, Simd128_ReplaceLane_I2, true, "i64x2.replace_lane") +WASM_EXTRACTLANE_OPCODE(F4ExtractLane, __prefix | 0x1f, F_V128, Simd128_ExtractLane_F4, true, "f32x4.extract_lane") +WASM_REPLACELANE_OPCODE(F4ReplaceLane, __prefix | 0x20, V128_F, Simd128_ReplaceLane_F4, true, "f32x4.replace_lane") +WASM_BINARY_OPCODE(F2ExtractLane, __prefix | 0x21, D_V128_I, Simd128_ExtractLane_D2, true, "f64x2.extract_lane") +WASM_REPLACELANE_OPCODE(F2ReplaceLane, __prefix | 0x22, V128_D, Simd128_ReplaceLane_D2, true, "f64x2.replace_lane") +WASM_BINARY_OPCODE(I16Eq, __prefix | 0x23, V128X3, Simd128_Eq_I16, true, "i8x16.eq") +WASM_BINARY_OPCODE(I16Ne, __prefix | 0x24, V128X3, Simd128_Neq_I16, true, "i8x16.ne") +WASM_BINARY_OPCODE(I16LtS, __prefix | 0x25, V128X3, Simd128_Lt_I16, true, "i8x16.lt_s") +WASM_BINARY_OPCODE(I16LtU, __prefix | 0x26, V128X3, Simd128_Lt_U16, true, "i8x16.lt_u") +WASM_BINARY_OPCODE(I16GtS, __prefix | 0x27, V128X3, Simd128_Gt_I16, true, "i8x16.gt_s") +WASM_BINARY_OPCODE(I16GtU, __prefix | 0x28, V128X3, Simd128_Gt_U16, true, "i8x16.gt_u") +WASM_BINARY_OPCODE(I16LeS, __prefix | 0x29, V128X3, Simd128_LtEq_I16, true, "i8x16.le_s") +WASM_BINARY_OPCODE(I16LeU, __prefix | 0x2a, V128X3, Simd128_LtEq_U16, true, "i8x16.le_u") +WASM_BINARY_OPCODE(I16GeS, __prefix | 0x2b, V128X3, Simd128_GtEq_I16, true, "i8x16.ge_s") +WASM_BINARY_OPCODE(I16GeU, __prefix | 0x2c, V128X3, Simd128_GtEq_U16, true, "i8x16.ge_u") +WASM_BINARY_OPCODE(I8Eq, __prefix | 0x2d, V128X3, Simd128_Eq_I8, true, "i16x8.eq") +WASM_BINARY_OPCODE(I8Ne, __prefix | 0x2e, V128X3, Simd128_Neq_I8, true, "i16x8.ne") +WASM_BINARY_OPCODE(I8LtS, __prefix | 0x2f, V128X3, Simd128_Lt_I8, true, "i16x8.lt_s") +WASM_BINARY_OPCODE(I8LtU, __prefix | 0x30, V128X3, Simd128_Lt_U8, true, "i16x8.lt_u") +WASM_BINARY_OPCODE(I8GtS, __prefix | 0x31, V128X3, Simd128_Gt_I8, true, "i16x8.gt_s") +WASM_BINARY_OPCODE(I8GtU, __prefix | 0x32, V128X3, Simd128_Gt_U8, true, "i16x8.gt_u") +WASM_BINARY_OPCODE(I8LeS, __prefix | 0x33, V128X3, Simd128_LtEq_I8, true, "i16x8.le_s") +WASM_BINARY_OPCODE(I8LeU, __prefix | 0x34, V128X3, Simd128_LtEq_U8, true, "i16x8.le_u") +WASM_BINARY_OPCODE(I8GeS, __prefix | 0x35, V128X3, Simd128_GtEq_I8, true, "i16x8.ge_s") +WASM_BINARY_OPCODE(I8GeU, __prefix | 0x36, V128X3, Simd128_GtEq_U8, true, "i16x8.ge_u") +WASM_BINARY_OPCODE(I4Eq, __prefix | 0x37, V128X3, Simd128_Eq_I4, true, "i32x4.eq") +WASM_BINARY_OPCODE(I4Ne, __prefix | 0x38, V128X3, Simd128_Neq_I4, true, "i32x4.ne") +WASM_BINARY_OPCODE(I4LtS, __prefix | 0x39, V128X3, Simd128_Lt_I4, true, "i32x4.lt_s") +WASM_BINARY_OPCODE(I4LtU, __prefix | 0x3a, V128X3, Simd128_Lt_U4, true, "i32x4.lt_u") +WASM_BINARY_OPCODE(I4GtS, __prefix | 0x3b, V128X3, Simd128_Gt_I4, true, "i32x4.gt_s") +WASM_BINARY_OPCODE(I4GtU, __prefix | 0x3c, V128X3, Simd128_Gt_U4, true, "i32x4.gt_u") +WASM_BINARY_OPCODE(I4LeS, __prefix | 0x3d, V128X3, Simd128_LtEq_I4, true, "i32x4.le_s") +WASM_BINARY_OPCODE(I4LeU, __prefix | 0x3e, V128X3, Simd128_LtEq_U4, true, "i32x4.le_u") +WASM_BINARY_OPCODE(I4GeS, __prefix | 0x3f, V128X3, Simd128_GtEq_I4, true, "i32x4.ge_s") +WASM_BINARY_OPCODE(I4GeU, __prefix | 0x40, V128X3, Simd128_GtEq_U4, true, "i32x4.ge_u") +WASM_BINARY_OPCODE(F4Eq, __prefix | 0x41, V128X3, Simd128_Eq_F4, true, "f32x4.eq") +WASM_BINARY_OPCODE(F4Ne, __prefix | 0x42, V128X3, Simd128_Neq_F4, true, "f32x4.ne") +WASM_BINARY_OPCODE(F4Lt, __prefix | 0x43, V128X3, Simd128_Lt_F4, true, "f32x4.lt") +WASM_BINARY_OPCODE(F4Gt, __prefix | 0x44, V128X3, Simd128_Gt_F4, true, "f32x4.gt") +WASM_BINARY_OPCODE(F4Le, __prefix | 0x45, V128X3, Simd128_LtEq_F4, true, "f32x4.le") +WASM_BINARY_OPCODE(F4Ge, __prefix | 0x46, V128X3, Simd128_GtEq_F4, true, "f32x4.ge") +WASM_BINARY_OPCODE(F2Eq, __prefix | 0x47, V128X3, Simd128_Eq_D2, true, "f64x2.eq") +WASM_BINARY_OPCODE(F2Ne, __prefix | 0x48, V128X3, Simd128_Neq_D2, true, "f64x2.ne") +WASM_BINARY_OPCODE(F2Lt, __prefix | 0x49, V128X3, Simd128_Lt_D2, true, "f64x2.lt") +WASM_BINARY_OPCODE(F2Gt, __prefix | 0x4a, V128X3, Simd128_Gt_D2, true, "f64x2.gt") +WASM_BINARY_OPCODE(F2Le, __prefix | 0x4b, V128X3, Simd128_LtEq_D2, true, "f64x2.le") +WASM_BINARY_OPCODE(F2Ge, __prefix | 0x4c, V128X3, Simd128_GtEq_D2, true, "f64x2.ge") +WASM_UNARY__OPCODE(V128Not, __prefix | 0x4d, V128_V128, Simd128_Not_I4, true, "v128.not") +WASM_BINARY_OPCODE(V128And, __prefix | 0x4e, V128X3, Simd128_And_I4, true, "v128.and") + +WASM_BINARY_OPCODE(V128Or, __prefix | 0x50, V128X3, Simd128_Or_I4, true, "v128.or") +WASM_BINARY_OPCODE(V128Xor, __prefix | 0x51, V128X3, Simd128_Xor_I4, true, "v128.xor") +WASM_MISC_OPCODE(V128Bitselect, __prefix | 0x52, Limit, true, "v128.bitselect") + +WASM_UNARY__OPCODE(I16Neg, __prefix | 0x61, V128_V128, Simd128_Neg_I16, true, "i8x16.neg") +WASM_UNARY__OPCODE(I16AnyTrue, __prefix | 0x62, I_V128, Simd128_AnyTrue_B16, true, "i8x16.any_true") +WASM_UNARY__OPCODE(I16AllTrue, __prefix | 0x63, I_V128, Simd128_AllTrue_B16, true, "i8x16.all_true") + +WASM_BINARY_OPCODE(I16Shl, __prefix | 0x6b, V128_V128_I, Simd128_ShLtByScalar_I16, true, "i8x16.shl") +WASM_BINARY_OPCODE(I16ShrS, __prefix | 0x6c, V128_V128_I, Simd128_ShRtByScalar_I16, true, "i8x16.shr_s") +WASM_BINARY_OPCODE(I16ShrU, __prefix | 0x6d, V128_V128_I, Simd128_ShRtByScalar_U16, true, "i8x16.shr_u") +WASM_BINARY_OPCODE(I16Add, __prefix | 0x6e, V128X3, Simd128_Add_I16, true, "i8x16.add") +WASM_BINARY_OPCODE(I16AddSaturateS, __prefix | 0x6f, V128X3, Simd128_AddSaturate_I16, true, "i8x16.add_sat_s") +WASM_BINARY_OPCODE(I16AddSaturateU, __prefix | 0x70, V128X3, Simd128_AddSaturate_U16, true, "i8x16.add_sat_u") +WASM_BINARY_OPCODE(I16Sub, __prefix | 0x71, V128X3, Simd128_Sub_I16, true, "i8x16.sub") +WASM_BINARY_OPCODE(I16SubSaturateS, __prefix | 0x72, V128X3, Simd128_SubSaturate_I16, true, "i8x16.sub_sat_s") +WASM_BINARY_OPCODE(I16SubSaturateU, __prefix | 0x73, V128X3, Simd128_SubSaturate_U16, true, "i8x16.sub_sat_u") + +WASM_UNARY__OPCODE(I8Neg, __prefix | 0x81, V128_V128, Simd128_Neg_I8, true, "i16x8.neg") +WASM_UNARY__OPCODE(I8AnyTrue, __prefix | 0x82, I_V128, Simd128_AnyTrue_B8, true, "i16x8.any_true") +WASM_UNARY__OPCODE(I8AllTrue, __prefix | 0x83, I_V128, Simd128_AllTrue_B8, true, "i16x8.all_true") +WASM_BINARY_OPCODE(I8Shl, __prefix | 0x8b, V128_V128_I, Simd128_ShLtByScalar_I8, true, "i16x8.shl") +WASM_BINARY_OPCODE(I8ShrS, __prefix | 0x8c, V128_V128_I, Simd128_ShRtByScalar_I8, true, "i16x8.shr_s") +WASM_BINARY_OPCODE(I8ShrU, __prefix | 0x8d, V128_V128_I, Simd128_ShRtByScalar_U8, true, "i16x8.shr_u") +WASM_BINARY_OPCODE(I8Add, __prefix | 0x8e, V128X3, Simd128_Add_I8, true, "i16x8.add") +WASM_BINARY_OPCODE(I8AddSaturateS, __prefix | 0x8f, V128X3, Simd128_AddSaturate_I8, true, "i16x8.add_sat_s") +WASM_BINARY_OPCODE(I8AddSaturateU, __prefix | 0x90, V128X3, Simd128_AddSaturate_U8, true, "i16x8.add_sat_u") +WASM_BINARY_OPCODE(I8Sub, __prefix | 0x91, V128X3, Simd128_Sub_I8, true, "i16x8.sub") +WASM_BINARY_OPCODE(I8SubSaturateS, __prefix | 0x92, V128X3, Simd128_SubSaturate_I8, true, "i16x8.sub_sat_s") +WASM_BINARY_OPCODE(I8SubSaturateU, __prefix | 0x93, V128X3, Simd128_SubSaturate_U8, true, "i16x8.sub_sat_u") + +WASM_BINARY_OPCODE(I8Mul, __prefix | 0x95, V128X3, Simd128_Mul_I8, true, "i16x8.mul") + +WASM_UNARY__OPCODE(I4Neg, __prefix | 0xa1, V128_V128, Simd128_Neg_I4, true, "i32x4.neg") +WASM_UNARY__OPCODE(I4AnyTrue, __prefix | 0xa2, I_V128, Simd128_AnyTrue_B4, true, "i32x4.any_true") +WASM_UNARY__OPCODE(I4AllTrue, __prefix | 0xa3, I_V128, Simd128_AllTrue_B4, true, "i32x4.all_true") + +WASM_BINARY_OPCODE(I4Shl, __prefix | 0xab, V128_V128_I, Simd128_ShLtByScalar_I4, true, "i32x4.shl") +WASM_BINARY_OPCODE(I4ShrS, __prefix | 0xac, V128_V128_I, Simd128_ShRtByScalar_I4, true, "i32x4.shr_s") +WASM_BINARY_OPCODE(I4ShrU, __prefix | 0xad, V128_V128_I, Simd128_ShRtByScalar_U4, true, "i32x4.shr_u") +WASM_BINARY_OPCODE(I4Add, __prefix | 0xae, V128X3, Simd128_Add_I4, true, "i32x4.add") + +WASM_BINARY_OPCODE(I4Sub, __prefix | 0xb1, V128X3, Simd128_Sub_I4, true, "i32x4.sub") + +WASM_BINARY_OPCODE(I4Mul, __prefix | 0xb5, V128X3, Simd128_Mul_I4, true, "i32x4.mul") + +WASM_UNARY__OPCODE(I2Neg, __prefix | 0xc1, V128_V128, Simd128_Neg_I2, true, "i64x2.neg") + +WASM_BINARY_OPCODE(I2Shl, __prefix | 0xcb, V128_V128_I, Simd128_ShLtByScalar_I2, true, "i64x2.shl") +WASM_BINARY_OPCODE(I2ShrS, __prefix | 0xcc, V128_V128_I, Simd128_ShRtByScalar_I2, true, "i64x2.shr_s") +WASM_BINARY_OPCODE(I2ShrU, __prefix | 0xcd, V128_V128_I, Simd128_ShRtByScalar_U2, true, "i64x2.shr_u") +WASM_BINARY_OPCODE(I2Add, __prefix | 0xce, V128X3, Simd128_Add_I2, true, "i64x2.add") + +WASM_BINARY_OPCODE(I2Sub, __prefix | 0xd1, V128X3, Simd128_Sub_I2, true, "i64x2.sub") + +WASM_UNARY__OPCODE(F4Abs, __prefix | 0xe0, V128_V128, Simd128_Abs_F4, true, "f32x4.abs") +WASM_UNARY__OPCODE(F4Neg, __prefix | 0xe1, V128_V128, Simd128_Neg_F4, true, "f32x4.neg") + +WASM_UNARY__OPCODE(F4Sqrt, __prefix | 0xe3, V128_V128, Simd128_Sqrt_F4, true, "f32x4.sqrt") +WASM_BINARY_OPCODE(F4Add, __prefix | 0xe4, V128X3, Simd128_Add_F4, true, "f32x4.add") +WASM_BINARY_OPCODE(F4Sub, __prefix | 0xe5, V128X3, Simd128_Sub_F4, true, "f32x4.sub") +WASM_BINARY_OPCODE(F4Mul, __prefix | 0xe6, V128X3, Simd128_Mul_F4, true, "f32x4.mul") +WASM_BINARY_OPCODE(F4Div, __prefix | 0xe7, V128X3, Simd128_Div_F4, true, "f32x4.div") +WASM_BINARY_OPCODE(F4Min, __prefix | 0xe8, V128X3, Simd128_Min_F4, true, "f32x4.min") +WASM_BINARY_OPCODE(F4Max, __prefix | 0xe9, V128X3, Simd128_Max_F4, true, "f32x4.max") + +WASM_UNARY__OPCODE(F2Abs, __prefix | 0xec, V128_V128, Simd128_Abs_D2, true, "f64x2.abs") +WASM_UNARY__OPCODE(F2Neg, __prefix | 0xed, V128_V128, Simd128_Neg_D2, true, "f64x2.neg") +WASM_UNARY__OPCODE(F2Sqrt, __prefix | 0xef, V128_V128, Simd128_Sqrt_D2, true, "f64x2.sqrt") +WASM_BINARY_OPCODE(F2Add, __prefix | 0xf0, V128X3, Simd128_Add_D2, true, "f64x2.add") +WASM_BINARY_OPCODE(F2Sub, __prefix | 0xf1, V128X3, Simd128_Sub_D2, true, "f64x2.sub") +WASM_BINARY_OPCODE(F2Mul, __prefix | 0xf2, V128X3, Simd128_Mul_D2, true, "f64x2.mul") +WASM_BINARY_OPCODE(F2Div, __prefix | 0xf3, V128X3, Simd128_Div_D2, true, "f64x2.div") +WASM_BINARY_OPCODE(F2Min, __prefix | 0xf4, V128X3, Simd128_Min_D2, true, "f64x2.min") +WASM_BINARY_OPCODE(F2Max, __prefix | 0xf5, V128X3, Simd128_Max_D2, true, "f64x2.max") + +WASM_UNARY__OPCODE(I4TruncS, __prefix | 0xf8, V128_V128, Simd128_FromFloat32x4_I4, true, "i32x4.trunc_sat_f32x4_s") +WASM_UNARY__OPCODE(I4TruncU, __prefix | 0xf9, V128_V128, Simd128_FromFloat32x4_U4, true, "i32x4.trunc_sat_f32x4_u") +WASM_UNARY__OPCODE(F4ConvertS, __prefix | 0xfa, V128_V128, Simd128_FromInt32x4_F4, true, "f32x4.convert_i32x4_s") +WASM_UNARY__OPCODE(F4ConvertU, __prefix | 0xfb, V128_V128, Simd128_FromUint32x4_F4, true, "f32x4.convert_i32x4_u") #undef __prefix #undef WASM_PREFIX_SIMD diff --git a/lib/WasmReader/WasmBinaryReader.cpp b/lib/WasmReader/WasmBinaryReader.cpp index 62eb4159f5e..c0a95dfc07f 100644 --- a/lib/WasmReader/WasmBinaryReader.cpp +++ b/lib/WasmReader/WasmBinaryReader.cpp @@ -329,7 +329,7 @@ bool WasmBinaryReader::IsCurrentFunctionCompleted() const } -const uint32 WasmBinaryReader::EstimateCurrentFunctionBytecodeSize() const +uint32 WasmBinaryReader::EstimateCurrentFunctionBytecodeSize() const { if (m_readerState != READER_STATE_FUNCTION) { @@ -420,8 +420,8 @@ WasmOp WasmBinaryReader::ReadExpr() ConstNode(); break; #ifdef ENABLE_WASM_SIMD - case wbM128Const: - ConstNode(); + case wbV128Const: + ConstNode(); break; #endif case wbSetLocal: @@ -683,7 +683,7 @@ void WasmBinaryReader::ConstNode() m_funcState.count += sizeof(double); break; #ifdef ENABLE_WASM_SIMD - case WasmTypes::M128: + case WasmTypes::V128: Simd::EnsureSimdIsEnabled(); for (uint i = 0; i < Simd::VEC_WIDTH; i++) { @@ -693,7 +693,7 @@ void WasmBinaryReader::ConstNode() break; #endif default: - WasmTypes::CompileAssertCases(); + WasmTypes::CompileAssertCases(); } } @@ -1079,10 +1079,10 @@ void WasmBinaryReader::ReadGlobalSection() case WasmTypes::F32: break; // Handled case WasmTypes::F64: break; // Handled #ifdef ENABLE_WASM_SIMD - case WasmTypes::M128: ThrowDecodingError(_u("m128 globals not supported")); + case WasmTypes::V128: ThrowDecodingError(_u("v128 globals not supported")); #endif default: - WasmTypes::CompileAssertCases(); + WasmTypes::CompileAssertCases(); } bool isMutable = ReadMutableValue(); @@ -1247,40 +1247,61 @@ LEBType WasmBinaryReader::LEB128(uint32 &length) constexpr bool sign = LEBType(-1) < LEBType(0); LEBType result = 0; uint32 shift = 0; - byte b = 0; + byte b = 0x80; length = 0; - constexpr uint32 maxReads = (uint32) (((bits % 7) == 0) ? bits/7 : bits/7 + 1); - CompileAssert(maxReads > 0); + constexpr uint32 maxBytes = (uint32)((bits + 6) / 7); + CompileAssert(maxBytes > 0); - for (uint32 i = 0; i < maxReads; ++i) + uint32 iByte = 0; + for (; iByte < maxBytes && (b & 0x80) == 0x80; ++iByte) { CheckBytesLeft(1); b = *m_pc++; - ++length; result = result | ((LEBType)(b & 0x7f) << shift); - if (sign) - { - shift += 7; - if ((b & 0x80) == 0) - break; - } - else - { - if ((b & 0x80) == 0) - break; - shift += 7; - } + shift += 7; } - if (b & 0x80 || m_pc > m_end) + if ((b & 0x80) == 0x80) { ThrowDecodingError(_u("Invalid LEB128 format")); } - if (sign && (shift < (sizeof(LEBType) * 8)) && (0x40 & b)) + const bool isLastByte = iByte == maxBytes; + constexpr bool hasExtraBits = (maxBytes * 7) != bits; + if (hasExtraBits && isLastByte) + { + // A signed-LEB128 must sign-extend the final byte, excluding its most-significant bit + // For unsigned values, the extra bits must be all zero. + // For signed values, the extra bits *plus* the most significant bit must either be 0, or all ones. + + // e.g. for a 32-bit LEB128: + // bitsInLastByte = 4 (== 32 - (5-1) * 7) + // 0bYYYXXXX where Y are extra bits and X are bits included in LEB128 + // if signed: check if 0bYYYXXXX is 0b0000XXX or 0b1111XXX + // is unsigned: check if 0bYYYXXXX is 0b000XXXX + + constexpr int bitsInLastByte = bits - (maxBytes - 1) * 7; + constexpr int lastBitToCheck = bitsInLastByte - (sign ? 1 : 0); + constexpr byte signExtendedExtraBits = 0x7f & (0xFF << lastBitToCheck); + const byte checkedBits = b & (0xFF << lastBitToCheck); + bool validExtraBits = + checkedBits == 0 || + (sign && checkedBits == signExtendedExtraBits); + if (!validExtraBits) + { + ThrowDecodingError(_u("Invalid LEB128 format")); + } + } + + length = iByte; + if (sign) { -#pragma prefast(suppress:26453) - result |= ((~(LEBType)0) << shift); + // Perform sign extension + const int signExtendShift = (sizeof(LEBType) * 8) - shift; + if (signExtendShift > 0) + { + result = static_cast(result << signExtendShift) >> signExtendShift; + } } return result; } diff --git a/lib/WasmReader/WasmBinaryReader.h b/lib/WasmReader/WasmBinaryReader.h index 705c958a2c2..efc5e0e50a1 100644 --- a/lib/WasmReader/WasmBinaryReader.h +++ b/lib/WasmReader/WasmBinaryReader.h @@ -14,7 +14,7 @@ namespace Wasm const int8 i64 = -0x2; const int8 f32 = -0x3; const int8 f64 = -0x4; - const int8 m128 = -0x5; + const int8 v128 = -0x5; const int8 anyfunc = -0x10; const int8 func = -0x20; const int8 emptyBlock = -0x40; @@ -54,7 +54,7 @@ namespace Wasm WasmOp ReadOpCode(); virtual WasmOp ReadExpr() override; virtual void FunctionEnd() override; - virtual const uint32 EstimateCurrentFunctionBytecodeSize() const override; + virtual uint32 EstimateCurrentFunctionBytecodeSize() const override; #if DBG_DUMP void PrintOps(); #endif diff --git a/lib/WasmReader/WasmByteCodeGenerator.cpp b/lib/WasmReader/WasmByteCodeGenerator.cpp index ade2d85f72b..0df74622c10 100644 --- a/lib/WasmReader/WasmByteCodeGenerator.cpp +++ b/lib/WasmReader/WasmByteCodeGenerator.cpp @@ -204,12 +204,12 @@ Js::AsmJsRetType WasmToAsmJs::GetAsmJsReturnType(WasmTypes::WasmType wasmType) case WasmTypes::F64: return Js::AsmJsRetType::Double; case WasmTypes::Void: return Js::AsmJsRetType::Void; #ifdef ENABLE_WASM_SIMD - case WasmTypes::M128: + case WasmTypes::V128: Simd::EnsureSimdIsEnabled(); return Js::AsmJsRetType::Float32x4; #endif default: - WasmTypes::CompileAssertCasesNoFailFast(); + WasmTypes::CompileAssertCasesNoFailFast(); throw WasmCompilationException(_u("Unknown return type %u"), wasmType); } } @@ -225,12 +225,12 @@ Js::AsmJsVarType WasmToAsmJs::GetAsmJsVarType(WasmTypes::WasmType wasmType) case WasmTypes::F32: return Js::AsmJsVarType::Float; case WasmTypes::F64: return Js::AsmJsVarType::Double; #ifdef ENABLE_WASM_SIMD - case WasmTypes::M128: + case WasmTypes::V128: Simd::EnsureSimdIsEnabled(); return Js::AsmJsVarType::Float32x4; #endif default: - WasmTypes::CompileAssertCasesNoFailFast(); + WasmTypes::CompileAssertCasesNoFailFast(); throw WasmCompilationException(_u("Unknown var type %u"), wasmType); } } @@ -483,10 +483,6 @@ void WasmBytecodeGenerator::GenerateFunctionBytecode(Js::ScriptContext* scriptCo { WasmBytecodeGenerator generator(scriptContext, readerinfo, validateOnly); generator.GenerateFunction(); - if (!generator.GetReader()->IsCurrentFunctionCompleted()) - { - throw WasmCompilationException(_u("Invalid function format")); - } } void WasmBytecodeGenerator::ValidateFunction(Js::ScriptContext* scriptContext, WasmReaderInfo* readerinfo) @@ -548,7 +544,12 @@ void WasmBytecodeGenerator::GenerateFunction() gen->m_originalWriter->Reset(); } } - void Complete() { gen = nullptr; } + void Complete() + { + gen->m_writer->End(); + gen->GetReader()->FunctionEnd(); + gen = nullptr; + } }; AutoCleanupGeneratorState autoCleanupGeneratorState(this); Js::ByteCodeLabel exitLabel = m_writer->DefineLabel(); @@ -574,8 +575,12 @@ void WasmBytecodeGenerator::GenerateFunction() m_writer->MarkAsmJsLabel(exitLabel); m_writer->EmptyAsm(Js::OpCodeAsmJs::Ret); m_writer->SetCallSiteCount(this->currentProfileId); - m_writer->End(); - GetReader()->FunctionEnd(); + + if (!GetReader()->IsCurrentFunctionCompleted()) + { + throw WasmCompilationException(_u("Invalid function format")); + } + autoCleanupGeneratorState.Complete(); // Make sure we don't have any unforeseen exceptions as we finalize the body AutoDisableInterrupt autoDisableInterrupt(m_scriptContext->GetThreadContext(), true); @@ -631,7 +636,7 @@ void WasmBytecodeGenerator::EnregisterLocals() m_writer->AsmLong1Const1(Js::OpCodeAsmJs::Ld_LongConst, m_locals[i].location, 0); break; #ifdef ENABLE_WASM_SIMD - case WasmTypes::M128: + case WasmTypes::V128: { Simd::EnsureSimdIsEnabled(); m_writer->WasmSimdConst(Js::OpCodeAsmJs::Simd128_LdC, m_locals[i].location, 0, 0, 0, 0); @@ -645,43 +650,6 @@ void WasmBytecodeGenerator::EnregisterLocals() } } -template -EmitInfo WasmBytecodeGenerator::EmitSimdBuildExpr(Js::OpCodeAsmJs op, const WasmTypes::WasmType* signature) -{ - const WasmTypes::WasmType resultType = signature[0]; - const WasmTypes::WasmType type = signature[1]; - - Js::RegSlot resultReg = GetRegisterSpace(resultType)->AcquireTmpRegister(); - - EmitInfo args[lanes]; - for (uint i = 0; i < lanes; i++) - { - args[i] = PopEvalStack(type); - } - - switch (lanes) - { - case 4: - m_writer->AsmReg5(op, resultReg, args[3].location, args[2].location, args[1].location, args[0].location); - break; - case 8: - m_writer->AsmReg9(op, resultReg, args[7].location, args[6].location, args[5].location, args[4].location, args[3].location, args[2].location, args[1].location, args[0].location); - break; - case 16: - m_writer->AsmReg17(op, resultReg, args[15].location, args[14].location, args[13].location, args[12].location, args[11].location, args[10].location, args[9].location, args[8].location, args[7].location, args[6].location, args[5].location, args[4].location, args[3].location, args[2].location, args[1].location, args[0].location); - break; - default: - Assert(UNREACHED); - } - - for (uint i = 0; i < lanes; i++) - { - ReleaseLocation(&args[i]); - } - - return EmitInfo(resultReg, resultType); -} - void WasmBytecodeGenerator::EmitExpr(WasmOp op) { DebugPrintOp(op); @@ -730,9 +698,9 @@ void WasmBytecodeGenerator::EmitExpr(WasmOp op) info = EmitConst(WasmTypes::I64, GetReader()->m_currentNode.cnst); break; #ifdef ENABLE_WASM_SIMD - case wbM128Const: + case wbV128Const: Simd::EnsureSimdIsEnabled(); - info = EmitConst(WasmTypes::M128, GetReader()->m_currentNode.cnst); + info = EmitConst(WasmTypes::V128, GetReader()->m_currentNode.cnst); break; #endif case wbBlock: @@ -792,9 +760,9 @@ void WasmBytecodeGenerator::EmitExpr(WasmOp op) info = EmitInfo(WasmTypes::Any); break; #ifdef ENABLE_WASM_SIMD - case wbM128Bitselect: + case wbV128Bitselect: Simd::EnsureSimdIsEnabled(); - info = EmitM128BitSelect(); + info = EmitV128BitSelect(); break; case wbV8X16Shuffle: Simd::EnsureSimdIsEnabled(); @@ -851,11 +819,6 @@ void WasmBytecodeGenerator::EmitExpr(WasmOp op) Assert(WasmOpCodeSignatures::n##sig == 2);\ info = EmitUnaryExpr(Js::OpCodeAsmJs::##asmjsop, WasmOpCodeSignatures::sig); \ break; -#define WASM_SIMD_BUILD_OPCODE(opname, opcode, sig, asmjop, lanes, ...) \ - case wb##opname: \ - Assert(WasmOpCodeSignatures::n##sig == 2);\ - info = EmitSimdBuildExpr(Js::OpCodeAsmJs::##asmjop, WasmOpCodeSignatures::sig); \ - break; #define WASM_EMPTY__OPCODE(opname, opcode, asmjsop, imp, wat) \ case wb##opname: \ m_writer->EmptyAsm(Js::OpCodeAsmJs::##asmjsop);\ @@ -963,7 +926,8 @@ EmitInfo WasmBytecodeGenerator::EmitSetLocal(bool tee) { if (info.type == WasmTypes::Any) { - throw WasmCompilationException(_u("Can't tee_local unreachable values")); + info.location = local.location; + info.type = local.type; } return info; } @@ -999,7 +963,7 @@ void WasmBytecodeGenerator::EmitLoadConst(EmitInfo dst, WasmConstLitNode cnst) m_writer->AsmLong1Const1(Js::OpCodeAsmJs::Ld_LongConst, dst.location, cnst.i64); break; #ifdef ENABLE_WASM_SIMD - case WasmTypes::M128: + case WasmTypes::V128: { Simd::EnsureSimdIsEnabled(); m_writer->WasmSimdConst(Js::OpCodeAsmJs::Simd128_LdC, dst.location, cnst.v128[0], cnst.v128[1], cnst.v128[2], cnst.v128[3]); @@ -1007,7 +971,7 @@ void WasmBytecodeGenerator::EmitLoadConst(EmitInfo dst, WasmConstLitNode cnst) } #endif default: - WasmTypes::CompileAssertCasesNoFailFast(); + WasmTypes::CompileAssertCasesNoFailFast(); throw WasmCompilationException(_u("Unknown type %u"), dst.type); } } @@ -1216,7 +1180,7 @@ PolymorphicEmitInfo WasmBytecodeGenerator::EmitCall() argOp = isImportCall ? Js::OpCodeAsmJs::ArgOut_Long : Js::OpCodeAsmJs::I_ArgOut_Long; break; #ifdef ENABLE_WASM_SIMD - case WasmTypes::M128: + case WasmTypes::V128: Simd::EnsureSimdIsEnabled(); argOp = isImportCall ? Js::OpCodeAsmJs::Simd128_ArgOut_F4 : Js::OpCodeAsmJs::Simd128_I_ArgOut_F4; break; @@ -1231,7 +1195,7 @@ PolymorphicEmitInfo WasmBytecodeGenerator::EmitCall() } // Fall through default: - WasmTypes::CompileAssertCasesNoFailFast(); + WasmTypes::CompileAssertCasesNoFailFast(); throw WasmCompilationException(_u("Unknown argument type %u"), info.type); } @@ -1322,11 +1286,11 @@ PolymorphicEmitInfo WasmBytecodeGenerator::EmitCall() convertOp = Js::OpCodeAsmJs::Conv_VTL; break; #ifdef ENABLE_WASM_SIMD - case WasmTypes::M128: - throw WasmCompilationException(_u("Return type: m128 not supported in import calls")); + case WasmTypes::V128: + throw WasmCompilationException(_u("Return type: v128 not supported in import calls")); #endif default: - WasmTypes::CompileAssertCasesNoFailFast(); + WasmTypes::CompileAssertCasesNoFailFast(); throw WasmCompilationException(_u("Unknown call return type %u"), singleResType); } Js::RegSlot location = GetRegisterSpace(singleResType)->AcquireTmpRegister(); @@ -1562,8 +1526,8 @@ EmitInfo WasmBytecodeGenerator::EmitReplaceLaneExpr(Js::OpCodeAsmJs op, const Wa const WasmTypes::WasmType valueType = signature[1]; EmitInfo valueArg = PopEvalStack(valueType, _u("lane argument type mismatch")); - EmitInfo simdArg = PopEvalStack(WasmTypes::M128, _u("simd argument type mismatch")); - Assert(resultType == WasmTypes::M128); + EmitInfo simdArg = PopEvalStack(WasmTypes::V128, _u("simd argument type mismatch")); + Assert(resultType == WasmTypes::V128); EmitInfo indexInfo = EmitLaneIndex(op); Js::RegSlot resultReg = GetRegisterSpace(resultType)->AcquireTmpRegister(); @@ -1571,27 +1535,36 @@ EmitInfo WasmBytecodeGenerator::EmitReplaceLaneExpr(Js::OpCodeAsmJs op, const Wa m_writer->AsmReg4(op, resultReg, simdArg.location, indexInfo.location, valueArg.location); ReleaseLocation(&indexInfo); + ReleaseLocation(&valueArg); return result; } -EmitInfo WasmBytecodeGenerator::EmitM128BitSelect() +EmitInfo WasmBytecodeGenerator::EmitV128BitSelect() { - EmitInfo mask = PopEvalStack(WasmTypes::M128); - EmitInfo arg2Info = PopEvalStack(WasmTypes::M128); - EmitInfo arg1Info = PopEvalStack(WasmTypes::M128); - Js::RegSlot resultReg = GetRegisterSpace(WasmTypes::M128)->AcquireTmpRegister(); - EmitInfo resultInfo(resultReg, WasmTypes::M128); + EmitInfo mask = PopEvalStack(WasmTypes::V128); + EmitInfo arg2Info = PopEvalStack(WasmTypes::V128); + EmitInfo arg1Info = PopEvalStack(WasmTypes::V128); + + ReleaseLocation(&mask); + ReleaseLocation(&arg2Info); + ReleaseLocation(&arg1Info); + + Js::RegSlot resultReg = GetRegisterSpace(WasmTypes::V128)->AcquireTmpRegister(); + EmitInfo resultInfo(resultReg, WasmTypes::V128); m_writer->AsmReg4(Js::OpCodeAsmJs::Simd128_BitSelect_I4, resultReg, arg1Info.location, arg2Info.location, mask.location); return resultInfo; } EmitInfo WasmBytecodeGenerator::EmitV8X16Shuffle() { - EmitInfo arg2Info = PopEvalStack(WasmTypes::M128); - EmitInfo arg1Info = PopEvalStack(WasmTypes::M128); + EmitInfo arg2Info = PopEvalStack(WasmTypes::V128); + EmitInfo arg1Info = PopEvalStack(WasmTypes::V128); + + ReleaseLocation(&arg2Info); + ReleaseLocation(&arg1Info); - Js::RegSlot resultReg = GetRegisterSpace(WasmTypes::M128)->AcquireTmpRegister(); - EmitInfo resultInfo(resultReg, WasmTypes::M128); + Js::RegSlot resultReg = GetRegisterSpace(WasmTypes::V128)->AcquireTmpRegister(); + EmitInfo resultInfo(resultReg, WasmTypes::V128); uint8* indices = GetReader()->m_currentNode.shuffle.indices; for (uint i = 0; i < Simd::MAX_LANES; i++) @@ -1611,17 +1584,17 @@ EmitInfo WasmBytecodeGenerator::EmitExtractLaneExpr(Js::OpCodeAsmJs op, const Wa WasmTypes::WasmType resultType = signature[0]; WasmTypes::WasmType simdArgType = signature[1]; - EmitInfo simdArgInfo = PopEvalStack(simdArgType, _u("Argument should be of type M128")); + EmitInfo simdArgInfo = PopEvalStack(simdArgType, _u("Argument should be of type V128")); + ReleaseLocation(&simdArgInfo); Js::RegSlot resultReg = GetRegisterSpace(resultType)->AcquireTmpRegister(); EmitInfo resultInfo(resultReg, resultType); //put index into a register to reuse the existing infra in Interpreter and Compiler EmitInfo indexInfo = EmitLaneIndex(op); + ReleaseLocation(&indexInfo); m_writer->AsmReg3(op, resultReg, simdArgInfo.location, indexInfo.location); - ReleaseLocation(&indexInfo); - ReleaseLocation(&simdArgInfo); return resultInfo; } @@ -1631,11 +1604,11 @@ EmitInfo WasmBytecodeGenerator::EmitSimdMemAccess(Js::OpCodeAsmJs op, const Wasm WasmTypes::WasmType type = signature[0]; SetUsesMemory(0); - const uint32 mask = Js::ArrayBufferView::ViewMask[viewType]; + const uint32 naturalAlignment = 16; const uint alignment = GetReader()->m_currentNode.mem.alignment; const uint offset = GetReader()->m_currentNode.mem.offset; - if ((mask << 1) & (1 << alignment)) + if (alignment > naturalAlignment) { throw WasmCompilationException(_u("alignment must not be larger than natural")); } @@ -1828,7 +1801,7 @@ Js::OpCodeAsmJs WasmBytecodeGenerator::GetLoadOp(WasmTypes::WasmType wasmType) case WasmTypes::I64: return Js::OpCodeAsmJs::Ld_Long; #ifdef ENABLE_WASM_SIMD - case WasmTypes::M128: + case WasmTypes::V128: Simd::EnsureSimdIsEnabled(); return Js::OpCodeAsmJs::Simd128_Ld_F4; #endif @@ -1840,7 +1813,7 @@ Js::OpCodeAsmJs WasmBytecodeGenerator::GetLoadOp(WasmTypes::WasmType wasmType) return Js::OpCodeAsmJs::Ld_Int; } default: - WasmTypes::CompileAssertCasesNoFailFast(); + WasmTypes::CompileAssertCasesNoFailFast(); throw WasmCompilationException(_u("Unknown load operator %u"), wasmType); } } @@ -1863,7 +1836,7 @@ Js::OpCodeAsmJs WasmBytecodeGenerator::GetReturnOp(WasmTypes::WasmType type) retOp = Js::OpCodeAsmJs::Return_Long; break; #ifdef ENABLE_WASM_SIMD - case WasmTypes::M128: + case WasmTypes::V128: Simd::EnsureSimdIsEnabled(); retOp = Js::OpCodeAsmJs::Simd128_Return_F4; break; @@ -1876,7 +1849,7 @@ Js::OpCodeAsmJs WasmBytecodeGenerator::GetReturnOp(WasmTypes::WasmType type) return Js::OpCodeAsmJs::Return_Int; } default: - WasmTypes::CompileAssertCasesNoFailFast(); + WasmTypes::CompileAssertCasesNoFailFast(); throw WasmCompilationException(_u("Unknown return type %u"), type); } return retOp; @@ -2057,12 +2030,12 @@ WasmRegisterSpace* WasmBytecodeGenerator::GetRegisterSpace(WasmTypes::WasmType t case WasmTypes::F32: return mTypedRegisterAllocator.GetRegisterSpace(WAsmJs::FLOAT32); case WasmTypes::F64: return mTypedRegisterAllocator.GetRegisterSpace(WAsmJs::FLOAT64); #ifdef ENABLE_WASM_SIMD - case WasmTypes::M128: + case WasmTypes::V128: Simd::EnsureSimdIsEnabled(); return mTypedRegisterAllocator.GetRegisterSpace(WAsmJs::SIMD); #endif default: - WasmTypes::CompileAssertCasesNoFailFast(); + WasmTypes::CompileAssertCasesNoFailFast(); throw WasmCompilationException(_u("Unknown type %u"), type); } } diff --git a/lib/WasmReader/WasmByteCodeGenerator.h b/lib/WasmReader/WasmByteCodeGenerator.h index 6dd65604800..2d67d733768 100644 --- a/lib/WasmReader/WasmByteCodeGenerator.h +++ b/lib/WasmReader/WasmByteCodeGenerator.h @@ -205,8 +205,6 @@ namespace Wasm private: void GenerateFunction(); - template - EmitInfo EmitSimdBuildExpr(Js::OpCodeAsmJs op, const WasmTypes::WasmType* signature); void EmitExpr(WasmOp op); PolymorphicEmitInfo EmitBlock(); void EmitBlockCommon(BlockInfo* blockInfo, bool* endOnElse = nullptr); @@ -242,7 +240,7 @@ namespace Wasm EmitInfo EmitSimdMemAccess(Js::OpCodeAsmJs op, const WasmTypes::WasmType* signature, Js::ArrayBufferView::ViewType viewType, uint8 dataWidth, bool isStore); EmitInfo EmitBinExpr(Js::OpCodeAsmJs op, const WasmTypes::WasmType* signature); EmitInfo EmitUnaryExpr(Js::OpCodeAsmJs op, const WasmTypes::WasmType* signature); - EmitInfo EmitM128BitSelect(); + EmitInfo EmitV128BitSelect(); EmitInfo EmitV8X16Shuffle(); EmitInfo EmitExtractLaneExpr(Js::OpCodeAsmJs op, const WasmTypes::WasmType* signature); EmitInfo EmitReplaceLaneExpr(Js::OpCodeAsmJs op, const WasmTypes::WasmType* signature); diff --git a/lib/WasmReader/WasmCustomReader.cpp b/lib/WasmReader/WasmCustomReader.cpp index 307bfa10cef..11c49b675eb 100644 --- a/lib/WasmReader/WasmCustomReader.cpp +++ b/lib/WasmReader/WasmCustomReader.cpp @@ -44,7 +44,7 @@ void WasmCustomReader::AddNode(WasmNode node) m_nodes.Add(node); } -const uint32 WasmCustomReader::EstimateCurrentFunctionBytecodeSize() const +uint32 WasmCustomReader::EstimateCurrentFunctionBytecodeSize() const { uint32 count = min((uint32)m_nodes.Count(), (uint32)AutoSystemInfo::PageSize); // On average each node takes between 3 - 7 bytes to encode @@ -52,4 +52,4 @@ const uint32 WasmCustomReader::EstimateCurrentFunctionBytecodeSize() const } }; -#endif \ No newline at end of file +#endif diff --git a/lib/WasmReader/WasmCustomReader.h b/lib/WasmReader/WasmCustomReader.h index eb0785bc5c4..4d901231daf 100644 --- a/lib/WasmReader/WasmCustomReader.h +++ b/lib/WasmReader/WasmCustomReader.h @@ -15,7 +15,7 @@ namespace Wasm virtual bool IsCurrentFunctionCompleted() const override; virtual WasmOp ReadExpr() override; virtual void FunctionEnd() override; - virtual const uint32 EstimateCurrentFunctionBytecodeSize() const override; + virtual uint32 EstimateCurrentFunctionBytecodeSize() const override; void AddNode(WasmNode node); private: diff --git a/lib/WasmReader/WasmParseTree.cpp b/lib/WasmReader/WasmParseTree.cpp index bdae9c08ad3..4b6ee14c97a 100644 --- a/lib/WasmReader/WasmParseTree.cpp +++ b/lib/WasmReader/WasmParseTree.cpp @@ -81,7 +81,7 @@ bool IsLocalType(WasmTypes::WasmType type) { // Check if type in range ]Void,Limit[ #ifdef ENABLE_WASM_SIMD - if (type == WasmTypes::M128 && !Simd::IsEnabled()) + if (type == WasmTypes::V128 && !Simd::IsEnabled()) { return false; } @@ -99,7 +99,7 @@ uint32 GetTypeByteSize(WasmType type) case F32: return sizeof(float); case F64: return sizeof(double); #ifdef ENABLE_WASM_SIMD - case M128: + case V128: Simd::EnsureSimdIsEnabled(); CompileAssert(sizeof(Simd::simdvec) == 16); return sizeof(Simd::simdvec); @@ -119,7 +119,7 @@ const char16 * GetTypeName(WasmType type) case WasmTypes::WasmType::F32: return _u("f32"); case WasmTypes::WasmType::F64: return _u("f64"); #ifdef ENABLE_WASM_SIMD - case WasmTypes::WasmType::M128: + case WasmTypes::WasmType::V128: Simd::EnsureSimdIsEnabled(); return _u("m128"); #endif @@ -140,9 +140,9 @@ WasmTypes::WasmType LanguageTypes::ToWasmType(int8 binType) case LanguageTypes::f32: return WasmTypes::F32; case LanguageTypes::f64: return WasmTypes::F64; #ifdef ENABLE_WASM_SIMD - case LanguageTypes::m128: + case LanguageTypes::v128: Simd::EnsureSimdIsEnabled(); - return WasmTypes::M128; + return WasmTypes::V128; #endif default: throw WasmCompilationException(_u("Invalid binary type %d"), binType); diff --git a/lib/WasmReader/WasmParseTree.h b/lib/WasmReader/WasmParseTree.h index 1d84fdcc1fe..eb06ee991e7 100644 --- a/lib/WasmReader/WasmParseTree.h +++ b/lib/WasmReader/WasmParseTree.h @@ -42,7 +42,7 @@ namespace Wasm F32 = 3, F64 = 4, #ifdef ENABLE_WASM_SIMD - M128 = 5, + V128 = 5, #endif Limit, Ptr, @@ -55,7 +55,7 @@ namespace Wasm | 1 << F32 | 1 << F64 #ifdef ENABLE_WASM_SIMD - | 1 << M128 + | 1 << V128 #endif }; @@ -84,9 +84,9 @@ namespace Wasm } #ifdef ENABLE_WASM_SIMD -#define WASM_M128_CHECK_TYPE Wasm::WasmTypes::M128 +#define WASM_V128_CHECK_TYPE Wasm::WasmTypes::V128 #else -#define WASM_M128_CHECK_TYPE Wasm::WasmTypes::Limit +#define WASM_V128_CHECK_TYPE Wasm::WasmTypes::Limit #endif template diff --git a/lib/WasmReader/WasmReaderBase.h b/lib/WasmReader/WasmReaderBase.h index 8f71d883817..b5c6115df5b 100644 --- a/lib/WasmReader/WasmReaderBase.h +++ b/lib/WasmReader/WasmReaderBase.h @@ -14,7 +14,7 @@ namespace Wasm virtual bool IsCurrentFunctionCompleted() const = 0; virtual WasmOp ReadExpr() = 0; virtual void FunctionEnd() = 0; - virtual const uint32 EstimateCurrentFunctionBytecodeSize() const = 0; + virtual uint32 EstimateCurrentFunctionBytecodeSize() const = 0; WasmNode m_currentNode; }; } // namespace Wasm diff --git a/lib/WasmReader/WasmSectionLimits.h b/lib/WasmReader/WasmSectionLimits.h index 66e752b8e66..7c527ca20be 100644 --- a/lib/WasmReader/WasmSectionLimits.h +++ b/lib/WasmReader/WasmSectionLimits.h @@ -34,4 +34,4 @@ struct TableSectionLimits : public SectionLimits // Nothing specific to table section yet }; } -#endif \ No newline at end of file +#endif diff --git a/lib/WasmReader/WasmSignature.cpp b/lib/WasmReader/WasmSignature.cpp index 6d3d271ac17..58892179544 100644 --- a/lib/WasmReader/WasmSignature.cpp +++ b/lib/WasmReader/WasmSignature.cpp @@ -148,14 +148,14 @@ Js::ArgSlot WasmSignature::GetParamSize(Js::ArgSlot index) const return sizeof(int64); break; #ifdef ENABLE_WASM_SIMD - case WasmTypes::M128: + case WasmTypes::V128: Wasm::Simd::EnsureSimdIsEnabled(); CompileAssert(sizeof(Simd::simdvec) == 16); return sizeof(Simd::simdvec); break; #endif default: - WasmTypes::CompileAssertCasesNoFailFast(); + WasmTypes::CompileAssertCasesNoFailFast(); throw WasmCompilationException(_u("Invalid param type")); } } diff --git a/lib/wabt/.gitignore b/lib/wabt/.gitignore index 26e2e218dc4..bb28f19f806 100644 --- a/lib/wabt/.gitignore +++ b/lib/wabt/.gitignore @@ -3,8 +3,9 @@ /fuzz-out /emscripten *.pyc - +.idea/ +/cmake-build-debug/ .gitmodules /test /tests -/third_party \ No newline at end of file +/third_party diff --git a/lib/wabt/CMakeLists.txt b/lib/wabt/CMakeLists.txt index 2305b999d0a..994533f300e 100644 --- a/lib/wabt/CMakeLists.txt +++ b/lib/wabt/CMakeLists.txt @@ -40,10 +40,10 @@ check_type_size(size_t SIZEOF_SIZE_T) configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/src/config.h.in - ${CMAKE_CURRENT_SOURCE_DIR}/built/config.h + ${CMAKE_CURRENT_BINARY_DIR}/config.h ) -include_directories(chakra ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/built) +include_directories(chakra ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}) # disable -Wunused-parameter: this is really common when implementing # interfaces, etc. @@ -84,48 +84,41 @@ set(WAST_LEXER_GEN_CC src/prebuilt/wast-lexer-gen.cc) add_custom_target(everything) add_library(libwabt OBJECT - src/token.cc - src/opcode.cc - src/error-handler.cc - src/hash-util.cc - src/filenames.cc - src/string-view.cc - src/ir.cc - src/expr-visitor.cc - src/lexer-source.cc - src/lexer-source-line-finder.cc - src/wast-parser-lexer-shared.cc - ${WAST_LEXER_GEN_CC} - src/wast-parser.cc - src/type-checker.cc - src/validator.cc - + chakra/wabtapi.cc + src/apply-names.cc + src/binary.cc src/binary-reader.cc + src/binary-reader-ir.cc src/binary-reader-logging.cc src/binary-writer.cc src/binary-writer-spec.cc - src/binary-reader-ir.cc src/binding-hash.cc - src/wat-writer.cc - src/interp.cc - src/binary-reader-interp.cc - src/apply-names.cc - src/generate-names.cc - src/resolve-names.cc - - src/binary.cc src/color.cc src/common.cc src/config.cc + src/error-formatter.cc + src/expr-visitor.cc src/feature.cc + src/filenames.cc + src/generate-names.cc + src/hash-util.cc + src/ir.cc src/leb128.cc + src/lexer-source.cc + src/lexer-source-line-finder.cc src/literal.cc + src/opcode.cc + src/opcode-code-table.c src/option-parser.cc + src/resolve-names.cc src/stream.cc + src/string-view.cc + src/token.cc src/tracing.cc + src/type-checker.cc src/utf8.cc - - chakra/wabtapi.cc - - + src/validator.cc + src/wast-parser.cc + src/wat-writer.cc + ${WAST_LEXER_GEN_CC} ) diff --git a/lib/wabt/README.md b/lib/wabt/README.md index 0eeccff56c7..80aca09e83e 100644 --- a/lib/wabt/README.md +++ b/lib/wabt/README.md @@ -1,4 +1,4 @@ -[![Build Status](https://travis-ci.org/WebAssembly/wabt.svg?branch=master)](https://travis-ci.org/WebAssembly/wabt) [![Windows status](https://ci.appveyor.com/api/projects/status/79hqj5l0qggw645d/branch/master?svg=true)](https://ci.appveyor.com/project/WebAssembly/wabt/branch/master) +[![Build Status](https://travis-ci.org/WebAssembly/wabt.svg?branch=master)](https://travis-ci.org/WebAssembly/wabt) [![Windows status](https://ci.appveyor.com/api/projects/status/8vl5jwtk5ch6r84t/branch/master?svg=true)](https://ci.appveyor.com/project/WebAssembly/wabt/branch/master) # WABT: The WebAssembly Binary Toolkit @@ -24,9 +24,9 @@ target; instead they aim for full fidelity and compliance with the spec (e.g. Wabt has been compiled to JavaScript via emscripten. Some of the functionality is available in the following demos: -- [index](https://cdn.rawgit.com/WebAssembly/wabt/aae5a4b7/demo/index.html) -- [wat2wasm](https://cdn.rawgit.com/WebAssembly/wabt/aae5a4b7/demo/wat2wasm/) -- [wasm2wat](https://cdn.rawgit.com/WebAssembly/wabt/aae5a4b7/demo/wasm2wat/) +- [index](https://webassembly.github.io/wabt/demo/) +- [wat2wasm](https://webassembly.github.io/wabt/demo/wat2wasm/) +- [wasm2wat](https://webassembly.github.io/wabt/demo/wasm2wat/) ## Cloning @@ -53,6 +53,10 @@ $ make This will build the default version of the tools: a debug build using the Clang compiler. +**NOTE**: Under the hood, this uses make to run CMake, which then calls make again. +On some systems, this doesn't build properly. If you see these errors, you can build +using CMake directly as described below. + There are many make targets available for other configurations as well. They are generated from every combination of a compiler, build type and configuration. @@ -71,6 +75,8 @@ $ make clang-debug-lsan $ make gcc-debug-no-re2c ``` +### Building using CMake directly + You can also run CMake yourself, the normal way: ```console @@ -149,13 +155,13 @@ $ out/wat2wasm spec-test.wast -v $ out/wast2json spec-test.wast -o spec-test.json ``` -You can use `-h` to get additional help: +You can use `--help` to get additional help: ```console -$ out/wat2wasm -h +$ out/wat2wasm --help ``` -Or try the [online demo](https://cdn.rawgit.com/WebAssembly/wabt/aae5a4b7/demo/wat2wasm/). +Or try the [online demo](https://webassembly.github.io/wabt/demo/wat2wasm/). ## Running wasm2wat @@ -169,13 +175,13 @@ $ out/wasm2wat test.wasm -o test.wat $ out/wasm2wat test.wasm -o test.wat ``` -You can use `-h` to get additional help: +You can use `--help` to get additional help: ```console -$ out/wasm2wat -h +$ out/wasm2wat --help ``` -Or try the [online demo](https://cdn.rawgit.com/WebAssembly/wabt/aae5a4b7/demo/wasm2wat/). +Or try the [online demo](https://webassembly.github.io/wabt/demo/wasm2wat/). ## Running wasm-interp @@ -199,10 +205,10 @@ $ out/wasm-interp test.json --spec $ out/wasm-interp test.wasm -V 100 --run-all-exports ``` -You can use `-h` to get additional help: +You can use `--help` to get additional help: ```console -$ out/wasm-interp -h +$ out/wasm-interp --help ``` ## Running wasm2c diff --git a/lib/wabt/chakra/wabtapi.cc b/lib/wabt/chakra/wabtapi.cc index 816ed38306f..30041ccf8b4 100644 --- a/lib/wabt/chakra/wabtapi.cc +++ b/lib/wabt/chakra/wabtapi.cc @@ -10,7 +10,8 @@ #include "src/wast-lexer.h" #include "src/resolve-names.h" #include "src/binary-writer.h" -#include "src/error-handler.h" +#include "src/error.h" +#include "src/error-formatter.h" #include "src/ir.h" #include "src/cast.h" #include "src/validator.h" @@ -19,38 +20,33 @@ using namespace wabt; using namespace ChakraWabt; -class MyErrorHandler : public ErrorHandler +void CheckResult( + Result result, + Errors* errors, + WastLexer* lexer, + const char* errorMessage +) { -public: - MyErrorHandler() : ErrorHandler(Location::Type::Text) {} - - virtual bool OnError(ErrorLevel level, const Location& loc, const std::string& error, const std::string& source_line, size_t source_line_column_offset) override + if (!Succeeded(result)) { - int colStart = loc.first_column - 1 - (int)source_line_column_offset; - int sourceErrorLength = (loc.last_column - loc.first_column) - 2; - if (sourceErrorLength < 0) + if (errors && errors->size() > 0) { - // -2 probably overflowed - sourceErrorLength = 0; + std::string message = FormatErrorsToString( + *errors, + Location::Type::Text, + lexer->MakeLineFinder().get(), + wabt::Color(), + errorMessage, + PrintHeader::Once, + 256 + ); + char buf[4096]; + wabt_snprintf(buf, 4096, "Wast Parsing %s", message.c_str()); + throw WabtAPIError(buf); } - char buf[4096]; - wabt_snprintf(buf, 4096, "Wast Parsing %s:%u:%u:\n%s\n%s\n%*s^%*s^", - GetErrorLevelName(level), - loc.line, - loc.first_column, - error.c_str(), - source_line.c_str(), - colStart, "", - sourceErrorLength, ""); - throw Error(buf); + throw WabtAPIError(errorMessage); } - - virtual size_t source_line_max_length() const override - { - return 256; - } - -}; +} namespace ChakraWabt { @@ -58,7 +54,6 @@ namespace ChakraWabt { ChakraContext* chakra; WastLexer* lexer; - MyErrorHandler* errorHandler; }; } @@ -91,7 +86,7 @@ uint TruncSizeT(size_t value) { if (value > 0xffffffff) { - throw Error("Out of Memory"); + throw WabtAPIError("Out of Memory"); } return (uint)value; } @@ -101,7 +96,7 @@ void set_property(Context* ctx, Js::Var obj, PropertyId id, Js::Var value, const bool success = ctx->chakra->spec->setProperty(obj, id, value, ctx->chakra->user_data); if (!success) { - throw Error(messageIfFailed); + throw WabtAPIError(messageIfFailed); } } @@ -166,7 +161,7 @@ void write_command_type(Context* ctx, CommandType type, Js::Var cmdObj) uint i = (uint)type; if (i > (uint)CommandType::Last) { - throw Error("invalid command type"); + throw WabtAPIError("invalid command type"); } write_string(ctx, cmdObj, PropertyIds::type, s_command_names[i]); } @@ -203,7 +198,7 @@ Js::Var create_const_vector(Context* ctx, const ConstVector& consts) break; default: assert(0); - throw Error("invalid constant type"); + throw WabtAPIError("invalid constant type"); } write_string(ctx, constDescriptor, PropertyIds::value, buf); } @@ -287,19 +282,21 @@ Js::Var create_module(Context* ctx, const Module* module, bool validate = true) { if (!module) { - throw Error("No module found"); + throw WabtAPIError("No module found"); } if (validate) { ValidateOptions options(GetWabtFeatures(*ctx->chakra)); - ValidateModule(ctx->lexer, module, ctx->errorHandler, &options); + Errors errors; + Result result = ValidateModule(module, &errors, options); + CheckResult(result, &errors, ctx->lexer, "Failed to validate module"); } MemoryStream stream; WriteBinaryOptions s_write_binary_options; - Result result = WriteBinaryModule(&stream, module, &s_write_binary_options); + Result result = WriteBinaryModule(&stream, module, s_write_binary_options); if (!Succeeded(result)) { - throw Error("Error while writing module"); + throw WabtAPIError("Error while writing module"); } const uint8_t* data = stream.output_buffer().data.data(); const size_t size = stream.output_buffer().size(); @@ -469,25 +466,17 @@ Js::Var write_commands(Context* ctx, Script* script) void Validate(const ChakraContext& ctx, bool isSpec) { - if (!ctx.createBuffer) throw Error("Missing createBuffer"); + if (!ctx.createBuffer) throw WabtAPIError("Missing createBuffer"); if (isSpec) { - if (!ctx.spec) throw Error("Missing Spec context"); - if (!ctx.spec->setProperty) throw Error("Missing spec->setProperty"); - if (!ctx.spec->int32ToVar) throw Error("Missing spec->int32ToVar"); - if (!ctx.spec->int64ToVar) throw Error("Missing spec->int64ToVar"); - if (!ctx.spec->stringToVar) throw Error("Missing spec->stringToVar"); - if (!ctx.spec->createObject) throw Error("Missing spec->createObject"); - if (!ctx.spec->createArray) throw Error("Missing spec->createArray"); - if (!ctx.spec->push) throw Error("Missing spec->push"); - } -} - -void CheckResult(Result result, const char* errorMessage) -{ - if (!Succeeded(result)) - { - throw Error(errorMessage); + if (!ctx.spec) throw WabtAPIError("Missing Spec context"); + if (!ctx.spec->setProperty) throw WabtAPIError("Missing spec->setProperty"); + if (!ctx.spec->int32ToVar) throw WabtAPIError("Missing spec->int32ToVar"); + if (!ctx.spec->int64ToVar) throw WabtAPIError("Missing spec->int64ToVar"); + if (!ctx.spec->stringToVar) throw WabtAPIError("Missing spec->stringToVar"); + if (!ctx.spec->createObject) throw WabtAPIError("Missing spec->createObject"); + if (!ctx.spec->createArray) throw WabtAPIError("Missing spec->createArray"); + if (!ctx.spec->push) throw WabtAPIError("Missing spec->push"); } } @@ -497,32 +486,31 @@ Js::Var ChakraWabt::ConvertWast2Wasm(ChakraContext& chakraCtx, char* buffer, uin std::unique_ptr lexer = WastLexer::CreateBufferLexer("", buffer, (size_t)bufferSize); - MyErrorHandler s_error_handler; WastParseOptions options(GetWabtFeatures(chakraCtx)); Context ctx; ctx.chakra = &chakraCtx; - ctx.errorHandler = &s_error_handler; ctx.lexer = lexer.get(); + Errors errors; if (isSpecText) { std::unique_ptr